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 * * (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$