File: TECINI.MA of Tape: OS8/OS8-Latest/new-15
(Source file text) 

/9 TECO INITIALIZATION MODULE

/ 08-APR-79	PASS INITIAL COMMAND TO TECO.INI IN Q-REGISTER Z
/		DON'T NEED SYS WRITE ENABLED ON STARTUP
/		FIXED BUG HAVING TO DO WITH / IN 8K
/		FIX -3EJ COMMAND IN 12K
/ 10-APR-79	CONDITIONALIZED IN EXTENDED MATCH CONTROL INITIALIZATION

	GERMAN=1

	.ENABLE 7BIT

	MTWO=CLL STA RAL

	.GLOBAL ERR30,TECO35,TCINIT,JTECO
	.GLOBAL CDF4A,CDF4B,CDF4C,TWLVKP,VT05C,VT52D,VT52KL
	.EXTERNAL XERBAS,IOVRLC,QOVRLC,ERRXX,ERRYY
	.EXTERNAL QPUTS,GETQX,ASR33,QSIZE
	.ZTERNAL MQ,CACR,XR,INXR,Z377,QP,SCHAR
	.EXTERNAL NWRUSR,MQMAX,COLCT,CHKCTC
	.EXTERNAL INHNDL,PUTT,L16K
	.EXTERNAL Q12MAX,QLIMIT,KSFWT,DISPLY,TSFWT,VT52B,TYI1,CHTECO
	.ZTERNAL QZ,MEMSIZ
	.EXTERNAL SCAPE,EUFLAG,ETFLAG,EU1,EU2,INRSIZ,INCTLW,INPCNT
	.EXTERNAL I2,IC,J12K1,J12K2,L12K1,L12K2,OUTSIZ,BUFIN
	.EXTERNAL T0A,TECO1,HLPADR,HLPSYS,TECOS,QPUT,POUTHT,SCPBIT,RUBY
	.ZTERNAL TEMPT
	.EXTERNAL SCOPY,BLSP1,BLSP2,BLSP3,BLSP4,TYPE,QPNTR
	.EXTERNAL CDSP,CHR.W,C.W,CTL.CB,INHNDL,OUHNDL,SRHLEN,MEMLOC,NEWERR
	.EXTERNAL OVREAD
	.ZTERNAL Z7400,Z4,Z40,Z200
	.EXTERNAL	CORTST

	JSBITS=7746
	SBLOCK=7776
	MREAD=7757
	XTNDED=0	/NO EXTENDED MATCH CONTROL
	.ASECT TECINI

	*5200

/	INITIALIZATION SECTION
/	ENTER HERE AT 5200 TO MODIFY TECO TO USE A MODEL 35 TELETYPE

TECO35,	ISZ	JTECO	/IF CALLED VIA "R" OR "RUN"
	TAD	(-10	/MOVE IN ASR35 ROUTINE
	JMS I	(MOVE
	CDF	10
	ASR35-1
	CDF	0
	ASR33-1
	TAD	(ASR33+1
	DCA I	(POUTHT
	TAD	(TECOS
	DCA I	(7745	/CHANGE STARTING ADDRESS IN CASE WE'RE RESTARTED
			/AND FALL INTO INITIALIZATION ROUTINE

TCINIT,	CLA STL
	6141		/ENTER LINC MODE (MAYBE)
	4		/ESF - SET SMALL CHARACTERS FOR SCOPE
	0261		/ROL I 1 - ROTATE LINK INTO AC11
	0002		/BACK TO PDP-8 MODE
	SNA CLA		/AC NON-ZERO IF WE ARE A PDP-12
	JMP	1$	/NO, JUST AN ORDINARY 8
	JMS	CHANGE	/TRADE OFF TWO PAGE HANDLERS FOR A SCOPE
	PDP12
	TAD I	(ETFLAG
	TAD	(2000	/SET VR12 BIT
	DCA I	(ETFLAG
1$:	TAD I COR1
	AND COR70
	SZA
	JMP	SOFCOR
COR0,	CDF 0		/NEEDED FOR PDP-8L
	TAD CORSIZ	/GET FIELD TO TEST
	RTL
	RAL
	AND COR70	/MASK USEFUL BITS
	TAD COREX
	DCA .+1		/SET UP CDF TO FIELD
COR1,	7777		/N IS FIELD TO TEST
	TAD I CORLOC	/SAVE CURRENT CONTENTS
COR2,	NOP		/HACK FOR PDP-8!
	DCA COR1
	TAD COR2	/7000 IS A "GOOD" PATTERN
	DCA I CORLOC
COR70,	70		/HACK FOR PDP-8, NOP
	TAD I CORLOC	/TRY TO READ BACK 7000
CORX,	7400		/HACK FOR PDP-8, NOP
	TAD CORX	/GUARD AGAINST WRAP-AROUND
	TAD CORV	/TAD (1400
	SZA CLA
	JMP COREX	/NON-EXISTENT FIELD EXIT
	TAD COR1	/RESTORE CONTENTS DESTROYED
	DCA I CORLOC
	ISZ CORSIZ	/TRY NEXT HIGHER FIELD
	JMP COR0

COREX,	CDF 0		/LEAVE WITH DATA FIELD 0
COR992,	TAD	(-2	/CAN'T BE MTWO
	TAD CORSIZ	/HIGHEST EXISTING FIELD
	CIF CDF	10
	JMS I	(CORTST	/MAY SKIP RETURN
	JMP	JTECOM	/8K
	TAD	(-7	/MORE THAN 8K
	JMS I	(MOVE
	CDF	10
	QPUT12-1
	CDF	0
	QPUTS-1
	TAD	(-7
	JMS I	(MOVE
	CDF	10
	QGET12-1
	CDF	0
	GETQX-1
	JMS	CHANGE	/AND CHANGE A WHOLE MESS OF LOCATIONS
	TWLVEK
JTECOM,	JMS I	(OVINIT	/WRITE OUT OVERLAYS
	CDF	10
	TAD I	(SCPBIT
	CDF	0
	AND	Z200
	SNA CLA
	JMP	JTECO
	JMS	CHANGE
	SCOPE
JTECO,	JMP I	.+1	/INCREMENTED IF WE WERE'NT CHAINED TO
	CHINIL
	TECO1

CORLOC,	CORX		/ADDRESS TO TEST IN EACH FIELD
CORV,	1400		/7000+7400+1400=0
CORSIZ,	1		/CURRENT FIELD TO TEST

SOFCOR,	CLL RAR
	RTR
	JMP	COR992
/CHAINED INIT CODE - MOVE 17600 INTO Q-REGISTER SPACE

CHINIL,	CIF CDF 10
	JMP I	(CHINI2	/GO TO FIELD 1 CHAIN INITIALIZATION

XQPUT,	0
	QPUT		/QPUT ROUTINE CALLABLE FROM FIELD 1
	CIF CDF	10
	JMP I	XQPUT

CHANGE,	0		/ROUTINE TO CHANGE SPECIFIC LOCATIONS
	STA
	TAD I	CHANGE
	ISZ	CHANGE
	DCA	XR	/STORE TABLE POINTER
L$:	CDF	10
	TAD I	XR	/GET LOCATION
	CDF	0
	SNA
	JMP I	CHANGE	/END OF LIST - RETURN
	DCA	TEMPT
	CDF	10
	TAD I	XR	/GET CONTENTS
	CDF	0
	DCA I	TEMPT	/ZAP!
	JMP	L$

/CHECK FOR OS/8 SCOPE BIT, IF ON, PATCH TECO
/ALSO SEND ESC SEQ TO TERMINAL TO SEE IF VT05 OR VT5X.
	PAGE
OVINIT,	0		/WRITE OUT OVERLAYS
	CIF CDF	10
	JMS I	(MOREI	/DO MORE INITIALIZATION
/IF MORE THAN 12K, MOVE OVERLAYS TO FIELD 3
	MTWO
	TAD	MEMSIZ
TWLVKP,	SPA CLA
	JMP	L16KK	/LESS THAN 16K
	TAD	Z7400
	JMS	MOVE
	CDF	0
	3200-1
CDF4A,	CDF	30
	MEMLOC-1
	TAD	(-2000
	JMS	MOVE
	CDF	0
	5600-1
CDF4B,	CDF	30
	MEMLOC+400-1
	TAD	(-5
	JMS	MOVE
	CDF	10
	NEWERR-1
	CDF	0
	OVREAD-1
	TAD	(-3200
	JMS	MOVE
	CDF	10
	XERBAS-1
CDF4C,	CDF	30
	XERBAS-1
	JMP	G16K
L16KK,	JMS I	(7607
	4200
	3200		/WRITE OUT I/O-OVERLAY
	IOVRLC
	JMP	OVERR	/ERROR WRITING OVERLAY
	JMS I	(7607
	5000		/4 OVERLAYS
	5600		/WRITE OUT Q-OVERLAY AND E-OVERLAY
	QOVRLC
	JMP	OVERR	/ERROR WRITING OUT OVERLAY
	STA
	DCA I	(L16K
G16K,	DCA I	(ERRXX
	.IF NE XTNDED <
	TAD	(-200	/MOVE EXTENDED MATCH CONTROL INTO INPUT BUFFER
	JMS	MOVE
	CDF	10
	3200-1
	CDF	0
	7200-1
	>
	JMP I	OVINIT	/RETURN

OVERR,	TAD	Z7400	/SWAP IN ERROR OVERLAY FROM CORE AND MAKE SURE
	JMS	MOVE	/WE RETURN TO MONITOR
	CDF	0
	6200-1
	CDF	0
	3200-1
	TAD I	(ETFLAG
	AND	(7577
	TAD	Z200	/SET FATAL SWITCH
	DCA I	(ETFLAG
ERR30,	JMP I	(ERRYY	/CALL ERROR MESSAGE PROCESSOR
MOVE,	0
	DCA	MQ
	TAD I	MOVE
	DCA	1$
	ISZ	MOVE
	TAD I	MOVE
	DCA	INXR
	ISZ	MOVE
	TAD I	MOVE
	DCA	2$
	ISZ	MOVE
	TAD I	MOVE
	DCA	XR
	ISZ	MOVE
1$:	HLT
	TAD I	INXR
2$:	HLT
	DCA I	XR
	CDF	0
	ISZ	MQ
	JMP	1$
	JMP I	MOVE
	PAGE
	.ASECT	TECPAT
	FIELD	1
	*3400

	/LIST OF PATCHES TO ENABLE VT52 "WATCH" COMMAND

	.GLOBAL	VPATCH
	.SECREF SWATCH,VTCHKC,VTYI,VTGETQ,VTCCB

	CUR=30

VPATCH,	CHR.W		/ADDR
	-4		/-SIZE
			/ALTER WATCH ROUTINE
	CLA
	CIF CDF	CUR
	CHR.W+3&177+5600/JMP I	.+1
	SWATCH

	CDSP+127	/ADDR
	-1		/-SIZE
	C.W		/ALTER COMMAND DISPATCH TO ALLOW WATCH COMMAND

VT52KL,	VT52B		/ADDR	*M8 GETS 0: END OF LIST
	-3		/-SIZE
			/ALTER CONTROL C INTERCEPT FOR TYPE AHEAD
	CIF CDF	CUR	/WAS KSF
	VT52B+2&177+5600/JMP I	.+1	/WAS JMP I CHKCTC
	VTCHKC		/WAS KRS

	TYI1		/ADDR
	-4		/-SIZE
	CIF CDF	CUR	/WAS KSF
	TYI1+2&177+5600	/JMP I	.+1	/WAS JMP .-1
	VTYI		/WAS CTCCHK
	NOP		/WAS KRB

	CTL.CB		/ADDR		/FOR ^] COMMAND
	-3		/-SIZE
	CIF CDF CUR	/WAS KSF
	CTL.CB+2&177+5600 /JMP I .+1	/WAS STL STA
	VTCCB		/WAS JMP NCOM

	0		/END OF LIST
/LOCATIONS TO CHANGE IF WE'RE RUNNING ON A PDP-12

PDP12,	KSFWT;	DISPLY	/FIX KEYBOARD AND PRINTER WAITS
	TSFWT;	DISPLY	/SO THEY DISPLAY WHILE WAITING
	CDSP+127;C.W	/ENABLE W COMMAND
	INHNDL;	7200	/ONE PAGE INPUT HANDLER ONLY
	OUHNDL;	7400	/DITTO OUTPUT HANDLER
	SRHLEN;	-40	/SHORTEN SEARCH BUFFER TO 40 CHARACTERS
	0
/LOCATIONS TO CHANGE IF CONSOLE TERMINAL IS A SCOPE

SCOPE,	RUBY;	SCOPY		/MAKE SCOPE RUBOUTS WORK
	BLSP1;	TAD CACR	/MAKE BELL SPACE WORK
	BLSP2;	TYPE		/AND MORE RUBOUTS
	BLSP3;	SCAPE&177+4600	/JMS I (ESCAPE
	BLSP4;	VT05C,113	/MORE BELL SPACE
	EUFLAG;	-1		/SET EU TO -1
	EU1;	CLA
	EU2;	TAD Z40
	0

/LOCATIONS TO CHANGE MUST BE CHANGED IN OVERLAY IMAGE
/BEFORE OVERLAY IS WRITTEN OUT

/LOCATIONS TO CHANGE IF WE HAVE 12K OF CORE

TWLVEK,	INRSIZ;	4	/INPUT BUFFER GROWS TO 4 BLOCKS LONG
	INCTLW;	1021	/AND LIVES IN FIELD 2
	INPCNT;	5000
	I2;	CDF 20
	IC;	CDF 0	/THIS WAS A NOP TO SPEED UP RTS-8 OPERATION
	L12K1;	J12K1	/SPEED UP TEXT MOVE ROUTINES,
	L12K2;	J12K2	/SINCE Q-REGISTERS DON'T SIT ON TOP OF TEXT.
	OUTSIZ;	6777	/OUTPUT BUFFER TAKES OVER OLD INPUT BUFFER SPACE
	BUFIN;	5600
	NWRUSR;	TAD Z4	/LET USR BE CALLED WITHOUT SAVING CORE
	MQMAX;	-Q12MAX	/ALLOW MORE Q-REGISTER STORAGE
	QLIMIT;	12-Q12MAX
	QSIZE-3200+6600;Q12MAX/FIX -3EJ COMMAND
	0
/ALTERNATE Q-REGISTER GET AND PUT ROUTINES FOR USE IN 12K

QPUT12,	0		/12K Q-REGISTER PUT ROUTINE
	AND	Z377
	CDF 20
	DCA I	QP
	CDF 0
	ISZ	QP
	QPUTS&177+5600

VT52D,
QGET12,	0		/*VT52 12K Q-REGISTER GET ROUTINE
	CHKCTC&177+3200	/*VT52
	CDF 20		/*VT52
	CHKCTC&177+1600	/*VT52
	CDF 0
	AND	Z377
	GETQX&177+5600

/ALTERNATE ROUTINE TO USE IF WE HAVE AN ASR35

ASR35,	ASR33+6&177+5200/ FORM FEED/VERT. TAB - USE 8/4 FILLERS
	COLCT&177+1200	/GET COLUMN COUNTER
	RTR
	RAR
	CLA CMA RAL	/OUTPUT 2 FILLERS IF MORE THAN 4 CHARS TO TAB
	COLCT&177+3200	/OTHERWISE 1 (COLCT IS A MODULO 8 COUNTER)
	TAD	SCHAR	/GET CONTROL CHAR TO TYPE
	PUTT		/AND TYPE IT - WE WILL NOW FILL WITH NULLS
	PAGE
	*3600

/ENTER AT CHINI2
/MOVE INITIAL COMMAND INTO COMMAND-LINE Q-REGISTER SPACE

CHINI2,	TAD I	(7600
	SZA CLA
	JMP	3$	/REGULAR TECO COMMAND
	TAD	(PSTKMD
	DCA	PST	/CCL COMMAND
	TAD	(INIKMD
	DCA	PTR$
	JMP	3$
1$:	DCA	4$	/FIRST 0 MEANS SWITCH TO POST COMMAND
	TAD	PST
2$:	DCA	PTR$	/STORE NEW POINTER
3$:	TAD I	PTR$	/GET A CHARACTER
	ISZ	PTR$	/POINT TO NEXT IN SEQUENCE
	SNA		/IS IT 0?
	JMP	4$	/YES, END OF INITIAL COMMAND STRING
	SPA		/NO, IS IT NEGATIVE?
	JMP	2$	/YES, IT IS A POINTER TO THE NEXT PART OF THE BUFFER
	CIF CDF	0	/LINK TO FIELD 0
	JMS I	(XQPUT	/DO A PUT
	ISZ	KNT$	/COUNT HOW MANY CHARACTERS THERE WERE
	JMP	3$	/REITERATE
4$:	JMP	1$	/LOC GETS ZERO'ED
	TAD	KNT$
	CIF CDF 0
	DCA I	(QZ
	TAD	KNT$
	DCA I	(QPNTR
	JMP I	(CHTECO

KNT$:	0		/NUMBER OF CHARACTERS IN CHAINED INIT COMMAND
PTR$:	INICMD		/POINTS TO INITIAL COMMAND
PST,	PSTCMD

/IF 07600 IS 0, THEN CCL COMMAND FOLLOWS
/PASSED IN TEXT BUFFER TO TECO.TEC WHICH EXECUTES FROM Q-REGISTER V
/ADDITIONAL INITIALIZATION COMMANDS:

MOREI,	0
	TLS
	TAD	.-1
	CDF	0
	DCA I	(TECOS
	TAD	JMPT0A
	DCA I	(TECO1
	TAD	(2001	/NOTHING IMPORTANT ANYMORE DOWN THERE
	DCA I	(JSBITS	/SO DON'T SWAP USR
	TAD I	(SBLOCK	/GET CHAIN DEVICE
	SNA		/IF NOT V40
	CLA IAC		/USE SYS:
	CDF	10
	JMS I	(7700	/CALL THE USR
	2		/TO DO A LOOKUP
B$:	HLP$		/ON SYS:TECHLP.TXT
	0		/GETS NEGATIVE OF LENGTH
	SKP CLA		/FILE NOT FOUND
	TAD	B$	/GET ADDRESS
	DCA I	(HLPADR	/SAVE AWAY ITS STARTING ADDRESS
	TAD I	(SCPBIT
	AND	(200
	BSW
	CDF 0
	TAD I	(ETFLAG
	DCA I	(ETFLAG	/TURN ON SCOPE BIT IF SCOPE
	TAD I	(MREAD-1	/GET CHAIN ENTRYPOINT FOR EXT ERR
	CDF 10
	DCA I	(HLPSYS
	CIF CDF 0
	JMP I	MOREI

HLP$:	FILENAME TECHLP.TXT

JMPT0A,	T0A&177+5200	/JMP T0A
/
	PAGE
	*4000		/2 PAGES AVAILABLE

	.ENABLE	ASCII,NOFILL
	.NOLIST BE

INICMD,	TEXT	%@I\@:ER/:TECO.INI/\5J-5EJ-2ES%
	TEXT	%ES"L@I\SYS\'%
	TEXT	%ES"E@I\DSK\'%
	TEXT	%ES"G@I\DSK0\'%
	TEXT	%HXWHKMW"SYHXWHK'@^UZ%
	200
	7600	/CONTINUE WITH USER'S COMMAND STRING

PSTCMD,	200
	TEXT	%MW+0ES.,.XWMZ^[0,0XZES"N0ESMX'%<33><33>
	0

INIKMD,	TEXT	%@I\@:ER/:TECO.TEC/\5J-5EJ-2ES%
	TEXT	%ES"L@I\SYS\'%
	TEXT	%ES"E@I\DSK\'%
	TEXT	%ES"G@I\DSK0\'%
.IF ND GERMAN <	TEXT	%HXVMV"FCan't find 4,ZT% >
.IF DF GERMAN <	TEXT	%HXVMV"FFinde 4,ZT nicht!% >
	TEXT	<1><15><12><1><3><3>
	TEXT	%'YHXVHK@I%
	200
	7601

PSTKMD,	200
	TEXT	%MV.,.XV0ES%<33><33>
	0

	.ENABLE SIXBIT,FILL
	.LIST BE