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'		

