Taqoz Reloaded v2.8 - Adding simple stacks
Stacks can be useful gadgets, so why not create a few of your own? Here's the code:-
--- Adding simple stacks to TAQOZ RELOADED v2.8 - adapted from code found at --- httpspub//rosettacode.org/wiki/Stack#Forth by Bob Edwards Aug 2022 --- No bounds checking IFDEF *STACKS* FORGET *STACKS* } pub *STACKS* ." Simple Stacks version 1 for Taqoz Reloaded v2.8" ; --- words missing from Taqoz 4 := cell cell NEGATE := -cell pub CELL+ cell + ; pub CELLS cell * ; --- Stack words pre STACK ( size -- ) [C] CREATE: --- make a new dictionary entry using the name of the stack HERE CELL+ [C] , --- initialise the stack pointer as an empty stack CELLS ALLOT --- allocate the storage space for the stack ; pub PUSH ( n st -- ) SWAP OVER ( st n st -- ) @ --- read the stack pointer ( st n -- ) ! --- store n on the top of stack ( st -- ) cell SWAP +! --- and increment the stack pointer ; pub POP ( st -- n ) -cell OVER +! --- decrement the stack pointer ( st -- ) @ --- read the stack pointer @ --- read the value top of stack ; pub TOS@ ( -- tos_copy ) @ cell - @ --- read a copy of the top of stack ; pub EMPTY? ( st -- flag ) --- returns flag=true if stack is empty DUP @ - CELL+ 0= ; --- End of Stack words --- Test words 10 STACK ST 1 ST PUSH 2 ST PUSH 3 ST PUSH ST TOS@ CRLF . --- 3 ST EMPTY? CRLF . --- 0 (false) ST POP CRLF . ST POP CRLF . ST POP CRLF . --- 3 2 1 ST EMPTY? CRLF . --- -1 (true)
The Rosetta Code website is a rich source of ideas, containing quite a lot of forth - see https://rosettacode.org/wiki/Category:Forth