ITENTB: REPEAT 11. 10.^<.RPCNT-1>
END
-\f\ 3\f\ 3\ 3MENTED MODULES:
-; GTUNIT - GETS A UNIT OF TEXT AND RETURNS VALUE
-; CONVRT - DOES THE ACTUAL CONVERSION
-; LXINIT - SETS UP LEXICON FILES
-;CHANNEL DEFS
-
-MLXCHN==1 ;CHANNEL FOR MAIN LEXICON
-ALXCHN==2 ;AUXILIARY LEXICON
-TYIC==3
-TTYIN==3
-TYOC==4
-TYOC1==4
-TTYOUT==4
-ALT==5
-NWCHN==6
-\f;SECTION TO START THE SYSTEM
-
-GO: .OPEN TYIC,[SIXBIT / TTY/]
- .VALUE
- .OPEN TYOC,[SIXBIT / !TTY/]
- .VALUE
- PASCR [ASCIZ /ENTER LEXICON NAMES/]
- PUSHJ P,LXINIT
-
-;CODE HERE FOR MAIN LOOP OF LEXICONTEXT (LISTENER)
-\f;SUBROUTINE TO INITIALIZE THE SYSTEM BY OPENING LEXICON FILES
-
-;FIRST FILE IS MAIN LEXICON
-;SECOND FILE IS AUXILIARY LEXICON
-;THIRD FILE IS NEW LCXICON; IF IT IS NOT FOUND, IT WILL BE CREATED
- ;IF IT IS FOUND, NEW WORDS WILL BE APPENDED
-
-LXINIT: PUSH P,A ;SAVE AC A
- SKIPE LXFMFL
- JRST LSETMN
- PASC [ASCIZ /MAIN LEXICON: /]
-LSETMN: PUSHJ P,RCMD ;READ A FILE NAME
- PUSHJ P,SCNAME
- SKIPN A,SCN1 ;NO NAME GIVEN MEANS THERE IS NO MAIN LEXICON
- JRST AUXNM ;AND JUST SKIP THIS STEP
- MOVEM A,MLXNM+1 ;SET UP FIRST NAME
- SKIPN A,SCN2 ;SEE IF ANY SECOND NAME GIVEN
- MOVE A,[SIXBIT /MAINLX/] ;IF NOT SET UP DEFAULT SECOND NAME
- MOVEM A,MLXNM+2 ;SET UP SECOND NAME
- .OPEN MLXCHN,MLXNM ;OPEN THE MAIN LEXICON FILE
- .VALUE ;REPLACE BY ERROR PROCEDURE EVENTUALLY
-AUXNM: SKIPE LXFMFL
- JRST LSETAU
- PASC [ASCIZ /AUXILIARY LEXICON: /]
- PUSHJ P,RCMD ;READ SECOND FILE NAME
- PUSHJ P,SCNAME
-LSETAU: SKIPN A,SCN1 ;NO AUXILIARY LEXICON?
- JRST NWNM ;NO, JUST SET UP NEW LEXICON THEN
- MOVEM A,ALXNM+1 ;SET UP FIRST NAME
- SKIPN A,SCN2 ;SET UP SECOND NAME AS ABOVE
- MOVE A,[SIXBIT /AUXLEX/]
- MOVEM A,ALXNM+2
- .OPEN ALXCHN,ALXNM ;OPEN AUXILIARY LEXICON FILE
- .VALUE ;REPLACE BY ERROR PROCEDURE
-\f;SECTION TO OPEN NEW LEXICON FILE
-
-NWNM: SKIPE LXFMFL
- JRST LSETNW
- PASC [ASCIZ /NEW LEXICON: /]
- PUSHJ P,RCMD ;READ THIRD FILE NAME
- PUSHJ P,SCNAME
-LSETNW: SKIPN A,SCN1 ;ANY NAME GIVEN?
- JRST READY ;NEW LEXICON WILL BE SET UP LATER
- MOVEM A,NWLXNM+1 ;SET UP NAME
- SKIPN A,SCN2
- MOVE A,[SIXBIT /NEWLEX/]
- MOVEM A,NWLXNM+2 ;SET UP SECOND NAME
- MOVE A,[SIXBIT / &DSK/] ;READ IMAGE BLOCK
- MOVEM A,NWLXNM
- PUSHJ P,NWLXOP ;GO TELL CONVRT ABOUT NEW LEXICON FILE
-
-;SECTION TO READ IN B-BLOCKS
-
-READY: SKIPN MLXNM+1 ;IS THERE A MAIN LEXICON?
- JRST RDAUXB ;NO READ AUX B-BLOCKS THEN
- .ACCES MLXCHN,[0]
- MOVE A,[-26.,,MBBASE]
- .IOT MLXCHN,A ;READ IN MAIN LEXICON B-BLOCK
-RDAUXB: SKIPN ALXNM+1
- JRST BLKSRD ;ALL DONE
- .ACCES ALXCHN,[0]
- MOVE A,[-26.,,ABBASE]
- .IOT ALXCHN,A
-BLKSRD: SETZM MENMAP
- SETZM AENMAP
- MOVE A,[377777,,777777]
- MOVEM A,MBGMAP
- MOVEM A,ABGMAP
- PASCR [ASCIZ /READY/]
- POP P,A
- POPJ P,
-
-MLXNM: SIXBIT / &DSK/
- 0
- 0
-ALXNM: SIXBIT / &DSK/
- 0
- 0
-LXFMFL: 0
-\fTITLE GTUNIT - MODULE TO GET A UNIT OF TEXT FROM THE USER
-
-;INPUT MODULE - GETS INPUT AND RETURNS LEXICON VALUES
-;AS 36-BIT QUANTITIES
-;IF THE ITEM RECEIVED IS THE ESCAPE CHARACTER TO GO TO EDIT
-;MODE, RETURNS ARGP=0, OTHERWISE ARGP CONTAINS ACTUAL LEXICON
-;VALUE
-
-;CALLS CONVRT TO CONVRT AN ASCII STRING TO A VALUE IF A WORD
-;IS THE NEXT ITEM
-
-;BUILDS LITERALS FROM PUNCTUATION,,ETC. AND PACKS THEM
-;4 TO A WORD, 7BIT ASCII, IN FORMAT FOR BYTE MANIPULATION
-;LEFTMOST PART OF WORD CONTAINS TYPE CODE FOR A LITERAL
-;THIS MODULE MAKES A CALL UP TO A ROUTINE LITOUT
-;WHENEVER SUCH A LITERAL WORD SHOULD BE PLACED IN OUTPUT STREAM
-
-;USES REVISED GETITM ROUTINE WHICH TREATS SPACES AND C.R. AS PUNCT.
-;ASSUMES TTY CHANNELS OPEN ON CHANNELS TTYOUT, TTYIN
-
-;DEFINE THE ESCAPE CHARACTER
-ESCAPE==0
-
-\f;ENTER TO GET A UNIT OF TEXT AND RETURN A VALUE IN ARGP
-
-GTUNIT: SAVEB A,D
-GTCHNK: CALL GETITM,[0,ITYPE] ;GET A CHUNK OF INPUT INTO B
- CAIN ITYPE,3 ;IS IT A STRING (WORD)
- JRST WRDGOT ;YES, CONVERT TO LEXICON VALUE
- CAIN ITYPE,4 ;IS IT PUNCTUATION
- JRST PNCGOT ;YES, GO BUILD LITERAL
- JRST GTCHNK ;FOR NOW, IGNORE ALL OTHER TYPES
-
-WRDGOT: PUSHJ P,LITDMP ;CLEAR ANY LITERAL BUFFER
- MOVE ARGP,A ;SET UP POINTER TO HEAD OF THE CHARACTER STRING
- SOS A
- PUSHJ P,CONVRT ;AND CONVERT TO A VALUE
-RRRET: RESTB A,D ;EXIT SEQUENCE
- POPJ P, ;EXIT WITH VALUE IN ARGP
-
-PNCGOT: CAIN A,ESCAPE ;IS IT THE ESCAPE CHARACTER?
- JRST MODCHG ;YES, CHANGE MODE
- PUSHJ P,LITADD ;ADD TO LITERAL BUFFER
- JRST RRRET ;AND RETURN
-
-
-LITDMP: CAMN C,[350700,,D] ;SEE IF BUFFER HAS ANYTHING IN IT
- POPJ P, ;NO, JUST RETURN
- MOVE ARGP,D ;YES, SEND OUT THE LITERAL
- PUSHJ P,LITOUT
- MOVE C,[350700,,D] ;RESET BUFFER
- POPJ P,
-LITADD: IDPB A,D ;PUT CHARACTER IN THE LITERAL BUFFER IN D
-CAMN C,[000700,,D] ;FULL?
-PUSHJ P,LITDMP ;YES, DUMP IT
-POPJ P,
-
-;CODE HERE TO CHANGE MODES
-MODCHG: .BREAK ;FOR DEBUGGING
-\f TITLE GETITM
-; THIS PROGRAM READS ITEMS FROM THE INPUT STREAM
-; RETURNING THEM ONE AT A TIME TO THE USER WITH
-; A TYPE CODE
-
-
-
- .GLOBA READCH,TENTAB,ITENTB,FLUSHI,GETERR
-
-
-;THIS DEFINED FOR ACTUAL TTY ROUTINE
-
-
-
-; CODES FOR CHARACTER TYPES
-
-OCDIG=1
-DECDIG=2