.TITLE CREATE IOERR AND DIRERR ; ; THIS PROGRAM CREATES THE FILES IOERR.EDF AND DIRERR.EDF ; FROM [1,2]QIOSYM.MSG AND THE SYSTEM MACROS IOERR$ AND DIRERR$ ; ; .MCALL IOERR$,DRERR$ .MCALL EXIT$S .MCALL TINIT,PSTR .MCALL FDBDF$,FDRC$A,FDOP$A,FDBK$A .MCALL OPEN$,CLOSE$,GET$ .MCALL FSRSZ$ ; ; FSRSZ$ 1 ; ; LUN ASSIGNMENTS ; TILUN=1 ;TTY I/O INLUN=2 ;QIOSYM.MSG OUTLUN=3 ;OUTPUT FILE ; ; EVENT FLAGS ; TIEVF=1 ;TTY I/O OUTEVF=2 ;FOR OUTPUT FILE ; ; ; MACROS SO WE CAN EXTRACT STUFF FROM IOERR$ AND DRERR$ ; .MACRO .IOER. NAME,VAL,MES .WORD VAL ;ERROR NUMBER .RAD50 /NAME/ ;AND ID .ENDM ; .MACRO .QIOE. NAME,VAL,MES .WORD VAL .RAD50 /NAME/ .ENDM ; ; IOERR::.WORD 0 ; ; ERRPFX::PSTR ^*/CREATE EDF'S - /* RETURN ; DIE:: EXIT$S ; ; START: TINIT TILUN,TIEVF ;INITIALIZE QUOTE OPEN$ #INFDB,,,,,,,,IOERR ;OPEN SYSTEM MESSAGE FILE ; ; FIRST CREATE IOERR.EDF ; OPEN$ #OUTFDB,,,#IODSD,,,,,IOERR ;CREATE IOERR.EDF MOV #-1,R1 ;INITIAL ERROR NUMBER MOV #ERREC,R2 ;POINT AT ERROR RECORD 1$: GET$ #INFDB,,,IOERR ;WHICH READ TST 4(R2) ;DEFINED? BEQ 2$ ;NO, ON TO NEXT ONE MOV #OUTFDB,R0 ;YES, INSERT IT CALL .INERR 2$: DECB R1 ;ADVANCE ERROR NUMBER BVC 1$ ;UNTIL -128. ; MOV #IOTAB,R3 ;TABLE OF ID'S MOV #OUTFDB,R0 ;ENSURE R0 CONTAINS RIGHT FDB CALL FILLIN ;FILL ID'S INTO FILE CLOSE$ #OUTFDB,IOERR ;FINISHED WITH IOERR.EDF ; ; ; NOW CREATE DIRERR.EDF ; OPEN$ #OUTFDB,,,#DIRDSD,,,,,IOERR ;CREATE FILE MOV #-1,R1 ;FIRST ERROR NUMBER MOV #ERREC,R2 ;ERROR RECORD POINTER 3$: GET$ #INFDB ;READ ERROR MESSAGE BCS 5$ ;ASSUME EOF IF ERROR TST 4(R2) ;SEE IF ANY ERROR MESSAGE BEQ 4$ ;NO, ON TO NEXT ONE MOV #OUTFDB,R0 ;YES, INSERT IT CALL .INERR 4$: SOB R1,3$ ;ON TO NEXT ONE ; ;****NEVER FALLS THROUGH**** ; 5$: MOV #DIRTAB,R3 ;TABLE OF ID'S MOV #OUTFDB,R0 ;ENSURE R0 CONTAINS RIGHT FDB CALL FILLIN ;FILL IN FILE WITH ID'S CLOSE$ R0,IOERR ;CLOSE FILE CLOSE$ #INFDB,IOERR ;AS WELL AS QIOSYM.MSG EXIT$S ;FINISHED ; ; ; ; SUBROUTINE TO FILL ID'S INTO FILE ; ; R0 OPEN FDB OF EDF ; R3 POINTER TO ID TABLE ; ; FILLIN: MOV (R3)+,R1 ;GET ERROR NUMBER BEQ 7$ ;BRANCH IF FINISHED CALL .SKERR ;FIND IT IN FILE BCC 2$ ;GOT IT CLR R2 ;FLAG FAILURE 2$: MOV #ERREC+4,R4 ;SET UP TO COPY ERROR MOV #36,R5 ;.. MOV (R3)+,(R4)+ ;START WITH ID MOV (R3)+,(R4)+ ;FROM TABLE TST R2 ;NOW, DID WE FIND IT? BNE 4$ ;YES, COPY IT 3$: CLR (R4)+ ;NO, CLEAR OUT MESSAGE AREA SOB R5,3$ ;.. BR 6$ ;AND ON TO NEXT ID ; 4$: ADD #4,R2 ;ADVANCE OVER OLD ID 5$: MOV (R2)+,(R4)+ ;AND COPY OUT ERROR MESSAGE SOB R5,5$ 6$: MOV #ERREC+4,R2 ;GET BACK RECORD POINTER CALL .INERR ;INSERT ERROR BACK INTO FILE BR FILLIN ;NOW ON TO NEXT ID ; 7$: RETURN ;FINISHED ; ; ; VARIABLES ; ; BUF: .BLKW 400 ;BUFFER FOR ERROR ROUTINES STAT: .BLKW 2 ;STATUS BLOCK DITTO ; ERREC: .RAD50 /$$$$$$/ ;DEFAULT ID .BLKW 40 ;ROOM FOR ERROR RECORD ; ; FDB'S ; INFDB: FDBDF$ FDRC$A ,ERREC+4,100 ;QIOSYM.MSG FDOP$A INLUN,QIODSD,,FO.RD ; OUTFDB: FDBDF$ FDRC$A FD.RWM ;EDF FILE FDBK$A BUF,1000,,OUTEVF,STAT FDOP$A OUTLUN,,,FO.WRT ; QIODSD: .WORD 0,0 .WORD LDIR12,DIR12 .WORD LQIONA,QIONAM ; IODSD: .WORD 0,0 .WORD 0,0 .WORD LIONAM,IONAM ; DIRDSD: .WORD 0,0 .WORD 0,0 .WORD LDIRNA,DIRNAM ; ; DIR12: .ASCII /[1,2]/ LDIR12=.-DIR12 ; QIONAM: .ASCII /QIOSYM.MSG/ LQIONA=.-QIONAM ; IONAM: .ASCII /IOERR.EDF/ LIONAM=.-IONAM ; DIRNAM: .ASCII /DIRERR.EDF/ LDIRNA=.-DIRNAM ; ; ; ; ID TABLES ; ; $$MSG=1 ; IOTAB: IOERR$ .WORD 0 ; DIRTAB: DRERR$ .WORD 0 ; ; ; .END START