LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (1)     147  LP11/LS11/LV11 FUNCTION DECISION TABLE

   (1)     175  SET CHARACTERISTICS AND SET MODE FUNCTION PROCE

   (1)     222  WRITE FUNCTION PROCESSING

   (1)     339  WRITE BYTE INTO SYSTEM BUFFER

   (1)     453  LINE PRINTER DRIVER

   (1)     547  LP11/LS11/LV11 LINE PRINTER INTERRUPT DISPATCHE

   (1)     579  LINE PRINTER UNIT INITIALIZATION

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   1

X05                                                                                                                              (1)



                                     0000     1 	.TITLE	LPDRIVER - LP11/LS11/LV11 LINE PRINTER DRIVER

                                     0000     2 	.IDENT	/X05/

                                     0000     3 

                                     0000     4 ;

                                     0000     5 ; COPYRIGHT (C) 1977

                                     0000     6 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754

                                     0000     7 ;

                                     0000     8 ; THIS SOFTWARE IS FURNISHED  UNDER A LICENSE FOR USE ONLY ON A SINGLE

                                     0000     9 ; COMPUTER  SYSTEM AND  MAY BE  COPIED ONLY WITH  THE INCLUSION OF THE

                                     0000    10 ; ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER COPIES THEREOF,

                                     0000    11 ; MAY NOT BE PROVIDED OR  OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON

                                     0000    12 ; EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE

                                     0000    13 ; TERMS.  TITLE TO AND  OWNERSHIP OF THE  SOFTWARE  SHALL AT ALL TIMES

                                     0000    14 ; REMAIN IN DEC.

                                     0000    15 ;

                                     0000    16 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE

                                     0000    17 ; AND SHOULD  NOT BE CONSTRUED  AS A COMMITMENT  BY DIGITAL  EQUIPMENT

                                     0000    18 ; CORPORATION.

                                     0000    19 ;

                                     0000    20 ; DEC ASSUMES  NO  RESPONSIBILITY  FOR  THE USE OR  RELIABILITY OF ITS

                                     0000    21 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

                                     0000    22 ;

                                     0000    23 ; R. HEINEN 6-SEP-76

                                     0000    24 ;

                                     0000    25 ; MODIFIED BY:

                                     0000    26 ;

                                     0000    27 ;	D. N. CUTLER 20-AUG-77

                                     0000    28 ;

                                     0000    29 ; LP11/LS11/LV11 LINE PRINTER DRIVER

                                     0000    30 ;

                                     0000    31 ; MACRO LIBRARY CALLS

                                     0000    32 ;

                                     0000    33  

                                     0000    34 	$CRBDEF				;DEFINE CRB OFFSETS

                                     0000    35 	$DDBDEF				;DEFINE DDB OFFSETS

                                     0000    36 	$DPTDEF				;DEFINE DPT OFFSETS

                                     0000    37 	$IDBDEF				;DEFINE IDB OFFSETS

                                     0000    38 	$IODEF				;DEFINE I/O FUNCTION CODES

                                     0000    39 	$IRPDEF				;DEFINE IRP OFFSETS

                                     0000    40 	$LPDEF				;DEFINE LINE PRINTER CHARACTERISTICS

                                     0000    41 	$MSGDEF				;DEFINE SYSTEM MESSAGE TYPES

                                     0000    42 	$PCBDEF				;DEFINE PCB OFFSETS

                                     0000    43 	$UCBDEF				;DEFINE UCB OFFSETS

                                     0000    44 	$VECDEF				;DEFINE VEC OFFSETS

                                     0000    45  

                                     0000    46 ;

                                     0000    47 ; LOCAL SYMBOLS

                                     0000    48 ;

                                     0000    49 ; ARGUMENT LIST OFFSET DEFINITIONS

                                     0000    50 ;

                                     0000    51  

                           00000000  0000    52 P1=0					;FIRST FUNCTION DEPENDENT PARAMETER

                           00000004  0000    53 P2=4					;SECOND FUNCTION DEPENDENT PARAMETER

                           00000008  0000    54 P3=8					;THIRD FUNCTION DEPENDENT PARAMETER

                           0000000C  0000    55 P4=12					;FOURTH FUNCTION DEPENDEND PARAMETER

                           00000010  0000    56 P5=16					;FIFTH FUNCTION DEPENDENT PARAMETER

                           00000014  0000    57 P6=20					;SIXTH FUNCTION DEPENDENT PARAMETER

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   2

X05                                                                                                                              (1)



                                     0000    58  

                                     0000    59 ;

                                     0000    60 ; CHARACTER CODE DEFINITIONS

                                     0000    61 ;

                                     0000    62  

                           0000000D  0000    63 C_CR=13					;CARRIAGE RETURN

                           0000000C  0000    64 C_FF=12					;FORM FEED

                           0000000B  0000    65 C_VT=11					;VERTICLE TAB

                           0000000A  0000    66 C_LF=10					;LINE FEED

                           00000009  0000    67 C_TAB=9					;TABULATION

                                     0000    68  

                                     0000    69 ;

                                     0000    70 ; FLAG REGISTER BIT DEFINITIONS

                                     0000    71 ;

                                     0000    72  

                           00000001  0000    73 M_CRPEND=1				;CARRIAGE RETURN PENDING

                           00000000  0000    74 V_CRPEND=0				;

                                     0000    75  

                                     0000    76 ;

                                     0000    77 ; LP11/LS11/LV11 DEVICE REGISTER OFFSET DEFINITIONS

                                     0000    78 ;

                                     0000    79  

                                     0000    80 	$DEFINI	LP

                                     0000    81  

                                     0000    82 $DEF	LP_CSR		.BLKW	1	;CONTROL STATUS REGISTER

                                     0002    83 $DEF	LP_DBR		.BLKW	1	;DATA BUFFER REGISTER

                                     0004    84  

                                     0004    85 	$DEFEND	LP

                                     0000    86  

                                     0000    87 ;

                                     0000    88 ; DEFINE DEVICE DEPENDENT UNIT CONTROL BLOCK OFFSETS

                                     0000    89 ;

                                     0000    90  

                                     0000    91 	$DEFINI	UCB

                                     0000    92  

                           00000074  0000    93 .=UCB$K_LENGTH				;

                                     0074    94  

                                     0074    95 $DEF	UCB$L_LP_MUTEX	.BLKL	1	;LINE PRINTER UCB MUTEX

                                     0078    96 $DEF	UCB$B_LP_CURSOR	.BLKB	1	;CURRENT HORIZONAL POSITION

                                     0079    97 $DEF	UCB$B_LP_LINCNT	.BLKB	1	;CURRENT LINE COUNT ON PAGE

                                     007A    98 $DEF	UCB$B_LP_OFLCNT	.BLKB	1	;OFFLINE TIME COUNTER

                           0000007C  007B    99 			.BLKB	1	;SPARE UNUSED BYTE

                                     007C   100  

                                     007C   101 	$DEFEND	UCB

                                     0000   102  

                                     0000   103 ;

                                     0000   104 ; LOCAL DATA

                                     0000   105 ;

                                     0000   106 ; DRIVER PROLOGUE TABLE

                                     0000   107 ;

                                     0000   108  

                                     0000   109 	DPTAB	-			;DEFINE DRIVER PROLOGUE TABLE

                                     0000   110 		END=LP_END,-		;END OF DRIVER

                                     0000   111 		ADAPTER=UBA,-		;ADAPTER TYPE

                                     0000   112 		UCBSIZE=124,-		;UCB SIZE

                                     0000   113 		NAME=LPDRIVER		;DRIVER NAME

                                     001F   114 	DPT_STORE INIT			;CONTROL BLOCK INIT VALUES

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   3

X05                                                                                                                              (1)



                                     001F   115 	DPT_STORE UCB,UCB$B_FIPL,B,8	;FORK IPL

                                     0023   116 	DPT_STORE UCB,UCB$L_DEVCHAR,L,-	;DEVICE CHARACTERISTICS

                                     0023   117 		<DEV$M_REC-		; RECORD ORIENTED

                                     0023   118 		!DEV$M_AVL-		; AVAILABLE

                                     0023   119 		!DEV$M_CCL-		; CARRIAGE CONTROL DEVICE

                                     0023   120 		!DEV$M_ODV>		; OUTPUT DEVICE

                                     002A   121 	DPT_STORE UCB,UCB$B_DEVCLASS,B,DC$_LP ;DEVICE CLASS

                                     002E   122 	DPT_STORE UCB,UCB$B_DEVTYPE,B,LP$_LP11 ;DEVICE TYPE

                                     0032   123 	DPT_STORE UCB,UCB$W_DEVBUFSIZ,W,132 ;DEFAULT BUFFER SIZE

                                     0037   124 	DPT_STORE UCB,UCB$L_DEVDEPEND,L,<64@24+LP$M_MECHFORM> ;PRINTER PARAMETERS

                                     003E   125 	DPT_STORE UCB,UCB$B_DIPL,B,20	;DEVICE IPL

                                     0042   126 	DPT_STORE UCB,UCB$L_LP_MUTEX,W,-1 ;INITIALIZE MUTEX

                                     0047   127 	DPT_STORE REINIT		;CONTROL BLOCK RE-INIT VALUES

                                     0047   128 	DPT_STORE CRB,CRB$L_INTD+4,D,LP$INT ;INTERRUPT SERVICE ROUTINE ADDRESS

                                     004C   129 	DPT_STORE CRB,CRB$L_INTD+VEC$L_INITIAL,D,LP_LX11_CINIT ;CONTROLLER INIT

                                     0051   130 	DPT_STORE CRB,CRB$L_INTD+VEC$L_UNITINIT,D,LP_LX11_INIT ;UNIT INIT

                                     0056   131 	DPT_STORE DDB,DDB$L_DDT,D,LP$DDT ;DDT ADDRESS

                                     005B   132 	DPT_STORE END			;

                                     0000   133  

                                     0000   134 ;

                                     0000   135 ; DRIVER DISPATCH TABLE

                                     0000   136 ;

                                     0000   137  

                                     0000   138 	DDTAB	LP,-			;DRIVER DISPATCH TABLE

                                     0000   139 		STARTIO,-		;START I/O OPERATION

                                     0000   140 		0,-			;UNSOLICITED INTERRUPT

                                     0000   141 		FUNCTABLE,-		;FUNCTION TABLE

                                     0000   142 		+IOC$CANCELIO,-		;CANCEL I/O

                                     0000   143 		0,-			;REGISTER DUMP ROUTINE

                                     0000   144 		0,-			;SIZE OF DIAGNOSTIC BUFFER

                                     0000   145 		0			;SIZE OF ERROR LOG BUFFER

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   4

X05             LP11/LS11/LV11 FUNCTION DECISION TABLE                                                                           (1)



                                     0018   147 	.SBTTL	LP11/LS11/LV11 FUNCTION DECISION TABLE

                                     0018   148 ;

                                     0018   149 ; LP11/LS11/LV11 FUNCTION DECISION TABLE

                                     0018   150 ;

                                     0018   151  

                                     0018   152 FUNCTABLE:				;FUNCTION DECISION TABLE

                                     0018   153 	FUNCTAB	,-			;LEGAL FUNCTIONS

                                     0018   154 		<SENSECHAR,-		;SENSE CHARACTERISTICS

                                     0018   155 		 SETCHAR,-		;SET CHARACTERISTICS

                                     0018   156 		 SENSEMODE,-		;SENSE MODE

                                     0018   157 		 SETMODE,-		;SET MODE

                                     0018   158 		 WRITELBLK,-		;WRITE LOGICAL BLOCK

                                     0018   159 		 WRITEPBLK,-		;WRITE PHYSICAL BLOCK

                                     0018   160 		 WRITEVBLK>		;WRITE VIRTUAL BLOCK

                                     0020   161 	FUNCTAB	,-			;LEGAL FUNCTIONS

                                     0020   162 		<SENSECHAR,-		;SENSE CHARACTERISTICS

                                     0020   163 		 SETCHAR,-		;SET CHARACTERISTICS

                                     0020   164 		 SENSEMODE,-		;SENSE MODE

                                     0020   165 		 SETMODE,-		;SET MODE

                                     0020   166 		 WRITELBLK,-		;WRITE LOGICAL BLOCK

                                     0020   167 		 WRITEPBLK,-		;WRITE PHYSICAL BLOCK

                                     0020   168 		 WRITEVBLK>		;WRITE VIRTUAL BLOCK

                                     0028   169 	FUNCTAB LP_WRITE,<WRITELBLK,WRITEPBLK,WRITEVBLK> ;WRITE FUNCTIONS

                                     0034   170 	FUNCTAB	LP_SETMODE,<SETCHAR,SETMODE> ;SET CHARACTERISTICS FUNCTIONS

                                     0040   171 	FUNCTAB	+EXE$SENSEMODE,-	;

                                     0040   172 		<SENSECHAR,-		;SENSE CHARACTERISTICS

                                     0040   173 		 SENSEMODE>		;SENSE MODE

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   5

X05             SET CHARACTERISTICS AND SET MODE FUNCTION PROCE                                                                  (1)



                                     004C   175 	.SBTTL	SET CHARACTERISTICS AND SET MODE FUNCTION PROCESSING

                                     004C   176 ;+

                                     004C   177 ; LP_SETMODE - SET CHARACTERISTICS AND SET MODE FUNCTION PROCESSING

                                     004C   178 ;

                                     004C   179 ; THIS ROUTINE IS CALLED FROM THE FUNCTION DECISION TABLE DISPATCHER TO PROCESS

                                     004C   180 ; A SET MODE FUNCTION TO A LINE PRINTER.

                                     004C   181 ;

                                     004C   182 ; INPUTS:

                                     004C   183 ;

                                     004C   184 ;	R0 = SCRATCH.

                                     004C   185 ;	R1 = SCRATCH.

                                     004C   186 ;	R2 = SCRATCH.

                                     004C   187 ;	R3 = ADDRESS OF I/O REQUEST PACKET.

                                     004C   188 ;	R4 = CURRENT PROCESS PCB ADDRESS.

                                     004C   189 ;	R5 = ASSIGNED DEVICE UCB ADDRESS.

                                     004C   190 ;	R6 = ADDRESS OF CCB.

                                     004C   191 ;	R7 = I/O FUNCTION CODE.

                                     004C   192 ;	R8 = FUNCTION DECISION TABLE DISPATCH ADDRESS.

                                     004C   193 ;	R9 = SCRATCH.

                                     004C   194 ;	R10 = SCRATCH.

                                     004C   195 ;	R11 = SCRATCH.

                                     004C   196 ;	AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

                                     004C   197 ;

                                     004C   198 ; OUTPUTS:

                                     004C   199 ;

                                     004C   200 ;	THE SPECIFIED CHARACTERISTICS ARE MOVED INTO THE DEVICE UCB AND THE

                                     004C   201 ;	I/O IS COMPLETED.

                                     004C   202 ;-

                                     004C   203  

                                     004C   204 LP_SETMODE:				;SET MODE FUNCTION PROCESSING

            51            6C     D0  004C   205 	MOVL	P1(AP),R1		;GET ADDRESS OF CHARACTERISTICS

                                     004F   206 	IFNORD	#8,(R1),20$		;CAN CHARACTERISTICS QUADWORD BE READ?

                          53     DD  0055   207 	PUSHL	R3			;SAVE PACKET ADDRESS

            50         74 A5     9E  0057   208 	MOVAB	UCB$L_LP_MUTEX(R5),R0	;GET ADDRESS OF UCB MUTEX

                 00000000'GF     16  005B   209 	JSB	G^SCH$LOCKW		;LOCK UCB FOR WRITE ACCESS

            57            23     D1  0061   210 	CMPL	#IO$_SETMODE,R7		;SET MODE FUNCTION?

                          04     13  0064   211 	BEQL	10$			;IF EQL YES

         38 A5            61     B0  0066   212 	MOVW	(R1),UCB$B_DEVCLASS(R5)	;SET DEVICE CLASS AND TYPE

         3A A5         02 A1     B0  006A   213 10$:	MOVW	2(R1),UCB$W_DEVBUFSIZ(R5) ;SET DEFAULT BUFFER SIZE

         3C A5         04 A1     D0  006F   214 	MOVL	4(R1),UCB$L_DEVDEPEND(R5) ;SET DEVICE CHARACTERISTICS

                 00000000'GF     16  0074   215 	JSB	G^SCH$UNLOCK		;UNLOCK UCB

                          53   8ED0  007A   216 	POPL	R3			;RESTORE PACKET

            50       0000'8F     3C  007D   217 	MOVZWL	#SS$_NORMAL,R0		;SET NORMAL COMPLETION STATUS

                 00000000'GF     17  0082   218 	JMP	G^EXE$FINISHIOC		;

            50       0000'8F     3C  0088   219 20$:	MOVZWL	#SS$_ACCVIO,R0		;SET ACCESS VIOLATION STATUS

                 00000000'GF     17  008D   220 	JMP	G^EXE$ABORTIO		;

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   6

X05             WRITE FUNCTION PROCESSING                                                                                        (1)



                                     0093   222 	.SBTTL	WRITE FUNCTION PROCESSING

                                     0093   223 ;+

                                     0093   224 ; LP_WRITE - WRITE FUNCTION PROCESSING

                                     0093   225 ;

                                     0093   226 ; THIS ROUTINE IS CALLED FROM THE FUNCTION DECISION TABLE DISPATCHER TO PROCESS

                                     0093   227 ; A WRITE PHYSICAL, WRITE LOGICAL, OR WRITE VIRTUAL FUNCTION TO A LINE PRINTER.

                                     0093   228 ;

                                     0093   229 ; INPUTS:

                                     0093   230 ;

                                     0093   231 ;	R0 = SCRATCH.

                                     0093   232 ;	R1 = SCRATCH.

                                     0093   233 ;	R2 = SCRATCH.

                                     0093   234 ;	R3 = ADDRESS OF I/O REQUEST PACKET.

                                     0093   235 ;	R4 = CURRENT PROCESS PCB ADDRESS.

                                     0093   236 ;	R5 = ASSIGNED DEVICE UCB ADDRESS.

                                     0093   237 ;	R6 = ADDRESS OF CCB.

                                     0093   238 ;	R7 = I/O FUNCTION CODE.

                                     0093   239 ;	R8 = FUNCTION DECISION TABLE DISPATCH ADDRESS.

                                     0093   240 ;	R9 = SCRATCH.

                                     0093   241 ;	R10 = SCRATCH.

                                     0093   242 ;	R11 = SCRATCH.

                                     0093   243 ;	AP = ADDRESS OF FIRST FUNCTION DEPENDENT PARAMETER.

                                     0093   244 ;

                                     0093   245 ; OUTPUTS:

                                     0093   246 ;

                                     0093   247 ;	THE FUNCTION PARAMETERS ARE CHECKED AND THE USER'S BUFFER IS FORMATTED

                                     0093   248 ;	AND COPIED INTO A SYSTEM BUFFER FOR PROCESSING BY THE LINE PRINTER

                                     0093   249 ;	DRIVER.

                                     0093   250 ;-

                                     0093   251  

                                     0093   252 LP_WRITE:				;WRITE FUNCTION PROCESSING

                          5B     D4  0093   253 	CLRL	R11			;CLEAR TOTAL NUMBER OF OVERHEAD BYTES

                          5A     D4  0095   254 	CLRL	R10			;ASSUME WRITE PASS ALL FUNCTION

            5E            5D     D0  0097   255 FORMAT:	MOVL	FP,SP			;REMOVE ALL TEMPORARIES FROM STACK

                     10F8 8F     BB  009A   256 	PUSHR	#^M<R3,R4,R5,R6,R7,AP>	;SAVE REGISTERS

            58            6C     D0  009E   257 	MOVL	P1(AP),R8		;GET STARTING ADDRESS OF USER BUFFER

            59         04 AC     3C  00A1   258 	MOVZWL	P2(AP),R9		;GET LENGTH OF USER BUFFER

            57            0B     D1  00A5   259 	CMPL	#IO$_WRITEPBLK,R7	;WRITE PHYSICAL BLOCK?

                          1B     13  00A8   260 	BEQL	10$			;IF EQL YES

         38 A3         0C AC     D0  00AA   261 	MOVL	P4(AP),IRP$B_CARCON(R3)	;INSERT CARRIAGE CONTROL INFORMATION

                 00000000'GF     16  00AF   262 	JSB	G^TT$CARRIAGE		;TRANSLATE CARRIAGE CONTROL INFORMATION

            50         38 A3     9A  00B5   263 	MOVZBL	IRP$B_CARCON(R3),R0	;GET NUMBER OF PREFIX CONTROL BYTES

            51         3A A3     9A  00B9   264 	MOVZBL	IRP$B_CARCON+2(R3),R1	;GET NUMBER OF SUFFIX CONTROL BYTES

            51            50     C0  00BD   265 	ADDL	R0,R1			;CALCULATE NUMBER OF CARRIAGE CONTROL BYTES

            5A         20 A14B   9E  00C0   266 	MOVAB	32(R1)[R11],R10		;CALCULATE TOTAL NUMBER OF OVERHEAD BYTES

                          59     D5  00C5   267 10$:	TSTL	R9			;ANY BUFFER SPECIFIED?

                          09     13  00C7   268 	BEQL	20$			;IF EQL NO

            50            58     7D  00C9   269 	MOVQ	R8,R0			;RETRIEVE BUFFER PARAMETERS

                 00000000'GF     16  00CC   270 	JSB	G^EXE$WRITECHK		;CHECK ACCESSIBILITY OF USER BUFFER

            51         0C A94A   9E  00D2   271 20$:	MOVAB	12(R9)[R10],R1		;CALCULATE LENGTH OF BUFFER REQUIRED

                 00000000'GF     16  00D7   272 	JSB	G^EXE$BUFFRQUOTA	;CHECK IF PROCESS HAS SUFFICIENT QUOTA

            77            50     E9  00DD   273 	BLBC	R0,45$			;IF LBC QUOTA CHECK FAILURE

                 00000000'GF     16  00E0   274 	JSB	G^EXE$ALLOCBUF		;ALLOCATE BUFFER FOR LINE PRINTER OUTPUT

            6E            50     E9  00E6   275 	BLBC	R0,45$			;IF LBC ALLOCATION FAILURE

            53            6E     D0  00E9   276 	MOVL	(SP),R3			;RETRIEVE ADDRESS OF I/O PACKET

         2C A3            52     D0  00EC   277 	MOVL	R2,IRP$L_SVAPTE(R3)	;SAVE ADDRESS OF BUFFERED I/O PACKET

         42 A4            51     A2  00F0   278 	SUBW	R1,PCB$W_BYTCNT(R4)	;ADJUST BUFFERED I/O QUOTA

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   7

X05             WRITE FUNCTION PROCESSING                                                                                        (1)



         30 A3            51     B0  00F4   279 	MOVW	R1,IRP$W_BOFF(R3)	;SET NUMBER OF BYTES CHARGED TO QUOTA

                       34 A3     D4  00F8   280 	CLRL	IRP$L_MEDIA(R3)		;CLEAR LINE FEED COUNT IN PACKET

         32 A3            59     B0  00FB   281 	MOVW	R9,IRP$W_BCNT(R3)	;INSERT SIZE OF USER BUFFER

            52         0C A2     9E  00FF   282 	MOVAB	12(R2),R2		;GET ADDRESS OF BUFFER DATA AREA

            50         74 A5     9E  0103   283 	MOVAB	UCB$L_LP_MUTEX(R5),R0	;GET ADDRESS OF UCB MUTEX

                 00000000'GF     16  0107   284 	JSB	G^SCH$LOCKW		;LOCK UCB FOR WRITE ACCESS

            57            0B     D1  010D   285 	CMPL	#IO$_WRITEPBLK,R7	;WRITE PASS ALL?

                          4F     13  0110   286 	BEQL	50$			;IF EQL YES

            51            0C     A2  0112   287 	SUBW	#12,R1			;CALCULATE ACTUAL LENGTH OF DATA AREA

            54         78 A5     9A  0115   288 	MOVZBL	UCB$B_LP_CURSOR(R5),R4	;GET CURRENT HORIZONAL CARRIAGE POSITION

            56         5A A5     3C  0119   289 	MOVZWL	UCB$W_DEVSTS(R5),R6	;GET CURRENT CARRIAGE RETURN PENDING FLAG

            57         79 A5     9A  011D   290 	MOVZBL	UCB$B_LP_LINCNT(R5),R7	;GET CURRENT LINE ON PAGE

            5A         3A A5     9A  0121   291 	MOVZBL	UCB$W_DEVBUFSIZ(R5),R10	;GET WIDTH OF PRINTER CARRIAGE

            5C            20     D0  0125   292 	MOVL	#^X20,AP		;ASSUME PRINTER DOES NOT HAVE LOWER CASE

         3C A5            07     E1  0128   293 	BBC	#LP$V_LOWER,UCB$L_DEVDEPEND(R5),35$ ;IF CLR, NO LOWER CASE

                          02         012C       

                          5C     D4  012D   294 	CLRL	AP			;SET FOR PRINTER WITH LOWER CASE

                          51     10  012F   295 35$:	BSBB	70$			;INSERT PREFIX CARRIAGE CONTROL

                          59     D7  0131   296 30$:	DECL	R9			;ANY MORE BYTES TO TRANSFER TO SYSTEM BUFFER?

                          07     19  0133   297 	BLSS	40$			;IF LSS NO

            50            88     9A  0135   298 	MOVZBL	(R8)+,R0		;GET NEXT BYTE FROM USER BUFFER

                          70     10  0138   299 	BSBB	WRITE_BYTE		;WRITE BYTE IN SYSTEM BUFFER

                          F5     11  013A   300 	BRB	30$			;

                          50     10  013C   301 40$:	BSBB	80$			;INSERT SUFFIX CARRIAGE CONTROL IN BUFFER

            52         2C A3     C2  013E   302 	SUBL	IRP$L_SVAPTE(R3),R2	;CALCULATE LENGTH OF OUTPUT PLUS HEADER

            52            0C     A3  0142   303 	SUBW3	#12,R2,IRP$L_MEDIA+2(R3) ;CALCULATE ACTUAL LENGTH OF OUTPUT BUFFER

                       36 A3         0145       

         78 A5            54     90  0147   304 	MOVB	R4,UCB$B_LP_CURSOR(R5)	;SAVE CURRENT HORIZONAL CARRIAGE POSITION

            00            56     F0  014B   305 	INSV	R6,#V_CRPEND,#1,UCB$W_DEVSTS(R5) ;SAVE CARRIAGE RETURN PENDING

         5A A5            01         014E       

         79 A5            57     90  0151   306 	MOVB	R7,UCB$B_LP_LINCNT(R5)	;SAVE CURRENT LINE ON PAGE

                          12     11  0155   307 	BRB	60$			;

                     10F8 8F     BA  0157   308 45$:	POPR	#^M<R3,R4,R5,R6,R7,AP>	;RESTORE REGISTERS

                 00000000'GF     17  015B   309 	JMP	G^EXE$ABORTIO		;

         36 A3            59     B0  0161   310 50$:	MOVW	R9,IRP$L_MEDIA+2(R3)	;INSERT NUMBER OF BYTES TO PRINT

            68            59     28  0165   311 	MOVC	R9,(R8),(R2)		;MOVE CHARACTERS TO SYSTEM BUFFER

                          62         0168       

                     10F8 8F     BA  0169   312 60$:	POPR	#^M<R3,R4,R5,R6,R7,AP>	;RESTORE REGISTERS

                          53     DD  016D   313 	PUSHL	R3			;SAVE ADDRESS OF I/O PACKET

            50         74 A5     9E  016F   314 	MOVAB	UCB$L_LP_MUTEX(R5),R0	;GET ADDRESS OF UCB MUTEX

                 00000000'GF     16  0173   315 	JSB	G^SCH$UNLOCK		;UNLOCK UCB

                          53   8ED0  0179   316 	POPL	R3			;RESTORE ADDRESS OF I/O PACKET

                 00000000'GF     17  017C   317 	JMP	G^EXE$QIODRVPKT		;QUEUE I/O PACKET TO DRIVER

                                     0182   318  

                                     0182   319 ;

                                     0182   320 ; SUBROUTINE TO INSERT CARRIAGE CONTROL IN BUFFER

                                     0182   321 ;

                                     0182   322  

            7E         38 A3     9A  0182   323 70$:	MOVZBL	IRP$B_CARCON(R3),-(SP)	;GET NUMBER OF CHARACTERS TO OUTPUT

                          1F     13  0186   324 	BEQL	100$			;IF EQL NONE

            50         39 A3     9A  0188   325 	MOVZBL	IRP$B_CARCON+1(R3),R0	;GET CHARACTER TO OUTPUT

                          0A     11  018C   326 	BRB	85$			;

            7E         3A A3     9A  018E   327 80$:	MOVZBL	IRP$B_CARCON+2(R3),-(SP) ;GET NUMBER OF CHARACTERS TO OUTPUT

                          13     13  0192   328 	BEQL	100$			;IF EQL NONE

            50         3B A3     9A  0194   329 	MOVZBL	IRP$B_CARCON+3(R3),R0	;GET CHARACTER TO OUTPUT

                          08     12  0198   330 85$:	BNEQ	90$			;IF NEQ CHARACTER SPECIFIED

            50            0D     9A  019A   331 	MOVZBL	#C_CR,R0		;GET CARRIAGE RETURN

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   8

X05             WRITE FUNCTION PROCESSING                                                                                        (1)



                          0B     10  019D   332 	BSBB	WRITE_BYTE		;WRITE BYTE IN SYSTEM BUFFER

            50            0A     9A  019F   333 	MOVZBL	#C_LF,R0		;GET LINE FEED

                          06     10  01A2   334 90$:	BSBB	WRITE_BYTE		;WRITE BYTE IN SYSTEM BUFFER

            FB            6E     F5  01A4   335 	SOBGTR	(SP),90$		;ANY MORE LEFT TO INSERT?

                          8E     D5  01A7   336 100$:	TSTL	(SP)+			;REMOVE COUNT FROM STACK

                                 05  01A9   337 	RSB				;

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page   9

X05             WRITE BYTE INTO SYSTEM BUFFER                                                                                    (1)



                                     01AA   339 	.SBTTL	WRITE BYTE INTO SYSTEM BUFFER

                                     01AA   340 ;

                                     01AA   341 ; SUBROUTINE TO FORMAT AND FILL SYSTEM BUFFER WITH LINE PRINTER OUTPUT ONE BYTE

                                     01AA   342 ; AT A TIME.

                                     01AA   343 ;

                                     01AA   344  

                                     01AA   345 WRITE_BYTE:				;WRITE BYTE INTO BUFFER

            50            20     D1  01AA   346 	CMPL	#^A/ /,R0		;CONTROL CHARACTER?

                          22     1A  01AD   347 	BGTRU	40$			;IF GTRU YES

            56            00     E4  01AF   348 	BBSC	#V_CRPEND,R6,60$	;IF SET, CARRIAGE RETURN PENDING

                          32         01B2       

            50         60 8F     91  01B3   349 	CMPB	#^A/`/,R0		;POSSIBLY LOWER CASE CHARACTER?

                          09     1A  01B7   350 	BGTRU	10$			;IF GTRU NO

            50         7F 8F     91  01B9   351 	CMPB	#^X7F,R0		;DELETE CHARACTER?

                          11     13  01BD   352 	BEQL	30$			;IF EQL YES

            50            5C     C2  01BF   353 	SUBL	AP,R0			;CONVERT CHARACTER TO UPPER CASE

            5A            54     D1  01C2   354 10$:	CMPL	R4,R10			;STILL ROOM ON CURRENT LINE?

                          09     1A  01C5   355 	BGTRU	30$			;IF GTRU NO

                          54     D6  01C7   356 	INCL	R4			;INCREMENT HORIZONAL POSITION

                          51     D7  01C9   357 20$:	DECL	R1			;ANY ROOM LEFT IN SYSTEM BUFFER?

                          7B     19  01CB   358 	BLSS	150$			;IF LSS NO

            82            50     90  01CD   359 	MOVB	R0,(R2)+		;INSERT CHARACTER IN SYSTEM BUFFER

                                 05  01D0   360 30$:	RSB				;

                                     01D1   361  

                                     01D1   362 ;

                                     01D1   363 ; CONTROL CHARACTER ENCOUNTERED

                                     01D1   364 ;

                                     01D1   365  

            50            0D     D1  01D1   366 40$:	CMPL	#C_CR,R0		;CARRIAGE RETURN?

                          0B     1F  01D4   367 	BLSSU	50$			;IF LSS NO

                          19     1A  01D6   368 	BGTRU	70$			;IF GTRU NO

         3C A5            00     E0  01D8   369 	BBS	#LP$V_CR,UCB$L_DEVDEPEND(R5),140$ ;IF SET, CARRIAGE RETURN REQUIRED

                          66         01DC       

            56            01     C8  01DD   370 	BISL	#M_CRPEND,R6		;SET CARRIAGE RETURN PENDING

                                 05  01E0   371 	RSB				;

            56            00     E5  01E1   372 50$:	BBCC	#V_CRPEND,R6,20$	;IF CLR, CARRIAGE RETURN NOT PENDING

                          E4         01E4       

                          50     DD  01E5   373 60$:	PUSHL	R0			;SAVE CURRENT CHARACTER

            50            0D     9A  01E7   374 	MOVZBL	#C_CR,R0		;GET CARRIAGE RETURN CHARACTER

                          57     10  01EA   375 	BSBB	140$			;INSERT CARRIAGE RETURN IN BUFFER

                          50   8ED0  01EC   376 	POPL	R0			;RETRIEVE CURRENT CHARACTER

                          B9     11  01EF   377 	BRB	WRITE_BYTE		;

                                     01F1   378  

                                     01F1   379 ;

                                     01F1   380 ; CHARACTER IS A TAB, LINE FEED, VERTICLE TAB, OR FORM FEED

                                     01F1   381 ;

                                     01F1   382  

            50            09     D1  01F1   383 70$:	CMPL	#C_TAB,R0		;TABULATION CHARACTER?

                          EB     1A  01F4   384 	BGTRU	50$			;IF GTRU NO

                          12     1F  01F6   385 	BLSSU	80$			;IF LSSU NO

                                     01F8   386  

                                     01F8   387 ;

                                     01F8   388 ; CHARACTER IS A TAB

                                     01F8   389 ;

                                     01F8   390  

            56            00     E4  01F8   391 	BBSC	#V_CRPEND,R6,60$	;IF SET, CARRIAGE RETURN PENDING

                          E9         01FB       

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  10

X05             WRITE BYTE INTO SYSTEM BUFFER                                                                                    (1)



                       08 A4     9F  01FC   392 	PUSHAB	8(R4)			;CALCULATE NEXT TAB POSITION

            6E            07     CA  01FF   393 	BICL	#7,(SP)			;CLEAR EXCESS BITS

            6E            54     C2  0202   394 	SUBL	R4,(SP)			;CALCULATE BLANK COUNT

            50            20     9A  0205   395 	MOVZBL	#^A/ /,R0		;SET SPACE CHARACTER

                          20     11  0208   396 	BRB	100$			;

                                     020A   397  

                                     020A   398 ;

                                     020A   399 ; CHARACTER IS A LINE FEED, VERTICLE TAB, OR FORM FEED

                                     020A   400 ;

                                     020A   401  

            50            0B     D1  020A   402 80$:	CMPL	#C_VT,R0		;VERTICLE TAB?

                          D2     13  020D   403 	BEQL	50$			;IF EQL YES

                          22     1A  020F   404 	BGTRU	110$			;IF GTRU LINE FEED

                                     0211   405  

                                     0211   406 ;

                                     0211   407 ; CHARACTER IS A FORM FEED

                                     0211   408 ;

                                     0211   409  

            50         3F A5     9A  0211   410 	MOVZBL	UCB$L_DEVDEPEND+3(R5),R0 ;GET NUMBER OF LINES PER PAGE

            50            54     C3  0215   411 	SUBL3	R4,R0,-(SP)		;CALCULATE NUMBER OF LINES TO END OF PAGE

                          7E         0218       

         3C A5            01     E1  0219   412 	BBC	#LP$V_MECHFORM,UCB$L_DEVDEPEND(R5),90$ ;IF CLR, NO MECHANICAL FEED

                          09         021D       

         34 A3            8E     C0  021E   413 	ADDL	(SP)+,IRP$L_MEDIA(R3)	;UPDATE NUMBER OF LINES PRINTED

            50            0C     9A  0222   414 	MOVZBL	#C_FF,R0		;SET FORM FEED CHARACTER

                          17     11  0225   415 	BRB	120$			;

            50            0A     9A  0227   416 90$:	MOVZBL	#C_LF,R0		;SET LINE FEED CHARACTER

                          FF7D   30  022A   417 100$:	BSBW	WRITE_BYTE		;INSERT BYTE IN SYSTEM BUFFER

            FA            6E     F5  022D   418 	SOBGTR	(SP),100$		;ANY MORE BYTES TO INSERT?

                          8E     D5  0230   419 	TSTL	(SP)+			;REMOVE LOOP COUNT FROM STACK

                                 05  0232   420 	RSB				;

                                     0233   421  

                                     0233   422 ;

                                     0233   423 ; CHARACTER IS A LINE FEED

                                     0233   424 ;

                                     0233   425  

                          57     D6  0233   426 110$:	INCL	R7			;INCREMENT LINE POSITION ON PAGE

                       34 A3     D6  0235   427 	INCL	IRP$L_MEDIA(R3)		;INCREMENT NUMBER OF LINES PRINTED

         3F A5            57     91  0238   428 	CMPB	R7,UCB$L_DEVDEPEND+3(R5) ;END OF PAGE?

                          02     12  023C   429 	BNEQ	130$			;IF NEQ NO

                          57     D4  023E   430 120$:	CLRL	R7			;CLEAR LINE POSITION ON PAGE

            56            01     CA  0240   431 130$:	BICL	#M_CRPEND,R6		;CLEAR CARRIAGE RETURN PENDING

                          54     D4  0243   432 140$:	CLRL	R4			;CLEAR HORIZONAL POSITION

                          FF81   31  0245   433 	BRW	20$			;

                                     0248   434  

                                     0248   435 ;

                                     0248   436 ; OUTPUT WILL NOT FIT IN ALLOCATED BUFFER

                                     0248   437 ;

                                     0248   438  

            50         2C A3     D0  0248   439 150$:	MOVL	IRP$L_SVAPTE(R3),R0	;GET ADDRESS OF BUUFER TO DEALLOCATE

                       2C A3     D4  024C   440 	CLRL	IRP$L_SVAPTE(R3)	;INDICATE NO BUFFER ALLOCATED

            5A         08 A0     3C  024F   441 	MOVZWL	IRP$W_SIZE(R0),R10	;SAVE SIZE OF BUFFER

                 00000000'GF     16  0253   442 	JSB	G^EXE$DEANONPAGED	;DEALLOCATE BUFFER

            5E         E8 AD     9E  0259   443 	MOVAB	-4*6(FP),SP		;REMOVE ALL TEMPORARIES FROM STACK

                     10F8 8F     BA  025D   444 	POPR	#^M<R3,R4,R5,R6,R7,AP>	;RESTORE REGISTERS

         42 A4            5A     A0  0261   445 	ADDW	R10,PCB$W_BYTCNT(R4)	;ADJUST BYTE COUNT QUOTA

            5B            20     C0  0265   446 	ADDL	#32,R11			;ADJUST COUNT OF OVERHEAD BYTES

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  11

X05             WRITE BYTE INTO SYSTEM BUFFER                                                                                    (1)



                          53     DD  0268   447 	PUSHL	R3			;SAVE ADDRESS OF I/O PACKET

            50         74 A5     9E  026A   448 	MOVAB	UCB$L_LP_MUTEX(R5),R0	;GET ADDRESS OF UCB MUTEX

                 00000000'GF     16  026E   449 	JSB	G^SCH$UNLOCK		;UNLOCK UCB

                          53   8ED0  0274   450 	POPL	R3			;RESTORE ADDRESS OF I/O PACKET

                          FE1D   31  0277   451 	BRW	FORMAT			;TRY AGAIN

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  12

X05             LINE PRINTER DRIVER                                                                                              (1)



                                     027A   453 	.SBTTL	LINE PRINTER DRIVER

                                     027A   454 ;+

                                     027A   455 ; STARTIO - START I/O OPERATION ON LINE PRINTERS

                                     027A   456 ;

                                     027A   457 ; THIS ROUTINE IS ENTERED WHEN THE ASSOCIATED UNIT IS IDLE AND A PACKET

                                     027A   458 ; IS AVAILABLE.

                                     027A   459 ;

                                     027A   460 ; INPUTS:

                                     027A   461 ;

                                     027A   462 ;	R3 = ADDRESS OF I/O REQUEST PACKET.

                                     027A   463 ;	R5 = UCB ADDRESS FOR IDLE UNIT.

                                     027A   464 ;

                                     027A   465 ; OUTPUTS:	

                                     027A   466 ;

                                     027A   467 ;	NO EXPLICIT OUTPUTS - THE UNIT IS IN WAITING FOR INTERRPUT STATE

                                     027A   468 ;				OR THE I/O IS COMPLETE.

                                     027A   469 ;-

                                     027A   470  

                                     027A   471 STARTIO:

            53         4C A5     D0  027A   472 	MOVL	UCB$L_IRP(R5),R3	;RETRIEVE ADDRESS OF I/O PACKET

         6C A5         36 A3     B0  027E   473 	MOVW	IRP$L_MEDIA+2(R3),UCB$W_BOFF(R5) ;SET NUMBER OF CHARACTERS TO PRINT

            53         68 A5     D0  0283   474 	MOVL	UCB$L_SVAPTE(R5),R3	;GET ADDRESS OF SYSTEM BUFFER

            53         0C A3     9E  0287   475 	MOVAB	12(R3),R3		;GET ADDRESS OF DATA AREA

            54         20 A5     D0  028B   476 	MOVL	UCB$L_CRB(R5),R4	;GET ADDRESS OF CRB

            54         1C B4     D0  028F   477 	MOVL	@CRB$L_INTD+VEC$L_IDB(R4),R4 ;GET DEVICE CSR ADDRESS

                                     0293   478  

                                     0293   479 ;

                                     0293   480 ; START NEXT OUTPUT SEQUENCE

                                     0293   481 ;

                                     0293   482  

            54            02     C1  0293   483 10$:	ADDL3	#LP_DBR,R4,R0		;CALCULATE ADDRESS OF DATA BUFFER REGISTER

                          50         0296       

            51         6C A5     3C  0297   484 	MOVZWL	UCB$W_BOFF(R5),R1	;GET NUMBER OF CHARACTERS REMAINING

            52       8080 8F     B0  029B   485 	MOVW	#^X8080,R2		;GET CONTROL REGISTER TEST MASK

                          08     11  02A0   486 	BRB	25$			;

            64            52     B3  02A2   487 20$:	BITW	R2,(R4)			;PRINTER READY OR HAVE PAPER PROBLEM?

                          08     15  02A5   488 	BLEQ	30$			;IF LEQ NOT READY OR PAPER PROBLEM

            60            83     90  02A7   489 	MOVB	(R3)+,(R0)		;OUTPUT NEXT CHARACTER

            F5            51     F4  02AA   490 25$:	SOBGEQ	R1,20$			;ANY MORE CHARACTERS TO OUTPUT?

                          70     11  02AD   491 	BRB	70$			;

                                     02AF   492  

                                     02AF   493 ;

                                     02AF   494 ; PRINTER IS NOT READY OR HAS PAPER PROBLEM

                                     02AF   495 ;

                                     02AF   496  

                          21     12  02AF   497 30$:	BNEQ	40$			;IF NEQ PAPER PROBLEM

            51            01     A1  02B1   498 	ADDW3	#1,R1,UCB$W_BOFF(R5)	;SAVE NUMBER OF CHARACTERS REMAINING

                       6C A5         02B4       

                                     02B6   499 	DSBINT				;DISABLE INTERRUPTS

            64         40 8F     88  02BC   500 	BISB	#^X40,LP_CSR(R4)	;SET INTERRUPT ENABLE

                                     02C0   501 	WFIKPCH	40$,#12			;WAIT FOR INTERRUPT

                                     02CA   502 	IOFORK				;CREATE A FORK PROCESS

                          C1     11  02D0   503 	BRB	10$			;

                                     02D2   504  

                                     02D2   505 ;

                                     02D2   506 ; PRINTER HAS PAPER PROBLEM

                                     02D2   507 ;

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  13

X05             LINE PRINTER DRIVER                                                                                              (1)



                                     02D2   508  

                       7A A5     94  02D2   509 40$:	CLRB	UCB$B_LP_OFLCNT(R5)	;CLEAR OFFLINE COUNTER

            51            01     A1  02D5   510 	ADDW3	#1,R1,UCB$W_BOFF(R5)	;SAVE NUMBER OF CHARACTERS REMAINING

                       6C A5         02D8       

                          64     B4  02DA   511 50$:	CLRW	LP_CSR(R4)		;DISABLE PRINTER INTERRUPT

                                     02DC   512 	SETIPL	UCB$B_FIPL(R5)		;LOWER TO FORK LEVEL

                          64     B5  02E0   513 	TSTW	LP_CSR(R4)		;PRINTER STILL HAVE PAPER PROBLEM?

                          96     14  02E2   514 	BGTR	STARTIO			;IF GTR NO

         58 A5            03     E0  02E4   515 	BBS	#UCB$V_CANCEL,UCB$W_STS(R5),80$ ;IF SET, CANCEL I/O OPERATION

                          40         02E8       

            01            0F     9D  02E9   516 	ACBB	#15,#1,UCB$B_LP_OFLCNT(R5),60$ ;SKIP UNTIL TIMEOUT

            0017       7A A5         02EC       

                       7A A5     94  02F0   517 	CLRB	UCB$B_LP_OFLCNT(R5)	;RESET COUNTER

                          18     BB  02F3   518 	PUSHR	#^M<R3,R4>		;SAVE REGISTERS

            54            05     9A  02F5   519 	MOVZBL	#MSG$_DEVOFFLIN,R4	;SET UP MESSAGE TYPE

            53   00000000'GF     9E  02F8   520 	MOVAB	G^SYS$GL_OPRMBX,R3	;ADDRESS TARGET MAILBOX

                 00000000'GF     16  02FF   521 	JSB	G^EXE$SNDEVMSG		;SEND MESSAGE IGNORE ERROR

                          18     BA  0305   522 	POPR	#^M<R3,R4>		;RESTORE REGISTERS

                                     0307   523 60$:	DSBINT				;DISABLE INTERRUPTS

                                     030D   524 	WFIKPCH	50$,#2			;WAIT FOR AN INTERRUPT OR TIMEOUT 2 SEC

                                     0317   525 	IOFORK				;CREATE FOR PROCESS

                          BB     11  031D   526 	BRB	50$			;

                                     031F   527  

                                     031F   528 ;

                                     031F   529 ; I/O OPERATION SUCCESSFULLY COMPLETED

                                     031F   530 ;

                                     031F   531  

            50       0000'8F     3C  031F   532 70$:	MOVZWL	#SS$_NORMAL,R0		;SET NORMAL COMPLETION STATUS

                       6C A5     B4  0324   533 	CLRW	UCB$W_BOFF(R5)		;CORRECT REMAINING CHARACTER COUNT

                          05     11  0327   534 	BRB 	90$			;

                                     0329   535  

                                     0329   536 ;

                                     0329   537 ; I/O OPERATION CANCELED

                                     0329   538 ;

                                     0329   539  

            50       0000'8F     3C  0329   540 80$:	MOVZWL	#SS$_ABORT,R0		;SET OPERATION ABORTED STATUS

            53         4C A5     D0  032E   541 90$:	MOVL	UCB$L_IRP(R5),R3	;RETRIEVE ADDRESS OF I/O PACKET

            51         34 A3     3C  0332   542 	MOVZWL	IRP$L_MEDIA(R3),R1	;GET NUMBER OF LINES PRINTED

         6E A5         6C A5     A2  0336   543 	SUBW	UCB$W_BOFF(R5),UCB$W_BCNT(R5) ;CALCULATE NUMBER OF CHARACTERS

            10         6E A5     F0  033B   544 	INSV	UCB$W_BCNT(R5),#16,#16,R0 ;INSERT NUMBER OF CHARACTERS IN STATUS

            50            10         033F       

                                     0341   545 	REQCOM				;COMPLETE I/O REQUEST

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  14

X05             LP11/LS11/LV11 LINE PRINTER INTERRUPT DISPATCHE                                                                  (1)



                                     0347   547 	.SBTTL	LP11/LS11/LV11 LINE PRINTER INTERRUPT DISPATCHER

                                     0347   548 ;+

                                     0347   549 ; LP$INT - LP11/LS11/LV11 LINE PRINTER INTERRUPT DISPATCHER.

                                     0347   550 ;

                                     0347   551 ; THIS ROUTINE IS ENTERED VIA A JSB INSTRUCTION WHEN AN INTERRUPT OCCURS ON AN

                                     0347   552 ; LP11/LS11/LV11 LINE PRINTER CONTROLLER. THE STATE OF THE STACK ON ENTRY IS:

                                     0347   553 ;

                                     0347   554 ;	00(SP) = ADDRESS OF IDB ADDRESS.

                                     0347   555 ;	04(SP) = SAVED R3.

                                     0347   556 ;	08(SP) = SAVED R4.

                                     0347   557 ;	12(SP) = SAVED R5.

                                     0347   558 ;	16(SP) = INTERRUPT PC.

                                     0347   559 ;	20(SP) = INTERRUPT PSL.

                                     0347   560 ;

                                     0347   561 ; INTERRUPT DISPATCHING OCCURS AS FOLLOWS:

                                     0347   562 ;

                                     0347   563 ;	IF THE INTERRUPT IS EXPECTED, THEN THE DRIVER IS CALLED AT ITS INTERRUPT

                                     0347   564 ;	WAIT ADDRESS. ELSE THE INTERRUPT IS DISMISSED.

                                     0347   565 ;-

                                     0347   566  

                                     0347   567 LP$INT::				;ENTRY FROM DISPATCH

            53            9E     D0  0347   568 	MOVL	@(SP)+,R3		;GET ADDRESS OF IDB

            54            63     7D  034A   569 	MOVQ	IDB$L_CSR(R3),R4	;GET CONTROLLER CSR AND OWNER UCB ADDRESS

         58 A5            01     E5  034D   570 	BBCC	#UCB$V_INT,UCB$W_STS(R5),10$ ;IF CLR, INTERRUPT NOT EXPECTED

                          09         0351       

                          64     B4  0352   571 	CLRW	(R4)			;DISABLE OUTPUT INTERRUPTS

            53         10 A5     D0  0354   572 	MOVL	UCB$L_FR3(R5),R3	;RESTORE REMAINDER OF DRIVER CONTEXT

                       0C B5     16  0358   573 	JSB	@UCB$L_FPC(R5)		;CALL DRIVER AT INTERRUPT WAIT ADDRESS

            50            8E     7D  035B   574 10$:	MOVQ	(SP)+,R0		;RESTORE REGISTERS

            52            8E     7D  035E   575 	MOVQ	(SP)+,R2		;

            54            8E     7D  0361   576 	MOVQ	(SP)+,R4		;

                                 02  0364   577 	REI				;

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  15

X05             LINE PRINTER UNIT INITIALIZATION                                                                                 (1)



                                     0365   579 	.SBTTL	LINE PRINTER UNIT INITIALIZATION

                                     0365   580 ;+

                                     0365   581 ; LP_LX11_INIT - LINE PRINTER UNIT INITIALIZATION

                                     0365   582 ;

                                     0365   583 ; THIS ROUTINE IS CALLED AT SYSTEM STARTUP AND AFTER A POWER FAILURE. THE

                                     0365   584 ; ONLINE BIT IS SET FOR THE SPECIFIED UNIT.

                                     0365   585 ;

                                     0365   586 ; INPUTS:

                                     0365   587 ;

                                     0365   588 ;	R5 = ADDRESS OF DEVICE UCB.

                                     0365   589 ;

                                     0365   590 ; OUTPUTS:

                                     0365   591 ;

                                     0365   592 ;	THE ONLINE BIT IS SET IN THE DEVICE UCB AND THE ADDRESS OF THE UCB

                                     0365   593 ;	IS FILLED INTO THE IDB OWNER FIELD.

                                     0365   594 ;-

                                     0365   595  

                                     0365   596 LP_LX11_INIT:				;LINE PRINTER UNIT INITIALIZATION

         58 A5            10     A8  0365   597 	BISW	#UCB$M_ONLINE,UCB$W_STS(R5) ;SET UNIT ONLINE

            50         20 A5     D0  0369   598 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF CRB

            50         1C A0     D0  036D   599 	MOVL	CRB$L_INTD+VEC$L_IDB(R0),R0 ;GET ADDRESS OF IDB

         04 A0            55     D0  0371   600 	MOVL	R5,IDB$L_OWNER(R0)	;SET ADDRESS OF DEVICE UCB

                                     0375   601 LP_LX11_CINIT:				;NULL CONTROLLER INITIALIZATION

                                 05  0375   602 	RSB				;

                                     0376   603 LP_END:					;ADDRESS OF LAST LOCATION IN DRIVER

                                     0376   604  

                                     0376   605 	.END

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  16

SYMBOL TABLE                                                                                                                     (1)



$$OP           = 00000002            DPT$V_SVP      = 00000001            IO$M_NOFILTR   = 00000200            

AT$_UBA          ********   X   03   DPT$W_INITTAB    00000010            IO$M_NOFORMAT  = 00000100            

BIT...         = 00000008            DPT$W_REINITTAB  00000012            IO$M_NOW       = 00000040            

CRB$B_MASK       0000000E            DPT$W_SIZE       00000008            IO$M_NOWAIT    = 00000080            

CRB$B_TT_ATTN    00000004            DPT$W_UCBSIZE    0000000E            IO$M_PACKED    = 00000080            

CRB$B_TT_EXPEC   00000005            DPT$W_UNLOAD     00000014            IO$M_PURGE     = 00000800            

CRB$B_TYPE       0000000A            DYN$C_CRB        ********   X   03   IO$M_READATTN  = 00000080            

CRB$C_LENGTH     00000038            DYN$C_DDB        ********   X   03   IO$M_REVERSE   = 00000040            

CRB$K_LENGTH     00000038            DYN$C_DPT        ********   X   03   IO$M_SHUTDOWN  = 00000080            

CRB$L_INTD       00000014            DYN$C_UCB        ********   X   03   IO$M_STARTUP   = 00000040            

CRB$L_INTD2      00000038            EXE$ABORTIO      ********   X   04   IO$M_SYNCH     = 00000200            

CRB$L_LINK       00000010            EXE$ALLOCBUF     ********   X   04   IO$M_TIMED     = 00000080            

CRB$L_TT_DIAL    00000000            EXE$BUFFRQUOTA   ********   X   04   IO$M_TRMNOECHO = 00001000            

CRB$L_WQBL       00000004            EXE$DEANONPAGED  ********   X   04   IO$M_WRTATTN   = 00000100            

CRB$L_WQFL       00000000            EXE$FINISHIOC    ********   X   04   IO$S_FCODE     = 00000006            

CRB$M_BSY      = 00000001            EXE$IOFORK       ********   X   04   IO$V_ABORT     = 00000008            

CRB$V_BSY      = 00000000            EXE$QIODRVPKT    ********   X   04   IO$V_ACCESS    = 00000006            

CRB$W_REFC       0000000C            EXE$SENSEMODE    ********   X   04   IO$V_ATTNAST   = 00000008            

CRB$W_SIZE       00000008            EXE$SNDEVMSG     ********   X   04   IO$V_BINARY    = 00000006            

C_CR           = 0000000D            EXE$WRITECHK     ********   X   04   IO$V_CANCTRLO  = 00000006            

C_FF           = 0000000C            FORMAT           00000097 R     04   IO$V_COMMOD    = 00000006            

C_LF           = 0000000A            FUNCTABLE        00000018 R     04   IO$V_CREATE    = 00000007            

C_TAB          = 00000009            GBL...         = 00000000            IO$V_CTRLCAST  = 00000008            

C_VT           = 0000000B            IDB$B_TYPE       0000000A            IO$V_CTRLYAST  = 00000007            

DC$_LP           ********   X   03   IDB$B_UNITS      0000000B            IO$V_CVTLOW    = 00000008            

DDB$B_ACPCLASS   00000013            IDB$C_LENGTH     00000030            IO$V_DATACHECK = 0000000E            

DDB$B_TYPE       0000000A            IDB$K_LENGTH     00000030            IO$V_DELETE    = 00000008            

DDB$C_LENGTH     00000034            IDB$L_ADP        0000000C            IO$V_DMOUNT    = 0000000A            

DDB$K_LENGTH     00000034            IDB$L_CSR        00000000            IO$V_DSABLMBX  = 0000000A            

DDB$L_ACPD       00000010            IDB$L_OWNER      00000004            IO$V_ENABLMBX  = 00000007            

DDB$L_DDT        0000000C            IDB$L_UCBLST     00000010            IO$V_FCODE     = 00000000            

DDB$L_LINK       00000000            IDB$W_SIZE       00000008            IO$V_HANGUP    = 00000009            

DDB$L_UCB        00000004            IO$M_ABORT     = 00000100            IO$V_INHERLOG  = 0000000B            

DDB$T_DRVNAME    00000024            IO$M_ACCESS    = 00000040            IO$V_INHEXTGAP = 0000000C            

DDB$T_NAME       00000014            IO$M_ATTNAST   = 00000100            IO$V_INHRETRY  = 0000000F            

DDB$W_SIZE       00000008            IO$M_BINARY    = 00000040            IO$V_INHSEEK   = 0000000C            

DEV$M_AVL        ********   X   03   IO$M_CANCTRLO  = 00000040            IO$V_INTERRUPT = 00000006            

DEV$M_CCL        ********   X   03   IO$M_COMMOD    = 00000040            IO$V_INTSKIP   = 00000008            

DEV$M_ODV        ********   X   03   IO$M_CREATE    = 00000080            IO$V_MOUNT     = 00000009            

DEV$M_REC        ********   X   03   IO$M_CTRLCAST  = 00000100            IO$V_NOECHO    = 00000006            

DPT$B_ADPTYPE    0000000C            IO$M_CTRLYAST  = 00000080            IO$V_NOFILTR   = 00000009            

DPT$B_FLAGS      0000000D            IO$M_CVTLOW    = 00000100            IO$V_NOFORMAT  = 00000008            

DPT$B_REFC       0000000B            IO$M_DATACHECK = 00004000            IO$V_NOW       = 00000006            

DPT$B_TYPE       0000000A            IO$M_DELETE    = 00000100            IO$V_NOWAIT    = 00000007            

DPT$C_LENGTH     00000022            IO$M_DMOUNT    = 00000400            IO$V_PACKED    = 00000007            

DPT$INITAB       0000001F R     03   IO$M_DSABLMBX  = 00000400            IO$V_PURGE     = 0000000B            

DPT$K_LENGTH     00000022            IO$M_ENABLMBX  = 00000080            IO$V_READATTN  = 00000007            

DPT$L_BLINK      00000004            IO$M_FCODE     = 0000003F            IO$V_REVERSE   = 00000006            

DPT$L_FLINK      00000000            IO$M_HANGUP    = 00000200            IO$V_SHUTDOWN  = 00000007            

DPT$M_NOUNLOAD = 00000004            IO$M_INHERLOG  = 00000800            IO$V_STARTUP   = 00000006            

DPT$M_SUBCNTRL = 00000001            IO$M_INHEXTGAP = 00001000            IO$V_SYNCH     = 00000009            

DPT$M_SVP      = 00000002            IO$M_INHRETRY  = 00008000            IO$V_TIMED     = 00000007            

DPT$REINITAB     00000047 R     03   IO$M_INHSEEK   = 00001000            IO$V_TRMNOECHO = 0000000C            

DPT$TAB          00000000 R     03   IO$M_INTERRUPT = 00000040            IO$V_WRTATTN   = 00000008            

DPT$T_NAME       00000016            IO$M_INTSKIP   = 00000100            IO$_ACCESS     = 00000032            

DPT$V_NOUNLOAD = 00000002            IO$M_MOUNT     = 00000200            IO$_ACPCONTROL = 00000038            

DPT$V_SUBCNTRL = 00000000            IO$M_NOECHO    = 00000040            IO$_CREATE     = 00000033            

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  17

SYMBOL TABLE                                                                                                                     (1)



IO$_DEACCESS   = 00000034            IRP$L_AST        00000010            LP$M_LOWER     = 00000080            

IO$_DELETE     = 00000035            IRP$L_ASTPRM     00000014            LP$M_MECHFORM  = 00000002            

IO$_DIAGNOSE   = 0000001D            IRP$L_DIAGBUF    00000044            LP$M_PAGE_L    = FF000000            

IO$_DRVCLR     = 00000004            IRP$L_IOQBL      00000004            LP$S_PAGE_L    = 00000008            

IO$_ERASETAPE  = 00000006            IRP$L_IOQFL      00000000            LP$V_CR        = 00000000            

IO$_LOGICAL    = 0000002F            IRP$L_IOSB       00000024            LP$V_LOWER     = 00000007            

IO$_MODIFY     = 00000036            IRP$L_IOST1      00000034            LP$V_MECHFORM  = 00000001            

IO$_MOUNT      = 00000039            IRP$L_IOST2      00000038            LP$V_PAGE_L    = 00000018            

IO$_NOP        = 00000000            IRP$L_MEDIA      00000034            LP$_LA11       = 00000002            

IO$_OFFSET     = 00000006            IRP$L_PID        0000000C            LP$_LA180      = 00000003            

IO$_PACKACK    = 00000008            IRP$L_SEGVBN     00000040            LP$_LP11       = 00000001            

IO$_PHYSICAL   = 0000001F            IRP$L_SEQNUM     00000048            LP_CSR           00000000            

IO$_READHEAD   = 0000000E            IRP$L_SVAPTE     0000002C            LP_DBR           00000002            

IO$_READLBLK   = 00000021            IRP$L_TT_TERM    00000038            LP_END           00000376 R     04   

IO$_READPBLK   = 0000000C            IRP$L_UCB        0000001C            LP_LX11_CINIT    00000375 R     04   

IO$_READPRESET = 00000019            IRP$L_WIND       00000018            LP_LX11_INIT     00000365 R     04   

IO$_READPROMPT = 00000037            IRP$M_BUFIO    = 00000001            LP_SETMODE       0000004C R     04   

IO$_READTRACKD = 00000010            IRP$M_CHAINED  = 00000020            LP_WRITE         00000093 R     04   

IO$_READVBLK   = 00000031            IRP$M_COMPLX   = 00000008            MASKH          = 00000080            

IO$_RECAL      = 00000003            IRP$M_DIAGBUF  = 00000080            MASKL          = 08000000            

IO$_RELEASE    = 00000005            IRP$M_FUNC     = 00000002            MSG$_ABOOPR    = 00000011            

IO$_RETCENTER  = 00000007            IRP$M_MBXIO    = 00000400            MSG$_ABORT     = 00000030            

IO$_REWIND     = 00000024            IRP$M_PAGIO    = 00000004            MSG$_ACCRSP    = 00000021            

IO$_REWINDOFF  = 00000022            IRP$M_PHYSIO   = 00000100            MSG$_CONFIRM   = 00000031            

IO$_SEARCH     = 00000009            IRP$M_PRIVIO   = 00000200            MSG$_CONNECT   = 00000032            

IO$_SEEK       = 00000002            IRP$M_SWAPIO   = 00000040            MSG$_CRUNSOLIC = 00000002            

IO$_SENSECHAR  = 0000001B            IRP$M_VIRTUAL  = 00000010            MSG$_DELPROC   = 00000003            

IO$_SENSEMODE  = 00000027            IRP$Q_NT_PRVMSK  0000003C            MSG$_DELSMB    = 00000014            

IO$_SETCHAR    = 0000001A            IRP$S_FCODE    = 00000006            MSG$_DEVOFFLIN = 00000005            

IO$_SETMODE    = 00000023            IRP$S_FMOD     = 0000000A            MSG$_DEVONLIN  = 00000007            

IO$_SKIPFILE   = 00000025            IRP$S_MODE     = 00000002            MSG$_DISCON    = 00000033            

IO$_SKIPRECORD = 00000026            IRP$V_BUFIO    = 00000000            MSG$_EXIT      = 00000034            

IO$_SPACEFILE  = 00000002            IRP$V_CHAINED  = 00000005            MSG$_INIOPR    = 00000010            

IO$_SPACERECORD= 00000009            IRP$V_COMPLX   = 00000003            MSG$_INTMSG    = 00000035            

IO$_STARTSPNDL = 00000019            IRP$V_DIAGBUF  = 00000007            MSG$_OPREPLY   = 00000009            

IO$_UNLOAD     = 00000001            IRP$V_FCODE    = 00000000            MSG$_OPRQST    = 00000008            

IO$_VIRTUAL    = 0000003F            IRP$V_FMOD     = 00000006            MSG$_PATHLOST  = 00000036            

IO$_WRITECHECK = 0000000A            IRP$V_FUNC     = 00000001            MSG$_PROTOCOL  = 00000037            

IO$_WRITECHECKH= 00000018            IRP$V_MBXIO    = 0000000A            MSG$_REJECT    = 00000038            

IO$_WRITEHEAD  = 0000000D            IRP$V_MODE     = 00000000            MSG$_RESOPR    = 00000013            

IO$_WRITELBLK  = 00000020            IRP$V_PAGIO    = 00000002            MSG$_SCANBAD   = 00000028            

IO$_WRITEMARK  = 0000001C            IRP$V_PHYSIO   = 00000008            MSG$_SCANRSP   = 00000029            

IO$_WRITEOF    = 00000028            IRP$V_PRIVIO   = 00000009            MSG$_SMBDON    = 00000009            

IO$_WRITEPBLK  = 0000000B            IRP$V_SWAPIO   = 00000006            MSG$_SMBINI    = 00000008            

IO$_WRITETRACKD= 0000000F            IRP$V_VIRTUAL  = 00000004            MSG$_SMBRSP    = 00000020            

IO$_WRITEVBLK  = 00000030            IRP$W_ABCNT      0000003C            MSG$_SNDACC    = 0000000A            

IOC$CANCELIO     ********   X   04   IRP$W_BCNT       00000032            MSG$_SNDSMB    = 00000004            

IOC$REQCOM       ********   X   04   IRP$W_BOFF       00000030            MSG$_SUSOPR    = 00000012            

IOC$RETURN       ********   X   04   IRP$W_CHAN       00000028            MSG$_THIRDPARTY= 00000039            

IOC$WFIKPCH      ********   X   04   IRP$W_FUNC       00000020            MSG$_TIMEOUT   = 0000003A            

IRP$B_CARCON     00000038            IRP$W_OBCNT      0000003E            MSG$_TRMHANGUP = 00000006            

IRP$B_EFN        00000022            IRP$W_SIZE       00000008            MSG$_TRMUNSOLIC= 00000001            

IRP$B_PRI        00000023            IRP$W_STS        0000002A            MSG$_XM_ATTN   = 0000000D            

IRP$B_RMOD       0000000B            IRP$W_TT_PRMPT   0000003C            MSG$_XM_DATAVL = 0000000B            

IRP$B_TYPE       0000000A            LP$DDT           00000000 RG    04   MSG$_XM_SHUTDN = 0000000C            

IRP$C_LENGTH     0000004C            LP$INT           00000347 RG    04   M_CRPEND       = 00000001            

IRP$K_LENGTH     0000004C            LP$M_CR        = 00000001            P1             = 00000000            

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  18

SYMBOL TABLE                                                                                                                     (1)



P2             = 00000004            PCB$W_ASTCNT     0000003C            UCB$L_AMB        00000054            

P3             = 00000008            PCB$W_BIOCNT     0000003E            UCB$L_ASTQBL     00000010            

P4             = 0000000C            PCB$W_BIOLM      00000040            UCB$L_ASTQFL     0000000C            

P5             = 00000010            PCB$W_BYTCNT     00000042            UCB$L_CPID       0000005C            

P6             = 00000014            PCB$W_BYTLM      00000068            UCB$L_CRB        00000020            

PCB$B_ASTACT     0000000C            PCB$W_DIOCNT     00000044            UCB$L_DDB        00000024            

PCB$B_ASTEN      0000000D            PCB$W_DIOLM      00000046            UCB$L_DEVCHAR    00000034            

PCB$B_PRI        0000000B            PCB$W_FILCNT     00000048            UCB$L_DEVDEPEND  0000003C            

PCB$B_PRIB       00000033            PCB$W_GPGCNT     00000038            UCB$L_DPC        00000080            

PCB$B_TYPE       0000000A            PCB$W_GRP        00000022            UCB$L_DUETIM     0000005C            

PCB$B_WEFC       00000032            PCB$W_MEM        00000020            UCB$L_DX_BFPNT   0000009C            

PCB$C_LENGTH     0000007C            PCB$W_MTXCNT     0000000E            UCB$L_DX_BUF     00000098            

PCB$K_LENGTH     0000007C            PCB$W_PPGCNT     0000003A            UCB$L_DX_RXDB    000000A0            

PCB$L_ASTQBL     00000014            PCB$W_PRCCNT     0000006A            UCB$L_EMB        00000078            

PCB$L_ASTQFL     00000010            PCB$W_SIZE       00000008            UCB$L_FIRST      00000014            

PCB$L_EFC2P      00000058            PCB$W_STATE      00000030            UCB$L_FPC        0000000C            

PCB$L_EFC3P      0000005C            PCB$W_TMBU       00000036            UCB$L_FQBL       00000004            

PCB$L_EFCS       00000050            PCB$W_TQCNT      0000004A            UCB$L_FQFL       00000000            

PCB$L_EFCU       00000054            PR$_IPL          ********   X   04   UCB$L_FR3        00000010            

PCB$L_EFWM       0000004C            SCH$LOCKW        ********   X   04   UCB$L_FR4        00000014            

PCB$L_OWNER      0000001C            SCH$UNLOCK       ********   X   04   UCB$L_IOQBL      00000044            

PCB$L_PHD        00000064            SS$_ABORT        ********   X   04   UCB$L_IOQFL      00000040            

PCB$L_PHYPCB     00000018            SS$_ACCVIO       ********   X   04   UCB$L_IRP        0000004C            

PCB$L_PID        00000060            SS$_NORMAL       ********   X   04   UCB$L_LINK       0000002C            

PCB$L_PQB        0000004C            STARTIO          0000027A R     04   UCB$L_LOGADR     00000064            

PCB$L_SQBL       00000004            SYS$GL_OPRMBX    ********   X   04   UCB$L_LP_MUTEX   00000074            

PCB$L_SQFL       00000000            TT$CARRIAGE      ********   X   04   UCB$L_MAXBLOCK   00000084            

PCB$L_STS        00000028            UCB$B_AMOD       00000053            UCB$L_MEDIA      0000008C            

PCB$L_UIC        00000020            UCB$B_CEX        00000077            UCB$L_NT_DATSSB  00000074            

PCB$L_WSSWP      00000024            UCB$B_CM1        0000004A            UCB$L_NT_INTSSB  00000078            

PCB$L_WTIME      0000002C            UCB$B_CM2        0000004B            UCB$L_OPCNT      00000060            

PCB$T_LNAME      0000006C            UCB$B_DEVCLASS   00000038            UCB$L_OWNUIC     0000001C            

PCB$V_ASTPEN   = 00000011            UCB$B_DEVTYPE    00000039            UCB$L_PID        00000028            

PCB$V_BATCH    = 0000000E            UCB$B_DIPL       00000052            UCB$L_RQBL       00000004            

PCB$V_DELPEN   = 00000001            UCB$B_DX_SCTCNT  000000A6            UCB$L_RQFL       00000000            

PCB$V_FORCPEN  = 00000002            UCB$B_ERTCNT     00000070            UCB$L_SVAPTE     00000068            

PCB$V_HIBER    = 00000013            UCB$B_ERTMAX     00000071            UCB$L_SVPN       00000064            

PCB$V_INQUAN   = 00000003            UCB$B_ESCAPE     0000004B            UCB$L_TTCHAR     0000003C            

PCB$V_LOGIN    = 00000014            UCB$B_FEX        00000076            UCB$L_VCB        00000030            

PCB$V_NETWRK   = 00000015            UCB$B_FIPL       0000000B            UCB$M_BACKP    = 00000020            

PCB$V_NOACNT   = 0000000F            UCB$B_LOCSRV     0000003C            UCB$M_BSY      = 00000100            

PCB$V_NODELET  = 00000017            UCB$B_LP_CURSOR  00000078            UCB$M_CANCEL   = 00000008            

PCB$V_PHDRES   = 00000012            UCB$B_LP_LINCNT  00000079            UCB$M_DEADMO   = 00000400            

PCB$V_PSWAPM   = 00000004            UCB$B_LP_OFLCNT  0000007A            UCB$M_DELMBX   = 00000002            

PCB$V_PWRAST   = 00000016            UCB$B_OFFNDX     00000094            UCB$M_DIAGBUF  = 00000002            

PCB$V_RES      = 00000000            UCB$B_OFFRTC     00000095            UCB$M_DX_WRITE = 00000008            

PCB$V_RESPEN   = 00000005            UCB$B_REMSRV     0000003D            UCB$M_ECC      = 00000001            

PCB$V_SSFEXC   = 00000006            UCB$B_SECTORS    0000003C            UCB$M_ERLOGIP  = 00000004            

PCB$V_SSFEXCE  = 00000007            UCB$B_SLAVE      00000074            UCB$M_INT      = 00000002            

PCB$V_SSFEXCS  = 00000008            UCB$B_SPR        00000075            UCB$M_INTTYPE  = 00000080            

PCB$V_SSFEXCU  = 00000009            UCB$B_STATE      00000052            UCB$M_JOB      = 00000001            

PCB$V_SSRWAIT  = 0000000A            UCB$B_TRACKS     0000003D            UCB$M_MOUNTING = 00000200            

PCB$V_SUSPEN   = 0000000B            UCB$B_TYPE       0000000A            UCB$M_NOCNVRT  = 00000004            

PCB$V_SWPVBN   = 00000010            UCB$B_VERTSZ     0000003F            UCB$M_NT_BFROVF= 00000004            

PCB$V_WAKEPEN  = 0000000C            UCB$C_LENGTH     00000074            UCB$M_NT_BREAK = 00000020            

PCB$V_WALL     = 0000000D            UCB$C_LOGLNK   = 00000001            UCB$M_NT_NAME  = 00000010            

PCB$W_APTCNT     00000034            UCB$K_LENGTH     00000074            UCB$M_ONLINE   = 00000010            

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  19

SYMBOL TABLE                                                                                                                     (1)



UCB$M_POWER    = 00000020            UCB$W_EC2        00000092            

UCB$M_PRMMBX   = 00000001            UCB$W_ERRCNT     00000072            

UCB$M_TIM      = 00000001            UCB$W_FUNC       0000007E            

UCB$M_TIMOUT   = 00000040            UCB$W_MB_SEED    FFFFFFFC            

UCB$M_TT_NOTIF = 00000004            UCB$W_MSGCNT     00000016            

UCB$M_TT_TIMO  = 00000002            UCB$W_MSGMAX     00000014            

UCB$M_UNLOAD   = 00001000            UCB$W_NT_CHAN    0000007C            

UCB$M_VALID    = 00000800            UCB$W_OFFSET     0000008A            

UCB$S_LNKPRI   = 00000002            UCB$W_REFC       00000050            

UCB$S_LTYPE    = 00000002            UCB$W_SIZE       00000008            

UCB$T_PARTNER    0000000C            UCB$W_SRCADDR    0000001A            

UCB$V_BACKP    = 00000005            UCB$W_STS        00000058            

UCB$V_BSY      = 00000008            UCB$W_UNIT       00000048            

UCB$V_CANCEL   = 00000003            UCB$W_VPROT      0000001A            

UCB$V_DEADMO   = 0000000A            VEC$B_DATAPATH   00000013            

UCB$V_DELMBX   = 00000001            VEC$B_NUMREG     00000012            

UCB$V_DIAGBUF  = 00000001            VEC$C_LENGTH     00000024            

UCB$V_DX_WRITE = 00000003            VEC$K_LENGTH     00000024            

UCB$V_ECC      = 00000000            VEC$L_ADP        00000014            

UCB$V_ERLOGIP  = 00000002            VEC$L_IDB        00000008            

UCB$V_INT      = 00000001            VEC$L_INITIAL    0000000C            

UCB$V_INTTYPE  = 00000007            VEC$L_START      0000001C            

UCB$V_JOB      = 00000000            VEC$L_UNITDISC   00000020            

UCB$V_LNKPRI   = 00000006            VEC$L_UNITINIT   00000018            

UCB$V_LTYPE    = 00000000            VEC$M_MAPLOCK  = 00008000            

UCB$V_MOUNTING = 00000009            VEC$M_PATHLOCK = 00000080            

UCB$V_MSGACK   = 00000004            VEC$Q_DISPATCH   00000000            

UCB$V_MSGFLO   = 00000003            VEC$S_DATAPATH = 00000007            

UCB$V_NOCNVRT  = 00000002            VEC$S_MAPREG   = 0000000F            

UCB$V_NT_BFROVF= 00000002            VEC$V_DATAPATH = 00000000            

UCB$V_NT_BREAK = 00000005            VEC$V_MAPLOCK  = 0000000F            

UCB$V_NT_NAME  = 00000004            VEC$V_MAPREG   = 00000000            

UCB$V_ONLINE   = 00000004            VEC$V_PATHLOCK = 00000007            

UCB$V_POWER    = 00000005            VEC$W_MAPREG     00000010            

UCB$V_PRMMBX   = 00000000            V_CRPEND       = 00000000            

UCB$V_SEGFLO   = 00000002            WRITE_BYTE       000001AA R     04   

UCB$V_TIM      = 00000000            

UCB$V_TIMOUT   = 00000006            

UCB$V_TT_NOTIF = 00000002            

UCB$V_TT_TIMO  = 00000001            

UCB$V_UNLOAD   = 0000000C            

UCB$V_VALID    = 0000000B            

UCB$W_BCNT       0000006E            

UCB$W_BCR        00000096            

UCB$W_BOFF       0000006C            

UCB$W_BUFQUO     00000018            

UCB$W_BYTESTOGO  0000003E            

UCB$W_CHARGE     0000004A            

UCB$W_CYLINDERS  0000003E            

UCB$W_DA         0000008C            

UCB$W_DC         0000008E            

UCB$W_DEVBUFSIZ  0000003A            

UCB$W_DEVSTS     0000005A            

UCB$W_DIRSEQ     00000088            

UCB$W_DSTADDR    00000018            

UCB$W_DX_BCR     000000A4            

UCB$W_EC1        00000090            

LPDRIVER        - LP11/LS11/LV11 LINE PRINTER DRIVER             21-AUG-1978 20:54:17   VAX-11 MACRO X0.3-11               Page  20

PROGRAM SECTION SYNOPSIS                                                                                                         (1)







PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$ABS$            FFFFFFFE      02     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

$$$105_PROLOGUE  0000005C      03     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$$$115_DRIVER    00000376      04     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT LONG  





THERE WERE NO ERRORS OR WARNINGS.

8420. BYTES LEFT IN FREE MEMORY POOL.

2102. BYTES OF RECLAIMED MEMORY.

OBJ$:LPDRIVER,LIS$:LPDRIVER/-SP=EXECML$/ML,SRC$:LPDRIVER

17 MLB DIR RDS - 1028 GETS TO DEFINE 31 MACROS. 78 INTER. FILE WRITES. 

