ANTIC FORTH#
'Screens of Disk Two'
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 ." }fig-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 ." H 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 Z< ~$< 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