; ; LOCAL MACRO DEFINITIONS ; ; RESTORE OLD PSECT ; .MACRO OLDPST,PNAME .IF NB PNAME .PSECT PNAME .IFF ;NB PNAME .PSECT .ENDC ;NB PNAME .ENDM ;OLDPST ; ; GENERATE GCML AND CSI CONTROL BLOCK FOR THIS TASK ; .MACRO GCMLDF,TSK,PNAME,CSIPST,BUFNAM,BUFLEN .IF NB CSIPST .PSECT CSIPST,REL,RW,D,OVR,GBL .IFF .PSECT $VARS .IFTF OUTCTR: .WORD 0 ;OUTPUT FILE SPEC COUNTER DOTFLG: .WORD 0 ;FLAG FOR '.' IN FILE SPEC RTNVAL: .WORD 0 ;RETURN VALUE TYPPTR: .WORD 0 ;DEFAULT FILE TYPE POINTER LUNDAT: .ASCII /TI/ ;GETLUN DATA BLOCK, INITIALIZED TO 'TI0:' .WORD 0 .BLKW 4 .IF NB BUFNAM BUFNAM:: .ENDC CMDBF: .BLKB CMDSZ+2 ;COMMAND LINE BUFFER .EVEN CSIBF: .BLKB C.SIZE ;CSI BUFFER .EVEN .IF NB BUFLEN BUFLEN==CSIBF+C.CMLD .ENDC DFDON: .WORD 0 ;ONCE FLAG DFUIC: .WORD 0 ;DEFAULT UIC STRING DESCRIPTOR .WORD DFADR DFADR: .BLKB DFLNG ;DEFAULT UIC STRING BUFFER .EVEN .IFF .PSECT $IDATA .IFTF GCMD: GCMLB$ NSTLVL,TSK,CMDBF,CMDLUN,,CMDSZ .ENDC OLDPST PNAME .ENDM ;GCMLDF ; ; START SWITCH TABLE MACRO ; .MACRO SWTSRT,PNAME .PSECT $SWTDF SWMSK=1 SWITCH=. .PSECT SWTVAL VALUES=. VALLEN=0 .PSECT $SWTBL .WORD SWITCH .IF EQ PASS-1 SWTNUM=SWTNUM+1 ;COUNT SWITCH TABLES IN PASS 1 ONLY .ENDC ;EQ PASS-1 OLDPST PNAME .ENDM ;SWTSRT ; ; END SWITCH TABLE MACRO ; .MACRO SWTEND,PNAME .PSECT $SWTDF CSI$ND ; .PSECT SWTVAL ; .BLKB VALLEN OLDPST PNAME .ENDM ;SWTEND ; ; ENTER A LIST OF BIPOLAR SWITCH DEFINITIONS ; .MACRO SWTNEG,LIST,PNAME .IRP SW, .IF DF MULTAB .IF EQ SWMSK-1 .PSECT $SWTMK MASKAD=. .WORD 0,0 .ENDC ;EQ SWMSK-1 .ENDC ;DF MULTAB .PSECT $SWTDF CSI$SW SW,SWMSK,MASKAD,,NEG,,EXACT .IF EQ SWMSK-100000 SWMSK=1 .IFF SWMSK=2*SWMSK .ENDC ;EQ SWMSK-100000 .ENDM ;SW, OLDPST PNAME .ENDM ;SWTNEG ; ; ENTER A SINGLE SWITCH DEFINITION WITH VALUES ; THIS MACRO MAY BE CALLED MORE THAN ONCE ; ; SW = SWITCH NAME ; PARLST = ARGUMENT LIST OF THE FOLLOWING FORM: ; ; <,,...> ; ; THE INDIVIDUAL ELEMENTS ARE AS EXPLAINED BELOW. ; THIS PARAMETER LIST CAN BE USED TO INDEPENDENTLY SPECIFY ; CHARACTERISTICS FOR MULTIPLE SWITCH VALUES. ; ; TYP = VALUE TYPE, EITHER 'ASCII', 'OCTAL', 'DECIMAL', OR 'HEX'. ; LEN = NUMBER OF BYTES TO RESERVE FOR A SINGLE SWITCH VALUE. MUST BE ; TWO (2) FOR 'OCTAL', 'DECIMAL', OR 'HEX'. ; NVAL = NUMBER OF ASCII VALUES TO BE ASSOCIATED WITH THE SWITCH, OR ; A LIST (ENCLOSED IN <...>) OF DEFAULT NUMERIC VALUES FOR ; THE SWITCH. ; EACH VALUE WILL OCCUPY LEN OR LEN + 1 BYTES OF MEMORY. ; ; EXAMPLE: ; ; SWTVAL XY,<>,>,> ; ; THE XY SWITCH WILL BE DEFINED TO ALLOW UP TO 4 VALUES. THE ; FIRST TWO WILL BE CONVERTED WITH HEX RADIX, THE THIRD WITH DECIMAL ; RADIX, AND THE FOURTH IS A FOUR CHARACTER ASCII STRING. ; DEFAULTS ASSOCIATED WITH THE FIRST THREE VALUES ARE 0, -1, AND 10. ; ; THIS MACRO CONSTRUCTS THE FORTRAN COMMON/SWTVAL/ TO CONTAIN SWITCH ; VALUES PARSED FROM A COMMAND LINE. THE STRUCTURE OF THE COMMON ; IS DEFINED BELOW: ; ; ADDRESS IN COMMON/SWTVAL/ (PSECT SWTVAL) ; ; VALUES: LEN' BYTES 1ST VALUE, 1ST SWITCH ; LEN' BYTES 2ND VALUE, 1ST SWITCH ; . ; . ; . ; LEN' BYTES NVAL'TH VALUE, 1ST SWITCH ; LEN' BYTES 1ST VALUE, 2ND SWITCH ; . ; . ; . ; LEN' BYTES NVAL'TH VALUE, 2ND SWITCH ; . ; . ; . ; LEN' = LEN, IF LEN IS EVEN ; LEN + 1, IF LEN IS ODD ; .MACRO SWTVAL,SW,PARLST,PNAME .IF NDF SW'DON SW'DON=0 .ENDC ;NDF SW'DON ; .IF NE SW'DON-PASS SW'DON=PASS .PSECT SWTVAL SW'VAL=VALUES+VALLEN .PSECT $SWTVL SW'VTB=. VTBOFF=0 .IRP PARS, GENVAL SW,PARS .ENDM ;PARS, CSI$ND .PSECT SWTVAL VALLEN=VALLEN+VTBOFF ; .ENDC ;NE SW'DON-PASS .IF DF MULTAB .IF EQ SWMSK-1 .PSECT $SWTMK MASKAD=. .WORD 0,0 .ENDC ;EQ SWMSK-1 .ENDC ;DF MULTAB .PSECT $SWTDF CSI$SW SW,SWMSK,MASKAD,,NEG,SW'VTB,EXACT .IF EQ SWMSK-100000 SWMSK=1 .IFF SWMSK=2*SWMSK .ENDC ;EQ SWMSK-100000 OLDPST PNAME .ENDM ;SWTVAL ; ; GENERATE A SET OF SWITCH VALUE DESCRIPTORS ; .MACRO GENVAL,SW,TYP,LEN,NVAL VTBLEN=2*</2> .IF IDN TYP,ASCII .REPT NVAL CSI$SV TYP,SW'VAL+VTBOFF,VTBLEN VTBOFF=VTBOFF+VTBLEN .PSECT SWTVAL .REPT VTBLEN .BYTE 40 .ENDR ;VTBLEN .PSECT $SWTVL .ENDR ;NVAL .IFF ;IDN TYP,ASCII .IRP DEF, CSI$SV TYP,SW'VAL+VTBOFF,VTBLEN VTBOFF=VTBOFF+VTBLEN .PSECT SWTVAL .IF IDN TYP,DECIMAL .WORD 100000!DEF .IFF ;IDN TYP,DECIMAL .WORD DEF .ENDC ;IDN TYP,DECIMAL .PSECT $SWTVL .ENDM ;DEF, .ENDC ;IDN TYP,ASCII .ENDM ;GENVAL ; ; GENERATE DEFAULT FILE EXTENSION TABLE FOR THIS TASK ; .MACRO FTYPDF,LIST,PNAME TYPNUM=0 TYPLEN=4 .PSECT $IDATA TYPTAB: .IRP TYP, .PSECT $PDATA DEF'TYP=. .ASCII /.'TYP/ .EVEN .PSECT $IDATA .WORD DEF'TYP TYPNUM=TYPNUM+1 .ENDM ;TYP, TYPNUM=TYPNUM-1 OLDPST PNAME .ENDM ;FTYPDF ; ; GENERATE GCML ERROR MESSAGES FOR THIS TASK ; .MACRO TMSGDF,TSK,PNAME .PSECT $PDATA .EVEN .NLIST BEX GEBIFM: .ASCII <15>\TSK -- INDIRECT COMMAND SYNTAX ERROR\ GEBIFL=.-GEBIFM GEMDEM: .ASCII <15>\TSK -- INDIRECT FILE DEPTH EXCEEDED\ GEMDEL=.-GEMDEM GERBGM: .ASCII <15>\TSK -- COMMAND LINE TOO LONG\ GERBGL=.-GERBGM GEIORM: .ASCII <15>\TSK -- COMMAND I/O ERROR\ GEIORL=.-GEIORM GEOPRM: .ASCII <15>\TSK -- COMMAND FILE OPEN ERROR\ GEOPRL=.-GEOPRM .EVEN .PSECT $IDATA GEERSM: .WORD GEBIFM .WORD GEMDEM .WORD GERBGM .WORD GEIORM .WORD GEOPRM GEERSL: .WORD GEBIFL .WORD GEMDEL .WORD GERBGL .WORD GEIORL .WORD GEOPRL .LIST BEX OLDPST PNAME .ENDM ;TMSGDF ; ; GENERATE COMMAND SYNTAX ERROR MESSAGE ; .MACRO CERRDF,TSK,PNAME .PSECT $IDATA .NLIST BEX CS1MS: .ASCII <15>\TSK -- COMMAND SYNTAX ERROR\<15><12> CS1MSL=.-CS1MS .LIST BEX CS1BF: .BLKB CMDSZ .EVEN CS1QIO: QIOW$ IO.WVB,TILUN,QIOEFG,,,, OLDPST PNAME .ENDM ;CERRDF