Copyright 1984 by ABComputing May 15, 1984 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º FORTH Reference Documents º º º º by º º º º Guy Kelly º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ The FORTH Environment ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The file FORTH.OBJ, on Diskette B, invokes the FORTH environment. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ This FORTH Environment is: ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ an operating system, ³ ³ an editor, ³ ³ an assembler, ³ ³ an interpreter, ³ ³ a compiler, ³ ³ a high-level language, ³ ³ a set of development tools, ³ ³ a stack-oriented, traditionally 16-bit machine, and ³ ³ has simple virtual memory management. ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This column documents some of the words or features of 1) the FORTH operating systems, 2) the full-screen editor, and 3) the assembler. You should regard this documentation as a reference guide. You will probably be unable to understand it fully at this time, but it should become useful later. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Operating System Elements ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This implementation of FORTH includes the following FORTH-83 Standard word sets: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ required word set ³ ³ double number extension word set ³ ³ assembler extension word set ³ ³ system extension word set ³ ³ controlled reference word set. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ (EDITOR'S NOTE: A "word" in FORTH corresponds to a procedure or subroutine in other languages.) Also included are an editor word set and various display, printing, and tool-set words. The documentation for the 83 Standard word sets is contained in the "FORTH-83 Standard," published by the FORTH Standards Team. It is available from Mountain View Press, Micro-Motion, and The Institute for Applied FORTH Research, Inc. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Documentation Requirements ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ 1. The system dictionary space: type: HERE U. ³ ³ ³ ³ 2. The application dictionary space: SP@ PAD - U. ³ ³ ³ ³ ³ ³ 3. The data stack space: same as above (shared). ³ ³ ³ ³ 4. The return stack space: S0 @ SP@ - 80 - . ³ ³ ³ ³ 5. Mass storage used by system: up to 61K on Vol. 0 ³ ³ ³ ³ 6. Mass storage available to application: all the ³ ³ rest, up to block 65534. Block 65535 = buffer ³ ³ missing. ³ ³ ³ ³ 7. Standard PC terminal functions. ³ ³ ³ ³ 8. System action on error conditions: ³ ³ ³ ³ ' name or ['] name not found = ? error message, ³ ³ */ */MOD / /MOD divide by 0 = max signed integer ³ ³ UM/MOD divide by 0 = max integer ³ ³ : compile error = ? error message ³ ³ DO compile error = structure error message ³ ³ EXECUTE improper address error = crash! ³ ³ EXIT is compile only ³ ³ FORGET will cause deferred crash if DEFERRED ³ ³ word or searched vocabulary forgotten ³ ³ FORTH-83 should work, if it doesn't, let me know! ³ ³ LOAD issues an error message if block 0 is used. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Useful Words ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ Follow all the typed words with an . ³ ³ ³ ³ To list currently active vocabularies type: ORDER ³ ³ To list the words in the CONTEXT vocab. type: WORDS ³ ³ To list the source code for a word type: VIEW name ³ ³ (requires that you have the source disks!). ³ ³ To list the current volume number type: VOLUME @ . ³ ³ To update volume number to current disk type: MOUNT ³ ³ To select the editor type: EDITOR ³ ³ If you are stuck in an "infinite" loop type: ctrl-break ³ ³ To list a screen type: n LIST (n = number of screen to list) ³ ³ To toggle the printer off and on, use ctrl-P. ³ ³ Note: PRINTER ON and PRINTER OFF also work. ³ ³ To print a set of screens use n1 n2 SHOW ³ ³ To select drive b, type: 1DRIVE ³ ³ To select drive a, type: 0DRIVE ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ As issued, this version of FORTH is set up for single-sided drives, with diskettes formatted for 160K per side. If you have double-sided drives, type: 2 IS #SIDES . The book "FORTH TOOLS Volume 1," by Anita Anderson and Martin Tracy (published by MicroMotion, 12077 Wilshire Blvd., Los Angeles, CA 90025, (213)821-4340), is a very close match to this version of FORTH. It is recommended as additional documentation. The major differences are in the area of the editor and in the approach to disk access. FORTH TOOLS uses DOS files and this version of FORTH uses the traditional direct disk access via 1024 byte absolute disk blocks. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Editor Documentation ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Editor provides three basic functions: Display (To display a screen on the terminal) Reference (To find a specific character string) Edit (To modify the contents of a screen) ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Display ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The display command (DISP) displays the specified screen and puts the system in the display mode. In this mode, the PgUp and the PgDn keys display the previous or the next consecutive screen, while the Home key provides entry to the Edit mode. Any other key will exit from the Display mode to FORTH (the Space bar will exit without a beep). (EDITOR'S NOTE: A FORTH screen is 16 lines by 64 columns.) ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Reference ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Reference mode allows searching for all occurrences of a string, up to 35 characters, over a specified range of screens. The DREF command lists all occurrences by screen and line number. The EREF command displays a screen, enters the Edit mode, and places the cursor at the beginning of the screen to allow editing of the screen. All occurrences of the string are consecutively referenced. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Edit Mode ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Edit mode is used to modify the contents of a screen. To invoke the words associated with the editor, type EDITOR. There are four ways to enter the Edit mode: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type EDITOR at the system level, then ³ ³ ³ ³ 1. type the word EDIT, or ³ ³ 2. type the word EREF, or ³ ³ 3. type the word INTO ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ 4. from the Display mode, press the Home key. ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The cursor position indicates the present mode. In Edit mode, the cursor is within the screen; in Display mode the cursor is just below the screen, and when returning to system mode, is placed several lines below the screen image. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Edit Commands ³ Description ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ n DISP ³ Displays screen n and places the system in the ³ ³ ³ Display mode. ³ ³ ³ ³ ³ n EDIT ³ Place the system in the Edit mode with the ³ ³ ³ cursor at the Home position in screen n. ³ ³ ³ ³ ³ m n DREF cccc ³ List all screens and line numbers which ³ ³ ³ contain the string cccc. A space is needed ³ ³ ³ after DREF; m is the first screen to search; ³ ³ ³ n, is the last, and "cccc" represents any ³ ³ ³ string of characters. ³ ³ ³ ³ ³ m n EREF cccc ³ Place the system in the Edit mode and display ³ ³ ³ occurrences of cccc. To continue to the next ³ ³ ³ occurrence of the string, use either ^E or ^Q. ³ ³ ³ ^E = accept any editing changes, ^Q = no-op. ³ ³ ³ A space is needed after EREF. ³ ³ ³ ³ ³ m n o FROM ³ Setup for the INTO command. Displays screen m ³ ³ ³ with lines n through o flagged. ³ ³ ³ ³ ³ m n INTO ³ Moves the lines flagged by FROM into screen m ³ ³ ³ starting at line n and displays the resulting ³ ³ ³ screen with the moved lines flagged and the ³ ³ ³ system in the Edit mode. After any editing ³ ³ ³ the changes are accepted by exiting the Edit ³ ³ ³ mode with a ^E and are rejected by exiting ³ ³ ³ with a ^Q. A single FROM allows multiple ³ ³ ³ INTO's. ³ ³ ³ ³ ³ m n o SCOPY ³ Copies a set of screens. m is the ³ ³ ³ lowest-numbered source screen; n is the ³ ³ ³ lowest-numbered destination screen to be ³ ³ ³ overwritten; o is the count of screens to be ³ ³ ³ moved. The screens are moved in proper order. ³ ³ ³ The starting and ending source and destination ³ ³ ³ screens are displayed and a response of Y is ³ ³ ³ required before the copy will proceed. Any ³ ³ ³ other response will abort the copy. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Control keys active in the Edit mode ³ ÃÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ [up] ³ up-arrow, moves cursor up one line ³ ³ [down] ³ down-arrow, moves the cursor down one line ³ ³ [left] ³ left-arrow, moves the cursor left one character ³ ³ [right] ³ right-arrow, moves the cursor right one character ³ ³ [home] ³ Home-key, moves the cursor to screen top-left ³ ³ [away] ³ End-key, moves the cursor to bottom-right - 8 spaces ³ ³ [tab] ³ Tab-key, moves the cursor to the next tab-right ³ ³ [back] ³ shift-Tab-key, tabs the cursor left ³ ³ [I/C] ³ Ins-key, inserts a space at the cursor ³ ³ [D/C] ³ Del-key, deletes the character at the cursor ³ ³ [I/L] ³ F7-key, inserts 64 spaces starting at the cursor ³ ³ [D/L] ³ F8-key, deletes 64 characters from the cursor ³ ³ [clear] ³ F9-key, clears the screen from the cursor ³ ³ ³ to the [away] position, leaves the ³ ³ ³ cursor at the [away] position ³ ³ [abandon] ³ ^Q-keys, exits the Edit mode without updating ³ ³ ³ the disk ³ ³ [confirm] ³ ^E-keys, exits the Edit mode and updates the ³ ³ ³ disk. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Assembler Documentation ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The assembler is invoked by typing: CODE, followed by the name of the new code word; the assembler instructions are typed next, and the definition is terminated by typing "NEXT,END-CODE". The following example illustrates this. CODE ONE ( --1 ) 1 # 0 MOV, 0 PUSH, NEXT, END-CODE ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Format: source destination OPCODE, ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Registers: ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÁÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 0 = AX ³ 1 = CX ³ 2 = DX ³ 3 = BX = W ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 4 = SP = S ³ 5 = BP = R ³ 6 = SI = I ³ 7 = DI = U * ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ [BX] = W ) = 3 ) [BX+SI] = W I + ) ** ³ ³ [BP] = R ) = 5 ) [BX+DI] = W U + ) ³ ³ [SI] = I ) = 6 ) [BP+SI] = R I + ) ³ ³ [DI] = U ) = 7 ) [BP+DI] = R U + ) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ** or W ) I ) + or 3 6 + ) or 3 ) 6 ) + or 9 ) etc. ie: registers are treated as numbers by the opcodes * U is a memory location in the present version of FORTH ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ [reg+disp] = disp reg) ie: n r) or 3 W ³ ³ [reg+reg+disp] = disp reg) reg) + ie: n W) I) + ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ As in other FORTH operations, the rule is: parameters first, operators next, where W, R, I, and U are parameters and ) is an operator; and disp is a parameter and reg) is an operator. Note that the ) and reg) operators are commutative under addition. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Operators ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ) = register indirect ³ ³ reg) = register indirect + displacement ³ ³ # = immediate ³ ³ #A = address ³ ³ BYTE = set byte mode (default is WORD) ³ ³ L = low byte (applies to registers) ³ ³ H = high byte (as above) ³ ³ (CL) = shift/rotate by number in reg 1 = CL ³ ³ (DX) = IN or OUT address in reg 2 = DX ³ ³ (ex: n IN, or DX IN,) ³ ³ REL = relative CALL, or JMP, ³ ³ FAR = intersegment CALL, or JMP, ³ ³ CS SS DS ES = segment reg operators ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Examples ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 2 ADD, CX + DX -> DX ³ ³ 0 U ) CMP, [DI] - AX -> flags ³ ³ W U + ) 6 TEST, SI - [BX+DI] -> flags ³ ³ 0 10 W) ADC, AX + [BX+10] + cy -> [BX+10] ³ ³ 5 W) U) + 2 AND, [BX+DI+5] and DX -> DX ³ ³ PAD #A 0 OR, PAD or AX -> AX ³ ³ 2 TIB #A SUB, TIB - DX -> TIB ³ ³ 80 # 0 XOR, 80 xor AX -> AX ³ ³ -1 # W ) MOV, -1 -> [BX] ³ ³ "400 # 10 U) MOV, 1024 -> [DI+10] ³ ³ 30 # HERE #A ADD, 30 + (HERE) -> HERE ³ ³ ES 0 3 U) MOV, AX -> [DI+3] (+[ES] vs [DS]) ³ ³ segment offset FAR JMP, goto new seg+offs ³ ³ address REL JMP, jump to address ³ ³ FORTH Documentation ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ File Name: ÛÛ forth2.txt ÛÛ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ