Banner Designer is a large-format banner printing utility by Zebra Systems, Inc. (version 1.1, copyright 1985) that drives 80-column dot-matrix printers to produce oversized text and graphic headers. The program loads a companion machine code block (“Bcode”) to address 45928 and calls into it at computed entry points — the DEF FN a() function calculates the machine code’s current execution address by reading the PROG system variable at addresses 23635–23636 and adding an offset of 5. Supported printers include Epson RX/FX, Gemini 10x/SG10, Memotech DMX80, Panasonic 1090, Seikosha GP250, and Prowriter 8510, with parallel interface options for AERCO, Tasman, and A&J adapters; each printer type configures a block of printer control bytes (POKEd into addresses 49019–49058) that govern bitmap output formatting. Cassette-based graphic “icons” (256 bytes each) can be loaded by name as start and end decorations for the banner, with ON ERR handling providing a retry loop on tape read failure.
Program Analysis
Program Structure
The program is organized into clearly delineated functional sections, navigated by a central menu loop:
- Initialization (lines 1–17): REM block containing embedded machine code data, DEF FN definition, border/paper setup, CLEAR, and loading of the “Bcode” machine code block.
- Title screen (lines 20–44): Splash display showing version, copyright, and publisher name.
- Main menu loop (lines 84–195): Polls INKEY$ and dispatches to five sub-functions.
- Banner text entry (lines 300–370): Loads “Bdesign” overlay, prompts for text and solid/outline mode.
- Banner printing (lines 400–480): Writes banner text into machine code workspace and calls ML routines.
- Graphic selection — start/end (lines 540–553, 640–653): Tape-loads 256-byte icon blocks with error recovery.
- Printer configuration (lines 2229–2740): Two-stage selection of printer model and parallel interface, with printer control block loading.
- Tape error handler (lines 5800–5830): ON ERR retry loop with a stored return address.
- Development utility (lines 9900–9999): Manual entry of printer control block data and SAVE routines — not normally reached during operation.
Machine Code Integration
The machine code module “Bcode” is loaded to address 45928 (decimal) and occupies 8000 bytes (extending to approximately 53928). Three named entry points are referenced by comment:
| Address | REM label | Purpose |
|---|---|---|
| 49000 | PRNTstrg | Print banner text string |
| 49003 | PRNTicon | Print a graphic icon |
| 49006 | (install printer interface) | Configure parallel interface hardware |
All machine code calls use RANDOMIZE USR rather than the more direct USR in an expression, discarding the return value cleanly. The printer control data block occupies addresses 49019–49058 (40 bytes in groups of 8), and additional POKEable parameters exist at 49009 (fill mode), 49010 (icon index), 49018 (interface type), 49021 (linefeed byte), 49571 (indent character), and 49583 (indent icon).
DEF FN Address Calculation
Line 2 defines DEF FN a()=PEEK 23635+256*PEEK 23636+5. Addresses 23635–23636 hold the PROG system variable, which points to the start of the BASIC program in RAM. Adding 5 steps past the two-byte line number, two-byte line length, and REM token at the start of line 1, landing inside the REM statement’s data — which contains the embedded machine code payload stored as BASIC token bytes. Each call to RANDOMIZE USR FN a() thus executes the code in that REM line after an appropriate POKE has configured the desired screen-display routine.
ON ERR Error Handling
The program uses ON ERR for two distinct purposes. During tape loading of icon files (lines 549, 649), ON ERR GO TO 5800 is set before the LOAD and cleared with ON ERR RESET afterward. The error handler at line 5800 displays a flashing “TAPE ERROR” message, then enters a tight PAUSE 4e4 / ON ERR GO TO 5822 loop (line 5822) to catch any further errors during the wait, before finally resetting the error trap and jumping to DerrRet — a variable holding the return destination (line 540 for start graphic, also used for end graphic despite the value not being updated to 640, which is a latent bug).
Printer Control Block Loading (Lines 2229–2239)
The subroutine at line 2230 reads a string variable (x$, set to e$, g$, or p$ depending on the selected printer) and writes its bytes into consecutive 8-byte blocks starting at address 49019. The encoding uses byte value 254 as an “advance to next block” sentinel and 255 as an end-of-data terminator. This allows variable-length printer command sequences to be packed into a fixed block structure in machine code memory.
Banner Text Transfer
Lines 442–452 manually copy the banner text string d$ character by character into machine code workspace at address 49121, using CODE d$(n) to extract each character’s code and POKE dest,n to write it. A 255 byte is appended as a string terminator before calling the PRNTstrg routine, mirroring a C-style null-terminated string in the ML layer.
Notable Techniques
- The
POKE 23658,8at line 315 sets the FLAGS2 system variable bit to suppress the lower screen, providing a cleaner INPUT prompt appearance; it is restored to 0 at line 343. - The
CLEAR 45928at line 10 both clears variables and sets RAMTOP, protecting the machine code area from BASIC’s variable heap. - The
PAUSE 4e4idiom (approximately 27 minutes) is used as an indefinite pause pending a keypress, a common technique when PAUSE 0 behavior differs across ROM versions. - Lines 210–252 define a “loading” animation routine that is branched to by label but never actually called from the menu dispatch — it appears to be vestigial code or a display sequence invoked by the machine code itself.
- The menu prompt at line 154 uses
INVERSE 1to highlight the instruction, a simple but effective UI touch. - Line 2349 checks
k<1 OR k>3after already executing GO SUBs for valid values, meaning invalid entries loop back correctly but the range check is slightly misaligned with the prompt text (“Select 1-5”), which lists more than three options sharing the same selection code of 1.
Bugs and Anomalies
- At line 649 (Select End Graphic),
LET DerrRet=540incorrectly sets the tape error return address to 540 (Select Start Graphic) instead of 640 (Select End Graphic). A tape error while loading an end graphic will thus restart the start graphic selection instead. - The printer menu at line 2340 prompts “Select (1-5)” but only handles values 1, 2, and 3; values 4 and 5 pass through all three IF tests and the range check (
k<1 OR k>3) catches them, looping back — so the menu text is misleading. - Variables
e$,g$, andp$(holding printer control block data for Epson, Seikosha, and Prowriter respectively) are referenced but never assigned within the visible BASIC listing, implying they are loaded from the “Bdesign” overlay tape file at line 300. - Line 474 is the target of
GO TO 474(line 470) but does not exist in the listing, which is a valid BASIC technique — execution falls through to the next available line (480), skipping the icon print call cleanly.
Content
Source Code
1 REM !VAL \ FREE !CODE \ RETURN ( RETURN ( THEN \'. THEN AND *U\>"PEEK #( IF RESTORE !LEN \N!@ RESTORE !VAL \ FREE NEW o>& THEN % THEN gSTR$ RESTORE !VAL \ FREE LLIST RETURN 8 RETURN "TAB \ LLIST RESTORE FREE = OR RETURN \a8p\aSTR$ X COPY OR \ao> THEN % THEN gSTR$ RESTORE !ATTR \ FREE LLIST RETURN (j CAT OR RESTORE FREE W!ATTR \ FREE RETURN z(u*TAB \r#s+ OR STR$ "TAB \ LLIST #STR$ OR RESTORE x RETURN !!CODE \ THEN F PI GO SUB B"TAB \*TAB \ LPRINT PI GO SUB B"TAB \ LLIST STR$ !CODE \ THEN F*TAB \(PI GO SUB BA\ePI GO SUB B\ RETURN #"TAB \ LLIST #>"PEEK >= DATA \:'! THEN ? THEN THEN - THEN ? THEN THEN ,T]!ATTR \ FREE RETURN ( FLASH OR RESTORE FREE VERIFY *TAB \r#s+"TAB \ LLIST #STR$ *TAB \ RETURN PI GO SUB B"TAB \ LLIST #>"PEEK >=\b LLIST #>"PEEK >=\bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2 DEF FN a()=PEEK 23635+256*PEEK 23636+5
10 BORDER 6: PAPER 6: INK 0: CLS : CLEAR 45928
12 LOAD "Bcode"CODE 45928,8000
16 POKE 23728,5: POKE 23729,1: POKE 23723,3
17 RANDOMIZE USR FN a()
20 REM "BANNER DESIGNER"
22 PRINT AT 8,11;"Version 1.1"
42 PRINT AT 19,7;"ZEBRA SYSTEMS, INC."
44 PRINT AT 18,7;"COPYRIGHT (C) 1985"
84 REM Main Menu
85 IF INKEY$>"" THEN GO TO 85
86 CLS : POKE 23728,2: POKE 23729,2: POKE 23723,3
87 RANDOMIZE USR FN a()
89 REM "BANNER DESIGNER"
120 PRINT AT 7,6;"1 - Select Start Graphic"
130 PRINT AT 9,6;"2 - Enter Banner Text"
138 PRINT AT 11,6;"3 - Select End Graphic"
140 PRINT AT 13,6;"4 - Print Banner"
152 PRINT AT 15,6;"5 - Select Printer"
154 PRINT AT 21,5; INVERSE 1;"< press #no to select >"
160 LET k$=INKEY$
170 IF k$="1" THEN GO TO 540
180 IF k$="2" THEN GO TO 300
182 IF k$="3" THEN GO TO 640
183 IF k$="4" THEN GO TO 400
185 IF k$="5" THEN GO TO 2300
195 GO TO 160
210 POKE 23728,11: POKE 23729,13: POKE 23723,2
220 RANDOMIZE USR FN a()
230 REM "LOADING"
240 PRINT AT 11,11; FLASH 1; OVER 1;" "
250 PRINT AT 12,11; FLASH 1; OVER 1;" "
252 OVER 0
300 LOAD "Bdesign"
310 IF INKEY$>"" THEN GO TO 310
312 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2
313 RANDOMIZE USR FN a()
314 REM "ENTER BANNER TEXT"
315 POKE 23658,8
330 INPUT "Banner Text? ";d$
340 INPUT "Characters Solid or Outline (S or O)? ";k$
342 IF k$<>"S" AND k$<>"s" AND k$<>"O" AND k$<>"o" THEN GO TO 340
343 POKE 23658,0
344 IF k$="S" OR k$="s" THEN LET Fmode=1
346 IF k$="O" OR k$="o" THEN LET Fmode=0
370 GO TO 85
400 REM Print Banner
410 IF INKEY$>"" THEN GO TO 410
420 CLS
422 POKE 23728,6: POKE 23729,10: POKE 23723,2
424 RANDOMIZE USR FN a()
425 REM "PRINT BANNER"
426 PRINT AT 11,3;"< Press ENTER to abort; >";AT 12,3;"< any other to proceed >"
427 PAUSE 4e4: IF INKEY$=CHR$ 13 THEN GO TO 85
428 CLS : PRINT AT 10,6; FLASH 1;" PRINTING BANNER "
430 IF icon1=12 THEN GO TO 434
431 POKE 49010,icon1
432 RANDOMIZE USR 49003: REM PRNTicon
434 IF d$="" THEN GO TO 470
440 POKE 49009,Fmode
442 LET dest=49121
444 FOR n=1 TO LEN d$
446 POKE dest,CODE d$(n)
448 LET dest=dest+1
450 NEXT n
452 POKE dest,255
454 RANDOMIZE USR 49000: REM PRNTstrg
470 IF icon2=12 THEN GO TO 474
471 POKE 49010,icon2
472 RANDOMIZE USR 49003: REM PRNTicon
480 GO TO 85
540 REM Select Start Graphic
541 IF INKEY$>"" THEN GO TO 541
542 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2
543 RANDOMIZE USR FN a()
544 REM "SELECT START GRAPHIC"
546 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85
547 IF k$="none" THEN LET icon1=12: GO TO 85
548 LET icon1=0: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape"
549 LET DerrRet=540: ON ERR GO TO 5800
550 LOAD k$+".G"CODE 45928,256
553 ON ERR RESET : GO TO 85
640 REM Select End Graphic
641 IF INKEY$>"" THEN GO TO 641
642 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2
643 RANDOMIZE USR FN a()
644 REM " SELECT END GRAPHIC"
646 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85
647 IF k$="none" THEN LET icon2=12: GO TO 85
648 LET icon2=1: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape"
649 LET DerrRet=540: ON ERR GO TO 5800
650 LOAD k$+".G"CODE 45928+256,256
653 ON ERR RESET : GO TO 85
2229 REM Load pcntrl Blocks
2230 LET a=0
2231 FOR m=49019 TO 49019+39 STEP 8
2232 LET daddr=m
2233 LET a=a+1: LET n=CODE x$(a): IF n=254 THEN GO TO 2236
2234 IF n=255 THEN RETURN
2235 POKE daddr,n: LET daddr=daddr+1: GO TO 2233
2236 NEXT m
2239 RETURN
2300 REM Printer Custom
2310 CLS
2320 PRINT ,,,,,," * 80 Column Printer *"
2322 PRINT " ---------------------"
2324 PRINT ,,
2326 PRINT " Epson RX/FX ......1"
2328 PRINT " Gemini 10x/SG10 ..1"
2330 PRINT " Memotech DMX80 ...1"
2332 PRINT " Panasonic 1090 ...1"
2333 PRINT " Spirit-80 ........1"
2334 PRINT " Legend 808 .......1"
2338 PRINT " Seikosha GP250 ...2"
2339 PRINT " Prowriter 8510 ...3"
2340 INPUT ,,,," Select (1-5) ";k
2341 PRINT AT 20,9; FLASH 1;" Please Wait "
2342 IF k=1 THEN GO SUB 2433
2347 IF k=2 THEN GO SUB 2600
2348 IF k=3 THEN GO SUB 2700
2349 IF k<1 OR k>3 THEN GO TO 2340
2350 CLS
2352 PRINT ,,,,,," * Parallel Interface *"
2354 PRINT " ----------------------"
2356 PRINT ,,
2358 PRINT " AERCO ..........1"
2359 PRINT " TASMAN-b .......2"
2360 PRINT " TASMAN-c .......3"
2361 PRINT " A&J ............4"
2362 INPUT ,,,," Select (1 or 4) ";k
2363 IF k<1 OR k>4 THEN GO TO 2362
2364 CLS : POKE 49018,k-1: RANDOMIZE USR 49006: REM install printer interface
2365 INPUT "Do you want LineFeed codes sent (Y or N)? ";k$
2366 IF k$<>"Y" AND k$<>"y" AND k$<>"N" AND k$<>"n" THEN GO TO 2365
2367 IF k$="N" OR k$="n" THEN POKE 49021,0
2368 IF k$="Y" OR k$="y" THEN POKE 49021,10
2369 GO TO 85
2433 REM Epson
2435 LET x$=e$
2437 GO SUB 2230: REM load block
2440 POKE 49571,10: REM set INDNTchr
2441 POKE 49583,2: REM set INDNTicn
2444 RETURN
2600 REM Seik250
2610 LET x$=g$
2620 GO SUB 2230: REM load block
2640 GO TO 2440
2700 REM Prowriter
2710 LET x$=p$
2720 GO SUB 2230: REM load block
2730 POKE 49571,20: REM set INDNTchr
2731 POKE 49583,14: REM set INDNTicn
2740 RETURN
5800 REM tape error
5815 PRINT AT 14,10; FLASH 1;" TAPE ERROR "
5820 PRINT AT 16,3;" press ENTER to try again"
5821 PAUSE 4e4
5822 ON ERR GO TO 5822
5830 ON ERR RESET : GO TO DerrRet
9900 REM ** input Pcntrl Blocks
9902 FOR n=1 TO 50
9910 INPUT x
9911 IF x=255 THEN GO TO 9930
9912 LET p$(n)=CHR$ x
9920 NEXT n
9930 FOR n=n TO 50: LET p$(n)=CHR$ 255: NEXT n
9999 SAVE "Bdesign" LINE 12: BEEP 1,40: SAVE "Bcode"CODE 45928,8000
1 REM !VAL \ FREE !CODE \ RETURN ( RETURN ( THEN \'. THEN AND *U\>"PEEK #( IF RESTORE !LEN \N!@ RESTORE !VAL \ FREE NEW o>& THEN % THEN gSTR$ RESTORE !VAL \ FREE LLIST RETURN 8 RETURN "TAB \ LLIST RESTORE FREE = OR RETURN \a8p\aSTR$ X COPY OR \ao> THEN % THEN gSTR$ RESTORE !ATTR \ FREE LLIST RETURN (j CAT OR RESTORE FREE W!ATTR \ FREE RETURN z(u*TAB \r#s+ OR STR$ "TAB \ LLIST #STR$ OR RESTORE x RETURN !!CODE \ THEN F PI GO SUB B"TAB \*TAB \ LPRINT PI GO SUB B"TAB \ LLIST STR$ !CODE \ THEN F*TAB \(PI GO SUB BA\ePI GO SUB B\ RETURN #"TAB \ LLIST #>"PEEK >= DATA \:'! THEN ? THEN THEN - THEN ? THEN THEN ,T]!ATTR \ FREE RETURN ( FLASH OR RESTORE FREE VERIFY *TAB \r#s+"TAB \ LLIST #STR$ *TAB \ RETURN PI GO SUB B"TAB \ LLIST #>"PEEK >=\b LLIST #>"PEEK >=\bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2 DEF FN a()=PEEK 23635+256*PEEK 23636+5
10 BORDER 6: PAPER 6: INK 0: CLS : CLEAR 45928
12 LOAD "Bcode"CODE 45928,8000
16 POKE 23728,5: POKE 23729,1: POKE 23723,3
17 RANDOMIZE USR FN a()
20 REM "BANNER DESIGNER"
22 PRINT AT 8,11;"Version 1.1"
42 PRINT AT 19,7;"ZEBRA SYSTEMS, INC."
44 PRINT AT 18,7;"COPYRIGHT (C) 1985"
84 REM Main Menu
85 IF INKEY$>"" THEN GO TO 85
86 CLS : POKE 23728,2: POKE 23729,2: POKE 23723,3
87 RANDOMIZE USR FN a()
89 REM "BANNER DESIGNER"
120 PRINT AT 7,6;"1 - Select Start Graphic"
130 PRINT AT 9,6;"2 - Enter Banner Text"
138 PRINT AT 11,6;"3 - Select End Graphic"
140 PRINT AT 13,6;"4 - Print Banner"
152 PRINT AT 15,6;"5 - Select Printer"
154 PRINT AT 21,5; INVERSE 1;"< press #no to select >"
160 LET k$=INKEY$
170 IF k$="1" THEN GO TO 540
180 IF k$="2" THEN GO TO 300
182 IF k$="3" THEN GO TO 640
183 IF k$="4" THEN GO TO 400
185 IF k$="5" THEN GO TO 2300
195 GO TO 160
210 POKE 23728,11: POKE 23729,13: POKE 23723,2
220 RANDOMIZE USR FN a()
230 REM "LOADING"
240 PRINT AT 11,11; FLASH 1; OVER 1;" "
250 PRINT AT 12,11; FLASH 1; OVER 1;" "
252 OVER 0
300 LOAD "Bdesign"
310 IF INKEY$>"" THEN GO TO 310
312 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2
313 RANDOMIZE USR FN a()
314 REM "ENTER BANNER TEXT"
315 POKE 23658,8
330 INPUT "Banner Text? ";d$
340 INPUT "Characters Solid or Outline (S or O)? ";k$
342 IF k$<>"S" AND k$<>"s" AND k$<>"O" AND k$<>"o" THEN GO TO 340
343 POKE 23658,0
344 IF k$="S" OR k$="s" THEN LET Fmode=1
346 IF k$="O" OR k$="o" THEN LET Fmode=0
370 GO TO 85
400 REM Print Banner
410 IF INKEY$>"" THEN GO TO 410
420 CLS
422 POKE 23728,6: POKE 23729,10: POKE 23723,2
424 RANDOMIZE USR FN a()
425 REM "PRINT BANNER"
426 PRINT AT 11,3;"< Press ENTER to abort; >";AT 12,3;"< any other to proceed >"
427 PAUSE 4e4: IF INKEY$=CHR$ 13 THEN GO TO 85
428 CLS : PRINT AT 10,6; FLASH 1;" PRINTING BANNER "
430 IF icon1=12 THEN GO TO 434
431 POKE 49010,icon1
432 RANDOMIZE USR 49003: REM PRNTicon
434 IF d$="" THEN GO TO 470
440 POKE 49009,Fmode
442 LET dest=49121
444 FOR n=1 TO LEN d$
446 POKE dest,CODE d$(n)
448 LET dest=dest+1
450 NEXT n
452 POKE dest,255
454 RANDOMIZE USR 49000: REM PRNTstrg
470 IF icon2=12 THEN GO TO 474
471 POKE 49010,icon2
472 RANDOMIZE USR 49003: REM PRNTicon
480 GO TO 85
540 REM Select Start Graphic
541 IF INKEY$>"" THEN GO TO 541
542 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2
543 RANDOMIZE USR FN a()
544 REM "SELECT START GRAPHIC"
546 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85
547 IF k$="none" THEN LET icon1=12: GO TO 85
548 LET icon1=0: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape"
549 LET DerrRet=540: ON ERR GO TO 5800
550 LOAD k$+".G"CODE 45928,256
553 ON ERR RESET : GO TO 85
640 REM Select End Graphic
641 IF INKEY$>"" THEN GO TO 641
642 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2
643 RANDOMIZE USR FN a()
644 REM " SELECT END GRAPHIC"
646 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85
647 IF k$="none" THEN LET icon2=12: GO TO 85
648 LET icon2=1: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape"
649 LET DerrRet=540: ON ERR GO TO 5800
650 LOAD k$+".G"CODE 45928+256,256
653 ON ERR RESET : GO TO 85
2229 REM Load pcntrl Blocks
2230 LET a=0
2231 FOR m=49019 TO 49019+39 STEP 8
2232 LET daddr=m
2233 LET a=a+1: LET n=CODE x$(a): IF n=254 THEN GO TO 2236
2234 IF n=255 THEN RETURN
2235 POKE daddr,n: LET daddr=daddr+1: GO TO 2233
2236 NEXT m
2239 RETURN
2300 REM Printer Custom
2310 CLS
2320 PRINT ,,,,,," * 80 Column Printer *"
2322 PRINT " ---------------------"
2324 PRINT ,,
2326 PRINT " Epson RX/FX ......1"
2328 PRINT " Gemini 10x/SG10 ..1"
2330 PRINT " Memotech DMX80 ...1"
2332 PRINT " Panasonic 1090 ...1"
2333 PRINT " Spirit-80 ........1"
2334 PRINT " Legend 808 .......1"
2338 PRINT " Seikosha GP250 ...2"
2339 PRINT " Prowriter 8510 ...3"
2340 INPUT ,,,," Select (1-5) ";k
2341 PRINT AT 20,9; FLASH 1;" Please Wait "
2342 IF k=1 THEN GO SUB 2433
2347 IF k=2 THEN GO SUB 2600
2348 IF k=3 THEN GO SUB 2700
2349 IF k<1 OR k>3 THEN GO TO 2340
2350 CLS
2352 PRINT ,,,,,," * Parallel Interface *"
2354 PRINT " ----------------------"
2356 PRINT ,,
2358 PRINT " AERCO ..........1"
2359 PRINT " TASMAN-b .......2"
2360 PRINT " TASMAN-c .......3"
2361 PRINT " A&J ............4"
2362 INPUT ,,,," Select (1 or 4) ";k
2363 IF k<1 OR k>4 THEN GO TO 2362
2364 CLS : POKE 49018,k-1: RANDOMIZE USR 49006: REM install printer interface
2365 INPUT "Do you want LineFeed codes sent (Y or N)? ";k$
2366 IF k$<>"Y" AND k$<>"y" AND k$<>"N" AND k$<>"n" THEN GO TO 2365
2367 IF k$="N" OR k$="n" THEN POKE 49021,0
2368 IF k$="Y" OR k$="y" THEN POKE 49021,10
2369 GO TO 85
2433 REM Epson
2435 LET x$=e$
2437 GO SUB 2230: REM load block
2440 POKE 49571,10: REM set INDNTchr
2441 POKE 49583,2: REM set INDNTicn
2444 RETURN
2600 REM Seik250
2610 LET x$=g$
2620 GO SUB 2230: REM load block
2640 GO TO 2440
2700 REM Prowriter
2710 LET x$=p$
2720 GO SUB 2230: REM load block
2730 POKE 49571,20: REM set INDNTchr
2731 POKE 49583,14: REM set INDNTicn
2740 RETURN
5800 REM tape error
5815 PRINT AT 14,10; FLASH 1;" TAPE ERROR "
5820 PRINT AT 16,3;" press ENTER to try again"
5821 PAUSE 4e4
5822 ON ERR GO TO 5822
5830 ON ERR RESET : GO TO DerrRet
9900 REM ** input Pcntrl Blocks
9902 FOR n=1 TO 50
9910 INPUT x
9911 IF x=255 THEN GO TO 9930
9912 LET p$(n)=CHR$ x
9920 NEXT n
9930 FOR n=n TO 50: LET p$(n)=CHR$ 255: NEXT n
9999 SAVE "Bdesign" LINE 12: BEEP 1,40: SAVE "Bcode"CODE 45928,8000
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.


