File LEXCON.CB

Directory of image this file is from
This file as a plain text file

IDENTIFICATION DIVISION.
PROGRAM-ID. LEXCON.
AUTHOR. PETER MOLDAVE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. CONSOLE IS TTY.
	CHANNEL (1) IS HEAD-OF-FORMS.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
	SELECT OUT-FILE, ASSIGN TO LPT, RECORDING MODE IS ASCII.
	SELECT IN-FILE, ASSIGN TO DSK, RECORDING MODE IS ASCII.
	SELECT S-FILE, ASSIGN TO DSK, RECORDING MODE IS ASCII.
	SELECT D-FILE, ASSIGN TO DSK, FILE-LIMITS ARE 0 THRU 1000,
	ACCESS RANDOM, ACTUAL KEY IS BASE.
DATA DIVISION.
FILE SECTION.
FD	IN-FILE, LABEL RECORDS ARE STANDARD,
	VALUE OF ID IS IN-ID.
	01 I-BUF.
		02 I-CHAR, OCCURS 120 TIMES, PIC X.
FD	OUT-FILE, LABEL RECORDS ARE STANDARD,
	VALUE OF ID IS OUT-ID.
	01 O-LINE, PIC X(120).
FD	S-FILE, LABEL RECORDS ARE STANDARD, VALUE OF ID IS S-ID.
	01 S-BUF.
		02 S-CHAR, OCCURS 120 TIMES, PIC X.
FD	D-FILE, LABEL RECORDS ARE STANDARD,
		VALUE OF ID IS D-ID,
		BLOCK CONTAINS 1 RECORDS, DATA RECORDS ARE D-BUF, BUF-OVLY.
	01 D-BUF.
		02 D-CHAR, OCCURS 760 TIMES, PIC X.
	01 BUF-OVLY.
		02 BUF-OVR, PIC X(6).
		02 FILLER, PIC X(754).
WORKING-STORAGE SECTION.
	01 HEADING-LINE.
		02 FILLER, PIC X(70), VALUE "S.E.P. COMP REPORT ON GRAMMATICAL CONSTRUCTION".
	01 S-PNT, PIC 9(4), USAGE COMP.
	01 D-PNT, PIC 9(4), USAGE COMP.
	01 FREVAR.
		02 FREE-CHAR OCCURS 1000 TIMES, PIC X.
	01 FREE-CORE REDEFINES FREVAR, PIC X(120).
	01 LINE-CNT, PIC 9(5).
	01 T-LINE-CNT, PIC 9(5).
	01 R-TYPE-M, PIC X(100), VALUE "^ LINE RE-TYPED AS:".
	01 REPLY.
		02 REP-CHAR, OCCURS 120 TIMES, PIC X.
	01 REPLY-2 REDEFINES REPLY.
		02 REPL2, PIC X(6).
		02 FILLER, PIC X(114).
	01 IN-ID.
		02 IN-NME, PIC X(6), VALUE "ESSAY".
		02 IN-EXT, PIC X(3), VALUE "SA ".
	01 OUT-ID, PIC X(9), VALUE "REPORTSEP", USAGE DISPLAY-7.
	01 S-ID, PIC X(9), VALUE "SYNTAXSNX".
	01 D-ID.
		02 D-LTR, PIC X, VALUE "A".
		02 D-NME, PIC X(5).
		02 D-EXT, PIC X(3), VALUE "DIC".
	01 IDENTITY-BUF.
		02 ID-CHAR, OCCURS 120 TIMES, PIC X.
	01 LINE-SV.
		02 LINE-SV-CHR, OCCURS 120 TIMES, PIC X.
	01 SPEL-LINE.
		02 FILLER, PIC X(20), VALUE "SPELLING ERRORS".
		02 SPEL-ERR, PIC 9(4).
		02 FILLER, PIC X(20), VALUE "  PUNC-ERRORS".
		02 PUNC-ERR, PIC 9(4).
	01 CAPTL-1.
		02 FILLER, PIC X(10), VALUE "N(+PROP)#".
	01 CAPTL-2, REDEFINES CAPTL-1.
		02 CAPTL, OCCURS 10 TIMES, PIC X.
	01 S-T-CHAR, PIC X.
	01 LINE-TOTALS.
		02 FILLER, PIC X(20), VALUE "TOTAL LINES".
		02 LINE-NUMBER, PIC 9(5).
		02 FILLER, PIC X(20), VALUE " TOTAL STRINGS".
		02 STR-CNT, PIC 9(5).
	01 F-T-CHAR, PIC X.
	01 NUMB-DEF.
		02 FILLER, PIC X(14), VALUE "ADJ,DET(+NUM)#".
	01 NUM-DEF-2, REDEFINES NUMB-DEF.
		02 NUMB-VAL, OCCURS 14 TIMES, PIC X.
	01 LINE-STUFF.
		02 LINE-NUM, PIC 9(5).
		02 FILLER, PIC XX.
		02 LINE-STF, PIC X(120).
	01 LINE-STF-2, REDEFINES LINE-STUFF.
		02 LINE-TO-OUTPUT, PIC X(120).
		02 FILLER, PIC X(7).
	77 S-PNT-SV, PIC 9(5), USAGE COMP.
	77 S-INDX-SV, PIC 9(5), USAGE COMP.
	77 CAP-PT, PIC 9(5), USAGE COMP.
	77 SUBSCRPT, PIC 9(6), USAGE COMP.
	77 S-LFT-LEN, PIC 9(5), USAGE COMP.
	77 S-LEN, PIC 9(5), USAGE COMP.
	77 S-INDX, PIC 9(4), USAGE COMP.
	77 S-INDX2, PIC 9(4), USAGE COMP.
	77 DELTA, PIC 9(5), USAGE COMP.
	77 S-REP-LEN, PIC 9(4), USAGE COMP.
	77 SIZ-DEF, PIC 9(4), USAGE COMP.
	77 SIZ-D-BUF, PIC 9(4), USAGE COMP.
	77 B-SAVE, PIC 9(6), USAGE COMP.
	77 B2-SAVE, PIC 9(6), USAGE COMP.
	77 N-BSAV, PIC 9(5), USAGE COMP.
	77 N-DOTS, PIC 9(4), USAGE COMP.
	77 MID-PNT, PIC 9(6), USAGE COMP.
	77 FROM1, PIC 9(4), USAGE COMP.
	77 ID-PTR, PIC 9(6), USAGE COMP.
	77 ERR-PNT, PIC 9(6), USAGE COMP.
	77 ERR-PNT-2, PIC 9(6), USAGE COMP.
	77 FOUND, PIC 9, USAGE COMP.
	77 SIZDEF, PIC 9(4), USAGE COMP.
	77 ENTRING, PIC 9, USAGE COMP.
	77 BASE, PIC 9(6), USAGE COMP.
	77 SIZE-FILE, PIC 9(6), USAGE COMP.
	77 INCREM, USAGE COMP-1.
	77 SIGN, PIC S9, USAGE COMP.
	77 SAVSIGN, PIC S99, USAGE COMP.
	77 BASE2, PIC 9(6), USAGE COMP.
	77 ILOOP, PIC 9(4), USAGE COMP.
	77 FREPNT, PIC 9(4), USAGE COMP.
	77 IN-PT, PIC 9(4), USAGE COMP.
	77 OUT-PT, PIC 9(4), USAGE COMP.

PROCEDURE DIVISION.
INIT-PAR.
	DISPLAY "S.E.P. COMP. LEXICON.".
INIT-1.
	DISPLAY "DICTIONARY? ", WITH NO ADVANCING.
	ACCEPT D-NME.
INIT-2.
	DISPLAY "INPUT FILE NAME? ", WITH NO ADVANCING.
	ACCEPT REPLY.
	IF REPLY EQUALS SPACES, GO TO OPEN-PAR;
		ELSE, MOVE REPL2 TO IN-NME.
OPEN-PAR.
	OPEN INPUT IN-FILE, I-O D-FILE, OUTPUT
		OUT-FILE.
	MOVE 0 TO BASE, READ D-FILE; INVALID KEY GO TO
		INV-KEY.
	 MOVE BUF-OVR TO SIZE-FILE.
WRITE-HEAD.
	WRITE O-LINE FROM HEADING-LINE, AFTER HEAD-OF-FORMS.
	MOVE ZERO TO SPEL-ERR, PUNC-ERR.
	MOVE 1 TO LINE-NUM.
READ-LINE.
	READ IN-FILE; AT END, GO TO WRAP-UP.
	MOVE 1 TO ERR-PNT.
	IF I-CHAR (1) = "$", PERFORM WRITE-HEAD, MOVE 1 TO LINE-NUMBER, GO TO CHK-ERR.
	MOVE I-BUF TO LINE-STF.
	MOVE LINE-NUMBER TO LINE-NUM.
	WRITE O-LINE FROM LINE-TO-OUTPUT, AFTER ADVANCING 1 LINES.
	MOVE SPACES TO LINE-NUM.
	ADD 1 TO LINE-NUMBER.
CHK-ERR.
	IF I-CHAR (ERR-PNT) = ".", GO TO READ-LINE-2;
		ELSE IF I-CHAR (ERR-PNT) = "*",
			MOVE SPACE TO I-CHAR (ERR-PNT);
			IF I-CHAR (ERR-PNT + 1) IS ALPHABETIC,
				ADD 1 TO SPEL-ERR;
				ELSE ADD 1 TO PUNC-ERR;
		ELSE IF I-CHAR (ERR-PNT) = "$", GO TO READ-ID;
		ELSE IF ERR-PNT = 120, GO TO LINE-TOO-LONG.
		ADD 1 TO ERR-PNT, GO TO CHK-ERR.
READ-LINE-2.
	MOVE SPACES TO FREVAR.
	MOVE 1 TO S-PNT, FREPNT, D-PNT.
LOOKUP-SYMBOL.
	MOVE S-PNT TO ILOOP.
	IF I-CHAR (ILOOP) = SPACE, ADD 1 TO S-PNT, GO TO LOOKUP-SYMBOL.
	IF I-CHAR (ILOOP) IS NOT ALPHABETIC, GO TO NOT-ALPH.
	IF I-CHAR (ILOOP) IS NOT = D-LTR, CLOSE D-FILE,
	MOVE I-CHAR (ILOOP) TO D-LTR, OPEN INPUT D-FILE.
	DIVIDE SIZE-FILE BY 2 GIVING BASE, MOVE BASE TO INCREM.
	ADD 1 TO BASE.
	READ D-FILE; INVALID KEY DISPLAY "DIC-2 ", GO TO INV-KEY.
	MOVE 380 TO BASE2, MOVE 0 TO SAVSIGN, MOVE -1 TO SIGN.
GETSYMBOL.
********ROUTINE TO LOOK-UP A SYMBOL.
	IF INCREM EQUALS 0, IF SIGN EQUALS -1 AND EQUALS
	SAVSIGN, MOVE 0 TO FOUND, GO TO GETSYM9;
		ELSE, COMPUTE SAVSIGN EQUALS -1 * SIGN, GO TO GETSYM3.
GETSYM2.
	READ D-FILE; INVALID KEY, DISPLAY "DICTIONARY ",BASE, GO TO INV-KEY.
GETSYM3.
********LOOP UNTIL WE GET A SYMBOL ("[").
	ADD SIGN TO BASE2.
	IF BASE2 < 1, SUBTRACT 1 FROM BASE, MOVE 761 TO BASE2, GO TO GETSYM2.
	IF BASE2 > 760 AND SIGN = 1,
	 ADD 1 TO BASE, MOVE 0 TO BASE2, GO TO GETSYM2.
	IF D-CHAR (BASE2) NOT = "[", GO TO GETSYM3.
GETSYM4.
********GOT ONE - DOES IT FIT
	MOVE S-PNT TO ILOOP.
	SUBTRACT 1 FROM ILOOP.
GETSYM5.
	ADD 1 TO BASE2, ILOOP.
	IF BASE2 > 760 ADD 1 TO BASE, MOVE 1 TO BASE2, READ D-FILE; INVALID KEY GO TO INV-KEY.
	IF D-CHAR (BASE2) EQUALS ":", IF I-CHAR  (ILOOP)
		IS NOT ALPHABETIC, IF ENTRING IS NOT = 1, GO TO GETSYM7;
		ELSE IF ILOOP = SIZDEF, MOVE 1 TO FOUND, GO TO GETSYM9;
		ELSE MOVE 1 TO SIGN, GO TO GETSYM6;
		ELSE MOVE 1 TO SIGN, GO TO GETSYM6.
	IF I-CHAR (ILOOP) IS NOT ALPHABETIC, MOVE -1 TO SIGN,
		PERFORM CHK-FOR-CHAR UNTIL D-CHAR (BASE2) = "[",
		GO TO GETSYM6.
	IF I-CHAR (ILOOP) EQUALS D-CHAR (BASE2), GO TO GETSYM5;
		ELSE IF I-CHAR (ILOOP)  > D-CHAR (BASE2) MOVE 1 TO SIGN;
		ELSE MOVE -1 TO SIGN, PERFORM CHK-FOR-CHAR UNTIL D-CHAR (BASE2) = "[".
GETSYM6.
	DIVIDE 2 INTO INCREM.
	IF INCREM > 1 OR = 1, MOVE 380 TO BASE2;
		ELSE IF INCREM < 1 AND > 0, MOVE 0 TO INCREM, MOVE 380 TO
		BASE2.
	COMPUTE BASE EQUALS BASE + SIGN * INCREM.
	IF INCREM > 0, MOVE -1 TO SIGN.
	GO TO GETSYMBOL.
GETSYM7.
	MOVE ILOOP TO S-PNT.
GETSYM8.
	PERFORM GET-NEXT-CHAR.
	IF D-CHAR (BASE2) = ":", PERFORM GET-NEXT-CHAR UNTIL D-CHAR (BASE2) = "," OR "]".
	MOVE D-CHAR (BASE2) TO FREE-CHAR (FREPNT).
	IF D-CHAR (BASE2) = "]", MOVE 1 TO FOUND,
	GO TO GETSYM9.
	ADD 1 TO FREPNT, GO TO GETSYM8.

NOT-ALPH.
	IF I-CHAR (ILOOP) = SPACE, ADD 1 TO ILOOP, GO TO LOOKUP-SYMBOL;
		ELSE IF I-CHAR (ILOOP) = "%", GO TO CAPITAL;
		ELSE IF I-CHAR (ILOOP) IS NUMERIC AND I-CHAR (ILOOP) IS NOT = ".",
		GO TO NUMBERIC.
	MOVE I-CHAR (ILOOP) TO FREE-CHAR (FREPNT).
	ADD 1 TO FREPNT, ILOOP, MOVE ILOOP TO S-PNT.
	IF I-CHAR (ILOOP - 1) = "." GO TO PARSD;
		ELSE, MOVE 1 TO FOUND, GO TO GETSYM9.
CAPITAL.
	ADD 1 TO ILOOP.
	IF I-CHAR (ILOOP) IS ALPHABETIC AND I-CHAR (ILOOP) IS NOT = SPACE,
	GO TO CAPITAL;
		ELSE MOVE 1 TO CAP-PT.
CAPLOP.
	IF CAPTL (CAP-PT) = "#", MOVE 1 TO FOUND, MOVE ILOOP TO S-PNT, GO TO GETSYM9;
		ELSE, MOVE CAPTL (CAP-PT) TO FREE-CHAR (FREPNT),
		ADD 1 TO FREPNT, CAP-PT, GO TO CAPLOP.
NUMBERIC.
	IF I-CHAR (ILOOP) IS NUMERIC, ADD 1 TO ILOOP, GO TO NUMBERIC.
	MOVE 1 TO CAP-PT.
NUMBLOP.
	IF NUMB-VAL (CAP-PT) = "#", MOVE 1 TO FOUND, MOVE ILOOP TO S-PNT, GO TO GETSYM9;
		ELSE, MOVE NUMB-VAL (CAP-PT) TO FREE-CHAR (FREPNT),
		ADD 1 TO FREPNT, CAP-PT, GO TO NUMBLOP.
GETSYM9.
	EXIT.
GETSYM10.
	IF FOUND = 0, GO TO NOT-FOUND;
		ELSE ADD 1 TO STR-CNT, MOVE "#" TO FREE-CHAR (FREPNT),
		ADD 1 TO FREPNT, MOVE FREPNT TO D-PNT, GO TO LOOKUP-SYMBOL.
PARSD.
	ADD 1,FREPNT, GIVING D-PNT.
	DISPLAY FREVAR.
	DISPLAY "ENTERING S-LOOP".
	OPEN INPUT S-FILE.
APPLY-LINE.
	READ S-FILE; AT END CLOSE S-FILE, GO TO DONE-SNT.
APPL-LIN-2.
	EXAMINE S-BUF, TALLYING UNTIL FIRST ">".
	MOVE TALLY TO S-LFT-LEN, ADD 2 TO S-LFT-LEN.
	EXAMINE S-BUF, TALLYING UNTIL FIRST "#".
	MOVE TALLY TO S-LEN.
	MOVE 1 TO S-PNT, S-INDX.
APPLY-LOOP.
	SUBTRACT 1 FROM S-PNT, GIVING ILOOP, MOVE S-INDX TO S-INDX2.
APPLY-LOOP2.
	MOVE S-CHAR (S-INDX) TO S-T-CHAR, MOVE FREE-CHAR (S-PNT) TO F-T-CHAR.
	IF S-T-CHAR = F-T-CHAR, ADD 1 TO S-INDX, S-PNT, GO TO APPLY-LOOP2.
	IF S-T-CHAR = "(" AND F-T-CHAR = "+" OR = "-", GO TO APPL-ATTRIB.
	IF S-T-CHAR = "+" AND F-T-CHAR = "#" OR = ",", GO TO NXTWRD.
	IF S-T-CHAR = ">" AND F-T-CHAR = "#" OR = ",", GO TO APPLY-IT.
APPLY-LOOP3.
	IF ILOOP < 1, MOVE 1 TO ILOOP.
	IF ILOOP > 1000, GO TO APPLY-LINE.
	IF FREE-CHAR (ILOOP) = "#", GO TO APPLY-LOOP4;
		ELSE ADD 1 TO ILOOP, GO TO APPLY-LOOP3.
APPLY-LOOP4.
	ADD 1 TO ILOOP.
	IF FREE-CHAR (ILOOP) = ".", GO TO APPLY-LINE.
	MOVE ILOOP TO S-PNT, MOVE 1 TO S-INDX, S-INDX2, GO TO APPLY-LOOP.
NXTDEF.
	MOVE S-INDX2 TO S-INDX, ADD 1 TO S-PNT, GO TO APPLY-LOOP2.
NXTWRD.
	IF FREE-CHAR (S-PNT) = "#", GO TO NXTWR2;
		ELSE, ADD 1 TO S-PNT, GO TO NXTWRD.
NXTWR2.
	ADD 1 TO S-PNT, S-INDX, GO TO APPLY-LOOP2.
APPLY-IT.
	COMPUTE DELTA = (S-PNT - ILOOP) - (S-LEN - S-LFT-LEN).
	IF DELTA = 0, GO TO APPLY-MOVE;
		ELSE IF DELTA > 0, IF DELTA = 1, MOVE 2 TO DELTA,
		GO TO APPLY-LEFT; ELSE, GO TO APPLY-LEFT;
			ELSE COMPUTE DELTA = -1 * DELTA;
			GO TO APPLY-RIGHT.
APPLY-LEFT.
	SUBTRACT DELTA FROM S-PNT, GIVING SUBSCRPT.
	IF SUBSCRPT IS NOT = 0, MOVE FREE-CHAR (S-PNT) TO FREE-CHAR (SUBSCRPT).
	ADD 1 TO S-PNT, IF S-PNT = D-PNT, GO TO APPLY-MOVE;
		ELSE GO TO APPLY-LEFT.
APPLY-RIGHT.
	ADD S-PNT, DELTA, GIVING SUBSCRPT.
	MOVE FREE-CHAR (S-PNT) TO FREE-CHAR (SUBSCRPT).
	ADD 1 TO S-PNT, IF S-PNT = D-PNT, COMPUTE D-PNT =
		S-PNT + DELTA, GO TO APPLY-MOVE;
		ELSE GO TO APPLY-RIGHT.
APPLY-MOVE.
	COMPUTE S-REP-LEN = S-LEN + 1 - S-LFT-LEN.
APPL-MOVE-LOOP.
	IF S-REP-LEN > 0,
	MOVE S-CHAR (S-LFT-LEN) TO FREE-CHAR (ILOOP),
	ADD 1 TO S-LFT-LEN, ILOOP,
	SUBTRACT 1 FROM S-REP-LEN,
	GO TO APPL-MOVE-LOOP.
APPLED.
	GO TO APPL-LIN-2.
DONE-SNT.
	MOVE 0 TO S-PNT.
DONE-LP.
	ADD 1 TO S-PNT.
	IF S-PNT > 1000, GO TO DONE-LP-2.
	IF FREE-CHAR (S-PNT) NOT = ".", GO TO DONE-LP.
DONE-LP-2.
	ADD 1 TO S-PNT.
	IF S-PNT  NOT > 1000, MOVE SPACE TO FREE-CHAR (S-PNT), GO TO DONE-LP-2.
	MOVE FREE-CORE TO LINE-STF.
	WRITE O-LINE FROM LINE-TO-OUTPUT, AFTER ADVANCING 1 LINES.
	GO TO READ-LINE.
APPL-ATTRIB.
	MOVE S-INDX TO S-INDX-SV, MOVE S-PNT TO S-PNT-SV.
APPL-AT-LOOP.
	MOVE S-INDX-SV TO S-INDX.
APPL-AT-LOOP2.
	IF FREE-CHAR (S-PNT) IS NOT ALPHABETIC, AND S-CHAR (S-INDX)
		IS NOT ALPHABETIC, AND S-INDX > S-INDX-SV + 1, GO TO
		APPL-AT-LOOP3.
	IF FREE-CHAR (S-PNT) = S-CHAR (S-INDX),
		ADD 1 TO S-PNT, S-INDX, GO TO APPL-AT-LOOP2;
		ELSE, PERFORM INC-S-PNT UNTIL FREE-CHAR (S-PNT)
			IS NOT ALPHABETIC,
		IF FREE-CHAR (S-PNT) = "+" OR = "-", GO TO APPL-AT-LOOP;
			ELSE GO TO APPLY-LOOP3.
APPL-AT-LOOP3.
		PERFORM INC-S-INDX UNTIL S-CHAR (S-INDX) IS NOT
			ALPHABETIC, MOVE S-PNT TO S-PNT-SV, MOVE S-INDX
			TO S-INDX-SV, IF S-CHAR (S-INDX) IS
			NOT = ")", GO TO APPL-AT-LOOP.
APPL-AT-RTN.
	PERFORM INC-S-PNT UNTIL FREE-CHAR (S-PNT) = "#".	ADD 1 TO S-INDX, GO TO APPLY-LOOP2.
ALREDY-DEF.
	DISPLAY "ALREADY DEFINED".
	GO TO NOTFND2.
NOT-FOUND.
	DISPLAY I-BUF.
	MOVE SPACES TO LINE-SV.
	MOVE "^" TO LINE-SV-CHR (ILOOP).
	DISPLAY LINE-SV.
	DISPLAY "CANNOT FIND WORD OR PHRASE."
NOTFND2.
	DISPLAY "LINE MISSPELLED? ", WITH NO ADVANCING.
	ACCEPT REPLY.
	IF REPLY = "YES", GO TO RE-TYPE.
	DISPLAY "?LEXEIB	WHAT DO YOU WANT, EGG IN YOUR BEER?".
	DISPLAY "		DEFINE THE PHRASE WITH TECO".
	STOP RUN.
NOTFND3.
	DISPLAY "MORE? ", WITH NO ADVANCING.
	ACCEPT REPLY.
	IF REPLY = "YES", GO TO NOTFND2;
		ELSE GO TO READ-LINE-2.
RE-TYPE.
	DISPLAY "REPLACMENT LINE?".
	ACCEPT I-BUF.
	DISPLAY "NEW LINE:".
	DISPLAY I-BUF.
	DISPLAY "OK? ", WITH NO ADVANCING.
	ACCEPT REPLY.
	IF REPLY = "YES", MOVE R-TYPE-M TO LINE-STF,
	WRITE O-LINE FROM LINE-TO-OUTPUT, AFTER ADVANCING 1 LINE,
	MOVE I-BUF TO LINE-STF,
	 WRITE O-LINE FROM LINE-TO-OUTPUT AFTER ADVANCING 1 LINE,
	GO TO NOTFND3;
		ELSE GO TO NOTFND3.

FND-CNTR.
	ADD 1 TO MID-PNT.
	IF D-CHAR (MID-PNT) = ".", ADD 1 TO N-DOTS.
GET-NEXT-CHAR.
	ADD 1 TO BASE2.
	IF BASE2 > 120, MOVE 1 TO BASE2, ADD 1 TO BASE, READ D-FILE; INVALID KEY, GO TO INV-KEY.
INV-KEY.
	DISPLAY "?LEXINV	INVALID KEY, FOR EXPLAINATIO", WITH NO ADVANCING.
	STOP "N".
	DISPLAY "ATTEMPT TO READ A NON-EXISTANT RECORD".
	STOP RUN.
NO-ROOM.
	DISPLAY "?LEXNRM	NO ROOM IN DICTIONARY FILE, FOR EXPLAINATIO", WITH NO ADVANCING.
	STOP "N".
	DISPLAY "THE FILE LIMITS OF THE DICTIONARY FILE".
	DISPLAY "HAVE BEEN EXCEEDED.".
	STOP RUN.
WRAP-UP.
	MOVE SPEL-LINE TO LINE-STF, WRITE O-LINE FROM LINE-TO-OUTPUT
		AFTER ADVANCING 1 LINES.
	MOVE LINE-TOTALS TO LINE-STF, WRITE O-LINE FROM LINE-TO-OUTPUT
		AFTER ADVANCING 1 LINES.
END-PAR.
	CLOSE IN-FILE, D-FILE, OUT-FILE.
	DISPLAY "DONE".
	STOP RUN.
CHK-FOR-CHAR.
	ADD SIGN TO BASE2.
INC-S-PNT.
	ADD 1 TO S-PNT.
INC-S-INDX.
	ADD 1 TO S-INDX.
LINE-TOO-LONG.
	DISPLAY I-BUF.
	DISPLAY "^ LINE TOO LONG -- IGNORED."
	GO TO READ-LINE.
READ-ID.
	MOVE 1 TO ID-PTR.
	IF ERR-PNT > 1, DISPLAY I-BUF, DISPLAY "^ LINE IGNORED, ID ACCEPTED".
	MOVE ERR-PNT TO ERR-PNT-2
	ADD 1 TO ERR-PNT-2.
READ-ID-LOOP.
	IF ERR-PNT-2 > 120, DISPLAY I-BUF,
		DISPLAY "^ NO CLOSING " QUOTE "$" QUOTE ".",
		GO TO READ-LINE.
	MOVE I-CHAR (ERR-PNT-2) TO I-CHAR (ERR-PNT)
	IF I-CHAR (ERR-PNT) = "$", GO TO READ-LINE;
		ELSE MOVE I-CHAR (ERR-PNT) TO ID-CHAR (ID-PTR),
		ADD 1 TO ID-PTR, ERR-PNT-2, GO TO READ-ID-LOOP.



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search