Listing of file='@TBLEDIT' on disk='vmedia/printer_driver_editor.wvd.zip'
# Sector 97, program filename = '@TBLEDIT', protected file
0010 REM ! @TBLEDIT 07/15/87 (c) Wang, Laboratories, Inc. 1986
0025 %! ******* COMPANY CONFIDENTIAL *******
0030 % ---------------------------------------
0040 % Program Name = @TBLEDIT
0050 % Author = Steve McGarry
0060 % Date Written = 05 November 1985
0070 % Last Revised = 29 January 1987
0080 % ---------------------------------------
0090 %
0100 REM % VARIABLE DEFINITIONS
0110 COM D$3,F$8
: REM - DISK ADDRESS & NAME OF FILE BEING WORKED ON
0120 DIM V$8
: V$="02.00.02"
: REM - VERSION NUMBER
0130 DIM S0$(256)1,S0,S1
: REM - SECTOR WORK ARRAY, NUMBER OF SECTOR IN MEMORY & BYTE POSITION IN TH
E ARRAY
0140 DIM C,C1,C0$(258)3,C1$(258)28
: REM - CHARACTER TRANSLATE TABLE WORK VARIABLES, INDEX & STRINGS
0150 DIM E0,E1,E0$(45)3,E1$(49)28
: REM - ESCAPE CODE TRANSLATE TABLE WORK VARIABLES, INDEX & STRINGS
0155 DIM E2$3,E2,E2$(5)2
: REM - PRINTER INCREMENTS PER INCH & PITCH SUFFIXES
0160 DIM H$2,H1$14
: REM - HEX PACK/UNPACK WORK VARIABLES
0170 DIM K$1
: REM - KEYIN BYTE
0180 DIM B,E,U,S
: REM - FILE POINTERS; B=BEGINNING, E=END, U=USED, S=STATUS
0190 DIM W0$3,W1$3,W0
: REM - CONTROL WORD VALUE, WORK VARIABLE & NUMBER
0200 DIM M0$(10)78,M$40,M,M0,M1,M2
: REM - MENU ARRAY, MESSAGE & MENU WORK VARIABLES
0210 DIM I0$(1)80,I0$1,I1$80,I0,I1,I2,I3
: REM - VARIABLES FOR ACCEPTING A FIELD
0220 DIM K,J,I
: REM - FOR...NEXT LOOP COUNTERS
0230 DIM K0
: REM - FIELD BEING EDITED
0240 DIM H0$40
: REM - HEX FIELD VALIDATION WORK VARIABLE
0250 DIM I$80,F
: REM - MODIFICATION TEST VARIABLES
0260 DIM T$2,T0$3
: REM - TABLE ID BYTES (FIRST 2 BYTES OF FIRST SECTOR) & OUTPUT FORMAT FIEL
D
0270 REM .Printer table 1st sector bytes 1-2 describe version
: REM = 6911 @....V01 6A11 @....V02
: REM .hhhh = C0 Length of CTT
: REM .hhhh = E0 Length of ETT
0280 REM .CTT data for C0$(C9)3 eg. 00 FF 01 thru 00 02 BC
: REM .CTT data for C1$(C9)28 eg.
0300 REM % INITIALIZE EVERYTHING
0310 S0=-1
: REM - FORCE INITIAL LOAD OF SECTOR
0320 E2$="000"
: REM - DEFAULT PRINTER INCREMENTS PER INCH
0330 F=0
: REM - RESET "DATA MODIFIED" FLAG
0400 REM % MAIN MENU
0410 SELECT PRINT /005
: PRINT HEX(020D0C030F)
0420 PRINT HEX(0306);TAB(14);"GENERALIZED PRINTER DRIVER TRANSLATION TABLE EDI
TOR"
: PRINT TAB(20);"(c) Copr. Wang Laboratories, Inc. 1986"
: PRINT TAB(20);"Release ";V$;" - Company Confidential"
: REM - TITLE & VERSION NUMBER
0430 PRINT AT(4,0);HEX(0E);"Select an item and press RUN/EXEC:"
: REM - PROMPT
0440 GOSUB '201(M$)
: REM - DISPLAY MESSAGE
0450 PRINT AT(22,50);HEX(0E);"RUN/EXEC - Proceed";AT(23,50);"CANCEL/EDIT -
Previous Menu";HEX(01)
: REM - KEY DEFINITIONS
0460 RESTORE LINE460
: DATA 3,"Prefill Translation Tables","Edit Translation Tables","Write Tran
slation Tables to Disk"
: REM - MENU DATA (COUNT FOLLOWED BY STRINGS)
0470 GOSUB '200
: REM - PROCESS THE MENU DATA (RETURNS PICK # IN M2 - 0=CANCEL/EDIT)
0480 ON M2GOTO 510,1020,2010
: REM - BRANCH TO PREFILL, EDIT OR WRITE ROUTINES
0485 IF F=0THEN 490
: GOSUB '201("Changes were not saved, exit (Y/N)?")
: PRINT HEX(07)
: GOSUB '204
: GOSUB '201(" ")
: IF K$="N"THEN 420
: REM - CANCEL PRESSED; PROMPT USER IF TABLES CHANGED BUT NOT SAVED
0490 COM CLEAR
: GOSUB '201("(Returning to System Menu)")
: $PSTAT=" "
: LOAD DC T"@MENU"
: END
: REM - THAT'S ALL FOLKS!!!
0500 REM %^PREFILL SELECTED; LOAD ALL TABLES FROM A FILE
0510 IF F=0THEN 515
: GOSUB '201("Changes were not saved, prefill (Y/N)?")
: PRINT HEX(07)
: GOSUB '204
: GOSUB '201(" ")
: IF K$="N"THEN 420
: REM - PROMPT USER IF TABLES CHANGED BUT NOT SAVED
0515 PRINT HEX(020402040F);AT(16,0);"Enter drive: ";HEX(0E);STR(D$);HEX(0F
);AT(17,0);"Enter file name: ";HEX(0E);STR(F$);HEX(020402000F)
: REM - DISPLAY FIELDS
0520 PRINT AT(21,50);HEX(0E);"RETURN - Next Field";AT(23,50);"CANCEL/EDIT
- Cancel Prefill";HEX(01)
: REM - UPDATE KEY DEFINITIONS
0530 M$=" "
: GOSUB '202(16,17,D$,3,"H",HEX(F0))
: D$=I0$(1)
: IF K$=HEX(F0)THEN 420
: REM - ACCEPT DISK ADDRESS
0535 GOSUB '201(" ")
: IF VER(D$,"HHH")=3THEN 536
: GOSUB '201("Disk address must be 3 hex digits")
: PRINT HEX(07)
: GOTO 530
: REM - YELL AT HIM IF INVALID ADDRESS
0536 IF K$=HEX(82)THEN 550
: REM - RUN/EXEC PRESSED?
0540 GOSUB '202(17,17,F$,8,"X",HEX(F0))
: F$=I0$(1)
: ON POS(HEX(20F0)=K$)GOTO 530,420
: REM - ACCEPT FILE NAME
0550 GOSUB '201(" ")
: SELECT #1<D$>
: ERRORGOSUB '255
: GOTO 530
: REM /SELECT THE DISK
0560 LIMITS T#1,F$,B,E,U,S
: ERRORGOSUB '255
: GOTO 530
: REM / FIND THE FILE
0570 IF S=2THEN 580
: IF S=0THEN GOSUB '201("File not found")
: ELSE GOSUB '201("File is not an active data file")
: M$=" "
: PRINT HEX(07)
: GOTO 540
0580 DATA LOAD BA T#1,(B)S0$()
: T$=STR(S0$(),,2)
: IF T$=HEX(6911)OR T$=HEX(6A11)THEN 585
: GOSUB '201("File is not a printer table")
: M$=" "
: PRINT HEX(07)
: GOTO 540
: REM / Read 1st Sector & Yell if it isn't a printer driver table
0585 IF T$=HEX(6A11)THEN T=10
: ELSE T=0
: REM - SET RELEASE 3.0 OFFSET IF 3.0 TABLE
0588 IF T$=HEX(6A11)THEN C9=258
: ELSE C9=256
: REM /.Length of CTT table
0590 C0=VAL(STR(S0$(),3,2),2)
: E0=VAL(STR(S0$(),5,2),2)
: REM - GET LENGTH OF CTT & ETT
0600 C1$(),E1$(),E2$()=" "
: REM - INITIALIZE TABLES
0605 F=0
: REM - RESET "DATA MODIFIED" FLAG
0610 REM % LOAD THE CTT INDEX
0620 GOSUB '201("(Loading the Character Table)")
: FOR K=1TO C9
: GOSUB '100(K)
: C0$(K)=W0$
: NEXT K
: REM - KEEP THE USER HAPPY & LOAD THE CTT INDEX
0630 REM % LOAD THE CTT STRINGS
0640 FOR K=1TO C9
: REM - START LOOP
0650 IF STR(C0$(K),2,1)=HEX(FF)THEN HEXUNPACKSTR(C0$(K),3,1)TO C1$(K)
: REM - 1-BYTE REPLACEMENT
0660 IF STR(C0$(K),2,1)=HEX(0F)THEN C1$(K)=" "
: REM - NOT SUPPORTED
0670 IF STR(C0$(K),2,1)=HEX(FF)OR STR(C0$(K),2,1)=HEX(0F)THEN 710
: REM - JUMP IF STRING ALREADY DETERMINED
0680 W0=VAL(STR(C0$(K),2,2),2)+1
: GOSUB '100(W0)
: REM - LOAD FIRST WORD OF TRANSLATION STRING (FIRST BYTE IS STRING LENGTH)
0690 FOR J=1TO VAL(STR(W0$,,1))
: HEXUNPACKSTR(W0$,MOD(J-1,2)+2,1)TO STR(C1$(K),(J-1)*2+1,2)
: IF MOD(J,2)<>0THEN 700
: W0=W0+1
: GOSUB '100(W0)
: REM - LOAD THE TRANSLATION STRING
0700 NEXT J
: REM - LOOP THROUGH THE STRING
0710 NEXT K
: REM - LOOP THROUGH THE CTT INDEX
0720 REM % LOAD THE PRINTER INCREMENTS/INCH & THE PITCH TRANSLATION SUFFIXES
0730 GOSUB '100(C0+1)
: E2=VAL(STR(W0$,2,2),2)
: CONVERT E2TO E2$,(###)
: FOR K=1TO 5
: GOSUB '100(C0+K+1)
: IF STR(W0$,3,1)<>HEX(00)THEN HEXUNPACKSTR(W0$,3,1)TO E2$(K)
: NEXT K
: REM - LOAD THE INCREMENTS/INCH & THE PITCH TRANSLATION SUFFIXES
0740 REM % LOAD THE ETT INDEX
0750 GOSUB '201("(Loading the Escape Sequence Table)")
: FOR K=1TO 35+T
: GOSUB '100(C0+K+6)
: E0$(K)=W0$
: NEXT K
: REM - KEEP THE USER HAPPY & LOAD THE ETT INDEX
0760 REM % LOAD THE ETT STRINGS
0770 FOR K=1TO 35+T
: REM - START LOOP
0780 IF E0$(K)=HEX(000000)THEN 820
: REM - BRANCH IF NULL POINTER (NOT SUPPORTED)
0790 W0=VAL(STR(E0$(K),2,2),2)+C0+1
: GOSUB '100(W0)
: REM - LOAD FIRST WORD OF TRANSLATION STRING (FIRST BYTE IS STRING LENGTH)
0800 FOR J=1TO VAL(STR(W0$,,1))
: HEXUNPACKSTR(W0$,MOD(J-1,2)+2,1)TO STR(E1$(K),(J-1)*2+1,2)
: IF MOD(J,2)<>0THEN 810
: W0=W0+1
: GOSUB '100(W0)
: REM - LOAD THE TRANSLATION STRING
0810 NEXT J
: REM - LOOP THROUGH THE STRING
0820 NEXT K
: REM - LOOP THROUGH THE ETT INDEX
0900 REM % MAP THE CHARACTERS X'0E' & X'0F' TO ENABLE/DISABLE ENHANCED MODE
0910 E1$(46)=C1$(15)
: REM - X'0E'
0920 E1$(47)=C1$(16)
: REM - X'0F'
0930 REM % MAP THE CHARACTER X'7F' TO CLEAR BUFFER
0935 E1$(49)=C1$(128)
: REM - X'7F'
0950 M$="Tables loaded from "&F$&" on "&D$
: GOTO 420
: REM - SET MESSAGE & RE-DISPLAY THE MAIN MENU
1000 REM %^EDIT SELECTED; EDIT THE CHARACTER TABLE AND THE ESCAPE CODE TABLE
1010 REM % FLAG THE NON-MODIFIABLE FIELDS
1020 FOR K=1TO 7
: C1$(K)="(Reserved)"
: NEXT K
: REM - X'00' thru X'06'
1030 C1$(10),C1$(12),C1$(15),C1$(16),C1$(128)=C1$(1)
: REM - X'09', X'0B', X'0E', X'0F' and X'7F' (REVERSE LINEFEED CODE REMOVED
)
1040 FOR K=130TO 144
: C1$(K)=C1$(1)
: NEXT K
: REM - X'81' thru X'8F'
1045 REM % EDIT THE CHARACTER TRANSLATION TABLE
1050 PRINT HEX(0306);TAB(14);"GENERALIZED PRINTER DRIVER TRANSLATION TABLE EDI
TOR"
: PRINT TAB(26);"Character Translation Table"
: REM - CHARACTER SCREEN TITLE
1060 PRINT AT(4,0);HEX(0E);"Make modifications and press RUN/EXEC or CANCEL/ED
IT:"
: REM - PROMPT
1070 PRINT HEX(0E);AT(17,0);"NOTE: A blank field indicates that";AT(18,6);"cha
racter is not supported."
1080 PRINT AT(17,50);HEX(0E);"RETURN - Next Field";AT(18,50);"FN/TAB
- Previous Field";AT(19,50);"SF'5/NEXT - Next Screen";AT(20,50);"SF'6/
PREV - Previous Screen";
: REM - KEY DEFINITIONS
1090 PRINT AT(21,50);"SF'15/GOTO - Find Character";AT(22,50);"RUN/EXEC - E
scape Table";AT(23,50);"CANCEL/EDIT - End of Edit";HEX(01)
: REM - MORE KEY DEFINITIONS
1100 P=0
: REM - START AT THE BEGINNING UPON ENTRY
1110 K0=P
: REM - SET FIELD LOCATION
1120 PRINT HEX(06);HEX(020402040F);
: REM - SET ATTRIBUTES TO BRIGHT/UNDERSCORE
1130 FOR K=PTO P+7
: K$=BIN(K)
: PRINT AT(7+K-P,0);
: IF K>15THEN PRINT K$;
: ELSE PRINT " ";
: PRINT " ";HEXOF(K$);" - ";HEX(0E);
: PRINT STR(C1$(K+1));HEX(0F)
: NEXT K
: REM - DISPLAY FIRST HALF OF CURRENT PAGE
1140 FOR K=P+8TO P+15
: K$=BIN(K)
: PRINT AT(K-P-1,45);
: IF K>15THEN PRINT K$;
: ELSE PRINT " ";
: PRINT " ";HEXOF(K$);" - ";HEX(0E);STR(C1$(K+1));HEX(0F)
: NEXT K
: REM - DISPLAY SECOND HALF OF CURRENT PAGE
1150 PRINT HEX(020402000F)
: REM - SET ATTRIBUTES BACK TO BRIGHT
1160 K=K0
: REM - GET FIELD BEING EDITED
1170 PRINT AT(21,0,40)
: REM - ERASE SF'15 PROMPT
1180 I1=K-P-1
: IF K-P<8THEN I1=I1+8
: I0$="H"
: IF C1$(K+1)=C1$(1)THEN I0$=HEX(00)
: GOSUB '202(I1,INT((K-P)/8)*45+7,C1$(K+1),28,I0$,HEX(F0054306420F7E))
: GOSUB '205(C1$(K+1))
: C1$(K+1)=I0$(1)
: REM - GET FIELD (KEYS; CANCEL '5/NEXT '6/PREV '15 TAB)
1185 GOSUB '203(I0$(1))
: IF M$<>" "THEN 1180
: REM - VALIDATE FIELD & BRANCH IF ERROR MESSAGE WAS DISPLAYED
1190 ON POS(HEX(F0054306420F7E2082)=K$)GOTO 420,1200,1200,1210,1210,1215,1230,
1240,1250
: GOTO 1180
: REM - PROCESS CANCEL, '5, NEXT, '6, PREV, '15, FN/TAB, RETURN AND RUN/EXE
C
1200 P=MOD(P+16,256)
: IF P=0THEN 1300
: GOTO 1110
: REM - '5/NEXT PRESSED
1210 P=MOD(P-16,256)
: IF P=240THEN 1300
: GOTO 1110
: REM - '6/PREV PRESSED
1215 I0$(1)="00"
: REM - SF'15 PRESSED; SET DEFAULT FIELD VALUE
1220 PRINT AT(21,0);"Enter character code:"
: GOSUB '202(21,22,I0$(1),2,"H",HEX(F0))
: GOSUB '201(" ")
: IF K$=HEX(F0)THEN 1170
: IF VER(I0$(1),"HH")=2THEN 1225
: GOSUB '201("Field must contain 2 hex digits.")
: PRINT HEX(07)
: GOTO 1220
: REM - GET ENTRY & VALIDATE IT
1225 HEXPACKH$FROMI0$(1)
: K0=VAL(H$)
: P=K0-MOD(K0,16)
: GOTO 1120
: REM - MOVE TO THE ENTRY REQUESTED
1230 K=K-1
: IF K<PTHEN K=P+15
: GOTO 1180
: REM - FN/TAB PRESSED; DECREMENT FIELD POINTER
1240 K=K+1
: IF K>P+15THEN K=P
: GOTO 1180
: REM - RETURN PRESSED; INCREMENT FIELD POINTER
1250 GOTO 1500
: REM - RUN/EXEC PRESSED; BRANCH TO ESCAPE CODE TABLE EDITOR
1290 REM %.Edit CTT items 257 and 258
1300 PRINT AT(5,0,1080);HEX(020402040F);AT(7,12);"Select Underscore hex value
";HEX(0E);STR(C1$(257),,2);HEX(0F);AT(8,12);"Select Overstrike hex value
";HEX(0E);STR(C1$(258),,2);HEX(0F)
: REM - CTT items 257 and 258
1310 P=257
: I1=7
: GOTO 1330
1315 IF P=258THEN 1310
1320 P=258
: I1=8
1325 REM .Exits F0=Edit 05=Down 43=Down 06=Up 42=Up 7E=TAB
1330 GOSUB '202(I1,40,C1$(P),2,"H",HEX(F0054306427E))
: GOSUB '203(I0$(1))
: IF M$<>" "THEN 1330
: C1$(P)=I0$(1)
: ON POS(HEX(F00F7E2082)=K$)GOTO 420,1215,1315,1315,1250
1340 PRINT AT(7,0,8*80)
: ON POS(HEX(05430642)=K$)GOTO 1350,1350,1360,1360
1350 P=0
: GOTO 1110
1360 P=240
: GOTO 1110
1495 REM % EDIT THE ESCAPE SEQUENCE TRANSLATION TABLE
1500 PRINT HEX(0306);TAB(14);"GENERALIZED PRINTER DRIVER TRANSLATION TABLE EDI
TOR"
: PRINT TAB(23);"Escape Sequence Translation Table"
: REM - ESCAPE CODE SCREEN TITLE
1510 PRINT AT(4,0);HEX(0E);"Make modifications and press RUN/EXEC or CANCEL/ED
IT:"
: REM - PROMPT
1520 PRINT HEX(0E);AT(18,0);"NOTE: A blank field indicates that";AT(19,6);"esc
ape sequence is not supported."
1530 PRINT AT(18,50);HEX(0E);"RETURN - Next Field";AT(19,50);"FN/TAB
- Previous Field";AT(20,50);"SF'5/NEXT - Next Screen";AT(21,50);"SF'6/
PREV - Previous Screen";
: REM - KEY DEFINITIONS
1540 PRINT AT(22,50);"RUN/EXEC - Character Table";AT(23,50);"CANCEL/EDIT -
End of Edit";HEX(01)
: REM - MORE KEY DEFINITIONS
1549 REM %.ETT #1-1
1550 PRINT AT(5,0,1040);HEX(020402040F);AT(6,11);"Enable Superscript Mode . .
";HEX(0E);STR(E1$(13));HEX(0F);AT(7,11);"Disable Superscript Mode . . ";
HEX(0E);STR(E1$(14));HEX(0F)
: REM - ESCAPE TABLE SCREEN #1-1
1560 PRINT AT(9,11);"Enable Subscript Mode . . . ";HEX(0E);STR(E1$(15));HEX(0
F);AT(10,11);"Disable Subscript Mode . . . ";HEX(0E);STR(E1$(16));HEX(0F)
: REM - ESCAPE TABLE SCREEN #1-2
1570 PRINT AT(12,11);"Enable Enhanced Mode . . . ";HEX(0E);STR(E1$(46));HEX(
0F);AT(13,11);"Disable Enhanced Mode . . . ";HEX(0E);STR(E1$(47));HEX(0F
)
: REM - ESCAPE TABLE SCREEN #1-4
1580 PRINT AT(15,11);"Enable Proportional Spacing ";HEX(0E);STR(E1$(30));HEX(
0F);AT(16,11);"Disable Proportional Spacing ";HEX(0E);STR(E1$(31));HEX(0F
)
: REM - ESCAPE TABLE SCREEN #1-3
1583 K0=1
: REM - RESET FIELD COUNTER
1584 ON K0GOSUB 1590,1591,1592,1593,1594,1595,1596,1597
: REM - PROCESS THE CURRENT FIELD
1585 GOSUB '203(I0$(1))
: IF M$<>" "THEN 1584
: REM - VALIDATE FIELD & BRANCH IF ERROR MESSAGE WAS DISPLAYED
1586 ON POS(HEX(F005430642827E)=K$)GOTO 420,1600,1600,1750,1750,1020,1588
: REM - CANCEL, '5/NEXT, '6/PREV, RUN, TAB
1587 K0=K0+1
: IF K0>8THEN K0=1
: GOTO 1584
: REM - ADVANCE TO NEXT FIELD
1588 K0=K0-1
: IF K0<1THEN K0=8
: GOTO 1584
: REM - BACK UP TO PREVIOUS FIELD
1590 GOSUB '202(6,40,E1$(13),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(13))
: E1$(13)=I0$(1)
: RETURN
: REM - ACCEPT ENABLE SUPERSCRIPT MODE
1591 GOSUB '202(7,40,E1$(14),28,"H",I1$)
: GOSUB '205(E1$(14))
: E1$(14)=I0$(1)
: RETURN
: REM - ACCEPT DISABLE SUPERSCRIPT MODE
1592 GOSUB '202(9,40,E1$(15),28,"H",I1$)
: GOSUB '205(E1$(15))
: E1$(15)=I0$(1)
: RETURN
: REM - ACCEPT ENABLE SUBSCRIPT MODE
1593 GOSUB '202(10,40,E1$(16),28,"H",I1$)
: GOSUB '205(E1$(16))
: E1$(16)=I0$(1)
: RETURN
: REM - ACCEPT DISABLE SUBSCRIPT MODE
1594 GOSUB '202(12,40,E1$(46),28,"H",I1$)
: GOSUB '205(E1$(46))
: E1$(46)=I0$(1)
: RETURN
: REM - ACCEPT ENABLE ENHANCED MODE
1595 GOSUB '202(13,40,E1$(47),28,"H",I1$)
: GOSUB '205(E1$(47))
: E1$(47)=I0$(1)
: RETURN
: REM - ACCEPT DISABLE ENHANCED MODE
1596 GOSUB '202(15,40,E1$(30),28,"H",I1$)
: GOSUB '205(E1$(30))
: E1$(30)=I0$(1)
: RETURN
: REM - ACCEPT ENABLE PROPORTIONAL SPACING
1597 GOSUB '202(16,40,E1$(31),28,"H",I1$)
: GOSUB '205(E1$(31))
: E1$(31)=I0$(1)
: RETURN
: REM - ACCEPT ENABLE PROPORTIONAL SPACING
1599 REM %.ETT #2-1
1600 PRINT AT(5,0,1040);HEX(020402040F);AT(8,15);"Select Pitch String ";HEX(0E
);STR(E1$(21));HEX(0F)
: REM - ESCAPE TABLE SCREEN #2-1
1610 PRINT AT(10,15);"Pitch Selection Codes:";AT(10,45);" 5 Pitch ";HEX(0E);
STR(E2$(1));HEX(0F);AT(11,45);" 10 Pitch ";HEX(0E);STR(E2$(2));HEX(0F)
: REM - ESCAPE TABLE SCREEN #2-2
1620 PRINT AT(12,45);" 12 Pitch ";HEX(0E);STR(E2$(3));HEX(0F);AT(13,45);" 15
Pitch ";HEX(0E);STR(E2$(4));HEX(0F);AT(14,45);"16.5 Pitch ";HEX(0E);STR(
E2$(5));HEX(0F)
: REM - ESCAPE TABLE SCREEN #2-3
1623 K0=1
: REM - RESET FIELD COUNTER
1624 ON K0GOSUB 1630,1631,1632,1633,1634,1635
: REM - PROCESS THE CURRENT FIELD
1625 GOSUB '203(I0$(1))
: IF M$<>" "THEN 1624
: REM - VALIDATE FIELD & BRANCH IF ERROR MESSAGE WAS DISPLAYED
1626 ON POS(HEX(F005430642827E)=K$)GOTO 420,1650,1650,1550,1550,1020,1628
: REM - CANCEL, '5/NEXT, '6/PREV, RUN, TAB
1627 K0=K0+1
: IF K0>6THEN K0=1
: GOTO 1624
: REM - ADVANCE TO NEXT FIELD
1628 K0=K0-1
: IF K0<1THEN K0=6
: GOTO 1624
: REM - BACK UP TO PREVIOUS FIELD
1630 GOSUB '202(8,35,E1$(21),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(21))
: E1$(21)=I0$(1)
: RETURN
: REM - ACCEPT SELECT PITCH PREFIX STRING
1631 GOSUB '202(10,56,E2$(1),2,"H",HEX(F0054306427E))
: GOSUB '205(E2$(1))
: E2$(1)=I0$(1)
: RETURN
: REM - ACCEPT 5 PITCH SUFFIX BYTE
1632 GOSUB '202(11,56,E2$(2),2,"H",HEX(F0054306427E))
: GOSUB '205(E2$(2))
: E2$(2)=I0$(1)
: RETURN
: REM - ACCEPT 10 PITCH SUFFIX BYTE
1633 GOSUB '202(12,56,E2$(3),2,"H",HEX(F0054306427E))
: GOSUB '205(E2$(3))
: E2$(3)=I0$(1)
: RETURN
: REM - ACCEPT 12 PITCH SUFFIX BYTE
1634 GOSUB '202(13,56,E2$(4),2,"H",HEX(F0054306427E))
: GOSUB '205(E2$(4))
: E2$(4)=I0$(1)
: RETURN
: REM - ACCEPT 15 PITCH SUFFIX BYTE
1635 GOSUB '202(14,56,E2$(5),2,"H",HEX(F0054306427E))
: GOSUB '205(E2$(5))
: E2$(5)=I0$(1)
: RETURN
: REM - ACCEPT 16.5 PITCH SUFFIX BYTE
1649 REM %.ETT #3-1
1650 PRINT AT(5,0,1040);HEX(020402040F);AT(8,15);"Select Font #0 . . . ";HEX(0
E);STR(E1$(2));HEX(0F);AT(9,15);"Select Font #1 . . . ";HEX(0E);STR(E1$(3
));HEX(0F);AT(10,15);"Select Font #2 . . . ";HEX(0E);STR(E1$(4));HEX(0F);
AT(11,15);"Select Color . . . . ";HEX(0E);STR(E1$(39));HEX(0F)
: REM - ETT SCREEN #3-1
1660 PRINT AT(12,15);"Select Paper Tray #1 ";HEX(0E);STR(E1$(10));HEX(0F);AT(1
3,15);"Select Paper Tray #2 ";HEX(0E);STR(E1$(11));HEX(0F);AT(14,15);"Sel
ect Paper Tray #3 ";HEX(0E);STR(E1$(36));HEX(0F)
: REM - ESCAPE TABLE SCREEN #3-2
1663 K0=1
: REM - RESET FIELD COUNTER
1664 ON K0GOSUB 1670,1671,1672,1673,1674,1675,1676
: REM - PROCESS THE CURRENT FIELD
1665 GOSUB '203(I0$(1))
: IF M$<>" "THEN 1664
: REM - VALIDATE FIELD & BRANCH IF ERROR MESSAGE WAS DISPLAYED
1666 ON POS(HEX(F005430642827E)=K$)GOTO 420,1700,1700,1600,1600,1020,1668
: REM - CANCEL, '5/NEXT, '6/PREV, RUN, TAB
1667 K0=K0+1
: IF K0>7THEN K0=1
: GOTO 1664
: REM - ADVANCE TO NEXT FIELD
1668 K0=K0-1
: IF K0<1THEN K0=7
: GOTO 1664
: REM - BACK UP TO PREVIOUS FIELD
1670 GOSUB '202(8,36,E1$(2),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(2))
: E1$(2)=I0$(1)
: RETURN
: REM - ACCEPT SELECT FONT #0
1671 GOSUB '202(9,36,E1$(3),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(3))
: E1$(3)=I0$(1)
: RETURN
: REM - ACCEPT SELECT FONT #1
1672 GOSUB '202(10,36,E1$(4),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(4))
: E1$(4)=I0$(1)
: RETURN
: REM - ACCEPT SELECT FONT #2
1673 GOSUB '202(11,36,E1$(39),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(39))
: E1$(39)=I0$(1)
: RETURN
: REM - ACCEPT SELECT COLOR
1674 GOSUB '202(12,36,E1$(10),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(10))
: E1$(10)=I0$(1)
: RETURN
: REM - ACCEPT SELECT PAPER TRAY #1
1675 GOSUB '202(13,36,E1$(11),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(11))
: E1$(11)=I0$(1)
: RETURN
: REM - ACCEPT SELECT PAPER TRAY #2
1676 GOSUB '202(14,36,E1$(36),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(36))
: E1$(36)=I0$(1)
: RETURN
: REM - ACCEPT SELECT PAPER TRAY #3
1699 REM %.ETT #4-1
1700 PRINT AT(5,0,1040);HEX(020402040F);AT(7,12);"Number of Printer Increments
per Inch . . . . . . ";HEX(0E);STR(E2$);HEX(0F);AT(9,12);"Set Line Feed
Spacing . . ";HEX(0E);STR(E1$(22));HEX(0F);AT(11,12);"Set Form Length in
Lines ";HEX(0E);STR(E1$(32));HEX(0F)
: REM - ESCAPE TABLE SCREEN #4-1
1710 PRINT AT(13,12);"Set Left Margin . . . . . ";HEX(0E);STR(E1$(29));HEX(0F)
: REM - ESCAPE TABLE SCREEN #4-2
1712 K0=1
: REM - RESET FIELD COUNTER
1713 ON K0GOSUB 1720,1721,1722,1724
: REM - PROCESS THE CURRENT FIELD
1714 IF K0>1THEN 1715
: GOSUB '201(" ")
: IF E2$=" "THEN E2$="000"
: GOTO 1716
: REM - JUMP IF NOT FIRST FIELD; ERASE MSG, FILL-IN DEFAULT, JUMP PAST HEX
VALIDATION
1715 GOSUB '203(I0$(1))
: IF M$<>" "THEN 1713
: REM - VALIDATE FIELD & BRANCH IF ERROR MESSAGE WAS DISPLAYED
1716 ON POS(HEX(F005430642827E)=K$)GOTO 420,1750,1750,1650,1650,1020,1718
: REM - CANCEL, '5/NEXT, '6/PREV, RUN, TAB
1717 K0=K0+1
: IF K0>4THEN K0=1
: GOTO 1713
: REM - ADVANCE TO NEXT FIELD
1718 K0=K0-1
: IF K0<1THEN K0=4
: GOTO 1713
: REM - BACK UP TO PREVIOUS FIELD
1720 GOSUB '202(7,63,E2$,3,"#",HEX(F0054306427E))
: GOSUB '205(E2$)
: E2$=I0$(1)
: RETURN
: REM - ACCEPT NUMBER OF PRINTER INCREMENTS PER INCH
1721 GOSUB '202(9,38,E1$(22),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(22))
: E1$(22),E1$(23)=I0$(1)
: RETURN
: REM - ACCEPT SET LF SPACING (GOES INTO ENABLE & DISABLE AUTO LF...)
1722 GOSUB '202(11,38,E1$(32),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(32))
: E1$(32)=I0$(1)
: RETURN
: REM - ACCEPT SET FORM LENGTH IN LINES
1724 GOSUB '202(13,38,E1$(29),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(29))
: E1$(29)=I0$(1)
: RETURN
: REM - ACCEPT SET LEFT MARGIN
1749 REM %.ETT #5-1
1750 PRINT AT(5,0,1040);HEX(020402040F);AT(7,11);"Execute Built-in Diagnostics
";HEX(0E);STR(E1$(1));HEX(0F);AT(8,11);"Clear Platten . . . . . . . ";H
EX(0E);STR(E1$(5));HEX(0F)
: REM - ESCAPE TABLE SCREEN #5-1
1755 PRINT AT(9,11);"Clear Buffer . . . . . . . . ";HEX(0E);STR(E1$(49));HEX(0
F);AT(10,11);"Select Printer . . . . . . . ";HEX(0E);STR(E1$(38));HEX(0F)
;AT(11,11);"Deselect Printer . . . . . . ";HEX(0E);STR(E1$(12));HEX(0F)
: REM - ESCAPE TABLE SCREEN #5-2
1760 PRINT AT(12,11);"1/4 Line Feed . . . . . . . ";HEX(0E);STR(E1$(26));HEX(
0F);AT(13,11);"1/2 Line Feed . . . . . . . ";HEX(0E);STR(E1$(27));HEX(0F
);AT(14,11);"3/4 Line Feed . . . . . . . ";HEX(0E);STR(E1$(28));HEX(0F)
: REM - ESCAPE TABLE SCREEN #5-3
1770 PRINT AT(15,11);"Reverse Line Feed . . . . . ";HEX(0E);STR(E1$(38));HEX(
0F)
: REM - ESCAPE TABLE SCREEN #5-3
1773 K0=1
: REM - RESET FIELD COUNTER
1774 ON K0GOSUB 1780,1781,1782,1783,1784,1785,1786,1787,1788
: REM - PROCESS THE CURRENT FIELD
1775 GOSUB '203(I0$(1))
: IF M$<>" "THEN 1774
: REM - VALIDATE FIELD & BRANCH IF ERROR MESSAGE WAS DISPLAYED
1776 ON POS(HEX(F005430642827E)=K$)GOTO 420,1550,1550,1700,1700,1020,1778
: REM - CANCEL, '5/NEXT, '6/PREV, RUN, TAB
1777 K0=K0+1
: IF K0>9THEN K0=1
: GOTO 1774
: REM - ADVANCE TO NEXT FIELD
1778 K0=K0-1
: IF K0<1THEN K0=9
: GOTO 1774
: REM - BACK UP TO PREVIOUS FIELD
1780 GOSUB '202(7,40,E1$(1),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(1))
: E1$(1)=I0$(1)
: RETURN
: REM - ACCEPT EXECUTE BUILT-IN DIAGNOSTICS
1781 GOSUB '202(8,40,E1$(5),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(5))
: E1$(5)=I0$(1)
: RETURN
: REM - ACCEPT CLEAR PLATTEN
1782 GOSUB '202(9,40,E1$(49),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(49))
: E1$(49)=I0$(1)
: RETURN
: REM - ACCEPT CLEAR BUFFER
1783 GOSUB '202(10,40,E1$(38),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(38))
: E1$(38)=I0$(1)
: RETURN
: REM - ACCEPT SELECT PRINTER
1784 GOSUB '202(11,40,E1$(12),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(12))
: E1$(12)=I0$(1)
: RETURN
: REM - ACCEPT DESELECT PRINTER
1785 GOSUB '202(12,40,E1$(26),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(26))
: E1$(26)=I0$(1)
: RETURN
: REM - ACCEPT 1/4 LINE FEED
1786 GOSUB '202(13,40,E1$(27),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(27))
: E1$(27)=I0$(1)
: RETURN
: REM - ACCEPT 1/2 LINE FEED
1787 GOSUB '202(14,40,E1$(28),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(28))
: E1$(28)=I0$(1)
: RETURN
: REM - ACCEPT 3/4 LINE FEED
1788 GOSUB '202(15,40,E1$(37),28,"H",HEX(F0054306427E))
: GOSUB '205(E1$(37))
: E1$(37)=I0$(1)
: RETURN
: REM - ACCEPT REVERSE LINE FEED
2000 REM %^WRITE SELECTED; WRITE ALL TABLES TO A FILE
2010 T0$="NEW"
: REM - DEFAULT FILE FORMAT
2015 PRINT HEX(020402040F);AT(16,0);"Enter drive: . . . . . . . . . ";HEX(0E)
;STR(D$);HEX(0F);AT(17,0);"Enter file name: . . . . . . . ";HEX(0E);STR(
F$);HEX(0F);AT(18,0);"Enter NEW if 3.0 or OLD if 2.7: ";HEX(0E);STR(T0$);
HEX(020402000F)
: REM - DISPLAY FIELDS
2020 PRINT AT(21,50);HEX(0E);"RETURN - Next Field";AT(23,50);"CANCEL/EDIT
- Cancel Write ";HEX(01)
: REM - UPDATE KEY DEFINITIONS
2030 M$=" "
: GOSUB '202(16,32,D$,3,"H",HEX(F0))
: D$=I0$(1)
: IF K$=HEX(F0)THEN 420
: REM - ACCEPT DISK ADDRESS
2035 GOSUB '201(" ")
: IF VER(D$,"HHH")=3THEN 2036
: GOSUB '201("Disk address must be 3 hex digits")
: PRINT HEX(07)
: GOTO 2030
2036 IF K$=HEX(82)THEN 2048
: REM - RUN/EXEC PRESSED?
2040 GOSUB '202(17,32,F$,8,"X",HEX(F0))
: F$=I0$(1)
: ON POS(HEX(82F0)=K$)GOTO 2048,420
: REM - ACCEPT FILE NAME
2045 GOSUB '202(18,32,T0$,3,"X",HEX(F0))
: T0$=I0$(1)
: $TRAN(T0$,"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz")R
: ON POS(HEX(20F0)=K$)GOTO 2030,420
: REM - ACCEPT TABLE FORMAT
2048 IF T0$="NEW"OR T0$="OLD"THEN 2049
: GOSUB '201("Please enter NEW or OLD.")
: PRINT HEX(07)
: GOTO 2045
: REM - VALIDATE TABLE FORMAT & YELL AT HIM IF INCORRECT ENTRY
2049 IF T0$="NEW"THEN T=10
: ELSE T=0
: REM - SET OFFSET VALUE BASED ON USER INPUT
2050 GOSUB '201(" ")
: SELECT #1<D$>
: ERRORGOSUB '255
: GOTO 2030
: REM - SELECT THE DISK
2060 LIMITS T#1,F$,B,E,U,S
: ERRORGOSUB '255
: GOTO 2030
: REM - FIND THE FILE
2070 IF S=2THEN 2085
: IF S=0THEN 2075
: GOSUB '201("File is not an active data file")
: PRINT HEX(07)
: GOTO 2040
: REM - YELL AT HIM IF IT ISN'T AN ACTIVE DATA FILE
2075 GOSUB '201("File does not exist, create it (Y/N)?")
: PRINT HEX(07)
: GOSUB '204
: GOSUB '201(" ")
: IF K$="N"THEN 2030
2080 GOSUB '201("(Creating file)")
: DATA SAVE DC OPEN T#1,(31)F$
: DATA SAVE DC CLOSE#1
: GOSUB '201(" ")
: LIMITS T#1,F$,B,E,U,S
: GOTO 2100
: REM - CREATE THE FILE (28 SECTORS NEEDED IF TABLES ARE FULL)
2085 GOSUB '201("File exists, overwrite it (Y/N)?")
: PRINT HEX(07)
: GOSUB '204
: GOSUB '201(" ")
: IF K$="N"THEN 2030
2090 REM % RESET THE NON-MODIFIABLE FIELDS
2100 FOR K=1TO 7
: C1$(K)=" "
: H$=BIN(K)
: HEXUNPACKSTR(H$,,1)TO C1$(K)
: NEXT K
2110 C1$(10)="09"
: C1$(12)="0B"
2120 FOR K=130TO 144
: C1$(K)=" "
: H$=BIN(K)
: HEXUNPACKSTR(H$,,1)TO C1$(K)
: NEXT K
2130 REM % MAP ENABLE/DISABLE ENHANCED MODE TO THE CHARACTERS X'0E' & X'0F'
2140 C1$(15)=E1$(46)
: REM - X'0E'
2150 C1$(16)=E1$(47)
: REM - X'0F'
2155 REM %MAP "Length in Inches" TO "Length in Lines"
2156 E1$(33)=E1$(32)
: REM - LENGTH IN LINES
2160 REM % MAP CLEAR BUFFER TO THE CHARACTER X'7F'
2165 C1$(128)=E1$(49)
: REM - X'7F'
2180 C0=C9
: FOR K=1TO C9
: IF LEN(C1$(K))>2THEN C0=C0+INT((LEN(C1$(K))+2)/4)
: NEXT K
: REM - CALCULATE LENGTH OF THE CTT
2190 E0=41+T
: FOR K=1TO 35+T
: IF E1$(K)<>" "THEN E0=E0+INT((LEN(E1$(K))+2)/4)
: NEXT K
: REM - CALCULATE LENGTH OF THE ETT
2200 S0$()=ALL(00)
: IF T=0THEN STR(S0$(),,2)=HEX(6911)
: ELSE STR(S0$(),,2)=HEX(6A11)
: STR(S0$(),3,2)=BIN(C0,2)
: STR(S0$(),5,2)=BIN(E0,2)
: DATA SAVE BA T$#1,(B)S0$()
: REM - CREATE & STORE THE HEADER RECORD
2210 REM % SAVE THE CTT INDEX
2220 GOSUB '201("(Writing the Character Table)")
: C1=C9
: W0=1
: FOR K=1TO C9
: REM - KEEP THE USER HAPPY, INITIALIZE STRING OFFSET & WORD ADDRESS AND ST
ART LOOP
2230 C=LEN(C1$(K))
: IF C>1THEN HEXPACKH1$FROMC1$(K)
: REM - GET LENGTH OF USER'S ENTRY & GENERATE HEX FROM THE ENTRY
2240 IF C=1THEN W0$=HEX(000F)&BIN(K-1)
: REM - NOT SUPPORTED IF BLANK
2250 IF C=2THEN W0$=HEX(00FF)&STR(H1$,,1)
: REM - 1-BYTE REPLACEMENT
2260 IF C<4THEN 2280
: REM - BRANCH IF NOT A STRING REPLACEMENT
2270 W0$=HEX(00)&BIN(C1,2)
: C1=C1+INT(((C/2)+1)/2)
: REM - STORE CURRENT OFFSET & ADVANCE IT
2280 GOSUB '101(W0$,W0)
: W0=W0+1
: NEXT K
: REM - STORE THIS WORD, POINT TO NEXT WORD & CONTINUE LOOP
2290 REM % SAVE THE CTT STRINGS
2300 FOR K=1TO C9
: REM - START LOOP
2310 C=LEN(C1$(K))
: IF C<4THEN 2350
: REM - GET LENGTH OF USER'S ENTRY & BRANCH IF IT'S NOT A STRING
2320 H1$=ALL(00)
: HEXPACKH1$FROMC1$(K)
: W0$=BIN(C/2)
: REM - GENERATE HEX FROM USER'S ENTRY & STORE LENGTH OF STRING
2330 FOR J=1TO C/2STEP 2
: STR(W0$,2,2)=STR(H1$,J,2)
: REM - START LOOP FOR STRING & STORE THE NEXT 2 BYTES
2340 GOSUB '101(W0$,W0)
: W0=W0+1
: W0$=ALL(00)
: NEXT J
: REM - WRITE WORD, INCREMENT WORD POINTER, RESET WORD STORAGE & CONTINUE S
TRING LOOP
2350 NEXT K
: REM - CONTINUE LOOP THROUGH TABLE
2360 REM % SAVE THE PRINTER INCREMENTS/INCH & THE PITCH TRANSLATION SUFFIXES
2370 CONVERT E2$TO E2
: W0$=HEX(00)&BIN(E2,2)
: GOSUB '101(W0$,W0)
: W0=W0+1
: REM - SAVE THE INCREMENTS/INCH
2380 FOR K=1TO 5
: W0$=ALL(00)
: IF E2$(K)<>" "THEN HEXPACKSTR(W0$,3,1)FROME2$(K)
: GOSUB '101(W0$,W0)
: W0=W0+1
: NEXT K
: REM - SAVE THE PITCH TRANSLATION SUFFIXES
2400 REM % SAVE THE ETT INDEX
2410 GOSUB '201("(Writing the Escape Sequence Table)")
: E1=41+T
: FOR K=1TO 35+T
: REM - KEEP THE USER HAPPY, INITIALIZE STRING OFFSET AND START LOOP
2420 C=LEN(E1$(K))
: IF C>1THEN HEXPACKH1$FROME1$(K)
: REM - GET LENGTH OF USER'S ENTRY & GENERATE HEX FROM THE ENTRY
2430 W0$=HEX(000000)
: IF C=1THEN 2450
: REM - NOT SUPPORTED IF BLANK
2440 W0$=HEX(00)&BIN(E1,2)
: E1=E1+INT(((C/2)+1)/2)
: REM - STORE CURRENT OFFSET & ADVANCE IT
2450 GOSUB '101(W0$,W0)
: W0=W0+1
: NEXT K
: REM - STORE THIS WORD, POINT TO NEXT WORD & CONTINUE LOOP
2500 REM % SAVE THE ETT STRINGS
2510 FOR K=1TO 35+T
: REM - START LOOP
2520 C=LEN(E1$(K))
: IF C<2THEN 2560
: REM - BRANCH IF NOT SUPPORTED (NO STRING)
2530 H1$=ALL(00)
: HEXPACKH1$FROME1$(K)
: W0$=BIN(C/2)
: REM - GENERATE HEX FROM USER'S ENTRY & STORE LENGTH OF STRING
2540 FOR J=1TO C/2STEP 2
: STR(W0$,2,2)=STR(H1$,J,2)
: REM - START LOOP FOR STRING & STORE THE NEXT 2 BYTES
2550 GOSUB '101(W0$,W0)
: W0=W0+1
: W0$=ALL(00)
: NEXT J
: REM - WRITE WORD, INCREMENT WORD POINTER, RESET WORD STORAGE & CONTINUE S
TRING LOOP
2560 NEXT K
: REM - CONTINUE LOOP THROUGH TABLE
2570 GOSUB '101(" ",0)
: REM - FLUSH SECTOR BUFFER
2575 DATA LOAD DC OPEN T#1,F$
: DSKIP #1,S0+1S
: DATA SAVE DC #1,END
: DATA SAVE DC CLOSE#1
: REM - UPDATE SECTORS USED COUNT
2580 F=0
: REM - RESET "DATA MODIFIED" FLAG
2590 M$="Tables written to "&F$&" on "&D$
: GOTO 420
: REM - SET MESSAGE & RE-DISPLAY THE MAIN MENU
2600 RETURN CLEAR ALL
: GOSUB '201("File full. Tables \CE\CF\D4 saved properly.")
: PRINT HEX(07)
: GOTO 2030
: REM - GIVE HIM THE BAD NEWS AND BRANCH TO THE DISK ADDRESS PROMPT
5000 DEFFN'100(W0)
: REM % READ CONTROL WORD W0 INTO W0$3
5010 IF S0=INT(W0/83)THEN 5030
: REM - BRANCH IF SECTOR IS ALREADY LOADED
5020 S0=INT(W0/83)
: DATA LOAD BA T#1,(B+S0)S0$()
: REM - SET SECTOR OFFSET & LOAD IT
5030 S1=(W0-INT(W0/83)*83+1)*3
: REM - GET THE BYTE POSITION WITHIN A "NORMAL" SECTOR
5040 IF W0<83THEN S1=S1+1
: REM - COMPENSATE FOR SECTOR # 1
5050 W0$=STR(S0$(),S1,3)
: REM - GET THE CONTROL WORD
5060 RETURN
5100 DEFFN'101(W0$,W0)
: REM % WRITE CONTROL WORD W0$ AT ADDRESS W0 (W0=0 FORCES FLUSH ONLY)
5110 IF S0>-1AND S0<>INT(W0/83)OR W0=0THEN DATA SAVE BA T$#1,(B+S0)S0$()
: REM - WRITE SECTOR IN MEMORY (IF ANY) IF NEW ONE WILL BE LOADED
5120 IF W0=0THEN 5170
: REM - EXIT IF FLUSH REQUESTED
5125 IF INT(W0/83)>E-B-1THEN 2600
: REM - BRANCH TO THE ERROR HANDLER IF ATTEMPT MADE TO WRITE PAST END-OF-FI
LE
5130 W1$=W0$
: REM - STORE W0$ (BECAUSE '100 WILL DESTROY IT)
5140 GOSUB '100(W0)
: REM - READ THE WORD CURRENTLY AT W0 (TO SET VARIABLES S0$(), S0 & S1)
5150 IF T=0THEN STR(S0$(),,2)=HEX(6911)
: ELSE STR(S0$(),,2)=HEX(6A11)
: REM - FLAG THE SECTOR AS THE RIGHT KIND OF PRINTER DRIVER TABLE
5160 STR(S0$(),S1,3)=W1$
: REM - STORE THE CONTROL WORD IN THE CURRENT SECTOR (S1 SET BY '100)
5170 RETURN
6000 DEFFN'200
: REM % PROCESS MENU AT CURRENT "DATA" POSITION. RETURN M2 (0=CANCEL/EDIT)
6010 READ M0
: M0$()=" "
: M1=0
: FOR K=1TO M0
: READ M0$(K)
: IF LEN(M0$(K))>M1THEN M1=LEN(M0$(K))
: NEXT K
: REM - READ THE MENU STRINGS INTO THE MENU ARRAY
6020 FOR K=1TO 10
: IF M0$(K)<>" "THEN PRINT AT(7+K,INT((78-M1)/2));HEX(8520);M0$(K)
: NEXT K
: REM - DISPLAY THE MENU
6030 M2=1
: REM - SET INITIAL POSITION
6040 PRINT AT(7+M2,INT((78-M1)/2));HEX(0E8B20);M0$(M2)
: REM - DISPLAY CURRENT POSITION AS BRIGHT
6050 KEYIN K$,,6120
: REM - GET A KEY (BRANCH IF SF KEY)
6060 GOSUB '201(" ")
: REM - ERASE MESSAGE
6070 PRINT AT(7+M2,INT((78-M1)/2));HEX(8520);M0$(M2)
: REM - DISPLAY CURRENT POSITION AS DIM
6080 ON POS(HEX(200882)=K$)GOTO 6090,6100,6110
: GOTO 6040
: REM - HANDLE SPACE, BACK SPACE AND RUN KEYS
6090 M2=M2+1
: IF M2>M0THEN M2=1
: GOTO 6040
: REM - SPACE BAR PRESSED
6100 M2=M2-1
: IF M2<1THEN M2=M0
: GOTO 6040
: REM - BACK SPACE PRESSED
6110 PRINT AT(7+M2,INT((78-M1)/2));HEX(8B)
: GOTO 6140
: REM - RUN/EXEC PRESSED
6120 GOSUB '201(" ")
: REM - ERASE MESSAGE
6125 PRINT AT(7+M2,INT((78-M1)/2));HEX(8520);M0$(M2)
: REM - DISPLAY CURRENT POSITION AS DIM
6130 IF K$<>HEX(F0)THEN 6040
: M2=0
: GOTO 6140
: REM - IF CANCEL, SET M2 TO 0 & RETURN
6140 RETURN
6200 DEFFN'201(M$)
: REM % DISPLAY M$ IN LOWER LEFT CORNER OF THE DISPLAY
6210 PRINT AT(23,0);HEX(0E);STR(M$);HEX(01)
: REM - DISPLAY MESSAGE
6220 RETURN
6300 DEFFN'202(I1,I2,I0$(1),I3,I0$,I1$)
: REM % ACCEPT FIELD (I1,I2=ROW,COL I0$(1)=DATA I3=LEN I0$=VER MASK I1$=EXI
T SFKEYS)
6310 MAT REDIM I0$(1)I3
: REM - CHANGE LENGTH OF FIELD TO LENGTH SPECIFIED
6320 PRINT HEX(020402040E)
: REM - SET ATTRIBUTES TO BRIGHT/UNDERSCORE
6330 I0=1
: REM - INITIALIZE CURSOR POSITION
6340 PRINT HEX(06);AT(I1,I2);STR(I0$(1))
: REM - DISPLAY THE FIELD
6350 PRINT AT(I1,I2+I0-1);HEX(02050F);
: REM - POSITION CURSOR
6360 KEYIN K$,,6470
: REM - WAIT FOR A KEY. BRANCH IF SF KEY PRESSED
6370 PRINT HEX(06);
: REM - "NORMAL" KEY PRESSED; SHUT OFF THE CURSOR
6380 ON POS(HEX(20080D82)=K$)GOTO 6400,6420,6450,6460
: REM - BRANCH IF SPACE, BACKSPACE, RETURN OR RUN/EXEC
6390 IF VER(K$,I0$)<>1THEN 6350
: REM - IF NOT A VALID KEY, WAIT FOR ANOTHER
6400 IF I0$=HEX(00)THEN 6350
: STR(I0$(1),I0,1)=K$
: PRINT K$;
: REM - IF ACCEPTING CHARACTERS, PUT THE CHARACTER INTO THE FIELD & PRINT I
T
6410 IF I0<I3THEN I0=I0+1
: GOTO 6350
: REM - INCREMENT CURSOR POSITION & UPDATE IT
6420 IF I0=1THEN 6350
: REM - BACKSPACE PRESSED; GET ANOTHER KEY IF AT LEFTMOST COLUMN
6430 IF I0<I3OR STR(I0$(1),I0,1)=" "THEN I0=I0-1
: REM - DON'T DECREMENT CURSOR POSITION IF AT RIGHTMOST POSITION & IT'S NON
-BLANK
6440 STR(I0$(1),I0,1)=" "
: GOTO 6340
: REM - REMOVE THE CHARACTER & UPDATE THE CRT
6450 K$=HEX(20)
: GOTO 6550
: REM - RETURN PRESSED; TRANSLATE IT TO HEX(20) & EXIT
6460 GOTO 6550
: REM - RUN/EXEC PRESSED; EXIT
6470 PRINT HEX(06);
: REM - SF KEY PRESSED; SHUT OFF THE CURSOR
6480 IF POS(I1$=K$)<>0THEN 6550
: REM - IF AN EXIT KEY, EXIT
6490 IF I0$<>HEX(00)THEN ON POS(HEX(48494A4C4D)=K$)GOTO 6500,6510,6520,6530,65
40
: GOTO 6350
: REM - IF MODIFIABLE, BRANCH TO ERASE, DELETE, INSERT, RIGHT OR LEFT
6500 STR(I0$(1),I0)=" "
: GOTO 6340
: REM - ERASE PRESSED; DO IT & UPDATE THE CRT
6510 IF I0<I3THEN STR(I0$(1),I0)=STR(I0$(1),I0+1)
: STR(I0$(1),I3,1)=" "
: GOTO 6340
: REM - DELETE PRESSED; DO IT & UPDATE THE CRT
6520 IF I0<I3THEN MAT COPY -STR(I0$(1),I0,I3-I0)TO -STR(I0$(1),I0+1)
: STR(I0$(1),I0,1)=" "
: GOTO 6340
: REM - INSERT PRESSED; DO IT & UPDATE THE CRT
6530 IF I0<I3THEN I0=I0+1
: GOTO 6340
: REM - RIGHT PRESSED; MOVE CURSOR & REPOSITION IT
6540 IF I0>1THEN I0=I0-1
: GOTO 6340
: REM - LEFT PRESSED; MOVE CURSOR & REPOSITION IT
6550 PRINT HEX(020402000F)
: REM - SET THE ATTRIBUTES TO BRIGHT (NORMAL)
6560 MAT REDIM I0$(1)80
: REM - RESET THE FIELD LENGTH TO ITS MAXIMUM
6570 RETURN
6600 DEFFN'203(H0$)
: REM % VALIDATE VALUE IN H0$ AS A HEXADECIMAL FIELD
6610 GOSUB '201(" ")
: IF H0$=" "THEN 6640
: REM - ERASE MESSAGE & EXIT IF FIELD IS BLANK
6620 IF POS(H0$=" ")>LEN(H0$)THEN 6630
: GOSUB '201("Field contains embedded spaces")
: PRINT HEX(07)
: GOTO 6640
: REM - YELL AT HIM & EXIT IF EMBEDDED SPACES EXIST
6630 IF LEN(H0$)/2=INT(LEN(H0$)/2)THEN 6640
: GOSUB '201("Field contains odd number of digits")
: PRINT HEX(07)
: REM - YELL AT HIM IF ODD NUMBER OF DIGITS
6640 RETURN
6700 DEFFN'204
: REM % RETURN K$ = "Y" or "N"
6710 KEYIN K$
6720 $TRAN(K$,"YyNn")R
: IF K$<>"Y"AND K$<>"N"THEN 6710
6730 RETURN
6800 DEFFN'205(I$)
: REM %COMPARE I$ TO I0$(1) & SET F=1 IF DIFFERENT
6810 IF I$<>I0$(1)THEN F=1
: RETURN
: REM - LIKE IT SAYS, COMPARE I$ TO I0$(1) & SET F=1 IF DIFFERENT
9000 DEFFN'255
: REM % ERROR HANDLER
9005 M=ERR
: REM - GET THE ERROR NUMBER
9010 M$=" "
: REM - INITIALIZE MESSAGE
9015 IF M<90THEN 9025
: RESTORE LINE9020,M-89
: READ M$
: REM - GET MESSAGE IF DISK ERROR
9020 DATA "Disk Hardware Error","Disk Drive Not Ready","Disk Drive Time-Out","
Disk Format Error","Disk Format Key Engaged","Disk Seek Error or Platter
Protected","Disk CRC Error","Disk LRC Error","Disk Platter Not Mounted","
Verify Error"
: REM - DISK ERRORS
9025 IF M=48THEN M$="Illegal Device Specification"
9030 IF M$<>" "THEN 9040
: M$="Unexpected Error ### Occurred"
: CONVERT MTO STR(M$,18,3),(###)
: REM - CATCH-ALL
9040 GOSUB '201(M$)
: PRINT HEX(07)
: RETURN
9998 DEFFN'30
: SELECT LIST 215(132)
: LIST "@TBLEDIT - GPD printer table editor"D
: LIST "Line number cross-reference"#
: LIST "Subroutine cross-reference"'
: LIST "Variable cross-reference"V
: SELECT LIST 005(80)
: STOP "- LISTINGS GENERATED"
9999 DEFFN'31"Z$=";HEX(22);"@TBLEDIT";HEX(22);":SCRATCHTZ$:SAVE<S>T$()Z$:Z$=";
HEX(22);"@tbledit";HEX(22);":SCRATCHTZ$:SAVE<SR>T$()Z$0,9998";HEX(0D)