File: TECERR.MA of Disk: V50/Source/Source-Listing-MAC-2
(Source file text) 

/9 TECO ERROR MESSAGE MODULE V50

/ 10-APR-79	MADE HLPBUF NOT LOAD INTO 7400

	/GERMAN=1 not anymore
	.ENABLE 7BIT

	.GLOBAL ERRYY,HLPADR,HLPSYS,NEWERR,XERBAS
	.GLOBAL CDF4F,CIF4A,CIF4B,CIF4C,HCDF1
	.GLOBAL QMK,XH,CIF4E,VTSUP
	.EXTERNAL IOVRLC,QOVRLC,XOVRLC,FOVRLC
	.ZTERNAL N,XR,SCANP
	.EXTERNAL QPNTR
	.EXTERNAL ERRXX
	.EXTERNAL TYPE,PUTT,CRLF
	.EXTERNAL EHFLAG,ETFLAG
	.EXTERNAL MEMLOC
	.EXTERNAL CTL.C
	.EXTERNAL STABLE
	.ZTERNAL LASTC,MEMSIZ
	.EXTERNAL OVREAD
	.EXTERNAL ERR01,ERR02,ERR03,ERR04,ERR05,ERR06,ERR07,ERR08
	.EXTERNAL ERR09,ERR10,ERR11,ERR12,ERR13,ERR14,ERR15,ERR16
	.EXTERNAL ERR17,ERR18,ERR19,ERR20,ERR21,ERR22,ERR23,ERR24
	.EXTERNAL ERR25,ERR26,ERR27,ERR28,ERR29,ERR30,ERR31,ERR32
	.EXTERNAL ERR33,ERR34,ERR35,ERR36,ERR37,ERR38,ERR39,ERR40
	.EXTERNAL ERR41
	.EXTERNAL ERRRET
	.EXTERNAL S.NOT,S.SEP,S.ANY
	.ZTERNAL Z77,Z200,Z177,ZQPNTR,Z40
	.EXTERNAL RESORT,NOTRCE,SCAN,T0
	.ZTERNAL QLENGTH,ERROR
	.ZTERNAL SCHAR


	.SBTTL	.	Error overlay

	.ASECT TECERR

	*6200	/BE SURE TO FIX CDF LABELS IF RELOCATION CHANGED

	RELOC 3200

	IOVRLC
	QOVRLC
EOVRLY,	0
	XOVRLC
	FOVRLC

ERRYY,	DCA	N
	TAD	(ERLIST-1
	DCA	XR
ERLOOP,	ISZ	N	/BUMP ERROR NUMBER
	TAD I	XR
	SZA		/END OF LIST?
	TAD I	(ERRXX	/NO - CHECK FOR MATCH
	SZA CLA		/FOUND WHAT WE WANTED?
	JMP	ERLOOP	/NO - KEEP LOOKING
	TAD	N
	CLL RAL		/MULTIPLY BY 2
	TAD	(ERBASE-2
	DCA	PTR
	TAD I	PTR	/GET FIRST WORD OF ERR MSG
	SPA CLA
	JMP	CTCT	/^C TRAP
ERL2,	TAD	Z77
	TYPE
	TAD I	PTR
	JMS	TWO
	ISZ	PTR
	TAD I	PTR
	JMS	TWO
	TAD I	(EHFLAG
	AND	(3	/ISOLATE HELP LEVEL BITS
	TAD	(-1
	SNA CLA		/0, 2, OR 3 MEANS USE LONG MESSAGES
	JMP	ERET
VTSUP=.-3200+6200
	CLL STA RAL	/-2 (-3 IF VT SUPPORT)
	TAD	MEMSIZ
	SPA CLA
	JMP	ERET	/NO LONG ERROR MESSAGE UNLESS 16K OR MORE
	JMS	TWO	/PRINT TWO SPACES
CIF4B=.-3200+6200
	CIF	30
	JMS I	(EE2	/DO MORE ERROR STUFF
	TAD I	(EHFLAG	/CHECK FOR 4EH
	AND	(4
	SZA CLA
	CRLF		/DO AN EXTRA CR/LF IF AUTO ? AND LONG ERROR MSGS
ERET,	TAD I	(ETFLAG
	AND	Z200
	SZA CLA		/CHECK FATAL BIT
	JMP I	(CTL.C	/RETURN TO OS/8
	TAD	SCANP	/RETURN TO TECO
	CIA
	DCA I	(ERRXX	/SET ERRXX TO CHAR POSITION OF ERROR CHAR.
	JMP I	(ERRRET


CTCT,	003		/CTRL/C ERROR MESSAGE
	TAD	CTCT	/PATCH (NO KRS AFTER KCC)
	TYPE		/PRINT IT
	CRLF		/AND CR LF
	TAD I	ZQPNTR
	SZA CLA
	JMP	ERL2	/PRINT XAB ERROR MESSAGE
/	MTHREE
/	TAD	CHAR	/LOOK AT PREVIOUS CHARACTER
/	SZA CLA
/	JMP	ERET	/ONE ^C DO NOTHING
	JMP I	(CTL.C	/TWO ^C'S, ABORT

PUTTX,	0
	PUTT
CIF4C=.-3200+6200
	CIF CDF	30
	JMP I	PUTTX


TWO,	0
	DCA	TTWO
	TAD	TTWO
	RTR
	RTR
	RTR
	JMS	SIXTYP
	TAD	TTWO
	JMS	SIXTYP
	JMP I	TWO

PTR,	SIXTYP
TTWO,	'ZZ
SIXTYP,	'ZZ		/NULL ERROR MESSAGE
	AND	(37	/IGNORE SIGN BIT OF BYTE
	SNA		/TREAT 0 AS MEANING SPACE
	TAD	Z40
	TAD	(-37
	SNA
	JMS	G$	/- MEANS LAST CHARACTER
	TAD	Z77
	AND	Z77
	TAD	Z40
	PUTT
	JMP I	SIXTYP

G$:	0
	TAD	LASTC
	TAD	(-37
	JMP I	G$


QMK,	TAD I	ERROR
	SNA CLA		/ERROR ROUTINE ENTRY POINT NON-ZERO?
	RESORT		/NO
	TAD	Z77	/TYPE "?"
	TYPE
	STA		/AN ERROR PRINTOUT
	DCA	QLENGT	/SET QLENGT BIG SO WE CAN ACCESS ENTIRE LINE
	NOTRCE		/TURN TRACE OFF
	DCA	SCANP	/NEEDED IN CASE OF AUTO ? (4EH)
1$:	SCAN
	TYPE		/PRINT OUT THE LINE WHICH CAUSED THE ERROR
	ISZ I	ERROR	/UP TO THE ERROR CHAR ITSELF
	JMP	1$
	TAD	Z77	/NOW TYPE TRAILING "?"
	TYPE
	JMP I	(T0	/RE-INITIALIZE

XH,	TAD	SCHAR
	TYPE
CIF4E=.-3200+6200
	CIF CDF 30
	JMP I	(XHELP
	PAGE


ERLIST,	-ERR01-1	/LIST OF POINTERS TO ALL POSSIBLE
	-ERR02-1	/CALLS TO THE ERROR ROUTINE.
	-ERR03-1
	-ERR04-1
	-ERR05-1
	-ERR06-1
	-ERR07-1
	-ERR08-1
	-ERR09-1
	-ERR10-1
	-ERR11-1
	-ERR12-1
	-ERR13-1
	-ERR14-1
	-ERR15-1
	-ERR16-1
	-ERR17-1
	-ERR18-1
	-ERR19-1
	-ERR20-1
	-ERR21-1
	-ERR22-1
	-ERR23-1
	-ERR24-1
	-ERR25-1
	-ERR26-1
	-ERR27-1
	-ERR28-1
	-ERR29-1
	-ERR30-1
	-ERR31-1
	-ERR32-1
	-ERR33-1
	-ERR34-1
	-ERR35-1
	-ERR36-1
	-ERR37-1
	-ERR38-1
	-ERR39-1
	-ERR40-1
	-ERR41-1
	0		/ERROR 42 - UNLABELED ERROR - NAMELY "JMS I OUTR"
			/** MUST BE LAST ERROR MESSAGE


ERBASE,	TEXT	/ILL/	/1	ILLEGAL COMMAND
	TEXT	/UTC/	/2	UNTERMINATED COMMAND
	TEXT	/IQN/	/3	ILLEGAL Q-REGISTER NAME
	TEXT	/PDO/	/4	INTERNAL PUSH DOWN OVERFLOW (RECURSION)
	TEXT	/MEM/	/5	MEMORY OVERFLOW
	TEXT	/STL/	/6	SEARCH STRING TOO LONG
	TEXT	/ARG/	/7	ARGUMENT ERROR
	TEXT	/IFN/	/8	ILLEGAL FILE NAME
	TEXT	/SNI/	/9	SEMICOLON NOT IN ITERATION
	TEXT	/BNI/	/10	CLOSE BRACKET NOT IN ITERATION
	TEXT	/POP/	/11	POINTER OFF PAGE
	TEXT	/QMO/	/12	Q-REGISTER MEMORY OVERFLOW
	TEXT	/UTM/	/13	UNTERMINATED MACRO
	TEXT	/OUT/	/14	OUTPUT ERROR
	TEXT	/INP/	/15	INPUT ERROR
	TEXT	/FER/	/16	FILE ERROR
	TEXT	/FUL/	/17	OUTPUT COMMAND WOULD HAVE OVERFLOWED
	TEXT	/NAY/	/18	NEGATIVE ARGUMENT TO Y
	TEXT	/IEC/	/19	ILLEGAL E CHARACTER
	TEXT	/IQC/	/20	ILLEGAL " CHARACTER
	TEXT	/NAE/	/21	NO ARGUMENT BEFORE =
	TEXT	/NAU/	/22	NO ARGUMENT BEFORE U
	TEXT	/NAQ/	/23	NO ARGUMENT BEFORE "
	TEXT	/SRH/	/24	FAILING SEARCH
	TEXT	/NAP/	/25.	NEGATIVE OR 0 ARGUMENT TO P
	TEXT	/NAC/	/26.	NEGATIVE ARGUMENT TO ,
	TEXT	/NYI/	/27.	^W NOT IMPLEMENTED
	TEXT	/UIS/	/28.	UNDEFINED I/O SWITCH
	TEXT	/ISA/	/29.	NEGATIVE OR 0 COUNT TO SEARCH
	TEXT	/WLO/	/30.	CAN'T WRITE OUT ERROR MESSAGE OVERLAY
	TEXT	/IFC/	/31.	ILLEGAL F CHARACTER
	TEXT	/YCA/	/32.	Y COMMAND ABORTED
	TEXT	/CCL/	/33.	CCL NOT FOUND OR EG TOO BIG
/	TEXT	/XAB/	/34.	EXECUTION ABORTED BY ^C
	7001;0200
	TEXT	/NYI/	/35.	^V NOT IMPLEMENTED
	TEXT	/UE_/	/36.	UNIMPLEMENTED E COMMAND
	TEXT	/DTB/	/37.	DELETE TOO BIG
	TEXT	/POP/	/38.	REFERENCE TO POINTER OFF PAGE
	TEXT	/ICE/	/39.	ILLEGAL ^E IN SEARCH STRING
	TEXT	/NAB/	/40.	NO ARGUMENT BEFORE ^_
	TEXT	/NYI/	/41.	[ OR ] NOT IMPLEMENTED
	TEXT	/NFO/	/42.	NO FILE FOR OUTPUT
			/	MUST BE LAST
	PAGE
	RELOC


	.SBTTL	.	Error message initialization

	.ASECT	TECO.1


	FIELD 1

	*4400

XERBAS,	XER1
	XER2
	XER3
	XER4
	XER5
	XER6
	XER7
	XER8
	XER9
	XER9
	XER11
	XER12
	XER13
	XER14
	XER15
	XER16
	XER17
	XER18
	XER19
	XER20
	XER21
	XER22
	XER22
	XER24
	XER25
	XER26
	XER27
	XER28
	XER25
	XER30
	XER31
	XER32
	XER33
	XER34
	XER35
	XER36
	XER37
	XER38
	XER39
	XER40
	XER41
	XER42


	.NOLIST BE
	.ENABLE ASCII
.IF NDF GERMAN <
XER1,	TEXT	"Illegal Command @"
XER2,	TEXT	"Unterminated Command"
XER3,	TEXT	"Illegal Q-register Name @"
XER4,	TEXT	"Internal Push Down Overflow"
XER5,	TEXT	"Storage Capacity Exceeded"
XER6,	TEXT	"Search String too Long +"
XER7,	TEXT	"Improper Arguments"
XER8,	TEXT	"Illegal Character @ in Filename"
XER9,	TEXT	"@ not in an Iteration"	/;
XER11,	TEXT	"Attempt to Move Pointer Off Page with @"
XER12,	TEXT	"Q-register Memory Overflow"
XER13,	TEXT	"Unterminated Macro"
XER14,	TEXT	"Output Error"
XER15,	TEXT	"Input Error"
XER16,	TEXT	"File Error"
XER17,	TEXT	"Output Command would have Overflowed"
XER18,	TEXT	"Numeric Argument to Y"
XER19,	TEXT	"Illegal Character @ after E"
XER20,	TEXT	\Illegal Character @ after "\
XER21,	TEXT	"No Argument before ="
XER22,	TEXT	"No Argument before @"	/U
/XER23,	TEXT	\No Argument before"\	/"
XER24,	TEXT	"Search failed +"
XER25,	TEXT	"Negative or Zero Argument to @"	/P
XER26,	TEXT	"Negative argument to ,"
XER27,	TEXT	"Case Support not Implemented"<15><12><11><177><177>
	*.-1
	TEXT	"[use W for Watch Command]"
XER28,	TEXT	"Undefined I/O Switch"
/XER29,	TEXT	"Negative or Zero Argument to S"	/S
XER30,	TEXT	"Cannot Write Out Error Message Overlay"
XER31,	TEXT	"Illegal Character @ after F"
XER32,	TEXT	"@ Command Aborted"
XER33,	TEXT	"CCL.SV not found or EG argument too big"
XER34,	TEXT	"Execution aborted"
XER35,	TEXT	"Case Support not Implemented"<15><12><11><177><177>
	*.-1
	TEXT	"[use EO for Version number]"
XER36,	TEXT	"Unimplemented character @ after E"
XER37,	TEXT	"Delete too big"
XER38,	TEXT	"Reference to Pointer position Off Page"
XER39,	TEXT	"Extended CTRL/E match control not implemented"
XER40,	TEXT	"No Argument Before ^_"
XER41,	TEXT	"Unimplemented Push or Pop Command @"
XER42,	TEXT	"No File for Output"
	>


.IF DF GERMAN <
XER1,	TEXT	"Falscher Befehl @"
XER2,	TEXT	"Befehl unvollstaendig"
XER3,	TEXT	"Falscher Q-Register-Name @"
XER4,	TEXT	"Zu tiefe Verschachtelung"
XER5,	TEXT	"Text-Puffer voll"
XER6,	TEXT	"Such-Text zu lang: +"
XER7,	TEXT	"Unzulaessige Argumente"
XER8,	TEXT	"Falsches Zeichen @ im Dateinamen"
XER9,	TEXT	"@ nicht in Iterationsschleife"
XER11,	TEXT	"Befehl @ ausserhalb Textbereich"
XER12,	TEXT	"Q-Register-Puffer voll"
XER13,	TEXT	"Makro mit unvollst. Befehl"
XER14,	TEXT	"Schreibfehler"
XER15,	TEXT	"Lesefehler"
XER16,	TEXT	"Dateifehler"
XER17,	TEXT	"Ausgabe-Datei voll"
XER18,	TEXT	"Y mit numerischem Argument"
XER19,	TEXT	"Falsches Zeichen @ nach E"
XER20,	TEXT	\Falsches Zeichen @ nach "\
XER21,	TEXT	"Kein Wert vor ="
XER22,	TEXT	"Kein Wert vor @"
/XER23,	TEXT	\No Argument before"\
XER24,	TEXT	"Nicht gefunden: +"
XER25,	TEXT	"Wert kleiner-gleich 0 vor @"
XER26,	TEXT	"Negativer Wert vor ,"
XER27,	TEXT	"Keine Zeichenwandlung in TECO8"<15><12><11><177><177>
	*.-1
	TEXT	"[benutze W fuer Watch]"
XER28,	TEXT	"Unbekannte Dateibefehl-Auswahl"
/XER29,	TEXT	"Wert kleiner-gleich 0 vor S"
XER30,	TEXT	"Sytem-Geraet schreibgesperrt"
XER31,	TEXT	"Falsches Zeichen @ nach F"
XER32,	TEXT	"@-Befehl abgebrochen"
XER33,	TEXT	"CCL.SV nicht da oder EG-Befehl zu lang"
XER34,	TEXT	"^C-Abbruch"
XER35,	TEXT	"Keine Zeichenwandlung in TECO8"<15><12><11><177><177>
	*.-1
	TEXT	"[benutze EO= fuer Versionszahl]"
XER36,	TEXT	"Unbekanntes Zeichen @ nach E"
XER37,	TEXT	"Loeschbefehl zu gross"
XER38,	TEXT	"Zeiger zeigt ausserhalb Textbereich"
XER39,	TEXT	"Keine CTRL/E-Vergleiche in TECO8"
XER40,	TEXT	"Kein Wert vor ^_"
XER41,	TEXT	"TECO8 hat keine Push-oder Pop-Befehle @"
XER42,	TEXT	"Keine Ausgabe-Datei"
	>
	
	.ENABLE SIXBIT
	.LIST BE

CNVTAB,	TEXT	"TAB"	/11
	TEXT	"LF"	/12
	TEXT	"VT"	/13
	TEXT	"FF"	/14
	TEXT	"CR"	/15
	TEXT	"NOT"	/16 PSEUDO
	TEXT	"SEP"	/17 PSEUDO
	TEXT	"ANY"	/20 PSEUDO
	TEXT	"ESC"	/21 PSEUDO

CIF4A,
NEWERR,	CIF 30	/NEW CODE TO READ OVERLAY
	OVREAD+2&177+4600/MUST BE 5 LOCS LONG
	COREAD
	0		/BLOCK #
	NOP


	IFNZRO .&7600-6600 <PAGE>

COREAD,	0
	ISZ	COREAD
	TAD I	COREAD	/GET BLOCK #
	AND	CO7
	CLL RTR
	RTR
	RAR		/MULTIPLY BY 400
	TAD	KMEM
	DCA	FLO
	TAD	M400
	DCA	FLCNT
	TAD	K3200
	DCA	FTO
L$:	JMS	FLERR
	TAD I	FLO
	CDF	0
	DCA I	FTO
	ISZ	FLO
	ISZ	FTO
	ISZ	FLCNT
	JMP	L$
	ISZ	COREAD
	CIF CDF	0
	JMP I	COREAD

FLCNT,	0
CO7,	7
M400,	-400
K3200,	3200
KMEM,	MEMLOC
FLO,	0
FTO,	0




FLERR,	0
CDF4F,	CDF	30
	JMP I	FLERR


/@	means current character
/+	means search string
/*	means scan character (not yet implemented)

EE2,	0
	TAD I	(N
	TAD	(XERBAS-1
	DCA	PTR$	/GET PTR TO PTR TO ERROR MSG
	JMS	FLERR
	TAD I	PTR$	/GET PTR TO ERROR MESSAGE
	DCA	PTR$
L$:	TAD I	PTR$
	SNA
	JMP	EROV
	TAD	(-"@
	SNA
	JMP	NEGCHR
	TAD	("@-"+
	SNA
	JMP	SCHPRT
	TAD	("+
	JMS I	(XPUTT
EE3:	ISZ	PTR$
	JMS	FLERR
	JMP	L$

PTR$:	0


NEGCHR,	TAD	(""
	JMS I	(XPUTT
	CDF	0
	TAD I	(LASTC
	JMS	FLERR
	JMS I	(XCHAR
	TAD	(""
	JMS I	(XPUTT
	JMP	EE3

SCHPRT,	TAD	(""	/PRINT SEARCH STRING ON ENCOUNTERING "+"
	JMS I	(XPUTT
	TAD	(STABLE
	DCA	PTR$
L$:	CDF	0
	TAD I	PTR$
	JMS	FLERR
	ISZ	PTR$
	SNA
	JMP	1$
	JMS I	(XCHAR
	JMP	L$
1$:	TAD	(""
	JMS I	(XPUTT
	JMP	EE3

PTR$:	0


EROV,	CDF	0
	TAD I	(EHFLAG
	JMS	FLERR
	AND	(3	/ISOLATE HELP LEVEL
	TAD	(-3
	SNA CLA		/IS IT WAR AND PEACE MODE?
	JMS I	(HELP	/YES
	CIF CDF	0	/NO, RETURN TO TECO
	JMP I	EE2

XHELP,	JMS I	(HELP
	CIF CDF	0
	JMP I	(T0


CTAB,	-S.NOT;	4016
	-S.SEP;	4017
	-S.ANY;	4020
	-33;	4021
	0
	PAGE


XCHAR,	0
	DCA	LC
	TAD	(CTAB
	DCA	PTR$
2$:	TAD I	PTR$
	SNA
	JMP	3$
	TAD	LC
	ISZ	PTR$
	SNA CLA
	JMP	4$
	ISZ	PTR$
	JMP	2$
4$:	TAD I	PTR$
	DCA	LC
3$:	TAD	LC
	SPA		/PSEDUO-CHARACTERS ARE NEGATIVE
	JMP	SPY
	TAD	(-11
	CLL
	TAD	(-5
	SNL CLA
	JMP	SPY	/IT'S IN THE RANGE 11-15
	TAD	LC
	AND	(7740
	SNA CLA
	JMP	CARET	/USE CARRET FORM FOR CONTROL CHARS
	TAD	LC
	JMS	XPUTT
	JMP I	XCHAR

PTR$:	0
LC,	0

CARET,	TAD	("<
	JMS	XPUTT
	TAD	("^
	JMS	XPUTT
	TAD	(100
	TAD	LC
	JMS	XPUTT
	JMP	X2


SPY,	STA CLL RAR	/AC IS NON-0, FORCE 3777
	AND	LC
	TAD	(-11
	CLL RAL
	TAD	(CNVTAB
	DCA	W$
	TAD	("<
	JMS	XPUTT
L$:	TAD I	W$
	JMS	ROTA
	JMS	SIXTY
	TAD I	W$
	JMS	SIXTY
	ISZ	W$
	JMP	L$

W$:	0

ROTA,	0
	RTR
	RTR
	RTR
	JMP I	ROTA


XPUTT,	0
	CIF CDF	0
	JMS I	(PUTTX
	JMP I	XPUTT

SIXTY,	0
	AND	(77
	SNA
	JMP	X2
	TAD	(40
	AND	(77
	TAD	(40
	JMS	XPUTT
	JMP I	SIXTY
X2,	TAD	(">
	JMS	XPUTT
	JMP I	XCHAR


HSET,	0
	CDF	0
	STA
	TAD I	(PTR
	DCA	P$
	TAD I	P$
	DCA	K1$
	ISZ	P$
	TAD I	P$
	DCA	K2$
	JMS I	(FLERR
	TAD	(HLPBUF+1
	DCA	P$
/WANT TO START AT HLPBUF AND FIRST STORE A "?"
	TAD	K1$
	JMS	ROTA
	AND	(37	/?XAB HAS SPECIAL *K*
	JMS	FOOSTO
	TAD	K1$
	JMS	FOOSTO
	TAD	K2$
	JMS	ROTA
	JMS	FOOSTO
	DCA I	P$	/STORE A 0 AT THE END
	JMP I	HSET

K1$:	0
K2$:	0
P$:	0


FOOSTO:	0
	AND	(77
	TAD	(40
	AND	(77
	TAD	(40
	DCA I	P$
	ISZ	P$
	JMP I	FOOSTO
	PAGE


	.SBTTL	.	Help code

HLPADR,	0		/BLOCK # OF FIRST BLOCK OF TECHLP.TXT
			/IF 0, MEANS NO TECHLP
HLPSYS,	7607		/DEVICE WHERE TECHLP.TX IS EXPECTED (SEE TECINI)
HLPSIZ,	4		/# OF BLOCKS IN HELP BUFFER

	HELBUF=0	/ I/O BUFFER IS 2000 WORDS LONG, 0-1777
			/IN FIELD OF OVERLAYS

/*************
/
/	NO LITERALS ALLOWED!
/
/*************

/ENTER WITH STRING YOU REQUEST HELP ON IN HLPBUF (TERMINATED WITH 0)
/HELP TEXT PRINTS ON TERMINAL UP TO NEXT ESCAPE OR CTRL/Z

HELP,	0
	TAD	HLPADR
	SNA		/DOES HELP FILE EXIST?
	JMP I	HELP	/NO, SORRY GUY
	DCA	HLPBLK	/START SEARCHING AT FIRST BLOCK
	JMS I	LHSET
	TAD	L15
	JMS I	LXPUTT
	TAD	L12
	JMS I	LXPUTT	/OUTPUT <CR><LF> AT START
	TAD	LHLPINI	/INITIALIZE COROUTINES
	DCA	HSEND
	TAD	HLPSIZ	/CREATE FUNCTION WORD
	CLL RTR
	RTR
	RTR
	DCA	TM$
	TAD	HCDF1
	AND	L70	/GET OUT FIELD
	TAD	TM$
	DCA	HFUNC
L$:	JMS	HGET	/SCAN FOR $
	TAD	M33
	SZA CLA
	JMP	L$
	TAD	LHLPBUF
	DCA	HPTR$
2$:	TAD I	HPTR$
	SNA
	JMP	3$
	DCA	TM$
	JMS	HGET
	CIA
	TAD	TM$
	SZA CLA
	JMP	L$	/DID NOT MATCH
	ISZ	HPTR$	/PARTIAL MATCH
	JMP	2$	/KEEP TRYING TO MATCH

HPTR$:	0
TM$:	0


3$:	JMS	HGET	/MATCH!
	TAD	M33	/START PRINTING
	SNA
	JMP	CTRLZ	/UNTIL AN ESCAPE
	TAD	L33
	JMS I	LXPUTT
	JMP	3$

L33,	33

CTRLZ,	CLA
	JMP I	HELP	/RETURN

LHSET,	HSET
L15,	15
LXPUTT,	XPUTT
L12,	12
LHLPINI,HLPINI
L70,	70
M33,	-33
LHLPBUF,HLPBUF


/coroutines

HGET,	0
	JMP I	HSEND
HSEND,	HLPINI
	AND	L177	/7-BIT
	TAD	MCTZ
	SNA
	JMP	CTRLZ
	TAD	CONST
	SNA
	JMP I	HSEND	/IGNORE FORM FEEDS
	TAD	L14
	JMP I	HGET

L14,	14
L177,	177
MCTZ,	-^"Z
CONST,	^"Z-14


HCDF1:	CDF	30
L$:	TAD I	H1
	JMS	HSEND
	TAD I	H2
	JMS	HSEND
	TAD I	H2
	AND	L7400
	CLL RTR
	RTR
	DCA	HTM
	TAD I	H1
	AND	L7400
	TAD	HTM
	CLL RTR
	RTR
	JMS	HSEND
	ISZ	H1
	ISZ	H1
	ISZ	H2
	ISZ	H2
	ISZ	HLPCNT
	JMP	L$
HLPINI,	CIF	0		/READ NEXT BUFFER
	JMS I	HLPSYS		/USING RESIDENT HANDLER
HFUNC,	1030		/4 BLOCKS INTO FIELD 3 (OR 4)
	HELBUF		/BUFFER
HLPBLK,	0		/NEXT BLOCK TO SEARCH
	JMP	CTRLZ	/END OF FILE OR ERROR
	TAD	HLPBLK
	TAD	HLPSIZ
	DCA	HLPBLK	/POINT TO NEXT BLOCK
	TAD	HLPSIZ	/GET # OF BLOCKS
	CLL RTR
	RTR
	RTR		/CONVERT TO DOUBLE WORDS
	CIA		/MAKE NEGATIVE
	DCA	HLPCNT
/	TAD	LHELBUF
	.IF NE HELBUF <__ERROR__>
	DCA	H1
	TAD	H1
	IAC
	DCA	H2
	JMP	HCDF1

L7400,	7400
/LHELBUF,HELBUF


HTM,	0
H1,	HELBUF
H2,	HELBUF+1
HLPCNT,	-1
HLPBUF,	"?;"/;0		/MUST BE AT VERY END OF PAGE
	.IF GT .-7400 <__ERROR__>