A desktop publishing suite of eleven programs that share one pointer-and-icon interface. FIRST EDITION lays out pages of text, headline lettering and clip art; THE PRESS lays out a scrolling page that can take in whole screens and pictures; LETTER-PERFECT writes letters; THE LABELER designs labels; CARD MAKER builds four-panel greeting cards; QUICK SCREEN composes a single screen; and THE BANNER PRINTER prints long banners of text and large graphic designs. THE CREATOR draws and edits the graphic libraries the other programs use, THE FILE KEEPER sorts graphics between libraries, and THE TRANSLATOR loads icon files and turns them into graphic designs. The arrow is moved with Q, A, O and P and SPACE selects; every program has a FILE menu for loading and saving its work, and the layout programs have a PRINT menu.
The REM lines credit FIRST EDITION (versions 1.0 and 1.1), CARD MAKER, QUICK SCREEN and THE CREATOR to Eric Boisvert, and THE PRESS, LETTER-PERFECT, THE LABELER, THE FILE KEEPER and THE TRANSLATOR to Kristian Boisvert, all “Copyright 1989 BYTE POWER”. THE BANNER PRINTER v2.0 is also by Eric Boisvert. On the Oliger disks it survives only as a JLO state save, but a Larken disk of The Print Factory has its program files, and it is now on the program tape.
The download holds six tapes. The program tape starts with a menu (keys A to L) that loads any of the programs, plus the 320-byte ZX DRIVER, a relocatable LPRINT driver that loads at 64000. DEMO PAGE (for FIRST EDITION), PRESSDEMO, a dithered photograph for THE PRESS, and EXAMPL.CC, a sample card for CARD MAKER, follow their programs. The second tape holds the graphics disk that came with the package: the clip-art libraries ANIMALS, OFFICE, TRANSPORT, ARTS, MISC., COMICS and DIGITIZED, three frames, and FONT 1 to FONT 13, saved in the same graphic-library format as the clip art. The third tape adds 48 more libraries from two further graphics disks, whose artists are not named, along with UPDATE magazine logo files, three of them QUICK SCREEN screens.
Program Analysis
Structure
Each program is a short BASIC shell around a large machine-code block loaded at 28000 or above. The machine code runs the whole screen interface and drops back into BASIC only for file work. It jumps to fixed line numbers: 1000 to save, 1500 or 2000 to load a page, 2500 to load graphics and 3000 to load fonts. Each of these routines asks for a file name with INPUT "FILE NAME:"; LINE N$, does one LOAD or SAVE with a fixed address and length, and re-enters the machine code with LET l=USR .... When the machine code needs to tell BASIC where to load, it puts the address in the SEED system variable, which BASIC reads back with PEEK 23670+256*PEEK 23671.
Loaders
The auto-run lines (8000, 8010, 9995 or 9998) set white paper, CLEAR 27999 (or higher), print “STILL LOADING…” and then switch to INK 7, so the tape headers that follow are printed white on white and stay hidden. Line 9999 in each program is the publisher’s mastering line that saved the BASIC and its code blocks.
Data formats
Graphic libraries are saved from 28000 by THE CREATOR, with the length worked out from a pointer in the machine code. The other programs load them at their own working addresses: 43404 for FIRST EDITION, 44800 for CARD MAKER, 40288 for QUICK SCREEN and 39592 for THE FILE KEEPER. QUICK SCREEN saves 6144-byte bitmaps and can load an ordinary SCREEN$. THE BANNER PRINTER saves a banner as 24475 bytes from 39525 and loads graphics at 41829. THE TRANSLATOR saves its output in two parts when it is longer than 12204 bytes.
Notable Techniques
- Almost every number in the BASIC is written as
VAL "n", and zero asNOT PI, to save memory. - Loader messages are hidden by switching to
INK 7on white paper beforeLOAD. - LETTER-PERFECT works out its save length with
VAL "USR 62141-27999", which calls the machine code to find the end of the text. - The ZX DRIVER finds its own address (by calling a
RETin ROM and reading the stack) and patches the printer channel soLPRINToutput goes through its routine.
Potential Issues
- The CARD MAKER code file “C” is damaged on both Oliger Print Factory disks: it holds disk directory sectors and zeros instead of program code. The first edition of this archive used code recovered from a JLO state save of CARD MAKER; the tape now uses the intact copy from the Larken disk.
- CARD MAKER’s auto-run line 9995 loaded the next code block (GRAFIX4) at 42496, which is the card area, so the sample graphics appeared as noise on the card. The state save shows GRAFIX4 belongs at 44800, so line 9995 now loads it there through the graphics loader at line 2515.
- THE PRESS line 2090 had a Larken
RANDOMIZE USR 100in front of the fontLOAD, a leftover that would crash without a Larken interface. It was removed. - FIRST EDITION 1.0 and 1.1 load pages with different lengths (22900 and 24436 bytes), so a page saved from 1.1 may be too long to load into 1.0.
These programs come from the Oliger (JLO SAFE) disk edition of The Print Factory, except THE BANNER PRINTER, the CARD MAKER code and the sample card, which come from the Larken disk edition. They were converted to run from tape: the “/” and Larken disk syntax was removed from every LOAD and SAVE, CARD MAKER’s loader was repaired, and a menu was added. The machine code makes no disk calls; all file work goes through BASIC. Every program was tested in ZEsarUX on a TS2068, loading and saving pages, graphics and screens from tape.
The download also holds three more clip-art tapes, taken from Larken disks labelled Print Factory Collection 4, 5 and 6. Collection 4 has the miscellaneous libraries mis17+ to mis33+ (17 libraries, 184 graphics); Collection 5 has more people, faces, sports and holiday art (men4+ to men7d, wmen3+, face5+ to fac10+, sprt3+ to sprt5-, hday4+ and hday5-; 16 libraries, 176 graphics); and Collection 6 has cartoons, animals, Christmas art, transport and computers (funy5+ to funy7d, anim8+ to ani13+, xmas3+ to xmas5-, tran3+ to tran5- and comp2+; 16 libraries, 168 graphics). They are in the same graphic-library format as the rest of the clip art: each library is a series of pictures, each stored as its height and width in character cells followed by eight bytes per cell. The ending of a library’s name gives its size: “+” libraries hold 8 pictures, “–” libraries 16, and “d” libraries 6 to 16. Each file keeps its disk name without the .C1 ending, so it loads by that name through each program’s graphics loading option; the names are in lower case, so CAPS LOCK has to be switched off before typing one. Who drew these libraries is not recorded. The Sinclair Desktop Publishing Journal reported on extra Print Factory graphics in New Print Factory Graphics Now Available and reviewed John McMichael’s graphics disks in Graphic Design Files for The Print Factory family of programs.
A fourth Larken disk, Print Factory Collection 1, holds the GRAPHICS 1 libraries (misc1+ to mis11+, men1+ to men3d, wmen1+ and wmen2+). Compared with it, ten of the libraries first taken from the Oliger GRAPHICS 1+2 disk held the wrong data: each one contained the graphics of the library that follows it on the disk (the file named men1+ held men2+, men2+ held men3d, and so on), and the blank sectors in the old men3d and misc8+ files belonged to those misplaced copies, not to the libraries themselves. The Larken copies are complete, so all sixteen GRAPHICS 1 libraries on the GR1-GR3 tape now come from that disk, including misc1+, misc7- and wmen1+, which were missing before. Collections 2 and 3 on the Larken disks are identical to the GRAPHICS 2 and GRAPHICS 3 libraries already on that tape. The new libraries were checked by loading one into THE CREATOR in ZEsarUX.
The Banner Printer
THE BANNER PRINTER v2.0 by Eric Boisvert (menu key F) composes a banner from lines of text and large graphic designs and prints it sideways on a continuous strip of paper. Its icon bar has HOME, FILE, TEXT, PRINT, END, LEFT, GRAPHIC DESIGNS and RIGHT. TEXT types lines in Font I, II or III, at normal or double size, or with the Super Set, and EDIT (CAPS SHIFT and 1) ends the typing. GRAPHIC DESIGNS steps through the designs with Next and Previous, and Select picks one up so the arrow can place it. The designs loaded with the program are large headline letters followed by further designs. PRINT prints the banner on a large printer or the T/S 2040, with Aerco, Tasman B or other interface drivers and a Customize option. FILE saves, loads and clears banners, loads graphics and fonts, and sets the banner size and arrow speed.
The program follows the same plan as the other modules. Line 1010 saves a banner as 24475 bytes from 39525, line 2010 loads one, line 2510 loads graphics at 41829 (up to 21100 bytes), and line 3010 loads a 768-byte font at the address the machine code leaves in SEED. Its design file, GRAFX2.CG (10134 bytes), starts with the same headline letters as FONT 1 on the graphics tape. On the Oliger disks THE BANNER PRINTER survives only as a JLO state save. The tape version comes from a Larken (LKDOS) disk of The Print Factory, which has the program files BANNER.B1, BANNER.C1 and GRAFX2.CG. For tape, the Larken LET L=USR 100: and RANDOMIZE USR 100 prefixes were removed from the LOAD and SAVE lines, the CAT before the file-name prompt was dropped, the loader line 9998 now hides the tape headers like the other loaders, and Quit Program ends with NEW instead of reloading the Larken menu. In ZEsarUX it loaded from the tape menu, took text and a design, saved a banner to tape and loaded it back, and ran its print routine with the T/S 2040 driver.
The Larken disk edition
The same Larken disk holds the other ten programs at the same version numbers as the Oliger disks. Their code files are identical, or differ only in a few dozen bytes of work space and settings that the programs keep in memory; the graphic libraries, DEMO PAGE and PRESSDEMO are identical. The BASIC differs only in the disk syntax and in Quit, which loads the disk’s own two-page menu (MENU.B1) instead of using NEW. The Larken disk has no copy of the 4856-byte GRAFIX library that FIRST EDITION 1.0 and THE LABELER load on the Oliger disks; there THE LABELER loads the 8268-byte library instead. A second Larken disk, a 720K copy, holds the same files.
The Oliger copy of the CARD MAKER code was damaged, and the first edition of this tape used code recovered from a JLO state save. The Larken disk has the intact file, CARD.C1, and the tape now uses it as C. It matches the recovered code except in its work areas. The Larken disk also has a sample card, EXAMPL.CC (“For Someone Special”), which now follows CARD MAKER on the tape and loads with Load Card.
Source Code
REM ===== PFACTORY =====
10 BORDER 7: PAPER 7: INK 0: CLS
20 PRINT AT 0,7;"THE PRINT FACTORY";AT 1,5;"* 1989 BYTE POWER (tape)"
30 PRINT AT 3,1;"A FIRST EDITION 1.1 (layout)";AT 4,1;"B FIRST EDITION 1.0 + demo";AT 5,1;"C THE PRESS 2.0 + demo";AT 6,1;"D LETTER-PERFECT 2.0";AT 7,1;"E THE LABELER 2.0";AT 8,1;"F CARD MAKER 1.0";AT 9,1;"G QUICK SCREEN 1.0";AT 10,1;"H THE CREATOR 2.0 (graphics)";AT 11,1;"I THE FILE KEEPER 1.0";AT 12,1;"J THE TRANSLATOR 1.0";AT 13,1;"K ZX DRIVER (2040 LPRINT)"
40 PRINT AT 15,1;"Programs by Eric and Kristian";AT 16,1;"Boisvert. Graphics and fonts";AT 17,1;"are on the second tape file.";AT 19,1;"Press A-K, then PLAY the tape"
50 LET k$=INKEY$: IF k$>="a" AND k$<="k" THEN LET k$=CHR$ (CODE k$-32)
60 IF k$<"A" OR k$>"K" THEN GO TO 50
70 CLS : PRINT AT 10,4;"Searching the tape..."
80 IF k$="A" THEN LOAD "FIRST 1.1"
81 IF k$="B" THEN LOAD "FIRST 1.0"
82 IF k$="C" THEN LOAD "PRESS"
83 IF k$="D" THEN LOAD "LETTER"
84 IF k$="E" THEN LOAD "LABELER"
85 IF k$="F" THEN LOAD "CARD MAKER"
86 IF k$="G" THEN LOAD "QUICK SCRN"
87 IF k$="H" THEN LOAD "CREATOR"
88 IF k$="I" THEN LOAD "FILEKEEPER"
89 IF k$="J" THEN LOAD "TRANSLATOR"
90 IF k$="K" THEN CLEAR 63999: LOAD "ZX DRIVER"CODE 64000: RANDOMIZE USR 64000: CLS : PRINT AT 10,1;"ZX DRIVER loaded at 64000 and";AT 11,1;"started (RANDOMIZE USR 64000).": STOP
REM ===== FIRST 1.1 =====
0 REM FIRST EDITION Version 1.1Written by Eric Boisvert Copyright *1989 BYTE POWER
1 GO TO VAL "1030"
1000 REM SAVE PAGE
1010 GO SUB VAL "4e3": SAVE n$CODE VAL "41100",a
1030 PRINT ;: LET l=USR VAL "31609"
2000 REM LOAD PAGE
2005 GO SUB VAL "4e3"
2010 LET a=USR VAL "28577": LOAD n$CODE VAL "41100",VAL "24436": GO TO VAL "2530"
2500 REM LOAD GRAPHICS
2510 GO SUB VAL "4e3"
2520 LET a=USR VAL "28577": LOAD N$CODE VAL "43404",VAL "13968"
2530 PRINT ;: INK NOT PI: LET l=USR VAL "31303"
3000 REM LOAD FONTS
3010 GO SUB VAL "4E3": LOAD N$CODE A,VAL "768": GO TO VAL "1030"
4000 REM INPUT FILE NAME
4010 INPUT "FILE NAME:"; LINE N$: IF LEN N$>VAL "10" THEN GO TO VAL "4e3"
4020 LET A=VAL "PEEK 23670+256*PEEK 23671": RETURN
9000 REM QUIT
9010 PAUSE VAL "60": CLEAR VAL "65535": NEW
9998 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD "F1"CODE : LET N$="GRAFIX1": GO TO VAL "2520"
9999 SAVE "FIRST 1.1" LINE VAL "9998": SAVE "F1"CODE VAL "28E3",VAL "15404": SAVE "GRAFIX1"CODE VAL "43404",VAL "8268": RUN
REM ===== FIRST 1.0 =====
0 REM FIRST EDITION Version 1.0Written by Eric Boisvert Copyright *1989 BYTE POWER
1 GO TO VAL "1030"
1000 REM SAVE PAGE
1010 GO SUB VAL "4e3": SAVE n$CODE VAL "41100",a
1030 PRINT ;: LET l=USR VAL "31609"
2000 REM LOAD PAGE
2005 GO SUB VAL "4e3"
2010 LET a=USR VAL "28577": LOAD n$CODE VAL "41100",VAL "22900": GO TO VAL "2530"
2500 REM LOAD GRAPHICS
2510 GO SUB VAL "4e3"
2520 LET a=USR VAL "28577": LOAD N$CODE VAL "43404",VAL "12432"
2530 PRINT ;: INK NOT PI: LET l=USR VAL "31303"
3000 REM LOAD FONTS
3010 GO SUB VAL "4E3": LOAD N$CODE A,VAL "768": GO TO VAL "1030"
4000 REM INPUT FILE NAME
4010 INPUT "FILE NAME:"; LINE N$: IF LEN N$>VAL "10" THEN GO TO VAL "4e3"
4020 LET A=VAL "PEEK 23670+256*PEEK 23671": RETURN
9000 REM QUIT
9010 PAUSE VAL "60": CLEAR VAL "65535": NEW
9900 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD ""CODE : LET N$="DEMO PAGE": GO TO VAL "2010"
9998 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD "F"CODE : LET N$="GRAFIX": GO TO VAL "2520"
9999 SAVE "FIRST 1.0" LINE VAL "9998": SAVE "F"CODE VAL "28E3",VAL "15404": SAVE "GRAFIX"CODE VAL "43404",VAL "8268": RUN
REM ===== PRESS =====
0 REM THE PRESS Version 2.0 Program by Kristian Boisvert Copyright *1989 BYTE POWER
100 PRINT ;: LET L=USR VAL "51075"
1000 REM SAVE FILE
1010 GO SUB VAL "5E3": IF a$="" THEN GO TO VAL "1010"
1020 SAVE A$CODE VAL "28000",VAL "PEEK 28000*PEEK 28001*8+2"
1030 PRINT ;: LET L=USR VAL "51109"
1500 REM LOAD FILE
1510 GO SUB VAL "5e3"
1520 LOAD A$CODE VAL "28000",VAL "23042"
1530 PRINT ;: INK NOT PI: LET L=USR VAL "54484"
2000 REM FONTS
2005 PRINT AT 8,1;"STANDARD OR DOUBLE HEIGHT SET?"
2010 PAUSE NOT PI: LET a=VAL "PEEK 23556"
2020 LET ad=VAL "PEEK 23670+256*PEEK 23671": LET l=VAL "768": IF a=CODE "D" THEN LET ad=VAL "59471": LET l=VAL "1536"
2080 PRINT AT VAL "8",NOT PI,,: GO SUB VAL "5e3"
2090 LOAD A$CODE ad,l
2100 GO TO VAL "1030"
2250 REM SCREEN$
2510 GO SUB VAL "5e3"
2520 LOAD A$SCREEN$
2530 PRINT ;: LET L=USR VAL "55299"
3500 REM NEW
3510 PAUSE VAL "120": CLEAR VAL "65535": NEW
5000 REM GET NAME
5010 INPUT "ENTER FILENAME: "; LINE A$: IF LEN A$>VAL "10" THEN GO TO VAL "5010"
5020 RETURN
8500 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD ""CODE : LET L=USR VAL "63274": LET A$="": GO TO VAL "1520"
9998 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK 0: LOAD "P"CODE : LET L=USR VAL "63274": RUN
9999 SAVE "PRESS" LINE VAL "9998": SAVE "P"CODE VAL "51054",VAL "12946": RUN
REM ===== LETTER =====
0 REM LETTER-PERFECT Version 2.0 Program by Kristian Boisvert Copyright *1989 BYTE POWER
100 POKE VAL "27999",NOT PI: PRINT ;: LET L=USR VAL "43554"
1000 REM SAVE FILE
1010 GO SUB VAL "5e3": IF a$="" THEN GO TO VAL "1010"
1020 SAVE A$CODE VAL "28000",VAL "USR 62141-27999"
1030 PRINT ;: LET L=USR VAL "43582"
1500 REM LOAD FILE
1510 GO SUB VAL "5e3"
1520 LOAD A$CODE VAL "28000",VAL "15360"
1530 GO TO VAL "100"
2000 REM FONTS
2010 GO SUB VAL "5e3"
2090 LOAD A$CODE VAL "58274",VAL "3600"
2100 GO TO VAL "1030"
3000 REM STOP
3010 STOP
3500 REM NEW
3510 PAUSE VAL "120": CLEAR VAL "65535": NEW
5000 REM GET NAME
5010 INPUT "ENTER FILENAME: "; LINE A$: IF LEN A$>VAL "10" THEN GO TO VAL "5010"
5020 RETURN
8000 REM LOAD
8010 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27998": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD "L"CODE : INK NOT PI: POKE VAL "27999",NOT PI: LET L=USR VAL "62154": RUN
9998 REM SAVE
9999 SAVE "LETTER" LINE VAL "8E3": SAVE "L"CODE VAL "43500",VAL "20500": RUN
REM ===== LABELER =====
0 REM THE LABELER Version 2.0 Program by Kristian Boisvert Copyright *1989 BYTE POWER
100 PRINT ;: LET L=USR VAL "51412"
1000 REM SAVE LABEL
1010 GO SUB VAL "5e3": IF a$="" THEN GO TO VAL "1010"
1020 SAVE A$CODE VAL "47203",VAL "4097"
1030 GO TO VAL "100"
1500 REM LOAD LABEL
1510 GO SUB VAL "5e3"
1520 LOAD A$CODE VAL "47203",VAL "4097"
1530 PRINT ;: LET L=USR VAL "54526"
2000 REM LOAD FONTS
2010 GO SUB VAL "5e3"
2015 LET set=PEEK VAL "58246": IF set=NOT PI THEN POKE VAL "58246",SGN PI: LET set=SGN PI
2020 LET set=VAL "set*768+58102"
2025 LOAD A$CODE set,VAL "768"
2030 GO TO VAL "100"
2500 REM LOAD GRAPHIC DESIGNS
2510 GO SUB VAL "5e3"
2520 LOAD "GRAFIX2"CODE VAL "28000",VAL "19200"
2530 PRINT ;: INK NOT PI: LET L=USR VAL "54625"
3000 REM BREAK TO BASIC
3010 STOP
3500 REM QUIT PROGRAM
3510 PAUSE VAL "120": CLEAR VAL "65535": NEW
5000 REM INPUT STRING
5010 INPUT "ENTER FILENAME: "; LINE A$: IF LEN A$>VAL "10" THEN GO TO VAL "5010"
5020 RETURN
8000 REM LOAD CUSTOMIZED
8010 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD "L2"CODE : LET L=VAL "USR 61373+USR 61718+USR 58448": LET A$="": GO TO VAL "2520"
9998 REM SAVE CUSTOMIZED
9999 SAVE "LABELER" LINE VAL "8e3": SAVE "L2"CODE VAL "51317",VAL "12683": SAVE "GRAFIX2"CODE VAL "28000",VAL "4856": RUN
REM ===== CARD MAKER =====
0 REM CARD MAKER Version 1.0Written by Eric Boisvert Copyright *1989 BYTE POWER
100 PRINT ;: INK NOT PI: LET l=USR VAL "31505"
1000 REM SAVE
1010 GO SUB VAL "5e3"
1020 SAVE A$CODE VAL "42496",A
1030 RUN
2000 REM LOAD
2010 GO SUB VAL "5e3"
2020 LOAD A$CODE VAL "42496",VAL "19200"
2030 RUN
2500 REM LOAD GRAPHICS
2510 GO SUB VAL "5e3"
2515 LET l=USR VAL "30958"
2520 LOAD A$CODE VAL "44800",VAL "15300"
2530 RUN
3000 REM LOAD FONTS
3010 GO SUB VAL "5e3"
3020 LOAD A$CODE A,VAL "768"
3030 RUN
5000 REM GET FILE NAME
5010 LET A=VAL "PEEK 23670+256*PEEK 23671"
5020 INPUT "FILE NAME:"; LINE a$: IF LEN a$>VAL "10" THEN GO TO VAL "5020"
5030 RETURN
9000 REM QUIT PROGRAM
9010 PAUSE VAL "60": CLEAR VAL "65535": NEW
9995 BORDER VAL "7": INK NOT PI: PAPER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD "C"CODE : LET a$="": GO TO VAL "2515"
9998 BORDER VAL "7": INK NOT PI: PAPER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": INK VAL "7": LOAD "GRAFIX4"CODE : LET a$="": GO TO VAL "2515"
9999 SAVE "CARD MAKER" LINE VAL "9995": SAVE "C"CODE VAL "28E3",VAL "14436": SAVE "GRAFIX4"CODE VAL "44800",VAL "7492": RUN
REM ===== QUICK SCRN =====
0 REM QUICK SCREEN Version 1.0Written by Eric Boisvert Copyright *1989 BYTE POWER
10 GO TO 1030
100 INK 0: PAPER 7: BORDER 7: CLEAR 27999: PRINT AT 10,8;"STILL LOADING...": INK 7: LOAD "QUICK SCRN"CODE : LOAD "GRAFIX5"CODE
110 PRINT ;: INK 0: LET l=USR 50303
1000 REM SAVE SCREEN
1010 GO SUB 4e3: SAVE n$CODE 34144,6144
1030 PRINT ;: LET l=USR 50374
2000 REM LOAD SCREEN
2010 GO SUB 4E3: LOAD n$CODE 28000,6912: LET l=USR 61704+USR 61209: GO TO 1030
2500 REM LOAD GRAPHICS
2510 GO SUB 4e3
2520 LET l=USR 61249: LOAD n$CODE 40288,9500: PRINT ;: LET l=USR 50350
3000 REM LOAD FONTS
3010 GO SUB 4E3: LOAD N$CODE A,768: GO TO 1030
4000 REM ENTER FILE NAME
4010 INPUT "FILE NAME:"; LINE N$: IF LEN N$>10 THEN GO TO 4010
4020 LET A=PEEK 23670+256*PEEK 23671: RETURN
9000 REM QUIT
9010 PAUSE 60: CLEAR 65535: NEW
9999 SAVE "QUICK SCRN" LINE 100: SAVE "QUICK SCRN"CODE 50240,13760: SAVE "GRAFIX5"CODE 40288,4126: RUN
REM ===== CREATOR =====
0 REM THE CREATOR Version 2.0Program by Eric Boisvert Copyright *1989 BYTE POWER
10 GO TO VAL "2040"
1000 REM SAVE FILE
1010 GO SUB VAL "3E3": IF N$="" THEN GO TO VAL "1E3"
1020 LET LEN=VAL "PEEK 23670+256*PEEK 23671"
1030 PRINT ''" SAVING ";N$;", LEN ";LEN
1040 SAVE N$CODE VAL "28E3",LEN
1050 PRINT ;: LET L=USR VAL "51461"
2000 REM LOAD FILE
2020 GO SUB VAL "3E3": LET L=USR VAL "59077"
2030 LOAD N$CODE VAL "28E3",VAL "21690"
2040 PRINT ;: LET L=USR VAL "51443"
3000 REM ENTER FILE NAME
3010 INPUT "ENTER FILENAME:"; LINE N$: IF LEN N$>VAL "10" THEN GO TO VAL "3E3"
3020 RETURN
5000 REM LOAD SCREEN
5020 GO SUB VAL "3E3"
5030 LOAD N$SCREEN$
5040 PRINT ;: LET L=USR VAL "53881"
9000 REM QUIT PROGRAM
9010 PAUSE VAL "60": CLEAR 65535: NEW
9998 INK NOT PI: PAPER VAL "7": BORDER VAL "7": CLEAR VAL "27999": PRINT AT VAL "10",VAL "8";"STILL LOADING...": POKE VAL "23658",VAL "8": INK VAL "7": LOAD "CREATOR"CODE : INK NOT PI: PRINT ;: LET L=VAL "USR 51353"
9999 SAVE "CREATOR" LINE VAL "9998": SAVE "CREATOR"CODE VAL "51353",VAL "12647": RUN
REM ===== FILEKEEPER =====
0 REM THE FILE KEEPER Version 1.0 Program by Kristian Boisvert Copyright *1989 BYTE POWER
100 POKE 23296,22: POKE 23297,6: PRINT ;: LET l=USR 32639
1000 REM SAVE
1010 GO SUB 5000: IF a$="" THEN GO TO 1010
1015 LET a=PEEK 35535+256*PEEK 35536-51796
1016 PRINT AT 8,0;" SAVING ";A$;", LEN ";A
1020 SAVE a$CODE 51796,a
1030 GO TO 100
1500 REM LOAD
1510 GO SUB 5000
1520 LOAD a$CODE 39592,12204
1530 PRINT ;: LET l=USR 33726
2000 REM STOP
2010 STOP
2500 REM NEW
2510 PAUSE 120: CLEAR 65535: NEW
5000 REM GET NAME
5010 INPUT "ENTER FILENAME: "; LINE a$: IF LEN a$>10 THEN GO TO 5010
5020 RETURN
8000 REM LOAD
8010 INK 0: PAPER 7: BORDER 7: CLEAR 32599: PRINT AT 10,8;"STILL LOADING...": INK 7: LOAD "FILEKEEPER"CODE : INK 0: POKE 23296,22: POKE 23297,6: PRINT ;: LET l=USR 32600
9998 REM SAVE
9999 SAVE "FILEKEEPER" LINE 8000: SAVE "FILEKEEPER"CODE 32600,6992
REM ===== TRANSLATOR =====
1 REM THE TRANSLATOR Version 1.0 Written by Kristian Boisvert Copyright *1989 BYTE POWER
100 POKE 23296,5: POKE 23297,6: PRINT ;: LET l=USR 29400
1000 REM SAVE
1005 LET a=PEEK 32852+256*PEEK 32853: IF a>12204 THEN GO TO 1100
1010 GO SUB 5000: IF a$="" THEN GO TO 1010
1020 PRINT AT 10,0;" SAVING ";a$;",LEN ";a: SAVE a$CODE 35273,a
1030 PRINT ;: LET l=USR 29440
1100 PRINT AT 10,4;"SAVING IN 2 SECTIONS..."
1105 INPUT "ENTER FILENAME #1: "; LINE b$: IF B$="" THEN GO TO 1105
1106 INPUT "ENTER FILENAME #2: "; LINE a$: IF a$="" THEN GO TO 1106
1110 LET B=226*INT (a/452): LET A=A-B: PRINT AT 13,0;" SAVING ";B$;", LEN ";a: SAVE b$CODE 35273,A
1120 PRINT AT 15,0;" SAVING ";a$;", LEN ";b: SAVE a$CODE 35273+a,B
1130 GO TO 1030
1500 REM LOAD
1510 GO SUB 5000
1520 LOAD a$CODE 35272,28728
1530 PRINT ;: LET l=USR 30185
2000 REM STOP
2010 STOP
2500 REM NEW
2510 PAUSE 120: CLEAR 65535: NEW
5000 REM GET NAME
5010 INPUT "ENTER FILENAME: "; LINE a$: IF LEN a$>10 THEN GO TO 5010
5020 RETURN
8000 REM LOAD
8010 INK 0: PAPER 7: BORDER 7: CLEAR 29399: PRINT AT 10,8;"STILL LOADING...": INK 7: LOAD "TRANSLATOR"CODE : INK 0: RUN
9998 REM SAVE
9999 SAVE "TRANSLATOR" LINE 8000: SAVE "TRANSLATOR"CODE 29400,5872Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.







