.TITLE DSUTIL - DATA SET UTILITY PROGRAM .IDENT /DSU.04/ ; ; FUNCTION: TO DISPLAY IN SELECTED FORMAT AND TO MODIFY ; VIRTUAL BLOCKS ON SELECTED DEVICE ; ; ; DSU.04 17-FEB-82 - SPLIT THE BASTARD UP ; DSU.03 10-FEB-82 - ADD LOGIC TO HANDLE VERSION #S ; DSU.02 09-FEB-82 - ADD VIRTUAL BLOCK READ FOR FILES ; DSU.01 05-FEB-82 - REORGANIZED THIS MOTHER ; DSU.00 ORIGINALE - READS LOGICAL DEVICE BLOCKS ONLY ; ; ; .NLIST BEX,SEQ,SYM .DSABL GBL ; ; ENTRY POINTS ; .GLOBL EXIT,BADDIR,IOERR,MODEFLD,OUTBUF,DIRECTION,BELL,BLKFLD ; ; EXTERNAL ROUTINES ; .GLOBL QUERY,FNDIDX,MAPIT,RDBLK,FNDHED,MOVIDX,ASGNIN,OBYTE .GLOBL OCTAL,O2A,OB2A,OO2AA,ASCII,RADIX,HEX,WIGGLE,WIG,GLE .GLOBL EBCDIC ; ; EXTERNAL DATA ; ; .GLOBL IO.WLB,SF.GMC,SF.SMC,IO.ATT .GLOBL TC.BIN,TC.ESQ,TC.LPP,TC.NEC,TC.WID .GLOBL VDTSTAT,CSIBLK,CSTAT,TSAVE,ERR1,ERR1L,ERR2,ERR2L,BLKHI,BLKLO .GLOBL OLDBLO,OLDBHI,VBLKHI,VBLKLO,OLDVBL,OLDVBH,BLKTYP,UIC,FNAME .GLOBL MAXVER,UFDFIL,PHYDEV,DEVNAM,UNITNO,AUBAS,NOUFD,UFDERL,NEL .GLOBL NOFILE,FILERL,BADVBN,VBNERL,GCLBLK,TSAVE,TCHAR,A.LUNA,A.LUNU .GLOBL DATA,IDXHED,MFDHED,USRVER,USRFIL,HOME,INDEV,BLKNO,DSPMODE .GLOBL CLEAR,HOME,PCLEAR,SCREEN,SCREND,LINE2,LINE3,LINE4,LINE5,LINE6 .GLOBL LINE7,LINE8,LINE9,LINE10,LINE11,LINE12,LINE13,LINE14,LINE15 .GLOBL LINE16,LINE17,LINE18,LINE19,LINE20,LINE21,IOSTAT,$DSW ; ; ; MACROS ; .MCALL ALUN$S,QIOW$S,QIOW$C,EXIT$S .MCALL GCML$,GCMLB$,CSI$,CSI$1,CSI$2,CSI$ND .MCALL FSRSZ$,FHDOF$,FINIT$ ; ; FHDOF$ DEF$L FSRSZ$ 1 ;NEEDED FOR COMMAND LINE PROCESSING CSI$ ; ; ; .PAGE ; **************************************************************** .SBTTL MAIN PROGRAM LOOP ; **************************************************************** ; ; ; PROGRAM ENTRY POINT AND MAIN CONTROL LOOP ; ; START: FINIT$ ;INIT FSR ALUN$S #5,#"TI,#0 ;TI:=LUN 5 QIOW$S #IO.ATT,#5,#1,,#VDTSTAT ;ATTACH SAME GCML$ #GCLBLK ;GET A COMMAND LINE BCC 2$ JMP EXIT ;SORRY I ASKED 2$: QIOW$C SF.GMC,5,1,,,, ;SAVE CHARACTERISTICS CSI$1 #CSIBLK,GCLBLK+G.CMLD+2,GCLBLK+G.CMLD ;CHECK SYNTAX BCS SYNERR CSI$2 #CSIBLK,OUTPUT ;GET DEVICE BCS SYNERR MOVB CSIBLK+C.STAT,CSTAT ;SAVE STATUS BITB #CS.EQU!CS.WLD!CS.MOR,CSTAT BNE SYNERR ;NO EQUAL, WILDCARDS OR MUTI SPECS BITB #CS.DVF,CSTAT ;BUT DEVICE IS MANDATORY BEQ SYNINC ;INCOMPLETE SYNTAX BITB #CS.NMF!CS.DIF,CSTAT ;FILE AND/OR UIC SPECIFIED? BEQ 3$ ;NO, NO FURTHER SYNTAX CHECKING BIT #CS.NMF,CSTAT ;FILE NAME SPECIFIED? BEQ 3$ ;NO, EVERYTHING'S SET TO GO BIT #CS.DIF,CSTAT ;IF FILE'S THERE, UIC'S GOTTA BE! BEQ SYNINC ;BURP! 3$: QIOW$C SF.SMC,5,1,,,, ;SET NEW CHARACTERISTICS BR DECODE ;PROCEED ; SYNERR: QIOW$C IO.WLB,5,5,,,, ;SYNTAX ERROR BR RESTART ;RESTART SYNINC: QIOW$C IO.WLB,5,5,,,, ;INCOMPLETE SYNTAX RESTART: QIOW$C SF.SMC,5,1,,,, ;RESTORE CHARACTERISTICS CLR BLKHI ;RE-INIT LOGICAL BLOCK #S CLR BLKLO MOV #-1,OLDBLO MOVB OLDBLO,OLDBHI CLR VBLKHI ;RE-INIT VIRTUAL BLOCK #S CLR VBLKLO MOV OLDBLO,OLDVBL MOV OLDBHI,OLDVBH MOV #BLKTYP,R0 ;RESET LEGEND TO LOGICAL BLOCKS MOVB #'L,(R0)+ MOVB #'O,(R0)+ MOVB #'G,(R0)+ MOVB #'I,(R0)+ MOVB #'C,(R0)+ MOV #UIC,R0 ;CLEAR THE FILENAME AND UIC SPECS MOV #FNAME,R1 MOV #9.,R2 ;NAIL NINE BYTES TO THE WALL 1$: MOVB #40,@R0 MOVB (R0)+,(R1)+ SOB R2,1$ MOVB -1(R1),@R1 ;NAIL FILE EXTENSION, TOO MOVB (R1)+,@R1 MOVB (R1)+,@R1 CLR MAXVER ;RE-INIT MAX VER NO. MOV #1,UFDFIL+10 ;SET UFD VERSION TO 1 JMP START ;AND TRY AGAIN ; ; ; ; ; ; DECODE - TAKE CSIBLK & RETURNS DEVICE NAME AND UNIT, ASSIGNS INPUT LUN, ; THEN JUMPS TO APPROPRIATE HANDLER FOR VOLUME (DEVICE) ; UFD (DIRECTORY) OR FILE I/O ; DECODE: MOV #CSIBLK+C.DEVD,R0 ;POINT TO DESC MOV (R0)+,R1 ;GET LENGTH MOV (R0),R0 ;AND POINTER MOVB (R0)+,R3 ;SET 1ST CHAR SWAB R3 ;MOVE TO UPPER BYTE CLRB R3 ;AND CLEAR LOWER BISB (R0)+,R3 ;SET OTHER CHARACTER SWAB R3 ;GET ORDER CORRECT CLR R4 ;UNIT DEF = 0 SUB #2,R1 ;USED 2 OF LENGTH BEQ 2$ ;IF DONE STOP 1$: CMPB (R0),#': ;OR IF ":" BEQ 2$ ;THEN ALSO DONE MOVB (R0)+,R2 ;ELSE GET CHARACTER SUB #'0,R2 ;AS INTEGER ASL R4 ;MUTIPLY VALUE BY 8. ASL R4 ASL R4 ADD R2,R4 ;AND ADD IN VALUE DEC R1 ;ADJUST COUNT BGT 1$ ;MORE TO DO 2$: MOV R3,DEVNAM ;SAVE DEVICE NAME MOV R4,UNITNO ;AND UNIT NO MOV DEVNAM,PHYDEV+A.LUNA ;PLUG DEVICE NAME MOV UNITNO,PHYDEV+A.LUNU ;AND UNIT NO. INTO LUN BLOCK CALL ASGNIN ;ASSIGN INPUT LUN TO DEVICE CALL SCRINIT ;SET UP SCREEN BITB #CS.NMF!CS.DIF,CSTAT ;UFD OR FILE? BEQ DEVICE ;NO JMP FILE ;ELSE PROCESS FILE ; ; ; HANDLE DEVICE-ORIENTED BLOCK I/O HERE ; DEVICE: 1$: CALL QUERY ;GET BLOCK #, MODE, ETC. CMP OLDBLO,BLKLO ;DON'T RE-READ SAME BLOCK BNE 2$ ;IF JUST RE-DISPLAYING CMPB OLDBHI,BLKHI ;RE-USE DATA IN BUFFER BEQ 3$ ;IF BLOCK ID HASN'T CHANGED 2$: MOV BLKHI,OLDBHI ;SAVE CURRENT LBN MOV BLKLO,OLDBLO ;FOR COMPARISON CALL RDBLK ;READ BLOCK 3$: CALL DISPLAY ;SHOW WHAT YOU GOT BR 1$ ;ETC., ETC. ; ; ; CODE TO HANDLE FILES ; ACCESS TO FILES IS VIA INDEF.SYS/UFD POINTERS RATHER THAN FCS ; ROUTINES TO ALLOW RANDOM VIRTUAL-BLOCK ACCESS ; ; ; ; ; CODE TO HANDLE DIRECTORIES ; UFD: ; ; FILE: CALL RADPAK ;FIRST PACK FILENAME AND/OR UFD ;INTO RAD50 STRINGS CALL FNDIDX ;GET SYSTEM INDEX FILE HEADER CALL FNDHED ;FIND HEADER OF FILE OR UFD BCS UFERR ;IF YOU CAN, OF COURSE CALL MOVIDX ;SAVE FILE HEADER IN IDX BUFFER UFLOOP: 1$: CALL QUERY ;PROMPT FOR BLK NO, ETC. CMP OLDVBL,VBLKLO ;DON'T RE-READ CURRENT BLOCK BNE 2$ CMPB OLDVBH,VBLKHI BEQ 5$ 2$: TST VBLKLO ;VIRTUAL BLOCK 0? BNE 4$ ;NO TST VBLKHI BNE 4$ MOV #DATA,R0 ;ELSE, JUST COPY IT BACK FROM IDXHED MOV #IDXHED,R1 MOV #256.,R2 ;256 WORDS 3$: MOV (R1)+,(R0)+ SOB R2,3$ BR 5$ 4$: CALL MAPIT ;MAP VIRTUAL BLOCK INTO LOGICAL BLK NO. BCS VBNERR ;IF YOU CAN CALL RDBLK ;READ NEW BLOCK MOV BLKHI,OLDBHI ;SAVE LBN DATA MOV BLKLO,OLDBLO ;FOR TOGGLING IN QUERY 5$: MOV VBLKHI,OLDVBH ;SAVE CURRENT VIRTUAL BLOCK NO. MOV VBLKLO,OLDVBL ;FOR COMPARISON CALL DISPLAY BR 1$ VBNERR: QIOW$C IO.WLB,5,5,,,, ;BOTTOM OF SCREEN QIOW$C IO.WLB,5,5,,,, ;BAD VIRT. BLK. NO. BR UFLOOP ;TRY AGAIN UFERR: QIOW$C IO.WLB,5,5,,,, ;BOTTOM OUT BITB #CS.NMF,CSTAT ;FILE OR UFD ERROR BNE BADF ;FILE QIOW$C IO.WLB,5,5,,,, ;UFD NOT FOUND JMP RESTART ;TAKE IT FROM THE TOP BADF: QIOW$C IO.WLB,5,5,,,,;FILE NOT FOUND JMP RESTART ;START FROM SCRATCH ; ; ; ; ; ; ; ; ; ; ONLY ONE WAY OUT AND THIS IS IT ; EXIT: QIOW$C SF.SMC,5,1,,,, ;RESTORE VDT CHARACTERISTICS EXIT$S ;ET FINI! ; .PAGE ; **************************************************************** .SBTTL MISC. SUBROUTINES ; **************************************************************** ; ; PACK FILE SPEC (NAME AND/OR UIC) INTO RADIX50 STRINGS ; RADPAK: BIT #CS.NMF,CSTAT ;WAS FILENAME SUPPLIED? BEQ DOUIC ;NO MOV CSIBLK+2+C.FILD,R0 ;ELSE GET POINTER TO NAME MOV CSIBLK+C.FILD,R2 ;AND ITS LENGTH CLR USRVER ;DEFAULT TO HIGHEST VERSION CLR R1 ;CONVERT VERSION TO BINARY HERE MOV R0,R3 ;COPY FILENAME STRING ADDRESS MOV R2,R4 ;AND LENGTH 1$: CMPB #';,(R3)+ ;FOUND START OF VERSION FIELD YET? BEQ 2$ ;YES DEC R4 ;COUNT DOWN BNE 1$ BR 4$ ;AIN'T NO VERSION FIELD 2$: SUB R4,R2 ;AND ADJUST STRING COUNT TO EXCLUDE VER DEC R4 ;COUNT THE ; 3$: ASL R1 ;MULTIPLY THE PREVIOUS MESS BY 8. ASL R1 ASL R1 BISB (R3)+,R1 ;SET DIGIT INTO OCTAL SUM BICB #60,R1 ;MAKE IT BINARY DEC R4 ;COUNT CHARACTER BNE 3$ ;KEEP SEARCHIN' MOV R1,USRVER ;PLUG IN CALCULATED VERSION 4$: MOV #USRFIL,R1 ;GONNA PUT IT HERE CALL DO3 ;FIRST 3 BCS DOUIC ;(AND ONLY 3) ADD #2,R1 ;BUMP TO NEXT PART OF FILE NAME CALL DO3 ;NEXT 3 CHARS BCS DOUIC ;END OF THE LINE ADD #2,R1 ;ELSE, BUMP AHEAD CALL DO3 ;DO ANOTHER 3 BCS DOUIC ;OUT OF DATA ADD #2,R1 ;ELSE, DO THE EXTENT CALL DO3 DOUIC: ;THIS IS GOING TO BE TOUGH MOV CSIBLK+2+C.DIRD,R0 ;GET POINTER TO UIC STRING MOV CSIBLK+C.DIRD,R2 ;AND ITS LENGTH MOV #DATA+6,R3 ;ASSEMBLE ASCII STRING HERE ADD R2,R0 ;START AT THE BACK END DEC R0 MOVB -(R0),-(R3) ;GET LAST DIGIT CMPB #',,-1(R0) ;HIT THE COMMA? BNE 1$ ;NO MOVB #'0,-(R3) ;ELSE PAD FRONT END BR 2$ 1$: MOVB -(R0),-(R3) ;GET NEXT-TO-LAST DIGIT CMPB #',,-1(R0) ;HIT THE COMMA? BNE 3$ ;NO 2$: MOVB #'0,-(R3) ;ELSE PAD FRONT END BR 4$ 3$: MOVB -(R0),-(R3) ;GET LEAD DIGIT ;-1(R0) POINTS TO THE COMMA 4$: DEC R0 ;BACK UP OVER COMMA MOV #DATA+3,R3 ;ASSEMBLE GROUP STRING HERE MOVB -(R0),-(R3) ;GET THIRD DIGIT CMPB #'[,-1(R0) ;HIT THE "["? BNE 5$ ;NO MOVB #'0,-(R3) ;ELSE PAD FRONT END BR 6$ 5$: MOVB -(R0),-(R3) ;GET NEXT-TO-LAST DIGIT CMPB #'[,-1(R0) ;HIT THE WALL? BNE 7$ ;NO 6$: MOVB #'0,-(R3) ;ELSE PAD FRONT END BR 8$ 7$: MOVB -(R0),-(R3) ;GET LEAD DIGIT 8$: MOV #UFDFIL,R1 ;PACK INTO THIS TRUNK MOV #DATA,R0 ;WITH THESE CLOTHES MOV #6,R2 ;FAKE 'EM OUT CALL DO3 ;PACK FIRST 3 ADD #2,R1 CALL DO3 ;PACK SECOND THREE MOV #0,UFDFIL+6 ;FORCE .DIR EXTENT .=.-4 .RAD50 /DIR/ .=.+2 RETURN ; ; ; ; ; CONVERT NEXT 3 CHARACTERS @R0 INTO (R1) ; IF END OF STRING ENCOUNTERED, RETURN CARRY SET ; IF . ENCOUNTERED, BUMP R1 TO EXTENSION ; DO3: CLR @R1 ;START WITH NOTHING TST R2 ;ANYTHING LEFT? BEQ 2$ ;NO MOVB (R0)+,R3 ;PICK UP A BYTE CMPB #'.,R3 ;TERMINATOR? BEQ 3$ ;YES CALL R5LKUP MOV PAKTBL(R3),@R1 DEC R2 BEQ 2$ MOVB (R0)+,R3 ;PICK UP A BYTE CMPB #'.,R3 ;TERMINATOR? BEQ 3$ ;YES CALL R5LKUP ADD #2,R3 ;OFFSET FOR SECOND POSITION ADD PAKTBL(R3),@R1 DEC R2 BEQ 2$ MOVB (R0)+,R3 ;PICK UP A BYTE CMPB #'.,R3 ;TERMINATOR? BEQ 3$ ;YES CALL R5LKUP ADD #4,R3 ;OFFSET FOR THIRD POSITION ADD PAKTBL(R3),@R1 DEC R2 BNE 4$ 2$: SEC RETURN 3$: MOV #USRFIL+4,R1 ;WE WANT NEXT ONE TO BUMP TO EXT. DEC R2 ;DIS-COUNT THE "." 4$: RETURN ; ; ; ; ; RETURN 6X(RELATIVE POSITION IN RADIX50 CHARACTER SET) ; OF BYTE IN R3 ; R5LKUP: BIC #177400,R3 CMPB #101,R3 ;ALPHA? BHI 2$ ;NO SUB #100,R3 ;ELSE MAKE IT "A"-RELATIVE BR 5$ 2$: CMPB #40,R3 ;BLANK? BNE 3$ ;NO CLR R3 BR 5$ 3$: BLO 4$ ;ASSUME DIGIT IF ABOVE A BLANK MOV #33,R3 ;ELSE IT'S A $ BR 5$ 4$: BIC #60,R3 ;STRIP DIGIT ADD #36,R3 ;AND CONVERT 5$: ASL R3 ;X2 MOV R3,-(SP) ;SAVE IT ASL R3 ;X4 ADD (SP)+,R3 ;X6 RETURN ; ; PAKTBL: .WORD 0,0,0 ;SPACE .WORD 3100,50,1 ;A .WORD 6200,120,2 ;B .WORD 11300,170,3 ;C .WORD 14400,240,4 ;D .WORD 17500,310,5 ;E .WORD 22600,360,6 ;F .WORD 25700,430,7 ;G .WORD 31000,500,10 ;H .WORD 34100,550,11 ;I .WORD 37200,620,12 ;J .WORD 42300,670,13 ;K .WORD 45400,740,14 ;L .WORD 50500,1010,15 ;M .WORD 53600,1060,16 ;N .WORD 56700,1130,17 ;O .WORD 62000,1200,20 ;P .WORD 65100,1250,21 ;Q .WORD 70200,1320,22 ;R .WORD 73300,1370,23 ;S .WORD 76400,1440,24 ;T .WORD 101500,1510,25 ;U .WORD 104600,1560,26 ;V .WORD 107700,1630,27 ;W .WORD 113000,1700,30 ;X .WORD 116100,1750,31 ;Y .WORD 121200,2020,32 ;Z .WORD 124300,2070,33 ;$ .WORD 127400,2140,34 ;. .WORD 132500,2210,35 ;UNUSED .WORD 135600,2260,36 ;0 .WORD 140700,2330,37 ;1 .WORD 144000,2400,40 ;2 .WORD 147100,2450,41 ;3 .WORD 152200,2520,42 ;4 .WORD 155300,2570,43 ;5 .WORD 160400,2640,44 ;6 .WORD 163500,2710,45 ;7 .WORD 166600,2760,46 ;8 .WORD 171700,3030,47 ;9 ; .PAGE ; **************************************************************** .SBTTL SCREEN DISPLAY SUBROUTINES ; **************************************************************** ; ; ; INITIALIZE SCREEN DISPLAY ; SCRINIT: QIOW$C IO.WLB,5,1,,VDTSTAT,, ;HOME CURSOR MOVB DEVNAM,INDEV ;PUT DEVICE NAME ON SCREEN MOVB DEVNAM+1,INDEV+1 MOV #INDEV+2,R1 ;PUT UNIT NO. HERE MOV UNITNO,R0 ;GET BINARY CALL OO2AA ;AND MAKE ASCII STRING MOV #BLKNO,R1 ;DECODE HI-ORDER BLOCK NO. MOV BLKHI,R0 CALL OB2A ;SINGLE BYTE MOV #BLKNO+4,R1 ;NOW LO-ORDER BLOCK NO. MOV BLKLO,R0 CALL O2A ;FULLWORD BITB #CS.NMF!CS.DIF,CSTAT ;UFD OR FILE? BEQ 4$ ;NO MOV #BLKTYP,R0 ;VIRTUAL BLOCKS NOT LOGICAL BLOCKS MOVB #'V,(R0)+ MOVB #'I,(R0)+ MOVB #'R,(R0)+ MOVB #'T,(R0)+ MOVB #'U,(R0)+ ; MOVB #'R,DSPMODE ;FORCE RAD50 DISPLAY ; BIT #CS.NMF,CSTAT ;WAS FILENAME SUPPLIED? BEQ 2$ ;NO MOV CSIBLK+2+C.FILD,R0 ;ELSE GET POINTER TO NAME MOV CSIBLK+C.FILD,R2 ;AND ITS LENGTH MOV #FNAME,R1 ;GONNA PUT IT HERE 1$: MOVB (R0)+,(R1)+ ;MOV A BYTE DEC R2 ;NAME ALL MOVED? BNE 1$ ;NO 2$: BIT #CS.DIF,CSTAT ;HOW 'BOUT UIC? BEQ 4$ ;NOPE MOV CSIBLK+2+C.DIRD,R0 ;ELSE GET POINTER TO UIC STRING MOV CSIBLK+C.DIRD,R2 ;AND ITS LENGTH MOV #UIC,R1 ;GONNA PUT IT HERE 3$: MOVB (R0)+,(R1)+ ;MOVE A BYTE DEC R2 ;UIC ALL MOVED? BNE 3$ ;NO 4$: BR SHOW ;FLASH IT, PERVERT ; ; ; PAINT DISPLAY ; DISPLAY: MOVB DSPMODE,R0 ;WHAT IS DISPLAY MODE? BICB #40,R0 ;ALLOW BOTH UPPER AND LOWER CASE CMPB #'O,R0 ;OCTAL? BNE 1$ ;NO CALL OCTAL ;YES BR SHOWIT ;FLASH! 1$: CMPB #'A,R0 ;ASCII? BNE 2$ ;NO CALL ASCII ;YES BR SHOWIT 2$: CMPB #'H,R0 ;HEX? BNE 3$ ;NO CALL HEX ;YES BR SHOWIT 3$: CMPB #'R,R0 ;RAD50? BNE 4$ ;NO CALL RADIX BR SHOWIT 4$: CMPB #'B,R0 ;OCTAL BYTE? BNE 5$ ;NO CALL OBYTE BR SHOWIT 5$: CMPB #'E,R0 ;EBCDIC? BEQ 6$ ;YES RETURN ;ELSE, FORGET IT 6$: CALL EBCDIC ; SHOWIT: QIOW$C IO.WLB,5,1,,VDTSTAT,, ;PARTIAL SCREEN CLEAR CALL WIG BR PSHOW ;DO PARTIAL UPDATE ; SHOW: QIOW$C IO.WLB,5,1,,VDTSTAT,, ;WRITE SCREEN QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, RETURN ; PSHOW: QIOW$C IO.WLB,5,1,,VDTSTAT,, ;PARTIAL UPDATE QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, QIOW$C IO.WLB,5,1,,VDTSTAT,, RETURN ; ; ; ; **************************************************************** ; FATAL ERROR TRAPS ; **************************************************************** ; ; EXECUTIVE DIRECTIVE ERROR ; BADDIR: MOV $DSW,R2 ;PICK UP DIRECTIVE STATUS COM R2 ;MAKE POSITIVE NUMBER 1$: CMP #9.,R2 ;GREATER THAN 9? BHIS 2$ ;NO SUB #10.,R2 ;ELSE DROP BY TEN INCB DSERR ;AND INCREMENT TENS BR 1$ ;ETC. 2$: BISB R2,DSERR+1 ;PLUG INTO ERROR MESSAGE QIOW$C IO.WLB,5,1,,,, ;ALLEZ AU BAS, TRES VITE! QIOW$C IO.WLB,5,1,,,, ;REPORT ERROR JMP EXIT ;AND LEAVE ; ; ; SOME DAMNNED I/O ERROR ; IOERR: MOV DEVNAM,BADDEV ;PLUG IN DEVICE NAME MOV UNITNO,R0 ;PICK UP UNIT NUMBER MOV #BADDEV+2,R1 ;POINT INTO MESSAGE CALL OO2AA ;CONVERT THE INFIDEL MOV IOSTAT,R2 ;PICK UP I/O STATUS NEG R2 ;MAKE POSITIVE NUMBER 1$: CMP #9.,R2 ;GREATER THAN 9? BHIS 2$ ;NO SUB #10.,R2 ;ELSE DROP BY TEN INCB IONUM ;AND INCREMENT TENS BR 1$ ;ETC. 2$: BISB R2,IONUM+1 ;PLUG INTO ERROR MESSAGE QIOW$C IO.WLB,5,1,,,, ;ALLEZ AU BAS, TRES VITE! QIOW$S #IO.WLB,#5,#1,,,,<#IOMSG,#31.> ;REPORT ERROR JMP EXIT ;AND LEAVE ; ; ; **************************************************************** .SBTTL FIXED DATA ; **************************************************************** ; ; NON-FATAL ERROR MESSAGES ; ERR1: .BYTE 7,7 .ASCII /DSU- SYNTAX ERROR **/ ERR1L=.-ERR1 ; ERR2: .BYTE 7,7 .ASCII /DSU- INCOMPLETE SYNTAX **/ ERR2L=.-ERR2 ; BADVBN: .BYTE 7,7 .ASCII / VIRTUAL BLOCK OUT OF RANGE **/ VBNERL=.-BADVBN ; NOUFD: .BYTE 7,7 .ASCII /UFD NOT FOUND **/ UFDERL=.-NOUFD ; NOFILE: .BYTE 7,7 .ASCII /FILE NOT FOUND **/ FILERL=.-NOFILE ; ; ; ; ; OUTPUT STRINGS ; HOME: .BYTE 33,'[,'H ;CLEAR SCREEN AND HOME CURSOR CLEAR: .BYTE 33,'[,'J .BYTE 15 PCLEAR: .BYTE 33,'[,'6,';,'1,'H ;MOVE CURSOR TO FIFTH LINE .BYTE 33,'[,'0,'J ;AND ERASE TO END-OF-SCREEN .BYTE 15 BLKFLD: .BYTE 33,'[,'0,';,'7,'0,'H ;COORDINATES OF BLKNO FIELD MODEFLD: .BYTE 33,'[,'0,';,'8,'0,'H ;COORDINATES OF BLKNO FIELD AUBAS: .BYTE 33,'[,'2,'3,';,'0,'1,'H ;START OF LAST SCREEN LINE NEL: .BYTE 15,33,'E OUTBUF: .BYTE 33,'[ DIRECTION: .BYTE 0 BELL: .BYTE 7 .EVEN ; ; ; TERMINAL CHARACTERISTICS TCHAR: .BYTE TC.BIN,1 ;READ PASS ALL .BYTE TC.ESQ,1 ;ESCSEQ .BYTE TC.LPP,24. ;24 LINES .BYTE TC.NEC,1 ;NO ECHO .BYTE TC.WID,80. ;80 CHAR. WIDTH ; ; ; FATAL ERROR MESSAGES ; DIRERR: .BYTE 7,7 ;RING DAT BELL! .ASCII /EXECUTIVE DIRECTIVE ERROR -/ DSERR: .BYTE 60,60,40,52,52 IOMSG: .BYTE 7,7 ;RING DAT BELL! .ASCII ?I/O ERROR -? IONUM: .BYTE 60,60 .ASCII / ON DEVICE / BADDEV: .ASCII / / .EVEN ; .END START