.MACRO ERR$ E.STRL= 0 ;LENGTH OF SKELETON STRING E.STR= 2 ;ADDRESS OF SKELETON STRING E.RECN= 4 ;RECORD NUMBER OF SKELETON IN ERROR ;MESSAGE FILE E.FDB= 6 ;OUTPUT FDB E.BUF= 10 ;BUFFER ADDRESS E.BUFS= 133. ;BUFFER SIZE E.SUBL= 12 ;ADDRESS OF SUBSTITUTION LIST E.FFDB= 14 ;ADDRESS OF ERROR MESSAGE FILE FDB E.MODE= 16 ;ERROR OPTION FLAGS EM.OCL= 1 ;CLOSE OUTPUT FILE AFTER EVERY MESSAGE EM.FCL= 1 ;CLOSE ERROR MESSAGE FILE AFTER EVERY ;ACCESS E.ERR= 17 ;ERROR ERROR STATUS BYTE ES.SUC= 1 ;SUCCESS EE.OPN= -1 ;ERROR OPENING FILE EE.CLS= -2 ;ERROR CLOSING FILE EE.SUB= -3 ;INVALID NUMBER OF SUBSTITUTION ;PARAMETERS EE.GET= -4 ;ERROR READING FILE EE.PUT= -5 ;ERROR PUTTING RECORD EE.FOP= -6 ;ERROR OPENING ERROR MESSAGE FILE EE.FCL= -7 ;ERROR CLOSING ERROR MESSAGE FILE EE.NDB= -9. ;NO ERROR MESSAGE FDB SPECIFIED IN ;ERROR CONTROL BLOCK ; SUBSTITUTION TYPE CODES EF.DEC= 2 ;DECIMAL EF.OCT= 4 ;OCTAL EF.ASC= 6 ;ASCII EF.RAD= 10 ;RAD50 EF.SPE= 12 ;SPECIAL EF.FNB= 14 ;FNB .ENDM ERR$ .MACRO ERR$B LUN,FLUN,FSPEC,SUBSIZ,?.FDB,?DSPT,?SUBL,?BUF,?FFDB .MCALL ERR$ .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,DSPT$ ERR$ .IIF B, .ERROR LUN ;NOT SPECIFIED .IIF B, .ERROR SUBSIZ ;NOT SPECIFIED .WORD 0 ;E.STRL .WORD 0 ;E.STR .WORD 0 ;E.REC .WORD .FDB ;E.FDB .WORD BUF ;E.BUF .WORD SUBL ;E.SUBL .IF B, .WORD 0 ;E.FFDB .IIF NB, .ERROR \FLUN ;MUST BE SPECIFIED .IFF .WORD FFDB ;E.FFDB .ENDC .BYTE EM.OCL!EM.FCL ;E.MODE .BYTE 0 ;E.ERR ; ; ERROR MESSAGE OUTPUT FDB ; .FDB: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,BUF,E.BUFS FDOP$A LUN,,,FO.WRT ; ; ERROR MESSAGE BUFFER ; BUF: .BLKB E.BUFS .EVEN ; ; SUBSTITUTION LIST ; SUBL: .BLKW SUBSIZ ; ; ERROR MESSAGE FILE FDB ETC ; .IF NB, FFDB: FDBDF$ FDRC$A FD.RAN,FBUF,E.BUFS .IF NB, FDOP$A FLUN,DSPT,,FO.RD .IFF FDOP$A FLUN,,,FO.RD .ENDC .IF NB, ; ; FILE DESCRIPTOR BLOCK ; .MCALL DSPT$ DSPT: DSPT$ FSPEC .ENDC ; ; BUFFER FOR ERROR MESSAGES FROM FILE ; FBUF: .BLKB E.BUFS .EVEN .ENDC .ENDM ERR$B .MACRO DSPT$ DEV,UIC1,UIC2,NAME,?A,?B,?C,?D .EVEN .WORD B-A,A .WORD C-B,B .WORD D-C,C A: .ASCII /DEV/ B: .IIF NB, .ASCII /UIC1,UIC2/ C: .ASCII /NAME/ D: .EVEN .ENDM DSPT$ .MACRO SUB$ TYPE,AA,BB,CC,DD,EE,FF,GG,HH,II .NSUBS= 0 ..FLG= 0 .IF IDN,TYPE,DECIMAL MOV #EF.DEC,(R0)+ .NSUBS= 1 .IFF .IF IDN,TYPE,OCTAL MOV #EF.OCT,(R0)+ .NSUBS= 1 .IFF .IF IDN,TYPE,ASCII MOV #EF.ASC,(R0)+ .NSUBS= 2 .IFF .IF IDN,TYPE,RAD50 MOV #EF.ASC,(R0)+ .NSUBS= 1 .IFF .IF IDN,TYPE,FNB MOV #EF.FNB,(R0)+ .NSUBS= 2 .IFF .IF IDN,TYPE,SPECIAL ..FLG= 1 .NSUBS= 999 .IFF .ERROR ;INVALID SUBSTITUTION: TYPE .MEXIT .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .IRP SUB, .IF NB, MOV SUB,(R0)+ .NSUBS= .NSUBS-1 .ENDC .ENDM .IF EQ,..FLG .IIF NE,.NSUBS .ERROR ;INCORRECT NUMBER OF SUBSTITUTION ;PARAMETERS .ENDC .ENDM SUB$ .MACRO ERR$P ERRBLK,MESSAG,CODE,SUBS,SUBL,PSECT .MCALL ERR$ ERR$ .IIF NB, MOV ERRBLK,R0 .IF B, CLR E.RECN(R0) .IFF MOV CODE,E.RECN(R0) .ENDC .IF B, CLR E.STR(R0) CLR E.STRL(R0) .IFF .PSECT $MESSG ..A..= . .ASCII /MESSAG/ ..B..= .-..A.. .PSECT PSECT MOV #..A..,E.STR(R0) MOV #..B..,E.STRL(R0) .ENDC .IF NB, MOV SUBL,E.SUBL(R0) .ENDC .IF NB, MOV R0,-(SP) MOV E.SUBL(R0),R0 .IRP ARG, SUB$ ARG .ENDM CLR (R0)+ MOV (SP)+,R0 .ENDC CALL ERR$P .ENDM ERR$P .MACRO ERR$S SUBL,SUBS .IIF NB,SUBL MOV SUBL,R0 .MCALL SUB$ .IRP ARG, SUB$ ARG .ENDM CLR (R0)+ .ENDM ERR$S