.TITLE DVCDAT - DISPLAY DEVICE DRIVER DATABASE .IDENT /JKN03.3/ ; ;WRITTEN BY J. NEELAND ;LAST MODIFIED 801102. ; BYTMOD=<3*4000>+<6*400>+10 ZBYMOD=<3*4000>+<2*400>+10 SBYMOD=<2*4000>+<6*400>+10 WRDMOD=<6*4000>+<6*400>+10 ; .LIST MEB .MCALL QIOW$,EXIT$S,DIR$,GMCR$ .MCALL DCBDF$,UCBDF$,SCBDF$,KRBDF$ DCBDF$ ;INVOKE THE DEFINITIONS UCBDF$ SCBDF$ KRBDF$ ; ;LOCAL MACRO DEFINITION(S) .MACRO DOAW STG JSR R4,PUTAW .WORD STG .ENDM ;DOAW ; .MACRO DOAB STG JSR R4,PUTAB .WORD STG .ENDM ;DOAB ; .MACRO DOSTG STG JSR R4,PUTSTG .WORD STG .ENDM ;DOSTG ; START:: DIR$ #GMC ;TRY TO GET AN MCR LINE BCS PRMT ;NONE AVAIL...ASK FOR INPUT CMP $DSW,#4 ;IS THERE MORE THAN JUST TASKNAME ON LINE? BLE PRMT ;IF NOT, GO PROMPT INC EXITFL ;INDICATE WE SHOULD EXIT AFTER DISPLAY MOV #GMC+G.MCRB+4,R0 ;GOT IT - SET BUFFER TO BEGINNING OF DVC NAME BR GDVC PRMT: MOV #IO.DET,OUTQIO+Q.IOFN ;SET TO DETACH (CANCEL POSS. CNTL-O) DIR$ #OUTQIO MOV #IO.WVB,OUTQIO+Q.IOFN ;RESTORE TO NORMAL FUNCTION DIR$ #PMTQIO MOV #ANSBUF,R0 ;SET UP TO CLEAR ANSWER BUFFER MOV #8.,R1 ;ONLY 8. CHARS LONG MAX CLRBUF: CLRB (R0)+ SOB R1,CLRBUF DIR$ #ANSQIO CMPB IOSB,#IE.EOF ;DOES USER WANT OUT? BNE 7$ ;IF NO, CONTINUE PROCESSING JMP EXIT ;ELSE IF EOF, YES - GO THERE 7$: MOV #ANSBUF,R0 MOV R0,R1 ;DO LOWER-UPPER CONVERSION IN PLACE MOV #8.,R2 CALL $CVTUC ;MAKE AN UPPER-CASE ANSWER MOV #ANSBUF,R0 ;RESTORE POINTER GDVC: MOV #PARBUF,R3 ; ; The call to $FDLOG that follows finds the UCB for the desired device. ; We are also going to save the device mnemonic in DEVMN for use in finding ; the CTB via the $CTLST list. The source for $FDLOG, etc., is on ; the distribution source kit in [12,10]FNDUCB.MAC. ; ; INPUT: ; R0 - BUFFER ADDRESS ; R3 - PARAMETER AREA ADDRESS - 2 WORDS ; ; OUTPUT: ; CARRY SET - UCB NOT FOUND OR SYNTAX ERROR ; R3 = 0 - SYNTAX ERROR ; R3 <>0 - COULDN'T FIND LCB OR UCB ; CARRY CLEAR - UCB FOUND ; R0 - UPDATED ; R1 - ADDRESS OF UCB ; R2 - ADDRESS OF DCB ; R3 - PARM AREA ADDRESS ; (R3) - DEVICE MNEMONIC IN ASCII ; 2(R3) - UNIT NUMBER IN BINARY ; ; CALL $FDUCB ; Find the physcal unit. CALL $FDLOG ; Find the unit if logical ** RLH001 ; or physical. ** RLH001 BCC 8$ ;CONTINUE IF NO ERROR JMP ERROR ;ELSE GO TO ERROR ROUTINE 8$: MOV #IO.ATT,OUTQIO+Q.IOFN ;ATTACH SO CNTL-O WILL STOP ALL OUTPUT DIR$ #OUTQIO MOV #IO.WVB,OUTQIO+Q.IOFN ;RESTORE NORMAL FUNCTION MOV R1,-(SP) ;SAVE UCB ADDRESS MOV R2,-(SP) ;SAVE DCB ADDRESS ALSO MOV (R3),DEVMN ; Save the device mnemonic. ** RLH001 MOV R2,R1 ;DO DCB ADDRESS 1ST MOV PC,R2 ;NO ZERO SUPPRESSION MOV #DCBBUF,R0 ;NOW DO THE DCB ADDRESS CALL $CBOMG ;CONVERT TO ASCII MOV 2(SP),R1 ;RETRIEVE UCB ADDRESS MOV #UCBBUF,R0 ;OUTPUT UCB ADDRESS CALL $CBOMG ;CONVERT TO ASCII OCTAL MOV 2(SP),R1 ;RETRIEVE UCB ADDRESS MOV #1,PSEFLG ;SET FLAG FOR PSEUDO DEVICE BIT #DV.PSE,U.CW1(R1) ;IS THIS A PSEUDO DEVICE? BNE 85$ ;SKIP THE SCB STUFF IF YES CLR PSEFLG ;NOT PSEUDO, RESET FLAG MOV U.SCB(R1),R1 ;GET THE CORRESPONDING SCB ADDRESS MOV R1,SCBLOC ;SAVE ADDRESS FOR LATER USE TOO MOV S.KRB(R1),KRBLOC ; Save the KRB address for ** RLH001 ; later. ** RLH001 MOV #SCBBUF,R0 ;SET THE OUTPUT POINTER CALL $CBOMG ;CONVERT TO OCTAL MAGNITUDE 85$: MOV #ADRMSG,OUTQIO+Q.IOPL ;SET FOR FIRST MESSAGE SUB #ADRMSG,R0 ;CALCULATE ACTUAL MESSAGE LENGTH MOV R0,OUTQIO+Q.IOPL+2 ;PUT VALUE INTO QIO PARAMETERS DIR$ #OUTQIO ; .PAGE .SBTTL DCB ; ; Work on the DCB now. ; MOV (SP)+,R5 ;SAVE A MORE CONVENIENT COPY OF DCB ADDRESS DOAW D$LNK ;OUTPUT D.LNK & D.UCB LOCS DOAW D$UCB CALL PUTADR ;INSERT JUST D.NAM ADDRESS MOV #DNMSTG,R1 ;INSERT ' /' INTO RECORD CALL MOVSTG MOVB (R5)+,(R0)+ ;COPY D.NAM MOVB (R5)+,(R0)+ MOVB #'/,(R0)+ ;TERMINATE NAME W/ ANOTHER SLASH JSR R4,APPLAB ;APPEND LABEL & OUTPUT RECORD .WORD D$NAM CALL PUTADR ;OUTPUT D.UNIT ADDR. MOVB #40,(R0)+ ;PAD W/ SPACE FOR SHORT FIELD MOV #SBYMOD,R2 ;CHANGE MODE TO BYTE MOVB (R5)+,R1 ;GET D.UNIT, LOWEST VALUE BIC #177400,R1 ;MASK OFF POSSIBLE HIGH-ORDER BITS CALL $CBTA ;INSERT THAT MOVB #',,(R0)+ ;SEPARATE W/ A COMMA MOV #SBYMOD,R2 ;USE SAME FORMAT FOR HIGHEST UNIT # JSR R4,PUTAB2 ;JOIN EXISTING CODE TO OUTPUT BYTE & LABEL .WORD D$UNIT DOAW D$UCBL ;OUTPUT D.UCBL TST PSEFLG ;IS THIS A PSEUDO DEVICE? BNE 9$ ;IF YES, THERE'S NO MORE DCB DATA DOAW D$DSP ;OUTPUT D.DSP THRU D.MSK (ALL 9) DOAW D$MSK0 DOAW D$MSK1 DOAW D$MSK2 DOAW D$MSK3 DOAW D$MSK4 DOAW D$MSK5 DOAW D$MSK6 DOAW D$MSK7 BIT #FE.DRV,$FMASK ;IS THERE LOADABLE DRIVER SUPPORT? BEQ 9$ ;IF NOT, SKIP DOAW D$PCB ;ELSE DISPLAY D.PCB LOCATION ; .PAGE .SBTTL UCB ; ;NOW WORK ON UCB DATA ; 9$: DOSTG UCBLAB ;OUTPUT 'UCB' HEADING MOV (SP),R5 ;NOW MOVE UCB ADDRESS TO R5 TST PSEFLG ;IS THIS A PSEUDO DEVICE? BNE 10$ ;IF YES, NO SPECIAL MULTI-USER LOCS BIT #FE.MUP,$FMASK ;DO WE HAVE MULTI-USER PROTECTION? BEQ 10$ ;IF NOT, SKIP TST -(R5) ; Back up to U.MUP word. ** RLH001 TST -(R5) ; Back up to U.OWN word. BIT #DV.TTY,U.CW1+2(R5) ;IS THIS A TTY DEVICE? BEQ 95$ ;SKIP IF NOT TST -(R5) ;YES, BACKUP TO U.LUIC JSR R4,OUTUIC ;THEN GO OUTPUT A UIC .WORD U$LUIC ; LABELLED W/ U.LUIC 95$: DOAW U$OWN ;THEN OUTPUT U.OWN CONTENTS DOAW U$MUP ; And finally output the U.MUP contents. 10$: DOAW U$DCB ;DO UCB WORD LOCATIONS U.DCB & U.RED DOAW U$RED MOVB (R5),SVUCTL ;SAVE U.CTL FOR LATER TESTING DOAB U$CTL ;DO BYTE UCB LOCS U.CTL-U.ST2 DOAB U$STS DOAB U$UNIT DOAB U$ST2 DOAW U$CW1 ;DO WORD UCB LOC U.CW1 TST PSEFLG ;THIS A PSEUDO DEVICE? ; BNE EXITQ ;IF YES, DONE FOR NOW - GO SEE ABOUT EXITTING BNE KRBLB ;IF YES, DONE FOR NOW - GO SEE ABOUT EXITTING DOAW U$CW2 ;DO LOCS U.CW2-U.BUF DOAW U$CW3 DOAW U$CW4 DOAW U$SCB DOAW U$ATT DOAW U$BUF DOAW ;DO U.BUF+2 (NO STRING) DOAW U$CNT ;DO U.CNT (LAST STD UCB LOC.) ; .PAGE .SBTTL SCB ; ; NOW DO SCB DATA ; MOV SCBLOC,R5 ;RETRIEVE SAVED SCB ADDRESS DOSTG SCBLAB ;OUTPUT HEADING 35$: DOAW S$LHD ;DO S.LHD-S.FRK DOAW ;2ND WORD IS UNLABELLED ; BIT #FE.PRO,$FMASK ;DO WE HAVE MULTIprocessor support? ; BEQ 37$ ;IF NOT, SKIP ; DOAW S$URM ; Output S.URM word ** RLH001 37$: DOAW S$FRK DOAW ;FORK BLOCK HAS AT LEAST 4 WORDS DOAW DOAW DOAW S$KS5 DOAW S$PKT DOAB S$CTM DOAB S$ITM DOAB S$STS DOAB S$ST3 DOAW S$ST2 DOAW S$KRB BITB #S2.LOG,S.ST2(R5) ;DOES THIS DEVICE SUPPORT ERROR-LOGGING? BEQ 40$ ;SKIP IF NOT DOAB S$RCNT ;THEN DO S.RCNT-S.ROFF DOAB S$ROFF ; BIT #FE.DRV,$FMASK ;DO WE HAVE LOADABLE DRIVER SUPPORT? ; BEQ 40$ ;SKIP IF NOT ; DOAW ;IF YES, THERE'S 1 MORE WORD 40$: BITB #S2.MAD,S.ST2(R5) ; Check for multiaccess device. BEQ 43$ DOAW S$KTB 43$: BIT #FE.EXT,$FMASK ;DO WE HAVE TO WORRY ABOUT UMR SUPPORT? BEQ 45$ ;SKIP IF NO BITB #UC.NPR,SVUCTL ;IS THIS AN NPR DEVICE? BEQ 45$ ;SKIP IF NO ADD #M.LNK,R5 ; Get the UMR control block. DOAW M$LNK ;IF YES, DISPLAY UMR CONTROL BLOCK DOAW ; (IT'S 6 WORDS LONG) DOAW DOAW DOAW DOAW 45$: ;REF. LABEL ; .PAGE .SBTTL KRB ; KRBLB: TST PSEFLG ;THIS A PSEUDO DEVICE? BNE 88$ ;IF YES, DONE FOR NOW - GO SEE ABOUT EXITTING ; ; Do KRBs now. ; MOV KRBLOC,R5 ; RETRIEVE SAVED KRB ADDRESS BEQ 88$ ; Skip KRB if zero address. ** RLH001 DOSTG KRBLAB ; OUTPUT HEADING SUB #8.,R5 ; GET KRB START WITH K.PRM. THIS ; IS CONVENIENT FOR CONTIGUOUS KRB-SCB. ; DOAW K$PRM DOAB K$PRI DOAB K$VCT DOAB K$IOC DOAB K$CON DOAW K$STS DOAW K$CSR DOAW K$OFF DOAB K$HPU DOAB DOAW K$OWN DOAW K$CRQ DOAW DOAW K$URM DOAW K$FRK ; .PAGE .SBTTL CTB 88$: TST PSEFLG ;THIS A PSEUDO DEVICE? BNE EXITQ ;IF YES, DONE FOR NOW - GO SEE ABOUT EXITTING ; ; Do CTBs now. Must link through the CTB pointer list headed by $CTLST. ; MOV $CTLST,R5 52$: MOV R5,CTBLST ; Pointing to a CTB now. MOV (R5),R5 ; Load CTB address. BEQ 60$ ; If got a zero, stop, didn't find any. MOV L.NAM(R5),R5 ; Get the device mnemonic. CMP DEVMN,R5 ; Check for the same device. BNE 54$ ; Check next one. BR 56$ 54$: MOV CTBLST,R5 ; Retrieve CTB pointer. MOV (R5),R5 ; Get next CTB. BR 52$ ; Try for next CTB. ** RLH001 ; ; We have a CTB with the correct device mnemonic, so pump it out. ; 56$: DOSTG CTBLAB ; Output CTB label. ** RLH001 MOV CTBLST,R5 ; Retrieve CTB pointer. ** RLH001 MOV (R5),R5 ; Get the CTB address (L.LNK). ** RLH001 MOV R5,TMPSAV ; Keep R5. ** RLH001 BITB L.STS(R5),#LS.CLK ; Check for a clock block. ** RLH001 BEQ 58$ ; No clock block. ** RLH001 ; ; Process clock block. ; SUB #18.,R5 ; Move back 9 words to ** RLH001 ; start of clock block. ** RLH001 DOAW L$CLK ; Output ** RLH001 DOAW ; the ** RLH001 DOAW ; clock ** RLH001 DOAW ; block. ** RLH001 DOAW DOAW DOAW DOAW ; 58$: MOV TMPSAV,R5 ; Restore the CTB address. ** RLH001 SUB #2,R5 ; L.ICB. ** RLH001 DOAW L$ICB DOAW L$LNK ; ; Convert the device mnemonic that is located at L.NAM. ; CALL PUTADR ;INSERT JUST D.NAM ADDRESS MOV #DNMSTG,R1 ;INSERT ' /' INTO RECORD CALL MOVSTG MOVB (R5)+,(R0)+ ;COPY D.NAM MOVB (R5)+,(R0)+ MOVB #'/,(R0)+ ;TERMINATE NAME W/ ANOTHER SLASH JSR R4,APPLAB ;APPEND LABEL & OUTPUT RECORD .WORD L$NAM ; ; Conversion of the device mnemonic is now complete, so continue. ; DOAW L$DCB ; MOV R5,TMPSAV MOV (R5),R5 BIC #177400,R5 ; Mask off the top byte. MOV R5,KRBNM ; Keep number of KRB addresses. MOV TMPSAV,R5 ; Retrieve the number of KRB addresses. DOAB L$NUM ; Output number of KRB addresses. DOAB L$STS ; Output CTB status register. ; ; Get the KRB addresses that are stored in tablular form inside the ; CTB. ; MOV #0,R3 ; Initialize loop counter for KRBs. 57$: DOAW L$KRB ; Output a KRB address from CTB. INC R3 ; Increment loop count. CMP R3,KRBNM ; Check for end of loop. BNE 57$ ; Go get next one. 60$: ; Exit CTB search here. ; .PAGE .SBTTL EXIT CONDITIONS ; EXITQ: TST EXITFL ;SHOULD WE EXIT? BNE EXIT ;YES IF FLAG SET JMP PRMT ;IF NOT, GO PROMPT AGAIN EXIT: EXIT$S ; ERROR: TST R3 ;WHICH ERROR? BNE NTFND MOV #SYNMSG,OUTQIO+Q.IOPL MOV #SYNSIZ,OUTQIO+Q.IOPL+2 BR OUTSND ; NTFND: MOV #NTFMSG,OUTQIO+Q.IOPL MOV #NTFSIZ,OUTQIO+Q.IOPL+2 OUTSND: DIR$ #OUTQIO ;OUTPUT ERROR MESSAGE BR EXITQ ;GO SEE WHETHER TO EXIT OR PROMPT AGAIN ;+ ; SUBROUTINE(S) ;- OUTUIC: CALL PUTADR ;OUTPUT ADDRESS FIRST MOV #ZBYMOD,R2 ;OUTPUT DATA IN BYTE MODE, NO ZRO SUP. MOVB 1(R5),R1 ;GET GROUP PART OF UIC 1ST BIC #177400,R1 ;MASK OFF POSSIBLE HIGH-ORDER BITS CALL $CBTA ;INSERT THAT IN RECORD MOVB #',,(R0)+ ;SEPARATE PARTS W/ A COMMA MOVB (R5),R1 ;GET MEMBER PART OF UIC BIC #177400,R1 ;AGAIN MASK OFF POSS. HIGH-ORDER BITS TST (R5)+ ;ADVANCE ADDRESS MOV #ZBYMOD,R2 ;AGAIN USE BYTE MODE, NO ZERO SUP. CALLR PUTDAT ;THEN JOIN EXISTING CODE TO FINISH OUTPUT ; PUTAB: CALL PUTADR ;OUTPUT ADDRESS FIRST MOVB #40,(R0)+ ;PAD W/ ' ' TO ALIGN W/ WORD DATA MOVB #40,(R0)+ MOVB #40,(R0)+ MOV #BYTMOD,R2 ;NOW SET FOR BYTE MODE PUTAB2: MOVB (R5)+,R1 ;GET THE DATA BYTE BIC #177400,R1 ;MASK OFF POSSIBLE HIGH-ORDER BITS BR PUTDAT ;JOIN COMMON CODE FOR PUTTING WORDS ; PUTAW: CALL PUTADR ;OUTPUT ADDRESS FIRST MOV #WRDMOD,R2 ;SET TO OUTPUT IN WORD FORMAT MOV (R5)+,R1 ;GET THE DATA WORD PUTDAT: CALL $CBTA ;CONVERT DATA TO ASCII APPLAB: MOV (R4)+,R1 ;GET ADDRESS OF STRING TO COPY BEQ PRTREC ;SKIP LABEL CODE IF NO LABEL ADDRESS MOVB #11,(R0)+ ;INSERT TAB TO SEPARATE LABEL FROM DATA MOVB #';,(R0)+ ;INSERT TRAILING SEMI-COLON TO SEPARATE LABEL CPYSTG: CALL MOVSTG ;COPY TO BUFFER PRTREC: SUB #OUTBUF,R0 ;CALC. LENGTH OF OUTPUT STRING MOV R0,OUTQIO+Q.IOPL+2 ;SET INTO QIO MOV #OUTBUF,OUTQIO+Q.IOPL ;SET PROPER BUFFER START ADDRESS DIR$ #OUTQIO ;PRINT RECORD RTS R4 ;RETURN AFTER IN-LINE PARAMETER ; PUTSTG: MOV #OUTBUF,R0 ;SET UP BEGINNING OF BUFFER APPSTG: MOV (R4)+,R1 ;GET ADDRESS OF STRING BR CPYSTG ; THEN JOIN CODE FOR APPENDING STRINGS ; PUTADR: MOV #OUTBUF,R0 ;SETUP TO START AT BEGINNING OF BUFFER MOV #WRDMOD,R2 ;ADDRESS IS WORD FORMAT MOV R5,R1 ;R5 HAS ADDRESS CALL $CBTA ;CONVERT TO ASCII MOVB #':,(R0)+ ;SEPARATE ADDRESS FROM FOLLOWING DATA W/ ':' MOVB #11,(R0)+ ; AND A TAB RETURN ;THAT'S IT FOR THIS FIELD ; MOVSTG: TSTB (R1) ;ARE WE AT THE TRAILING NULL? BEQ 10$ ;EXIT IF SO MOVB (R1)+,(R0)+ ;ELSE COPY BYTE TO OUTPUT BUFFER BR MOVSTG ; AND TRY THE NEXT ONE 10$: RETURN ;DONE COPYING ;+ ;DATA AREA ;- OUTQIO: QIOW$ IO.WVB,2,2,,,,<,,40> PMTQIO: QIOW$ IO.WVB,1,1,,,, ANSQIO: QIOW$ IO.RVB,1,1,,IOSB,, GMC: GMCR$ ; EXITFL: .WORD 0 ;EXIT AFTER OUTPUT - INIT. TO NO PSEFLG: .WORD 0 ;FLAG SET IF DOING PSEUDO DEVICE IOSB: .BLKW 2 ;I/O STATUS FOR READ FROM TERMINAL PARBUF: .BLKW 2 ;BUFFER FOR $FDUCB ; SCBLOC: .BLKW 1 ;ADDRESS OF SCB KRBLOC: .BLKW 1 ; Address of KRB. ** RLH001 CTBLST: .BLKW 1 ; Address of CTB. ** RLH001 DEVMN: .BLKW 1 ; Device mnemonic. ** RLH001 KRBNM: .BLKW 1 ; Number of KRBs in CTB. ** RLH001 TMPSAV: .BLKW 1 ; Temporary storage. ** RLH001 ; OUTBUF: ;SHARE W/ ANSBUF ANSBUF: .BLKB 80. ;BUFFER FOR DESIRED DEVICE INPUT TEXT ; SVUCTL: .BLKB 1 ;STORAGE OF U.CTL FOR LATER TESTING .ENABL LC .NLIST BEX ;DON'T LIST ALL THE TEXT STUFF DNMSTG: .ASCIZ # /# DVCMSG: .ASCII /DVC>/ DVCSIZ=.-DVCMSG SYNMSG: .ASCII /Syntax Error!/ SYNSIZ=.-SYNMSG NTFMSG: .ASCII /No such device in system!/ NTFSIZ=.-NTFMSG ADRMSG: .ASCII /DCB address is: / DCBBUF: .BLKB 6 .ASCII /, UCB address is: / UCBBUF: .BLKB 6 .ASCII /, SCB address is: / SCBBUF: .BLKB 6 .ASCII <15><12>/ADDR. VALUE LABEL/<15><12> .ASCII /----- ----- -----/<15><12> .ASCII /DCB:/ ADRSIZ=.-ADRMSG D$LNK: .ASCIZ /D.LNK/ D$UCB: .ASCIZ /D.UCB/ D$NAM: .ASCIZ /D.NAM/ D$UNIT: .ASCIZ /D.UNIT/ D$UCBL: .ASCIZ /D.UCBL/ D$DSP: .ASCIZ /D.DSP/ D$MSK0: .ASCIZ /D.MSK - LEGAL 0-15/ D$MSK1: .ASCIZ / - CNTRL 0-15/ D$MSK2: .ASCIZ / - NO-OP 0-15/ D$MSK3: .ASCIZ / - ACP 0-15/ D$MSK4: .ASCIZ / - LEGAL 16-31/ D$MSK5: .ASCIZ / - CNTRL 16-31/ D$MSK6: .ASCIZ / - NO-OP 16-31/ D$MSK7: .ASCIZ / - ACP 16-31/ D$PCB: .ASCIZ /D.PCB/ ; UCBLAB: .ASCIZ /UCB:/ U$UAB: .ASCIZ /U.UAB/ U$MUP: .ASCIZ /U.MUP/ U$LUIC: .ASCIZ /U.LUIC/ U$OWN: .ASCIZ /U.OWN/ U$DCB: .ASCIZ /U.DCB/ U$RED: .ASCIZ /U.RED/ U$CTL: .ASCIZ /U.CTL/ U$STS: .ASCIZ /U.STS/ U$UNIT: .ASCIZ /U.UNIT/ U$ST2: .ASCIZ /U.ST2/ U$CW1: .ASCIZ /U.CW1/ U$CW2: .ASCIZ /U.CW2/ U$CW3: .ASCIZ /U.CW3/ U$CW4: .ASCIZ /U.CW4/ U$SCB: .ASCIZ /U.SCB/ U$ATT: .ASCIZ /U.ATT/ U$BUF: .ASCIZ /U.BUF/ U$CNT: .ASCIZ /U.CNT/ U$UBX: .ASCIZ /U.UBX/ ; SCBLAB: .ASCIZ /SCB:/ S$LHD: .ASCIZ /S.LHD/ S$URM: .ASCIZ /S.URM/ S$FRK: .ASCIZ /S.FRK/ S$KS5: .ASCIZ /S.KS5/ S$PKT: .ASCIZ /S.PKT/ S$CTM: .ASCIZ /S.CTM/ S$ITM: .ASCIZ /S.ITM/ S$STS: .ASCIZ /S.STS/ S$ST3: .ASCIZ /S.ST3/ S$ST2: .ASCIZ /S.ST2/ S$KRB: .ASCIZ /S.KRB/ S$RCNT: .ASCIZ /S.RCNT/ S$ROFF: .ASCIZ /S.ROFF/ S$EMB: .ASCIZ /S.EMB/ S$KTB: .ASCIZ /S.KTB/ M$LNK: .ASCIZ /M.LNK/ ; KRBLAB: .ASCIZ /KRB:/ K$PRM: .ASCIZ /K.PRM/ K$PRI: .ASCIZ /K.PRI/ K$VCT: .ASCIZ /K.VCT/ K$CON: .ASCIZ /K.CON/ K$IOC: .ASCIZ /K.IOC/ K$STS: .ASCIZ /K.STS/ K$CSR: .ASCIZ /K.CSR/ K$OFF: .ASCIZ /K.OFF/ K$HPU: .ASCIZ /K.HPU/ K$OWN: .ASCIZ /K.OWN/ K$CRQ: .ASCIZ /K.CRQ/ K$URM: .ASCIZ /K.URM/ K$FRK: .ASCIZ /K.FRK/ KE$RHB: .ASCIZ /KE.RHB/ ; CTBLAB: .ASCIZ /CTB:/ L$CLK: .ASCIZ /L.CLK/ L$ICB: .ASCIZ /L.ICB/ L$LNK: .ASCIZ /L.LNK/ L$NAM: .ASCIZ /L.NAM/ L$DCB: .ASCIZ /L.DCB/ L$NUM: .ASCIZ /L.NUM/ L$STS: .ASCIZ /L.STS/ L$KRB: .ASCIZ /L.KRB/ .EVEN .LIST BEX ;OK FOR FULL EXPANSION NOW ; .END START