ANTIC FORTH#
- Screens of Disk Two*
The data "
SCR # F
0 ( ERROR MESSAGES ) 135 159
1 9 8 7 10 ;S
2 empty stack
3
4 dictionary full
5
6 has incorrect address mode
7
8 isn't unique
9
A
B
C disc range ??
D
E full stack !
F
10 disc error !
11
12
13
14
15
16
17
18
19
1A
1B
1C THIS IS IT
1D
1E HELP ME!
1F
SCR # 10
0 ( USER INDEX SCR ... ....... ;S
1 PHYSICAL OFFSET: SCREEN # 1A
2 SCR #| Contents
3 00/00| INDEX
4 01/01| COVER SCREEN
5 02/06| ERROR MESSAGES
6 07/0A| BOOT MAKER - call SYS
7 |
8 |
9 0B/0B| disk RPM checker
A 0C/0E| FREE
B 0F/0F| low level DECOMP info
C DO NOT MOVE THESE SCREENS !!!
D 17/18| REV.G COMMENTS
E 10/23| TUTORIAL
F 24/2A| COMMAND SUMMARY/REV NOTES
10 30/32| DUMB TERMINAL V.1.0
11 33/37| Formatted LIST program
12 38/3F| FREE
13 |
14 |
15 |
16 |
17 |
18 |
19 |
1A |
1B TO CONTINUE TO THE DOCUMENTATION
1C PART OF THE DISK TYPE
1D
1E 10 UE and press <RETURN>
1F
SCR # 11
0 ****** fig-FORTH MODEL ******
1
2
3 Through the courtesy of
4
5
6 FORTH INTEREST GROUP
7 P. O. BOX 1105
8 SAN CARLOS, CA. 94070
9
A Implemented on the
B ATARI 800/400
C by
D Steve Calfee
E 1/26/81
F 4/01/82
10 PETER LIPSON/ROBIN ZIEGLER
11 4/10/82
12 HARALD STRIEPE
13 5/5/82 - 10/16/82
14 XL Mods - John Stanley 18Jun85
15 RELEASE 1.4S REV.H
16 WITH COMPILER SECURITY
17 VARIABLE LENGTH NAMES
18 SWITCHABLE TOP OF STACK DISPLAY
19 DECOMPILER/DISSASSEMBLER
1A ENHANCED SCREEN EDITOR & FAST
1B EDIT WORDS, BASE BORDER DISPLAY
1C ENHANCED SYSTEM SET UP/BOOTMKR
1D DRIVE 2 LINK/UNLINK
1E Further distribution must
1F include the above notice.
SCR # 12
0 BREAK Abort.
1
2 IOCB already open.
3
4 Non-existant device.
5
6 IOCB is write-only.
7
8 Invalid command (for this device
9 )
A Device or file not open.
B
C Bad IOCB #
D
E IOCB is read-only
F
10 End Of File
11
12 Truncated Record
13
14 Device Timeout
15
16 Device NAK (Negative AcKnowledge
17 )
18 Serial Bus input framing error
19
1A Cursor out of range
1B
1C Serial Bus data-frame overrun
1D
1E Serial Bus data-frame checksum e
1F rror.
SCR # 13
0 Device-done error
1
2 Read-after-write compare error
3
4 Function not implemented in hand
5 ler
6 Insufficient RAM
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 14
0 ( ERROR MESSAGES ) 135 159
1 9 8 7 10 ;S
2 empty stack
3
4 dictionary full
5
6 has incorrect address mode
7
8 isn't unique
9
A
B
C disc range ??
D
E full stack !
F
10 disc error !
11
12
13
14
15
16
17
18
19
1A
1B
1C THIS IS IT
1D
1E HELP ME!
1F
SCR # 15
0 ( ERROR MESSAGES )
1
2 compilation only, use in definit
3 ion
4 execution only
5
6 conditionals not paired
7
8 definition not finished
9
A in protected dictionary
B
C use only when loading
D
E off current editing screen
F
10 declare vocabulary
11
12 outside allocated file space
13
14 writing off current line
15
16
17
18
19
1A string stack empty !!
1B
1C
1D
1E
1F
SCR # 16
0 ( TARGET COMPILER ERROR MESSAGE
1 S WFR-79JUN02 )
2
3
4 below lower bound of virtual mem
5 ory
6 disc compiler assembly error in
7 mode of
8 can't find in TARGET
9
A target redef.
B
C T: error, is it paired with T;
D ?
E above virtual memory bounds
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 17
0 ( SYS/BOOTMAKER 1/4 )
1 FORTH DEFINITIONS HEX
2 SAVENFAs
3 HERE 1C +ORIGIN ! ( FENCE )
4
5 HERE 1E +ORIGIN ! ( DP )
6
7 HERE DUP FENCE ! 0 +ORIGIN -
8
9 80 / 1+ CONSTANT #SECT
A
B CODE CALLDK XSAVE STX, E453
C JSR, TYA, PHA, ( STATUS )
D XSAVE LDX, PUSH JMP, C;
E
F
10 : DKIO 301 ! ( CMD, DRIVE # )
11 30A ! ( SECT. # ) 304 !
12 ( RAM BUFFER ) CALLDK ( DKHND)
13 DUP 0< IF ." ERROR " 0FF AND
14 BASE @ SWAP DECIMAL
15 . BASE ! QUIT ENDIF DROP ;
16 : WTSEC SWAP 304 ! 130 300 !
17 ( verif $57->) 50 302 C! SECIO ;
18 : RDSEC SWAP 304 ! 130 300 !
19 52 302 C! SECIO ;
1A : FORMAT ." FORMAT DRIVE " DUP .
1B ." -ARE YOU SURE?" 0 PAD ! PAD
1C 1 EXPECT PAD C@ 59 ( Y) =
1D IF 2100 OR PAD 0 ROT DKIO ELSE
1E DROP THEN ;
1F 0 VARIABLE BOOT ( ->CODE ) -->
SCR # 18
0 ( SYS SET UP/BOOTMKR 2/4 )
1 : MAKEBOOT FLUSH EMPTY-BUFFERS
2 ." INSERT NEW DISK, TYPE Y" CR
3 0 PAD ! ( DEFAULT ) PAD 3 EXPECT
4 PAD C@ 59 = IF 1 52 C! CR
5 ." Writing sectors:" CR CR BOOT
6 @ 1 DUP . WTSEC #SECT 0 DO I
7 80 * +ORIGIN I 2 + WTSEC I 2 +
8 . LOOP 0 52 C! CR ." BOOT COMPL
9 ETED" CR THEN ; ( BOOT CODE:)
A HERE BOOT ! ( PT TO US )
B ASSEMBLER 1FF , 480 , ' V1.4S ,
C #SECT # LDA, 0= IF, 0 +ORIGIN ,
D 1 , ENDIF, N STA, 2C8 C@
E # LDA, 2C8 STA, D01A STA,
F 2C6 C@ # LDA, 2C6 STA,
10 D018 STA,
11 52 # LDA, 302 STA, 48C LDA, 30A
12 STA, 48D LDA, 30B STA, ( SCT1 )
13 1 # LDA, 301 STA, 48A LDA, 304
14 STA, 48B LDA, 305 STA, ( ORIGIN)
15 BEGIN, 30A INC, 0= IF, 30B INC,
16 ENDIF, E453 JSR, 303 LDA,
17 .A ASL, CS IF, RTS, ( FRETURN )
18 ENDIF, 304 LDA, 80 # EOR,
19 304 STA, 0< NOT IF, 305 INC,
1A ENDIF, ( BUMP PTR.) N DEC, 0=
1B UNTIL, 48A LDA, 0A STA, 48B LDA,
1C 0B STA, E C@ # LDA, 2E7 STA,
1D F C@ # LDA, 2E8 STA, CLC, RTS,
1E FORTH
1F -->
SCR # 19
0 ( BACKUP HES 82AUG15 3/4 ) (
1 35F ARRAY BUCD BLK @ BLOCK A0 +
2 BUCD 35F CMOVE CODE bg E474 JMP,
3 C; : BACKUP BUCD 480 35F CMOVE
4 480 C ! bg ; ) -->
11 fig-FORTH 1.4S FAST
12 BACKUP Vers.1.2 BY H.E.STRIEP
13 E 1982
14 START - commence I/O
15 SELECT - write with verify
16 OPTION - REBOOT
17 Insert source disk and press STA
18 RT, or select OPTION to REBOOT
19
1A Reading SOURCE disk...
1B Insert destination disk, press S
1C TART, or SELECT
1D Writing DESTINATION disk...
1E }****** DUPLICATION SUCCESSFUL *
1F *****
SCR # 1A
0 ( SYS SET UP/BOOTMKR 4/4 )
1 : DoFORget ( Forgets below )
2 ' TEXT NFA FENCE ! ( fence)
3 0 FORGET TEXT ;
4
5 HEX
6 LMARGN @ 2700 LMARGN !
7 ." }0x1D0x1Dfig-FORTH 1.4S SYSTEM SET-
8 UP Vers.1.1 " CR CR
9 ." DoFORget WORD forgets below
A FENCE." CR CR
B ." n SETPHYS permanently ch
C anges the OFFSET
D of screen #0." CR CR
E ." RESPHYS resets the OFF
F SET to its origin
10 al value; use" CR
11 ." n SETPHYS twic
12 e to set RESPHY
13 S to a new value" CR CR
14 ." n FORMAT formats disk i
15 n drive n. " CR CR
16
17 ." MAKEBOOT writes out com
18 piled boot
19 sectors." CR
1A ." SETSYS sets booton pa
1B rameters:" CR ."
1C screen margins, colors" CR CR (
1D ." BACKUP fast single dr
1E ive utility " CR )
1F LMARGN ! EMPTY-BUFFERS SP! ;S
SCR # 1B
0 ( DISK RPM CHECKER 1/1 )
1 CODE ZIO XSAVE STX, BOT LDA,
2 E459 JSR, XSAVE LDX,
3 BOT STY, BOT 1+ STA,
4 NEXT JMP, C;
5 246 CONSTANT DSKTIM
6 : DSIO ( DISK HNDLR VIA SIO )
7 ( BADDR AUXS UNIT-CMD DATFLG )
8 303 C! ( SET DATA-FLAG )
9 301 ! ( DUNIT,CMD) 31 300 C!
A ( DEVICE) 30A ! ( AUXES )
B 304 ! ( BUFER-ADDR ) 0 ZIO ;
C 1 VARIABLE DR#
D : BIO DSKTIM @ 306 C! 80 308 !
E ( BUFLEN) DSIO ;
F : RDSEC 5200 OR 40 BIO ;
10 ( DISK SPEED CHECKER )
11
12 14 CONSTANT RTCLOCK
13 2F2 CONSTANT KBCHAR
14 FF CONSTANT EPTY
15 : READ-SEC PAD 1 DR# C@ RDSEC ;
16 : CLR-KBRD EPTY KBCHAR C! ;
17 : RPM DECIMAL CLR-KBRD 1 2F0 C!
18 DR# C! 0 17 POS. ." RPM= "
19 BEGIN KBCHAR C@ EPTY = WHILE
1A READ-SEC DROP 0 RTCLOCK C!
1B 10 1 DO READ-SEC DROP LOOP D2F0
1C 0 RTCLOCK C@ U/ SWAP DROP
1D 4 17 POS. . REPEAT CLR-KBRD
1E 0 2F0 C! HEX ; ;S
1F ( NEEDS DRIVE # ON THE STACK )
SCR # 1C
0 ( DISK RPM CHECKER 1/1 )
1 CODE ZIO XSAVE STX, BOT LDA,
2 E459 JSR, XSAVE LDX,
3 BOT STY, BOT 1+ STA,
4 NEXT JMP, C;
5 246 CONSTANT DSKTIM
6 : DSIO ( DISK HNDLR VIA SIO )
7 ( BADDR AUXS UNIT-CMD DATFLG )
8 303 C! ( SET DATA-FLAG )
9 301 ! ( DUNIT,CMD) 31 300 C!
A ( DEVICE) 30A ! ( AUXES )
B 304 ! ( BUFER-ADDR ) 0 ZIO ;
C 1 VARIABLE DR#
D : BIO DSKTIM @ 306 C! 80 308 !
E ( BUFLEN) DSIO ;
F : RDSEC 5200 OR 40 BIO ;
10 ( DISK SPEED CHECKER )
11
12 14 CONSTANT RTCLOCK
13 2F2 CONSTANT KBCHAR
14 FF CONSTANT EPTY
15 : READ-SEC PAD 1 DR# C@ RDSEC ;
17 : RPM DECIMAL CLR-KBRD 1 2F0 C!
18 DR# C! 0 17 POS. ." RPM= "
19 BEGIN KBCHAR C@ EPTY = WHILE
1A READ-SEC DROP 0 RTCLOCK C!
1B 10 1 DO READ-SEC DROP LOOP D2F0
1C 0 RTCLOCK C@ U/ SWAP DROP
1D 4 17 POS. . REPEAT CLR-KBRD
1E 0 2F0 C! HEX ; ;S
1F ( NEEDS DRIVE # ON THE STACK )
SCR # 1D
0 ( EMPTY BLOCK D ) ;S
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 1E
0 \ scr# E empty block 1/1
1 ;S
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 1F
10 ???ADCANDASLBCCBCSBEQBITBMIBNEBP
11 LBRKBVCBVSCLCCLDCLICLVCMPCPXCPYD
12 ECDEXDEYEORINCINXINYJMPJSRLDALDX
13 LDYLSRNOPORAPHAPHPPLAPLPROLROR
14 RTIRTSSBCSECSEDSEISTASTXSTYTAXTA
15 YTSXTXATXSTYA
16
17
18 #X))Y,X,YN).A
19
1A
1B
1C
1D >> DECOMP DISASSEMBLER STUFF <<
1E DO NOT MOVE FROM THIS SCREEN !
1F
SCR # 20
0 ( Greetings from Team Forth )
1 24 LIST = crib sheet >
2 Team Forth welcomes you to the
3 world of Atari fig-Forth. We are
4 trying to make FORTH easy for
5 you to learn and use. Since we
6 are learning too, we would be
7 pleased to get any feed back you
8 may have on this version of fig-
9 FORTH, and the included documen-
A tation. Please send any comments
B to Team Atari, 4029 Payne Ave.,
C San Jose, Ca., 95117 or leave
D E-mail on Compuserve for ~[70525,
E 434] We'll try to answer all
F correspondence. (TYPE LL) Rev.H+
10 This disk is an attempt to write
11 a self-tutorial on using this
12 version of fig-FORTH. Just read
13 the text and try the examples by
14 placing the cursor on the line
15 with the example and pressing
16 the <RETURN> key. Have fun.
17 NOTE 0 LIST is a catalogue.
18 Let's try out a couple of words.
19 ( UPPER LIST & LOWER LIST )
1A
1B Ok To begin, type in the lower
1C screen area. First type UL <RE
1D TURN> then to return here type
1E LL <RETURN>, then to go to the
1F next screen by pressing <N>
SCR # 21
0 ( PREVIOUS, NEXT, TOGGLE )
1 Now type P and then use the T
2 command to get back here. OK,
3 N = next, P = previous and T =
4 toggle; FORTH stores the last
5 two screens you LOADed or LISTed
6 or EDITed in two buffers which
7 you can toggle by using <T>.
8 This is especially handy to
9 compare screens from different
A areas of a disk, or from two
B different disks.
C
D The next handy-dandy command to
E learn is the INDEX word.
F (TYPE LL TO CONT.)
10 INDEX is the word you use to see
11 what is on one of your FORTH
12 source disks. It shows you the
13 first line of each screen on the
14 disk. ( perhaps I should mention
15 that FORTH organizes the disk in
16 screens, the units you have been
17 looking at, i.e. that which will
18 fill up a TV screen. A good rule
19 to follow is to make the first
1A line of any screen you write a
1B short description of what is on
1C the screen. Then when you use
1D INDEX you get a quick list of
1E the contents. By printing this
1F you have a nice (TYPE N)
SCR # 22
0 ( ."/LPINDEX/SHOWLP/LPOPEN/ )
1 listing of the contents of the
2 disk. To try this out type in
3 the following line down below:
4 0 GR. 0 4D INDEX or you might
5 try useing <SHIFT> <CLEAR> and
6 then typing 0 4D INDEX.
7 ( Must be in caps )
8 <."> is a FORTH word pronounced
9 DOT QUOTE that works with <">
A pronounced QUOTE to print the
B text included between them.
C Make a note...
D TO RETURN HERE TYPE 12 UE
E (for page 12, uppper edit)
F then type LL to continue.
10 Now to print the Index, you need
11 to get your printer all ready,
12 type LPOPEN, and then type-
13 0 4D LPINDEX. This will print it
14 out. To print any single screen
15 you type xx LISTLP (xx being the
16 screen number). Two screens may
17 be shown side by side on a page
18 from the printer by typing -
19 xx SHOWLP. This will print scrn.
1A xx and the next screen after xx.
1B
1C
1D REMEMBER TO RETURN TYPE 12 LE
1E
1F
SCR # 23
0 ( BACKUP/CSECTS/WARN/GS/WS/N/+ )
1 By now you may have wondered how
2 to copy this disk. You can't do
3 it using standard DOS as there
4 is no Directory on a FORTH disk.
5 You can use 'SUPERDUP', ARCHIVE,
6 or any other sector copier.
7 The word SYS will load several
8 useful words like FORMAT and
9 MAKEBOOT. MAKEBOOT makes a boot-
A able disk with all the words you
B have defined included. SYS
C will load a menu screen giving
D instructions. NOTE: DO NOT MOVE
E any of the screens 1 through B
F and F !!! (type LL)
10 To turn on the english error
11 message system, type WARNON. To
12 turn them off and get only #
13 msgs type WARNOFF.
14
15 The options available now for
16 screen color are GS=green scrn,
17 WS=white screen, NS=normal scrn,
18 BS=black screen. Give them a try
19 and see which ones you like.
1A
1B Now try HX, DX. The border color
1C will change to remind you which
1D number base you are in. NOTE
1E HEX & DEC or DECIMAL are good
1F too. (type N to cont.)
SCR # 24
0 ( GENERAL INFO. )
1 Now that we have some basic
2 tools with which to find our
3 way around the disk, a little
4 general information on how the
5 goodies are stored here. This
6 disk contains most of the words
7 of this version of fig-FORTH in
8 the compiled form, i.e. they are
9 LOADed and ready to use. You got
A the list of words available to
B you if you printed out the
C VLIST. The second disk in this
D package contains a very small #
E of words in compiled form and
F (type LL to cont.)
10 the rest are on source screens.
11 This allows you to keep your
12 kernel (the compiled words) of
13 FORTH as small as possible, thus
14 saving as much memory space in
15 RAM as possible. The more words
16 compiled in RAM the less room
17 for you to work with in your own
18 applications. In order to add a
19 section of words to the kernel
1A just LOAD the screen they are on
1B by typing xx LOAD. (xx is the
1C screen number). xx L& turns of
1D the screen for faster compila-
1E tion, but use it only on tested
1F screens. (type N to cont.)
SCR # 25
0 ( LIST/L./DOIT/WIPE )
1 The format you have been using
2 so far is the EDITOR format.
3 You can look at screens in two
4 different formats. By typing L#
5 you will get line numbers on the
6 editing screen to facilitate use
7 of line edit commands. If you
8 want to get rid of them later
9 just type NL# and they will go.
A
B The other major format for look-
C ing at screens is the LIST or L.
D format. Type xx L. to see this
E one.
F (type LL to cont.)
10 In the LIST format you have to
11 use the <CTRL><1> key to stop
12 and start the scrolling of the
13 screen.
14
15 The next screen is blank so you
16 can try some screen editing.
17 Type N to go there and then type
18 on the screen. When done use the
19 cursor arrow keys to move down
1A to the line with "DOIT" on it &
1B press the <RETURN> key. Then
1C type FH or FLUSH to save it to
1D the disk. To erase it type
1E 16 WIPE, or W while in the
1F editor (TYPE 17 UE TO SKIP THAT)
SCR # 26
0 \ scr# 16 empty block 1/1
1 HELLO
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 27
0 ( scr# 17 REV.G COMMENTS ) ;S
1 ( HES 82SEP27 )
2 REV.G has a number of bug fixes
3 for REV.A OS. It also intercepts
4 the DOSINI vector during BOOT,
5 and at WARMSTART (RESET). This
6 makes it possible to set screen
7 colors and margins at boot up
8 and reset.
9 Simply set your margins and
A screen colors before calling SYS
B Select STACKON or STACKOFF. Then
C command SETSYS, and MAKEBOOT.
D Your new disk will now boot in
E your colors, and have your mar-
F gins. <LL>
10 You can also hook in an ML SUB-
11 ROUT.at this time. It must have
12 been defined prior calling SYS.
13 After calling SYS, command
14 HOOK word (<your assembler word)
15 UNHOOK reverses the process, if
16 you think you made a mistake.
17 NOTE: Your word is called as
18 a machine subroutine, and must
19 end with RTS,.
1A The screen editor now has a
1B KEYBOARD intercept, so you can
1C not accidentally hit CR while
1D editing the upper screen. To
1E override CR on the upper portion
1F ( while editing) hit CTRL CR (N)
SCR # 28
0 ( scr# 18 REV.G contd. ) ;S
1 UNLINK (DEFAULT) disconnects
2 Dr2 (810 only) from PHYSOFF,
3 your second disk normally does
4 not contain the BOOT, e.g. SCR
5 # 0 starts at sector 1. LINK
6 reverses UNLINK.
7 Note that a lot of screens have
8 been changed from the previous
9 REV., so full compilation
A requires staying with one group
B of source screens. The enhanced
C SYS commands should not be used
D with KERNELS of previous REV.s.
E CHECK SCR#'s $24 for EDIT comnds
F ETC.. #$38 has REV H comments
10 If you have questions, contact
11 me (at reasonable hours, please)
12 at <408>356-3921,
13 or you can leave MESSAGES at
14 the following BBS's:
15 TABBS <408> ???-????
16 IBBS <408> 298-6930
17 (The latter is the preferred
18 communications technique.)
19 Since DAVE FLORY is distributing
1A this package, naturally he can
1B also be contacted.
1C
1D May fig-FORTH be with you...
1E H.E.STRIEPE
1F NOTES by John A. Peters 239-5393
SCR # 29
0 ( PLAYER/MISSILE DEMO )
1 Now let's take a look at the
2 player/missile demo. To do this
3 please type 1A 1B SHOWLP. If you
4 have not previously used the
5 printer words type LPOPEN first.
6 Then you will have the two scrns
7 printed out and can compare them
8 as you read the rest of this.
9
A The B/H word is used to convert
B a binary shape table to hex and
C decimal for use in Players and
D missiles. See screen 1C for more
E info.
F ( type 1C UE to cont.)
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 2A
0 ( PLAYER/MISS.STUFF-RZ 1/1 )
1 0 VARIABLE 0VP 64 VARIABLE 0HP
2 0 VARIABLE 0VPOLD
3 : SPB HIMEM @ 1+ F800 AND
4 800 - DUP Qbase ! 17F +
5 HIMEM ! ;
6 : GETPS 0VP ! ROT BLOCK ROT +
7 Qbase @ 400 + 0VP @ + ROT
8 CMOVE ;
9 : SPLAY 0 0 HPOS! 7 GR. SPB
A Qbase 1+ C@ PMBASE C!
B 2A 0 COLPM!
C 1 0 SIZE! 3E D400 C!
D 3E DMACTL C! 3 GRACTL C!
E 1C 20 8 64 GETPS ;
F : CLRPM Qbase @ 800 ERASE ;
10 : MOVEH 0 STICK F XOR C AND
11 DUP IF 2 / 3 - ENDIF 0HP @
12 + DUP 0HP ! 0 HPOS! ;
13 : VPOS! 0VPOLD @ 9C00 + DUP
14 9800 8 CMOVE 8 ERASE 9C00 +
15 9800 SWAP 8 CMOVE ;
16 : MOVEV 0 STICK F XOR
17 3 AND DUP IF 2 * 3 - ENDIF
18 -DUP IF 0VP @ DUP 0VPOLD ! +
19 DUP 0VP ! VPOS! ENDIF ;
1A : RUNIT BEGIN MOVEH MOVEV
1B 2FC C@ FF = NOT END ;
1C : BN BINARY ; : OCT OCTAL ;
1D : B/H DUP HEX ." 0x1C0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1FH
1E EX =" . DX ." DEC.=" . BN QUIT
1F ; 6 GPRIOR C! ;S
SCR # 2B
0 ;S ( P/M COMMENT & INSTRUCTIONS
1 by Dave Flory/ Bay Area ATARI
2 User Group.
3 0VP = P/0 vert. position
4 0HP = P/0 hor. position
5 0VPOLD = P/0 old vert. position
6 GETPS = get player shape & place
7 in P/M memory space.
8 SPLAY = show player. The 2A in
9 front of the COLPM! is the color
A of player in HEX. <setcolor colo
B r * 16 + luminance> The first
C no. in front of SIZE! is the P/M
D width no., 2nd is no. of P/M.
E The no.s for GETPS in SPLAY are:
F 1. the no. of screen holding P/M
10 2. the # of bytes into the scrn.
11 where the Player data starts.
12 3. the # of bytes of player data
13 4. the hor. pos. to show player
14
15 You must be careful to place the
16 data correctly on the data scrn.
17 Count in carefully and enter the
18 data in characters. This is done
19 by using BDUMP to enter the HEX
1A numbers into RAM buffer position
1B corresponding to the screen. See
1C BDUMP comments & comments on the
1D next screen which holds sample
1E player data. )
1F (TYPE N TO CONT.)
SCR # 2C
0 ( PLAYER/MISSILE SHAPE TABLE )
1 0x19Z< ~$<0x1
2
3
4
5
6
7 The characters on the top of the
8 screen were entered into the scr
9 buffer usinG BDUMP after getting
A the correct HEX numbers using
B the B/H word. It is already
C available in this version. (When
D working with the source disk
E Load the P/M screen.)
F (Type LL to cont.)
10 This will give the numbers for a
11 small flat box shape:
12
13 BN
14 11111111 B/H HEX =FF DEC.=FF
15 10000001 B/H HEX =81 DEC.=81
16 10000001 B/H HEX =81 DEC.=81
17 11111111 B/H HEX =FF DEC.=FF
18
19 To use B/H you must be in BN or
1A binary base, then you enter the
1B binary shape line and type B/H
1C and press <RETURN>, FORTH will
1D type the HEX and DEC. no.s for
1E you.
1F (Type N to cont.)
SCR # 2D
0 ( BDUMP/ EXAMPLE )
1 To put these numbers onto the
2 disk without having to look up
3 Atari control keys in the table,
4 you use the BDUMP word. In this
5 case it works like this. You
6 type the following: 1C BLOCK
7 DUP 2A + BDUMP This gives you
8 the top 2A character positions
9 of screen 1C displayed on the
A monitor. You then count in the
B number of spaces you want the
C data to be and enter it on the
D screen using the cursor and
E pressing <RETURN> on the same
F line. (Type LL to cont. )
10 It looks like this:
11
12 1C BLOCK DUP 2A + BDUMP
13 0500 28 20 50 4C 41 59 45 52
14 0508 2F 4D 49 53 53 49 4C 45
15 0510 20 53 48 41 50 45 20 54
16 0518 41 42 4C 45 20 29 20 20
17 0520 18 FF 24 DB 24 5A 99 81
18 0528 20 20 20 20 20 20 20 20
19 oK
1A The place that the player is on
1B now is displayed on line 520.
1C By putting the cursor on that
1D line and typing in the no.s you
1E see how I entered the player
1F shape. (type N to cont.)
SCR # 2E
0 ( SPLAY/RUNIT/GRAPHICS WORDS )
1 Enter 6 GPRIOR C!
2 To see the shape and run the
3 player/missile demo type SPLAY
4 and RUNIT. This will display the
5 shape under the control of joy-
6 stick 0. You will notice that
7 the shape "hides" behind the
8 text window and and the stack
9 display (if the latter is on).
A Later you can draw some play-
B field stuff and experiment with
C making him go in front of some
D and behind others by putting a
E different # in GPRIOR.
F ( LL )
10 The graphics commands in this
11 FORTH for the Atari are very
12 like those you use in BASIc
13 except that as you have noted
14 here the numbers come first not
15 after the commands.
16
17 x C. = COLOR x
18 x GR. = GRAPHICS x
19 x y PL. = PLOT x y
1A x y DR. = DRAWTO x y
1B similarly POS. is POSITION, SE =
1C SETCOLOR, etc. The fill command
1D is XIO18 and it requires you to
1E put the fill color on the stack
1F first. (N)
SCR # 2F
0 ( DEMO OF P/M PRIORITY )
1 ( For a demo load this screen.
2 It will draw a couple of bars
3 of vertical colors for the bug
4 to play in. After typing SPLAY
5 type 1F LOAD then type RUNIT. )
6
7 DX 1 C. 90 90 PL. 90 10 DR. 80
8 10 DR. 80 90 POS. 1 XIO18 ( FIR
9 ST BAR ) 2 C. 70 90 PL. 70 15
A DR. 50 15 DR. 50 90 POS. 2 XIO18
B ( 2ND BAR ) 3 C. 30 40 PL.
C 30 20 DR. 10 15 DR. 10 80 POS.
D 3 XIO18 ;S 3rd bar fill runs
E over to the right this time
F (LL)
10 as the POS. statement is lower
11 than the initial PL. statement
12 for this bar.
13
14 After looking at this one play
15 around a little. It will take
16 some work to make this display
17 four players at the same time,
18 but its fun to try. You may want
19 to go back and redefine some of
1A the words to expect the player
1B number on the stack to tell them
1C which player to work on, or you
1D can just define a word for each
1E player and call them by name.
1F Hope you have fun. (N)
SCR # 30
0 ( STACK DISPLAY )
1 One of the nice features of this
2 system is the stack display. To
3 use it just type STACKON. Then
4 type a few numbers and press
5 <RETURN>. You will see them show
6 on the stack display at the top
7 of your monitor screen. To turn
8 it off when unwanted STACKOFF.
9 You will find the STACK display
A very useful to you as you start
B defining your own words as you
C can go through each step in the
D word singly and watch what it
E does to the stack. The stack is
F the single most difficult (LL)
10 thing for most begiinning FORTH
11 nuts to understand, and this
12 display is used by even the
13 experienced programmers I know.
14
15 Put some numbers on the stack
16 and try some of the Math words
17 like + and /, and *. Use SWAP,
18 and ROT, and . and DROP, etc.
19 and observe their stack effects.
1A
1B NOTE THIS Forth is based on the
1C HEX number system ( 1 2 3 4 5 6
1D 7 8 9 A B C D 10 11 12 etc.)
1E
1F
SCR # 31
0 ( DECOMPILER/DCP/ZZ )
1 Now we come to one of the most
2 useful and powerful words in the
3 vocabulary of this FORTH version
4 the decompiler word. To use it
5 just type DC xxxx, with xxxx the
6 word you want decompiled or
7 taken apart. This word works on
8 even the primitive words in the
9 fig-FORTH kernel. Try a few of
A the simple words first, like
B GS, or NS. When you do you will
C find that the numbers above 0,1,
D and 2 all have LIT after them.
E The first three are used so much
F that they are FORTH words. (LL)
10 ( screen 21 )
11 The LIT tells FORTH that the
12 They are to be taken as literal
13 values. To give you an idea how
14 this works try typing in this
15 definition and then DC AS.
16
17 DX : AS 26 709 C! 18 710 C!
18 16 712 C! ;
19
1A You now have another word avail.
1B to you AS or amber screen. To
1C make this a permanent part of
1D your disk you can use MAKEBOOT
1E to write out all the compiled
1F words you have in RAM. (N)
SCR # 32
0 ( TEXTS ON FORTH )
1 This should give you enough to
2 think about for quite a while if
3 you are new to FORTH. We haven't
4 tried to make you a programmer,
5 but just to introduce you to the
6 features of this version of the
7 language and help you over a few
8 of the initial rough spots.
9
A There are several good books for
B new people in FORTH. The one I
C personally found most helpful
D was DISCOVER FORTH published by
E McGraw Hill. The best next book
F and probably the best (LL)
10 if you can only afford to buy
11 one is STARTING FORTH by Leo
12 Brodie, and published by FORTH
13 Inc.
14
15 I wish you the best of luck and
16 hope that you will keep us up to
17 date on your extensions to this
18 language. We will try to act as
19 a clearing house for ATARI FORTH
1A people. AS we come up with more
1B features we will add them to the
1C package. we will try to upload
1D the new stuff onto Compuserve
1E ACCESS area so that you can get
1F (N)
SCR # 33
0 ( CONCLUSION )
1 updates without a lot of mailing
2 disks and paying postage. To
3 this end I suggest that you keep
4 the original source disk without
5 change so that you can recompile
6 your working kernel as you get
7 updates. If someone writes us
8 a terminal prgram written in
9 Atari FORTH we will make it
A available immediately so that we
B can all communicate FORTH stuff
C more easily, without typing in
D the screens on the keyboard.
E
F (LL)
10 That's all, keep on SWAPing,
11
12 Dave Flory Presently pres.
13
14 BAY AREA ATARI USER GROUP
15 4029 PAYNE AVENUE
16 SAN JOSE, CALIF.
17 95117
18
19 408) 244-7181
1A COMPUSERVE ~[70424,434]
1B
1C 02:26 27 June, 1982
1D
1E PLEASE COPY AND PASS THESE DISKS
1F AROUNDTO EVERY ONE YOU KNOW <N>
SCR # 34
0 \ scr# 24 empty block 1/1
1 ;S
2
3
4 L,N,P - List current,next
5 or previous screens
6 LL - List lower 1/2 of
7 current edit screen
8 UL - List upper 1/2 of
9 current edit screen
A DOIT - Take top 16 lines
B of screen and place
C them into the top
D or bottom 1/2 ( LL
E or UL ) of the edit
F screen.
10 x y COPY - Copy block x to
11 block y. No change
12 to block x
13 n LIST - Set SCR to n and
14 list the block
15 x y SHOW - List blocks x to y
16 inclusive
17 x y INDEX - List first line of
18 blocks x thru y
19 FLUSH - Return to FORTH voc
1A and write out all
1B updated blocks
1C UPDATE - Mark block (SCR) as
1D updated
1E
1F fig-FORTH 1.4S comnds next block
SCR # 35
0 FAST EDIT COMMANDS
1
2 EDT - same as EDITOR
3 FORTH - exits EDITOR without
4 action
5 n UE - same as n EDIT UL
6 n LE - same as n EDIT LL
7 N - edit next upper scrn
8 N. - edit next lower scrn
9 P - edit prev upper scrn
A p. - edit prev lower scrn
B T - edit other upper scrn
C in buffer
D T. - edit other lower scrn
E in buffer
F FH - same as FLUSH
10 WIPE - clr scrn to be edited
11 W - WIPE,will respond
12 with question, RETURN
13 or Y will execute
14 LOAD - FLUSH scrn edited,and
15 LOAD
16 n LOAD - will flush and load n
17 L#OFF - off LINE # display
18 L#ON - on LINE # display
19 SOUNDOFF - remove tone cue
1A (the beep heard for
1B various edit comnds)
1C SOUNDON - reset tone cue
1D
1E
1F LINE EDITOR COMMNANDS NXT SCRN
SCR # 36
0 EDITOR LINE EDITING COMMANDS
1
2 n TL - Type line n >(PAD)
3 n HL - line n >(PAD)
4 n DL - Delete line n >(PAD)
5 n IL - Insert (PAD) after n
6 n RL - Replace n with (PAD)
7 n SL - Spread at line n
8 n BL - Blank line n
9
A n $_ - Text following $_ will
B replace line n and go
C to PAD
D n %_ - Text following %_ will
E be inserted after line
F n and go to PAD
10 s n CL - Move line n of block s
11 to PAD
12
13
14 *** NOTE ***
15
16 >(PAD) : Means that line n is
17 also moved to PAD
18
19
1A
1B
1C
1D ( fig-FORTH 1.4S COMNDS NXT )
1E
1F
SCR # 37
0 fig-FORTH 1.4S COMMANDS
1
2 n1 n2 n3 COPIES
3 - move scrns n1 to n2
4 to location starting
5 at scrn n3 (n1-->n3,
6 n1+1-->n3+1 etc.)
7 n1 n2 DUPLICATE
8 - will duplicate scrns
9 on a single drive
A SYS - loads bootmaker and
B related words on
C SCREEN # $7
D STACKON - turn stackdisplay on
E STACKOFF- turn stackdisplay off
F NOTE: BORDER REFLECTS # BASE
10 STON - STACKON
11 STOF - STACKOFF
12 WARNON - display warning txt
13 WARNOFF- just display error #
14 DRAIN - EMPTY-BUFFERS
15 n1 n2 LZERO
16 - CLEARS scrns n1 to n2
17 n SETPHYS
18 - set PHYSOFF to n
19 RESPHYS- reset PHYSOFF to orgnl
1A value, use n STEPHYS
1B twice to chnge RESPHYS
1C DCP - DECOMP
1D ZZ - DECOMP
1E x y CDUMP - dump char. x to y,
1F USE LIKE BDUMP- cont nxt scrn
SCR # 38
0 fig-FORTH 1.4S COMMANDS
1 BY BOB GONSALVES/ANTIC MAGAZINE
2 n >< - swap bytes
3 n MSBYTE - leave MSB of n
4 n LSBYTE - leave LSB of n
5 VAR - TO variable
6 n TO <varname> will !
7 n <varname> will @
8 n MSB - shortform MSBYTE
9 n LSB - shortform LSBYTE
A
B BY R.MANSFIELD /COMPUTE! & HES
C x y FIND text - search for text
D starting with scr# x to y, will
E search all scr of DR1 as default
F abort by pressing START button
10 NS,GS,WS,BS
11 - change screen colors
12 n U. - n . unsigned
13 VERIFY & NOVERIFY
14 - change diskhandler
15 write command
16 n SNDOFF - turn off channel n
17 (e.g. n 0 0 0 SOUND)
18 THERE - returns adr below
19 display
1A FREE - THERE HERE -
1B OCTAL - change BASE to 8
1C BINARY - change BASE to 2
1D HX,DX,BX - shortforms
1E PON now does not require POFF
1F in same expression. (contd.)
SCR # 39
0 ( fig-FORTH 1.4S COMMANDS ) ;S
1
2 n CHR selects between three
3 character sets, 0 is
4 the normal ATARI vers
5
6 n .CHRSET prints out the
7 desired set
8
9
A read the TUTORIAL on the use of
B BDUMP and CDUMP ( note that
C CDUMP has a bug, and cannot
D handle 's )
E
F
10 There are several ways to access
11 the second drive in a two drive
12 system. Screens starting at $800
13 will access the second drive. If
14 you are in the LINKed mode, SCR#
15 $0 will start with the same
16 PHYSOFF as dr 1. UNLINK starts
17 drive two on the first sector.
18 You can also use the standard
19 Forth procedure and call DR0 for
1A dr 1, and DR1 for dr 2. Each in
1B this case have their own PHYSOFF
1C , which can be set with XXYY SET
1D PHYS, where YY is the PHYSOFF
1E for dr1, and XX for dr2.
1F < N >
SCR # 3A
0 \ scr# 2A REV H NOTES HES
1
2 Note that a 2 SETPHYS will set
3 the PHYSOFF for dr2 to 0.
4 NEWDATE lets you enter your ini
5 tials and date that will be used
6 in the EDITOR by DATE to date th
7 e comment line. In FORTH, DATE
8 requires a screen range on the s
9 tack. ( Works well with LZERO ).
A PNS will convert a PNS screen th
B at you might be editing. Just do
C the normal n UE (n is scr#), t
D han command PNS. The \ comment
E line is now also acceptable to f
F ig-Forth.
10 PICK and ROLL also have been add
11 ed. n PICK will take the nth ite
12 m on the stack, and duplicate it
13 on top, n ROLL just rolls it to
14 the top.
15 SETSYS, HOOK/UNHOOK are now part
16 of the std. vocabulary. JMP and
17 JSR permit ML experiments, just
18 leave the address of your routin
19 e on TOS.
1A DR2 adds $800 to scr# (makes it
1B easier when using DECIMAL mode).
1C
1D
1E
1F
SCR # 3B
0 ( scr# 2B empty block 1/1 ) ;S
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 3C
0 ( scr# 2C empty block 1/1 ) ;S
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 3D
0 ( scr# 2D empty block 1/1 ) ;S
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 3E
0 ( scr# 2E empty block 1/1 ) ;S
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 3F
0 ( scr# 2F empty block 1/1 ) ;S
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 40
0 ( FORTH TERMINAL HES 1/3 )
1 ( V.1.0 HES 82AUG24 )
2 ( USES IOCB #2/R1:,HANDLER )
3 ( already booted )
4 FORTH DEFINITIONS HEX
5
6 ( OPEN #2,R1: INPUT/OUTPUT )
7 : OPNR: 2 IOCB ( IOCB #2 )
8 0 D R1: OPEN ( INP/OUT )
9 ( ICSTA CH? ) ; ( STATUS )
A
B ( CONFIG.#2,NO TRANSL,ATASCII )
C : CNFGR: 2 IOCB ( IOCB #2 )
D 26 ICCOM C! R1: ICBAL !
E 20 I1CAX ! CIO
F ( ICSTA CH? ) ; ( STATUS )
10 0 VARIABLE STR:
11 ( COMMAND n --- )
12 : STATR: 2 IOCB
13 D ICCOM C! ( COMMAND )
14 CIO ; ( STATUS )
15 ( START CONCURRENT IO )
16 : STRTR: 2 IOCB 28 ICCOM C!
17 R1: ICBAL ! 0 I1CAX C!
18 CIO ( ICSTA CH? ) ;
19 ( CLOSE R: )
1A : CLSR: 2 IOCB CLOSE ;
1B ( CHECK R:BUFFER )
1C : ?RBUF
1D STATR: 2EB @ ;
1E -->
1F
SCR # 41
0 ( FORTHTERM V.1.0 2/3 )
1 ( CHECK KEYBOARD
2 : ?CHLEAVE CH C@ FF = NOT IF
3 FF CH C! ." Leaving MODE"
4 CR LEAVE THEN ; )
5 ( GET R: ROUTINE )
6 : GETR 2 IOCB GET ;
7
8 ( PUT R: ROUTINE )
9 : PUTR 2 IOCB PUT ;
A
B ( K: routines use IOCB #3 )
C : K: " K: " DROP ;
D
E ( Open for INPUT )
F : OPNK: 3 IOCB ( IOCB #3 )
10 0 4 K: OPEN ( INPUT ONLY )
11 ( ICSTA CH? ) ; ( STATUS )
12
13 ( CLOSE )
14 : CLSK: 3 IOCB CLOSE ;
15
16 ( GET INPUT --- n )
17 : GETK 3 IOCB GET ;
18
19
1A -->
1B
1C
1D
1E
1F
SCR # 42
0 ( FORTHTERM V.1.0 3/3 )
1
2 : TERMINAL CR CR
3 ." fig-FORTH TERMINAL V.1.0"
4 CR CR ." START --> exit"
5 CR CR
6 ." ATASCII mode, full DUPLEX
7 " CR CR 0 2BE C! ( lower case )
8 OPNK: OPNR: CNFGR: STRTR:
9
A
B BEGIN
C ?RBUF IF ( BUFFER ?? )
D GETR EMIT THEN ( GETIT )
E CH C@ FF = NOT ( KEY PRESS )
F IF GETK PUTR THEN ( SEND IT)
10 ?CONSOL 7 AND UNTIL ( EXIT )
11 CLSK: CLSR: CR
12
13 CR ." Leaving terminal mode."
14 40 2BE C! CR CR ;
15
16
17
18
19 ;S
1A
1B
1C
1D
1E
1F
SCR # 43
0 ( FORMATTED LIST PROG. 1/5 )
1
2 VOCABULARY FORMY IMMEDIATE
3 FORMY DEFINITIONS
4 BASE @ OCTAL 40 CN SPACBYT 54
5 CN COMCHR : IARRAY 0 VARIABLE -2
6 ALLOT ; : 0> DUP 0= IF DROP 0
7 ELSE 0< 0= THEN ;
8 0 VARIABLE INDENT 106 CN FCONS
9 111 CN ICONS 0 VARIABLE TLFLG
A 0 VARIABLE KERKNT 100 CN MAXLIN
B : NXSPACE >R 1+ >R 0 R> R> DO
C SPACBYT I C@ = IF DROP I LEAVE
D THEN LOOP ; : NXNSPACE >R 1+ >R
E 0 R> R> DO SPACBYT I C@ = 0= IF
F
10 DROP I LEAVE THEN LOOP ; : GTNX
11 WD DUP IF + OVER SWAP NXSPACE
12 ELSE DROP THEN DUP IF OVER SWAP
13 NXNSPACE DUP IF OVER OVER
14 NXSPACE DUP IF OVER - ELSE DROP
15 OVER OVER - 1+ THEN ELSE DUP
16 THEN ELSE DUP THEN ; : TORLCR TL
17 FLG @ IF CRLP ELSE CR THEN KERKN
18 T 0SET ; : TORLY DUP 1+ KERKNT +
19 ! TLFLG @ IF LYPE ELSE TYPE SPAC
1A E THEN ; : DOIND INDENT @ 0> IF
1B INDENT @ 0 DO 0 0 TORLY LOOP THE
1C N ; : PRWORD DUP 1+ KERKNT @ + M
1D AXLIN > IF TORLCR THEN KERKNT @
1E 0= IF DOIND THEN OVER OVER TORLY
1F ; : 1SET 1 SWAP ! ; -->
SCR # 44
0 ( FORMATTED LIST PROG. 2/5 )
1 : ( 51 WORD 6 ALLOT ;
2 : IA IARRAY ; IA L1G 10 , ( :)
3 ( CODE) ( ,CODE) ( SUBROUTINE)
4 ( IA) ( IARRAY) ( LABEL) ( TBL)
5 IA L2G 2 , ( ;) ( C;)
6 IA L3G 2 , ( NXT,) ( NEXT,) IA
7 L4G 6 , ( IF) ( DO) ( IF,)
8 ( CASE) ( BEGIN) ( BEGIN,) IA
9 L5G 3 , ( ELSE,) ( ELSE)
A ( WHILE) IA L6G 16 , ( THEN,)
B ( THEN) ( END,) ( END) ( SOB,)
C ( BACK) ( UNTIL) ( AGAIN) ( REPE
D AT) ( ENDIF,)
E ( UNTIL,) ( LOOP) ( +LOOP) ( E
F NDIF) IA L7G 7 , ( CONSTANT)
10 ( IR) ( VARIABLE) ( CN)
11 ( ARRAY) ( INTEGER) ( ORCON)
12 IA L8G 1 , ( () IA L9G 3 , (
13 LD,) ( ST,) ( LOAD)
14 IA LAG 1 , ( ;CODE)
15
16 : CMPWORD DUP >R C@ OVER = R>
17 SWAP IF >R OVER
18 R> SWAP OVER DUP C@ DUP 4 > IF
19 DROP 4 THEN 0
1A DO I OVER + 1+ C@ >R OVER R>
1B SWAP I + C@
1C = 0= IF 0 LEAVE THEN LOOP
1D
1E 0= IF DROP DROP 0 THEN ELSE 0
1F THEN ; -->
SCR # 45
0 ( FORMATTED LIST PROG. 3/5 )
1 : GSCAN DUP @ SWAP 2+ SWAP 0 DO
2 CMPWORD IF LEAVE
3 0 ELSE 6 + THEN LOOP IF 0 ELSE
4 DROP 1 THEN ;
5 : NEWCR KERKNT @ IF TORLCR THEN
6 ;
7 : DUPBC OVER >R >R OVER R> SWAP
8 R> ;
9 : FINDCHAR SWAP >R SWAP 1+ R>
A DO DUP I C@ =
B IF DROP I LEAVE 0 THEN LOOP IF
C 0 THEN ;
D : PRNEWL PRWORD TORLCR ;
E : >= OVER OVER = IF DROP DROP
F 1 ELSE > THEN ; -->
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
SCR # 46
0 ( FORMATTED LIST PROG. 4/5 )
1 : EL1G NEWCR INDENT 0SET PRWORD
2 GTNXWD PRNEWL
3 10 INDENT ! ;
4 : EL2G NEWCR PRNEWL INDENT 0SET
5 ;
6 : EL3G NEWCR PRNEWL ;
7
8 : EL4G NEWCR PRNEWL 2 INDENT +!
9 ;
A : EL5G NEWCR -2 INDENT +! PRNEWL
B 2 INDENT +! ;
C : EL6G NEWCR -2 INDENT +! PRNEWL
D ;
E : EL7G PRWORD GTNXWD PRNEWL INDE
F NT 0SET ;
10 : EL8G DUPBC 51 FINDCHAR DUP
11
12 IF SWAP DROP OVER - 1+ PRNEWL
13 ELSE DROP PRWORD THEN ;
14 : EL9G PRNEWL ;
15
16 : ELAG NEWCR 10 INDENT ! PRNEWL
17 ;
18 : ASSWRD DUP 4 >= IF OVER OVER +
19 1- C@ COMCHR = IF
1A OVER DUP C@ ICONS = SWAP 1+
1B C@ FCONS = AND
1C IF 2 ELSE 1 THEN ELSE 0 THEN E
1D LSE 0 THEN ;
1E -->
1F
SCR # 47
0 ( FORMATTED LIST PROG. 5/5 )
1 : PRCWRD L1G GSCAN IF EL1G ELSE
2 L2G GSCAN IF EL2G ELSE
3 L3G GSCAN IF EL3G ELSE L4G GSC
4 AN IF EL4G ELSE L5G GSCAN
5 IF EL5G ELSE L6G GSCAN IF EL6G
6 ELSE L7G GSCAN IF EL7G
7 ELSE L8G GSCAN IF EL8G ELSE L9
8 G GSCAN IF EL9G ELSE
9 LAG GSCAN IF ELAG ELSE ASSWRD
A IF ASSWRD 2 =
B IF EL4G ELSE PRNEWL THEN ELSE
C PRWORD THEN THEN THEN THEN THEN
D THEN THEN THEN THEN THEN THEN ;
E : FORLST TORLCR DUP TLFLG @ IF L
F ISTLP ELSE
10 TORLCR LIST THEN TORLCR TORLCR
11 DUP BLK !
12 BLOCK DUP 1777 + SWAP KERKNT 0
13 SET INDENT 0SET 0 BEGIN GTNXWD
14 DUP IF PRCWRD THEN DUP 0= END
15 DROP DROP DROP BLK 0SET ;
16 : ASTER TORLCR 40 0 DO 52 SP@ 1
17 TORLY DROP LOOP TORLCR ;
18 : FORSHW 1+ OVER DO ASTER I FORL
19 ST TORLCR LOOP DROP ;
1A FORTH DEFINITIONS : FLST FORMY T
1B LFLG 0SET FORLST ; : FLSTLP FORM
1C Y TLFLG 1SET FORLST FFLP ; : FSH
1D W FORMY TLFLG 0SET FORSHW ; : FS
1E HWLP FORMY TLFLG 1SET FORSHW
1F FFLP ; LPOPEN ;S
" is not legal for a JDOM character content: 0x001d is not a legal XML character.