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

⟦806985577⟧

    Length: 30056 (0x7568)
    Notes: pts_type(SC)
    Names: »PRINT.SC«

Derivation

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

PTS(SC)

	IDENT PRINT	REL 11.0 DK 82-04-22 870150541100

			DK2, FORM-FEED CHAR. 
			DK3, HARD COPY ERROR.
			DK1, SUPPRESS TRAILING SPACES
			=2 NEW LABEL 
			81-04-08 
			=1, EOC ON FIRST READ
			81-01-26 
******************************************************************* 
*                                                                 * 
*        MODULE       PRINT                                       : 
*                     MODULE HANDLING THE PRINTOUTS BOTH FROM     * 
*                     DISPLAY AND MAIN-FRAME                      * 
*                     (EMULATION 3270 SNA/SDLC, BSC               * 
*                                                                 * 
******************************************************************* 
	EJECT
********************************************************
* 
*        LIST OF ROUTINES 
* 
*        PRINT      MAIN ROUTINE
*        IOACT      ACTIVATE IN CURRENT MODE
*        IOCPL      COMPLETE IN CURRENT MODE
*        DCPINP     DC PRINTER INPUT
*        ICPINP     INTERTASK INPUT 
*        ICPRED     INTERTASK READ
*        ICPWRT     INTERTASK WRITE 
*        ICABOR     INTERTASK ABORT 
*        COPP       COPY SCREEN BUFFER TO PRINTER 
*        TABLE OF PRINTERORDERS 
*          NL       NEW LINE
*          FFDUM    SIMULATED FORM FEED 
*          FFVAL    FORM FEED 
*          CR       CARRIAGE RETURN 
*          EM       END MESSAGE 
*          INVAL    INVALID PRINTER ORDER 
*        FFCHK      CHECK IF FF IS VALID
*        PRLINE     PRINT LINE
*        INIT       INIT ROUTINE
*        TSTPRT     TEST HARDWARE 
*        GETTAB     GET ORDER INDEX 
* 
*********************************************************** 
	EJECT
******************************************************************* 
*                                                                 * 
*        ENTRY POINTS                                             * 
*                                                                 * 
******************************************************************* 

	ENTRY	PRINT	START LABEL FROM DATA DIVISION (CREDIT)
	ENTRY	COPP	COPY SCREEN BUFFER TO PRINTER	=2

******************************************************************* 
*                                                                 * 
*        EXTERNAL REFERENCES                                      * 
*                                                                 * 
******************************************************************* 

	EXTRN	COMINI	COMMON INITIATE ROUTINE (DSPSNA)
	EXTRN	OPINIT	OPEN CONNECTION INITIATE (DCSNA9
	EXTRN	OPSYS	OPEN SYSTEM (DCSNA)
	EXTRN	OPEN	OPEN (DCBSC)
	EXTRN	CONCT	CONNECT PASSIVE (DCBSC)
	EXTRN	SETTIM	SET REQUEST TIMER (DCBSC) 
	EXTRN	ATMASB	SEARCH ATTRIBUTE BACKWARDS
	EXTRN	TSTMES	TEST MESSAGE (DCSNA)
	EXTRN	READW	READ WITH WAIT (DCSNA) 
	EXTRN	READNW	READ WITH NO WAIT (DCSNA) 
	EXTRN	GETBUF	GET BUFFER (PAD)
	EXTRN	RELBUF	RELEASE BUFFER (PAD)
	EXTRN	UNPACK	UNPACK DC BUFFER (PAD)
	EXTRN	ECBINI	INIT IF ECB:S (DSPSNA)
	EXTRN	ICSET	SET INTERTASK TIMEOUT (KEYB) 
	EXTRN	ICWRT	INTERTASK WRITE (KEYB) 
	EXTRN	ICREAD	INTERTASK READ (KEYB) 
	EXTRN	SETSTA	SET STATUS (DCBSC)
	EJECT
*************************************************************** 
*                                                              *
*        CONDITIONAL ASSEMBLY                                 * 
*                                                             * 
*************************************************************** 

X:A	EQU	0	SNA HANDLING IF:=1
SNA	EQU	0 
X:D	EQU	1	NUMBER OF DC LINES (1-2)
NBRLIN	EQU	1
X:O	EQU	0	TEST MODE IF:=1 
TEST	EQU	0
SUPSPC	EQU	1	SUPRESS TRAILING SPACES IF =1	DK1
	EJECT
******************************************************************* 
*                                                                 * 
*	DECLARATIONS OF DATA AND EQUATES
*                                                                 * 
******************************************************************* 

* 
*	TABLE OF PRINTER TYPES
* 
PRTTAB	EQU	*
	DATA	/0004	NUMBER OF PRINTERTYPES
	DATA	'TT',0	GTP
	DATA	'LL',2	LINE PRINTER 
	DATA	'GG',4	GP 74
	DATA	'CC',6	COPY 80
* 
*        DEFAULT VALUES FOR DIFF. PRINTERS
*	BYTE1= NUMBER OF LINES/PAGE 
*	BYTE2= NUMBER OF CHAR./LINE 
* 
PRTLEN	DATA	/2382	GTP 
	DATA	/2382	LP
	DATA	/2382	GP 74 
	DATA	/2382	COPY 80 
* 
*        LINE LENGTHS FROM WCC
* 
LINLEN	DATA	/0028,/4050	40, 64 AND 80 CHAR/LINE 
* 
*        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 
* 
*	PRINTER MODES 
* 
LOCAL	EQU	0	LOCAL MODE
SHARED	EQU	2	SHARED MODE
* 
*	PRINTER STATUS IN PRTMOD
* 
PRTERR	EQU	/4000	PRINTER ERROR
* 
*	COPY INTERNAL STATUS IN A10 
* 
NXTCHA	EQU	/8000	GET NEXT CHAR. 
ENDPRT	EQU	/4000	END PRINTING 
NTONLY	EQU	/2000	NOT ONLY SPACES
CRREC	EQU	/1000	CR RECEIVED 
* 
*        RELATIVE POS. IN ECB-BLOCK 
* 
IC	EQU	2	INTERTASK
* 
*	SCREEN SIZE 
* 
LBVDU	EQU	1920
* 
*	RECEIVE STATUS
* 
LICREC	EQU	/2000	.	=1 
	EJECT
* 
*	RELATIVE ADDRESSES IN 
*	TERMINAL WORKBLOCK
* 
BVDU	EQU	2	SCREEN BUFFER
WCC	EQU	BVDU+1950	WCC 
LINCNT	EQU	WCC+4	LINE COUNTER 
DCLENG	EQU	LINCNT+2	LENGTH OF RECEIVED BUFFER 
PRTID	EQU	DCLENG+6	PRINTER TASKID 
PRTTYP	EQU	PRTID+2	PRINTER TYPE 
MAIN	EQU	PRTTYP+4	WHAT DC LINE
ECBBLK	EQU	MAIN+6	ECB BLOCK 
BUFPNT	EQU	ECBBLK+14	BUFFER POINTER 
REGI	EQU	BUFPNT+2	SAVE AREA 
PRTMOD	EQU	REGI+32	PRINTER MODE 
ECBPRT	EQU	PRTMOD+4	PRINTER ECB 
ECBICR	EQU	ECBPRT+6	INTERTASK READ ECB
ECBICW	EQU	ECBICR+2	INTERTASK WRITE ECB 
ECBDC	EQU	ECBICW+2	ECB DC 
ECBDC1	EQU	ECBDC	ECB DC LINE 1
ECBDC2	EQU	ECBDC1+2	ECB DC LINE 2 
* 
*	RELATIVE ADDRESSES IN 
*	COMMON WORKBLOCK
* 
	IFF	TEST=1 
TSKTAB	EQU	24	DEVICE TABLE
	XIF
	IFT	TEST=1 
TSKTAB	EQU	219
	XIF
	EJECT
******************************************************************* 
*                                                                 * 
*        PRINT       MAIN ROUTINE PRINTER                         * 
*                                                                 * 
******************************************************************* 
PRINT	EQU	* 
	CF	A14,INIT	INIT ROUTINE 
	IFT	SNA=1
	CF	A14,OPINIT	OPEN CONNECTION INITIATE 
	RF(N)	PRI100	DC NOT PRESENT
	CF	A14,OPSYS	OPEN SYSTEM 
	XIF
	IFF	SNA=1
	CF	A14,OPEN	OPEN 
*  CHECK ON DC REMOVED PR. 8623, DK * 
	LDKL	A8,20 
	LKM
	DATA	6 
	XIF
	LDK	A1,SHARED	ALWAYS SHARED IN BSC 
	ST	A1,PRTMOD,A11 
PRI100	EQU	*
	CF	A14,TSTPRT	TEST HARDWARE
	CF	A14,CONCT	CONNECT PASSIVE IF PRTR OK
	CF	A14,SETTIM	SET REQUEST TIME 
PRI200	EQU	*
	CF	A14,IOACT	ACTIVATE IN CURRENT MODE
	LDKL	A7,ECBBLK 
	ADR	A7,A11 
	LKM
	DATA	7	MULTIPLE WAIT 
	CF	A14,IOCPL	COMPLET IN CURRENT MODE 
	LD	A1,PRTMOD,A11 
	ANKL	A1,PRTERR	PRINTER ERROR?
	RB(Z)	PRI200	NO
	XRS	A1,PRTMOD,A11
	RB	PRI100	TRY TO FIX IT
	EJECT
********************************************************************* 
*                                                                   * 
*	IOACT	ACTIVATE IN CURRENT MODE
*                                                                   * 
********************************************************************* 
IOACT	EQU	* 
	LDK	A4,0 
	LD	A1,PRTMOD,A11	SHARED OR LOCAL?
	RF(Z)	IOAC20	LOCAL 
	ADK	A4,1	ADD NUMBER OF WAITS 
	LD	A2,ECBBLK+4,A11	REQUEST OUTSTANDING ALREADY?
	RF(NZ)	IOAC10	YES
	CM	MAIN,A11	INDICATE LINE 1
	CF	A14,TSTMES	TEST MESSAGE 
	ST	A8,ECBBLK+4,A11 
IOAC10	EQU	*
	IFT	NBRLIN=2 
	ADK	A4,1	ADD MORE WAITS
	LD	A2,ECBBLK+6,A11	ALREADY?
	RF(NZ)	IOAC20	YES
	IM	MAIN,A11	INDICATE LINE 2
	CF	A14,TSTMES	TEST MESSAGE 
	ST	A8,ECBBLK+6,A11 
	XIF
IOAC20	EQU	*
	ADK	A4,1 
	LD	A2,ECBBLK+2,A11	ALREADY?
	RF(NZ)	IOAC30	YES
	CF	A14,ICPRED	READ INTERTASK 
	ST	A8,ECBBLK+2,A11 
IOAC30	EQU	*
	ST	A4,ECBBLK,A11	NUMBER OF WAITS 
	RTN	A14
	EJECT
********************************************************************* 
*                                                                   * 
*	IOCPL	COMPLETE IN CURRENT MODE
*                                                                   * 
********************************************************************* 
IOCPL	EQU	* 
	CW	A8,ECBBLK+2,A11	INTERTASK?
	RF(NE)	IOCP10	NO 
	CM	ECBBLK+2,A11
	CF	A14,ICPINP	MAKE HARDCOPY
	RF	IOCP90
IOCP10	EQU	*
	CW	A8,ECBBLK+4,A11	DC LINE 1?
	IFT	NBRLIN=2 
	RF(NE)	IOCP20	NO 
	XIF
	IFF	NBRLIN=2 
	RF(NE)	IOCP90	NO FORGET IT 
	XIF
	CM	ECBBLK+4,A11
	CM	MAIN,A11	INDICATE LINE 1
	RF	IOCP30
	IFT	NBRLIN=2 
IOCP20	EQU	*
	CW	A8,ECBBLK+6,A11	DC LINE 2?
	RF(NE)	IOCP90	NO 
	CM	ECBBLK+6,A11
	IM	MAIN,A11	INDICATE LINE 2
	XIF
IOCP30	EQU	*
	CF	A14,DCPINP	TAKE CARE OF DC
IOCP90	EQU	*
	RTN	A14
	EJECT
*************************************************************** 
*                                                             * 
*        DCPINP       DC PRINTER INPUT                        * 
*                                                             * 
*************************************************************** 
DCPINP	EQU	*
	CF	A14,ICABOR	ABORT LOCAL HARD COPY
	LDR	A7,A7	ALREADY COMPLETED? 
	RF(Z)	DCP100	NO
	CF	A14,ICPINP	TAKE CARE OF THAT FIRST
DCP100	EQU	*
	LD	A8,ECBDC,A11
	IFT	NBRLIN=2 
	LD	A1,MAIN,A11	LINE 1
	RF(Z)	DCP150	YES 
	LD	A8,ECBDC2,A11 
DCP150	EQU	*
	XIF
	IFT	SNA=1
	LD	A1,ECBRC,A8	OK? 
	ANKL	A1,/701	OK? 
	RF(NZ)	DCP500	NO STOP IT 
	XIF
	CF	A14,GETBUF	GET BUFFER 
	LDR	A3,A12 
	CF	A14,READW	READ FIRST BUFFER 
	ANK	A1,3	ERROR?
	RF(NZ)	DCP400	NO 
	RF	DCP500
DCP400	EQU	*
	SUR	A10,A10	RESET INTERNAL UNPACK STATUS 
	IFT	SNA=1	.	=1 
	ANK	A1,2	.	=1
	RF(Z)	DCP450	.	=1
	ORKL	A10,LICREC	.	=1 
DCP450	EQU	*	.	=1 
	XIF		.	=1
	LD	A1,ECBEL,A8 
	ST	A1,DCLENG,A11	SAVE LENGTH 
	ST	A12,BUFPNT,A11	SAVE BUFFER ADDRESS
	IFT	SNA=1
	CF	A14,GETBUF	GET ANOTHER BUFFER 
	LDR	A3,A8
	CF	A14,READNW	READ WITH NO WAIT
	XIF
	CF	A14,UNPACK	UPDATE SCREEN BUFFER 
	LD	A1,WCC,A11
	ANK	A1,/8	ANY COPY NEEDED
	RF(Z)	DCP500	NO
	CF	A14,COPP PRINT IT 
DCP500	EQU	*
	IFF	SNA=1
	LDK	A1,0 
	CF	A14,SETSTA	SET DEVICE END 
	XIF
	RTN	A14
	EJECT
****************************************************************
*                                                              *
*        ICPINP       INTERTASK INPUT                          *
*                                                              *
****************************************************************
ICPINP	EQU	*
	CF	A14,COPP	MAKE HARDCOPP
	ST	A1,REGI,A11	RETURN CODE TO TERMINAL 
	CF	A14,ICPWRT	WRITE INTERTASK
	RTN	A14
	EJECT
******************************************************************
*                                                                *
*        ICPRED       INTERTASK READ                             *
*                                                                *
******************************************************************
ICPRED	EQU	*
	LD	A8,ECBICR,A11 
	CF	A14,ICSET	SET NO TIMEOUT
	LDK	A1,0	NOT ADDRESSED READ
	LDKL	A3,BVDU 
	ADR	A3,A11 
	LDKL	A2,LBVDU+/20
	CF	A14,ICREAD	READ INTERTASK 
	RTN	A14
	EJECT
********************************************************************
*                                                                  *
*          ICPWRT       WRITE INTERTASK                            *
*                                                                  *
********************************************************************
ICPWRT	EQU	*
	LD	A8,ECBICW,A11 
	CF	A14,ICSET	SET NO TIMEOUT
	LD	A1,ECBICR,A11 
	LD	A1,ECBCW,A1	GET TASKID
	RF(Z)	ICPW90	NOT THERE 
	LDKL	A3,REGI	RETURN CODE 
	ADR	A3,A11 
	LDK	A2,2	LENGTH
	CF	A14,ICWRT	WRITE INTERTASK 
ICPW90	EQU	*
	RTN	A14
	EJECT
************************************************************* 
*                                                           * 
*        ICABOR       INTERTASK ABORT                       * 
*                                                           * 
************************************************************* 
ICABOR	EQU	*
	LDK	A7,0 
	CM	ECBBLK+IC,A11 
	LD	A8,ECBICR,A11 
	LKM
	DATA	10
	RTN	A14
	EJECT
********************************************************************* 
*                                                                   * 
*        COPP       COPY SCREEN BUFFER TO PRINTER                   * 
*                                                                   * 
********************************************************************* 
*                 REGISTERS 
* 
*   A2= CHAR. 
*   A3= SCREEN BUFFER POINTER 
*   A4= REL. SCREEN BUFFER ADDRESS
*   A5= LINE LENGTH 
*   A6= CURRENT ATTRIBUTE 
*   A8= ECB BUFFER POINTER
*   A9= ECB BUFFER INDEX
*   A10= INTERNAL STATUS
*   A11= TASK BLOCK BASE
*   A13= ECB BASE 
* 
********************************************************************* 
COPP	EQU	*	.	=2 
	LD	A8,ECBPRT,A11 
	LDK	A1,0 
	LDK	A6,0	RESET ATTRIBUTE 
	CF	A14,ATMASB	SEARCH ATTRIBUTE BACKWARDS 
	CM	LINCNT,A11	RESET LINE COUNTER 
	LD	A1,WCC,A11
	ANK	A1,/38	MASK RELEVANT 
	LDR	A5,A1
	ANK	A1,8	START PRINT?
	RF(Z)	COP900	NO FORGET IT
	SRL	A5,4 
	LC	A5,LINLEN,A5	GET LINE LENGTH
	LDR	A5,A5	NL,EM AND CR DET. LENGTH?
	RF(NZ)	COP100	NO 
	LD	A1,PRTTYP,A11	GET MAX LINE LENGTH 
	LC	A5,PRTLEN+1,A1
COP100	EQU	*
	LDKL	A3,BVDU 
	ADR	A3,A11 
	LD	A8,ECBBA,A8 
	CMR	A8	RESET CONTROL CHAR. 
	ADKL	A8,2
	SUR	A9,A9
	LDK	A2,0 
	LDK	A4,0 
	SUR	A10,A10	RESET STATUS 
COP200	EQU	*
	CWK	A4,LBVDU	ALL PRINTED?
	RF(NL)	COP850	YES
	CWR	A9,A5	LINE FULL? 
	RF(L)	COP400	NO
	CF	A14,PRLINE	PRINT LINE 
	LDR	A1,A1	PRINTER ERROR? 
	RF(NZ)	COP900	YES
COP400	EQU	*
	LCR	A2,A3	GET CHAR.
	ANK	A2,/FF 
	RF(Z)	COP650	NULL CHAR.
	CCK	A2,/8000	ATTRIBUTE?
	RF(L)	COP500	NO
	LDR	A6,A2	GET NEW ATTRIBUTE
	RF	COP650
COP500	EQU	*
	CCK	A2,/2020	ORDER?
	RF(L)	COP550	YES 
	XRKL	A10,CRREC	RESET 
	RF	COP600
COP550	EQU	*
	CF	A14,GETTAB	GET ORDERINDEX 
	CFR	A14,A1	TAKE CARE OF ORDER
	LDR	A1,A1	PRINTER ERROR? 
	RF(NZ)	COP900	YES
	LDR	A1,A10	GET STATUS
	RF(N)	COP800	GET NEXT CHAR.
	SLL	A1,1 
	RF(N)	COP850	END 
COP600	EQU	*
	LDR	A1,A6	CHECK IF NONPRINT
	ANK	A1,/C
	XRK	A1,/C
	RF(Z)	COP650	NONPRINT
	ORKL	A10,NTONLY	INIDICATE NOT ONLY NOT 
	RF	COP700
COP650	EQU	*
	LDK	A2,/20	REPLACE WITH SPACE
COP700	EQU	*
	SCR	A2,A8
	ADKL	A9,1
	ADKL	A8,1
COP800	EQU	*
	XRKL	A10,NXTCHA	RESET
	ADK	A3,1 
	ADK	A4,1 
	RB	COP200
COP850	EQU	*
	LDR	A9,A9	SOMETHING LEFT TO PRINT? 
	RF(Z)	COP900	NO
	CF	A14,PRLINE	PRINT LAST LINE
	ANKL	A10,ENDPRT	END MESS.? 
	RF(Z)	COP900	NO STOP IT
	ORKL	A10,NTONLY	INDICATE PRINTABLE 
	CF	A14,PRLINE	EXTRA LINE FEED
COP900	EQU	*
	LDR	A1,A1	PRINTER FAILED?
	RF(Z)	COP950	NO
	LDKL	A2,PRTERR	INDICATE ERROR
	ORS	A2,PRTMOD,A11
COP950	EQU	*
	RTN	A14
	EJECT
************************************************************************
* 
*	TABLE FOR PRINTERORDERS 
* 
************************************************************************
PRTORD	EQU	*
	DATA	/0004	NUMBER OF ORDER CODES 
	DATA	/0A0A,NL,NL,NL,NL	NEW LINE
	DATA	/0C0C,FFDUM,FFVAL,FFVAL,FFDUM	FORM FEED 
	DATA	/0D0D,CR,CR,CR,CR	CARR. RETURN
	DATA	/1919,EM,EM,EM,EM	END MESSAGE 
	DATA	INVAL	INVALID ORDER CODE
	EJECT
****************************************************************************
*                                                                          *
*        NL       NEW LINE                                                 *
*                                                                          *
****************************************************************************
NL	EQU	*
	CF	A14,PRLINE	PRINT LINE AFTER NEW LINE
	ORKL	A10,NXTCHA+NTONLY	GET NEXT CHAR.
	RTN	A14
	EJECT
**********************************************************************
*                                                                    *
*        FFDUM       SIMULATED FORM FEED                             *
*                                                                    *
**********************************************************************
FFDUM	EQU	* 
	CF	A14,FFCHK	CHECK IF FORM FEED IS VALID 
	LDR	A1,A1	VALID? 
	RF(NZ)	FFD400	NO 
	LDK	A7,0	RESET 
	LD	A1,PRTTYP,A11	TYPE OF PRINTER 
	LC	A7,PRTLEN,A1	PAGE SIZE
FFD100	EQU	*
	CW	A7,LINCNT,A11	NEW PAGE? 
	RF(L)	FFD200	YES BUT TO MANY 
	RF(E)	FFD300	YES FINISHED
	ORKL	A10,NTONLY
	ST	A7,REGI,A11	SAVE
	CF	A14,PRLINE	ADVANCE ONE LINE 
	LD	A7,REGI,A11	RESTORE 
	LDR	A1,A1	PRINTER ERROR? 
	RF(NZ)	FFD500	YES
	RB	FFD100
FFD200	EQU	*
	NGR	A1,A7
	ADS	A1,LINCNT,A11	TAKE AWAY ONE PAGE 
	RB	FFD100
FFD300	EQU	*
	CM	LINCNT,A11	TOP OF PAGE
	LDK	A2,/20	REPLACE FF WITH SPACE 
FFD400	EQU	*
	LDK	A1,0	RETURN CODE 
FFD500	EQU	*
	RTN	A14
	EJECT
********************************************************************* 
*                                                                   * 
*        FFVAL       FORM FEED                                       *
*                                                                   * 
********************************************************************* 
FFVAL	EQU	* 
	CF	A14,FFCHK	CHECK IF FF VALID 
	LDR	A1,A1	VALID? 
	RF(NZ)	FFV200	NO 
	LDK	A1,/31	FORM FEED	DK2 
	SC	A1,-1,A8	STORE FF CONTROL CHAR. 
	LDK	A2,/20	REPLACE FF WITH SPACE 
	CM	LINCNT,A11	TOP OF PAGE
FFV200	EQU	*
	LDK	A1,0	RETURN CODE 
	RTN	A14
	EJECT
**********************************************************************
*                                                                    *
*        CR       CARRIAGE RETURN                                    *
*                                                                    *
**********************************************************************
CR	EQU	*
	LDR	A1,A6	GET ATTRIBUTE
	ANK	A1,/C
	XRK	A1,/C	NONPRINT FIELD?
	RF(Z)	CR100	YES
	LD	A1,WCC,A11
	ANK	A1,/30	FORMATTED?
	RF(NZ)	CR100	NO
	ORKL	A10,NTONLY+CRREC	CR RECEIVED
CR100	EQU	* 
	LDK	A2,/20	REPLACE WITH SPACE
	LDK	A1,0	RETURN CODE 
	RTN	A14
	EJECT
********************************************************************* 
*                                                                  *
*        EM       END MESSAGE                                      *
*                                                                  *
********************************************************************
EM	EQU	*
	ORKL	A10,ENDPRT	END PRINTING 
	LDK	A1,0	RETURN CODE 
	RTN	A14
	EJECT
******************************************************************
*                                                                *
*        INVAL       INVALID PRINTER ORDER                       *
*                                                                *
******************************************************************
INVAL	EQU	* 
	LDK	A2,/20	REPLACE WITH SPACE
	ORKL	A10,NTONLY	NOT ONLY 
	LDK	A1,0	RETURN CODE 
	RTN	A14
	EJECT
***************************************************************** 
*                                                               * 
*        FFCHK       CHECK IF FF IS VALID                       * 
*                                                               * 
***************************************************************** 
FFCHK	EQU	* 
	LD	A1,WCC,A11
	ANK	A1,/30 
	XRK	A1,/30	FORMATTED?
	RF(NZ)	FFCH10	YES BUT NOT AS LOCAL HARDCOPY
	LD	A1,WCC,A11
	ANK	A1,/40	LOCAL HARD COPY?
	RF(NZ)	FFCH20	FF NOT ALLOWED	DK3 
FFCH10	EQU	*
	LDR	A9,A9	FF ALLOWED 
	RF(Z)	FFCH30	NOT 
	LDR	A1,A10 
	ANKL	A1,CRREC	CR RECEIVED? 
	RF(NZ)	FFCH30	YES
FFCH20	EQU	*
	LDK	A2,/20	REPLACE WITH SPACE
	LDK	A1,1	RETURN CODE 
	RF	FFCH40
FFCH30	EQU	*
	XRKL	A10,CRREC	RESET 
	LDR	A9,A9	EMPTY LINE 
	RF(Z)	FFCH35	YES 
	CF	A14,PRLINE	PRINT LINE 
FFCH35	EQU	*
	LDK	A1,0	RETURN CODE 
FFCH40	EQU	*
	ORKL	A10,NTONLY	NOT ONLY 
	RTN	A14
	EJECT
****************************************************************
*                                                              *
*        PRLINE       PRINT LINE                               *
*                                                              *
****************************************************************
PRLINE	EQU	*
	LD	A8,ECBPRT,A11 
	LDR	A1,A10 
	ANKL	A1,NTONLY	ONLY RUBB.? 
	RF(NZ)	PRL050	NO 
	LD	A1,WCC,A11
	LDR	A2,A1
	ANK	A1,/30 
	XRK	A1,/30	HRADCOPY? 
	RF(NZ)	PRL200	NO 
	ANK	A2,/40	HARDCOPY????? 
	RF(NZ)	PRL200	NO 
PRL050	EQU	*
	XRKL	A10,NTONLY	RESET
	IFT	SUPSPC=1		DK1
	LD	A1,ECBBA,A8	FIND LENGTH AND END OF BUFFER	DK1 
	ADK	A1,1	SKIP CONTROL CHARS.	DK1 
	ST	A1,ECBBA,A8		DK1
	LDR	A2,A9	GET REQ. LENGTH	DK1
	ADR	A1,A2	GET ADDR. TO END OF BUFFER	DK1 
	LDK	A2,0	CLEAR FOR CHAR. WORK	DK1
PRL060	EQU	*		DK1 
	LCR	A2,A1	GET A CHARACTER	DK1
	CCK	A2,/2020	SPACE ?	DK1 
	RF(NE)	PRL070	NO, FINISHED	DK1 
	SUK	A1,1	ADJUST POINTER	DK1
	CW	A1,ECBBA,A8	END OF BUFFER,(FRONT-END)	DK1 
	RF(E)	PRL070	YES, FINISHED	DK1 
	RB	PRL060	CONTINUE	DK1 
PRL070	EQU	*		DK1 
	LD	A2,ECBBA,A8	COMPUTE NEW LENGTH	DK1
	SUR	A1,A2		DK1 
	LDR	A9,A1	PUT IN NEW REQ, LENGTH	DK1 
PRL080	EQU	*		DK1 
	LD	A1,ECBBA,A8	RESTORE CONT.  CHAR.  ADDR.	DK1 
	SUK	A1,1		DK1
	ST	A1,ECBBA,A8		DK1
	XIF			DK1
	ADKL	A9,2
	ST	A9,ECBRL,A8 
	LDK	A7,/06	PRINT 
	LKM
	DATA	1 
	LDK	A1,50	NUMBER OF DELAYS 
PRL100	EQU	*
	LDKL	A8,1	WAIT FOR A WHILE 
	LKM
	DATA	6 
	LD	A8,ECBPRT,A11 
	LDR*	A2,A8	PRINT COMPL.? 
	RF(N)	PRL150	YES 
	SUK	A1,1	MORE TO WAIT FOR? 
	RB(NZ)	PRL100	YES
	LKM
	DATA	10	ABORT
	RF(N)	PRL150	FINSHED AT LAST 
	LDK	A1,1	NO CONSIDER IT AS #$&%$ 
	RF	PRL300
PRL150	EQU	*
	LKM	 
	DATA	2	RESYNCHRONIZE 
	IM	LINCNT,A11	ANOTHER LINE 
	LD	A1,ECBRC,A8	OK? 
	RF(NZ)	PRL300	NO 
PRL200	EQU	*
	LD	A8,ECBBA,A8	GET BUFFER ADDRESS
	CMR	A8	RESET CONTROL CHAR. 
	SUR	A9,A9
	ADKL	A8,2
	LDK	A1,0	RETURN CODE 
PRL300	EQU	*
	RTN	A14
	EJECT
******************************************************************* 
*                                                                 * 
*        INIT       INIT ROUTINE                                  * 
*                                                                 * 
******************************************************************* 
INIT	EQU	*
	CF	A14,COMINI	COMMON INIT
	CF	A14,ECBINI	INIT OF ECB:S
	LCR	A2,A1
	SLL	A2,8 
	LC	A2,+1,A1
	ST	A2,PRTID,A11	SAVE WHOLE TASKID
	LCR	A2,A1	GET TYPE OF PRINTER AND MAKE INDEX 
	LD	A7,PRTTAB	NUMBER OF TYPES 
	LDKL	A1,PRTTAB+2	START OF PRINTER TABLE
INI100	EQU	*
	CCR	A2,A1	CONVERT TYPE TO INDEX
	RF(E)	INI200 
	ADK	A1,4 
	SUK	A7,1	ILLEGAL ID? 
	RB(NZ)	INI100	NO 
	LDKL	A1,*
	ST	A1,REGI,A11 
	LKM
	DATA	3	FORGET IT 
INI200	EQU	*
	LD	A1,+2,A1
	ST	A1,PRTTYP,A11	SAVE PRINTER TYPE 
	RTN	A14
	EJECT
***************************************************************** 
*                                                               * 
*        TSTPRT       TEST HARDWARE                             * 
*                                                               * 
***************************************************************** 
TSTPRT	EQU	*
	LDK	A2,0 
	LD	A8,ECBPRT,A11 
	LDK	A7,/80	TEST STATUS 
TSTP10	EQU	*
	LKM
	DATA	1 
	LD	A1,ECBRC,A8 
	ANK	A1,1	OPERABLE? 
	RF(Z)	TSTP80	YES 
	LD	A2,PRTID,A11	NO INDICATE NOT OP. IN DEVICE TABLE
	ANK	A2,/FF 
	SUK	A2,/30 
	SLL	A2,2 
	LD	A3,+6,A13 
	LDK	A1,TSKTAB
	ADR	A3,A1
	ADR	A3,A2
	LDK	A1,1 
	SC	A1,+3,A3	INDICATE NOT OP. 
	LDR	A1,A8
	LDKL	A8,100
	LKM
	DATA	6 
	LDR	A8,A1
	LDK	A2,1	INDICATE ONCE NOT OP. 
	RB	TSTP10
TSTP80	EQU	*
	LDR	A2,A2	NOT OP. ONCE?
	RF(Z)	TSTP90	NO
	SC	A1,+3,A3	RESET STATUS 
TSTP90	EQU	*
	RTN	A14
	EJECT
******************************************************************* 
*                                                                 * 
*       GETTAB        GET ORDER INDEX                             * 
*                                                                 * 
******************************************************************* 
GETTAB	EQU	*
	LD	A7,PRTORD	NUMBER OF VALID ORDER CODES 
	LDKL	A1,PRTORD+2	ORDERTABLE BASE 
GETT10	EQU	*
	CCR	A2,A1	CONVERT ORDER CODE TO ADDRESS
	RF(E)	GETT20 
	AD	A1,PRTTAB 
	AD	A1,PRTTAB 
	ADK	A1,2 
	SUK	A7,1	ORDER FOUND?
	RF(Z)	GETT30	NO INVALID
	RB	GETT10	TRY AGAIN
GETT20	EQU	*
	ADK	A1,2 
	LD	A2,PRTTYP,A11 
	ADR	A1,A2
GETT30	EQU	*
	LDR*	A1,A1 
	RTN	A14

	END

Full view