plato:source:plaopl:ansin
Table of Contents
ANSIN
Table Of Contents
- [00052] VOCABULARY READ-IN
- [00806] SHOW VOCABULARY ERRORS
- [00854] ENDINGS
- [00997] ENDGSIN READIN FOR ENDINGS COMMAND
- [01072] CONCEPT ANSWER READ-IN
- [01646] -SPECS-
Source Code
- ANSIN.txt
- ANSIN
- * /--- FILE TYPE = E
- * /--- BLOCK ANSIN 00 000 81/07/13 01.10
- IDENT ANSIN
- LCC OVERLAY(1,1)
- *
- *
- * 'N'O'T'E...
- * VOCABS ',UNITS', MAY BECOME VERY LONG.
- * FIELDS ULOC3 AND ULOC4 ARE USED TO HOLD THE
- * TOTAL LENGTH OF THESE UNITS. NOT GOOD BUT THAT'7S
- * THE FACTS.
- *
- CST
- *
- *
- ANSIN$ OVFILE
- *
- *
- EXT CONTENT
- EXT COMCONT CONTINUED COMMAND WORD
- EXT PUTCODE
- EXT ERRORC
- EXT GETLINE
- EXT NXTLINE
- EXT UNAMX
- EXT ECSPRTY
- EXT CFIRST,GETOP,GETOPN,FONTFLG,EFSTART IN -CONTEN-
- EXT MISCON= IN CONDENS
- EXT ERRTAGS,ERRNAME,ERRSTOR
- EXT ERRXYTG,ERR2FEW
- EXT ERRTERM,ERRUARG,ERRVTYP
- EXT ERROUTR,ERRCNTD,ERRXORQ
- EXT ERRBAL
- EXT LNGUNIT
- *
- *
- * /--- BLOCK IDENT 00 000 76/02/13 22.15
- *
- ANSOV OVRLAY
- SA1 OVARG1 DETERMINE WHICH ENTRY POINT
- SB3 X1
- JP B3+*+1
- *
- + EQ VOC01
- + EQ VOC02
- + EQ END02
- + EQ CON01
- + EQ SPE01
- *
- * /--- BLOCK VOCABULARY 00 000 78/03/02 16.42
- TITLE VOCABULARY READ-IN
- *
- * GENERAL STRUCTURE OF VOCABULARY BUFFER. IT EXISTS
- * AS A PHONEY UNIT PART OF A LESSON.
- *
- * THE FIRST WORD OF THIS UNIT...
- * TOP 30 BITS...0=VOCAB, 1=VOCABS
- * BOTTOM 30 BITS...COUNT OF VOCABULARY WORDS
- * (TIMES 2 FOR VOCABS CASE)
- *
- * THEN AN 8 WORD DIRECTORY HOLDING INFO ABOUT THE
- * LOCATION OF WORDS CONTAINING 0,1,...6,7 AND MORE
- * VOWELS.
- * IN THIS DIRECTORY...
- * TOP 30 BITS=NUMBER OF WORDS (TIMES 2 FOR VOCABS)
- * BOTTOM 30 BITS=BIAS TO START OF THESE WORDS
- *
- * THEN N WORDS OF VOCABULARY (TIMES 2 FOR VOCABS)
- *
- * THEN M WORDS OF PHRASES (THESE ARE RELATIVELY
- * POINTED TO BY A FIELD IN THE SECOND VOCABS
- * WORD. THUS, A PHRASE IS FOUND BY (2N+M(I)) FROM
- * THE FIRST WORD OF THE BUFFER
- *
- *
- * FORMAT OF THE 2 WORD VOCABS ENTRY
- * FIRST WORD...
- * 0...UNUSED (FOR HASH SEARCHES)
- * 1-3...NUMBER OF VOWELS
- * 4-7...NUMBER OF CONSONANTS
- * 8-59...CONTENT BITS
- * SECOND WORD...
- * 0...UNUSED (FOR HASH SEARCHES)
- * 1...0=WORD, 1=NUMBER
- * 2-16...WORD HASH, OR 2=SIGN BIT OF NUMBER
- * 17-22...FIRST LETTER
- * 23-25...NUMBER OF CONSONANT/VOWEL PAIRS
- * 26...CAPITALIZATION BIT
- * FOLLOWING ARE NOT SET BY CONTENT
- * 27...1=START OF A PHRASE
- * 28...1=MIDDLE OF A PHRASE
- * 29...1=END OF A PHRASE
- * 30-39...10-BIT PHRASE LIST-LINK
- * 40-48...9-BIT USER SUPPLIED INFO (WORD=N)
- * 49-59...11 BIT BASE SYNONYM NUMBER (0=EXTRA,1=ONLY IN
- * PHRASE, 2,3...N=BASE SYNONYM NUMBER)
- *
- * BASE SYNONYM ENTRIES ARE -- SINGLE KEYWORD
- * <EXTRA WORDS>
- * (SYNONYMOUS KEYWORDS)
- *
- *
- *
- * FORMAT OF PHRASE WORD...
- * 30 BITS = SUPER HASH OF ALL WORDS IN PHRASE
- * BUT NOT INCLUDING THE LAST WORD
- * 10 BITS = LINK TO NEXT PHRASE (0=END OF LINK-LIST)
- * 9 BITS = USER SUPPLIED INFO
- * 11 BITS = BASE SYNONYM NUMBER
- *
- *
- *
- * THE VOCABULARY READ-IN ROUTINE NEEDS NO SPECIAL
- * LONG CM BUFFER...CWKLTH SHOULD BE SEVERAL HUNDRED
- * WORDS LONG FOR EFFICIENCY SAKE IN THE MOVE DOWN
- * ROUTINES.
- *
- *
- * /--- BLOCK VOCABULARY 00 000 77/08/14 23.34
- *
- CWKLTH EQU WORKLTH TO HAVE LOCAL NAME FOR LENGTH OF
- * WORK BUFFER AVAILABLE
- CONCEPT BSS 1 KEYWORD COUNT NOW WORKING ON
- VOCTYPE BSS 1 VOCABULARY TYPE...
- * 0=NO-SPELL (1 WORD PER ENTRY)
- * 1=SPELL (2 WORDS PER ENTRY)
- WDTYPE BSS 1 WORD TYPE
- *
- VCTABLH BSS 1 VOCAB HEADER
- VCTABLE BSS 8 VOWEL VOCABULARY TABLE
- *///NOTE...VCTABLE MUST IMMEDIATELY FOLLOW VCTABLH///
- *
- VOCEC BSS 1 ECS LOCATION OF VOCABS BUFFER
- VOCLTH BSS 1 NUMBER OF VOCABULARY WORDS ("2 FOR VOCABS)
- VOCEND BSS 1 LAST WORD USED IN CONDENSE BUFFER
- CBUFEND BSS 1 END OF CONDENSE BUFFER PLUS ONE
- VOCCONT BSS 1 CONTENT BITS OF VOCABS FOR USE IN PHRASE
- SYNBITS EQU 11 NUMBER OF BITS USED FOR SYNONYM NUMBER
- PHBITS EQU 10 NUMBER OF BITS FOR PHRASE LINK
- HASHBTS EQU 27 TOP 27 BITS CAN BE CONSIDERED A HASH
- *
- PHRASE BSS 1 PHRASE WORKING ON (0 IF NONE)
- PSTART VFD 27/0,1/1,22/0 PHRASE START BIT
- PMIDDLE VFD 28/0,1/1,21/0 MIDDLE WORD IN PHRASE
- PEND VFD 29/0,1/1,20/0 LAST WORD IN PHRASE
- PHNUM BSS 1 NUMBER OF PHRASES
- URINFO BSS 1 HOLDS USER SUPPLIED INFORMATION (WORD=N)
- URIBITS EQU 9 FIELD FOR USER INFO
- *
- *
- SAVIT BSS 1 JUST A SAVE BUFFER
- SAVITAX BSS 1 SAVE A1 AND X1 OVER MOST OF VOCAB ROUTINE
- *
- *
- *
- VOC02 SX6 1 SET TO SPELL VOCAB (2 WORDS PER ENTRY)
- EQ VOCABIT
- VOC01 MX6 0 SET TO NO-SPELL VOCAB (1 WORD PER ENTRY)
- VOCABIT SA6 VOCTYPE SET TYPE OF VOCABULARY
- * /--- BLOCK VOCABULARY 00 000 78/02/28 22.43
- *
- * GET VOCABULARY NAME...ONLY NAME IN UNAM
- TABLE STARTING WITH A 6-BIT ZERO
- SA1 PRETAG SET UP CHARACTER ADDRESS (-1)
- SB1 42 ONLY ALLOW 7 CHARS, WILL PUT ZERO AS FIRST
- MX6 0
- *
- VUN SB3 A1 SAVE CURRENT CHARACTER ADDRESS
- RJ GETOP GET NEXT OPERATION CODE
- SX0 B2-COPSP SEE IF LEADING SPACE
- ZR X0,VUN LOOP TO CLEAN OFF LEADING SPACES
- *
- VULOOP ZR B2,VUMADE SEE IF END OF LINE
- SX0 B2-COPCOMA SEE IF COMMA
- ZR X0,VUMADE
- SX0 B2-COPSP SEE IF SPACE
- ZR X0,VUMADE
- *
- VUMAKE SB1 B1-6 DECREMENT SHIFT COUNT
- NG B1,ERRNAME SEE THAT NOT OVER 7 6-BIT CODES
- SB3 B3+1 NOW GET 6-BIT CHARACTERS NEEDED
- SA2 B3
- LX0 B1,X2 SHIFT TO CORRECT POSITION
- BX6 X6+X0 ADD TO NAME-A-BUILDING
- SX2 A1-B3
- NZ X2,VUMAKE LOOP FOR CHARACTERS OF MORE THAN 6-BITS
- *
- * B3 = A1 NOW BY NECESSITY
- RJ GETOP GET NEXT OP CODE FROM CONTENT
- EQ VULOOP
- *
- VUMADE ZR X6,ERRNAME SEE IF NOTHING THERE
- *
- *
- SX7 B2 SAVE LAST OPERATION CODE
- LX7 30
- SX2 A1 SAVE LAST CHARACTER ADDRESS
- BX7 X2+X7
- SA7 SAVIT
- *
- * VOCAB-NAME-PHONEY-UNIT STARTS WITH 6 BIT ZERO
- RJ UNAMX CALL WITH NAME IN X6
- * RETURN WITH UNIT NUMBER IN X6
- *
- SA2 SAVIT RESTORE CHAR ADDRESS AND LAST OP
- SA1 X2
- LX2 30
- SX1 X2 PUT LAST OP CODE INTO X1
- * /--- BLOCK VOCABULARY 00 000 76/01/20 04.17
- *
- SA2 X6+ULOC SEE IF THIS FIRST TIME OF VOCAB
- PL X2,VAGAIN IF NOT FIRST, THEN SEE IF READ-IN DIRECTIVE
- SA6 JJVOCU STORE FOR LATER
- MX7 0 CLEAR WORD COUNT TO ZERO
- SA7 VOCLTH INITIALIZE TO ZERO WORDS
- SA7 PHRASE NOT YET IN PHRASE
- SA7 PHNUM ZERO PHRASE COUNT
- SA7 ENDTYPE NO ENDINGS
- SA7 EFSTART CLEAR ENDING BASE FONT FLAG
- *
- SX6 2 LEAVE 1 FOR USE AS ONLY IN PHRASE FLAG
- SA6 CONCEPT SET TO FIRST BASE KEYWORD
- SA6 WDTYPE
- *
- SX6 8 LENGTH OF VOWEL TABLE
- SB2 7
- VINIT1 SA6 VCTABLE+B2 SET UP THE VOWEL TABLE
- SB2 B2-1
- PL B2,VINIT1
- *
- SA2 CONBUFF GET ADRESS OF CONDENSE BUFFER
- SA3 CBLTH AND LENGTH
- IX7 X2+X3
- SA7 CBUFEND END OF CONDENSE BUFFER PLUS ONE
- SA3 CONDPNT GET CURRENT LOCATION IN CONDENSE BUFFER
- BX7 X3
- SA7 VOCEC SO, THIS IS THE BUFFER
- *
- IX7 X6+X7 ADD IN LENGTH OF VOWEL TABLE
- * DO NOT NEED AN OVERFLOW TEST...FIRST THING ADDED WILL DO TEST
- SA7 VOCEND LAST WORD USED FOR VOCABS BUFFER
- *
- * /--- BLOCK VOCABULARY 00 000 77/01/24 01.09
- * CHECK FOR LANGUAGE-SPECIFIC VOCABS TABLE
- SA3 LESSON NAME OF LESSON BEING CONDENSED
- SA4 KS0LANG NAME OF COMMON VOCABS FILE
- BX4 X3-X4 COMPARE
- NZ X4,PVLOOP -- BRANCH IF NOT LANGUAGE FILE
- SA2 XSIMP SPECIAL MISSPELLED WORDS BUFFER
- BX7 X2
- SA7 VOCEC
- IX7 X6+X7 ADD IN LENGTH OF VOWEL TABLE
- SA7 VOCEND
- SX3 1000 AND IT IS THIS LONG
- IX7 X2+X3
- SA7 CBUFEND
- *
- PVLOOP ZR X1,VDONE SEE IF AT END OF LINE
- *
- VLOOP MX6 0 CLEAR USER INFORMATION WORD
- SA6 URINFO
- *
- RJ CONTENT GET ANY WORD CONTENTED
- *
- SA2 ENDTYPE UPDATE WORDPT FOR ERROR ROUTINES
- NZ X2,VLLP BUT NOT IF IN ENDINGS
- BX0 X6 SAVE X6
- SX6 A1
- SA6 WORDPT
- BX6 X0
- *
- VLLP ZR X7,VCK IF NO WORD, SEE WHAT CAUSED STOP
- *
- *
- SX2 X1-COPEQ HANDLE (WORD=NUM) USER INFO CASE
- NZ X2,VLOOP9
- SA2 VOCTYPE ONLY LEGAL IN TWO WORD VOCABS
- ZR X2,VERRNE CLEAR VOCAB FLAG AND EXIT
- BX0 X6 SAVE CONTENT WORD
- MX6 0 INITIALIZE NUMBER (X6 IS SAVED IN X0)
- *
- VLOOP5 RJ GETOP GET NEXT CHARACTER
- SX3 B2-COPNUM SEE IF NUMBER
- NZ X3,VLOOP7 OUT IF NOT NUMBER
- AX2 45 GET THE INTEGER VALUE OF THE NUMBER
- SX2 X2-1R0 REDUCE FROM DISPLAY CODE
- BX3 X6 GET COPY OF CURRENT INTEGER
- LX3 3 MULTIPLY BY 8
- LX6 1 MULTIPLY BY 2
- IX6 X3+X6 SO, NOW HAVE MULTIPLIED BY 10
- IX6 X2+X6 ADD IN CURRENT DIGIT
- EQ VLOOP5 GET NEXT CHARACTER
- *
- VLOOP7 ZR X6,VERRUSR MUST BE A NUMBER THERE
- MX3 60-URIBITS MAKE SURE NOT OVER BIT FIELD
- BX3 X3*X6
- NZ X3,VERRUSR
- LX6 SYNBITS PRE-POSITION
- SA6 URINFO SAVE FOR LATER USE
- BX6 X0 RESTORE X6
- SX1 B2 AND GET CURRENT OP CODE IN X1
- * /--- BLOCK VOCABULARY 00 000 77/01/18 14.34
- *
- *
- VLOOP9 SX2 X1-COPDIV CHECK FOR ENDINGS (WORD/S/ING)
- NZ X2,VLGO
- *
- SA3 PHRASE ENDINGS NOT ALLOWED IN PHRASES
- NZ X3,VERREP
- *
- RJ GETOPN CHECK TO INCLUDE BASE WORD AS
- SX2 B3-COPDIV SYNONYM
- ZR X2,VEND DO NOT INCLUDE BASE WORD IN VOCABULARY
- *
- VLGO BX0 X6 SAVE X6 AROUND STORE
- SX6 X1 SAVE OP CODE
- LX6 30
- SX2 A1 SAVE CURRENT INPUT CHARACTER ADDRESS
- BX6 X6+X2
- SA6 SAVITAX
- BX6 X0
- *
- SA0 WORK USED BY MANY AFTER HERE
- SA3 VOCEC GET START OF ECS BUFFER
- BX5 X6 GET COPY OF CONTENT WORD
- AX5 56 GET VOWEL COUNT
- SA5 VCTABLE+X5 INDEX INTO VOWEL TABLE
- SX4 X5 GET REL START OF WORDS WITH THIS VOWEL CNT
- IX3 X3+X4 MAKE ABSOLUTE START OF SEARCH
- AX5 30 GET NUMBER OF WORDS WITH THIS VOWEL COUNT
- IX5 X3+X5 GET ABSOLUTE END OF SEARCH
- SX2 1
- IX5 X5+X2 ADD ONE TO END
- *
- SA1 VOCTYPE GET TYPE OF VOCABULARY
- NZ X1,BVOC2
- *
- *
- MX4 60-SYNBITS MASK FOR USEFULL BITS
- BX7 X6-X7 CONSTRUCT ONE WORD CONTENT WORD
- BX7 X4*X7
- *
- * BINARY CHOP ECS TRANSFER SORT
- *
- IX0 X5-X3 GET NUMBER OF WORDS
- *
- BCLOOP1 AX0 1 BINARY SEARCH
- ZR X0,BCDONE1
- IX0 X0+X3 MAKE ABSOLUTE
- + RE 1
- RJ ECSPRTY
- SA1 A0 BRING UP WORD
- BX2 X1*X4
- IX2 X7-X2 SEE IF WORD LOOKING FOR
- ZR X2,VERRSHW
- PL X2,BCPLUS1
- BX5 X0 RESET BOTTOM
- IX0 X5-X3 GET NUMBER OF WORDS
- EQ BCLOOP1
- BCPLUS1 BX3 X0 RESET TOP
- IX0 X5-X3 GET NUMBER OF WORDS
- EQ BCLOOP1
- *
- * /--- BLOCK VOCABULARY 00 000 77/08/14 23.40
- *
- BCDONE1 SA2 WDTYPE -AND- IN BASE KEYWORD
- BX7 X2+X7
- SA7 A0
- SA1 VOCLTH INCREMENT NUMBER OF VOCABULARY WORDS
- SX7 X1+1
- SA7 A1
- *
- SX1 1
- *
- * ADJUST VOWEL TABLE
- SA3 A5 GET PROPER VOWEL TABLE WORD AGAIN
- MX4 1
- LX4 31
- IX6 X3+X4 ADD 1 TO COUNT OF WORDS OF THIS VOWEL COUNT
- SA6 A3
- SB2 VCTABLE+8 GET END OF VOWEL TABLE + 1
- VOWT1 SB3 A3+1
- GE B3,B2,VOWT2 ADJUST TO END OF TABLE
- SA3 B3 GET NEXT TABLE WORD
- IX6 X3+X1 ADD 1 TO RELATIVE START OF THESE WORDS
- SA6 A3
- EQ VOWT1
- *
- VOWT2 BX0 X5 LOCATION TO START INSERT IN CONDENSE BUFFER
- *
- SA5 VOCEND LAST WORD USED IN BUFFER
- IX6 X5+X1 INCREMENT BY 1 VOCAB WORD
- SA6 A5
- BX5 X6 AND INTO X5 FOR LATER USE IN MOVE ROUTINE
- SA1 CBUFEND GET LAST WORD OF CONDENSE BUFFER
- IX1 X6-X1
- PL X1,VERRTB TEST FOR BINARY TOO LONG
- *
- SX2 CWKLTH-1
- *
- VOCTOP1 SA0 WORK+1 START OF SCRATCH AREA
- IX6 X5-X0 GET NUMBER OF WORDS TO MOVE DOWN
- SB2 X6 FOR VOCLST1
- IX7 X2-X6
- PL X7,VOCLST1 SEE IF THIS LAST MOVE NEEDED
- + RE CWKLTH-1 READ-IN ECS BUFFER
- RJ ECSPRTY
- SA0 WORK RESET TO INCLUDE EXTRA WORD
- + WE CWKLTH-1 WRITE BACK OUT SHIFTED DOWN ONE
- RJ ECSPRTY
- SA1 A0+CWKLTH-1 GET LAST WORD READ-IN
- BX6 X1
- SA6 A0 AND POSITION IT FOR NEXT TIME WRITE-OUT
- IX0 X0+X2 RE-SET CURRENT PLACE WORKING ON
- EQ VOCTOP1
- *
- VOCLST1 RE B2 READ IN LAST PIECE
- RJ ECSPRTY
- SA0 WORK SET TO EXTRA WORD
- SB2 B2+1 AND EXTRA COUNT
- + WE B2
- RJ ECSPRTY
- EQ VADDED
- *
- *
- BVOC2 IX3 X3-X2 BACK UP THE BEGINNING
- MX2 HASHBTS
- SA6 VOCCONT SAVE FOR POSSIBLE USE IN PHRASE
- BCLOOP2 IX0 X5-X3 DO VOCABS BINARY CHOP
- AX0 2 THUS GET RID OF ONES BIT
- ZR X0,BCDONE2
- LX0 1
- IX0 X0+X3 MAKE ABSOLUTE
- * /--- BLOCK VOCABULARY 00 000 77/08/09 17.50
- + RE 2 GET TWO WORD VOCABS ENTRY
- RJ ECSPRTY
- SA1 A0 GET FIRST WORD
- IX1 X6-X1
- NZ X1,BCPM SEE IF FIRST WORDS MATCH
- SA4 A0+1 BRING UP SECOND WORD
- BX1 X2*X4 JUST LOOK AT HASH BITS
- IX1 X7-X1 SEE IF THEY MATCH
- ZR X1,VFIND
- BCPM PL X1,BCPLUS2
- BX5 X0
- EQ BCLOOP2
- BCPLUS2 BX3 X0
- EQ BCLOOP2
- *
- *
- VFIND BX7 X4 TRANSFER HASH WORD TO X7
- BX5 X0 SAVE ADDRESS FOR USE IN PHRASE
- SX6 1
- IX5 X5+X6
- *
- SA3 SAVITAX RESTORE A1-X1
- SA1 X3
- LX3 30
- SX1 X3
- *
- SX4 X1-COPASTR SEE IF THIS IS PART OF A PHRASE
- SA3 PHRASE SEE IF ALREADY IN PHRASE
- NZ X3,INPHR ALREADY IN PHRASE
- ZR X4,PHRST AHA...FIRST WORD OF A PHRASE
- *
- MX2 60-SYNBITS MUST SEE IF THIS WORD ONLY IN A PHRASE
- BX4 -X2*X7
- SX4 X4-1 IN WHICH CASE THE BASE SYNONYM=1
- NZ X4,VERRSHW ALLOW A WORD TO OCCUR ONLY ONCE IN VOCABS
- BX7 X2*X7
- SA2 WDTYPE NOW MUST SET TO THIS WORD-TYPE
- BX7 X2+X7
- SA3 URINFO ALSO PUT IN ANY USER INFO
- BX7 X3+X7
- SA7 A0+1 PUT BACK IN CHANGED CONDITION (HASH WORD)
- + WE 2 WRITE BACK OUT TO ECS BUFFER
- RJ ECSPRTY
- EQ VADDED
- *
- *
- BCDONE2 SA6 A0 STORE AWAY CONTENT WORD
- SA2 WDTYPE -AND- IN BASE KEYWORD
- BX7 X2+X7
- SA3 URINFO ALSO PUT IN ANY USER INFO
- BX7 X3+X7
- SA7 A0+1 STORE AWAY HASH WORD
- *
- SX2 2
- *
- SA3 A5 GET VOWEL TABLE WORD AGAIN
- MX4 1
- LX4 32
- IX6 X3+X4 ADD 2 TO COUNT OF THIS GROUP OF WORDS
- SA6 A3
- SB2 VCTABLE+8 GET END OF BUFFER+1
- VOWT5 SB3 A3+1
- GE B3,B2,VOWT6 DO TILL END OF BUFFER
- SA3 B3 GET NEXT VOWEL TABLE WORD
- IX6 X3+X2 ADD TO RELATIVE START
- SA6 A3
- EQ VOWT5
- *
- VOWT6 SA1 VOCLTH INCREMENT NUMBER OF VOCABULARY WORDS
- IX6 X1+X2 TWO WORDS FOR VOCABS CASE
- SA6 A1
- * /--- BLOCK VOCABULARY 00 000 77/08/14 23.41
- *
- SA4 VOCEND LAST WORD USED IN BUFFER
- IX6 X4+X2 INCREMENT BY 2 VOCABS WORDS
- SA6 A4
- *
- BX0 X5 LOCATION TO START INSERT IN CONDENSE BUFFER
- SX1 1
- IX5 X5+X1 FOR POSSIBLE USE IN PHRASE
- *
- IX4 X4+X1 LAST WORD USED PLUS 1
- SA1 CBUFEND GET LAST WORD OF CONDENSE BUFFER
- IX1 X6-X1
- PL X1,VERRTB TEST FOR BINARY TOO LONG
- *
- SX2 CWKLTH-2
- *
- VOCTOP2 SA0 WORK+2 START OF SCRATCH AREA
- IX6 X4-X0 GET NUMBER OF WORDS TO MOVE DOWN
- SB2 X6 FOR VOCLST2
- IX3 X2-X6
- PL X3,VOCLST2 SEE IF THIS LAST MOVE NEEDED
- + RE CWKLTH-2 READ-IN ECS BUFFER
- RJ ECSPRTY
- SA0 WORK RESET TO INCLUDE EXTRA WORD
- + WE CWKLTH-2 WRITE BACK OUT SHIFTED DOWN ONE
- RJ ECSPRTY
- SA1 A0+CWKLTH-2 GET LAST WORDS READ-IN
- BX6 X1
- SA6 A0 AND POSITION IT FOR NEXT TIME WRITE-OUT
- SA1 A0+CWKLTH-1
- BX6 X1
- IX0 X0+X2 RE-SET CURRENT PLACE WORKING ON
- SA6 A0+1
- EQ VOCTOP2
- *
- VOCLST2 RE B2 READ IN LAST PIECE
- RJ ECSPRTY
- SA0 WORK SET TO EXTRA WORD
- SB2 B2+2 AND EXTRA COUNT
- + WE B2
- RJ ECSPRTY
- *
- *
- SA3 SAVITAX RESTORE A1 AND X1 HERE
- SA1 X3
- LX3 30
- SX1 X3
- *
- SX4 X1-COPASTR SEE IF PHRASE MARKER
- SA3 PHRASE SEE WHERE IN PHRASE
- NZ X3,INPH
- NZ X4,VADDED NOT STARTING PHRASE
- *
- MX6 60-SYNBITS-URIBITS MUST SET -ONLY IN A PHRASE- MARKER
- * AND NOT USER INFO BITS EITHER
- BX7 X6*X7
- SX6 1
- BX7 X6+X7 BASE SYNONYM = 1 MEANS ONLY IN A PHRASE
- *
- PHRST SA2 PSTART STARTING PHRASE
- BX7 X2+X7 SET START BIT
- EQ BCDONEP
- *
- INPH MX6 60-SYNBITS-URIBITS MUST SET -ONLY IN A PHRASE- MARKER
- * AND NOT USER INFO BITS EITHER
- BX7 X6*X7
- SX6 1
- BX7 X6+X7 BASE SYNONYM = 1 MEANS ONLY IN A PHRASE
- INPHR NZ X4,ENDPHR SEE IF ENDING PHRASE
- SA2 PMIDDLE SET MIDDLE OF PHRASE BIT
- BX7 X2+X7
- BCDONEP SA7 WORK RESTORE HASH WORD WITH PROPER BITS SET
- SA0 A7
- BX0 X5
- + WE 1
- RJ ECSPRTY
- * /--- BLOCK VOCABULARY 00 000 77/08/14 23.43
- *
- LX3 5 SHIFT PHRASE-A-BUILDING
- SA2 VOCCONT GET CONTENT WORD
- BX3 X2-X3 PUT IN CONTENT BITS
- MX0 HASHBTS
- BX2 X0*X7 AND HASH OF WORD 2
- BX6 X2-X3
- SA6 A3 AND STORE BACK IN PHRASE
- EQ VLOOP GO GET NEXT WORD
- *
- *
- ENDPHR SA4 PEND SET END OF PHRASE BIT
- BX7 X4+X7
- SA2 PHNUM GET PHRASE COUNT
- SX6 X2+1 AND INCREMENT
- MX0 60-PHBITS
- BX0 X0*X6
- NZ X0,VERRTP SEE IF TOO MANY PHRASES
- SA6 A2
- *
- MX0 60-SYNBITS-PHBITS-URIBITS GET PHRASE READY FOR STORAGE
- BX4 X3
- LX4 PHBITS+SYNBITS+URIBITS
- BX3 X3-X4
- BX3 X0*X3
- MX0 60-PHBITS GET LINK FROM LAST WORD
- LX7 HASHBTS+3+PHBITS
- BX4 -X0*X7
- BX7 X0*X7 CLEAR OUT LAST LINK
- BX7 X7+X6 AND PUT IN THIS LINK
- LX7 60-HASHBTS-3-PHBITS
- SA7 WORK PUT HASH WORD BACK WITH PROPER BITS SET
- SA0 A7
- BX0 X5
- + WE 1
- RJ ECSPRTY
- LX4 SYNBITS+URIBITS POSITION UP PHRASE LINK
- BX3 X3+X4 PHRASE + LINK
- SA4 WDTYPE AND ADD IN BASE SYNONYM
- BX6 X3+X4
- *
- SA1 URINFO ALSO PUT IN ANY USER INFO
- BX6 X1+X6
- SA6 WORK STORE AWAY PHRASE
- SA0 A6
- SA1 VOCEND GET LAST WORD USED IN BUFFER
- SX2 1 GOING TO ADD 1 TO IT
- IX6 X1+X2
- SA6 A1
- BX0 X6 SET UP ECS WRITE POINTER FOR PLACING PHRASE
- SA1 CBUFEND SEE IF BUFFER TOO LONG
- IX1 X6-X1
- PL X1,VERRTB
- + WE 1 WRITE THE PHRASE WORD OUT
- RJ ECSPRTY
- *
- MX6 0
- SA6 PHRASE CLEAR OUT PHRASE FLAG
- *
- VADDED SA3 ENDTYPE SEE IF DOING ENDINGS
- NZ X3,VENDNXT
- *
- SA2 SAVITAX NOW MUST RESTORE A1 AND X1
- SA1 X2
- LX2 30
- SX1 X2
- *
- SX2 X1-COPDIV SKIP INCR., IF STARTING ENDINGS
- ZR X2,VEND ENDINGS WITH BASE WORD IN VOCABULARY
- *
- VADDED1 SA2 WDTYPE GET BASE KEYWORD TYPE
- ZR X2,VCK IF EXTRA WORD, ONTO NEXT
- SA3 CONCEPT SEE IF IN SINGLE KEYWORD MODE
- NG X3,VCK NEGATIVE MEANS SYNONYMOUS KEYWORDS MODE
- SX6 X3+1 INCREMENT TO NEXT KEYWORD
- * /--- BLOCK VOCABULARY 00 000 77/08/14 23.27
- SA6 A3
- SA6 A2
- AX6 SYNBITS CHECK THAT SYN NUMBER NOT TOO MANY BITS
- NZ X6,VERRTS
- *
- VCK SA2 PHRASE CANNOT BE CONSTRUCTING A PHRASE HERE
- NZ X2,VERRORS
- *
- ZR X1,VDONE SEE IF END OF LINE
- *
- SX2 X1-COPPER
- NG X2,VLOOP ANYTHING LESS IS MOST LIKELY TO CONTINUE
- *
- SA2 WDTYPE GET WORD TYPE
- NZ X2,VIMP SEPARATE EXTRA WORDS FROM KEYWORDS
- *
- * DOING EXTRA WORDS <...>
- SX3 X1-COPGTH CHECK FOR END OF EXTRA WORDS
- NZ X3,VERRORS NOTHING ELSE IS ALLOWED
- SA3 CONCEPT SET WORD TYPE BACK TOCURRENT KEYWORD NUMBER
- BX6 X3
- SA6 A2
- EQ VLOOP
- VIMP SA3 CONCEPT SEE IF PROCESSING SYNONYMS
- NG X3,VSYNS NEG IS (...) CASE
- SX4 X1-COPLPRN SEE IF STARTING SYNONYMOUS KEYWORDS
- NZ X4,VIMP2
- BX6 X3 SET TO SYNONYMOUS KEYWORDS (...) CASE
- SA6 A2 SET WORD TYPE
- BX6 -X6 SET CONCEPT -NEG- TO SIGNIFY SYN-KEYWORDS
- SA6 A3
- EQ VLOOP
- *
- VIMP2 SX4 X1-COPLTH SEE IF EXTRA WORDS <...> CASE
- NZ X4,VERRORS ALL ELSE AN ERROR
- MX6 0
- SA6 A2 SET WORD TYPE TO EXTRA WORDS CASE
- EQ VLOOP
- *
- VSYNS SX4 X1-COPRPRN SEE IF FINISHED WITH SYN. KEYWORDS
- NZ X4,VERRORS ALL ELSE AN ERROR
- BX3 -X3 SET -CONCEPT- BACK TO SINGLE KEYWORD
- SX6 X3+1 INCREMENT KEYWORD
- SA6 A2
- SA6 A3
- AX6 SYNBITS CHECK THAT SYN NUMBER NOT TOO MANY BITS
- ZR X6,VLOOP
- EQ VERRTS
- *
- VDONE SA1 NEXTCOM SEE IF NEXT LINE A CONTINUATION
- SA2 COMCONT LOAD BLANK
- BX1 X1-X2
- NZ X1,VDONE1
- RJ GETLINE GET THE CONTINUATION INPUT LINE
- SA1 PRETAG SET TO START OF INPUT STRING
- EQ VLOOP
- *
- VDONE1 SA2 WDTYPE MAKE SURE NOT IN <..> OR (..)
- ZR X2,VERRSF CANNOT BE IN EXTRA WORDS
- SA2 CONCEPT
- NG X2,VERRSF CANNOT BE IN SYN. KEYWORDS
- SA2 VOCLTH GET LENGTH OF VOCABULARY
- ZR X2,VERRSF
- * /--- BLOCK VOCABULARY 00 000 77/08/14 23.37
- *
- SA3 VOCTYPE SET VOCABULARY TYPE
- LX3 30
- BX6 X2+X3 TYPE AND COUNT
- SA3 PHNUM GET NUMBER OF PHRASES
- IX2 X2+X3 MUST ADD PHRASE COUNT TO VOCAB COUNT
- SX2 X2+1 ADD IN FIRST WORD OF BUFFER
- *
- *
- SA6 VCTABLH STORE AWAY PACKED UP WORD OF COMPLETED BUFF
- SA0 A6
- SA1 VOCEC
- BX0 X1
- + WE 9 PUT OUT HEADER AND VOCABULARY BY VOWEL TABL
- RJ ECSPRTY
- *
- SX2 X2+8 ADD VOWEL TABLE LENGTH FOR PROPER UNIT LTH
- *
- SA1 CONDPNT GET CURRENT READ-IN ECS POINTER
- *
- SA3 XSIMP SEE IF SPECIAL -SYSLIB- VOCABULARY
- IX3 X0-X3
- NZ X3,VDONE2
- MX2 0 MAKE 0 LENGTH SO -SYSLIB- NOT USED UP
- EQ VDONE3
- *
- *
- VDONE2 SA3 VOCEND GET LAST WORD USED
- SX7 1 ADD 1
- IX7 X3+X7
- SA7 A1 STORE AWAY NEXT USABLE PLACE OF CONDENSE BF
- *
- VDONE3 SA3 CONBUFF ADDRESS OF CONDENSE BUFFER
- IX6 X1-X3 BIAS TO UNIT
- LX6 ULOC2+ULOC3+ULOC4
- BX6 X6+X2 INSERT IN TOTAL LENGTH
- LX6 60-ULOC1-ULOC2-ULOC3-ULOC4
- SA1 JJVOCU GET LOCATION OF LIST IN ULOC TABLE
- SA6 X1+ULOC SET ENTRY INTO ULOC TABLE
- EQ NXTLINE
- *
- VAGAIN NZ X1,VERRORS MAKE SURE NOTHING ELSE IN THIS LINE
- SA1 NEXTCOM MAKE SURE NO OTHER LINES
- SA2 COMCONT
- BX1 X1-X2
- ZR X1,VERRORS
- SA6 JJVOCU SET TO THE MENTIONED VOCABULARY
- EQ NXTLINE ON TO NEXT COMMAND
- *
- VERRORS MX6 0 SET VOCUNIT TO ZERO TO KILL ANY *CONCEPT*S
- SA6 JJVOCU
- EQ ERRORC
- *
- VERRSF SB1 64 ERRORS IN FINAL CHECK
- EQ VERRV
- *
- VERRNE SB1 65 = NOT ALLOWED IN VOCAB (USE VOCABS)
- EQ VERRV
- *
- VERRUSR SB1 60 USER INFO NUMVEER OUT OF RANGE
- EQ VERRV
- *
- VERREP SB1 104 ENDINGS OPTION CANNOT BE USED IN PHRASES
- EQ VERRV
- *
- VERRTP SB1 114 TOO MANY PHRASES
- EQ VERRV
- *
- VERRTS SB1 115 TOO MANY BASE SYNONYMS
- EQ VERRV
- *
- VERRTB SB1 116 BINARY BECOMES TOO LONG
- EQ VERRV
- *
- *
- VERRV MX6 0 KILL VOCABS
- SA6 JJVOCU
- EQ =XERR NO RETURN
- * /--- BLOCK VERRSHOW 00 000 77/01/17 22.44
- TITLE SHOW VOCABULARY ERRORS
- *
- VERRSHW SA1 CFIRST GET ADDRESS OF FIRST CHARACTER
- * (MIGHT NOT BE START OF ACTUAL WORD..SP)
- SA2 SAVITAX GET CURRENT A1
- SX6 X2
- IX6 X6-X1 GET LENGTH OF BADNESS
- SX2 X6-21
- NG X2,VERR3 SHOW ONLY FIRST 20 CHARACTERS
- SX6 20
- VERR3 SA6 NCHAR
- *
- SB1 1
- SB3 10
- SB2 0 INDEX INTO SHOWOUT
- SB4 X6-1
- MX7 0
- *
- VERRL LX7 6
- SA2 X1 GET NEXT CHARACTER
- BX7 X2+X7 PACK UP
- SX1 X1+B1
- SB3 B3-B1
- NZ B3,VERRL
- *
- SA7 SHOWOUT+B2
- SB2 B2+B1
- MX7 0
- SB3 10
- SB4 B4-B3
- PL B4,VERRL
- *
- SB1 906 **DUPLICATE WORD**
- SB2 B0
- SX1 B0
- SA2 NCHAR COUNT WILL BE MERGED WITH UNIT
- SB3 SHOWOUT BUFFER ADDRESS
- SB4 2
- RJ =XRJERRB
- SA2 SAVITAX NOW RESTORE A1 AND X1
- SA1 X2
- LX2 30
- SX1 X2
- SA3 ENDTYPE SEE IF IN ENDINGS
- ZR X3,VCK
- EQ VENDNXT
- *
- * /--- BLOCK ENDINGS 00 000 77/01/24 01.14
- TITLE ENDINGS
- * PROCESS ENDINGS FOR WORDS WITHIN A VOCABULARY
- WLEN EQU 30 MAX CHARS IN WORD
- ELEN EQU 10 MAX CHARS IN ENDING
- EWORD BSS WLEN+ELEN+1 WORD W/ ENDING, / AND 00B
- ENDTYPE BSS 1 0=NOT IN ENDINGS, 1=/NUM, -1/CHARS
- ESAVE BSS 1 SAVE ADDRESS OF REAL CHARACTER STRING
- EWDEND BSS 1 ADDRESS OF END OF BASE WORD
- ENFONT BSS 1 NECESSARY TO SAVE FONT ALONG THE WAY
- *
- *
- VEND SA1 CFIRST GET START OF BASE WORD
- SA1 X1-1 BACK UP ONE
- SA2 EFSTART GET FONT AT START OF WORD AGAIN
- BX6 X2
- SA6 FONTFLG
- SB1 1
- SB4 EWORD+WLEN INITIALIZE TO MAXIMUM LENGTH BASE WORD
- SB5 EWORD
- *
- EWL SB3 A1 SAVE THIS CHARACTER POSITION
- RJ GETOP
- SX3 B2-COPDIV CONTINUE UNTIL THE DIVIDE SIGN
- ZR X3,EWLD4
- SX3 B2-COPEQ ALSO LOOK FOR USER OPTIONS (=)
- ZR X3,EWLD3
- EWL1 GE B5,B4,VERRORS MUST BE LESS THAN WLEN
- SB3 B3+B1 INCREMENT BY 1
- SA2 B3 GET CHARACTER
- BX6 X2
- SA6 B5
- SB5 B5+B1
- SX2 A1-B3
- ZR X2,EWL
- EQ EWL1
- *
- EWLD3 RJ GETOP GET TO ENDINGS SIGN
- SX3 B2-COPDIV
- NZ X3,EWLD3
- EWLD4 RJ GETOPN ALSO SEE IF TWO // IN ROW
- SX3 B3-COPDIV
- NZ X3,EWLDN
- RJ GETOP ADVANCE OVER THE SECOND /
- *
- EWLDN SX6 B5 SAVE ADDRESS OF END OF BASE WORD
- SA6 EWDEND
- EGET SB3 A1 SAVE THIS ADDRESS
- RJ GETOP GET OP CODE
- SX3 B2-COPNUM SEE IF /NUM CASE
- NZ X3,ELTTRS
- SX6 A1 SAVE THIS ADDRESS
- SA6 ESAVE
- SA6 WORDPT ALSO FOR ERROR POINTER
- SA3 FONTFLG MUST SAVE FONT HERE
- BX6 X3
- SA6 ENFONT
- AX2 45 GET NUMBER
- SX2 X2-1R0 REDUCE FROM DISPLAY CODE
- LX2 3 MULTIPLY BY 8
- SA3 XBEND GET ADDRESS OF ECS ENDINGS BUFFER
- IX0 X2+X3
- MX3 0 INITIALIZE TO ZERO ENDING NUMBER
- SA0 ENDINGS SET UP CM ADDRESS
- + RE ENDTOT
- RJ ECSPRTY
- *
- SA2 ENDINGS CHECK FOR USE OF ENDINGS BEFORE
- ZR X2,VERRORS THAT ENDINGS DECLARED
- *
- * /--- BLOCK ENDINGS 00 000 77/01/24 01.14
- *
- ENDNUM SX6 X3+B1 INCREMENT ENDING NUMBER
- SA6 ENDTYPE STORE FOR NEXT TIME
- SA1 ENDINGS+X3 GET ENDING
- ZR X1,VENDNT1 SEE IF DONE WITH THIS GROUP OF ENDINGS
- SA2 EWDEND GET ADDRESS OF END OF BASE WORD
- SB2 X2
- MX0 54
- ELUP LX1 6
- BX6 -X0*X1
- SA6 B2 ADD ON THIS CHARACTER
- BX1 X0*X1 CLEAR OUT CHARACTER
- SB2 B2+B1 INCREMENT
- NZ X1,ELUP SEE IF ANY MORE
- EAGN MX6 0 ENTRY HERE FROM ELTTRS BELOW
- SA6 B2 PUT IN TRAILING ZERO
- SA1 EWORD-1 SET UP INPUT CHARACTER ADDRESS
- SA2 EFSTART GET ORIGINAL FONT AT START OF BASE WORD
- BX6 X2
- SA6 FONTFLG AND RESET TO THIS FONT SINCE WORD GOING
- EQ VLOOP THROUGH AGAIN
- *
- *
- ELTTRS ZR B2,VERRORS MUST BE SOMETHING THERE
- SX3 B2-COPCR LETTERS/NUMBERS/SUP/SUB/BKSP
- PL X3,VERRORS ALL ELSE AN ERROR
- ELTTRS1 SB4 A1
- RJ GETOP
- ZR B2,ELTTRS3 SEE IF END OF LINE
- SX3 B2-COPCR LOOP IF LETTERS/NUMBERS/SUP/SUB/BKSP
- NG X3,ELTTRS1
- SX3 B2-COPEQ SEE IF USER OPTIONS
- NZ X3,ELTTRS3
- ELTTRS2 SB4 A1
- RJ GETOP NOW RUN THRU ANY NUMBERS
- SX3 B2-COPNUM
- ZR X3,ELTTRS2
- ELTTRS3 SX6 B4 SAVE LAST ADDRESS
- SA6 ESAVE
- SA6 WORDPT ALSO FOR ERROR POINTER
- SA3 FONTFLG MUST SAVE FONT HERE
- BX6 X3
- SA6 ENFONT
- *
- SA2 EWDEND GET ADDRESS OF END OF BASE WORD
- SB2 X2
- ELTMOVE SB3 B3+B1 INCREMENT
- SA1 B3 GET NEXT CHARACTER
- BX6 X1
- SA6 B2
- SB2 B2+B1 INCREMENT
- LT B3,B4,ELTMOVE
- SX6 -1
- SA6 ENDTYPE SET ENDING TYPE TO LETTERS
- EQ EAGN
- *
- *
- VENDNXT SB1 1 B1 USED LOTS, SA3 ENDTYPE ALREADY DONE
- PL X3,ENDNUM BRANCH FOR /NUM CASE
- VENDNT1 SA1 ESAVE RESTORE LAST REAL CHARACTER ADDRESS
- SA1 X1
- SA2 ENFONT MUST RESTORE FONT SAVED ALONG THE WAY HERE
- BX6 X2
- SA6 FONTFLG
- MX6 0
- SA6 ENDTYPE ALSO CLEAR ENDTYPE FOR POSSIBLE EXIT
- RJ GETOP GET NEXT OPERATION
- SX3 B2-COPDIV SEE IF ENDINGS CONTINUES
- ZR X3,EGET
- SX1 B2 PUT LAST OP CODE INTO X1
- EQ VADDED1 ELSE OUT OF ENDINGS
- ***
- * /--- BLOCK ENDINGS-IN 00 000 76/04/08 14.34
- TITLE ENDGSIN READIN FOR ENDINGS COMMAND
- ENDTOT EQU 8 ALLOW EIGHT ENDINGS OF A PARTICULAR KIND
- *
- END02 SA1 PRETAG ADDRESS OF INPUT STRING
- EON RJ GETOP GET THE ENDING NUMBER
- SX0 B2-COPNUM
- ZR X0,EWD1
- SX0 B2-COPSP SKIP LEADING SPACES
- ZR X0,EON
- EQ ENDGERR
- *
- EWD1 AX2 45 GET INTEGER VALUE
- SX2 X2-1R0
- LX2 3 MULTIPLY BY 8
- SA3 XBEND GET ECS ADDRESS OF ENDINGS BUFFER
- IX0 X2+X3 NOW HAVE ECS ADDRESS OF THIS ENDINGS BUFFER
- MX5 0 COUNT OF ENDINGS IN THIS RUN
- SB4 B0 NO COMMA FOUND YET
- *
- ETOP1 SB3 A1 SAVE THIS ADDRESS
- MX6 0 CLEAR ENDING-A-BUILDING
- RJ GETOP MUST FIND COMMA AND CLEAR OFF SPACES
- ETOP2 SX3 B2-COPSP
- ZR X3,ETOP1
- SX3 B2-COPCOMA
- NZ X3,ELOOP
- SB4 1 FLAG THAT COMMA FOUND
- EQ ETOP1
- *
- ELOOP ZR B4,EDONE MUST HAVE SEEN A COMMA
- SB1 60 INITIALIZE SHIFT COUNT
- ZR B2,ENDGERR MUST NOT BE AT END OF LINE
- SX3 B2-COPCR ALLOW LETTERS/NUMBERS
- PL X3,ENDGERR ERROR IF NOT A LETTER
- *
- EMAKE SB1 B1-6 DECREMENT SHIFT COUNT
- NG B1,ENDGERR
- SB3 B3+1
- SA2 B3 GET CHARACTER
- LX2 B1,X2 SHIFT INTO PROPER PLACE
- BX6 X2+X6 ADD INTO REST OF CHARACTERS
- SX2 A1-B3
- NZ X2,EMAKE LOOP FOR CHARACTERS OF MORE THAN 6-BITS
- RJ GETOP GET NEXT OPERATION
- ZR B2,ESTO
- SX3 B2-COPCR ALLOW LETTERS/NUMBERS
- NG X3,EMAKE
- *
- ESTO SX2 X5-ENDTOT SEE IF TOO MANY ENDINGS
- PL X2,ENDGERR
- SA6 X5+ENDINGS STORE AWAY ENDINGS
- SX5 X5+1 INCREMENT
- SB4 B0 NO COMMA FOUND YET
- MX6 0 CLEAR ENDING-A-BUILDING
- EQ ETOP2
- *
- EDONE NZ B2,ENDGERR MUST BE AT END OF LINE
- ZR X5,ENDGERR MUST BE SOME COUNT OF ENDINGS
- *
- SA0 ENDINGS CM ADDRESS OF ENDINGS
- *
- MX6 0
- SA6 X5+ENDINGS STORE ZERO FOR END TEST DURING EXECUTION
- + WE ENDTOT WRITE OUT TO ECS BUFFER
- RJ ECSPRTY
- EQ NXTLINE GO ON TO NEXT TUTOR COMMAND
- *
- ENDGERR SX6 A1 STORE CURRENT INPUT ADDRESS FOR ERRORC
- SA6 WORDPT
- EQ ERRORC
- *
- *
- ENDINGS BSS 8 THE EIGHT ENDINGS
- BSSZ 1 GUARANTEE ONE WORD OF ZERO
- * /--- BLOCK CONCEPT 00 000 78/08/29 17.20
- TITLE CONCEPT ANSWER READ-IN
- *
- * CONCEPT COMMAND READ-IN
- *
- * COMMAND...
- * 12 BITS = NUMBER OF CONCEPTS
- * 15 BITS = POINTER TO CONCEPTS RELATIVE TO START
- * OF THIS UNITS ECS RESIDENT EXTRA STORAGE
- * 9 BITS = VOCABULARY UNIT NUMBER
- * 12 BITS = MAXIMUM CONCEPT COMMAND RUN-ON
- * 12 BITS = COMMAND NUMBER
- *
- * DATA WORDS IN BINARY
- * 1 BIT = ZERO FOR BINARY SEARCHES
- * 37 BITS = HASHED CONCEPT
- * 12 BITS = CONCEPT COMMAND RUN-ON COUNT
- * 10 BITS = POINTER (REL TO B5) +1 TO USER INFO OPTIONS
- *
- *
- * USER INFORMATION OPTION PACKAGES
- * TOP BITS = GETVAR CODE TO STORE INFO
- * 39-49 = BASE SYNONYM TO DO USER OP ON
- * 50-59 = REL PTR +1 TO ADDITIONAL USER INFO OPTIONS
- *
- *
- *
- CON01 SA1 JJVOCU MUST BE PREVIOUS *VOCAB* COMMAND
- ZR X1,ERRORC
- *
- SA2 COMMAND GET CURRENT COMMAND NAME
- BX6 X2
- SA6 CNAME STORE FOR LATER TEST OF REPEATED COMMANDS
- *
- SA1 X1+ULOC GET UNIT LOCATION INFO WORD
- NG X1,ERRORC IN CASE VOCAB NOT IN RIGHT
- AX1 60-ULOC1 GET RELATIVE START OF VOCABS IN BINARY
- SA2 CONBUFF POINTER TO START OF CONDENSE BUFFER
- IX0 X1+X2 GET ABSOLUTE ADDRESS
- SA0 VCTABLH GET HEADER AND VOWEL TABLE
- + RE 9
- RJ ECSPRTY
- BX6 X0
- SA6 VOCEC KEEP BUFFER ADDRESS
- SA1 A0
- SX6 X1+8 COUNT OF WORDS PLUS VOWEL TABLE BIAS
- SA6 VOCLTH
- AX1 30
- SX6 X1
- SA6 VOCTYPE SAVE TYPE OF VOCABULARY
- *
- MX7 0
- SA7 CONBIAS CLEAR RUN-ON CONCEPT COUNTER
- *
- SA1 ECSRESB GET ADDRESS OF ECS ARG BUFFER
- SX2 ECSRESL AND LENGTH
- IX7 X1+X2
- SA7 CBUFEND GET END OF BUFFER PLUS ONE
- SA2 ECSARGS GET CURRENT LENGTH OF ECS ARGS
- IX3 X1+X2 GET CURRENT PLACE IN BUFFER
- SX7 1
- IX7 X3-X7 START POINTERS BACK ONE
- SA7 COCEC SO, THIS IS THE BUFFER FOR CONCEPTS
- SA7 COCEND LAST WORD USED
- *
- *
- CONCPTK SA1 PRETAG SET TO START OF CHARACTER STRING
- * B1 CANNOT BE USED UNTIL INPUT EXHAUSTED
- SB5 B0 INITIALIZE COUNT OF WORDS IN CONCEPT
- *
- * /--- BLOCK CONCEPT 00 000 77/03/03 02.46
- AVLOOP RJ CONTENT GET NEXT WORD CONTENTED
- *
- ZR X7,AVCK IF NOTHING THERE SEE WHAT CAUSED STOP
- SA3 VOCEC GET VOCABS BUFFER
- SA0 WORK USED BY MANY ECS READS LATER
- BX5 X6 GET COPY OF CONTENT WORD
- AX5 56 GET NUMBER OF VOWELS IN THIS WORD
- SA5 VCTABLE+X5 GET PROPER VOWEL TABLE ENTRY
- SX2 X5 GET RELATIVE START OF WORDS OF THIS VOW LTH
- IX3 X3+X2 MAKE ABSOLUTE THE START OF SEARCH
- AX5 30 GET NUMBER OF WORDS OF THIS VOWEL LENGTH
- IX5 X3+X5 GET END
- SX2 1
- IX5 X2+X5 ADD ONE MORE
- SA4 VOCTYPE GET TYPE OF VOCABULARY
- NZ X4,CONF2
- *
- BX6 X6-X7 CONSTRUCT ONE WORD CONTENT WORD
- MX7 60-SYNBITS
- BX6 X7*X6
- *
- CONFIN1 IX0 X5-X3 DO VOCAB BINARY CHOP
- AX0 1
- ZR X0,CERRWD
- IX0 X0+X3 MAKE ABSOLUTE
- + RE 1
- RJ ECSPRTY
- SA4 A0 BRING UP WORD
- BX2 X4*X7
- IX2 X6-X2 SEE IF WORD LOOKING FOR
- ZR X2,CWR1
- PL X2,CPLUS1
- BX5 X0
- EQ CONFIN1
- CPLUS1 BX3 X0
- EQ CONFIN1
- *
- CONF2 IX3 X3-X2 BACK UP THE BEGINNING
- CONFIN2 IX0 X5-X3 DO VOCABS BINARY CHOP
- AX0 2 THUS GET RID OF ONES BIT
- ZR X0,CERRWD
- LX0 1
- IX0 X0+X3 MAKE ABSOLUTE
- + RE 2 GET TWO WORD VOCABS ENTRY
- RJ ECSPRTY
- SA2 A0 GET FIRST WORD
- IX2 X6-X2
- NZ X2,CONON SEE IF FIRST WORDS MATCH
- SA4 A0+1 BRING UP SECOND WORD
- MX2 HASHBTS
- BX2 X2*X4 JUST LOOK AT HASH BITS
- IX2 X7-X2 SEE IF THEY MATCH
- ZR X2,CWRD
- CONON PL X2,CPLUS2
- BX5 X0
- EQ CONFIN2
- CPLUS2 BX3 X0
- EQ CONFIN2
- *
- CERRWD SB1 62 ERROR, WORD NOT IN VOCABULARY
- RJ =XRJERR
- EQ CONSYN
- *
- *
- CWR1 BX4 -X7*X4 USE ONLY BASE SYNONYM FOR -VOCAB- CASE
- CWRD SX3 B5-CCLTH SEE IF OVERFLOW OF BUFFERS
- PL X3,LNGUNIT
- BX7 X4
- SA7 CHBUF+B5 STORE AWAY HASH/INFO WORD
- SA6 CCBUF+B5 STORE AWAY CONTENT FOR LATER PHRASE
- SB5 B5+1
- *
- * /--- BLOCK CONCEPT 00 000 75/12/11 12.00
- AVCK ZR X1,AVCK1 SEE IF ALL DONE
- SX2 X1-COPCOMA
- NG X2,AVLOOP LOOP UNTIL FIND ALL WORDS
- NZ X2,ERRORC ALL ELSE AN ERROR
- SA3 VOCTYPE ONLY 2 WORD VOCAB CASE CAN HAVE USER OPS
- ZR X3,ERRORC
- *
- AVCK1 SX7 A1 SAVE CHAR ADDRESS
- SA7 WORDPT
- SX7 X1 SAVE LAST OPERATION
- SA7 SAVIT
- *
- MX6 0 PRE-SET X6=0 FOR POSSIBLE USE AT CNDPK3
- ZR B5,CNDPK3 CONCEPT BLANK (X6 SHOULD BE ZERO)
- SB2 B5
- SB1 B0
- SX6 B5 SAVE NUMBER OF WORDS IN CONCEPT
- SA6 CONLTH
- *
- SA3 VOCTYPE GET TYPE OF VOCABULARY
- ZR X3,CORDER SKIP LOOKING AT PHRASES IF -VOCAB-
- *
- * MUST TANGLE WITH PHRASES HERE
- *
- CPLOOP SA1 CHBUF+B1 BRING UP A WORD
- BX2 X1
- LX2 HASHBTS LOOK IF A START OF A PHRASE
- PL X2,CPLOOPZ
- *
- MX7 HASHBTS START OF A POSSIBLE PHRASE
- SB5 B2 GET CURRENT END OF LIST
- CPLOOP1 SA5 CCBUF+B1 GET CONTENT BITS
- BX4 X1*X7 GET HASH BITS
- BX5 X4-X5 PUT TOGETHER
- SB3 B1
- CPLOOPA SB3 B3+1
- GE B3,B5,CPLOOPZ OUT IF DO NOT FIND AN END OF PHRASE
- SA2 CHBUF+B3 BRING UP NEXT WORDS INFO BITS
- BX3 X2
- LX3 HASHBTS+1 RUN THRU MIDDLE OF PHRASE WORDS
- PL X3,CPLOOPB SEE IF NO LONGER MIDDLE PHRASE
- SB4 B3+1
- GE B4,B5,CPLOOPB SEE IF THIS IS LAST WORD
- SA4 CCBUF+B3 BRING UP THIS WORD-S CONTENT BITS
- LX5 5 BUILD A PHRASE WORD
- BX5 X5-X4
- BX4 X2*X7 GET ONLY HASH BITS
- BX5 X5-X4
- EQ CPLOOPA
- CPLOOPB LX3 1 NOW SEE IF FIND END OF PHRASE
- PL X3,CPLOOPM IF NOT END, TRY SOMETHING ELSE
- BX4 X5 NOW MAKE PHRASE WORD
- LX4 PHBITS+SYNBITS+URIBITS
- BX5 X4-X5
- AX5 PHBITS+SYNBITS+URIBITS GET JUST HASH STUFF
- AX2 60-HASHBTS-3-PHBITS GET LINK TO PHRASE WORD
- CPLOOPC MX3 60-PHBITS
- BX2 -X3*X2 GETLINK
- ZR X2,CPLOOPM RUN OUT OF LINKS
- SA3 VOCEC GET PHRASE WORD
- IX0 X2+X3
- SA3 VOCLTH
- IX0 X0+X3
- * /--- BLOCK CONCEPT 00 000 78/02/28 23.51
- + RE 1 READ IN PHRASE WORD FROM VOCABS BUFFER
- RJ ECSPRTY
- SA2 A0 GET PHRASE WORD
- BX4 X2
- AX4 PHBITS+SYNBITS+URIBITS GET JUST HASH BITS
- BX4 X4-X5 SEE IF THIS IS THE PHRASE
- ZR X4,CPLOOPD GOT IT
- AX2 SYNBITS+URIBITS ELSE, TRY FOR A CHAIN LINK
- EQ CPLOOPC
- *
- CPLOOPM SB5 B5-1 SO TRY FOR A SHORTER LENGTH PHRASE
- EQ CPLOOP1
- *
- CPLOOPD SB1 B1+1 NOW SET EXTRA PHRASE WORDS TO EXTRA WORDS
- MX6 0
- SA6 CHBUF+B1
- LT B1,B3,CPLOOPD
- BX1 X2
- *
- CPLOOPZ MX3 60-SYNBITS
- BX6 -X3*X1 NOW GET BASE SYNONYM BITS
- SA6 A1 JUST BASE SYNONYM BITS
- *
- SX6 X6-1 MAKE SURE THAT WORD WAS DEFINED AS SOMETHIN
- NZ X6,CPLZ ERROR IF ONLY A PART OF A PHRASE
- *
- SB1 63
- RJ =XRJERR
- EQ CONSYN
- *
- CPLZ SB1 B1+1
- LT B1,B2,CPLOOP
- *
- *
- CORDER SA3 TSPECS SEE IF ORDER IS IMPORTANT
- LX3 NOORDER
- PL X3,CND NORMAL CASE IS THAT ORDER IS IMPORTANT
- SB1 B0
- *
- * ORDER IS NOT IMPORTANT...THUS, BY ORDERING THE
- * WORD NUMBERS, ONE CAN ELIMINATE ANY ORDER.
- *
- CNBUB1 SA1 CHBUF+B1 DO SORT
- SB3 B1
- CNBUB2 SB3 B3+1
- GE B3,B2,CNBUB3
- SA2 CHBUF+B3
- IX3 X1-X2
- NG X3,CNBUB2
- BX6 X1 MUST CHANGE THE ENTRIES
- BX7 X2
- SA6 A2
- SA7 A1
- BX1 X2
- *
- EQ CNBUB2
- CNBUB3 SB1 B1+1
- LT B1,B2,CNBUB1
- *
- * NOW MUST CONSTRUCT THE CONCEPT WORD
- CND MX6 0
- SB1 B0
- CNDPK1 SA1 CHBUF+B1 BRING UP THE WORD NUMBER
- ZR X1,CNDPK2 SKIP EXTRA WORDS
- LX6 SYNBITS SHIFT WHATS THERE UP A BIT
- BX6 X6-X1 ADD IN THIS NUMBER
- CNDPK2 SB1 B1+1
- LT B1,B2,CNDPK1 LOOP THRU ALL NUMBERS
- *
- ZR X6,ERRORC ERROR IF NOTHING THERE
- * /--- BLOCK CONCEPT 00 000 78/08/29 17.18
- *
- LX6 12+10+1 MOVE UP OUT OF WAY OF OTHER FIELDS
- *
- MX1 60-12-10-1 CLEAR OUT BITS NEEDED FOR OTHER FIELDS THAT
- BX2 -X1*X6 MAY HAVE BEEN SET BY LONG CONCEPTS
- BX6 X1*X6
- LX2 36
- BX6 X6-X2 EXCULSIVE-OR IN...THUS, BOTTOM CLEAR
- LX6 59 MAKE SURE THE TOP BIT IS ZERO
- * FOR BINARY SEARCHES
- CNDPK3 SA2 CONBIAS GET RUN-ON COUNT OF CONCEPTS
- MX1 60-12-10
- BX3 X1*X2
- NZ X3,ERRORC TEST FOR FIELD TOO BIG
- LX2 10 MOVE INTO POSITION
- BX6 X2+X6 ADD THIS TO DATA WORD
- *
- SA0 WORK BE SURE SET TO WORK BUFFER
- SA3 COCEC GET START OF ECS BUFFER
- SA5 COCEND GET END OF BUFFER
- SX2 1
- IX5 X5+X2 ADD ONE TO END
- MX4 60-12-10 MASK FOR HASH OF CONCEPT
- BX7 X4*X6 CLEAR SEARCH WORD TO JUST HASH
- *
- * /--- BLOCK CONCEPT 00 000 77/03/03 02.47
- IX0 X5-X3 GET WORD COUNT
- *
- CCLOOP1 AX0 1 BINARY SEARCH
- ZR X0,CCDONE1
- IX0 X0+X3 MAKE ABSOLUTE
- + RE 1
- RJ ECSPRTY
- SA1 A0 BRING UP NEXT CONCEPT
- BX2 X1*X4
- IX2 X7-X2 SEE IF CONCEPT LOOKING FOR
- ZR X2,CERRSHW
- PL X2,CCPLUS1
- BX5 X0 RESET BOTTOM
- IX0 X5-X3 GET WORD COUNT
- EQ CCLOOP1
- CCPLUS1 BX3 X0 RESET TOP
- IX0 X5-X3 GET WORD COUNT
- EQ CCLOOP1
- *
- *
- CERRSHW SB1 59 DUPLICATE CONCEPT ERROR
- RJ =XRJERR
- EQ CONSYN JUST MAKE NULL CONCEPT AND GO ON
- *
- *
- CCDONE1 SA4 SAVIT GET LAST USER OPERATION
- ZR X4,COWT1
- SA3 INX GET EXTRA STORAGE LOCATION
- MX7 0
- SA7 X3+INFO CLEAR OUT USER OP WORD (ZERO IS NO OP)
- SX3 X3+1 HAVE TO ADD ONE SINCE BIAS COULD BE ZERO
- BX6 X6+X3 ADD TO CONCEPT WORD
- *
- COWT1 SA6 A0 STORE AWAY CONCEPT
- *
- SX1 1
- *
- BX0 X5 LOCATION TO START INSERT IN CONDENSE BUFFER
- *
- SA5 COCEND LAST WORD USED IN BUFFER
- IX6 X5+X1 INCREMENT BY 1 CONCEPT
- SA6 A5
- BX5 X6 AND INTO X5 FOR LATER USE IN MOVE ROUTINE
- SA1 CBUFEND GET LAST WORD OF CONDENSE BUFFER
- IX1 X6-X1
- PL X1,LNGUNIT TEST FOR BINARY TOO LONG
- *
- SX2 CWKLTH-1
- *
- COCTOP1 SA0 WORK+1 START OF SCRATCH AREA
- IX6 X5-X0 GET NUMBER OF WORDS TO MOVE DOWN
- SB2 X6 FOR COCLST1
- IX7 X2-X6
- PL X7,COCLST1 SEE IF THIS LAST MOVE NEEDED
- + RE CWKLTH-1 READ-IN ECS BUFFER
- RJ ECSPRTY
- SA0 WORK RESET TO INCLUDE EXTRA WORD
- + WE CWKLTH-1 WRITE BACK OUT SHIFTED DOWN ONE
- RJ ECSPRTY
- SA1 A0+CWKLTH-1 GET LAST WORD READ-IN
- BX6 X1
- SA6 A0 AND POSITION IT FOR NEXT TIME WRITE-OUT
- IX0 X0+X2 RE-SET CURRENT PLACE WORKING ON
- EQ COCTOP1
- *
- COCLST1 RE B2 READ IN LAST PIECE
- RJ ECSPRTY
- SA0 WORK SET TO EXTRA WORD
- SB2 B2+1 AND EXTRA COUNT
- + WE B2
- RJ ECSPRTY
- *
- * /--- BLOCK USER OPS 00 000 77/03/03 02.47
- *
- * THE FOLLOWING USER OPERATION OPTIONS DOES NOT HANDLE
- * CHARACTER INPUT TOTALLY THROUGH THE TABLE-DRIVEN
- * MACHINERY...CAN CAUSE A PROBLEM UNTIL -PUTCOMP-
- * FIXED TO USE TABLES IN -CONTENT-
- *
- SA4 WORDPT SEE IF IN USER INFO OPTION
- SA3 X4 GET LAST CHARACTER
- SA4 SAVIT GET LAST USER OP
- ZR X4,CONSYN SEE IF ANY USER OPERATIONS TO HANDLE
- SX6 1R,
- *
- ATOCOM SA3 A3+1 CHANGE ALL _ TO COMMAS
- ZR X3,UILOOP
- SX2 X3-65B CHECK FOR ASSIGNMENT ARROW
- NZ X2,ATOCOM LOOP THRU ALL REMAINING CHARS
- SA6 A3 MAKE CHANGE
- EQ ATOCOM
- *
- UILOOP SA3 INX SAVE AND INCREMENT EXTRA STORAGE LOC
- BX6 X3
- SA6 INFLOC
- SX6 X3+1
- SA6 A3
- SA2 ICX DO OVERFLOW CHECKS
- IX2 X6-X2
- PL X2,LNGUNIT
- *
- SA4 WORDPT MAKE SURE HAVE CHARACTER ADDRESS
- SX6 X4+1 INCREMENT OVER COMMA
- SA6 WORDPT
- *
- *
- CALL PUTCOMP DECODE VARIABLE
- LX1 60-XCODEL PUT GETVAR CODE AT TOP
- BX6 X1
- SA6 CGETVAR STORE FOR LATER
- SA2 LASTKEY
- SX2 X2-1R, MAKE SURE LAST CHAR A COMMA
- NZ X2,CERRPRB
- *
- SA1 WORDPT GET CHARACTER AFTER COMMA
- SA1 X1-1
- *
- *
- RJ CONTENT GET NEXT WORD CONTENTED
- *
- ZR X7,CERRPRB ERROR IF NOTHING THERE
- SA3 VOCEC GET VOCABS BUFFER
- SA0 WORK USED BY MANY ECS READS LATER
- BX5 X6 GET COPY OF CONTENT WORD
- AX5 56 GET NUMBER OF VOWELS IN THIS WORD
- SA5 VCTABLE+X5 GET PROPER VOWEL TABLE ENTRY
- SX2 X5 GET RELATIVE START OF WORDS OF THIS VOW LTH
- IX3 X3+X2 MAKE ABSOLUTE THE START OF SEARCH
- AX5 30 GET NUMBER OF WORDS OF THIS VOWEL LENGTH
- IX5 X3+X5 GET END
- SX2 1
- IX5 X2+X5 ADD ONE MORE
- * /--- BLOCK USER OPS 00 000 76/01/15 01.12
- *
- IX3 X3-X2 BACK UP THE BEGINNING
- UONFIN2 IX0 X5-X3 DO VOCABS BINARY CHOP
- AX0 2 THUS GET RID OF ONES BIT
- ZR X0,CERRPRB NO FIND WORD IN VOCABULARY
- LX0 1
- IX0 X0+X3 MAKE ABSOLUTE
- + RE 2 GET TWO WORD VOCABS ENTRY
- RJ ECSPRTY
- SA2 A0 GET FIRST WORD
- IX2 X6-X2
- NZ X2,UONON SEE IF FIRST WORDS MATCH
- SA4 A0+1 BRING UP SECOND WORD
- MX2 HASHBTS
- BX2 X2*X4 JUST LOOK AT HASH BITS
- IX2 X7-X2 SEE IF THEY MATCH
- ZR X2,UWRD
- UONON PL X2,UPLUS2
- BX5 X0
- EQ UONFIN2
- UPLUS2 BX3 X0
- EQ UONFIN2
- *
- CERRPRB SB1 61 PROBLEM IN ASSIGNING USER INFO
- RJ =XRJERR
- EQ CONSYN CONTINUE...NULL CONCEPT INVOLVED
- *
- *
- * BE SURE WORD IS IN CONCEPT
- UWRD SX7 A1 SAVE CURRENT CHARACTER ADDRESS
- SA7 WORDPT
- MX7 60-SYNBITS MASK FOR SYNONYM BITS
- BX6 -X7*X4 BASE SYNONYM NUMBER LOOKING FOR
- *
- SX2 X6-1 ILLEGAL IF WORD ONLY OCCURS IN A PHRASE
- ZR X2,CERRPRB
- *
- SB1 B0 NOW SEARCH THRU TO FIND WORD
- SA2 CONLTH
- SB2 X2 GET NUMBER OF WORDS TO SEARCH
- *
- CUFND SA2 CHBUF+B1 GET WORD
- BX2 X2-X6 SEE IF THIS IS WHAT LOOKING FOR
- ZR X2,CUFND5
- SB1 B1+1
- LT B1,B2,CUFND
- EQ CERRPRB NO FIND ... ERROR
- *
- CUFND5 LX6 10 MOVE KEY BASE SYNONYM UP
- *
- SA2 CGETVAR GET GETVAR CODE
- BX6 X6+X2 COMBINE
- *
- SA3 INFLOC GET REL LOCATION OF USER OP IN EXTRA STO
- *
- CUFND8 ZR X1,CONS1
- SX2 X1-COPCOMA MAKE SURE ANOTHER COMMA
- ZR X2,CUFND9 GO AHEAD IF COMMA
- SX2 X1-COPSP ELSE SEE IF SPACES
- NZ X2,CERRPRB ALL ELSE AN ERROR
- RJ GETOP GET NEXT OPERATION SYMBOL
- SX1 B2
- SX7 A1
- SA7 WORDPT
- EQ CUFND8 AND RE-CHECK
- *
- CUFND9 SA1 INX GET CURRENT EXTRA STORAGE ADDRESS FOR NEXT
- MX7 0
- SA7 X1+INFO CLEAR NEXT USER OP WORD...ZERO IS NULL
- SX1 X1+1 HAVE TO ADD ONE SINCE BIAS COULD BE ZERO
- BX6 X1+X6 ADD TO LAST AS LINK
- SA6 X3+INFO FINALLY STORE USER OPERATION INFO
- EQ UILOOP
- *
- CONS1 SA6 X3+INFO STORE AWAY THE LAST USER OPERATION
- *
- *
- * /--- BLOCK CONCEPT 00 000 77/03/29 21.03
- *
- *
- CONSYN SA1 NEXTCOM NOW SEE IF MORE SYNONYMOUS CONCEPTS
- SA2 COMCONT
- BX2 X1-X2
- NZ X2,CONRUN
- RJ GETLINE GET NEXT LINE
- EQ CONCPTK AND INTO PACK-UP LOOP AGAIN
- *
- CONRUN SA2 CNAME HOLDS EITHER CONCEPT OR MISCON (OR CHANGES)
- BX2 X1-X2 SEE IF RUN OF SAME COMMAND
- NZ X2,CONDN IF NOT, THEN ALL DONE
- SA1 CONBIAS ELSE, KEEP COUNT OF RUN-ONS
- SX6 X1+1
- SA6 A1
- RJ GETLINE GET NEXT LINE
- EQ CONCPTK AND INTO PACK-UP LOOP AGAIN
- *
- *
- CONDN SA2 ECSRESB GET ECS ARG BUFFER
- SA1 ECSARGS GET AMOUNT USED
- IX2 X1+X2 GET CURRENT PLACE IN BUFFER
- SA3 COCEND GET END
- IX6 X3-X2 NUMBER OF CONCEPTS FOUND -1
- SX7 1
- IX6 X6+X7
- IX7 X1+X6
- SA7 A1 UPDATE BINARY POINTER FOR OTHERS
- *
- LX6 15
- BX6 X6+X1 COMBINE WITH STARTING RELATIVE ADDRESS
- LX6 9
- SA2 JJVOCU AND VOCABULARY UNIT NUMBER
- BX6 X6+X2
- LX6 12
- SA2 CONBIAS AND MAXIMUM CONCEPT RUN-ON BIAS
- BX6 X6+X2
- LX6 12 AND MAKE SPACE FOR COMMAND CODE
- EQ PUTCODE PUT COMMAND AWAY
- *
- CONBIAS BSS 1 CURRENT COUNT OF CONCEPT COMMAND IN RUN
- CNAME BSS 1 IS STORED IN AT ENTRY WITH NAME
- * OF CURRENT COMMAND CONDENSING...
- * EITHER CONCEPT OR MISCON OR THEIR CHANGED
- * COUNTERPARTS
- *
- CONLTH BSS 1 NUMBER OF WORDS IN CONCEPT
- CCLTH EQU 20 ALLOW 20 WORDS IN CONCEPT
- CCBUF BSS CCLTH CONTENT WORD
- CHBUF BSS CCLTH HASH WORD
- *
- *
- *
- INFLOC BSS 1 USER OP WORD IN EXTRA STORAGE
- CGETVAR BSS 1 SAVES GETVAR CODE DURING USER INFO OPTION
- *
- COCEC BSS 1 STARTING ADDRESS OF CONCEPTS IN ECS
- COCEND BSS 1 ENDING ADDRESS OF CONCEPTS IN ECS
- * /--- BLOCK SPECS 00 000 77/12/08 15.17
- TITLE -SPECS-
- *
- *
- * THIS COMMAND ALTERS ANSWER HANDLING
- *
- EXT SCANNER
- *
- SPE01 SB1 SPNAMES START OF TABLE OF LEGAL NAMES
- SB2 SPEND END OF TABLE OF LEGAL NAMES
- MX5 60 FULL WORD MASK
- *
- RJ SCANNER
- NZ X0,ERRNAME
- SA6 TSPECS SET TO THESE SPECS FLAGS FOR FOLLOWING
- EQ PUTCODE
- *
- *
- * THE ORDER OF THE FOLLOWING TABLE IS VERY IMPORTANT
- *
- * WHEN SOMETHING IS CHANGED IN THIS TABLE, A
- * SIMILAR CHANGE MUST BE MADE IN -PCTEXT-
- *
- SPNAMES VFD 60/7LNOSPELL TURN OFF THE SPELLER
- VFD 60/7LNOORDER TURN OFF ORDER CHECKER
- VFD 60/7LNOCANON TURN OFF CANONICAL FORM
- VFD 60/6LNODIFF TURN OFF THE NUMERICALLY CLOSE MARKER
- VFD 60/7LOKSPELL SPELLINGS ARE OK
- VFD 60/7LOKEXTRA EXTRA WORDS ARE ACCEPTABLE
- VFD 60/8LALLWORDS TREAT ALL ENTRIES AS CHARS NOT NUMBERS
- VFD 60/6LNOMARK DO NOT DO ANY MARKUP OF THE ANSWER
- VFD 60/7LEXORDER ORDER THE KEYWORDS AND EXTRA WORDS
- VFD 60/5LCANON PRODUCE CANONICAL FORM
- VFD 60/9LBUMPSHIFT BUMP ALL SHIFT CODES
- VFD 60/6LNOOKNO DO NOT OUTPUT -OK- OR -NO-
- VFD 60/8LHOLDMARK SAVE MARKUP FOR LATER MARKUP COMMAND
- VFD 60/5LNOOPS NO ARITHMETIC OPERATIONS LEGAL
- VFD 60/6LNOVARS NO VARIABLE REFERENCES LEGAL
- VFD 60/7LOKIDENT ALGEBRAIC IDENTITY OK
- VFD 60/8LALPHXNUM WORD-NUMBER BOUNDRY ACTS AS PUNCTUATN
- VFD 60/8LOKASSIGN OK TO ASSIGN A VALUE TO A STUDENT VAR
- VFD 60/5LOKCAP OK TO HAVE FIRST LETTER CAPITALIZED
- VFD 60/5LTOLER ALLOW NUMERICAL TOLERANCE OF 1%
- *
- SPEND BSS 1 HOLE FOR WORD CURRENTLY PROCESSING
- *
- *
- * /--- BLOCK END 00 000 76/07/21 20.49
- *
- *
- ENDOV
- *
- *
- OVTABLE
- *
- *
- END ANSIN$
plato/source/plaopl/ansin.txt ยท Last modified: 2023/08/05 18:54 by Site Administrator