DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Table of contents 4- 4 ** DVF Data Area 4- 274 ** DVF Main Code 4- 342 ** TKINIT -- Task Initialization 4- 389 ** PSINIT -- Pass Initialization 4- 404 ** GETCMD -- Get next command 4- 436 ** GETDEV -- Process Device Specification 4- 703 ** GETBLK -- Copy Secondary Block Structure 4- 751 ** DEAFIL -- Deaccess Container Files 4- 826 ** DETACH -- Detach from the Virtual Device 4- 853 ** PRTWAR/PRTERR -- Print error messages DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 4 1 .Title DVF -- Deassign Virtual Disk 2 .Enabl LC 3 .Ident /V03.00/ 4 .Sbttl ** DVF Data Area 5 ; 6 ; 7 ; DVF -- Deassign Virtual Device & Delete Data Structures 8 ; 9 ; Version: V03.00 10 ; Operating Systems: RSX-11M-PLUS V3.0 11 ; MICRO/RSX V3.0 12 ; (has NOT been tested under P/OS) 13 ; 14 ; Originally written by Ralph Stamerjohn 15 ; 16 ; Previously modified by: 17 ; 18 ; R.S. Mearns 19 ; G. Everhart 20 ; 21 ; Updated by: G. L. Maxwell 22 ; U.S. Geological Survey 23 ; 27-AUG-86 24 ; 25 ; ************************************************************************ 26 ; * 27 ; Although this program has been tested by the Geological Survey, * 28 ; United States Department of the Interior, no warranty, expressed or * 29 ; implied, is made by the Geological Survey as to the accuracy and * 30 ; functioning of the program and related program material nor shall * 31 ; the fact of distribution constitute any such warranty, and no respon- * 32 ; sibility is assumed by the Geological Survey in connection therewith. * 33 ; * 34 ; Full permission and consent is hereby given to DECUS and to the DECUS * 35 ; Special Interest Groups to reproduce, distribute, and publish and * 36 ; permit others to reproduce in whole or in part, in any form and * 37 ; without restriction, this program and any information relating thereto * 38 ; * 39 ; ************************************************************************ 40 ; 41 ; DVF performs the reverse operation of the AVF command: DVF deassigns 42 ; a virtual device, releasing its container files and deleting the 43 ; virtual device data structure. 44 ; 45 ; A Virtual Disk is composed of one or more contiguous container files 46 ; on mounted Files-11 volumes (which may themselves be virtual disks), 47 ; along with a virtual disk driver which maps I/O requests onto the 48 ; container files. 49 ; 50 ; DVF takes a single argument from the user: the device specification 51 ; of a virtual device. DVF obtains all other information required to 52 ; deassign the device from the existing data structures. 53 ; 54 ;- 55 56 ; 57 ; Macro Library Calls: DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 4-1 ** DVF Data Area 58 ; 59 ; Symbolic Definitions. 60 ; 61 .MCALL HDRDF$ ; Define Task Header Offsets 62 000000 HDRDF$ 63 .MCALL UCBDF$ ; Define UCB Offsets 64 000000 UCBDF$ 65 .MCALL F11DF$ ; Define Files-11 Offsets 66 000000 F11DF$ 67 .MCALL TCBDF$ ; Define TCB offsets 68 000000 TCBDF$ 69 ; 70 ; Directive Macros. 71 ; 72 .MCALL DIR$ ; Issue Directive 73 .MCALL ALUN$S ; Assign Lun 74 .MCALL EXST$S ; Exit System 75 .MCALL QIOW$ ; Issue QIO And Wait 76 .MCALL GTSK$S ; Get Task Parameters 77 .MCALL SPWN$ ; Spawn Task 78 .MCALL STSE$S ; Stop For Single Event Flag 79 .MCALL GIN$ ; Get Information 80 ; 81 ; GCML, CSI Macros. 82 ; 83 .MCALL GCMLB$ ; Define GCML block 84 .MCALL GCML$ ; Define GCML routine 85 .MCALL RCML$ ; Define RCML routine 86 .MCALL CSI$ ; Define CSI Offsets 87 000000 CSI$ 88 .MCALL CSI$SW,CSI$SV,CSI$ND ; Switch Table Macros 89 .MCALL CSI$1,CSI$4 ; Parse Command Line 90 ; 91 ; FCS Macros. 92 ; 93 .MCALL FSRSZ$ ; Define Fsr Region 94 .MCALL FINIT$ ; Define FCS init routine 95 .MCALL NBOFF$ ; Define filename block offsets 96 000000 NBOFF$ DEF$L 97 ; 98 ; Define Files-11 QIO Macro. 99 ; 100 .MACRO F11QIO DPB,ADR 101 DIR$ #DPB 102 103 .IF NB ADR 104 105 BCS ADR 106 CMPB #IS.SUC,IOSTAT 107 BNE ADR 108 109 .ENDC 110 111 .ENDM F11QIO 112 113 000000 .PSECT $WDATA,RW,D 114 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 4-2 ** DVF Data Area 115 ; 116 ; Local Symbols: 117 ; 118 ; Logical Units/event Flags. 119 ; 120 000001 CMDLUN = 1 ; AVF command LUN 121 000002 TTYLUN = 2 ; Terminal I/O LUN 122 000003 FILLUN = 3 ; File I/O LUN 123 000004 VDLUN = 4 ; Virtual Disk LUN 124 000001 EV.QIO = 1 ; QIO Wait Event Flag 125 000002 EV.SPN = 2 ; Spawn Event Flag 126 ; 127 ; Files-11 Bit Masks. 128 ; 129 ; File attributes 130 ; 131 000001 H.FOWN = 1 ; File owner 132 000002 H.FPRO = 2 ; File protection 133 000003 H.UCHA = 3 ; File characteristics 134 000004 U.UFAT = 4 ; Record I/O area 135 000005 I.FNAM = 5 ; Filename, filetype, version no. 136 000006 I.FTYP = 6 ; Filetype 137 000007 I.FVER = 7 ; Version no. 138 000010 I.EXDT = 10 ; Expiration date 139 000011 I.STAT = 11 ; Statistics block 140 000012 I.FHDR = 12 ; Entire file header 141 000013 I.RVNO = 13 ; Revision number, cr, rv, ex dates 142 000014 I.PLCM = 14 ; Placement control 143 ; 144 ; File characteristics 145 ; 146 000200 UC.CON = 200 ; Logically contiguous file 147 000100 UC.DLK = 100 ; File improperly closed 148 ; 149 ; Size and extend control 150 ; 151 000001 EX.AC1 = 1 ; Extend contiguously 152 000002 EX.AC2 = 2 ; Extend by largest contiguous hole 153 000004 EX.FCO = 4 ; File must end up contiguous 154 000010 EX.ADF = 10 ; Use default extend size 155 000020 EX.ALL = 20 ; Placement control 156 000200 EX.ENA = 200 ; Enable extend 157 ; 158 ; Access control 159 ; 160 000001 AC.LCK = 1 ; Lock out further writes or extends 161 000002 AC.DLK = 2 ; Enable deaccess lock 162 000004 AC.LKL = 4 ; Enable block locking 163 000010 AC.EXL = 10 ; Enable explicit block unlocking 164 000040 AC.WCK = 40 ; Enable write-checking 165 000200 AC.ENB = 200 ; Enable access 166 167 ; 168 ; Local Data: 169 ; 170 ; Directives. 171 ; DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 4-3 ** DVF Data Area 172 000000 WATDPB: QIOW$ IO.WAT,FILLUN,EV.QIO,,IOSTAT,, 173 000030 ERRDPB: QIOW$ IO.WVB,TTYLUN,EV.QIO,,IOSTAT,,<0,0,0,0,0,0> 174 ; 175 000060 PRVDPB: GIN$ GI.SPR,0 176 000066 VECDPB: GIN$ GI.VEC,VECBUF,VECSIZ 177 000076 CONDPB: SPWN$ ...CON,,,,,EV.SPN,,ESB,CONCMD 178 ; 179 ; GCML Control Block 180 ; 181 000003 MAXDEP = 3 ; Allow nesting level to 3 182 000120 MAXCMD = 80. ; Allow up to 80. char commands 183 184 000130 GCML: GCMLB$ MAXDEP,,,CMDLUN,,MAXCMD+2 185 .EVEN 186 ; 187 ; CSI Control Blocks. 188 ; 189 000602 000060 DSCBLK: .WORD C.EXPS ; Expanded command line descriptor 190 000604 000606' .WORD .+2 ; Pointer to buffer (follows) 191 000606 .BLKB C.EXPS ; Expanded command line buffer 192 .EVEN 193 194 000666 CSIBLK: .BLKB C.SIZE ; CSI Control Block 195 .EVEN 196 197 ; 198 ; Switch Bit Masks. 199 ; 200 000002 FL.HLP = 2 ; Give help 201 ; 202 ; CSI Switch Tables. 203 ; 204 000742 OUTSWI: CSI$SW HE,FL.HLP,CSIMSK,SET 205 000752 CSI$ND 206 ; 207 ; Filename Block 208 ; 209 000754 FNB: .BLKB S.FNB ; Allocate Filename Block 210 .EVEN 211 ; 212 ; Write Attribute List. 213 ; 214 001012 003 001 WATLST: .BYTE H.UCHA,01 ; Write user characteristics 215 001014 001020' .WORD WATATT ; 216 001016 000 000 .BYTE 0,0 ; End-of-list 217 001020 200 WATATT: .BYTE UC.CON 218 .EVEN 219 001022 000000 .WORD 0 ; Safety margin (?) 220 ; 221 ; Executive Vector Buffer 222 ; 223 001024 000000 VECBUF: .WORD 0 ; Flags word 224 001026 000000G DEVHD: .WORD $DEVHD ; Device listhead 225 001030 000000G DESEC: .WORD $DESEC ; Deallocate secondary pool block 226 001032 000000G SAHDB: .WORD $SAHDB ; Header bias location 227 001034 000000G SAHPT: .WORD $SAHPT ; Header displacement 228 001036 000000G KISA6: .WORD KISAR6 ; Kernel APR 6 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 4-4 ** DVF Data Area 229 001040 000000G HEADR: .WORD $HEADR ; Header pointer 230 001042 000000G QACNT: .WORD $QACNT ; Queue accounting block 231 001044 000000G SABPT: .WORD $SABPT ; Pointer to SAB 232 001046 000000G EXRQN: .WORD $EXRQN ; Request task routine 233 001050 000000G TKTCB: .WORD $TKTCB ; TCB pointer 234 001052 000000G FMASK2: .WORD $FMSK2 ; Second feature mask word 235 001054 000000G DRQRQ: .WORD $DRQRQ ; Queue I/O to driver routine 236 000015 VECSIZ = <.-VECBUF>/2 237 ; 238 ; Other variables. 239 ; 240 001056 000000 EXISTS::.WORD 0 ; Task exit status word 241 001060 000000 000000 IOSTAT::.WORD 0,0 ; I/O status block 242 001064 000000 NEWUCB::.WORD 0 ; Address of new disk UCB 243 001066 000000 VFDCB:: .WORD 0 ; VF0: DCB address 244 001070 000000 NEWDCB::.WORD 0 ; DCB of new device 245 001072 DVNAM:: .BLKB 2 ; Name of device 246 001074 000000 DVUNT:: .WORD 0 ; Device unit number 247 001076 000000 ERRFLG::.WORD 0 ; System state error flag 248 001100 000000 CSIMSK::.WORD 0 ; CSI Mask word 249 001102 000000 NUMFIL::.WORD 0 ; Number of container files 250 001104 000000 OURTCB::.WORD 0 ; TCB address of task 251 001106 000000 TIUCB:: .WORD 0 ; TI: UCB address 252 001110 000 PROUIC::.BYTE 0 ; Protection UIC (Group code here) 253 001111 000 DEVGRP::.BYTE 0 ; Protection group for created device 254 001112 ESB:: .BLKW 8. ; Exit status block 255 256 ; 257 ; Define local task area for building secondary control blocks 258 ; 259 260 001132 SECBLK::.BLKB MX$FIL * X.LEN ; Define space for secondary blocks 261 262 .NLIST BEX 263 001672 103 117 116 CONCMD: .ASCII ^CONFIGURE/NOMSG OFFLINE ^ 264 001722 CONADD: .BLKB 8. 265 .LIST BEX 266 .EVEN 267 268 ; 269 ; FSR region 270 ; 271 001732 FSRSZ$ 1 ; One buffer required for GCML$ 272 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5 ** DVF Main Code 274 .SBTTL ** DVF Main Code 275 000000 .PSECT $CODE,RO,I 276 277 ;+ 278 ; $DVF -- Deassign Virtual Device 279 ; 280 ; Syntax: 281 ; 282 ; >DVF ddnn: 283 ; 284 ; ddnn: Specifies the name to be used for the Virtual Unit. 285 ; 286 ;- 287 288 000000 $DVF:: 289 ; 290 ; Perform one-time initialization 291 ; 292 000000 CALL TKINIT ; Do task-level initialization 293 000004 103417 BCS DVFEX ; If CC=1 then we can't run 294 ; 295 ; Top of command processing pass loop 296 ; 297 ; Perform pass initialization 298 ; 299 000006 RESTRT: CALL PSINIT ; Perform pass intialization 300 ; 301 ; GETCMD returns: 302 ; 303 ; A new command line is read into the GCML buffer, and 304 ; preliminary parsing has been done (CSI$1). 305 ; 306 ; R0 contains the address of the CSI control block 307 ; 308 ; If carry is set, end-of-file or an error has occurred while 309 ; fetching the command line. 310 ; 311 000012 CALL GETCMD ; Get next command line 312 000016 103412 BCS DVFEX ; Exit with status to parent 313 ; 314 ; GETDEV performs the following: 315 ; 316 ; The output specification is parsed for the name and unit number 317 ; of the virtual device, along with any device switches. 318 ; 319 ; The device is checked to make sure that it is a virtual unit. 320 ; 321 ; If the device is online, an attempt is made to take it offline. 322 ; 323 ; If the carry bit is returned clear, processing can proceed; 324 ; otherwise, the device cannot be deassigned. 325 ; 326 000020 CALL GETDEV ; Parse virtual device and validate it 327 000024 103770 BCS RESTRT ; On error, start next command 328 ; 329 ; Copy the secondary pool control block into local memory, and delete 330 ; the secondary pool structure. DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-1 ** DVF Main Code 331 ; 332 000026 CALL GETBLK ; Copy and delete secondary pool block structure 333 ; 334 ; DEAFIL is called to deaccess all active container files 335 ; 336 000032 CALL DEAFIL ; Deaccess all container files 337 000036 CALL DETACH ; Detach from the device 338 000042 000761 BR RESTRT ; And attempt to process new command 339 340 000044 DVFEX:: EXST$S EXISTS ; Exit with status 341 342 .SBTTL ** TKINIT -- Task Initialization 343 ;+ 344 ; ** TKINIT -- One-time task initialization 345 ; 346 ; This routine performs the following functions: 347 ; 348 ; - Retrieves the taskname for use in prompts and error messages 349 ; - Initializes the FCS buffers 350 ; 351 ; All registers are available to this routine 352 ;- 353 354 000056 TKINIT:: 355 000056 162706 000044 SUB #18.*2.,SP ; Allocate buffer on stack 356 000062 010605 MOV SP,R5 ; Point to it 357 000064 GTSK$S R5 ; Get task info 358 000074 016501 000000 MOV G.TSTN(R5),R1 ; Get task name 359 000100 012700 000000G MOV #TSKNAM,R0 ; Point to the output buffer 360 000104 010004 MOV R0,R4 ; Save the buffer address 361 000106 CALL $C5TA ; Convert to ASCII for error routines 362 000112 062706 000044 ADD #18.*2.,SP ; Release the stack space 363 000116 012703 000002G MOV #PRMSTR+2,R3 ; Get command line prompt string 364 000122 112423 MOVB (R4)+,(R3)+ ; Copy it over 365 000124 112423 MOVB (R4)+,(R3)+ ; ... 366 000126 112423 MOVB (R4)+,(R3)+ ; ... 367 368 000130 FINIT$ ; Initialize the FSR region 369 370 000134 DIR$ #PRVDPB ; Clear task privilege 371 372 000142 012767 000001 001056' MOV #EX$SUC,EXISTS ; Assume successful status 373 374 000150 DIR$ #VECDPB ; Get executive vectors 375 000156 103006 BCC 10$ ; If cc=0 then successful 376 000160 012704 000000G MOV #ER$GIN,R4 ; Get the error code 377 000164 CALL PRTERR ; Report the error 378 000170 000261 SEC ; Return cc=1 379 000172 000413 BR 20$ ; And return 380 381 000174 017700 001050' 10$: MOV @TKTCB,R0 ; Get our TCB address 382 000200 010067 001104' MOV R0,OURTCB ; And save it 383 000204 016001 000026 MOV T.UCB(R0),R1 ; Get TI: UCB address 384 000210 010167 001106' MOV R1,TIUCB ; And save it 385 000214 016167 177774 001110' MOV U.LUIC(R1),PROUIC ; Save protection group code 386 387 000222 000207 20$: RETURN ; Return to caller DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-2 ** TKINIT -- Task Initialization 388 389 .SBTTL ** PSINIT -- Pass Initialization 390 ;+ 391 ; PSINIT -- Perform pass initialization 392 ; 393 ; This routine is executed prior to the scanning of a new command line. 394 ; It resets variables which will be used to construct the Virtual Device. 395 ; 396 ; Inputs: None. 397 ; Outputs: None. 398 ;- 399 400 000224 PSINIT:: 401 000224 005067 001100' CLR CSIMSK ; Store default switch environment 402 000230 000207 RETURN ; Return to caller 403 404 .SBTTL ** GETCMD -- Get next command 405 ;+ 406 ; ** GETCMD -- Get next command for processing 407 ; 408 ; Inputs: None. 409 ; Outputs: Carry clear - A command has been successfully retrieved 410 ; R0 points to the CSI control block 411 ; Carry set - End of file or command I/O error 412 ; 413 ;- 414 415 000232 GETCMD:: 416 000232 GCML$ #GCML,#PRMSTR,#PRMSTL ; Get next command line 417 000256 103420 BCS 10$ ; If cs then check error 418 000260 010001 MOV R0,R1 ; Copy GCML block address 419 000262 012700 000666' MOV #CSIBLK,R0 ; Point to CSI control block 420 000266 016160 000146 000002 MOV G.CMLD(R1),C.CMLD(R0) ; Copy command line descriptor 421 000274 001756 BEQ GETCMD ; If eq then null command line 422 000276 016160 000150 000004 MOV G.CMLD+2(R1),C.CMLD+2(R0) 423 000304 CSI$1 ; Perform syntax preprocessing 424 000310 103021 BCC 30$ ; OK, exit to caller 425 000312 012704 000000G MOV #ER$SYN,R4 ; Get the error code 426 000316 000413 BR 20$ ; And proceed 427 000320 122760 177766 000140 10$: CMPB #GE.EOF,G.ERR(R0) ; End of file on outer level? 428 000326 000261 SEC ; Assume it is 429 000330 001411 BEQ 30$ ; If eq yes 430 000332 012704 000000G MOV #ER$GCM,R4 ; Get the error code 431 000336 RCML$ #GCML ; On GCML errors, reset the context 432 000346 20$: CALL PRTERR ; Print error code 433 000352 000727 BR GETCMD ; Try to do it again 434 000354 000207 30$: RETURN ; Return to caller 435 436 .SBTTL ** GETDEV -- Process Device Specification 437 ; 438 ; ** GETDEV -- Process virtual device specification 439 ; 440 ; Inputs: R0 points to CSI control block 441 ; 442 ; Outputs: Carry set: One of many errors has happened 443 ; Carry clear: Device data structure created. 444 ; DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-3 ** GETDEV -- Process Device Specification 445 000356 GETDEV: 446 000356 CSI$4 ,OUTPUT,#OUTSWI,#DSCBLK ; Process output specification 447 000414 012704 000000G MOV #ER$SYN,R4 ; Assume an error occurred 448 000420 103002 BCC 10$ ; If carry clear then OK 449 000422 000167 001042 JMP 135$ ; Handle error 450 ; 451 ; Process help request 452 ; 453 000426 032767 000002 001100' 10$: BIT #FL.HLP,CSIMSK ; Was help requested? 454 000434 001417 BEQ 20$ ; If eq no 455 000436 012700 000030' MOV #ERRDPB,R0 ; Point to the QIO DPB 456 000442 012760 000000G 000014 MOV #HLPMSG,Q.IOPL(R0) ; Point to help message 457 000450 012760 000000G 000016 MOV #HLPLEN,Q.IOPL+2(R0) ; Store length 458 000456 012760 000040 000020 MOV #<' >,Q.IOPL+4(R0) ; Store VFC 459 000464 DIR$ R0 ; Write it out 460 000470 000167 001000 JMP 140$ ; And go for next command 461 ; 462 ; Perform other checks 463 ; 464 000474 012704 000000G 20$: MOV #ER$NDV,R4 ; Assume no device specified 465 000500 132760 000004 000001 BITB #CS.DVF,C.STAT(R0) ; Device specified? 466 000506 001002 BNE 30$ ; If ne yes 467 000510 000167 000754 JMP 135$ ; If eq no 468 469 000514 012704 000000G 30$: MOV #ER$EXT,R4 ; Assume extraneous input 470 000520 132760 000040 000001 BITB #CS.EQU,C.STAT(R0) ; Both input and output specified? 471 000526 001004 BNE 40$ ; If ne yes 472 000530 132760 000033 000001 BITB #CS.NMF!CS.DIF!CS.WLD!CS.MOR,C.STAT(R0) ; Other garbage? 473 000536 001402 BEQ 50$ ; If eq no 474 000540 40$: CALL PRTWAR ; Print the warning 475 ; 476 ; Extract device name 477 ; 478 000544 016003 000006 50$: MOV C.DEVD(R0),R3 ; Get length of device string 479 000550 016000 000010 MOV C.DEVD+2(R0),R0 ; Get address of device string 480 000554 112067 001072' MOVB (R0)+,DVNAM ; Store first char 481 000560 112067 001073' MOVB (R0)+,DVNAM+1 ; Store second char 482 000564 CALL $COTB ; Convert unit number 483 000570 010167 001074' MOV R1,DVUNT ; Store the unit number 484 000574 ALUN$S #FILLUN,DVNAM,DVUNT ; Assign to the virtual unit 485 000616 012704 000000G MOV #ER$ILD,R4 ; Assume error 486 000622 026727 000000G 000000G CMP $DSW,#IS.SUC ; Successful? 487 000630 001402 BEQ 55$ ; If eq yes 488 000632 000167 000632 JMP 135$ ; If ne device not in system 489 000636 55$: ; Reference label 490 ; 491 ; Go to system state to perform further checks and create device structure 492 ; 493 000636 005067 001076' CLR ERRFLG ; Clear system state error flag 494 000642 CALL $SWSTK,100$ ; Switch to the system stack 495 496 ; Get UCB address out of the header 497 498 .IF DF X$$HDR 499 500 000646 017746 001036' MOV @KISA6,-(SP) ;; Save APR 501 000652 017777 001032' 001036' MOV @SAHDB,@KISA6 ;; Map external header (if necessary) DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-4 ** GETDEV -- Process Device Specification 502 000660 017700 001034' MOV @SAHPT,R0 ;; Get the header bias 503 504 .IFF ; DF X$$HDR 505 506 MOV @HEADR,R0 ;; Get task header address 507 508 .IFTF ; DF X$$HDR 509 510 000664 016005 000106 MOV H.LUN+<*4>(R0),R5 511 ;; Grab virtual disk UCB address 512 513 .IFT ; DF X$$HDR 514 515 000670 012677 001036' MOV (SP)+,@KISA6 ;; Restore mapping 516 517 .ENDC ; DF X$$HDR 518 519 000674 010567 001064' MOV R5,NEWUCB ;; Save UCB address 520 000700 016567 000000 001070' MOV U.DCB(R5),NEWDCB ;; Save the DCB address, too 521 ; 522 ; Find VF0: 523 ; 524 000706 012704 000000G MOV #ER$NLD,R4 ;; Assume VF: not there 525 000712 016701 001026' MOV DEVHD,R1 ;; Get device listhead 526 000716 011101 60$: MOV (R1),R1 ;; Get next DCB 527 000720 001511 BEQ 80$ ;; If eq then end of list 528 000722 026127 000000G 043126 CMP D.NAM(R1),#<"VF> ;; Right name? 529 000730 001372 BNE 60$ ;; If ne no 530 000732 005761 000000G TST D.UNIT(R1) ;; Unit zero? 531 000736 001367 BNE 60$ ;; If ne no 532 000740 005761 000000G TST D.PCB(R1) ;; Is the driver loaded? 533 000744 001477 BEQ 80$ ;; If eq no 534 000746 010167 001066' MOV R1,VFDCB ;; Save VF0: DCB address 535 ; 536 ; Check that the device the user specified is in fact a virtual device 537 ; 538 000752 012704 000000G MOV #ER$NVD,R4 ;; Assume not a virtual device 539 000756 016101 000000G MOV D.UCB(R1),R1 ;; Get VF0: UCB address 540 000762 016101 000072 70$: MOV U.VLNK(R1),R1 ;; Get next virtual UCB address 541 000766 001466 BEQ 80$ ;; If eq end of list 542 000770 020105 CMP R1,R5 ;; Found our unit? 543 000772 001373 BNE 70$ ;; If ne no, try next one 544 ; 545 ; Check that the virtual disk is currently assigned. 546 ; 547 000774 012704 000000G MOV #ER$NAS,R4 ;; Assume the unit is unassigned 548 001000 005765 000052 TST U.CTLP(R5) ;; Is this unit assigned? 549 001004 001457 BEQ 80$ ;; If eq no - return error 550 ; 551 ; Check that the unit is not attached or allocated by someone else 552 ; 553 001006 012704 000000G MOV #ER$ATT,R4 ;; Assume problems with the device 554 001012 005765 177776 TST U.OWN(R5) ;; Is the device owned? 555 001016 001404 BEQ 74$ ;; If eq no 556 001020 026567 177776 001106' CMP U.OWN(R5),TIUCB ;; Is it owned by us? 557 001026 001046 BNE 80$ ;; If ne no, that's an error 558 001030 005765 000022 74$: TST U.ATT(R5) ;; Is the device attached by someone? DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-5 ** GETDEV -- Process Device Specification 559 001034 001043 BNE 80$ ;; If ne yes, that's an error 560 ; 561 ; Check that the unit is not busy 562 ; 563 001036 012704 000000G MOV #ER$BSY,R4 ;; Assume the device is busy 564 001042 132765 000200 000005 BITB #US.BSY,U.STS(R5) ;; Is the unit busy? 565 001050 001035 BNE 80$ ;; If ne yes 566 001052 132765 000100 000005 BITB #US.MNT,U.STS(R5) ;; Is the unit mounted? 567 001060 001431 BEQ 80$ ;; If eq yes 568 ; 569 ; Check that we have sufficient privilege to monkey with the disk 570 ; 571 001062 012704 000000G MOV #ER$PRV,R4 ;; Assume we ain't got it 572 001066 126567 000050 001111' CMPB U.XGRP(R5),DEVGRP ;; Does our protection group match the unit's 573 001074 001404 BEQ 76$ ;; If eq yes -- accept command 574 001076 122767 000010 001111' CMPB #10,DEVGRP ;; Are we sufficiently privileged? 575 001104 103417 BLO 80$ ;; If Lo no -- not privileged group 576 577 001106 016765 001104' 000022 76$: MOV OURTCB,U.ATT(R5) ;; Attach to the unit 578 579 ; 580 ; Assign a LUN to the unit so that I/O rundown will detach us 581 ; 582 .IF DF X$$HDR 583 584 001114 017746 001036' MOV @KISA6,-(SP) ;; Save APR 585 001120 017777 001032' 001036' MOV @SAHDB,@KISA6 ;; Map external header (if necessary) 586 001126 017700 001034' MOV @SAHPT,R0 ;; Get the header bias 587 588 .IFF ; DF X$$HDR 589 590 MOV @HEADR,R0 ;; Get task header address 591 592 .IFTF ; DF X$$HDR 593 594 001132 010560 000112 MOV R5,H.LUN+<*4>(R0) 595 ;; Assign LUN to Virtual Unit 596 597 .IFT ; DF X$$HDR 598 599 001136 012677 001036' MOV (SP)+,@KISA6 ;; Restore mapping 600 601 .ENDC ; DF X$$HDR 602 603 001142 000402 BR 90$ ;; And return to user state 604 605 001144 010467 001076' 80$: MOV R4,ERRFLG ;; Set error code 606 001150 000207 90$: RETURN ;; Return to user state 607 608 001152 000241 100$: CLC ; Assume success 609 001154 016704 001076' MOV ERRFLG,R4 ; Get error flag 610 001160 001143 BNE 135$ ; If ne, then leave now 611 ; 612 ; If the unit is still online, then take it offline now. 613 ; 614 001162 016705 001064' MOV NEWUCB,R5 ; Get the device UCB 615 001166 132765 000001 000007 BITB #US.OFL,U.ST2(R5) ; Is the unit already offline? DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-6 ** GETDEV -- Process Device Specification 616 001174 001140 BNE 150$ ; If ne yes, return with success 617 618 001176 012700 001722' MOV #CONADD,R0 ; Get address of command line 619 001202 116720 001072' MOVB DVNAM,(R0)+ ; Store device name 620 001206 116720 001073' MOVB DVNAM+1,(R0)+ ; 621 001212 016701 001074' MOV DVUNT,R1 ; Get unit number 622 001216 005002 CLR R2 ; No leading zeros 623 001220 CALL $CBOMG ; Convert to binary 624 001224 112720 000072 MOVB #<':>,(R0)+ ; Finish with colon 625 001230 162700 001672' SUB #CONCMD,R0 ; Calculate length of the command 626 001234 012701 000076' MOV #CONDPB,R1 ; Get the DPB 627 001240 010061 000026 MOV R0,S.PWCL(R1) ; Store command length 628 001244 DIR$ R1 ; Take the device offline 629 001250 103413 BCS 110$ ; Branch on spawn error 630 001252 STSE$S #EV.SPN ; Wait for command completion 631 001264 022767 000001 001112' CMP #EX$SUC,ESB ; Did it work? 632 001272 001002 BNE 110$ ; If ne no 633 001274 000241 CLC ; Indicate success 634 001276 000477 BR 150$ ; And return 635 ; 636 ; CON could not take the unit offline, probably because the user is non- 637 ; privileged. We will just manually do it now. Deallocate the UCB extension, 638 ; if there is one, with a call to accounting. Then mark the UCB offline. 639 ; 640 ; ** NOTE WELL! The following code must reside in APR 5!! 641 ; 642 001300 000241 110$: CLC ; Clear carry 643 001302 CALL $SWSTK,150$ ; Go on the system stack 644 001306 016705 001064' MOV NEWUCB,R5 ;; Get the UCB address 645 001312 016500 000032 MOV U.UCBX(R5),R0 ;; Get UCB extension 646 001316 001460 BEQ 130$ ;; If eq there is none 647 001320 005065 000032 CLR U.UCBX(R5) ;; Clear UCB extension pointer 648 649 650 001324 032777 000000G 001052' BIT #F2.ACN,@FMASK2 ;; Accounting supported? 651 001332 001446 BEQ 120$ ;; If eq no, just deallocate it 652 001334 005777 001044' TST @SABPT ;; Is accounting active? 653 001340 001443 BEQ 120$ ;; If eq no, just deallocate it 654 001342 010001 MOV R0,R1 ;; Copy the UCB extension bias 655 656 001344 017746 001036' MOV @KISA6,-(SP) ;; Save APR for mapping UCBX 657 001350 010177 001036' MOV R1,@KISA6 ;; Map UCBX 658 001354 012700 140000 MOV #140000,R0 ;; Get displacement 659 001360 112760 000000G 000000G MOVB #BT.DST,B.TYP(R0) ;; Insert type 660 001366 112760 000074 000000G MOVB #X.LGTH,B.LEN(R0) ;; And length 661 ; 662 ; Get the device name and unit number 663 ; 664 001374 011504 MOV (R5),R4 ;; Get the DCB address 665 001376 016460 000000G 000052 MOV D.NAM(R4),X.DNAM(R0) ;; Store the device name 666 001404 010503 MOV R5,R3 ;; Copy the UCB address 667 001406 166403 000000G SUB D.UCB(R4),R3 ;; Convert to a UCB offset 668 001412 005002 CLR R2 ;; Prepare for the divide 669 001414 071264 000000G DIV D.UCBL(R4),R2 ;; Get UCB number on this DCB 670 001420 116403 000000G MOVB D.UNIT(R4),R3 ;; Get number of first unit on this DCB 671 001424 042703 177400 BIC #177400,R3 ;; Eliminate possible sign extend 672 001430 060203 ADD R2,R3 ;; Make it the total unit number DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-7 ** GETDEV -- Process Device Specification 673 001432 110360 000054 MOVB R3,X.UNIT(R0) ;; Store the unit number 674 675 001436 012677 001036' MOV (SP)+,@KISA6 ;; Restore mapping 676 ; 677 ; Arguments to $QACNT (Queue Accounting Transaction Block): 678 ; 679 ; R1 - Relocation bias to map accounting block 680 ; 681 ; R3, R4, and R5 preserved 682 ; 683 001442 CALL @QACNT ;; Pass block to accounting 684 001446 000404 BR 130$ ;; And proceed 685 686 001450 012701 000001 120$: MOV #/100,R1 ;; Set length of block 687 ; 688 ; Arguments to $DESEC (Deallocate Secondary Pool Block): 689 ; 690 ; R0 - Relocation bias to map secondary pool block 691 ; R1 - Size of block in 32K word blocks 692 ; 693 001454 CALL @DESEC ;; Deallocate ucb extension 694 695 001460 152765 000001 000007 130$: BISB #US.OFL,U.ST2(R5) ;; Set the device offline 696 001466 000207 RETURN ;; Return to user state and to caller 697 698 001470 135$: CALL PRTERR ; Print the error code 699 001474 000261 140$: SEC ; Indicate failure 700 001476 000207 150$: RETURN ; Return to caller 701 702 703 .SBTTL ** GETBLK -- Copy Secondary Block Structure 704 ;+ 705 ; GETBLK -- Copy the secondary block structure into local memory 706 ; and release it to secondary pool. 707 ; 708 ; GETBLK performs the following: 709 ; 710 ; Copies the secondary block structure from secondary pool 711 ; into the local task image buffer. 712 ; 713 ; Deallocates the secondary block buffer, and resets various 714 ; offsets in the UCB. 715 ; 716 ;- 717 718 001500 GETBLK:: 719 001500 CALL $SWSTK,30$ ; Go on the system stack 720 721 001504 016705 001064' MOV NEWUCB,R5 ;; Get address of virtual UCB 722 001510 116503 000047 MOVB U.XFIL(R5),R3 ;; Get number of container files 723 001514 010367 001102' MOV R3,NUMFIL ;; Store for later use 724 001520 070327 000026 MUL #X.LEN,R3 ;; Calculate number of bytes used 725 001524 010346 MOV R3,-(SP) ;; Save the count 726 727 001526 017746 001036' MOV @KISA6,-(SP) ;; Save APR 728 001532 016577 000052 001036' MOV U.CTLP(R5),@KISA6 ;; Map the control block 729 001540 012700 140000 MOV #140000,R0 ;; Load displacement DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-8 ** GETBLK -- Copy Secondary Block Structure 730 001544 012701 001132' MOV #SECBLK,R1 ;; Point to local copy of secondary block 731 001550 006203 ASR R3 ;; Convert number of bytes to words 732 001552 012021 10$: MOV (R0)+,(R1)+ ;; Copy out of secondary pool 733 001554 077302 SOB R3,10$ ;; Loop until finished 734 001556 012677 001036' MOV (SP)+,@KISA6 ;; Restore APR 735 736 001562 005065 000012 CLR U.CW2(R5) ;; Clear high order disk size 737 001566 005065 000014 CLR U.CW3(R5) ;; Clear low order 738 001572 016500 000052 MOV U.CTLP(R5),R0 ;; Get address of the control block 739 001576 005065 000052 CLR U.CTLP(R5) ;; Clear out secondary block address 740 741 001602 011601 MOV (SP),R1 ;; Get number of bytes back 742 001604 072127 177772 ASH #-6,R1 ;; Convert to 32 word blocks 743 001610 032726 000077 BIT #77,(SP)+ ;; Do we need an extra block? 744 001614 001401 BEQ 20$ ;; No, we're OK 745 001616 005201 INC R1 ;; Deallocate one more block 746 747 001620 20$: CALL @DESEC ;; Deallocate the secondary pool block 748 749 001624 000207 30$: RETURN ;; Return to user state and to caller 750 751 .SBTTL ** DEAFIL -- Deaccess Container Files 752 ;+ 753 ; DEAFIL -- Deaccess Container Files 754 ; 755 ; This routine is called to deaccess any container files for the 756 ; virtual unit. Any file which was accessed must be examined 757 ; to undo the operation. This may involve: 758 ; 759 ; - Re-writing attributes to disable the deaccess lock bit 760 ; - Decrementing the volume transaction count of the ACP 761 ;- 762 763 001626 DEAFIL:: 764 001626 012704 001132' MOV #SECBLK,R4 ; Point to secondary block area 765 766 001632 016400 000002 10$: MOV X.FLAG(R4),R0 ; Get flags word for this container file 767 001636 001474 BEQ 50$ ; Nothing to do -- get next one 768 001640 016405 000000 MOV X.UCB(R4),R5 ; Get the UCB address of the device 769 770 001644 CALL $SWSTK,30$ ; Go on the system stack 771 772 .IF DF X$$HDR 773 774 001650 017746 001036' MOV @KISA6,-(SP) ;; Save APR6 775 001654 017777 001032' 001036' MOV @SAHDB,@KISA6 ;; Map external header 776 001662 017701 001034' MOV @SAHPT,R1 ;; Point to the header 777 778 .IFF ; DF X$$HDR 779 780 MOV @HEADR,R1 ;; Point to task header 781 782 .IFTF ; DF X$$HDR 783 784 001666 010561 000106 MOV R5,H.LUN+<*4>(R1) ;; Assign to the device 785 786 .IFT ; DF X$$HDR DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-9 ** DEAFIL -- Deaccess Container Files 787 788 001672 012677 001036' MOV (SP)+,@KISA6 ;; Restore APR 6 789 790 .ENDC ; DF X$$HDR 791 792 001676 032700 000002 BIT #XF.TRN,R0 ;; Did we increment the volume transaction? 793 001702 001412 BEQ 20$ ;; If eq no 794 001704 016501 000036 MOV U.VCB(R5),R1 ;; Get Volume Control Block 795 001710 001407 BEQ 20$ ;; What ??? 796 001712 005361 000000 DEC V.TRCT(R1) ;; Decrement transaction cout 797 001716 016500 000034 MOV U.ACP(R5),R0 ;; Pick up TCB of the ACP 798 001722 001402 BEQ 20$ ;; What again ??? 799 001724 CALL @EXRQN ;; And kick it around a bit 800 801 001730 000207 20$: RETURN ;; Return to user state 802 803 001732 032700 000001 30$: BIT #XF.LCK,R0 ; Did we set the write lock bit? 804 001736 001434 BEQ 50$ ; If eq no - don't touch the file 805 001740 012701 000754' MOV #FNB+N.FID,R1 ; Point to file ID in filename block 806 001744 016421 000020 MOV X.FID(R4),(R1)+ ; Copy the file ID 807 001750 016421 000022 MOV X.FID+2(R4),(R1)+ 808 001754 016411 000024 MOV X.FID+4(R4),(R1) 809 001760 005067 001006' CLR FNB+N.DVNM ; Indicate the device is assigned 810 001764 112767 000200 001020' MOVB #UC.CON,WATATT ; Remove deaccess lock bit (leave contig) 811 001772 F11QIO WATDPB,40$ ; Write the attribute 812 002012 000406 BR 50$ ; Get the next file 813 814 002014 010446 40$: MOV R4,-(SP) ; Save secondary block address 815 002016 012704 000000G MOV #ER$RCE,R4 ; Get error code 816 002022 CALL PRTWAR ; Print warning code 817 002026 012604 MOV (SP)+,R4 ; Recover pointer 818 819 002030 005367 001102' 50$: DEC NUMFIL ; One less file to look at 820 002034 001403 BEQ 60$ ; No more to look at 821 002036 062704 000026 ADD #X.LEN,R4 ; Bump to the next container block 822 002042 000673 BR 10$ ; And process it 823 824 002044 000207 60$: RETURN ; Return to caller 825 826 .SBTTL ** DETACH -- Detach from the Virtual Device 827 ;+ 828 ; 829 ; DETACH -- Detach from the Virtual Device 830 ; 831 ; This routine assigns FILLUN to the Virtual Device and 832 ; detaches from the unit. 833 ; 834 ; Inputs: None 835 ; Outputs: None 836 ; 837 ;- 838 839 002046 DETACH:: 840 002046 016705 001064' MOV NEWUCB,R5 ; Get the UCB address 841 842 002052 CALL $SWSTK,10$ ; Go on the system stack 843 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-10 ** DETACH -- Detach from the Virtual Device 844 002056 026567 000022 001104' CMP U.ATT(R5),OURTCB ;; We are still attached, aren't we? 845 002064 001005 BNE 10$ ;; No? Ask no questions, hear no lies 846 002066 005065 000022 CLR U.ATT(R5) ;; Release the device 847 002072 005001 CLR R1 ;; No I/O packet 848 002074 CALL @DRQRQ ;; Kick the driver in case someone is waiting 849 850 002100 000207 10$: RETURN ;; Return to user state and to caller 851 852 853 .SBTTL ** PRTWAR/PRTERR -- Print error messages 854 ;+ 855 ; PRTERR -- Print error message and set error status for task 856 ; PRTWAR -- Print error message and set warning status for task 857 ; 858 ; Input: R4 contains the index of the error message 859 ; Output: Returns carry set 860 ;- 861 862 002102 022767 000002 001056' PRTWAR::CMP #EX$ERR,EXISTS ; Already at error status? 863 002110 001407 BEQ WARERR ; If eq yes, don't supercede 864 002112 012767 000000 001056' MOV #EX$WAR,EXISTS ; Set exit status 865 002120 000403 BR WARERR ; And proceed 866 867 002122 012767 000002 001056' PRTERR::MOV #EX$ERR,EXISTS ; Set exit status 868 869 002130 010046 WARERR: MOV R0,-(SP) ; Save a register 870 002132 012700 000030' MOV #ERRDPB,R0 ; Point to the QIO DPB 871 002136 012760 000000G 000014 MOV #TSKNAM,Q.IOPL(R0) ; Point to task name 872 002144 012760 000000G 000016 MOV #TSKLEN,Q.IOPL+2(R0) ; Store length 873 002152 012760 000044 000020 MOV #<'$>,Q.IOPL+4(R0) ; Store VFC 874 002160 DIR$ R0 ; Write it out 875 002164 006304 ASL R4 ; Make error code a word index 876 002166 016460 177776G 000014 MOV ERRTAB-2(R4),Q.IOPL(R0) ; Store address of error string 877 002174 016460 177776G 000016 MOV ERRLEN-2(R4),Q.IOPL+2(R0) ; Store length of error string 878 002202 012760 000053 000020 MOV #<'+>,Q.IOPL+4(R0) ; Store VFC 879 002210 DIR$ R0 ; Write it out 880 002214 012600 MOV (SP)+,R0 ; Restore register 881 002216 000261 SEC ; Return carry set 882 002220 000207 RETURN ; Return to caller 883 884 885 000000' .END $DVF DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-11 Symbol table AC.DLK= 000002 C.STAT= 000001 ER$ILD= ****** GX F.BKDS= 000020 F.SPUN= 000074 AC.ENB= 000200 C.SWAD= 000022 ER$NAS= ****** GX F.BKEF= 000050 F.STAT 000034 AC.EXL= 000010 C.TYPR= 000000 ER$NDV= ****** GX F.BKP1= 000051 F.STBK= 000036 AC.LCK= 000001 DEAFIL 001626RG 004 ER$NLD= ****** GX F.BKST= 000024 F.UCHA 000014 AC.LKL= 000004 DESEC 001030R 002 ER$NVD= ****** GX F.BKVB= 000064 F.UNIT= 000136 AC.WCK= 000040 DETACH 002046RG 004 ER$PRV= ****** GX F.CHR = 000075 F.URBD= 000020 A$$CHK= 000000 DEVGRP 001111RG 002 ER$RCE= ****** GX F.CNTG= 000034 F.VBN = 000064 A$$CLI= 000020 DEVHD 001026R 002 ER$SYN= ****** GX F.DFNB= 000046 F.VBSZ= 000060 A$$CNT= 000000 DRQRQ 001054R 002 ESB 001112RG 002 F.DREF 000036 F.WIN 000052 A$$CPS= 000000 DSCBLK 000602R 002 EV.QIO= 000001 F.DRNM 000040 F2.ACN= ****** GX A$$NSI= 000000 DU$C0 = 000004 EV.SPN= 000002 F.DSPT= 000044 GCML 000130R 002 A$$PRI= 000000 DU$R0 = 000004 EXISTS 001056RG 002 F.DVNM= 000134 GETBLK 001500RG 004 A$$TRP= 000000 DVFEX 000044RG 004 EXRQN 001046R 002 F.EFBK= 000010 GETCMD 000232RG 004 BT.DST= ****** GX DVNAM 001072RG 002 EX$ERR= 000002 F.EFN = 000050 GETDEV 000356R 004 B.LEN = ****** GX DVUNT 001074RG 002 EX$SEV= 000004 F.EOBB= 000032 GE.BIF= 177775 B.TYP = ****** GX DV.CCL= 000002 EX$SUC= 000001 F.ERR = 000052 GE.CLO= 000004 CHR$$ = 000105 DV.COM= 020000 EX$WAR= 000000 F.EXT = 000072 GE.COM= 000001 CMDLUN= 000001 DV.DIR= 000010 EX.AC1= 000001 F.FACC= 000043 GE.CON= 000020 CNT$$ = 000002 DV.EXT= 000400 EX.AC2= 000002 F.FEXT 000042 GE.EOF= 177766 CONADD 001722R 002 DV.F11= 040000 EX.ADF= 000010 F.FFBY= 000014 GE.IND= 000002 CONCMD 001672R 002 DV.ISP= 002000 EX.ALL= 000020 F.FLG = 000074 GE.IOR= 177777 CONDPB 000076R 002 DV.MBC= 000400 EX.ENA= 000200 F.FNAM= 000110 GE.LC = 000010 CSIBLK 000666R 002 DV.MNT= 100000 EX.FCO= 000004 F.FNB = 000102 GE.MDE= 177774 CSIMSK 001100RG 002 DV.MSD= 000100 E$$DVC= 000000 F.FNUM 000002 GE.OPR= 177776 CS.DIF= 000002 DV.OSP= 004000 E$$ICM= 000000 F.FOWN 000010 GE.RBG= 177730 CS.DVF= 000004 DV.PSE= 010000 E$$LOG= 000000 F.FPRO 000012 GE.SIZ= 000040 CS.EQU= 000040 DV.REC= 000001 E$$MOU= 000000 F.FSEQ 000004 GI.ABO= 000016 CS.INP= 000001 DV.SDI= 000020 E$$NSI= 000000 F.FSQN 000007 GI.APR= 000011 CS.LOG= 000100 DV.SQD= 000040 E$$PER= 000000 F.FTYP= 000116 GI.CFG= 000014 CS.MOR= 000020 DV.SWL= 001000 E$$SEF= 000000 F.FVBN 000044 GI.DEF= 000002 CS.NMF= 000001 DV.TTY= 000004 E$$XPR= 000000 F.FVER= 000120 GI.DEV= 000006 CS.OUT= 000002 DV.UMD= 000200 FC.CEF= 020000 F.HDLB 000016 GI.DVJ= 000022 CS.WLD= 000010 D$$CHE= 000000 FC.DIR= 040000 F.HIBK= 000004 GI.FMK= 000003 C$$CDA= 000000 D$$IAG= 000000 FC.FCO= 010000 F.LBN 000022 GI.GAS= 000000 C$$CKP= 000000 D$$ISK= 000000 FC.WAC= 100000 F.LGTH 000054 GI.MSD= 000020 C$$CTC= 000000 D$$L11= 000001 FD.CCL= ****** GX F.LINK 000000 GI.QMC= 000004 C$$DFB= 000000 D$$PAR= 000000 FD.REC= ****** GX F.LKL 000050 GI.REN= 000010 C$$INT= 000000 D$$SHF= 000000 FD.TTY= ****** GX F.LUN = 000042 GI.SPM= 000013 C$$ODB= 000000 D$$VMD= 000000 FILLUN= 000003 F.MBCT= 000054 GI.SPR= 000007 C$$ORE= 001000 D$$V11= 000001 FL.HLP= 000002 F.MBC1= 000055 GI.SSN= 000015 C$$PCR= 000000 D$$WCK= 000000 FMASK2 001052R 002 F.MBFG= 000056 GI.TSK= 000012 C$$RSH= 177564 D$$YNC= 000000 FNB 000754R 002 F.NACS 000032 GI.UAB= 000005 C$$RUN= 000000 D$$YNM= 000000 FX.DIR= 000004 F.NLCK 000033 GI.UIC= 000001 C.CMLD= 000002 D.NAM = ****** GX FX.DLN= 000003 F.NRBD= 000024 GI.UPD= 000021 C.DEVD= 000006 D.PCB = ****** GX FX.DMX= 000002 F.NREC= 000030 GI.VEC= 000017 C.DIRD= 000012 D.UCB = ****** GX FX.LEN= 000000 F.NWAC 000034 G$$DVI= 000003 C.DSDS= 000006 D.UCBL= ****** GX F$$DVN= 000000 F.OVBS= 000030 G$$GEF= 000000 C.EXPS= 000060 D.UNIT= ****** GX F$$LPP= 000000 F.RACC= 000016 G$$TPP= 000000 C.FILD= 000016 ERRDPB 000030R 002 F$$LVL= 000001 F.RATT= 000001 G$$TSS= 000000 C.IDIA= 000036 ERRFLG 001076RG 002 F$$MAP= 000000 F.RCNM= 000034 G$$TTK= 000000 C.IDIL= 000034 ERRLEN= ****** GX F$$NIM= 000000 F.RCTL= 000017 G.CMLD= 000146 C.IDVA= 000032 ERRTAB= ****** GX F.ACTL= 000076 F.RSIZ= 000002 G.DPRM= 000160 C.IDVL= 000030 ER$ATT= ****** GX F.ALOC= 000040 F.RTYP= 000000 G.ERR = 000140 C.MKW1= 000024 ER$BSY= ****** GX F.BBFS= 000062 F.SCHA 000015 G.INSF= 000002 C.MKW2= 000026 ER$EXT= ****** GX F.BDB = 000070 F.SEQN= 000100 G.IP01= 000004 C.ODVL= 000040 ER$GCM= ****** GX F.BGBC= 000057 F.SIZE 000026 G.IP02= 000006 C.SIZE= 000054 ER$GIN= ****** GX F.BKDN= 000026 F.SPDV= 000072 G.IP03= 000010 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-12 Symbol table G.IP04= 000012 H.ODVL 000024 L.VB1 000004 P$$HIL= 003100 S$$NM2= 046530 G.IP05= 000014 H.OVLY 000054 L.WI1 000002 P$$LAS= 000000 S$$NM3= 046120 G.IP06= 000016 H.PFVA 000032 MAXCMD= 000120 P$$LOL= 001130 S$$OPT= 000000 G.IP07= 000020 H.RCVA 000036 MAXDEP= 000003 P$$MAX= 000400 S$$WPC= 000036 G.IP08= 000022 H.RRVA 000062 MT.MLS= 000001 P$$MON= 000000 S$$WPR= 000005 G.IP09= 000024 H.SMAP 000004 MU$C0 = 000004 P$$OFF= 000000 S$$WRG= 000000 G.ISIZ= 000020 H.SPRI 000060 MU$R0 = 000004 P$$OOL= 000000 S$$WST= 000000 G.LPDL= 000100 H.TKVA 000026 MX$FIL= 000020 P$$P45= 000000 S$$YSZ= 020000 G.MODE= 000141 H.TKVL 000030 M$$CRB= 000124 P$$RFL= 000000 S.ANM1= 000014 G.PSDS= 000142 H.UCHA= 000003 M$$CRX= 000000 P$$RTY= 000000 S.ANM2= 000005 G.RBUF= 000156 H.VEXT 000056 M$$EXT= 000000 P$$SRF= 000000 S.BFHD= 000020 G.SIZE= 000224 H.WND 000044 M$$FCS= 000000 P$$WND= 000000 S.FATT= 000016 G.TSDU= 000036 H.X25 000064 M$$MGE= 000000 QACNT 001042R 002 S.FDB = 000140 G.TSFW= 000024 IOSTAT 001060RG 002 M$$MUP= 000000 Q$$MGR= 000000 S.FNAM= 000006 G.TSGC= 000017 IO.WAT= ****** GX M$$NET= 002627 Q$$OPT= 000005 S.FNB = 000036 G.TSMT= 000022 IO.WVB= ****** GX M$$OVR= 000000 Q.IOAE= 000012 S.FNBW= 000017 G.TSNL= 000020 IS.SUC= ****** GX M$$XLN= 000400 Q.IOEF= 000006 S.FNTY= 000004 G.TSPC= 000016 I$$CSZ= 000200 M.ACC 000003 Q.IOFN= 000002 S.FTYP= 000002 G.TSPN= 000004 I$$PFS= 000000 M.DEV 000004 Q.IOLU= 000004 S.NFEN= 000020 G.TSPR= 000014 I$$P11= 000000 M.LEN 000010 Q.IOPL= 000014 S.PWCA= 000024 G.TSRN= 000010 I$$RAR= 000000 M.LNK 000000 Q.IOPR= 000007 S.PWCL= 000026 G.TSSY= 000034 I$$RDN= 000000 M.TI 000006 Q.IOSB= 000010 S.PWDN= 000032 G.TSTN= 000000 I.EXDT= 000010 M.TYPE 000002 RESTRT 000006R 004 S.PWEA= 000020 G.TSTS= 000032 I.FHDR= 000012 NEWDCB 001070RG 002 RX$IAS= 000003 S.PWEF= 000016 G.TSVA= 000026 I.FNAM= 000005 NEWUCB 001064RG 002 RX$11D= 000000 S.PWES= 000022 G.TSVL= 000030 I.FTYP= 000006 NUMFIL 001102RG 002 RX$11M= 000001 S.PWTN= 000002 HEADR 001040R 002 I.FVER= 000007 N$$DIR= 000000 RX$11S= 000002 S.PWUG= 000015 HLPLEN= ****** GX I.PLCM= 000014 N$$LDV= 000001 R$$CON= 000000 S.PWUM= 000014 HLPMSG= ****** GX I.RVNO= 000013 N$$MOV= 000041 R$$DSP= 000000 S.PWVT= 000030 H$$FME= 000020 I.STAT= 000011 N$$UMR= 000030 R$$EIS= 000000 S.PWXX= 000006 H$$FMS= 000004 KISAR6= ****** GX N.ANM1= 000002 R$$EXV= 000000 S.STBK= 000012 H$$FMX= 000002 KISA6 001036R 002 N.ANM2= 000024 R$$FEA= 000000 TIUCB 001106RG 002 H$$RTZ= 000062 K$$CNT= 177546 N.DID = 000024 R$$GIN= 000000 TKINIT 000056RG 004 H.CSP 000000 K$$CSR= 177546 N.DVNM= 000032 R$$IIC= 000000 TKTCB 001050R 002 H.CUIC 000010 K$$DAS= 000000 N.FID = 000000 R$$LKL= 000001 TR.CPA= 000001 H.DMAP 000005 K$$IEN= 000115 N.FNAM= 000006 R$$MPL= 000000 TR.CPB= 000002 H.DSW 000046 K$$LDC= 000001 N.FTYP= 000014 R$$MYA= 000001 TR.CPC= 000004 H.DUIC 000012 K$$TPS= 000062 N.FVER= 000016 R$$NDC= 000006 TR.CPD= 000010 H.EFSV 000040 LD$CO = 000000 N.NEXT= 000022 R$$NDH= 000226 TR.UBE= 000020 H.FCS 000050 LD$DU = 000000 N.STAT= 000020 R$$NDL= 000001 TR.UBF= 000040 H.FMAP 000006 LD$MU = 000000 N.UNIT= 000034 R$$SND= 000000 TR.UBH= 000100 H.FORT 000052 LD$NL = 000000 OURTCB 001104RG 002 R$$TPR= 031470 TR.UBJ= 000200 H.FOWN= 000001 LD$RD = 000000 OUTSWI 000742R 002 R$$UDA= 000001 TR.UBK= 000400 H.FPRO= 000002 LD$TT = 000000 O$$LAP= 000000 R$$11M= 000000 TR.UBL= 001000 H.FPSA 000042 LD$VF = 000000 PAR$$$= 000027 SABPT 001044R 002 TR.UBM= 002000 H.FPSL= 000062 LD$VT = 000000 PRMSTL= ****** GX SAHDB 001032R 002 TR.UBN= 004000 H.FPVA 000034 LK.SPN= 000002 PRMSTR= ****** GX SAHPT 001034R 002 TR.UBP= 010000 H.GARD 000072 LK.WAT= 000010 PROUIC 001110RG 002 SECBLK 001132RG 002 TR.UBR= 020000 H.HDLN 000002 L$$ASG= 000000 PRTERR 002122RG 004 SIZ$$ = 000002 TR.UBS= 040000 H.IPC 000016 L$$DRV= 000000 PRTWAR 002102RG 004 SP.WX8= 004000 TR.UBT= 100000 H.IPS 000014 L$$GCL= 000000 PRVDPB 000060R 002 S$$ECC= 000000 TSKLEN= ****** GX H.ISP 000020 L$$LDR= 000000 PSINIT 000224RG 004 S$$EXC= 000000 TSKNAM= ****** GX H.LUN 000076 L$$NAM= 000000 P$$BPR= 000063 S$$HDW= 000000 TS.BLC= 000037 H.LUTE 000070 L$$50H= 000000 P$$CTL= 000000 S$$HFC= 000036 TS.BLK= 177777 H.NLUN 000074 L.CNT 000005 P$$D70= 000000 S$$LIB= 000000 TS.CIP= 010000 H.NML 000061 L.LKSZ 000010 P$$FRS= 000310 S$$MAP= 000000 TS.CKR= 000100 H.ODVA 000022 L.LNK 000000 P$$GMX= 000000 S$$NM1= 051522 TS.EXE= 100000 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-13 Symbol table TS.MSG= 020000 T.TCBL 000030 UD.556= 000002 U.BPKT= 000050 U2.LOG= 000400 TS.RDN= 040000 T.TIO 000065 UD.625= 000005 U.BUF 000024 U2.LWC= 000001 TS.RSW= 002000 T.TKSZ 000072 UD.8K = 000006 U.CBF = 000032 U2.L3S= 000004 TS.RUN= 004000 T.UCB 000026 UD.800= 000003 U.CNT 000030 U2.L8S= 010000 TS.STP= 001000 T2.ABO= 000100 UM.CLI= 000036 U.COTQ 000030 U2.NEC= 004000 TTYLUN= 000002 T2.AFF= 000400 UM.CMD= 002000 U.CTCB 000026 U2.PRV= 000010 T$$ACD= 000000 T2.AST= 100000 UM.CNT= 001000 U.CTL 000004 U2.RMT= 020000 T$$BTW= 000000 T2.CHK= 020000 UM.DSB= 000200 U.CTLP 000052 U2.R04= 100000 T$$CCA= 000000 T2.DST= 040000 UM.KIL= 010000 U.CW1 000010 U2.SLV= 000200 T$$COM= 000000 T2.HLT= 000200 UM.NBR= 000400 U.CW2 000012 U2.VT5= 000002 T$$CON= 000000 T2.REX= 010000 UM.OVR= 000001 U.CW3 000014 U2.7CH= 010000 T$$CTR= 000000 T2.SEF= 004000 UM.SER= 004000 U.CW4 000016 U3.DBF= 000002 T$$CUP= 000000 T2.SIO= 001000 US.ABO= 000001 U.DCB 000000 U3.FDX= 000001 T$$EIO= 000000 T2.SPN= 000004 US.BSY= 000200 U.FCDE= 000042 U3.OPA= 100000 T$$ESC= 000000 T2.STP= 000020 US.CRW= 000004 U.IAST 000030 U3.PAR= 040000 T$$GMC= 000000 T2.WFR= 000001 US.DSB= 000002 U.ICSR= 000046 U3.RPR= 000004 T$$GTS= 000000 T3.ACP= 100000 US.FOR= 000040 U.IOSB 000056 U3.UPC= 020000 T$$KMG= 000000 T3.CAL= 000100 US.FRK= 000002 U.ISB2 000070 U4.CR = 000100 T$$LTH= 000000 T3.CLI= 001000 US.LAB= 000004 U.KRB1= 000044 VC.DEA= 000004 T$$LWC= 000000 T3.CMD= 000004 US.MDE= 000002 U.LUIC 177774 VC.DUP= 000020 T$$OVL= 000000 T3.GFL= 000001 US.MDM= 000020 U.MEDI= 000050 VC.HLK= 000002 T$$RED= 000000 T3.MCR= 004000 US.MNT= 000100 U.MUP 177772 VC.PUB= 000010 T$$RNE= 000000 T3.MPC= 000010 US.MUN= 000040 U.OAST 000032 VC.SIL= 000040 T$$RPR= 000000 T3.NET= 000020 US.OFL= 000001 U.OCNT 000006 VC.SLK= 000001 T$$RST= 000000 T3.NSD= 000200 US.OIU= 000001 U.OWN 177776 VDLUN = 000004 T$$RUB= 000000 T3.PMD= 040000 US.PDF= 000020 U.PRM = 000042 VECBUF 001024R 002 T$$SMC= 000000 T3.PRV= 010000 US.PUB= 000004 U.PTCB 000040 VECDPB 000066R 002 T$$TSA= 000000 T3.REM= 020000 US.PWF= 000010 U.RED 000002 VECSIZ= 000015 T$$UMR= 000000 T3.ROV= 000040 US.RED= 000002 U.RED2 000034 VFDCB 001066RG 002 T$$USP= 000000 T3.RST= 000400 US.SHR= 000001 U.RPKT 000024 VS.BMW= 000002 T$$UTO= 000036 T3.SLV= 002000 US.SIO= 000200 U.SCB 000020 VS.IFW= 000001 T.ACTL 000052 T3.SWS= 000002 US.SPU= 000002 U.SLT = 000050 VT.ANS= 000010 T.ASTL 000016 T4.CTC= 000100 US.TRN= 000100 U.SNUM= 000040 VT.FOR= 000000 T.ATT 000054 T4.DFB= 000400 US.UMD= 000010 U.SPRM= 000052 VT.SL1= 000001 T.DPRI 000040 T4.DSP= 000002 US.VV = 000001 U.STS 000005 VT.SL2= 000002 T.EFLG 000022 T4.FMP= 000200 US.WCK= 000010 U.ST2 000007 VT.UNL= 000011 T.EFLM 000066 T4.LBW= 001000 UU.ABO= 000400 U.UCBX= 000032 V$$CTR= 001000 T.GGF 000064 T4.LDD= 000020 UU.ATN= 000100 U.UC2X= 000054 V$$TLD= 000170 T.HDLN 000062 T4.LRW= 002000 UU.AVN= 000004 U.UFAT= 000004 V$$TLM= 000270 T.IID = 000042 T4.MUT= 000040 UU.BLK= 004000 U.UMB = 000040 V$$TRM= 000000 T.IOC 000003 T4.PRO= 000010 UU.GUS= 000010 U.UNIT 000006 V.EXT 000064 T.LBN 000041 T4.PRV= 000004 UU.IOS= 002000 U.UTIL= 000046 V.FCB 000026 T.LDV 000044 T4.P0 = 004000 UU.ONL= 000020 U.VCB = 000036 V.FFNU 000063 T.LNK 000000 T4.RIN= 010000 UU.RCT= 000002 U.VLNK 000072 V.FIEX 000045 T.MXSZ 000050 T4.SNC= 000001 UU.RDY= 000200 U.WPKT 000026 V.FMAX 000036 T.NAM 000006 UC.ALG= 000200 UU.SER= 000001 U.XFIL 000047 V.FPRO 000054 T.OFF 000074 UC.ATT= 000010 UU.SIO= 001000 U.XFLG 000046 V.FRBK 000056 T.PCB 000046 UC.CON= 000200 UU.SPC= 000040 U.XGRP 000050 V.HBCS 000072 T.PCBV 000004 UC.DLK= 000100 U$$DAS= 000000 U.XLBN 000064 V.HBLB 000066 T.PRI 000002 UC.KIL= 000004 U$$MHI= 000000 U2.AT.= 000020 V.IBLB 000032 T.RCVL 000012 UC.LGH= 000003 U$$MLO= 140000 U2.CRT= 002000 V.IBSZ 000033 T.RRFL 000100 UC.NPR= 000100 U$$MRN= 170230 U2.DH1= 100000 V.IFWI 000024 T.SRCT 000077 UC.PWF= 000020 U$$UMD= 000000 U2.DJ1= 040000 V.LABL 000004 T.STAT 000032 UC.QUE= 000040 U$$UMR= 000000 U2.DZ1= 000100 V.LGTH 000076 T.ST2 000034 UD.UNS= 000000 U.AAST 000034 U2.ESC= 001000 V.LRUC 000057 T.ST3 000036 UD.160= 000004 U.ACP = 000034 U2.HFF= 010000 V.PKSR 000020 T.ST4 000060 UD.200= 000001 U.ATT 000022 U2.HLD= 000040 V.SBCL 000041 DVF -- Deassign Virtual Disk MACRO V05.05 Wednesday 07-Sep-88 13:37 Page 5-14 Symbol table V.SBLB 000044 W.BLPD 000016 XX.RDA= 000005 X.MEDI 000020 $DEVHD= ****** GX V.SBSZ 000042 W.BLVR 000002 X$$HDR= 000000 X.MLUN 000000 $DRQRQ= ****** GX V.SLEN 000024 W.BNPD 000015 X$$SEC= 000000 X.NAME 000022 $DSW = ****** GX V.STS 000062 W.BOFF 000012 X.BASE 000014 X.OFF 000010 $DVF 000000RG 004 V.TRCT 000000 W.BPCB 000000 X.CCED 000062 X.RBNS 000042 $EXRQN= ****** GX V.TYPE 000002 W.BSIZ 000010 X.CCYL 000046 X.RCTC 000043 $FMSK2= ****** GX V.VCHA 000003 W.CTL 000000 X.CPCB 000056 X.RCTS 000040 $HEADR= ****** GX V.VOWN 000050 W.FCB 000004 X.CSBA 000060 X.SHST 000026 $QACNT= ****** GX V.VPRO 000052 W.IOC 000002 X.CSTS 000055 X.SHUN 000024 $SABPT= ****** GX V.WISZ 000040 W.LKL 000012 X.CST2 000073 X.SIZE 000004 $SAHDB= ****** GX WARERR 002130R 004 W.STS 000003 X.CYL 000034 X.TRCK 000030 $SAHPT= ****** GX WATATT 001020R 002 W.TCB 000006 X.CYLC 000042 X.UCB 000000 $TKTCB= ****** GX WATDPB 000000R 002 W.UCB 000010 X.DFFL= 000012 X.UHVR 000037 $$ = 000000 WATLST 001012R 002 W.WIN 000014 X.DFHL= 000005 X.UNFL 000002 $$$ = 000310R 002 WB.BPS= 000040 XC.ACT= 000100 X.DFSL= 000010 X.UNIT 000054 $$$ARG= 000006 WB.NBP= 000020 XC.DAT= 000004 X.DNAM 000052 X.UNSZ 000044 $$$I = 000000 WI.DLK= 010000 XC.DFR= 000040 X.DSKD 000051 X.UNTI 000010 $$$N = 000003 WI.EXL= 040000 XC.DIR= 000020 X.DUSZ= 000054 X.USVR 000036 $$$OST= 000005 WI.EXT= 002000 XC.ENA= 000200 X.ERHC 000035 X.VSER 000050 $$$T1 = 000006 WI.LCK= 004000 XC.LOG= 000002 X.ERHL 000033 X.WCNT 000036 .CSI1 = ****** G WI.PND= 020000 XC.OVR= 000010 X.ERSC 000034 X.XDAT 000066 .CSI4 = ****** G WI.RDV= 000400 XC.RDA= 000001 X.ERSL 000032 X.XDIR 000070 .FINIT= ****** G WI.WCK= 100000 XF.LCK= 000001 X.FCUR 000050 X.XLOG 000071 .FSRCB= ****** G WI.WRV= 001000 XF.RON= 000004 X.FID 000020 X.XOVR 000072 .FSR5 = ****** GX WS.MDL= 000001 XF.TRN= 000002 X.FLAG 000002 X.XRDA 000067 .GCML1= ****** G W.ACT 000000 XF.WPR= 000001 X.FLIM 000051 X2.DEA= 000001 .GCML2= ****** G W.BATT 000006 XX.DAT= 000005 X.GRP 000032 $CBOMG= ****** GX ...PC1= 000130R 002 W.BFPD 000014 XX.DIR= 000001 X.IOC 000026 $COTB = ****** GX ...PC2= 000332R 002 W.BHVR 000004 XX.LOG= 000001 X.LEN = 000026 $C5TA = ****** GX ...PC3= 000130R 002 W.BLGH 000020 XX.MAX= 000177 X.LGTH= 000074 $DESEC= ****** GX ...TPC= 000020 W.BLKS 000000 XX.OVR= 000004 . ABS. 177776 000 (RW,I,GBL,ABS,OVR) 000000 001 (RW,I,LCL,REL,CON) $WDATA 001732 002 (RW,D,LCL,REL,CON) $$FSR1 001020 003 (RW,D,GBL,REL,OVR) $CODE 002222 004 (RO,I,LCL,REL,CON) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 1 Size of work file: 16953 Words ( 67 Pages) Size of core pool: 17698 Words ( 68 Pages) Operating system: RSX-11M/M-PLUS Elapsed time: 00:00:40.27 DVF,DVF/-SP=LB:[1,1]EXEMC.MLB/ML,LB:[11,10]RSXMC.MAC/PA:1,SY:[307,20]VFPRE/PA:1,DVF