package provide DS9 1.0

######
# Begin autogenerated taccle (version 1.3) routines.
# Although taccle itself is protected by the GNU Public License (GPL)
# all user-supplied functions are protected by their respective
# author's license.  See http://mini.net/tcl/taccle for other details.
######

namespace eval prefssend {
    variable yylval {}
    variable table
    variable rules
    variable token {}
    variable yycnt 0
    variable yyerr 0
    variable save_state 0

    namespace export yylex
}

proc prefssend::YYABORT {} {
    return -code return 1
}

proc prefssend::YYACCEPT {} {
    return -code return 0
}

proc prefssend::YYERROR {} {
    variable yyerr
    set yyerr 1
}

proc prefssend::yyclearin {} {
    variable token
    variable yycnt
    set token {}
    incr yycnt -1
}

proc prefssend::yyerror {s} {
    puts stderr $s
}

proc prefssend::setupvalues {stack pointer numsyms} {
    upvar 1 1 y
    set y {}
    for {set i 1} {$i <= $numsyms} {incr i} {
        upvar 1 $i y
        set y [lindex $stack $pointer]
        incr pointer
    }
}

proc prefssend::unsetupvalues {numsyms} {
    for {set i 1} {$i <= $numsyms} {incr i} {
        upvar 1 $i y
        unset y
    }
}

array set prefssend::table {
  0:257 shift
  0:258 shift
  23:0,target 7
  0:260 shift
  27:0 reduce
  15:0,target 18
  9:0 reduce
  0:261 shift
  0:266,target 7
  19:259 shift
  11:0 accept
  0:262 shift
  6:257 shift
  1:259,target 12
  0:265 shift
  6:258 shift
  15:0 reduce
  0:266 shift
  0:267 shift
  6:258,target 20
  0:265,target 6
  0:268 shift
  24:0,target 20
  0:270 goto
  0:269 shift
  2:273,target 14
  20:0 reduce
  19:0 reduce
  16:0,target 6
  2:0 reduce
  15:274 goto
  20:272 goto
  19:272 goto
  24:0 reduce
  2:273 goto
  6:257,target 19
  20:272,target 28
  19:272,target 27
  6:271 goto
  4:274 goto
  28:0 reduce
  25:0,target 8
  7:0,target 12
  26:272 goto
  17:0,target 5
  12:0 reduce
  5:263,target 18
  10:0,target 11
  16:0 reduce
  12:273,target 22
  26:0,target 16
  21:0 reduce
  8:0,target 9
  3:274,target 16
  3:0 reduce
  18:0,target 19
  1:0,target 17
  19:259,target 26
  11:0,target 0
  0:262,target 5
  15:274,target 23
  25:0 reduce
  7:0 reduce
  1:259 shift
  18:275,target 25
  29:0 reduce
  3:259 shift
  27:0,target 14
  13:0 reduce
  9:0,target 10
  0:261,target 4
  20:0,target 16
  19:0,target 16
  18:264 shift
  2:0,target 17
  26:272,target 29
  12:0,target 17
  12:273 goto
  18:264,target 24
  17:0 reduce
  5:263 shift
  0:260,target 3
  22:0 reduce
  0:270,target 11
  0:269,target 10
  4:0 reduce
  28:0,target 13
  1:273 goto
  21:0,target 1
  3:0,target 18
  18:275 goto
  13:0,target 3
  26:0 reduce
  8:0 reduce
  1:273,target 13
  3:274 goto
  10:0 reduce
  0:258,target 2
  0:268,target 9
  4:274,target 17
  14:0 reduce
  29:0,target 15
  3:259,target 15
  22:0,target 4
  4:0,target 18
  14:0,target 2
  18:0 reduce
  0:257,target 1
  1:0 reduce
  0:267,target 8
  6:271,target 21
  23:0 reduce
}

array set prefssend::rules {
  9,l 270
  11,l 270
  15,l 271
  20,l 275
  19,l 275
  2,l 270
  6,l 270
  12,l 270
  16,l 272
  3,l 270
  7,l 270
  13,l 271
  0,l 276
  17,l 273
  4,l 270
  8,l 270
  10,l 270
  14,l 271
  18,l 274
  1,l 270
  5,l 270
}

array set prefssend::rules {
  5,dc 2
  0,dc 1
  17,dc 0
  12,dc 1
  8,dc 3
  3,dc 2
  15,dc 3
  10,dc 1
  6,dc 2
  18,dc 0
  1,dc 2
  13,dc 2
  9,dc 1
  4,dc 3
  16,dc 0
  11,dc 1
  7,dc 3
  20,dc 1
  19,dc 0
  2,dc 2
  14,dc 2
}

array set prefssend::rules {
  13,line 41
  7,line 33
  10,line 36
  4,line 29
  18,line 52
  1,line 26
  15,line 43
  9,line 35
  12,line 38
  6,line 31
  3,line 28
  17,line 49
  14,line 42
  8,line 34
  11,line 37
  5,line 30
  20,line 56
  19,line 55
  2,line 27
  16,line 46
}

array set prefssend::lr1_table {
  14,trans {}
  1,trans {{259 12} {273 13}}
  18,trans {{264 24} {275 25}}
  23,trans {}
  5,trans {{263 18}}
  27,trans {}
  9,trans {}
  13,trans {}
  0,trans {{257 1} {258 2} {260 3} {261 4} {262 5} {265 6} {266 7} {267 8} {268 9} {269 10} {270 11}}
  17,trans {}
  22,trans {}
  4,trans {{274 17}}
  26,trans {{272 29}}
  8,trans {}
  12,trans {{273 22}}
  16,trans {}
  21,trans {}
  3,trans {{259 15} {274 16}}
  10 {{11 0 1}}
  11 {{0 0 1}}
  25,trans {}
  12 {{4 0 2} {17 0 0}}
  7,trans {}
  13 {{3 0 2}}
  14 {{2 0 2}}
  15 {{7 0 2} {18 0 0}}
  11,trans {}
  29,trans {}
  16 {{6 0 2}}
  0 {{0 0 0} {1 0 0} {2 0 0} {3 0 0} {4 0 0} {5 0 0} {6 0 0} {7 0 0} {8 0 0} {9 0 0} {10 0 0} {11 0 0} {12 0 0}}
  17 {{5 0 2}}
  1 {{3 0 1} {4 0 1} {17 0 0}}
  18 {{8 0 2} {19 0 0} {20 0 0}}
  2 {{2 0 1} {17 0 0}}
  19 {{14 0 1} {15 0 1} {16 0 0}}
  20 {{13 0 1} {16 0 0}}
  15,trans {{274 23}}
  3 {{6 0 1} {7 0 1} {18 0 0}}
  21 {{1 0 2}}
  4 {{5 0 1} {18 0 0}}
  22 {{4 0 3}}
  5 {{8 0 1}}
  23 {{7 0 3}}
  20,trans {{272 28}}
  6 {{1 0 1} {13 0 0} {14 0 0} {15 0 0}}
  2,trans {{273 14}}
  24 {{20 0 1}}
  19,trans {{259 26} {272 27}}
  7 {{12 0 1}}
  25 {{8 0 3}}
  8 {{9 0 1}}
  26 {{15 0 2} {16 0 0}}
  9 {{10 0 1}}
  27 {{14 0 2}}
  24,trans {}
  28 {{13 0 2}}
  6,trans {{257 19} {258 20} {271 21}}
  29 {{15 0 3}}
  10,trans {}
  28,trans {}
}

array set prefssend::token_id_table {
  264,line 16
  270,t 1
  269,t 0
  276,line 57
  265,title HAS
  274,t 1
  261,line 12
  257,t 0
  270,title {}
  269,title THREADS
  273,line 48
  257,line 8
  262,t 0
  274,title {}
  270,line 25
  269,line 21
  259,title COLOR
  260,title NAN
  266,t 0
  271,t 1
  error error
  264,title INTERVAL
  266,line 18
  275,t 1
  error,line 24
  268,title THEME
  258,t 0
  263,line 15
  error,title {}
  275,line 54
  273,title {}
  263,t 0
  259,line 10
  260,line 11
  258,title BGCOLOR
  272,line 45
  267,t 0
  263,title RECOVERY
  272,t 1
  268,line 20
  267,title PRECISION
  257 BACKGROUND_
  276,t 1
  258 BGCOLOR_
  259,t 0
  259 COLOR_
  260 NAN_
  260,t 0
  272,title {}
  261 NANCOLOR_
  265,line 17
  262 AUTO_
  263 RECOVERY_
  257,title BACKGROUND
  264 INTERVAL_
  264,t 0
  276,title {}
  265 HAS_
  262,line 14
  266 IRAFALIGN_
  267 PRECISION_
  0,t 0
  0 {$}
  262,title AUTO
  268 THEME_
  268,t 0
  274,line 51
  270 prefssend
  269 THREADS_
  271 has
  error,t 0
  272 hasbg
  258,line 9
  273,t 1
  273 bg
  266,title IRAFALIGN
  274 nan
  275 autosave
  271,line 40
  276 start'
  271,title {}
  261,t 0
  267,line 19
  275,title {}
  265,t 0
  261,title NANCOLOR
}

proc prefssend::yyparse {} {
    variable yylval
    variable table
    variable rules
    variable token
    variable yycnt
    variable lr1_table
    variable token_id_table
    variable yyerr
    variable save_state

    set yycnt 0
    set state_stack {0}
    set value_stack {{}}
    set token ""
    set accepted 0
    set yyerr 0
    set save_state 0

    while {$accepted == 0} {
        set state [lindex $state_stack end]
        if {$token == ""} {
            set yylval ""
            set token [yylex]
            set buflval $yylval
	    if {$token>0} {
	        incr yycnt
            }
        }
        if {![info exists table($state:$token)] || $yyerr} {
	    if {!$yyerr} {
	        set save_state $state
	    }
            # pop off states until error token accepted
            while {[llength $state_stack] > 0 && \
                       ![info exists table($state:error)]} {
                set state_stack [lrange $state_stack 0 end-1]
                set value_stack [lrange $value_stack 0 \
                                       [expr {[llength $state_stack] - 1}]]
                set state [lindex $state_stack end]
            }
            if {[llength $state_stack] == 0} {
 
	        set rr { }
                if {[info exists lr1_table($save_state,trans)] && [llength $lr1_table($save_state,trans)] >= 1} {
                    foreach trans $lr1_table($save_state,trans) {
                        foreach {tok_id nextstate} $trans {
			    set ss $token_id_table($tok_id,title)
			    if {$ss != {}} {
			        append rr "$ss, "
                            }
                        }
                    }
                }
		set rr [string trimleft $rr { }]
		set rr [string trimright $rr {, }]
                yyerror "parse error, expecting: $rr"


                return 1
            }
            lappend state_stack [set state $table($state:error,target)]
            lappend value_stack {}
            # consume tokens until it finds an acceptable one
            while {![info exists table($state:$token)]} {
                if {$token == 0} {
                    yyerror "end of file while recovering from error"
                    return 1
                }
                set yylval {}
                set token [yylex]
                set buflval $yylval
            }
            continue
        }
        switch -- $table($state:$token) {
            shift {
                lappend state_stack $table($state:$token,target)
                lappend value_stack $buflval
                set token ""
            }
            reduce {
                set rule $table($state:$token,target)
                set ll $rules($rule,l)
                if {[info exists rules($rule,e)]} {
                    set dc $rules($rule,e)
                } else {
                    set dc $rules($rule,dc)
                }
                set stackpointer [expr {[llength $state_stack]-$dc}]
                setupvalues $value_stack $stackpointer $dc
                set _ $1
                set yylval [lindex $value_stack end]
                switch -- $rule {
                    9 { PrefsSendCmdPrecision }
                    10 { ProcessSendCmdGet pds9 theme }
                    11 { ProcessSendCmdGet ds9 threads }
                    12 { ProcessSendCmdYesNo pds9 iraf }
                    16 { ProcessSendCmdYesNo pds9 bg,use }
                    17 { ProcessSendCmdGet pds9 bg }
                    18 { ProcessSendCmdGet pds9 nan }
                    19 { ProcessSendCmdYesNo pds9 autosave }
                    20 { ProcessSendCmdGet pds9 autosave,interval }
                }
                unsetupvalues $dc
                # pop off tokens from the stack if normal rule
                if {![info exists rules($rule,e)]} {
                    incr stackpointer -1
                    set state_stack [lrange $state_stack 0 $stackpointer]
                    set value_stack [lrange $value_stack 0 $stackpointer]
                }
                # now do the goto transition
                lappend state_stack $table([lindex $state_stack end]:$ll,target)
                lappend value_stack $_
            }
            accept {
                set accepted 1
            }
            goto -
            default {
                puts stderr "Internal parser error: illegal command $table($state:$token)"
                return 2
            }
        }
    }
    return 0
}

######
# end autogenerated taccle functions
######

proc prefssend::yyerror {msg} {
     variable yycnt
     variable yy_current_buffer
     variable index_

     ParserError $msg $yycnt $yy_current_buffer $index_
}
