DECIMAL CREATE SW+ 32 ALLOT CREATE SW- 32 ALLOT : 32C: ( a -- a+32 ) HEX 32 0 DO BL WORD DUP COUNT + 0! NUMBER DROP OVER C! 1+ LOOP DECIMAL ; SW+ 32C: 03 C0 07 E0 03 C0 01 80 07 E0 09 90 0B D0 15 A8 15 A8 0A 50 09 90 06 60 01 80 00 00 00 00 00 00 DROP SW- 32C: 00 00 00 00 00 00 01 80 06 60 09 90 0A 50 15 A8 15 A8 0B D0 09 90 07 E0 01 80 03 C0 07 E0 03 C0 DROP FORGET 32C: 1 +BLOCK 3 +BLOCK THRU VARIABLE CURPOS : CUR^ CURPOS @ 3 - EXECUTE ; : ITEM-INIT DUP CURPOS ! DUP 2 + C@ OVER 3 + C@ ROT 4 + C@ DO DUP I INVERT LOOP DROP ; : -INIT DUP ITEM-INIT ; : LT -INIT 5 + @ ITEM-INIT ; : UP -INIT 7 + @ ITEM-INIT ; : RT -INIT 9 + @ ITEM-INIT ; : DN -INIT 11 + @ ITEM-INIT ; : POS: ( x2 x1 y vect *- ) CREATE , C, C, C, 8 ALLOT \ 0 DEFW vect 2 DEFB y 3 DEFB x1 4 DEFB x2 \ 5 DEFW lt 7 DEFW up 9 DEFW rt 11 DEFW dn DOES> \ cmd -- -1 -- EXECUTE 0 -- INIT 1,2,3,4 -- lt,up,rt,dn SWAP CASE -1 OF @EXECUTE ENDOF 0 OF ITEM-INIT ENDOF 1 OF LT ENDOF 2 OF UP ENDOF 3 OF RT ENDOF 4 OF DN ENDOF ENDCASE ; : SW: CREATE ( X Y ) 80 ALLOT C, C, DOES> ( ? ) R! R@ 80 + C@ Y ! R> 81 + C@ X ! SWAP IF SW+ ELSE SW- THEN SPRITE ; : LINK: BODY >R BODY R@ 5 + ! BODY R@ 7 + ! BODY R@ 9 + ! BODY R> 11 + ! ; \ CUR LT UP RT DN