.IDENT /V01.48/ ;**- ; Module name: PIPMAC ; ; Version V01.48 Last edit: 14-FEB-80 11:35 ; Status: Development/Debugging ; ; Revision history: ; ; Version V01.48 14-FEB-80 11:35 - 14-FEB-80 11:35 ; Created by: K.J. CROSS ; ;**- .NLIST .TITLE PIPMAC - MACROS FOR PIP, ETC. ; ALTERED: ; ANDREW C. GOLDSTEIN 21 NOV 76 13:01 ; ALTERED TUESDAY 31-DEC-74 9:10 ; ; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS. ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD MASS. ; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD MASS. ; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE ; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION ; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT ; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. ; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY ; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; PETER H. LIPMAN 30-MARCH-73 ; ; ASSEMBLY PARAMETERS R$$11M=1 ;0 FOR RSX11D, 1 FOR RSX11M .IF GT,R$$11M ;IF RSX11M R$$DPB=1 ;NEW DPB FORMATS R$$EIS=1 ;W/ EXTENDED INSTRUCTION SET ;KJC R$$DYM=1 ;1 IF DYNAMIC MEMORY AVAILABLE .IFF ;IF RSX11D R$$DPB=1 ;NEW DPB FORMAT FOR RSX11D TOO R$$EIS=1 ;EXTENDED INSTRUCTION SET AVAILABLE R$$DYM=0 ;DYNAMIC MEMORY DOESN'T WORK IN RSX11D YET $DSW=0 ;DIRECTIVE STATUS WORD IS AT 0 FOR 11D RONLY$=1 ;FORCE PURE PSECTS READ ONLY .ENDC ; .IF EQ,R$$EIS .MACRO NOEIS$ .MCALL ILLOP ILLOP .MACRO SOB REG,LOC DEC REG BNE LOC .ENDM SOB .ENDM NOEIS$ ; ; DEFINE THE LIST OF PARAMETERS AS ILLEGAL OPCODES ; .MACRO ILLOP LIST .IRP X, .MACRO X A1,A2 .LIST .ERROR ;ILLEGAL OP CODE *************** .NLIST .ENDM X .ENDM ;END OF IRP .ENDM ILLOP ; ; INVOKE THE NOEIS$ MACRO ; NOEIS$ .ENDC ; .IF DF,SYS40$ .MACRO .PSECT PSECT,P1,P2,P3,P4,P5,P6 .CSECT PSECT .ENDM .PSECT .ENDC ; ; PSECT MACROS - DEFINE THE PURE AND IMPURE (I/D) CONTROL SECTIONS ; .MACRO IMPURE .IF DF,SYS40$ .CSECT .ENDC .IF NDF,SYS40$ .PSECT IMPURE,RW,D,LCL,REL,CON .ENDC .ENDM IMPURE ; .MACRO PURE. PSECT,ID .IF DF,SYS40$ .CSECT .ENDC .IF NDF,SYS40$ .IF DF,RONLY$ .PSECT PSECT,RO,ID,LCL,REL,CON .ENDC .IF NDF,RONLY$ .PSECT PSECT,RW,ID,LCL,REL,CON .ENDC .ENDC .ENDM PURE. ; .MACRO PURE.I PURE. PURE$I,I .ENDM PURE.I ; .MACRO PURE.D PURE. PURE$D,D .ENDM PURE.D ;+ ; MACROS TO GENERATE STRINGS IN THE MSGSTR CSECT ; CALLING SEQUENCE: ; MSG MSGN,STRING,CSECT ; OR MSG1 MSGN,STRING,CSECT ; INPUTS: ; MSGN IS 4 OR LESS CHARACTER NAME OF THE STRING. ; "MG" IS APPENDED FOR THE NAME OF THE ADDRESS OF THE ; STRING. "SZ" IS APPENDED FOR THE NAME OF THE SIZE ; STRING - THIS PARAMETER IS HANDLED AS FOLLOWS ; MSG GENERATES: .ASCII ^STRING^ ; MSG1 GENERATES: .ASCII STRING ; IN THE FORMER CASE THE STRING MAY NOT HAVE ; "^" IMBEDDED, NOR CAN IT HAVE <15> OR <12> IMBEDDED ; THE LATTER STRING IS THE MOST GENERAL, BUT ; REQUIRES THE CALLER TO SUPPLY THE BRACKETS FOR ; THE .ASCII DIRECTIVE. ;- .MACRO MSG MSGNAM,STRING,CSECT MSG1 ,<^STRING^>,CSECT .ENDM MSG ; ; MSG WITH A TRAILING ZERO BYTE .MACRO MSGZ MSGNAM,STRING,CSECT MSG1 ,<^STRING^<0>> .ENDM MSGZ .MACRO MSG1 MSGNAM,STRING,CSECT .IF NDF,R$$MSG R$$MSG=0 .ENDC ; .IF EQ,R$$MSG PURE. MSGSTR,D MSGNAM'MG=. .ASCII STRING MSGNAM'SZ=.-MSGNAM'MG .PSECT CSECT ; .IFF .IF NB,MSGNAM MSGCT.=MSGCT.+1 MSGNAM'MG=0 MSGNAM'SZ=MSGCT. .ENDC .ENDC .IF DF,MSGBL. .IF NB,MSGNAM .GLOBL MSGNAM'MG,MSGNAM'SZ .ENDC .ENDC .ENDM MSG1 ;+ ; MACRO TO PRINT ERROR MESSAGES ; CALLING SEQUENCE: ; ERROUT MSGNAM,NAMCOD,ERRCOD ; INPUTS: ; R0 IS ASSUMED TO CONTAIN THE ADDRESS OF AN FDB ; MSGNAM IS THE 4 CHAR NAME OF A MESSAGE ; IF NULL, USE ZERO FOR MESSAGE ADDRESS AND SIZE ; NAMCOD = NULL TO LEAVE OUT PRINTING OF DEVICE, DIRECTORY, ; AND FILE NAME. ; = 0 TO USE DEVICE AND FILE NAME FROM THE FILE NAME ; BLOCK. ; =1 TO USE DEVICE AND FILE NAME FROM F.DSPT ; IN EITHER OF THE NON-NULL CASES, THE ; DIRECTORY IS TAKEN FROM F.DSPT IF NON-NULL ; OR FROM THE FCS DEFAULT DIRECTORY. ; ERRCOD = NULL IF NOT PRINTING AN ERROR CODE ; = 0 IF ERROR CODE IS TO BE USED FROM THE FDB IN R0 ; IF F.ERR+1 (R0) IS NEGATIVE, THIS INDICATES, QI/O ERROR ; AS OPPOSED TO HANDLER ERROR, SUBTRACT 128. FOR ; QIOSYM.MSG ERROR FILE. ; = ANYTHING ELSE, THEN CODE WILL BE GENERATED TO ; MOVB ERRCOD,R4 ; AND THE CONTENTS OF R4 WILL THEN BE PRINTED AS THE CODE. ;- ; ;+ ; THE FOLLOWING TRAP INSTRUCTION IS GENERATED BY THE ERROUT, ERROUX ; ERRP, ERRPX MACROS AND INTERPRETED BY THE ROUTINE .ERTRP. ; ; TRAP X ; ; WHERE THE FOLLOWING LOW ORDER BITS ARE DEFINED ; ; BIT 0 - SET IF JMP @.ABORT WHEN ERROR PRINTED OUT ; IS COMPLETE ; - RESET IF RETURN TO INSTRUCTION FOLLOWING THE TRAP INSTRUCTION ; BIT 1 - SET IF SIZE AND ADDRESS OF ERROR STRING FOLLOWS (2 WORDS) ; - RESET IF ERROR NUMBER FOLLOWS (1 WORD) ; ; BITS 2=0. 3=0 - DO DOT PRINT FILE NAME ; BITS 2=1, 3=0 - PRINT FILE NAME FROM FILE NAME BLOCK ; BITS 2=0, 3=1 - PRINT FILE FROM FILE DESCRIPTOR POINTER ; BITS 4=0, 5=0 - DON'T PRINT ERROR CODE ; BITS 4=1, 5=0 - PRINT ERROR CODE FROM F.ERR(R0) ; BITS 4=0, 5=1 - PRINT ERROR CODE IN R4 ; ; IF THE SIZE AND ADDRESS OF AN ERROR STRING FOLLOWS THE TRAP ; INSTRUCTION, AND THE ADDRESS IS ZERO, THEN R2 IS ASSUMED TO CONTAIN ; THE SIZE AND R3 CONTAINS THE ADDRESS. LIKEWISE IF A POSITIVE ERROR ; NUMBER FOLLOWS THE TRAP INSTRUCTION, 0 INDICATES THAT R2 ALREADY CONTAINS ; THE ERROR NUMBER. ;- ; ; PRINT SPECIFIED MESSAGE STRING AND RETURN ; .MACRO ERROUT MSGNAM,NAMCOD,ERRCOD ERROU1 MSGNAM,NAMCOD,ERRCOD,0 .ENDM ERROUT ; ; PRINT SPECIFIED MESSAGE STRING AND EXIT ; .MACRO ERROUX MSGNAM,NAMCOD,ERRCOD ERROU1 MSGNAM,NAMCOD,ERRCOD,1 .ENDM ERROUX .MACRO ERROU1 MSGNAM,NAMCOD,ERRCOD,X1 X=X1!2 ERR1 NAMCOD,ERRCOD .LIST TRAP X .NLIST .IF NB,MSGNAM .LIST .WORD MSGNAM'SZ .WORD MSGNAM'MG .NLIST .IFF .LIST .WORD 0,0 .NLIST .ENDC .ENDM ERROU1 ; ; PRINT MESSAGE SPECIFIED BY MESSAGE NUMBER ; .MACRO ERRP MSGNAM,NAMCOD,ERRCOD ERRP1 MSGNAM,NAMCOD,ERRCOD,0 .ENDM ERRP ; ; PRINT MESSAGE SPECIFIED BY MESSAGE NUMBER AND EXIT ; .MACRO ERRPX MSGNAM,NAMCOD,ERRCOD ERRP1 MSGNAM,NAMCOD,ERRCOD,1 .ENDM ERRPX .MACRO ERRP1 MSGNAM,NAMCOD,ERRCOD,X1 X=X1 ERR1 NAMCOD,ERRCOD .LIST TRAP X .NLIST .IF NB,MSGNAM .LIST .WORD MSGNAM'MG .NLIST .IFF .LIST .WORD 0 .NLIST .ENDC .ENDM ERRP1 .MACRO ERR1 NAMCOD,ERRCOD .IF IDN,,<0> X=X!4 ;PRINT FILE NAME FROM FNB .IFF .IF IDN,,<1> X=X!10 ;PRINT FILE NAME FROM F.DSPT .IFF .IF NB,NAMCOD .ERROR ;ILLEGAL PARAMETER .ENDC .ENDC .ENDC .IF NB,ERRCOD .IF IDN,,<0> X=X!20 .IFF .IF DIF,, .LIST MOVB ERRCOD,R4 .NLIST .ENDC X=X!40 .ENDC .ENDC .ENDM ERR1 ; ; MACRO TO DEFINE THE ERRPT0 SUBROUTINE, CALLS DIFFERENT GLOBAL ; ROUTINE IF GET COMMAND LINE IS IN USE. IF ERRPRT FAILS ; A PARTIAL MESSAGE IS SENT TO LUN 2 VIA A QI/O WRITE VIRTUAL BLOCK ; .MACRO ERRINI .MCALL QIO$S,WTSE$S .LIST ERRPT0:: .NLIST .IF DF,GCMLCB .LIST CALL ERRPRG ;PRINT ERROR MESSAGE USING MO .NLIST .IFF .LIST CALL ERRPRT ;PRINT ERROR MESSAGE USING MO .NLIST .ENDC .LIST RETURN .NLIST .ENDM ERRINI ;+ ; MACRO TO SET UP THE .TITLE STATEMENT, THE .IDENT STATEMENT, ; A .SBTTL LINE, AND AN IDENT MESSAGE ; CALLING SEQUENCE: ; IDTITL IDNUM,IDNAM,TITLE ; INPUTS: ; IDNUM IS THE IDENT NUMBER ; IDNAM IS THE PROGRAM NAME ; TITLE IS THE SHORT DESCRIPTIVE TEXT TO FOLLOW THE ; PROGRAM NAME IN THE .TITLE STATEMENT ; EXAMPLE: ; IDTITL 0617,PIP, ;- .MACRO IDENT IDNUM,IDNAM,TITLE .IF GT,R$$11M IDENT1 ,, .IFF IDENT1 <D'IDNUM>,<IDNAM>,<TITLE> .ENDC .ENDM IDENT .MACRO IDENT1 IDNUM,IDNAM,TITLE .LIST .TITLE IDNAM IDNUM, TITLE .SBTTL **** IDNAM VERSION IDNUM **** .IDENT /IDNUM/ .NLIST .LIST MC .ENDM IDENT1 ; .MACRO IDTITL IDNUM,IDNAM,TITLE IDENT <IDNUM>,<IDNAM>,<TITLE> .IF GT,R$$11M MSG IDNT,<IDNAM VERSION M'IDNUM> .IFF MSG IDNT,<IDNAM VERSION D'IDNUM> .ENDC MSG MOID,<IDNAM -- > ; .IF GT,R$$11M PURE.D .MCALL NMBLK$ .MSGFN::NMBLK$ QIOSYM,MSG,,LB,0 ;KJC .PSECT ; .IFF MSG ,<SY:[1,2]'IDNAM'.MSG> PURE.D .MSGFN::.WORD SZ,MG .PSECT .ENDC ; .GLOBL MOIDMG,MOIDSZ,IDNTMG,IDNTSZ .ENDM IDTITL ; ; DEFINE THE OFFSETS FOR F.DSPT AS GENERATED BY CSI .MACRO FLDSOF S.FIDS=12. ;SIZE OF FILE DESCRIPTOR IN BYTES N.DEVD=0 ;DEVICE DESCRIPTOR N.DIRD=4 ;DIRECTORY DESCRIPTOR N.FNMD=8. ;FILE NAME DESCRIPTOR ; ALSO DEFINE APPENDED DATA OFFSETS USED BY PIP AND FRIENDS S.APPD=8. ;NO. OF BYTES APPENDED N.SPEC=12. ;STATUS BITS FROM CSI N.FLID=14. ;FILE ID .MACRO FLDSOF .ENDM FLDSOF .ENDM FLDSOF ; ; ADDITIONAL BIT IN NAME BLOCK STATUS WORD USED BY ; WILD CARD UIC LOGIC. ; NB.NXD=20000 ;FORCE NEXT DIRECTORY BEFORE NEXT FIND .NLIST MC .LIST