Scr#1
\ STACK STRINGS DEEL 1
: $S0 LO @ ;
VARIABLE $SP
: $SP! $S0 $SP ! ; $SP!

: $DUP $SP @ DUP DUP C@ 1+ -
  DUP $SP ! OVER C@ 1+ CMOVE ;

: $DROP $SP @ COUNT + $SP ! ;

: $SWAP $SP @ COUNT + PAD
  OVER C@ 1+ CMOVE $SP @ $SP
  @ COUNT + C@ 1+  OVER + OVER
  C@  1+ CMOVE> PAD $SP @ OVER
  C@  1+ CMOVE ;

: $OVER $SP @ COUNT + $SP @
  OVER C@ 1+ - DUP $SP !
  OVER C@ 1+ CMOVE ;

: $@ DUP C@ 1+ NEGATE $SP +!
  $SP @ OVER C@ 1+ CMOVE ;

: $! $SP @ SWAP OVER C@ 1+
  CMOVE $DROP ;

: $. $SP @ COUNT TYPE $DROP ;

: +$  $SP @ DUP 1+ OVER
  C@ 1+ $SP @ DUP COUNT +
  C@ OVER C@ + SWAP C! 1 $SP
  +! CMOVE> ; -->

Scr#2
\ STACKS STRINGS DEEL 2
: $+ $SWAP +$ ;

: LEN $SP @ C@ $DROP ;

: ASC $SP @ 1+ C@ $DROP ;

: CHR$ -2 $SP +! $SP @ 1 OVER C!
  1+ C! ;

: $!LIM $SP @ ROT DUP >R ROT 2
  PICK C@ MIN DUP >R 1+ CMOVE
  $DROP  R> R> C! ;

: -RIGHT$ $SP @ C@ 1+ MIN 0 MAX
  $SP @ C@ OVER - SWAP $SP +!
  $SP @ C! ;

: RIGHT$ $SP @ C@ SWAP -
  -RIGHT$ ;

: LEFT$ $SP @ C@ MIN 0 MAX
  $SP @ DUP DUP C@ + 2 PICK -
  DUP $SP ! 2 PICK 1+ CMOVE>
  $SP @  C! ;

: MID$ SWAP OVER + 1- LEFT$
  RIGHT$ ;

-->



Scr#3
\ STACK STRINGS DEEL 3
: (") R> DUP COUNT + >R $@ ;

: " &" STATE @ IF
  COMPILE (") WORD C@ 1+ ALLOT
  ELSE WORD $@ THEN ; IMMEDIATE

: STR$ SWAP OVER DABS <# #S
  SIGN #> OVER 1- C! 1- $@ ;

: VAL $SP @ PAD OVER C@ 1+ CMOVE
  $DROP BL PAD COUNT + C!
  PAD NUMBER ;

: GET$ PAD 1+ 80 EXPECT SPAN @
  PAD C! PAD $@ ;

: WORD$ BL WORD DUP C@ 1+ OVER
  C! $@ ;

: $CONSTANT CREATE HERE $! HERE
  C@ 1+ ALLOT DOES> $@ ;

" X" 0 LEFT$ $CONSTANT ""

-->







Scr#4
\ STACK STRINGS DEEL 4
: $- $SP @ COUNT + $SP @
  2DUP C@ SWAP C@ MIN 1+ 0
  BEGIN DROP ROT 1+ DUP C@ >R
  ROT 1+
  DUP C@ >R ROT 1- R> R> SWAP
  - OVER 0= OVER 0= 0= OR
  UNTIL SWAP 0= IF
  DROP $SP @ COUNT + C@ $SP @
  C@ - THEN ROT ROT 2DROP
  $DROP $DROP ;
: $= $- 0= ;
: $< $- 0< ;
: $> $- 0> ;


-->
















Scr#5
\ TYPES,TO CONCEPT
2 CONSTANT INT
1 CONSTANT CHAR
1 CONSTANT BOOL
4 CONSTANT LONG
4 CONSTANT REAL
: STR 1+ 5 MAX ;
VARIABLE %TO
: TO 1 %TO ! ;
: +TO 2 %TO ! ;
: RV 0 %TO ! ; RV
: FROM 3 %TO ! ;
: ER RV 1 ABORT" INVALID OPERATI
ON"  ;
: (INT) %TO @ IF %TO @ 1 = IF
  ! ELSE %TO @ 2 = IF +! ELSE
  ER THEN THEN RV ELSE @ THEN ;
: (CHAR) %TO @ IF %TO @ 1 = IF
  C! ELSE ER THEN RV ELSE C@
  THEN ;
: (LONG) %TO @ IF %TO @ 1 = IF
  2! ELSE ER THEN RV ELSE 2@
  THEN ;
: >ELEM 4 %TO ! ;
: ELEM> 5 %TO ! ;
: (STR) %TO @ IF %TO @ 1 = IF 1-
  $!LIM ELSE DROP %TO @ 4 = IF +
  C! ELSE %TO @ 5 = IF +  C@
  ELSE ER THEN THEN THEN RV ELSE
  DROP $@ THEN ;

-->

Scr#6
\ TYPES,GESTRUCTUREERDE
: (VAL) DUP 1 = IF DROP (CHAR)
  ELSE DUP 2 = IF DROP (INT)
  ELSE DUP 4 = IF DROP (LONG)
  ELSE (STR) THEN THEN THEN ;

: VALUE CREATE DUP C, ALLOT
  DOES> COUNT (VAL) ;

: ?RANGE SWAP U< 0= IF RV 1
  ABORT" INDEX TOO HIGH" THEN ;

: ARRAY CREATE DUP C, OVER ,
  * ALLOT DOES> DUP 1+ @ 2 PICK
         ?RANGE  SWAP OVER C@
*   OVER 3 + + SWAP C@ (VAL) ;

: MATRIX CREATE DUP C, OVER ,
  2 PICK , * * ALLOT DOES> DUP
  1+ @ 2 PICK ?RANGE
  DUP 3 + @ 3 PICK ?RANGE
  ROT OVER 1+ @ * ROT + OVER
  C@ * OVER 5 + + SWAP C@ (VAL)
  ;

