SUBTTL COMMAND SCANNER MACROS %7(203) 29-NOV-74 IFDEF %.C,> IFNDEF %.C, SCMWHO==0 ;WHO LAST EDITTED SCMVER==7 ;DEC VERSION SCMMIN==0 ;DEC MINOR VERSION SCMEDT==203 ;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 .DIRECTIVE .NOBIN %..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 SEARCH C ;GET C MACROS %%C==%%C ;SHOW VERSION OF C %%SCNM==VRSN. (SCM) PURGE SCMWHO,SCMVER,SCMMIN,SCMEDT ;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 ;%7(105) OCT, 1974 WITH SCAN 7 ;201 SIMPLIFY DOSCAN ANALYSIS (NO CHANGE IN CALL) ;202 ADD .FLASK, .FLTEL, .FLQUI ;203 ELIMINATE SCNMAC.REL IF UNIVERSAL ;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 ;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 ;/MESSAGE:CONTINUATION JWW.FL==1B34 ;/MESSAGE:FIRST JWW.PR==1B35 ;/MESSAGE:PREFIX ;VALUES IN .FLAQT .FLASK==1 ;/ASK .FLTEL==2 ;/TELL .FLQUI==3 ;/QUIET ;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,< EXP <$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 > IFNB <$POINT>,<IFE ..TEMP,< EXP <$POINT> ;$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 ����