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

    namespace export yylex
}

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

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

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

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

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

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

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

array set sampfirst::rules {
  27,l 281
  9,l 277
  11,l 278
  15,l 278
  20,l 279
  19,l 279
  2,l 275
  24,l 280
  6,l 275
  28,l 281
  12,l 278
  16,l 278
  21,l 279
  3,l 275
  25,l 280
  7,l 275
  13,l 278
  0,l 282
  17,l 278
  22,l 279
  4,l 275
  26,l 281
  8,l 276
  10,l 276
  14,l 278
  18,l 278
  1,l 275
  23,l 280
  5,l 275
}

array set sampfirst::rules {
  23,dc 0
  5,dc 1
  0,dc 1
  17,dc 2
  12,dc 2
  26,dc 1
  8,dc 1
  21,dc 1
  3,dc 1
  15,dc 1
  10,dc 3
  24,dc 1
  6,dc 1
  18,dc 2
  1,dc 0
  13,dc 2
  27,dc 2
  9,dc 0
  22,dc 1
  4,dc 1
  16,dc 2
  11,dc 1
  25,dc 1
  7,dc 1
  20,dc 1
  19,dc 0
  2,dc 1
  14,dc 1
  28,dc 2
}

array set sampfirst::rules {
  13,line 57
  25,line 72
  7,line 47
  10,line 51
  22,line 67
  4,line 44
  18,line 62
  1,line 41
  15,line 59
  27,line 76
  9,line 50
  12,line 55
  24,line 71
  6,line 46
  21,line 66
  3,line 43
  17,line 61
  14,line 58
  26,line 75
  8,line 50
  11,line 54
  23,line 70
  5,line 45
  20,line 65
  19,line 64
  2,line 42
  9,e 1
  16,line 60
  28,line 77
}

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

array set sampfirst::token_id_table {
  280,title {}
  279,title {}
  264,line 18
  270,t 0
  269,t 0
  276,line 49
  265,title CLIENT
  274,t 0
  261,line 11
  257,t 0
  270,title INFO
  269,title IMAGE
  273,line 27
  278,t 1
  257,line 7
  262,t 0
  274,title TABLE
  270,line 24
  269,line 23
  259,title ON
  260,title OFF
  266,t 0
  278,title {}
  282,line 78
  error error
  271,t 0
  264,title BROADCAST
  266,line 20
  278,line 53
  275,t 1
  error,line 39
  268,title HUB
  258,t 0
  263,line 14
  error,title {}
  280,t 1
  279,t 1
  275,line 40
  273,title STOP
  263,t 0
  259,line 9
  260,line 10
  258,title NO
  277,title {}
  272,line 26
  267,t 0
  263,title string
  282,title {}
  272,t 0
  268,line 22
  267,title DISCONNECT
  257 YES_
  281,line 74
  276,t 1
  258 NO_
  259,t 0
  259 ON_
  260 OFF_
  260,t 0
  272,title START
  261 TRUE_
  265,line 19
  262 FALSE_
  281,t 1
  263 STRING_
  277,line 50
  257,title YES
  264 BROADCAST_
  264,t 0
  276,title {}
  265 CLIENT_
  262,line 12
  266 CONNECT_
  267 DISCONNECT_
  0,t 0
  0 {$}
  262,title FALSE
  268 HUB_
  268,t 0
  281,title {}
  274,line 28
  270 INFO_
  269 IMAGE_
  error,t 0
  271 SEND_
  272 START_
  258,line 8
  273,t 0
  273 STOP_
  266,title CONNECT
  274 TABLE_
  275 yesno
  271,line 25
  276 command
  277,t 1
  277 @PSEUDO1
  271,title SEND
  278 samp
  261,t 0
  280 broadcast
  279 hub
  281 send
  267,line 21
  282,t 1
  282 start'
  275,title {}
  265,t 0
  280,line 69
  279,line 64
  261,title TRUE
}

proc sampfirst::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 pds9 samp $1 }
                    12 { ProcessCmdSet pds9 samp $2 }
                    13 { ProcessCmdSet pds9 samphub $2 }
                }
                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 sampfirst::yyerror {msg} {
     variable yycnt
     variable yy_current_buffer
     variable index_

     ParserError $msg $yycnt $yy_current_buffer $index_
}
