Trailing-Edge
-
PDP-10 Archives
-
decuslib20-04
-
decus/20-0131/scnmac.mac
There are 35 other files named scnmac.mac in the archive. Click here to see a list.
SUBTTL COMMAND SCANNER MACROS %7(203) 29-NOV-74
IFDEF %.C,<IFE %.C,<XLIST>>
IFNDEF %.C,<XLIST>
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,<TITLE SCNMAC -- LISTING OF SCNMAC.MAC (SCAN PARAMETER FILE)>
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