VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Table of contents 5- 27 MACRO CALLS AND LOCAL DEFINITIONS 6- 71 IMPURE STORAGE 7- 105 NETWORK DIRECTIVE DPB'S 8- 129 RSX DIRECTIVE DPB'S 9- 141 MESSAGES STRINGS 10- 179 VDV MAIN LINE CODE 11- 226 ABOAST - ABORT REQUESTED AST 12- 243 EXIT - CLEAN UP AND EXIT 13- 269 PRINT - PRINT AN ASCIZ STRING 14- 290 OPEN - ACCESS remote process 15- 315 SPAAST - NETWORK DATA AST ROUTINE 16- 343 GNDCON - PROCESS CONNECT REQUEST 16- 344 GNDINT - PROCESS INTERRUPT MESSAGE 16- 345 GNDDSC - PROCESS DISCONNECT 18- 464 GETIOP - GET AN I/O PACKET 19- 530 KILAST - I/O KILL AST ROUTINE 20- 572 PRIOP - PROCESS AN I/O PACKET 21- 607 ILEGAL - PROCESS AN ILLEGAL FUNCTION CODE 22- 627 ATTACH/DETACH - PROCESS attach, detach 23- 706 WRITE - PROCESS WRITE REQUESTS VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 4 1 .TITLE VPVDV - Virtual printer VIRTUAL DEVICE FRONT END 2 .IDENT /AP001/ 3 ; 4 ; COPYRIGHT (C) 1979,1980 BY 5 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 6 ; 7 ; 8 ; MODULE DESCRIPTION 9 ; 10 ; Printer VIRTUAL DEVICE FRONT END 11 ; 12 ; Derived from DECnet ivrtual device front end. Network parts 13 ; removed to create a virtual printer that just creates disk files 14 ; that are print images. 15 ; 16 ; Initial version will just put print lines on debug terminal. 17 ; 18 ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING 19 ; 20 ; IDENT HISTORY: 21 ; 22 ; ap002 26-jan-86 hjj blanks lines are being stripped, check for lines 23 ; with just lf,cr and pass them. 24 ; ap001 24-jan-86 hjj started. 25 ; VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 5 MACRO CALLS AND LOCAL DEFINITIONS 27 .SBTTL MACRO CALLS AND LOCAL DEFINITIONS 28 ; 29 ; MACRO LIBRARY CALLS 30 ; 31 .MCALL EXIT$S,DIR$,ASTX$S,ALUN$S,CLEF$,GTSK$S 32 .MCALL SETF$,QIOW$,CALLR,USTP$S,WSIG$S,SREA$ 33 .MCALL OPNW$,CONW$,CONB$$,DSCW$,CLSW$,REC$,SND$,XMIW$ 34 .MCALL SNDW$,RECW$,GNDW$,REJW$,CON$,SPAW$,NETDF$ 35 .MCALL HDRDF$ 36 37 000000 NETDF$ ; DEFINE NETWORK SYMBOLS 38 000000 HDRDF$ ; DEFINE TASK HEADER OFFSETS 39 ; 40 ; LOCAL MACROS 41 ; 42 .MACRO CODE$ ; GENERATE CODE PSECT 43 .PSECT CODE$ I,RO 44 .ENDM CODE$ 45 46 .MACRO DATA$ P1 ; GENERATE DATA PSECTS 47 .IF IDN 48 .PSECT DATA$P D,RO 49 .IFF 50 .PSECT DATA$I D,RW 51 .ENDC 52 .ENDM DATA$ 53 54 .MACRO FUNC$ FUNCTN,ROUTIN ; GENERATE I/O FUNCTION DISPATCH ENTRY 55 .WORD FUNCTN/256. 56 .WORD ROUTIN 57 .ENDM FUNC$ 58 ; 59 ; LUN AND EVENT FLAG DEFINITIONS 60 ; 61 000001 .TTLUN=1 ; TERMINAL LUN 62 000002 .MBXLU=2 ; MAILBOX LUN 63 000003 .LLLUN=3 ; LOGICAL LINK LUN 64 65 000001 .EXEFN=1 ; TASK EXIT EVENT FLAG 66 000002 .TTEFN=2 ; TERMINAL EVENT FLAG 67 000003 .NTEFN=3 ; NETWORK I/O EVENT FLAG 68 000004 .SDEFN=4 ; SNDW$ EVENT FLAG 69 000005 .RCEFN=5 ; RECW$ EVENT FLAG VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 6 IMPURE STORAGE 71 .SBTTL IMPURE STORAGE 72 ; 73 ; BUFFERS 74 ; 75 000000 DATA$ IMPURE ; INPURE DATA 76 77 000024 RCVSIZ=20. ; SIZE OF RECEIVE BUFFER 78 000000 RCVBUF: .BLKB RCVSIZ ; RECEIVE BUFFER 79 000142 GNDSIZ=98. ; SIZE OF GND BUFFER (ENOUGH FOR PEM) 80 000024 GNDBUF: .BLKB GNDSIZ ; GND BUFFER 81 ; 82 ; STATUS BLOCKS 83 ; 84 000166 TTSTAT: .BLKW 2 ; TERMINAL I/O STATUS 85 000172 NSSTAT: .BLKW 2 ; NETWORK I/O STATUS 86 000176 SNDSTT: .BLKW 2 ; SEND STATUS 87 000202 RCVSTT: .BLKW 2 ; RECEIVE STATUS 88 000206 GNDSTT: .BLKW 2 ; GET NETWORK DATA STATUS 89 90 ; 91 ; MISC. STORAGE 92 ; 93 000212 000000 CURIOP: .WORD 0 ; CURRENT I/O PACKET ADDRESS 94 000214 000000 KILFLG: .WORD 0 ; CURRENT REQUEST IS BEING KILLED 95 000216 CURAPR: .BLKW 1 ; APR BIAS OF USER BUFFER 96 000220 CURLEN: .BLKW 1 ; LENGTH OF REMAINING DATA TO BE XFERRED 97 000222 000000 TEXT: .WORD 0 ; TEXT STRING POINTER 98 000224 000000 USER: .WORD 0 ; USER'S TI: UCB ADDRESS 99 000226 OWNER: .BLKW 1 ; OWNER OF VIRTUAL DEVICE 100 000230 LOGNAM: .BLKW 2 ; LOGICAL NAME TO BE ASSIGNED 101 000234 000000 VDUCB: .WORD 0 ; UCB ADDRESS OF OUR VD: 102 000236 000000 DEVTYP: .WORD 0 ; REMOTE DEVICE TYPE 103 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 7 NETWORK DIRECTIVE DPB'S 105 .SBTTL NETWORK DIRECTIVE DPB'S 106 ; 107 ; NETWORK DPB'S 108 ; 109 000240 DATA$ IMPURE 110 000240 OPN: OPNW$ .MBXLU,.NTEFN,NSSTAT,,<1> 111 000270 CON: CONW$ .LLLUN,.NTEFN,NSSTAT,, 112 000320 REC: REC$ .LLLUN,,RCVSTT 113 000350 DSC: DSCW$ .LLLUN,.NTEFN 114 000400 CLS: CLSW$ .MBXLU,.NTEFN 115 000430 GND: GNDW$ .MBXLU,.NTEFN,GNDSTT,, 116 000460 REJ: REJW$ .MBXLU,.NTEFN,,, 117 000510 SPA: SPAW$ .MBXLU,.NTEFN,,, 118 000540 SND: SND$ .LLLUN,,SNDSTT 119 000570 SNDW: SNDW$ .LLLUN,.SDEFN,SNDSTT 120 000620 RECW: RECW$ .LLLUN,.RCEFN,RCVSTT 121 000650 RECMSG: RECW$ .LLLUN,.RCEFN,RCVSTT,, 122 123 ; 124 ; CONNECT BLOCK 125 ; 126 000700 CONB: CONB$$ RPRINT,0,1, 127 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 8 RSX DIRECTIVE DPB'S 129 .SBTTL RSX DIRECTIVE DPB'S 130 ; 131 ; RSX DPB'S 132 ; 133 001010 DATA$ IMPURE 134 001010 CLEF: CLEF$ .EXEFN ; CLEAR EXIT FLAG 135 001014 SETF: SETF$ .EXEFN ; SET EXIT FLAG 136 001020 TIQIO: QIOW$ IO.WBT,.TTLUN,.TTEFN,,,,<,,40> ; TI MESSAGE OUTPUT 137 001050 SREA: SREA$ ABOAST ; TASK ABORT REQUEST AST 138 ; 139 001054 TTQIO: QIOW$ IO.WLB,.TTLUN,.TTEFN,,TTSTAT,,<,,40> ; TI MESSAGE OUTPUT VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 9 MESSAGES STRINGS 141 .SBTTL MESSAGES STRINGS 142 ; 143 ; TEXT STRINGS 144 ; 145 .ENABL LC 146 .NLIST BEX 147 001104 DATA$ PURE 148 000000 015 126 104 stamsg: .asciz <15>/VDV -- starting / 149 000022 015 126 104 giomsg: .asciz <15>/VDV -- vducb not set / 150 000051 015 126 104 aiomsg: .asciz <15>/VDV -- vp attached / 151 000076 015 126 104 diomsg: .asciz <15>/VDV -- vp detached / 152 000123 015 126 104 NSERR: .ASCIZ <15>/VDV -- Network not loaded/ 153 000156 015 126 104 OPNERR: .ASCIZ <15>/VDV -- Unable to open network/ 154 000215 015 126 104 CONER1: .ASCIZ <15>/VDV -- Unable to connect to remote server pem err/ 155 000300 015 126 104 CONER2: .ASCIZ <15>/VDV -- Unable to connect to remote server xcon err/ 156 000364 015 126 104 PROERR: .ASCIZ <15>/VDV -- Server synchronization error/ 157 000431 015 126 104 ABOERR: .ASCIZ <15>/VDV -- Task aborted by directive or MCR request/ 158 .EVEN 159 000512 DATA$ IMPURE 160 001104 015 126 104 ABTERR: .ASCII <15>/VDV -- Link to server aborted / 161 001143 060 060 060 abter1: .ascii /000000 / 162 001152 060 060 060 abter2: .asciz /000000/ 163 001161 015 126 104 ATTMSG: .ASCII <15>/VDV -- Connected through / 164 001213 ATTBUF: .BLKB 7 165 001222 015 126 104 DETMSG: .ASCII <15>/VDV -- Disconnected from / 166 001254 DETBUF: .BLKB 7 167 001263 015 126 104 CONER3: .ASCII <15>/VDV -- Unable to connect to remote server nstat err/ 168 001347 erval1: .blkb 6 169 001355 040 .byte 40 170 001356 erval2: .blkb 6 171 001364 000 .byte 0 172 001365 015 126 104 NVDERR: .ASCII <15>/VDV -- Unable to allocate a virtual device of type "/ 173 001452 077 077 072 NVDBUF: .ASCIZ /??:"/ 174 001457 015 126 104 DEVERR: .ASCII <15>/VDV -- Unable to access remote device or file (/ 175 001537 DEVBUF: .BLKB 6 176 .EVEN 177 .LIST BEX VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 10 VDV MAIN LINE CODE 179 .SBTTL VDV MAIN LINE CODE 180 ;+ 181 ; **-VDV-VIRTUAL DEVICE MAIN LINE CODE 182 ; 183 ; VDV IS INITIATED BY A USER REQUEST PEM. THE REQUEST BLOCK CONTAINS 184 ; A TARGET NODE NAME AND DEVICE/FILE SPECIFICATION. THE REMOTE DEVICE/FILE 185 ; IS ACCESSED, AND THE USER IS ALLOCATED A PSEUDO DEVICE OF THE PROPER 186 ; TYPE AS A CHANNEL TO DIRECT I/O TO THE REMOTE DEVICE. ALL I/O PACKETS 187 ; ARE PROCESSED UNTIL THE EXIT FLAG IS SET, THEN THE DEVICE IS DEALLOCATED, 188 ; MARKED AS OFFLINE, AND THE TASK EXITS. 189 ; 190 ;- 191 192 001546 CODE$ 193 194 000000 VDV:: 195 ; 196 ; INITIALIZE AND CONNECT 197 ; 198 000000 CALL OPEN ; OPEN THE NETWORK, AND PERFORM PREAMBLE 199 000004 103447 BCS EXIT ; IF CS, FATAL ERROR - EXIT 200 ; 201 000006 DIR$ #SREA ; SPECIFY EXIT REQUEST AST 202 ; 203 000014 012700 000000' mov #STAMSG, r0 204 000020 call print 205 ; 206 000024 CALL GETVD ; ALLOCATE A VD: UNIT 207 000030 103435 BCS EXIT ; IF CS, COULDN'T - TELL USER AND EXIT 208 000032 DIR$ #CLEF ; CLEAR THE EXIT INDICATOR 209 ; 210 ; PROCESS AN I/O PACKET 211 ; 212 ; 213 000040 005767 000234' tst vducb 214 000044 001005 bne 10$ 215 000046 012700 000022' mov #GIOMSG, r0 216 000052 call print 217 000056 000422 br exit 218 ; 219 220 000060 10$: CALL GETIOP ; TRY TO GET AN I/O PACKET 221 000064 103417 BCS EXIT ; IF CS, EXIT TASK 222 000066 CALL PRIOP ; PROCESS THE I/O 223 000072 103414 BCS EXIT ; IF CS, FATAL ERROR 224 000074 000771 BR 10$ ; ELSE, TRY TO GET MORE WORK VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 11 ABOAST - ABORT REQUESTED AST 226 .SBTTL ABOAST - ABORT REQUESTED AST 227 ;+ 228 ; **-ABOAST-ABORT REQUESTED AST 229 ; 230 ; THIS ROUTINE SETS THE EXIT FLAG, AND UNSTOPS THE TASK. 231 ; 232 ;- 233 234 000076 ABOAST: 235 000076 010046 mov r0, -(sp) 236 000100 012700 000431' MOV #ABOERR,r0 ; SET ERROR MESSAGE TEXT 237 000104 call print 238 000110 call abort 239 000114 012600 mov (sp)+, r0 240 000116 ASTX$S 241 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 12 EXIT - CLEAN UP AND EXIT 243 .SBTTL EXIT - CLEAN UP AND EXIT 244 ;+ 245 ; **-EXIT-EXIT VDV PROCESSING 246 ;- 247 248 000124 EXIT: 249 000124 DIR$ #DSC ; DISCONNECT THE LINK (IF THERE IS ONE) 250 000132 DIR$ #CLS ; CLOSE OUR MAILBOX (IF OPEN) 251 252 000140 016700 000222' MOV TEXT,R0 ; GET TEXT STRING TO PRINT 253 000144 001402 BEQ 20$ ; IF EQ, NOTHING TO PRINT 254 000146 CALL PRINT ; ELSE, PRINT IT 255 256 000152 005767 000234' 20$: TST VDUCB ; DID WE ALLOCATE A VD: ? 257 000156 001414 BEQ 40$ ; IF EQ, NO - NO NEED TO PRINT MESSAGE 258 000160 012700 001213' MOV #ATTBUF,R0 ; ELSE, POINT TO START OF FORMATTED NAME 259 000164 012701 001254' MOV #DETBUF,R1 ; POINT TO BUFFER IN DETACH MESSAGE 260 000170 112021 30$: MOVB (R0)+,(R1)+ ; COPY DEVICE NAME 261 000172 001376 BNE 30$ ; ... 262 000174 012700 001222' MOV #DETMSG,R0 ; POINT TO MESSAGE 263 000200 CALL PRINT ; TELL USER ABOUT IT 264 000204 005067 000234' CLR VDUCB ; INDICATE NO UNIT ALLOCATED 265 266 000210 005067 000224' 40$: CLR USER ; CLEAR USER'S TI: UCB ADDRESS 267 000214 EXIT$S ; BYE-BYE ! VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 13 PRINT - PRINT AN ASCIZ STRING 269 .SBTTL PRINT - PRINT AN ASCIZ STRING 270 ;+ 271 ; **-PRINT-PRINT AN ASCIZ STRING ON TI: 272 ; 273 ; INPUTS: 274 ; R0 = ADDRESS OF ASCIZ STRING 275 ; 276 ; OUTPUTS: 277 ; STRING PRINTED 278 ; R0 IS MODIFIED 279 ;- 280 281 000222 PRINT: 282 000222 010067 001034' MOV R0,TIQIO+Q.IOPL ; SET STRING ADDRESS 283 000226 105720 10$: TSTB (R0)+ ; LOOK FOR END OF STRING 284 000230 001376 BNE 10$ ; ... 285 000232 166700 001034' SUB TIQIO+Q.IOPL,R0 ; CALC STRING LENGTH 286 000236 010067 001036' MOV R0,TIQIO+Q.IOPL+2 ; SET STRING LENGTH 287 000242 DIR$ #TIQIO ; PRINT IT OUT 288 000250 000207 RETURN VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 14 OPEN - ACCESS remote process 290 .SBTTL OPEN - ACCESS remote process 291 ;+ 292 ; **-OPEN-Open network and connect to remote process 293 ;- 294 295 000252 OPEN: 296 ; 297 ; ASSIGN LUNS AND OPEN MAILBOX 298 ; 299 000252 012767 000123' 000222' MOV #NSERR,TEXT ; ASSUME NETWORK NOT LOADED 300 000260 ALUN$S #.MBXLU,#"NS ; ASSIGN MAILBOX LUN 301 000300 103427 BCS 90$ ; IF CS, COULDN'T - EXIT 302 000302 ALUN$S #.LLLUN,#"NS ; ASSIGN LOGICAL LINK LUN 303 000322 103416 BCS 90$ ; IF CS, COULDN'T - EXIT 304 000324 012767 000156' 000222' MOV #OPNERR,TEXT ; ASSUME OPEN ERROR 305 000332 DIR$ #OPN ; OPEN THE NET 306 000340 103407 BCS 90$ ; IF CS, EXIT 307 000342 105767 000172' TSTB NSSTAT ; SUCCESS ? 308 000346 100404 BMI 90$ ; IF MI, NO 309 000350 DIR$ #SPA ; SET UP OUR NETWORK DATA AST 310 000356 103001 BCC 100$ ; IF CC, OK 311 312 000360 000261 90$: SEC ; INDICATE ERROR 313 000362 000207 100$: RETURN ; AND OUT VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 15 SPAAST - NETWORK DATA AST ROUTINE 315 .SBTTL SPAAST - NETWORK DATA AST ROUTINE 316 ;+ 317 ; **-SPAAST-NETWORK DATA AST SERVICE ROUTINE 318 ; 319 ; THIS ROUTINE IS CALLED TO PROCESS NETWORK DATA. 320 ; 321 ;- 322 323 000364 SPAAST: 324 000364 10$: DIR$ #GND ; GET NETWORK DATA 325 000372 122767 000000G 000206' CMPB #IE.NDA,GNDSTT ; WAS THERE ANY DATA? 326 000400 001406 BEQ 100$ ; IF EQ, NO - ALL DONE 327 000402 116705 000207' MOVB GNDSTT+1,R5 ; ELSE, GET DATA TYPE 328 000406 006305 ASL R5 ; CONVERT TO WORD OFFSET 329 000410 CALL @GNDTAB-2(R5) ; DISPATCH TO CORRECT ROUTINE 330 000414 000763 BR 10$ ; LOOK FOR MORE DATA 331 000416 100$: ASTX$S ; EXIT THE AST 332 000424 000207 RETURN ; OR RETURN IF CALLED 333 334 ; 335 ; NETWORK DATA DISPATCH TABLE 336 ; 337 000426 000440' GNDTAB: .WORD GNDCON ; CONNECT REQUEST 338 000430 000450' .WORD GNDINT ; INTERRUPT MESSAGE 339 000432 000452' .WORD GNDDSC ; DISCONNECTS 340 000434 000452' .WORD GNDDSC ; 3 FLAVORS 341 000436 000452' .WORD GNDDSC ; .. VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 16 GNDCON - PROCESS CONNECT REQUEST 343 .SBTTL GNDCON - PROCESS CONNECT REQUEST 344 .SBTTL GNDINT - PROCESS INTERRUPT MESSAGE 345 .SBTTL GNDDSC - PROCESS DISCONNECT 346 ;+ 347 ; **-GNDCON-PROCESS CONNECT REQUEST 348 ; 349 ; ALL INCOMING CONNECTS ARE REJECTED 350 ; 351 ;- 352 353 000440 GNDCON: 354 000440 DIR$ #REJ ; REJECT THE CONNECT 355 000446 000207 RETURN 356 357 ;+ 358 ; **-GNDINT-PROCESS INTERRUPT MESSAGE 359 ; 360 ; ALL INCOMING INTERRUPT MESSAGES ARE IGNORED 361 ; 362 ;- 363 364 000450 GNDINT: 365 000450 000207 RETURN ; TOSS IT 366 367 368 ;+ 369 ; **-GNDDSC-PROCESS DISCONNECT 370 ; 371 ; THE TASK IS UNSTOPPED, AND THE EXIT FLAG IS SET FOR DISCONNECTS 372 ; 373 ;- 374 375 000452 GNDDSC: 376 000452 010246 mov r2, -(sp) 377 000454 010146 mov r1, -(sp) 378 000456 010046 mov r0, -(sp) 379 380 000460 012700 001143' mov #abter1, r0 381 000464 016701 000206' mov GNDSTT, r1 ; get iosb 0 382 000470 012702 000001 mov #1, r2 ; dont suppress zero's 383 000474 call $cbomg ; convert 384 000500 012700 001152' mov #abter2, r0 385 000504 016701 000210' mov GNDSTT+2, r1 ; get iosb 1 386 000510 call $cbomg ; convert 387 388 000514 012600 mov (sp)+, r0 389 000516 012601 mov (sp)+, r1 390 000520 012602 mov (sp)+, r2 391 392 000522 012767 001104' 000222' MOV #ABTERR,TEXT ; SET LINK ABORTED ERROR MESSAGE 393 000530 ABORT: GTSK$S #GNDBUF ; GET TASK PARAMETERS (NAME) 394 000542 USTP$S #GNDBUF ; UNSTOP OURSELF 395 000574 DIR$ #SETF ; SET THE EXIT FLAG 396 000602 000207 RETURN 397 398 ; VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 17 GNDDSC - PROCESS DISCONNECT 399 ; .SBTTL GETVD - GET A VIRTUAL DEVICE OF THE CORRECT TYPE 400 ;;+ 401 ;; **-GETVD-GET A VIRTUAL DEVICE OF THE CORRECT TYPE 402 ;; 403 ;; THIS ROUTINE IS CALLED AFTER A DEVICE CHARACTERISTICS MESSAGE IS RECEIVED 404 ;; TO ALLOCATE AND INITIALIZE THE DATA STRUCTURES FOR A VIRTUAL DEVICE. 405 ;; 406 ;;- 407 ; 408 000604 GETVD: 409 000604 012767 001365' 000222' MOV #NVDERR,TEXT ; ASSUME ERROR = "NO DEVICE" 410 411 000612 112767 000126 001452' 20$: MOVb #'V,NVDBUF ; SAVE DEVICE TYPE FOR POSSIBLE ERROR 412 000620 112767 000120 001453' MOVb #'P,NVDBUF+1 ; SAVE DEVICE TYPE FOR POSSIBLE ERROR 413 414 000626 SWSTK$ 90$ ;; ENTER SYSTEM STATE 415 000632 016701 000000G MOV $DEVHD,R1 ;; POINT TO FIRST DEVICE DCB 416 000636 026127 000000G 050126 30$: CMP D.NAM(R1),#"VP ;; IS THIS THE CORRECT DCB ? 417 000644 001407 BEQ 40$ ;; IF EQ, YES - TRY TO FIND A UNIT 418 000646 011101 35$: MOV (R1),R1 ;; ELSE, KEEP LOOKING 419 000650 001372 BNE 30$ ;; IF NE, MORE DCB'S 420 000652 017700 000000G MOV @$HEADR,R0 ;; ELSE, GET SAVED SP 421 000656 005260 000006 INC 6(R0) ;; SET USER C-BIT 422 000662 000473 BR 80$ ;; AND RETURN 423 424 000664 116102 000001G 40$: MOVB D.UNIT+1(R1),R2 ;; GET HIGH UNIT NUMBER 425 000670 116103 000000G MOVB D.UNIT(R1),R3 ;; AND LOW UNIT NUMBER 426 000674 160302 SUB R3,R2 ;; CALC NUMBER OF UCB'S ON THIS DCB 427 000676 016103 000000G MOV D.UCB(R1),R3 ;; POINT TO FIRST UCB 428 000702 005763 000000G 45$: TST U.VDV(R3) ;; IS THIS UNIT ALLOCATED ? 429 000706 001405 BEQ 60$ ;; IF EQ, NO - USE IT 430 000710 066103 000000G ADD D.UCBL(R1),R3 ;; ELSE, POINT TO NEXT UCB 431 000714 005302 DEC R2 ;; IS THERE ANOTHER UNIT TO CHECK ? 432 000716 002371 BGE 45$ ;; IF GE, YES 433 000720 000752 BR 35$ ;; ELSE, LOOK FOR ANOTHER DCB 434 000722 005067 000222' 60$: CLR TEXT ;; CLEAR OUT ERROR TEXT POINTER 435 000726 016763 000000G 000000G MOV $TKTCB,U.VDV(R3) ;; ALLOCATE THE DEVICE 436 000734 016763 000226' 000000G MOV OWNER,U.USR(R3) ;; SET THE OWNER 437 ;== MOV OWNER,U.OWN(R3) ;; ALLOCATE DEVICE (IF NOT GLOBAL) 438 000742 005063 000000G clr U.OWN(R3) ;; GLOBAL device 439 000746 012763 001256' 000000G MOV #KILAST,U.AST(R3) ;; SET THE I/O KILL AST ADDRESS 440 000754 142763 000000G 000000G BICB #US.OFL,U.ST2(R3) ;; MARK UNIT AS ONLINE 441 000762 012763 000000 000000G MOV #0, U.CW2(R3) ;; SET NUMBER OF BLOCKS 442 000770 012763 000000 000000G MOV #0, U.CW3(R3) ;; ... 443 000776 012763 000120 000000G MOV #80., U.CW4(R3) ;; AND BUFFER SIZE 444 001004 010367 000234' MOV R3,VDUCB ;; SAVE THE UCB ADDRESS 445 001010 012700 001213' MOV #ATTBUF,R0 ;; POINT TO BUFFER FOR FORMATTED NAME 446 001014 116120 000000G MOVB D.NAM(R1),(R0)+ ;; SET IN DEVICE NAME 447 001020 116120 000001G MOVB D.NAM+1(R1),(R0)+ ;; ... 448 001024 116101 000001G MOVB D.UNIT+1(R1),R1 ;; GET THE HI UNIT FOR THIS DCB 449 001030 160201 SUB R2,R1 ;; CALC THIS UNIT'S RELATIVE NUMBER 450 001032 042701 177400 BIC #177400,R1 ;; DON'T SIGN-EXTEND 451 001036 005002 CLR R2 ;; ZERO SUPPRESS 452 001040 CALL $CBOMG ;; CONVERT TO ASCII 453 001044 112720 000072 MOVB #':,(R0)+ ;; PUT IN TERMINATOR 454 001050 105010 CLRB (R0) ;; MAKE ASCIZ 455 001052 000207 80$: RETURN ;; BACK TO USER STATE VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 17-1 GNDDSC - PROCESS DISCONNECT 456 457 001054 90$: 458 001054 103404 BCS 100$ ; IF CS, RETURN WITH ERROR 459 001056 012700 001161' MOV #ATTMSG,R0 ; ELSE, SET UP "DEVICE ATTACHED" MESSAGE 460 001062 CALL PRINT ; TELL THE USER ABOUT IT 461 001066 000207 100$: RETURN 462 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 18 GETIOP - GET AN I/O PACKET 464 .SBTTL GETIOP - GET AN I/O PACKET 465 ;+ 466 ; **-GETIOP-GET AN I/O PACKET 467 ; 468 ; THIS ROUTINE GETS THE NEXT I/O PACKET FOR ALLOCATE VIRTUAL DEVICE OR STOPS. 469 ; 470 ;- 471 472 001070 GETIOP: 473 001070 SWSTK$ 50$ ;; ENTER SYSTEM STATE 474 ; 475 ; CHECK IF TASK IS EXITING 476 ; 477 001074 016700 000000G 10$: MOV $TKTCB,R0 ;; GET OUR TCB ADDRESS 478 001100 032760 000001 000000G BIT #1,T.EFLG(R0) ;; IS THE EXIT FLAG SET ? 479 001106 001430 BEQ 30$ ;; IF EQ, NO - LOOK FOR A PACKET 480 ; 481 ; TASK IS EXITING - FINISH ALL I/O WITH IE.OFL STATUS, AND MARK UNIT AS OFFLINE. 482 ; 483 001110 017701 000000G MOV @$HEADR,R1 ;; ELSE, GET SAVED SP 484 001114 005261 000006 INC 6(R1) ;; SET USER C-BIT 485 001120 016705 000234' 20$: MOV VDUCB,R5 ;; GET VD UCB ADDRESS 486 001124 152765 000000G 000000G BISB #US.OFL,U.ST2(R5) ;; SET UNIT AS OFFLINE 487 001132 005065 000000G CLR U.VDV(R5) ;; INDICATE NO OWNING TASK 488 001136 005065 000000G CLR U.USR(R5) ;; OR USER 489 001142 005065 000000G CLR U.OWN(R5) ;; AND DEVICE NOT ALLOCATED 490 001146 CALL 60$ ;; TRY TO GET A PACKET 491 001152 103413 BCS 40$ ;; IF CS, COULDN'T - RETURN 492 001154 012700 000000C MOV #IE.OFL&377,R0 ;; ELSE, SET OFFLINE STATUS 493 001160 005001 CLR R1 ;; ... 494 001162 CALL $IOFIN ;; AND COMPLETE I/O 495 001166 000754 BR 20$ ;; DO TILL NO MORE PACKETS 496 ; 497 ; TASK IS NOT EXITING, TRY TO GET A PACKET. IF NO PACKET, STOP THE TASK. 498 ; 499 001170 30$: CALL 60$ ;; TRY TO GET A REQUEST 500 001174 103002 BCC 40$ ;; IF CC, GOT ONE - RETURN 501 001176 CALLR $STPCT ;; ELSE, STOP OURSELF 502 503 001202 000207 40$: RETURN ;; BACK TO USER STATE 504 505 001204 103776 50$: BCS 40$ ; IF CS, RETURN TO CALLER 506 001206 005767 000212' TST CURIOP ; ELSE, DO WE HAVE WORK YET ? 507 001212 001373 BNE 40$ ; IF NE, YES - DO IT 508 001214 000725 BR GETIOP ; ELSE, NO - LOOK AGAIN 509 510 ; 511 ; LOCAL SUBROUTINE TO FIND A PACKET 512 ; 513 514 001216 016700 000000G 60$: MOV $TKTCB,R0 ;; POINT TO OUT TCB ADDRESS 515 001222 062700 000000G ADD #T.RCVL,R0 ;; POINT TO THE RECEIVE LISTHEAD 516 001226 011003 MOV (R0),R3 ;; GET THE NEXT PACKET ADDRESS 517 001230 000261 SEC ;; ASSUME NO PACKET 518 001232 001406 BEQ 80$ ;; IF EQ, NO WORK 519 001234 011310 MOV (R3),(R0) ;; UNLINK PACKET FROM LIST 520 001236 001002 BNE 70$ ;; IF NE, MORE IN LIST VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 18-1 GETIOP - GET AN I/O PACKET 521 001240 010060 000002 MOV R0,2(R0) ;; ELSE, CLOSE UP LIST 522 523 001244 70$: 524 001244 005067 000214' CLR KILFLG ;; INDICATE KILL NOT ACTIVE 525 ;; ... AND CLEAR C-BIT 526 001250 010367 000212' 80$: MOV R3,CURIOP ;; SAVE PACKET ADDRESS 527 001254 000207 RETURN ;; RETURN TO CALLER 528 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 19 KILAST - I/O KILL AST ROUTINE 530 .SBTTL KILAST - I/O KILL AST ROUTINE 531 ;+ 532 ; **-KILAST-I/O KILL AST ROUTINE 533 ; 534 ; THIS ROUTINE IS CALLED WHEN THE DRIVER IS CALLED AT IT'S 535 ; CANCEL I/O ENTRY POINT, AND QUEUES AN AST. 536 ; 537 ; INPUTS: 538 ; (SP) = ADDRESS OF TCB OF TASK WHOSE I/O IS TO BE KILLED 539 ; 540 ; 541 ;- 542 543 001256 KILAST: 544 001256 010546 MOV R5,-(SP) ; SAVE R5 545 001260 016605 000002 MOV 2(SP),R5 ; GET TCB ADDRESS 546 547 001264 SWSTK$ 50$ ;; ENTER SYSTEM STATE 548 001270 016704 000000G 10$: MOV $TKTCB,R4 ;; GET OUR TCB ADDRESS 549 001274 062704 000000G ADD #T.RCVL,R4 ;; POINT TO OUR RECEIVE QUEUE 550 001300 011403 20$: MOV (R4),R3 ;; POINT TO THE NEXT I/O PACKET 551 001302 001421 BEQ 40$ ;; IF EQ, ALL THROUGH 552 001304 020563 000000G CMP R5,I.TCB(R3) ;; IS THIS PACKET FROM THAT TASK ? 553 001310 001402 BEQ 30$ ;; IF EQ, YES - KILL THE I/O 554 001312 010304 MOV R3,R4 ;; ELSE, SET UP TO LOOK AT NEXT 555 001314 000771 BR 20$ ;; AND CONTINUE 556 557 001316 011314 30$: MOV (R3),(R4) ;; UNLINK THE PACKET FROM THE QUEUE 558 001320 001004 BNE 35$ ;; IF NE, NOT LAST PACKET 559 001322 016702 000000G MOV $TKTCB,R2 ;; ELSE, POINT TO OUR TCB 560 001326 010462 000002G MOV R4,T.RCVL+2(R2) ;; AND CLOSE LIST 561 001332 012700 000000C 35$: MOV #IE.ABO&377,R0 ;; SET ABORT ERROR CODE 562 001336 005001 CLR R1 ;; INDICATE 0 BYTES TRANSFERRED 563 001340 CALL $IOFIN ;; COMPLETE THE I/O 564 001344 000751 BR 10$ ;; AND LOOK FOR MORE 565 566 001346 000207 40$: RETURN ;; BACK TO USER STATE 567 001350 50$: 568 001350 012605 100$: MOV (SP)+,R5 ; RESTORE R5 569 001352 005726 TST (SP)+ ; CLEAN TCB ADDRESS OFF STACK 570 001354 ASTX$S ; AND EXIT THE AST VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 20 PRIOP - PROCESS AN I/O PACKET 572 .SBTTL PRIOP - PROCESS AN I/O PACKET 573 ;+ 574 ; **-PRIOP-PROCESS AN I/O PACKET 575 ; 576 ; THIS ROUTINE DISPATCHES TO THE APPROPIATE I/O ROUTINE, AND 577 ; POSTS COMPLETION ON THE PACKET. 578 ; 579 ;- 580 581 001362 PRIOP: 582 001362 016703 000212' MOV CURIOP,R3 ; GET THE PACKET ADDRESS 583 001366 116300 000001G MOVB I.FCN+1(R3),R0 ; GET THE FUNCTION CODE 584 001372 012701 001432' MOV #FCNTBL,R1 ; POINT TO THE DISPATCH TABLE 585 001376 020021 10$: CMP R0,(R1)+ ; IS THIS THE CORRECT ROUTINE ? 586 001400 001405 BEQ 20$ ; IF EQ, YES - CALL IT 587 001402 005761 177776 TST -2(R1) ; AT END OF TABLE ? 588 001406 001402 BEQ 20$ ; IF EQ, YES - CALL IT ILLEGAL FUNCTION 589 001410 005721 TST (R1)+ ; ELSE, SKIP OVER ROUTINE ADDRESS 590 001412 000771 BR 10$ ; AND KEEP LOOKING 591 592 001414 20$: CALL @(R1) ; DISPATCH TO CORRECT ROUTINE 593 594 001420 SWSTK$ 30$ ;; ENTER SYSTEM STATE 595 001424 CALLR $IOFIN ;; FINISH OFF THE I/O 596 001430 000207 30$: RETURN ; AND RETURN 597 598 ; 599 ; I/O FUNCTION DISPATCH TABLE 600 ; 601 001432 FCNTBL: 602 001432 FUNC$ IO.ATT,ATTACH ; attach 603 001436 FUNC$ IO.DET,DETACH ; DETACH 604 001442 FUNC$ IO.WLB,WRITE ; WRITE LOGICAL BLOCK 605 001446 FUNC$ 0,ILEGAL ; END OF TABLE VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 21 ILEGAL - PROCESS AN ILLEGAL FUNCTION CODE 607 .SBTTL ILEGAL - PROCESS AN ILLEGAL FUNCTION CODE 608 ;+ 609 ; **-ILEGAL-PROCESS AN ILLEGAL FUNCTION CODE 610 ; 611 ; THIS ROUTINE RETURNS I/O STATUS OF IE.IFC 612 ; 613 ; INPUTS: 614 ; R3 = I/O PACKET ADDRESS 615 ; 616 ; OUTPUTS: 617 ; R0 = 1ST I/O STATUS WORD 618 ; R1 = 2ND I/O STATUS WORD 619 ; R3 = I/O PACKET ADDRESS 620 ;- 621 622 001452 ILEGAL: 623 001452 012700 000000C MOV #IE.IFC&377,R0 ; SET STATUS RETURN 624 001456 005001 CLR R1 ; ... 625 001460 000207 RETURN VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 22 ATTACH/DETACH - PROCESS attach, detach 627 .SBTTL ATTACH/DETACH - PROCESS attach, detach 628 ;+ 629 ; **-ATTACH/DETACH - PROCESS attach, detach 630 ; 631 ; THIS ROUTINE RETURNS I/O STATUS OF IS.SUC 632 ; 633 ; INPUTS: 634 ; R3 = I/O PACKET ADDRESS 635 ; 636 ; OUTPUTS: 637 ; R0 = 1ST I/O STATUS WORD 638 ; R1 = 2ND I/O STATUS WORD 639 ; R3 = I/O PACKET ADDRESS 640 ;- 641 642 643 001462 ATTACH: 644 001462 012700 000051' mov #aiomsg, r0 645 001466 call print 646 647 001472 010246 mov r2, -(sp) 648 001474 010346 mov r3, -(sp) 649 001476 010446 mov r4, -(sp) 650 001500 010546 mov r5, -(sp) 651 001502 call connect 652 001506 012605 mov (sp)+, r5 653 001510 012604 mov (sp)+, r4 654 001512 012603 mov (sp)+, r3 655 001514 012602 mov (sp)+, r2 656 657 001516 012700 000000C MOV #IS.SUC&377,R0 ; assume success 658 001522 103002 bcc 10$ ; C set means failed 659 001524 012700 000000C mov #IE.OFL&377, r0 660 001530 10$: 661 001530 005001 CLR R1 ; ... 662 001532 000207 RETURN 663 664 665 001534 detach: 666 001534 DIR$ #DSC ; DISCONNECT from SERVER 667 668 001542 012700 000076' mov #diomsg, r0 669 001546 call print 670 671 001552 012700 000000C MOV #IS.SUC&377,R0 ; SET STATUS RETURN 672 001556 005001 CLR R1 ; ... 673 001560 000207 RETURN 674 675 ;+ 676 ; **-Connect - connect to remote 677 ; 678 ; 679 ;- 680 681 001562 connect: 682 001562 012767 000300' 000222' MOV #CONER2,TEXT ; ASSUME CONNECT ERROR 683 001570 DIR$ #CON ; ATTEMPT CONNECT TO SERVER VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 22-1 ATTACH/DETACH - PROCESS attach, detach 684 001576 103426 BCS 20$ ; IF CS, COULDN'T 685 001600 012767 001263' 000222' MOV #CONER3,TEXT ; ASSUME CONNECT ERROR 686 001606 105767 000172' TSTB NSSTAT ; SUCCESS ? 687 001612 100025 BPL 30$ ; IF PL, yes 688 689 001614 012700 001347' mov #erval1, r0 690 001620 016701 000172' mov nsstat, r1 691 001624 012702 000001 mov #1, r2 692 001630 call $cbomg 693 001634 012700 001356' mov #erval2, r0 694 001640 016701 000174' mov nsstat+2, r1 695 001644 012702 000001 mov #1, r2 696 001650 call $cbomg 697 001654 20$: 698 001654 016700 000222' mov text, r0 699 001660 call print 700 001664 000261 sec ; say error 701 702 001666 000207 30$: return 703 704 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 23 WRITE - PROCESS WRITE REQUESTS 706 .SBTTL WRITE - PROCESS WRITE REQUESTS 707 ;+ 708 ; **-WRITE-PROCESS WRITE REQUEST 709 ; 710 ; THIS ROUTINE TRANSMITS A REQUEST MESSAGE, FOLLOWED BY AS 711 ; MANY DATA MESSAGES AS REQUIRED TO COMPLETE THE DATA 712 ; 713 ; INPUTS: 714 ; R3 = I/O PACKET ADDRESS 715 ; 716 ; OUTPUTS: 717 ; R0 = 1ST I/O STATUS WORD 718 ; R1 = 2ND I/O STATUS WORD 719 ; R3 = I/O PACKET ADDRESS 720 ;- 721 722 001670 WRITE: 723 001670 016367 000000G 000216' MOV I.PRM(R3),CURAPR ; SAVE USER BUFFER APR BIAS 724 001676 016367 000004G 000220' MOV I.PRM+4(R3),CURLEN ; SET LENGTH OF WRITE 725 726 001704 016367 000002G 000604' MOV I.PRM+2(R3),SNDW+Q.IOPL ; SET VIRTUAL BUFFER ADDRESS 727 001712 016367 000004G 000606' MOV I.PRM+4(R3), SNDW+Q.IOPL+2 ; SET XMIT LENGTH 728 ; mov I.PRM+6(R3), SNDW+Q.IOPL+4 ; set vfc 729 ; 730 001720 MTPS #PR7 ;;; LOCK OUT INTERRUPTS 731 001726 016767 000216' 000000G MOV CURAPR,UISAR6 ;;; MAP TO USER'S BUFFER 732 001734 012767 077406 000000G MOV #77406,UISDR6 ;;; SET 4K R/W ACCESS 733 ; 734 ; fix veritical formatting. If record begins with and ends 735 ; with , strip both, unless lf/cr is only data in record. 736 ; 737 001742 016300 000002G mov I.PRM+2(r3), r0 ;;; point to buffer 738 001746 122710 000012 cmpb #12, (r0) ;;; start with lf ?? 739 001752 001017 bne 40$ ;;; no, don't change 740 001754 066300 000004G add I.PRM+4(r3), r0 ;;; point to past end of line 741 001760 122760 000015 177777 cmpb #15, -1(r0) ;;; end with cr ?? 742 001766 001011 bne 40$ ;;; no, ok 743 001770 022763 000002 000004G cmp #2, I.PRM+4(r3) ;;; only lf/cr in line ? 744 001776 001405 beq 40$ ;;; yes, pass 745 746 002000 005267 000604' inc SNDW+Q.IOPL ;;; bump past lf 747 002004 162767 000002 000606' sub #2, SNDW+Q.IOPL+2 ;;; cut length by 2 748 002012 40$: 749 002012 DIR$ #SNDW ;;; send to partner 750 002020 103011 BCC 90$ ; IF CC, OKAY 751 002022 126727 000000G 000000G CMPB $DSW,#IE.UPN ; WAS ERROR "NO RESOURCES" ? 752 002030 000261 SEC ; ASSUME NO, INDICATE ERROR 753 002032 001010 BNE 100$ ; IF NE, NO - RETURN WITH ERROR 754 002034 WSIG$S ; ELSE, WAIT A WHILE 755 002042 000763 BR 40$ ; AND TRY AGAIN 756 757 002044 90$: 758 002044 012700 000000C MOV #IS.SUC&377,R0 ; say successful 759 002050 016301 000004G MOV I.PRM+4(R3),R1 ; say whole buffer sent 760 761 002054 000207 100$: RETURN 762 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 23-1 WRITE - PROCESS WRITE REQUESTS 763 000000' .END VDV VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 23-2 Symbol table ABOAST 000076R 004 D$$YNC= 000000 H.FPSA 000042 LD$RD = 000000 NT.EVT= 000006 ABOERR 000431R 003 D$$YNM= 000000 H.FPSL= 000062 LD$TT = 000000 NT.INT= 000002 ABORT 000530R 004 D$$ZMD= 000000 H.FPVA 000034 LD$VT = 000000 NT.MOP= 000010 ABTERR 001104R 002 D$$Z11= 000001 H.GARD 000072 LK.SPN= 000002 NT.NSP= 000010 ABTER1 001143R 002 D.NAM = ****** GX H.HDLN 000002 LK.WAT= 000010 NT.VFY= 000007 ABTER2 001152R 002 D.UCB = ****** GX H.IPC 000016 LOGNAM 000230R 002 NVDBUF 001452R 002 AIOMSG 000051R 003 D.UCBL= ****** GX H.IPS 000014 L$$ASG= 000000 NVDERR 001365R 002 ATTACH 001462R 004 D.UNIT= ****** GX H.ISP 000020 L$$DRV= 000000 N$$LDV= 000001 ATTBUF 001213R 002 ERVAL1 001347R 002 H.LUN 000076 L$$LDR= 000000 N$$MOV= 000041 ATTMSG 001161R 002 ERVAL2 001356R 002 H.NLUN 000074 M$$CRB= 000124 N$$UMR= 000030 A$$CHK= 000000 EXIT 000124R 004 H.NML 000061 M$$CRX= 000000 N.CAC 000120 A$$CLI= 000020 E$$DVC= 000000 H.ODVA 000022 M$$EXT= 000000 N.CACC 000116 A$$CNT= 000000 E$$LOG= 000000 H.ODVL 000024 M$$FCS= 000000 N.CBL = 000142 A$$CPS= 000000 E$$NSI= 000000 H.OVLY 000054 M$$MGE= 000000 N.CDA 000142 A$$NSI= 000000 E$$PER= 000000 H.PFVA 000032 M$$MUP= 000000 N.CDAC 000140 A$$PRI= 000000 E$$XPR= 000000 H.RCVA 000036 M$$NET= 002627 N.CDEV 000062 A$$TRP= 000000 FCNTBL 001432R 004 H.RRVA 000062 M$$OVR= 000000 N.CID 000064 CLEF 001010R 002 F$$LPP= 000000 H.SMAP 000004 M$$XLN= 000400 N.CIDC 000062 CLS 000400R 002 F$$LVL= 000001 H.SPRI 000060 NE$ABM= 000010 N.CPS 000106 CON 000270R 002 GETIOP 001070R 004 H.TKVA 000026 NE$ABO= 000046 N.CPSC 000104 CONB 000700R 002 GETVD 000604R 004 H.TKVL 000030 NE$ACC= 000042 N.CTL 000000 CONER1 000215R 003 GIOMSG 000022R 003 H.VEXT 000056 NE$ACT= 000042 N.CUIC 000066 CONER2 000300R 003 GND 000430R 002 H.WND 000044 NE$COM= 000047 N.CUNI 000064 CONER3 001263R 002 GNDBUF 000024R 002 H.X25 000064 NE$FCF= 000050 N.DDE 000010 CONNEC 001562R 004 GNDCON 000440R 004 IE.ABO= ****** GX NE$FMT= 000005 N.DDEC 000006 CURAPR 000216R 002 GNDDSC 000452R 004 IE.IFC= ****** GX NE$GEN= 000007 N.DFM 000004 CURIOP 000212R 002 GNDINT 000450R 004 IE.NDA= ****** GX NE$IFC= 000030 N.DGP 000006 CURLEN 000220R 002 GNDSIZ= 000142 IE.OFL= ****** GX NE$ILS= 000043 N.DNM 000014 C$$CDA= 000010 GNDSTT 000206R 002 IE.UPN= ****** GX NE$IMG= 000042 N.DNMC 000012 C$$CKP= 000000 GNDTAB 000426R 004 ILEGAL 001452R 004 NE$MLB= 000006 N.DOT 000005 C$$INT= 000000 G$$GEF= 000000 IO.ATT= ****** GX NE$NNF= 000012 N.DUS 000010 C$$ORE= 001000 G$$TPP= 000000 IO.DET= ****** GX NE$NOD= 000002 N.RAC 000070 C$$PCR= 000000 G$$TSS= 000000 IO.WBT= ****** GX NE$NSD= 000003 N.RACC 000066 C$$RSH= 177564 G$$TTK= 000000 IO.WLB= ****** GX NE$NSL= 000013 N.RDE 000012 C$$RUN= 000000 G.TSDU= 000036 IS.SUC= ****** GX NE$NSR= 000003 N.RDEC 000010 C.LEEF= 000002 G.TSFW= 000024 I$$CSZ= 001000 NE$RES= 000001 N.RFM 000006 DETACH 001534R 004 G.TSGC= 000017 I$$RAR= 000000 NE$SSR= 000000 N.RGP 000010 DETBUF 001254R 002 G.TSMT= 000022 I$$RDN= 000000 NE$SSS= 000045 N.RID 000034 DETMSG 001222R 002 G.TSNL= 000020 I.FCN = ****** GX NE$TCN= 000040 N.RIDC 000032 DEVBUF 001537R 002 G.TSPC= 000016 I.PRM = ****** GX NE$TCO= 000006 N.RND 000000 DEVERR 001457R 002 G.TSPN= 000004 I.TCB = ****** GX NE$TPA= 000010 N.RNM 000016 DEVTYP 000236R 002 G.TSPR= 000014 KILAST 001256R 004 NE$UOB= 000004 N.RNMC 000014 DIOMSG 000076R 003 G.TSRN= 000010 KILFLG 000214R 002 NO.DTR= 000077 N.ROT 000007 DSC 000350R 002 G.TSSY= 000034 K$$CNT= 177546 NO.FAL= 000021 N.RPS 000056 DU$C0 = 000004 G.TSTN= 000000 K$$CSR= 177546 NO.FA1= 000001 N.RPSC 000054 DU$C1 = 000004 G.TSTS= 000032 K$$DAS= 000000 NO.NCU= 000023 N.RQL = 000110 DU$R0 = 000004 G.TSVA= 000026 K$$IEN= 000115 NO.RTL= 000022 N.RUS 000012 DU$R1 = 000004 G.TSVL= 000030 K$$LDC= 000001 NO.TAS= 000000 N.SDE 000042 D$$H11= 000001 H$$RTZ= 000074 K$$TPS= 000074 NO.TCL= 000017 N.SDEC 000040 D$$IAG= 000000 H.CSP 000000 LD$CO = 000000 NO.TC1= 000005 N.SEGZ 000002 D$$ISK= 000000 H.CUIC 000010 LD$DB = 000000 NO.TLK= 000020 N.SFM 000036 D$$LMD= 000000 H.DMAP 000005 LD$DD = 000000 NSERR 000123R 003 N.SGP 000040 D$$L11= 000006 H.DSW 000046 LD$DR = 000000 NSSTAT 000172R 002 N.SND 000030 D$$M11= 000001 H.DUIC 000012 LD$DU = 000000 NT.ABO= 000005 N.SNM 000046 D$$PAR= 000000 H.EFSV 000040 LD$DY = 000000 NT.ABT= 000004 N.SNMC 000044 D$$SHF= 000000 H.FCS 000050 LD$MS = 000000 NT.CON= 000001 N.SOT 000037 D$$WCK= 000000 H.FORT 000052 LD$NL = 000000 NT.DSC= 000003 N.SUS 000042 VPVDV - Virtual printer VIRTUAL MACRO Y05.02 Monday 03-Mar-86 11:03 Page 23-3 Symbol table OPEN 000252R 004 RCVSTT 000202R 002 STAMSG 000000R 003 T$$SMC= 000000 WRITE 001670R 004 OPN 000240R 002 REC 000320R 002 S$$ECC= 000000 T$$S11= 000001 W.BATT 000006 OPNERR 000156R 003 RECMSG 000650R 002 S$$HFC= 000036 T$$UTO= 000036 W.BFPD 000014 OWNER 000226R 002 RECW 000620R 002 S$$LIB= 000000 T$$U58= 000001 W.BHVR 000004 O$$LAP= 000000 REJ 000460R 002 S$$MAP= 000000 T.EFLG= ****** GX W.BLGH 000020 PRINT 000222R 004 RX$IAS= 000003 S$$NM1= 042504 T.RCVL= ****** GX W.BLPD 000016 PRIOP 001362R 004 RX$11D= 000000 S$$NM2= 043526 UISAR6= ****** GX W.BLVR 000002 PROERR 000364R 003 RX$11M= 000001 S$$NM3= 047105 UISDR6= ****** GX W.BNPD 000015 PR7 = ****** GX RX$11S= 000002 S$$OPT= 000000 USER 000224R 002 W.BOFF 000012 PS = ****** GX R$$CON= 000000 S$$WPC= 000036 US.OFL= ****** GX W.BPCB 000000 P$$BPR= 000063 R$$DER= 000000 S$$WPR= 000005 U$$DAS= 000000 W.BSIZ 000010 P$$CTL= 000000 R$$DSP= 000000 S$$WRG= 000000 U$$MHI= 000000 X$$DBT= 000000 P$$D70= 000000 R$$EIS= 000000 S$$WST= 000000 U$$MLO= 140000 X$$HDR= 000000 P$$FRS= 000310 R$$EXV= 000000 S$$YSZ= 040000 U$$MRN= 170230 $CBOMG= ****** GX P$$GMX= 000000 R$$GIN= 000000 S.ETEF= 000002 U$$UMD= 000000 $DEVHD= ****** GX P$$HIL= 003100 R$$HDV= 000000 S.REAE= 000002 U$$UMR= 000000 $DSW = ****** GX P$$LAS= 000000 R$$H11= 000002 TEXT 000222R 002 U.AST = ****** GX $HEADR= ****** GX P$$LOL= 001130 R$$JP1= 000002 TIQIO 001020R 002 U.CW2 = ****** GX $IOFIN= ****** GX P$$MAX= 000400 R$$LKL= 000001 TTQIO 001054R 002 U.CW3 = ****** GX $STPCT= ****** GX P$$OFF= 000000 R$$MPL= 000000 TTSTAT 000166R 002 U.CW4 = ****** GX $TKTCB= ****** GX P$$OOL= 000000 R$$M11= 000002 T$$BTW= 000000 U.OWN = ****** GX $$$ = 000006 P$$P45= 000000 R$$NDC= 000006 T$$CCA= 000000 U.ST2 = ****** GX $$$ARG= 000003 P$$RFL= 000000 R$$NDH= 000226 T$$COM= 000000 U.USR = ****** GX $$$FLG= 016630 P$$RTY= 000000 R$$NDL= 000001 T$$CON= 000000 U.VDV = ****** GX $$$FLO= 015400 P$$SRF= 000000 R$$SND= 000000 T$$CTR= 000000 VDUCB 000234R 002 $$$FMT= 000001 P$$WND= 000000 R$$TPR= 032070 T$$CUP= 000000 VDV 000000RG 004 $$$LOC= 000700R 002 Q$$MGR= 000000 R$$UDA= 000002 T$$ESC= 000000 VE.FAI= 177777 $$$OST= 000004 Q$$OPT= 000005 R$$X21= 000001 T$$GMC= 000000 VS.NPV= 000001 $$$T2 = 000027 Q.IOAE= 000012 R$$11M= 000000 T$$GTS= 000000 VS.PRV= 000002 .EXEFN= 000001 Q.IOEF= 000006 SETF 001014R 002 T$$KMG= 000000 VZ.NVD= 000000 .LLLUN= 000003 Q.IOFN= 000002 SND 000540R 002 T$$LWC= 000000 V$$CTR= 001000 .MBXLU= 000002 Q.IOLU= 000004 SNDSTT 000176R 002 T$$RED= 000000 V$$TLD= 001000 .NTEFN= 000003 Q.IOPL= 000014 SNDW 000570R 002 T$$RNE= 000000 V$$TLM= 001000 .RCEFN= 000005 Q.IOPR= 000007 SPA 000510R 002 T$$RPR= 000000 V$$TRM= 000000 .SDEFN= 000004 Q.IOSB= 000010 SPAAST 000364R 004 T$$RST= 000000 WB.BPS= 000040 .TTEFN= 000002 RCVBUF 000000R 002 SREA 001050R 002 T$$RUB= 000000 WB.NBP= 000020 .TTLUN= 000001 RCVSIZ= 000024 . ABS. 000142 000 (RW,I,GBL,ABS,OVR) 000000 001 (RW,I,LCL,REL,CON) DATA$I 001546 002 (RW,D,LCL,REL,CON) DATA$P 000512 003 (RO,D,LCL,REL,CON) CODE$ 002056 004 (RO,I,LCL,REL,CON) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 0 Size of work file: 16254 Words ( 64 Pages) Size of core pool: 17190 Words ( 66 Pages) Operating system: RSX-11M/PLUS Elapsed time: 00:00:49.00 VPVDV,LS:VPVDV/-SP=LB:[1,1]EXEMC/ML,NETLIB/ML,[11,10]RSXMC,[200,200]VPVDV