10 REM EPSON MX-80 PRINTER CONFIG. PROGRAM
20 REM
30 REM THIS PROG. IS NOT TO BE USED IN A COMMERCIAL ENVIRONMENT
40 REM WITHOUT PROPER AUTHORIZATION.
50 REM
60 REM COPYRIGHT (c) RODERICK WAYNE HART WA3MEZ
70 REM JUNE 21, 1981
80 REM
90 REM system equates
100 CLR = 11		'clear screen command
110 BEL = 7		'bell command
120 ESC = 27		'escape command
130 D = 500		'delay constant
140 DPORT = 33		'console data port
150 REM
160 REM print sign-on message
170 GOSUB 2600
180 GOSUB 2710
190 GOSUB 2610
200 PRINT TAB(5);
210 PRINT "be sure to turn off the printer and turn it back on to"
220 PRINT TAB(5);
230 PRINT "initialize the printer memory before executing this prog-"
240 PRINT TAB(5);
250 PRINT "ram. type RETURN when you are ready."
260 PRINT:PRINT
270 PRINT TAB(4);
280 INPUT " ";S
290 REM
300 REM print menu
310 GOSUB 2600
320 GOSUB 2710
330 GOSUB 2610
340 PRINT TAB(5);"1. select character print mode"
350 PRINT TAB(5);"2. set line spacing"
360 PRINT TAB(5);"3. set vertical tabs"
370 PRINT TAB(5);"4. set horizontal tabs"
380 PRINT TAB(5);"5. set page length"
390 PRINT TAB(5);"6. set characters per line"
400 PRINT TAB(5);"7. execute printer test"
410 PRINT TAB(5);"8. return to CP/M"
420 GOSUB 2610
430 PRINT TAB(4);
440 INPUT " ";S
450 IF S = 1 THEN 560
460 IF S = 2 THEN 830
470 IF S = 3 THEN 1160
480 IF S = 4 THEN 1460
490 IF S = 5 THEN 1760
500 IF S = 6 THEN 1910
510 IF S = 7 THEN 2230
520 IF S = 8 THEN SYSTEM
530 GOSUB 2450
540 GOTO 310
550 REM
560 GOSUB 2600
570 PRINT TAB(22);"character print mode"
580 PRINT TAB(22);"--------------------"
590 GOSUB 2610
600 PRINT TAB(5);"1. double strike"
610 PRINT TAB(5);"2. emphasized"
620 PRINT TAB(5);"3. compressed"
630 PRINT TAB(5);"4. return to main menu"
640 GOSUB 2610
650 PRINT TAB(4);
660 INPUT " ";S
670 IF S = 1 THEN 740
680 IF S = 2 THEN 770
690 IF S = 3 THEN 800
700 IF S = 4 THEN 300
710 GOSUB 2450
720 GOTO 560
730 REM double strike
740 LPRINT CHR$(ESC)+"G";
750 GOTO 560
760 REM emphasize
770 LPRINT CHR$(ESC)+"E";
780 GOTO 560
790 REM compress
800 LPRINT CHR$(15);
810 GOTO 560
820 REM
830 GOSUB 2600
840 PRINT TAB(26);"line spacing"
850 PRINT TAB(26);"------------"
860 GOSUB 2610
870 PRINT TAB(5);"1. 1/6 inch"
880 PRINT TAB(5);"2. 1/8 inch"
890 PRINT TAB(5);"3. 7/72 inch"
900 PRINT TAB(5);"4. return to main menu"
910 GOSUB 2610
920 PRINT TAB(4);
930 INPUT " ";S
940 IF S = 1 THEN 1010
950 IF S = 2 THEN 1060
960 IF S = 3 THEN 1110
970 IF S = 4 THEN 310
980 GOSUB 2450
990 GOTO 830
1000 REM 1/6 inch line spacing
1010 LPRINT CHR$(ESC)+"A";CHR$(140);CHR$(ESC)+"2";
1020 PRINT TAB(5);
1030 PRINT "line spacing set to 1/6 inch"
1040 GOTO 2340
1050 REM 1/8 inch line spacing
1060 LPRINT CHR$(ESC)+"A";CHR$(137);CHR$(ESC)+"0";
1070 PRINT TAB(5);
1080 PRINT "line spacing set to 1/8 inch"
1090 GOTO 2340
1100 REM 7/72 inch line spacing
1110 LPRINT CHR$(ESC)+"A";CHR$(135);CHR$(ESC)+"1";
1120 PRINT TAB(5);
1130 PRINT "line spacing set to 7/72 inch"
1140 GOTO 2340
1150 REM
1160 GOSUB 2600
1170 PRINT TAB(26);"vertical tabs"
1180 PRINT TAB(26);"-------------"
1190 T=0:T1=0:VTAB=0
1200 GOSUB 2610
1210 PRINT TAB(5);
1220 INPUT "how many vertical tabs do you wish to set ";VTAB
1230 IF VTAB = 0 GOTO 310
1240 PRINT
1250 PRINT TAB(5);
1260 PRINT "input the desired tab locations after the prompt"
1270 REM began sequence
1280 LPRINT CHR$(ESC)+"B";
1290 FOR X = 1 TO VTAB
1300 GOSUB 2520
1310 IF T => 64 AND X < VTAB GOTO 2640
1320 IF T =< T1 GOTO 2390
1330 IF T => 64 GOTO 2390
1340 T1 = T
1350 REM send tab to printer
1360 LPRINT CHR$(T+128);
1370 NEXT X
1380 REM end sequence
1390 LPRINT CHR$(128);
1400 GOSUB 2610
1410 PRINT TAB(5);
1420 REM tell the human how many tabs we have processed
1430 PRINT VTAB;" vertical tabs set"
1440 GOTO 2340
1450 REM
1460 GOSUB 2600
1470 PRINT TAB(26);"horizontal tabs"
1480 PRINT TAB(26);"---------------"
1490 T=0:T1=0:HTAB=0
1500 GOSUB 2610
1510 PRINT TAB(5);
1520 INPUT "how many horizontal tabs do you wish to set ";HTAB
1530 IF HTAB = 0 GOTO 310
1540 PRINT
1550 PRINT TAB(5);
1560 PRINT "input the desired tab locations after the prompt"
1570 REM began sequence
1580 LPRINT CHR$(ESC)+"D";
1590 FOR X = 1 TO HTAB
1600 GOSUB 2560
1610 IF T => 112 AND X < HTAB GOTO 2640
1620 IF T =< T1 GOTO 2390
1630 IF T => 112 GOTO 2390
1640 T1 = T
1650 REM send tab to printer
1660 LPRINT CHR$(T+128);
1670 NEXT X
1680 REM end sequence
1690 LPRINT CHR$(128);
1700 GOSUB 2610
1710 PRINT TAB(5);
1720 REM tell the human how many tabs we have processed
1730 PRINT HTAB;" horizontal tabs set"
1740 GOTO 2340
1750 REM
1760 GOSUB 2600
1770 PRINT TAB(27);"page length"
1780 PRINT TAB(27);"-----------"
1790 GOSUB 2610
1800 PRINT TAB(5);
1810 INPUT "page length --> ";L
1820 IF L > 66 GOTO 2420
1830 GOSUB 2610
1840 PRINT TAB(5);
1850 REM tell the human what we have done
1860 PRINT "page length set at ";L;" lines"
1870 REM tell printer page length
1880 LPRINT CHR$(ESC)+"C";L;
1890 GOTO 2340
1900 REM
1910 GOSUB 2600
1920 PRINT TAB(23);"characters per line"
1930 PRINT TAB(23);"-------------------"
1940 GOSUB 2610
1950 PRINT TAB(5);"1. 132 characters per line"
1960 PRINT TAB(5);"2. 80 characters per line"
1970 PRINT TAB(5);"3. 40 characters per line"
1980 PRINT TAB(5);"4. return to main menu"
1990 PRINT TAB(4);
2000 INPUT " ";S
2010 IF S = 1 THEN 2070
2020 IF S = 2 THEN 2120
2030 IF S = 3 THEN 2170
2040 IF S = 4 THEN 310
2050 GOSUB 2450
2060 GOTO 1910
2070 PRINT TAB(5);
2080 PRINT "printer set for 132 characters per line"
2090 REM setup for 132 cpl
2100 LPRINT CHR$(29);
2110 GOTO 2340
2120 PRINT TAB(5);
2130 PRINT "printer set for 80 characters per line"
2140 REM setup 80 cpl
2150 LPRINT CHR$(30);
2160 GOTO 2340
2170 PRINT TAB(5);
2180 PRINT "printer set for 40 characters per line"
2190 REM setup 40 cpl
2200 LPRINT CHR$(31);
2210 GOTO 2340
2220 REM terminal test routine
2230 GOSUB 2600
2240 PRINT:PRINT TAB(10);
2250 PRINT "type any ascii character to stop test ";
2260 LPRINT CHR$(140);		'form feed
2270 FOR X = 32 TO 127
2280 A = INP(DPORT)		'check for abort
2290 IF A <> 13 THEN 310
2300 LPRINT CHR$(X);
2310 NEXT X
2320 GOTO 2270
2330 REM subroutine
2340 GOSUB 2610
2350 PRINT TAB(5);
2360 INPUT "type return to continue";S
2370 GOTO 300
2380 REM subroutine
2390 GOSUB 2450
2400 GOTO 1300
2410 REM subroutine
2420 GOSUB 2450
2430 GOTO 1760
2440 REM error subroutine
2450 PRINT CHR$(CLR)
2460 PRINT CHR$(BEL);CHR$(BEL)
2470 PRINT TAB(14);"invalid selection, please try again !"
2480 FOR S = 1 TO D		'set up delay
2490 NEXT S
2500 RETURN
2510 REM subroutine
2520 PRINT:PRINT TAB(10);
2530 INPUT "vertical tab --> ";T
2540 RETURN
2550 REM subroutine
2560 PRINT:PRINT TAB(10);
2570 INPUT "horizontal tab --> ";T
2580 RETURN
2590 REM clear screen subroutine
2600 PRINT CHR$(CLR)
2610 PRINT:PRINT
2620 RETURN
2630 REM fatal error subroutine
2640 GOSUB 2600
2650 PRINT TAB(5);"FATAL ERROR, TURN OFF PRINTER AND START OVER !"
2660 PRINT:PRINT
2670 FOR X = 1 TO D
2680 NEXT X
2690 GOTO 310
2700 REM program title print subroutine
2710 PRINT TAB(15);"EPSON MX-80 PRINTER CONFIG. PROGRAM"
2720 PRINT TAB(15);"-----------------------------------"
2730 RETURN
2740 END
AB(15);"EPSON MX-80 PRINTER CONFIG. PROGRAM"
2720 PRINT TAB(15);"-----------------