home *** CD-ROM | disk | FTP | other *** search
- \ UTILS.SEQ Some basic utilities
-
-
- : ? ( adr -- )
- @ . ;
-
- : YCOUNT ( a1 --- a2 n1 )
- DUP 1+ SWAP YC@ ;
-
- : ?ENOUGH ( n -- )
- DEPTH 1- > ABORT" Not enough Parameters" ;
-
- TRUE VALUE ?DOSIO
-
- : EEOL ( --- )
- COLS ?DOSIO + #OUT @ - SPACES ;
-
- : .FREE ( -- )
- ." Free Bytes:"
- ." CODE = " SP@ HERE - (U.) TYPE
- ." , LIST = " #LISTSEGS XHERE DROP XSEG @ - - 16 *D 1 D.R
- ." , HEAD = " #HEADSEGS 16 * YHERE - (U.) TYPE ;
-
- : DRIVE? ( -- ) 0 25 BDOS 'A' + EMIT ." : " ;
-
- \ These are needed by later utilities
-
- DEFER CCR ' CR IS CCR \ Carraige Carraige return?
- DEFER .SRCCR ' CR IS .SRCCR
- DEFER .DEFSRC ' NOOP IS .DEFSRC \ Nothing for now, may be set
- DEFER .SRCDEF ' NOOP IS .SRCDEF \ to display the source for the
- \ current definition.
-
- VARIABLE DEFCFA \ Holds the CFA of the current word.
- VARIABLE PFASAV -1 PFASAV ! \ Current offset into definition.
-
- 2VARIABLE CTIME GETTIME CTIME 2!
- 2VARIABLE CDATE GETDATE CDATE 2!
-
- : $.R ( addr len n1 -- ) TUCK UMIN TUCK - -ROT TYPE SPACES ;
- : $.L ( addr len n1 -- ) TUCK UMIN TUCK - SPACES TYPE ;
-
- : DOES? ( IP -- IP' F ) \ IP IS ACTUALLY CFA, IP' IS PFA
- DUP >BODY SWAP @REL>ABS @REL>ABS
- ['] FORTH @REL>ABS @REL>ABS = ;
-
- ' HEX @REL>ABS CONSTANT 'DOCOL
-
- : >.ID ( A1 --- )
- DUP 200 U< IF DROP EXIT THEN
- 128 0
- DO DUP @REL>ABS 'DOCOL =
- IF LEAVE ELSE 1- THEN
- LOOP >NAME .ID ;
-
- : U<= ( u1 u2 -- f ) U> NOT ;
- : U>= ( u1 u2 -- f ) U< NOT ;
- : <= ( n1 n2 -- f ) > NOT ;
- : >= ( n1 n2 -- f ) < NOT ;
- : 0>= ( n1 n2 -- f ) 0< NOT ;
- : 0<= ( n1 n2 -- f ) 0> NOT ;
-
- VARIABLE #TIMES ( # times already performed ) 1 #TIMES !
-
- : TIMES ( n -- )
- 1 #TIMES +! #TIMES @
- < IF 1 #TIMES ! ELSE >IN OFF THEN ;
-
- : MANY ( -- )
- KEY? NOT IF >IN OFF THEN ;
-
- : AT ( col row -- ) ( 0 0 is upper left )
- DOES> >R 2DUP R> PERFORM #LINE ! #OUT ! ; AT
-
- ' 2DROP IS AT
-
-
- : DARK ( -- )
- DOES> PERFORM #LINE OFF #OUT OFF ; DARK
-
- ' NOOP IS DARK
-
- : ?DARK ( -- )
- KEY? 0= IF DARK CR THEN ;
-
- DEFER AT?
- DEFER -LINE
-
- : SAVECURSOR ( -- ) \ save all of the current cursor stuff
- 2R>
- @> ATTRIB >R \ save attribute
- GET-CURSOR >R \ cursor shape
- @> #OUT @> #LINE 2>R \ and position
- 2>R ;
-
- : RESTCURSOR ( -- ) \ restore all of the cursor stuff
- 2R>
- 2R> AT \ restore position
- R> SET-CURSOR \ shape
- R> ATTRIB ! \ and attribute
- 2>R ;
-
- 0 VALUE ?DOINGMAC \ Are we doing a macro, moved her from macros
- \ to make it available for testing by programs
- \ that may want to know if we are in the middle
- \ of a macro.
-
- VARIABLE #PAGE
-
- : PAGE ( -- )
- DOES> PERFORM 1 #PAGE +! #LINE OFF #OUT OFF ; PAGE
-
- : FORM-FEED ( -- ) CONTROL M EMIT CONTROL L EMIT ;
-
- ' FORM-FEED IS PAGE
-
- : ?PAGE ( --- ) \ PAGE IF LINE CNT NOT ZERO
- #LINE @
- IF PAGE
- THEN ;
-
- : ALIAS ( A1 | alias_NAME --- )
- HEADER YHERE 2- Y! ;
-
- : \UNLESS ( NAME --- ) \ comment out line unless name is defined
- DEFINED NIP 0=
- IF [COMPILE] \
- THEN ; IMMEDIATE
-
- ' \UNLESS ALIAS \U IMMEDIATE
- ' !> ALIAS =: IMMEDIATE \ make =: the same as !>
-
- VARIABLE NLEN
- 0 VALUE ?DEFATTRIB
-
- : >NAME.ID ( CFA --- )
- >NAME DUP YC@ 31 AND DUP ?LINE NLEN !
- ?DEFATTRIB
- IF %.ID
- ELSE .ID
- THEN ;
-
- DEFER (SEE)
-
- : <GRAPHDUMMY> ( --- )
- CR ." Enter a KEY " KEY TRUE ;
-
- DEFER GRAPHCHAR ' <GRAPHDUMMY> IS GRAPHCHAR
-
- DEFER >ATTRIB1 ' NOOP IS >ATTRIB1
- DEFER >ATTRIB2 ' NOOP IS >ATTRIB2
- DEFER >ATTRIB3 ' NOOP IS >ATTRIB3
- DEFER >ATTRIB4 ' NOOP IS >ATTRIB4
- DEFER >ATTRIB5 ' NOOP IS >ATTRIB5
- DEFER >ATTRIB6 ' NOOP IS >ATTRIB6
- DEFER >ATTRIB7 ' NOOP IS >ATTRIB7
- DEFER >ATTRIB8 ' NOOP IS >ATTRIB8
-
- DEFER >NORM ' NOOP IS >NORM
- DEFER >REV ' NOOP IS >REV
- DEFER >NORMBG ' NOOP IS >NORMBG
-
- DEFER DOBUTTON ' NOOP IS DOBUTTON
- 0 VALUE MOUSEFLG \ IS THE MOUSE CURRENTLY TURNED ON?
-
- DECIMAL
-
- VARIABLE RESTBASE 10 RESTBASE !
- VARIABLE RESTCAPS RESTCAPS ON
- VARIABLE RESTTABS 8 RESTTABS !
- VARIABLE RESTLMRG RESTLMRG OFF
- VARIABLE RESTRMRG 70 RESTRMRG !
- VARIABLE RESTSTAT RESTSTAT OFF
- VARIABLE STATV STATV OFF
-
- : SAVESTATE ( --- )
- BASE @ RESTBASE !
- CAPS @ RESTCAPS !
- LMARGIN @ RESTLMRG !
- RMARGIN @ RESTRMRG !
- TABSIZE @ RESTTABS !
- STATV @ RESTSTAT ! ;
-
- : RESTORESTATE ( --- )
- RESTSTAT @ STATV !
- RESTBASE @ BASE !
- RESTCAPS @ CAPS !
- RESTLMRG @ LMARGIN !
- RESTRMRG @ RMARGIN !
- RESTTABS @ TABSIZE ! ;
-
- : DEFAULTSTATE ( --- )
- RESTSTAT ON
- 10 RESTBASE !
- RESTCAPS ON
- 8 RESTTABS !
- RESTLMRG OFF
- COLS 10 - RESTRMRG !
- RESTORESTATE ;
-
- : ?DOSTOP ( F1 --- )
- IF RESTORESTATE
- TRUE ABORT" Stopped"
- THEN ;
-
- : ?KEYPAUSE ( --- ) \ Pause if key pressed
- KEY?
- IF KEY 27 = ?DOSTOP
- KEY 27 = ?DOSTOP
- THEN ;
-
- : $>TIB ( a1 --- )
- COUNT DUP #TIB ! TIB SWAP CMOVE >IN OFF ;
-
- CREATE DSBUF 6 ALLOT
-
- : !USED ( --- ) \ Save the current dictionary pointers
- HERE DSBUF !
- XHERE PARAGRAPH + DSBUF 2+ !
- YHERE DSBUF 4 + ! ;
- 0 DSBUF !
- XSEG @ DSBUF 2+ !
- 0 DSBUF 4 + !
-
- : .USED ( --- )
- CR ." CODE LIST HEAD TOTAL bytes used"
- CR HERE DSBUF @ - DUP 6 U.R 0
- XHERE PARAGRAPH + DSBUF 2+ @ - 16 *D 2DUP 8 UD.R D+
- YHERE DSBUF 4 + @ - DUP 7 U.R 0 D+ 8 UD.R CR ;
-
- : USED ( <command_line> --- )
- !USED INTERPRET .USED ;
-
-