Trailing-Edge
-
PDP-10 Archives
-
decuslib10-03
-
43,50270/spell.lst
There are no other files named spell.lst in the archive.
TOPS-10 VERSION
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
;SPELL.MAC[510,51] Installed at NBS by MDA 790112
; Previous TENEX mods made compatable with 6.03 monitor.
; Changes made in TOPS-10 version only:
; Default dictionary changed to WORDS.DIC because extension LST
; has special meaning pertaining to line printer.
; Default dictionary is automatically read in at beginning;
; option given to dump it at end.
; Code placed in sharable high segment.
; Option to rename input file with extension BAK and output file
; to take name of input file on completion (like TECO).
;<RICHARDSON>NSPELL.MAC;7002 29-OCT-76 13:05:57 Edit by RICHARDSON
; added SOS code (indicated by [SOS]) at RDDATA, WRCORR.
;<RICHARDSON>NSPELL.MAC;7001 28-OCT-76 19:20:00 Edit by RICHARDSON
; minor Tops20 changes:
; eliminate all PBOUTs of EOL (use PSOUT of CRLF)
; if non-0 Tops20, assemble searching MONSYM
;<SPELL>NSPELL.MAC;70 22-OCT-75 09:40:28 EDIT BY WOLF
; MINOR CHANGE TO STATS TYPEOUT FORMAT
;<SPELL>NSPELL.MAC;69 21-OCT-75 13:48:32 EDIT BY WOLF
; CHANGED OPNFIL TO DO THE DVCHR BEFORE THE OPENF, RATHER THAN
; AFTERWARDS; THIS WAY, LPT: LOOKS NON-PMAPPABLE, AS WE NEED.
; CHANGED HELMSG TO OUTPUT "C" OR "S" LINE ONLY IF THE NUMBER OF
; CANDIDATE WORDS IS APPROPRIATE.
;<SPELL>NSPELL.MAC;67 17-JUL-75 09:28:23 EDIT BY WOLF
;<SPELL>NSPELL.MAC;66 10-JUL-75 16:39:33 EDIT BY WOLF
; FIXED A SMALL GLITCH IN THE ENDTST DOCUMENTATION.
;<SPELL>NSPELL.MAC;65 9-JUL-75 12:44:37 EDIT BY WOLF
; MOVED A ">" IN MACRO DEFINITION OF PRE() TO ELIMINATE "Q"
; WARNINGS IN LATEST VERSION OF MACRO.
;<SPELL>NSPELL.MAC;64 16-JUN-75 09:51:10 EDIT BY WOLF
; ADDED ENDTST DOCUMENTATION
;<SPELL>NSPELL.MAC;63 10-JUN-75 12:34:13 EDIT BY WOLF
;<SPELL>NSPELL.MAC;61 5-JUN-75 22:59:48 EDIT BY WOLF
; MOVED QUESTIONS ABOUT SWITCHES (UPPERCASE DIR, PICKUP PAGE/LINE,
; TRAINING DIR) FROM RDDATA TO RSWIT, SO THAT THEY GET ASKED AFTER
; THE SWITCHES ARE SPECIFIED, NOT AT SOME ODD TIME AFTER SPELL
; STARTS "WORKING".
; FIXED TENEX FILCLO: USED TO BE THAT IF AN OUTPUT FILE HAD
; NOTHING IN IT, A FULL PAGE OF ZEROS GOT WRITTEN.
; FIXED UP THE LOOPING IN TRYFIX SO THE WORD IN QUESTION
; GETS RETYPED ALONG WITH THE NUMBER OF GUESSES.
;<SPELL>NSPELL.MAC;52 22-MAY-75 17:50:00 EDIT BY WOLF
; FIXED LENGTH TO PUT OUT ITS DATA IN 6-SPACE COLUMNS, RATHER THAN
; WITH TABS, SO IT FITS A 72-COLUMN PAGE.
;<SPELL>NSPELL.MAC;43 10-MAY-75 14:06:38 EDIT BY WOLF
; MODIFIED LDWORD SO THAT IT NO LONGER ACCEPTS APOSTROPHE
; IF IT IS WORD-INITIAL OR -FINAL.
; ADDED COUNTERS TO KEEP TRACK OF THE NUMBER OF WORDS AND MISSPELLINGS
; IN EACH DICTIONARY. ADDED COUNTERS TO COUNT
; WORDS ACCEPTED, CORRECTED, INSERTED, MATCHED VIA AFFIX-STRIPPING,
; MATCHED EXACTLY. ADDED "N" (FOR "NUMBERS") AT END TO GIVE A
; TYPEOUT OF ALL THESE STATISTICS, PLUS RUNTIMES.
; ADDED TO TRAINING/QTRAINING THE ABILITY TO SPECIFY A DICTIONARY
; TO BE USED FOR THE TRAINING SET. WHEN DONE THE FILE, TELLS YOU
; HOW MANY WORDS IT ADDED TO THAT DICTIONARY.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-1
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
;<SPELL>NSPELL.MAC;37 6-MAY-75 22:05:32 EDIT BY WOLF
; BECAUSE SEARCH AND RDICTW USE SKIP RETURNS TO SIGNIFY
; MISSPELLINGS, NO NEED FOR MOST USES OF THE MISSPL BIT IN FL.
; IT IS STILL USED, HOWEVER, IN INSERM.
; AUGMENTED LOADEX TO BE A LITTLE MORE COMPLETE IN CHECKING
; CONSISTENCY OF WORDS INPUT FROM A DICTIONARY FILE.
;<SPELL>NSPELL.MAC;32 3-MAY-75 20:16:07 EDIT BY WOLF
; REARRANGED TRYRCM SO THAT IT HANDLES THE CASE WHERE THE TYPED
; REPLACEMENT CORRESPONDS TO A KNOWN MISSPELLING. ALSO, THE
; REPLACEMENT GETS TYPED INTO WORDIX, WHENCE IT GETS COPIED
; INTO THE OUTPUT AND INTO THE EXCEPTION FILE.
; IN TENEX VERSION OF GETFIL, NOW REQUIRES CONFIRMATION ON INPUT
; FILES AS WELL AS OUTPUT FILES.
; BYPASSES DOMISS IN TRAINING MODES.
;<SPELL>NSPELL.MAC;30 1-MAY-75 20:59:20 EDIT BY WOLF
; MISC. BUG FIXES.
;<SPELL>NSPELL.MAC;28 24-APR-75 09:20:27 EDIT BY WOLF
; FIXED BUG IN RECONS, CHANGED PREFIX STACK PTR FROM L TO N.
; ALSO CHANGED HELMSG FOR "L" COMMAND.
;<SPELL>NSPELL.MAC;24 20-APR-75 22:24:37 EDIT BY WOLF
; ADDED A ROUTINE RECONS, AND MADE CHANGES TO ENDTST AND PREFIX
; SO THAT IF THEY RECOGNIZE A "STEM" AS A MISSPELLING,
; THEY CAN CALL RECONS TO RECONSTRUCT THE WORD FROM THE AFFIXES
; (SAVED ON THEIR RESPECTIVE STACKS) AND THE MISSPELLING CORRECTION.
; THIS ALSO AFFORDS AN OPPORTUNITY FOR ENDTST TO PROPOSE
; CORRECTION OF CERTAIN SPECIFIC ERRORS IT CHECKS FOR (SUCH AS
; MISSING DOUBLED CONSONANT, PROPER PLURAL ENDING, ETC.)
; THE RECONSTRUCTED WORD IS PUT ON THE CANDBF LIST.
;<SPELL>NSPELL.MAC;17 16-APR-75 20:57:05 EDIT BY WOLF
; FIXED BUG IN SEARCH: IF THE WORD BEING SEARCHED FOR CONTAINED
; EXACTLY 14 (21, 28, ...) CHARACTERS, THEN THE 11+ CHARS LIST
; GETS SEARCHED. IF IT MATCHES THE 1ST 14 CHARS OF A 14+
; CHAR WORD, HAS NO WAY OF KNOWING THERE'S MORE. NOW CHECKS
; TO INSURE THAT 1ST CHAR OF NEXT MACHINE WORD IS 0.
;<SPELL>NSPELL.MAC;16 15-APR-75 22:54:16 EDIT BY WOLF
; 1. ADDED "-BLE" -> "-BLY" ("ABLY", "POSSIBLY") CASE TO ENDTST.
; 2. ADDED A STEM-VALIDITY TEST TO ENDTST AND PREFIX: STEM MUST HAVE
; AT LEAST 3 LETTERS, AND IF EXACTLY 3, MUST HAVE AT LEAST 1 VOWEL
; OR Y.
; 3. FIXED UP SUFFIX DERIVATION PRINTOUT FOR THE CASE OF ZAPPED LETTERS
; 4. CHANGED THE DICTIONARY-NUMBER HANDLING OF MISSPELLING-CORRECTIONS
; GENERATED BY "R" AND "C" COMMANDS. THEY ALWAYS GET CREATED
; (IF POSSIBLE), AND GET PUT IN DICT. #0 UNLESS A DICT# IS TYPED
; IN THE "R" OR "C" COMMAND ITSELF.
; 5. THE ROUTINE SETNUM IS CHANGED TO SETNM0 OR SETNM1, WHICH
; DEFAULT IDNUM TO 0 OR 1 RESPECTIVELY.
;<SPELL>NSPELL.MAC;15 13-APR-75 23:24:43 EDIT BY WOLF
; FIXED FILE OPENING IN TENEX VERSION OF LENGTH.
;<SPELL>NSPELL.MAC;14 13-APR-75 22:30:10 EDIT BY WOLF
; CHANGED SEARCH ROUTINE SO THAT SKIP RETURNS DISTINGUISH BETWEEN
; NOT FOUND, MISSPELLING FOUND, REAL SPELLING FOUND. MATCH
; ROUTINE WORKS SAME WAY TOO, OF COURSE.
; CHANGED DICTIONARY READING ROUTINE SO THAT SKIP RETURNS DISTINGUISH
; BETWEEN EOF, WORD IS MISSPELLING, WORD IS SPELLING.
;<SPELL>NSPELL.MAC;13 9-APR-75 11:22:04 EDIT BY WOLF
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-2
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
; CHANGED SUFFIX-STACK POINTER FROM K TO M, SINCE K IS USED IN
; TENEX I/O. ALSO CLEANED UP SOME BUGS IN MODIFIED PREFIX.
; ALSO ADDED A JSYS ERROR STRING PRINTER FOR OPENING TENEX
; FILE ERRORS.
;<SPELL>NSPELL.MAC;6 7-APR-75 21:54:05 EDIT BY WOLF
; 1. MADE MANY CHANGES TO THE DETAILS OF ENDTST, MOSTLY TO TIGHTEN
; IT UP. ALSO MODIFIED ZLAST AND SETLST TO SAVE ON A STACK THE
; LETTERS STRIPPED OFF THE WORD, SO THAT THE WORD COULD BE
; BUILT UP AGAIN.
; 2. IN EXCEPTION FILE, WORDS WHICH MATCHED VIA AFFIX-STRIPPING GET
; THEIR DERIVATIONS PRINTED OUT.
; 3. SMARTENED UP THE OVERFLOW CHECKS ON LIBUF AND LOBUF. OVERFLOW
; SHOULD NOW CAUSE A GRACEFUL FAILURE.
; 4. MISSPELLINGS ARE NO LONGER MARKED AS DICT. #31. INSTEAD, A BIT
; IN THE FLAGS WORD (MISSPL) IS SET.
; 5. REMOVED THE "TYPE S,A,R,..." TYPEOUT EACH TIME. INSTEAD, IT
; TYPES THE NUMBER OF GUESSES (CANDIDATE CORRECTIONS) IT HAS
; FIGURED OUT. IF 1, STILL SAYS "I GUESS ..." AS BEFORE.
; 6. FIXED A BUG IN THE TENEX FILE-CLOSING ROUTINE.
; 7. CHANGED PREFIX TO TRY STRIPPING ANOTHER PREFIX, IF STRIPPING ONE
; DOESN'T MAKE A MATCH ("UNRECONSTRUCTED"). ALSO A PREFIX STACK.
; 8. DICTIONARY DUMPS ALWAYS DUMP MISSPELLINGS.
;<SPELL>NSPELL.MAC;1 24-MAR-75 22:58:28 EDIT BY WOLF
; THIS IS THE VERSION OF SPELL[S,REG] FTP'D FROM SU-AI ON 3/18/75,
; CONTAINING FIXES TO THE 3 BUGS I TOLD GORIN I FOUND IN THE TENEX
; CODE OF HIS NEW PROGRAM. HE HAD ALSO MADE SOME CHANGES TO LDWORD.
COMMENT VALID 00045 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00005 00002 TITLE SPELL I HAVE YOU UNDER MY SPELL
C00007 00003 SUBTTL DEFINITIONS
C00016 00004 SUBTTL Documentation
C00060 00005 SUBTTL INITIALIZATION - OUTER LOOP
C00000 00000 SUBTTL SETBAK INPUT FILE TO BECOME .BAK ON EXIT
C00068 00006 SUBTTL RSWIT READ MODE SWITCHES FROM USER TERMINAL
C00071 00007 SUBTTL THE LOOP WHERE ALL THE WORK GETS DONE.
C00075 00008 SUBTTL GETLIN READ A LINE OF DATA INTO LIBUF
C00079 00009 SUBTTL CHKLIN CHECK EACH WORD FROM THE LINE
C00085 00010 SUBTTL PUTLIN WRITE LINE TO CORRECTION FILE. CONVRT,CONVRZ,PPAGE
C00090 00011 SUBTTL LDWORD LOAD WORD FROM INPUT LINE
C00099 00012 SUBTTL RDDATA THE READING ROUTINE
C00104 00013 SUBTTL DESCRIPTION OF ENDTST
C00116 00014 SUBTTL ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
C00128 00015 SUBTTL ROUTINES USED BY ENDTST
C00131 00016 SUBTTL PREFIX - TRY TO REMOVE PREFIXES
C00135 00017 SUBTTL CHANNEL INITIALIZATION - DEC AND STANFORD
C00139 00018 SUBTTL CHANNEL INITIALIZATION - TENEX
C00148 00019 SUBTTL DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
C00160 00020 SUBTTL DICTIONARY MANIPULATION - LOADER - LOAD A DICTIONARY FILE.
C00166 00021 SUBTTL DICTIONARY MANIPULATION - RDDICT - READ DICTIONARY FILE
C00168 00022 SUBTTL DICTIONARY MANIPULATION - RDICTW - READ A DICTIONARY WORD
C00171 00023 SUBTTL GETFIL SCAN TERMINAL FOR A FILE NAME.
C00180 00024 SUBTTL ERROR MESSAGES
C00184 00025 SUBTTL HASHCP THE HASH COMPUTATION.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-3
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
C00187 00026 SUBTTL SEARCH LOOK IN DICTIONARY FOR A WORD.
C00190 00027 SUBTTL INSERT
C00194 00028 SUBTTL CORE ROUTINES
C00195 00029 SUBTTL TRYFIX OUR HUMBLE ATTEMPT TO CORRECT THE WORD.
C00204 00030 SUBTTL REPLACE AND SELECT COMMANDS
C00214 00031 SUBTTL STANFORD DISPLAY ROUTINES
C00221 00032 SUBTTL STANFORD DISPLAY ROUTINES
C00225 00033 SUBTTL STANFORD DISPLAY ROUTINES
C00232 00034 SUBTTL THE HELP MESSAGE
C00234 00035 SUBTTL REPCHK, SETNUM
C00236 00036 SUBTTL X1SRCH TRY TO CORRECT ONE MISSPELLED LETTER
C00240 00037 SUBTTL X1EXL MAYBE HE TYPED ONE EXTRA LETTER
C00242 00038 SUBTTL XTRNP ONE PAIR TRANSPOSITION
C00244 00039 SUBTTL ONE LETTER MISSING
C00247 00040 SUBTTL SAVEME WRITE OUT CORE IMAGE USING SWAP UUO.
C00250 00041 SUBTTL TENEX UUO HANDLER
C00256 00042 SUBTTL LENGTH COUNT THE LENGTH OF THE HASH CHAINS.
C00260 00043 SUBTTL THE DEBUG QUEUE
C00262 00044 SUBTTL DTRACE,DTRACY TRACE DUMP ROUTINE
C00264 00045 SUBTTL SOME OF THE STORAGE STUFF
C00269 ENDMK
C;
TITLE SPELL I HAVE YOU UNDER MY SPELL
; SPELLING CHECK & CORRECTION.
; R. E. Gorin 20 February, 1971
; Revised July 23, 1972 III displays
; TENEX version 1/12/74 Wiiliam W. Plummer, mod REG 11/19/74
; Additional features, October 1974, Jerry Wolf, mod REG 11/23/74
COMMENT $
Acknowledgements:
The work reported here was supported in part by the Advanced
Research Projects Agency of the Department of Defense under contract
SD-183, and in part by the National Science Foundation, which
supported the author as a Fellow.
Report Problems with this program to:
Ralph E. Gorin
Artificial Intelligence Laboratory
Stanford University
Stanford, California 94305
$
SUBTTL DEFINITIONS
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-4
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
000001 IFDEF FOR,<MACRO__0;>MACRO==1 ;SELECT ASSEMBLER. MACRO OR FAIL
COMMENT/ ASSEMBLY SWITCHES.
DISCLAIMER: COUNTS AND XCNT ARE INTENDED FOR GATHERING
INFORMATION THAT IS NOT OF INTEREST TO THE CASUAL USER.
USERS ARE INFORMED THAT THOSE FEATURES ARE NOT SUPPORTED
IN ANY FASHION. THE DRD SWITCH IS ALSO UNSUPPORTED.
STANSW GIVES SIXBIT PPN AND STANFORD SWAP UUO
TENEX GIVES TENEX VERSION.
COUNTS GIVES THE EXECUTION COUNTS AND DEBUGGING TRACE OF THE
LAST 100 AREAS EXECUTED. (not recommended - reg)
XCNT ADDS CODE TO WRITE A FILE CONTAINING THE HASH CHAIN LENGTHS
DRD DEPARTMENT OF REDUNDANCY DEPARTMENT - ADDS CODE TO BOUNDS-CHECK
CERTAIN IDPB INSTRUCTIONS.
IF STANSW IS 0 THEN IF SANSW IS 1 YOU GET DECIMAL PPN, ELSE OCTAL PPN
/
;SWITCH SETTINGS:
;ON THE BASIS OF WHAT ASSEMBLER YOU USE, YOU GET DIFFERENT VERSIONS
;IFDEF JSYS,<TENEX==1> ; NBS is not TENEX. MDA 790112
IFDEF SPCWAR,<STANSW==1>
IFNDEF STANSW,<STANSW==0>
IFNDEF TENEX,<TENEX==0>
IFNDEF TOPS20,<TOPS20==0> ; assume using non-Dec system for assembly
IFNDEF SANSW,<SANSW==0>
IFNDEF COUNTS,<COUNTS==0> ;THIS IS HIGHLY NON-RECOMMENDED REG.
000001 XCNT=1
IFNDEF XCNT,<XCNT==0> ;SPECIAL COUNT CODE - LENGTH OF CHAINS
IFNDEF DRD,<DRD==0> ;BOUNDS CHECK ON IDPB INSTRUCTIONS
IFN SANSW,<SANSW==1> ;NORMALIZE
000010 IFE STANSW,<PPNMUL==10+SANSW+SANSW>
IFN STANSW,< PRINTX STANFORD VERSION >
IFN TENEX,< PRINTX TENEX VERSION >
IFE TENEX!STANSW,< PRINTX TOPS-10 VERSION >
;AC DEFINITIONS:
000000 FL=0
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-5
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
000001 A=1
000002 B=2
000003 C=3
000004 D=4
000005 W=5
000006 X=6 ;X MUST FOLLOW W
000007 Y=7
000010 Z=10
000011 K=11
000012 L=12
000013 M=13
000014 N=14
IFN COUNTS,< DEBA=15
DEBX=16 >
000017 P=17
000012 LF==12
000014 FF==14
000015 CR==15
000033 ESC==33
IFN TENEX,<EOL==15> ;[Tops20] TENEX EOL CONCEPT FLUSHED FOR TOPS20
;DEFINE SYMBOLS FOR 5BIT CHARACTERS A5, B5, ...
DEFINE DEF5(CH)
<IRPC CH,<CH'5=="CH"&37>>
DEF5 ABCDEFGHIJKLMNOPQRSTUVWXYZ^IRPC
000033 APOS==Z5+1 ;5BIT CODE FOR APOSTROPHE
EXTERN .JBFF,.JBSA,.JBREL,.JBHRL
;DEFINE I-O CHANNELS:
000014 DICT==14 ;FOR DICTIONARY READIN AND DICTIONARY DUMPS
000015 DATA==15 ;FOR FILE TO CORRECT
000016 CORR==16 ;CORRECTED FILE.
000017 EXCP==17 ;EXCEPTIONS
IFE TENEX,<
;COMMON DEC CALLIS
047000 000000 OPDEF RESET [CALLI 0]
047000 000012 OPDEF EXIT [CALLI 12]
047000 000011 OPDEF CORE [CALLI 11]
047000 000101 IFE STANSW,< OPDEF DEVSIZ [CALLI 101] >
;STANFORD-DEC TTY CALLS
051000 000000 OPDEF TTCALL [51B8]
051000 000000 OPDEF INCHRW [TTCALL 0,]
051040 000000 OPDEF OUTCHR [TTCALL 1,]
051100 000000 OPDEF INCHRS [TTCALL 2,]
051140 000000 OPDEF OUTSTR [TTCALL 3,]
051200 000000 OPDEF INCHWL [TTCALL 4,]
051300 000000 OPDEF GETLCH [TTCALL 6,]
051440 000000 OPDEF CLRBFI [TTCALL 11,]
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-6
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
>;END IFE TENEX
IFN TENEX,<
PURGE RESET
IFE TOPS20,<
SEARCH STENEX
>
IFN TOPS20,< SEARCH MONSYM> ;the Tops20 symbols
DICTPG==600 ;PMAP DICTIONARY FILE HERE
DATAPG==601
EXCPPG==602
CORRPG==603
OPDEF ENTER [1B8]
OPDEF LOOKUP [2B8]
OPDEF CLOSE [3B8]
OPDEF RELEAS [4B8]
OPDEF INCHRW [5B8]
OPDEF OUTCHR [6B8]
OPDEF INCHRS [7B8]
OPDEF OUTSTR [10B8]
OPDEF INCHWL [11B8]
OPDEF GETLCH [12B8]
OPDEF CLRBFI [13B8]
OPDEF EXIT [HALTF]
DEFINE HALT(ADR) <
%ADR==ADR
HALTF
IFB <ADR>,< JRST .-1>
IFNB <ADR>,< JRST %ADR>>
>;IFN TENEX
; RIGHT HALF FLAGS
000001 FRSTOP==1 ;FIRST I/O OPERATION ON DATA CHANNEL
000002 TECO==2 ;FOUND A TECO FILE ON DATA CHANNEL
000004 LEFT==4 ;HASH ON LEFT, NOT ON RIGHT
000010 ERRLIN==10 ;THERE IS AN ERROR IN THIS LINE
000040 MISSPL==40 ;LAST DICTIONARY SEARCH FOUND A MISSPELLED WORD
;ALSO, IN LH FLAGS WORD, THIS ENTRY IS
; A MISSPELLING
000100 NOCORR==100 ;CHECK ONLY, NO CORRECT
000200 NOEXCP==200 ;DON'T WRITE EXCEPTION FILE
000400 IDUMP==400 ;DO INCREMENTAL DUMP, OR INCREMENTAL INSERT
001000 SUFWIN==1000 ;SUFFIX REMOVAL WON
002000 PREWIN==2000 ;PREFIX REMOVAL WON
004000 NOTRAC==4000 ;DON'T ADD TO TRACE WHILE DUMPING TRACE
010000 NOSUFF==10000 ;DON'T PERFORM SUFFIX REMOVAL
020000 NOPREF==20000 ;DON'T PERFORM PREFIX REMOVAL
040000 PICKUP==40000 ;ALLOW A PICKUP IN THE MIDDLE OF FILE
100000 SHUTUP==100000 ;NO CORRECTIONS, BUT WRITE EXECPTIONS
200000 TRAIN==200000 ;T MODES. ADD ALL EXCEPTIONS TO DICTIONARY (TRDNUM).
400000 QTRAIN==400000 ;TRAIN AND MARK CLOSE WORDS IN EXCEPTION FILE
;LEFT HALF FLAGS
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-7
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
000001 UPPER==1 ;INPUT WORD IS ALL UPPER CASE
000002 MIXED==2 ;FIRST LETTER UPPER CASE, REST LOWER
000004 LOWER==4 ;ALL LETTERS LOWER CASE
000010 ODD==10 ;ODD CASE E.G., McCarthy
IFN STANSW,<
IIIINI==20 ;DISPLAY HAS BEEN INITIALIZED
DDDSW==40 ;WE'RE REALLY ON A STANFORD DATA DISC
IIISW==100 ;WE ARE ON A STANFORD III
>
000200 ADDBIT==200 ;SUFSTK: THIS LETTER WAS ADDED TO WORD
000400 ZAPBIT==400 ;SUFSTK: THIS LETTER ZAPPED OFF THE WORD
DEFINE BCHECK (BYP,BOUND)<
IFG DRD,<
PUSH P,A
MOVEI A,@BYP ;GET ADDRESS OF BYTE.
CAILE A,BOUND
PUSHJ P,INTCFN
POP P,A
>>
DEFINE ICOUNT<
IFG COUNTS,<
%QXX==%QXX+1
AOS ICTAB+%QXX
MOVEI DEBA,%QXX
PUSHJ P,DEBQUE
>>
IFG COUNTS,< %QXX==-1
LALL>
IFN STANSW,< ;COMPILE FOR STANFORD FEATURES
OPDEF SWAP [CALLI 400004] ;STANFORD SWAP UUO.
OPDEF BUFLEN [CALLI 400042] ;GET BUFFER SIZE.
OPDEF DPYCLR [701B8] ;CLEAR DISPLAY
OPDEF PPIOT [702B8] ;
OPDEF DPYPOS [PPIOT 2,] ;SET Y POSITION OF PAGE PRINTER
OPDEF DPYSIZ [PPIOT 3,] ;SET SIZE OF PAGE PRINTER.
OPDEF UPGIOT [703B8]
OPDEF PTYUUO [711B8]
OPDEF PTLOAD [PTYUUO 15,]
VBRT==4000 ;LVW BRIGHTNESS FIELD
VSIZ==1000 ;LVW SIZE FIELD
VABS==100 ;LVW ABSOLUTE FIELD
VENDP==20 ;LVW ENDPOINT FIELD
VINVIS==40 ;LVW INVISIBLE FIELD
DEFINE LVW(X,Y,TYPE,MODE,BRT,SIZ)<
IFIDN <MODE><A>,<MD==1;>MD==0
IFIDN <TYPE><I>,<TT==2;>TT==0
IFIDN <BRT><>,<BQ==0;>BQ==BRT
IFIDN <SIZ><>,<SQ==0;>SQ==SIZ
BYTE(11)<X>,<Y>(3)BQ,SQ(2)MD,TT(4)6
>
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-8
SPELL MAC 17-JAN-79 22:25 DEFINITIONS
COMMENT/
A LONG VECTOR WORD (LVW) FOR THE III DISPLAY HAS THE FOLLOWING FORMAT
BITS 0-10 X COORDINATE
BITS 11-21 Y COORDINATE
BITS 22-24 BRT BRIGHTNESS. 0=NO CHANGE, 1-7 INCREASING BRIGHTNESS
BITS 25-27 SIZ SIZE. 0=NO CHANGE, 1-7 INCREASING SIZE
BIT 29 M MODE. 0=RELATIVE TO LAST, 1=ABSOLUTE FROM CENTER
BITS 30-31 T TYPE. 0=VISIBLE, 1=ENDPOINT, 2=INVISIBLE
BITS 32-35 6. DENOTES LVW IN DISPLAY PROCESSOR
/
;COMMAND WORD FOR THE DATA DISC (DD) DISPLAYS
DEFINE CW(C1,D1,C2,D2,C3,D3)<BYTE(8)D1,D2,D3(3)C1,C2,C3,4>
>;IFN STANSW
000137 LOC 137
000137 400701 000007 400701000007 ;mda 790112
000000' RELOC 0
400000' IFE TENEX,< TWOSEG ;MDA 790112
400000' RELOC 400000 > ;TOPS-10 REENTRANCY
SUBTTL Documentation
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-9
SPELL MAC 17-JAN-79 22:25 Documentation
COMMENT %
The text of this comment is intended to provide most of the external
documentation for this program. Since this program operates slightly
differently under TENEX, some of the documentation has been labeled
TENEX or TOPS-10 as appropriate.
Ralph E. Gorin
Artificial Intelligence Laboratory
Computer Science Department
Stanford University
Stanford, California 94305
4 March 1971
11 March 1974 revision
Tenex Mods: March-October 1974
William Plummer, Jerry Wolf
14 December 1974 revision
---------------------------------------------------------------------
SPELL: Spelling Check and Correction Program
1.0 INTRODUCTION
SPELL is a program designed to read text files and check them for
correctness of spelling. In addition to the spelling check, the
program provides a means for correcting words that it thinks are
misspelled. This program was written by Ralph E. Gorin of Stanford
University Artificial Intelligence Laboratory. It has been augmented
by William Plummer and Jerry Wolf of BBN and Marshall Abrams of NBS.
In its normal mode of usage, SPELL reads through an input text file,
asks the user about each word it does not recognize, and creates an
output file in which corrections have been made. Provisions exist
for:
1. Loading, incrementally augmenting, and dumping special
dictionaries. Such dictionary files are ordinary text files
which may be listed and edited. Arbitrarily many
dictionaries may be loaded, subject only to availability of
(virtual) main memory.
2. Training modes where SPELL scans an input file and makes a
list of all words it does not recognize. Such a list can be
used as an auxiliary dictionary.
3. Termination of spelling checking part way through a file and
a way of picking up where you left off in a later session.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-10
SPELL MAC 17-JAN-79 22:25 Documentation
Other features of the program are:
4. SPELL will read either SOS, TECO or E/TV files. The
corrected output will be written in the same mode, except
E/TV directories must be deleted. Dictionary files may be
SOS, TECO or E/TV format.
5. An exception file may also produced. This file contains all
words SPELL did not recognize (and their contexts), all
corrections, plus all words which SPELL recognized by
stripping off prefixes and/or suffixes. This last class of
words appears marked with "[" or "]" to denote prefix- or
suffix- removal. E.g., FOOING] [PREFOOED] The
affix-stripping algorithms are not foolproof (e.g., CHOSES]
), so this gives a quick way to scan for the exceptions which
may slip through.
6. SPELL keeps track of all word spellings which were corrected
by the user. Subsequent occurrences of such are
automatically corrected by the program. This is reported to
the user by a typeout of "MISSPELLING ==> CORRECTION".
7. When a word is corrected, the output file will be rewritten
with either upper case, lower case, or mixed (first letter
upper, the remainder in lower), depending on the cases of the
first two letters in the original word. Note: this will be
incorrect in some cases (e.g., McCarthy).
2.0 USING SPELL
2.1 Starting SPELL
Type the command R SPELL (under TENEX, type "SPELL" to the EXEC). All
typeins to SPELL must be terminated by carriage return. (In the TENEX
version, editing by ^A, ^Q, and ^R may be done.) (TOPS-10 accepts ^U,
DEL, and, depending on MONGEN parameters, BS.)
2.2 Augmenting The Built-in Dictionary
The non-TENEX version will first attempt to load the default private
dictionary file WORDS.DIC into dictionary 1 with incremental insertion
set (see Incremental Insertion below).
Next, SPELL will ask: "Do you want to augment the dictionary?" If you
wish to use only the main dictionary (plus WORDS.DIC) presently in
memory, type <cr>. You can then skip the next paragraph.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-11
SPELL MAC 17-JAN-79 22:25 Documentation
2.2.1 Private Auxiliary Dictionary - If in fact you have an
additional auxiliary dictionary (of specific terms, infrequently used
words, etc.) you wish to use, type "Y" <cr>. You will then be asked
for the name of the dictionary file.
2.2.1.1 Incremental Insertions - After typing the file name you will
be given the option of marking the new entries as incremental
insertions. If the new entries are marked as incremental then they
will be included in an incremental dump of the dictionary. To have
the new entries marked as incremental, type "I" <cr>; otherwise, type
<cr>. (If any of the words in your auxiliary dictionary are already
in the main dictionary then no second copy of the word will be made.
Hence, if your words are marked as incremental then in a subsequent
incremental dump, any words that were already in the dictionary will
not be dumped.)
2.2.1.2 Additional Dictionaries - After loading an auxiliary
dictionary the program will type the new total number of words in the
dictionary (and, except under TENEX, the amount of core used). You
will then have an opportunity to save the new core image (normally you
won't do this). You will again be asked, "Do you want to augment the
dictionary?", thus allowing you to enter a number of auxiliary
dictionaries (limited only by the availability of {virtual} core).
2.2.1.3 Dictionary Format - The format of the file is one dictionary
entry (word) on a line; words must be composed of alphabetic
characters or apostrophe and less than 40 letters long. The
dictionary entries need not be in alphabetical order. A
misspelling-correction pair may occur one line in the form
"MISSPELLING>CORRECTION".
2.3 Switches
You will then be given an opportunity to specify zero or more switch
options. The meanings of the switches are:
T Training mode. SPELL will treat the input file as a
training set rather than a file to be corrected. All words
in the file which are unfamiliar to SPELL will be entered in
the dictionary as incremental insertions. After SPELL
finishes reading the file, the user has an opportunity to
dump all the words that were inserted in this manner. The
resulting list of words may be edited, and any words which
are incorrect may be deleted. Then this file can be used as
an auxiliary dictionary while correcting the original source
file.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-12
SPELL MAC 17-JAN-79 22:25 Documentation
This feature is provided for the purpose of easing the
problem of creating a specialized dictionary of jargon and
infrequently used words.
Q Q-Training mode. In this mode, all words in the source file
that are unfamiliar to SPELL will be added to the
dictionary; the difference is, if any "new" word is "close
to" some old word, the new word will be output to the
exception file. The exception file will contain only such
words. In this way, the spelling checker calls to your
attention the fact that these words may be misspelled.
N No suffix removal. This switch suppresses the attempt to
remove suffixes to recognize a correctly spelled root word.
SPELL will then find many more questionable words, but it
will work more correctly than the heuristic affix removal.
A No prefix removal. This switch suppresses the attempt to
remove prefixes to recognize a correctly spelled root word.
U Accept Upper case mode. In this mode, all words that are
written entirely in upper case will be inserted in the
dictionary. This is useful when a manuscript file contains
jargon terms that are written in upper case, and
text-processor (e.g., PUB, TJ6, or RUNOFF) commands in upper
case. Before reading the input file, SPELL will ask for a
dictionary number to use for all words inserted this way
(see "How to Use Multiple Dictionaries").
P Pickup mode. After specifying input and output file names,
you will be asked to specify a page and line number for
pickup. The effect is to suspend spelling checking until
the page and line specified. When a user has a partially
corrected file, this mode will enable him to skip over the
portion of the file that has already been corrected. The
input file will be copied without checking to the output
until the page and line specified, at which point spelling
checking begins.
2.4 File To Be Corrected
Next you will be asked for the name of the file that you want to check
for spelling errors. File names are specified in the usual format of
"name.ext[prj,prg]" where name is the filename, ext is the file
extension, and [prj,prg] is the name of the file owner, which may be
omitted if the file is on the present user's disk area. If you omit
the file name then you will immediately enter the exit sequence (see
below).
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-13
SPELL MAC 17-JAN-79 22:25 Documentation
2.5 Output File
You will be next asked to name the output file. Enter a file name, or
just a <cr> if you wish to use the default (see next paragraph).
2.5.1 Default Output File(s) - In the TENEX version there are always
output and exception files; by default the output file will have the
same name and extension as the input, and the exception file will have
the extension "EXCEPTIONS". In non-TENEX versions the default output
is to rename the input file with extension .BAK and to place the
corrected text in the (previous) input file name. The exception file
may be omitted.
2.5.2 Exception File - The exception file, should you chose to make
one, will contain each line on which an error was found, the
indication of the page and line number, and the suspect word. Words
accepted via the affix removal heuristics will also appear in the
exception file.
2.6 Checking And Correcting
After you have specified all the files, the program will respond with
"Working..." and start checking the input file for spelling errors.
2.6.1 Choices When An Unknown Word Is Found - When the spelling
checker encounters a word that isn't in the dictionary, it will type
the page and line number, the line in which the word occurs, and the
word itself.
In general, when a word is found that is not in the dictionary, a
brief message will be typed to remind you of the possible choices. In
the special case where the program finds precisely one possible
correction for the word, you will be given the choice of typing C to
accept the "guess" or any other option. The options are:
C The "guess" is correct. Correct the word in the text.
Enter misspelling in dictionary so that it will be corrected
if it appears again.
A Accept this word, this one time.
I Accept this word and insert it in the dictionary so that
subsequent occurrences of this word will be recognized and
accepted. Words that are inserted this way are marked as
incremental insertions and they may be dumped to form an
auxiliary dictionary.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-14
SPELL MAC 17-JAN-79 22:25 Documentation
R Replace this word. Type "R" <cr> and the program will ask
you for the replacement word. If the replacement word is
not already in the dictionary, the program will give you an
opportunity to insert it.
If the misspelling is due to an omitted space between words,
use the "R" command to retype the words with the space.
If the replacement word contains no spaces or illegal
characters, you will be asked if you wish to add this
replacement to the list of misspelling-correction pairs. If
you do add the replaced word as a misspelling then all
subsequent occurrences of that word will be replaced with
the replacement string.
X Accept this word and finish. The word will be accepted.
Then the remainder of the input file will be copied without
checking to the output file.
W Save my incremental insertions. After you type "W" <cr> you
will be asked for a file name. Then an incremental dump of
the dictionary will be written into the file. After the
dump is complete you may then decide what to do with the
excepted word.
L Load an auxiliary dictionary. The present word is accepted
and you will be asked for the name of the dictionary file to
load. This is useful if you encounter a jargon term but
forgot to load the appropriate dictionary.
D Display the line and offending word again. The line that is
displayed will not have any corrections shown in it. If a
line has more than one error the line will only be typed
once. Subsequent errors on that line will cause only the
particular word to be typed, unless this command is used.
S If this choice is offered then the spelling checker has
discovered several words that could be possible corrections
of this word. If you type "S" <cr> then you will enter a
mode where you can look at the words that were found by the
program and (optionally) select one of the words from the
list.
When you enter this selection submode, the first word in the
list of possible corrections will be typed followed by an
asterisk. Then you have the following choices:
C<cr> Use this word as the Correction.
<cr> Show the next possible choice. When you exhaust the
choices you are returned to the outer mode, and asked
again.
^<cr> Back up in the list.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-15
SPELL MAC 17-JAN-79 22:25 Documentation
<esc> Escape from this submode and return to the outer
command mode.
Note that when you make a correction via the C command or by selection
from the list presented by the S command, that correction is entered
in the misspelling-correction list and subsequent occurrences of the
same misspelling will be corrected automatically.
2.7 Finished Processing The File
When the input file is exhausted, all files are closed, the program
types "Finished.", and the exit sequence is entered. Except on TENEX,
you will be asked if you want the default dictionary WORDS.DIC dumped.
Answer "yes" or "no" (actually only a single letter answer is
required). The user then has several options:
E Exit now.
S Save this core image.
C Go back and correct another file.
A Augment the dictionary, set new switches, and correct another
file.
D Complete dump of the dictionary. This will create a very large
file, and it is not usually recommended.
I Incremental dump of the dictionary. All the words that were read
in from a private dictionary and marked with an I plus those
inserted while running the program are dumped to a file. The
user specifies a file name (the default is WORDS.DIC). This
incremental file is in a format suitable for editing or for use
as an auxiliary dictionary. The words in this file are in
alphabetical order.
X This command is used to get a trace count of the program. It is
for diagnostic purposes only, and is displayed as a possible
choice only if the program has been assembled as a debugging
program.
3.0 HOW TO USE MULTIPLE DICTIONARIES
SPELL has a set of features whereby the user can cause the creation of
several disjoint incremental dictionaries. In this way, the user may
collect several dictionaries of special terms. Internally, all
dictionary entries are considered equivalent as regards word searches.
The distinction between dictionaries becomes relevant when doing
incremental dumps (the I command during the exit sequence or the W
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-16
SPELL MAC 17-JAN-79 22:25 Documentation
command while in the middle of execution). When an incremental dump
is requested, the user may specify a number, e.g., W9, which selects
the particular incremental dictionary to be dumped. In this example,
dictionary 9 will be dumped.
3.1 Dictionaries 0 And 1
Dictionary 0 is the main dictionary. Words cannot be added to this
dictionary, except by reading an auxiliary file. In general, words
that are inserted incrementally are marked as being in dictionary 1.
All words that are incremental insertions in the dictionary will be
marked in dictionary 1, unless the user specifies otherwise.
3.2 Specifying A Dictionary
The following places are where the user may specify which dictionary
to add to:
1. When loading an auxiliary dictionary, if the user responds
with "In" to the question about marking new entries as
incremental, then the new entries will be marked in
dictionary number n (where n is interpreted as decimal and
should be less than 31).
2. After a word has been rejected, type "In" to insert the word
in dictionary number n.
3. After replacing a word, if the replacement is not in the
dictionary, then type "In" to insert the replacement into
dictionary n.
When requesting an incremental dump, the user may specify the
particular dictionary to dump. This is allowed in two cases:
1. After some word has been rejected, the command "Wn" will
cause dictionary number n to be dumped.
2. During the exit sequence, the command "In" will cause
dictionary number n to be dumped.
In all five cases above, if n is either 0 or omitted, then it will be
taken as being 1.
3.3 Caution!
There is no provision in SPELL for remembering which dictionary
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-17
SPELL MAC 17-JAN-79 22:25 Documentation
numbers have been used. Therefore, it remains the individual user's
responsibility to remember the numbers of all the dictionaries that he
creates. (Forgetting the number will mean that the forgotten
dictionary can not be dumped incrementally. The words in a forgotten
dictionary will still be available, but the only way to actually get
them dumped out is to dump the entire dictionary).
3.4 Hint:
In the course of correcting a file, it is likely that you will be
asked about words which you wish to have accepted during this file,
but which you don't wish to have saved in your incremental
dictionary(s). In these cases, simply insert them in a "throwaway"
incremental dictionary which you don't bother to dump when you're
finished.
4.0 ABNORMAL CONDITIONS
While the program is running it is possible that certain abnormal
conditions may obtain. The usual response of the program is to type
some sort of error message. The following is a list of the error
messages in SPELL, with an indication of the severity of the error.
Illegal dictionary entry: <word>
This error occurs if an entry in a dictionary file exceeds
40 (decimal) characters. The word is ignored.
0 LENGTH WORD AT HASHCP
Somebody just asked to compute the hash address of an empty
word. The program continues, but there is a possibility of
error.
HASHING ERROR
Somebody asked for the hash address of a word that doesn't
begin with letters or apostrophe as the first two
characters. This is a fatal error; the program halts.
DEVICE DATA ERROR (OUTPUT)
This message means that while writing a file, something
screwed up. The program halts.
DEVICE ERROR (INPUT)
The input file is screwed up in some way. The program
halts.
Internal confusion in the spelling checker.
Called from location <loc>.
The spelling checker has discovered a (possible) bug in
itself. The program halts, but the user may type CONTINUE.
Please note the location mentioned and the circumstances
that evoked the message.
Dictionary number too large, Maximum is 30.
This message means that the user attempted to select for
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-18
SPELL MAC 17-JAN-79 22:25 Documentation
insertion or dumping a dictionary beyond the range of
allowed numbers. The user will get another chance to do the
right thing.
Unrecognized switch.
The user asked for an unknown switch. He must repeat the
entire switch specification again.
The following messages occur only in the non-TENEX version:
Illegal Character in Scan.
This is a message from the routine that reads file names.
You will be asked to try retyping the name.
File not Found. <filename>
The indicated file could not be found. The user gets to
specify some other file.
Enter failed on: <file name>
An enter uuo failed while trying to select the indicated
file for output. The user may specify another name.
Open Failed on Device <dev>:
You asked for a device that doesn't exist or isn't available
to the program. You will get a chance to ask for something
else.
Insufficient Core Available.
SPELL requires more core while expanding the dictionary but
none is available. The program exits.
5.0 INTERNAL WORKINGS
5.1 Data Structures - Hashing Function
The data structure is the heart of the program, and any efficiency in
the program operation is due primarily to this choice of data
structure. The data structure is basically a hash coding scheme where
dictionary entries are accessed by both their alphabetic order and by
their length. There is a base table that contains 26 * 26 * 10
halfwords; this table gives anchors for 6760 chains. Each chain
contains exactly all words with the same two first letters and some
given length. To be precise, the hashing function is:
(L1*26+L2)*10+min(WL-2,9), where L1 and L2 are numeric representations
of the first and second letters (A=0, B=1, ... Z=25, and apostrophe
also is 25), and WL is the length of the word in characters.
This scheme was chosen since it provides both an efficient way to
probe the dictionary and a quick way to select a small subset of all
words that are close to a given input word.
5.2 Data Structures - Dictionary Entry Format
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-19
SPELL MAC 17-JAN-79 22:25 Documentation
Entries are added to the appropriate hash chain by the INSERT
subroutine. Entries are added to the head of the chain, saving the
time and effort of searching to the end of the chain. This scheme
means that the last item entered on a chain is the first item seen by
a search. The format of the entry is given by:
Word 0: xwd flags,nextlk
Word 1: 5 bit representation
Word 2: 5 bit representation
...
There are precisely 1+ceiling(WL/7) machine words used for each
dictionary entry. WL is the length of the entry in characters.
Nextlk is the pointer to the next entry in the list, or zero if this
is the last in the chain. The left side contains flags; bits 13-17
specify the incremental dictionary number (0 for main, 1-30 for
incremental dictionaries, and 31 for misspellings). One can imagine
that bits 5-12 could be used to store semantic information about the
entry. The unused bytes in the last word of an entry must be zero,
since they are used to stop the routine that converts the five bit to
7 bit.
Misspellings are entered in the main dictionary with the incremental
dictionary number set to decimal 31. If a word is marked as a
misspelling then the word preceding the flags and link contains a
pointer to the flag and link word of the correction. Misspellings may
be deleted before the full dictionary is dumped, or whenever SPELL
asks about saving the core image. The space obtained by deleting
misspellings is not reutilized at present, although that feature could
be added without great difficulty.
5.3 Spelling Correction Heuristics
There are four kinds of errors that the program attempts to correct:
1. one wrong letter.
2. one missing letter.
3. one extra letter.
4. two transposed letters.
For a wrong letter in the third or subsequent character, all words
that are candidates must exist on the same chain that the suspect word
hashes to. Hence, each entry on that chain is inspected to determine
if the suspect differs from the entry by exactly one character. This
is accomplished by an exclusive-or (XOR) between the suspect and the
dictionary. Then a JFFO instruction selects the first non zero byte
in the XOR. This byte is zeroed and if the result is all zero then
the dictionary word differs from the suspect in only one letter. All
such words are listed at CANDBF, where they can be inspected later.
For a wrong letter in the first or second character, the program tries
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-20
SPELL MAC 17-JAN-79 22:25 Documentation
varying the second letter through all 26 possible values, searching
for an exact match. Then all 26 possible values of the first letter
are tried, after setting the second letter to its original value.
This means that 52 more chains are searched for possible matches.
To correct transposed letters, all combinations of transposed letters
are tried. There are only WL-1 such combinations, so it is fairly
cheap to do that.
To correct one extra letter, wl copies of the word are made, each with
some letter removed. Each of these is looked up in the dictionary.
This takes WL searches.
To correct one missing letter, WL+1 copies of the word are made, each
time inserting a null character in a new position in the suspect. The
null character is never part of any word, so the suspect word
augmented by an embedded null can be thought of as a word with one
wrong letter (the null) then the algorithm for matching one wrong
letter is used. If the first character is omitted, all 26 possible
first characters are tried. Also, 26 more words are formed by varying
the second character in case that had been omitted.
6.0 ASSEMBLY & LOADING INSTRUCTIONS
There are three assembly time switches, TENEX, STANSW and SANSW. If
STANSW is set then there are SIXBIT ppn's and the SWAP UUO; if STANSW
is zero, then normally there are octal ppn's except if SANSW is set,
in which case, there are decimal ppn's. If the TENEX switch is set it
overrides the others and TENEX style file names are used. Compile the
program using MACRO or FAIL and load it. The non-TENEX versions will
produce a sharable high segment and a non-sharable low segment. When
you start the program the first time after loading, it will demand a
dictionary. This dictionary will be read in as dictionary zero, which
is the built-in dictionary for future use. In the non-TENEX versions
dictionary zero is read into the sharable high segment. Use the
largest dictionary you have which meets your storage limitations. The
file SPELLD.ALL is recommended.
When dictionary zero is loaded, SPELL will ask "Do you wish to save
this core image?" Answer "Yes" and save the resulting core image. On
non-TENEX systems, do an SSAVE to produce a sharable high segment
containing dictionary zero.
There are various other assembly switches, but they default to
reasonable settings, and you meddle with them at your peril.
7.0 POSSIBLE EXPANSIONS
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-21
SPELL MAC 17-JAN-79 22:25 Documentation
No program that is still in use is complete. The following paragraphs
include suggestions of possible future work in this area.
For non-paged systems, the main dictionary (0) should be in the
sharable segment and the private additions in the non-sharable
segment. This would require adjusting the hash chains to point across
the gap.
The dictionary should be expanded to include all suffixes for every
word. There is a feature that strips suffixes for the purpose of
finding the stem of the word in the dictionary, but this heuristic is
error prone and incompatible with later attempts to correct the word.
If semantic information were included in the dictionary, it could help
guide the selection of a correction.
Either of these would require a major restructuring of the program,
since the dictionary would no longer fit in core. Probably, the
dictionary should be kept on the disk, with a data structure similar
to the one used in core, but arranged to keep each hash chain in the
minimum number of disk pages, so that searches through the dictionary
can be made efficient.
%
SUBTTL INITIALIZATION - OUTER LOOP
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-22
SPELL MAC 17-JAN-79 22:25 INITIALIZATION - OUTER LOOP
400000' 015 012 00000000 CRLF: BYTE(7)15,12
400001' 255 00 0 00 000000 START: JFCL
400002' 047 00 0 00 000000 RESET ;BBN OR TOPS-10 RESET
IFN TENEX,< ;[Tops20] SEE IF RUNNING UNDER TOPS20
CLEARB 3,4
HRROI 1,3
HRLOI 2,600015 ; NOTHING DEVICE DESIGNATOR
DEVST
CLEAR 3,3 ; ASSUME TENEX IF FAILS
CAME 3,[ASCII\NUL\] ; IS IT SPELLED ALA TOPS20?
SETCMI 4,37 ; NO, MUST BE TENEX
SETCAM 4,TNXEOL ; SAVE RESULT
>
400003' 402 00 0 00 010761' SETZM NWA ;ZERO STATISTICS COUNTERS
400004' 200 01 0 00 406204' MOVE A,[NWA,,NWA+1]
400005' 251 01 0 00 010770' BLT A,NWEX
IFN TENEX,< MOVEI 1,400000 ;GET INITIAL RUNTIMES
RUNTM
IDIV 3,2 ;CONVERT TO SECONDS
MOVEM 3,REALTM
IDIV 1,2
MOVEM 1,CPUTIM >
400006' 201 00 0 00 000000 ASTART: MOVEI FL,0 ;FLAGS
400007' 200 17 0 00 406205' MOVE P,[IOWD PDLEN,PDLIST] ;STACK
IFN TENEX,< PUSHJ P,INITX > ;SPECIAL INITIALIZATION FOR TENEX
IFN STANSW,< PUSHJ P,INITST > ;SPECIAL INITIALIZATION FOR STANFORD DPYS
IFG COUNTS,< MOVE A,[XWD ICTAB,ICTAB+1]
SETZM ICTAB
BLT A,ICTABX
MOVE DEBX,[IOWD 2*%DTL,%DBT] >
400010' 200 01 0 00 000000* MOVE A,.JBFF
400011' 336 00 0 00 010656' SKIPN NDICT ;NOT REDEFINED IF DICT LOADED
400012' 202 01 0 00 010655' MOVEM A,LISTFF ;SET FIRST FREE LOC FOR DICTIONARY
400013' 336 00 0 00 010656' SKIPN NDICT ;IF EMPTRY, DON'T
400014' 260 17 0 00 403317' PUSHJ P,LOADER ;NO DICTIONARY
400015' 336 00 0 00 010661' IFE TENEX,< SKIPN NDICTI+1 ;IF DEFAULT DICTIONARY (1) EMPTY
400016' 260 17 0 00 403306' PUSHJ P,LOAD1A ;LOAD IT (FROM WORDS.DIC). MDA 790112
400017' 200 01 0 00 010661' MOVE A,NDICTI+1 ;SAVE NUMBER OF WORD IN DIC 1
400020' 202 01 0 00 010657' MOVEM A,NDICT1 ;FOR COMPARISON ON COMPLETION
400021' 334 00 0 00 000000 SKIPA >
400022' 260 17 0 00 403317' BEGIN0: PUSHJ P,LOADER ;LOADING AUX
400023' 051 03 0 00 406206' OUTSTR [ASCIZ/Do you want to augment the dictionary? /]
400024' 051 04 0 00 000001 INCHWL A ;WAIT FOR ANSWER
400025' 260 17 0 00 404154' PUSHJ P,FLUTTY ;FLUSH TO NEXT DELIM
400026' 620 01 0 00 000040 TRZ A,40 ;MAKE SURE OF UPPER CASE
400027' 306 01 0 00 000131 CAIN A,"Y"
400030' 254 00 0 00 400022' JRST BEGIN0 ;OFF TO LOAD MORE.
400031' 260 17 0 00 400370' BGIN02: PUSHJ P,RSWIT ;READ SWITCHES
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-23
SPELL MAC 17-JAN-79 22:25 INITIALIZATION - OUTER LOOP
400032' 051 03 0 00 406216' BEGIN1: OUTSTR [ASCIZ/Name of the file to check and correct: /]
400033' 660 00 0 00 000300 TRO FL,NOCORR!NOEXCP ;ASSUME NO OUTPUT.
IFN TENEX,< PUSHJ P,INDATA ;INITIALIZE DATA CHANNEL
MOVEI K,DATABF
SETZB L,M ;NO DEFAULTS>
400034' 260 17 0 00 403613' PUSHJ P,GETFIL ;GET A FILE NAME IN SOME WAY.
400035' 254 00 0 00 400123' JRST ENDIT
400036' 260 17 0 00 402777' IFE TENEX,< PUSHJ P,INDATA
400037' 254 00 0 00 400032' JRST BEGIN1>
400040' 076 15 0 00 000011 LOOKUP DATA,K
JRST [PUSHJ P,FNOTFM
400041' 254 00 0 00 406226' JRST BEGIN1]
400042' 202 11 0 00 002126' MOVEM K,INBLK ;SAVE LOOKUP BLOCK
400043' 202 12 0 00 002127' MOVEM L,INBLK+1 ;IN CASE OUTPUT SPECIFIES
400044' 202 13 0 00 002130' MOVEM M,INBLK+2 ;CREATION OF A .BAK FILE
400045' 202 14 0 00 002131' MOVEM N,INBLK+3 ;MDA 790112
400046' 602 00 0 00 200000 TRNE FL,TRAIN
400047' 254 00 0 00 400075' JRST BEGIN5 ;NO OUTPUT OR EXCEPTIONS IF TRAINING
IFN TENEX,< HRROI 1,LIBUF ;FIND NAME.EXT OF INPUT FILE
MOVE L,1 ; AND USE FOR DEFAULT FOR OUTPUT
HRRZ 2,DATABF+3 ; AND EXCEPTION FILE
HRLZI 3,(1B8)
JFNS
HRROI 1,LOBUF
MOVE M,1
HRLZI 3,(1B11)
JFNS >
400050' 602 00 0 00 400000 TRNE FL,QTRAIN ;OR SPECIAL TRAINING
400051' 254 00 0 00 400063' JRST BEGIN3 ;EXCEPTION IS NEEDED AND NO CORRECTIONS
400052' 051 03 0 00 406230' BEGIN2: OUTSTR [ASCIZ /File name for correction output: /]
IFN TENEX,< PUSHJ P,INCORR
MOVEI K,CORRBF ;DEFAULT TO SAME AS INPUT FILE >
400053' 051 03 0 00 406237' IFE TENEX,< OUTSTR [ASCIZ/ (CR for .BAK) /] >
400054' 260 17 0 00 403613' PUSHJ P,GETFIL
IFN TENEX, < JRST [OUTSTR [ASCIZ/No corrections.
/]
JRST BEGIN3] >
400055' 254 00 0 00 400271' IFE TENEX,< JRST SETBAK ;NO NAME MEANS CREATE .BAK MDA 790112
400056' 260 17 0 00 403007' PUSHJ P,INCORR
400057' 254 00 0 00 400052' JRST BEGIN2 >
400060' 077 16 0 00 000011 ENTER CORR,K
JRST [PUSHJ P,ENTFAI
400061' 254 00 0 00 406243' JRST BEGIN2]
400062' 620 00 0 00 000100 BEGN3A: TRZ FL,NOCORR ;THERE ARE CORRECTIONS
400063' 602 00 0 00 400000 BEGIN3: TRNE FL,QTRAIN ;SPECIAL TRAINING?
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-24
SPELL MAC 17-JAN-79 22:25 INITIALIZATION - OUTER LOOP
OUTSTR [ASCIZ/
400064' 051 03 0 00 406245' An exception file is needed. /]
400065' 051 03 0 00 406254' OUTSTR [ASCIZ/File for exceptions (or CR): /]
IFN TENEX,< PUSHJ P,INEXCP
MOVEI K,EXCPBF
HRROI M,[ASCIZ/EXCEPTIONS/] ;DEFAULT TO NAME.EXCEPTIONS >
400066' 260 17 0 00 403613' PUSHJ P,GETFIL
JRST [TRNE FL,QTRAIN
JRST BEGIN3 ;OVER AND OVER.
OUTSTR [ASCIZ/No exception file.
/]
400067' 254 00 0 00 406267' JRST BEGIN5]
400070' 260 17 0 00 403003' IFE TENEX,< PUSHJ P,INEXCP
400071' 254 00 0 00 400063' JRST BEGIN3 >
400072' 077 17 0 00 000011 ENTER EXCP,K
JRST [PUSHJ P,ENTFAI
400073' 254 00 0 00 406273' JRST BEGIN3]
400074' 620 00 0 00 000200 TRZ FL,NOEXCP ;THERE ARE EXCEPTIONS
400075' BEGIN5:
IFN STANSW,< MOVEM FL,SAVEFL ;SAVE III AND DD FLAGS
TRC FL,NOCORR!NOEXCP
TRCN FL,NOCORR!NOEXCP ;SKIP IF EITHER CORR OR EXCP
TLZN FL,IIISW!DDDSW ;NO OUTPUT FILES. ACT LIKE TTY.
JRST .+2 ;WE WERE A TTY, OR OUTPUT FILES.
PUSHJ P,DPYPOP ;SET DPY TO LARGER SIZE >
OUTSTR [ASCIZ/Working...
400075' 051 03 0 00 406275' /]
400076' 620 00 0 00 100002 TRZ FL,TECO!SHUTUP
400077' 660 00 0 00 000001 TRO FL,FRSTOP ;FLAG UP FOR FIRST I/O ON DATA
400100' 260 17 0 00 400536' PUSHJ P,LOOP ;GO OFF AND DO ALL THE WORK
IFN STANSW,< MOVSI A,IIISW!DDDSW
AND A,SAVEFL ;GET ORIGINAL STATE OF DISPLAY.
IOR FL,A ;AND SET FL FROM THAT>
OUTSTR [ASCIZ/Finished.
400101' 051 03 0 00 406300' /]
400102' 200 01 0 00 010657' IFE TENEX,< MOVE A,NDICT1 ;HOW MANY WORDS AT START
400103' 315 01 0 00 010661' CAMGE A,NDICTI+1 ;COMPARED WITH NOW?
400104' 254 00 0 00 400107' JRST DMPDEF
OUTSTR [ASCIZ/No additions made to default dictionary.
400105' 051 03 0 00 406303' /]
400106' 254 00 0 00 400123' JRST ENDIT ;NONE ADDED
400107' 051 03 0 00 406314' DMPDEF: OUTSTR [ASCIZ/Do you want to dump the default dictionary WORDS.DIC? /]
400110' 051 04 0 00 000001 INCHWL A ;WAIT FOR ANSWER
400111' 260 17 0 00 404154' PUSHJ P,FLUTTY ;FLUSH TO NEXT DELIM
400112' 620 01 0 00 000040 TRZ A,40 ;MAKE SURE OF UPPER CASE
400113' 302 01 0 00 000131 CAIE A,"Y"
400114' 254 00 0 00 400123' JRST ENDIT ;NO DEFAULT DUMP
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-25
SPELL MAC 17-JAN-79 22:25 INITIALIZATION - OUTER LOOP
400115' 200 11 0 00 406327' MOVE K,[SIXBIT/WORDS/]
400116' 205 12 0 00 445143 MOVSI L,'DIC'
400117' 201 01 0 00 000001 MOVEI A,1 ;DEFAULT DICTIONARY
400120' 202 01 0 00 011606' MOVEM A,IDNUM ;NUMERO UNO
400121' 403 13 0 00 000014 SETZB M,N
400122' 260 17 0 00 403013' PUSHJ P,IDMPD1 > ;MDA 790112
400123' 051 03 0 00 406330' ENDIT: OUTSTR [ASCIZ/Type E,S,C,A,D,I,N,/]
IFN COUNTS,< OUTSTR [ASCIZ/X,/] >
400124' 051 03 0 00 406334' OUTSTR [ASCIZ/ or ? /]
400125' 620 00 0 00 600000 TRZ FL,TRAIN!QTRAIN ;EXIT TRAINING MODE
400126' 051 04 0 00 000001 INCHWL A
400127' 301 01 0 00 000141 CAIL A,"A"+40
400130' 620 01 0 00 000040 TRZ A,40 ;CONVERT TO UPPERCASE
400131' 302 01 0 00 000111 CAIE A,"I"
400132' 260 17 0 00 404154' PUSHJ P,FLUTTY ;FLUSH TTY EXCEPT FOR I COMMAND
400133' 205 02 0 00 777770 MOVSI B,-NENDC
400134' 135 03 0 00 406336' LDB C,[POINT 7,ENDCMD(B),35]
400135' 302 01 0 03 000000 CAIE A,(C)
400136' 253 02 0 00 400134' AOBJN B,.-2
400137' 554 03 0 02 400144' HLRZ C,ENDCMD(B)
400140' 261 17 0 00 000003 PUSH P,C ;SET JUMP ADDRESS ON STACK.
400141' 135 01 0 00 406337' LDB A,[POINT 1,ENDCMD(B),18]
400142' 322 01 0 00 403540' JUMPE A,CPOPJ ;JUMP UNLESS DISPLAY RESET REQUIRED
IFN STANSW,< TLNE FL,IIISW!DDDSW ;ON STANFORD DISPLAY?
PUSHJ P,DPYRST ;YES. RESET THE DISPLAY>
400143' 263 17 0 00 000000 POPJ P, ;JUMP TO APPROPRIATE DISPATCH
400144' 400155' 000077 ENDCMD: ENDHLP,,"?"
400145' 400254' 400105 DOEXIT,,400000+"E" ;RESET DISPLAY
400146' 400261' 400123 SAVET,,400000+"S"
400147' 400267' 400103 XBEG.1,,400000+"C"
400150' 400006' 400101 ASTART,,400000+"A"
400151' 400263' 000104 D.END,,"D"
400152' 400256' 000111 I.END,,"I"
400153' 400265' 000116 N.END,,"N"
IFN COUNTS,< DTRACE,,"X" >
000010 NENDC==.-ENDCMD
400154' 400123' 000000 ENDIT,,0 ;HERE TO CATCH ERRORS
400155' 051 03 0 00 400162' ENDHLP: OUTSTR ENDHM1
IFG COUNTS,< OUTSTR [ASCIZ/X Dump the trace counts (for debugging only)
/]>
400156' 051 03 0 00 400201' OUTSTR ENDHM2
400157' 051 03 0 00 406340' IFE TENEX,< OUTSTR [ASCIZ/ (Rewrites a file!)/] >
400160' 051 03 0 00 400243' OUTSTR ENDHM3
400161' 254 00 0 00 400123' JRST ENDIT
400162' ENDHM1: ASCIZ /
400162' 015 012 117 160 164 Options are:
400163' 151 157 156 163 040
400164' 141 162 145 072 015
400165' 012 105 011 105 170 E Exit
400166' 151 164 015 012 123 S Save this core image
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-26
SPELL MAC 17-JAN-79 22:25 INITIALIZATION - OUTER LOOP
400167' 011 123 141 166 145
400170' 040 164 150 151 163
400171' 040 143 157 162 145
400172' 040 151 155 141 147
400173' 145 015 012 103 011 C Correct another file
400174' 103 157 162 162 145
400175' 143 164 040 141 156
400176' 157 164 150 145 162
400177' 040 146 151 154 145
400200' 015 012 000 000 000 /
400201' 101 011 101 165 147 ENDHM2: ASCIZ/A Augment the dictionary and correct another file
400202' 155 145 156 164 040
400203' 164 150 145 040 144
400204' 151 143 164 151 157
400205' 156 141 162 171 040
400206' 141 156 144 040 143
400207' 157 162 162 145 143
400210' 164 040 141 156 157
400211' 164 150 145 162 040
400212' 146 151 154 145 015
400213' 012 104 011 104 165 D Dump the dictionary to disk (writes a big, big file)
400214' 155 160 040 164 150
400215' 145 040 144 151 143
400216' 164 151 157 156 141
400217' 162 171 040 164 157
400220' 040 144 151 163 153
400221' 040 050 167 162 151
400222' 164 145 163 040 141
400223' 040 142 151 147 054
400224' 040 142 151 147 040
400225' 146 151 154 145 051
400226' 015 012 111 011 127 I Write out user's dictionary with incremental insertions./
400227' 162 151 164 145 040
400230' 157 165 164 040 165
400231' 163 145 162 047 163
400232' 040 144 151 143 164
400233' 151 157 156 141 162
400234' 171 040 167 151 164
400235' 150 040 151 156 143
400236' 162 145 155 145 156
400237' 164 141 154 040 151
400240' 156 163 145 162 164
400241' 151 157 156 163 056
400242' 000 000 000 000 000
400243' ENDHM3: ASCIZ /
400243' 015 012 116 011 116 N Numbers (usage statistics) typeout
400244' 165 155 142 145 162
400245' 163 040 050 165 163
400246' 141 147 145 040 163
400247' 164 141 164 151 163
400250' 164 151 143 163 051
400251' 040 164 171 160 145
400252' 157 165 164 015 012 /
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-27
SPELL MAC 17-JAN-79 22:25 INITIALIZATION - OUTER LOOP
400253' 000 000 000 000 000
400254' 047 00 0 00 000012 DOEXIT: EXIT
400255' 254 00 0 00 400123' JRST ENDIT ;IN CASE USER TYPES CONTINUE
400256' 260 17 0 00 405402' I.END: PUSHJ P,SETNM1
400257' 260 17 0 00 403014' PUSHJ P,IDMPD
400260' 254 00 0 00 400123' JRST ENDIT
400261' 260 17 0 00 405731' SAVET: PUSHJ P,SAVEME
400262' 254 00 0 00 400123' JRST ENDIT
400263' 260 17 0 00 403016' D.END: PUSHJ P,DUMPD
400264' 254 00 0 00 400123' JRST ENDIT
400265' 260 17 0 00 406071' N.END: PUSHJ P,STATS
400266' 254 00 0 00 400123' JRST ENDIT
400267' 047 00 0 00 000000 XBEG.1: RESET
IFN TENEX,< PUSHJ P,INITX >
IFN STANSW,< PUSHJ P,INITST >
400270' 254 00 0 00 400031' JRST BGIN02
SUBTTL SETBAK INPUT FILE TO BECOME .BAK ON EXIT
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-28
SPELL MAC 17-JAN-79 22:25 SETBAK INPUT FILE TO BECOME .BAK ON EXIT
IFE TENEX, <
000011 DUM==11
400271' 135 01 0 00 406344' SETBAK: LDB A,[POINT 3,INBLK+2,2] ;OWNERS' PROTECTION
400272' 275 01 0 00 000002 SUBI A,2 ;SHOULD PERMIT RENAME
400273' 323 01 0 00 400276' JUMPLE A,STBK1 ;IT DOES
OUTSTR [ASCIZ/Protection prevents input file rename!
400274' 051 03 0 00 406345' /]
400275' 254 00 0 00 400052' JRST BEGIN2 ;GO ASK AGAIN
400276' 200 11 0 00 406356' STBK1: MOVE K,['SPELLQ'] ;TEMPORARY OUTPUT FILE
400277' 205 12 0 00 645560 MOVSI L,'TMP'
400300' 201 01 0 00 000015 MOVEI A,DATA ;DETERMINE DISK STRUCTURE
400301' 552 01 0 00 002135' HRRZM A,DEVBLK ;OF INPUT FILE
400302' 200 01 0 00 406357' MOVE A,[XWD 4,DEVBLK]
400303' 047 01 0 00 000110 PATH. A,
400304' 254 00 0 00 400321' JRST SETBK2
400305' 200 13 0 00 002135' MOVE M,DEVBLK ;PUT OUTPUT ON SAME
400306' 201 14 0 00 000000 MOVEI N,0
400307' 260 17 0 00 403007' PUSHJ P,INCORR ;INITALIZE CORRECTION FILE
400310' 254 00 0 00 400321' JRST SETBK2 ;FAILURE
400311' 202 11 0 00 002121' MOVEM K,BAKFLG ;LEAVE A FLAG THAT THIS IS A .BAK
400312' 077 16 0 00 000011 ENTER CORR,K
JRST [PUSHJ P,ENTFAI
400313' 254 00 0 00 406243' JRST BEGIN2]
400314' 202 11 0 00 002122' MOVEM K,CORBLK ;SAVE ENTER BLOCK FOR CORRECTION
400315' 202 12 0 00 002123' MOVEM L,CORBLK+1 ;OUTPUT FOR FUTURE RENAME
400316' 202 13 0 00 002124' MOVEM M,CORBLK+2
400317' 202 14 0 00 002125' MOVEM N,CORBLK+3
400320' 254 00 0 00 400062' JRST BEGN3A
SETBK2: OUTSTR [ASCIZ/Unable to open SPELLQ.TMP on input structure.
400321' 051 03 0 00 406360' /]
400322' 254 00 0 00 400052' JRST BEGIN2 ;GO ASK WHERE OUTPUT SHOULD BE PUT
400323' 200 11 0 00 002126' DOBAK: MOVE K,INBLK ;INPUT FILE INFO
400324' 202 11 0 00 002122' MOVEM K,CORBLK ;WILL BE USED TO RENAME
400325' 200 12 0 00 002127' MOVE L,INBLK+1 ;CORRECTION FILE
400326' 502 12 0 00 002123' HLLM L,CORBLK+1
400327' 200 13 0 00 002130' MOVE M,INBLK+2 ;INPUT FILE PROTECTION
400330' 135 01 0 00 406372' LDB A,[POINT 9,M,8]
400331' 137 01 0 00 406373' DPB A,[POINT 9,CORBLK+2,8]
400332' 201 14 0 00 000000 MOVEI N,0
400333' 201 01 0 00 000000 MOVEI A,0 ;PROTECTION OF .BAK FILE
400334' 137 01 0 00 406374' DPB A,[POINT 3,M,2] ;CHANGED TO 0XX
400335' 055 15 0 00 000011 RENAME DATA,K
400336' 254 00 0 00 400366' JRST BAKERR
400337' 205 01 0 00 424153 MOVSI A,'BAK' ;EXTENSION CHANGED
400340' 500 12 0 00 000001 HLL L,A ;TO BAK
400341' 050 11 0 00 002132' OPEN DUM,DUMBLK
400342' 254 00 0 00 400366' JRST BAKERR
400343' 502 12 0 00 002127' HLLM L,INBLK+1 ;EXISTING BAK FILE
400344' 402 00 0 00 002130' SETZM ,INBLK+2 ;HAS TO BE DELETED
400345' 402 00 0 00 002131' SETZM ,INBLK+3
400346' 076 11 0 00 002126' LOOKUP DUM,INBLK ;IS THERE ONE?
400347' 254 00 0 00 400354' JRST RENAM1 ;ASSUME NOT FOUND
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-29
SPELL MAC 17-JAN-79 22:25 SETBAK INPUT FILE TO BECOME .BAK ON EXIT
400350' 402 00 0 00 002126' SETZM ,INBLK ;WIPE OUT NAME
400351' 402 00 0 00 002127' SETZM ,INBLK+1
400352' 055 11 0 00 002126' RENAME DUM,INBLK ;DELETE IT
400353' 254 00 0 00 400366' JRST BAKERR
400354' 055 15 0 00 000011 RENAM1: RENAME DATA,K
400355' 254 00 0 00 400366' JRST BAKERR
400356' 070 15 0 00 000000 CLOSE DATA,
400357' 071 15 0 00 000000 RELEAS DATA,
400360' 055 16 0 00 002122' RENAME CORR,CORBLK ;ALL SET UP
400361' 070 16 0 00 000000 CLOSE CORR,
400362' 063 16 0 00 740000 STATZ CORR,740000 ;CHECK FOR DEVICE ERROR
400363' 254 00 0 00 400366' JRST BAKERR
400364' 071 00 0 00 000016 RELEAS CORR
400365' 254 00 0 00 400555' JRST FLOOP1 ;GO REJOIN MAIN STREAM
BAKERR: OUTSTR [ASCIZ'Error renaming/closing files.
Enter .CLOSE and examine SPELLQ.TMP plus input file.
400366' 051 03 0 00 406375' ']
400367' 047 00 0 00 000012 EXIT
> ;END IFE TENEX. MDA 790112
SUBTTL RSWIT READ MODE SWITCHES FROM USER TERMINAL
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-30
SPELL MAC 17-JAN-79 22:25 RSWIT READ MODE SWITCHES FROM USER TERMINAL
400370' RSWIT:
400370' 051 03 0 00 406417' RSWIT0: OUTSTR [ASCIZ /Mode switches (zero or more of T,Q,N,U,P,A, or ?): /]
400371' 402 00 0 00 002155' SETZM UCASE ;ASSUME UPPERCASE IS NORMAL
400372' 620 00 0 00 670000 TRZ FL,PICKUP!TRAIN!QTRAIN!NOSUFF!NOPREF
400373' 051 04 0 00 000001 RSWIT1: INCHWL A
400374' 301 01 0 00 000141 CAIL A,"A"+40
400375' 620 01 0 00 000040 TRZ A,40
400376' 205 02 0 00 777767 MOVSI B,-NSWCH
400377' 312 01 0 02 400403' CAME A,SWTAB(B)
400400' 253 02 0 00 400377' AOBJN B,.-1
400401' 256 00 0 02 400414' XCT SWTAB1(B) ;IF SEARCH LOSES, XCT LOSE MESSAGE
400402' 254 00 0 00 400373' JRST RSWIT1
400403' 000000 000120 SWTAB: "P"
400404' 000000 000124 "T"
400405' 000000 000121 "Q"
400406' 000000 000116 "N"
400407' 000000 000125 "U"
400410' 000000 000101 "A"
400411' 000000 000077 "?"
IFN TENEX,< CR ;[Tops20]
LF ;[Tops20]
33> ;[Tops20]
400412' 000000 000015 IFE TENEX,< CR
400413' 000000 000012 LF > ;IFE TENEX
000011 NSWCH==.-SWTAB
;ACTIONS TO BE XCTD FOR SWITCHES
400414' 660 00 0 00 040000 SWTAB1: TRO FL,PICKUP ;P
400415' 660 00 0 00 200000 TRO FL,TRAIN ;T
400416' 660 00 0 00 400000 TRO FL,QTRAIN ;Q
400417' 660 00 0 00 010000 TRO FL,NOSUFF ;N
400420' 476 00 0 00 002155' SETOM UCASE ;U
400421' 660 00 0 00 020000 TRO FL,NOPREF ;A FOR AFFIX?
400422' 260 17 0 00 400426' PUSHJ P,SWHELP ;?
IFN TENEX,< JRST RSWRET ;[Tops20]
JRST RSWRET ;[Tops20]
JRST RSWRET> ;[Tops20]
400423' 255 00 0 00 000000 IFE TENEX,< JFCL ;CR - IGNORE
400424' 254 00 0 00 400435' JRST RSWRET ;LF > ;IFE TENEX
400425' 254 00 0 00 400430' JRST SWLOSE ;CATCH ERRORS HERE.
400426' 051 03 0 00 400500' SWHELP: OUTSTR SWHLPM ;TYPE HELP MESSAGE
400427' 254 00 0 00 404154' JRST FLUTTY ;FLUSH LINE. RETURN TO GET A NEW LINE
400430' 051 03 0 00 406432' SWLOSE: OUTSTR [ASCIZ /Unrecognized switch: /]
400431' 051 01 0 00 000001 OUTCHR A
OUTSTR [ASCIZ/. Try again!
400432' 051 03 0 00 406437' /]
400433' 260 17 0 00 404154' PUSHJ P,FLUTTY
400434' 254 00 0 00 400370' JRST RSWIT0
400435' 460 01 0 00 000000 RSWRET: SETCM A,FL ;CHECK IF BOTH T AND Q
400436' 602 01 0 00 600000 TRNE A,TRAIN!QTRAIN
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-31
SPELL MAC 17-JAN-79 22:25 RSWIT READ MODE SWITCHES FROM USER TERMINAL
400437' 254 00 0 00 400442' JRST ASKU ;OK
OUTSTR [ASCIZ /Can't do both Training and Q-Training! Try again!
400440' 051 03 0 00 406443' /]
400441' 254 00 0 00 400370' JRST RSWIT0 ;TO DO IT RIGHT
400442' 336 00 0 00 002155' ASKU: SKIPN UCASE ;UPPER CASE HACK?
400443' 254 00 0 00 400447' JRST ASKP
400444' 051 03 0 00 406456' OUTSTR [ASCIZ/ Dictionary number for uppercase words: /]
400445' 260 17 0 00 405402' PUSHJ P,SETNM1
400446' 202 02 0 00 002155' MOVEM B,UCASE ;SET DICTIONARY NUMBER FOR INSERTION
400447' 606 00 0 00 040000 ASKP: TRNN FL,PICKUP
400450' 254 00 0 00 400467' JRST ASKQT
400451' 051 03 0 00 406467' OUTSTR [ASCIZ/ On what page do you want to pickup? /]
400452' 260 17 0 00 401601' PUSHJ P,INDEC ;READ DECIMAL FROM TERMINAL
400453' 327 02 0 00 400456' JUMPG B,SETPG1
OUTSTR [ASCIZ/ Default is page 1
400454' 051 03 0 00 406477' /]
400455' 201 02 0 00 000001 MOVEI B,1
400456' 202 02 0 00 011607' SETPG1: MOVEM B,PICKPG
400457' 260 17 0 00 404154' PUSHJ P,FLUTTY
400460' 051 03 0 00 406504' OUTSTR [ASCIZ/ and on what line do you want to start? /]
400461' 260 17 0 00 401601' PUSHJ P,INDEC ;READ DECIMAL LINE NUMBER
400462' 327 02 0 00 400465' JUMPG B,SETLO2
OUTSTR [ASCIZ/ Default is line 1
400463' 051 03 0 00 406515' /]
400464' 201 02 0 00 000001 MOVEI B,1
400465' 202 02 0 00 011610' SETLO2: MOVEM B,PICKLN
400466' 260 17 0 00 404154' PUSHJ P,FLUTTY
400467' 606 00 0 00 600000 ASKQT: TRNN FL,TRAIN!QTRAIN
400470' 263 17 0 00 000000 POPJ P,
400471' 051 03 0 00 406522' OUTSTR [ASCIZ/ Dictionary number for unrecognized words: /]
400472' 260 17 0 00 405402' PUSHJ P,SETNM1
400473' 202 02 0 00 010773' MOVEM B,TRDNUM ;DICT. # FOR TRAINING SET
400474' 200 01 0 02 010660' MOVE A,NDICTI(B) ;NUMBER OF WORDS IN TRAINING
400475' 202 01 0 00 010774' MOVEM A,NTRDCT ; DICT AT BEGINNING
400476' 402 00 0 00 010775' SETZM NQTRN
400477' 263 17 0 00 000000 POPJ P,
400500' SWHLPM: ASCIZ /
400500' 015 012 124 040 040 T Training mode
400501' 124 162 141 151 156
400502' 151 156 147 040 155
400503' 157 144 145 015 012 Q Q-Training mode
400504' 121 040 040 121 055
400505' 124 162 141 151 156
400506' 151 156 147 040 155
400507' 157 144 145 015 012 N No Suffix removal
400510' 116 040 040 116 157
400511' 040 123 165 146 146
400512' 151 170 040 162 145
400513' 155 157 166 141 154
400514' 015 012 101 040 040 A No Prefix removal
400515' 116 157 040 120 162
400516' 145 146 151 170 040
400517' 162 145 155 157 166
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-32
SPELL MAC 17-JAN-79 22:25 RSWIT READ MODE SWITCHES FROM USER TERMINAL
400520' 141 154 015 012 125 U Upper case words are special
400521' 040 040 125 160 160
400522' 145 162 040 143 141
400523' 163 145 040 167 157
400524' 162 144 163 040 141
400525' 162 145 040 163 160
400526' 145 143 151 141 154
400527' 015 012 120 040 040 P Pickup mode
400530' 120 151 143 153 165
400531' 160 040 155 157 144
400532' 145 015 012 015 012 Switches: /
400533' 123 167 151 164 143
400534' 150 145 163 072 040
400535' 040 000 000 000 000
SUBTTL THE LOOP WHERE ALL THE WORK GETS DONE.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-33
SPELL MAC 17-JAN-79 22:25 THE LOOP WHERE ALL THE WORK GETS DONE.
COMMENT %
This file depicts what happens to a word as it is checked
and corrected by the spelling checker.
<begin>
I
V
O_--------------------------------------_O
I ^
V I
---------------------------- I
I I I
O_-(if eof)_----I read next word I I
I I I I
I I lookup in dictionary I--(if success: win)----->O
I I I ^
I I (failure) I I
I I I I
I I lookup as misspelling I--(if success: correct)->O
I I I ^
I I (failure) I I
I I I I
I I call endtst I--(if success: win)----->O
I I I ^
I I (failure) I I
I I I I
I I call prefix I--(if success: win)----->O
I I I ^
I I (failure) I I
I I I I
I I call tryfix I I
I I I I
I I (correct/accept word) I I
I ---------------------------- I
I I I
I V I
I O--------------------------------------->O
I
V
O-------------------------->O
I
V
----------------------------
I I
I end sequence I
I I
----------------------------
%
400536' LOOP: ICOUNT^
400536' 260 17 0 00 400604' PUSHJ P,GETLIN
400537' 254 00 0 00 400543' JRST FLOOP ;EOF ON DATA
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-34
SPELL MAC 17-JAN-79 22:25 THE LOOP WHERE ALL THE WORK GETS DONE.
400540' 260 17 0 00 400706' PUSHJ P,CHKLIN ;CHECK/CORRECT LINE
400541' 260 17 0 00 401146' PUSHJ P,PUTLIN ;OUTPUT LINE
400542' 254 00 0 00 400536' JRST LOOP
400543' FLOOP:
400543' 332 00 0 00 002121' IFE TENEX, < SKIPE BAKFLG ;CREATING .BAK?
400544' 254 00 0 00 400323' JRST DOBAK > ;YES. MDA 790112
400545' 070 15 0 00 000000 CLOSE DATA, ;YOU KNOW WHAT TO DO
400546' 071 15 0 00 000000 RELEAS DATA,
400547' 602 00 0 00 000100 TRNE FL,NOCORR
400550' 254 00 0 00 400555' JRST FLOOP1 ;JUMP IF NO CORRECTION FILE
400551' 070 16 0 00 000000 CLOSE CORR, ;CLOSE OUTPUT CHANNEL
400552' 063 16 0 00 740000 IFE TENEX,< STATZ CORR,740000 ;CHECK IT
400553' 254 00 0 00 404116' JRST DDE ;DEVICE DATA ERROR (OUTPUT) >
400554' 071 16 0 00 000000 RELEAS CORR,
400555' 602 00 0 00 000200 FLOOP1: TRNE FL,NOEXCP
400556' 254 00 0 00 400563' JRST FLOOP2
400557' 070 17 0 00 000000 CLOSE EXCP, ;CLOSE EXCEPTIONS
400560' 063 17 0 00 740000 IFE TENEX,< STATZ EXCP,740000 ;CHECK IT
400561' 254 00 0 00 404116' JRST DDE ;ERROR >
400562' 071 17 0 00 000000 RELEAS EXCP,
400563' 606 00 0 00 600000 FLOOP2: TRNN FL,TRAIN!QTRAIN
400564' 254 00 0 00 400603' JRST FLOOP4 ;NOT EITHER TRAINING
400565' 200 02 0 00 010773' MOVE B,TRDNUM ;TELL HIM HOW MANY WORDS WERE
400566' 200 01 0 02 010660' MOVE A,NDICTI(B) ; ADDED TO THE TRAINING
400567' 274 01 0 00 010774' SUB A,NTRDCT ; DICTIONARY
400570' 260 17 0 00 404132' PUSHJ P,DECPTR
400571' 051 03 0 00 406533' OUTSTR [ASCIZ/ words were added to dictionary #/]
400572' 200 01 0 00 010773' MOVE A,TRDNUM
400573' 260 17 0 00 404132' PUSHJ P,DECPTR
400574' 332 01 0 00 010775' SKIPE A,NQTRN
400575' 606 00 0 00 400000 TRNN FL,QTRAIN
400576' 254 00 0 00 400602' JRST FLOOP3
OUTSTR [ASCIZ/, of which,
400577' 051 03 0 00 406542' /]
400600' 260 17 0 00 404132' PUSHJ P,DECPTR ;IF QTRAINING, TELL HIM HOW MANY
400601' 051 03 0 00 406545' OUTSTR [ASCIZ/ possible misspellings were written in the exception file/]
400602' FLOOP3: OUTSTR [ASCIZ/.
400602' 051 03 0 00 406561' /]
400603' 263 17 0 00 000000 FLOOP4: POPJ P,
SUBTTL GETLIN READ A LINE OF DATA INTO LIBUF
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-35
SPELL MAC 17-JAN-79 22:25 GETLIN READ A LINE OF DATA INTO LIBUF
400604' GETLIN: ICOUNT^
400604' 402 00 0 00 011121' SETZM LIBUF
400605' 200 01 0 00 406562' MOVE A,[XWD LIBUF,LIBUF+1]
400606' 251 01 0 00 011520' BLT A,LOBUF+LINSIZ-1 ;CLEAR BOTH INPUT AND OUTPUT LINES
400607' 260 17 0 00 401511' PUSHJ P,RDDATA
400610' 263 17 0 00 000000 POPJ P, ;NON-SKIP AT EOF.
400611' 350 00 0 00 011605' AOS LINENO ;COUNT LINES
400612' 602 00 0 00 000002 TRNE FL,TECO ;ARE WE A TECO FILE?
400613' 254 00 0 00 400653' JRST GETLTC ;GET A TECO LINE
400614' 200 02 0 00 406563' MOVE B,[POINT 36,LIBUF] ;SET FOR WORD BY WORD
400615' 254 00 0 00 400623' JRST GETLN2 ;A IS SET WITH FIRST DATA
400616' GETLN1: ICOUNT^
400616' 550 01 0 00 000002 HRRZ A,B
400617' 301 01 0 00 011321' CAIL A,LIBUF+LINSIZ ;IS LIBUF FULL?
400620' 254 00 0 00 404200' JRST LOVFLW ;YES: COMPLAIN
400621' 260 17 0 00 401511' PUSHJ P,RDDATA ;READ DATA (SKIP RETURN)
400622' 263 17 0 00 000000 POPJ P, ;NOT GOOD MANNERS TO EOF
;IN THE MIDDLE OF A LINE
400623' GETLN2: ICOUNT^
400623' 136 01 0 00 000002 IDPB A,B ;SAVE THE DATA IN THE LINE
400624' 405 01 0 00 000377 ANDI A,377 ;MASK ALL BUT THE LAST 8 BITS
400625' 242 01 0 00 777777 LSH A,-1 ;A_THE FIFTH ASCIZ CHARACTER THAT HAD BEEN IN A,
;RIGHT JUSTIFIED IN A.
400626' 322 01 0 00 400631' JUMPE A,GETLN3 ;END OF A LINE IN SOS FORMAT
400627' 302 01 0 00 000012 CAIE A,LF ;OR LF WILL END A LINE
400630' 254 00 0 00 400616' JRST GETLN1 ;BACK FOR MORE OF THIS LINE
400631' GETLN3: ICOUNT^
400631' 200 01 0 00 406564' MOVE A,[XWD LIBUF,LOBUF]
400632' 251 01 0 00 011322' BLT A,LOBUF+1 ;COPY FIRST TWO MACHINE WORDS TO OUTPUT
;WE WILL USE ONLY THE FIRST 6 CHARACTERS
;THE LINE NUMBER AND THE TAB.
400633' 200 01 0 00 406565' MOVE A,[POINT 7,LIBUF+1,6] ;SET TO GRAB THE FIRST REAL
;CHARACTER BY ILDB.
400634' 202 01 0 00 011521' MOVEM A,INPTR ;SAVE AS THE "IN POINTER"
400635' 541 01 0 00 011322' HRRI A,LOBUF+1 ;FIX ADDRESS
400636' 202 01 0 00 011522' MOVEM A,OUTPTR ;SAVE THE OUT POINTER
400637' 606 00 0 00 040000 TRNN FL,PICKUP
400640' 254 00 0 00 403537' JRST CPOPJ1 ;AND GIVE A SKIP RETURN
400641' 200 01 0 00 011604' MOVE A,PAGENO
400642' 315 01 0 00 011607' CAMGE A,PICKPG
400643' 254 00 0 00 403537' JRST CPOPJ1
400644' 312 01 0 00 011607' CAME A,PICKPG
JRST [TRZ FL,PICKUP
400645' 254 00 0 00 406566' JRST CPOPJ1]
400646' 200 01 0 00 011121' MOVE A,LIBUF
400647' 620 01 0 00 000001 TRZ A,1
400650' 311 01 0 00 011610' CAML A,PICKLN
400651' 620 00 0 00 040000 TRZ FL,PICKUP
400652' 254 00 0 00 403537' JRST CPOPJ1
;FOR TECO LINES
400653' GETLTC: ICOUNT^
400653' 200 02 0 00 406570' MOVE B,[POINT 7,LIBUF]
400654' 254 00 0 00 400662' JRST GETEC1
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-36
SPELL MAC 17-JAN-79 22:25 GETLIN READ A LINE OF DATA INTO LIBUF
400655' GETTEC: ICOUNT^
400655' 550 01 0 00 000002 HRRZ A,B
400656' 301 01 0 00 011321' CAIL A,LIBUF+LINSIZ ;IS LIBUF FULL?
400657' 254 00 0 00 404200' JRST LOVFLW ;YES: COMPLAIN
400660' 260 17 0 00 401511' PUSHJ P,RDDATA
400661' 263 17 0 00 000000 POPJ P,
400662' GETEC1: ICOUNT^
400662' 136 01 0 00 000002 IDPB A,B
400663' 302 01 0 00 000012 CAIE A,LF
400664' 306 01 0 00 000014 CAIN A,FF
400665' 254 00 0 00 400667' JRST .+2
400666' 254 00 0 00 400655' JRST GETTEC
400667' 200 01 0 00 406570' MOVE A,[POINT 7,LIBUF]
400670' 202 01 0 00 011521' MOVEM A,INPTR
400671' 541 01 0 00 011321' HRRI A,LOBUF
400672' 202 01 0 00 011522' MOVEM A,OUTPTR
400673' 606 00 0 00 040000 TRNN FL,PICKUP ;PICKUP IN PROGRESS?
400674' 254 00 0 00 403537' JRST CPOPJ1 ;NOPE. RETURN NOW
400675' 200 01 0 00 011604' MOVE A,PAGENO
400676' 315 01 0 00 011607' CAMGE A,PICKPG
400677' 254 00 0 00 403537' JRST CPOPJ1 ;NOT YET TO THE RIGHT PAGE
400700' 312 01 0 00 011607' CAME A,PICKPG
400701' 254 00 0 00 400704' JRST GETEC2 ;BEYOND PICKUP PAGE. CLEAR PICKUP.
400702' 200 01 0 00 011605' MOVE A,LINENO
400703' 311 01 0 00 011610' CAML A,PICKLN
400704' 620 00 0 00 040000 GETEC2: TRZ FL,PICKUP
400705' 254 00 0 00 403537' JRST CPOPJ1
SUBTTL CHKLIN CHECK EACH WORD FROM THE LINE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-37
SPELL MAC 17-JAN-79 22:25 CHKLIN CHECK EACH WORD FROM THE LINE
400706' CHKLIN: ICOUNT^
400706' 620 00 0 00 000010 TRZ FL,ERRLIN ;NO ERROR YET
IFN STANSW,< TLNE FL,IIISW ;DD IS TOO SLOW FOR THIS?
PUSHJ P,DPGL ;DISPLAY PAGE/LINE NUMBER >
400707' CHKLN1: ICOUNT^
400707' 260 17 0 00 401334' PUSHJ P,LDWORD ;GET A WORD
400710' 254 00 0 00 400721' JRST CHKLN2 ;NOT A WORD
400711' 602 00 0 00 140000 TRNE FL,SHUTUP+PICKUP
400712' 254 00 0 00 400717' JRST CHKL1A ;DON'T BOTHER
400713' 260 17 0 00 404332' PUSHJ P,MATCH ;LOOK FOR IT
400714' 254 00 0 00 400730' JRST CHKLN3 ;WASN'T THERE
400715' 254 00 0 00 401110' JRST DOMISS ;FOUND AS A MISSPELLING
400716' 350 00 0 00 010770' AOS NWEX ;COUNT EXACT MATCH
400717' CHKL1A: ICOUNT^
400717' 260 17 0 00 401231' PUSHJ P,COPYIO ;COPY TO OUTPUT
400720' 254 00 0 00 400707' JRST CHKLN1 ;BACK FOR THE REST
400721' CHKLN2: ICOUNT^
400721' 260 17 0 00 401231' PUSHJ P,COPYIO
400722' 322 01 0 00 403540' JUMPE A,CPOPJ ;SUPER NULL, EO LINE
400723' 306 01 0 00 000014 CAIN A,14 ;CHECK FOR FF
JRST [AOS PAGENO ;COUNT ANOTHER PAGE.
SETZM LINENO
400724' 254 00 0 00 406571' POPJ P,]
400725' 306 01 0 00 000012 CAIN A,12
400726' 263 17 0 00 000000 POPJ P, ;LF - RETURN TO LOOP FOR CALL TO PUTLIN
400727' 254 00 0 00 400707' JRST CHKLN1 ;BACK FOR THE REST OF THE LINE
;HERE WHEN WORD LOOKUP FAILED.
400730' CHKLN3: ICOUNT^
400730' 260 17 0 00 401243' PUSHJ P,CONVRT ;MAKE ASCII APPEAR IN WORDIX, WE'LL NEED IT
400731' 332 00 0 00 002155' SKIPE UCASE ;UPPER CASE ACCEPTANCE?
400732' 607 00 0 00 000001 TLNN FL,UPPER ;YES. WAS IT REALLY UPPERCASE?
400733' 254 00 0 00 400743' JRST CHKL3A ;NOT UPPERCASE OR NOT ACCEPTING UC (NORMAL)
400734' 334 11 0 00 002155' SKIPA K,UCASE
400735' 200 11 0 00 010773' CHKL3B: MOVE K,TRDNUM ;TRAINING DICTIONARY NUMBER
400736' 202 11 0 00 011606' MOVEM K,IDNUM ;SET DICTIONARY NUMBER
400737' 260 17 0 00 404273' PUSHJ P,HASHCP
400740' 260 17 0 00 404401' PUSHJ P,INSERT ;ADD WORD TO TRAINING SET OR UC SET
400741' 350 00 0 00 010765' AOS NWI ;COUNT WORD INSERTED
400742' 254 00 0 00 400717' JRST CHKL1A
400743' 402 00 0 00 011526' CHKL3A: SETZM CANDID ;ZERO THE CANDIDATE COUNT
400744' 620 00 0 00 003000 TRZ FL,PREWIN!SUFWIN
400745' 260 17 0 00 401640' PUSHJ P,ENDTST ;TRY REMOVING ENDINGS
400746' 254 00 0 00 400751' JRST CHKL3E ;FAILED TO FIND WORD
400747' 254 00 0 00 401061' JRST CHKL3D ;RECONSTRUCTED CANDIDATE FORMED
400750' 254 00 0 00 400754' JRST CHKL3C ;ACCEPT WORD - ANNOUNCE WON VIA AFFIX HEUR.
400751' 260 17 0 00 402612' CHKL3E: PUSHJ P,PREFIX ;TRY REMOVING PREFIXES AND ENDINGS TOO.
400752' 254 00 0 00 401061' JRST CHKL3D ;NO THERE'S NO SIMPLE ANSWER
400753' 254 00 0 00 401061' JRST CHKL3D ;RECONSTRUCTED CANDIDATE FORMED
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-38
SPELL MAC 17-JAN-79 22:25 CHKLIN CHECK EACH WORD FROM THE LINE
400754' 350 00 0 00 010767' CHKL3C: AOS NWAF ;COUNT AFFIX-MATCH
400755' 602 00 0 00 600200 TRNE FL,TRAIN!QTRAIN!NOEXCP
400756' 254 00 0 00 400717' JRST CHKL1A ;IF TRAINING, DON'T WRITE EXCEPTIONS
;HERE WE WRITE IN THE EXCEPTION FILE EACH WORD THAT MATCHED VIA
;AFFIX-STRIPPING. WE WRITE THE WORD ITSELF AND ITS DERIVATION, WHICH
;INFORMATION IS CONTAINED IN STEM AND THE PREFIX/SUFFIX STACKS.
400757' 201 02 0 00 406253' MOVEI B,[ASCIZ/ /] ;A COUPLE OF SPACES FOR READABILITY
400760' 260 17 0 00 401202' PUSHJ P,WRSEXC
400761' 201 02 0 00 011004' MOVEI B,WORDIX
400762' 260 17 0 00 401202' PUSHJ P,WRSEXC
400763' 201 02 0 00 000014 MOVEI B,14 ;SPACE OUT TO COLUMN 16
400764' 274 02 0 00 000005 SUB B,W
400765' 323 02 0 00 400771' JUMPLE B,SPDONE
400766' 201 01 0 00 000040 MOVEI A," "
400767' 260 17 0 00 401211' PUSHJ P,WREXCP
400770' 367 02 0 00 400767' SOJG B,.-1
400771' 201 02 0 00 406574' SPDONE: MOVEI B,[ASCIZ/ = /]
400772' 260 17 0 00 401202' PUSHJ P,WRSEXC
400773' 201 02 0 00 011064' MOVEI B,PRESTK ;COPY OUT ANY PREFIXES
400774' 622 00 0 00 002000 TRZE FL,PREWIN ;SKIP PREFIX-PRINTING IF NONE
400775' 336 00 0 02 000000 PLOOP: SKIPN (B)
400776' 254 00 0 00 401004' JRST PDONE ;NO MORE PREFIXES
400777' 200 03 0 00 406575' MOVE C,[POINT 5,(B)]
401000' 134 01 0 00 000003 PCOPY: ILDB A,C
JUMPE A,[ MOVEI A,"+"
PUSHJ P,WREXCP
401001' 322 01 0 00 406576' AOJA B,PLOOP]
401002' 260 17 0 00 401051' PUSHJ P,COPY5
401003' 254 00 0 00 401000' JRST PCOPY
401004' 205 02 0 00 440500 PDONE: MOVSI B,(POINT 5,0)
401005' 540 02 0 00 011063' HRR B,STEM ;BYTE PTR TO STEM
401006' 134 01 0 00 000002 STEMLP: ILDB A,B
401007' 322 01 0 00 401012' JUMPE A,STEMDN
401010' 260 17 0 00 401051' PUSHJ P,COPY5
401011' 254 00 0 00 401006' JRST STEMLP
401012' 626 00 0 00 001000 STEMDN: TRZN FL,SUFWIN ;SKIP SUFFIX-PRINTING IF NO SUFFIX
401013' 254 00 0 00 401056' JRST SUFDON
401014' 621 00 0 00 000600 CLRZA: TLZ FL,ADDBIT!ZAPBIT ;CLEAR ADD/ZAP BITS
401015' 262 13 0 00 000002 SUFPOP: POP M,B ;POP LETTER FROM SUFFIX STACK
401016' 321 02 0 00 401056' JUMPL B,SUFDON ;END OF STACK MARKED WITH -1
401017' 322 02 0 00 401014' JUMPE B,CLRZA ;0 MEANS A BREAK
401020' 626 02 0 00 000040 TRZN B,40 ;SKIP IF AN ADDED LETTER
401021' 254 00 0 00 401041' JRST ADDING
401022' 621 00 0 00 000200 TLZ FL,ADDBIT ;RESET ADDING-BIT
401023' 663 00 0 00 000400 TLOE FL,ZAPBIT ;AND SET ZAPPING-BIT
401024' 254 00 0 00 401046' JRST WRLET
401025' 201 01 0 00 000055 MOVEI A,"-" ;NEED TO WRITE A "-" FIRST
401026' 260 17 0 00 401211' PUSHJ P,WREXCP
401027' 261 17 0 00 406242' PUSH P,[0] ;NEED TO REVERSE ORDER OF ZAPPED LETTERS
401030' 261 17 0 00 000002 PUSH P,B ;BY MOVING THEM FROM M-STACK TO P-STACK
401031' 262 13 0 00 000002 POP M,B ;THEN COPYING FROM P-STACK TO EXCP FILE
401032' 622 02 0 00 000040 TRZE B,40
401033' 254 00 0 00 401030' JRST .-3
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-39
SPELL MAC 17-JAN-79 22:25 CHKLIN CHECK EACH WORD FROM THE LINE
401034' 261 13 0 00 000002 PUSH M,B
401035' 262 17 0 00 000001 POP P,A
401036' 322 01 0 00 401014' JUMPE A,CLRZA
401037' 260 17 0 00 401051' PUSHJ P,COPY5
401040' 254 00 0 00 401035' JRST .-3
401041' 621 00 0 00 000400 ADDING: TLZ FL,ZAPBIT
401042' 663 00 0 00 000200 TLOE FL,ADDBIT
401043' 254 00 0 00 401046' JRST WRLET
401044' 201 01 0 00 000053 MOVEI A,"+"
401045' 260 17 0 00 401211' PUSHJ P,WREXCP
401046' 200 01 0 00 000002 WRLET: MOVE A,B
401047' 260 17 0 00 401051' PUSHJ P,COPY5
401050' 254 00 0 00 401015' JRST SUFPOP ;BACK FOR ANOTHER
401051' 306 01 0 00 000033 COPY5: CAIN A,APOS
401052' 334 01 0 00 406601' SKIPA A,["'"]
401053' 271 01 0 00 000100 ADDI A,"A"-1
401054' 260 17 0 00 401211' PUSHJ P,WREXCP
401055' 263 17 0 00 000000 POPJ P,
401056' 201 02 0 00 400000' SUFDON: MOVEI B,CRLF
401057' 260 17 0 00 401202' PUSHJ P,WRSEXC
401060' 254 00 0 00 400717' JRST CHKL1A
401061' 602 00 0 00 200000 CHKL3D: TRNE FL,TRAIN ;SKIP UNLESS WE ARE TRAINING
401062' 254 00 0 00 400735' JRST CHKL3B ;INSERT IN TRAINING SET
401063' 602 00 0 00 400000 TRNE FL,QTRAIN
401064' 254 00 0 00 401076' JRST CHKLN5 ;OMIT EXCEPTION FILE IN Q-TRAIN
401065' 260 17 0 00 401101' PUSHJ P,PERLIN ;PUBLISH ERROR LINE (INCL III CASE)
401066' 201 02 0 00 011004' MOVEI B,WORDIX
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401067' 051 03 0 02 000000 OUTSTR (B)
401070' 260 17 0 00 401202' PUSHJ P,WRSEXC
401071' 201 02 0 00 406253' MOVEI B,[ASCIZ / /]
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401072' 051 03 0 02 000000 OUTSTR (B)
401073' 201 02 0 00 400000' MOVEI B,CRLF
401074' 260 17 0 00 401202' PUSHJ P,WRSEXC
401075' 606 00 0 00 100100 TRNN FL,NOCORR+SHUTUP ;SKIP IF HE DOESN'T WANT IT
401076' 260 17 0 00 404504' CHKLN5: PUSHJ P,TRYFIX ;TRY TO FIX IT
401077' 260 17 0 00 401231' PUSHJ P,COPYIO ;WORD WAS ACCEPTED (A, I, X)
401100' 254 00 0 00 400707' JRST CHKLN1 ;WORD WAS CHANGED (R,C) OR NEW DICT (L)
;PUBLISH ERROR LINE (TO TTY AND TO EXCEPTIONS)
401101' 662 00 0 00 000010 PERLIN: TROE FL,ERRLIN ;LINE DONE BEFORE?
401102' 254 00 0 00 401107' JRST PERLN1 ;YES.
401103' 260 17 0 00 401305' PUSHJ P,PPAGE ;PUBLISH PAGE
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401104' 051 03 0 00 011121' OUTSTR LIBUF ;PUBLISH LINE
401105' 201 02 0 00 011121' MOVEI B,LIBUF
401106' 260 17 0 00 401202' PUSHJ P,WRSEXC ;IN EXCEPTION FILE TOO
401107' PERLN1:
IFN STANSW,< TLNE FL,DDDSW ;DISPLAY PAGE/LINE ON DD
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-40
SPELL MAC 17-JAN-79 22:25 CHKLIN CHECK EACH WORD FROM THE LINE
PUSHJ P,DPGL
TLNE FL,IIISW!DDDSW
PUSHJ P,DPYLIN ;DISPLAY SPECIAL IF ON III>
401107' 263 17 0 00 000000 POPJ P,
;HERE WHEN WE'VE FOUND A MISSPELLING AND KNOW THE CORRECTION
401110' 602 00 0 00 600000 DOMISS: TRNE FL,QTRAIN!TRAIN ;SKIP IF NOT TRAINING
401111' 254 00 0 00 400730' JRST CHKLN3
401112' 260 17 0 00 401243' PUSHJ P,CONVRT ;5BIT FROM WORDIN TO 7BIT IN WORDIX
401113' 550 06 0 06 777776 HRRZ X,-2(X) ;GET POINTER TO THE CORRECTION.
401114' 271 06 0 00 000001 ADDI X,1 ;POINT DIRECTLY AT THE TEXT
401115' 202 06 0 00 011603' MOVEM X,CANDBX
401116' 260 17 0 00 401101' PUSHJ P,PERLIN ;PRINT ERROR LINE
401117' 201 02 0 00 011004' MOVEI B,WORDIX
401120' 051 03 0 02 000000 OUTSTR (B)
401121' 260 17 0 00 401202' PUSHJ P,WRSEXC
401122' 201 02 0 00 406602' MOVEI B,[ASCIZ / ==> /]
401123' 051 03 0 02 000000 OUTSTR (B)
401124' 260 17 0 00 401202' PUSHJ P,WRSEXC
401125' 205 10 0 00 440500 MOVSI Z,440500
401126' 540 10 0 00 011603' HRR Z,CANDBX
401127' 260 17 0 00 401244' PUSHJ P,CONVRZ ;(CANDBX) TO WORDIX, 5BIT TO 7BIT
401130' 201 02 0 00 011004' MOVEI B,WORDIX
401131' 051 03 0 02 000000 OUTSTR (B)
401132' 260 17 0 00 401202' PUSHJ P,WRSEXC
401133' 607 00 0 00 000010 TLNN FL,ODD
401134' 254 00 0 00 401140' JRST DOMIS1
401135' 201 02 0 00 406604' MOVEI B,[ASCIZ / Corrected word may have some letters in the wrong case /]
401136' 051 03 0 02 000000 OUTSTR (B)
401137' 260 17 0 00 401202' PUSHJ P,WRSEXC
401140' 201 02 0 00 400000' DOMIS1: MOVEI B,CRLF
401141' 051 03 0 02 000000 OUTSTR (B)
401142' 260 17 0 00 401202' PUSHJ P,WRSEXC
401143' 260 17 0 00 405063' PUSHJ P,TRFXR2 ;SUBSTITUTE THE CORRECTION
401144' 255 00 0 00 000000 JFCL ;ALWAYS SKIPS
401145' 254 00 0 00 400707' JRST CHKLN1
SUBTTL PUTLIN WRITE LINE TO CORRECTION FILE. CONVRT,CONVRZ,PPAGE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-41
SPELL MAC 17-JAN-79 22:25 PUTLIN WRITE LINE TO CORRECTION FILE. CONVRT,CONVRZ,PPAGE
401146' 602 00 0 00 000100 PUTLIN: TRNE FL,NOCORR
401147' 263 17 0 00 000000 POPJ P, ;AVOID NEEDLESS HASSLE
401150' 602 00 0 00 000002 TRNE FL,TECO
401151' 254 00 0 00 401162' JRST PUTLN2 ;CHARACTER AT A TIME FOR NON-SOS
401152' 200 02 0 00 406620' MOVE B,[POINT 36,LOBUF]
401153' 134 01 0 00 000002 PUTLN1: ILDB A,B
401154' 260 17 0 00 401173' PUSHJ P,WCORR0
401155' 405 01 0 00 000376 ANDI A,376 ;NULL CHARACTER AT END OF WORD?
401156' 322 01 0 00 403540' JUMPE A,CPOPJ
401157' 302 01 0 00 000024 CAIE A,12*2 ;OR LF AT END OF WORD? (SHIFTED 1 BIT)
401160' 254 00 0 00 401153' JRST PUTLN1
401161' 263 17 0 00 000000 POPJ P,
;FOR TECO LINES
401162' 200 02 0 00 406621' PUTLN2: MOVE B,[POINT 7,LOBUF]
401163' 134 01 0 00 000002 PUTLN3: ILDB A,B
401164' 260 17 0 00 401173' PUSHJ P,WCORR0
401165' 302 01 0 00 000012 CAIE A,LF
401166' 306 01 0 00 000014 CAIN A,FF
401167' 263 17 0 00 000000 POPJ P,
401170' 254 00 0 00 401163' JRST PUTLN3
;WRITE A BYTE IN THE CORRECTION FILE
401171' 602 00 0 00 000100 WRCORR: TRNE FL,NOCORR
401172' 263 17 0 00 000000 POPJ P,
401173' WCORR0: ;[SOS]{
IFN TENEX,< TRNE FL,TECO
JRST WCORR2 ; NON-SOS
PUSH P,A
MOVNI A,4 ; SPECIAL ACCOUNTING FOR SOS FILES
ADDM A,CORRBF+2
POP P,A
WCORR2: >
401173' 373 00 0 00 002154' SOSLE CORRBF+2 ;[SOS]}
401174' 254 00 0 00 401200' JRST WCORR1
401175' 067 16 0 00 000000 IFE TENEX,< OUTPUT CORR,
401176' 063 16 0 00 740000 STATZ CORR,740000
401177' 254 00 0 00 404116' JRST DDE >
IFN TENEX,< MOVEI K,CORRBF
PUSHJ P,@7(K) >
IFN TENEX,< ;[SOS]{
TRNE FL,TECO ; HAVE WE AN SOS FILE?
JRST WCORR1 ; NO
PUSH P,A
MOVSI A,(<POINT 36,>) ; YES, SETUP WORD POINTER
HLLM A,CORRBF+1
POP P,A> ;[SOS]}
401200' 136 01 0 00 002153' WCORR1: IDPB A,CORRBF+1
401201' 263 17 0 00 000000 POPJ P,
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-42
SPELL MAC 17-JAN-79 22:25 PUTLIN WRITE LINE TO CORRECTION FILE. CONVRT,CONVRZ,PPAGE
;WRITE A STRING (PTR IN B) IN THE EXCEPTION FILE
401202' 505 02 0 00 440700 WRSEXC: HRLI B,(<POINT 7,0>)
401203' 602 00 0 00 000200 TRNE FL,NOEXCP
401204' 263 17 0 00 000000 POPJ P,
401205' 134 01 0 00 000002 WRSEX0: ILDB A,B
401206' 322 01 0 00 403540' JUMPE A,CPOPJ
401207' 260 17 0 00 401213' PUSHJ P,WEXCP0
401210' 254 00 0 00 401205' JRST WRSEX0
;WRITE A BYTE IN THE EXCEPTION FILE
401211' 602 00 0 00 000200 WREXCP: TRNE FL,NOEXCP
401212' 263 17 0 00 000000 POPJ P,
401213' 373 00 0 00 002151' WEXCP0: SOSLE EXCPBF+2
401214' 254 00 0 00 401220' JRST WEXCP1
401215' 067 17 0 00 000000 IFE TENEX,< OUTPUT EXCP,
401216' 063 17 0 00 740000 STATZ EXCP,740000
401217' 254 00 0 00 404116' JRST DDE >
IFN TENEX,< MOVEI K,EXCPBF
PUSHJ P,@7(K) >
401220' 136 01 0 00 002150' WEXCP1: IDPB A,EXCPBF+1
401221' 263 17 0 00 000000 POPJ P,
;WRITE A BYTE IN THE DICTIONARY FILE
401222' WDICT: ICOUNT^
401222' 373 00 0 00 002143' SOSLE DICTBF+2
401223' 254 00 0 00 401227' JRST WDICT1
401224' 067 14 0 00 000000 IFE TENEX,< OUTPUT DICT,
401225' 063 14 0 00 740000 STATZ DICT,740000
401226' 254 00 0 00 404116' JRST DDE >
IFN TENEX,< MOVEI K,DICTBF
PUSHJ P,@7(K) >
401227' 136 01 0 00 002142' WDICT1: IDPB A,DICTBF+1
401230' 263 17 0 00 000000 POPJ P,
;COPY FROM LIBUF (INPTR) TO LOBUF (OUTPTR) TIL INPTR=INPTR1
401231' COPYIO: ICOUNT^
401231' 200 10 0 00 011521' MOVE Z,INPTR
401232' COPYI1: ICOUNT^
401232' 550 01 0 00 011522' HRRZ A,OUTPTR
401233' 301 01 0 00 011521' CAIL A,LOBUF+LINSIZ ;IS LOBUF FULL?
401234' 254 00 0 00 404200' JRST LOVFLW ;YES: COMPLAIN
401235' 134 01 0 00 000010 ILDB A,Z
401236' 136 01 0 00 011522' IDPB A,OUTPTR
401237' 312 10 0 00 011523' CAME Z,INPTR1
401240' 254 00 0 00 401232' JRST COPYI1
401241' 202 10 0 00 011521' MOVEM Z,INPTR
401242' 263 17 0 00 000000 POPJ P,
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-43
SPELL MAC 17-JAN-79 22:25 PUTLIN WRITE LINE TO CORRECTION FILE. CONVRT,CONVRZ,PPAGE
;COPY 5-BIT IN WORDIN TO ASCIZ IN WORDIX, USING THE CASE INFO IN CASEBT
401243' CONVRT: ICOUNT^
401243' 200 10 0 00 406622' MOVE Z,[POINT 5,WORDIN]
401244' 200 07 0 00 406623' CONVRZ: MOVE Y,[POINT 7,WORDIX] ;ENTER HERE WITH Z SETUP.
401245' 607 00 0 00 000010 TLNN FL,ODD ;ODD CASE?
401246' 254 00 0 00 401267' JRST CONVRA ;NO. USE SIMPLE RULES FOR DISPLAY
401247' 261 17 0 00 000002 PUSH P,B
401250' 261 17 0 00 000003 PUSH P,C
401251' 200 02 0 00 406624' MOVE B,[POINT 1,CASEBT]
401252' 134 01 0 00 000010 CONVR1: ILDB A,Z
401253' 322 01 0 00 401262' JUMPE A,CONVR2
401254' 134 03 0 00 000002 ILDB C,B ;GET CASE BIT FOR THIS CHAR
401255' 306 01 0 00 000033 CAIN A,APOS
JRST [MOVEI A,"'"
401256' 254 00 0 00 406625' JRST CONVR2]
401257' 271 01 0 00 000100 ADDI A,"A"-1
401260' 322 03 0 00 401262' JUMPE C,CONVR2
401261' 271 01 0 00 000040 ADDI A," " ;SET LOWERCASE
401262' 136 01 0 00 000007 CONVR2: IDPB A,Y
401263' 326 01 0 00 401252' JUMPN A,CONVR1
401264' 262 17 0 00 000003 POP P,C
401265' 262 17 0 00 000002 POP P,B
401266' 263 17 0 00 000000 POPJ P,
401267' 261 17 0 00 000000 CONVRA: PUSH P,FL
401270' 134 01 0 00 000010 CONVA1: ILDB A,Z
401271' 322 01 0 00 401301' JUMPE A,CONVA2
401272' 306 01 0 00 000033 CAIN A,APOS
JRST [MOVEI A,"'"
401273' 254 00 0 00 406627' JRST CONVA2]
401274' 271 01 0 00 000100 ADDI A,"A"-1
401275' 603 00 0 00 000004 TLNE FL,LOWER ;LOWERCASE?
401276' 271 01 0 00 000040 ADDI A," " ;YES. SET LOWERCASE
401277' 623 00 0 00 000002 TLZE FL,MIXED ;MIXED CASE?
401300' 661 00 0 00 000004 TLO FL,LOWER ;YES. AFTER FIRST CHARACTER SET LOWER
401301' 136 01 0 00 000007 CONVA2: IDPB A,Y
401302' 326 01 0 00 401270' JUMPN A,CONVA1
401303' 262 17 0 00 000000 POP P,FL
401304' 263 17 0 00 000000 POPJ P,
;PRINT PAGE AND LINE NUMBER ON TTY AND IN EXCEPTION FILE
401305' 201 02 0 00 406631' PPAGE: MOVEI B,[ASCIZ/Page /]
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401306' 051 03 0 02 000000 OUTSTR (B)
401307' 260 17 0 00 401202' PUSHJ P,WRSEXC
401310' 200 01 0 00 011604' MOVE A,PAGENO
401311' 260 17 0 00 401324' PUSHJ P,DECPB
401312' 606 00 0 00 000002 TRNN FL,TECO
401313' 254 00 0 00 401321' JRST PPAGE1 ;JUMP IF SOS FILE
401314' 201 02 0 00 406633' MOVEI B,[ASCIZ/:/]
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401315' 051 03 0 02 000000 OUTSTR (B)
401316' 260 17 0 00 401202' PUSHJ P,WRSEXC
401317' 200 01 0 00 011605' MOVE A,LINENO ;GET LINE NUMBER
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-44
SPELL MAC 17-JAN-79 22:25 PUTLIN WRITE LINE TO CORRECTION FILE. CONVRT,CONVRZ,PPAGE
401320' 260 17 0 00 401324' PUSHJ P,DECPB
401321' 201 02 0 00 400000' PPAGE1: MOVEI B,CRLF
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401322' 051 03 0 02 000000 OUTSTR (B)
401323' 254 00 0 00 401202' JRST WRSEXC ;WRITE IN EXCEPTION FILE AND RETURN
401324' DECPB: ICOUNT^
401324' 231 01 0 00 000012 IDIVI A,12
401325' 261 17 0 00 000002 PUSH P,B
401326' 332 00 0 00 000001 SKIPE A
401327' 260 17 0 00 401324' PUSHJ P,DECPB
401330' 262 17 0 00 000001 POP P,A
401331' 271 01 0 00 000060 ADDI A,"0"
IFN STANSW,< TLNN FL,IIISW!DDDSW>
401332' 051 01 0 00 000001 OUTCHR A
401333' 254 00 0 00 401211' JRST WREXCP
SUBTTL LDWORD LOAD WORD FROM INPUT LINE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-45
SPELL MAC 17-JAN-79 22:25 LDWORD LOAD WORD FROM INPUT LINE
;THIS VERSION DOESN'T ALLOW WORD-INITIAL OR WORD-FINAL APOSTROPHES.
;MAKES A TABLE, CASEBT, OF THE CASE OF EACH CHARACTER, TO ALLOW
;REASONABLE DISPLAYS LATER. ALSO, SETS A FLAG, ODD, IF WORD IS NOT
;UPPER,LOWER OR MIXED
;SKIP RETURN IF IT HAS GOBBLED A REAL WORD, NONSKIP RETURN IF
;NOT A WORD. (STRINGS OF LETTERS AND NUMBERS, LIKE "K9", ARE CONSIDERED
;NONWORDS.)
401334' LDWORD: ICOUNT^
401334' 621 00 0 00 000017 TLZ FL,ODD!UPPER!LOWER!MIXED ;ASSUME NOTHING ABOUT CASE
401335' 402 00 0 00 010776' SETZM WORDIN
401336' 200 10 0 00 406634' MOVE Z,[XWD WORDIN,WORDIN+1]
401337' 251 10 0 00 011003' BLT Z,WORDIN+5
401340' 402 00 0 00 011611' SETZM CASEBT ;CASE BITS
401341' 402 00 0 00 011612' SETZM CASEBT+1 ;ZERO = UPPER CASE, 1=LOWER
401342' 200 10 0 00 406624' MOVE Z,[POINT 1,CASEBT] ;POINTER TO CASEBT
401343' 202 10 0 00 011613' MOVEM Z,CASEPT ;SAVE IT.
401344' 200 10 0 00 011521' MOVE Z,INPTR
401345' 200 07 0 00 406622' MOVE Y,[POINT 5,WORDIN]
401346' 403 05 0 00 011017' SETZB W,LETCNT ;CHARACTER COUNT.
401347' 201 02 0 00 000000 LDWRD1: MOVEI B,0 ;ASSUME UPPERCASE
401350' 134 01 0 00 000010 ILDB A,Z ;READ A CHARACTER
401351' 301 01 0 00 000141 CAIL A,"A"+40
401352' 303 01 0 00 000172 CAILE A,"Z"+40
401353' 254 00 0 00 401355' JRST .+2 ;NOT LOWERCASE
401354' 344 02 0 00 401377' AOJA B,LDWRD2 ;ACCEPT LOWERCASE
401355' 301 01 0 00 000101 CAIL A,"A"
401356' 303 01 0 00 000132 CAILE A,"Z"
401357' 254 00 0 00 401361' JRST .+2 ;NOT A LETTER.
401360' 254 00 0 00 401377' JRST LDWRD2 ;UPPERCASE LETTER
401361' 302 01 0 00 000047 CAIE A,"'" ;APOSTROPHE?
401362' 254 00 0 00 401431' JRST LDWRD6 ;NOT A LETTER AT ALL. END OF A WORD?
401363' 607 00 0 00 000017 TLNN FL,ODD!UPPER!LOWER!MIXED ;IS "'", AT BEGINNING?
401364' 254 00 0 00 401440' JRST LDWRD7 ;YES - WE DON'T ALLOW THAT
401365' 200 01 0 00 000010 MOVE A,Z
401366' 134 01 0 00 000001 ILDB A,A ;GET NEXT CHR - IS IT A LETTER?
401367' 301 01 0 00 000101 CAIL A,"A"
401370' 303 01 0 00 000132 CAILE A,"Z"
401371' 254 00 0 00 401373' JRST .+2
401372' 254 00 0 00 401376' JRST LDWR1A ;YES, MEANING "'" IS INSIDE A WORD
401373' 301 01 0 00 000141 CAIL A,"A"+40
401374' 303 01 0 00 000172 CAILE A,"Z"+40
401375' 254 00 0 00 401433' JRST LDWR6A ;WE DON'T ALLOW WORD-FINAL EITHER
401376' 201 01 0 00 000033 LDWR1A: MOVEI A,APOS ;SET CODE FOR APOSTROPHE.
401377' 136 01 0 00 000007 LDWRD2: IDPB A,Y
BCHECK(Y,WORDIN+10)^
401400' 136 02 0 00 011613' IDPB B,CASEPT ;STUFF CASE BIT
401401' 202 10 0 00 011523' MOVEM Z,INPTR1 ;BYTE POINTER TO LAST BYTE (SO FAR) OF WORD.
401402' 271 05 0 00 000001 ADDI W,1 ;COUNT CHARACTER SEEN.
401403' 303 05 0 00 000050 CAILE W,50 ;CAN'T EXCEED 40 (DECIMAL) CHARACTERS
401404' 254 00 0 00 401454' JRST LDWRDX ;TELL USER.
401405' 607 00 0 00 000010 TLNN FL,ODD ;CASE HOPELESS ALREADY?
401406' 306 01 0 00 000033 CAIN A,APOS ;NO. APOSTROPHE?
401407' 254 00 0 00 401347' JRST LDWRD1 ;APOSTROPHE OR WORD CASE ALREADY SCREWED UP.
401410' 606 01 0 00 000040 TRNN A,40 ;SKIP IF LOWERCASE.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-46
SPELL MAC 17-JAN-79 22:25 LDWORD LOAD WORD FROM INPUT LINE
401411' 254 00 0 00 401424' JRST LDWRD4 ;UPPER
401412' 603 00 0 00 000006 TLNE FL,LOWER!MIXED ;LOWER SEEN. LOWER OR MIXED SET?
401413' 254 00 0 00 401347' JRST LDWRD1 ;YES. NO CHANGE NEEDED.
401414' 607 00 0 00 000001 TLNN FL,UPPER ;
401415' 254 00 0 00 401422' JRST LDWRD3 ;FIRST LETTER SEEN IN WORD. SET LOWER
401416' 372 00 0 00 011017' SOSE LETCNT
401417' 665 00 0 00 000010 LDWRD5: TLOA FL,ODD ;LOWERCASE SEEN AFTER MORE THAN 1 UPPERCASE.
401420' 641 00 0 00 000003 TLC FL,UPPER!MIXED ;LOWER SEEN AFTER PRECISELY 1 UPPER. MIXED_1 UPPER_0
401421' 254 00 0 00 401347' JRST LDWRD1 ;DONE.
401422' 661 00 0 00 000004 LDWRD3: TLO FL,LOWER ;SET LOWERCASE
401423' 254 00 0 00 401347' JRST LDWRD1
401424' 350 00 0 00 011017' LDWRD4: AOS LETCNT ;COUNT UPPERCASE CHARACTERS.
401425' 603 00 0 00 000006 TLNE MIXED!LOWER ;SKIP UNLESS SCREWED
401426' 254 00 0 00 401417' JRST LDWRD5 ;UPPER SEEN AFTER LOWER OR MIXED
401427' 661 00 0 00 000001 TLO FL,UPPER ;SET UPPERCASE SEEN
401430' 254 00 0 00 401347' JRST LDWRD1
401431' 607 00 0 00 000017 LDWRD6: TLNN FL,ODD!UPPER!LOWER!MIXED
401432' 254 00 0 00 401440' JRST LDWRD7 ;JUMP IF THIS IS NON-LETTER AT BEGINNING OF A WORD
401433' 603 00 0 00 000010 LDWR6A: TLNE FL,ODD ;IF CASE IS STRANGE,
401434' 621 00 0 00 000007 TLZ FL,MIXED!UPPER!LOWER ;MUST CLEAR BITS WHICH MAY HAVE BEEN LEFT ON
401435' 301 01 0 00 000060 CAIL A,"0" ;DIGITS MEAN NOT-WORDS BUT ARE NOT DELIMITERS.
401436' 303 01 0 00 000071 CAILE A,"9"
401437' 254 00 0 00 403537' JRST CPOPJ1 ;WE HAVE A DELIM. WE HAVE SEEN A WORD.
401440' 202 10 0 00 011523' LDWRD7: MOVEM Z,INPTR1 ;WHATEVER WE HAVE, IT'S NOT A WORD
;SO PUT THE POINTER PAST IT.
401441' 301 01 0 00 000101 CAIL A,"A" ;TEST FOR A DELIMITER
401442' 303 01 0 00 000172 CAILE A,"z"
401443' 254 00 0 00 401447' JRST LDWRD8 ;MAYBE A DELIM
401444' 303 01 0 00 000132 CAILE A,"Z"
401445' 301 01 0 00 000141 CAIL A,"a"
401446' 254 00 0 00 401452' JRST LDWRD9 ;NOT A DELIM
401447' 301 01 0 00 000060 LDWRD8: CAIL A,"0"
401450' 303 01 0 00 000071 CAILE A,"9"
401451' 263 17 0 00 000000 POPJ P, ;THIS IS A DELIM BUT NOT A WORD
401452' 134 01 0 00 000010 LDWRD9: ILDB A,Z ;NOT A DELIM
401453' 254 00 0 00 401440' JRST LDWRD7 ;FLUSH TO A DELIMITER
LDWRDX: MOVEI B,[ASCIZ/Error - input word too long - will be ignored
401454' 201 02 0 00 406635' /]
401455' 051 03 0 02 000000 OUTSTR (B)
401456' 606 00 0 00 600000 TRNN FL,TRAIN!QTRAIN
401457' 260 17 0 00 401202' PUSHJ P,WRSEXC ;WRITE IN EXCEPTIONS.
401460' 260 17 0 00 401243' LDWRX1: PUSHJ P,CONVRT ;MAKE THE OFFENDING WORD ASCII
401461' 201 02 0 00 011004' MOVEI B,WORDIX
401462' 051 03 0 02 000000 OUTSTR (B)
401463' 606 00 0 00 600000 TRNN FL,TRAIN!QTRAIN
401464' 260 17 0 00 401202' PUSHJ P,WRSEXC
401465' 200 10 0 00 011523' MOVE Z,INPTR1
401466' 134 01 0 00 000010 LDWRX2: ILDB A,Z ;NOT A DELIM
401467' 202 10 0 00 011523' MOVEM Z,INPTR1
401470' 051 01 0 00 000001 OUTCHR A
401471' 606 00 0 00 600000 TRNN FL,TRAIN!QTRAIN
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-47
SPELL MAC 17-JAN-79 22:25 LDWORD LOAD WORD FROM INPUT LINE
401472' 260 17 0 00 401211' PUSHJ P,WREXCP
401473' 301 01 0 00 000101 CAIL A,"A" ;TEST FOR A DELIMITER
401474' 303 01 0 00 000172 CAILE A,"z"
401475' 254 00 0 00 401501' JRST LDWRX3 ;MAYBE A DELIM
401476' 303 01 0 00 000132 CAILE A,"Z"
401477' 301 01 0 00 000141 CAIL A,"a"
401500' 254 00 0 00 401466' JRST LDWRX2 ;NOT A DELIM
401501' 301 01 0 00 000060 LDWRX3: CAIL A,"0"
401502' 303 01 0 00 000071 CAILE A,"9"
401503' 334 02 0 00 406647' SKIPA B,[CRLF] ;THIS IS A DELIM BUT NOT A WORD
401504' 254 00 0 00 401466' JRST LDWRX2
401505' 051 03 0 02 000000 OUTSTR (B)
401506' 606 00 0 00 600000 TRNN FL,TRAIN!QTRAIN
401507' 260 17 0 00 401202' PUSHJ P,WRSEXC
401510' 263 17 0 00 000000 POPJ P,
SUBTTL RDDATA THE READING ROUTINE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-48
SPELL MAC 17-JAN-79 22:25 RDDATA THE READING ROUTINE
401511' RDDATA: ;[SOS]{
IFN TENEX,< MOVNI A,4 ; SPECIAL ACCOUNTING FOR SOS
TRNN FL,TECO
ADDM A,DATABF+2>
401511' 373 00 0 00 002146' SOSLE DATABF+2 ;[SOS]}
401512' 254 00 0 00 401522' JRST RDATA1
401513' 066 15 0 00 000000 IFE TENEX,< INPUT DATA,
401514' 063 15 0 00 740000 STATZ DATA,740000
401515' 254 00 0 00 404176' JRST DIE
401516' 063 15 0 00 020000 STATZ DATA,20000
401517' 263 17 0 00 000000 POPJ P, >;IFE TENEX
IFN TENEX,< MOVEI K,DATABF
PUSHJ P,@7(K)
POPJ P, >;IFN TENEX
401520' 622 00 0 00 000001 TRZE FL,FRSTOP
401521' 254 00 0 00 401525' JRST CKTECO ;CHECK FOR A TECO FILE.
401522' RDATA1: ICOUNT^
IFN TENEX,< MOVSI A,(<POINT 36,>) ;[SOS]{
TRNN FL,TECO
HLLM A,DATABF+1> ;[SOS]}
401522' 134 01 0 00 002145' ILDB A,DATABF+1
401523' 322 01 0 00 401511' JUMPE A,RDDATA ;BACK FOR MORE IF NULL
401524' 254 00 0 00 403537' JRST CPOPJ1
401525' 201 01 0 00 000001 CKTECO: MOVEI A,1 ;SINCE WE ARE AT FIRSTOP, WE MIGHT AS
401526' 202 01 0 00 011604' MOVEM A,PAGENO ;WELL INITIALIZE THE PAGE COUNT
401527' 402 00 0 00 011605' SETZM LINENO ;AND ZERO THE LINE NUMBER
IFN TENEX,< MOVE A,@DATABF+1
TRNN A,1
TRO FL,TECO >
401530' 261 17 0 00 000002 IFE TENEX,< PUSH P,B
401531' 200 02 0 00 002145' MOVE B,DATABF+1
401532' 134 01 0 00 000002 ILDB A,B
401533' 602 01 0 00 000001 TRNE A,1
401534' 254 00 0 00 401565' JRST CKTEC8 ;SOS FILE. PRESERVE LINE NUMBERS
401535' 402 00 0 00 011120' SETZM TVE ;ASSUME NOT TV/E FORMAT
401536' 312 01 0 00 406650' CAME A,[ASCII/COMME/]
401537' 254 00 0 00 401543' JRST CKTEC9
401540' 134 01 0 00 000002 ILDB A,B
401541' 316 01 0 00 406651' CAMN A,[ASCII/NT /]
401542' 476 00 0 00 011120' SETOM TVE
401543' 660 00 0 00 000002 CKTEC9: TRO FL,TECO ;UNNUMBERED FILE. TECO OR TV/E FORMAT
401544' 201 01 0 00 000005 MOVEI A,5
401545' 222 01 0 00 002146' IMULM A,DATABF+2 ;MAKE WORD COUNT INTO CHAR COUNT
401546' 205 01 0 00 000700 MOVSI A,000700 ;WHEN ILDB HITS THIS YOU GET THE
;RIGHT BYTE, (FROM THE NEXT WD)
401547' 502 01 0 00 002145' HLLM A,DATABF+1 ;UPSET THE BYTE POINTERS
401550' 060 15 0 00 000001 SETSTS DATA,1 ;CHANGE MODES
;WE ALSO HAVE TO CHANGE THE MODE OF THE CORR CHANNEL
;SO THAT IT WILL ACCEPT CHARACTER AT A TIME BYTE POINTERS.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-49
SPELL MAC 17-JAN-79 22:25 RDDATA THE READING ROUTINE
401551' 606 00 0 00 000100 TRNN FL,NOCORR ;SKIP IF NO CORRECTION FILE.
401552' 060 16 0 00 000001 SETSTS CORR,1 ;HAVE TO SCREW AROUND WITH BYTE POINTERS
401553' 502 01 0 00 002153' HLLM A,CORRBF+1 ;SINCE OUTBUF HAS ALREADY SET THEM
401554' 336 00 0 00 011120' SKIPN TVE ;TVE FILE?
401555' 254 00 0 00 401565' JRST CKTEC8 ;NO.
OUTSTR [ASCIZ ?TV/E directory page will be deleted.
Page 2
401556' 051 03 0 00 406652' ?]
401557' 350 00 0 00 011604' AOS PAGENO
401560' 350 00 0 00 002146' AOS DATABF+2 ;MAKE THE COUNT BE 1 TOO BIG FOR RDDATA
401561' 260 17 0 00 401511' CKTEC0: PUSHJ P,RDDATA ;CALL MAIN READER AGAIN
JRST [OUTSTR [ASCIZ/Unexpected end of file while skipping the directory.
/]
POP P,B
401562' 254 00 0 00 406677' POPJ P,]
401563' 302 01 0 00 000014 CAIE A,14 ;FF YET?
401564' 254 00 0 00 401561' JRST CKTEC0 ;NO. READ MORE
401565' 262 17 0 00 000002 CKTEC8: POP P,B
>;IFE TENEX
401566' 602 00 0 00 040000 TRNE FL,PICKUP ;IF PICKUP
401567' 602 00 0 00 000002 TRNE FL,TECO ;AND NON-TECO (MEANING SOS) FILE
401570' 254 00 0 00 401575' JRST CKTEC4
401571' 200 01 0 00 011610' MOVE A,PICKLN ;NEED TO CONVERT PICKLN TO
401572' 200 03 0 00 406702' MOVE C,[ASCIZ /00000/] ;SOS-STYLE LINE NUMBER
401573' 260 17 0 00 401611' PUSHJ P,SOSCVT
401574' 202 03 0 00 011610' MOVEM C,PICKLN
401575' 336 00 0 00 011120' CKTEC4: SKIPN TVE ;SKIP IF TV/E FILE
401576' 254 00 0 00 401522' JRST RDATA1
401577' 402 00 0 00 011120' SETZM TVE
401600' 254 00 0 00 401511' JRST RDDATA ;FOR TV/E WE HAVE TO SOS THE COUNT AGAIN
401601' 201 02 0 00 000000 INDEC: MOVEI B,0
401602' 051 04 0 00 000001 INDEC1: INCHWL A
401603' 301 01 0 00 000060 CAIL A,"0"
401604' 303 01 0 00 000071 CAILE A,"9"
401605' 263 17 0 00 000000 POPJ P,
401606' 221 02 0 00 000012 IMULI B,12
401607' 271 02 0 01 777720 ADDI B,-"0"(A)
401610' 254 00 0 00 401602' JRST INDEC1
401611' 231 01 0 00 000012 SOSCVT: IDIVI A,12 ;CONVERT LINE NUMBER (IN A) TO
401612' 506 02 0 17 000000 HRLM B,(P) ;SOS-STYLE (IN C)
401613' 322 01 0 00 401615' JUMPE A,.+2
401614' 260 17 0 00 401611' PUSHJ P,SOSCVT
401615' 554 01 0 17 000000 HLRZ A,(P)
401616' 271 01 0 00 000060 ADDI A,"0"
401617' 242 03 0 00 000007 LSH C,7
401620' 242 01 0 00 000001 LSH A,1
401621' 434 03 0 00 000001 OR C,A
401622' 263 17 0 00 000000 POPJ P,
SUBTTL DESCRIPTION OF ENDTST
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-50
SPELL MAC 17-JAN-79 22:25 DESCRIPTION OF ENDTST
COMMENT/
SKIP RETURN SIGNIFIES THAT THE WORD IS ACCEPTED; NON SKIP MEANS
REJECTION. IN EITHER CASE, THE RETURN WILL BE MADE SO THAT THE
ORIGINAL WORD IS RESTORED (IN FIVEBIT) TO WORDIN.
These are the cases ENDTST aspires to handle. Lower
case letters are literal, V means vowel, C means consonant, and C2
means a consonant which may double before a suffix that begins with
a vowel (see ISC2). Once a stem is found, it is rejected if it is less
than 3 characters long, or if 3 characters, contains no vowel (or Y).
ENDFIXes
EDT.S: -s craps Cys -> Cies *candys
invalid -s plural *hashs
-'s John's
-es wrenches invalid -es plural
-Cy -> -Cies candies
EDT.G: -e -> -ing liking
-ing doing Ceing -> Cing *takeing
C2 doubling needed
-C2 -> -C2C2ing winning
EDT.T: (-est, -er, and -ed behave identically)
EDT.R:
EDT.D: -e -> -ed liked
-ed knocked Cyed -> Cied *relyed
C2 doubling needed
-Cy -> -Cied candied
-C2 -> -C2C2ed fitted
EDT.E: -ive restive
-e -> -ive abusive
EDT.H: -th sixth
-y -> -ieth twentieth
EDT.N: -e -> -en spoken
-en dampen
-C2 -> -C2C2en redden
-Ct -> -Ction rejection
-Vte -> -Vtion ignition
-y -> -ication magnification
EDT.Y: -ty loyalty, chatty
-e -> -ity activity
-ity formality
-ble -> -bility possibility
EDT.LY: -ble -> -bly probably
-ly lovely
-c -> -cally basically
EDT.SS: -ness kindness
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-51
SPELL MAC 17-JAN-79 22:25 DESCRIPTION OF ENDTST
-less heartless
-y -> -iness happiness
-y -> -iless penniless
/
SUBTTL ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-52
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
;RETURNS TO CALL+1 IF NO MATCH COULD BE ACHIEVED BY SUFFIX-STRIPPING
; +2 IF A RECONSTRUCTED WORD HAS BEEN PUT IN CANDBF
; (THIS CAN HAPPEN 2 WAYS: A STEM WAS RECOGNIZED AS A
; MISSPELLING, AND THE CORRECTION HAD THE PREFIXES
; AND SUFFIXES PUT BACK ON, OR A SPECIFIC ERROR WAS
; RECOGNIZED (E.G., DOUBLED-CONSONANT MISSING), AND
; THE SAME SORT OF THING WAS DONE.)
; +3 IF SUFFIX-STRIPPING ALLOWED A MATCH
;SETS UP M AS SUFFIX STACK POINTER
DEFINE GETLST(N) <LDB A,GETLBT+N(W)> ;LOAD A WITH LAST+NTH BYTE OF WORD
401623' ENDSRT: ICOUNT^
401623' 260 17 0 00 402552' PUSHJ P,ISSTEM ;MAKE SURE LEFT WITH VALID STEM
401624' 254 00 0 00 401637' JRST ENDFRT ;STEM NOT VALID!
401625' 350 00 0 17 000000 AOS (P) ;SET +3 RETURN
401626' 660 00 0 00 001000 TRO FL,SUFWIN ;FLAG SUFFIX REMOVAL WON
401627' 254 00 0 00 401636' JRST ENDSR1
401630' 200 01 0 00 406704' ENDFIX: MOVE A,[WORDIN,,RECON] ;MOVE THE "FIXED" WORD FROM
401631' 251 01 0 00 011116' BLT A,RECON+5 ;WORDIN TO RECON, AND FIX STEM
401632' 201 01 0 00 406707' MOVEI A,[RECON-1]+2 ;TO MAKE RECON LOOK LIKE A
401633' 202 01 0 00 011063' MOVEM A,STEM ;CORRECTION STRING
401634' 660 00 0 00 001000 ENDMSP: TRO FL,SUFWIN
401635' 260 17 0 00 402672' PUSHJ P,RECONS ;GO MAKE A RECONSTRUCTED WORD
401636' 350 00 0 17 000000 ENDSR1: AOS (P) ;SET +2 RETURN
401637' ENDFRT: ICOUNT ^ ;ON FAILURE, NO SKIP RETURN.
401637' 254 00 0 00 402406' JRST UNSVWD ;RESTORE WORD AND SIZE, RETURN
;ENTRY FOR SUFFIX REMOVAL
401640' ENDTST: ICOUNT^
401640' 606 00 0 00 010000 TRNN FL,NOSUFF ;SKIP SUFFIX TEST IF REQUESTED.
401641' 307 05 0 00 000003 CAIG W,3 ;IF TOO SMALL THEN
401642' 263 17 0 00 000000 POPJ P, ;RETURN QUICK WITH FAILURE
401643' 260 17 0 00 402401' PUSHJ P,SAVWD ;SAVE WORDIN AND W,(IN A PLACE KNOWN
;TO BUT A FEW).
401644' 200 13 0 00 406706' MOVE M,[IOWD SUFLEN,SUFSTK] ;INITIALIZE SUFFIX STACK
401645' 261 13 0 00 406707' PUSH M,[-1] ;MARK TOP OF STACK WITH -1
401646' ENDTG.: GETLST ^;GET LAST LETTER INTO A.
401646' 135 01 0 05 402412' LDB A,GETLBT+(W)
401647' 306 01 0 00 000023 CAIN A,S5 ;IS IT S?
401650' 254 00 0 00 401676' JRST EDT.S ;YES: GO CHECK FOR PLURAL/POSSESSIVE
401651' ENDTGO: ICOUNT^
401651' 261 13 0 00 406242' PUSH M,[0] ;PUT A BREAK ON THE SUFFIX STACK
401652' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
401653' 306 01 0 00 000007 CAIN A,G5 ;MAYBE AN "ING"
401654' 254 00 0 00 401773' JRST EDT.G
401655' 306 01 0 00 000004 CAIN A,D5 ;"ED"
401656' 254 00 0 00 402034' JRST EDT.D
401657' 306 01 0 00 000022 CAIN A,R5 ;"ER"
401660' 254 00 0 00 402034' JRST EDT.R
401661' 306 01 0 00 000005 CAIN A,E5 ;"IVE"
401662' 254 00 0 00 402360' JRST END.E
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-53
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
401663' 306 01 0 00 000024 CAIN A,T5 ;"EST"
401664' 254 00 0 00 402031' JRST EDT.T
401665' 306 01 0 00 000010 CAIN A,H5 ;"TH"
401666' 254 00 0 00 402131' JRST EDT.H
401667' 306 01 0 00 000016 CAIN A,N5 ;"EN", "TION", AND "ICATION"
401670' 254 00 0 00 402141' JRST EDT.N
401671' 306 01 0 00 000031 CAIN A,Y5 ;"LY", "TY", "ITY", "BILITY"
401672' 254 00 0 00 402220' JRST EDT.Y
401673' 306 01 0 00 000023 CAIN A,S5 ;"NESS" AND "LESS"
401674' 254 00 0 00 402331' JRST EDT.SS
401675' 254 00 0 00 401637' JRST ENDFRT ;LAST LETTER DOESN'T SUGGEST ANY SUFFIXES
401676' EDT.S: ICOUNT^
401676' 260 17 0 00 402465' PUSHJ P,ZLAST ;TRY SINGULAR FORM
401677' 260 17 0 00 404332' PUSHJ P,MATCH
401700' 254 00 0 00 401703' JRST .+3 ;FAILURE
401701' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
401702' 254 00 0 00 401732' JRST EDT.S1 ;SUCCESS - VERIFY WE DID A GOOD THING.
401703' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
401704' 306 01 0 00 000033 CAIN A,APOS ;"'S" ?
JRST [PUSHJ P,ZLAST ;YES. FLUSH APOSTROPHE AND SEARCH AGAIN
PUSHJ P,MATCH
JRST ENDTGO ;TRY SUFFIX REMOVAL ON REDUCED WORD
JRST ENDMSP ;MISSPELLING
401705' 254 00 0 00 406710' JRST ENDSRT] ;SUCCESS.
401706' 302 01 0 00 000005 CAIE A,E5
JRST [CAIE A,S5 ;MAYBE ...NESS?
JRST ENDTGO ;NO BACK THRU LIST
401707' 254 00 0 00 406715' JRST ENDSS] ;OFF TO TRY IT
401710' 260 17 0 00 402465' PUSHJ P,ZLAST ;WIPE OUT THE E
401711' 260 17 0 00 404332' PUSHJ P,MATCH
401712' 254 00 0 00 401715' JRST ITOY1
401713' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
401714' 254 00 0 00 401751' JRST EDT.ES ;CHECK THAT "-ES" PLURAL IS OK
401715' 135 01 0 05 402412' ITOY1: GETLST^LDB A,GETLBT+(W)^
401716' 302 01 0 00 000011 CAIE A,I5
401717' 254 00 0 00 401637' JRST ENDFRT ;QUIT
;HAVE FOUND A FINAL "I". TRY CHANGING IT TO "Y" AND MATCHING.
401720' 261 13 0 00 406242' ITOY: PUSH M,[0]
401721' 201 01 0 00 000031 MOVEI A,Y5 ;CHANGE THE -I TO -Y
401722' 260 17 0 00 402502' PUSHJ P,SETLST
401723' 260 17 0 00 404332' PUSHJ P,MATCH ;DOES IT MATCH NOW?
401724' 254 00 0 00 402220' JRST EDT.Y ;NO, BUT -Y IS A POSSIBLE -LY
401725' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
GETLST -1 ^;YES: CHECK IF -<CONS>Y
401726' 135 01 0 05 402411' LDB A,GETLBT+-1(W)
401727' 260 17 0 00 402512' PUSHJ P,ISCONS
401730' 254 00 0 00 401637' JRST ENDFRT ;NO: ERROR LIKE "*PLAIED"
401731' 254 00 0 00 401623' JRST ENDSRT ;YES, LIKE "SPIED"
;HAVE FOUND A "-S" PLURAL. THE "S" HAS BEEN REMOVED.
401732' 135 01 0 05 402412' EDT.S1: GETLST^LDB A,GETLBT+(W)^
401733' 302 01 0 00 000031 CAIE A,Y5
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-54
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
401734' 254 00 0 00 401745' JRST EDT.S2
GETLST -1 ^;"YS" SHOULD BE PRECEDED BY A VOWEL
401735' 135 01 0 05 402411' LDB A,GETLBT+-1(W)
401736' 260 17 0 00 402526' PUSHJ P,ISVOWL
401737' 254 00 0 00 401741' JRST .+2 ;LOSE. *"CRYS"
401740' 254 00 0 00 401623' JRST ENDSRT ;WIN. "DAYS", "PREYS", "TOYS", "GUYS"
401741' 261 13 0 00 406720' PUSH M,[E5] ;RECONSTRUCT WORD WITH "-YS" REPLACED
401742' 261 13 0 00 406721' PUSH M,[I5] ;BY "-IES", BY DINT OF PUSHING THE
401743' 261 13 0 00 406722' PUSH M,[Y5+40] ;APPROPRIATE MODS ONTO THE SUFFIX
401744' 254 00 0 00 401630' JRST ENDFIX ;STACK
401745' 260 17 0 00 401756' EDT.S2: PUSHJ P,ESPLUR ;MAKE SURE "-S" PLURAL IS LEGAL
401746' 254 00 0 00 401623' JRST ENDSRT ;IT IS
401747' 261 13 0 00 406720' PUSH M,[E5] ;NO, "-ES" IS NEEDED FOR PLURAL!
401750' 254 00 0 00 401630' JRST ENDFIX ;RECONSTRUCT WORD WITH THE "-ES"
;HAVE FOUND A "-ES" PLURAL. THE "ES" HAS BEEN REMOVED.
401751' 260 17 0 00 401756' EDT.ES: PUSHJ P,ESPLUR
401752' 254 00 0 00 401754' JRST .+2
401753' 254 00 0 00 401623' JRST ENDSRT
401754' 262 13 0 00 000001 POP M,A ;TRY RECONSTRUCTING WITH JUST
401755' 254 00 0 00 401630' JRST ENDFIX ;AN "-S" PLURAL
;SKIP IF A "-ES" PLURAL IS REQUIRED (-S, -X, -Z, -CH, -SH)
401756' 135 01 0 05 402412' ESPLUR: GETLST^LDB A,GETLBT+(W)^
401757' 302 01 0 00 000023 CAIE A,S5 ;"GRASSES"
401760' 306 01 0 00 000030 CAIN A,X5 ;"TAXES"
401761' 254 00 0 00 403537' JRST CPOPJ1
401762' 306 01 0 00 000032 CAIN A,Z5 ;"BUZZES"
401763' 254 00 0 00 403537' JRST CPOPJ1
401764' 302 01 0 00 000010 CAIE A,H5
401765' 263 17 0 00 000000 POPJ P, ;ALL OTHERS BUT "...HS" TAKE "-S".
401766' 135 01 0 05 402411' GETLST -1^LDB A,GETLBT+-1(W)^
401767' 302 01 0 00 000003 CAIE A,C5 ;"WRENCHES" (BUT "EPOCHS")
401770' 306 01 0 00 000023 CAIN A,S5 ;"HASHES"
401771' 350 00 0 17 000000 AOS (P) ;SKIP
401772' 263 17 0 00 000000 POPJ P,
401773' EDT.G: ICOUNT^
401773' 260 17 0 00 402465' PUSHJ P,ZLAST
401774' 302 01 0 00 000016 CAIE A,N5
401775' 254 00 0 00 401637' JRST ENDFRT ;CAN'T DO ANYTHING ELSE
401776' 260 17 0 00 402465' PUSHJ P,ZLAST
401777' 302 01 0 00 000011 CAIE A,I5
402000' 254 00 0 00 401637' JRST ENDFRT
402001' 201 01 0 00 000005 MOVEI A,E5 ;FOUND "ING". TRY REPLACING THE "I"
402002' 260 17 0 00 402502' PUSHJ P,SETLST ;WITH "E" SO "LIKING" WILL HAVE A CHANCE
402003' 260 17 0 00 404332' PUSHJ P,MATCH
402004' 254 00 0 00 402007' JRST .+3
402005' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402006' 254 00 0 00 401623' JRST ENDSRT
402007' 260 17 0 00 402465' PUSHJ P,ZLAST ;TAKE BACK THE IRRELEVANT "E"
402010' 262 13 0 00 000001 POP M,A ;REMOVE THE "+E-E" FROM SUFFIX STACK
402011' 262 13 0 00 000001 POP M,A
402012' 260 17 0 00 404332' PUSHJ P,MATCH
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-55
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
402013' 254 00 0 00 402053' JRST EDT.CC ;GO CHECK FOR DOUBLED CONSONANT
402014' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402015' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402016' 302 01 0 00 000005 CAIE A,E5 ;IS IT "-EING"?
402017' 254 00 0 00 402105' JRST EDT.C ;NO, BUT GO CHECK IF A DOUBLED CONSONANT
;WAS REQUIRED BUT MISSING
GETLST -1 ^;YES, THE ONE BEFORE THAT HAD BETTER
402020' 135 01 0 05 402411' LDB A,GETLBT+-1(W)
; BE AN "E", "I", "O", OR "Y"
402021' 302 01 0 00 000005 CAIE A,E5 ;"SEEING"
402022' 306 01 0 00 000017 CAIN A,O5 ;"TOEING"
402023' 254 00 0 00 401623' JRST ENDSRT
402024' 302 01 0 00 000011 CAIE A,I5 ;"TIEING" VAR. OF "TYING"
402025' 306 01 0 00 000031 CAIN A,Y5 ;"EYEING"
402026' 254 00 0 00 401623' JRST ENDSRT
402027' 261 13 0 00 406723' PUSH M,[E5+40] ;FIX WORDS LIKE *"TAKEING"
402030' 254 00 0 00 401630' JRST ENDFIX
;"-ER", "-ED", AND "-EST" ALL ACT THE SAME
402031' EDT.T: ICOUNT^
402031' 260 17 0 00 402465' PUSHJ P,ZLAST ;ZAP THE "T"
402032' 302 01 0 00 000023 CAIE A,S5 ;IS IT "-ST"?
402033' 254 00 0 00 401637' JRST ENDFRT ;NOPE
402034' EDT.R:
402034' EDT.D: ICOUNT^
402034' 260 17 0 00 402465' PUSHJ P,ZLAST ;ZAP THE "D"
402035' 302 01 0 00 000005 CAIE A,E5 ;ENDS IN "-ED"?
402036' 254 00 0 00 401637' JRST ENDFRT
402037' 260 17 0 00 404332' PUSHJ P,MATCH ;YES: -E-D LIKE "LIKED"?
402040' 254 00 0 00 402043' JRST .+3
402041' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402042' 254 00 0 00 401623' JRST ENDSRT ;YES, WIN
402043' 260 17 0 00 402465' PUSHJ P,ZLAST ;FLUSH THE "E"
402044' 260 17 0 00 404332' PUSHJ P,MATCH ;NOW DOES IT MATCH?
402045' 254 00 0 00 402050' JRST .+3
402046' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402047' 254 00 0 00 402074' JRST EDT.ED ;YES: GO CHECK -Y/DOUBLED CONSONANT
402050' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402051' 306 01 0 00 000011 CAIN A,I5 ;NO: CAN WE TRY "-I" TO "-Y"?
402052' 254 00 0 00 401720' JRST ITOY ;YES
;CHECK TO SEE IF STEM ENDS WITH A DOUBLED DOUBLABLE CONSONANT, AND IF
; REMOVING ONE OF THEM MAKES IT MATCH
402053' 261 13 0 00 406242' EDT.CC: PUSH M,[0] ;PUT A BREAK ON THE SUFFIX STACK
402054' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402055' 260 17 0 00 402534' PUSHJ P,ISC2 ;DOES IT END IN A DOUBLER?
402056' 254 00 0 00 401637' JRST ENDFRT
402057' 260 17 0 00 402465' PUSHJ P,ZLAST ;YES: GET THE NEXT ONE BACK
402060' 312 01 0 13 000000 CAME A,(M) ;IS IT DOUBLED (SAME AS PREVIOUS)?
402061' 254 00 0 00 401637' JRST ENDFRT ;NOT DOUBLED
402062' 260 17 0 00 404332' PUSHJ P,MATCH ;YES: DOES STEM MATCH NOW?
402063' 254 00 0 00 401637' JRST ENDFRT
402064' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
GETLST -1 ^;YES: CHECK IF DOUBLING VALID
402065' 135 01 0 05 402411' LDB A,GETLBT+-1(W)
402066' 260 17 0 00 402526' PUSHJ P,ISVOWL ;NEXT ONE BACK MUST BE A VOWEL
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-56
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
402067' 254 00 0 00 401637' JRST ENDFRT
402070' 135 01 0 05 402410' GETLST -2^LDB A,GETLBT+-2(W)^
402071' 260 17 0 00 402512' PUSHJ P,ISCONS ;AND THE NEXT ONE A CONSONANT
402072' 254 00 0 00 401637' JRST ENDFRT
;THE SHORT VOWEL FOLLOWED BY A DOUBLABLE CONSONANT IS A NECESSARY
;CONDITION, BUT NOT SUFFICIENT, SINCE FOR POLYSYLLABIC STEMS, THE STRESS
;MUST ALSO BE ON THE LAST SYLLABLE. WE HAVE NO WAY OF KNOWING THAT,
;OF COURSE, SO WE HAVE TO ACCEPT IT REGARDLESS.
402073' 254 00 0 00 401623' JRST ENDSRT
;WE HAVE A MATCH AFTER STRIPPING "-ED" ("-ER", "-EST"). NOW CHECK
;FOR "-Y" ENDING OR IF A DOUBLED CONSONANT WAS REQUIRED BUT IS MISSING.
402074' 135 01 0 05 402412' EDT.ED: GETLST^LDB A,GETLBT+(W)^
402075' 302 01 0 00 000031 CAIE A,Y5 ;DOES STEM END IN -Y?
402076' 254 00 0 00 402105' JRST EDT.C ;NO, BUT GO CHECK IF A DOUBLED CONSONANT
;WAS REQUIRED BUT MISSING
GETLST -1 ^;YES: IS IT -<CONS>Y?
402077' 135 01 0 05 402411' LDB A,GETLBT+-1(W)
402100' 260 17 0 00 402512' PUSHJ P,ISCONS
402101' 254 00 0 00 401623' JRST ENDSRT ;NO ("PLAYED")
402102' 261 13 0 00 406721' PUSH M,[I5] ;YES (*"SPYED")
402103' 261 13 0 00 406722' PUSH M,[Y5+40] ;RECONSTRUCT WORD WITH "-Y" REPLACED
402104' 254 00 0 00 401630' JRST ENDFIX ;BY "-I"
;CHECK IF CONSONANT DOUBLING WAS REQUIRED BUT MISSING
402105' 260 17 0 00 402534' EDT.C: PUSHJ P,ISC2 ;DOES STEM END WITH A DOUBLER?
402106' 254 00 0 00 401623' JRST ENDSRT ;NO, SO NO FURTHER CHECKS NECESSARY
402107' 135 01 0 05 402411' GETLST -1^LDB A,GETLBT+-1(W)^
402110' 260 17 0 00 402526' PUSHJ P,ISVOWL ;PRECEDED BY A VOWEL?
402111' 254 00 0 00 401623' JRST ENDSRT
402112' 135 01 0 05 402410' GETLST -2^LDB A,GETLBT+-2(W)^
402113' 260 17 0 00 402512' PUSHJ P,ISCONS ;AND THEN PRECEDED BY A CONSONANT?
402114' 254 00 0 00 401623' JRST ENDSRT
;OK, HAD A SHORT VOWEL, FOLLOWED BY A DOUBLABLE CONSONANT. IF STEM
;HAS ONLY ONE SYLLABLE, THEN CONSONANT DOUBLING WAS REQUIRED. IF
;MORE THAN ONE SYLLABLE, DOUBLES ONLY IF STRESS IS ON LAST
;SYLLABLE, WHICH WE CAN'T KNOW.
402115' 202 05 0 00 000002 MOVEM W,B ;TEMP. SAVE W
402116' 275 05 0 00 000002 SUBI W,2
402117' 363 05 0 00 402125' SOJLE W,EDT.C1 ;FOUND NO VOWEL, SO SINGLE SYLLABLE
402120' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402121' 260 17 0 00 402526' PUSHJ P,ISVOWL
402122' 254 00 0 00 402117' JRST .-3 ;KEEP LOOKING
402123' 200 05 0 00 000002 MOVE W,B ;FOUND ANOTHER VOWEL, SO STEM HAS AT
402124' 254 00 0 00 401623' JRST ENDSRT ;LEAST 2 SYLLABLES.
402125' 200 05 0 00 000002 EDT.C1: MOVE W,B ;RESTORE W
GETLST ^;GET THE FINAL CONSONANT
402126' 135 01 0 05 402412' LDB A,GETLBT+(W)
402127' 261 13 0 00 000001 PUSH M,A ;PUT A COPY OF IT ON THE STACK AND
402130' 254 00 0 00 401630' JRST ENDFIX ;RECONSTRUCT A VERSION WITH 2 OF THEM
402131' EDT.H: ICOUNT^
402131' 260 17 0 00 402465' PUSHJ P,ZLAST ;"H" OFF
402132' 302 01 0 00 000024 CAIE A,T5
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-57
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
402133' 254 00 0 00 401637' JRST ENDFRT
402134' 260 17 0 00 402465' PUSHJ P,ZLAST ;"TH" OFF
402135' 260 17 0 00 404332' PUSHJ P,MATCH
402136' 254 00 0 00 401715' JRST ITOY1 ;"TWENTIETH", ETC.
402137' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402140' 254 00 0 00 401623' JRST ENDSRT ;"SIXTH", "SEVENTH", ETC.
402141' EDT.N: ICOUNT^
402141' 260 17 0 00 402465' PUSHJ P,ZLAST
402142' 306 01 0 00 000005 CAIN A,E5
402143' 254 00 0 00 402207' JRST EDT.EN
402144' 302 01 0 00 000017 CAIE A,O5
402145' 254 00 0 00 401637' JRST ENDFRT
402146' 260 17 0 00 402465' PUSHJ P,ZLAST ;REMOVED "ON" THUS FAR
402147' 302 01 0 00 000011 CAIE A,I5
402150' 254 00 0 00 401637' JRST ENDFRT
402151' 260 17 0 00 402465' PUSHJ P,ZLAST ;"ION" OFF
402152' 302 01 0 00 000024 CAIE A,T5
402153' 254 00 0 00 401637' JRST ENDFRT
GETLST -1 ^;FOUND "TION"
402154' 135 01 0 05 402411' LDB A,GETLBT+-1(W)
402155' 260 17 0 00 402526' PUSHJ P,ISVOWL ;IS PREVIOUS LETTER A VOWEL?
402156' 254 00 0 00 402203' JRST CTION ;NO: "REJECTION", "CONGESTION"?
402157' 201 01 0 00 000005 MOVEI A,E5 ;YES: ADD AN "E" FOR "IGNITION", ETC.
402160' 260 17 0 00 402500' PUSHJ P,ADDLST
402161' 260 17 0 00 404332' PUSHJ P,MATCH
402162' 254 00 0 00 402165' JRST .+3 ;TRY "Y" -> "-ICATION"
402163' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402164' 254 00 0 00 401623' JRST ENDSRT ;WIN
402165' 260 17 0 00 402465' PUSHJ P,ZLAST ;TAKE BACK THE "E"
402166' 262 13 0 00 000001 POP M,A ;REMOVE THE "+E-E" FROM SUFFIX STACK
402167' 262 13 0 00 000001 POP M,A
402170' 260 17 0 00 402465' PUSHJ P,ZLAST ;"TION" OFF
402171' 302 01 0 00 000001 CAIE A,A5
402172' 254 00 0 00 401637' JRST ENDFRT
402173' 260 17 0 00 402465' PUSHJ P,ZLAST
402174' 302 01 0 00 000003 CAIE A,C5
402175' 254 00 0 00 401637' JRST ENDFRT
402176' 260 17 0 00 402465' PUSHJ P,ZLAST
402177' 302 01 0 00 000011 CAIE A,I5
402200' 254 00 0 00 401637' JRST ENDFRT
402201' 201 01 0 00 000031 MOVEI A,Y5 ;FOUND "-ICATION"
402202' 260 17 0 00 402502' PUSHJ P,SETLST ;TRY CHANGING THE "I" TO "Y"
402203' 260 17 0 00 404332' CTION: PUSHJ P,MATCH
402204' 254 00 0 00 401637' JRST ENDFRT
402205' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402206' 254 00 0 00 401623' JRST ENDSRT
402207' EDT.EN: ICOUNT^
402207' 260 17 0 00 404332' PUSHJ P,MATCH ;"SPOKEN"
402210' 254 00 0 00 402213' JRST .+3
402211' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402212' 254 00 0 00 401623' JRST ENDSRT
402213' 260 17 0 00 402465' PUSHJ P,ZLAST ;"-EN" OFF
402214' 260 17 0 00 404332' PUSHJ P,MATCH
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-58
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
402215' 254 00 0 00 402053' JRST EDT.CC ;GO CHECK FOR DOUBLED CONSONANT ("REDDEN")
402216' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402217' 254 00 0 00 401623' JRST ENDSRT
402220' EDT.Y: ICOUNT^
402220' 260 17 0 00 402465' PUSHJ P,ZLAST ;"Y" OFF
402221' 306 01 0 00 000014 CAIN A,L5
402222' 254 00 0 00 402273' JRST EDT.LY
402223' 302 01 0 00 000024 CAIE A,T5
402224' 254 00 0 00 401637' JRST ENDFRT
402225' 260 17 0 00 402465' PUSHJ P,ZLAST ;"TY" OFF
402226' 260 17 0 00 404332' PUSHJ P,MATCH
402227' 254 00 0 00 402232' JRST .+3
402230' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402231' 254 00 0 00 401623' JRST ENDSRT ;"CHATTY", ETC.
402232' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402233' 302 01 0 00 000011 CAIE A,I5
402234' 254 00 0 00 401637' JRST ENDFRT
402235' 201 01 0 00 000005 MOVEI A,E5
402236' 260 17 0 00 402502' PUSHJ P,SETLST ;TRY "-E" -> "-ITY" ("ACTIVITY")
402237' 260 17 0 00 404332' PUSHJ P,MATCH
402240' 254 00 0 00 402243' JRST .+3
402241' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402242' 254 00 0 00 401623' JRST ENDSRT
402243' 260 17 0 00 402465' PUSHJ P,ZLAST ;TRY WITHOUT THE "E"
402244' 262 13 0 00 000001 POP M,A ;REMOVE THE "+E-E" FROM SUFFIX STACK
402245' 262 13 0 00 000001 POP M,A
402246' 260 17 0 00 404332' PUSHJ P,MATCH ;"FORMALITY", "SOLIDITY", ETC?
402247' 254 00 0 00 402252' JRST .+3
402250' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402251' 254 00 0 00 401623' JRST ENDSRT
GETLST ^;LOOK FOR "-BILITY"
402252' 135 01 0 05 402412' LDB A,GETLBT+(W)
402253' 302 01 0 00 000014 CAIE A,L5
402254' 254 00 0 00 401637' JRST ENDFRT
402255' 260 17 0 00 402465' PUSHJ P,ZLAST
402256' 302 01 0 00 000011 CAIE A,I5
402257' 254 00 0 00 401637' JRST ENDFRT
402260' 260 17 0 00 402465' PUSHJ P,ZLAST
402261' 302 01 0 00 000002 CAIE A,B5
402262' 254 00 0 00 401637' JRST ENDFRT
402263' 201 01 0 00 000014 MOVEI A,L5 ;FOUND IT: ADD "LE"
402264' 260 17 0 00 402500' PUSHJ P,ADDLST
402265' 201 01 0 00 000005 MOVEI A,E5
402266' 260 17 0 00 402500' PUSHJ P,ADDLST
402267' 260 17 0 00 404332' PUSHJ P,MATCH
402270' 254 00 0 00 401637' JRST ENDFRT
402271' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402272' 254 00 0 00 401623' JRST ENDSRT ;"ABILITY", "FEASIBILITY"
402273' EDT.LY: ICOUNT^
402273' 201 01 0 00 000005 MOVEI A,E5 ;FIRST TRY ADDING "E" FOR WORDS LIKE
402274' 260 17 0 00 402500' PUSHJ P,ADDLST ; "PROBABLY", "POSSIBLY"
402275' 260 17 0 00 404332' PUSHJ P,MATCH
402276' 254 00 0 00 402304' JRST ENDLY1 ;NOPE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-59
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
402277' 254 00 0 00 401634' JRST ENDMSP
GETLST -2 ^;MAKE SURE IT'S "-BLE"
402300' 135 01 0 05 402410' LDB A,GETLBT+-2(W)
402301' 302 01 0 00 000002 CAIE A,B5
402302' 254 00 0 00 401637' JRST ENDFRT
402303' 254 00 0 00 401623' JRST ENDSRT
402304' 260 17 0 00 402465' ENDLY1: PUSHJ P,ZLAST ;TAKE BACK THE "E"
402305' 262 13 0 00 000001 POP M,A ;AND REMOVE THE "+E-E"
402306' 262 13 0 00 000001 POP M,A
402307' 260 17 0 00 402465' PUSHJ P,ZLAST ;"LY" REMOVED
402310' 260 17 0 00 404332' PUSHJ P,MATCH
402311' 254 00 0 00 402314' JRST .+3
402312' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402313' 254 00 0 00 401623' JRST ENDSRT
402314' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402315' 302 01 0 00 000014 CAIE A,L5
402316' 254 00 0 00 401637' JRST ENDFRT
402317' 260 17 0 00 402465' PUSHJ P,ZLAST
402320' 302 01 0 00 000001 CAIE A,A5
402321' 254 00 0 00 401637' JRST ENDFRT
402322' 260 17 0 00 402465' PUSHJ P,ZLAST
402323' 302 01 0 00 000003 CAIE A,C5
402324' 254 00 0 00 401637' JRST ENDFRT
402325' 260 17 0 00 404332' PUSHJ P,MATCH ;-C TO -CALLY? ("BASICALLY")
402326' 254 00 0 00 401637' JRST ENDFRT
402327' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402330' 254 00 0 00 401623' JRST ENDSRT
402331' 260 17 0 00 402465' EDT.SS: PUSHJ P,ZLAST ;"S" OFF
402332' 302 01 0 00 000023 CAIE A,S5
402333' 254 00 0 00 401637' JRST ENDFRT
402334' 305 05 0 00 000004 ENDSS: CAIGE W,4
402335' 254 00 0 00 401637' JRST ENDFRT ;SHORT WORDS NEED NOT APPLY
402336' 260 17 0 00 402465' PUSHJ P,ZLAST ;"SS" OFF
402337' 302 01 0 00 000005 CAIE A,E5 ;THIS MUST BE AN "E"
402340' 254 00 0 00 401637' JRST ENDFRT ;FAILURE
402341' 260 17 0 00 402465' PUSHJ P,ZLAST ;WIPE OUT E
402342' 302 01 0 00 000016 CAIE A,N5 ;"-NESS"?
402343' 306 01 0 00 000014 CAIN A,L5 ;"-LESS"?
402344' 254 00 0 00 402346' JRST .+2
402345' 254 00 0 00 401637' JRST ENDFRT ;FAIL
402346' 260 17 0 00 402465' PUSHJ P,ZLAST ;WIPE OUT THE N OR L
402347' 260 17 0 00 404332' PUSHJ P,MATCH
402350' 254 00 0 00 402353' JRST .+3 ;NOPE, NOT YET
402351' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402352' 254 00 0 00 401623' JRST ENDSRT ;WIN
402353' 261 13 0 00 406242' PUSH M,[0] ;PUT A BREAK ON SUFFIX STACK
402354' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402355' 302 01 0 00 000011 CAIE A,I5 ;COULD BE "-INESS"?
402356' 254 00 0 00 401651' JRST ENDTGO ;NO, BUT TRY AGAIN ("BOUNDEDNESS")
402357' 254 00 0 00 401720' JRST ITOY ;"HAPPINESS", "PENNILESS", ETC??
402360' 260 17 0 00 402465' END.E: PUSHJ P,ZLAST
402361' 302 01 0 00 000026 CAIE A,V5
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-60
SPELL MAC 17-JAN-79 22:25 ENDTST TEST THE SUSPECT WORD BY REMOVING THE ENDINGS
402362' 254 00 0 00 401637' JRST ENDFRT
402363' 260 17 0 00 402465' PUSHJ P,ZLAST
402364' 302 01 0 00 000011 CAIE A,I5
402365' 254 00 0 00 401637' JRST ENDFRT
402366' 260 17 0 00 402465' PUSHJ P,ZLAST ;TAKE OFF THE I FROM IVE
402367' 260 17 0 00 404332' PUSHJ P,MATCH
402370' 254 00 0 00 402373' JRST .+3
402371' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402372' 254 00 0 00 401623' JRST ENDSRT ;WIN
402373' 201 01 0 00 000005 MOVEI A,E5
402374' 260 17 0 00 402500' PUSHJ P,ADDLST ;TRY CHANGING "-IVE" TO "-E".
402375' 260 17 0 00 404332' PUSHJ P,MATCH
402376' 254 00 0 00 401637' JRST ENDFRT
402377' 254 00 0 00 401634' JRST ENDMSP ;MISSPELLING
402400' 254 00 0 00 401623' JRST ENDSRT
SUBTTL ROUTINES USED BY ENDTST
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-61
SPELL MAC 17-JAN-79 22:25 ROUTINES USED BY ENDTST
COMMENT/
SAVWD: SAVES WORDIN AT A PLACE KNOWN TO BUT A FEW
UNSVWD: RESTORE THE WORD FROM THE SAME PLACE
/
402401' SAVWD: ICOUNT^
402401' 202 05 0 00 011062' MOVEM W,SVWDLN ;SAVE WORD LENGTH
402402' 200 05 0 00 406724' MOVE W,[XWD WORDIN,SVWDWX]
402403' 251 05 0 00 011061' BLT W,SVWDWX+5
402404' 200 05 0 00 011062' MOVE W,SVWDLN
402405' 263 17 0 00 000000 POPJ P,
402406' UNSVWD: ICOUNT^
402406' 200 05 0 00 406725' MOVE W,[XWD SVWDWX,WORDIN]
402407' 251 05 0 00 011003' BLT W,WORDIN+5
402410' 200 05 0 00 011062' MOVE W,SVWDLN
402411' 263 17 0 00 000000 POPJ P,
;TABLE OF BYTEPOINTERS INTO WORDIN. IF W HOLDS THE NUMBER OF THE
;CHARACTER, THEN LDB AC,GETLBT(W) LOADS IT.
402412' 00 05 0 00 406242' GETLBT: POINT 5,[0],35 ;LOADS A 0 IF YOU BACK OFF THE END
402413' 37 05 0 00 010776' POINT 5,WORDIN,4
402414' 32 05 0 00 010776' POINT 5,WORDIN,9
402415' 25 05 0 00 010776' POINT 5,WORDIN,14
402416' 20 05 0 00 010776' POINT 5,WORDIN,19
402417' 13 05 0 00 010776' POINT 5,WORDIN,24
402420' 06 05 0 00 010776' POINT 5,WORDIN,29
402421' 01 05 0 00 010776' POINT 5,WORDIN,34
402422' 37 05 0 00 010777' POINT 5,WORDIN+1,4
402423' 32 05 0 00 010777' POINT 5,WORDIN+1,9
402424' 25 05 0 00 010777' POINT 5,WORDIN+1,14
402425' 20 05 0 00 010777' POINT 5,WORDIN+1,19
402426' 13 05 0 00 010777' POINT 5,WORDIN+1,24
402427' 06 05 0 00 010777' POINT 5,WORDIN+1,29
402430' 01 05 0 00 010777' POINT 5,WORDIN+1,34
402431' 37 05 0 00 011000' POINT 5,WORDIN+2,4
402432' 32 05 0 00 011000' POINT 5,WORDIN+2,9
402433' 25 05 0 00 011000' POINT 5,WORDIN+2,14
402434' 20 05 0 00 011000' POINT 5,WORDIN+2,19
402435' 13 05 0 00 011000' POINT 5,WORDIN+2,24
402436' 06 05 0 00 011000' POINT 5,WORDIN+2,29
402437' 01 05 0 00 011000' POINT 5,WORDIN+2,34
402440' 37 05 0 00 011001' POINT 5,WORDIN+3,4
402441' 32 05 0 00 011001' POINT 5,WORDIN+3,9
402442' 25 05 0 00 011001' POINT 5,WORDIN+3,14
402443' 20 05 0 00 011001' POINT 5,WORDIN+3,19
402444' 13 05 0 00 011001' POINT 5,WORDIN+3,24
402445' 06 05 0 00 011001' POINT 5,WORDIN+3,29
402446' 01 05 0 00 011001' POINT 5,WORDIN+3,34
402447' 37 05 0 00 011002' POINT 5,WORDIN+4,4
402450' 32 05 0 00 011002' POINT 5,WORDIN+4,9
402451' 25 05 0 00 011002' POINT 5,WORDIN+4,14
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-62
SPELL MAC 17-JAN-79 22:25 ROUTINES USED BY ENDTST
402452' 20 05 0 00 011002' POINT 5,WORDIN+4,19
402453' 13 05 0 00 011002' POINT 5,WORDIN+4,24
402454' 06 05 0 00 011002' POINT 5,WORDIN+4,29
402455' 01 05 0 00 011002' POINT 5,WORDIN+4,34
402456' 37 05 0 00 011003' POINT 5,WORDIN+5,4
402457' 32 05 0 00 011003' POINT 5,WORDIN+5,9
402460' 25 05 0 00 011003' POINT 5,WORDIN+5,14
402461' 20 05 0 00 011003' POINT 5,WORDIN+5,19
402462' 13 05 0 00 011003' POINT 5,WORDIN+5,24
402463' 06 05 0 00 011003' POINT 5,WORDIN+5,29
402464' 01 05 0 00 011003' POINT 5,WORDIN+5,34
;ZLAST: ZERO THE LAST LETTER OF A WORD, REDUCE ITS LENGTH BY
; ONE, THEN RETURN WITH C(A) = NEW LAST LETTER.
402465' ZLAST: ICOUNT^
402465' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402466' 261 13 0 00 000001 PUSH M,A ;SAVE LAST LETTER ON AFFIX STACK
402467' 400 01 0 00 000000 SETZ A,
402470' 137 01 0 05 402412' DPB A,GETLBT(W) ;ZAP IT
402471' 275 05 0 00 000001 SUBI W,1
402472' 307 05 0 00 000001 CAIG W,1 ;IF STEM GETS DOWN AS FAR AS 1 LETTER,
402473' 254 00 0 00 402476' JRST ZFAIL ; THEN NOT A VALID SUFFIXATION
402474' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402475' 263 17 0 00 000000 POPJ P,
402476' 262 17 0 00 000001 ZFAIL: POP P,A ;NOTE THAT THIS REQUIRES THAT ZLAST CAN
402477' 254 00 0 00 401637' JRST ENDFRT ;ONLY BE CALLED FROM ENDTST ITSELF, NOT
;FROM A DEEPER SUBROUTINE.
;ADDLST: ADD THE LETTER (5BIT) IN A TO THE WORD.
;SETLST: CHANGE THE LAST LETTER OF THE WORD TO THE LETTER (5BIT) IN A.
402500' 271 05 0 00 000001 ADDLST: ADDI W,1
402501' 254 00 0 00 402506' JRST SET1
402502' SETLST: ICOUNT^
402502' 261 17 0 00 000001 PUSH P,A
402503' 135 01 0 05 402412' GETLST^LDB A,GETLBT+(W)^
402504' 261 13 0 00 000001 PUSH M,A ;SAVE FORMER LAST LETTER
402505' 262 17 0 00 000001 POP P,A
402506' 137 01 0 05 402412' SET1: DPB A,GETLBT(W)
402507' 660 01 0 00 000040 TRO A,40 ;MARK THIS LETTER AS AN ADDITION
402510' 261 13 0 00 000001 PUSH M,A ;AND SAVE IT TOO
402511' 263 17 0 00 000000 POPJ P,
;ISCONS: SKIPS IF C(A) = A CONSONANT (INCLUDING "Y")
402512' 302 01 0 00 000005 ISCONS: CAIE A,E5
402513' 306 01 0 00 000001 CAIN A,A5
402514' 263 17 0 00 000000 POPJ P,
402515' 302 01 0 00 000017 CAIE A,O5
402516' 306 01 0 00 000011 CAIN A,I5
402517' 263 17 0 00 000000 POPJ P,
402520' 302 01 0 00 000025 CAIE A,U5
402521' 306 01 0 00 000033 CAIN A,APOS
402522' 263 17 0 00 000000 POPJ P,
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-63
SPELL MAC 17-JAN-79 22:25 ROUTINES USED BY ENDTST
402523' 302 01 0 00 000000 CAIE A,0
402524' 350 00 0 17 000000 AOS (P) ;SKIP
402525' 263 17 0 00 000000 POPJ P,
;ISVOWL: SKIPS IF C(A) = A VOWEL
402526' 260 17 0 00 402512' ISVOWL: PUSHJ P,ISCONS
402527' 306 01 0 00 000033 CAIN A,APOS
402530' 263 17 0 00 000000 POPJ P,
402531' 302 01 0 00 000000 CAIE A,0
402532' 350 00 0 17 000000 AOS (P)
402533' 263 17 0 00 000000 POPJ P,
;ISC2: SKIPS IF C(A) = A DOUBLABLE CONSONANT (B,D,G,L,M,N,P,R,S,T)
;(GROK, TREK, REV, QUIZ, WHIZ ARE THE ONLY (K, V, Z) I CAN FIND,
; SO THEY SHOULD BE HANDLED EXPLICITLY IN THE DICTIONARY.)
402534' 302 01 0 00 000002 ISC2: CAIE A,B5
402535' 306 01 0 00 000004 CAIN A,D5
402536' 254 00 0 00 403537' JRST CPOPJ1
402537' 302 01 0 00 000007 CAIE A,G5
402540' 306 01 0 00 000020 CAIN A,P5
402541' 254 00 0 00 403537' JRST CPOPJ1
402542' 301 01 0 00 000014 CAIL A,L5
402543' 303 01 0 00 000016 CAILE A,N5
402544' 254 00 0 00 402546' JRST .+2
402545' 254 00 0 00 403537' JRST CPOPJ1
402546' 301 01 0 00 000022 CAIL A,R5
402547' 303 01 0 00 000024 CAILE A,T5
402550' 263 17 0 00 000000 POPJ P,
402551' 254 00 0 00 403537' JRST CPOPJ1
;ISSTEM: SKIPS IF THE STEM REMAINING IN WORDIN MEETS CERTAIN TESTS.
; MUST HAVE AT LEAST 3 LETTERS, AND IF EXACTLY 3, MUST HAVE AT LEAST
; ONE VOWEL (OR Y). VERY FEW 2-LETTER WORDS TAKE AFFIXES, AND THOSE
; THAT DO SHOULD PROBABLY BE IN THE DICT EXPLICITLY. ALSO RULES OUT
; THINGS LIKE "A'S".
402552' 303 05 0 00 000003 ISSTEM: CAILE W,3
402553' 254 00 0 00 403537' JRST CPOPJ1
402554' 302 05 0 00 000003 CAIE W,3
402555' 263 17 0 00 000000 POPJ P,
402556' 135 01 0 00 402413' LDB A,GETLBT+1
402557' 260 17 0 00 402526' PUSHJ P,ISVOWL
402560' 306 01 0 00 000031 CAIN A,Y5
402561' 254 00 0 00 403537' JRST CPOPJ1
402562' 135 01 0 00 402414' LDB A,GETLBT+2
402563' 260 17 0 00 402526' PUSHJ P,ISVOWL
402564' 306 01 0 00 000031 CAIN A,Y5
402565' 254 00 0 00 403537' JRST CPOPJ1
402566' 135 01 0 00 402415' LDB A,GETLBT+3
402567' 260 17 0 00 402526' PUSHJ P,ISVOWL
402570' 306 01 0 00 000031 CAIN A,Y5
402571' 350 00 0 17 000000 AOS (P)
402572' 263 17 0 00 000000 POPJ P,
SUBTTL PREFIX - TRY TO REMOVE PREFIXES
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-64
SPELL MAC 17-JAN-79 22:25 PREFIX - TRY TO REMOVE PREFIXES
;RETURNS TO CALL+1 IF UNSUCCESSFUL
; +2 IF RECONSTRUCTION PUT IN CANDBF, DUE TO FINDING
; THE STEM AS A MISSPELLING.
; +3 IF A MATCH WAS FOUND.
IFN MACRO,< DEFINE PRE(X) <
..NCHRS==0
..MASK==0
..STR==0
..NSH==^D36
IRPC X,<
..NSH==..NSH-5
..NCHRS==..NCHRS+1
..MASK==..MASK!<37_..NSH>
..STR==..STR!<<X'5>_..NSH>>
..NCHRS ;;# CHRS IN PREFIX
..MASK ;;MASK
..STR ;;5BIT STRING OF PREFIX
>
>
IFE MACRO,< DEFINE PRE(Y) <
..NCHRS==0
..MASK==0
..STR==0
..NSH==44
FOR X<Y><
..NSH==..NSH-5
..NCHRS==..NCHRS+1
..MASK==..MASK!<37..NSH>
..STR==..STR!<<X'5>..NSH>>
..NCHRS ;;# CHRS IN PREFIX
..MASK ;;MASK
..STR ;;5BIT STRING OF PREFIX
>
>
;OTHER COMMON PREFIXES ARE: ANTI,DE,IN,INTER,MULTI,PRO,OVER,SEMI,SUPER,SUB,WELL
402573' PRETAB: PRE (NON)^ ;TABLE OF PREFIXES NONAGENARIAN
402573' 000000 000003 ..NCHRS
402574' 777770 000000 ..MASK
402575' 347560 000000 ..STR
PRE (RE)^ ; REPENT
402576' 000000 000002 ..NCHRS
402577' 777400 000000 ..MASK
402600' 442400 000000 ..STR
PRE (UN)^ ; UNIVERSAL
402601' 000000 000002 ..NCHRS
402602' 777400 000000 ..MASK
402603' 527000 000000 ..STR
PRE (PRE)^ ; PREVIOUS
402604' 000000 000003 ..NCHRS
402605' 777770 000000 ..MASK
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-65
SPELL MAC 17-JAN-79 22:25 PREFIX - TRY TO REMOVE PREFIXES
402606' 411050 000000 ..STR
PRE (MIS)^ ; MISSISSIPPI
402607' 000000 000003 ..NCHRS
402610' 777770 000000 ..MASK
402611' 324630 000000 ..STR
000017 NPRE==.-PRETAB
402612' 606 00 0 00 020000 PREFIX: TRNN FL,NOPREF ;SKIP PREFIX REMOVAL IF "N" SWITCH
402613' 307 05 0 00 000003 CAIG W,3 ;OR IF WORD IS TOO SHORT
402614' 263 17 0 00 000000 POPJ P, ;NONSKIP RETURN IMPLIES FAILURE
402615' 202 05 0 00 011052' MOVEM W,PREW ;SAVE W AND THE WORD (IN A PLACE OTHER
402616' 200 01 0 00 406726' MOVE A,[XWD WORDIN,PREWD] ;THAN WHAT ENDTST USES, SINCE
402617' 251 01 0 00 011051' BLT A,PREWD+5 ;WE WILL CALL ENDTST)
402620' 200 14 0 00 406727' MOVE N,[IOWD PRELEN,PRESTK] ;SET UP A PREFIX STACK USING N
402621' 205 03 0 00 777761 PREAGN: MOVSI C,-NPRE
402622' 200 01 0 00 010776' PRLOOP: MOVE A,WORDIN ;WE NEED TEST ONLY 1ST 7 CHRS
402623' 404 01 0 03 402574' AND A,PRETAB+1(C)
402624' 312 01 0 03 402575' CAME A,PRETAB+2(C) ;DOES WORD BEGIN WITH PREFIX?
402625' 254 00 0 00 402664' JRST NOPRE ;NO
402626' 261 14 0 03 402575' PUSH N,PRETAB+2(C) ;SAVE PREFIX ON PREFIX STACK
402627' 202 03 0 00 011053' MOVEM C,PREPTR ;SAVE POINTER
402630' 200 01 0 03 402573' MOVE A,PRETAB(C) ;YES - STRIP THE PREFIX OFF
402631' 200 04 0 00 000005 MOVE D,W
402632' 275 05 0 01 000000 SUBI W,(A) ;UNPREFIXED WORD IS SHORTER!
402633' 200 01 0 01 402412' MOVE A,GETLBT(A) ;BYTPTR INTO 1ST WORD
402634' 200 02 0 00 406622' MOVE B,[POINT 5,WORDIN]
402635' 134 03 0 00 000001 ILDB C,A
402636' 136 03 0 00 000002 IDPB C,B
402637' 365 04 0 00 402635' SOJGE D,.-2 ;ASSUME ENOUGH ZEROS IN WORDIN AFTER WORD
402640' 260 17 0 00 404332' PUSHJ P,MATCH ;NOW SEE IF WE RECOGNIZE THE WORD
402641' 254 00 0 00 402660' JRST PRESUF ;NO - NOW TRY SUFFIX REMOVAL TOO
402642' 254 00 0 00 402647' JRST PREMSP ;FOUND AS MISSPELLING
402643' 260 17 0 00 402552' PUSHJ P,ISSTEM ;FOUND AS SPELLING - STEM OK?
402644' 254 00 0 00 402654' JRST PRERES ;NO
402645' 350 00 0 17 000000 PRESRT: AOS (P) ;SET SKIP RETURN
402646' 254 00 0 00 402651' JRST PRESR1
402647' 660 00 0 00 002000 PREMSP: TRO FL,PREWIN ;STEM RECOGNIZED AS MISSPELLING
402650' 260 17 0 00 402672' PUSHJ P,RECONS
402651' 660 00 0 00 002000 PRESR1: TRO FL,PREWIN ;WON BY PREFIX REMOVAL.
402652' 350 00 0 17 000000 AOS (P)
402653' 261 14 0 00 406242' PUSH N,[0] ;MARK END OF PREFIX STACK
402654' 200 05 0 00 406730' PRERES: MOVE W,[XWD PREWD,WORDIN] ;RESTORE WORDIN AND W FROM
402655' 251 05 0 00 011003' BLT W,WORDIN+5 ;PREWD AND PREW
402656' 200 05 0 00 011052' MOVE W,PREW
402657' 263 17 0 00 000000 POPJ P,
402660' 260 17 0 00 401640' PRESUF: PUSHJ P,ENDTST ;TRY SUFFIX REMOVAL ON UNPREFIXED WORD
402661' 254 00 0 00 402667' JRST PREMOR ;NOPE
402662' 254 00 0 00 402651' JRST PRESR1 ;ENDTST DID A RECONS
402663' 254 00 0 00 402645' JRST PRESRT ;YAY!
402664' 270 03 0 00 406731' NOPRE: ADD C,[3,,3] ;WE SKIP THRU PRETAB BY 3'S
402665' 321 03 0 00 402622' JUMPL C,PRLOOP ;JUMP IF MORE.
402666' 254 00 0 00 402654' JRST PRERES ;FAILURE RETURN
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-66
SPELL MAC 17-JAN-79 22:25 PREFIX - TRY TO REMOVE PREFIXES
402667' 307 05 0 00 000003 PREMOR: CAIG W,3 ;HAVE TAKEN OFF A PREFIX, BUT NO MATCH. IF WORD
402670' 254 00 0 00 402654' JRST PRERES ;IS LONG ENOUGH, SEE IF ANY MORE CAN COME OFF
402671' 254 00 0 00 402621' JRST PREAGN ;("UNRECONSTRUCTED")
SUBTTL RECONS - RECONSTRUCT A WORD FROM AFFIXES AND STEM
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-67
SPELL MAC 17-JAN-79 22:25 RECONS - RECONSTRUCT A WORD FROM AFFIXES AND STEM
;ENDTST OR PREFIX HAS RECOGNIZED A "STEM" AS A MISSPELLING. RECONSTRUCT
;A CORRECTED VERSION OF THE WORD BY ADDING THE STRIPPED AFFIXES
;TO THE CORRECTION STRING. IT'S CERTAINLY NOT SAFE TO USE THIS
;NEW STRING IN AN AUTOMATIC MISSPELLING ==> CORRECTION, SO THE NEXT
;BEST THING TO DO IS TO PROPOSE THIS AS A CANDIDATE GUESS FOR THE
;EXCEPTED WORD.
402672' 403 05 0 00 010776' RECONS: SETZB W,WORDIN ;CLEAR WORDIN, WHERE WE'LL
402673' 200 01 0 00 406634' MOVE A,[WORDIN,,WORDIN+1] ;DO THE RECONSTRUCTION
402674' 251 01 0 00 011003' BLT A,WORDIN+5
402675' 201 02 0 00 011064' MOVEI B,PRESTK ;START WITH THE PREFIXES
402676' 622 00 0 00 002000 TRZE FL,PREWIN
402677' 336 00 0 02 000000 RECON1: SKIPN (B)
402700' 254 00 0 00 402706' JRST RECON3
402701' 200 03 0 00 406575' MOVE C,[POINT 5,(B)]
402702' 134 01 0 00 000003 RECON2: ILDB A,C
402703' 322 01 0 00 406732' JUMPE A,[AOJA B,RECON1]
402704' 137 01 0 05 402413' DPB A,GETLBT+1(W)
402705' 344 05 0 00 402702' AOJA W,RECON2
402706' 550 02 0 00 011063' RECON3: HRRZ B,STEM ;PTR TO MISSPELLED STEM
402707' 550 02 0 02 777776 HRRZ B,-2(B) ;PTR TO CORRECTION
402710' 270 02 0 00 406733' ADD B,[POINT 5,1] ;BYTE PTR TO CORRECTION STRING
402711' 134 01 0 00 000002 RECON4: ILDB A,B
402712' 322 01 0 00 402715' JUMPE A,RECON5
402713' 137 01 0 05 402413' DPB A,GETLBT+1(W)
402714' 344 05 0 00 402711' AOJA W,RECON4
402715' 626 00 0 00 001000 RECON5: TRZN FL,SUFWIN
402716' 254 00 0 00 402727' JRST RECON7
402717' 262 13 0 00 000001 RECON6: POP M,A ;POP ITEM FROM SUFFIX STACK
402720' 321 01 0 00 402727' JUMPL A,RECON7 ;-1 ENDS STACK
402721' 322 01 0 00 402717' JUMPE A,RECON6 ;IGNORE BREAK = 0
402722' 626 01 0 00 000040 TRZN A,40 ;40-BIT MEANS LETTER WAS ZAPPED
JRST [DPB A,GETLBT+1(W) ;ADD IT BACK AGAIN
402723' 254 00 0 00 406734' AOJA W,RECON6]
402724' 400 01 0 00 000000 SETZ A, ;REMOVE ADDED LETTER
402725' 137 01 0 05 402412' DPB A,GETLBT(W)
402726' 364 05 0 00 402717' SOJA W,RECON6
402727' 260 17 0 00 404332' RECON7: PUSHJ P,MATCH ;SEE WHAT WE CAN MAKE OF NEW ONE
402730' 254 00 0 00 402735' JRST RECON9 ;NOT FOUND
402731' 334 06 0 06 777776 SKIPA X,-2(X) ;MISSPELLING - USE CORRECTION
402732' 202 06 0 00 011527' RECON8: MOVEM X,CANDBF ;FOUND IT - PUT IT IN CANDBF
402733' 350 00 0 00 011526' AOS CANDID ;AND COUNT IT
402734' 263 17 0 00 000000 POPJ P,
402735' 200 01 0 00 406704' RECON9: MOVE A,[WORDIN,,RECON] ;NOT FOUND, SO MUST MOVE THE
402736' 251 01 0 00 011116' BLT A,RECON+5 ;RECONSTRUCTION TO SOME PLACE
402737' 201 06 0 00 011111' MOVEI X,RECON ;LESS VOLATILE
402740' 254 00 0 00 402732' JRST RECON8
SUBTTL CHANNEL INITIALIZATION - DEC AND STANFORD
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-68
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - DEC AND STANFORD
IFE TENEX,<
000003 HDRSIZ==3 ;SIZE OF BUFFER HEADERS (DIFFERENT FOR TENEX)
000002 BUFFNO==2 ;NUMBER OF I/O BUFFERS FOR DEVICES
000014 MODE==14 ;BUFFERD BINARY WORD AT A TIME MODE.
000001 AMODE==1 ;BUFFFERED CHARACTER AT A TIME
000203 DBFSIZ==203 ;MAX BUFFER SIZE.
402741' 334 03 0 00 406736' INDICT: SKIPA C,[DICTBF] ;DICTIONARY INPUT
402742' 205 03 0 00 002141' INDCTO: MOVSI C,DICTBF ;DICTIONARY OUTPUT
402743' 201 01 0 00 000001 MOVEI A,AMODE
402744' 200 04 0 00 406737' MOVE D,[DICT*40,,DICTFF] ;CHANNEL,,BUFFER LOCATION
;CALL WITH A=MODE, M=DEVICE, C=BUFFER HEADER ADDRESS, D=CHANNEL*40,,BUFFER ADDRESS
;SKIPS ON SUCCESS, OTHERWISE MAKES A MESSAGE
402745' 336 02 0 00 000013 INIALL: SKIPN B,M
402746' 205 02 0 00 446353 MOVSI B,'DSK'
402747' 202 04 0 00 011525' MOVEM D,INITMP ;SAVE BUFFER ADDRESS HERE
402750' 510 04 0 00 000004 HLLZ D,D
402751' 434 04 0 00 406740' IOR D,[OPEN A]
402752' 256 00 0 00 000004 XCT D
402753' 254 00 0 00 404122' JRST NODEV
402754' 201 13 0 00 000000 MOVEI M,0 ;FOR SUBSEQUENT ENTERS, IN CASE.
402755' 201 04 0 00 000001 IFE STANSW,< MOVEI D,A
402756' 047 04 0 00 000101 DEVSIZ D,
402757' 201 04 0 00 000203 MOVEI D,203
402760' 553 04 0 00 000004 HRRZS D,D > ;CLEAR NUMBER OF BUFFERS. MDA 790112
IFN STANSW,< MOVE D,B
BUFLEN D,
JUMPG D,.+2
MOVEI D,201
ADDI D,2 >
402761' 303 04 0 00 000203 CAILE D,DBFSIZ
402762' 254 00 0 00 404126' JRST BUFTBG ;BUFFER TOO BIG
402763' 550 04 0 00 011525' HRRZ D,INITMP
402764' 250 04 0 00 400010* EXCH D,.JBFF
402765' 510 01 0 00 011525' HLLZ A,INITMP
402766' 434 01 0 00 406741' IOR A,[INBUF BUFFNO]
402767' 602 03 0 00 777777 TRNE C,-1
402770' 256 00 0 00 000001 XCT A ;INBUF IF THERE'S AN INPUT BUFFER HEADER
402771' 510 01 0 00 011525' HLLZ A,INITMP
402772' 434 01 0 00 406742' IOR A,[OUTBUF BUFFNO]
402773' 603 03 0 00 777777 TLNE C,-1
402774' 256 00 0 00 000001 XCT A ;IF THERE'S AN OUTPUT BUFFER HEADER
402775' 202 04 0 00 402764* MOVEM D,.JBFF
402776' 254 00 0 00 403537' JRST CPOPJ1
402777' 201 03 0 00 002144' INDATA: MOVEI C,DATABF ;FILE INPUT
403000' 201 01 0 00 000014 MOVEI A,MODE ;TRY BUFFERED WORD MODE
403001' 200 04 0 00 406743' MOVE D,[DATA*40,,DATAFF]
403002' 254 00 0 00 402745' JRST INIALL
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-69
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - DEC AND STANFORD
403003' 205 03 0 00 002147' INEXCP: MOVSI C,EXCPBF ;EXCEPTION OUTPUT
403004' 201 01 0 00 000001 MOVEI A,AMODE ;BUFFERED CHARACTER MODE
403005' 200 04 0 00 406744' MOVE D,[EXCP*40,,EXCPFF]
403006' 254 00 0 00 402745' JRST INIALL
403007' 205 03 0 00 002152' INCORR: MOVSI C,CORRBF ;CORRECTION OUTPUT
403010' 201 01 0 00 000014 MOVEI A,MODE ;TRY BUFFERED WORD MODE
403011' 200 04 0 00 406745' MOVE D,[CORR*40,,CORRFF]
403012' 254 00 0 00 402745' JRST INIALL
>;IFE TENEX
SUBTTL CHANNEL INITIALIZATION - TENEX
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-70
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - TENEX
IFN TENEX,<
;TENEX VERSION USES A WHOLE PAGE PER FILE FOR "BUFFER", PMAP-ING FOR
; SPEED. THE "RING HEADER" LOOKS LIKE:
; HEADER+0: 400000,,COREPAGE ;JUST RIGHT FOR PMAP
; HEADER+1: CURRENT BYTE POINTER
; HEADER+2: # BYTES LEFT IN WINDOW
; HEADER+3: FILE JFN
; HEADER+4: # BYTES LEFT IN FILE (INPUT),WRITTEN IN FILE (OUTPUT)
; HEADER+5: CURRENT FILE PAGE
; HEADER+6: 0 FOR AN INPUT BUFFER, -1 FOR OUTPUT
; HEADER+7: ROUTINE ADDRESS TO CALL TO READ/WRITE CHR
HDRSIZ==10
INDICT: MOVSI A,400000 ;DICTIONARY INPUT
HRRI A,DICTPG ;PAGE FOR PMAP
MOVEM A,DICTBF+0
SETZM DICTBF+6 ;FLAG INPUT
SETZM DICTBF+7
POPJ P,
INDCTO: MOVSI A,400000 ;DICTIONARY OUTPUT
HRRI A,DICTPG
MOVEM A,DICTBF+0
SETOM DICTBF+6 ;FLAG OUTPUT
SETZM DICTBF+7
POPJ P,
INDATA: MOVSI A,400000 ;INPUT FILE
HRRI A,DATAPG
MOVEM A,DATABF+0
SETZM DATABF+6 ;INPUT
SETZM DATABF+7
POPJ P,
INEXCP: MOVSI A,400000 ;EXCEPTION OUTPUT
HRRI A,EXCPPG
MOVEM A,EXCPBF+0
SETOM EXCPBF+6 ;OUTPUT
SETZM EXCPBF+7
POPJ P,
INCORR: MOVSI A,400000 ;CORRECTED OUTPUT
HRRI A,CORRPG
MOVEM A,CORRBF+0
SETOM CORRBF+6 ;OUTPUT
SETZM CORRBF+7
POPJ P,
;SIMULATE LOOKUP OR ENTER
;DOING THE DVCHR AFTER THE GTJFN BUT BEFORE THE OPENF LETS US WIN
; IN THE CASE OF LPT:. BEFORE THE OPENF, IT LOOKS NON-PMAPPABLE, BUT
; AFTER, IT'S A LPT-SPOOLER FILE, WHICH IS PMAPPABLE.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-71
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - TENEX
OPNFIL: PUSH P,A
PUSH P,B
PUSH P,C
PUSH P,D
PUSH P,W
MOVE A,3(K) ;JFN
DVCHR
SKIPGE 6(K)
JRST OPNFI6
OPNFI4: MOVEI A,RDSIN ;USE SIN IF NOT PMAPPABLE
TLNE B,(1B4)
MOVEI A,RDPMAP ;OR PMAP IF OK
JRST OPNFI8
OPNFI6: MOVEI A,WRSOUT ;USE SOUT IF NOT PMAPPABLE
TLNE B,(1B4)
MOVEI A,WRPMAP
OPNFI8: MOVEM A,7(K) ;PUT ROUTINE ADDR IN XXXXBF
SETOM 5(K) ;PAGE 0 WILL BE NEXT (AT FIRST CALL)
SETZM 2(K) ;NO HOLES/BYTES LEFT IN WINDOW
MOVE A,3(K) ;JFN
MOVE B,[7B5+1B19] ;7-BIT, READ
SKIPGE 6(K) ;FOR OUTPUT?
TRO B,1B20 ;R/W NEEDED FOR IDPB, BLT
OPENF
JRST [PUSHJ P,JSYSER
MOVE A,3(K)
RLJFN
JFCL
JRST OPNFIY] ;NO SKIP
OPNFI9: MOVE A,6(K) ;-1 FOR OUTPUT
MOVEM A,4(K) ;SIGNAL FIRST OUTPUT
JUMPL A,OPNFIX ;DONE IF OUTPUT
MOVE A,3(K) ;JFN
MOVE B,[2,,11]
MOVEI C,C
GTFDB ;GET BYTE SIZE AND COUNT
LDB C,[POINT 6,C,11] ;BYTE SIZE
CAIN C,7
JRST OPNFIW ;NO CONVERSION NEEDED
MOVEI B,44 ;ASSEMBLER INDEPENDENT 36.
IDIVI B,0(C)
IDIVI D,0(B)
IMULI D,5
OPNFIW: MOVEM D,4(K) ;INPUT BYTE COUNT
OPNFIX: AOS -5(P) ;SET SKIP RETURN
OPNFIY: POP P,W
POP P,D
POP P,C
POP P,B
POP P,A
POPJ P,
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-72
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - TENEX
;WRITE OUT BUFFER USING SOUT -- DECTAPE, ETC.
WRSOUT: PUSH P,1
PUSH P,2
PUSH P,3
SKIPL 4(K) ;ANYTHING WRITTEN SO FAR?
JRST WRSOU2 ;YES.
SETZM 4(K) ;NO. MAKE BUFFER LOOK EMPTY
MOVEI 1,5000
MOVEM 1,2(K)
WRSOU2: MOVE 3,2(K) ;HOLES LEFT IN WINDOW
SUBI 3,5000 ;NEG NUMBER OF BYTES TO OUTPUT
JUMPE 3,WRSOU4 ;NO BYTES IN BUFFER, DON'T SOUT
HRRZ 2,0(K) ;PAGE WHERE WINDOW IS
LSH 2,9 ;ADDR
TLO 2,-1 ;MAKE POINTER
HRRZ 1,3(K) ;JFN
SOUT ;WRITE ON FILE
WRSOU4: HRRZ 1,0(K) ;PAGE
LSH 1,9
SETZM (1)
HRLS 1
ADDI 1,1
HLRZ 2,1
BLT 1,777(2) ;SET PAGE TO ZEROS
WRSOU5: HRRZ 2,0(K) ;PAGE
LSH 2,9 ;MAKE ADDR
HRLI 2,440700 ;OBVIOUSLY A 7 BIT BYTEPOINTER
MOVEM 2,1(K) ;RESET BYTE POINTER
MOVEI 1,5000
SUB 1,2(K) ;NUMBER OF BYTES IN WINDOW
ADDM 1,2(K) ;RESTORE BUFFER TO EMPTY
ADDM 1,4(K) ;BYTES WRITTEN ON FILE
POP P,3
POP P,2
POP P,1
POPJ P,
;WRITE OUT BUFFER WITH PMAP -- DISK
WRPMAP: PUSH P,1
PUSH P,2
PUSH P,3
SKIPL 4(K) ;FIRST OUTPUT?
JRST WRPMP1 ;NO.
SETZM 4(K) ;MAKE BUFFER LOOK EMPTY
MOVEI 1,5000
MOVEM 1,2(K)
WRPMP1: AOS 1,5(K) ;GET NEXT PAGE OF FILE
HRL 1,3(K) ;FORM JFN,,PAGE FOR FILE
MOVE 2,0(K) ;GET FORK,,PAGE FOR FORK
MOVSI 3,140000 ;READ/WRITE (IDPB, BLT DO READS)
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-73
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - TENEX
PMAP
JRST WRSOU4
;READ USING SIN -- DECTAPE ETC
RDSIN: PUSH P,1
PUSH P,2
PUSH P,3
MOVE 3,4(K) ;NUMBER OF BYTES REMAINING IN FILE
CAIL 3,5000 ;NUMBER WHICH WILL FIT IN WINDOW
MOVEI 3,5000 ;FILL WINDOW IF POSSIBLE
MOVEM 3,2(K) ;SAY THAT'S HOW MANY ARE AVAILABLE
JUMPE 3,RDSIN8 ;NO MORE
HRRZ 2,0(K) ;BUFFER PAGE
LSH 2,9 ;MAKE IT AN ADDRESS
TLO 2,-1 ;MAKE IT A POINTER
HRRZ 1,3(K) ;JFN
SIN
RDSIN4: HRRZ 2,0(K) ;PAGE
LSH 2,9 ;MAKE ADDR
HRLI 2,440700 ;7 BIT BYTES
MOVEM 2,1(K) ;CURRENT BYTE POINTER
MOVN 3,2(K)
ADDM 3,4(K)
AOS -3(P) ;NOT AT EOF MEANS SKIP
RDSIN8: POP P,3
POP P,2
POP P,1
POPJ P,
;READ WITH PMAP -- DISK
RDPMAP: PUSH P,1
PUSH P,2
PUSH P,3
MOVE 3,4(K)
CAIL 3,5000
MOVEI 3,5000
MOVEM 3,2(K)
JUMPE 3,RDSIN8
AOS 1,5(K)
HRL 1,3(K)
MOVE 2,0(K)
MOVSI 3,100000
PMAP
JRST RDSIN4
;FILE CLOSING ROUTINES - CALLED FROM THE UUO HANDLER WITH K SETUP.
FILCLS: SKIPN 1,7(K) ;FIND OUT WHICH ROUTINE WROTE/READ IT
POPJ P, ;RETURN QUICK IF NOBODY HOME.
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-74
SPELL MAC 17-JAN-79 22:25 CHANNEL INITIALIZATION - TENEX
CAIE 1,RDSIN
CAIN 1,RDPMAP
JRST FILCLI
FILCLO: SOS 2(K) ;FIX UP COUNT OF HOLES IN LAST WINDOW
CAIE 1,WRPMAP
JRST FILCX
HRRZ 1,3(K) ;JFN
HRLI 1,11 ;WORD 11 OF FDB
MOVSI 2,(77B11) ;CHANGE MASK
MOVSI 3,(07B11) ;7 COME 11
CHFDB ;SET BYTE SIZE TO 7
HRLI 1,12 ;FDB INDEX
SETO 2, ;CHANGE ALL BITS
MOVEI 3,5000
SUB 3,2(K) ;NUMBER OF BYTES IN LAST WINDOW
CAIN 3,5001 ;SKIP IF ANYTHING HAS BEEN WRITTEN
JRST FILCLI ;NOTHING IN FILE, SO LENGTH=0
ADD 3,4(K) ;PLUS NUMBER IN BUFFERS ALREADY OUTPUT
CHFDB ;IS FILE LENGTH
JRST FILCLI
FILCX: PUSHJ P,WRSOUT ;WRITE LAST PARTIAL BUFFER
FILCLI: SETO 1,
MOVE 2,0(K) ;FORK,,PAGE
CLEAR 3,3 ;[Tops20]
PMAP ;UNMAP LAST PAGE
HRRZ 1,3(K) ;JFN
CLOSF
JFCL
POPJ P,
JSYSER: PUSH P,1 ;TENEX ERROR MESSAGE PRINTER
PUSH P,2
PUSH P,3
MOVEI 1,101
MOVE 2,[400000,,-1]
SETZ 3,
ERSTR
JFCL
JFCL
HRROI 1,CRLF ;[Tops20]
PSOUT ;[Tops20]
POP P,3
POP P,2
POP P,1
POPJ P,
>;END IFN TENEX
SUBTTL DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-75
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
403013' 334 10 0 00 010657' IDMPD1: SKIPA Z,NDICT1 ;ENTRY FOR DUMPING DEFAULT DICT 1
403014' 400 10 0 00 000000 IDMPD: SETZ Z, ;NORMAL DUMP FLAG. MDA 790117
403015' 664 00 0 00 000400 TROA FL,IDUMP
403016' 620 00 0 00 000400 DUMPD: TRZ FL,IDUMP
403017' 326 10 0 00 403023' JUMPN Z,DMPD1A ;DON'T ASK NAME OF DEFULT DICT
403020' 051 03 0 00 406746' DUMPD1: OUTSTR [ASCIZ/file name: /]
IFN TENEX,< PUSHJ P,INDCTO
HRROI L,[ASCIZ/WORDS/] ;SET DEFAULT NAME
HRROI M,[ASCIZ/LST/]
MOVEI K,DICTBF ;BUFFER HEADER ADDRESS
PUSHJ P,GETFIL
JRST .-1 > ;IFN TENEX
403021' 260 17 0 00 403613' IFE TENEX,< PUSHJ P,GETFIL
403022' 263 17 0 00 000000 POPJ P, ;NO NAME=NO DUMP. MDA 790112
403023' 260 17 0 00 402742' DMPD1A: PUSHJ P,INDCTO ;PREPARE DICTIONARY OUTPUT CHANNEL
403024' 254 00 0 00 403020' JRST DUMPD1 > ;IFE TENEX
403025' 077 14 0 00 000011 ENTER DICT,K
JRST [PUSHJ P,ENTFAI
403026' 254 00 0 00 406751' JRST DUMPD1]
403027' 205 10 0 00 771314 MOVSI Z,-HASHTL
403030' 402 00 0 00 011577' SETZM TLET.1 ;COUNT WORDS/PAGE OUTPUT
403031' 261 17 0 00 000010 PUSH P,Z ;SAVE GLOBAL INDEX TO HASHTB
403032' 202 10 0 17 000000 DODMP0: MOVEM Z,(P) ;SAVE FOR LATER
403033' 505 10 0 00 777773 HRLI Z,-5 ;COUNT FOR LOCAL REGION
403034' 261 17 0 00 406707' PUSH P,[-1] ;INITIAL INDEX TO BTABLE
403035' 261 17 0 00 000010 PUSH P,Z ;SAVE LOCAL AOBJN
403036' 202 10 0 17 000000 DODMP1: MOVEM Z,(P) ;SAVE Z
403037' 554 06 0 10 002156' HLRZ X,HASHTB(Z)
403040' 322 06 0 00 403046' JUMPE X,DODM1A
403041' 260 17 0 00 403175' PUSHJ P,LITSRT ;SORT LEFT SIDE
403042' 200 10 0 17 000000 MOVE Z,(P)
403043' 506 06 0 10 002156' HRLM X,HASHTB(Z)
403044' 350 07 0 17 777777 AOS Y,-1(P)
403045' 552 06 0 07 010642' HRRZM X,BTABLE(Y)
403046' 550 06 0 10 002156' DODM1A: HRRZ X,HASHTB(Z)
403047' 322 06 0 00 403055' JUMPE X,DODM1B
403050' 260 17 0 00 403175' PUSHJ P,LITSRT ;SORT RIGHT SIDE
403051' 200 10 0 17 000000 MOVE Z,(P)
403052' 542 06 0 10 002156' HRRM X,HASHTB(Z)
403053' 350 07 0 17 777777 AOS Y,-1(P)
403054' 552 06 0 07 010642' HRRZM X,BTABLE(Y)
403055' 253 10 0 00 403036' DODM1B: AOBJN Z,DODMP1 ;LOOP
403056' 274 17 0 00 406753' SUB P,[1,,1] ;ADJUST STACK. (FLUSH LOCAL AOBJN)
403057' 262 17 0 00 000007 POP P,Y ;POP COUNT OF BTABLE ENTRIES.
403060' 321 07 0 00 403103' JUMPL Y,DODMP8 ;JUMP IF NOTHING TO DO FOR THESE 10 ENTRIES
403061' 202 07 0 00 010654' MOVEM Y,HEAPSZ ;SAVE DEGREE OF MERGE, -1.
403062' 322 07 0 00 403067' JUMPE Y,DODM2A ;JUMP IF EASY.
403063' 201 10 0 07 777777 MOVEI Z,-1(Y)
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-76
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
403064' 242 10 0 00 777777 LSH Z,-1
403065' 260 17 0 00 403150' DODMP2: PUSHJ P,ENHEAP ;MAKE A HEAP
403066' 365 10 0 00 403065' SOJGE Z,DODMP2
403067' 200 06 0 00 010642' DODM2A: MOVE X,BTABLE ;GET CAR OF SMALLEST LIST
403070' 200 01 0 06 000000 MOVE A,(X)
403071' 552 01 0 00 010642' HRRZM A,BTABLE ;STUFF CDR OF FORMERLY THE FIRST LIST
403072' 260 17 0 00 403113' PUSHJ P,PRNTON ;PRINT ONE WORD IN DICTIONARY
403073' 201 10 0 00 000000 MOVEI Z,0 ;ARG FOR REHEAPING
403074' 332 00 0 00 010642' SKIPE BTABLE ;FIRST LIST NOW EMPTY?
403075' 254 00 0 00 403065' JRST DODMP2 ;NO. REHEAP IT.
403076' 375 07 0 00 010654' SOSGE Y,HEAPSZ ;DECREMENT DEGREE OF MERGE
403077' 254 00 0 00 403103' JRST DODMP8 ;ALL DONE!
403100' 200 01 0 07 010643' MOVE A,BTABLE+1(Y) ;GET THING FROM THE END OF THE HEAP
403101' 202 01 0 00 010642' MOVEM A,BTABLE ;STUFF IT AT THE HEAD OF THE HEAP
403102' 254 00 0 00 403065' JRST DODMP2 ;REHEAP ELEMENT 0
403103' 200 10 0 17 000000 DODMP8: MOVE Z,(P) ;RESTORE Z FROM STACK
403104' 270 10 0 00 406754' ADD Z,[5,,5]
403105' 321 10 0 00 403032' JUMPL Z,DODMP0 ;LOOP DOING 5 WORDS (10 ENTRIES) EACH TIME
403106' 274 17 0 00 406753' SUB P,[1,,1] ;ADJUST STACK
403107' 070 14 0 00 000000 CLOSE DICT,0
403110' 063 14 0 00 740000 IFE TENEX,< STATZ DICT,740000
403111' 254 00 0 00 404116' JRST DDE > ;IFE TENEX
403112' 263 17 0 00 000000 POPJ P,
403113' 135 07 0 00 406755' PRNTON: LDB Y,[POINT 5,(X),17]
403114' 602 00 0 00 000400 TRNE FL,IDUMP ;SKIP IF FULL DUMP
403115' 316 07 0 00 011606' CAMN Y,IDNUM ;INCR. DUMP - SEE IF THIS IS THE RIGHT KIND
403116' 334 02 0 00 406756' PRNT0: SKIPA B,[POINT 5,1(X)] ;DUMP THIS WORD. SET INTIAL BYTE POINTER
403117' 263 17 0 00 000000 POPJ P,
403120' 134 01 0 00 000002 PRNT1: ILDB A,B
403121' 322 01 0 00 403127' JUMPE A,PRNT2
403122' 306 01 0 00 000033 CAIN A,APOS
403123' 334 01 0 00 406601' SKIPA A,["'"]
403124' 271 01 0 00 000100 ADDI A,"A"-1
403125' 260 17 0 00 401222' PUSHJ P,WDICT
403126' 254 00 0 00 403120' JRST PRNT1
403127' 200 07 0 06 000000 PRNT2: MOVE Y,(X) ;WAS THIS A MISSPELLING?
403130' 607 07 0 00 000040 TLNN Y,MISSPL
403131' 254 00 0 00 403136' JRST PRNT3 ;YES: LET'S OUTPUT THE CORRECTION TOO
403132' 550 06 0 06 777777 HRRZ X,-1(X) ;POINT TO CORRECTION
403133' 201 01 0 00 000076 MOVEI A,">" ;TO RECOGNIZE A MISSPELLING-CORRECTION
403134' 260 17 0 00 401222' PUSHJ P,WDICT ;PAIR WHEN INPUT BY DICTIONARY LOADER
403135' 254 00 0 00 403116' JRST PRNT0
403136' 201 01 0 00 000015 PRNT3: MOVEI A,CR ;WRITE CRLF, MAYBE CRLFFF.
403137' 260 17 0 00 401222' PUSHJ P,WDICT
403140' 201 01 0 00 000012 MOVEI A,LF
403141' 260 17 0 00 401222' PUSHJ P,WDICT
403142' 350 01 0 00 011577' AOS A,TLET.1
403143' 307 01 0 00 000400 CAIG A,400 ;ENOUGH ON THIS PAGE?
403144' 263 17 0 00 000000 POPJ P, ;NO. WE'RE DONE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-77
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
403145' 476 00 0 00 011577' SETOM TLET.1 ;RESET COUNT/PAGE
403146' 201 01 0 00 000014 MOVEI A,FF
403147' 254 00 0 00 401222' JRST WDICT ;SEND AN FF TO KEEP EDITORS HAPPY
403150' 201 12 0 10 000000 ENHEAP: MOVEI L,0(Z)
403151' 201 14 0 12 000000 ENHEP1: MOVEI N,(L)
403152' 242 14 0 00 000001 LSH N,1
403153' 201 14 0 14 000001 MOVEI N,1(N)
403154' 311 14 0 00 010654' CAML N,HEAPSZ
403155' 254 00 0 00 403163' JRST ENHEP2
403156' 200 06 0 14 010642' MOVE X,BTABLE(N)
403157' 200 05 0 14 010643' MOVE W,BTABLE+1(N)
403160' 260 17 0 00 403236' PUSHJ P,LCOMP0
403161' 271 14 0 00 000001 ADDI N,1
403162' 254 00 0 00 403165' JRST ENHEP3
403163' 312 14 0 00 010654' ENHEP2: CAME N,HEAPSZ
403164' 263 17 0 00 000000 POPJ P, ;DONE!
403165' 200 06 0 14 010642' ENHEP3: MOVE X,BTABLE(N)
403166' 200 05 0 12 010642' MOVE W,BTABLE(L)
403167' 260 17 0 00 403236' PUSHJ P,LCOMP0
403170' 263 17 0 00 000000 POPJ P,
403171' 202 06 0 12 010642' MOVEM X,BTABLE(L)
403172' 202 05 0 14 010642' MOVEM W,BTABLE(N)
403173' 201 12 0 14 000000 MOVEI L,(N)
403174' 254 00 0 00 403151' JRST ENHEP1
COMMENT $
FOR THOSE FOLKS WHO LIKE THEIR MACHINE CODE COMMENTS WRITTEN IN META-LISP:
SORT(X)_IF NULL(X) OR NULL CDR(X) THEN X ELSE
MERGE(SORT(ALT(X)),SORT(ALT(CDR(X))));
MERGE(X,Y)_IF NULL(X) THEN Y ELSE IF NULL(Y) THEN X ELSE
IF CAR(X)<CAR(Y) THEN CAR(X) . MERGE(CDR(X),Y)
ELSE CAR(Y) . MERGE(X,CDR(Y));
ALT(X)_IF NULL(X) OR NULL(CDR(X)) THEN X ELSE CAR(X).ALT(CDDR(X));
$
;SORT ONE HASH CHAIN. RECURSIVE. LIST HEADER IN X. RETURNS SORTED LIST IN X.
403175' 322 06 0 00 403540' LITSRT: JUMPE X,CPOPJ ;NO WORK FOR NO LIST
403176' 550 05 0 06 000000 HRRZ W,(X) ;GET LINK TO NEXT
403177' 322 05 0 00 403540' JUMPE W,CPOPJ ;JUMP IF NO NEXT. 1-ELEMENT LIST IS SORTED.
;X AND W WILL BE NEARLY-EQUAL LENGTH LISTS
403200' 200 07 0 00 000005 MOVE Y,W ;TAIL OF THE W LIST
403201' 200 10 0 00 000006 MOVE Z,X ;TAIL OF THE X LIST
403202' 550 14 0 07 000000 LITSR1: HRRZ N,(Y) ;GET LINK-OUT OF W LIST
403203' 542 14 0 10 000000 HRRM N,(Z) ;STORE AS LINK-OUT IN X LIST
403204' 336 10 0 00 000014 SKIPN Z,N ;ADVANCE X-TAIL
403205' 254 00 0 00 403212' JRST LITSR2 ;NO NEXT
403206' 550 14 0 10 000000 HRRZ N,(Z) ;GET LINK-OUT OF X-LIST
403207' 542 14 0 07 000000 HRRM N,(Y) ;STORE AS LINK-OUT OF W-LIST
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-78
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
403210' 332 07 0 00 000014 SKIPE Y,N ;ADVANCE W-TAIL
403211' 254 00 0 00 403202' JRST LITSR1 ;MAKE LISTS OF ALTERNATE ELEMENTS.
403212' 261 17 0 00 000005 LITSR2: PUSH P,W ;SAVE W-LIST
403213' 260 17 0 00 403175' PUSHJ P,LITSRT ;SORT THE X-LIST (RECUR UNTIL DONE)
403214' 250 06 0 17 000000 EXCH X,(P) ;EXCH SORTED X-LIST WITH W-LIST
403215' 260 17 0 00 403175' PUSHJ P,LITSRT ;AND SORT W-LIST
403216' 262 17 0 00 000005 POP P,W ;(X AND W ARE INTERCHANGED, BUT WHO CARES)
;W AND X NOW (ASSUME) POINT TO SORTED LISTS. MERGE THEM INTO ONE LIST.
403217' 201 10 0 00 000007 MOVEI Z,Y ;MERGE LIST HEAD IN Z
403220' 322 06 0 00 403230' JUMPE X,LITSR4 ;NO MERGE IF X IS EMPTY. ADD W TO OUT-LIST
403221' 250 05 0 00 000006 EXCH W,X ;SWAP THEM (WHO CARES?)
403222' 322 06 0 00 403230' JUMPE X,LITSR4 ;NO MERGE IF X IS EMPTY. ADD W TO OUT-LIST
403223' 260 17 0 00 403233' LITSR3: PUSHJ P,LCOMP ;COMPARE CAR(W) AND CAR(X).
; RETURN SMALLEST IN X
403224' 542 06 0 10 000000 HRRM X,(Z) ;X<W. ADD CAR(X) TO OUT-LIST
403225' 201 10 0 06 000000 MOVEI Z,(X) ;ADVANCE END OF OUT-LIST.
403226' 550 06 0 06 000000 HRRZ X,(X) ;FORM CDR(NA)
403227' 326 06 0 00 403223' JUMPN X,LITSR3 ;CONTINUE THE MERGE
403230' 542 05 0 10 000000 LITSR4: HRRM W,(Z) ;STORE OTHER LIST IN THE OUT-LIST
403231' 200 06 0 00 000007 MOVE X,Y ;GET THE ADDRESS OF THE LIST-HEAD
403232' 263 17 0 00 000000 POPJ P, ;RETURN, POINTER TO SORTED LIST IN NA
;LCOMP - COMPARE CAR(X) AND CAR(W).
403233' 260 17 0 00 403236' LCOMP: PUSHJ P,LCOMP0 ;SKIP IF X<W
403234' 250 06 0 00 000005 EXCH X,W ;X>W EXCH THEM
403235' 263 17 0 00 000000 POPJ P, ;RETURN X<W
403236' 200 11 0 00 000006 LCOMP0: MOVE K,X
403237' 200 13 0 00 000005 MOVE M,W
403240' 271 11 0 00 000001 LCOMP1: ADDI K,1
403241' 271 13 0 00 000001 ADDI M,1
403242' 200 01 0 11 000000 MOVE A,(K)
403243' 242 01 0 00 777777 LSH A,-1
403244' 200 02 0 13 000000 MOVE B,(M)
403245' 242 02 0 00 777777 LSH B,-1
403246' 316 01 0 00 000002 CAMN A,B
403247' 254 00 0 00 403240' JRST LCOMP1 ;LOOP WHILE THEY'RE THE SAME
403250' 607 01 0 00 370000 TLNN A,370000 ;DID A RUN OUT?
403251' 254 00 0 00 403537' JRST CPOPJ1 ;YES. X<W. SKIP RETURN
403252' 607 02 0 00 370000 TLNN B,370000 ;DID B RUN OUT?
403253' 263 17 0 00 000000 POPJ P, ;YES. W<X - DIRECT RETURN
403254' 315 01 0 00 000002 CAMGE A,B ;SKIP IF X>W
403255' 350 00 0 17 000000 AOS (P) ;X<W SKIP RETURN
403256' 263 17 0 00 000000 POPJ P,
;FLUSH THE MISSPELLINGS FROM THE DICTIONARY. (CALLED BY SAVME)
403257' 337 00 0 00 010760' MISFLU: SKIPG NMIS
403260' 263 17 0 00 000000 POPJ P,
403261' 402 00 0 00 010760' SETZM NMIS
403262' 205 10 0 00 771314 MOVSI Z,-HASHTL
403263' 554 06 0 10 002156' MISFL1: HLRZ X,HASHTB(Z)
403264' 200 07 0 00 406757' MOVE Y,[HRLM X,HASHTB(Z)]
403265' 260 17 0 00 403273' PUSHJ P,MISSUB ;DO LEFT SIDE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-79
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - DUMPD - DUMP ROUTINE
403266' 550 06 0 10 002156' HRRZ X,HASHTB(Z)
403267' 200 07 0 00 406760' MOVE Y,[HRRM X,HASHTB(Z)]
403270' 260 17 0 00 403273' PUSHJ P,MISSUB ;DO RIGHT SIDE
403271' 253 10 0 00 403263' AOBJN Z,MISFL1 ;LOOP
403272' 263 17 0 00 000000 POPJ P,
403273' 322 06 0 00 403540' MISSUB: JUMPE X,CPOPJ
403274' 200 02 0 06 000000 MOVE B,(X)
403275' 603 02 0 00 000040 TLNE B,MISSPL ;MISSPELLING?
403276' 254 00 0 00 403303' JRST MISSU1 ;YES
403277' 200 07 0 00 406761' MOVE Y,[HRRM X,(A)] ;NO.
403300' 201 01 0 06 000000 MOVEI A,(X) ;SAVE "PREVIOUS ADDRESS"
403301' 550 06 0 06 000000 HRRZ X,(X)
403302' 254 00 0 00 403273' JRST MISSUB
403303' 550 06 0 06 000000 MISSU1: HRRZ X,(X) ;GET FORWARD LINK
403304' 256 00 0 00 000007 XCT Y ;STORE USING Y
403305' 254 00 0 00 403273' JRST MISSUB ;LOOP.
SUBTTL DICTIONARY MANIPULATION - LOADER - LOAD A DICTIONARY FILE.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-80
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - LOADER - LOAD A DICTIONARY FILE.
IFE TENEX,<
403306' 332 00 0 00 010661' LOAD1A: SKIPE ,NDICTI+1 ;IS DICT 1 EMPTY
403307' 254 00 0 00 403334' JRST LOAD.1 ;NO
OUTSTR [ASCIZ/Loading default dictionary WORDS.DIC
403310' 051 03 0 00 406762' /]
403311' 200 11 0 00 406327' MOVE K,['WORDS '] ;YES, TRY
403312' 205 12 0 00 445143 MOVSI L,'DIC' ;DEFAULT DICTIONARY
403313' 201 13 0 00 000000 MOVEI M,0 ;IN OWN PPN
403314' 201 14 0 00 000000 MOVEI N,0
403315' 260 17 0 00 403337' PUSHJ P,LOAD1B ;GET INTO NORMAL FLOW
403316' 334 00 0 00 000000 SKIPA > ;MDA 790112
403317' 260 17 0 00 403331' LOADER: PUSHJ P,LOADEX
403320' 051 03 0 00 406772' OUTSTR [ASCIZ/Do you want to save this core image? /]
403321' 051 04 0 00 000001 INCHWL A
403322' 260 17 0 00 404154' PUSHJ P,FLUTTY
403323' 302 01 0 00 000131 CAIE A,"Y"
403324' 306 01 0 00 000171 CAIN A,"y"
403325' 254 00 0 00 403327' JRST .+2
403326' 263 17 0 00 000000 POPJ P,
403327' 260 17 0 00 405731' PUSHJ P,SAVEME
403330' 254 00 0 00 400001' JRST START ;HAVE TO REESTABLISH THE WORLD AFTER THE RESET
403331' LOADEX:
403331' 332 00 0 00 010656' IFE TENEX,< SKIPE NDICT
403332' 254 00 0 00 403334' JRST LOAD.1 > ;MUST LOAD DICTIONARY ZERO
OUTSTR [ASCIZ/
You must load a dictionary file.
403333' 051 03 0 00 407002' /] ;IN CASE THERE'S NO DICTIONARY
403334' 051 03 0 00 407012' LOAD.1: OUTSTR [ASCIZ/Dictionary file name: /]
IFN TENEX,< PUSHJ P,INDICT
MOVEI K,DICTBF
SETZB L,M ;NO DEFAULTS
PUSHJ P,GETFIL
JRST LOAD.1 > ;TRY AGAIN.
403335' 260 17 0 00 403613' IFE TENEX,< PUSHJ P,GETFIL ;PRESUMED TO RETURN IN K,L,M,N.
403336' 263 17 0 00 000000 POPJ P, ;NO FILE SPECIFIED. MDA 790112
403337' 260 17 0 00 402741' LOAD1B: PUSHJ P,INDICT
403340' 254 00 0 00 403334' JRST LOAD.1 >
403341' 076 14 0 00 000011 LOOKUP DICT,K
JRST [PUSHJ P,FNOTFM
403342' 254 00 0 00 407017' JRST LOAD.1]
403343' 620 00 0 00 000400 TRZ FL,IDUMP
403344' 332 00 0 00 010656' SKIPE NDICT
403345' 254 00 0 00 403355' JRST LOAD.7 ;ALREADY HAVE A DICTIONARY
403346' 402 00 0 00 002156' SETZM HASHTB
403347' 200 01 0 00 407021' MOVE A,[XWD HASHTB,HASHTB+1]
403350' 251 01 0 00 010641' BLT A,HASHTB+HASHTL-1 ;CLEAR HASH TABLE
403351' 402 00 0 00 010660' SETZM NDICTI ;ZERO ALL DICTIONARY COUNTS
403352' 200 01 0 00 407022' MOVE A,[NDICTI,,NDICTI+1]
403353' 251 01 0 00 010760' BLT A,NMIS
403354' 254 00 0 00 403370' JRST LOAD.5
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-81
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - LOADER - LOAD A DICTIONARY FILE.
403355' LOAD.7:
403355' 332 00 0 00 010661' IFE TENEX,< SKIPE ,NDICTI+1 ;FIRST LOAD OF A DICTIONARY?
403356' 254 00 0 00 403362' JRST LOAD.0 ;NO
403357' 201 01 0 00 000001 MOVEI A,1 ;YES. DICTIONARY 1 DEFAULT
403360' 202 01 0 00 011606' MOVEM A,IDNUM
403361' 254 00 0 00 403370' JRST LOAD.5 > ;MDA 790112
403362' 051 03 0 00 407023' LOAD.0: OUTSTR [ASCIZ/Type "I" to mark these as incremental insertions: /]
403363' 051 04 0 00 000001 INCHWL A
403364' 302 01 0 00 000111 CAIE A,"I"
403365' 306 01 0 00 000151 CAIN A,"i"
403366' 260 17 0 00 405402' PUSHJ P,SETNM1
403367' 260 17 0 00 404154' PUSHJ P,FLUTTY
403370' 260 17 0 00 403547' LOAD.5: PUSHJ P,RDICTW ;READ FIRST WORD
403371' 254 00 0 00 403472' JRST LOAD.6 ;EOF
403372' 254 00 0 00 403422' JRST LOAD.3 ;MISSPELLING
403373' 200 01 0 00 010776' MOVE A,WORDIN ;GET THE WORD WE READ
403374' 306 05 0 00 000007 CAIN W,7 ;PRECISELY 7 LETTERS IN THE WORD?
403375' 312 01 0 00 407036' CAME A,[BYTE(5)"C","O","M","M","E","N","T"] ;YES. "COMMENT"?
403376' 254 00 0 00 403407' JRST LOD.2A ;NOT "COMMENT"; GO LOAD THIS WORD
OUTSTR [ASCIZ/(TV-E format directory page being skipped)
403377' 051 03 0 00 407037' /]
403400' 260 17 0 00 403521' LOAD.4: PUSHJ P,RDDICT ;SKIP TO NEXT FORM-FEED.
403401' 254 00 0 00 403472' JRST LOAD.6 ;NONE THERE
403402' 302 01 0 00 000014 CAIE A,FF
403403' 254 00 0 00 403400' JRST LOAD.4
403404' 260 17 0 00 403547' LOAD.2: PUSHJ P,RDICTW ;READ A DICTIONARY WORD
403405' 254 00 0 00 403472' JRST LOAD.6 ;EOF
403406' 254 00 0 00 403422' JRST LOAD.3 ;MISSPELLING
403407' 260 17 0 00 404332' LOD.2A: PUSHJ P,MATCH ;LOOK UP WORD
403410' 254 00 0 00 403413' JRST LOD.2B ;NOT THERE, SO INSERT IT
403411' 254 00 0 00 403415' JRST LOD.2C ;MISSPELLED!
403412' 254 00 0 00 403404' JRST LOAD.2 ;WORD WAS THERE, DON'T ADD IT AGAIN
403413' 260 17 0 00 404401' LOD.2B: PUSHJ P,INSERT ;ADD IT TO THE LIST
403414' 254 00 0 00 403404' JRST LOAD.2 ;BACK FOR MORE
403415' 051 03 0 00 407050' LOD.2C: OUTSTR [ASCIZ/The word "/]
403416' 201 01 0 00 010776' MOVEI A,WORDIN
403417' 260 17 0 00 405030' PUSHJ P,TYPE5
OUTSTR [ASCIZ/" corresponds to a known misspelling. Ignored.
403420' 051 03 0 00 407053' /]
403421' 254 00 0 00 403404' JRST LOAD.2
;HERE IS HOW WE READ MISSPELLINGS AND ADD THEM TO THE DICTIONARY
403422' 260 17 0 00 404332' LOAD.3: PUSHJ P,MATCH ;CHECK IF WE ALREADY KNOW ABOUT IT
403423' 254 00 0 00 403435' JRST LOAD3B ;NO, SO INSERT IT
403424' 254 00 0 00 403431' JRST LOD.4A ;ALREADY HERE AS A MISSPELLING
403425' 051 03 0 00 407065' OUTSTR [ASCIZ/The misspelling "/]
403426' 201 01 0 00 010776' MOVEI A,WORDIN
403427' 260 17 0 00 405030' PUSHJ P,TYPE5
OUTSTR [ASCIZ/" corresponds to a known word. Ignored.
403430' 051 03 0 00 407071' /]
403431' 260 17 0 00 403547' LOD.4A: PUSHJ P,RDICTW ;READ ITS ALLEGED CORRECTION
403432' 254 00 0 00 403472' JRST LOAD.6
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-82
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - LOADER - LOAD A DICTIONARY FILE.
403433' 254 00 0 00 403404' JRST LOAD.2 ;AND IGNORE IT
403434' 254 00 0 00 403404' JRST LOAD.2
403435' 261 17 0 10 002156' LOAD3B: PUSH P,HASHTB(Z) ;SAVE ENOUGH TO BACK OUT!
403436' 261 17 0 00 000010 PUSH P,Z
403437' 261 17 0 00 010655' PUSH P,LISTFF ;SAVE ADDRESS OF MISSPELLING
403440' 260 17 0 00 404370' PUSHJ P,INSRTM ;INSERT MISSPELLING! CANDBX NOT SET!
403441' 260 17 0 00 403547' PUSHJ P,RDICTW ;READ CORRECTION
403442' 254 00 0 00 403467' JRST LOAD3Z
403443' 254 00 0 00 403457' JRST LOAD3Y ;CORRECTION LOOKS LIKE A MISSPELLING
403444' 260 17 0 00 404332' PUSHJ P,MATCH
403445' 254 00 0 00 403450' JRST LOAD3C ;NOT THERE, SO INSERT IT
403446' 254 00 0 00 403457' JRST LOAD3Y ;ALLEGED CORRECTION IS MISSPELLED
403447' 364 06 0 00 403453' SOJA X,LOAD3A ;ALREADY THERE. SET X TO FLAGS, NOT TEXT
403450' 261 17 0 00 010655' LOAD3C: PUSH P,LISTFF ;ADDRESS OF CORRECTION
403451' 260 17 0 00 404401' PUSHJ P,INSERT ;INSERT CORRECTION
403452' 262 17 0 00 000006 POP P,X ;POP ADDRESS OF CORRECTION (FLAGS NOT TEXT)
403453' 262 17 0 00 000007 LOAD3A: POP P,Y ;POP ADDRESS OF MISSPELLING
403454' 552 06 0 07 000000 HRRZM X,(Y) ;STORE CORRECTION WITH MISSPELLING
403455' 274 17 0 00 407102' SUB P,[2,,2] ;ADJUST STACK
403456' 254 00 0 00 403404' JRST LOAD.2
403457' 051 03 0 00 407103' LOAD3Y: OUTSTR [ASCIZ/An alleged correction, "/]
403460' 201 01 0 00 010776' MOVEI A,WORDIN
403461' 260 17 0 00 405030' PUSHJ P,TYPE5
OUTSTR [ASCIZ/", corresponds to a known misspelling.
Both it and its misspelling were ignored.
403462' 051 03 0 00 407110' /]
403463' 262 17 0 00 010655' POP P,LISTFF ;BACK OUT OF THIS MISSPELLING
403464' 262 17 0 00 000010 POP P,Z
403465' 262 17 0 10 002156' POP P,HASHTB(Z)
403466' 254 00 0 00 403404' JRST LOAD.2
403467' 262 17 0 00 010655' LOAD3Z: POP P,LISTFF ;BACK OUT OF THIS MISSPELLING
403470' 262 17 0 00 000010 POP P,Z
403471' 262 17 0 10 002156' POP P,HASHTB(Z)
403472' 070 14 0 00 000000 LOAD.6: CLOSE DICT, ;DESELECT FILE
403473' 051 03 0 00 407131' OUTSTR [ASCIZ/There are now /]
403474' 200 01 0 00 010656' MOVE A,NDICT
403475' 260 17 0 00 404132' PUSHJ P,DECPTR
403476' 051 03 0 00 407134' OUTSTR [ASCIZ/ words /]
403477' 337 01 0 00 010760' SKIPG A,NMIS
403500' 254 00 0 00 403504' JRST LOAD6A
OUTSTR [ASCIZ /
403501' 051 03 0 00 407136' and /]
403502' 260 17 0 00 404132' PUSHJ P,DECPTR
403503' 051 03 0 00 407140' OUTSTR [ASCIZ/ misspelling-corrections /]
LOAD6A: OUTSTR [ASCIZ /in the dictionary.
403504' 051 03 0 00 407146' /]
403505' 200 01 0 00 000000* IFE TENEX,< MOVE A,.JBREL
403506' 242 01 0 00 777766 LSH A,-12
403507' 271 01 0 00 000001 ADDI A,1
403510' 260 17 0 00 404132' PUSHJ P,DECPTR
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-83
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - LOADER - LOAD A DICTIONARY FILE.
403511' 051 03 0 00 407153' OUTSTR [ASCIZ/ + /] ;HIGH SEG ALSO
403512' 550 01 0 00 000000* HRRZ A,.JBHRL
403513' 275 01 0 00 400000 SUBI A,400000 ;SUB HI SEG ORIG
403514' 242 01 0 00 777766 LSH A,-12 ;MDA 790112
403515' 271 01 0 00 000001 ADDI A,1
403516' 260 17 0 00 404132' PUSHJ P,DECPTR
OUTSTR [ASCIZ/ K Core used.
403517' 051 03 0 00 407154' /] >
403520' 263 17 0 00 000000 POPJ P,
SUBTTL DICTIONARY MANIPULATION - RDDICT - READ DICTIONARY FILE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-84
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - RDDICT - READ DICTIONARY FILE
;SOS LINE NUMBERS ARE STRIPPED.
;CHARACTER RESULT IN A. SKIP RETURN IS NORMAL, NON SKIP FOR EOF.
403521' RDDICT: ICOUNT^
403521' 373 00 0 00 002143' SOSLE DICTBF+2
403522' 254 00 0 00 403530' JRST RDICT1
403523' 066 14 0 00 000000 IFE TENEX,< INPUT DICT,
403524' 063 14 0 00 740000 STATZ DICT,740000
403525' 254 00 0 00 404176' JRST DIE
403526' 063 14 0 00 020000 STATZ DICT,20000
403527' 263 17 0 00 000000 POPJ P, ;DIRECT RETURN MEANS EOF >
IFN TENEX,< MOVEI K,DICTBF
PUSHJ P,@7(K)
POPJ P,>
403530' RDICT1: ICOUNT^
403530' 134 01 0 00 002142' ILDB A,DICTBF+1
403531' 322 01 0 00 403521' JUMPE A,RDDICT
403532' 261 17 0 00 000001 PUSH P,A
403533' 200 01 1 00 002142' MOVE A,@DICTBF+1
403534' 602 01 0 00 000001 TRNE A,1
403535' 254 00 0 00 403541' JRST RDICT2
403536' 262 17 0 00 000001 POP P,A
403537' CPOPJ1: ICOUNT^
403537' 350 00 0 17 000000 AOS (P)
403540' CPOPJ: ICOUNT^
403540' 263 17 0 00 000000 POPJ P, ;NORMALLY A SKIP RETURN
403541' RDICT2: ICOUNT^
403541' 200 01 0 00 002143' MOVE A,DICTBF+2
403542' 275 01 0 00 000005 SUBI A,5
403543' 202 01 0 00 002143' MOVEM A,DICTBF+2 ;FIX CHARACTER COUNT.
403544' 350 00 0 00 002142' AOS DICTBF+1 ;LIKEWISE FIX BYTE POINTER
403545' 262 17 0 00 000001 POP P,A
403546' 254 00 0 00 403521' JRST RDDICT ;BACK AND READ MORE.
SUBTTL DICTIONARY MANIPULATION - RDICTW - READ A DICTIONARY WORD
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-85
SPELL MAC 17-JAN-79 22:25 DICTIONARY MANIPULATION - RDICTW - READ A DICTIONARY WORD
;RETURNS TO CALL+1 ON EOF
; +2 IF WORD IS A MISSPELLING (TERMINATED BY ">")
; +3 IF WORD IS A REAL SPELLING
;CHARACTER COUNT IN W. 5 BIT TEXT IN WORDIN. 7 BIT ASCIZ IN WORDIX
403547' RDICTW: ICOUNT^
403547' 403 05 0 00 010776' SETZB W,WORDIN
403550' 200 01 0 00 406634' MOVE A,[XWD WORDIN,WORDIN+1]
403551' 251 01 0 00 011016' BLT A,WORDIX+12
403552' 200 06 0 00 406622' MOVE X,[POINT 5,WORDIN]
403553' 200 07 0 00 406623' MOVE Y,[POINT 7,WORDIX]
403554' RDCTW1: ICOUNT^
403554' 260 17 0 00 403521' PUSHJ P,RDDICT
403555' 254 00 0 00 403540' JRST CPOPJ ;EOF. RETURN +1
403556' 136 01 0 00 000007 IDPB A,Y ;SAVE ASCII
403557' 305 01 0 00 000101 CAIGE A,"A"
403560' 254 00 0 00 403567' JRST RDCTW3 ;A DELIMITER OR APOSTROPHE
403561' RDCTW2: ICOUNT^
403561' 624 01 0 00 000140 TRZA A,140 ;MAKE 5BIT, SKIP
403562' 201 01 0 00 000033 RDCTW6: MOVEI A,APOS ;SET CODE FOR APOSTROPHE
403563' 136 01 0 00 000006 IDPB A,X ;SAVE 5BIT
403564' 303 05 0 00 000050 CAILE W,50
403565' 254 00 0 00 403601' JRST RDCTW4 ;TOO LONG
403566' 344 05 0 00 403554' AOJA W,RDCTW1 ;BACK FOR MORE
403567' RDCTW3: ICOUNT^
403567' 306 01 0 00 000047 CAIN A,"'"
403570' 254 00 0 00 403562' JRST RDCTW6 ;CHANGE TO SPECIAL CODE FOR APOSTROPHE
403571' 306 01 0 00 000076 CAIN A,">" ;IS THIS A MISSPELLING?
403572' 326 05 0 00 403537' JUMPN W,CPOPJ1 ;RETURN +2
403573' RDCTW7: ICOUNT^
403573' 302 01 0 00 000012 CAIE A,LF
403574' 306 01 0 00 000014 CAIN A,FF ;LF AND FF STOP US.
JRST [JUMPN W,CPOPJ2 ;RETURN A WORD, IF PRESENT.
403575' 254 00 0 00 407160' JRST RDICTW] ;IGNORE ZERO LENGTH WORDS
403576' 260 17 0 00 403521' PUSHJ P,RDDICT ;OTHERWISE FLUSH TO END OF LINE OR PAGE
403577' 254 00 0 00 403540' JRST CPOPJ ;EOF - RETURN +1
403600' 254 00 0 00 403573' JRST RDCTW7
403601' 051 03 0 00 407162' RDCTW4: OUTSTR [ASCIZ/Dictionary entry too long, or illegal: /]
403602' 051 03 0 00 011004' OUTSTR WORDIX
403603' 051 03 0 00 400000' OUTSTR CRLF
403604' 260 17 0 00 403521' RDCTW5: PUSHJ P,RDDICT
403605' 254 00 0 00 403540' JRST CPOPJ ;EOF - RETURN +1
403606' 051 01 0 00 000001 OUTCHR A ;TYPE FURTHER OFFENDING CHARACTERS
403607' 302 01 0 00 000012 CAIE A,LF
403610' 306 01 0 00 000014 CAIN A,FF ;FF OR LF WILL STOP US
403611' 254 00 0 00 403547' JRST RDICTW ;BACK FOR A WHOLE NEW WORD
403612' 254 00 0 00 403604' JRST RDCTW5
SUBTTL GETFIL SCAN TERMINAL FOR A FILE NAME.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-86
SPELL MAC 17-JAN-79 22:25 GETFIL SCAN TERMINAL FOR A FILE NAME.
IFE TENEX,<
;SCAN DEV:FILE.EXT[PRJ,PRG]<CRLF>. RETURNS K,L,M,N = FILE,EXT,DEV,PPN.
403613' GETFIL:
403613' 403 11 0 00 000012 SCAN: SETZB K,L
403614' 403 13 0 00 000014 SCAN4: SETZB M,N ;ENTRY WHEN WISHING TO REUSE NAME. MDA 790112
403615' 260 17 0 00 403663' PUSHJ P,GETSIX ;GET SIXBIT TERM
JUMPE B,[CAIE A,12 ;NULL TERM MUST END WITH LF
JRST SCNERR ;NO.
403616' 322 02 0 00 407172' POPJ P,] ;DIRECT RETURN = NULL TERM
403617' 302 01 0 00 000072 CAIE A,":" ;DEVICE NAME?
403620' 254 00 0 00 403623' JRST SCAN1 ;NO. MUST BE A FILE NAME
403621' 200 13 0 00 000002 MOVE M,B ;LOAD DEVICE NAME
403622' 260 17 0 00 403663' PUSHJ P,GETSIX ;GET WHAT SHOULD BE THE FILE NAME
403623' 200 11 0 00 000002 SCAN1: MOVE K,B
403624' 302 01 0 00 000056 CAIE A,"." ;EXT NEXT?
403625' 254 00 0 00 403630' JRST SCAN2 ;NOPE.
403626' 260 17 0 00 403663' PUSHJ P,GETSIX
403627' 510 12 0 00 000002 HLLZ L,B
403630' 302 01 0 00 000133 SCAN2: CAIE A,"[" ;PPN NEXT?
403631' 254 00 0 00 403644' JRST SCAN3 ;NO.
IFN STANSW,< PUSHJ P,GETSIX
CAIE A,","
JRST SCNERR ;ERROR IN PPN
JUMPE B,SCNERR ;ERROR IN PPN
PUSHJ P,RADJ
MOVSI N,(B)
PUSHJ P,GETSIX
JUMPE B,SCNERR ;ERROR IN PPN
PUSHJ P,RADJ
HRRI N,(B) >
403632' 260 17 0 00 403653' IFE STANSW,< PUSHJ P,PPNSCN
403633' 302 01 0 00 000054 CAIE A,","
403634' 254 00 0 00 403646' JRST SCNERR
403635' 205 14 0 02 000000 MOVSI N,(B)
403636' 260 17 0 00 403653' PUSHJ P,PPNSCN
403637' 541 14 0 02 000000 HRRI N,(B) >
403640' 201 02 0 00 000000 MOVEI B,0
403641' 306 01 0 00 000135 CAIN A,"]"
403642' 260 17 0 00 403663' PUSHJ P,GETSIX
403643' 326 02 0 00 403646' JUMPN B,SCNERR ;ERROR IF NOT IMEDIATE DELIMITER
403644' 306 01 0 00 000012 SCAN3: CAIN A,12 ;LF IS THE USUAL END
403645' 254 00 0 00 403537' JRST CPOPJ1 ;RETURN HAPPY.
403646' 321 01 0 00 403650' SCNERR: JUMPL A,.+2
403647' 260 17 0 00 403704' PUSHJ P,ILLEG ;GO COMPLAIN AND TELL HIM THE CHARACTER
403650' 260 17 0 00 404154' PUSHJ P,FLUTTY ;EMPTY TO NEXT CRLF
403651' 051 03 0 00 407175' OUTSTR [ASCIZ/Try again: /]
403652' 254 00 0 00 403613' JRST SCAN
IFE STANSW,<
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-87
SPELL MAC 17-JAN-79 22:25 GETFIL SCAN TERMINAL FOR A FILE NAME.
403653' 201 02 0 00 000000 PPNSCN: MOVEI B,0
403654' 051 04 0 00 000001 PPNSC1: INCHWL A
403655' 301 01 0 00 000060 CAIL A,"0"
403656' 301 01 0 00 000070 CAIL A,"0"+PPNMUL
403657' 263 17 0 00 000000 POPJ P, ;RETURN DELIMITER
403660' 221 02 0 00 000010 IMULI B,PPNMUL
403661' 271 02 0 01 777720 ADDI B,-"0"(A)
403662' 254 00 0 00 403654' JRST PPNSC1 >
IFN STANSW,<
RADJ: HLRZ B,B
RADJ1: TRNE B,77 ;RIGHT ADJUSTED YET?
POPJ P, ;YES.
LSH B,-6
JRST RADJ1 >
403663' 403 02 0 00 000070' GETSIX: SETZB B,QMODE ;B ACCUMULATES TEXT. QMODE FOR QUOTING
403664' 334 03 0 00 407200' SKIPA C,[POINT 6,B]
403665' 462 00 0 00 000070' QSET: SETCMM QMODE ;HERE FOR CTRL A (DOWN ARROW)
403666' 051 04 0 00 000001 GETSX1: INCHWL A ;READ A CHARACTER
403667' 405 01 0 00 000177 ANDI A,177 ;STRIP OFF ANY BUCKY BITS
403670' 200 04 0 01 403716' MOVE D,CHRTAB(A) ;GET NORMAL DISPATCH
403671' 332 00 0 00 000070' SKIPE QMODE ;SKIP IF NORMAL
403672' 204 04 0 00 000004 MOVS D,D ;USE QUOTE MODE DISPATCH
403673' 254 00 0 04 000000 JRST (D)
403674' 624 01 0 00 000100 GETSX2: TRZA A,100 ;HERE FOR LOWER CASE LETTER
403675' 275 01 0 00 000040 GETSX3: SUBI A," " ;HERE FOR UPPER CASE LETTER, DIGIT
403676' 603 03 0 00 770000 TLNE C,770000 ;BYTE OVERFLOW?
403677' 136 01 0 00 000003 IDPB A,C ;NOT OVERFLOW. DEPOSIT BYTE
403700' 254 00 0 00 403666' JRST GETSX1 ;LOOP
403701' 263 17 0 00 000000 DELIM: POPJ P,
403702' 326 02 0 00 403540' BLANK: JUMPN B,CPOPJ ;TRAILING BLANK IS A DELIMITER
403703' 254 00 0 00 403666' JRST GETSX1 ;LEADING BLANKS, TABS ARE FLUSHED
403704' 051 03 0 00 407201' ILLEG: OUTSTR [ASCIZ/ILLEGAL CHARACTER "/]
403705' 302 01 0 00 000015 CAIE A,15
403706' 051 01 0 00 000001 OUTCHR A
403707' 051 03 0 00 407205' OUTSTR [ASCIZ/" OCCURED IN SCAN/]
403710' 332 00 0 00 000070' SKIPE QMODE
403711' 051 03 0 00 407211' OUTSTR [ASCIZ/ WHILE IN QUOTE MODE/]
403712' 402 00 0 00 000070' SETZM QMODE
403713' 051 03 0 00 400000' OUTSTR CRLF
403714' 211 01 0 00 000001 MOVNI A,1 ;SET DELIMITER TO REDICULOUS
403715' 263 17 0 00 000000 POPJ P, ;RETURN, HOPING SOMEONE'LL NOTICE
403716' 403666' 403666' CHRTAB: GETSX1,,GETSX1 ;NULL
403717' 403665' 403665' QSET,,QSET ;CTRL A = DOWN ARROW. SETS QUOTE MODE
403720' 403704' 403704' ILLEG,,ILLEG ;2
403721' 403704' 403704' ILLEG,,ILLEG ;3
403722' 403704' 403704' ILLEG,,ILLEG ;4
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-88
SPELL MAC 17-JAN-79 22:25 GETFIL SCAN TERMINAL FOR A FILE NAME.
403723' 403704' 403704' ILLEG,,ILLEG ;5
403724' 403704' 403704' ILLEG,,ILLEG ;6
403725' 403704' 403704' ILLEG,,ILLEG ;7
403726' 403704' 403704' ILLEG,,ILLEG ;10
403727' 403704' 403702' ILLEG,,BLANK ;11
403730' 403704' 403701' ILLEG,,DELIM ;12
403731' 403704' 403704' ILLEG,,ILLEG ;13
403732' 403704' 403704' ILLEG,,ILLEG ;14
403733' 403704' 403666' ILLEG,,GETSX1 ;15 IGNORE
403734' 403704' 403704' ILLEG,,ILLEG ;16
403735' 403704' 403704' ILLEG,,ILLEG ;17
REPEAT 40-20,<ILLEG,,ILLEG>
403736' 403704' 403704' ILLEG,,ILLEG
403737' 403704' 403704' ILLEG,,ILLEG
403740' 403704' 403704' ILLEG,,ILLEG
403741' 403704' 403704' ILLEG,,ILLEG
403742' 403704' 403704' ILLEG,,ILLEG
403743' 403704' 403704' ILLEG,,ILLEG
403744' 403704' 403704' ILLEG,,ILLEG
403745' 403704' 403704' ILLEG,,ILLEG
403746' 403704' 403704' ILLEG,,ILLEG
403747' 403704' 403704' ILLEG,,ILLEG
403750' 403704' 403704' ILLEG,,ILLEG
403751' 403704' 403704' ILLEG,,ILLEG
403752' 403704' 403704' ILLEG,,ILLEG
403753' 403704' 403704' ILLEG,,ILLEG
403754' 403704' 403704' ILLEG,,ILLEG
403755' 403704' 403704' ILLEG,,ILLEG ;20-37 ARE ALL ILLEGAL
403756' 403675' 403702' GETSX3,,BLANK ;40 BLANK IS A DELIMITER
403757' 403675' 403704' GETSX3,,ILLEG ;41 !
403760' 403675' 403704' GETSX3,,ILLEG ;42 "
403761' 403675' 403704' GETSX3,,ILLEG ;43 #
403762' 403675' 403675' GETSX3,,GETSX3 ;44 $ LEGAL IN FILE NAMES
403763' 403675' 403704' GETSX3,,ILLEG ;45 %
403764' 403675' 403704' GETSX3,,ILLEG ;46 &
403765' 403675' 403704' GETSX3,,ILLEG ;47 '
403766' 403675' 403704' GETSX3,,ILLEG ;50 (
403767' 403675' 403704' GETSX3,,ILLEG ;51 )
403770' 403675' 403704' GETSX3,,ILLEG ;52 *
403771' 403675' 403704' GETSX3,,ILLEG ;53 +
403772' 403675' 403701' GETSX3,,DELIM ;54 , COMMA
403773' 403675' 403704' GETSX3,,ILLEG ;55 -
403774' 403675' 403701' GETSX3,,DELIM ;56 . PERIOD
403775' 403675' 403704' GETSX3,,ILLEG ;57 /
REPEAT 72-60,<GETSX3,,GETSX3>
403776' 403675' 403675' GETSX3,,GETSX3
403777' 403675' 403675' GETSX3,,GETSX3
404000' 403675' 403675' GETSX3,,GETSX3
404001' 403675' 403675' GETSX3,,GETSX3
404002' 403675' 403675' GETSX3,,GETSX3
404003' 403675' 403675' GETSX3,,GETSX3
404004' 403675' 403675' GETSX3,,GETSX3
404005' 403675' 403675' GETSX3,,GETSX3
404006' 403675' 403675' GETSX3,,GETSX3
404007' 403675' 403675' GETSX3,,GETSX3 ;60-71 (0-9) ARE LEGAL
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-89
SPELL MAC 17-JAN-79 22:25 GETFIL SCAN TERMINAL FOR A FILE NAME.
404010' 403675' 403701' GETSX3,,DELIM ;72 :
404011' 403675' 403704' GETSX3,,ILLEG ;73 ;
404012' 403675' 403704' GETSX3,,ILLEG ;74 <
404013' 403675' 403704' GETSX3,,ILLEG ;75 =
404014' 403675' 403704' GETSX3,,ILLEG ;76 >
404015' 403675' 403704' GETSX3,,ILLEG ;77 ?
404016' 403675' 403704' GETSX3,,ILLEG ;100 @
REPEAT 133-101,<GETSX3,,GETSX3>
404017' 403675' 403675' GETSX3,,GETSX3
404020' 403675' 403675' GETSX3,,GETSX3
404021' 403675' 403675' GETSX3,,GETSX3
404022' 403675' 403675' GETSX3,,GETSX3
404023' 403675' 403675' GETSX3,,GETSX3
404024' 403675' 403675' GETSX3,,GETSX3
404025' 403675' 403675' GETSX3,,GETSX3
404026' 403675' 403675' GETSX3,,GETSX3
404027' 403675' 403675' GETSX3,,GETSX3
404030' 403675' 403675' GETSX3,,GETSX3
404031' 403675' 403675' GETSX3,,GETSX3
404032' 403675' 403675' GETSX3,,GETSX3
404033' 403675' 403675' GETSX3,,GETSX3
404034' 403675' 403675' GETSX3,,GETSX3
404035' 403675' 403675' GETSX3,,GETSX3
404036' 403675' 403675' GETSX3,,GETSX3
404037' 403675' 403675' GETSX3,,GETSX3
404040' 403675' 403675' GETSX3,,GETSX3
404041' 403675' 403675' GETSX3,,GETSX3
404042' 403675' 403675' GETSX3,,GETSX3
404043' 403675' 403675' GETSX3,,GETSX3
404044' 403675' 403675' GETSX3,,GETSX3
404045' 403675' 403675' GETSX3,,GETSX3
404046' 403675' 403675' GETSX3,,GETSX3
404047' 403675' 403675' GETSX3,,GETSX3
404050' 403675' 403675' GETSX3,,GETSX3 ;101-132 (A-Z) ARE LEGAL
404051' 403675' 403701' GETSX3,,DELIM ;133 [
404052' 403675' 403704' GETSX3,,ILLEG ;134 \
404053' 403675' 403701' GETSX3,,DELIM ;135 ]
404054' 403675' 403704' GETSX3,,ILLEG ;136 ^
404055' 403675' 403704' GETSX3,,ILLEG ;137 _
404056' 403704' 403704' ILLEG,,ILLEG ;140 `
REPEAT 173-141,<GETSX2,,GETSX2>
404057' 403674' 403674' GETSX2,,GETSX2
404060' 403674' 403674' GETSX2,,GETSX2
404061' 403674' 403674' GETSX2,,GETSX2
404062' 403674' 403674' GETSX2,,GETSX2
404063' 403674' 403674' GETSX2,,GETSX2
404064' 403674' 403674' GETSX2,,GETSX2
404065' 403674' 403674' GETSX2,,GETSX2
404066' 403674' 403674' GETSX2,,GETSX2
404067' 403674' 403674' GETSX2,,GETSX2
404070' 403674' 403674' GETSX2,,GETSX2
404071' 403674' 403674' GETSX2,,GETSX2
404072' 403674' 403674' GETSX2,,GETSX2
404073' 403674' 403674' GETSX2,,GETSX2
404074' 403674' 403674' GETSX2,,GETSX2
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-90
SPELL MAC 17-JAN-79 22:25 GETFIL SCAN TERMINAL FOR A FILE NAME.
404075' 403674' 403674' GETSX2,,GETSX2
404076' 403674' 403674' GETSX2,,GETSX2
404077' 403674' 403674' GETSX2,,GETSX2
404100' 403674' 403674' GETSX2,,GETSX2
404101' 403674' 403674' GETSX2,,GETSX2
404102' 403674' 403674' GETSX2,,GETSX2
404103' 403674' 403674' GETSX2,,GETSX2
404104' 403674' 403674' GETSX2,,GETSX2
404105' 403674' 403674' GETSX2,,GETSX2
404106' 403674' 403674' GETSX2,,GETSX2
404107' 403674' 403674' GETSX2,,GETSX2
404110' 403674' 403674' GETSX2,,GETSX2 ;141-172 (a-z) ARE LEGAL AND ALWAYS CONVERTED
404111' 403704' 403704' ILLEG,,ILLEG ;173
404112' 403704' 403704' ILLEG,,ILLEG ;174
404113' 403704' 403704' ILLEG,,ILLEG ;175
404114' 403704' 403704' ILLEG,,ILLEG ;176
404115' 403704' 403704' ILLEG,,ILLEG ;177
>;IFE TENEX
IFN TENEX,<
; K: POINTER TO HEADER, PRIVATE TO THIS FILE
; L: POINTER TO ASCIZ FOR DEFAULT NAME
; M: POINTER TO ASCIZ FOR DEFAULT EXTENSION
GETFI4: CAIN 1,GJFX33 ;HERE ON ERROR. NULL FILE NAME?
POPJ P, ;YES, DON'T SKIP
MOVEI 1,100
CFIBF
OUTSTR [ASCIZ/ ?
/]
PUSHJ P,JSYSER
OUTSTR [ASCIZ/Try again: /]
GETFIL: MOVEM L,DEFALT+4 ;DEFAULT NAME
MOVEM M,DEFALT+5 ;DEFAULT EXTENSION
MOVSI 1,(1B2!1B3!1B4) ;OLD, CONFIRM, OLD/NEW
SKIPGE 6(K)
MOVSI 1,(1B0!1B3!1B4) ;OUTPUT, CONFIRM, OLD/NEW
MOVEM 1,DEFALT+0
MOVEI 1,DEFALT
SETZ 2,
GTJFN
JRST GETFI4 ;ERROR.
MOVEM 1,3(K) ;STASH THE JFN
SKIPGE 6(K) ;SKIP ON INPUT
JRST CPOPJ1 ;OUTPUT - EXIT WITH SKIP RETURN
JRST CPOPJ1
>;END IFN TENEX
SUBTTL ERROR MESSAGES
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-91
SPELL MAC 17-JAN-79 22:25 ERROR MESSAGES
DDE: OUTSTR [ASCIZ/DEVICE DATA ERROR (OUTPUT)
404116' 051 03 0 00 407216' /]
404117' 254 04 0 00 000000 HALT
404120' FNOTFM:
IFN TENEX,<POPJ P, >
404120' 051 03 0 00 407224' OUTSTR [ASCIZ/FILE NOT FOUND. DSK:/]
404121' 254 00 0 00 404231' JRST TYFILN ;ARGS IN K,L,M,N
404122' 051 03 0 00 407231' NODEV: OUTSTR [ASCIZ/DEVICE /]
404123' 260 17 0 00 404265' PUSHJ P,TYSIX ;NAME IN B
OUTSTR [ASCIZ/: COULD NOT BE OPENED.
404124' 051 03 0 00 407233' /]
404125' 263 17 0 00 000000 POPJ P,
404126' 051 03 0 00 407240' BUFTBG: OUTSTR [ASCIZ/BUFFER SIZE FOR DEVICE /]
404127' 260 17 0 00 404265' PUSHJ P,TYSIX
OUTSTR [ASCIZ/: EXCEEDS SPACE ALLOCATED. CHANGE DBFSIZ AND REASSEMBLE
404130' 051 03 0 00 407245' /]
404131' 263 17 0 00 000000 POPJ P,
;TYPES DECIMAL NUMBER GIVEN IN A.
404132' 261 17 0 00 000002 DECPTR: PUSH P,B
404133' 261 17 0 00 000003 PUSH P,C
404134' 400 03 0 00 000000 SETZ C,
404135' 260 17 0 00 404141' PUSHJ P,DECPTX ;USES B. A IS ARGUMENT
404136' 262 17 0 00 000003 POP P,C
404137' 262 17 0 00 000002 POP P,B
404140' 263 17 0 00 000000 POPJ P,
404141' 231 01 0 00 000012 DECPTX: IDIVI A,12 ;IF CALLED DIRECTLY, TYPES (A)
404142' 506 02 0 17 000000 HRLM B,(P) ; AS A DECIMAL NUMBER, RIGHT JUSTIFIED
404143' 370 00 0 00 000003 SOS C ; IN (C) COLUMNS
404144' 322 01 0 00 404146' JUMPE A,.+2
404145' 260 17 0 00 404141' PUSHJ P,DECPTX
404146' 371 00 0 00 000003 DECPT1: SOSL C
JRST [OUTCHR [" "]
404147' 254 00 0 00 407262' JRST DECPT1]
404150' 554 01 0 17 000000 HLRZ A,(P)
404151' 271 01 0 00 000060 ADDI A,"0"
404152' 051 01 0 00 000001 OUTCHR A
404153' 263 17 0 00 000000 POPJ P,
IFE TENEX,< ;IN TENEX VERSION, FLUTTY IS IN TTCALL SIMULATION
404154' FLUTTY: ICOUNT^
404154' 261 17 0 00 000001 PUSH P,A
404155' FLUTT1: ICOUNT^
404155' 302 01 0 00 000012 CAIE A,12
404156' 306 01 0 00 000175 CAIN A,175
404157' 254 00 0 00 404166' JRST FLUTT2
404160' 302 01 0 00 000033 CAIE A,33
404161' 306 01 0 00 000176 CAIN A,176
404162' 254 00 0 00 404166' JRST FLUTT2
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-92
SPELL MAC 17-JAN-79 22:25 ERROR MESSAGES
404163' 051 02 0 00 000001 INCHRS A ;INPUT CHARACTER AND SKIP
404164' 254 00 0 00 404166' JRST FLUTT2
404165' 254 00 0 00 404155' JRST FLUTT1
404166' 262 17 0 00 000001 FLUTT2: POP P,A
404167' 263 17 0 00 000000 POPJ P,
>;IFE TENEX
NOCORE: OUTSTR [ASCIZ/INSUFFICIENT CORE AVAILABLE. I GIVE UP
404170' 051 03 0 00 407264' /]
404171' 047 00 0 00 000012 EXIT
NOWRIT: OUTSTR [ASCIZ/Unable to write in high segment
404172' 051 03 0 00 407275' /]
404173' 047 00 0 00 000012 EXIT
404174' ENTFAI:
IFN TENEX, < POPJ P, >
404174' 051 03 0 00 407304' OUTSTR [ASCIZ/Enter failed on: /]
404175' 254 00 0 00 404231' JRST TYFILN
DIE: OUTSTR [ASCIZ/DEVICE ERROR (INPUT)
404176' 051 03 0 00 407310' /]
404177' 254 04 0 00 404177' HALT .
;LIBUF OR LOBUF OVERFLOW
404200' 260 17 0 00 401305' LOVFLW: PUSHJ P,PPAGE
404201' 051 03 0 00 407315' OUTSTR [ASCIZ /Line exceeds /]
404202' 201 01 0 00 001200 MOVEI A,5*LINSIZ
404203' 260 17 0 00 404132' PUSHJ P,DECPTR
OUTSTR [ASCIZ ! characters.
You should edit the input file. Checking/correcting aborted.
404204' 051 03 0 00 407320' !]
404205' 260 17 0 00 400543' PUSHJ P,FLOOP ;CLOSE OPEN FILES
404206' 254 00 0 00 400123' JRST ENDIT ;LET USER DO SOMETHING ELSE, IF HE WANTS
404207' INTCFN:
IFN TENEX,< POPJ P, >
OUTSTR [ASCIZ/
404207' 051 03 0 00 407340' Internal confusion in the spelling checker. Called from location: /]
404210' 261 17 0 00 000001 PUSH P,A
404211' 550 01 0 17 777777 HRRZ A,-1(P)
404212' 261 17 0 00 000002 PUSH P,B
404213' 275 01 0 00 000001 SUBI A,1
404214' 260 17 0 00 404221' PUSHJ P,OCTPTR
IFG COUNTS,< PUSHJ P,CRASH>
404215' 262 17 0 00 000002 POP P,B
404216' 262 17 0 00 000001 POP P,A
OUTSTR [ASCIZ/
You may continue, with doubtful results....
404217' 051 03 0 00 407357' /]
404220' 254 04 0 00 403540' HALT CPOPJ
;TYPES OCTAL NUMBER GIVEN IN A
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-93
SPELL MAC 17-JAN-79 22:25 ERROR MESSAGES
404221' 231 01 0 00 000010 OCTPTR: IDIVI A,10
404222' 261 17 0 00 000002 PUSH P,B
404223' 322 01 0 00 404225' JUMPE A,.+2
404224' 260 17 0 00 404221' PUSHJ P,OCTPTR
404225' 262 17 0 00 000002 POP P,B
404226' 271 02 0 00 000060 ADDI B,60
404227' 051 01 0 00 000002 OUTCHR B
404230' 263 17 0 00 000000 POPJ P,
404231' 261 17 0 00 000001 TYFILN: PUSH P,A ;TYPE FILE NAME FROM K,L,N
404232' 261 17 0 00 000002 PUSH P,B
404233' 200 02 0 00 000011 MOVE B,K
404234' 260 17 0 00 404265' PUSHJ P,TYSIX
404235' 510 02 0 00 000012 HLLZ B,L
404236' 322 02 0 00 404241' JUMPE B,TYPPN
404237' 051 01 0 00 407371' OUTCHR ["."]
404240' 260 17 0 00 404265' PUSHJ P,TYSIX
404241' 322 14 0 00 404251' TYPPN: JUMPE N,TYFLRT ;RETURN IF NO PPN
404242' 051 01 0 00 407372' OUTCHR ["["]
404243' 554 01 0 00 000014 HLRZ A,N ;GET PRJ
404244' 260 17 0 00 404255' PUSHJ P,TYPPN1 ;TYPE PART
404245' 051 01 0 00 407373' OUTCHR [","]
404246' 550 01 0 00 000014 HRRZ A,N ;GET PRG
404247' 260 17 0 00 404255' PUSHJ P,TYPPN1 ;TYPE PART
404250' 051 01 0 00 407374' OUTCHR ["]"]
404251' 051 03 0 00 400000' TYFLRT: OUTSTR CRLF
404252' 262 17 0 00 000002 POP P,B
404253' 262 17 0 00 000001 POP P,A
404254' 263 17 0 00 000000 POPJ P,
404255' TYPPN1:
IFN STANSW,< HRLZ B,A ;GET ARGUMENT
JRST TYSIX >
404255' 231 01 0 00 000010 IFE STANSW,< IDIVI A,PPNMUL
404256' 506 02 0 17 000000 HRLM B,(P)
404257' 322 01 0 00 404261' JUMPE A,.+2
404260' 260 17 0 00 404255' PUSHJ P,TYPPN1
404261' 554 01 0 17 000000 HLRZ A,(P)
404262' 271 01 0 00 000060 ADDI A,"0"
404263' 051 01 0 00 000001 OUTCHR A
404264' 263 17 0 00 000000 POPJ P,>
404265' 322 02 0 00 403540' TYSIX: JUMPE B,CPOPJ
404266' 201 01 0 00 000000 MOVEI A,0
404267' 246 01 0 00 000006 LSHC A,6
404270' 271 01 0 00 000040 ADDI A," "
404271' 051 01 0 00 000001 OUTCHR A
404272' 254 00 0 00 404265' JRST TYSIX
SUBTTL HASHCP THE HASH COMPUTATION.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-94
SPELL MAC 17-JAN-79 22:25 HASHCP THE HASH COMPUTATION.
COMMENT/
HASHCP: COMPUTES THE HASH INDEX TO THE TABLE HASHTB.
ARGUMENTS: W. WORD LENGTH
WORDIN 5 BIT WORD
RESULTS: Z: THE INDEX TO THE TABLE, EXCEPT
Z=-1 IF W < 2.
FLAG, LEFT (IN FL RIGHT) IS SET IF HASH CODE IS ON
LEFT HALF, OTHERWISE, RIGHT HALF
/
;APOSTROPHE HASHES AS "Z", APOSTROPHE ISN'T LEGAL AS THE FIRST CHARACTER
;OF ANY INPUT OR DICTIONARY WORD, HOWEVER, IN THE PROCESS OF CORRECTION
;WE MAY BE ASKED TO HASH A LEADING APOSTROPHE
404273' HASHCP: ICOUNT^
404273' 474 10 0 00 000000 SETO Z,
JUMPLE W,[OUTSTR [ASCIZ/0 LENGTH WORD AT HASHCP/]
404274' 323 05 0 00 407402' POPJ P,]
404275' 307 05 0 00 000001 CAIG W,1
404276' 263 17 0 00 000000 POPJ P, ;SIMPLE FOR WORDS OF LENGTH 1.
404277' 135 10 0 00 407404' LDB Z,[POINT 5,WORDIN,4]
404300' 303 10 0 00 000032 CAILE Z,Z5
404301' 254 00 0 00 404324' JRST HSHER2 ;ERROR (OR MAYBE APOSTROPHE)
404302' 322 10 0 00 404330' JUMPE Z,HASHER
; RESTORE CALCULATION FROM 1972 VERSION. MDA 790112
404303' 275 10 0 00 000001 HASHC0: SUBI Z,1
404304' 221 10 0 00 000032 IMULI Z,Z5
404305' 135 01 0 00 407405' LDB A,[POINT 5,WORDIN,9]
404306' 303 01 0 00 000032 CAILE A,Z5
404307' 254 00 0 00 404326' JRST HSHER1 ;PROBABLY HASHING ERROR, BUT MAYBE APOSTROPHE
404310' 322 01 0 00 404330' JUMPE A,HASHER
404311' 271 10 0 01 777777 HASHC1: ADDI Z,-1(A)
404312' 221 10 0 00 000012 IMULI Z,12
404313' 201 06 0 05 777776 MOVEI X,-2(W)
404314' 303 06 0 00 000011 CAILE X,11
404315' 201 06 0 00 000011 MOVEI X,11
404316' 270 10 0 00 000006 ADD Z,X
404317' 602 10 0 00 000001 TRNE Z,1
404320' 624 00 0 00 000004 TRZA FL,LEFT ;ODD. RIGHT HALF
404321' 660 00 0 00 000004 TRO FL,LEFT ;EVEN, SET LEFT FLAG
404322' 242 10 0 00 777777 LSH Z,-1 ;HALVE Z.
404323' 263 17 0 00 000000 POPJ P,
404324' 306 10 0 00 000033 HSHER2: CAIN Z,APOS
404325' 364 10 0 00 404303' SOJA Z,HASHC0
404326' 306 01 0 00 000033 HSHER1: CAIN A,APOS
404327' 364 01 0 00 404311' SOJA A,HASHC1 ;FOR APOSTROPHE, SET A TO CODE FOR "Z"
HASHER: OUTSTR [ASCIZ/HASHING ERROR
404330' 051 03 0 00 407406' /]
404331' 254 04 0 00 403540' HALT CPOPJ
SUBTTL SEARCH LOOK IN DICTIONARY FOR A WORD.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-95
SPELL MAC 17-JAN-79 22:25 SEARCH LOOK IN DICTIONARY FOR A WORD.
COMMENT/ THE SUBJECT OF THE SEARCH LIVES IN WORDIN.
IT HAS W CHARACTERS.
IT HAS HASH INDEX Z. (AND PERHAPS FLAG "LEFT" IN RH OF FL)
IF Z<0 (MEANS W<2) THEN WE WILL ALWAYS FIND IT AS A WORD.
RETURNS POINTER TO WORD IN X (AND IN STEM).
RETURNS TO CALL +1 IF WORD NOT FOUND
+2 IF FOUND AS MISSPELLING
+3 IF FOUND AS A REAL SPELLING
CLOBBERS Y, L.
/
;SUBROUTINE MATCH: PERFORM HASH COMPUTATION, THEN SEARCH FOR
; WORD. SKIP RETURN IF FOUND.
404332' 260 17 0 00 404273' MATCH: PUSHJ P,HASHCP
404333' SEARCH: ICOUNT^
404333' 321 10 0 00 404365' JUMPL Z,CPOPJ2 ;EASY.
404334' 202 05 0 17 000001 MOVEM W,1(P) ;SAVE W FOR A WHILE.
404335' 231 05 0 00 000007 IDIVI W,7 ;7 CHARS/WORD IN FIVEBIT
404336' 322 06 0 00 404340' JUMPE X,.+2 ;SKIP IF REMAINDER ZERO
404337' 271 05 0 00 000001 ADDI W,1 ;THIS IS ENGLISH WORD'S LENGTH IN MACHINE WORDS.
404340' 210 05 0 00 000005 MOVN W,W
404341' 516 05 0 00 011117' HRLZM W,WWLEN ;SAVE -WORD LENGTH,,0. (AOBJN POINTER TO WORDIN)
404342' 200 05 0 17 000001 MOVE W,1(P) ;RESTORE W.
404343' 606 00 0 00 000004 TRNN FL,LEFT ;MUST WE USE LEFT SIDE?
404344' 334 12 0 10 002156' SKIPA L,HASHTB(Z) ;NO. (RIGHT SIDE GETS RIGHT SIDE)
404345' 554 12 0 10 002156' HLRZ L,HASHTB(Z) ;USE LEFT SIDE. SIMULATE AN ADVANCE.
404346' SERCH3: ICOUNT ^ ;HERE FOR FAILURE
404346' 201 06 0 12 000000 MOVEI X,(L) ;LINK FORWARD.
404347' 322 06 0 00 403540' JUMPE X,CPOPJ ;SEARCH EXHAUSTED, A FAILURE.
404350' 550 12 0 06 000000 HRRZ L,(X) ;THIS LOADS L WITH LINK TO THE NEXT.
;X POINTS ONE BEFORE THE PRESENT ENTRY.
404351' 200 07 0 00 011117' MOVE Y,WWLEN ;Y WILL INDEX WORDIN. AOBJN POINTER.
404352' SERCH2: ICOUNT^
404352' 200 11 0 07 010776' MOVE K,WORDIN(Y)
404353' 312 11 0 06 000001 CAME K,1(X) ;(X IS LAGGING - STARTS AT WORD HEADER)
404354' 254 00 0 00 404346' JRST SERCH3 ;FAILED
404355' 271 06 0 00 000001 ADDI X,1
404356' 253 07 0 00 404352' AOBJN Y,SERCH2 ;ADVANCE Y (AND X)
404357' 135 11 0 00 407412' LDB K,[POINT 5,1(X),4] ;IF W=14,21,... MAY BE COMPARING
404360' 326 11 0 00 404346' JUMPN K,SERCH3 ;AGAINST A LONGER WORD
404361' 275 06 0 07 777777 SUBI X,-1(Y) ;MAKE DIRECT POINTER IN X
404362' 202 06 0 00 011063' MOVEM X,STEM ;ALSO SAVE IT IN STEM
404363' 200 07 0 06 777777 MOVE Y,-1(X) ;FLAGS WORD OF ENTRY
404364' 607 07 0 00 000040 TLNN Y,MISSPL ;SKIP IF THE WORD IS MISSPELLED
404365' 350 00 0 17 000000 CPOPJ2: AOS (P) ;ARRANGE FOR RETURN TO CALL+3
404366' 350 00 0 17 000000 AOS (P)
404367' 263 17 0 00 000000 POPJ P,
SUBTTL INSERT
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-96
SPELL MAC 17-JAN-79 22:25 INSERT
COMMENT/
INSERT THE WORD AT WORDIN. LENGTH IS IN W. HASH INDEX IS IN Z.
LISTFF CONTAINS THE ADDRESS OF THE FIRST FREE WORD OF CORE.
IDNUM CONTAINS THE DICTIONARY NUMBER (0 - 31)
INSRTM: INSERT MISSPELLING (PTR TO CORRECTION IN CANDBX)
DICTIONARY ZERO IN HIGH SEGMENT ON TOPS-10
INSERT: INSERT A PROPER SPELLING
/
404370' 201 01 0 00 000001 INSRTM: MOVEI A,1 ;HERE TO ADD A MISSPELLING
404371' 202 01 0 00 011117' MOVEM A,WWLEN
404372' 260 17 0 00 404466' PUSHJ P,CORECK ;MAKE SURE WE HAVE ROOM TO INSERT
404373' 200 01 0 00 011603' MOVE A,CANDBX
404374' 275 01 0 00 000001 SUBI A,1 ;ADJUST TO POINT TO FLAGS OF CORRECTION
404375' 552 01 1 00 010655' INSRT5: HRRZM A,@LISTFF ;STORE THRU FIRST FREE ADDRESS IN DICT.
404376' 350 00 0 00 010655' AOS LISTFF ;INCREMENT IT.
404377' 660 00 0 00 000040 TRO FL,MISSPL ;SAY IT'S A MISSPELLING
404400' 254 00 0 00 404402' JRST INSRT2
404401' INSERT: ICOUNT^
404401' 620 00 0 00 000040 TRZ FL,MISSPL ;NOT A MISSPELLING
404402' 261 17 0 00 000005 INSRT2: PUSH P,W
404403' 261 17 0 00 000006 PUSH P,X
404404' 321 10 0 00 404406' JUMPL Z,.+2
404405' 301 10 0 00 006464 CAIL Z,HASHTL
404406' 260 17 0 00 404207' PUSHJ P,INTCFN
404407' 321 05 0 00 404411' JUMPL W,.+2
404410' 303 05 0 00 000062 CAILE W,62
404411' 260 17 0 00 404207' PUSHJ P,INTCFN
404412' 231 05 0 00 000007 IDIVI W,7 ;7 CHARS/WORD IN FIVEBIT
404413' 322 06 0 00 404415' JUMPE X,.+2
404414' 271 05 0 00 000001 ADDI W,1
404415' 271 05 0 00 000001 ADDI W,1 ;TOTAL NUMBER OF WORDS WE NEED TO USE
404416' 202 05 0 00 011117' MOVEM W,WWLEN
404417' 262 17 0 00 000006 POP P,X
404420' 262 17 0 00 000005 POP P,W
404421' 260 17 0 00 404466' PUSHJ P,CORECK ;SEE IF WE HAVE ENOUGH SPACE /GET MORE
404422' 602 00 0 00 000004 TRNE FL,LEFT ;SKIP IF LEFT CLEAR
404423' 554 11 0 10 002156' HLRZ K,HASHTB(Z) ;USE LEFT
404424' 606 00 0 00 000004 TRNN FL,LEFT ;SKIP IF LEFT SET
404425' 550 11 0 10 002156' HRRZ K,HASHTB(Z) ;USE RIGHT
404426' 200 12 0 00 010655' INSRT6: MOVE L,LISTFF ;ADDRESS OF FREE STORAGE
404427' 317 12 0 00 000011 CAMG L,K ;OUGHT TO BE BEYOND CURRENT POINTER
404430' 260 17 0 00 404207' PUSHJ P,INTCFN
404431' 550 01 0 00 011606' HRRZ A,IDNUM
404432' 504 11 0 00 000001 HRL K,A ;LH K CONTAINS THE DICTIONARY NUMBER
404433' 622 00 0 00 000040 TRZE FL,MISSPL ;SKIP IF NOT A MISSPELLING
404434' 254 00 0 00 404440' JRST INSRT3
404435' 350 00 0 00 010656' AOS NDICT ;TOTAL NUMBER OF REAL WORDS
404436' 350 00 0 01 010660' AOS NDICTI(A) ;AND NUMBER IN THIS DICTIONARY
404437' 254 00 0 00 404443' JRST INSRT4
404440' 350 00 0 00 010760' INSRT3: AOS NMIS ;TOTAL NUMBER OF MISSPELLINGS
404441' 350 00 0 01 010720' AOS NMISI(A) ;AND NUMBER IN THIS DICTIONARY
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-97
SPELL MAC 17-JAN-79 22:25 INSERT
404442' 661 11 0 00 000040 TLO K,MISSPL ;SET MISSPELLING BIT IN LH FLAGWORD
404443' 202 11 0 12 000000 INSRT4: MOVEM K,(L)
404444' 201 11 0 12 000000 MOVEI K,(L)
404445' 602 00 0 00 000004 TRNE FL,LEFT ;SKIP IF LEFT CLEAR
404446' 506 11 0 10 002156' HRLM K,HASHTB(Z) ;DEPOSIT NEW LINK ON LEFT
404447' 606 00 0 00 000004 TRNN FL,LEFT
404450' 542 11 0 10 002156' HRRM K,HASHTB(Z) ;DEPOSIT ON RIGHT
404451' 271 12 0 00 000001 ADDI L,1
404452' 370 00 0 00 011117' SOS WWLEN
404453' 370 00 0 00 011117' SOS WWLEN ;HACK, HACK. (STOP SMOKING)
;NOW THAT THE LIST LINKS ARE HONEST, ADD THE WORD BENEATH (ABOVE)
;THE NEWEST LINK. L POINTS TO THE FREE CORE.
404454' 400 11 0 00 000000 SETZ K,
404455' INSRT1: ICOUNT^
404455' 200 13 0 11 010776' MOVE M,WORDIN(K)
404456' 202 13 0 12 000000 MOVEM M,(L)
404457' 271 12 0 00 000001 ADDI L,1
404460' 315 11 0 00 011117' CAMGE K,WWLEN
404461' 344 11 0 00 404455' AOJA K,INSRT1
404462' 202 12 0 00 010655' MOVEM L,LISTFF ;UPDATE FREE POINTER
404463' 506 12 0 00 000000* HRLM L,.JBSA ;HACK SO SAVE WILL WORK
404464' 402 00 0 12 000000 SETZM (L) ;SUSPENDERS (THE BELT WAS DELETED)
404465' 263 17 0 00 000000 POPJ P,
SUBTTL CORE ROUTINES
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-98
SPELL MAC 17-JAN-79 22:25 CORE ROUTINES
COMMENT/
CORECK: ADD WWLEN TO LISTFF AND IF THE RESULT >JOBREL REQUEST MORE.
GETCOR: EXPAND CORE BY 1 K.
/
404466' CORECK: ICOUNT^
404466' 261 17 0 00 000001 PUSH P,A
404467' 200 01 0 00 010655' CORCK1: MOVE A,LISTFF
404470' 270 01 0 00 011117' ADD A,WWLEN
404471' 311 01 0 00 403505* CAML A,.JBREL
404472' 260 17 0 00 404475' PUSHJ P,GETCOR
404473' 262 17 0 00 000001 POP P,A
404474' 263 17 0 00 000000 POPJ P,
404475' GETCOR: ICOUNT^
404475' 261 17 0 00 000001 PUSH P,A
404476' 200 01 0 00 404471* MOVE A,.JBREL
404477' 271 01 0 00 002000 ADDI A,2000
404500' 047 01 0 00 000011 IFE TENEX,< CORE A,
404501' 254 00 0 00 404170' JRST NOCORE >
IFN TENEX,< MOVEM A,.JBREL >
404502' 262 17 0 00 000001 POP P,A
404503' 263 17 0 00 000000 POPJ P,
SUBTTL TRYFIX OUR HUMBLE ATTEMPT TO CORRECT THE WORD.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-99
SPELL MAC 17-JAN-79 22:25 TRYFIX OUR HUMBLE ATTEMPT TO CORRECT THE WORD.
COMMENT/
THE SUSPECT WORD IS IN WORDIN AS FIVEBIT TEXT.
IF WE FIND A BETTER CANDIDATE, WE WILL SLIP IT IN
AND SKIP RETURN. IF WE PLAN TO SKIP RETURN, WE HAVE TO COPY
THE NEW WORD INTO THE OUTPUT BUFFER AND SCREW AROUND WITH
SOME POINTERS TO CONVINCE PEOPLE THAT 1. WE HAVE READ THE
INPUT WORD AND 2. THAT WE HAVE USED THE SPACE IN THE OUTPUT BUFFER
SO NO ONE ELSE WILL STEP THERE.
IT WOULD ALSO BE NICE IF I WERE TO COPY IN LOWER CASE
OR UPPER CASE, OR MIXED, DEPENDING ON THE ORIGINAL TEXT.
(CHOICES ARE ALL UPPER, ALL LOWER OR FIRST LETTER IN UPPER,
REMAINDER IN LOWER. McCarthy HAD BETTER SPELL HIS NAME RIGHT.)
/
404504' TRYFIX: ICOUNT^
404504' 261 17 0 00 000005 PUSH P,W
404505' 261 17 0 00 000006 PUSH P,X
404506' 231 05 0 00 000007 IDIVI W,7
404507' 322 06 0 00 404511' JUMPE X,.+2
404510' 271 05 0 00 000001 ADDI W,1
404511' 202 05 0 00 011117' MOVEM W,WWLEN
404512' 262 17 0 00 000006 POP P,X
404513' 261 17 0 00 011117' PUSH P,WWLEN
404514' 200 05 0 17 777777 MOVE W,-1(P)
404515' 260 17 0 00 405415' PUSHJ P,X1SRCH ;TRY MAYBE ONE LETTER WRONG
404516' 260 17 0 00 405573' PUSHJ P,XTRNP ;TRY SIMPLE TRANSPOSITION
404517' 260 17 0 00 405535' PUSHJ P,X1EXL ;TRY MAYBE DELETE 1 EXTRA LETTER
404520' 260 17 0 00 405627' PUSHJ P,X1LMS ;ADD ONE LETTER
404521' 262 17 0 00 011117' POP P,WWLEN
404522' 312 05 0 17 000000 CAME W,(P)
404523' 260 17 0 00 404207' PUSHJ P,INTCFN ;OOPS W SHOULDN'T CHANGE
404524' 262 17 0 00 000005 POP P,W
404525' 602 00 0 00 400000 TRNE FL,QTRAIN ;TRAINING MODE?
404526' 254 00 0 00 404641' JRST TRFQDO ;YES.
404527' 200 01 0 00 011526' MOVE A,CANDID ;PICKUP COUNT
404530' 303 01 0 00 000001 CAILE A,1 ;THE EASY WAY?
404531' 260 17 0 00 405363' PUSHJ P,REPCK ;MORE THAN ONE. CHECK FOR REPEATS
IFN STANSW,< TLON FL,IIIINI
PUSHJ P,DOIIIN > ;INITIALIZE STANFORD DISPLAYS
404532' 200 04 0 00 011526' TRYFBA: MOVE D,CANDID
IFN TENEX,< MOVEI A,100
SIBE ;SKIP UNLESS TYPEAHEAD
JUMPE D,TRYFBD > ;OMIT TYPEOUT IF NO CANDIDATES
IFN STANSW,< TLNE FL,IIISW!DDDSW ;DISPLAY?
JUMPG D,TRYIII > ;JUMP IF CANDIDATES TO DISPLAY
404533' 302 04 0 00 000001 CAIE D,1
404534' 254 00 0 00 404543' JRST TRYFBB ;JUMP UNLESS EXACTLY 1 GUESS
404535' 051 03 0 00 407413' OUTSTR [ASCIZ/I guess: /]
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-100
SPELL MAC 17-JAN-79 22:25 TRYFIX OUR HUMBLE ATTEMPT TO CORRECT THE WORD.
404536' 200 06 0 00 011527' MOVE X,CANDBF
404537' 202 06 0 00 011603' MOVEM X,CANDBX
404540' 260 17 0 00 405147' PUSHJ P,CNVRTY ;CONVERT AND TYPEOUT CANDIDATE
404541' 051 03 0 00 400000' OUTSTR CRLF
404542' 254 00 0 00 404547' JRST TRYFBZ
404543' TRYFBB:
IFN STANSW,< TLNE FL,IIISW!DDDSW ;III MODE?
JRST TRYFBZ > ;YES. AVOID TYPEOUT
404543' 051 03 0 00 407415' OUTSTR [ASCIZ /(/]
404544' 200 01 0 00 011526' MOVE A,CANDID
404545' 260 17 0 00 404132' PUSHJ P,DECPTR
OUTSTR [ASCIZ/ guesses)
404546' 051 03 0 00 407416' /]
404547' 051 03 0 00 407421' TRYFBZ: OUTSTR [ASCIZ/*/]
404550' 051 04 0 00 000001 TRYFBD: INCHWL A ;FIND SOMETHING
404551' 301 01 0 00 000141 TRYFBX: CAIL A,"A"+40
404552' 620 01 0 00 000040 TRZ A,40 ;CONVERT TO UPPER CASE.
404553' 205 02 0 00 777766 MOVSI B,-NTRYCM
404554' 550 03 0 02 404567' TRYFBE: HRRZ C,TRYCMD(B)
404555' 302 01 0 03 000000 CAIE A,(C)
404556' 253 02 0 00 404554' AOBJN B,TRYFBE
404557' 331 03 0 02 404567' SKIPL C,TRYCMD(B)
404560' 260 17 0 00 404154' PUSHJ P,FLUTTY ;FLUSH REMAINDER OF LINE
404561' 256 00 0 02 404602' XCT TRYXCT(B) ;EXECUTE DISPATCH
404562' 254 00 0 00 404564' JRST TRYFBW ;IF WE COME BACK
404563' TRYFBY: OUTSTR [ASCIZ/?
404563' 051 03 0 00 407422' /]
404564' 051 03 0 00 011004' TRYFBW: OUTSTR WORDIX ;RETYPE WORD IN QUESTION
404565' 051 03 0 00 406253' OUTSTR [ASCIZ / /]
404566' 254 00 0 00 404532' JRST TRYFBA ;THEN LOOP
404567' 400000 000111 TRYCMD: 400000,,"I" ;BIT 0 SET MEANS DON'T FLUSH REST OF LINE
404570' 400000 000127 400000,,"W"
404571' 000000 000077 "?"
404572' 000000 000101 "A"
404573' 400000 000122 400000,,"R"
404574' 000000 000130 "X"
404575' 000000 000104 "D"
404576' 000000 000123 "S"
404577' 400000 000103 400000,,"C"
404600' 000000 000114 "L"
IFG COUNTS,< "$" >
000012 NTRYCM==.-TRYCMD
404601' 000000 000000 0 ;CATCH ERRRORS HERE
404602' 254 00 0 00 404630' TRYXCT: JRST TRYICM ;I - INSERT
404603' 260 17 0 00 404623' PUSHJ P,TRYWCM ;W - WRITE DICTIONARY. LOOP.
404604' 260 17 0 00 405352' PUSHJ P,HELMSZ ;? - TYPE HELP MESSAGE. LOOP.
404605' 254 00 0 00 404615' JRST TRYACM ;A - ACCEPT. RETURN TO GET NEXT
404606' 254 00 0 00 404656' JRST TRYRCM ;R - REPLACE
404607' 254 00 0 00 404621' JRST TRYXCM ;X - FLUSH TO END OF FILE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-101
SPELL MAC 17-JAN-79 22:25 TRYFIX OUR HUMBLE ATTEMPT TO CORRECT THE WORD.
404610' 051 03 0 00 011121' OUTSTR LIBUF ;D - DISPLAY THE LINE AGAIN
404611' 254 00 0 00 405043' JRST TRYSCM ;S - SELECT FROM LIST OF CHOICES
404612' 254 00 0 00 404634' JRST TRYCCM ;C - CORRECT FROM ONE CHOICE
404613' 254 00 0 00 404617' JRST TRYLOD ;L - ACCEPT & LOAD A DICTIONARY.
IFG COUNTS,< PUSHJ P,DTRACEY >;$ - DUMP THE TRACE COUNTS
404614' 254 00 0 00 404563' JRST TRYFBY ;CATCH ERRORS
404615' 350 00 0 00 010761' TRYACM: AOS NWA ;COUNT WORD ACCEPTED
404616' 263 17 0 00 000000 POPJ P,
404617' 260 17 0 00 403331' TRYLOD: PUSHJ P,LOADEX ;LOAD DICTIONARY, THEN CAUSE WORD TO
404620' 254 00 0 00 403537' JRST CPOPJ1 ;BE RETRIED
404621' 660 00 0 00 100000 TRYXCM: TRO FL,SHUTUP ;X FLUSH TO END OF FILE
404622' 263 17 0 00 000000 POPJ P,
404623' 260 17 0 00 405402' TRYWCM: PUSHJ P,SETNM1 ;READ DICTIONARY NUMBER
404624' 261 17 0 00 000005 PUSH P,W
404625' 260 17 0 00 403014' PUSHJ P,IDMPD ;DUMP DICTIONARY.
404626' 262 17 0 00 000005 POP P,W
404627' 263 17 0 00 000000 POPJ P,
404630' 260 17 0 00 404273' TRYICM: PUSHJ P,HASHCP ;CALCULATE HASH ADDRESS
404631' 260 17 0 00 405402' PUSHJ P,SETNM1 ;SET DICTIONARY NUMBER
404632' 350 00 0 00 010765' AOS NWI ;COUNT WORD INSERTED
404633' 254 00 0 00 404401' JRST INSERT ;GO INSERT. RETURN UPLEVEL
404634' 260 17 0 00 405401' TRYCCM: PUSHJ P,SETNM0 ;GET DICT# FOR MISSPL INSERTION
404635' 200 01 0 00 011526' MOVE A,CANDID ;MAKE SURE COMMAND IS LEGAL
404636' 302 01 0 00 000001 CAIE A,1 ;I.E., PRECISELY ONE CANDIDATE
404637' 254 00 0 00 404563' JRST TRYFBY ;MAKE LOSE MESSAGE
404640' 254 00 0 00 405050' JRST TRFXR1
404641' 200 01 0 00 010773' TRFQDO: MOVE A,TRDNUM ;HERE FOR QTRAINING.
404642' 202 01 0 00 011606' MOVEM A,IDNUM ;SET INCREMENTAL DICT. NUMBER
404643' 260 17 0 00 404273' PUSHJ P,HASHCP
404644' 260 17 0 00 404401' PUSHJ P,INSERT ;STUFF WORD IN DICTIONARY
404645' 350 00 0 00 010765' AOS NWI ;COUNT INSERTED WORD
404646' 337 00 0 00 011526' SKIPG CANDID ;ANY "CLOSE" WORDS?
404647' 263 17 0 00 000000 POPJ P, ;NOPE.
;WE THINK THIS MIGHT BE SOME OTHER WORD SO WE WRITE IN EXCEPTION FILE
404650' 260 17 0 00 401243' PUSHJ P,CONVRT ;5BIT TO ASCII IN WORDIX
404651' 201 02 0 00 011004' MOVEI B,WORDIX
404652' 260 17 0 00 401202' PUSHJ P,WRSEXC
404653' 201 02 0 00 400000' MOVEI B,CRLF
404654' 350 00 0 00 010775' AOS NQTRN ;COUNT Q-TRAINING EXCEPTION WORD
404655' 254 00 0 00 401202' JRST WRSEXC
SUBTTL REPLACE AND SELECT COMMANDS
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-102
SPELL MAC 17-JAN-79 22:25 REPLACE AND SELECT COMMANDS
404656' 260 17 0 00 405401' TRYRCM: PUSHJ P,SETNM0 ;GET DICT# FOR MISSPL INSERTION
404657' 603 00 0 00 000010 TLNE FL,ODD ;ODD CASE?
404660' 051 03 0 00 407423' OUTSTR [ASCIZ/Type the case of each letter exactly as you want it. /]
404661' 051 03 0 00 407436' OUTSTR [ASCIZ/Replace with: /]
404662' 202 05 0 00 011041' MOVEM W,REPLW ;SAVE W, WORDIN, WORDIX UNTIL WE
404663' 200 01 0 00 407441' MOVE A,[WORDIN,,REPLIN] ; GET REPLACEMENT.
404664' 251 01 0 00 011040' BLT A,REPLIN+20
IFN STANSW,< MOVE B,[POINT 7,WORDIX]
ILDB A,B
JUMPN A,.-1
MOVEI A,15
DPB A,B
MOVE C,B
MOVEI A,12
IDPB A,B
TLNE FL,IIISW!DDDSW ;ON A STANFORD DISPLAY?
PTLOAD [0 ;YES. GIVE HIM THE WORD TO RE-EDIT
WORDIX]
MOVEI A,0
DPB A,C
IDPB A,C >;PUT WORDIX BACK TO NORMAL
404665' 200 01 0 00 406634' MOVE A,[XWD WORDIN,WORDIN+1] ;PREPARE TO GATHER TEXT
404666' 403 05 0 00 010776' SETZB W,WORDIN
404667' 251 01 0 00 011016' BLT A,WORDIN+20
404670' 200 01 0 00 406622' MOVE A,[POINT 5,WORDIN]
404671' 202 01 0 00 011577' MOVEM A,TLET.1
404672' 200 01 0 00 406623' MOVE A,[POINT 7,WORDIX]
404673' 202 01 0 00 011600' MOVEM A,TLET.2
404674' 603 00 0 00 000010 TLNE FL,ODD ;ODD CASE?
404675' 334 01 0 00 407442' SKIPA A,[JRST REPL1A] ;YES. USER GETS TO TYPE VERBATIM
404676' 200 01 0 00 407443' MOVE A,[TRZ A,40] ;MAKE IT UPPER CASE
404677' 202 01 0 00 011042' MOVEM A,RPLXCT
404700' 607 00 0 00 000010 TLNN FL,ODD ;JRST REPL1A IF ODD
404701' 200 01 0 00 407444' MOVE A,[JRST REPL1B]
404702' 202 01 0 00 011043' MOVEM A,RPLXC1
404703' 051 04 0 00 000001 REPL.1: INCHWL A ;REPLACEMENT CHARACTERS
404704' 302 01 0 00 000175 IFE TENEX,< CAIE A,175 ;ALT MODE?
404705' 306 01 0 00 000033 CAIN A,33 ;ANOTHER ALT MODE?
404706' 254 00 0 00 405023' JRST REPXIT ;YES. ABORT >
404707' 305 01 0 00 000040 CAIGE A,40
404710' 254 00 0 00 404737' JRST REPL.2 ;TERMINATE ON ANY CONTROL CHR.
404711' 301 01 0 00 000141 CAIL A,"A"+40 ;HAVE WE GOT LOWER CASE INPUT?
404712' 303 01 0 00 000172 CAILE A,"Z"+40 ;SKIP IF LOWER CASE
404713' 254 00 0 00 404715' JRST .+2 ;NOT LOWER CASE
404714' 256 00 0 00 011042' XCT RPLXCT ;TRZ A,40 OR JRST REPL1A
404715' 301 01 0 00 000101 CAIL A,"A" ;IS THIS A LETTER?
404716' 303 01 0 00 000132 CAILE A,"Z"
404717' 254 00 0 00 404721' JRST .+2 ;NO.
404720' 256 00 0 00 011043' XCT RPLXC1 ;JRST REPL1B OR JRST REPL1A
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-103
SPELL MAC 17-JAN-79 22:25 REPLACE AND SELECT COMMANDS
404721' 306 01 0 00 000047 CAIN A,"'" ;APOSTROPHE?
404722' 327 05 0 00 404731' JUMPG W,REPL1A ;JUMP IF APOSTROPHE AFTER FIRST CHARACTER
404723' 211 05 0 00 000001 MOVNI W,1 ;SET W<0 TO FLAG A NON-LETTER WAS TYPED.
404724' 254 00 0 00 404731' JRST REPL1A
404725' 603 00 0 00 000004 REPL1B: TLNE FL,LOWER ;IS RESULT SUPPOSED TO BE LOWER?
404726' 660 01 0 00 000040 TRO A,40 ;YES TURN ON THE BIT
404727' 623 00 0 00 000002 TLZE FL,MIXED ;MIXED UPPER THEN LOWER?
404730' 661 00 0 00 000004 TLO FL,LOWER ;YES. MUST NOW BE TIME FOR LOWER
404731' 136 01 0 00 011600' REPL1A: IDPB A,TLET.2 ;STUFF CHARACTER INTO WORDIX
404732' 321 05 0 00 404703' JUMPL W,REPL.1 ;JUMP IF NON-LETTER SEEN
404733' 306 01 0 00 000047 CAIN A,"'"
404734' 201 01 0 00 000033 MOVEI A,APOS
404735' 136 01 0 00 011577' IDPB A,TLET.1 ;STUFF FIVEBIT HERE FOR LATER INSERTION
BCHECK (TLET.1,WORDIN+6)^
404736' 344 05 0 00 404703' AOJA W,REPL.1 ;COUNT CHARACTER AND LOOP
404737' REPL.2: ICOUNT^
404737' 305 05 0 00 000002 CAIGE W,2
404740' 254 00 0 00 404772' JRST REPL.5 ;REPLACEMENT TOO SHORT TO BOTHER WITH
404741' 260 17 0 00 404332' PUSHJ P,MATCH
404742' 254 00 0 00 404745' JRST REPL2A ;REPLACEMENT NOT IN THE DICTIONARY
404743' 254 00 0 00 405013' JRST REPL.6 ;REPLACEMENT IS A KNOWN MISSPELLING!
404744' 254 00 0 00 404764' JRST REPL.4 ;REPLACEMENT ALREADY IN DICTIONARY
404745' 051 03 0 00 407445' REPL2A: OUTSTR [ASCIZ/Type "I" to insert this replacement in the dictionary: /]
404746' 051 04 0 00 000001 INCHWL A
404747' 302 01 0 00 000111 CAIE A,"I"
404750' 306 01 0 00 000151 CAIN A,"i"
404751' 254 00 0 00 404754' JRST REPL.3
404752' 260 17 0 00 404154' PUSHJ P,FLUTTY
404753' 254 00 0 00 404772' JRST REPL.5
404754' 261 17 0 00 011606' REPL.3: PUSH P,IDNUM ;SAVE DICT# SPECIFIED IN "R" COMMAND
404755' 260 17 0 00 405402' PUSHJ P,SETNM1
404756' 261 17 0 00 010655' PUSH P,LISTFF ;STORE ADDRESS OF INSERTION = CORRECTION
404757' 260 17 0 00 404401' PUSHJ P,INSERT
404760' 350 00 0 00 010763' AOS NWRI ;COUNT WORD REPLACED AND INSERTED
404761' 262 17 0 00 000006 POP P,X ;POP ADDRESS OF CORRECTION
404762' 271 06 0 00 000001 ADDI X,1 ;POINT AT TEXT INSTEAD OF FLAGS
404763' 262 17 0 00 011606' POP P,IDNUM
404764' 202 06 0 00 011603' REPL.4: MOVEM X,CANDBX ;SET UP ARGUMENT FOR INSRTM
404765' 200 05 0 00 011041' MOVE W,REPLW
404766' 200 01 0 00 407461' MOVE A,[REPLIN,,WORDIN]
404767' 251 01 0 00 011003' BLT A,WORDIN+5 ;RESTORE WORDIN, BUT NOT WORDIX
404770' 260 17 0 00 404273' PUSHJ P,HASHCP
404771' 260 17 0 00 404370' PUSHJ P,INSRTM ;INSERT THE MISSPELLING
404772' REPL.5: ICOUNT^
404772' 350 00 0 00 010762' AOS NWR ;COUNT WORD REPLACED
404773' 200 01 0 00 011523' MOVE A,INPTR1
404774' 202 01 0 00 011521' MOVEM A,INPTR
404775' 201 02 0 00 407462' MOVEI B,[ASCIZ/Replaced by: /]
404776' 260 17 0 00 401202' PUSHJ P,WRSEXC ;MAKE EXCEPTION FILE ENTRY
404777' 201 02 0 00 011004' MOVEI B,WORDIX
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-104
SPELL MAC 17-JAN-79 22:25 REPLACE AND SELECT COMMANDS
405000' 260 17 0 00 401202' PUSHJ P,WRSEXC
405001' 201 02 0 00 400000' MOVEI B,CRLF
405002' 260 17 0 00 401202' PUSHJ P,WRSEXC
405003' 200 03 0 00 406623' MOVE C,[POINT 7,WORDIX] ;COPY WORDIX INTO OUTPUT
405004' 550 02 0 00 011522' REPL5A: HRRZ B,OUTPTR
405005' 301 02 0 00 011521' CAIL B,LOBUF+LINSIZ ;IS LOBUF FULL?
405006' 254 00 0 00 404200' JRST LOVFLW ;YES: COMPLAIN
405007' 134 01 0 00 000003 ILDB A,C
405010' 322 01 0 00 403537' JUMPE A,CPOPJ1 ;SKIP RTN TO SAY WE FIXED THE WORD
405011' 136 01 0 00 011522' IDPB A,OUTPTR
405012' 254 00 0 00 405004' JRST REPL5A
405013' 051 03 0 00 407465' REPL.6: OUTSTR [ASCIZ/The word you typed is a misspelling of "/]
405014' 550 01 0 06 777776 HRRZ A,-2(X)
405015' 260 17 0 00 405030' PUSHJ P,TYPE5
OUTSTR [ASCIZ/".
405016' 051 03 0 00 407476' Type "Y" if you really wish to use it as the replacement: /]
405017' 051 04 0 00 000001 INCHWL A
405020' 620 01 0 00 000040 TRZ A,40
405021' 306 01 0 00 000131 CAIN A,"Y"
405022' 254 00 0 00 404772' JRST REPL.5
405023' 051 11 0 00 000000 REPXIT: CLRBFI ;FLUSH TYPE AHEAD
405024' 200 05 0 00 011041' MOVE W,REPLW ;RESTORE ORIGINAL WORD, COUNT
405025' 200 01 0 00 407461' MOVE A,[REPLIN,,WORDIN]
405026' 251 01 0 00 011016' BLT A,WORDIN+20
405027' 254 00 0 00 404532' JRST TRYFBA ;AND LET HIM TRY AGAIN.
405030' 505 01 0 00 440500 TYPE5: HRLI A,(POINT 5,0) ;TYPE 5BIT STRING POINTED
405031' 261 17 0 00 000002 PUSH P,B ;TO BY A
405032' 134 02 0 00 000001 TYPE5A: ILDB B,A
405033' 322 02 0 00 405041' JUMPE B,TYPE5B
405034' 306 02 0 00 000033 CAIN B,APOS
405035' 334 02 0 00 406601' SKIPA B,["'"]
405036' 271 02 0 00 000100 ADDI B,"A"-1
405037' 051 01 0 00 000002 OUTCHR B
405040' 254 00 0 00 405032' JRST TYPE5A
405041' 262 17 0 00 000002 TYPE5B: POP P,B
405042' 263 17 0 00 000000 POPJ P,
;SELECT COMMAND
405043' 200 01 0 00 011526' TRYSCM: MOVE A,CANDID ;HOW MANY CANDIDATES HAVE WE?
405044' 305 01 0 00 000002 CAIGE A,2
405045' 254 00 0 00 404563' JRST TRYFBY ;EXACTLY ONE CANDIDATE. S WASN'T LEGAL!
405046' 260 17 0 00 405074' PUSHJ P,CORRSL ;SELECT FROM CHOICES.
405047' 254 00 0 00 404564' JRST TRYFBW ;HE COULDN'T DECIDE.
405050' 200 06 0 00 011603' TRFXR1: MOVE X,CANDBX ;HERE FOR C COMMAND WITH CANDBX SETUP
405051' 200 10 0 00 407513' MOVE Z,[POINT 5,(X)]
405052' 260 17 0 00 401244' PUSHJ P,CONVRZ ;COPY FROM (X) TO WORDIX
405053' 201 02 0 00 407514' MOVEI B,[ASCIZ/Corrected to: /]
405054' 260 17 0 00 401202' PUSHJ P,WRSEXC
405055' 201 02 0 00 011004' MOVEI B,WORDIX
405056' 260 17 0 00 401202' PUSHJ P,WRSEXC
405057' 201 02 0 00 400000' MOVEI B,CRLF
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-105
SPELL MAC 17-JAN-79 22:25 REPLACE AND SELECT COMMANDS
405060' 260 17 0 00 401202' PUSHJ P,WRSEXC ;WRITE EXCEPTION FILE
;WORDIN HAS THE MISSPELLED WORD, CANDBX CONTAINS THE ADDRESS OF THE CORRECTION
405061' 260 17 0 00 404273' PUSHJ P,HASHCP ;COMPUTE HASH OF MISSPELLING
405062' 260 17 0 00 404370' PUSHJ P,INSRTM ;INSERT MISSPELLING.
;ENTER HERE FOR AUTO-CORRECTION
405063' 200 04 0 00 406623' TRFXR2: MOVE D,[POINT 7,WORDIX] ;COPY TEXT FROM WORDIX TO LOBUF
405064' 350 00 0 00 010764' AOS NWC ;COUNT WORD CORRECTED
405065' 134 01 0 00 000004 TRFXR3: ILDB A,D
405066' 322 01 0 00 405071' JUMPE A,TRFXR4
405067' 136 01 0 00 011522' IDPB A,OUTPTR
405070' 254 00 0 00 405065' JRST TRFXR3
405071' 200 01 0 00 011523' TRFXR4: MOVE A,INPTR1
405072' 202 01 0 00 011521' MOVEM A,INPTR
405073' 254 00 0 00 403537' JRST CPOPJ1
;SELECT A CORRECTION
405074' 201 04 0 00 000000 CORRSL: MOVEI D,0
OUTSTR [ASCIZ/Type C,^,<altmode>,<cr> or ?
405075' 051 03 0 00 407517' /]
405076' 200 06 0 04 011527' CORRS1: MOVE X,CANDBF(D) ;GET THE NEXT WORD
405077' 202 06 0 00 011603' MOVEM X,CANDBX ;STORE IT
405100' 260 17 0 00 405147' PUSHJ P,CNVRTY ;TYPE IT
405101' CORRS2: OUTSTR [ASCIZ/
405101' 051 03 0 00 407526' */]
405102' 051 04 0 00 000001 INCHWL A
405103' 301 01 0 00 000141 CAIL A,"A"+40
405104' 303 01 0 00 000172 CAILE A,"Z"+40
405105' 254 00 0 00 405107' JRST .+2
405106' 620 01 0 00 000040 TRZ A,40 ;MAKE UPPER CASE
405107' 205 02 0 00 777770 MOVSI B,-CORTLN
405110' 550 03 0 02 405123' HRRZ C,CORRTB(B)
405111' 302 01 0 03 000000 CAIE A,(C)
405112' 253 02 0 00 405110' AOBJN B,.-2
405113' 325 02 0 00 405140' JUMPGE B,CORR.X ;ERROR
405114' 554 03 0 02 405123' HLRZ C,CORRTB(B)
405115' 261 17 0 00 000003 PUSH P,C
405116' 306 03 0 00 403537' CAIN C,CPOPJ1
405117' 260 17 0 00 405401' PUSHJ P,SETNM0 ;GET DICT# FOR "C" AND "Y"
405120' 260 17 0 00 404154' PUSHJ P,FLUTTY
405121' 262 17 0 00 000003 POP P,C
405122' 254 00 0 03 000000 JRST (C)
405123' 403537' 000103 CORRTB: CPOPJ1,,"C"
405124' 403537' 000131 CPOPJ1,,"Y" ;FOR COMPATIBILITY W/ OLD USERS
405125' 405136' 000077 CORR.Q,,"?"
405126' 405142' 000015 CORR.N,,CR
IFN TENEX,< CORR.N,,EOL >
405127' 405133' 000136 CORR.U,,"^"
405130' 403540' 000033 CPOPJ,,33 ;ALTMODE
405131' 403540' 000175 CPOPJ,,175 ;ALTMODE
405132' 403540' 000176 CPOPJ,,176 ;ALTMODE
000010 CORTLN==.-CORRTB
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-106
SPELL MAC 17-JAN-79 22:25 REPLACE AND SELECT COMMANDS
405133' 365 04 0 00 405076' CORR.U: SOJGE D,CORRS1
OUTSTR [ASCIZ/Can't get there from here.
405134' 051 03 0 00 407527' /]
405135' 344 04 0 00 405076' AOJA D,CORRS1
405136' 051 03 0 00 405157' CORR.Q: OUTSTR HELMS2
405137' 254 00 0 00 405101' JRST CORRS2
405140' 051 03 0 00 407535' CORR.X: OUTSTR [ASCIZ/?/]
405141' 254 00 0 00 405101' JRST CORRS2
405142' 271 04 0 00 000001 CORR.N: ADDI D,1
405143' 315 04 0 00 011526' CAMGE D,CANDID
405144' 254 00 0 00 405076' JRST CORRS1
OUTSTR [ASCIZ/Those are all the choices.
405145' 051 03 0 00 407536' /]
405146' 263 17 0 00 000000 POPJ P,
; NOTE THAT THIS ROUTINE DEPENDS ON THE FACT THAT
; BITS 0-4 INCLUSIVE OF A LINK WORD ARE ZERO.
405147' 505 06 0 00 440500 CNVRTY: HRLI X,(<POINT 5,0>)
405150' 134 01 0 00 000006 CVTY1: ILDB A,X
405151' 322 01 0 00 403540' JUMPE A,CPOPJ
405152' 306 01 0 00 000033 CAIN A,APOS
405153' 334 01 0 00 406601' SKIPA A,["'"]
405154' 271 01 0 00 000100 ADDI A,"A"-1
405155' 051 01 0 00 000001 OUTCHR A
405156' 254 00 0 00 405150' JRST CVTY1
405157' HELMS2: ASCIZ/
405157' 015 012 103 074 143 C<cr> or Y<cr> to select this word as the correction,
405160' 162 076 040 157 162
405161' 040 131 074 143 162
405162' 076 040 164 157 040
405163' 163 145 154 145 143
405164' 164 040 164 150 151
405165' 163 040 167 157 162
405166' 144 040 141 163 040
405167' 164 150 145 040 143
405170' 157 162 162 145 143
405171' 164 151 157 156 054
405172' 015 012 074 143 162 <cr> to see next word,
405173' 076 040 164 157 040
405174' 163 145 145 040 156
405175' 145 170 164 040 167
405176' 157 162 144 054 015
405177' 012 136 074 143 162 ^<cr> to see previous word, or
405200' 076 040 164 157 040
405201' 163 145 145 040 160
405202' 162 145 166 151 157
405203' 165 163 040 167 157
405204' 162 144 054 040 157
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-107
SPELL MAC 17-JAN-79 22:25 REPLACE AND SELECT COMMANDS
405205' 162 015 012 074 141 <altmode> to escape from this mode.
405206' 154 164 155 157 144
405207' 145 076 040 164 157
405210' 040 145 163 143 141
405211' 160 145 040 146 162
405212' 157 155 040 164 150
405213' 151 163 040 155 157
405214' 144 145 056 015 012 /
405215' 000 000 000 000 000
SUBTTL STANFORD DISPLAY ROUTINES
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-108
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
IFN STANSW,<
DDERS: <BYTE(7)40,15,12>+1 ;ASCID SPACE CRLF. USED ALSO TO ERASE
DPCRLF: <BYTE(7)15,12>+1 ;CRLF
INITST: MOVNI A,1
GETLCH A
CAMN A,[-1]
POPJ P, ;RETURN IF DETACHED?
TLNE A,020000 ;SKIP UNLESS DD
TLO FL,DDDSW ;SET FLAG FOR DATA DISC
TLNE A,400000 ;SKIP UNLESS III
TLO FL,IIISW ;SET III FLAG
TLNN FL,IIISW!DDDSW ;ON A DPY NOW?
POPJ P, ;NOPE.
;FALL INTO DPYINI
;INITIALIZE DISPLAY SCREEN. SHOVE PAGE PRINTER TO THE BOTTOM
DPYINI: DPYCLR ;CLEAR THE SCREEN
PPSEL 1 ;SELECT PIECE OF PAPER 1
PUSHJ P,DPYRST ;ERASE POP 1
PPSEL 1 ;RESELECT POP 1 - UNDONE BY DPYCLR
DPYPOS -200 ;PUSH THE PAGE PRINTER TO THE BOTTOM
DPYSIZ 4002 ;SET GLITCHES ETC
POPJ P, ;THAT'S ALL FOR NOW.
DPYPOP: DPYPOS 640 ;HERE FOR TTY OUTPUT TO DPY PAGE PRINTER
DPYSIZ 4010 ;4 GLITCHES OF 8 LINES EACH
POPJ P,
;RESTORE DISPLAY TO NORMAL STATE
DPYRST: TLNN FL,DDDSW ;DATADISC?
JRST DPYRS1 ;NO. III IS EASIER.
PUSHJ P,DPYSTT ;FOR DD WE RUN A PROGRAM TO ERASE THE SCREEN
CW(1,46,2,0,4,1) ;USUAL FCN, NULL SELECT, LINE=24.
CW(3,2,3,2,5,10) ;COLUMN=2, LINE=24 LOW LINE MUST BE LAST!
MOVEI A,46 ;ERASE 38 LINES
PUSH Z,DDERS
SOJG A,.-1
PUSH Z,[0]
UPGIOT DPYHDR
DPYRS1: DPYCLR ;NORMALIZE PAGE PRINTER. CLEAR EACH POG.
TLZ FL,IIIINI ;NEED TO REDRAW OPTION MESSAGE IF RESTARTED.
POPJ P,
;HERE TO START A III OR DD BUFFER (USUAL CASE ONLY!)
DPYSTT: MOVE Z,[IOWD DPYLEN,DPYBUF]
TLNE FL,DDDSW ;REALLY DD?
JRST DPYST1 ;YES. DO DD INITIALIZE
PUSH Z,[0]
CPOPJ2: AOS (P) ;ALWAYS DOUBLE SKIP
JRST CPOPJ1
DPYST1: PUSH Z,@(P) ;STUFF FIRST COMMAND
AOS (P)
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-109
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
PUSH Z,@(P) ;AND SECOND
JRST CPOPJ1 ;DOUBLE SKIP RETURN
;DISPLAY THE CURRENT LINE THAT IS IN ERROR.
DPYLIN: MOVE B,OUTPTR ;GET THE OUTPUT POINTER
SETZ A,
IDPB A,B ;STUFF A ZERO IN BEYOND THE OUTPUT LINE.
DPYPOS -200 ;PUSH THE PAGE PRINTER TO THE BOTTOM
DPYSIZ 4002 ;SET GLITCHES ETC
TLNE FL,DDDSW
PUSHJ P,DDLN0 ;ON DD, ERASE PREVIOUS CRUD
PUSHJ P,DPYSTT
CW(1,46,2,0,4,20) ;USUAL FCN, NULL SELECT, LINE= OCTAL 410
CW(3,2,3,2,5,10) ;COLUMN=2, LINE=410 LOW LINE MUST BE LAST!!
TLNN FL,DDDSW ;SKIP LVW ON DDD
PUSH Z,[LVW(-1000,0,I,A,2,2)] ;SET TO LEFT MIDDLE OF SCREEN
MOVEI C,1
MOVE Y,[POINT 7,C]
MOVE X,[POINT 7,LOBUF] ;GET POINTER TO LINE OUTPUT BUFFER
SETZM CPXCHR ;ZERO NUMBER OF CHARACTERS XFERED BY COPX
SETOM DDDCOL
PUSHJ P,COPX
SKIPN WORDIX
JRST DPYL1
PUSH Z,C ;STORE DANGLING WORD
MOVE C,CPXCHR
MOVEM C,DDDCOL ;SAVE COLUMN NUMBER FOR LATER!
TLNN FL,DDDSW ;CAN'T DO NEXT ON DDD
PUSH Z,[LVW(20,0,I,,7,4)] ;SET BRIGHTNESS AND SIZE FOR OFFENDER
MOVE Y,[POINT 7,C]
MOVEI C,1
MOVE X,[POINT 7,WORDIX]
PUSHJ P,COPX
PUSH Z,C
TLNN FL,DDDSW ;SKIP LVW FOR DDD
PUSH Z,[LVW(20,0,I,,2,2)] ;RESTORE NORMAL BRIGHTNESS AND SIZE
MOVEI C,1
MOVE Y,[POINT 7,C]
DPYL1: MOVE X,INPTR1
PUSHJ P,COPX
PUSH Z,C
PUSH Z,[0]
HLRE A,Z
ADDI A,DPYLEN
MOVEM A,DPYSIZ
UPGIOT 2,DPYHDR
TLNE FL,DDDSW ;SKIP IF III
SKIPGE DDDCOL ;DD - SKIP IF WE NEED TO DO BLACK ON GREEN
POPJ P,
PUSHJ P,DPYSTT
CW(1,62,2,0,4,20) ;SPECIAL FCN, NULL SELECT, LINE= OCTAL 410
CW(3,2,3,2,5,10) ;COLUMN=2, LINE=410 LOW LINE MUST BE LAST!!
MOVE C,DDDCOL
ADDI C,2 ;OFFSET TO LEFT MARGIN
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-110
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
DPB C,[POINT 8,(Z),15] ;CLOBBER COLUMN NUMBER
MOVE Y,[POINT 7,C]
MOVEI C,1
MOVE X,[POINT 7,WORDIX]
PUSHJ P,COPX
PUSH Z,C
PUSH Z,DPCRLF
PUSH Z,[0]
HLRE A,Z
ADDI A,DPYLEN
MOVEM A,DPYSIZ
UPGIOT DPYHDR
POPJ P,
DDLN0: PUSHJ P,DPYSTT ;FIRST ERASE THE OLD CRUD
CW(1,46,2,0,4,20) ;USUAL FCN, NULL SELECT, LINE= OCTAL 410
CW(3,1,3,1,5,10) ;COLUMN=1 TO ERASE BLACK ON GREEN!
PUSH Z,DDERS ;ASCID CRLF
PUSH Z,[0]
MOVEI A,4
MOVEM A,DPYSIZ
UPGIOT DPYHDR
POPJ P,
SUBTTL STANFORD DISPLAY ROUTINES
PAGE
DECDIS: IDIVI A,12 ;DECIMAL PRINTER
HRLM B,(P)
JUMPE A,.+2
PUSHJ P,DECDIS
HLRZ A,(P)
ADDI A,"0" ;TURN DIGIT INTO A CHARACTER
;FALL INTO PRINTER.
DISDEP: AOS CPXCHR ;COUNT CHARACTERS WE STUFF
TLNN Y,740000 ;SKIP IF WE ARE WITHIN THE WORD.
JRST DISDP1 ;WE ARE ABOUT TO OVERFLOW.
IDPB A,Y
POPJ P,
DISDP1: PUSH Z,C ;ADD THIS WORD TO THE OUTPUT
MOVEI C,1
MOVE Y,[POINT 7,C]
IDPB A,Y
POPJ P,
COPX: ILDB A,X
JUMPE A,CPOPJ
CAIN A,11
MOVEI A,40 ;TABS CAN'T BE DISPLAYED
PUSHJ P,DISDEP
JRST COPX
;INITIALIZATION FOR III AND DDD DISPLAYS
DOIIIN: TLNN FL,IIISW!DDDSW
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-111
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
POPJ P,
PUSHJ P,DPYSTT ;START DISPLAY HEADER
CW(1,46,2,0,4,2) ;USUAL FCN, NULL SELECT, LINE =36,
CW(3,2,3,2,5,4) ;LINE=36., COLUMN=2, LOW LINE MUST BE LAST!!
TLNN FL,DDDSW ;NO LVW ON DD!
PUSH Z,[LVW(-1000,700,I,A,4,4)]
MOVE X,[POINT 7,HELMSG]
MOVE Y,[POINT 7,C]
MOVEI C,1
PUSHJ P,COPX
PUSH Z,C
PUSH Z,[0] ;EXTRA WORD NEEDED FOR DD
HLRE A,Z
ADDI A,DPYLEN
MOVEM A,DPYSIZ
UPGIOT 0,DPYHDR ;WRITE USING THE POINTER
POPJ P,
;DISPLAY PAGE AND LINE NUMBER.
DPGL: PUSHJ P,DPYSTT
CW(1,46,2,0,4,17) ;USUAL FCN, NULL SELECT, LINE= OCTAL 374
CW(3,2,3,2,5,14) ;COLUMN=2, LINE=374 LOW LINE MUST BE LAST!!
TLNN FL,DDDSW
PUSH Z,[LVW(-1000,40,I,A,2,2)] ;POSITION III DISPLAY
MOVEI C,1
MOVE Y,[POINT 7,C]
MOVE X,[POINT 7,[ASCIZ/Page /]]
PUSHJ P,COPX
MOVE A,PAGENO
PUSHJ P,DECDIS
MOVE X,[POINT 7,[ASCIZ/ Line /]]
PUSHJ P,COPX
TRNE FL,TECO ;HAS THIS GOT LINE NUMBERS
JRST DPGL1 ;NO.
MOVE X,LIBUF ;GET A LINE NUMBER
TRNN X,1 ;REAL LINE NUMBER?
JRST DPGL1 ;NOPE.
PUSH P,C
MOVE C,LIBUF
JRST DPGL2
DPGL1: MOVE A,LINENO
PUSHJ P,DECDIS
DPGL2: PUSH Z,C
PUSH Z,DPCRLF ;NEEDED TO EXECUTE THE DD DISPLAY
PUSH Z,[0] ;NEEDED TO END THE DD BUFFER
HLRE A,Z
ADDI A,DPYLEN
MOVEM A,DPYSIZ
UPGIOT 3,DPYHDR
POPJ P,
SUBTTL STANFORD DISPLAY ROUTINES
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-112
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
;ON A DISPLAY AND THERE ARE GUESSES TO DISPLAY
TRYIII: MOVE D,CANDID
CAIG D,1
JRST IIONE ;ONLY ONE WORD TO TRY
PUSHJ P,DPYSTT
CW(1,46,2,0,4,2) ;USUAL FCN, NULL SELECT, LINE =36,
CW(3,2,3,50,5,4) ;LINE=36., COLUMN=50, LOW LINE MUST BE LAST!!
MOVE D,CANDID
CAILE D,22 ;MORE THAN 18 LINES CLOBBERS STUFF
MOVEI D,22 ;TRUNCATE TO WHAT WE CAN DISPLAY
MOVEM D,CANDID
TRII.0: SETZ D, ;INDEX TO CANDIDATES
TRII.1: TLNE FL,DDDSW
JRST TRDD.1
PUSH Z,[LVW(400,000,I,A,7,3)] ;LVW TO POSITION THE TEXT. Y SET BELOW
MOVNI X,40 ;LOAD A DIDDLE FACTOR
IMULI X,(D) ;TIMES THE WORD INDEX
ADDI X,700 ;PLUS THE OFFSET
DPB X,[POINT 11,(Z),21] ;STORE THE Y POSITION
JRST TRDD.2
TRDD.1: PUSH Z,[CW(3,50,3,50,3,50)] ;SET COLUMN.
TRDD.2: MOVEI C,1
MOVE Y,[POINT 7,C] ;DEPOSIT POINTER.
MOVEI A,1(D) ;GET THE INDEX+1.
PUSHJ P,DECDIS ;DECIMAL DISPLAY
MOVEI A,"." ;AND
PUSHJ P,DISDEP
MOVEI A," "
PUSHJ P,DISDEP
MOVE X,CANDBF(D) ;GET ADDRESS OF A CANDIDATE
HRLI X,(<POINT 5,0>) ;MAKE A BYTE POINTER
TRII.2: ILDB A,X ;GET A BYTE
JUMPE A,TRII.3 ;JUMP IF DONE.
CAIN A,APOS
SKIPA A,["'"]
ADDI A,"A"-1 ;MAKE IT 7 BIT ASCII
PUSHJ P,DISDEP ;DISPLAY DEPOSIT.
JRST TRII.2
TRII.3: PUSH Z,C ;ADD THIS WORD TO THE OUTPUT
PUSH Z,DPCRLF ;FOLLOWED BY CRLF
ADDI D,1
CAMGE D,CANDID
JRST TRII.1
TLNN FL,DDDSW
PUSH Z,[LVW(-1000,140,I,A,7,4)] ;VECTOR OVER TO THE LEFT CENTER
TLNE FL,DDDSW
PUSH Z,[CW(3,50,3,50,3,50)] ;SET COLUMN.
MOVEI C,1
MOVE Y,[POINT 7,C]
MOVE X,[POINT 7,DIGMES] ;GET MESSAGE POINTER
PUSHJ P,COPX
PUSH Z,C
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-113
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
PUSH Z,[0]
HLRE A,Z ;GET THE SIZE FIELD
ADDI A,DPYLEN
MOVEM A,DPYSIZ
UPGIOT 1,DPYHDR ;TURN ON THE TEXT
TLNN FL,DDDSW
JRST TRII5A ;NO EFFORT TO ERASE ON III
PUSHJ P,DPYSTT ;PREPARE PROGRAM TO ERASE DD
CW(1,46,2,0,4,2) ;USUAL FCN, NULL SELECT, LINE =36,
CW(3,2,3,50,5,4) ;LINE=36., COLUMN=50, LOW LINE MUST BE LAST!!
MOVE D,CANDID ;NUMBER OF CANDIDATES
TRDD.3: PUSH Z,[CW(3,50,3,50,3,50)] ;SET COLUMN.
PUSH Z,DDERS
SOJGE D,TRDD.3
PUSH Z,[0]
HLRE A,Z ;GET THE SIZE FIELD
ADDI A,DPYLEN
MOVEM A,DPYSIZ
TRII5A: OUTSTR [ASCIZ/*/]
INCHWL A ;WAIT FOR A CHARACTER
CAIL A,"0"
CAILE A,"9" ;DECIMAL DIGIT?
JRST TRIXIT ;NO. ALL THAT WORK FOR NOTHING.
MOVEI B,-"0"(A) ;OK
TRII.6: INCHWL A
CAIL A,"0"
CAILE A,"9"
JRST TRII.7
IMULI B,12
ADDI B,-"0"(A)
JRST TRII.6
TRII.7: CLRBFI
SUBI B,1 ;DECREASE TO MAKE INDEX
CAML B,CANDID ;LESS THAN CANDID?
JRST [OUTSTR [ASCIZ/NUMBER TOO BIG
/]
JRST TRII5A] ;LOSER
TLNE FL,DDDSW
UPGIOT DPYHDR ;ERASE SCREEN
MOVE A,CANDBF(B)
MOVEM A,CANDBX ;SAVE ADDRESS OF THIS STUFF
JRST TRFXR1 ;AND CORRECT THE WORD, ETC.
TRIXIT: UPGIOT 1,DPYHDR
JRST TRYFBX ;PROCESS COMMAND AS IF NORMAL.
;HERE TO DISPLAY THE ONE GUESS WE HAVE
IIONE: PUSHJ P,DPYSTT
CW(1,46,2,0,4,17) ;USUAL FCN, NULL SELECT, LINE =360
CW(3,2,3,2,5,00) ;LINE=360, COLUMN=2, LOW LINE MUST BE LAST!!
TLNN FL,DDDSW
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-114
SPELL MAC 17-JAN-79 22:25 STANFORD DISPLAY ROUTINES
PUSH Z,[LVW(-1000,140,I,A,7,4)]
MOVEI C,1
MOVEI Y,[POINT 7,C]
MOVE X,[POINT 7,[ASCIZ/C Correct this to "/]]
PUSHJ P,COPX
MOVE X,CANDBF
HRLI X,(<POINT 5,0>)
IIONE1: ILDB A,X
JUMPE A,IIONE2
CAIN A,APOS
SKIPA A,["'"]
ADDI A,"A"-1
PUSHJ P,DISDEP
JRST IIONE1
IIONE2: MOVE X,[POINT 7,[ASCIZ/"
/]]
PUSHJ P,COPX
PUSH Z,C
PUSH Z,[0]
HLRE A,Z
ADDI A,DPYLEN
MOVEM A,DPYSIZ
UPGIOT 1,DPYHDR
PUSHJ P,DPYSTT ;SETUP TO CLEAR DISPLAY
CW(1,46,2,0,4,17) ;USUAL FCN, NULL SELECT, LINE =360
CW(3,2,3,2,5,00) ;LINE=360, COLUMN=2, LOW LINE MUST BE LAST!!
PUSH Z,DDERS ;ERASE LINE
PUSH Z,[0]
HLRE A,Z
ADDI A,DPYLEN
MOVEM A,DPYSIZ ;ALL SET TO CLEAR THIS ON EXIT
OUTSTR [ASCIZ/*/]
INCHWL A
MOVEI B,1 ;INDEX FOR TRII.7
CAIE A,"C"
CAIN A,"c"
JRST TRII.7
UPGIOT 1,DPYHDR ;DISPLAY AGAIN TO ERASE SCREEN
JRST TRYFBX ;RETURN TO PROCESS COMMAND AS IF NORMAL.
DIGMES: ASCIZ/Select a displayed word by number
/
>;IFN STANSW
SUBTTL THE HELP MESSAGE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-115
SPELL MAC 17-JAN-79 22:25 THE HELP MESSAGE
;HELP MESSAGE FOR DPYS AND TTYS
;DO NOT CHANGE THE LENGTH OR NUMBER OF LINES BECAUSE YOU'LL SCREW UP MY DISPLAY
405216' HELMSG:
405216' 101 040 101 143 143 ASCIZ/A Accept word.
405217' 145 160 164 040 167
405220' 157 162 144 056 015
405221' 012 111 040 101 143 I Accept word and insert it
405222' 143 145 160 164 040
405223' 167 157 162 144 040
405224' 141 156 144 040 151
405225' 156 163 145 162 164
405226' 040 151 164 015 012 in the dictionary.
405227' 040 040 151 156 040
405230' 164 150 145 040 144
405231' 151 143 164 151 157
405232' 156 141 162 171 056
405233' 015 012 122 040 122 R Replace this word. User will
405234' 145 160 154 141 143
405235' 145 040 164 150 151
405236' 163 040 167 157 162
405237' 144 056 040 125 163
405240' 145 162 040 167 151
405241' 154 154 015 012 040 be able to type replacement word.
405242' 040 142 145 040 141
405243' 142 154 145 040 164
405244' 157 040 164 171 160
405245' 145 040 162 145 160
405246' 154 141 143 145 155
405247' 145 156 164 040 167
405250' 157 162 144 056 015
405251' 012 130 040 141 143 X accept this word, then finish
405252' 143 145 160 164 040
405253' 164 150 151 163 040
405254' 167 157 162 144 054
405255' 040 164 150 145 156
405256' 040 146 151 156 151
405257' 163 150 015 012 040 recopying without any checking.
405260' 040 162 145 143 157
405261' 160 171 151 156 147
405262' 040 167 151 164 150
405263' 157 165 164 040 141
405264' 156 171 040 143 150
405265' 145 143 153 151 156
405266' 147 056 015 012 127 W Save the incremental insertions,
405267' 040 123 141 166 145
405270' 040 164 150 145 040
405271' 151 156 143 162 145
405272' 155 145 156 164 141
405273' 154 040 151 156 163
405274' 145 162 164 151 157
405275' 156 163 054 015 012 then ask again about this word.
405276' 040 040 164 150 145
405277' 156 040 141 163 153
405300' 040 141 147 141 151
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-116
SPELL MAC 17-JAN-79 22:25 THE HELP MESSAGE
405301' 156 040 141 142 157
405302' 165 164 040 164 150
405303' 151 163 040 167 157
405304' 162 144 056 015 012 L Load an auxiliary dictionary,
405305' 114 040 114 157 141
405306' 144 040 141 156 040
405307' 141 165 170 151 154
405310' 151 141 162 171 040
405311' 144 151 143 164 151
405312' 157 156 141 162 171
405313' 054 015 012 040 040 then reconsider this word.
405314' 164 150 145 156 040
405315' 162 145 143 157 156
405316' 163 151 144 145 162
405317' 040 164 150 151 163
405320' 040 167 157 162 144
405321' 056 015 012 000 000 /
405322' 104 040 104 151 163 HELMG1: ASCIZ/D Display the current line again.
405323' 160 154 141 171 040
405324' 164 150 145 040 143
405325' 165 162 162 145 156
405326' 164 040 154 151 156
405327' 145 040 141 147 141
405330' 151 156 056 015 012 /
405331' 000 000 000 000 000
405332' 123 040 123 145 154 HELMGS: ASCIZ/S Select from list of guesses.
405333' 145 143 164 040 146
405334' 162 157 155 040 154
405335' 151 163 164 040 157
405336' 146 040 147 165 145
405337' 163 163 145 163 056
405340' 015 012 000 000 000 /
405341' 103 040 103 157 162 HELMGC: ASCIZ/C Correct this word with SPELL's guess.
405342' 162 145 143 164 040
405343' 164 150 151 163 040
405344' 167 157 162 144 040
405345' 167 151 164 150 040
405346' 123 120 105 114 114
405347' 047 163 040 147 165
405350' 145 163 163 056 015
405351' 012 000 000 000 000 /
405352' HELMSZ: ;HERE TO DISPLAY HELP MESSAGE
IFN STANSW,< TLNE FL,IIISW!DDDSW
JRST DOIIIN ;DO III INITIALIZATION MSG >
OUTSTR [ASCIZ/
You have the following options:
405352' 051 03 0 00 407544' /]
405353' 336 01 0 00 011526' SKIPN A,CANDID ;PUT OUT "S" OR "C" LINE ONLY IF
405354' 254 00 0 00 405360' JRST HLPOUT ; APPROPRIATE
405355' 306 01 0 00 000001 CAIN A,1
JRST [OUTSTR HELMGC
405356' 254 00 0 00 407554' JRST HLPOUT]
405357' 051 03 0 00 405332' OUTSTR HELMGS
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-117
SPELL MAC 17-JAN-79 22:25 THE HELP MESSAGE
405360' 051 03 0 00 405216' HLPOUT: OUTSTR HELMSG
405361' 051 03 0 00 405322' OUTSTR HELMG1
405362' 263 17 0 00 000000 POPJ P,
SUBTTL REPCHK, SETNUM
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-118
SPELL MAC 17-JAN-79 22:25 REPCHK, SETNUM
405363' 200 06 0 00 011526' REPCK: MOVE X,CANDID ;CHECK FOR REPEATS OF THE SAME WORD.
405364' 307 06 0 00 000001 CAIG X,1 ;ICK! THIS IS N-SQUARED IN CANDID.
405365' 263 17 0 00 000000 POPJ P,
405366' 201 06 0 00 000001 MOVEI X,1
405367' 201 07 0 06 000001 REPK1: MOVEI Y,1(X)
405370' 200 10 0 06 011526' REPK2: MOVE Z,CANDBF-1(X)
405371' 316 10 0 07 011526' CAMN Z,CANDBF-1(Y)
JRST [PUSH P,Z
SOS Z,CANDID
MOVE Z,CANDBF(Z)
MOVEM Z,CANDBF-1(Y)
POP P,Z
405372' 254 00 0 00 407556' JRST REPCK]
405373' 315 07 0 00 011526' CAMGE Y,CANDID
405374' 344 07 0 00 405370' AOJA Y,REPK2
405375' 271 06 0 00 000001 ADDI X,1
405376' 315 06 0 00 011526' CAMGE X,CANDID
405377' 254 00 0 00 405367' JRST REPK1
405400' 263 17 0 00 000000 POPJ P,
;GET DICTIONARY NUMBER FROM TTY, THEN FLUSH REST OF LINE.
405401' 334 02 0 00 406242' SETNM0: SKIPA B,[0] ;DEFAULT NUMBER IS #0
405402' 201 02 0 00 000001 SETNM1: MOVEI B,1 ;DEFAULT NUMBER IS #1
405403' 202 02 0 00 011606' MOVEM B,IDNUM
405404' 254 00 0 00 405406' JRST SETNUM
SETNM3: OUTSTR [ASCIZ/Dictionary number too large. Maximum is 31.
405405' 051 03 0 00 407564' Dictionary number: /]
405406' 260 17 0 00 401601' SETNUM: PUSHJ P,INDEC ;ENTER HERE TO READ DICTIONARY NUMBER
405407' 260 17 0 00 404154' PUSHJ P,FLUTTY
405410' 303 02 0 00 000037 CAILE B,37 ;DICT NUMBER IN BOUNDS?
405411' 254 00 0 00 405405' JRST SETNM3 ;NO. TRY AGAIN
405412' 332 00 0 00 000002 SKIPE B
405413' 202 02 0 00 011606' MOVEM B,IDNUM
405414' 263 17 0 00 000000 POPJ P,
SUBTTL X1SRCH TRY TO CORRECT ONE MISSPELLED LETTER
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-119
SPELL MAC 17-JAN-79 22:25 X1SRCH TRY TO CORRECT ONE MISSPELLED LETTER
405415' 260 17 0 00 404273' X1SRCH: PUSHJ P,HASHCP
405416' 321 10 0 00 403540' JUMPL Z,CPOPJ ;QUICK FAILURE
ICOUNT^
405417' 260 17 0 00 405455' PUSHJ P,SR1WL ;SPECIAL SEARCH
405420' 260 17 0 00 402401' PUSHJ P,SAVWD ;SAVE THE LOSING WORD
405421' 201 01 0 00 000033 MOVEI A,APOS ;TRY ALL SECOND LETTERS (INCLUDING APOS)
405422' 202 01 0 00 011577' MOVEM A,TLET.1
405423' 137 01 0 00 407405' X1SRC2: DPB A,[POINT 5,WORDIN,9] ;TWEAKING THE SECOND LETTER
405424' 260 17 0 00 404332' PUSHJ P,MATCH
405425' 255 00 0 00 000000 JFCL
405426' 254 00 0 00 405434' JRST X1SRC3 ;FAILURE
405427' 350 01 0 00 011526' AOS A,CANDID
405430' 303 01 0 00 000047 CAILE A,CNBFSZ-1
405431' 201 01 0 00 000047 MOVEI A,CNBFSZ-1
405432' 202 01 0 00 011526' MOVEM A,CANDID
405433' 202 06 0 01 011526' MOVEM X,CANDBF-1(A)
ICOUNT^
405434' 373 01 0 00 011577' X1SRC3: SOSLE A,TLET.1
405435' 254 00 0 00 405423' JRST X1SRC2
405436' 260 17 0 00 402406' PUSHJ P,UNSVWD ;RESTORE ORIGINAL WORD
405437' 201 01 0 00 000032 MOVEI A,Z5 ;TRY ALL FIRST LETTERS (NOT INCL. APOS)
405440' 202 01 0 00 011577' MOVEM A,TLET.1
405441' 137 01 0 00 407404' X1SRC4: DPB A,[POINT 5,WORDIN,4] ;TWEAKING THE FIRST LETTER
405442' 260 17 0 00 404332' PUSHJ P,MATCH
405443' 255 00 0 00 000000 JFCL
405444' 254 00 0 00 405452' JRST X1SRC5 ;FAILURE
405445' 350 01 0 00 011526' AOS A,CANDID
405446' 303 01 0 00 000047 CAILE A,CNBFSZ-1
405447' 201 01 0 00 000047 MOVEI A,CNBFSZ-1
405450' 202 01 0 00 011526' MOVEM A,CANDID
405451' 202 06 0 01 011526' MOVEM X,CANDBF-1(A)
ICOUNT^
405452' 373 01 0 00 011577' X1SRC5: SOSLE A,TLET.1
405453' 254 00 0 00 405441' JRST X1SRC4
405454' 254 00 0 00 402406' JRST UNSVWD ;REPAIR WORD AND RETURN
; SPECIAL SEARCH FOR ONE LETTER MISPELLINGS
405455' SR1WL: ICOUNT^
405455' 323 10 0 00 403540' JUMPLE Z,CPOPJ ;GIVE UP
405456' 305 05 0 00 000003 CAIGE W,3
405457' 263 17 0 00 000000 POPJ P,
405460' 261 17 0 00 000005 PUSH P,W
405461' 231 05 0 00 000007 IDIVI W,7
405462' 322 06 0 00 405464' JUMPE X,.+2
405463' 271 05 0 00 000001 ADDI W,1
405464' 202 05 0 00 011117' MOVEM W,WWLEN ;# WORDS OF 5BIT
405465' 262 17 0 00 000005 POP P,W
405466' 602 00 0 00 000004 TRNE FL,LEFT
405467' 554 06 0 10 002156' HLRZ X,HASHTB(Z)
405470' 606 00 0 00 000004 TRNN FL,LEFT
405471' 550 06 0 10 002156' HRRZ X,HASHTB(Z)
405472' 322 06 0 00 403540' JUMPE X,CPOPJ ;TIME TO QUIT
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-120
SPELL MAC 17-JAN-79 22:25 X1SRCH TRY TO CORRECT ONE MISSPELLED LETTER
405473' SR1WL1: ICOUNT^
405473' 550 14 0 06 000000 HRRZ N,(X) ;NEXT IN THE CHAIN
405474' 200 07 0 06 000000 MOVE Y,(X) ;PICK UP FLAGS WORD
405475' 271 06 0 00 000001 ADDI X,1
405476' 201 11 0 06 777777 MOVEI K,-1(X) ;BASE ADDRESS OF WORD,-1
405477' 603 07 0 00 000040 TLNE Y,MISSPL ;SKIP IF NO MISSPL BIT
405500' 550 11 0 06 777776 HRRZ K,-2(X) ;THIS IS A MISSPELLING. CORRECTION-1
405501' 271 11 0 00 000001 ADDI K,1
405502' 200 07 0 00 011526' MOVE Y,CANDID
405503' 202 11 0 07 011527' MOVEM K,CANDBF(Y) ;STUFF ADDRESS IN CASE OF SUCCESS
405504' 403 01 0 00 000007 SETZB A,Y ;Y INDEX TO WORDIN, A COUNTS WRONG LETTERS
405505' SRWL1A: ICOUNT^
405505' 200 11 0 06 000000 MOVE K,(X)
405506' 430 11 0 07 010776' XOR K,WORDIN(Y)
405507' 243 11 0 00 405522' SR1WL3: JFFO K,SRWL2A ;LOCATE FIRST ERROR BYTE
405510' 271 07 0 00 000001 ADDI Y,1
405511' 315 07 0 00 011117' CAMGE Y,WWLEN
405512' 344 06 0 00 405505' AOJA X,SRWL1A
405513' 350 06 0 00 011526' AOS X,CANDID
405514' 303 06 0 00 000047 CAILE X,CNBFSZ-1
405515' 201 06 0 00 000047 MOVEI X,CNBFSZ-1
405516' 202 06 0 00 011526' MOVEM X,CANDID
405517' SR1WL4: ICOUNT^
405517' 201 06 0 14 000000 MOVEI X,(N) ;LINK ON TO NEXT WORD
405520' 326 06 0 00 405473' JUMPN X,SR1WL1
405521' 263 17 0 00 000000 POPJ P,
405522' 327 01 0 00 405517' SRWL2A: JUMPG A,SR1WL4 ;TOO MANY ERRORS ALREADY
405523' 231 12 0 00 000005 IDIVI L,5 ;HERE ON ERROR BYTE. GET BYTE FROM THE TABLE
405524' 137 01 0 12 405526' DPB A,SR1WLT(L) ;ZERO ERROR BYTE
405525' 344 01 0 00 405507' AOJA A,SR1WL3 ;COUNT ERROR. TEST REMAINDER OF MACHIN WORD.
405526' 37 05 0 00 000011 SR1WLT: POINT 5,K,4
405527' 32 05 0 00 000011 POINT 5,K,9
405530' 25 05 0 00 000011 POINT 5,K,14
405531' 20 05 0 00 000011 POINT 5,K,19
405532' 13 05 0 00 000011 POINT 5,K,24
405533' 06 05 0 00 000011 POINT 5,K,29
405534' 01 05 0 00 000011 POINT 5,K,34
SUBTTL X1EXL MAYBE HE TYPED ONE EXTRA LETTER
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-121
SPELL MAC 17-JAN-79 22:25 X1EXL MAYBE HE TYPED ONE EXTRA LETTER
COMMENT/
FOR W TIMES, COPY W-1 LETTERS FROM WDSVWX TO WORDIN
ON THE I'TH COPY, SKIP LETTER NUMBER W-I+1
/
405535' X1EXL: ICOUNT^
405535' 305 05 0 00 000003 CAIGE W,3
405536' 263 17 0 00 000000 POPJ P, ;CAN'T CORRECT A SHORT WORD
405537' 260 17 0 00 402401' PUSHJ P,SAVWD
405540' 202 05 0 00 011577' MOVEM W,TLET.1 ;TLET.1 WILL SELECT THE LETTER TO
;SKIP
405541' X1EXL1: ICOUNT^
405541' 402 00 0 00 010776' SETZM WORDIN ;READY FOR BLT
405542' 200 01 0 00 406634' MOVE A,[XWD WORDIN,WORDIN+1]
405543' 251 01 0 00 011003' BLT A,WORDIN+5
405544' 200 02 0 00 406622' MOVE B,[POINT 5,WORDIN]
405545' 200 03 0 00 407602' MOVE C,[POINT 5,SVWDWX]
405546' 400 04 0 00 000000 SETZ D, ;COUNT THE CHARACTERS MOVED
405547' X1EXL2: ICOUNT^
405547' 134 01 0 00 000003 ILDB A,C
405550' 271 04 0 00 000001 ADDI D,1
405551' 312 04 0 00 011577' CAME D,TLET.1
405552' 136 01 0 00 000002 IDPB A,B
BCHECK(B,WORDIN+10)^
405553' 315 04 0 00 000005 CAMGE D,W
405554' 254 00 0 00 405547' JRST X1EXL2
405555' 275 05 0 00 000001 SUBI W,1
405556' 260 17 0 00 404332' PUSHJ P,MATCH
405557' 255 00 0 00 000000 JFCL
405560' 254 00 0 00 405566' JRST X1EXL3
405561' 350 01 0 00 011526' AOS A,CANDID
405562' 303 01 0 00 000047 CAILE A,CNBFSZ-1
405563' 201 01 0 00 000047 MOVEI A,CNBFSZ-1
405564' 202 01 0 00 011526' MOVEM A,CANDID
405565' 202 06 0 01 011526' MOVEM X,CANDBF-1(A)
405566' X1EXL3: ICOUNT^
405566' 271 05 0 00 000001 ADDI W,1
405567' 373 00 0 00 011577' SOSLE TLET.1
405570' 254 00 0 00 405541' JRST X1EXL1
405571' 260 17 0 00 402406' PUSHJ P,UNSVWD
405572' 263 17 0 00 000000 POPJ P,
SUBTTL XTRNP ONE PAIR TRANSPOSITION
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-122
SPELL MAC 17-JAN-79 22:25 XTRNP ONE PAIR TRANSPOSITION
405573' XTRNP: ICOUNT^
405573' 260 17 0 00 402401' PUSHJ P,SAVWD
405574' 202 05 0 00 011577' MOVEM W,TLET.1
405575' 370 00 0 00 011577' SOS TLET.1
405576' XTRNP1: ICOUNT^
405576' 402 00 0 00 010776' SETZM WORDIN
405577' 200 01 0 00 406634' MOVE A,[XWD WORDIN,WORDIN+1]
405600' 251 01 0 00 011003' BLT A,WORDIN+5
405601' 200 02 0 00 406622' MOVE B,[POINT 5,WORDIN]
405602' 200 03 0 00 407602' MOVE C,[POINT 5,SVWDWX]
405603' 400 04 0 00 000000 SETZ D,
405604' XTRNP2: ICOUNT^
405604' 134 01 0 00 000003 ILDB A,C
405605' 271 04 0 00 000001 ADDI D,1
405606' 316 04 0 00 011577' CAMN D,TLET.1
JRST [PUSH P,A
ILDB A,C
ADDI D,1
IDPB A,B
POP P,A
405607' 254 00 0 00 407603' JRST .+1]
405610' 136 01 0 00 000002 IDPB A,B
BCHECK(B,WORDIN+10)^
405611' 315 04 0 00 000005 CAMGE D,W
405612' 254 00 0 00 405604' JRST XTRNP2
405613' 260 17 0 00 404332' PUSHJ P,MATCH
405614' 255 00 0 00 000000 JFCL
405615' 254 00 0 00 405623' JRST XTRNP3
405616' 350 01 0 00 011526' AOS A,CANDID
405617' 303 01 0 00 000047 CAILE A,CNBFSZ-1
405620' 201 01 0 00 000047 MOVEI A,CNBFSZ-1
405621' 202 01 0 00 011526' MOVEM A,CANDID
405622' 202 06 0 01 011526' MOVEM X,CANDBF-1(A)
405623' XTRNP3: ICOUNT^
405623' 373 00 0 00 011577' SOSLE TLET.1
405624' 254 00 0 00 405576' JRST XTRNP1
405625' 260 17 0 00 402406' PUSHJ P,UNSVWD
405626' 263 17 0 00 000000 POPJ P,
SUBTTL X1LMS ONE LETTER MISSING
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-123
SPELL MAC 17-JAN-79 22:25 X1LMS ONE LETTER MISSING
;THE IDEA HERE IS THAT WE MAKE A NULL CHARACTER AND SLIDE IT THRU THE
;WORD, AND AT EACH POSITION WE TRY THE ONE LETTER WRONG MATCH.
;INSTEAD OF PUTTING THE NULL IN THE FIRST OR SECOND CHARACTER, WE TRY
;ALL THE POSSIBLE VALUES OF FIRST AND SECOND.
405627' X1LMS: ICOUNT^
405627' 260 17 0 00 402401' PUSHJ P,SAVWD
405630' 202 05 0 00 011600' MOVEM W,TLET.2
405631' 350 00 0 00 011600' AOS TLET.2
405632' X1LMS1: ICOUNT^
405632' 402 00 0 00 010776' SETZM WORDIN
405633' 200 01 0 00 406634' MOVE A,[XWD WORDIN,WORDIN+1]
405634' 251 01 0 00 011003' BLT A,WORDIN+5
405635' 200 02 0 00 406622' MOVE B,[POINT 5,WORDIN]
405636' 200 03 0 00 407602' MOVE C,[POINT 5,SVWDWX]
405637' 400 04 0 00 000000 SETZ D,
405640' X1LMS2: ICOUNT^
405640' 134 01 0 00 000003 ILDB A,C
405641' 271 04 0 00 000001 ADDI D,1
405642' 316 04 0 00 011600' CAMN D,TLET.2
405643' 133 00 0 00 000002 IBP B ;SLIDE PAST THIS BYTE
405644' 136 01 0 00 000002 IDPB A,B
BCHECK(B,WORDIN+10)^
405645' 315 04 0 00 000005 CAMGE D,W
405646' 254 00 0 00 405640' JRST X1LMS2
405647' 271 05 0 00 000001 ADDI W,1
405650' 260 17 0 00 404273' PUSHJ P,HASHCP
405651' 260 17 0 00 405455' PUSHJ P,SR1WL
405652' 275 05 0 00 000001 SUBI W,1
405653' 370 01 0 00 011600' SOS A,TLET.2
405654' 303 01 0 00 000002 CAILE A,2
405655' 254 00 0 00 405632' JRST X1LMS1
;NOW TRY ALL VALUES FOR THE SECOND CHARACTER
405656' 402 00 0 00 010776' SETZM WORDIN
405657' 200 01 0 00 406634' MOVE A,[XWD WORDIN,WORDIN+1]
405660' 251 01 0 00 011003' BLT A,WORDIN+5
405661' 200 02 0 00 406622' MOVE B,[POINT 5,WORDIN]
405662' 200 03 0 00 407602' MOVE C,[POINT 5,SVWDWX]
405663' 134 01 0 00 000003 ILDB A,C
405664' 136 01 0 00 000002 IDPB A,B
405665' 133 00 0 00 000002 IBP B ;SKIP SECOND CHARACTER
405666' 201 04 0 00 000002 MOVEI D,2 ;START D ONE TOO BIG
405667' 134 01 0 00 000003 X1LMS3: ILDB A,C
405670' 136 01 0 00 000002 IDPB A,B
BCHECK(B,WORDIN+10)^
405671' 305 04 0 05 000000 CAIGE D,(W)
405672' 344 04 0 00 405667' AOJA D,X1LMS3
405673' 271 05 0 00 000001 ADDI W,1 ;SET NEW, LONGER LENGTH.
ICOUNT^
405674' 201 01 0 00 000033 MOVEI A,APOS ;ALL POSSIBLE SECOND LETTERS (INC. APOS)
405675' 202 01 0 00 011600' MOVEM A,TLET.2
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-124
SPELL MAC 17-JAN-79 22:25 X1LMS ONE LETTER MISSING
405676' 137 01 0 00 407405' X1LMS4: DPB A,[POINT 5,WORDIN,9]
405677' 260 17 0 00 404332' PUSHJ P,MATCH
405700' 255 00 0 00 000000 JFCL
405701' 254 00 0 00 405707' JRST X1LMS5
405702' 350 01 0 00 011526' AOS A,CANDID
405703' 303 01 0 00 000047 CAILE A,CNBFSZ-1
405704' 201 01 0 00 000047 MOVEI A,CNBFSZ-1
405705' 202 01 0 00 011526' MOVEM A,CANDID
405706' 202 06 0 01 011526' MOVEM X,CANDBF-1(A)
ICOUNT^
405707' 373 01 0 00 011600' X1LMS5: SOSLE A,TLET.2
405710' 254 00 0 00 405676' JRST X1LMS4
;NOW TRY ALL VALUES FOR FIRST CHARACTER.
405711' 135 01 0 00 407404' LDB A,[POINT 5,WORDIN,4] ;GET FIRST LETTER
405712' 137 01 0 00 407405' DPB A,[POINT 5,WORDIN,9] ;COPY FIRST LETTER TO SECOND
405713' 201 01 0 00 000032 MOVEI A,Z5 ;ALL POSSIBLE FIRST LETTERS (NOT INC. APOS)
405714' 202 01 0 00 011600' MOVEM A,TLET.2
405715' 137 01 0 00 407404' X1LMS6: DPB A,[POINT 5,WORDIN,4]
405716' 260 17 0 00 404332' PUSHJ P,MATCH
405717' 255 00 0 00 000000 JFCL
405720' 254 00 0 00 405726' JRST X1LMS7
405721' 350 01 0 00 011526' AOS A,CANDID
405722' 303 01 0 00 000047 CAILE A,CNBFSZ-1
405723' 201 01 0 00 000047 MOVEI A,CNBFSZ-1
405724' 202 01 0 00 011526' MOVEM A,CANDID
405725' 202 06 0 01 011526' MOVEM X,CANDBF-1(A)
ICOUNT^
405726' 373 01 0 00 011600' X1LMS7: SOSLE A,TLET.2
405727' 254 00 0 00 405715' JRST X1LMS6
405730' 254 00 0 00 402406' JRST UNSVWD ;RESTORE ORIGINAL WORD
SUBTTL SAVEME WRITE OUT CORE IMAGE USING SWAP UUO.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-125
SPELL MAC 17-JAN-79 22:25 SAVEME WRITE OUT CORE IMAGE USING SWAP UUO.
; OTHER SYSTEMS WILL HAVE TO TRY DUMP MODE I-O
405731' 337 00 0 00 010760' SAVEME: SKIPG NMIS
405732' 254 00 0 00 405741' JRST SAVEM0
405733' 051 03 0 00 407611' OUTSTR [ASCIZ/Type Y to flush the misspellings: /]
405734' 051 04 0 00 000001 INCHWL A
405735' 260 17 0 00 404154' PUSHJ P,FLUTTY
405736' 302 01 0 00 000131 CAIE A,"Y"
405737' 306 01 0 00 000171 CAIN A,"Y"+40
405740' 260 17 0 00 403257' PUSHJ P,MISFLU
405741' SAVEM0:
IFN STANSW,< OUTSTR [ASCIZ/By what name shall I save thENDC]
PUSHJ P,GETFIL
JRST [OUTSTR [ASCIZ/Default name is SPELL.DMP
/]
MOVE K,[SIXBIT/SPELL/]
MOVEI M,0
SETZB L,N
JRST .+1]
SKIPN K-1,M ;GET DEVICE NAME, IF ANY
MOVSI K-1,'DSK' ;USE DSK IF NO NAME GIVEN
JUMPN L,.+2
MOVSI L,'DMP' ;DEFAULT EXTENSION
SETZ M, ;USE EXISTING SIZE AND START ADDRESS
MOVSI 0,K-1 ;ADDRESS OF SWAP BLOCK INTO LEFT SIDE OF 0
SWAP 0,
POPJ P, >;IFN STANSW
IFN TENEX,<
SAVEM1: OUTSTR [ASCIZ /By what name shall I save this? /]
HRROI L,[ASCIZ /SPELL/]
SKIPGE TNXEOL ;[Tops20] RUNNING ON TENEX?
SKIPA M,[-1,,[ASCIZ /EXE/]] ;[Tops20] NO, USE TOPS20 STD.
HRROI M,[ASCIZ /SAV/] ;[Tops20] YES, USE TENEX STD.
MOVEM L,DEFALT+4
MOVEM M,DEFALT+5
MOVSI A,460003
MOVEM A,DEFALT+0
MOVEI 1,DEFALT
MOVE 2,[100,,101]
GTJFN
JRST [HRROI 1,[ASCIZ / ? /]
PSOUT
JRST SAVEM1]
HRLI 1,400000 ;FORK,,JFN
MOVE 2,[-700B17+520B26+000B35]
SETZ 3,
SSAVE
TLZ 1,-1
CLOSF
JFCL
POPJ P, >;END IFN TENEX
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-126
SPELL MAC 17-JAN-79 22:25 SAVEME WRITE OUT CORE IMAGE USING SWAP UUO.
IFE STANSW!TENEX,<
OUTSTR [ASCIZ/SSAVE this core image, then restart the program.
405741' 051 03 0 00 407620' /]
405742' 047 01 0 00 000012 SAVE1A: EXIT 1,
405743' 263 17 0 00 000000 POPJ P, ;IF HE CAN CONTINUE.
SUBTTL TENEX UUO HANDLER
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-127
SPELL MAC 17-JAN-79 22:25 TENEX UUO HANDLER
IFN TENEX,<
UUOH: PUSH P,A
PUSH P,B ;SAVE 2 AC'S
HRRZ B,40
CAIN B,1 ;CHANGE LOWCOR ADDRESSES TO POINT AT STACK
MOVEI B,-1(P)
CAIN B,2
MOVEI B,0(P)
LDB A,[POINT 9,40,8] ;GET OPCODE PART
CAIL A,UUOTLN ;IN BOUNDS?
MOVEI A,0
XCT CUUOT(A) ;YES. B HAS EFFECTIVE ADDR.
JRST .+2 ;DIRECT RETURN
UUOSKR: AOS UUOHX ;SKIP RETURN
UUORET: POP P,B
POP P,A
JRSTF @UUOHX
UUOUND: HRROI 1,[ASCIZ /
UNDEFINED UUO AT LOC /]
PSOUT
PUSH P,C
MOVEI 1,101
HRRZ 2,UUOHX
MOVEI 3,10
NOUT
JFCL
HRROI 1,CRLF ;[Tops20]
PSOUT ;[Tops20]
POP P,C
POP P,B
POP P,A
HALTF
JRST @UUOHX ;IN CASE HE CONTINUES
CUUOT: JRST UUOUND ;0
PUSHJ P,OPNFIL ;1 ENTER
PUSHJ P,OPNFIL ;2 LOOKUP
PUSHJ P,UCLS ;3 CLOSE (NEED TO SET UP K)
JFCL ;4 RELEAS
JRST UTTCA0 ;5 INCHRW
JRST UTTCA1 ;6 OUTCHR
JRST UTTCA2 ;7 INCHRS
JRST UTTCA3 ;10 OUTSTR
JRST UTTCA4 ;11 INCHWL
JRST UUOUND ;12 GETLCH - ILLEGAL
JRST UTTC11 ;13 CLRBFI
UUOTLN==.-CUUOT
UCLS: PUSH P,K ;SAVE K.
MOVSI K,-UCLTLN
LDB A,[POINT 4,40,12] ;GET THE AC FIELD OF UUO
HRRZ B,UCLTAB(K) ;GET A CHANNEL NUMBER
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-128
SPELL MAC 17-JAN-79 22:25 TENEX UUO HANDLER
CAIE A,(B)
AOBJN K,.-2 ;SEARCH
JUMPGE K,UCLS1
HLRZ K,UCLTAB(K)
PUSHJ P,FILCLS
UCLS1: POP P,K
POPJ P,
UCLTAB: DICTBF,,DICT
CORRBF,,CORR
EXCPBF,,EXCP
DATABF,,DATA
UCLTLN==.-UCLTAB
;TTY UUOS
UTTCA1: HRRZ 1,0(2)
PBOUT
JRST UUORET
UTTCA3: HRROI 1,0(B)
PSOUT
JRST UUORET
UTTC11: MOVEI 1,100
CFIBF
SETZM NTTYCH ;KILL TTY-IN LINE TOO
JRST UUORET
UTTCA4:
UTTCA0: PUSH P,N
SKIPGE N,NTTYCH ;ARE THERE CHRS ALREADY?
JRST GETCH4 ;YES
SETZB N,NTTYCH ;NO: SUCK 'EM IN TIL END OF LINE
LOOP4: PBIN
CAIE 1,"M"&37 ; {[Tops20] CR?
JRST LOOP4A ; NO
MOVEI 1,100 ; YES, SEE IF LF FOLLOWS
PUSH P,2 ; AVOID AC2 CLOBBER
SIBE
CAIA ; NORMAL CASE (THERE SHOULD BE A LF)
JRST LOOP4B ; STRANGE CASE (A TOPS20 FAILURE?)
PBIN
CAIN 1,LF ; A LF?
JRST LOOP4B ; YES, PROCEED
MOVEI 1,100 ; NO, BACKUP (ANOTHER TOPS20 FAILURE?)
BKJFN
JFCL
LOOP4B: MOVEI 1,"M"&37 ; CR (WHAT WE GOT TYPED...)
POP P,2
LOOP4A: CAIN 1,37 ; A BBN EOL?
MOVEI 1,CR ; YES, FORCE A CR
CAIN 1,"V"&37 ; ^V (QUOTING CHAR)
JRST CTRLV
CAIN 1,"W"&37 ; ^W (DELETE WORD)
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-129
SPELL MAC 17-JAN-79 22:25 TENEX UUO HANDLER
JRST CTRLW
CAIN 1,177 ; DEL (USED BY TOPS20, WHY NOT ALSO US?)
JRST CTRLA
CAIE 1,"H"&37 ; ANSI/ASCII STANDARD BACKSPACE
CAIN 1,"A"&37
JRST CTRLA
CAIN 1,"U"&37 ; ^U (TOPS20 STANDARD...)
JRST CTRLQ
CAIE 1,"X"&37 ; ANSI/ASCII STANDARD CANCEL LINE
CAIN 1,"Q"&37
JRST CTRLQ
CAIN 1,"R"&37
JRST CTRLR
MOVEM 1,TTYLIN(N) ;STASH THE CHR
AOJ N, ;AND COUNT IT
;;; CAIE 1,EOL
CAIE 1,CR ; }[Tops20]
CAIN 1,LF
JRST ENDLIN
CAIE 1,ESC
JRST LOOP4
ENDLIN: JUMPE N,LOOP4 ;IF LINE EMPTY
MOVN N,N
HRLZ N,N
HRRI N,TTYLIN ;N= -NCHRS,,TTYLIN
JRST GETCH4
CTRLA: JUMPE N,[MOVEI 1,7 ;CTRL-A: ERASE LAST CHR
PBOUT
JRST LOOP4]
MOVEI 1,"\"
PBOUT
MOVE 1,TTYLIN-1(N)
PBOUT
SOJA N,LOOP4
CTRLQ: HRROI 1,[ASCIZ /_
/]
PSOUT
SETZ N, ;CTRL-Q: ZAP THE LINE SO FAR
JRST LOOP4
CTRLR: PUSH P,C ;CTRL-R: RETYPE LINE SO FAR
PUSH P,D
HRROI 1,CRLF ;[Tops20]
PSOUT ;[Tops20]
MOVE C,N
MOVEI D,TTYLIN
CTRLR1: SOJL C,CTRLR2
MOVE 1,(D)
PBOUT
AOJA D,CTRLR1
CTRLR2: POP P,D
POP P,C
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-130
SPELL MAC 17-JAN-79 22:25 TENEX UUO HANDLER
JRST LOOP4
CTRLV: PUSH P,2 ; ACCEPT AN ARB CHAR
PUSH P,3
MOVEI 1,100
RFCOC
PUSH P,2
PUSH P,3
MOVE 2,[252525,,252525] ; INDICATE ALL CONTROLS
MOVE 3,2
SFCOC
RFMOD
PUSH P,2
IORI 2,17B23 ; BE SURE TO WAKE UP
SFMOD
BIN ; GET THE CHAR
MOVEM 2,TTYLIN(N) ; STUFF IT IN PLACE
POP P,2
SFMOD
POP P,3
POP P,2
SFCOC
POP P,3
POP P,2
AOJA N,LOOP4 ; DONE !!!
CTRLW: ; ^W: ERASE LAST "WORD"
JUMPE N,[MOVEI 1,7
PBOUT ; NOTHING TO ERASE
JRST LOOP4]
MOVEI 1,"\"
PBOUT
MOVE 1,TTYLIN-1(N)
PBOUT
SOJE N,CTRLW2
CAILE 1," " ; A "SEPARATOR"?
JRST CTRLW1 ; NO, GO DELETE UNTIL WE GET ONE
CTRLW0:
MOVE 1,TTYLIN-1(N) ; SEPARATOR, GO LOOK FOR A NON-SEP
PBOUT
SOJE N,CTRLW2
CAIG 1," " ; SEPARATOR?
JRST CTRLW0 ; YES, KEEP LOOKING
CTRLW1:
MOVE 1,TTYLIN-1(N)
CAIG 1," " ; SEPARATOR?
JRST CTRLW2 ; YES, DON'T DELETE IT, WE'RE DONE
PBOUT ; NO, DELETE IT
SOJE N,CTRLW2
JRST CTRLW1 ; KEEP LOOKING FOR A SEP
CTRLW2:
MOVEI 1,"\" ; DONE
PBOUT
JRST LOOP4
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-131
SPELL MAC 17-JAN-79 22:25 TENEX UUO HANDLER
UTTCA2: PUSH P,N
SKIPN N,NTTYCH ;IS THERE A CHR?
JRST CA2EX ;NO
AOS UUOHX ;YES - SET SKIP RETURN AND GRAB IT
GETCH4: MOVE 1,(N)
MOVEM 1,0(2)
AOBJN N,.+1 ;COUNT THE CHR, BUMP THE ADDRESS
MOVEM N,NTTYCH
CA2EX: POP P,N
JRST UUORET
FLUTTY: SETZM NTTYCH ;FLUSH REST OF CHRS IN LINE
POPJ P,
;ADDITIONAL INITIALIZATION FOR TENEX
INITX: MOVEI 1,100 ;SET WAKEUP SET SO REG'S WAIT FOR LINE,
RFMOD ;PICK AT CHRS, FLUSH REST OF LINE
ANDCMI 2,17B23 ;STUFF WORKS RIGHT
IORI 2,14B23 ;FORMATTING AND NON-FORMATTING CONTROLS
SFMOD
RFCOC ;NO ECHO FOR ^A, ^H, ^Q, ^R, ^V, ^W, ^X
ANDCM 2,[3B3+3B17+3B35]
ANDCM 3,[3B1+3B9+3B11+3B13]
SFCOC
SETZM NTTYCH
MOVE 1,[JSYS [UUOHX,,UUOH]]
MOVEM 1,41 ;SET UUO HANDLER INSTR.
SETZM DICTBF+7 ;SET TO NO IO ACTIVE
SETZM DATABF+7
SETZM EXCPBF+7
SETZM CORRBF+7
POPJ P,
>;END IFN TENEX
SUBTTL LENGTH COUNT THE LENGTH OF THE HASH CHAINS.
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-132
SPELL MAC 17-JAN-79 22:25 LENGTH COUNT THE LENGTH OF THE HASH CHAINS.
;INTENDED FOR WIZARDS ONLY - CALL FROM DDT VIA PUSHJ P,
IFN XCNT,<
405744' 051 03 0 00 407633' ERLENG: OUTSTR [ASCIZ/SPELL.DAT ENTER FAILED./]
405745' 254 04 0 00 405746' HALT .+1
405746' 201 13 0 00 000000 LENGTH: MOVEI M,0 ;USE DSK: FOR DEVICE (NON-TENEX ONLY)
405747' 260 17 0 00 402742' PUSHJ P,INDCTO ;INIT DICTIONARY CHANNEL IN OUTPUT MODE
405750' 200 11 0 00 407640' IFE TENEX,< MOVE K,['SPELL ']
405751' 205 12 0 00 444164 MOVSI L,'DAT'
405752' 403 13 0 00 000014 SETZB M,N >;IFE TENEX
IFN TENEX,< OUTSTR [ASCIZ/LENGTH FILE: /]
MOVEI K,DICTBF
HRROI L,[ASCIZ/SPELL/]
HRROI M,[ASCIZ/DAT/]
PUSHJ P,GETFIL
JRST .-1 >;IFN TENEX
405753' 077 14 0 00 000011 ENTER DICT,K
405754' 254 00 0 00 405744' JRST ERLENG
405755' 201 07 0 00 000062 MOVEI Y,62
405756' 205 10 0 00 771314 MOVSI Z,-HASHTL ;THE MAIN INDEX - AOBJN
405757' 305 07 0 00 000062 LEN.0: CAIGE Y,62 ;TIME FOR FRESH PAGE?
405760' 254 00 0 00 405766' JRST LEN.1 ;NO
405761' 201 07 0 00 000000 MOVEI Y,0
405762' 201 02 0 00 407641' MOVEI B,[ASCIZ/ 2 3 4 5 6 7 8/]
405763' 260 17 0 00 406052' PUSHJ P,WRSDCT
MOVEI B,[ASCIZ/ 9 10 11+
405764' 201 02 0 00 407652' /]
405765' 260 17 0 00 406052' PUSHJ P,WRSDCT
405766' 201 03 0 00 000000 LEN.1: MOVEI C,0 ;NUMBER OF COLUMNS
405767' 554 06 0 10 002156' HLRZ X,HASHTB(Z)
405770' 260 17 0 00 406041' PUSHJ P,LCNT ;DO LEFT SIDE
405771' 550 06 0 10 002156' HRRZ X,HASHTB(Z)
405772' 260 17 0 00 406041' PUSHJ P,LCNT ;DO RIGHT SIDE
405773' 554 06 0 10 002157' HLRZ X,HASHTB+1(Z)
405774' 260 17 0 00 406041' PUSHJ P,LCNT ;DO LEFT SIDE
405775' 550 06 0 10 002157' HRRZ X,HASHTB+1(Z)
405776' 260 17 0 00 406041' PUSHJ P,LCNT ;DO RIGHT SIDE
405777' 554 06 0 10 002160' HLRZ X,HASHTB+2(Z)
406000' 260 17 0 00 406041' PUSHJ P,LCNT ;DO LEFT SIDE
406001' 550 06 0 10 002160' HRRZ X,HASHTB+2(Z)
406002' 260 17 0 00 406041' PUSHJ P,LCNT ;DO RIGHT SIDE
406003' 554 06 0 10 002161' HLRZ X,HASHTB+3(Z)
406004' 260 17 0 00 406041' PUSHJ P,LCNT ;DO LEFT SIDE
406005' 550 06 0 10 002161' HRRZ X,HASHTB+3(Z)
406006' 260 17 0 00 406041' PUSHJ P,LCNT ;DO RIGHT SIDE
406007' 554 06 0 10 002162' HLRZ X,HASHTB+4(Z)
406010' 260 17 0 00 406041' PUSHJ P,LCNT ;DO LEFT SIDE
406011' 550 06 0 10 002162' HRRZ X,HASHTB+4(Z)
406012' 260 17 0 00 406041' PUSHJ P,LCNT ;DO RIGHT SIDE
406013' 301 03 0 00 000074 CAIL C,12*6 ;WAS ANYTHING ON THIS LINE?
406014' 254 00 0 00 406033' JRST LEN.2 ;NO
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-133
SPELL MAC 17-JAN-79 22:25 LENGTH COUNT THE LENGTH OF THE HASH CHAINS.
406015' 271 03 0 00 000002 ADDI C,2
406016' 201 01 0 00 000040 MOVEI A," "
406017' 260 17 0 00 401222' PUSHJ P,WDICT ;OUTPUT SPACES
406020' 367 03 0 00 406017' SOJG C,.-1
406021' 201 01 0 10 000000 MOVEI A,(Z)
406022' 231 01 0 00 000005 IDIVI A,5 ;DIVIDE 0 TO 675
406023' 231 01 0 00 000032 IDIVI A,32 ;FIRST LETTER IN A, SECOND IN B
406024' 271 01 0 00 000101 ADDI A,"A"
406025' 260 17 0 00 401222' PUSHJ P,WDICT ;WRITE ONE CHARACTER
406026' 201 01 0 02 000101 MOVEI A,"A"(B)
406027' 260 17 0 00 401222' PUSHJ P,WDICT ;WRITE ANOTHER
406030' 201 02 0 00 400000' MOVEI B,CRLF
406031' 260 17 0 00 406052' PUSHJ P,WRSDCT
406032' 350 00 0 00 000007 AOS Y ;COUNT LINE WRITTEN
406033' 270 10 0 00 406754' LEN.2: ADD Z,[5,,5]
406034' 321 10 0 00 405757' JUMPL Z,LEN.0 ;LOOP
406035' 070 14 0 00 000000 CLOSE DICT,0
406036' 063 14 0 00 740000 IFE TENEX,< STATZ DICT,740000
406037' 254 00 0 00 404116' JRST DDE >
406040' 263 17 0 00 000000 POPJ P,
406041' 201 01 0 00 000000 LCNT: MOVEI A,0 ;COUNT THE NUMBER OF WORDS
406042' 322 06 0 00 406045' LCNT.1: JUMPE X,LCNT.2 ;JUMP IF DONE
406043' 550 06 0 06 000000 HRRZ X,0(X) ;LINK ON.
406044' 344 01 0 00 406042' AOJA A,LCNT.1 ;COUNT 1 AND LOOP
406045' 271 03 0 00 000006 LCNT.2: ADDI C,6 ;NUMBER OF COLUMNS SO FAR
406046' 322 01 0 00 403540' JUMPE A,CPOPJ ;NOTHING IN THIS LIST
406047' 260 17 0 00 406057' PUSHJ P,LCNTD
406050' 400 03 0 00 000000 SETZ C,
406051' 263 17 0 00 000000 POPJ P,
>
SUBTTL THE DEBUG QUEUE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-134
SPELL MAC 17-JAN-79 22:25 THE DEBUG QUEUE
COMMENT $
IF "COUNTS" IS NON ZERO THEN A QUEUE OF THE
LAST 100 LABELS PASSED WILL BE KEPT.
This code is absolutely NOT recommended for use anywhere at all!
$
IFN COUNTS,<
DEBQUE: TRNE FL,NOTRAC ;HERE WITH DEBA SETUP TO STORE A QUEUE ENTRY
POPJ P,
ADD DEBX,[XWD 1,1]
MOVEM DEBA,(DEBX)
JUMPL DEBX,DEBQU1
MOVE DEBX,[XWD %DBT+%DTL,%DBT]
BLT DEBX,%DBT+%DTL-1
MOVE DEBX,[IOWD %DTL,%DBT+%DTL]
DEBQU1: POPJ P,
;HERE TO WRITE THE QUEUE TO A FILE.
QDUMP: MOVEI B,[ASCIZ/
DUMP OF THE QUEUE OF STATEMENTS EXECUTED.
/]
PUSHJ P,WRSDCT
HRRZ C,DEBX ;LAST ADDRESS STORED IN
MOVEI D,%DBT
QDUMP1: MOVE A,(D)
PUSHJ P,OCTPEX
MOVEI B,CRLF
PUSHJ P,WRSDCT
CAMGE D,C
AOJA D,QDUMP1
POPJ P,
;HERE FROM INTCFN TO WRITE A CRASH FILE
CRASH: TRO FL,NOTRAC
PUSHJ P,INDCTO
IFE TENEX,< MOVE K,[SIXBIT/CRASH0/]
CRASH0: MOVSI L,'TRC'
SETZ M,
MOVE N,XPPN
LOOKUP DICT,K
JRST .+2
AOJA K,CRASH0
MOVSI L,'TRC'
SETZ M,
MOVE N,XPPN > ;IFE TENEX
IFN TENEX,< MOVSI A,(1B0!1B16!1B17)
MOVE B,[100,,101]
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-135
SPELL MAC 17-JAN-79 22:25 THE DEBUG QUEUE
GTJFN
0
MOVEM A,3(K) ;K SETUP BY INDCTO >;IFN TENEX
ENTER DICT,K
POPJ P,
JRST DTRACX
IFN STANSW,<XPPN: SIXBIT / SREG/>
IFE STANSW,<XPPN: SIXBIT /DMPREG/>
>
SUBTTL DTRACE,DTRACY TRACE DUMP ROUTINE
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-136
SPELL MAC 17-JAN-79 22:25 DTRACE,DTRACY TRACE DUMP ROUTINE
IFN COUNTS,<
DTRACE: PUSH P,[ENDIT] ;
DTRACY: OUTSTR [ASCIZ/File name for the trace counts: /]
TRO FL,NOTRAC
IFE TENEX,< PUSHJ P,GETFIL
JRST [OUTSTR [ASCIZ/default name is TRACE.DAT
/]
MOVE K,[SIXBIT/TRACE/]
MOVSI L,'DAT'
SETZB M,N
JRST .+1]
PUSHJ P,INDCTO
JRST DTRACY >;IFE TENEX
IFN TENEX,< PUSHJ P,INDCTO
MOVEI K,DICTBF
HRROI L,[ASCIZ/TRACE/]
HRROI M,[ASCIZ/DAT/]
PUSHJ P,GETFIL
JRST .-1 >;IFN TENEX
ENTER DICT,K
JRST [PUSHJ P,ENTFAI
JRST DTRACY]
DTRACX: PUSHJ P,QDUMP
MOVEI B,[ASCIZ/ Statement execution counts
/]
PUSHJ P,WRSDCT
SETZ Y,
DTRA.1: CAIL Y,ICTABX-ICTAB
JRST DTRA.2
MOVE A,Y
PUSHJ P,OCTPEX
MOVEI A,11
PUSHJ P,WDICT
MOVE A,ICTAB(Y)
MOVEI C,0
PUSHJ P,DECPTY
MOVEI B,CRLF
PUSHJ P,WRSDCT
AOJA Y,DTRA.1
DTRA.2: CLOSE DICT,
RELEAS DICT,
POPJ P,
OCTPEX: IDIVI A,10
HRLM B,(P)
JUMPE A,.+2
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-137
SPELL MAC 17-JAN-79 22:25 DTRACE,DTRACY TRACE DUMP ROUTINE
PUSHJ P,OCTPEX
HLRZ A,(P)
ADDI A,"0"
JRST WDICT
>;IFN COUNTS
IFN COUNTS!XCNT<
406052' 505 02 0 00 440700 WRSDCT: HRLI B,(<POINT 7,0>)
406053' 134 01 0 00 000002 WRSDC1: ILDB A,B
406054' 322 01 0 00 403540' JUMPE A,CPOPJ
406055' 260 17 0 00 401222' PUSHJ P,WDICT
406056' 254 00 0 00 406053' JRST WRSDC1
;IF C GT 0, IT TELLS NUMBER OF COLUMNS WITHIN WHICH TO RIGHT JUSTIFY.
406057' LCNTD: ;ENTRY NAME FOR XCNT
406057' 231 01 0 00 000012 DECPTY: IDIVI A,12
406060' 506 02 0 17 000000 HRLM B,(P)
406061' 370 00 0 00 000003 SOS C
406062' 322 01 0 00 406064' JUMPE A,.+2
406063' 260 17 0 00 406057' PUSHJ P,DECPTY
406064' 371 00 0 00 000003 LCNTD1: SOSL C
JRST [MOVEI A," "
PUSHJ P,WDICT
406065' 254 00 0 00 407657' JRST LCNTD1]
406066' 554 01 0 17 000000 HLRZ A,(P)
406067' 271 01 0 00 000060 ADDI A,"0"
406070' 254 00 0 00 401222' JRST WDICT
>
SUBTTL STATS STATISTICS TYPEOUT
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-138
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
;THIS RATHER PEDESTRIAN HUNK OF STRAIGHT-LINE CODE TYPES OUT THE
;STATISTICS OF WORDS PROCESSED, CONTENTS OF DICTIONARIES,
;AND (IF TENEX, BECAUSE I DON'T KNOW THE CALLS IN TEN50)
;TIME USAGE.
406071' 200 01 0 00 010761' STATS: MOVE A,NWA
406072' 322 01 0 00 406076' JUMPE A,STAT1
OUTSTR [ASCIZ/
406073' 051 03 0 00 407662' Accepted (A)/]
406074' 201 03 0 00 000014 MOVEI C,14
406075' 260 17 0 00 404141' PUSHJ P,DECPTX
406076' 200 01 0 00 010762' STAT1: MOVE A,NWR
406077' 322 01 0 00 406103' JUMPE A,STAT1A
OUTSTR [ASCIZ/
406100' 051 03 0 00 407666' Replaced (R)/]
406101' 201 03 0 00 000014 MOVEI C,14
406102' 260 17 0 00 404141' PUSHJ P,DECPTX
406103' 200 01 0 00 010764' STAT1A: MOVE A,NWC
406104' 322 01 0 00 406110' JUMPE A,STAT2
OUTSTR [ASCIZ/
406105' 051 03 0 00 407672' Corrected (C,==>)/]
406106' 201 03 0 00 000010 MOVEI C,10
406107' 260 17 0 00 404141' PUSHJ P,DECPTX
406110' 200 01 0 00 010765' STAT2: MOVE A,NWI
406111' 270 01 0 00 010763' ADD A,NWRI
406112' 322 01 0 00 406116' JUMPE A,STAT3
OUTSTR [ASCIZ/
406113' 051 03 0 00 407676' Inserted (I)/]
406114' 201 03 0 00 000014 MOVEI C,14
406115' 260 17 0 00 404141' PUSHJ P,DECPTX
406116' 200 01 0 00 010761' STAT3: MOVE A,NWA
406117' 270 01 0 00 010762' ADD A,NWR
406120' 270 01 0 00 010764' ADD A,NWC
406121' 270 01 0 00 010765' ADD A,NWI
406122' 322 01 0 00 406132' JUMPE A,STAT4
406123' 202 01 0 00 010766' MOVEM A,NWNR
OUTSTR [ASCIZ/
406124' 051 03 0 00 407702' Total not recognized/]
406125' 201 03 0 00 000005 MOVEI C,5
406126' 260 17 0 00 404141' PUSHJ P,DECPTX
406127' 200 01 0 00 010766' MOVE A,NWNR
406130' 201 03 0 00 000007 MOVEI C,7
406131' 260 17 0 00 404141' PUSHJ P,DECPTX
406132' 200 01 0 00 010767' STAT4: MOVE A,NWAF
406133' 322 01 0 00 406137' JUMPE A,STAT5
OUTSTR [ASCIZ/
406134' 051 03 0 00 407707' Matched by affix-stripping/]
406135' 201 03 0 00 000006 MOVEI C,6
406136' 260 17 0 00 404141' PUSHJ P,DECPTX
406137' 200 01 0 00 010770' STAT5: MOVE A,NWEX
406140' 322 01 0 00 406144' JUMPE A,STAT6
OUTSTR [ASCIZ/
406141' 051 03 0 00 407715' Matched exactly/]
406142' 201 03 0 00 000021 MOVEI C,21
406143' 260 17 0 00 404141' PUSHJ P,DECPTX
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-139
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406144' 200 01 0 00 010766' STAT6: MOVE A,NWNR
406145' 270 01 0 00 010767' ADD A,NWAF
406146' 270 01 0 00 010770' ADD A,NWEX
406147' 322 01 0 00 406153' JUMPE A,STAT7
OUTSTR [ASCIZ/
406150' 051 03 0 00 407721' Total words processed/]
406151' 201 03 0 00 000013 MOVEI C,13
406152' 260 17 0 00 404141' PUSHJ P,DECPTX
406153' STAT7: OUTSTR [ASCIZ/
Dict Words Misspl
406153' 051 03 0 00 407726' /]
406154' 211 04 0 00 000040 MOVNI D,40
406155' 200 01 0 04 010720' STAT7A: MOVE A,NDICTI+40(D)
406156' 270 01 0 04 010760' ADD A,NMISI+40(D)
406157' 322 01 0 00 406172' JUMPE A,STAT8
406160' 201 01 0 04 000040 MOVEI A,40(D)
406161' 201 03 0 00 000004 MOVEI C,4
406162' 260 17 0 00 404141' PUSHJ P,DECPTX
406163' 200 01 0 04 010720' MOVE A,NDICTI+40(D)
406164' 201 03 0 00 000007 MOVEI C,7
406165' 260 17 0 00 404141' PUSHJ P,DECPTX
406166' 200 01 0 04 010760' MOVE A,NMISI+40(D)
406167' 201 03 0 00 000007 MOVEI C,7
406170' 260 17 0 00 404141' PUSHJ P,DECPTX
406171' 051 03 0 00 400000' OUTSTR CRLF
406172' 341 04 0 00 406155' STAT8: AOJL D,STAT7A
406173' 051 03 0 00 407733' OUTSTR [ASCIZ/Total/]
406174' 200 01 0 00 010656' MOVE A,NDICT
406175' 201 03 0 00 000006 MOVEI C,6
406176' 260 17 0 00 404141' PUSHJ P,DECPTX
406177' 200 01 0 00 010760' MOVE A,NMIS
406200' 201 03 0 00 000007 MOVEI C,7
406201' 260 17 0 00 404141' PUSHJ P,DECPTX
406202' 051 03 0 00 400000' OUTSTR CRLF
IFN TENEX,< ;TYPE "USED MM:SS IN MM:SS"
HRROI 1,[ASCIZ/
Used /]
PSOUT
MOVEI 1,400000
RUNTM
IDIV 3,2
PUSH P,3
IDIV 1,2
SUB 1,CPUTIM
MOVE 4,1
MOVEI 1,101
SETZB 2,3
MOVSI 5,(1B0+1B17)
ODTNC
HRROI 1,[ASCIZ/ in /]
PSOUT
POP P,4
SUB 4,REALTM
MOVEI 1,101
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-140
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
ODTNC
HRROI 1,CRLF ;[Tops20]
PSOUT ;[Tops20]
PSOUT > ;[Tops20] END IFN TENEX
406203' 263 17 0 00 000000 POPJ P,
406204' LIT
406204' 010761' 010762'
406205' 777740 777777'
406206' 104 157 040 171 157
406207' 165 040 167 141 156
406210' 164 040 164 157 040
406211' 141 165 147 155 145
406212' 156 164 040 164 150
406213' 145 040 144 151 143
406214' 164 151 157 156 141
406215' 162 171 077 040 000
406216' 116 141 155 145 040
406217' 157 146 040 164 150
406220' 145 040 146 151 154
406221' 145 040 164 157 040
406222' 143 150 145 143 153
406223' 040 141 156 144 040
406224' 143 157 162 162 145
406225' 143 164 072 040 000
406226' 260 17 0 00 404120'
406227' 254 00 0 00 400032'
406230' 106 151 154 145 040
406231' 156 141 155 145 040
406232' 146 157 162 040 143
406233' 157 162 162 145 143
406234' 164 151 157 156 040
406235' 157 165 164 160 165
406236' 164 072 040 000 000
406237' 040 050 103 122 040
406240' 146 157 162 040 056
406241' 102 101 113 051 040
406242' 000 000 000 000 000
406243' 260 17 0 00 404174'
406244' 254 00 0 00 400052'
406245' 015 012 101 156 040
406246' 145 170 143 145 160
406247' 164 151 157 156 040
406250' 146 151 154 145 040
406251' 151 163 040 156 145
406252' 145 144 145 144 056
406253' 040 040 000 000 000
406254' 106 151 154 145 040
406255' 146 157 162 040 145
406256' 170 143 145 160 164
406257' 151 157 156 163 040
406260' 050 157 162 040 103
406261' 122 051 072 040 000
406262' 116 157 040 145 170
406263' 143 145 160 164 151
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-141
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406264' 157 156 040 146 151
406265' 154 145 056 015 012
406266' 000 000 000 000 000
406267' 602 00 0 00 400000
406270' 254 00 0 00 400063'
406271' 051 03 0 00 406262'
406272' 254 00 0 00 400075'
406273' 260 17 0 00 404174'
406274' 254 00 0 00 400063'
406275' 127 157 162 153 151
406276' 156 147 056 056 056
406277' 015 012 000 000 000
406300' 106 151 156 151 163
406301' 150 145 144 056 015
406302' 012 000 000 000 000
406303' 116 157 040 141 144
406304' 144 151 164 151 157
406305' 156 163 040 155 141
406306' 144 145 040 164 157
406307' 040 144 145 146 141
406310' 165 154 164 040 144
406311' 151 143 164 151 157
406312' 156 141 162 171 056
406313' 015 012 000 000 000
406314' 104 157 040 171 157
406315' 165 040 167 141 156
406316' 164 040 164 157 040
406317' 144 165 155 160 040
406320' 164 150 145 040 144
406321' 145 146 141 165 154
406322' 164 040 144 151 143
406323' 164 151 157 156 141
406324' 162 171 040 127 117
406325' 122 104 123 056 104
406326' 111 103 077 040 000
406327' 67 57 62 44 63 00
406330' 124 171 160 145 040
406331' 105 054 123 054 103
406332' 054 101 054 104 054
406333' 111 054 116 054 000
406334' 040 157 162 040 077
406335' 040 000 000 000 000
406336' 00 07 0 02 400144'
406337' 21 01 0 02 400144'
406340' 040 050 122 145 167
406341' 162 151 164 145 163
406342' 040 141 040 146 151
406343' 154 145 041 051 000
406344' 41 03 0 00 002130'
406345' 120 162 157 164 145
406346' 143 164 151 157 156
406347' 040 160 162 145 166
406350' 145 156 164 163 040
406351' 151 156 160 165 164
406352' 040 146 151 154 145
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-142
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406353' 040 162 145 156 141
406354' 155 145 041 015 012
406355' 000 000 000 000 000
406356' 636045 545461
406357' 000004 002135'
406360' 125 156 141 142 154
406361' 145 040 164 157 040
406362' 157 160 145 156 040
406363' 123 120 105 114 114
406364' 121 056 124 115 120
406365' 040 157 156 040 151
406366' 156 160 165 164 040
406367' 163 164 162 165 143
406370' 164 165 162 145 056
406371' 015 012 000 000 000
406372' 33 11 0 00 000013
406373' 33 11 0 00 002124'
406374' 41 03 0 00 000013
406375' 105 162 162 157 162
406376' 040 162 145 156 141
406377' 155 151 156 147 057
406400' 143 154 157 163 151
406401' 156 147 040 146 151
406402' 154 145 163 056 015
406403' 012 105 156 164 145
406404' 162 040 056 103 114
406405' 117 123 105 040 141
406406' 156 144 040 145 170
406407' 141 155 151 156 145
406410' 040 123 120 105 114
406411' 114 121 056 124 115
406412' 120 040 160 154 165
406413' 163 040 151 156 160
406414' 165 164 040 146 151
406415' 154 145 056 015 012
406416' 000 000 000 000 000
406417' 115 157 144 145 040
406420' 163 167 151 164 143
406421' 150 145 163 040 050
406422' 172 145 162 157 040
406423' 157 162 040 155 157
406424' 162 145 040 157 146
406425' 040 124 054 121 054
406426' 116 054 125 054 120
406427' 054 101 054 040 157
406430' 162 040 077 051 072
406431' 040 040 000 000 000
406432' 125 156 162 145 143
406433' 157 147 156 151 172
406434' 145 144 040 163 167
406435' 151 164 143 150 072
406436' 040 000 000 000 000
406437' 056 040 040 124 162
406440' 171 040 141 147 141
406441' 151 156 041 015 012
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-143
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406442' 000 000 000 000 000
406443' 103 141 156 047 164
406444' 040 144 157 040 142
406445' 157 164 150 040 124
406446' 162 141 151 156 151
406447' 156 147 040 141 156
406450' 144 040 121 055 124
406451' 162 141 151 156 151
406452' 156 147 041 040 040
406453' 124 162 171 040 141
406454' 147 141 151 156 041
406455' 015 012 000 000 000
406456' 040 040 104 151 143
406457' 164 151 157 156 141
406460' 162 171 040 156 165
406461' 155 142 145 162 040
406462' 146 157 162 040 165
406463' 160 160 145 162 143
406464' 141 163 145 040 167
406465' 157 162 144 163 072
406466' 040 000 000 000 000
406467' 040 040 117 156 040
406470' 167 150 141 164 040
406471' 160 141 147 145 040
406472' 144 157 040 171 157
406473' 165 040 167 141 156
406474' 164 040 164 157 040
406475' 160 151 143 153 165
406476' 160 077 040 040 000
406477' 040 040 104 145 146
406500' 141 165 154 164 040
406501' 151 163 040 160 141
406502' 147 145 040 061 015
406503' 012 000 000 000 000
406504' 040 040 141 156 144
406505' 040 157 156 040 167
406506' 150 141 164 040 154
406507' 151 156 145 040 144
406510' 157 040 171 157 165
406511' 040 167 141 156 164
406512' 040 164 157 040 163
406513' 164 141 162 164 077
406514' 040 040 000 000 000
406515' 040 040 104 145 146
406516' 141 165 154 164 040
406517' 151 163 040 154 151
406520' 156 145 040 061 015
406521' 012 000 000 000 000
406522' 040 040 104 151 143
406523' 164 151 157 156 141
406524' 162 171 040 156 165
406525' 155 142 145 162 040
406526' 146 157 162 040 165
406527' 156 162 145 143 157
406530' 147 156 151 172 145
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-144
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406531' 144 040 167 157 162
406532' 144 163 072 040 000
406533' 040 167 157 162 144
406534' 163 040 167 145 162
406535' 145 040 141 144 144
406536' 145 144 040 164 157
406537' 040 144 151 143 164
406540' 151 157 156 141 162
406541' 171 040 043 000 000
406542' 054 040 157 146 040
406543' 167 150 151 143 150
406544' 054 015 012 000 000
406545' 040 160 157 163 163
406546' 151 142 154 145 040
406547' 155 151 163 163 160
406550' 145 154 154 151 156
406551' 147 163 040 167 145
406552' 162 145 040 167 162
406553' 151 164 164 145 156
406554' 040 151 156 040 164
406555' 150 145 040 145 170
406556' 143 145 160 164 151
406557' 157 156 040 146 151
406560' 154 145 000 000 000
406561' 056 015 012 000 000
406562' 011121' 011122'
406563' 44 44 0 00 011121'
406564' 011121' 011321'
406565' 35 07 0 00 011122'
406566' 620 00 0 00 040000
406567' 254 00 0 00 403537'
406570' 44 07 0 00 011121'
406571' 350 00 0 00 011604'
406572' 402 00 0 00 011605'
406573' 263 17 0 00 000000
406574' 040 075 040 000 000
406575' 44 05 0 02 000000
406576' 201 01 0 00 000053
406577' 260 17 0 00 401211'
406600' 344 02 0 00 400775'
406601' 000000 000047
406602' 040 075 075 076 040
406603' 000 000 000 000 000
406604' 040 103 157 162 162
406605' 145 143 164 145 144
406606' 040 167 157 162 144
406607' 040 155 141 171 040
406610' 150 141 166 145 040
406611' 163 157 155 145 040
406612' 154 145 164 164 145
406613' 162 163 040 151 156
406614' 040 164 150 145 040
406615' 167 162 157 156 147
406616' 040 143 141 163 145
406617' 040 000 000 000 000
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-145
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406620' 44 44 0 00 011321'
406621' 44 07 0 00 011321'
406622' 44 05 0 00 010776'
406623' 44 07 0 00 011004'
406624' 44 01 0 00 011611'
406625' 201 01 0 00 000047
406626' 254 00 0 00 401262'
406627' 201 01 0 00 000047
406630' 254 00 0 00 401301'
406631' 120 141 147 145 040
406632' 000 000 000 000 000
406633' 072 000 000 000 000
406634' 010776' 010777'
406635' 105 162 162 157 162
406636' 040 055 040 151 156
406637' 160 165 164 040 167
406640' 157 162 144 040 164
406641' 157 157 040 154 157
406642' 156 147 040 055 040
406643' 167 151 154 154 040
406644' 142 145 040 151 147
406645' 156 157 162 145 144
406646' 015 012 000 000 000
406647' 000000 400000'
406650' 103 117 115 115 105
406651' 116 124 040 026 040
406652' 124 126 057 105 040
406653' 144 151 162 145 143
406654' 164 157 162 171 040
406655' 160 141 147 145 040
406656' 167 151 154 154 040
406657' 142 145 040 144 145
406660' 154 145 164 145 144
406661' 056 015 012 120 141
406662' 147 145 040 062 015
406663' 012 000 000 000 000
406664' 125 156 145 170 160
406665' 145 143 164 145 144
406666' 040 145 156 144 040
406667' 157 146 040 146 151
406670' 154 145 040 167 150
406671' 151 154 145 040 163
406672' 153 151 160 160 151
406673' 156 147 040 164 150
406674' 145 040 144 151 162
406675' 145 143 164 157 162
406676' 171 056 015 012 000
406677' 051 03 0 00 406664'
406700' 262 17 0 00 000002
406701' 263 17 0 00 000000
406702' 060 060 060 060 060
406703' 000 000 000 000 000
406704' 010776' 011111'
406705' 000000 011110'
406706' 777760 011070'
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-146
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406707' 777777 777777
406710' 260 17 0 00 402465'
406711' 260 17 0 00 404332'
406712' 254 00 0 00 401651'
406713' 254 00 0 00 401634'
406714' 254 00 0 00 401623'
406715' 302 01 0 00 000023
406716' 254 00 0 00 401651'
406717' 254 00 0 00 402334'
406720' 000000 000005
406721' 000000 000011
406722' 000000 000071
406723' 000000 000045
406724' 010776' 011054'
406725' 011054' 010776'
406726' 010776' 011044'
406727' 777773 011063'
406730' 011044' 010776'
406731' 000003 000003
406732' 344 02 0 00 402677'
406733' 44 05 0 00 000001
406734' 137 01 0 05 402413'
406735' 344 05 0 00 402717'
406736' 000000 002141'
406737' 000600 000071'
406740' 050 00 0 00 000001
406741' 064 00 0 00 000002
406742' 065 00 0 00 000002
406743' 000640 000477'
406744' 000740 001105'
406745' 000700 001513'
406746' 146 151 154 145 040
406747' 156 141 155 145 072
406750' 040 000 000 000 000
406751' 260 17 0 00 404174'
406752' 254 00 0 00 403020'
406753' 000001 000001
406754' 000005 000005
406755' 22 05 0 06 000000
406756' 44 05 0 06 000001
406757' 506 06 0 10 002156'
406760' 542 06 0 10 002156'
406761' 542 06 0 01 000000
406762' 114 157 141 144 151
406763' 156 147 040 144 145
406764' 146 141 165 154 164
406765' 040 144 151 143 164
406766' 151 157 156 141 162
406767' 171 040 127 117 122
406770' 104 123 056 104 111
406771' 103 015 012 000 000
406772' 104 157 040 171 157
406773' 165 040 167 141 156
406774' 164 040 164 157 040
406775' 163 141 166 145 040
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-147
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
406776' 164 150 151 163 040
406777' 143 157 162 145 040
407000' 151 155 141 147 145
407001' 077 040 040 000 000
407002' 015 012 131 157 165
407003' 040 155 165 163 164
407004' 040 154 157 141 144
407005' 040 141 040 144 151
407006' 143 164 151 157 156
407007' 141 162 171 040 146
407010' 151 154 145 056 015
407011' 012 000 000 000 000
407012' 104 151 143 164 151
407013' 157 156 141 162 171
407014' 040 146 151 154 145
407015' 040 156 141 155 145
407016' 072 040 000 000 000
407017' 260 17 0 00 404120'
407020' 254 00 0 00 403334'
407021' 002156' 002157'
407022' 010660' 010661'
407023' 124 171 160 145 040
407024' 042 111 042 040 164
407025' 157 040 155 141 162
407026' 153 040 164 150 145
407027' 163 145 040 141 163
407030' 040 151 156 143 162
407031' 145 155 145 156 164
407032' 141 154 040 151 156
407033' 163 145 162 164 151
407034' 157 156 163 072 040
407035' 000 000 000 000 000
407036' 03 17 15 15 05 16 24 0
407037' 050 124 126 055 105
407040' 040 146 157 162 155
407041' 141 164 040 144 151
407042' 162 145 143 164 157
407043' 162 171 040 160 141
407044' 147 145 040 142 145
407045' 151 156 147 040 163
407046' 153 151 160 160 145
407047' 144 051 015 012 000
407050' 124 150 145 040 167
407051' 157 162 144 040 042
407052' 000 000 000 000 000
407053' 042 040 143 157 162
407054' 162 145 163 160 157
407055' 156 144 163 040 164
407056' 157 040 141 040 153
407057' 156 157 167 156 040
407060' 155 151 163 163 160
407061' 145 154 154 151 156
407062' 147 056 040 040 111
407063' 147 156 157 162 145
407064' 144 056 015 012 000
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-148
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407065' 124 150 145 040 155
407066' 151 163 163 160 145
407067' 154 154 151 156 147
407070' 040 042 000 000 000
407071' 042 040 143 157 162
407072' 162 145 163 160 157
407073' 156 144 163 040 164
407074' 157 040 141 040 153
407075' 156 157 167 156 040
407076' 167 157 162 144 056
407077' 040 040 111 147 156
407100' 157 162 145 144 056
407101' 015 012 000 000 000
407102' 000002 000002
407103' 101 156 040 141 154
407104' 154 145 147 145 144
407105' 040 143 157 162 162
407106' 145 143 164 151 157
407107' 156 054 040 042 000
407110' 042 054 040 143 157
407111' 162 162 145 163 160
407112' 157 156 144 163 040
407113' 164 157 040 141 040
407114' 153 156 157 167 156
407115' 040 155 151 163 163
407116' 160 145 154 154 151
407117' 156 147 056 015 012
407120' 102 157 164 150 040
407121' 151 164 040 141 156
407122' 144 040 151 164 163
407123' 040 155 151 163 163
407124' 160 145 154 154 151
407125' 156 147 040 167 145
407126' 162 145 040 151 147
407127' 156 157 162 145 144
407130' 056 015 012 000 000
407131' 124 150 145 162 145
407132' 040 141 162 145 040
407133' 156 157 167 040 000
407134' 040 167 157 162 144
407135' 163 040 000 000 000
407136' 015 012 040 040 141
407137' 156 144 040 000 000
407140' 040 155 151 163 163
407141' 160 145 154 154 151
407142' 156 147 055 143 157
407143' 162 162 145 143 164
407144' 151 157 156 163 040
407145' 000 000 000 000 000
407146' 151 156 040 164 150
407147' 145 040 144 151 143
407150' 164 151 157 156 141
407151' 162 171 056 015 012
407152' 000 000 000 000 000
407153' 040 053 040 000 000
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-149
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407154' 040 113 040 103 157
407155' 162 145 040 165 163
407156' 145 144 056 015 012
407157' 000 000 000 000 000
407160' 326 05 0 00 404365'
407161' 254 00 0 00 403547'
407162' 104 151 143 164 151
407163' 157 156 141 162 171
407164' 040 145 156 164 162
407165' 171 040 164 157 157
407166' 040 154 157 156 147
407167' 054 040 157 162 040
407170' 151 154 154 145 147
407171' 141 154 072 040 000
407172' 302 01 0 00 000012
407173' 254 00 0 00 403646'
407174' 263 17 0 00 000000
407175' 124 162 171 040 141
407176' 147 141 151 156 072
407177' 040 000 000 000 000
407200' 44 06 0 00 000002
407201' 111 114 114 105 107
407202' 101 114 040 103 110
407203' 101 122 101 103 124
407204' 105 122 040 042 000
407205' 042 040 117 103 103
407206' 125 122 105 104 040
407207' 111 116 040 123 103
407210' 101 116 000 000 000
407211' 040 127 110 111 114
407212' 105 040 111 116 040
407213' 121 125 117 124 105
407214' 040 115 117 104 105
407215' 000 000 000 000 000
407216' 104 105 126 111 103
407217' 105 040 104 101 124
407220' 101 040 105 122 122
407221' 117 122 040 050 117
407222' 125 124 120 125 124
407223' 051 015 012 000 000
407224' 106 111 114 105 040
407225' 116 117 124 040 106
407226' 117 125 116 104 056
407227' 040 104 123 113 072
407230' 000 000 000 000 000
407231' 104 105 126 111 103
407232' 105 040 000 000 000
407233' 072 040 103 117 125
407234' 114 104 040 116 117
407235' 124 040 102 105 040
407236' 117 120 105 116 105
407237' 104 056 015 012 000
407240' 102 125 106 106 105
407241' 122 040 123 111 132
407242' 105 040 106 117 122
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-150
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407243' 040 104 105 126 111
407244' 103 105 040 000 000
407245' 072 040 105 130 103
407246' 105 105 104 123 040
407247' 123 120 101 103 105
407250' 040 101 114 114 117
407251' 103 101 124 105 104
407252' 056 040 040 103 110
407253' 101 116 107 105 040
407254' 104 102 106 123 111
407255' 132 040 101 116 104
407256' 040 122 105 101 123
407257' 123 105 115 102 114
407260' 105 015 012 000 000
407261' 000000 000040
407262' 051 01 0 00 407261'
407263' 254 00 0 00 404146'
407264' 111 116 123 125 106
407265' 106 111 103 111 105
407266' 116 124 040 103 117
407267' 122 105 040 101 126
407270' 101 111 114 101 102
407271' 114 105 056 040 111
407272' 040 107 111 126 105
407273' 040 125 120 015 012
407274' 000 000 000 000 000
407275' 125 156 141 142 154
407276' 145 040 164 157 040
407277' 167 162 151 164 145
407300' 040 151 156 040 150
407301' 151 147 150 040 163
407302' 145 147 155 145 156
407303' 164 015 012 000 000
407304' 105 156 164 145 162
407305' 040 146 141 151 154
407306' 145 144 040 157 156
407307' 072 040 000 000 000
407310' 104 105 126 111 103
407311' 105 040 105 122 122
407312' 117 122 040 050 111
407313' 116 120 125 124 051
407314' 015 012 000 000 000
407315' 114 151 156 145 040
407316' 145 170 143 145 145
407317' 144 163 040 000 000
407320' 040 143 150 141 162
407321' 141 143 164 145 162
407322' 163 056 015 012 131
407323' 157 165 040 163 150
407324' 157 165 154 144 040
407325' 145 144 151 164 040
407326' 164 150 145 040 151
407327' 156 160 165 164 040
407330' 146 151 154 145 056
407331' 040 040 103 150 145
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-151
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407332' 143 153 151 156 147
407333' 057 143 157 162 162
407334' 145 143 164 151 156
407335' 147 040 141 142 157
407336' 162 164 145 144 056
407337' 015 012 000 000 000
407340' 015 012 111 156 164
407341' 145 162 156 141 154
407342' 040 143 157 156 146
407343' 165 163 151 157 156
407344' 040 151 156 040 164
407345' 150 145 040 163 160
407346' 145 154 154 151 156
407347' 147 040 143 150 145
407350' 143 153 145 162 056
407351' 040 040 103 141 154
407352' 154 145 144 040 146
407353' 162 157 155 040 154
407354' 157 143 141 164 151
407355' 157 156 072 040 040
407356' 000 000 000 000 000
407357' 015 012 131 157 165
407360' 040 155 141 171 040
407361' 143 157 156 164 151
407362' 156 165 145 054 040
407363' 167 151 164 150 040
407364' 144 157 165 142 164
407365' 146 165 154 040 162
407366' 145 163 165 154 164
407367' 163 056 056 056 056
407370' 015 012 000 000 000
407371' 000000 000056
407372' 000000 000133
407373' 000000 000054
407374' 000000 000135
407375' 060 040 114 105 116
407376' 107 124 110 040 127
407377' 117 122 104 040 101
407400' 124 040 110 101 123
407401' 110 103 120 000 000
407402' 051 03 0 00 407375'
407403' 263 17 0 00 000000
407404' 37 05 0 00 010776'
407405' 32 05 0 00 010776'
407406' 110 101 123 110 111
407407' 116 107 040 105 122
407410' 122 117 122 015 012
407411' 000 000 000 000 000
407412' 37 05 0 06 000001
407413' 111 040 147 165 145
407414' 163 163 072 040 000
407415' 050 000 000 000 000
407416' 040 147 165 145 163
407417' 163 145 163 051 015
407420' 012 000 000 000 000
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-152
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407421' 052 000 000 000 000
407422' 077 015 012 000 000
407423' 124 171 160 145 040
407424' 164 150 145 040 143
407425' 141 163 145 040 157
407426' 146 040 145 141 143
407427' 150 040 154 145 164
407430' 164 145 162 040 145
407431' 170 141 143 164 154
407432' 171 040 141 163 040
407433' 171 157 165 040 167
407434' 141 156 164 040 151
407435' 164 056 040 040 000
407436' 122 145 160 154 141
407437' 143 145 040 167 151
407440' 164 150 072 040 000
407441' 010776' 011020'
407442' 254 00 0 00 404731'
407443' 620 01 0 00 000040
407444' 254 00 0 00 404725'
407445' 124 171 160 145 040
407446' 042 111 042 040 164
407447' 157 040 151 156 163
407450' 145 162 164 040 164
407451' 150 151 163 040 162
407452' 145 160 154 141 143
407453' 145 155 145 156 164
407454' 040 151 156 040 164
407455' 150 145 040 144 151
407456' 143 164 151 157 156
407457' 141 162 171 072 040
407460' 000 000 000 000 000
407461' 011020' 010776'
407462' 122 145 160 154 141
407463' 143 145 144 040 142
407464' 171 072 040 000 000
407465' 124 150 145 040 167
407466' 157 162 144 040 171
407467' 157 165 040 164 171
407470' 160 145 144 040 151
407471' 163 040 141 040 155
407472' 151 163 163 160 145
407473' 154 154 151 156 147
407474' 040 157 146 040 042
407475' 000 000 000 000 000
407476' 042 056 015 012 124
407477' 171 160 145 040 042
407500' 131 042 040 151 146
407501' 040 171 157 165 040
407502' 162 145 141 154 154
407503' 171 040 167 151 163
407504' 150 040 164 157 040
407505' 165 163 145 040 151
407506' 164 040 141 163 040
407507' 164 150 145 040 162
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-153
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407510' 145 160 154 141 143
407511' 145 155 145 156 164
407512' 072 040 000 000 000
407513' 44 05 0 06 000000
407514' 103 157 162 162 145
407515' 143 164 145 144 040
407516' 164 157 072 040 000
407517' 124 171 160 145 040
407520' 103 054 136 054 074
407521' 141 154 164 155 157
407522' 144 145 076 054 074
407523' 143 162 076 040 157
407524' 162 040 077 015 012
407525' 000 000 000 000 000
407526' 015 012 052 000 000
407527' 103 141 156 047 164
407530' 040 147 145 164 040
407531' 164 150 145 162 145
407532' 040 146 162 157 155
407533' 040 150 145 162 145
407534' 056 015 012 000 000
407535' 077 000 000 000 000
407536' 124 150 157 163 145
407537' 040 141 162 145 040
407540' 141 154 154 040 164
407541' 150 145 040 143 150
407542' 157 151 143 145 163
407543' 056 015 012 000 000
407544' 015 012 131 157 165
407545' 040 150 141 166 145
407546' 040 164 150 145 040
407547' 146 157 154 154 157
407550' 167 151 156 147 040
407551' 157 160 164 151 157
407552' 156 163 072 015 012
407553' 000 000 000 000 000
407554' 051 03 0 00 405341'
407555' 254 00 0 00 405360'
407556' 261 17 0 00 000010
407557' 370 10 0 00 011526'
407560' 200 10 0 10 011527'
407561' 202 10 0 07 011526'
407562' 262 17 0 00 000010
407563' 254 00 0 00 405363'
407564' 104 151 143 164 151
407565' 157 156 141 162 171
407566' 040 156 165 155 142
407567' 145 162 040 164 157
407570' 157 040 154 141 162
407571' 147 145 056 040 115
407572' 141 170 151 155 165
407573' 155 040 151 163 040
407574' 063 061 056 040 015
407575' 012 104 151 143 164
407576' 151 157 156 141 162
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-154
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407577' 171 040 156 165 155
407600' 142 145 162 072 040
407601' 040 000 000 000 000
407602' 44 05 0 00 011054'
407603' 261 17 0 00 000001
407604' 134 01 0 00 000003
407605' 271 04 0 00 000001
407606' 136 01 0 00 000002
407607' 262 17 0 00 000001
407610' 254 00 0 00 405610'
407611' 124 171 160 145 040
407612' 131 040 164 157 040
407613' 146 154 165 163 150
407614' 040 164 150 145 040
407615' 155 151 163 163 160
407616' 145 154 154 151 156
407617' 147 163 072 040 000
407620' 123 123 101 126 105
407621' 040 164 150 151 163
407622' 040 143 157 162 145
407623' 040 151 155 141 147
407624' 145 054 040 164 150
407625' 145 156 040 162 145
407626' 163 164 141 162 164
407627' 040 164 150 145 040
407630' 160 162 157 147 162
407631' 141 155 056 015 012
407632' 000 000 000 000 000
407633' 123 120 105 114 114
407634' 056 104 101 124 040
407635' 105 116 124 105 122
407636' 040 106 101 111 114
407637' 105 104 056 000 000
407640' 636045 545400
407641' 040 040 040 040 040
407642' 062 040 040 040 040
407643' 040 063 040 040 040
407644' 040 040 064 040 040
407645' 040 040 040 065 040
407646' 040 040 040 040 066
407647' 040 040 040 040 040
407650' 067 040 040 040 040
407651' 040 070 000 000 000
407652' 040 040 040 040 040
407653' 071 040 040 040 040
407654' 061 060 040 040 040
407655' 040 061 061 053 015
407656' 012 015 012 000 000
407657' 201 01 0 00 000040
407660' 260 17 0 00 401222'
407661' 254 00 0 00 406064'
407662' 015 012 101 143 143
407663' 145 160 164 145 144
407664' 040 040 050 101 051
407665' 000 000 000 000 000
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-155
SPELL MAC 17-JAN-79 22:25 STATS STATISTICS TYPEOUT
407666' 015 012 122 145 160
407667' 154 141 143 145 144
407670' 040 040 050 122 051
407671' 000 000 000 000 000
407672' 015 012 103 157 162
407673' 162 145 143 164 145
407674' 144 040 050 103 054
407675' 075 075 051 000 000
407676' 015 012 111 156 163
407677' 145 162 164 145 144
407700' 040 040 050 111 051
407701' 000 000 000 000 000
407702' 015 012 124 157 164
407703' 141 154 040 156 157
407704' 164 040 162 145 143
407705' 157 147 156 151 172
407706' 145 144 000 000 000
407707' 015 012 115 141 164
407710' 143 150 145 144 040
407711' 142 171 040 141 146
407712' 146 151 170 055 163
407713' 164 162 151 160 160
407714' 151 156 147 000 000
407715' 015 012 115 141 164
407716' 143 150 145 144 040
407717' 145 170 141 143 164
407720' 154 171 000 000 000
407721' 015 012 124 157 164
407722' 141 154 040 167 157
407723' 162 144 163 040 160
407724' 162 157 143 145 163
407725' 163 145 144 000 000
407726' 015 012 015 012 104
407727' 151 143 164 040 040
407730' 127 157 162 144 163
407731' 040 115 151 163 163
407732' 160 154 015 012 000
407733' 124 157 164 141 154
407734' 000 000 000 000 000
SUBTTL SOME OF THE STORAGE STUFF
PAGE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-156
SPELL MAC 17-JAN-79 22:25 SOME OF THE STORAGE STUFF
000000' IFE TENEX,< RELOC 0> ;LOW SEGMENT. MDA 790112
000040 PDLEN==40 ;LENGTH OF PDL
000200 LINSIZ==200 ;LENGTH OF LINE BUFFER
000050 CNBFSZ==50 ;LENGTH OF CANDBF
000005 PRELEN==5 ;LENGTH OF PREFIX STACK
000020 SUFLEN==20 ;LENGTH OF SUFFIX STACK
000000' PDLIST: BLOCK PDLEN ;PUSH DOWN LIST STORAGE
000040' PATCH1: BLOCK 10
000050' PATCH2: BLOCK 10
000060' PATCH3: BLOCK 10 ;"PATCHES, I'LL ALWAYS BE TRUE..."
IFE TENEX,< ;DEC AND STANFORD BUFFERS ARE PLACED HERE.
000070' QMODE: BLOCK 1 ;FILE SCANNER FLAG
000071' DICTFF: BLOCK DBFSIZ*BUFFNO
000477' DATAFF: BLOCK DBFSIZ*BUFFNO
001105' EXCPFF: BLOCK DBFSIZ*BUFFNO
001513' CORRFF: BLOCK DBFSIZ*BUFFNO
002121' BAKFLG: BLOCK 1 ;FLAG FOR CREATION OF .BAK OF INPUT
002122' CORBLK: BLOCK 4 ;LOOKUP BLOCK FROM OUTPUT FILE
002126' INBLK: BLOCK 4 ;LOOKUP BLOCK FROM INPUT FILE
002132' 000000 000014 DUMBLK: 14 ;OPEN BLOCK
002133' 44 63 53 00 00 00 SIXBIT/DSK/ ;TO DELETE BAK FILE
002134' 000000 000000 0
002135' DEVBLK: BLOCK 4 ;BLOCK FOR OBTAINING DEVICE OF INPUT FILE
>;IFE TENEX
002141' DICTBF: BLOCK HDRSIZ
002144' DATABF: BLOCK HDRSIZ
002147' EXCPBF: BLOCK HDRSIZ
002152' CORRBF: BLOCK HDRSIZ
002155' UCASE: BLOCK 1 ;DICTIONARY NUMBER TO ADD UPPERCASE INTO.
006464 HASHTL==32*32*5 ;26*26*10/2
002156' HASHTB: BLOCK HASHTL ;"Ugh!"
010642' BTABLE: BLOCK 12 ;10. CHAINS PER LETTER PAIR
010654' HEAPSZ: BLOCK 1 ;TEMP CELL FOR DICTIONARY MERGE
010655' LISTFF: BLOCK 1 ;FIRST FF FOR LIST STRUCTURES.
010656' 000000 000000 NDICT: 0 ;TOTAL #WDS IN DICT, 0 AT LOAD TIME
010657' 000000 000000 NDICT1: 0 ;# WORDS IN DICT 1 AT START
010660' NDICTI: BLOCK 40 ;# WORDS IN INDIVIDUAL DICTS
010720' NMISI: BLOCK 40 ;# MISSPELLINGS IN INDIVIDUAL DICTS
010760' 000000 000000 NMIS: 0 ;TOTAL # OF MISSPELLINGS
010761' 000000 000000 NWA: 0 ;#WDS ACCEPTED
010762' 000000 000000 NWR: 0 ;#WDS REPLACED
010763' 000000 000000 NWRI: 0 ;#WDS INSERTED AFTER REPLACED
010764' 000000 000000 NWC: 0 ;#WDS CORRECTED
010765' 000000 000000 NWI: 0 ;#WDS INSERTED
010766' 000000 000000 NWNR: 0 ;#WDS NOT RECOGNIZED
010767' 000000 000000 NWAF: 0 ;#WDS MATCHED VIA AFFIX-STRIPPING
010770' 000000 000000 NWEX: 0 ;#WDS MATCHED EXACTLY
010771' 000000 000000 REALTM: 0 ;CLOCK TIME AT START OF SESSION
010772' 000000 000000 CPUTIM: 0 ;CPU TIME AT START OF SESSION
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-157
SPELL MAC 17-JAN-79 22:25 SOME OF THE STORAGE STUFF
010773' 000000 000000 TRDNUM: 0 ;DICT# FOR TRAINING SET
010774' 000000 000000 NTRDCT: 0 ;#WDS IN TRAINING DICT AT START
010775' 000000 000000 NQTRN: 0 ;NUMBER OF Q-TRAINING WORDS WRITTEN OUT
010776' WORDIN: BLOCK 6 ;5BIT
011004' WORDIX: BLOCK 13 ;7BIT (MUST FOLLOW WORDIN)
011017' LETCNT: BLOCK 1 ;COUNT OF LETTERS (OMITTING APOS) SEEN IN LDWORD
011020' REPLIN: BLOCK 21 ;SAVE WORDIN+WORDIX DURING REPLACE
011041' REPLW: BLOCK 1 ;SAVE W DURING REPLACEMENT
011042' RPLXCT: BLOCK 1 ;INSTR TO XCT DURING REPLACE COMMAND
011043' RPLXC1: BLOCK 1 ;INSTR TO XCT DURING REPLACE COMMAND
011044' PREWD: BLOCK 6 ;STORAGE FOR PREFIX REMOVAL
011052' PREW: BLOCK 1
011053' PREPTR: BLOCK 1
011054' SVWDWX: BLOCK 6 ;STORAGE FOR SUFFIX REMOVAL AND CORRECTION HEURISTICS
011062' SVWDLN: BLOCK 1
011063' STEM: BLOCK 1 ;POINTS TO WORD (STEM) FOUND IN DICTIONARY
011064' PRESTK: BLOCK PRELEN ;HOLDS STRIPPED PREFIXES
011071' SUFSTK: BLOCK SUFLEN ;HOLDS STRIPPED SUFFIX LETTERS
011111' RECON: BLOCK 6 ;STORAGE FOR RECONS
011117' WWLEN: BLOCK 1
011120' TVE: BLOCK 1
011121' LIBUF: BLOCK LINSIZ
011321' LOBUF: BLOCK LINSIZ
011521' INPTR: BLOCK 1
011522' OUTPTR: BLOCK 1
011523' INPTR1: BLOCK 1
011524' LSTBPY: BLOCK 1
011525' INITMP: BLOCK 1
011526' CANDID: BLOCK 1
011527' CANDBF: BLOCK CNBFSZ ;HOLDS ADDRESS OF CORRECTED WORD. POINTS TO TEXT!
IFN STANSW,<
SAVEFL: 0
CPXCHR: 0
DDDCOL: 0
DPYHDR: 200000,,DPYBUF ;POINTER TO DISPLAY BUFFER. FOR DD, DOUBLE FIELD MODE.
DPYSIZ: 0 ;LENGTH OF DISPLAY BUFFER IS STORED HERE
DDDONE: 0 ;FOR DD, TELLS WHEN TRANSFER IS DONE (IF OVERLAPPED)
DDPNTR: DPYBUF+1 ;POINTER TO COMMAND WORD CONTAINING LOW ORDER LINE SEL.
DPYLEN==1000 ;MAXIMUM LENGTH OF DISPLAY BUFFER
DPYBUF: BLOCK DPYLEN ;BUFFER FOR DISPLAY PROGRAM
>
011577' TLET.1: BLOCK 1
011600' TLET.2: BLOCK 1
011601' X1BYPT: BLOCK 1
011602' SAVEXS: BLOCK 1
011603' CANDBX: BLOCK 1
011604' PAGENO: BLOCK 1 ;PAGE NUMBER IN INPUT FILE
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE 1-158
SPELL MAC 17-JAN-79 22:25 SOME OF THE STORAGE STUFF
011605' LINENO: BLOCK 1 ;LINE NUMBER IN INPUT FILE
011606' IDNUM: BLOCK 1 ;NUMBER OF DICTIONARY TO SAVE IN
011607' PICKPG: BLOCK 1 ;PAGE ON WHICH TO TERMINATE PICKUP MODE
011610' PICKLN: BLOCK 1 ;LINE ON WHICH TO TERMINATE PICKUP MODE
011611' CASEBT: BLOCK 2
011613' CASEPT: BLOCK 1
IFG COUNTS,< ICTAB: BLOCK %QXX+1
ICTABX: BLOCK 1
%DTL==62
%DBT: BLOCK 2*%DTL ;QUEUE FOR TRACE OF EXECUTION>
IFN TENEX,<
TNXEOL: BLOCK 1 ;[Tops20] SET TO -1 IF RUNNING ON TOPS20, ELSE 37
UUOHX: BLOCK 1 ;JSYS WILL STORE PC HERE, JUMP TO UUOH
NTTYCH: BLOCK 1
TTYLIN: BLOCK 30 ;HOLDS TTY INPUT LINE.
DEFALT: .-.,,0 ;FLAGS,,DEFAULT VERSION FOR GETJFN
100,,101 ;PRIMARY IO
0 ;USE SYSTEM DEFAULT DEVICE DSK:
0 ;USE SYSTEM DEFAULT DIRECTORY (CONNECTED ONE)
.-. ;DEFAULT FILE NAME
.-. ;DEFAULT FILE EXTENSION
0 ;USE SYSTEM DEFAULT ACCOUNT
0 ;USE SYSTEM DEFAULT PROTECTION
0 ;NO SPECIAL JFN NUMBER. >
400001' END START
NO ERRORS DETECTED
HI-SEG. BREAK IS 407777
PROGRAM BREAK IS 011614
CPU TIME USED 01:26.594
9K CORE USED
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE S-1
SPELL MAC 17-JAN-79 22:25 SYMBOL TABLE
A 000001 CONVA2 401301' DMPDEF 400107' ENHEP2 403163'
A5 000001 SPD CONVR1 401252' DOBAK 400323' ENHEP3 403165'
ADDBIT 000200 SPD CONVR2 401262' DODM1A 403046' ENTFAI 404174'
ADDING 401041' CONVRA 401267' DODM1B 403055' ERLENG 405744'
ADDLST 402500' CONVRT 401243' DODM2A 403067' ERRLIN 000010 SPD
AMODE 000001 SPD CONVRZ 401244' DODMP0 403032' ESC 000033 SPD
APOS 000033 SPD COPY5 401051' DODMP1 403036' ESPLUR 401756'
ASKP 400447' COPYI1 401232' DODMP2 403065' EXCP 000017 SPD
ASKQT 400467' COPYIO 401231' DODMP8 403103' EXCPBF 002147'
ASKU 400442' CORBLK 002122' DOEXIT 400254' EXCPFF 001105'
ASTART 400006' CORCK1 404467' DOMIS1 401140' EXIT 047000 000012
B 000002 CORE 047000 000011 DOMISS 401110' F5 000006 SPD
B5 000002 SPD CORECK 404466' DRD 000000 SPD FF 000014 SPD
BAKERR 400366' CORR 000016 SPD DUM 000011 SPD FL 000000
BAKFLG 002121' CORR.N 405142' DUMBLK 002132' FLOOP 400543'
BEGIN0 400022' CORR.Q 405136' DUMPD 403016' FLOOP1 400555'
BEGIN1 400032' CORR.U 405133' DUMPD1 403020' FLOOP2 400563'
BEGIN2 400052' CORR.X 405140' E5 000005 SPD FLOOP3 400602'
BEGIN3 400063' CORRBF 002152' EDT.C 402105' FLOOP4 400603'
BEGIN5 400075' CORRFF 001513' EDT.C1 402125' FLUTT1 404155'
BEGN3A 400062' CORRS1 405076' EDT.CC 402053' FLUTT2 404166'
BGIN02 400031' CORRS2 405101' EDT.D 402034' FLUTTY 404154'
BLANK 403702' CORRSL 405074' EDT.ED 402074' FNOTFM 404120'
BTABLE 010642' CORRTB 405123' EDT.EN 402207' FRSTOP 000001 SPD
BUFFNO 000002 SPD CORTLN 000010 SPD EDT.ES 401751' G5 000007 SPD
BUFTBG 404126' COUNTS 000000 SPD EDT.G 401773' GETCOR 404475'
C 000003 CPOPJ 403540' EDT.H 402131' GETEC1 400662'
C5 000003 SPD CPOPJ1 403537' EDT.LY 402273' GETEC2 400704'
CANDBF 011527' CPOPJ2 404365' EDT.N 402141' GETFIL 403613'
CANDBX 011603' CPUTIM 010772' EDT.R 402034' GETLBT 402412'
CANDID 011526' CR 000015 SPD EDT.S 401676' GETLCH 051300 000000
CASEBT 011611' CRLF 400000' EDT.S1 401732' GETLIN 400604'
CASEPT 011613' CTION 402203' EDT.S2 401745' GETLN1 400616'
CHKL1A 400717' CVTY1 405150' EDT.SS 402331' GETLN2 400623'
CHKL3A 400743' D 000004 EDT.T 402031' GETLN3 400631'
CHKL3B 400735' D.END 400263' EDT.Y 402220' GETLTC 400653'
CHKL3C 400754' D5 000004 SPD END.E 402360' GETSIX 403663'
CHKL3D 401061' DATA 000015 SPD ENDCMD 400144' GETSX1 403666'
CHKL3E 400751' DATABF 002144' ENDFIX 401630' GETSX2 403674'
CHKLIN 400706' DATAFF 000477' ENDFRT 401637' GETSX3 403675'
CHKLN1 400707' DBFSIZ 000203 SPD ENDHLP 400155' GETTEC 400655'
CHKLN2 400721' DDE 404116' ENDHM1 400162' H5 000010 SPD
CHKLN3 400730' DECPB 401324' ENDHM2 400201' HASHC0 404303'
CHKLN5 401076' DECPT1 404146' ENDHM3 400243' HASHC1 404311'
CHRTAB 403716' DECPTR 404132' ENDIT 400123' HASHCP 404273'
CKTEC0 401561' DECPTX 404141' ENDLY1 402304' HASHER 404330'
CKTEC4 401575' DECPTY 406057' ENDMSP 401634' HASHTB 002156'
CKTEC8 401565' DELIM 403701' ENDSR1 401636' HASHTL 006464 SPD
CKTEC9 401543' DEVBLK 002135' ENDSRT 401623' HDRSIZ 000003 SPD
CKTECO 401525' DEVSIZ 047000 000101 ENDSS 402334' HEAPSZ 010654'
CLRBFI 051440 000000 DICT 000014 SPD ENDTG. 401646' HELMG1 405322'
CLRZA 401014' DICTBF 002141' ENDTGO 401651' HELMGC 405341'
CNBFSZ 000050 SPD DICTFF 000071' ENDTST 401640' HELMGS 405332'
CNVRTY 405147' DIE 404176' ENHEAP 403150' HELMS2 405157'
CONVA1 401270' DMPD1A 403023' ENHEP1 403151' HELMSG 405216'
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE S-2
SPELL MAC 17-JAN-79 22:25 SYMBOL TABLE
HELMSZ 405352' LDWR1A 401376' LOVFLW 404200' PATCH2 000050'
HLPOUT 405360' LDWR6A 401433' LOWER 000004 SPD PATCH3 000060'
HSHER1 404326' LDWRD1 401347' LSTBPY 011524' PATH. 047000 000110
HSHER2 404324' LDWRD2 401377' M 000013 PCOPY 401000'
I.END 400256' LDWRD3 401422' M5 000015 SPD PDLEN 000040 SPD
I5 000011 SPD LDWRD4 401424' MACRO 000001 SPD PDLIST 000000'
IDMPD 403014' LDWRD5 401417' MATCH 404332' PDONE 401004'
IDMPD1 403013' LDWRD6 401431' MISFL1 403263' PERLIN 401101'
IDNUM 011606' LDWRD7 401440' MISFLU 403257' PERLN1 401107'
IDUMP 000400 SPD LDWRD8 401447' MISSPL 000040 SPD PICKLN 011610'
ILLEG 403704' LDWRD9 401452' MISSU1 403303' PICKPG 011607'
INBLK 002126' LDWRDX 401454' MISSUB 403273' PICKUP 040000 SPD
INCHRS 051100 000000 LDWRX1 401460' MIXED 000002 SPD PLOOP 400775'
INCHRW 051000 000000 LDWRX2 401466' MODE 000014 SPD PPAGE 401305'
INCHWL 051200 000000 LDWRX3 401501' N 000014 PPAGE1 401321'
INCORR 403007' LEFT 000004 SPD N.END 400265' PPNMUL 000010 SPD
INDATA 402777' LEN.0 405757' N5 000016 SPD PPNSC1 403654'
INDCTO 402742' LEN.1 405766' NDICT 010656' PPNSCN 403653'
INDEC 401601' LEN.2 406033' NDICT1 010657' PREAGN 402621'
INDEC1 401602' LENGTH 405746' NDICTI 010660' PREFIX 402612'
INDICT 402741' LETCNT 011017' NENDC 000010 SPD PRELEN 000005 SPD
INEXCP 403003' LF 000012 SPD NMIS 010760' PREMOR 402667'
INIALL 402745' LIBUF 011121' NMISI 010720' PREMSP 402647'
INITMP 011525' LINENO 011605' NOCORE 404170' PREPTR 011053'
INPTR 011521' LINSIZ 000200 SPD NOCORR 000100 SPD PRERES 402654'
INPTR1 011523' LISTFF 010655' NODEV 404122' PRESR1 402651'
INSERT 404401' LITSR1 403202' NOEXCP 000200 SPD PRESRT 402645'
INSRT1 404455' LITSR2 403212' NOPRE 402664' PRESTK 011064'
INSRT2 404402' LITSR3 403223' NOPREF 020000 SPD PRESUF 402660'
INSRT3 404440' LITSR4 403230' NOSUFF 010000 SPD PRETAB 402573'
INSRT4 404443' LITSRT 403175' NOTRAC 004000 SPD PREW 011052'
INSRT5 404375' LOAD.0 403362' NOWRIT 404172' PREWD 011044'
INSRT6 404426' LOAD.1 403334' NPRE 000017 SPD PREWIN 002000 SPD
INSRTM 404370' LOAD.2 403404' NQTRN 010775' PRLOOP 402622'
INTCFN 404207' LOAD.3 403422' NSWCH 000011 SPD PRNT0 403116'
ISC2 402534' LOAD.4 403400' NTRDCT 010774' PRNT1 403120'
ISCONS 402512' LOAD.5 403370' NTRYCM 000012 SPD PRNT2 403127'
ISSTEM 402552' LOAD.6 403472' NWA 010761' PRNT3 403136'
ISVOWL 402526' LOAD.7 403355' NWAF 010767' PRNTON 403113'
ITOY 401720' LOAD1A 403306' NWC 010764' PUTLIN 401146'
ITOY1 401715' LOAD1B 403337' NWEX 010770' PUTLN1 401153'
J5 000012 SPD LOAD3A 403453' NWI 010765' PUTLN2 401162'
K 000011 LOAD3B 403435' NWNR 010766' PUTLN3 401163'
K5 000013 SPD LOAD3C 403450' NWR 010762' Q5 000021 SPD
L 000012 LOAD3Y 403457' NWRI 010763' QMODE 000070'
L5 000014 SPD LOAD3Z 403467' O5 000017 SPD QSET 403665'
LCNT 406041' LOAD6A 403504' OCTPTR 404221' QTRAIN 400000 SPD
LCNT.1 406042' LOADER 403317' ODD 000010 SPD R5 000022 SPD
LCNT.2 406045' LOADEX 403331' OUTCHR 051040 000000 RDATA1 401522'
LCNTD 406057' LOBUF 011321' OUTPTR 011522' RDCTW1 403554'
LCNTD1 406064' LOD.2A 403407' OUTSTR 051140 000000 RDCTW2 403561'
LCOMP 403233' LOD.2B 403413' P 000017 RDCTW3 403567'
LCOMP0 403236' LOD.2C 403415' P5 000020 SPD RDCTW4 403601'
LCOMP1 403240' LOD.4A 403431' PAGENO 011604' RDCTW5 403604'
LDWORD 401334' LOOP 400536' PATCH1 000040' RDCTW6 403562'
SPELL I HAVE YOU UNDER MY SPELL MACRO %52(551) 17:17 13-MAR-79 PAGE S-3
SPELL MAC 17-JAN-79 22:25 SYMBOL TABLE
RDCTW7 403573' SCNERR 403646' TENEX 000000 SPD WRCORR 401171'
RDDATA 401511' SEARCH 404333' TLET.1 011577' WREXCP 401211'
RDDICT 403521' SERCH2 404352' TLET.2 011600' WRLET 401046'
RDICT1 403530' SERCH3 404346' TOPS20 000000 SPD WRSDC1 406053'
RDICT2 403541' SET1 402506' TRAIN 200000 SPD WRSDCT 406052'
RDICTW 403547' SETBAK 400271' TRDNUM 010773' WRSEX0 401205'
REALTM 010771' SETBK2 400321' TRFQDO 404641' WRSEXC 401202'
RECON 011111' SETLO2 400465' TRFXR1 405050' WWLEN 011117'
RECON1 402677' SETLST 402502' TRFXR2 405063' X 000006
RECON2 402702' SETNM0 405401' TRFXR3 405065' X1BYPT 011601'
RECON3 402706' SETNM1 405402' TRFXR4 405071' X1EXL 405535'
RECON4 402711' SETNM3 405405' TRYACM 404615' X1EXL1 405541'
RECON5 402715' SETNUM 405406' TRYCCM 404634' X1EXL2 405547'
RECON6 402717' SETPG1 400456' TRYCMD 404567' X1EXL3 405566'
RECON7 402727' SHUTUP 100000 SPD TRYFBA 404532' X1LMS 405627'
RECON8 402732' SOSCVT 401611' TRYFBB 404543' X1LMS1 405632'
RECON9 402735' SPDONE 400771' TRYFBD 404550' X1LMS2 405640'
RECONS 402672' SR1WL 405455' TRYFBE 404554' X1LMS3 405667'
RENAM1 400354' SR1WL1 405473' TRYFBW 404564' X1LMS4 405676'
REPCK 405363' SR1WL3 405507' TRYFBX 404551' X1LMS5 405707'
REPK1 405367' SR1WL4 405517' TRYFBY 404563' X1LMS6 405715'
REPK2 405370' SR1WLT 405526' TRYFBZ 404547' X1LMS7 405726'
REPL.1 404703' SRWL1A 405505' TRYFIX 404504' X1SRC2 405423'
REPL.2 404737' SRWL2A 405522' TRYICM 404630' X1SRC3 405434'
REPL.3 404754' STANSW 000000 SPD TRYLOD 404617' X1SRC4 405441'
REPL.4 404764' START 400001' TRYRCM 404656' X1SRC5 405452'
REPL.5 404772' STAT1 406076' TRYSCM 405043' X1SRCH 405415'
REPL.6 405013' STAT1A 406103' TRYWCM 404623' X5 000030 SPD
REPL1A 404731' STAT2 406110' TRYXCM 404621' XBEG.1 400267'
REPL1B 404725' STAT3 406116' TRYXCT 404602' XCNT 000001
REPL2A 404745' STAT4 406132' TTCALL 051000 000000 XTRNP 405573'
REPL5A 405004' STAT5 406137' TVE 011120' XTRNP1 405576'
REPLIN 011020' STAT6 406144' TYFILN 404231' XTRNP2 405604'
REPLW 011041' STAT7 406153' TYFLRT 404251' XTRNP3 405623'
REPXIT 405023' STAT7A 406155' TYPE5 405030' Y 000007
RESET 047000 000000 STAT8 406172' TYPE5A 405032' Y5 000031 SPD
RPLXC1 011043' STATS 406071' TYPE5B 405041' Z 000010
RPLXCT 011042' STBK1 400276' TYPPN 404241' Z5 000032 SPD
RSWIT 400370' STEM 011063' TYPPN1 404255' ZAPBIT 000400 SPD
RSWIT0 400370' STEMDN 401012' TYSIX 404265' ZFAIL 402476'
RSWIT1 400373' STEMLP 401006' U5 000025 SPD ZLAST 402465'
RSWRET 400435' SUFDON 401056' UCASE 002155' ..MASK 777770 000000 SPD
S5 000023 SPD SUFLEN 000020 SPD UNSVWD 402406' ..NCHR 000003 SPD
SANSW 000000 SPD SUFPOP 401015' UPPER 000001 SPD ..NSH 000025 SPD
SAVE1A 405742' SUFSTK 011071' V5 000026 SPD ..STR 324630 000000 SPD
SAVEM0 405741' SUFWIN 001000 SPD W 000005 .JBFF 402775' EXT
SAVEME 405731' SVWDLN 011062' W5 000027 SPD .JBHRL 403512' EXT
SAVET 400261' SVWDWX 011054' WCORR0 401173' .JBREL 404476' EXT
SAVEXS 011602' SWHELP 400426' WCORR1 401200' .JBSA 404463' EXT
SAVWD 402401' SWHLPM 400500' WDICT 401222'
SCAN 403613' SWLOSE 400430' WDICT1 401227'
SCAN1 403623' SWTAB 400403' WEXCP0 401213'
SCAN2 403630' SWTAB1 400414' WEXCP1 401220'
SCAN3 403644' T5 000024 SPD WORDIN 010776'
SCAN4 403614' TECO 000002 SPD WORDIX 011004'