DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦9a448eee1⟧

    Length: 51228 (0xc81c)
    Notes: pts_type(SC)
    Names: »VDU.SC«

Derivation

└─⟦928b1fd3e⟧ Bits:30009671 Philips computer tape "600131"
    └─⟦this⟧ »KJELL/VDU.SC« 

PTS(SC)

	IDENT VDU	REL 11.0 82-07-07 870150541100 
			MOVE TO UNPROT, ONLY FOR P&T 

			=37 DUP OR FM CHAR ON PRINTER
			=21 LOOP WHEN VDU NOT OPERABLE 
			82-05-17 
			=2 LOOP IN ERASUA
			82-03-10 
			DK1 BAD CHECK ON ATTRIBUTE 
			DK BAD TEST ON INTESITY
			=1, LINFLG AT UNFORM.
			81-01-26 
****************************************************************
*                                                              *
*        MODULE    VDU                                         *
*                  MODULE HANDLING THE DISPLAY SCREEN AND      *
*                  BUFFER                                      *
*                  (EMULATION 3270 SNA/SDLC, BSC)              *
*                                                              *
****************************************************************
	EJECT
*********************************************************** 
* 
*	LIST OF ROUTINES
* 
*        DISMOD       DISPLAY MODIFIED FIELDS 
*        DISLIN       DISPLAY LINE
*        SPACES       MOVE SPACES INTO ECB BUFFER 
*        INTCHK       GET INTENSITY CHAR. 
*        SETIND       SET DISPLAY INDICATOR 
*        INSMOD       INSERT CHAR.
*        UPDCNT       UPDATE COUNTERS 
*        GETVDU       GET CHAR. IN VDU BUFFER 
*        STOVDU       STORE CHAR IN VDU BUFFER
*        SCRINF       GET SCREEN INFORMATION
*        STOINF       STORE SCREEN INFORMATION
*        SOUND        SOUND ALARM 
*        WRAP         CHECK IF WRAP AROUND
*        LINWRP       CHECK IF LINE WRAP
*        LINE         UPDATE LINE FLAG
*        LINATT       UPDATE LINFLG AT ATTRIBUTE CHANGE 
*        NLROUT       NEW LINE ROUTINE
*        ERASE        ERASE ENTIRE SCREEN 
*        ERASUP       ERASE ALL UNPROTECTED 
*        ERASUA       ERASE UNPROTECTED TO ADDRESS
*        POSUNP       MOVE CURSOR TO NEXT UNPRO. POS
*        DISID        DISPLAY HARDCOPY TASKID 
*        DISSTA       DISPLAY STATISTICS
*        MOVTXT       MOVE TEXT 
*        CONASC       CONVERT TO ASCII
*        ATMASF       SEARCH ATTRIBUTE FORWARD
*        ATMASB       SEARCH ATTRIBUTE BACKWARD 
*        SNULL        SEARCH FIRST NULL CHAR. 
*        WCHAR        DISPLAY CHAR. AND CURSOR
*        RFMDUP       REPLACE FM OR DUP CHAR. IF ANY
*        DISCHA       DISPLAY CHAR. 
* 
***************************************************************** 
	EJECT
********************************************************************
*                                                                  *
*        ENTRY POINTS                                              *
*                                                                  *
********************************************************************

	ENTRY	INSMOD	INSERT CHARACTER
	ENTRY	GETVDU	GET CHAR. FROM VDU BUFFER 
	ENTRY	STOVDU	STORE CHAR. IN VDU BUFFER 
	ENTRY	SCRINF	GET SCREEN INFORMATION
	ENTRY	STOINF	SAVE SCREEN INFORMATION 
	ENTRY	POSUNP	MOVE TO NEXT UNPROTECTED POS. 
	ENTRY	ATMASB	SEARCH ATTRIBUTE BACKWARDS
	ENTRY	ATMASF	SEARCH ATTRIBUTE FOREWARD 
	ENTRY	DISCHA	DISPLAY CHAR. 
	ENTRY	WCHAR	DISPLAY CHAR. AND CURSOR 
	ENTRY	DISMOD	DISPLAY MODIFIED FIELDS 
	ENTRY	DISID	DISPLAY HARDCOPY TASKID
	ENTRY	ERASUA	ERASE UNPROTECTED TO ADDRESS
	ENTRY	ERASE	ERASE ENTIRE SCREEN
	ENTRY	SOUND	SOUND ALARM ON VDU 
	ENTRY	ERASUP	ERASE ALL UNPROTECTED 
	ENTRY	WRAP	CHECK IF WRAP AROUND
	ENTRY	NLROUT	NEW LINE ROUTINE
	ENTRY	LINWRP	CHECK LINE WRAP 
	ENTRY	LINE	UPDATE LINE FLAG
	ENTRY	LINATT	UPADTE
	ENTRY	DISSTA	DISPLAY STATISTICS
	ENTRY	RFMDUP	REPLACE FM OR DUP CHAR	=37

	EJECT
********************************************************************
*                                                                  *
*        EXTERNAL REFERENCES                                       *
*                                                                  *
********************************************************************

	EXTRN	TAB	TAB UNPROCTECTED FOREWARD (KEYB) 
	EXTRN	CRDOWN	MOVE CURSOR UNPROTECTED NEXT LINE (KEYB)
	EXTRN	RDHOME UNPROTECTED FIRST ON SCREEN (KEYB)
	EXTRN	SAVE1	SAVE REGISTERS (PAD) 
	EXTRN	REST1	RESTORE REGISTERS (PAD)
	EJECT


********************************************************************* 
*                                                                   * 
*        CONDITIONAL ASSEMBLY PARAMETERS                            * 
*                                                                   * 
********************************************************************* 

X:I	EQU	1	INSERT/DELETE HANDLING
IN:DL	EQU	1 
X:O	EQU	0	TEST INCLUDED IF:=1 
TEST	EQU	0
	EJECT
*************************************************************** 
*                                                             * 
*	DECLARATIONS OF DATA AND EQUATES
*                                                             * 
*************************************************************** 

* 
*       EQUATES FOR ECB HANDLING
* 
ECBBA	EQU	2	BUFFER ADDRESS
ECBRL	EQU	4	REQUESTED LENGTH
ECBEL	EQU	6	EFFECTIVE LENGTH
ECBRC	EQU	8	RETURN CODE 
ECBCW	EQU	10	CONTROL WORD 
* 
*	SPECIAL CHARACTERS
* 
NULL	EQU	0	NULL CHAR. 
NEWLIN	EQU	/0A	NEW LINE CHAR. 
FORMFD	EQU	/0C	FORM FEED CHAR.
ENDMES	EQU	/19	END MESSAGE CHAR.
DUPCH	EQU	/1C	DUPLICATE CHAR. 
FMCH	EQU	/1E	FIELD MARK CHAR. 
* 
*	TASK IDENTIFICATION CODE
* 
VDUCOD	EQU	'VV'	VDU KB TASK 
* 
*	INTERNAL STATUS 
* 
LINUPD	EQU	/0001	LINE UPDATED 
ATTREC	EQU	/0002	ATTRIBUTE RECEIVED 
* 
*	VDU SCREEN SIZE 
* 
LLINE	EQU	80	LINE LENGTH
LBVDU	EQU	1920	TOTAL SIZE 
	IFT	TEST=1 
* 
*	STAT. LAYOUT
* 
NUMLIN	EQU	13	NUMBER OF LINES YO DISPLAY
STALIN	EQU	5	STARTING LINE OF DISPLAY 
STAPOS	EQU	5	STARTTING POS ON LINE
TXTSIZ	EQU	15	SIZE OF PERMANENT TEXT
INDEX	DATA	/0102,/0405,/0608,/090A,/0C0E,/1D1E,/1F00
	XIF
	EJECT
* 
*	RELATIVE ADDRESSES IN 
*	TERMINAL WORKBLOCK
* 
TCT01	EQU	0	TASK IDENTIFICATION 
BVDU	EQU	TCT01+2	SCREEN BUFFER
LINFLG	EQU	BVDU+1920	INTERNAL LINE FLAGS
PCURS	EQU	LINFLG+24	CURSOR ADDRESS
ATTRIB	EQU	PCURS+2	LAST ATTRIBUTE CHAR
CURATT	EQU	ATTRIB+2 
WCC	EQU	CURATT+2	WCC/CCC CHARACTER
INTATT	EQU	WCC+8	INTENSITY ATTRIBUTE
REGI	EQU	INTATT+32	WORK REGISTER
ECBVDU	EQU	REGI+40
* 
*	RELATIVE ADDRESSES IN 
*	COMMON WORKBLOCK
* 
IDTEXT	EQU	2	IDENT TEXT LAYOUT
	IFT	TEST=1 
STATXT	EQU	IDTEXT+22	STATISTIC TEXT LAYOUT
	XIF
	EJECT
********************************************************* 
*                                                       * 
*        DISMOD       DISPLAY MODIFIED FIELDS           * 
*                                                       * 
********************************************************* 
*		REGISTERS
* 
*	A2= CHAR. 
*	A3= ADDRESS IN VDU-BUFFER 
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ADDRESS IN ECB
*	A7= INDEX IN ECB
*	A8= VDU ECB 
*	A9= INTENSITY COUNTER 
*	A10= INDICATOR
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
***************************************************** 
DISMOD	EQU	*
	LD	A8,ECBVDU,A11 
	LDKL	A1,/101	LINE 1 POS. 1 
	ST	A1,ECBCW,A8 
	SUR	A9,A9	RESET INTENSITY COUNTER
	SUR	A10,A10
	LDKL	A3,BVDU 
	ADR	A3,A11 
	CF	A14,SCRINF
	LDK	A4,0	FIRST SCREEN POS.	DK
	CF	A14,SPACES	SPACES IN ECB BUFFER 
	ST	A5,REGI,A11 
	LDKL	A1,LBVDU+1
	LDR	A5,A11 
	CW	A1,REGI,A11 
	RF(NE)	DIS100	NO 
	LDK	A2,0	LOW INTENSITY 
	ST	A2,INTATT,A11 
DIS100	EQU	*
	LDR	A10,A10
	RF(NZ)	DIS900
	CF	A14,INTCHK	CHECK INTENSITY CHAR.
	LDR	A1,A10 
	SUR	A10,A10
	LDR	A1,A1
	RF(N)	DIS800	NONDISPLAY
	RF(NZ)	DIS400	DISPLAY LINE 
	LD	A2,ECBCW,A8	NO MODIFICATION 
	CWK	A2,/1901	ALLDISPLAYED
	RB(NE)	DIS100	NO 
	RF	DIS900
DIS400	EQU	*
	CWK	A7,LLINE	LINE COMPLETED? 
	RF(L)	DIS500	NO
	CF	A14,DISLIN	DISPLAY LINE 
	RB	DIS100
DIS500	EQU	*
	LCR	A2,A3	GET CHAR. IN VDU-BUFFER
	CF	A14,SETIND	SET SPACE INDICATOR
	CCK	A2,/8000	ATTRIBUTE?
	RF(NL)	DIS700	YES
	CF	A14,UPDCNT	UPDATE COUNTERS
	CWK	A2,NULL	NULL CHAR.?
	RB(E)	DIS400	YES 
	CWK	A2,NEWLIN	NEW LINE CHAR.?
	RB(E)	DIS400	YES 
	CWK	A2,ENDMES	END MESSAGE CHAR.? 
	RB(E)	DIS400	YES 
	CWK	A2,FORMFD	FORM FEED CHAR.? 
	RB(E)	DIS400	YES 
	CF	A14,RFMDUP	REPLACE DUP AND FM CHAR. 
	SC	A2,-1,A6	STORE CHAR. IN ECB BUFFER
	RB	DIS400
DIS700	EQU	*
	ST	A2,INTATT,A11 
	LDR	A1,A2
	ANK	A1,8	LOW INTENSITY?
	RF(Z)	DIS725	YES 
	ANK	A2,4	HIGH INTENSITY? 
	RF(Z)	DIS715	YES 
	CF	A14,UPDCNT	UPDATE COUNTERS
	RF	DIS800	NONDISPLAY 
DIS715	EQU	*
	LDK	A2,/1F	HIGH
	RF	DIS750
DIS725	EQU	*
	LDK	A2,/1E	LOW 
DIS750	EQU	*
	SCR	A2,A6	SAVE CHAR. IN ECB BUFFER 
	ADKL	A9,1
	CF	A14,UPDCNT	UPDATE COUNTERS
	ADK	A6,1 
	RB	DIS400
DIS800	EQU	*
	CWK	A7,LLINE	LINE COMPLETED? 
	RF(L)	DIS850	NO
	CF	A14,DISLIN	DISPLAY LINE 
	RB	DIS100
DIS850	EQU	*
	LCR	A2,A3	GET CHAR. IN VDU-BUFFER
	CCK	A2,/8000	ATTRIBUTE?
	RB(NL)	DIS700	YES
	CF	A14,UPDCNT	UPDATE COUNTERS
	RB	DIS800
DIS900	EQU	*
	CF	A14,SCRINF	GET SCREEN INFORMATION 
	LDK	A1,2	REQ. LENGTH 
	CF	A14,DISCHA	SET CURSOR 
	RTN	A14
	EJECT
*********************************************************** 
*                                                         * 
*        DISLIN       DISPLAY LINE ON VDU                 * 
*                                                         * 
*********************************************************** 
*		REGISTERS
* 
*	A3= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= RESERVED
*	A8= ECB VDU 
*	A9= INTENSITY COUNTER 
*	A10= INDICATOR
*	A11= RESERVED 
*	A13= RESERVED 
* 
*********************************************************** 
DISLIN	EQU	*
	LDK	A7,2	REQ. LENGTH 
	LDR	A1,A10 
	ANKL	A1,1	ONLY SPACES? 
	RF(Z)	DISL10	YES 
	LDKL	A7,LLINE+2	REQ. LENGTH
	ADR	A7,A9	ADD NUMBER OF INTENSITY CHAR.
DISL10	EQU	*
	ST	A7,ECBRL,A8 
	LD	A2,ECBCW,A8	SAVE CURSOR POS	=21 
	LDKL	A7,/8B	SET CURSOR AND WRITE 
	LKM
	DATA	1 
	LD	A1,ECBRC,A8	.	=21 
	ANK	A1,1	NOT OPERABLE?	=21 
	RF(Z)	DISL20	VDU OPERABLE	=21
	ST	A2,ECBCW,A8	NOT OP. REST CURSOR POS	=21 
	RF	DISL90	TERMINATE VDU LINE	=21 
DISL20	EQU	*	.	=21
	LD	A1,ECBCW,A8	GET CURSOR POS. 
	ANK	A1,/FF 
	SUK	A1,81	LAST POS. ON LINE DISPLAYED? 
	RF(Z)	DISL90	YES 
	LD	A6,ECBBA,A8 
	LDK	A2,/2B 
	SC	A2,1,A6 
	LDKL	A2,/1420
	SC	A2,3,A6 
	SRL	A2,8 
	SC	A2,2,A6 
	LDK	A2,84
	ST	A2,ECBRL,A8 
	LDK	A7,/86	WRITE 
	LKM
	DATA	1 
DISL90	EQU	*
	ADK	A5,1 
	LDK	A2,1	FIRST POS. ON LINE
	SC	A2,ECBCW+1,A8 
	LDKL	A2,/100	MOVE ONE LINE DOWN
	ADS	A2,ECBCW,A8
	SUR	A10,A10
	LD	A2,ECBCW,A8 
	CWK	A2,/1901	END OF SCREEN 
	RF(NE)	DISL95	NO 
	LDKL	A10,1 
DISL95	EQU	*
	CF	A14,SPACES	MOVE SPACES TO ECB BUFFER
	RTN	A14
	EJECT
************************************************************
*                                                          *
*        SPACES       MOVE SPACES TO ECB BUFFER            *
*                                                          *
************************************************************
*		REGISTERS
* 
*	A2= CHAR. 
*	A3= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= ADDRESS IN ECB BUFFER 
*	A7= INDEX IN ECB
*	A8= VDU ECB 
*	A9= INTENSITY COUNTER 
*	A10= INDICATOR
*	A11= RESERVED 
*	A13= RESERVED 
* 
************************************************************
SPACES	EQU	*
	LD	A6,ECBBA,A8	GET BUFFER ADDRESS
	ADK	A6,2 
	LDK	A7,LLINE	LINE LENGTH 
	ADR	A7,A7	BUFFER LENGTH
	LDKL	A2,'  '	SPACES
SPAC10	EQU	*
	SCR	A2,A6
	SC	A2,1,A6 
	ADK	A6,2 
	SUK	A7,2	WHOLE BUFFER SPACED?
	RB(P)	SPAC10	NO
	LDK	A2,0	CHAR. 
	LD	A6,ECBBA,A8	BUFFER ADDRESS
	ADK	A6,2 
	LDK	A7,0	RESET CHAR. COUNTER 
	RTN	A14
	EJECT
********************************************************* 
*                                                       * 
*        INTCHK       GET INTENSITY CHAR.               * 
*                                                       * 
********************************************************* 
*		REGISTERS
* 
*	A2= CHAR. 
*	A3= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= ADDRESS IN ECB BUFFER 
*	A7= RESERVED
*	A8= RESERVED
*	A9= INTENSITY COUNTER 
*	A10= INDICATOR
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
************************************************
INTCHK	EQU	*
	SUR	A9,A9	RESET INTENSITY COUNTER
	LC	A2,LINFLG,A5	GET LINE FLAG	 
	ANK	A2,1	MODIFIED? 
	RF(NZ)	INT100	YES
	ADK	A3,LLINE	NEXT LINE 
	ADK	A4,LLINE 
	ADK	A5,1 
	LDK	A2,1 
	SC	A2,ECBCW+1,A8 
	LDKL	A2,/100 
	ADS	A2,ECBCW,A8
	LDKL	A10,0 
	RF	INT900
INT100	EQU	*
	LC	A2,LINFLG,A5
	ANK	A2,2 
	SC	A2,LINFLG,A5
	LDKL	A10,1 
	LD	A2,REGI,A11 
	CWK	A2,LBVDU+1	UNFORMATTED SCREEN? 
	RF(E)	INT200	YES 
	CF	A14,SAVE1 
	LDR	A1,A4
	CF	A14,SCRINF
	LDR	A2,A5
	LDR	A3,A6
	CF	A14,ATMASB	GET CURRENT ATTRIBUTE
	ST	A6,INTATT,A11 
	LDR	A5,A2
	LDR	A6,A3
	CF	A14,STOINF
	CF	A14,REST1 
	LDK	A7,0 
INT200	EQU	*
	LD	A2,INTATT,A11 
	LDR	A1,A2
	ANK	A1,8	LOW INTENSITY?
	RF(Z)	INT300	YES 
	ANK	A2,4	HIGH INTENSITY? 
	RF(NZ)	INT800	NO, NONDISPLAY 
	LDK	A2,/1F	HIGH
	RF	INT400
INT300	EQU	*
	LDK	A2,/1E	LOW 
INT400	EQU	*
	SCR	A2,A6	SAVE IN ECB BUFFER 
	ADK	A6,1 
	ADKL	A9,1
	RF	INT900
INT800	EQU	*
	LDKL	A10,/8000 
INT900	EQU	*
	RTN	A14
	EJECT
************************************************
*                                              *
*        SETIND       SET DISPLAY INDICATOR    *
*                                              *
************************************************
*		REGISTERS
* 
*	A2= CHAR
*	A3= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= RESERVED
*	A7= RESERVED
*	A8= RESERVED
*	A9= RESERVED
*	A10= DISPLAY INDICATOR
*	A11= RESERVED 
*	A13= RESERVED 
* 
**********************************
SETIND	EQU	*
	CWK	A2,NULL	NULL CHAR? 
	RF(E)	SETI90	YES 
	ORKL	A10,1	INDICATE NOT ONLY SPACES
SETI90	EQU	*
	RTN	A14
	EJECT
****************************************************************
*                                                              *
*        INSMOD       INSERT CHARACTER                         *
*                                                              *
****************************************************************
*		REGISTERS
* 
*	A1= AT RETURN  0=NULL IN POS., 1=NORMAL INSERT, 2=NOT ALLOWED 
*	A2= RESERVED
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR. 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
*************************************************************** 
INSMOD	EQU	*
	IFT	IN:DL=1
	LDR	A1,A4
	CF	A14,GETVDU	GET CHAR. IN VDU BUFFER
	CCK	A7,NULL	NULL CHAR.?
	RF(NE)	INS100	NO 
	LDK	A1,0	INDICATE NULL IN CURSOR POS.
	RF	INS900
INS100	EQU	*
	LDR	A3,A4
	CWK	A5,LBVDU+1	UNFORMATTED SCREEN? 
	RF(E)	INS200	YES 
	LDR	A8,A6	SAVE OLD 
	LDR	A9,A5	SAVE OLD 
	CF	A14,ATMASF	SEARCH ATTRIBUTE FORWARD 
	LDR	A3,A5
	ST	A8,ATTRIB,A11	RESTORE 
	ST	A9,CURATT,A11	RESTORE 
	LDR	A6,A8
	LDR	A5,A9
INS200	EQU	*
	CF	A14,SNULL	SEARCH FIRST NULL 
	ANK	A1,2	NULL FOUND? 
	RF(Z)	INS300	YES 
	LDK	A1,2	INDICATE ERROR
	RF	INS900
INS300	EQU	*
	CWK	A5,LBVDU+1	UNFORMATTED SCREEN? 
	RF(E)	INS350	YES 
	ORK	A6,1	SET MDT-BIT ON IN ATTRIBUTE 
	ST	A6,ATTRIB,A11 
	LDR	A1,A5
	LDR	A7,A6
	CF	A14,STOVDU	SAVE NEW ATTRIBUTE IN VDU-BUFFER 
INS350	EQU	*
	LDR	A1,A3
	ST	A4,REGI,A11 
	LDR	A4,A1
	LDK	A5,LLINE 
	LDR	A6,A11 
	SUR	A10,A10
	LDR	A9,A1
	CF	A14,LINE	UPDATE LINE FLAG 
	LDR	A1,A9
INS400	EQU	*
	CWK	A1,0	CHAR TO MOVE IN LAST SCREEN POS?
	RF(E)	INS500	YES 
	SUK	A1,1 
	CF	A14,GETVDU	GET CHAR IN VDU BUFFER 
	ADK	A1,1 
	LDR	A9,A1
	LDK	A5,LLINE 
	LDR	A6,A11 
	CF	A14,LINE
	LDR	A1,A9
	LC	A9,LINFLG,A6
	ORKL	A9,1
	SC	A9,LINFLG,A6
	CF	A14,STOVDU	STORE CHAR IN VDU BUFFER 
	SUK	A1,1 
	SUK	A4,1 
INS450	EQU	*
	CW	A1,REGI,A11	ALL SHIFTED?
	RF(E)	INS600	YES 
	RB	INS400
INS500	EQU	*
	LDKL	A1,LBVDU-1	GET LAST CHAR
	CF	A14,GETVDU	GET CHAR IN VDU BUFFER 
	LDK	A1,0 
	LDK	A4,0 
	LDR	A9,A1
	LDK	A5,LLINE 
	LDR	A6,A11 
	CF	A14,LINE
	LDR	A1,A9
	LC	A9,LINFLG,A6
	ORKL	A9,1
	SC	A9,LINFLG,A6
	CF	A14,STOVDU	STORE CHAR IN VDU BUFFER 
	LDKL	A1,LBVDU-1	LAST SCREEN POS. 
	LDKL	A4,LBVDU-1
	RB	INS450
INS600	EQU	*
	LDR	A7,A2	GET KEY-CHAR 
	CF	A14,STOVDU	STORE CHAR IN VDU BUFFER 
	LDK	A5,LLINE 
	LDR	A6,A11 
	CF	A14,LINE
	LC	A9,LINFLG,A6
	ORKL	A9,1
	SC	A9,LINFLG,A6
	IM	PCURS,A11	MOVE CURSOR 
	LD	A4,REGI,A11 
	ADK	A4,1 
	CWK	A4,LBVDU-1	WRAP AROUND?
	RF(NG)	INS700	NO 
	LDK	A4,0	FIRST POS. ON SCREEN
	CM	PCURS,A11 
INS700	EQU	*
	CF	A14,DISMOD	DISPLAY MODIFIED FIELD 
	LDK	A1,1	INDICATE NORMAL INSERT
INS900	EQU	*
	RTN	A14
	XIF
	EJECT
********************************************************* 
*                                                       * 
*        UPDCNT       UPDATE COUNTERS                    *
*                                                       * 
********************************************************* 
*          REGISTERS
* 
*	A3= ADDRESS IN VDU BUFFER 
*	A4= REL CURSOR POS
*	A5= RESERVED
*	A6= ADDRESS IN ECB
*	A7= INDEX IN ECB
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= RESERVED 
*	A13= RESERVED 
* 
********************************************************* 
UPDCNT	EQU	*
	ADK	A3,1 
	ADK	A4,1 
	ADK	A6,1 
	ADK	A7,1 
	RTN	A14
	EJECT
****************************************************************
*                                                              *
*        GETVDU       GET CHAR. IN VDU BUFFER                  *
*                                                              *
****************************************************************
*		REGISTERS
* 
*	A1= REL. POS IN VDU BUFFER
*	A2= RESERVED
*	A3= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= RESERVED
*	A7= CHAR. FROM VDU BUFFER 
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
********************************************************
GETVDU	EQU	*
	LDKL	A7,BVDU 
	ADR	A7,A11 
	ADR	A7,A1
	LCR	A7,A7
	ANK	A7,/FF 
	RTN	A14
	EJECT
**************************************************************
*                                                            *
*        STOVDU       STORE CHAR. IN VDU BUFFER              *
*                                                            *
**************************************************************
*		REGISTERS
* 
*	A1= REL. POS. IN VDU BUFFER 
*	A2= RESERVED
*	A3= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= RESERVED
*	A7= CHAR. TO STORE IN VDU BUFFER
*	A9= RESERVED
*	A10= RESERVED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
********************************************************
STOVDU	EQU	*
	LDKL	A8,BVDU 
	ADR	A8,A11 
	ADR	A8,A1
	SCR	A7,A8
	RTN	A14
	EJECT
********************************************************
*                                                      *
*        SCRINF       GET SCREEN INFORMATION           *
*                                                      *
********************************************************
*		REGISTERS
* 
*	A2= RESERVED
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR. 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
******************************************************* 
SCRINF	EQU	*
	LD	A4,PCURS,A11	GET CURSOR POS.
	LD	A5,CURATT,A11	GET ATTRIBUTE POS.
	LD	A6,ATTRIB,A11	GET ATTRIBUTE CHAR. 
	RTN	A14
	EJECT
********************************************************
*                                                      *
*        STOINF       STORE SCREEN INFORMATION         *
*                                                      *
********************************************************
*		REGISTERS
* 
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR. 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
********************************************************
STOINF	EQU	*
	ST	A4,PCURS,A11
	ST	A5,CURATT,A11 
	ST	A6,ATTRIB,A11 
	RTN	A14
	EJECT
******************************************************* 
*                                                     * 
*        SOUND       SOUND ALARM ON VDU               * 
*                                                     * 
******************************************************* 
*		REGISTERS
* 
*	A1= RETURN CODE 
*	A8= ECBVDU
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
******************************************************* 
SOUND	EQU	* 
	LD	A8,ECBVDU,A11 
	LD	A1,ECBBA,A8 
	LDK	A2,/2B	CONTROL CHAR. 
	SC	A2,1,A1 
	LDK	A2,/07	BELL CHAR.
	SC	A2,2,A1 
	LDK	A2,3	REQ. LENGTH 
	ST	A2,ECBRL,A8 
	LDK	A7,/86 
	LKM
	DATA	1 
	LD	A1,ECBRC,A8	GET RETURN CODE 
	RTN	A14
	EJECT
***************************************************** 
*                                                   * 
*        WRAP       CHECK IF WRAP AROUND            * 
*                                                   * 
***************************************************** 
*		REGISTERS
* 
*	A2= RESERVED
*	A3= ADDRESS IN VDU BUFFER 
*	A4= REL. CURSOR POS.
*	A5= RESERVED
*	A6= RESERVED
*	A7= RESERVED
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
***************************************************** 
WRAP	EQU	*
	CWK	A4,LBVDU	WRAP AROUND 
	RF(L)	WRAP90	NO
	LDK	A4,0	FIRST SCREEN POS. 
	LDKL	A3,BVDU 
	ADR	A3,A11 
WRAP90	EQU	*
	RTN	A14
	EJECT
************************************************************
*                                                          *
*        LINWRP       CHECK LINE WRAP                       * 
*                                                          *
************************************************************
*		REGISTERS
* 
*	A3= RESERVED
*	A4= REL CURSOR POS
*	A5= LAST IN ROW REL POS 
*	A6= RESERVED
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= RESERVED 
*	A13= RESERVED 
* 
*********************************************************** 
LINWRP	EQU	*
	CWR	A5,A4	END OF LINE? 
	RF(G)	LINW10	NO
	CF	A14,LINE	UPDATE LINE FLAG 
LINW10	EQU	*
	RTN	A14
	EJECT
************************************************************
*                                                          *
*        LINE       UPDATE LINE FLAG                       *
*                                                          *
************************************************************* 
*		REGISTERS
* 
*	A3= ADDRESS IN VDU BUFFER 
*	A4= REL CURSOR POS
*	A5= LAST IN ROW REL POS 
*	A6= INTERNAL LINE FLAG ADDRESS
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERFED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
*********************************************************** 
LINE	EQU	*
	CWR	A5,A4	THIS LINE? 
	RF(G)	LIN400	YES,MAYBE 
	LDR	A1,A10 
	ANK	A1,ATTREC	ATTRIBUTE RECEIVED?
	RF(Z)	LIN100	NO
	LC	A1,LINFLG,A6
	ORK	A1,2 
	SC	A1,LINFLG,A6
LIN100	EQU	*
	SUR	A6,A11 
	ADK	A6,1	UPDATE ADDRESS
	CWK	A6,23	WRAP SCREEN? 
	RF(G)	LIN300	YES 
	ADK	A5,LLINE 
	ADR	A6,A11 
	RB	LINE
LIN300	EQU	*
	LDK	A4,0	FIRST SCREEN POS. 
	LDKL	A3,BVDU 
	ADR	A3,A11 
	LDR	A6,A11 
	LDK	A5,LLINE 
LIN400	EQU	*
	SUR	A5,A4	 
	CWK	A5,81
	RF(L)	LIN500	THIS LINE 
	LDK	A5,LLINE 
	LDR	A6,A11 
	RB	LINE
LIN500	EQU	*
	ADR	A5,A4	RESTORE
	RTN	A14
	EJECT
************************************************************* 
*                                                           * 
*        LINATT       UPADTE LINFLG AT ATTRIBUTE CHANGE     * 
*                                                           * 
************************************************************* 
*		REGISTERS
* 
*	A3= ADDRESS IN VDU BUFFER 
*	A4= REL CURSOR POS
*	A5= LAST IN ROW REL POS 
*	A6= INTERNAL LINE FLAG ADDRESS
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
**************************************************************
LINATT	EQU	*
	CF	A14,SAVE1 
	SUR	A6,A11 
	LDK	A2,0 
	LDR	A10,A4	.	=1
LINA10	EQU	*
	ADK	A4,1 
	ADK	A3,1 
	CWR	A5,A4	END OF LINE? 
	RF(G)	LINA30	NO
	ADR	A6,A11 
	LC	A1,LINFLG,A6
	ORK	A1,1 
	SC	A1,LINFLG,A6
	SUR	A6,A11 
	ADK	A6,1 
	CWK	A6,23	WRAP AROUND? 
	RF(G)	LINA20	YES 
	ADK	A5,LLINE 
	RF	LINA30
LINA20	EQU	*
	LDK	A6,0 
	LDK	A4,0 
	LDKL	A3,BVDU 
	ADR	A3,A11 
	LDK	A5,LLINE 
LINA30	EQU	*
	CWR	A4,A10	ALL CHECKED?	=1 
	RF(E)	LINA40	YES	=1
	LCR	A2,A3
	CWK	A2,/80	ATTRIBUTE 
	RB(NG)	LINA10	YES
LINA40	EQU	*	.	=1 
	CF	A14,REST1 
	RTN	A14
	EJECT
*********************************************************** 
*                                                         * 
*        NLROUT       NEW LINE ROUTINE                    * 
*                                                         * 
*********************************************************** 
*		REGISTERS
* 
*	A3= ADDRES IN VDU BUFFER
*	A4= REL CURSOR POS
*	A5= RESERVED
*	A6= RESERVED
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= RESERVED 
*	A13= RESERVED 
* 
*********************************************************** 
NLROUT	EQU	*
	LDR	A1,A4	SAVE CURSOR POS. 
	CF	A14,CRDOWN	MOVE CURSOR ON E LINE DOWN 
	LDK	A7,0 
NLR100	EQU	*
	SUK	A4,LLINE	COMPUTE LEFTMOST POS. 
	RF(N)	NLR200 
	ADK	A7,LLINE 
	RB	NLR100
NLR200	EQU	*
	LDR	A4,A1
	LDK	A2,NULL
NLR300	EQU	*
	CWR	A7,A4	ALL NULLED?
	RF(E)	NLR900	YES 
	SCR	A2,A3	NULL IN VDU BUFFER 
	LC	A1,LINFLG,A6
	ORKL	A1,1
	SC	A1,LINFLG,A6
	ADK	A3,1 
	ADK	A4,1 
	CF	A14,LINWRP
	RB	NLR300
NLR900	EQU	*
	RTN	A14
	EJECT
********************************************************************
*                                                                 * 
*        ERASE       ERASE ENTIRE SCREEN                          * 
*                                                                 * 
******************************************************************* 
*		REGISTERS
* 
*	A2= CHAR. 
*	A3= ADDRESS IN VDU-BUFFER 
*	A4= REL. CURSOR ADDRESS 
*	A5= REL ATTRIBUTE POS 
*	A6= ATTRIBUTE CHAR
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
********************************************************* 
ERASE	EQU	* 
	LDK	A4,0	FIRST SCREEN POS. 
	LDKL	A3,BVDU 
	ADR	A3,A11 
	LDK	A2,NULL	STORE NULL CHAR. 
ERAS10	EQU	*
	CWK	A4,LBVDU+24	WHOLE SCREEN NULLED? 
	RF(NL)	ERAS20	YES
	SCR	A2,A3	STORE CHAR.
	ADK	A3,1 
	ADK	A4,1 
	RB	ERAS10
ERAS20	EQU	*
	LDK	A4,0	FIRST SCREEN POS. 
	LDKL	A5,LBVDU+1	UNFORMATTED SCREEN 
	LDK	A6,0 
	CF	A14,STOINF	SAVE SCREEN INFORMATION
	LC	A1,TCT01,A11
	CCK	A1,VDUCOD	PRINTER UNPACK?
	RF(NE)	ERAS30	YES
	LD	A8,ECBVDU,A11 
	LDK	A2,'1'	ERASE CHAR. 
	LD	A1,ECBBA,A8 
	SC	A2,1,A1 
	LDK	A1,2	REQ. LENGTH 
	ST	A1,ECBRL,A8 
	LDK	A7,/86	WRITE 
	LKM
	DATA	1 
ERAS30	EQU	*
	RTN	A14
	EJECT
********************************************************* 
*                                                       * 
*        ERASUP       ERASE ALL UNPROTECTED             * 
*                                                       * 
********************************************************* 
*		REGISTERS
* 
*	A2= CHAR. 
*	A3= ADDRESS IN VDU-BUFFER 
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= INTERNAL LINE FLAG ADDRESS
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
********************************************************* 
ERASUP	EQU	*
	LDK	A1,2	RESTORE KEYBOARD-BIT
	ST	A1,WCC,A11
	LDK	A4,0	FIRST SCREEN POS. 
	LDKL	A3,BVDU 
	ADR	A3,A11 
	LDK	A7,NULL	STORE NULL CHAR. 
	CWK	A5,LBVDU+1	UNFORMATTED SCREEN? 
	RF(NE)	ERUP10	NO 
	CF	A14,ERASE 
	RF	ERUP90
ERUP10	EQU	*
	LCR	A2,A3	GET CHAR.
	CCK	A2,/8000	ATTRIBUTE?
	RF(NL)	ERUP20	YES
	ADK	A3,1 
	ADK	A4,1 
	RB	ERUP10
ERUP20	EQU	*
	LDR	A9,A4	FIRST ATTRIBUTE POS. 
	LDK	A5,LLINE 
	LDR	A6,A11 
	SUR	A10,A10
	CF	A14,LINE
	RF	ERUP47
ERUP30	EQU	*
	ADK	A3,1 
	ADK	A4,1 
	CF	A14,LINWRP	CHECK IF LINWRP AROUND 
	LCR	A2,A3	GET CHAR.
	CCK	A2,/8000	ATTRIBUTE?
	RB(L)	ERUP30	NO
ERUP45	EQU	*
	CWR	A9,A4	ALL SCANNED? 
	RF(E)	ERUP70	YES 
ERUP47	EQU	*
	LDR	A1,A2
	ANK	A1,/20	PROTECTED?
	RB(NZ)	ERUP30	YES
	ANK	A2,/FE	RESET MDT-BIT 
	SCR	A2,A3	SAVE ATTRIBUTE 
	LC	A1,LINFLG,A6
	ORK	A1,1 
	SC	A1,LINFLG,A6
	ADK	A3,1 
	ADK	A4,1 
ERUP50	EQU	*
	CF	A14,LINWRP	CHECK IF LINWRP AROUND 
	LCR	A2,A3	GET CHAR.
	CCK	A2,/8000	ATTRIBUTE?
	RB(NL)	ERUP45	YES
	SCR	A7,A3	STORE NULL CHAR. IN VDU BUFFER 
	LC	A1,LINFLG,A6
	ORK	A1,1 
	SC	A1,LINFLG,A6
	ADK	A3,1 
	ADK	A4,1 
	RB	ERUP50
ERUP70	EQU	*
	CF	A14,RDHOME	TAB. UNPROTECTED FIRST ON SCREEN 
ERUP90	EQU	*
	RTN	A14
	EJECT
****************************************************************
* 
*        ERASUA       ERASE UNPROTECTED TO ADDRESS             *
*                                                              *
****************************************************************
*		REGISTERS
* 
*	A1= STOP ADDRESS
*	A2= CHAR. 
*	A3= ADDRESS IN VDU-BUFFER 
*	A4= REL. CURSOR POS.
*	A5= REL ATTRIBUTE POS.
*	A6= ATTRIBUTE CHAR. 
*	A7= NULL CHAR.
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
****************************************************************
ERASUA	EQU	*
	LDK	A7,NULL	STORE NULL CHAR. 
	LDKL	A3,BVDU 
	ADR	A3,A11 
	ADR	A3,A4	BUFFER POS.
	CWK	A5,LBVDU+1	UNFORMATTED SCREEN? 
	RF(E)	ERUA47	YES 
	LDR	A2,A6	GET CURRENT ATTRIBUTE
	CWR	A5,A4	STANDING ON ATTRIBUTE? 
	RF(NE)	ERUA10	NO 
	ADK	A3,1 
	ADK	A4,1 
	CWR	A1,A4	ALL NULLED?
	RF(E)	ERUA70	YES 
	CF	A14,WRAP	CHECK IF WRAP AROUND 
ERUA10	EQU	*
	ANK	A2,/20	PROTECTED FIELD?
	RF(Z)	ERUA47	NO
ERUA30	EQU	*
	CF	A14,WRAP	CHECK IF WRAP AROUND 
	CWR	A1,A4	ALL NULLED?	=2 
	RF(E)	ERUA70	YES	=2
	LCR	A2,A3	GET CHAR.
	ADK	A3,1 
	ADK	A4,1 
			.	=2 
	CCK	A2,/8000	ATTRIBUTE?
	RB(L)	ERUA30	NO
ERUA45	EQU	*
	LDR	A8,A2
	ANKL	A8,/20	PROTECTED? 
	RB(NZ)	ERUA30	YES
ERUA47	EQU	*
	LDR	A6,A11 
	LDK	A5,LLINE 
	LDR	A8,A1
	CF	A14,LINE
	LDR	A1,A8
	RF	ERUA60
ERUA50	EQU	*
	LDR	A8,A1
	CF	A14,LINWRP
	LDR	A1,A8
	CWR	A1,A4	ALL NULLED?
	RF(E)	ERUA70	YES 
ERUA60	EQU	*
	LCR	A2,A3	GET CHAR.
	CCK	A2,/8000	ATTRIBUTE?
	RF(L)	ERUA62	NO	=3 
	ANK	A2,/20	PROTECTED?	=3 
	RB(NZ)	ERUA30	YES	=3 
	RF	ERUA64		=3
ERUA62	EQU	*		=3
	SCR	A7,A3	STORE NULL CHAR, IN VDU-BUFFER 
	LC	A8,LINFLG,A6
	ORKL	A8,1
	SC	A8,LINFLG,A6
ERUA64	EQU	*		=3
	ADK	A3,1 
	ADK	A4,1 
	RB	ERUA50
ERUA70	EQU	*
	RTN	A14
	EJECT
**********************************************************
*                                                        *
*        POSUNP       MOVE CURSOR TO NEXT UNPR. POS.     *
*                                                        *
**********************************************************
*		REGISTERS
* 
*	A2= RESERVED
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
*********************************************************** 
POSUNP	EQU	*
	CWK	A4,LBVDU-1	WRAP AROUND?
	RF(NG)	POSU20	NO 
	LDK	A4,0	FIRST POS. ON SCREEN
	ST	A4,PCURS,A11
POSU20	EQU	*
	LDR	A1,A4
	CF	A14,GETVDU	GET CHAR IN VDU BUFFER 
	CCK	A7,/8000	ATTRIBUTE?
	RF(L)	POSU30	NO
	LDR	A6,A7
	ANK	A7,/20 
	CWK	A7,/20	PROTECTED?	DKPT 
	RF(E)	POSU25	YES 
	LDR	A5,A1
	IM	PCURS,A11	MOVE CURSOR 
	ADK	A4,1 
	CWK	A4,LBVDU-1	WRAP AROUND?
	RF(NG)	POSU23	NO 
	LDK	A4,0 
POSU23	EQU	*
	CF	A14,STOINF	SAVE SCREEN INFORMATION
	LDK	A1,2	REQ. LENGTH 
	CF	A14,DISCHA	SET CURSOR 
	RF	POSU30
POSU25	EQU	*
	CF	A14,TAB	TAB NEXT UNPROTECTED FIELD
POSU30	EQU	*
	LD	A8,ECBVDU,A11 
	LD	A1,ECBCW,A8 
	ANK	A1,/FF	LINE POS. 
	SUK	A1,81	LAST POS. ON LINE? 
	RF(NZ)	POSU90	NO 
	LDK	A1,2	REQ. LENGTH 
	CF	A14,DISCHA	SET CURSOR 
POSU90	EQU	*
	RTN	A14
	EJECT
************************************************************
*                                                          *
*       DISID      DISPLAY HARDCOPY TASKID                 *
*                                                          *
************************************************************
*              REGISTERS
* 
* 
************************************************************
DISID	EQU	* 
	LD	A8,ECBVDU,A11 
	CF	A14,SPACES	SPACE IN ECB BUFFER
	LD	A3,6,A13	GET COMMON BLOCK BASE
	LDR	A1,A5	SAVE TASK ID 
	LDK	A5,IDTEXT
	ADR	A5,A3	POINT ON IDBUFFER
	ADK	A6,46
	LDK	A3,6 
	ANK	A4,1	PRINTER OPERABLE? 
	RF(Z)	DISI10	YES 
	ADK	A3,16
DISI10	EQU	*
	SUK	A3,2	MOVE INTO ECBBUFFER 
	RF(N)	DISI20	COMPLETED 
	LDR*	A2,A5 
	STR	A2,A6
	ADK	A5,2 
	ADK	A6,2 
	RB	DISI10
DISI20	EQU	*
	LD	A6,ECBBA,A8 
	ST	A1,ECBBA+52,A6	SAVE TASK ID IN BUFFER 
	LC	A2,X'1F'	HIGH INTENSITY CHAR. 
	SC	A2,ECBBA+45,A6
	LDKL	A10,1	INDICATE NOT ONLY SPACES
	LDKL	A9,1	1 INTENSITY CHAR.
	LDKL	A2,X'1801'	DISPLAY ON LAST ROW
	ST	A2,ECBCW,A8 
	CF	A14,DISLIN	DISPLAY IDENT TEXT 
	RTN	A14
	EJECT
**************************************************************
* 
*	DISSTA	DISPLAY STATISTICS 
* 
*************************************************************** 
*        REGISTERS
* 
* 
*************************************************************** 
DISSTA	EQU	*
	IFT	TEST=1 
	LD	A8,ECBVDU,A11 
	LDK	A1,STALIN	WHERE TO START 
	SLL	A1,8 
	LDK	A2,1 
	ORR	A2,A1	FIRST POS. ON THAT LINE
	ST	A2,ECBCW,A8 
	CF	A14,SPACES	CLEAN THE BUFFER 
	LDK	A5,0	RESET INDEX 
	LD	A3,6,A13
	ADK	A3,STATXT	POINT TO TEXT
DISS10	EQU	*
	LDK	A2,/1F	HIGH INTENSITY
	SCR	A2,A6
	ADK	A6,1 
	LDKL	A9,1
	LDK	A1,TXTSIZ	GET SIZE OF TEXT PER LINE
	CF	A14,MOVTXT	MOVE IT IN TO BUFFER 
	ADK	A6,5+STAPOS	MAKE SOME ROOM 
	LC	A1,INDEX,A5 
	SLL	A1,1 
	ADR	A1,A12	POINT OUT STAT VALUE
	LCR	A2,A1
	CF	A14,CONASC	MAKE IT VISABLE
	LDR	A4,A2
	LCR	A2,A1
	SRL	A2,4 
	CF	A14,CONASC
	SLL	A2,8 
	ORR	A2,A4
	SC	A2,+1,A6
	SRL	A2,8 
	SCR	A2,A6
	ADK	A6,2 
	LC	A2,+1,A1
	CF	A14,CONASC	AS ABOVE 
	LDR	A4,A2
	LC	A2,+1,A1
	SRL	A2,4 
	CF	A14,CONASC
	SLL	A2,8 
	ORR	A2,A4
	SC	A2,+1,A6
	SRL	A2,8 
	SCR	A2,A6
	LDKL	A10,1	NOT ONLY SPACES 
	CF	A14,DISLIN	DISPLAY STAT.
	CWK	A5,NUMLIN	LIMIT REACHED? 
	RB(NE)	DISS10	NO 
	XIF
	RTN	A14
	IFT	TEST=1 
	EJECT
*********************************************************** 
* 
*	MOVTXT	MOVE TEXT
* 
*********************************************************** 
*       REGISTERS 
* 
* 
**********************************************************

MOVTXT	EQU	*
	LCR	A2,A3
	ADK	A3,1 
	SC	A2,STAPOS,A6
	ADK	A6,1 
	SUK	A1,1 
	RB(NZ)	MOVTXT
	RTN	A14
	EJECT
**********************************************************
* 
*	CONASC	CONVERT TO ASCII 
* 
********************************************************
*    REGISTERS
* 
* 
********************************************************
CONASC	EQU	*
	ANK	A2,/0F 
	CCK	A2,/0909 
	RF(G)	CONA10 
	ORK	A2,/30 
	RF	CONA90
CONA10	EQU	*
	ADK	A2,/37 
CONA90	EQU	*
	RTN	A14
	XIF
	EJECT
********************************************************* 
*                                                       * 
*        ATMASF       SEARCH ATTRIBUTE FORWARD          * 
*                                                       * 
********************************************************* 
*		REGISTERS
* 
*	A1= AT ENTRY START SEARCH ADDRESS 
*	A2= RESERVED
*	A3= RESERVED
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR. 
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
********************************************************* 
ATMASF	EQU	*
	ST	A1,REGI,A11 
ASF100	EQU	*
	ADK	A1,1 
	CWK	A1,LBVDU-1	WRAP AROUND?
	RF(NG)	ASF200	NO 
	LDK	A1,0	FIRST POS. ON SCREEN
ASF200	EQU	*
	CW	A1,REGI,A11	WHOLE SCREEN SEARCHED?
	RF(E)	ASF900	YES 
	CF	A14,GETVDU	GET CHAR. IN VDU BUFFER
	CCK	A7,/8000	ATTRIBUTE?
	RB(L)	ASF100	NO
	LDR	A6,A7
	LDR	A5,A1
	CF	A14,STOINF	SAVE NEW SCREEN INFORMATION
ASF900	EQU	*
	RTN	A14
	EJECT
*********************************************************************** 
*                                                                     * 
*        ATMASB       SEARCH ATTRIBUTE BACKWARD                       * 
*                                                                     * 
*********************************************************************** 
*		REGISTERS
* 
*	A1= ATENTRY START SEARCH ADDR.
*	A2= RESERVED
*	A3= RESERVED
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR. 
*	A8= RESERVED
*	A9= RESERVED
*	A10= RESERVED 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
************************************************************************
ATMASB	EQU	*
	ST	A1,REGI,A11 
ASB100	EQU	*
	CF	A14,GETVDU	GET CHAR. IN VDU BUFFER
	CCK	A7,/8000	ATTRIBUTE?
	RF(NL)	ASB300	YES
	SUK	A1,1 
	RF(NN)	ASB200	NOT WRAP AROUND
	LDKL	A1,LBVDU-1	LAST POS. ON SCREEN
ASB200	EQU	*
	CW	A1,REGI,A11	WHOLE SCREEN SEARCHED?
	RF(E)	ASB900	YES 
	RB	ASB100
ASB300	EQU	*
	LDR	A6,A7
	LDR	A5,A1
	CF	A14,STOINF	SAVE SCREEN INFORMATION
ASB900	EQU	*
	RTN	A14
	EJECT
*************************************************************** 
*                                                             * 
*        SNULL       SEARCH FIRST NULL CHAR.                  * 
*                                                             * 
*************************************************************** 
*		REGISTERS
* 
*	A1= AT RETURN  1=NULL FOUND, 2=NO NULL FOUND
*	A2= RESERVED
*	A3= AT ENTRY LAST SEARCH ADDR., AT RETURN NULL ADDR. IF ANY 
*	A4= REL. CURSOR POS.
*	A5= RESERVED
*	A6= RESERVED
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
****************************************************************
SNULL	EQU	* 
	LDR	A1,A4
SNU100	EQU	*
	ADK	A1,1 
	CWK	A1,LBVDU-1	WRAP AROUND?
	RF(NG)	SNU200	NO 
	LDK	A1,0	FIRST SCREEN POS. 
SNU200	EQU	*
	CWR	A1,A3	ALL SEARCHED?
	RF(E)	SNU300	YES 
	CF	A14,GETVDU	GET CHAR IN VDU BUFFER 
	CCK	A7,NULL	NULL CHAR? 
	RB(NE)	SNU100	NO 
	LDR	A3,A1
	LDK	A1,1	INDICATE NULL FOUND 
	RF	SNU900
SNU300	EQU	*
	LDK	A1,2 
SNU900	EQU	*
	RTN	A14
	EJECT
************************************************************
*                                                          *
*        WCHAR       DISPLAY CHAR. AND CURSOR              *
*                                                          *
************************************************************
*		REGISTERS
* 
*	A2= KEY-CHAR
*	A4= REL. CURSOR POS.
*	A5= REL. ATTRIBUTE POS. 
*	A6= ATTRIBUTE CHAR. 
*	A8= VDU-ECB 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
************************************************************* 
WCHAR	EQU	* 
	LD	A8,ECBVDU,A11 
	LDK	A1,/1E	LOW INTENSITY CHAR. 
	LDR	A7,A6
	ANK	A7,/8	STANDARD DISPLAY?
	RF(Z)	WCH300	YES 
	LDR	A7,A6
	ANK	A7,/4	INTENSIFIED DISPLAY? 
	RF(NZ)	WCH200	NO 
	LDK	A1,/1F	HIGH INTENSITY CHAR.
	RF	WCH300
WCH200	EQU	*
	LDK	A2,/20	NONDISPLAY
WCH300	EQU	*
	LD	A7,ECBBA,A8	GET BUFFER ADDRESS
	SC	A1,2,A7	SAVE INTENSITY CHAR.
	CF	A14,RFMDUP	REPLACE FM OR DUP CHAR.
	SC	A2,3,A7	STORE CHAR. IN VDU BUFFER 
	LDK	A1,4	REQ. LENGTH 
	CF	A14,DISCHA	DISPLAY
	ADK	A4,1 
	IM	PCURS,A11 
	CWK	A5,LBVDU+1	UNFORMATTED SCREEN? 
	RF(E)	WCH900	YES 
	ORK	A6,1	SET MDT-BITS IN ATTRIBUTE 
	ST	A6,ATTRIB,A11 
	LDR	A1,A5
	LDR	A7,A6
	CF	A14,STOVDU	STORE CHAR. IN VDU BUFFER
WCH900	EQU	*
	RTN	A14
	EJECT
********************************************************* 
*                                                       * 
*        RFMDUP       REPLACE FM OR DUP CHAR IF PRESENT * 
*                                                       * 
********************************************************* 
*		REGISTERS
*	A2= KEY-CHAR
*	A4= RESERVED
*	A5= RESERVED
*	A6= RESERVED
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
*********************************************** 
RFMDUP	EQU	*
	CWK	A2,DUPCH	DUP CHAR? 
	RF(NE)	RFMD10	NO 
	LDK	A2,/2A	REPLACE 
	RF	RFMD90
RFMD10	EQU	*
	CWK	A2,FMCH	FM CHAR? 
	RF(NE)	RFMD90	NO 
	LDK	A2,/3B	REPLACE 
RFMD90	EQU	*
	RTN	A14
	EJECT
************************************************
*                                              *
*        DISCHA       DISPLAY CHAR             *
*                                              *
************************************************
*		REGISTERS
* 
*	A1= REQ. LENGTH 
*	A2= RESERVED
*	A4= RESERVED
*	A5= RESERVED
*	A6= RESERVED
*	A8= VDU-ECB 
*	A11= CREDIT WORK AREA 
*	A13= RESERVED 
* 
************************************************* 
DISCHA	EQU	*
	LC	A2,TCT01,A11
	CCK	A2,VDUCOD	PRINTER UNPACK?
	RF(NE)	DISC95	YES
	LD	A8,ECBVDU,A11 
	ST	A1,ECBRL,A8 
	LDKL	A1,/101	START AT LINE 1 POS. 1
	ST	A1,ECBCW,A8 
	LDKL	A1,/100 
	LDR	A7,A4	CURSOR POS.
DISC10	EQU	*
	CWK	A7,LLINE	NEXT LINE?
	RF(L)	DISC90	NO
	ADS	A1,ECBCW,A8	MOVE TO NEXT LINE
	SUKL	A7,LLINE
	RB	DISC10
DISC90	EQU	*
	ADS	A7,ECBCW,A8	POSITION IN LINE 
	LDK	A7,/8B	SET CURSOR AND WRITE
	LKM
	DATA	1 
DISC95	EQU	*
	RTN	A14

	END

Full view