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$