diff --git a/src/decsys/scnmac.mac b/src/decsys/scnmac.mac new file mode 100644 index 00000000..1cead374 --- /dev/null +++ b/src/decsys/scnmac.mac @@ -0,0 +1,412 @@ + SUBTTL COMMAND SCANNER MACROS %7(106) 09-OCT-78 + + IFDEF %.C,> + IFNDEF %.C, + +CUSTVR==0 ;CUSTOMER VERSION +DECVER==7 ;DEC VERSION +DECMVR==0 ;DEC MINOR VERSION +DECEVR==106 ;DEC EDIT VERSION + +;***COPYRIGHT 1971,1972,1973,1974 DIGITAL EQUIPMENT CORP., MAYNARD, MASS.*** + + +;DEFINE %.C NON-ZERO TO LIST FILE +;DEFINE %.C==-1 TO ASSEMBLE SCNMAC IN BOTH PASSES +;DEFINE %.C==-2 TO ALSO INCLUDE END STATEMENT, I.E., NORMAL LISTING +;DEFINE %.C==-3 TO MAKE SCNMAC A UNIVERSAL FILE +;DETERMINE IF SPECIAL ASSEMBLY NEEDED + +IF1,<%..C==1 ;ALWAYS ASSEMBLE PASS1 + IFDEF %.C,< IFE %.C+2, + IFE %.C+3,<UNIVERSAL SCNMAC -- SCAN PARAMETER UNIVERSAL SYMBOL TABLE + %..C==-77>> +>;END OF IF1 +IF2,<IFNDEF %.C,<%.C==0 + IFDEF %%SCAN,<%.C==-1>> ;SUPPLY VALUE IF USER DIDN'T + %..C==%.C ;USE USER'S VALUE FOR PASS2 +>;END OF IF2 + + LIST +IFE %..C,<TAPE> ;SKIP REST IF NO ASSEMBLY NEEDED ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +IFN %..C+77,< ;DON'T ASSEMBLE UNIVERSAL PASS1 + + +%%SCNM==<BYTE (3)CUSTVR(9)DECVER(6)DECMVR(18)DECEVR> + + PURGE CUSTVR,DECVER,DECMVR,DECEVR + ;MACRO DEFINITIONS OF GENERAL USE + +;DEFAULTS + +;DM ABBREVIATION,MAX,ADEFAULT,PDEFAULT +; DEFINES SYMBOLS MX.ABBREVIATION,AD.ABBREVIATION, AND PD.ABBREVIATION +; TO BE THE MAXIMUM ALLOWED VALUE, THE DEFAULT IF THE KEYWORD +; IS ABSENT, AND THE DEFAULT IF THE KEYWORD IS PRESENT RESPECTIVELY +; UNLESS THE CORRESPONDING SYMBOL IS ALREADY DEFINED. + + + DEFINE DM(ABBR,MAX,ADEF,PDEF),< + ND MX.'ABBR,MAX + ND AD.'ABBR,ADEF + ND PD.'ABBR,PDEF> + ;REVISION HISTORY OF PARAMETER FILE + +;%2(47) MAY, 1972, WITH SCAN 2(127) + +;50 ADD SYMBOLS FOR ALL WORDS AND LENGTHS IN SCAN BLOCK +; ADD FX.DFX, FX.TRM, AND .FXTRA,O,N,C. +; OBSOLETE FX.ADD. +;51 ADD FX.NDV. +;52 MAKE USEABLE AS A UNIVERSAL FILE +;%3(52) DEC, 1972 WITH SCAN 3(173) + +;53 ADD COMMENTS TO .FX DEFINITIONS TO INDICATE WHEN SET +;54 ADD DEFENSIVE PRINTX TO SWTCHS MACROS +;55 ADD FLAGS CONCEPT TO SWITCH TABLES; ADD FS.NFS +;56 AD FS.LRG TO HANDLE VALUES .GT. 2**17 +;57 ADD FS.MOT DEFINITION FOR .TSCAN FLAGS +;60 ADD FLAGS FOR .TDIRB CALL +;61 ADD FLAG FS.NUE +;62 CLEAN UP LISTING OF PAGE 1 +;63 ALLOW * IN KEYS LISTS +;64 ADD FX.PRT +;65 ADD FS.VRQ +;66 DELETE FX.ADD +;67 TEST BAD ARGS ONLY IN PASS2 +;70 IMPROVE ON 67 SLIGHTLY +;%4(70) DEC, 73 WITH SCAN 4(275) + +;71 DEFINE FS.OBV +;72 DEFINE JWW.?? +;73 DEFINE FS.MIO +;74 CORRECT OVERPROTECTION OF DEFAULT TO 377777,,777777 +;75 ADD SN STYLE SWITCHES +;76 ADD SCAN WORDS 24-31 AND FX.SUP +;77 ADD OVERRIDE ON POINT ARGUMENT TO SWITCH MACROS +;%5(77) JUN, 74 WITH SCAN 5(363) + +;100 DEFINE FS.ICL +;%6(100) JULY, 1974 WITH SCAN 6 + +;101 ADD GUIDE WORDS AS .CHXXX: AND, OR, NOT +;102 CLARIFY FS.NFS; ADD FS.NCM +;103 ADD GUIDE WORDS 4002-4011 +;104 REMOVE ASK MACRO (NEVER IMPLEMENTED) +;105 EXPAND (AND MOVE) FX.DEN FOR 5.07/6.02 +;106 ADD FS.IFI TO SIGNIFY INDIRECT FILE ILLEGAL IN FILE SPEC + ;WORDS IN FILE SPEC AREA +.FXDEV==0 ;DEVICE (NON-ZERO IF ANY PART OF SPEC) +.FXNAM==1 ;NAME (NON-ZERO IF NAME PRESENT) +.FXNMM==2 ;NAME MASK +.FXEXT==3 ;EXTENSION,,EXTENSION MASK (NON-ZERO DOT PRESENT) +.FXMOD==4 ;MODIFIER WORD +.FXMOM==5 ;MODIFIER MASK +.FXDIR==6 ;DIRECTORY WORD (EACH HALF=0 IF DEFAULT; SFD:0 IF END) +.FXDIM==7 ;DIRECTORY MASK +.FXBFR==22 ;/BEFORE +.FXSNC==23 ;/SINCE +.FXABF==24 ;/ABEFORE +.FXASN==25 ;/ASINCE +.FXFLI==26 ;FILE MIN SIZE (WORDS) +.FXFLM==27 ;FILE MAX SIZE (WORDS) +.FXEST==30 ;/ESTIMATE +.FXVER==31 ;/VERSION + +;LENGTHS OF FILE SPEC AREA +.FXLEN==32 ;LENGTH OF ONE SPECIFICATION +.FXLND==6 ;LENGTH OF DIRECTORY (UFD+SFD'S) + +;BYTES IN SCAN MOD WORD +FX.NDV==1B0 ;NULL DEVICE +FX.NUL==1B1 ;NULL EXTENSION +FX.DIR==1B2 ;DIRECTORY SPECIFIED (MOD=0 IF [-]) +FX.PHY==1B3 ;/PHYSICAL +FX.NOM==1B4 ;/OKNONE +FX.DFX==1B5 ;DIRECTORY DOES NOT NEED FIX-UP BY WILD +FX.TRM==7B8 ;CODE FOR SPEC'S TERMINATION + .FXTRA==1 ;& (AND) + .FXTRO==2 ;! (OR) + .FXTRN==3 ;- (NOT) + .FXTRC==4 ;+ (CONCATENATE) +FX.STR==1B9 ;/STRS +FX.PRT==1B10 ;/OKPROT +FX.SUP==1B11 ;/ERSUPERSEDE + +FX.DEN==7B23 ;/DENSITY [105] +FX.PAR==1B24 ;/PARITY +FX.PRO==777B35 ;/PROTECTION + ;SPECIAL CHARACTERS FOR SCAN +.CHALX==0 ;ALTMODE +.CHEOL==-1 ;END OF LINE +.CHEOF==-2 ;END OF FILE + +;GUIDE WORDS (TURNED INTO PSEUDO CHARACTERS) + +.CHAND==4000 ;'AND' [101] +.CHOR==04001 ;'OR' [101] +.CHNOT==4002 ;'NOT' [101] +.CHTO==04003 ;'TO' [103] +.CHFRM==4004 ;'FROM' [103] +.CHINP==4005 ;'INPUT' [103] +.CHOUT==4006 ;'OUTPUT' [103] +.CHSRC==4007 ;'SOURCE' [103] +.CHLST==4010 ;'LIST' [103] +.CHOBJ==4011 ;'OBJECT' [103] + + +;FLAGS FOR .ISCAN CALL + +FS.ICL==1B17 ;IGNORE SPECIAL COMMAND-LINE HANDLING +FS.IFI==1B16 ;INDIRECT FILE ILLEGAL IN COMMAND [106] + +;FLAGS FOR .TSCAN CALL + +FS.MOT==1B18 ;MULTIPLE OUTPUT SPECS POSSIBLE +FS.MIO==1B19 ;MIXED INPUT AND OUTPUT SPECS + +;FLAGS FOR .TDIRB CALL + +TS.DRW==0 ;SINGLE WORD +TS.DRP==1 ;PATH POINTER +TS.DRB==2 ;BIWORD (IE, SCAN SPEC FORMAT) + +;VALUES FROM .VERBO + +JWW.CN==1B33 ;/VERBOS:CONTINUATION +JWW.FL==1B34 ;/VERBOS:FIRST +JWW.PR==1B35 ;/VERBOS:PREFIX + ;SWITCH SCANNING MACROS AND TABLES + +;SWTCHS IS THE MACRO LISTING ALL KNOWN SWITCHES +;IT INCLUDES THE NAME AND STORAGE LOCATION +;FOR VALUE TYPES, IT ALSO HAS THE MAX AND DEFAULT AND PROCESSOR +;FOR KEY-VALUE TYPES, IT POINTS TO THE KEYS AND HAS THE DEFAULT IF ANY +;FOR STAND-ALONE TYPES, IT HAS THE VALUE. + +;WHEN THE SWITCH SCANNING TABLES ARE TO BE BUILT, INVOKE +;THE MACRO DOSCAN WITH 5-CHAR ARGUMENT TO USE AS SYMBOL PREFIX +;IT WILL DEFINE XXXXXN,L,P,M,D + +; SL NAME,STORAGE,TABLE-NAME,DEFAULT,FLAGS +; DEFINES A LIST OF KEY-VALUES (SEE KEYS MACRO) +; DEFAULT IS THE ORDINAL OR 0 IF NO DEFAULT +; IF LH(STORAGE)=7777B11, STORAGE = ROUTINE TO PROCESS +; +; SP NAME,STORAGE,PROCESSOR,ABBREVIATION,FLAGS +; DEFINES A VALUE PARAMETER WHOSE DEFAULTS +; ARE DEFINED AT THE BEGINNING OF THE PROGRAM +; BY "DM" USING THE SAME ABBREVIATION +; PROCESSOR IS THE JUMP ADDRESS IN SWITCH PROCESSING +; IT WILL BE CALLED WITH P1=SWITCH OFFSET IN TABLE +; AND P2=POINTER TO 4-WORD BLOCK OF INTERNAL OR EXTERNAL STUFF +; IF MAX=0 AND FS.LRG, THEN ANY VALUE CAN BE STORED +; ELSE, 0.LE.VALUE.LE.MAX +; +; 0.LE.MAX,DEFAULT.LT.2**17 UNLESS FS.LRG +; +; IF MAX=0 AND NOT FS.LRG, THEN PROCESSOR IS AN IMMEDIATE ACTION +; WHICH WILL ALWAYS BE CALLED +; ELSE, PROCESSOR WILL BE CALLED ONLY IF ":" +; +; SS NAME,STORAGE,VALUE,FLAGS +; DEFINES A STAND-ALONE PARAMETER +; +; IN ALL CASES, STORAGE IS A BYTE POINTER. +; IF A FULL WORD, ONLY THE ADDRESS IS NEEDED +; IF A MULTIPLE WORD, THE BYTE SIZE IS 65-#WORDS (UP TO 28) +; IF A FILE SPECIFICATION, THE LENGTH IS HELD IN MX.ABBREVIATION +; IF POINTER IS 7777??,,?????? THEN RH(POINTER) IS DISPATCH +; ADDRESS OF PROCESSOR WHICH TAKES KEYWORD SWITCH VALUES +; +; SN NAME,STORAGE,FLAGS +; DEFINES A STAND-ALONE PARAMETER WHICH TAKES VALUE +; 1 IF /NAME, AND VALUE 0 IF /NONAME + + +; KEYS (NAME,LIST) WILL DEFINE A LIST OF KEYS BY NAME NAME +; NAME CAN BE UP TO 4 CHARS. (DEFINES NAME.T AND NAME.L) +; LIST IS SIXBIT NAMES SEPARATED BY COMMAS. +; DEFINES NAME CONCATENATED WITH START OF ITEM IN LIST +; AS INDEX IN LIST UNLESS THE ITEM BEGINS WITH "*" + DEFINE SL($NAME,$RESULT,$TABLE,$DEFAULT,$FLAGS),< + X $NAME,$TABLE'.T-1,<$RESULT>,$DEFAULT,-$TABLE'.L,$FLAGS +> + + DEFINE SP($NAME,$RESULT,$PROCESSOR,$ABBR,$FLAGS),< + X $NAME,$PROCESSOR,<$RESULT>,PD.'$ABBR,MX.'$ABBR,$FLAGS +> + + DEFINE SS($NAME,$RESULT,$VALUE,$FLAGS),< + X $NAME,0,<$RESULT>,$VALUE,0,$FLAGS +> + + DEFINE SN($NAME,$RESULT,$FLAGS),< + X $NAME,0,<$RESULT>,0,0,FS.NOS!$FLAGS +> + +;FLAGS WHICH CAN BE DEFINED IN SWITCH TABLE +FS.NFS==1B0 ;THIS SWITCH IS NEVER PART OF A FILE SPECIFICATION + ; THIS SHOULD BE SET ON GLOBAL SWITCHES + ; ** VERY IMPORTANT TO GET RIGHT ** +FS.LRG==1B1 ;THE MAX AND DEFAULT VALUES ARE 0 OR .GT. 2**17 +FS.NUE==1B2 ;NO USER EXIT ON THIS SWITCH +FS.VRQ==1B3 ;VALUE REQUIRED +FS.OBV==1B4 ;OR BIT VALUES TO RIGHT HALF +FS.NOS==1B5 ;SWITCH TAKES "NO" PREFIX (INTERNAL FOR SN MACRO ONLY) +FS.NCM==1B6 ;SWITCH DOES NOT CONSTITUTE A COMMAND [102] + ; (FOR /RUN, /OPTION, /EXIT) + + ;DON'T USE FS.R??, WHICH ARE DEFINED IN C.MAC + ;MACRO TO BUILD THE TABLES FROM THE SWTCHS MACRO + + DEFINE DOSCAN(PFX),< + XALL + + + ;;TABLE OF SIXBIT SWITCH NAMES +DEFINE X($NAME,$PROC,$POINT,$DEFLT,$MAX,$FLAGS),< + EXP SIXBIT /$NAME/ +> +PFX'N: SWTCHS +PFX'L==.-PFX'N + + ;;TABLE OF BYTE POINTERS TO STORE RESULT +IF2,< +DEFINE X($NAME,$PROC,$POINT,$DEFLT,$MAX,$FLAGS),< +..TEMP==0 +IRP $POINT,< + IFE ..TEMP-1,< + $POINT ;$NAME + > + IFE ..TEMP-2,< + POINT 36,$POINT,35 ;$NAME + > + IFIDN <$POINT><*P>,<..TEMP==1> ;;PARTIAL WORD + IFIDN <$POINT><*F>,<..TEMP==2> ;;FULL WORD +> + +IFB <$POINT>,< + Z ;$NAME +..TEMP==1> +IFE ..TEMP,< +IFN <$POINT>_-^D24,< +..TEMP==$POINT + ..TEMP ;$NAME +> +IFE ..TEMP,< + POINT 36,$POINT,35 ;$NAME + > +>>> +PFX'P: SWTCHS + + ;;TABLE OF IF LT 0, IOWD KEY TABLE + ;; OR IF GE 0, XWD MAX,PROCESSOR +MX.==0 +DEFINE X($NAME,$PROC,$POINT,$DEFLT,$MAX,$FLAGS),< +IF2,< +IFE <$FLAGS>&FS.LRG,<IFG <$MAX>-377777,<PRINTX ?MAXIMUM OF /$NAME CANNOT BE GT 377777>> +> +..TEMP==1 +IFN <$FLAGS>&FS.LRG,<IFN <$MAX>,<..TEMP==0>> +IFN ..TEMP,< + XWD $MAX,$PROC ;$NAME +> +IFE ..TEMP,< + XWD [$MAX],$PROC ;$NAME +> +> +PFX'M: SWTCHS + + ;;FLAGS,,DEFAULT VALUE +PD.==0 +DEFINE X($NAME,$PROC,$POINT,$DEFLT,$MAX,$FLAGS),< +IF2,< +IFL <$DEFLT>,<IFN <$DEFLT>+1,<PRINTX ?DEFAULT OF /$NAME CANNOT BE NEGATIVE>> +IFE <$FLAGS>&FS.LRG,<IFG <$DEFLT>-777777,<PRINTX ?DEFAULT OF /$NAME CANNOT BE GT 777777>> +> +IFB <$FLAGS>,<..TEMR==0> +IFNB <$FLAGS>,<..TEMR==($FLAGS)> +..TEMP==1 +IFN <$FLAGS>&FS.LRG,<IFN <$DEFLT>,<..TEMP==0>> +IFN ..TEMP,< + XWD ..TEMR,$DEFLT ;$NAME +> +IFE ..TEMP,< + XWD ..TEMR,[$DEFLT] ;$NAME +> +> +PFX'D: SWTCHS + PURGE ..TEMP,..TEMR + SALL +> + ;AND FINALLY, THE KEY-WORD VALUES + + DEFINE KEYS(NAME,LST),< +NAME'.L==0 +NAME'.T: IRP (LST)<EXP SIXBIT /LST/ + NAME'.L==NAME'.L+1 + ..TEMP==0 + IRPC (LST)<IFIDN <LST><*>,<..TEMP==1> + STOPI> + IFE ..TEMP,<NAME'LST==NAME'.L> + > + PURGE ..TEMP + > + ;M.FAIL <FOO> SENDS FOO AS A FATAL ERROR + +DEFINE M.FAIL (A),< + EXT .FMSG + PJSP T1,.FMSG + XLIST + ASCIZ \A\ + LIST +> + +;M.FAIN <FOO> SENDS FOO AS A FATAL ERROR WITH N IN SIXBIT + +DEFINE M.FAIN (A),< + EXT .FMSGN + PJSP T1,.FMSGN + XLIST + ASCIZ \A\ + LIST +> + +;M.FAID <FOO> SENDS FOO AS A FATAL ERROR WITH N IN DECIMAL + +DEFINE M.FAID (A) < + EXT .FMSGD + PJSP T1,.FMSGD + XLIST + ASCIZ \A\ + LIST +> + +;M.FAIO <FOO> SENDS FOO AS A FATAL ERROR WITH N IN OCTAL + +DEFINE M.FAIO (A),< + EXT .FMSGO + PJSP T1,.FMSGO + XLIST + ASCIZ \A\ + LIST +> + +;M.MAIF <FOO> SENDS FOO AS A FATAL ERROR WITH N=ADDR OF FILE DESCRIPTOR + +DEFINE M.FAIF(A)< + EXT .FMSGF + PJSP T1,.FMSGF + XLIST + ASCIZ \A\ + LIST +> + >;END OF %..C+77 ON PAGE 1 + + IF1,< ASUPPRESS> + IFDEF %.C,<IFLE %.C+2,< + IF2,<PURGE %.C,%..C> + END>> ;BIND OFF TO GET CLEAN LISTING + \ No newline at end of file