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 prefsfirst {
    variable yylval {}
    variable table
    variable rules
    variable token {}
    variable yycnt 0
    variable yyerr 0
    variable save_state 0

    namespace export yylex
}

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

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

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

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

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

proc prefsfirst::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 prefsfirst::unsetupvalues {numsyms} {
    for {set i 1} {$i <= $numsyms} {incr i} {
        upvar 1 $i y
        unset y
    }
}

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

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

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

array set prefsfirst::rules {
  13,line 53
  7,line 44
  10,line 48
  4,line 41
  1,line 38
  15,line 55
  9,line 47
  12,line 52
  6,line 43
  3,line 40
  17,line 57
  14,line 54
  8,line 47
  11,line 51
  5,line 42
  2,line 39
  9,e 1
  16,line 56
}

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

array set prefsfirst::token_id_table {
  264,line 16
  270,t 0
  269,t 0
  265,title BGCOLOR
  274,t 1
  261,line 11
  257,t 0
  270,title THREADS
  269,title PRECISION
  273,line 47
  257,line 7
  262,t 0
  274,title {}
  270,line 25
  269,line 24
  259,title ON
  260,title OFF
  266,t 0
  271,t 1
  error error
  264,title string
  266,line 21
  275,t 1
  error,line 36
  268,title NANCOLOR
  258,t 0
  263,line 14
  error,title {}
  275,line 58
  273,title {}
  263,t 0
  259,line 9
  260,line 10
  258,title NO
  272,line 46
  267,t 0
  263,title integer
  272,t 1
  268,line 23
  267,title IRAFALIGN
  257 YES_
  258 NO_
  259,t 0
  259 ON_
  260 OFF_
  260,t 0
  272,title {}
  261 TRUE_
  265,line 20
  262 FALSE_
  263 INT_
  257,title YES
  264 STRING_
  264,t 0
  265 BGCOLOR_
  262,line 12
  266 CLEAR_
  267 IRAFALIGN_
  0,t 0
  0 {$}
  262,title FALSE
  268 NANCOLOR_
  268,t 0
  274,line 50
  270 THREADS_
  269 PRECISION_
  271 yesno
  error,t 0
  272 command
  258,line 8
  273,t 1
  273 @PSEUDO1
  266,title CLEAR
  274 prefs
  275 start'
  271,line 37
  271,title {}
  261,t 0
  267,line 22
  275,title {}
  265,t 0
  261,title TRUE
}

proc prefsfirst::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 {
                    1 { set _ 1 }
                    2 { set _ 1 }
                    3 { set _ 1 }
                    4 { set _ 1 }
                    5 { set _ 0 }
                    6 { set _ 0 }
                    7 { set _ 0 }
                    9 { global ds9; if {!$ds9(init)} {YYERROR} else {yyclearin; YYACCEPT} }
                    11 { ProcessCmdSet ds9 prefs $1 }
                }
                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 prefsfirst::yyerror {msg} {
     variable yycnt
     variable yy_current_buffer
     variable index_

     ParserError $msg $yycnt $yy_current_buffer $index_
}
