.MCALL .MODULE .MODULE LIBR,VERSION=12,COMMENT= IDENT=NO,MODNAME=LBREM,GLOBAL=.LBREM ; Copyright (c) 1998 by Mentec, Inc., Nashua, NH. ; All rights reserved ; ; This software is furnished under a license for use only on a ; single computer system and may be copied only with the ; inclusion of the above copyright notice. This software, or ; any other copies thereof, may not be provided or otherwise ; made available to any other person except for use on such ; system and to one who agrees to these license terms. Title ; to and ownership of the software shall at all times remain ; in Mentec, Inc. ; ; The information in this document is subject to change without ; notice and should not be construed as a commitment by Digital ; Equipment Corporation, or Mentec, Inc. ; ; Digital and Mentec assume no responsibility for the use or ; reliability of its software on equipment which is not supplied ; by Digital or Mentec, and listed in the Software Product ; Description. .SBTTL LIBRARY ERROR PROCESSING OVERLAY .ENABL GBL ; CER,MAS,LB .IIF NDF FORM$ FORM$=1 ;INCLUDE FORM LIBRARY FUNCTIONALITY ;MAS01 ; EDIT LOG ; ADDITION OF FORM LIBRARY FUNCIONALITY ;MAS01 ; ADD .ENTER AND .CLOSE ERROR VIOLATION MESSAGES ;MAS07 ; MAKE FILE ERRORS PRINT DD:FILNAM.EXT ;MAS10 ; ADD MSGS 36 AND 37 ;LB ; 11 15-May-91 WFG Update version numbers of all LIBR files ; 12 13-Jan-98 TDS Update all version numbers to 12 for 5.7 ; .SBTTL ERROR MESSAGE TYPES E$PRT== 0 ;JUST PRINT A MESSAGE E$REG== 1 ;PRINT MSG PLUS CONTENTS OF REG E$SYM== 2 ;PRINT MSG & REG -> 2 WD RAD50 SYMBOL TO PRINT E$FIL== 3 ;PRINT MSG & CURRENT INPUT FILENAME E$DEV== 4 ;PRINT MSG & CURRENT DEVICE E$W== 0 ;ERROR IS A WARNING MESSAGE E$F== 1 ;ERROR IS FATAL & WILL RESTART THE LINKER BITPAT= 1767 ;BIT PATTERN FOR MOVES ON FILE ERROR ;MAS10+ ;+ ; BITPAT= 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 = 1767 ; : F I L N A M . E X T ; ; BY ROTATING THE BITS RIGHT (ASR) WHEN C=0 -> INSERT "." OR ":" INTO THE ; MESSAGE. EACH SET BIT CAUSES A MOVB TO OCCUR ON THE CHARS IN THE ; MESSAGE BUFFER. ;MAS10- ;- USERRB= 53 ;USER ERROR BYTE SUCCS$ = 1 ;Success WARN$ = 2 ;Warning ERROR$ = 4 ;Error FATAL$ = 10 ;Fatal UNCON$ = 20 ;Unconditional SPACE= 40 JSW= 44 ;JOB STATUS WORD GTLIN$ = 10 ;GET LINE FROM TTY IN NOT IN @ FILE .SBTTL MACRO DEFINITIONS ;+ ; MACRO TO DEFINE ALL THE ERROR NUMBERS FOR USE WITH THE ERROR$ ; MACRO. THE ERROR NUMBERS ARE ALL GLOBAL SYMBOLS, AND ARE ; NUMBERED IN OCTAL FROM 0 ON UP. ;- .MACRO ERR SYM .DSABL CRF NUM=0 .REPT SYM+1 .IRP FOO,<\NUM> ERR'FOO== NUM .ENDR NUM= NUM+1 .ENDR .ENABL CRF .ENDM .MCALL .PRINT .SBTTL ERROR PROCESSING CODE ;+ ; THIS OVERLAY PROCESSES ERROR MESSAGES. IT IS CALLED BY A LINKAGE ; ROUTINE IN THE ROOT SEGMENT. THIS SUPPORTS THE "ERROR$" MACRO ; WHERE THE LOW ORDER BYTE OF "ERCODE" CONTAINS THE ERROR NUMBER AND ; THE HIGH BYTE OF "ERCODE" CONTAINS THE MESSAGE TYPE WITH BIT 15 SET IF ; A FATAL ERROR MESSAGE. ;- .SBTTL ERROVR:: ENTRY WHEN ERROR IN ROOT ;+ ; SPECIAL CODE FOR AN ERROR MESSAGE FROM THE ROOT. ; CALLED VIA: ; JSR R5,ERROVR ; .WORD ERROR CODE WORD ;- ERROVR::MOV (R5)+,ERCODE ;PICKUP ERROR CODE WORD CALL ERROVL ;PROCESS ERROR AS NORMAL RTS R5 .SBTTL ERROVL:: ERROR MESSAGE PROCESSING ROUTINE ;+ ; PRINT ERROR MESSAGES AND OPTIONAL REGISTER CONTENTS AND SYMBOLS AS ; BY THE ERROR CODE WORD "ERCODE". ; THE MESSAGE TYPES ARE: ; 0 PRINT A MESSAGE ON TERMINAL ; 1 IF A MAP PRINT MESSAGE THERE, ELSE ON TT ; 2 PRINT MESSAGE PLUS THE CONTENTS OF R0 ; 3 PRINT MESSAGE AND R0 -> 2 WORD RAD50 SYMBOL TO PRINT ;- .ENABL LSB ERROVL::MOV R1,-(SP) ;SAVE R1 - R4 MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV ERCODE,R4 ;R4 = ERROR CODE WORD MOV R4,R3 ;MAKE COPY BIC #^C377,R3 ;ISOLATE MSG # BEQ 30$ ;SHOULD NOT GET MSG 0 CMP #LGMSG,R3 ;LEGAL MESSAGE # ? BLO 30$ ;NO MOV #MSG0,R2 ;FIND PROPER MESSAGE TEXT 10$: TSTB (R2)+ ;FIND EACH 0 OF ASCIZ BNE 10$ DEC R3 ;R3=0 WHEN AT RIGHT MSG BNE 10$ ;R2 -> PROPER MSG MOV #LINBUF,R1 ;R1 -> ERROR MESSAGE BUFR 20$: MOVB (R2)+,(R1)+ ;COPY MSG TO LINE BUFR BNE 20$ ;ENDS WITH 0 DEC R1 ;BACKUP TO 0 MOV R4,R3 ;MAKE COPY SWAB R3 BIC #^C177,R3 ;ISOLATE MESSAGE TYPE BEQ EPRT ;MSG TYPE = 0 MOVB #SPACE,(R1)+ ;TEXT TO FOLLOW MSG SO ADD BLANK DEC R3 ;MSG TYPE = 1 ? BEQ EREG ;YES DEC R3 ;MSG TYPE = 2 ? BEQ ESYM ;YES DEC R3 ;MSG TYPE = 3 ? BEQ EFIL ;YES DEC R3 ;MSG TYPE = 4 ? BEQ EDEV ;YES ;IF WE GET HERE, NOT A LEGAL TYPE 30$: MOV #MSG0,R0 ;WHILE TRYING TO RECOVER FROM ANOTHER 40$: MOVB #'F,FORW ;INSERT F FOR FATAL BISB #,@#USERRB ;SET SEVER ERROR BIT IN USER ERROR BYTE BIC #GTLIN$,@#JSW ;CLEAR NON-TERMINATING GTLIN BIT JMP ERROR ;FATAL ERROR, PRINT IT & RESTART .SBTTL EREG PRINT MSG & CONTENTS OF R0 EREG: CALL OCTOUT ;CONVERT VALUE IN R0 TO ASCII BR 130$ .SBTTL EFIL PRINT MSG & CURRENT INPUT FILENAME EFIL: MOV R0,R3 ;R0 MAY HAVE A DIFFERENT 4 WD POINTER ;MAS10+ BNE 50$ ;NE -> USE R0 AS POINTER TO 4 WD FILE NAME MOV FILPT1,R3 ;OTHERWISE USE SAVESTATUS AREA ADD #F.LNM,R3 ;POINT AT FILE NAME 50$: CALL R50ASC ;CONVERT DDFILNMEXT TO 10. WORDS OF ASCII CALL R50ASC ;AND STORE SEQUENTIALLY IN MESSAGE BUFFER MOV R1,R0 ;COPY POINTER TO END OF MESSSAGE, AND POINT CMPB (R1)+,(R1)+ ;TO THE NEW END OF THE MESSAGE CLRB @R1 ;TO NEW END MSG. CLEAR END OF MESSAGE FLAG MOV #BITPAT,R2 ;MOVE A BIT PATTERN TO R2 FOR # OF MOVES 60$: ASR R2 ;TEST FOR # MOVES FRO EXTENSION (3) BCC 70$ ;C=0 DONE WITH THIS SET OF MOVES MOVB -(R0),-(R1) ;OTHERWISE, START MOVING EXTENSION BY 2 BYTES BR 60$ 70$: MOVB #'.,-(R1) ;INSET "." BETWEEN EXTENSION AND FILE NAME 80$: ASR R2 ;TEST FOR # MOVES TO MAKE FOR FILENAME (6) BCC 90$ ;C=0 -> DONE WITH MOVES MOVB -(R0),-(R1) ;MOVE ONE CHAR OF FILENAME BY 1 BYTE BR 80$ 90$: MOVB #':,-(R1) ;INSET ":" BETWEEN DEVICE AND FILENAME ; NOW COMPACT SPACES CMPB -(R1),-(R1) ;BACK UP TO 2ND CHAR OF DEVICE NAME MOV R1,R0 ;COPY IT (1ST CHAR IS ALSWAYS NON-ZERO) 100$: TSTB @R0 ;AT END OF MESSAGE? BEQ 120$ ;EQ -> YES CMPB #SPACE,(R0)+ ;IS IT A SPACE? BEQ 110$ ;EQ -> YES, REMOVE FROM MESSAGE TSTB (R1)+ ;NON-SPACE 110$: MOVB @R0,@R1 ;MOVE A CHAR BACK OVER A SPACE BR 100$ 120$: CLRB @R1 ;RESET MESSAGE END PROPERLY BR EPRT ;NOW PRINT MESSAGE WITH DD:FILNAM.EXT ;MAS10- EDEV: MOV R0,R3 ;R0 MAY CONTAIN A 1 WORD MSG BNE 500$ ;NE -> IT DOES MOV FILPT1,R3 ;OTHERWISE USE SAVESTATUS AREA ADD #F.LNM,R3 ;POINT AT DEVICE NAME 500$: MOV R1,-(SP) ;SAVE POINTER TO START OF DEV: CALL R50ASC ;CONVERT DEV TO ASCII DEC R1 CLRB -(R1) ;MARK END OF MESSAGE MOVB #':,-(R1) ;INSERT ":" ; NOW COMPACT SPACES MOV (SP)+,R1 ;POINT TO FIRST CHARACTER OF DEV: MOV R1,R0 ;COPY IT 1000$: TSTB @R0 ;AT END OF MESSAGE? BEQ 1200$ ;EQ -> YES CMPB #SPACE,(R0)+ ;IS IT A SPACE? BEQ 1100$ ;EQ -> YES, REMOVE FROM MESSAGE TSTB (R1)+ ;NON-SPACE 1100$: MOVB @R0,@R1 ;MOVE A CHAR BACK OVER A SPACE BR 1000$ 1200$: CLRB @R1 ;RESET MESSAGE END PROPERLY BR EPRT ;NOW PRINT MESSAGE WITH DEV: .SBTTL ESYM PRINT MSG & RAD50 SYMBOL ESYM: MOV R0,R3 ;R3 -> SYMBOL FOR R50ASC CALL R50ASC ;SYMBOL TO PRINT ALSO 130$: CLRB @R1 ;TERMINATE .SBTTL EPRT PRINT A MESSAGE EPRT: MOV #LINE,R0 ;R0 -> ERROR MESSAGE TO PRINT TST R4 ;FATAL ? BMI 40$ ;YES BISB #,@#USERRB ;SET WARNING BIT IN USER ERROR BYTE MOVB #'W,FORW ;INSERT W FOR WARNING .PRINT ;NO, PRINT IT AND RETURN TO CALLER MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 RETURN .DSABL LSB .SBTTL OCTOUT - OCTAL TO ASCII OUTPUT ;+ ; R0 = UNSIGNED # TO BE CONVERTED ; R1 -> ADDR OF AREA TO PLACE THE 6 ASCII DIGITS ;- OCTOUT: MOVB #30,@R1 SEC ;NOT NEEDED IF C=1 ON ENTRY 10$: ROL R0 ROLB (R1)+ MOVB #206,@R1 20$: ASL R0 BEQ 30$ ;IF 0 THEN DONE ROLB @R1 BCS 20$ BR 10$ 30$: CLRB (R1)+ ;CHANGE 206 TO TERMINATE STRING RETURN .PSECT ERTXT,D .NLIST BEX ; THE ASCII AREA & BUFFER MUST BE TOGETHER TO BE PRINTED AS ONE LINE. LINE: .NLCSI TYPE=I,PART=PREFIX FORW: .ASCII /F-/ LINBUF: .BLKB 50. ;ERROR MESSAGE BUFFER .SBTTL - LIBRARIAN ERROR MESSAGE TEXT .ENABL LC MSG0: .NLCSI TYPE=I,PART=PREFIX .ASCIZ "F-Internal error" .DSABL CRF MSG1: .ASCIZ "File not found" ;FILENAME MSG2: .ASCIZ "Invalid device" MSG3: .ASCIZ "Insufficient memory" MSG4: .ASCIZ "Invalid option combination" MSG5: .ASCIZ "Input error in" ;FILENAME MSG6: .ASCIZ "Invalid record type in" ;FILENAME MSG7: .ASCIZ "Output device full" MSG10: .ASCIZ "Invalid GSD in" ;FILENAME MSG11: .ASCIZ "Macro name table full, use /M:n" MSG12: .ASCIZ "Invalid insert of" ;SYMBOL MSG13: .ASCIZ "Invalid replacement of" ;SYMBOL MSG14: .ASCIZ "Null library" MSG15: .ASCIZ "Duplicate module name of" ;SYMBOL MSG16: .ASCIZ "Invalid delete of" ;SYMBOL MSG17: .ASCIZ "Only continuation allowed" MSG20: .ASCIZ "Invalid character" MSG21: .ASCIZ "/R or /U given on library file" ;FILENAME MSG22: .ASCIZ "Invalid library for listing or extract" MSG23: .ASCIZ "Output error" MSG24: .ASCIZ "Output file full" MSG25: .ASCIZ "Invalid extract of" ;SYMBOL MSG26: .ASCIZ "EOF during extract" MSG27: .ASCIZ "Output and Input file names the same" ;+ ; ERROR MESSAGE RE-NUMBERING WILL HAVE TO TAKE PLACE IF FORM MESSAGES ARE ; REMOVED. ALTERNATIVE IS TO LEAVE THEM IN HERE, THEY JUST WILL NEVER BE ; CALLED IF THE FORM LIBRARY FUNTION IS REMOVED FROM LIBRARY. ;- MSG30: .ASCIZ "Invalid input file" ;FILENAME ;MAS01 MSG31: .ASCIZ "Duplicate form name of" ;SYMBOL ;MAS01 MSG32: .ASCIZ "/U given on library file" ;FILENAME ;MAS01 MSG33: .ASCIZ "File created; protected file already exists" ;FILNM ;MAS07 MSG34: .ASCIZ "Protected file already exists" ;FILNM ;MAS07 MSG35: .ASCIZ "Duplicate macro name of" ;SYMBOL ;NOTE - MSG36 AND MSG37 ARE NOT FMS ERROR MESSAGES MSG36: .ASCIZ "Too many .MACRO, .IRP, .IRPC or .REPT statements" MSG37: .ASCIZ "Too many .ENDM or .ENDR statements" ;NOTE THAT IF YOU ADD ANY ERROR MESSAGES YOU MUST INCREMENT LGMSG LGMSG= 37 ;HIGHEST LEGAL MESSAGE NUMBER ;MAS07 ERR LGMSG ;MACRO TO CREATE ERROR MESSAGE NUMBERS .PSECT PATCH ;THIS IS A PATCH PSECT TO BE ;USED FOR BUG FIXES .BLKW 64. .END