All pastes #814152 Raw Edit

Mine

public c v1 · immutable
·published 2007-12-13 00:57 UTC
rendered paste body
gosub 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}