( Misc_words)

DECIMAL
: -ROT  SWAP >R SWAP R> ;  ( n1,n2,n3 ... n3,n1,n2)  ( opposite of ROT)

: TUCK  SWAP OVER ;        ( n1,n2 ... n2,n1,n2)     ( opposite of OVER)

: NDUP  1+ DUP 1 DO DUP PICK SWAP LOOP DROP ;  ( ...,n ...... duplicate top n items)

: ?DUP  DUP 0= 0= IF DUP ENDIF ;  ( Don't duplicate if 0 on stack)

: twixt 3 PICK < 0= -ROT < 0= AND ;  ( n,lo,hi ...flag)  ( TRUE if lo<=n<=hi)

: confine ROT MIN MAX ;  ( n1,lo,hi ... n2) ( n2 forced between lo,hi)
 
( : U.R >R <# #S #> R> OVER - 0 MAX SPACES TYPE ;
: U. 0 U.R ;)

HEX
: U.  DUP 18 >> <# # # #> TYPE 00FFFFFF AND <# # # # # # # #> TYPE ;

: DUMP  ( addr,count...) OVER + SWAP DO CR I @ ( C@ 5 U.R) U. 4 +LOOP ;


DECIMAL
: ?Esc -113 INKEY ;    ( ..... 0/FF) ( >1 if Esc pressed)

: waitcsec   ( n csec .... )
   0 TIME=
   BEGIN DUP TIME < UNTIL 
   DROP ; 

: Tdelay ( dt ... )
   TIME             ( dt,T0...)
  BEGIN
   DUP              ( dt,T0,T0...)
   TIME             ( dt,T0,T0,T1...)
   SWAP             ( dt,T0,T1,T0...)
   -                ( dt,T0,T1-T0...)
   3 PICK           ( dt,T0,T1-T0,dt...)
   >=               ( dt,T0,flg...)            
  UNTIL             ( dt,T0...)
  DROP DROP
;

: Tdelay0    ( n csec .... )  
  0 TIME=
  BEGIN  50000 0 DO I I * DROP LOOP DUP TIME < UNTIL
  DROP ;

