1 ; TABLE OF POWERS OF TEN
7 TENTAB: REPEAT 39. 10.0^<.RPCNT-1>
10 ITENTB: REPEAT 11. 10.^<.RPCNT-1>
13 \f\ 3\f\ 3\ 3MENTED MODULES:
14 ; GTUNIT - GETS A UNIT OF TEXT AND RETURNS VALUE
15 ; CONVRT - DOES THE ACTUAL CONVERSION
16 ; LXINIT - SETS UP LEXICON FILES
19 MLXCHN==1 ;CHANNEL FOR MAIN LEXICON
20 ALXCHN==2 ;AUXILIARY LEXICON
28 \f;SECTION TO START THE SYSTEM
30 GO: .OPEN TYIC,[SIXBIT / TTY/]
32 .OPEN TYOC,[SIXBIT / !TTY/]
34 PASCR [ASCIZ /ENTER LEXICON NAMES/]
37 ;CODE HERE FOR MAIN LOOP OF LEXICONTEXT (LISTENER)
38 \f;SUBROUTINE TO INITIALIZE THE SYSTEM BY OPENING LEXICON FILES
40 ;FIRST FILE IS MAIN LEXICON
41 ;SECOND FILE IS AUXILIARY LEXICON
42 ;THIRD FILE IS NEW LCXICON; IF IT IS NOT FOUND, IT WILL BE CREATED
43 ;IF IT IS FOUND, NEW WORDS WILL BE APPENDED
45 LXINIT: PUSH P,A ;SAVE AC A
48 PASC [ASCIZ /MAIN LEXICON: /]
49 LSETMN: PUSHJ P,RCMD ;READ A FILE NAME
51 SKIPN A,SCN1 ;NO NAME GIVEN MEANS THERE IS NO MAIN LEXICON
52 JRST AUXNM ;AND JUST SKIP THIS STEP
53 MOVEM A,MLXNM+1 ;SET UP FIRST NAME
54 SKIPN A,SCN2 ;SEE IF ANY SECOND NAME GIVEN
55 MOVE A,[SIXBIT /MAINLX/] ;IF NOT SET UP DEFAULT SECOND NAME
56 MOVEM A,MLXNM+2 ;SET UP SECOND NAME
57 .OPEN MLXCHN,MLXNM ;OPEN THE MAIN LEXICON FILE
58 .VALUE ;REPLACE BY ERROR PROCEDURE EVENTUALLY
61 PASC [ASCIZ /AUXILIARY LEXICON: /]
62 PUSHJ P,RCMD ;READ SECOND FILE NAME
64 LSETAU: SKIPN A,SCN1 ;NO AUXILIARY LEXICON?
65 JRST NWNM ;NO, JUST SET UP NEW LEXICON THEN
66 MOVEM A,ALXNM+1 ;SET UP FIRST NAME
67 SKIPN A,SCN2 ;SET UP SECOND NAME AS ABOVE
68 MOVE A,[SIXBIT /AUXLEX/]
70 .OPEN ALXCHN,ALXNM ;OPEN AUXILIARY LEXICON FILE
71 .VALUE ;REPLACE BY ERROR PROCEDURE
72 \f;SECTION TO OPEN NEW LEXICON FILE
76 PASC [ASCIZ /NEW LEXICON: /]
77 PUSHJ P,RCMD ;READ THIRD FILE NAME
79 LSETNW: SKIPN A,SCN1 ;ANY NAME GIVEN?
80 JRST READY ;NEW LEXICON WILL BE SET UP LATER
81 MOVEM A,NWLXNM+1 ;SET UP NAME
83 MOVE A,[SIXBIT /NEWLEX/]
84 MOVEM A,NWLXNM+2 ;SET UP SECOND NAME
85 MOVE A,[SIXBIT / &DSK/] ;READ IMAGE BLOCK
87 PUSHJ P,NWLXOP ;GO TELL CONVRT ABOUT NEW LEXICON FILE
89 ;SECTION TO READ IN B-BLOCKS
91 READY: SKIPN MLXNM+1 ;IS THERE A MAIN LEXICON?
92 JRST RDAUXB ;NO READ AUX B-BLOCKS THEN
95 .IOT MLXCHN,A ;READ IN MAIN LEXICON B-BLOCK
103 MOVE A,[377777,,777777]
106 PASCR [ASCIZ /READY/]
110 MLXNM: SIXBIT / &DSK/
113 ALXNM: SIXBIT / &DSK/
117 \fTITLE GTUNIT - MODULE TO GET A UNIT OF TEXT FROM THE USER
119 ;INPUT MODULE - GETS INPUT AND RETURNS LEXICON VALUES
120 ;AS 36-BIT QUANTITIES
121 ;IF THE ITEM RECEIVED IS THE ESCAPE CHARACTER TO GO TO EDIT
122 ;MODE, RETURNS ARGP=0, OTHERWISE ARGP CONTAINS ACTUAL LEXICON
125 ;CALLS CONVRT TO CONVRT AN ASCII STRING TO A VALUE IF A WORD
128 ;BUILDS LITERALS FROM PUNCTUATION,,ETC. AND PACKS THEM
129 ;4 TO A WORD, 7BIT ASCII, IN FORMAT FOR BYTE MANIPULATION
130 ;LEFTMOST PART OF WORD CONTAINS TYPE CODE FOR A LITERAL
131 ;THIS MODULE MAKES A CALL UP TO A ROUTINE LITOUT
132 ;WHENEVER SUCH A LITERAL WORD SHOULD BE PLACED IN OUTPUT STREAM
134 ;USES REVISED GETITM ROUTINE WHICH TREATS SPACES AND C.R. AS PUNCT.
135 ;ASSUMES TTY CHANNELS OPEN ON CHANNELS TTYOUT, TTYIN
137 ;DEFINE THE ESCAPE CHARACTER
140 \f;ENTER TO GET A UNIT OF TEXT AND RETURN A VALUE IN ARGP
143 GTCHNK: CALL GETITM,[0,ITYPE] ;GET A CHUNK OF INPUT INTO B
144 CAIN ITYPE,3 ;IS IT A STRING (WORD)
145 JRST WRDGOT ;YES, CONVERT TO LEXICON VALUE
146 CAIN ITYPE,4 ;IS IT PUNCTUATION
147 JRST PNCGOT ;YES, GO BUILD LITERAL
148 JRST GTCHNK ;FOR NOW, IGNORE ALL OTHER TYPES
150 WRDGOT: PUSHJ P,LITDMP ;CLEAR ANY LITERAL BUFFER
151 MOVE ARGP,A ;SET UP POINTER TO HEAD OF THE CHARACTER STRING
153 PUSHJ P,CONVRT ;AND CONVERT TO A VALUE
154 RRRET: RESTB A,D ;EXIT SEQUENCE
155 POPJ P, ;EXIT WITH VALUE IN ARGP
157 PNCGOT: CAIN A,ESCAPE ;IS IT THE ESCAPE CHARACTER?
158 JRST MODCHG ;YES, CHANGE MODE
159 PUSHJ P,LITADD ;ADD TO LITERAL BUFFER
160 JRST RRRET ;AND RETURN
163 LITDMP: CAMN C,[350700,,D] ;SEE IF BUFFER HAS ANYTHING IN IT
164 POPJ P, ;NO, JUST RETURN
165 MOVE ARGP,D ;YES, SEND OUT THE LITERAL
167 MOVE C,[350700,,D] ;RESET BUFFER
169 LITADD: IDPB A,D ;PUT CHARACTER IN THE LITERAL BUFFER IN D
170 CAMN C,[000700,,D] ;FULL?
171 PUSHJ P,LITDMP ;YES, DUMP IT
174 ;CODE HERE TO CHANGE MODES
175 MODCHG: .BREAK ;FOR DEBUGGING
177 ; THIS PROGRAM READS ITEMS FROM THE INPUT STREAM
178 ; RETURNING THEM ONE AT A TIME TO THE USER WITH
183 .GLOBA READCH,TENTAB,ITENTB,FLUSHI,GETERR
186 ;THIS DEFINED FOR ACTUAL TTY ROUTINE
190 ; CODES FOR CHARACTER TYPES