File: KL8E.PA of Disk: Disks/Working/Build-11-03-07
(Source file text) 

/SUPER TTY HANDLER VERSION V40
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1980   BY DATAPLAN GMBH, LAUDA, BRD
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH.
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR
/IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN.
/
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN.
/
/
/
/
/
/
/
/
/
/
/
/W.V.D.MARK, DP CONSULTING, ZUERICH.
/1-JAN-80
	*0

	-1
	DEVICE KL8E;DEVICE TTY;0;TTY&177+4000;ZBLOCK 2

/TWO-PAGE TELETYPE HANDLER FOR OS/8 V3.
/ON INPUT, RECOGNIZES ^Z, ^C, ^U, RUBOUT (RO)
/^Z	MEANS END OF INPUT, INSERT ^Z IN BUFFER,
/	PAD WITH ZEROES, AND ECHO "^Z,CRLF"
/^C	MEANS ABORT JOB, RETURN TO OS/8 VIA LOC 7600 TO SAVE CORE
/^U	MEANS DELETE THE LAST LINE, ALLOW OPERATOR TO RETYPE
/	(LINE STARTS AT BEGIN OF BUFFER AND IS TERMINATED BY A CR)
/	A CR GETS ENTERED INTO BUFFER, CAUSES A LF TO ALSO ECHO
/	AND GET ENTERED INTO BUFFER, BUFFER IS THEN PADDED WITH NULLS.
/RO	DELETES LAST CHARACTER FROM BUFFER, IF BEGIN OF BUFFER
/	REACHED A CRLF (LIKE ^U) IS GIVEN.
/	SCOPE RO'S CONSIST IN BS/SPACE/BS.
/	PAPER RO'S CONSIST IN BS/LINEFEED.

/ON OUTPUT RECOGNIZES ^C, ^O, ^S, ^Q FROM KEYBOARD
/^C	CAUSES JOB TO ABORT, RETURN TO OS/8 VIA LOCATION 7600
/	TO SAVE CORE.
/^O	CAUSES ECHOING BY THE HANDLER TO CEASE
/	TYPING ANY OTHER CHARACTER RESUMES ECHOING.
/^S	CAUSES THE HANDLER TO STOP SENDING TO TERMINAL
/^Q	(OR ANY OTHER CHAR) RESUMES HANDLER SENDING
/	AND REENABLES PAUSE IF SCOPE-MODE AFTER ^S.
/	ANY CHAR GIVEN DURING PAUSE DISABLES PAUSE.

/WHENEVER PRINTING CHARACTERS (EITHER ON OUTPUT OR WHEN ECHOING),
/SEVERAL OPTIONS CAN BE ACTIVATED OR NOT.
/	ALWAYS IGNORES NULLS
/	CONVERTS LC TO UC OR NOT.
/	HANDLES TABS CORRECTLY (INCLUDING COLUMN COUNTING)
/	PRINTS ESCAPE AS $, AS ^[ OR AS ESC.
/	PRINTS CONTROL CHARACTERS AS "^K" OR UNMODIFIED.
/	DOES AUTOMATIC CR/LF AT END OF LINE WIDTH.
/	DELAYS AFTER FORM-FEED IF NON-SCOPE MODE.

	TTYVERSION="M&77
	VT78=1		/SET TO 0 TO ALLOW OTHER PARAMETERS
			/SET TO 1 TO FORCE OTHER PARAMETERS TO VT78 COMPATIBLE

	CTRL=1		/SET TO 1 TO ECHO CONTROL CHARS AS ^K
			/SET TO 0 TO ACCEPT CONTROL CHARACTERS AND PUT
			/IN BUFFER, AS WELL AS ECHO THEM.
	RUB=0		/SET TO 0 TO ECHO EACH RUBOUT BY TYPING BS/LF.
			/SET TO 1 TO PERFORM SCOPE TYPE RUBOUTS: BS/SP/BS
	SIMTAB=1	/SET TO 1 TO SIMULATE TABS AS THE CORRECT NUMBER OF SPACES
			/SET TO 0 TO TYPE TABS AS TABS
	ESC=1		/SET TO 1 TO ECHO ESCAPE AS $
			/SET TO 0 TO ECHO ESCAPE AS A CONTROL CHAR (^[)
	CNVLC=1		/SET TO 1 TO CONVERT LOWER CASE CHARS TO UPPER CASE
			/SET TO 0 TO PRINT LOWER CASE CHARS AS THEY ARE
	PAG=0		/NO CONTROL-S FEATURE ON TTY
	PAUS=0		/NO PAUSE ON TTY
	HEIGHT=110	/NUMBER OF LINES ON TTY PAGE
	WIDTH=110	/TTY WIDTH = 72

	IFNZRO VT78 <
	CTRL=1
	RUB=1
	SIMTAB=0
	ESC=1
	CNVLC=0
	PAG=1		/CONTROL-S FEATURE ON SCOPE
	PAUS=100	/PAUSE ENABLED ON SCOPE
	HEIGHT=30	/NUMBER OF LINES PER SCREEN
	WIDTH=120	/SCOPE WIDTH=80
	>
/CROSS PAGE LINKAGE:

/THIS CODE MUST BE ABLE TO LOAD INTO ANY TWO PAGES OF CORE
/THE ENTRY POINT IS AT THE NEXT LOCATION TO THE END OF THE FIRST PAGE
/AT THE END OF THE FIRST PAGE WE JMS TO PLINK,
/THIS LEAVES THE ADDRESS OF THE FIRST LOCATION OF THE NEXT PAGE
/IN LOCATION 'PLINK' .  THIS JUST HAPPENS TO BE THE ADDRESS
/OF BOTH TTYPCH AND TTYGCH.

/TTYPCH AND TTYGCH SHARE THE SAME ENTRY POINT.
/IF IT IS CALLED WITH A 0 AC, IT IS A CALL TO TTYGCH,
/IF IT IS CALLED WITH A NON-ZERO AC, IT IS A CALL TO TTYPCH.

/TTYGCH JUST GETS THE CHARACTER FROM THE KEYBOARD AND
/CHECKS IF IT IS ^C, IF NOT, IT RETURNS THIS CHAR TO
/PAGE 1, WHERE THE DIFFERENT INPUT OPTIONS ARE DECODED.

/TTYPCH TAKES RETURN 1 IF IT WANTS THE HANDLER TO GO AWAY,
/I.E IF IT SAW A ^Z.
/IT NORMALLY TAKES RETURN 2 
/AND TAKES RETURN 3 IF THE LINE OVERFLOWED.

/WHEN ECHOING WE PREVENT THE ^Z RETURN BY TELLING
/PAGE 2. (LINK=1 MEANS ECHOING)
	*200

L3700,	3700		/*200
PUNCH,	0		/MAKE SURE AC NON-ZERO
	JMS I PLINK	/CALL TTYPCH
	JMP	TTYRTN	/RETURN ON OUTPUT
	JMP I	PUNCH	/DID WE REACH END OF TTY LINE?:NO
	JMS CRLF	/YES, PERFORM CR/LF
	JMP I PUNCH	/RETURN

TTYCDF,	CDF 0
BUFSIZ,	0
BUFSTRT,0
TTY70,	70		/*212
TTYCA,	0
TTYWC,	0
CIFCDF,	CIF CDF 0	/*215

PLINK,	0		/GETS ADDRESS OF TTYPCH AND TTYGCH (START OF NEXT PAGE)
	STL CLA RAR	/4000
	TAD I TTY	/RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK
TTY200,	AND L3700	/EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER
	CMA		/GET COUNT+1
	DCA BUFSIZ	/STORE AWAY
	RDF		/FIND OUT THE USER'S DATA FIELD
TTY215,	TAD CIFCDF	/FORM OUR EXIT CIF CDF
	DCA TTYXIT	/STORE AWAY FOR EXIT ROUTINE
	TAD I TTY	/GET FUNCTION WORD
TTY212,	AND TTY70	/ISOLATE FIELD OF BUFFER
	TAD TTYCDF	/FORM CDF TO FIELD OF BUFFER
	DCA TTCDBF	/STORE WHERE IT WILL BE USEFUL
			/AT SAME TIME, INITIALIZE TTYEOF
	ISZ TTY		/POINT TO BUFFER ADDRESS
	TAD I TTY	/AND GET IT
	DCA BUFSTRT	/AND SAVE IT
	ISZ TTY		/POINT TO BLOCK #
	ISZ TTY		/POINT TO ERROR RETURN
SHIFT,			/OUTPUT SHIFT REGISTER
TTYEOF,			/0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S
TTCDBF,	HLT		/*240 : CDF BUFFER FIELD
	JMP TTYKLG
TTYLP,	SNL CLA		/LINK=1 MEANS OUTPUT
	JMP TTYGET	/INPUT IS FROM TTY:
/LINK MUST BE SET FIRST TIME THROUGH HERE.
/IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER
ROTL,	RTL
	RTL
	SPA		/DO WE HAVE 8 BITS SHIFTED IN?
	JMP TELP
	DCA SHIFT	/SAVE SHIFT REGISTER
	TAD I BUFSTRT
	SZA		/PREVENT ZERO KILLER
	JMS PUNCH	/PRINT A CHARACTER
	TAD I BUFSTRT
	ISZ BUFSTRT	/BUMP INPUT POINTER
TT7400,	7400		/PROTECT ISZ
	AND TT7400
	CLL RAL
TTY240,	TAD SHIFT	/SHIFT HIGH ORDER 4 BITS INTO
	JMP ROTL	/SHIFT REGISTER
TELP,	JMS PUNCH	/PRINT 3RD CHARACTER OF DOUBLE-WORD
	STL		/*KLUDGE
TTYKLG,	ISZ BUFSIZ	/DONE?
	JMP TTYLP	/NOT YET
TTYX,	TAD TTYEOF	/IF INPUT AND WE WERE PADDING WITH 0'S
	SZA CLA		/TAKE SOFT ERROR EXIT
TTYRTN,	ISZ TTY		/POINT TO NORMAL RETURN
			/CAN'T GET ERROR OR END-OF-FILE ON OUTPUT
TTYXIT,	HLT		/RETURN TO USER'S FIELD
	JMP I TTY	/RETURN TO USER
CTRLU,	JMS CRLF	/PERFORM A CR/LF
TTYGET,	TAD BUFSTRT
	DCA TTYCA	/POINT TO START OF BUFFER
	TAD BUFSIZ
	CLL RAL		/CONVERT DOUBLE-WORDS TO WORDS
DCAWC,	DCA TTYWC	/SET SIZE OF BUFFER
TSTEND,	TAD TTYEOF
	SNA CLA
	JMP ZERO
	JMS I PLINK	/CALL TTYGCH TO GET A CHARACTER
ZERO,	TAD	TTY200	/SET BIT 200 CONVENTION
	DCA I TTYCA	/STORE AWAY TEMPORARILY
			/USING USER'S BUFFER AS A TEMP LOCATION
	CLA IAC STL	/SET LINK FOR ECHO
	TAD I	TTYCA	/GET FOR RO TEST (377+1=400)
	TAD	TT7400	/=-400
	SNA CLA
	JMP	RUBOUT	/WE HAVE A RO
	IFNZRO ECHO <
	TAD I TTYCA>	/GET BACK CHARACTER
	IFZERO ECHO <
	SKP>		/*NO ECHO
	JMS PUNCH	/ECHO IT
	TAD I	TTYCA	/AND AGAIN FOR CTRL Z TEST
	TAD	M232
	SNA
	DCA	TTYEOF	/EOF: SET ZERO FILL
	SNA
	JMS	CRLF	/AND POLISH PAGING
	TAD	TTY5	/^Z-^U
	SNA 		/IS IT ^U?
	JMP CTRLU	/YES
	TAD TTY7
	DCA TMP
	ISZ TTYCA	/NO
TTY7,	7
	ISZ TTYWC	/IS BUFFER FULL?
TTY10,	SKP
	JMP TTYX
	ISZ	TMP	/WAS LAST CHAR A CR?
	JMP TSTEND	/NO
	DCA TTYEOF	/YES, SET "PAD WITH 0'S" FLAG
	ISZ TTY		/POINT TO NORMAL RETURN
			/CR IS NOT AN ERROR OR END-OF-FILE
	TAD TTY212	/IF LAST CHAR INPUT WAS CR, NOW PRETEND LF WAS INPUT
	JMP ZERO+1	/REJOIN PROCESSING
TMP,
CRLF,	0
	TAD TTY215
	JMS I PLINK	/CALL TTYPCH TO PRINT CR
TTY5,	5		/*EOF AND EOL IMPOSSIBLE
	TAD TTY212
	JMS I PLINK	/CALL TTYPCH TO PRINT LF
M232,	-232		/*EOF AND EOL IMPOSSIBLE
	JMP I CRLF	/RETURN

RUBOUT,	TAD TTYCA
	CIA
	TAD BUFSTRT
	SNA CLA		/ARE WE AT BEGIN OF BUFFER?
	JMP CTRLU	/YES
	STA
	TAD TTYCA	/NO; SET POINTER BACK ONE
	DCA TTYCA
	TAD	TTY10
	JMS	PUNCH
	IFNZRO RUB <	/SCOPE TYPE RUBOUT:
	TAD	TTY240>	/BACKSPACE-SPACE-BACKSPACE
	IFZERO RUB <	/PAPER TYPE RUBOUT:
	TAD	TTY212>	/BACKSPACE-LINEFEED
	JMS	PUNCH
	IFNZRO RUB <
	TAD	TTY10>
	IFZERO RUB <
	SKP>
	JMS	PUNCH
	STA
	TAD TTYWC
	JMP DCAWC	/BUMP BACK WC AND GET ANOTHER CHAR

	ZBLOCK 376-.
TTY,	TTYVERSION	/ENTRY POINT TO HANDLER
	JMS PLINK	/SET UP CROSS PAGE LINKAGE
	IFNZRO TTY-376 <ENTERR,QQQQ>
	PAGE
/INTERLUDE:

/USA STANDARD CODE FOR INFORMATION INTERCHANGE:

/ XX		XX0	XX1	XX2	XX3	XX4	XX5	XX6	XX7
/		000	001	010	011	100	101	110	111
/
/ 00	0000	NUL	SOH	STX	ETX	EOT	ENQ	ACK	BEL
/
/ 01	0001	BS	HT	LF	VT	FF	CR	SO	SI
/
/ 02	0010	DLE	DC1	DC2	DC3	DC4	NAK	SYN	ETB
/
/ 03	0011	CAN	EM	SUB	ESC	FS	GS	RS	US
/
/ 04	0100	SP	!	"	#	$	%	&	'
/
/ 05	0101	(	)	*	+	,	-	.	/
/
/ 06	0110	0	1	2	3	4	5	6	7
/
/ 07	0111	8	9	:	;	<	=	>	?
/
/ 10	1000	@	A	B	C	D	E	F	G
/
/ 11	1001	H	I	J	K	L	M	N	O
/
/ 12	1010	P	Q	R	S	T	U	V	W
/
/ 13	1011	X	Y	Z	[	\	]	^	_
/
/ 14	1100	`	a	b	c	d	e	f	g
/
/ 15	1101	h	i	j	k	l	m	n	o
/
/ 16	1110	p	q	r	s	t	u	v	w
/
/ 17	1111	x	y	z	{	|	}	~	DEL
/
/MUST BE AT TOP OF PAGE
TTYPCH,			/ENTRY POINT TO TTY PRINT ROUTINE
TTYGCH,	0		/ENTRY POINT TO TTY GET CHAR ROUTINE
	SNA
	JMP	TGCH	/ZERO AC-MEANT CALL TO TTYGCH
TTYUPA,	AND	TT177	/REDUCE TO 7 BIT (ECHO:L=1)
	TAD	(-33
	SNA		/IS IT ESC?
	IFNZRO ESC <
	TAD	TT11>	/YES CONVERT TO $
	IFZERO ESC <
	NOP>		/*ESC
	IAC		/TEST CTRL Z
	SZL		/ECHO NOW L=0:DON'T MAKE EOF RETURN
	SZA		/IF 0:EOF; RETURN ON EOF,NO ECHO
	SKP
	JMP I	TTYPCH	/CTRL Z RETURN
	TAD	TT32
	DCA	TCHAR	/THIS IS OUR CHAR
	ISZ	TTYPCH	/SET TO NORMAL RETURN
	IFNZRO PAUS <
	TAD	PAUSN
	DCA	TTYTLS>	/SET PAUSE DELAY
	IFZERO PAUS <
	SNL		/IF ECHO DON'T KSF
	JMP	ECHO>
	TAD	TT11
TTY140,	CMA CLL		/=-12
TTC,	TAD	TCHAR	/GET CHAR BACK FOR PAGE TEST
	SNA CLA		/LOOK FOR LF
	ISZ LINCNT	/GOT LF. AT END OF PAGE?
	TAD	LINCNT	/NOT AT END OR NO LF: AC=C(LINCNT)
PAUSL,	KSF		/3-WAY BRANCH
	IFNZRO PAUS <
	JMP	WAIT>	/WAIT IF AC=0.
	IFZERO PAUS <
	JMP	NOPAUS>	/*NO PAUSE
	JMS	TTYTST	/GET KEYBOARD CHAR AND CLA
	TAD	TTC	/GET 'TAD TCHAR'
	DCA	ECHO	/RESTORE *KLUDGE
	TAD	TTYTLS	/GET INPUT CHAR
	TAD	(-17
	SNA		/^O?
	DCA	ECHO	/YES, SET *KLUDGE FOR EXIT
	TAD	TTM4	/NO (17-23=-4)
M140,	SZA CLA		/^S?
	JMP	NOPAUS	/NO, IGNORE CHAR
	KSF
	IFNZRO PAG <
	JMP	.-1>	/WAIT FOR SOME CHAR
	IFZERO PAG <
	NOP>		/*NO PAUSE
NOPAUS,	SNA		/IF C(LINCNT)=0
	TAD	PAGSIZ	/RESET FOR NEXT PAGEFUL
	DCA	LINCNT
ECHO,	TAD	TCHAR	/*K* OR 0 TO RETURN ON ^O
	SNA
	JMP I	TTYPCH	/IGNORE NULLS
	TAD	(-17	/AT CR+2=SO+1
TTY100,	CLL
	TAD	TT7
	SNL
	CLL STA RAL	/-2 WILL BECOME +2 FOR 'TNORM'
	CMA		/CONTROL -, NORMAL +1
	CLL RAL		/CONTROL -2*, NORMAL +2
	TAD	TTJUMP	/'JMP TTSET'
	DCA	TTYTLS	/AND FALL INTO JUMP

TTYTLS,	0
	TLS
TT7600,	7600		/CLEAR AC
	TSF
	JMP .-1
	ISZ	TABCTR	/END OF LINE?
	JMP I TTYTLS	/NO: NORMAL RETURN
	ISZ	TTYPCH	/YES: EOL RETURN
	JMP I	TTYTLS

TCHAR,	0
LINSIZ,	-WIDTH-1	/-1 BECAUSE CR WILL INC ONCE
TABCTR,	-WIDTH
PAGSIZ,	-HEIGHT
LINCNT,	-HEIGHT

TGCH,	KSF		/NON-ZERO MEANS TTYGCH WAS CALLED
	JMP .-1		/WAIT FOR CHAR TO BE TYPED
	JMS TTYTST	/GET CHAR AND CLA
	TAD	TTYTLS
	JMP I TTYGCH	/TAKE ONLY RETURN

TTYTST,	0		/'KRB' WILL CLEAR AC
	KRB		/FLAG IS UP
	AND	TT177
	DCA	TTYTLS	/KEEP INPUT
	CLL STA RTL	/CTRL C?
	TAD	TTYTLS
	SZA CLA
	JMP I	TTYTST	/NO
	CIF CDF 0	/BRANCH TO OS/8 MONITOR AT 07600
	JMP I	TT7600
TUPA,	TAD TTYUPA	/ECHO 201-237 AS ^X (EXCEPT 210-216)
	JMS TTYTLS
TCONV,	TAD TTY100	/ADD X100 TO ^K TO GET K
PRIN,	TAD TCHAR
	JMS TTYTLS
TKILL,	JMP I	TTYPCH	/*K* OR ZEROED BY FF

	IFZERO PAUS <	/IF FF FALL INTO HERE FROM PRINT
	TAD	TTJRT	/RESTORE 'JMP I TTYPCH'
	DCA	TKILL
	ISZ	TCHAR	/MAKE 'CR' OUT OF 'FF'
	JMS	TTYTLS	/PRINT NULLS
	ISZ	LINCNT	/TILL PAGE HAS HAD TIME
	JMP	.-2	/TO POSITION
	JMP	NOPAUS>	/RESET LINE AND CR RESET COLUMN

	IFNZRO PAUS <
WAIT,	SZA		/IF AC=0, WAIT
	JMP	NOPAUS	/C(LINCNT) IN AC
	ISZ	LINCNT
	JMP	.-1	/WAIT 18MS
	ISZ	TTYTLS	/OUTER LOOP
	JMP	PAUSL	/CHECK FLAG
	JMP	NOPAUS>	/RESET LINCNT TO PAGE SIZE
TT177,	177		/'SO' ENTRY POINT
TT11,	11		/FALL THRU TO 'CR'
CR,	TAD	LINSIZ	/CR AND SO RESET COLUMN COUNTER
TTJUMP,	JMP	TTSET
	IFNZRO PAUS <	/IGNORE 'FF' ON SCOPE
FF,	SKP
PAUSN,	-PAUS>
	IFZERO PAUS <	/FORCE 'FF' DELAY ON LA36
FF,	DCA	TKILL	/FALL OUT OF PRINT AFTER FF
PAUSN,	JMP	TTSET>	/PAGE MAY BE LONGER THAN LINE
TT7,	7		/'VT' ENTRY POINT
TT32,	32		/VT FALL ON LF
LF,	STA		/LF NO MOVE OF 'TABCTR'
	JMP	BS+1
TAB,	JMP	TTYTAB
TTM4,	-4
BS,	CLL STA RAL	/-2
	TAD TABCTR
TTSET,	DCA	TABCTR
	JMP	PRIN
TNORM,	TAD TCHAR	/NORMAL ENTRY: GET BACK CHAR
	AND TTY140	/HIGH ORDER BITS IRRELEVANT
	SNA
	IFNZRO CTRL <
	JMP	TUPA>	/A CONTROL CHARACTER
	IFZERO CTRL <
	JMP	LF>	/*NO ARROW (NO TABCTR MOVE)
	TAD	M140	/BUT IS IT LC?
	IFNZRO CNVLC <
	SZA CLA>
	IFZERO CNVLC <
	7600>		/*LC
	JMP	PRIN	/NO PRINT UC
	TAD	M140	/YES, CONVERT TO UC
	JMP	TCONV	/-140+100=-40
	IFZERO SIMTAB <
TTYTAB,	TAD	TT7
	CMA		/MAKES 7770 MASK
	AND	TABCTR	/GO BACK TO THIS TAB STOP
	TAD	TT7	/ADD 7 AND...
	DCA	TABCTR
	JMP	PRIN>	/1 FROM TAB TO NEXT TAB STOP

	IFNZRO SIMTAB <
TTYTAB,	TAD	M140	/USE AS SPACE
	JMS TTYTLS	/ALWAYS ONE MOVE
	TAD TABCTR
	AND TT7
	SZA CLA		/ARE WE AT NEXT TAB STOP?
	JMP TTYTAB>	/NO, ANOTHER SPACE PLEASE!
TTJRT,	JMP I	TTYPCH	/YES, GET OUT
	$$$