Smart Text ZX/TS is a full-featured word processor program for composing, editing, and printing multi-column documents and business letters. It manages up to three independent text buffers (Books A, B, and C), each capable of holding approximately 3,800 characters, plus a selected-paragraph buffer and a typed-paragraph buffer. The program supports two printer modes — full-size and 32-column — and sends raw control codes directly to the printer via POKE to address 65535, with escape sequences for font size selection (normal, small, large, and medium print) and line-feed control. Text justification is implemented in BASIC by an iterative space-insertion algorithm that distributes spaces across word boundaries to reach the target line length, stored in variable LL. Line numbers are used as computed targets stored in variables (FM, TE, LS, PE, etc.) and branched to with GOTO and GOSUB, effectively implementing a label system within BASIC.
Program Analysis
Program Structure
The program is organized as a large collection of BASIC routines accessed via computed GOTO and GOSUB calls. Rather than using literal line numbers, the initialization block (lines 8474–8520) assigns line numbers to numeric variables such as FM, TE, LS, PE, IK, IL, LF, ZO, ZX, SP, and others. These variables are then used throughout the program with GOTO FM, GOSUB IK, etc., creating a label-like dispatch system.
The main function menu lives at line 7362 (stored in FM) and offers options 1–F. Submenus branch to typing (7096), line spacing (7250), captions (7200), format options (7392), page status (7312), data management (7748/7686), save (8474), letterhead (7766), sign-off (7820), book printing (7132/7436), and office tools (8642, not shown).
Text Buffer Management
Text is stored in three string variables: Z$ (Book A), R$ (Book B), and S$ (Book C), plus X$ for a selected paragraph and U$ for the currently typed paragraph. An accumulator variable ACC tracks which buffer is active, switching automatically when a buffer exceeds 3,800 characters:
ACC=0→ append toZ$(Book A)ACC=1→ append toR$(Book B)ACC=2→ append toS$(Book C)
The data status screen at line 7748 displays buffer sizes in kilobytes using the expression (INT (LEN Z$/102.4+.5))/10 and also reports free memory by reading system variables at addresses 16386, 16387, 16412, and 16413.
Printer Control via POKE
All printer output control codes are sent by POKEing values directly to address 65535 (stored in variable ME). This is the standard method for sending raw bytes to the printer port on this hardware. Printer mode registers are set at 16507 (stored as EN) and 16508 (stored as CT). Several subroutines at lines 8260–8370 configure different print modes:
| Subroutine | Mode | Line Length (LL) | Centre (QQ) |
|---|---|---|---|
| 8246 | 32-col / normal | 32 | 16 |
| 8260 | Full-size / normal | 64 | 32 |
| 8312 | Small print, long line | 106 | 53 |
| 8332 | Small print, medium line | 86 | 43 |
| 8352 | Large print | 32 | 16 |
The escape sequence values sent (e.g. 24, 27, 65/66, 29/30/31) correspond to Epson/compatible printer control codes for resetting and setting character pitch.
Text Justification Algorithm
Full justification is handled by the subroutine starting at line 7494. It iterates through a line string Y$, finds existing space characters, and inserts additional spaces one at a time, cycling through positions, until LEN Y$ equals the target line length LL. The outer word-wrap loop at lines 7436–7492 scans backwards from position LL to find the last space, splits there, justifies, and prints, then advances W$ to the remainder.
Indentation and Centering
The variable ID controls indentation mode. When ID=1, lines are printed with LPRINT TAB VAL "5" (full-size) or TAB VAL "3" (32-col). The variable QQ holds the half-line-width used for centering captions: LPRINT TAB QQ-INT(LEN Q$/2+1.5). Indent reduces both LL and QQ proportionally.
Keyboard Input Routines
Two input subroutines are used throughout. IK (line 8144) waits for any key from “1” to “2” using a PAUSE/INKEY$ loop, while IL (line 8134) accepts any single keypress. Both clear the screen on exit. These are assigned to variables at initialization and called as GOSUB IK and GOSUB IL.
Case Conversion via RAND USR
Uppercase and lowercase conversion is dispatched to machine code routines at addresses 7804 and 7868 respectively, called via RAND USR VAL "7804" (line 8374) and RAND USR VAL "7868" (line 8378). These routines are not shown in this listing but would operate on the text buffers in memory. The UL variable records the current case state (0=normal, 1=uppercase, 2=lowercase).
Window-Based Editing
The editor at line 7586 displays Z$ (Book A) in scrolling windows of approximately 480 characters (the value of CODE " TO ", which evaluates to the character code of the space+T+O+space token sequence — effectively a fixed window size constant). It allows search-and-replace, deletion, and paragraph-boundary marking. Search is a linear scan from the current window position; replacement is done by string concatenation: Z$=Z$(TO U-1)+P$+Z$(U+LEN Y$ TO).
Paragraph Append Logic
The append-paragraph routine at line 7709 allows prepending or appending typed text to the selected paragraph buffer X$. The choice is stored in BF: value 1 (CODE of “▝” = 1) means before, value 2 means after. Leading and trailing spaces are stripped from the assembled paragraph before concatenation.
Page Numbering and Page End
The page-end subroutine (PE, pointing to line 8384) increments PG, resets the line counter NN to 1, sends a form-feed (value 12) to the printer, prints the page number, and re-applies the current print mode. The 32-column page-end at line 7802–7816 uses a counted loop to emit blank lines (looping until A reaches CODE "(" = 40) before printing the page number.
Notable Anomalies
- Line
8062is referenced byGOTO VAL "8062"but is not present in the listing — the program jumps to a non-existent line, which is a known technique to fall through to the next available line. - Line
8333in the small-medium print subroutine POKEs16507with value 0 immediately after POKEing it with 2 on line8332, effectively cancelling the mode set. This appears to be a bug. - Line
7646(GOTO VAL "7640") and line7640together create an unconditional infinite loop if the search string is not found in the window — there is no escape condition within the FOR loop beyond finding the target. - The
SAVE "SMTX%T"at line8482saves the program to tape before re-initializing variables, which is the correct order for preserving the program state.
Content
Source Code
1 REM ** VERSION 2 FOR WORK ADAPATATION ****
7024 PRINT AT CODE "##",CODE "##";"SMART TEXT ZX/TS"
7044 PRINT AT CODE "~~",CODE ":'";"COPYRIGHT 1984 BY:";AT VAL "11",CODE ": ";"GULF MICRO ELECTRONICS";AT CODE "£",CODE ".'";"PANAMA CITY, FL 32404";AT CODE ":",CODE ":'";"ALL RIGHTS RESERVED"
7068 PAUSE CODE "%Z"
7069 CLS
7072 PRINT AT CODE "~~",CODE "##";"PRINTER TYPE?";AT CODE "£",CODE " '";"<1> FULL SIZE: OR <2> 32 COL"
7074 GOSUB IK
7076 LET PR=VAL T$
7078 GOTO FM
7096 PRINT AT CODE "~~",CODE "~~";"BEG TYPE";AT CODE "£",CODE ": ";"<ENTER> AS TYP SLOWS"
7097 PAUSE CODE "2"
7098 CLS
7099 LET U$=""
7102 INPUT V$
7104 CLS
7106 LET U$=U$+" "+V$
7108 PRINT AT CODE "~~",CODE ".'";"PARA END?";AT CODE "£",CODE ".'";"<1> YES <2> NO"
7110 GOSUB IK
7112 IF T$="2" THEN GOTO VAL "7102"
7114 LET V$=""
7115 IF AC=VAL "0" THEN GOTO FM
7116 IF LEN Z$<VAL "3800" THEN LET ACC=VAL "0"
7117 IF LEN Z$>VAL "3800" THEN LET ACC=VAL "1"
7118 IF LEN R$>VAL "3800" THEN LET ACC=VAL "2"
7119 IF LEN S$>VAL "3800" THEN GOTO VAL "7748"
7120 IF ACC=VAL "0" THEN LET Z$=Z$+U$
7128 IF ACC=VAL "1" THEN LET R$=R$+U$
7129 IF ACC=VAL "2" THEN LET S$=S$+U$
7130 GOTO FM
7132 CLS
7133 IF T$="A" THEN LET W$=Z$
7134 IF T$="B" THEN LET W$=R$
7136 IF T$="C" THEN LET W$=S$
7138 IF T$="D" THEN LET W$=X$
7140 IF T$="E" THEN LET W$=U$
7142 GOTO TE
7200 LET IDD=ID
7210 LET ID=VAL "0"
7212 IF PS=VAL "2" OR PS=VAL "3" THEN GOSUB VAL "8260"
7218 GOSUB LS
7220 PRINT AT CODE "~~",CODE "##";"TYPE CAP LESS THAN";AT CODE "£",CODE "##";LL;" CHRS IN LGTH"
7222 INPUT Q$
7224 CLS
7226 LPRINT TAB QQ-INT (LEN Q$/VAL "2"+1.5);Q$
7227 IF PR=VAL "1" THEN GOSUB ZO
7228 LET NN=NN+VAL "1"
7230 IF NN>=LN THEN GOSUB PE
7234 GOSUB LS
7236 PRINT AT CODE "~~",CODE "~~";"ANOTHER CAP?";AT CODE "£",CODE ":'";"<1> YES <2> NO"
7238 GOSUB IK
7240 IF T$="2" THEN LET ID=IDD
7242 IF T$="2" AND PR=VAL "1" THEN GOSUB VAL "7430"
7244 IF T$="2" AND PR=VAL "2" THEN GOSUB ZX
7246 IF T$="2" THEN GOTO FM
7249 GOTO VAL "7220"
7250 PRINT AT CODE "~~",CODE ".'";"LN SPCS?";AT CODE "£",CODE ".'";"0, 1, 2, OR 3"
7252 GOSUB IL
7254 IF T$<"0" OR T$>"3" THEN GOTO LS
7256 IF T$="0" THEN RETURN
7258 IF T$="1" AND PR=VAL "1" THEN GOSUB LF
7260 IF T$="1" AND PR=VAL "2" THEN GOSUB SP
7262 IF T$="2" AND PR=VAL "1" THEN GOSUB VAL "8232"
7263 IF T$="2" AND PR=VAL "2" THEN GOSUB VAL "8434"
7264 IF T$="3" AND PR=VAL "1" THEN GOSUB VAL "8228"
7268 IF T$="3" AND PR=VAL "2" THEN GOSUB VAL "8430"
7270 IF NN>=LN THEN GOSUB PE
7271 RETURN
7274 IF PEEK VAL "16508">VAL "0" THEN LPRINT
7276 IF PEEK VAL "16508">VAL "0" THEN GOTO ZO
7278 RETURN
7308 PRINT AT CODE "~~",CODE ",,";"ENT NEW NBR"
7310 INPUT LN
7311 CLS
7312 PRINT AT CODE "~~",CODE ".'";"NX PG IS: ";PG+VAL "1";AT VAL "11",CODE ".'";"LNS TO PG END ";LN-NN;AT CODE "$",CODE ".'";"OPTIONS:";AT CODE "?",CODE ".'";"1 CHG PG NBR";AT CODE "(",CODE ".'";"2 CHG LNS TO END";AT CODE ")",CODE ".'";"3 ROLL PG";AT CODE ">",CODE ".'";"4 RE-SET PG LGTH";AT CODE "=",CODE ".'";"5 FUN MENU"
7316 GOSUB IL
7318 IF T$<"1" OR T$>"5" THEN GOTO VAL "7312"
7320 IF T$="5" THEN GOTO FM
7322 IF T$="1" THEN GOTO VAL "7332"
7324 IF T$="2" THEN GOTO VAL "7342"
7326 IF T$="3" THEN GOSUB PE
7327 IF T$="4" THEN GOTO VAL "7308"
7328 GOTO FM
7332 PRINT AT CODE "~~",CODE "##";"TYP PG NBR";AT CODE "£",CODE "##";"THEN, ENT"
7334 INPUT PG
7336 CLS
7338 LET PG=PG-VAL "1"
7340 GOTO VAL "7312"
7342 PRINT AT CODE "~~",CODE "##";"TYP NU NBR";AT CODE "£",CODE "##";"THN ENT"
7344 INPUT NE
7346 CLS
7348 LET NN=LN-NE
7350 GOTO VAL "7312"
7362 PRINT AT CODE " ",CODE "##";"FUNC MEN";AT CODE "' ",CODE ".'";"* GO FIRST *";AT CODE "''",CODE ".'";"1 TYPING";AT CODE ". ",CODE ".'";"2 LN SP";AT CODE ": ",CODE ".'";"3 CAPTIONS";AT CODE ":'",CODE ". ";"* 4 FOR MENU";AT CODE "##",CODE ".'";"5 PG STAT";AT CODE ",,",CODE ".'";"6 DATA MGT";AT VAL "11",CODE ".'";"7 SAVE";AT CODE "£",CODE ".'";"8 LET HEAD";AT CODE "$",CODE ".'";"9 SIGN OFF";AT CODE "?",CODE ".'";"A PRT BK A";AT CODE "(",CODE ".'";"B PRT BK B";AT CODE ")",CODE ".'";"C PRT BK C";AT CODE "<",CODE ".'";"D PRT SEL PAR";AT CODE "=",CODE ".'";"E PRT TYP";AT CODE "+",CODE ".'";"F OFCE TLS"
7364 GOSUB IL
7366 IF T$<"1" OR T$>"F" THEN GOTO FM
7368 IF T$<"F" AND T$>"9" THEN GOTO VAL "7132"
7370 IF T$="1" THEN GOTO VAL "7096"
7371 IF T$="F" THEN GOTO VAL "8642"
7372 IF T$="2" AND PR=VAL "2" THEN GOSUB SP
7373 IF T$="2" AND PR=VAL "1" THEN GOSUB LF
7374 IF T$="3" THEN GOTO VAL "7200"
7376 IF T$="4" THEN GOTO VAL "7392"
7378 IF T$="5" THEN GOTO VAL "7312"
7380 IF T$="6" THEN GOTO VAL "7748"
7382 IF T$="7" THEN GOTO VAL "8474"
7384 IF T$="8" THEN GOTO VAL "7766"
7386 IF T$="9" THEN GOTO VAL "7820"
7388 CLS
7390 GOTO FM
7392 PRINT AT CODE " ",CODE ".'";"FMAT MENU";AT CODE ". ",CODE ". ";"* ONLY IF CPBLE";AT CODE "''",CODE ". ";"SLCT TIL FNSHD";AT CODE ".'",CODE ". ";"1 SNGL SP";AT CODE ":'",CODE ". ";"2 DBL SP";AT CODE ",,",CODE "''";"*3 UP CSE";AT CODE "~~",CODE "''";"*4 LOW CSE";AT CODE "£",CODE "''";"*5 MED PRT";AT CODE "$",CODE "''";"*6 SM PRT LG LN";AT CODE ":",CODE "''";"*7 SM PRT SH LN";AT CODE "?",CODE "''";"*8 LRG PRT";AT CODE ")",CODE ". ";"9 SET INDENT";AT CODE ">",CODE ". ";"A NORM LN LGTH";AT CODE "<",CODE ". ";"B TO FUN MENU"
7393 GOSUB IL
7394 IF T$<"1" OR T$>"B" THEN GOTO VAL "7392"
7395 IF T$="1" THEN LET SD=VAL "1"
7396 IF T$="2" THEN LET SD=VAL "2"
7397 IF T$="3" THEN LET UL=VAL "2"
7398 IF T$="4" THEN LET UL=VAL "1"
7399 IF T$="5" THEN LET PS=VAL "1"
7400 IF T$="6" THEN LET PS=VAL "3"
7401 IF T$="7" THEN LET PS=VAL "2"
7402 IF T$="8" THEN LET PS=VAL "4"
7403 IF T$="9" THEN LET ID=VAL "1"
7404 IF T$="A" THEN LET ID=VAL "0"
7406 IF T$="B" THEN GOTO FM
7410 IF UL=VAL "1" THEN GOSUB VAL "8374"
7411 IF UL=VAL "2" THEN GOSUB VAL "8378"
7412 IF T$>"4" AND T$<"9" THEN GOSUB VAL "7430"
7416 PRINT AT CODE "~~",CODE "##";"<DONE>"
7417 PAUSE CODE "2"
7418 CLS
7419 GOTO VAL "7392"
7420 IF W$(VAL "1")=" " THEN LET W$=W$(VAL "2" TO )
7422 IF W$(VAL "1")=" " THEN GOTO TE
7424 IF W$(LEN W$)=" " THEN LET W$=W$( TO LEN W$-VAL "1")
7426 IF W$(LEN W$)=" " THEN GOTO VAL "7424"
7427 GOSUB VAL "7430"
7428 GOTO VAL "7436"
7430 IF PR=VAL "1" AND PS=VAL "1" THEN GOSUB VAL "8260"
7431 IF PR=VAL "1" AND PS=VAL "2" THEN GOSUB VAL "8332"
7432 IF PR=VAL "1" AND PS=VAL "3" THEN GOSUB VAL "8312"
7433 IF PR=VAL "1" AND PS=VAL "4" THEN GOSUB VAL "8352"
7434 IF PR=VAL "2" THEN GOSUB ZX
7435 RETURN
7436 IF LEN W$<=LL THEN GOTO VAL "7534"
7438 LET Y$=W$( TO LL)
7440 FOR M=LL TO VAL "1" STEP -VAL "1"
7442 IF W$(M)=" " THEN GOTO VAL "7446"
7444 NEXT M
7446 LET Y$=W$( TO M-VAL "1")
7448 GOSUB VAL "7494"
7450 IF Y$(VAL "1")=" " THEN LET Y$=Y$(VAL "2" TO )
7452 IF Y$(VAL "1")=" " THEN GOTO VAL "7450"
7454 IF ID=VAL "1" THEN GOTO VAL "7468"
7456 IF PS=VAL "2" THEN GOTO VAL "7478"
7458 IF PS=VAL "3" THEN GOTO VAL "7482"
7460 LPRINT Y$
7462 IF PR=VAL "1" THEN GOSUB ZO
7464 LET NN=NN+VAL "1"
7465 IF NN>=LN THEN GOSUB PE
7466 GOTO VAL "7486"
7468 IF PR=VAL "1" AND PS=VAL "1" THEN LPRINT TAB VAL "5";Y$
7469 IF PR=VAL "2" THEN LPRINT TAB VAL "3";Y$
7470 IF PS=VAL "2" THEN LPRINT TAB VAL "15";Y$
7472 IF PS=VAL "3" THEN LPRINT TAB VAL "18";Y$
7474 IF PS=VAL "4" THEN LPRINT TAB VAL "3";Y$
7476 GOTO VAL "7462"
7478 LPRINT TAB VAL "10";Y$
7480 GOTO VAL "7462"
7482 LPRINT TAB VAL "13";Y$
7484 GOTO VAL "7462"
7486 IF PR=VAL "1" THEN GOSUB VAL "7574"
7488 IF PR=VAL "2" THEN GOSUB VAL "7580"
7490 LET W$=W$(M+VAL "1" TO )
7492 GOTO VAL "7436"
7494 LET PP=LEN Y$
7496 IF PP=LL THEN RETURN
7498 FOR R=VAL "1" TO PP
7500 IF Y$(R)=" " THEN GOTO VAL "7506"
7502 NEXT R
7504 GOTO VAL "7494"
7506 LET Y$=Y$( TO R)+" "+Y$(R+VAL "1" TO PP)
7508 LET PP=LEN Y$
7510 IF PP<>LL THEN LET R=R+VAL "1"
7512 IF PP<>LL THEN GOTO VAL "7502"
7514 RETURN
7516 IF PR=VAL "1" AND PS=VAL "1" THEN LPRINT TAB VAL "5";W$
7517 IF PR=VAL "2" THEN LPRINT TAB VAL "3";W$
7518 IF PS=VAL "2" THEN LPRINT TAB VAL "15";W$
7520 IF PS=VAL "3" THEN LPRINT TAB VAL "18";W$
7522 IF PS=VAL "4" THEN LPRINT TAB VAL "3";W$
7524 GOTO VAL "7542"
7526 IF PS=VAL "2" THEN LPRINT TAB VAL "10";W$
7528 GOTO VAL "7542"
7530 LPRINT TAB VAL "13";W$
7532 GOTO VAL "7542"
7534 IF ID=VAL "1" THEN GOTO VAL "7516"
7536 IF PS=VAL "2" THEN GOTO VAL "7526"
7538 IF PS=VAL "3" THEN GOTO VAL "7530"
7540 LPRINT W$
7542 IF PR=VAL "1" THEN GOSUB ZO
7544 LET NN=NN+VAL "1"
7546 LET W$=""
7548 IF SD=VAL "2" THEN GOSUB VAL "7556"
7550 IF NN>=LN THEN GOSUB PE
7552 IF G=VAL "1" THEN RETURN
7554 GOTO FM
7556 IF PR=VAL "1" THEN GOSUB LF
7558 IF PR=VAL "2" THEN GOSUB SP
7560 RETURN
7574 IF SD=VAL "2" THEN GOSUB LF
7576 IF NN>=LN THEN GOSUB PE
7578 RETURN
7580 IF SD=VAL "2" THEN GOSUB SP
7582 IF LL>=LN THEN GOSUB VAL "7802"
7584 RETURN
7586 LET BG=VAL "0"
7587 LET BC=VAL "1"
7588 LET NP=VAL "0"
7590 LET AY=VAL "1"
7594 FOR Y=VAL "1" TO LEN Z$ STEP CODE " TO "
7596 IF BC>=LEN Z$ THEN CLS
7598 IF BC>=LEN Z$ THEN GOTO VAL "7688"
7600 PRINT AT VAL "0",VAL "11";"WINDOW ";AY
7602 IF BC+CODE " TO ">=LEN Z$ THEN PRINT AT VAL "2",VAL "4";"LAST WINDOW"
7604 IF BC+CODE " TO ">=LEN Z$ THEN PRINT AT VAL "4",VAL "0";Z$(BC TO )
7606 IF BC+CODE " TO "<LEN Z$ THEN PRINT AT VAL "4",VAL "0";Z$(BC TO BC+CODE " TO ")
7608 PRINT AT CODE "£",CODE "~~";"EDITING?";AT CODE "$",VAL "7";"<1> YES <2> NO"
7610 GOSUB IK
7612 IF T$="1" THEN GOTO VAL "7626"
7614 IF T$="2" AND BC+CODE " TO ">LEN Z$ THEN GOTO VAL "7686"
7616 LET BC=BC+CODE " TO "
7618 LET AY=AY+VAL "1"
7620 NEXT Y
7622 CLS
7624 GOTO VAL "7596"
7626 IF BC+CODE " TO ">=LEN Z$ THEN PRINT AT VAL "2",VAL "8";"LAST WINDOW"
7628 IF BC+CODE " TO "<LEN Z$ THEN PRINT AT VAL "4",VAL "0";Z$(BC TO BC+CODE " TO ")
7630 IF BC+CODE " TO ">=LEN Z$ THEN PRINT AT VAL "4",VAL "0";Z$(BC TO )
7632 PRINT AT CODE "£",VAL "6";"ENTER SRCH GRP";AT CODE "$",CODE ",,";"THN WAIT"
7634 INPUT Y$
7636 LET U=BC
7638 FOR Q=U TO U+CODE " TO "
7640 IF Z$(Q TO Q+LEN Y$-VAL "1")=Y$ THEN GOTO VAL "7648"
7642 LET U=U+VAL "1"
7644 NEXT Q
7646 GOTO VAL "7640"
7648 PRINT AT CODE "?",CODE " '";"<";Y$;">";AT CODE "<",CODE " '";"<OPTNS>";AT CODE "<",CODE "$";"1 REPL, 2 DEL";AT CODE "=",CODE "$";"3 ID PARA START";AT CODE "+",CODE "$";"4 ID PARA END"
7650 GOSUB IL
7652 IF T$<"1" OR T$>"4" THEN GOTO VAL "7648"
7654 IF T$="3" OR T$="4" THEN GOTO VAL "8038"
7655 IF BC+CODE " TO ">=LEN Z$ THEN PRINT Z$(BC TO )
7656 IF BC+CODE " TO "<LEN Z$ THEN PRINT Z$(BC TO BC+CODE " TO ")
7658 PRINT AT CODE "##",CODE "' ";"<";Y$;">";AT CODE "(",CODE " '";"TO DLT, <ENT>";AT CODE ">",CODE " '";"TO REPL, OR INSRT, TYP";AT CODE "<",CODE " '";"THE GP, + SPS + PUNCT <ENT>"
7660 INPUT P$
7662 LET Z$=Z$( TO U-VAL "1")+P$+Z$(U+LEN Y$ TO )
7664 CLS
7666 IF BC+CODE " TO ">=LEN Z$ THEN PRINT Z$(BC TO )
7668 IF BC+CODE " TO "<LEN Z$ THEN PRINT Z$(BC TO BC+CODE " TO ")
7670 PRINT AT CODE "=",VAL "6";"O.K.? <1> YES <2> NO"
7672 GOSUB IK
7676 IF T$="1" THEN GOTO VAL "7620"
7678 IF T$="2" THEN GOTO VAL "7626"
7680 IF Y+CODE " TO ">=LEN Z$ THEN PRINT Z$(Y TO )
7682 IF Y+CODE " TO "<LEN Z$ THEN PRINT Z$(Y TO Y+CODE " TO ")
7684 GOTO VAL "7626"
7686 PRINT AT CODE ".'",CODE ": ";"DATA MGT MEN";AT CODE "##",CODE "''";"1 STAT RPT";AT CODE ",,",CODE "''";"2 ACUM ON";AT CODE "~~",CODE "''";"3 ACUM OFF";AT CODE "£",CODE "''";"4 EDIT BK A";AT CODE "$",CODE "''";"5 MOVE BK B TO EDIT";AT CODE ":",CODE "''";"6 MOVE BK C TO ED";AT CODE "(",CODE "''";"7 APND SEL PARA";AT CODE ")",CODE "''";"8 VIEW SEL PARA";AT CODE ">",CODE "''";"9 TO FUN MENU"
7687 GOSUB IL
7688 IF T$<"1" OR T$>"9" THEN GOTO VAL "7686"
7689 IF T$="1" THEN GOTO VAL "7748"
7690 IF T$="2" THEN LET AC=VAL "1"
7692 IF T$="3" THEN LET AC=VAL "0"
7694 IF T$="4" THEN GOTO VAL "7586"
7696 IF T$="5" THEN LET Z$=R$
7697 IF T$="8" THEN GOTO VAL "8088"
7698 IF T$="6" THEN LET Z$=S$
7699 IF T$="7" THEN GOTO VAL "7709"
7700 IF T$="9" THEN GOTO FM
7701 PRINT AT CODE "~~",CODE "##";"<DONE>"
7703 PAUSE CODE "2"
7704 CLS
7706 GOTO VAL "7686"
7709 LET Q$=""
7714 PRINT AT CODE "~~",CODE "''";"APND:";AT CODE "£",CODE "''";"1 BEFORE? -OR- 2 AFTER?"
7715 GOSUB IK
7716 LET BF=VAL T$
7717 PRINT AT CODE "~~",CODE "##";"TYP APND";AT CODE "£",CODE ". ";"<ENT> AS TYP SLOWS"
7718 INPUT Y$
7719 LET Q$=""
7720 CLS
7721 LET Q$=Q$+" "+Y$
7725 IF Q$(CODE "' ")=" " THEN LET Q$=Q$(CODE " '" TO )
7726 IF Q$(CODE "' ")=" " THEN GOTO VAL "7725"
7727 LET Y$=""
7728 IF Q$(LEN Q$)=" " THEN LET Q$=Q$( TO LEN Q$-CODE "' ")
7729 IF Q$(LEN Q$)=" " THEN GOTO VAL "7728"
7731 CLS
7732 IF BF=CODE "' " THEN LET X$=Q$+" "+X$
7734 IF BF=CODE " '" THEN LET X$=X$+" "+Q$
7736 GOTO VAL "7701"
7748 PRINT AT CODE ". ",CODE "~~";"DAT STAT";AT CODE ".'",CODE ":'";"BK A = ";(INT (LEN Z$/102.4+.5))/CODE "~~";"K";AT CODE ":'",CODE ":'";"BK B= ";(INT (LEN R$/102.4+.5))/CODE "~~";"K";AT CODE "##",CODE ":'";"BK C= ";(INT (LEN S$/102.4+.5))/CODE "~~";"K";AT CODE "~~",CODE ":'";"SEL PAR= ";LEN X$;" BYTES";AT VAL "11",CODE ":'";"TYP PARA= ";LEN U$;" BTS";AT CODE "$",CODE ":'";"F MEM= ";PEEK VAL "16386"+VAL "256"*PEEK VAL "16387"-PEEK VAL "16412"-VAL "256"*PEEK VAL "16413";AT CODE "?",CODE ":'";"ACT BNK =";
7749 IF ACC=VAL "0" THEN PRINT " A"
7750 IF ACC=VAL "1" THEN PRINT " B"
7751 IF ACC=VAL "2" THEN PRINT " C"
7752 IF ACC=VAL "3" THEN PRINT " <NONE>"
7754 PRINT AT CODE "=",VAL "7";"<ENT> WHEN RDY"
7760 PAUSE VAL "4E4"
7763 CLS
7765 GOTO VAL "7686"
7766 LET IDD=ID
7768 LET ID=VAL "0"
7769 IF PR=VAL "1" THEN GOSUB VAL "8260"
7770 LET NN=VAL "1"
7771 IF PR=VAL "1" THEN GOSUB VAL "8232"
7772 LET PG=VAL "0"
7775 LPRINT TAB QQ-(LEN K$/VAL "2"+VAL "1");K$
7776 IF PR=VAL "1" THEN GOSUB ZO
7777 LPRINT TAB QQ-(LEN L$/VAL "2"+VAL "1");L$
7778 IF PR=VAL "1" THEN GOSUB ZO
7779 LPRINT TAB QQ-(LEN M$/VAL "2"+VAL "1");M$
7782 IF PR=VAL "1" THEN GOSUB ZO
7786 LET NN=NN+VAL "3"
7787 IF G=VAL "1" THEN GOTO VAL "7894"
7789 GOTO VAL "7888"
7802 IF PR=VAL "1" THEN GOTO VAL "8386"
7804 LET A=VAL "1"
7805 LPRINT
7806 LET A=A+VAL "1"
7807 IF A=CODE "(" THEN GOTO VAL "7809"
7808 GOTO VAL "7805"
7809 LET PG=PG+VAL "1"
7810 LPRINT PG
7812 LET NN=VAL "1"
7813 LET ID=IDD
7814 GOSUB VAL "8426"
7816 RETURN
7820 LET NN=VAL "0"
7822 LET ID=VAL "0"
7823 IF PR=VAL "2" THEN GOTO VAL "7842"
7824 GOSUB VAL "8260"
7826 GOSUB VAL "8224"
7828 IF UL=VAL "1" THEN LPRINT TAB QQ-VAL "5";"S%I%N%C%E%R%E%L%Y,"
7830 IF UL=VAL "2" OR UL=VAL "0" THEN LPRINT TAB QQ-VAL "5";"SINCERELY,"
7831 GOSUB ZO
7832 GOSUB VAL "8224"
7834 IF UL=VAL "1" THEN LPRINT TAB QQ-VAL "5";"B%I%L%L J%O%N%E%S"
7836 IF UL=VAL "2" OR UL=VAL "0" THEN LPRINT TAB QQ-VAL "5";"BILL JONES"
7837 GOSUB ZO
7838 GOSUB VAL "8386"
7839 IF G=VAL "1" THEN RETURN
7840 GOTO FM
7842 GOSUB VAL "8426"
7844 IF UL=VAL "1" THEN LPRINT TAB QQ-VAL "5";"S%I%N%C%E%R%E%L%Y,"
7846 IF UL=VAL "2" OR UL=VAL "0" THEN LPRINT TAB QQ-VAL "5";"SINCERELY,"
7848 GOSUB VAL "8426"
7850 IF UL=VAL "1" THEN LPRINT TAB QQ-VAL "5";"B%I%L%L J%O%N%E%S%S"
7852 IF UL=VAL "2" OR UL=VAL "0" THEN LPRINT TAB QQ-VAL "5";"BILL JONES"
7854 GOSUB PE
7855 IF G=VAL "1" THEN RETURN
7856 GOTO FM
7888 PRINT AT CODE "~~",VAL "7";"TYP DATE"
7890 INPUT Y$
7892 CLS
7894 IF G=VAL "1" THEN LET Y$=O$
7895 LPRINT TAB QQ-LEN Y$/VAL "2";Y$
7896 IF PR=VAL "1" THEN GOSUB VAL "8232"
7898 IF PR=VAL "2" THEN GOSUB VAL "8434"
7900 LET NN=NN+VAL "1"
7901 IF G=VAL "1" THEN RETURN
7902 PRINT AT CODE "~~",VAL "6";"BUS HEAD?";AT CODE "£",CODE ".'";"1 YES 2 NO"
7904 GOSUB IK
7906 CLS
7908 IF PR=VAL "1" THEN GOSUB VAL "8280"
7910 IF T$="1" THEN GOTO VAL "7916"
7912 IF T$="2" THEN GOTO VAL "7942"
7914 GOTO VAL "7902"
7916 PRINT AT CODE "~~",VAL "4";"TYP CO NAME"
7918 INPUT Y$
7920 LPRINT Y$
7922 PRINT AT CODE "£",CODE ". ";"TYP ST ADR"
7924 INPUT Y$
7925 LPRINT Y$
7926 PRINT AT CODE ":",CODE ". ";"CTY, ST, ZP"
7931 INPUT Y$
7933 LPRINT Y$
7934 CLS
7936 IF PR=VAL "1" THEN GOSUB VAL "8232"
7938 IF PR=VAL "2" THEN GOSUB VAL "8434"
7940 LET NN=NN+VAL "3"
7942 PRINT AT CODE "~~",CODE " '";"PERS NAME"
7944 INPUT Y$
7946 CLS
7948 LPRINT "DEAR ";Y$
7950 IF PR=VAL "1" THEN GOSUB LF
7952 IF PR=VAL "2" THEN GOSUB SP
7954 LET NN=NN+VAL "3"
7955 IF G=VAL "1" THEN RETURN
7956 LET ID=IDD
7957 GOSUB VAL "7430"
7960 GOTO FM
8038 CLS
8039 IF T$="4" THEN GOTO VAL "8048"
8044 LET BG=U
8046 GOTO VAL "8062"
8048 IF BG=VAL "0" THEN GOTO VAL "8067"
8049 LET NP=U-CODE "' "+LEN Y$
8050 IF BG>VAL "0" AND NP>VAL "0" THEN LET X$=Z$(BG TO NP)
8054 PRINT AT CODE "~~",CODE " '";"DONE"
8056 PAUSE CODE "W"
8058 CLS
8060 GOTO VAL "7686"
8066 IF NP=VAL "0" THEN PRINT AT CODE "~~",CODE "~~";"DONE"
8067 IF BG=CODE " " THEN PRINT AT CODE "~~",CODE "''";"YOU GOOFED TRY AGN"
8069 PAUSE CODE "% "
8072 CLS
8076 IF BG=CODE " " THEN LET Y=CODE "' "
8078 IF BG=CODE " " THEN LET BC=CODE "' "
8080 IF BG=CODE " " THEN GOTO VAL "7596"
8082 IF NP=CODE " " THEN GOTO VAL "7596"
8084 IF BG=CODE " " THEN GOTO VAL "7590"
8086 IF NP=CODE " " THEN GOTO VAL "7616"
8088 FOR Y=CODE "' " TO LEN X$ STEP VAL "479"
8090 IF LEN X$<Y THEN GOTO VAL "7686"
8092 IF Y+VAL "479"<LEN X$ THEN PRINT X$(Y TO Y+VAL "479")
8094 IF Y+VAL "479">=LEN X$ THEN PRINT X$(Y TO )
8096 PRINT AT CODE "=",CODE "~~";"<ENT> WHN RDY"
8098 PAUSE VAL "4E4"
8100 CLS
8102 NEXT Y
8104 GOTO VAL "8090"
8134 PAUSE VAL "4E4"
8136 LET T$=INKEY$
8138 IF T$="" THEN GOTO VAL "8134"
8140 CLS
8142 RETURN
8144 PAUSE VAL "4E4"
8146 LET T$=INKEY$
8148 IF T$="" THEN GOTO VAL "8144"
8149 IF T$<"1" OR T$>"2" THEN GOTO VAL "8144"
8150 CLS
8152 RETURN
8220 POKE VAL "65535",VAL "10"
8222 LET NN=NN+VAL "1"
8224 POKE VAL "65535",VAL "10"
8226 LET NN=NN+VAL "1"
8228 POKE VAL "65535",VAL "10"
8230 LET NN=NN+VAL "1"
8232 POKE VAL "65535",VAL "10"
8234 LET NN=NN+VAL "1"
8236 POKE VAL "65535",VAL "10"
8238 LET NN=NN+VAL "1"
8240 IF NN>=LN THEN GOSUB PE
8242 RETURN
8246 POKE VAL "65535",VAL "24"
8248 POKE VAL "16507",VAL "0"
8249 LET LN=VAL "66"
8250 POKE VAL "16508",VAL "0"
8251 LET LL=VAL "32"
8252 LET QQ=VAL "16"
8253 IF ID=VAL "1" THEN LET LL=VAL "26"
8254 IF ID=VAL "1" THEN LET QQ=VAL "13"
8255 IF G=VAL "1" THEN LET LN=VAL "85"
8256 RETURN
8260 POKE VAL "16507",VAL "1"
8262 POKE VAL "16508",VAL "0"
8264 LET LL=VAL "64"
8265 LET QQ=VAL "32"
8266 POKE VAL "65535",VAL "24"
8270 POKE VAL "65535",CODE "27"
8272 POKE VAL "65535",VAL "66"
8273 POKE VAL "65535",VAL "30"
8274 IF ID=VAL "1" THEN LET LL=VAL "54"
8275 IF ID=VAL "1" THEN LET QQ=VAL "27"
8276 RETURN
8280 POKE VAL "65535",VAL "24"
8284 POKE VAL "16507",VAL "0"
8285 POKE VAL "16508",VAL "0"
8286 POKE VAL "65535",CODE "27"
8288 POKE VAL "65535",VAL "66"
8290 POKE VAL "65535",VAL "30"
8292 RETURN
8296 POKE VAL "16507",VAL "0"
8298 POKE VAL "16508",VAL "0"
8300 POKE VAL "65535",CODE "24"
8302 POKE VAL "65535",VAL "27"
8304 POKE VAL "65535",VAL "65"
8306 POKE VAL "65535",VAL "30"
8308 RETURN
8312 POKE VAL "16507",VAL "3"
8314 POKE VAL "16508",VAL "0"
8316 LET LL=VAL "106"
8318 LET QQ=VAL "53"
8320 POKE VAL "65535",VAL "24"
8322 POKE VAL "65535",VAL "27"
8324 POKE VAL "65535",VAL "65"
8325 POKE VAL "65535",VAL "29"
8326 IF ID=VAL "1" THEN LET LL=VAL "96"
8327 IF ID=VAL "1" THEN LET QQ=VAL "48"
8328 RETURN
8332 POKE VAL "16507",VAL "2"
8333 POKE VAL "16507",VAL "0"
8336 LET LL=VAL "86"
8337 LET QQ=VAL "43"
8338 POKE VAL "65535",VAL "24"
8340 POKE VAL "65535",VAL "27"
8342 POKE VAL "65535",VAL "66"
8344 POKE VAL "65535",VAL "29"
8345 IF ID=VAL "1" THEN LET LL=VAL "76"
8346 IF ID=VAL "1" THEN LET QQ=VAL "38"
8348 RETURN
8352 POKE VAL "16507",VAL "1"
8354 POKE VAL "16508",VAL "0"
8356 POKE VAL "65535",VAL "24"
8358 LET LL=VAL "32"
8359 LET QQ=VAL "16"
8360 POKE VAL "65535",VAL "27"
8362 POKE VAL "65535",VAL "66"
8364 POKE VAL "65535",VAL "30"
8366 POKE VAL "65535",VAL "31"
8367 IF ID=VAL "1" THEN LET LL=VAL "26"
8368 IF ID=VAL "1" THEN LET QQ=VAL "13"
8370 RETURN
8374 RAND USR VAL "7804"
8376 RETURN
8378 RAND USR VAL "7868"
8380 RETURN
8384 LET IDD=ID
8385 LET ID=VAL "0"
8386 IF PR=VAL "2" THEN GOTO VAL "7802"
8387 GOSUB VAL "8296"
8388 LET PG=PG+VAL "1"
8390 LET NN=VAL "1"
8392 POKE VAL "65535",VAL "12"
8394 LPRINT PG
8395 GOSUB ZO
8396 LET ID=IDD
8397 GOSUB VAL "7430"
8408 GOSUB VAL "8224"
8410 RETURN
8426 LPRINT
8428 LET NN=NN+VAL "1"
8430 LPRINT
8432 LET NN=NN+VAL "1"
8434 LPRINT
8436 LET NN=NN+VAL "1"
8438 LPRINT
8440 LET NN=NN+VAL "1"
8442 IF NN>=LN THEN GOSUB VAL "7802"
8443 RETURN
8474 CLS
8476 PRINT AT CODE "~~",VAL "2";"STRT REC, THN <ENT>"
8478 PAUSE VAL "4E4"
8482 SAVE "SMTX%T"
8483 CLS
8484 FAST
8485 LET LS=VAL "7250"
8486 LET G=CODE " "
8487 LET LN=CODE "O"
8488 LET AC=CODE " "
8489 LET CC=CODE " "
8490 LET PR=CODE " '"
8491 LET PG=CODE " "
8492 LET W$=""
8493 LET TE=VAL "7420"
8494 LET IDD=CODE " "
8495 LET PE=VAL "8384"
8496 LET ID=CODE " "
8497 LET ZO=7274
8498 LET ME=VAL "65535"
8499 LET EN=VAL "16507"
8500 LET UL=CODE " "
8501 LET CT=VAL "16508"
8502 LET K$="GULF MICRO ELECTRONICS"
8504 LET L$="1317 STRATFORD AVE"
8506 LET M$="PANAMA CITY, FLORIDA 32404"
8507 LET PS=CODE "' "
8508 LET NN=CODE " "
8509 LET SD=CODE "' "
8510 LET IL=VAL "8134"
8512 LET IK=VAL "8144"
8514 LET FM=VAL "7362"
8515 LET LF=VAL "8236"
8516 LET ZX=VAL "8248"
8517 LET SP=VAL "8438"
8520 GOTO VAL "7024"
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.


