Index by: file name | procedure name | procedure call | annotation
gscope_basic.tcl (annotations | original source)

#rR gscope_basic.tcl

proc TestStack {} {
    puts [PushOnStack Bonjour]
    puts [PushOnStack Ca]
    puts [PushOnStack va]
    puts [IsEmptyStack]
    puts [PullFromStack]
    puts [ValFromStack]
    puts [ValFromStack]
    puts [ValFromStack]
    puts [PullFromStack]
    puts [PullFromStack]
    puts [PullFromStack]
    puts [PullFromStack]
    DestroyStack
   
    exit

}

proc IsEmptyStack {{OtherStack ""}} {
    global OurCurrentStack OurStacks

    if {$OtherStack!=""} { set OurCurrentStack $OtherStack }
    if {! [info exists OurCurrentStack] || $OurCurrentStack==""} { return 1 }

    if { ! [info exists OurStacks($OurCurrentStack,StackHeight)]} { return 1 }
    set h [set OurStacks($OurCurrentStack,StackHeight)]
    return [expr $h==0]
}

proc PushOnStack {Val {OtherStack ""}} {
    global OurCurrentStack OurStacks

    if {$OtherStack!=""} { set OurCurrentStack $OtherStack }
    if {! [info exists OurCurrentStack] || $OurCurrentStack==""} { set OurCurrentStack [NomDe Stack] }

    if { ! [info exists OurStacks($OurCurrentStack,StackHeight)]} {
	set OurStacks($OurCurrentStack,StackHeight) 0
    }

    set h [set OurStacks($OurCurrentStack,StackHeight)]
    incr h
    set OurStacks($OurCurrentStack,$h) $Val
    set OurStacks($OurCurrentStack,StackHeight) $h
    return $h
}

proc DestroyStack {{OtherStack ""}} {
    global OurCurrentStack OurStacks
    if {$OtherStack!=""} { set OurCurrentStack $OtherStack }
    if { ! [info exists OurCurrentStack]} { return "" }
    if {[info exists OurStacks($OurCurrentStack,StackHeight)]} { 
	while { ! [IsEmptyStack]} { PullFromStack }
	unset OurStacks($OurCurrentStack,StackHeight)
	unset OurCurrentStack
    }
}

proc PullFromStack {{OtherStack ""}} {
    return [ValFromStack $OtherStack Pull]
}

proc ValFromStack {{OtherStack ""} {Pull ""}} {
    global OurCurrentStack OurStacks

    if {$OtherStack!=""} { set OurCurrentStack $OtherStack }
    if { ! [info exists OurCurrentStack]} { return "" }

    if { ! [info exists OurStacks($OurCurrentStack,StackHeight)]} {
	set OurStacks($OurCurrentStack,StackHeight) 0
    }

    set h [set OurStacks($OurCurrentStack,StackHeight)]
    if {$h==0} { return "" }
    set Val [set OurStacks($OurCurrentStack,$h)]
    if {$Pull!=""} { set OurStacks($OurCurrentStack,StackHeight) [incr h -1]}
    return $Val
}

proc DecrValFromStack {{OtherStack ""} {ValueForIncr ""}} {

    if {$ValueForIncr==""} { set ValueForIncr -1 }

    set V [ValFromStack $OtherStack]
    incr V $ValueForIncr
    PullFromStack $OtherStack
    PushOnStack $V $OtherStack 
    return $V
}    


Index by: file name | procedure name | procedure call | annotation
File generated 2022-04-05 at 12:55.