rendered paste bodygosub StackCreate wut; Should failgosub StackPop ww; Should also failgosub StackPop wut; Add stuff to the stackgosub StackPush wut higosub StackPush wut lolgosub StackPush wut lmaogosub StackPush wut huhugosub StackTop wutdisplay #resultgosub StackSize wutdisplay #resultgosub StackPop wutgosub StackPop wutgosub StackPop wutgosub StackPop wutdisplay #resultgosub StackPop wutdisplay #resulthalt; A stack implements:; StackCreate; StackPush; StackPop; StackTop; A stack grows in size and cannot shrink below size 0.; StackCreate <StackName>; Creates a new stack object with the given string name.; #result = success ? #true : #falsesub StackCreate{ namespace push namespace local StackPush if %0 <> 1 || %1 = N/A { set %ret #false } else { set !NameSize %1 , size set % . !NameSize 0 set %ret #true } namespace clear namespace pop return %ret}; StackPush <StackName> <Value>; Pushes an element on to the stack with the given name.; #result := |StackName|sub StackPush{ namespace push namespace local StackPush if %0 <> 2 || %1 = N/A || %2 = N/A { set %ret #false } else { set !StackName %1 , size set !StackSize % . !StackName set !StackSize !StackSize + 1 set % . !StackName !StackSize set !StackName %1 , !StackSize set % . !StackName %2 set %ret !StackSize } namespace clear namespace pop return %ret}; StackPop <StackName>; Pops an element off the stack.; #result := |StackName|sub StackPop{ namespace push namespace local StackPush if %0 <> 1 || %1 = N/A { set %ret #false } else { gosub StackSize %1 if #result = #false || #result < 1 { set %ret #false } else { set !StackName %1 , size set !StackSize % . !StackName set !StackUnset %1 , !StackSize set % . !StackUnset set !StackSize !StackSize - 1 set % . !StackName !StackSize set !StackName %1 , !StackSize set %ret !StackSize } } namespace clear namespace pop return %ret}; StackTop <StackName>; Returns the value at the top of the stack.; #result := StackName . |StackSize|sub StackTop{ namespace push namespace local StackPush if %0 <> 1 || %1 = N/A || %2 = N/A { set %ret #false } else { set !StackName %1 , size set !StackName % . !StackName set !StackName %1 , !StackName set %ret % . !StackName } namespace clear namespace pop return %ret}; StackSize <StackName>; Returns the size of the stack.; #result := |StackName|sub StackSize{ namespace push namespace local StackSize if %0 <> 1 || %1 = N/A { set %ret #false } else { set !StackName %1 , size set !StackName % . !StackName if !StackName = N/A { set %ret #false } else { set %ret !StackName } } namespace clear namespace pop return %ret}