ANSWIN * /--- FILE TYPE = E * /--- BLOCK ANSWIN 00 000 81/07/13 01.09 *******PROBLEMS * AT LERRS...JUST GIVE ERROR MESSAGE, FORGET ABOUT * SHOWING EXACT CHARACTER... * ******* IDENT ANSWIN LCC OVERLAY(1,1) * * CST * * ANSWIN$ OVFILE * * EXT CONTENT,GETOP,GETOPN IN FILE -CONTEN- EXT COMCONT CONTINUED COMMAND WORD EXT PUTCODE EXT PUTCOMP IN LEX EXT COMPILE IN LEX EXT ERRORC EXT GETLINE EXT NXTLINE EXT UNAMX EXT ECSPRTY EXT LNGUNIT IN CONDEN EXT ERRTAGS,ERRNAME,ERRSTOR EXT ERRXYTG,ERR2MNY,ERR2FEW EXT ERRTERM,ERRUARG,ERRVTYP EXT ERROUTR,ERRCNTD,ERRXORQ EXT ERRBAL EXT NOARG EXT ARHDA= EXT VARDO * * * /--- BLOCK START 00 000 79/05/12 05.29 * * ANSWOV OVRLAY * * SA1 OVARG1 DETERMINE WHICH ENTRY POINT SB3 X1 JP B3+*+1 * + EQ LIS01 + EQ ANS01 + EQ MATCH01 + EQ * WAS -CONTAIN-,-DISCARD,-CANT- + EQ ANSC01 + EQ ORC01 + EQ OKWRD01 + EQ ANSA01 * * * * HUMAN ENTITIES IN ANSWER COMMANDS ARE CODED BY TWO 60-BIT * WORDS... * FIRST WORD... * 0...0 FOR WORD, 1 FOR LIST * 1-3...NUMBER OF VOWELS * 4-7...NUMBER OF CONSONANTS * 8-59...CONTENT BITS * SECOND WORD... * 0...UNUSED * 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-41...UNUSED IN ANSWER AT PRESENT * 42-49...UNUSED AT PRESENT * 50-59...WORD INFORMATION NUMBER * /--- BLOCK LISTIN 00 000 76/07/25 10.13 PHRASE BSS 1 PHRASE FLAG 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 * TITLE LISTIN * * * THIS ROUTINE STORES A LIST OF WORDS THAT CAN LATER BE * REFERENCED BY THE OTHER ANSWER COMMANDS. THE LIST IS STORED * AS A DUMMY UNIT. THE -ULOC- TABLE ENTRY HAS... * BIT 1 = 1 IF SOMETHING WENT WRONG AND LIST BAD * ELSE TOP 18 BITS = RELATIVE ADDRESS OF START OF LIST * NEXT 12 BITS = LENGTH OF LIST ( 2 WORDS PER ENTRY) * * * LIS01 MX3 0 CLEAR SPECIAL TERMINATOR FOR AUNAM SA1 PRETAG SET UP INPUT CHARACTER ADDRESS (-1) RJ AUNAM GO PUT LIST NAME IN UNAME TABLE * SA2 X6+ULOC NOW SEE THAT ULOC INDICATES FIRST TIME SEE PL X2,ERRORC TOP BIT SET MEANS NOT SEEN BEFORE SA6 WKWD STORE NUMBER TEMPORARILY * MX7 0 SA7 WORK ZERO WORD COUNT SA7 PHRASE ZERO PHRASE FLAG ZR X1,LGET2Z SEE IF AT END OF LINE * LGET RJ CONTENT CONTENT THE WORDS * NZ X7,LGETA SEE IF ANYTHING THERE SA4 PHRASE ERROR IF BUILDING PHRASE ZR X4,LGET2 EQ ERRORC * LGETA MX5 0 SX3 X1-COPASTR SET UP PHRASE CONTINUE TEST SA4 PHRASE LOAD PHRASE FLAG NZ X4,LGET0 SEE IF ALREADY STARTED PHRASE * NZ X3,LGET1 NOT IN PHRASE, NOT STARTING ONE SA5 PSTART STARTING PHRASE MX4 1 SET -PHRASE- FLAG EQ LGET1 * LGET0 NZ X3,LGET00 IN PHRASE, SEE IF PHRASE CONTINUES SA5 PMIDDLE IN MIDDLE OF PHRASE EQ LGET1 * LGET00 SA5 PEND AT END OF PHRASE MX4 0 CLEAR PHRASE FLAG * LGET1 BX7 X7+X5 PUT IN ANY PHRASE BITS SA2 WORK GET CURRENT WORD COUNT SX3 X2-WORKLTH+2 DO OVERFLOW TEST PL X3,ERR2MNY * /--- BLOCK LISTIN 00 000 77/04/04 16.21 * SA6 X2+WORK+1 STORE FIRST PART SA7 A6+1 STORE SECOND PART SX6 X2+2 INCREMENT SA6 A2 AND PUT BACK IN -WORK- BX6 X4 SA6 A4 MAINTAIN -PHRASE- FLAG * LGET2 ZR X1,LGET2Z SEE IF END OF LINE SX2 X1-COPPER PERIOD SEPARATES LETTER-LIKES FROM PUNCS NG X2,LGET ANYTHING LESS OK TO CONTINUE EQ LERRS ALL ELSE AN ERROR * LGET2Z SA1 NEXTCOM SEE IF NEXT LINE A CONTINUATION SA2 COMCONT BX1 X1-X2 NZ X1,LGET3 NON-ZERO MEANS FINISH UP RJ GETLINE ELSE GET NEXT LINE SA1 PRETAG INITIALIZE CHAR POINTER FOR CONTENT EQ LGET AND BACK TO CONTENT LOOP * LGET3 SA2 WORK GET LOC AND LENGTH OF LIST TO OUTPUT ZR X2,ERRNAME SEE IF SOMETHING THERE MX7 60-ULOC4 MAKE SURE IT WILL FIT IN FIELD BX7 X7*X2 NZ X7,ERRNAME SA1 CONDPNT GET CURRENT READ-IN ECS POINTER BX0 X1 INTO X0 IX7 X1+X2 ADD LENGTH TO START TO GET END SA4 CONBUFF ADDRESS OF START OF CONDENSE BUFFER SA3 CBLTH LENGTH OF BUFFER IX3 X4+X3 GET END OF BUFFER IX3 X7-X3 PL X3,ERR2MNY SEE IF TOO BIG SA7 A1 UPDATE NEXT AVAILABLE PLACE TO CONDENSOR SB7 X2 SA0 WORK+1 CM STARTING ADDRESS OF LIST + WE B7 WRITE OUT RJ ECSPRTY * IX6 X1-X4 BIAS TO UNIT LX6 ULOC2+ULOC3+ULOC4 BX6 X6+X2 AND PUT IN TOTAL LENGTH LX6 60-ULOC1-ULOC2-ULOC3-ULOC4 SA1 WKWD GET LOCATION OF LIST IN ULOC TABLE SA6 X1+ULOC SET ENTRY INTO ULOC TABLE EQ NXTLINE * /--- BLOCK LISTIN 00 000 76/07/31 18.26 * LERRS SX6 A1 GIVE NON-FATAL ERROR MESSAGE FOR SA6 WORDPT BAD PUNCTUATION AT THIS TIME * * EVENTUALLY FORGET ABOUT SHOWING EXACT CHARACTER... * JUST MAKE SURE POINTER IS ON IT...AND APPROPRIATE * MESSAGE IS GIVEN... BX6 X1 LX6 54 SA6 SHOWOUT SX6 1 SA6 NCHAR * SB1 907 SB2 B0 SX1 B0 SA2 NCHAR SB3 SHOWOUT SB4 1 RJ =XRJERRB LNORM SA1 WORDPT RESTORE A1 SA1 X1 EQ LGET CONTINUE * * * /--- BLOCK ANSEY 00 000 76/10/12 17.24 TITLE ANSWER COMMAND * * THIS ROUTINE IS USED TO READ-IN -ANSWER- AND -WRONG- * COMMANDS. THE COMMAND WORD STARTS WITH A 6 BIT FIELD SET * ZERO IF SINGLE ANSWER OR 1 IF SYNONYMOUS ANSWER * THEN 18 BIT RELATIVE BIAS FROM START OF ECS RESIDENT * EXTRA STORAGE FOR THIS UNIT, THEN 12 BITS LENGTH. * THEN 12 BITS HIGHEST KEYWORD NUMBER, REST OF WORD HAS * COMMAND NUMBER. * IF A SYNONYMOUS SET OF ANSWERS...THEN THE TOP 4-BIT FIELD * IS SET...THE RELATIVE LOCATION + LENGTH THEN POINTS * TO THE NEXT INFO WORD IN THE BINARY...AD INFINITUM. * THE WORD ENTRIES REFER EITHER TO THE WORDS * DIRECTLY (TOP BIT = 0) IN WHICH CASE TWO 60-BIT WORDS ARE * USED...OR...TO A LIST CONTAINING THE WORDS (TOP BIT = 1) IN * WHICH CASE ONLY ONE 60-BIT WORD IS USED TO POINT TO THE LIST. * THIS POINTER WORD THEN HAS ... BIT 1 = 1, BITS 2-30 = UNIT NUM * IN EITHER CASE, THE BOTTOM 10 BITS CONTAIN 0=IGNORE WORD OR * N=COUNT OF KEYWORD (A RUN OF THE SAME N MEANS SYNONYMS) * PHRASES ARE POSSIBLE IN WHICH CASE THE START, MIDDLE, * AND END PHRASE BITS MAY BE SET. * * * /--- BLOCK ANSEY 00 000 76/07/25 10.14 * * ANS01 SA1 PRETAG SET TO START OF CHARACTER STRING MX7 0 SA7 ANTYPE SET TO ANSWER RJ ANSXXX EQ PUTCODE * * * * THE FOLLOWING IS USED BY THE ANSWER COMMAND (ANS01) * AND ANSWERC COMMAND (ANSC01), BOTH IN THIS OVERLAY * * A1 AND X1 ARE CHANGED ONLY BY CONTENT, AUNAM, AND GETOP WITHIN * THIS ROUTINE. * ANSXXX EQ * MX7 0 SA7 SAFLAG NO SYNONYMOUS ANSWER YET * ATOP MX7 0 CLEAR WORD COUNTER SA7 WORK SA7 PHRASE NOT IN PHRASE SA7 ASFND NOT FOUND SYNONYMOUS ANSWER MARK SX6 1 INITIALIZE WORD TYPE TO KEYWORD COUNT SA6 KEYWDS SA6 WDTYPE SA6 ATYPE 0=IGNORE, +=KWD, -=SYN.KWD * ALOOP RJ CONTENT GET ANY WORD NZ X7,ALOOPA SEE IF ANYTHING THERE SA4 PHRASE ERROR IF BUILDING PHRASE ZR X4,ACK SB1 63 INCOMPLETE PHRASE EQ =XERR * ALOOPA MX5 0 SX3 X1-COPASTR SET UP PHRASE CONTINUE TEST SA4 PHRASE LOAD PHRASE FLAG NZ X4,ALOO0 SEE IF ALREADY STARTED PHRASE * NZ X3,ALOOP1 NOT IN PHRASE, NOT STARTING ONE SA5 PSTART STARTING PHRASE MX4 1 SET -PHRASE- FLAG EQ ALOOP1 * ALOO0 NZ X3,ALOO00 IN PHRASE, SEE IF PHRASE CONTINUES SA5 PMIDDLE IN MIDDLE OF PHRASE EQ ALOOP1 * ALOO00 SA5 PEND AT END OF PHRASE MX4 0 CLEAR PHRASE FLAG * ALOOP1 BX7 X7+X5 ADD ANY PHRASE BITS SA5 WDTYPE GET WORD TYPE BX7 X5+X7 PUT INTO WORD INFORMATION FIELD * SA2 WORK CHECK FOR OVERFLOW SX3 X2-WORKLTH+2 PL X3,ERR2MNY SA6 X2+WORK+1 SEND WORD OUT SA7 A6+1 SX6 X2+2 INCREMENT WORD COUNT SA6 A2 BX6 X4 MAINTAIN PHRASE FLAG SA6 A4 * /--- BLOCK ANSEY 00 000 75/12/11 11.40 * SA5 ATYPE GET WHERE IN ANSWER COMMAND ZR X5,ACK IF PROCESSING IGNORE WORDS NG X5,ACK IF PROCESSING SYNONYMS NZ X4,ACK SEE IF DOING PHRASE SA2 KEYWDS INCREMENT NUMBER OF KEYWORDS SX6 X2+1 SA6 A2 SA6 WDTYPE * ACK ZR X1,ADONE SEE IF END OF LINE SX2 X1-COPCOMA ANYTHING LESS IS LETTER/NUMBER NG X2,ALOOP * SA4 PHRASE PHRASES SHOULD NOT BE HERE NZ X4,ERRORC SA2 ATYPE GET WHERE IN ANSWER COMMAND ZR X2,IGN BRANCH OFF TO IGNORE WORDS NG X2,SYNK SYNONYMOUS KEYWORDS * SX3 X1-COPCOMA SEE IF SYNONYMOUS ANSWER FOLLOWS ZR X3,ADONES SX3 X1-COPSEMI SEE IF ANSWERC DELIMITER ZR X3,ANDONC * SX3 X1-COPLPRN SEE IF START OF SYNONYMS NZ X3,OTH ELSE SEE IF OTHER THINGS MX6 -1 SA6 ATYPE SET TO SYN KEYWORDS EQ ALOOP * SYNK SX3 X1-COPCOMA SEE IF COMMA ZR X3,ALOOP COMMA OK IN SYN KEYWORDS SX3 X1-COPRPRN SEE IF DONE WITH SYN KEYWORDS NZ X3,SYNKK SA3 KEYWDS INCREMENT KEYWORD COUNT SX6 X3+1 SA6 A3 SA6 ATYPE SA6 WDTYPE EQ ALOOP SYNKK SX3 X1-COPLPRN SEE IF KEYWORD LIST ((LIST)) NZ X3,ERRORC ALL ELSE ERROR SX3 COPRPRN SET UNAM END TEST EQ ALISTIN * OTH SX3 X1-COPLTH SEE IF < NZ X3,ERRORC ALL ELSE ERRORS MX6 0 SA6 WDTYPE SET WORDTYPE TO IGNORE SA6 ATYPE EQ ALOOP * IGN SX3 X1-COPGTH SEE IF > NZ X3,IGN1 SA4 KEYWDS SET BACK TO KEYWORDS BX6 X4 SA6 WDTYPE SA6 ATYPE EQ ALOOP * /--- BLOCK ANSEY 00 000 76/07/25 10.16 * IGN1 SX3 X1-COPCOMA SEE IF COMMA ZR X3,ALOOP COMMA OK IN EXTRA WORDS SX3 X1-COPLTH SEE IF EXTRA LIST <> NZ X3,ERRORC ALL ELSE ERROR SX3 COPGTH SET UNAM END TEST * ALISTIN BX7 X3 SAVE X3 FOR POSSIBLE SECOND USE SA7 WKWD RJ AUNAM ADD TO UNAM TABLE (X3 HOLDS TERMINATOR) * LX6 30 UNIT NUMBER MX7 1 SET TO LIST WORD BX6 X6+X7 SA2 WDTYPE ADD WORD TYPE BX6 X6+X2 SA2 WORK GET CURRENT WORD COUNT SX3 X2-WORKLTH+1 DO OVERFLOW TEST PL X3,ERR2MNY SA6 X2+WORK+1 STORE AWAY LIST REFERENCE SX6 X2+1 INCREMENT SA6 A2 AND PUT BACK IN -WORK- * SA3 WKWD PRE-SET X3 SX4 X1-COPCOMA CHECK FOR COMMA ((LISTX,LISTY)) ZR X4,ALISTIN GO RIGHT ON TO NEXT LIST * BX4 X1-X3 SEE THAT NEXT CHARACTER EITHER > OR ) ZR X4,ALOOP EQ ERRTERM * ADONE SA1 NEXTCOM SEE IF NEXT READ-IN LINE A CONTINUATION SA2 COMCONT BX1 X1-X2 NZ X1,ADONE1 RJ GETLINE GET NEXT CONTINUATION LINE SA1 PRETAG SET ADDRESS OF INPUT STRING FOR CONTENT EQ ALOOP BACK TO MAIN WORD INPUT LOOP * ANDONC SA5 ANTYPE MAKE SURE JUST ANSWERC ZR X5,ERRORC MX7 1 SA7 ANCEND MARK END BY SEMICOLON EQ ADONE1 * /--- BLOCK ANSEY 00 000 77/03/29 21.04 * ADONES SX6 1 SET FLAG FOR SYN ANSWER FOLLOWS SA6 ASFND * ADONE1 SA2 ATYPE MUST NOT BE IN IGNORE, SYN, OR PHRASE ZR X2,ERRORC NG X2,ERRORC SA2 PHRASE NZ X2,ERRORC * SA2 WORK GET LOC AND LENGTH OF LIST TO OUTPUT MX7 48 MAKE SURE WILL FIT IN 12 BITS BX7 X7*X2 NZ X7,ERRORC * SA3 ECSARGS GET NUMBER OF ECS ARGS ALREADY IX7 X3+X2 ADD IN MORE SX4 X7-ECSRESL+1 SEE THAT BUFFER DOES NOT OVERFLOW * THE +1 IS FOR -ASYNC- FOLLOWING PL X4,LNGUNIT SA7 A3 UPDATE NEW NUMBER OF ECS ARGS SA5 ECSRESB GET START OF ECS BUFFER IX0 X5+X3 GET PLACE TO ADD MORE ARGS SB7 X2 SA0 WORK+1 CM STARTING ADDRESS OF LIST + WE B7 WRITE OUT RJ ECSPRTY * LX3 12 GET REL LOC OF ECS ARGS IN PLACE BX6 X3+X2 PUT TOGETHER WITH LENGTH LX6 12 SA5 KEYWDS PUT IN NUMBER OF KEYWORDS SX5 X5-1 BX6 X5+X6 LX6 12 * SA5 ASFND SEE IF SYNONYMOUS ANSWER FOLLOWING NZ X5,ASYNA SA5 SAFLAG SEE IF A PREVIOUS SYNONYMOUS ANSWER ZR X5,ANSXXX EXIT TO CALLING ROUTINE SA6 A0 IF PREVIOUS, MUST PUT OUT COMMAND INFO SA2 SAHOLE IN HOLE LEFT IN ECS BX0 X2 + WE 1 RJ ECSPRTY BX6 X5 AND GET FIRST ANSWER INFO EQ ANSXXX TO ADD COMMAND CODE AND STORE * ASYNA LX5 54 SET SYNONYMOUS ANSWER BIT BX6 X6+X5 SA5 SAFLAG SYNONYMOUS ANSWER, SEE IF THIS FIRST NZ X5,ASYNB SA6 A5 STORE AWAY FIRST FOR FINAL EXIT EQ ASYNC * ASYNB SA6 A0 NOW PUT INFO FOR THIS ANSWER INTO SA2 SAHOLE ECS HOLE PREVIOUSLY MADE BX0 X2 + WE 1 RJ ECSPRTY * ASYNC SA2 ECSARGS OPEN UP HOLE IN ECS SX7 X2+1 OVERFLOW TEST DONE ALREADY SA7 A2 SA3 ECSRESB AND SAVE ADDRESS OF ECS HOLE IX7 X2+X3 SA7 SAHOLE EQ ATOP AND ONTO NEXT SYNONYMOUS ANSWER * * /--- BLOCK ANSEY 00 000 75/10/16 22.39 * * WDTYPE BSS 1 CURRENT WORD TYPE KEYWDS BSS 1 NUMBER OF KEYWORDS ATYPE BSS 1 0=IGNORE, 1=KEYWORD, -1=SYN KEYWORD WKWD BSS 1 SAFLAG BSS 1 HOLDS FIRST OF SYN ANSWERS AS FLAG SAHOLE BSS 1 ECS ADDRESS OF HOLE FOR CURRENT SYN ANSWER ASFND BSS 1 FLAG THAT SYNONYMOUS ANSWER FOLLOWS ANTYPE BSS 1 0=ANSWER, -1=ANSWERC * * /--- BLOCK MATCH 00 000 78/06/13 13.53 * TITLE MATCH * THIS ROUTINE IS USED TO READ-IN -MATCH- COMMANDS. * CURRENTLY IT IS SIMILAR TO ANSWER READ-IN. * COMMAND WORD HAS TOP XCODEL BITS WITH GETVAR CODE * THEN 18 BITS ADDRESS RELATIVE TO START OF ECS RESIDENT * EXTRA STORAGE FOR THIS UNIT * THEN 12 BITS LENGTH OF ENTRIES * * MATCH01 CALL PUTCOMP DECODE VARIABLE LX1 60-XCODEL POSITION -GETVAR- CODE AT TOP BX6 X1 SA6 MAFLAG STORE AWAY FOR NOW * MX7 0 CLEAR WORD COUNTER SA7 WORK SA7 PHRASE NOT IN PHRASE SX6 1 INITIALIZE WORD TYPE TO KEYWORD COUNT SA6 KEYWDS +=KEYWORD, -=SYNONYMOUS KEYWORDS SA6 WDTYPE SET TO FIRST MATCH ENTRY * SA2 LASTKEY ZR X2,MDONE SEE IF AT END OF LINE ALREADY SA1 WORDPT X1 = ADDRESS OF CHARACTER AFTER SEPARATOR SA1 X1-1 SET ADDRESS OF INPUT STRING FOR CONTENT BX6 X1 SA6 PREPUNC INITIALIZE PREVIOUS STOPER * /--- BLOCK MATCH 00 000 78/06/13 13.52 * * MLOOP RJ CONTENT GET ANY WORD NZ X7,MLOOPA SEE IF ANYTHING THERE SA4 PHRASE ERROR IF BUILDING PHRASE NZ X4,ERRORC SA2 PREPUNC WHAT WAS PREVIOUS STOPER SX2 X2-COPCOMA NZ X2,MCK SEE IF WAS A COMMA SX2 X1-COPCOMA THEN SEE IF THIS ANOTHER COMMA ZR X2,MCK0 IF SO, MAYBE ADVANCE KEYWORD EQ MCK COUNT * MLOOPA MX5 0 SX3 X1-COPASTR SET UP PHRASE CONTINUE TEST SA4 PHRASE LOAD PHRASE FLAG NZ X4,MLOO1 SEE IF ALREADY STARTED PHRASE * NZ X3,MLOOP1 NOT IN PHRASE, NOT STARTING ONE SA5 PSTART STARTING PHRASE MX4 1 SET -PHRASE- FLAG EQ MLOOP1 * MLOO1 NZ X3,MLOO2 IN PHRASE, SEE IF PHRASE CONTINUES SA5 PMIDDLE IN MIDDLE OF PHRASE EQ MLOOP1 * MLOO2 SA5 PEND AT END OF PHRASE MX4 0 CLEAR PHRASE FLAG * MLOOP1 BX7 X7+X5 ADD ANY PHRASE BITS SA5 WDTYPE GET WORD TYPE BX7 X5+X7 PUT INTO WORD INFORMATION FIELD * SA2 WORK CHECK FOR OVERFLOW SX3 X2-WORKLTH+2 PL X3,ERR2MNY SA6 X2+WORK+1 SEND WORD OUT SA7 A6+1 SX6 X2+2 INCREMENT WORD COUNT SA6 A2 BX6 X4 MAINTAIN PHRASE FLAG SA6 A4 * NZ X4,MCK SEE IF DOING PHRASE MCK0 SA5 KEYWDS SEE IF SINGLE WORD OR SYNONYMS NG X5,MCK IF PROCESSING SYNONYMS SA2 KEYWDS INCREMENT NUMBER OF KEYWORDS SX6 X2+1 SA6 A2 SA6 WDTYPE * /--- BLOCK MATCH 00 000 78/06/13 13.43 * MCK ZR X1,MDONE SEE IF END OF LINE * BX6 X1 SAVE THIS ENDING PUNCTUATION SA6 PREPUNC FOR LATER TESTING * SX2 X1-COPCOMA ANYTHING LESS IS LETTER/NUMBER NG X2,MLOOP * SA4 PHRASE PHRASES SHOULD NOT BE HERE NZ X4,ERRORC * ZR X2,MLOOP ALLOW COMMA * SA2 KEYWDS SEE IF SINGLE OR SYNONYMS NG X2,MSYNK SYNONYMOUS KEYWORDS * SX3 X1-COPLPRN SEE IF START OF SYNONYMS NZ X3,ERRORC ALL ELSE ERROR BX6 -X2 MAKE NEGATIVE SA6 A2 RESTORE IN KEYWDS EQ MLOOP * MSYNK SX3 X1-COPRPRN SEE IF DONE WITH SYN KEYWORDS NZ X3,MSYNKK SA3 KEYWDS INCREMENT KEYWORD COUNT BX6 -X2 MAKE POSITIVE AGAIN SX6 X6+1 INCREMENT COUNT SA6 A2 RESTORE IN KEYWDS SA6 WDTYPE EQ MLOOP MSYNKK SX3 X1-COPLPRN SEE IF KEYWORD LIST ((LIST)) NZ X3,ERRORC ALL ELSE ERROR * /--- BLOCK MATCH 00 000 78/06/13 13.44 MLISTIN SX3 COPRPRN SET UNAM END TEST RJ AUNAM ADD TO UNAM TABLE (X3 HOLDS TERMINATOR) * * LX6 30 UNIT NUMBER MX7 1 SET TO LIST WORD BX6 X6+X7 SA2 WDTYPE ADD WORD TYPE BX6 X6+X2 SA2 WORK GET CURRENT WORD COUNT SX3 X2-WORKLTH+1 DO OVERFLOW TEST PL X3,ERR2MNY SA6 X2+WORK+1 STORE AWAY LIST REFERENCE SX6 X2+1 INCREMENT SA6 A2 AND PUT BACK IN -WORK- * SX3 X1-COPCOMA CHECK FOR COMMA ((LISTX,LISTY)) ZR X3,MLISTIN GO ON TO NEXT LIST * SX3 X1-COPRPRN MAKE SURE END CHARACTER WAS ) ZR X3,MLOOP EQ ERRTERM * MDONE SA1 NEXTCOM SEE IF NEXT READ-IN LINE A CONTINUATION SA2 COMCONT BX1 X1-X2 NZ X1,MDONE1 * SX6 COPCOMA END OF LINE ALWAYS LIKE COMMA SA6 PREPUNC * RJ GETLINE GET NEXT CONTINUATION LINE SA1 PRETAG SET ADDRESS OF INPUT STRING FOR CONTENT EQ MLOOP BACK TO MAIN WORD INPUT LOOP * /--- BLOCK MATCH 00 000 78/06/13 13.40 * MDONE1 SA2 KEYWDS MUST NOT BE IN SYNONYMS NG X2,ERRORC SA2 PHRASE NZ X2,ERRORC * SA2 WORK GET LOC AND LENGTH OF LIST TO OUTPUT ZR X2,ERRNAME MUST BE SOMETHING THERE MX7 48 MAKE SURE WILL FIT IN 12 BITS BX7 X7*X2 NZ X7,ERRORC * SA3 ECSARGS GET NUMBER OF ECS ARGS ALREADY IX7 X3+X2 ADD THESE ADDITIONAL ONES SX4 X7-ECSRESL SEE THAT NO BUFFER OVERFLOW PL X4,LNGUNIT SA7 A3 UPDATE NUMBER OF ECS ARGS SA4 ECSRESB GET ADDRESS OF ECS BUFFER IX0 X4+X3 GET LOCATION TO ADD NEW STUFF SB7 X2 SA0 WORK+1 CM BUFFER + WE B7 WRITE OUT RJ ECSPRTY * LX3 12 GET REL LOC OF ECS ARGS IN PLACE BX6 X3+X2 PUT TOGETHER WITH LENGTH LX6 60-XCODEL-18-12 SA3 MAFLAG BX6 X3+X6 ADD GETVAR CODE EQ PUTCODE EXIT TO ADD COMMAND CODE AND STORE * MAFLAG BSS 1 HOLDS GETVAR CODE PREPUNC BSS 1 HOLDS PREVIOUS PUNCTUATION * /--- BLOCK ANSWERC 00 000 78/08/18 12.09 TITLE ANSWERC * * READ-IN ANSWERC COMMAND * PRODUCE A COMMAND WORD THAT CONTAINS * 1. A GETVAR CODE * 2. A RELATIVE POINTER TO TABLE OF ANS COMMANDS IN EXTRA STO * 3. THE NUMBER OF ANSWER COMMANDS IN TABLE * * THE ANSWER COMMANDS ARE CODED EXACTLY AS EXPLAINED AT ANS01 * THE NULL CASE (;;) IS CODED BY A COMPLETELY ZERO ANS COMMAND * * ANSC01 MX7 1 SET FLAG TO ANSWERC SA7 ANTYPE CALL COMPILE GET CONDITION INTO COMPILED CODE LX1 60-XCODEL BX6 X1 SA6 MAFLAG SAVE GETVAR CODE FOR LATER SA1 WORDPT SA1 X1-1 SET UP ADDRESS FOR CONTENT * SA2 INX SAVE STARTING EXTRA STORAGE BX6 X2 SA6 INXST * SX2 X1-1R; SEMICOLON OK HERE ZR X2,ANSC02 * SX2 X1-1R, OR UNIVERSAL DELIMITER ^, NZ X2,ERRTERM WHICH IS ACCESS-COMMA SX2 A1 SA2 X2-1 SX2 X2-ACCESS NZ X2,ERRTERM NOTHING ELSE ALLOWED * * /--- BLOCK ANSWERC 00 000 78/08/18 12.12 * ANSC02 MX7 0 WILL COME BACK ZERO WHEN TOTALLY DONE SA7 ANCEND * RJ GETOPN GET NEXT OP...LOOK FOR NULL CASE (;;) SX2 B3-COPSEMI NZ X2,ANSC03 IF NOT, ONTO NEXT ANSWER RJ GETOP ADVANCE OVER ; MX6 1 NEGATIVE COMMAND IS NULL CASE SA6 ANCEND ALSO SET FLAG TO INDICATE NOT DONE EQ ANSC04 AND STORE ZERO FOR THIS CASE * ANSC03 RJ ANSXXX COMPILE THE NEXT ANSWER COMMAND * ANSC04 SA4 INX GET CURRENT EXTRA STORAGE LOC SX7 X4+1 INCREMENT SA2 ICX IX2 X7-X2 TEST FOR BUFFER OVERFLOW PL X2,LNGUNIT SA7 A4 UPDATE INX * SA6 INFO+X4 STORE AWAY ANSWER COMMAND INFO * SA4 ANCEND SEE IF ALL DONE NZ X4,ANSC02 * ANSC05 SA1 MAFLAG GET GETVAR CODE SA2 INXST GET STARTING RELATIVE POINTER TO TABLE SA3 INX GET ENDING POINTER IX3 X3-X2 CALCULATE LENGTH LX2 24 LX3 12 BX6 X1+X2 PACK UP ALL THE GOODIES INTO COMMAND WORD BX6 X6+X3 * * * EQ PUTCODE NOW STORE AWAY COMMAND * * ANCEND BSS 1 0 IF ALL DONE INXST BSS 1 START OF EXTRA STORAGE AREA * /--- BLOCK UNAM 00 000 79/03/21 02.49 TITLE AUNAM * * INPUT... * A1 HOLDS ADDRESS OF INPUT CHARACTER STRING (-1) * X3 HOLDS SPECIAL ENDING CHARACTER...) OR > * * OUTPUT... * A1 HOLDS ADDRESS OF LAST CHARACTER USED * X1 HOLDS LAST OPERATION CODE * X6 HOLDS UNIT NUMBER ASSIGNED * AUNAM EQ * MAKE UP NAME FOR USE IN UNAM TABLE * ONLY NAME STARTING WITH A SPACE * X3 SET TO SPECIAL ENDING MARK SB1 42 ONLY ALLOW 7 CHARS, WILL PUT SPACE AT START 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 SX0 B2 IX0 X0-X3 TEST FOR SPECIAL END MARK 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 * SX0 1R PUT A SPACE AT START OF THIS WORD LX0 42 BX6 X6+X0 ONLY UNAM ENTRY STARTING WITH SPACE * SX7 B2 SAVE LAST OPERATION CODE LX7 30 SX2 A1 SAVE LAST CHARACTER ADDRESS BX7 X2+X7 SA7 SAVIT SX7 A1 AND SAVE ADDRESS FOR ERROR EXIT IN UNAMX SA7 WORDPT * * NAME STARTS WITH SPACE 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 EQ AUNAM * SAVIT BSS 1 * * /--- BLOCK OR 00 000 82/07/13 17.16 TITLE -OR- * -OR- (CODE=135) * * THE COMMAND IS LEGAL ONLY WHEN FOLLOWED BY * AN ANSWER TYPE COMMAND. * * THIS COMMAND DOES NO CHECKS TO SEE IF THE PREVIOUS * COMMAND IS ALSO A JUDGING COMMAND, WHICH IS THE * COMMON USAGE. 'THIS ALLOWS THE SEQUENCE OF A * JUDGING COMMAND FOLLOWED BY REGULAR COMMANDS * FOLLOWED BY AN -OR- FOLLOWED BY A JUDGING COMMAND * AND MORE REGULAR COMMANDS. 'IF THE SECOND JUDGING * COMMAND IS MATCHED, ONLY THE REGULAR COMMANDS * FOLLOWING IT ARE EXECUTED, WHILE IF THE FIRST * ONE IS MATCHED, BOTH SETS OF REGULAR COMMANDS * ARE EXECUTED. * ORC01 SA1 NEXTCOM WHAT IS THE NEXT COMMAND BX7 X1 SA7 ORSTOP PUT IT AT THE END OF THE LIST SA2 ORLIST-1 READY TO SCAN LIST SB1 1 * ORSCAN SA2 A2+B1 READ NEXT ITEM OF LIST BX2 X2-X1 COMPARE WITH NEXT COMMAND NZ X2,ORSCAN * SX2 A2-ORSTOP SEE IF HIT END OF LIST NZ X2,NOARG JUMP IF OK EQ ERRNAME FLAG ANY ERROR * * LIST OF ANSWER TYPE COMMANDS * ORLIST VFD 60/8LANSWER VFD 60/8LANSWERC VFD 60/8LWRONG VFD 60/8LWRONGC VFD 60/8LCONCEPT VFD 60/8LMISCON VFD 60/8LMATCH VFD 60/8LANSV VFD 60/8LWRONGV VFD 60/8LOK VFD 60/8LNO VFD 60/8LIGNORE VFD 60/8LEXACT VFD 60/8LEXACTC VFD 60/8LEXACTV VFD 60/8LANSU VFD 60/8LWRONGU VFD 60/8LTOUCH VFD 60/8LTOUCHW VFD 60/8LNTOUCH VFD 60/8LNTOUCHW VFD 60/8LANSWERA VFD 60/8LWRONGA ORSTOP BSSZ 1 * /--- BLOCK OKWORD 00 000 81/07/08 03.04 * * * -OKWORD- (CODE=223) * -NOWORD- (CODE=224) * -ARHEADA- * * UP TO 9 CHARACTERS SPECIFYING WORD TO WRITE * FOR -OK- (-NO-) JUDGMENTS. * * UP TO 5 CHARACTERS SPECIFYING WORD TO WRITE * FOR -ARHEADA- * OKWRD01 SA1 TAGCNT NUMBER OF CHARS SB3 X1 SAVE FOR END TEST MX6 0 PRE-SET FOR NO CHAR CASE ZR X1,OKWRDC2 JUMP IF NO CHARS SX2 X1-10 PL X2,ERRNAME --- ERROR EXIT IF OVER 9 CHARS SB2 0 SA1 COMNUM SX3 ARHDA= IX1 X1-X3 CHECK FOR SPECIAL ARHEADA CASE NZ X1,OKWORD0 IF NOT ARHEADA SX1 B3-6 PL X1,ERRNAME --- ERROR EXIT IF OVER 5 CHARS EQ OKWRDC1 OKWORD0 SA1 TAG CHECK FOR RIGHT MARGIN OPS LX1 6 SA2 TAG+1 BX1 X1+X2 SX1 X1-KUP*100B-1R0 SX6 1R START WITH SPACE CODE NZ X1,OKWRDC1 IF NORMAL OKWORD SX1 KUP*100B+1R1 CHANGE TO LEFT LX1 6 BX6 X1+X6 SB2 2 AND SKIP IN TAG FIELD OKWRDC1 SA1 TAG+B2 LX6 6 BX6 X6+X1 SB2 B2+1 LT B2,B3,OKWRDC1 OKWRDC2 SA2 INX SA6 INFO+X2 STORE WORD IN EXTRA STORAGE SX7 X2+1 INCREMENT EXTRA STORAGE POINTER SA7 A2 BX6 X2 LX6 XCMNDL POSITION POINTER EQ PUTCODE --- EXIT TO ADD COMMAND CODE AND STORE TITLE -ANSWERA-/-WRONGA- EJECT * * -ANSWERA-/-WRONGA- COMMAND CONDENSE. * * COMMAND FORMAT'; * 20/ADDRESS IN ECS ARGS OF INFORMATION WORD * 28/0 * 12/COMMAND NUMBER * * ECS ARGUMENTS INFORMATION WORD'; * 20/BIAS INTO ECS ARGS OF ANSWERA BUFFER * 20/GETVAR CODE FOR STORED STRING * 20/GETVAR CODE FOR NUMBER OF CHARACTERS TO READ * * USES A1,A3,A5,A7 * X1,X3,X4,X5,X6,X7 * * CALLS VARDO * TEMPARG BSS 1 BRIEFLY HOLDS ECS ARGUMENT ARGADD BSS 1 SAVES ECS ARGUMENT OFFSET * ANSA01 BSS 0 SA3 ECSARGS GET CURRENT NUMBER OF ECS ARGS BX7 X3 CURRENT NUMBER SA7 ARGADD SAVE FOR LATER * /--- BLOCK OKWORD 00 000 81/07/08 03.04 SX7 X7+1 ADD 1 FOR COMMAND EXTRA WORD SX4 X7-ECSRESL-1 CHECK FOR BUFFER OVERFLOW PL X4,LNGUNIT UNIT TOO LONG SA7 ECSARGS STORE NEW NUMBER OF ARGUMENTS SA4 ANSABUF SEE IF ALLOCATED PL X4,ANSAVAR X4 = BUFFER ARGUMENT BASE ADDR SA7 A4 STORE OFFSET INTO ECS ARGS SX3 MAXLONG BUFFER MAX LENGTH IX7 X7+X3 ADD TO CURRENT NUMBER OF ARGS SX3 X7-ECSRESL-1 CHECK FOR BUFFER OVERFLOW PL X3,LNGUNIT UNIT TOO LONG SA7 ECSARGS STORE NEW NUMBER OF ARGUMENTS ANSAVAR RJ VARDO COMMA SEPARATED VARIABLES SA1 VARBUF+1 PICK UP FIRST GETVAR CODE NG X1,ERRSTOR MUST BE STOREABLE MX0 61-XCODEL+XFBIT MASK OUT I/F BIT BX1 -X0*X1 X1 = FIRST ARG GETVAR CODE SA3 VARBUF GET NUMBER OF ARGUMENTS SX3 X3-1 CHECK NUMBER OF ARGS SX2 10 GETVAR CODE FOR 10 CHARACTERS ZR X3,ANSAPUT BRANCH IF ONLY ONE ARGUMENT SX3 X3-1 CHECK FOR TOO MANY ARGS NZ X3,ERR2MNY SA2 VARBUF+2 X2 = SECOND ARG GETVAR CODE MX0 -XCODEL MASK TO *XCODEL* BITS BX2 -X0*X2 TO GET RID OF POSSIBLE LITERAL FLAG ANSAPUT SA4 ANSABUF ECS ARG BUFFER BASE ADDRESS LX4 2*XCODEL ECS BUFFER LOCATION LX1 XCODEL STRING GETVAR CODE BX6 X4+X1 FORM PARTIAL ECS ARG BX6 X6+X2 ADD ^$ CHARS CODE, COMPLETE ARG SA6 TEMPARG STORE TEMPORARILY SA3 ECSRESB ECS RESIDENT ARGS ADDRESS SA5 ARGADD ECS WORD OFFSET IX0 X3+X5 FORM INFO WORD ECS ADDRESS SA0 A6 TEMPORARY WORD ADDRESS LX5 2*XCODEL MOVE ECS ARG ADDRESS BX6 X5 FORM PARTIAL COMMAND WORD + WE 1 WRITE ECS ARGUMENT RJ ECSPRTY SA0 WORK WORK BUFFER SA1 AZERBUF ECS ZERO BUFFER SX0 X1 ADDRESS + RE MAXLONG FOR FUTURE CLEAR ECS BUFFER RJ ECSPRTY SA0 WORK ZEROED WORK BUFFER SA4 ANSABUF START OF ECS BUFFER * /--- BLOCK OKWORD 00 000 81/07/08 03.04 IX0 X3+X4 + WE MAXLONG CLEAR ECS BUFFER RJ ECSPRTY EQ PUTCODE FINISH COMMAND WORD * * * /--- BLOCK END 00 000 79/05/12 05.28 * * * ENDOV * * OVTABLE * * END ANSWIN$