--- title: "Word-Master V2.0 Oliger Disk Variety" id: 72655 type: "computer_media" slug: "word-master-v2-0-oliger-disk-variety" url: "http://localhost/computer_media/word-master-v2-0-oliger-disk-variety/" markdown_url: "http://localhost/computer_media/word-master-v2-0-oliger-disk-variety.md" published_at: "2026-10-26T23:19:33+00:00" modified_at: "2026-10-26T23:19:33+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/wm-editor.png" excerpt: "64-column word processor that holds texts, fonts and graphics in memory and prints them together, with desktop-publishing extensions, chart maker, printer setup and shareware clip art." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Jack Dohany" slug: "jack-dohany" taxonomy: "post_tag" url: "http://localhost/tag/jack-dohany/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Sinclair ZX Spectrum" slug: "zxspectrum" taxonomy: "model" url: "http://localhost/model/zxspectrum/" - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Barry Parkinson" slug: "barry-parkinson" taxonomy: "indiv" url: "http://localhost/indiv/barry-parkinson/" - name: "Jack Dohany" slug: "jack-dohany" taxonomy: "indiv" url: "http://localhost/indiv/jack-dohany/" - name: "Paul Sneesby" slug: "paul-sneesby" taxonomy: "indiv" url: "http://localhost/indiv/paul-sneesby/" genre: - name: "Word Processor" slug: "word-processor" taxonomy: "genre" url: "http://localhost/type/word-processor/" media_type: "Program" programmers: - name: "Paul Sneesby" slug: "paul-sneesby" taxonomy: "indiv" url: "http://localhost/indiv/paul-sneesby/" - name: "Barry Parkinson" slug: "barry-parkinson" taxonomy: "indiv" url: "http://localhost/indiv/barry-parkinson/" - name: "Jack Dohany" slug: "jack-dohany" taxonomy: "indiv" url: "http://localhost/indiv/jack-dohany/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Word-Master%20V2.0%20Oliger%20Disk%20Variety%20%281990%29%28Sneesby%2C%20Paul%3B%20Parkinson%2C%20Barry%3B%20Dohany%2C%20Jack%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "Word-Master V2.0 Oliger Disk Variety (1990)(Sneesby, Paul; Parkinson, Barry; Dohany, Jack)(TS2068)(US)(Program)/Word-Master V2.0 - Fonts (1990)(Sneesby, Paul; Parkinson, Barry)(TS2068)(US)(Data).tap" mediadate: "1990" producer_company: - id: 10976 title: "Jack Dohany" type: "company" url: "http://localhost/company/jack-dohany/" images: - url: "http://localhost/wp-content/uploads/2026/10/wm-editor.png" - url: "http://localhost/wp-content/uploads/2026/10/wm-menu.png" - url: "http://localhost/wp-content/uploads/2026/10/wm-graphmate.png" - url: "http://localhost/wp-content/uploads/2026/10/wm-config.png" related_products: - id: 25387 title: "Word-Master" type: "product" url: "http://localhost/product/word-master/" related_content: - id: 54660 title: "Description of Word-Master" type: "document" url: "http://localhost/document/description-of-word-master/" - id: 54672 title: "Word-Master v2 Oliger Disk Variety" type: "document" url: "http://localhost/document/word-master-v2-oliger-disk-variety/" - id: 25387 title: "Word-Master" type: "product" url: "http://localhost/product/word-master/" media_type_tags: "Word Processor" license: false --- # Word-Master V2.0 Oliger Disk Variety A 64-column word processor written in machine code that can hold many files in memory at once: texts, graphics, fonts, extension programs and page layouts. Embedded commands such as `>margin` and `>graphic` control the printout, and a graphic named in a text is printed in place on an Epson-type dot-matrix printer. The file-handling menu lists the files in memory with their sizes, and loads, saves, renames, links and erases them. This package adds the TYPELINER desktop-publishing extension (with standard, IBM and HR-5 versions), HEADLINER and smaller extensions for saving, customising, printing, converting, patterns, sliding text and editing. It also includes print drivers for the AERCO, Tasman B and C, and A&J interfaces, Graphmate (a separate program for bar, horizontal and pie charts) and CONFIG, which sets Word-Master and TYPELINER up for a chosen printer brand and model. Word-Master was written for the ZX Spectrum by Paul Sneesby and Barry Parkinson; the code reads “WORD-MASTER V2.00: (C) 1987/88 Cardex Computer Software”, and Graphmate’s title screen credits B M Parkinson. Jack Dohany customised, sold and supported it in the US for the TS2068 with a Spectrum emulator. This is his V2.0 “Oliger Disk Variety” of June 1990, from two disks. The program disk includes Dohany’s update notes ($wm2doc), the CONFIG help file ($HELP, CONFIG dated 4-25-91) and demonstration texts. The second disk adds about 40 TYPELINER and HEADLINER fonts and 37 shareware graphic files by Steve Spalding, Dottie Bundy and William J. McBrine III, catalogued in $files. The update notes, the CONFIG help and the catalogue are in the download as text files. Word-Master needs the Spectrum ROM: on a TS2068 that means a Spectrum emulator, and it also runs on a ZX Spectrum 48K. ## Program Analysis ### WORD2 The 19-line loader does `CLEAR 24733`, loads the WM2 code at 53930 and starts it with `RANDOMIZE USR 54052`. The machine code calls BASIC for all file work: it sets `a$`, `s`, `l` and a return address `x`, then continues at line 20 (`LOAD a$CODE s,l`) or line 30 (`SAVE`), and each line ends with `RANDOMIZE USR x`. Line 6 sets the default print options (`POKE 23615`) and the keyboard repeat and click, line 200 limits the drive keys and line 300 is the “Zap” command, which clears all files. The file area runs from 24734 to 53739, which is why Word-Master can’t run with the TS2068 ROM, whose BASIC starts at 26710. ### Graphmate Graphmate takes 4 to 20 values, entered with EDIT and selected with the cursor keys, and draws them as a bar graph with 3D tops, a horizontal bar graph (up to 12 values) or a pie chart drawn with `SIN` and `COS`. Its menu boxes are block-graphic strings held in `DATA`. The gCODE machine code at 63800 stores and restores the screen, fills areas and adds text. The finished chart can be saved as a `SCREEN$` and loaded into Word-Master as a graphic. ### CONFIG CONFIG offers a menu of 20 printer brands plus SPECIAL, then the model and interface. It `POKE`s the matching escape sequences into tables in the WM2 code (from 57173) and patches TYPELINER’s line-feed setting. It then saves the configured WM2 and !type files. Separate line ranges hold the commands for AERCO, Larken, Oliger and Zebra disks, chosen by `sys`. ### Notable Techniques - Graphmate passes a fill pattern to its machine code with `RANDOMIZE USR a$`, which puts the address of the user-defined graphic named in `a$` into SEED. - Graphmate starts its running total at `0.0000000000001` rather than zero, which avoids a division by zero in the pie-chart arithmetic. - CONFIG writes printer codes from `DATA` lines as length-prefixed 4-byte records into WM2’s customisation table. ### Potential Issues - Graphmate stops with “Number too big” if a vertical or horizontal graph is drawn before any value has been entered, because the scale is divided by the largest value. - The Oliger edition of WM2 reads and sets the current drive inside the JLO disk ROM when it starts and when drive keys 1 to 4 are pressed. Without that interface it stops with an error. This copy was converted for tape. The “/” disk syntax was removed from WORD2, CONFIG and Graphmate, the disk-only CAT, ERASE and FORMAT statements were dropped, and 8 bytes of WM2 were patched at 54028 and 54052 so that it starts on drive 0, which Word-Master has always used for cassette. A menu loads Word-Master, Graphmate or CONFIG, and the text, extension and print-driver files follow WM2 on the tape. The fonts and the shareware graphics are on two data tapes, and the artists’ postal addresses have been removed from $files. It was tested in ZEsarUX on a ZX Spectrum 48K: loading and editing a text from tape, saving to tape, loading a graphic from the data tape, drawing a Graphmate chart, and running CONFIG. ## Source Code ``` REM ===== WORD2 ===== 6 POKE VAL "23615",VAL "4": POKE VAL "23561",VAL "30": POKE VAL "23562",VAL "3": POKE VAL "23609",VAL "3" 10 POKE VAL "23560",CODE "Q": LET d=NOT PI: LET s=d: LET l=d: LET x=d: LET a$=" ": LET b=VAL "54134": RANDOMIZE USR VAL "54052" 20 LOAD a$CODE s,l: RANDOMIZE USR x 30 SAVE a$CODE s,l: RANDOMIZE USR x 40 RANDOMIZE USR x 50 LET K$=CHR$ PEEK VAL "54226": IF K$="Z" THEN GO TO VAL "300" 51 IF K$="F" AND d THEN GO TO VAL "60" 52 IF K$="K" THEN CLS : RANDOMIZE USR b: RANDOMIZE USR (b+VAL "5") 53 RANDOMIZE USR X 60 INPUT " FORMAT 80? "; LINE k$: LET t=VAL "40"+(VAL "40" AND (k$="y" OR k$="Y")): INPUT AT NOT PI,NOT PI;(" FORMAT <";d;"> ";t'"NAME: ");k$: IF LEN k$ THEN REM 61 RANDOMIZE USR x 100 CLEAR VAL "24733": LOAD "WM2"CODE : RUN 200 INPUT "Drives: "; LINE k$: IF k$>"0" AND k$<"5" THEN POKE VAL "54617",CODE k$ 201 RUN 300 INPUT "Zap? "; LINE k$: IF k$="y" OR k$="Y" THEN POKE VAL "65532",PEEK VAL "65506": POKE VAL "65533",PEEK VAL "65507": GO TO VAL "10" 301 RANDOMIZE USR x 400 POKE VAL "54225",NOT PEEK VAL "54225": RUN 500 IF PEEK VAL "24734"=CODE " " THEN SAVE "WORD2" LINE VAL "100": SAVE "WM2"CODE VAL "53930",VAL "11606" 501 STOP REM ===== Graphmate ===== 5 BORDER 6: PAPER 6: INK 0: CLS : PAPER 7 10 PRINT AT 5,11;"Graphmate";AT 7,4;"* 1987 by B M Parkinson" 20 INPUT "No. of fields for graph? 4-20",,,z 50 IF z>20 THEN GO TO 10 55 IF z<4 THEN GO TO 10 60 DIM a(z): LET yax=0 80 DATA ":'''''''''''''''''''''''''':" 82 DATA ": Enter Data :" 84 DATA ": EDIT -alter :" 86 DATA ": CURS -select :" 88 DATA ": [m] -menu :" 90 DATA ":..........................:" 100 CLS : RESTORE 80: FOR n=7 TO 12: READ a$: PRINT AT n,18;a$: NEXT n 105 PRINT AT 0,0;: FOR n=1 TO z: PRINT n;":";TAB 3;a(n);TAB 18: NEXT n 110 PRINT OVER 1;AT yax,0; INVERSE 1, 120 GO SUB 250 125 IF c=7 THEN INPUT "Enter Data ";a(yax+1): GO TO 105 130 PRINT OVER 1;AT yax,0; INVERSE 1, 140 IF c=10 THEN LET yax=yax+(1 AND yax0) 160 IF c=109 THEN GO TO 300 200 GO TO 110 250 REM getkey 255 POKE 23658,96 260 LET c=CODE INKEY$: IF c=0 THEN GO TO 260 270 RETURN 300 REM main menu 310 RESTORE 500: FOR n=8 TO 14: READ a$: PRINT AT n,10;a$: NEXT n 320 GO SUB 250 330 IF c=97 THEN GO TO 100 340 IF c=118 THEN GO TO 1000 345 IF c=104 THEN GO TO 1500 350 IF c=112 THEN GO TO 2000 400 GO TO 320 500 DATA ":'''''''''''''''''''''''''''''''''''''':" 502 DATA ": Main Menu :" 504 DATA ": [a] alter data :" 506 DATA ": [v] vertical graph :" 508 DATA ": [h] horizntl graph :" 510 DATA ": [p] pie-chart :" 520 DATA ":......................................:" 900 REM max? 910 LET tot=0: LET max=0: FOR n=1 TO z: IF a(n)>max THEN LET max=a(n) 920 LET tot=tot+a(n): NEXT n 930 LET gdr=1 940 IF gdr12 THEN PRINT ''"Too many fields for this graph!": GO TO 300 1520 LET fac=140/max 1530 PLOT 22,24: DRAW 4+max*fac,0 1540 PLOT 24,22: DRAW 0,4+10*z 1570 FOR n=0 TO max*fac STEP gdr*fac/10: PLOT n+24,23: DRAW 0,-1: NEXT n 1600 FOR n=1 TO z 1610 PLOT 24,26+(z-n)*10 1620 LET y=a(n)*fac 1630 DRAW y,0: DRAW 0,8: DRAW -y,0 1660 NEXT n 1700 GO TO 2500 2000 REM pi-chart 2005 CLS : GO SUB 900 2100 CIRCLE 90,80,60 2110 PLOT 90,80: REM DRAW 0,60 2190 LET xs=0.0000000000001 2200 FOR n=1 TO z 2210 LET xs=xs+a(n) 2260 LET ra=(2*PI)/(tot/xs) 2270 LET op=SIN ra*60 2280 LET ad=COS ra*60 2290 PLOT 90,80: DRAW op,ad 2300 NEXT n 2500 REM tart-it-up 2505 GO SUB 2950 2510 RESTORE 2600: FOR n=10 TO 18: READ a$: PRINT AT n,16;a$: NEXT n 2520 GO SUB 250 2530 IF c=109 THEN GO SUB 2700: IF c=121 THEN GO TO 300 2540 IF c=102 THEN GO TO 3000 2545 IF c=110 THEN GO TO 3500 2550 IF c=115 THEN DIM n$(10): INPUT " SAVE name? ";n$: GO SUB 2900: SAVE n$SCREEN$ 2560 IF c=99 THEN GO SUB 2900: PRINT #1;" COPY ": COPY : INPUT 0 2570 IF c=104 THEN GO SUB 6000: GO SUB 2900 2590 GO TO 2510 2600 DATA ":'''''''''''''''''''''''''''''':" 2601 DATA ": Finishing :" 2602 DATA ": [m] menu :" 2604 DATA ": [f] shading :" 2606 DATA ": [n] add notes :" 2607 DATA ": [h] help :" 2608 DATA ": [s] SAVE :" 2610 DATA ": [c] COPY :" 2612 DATA ":..............................:" 2700 REM yes/no 2710 PRINT #1;"You will lose this picture y/n?" 2720 GO SUB 250: IF c=121 THEN INPUT 0: RETURN 2730 IF c<>110 THEN GO TO 2720 2740 INPUT 0: LET c=0: RETURN 2900 REM RESTORE SCREEN$ 2910 RANDOMIZE USR 63975: RETURN 2950 REM store SCREEN$ 2960 RANDOMIZE USR 63972: RETURN 3000 REM fill 3005 RESTORE 3100: FOR n=11 TO 19: READ a$: PRINT AT n,14;a$: NEXT n: PRINT #1;"Select Pattern" 3010 GO SUB 250: IF c>96 AND c<118 THEN LET a$=CHR$ (47+c): GO TO 3020 3015 GO TO 3010 3020 GO SUB 2900: POKE 23617,0: INPUT 0: PRINT #1;"GRAPH-";a$;" f-fill TRUE VIDEO-quit" 3025 GO SUB 2950: RANDOMIZE USR a$: LET l=USR 63800 3030 INPUT 0: GO SUB 2950:: IF l=15 THEN GO TO 3000 3040 GO TO 2500 3100 DATA ":'''''''''''''''':" 3102 DATA ": Fill :" 3104 DATA ": ABCDEFG :" 3106 DATA ": abcdefg :" 3108 DATA ": HIJKLMN :" 3110 DATA ": hijklmn :" 3112 DATA ": OPQRSTU :" 3114 DATA ": opqrstu :" 3116 DATA ":................:" 3500 REM notes 3520 GO SUB 2900: PRINT #1;"Add notes: TRUE VIDEO-quit" 3530 GO SUB 2950: LET l=USR 63992 3600 INPUT 0: GO SUB 2950: GO TO 2500 5980 PRINT #1;"...any key": GO SUB 250: INPUT 0: RETURN 5990 PAPER 6: CLS : PAPER 7: RETURN 6000 REM help 6010 GO SUB 5990 6020 PRINT "To add the finishing touches to your graph, you can now add shading & notes to the graphic. " 6030 PRINT '"When using either of these functions you can delete a mistake by pressing [EDIT], which flips a stored version of the display back to the screen. " 6040 PRINT '"You can also store the display by pressing [ENTER].", 6060 GO SUB 5980 6100 GO SUB 5990: PRINT "The pointer is moved about the screen with the cursor keys. If using the ~add notes~ function, pressing any key will print it to the screen.",, 6110 PRINT ''"If using the ~shading~ function,you can FILL any enclosed area by pressing [f].", 6120 PRINT ''"You can also draw lines by pressing [x], which marks a point on the screen with a dot, then moving the pointer and pressing [d]. A line will now bedrawn between the two.", 6200 GO SUB 5980: GO SUB 5990 6210 PRINT "When you are satisfied with the graph, you can save it to tape with the SAVE function. Micro- drive owners can alter LINE 2550to save to microdrive instead. " 6220 PRINT '"The graph could then be loaded into Word-Master and printed outas part of a printed document. " 6900 GO TO 5980 9000 REM auto-run 9005 CLEAR 56575 9010 LOAD "gCODE"CODE 9020 RUN 9030 SAVE "Graphmate" LINE 9000 9040 SAVE "gCODE"CODE 63800,1736 9050 STOP REM ===== CONFIG ===== 1 REM 4-25-91 5 GO TO VAL "9000" 10 BORDER e+a: PAPER e+b: INK z 20 CLS : PRINT BRIGHT a;"Please select BRAND of printer: " 21 LET n=tt+a: FOR i=a TO n: PRINT " ";p$(i): NEXT i 29 REM default configuration 34 LET dp=z: REM DPI 120/160 35 LET ej=z: REM 1/216 or 144 36 LET ea=z: REM 1/72 or 1/60 37 LET e2=z: REM no ESC 2 38 LET mr=z: REM no const marg 40 LET r=41: LET x=p: LET l=z: GO TO 50 41 LET p=x: IF p=tt+a THEN GO TO 2100 42 LET n=VAL "70": CLS : PRINT BRIGHT a;"Printer: ";p$(p),"Please select MODEL of printer:",'': GO TO p*t*t 45 LET x=a 46 FOR i=a TO n: PRINT " ";m$(i): NEXT i: LET l=b 50 PRINT #z;AT z,z; BRIGHT a;" H=Help 5-8/SPACE=Move cursor Q=Quit ENTER=Select", 51 IF xn THEN LET x=a 54 POKE key,z: PRINT AT x+l,a; OVER a; BRIGHT a;">";TAB tt+b; 55 IF NOT PEEK key THEN GO TO 55 57 BEEP .005,t: LET k$=CHR$ PEEK key: PRINT AT x+l,a;" "; OVER a;TAB tt+b;: IF k$=" " OR k$="6" THEN LET x=x+a: GO TO 52 58 IF k$="7" THEN LET x=x-a: GO TO 51 59 IF k$="8" THEN LET x=x-e: GO TO 51 60 IF k$="5" THEN LET x=x+e: GO TO 52 61 IF r"" THEN GO TO 62 63 IF k$=CHR$ 13 THEN GO TO r 64 IF k$="h" OR k$="H" THEN GO TO tt*d 65 IF k$="q" OR k$="Q" THEN GO TO 68 66 IF (k$="C" OR k$="c") AND rn THEN GO TO 80 93 GO TO r 94 PRINT #z;AT z,z;k$;": "; FLASH a;">";CHR$ 8; 95 LET k$=INKEY$: IF k$="" THEN GO TO r3+a 96 BEEP .005,t: PRINT #z;k$: IF k$>="a" AND k$<="z" THEN LET k$=CHR$ (CODE k$-32) 97 IF INKEY$<>"" THEN GO TO 97 98 INPUT ;: GO TO r 99 CLS : PRINT BRIGHT a;"Brand: ";p$(p);TAB 27;dp;ej;ea;e2;mr;"Model: ";m$(m);TAB 27;"LJA2M";" I/F: " AND LEN i$;i$,,: RETURN 100 LET n=a: DIM m$(n,t) 101 LET m$(a)="M120/10" 110 LET r=120: GO TO r1 120 IF m=a THEN LET dp=a 190 GO TO r4 200 LET n=d: DIM m$(n,t) 201 LET m$(a)="HR-5": LET m$(b)="M-1009": LET m$(c)="M-1109 Mode I": LET m$(d)="M-1109 Mode II" 202 IF m=b OR m=c THEN LET e2=a 210 LET r=220: GO TO r1 220 IF m=a THEN LET dp=b 290 GO TO r4 300 LET n=a: DIM m$(n,t) 301 LET m$(a)="PW-1080A" 310 LET r=320: GO TO r1 390 GO TO r4 400 LET n=c: DIM m$(n,t) 401 LET m$(a)="MSP-10/15": LET m$(b)="MSP-20/25": LET m$(c)="GSX140" 410 LET r=420: GO TO r1 490 GO TO r4 500 GO TO n 600 LET n=a: DIM m$(n,t): LET m$(a)="WH-1200L" 610 LET r=620: GO TO r1 690 GO TO r4 700 LET n=a: DIM m$(n,tt): LET m$(a)="Personal I & II" 710 LET r=720: GO TO r1 790 GO TO r4 800 GO TO n 900 LET n=a: DIM m$(n,t): LET m$(a)="LA210" 910 LET r=920: GO TO r1 990 GO TO r4 1000 GO TO n 1100 LET n=b: DIM m$(n,tt) 1101 LET m$(a)="FX, MX, RX series": LET m$(b)="L, LQ series" 1110 LET r=1120: GO TO r1 1120 IF m=b THEN LET ej=a: LET ea=a 1190 GO TO r4 1200 LET n=a: DIM m$(n,tt) 1201 LET m$(a)="Proprinter" 1210 LET r=1220: GO TO r1 1220 IF m=a THEN LET e2=a 1290 GO TO r4 1300 LET n=a: DIM m$(n,tt) 1301 LET m$(a)="Spirit 80" 1310 LET r=1320: GO TO r1 1320 IF m=a THEN LET dp=a 1390 GO TO r4 1400 GO TO n 1500 LET n=b: DIM m$(n,tt) 1501 LET m$(a)="ML84 IBM Mode": LET m$(b)="Okimate 20, ML92/93 IBM" 1502 PRINT AT d,tt+c;"IBM Mode";AT c,z; 1510 LET r=1520: GO TO r1 1520 IF m=b THEN LET e2=a 1590 GO TO r4 1600 LET n=a: DIM m$(n,tt) 1601 LET m$(a)="DMP 130 IBM Mode" 1610 LET r=1620: GO TO r1 1620 IF n=a THEN LET e2=a 1690 GO TO r4 1700 LET n=a: DIM m$(n,tt) 1701 LET m$(a)="SP-1000A" 1710 LET r=1720: GO TO r1 1790 GO TO r4 1800 LET n=b: DIM m$(n,tt) 1801 LET m$(a)="D-100": LET m$(b)="D-200/300 Std Mode" 1809 PRINT AT t,z;"Fastex 80 not suitable."''"D-200/300: DIP 3-4 must be ON.";AT c,z; 1810 LET r=1820: GO TO r1 1890 GO TO r4 1900 LET n=d: DIM m$(n,tt) 1901 LET m$(a)="Gemini 10X" 1902 LET m$(b)="SG-10 IBM mode" 1903 LET m$(c)="SG-10 Star mode" 1904 LET m$(d)="N series Std Mode" 1910 LET r=1911: GO TO r1 1920 IF m=a OR m=c THEN LET ej=a 1921 IF m=b THEN LET e2=a 1990 GO TO r4 2000 GO TO n 2100 LET x=a: LET n=e: DIM m$(n,tt) 2101 CLS : PRINT BRIGHT a;" SPECIAL PRINTER CONFIGURATION ",, 2102 PRINT AT t,z;"Please see your printer manual."''"ESC L units are in dots/inch."'" 120 dpi = 960 dots/line."'" 160 dpi = 1280 dots/line." 2103 PRINT '"ESC J units may be 1/216, 1/144"'"or 1/180"". If 180 select 144." 2105 PRINT '"An ESC 2 after ESC A may or may"'"not be required. Usually NO." 2110 LET m$(a)="ESC L = "+("120" AND NOT dp)+("160" AND dp)+" dpi" 2111 LET m$(b)="ESC J = 1/"+("216" AND NOT ej)+("144" AND ej)+"""" 2113 LET m$(c)="ESC A = 1/"+("72" AND NOT ea)+("60" AND ea)+"""" 2114 LET m$(d)="ESC 2 = "+("YES" AND e2)+("NO " AND NOT e2) 2115 LET m$(e)="CONTINUE!" 2120 PRINT AT c,z;: LET r=2121: GO TO r1+a 2121 IF m=e THEN LET m=a: LET m$(a)="Special": GO TO r4 2122 IF m=a THEN LET dp=NOT dp 2123 IF m=b THEN LET ej=NOT ej 2124 IF m=c THEN LET ea=NOT ea 2125 IF m=d THEN LET e2=NOT e2 2130 GO TO 2110 3000 GO SUB s1: PRINT " FUNCTION"," NC C1 C2 C3 "''" Elite",'" Pica"'" Sub/super ON",'" Sub/Super OFF"'" Condensed ON",'" Condensed OFF"'" Emphasized ON",'" Emphasized OFF"'" Dblstrike ON",'" Dblstrike OFF"'" Wide ON",'" Wide OFF"'" Italics ON",'" Italics OFF"'" Underline ON",'" Underline OFF" 3001 DIM s$(3) 3010 LET mi=7: FOR i=z TO mi: GO SUB 3900: NEXT i 3020 GO SUB 3400 3030 PRINT AT 5+j+i*2,16+4*k;">" 3050 POKE key,z 3051 IF NOT PEEK key THEN GO TO 3051 3052 LET d$=CHR$ PEEK key 3055 PRINT AT 5+j+i*2,16+4*k;" " 3060 IF d$>="0" AND d$<="9" THEN GO SUB 3100 3065 IF d$="q" OR d$="Q" THEN GO TO 3500 3070 IF d$>CHR$ 7 AND d$"0" AND d$<"4" THEN LET k$=d$: LET s$=k$: GO SUB 3920: GO TO 3210 3102 GO TO 3240 3105 LET k$=k$+d$: IF LEN k$>3 OR VAL k$>255 THEN GO TO 3240 3110 LET s$=k$: GO TO 3920 3200 IF k=z THEN LET k=c: GO TO 3230 3201 GO SUB 3260: LET k=k-a: RETURN 3210 IF k=c THEN LET k=z: GO TO 3220 3211 GO SUB 3260: LET k=k+a: RETURN 3220 GO SUB 3260 3221 LET j=NOT j: IF NOT j THEN LET i=i+a 3222 IF i>mi THEN LET i=z 3223 RETURN 3230 GO SUB 3260: LET j=NOT j 3231 IF j THEN LET i=i-a 3232 IF i8 = move >": LET i=z: LET j=z: LET k=z: RETURN 3500 GO SUB s1: PRINT " FUNCTION"," NC C1 C2 C3 "''" Draft",'" NLQ"'" Left Margin",'" Skip (unused)"'" n/216 LF",'" Carriage Rtn"'" Line Feed",'" Form Feed"'" Reset",'" n/72 LF" 3510 LET mi=9: FOR i=z TO mi: GO SUB 3950: NEXT i 3520 GO SUB 3400 3530 PRINT AT 5+i,16+4*k;">" 3550 POKE key,z 3551 IF NOT PEEK key THEN GO TO 3551 3552 LET d$=CHR$ PEEK key 3555 PRINT AT 5+i,16+4*k;" " 3560 IF d$>="0" AND d$<="9" THEN GO SUB 3600 3565 IF d$="q" OR d$="Q" THEN GO TO 5080 3570 IF d$>CHR$ 7 AND d$"0" AND d$<"4" THEN LET k$=d$: LET s$=k$: GO SUB 3970: GO TO 3710 3602 GO TO 3740 3605 LET k$=k$+d$: IF LEN k$>3 OR VAL k$>255 THEN GO TO 3740 3610 LET s$=k$: GO TO 3970 3700 IF k=z THEN LET k=c: GO TO 3730 3701 GO SUB 3760: LET k=k-a: RETURN 3710 IF k=c THEN LET k=z: GO TO 3720 3711 GO SUB 3760: LET k=k+a: RETURN 3720 GO SUB 3760 3721 LET i=i+a 3722 IF i>mi THEN LET i=z 3723 RETURN 3730 GO SUB 3760 3731 LET i=i-a 3732 IF imargin 8 command at the"'"start of each text file." 5006 PRINT '"This feature works by defining"'"carriage return as CR TAB"'" and ESC A as TAB ESC A." 5007 PRINT '" CR TAB = 13 9"'" TAB ESC A = 9 27 65" 5008 PRINT '"This feature is helpful with"'"printers which lack the usual"'"ESC l command for a left margin." 5010 LET k$="Constant Margin? (Y/N/Q)": LET r=VAL "5011": GO TO r3 5011 IF k$="Q" THEN GO TO t 5012 IF k$="Y" THEN LET mr=a 5015 IF k$="N" THEN LET mr=z 5016 IF k$<>"Y" AND k$<>"N" THEN GO TO VAL "5010" 5020 IF NOT ej THEN GO TO VAL "5040" 5021 GO SUB s1: PRINT ''"Using this printer, TYPELINER"'"cannot render a square screen"'"box perfectly on paper." 5023 PRINT '"Therefore, please select:"''"1: Height LESS than width, or"''"2: Height MORE than width, as:" 5024 PRINT AT t+e,d;"Paper Square Paper"'TAB 13;"Screen";'TAB e+a;"1";TAB t+c;"Box";TAB tt+d;"2" 5025 LET x=56: LET y=66: PLOT 100,y: DRAW x,z: DRAW z,-x: DRAW -x,z: DRAW z,x 5026 PLOT 28,y: DRAW x,z: DRAW z,-(x-4): DRAW -x,z: DRAW z,x-4 5027 PLOT 170,y: DRAW x,z: DRAW z,-(x+4): DRAW -x,z: DRAW z,x+4 5030 LET k$="Select 1 or 2 or Q": LET r=5031: GO TO r3 5031 IF k$="Q" THEN GO TO t 5034 IF k$<"1" OR k$>"2" THEN GO TO 5030 5035 LET ej=VAL k$ 5040 GO SUB s1: PRINT AT t,z;" Please insert unprotected"'" Word Master V2 Program Disk"'" in current drive." 5041 LET k$="Disk ready? (Y/N)": LET r=5042: GO TO r3 5042 IF k$="Y" THEN GO TO 5050 5044 IF k$="N" THEN GO TO t 5045 GO TO 5041 5050 GO SUB s1: PRINT AT t,z;"Loading Wordmaster CODE ": LET ret=5051: GO TO 8000 5051 GO SUB s1: PRINT AT t,z; BRIGHT a;"Configuring... please wait.", 5052 GO SUB 7000 5054 LET x=t+b: IF ea THEN LET x=t 5055 POKE VAL "65465",x 5056 LET y=VAL "57158" 5057 IF NOT e2 THEN POKE y,80: POKE y+a,222 5058 IF e2 THEN POKE y,211: POKE y+a,255 5060 IF mr THEN RESTORE 7020: LET z2=d: LET y=57303: GO SUB 7050: LET y=57319: GO SUB 7050: LET y=57311: GO SUB 7050 5070 GO SUB 6000 5075 IF p=tt+a THEN GO TO 3000 5080 GO SUB s1: PRINT AT e,z;"READY TO UPDATE DISK."''"Select:"''"1: Update disk"''"2: Check/modify customization"''"3: Start over" 5081 LET k$="Select 1 TO 3": LET r=5082: GO TO r3 5082 IF k$="1" THEN GO TO 5090 5083 IF k$="2" THEN GO TO 3000 5084 IF k$="3" THEN GO TO t 5089 GO TO 5081 5090 GO SUB s1: PRINT AT t,z; BRIGHT a;"Updating program disk." 5091 LET ret=5100: GO TO 8000+t*sys 5100 IF dp=b THEN GO TO 5200 5120 IF NOT dp THEN LET y=2876 5130 IF dp THEN LET y=2851 5135 LET ret=5140: GO TO 8040+t*sys 5140 LET x=c: IF ej THEN LET x=ej 5141 POKE b1+y,x 5150 LET ret=5200: GO TO 8090+t*sys 5160 IF NOT dp THEN PRINT #d: SAVE "!type .CF"CODE b1,5081 5170 IF dp THEN PRINT #d: SAVE "!t/ibm.CF"CODE b1,5082 5200 GO SUB s1 5210 PRINT ''"Configuration is done." 5211 PRINT '"With this printer you should useonly this version of TYPELINER:"''TAB t; 5220 IF NOT dp THEN PRINT "Standard" 5221 IF dp=a THEN PRINT "IBM" 5222 IF dp=2 THEN PRINT "HR5" 5225 PRINT ''"Do not use the !custom program,"'"since it will undo changes made"'"with this program." 5230 LET k$="Load WORD MASTER? (y/n)": LET r=VAL "5231": GO TO r3 5231 IF k$="Y" THEN GO TO 8190+t*sys 5240 LET k$="Start over? (y/n)": LET r=5241: GO TO r3 5241 IF k$="Y" THEN GO TO t 5250 GO TO 5230 6000 REM star 6001 IF p=19 AND m=a THEN POKE 57203,46: POKE 57235,46: POKE 57294,77: GO SUB 6500: GO SUB 6510: GO TO 6540 6002 IF p=19 AND m=b THEN GO SUB 6520: GO TO 6530 6003 IF p=19 AND m=c THEN POKE 57294,77: GO SUB 6540: GO TO 6550 6010 REM blue chip 6011 IF p=a AND m=a THEN GO SUB 6500: GO TO 6560 6490 RETURN 6500 REM no nlq 6501 LET y=57283: GO SUB 6900: LET y=57287: GO TO 6900 6510 REM no reset 6511 LET y=57315: GO TO 6900 6520 REM nlq 4 6521 RESTORE 6529: LET y=57283: LET z2=d+d: GO TO 7050 6529 DATA 2,27,53,0,2,27,52,0 6530 REM ital I 6531 RESTORE 6539: LET z2=d: LET y=57197: GO SUB 7050: LET y=57229: GO TO 7050 6539 DATA 3,27,73,1,3,27,73,0 6540 REM elite B 6541 RESTORE 6549: LET z2=d: LET y=57173: GO SUB 7050: LET y=57205: GO TO 7050 6549 DATA 3,27,66,2,3,27,66,1 6550 REM nlq B 6551 RESTORE 6559: LET y=57283: LET z2=d+d: GO TO 7050 6559 DATA 3,27,66,5,3,27,66,4 6560 REM no italics 6561 LET y=57197: GO SUB 6900: LET y=57229: GO TO 6900 6900 RESTORE 6990: LET z2=d: GO TO 7050 6990 DATA 1,0,0,0 7000 RESTORE 7100: LET y=57173: LET z2=64: GO SUB 7050: LET y=57283: LET z2=40: GO SUB 7050 7010 LET y=65491: LET z2=t: GO TO 7050 7019 REM const marg 7020 DATA 2,13,9,0,3,9,27,65 7021 DATA 2,12,9,0 7050 FOR i=z TO z2-a: READ x: POKE y+i,x: PRINT AT t+c,t;y+i;" ";x,: NEXT i: RETURN 7059 REM default customization 7100 DATA 2,27,77,0,3,27,83,0 7101 DATA 1,15,0,0,2,27,69,0 7102 DATA 2,27,71,0,3,27,87,1 7103 DATA 2,27,52,0,3,27,45,1 7104 DATA 2,27,80,0,2,27,84,0 7105 DATA 1,18,0,0,2,27,70,0 7106 DATA 2,27,72,0,3,27,87,0 7107 DATA 2,27,53,0,3,27,45,0 7110 DATA 3,27,120,0,3,27,120,1 7111 DATA 3,13,27,108,1,0,0,0 7112 DATA 2,27,74,0,1,13,0,0 7113 DATA 1,10,0,0,1,12,0,0 7114 DATA 2,27,64,0,2,27,65,0 7120 DATA 205,80,222,62,27,215,62,2,215,201 7999 STOP 8000 IF sys=a THEN REM 8001 IF sys=b THEN PRINT #d: LOAD "WM.C2"CODE 8002 IF sys=c THEN LOAD "WM2"CODE 8003 IF sys=d THEN LOAD *"WM2.COD"CODE 8005 GO TO ret 8010 IF if=a THEN REM 8011 IF if=b THEN REM 8012 IF if=c THEN REM 8013 IF if=d THEN REM 8015 GO TO ret 8020 IF if=a THEN PRINT #d: LOAD "