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)