; FORTRAN IV-PLUS COMPILER TASK BUILD FILE ; ; FORTRAN IV-PLUS VERSION Y00-10 ; ; SUMMARY OF SYSTEM PARAMETERS: ; USES SYSTEM RESIDENT LIBRARY "SYSRES" ; 512 WORD STACK ; 30 FRAMES IN EXPRESSION ANALYZER STACK ; 42 COMMON BLOCKS, MAXIMUM ; 12 RESIDENT PAGES FOR WORKFILE SYSTEM ; [11,1]F4P/CP/-FP,LP:=[11,36]F4PBLD.ODL/MP ; OPTION INPUT ; TASK =...F4P UIC =[200,200] LIBR =SYSRES:RO POOL =40 ; SP STACK OF 512 WORDS ; STACK MUST NEVER BE LESS THAN 384 WORDS ; STACK =512 ; F4+ CO .ROOT BASE-*(CMD,P1,P2,P3,P4,P5,DMP) BASE: .FCTR BASE1-BASE2-BASE3-BASE4 BASE1: .FCTR [11,36]FORTRN-[11,36]TABF45-[11,36]WF00 -[11,36]WFQIO BASE2: .FCTR [11,36]WFBLK1-[11,36]IOBLKS-[11,36]BINCOM BASE3: .FCTR [11,36]LSTIO -[11,36]OUTREC-[11,36]BLILIB-[11,36]RADX50 BASE4: .FCTR [11,36]ERRTRP-[11,36]SEGBR0 CMD: .FCTR CMD1-CMD2 CMD1: .FCTR [11,36]COMAND-[11,36]GCML45-[11,36]FTINI CMD2: .FCTR [11,36]WFINI -[11,36]WFOPEN P1: .FCTR P11-P12-P13-P14-P15-*(P1A,P1B,P1C) P1A: .FCTR [11,36]DECLAR,[11 ; BLIS11 V.74206 Thursday 26-Sep-74 17:15.32 FORTRN.B11 Page 1 ;00100 0001 MODULE FORTRN(MAIN,IDENT="000017")= ;00200 0002 BEGIN ;00300 0003 ;00400 0004 ! COPYRIGHT 1973,1974 ;00500 0005 ! DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;00600 0006 ! ;00700 0007 ! DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ;00800 0008 ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;00900 0009 ! ;01000 0010 ! R. GROVE ;01100 0011 ;01200 0012 ! MODULE FUNCTION ;01300 0013 ! FORTRAN IV-P .TITLE TABF45 .IDENT /000044/ ; ; COPYRIGHT 1973,1974 DIGITAL EQUIPMENT CORP. ; MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; PDP-11 FORTRAN IV-PLUS ; LANGUAGE-SPECIFIC IMPURE STORAGE AREA ; .NLIST BEX .SBTTL PSECT USAGE ; THIS MODULE DEFINES THE FOLLOWING CONTROL SECTIONS: ; CLEAR0 BASE OF CLEAR1 ; CLEAR1 DATA AREA WHICH IS ZEROED ; BEFORE COMPILATION OF EACH PROGRAM UNIT. ; CLEAR2 TO MPILER LOGICAL UNIT ASSIGNMENTS ; 1 COMMAND INPUT/OUTPUT ; 2 NOT USED ; 3 .OBJ OUTPUT ; 4 .LST OUTPUT ; 5 .FTN INPUT ; ; 6 COMPILER WORKFILE ; CAN BE REASSIGNED TO SWAPPING DISK IF AVAILABLE ; DISK MUST BE MOUNTED AS WRITABLE FILES-11 VOLUME, ; BUT THE WORKFILE DOES NOT REQUIRE A UFD ON THE VOLUME. ; ; 7 COMPILER MESSAGE FILE ; 8 MO.... ; UNITS =8 ASG =CI0:1,MO:8 ASG =SY0:6 ; RESIDENT MEMORY FOR WORKFILE VIRTUAL MEMORY SYSTEM ; THE FOLLOWING DEFINITION PROVIDES 12 PAG ,36]DCLDAT P1B: .FCTR [11,36]SYNOPN,[11,36]SYNFMT,[11,36]SYNTAX P1C: .FCTR [11,36]ERRPR1-[11,36]GETMSG P11: .FCTR [11,36]LEXSY0-[11,36]CLASFY-[11,36]GETSTM P12: .FCTR [11,36]LEXAN0-[11,36]ENTER0-[11,36]CVFLOA P13: .FCTR [11,36]CVINT -[11,36]CONCVT-[11,36]I4PACK P14: .FCTR [11,36]EXPDRV-[11,36]EXPUTI-[11,36]EXPRED P15: .FCTR [11,36]EXPSPC-[11,36]EXPPDF P2: .FCTR P20-P21-P22-P23-P24 P20: .FCTR [11,36]ALOC00-[11,36]ALOC01-[11,36]ALOC02-[11,36]ALOC03 P21: .FCTR [11,36]BINSET-[11,36]CONCVT-[11,36]I LUS RESIDENT MAIN CONTROL PROGRAM ;01400 0014 ;01500 0015 FORWARD ;01600 0016 DMPCTL; ! TRACE-DUMP CONTROL ROUTINE ; BLIS11 V.74206 Thursday 26-Sep-74 17:15.37 FORTRN.B11 Page 2 ; 0017 ;00100 0018 REQUIRE STDMAC.BEG; ; 0019 ! STDMAC.BEG - WIDELY USED STANDARD MACROS ; 0020 ! ; 0030 SWITCHES LIST; SWITCHES LIST; ; 0031 ! VERSION 000005 ; 0032 ! LAST MODIFIED 05/13/74 RBG ; 0071 SWITCHES LIST; SWITCHES LIST; ; 0072 ! STDMAC.BEG LAST LINE ; 00 P OF CLEAR1 ; CLEAR2 BASE OF CLEAR 3 ; CLEAR3 DATA AREA WHICH IS ZEROED ; BEFORE COMPILATION OF EACH SOURCE LINE. ; THIS SECTION IS ALSO USED AS PROGRAM-UNIT ; IMPURE STORAGE BY THE "OUTBIN" MODULES. ; CLEAR4 TOP OF CLEAR 3 ; FRCOR0 BASE OF FRCOR1 ; FRCOR1 DYNAMIC STORAGE AREA, DEFINED AT TASK-BUILD TIME ; MEMORY FOR SOURCE LINE BUFFER AND THE ; WORK FILE SYSTEM IS ALLOCATED FROM THIS AREA. ; FRCOR2 TOP OF FRCOR1 ; STACK1 EXPRESSION ANALYZER PUSHDOWN STACK ; STACK2 END OF STACK1 ES ; EXTSCT =FRCOR1:14000 ; F4+ USES CONTROL SECTION "STACK1" FOR: ; EXPRESSION ANALYZER STACK DURING PASS 1 ; NAMED COMMON BLOCK DEFINITIONS IN LATER PASSES ; ; AS DISTRIBUTED, STACK1 IS 240(10) WORDS, PROVIDING: ; 240/8 = 30 EXPRESSION ANALYZER STACK FRAMES ; 240/5 = 48 CONTROL SECTIONS ; UP TO 6 CONTROL SECTIONS MAY BE USED FOR ; COMPILER-GENERATED CODE AND DATA, LEAVING 42 COMMON BLOCKS. ; ADDITIONAL SPACE CAN BE ALLOCATED BY EXTENDING STACK1: ; ;EXTSCT =STACK1:0 ; DEFINE PRIN4PACK P22: .FCTR [11,36]OUTBIN-[11,36]BINADR-[11,36]BINLST P23: .FCTR [11,36]BIN1TB-[11,36]BIN2TB-[11,36]BINGEN P24: .FCTR [11,36]ERRPR2-[11,36]GETMSG P3: .FCTR P30-P31-P32 P30: .FCTR [11,36]OPTDRV-[11,36]OPTREE-[11,36]OPTDLY-[11,36]OPTCSE P31: .FCTR [11,36]OPTDLP-[11,36]OPTIOP-[11,36]OPTUTI-[11,36]OPTTAB P32: .FCTR [11,36]OPTTMP-[11,36]BIN2TB P4: .FCTR P40-P41-P42 P40: .FCTR [11,36]CODDRV-[11,36]CODEXP-[11,36]CODATT-[11,36]CODEMI P41: .FCTR [11,36]CODTNB-[11,36]CODTAB-[11,36]CODPRE-[11,36]C73 ;00200 0074 REQUIRE STDSTR.BEG; ; 0075 ! STDSTR.BEG - WIDELY USED STANDARD STRUCTURES ; 0076 ! ; 0086 SWITCHES LIST; SWITCHES LIST; ; 0087 ! VERSION 000003 ; 0088 ! LAST MODIFIED 2/28/74 RBG ; 0102 SWITCHES LIST; SWITCHES LIST; ; 0103 ! STDSTR.BEG LAST LINE ; 0104 ;00300 0105 REQUIRE SIGVAL.BEG; ; 0106 ! SIGVAL.BEG - SIGNALLED VALUES ; 0107 ! ; 0117 SWITCHES LIST; SWITCHES LIST; ; 0118 ! VERSION 000003 ; 0119 ! LAST MODIF .SBTTL PSECT DEFINITIONS .PSECT CLEAR0 LOCLR1:: .PSECT CLEAR1 .PSECT CLEAR2 HICLR1:: LOCLR3:: .CSECT CLEAR3 .PSECT CLEAR4 MXCLR3:: .PSECT FRCOR0 FREBAS: .PSECT FRCOR1 ;ALL STORAGE IS ALLOCATED BY "EXTSCT" .PSECT FRCOR2 FRETOP: .PSECT STACK1 LSTACK::.BLKW <8.*30.> ;30 8-WORD STACK FRAMES .PSECT STACK2 LLIMIT:: ;UPPER LIMIT OF EXPRESSION STACK .BLKW 8. ;ONE EXTRA STACK FRAME FOR SELF-PROTECTION ;SOME WORDS MAY BE USED BY COMPILER .SBTTL FREE STORAGE TER WIDTH AND NUMBER OF SOURCE LINES PER LISTING PAGE ; F4+ DEFAULT VALUES ARE: ; 53 SOURCE LINES PER PAGE (PLUS 5 LINES OF HEADING) 53(10)=63(8) ; 80 COLUMN LIME PRINTER 80(10)=120(8) ; GBLPAT =FORTRN:LPLINE:65 GBLPAT =FORTRN:LPWDTH:120 / ODLOC P42: .FCTR [11,36]CODMOV-[11,36]CODUTI-[11,36]BIN2TB P5: .FCTR P50-P51-P52-P53 P50: .FCTR [11,36]FIN0AL-[11,36]FIN1AL-[11,36]FIN2AL-[11,36]FIN3AL P51: .FCTR [11,36]OUTBIN-[11,36]BINADR-[11,36]BINLST P52: .FCTR [11,36]BIN1TB-[11,36]BIN2TB-[11,36]BINGEN P53: .FCTR [11,36]FTFIN0-[11,36]BINEND-[11,36]SYMMAP DMP: .FCTR [11,36]FTDMP -[11,36]WFDEBG .END IED 08/16/74 RBG ; 0128 SWITCHES LIST; SWITCHES LIST; ; 0129 ! SIGVAL.BEG - LAST LINE ; 0130 ; BLIS11 V.74206 Thursday 26-Sep-74 17:15.42 FORTRN.B11 Page 3 ; 0131 ;00100 0132 PSECT ;00200 0133 CODE=" ", GLOBAL="$GBL", OWN="$OWN"; ;00300 0134 ;00400 0135 EXTERNAL ;00500 0136 COMAND, ! COMMAND DECODER ;00600 0137 COMEND, ! END OF COMPILATION (COMMAND-LEVEL) ;00700 0138 FTDUMP, ! BETWEEN-PHASES DUMP ROUTINE ;00800 0139 FTFIN, ! PER-COMPILATION CLEANUP ;00900 0POINTERS FOR DYNAMICALLY ALLOCATED AREA .PSECT LOWCOR::.WORD FREBAS HGHCOR::.WORD FRETOP STKLIM::.BLKW ;(SP) STACK LOWER LIMIT VALUE .SBTTL GLOBAL SWITCHES AND FLAGS .PSECT ; COMMAND-LEVEL SWITCHES ; ARYCHK::.BLKW ;NON-ZERO(LOW BIT=1) FOR SUBSCRIPT CHECKING CONCNT::.BLKW ;CONTINUATION LINES PERMITTED DEBGSW::.BLKW ;NON-ZERO(LOW BIT=1) MEANS INCLUDE DEBUG LINES LA000:: .WORD 0 ;NON-ZERO MEANS DON'T REINITIALIZE OPTIONS INT4SW::.BLKW ;NON-ZERO(LOW BIT=1) MEANS INTEGER*4 I .TITLE COMAND DECODER - F4+ .IDENT /000030/ ; ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; R. GROVE ; P. KNUEVEN .MCALL FDOFF$,FCSBT$ FDOFF$ DEF$L ;DEFINE FCS OFFSETS FCSBT$ DEF$L ;DEFINE FCS BITS ; .MCALL OPEN$R,OPNS$R,OPEN$W,CLOSE$,DELET$,FDOP$R,NMBLK$ .MCALL GCML$,GTIM$S,GTSK$S,SVTK$C,EXIT$S,PRINT$,DIR$,CALL,RETURN .MCALL CSI$1,CSI .TITLE ERRTRP .IDENT /0018/; DK,RG,PJK ; COPYRIGHT 1971,1972,1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; FORTRAN COMPILER ERROR PROCESSOR ; .MCALL MOUT$,MOWA$S,DIR$,EXIT$S FATALS=400-16. ;400-(LARGEST FATAL ERROR NUMBER) ; ; THE USUAL CALL TO THE ERROR ROUTINE IS "TRAP N". ; THE EMT ENTRY IS USED ONLY FOR FIELDING EMT 376 WHICH MAY BE ; ISSUED 140 FTINIT, ! PER-COMPILATION INITIALIZATION ;01000 0141 FTONCE, ! ONCE-ONLY INITIALIZATION ;01100 0142 ;01200 0143 LEXSYN, ! SYNTAX ROUTINES ;01300 0144 ALLOCATE, ! STORAGE ALLOCATION MODULE ;01400 0145 OPTIMIZE, ! TRIPLE OPTIMIZATION ;01500 0146 CODGEN, ! CODE GENERATION MODULE ;01600 0147 FINAL; ! JMP/BR AND INSTRUCTION PEEPHOLE ;01700 0148 ;01800 0149 EXTERNAL ;01900 0150 CURLIN, ! SOURCE BUFFER FLAG ;02000 0151 FATERR, ! ERROR SEVERITY LEVEL ;02100 0152 LSTVAL; ! SOURCNT4TP::.BLKW ;INT*4 OR INT*2 FOR INTEGER DEFAULT LSTVAL::.BLKW ;LISTING CONTROL: ; 0 - MINIMAL LISTING ; 1 - SOURCE LIST ONLY ; 2 - SOURCE, STORAGE MAP LISTING ; 3 - SOURCE, STORAGE MAP, MACHINE CODE LISTING SEQSUP::.BLKW ;TRACEBACK CONTROL: ; 0 - NONE ; 1 - ENTRY NAMES ; 3 - ENTRY NAMES, BASIC BLOCKS ; 7 - ENTRY NAMES, ALL SOURCE LINES SPOOL:: .BLKW ;NON-ZERO(LOW BIT=1) MEANS SPOOL .LST FILE ; SWITCHES FOR COMPILER-DEBUGGING ; OPSWCH::.WORD 2+.-. CGSWCH:$2,CSI$ND,CSI$SW,CSI$SV,MOUT$,MOWA$S .NLIST BEX .PSECT ; .MACRO CMDERR .MSG MOV .MSG,R0; JSR PC,PUTCMG; .ENDM CMDERR ; .MACRO OPENCH .CHA,.SWLST MOV .CHA,R1 MOV .SWLST,R2 JSR PC,OPNCHA .ENDM OPENCH ; .MACRO SAVR1 JSR R5,.SAVR1 .ENDM SAVR1 TAB =11 LF =12 .SBTTL ONCE-ONLY INITIALIZATION ROUTINES .SBTTL OPNMSG - OPEN MESSAGE TEXT FILE OPNMSG::OPNS$R #MSGFDB ;OPEN (SHARED) MESSAGE TEXT FILE RETURN ;IGNORE OPEN ERRORS ON THIS FILE .SBTTL SETSST - SST VECTBY THE AUTOLOAD OVERLAY HANDLER. ; EMT 376 IS EQUIVALENT TO TRAP -2 (FATAL 2). ; THE FOLLOWING RANGES OF ERROR NUMBERS ARE DISTINGUISHED: ; ; 1 : 127 STANDARD SYNTAX ERROR ; RETURN IS VIA RTI ; ; 128: 239 EXPRESSION ANALYZER SYNTAX ERROR ; ACTUAL ERROR NUMBER IS N-128 ; RETURN IS VIA "SIGNAL SIGEXPABOR" ; ; 240: 255 FATAL ERROR ; ACTUAL FATAL ERROR NUMBER IS 256-N ; RETURN IS EITHER "SIGNAL SIGRECOVER" ; OR IMMEDIATE EXIT FROM COMPILER IF REALLY FATAL .SBTTL TRPLOC - TRAP AE AND DEBUG LISTING FLAGS ;02200 0153 ;02300 0154 COMMENT ! DMPCTL ;02400 0155 ! ;02500 0156 ! FUNCTION ;02600 0157 ! CALL DUMP OVERLAY IF ANY DEBUG-DUMP FLAGS ARE SET ;02700 0158 ! INPUTS ;02800 0159 ! LSTVAL - GLOBAL LISTING CONTROL VARIABLE ;02900 0160 ! OUTPUTS ;03000 0161 ! NONE ;03100 0162 ! ;03200 0163 ROUTINE DMPCTL= ;03300 0164 BEGIN ;03400 0165 IF .LSTVAL<2,13> NEQ 0 ;03500 0166 THEN FTDUMP(); ;03600 0167 NOVALUE ;03700 0168 END; ; BLIS11 V.74206 Thursday 26-S:.WORD 0 FISWCH::.WORD 0 SEGNUM::.BLKW ;CONTAINS NUMBER OF CURRENT COMPILER PHASE .SBTTL INPUT BUFFER VARIABLES .PSECT CURLIN::.BLKW ;SOURCE INPUT BUFFER FLAG ; -1 EOF ENCOUNTERED ON SOURCE FILE ; 0 NO RECORD IN SOURCE BUFFER ; >0 BYTE COUNT FOR RECORD IN BUFFER SRCLIN::.BLKW 2 ;STRING DESCRIPTOR FOR SOURCE LINE .SBTTL LISTING CONTROL VARIABLES PAGNUM::.BLKW ;LISTING PAGE NUMBER LPLINE::.WORD 55. ;SOURCE LINES PER LISTING PAGE LPWDTH::.WORD 132. ;WIDTH OF LISTING DOR SETUP SETSST::SVTK$C SSTVEC,7 ;SET UP RSX-11D TRAP VECTOR RETURN .SBTTL SETCOR - SETUP DYNAMIC MEMORY POINTERS SETCOR:: SAVR1 MOV TSKLIM,STKLIM ;SET STACK LOWER LIMIT VALUE ADD #64.,STKLIM ;64 BYTES OF YELLOW ZONE CMP LOWCOR,HGHCOR ;IF DYNAMIC POINTERS ARE NOT EQUAL BNE 10$ ;AREA WAS ESTABLISHED AT TKB TIME GTSK$S #TMPBUF ;GET TASK PARAMETERS MOV TMPBUF+26.,R0 ;TASK DYNAMIC SIZE IN BYTES BIC #1,R0 ;ROUNDED DOWN ADD TSKLIM,R0 ;BASE ADDRESS OF TASK MOV R0,HGHCOR ;HIND SIGNAL/RETURN .SBTTL EMTLOC - FATAL OVERLAY LOADING ERROR ; GLOBAL ROUTINE EMT EMTLOC= ; GLOBAL ROUTINE TRAP TRPLOC= ; ; FOR NON-FATAL ERRORS, THE ERROR NUMBER AND CURRENT ; SOURCE STRING POINTER ARE STORED IN A TABLE FOR LATER PROCESSING. ; THE ERROR TABLE IS NORMALLY PROCESSED AT THE END OF EACH ; FORTRAN SOURCE STATEMENT BY THE "ERR1PRT" ROUTINE. ; ; IF THE ERROR ID IS GREATER THAN OR EQUAL TO "#FATALS" ; THE ERROR IS FATAL TO THE COMPILATION. THE FATAL ; MESSAGE ID ISep-74 17:15.43 FORTRN.B11 Page 4 ; 0169 .TITLE FORTRN .IDENT /000017/ .PSECT R$0=%0 R$1=%1 R$2=%2 R$3=%3 R$4=%4 R$5=%5 SP=%6 PC=%7 DMPCTL: BIT @#LSTVAL,#77774 BEQ L$3 JMP FTDUMP L$3: RTS PC ; ROUTINE SIZE: 7 ;00100 0170 COMMENT ! FORTRAN IV-PLUS MAIN PROGRAM ;00200 0171 ! ;00300 0172 ! RESIDENT CONTROL CODE FOR FORTRAN IV-PLUS ;00400 0173 ! EXECUTION OF THE COMPILER BEGINS HERE ;00500 0174 ! THE COMPILER EXITS THROUGH COMAND WHEN COMMAND EOF O EVICE .PSECT CLEAR1 LINCT:: .BLKW ;COUNT OF LINES REMAINING ON PAGE .SBTTL ERROR DIAGNOSTIC INFORMATION .PSECT ERRCNT::.BLKW ;ERROR COUNT FOR COMPILATION FATERR::.BLKW ;FATAL ERROR FLAG FOR COMPILATION ; <0,8>: ERROR IN CURRENT PROGRAM UNIT ; <8,8>: CUMULATIVE ERROR FLAG FOR FILE .PSECT CLEAR1 ERRNDX::.BLKW ;INDEX TO CURRENT DIAG. TABLE ENTRY .PSECT ; ; DIAGNOSTIC TABLE ; ;WORD 1 - CONTENTS OF "SRCPTR" AT TIME OF ERROR ;WORD 2 - ERROR NUMBER ; ONLY TEN ENTRIES ARE!GHEST ADDRESS + 1 MOV TSKLIM+2,LOWCOR ;BASE ADDRESS OF DYNAMIC AREA CMP LOWCOR,HGHCOR BLO 10$ ;SOME FINITE AMOUNT IS AVAILABLE TRAP 366 ;FATAL(10) - NO DYNAMIC SPACE 10$: RETURN .SBTTL .SBTTL COMAND - GET COMMAND LINE COMAND::SAVR1 FORT02: CALL RLSALL ;CLOSE ANY CURRENTLY OPEN FILES CALL REINIT ;REINITIALIZE SWITCHES ; GET A COMMAND LINE AND CHECK COMMAND SYNTAX ; EXIT ON END-OF-FILE FROM CMI FORT04: MOV #CMLBLK,R4 ;CML CONTROL BLOCK MOV #CSIBLK,R5 ;CSI CONTROL BLOCK GCM" -N. THE FATAL ERROR HANDLER (FATAL) ; ISSUES A FATAL ERROR MESSAGE VIA MO, ABORTS THE ; COMPILATION AND RESTARTS THE COMPILER. ; EMTLOC:: TRPLOC::ASR (SP) ;GET TRAP ID CMP (SP),#FATALS ;IS THIS A FATAL ERROR? BGE FATAL ;YES TSTB (SP) ;TEST WHETHER RETURN IS VIA SIGNAL BPL 1$ ;NO MOV #$SIGNL,2(SP) ;RTI WILL EFFECT SIGNAL BICB #200,(SP) ;MAP ERROR NUMBER DOWN 1$: MOV ERRNDX,R0 ;FIND NEXT AVAILABLE TABLE ENTRY ADD #ERRTAB,R0 ;POINTER TO NEXT ENTRY CMP R0,#ERREND ;IS TABLE FU#CCURS ;00600 0175 ! ;00700 0176 MACRO SRCEOF= (.CURLIN LSS 0)$; ;00800 0177 ;00900 0178 FTONCE(); ! ONCE-ONLY COMPILER INITIALIZATION ;01000 0179 ;01100 0180 REPEAT ;01200 0181 BEGIN ;01300 0182 ENABLE ;01400 0183 SIGRECOVER: 0; ! RECOVERABLE FATAL ERROR ;01500 0184 OTHERWISE : FATAL(10) ! SOME ERRANT SIGNAL ;01600 0185 ELBANE; ;01700 0186 ;01800 0187 COMAND(); ;01900 0188 ;02000 0189 DO ;02100 0190 BEGIN ;02200 0191 IF ;02300 0192 (FTINIT(); LEXSYN() $ ALLOWED HERE ; ERRTAB::.BLKW 20. ;ROOM FOR 10 ENTRIES ERREND:: .SBTTL PROGRAM UNIT VARIABLES .PSECT MODIDN::.BLKW 2 ;MODULE DATE IN RAD50 FOR .IDENT MODNAM::.BLKW 2 ;MODULE NAME IN RAD50 FOR .TITLE .PSECT CLEAR1 PGMTYP::.BLKW ;TYPE OF PROGRAM UNIT (ORDER-DEPENDENT VALUES) ; 0 = MAIN, 1 = BLOCK DATA ; 2 = SUBR, 3 = FUNCTION FNNAME::.BLKW ;LIST HEAD OF FN NAME SYMBOL TBL CHAIN FNTYPE::.BLKW ;MAX DATATYPE OF ALL FN NAMES SET BY ALOCAT FNXRTS::.BLKW ;LABEL WFA FOR CROSS-%L$ R4 ;GET A COMMAND LINE BCS CMLERR ;ALL IS NOT WELL - INVESTIGATE CSI$1 R5,G.CMLD+2(R4),G.CMLD(R4) MOV C.CMLD(R5),G.CMLD(R4) ;SET COMPRESSED LENGTH BEQ FORT04 ;NULL LINE - GET ANOTHER BCC FORT06 ;SYNTACTICALLY CORRECT ; COMMAND SYNTAX ERROR ; PUT OUT 'SYNTAX ERROR' AND OFFENDING SEGMENT OF STRING CMDERR #CSIM1 BR FORT04 ;GET ANOTHER COMMAND ; ; "GET COMMAND LINE" ERROR PROCESSING CMLERR: MOVB G.ERR(R4),R0 ;GCML$ ERROR CODE CMPB #GE.EOF,R0 ;EOF ? BEQ QUIT ;YES - EXIT QUIETLY &LL BHIS 2$ ;BRANCH IF YES MOV SRCPTR,(R0)+ ;ELSE, PUT CURRENT SRCPTR IN TABLE MOV (SP),(R0)+ ;PUT DIAGNOSTIC NUMBER IN TABLE ADD #4,ERRNDX ;UPDATE TABLE INDEX 2$: TST (SP)+ ;GET RID OF PARAM SUPPLIED BY EXEC MOV #2,R0 ;SIGNAL SIGEXPABOR RTI .SBTTL FATAL ERROR PROCESSING ; THE FOLLOWING DEFINITIONS DEFINE THE RECOVERABLE FATAL ERRORS ; A LIST OF ALL FATAL ERRORS IS IN F4PCMX.MSG. F0116= 023640 ; 00100111 10100000 FATAL 01-16 FATAL: MOV (SP)+,R0 ;GET FATAL ID INTO R0 N') ; BLIS11 V.74206 Thursday 26-Sep-74 17:17.00 FORTRN.B11 Page 4-1 ;02400 0193 THEN ;02500 0194 BEGIN ;02600 0195 DMPCTL(); ;02700 0196 ALLOCATE(); DMPCTL(); ;02800 0197 ;02900 0198 IF .FATERR<0,8> EQL 0 THEN ;03000 0199 BEGIN ;03100 0200 OPTIMIZE(); DMPCTL(); ;03200 0201 CODGEN(); ;03300 0202 FINAL(); DMPCTL(); ;03400 0203 END; ;03500 0204 ;03600 0205 FTFIN(); ;03700 0206 END; ;03800 0207 END ;03900 0208 ;04000 0209 UNTIL SRCEO(JUMPING RTS CPYOFF::.BLKW ;NEXT OFFSET IN COPY-VECTOR CPYAL2::.BLKW ;COPY VECTOR OFFSET IN $IDATA PSECT ENTCNT::.BLKW ;COUNT OF ENTRY STATEMENTS FMLCNT::.BLKW ;COUNT OF FORMAL PARAMETERS SEQNO:: .BLKW ;SOURCE STATEMENT SEQUENCE NUMBER STMPHA::.BLKW ;STATEMENT PHASE FOR STMT ORDER CHECKS EQVHED::.BLKW ;LIST HEAD FOR EQUIVALENCE GROUP CHAIN LABWFA::.BLKW ;WORK FILE ADDRESS OF LABEL TABLE PAGE SYMREF::.BLKW 20. ;SYMBOL TABLE HASH TABLE ;CONTAINS WORK FILE ADDRESSES TO SYMBOL ) CMPB #GE.IOR,R0 ;I/O ERROR ? BEQ CMLER2 ;ISSUE MESSAGE AND QUIT CMPB #GE.OPR,R0 BNE 4$ CMDERR #CMLM3 ;CAN'T OPEN @ FILE BR FORT04 ;TRY AGAIN 4$: CMPB #GE.BIF,R0 BNE 5$ CMDERR #CMLM4 ;BAD @ FILE NAME BR FORT04 5$: CMPB #GE.MDE,R0 ;MUST BE MAX DEPTH ? BNE CMLER2 ;CALL IT AN I/O ERROR CMDERR #CMLM5 ;@ FILE NESTING EXCEEDED BR FORT04 ; CMLER2: CLR G.CMLD(R4) ;INDICATE NO COMMAND LINE CMDERR #CMLM2 ;I/O ERROR ON CMI - FATAL ; ; EOF ON COMMAND INPUT, OR OTHER CIRCUMSTANCES*EGB R0 MOV R0,MOPRM ;MOVE ID TO MO PARAMETER BLOCK MOV R0,MOUT+M.ONUM ;SPECIFY FILE RECORD NUMBER DIR$ #MOUT ;CALL MO TASK BCS 3$ ;SKIP WAIT IF ANY PROBLEM MOWA$S ;WAIT FOR MO TO FINISH 3$: HLTLOC:: ;GLOBAL-PATCHED TO "HALT" FOR DEBUGGING MOV #F0116,R2 ;CHECK IF RECOVERABLE FATAL ERROR ASH R0,R2 ;GET RECOVERY FLAG FOR ERROR BCC 5$ ;NOT RECOVERABLE ; FORTRAN IV-PLUS USES SIGNAL TO RETURN TO TOP CONTROL LEVEL MOV #3,R0 ;SIGNAL A RECOVERABLE ERROR JMP $SIGNL 5$: EXIT$S +F; ;04100 0210 ;04200 0211 COMEND(); ;04300 0212 ;04400 0213 END; ;04500 0214 ;04600 0215 END ELUDOM FORTRN: SUB #6,SP JSR PC,FTONCE L$8: MOV #6,R$0 JSR PC,$ENABL .WORD L$10-L$9 L$9: CMP SIGVAL,#3 BEQ L$8 TRAP 366 BR L$8 L$10: JSR PC,COMAND L$12: JSR PC,FTINIT JSR PC,LEXSYN ROR R$0 BHIS L$13 JSR PC,DMPCTL JSR PC,ALLOCATE JSR PC,DMPCTL TSTB @#FATERR BNE L$16 JSR PC,OPTIMIZE JSR PC,DMPCTL JSR PC,CODGEN JSR PC,FINAL JSR PC,DMPCTL L$16: JSR PC,NAME TABLE PDFBLK==.-1 ;RELATIVE BLOCK -> WF BLOCK MAPPING .BLKB 4 ;FOR PROCESSOR-DEFINED FUNCTIONS DATA SET DOLABL::.BLKW ;LABEL IN DO STATEMENT DOSTKP::.BLKW ;STACK INDEX FOR DO STACK DOLIMIT==20. ;SIZE OF STACK IN WORDS (2 PER FRAME) DOSTACK::.BLKW 20. ;PUSH DOWN STACK FOR OPEN DO'S ; FPP STATUS/MODE SETTINGS, ENCODED AS: ; <0,1> FLOATING MODE IS F ; <1,1> FLOATING MODE IS D ; FLOATING MODE IS UNDEFINED IF BOTH 0 ; <8,1> INTEGER MODE IS I ; <9,1> INTEGER MODE IS L ; INTEG- ; EXIT FROM THE COMPILER QUIT: CALL RLSALL ;CLOSE ANY OPEN FILES CLOSE$ #CMLBLK ;CLOSE CMI DATA SET CLOSE$ #MSGFDB ;CLOSE MSG TEXT DATA SET CLOSE$ #WRKFDB ;CLOSE AND DELETE WORK FILE EXIT$S ;EXIT TO THE EXEC .SBTTL - FILE OPENING FORT06: MOV #CSIBLK,R5 ;POINT TO CSI BLOCK ; OPEN OBJECT FILE MOVB #CS.OUT,C.TYPR(R5) ;CSI2 OUTPUT REQUEST OPENCH #OBJCHA,#OBJSWT ;OPEN THE .OBJ CHANNEL BCS XFORT2 ;ERROR, TRY AGAIN BITB #CS.MOR,C.STAT(R5) BEQ 5$ ;NO MORE OUTPUT ; OPEN LI ;SUPER-FATAL ERROR - DIE! ; MESSAGE OUTPUT (MO) TASK PARAMETERS MOUT: MOUT$ MOSTR,MOPRM,0,CONT,SY$STM,,,,8. MOPRM: .BLKW 1 ;PARAMETER BLOCK MOSTR: .WORD MOFLN,MOFMT ;STRING DESCRIPTOR OF FORMAT MOFMT: .ASCII ^SY:[1,2]F4PCMX.MSG^ ;FORMAT STRING MOFLN=.-MOFMT ;FORMAT STRING LENGTH .EVEN .END /,FTFIN L$13: TST @#CURLIN ; BLIS11 V.74206 Thursday 26-Sep-74 17:17.07 FORTRN.B11 Page 4-2 BGE L$12 JSR PC,COMEND MOV @SIGREG,SIGREG BR L$8 ; ROUTINE SIZE: 53 .GLOBL FTDUMP .GLOBL CURLIN .GLOBL FTONCE .GLOBL CODGEN .GLOBL LEXSYN .GLOBL COMAND .GLOBL FTINIT .GLOBL FATERR .GLOBL COMEND .GLOBL LSTVAL .GLOBL OPTIMIZE .GLOBL FINAL .GLOBL FTFIN .GLOBL ALLOCATE .GLOBL $ENABL .GLOBL $SIGN1 .GLOBL SIGREG .GLOBL SIGVAL ; Size: 60+0 ; Run Time: 3 Seconds0ER MODE IS UNDEFINED IF BOTH 0 ; FPPDEF::.BLKW ;FPP DEFAULT MODE FOR EACH BLOCK FPPCUR::.BLKW ;FPP CURRENT MODE SCNCON::.BLKW ;NON-ZERO => SCAN CONDS AFTER CODE GENERATION .SBTTL GETSTM AND LEXAN VARIABLES .CSECT CLEAR3 STLABL::.BLKW 2 ;STMT NUMBER IN RAD50 ;FIRST WORD 0 IF NO STMT NUMBER STLWFA::.BLKW ;WFA OF SYMBOL TABLE ENTRY FOR STLABL STMTYP::.BLKW ;STATEMENT TYPE CODE FROM CLASFY() STMSTP::.BLKW ;STATEMENT SUB-TYPE CODE LEXTYP::.BLKW ;LEXICAL ITEM TYPE LEXVAL::.BLKW 41STING FILE OPENCH #LSTCHA,#LSTSWT ;OPEN THE .LST CHANNEL BCS CSIERR ;MUST DELETE .OBJ FILE BITB #CS.MOR,C.STAT(R5) BNE CSIER5 ;MORE OUTPUT - ERROR ; OPEN SOURCE FILE 5$: MOVB #CS.INP,C.TYPR(R5) ;CSI2 INPUT REQUEST OPENCH #SRCCHA,#SRCSWT ;OPEN THE SOURCE CHANNEL BCS CSIERR ;DELETE OPEN .OBJ, .LST FILES BITB #CS.MOR,C.STAT(R5) BNE CSIER4 ;MORE INPUT - ERROR BIT #TRMSK,C.MKW1(R5) BEQ 6$ CALL TRDECD ;PROCESS /TR SWITCH BCS CSIER2 ;BAD SWITCH ERROR 6$: CALL MVFNAM ;MOVE FILE N2 .TITLE GETMSGTEXT .IDENT /000004/ ;RG ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; GLOBAL ROUTINE GETMSGTEXT(N)= ; ; FUNCTION ; GET MESSAGE TEXT FROM FILE FOR ERROR N ; AND PLACE THE TEXT IN THE LISTING BUFFER. ; SETS SEVERE ERROR FLAG IF THE FIRST CHARACTER OF THE ; TEXT IS "F" OR IF NO TEXT IS FOUND FOR THE ERROR. ; INPUTS ; N - ERROR N ; Core Used: 14K ; Compilation Complete .END FORTRN 4 ;LEXICAL ITEM VALUE LEXWFA::.BLKW ;WORK FILE ADDRESS FOR LEXICAL ITEM ENTNAM::.BLKW 2 ;LAST NAME PROCESSED BY ENTER ENTWFA::.BLKW ;WFA OF NAME TABLE PAGE FOR ENTNAM ENTNTP::.BLKW ;PSEUDO-WFA OF NAME TABLE ENTRY BY SETSTE CHAR:: .BLKW ;LAST CHARACTER SCANNED TYPE:: .BLKW ;TYPE CODE FOR LAST CHARACTER SCANNED .SBTTL LEXSYN PER-STATEMENT VARIABLES .CSECT CLEAR3 TRPSEQ::.BLKW ;TRIPLE SEQUENCE NUMBER EMIFLG::.BLKW ;ROUTINE CALLED BEFORE EMITRIP IF NONZERO ASFHED::.BLKW ;LIST H5AME TO LISTING HEADER ; SWITCH VALUE POST-PROCESSING TST LSTCHA ;IF THERE IS NO LISTING FILE BNE 7$ ;THEN SET LSTVAL=0 CLR LSTVAL 7$: MOV LSTVAL,R0 ;CHECK /LI:N AND TURN ON HIGH BIT BIC #177774,R0 ;IF /LI:3 CMP R0,#3 BNE 9$ BIS #100000,LSTVAL ;CONVENIENT FLAG FOR OUTBIN 9$: CMP CONCNT,#99. ;CHECK FOR CONTINUATIONS BHI CSIER2 TST IDFLAG ;TEST IF /ID REQUESTED BEQ 15$ ;NO CMDERR #CSIM8 ;YES, USE MO TO PRINT IT 15$: TST SRCCHA ;WAS THERE A SOURCE FILE ? BEQ CSIERR ;NO - ASK6UMBER ; OUTPUTS ; VALUE - TRUE IF TEXT FOUND, FALSE OTHERWISE ; FATERR - SET TRUE IF SEVERE ERROR OR NO TEXT ; - TEXT IN BUFFER AND UPDATED BUFFER POINTER ; .MCALL FDOFF$,READ$,WAIT$,RETURN FDOFF$ DEF$L ERRNUM= 16 ;STACK OFFSET TO PARAMETER GETMSGTEXT:: JSR R5,.SAVR1 ;SAVE REGISTERS MOV #MSGFDB,R0 ;MESSAGE FILE FDB TST F.BDB(R0) ;IS THE FILE OPEN? BEQ 10$ ;NO, RETURN FALSE MOV ERRNUM(SP),R3 ;CONVERT ERROR NUMBER TO DEC R3 ;VIRTUAL BLOCK NUMBER(R2) CLR R2 ;AND BYTE WIT7 .TITLE GETSTM .IDENT /000014/ ;PJK,RG ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; .MCALL FDOFF$,QIOSY$ FDOFF$ DEF$L ;DEFINE FCS OFFSETS QIOSY$ DEF$L ;DEFINE I/O CODES .MCALL GET$,CALL,RETURN TAB = 11 FF = 14 .MACRO SAVR1 JSR R5,.SAVR1 .ENDM SAVR1 .MACRO FATAL N TRAP 256.- .ENDM FATAL ; LSTMOV PARAMETERS L.SEQ=20EEAD FOR ASF FORMAL'S CHAIN .SBTTL EXPRESSION ANALYZER VARIABLES .PSECT LSP:: .BLKW ;STACK INDEX FOR EXPRESSION STACK (LSTACK) MARKER::.BLKW ;STACK MARKER FUNCOD::.BLKW ;EXPRESSION ANALYZER FUNCTION CODE ARGUMENT SYM:: .BLKW 8. ;LEFT SUBTREE OF EXPRESSION DEL:: .BLKW ;EXPRESSION DELIMITER UNDER SCAN NULLSY::.WORD 0,0,0 ;NULL EXPRESSION SYM IOFLAG::.BLKW ;TRUE IFF IOLIST REQUIRED .CSECT CLEAR3 IOSTKP::.BLKW ;I/O STACK POINTER .SBTTL IMPLICIT TABLE .PSECT IMPTBL::.BLKB 2F FOR ONE AGAIN RETURN ;SUCCESSFUL END OF COMMAND PROCESSING ; ; SWITCH ERROR PROCESSING CSIER2: CMDERR #CSIM2 ;BAD SWITCH MESSAGE BR CSIERR CSIER4: CMDERR #CSIM4 ;TOO MANY INPUT FILES BR CSIERR CSIER5: CMDERR #CSIM5 ;TOO MANY OUTPUT FILES CSIERR: CALL DELALL ;DELETE OPEN TEMP FILES XFORT2: JMP FORT02 ;TRY IT AGAIN .SBTTL REINIT - REINITIALIZE COMPILER SWITCHES REINIT: SAVR1 TST LA000 ;IF THE LATCH SWITCH IS SET, BNE 2$ ;DON'T RESET COMPILER OPTIONS MOV CK000,ARYCHK ;MOVE GHIN BLOCK (R3) DIV #8.,R2 ;8 64-BYTE RECORDS PER BLOCK INC R2 ;FIRST VBN IS 1 MOV R2,F.BKVB+2(R0) ;MOVE VBN TO FDB SLOT MUL #64.,R3 ;COMPUTE BYTE WITHIN BLOCK MOV STKLIM,R1 ;ALLOCATE BUFFER ON STACK ADD #576.,R1 ;IF THERE IS SUFFICIENT STACK CMP R1,SP ;512 BYTES FOR BUFFER, 64 FOR FCS BHIS 10$ ;NO SPACE FOR BUFFER SUB #512.,SP ;ALLOCATE THE BUFFER READ$ R0,SP ;READ THE RECORD BCS 8$ ;RETURN FALSE ON ANY ERROR WAIT$ R0 ;WAIT FOR READ TO COMPLETE BCS 8$ ADD SP,R3 H0 ;PRINT SEQ NO IF NOT SUPPRESSED L.MOV=100000 ;MOVE REMAINDER OF LINE TO STATEMENT BUFFER .SBTTL OWN STORAGE .SBTTL .PSECT $OWN TLINE: .BYTE '. ;ASCII BUFFER FOR ACCUMULATION OF STMT LABEL .BLKB 7 .PSECT .SBTTL GETSTM - SOURCE INPUT ROUTINE ; GETSTM - READ AND LIST A FORTRAN STATEMENT ; ; READS A SINGLE FORTRAN STATEMENT INTO THE SOURCE ; STATEMENT BUFFER WHOSE STRING DESCRIPTOR IS SRCLIN. ; THE STATEMENT IS AN ASCIZ STRING. ; ; THE STATEMENT LABEL IF ANY IS STRIPPED""DDˆˆˆˆˆˆ """""@DDDDDDDDDDDDDDDD@D€ˆ """€ˆˆˆ""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆADDB Cр*dЬЊ ›р*dl^Ѓ›ъ'оїh­ /›*}ѓ*kQ­I›%tkQ­&В›""рkQ­*›œ,?TkQ­.K›œ,эykQ­3 ›š:ЫLkQ­Me›aKqkQ­OW›ПжdkQ­[g›С˜:kQ­iy›skQдx­kk›$DџџџџџџџџџџџџџџџпннннЭЬŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџI6. ;DATA TYPES FOR A-Z ;INITIALIZED TO STD FORTRAN ASSIGNMENTS .SBTTL DATA ELEMENT SIZE TABLES ; EACH OF THE FOLLOWING BYTVECT'S IS INDEXED BY DATA TYPE ; DTBPE[.DT] - SIZE OF A SINGLE ELEMENT IN BYTES ; DTWPE[.DT] - SIZE OF A SINGLE ELEMENT IN WORDS ; DTSTO[.DT] - NUMBER OF WORDS TO STORE AN ELEMENT ; AS A CONSTANT TABLE ENTRY ; NOTE THAT DTSTO CONTAINS SOME CONVENIENT "CONVENTIONAL" VALUES ; IN THE ENTRIES FOR DTCHAR AND DTHOLL. DTBPE:: .BYTE 2,1,2,4,2,4,4,8.,8. DTWPE:: .BYTJSWITCH DEFAULT VALUES MOV CO000,CONCNT ;TO APPROPRIATE RESIDENT GLOBALS MOV DE000,DEBGSW MOV I4000,INT4SW MOV LI000,LSTVAL MOV SP000,SPOOL MOV TR000,SEQSUP 2$: CLR IDFLAG ;RESET /ID SWITCH CLR CURLIN ;RESET SOURCE BUFFER EOF FLAG CLR ERRCNT ;RESET ERROR COUNT VARIABLE CLR FATERR ;RESET SEVERE ERROR FLAGS CLR PAGNUM ;RESET PAGE NUMBER LISTING VARIABLES MOV #HEDPAG,R0 CLRB (R0)+ ;RESET ASCII PAGE NUMBER IN HEADING CLRB (R0)+ CLRB (R0)+ CLRB (R0)+ RETURN .SBTTL COK;POINT TO START OF RECORD MOV #OUTBUF,R2 ;AND START OF OUTPUT BUFFER MOV #64.,R1 ;MAXIMUM BYTE COUNT 2$: MOVB (R3)+,(R2)+ BEQ 4$ ;TERMINATE ON 0 BYTE SOB R1,2$ 4$: MOV R2,OUTPTR ;UPDATE OUTPUT BUFFER POINTER ADD #512.,SP ;POP BUFFER FROM STACK MOV #1,R0 ;RETURN TRUE CMP #"I ,OUTBUF ;CHECK FOR NON-FATAL ERRORS BEQ 6$ ;ERRORS ARE FATAL UNTIL PROVED NON-FATAL CMP #"W ,OUTBUF BNE 12$ ;NOT NON-FATAL 6$: RETURN 8$: ADD #512.,SP ;POP BUFFER FROM STACK 10$: CLR R0 ;RETURN FALSE L OFF AND PLACED ; IN STLABL AS TWO WORDS OF RAD50. IF THERE IS NO LABEL ; STLABL IS ZERO (INITIALIZED BY CALLER). ; ; EMPTY LINES ARE IGNORED. ; CONTINUATION LINES ARE APPENDED PROPERLY. ; ALL LINES ARE LISTED IF LISTING WAS REQUESTED. ; ; AT BOTH ENTRY AND EXIT CURLIN CONTAINS INFORMATION ABOUT ; THE INPUT RECORD LEFT IN SRCBUF. THE VALUE OF CURLIN IS ; INTERPRETED AS FOLLOWS: ; 0 - SRCBUF IS EMPTY ; <0 - EOF HAS OCCURRED ON SOURCE INPUT CHANNEL ; >0 - CURLIN CONTAINS LENGE 1,1,1,2,1,2,2,4,4 DTSTO:: .BYTE 1,1,1,2,2,2,2,4,4,0,1,1 .EVEN .SBTTL END OF STORAGE DEFINITIONS .CSECT CLEAR3 HICLR3::.BLKW ; UPPER BOUND ON CLEAR3 USED IN PASS1 .END NMEND - END OF COMPILATION ; CLOSE OUT FILES AT END OF COMPILATION ; PRINT ERROR SUMMARY ON COMMAND DEVICE COMEND::SAVR1 CALL EOL ;SKIP LINE ON LISTING MOV CMLBLK+G.CMLD+2,-(SP) MOV CMLBLK+G.CMLD,-(SP) CALL LSTREC ;LIST THE COMMAND LINE CMP (SP)+,(SP)+ ;POP ARGUMENTS CALL RLSALL ;TURN OFF ALL CURRENT FILES ; OUTPUT THE ERROR COUNT IF ANY MOV ERRCNT,R4 ;GET ERROR COUNT BEQ 10$ ;EXIT IF NONE MOVB #' ,R2 CMP R4,#1 ;ONLY ONE ERROR?? BEQ 5$ ;YES MOVB #'S,R2 ;MORE THAN ON 12$: MOV #-1,FATERR ;SET SEVERE ERROR FLAG RETURN .END PTH OF RECORD IN SRCBUF ; ; SRCPTR IS SET TO POINT AT FIRST CHARACTER OF THE ; SOURCE STATEMENT. ; ; THE VALUE OF GETSTM IS FALSE IFF NO MORE SOURCE INPUT ; EXISTS. OTHERWISE A STATEMENT WAS SUCCESSFULLY READ AND IT ; IS TRUE. ; ; INPUTS: ; CURLIN - DESCRIBES STATE OF SRCBUF ; SRCBUF - SOURCE INPUT RECORD BUFFER ; SRCLIN - STRING DESCRIPTOR OF STATEMENT BUFFER ; ; OUTPUTS: ; CURLIN - DESCRIBES STATE OF SRCBUF ; R0 - VALUE OF GETSTM ROUTINE; FALSE IFF NO MORE INPUT Q .TITLE IOBLKS .IDENT /000022/; RG ; ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; PDP-11 FORTRAN IV-PLUS, RSX-11D IMPLEMENTATION ; MONITOR-DEPENDENT IMPURE STORAGE AREA ; .MCALL FDOFF$,FCSBT$ FDOFF$ DEF$L ;DEFINE FCS OFFSETS FCSBT$ DEF$L ;DEFINE FCS BITS .MCALL FDBDF$,FDAT$A,FDBK$A,FDRC$A,FDOP$A,FSRSZ$,GCMLB$ ; ; .NLIST BEX .CSECTRE 5$: MOVB R2,ERRNUM MOV #ERRSUM,-(SP) ;DESTINATION FOR ASCII CONVERSION MOV R4,-(SP) ;ERROR COUNT MOV #20002,-(SP) ;WIDTH=2, FILL=BLANK CALL CVTDEC ;CVTDEC(ERRSUM, .ERRCNT, REQ) ADD #6,SP ;POP ARGUMENTS CMDERR #ERROUT ;PRINT THE ERROR COUNT ON CMO 10$: RETURN .SBTTL OPNCHA - OPEN CHANNEL ; OPNCHA - SUBROUTINE TO OPEN INPUT/OUTPUT CHANNELS ; CALLS CSI2 AND REPORTS CSI2 ERRORS ; OPENS CHANNEL IF SPECIFIED, SETS CHANNEL STATUS ; INPUTS - CHANNEL IN R1 ; - SWITCH LIST FOR CSI$S .TITLE OUTREC .IDENT /0003/ ;PJK,RG ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; .MCALL FDOFF$ FDOFF$ DEF$L ;DEFINE FCS OFFSETS .MCALL PUT$,RETURN .PSECT .MACRO SAVR1 JSR R5,.SAVR1 .ENDM SAVR1 .MACRO FATAL N TRAP 256.- .ENDM FATAL ; GLOBAL ROUTINE BLISS OUTREC(CHAN,BUFA,BUFL) ; ; OUTREC - OUTPUT A RECORD ; ; ANT; SRCBUF - SOURCE INPUT RECORD BUFFER ; SRCPTR - POINTER TO FIRST CHARACTER OF STATEMENT (ASCIZ) ; SRCBUF - SOURCE INPUT RECORD BUFFER ; GETSTM:: SAVR1 MOV SRCLIN+2,SRCPTR ;POINT AT STATEMENT BUFFER MOV #SRCBUF,R4 ;POINT AT START OF INPUT BUFFER MOV CURLIN,R5 ;GET LENGTH OF LINE IN BUFFER BNE 2$ ;SKIP READ IF BUFFER IS NOT EMPTY ; ; PROCESS INITIAL LINE ; 1$: CALL GET00 ;READ A RECORD 2$: BLT GETEOF ;EOF ENCOUNTERED BGT 6$ ;NON-NULL SOURCE LINE 4$: CLR R0 ;LIST NULL,COMMENU FF =14 ; ASCII FORM FEED LF =12 ; ASCII LINE FEE TAB =11 ; ASCII TAB .SBTTL LISTING HEADERS ; ; FORTRAN HEADER ; HDLIN1: .BYTE FF ;FORM FEED .ASCII /FORTRAN IV-PLUS / VERSON::.ASCII /X00-14 / ;7 BYTES FOR VERSION NUMBER VERLEN== 7. ;LENGTH OF VERSION FIELD .BYTE TAB,TAB HEDTIM::.ASCII /00:00:00 / HEDDAT::.ASCII /00-XXX-70/ .BYTE TAB,TAB .ASCII /PAGE / HEDPAG::.ASCII /..../ HDLEN1= .-HDLIN1 HDLIN2: HEDFIL::.BLKB 13. ; 13 BYTES FOR SFILENAME.TYP .BLKB 21. ; 21 BYTEV2 IN R2 ; - CSI CONTROL BLOCK IN R5 ; OUTPUT - C BIT SET ON ERROR, CLEARED OTHERWISE ; MODIFIES R0 ; OPNCHA: SAVR1 MOV #8.,R3 ;ZERO SWITCH VALUE BUFFER MOV #TMPBUF,R4 1$: CLR (R4)+ SOB R3,1$ CLR (R1) ;MARK CHANNEL INACTIVE CSI$2 R5,,R2 ;DO CSI2 WITH CORRECT SWITCH LIST BCS OPNER1 ;REPORT CSI2 ERROR BITB #CS.WLD,C.STAT(R5);CHECK FOR WILD CARD (*) BNE OPNER2 ;NO WILD CARD ALLOWED ; ALL IS WELL, SO FAR - CONSIDER DOING AN OPEN MOV 2(R1),R0 ;GET FDB ADDRESS FOR CHANNEL MOV RWY OUTPUT ERRORS CAUSE A COMPILER FATAL ERROR WHICH ; ISSUES A MESSAGE AND TERMINATES THE COMPILATION. ; ; INPUTS ; CHAN - POINTER TO CHANNEL DESCRIPTOR ; BUFA - POINTER TO DATA TO BE OUTPUT ; BUFL - NUMBER OF BYTES OF DATA TO BE OUTPUT ; ; OUTPUTS: ; R0 - MODIFIED ; CHAN=6 BUFA=4 BUFL=2 OUTREC:: MOV CHAN(SP),R0 ;PICK UP CHANNEL POINTER TST (R0)+ ;IS CHANNEL OPEN BEQ 2$ ;N0, SKIP I/O MOV (R0),R0 ;LOAD FDB POINTER PUT$ R0,BUFA(SP),BUFL(SP) BCS IOERR ;I/O ERROR? 2$:XT,OR REMARK LINE CALL LSTMOV ;LIST BUT DON'T MOVE LINE BR 1$ ;GET ANOTHER INITIAL LINE 6$: MOV R4,R0 ;COPY LENGTH AND START ADDRESS MOV R5,R1 ;FOR NULL-LINE SCAN 8$: MOVB (R0)+,R2 ;SCAN FOR A NON-IGNORABLE CHARACTER DEC R1 BLT 4$ ;GO LIST BLANK LINE CMPB R2,#' ;BLANK? BEQ 8$ CMPB R2,#TAB ;OR TAB? BEQ 8$ CMPB R2,#'! ;IF INITIAL CHARACTER IS ! BEQ 4$ ;LIST AND IGNORE REMARK LINE ; ; PROCESS COMMENT AND DEBUG LINES ; CMPB (R4),#'C ;IS THIS A COMMENT LINE? BEQ 4$ ;YYS FOR OPTIONS HDLIN3: .ASCII /UNRELEASED SYSTEM, SUPPORTED FOR FIELD TEST PURPOSES ONLY/ .BYTE LF HDLEN3= .-HDLIN3 .EVEN ; LIST OF STRING DESCRIPTORS FOR HEADING LINES, ZERO-TERMINATED ; HEDLEN::.WORD HDLEN1,HDLIN1 OPTLEN::.WORD .-. ,HDLIN2 ; LENGTH IS >0 .WORD HDLEN3,HDLIN3 .WORD 0 .SBTTL I/O CONTROL BLOCKS ; ; ; "GET COMMAND LINE" CONTROL BLOCK ; CMLBLK::GCMLB$ 2,F4P; 2 LEVELS OF INDIRECT FILES ; ; FORTRAN COMPILER LUN USAGE ; 1 - COMMAND INPUT VIA GCML$ ; 2 Z5,R2; ADD #C.DSDS,R2 ;POINT TO DEV/FILE PTR BLOCK FDOP$R R0,,R2 ;SET FILE SPECIFICATIONS FOR OPEN BITB #CS.NMF!CS.DVF,C.STAT(R5) ;DEV OR FILE ? BEQ OPNEXT ;NO FILE OR DEVICE SPECIFIED CMPB #CS.INP,C.TYPR(R5);IN OR OUT ? BNE OPNW ;GO TO OPEN$W ; OPEN INPUT FILE OPEN$R R0 ;OPEN THE SOURCE FILE BCS OPNER4 ;BAD OPEN OPNMRK: MOV #3,(R1) ;MARK CHANNEL OPEN OPNEXT: CLC RETURN ;RETURN BLISSFULLY ; OPEN OUTPUT FILE OPNW: OPEN$W R0 ;OPEN THE FILE BCC OPNMRK ;ALL OK - MARK AND RETU RETURN IOERR: CMP R0,#OBJFDB ;DISCOVER WHICH FILE HAD BNE 1$ ; ERROR AND GIVE FATAL ERROR FATAL 6 ; FATAL ON .OBJ FILE 1$: FATAL 7 ; FATAL ON .LST FILE .END \ES, LIST AND IGNORE CMPB (R4),#'D ;IS THIS A DEBUG LINE? BNE 10$ ;NO TST DEBGSW ;ARE DEBUG LINES INCLUDED IN SOURCE? BEQ 4$ ;NO, TREAT AS A COMMENT LINE MOVB #' ,(R4) ;CONVERT D IN COLUMN 1 TO BLANK CALL SLCC ;PROCESS LABEL AND CONTINUATION MARK MOVB #'D,SRCBUF ;PUT BACK THE D IN COLUMN 1 SEZ ;INDICATE CONTINUATION FIELD OK BR 11$ ;CHECK RESULTS (C-BIT IS UNMODIFIED) ; ; PROCESS STATEMENT LABEL AND CONTINUATION FIELD ; 10$: CALL SLCC ;PROCESS LABEL AND CONTINUATION MARK 11$:]- NOT USED, AVAILABLE FOR ODT ; 3-6 - COMPILER I/O, SEE FDB'S BELOW ; 7 - MESSAGE TEXT FILE ; 8 - MO.... MESSAGE OUTPUT TASK ; FORTRAN COMPILER EVENT FLAG USAGE ; 1 - WORK FILE READ ; 2 - WORK FILE WRITE ; 3 - MESSAGE FILE READ ; ; COMPILER I/O FDB'S ; LSTFDB::FDBDF$ FDAT$A R.VAR, FD.CR; VARIABLE LENGTH RECORDS, IMPLIED CR/LF FDOP$A 4,,LSTNAM; LUN 4 ; OBJFDB::FDBDF$ FDAT$A R.VAR; FDOP$A 3,,OBJNAM; LUN 3 ; SRCFDB::FDBDF$ FDAT$A R.VAR; FDRC$A 0,SRCBUF,88.; MAXIMUM 88 B^RN BR OPNER3 ; OPNER1: CMDERR #CSIM2 ;BAD SWITCHES BR OPNERR OPNER2: CMDERR #CSIM3 ;BAD FILE/DEVICE SPECIFICATION(*) BR OPNERR OPNER3: CMDERR #CSIM7 ;BAD OUTPUT FILE BR OPNERR OPNER4: CMDERR #CSIM6 ;BAD SOURCE FILE OPNERR: SEC RETURN ;ERROR RETURN .SBTTL TRDECD - /TR SWITCH VALUE PROCESSING ; ; TRDECD - SUBROUTINE TO DECODE ASCII VALUES OF /TR SWITCH ; ; REGISTER USAGE ; INPUTS - R5 CONTAINS POINTER TO CSI BLOCK AFTER CSI$2 ; OUTPUTS- C BIT SET ON ERROR, CLEARED OTHERWISE ;_ .TITLE WFOPEN .IDENT /0007/; ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY ; FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DIGITAL EQUIPMENT CORPORATION. ; ; WRITTEN BY ; R. GROVE ; "FCSOPEN" IS CALLED BY "WFONCE" TO OPEN THE WORK FILE ; AND TO ALLOCATE DISK SPACE FOR THE FILE. ; ; THE PARAMETER "FCSPTR", PROVIDED FOR MULTI-FILE WORK ; FILE SYSTEMS, IS IGNORED BY TH` BCC 12$ ;ERROR IN STATEMENT LABEL? CLR SRCPTR ;AN AID TO ERROR REPORTING TRAP 2 ;YES 12$: BEQ 14$ ;CONTINUATION INDICATED? TRAP 1 ;YES, UNNECESSARY CONTINUATION MARK 14$: MOV SRCLIN+2,SRCPTR ;RESTORE STATEMENT BUFFER POINTER MOV #STLABL,R0 ;PACK AND MOVE STATEMENT LABEL CALL PAKLAB MOV #L.SEQ!L.MOV,R0 ;MOVE REST TO STMNT BUFFER CALL LSTMOV ; AND LIST THE LINE ; ; APPEND ANY CONTINUATION LINES ; 20$: CALL GET00 ;READ A RECORD (R5=COUNT) BMI GETOUT ;LEAVE IF END-OF-FILE CaYTES TO SRCBUF FDOP$A 5,,SRCNAM; LUN 5 ; WRKFDB::FDBDF$ FDRC$A FD.RWM; READ/WRITE MODE I/O FDBK$A ,512.; ALL BLOCKS HAVE 512. BYTES FDOP$A 6; LUN 6 ; MSGFDB::FDBDF$ FDRC$A FD.RWM; READ/WRITE MODE I/O FDBK$A ,512.,,3,MGIOST FDOP$A 7,MSG6WD ; ; I/O STATUS BLOCKS FOR FORTRAN IV-PLUS SYSTEM ; MGIOST: .BLKW 2 RDIOST::.BLKW 2 WTIOST::.BLKW 2 .SBTTL I/O CHANNELS ; ; FORTRAN COMPILER I/O CHANNELS ; FIRST WORD IS A STATUS WORD WITH VALUES: ; 0-CHANNEL NOT SPECIFIED ; 1-CHANNELb TRDECD: SAVR1 MOV #7,R4 ;INITIAL SWITCH VALUE TST TMPBUF ;CHECK FOR A VALUE STRING BEQ 10$ ;NONE, SIMPLY /TR OR /-TR MOV #TRVALS,R1 ;LIST OF POSSIBLE VALUES 2$: MOVB (R1)+,R4 ;NUMERIC VALUE IF MATCH SUCCESSFUL BMI 30$ ;END OF LIST - ERROR MOV #TMPBUF,R0 ;VALUE STRING POINTER 4$: CMPB (R0)+,(R1) ;COMPARE STRINGS BNE 20$ ;MATCH FAILED TSTB (R1)+ ;CHECK FOR END OF PROTOTYPE BNE 4$ ;MORE TO MATCH ; SUCCESSFUL MATCH 10$: BIT #TRMSK,C.MKW2(R5); TEST FOR NEGATED SWITCH BNE 12cIS VERSION OF THE ROUTINE. ; THE VALUE RETURNED IN R0 IS THE NUMBER OF BLOCKS AVAILABLE ; IN THE FILE. .PSECT .MCALL OPNT$D,FDOP$R,FCSBT$,FDOFF$,NMBLK$ FCSBT$ DEF$L FDOFF$ DEF$L .MACRO FATAL N TRAP 256.- .ENDM FATAL ; LOCAL SYMBOL DEFINITIONS EXTSIZ =128. ;INITIAL EXTENT OF WORK FILE EXTMIN =32. ;MINIMUM EXTENT OF WORK FILE FILSIZ =255. ;MAXIMUM NUMBER OF BLOCKS IN WORK FILE ; GLOBAL ROUTINE %BLISS% FCSOPEN(FCSPTR) FCSOPEN:: JSR R5,.SAVR1 ;SAVE REGISTERS FDOP$RdMPB (R4),#'C ;IS THIS A COMMENT? BEQ GETOUT ;YES, THEN IT'S NOT A CONTINUATION CALL SLCC ;CHECK STATEMENT LABEL AND CONT COL BEQ GETOUT ;NO CONTINUATION, SO QUIT MOV #L.MOV,R0 ;YES, APPEND STMNT FIELD TO LINE CALL LSTMOV ; AND LIST THE LINE W/O SEQ NO BR 20$ ;CONTINUE EXAMINING INPUT LINES ; ; LINE COMPLETE ; GETEOF: CLR R0 ;RETURN FALSE BR GETDON GETOUT: MOV #1,R0 ;RETURN TRUE GETDON: CLRB @SRCPTR ;MAKE STMNT BUFFER ASCIZ MOV SRCLIN+2,SRCPTR ;POINT TO START OF STATEMENT e SPECIFIED, BUT CLOSED ; 3-CHANNEL SPECIFIED, AND OPEN ; SECOND WORD POINTS TO FDB FOR THE CHANNEL ; LSTCHA::.WORD .-.,LSTFDB; OBJCHA::.WORD .-.,OBJFDB; SRCCHA::.WORD .-.,SRCFDB; ; ; DECLARE STORAGE FOR THE FCS BUFFER REGION ; FORTRAN IV-PLUS HAS A MAXIMUM OF 3 SIMULATEOUSLY OPEN FILES ; REQUIRING BUFFERS WHICH ARE ALLOCATED BY FCS (GET/PUT). ; FSRSZ$ 3 .SBTTL RECORD BUFFERS .EVEN OUTPTR::.WORD OUTBUF; SRCPTR::.BLKW OUTBUF::.BLKB 132. OUTEND:: OUTLEN ==OUTEND-OUTBUF; ; ; SOf$ COM R4 ;COMPLEMENT VALUE 12$: BIC #177770,R4 MOV R4,SEQSUP ;SET COMPILER INTERNAL VARIABLE CLC RETURN ; STRING MATCH FAILED, SCAN TO NEXT PROTOTYPE 20$: TSTB (R1)+ ;SKIP TO 0 TERMINATOR BNE 20$ BR 2$ ;MATCH NEXT PROTOTYPE ; ALL MATCHES FAILED 30$: SEC RETURN .SBTTL RLSALL - FILE UTILITY SUBROUTINE ; ; CLOSE ANY OPEN FILES SPECIFIED IN 'WKLST' ; POTENTIALLY BAD .OBJ FILES RESULTING FROM "F" CLASS ERRORS ; ARE DELTED, RATHER THAN SIMPLY BEING CLOSED. ; RLSALL: SAVR1 TSg #WRKFDB,,,#WRKNAM;SET DEFAULT NAME BLOCK OPNT$D R0 ;OPEN THE WORK FILE BCC 2$ FATAL 1 ;FATAL ERROR ON WORK FILE OPEN 2$: MOV #<2*EXTSIZ>,R1 ;2*INITIAL ALLOCATION FOR WORK FILE MOV #1,R2 ;TRY FOR CONTIGUOUS ALLOCATION 3$: ASR R1 ;ACTUAL SIZE FOR NEXT .EXTND 4$: JSR PC,.EXTND ;.EXTND(R0=FDB,R1,R2) BCC 6$ ;.EXTND WORKED CMP R1,#EXTMIN ;WAS IT THE MINIMUM EXTENT BGT 3$ ;NO, TRY NEXT SMALLER SIZE DEC R2 ;IF IT WAS A CONTIGUOUS .EXTND FAILURE BEQ 4$ ;TRY IT AGAIN, NON-CONTIGUOUSLh RETURN .SBTTL GET00 - READ A SOURCE RECORD ; ; READS THE NEXT SOURCE LINE INTO SRCBUF. ; ; R4 IS SET TO POINT AT THE LINE. ; LINE LENGTH IS PLACED IN R5 AND CURLIN. ; END-OF-FILE IS INDICATED BY A NEGATIVE LENGTH. ; CC'S ARE SET BASED ON CONTENTS OF R5 (CURLIN). ; ; REGISTER USAGE ; INPUT - NONE ; OUTPUT - R4 IS INPUT LINE POINTER ; R5 IS INPUT LINE COUNT ; MODIFY - R0,R4,R5 ; GET00: GET$ #SRCFDB ;READ A RECORD MOVB SRCFDB+F.ERR,R5 ;GET FCS RETURN CODE BMI 4$URCE INPUT BUFFER ; .EVEN LSTBUF::.ASCII /..../; FILLED WITH BLANKS OR SEQ.NO. .ASCII / /; SRCBUF::.BLKB 88. .SBTTL SST VECTOR ; .EVEN SSTVEC::.WORD 0,0 ; NULLS .WORD 0,0 ; NULLS .WORD 0 .WORD EMTLOC ; EMT : FATAL OVERLAY LOADING ERROR .WORD TRPLOC ; TRAP : TRAP AND SIGNAL/RETURN ; .EVEN .END jT FATERR ;IF THERE WERE ANY "F" CLASS ERRORS BPL 1$ BIT #2,OBJCHA ; AND THERE IS AN .OBJ FILE BEQ 1$ CLR OBJCHA ;THE .OBJ FILE IS MARKED CLOSED DELET$ #OBJFDB ;AND THE FILE IS DELETED 1$: MOV #WKLST,R1 ;GET ADDRESS OF LIST 2$: MOV (R1)+,R0 ;GET NEXT CHANNEL ON LIST BEQ 4$ ;NO MORE - ALL DONE MOV (R0),R2 ;GET CHANNEL STATUS WORD CLR (R0)+ ;MARK IT CLOSED AND FREE BIT #2,R2 ;TEST CHANNEL STATUS BEQ 2$ ;FILE IS NOT OPEN MOV (R0),R0 ;GET IT'S FDB CMP R0,#LSTFDB ;IF NOT .LST Y 6$: MOV #FILSIZ,R0 ;RETURN MAXIMUM WORK FILE SIZE RTS PC ; DEFAULT FILE NAME BLOCK FOR WORK FILE OPENING WRKNAM: NMBLK$ FORTRN,TMP .END l ;AN ERROR WAS DETECTED MOV SRCFDB+F.NRBD,R5;LENGTH OF RECORD 2$: MOV #SRCBUF,R4 ;LEAVE WITH POINTER IN R4 MOV R5,CURLIN ;AND LENGTH IN R5 AND CURLIN RETURN ;CONDITION CODES REFLECT R5 4$: CMPB #IE.EOF,R5 ;WAS IT AN EOF ERROR ? BEQ 2$ ;YES, INDICATE EOF BY NEG LENGTH CMPB #IE.RBG,R5 ;SOURCE LINE TOO LONG? BEQ 6$ ;YES, SEMI-FATAL ERROR FATAL 3 ;NO, FATAL INPUT I/O ERROR 6$: TRAP 4 ;SOURCE LINE TOO LONG ERROR BR 2$ ;INDICATE EOF BY NEG LENGTH .SBTTL SLCC - STATEMENT LABEm .TITLE WFQIO .IDENT /0006/; RG ; COPYRIGHT 1973,1974 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; "WFQIO" PROVIDES LOW LEVEL FCS READ/WRITE SERVICE FOR THE ; FTN/45 WORK FILE SYSTEM. ; ALL ROUTINES IN THIS MODULE ARE CALLED FROM THE WORK FILE ; MODULES ACCORDING TO STANDARD BLISS CALLING CONVENTIONS. ; ; THE PARAMETER "FCSPTR" IS NOT EXPECTED OR USED ; IN THIS VnFILE BNE 3$ ;THEN JUST DO THE CLOSE TST SPOOL ;IF SPOOLED I/O NOT REQUESTED BEQ 3$ ;THEN JUST DO THE CLOSE PRINT$ R0 ;SEND .LST FILE TO THE SPOOLER 3$: CLOSE$ R0 ;CLOSE THE FILE BR 2$ ;DO THE NEXT 4$: RETURN .SBTTL DELALL - FILE UTILITY SUBROUTINE ; ; DELETE ANY OPEN FILES SPECIFIED IN 'DLLST' ; DELALL: SAVR1 MOV #DLLST,R1 ;ADDRESS OF LIST 2$: MOV (R1)+,R0 ;GET NEXT CHANNEL ON LIST BEQ 4$ ;NO MORE - ALL DONE MOV (R0),R2 ;GET CHANNEL STATUS WORD CLR (R0)+ ;MARK FILE CLo; RSXMAC.SML - V004A RSX-11D MACRO FILE ; ; ; GENESIS AND EDIT HISTORY FOR MACRO FILE MAINTAINED ON CS/2: ; ; 21-SEP-74 RBG OBTAINED FILE FROM RSX V004A SYSTEM ON 5-5 ; .TITLE QIOMAC - QIOSYM MACRO DEFINITION .IDENT /0211/ QI.VER=0211 ; QIOSY$ ; QIOSY$ DEF$G .MACRO QIOSY$ $$$GBL,$$$MSG,$$$MAX .IF DIF,<$$$MSG>, .MACRO QIOSY$ ARG,ARG1,ARG2 .ENDM .ENDC .IIF IDN,<$$$GBL>,, .GLOBL QI.VER ; .WORD. SYM,LO,HI .MACRO .WORD. SYM,LO,HI SYM =HI*400+LO .IIF IDN <$$$GBL>,DEF$GpL AND CONTINUATION PROCESSING ; SLCC - GET STATEMENT LABEL AND CONTINUATION COLUMN ; ; SCANS OVER STATEMENT LABEL FIELD AND CHECKS FOR INDICATION ; OF CONTINUATION. ; ; TLINE IS FILLED WITH THE STATEMENT LABEL REPRESENTED AS ; 6 BYTES OF LEFT-ADJUSTED NULL-FILLED ASCII. THE C-BIT IS ; SET IF THERE IS AN ERROR IN THE STATEMENT LABEL FIELD. ; ; RETURN CODE IN R0 ; 1 - CONTINUATION INDICATED ; 0 - NO CONTINUATION INDICATED ; Z-BIT IS BASED ON CONTENTS OF R0. ; ; REGISTER USAGEqERSION OF THE ROUTINES. THESE ROUTINES ARE ; CODED TO USE CONSTANT NAMES FOR THE WORK FILE FDB, ; I/O STATUS BLOCKS, AND EVENT FLAGS. THIS IS ADEQUATE FOR A ; WORK FILE SYSTEM USING A SINGLE "WORK FILE CONTROL TABLE." ; TO SUPPORT A SYSTEM USING MULTIPLE WORK FILE CONTROL TABLES, ; THE ROUTINES SHOULD BE EXTENDED SO THAT "FCSPTR" IS USED ; TO ADDRESS A PARAMETER BLOCK CONTAINING: ; A WORK FILE FDB ; I/O STATUS BLOCKS AND EVENT FLAGS FOR READ/WRITE .MCALL FDOFF$,READ$,WAIT$,WRITE$ FDOFF$ DErOSED BIT #2,R2 ;TEST CHANNEL STATUS WORD BEQ 2$ ;FILE IS NOT OPEN MOV (R0),R0 ;GET IT'S FDB DELET$ R0 ;DELETE THE FILE BR 2$ ;DO THE NEXT 4$: RETURN .SBTTL PUTCMG - COMMAND ERROR OUTPUT ; ; PUTCMG - OUTPUT A COMMAND-LEVEL MESSAGE TO TASK REQUESTOR ; ; ECHOS COMMAND LINE IF IT CAME FROM INDIRECT FILE ; ; REGISTER USAGE ; INPUT - R0 IS MESSAGE POINTER ; OUTPUT - NONE ; MODIFY - R0 ; PUTCMG: SAVR1 MOV #CMLBLK,R1 ;POINT AT COMMAND LINE BLOCK MOV #MOPRM,R2 ;POINT AT Ps, .GLOBL SYM .ENDM .WORD. ; .BYTE. SYM,LO .MACRO .BYTE. SYM,LO SYM =LO .IIF IDN <$$$GBL>,DEF$G, .GLOBL SYM .ENDM .BYTE. .MACRO .IOMG. SYM,LO,MSG .IF IDN,,<$$$MSG> .WORD - .ASCIZ ^MSG^ .EVEN .IIF LT,<$$$MAX+>,$$$MAX=- .ENDC .ENDM .IOMG. .MACRO .IOER. SYM,LO,MSG .BYTE. SYM,LO .IOMG. SYM,LO, .ENDM .IOER. .MACRO .QIOE. SYM,LO,MSG .BYTE. SYM,LO .IOMG. SYM,, .ENDM .QIOE. .WORD. IQ.X,001,000 .WORD. IQ.Q,002,000 ;;; .WORD. IQ.,004,0t ; INPUT - R4 IS INPUT LINE PTR ; R5 IS INPUT LINE COUNT ; OUTPUT - R0 IS RETURN CODE ; R4 IS UPDATED INPUT LINE PTR ; R5 IS UPDATED INPUT LINE COUNT ; MODIFY - ALL ; SLCC: MOV #TLINE+1,R1 MOV #6,R3 CLR R2 ; ANALYZE STATEMENT LABEL FIELD 1$: CALL GETCHR ;GET NEXT CHAR INTO R0 BVS LNCOUT ;EOL MEANS QUIT DEC R3 ;REACHED COLUMN 6? BLE 5$ ;YES CMPB R0,#' ;IGNORE BLANKS BEQ 1$ CMPB R0,#'9 ;CHECK FOR VALID DIGIT BGT 3$ ;NOT A DIGIT CMPB R0,#'0 BLT 3$uF$L ;DEFINE THE FCS OFFSETS .MACRO FATAL N TRAP 256.- .ENDM FATAL ; DEFINE STACK OFFSETS TO BLISS PARAMETERS (FOR "SETFDB" SUBROUTINE ) VBN =6 ;VIRTUAL BLOCK NUMBER FOR READ/WRITE CORAD =4 ;CORE ADDRESS FOR READ/WRITE ;FCSPTR =4 ;POINTER TO FCS DATA BLOCK ; EVENT FLAG DEFINITIONS RDEFN =1 ;EVENT FLAG FOR READ OPERATIONS WTEFN =2 ;EVENT FLAG FOR WRITE OPERATIONS ; GLOBAL ROUTINE %BLISS% FCSREAD(VBN,CORAD,FCSPTR) FCSREAD:: JSR PC,SETFDB ;SET FDB PARAMETERS FOR READ$vARAMETER BLOCK MOV #MOFM2,MOSTR+2 ;SET UP TO SKIP ECHO OF MOV #MOLN2,MOSTR ; COMMAND LINE BITB #FD.TTY,F.RCTL(R1) ;IS COMMAND FROM TTY? BNE 1$ ;YES, SKIP ECHO MOV #MOFM1,MOSTR+2 ;NO, ECHO COMMAND LINE MOV #MOLN1,MOSTR MOV G.CMLD(R1),(R2)+ ;STORE DESC OF LINE IN PARM BLOCK MOV G.CMLD+2(R1),(R2)+ 1$: MOV (R0)+,R1 ;GET POINTER TO STRING DESCRIPTOR BNE 2$ ;IS THERE A DESCRIPTOR? SUB #MOEXT,MOSTR ;NO, SHORTEN FORMAT STRING MOV SP,R1 ;MAKE R1 A VALID ADDRESS FOR LATER 2$: MOVB (R0)+,w00 .WORD. IO.KIL,012,000 .WORD. IO.RDN,022,000 .WORD. IO.UNL,042,000 .WORD. IO.LTK,050,000 .WORD. IO.RTK,060,000 .WORD. IO.WLB,000,001 .WORD. IO.WLV,100,001 .WORD. IO.RLB,000,002 .WORD. IO.RLV,100,002 .WORD. IO.LOV,010,002 .WORD. IO.RNC,004,002 .WORD. IO.RAL,010,002 .WORD. IO.RNE,020,002 .WORD. IO.RDB,200,002 .WORD. IO.R1C,000,005 .WORD. IO.RBC,000,006 .WORD. IO.RTC,000,007 .WORD. IO.ATT,000,003 .WORD. IO.DET,000,004 .WORD. IO.RWD,000,005 .WORD. IO.SPB,020,005 .x ;NOT A DIGIT BNE 2$ ;DIGIT OK CMP R1,#TLINE+1 ;IS THIS LEADING ZERO? BEQ 1$ ;YES, IGNORE IT 2$: MOVB R0,(R1)+ ;STORE DIGIT IN TLINE AREA BR 1$ ; FIRST NON-DIGIT DISCOVERED 3$: CMPB R0,#TAB ;IF IT IS A TAB THEN CHECK FOR BEQ LNCSPE ; SPECIAL CONTINUATION COLUMN INC R2 ;ELSE INDICATE ERROR IN FIELD MOV #TLINE+1,R1 ;INDICATE NO STATEMENT LABEL 4$: CALL GETCHR BVS LNCOUT 5$: CMPB R0,#TAB ;TAB MEANS SPECIAL CONT COL BEQ LNCSPE DEC R3 ;ARE WE LOOKING AT COL 7 YET? BGT 4$ y READ$ R0,,,,#RDEFN,#RDIOST INC FCSRCT ;COUNT ONE DISK READ (C NOT CHANGED) BR INRET ;COMMON RETURN FOR INPUT ; GLOBAL ROUTINE %BLISS% FCSWRITE(VBN,CORAD,FCSPTR) FCSWRITE:: JSR PC,SETFDB ;SET FDB PARAMETERS FOR WRITE$ WRITE$ R0,,,,#WTEFN,#WTIOST INC FCSWCT ;COUNT ONE DISK WRITE (C NOT CHANGED) BR OUTRET ;COMMON RETURN FOR OUTPUT ; GLOBAL ROUTINE %BLISS% FCSRWAIT(FCSPTR) ; WAIT FOR COMPLETION OF A PREVIOUSLY ISSUED READ FCSRWAIT:: WAIT$ #WRKFDB,#RDEFN,#RDIOST INRET: BCz(R2)+ ;MESSAGE LENGTH CLRB (R2)+ MOV R0,(R2)+ ;MESSAGE ADDRESS MOV (R1)+,(R2)+ ;STRING DESCRIPTOR OR MEANINGLESS MOV (R1)+,(R2)+ ; IF NO DESCRIPTOR WAS GIVEN DIR$ #MOUT ;CALL MO TASK BCS 3$ ;DON'T WAIT IF AN ERROR OCCURRED MOWA$S 3$: RETURN .SBTTL DATTIM - DATE/TIME CONVERSION ; ; DATTIM - SUBROUTINE TO PUT DATE/TIME IN LISTING HEADING ; AND INITIALIZE MODULE .IDENT VARIABLE TO CURRENT DATE ; ; WITHIN THIS ROUTINE, ; R0 POINTS INTO PARAMETER BUFFER RETURNED BY RSX-11D ; R1 PO{WORD. IO.SPF,040,005 .WORD. IO.EOF,000,006 .WORD. IO.STC,100,005 .WORD. IO.SEC,120,005 .WORD. IO.RWU,140,005 .WORD. IO.SMO,160,005 .WORD. IO.SAO,000,010 .WORD. IO.SSO,000,011 .WORD. IO.MSO,000,012 .WORD. IO.SLO,000,013 .WORD. IO.MLO,000,014 .WORD. IO.SCS,000,026 .WORD. IO.MCS,000,027 .WORD. IO.CCI,000,030 .WORD. IO.DCI,000,031 .WORD. IO.RCI,000,032 .WORD. IO.CTI,000,033 .WORD. IO.DTI,000,034 .WORD. IO.RTI,000,035 .WORD. IO.ITI,000,036 .WORD. IO.FNA,000,011 .WORD. |;NO, KEEP SCANNING ; ; CHECK NORMAL CONTINUATION COLUMN ; LNCNOR: CMPB R0,#'0 ;IS NEXT CHAR ZERO OR BLANK? BEQ LNCOUT ; YES - NO CONTINUATION CMPB R0,#' ; NO - CONTINUATION BEQ LNCOUT LNCYES: BIS #2,R2 BR LNCOUT ; ; CHECK SPECIAL CONTINUATION COLUMN ; LNCSPE: CALL GETCHR BVS LNCOUT SUB #'1,R0 ;IS NEXT CHAR NON-ZERO NUMERIC? CMP R0,#9. BLOS LNCYES ;YES, THEN IT IS A CONTINUATION INC R5 ;NO, GIVE BACK THE CHARACTER DEC R4 LNCOUT: CLRB (R1)+ ;ZERO PAD THE STMT LABEL BC RET ;COMMON RETURN FATAL 4 ;FATAL INPUT ERROR ON WORK FILE ; GLOBAL ROUTINE %BLISS% FCSWWAIT(FCSPTR) ; WAIT FOR COMPLETION OF A PREVIOUSLY ISSUED WRITE FCSWWAIT:: WAIT$ #WRKFDB,#WTEFN,#WTIOST OUTRET: BCC RET ;COMMON RETURN FATAL 5 ;FATAL OUTPUT ERROR ON WORK FILE ; %LOCAL% ROUTINE SETFDB= ; SET UP R0=FDB, "CORAD" AND "VBN" FOR READ$/WRITE$ SETFDB: MOV #WRKFDB,R0 ;FDB TO THE USUAL PLACE MOV CORAD(SP),F.BKDS+2(R0) MOV VBN(SP),F.BKVB+2(R0) RET: RTS PC .END ~INTS INTO THE LISTING HEADING ; DATTIM::SAVR1 GTIM$S #TMPBUF ;GET TIME/DATE INFO FROM EXEC ; DATE SECTION MOV #TMPBUF+6,R0 ;POINT BEYOND DAY OF MONTH MOV #HEDDAT,R1 ;OUTPUT STRING POINTER MOV -(R0),R5 ;GET DAY OF MONTH CALL TWOBYT ;CONVERT IT MOV -(R0),R4 ;GET MONTH ASL R4 ADD (R0),R4 ;MONTH*3 ADD #MONTHS-3,R4 ;POINT TO MONTH CHARACTERS MOVB (R4)+,(R1)+ ;MOV 3 CHARACTERS MOVB (R4)+,(R1)+ MOVB (R4)+,(R1)+ INC R1 ;SKIP A CHARACTER MOV -(R0),R5 ;GET YEAR AND CONVERT IT CAIO.RNA,000,013 .WORD. IO.ENA,000,014 .WORD. IO.ACR,000,015 .WORD. IO.ACW,000,016 .WORD. IO.ACE,000,017 .WORD. IO.DAC,000,020 .WORD. IO.RVB,000,021 .WORD. IO.WVB,000,022 .WORD. IO.EXT,000,023 .WORD. IO.CRE,000,024 .WORD. IO.DEL,000,025 .WORD. IO.RAT,000,026 .WORD. IO.WAT,000,027 .QIOE. IE.UPN,-01. .QIOE. IE.ULN,-05. .QIOE. IE.HWR,-06. .BYTE. IE.IPR,-95. .BYTE. IE.ILU,-96. .BYTE. IE.IEF,-97. .BYTE. IE.ADP,-98. .BYTE. IE.SDP,-99. .IOER. IE.BAD,-01. ; .IOER. IE€UFFER CMP R1,#TLINE+5 BLOS LNCOUT ;MORE TO FILL CLC ;LOAD C-BIT AND Z-BIT AS ADVERTISED MOV R2,R0 ROR R0 RETURN .SBTTL GETCHR - CHARACTER INPUT ROUTINE ; GETCHR - GET CHARACTER FROM INPUT BUFFER ; ; ONLY COLUMNS 1-72 OF INPUT RECORD ARE PROCESSED. ; COLUMNS 73-80 ARE IGNORED. ; ; ANY CONTROL CHARACTER (I.E. <40 OCTAL) EXCEPT ; TAB IS REPLACED WITH A "?". ; ; END-OF-LINE OCCURS AFTER CHARACTER 72 OR AT END-OF-RECORD ; WHICHEVER COMES FIRST. V-BIT IS SET IFF END‚LL TWOBYT ;14-DEC-72 ; TIME SECTION MOV #TMPBUF+6,R0 ;PARAMETER POINTER MOV #HEDTIM,R1 ;OUTPUT STRING POINTER MOV #3,R2 ;FIELD COUNT 5$: MOV (R0)+,R5 ;GET VALUE CALL TWOBYT ;CONVERT IT SOB R2,5$ ; MODULE .IDENT SECTION MOV #HEDDAT,R1 ;POINT TO ASCII DATE MOV #TMPBUF,R2 ;AND A TEMPORARY BUFFER MOVB (R1)+,(R2)+ ;14 MOVB (R1)+,(R2)+ INC R1 MOVB (R1)+,(R2)+ ;DEC MOVB (R1)+,(R2)+ MOVB (R1)+,(R2)+ CLRB (R2) MOV #TMPBUF,-(SP) MOV #MODIDN,-(SP) CALL PACK50 ;PACK50(TMPBUF,Mƒ.IFC,-02. .IOER. IE.DNR,-03. .IOER. IE.VER,-04. .IOER. IE.SPC,-06. .IOER. IE.DNA,-07. .IOER. IE.DAA,-08. .IOER. IE.DUN,-09. .IOER. IE.EOF,-10. .IOER. IE.EOV,-11. .IOER. IE.WLK,-12. .IOER. IE.DAO,-13. .IOER. IE.SRE,-14. .IOER. IE.ABO,-15. .IOER. IE.PRI,-16. .IOER. IE.OVR,-18. .IOER. IE.BYT,-19. .IOER. IE.BLK,-20. .IOER. IE.MOD,-21. .IOER. IE.CON,-22. .IOER. IE.BBE,-56. .IOER. IE.STK,-58. .IOER. IE.FHE,-59. .IOER. IE.EOT,-62. .IOER. IE.NOD,-23. .IOER. IE.DFU,-„-OF-LINE ; OCCURRED. ; ; REGISTER USAGE ; INPUT - R4 IS INPUT POINTER ; R5 IS INPUT COUNT ; OUTPUT - R0 IS 7-BIT ASCII CHARACTER (IF NOT EOL) ; R4 IS UPDATED INPUT POINTER ; R5 IS UPDATED INPUT COUNT ; MODIFY - R0,R4,R5 ; GETCHR: DEC R5 ;ANY INPUT LEFT? BGE 2$ ;YES 1$: CLR R5 ;NO, CLEAR COUNT SEV ;INDICATE EOL RETURN 2$: CMP R4,#SRCBUF+72. ;REACHED END OF BUFFER? BHIS 1$ ;YES, INDICATE EOL MOVB (R4)+,R0 ;PICK UP CHARACTER CMPB R0,#40 ;CHANGE ANY CO†ODIDN) CMP (SP)+,(SP)+ ;POP 2 ARGUMENTS RETURN MONTHS: .ASCII /JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC/ .EVEN ; ; TWOBYT - SUBROUTINE FOR DATTIM ; CONVERTS BINARY IN R5 TO ASCII AT R1 ; UPDATES R1 BY 3(!)BYTES ; USES REGISTERS R4,R5 TWOBYT: CLR R4 ;SIGN EXTENSION FOR DIVIDEND DIV #10.,R4 ;GET TWO DIGITS IN R4, R5 ADD #'0,R4 ;HIGH ORDER DIGIT TO ASCII MOVB R4,(R1)+ ADD #'0,R5 ;LOW ORDER DIGIT TO ASCII MOVB R5,(R1)+ INC R1 ;SKIP A BYTE RETURN .SBTTL MVFNAM - CONVERT SOURCE‡24. .IOER. IE.IFU,-25. .IOER. IE.NSF,-26. .IOER. IE.LCK,-27. .IOER. IE.HFU,-28. .IOER. IE.WAC,-29. .IOER. IE.CKS,-30. .IOER. IE.WAT,-31. .IOER. IE.RER,-32. .IOER. IE.WER,-33. .IOER. IE.ALN,-34. .IOER. IE.SNC,-35. .IOER. IE.SQC,-36. .IOER. IE.NLN,-37. .IOER. IE.CLO,-38. .IOER. IE.DUP,-57. .IOER. IE.BVR,-63. .IOER. IE.NBF,-39. .IOER. IE.RBG,-40. .IOER. IE.NBK,-41. .IOER. IE.ILL,-42. .IOER. IE.BTP,-43. .IOER. IE.RAC,-44. .IOER. IE.RAT,-45. .IOER. IE.RCN,-46. ˆNTROL CHARACTER BGE 3$ ; OTHER THAN TAB TO "?" CMPB R0,#TAB BEQ 3$ MOVB #'?,-(R4) MOVB (R4)+,R0 3$: RETURN .SBTTL LSTMOV - SOURCE LINE LISTING ROUTINE ; LSTMOV - LIST LINE AND APPEND TO STATEMENT BUFFER ; ; CONDITIONALLY LISTS SOURCE INPUT LINE WITH OR ; WITHOUT LINE SEQUENCE NUMBER AND CONDITIONALLY ; APPENDS LINE TO STATEMENT BUFFER. ; ; CALLING SEQUENCE: ; MOV PARM,R0 ;PUSH PARAMETER ; CALL LSTMOV ; ; PARAMETER WORD BITS HAVE THE FOLLOWING MEANINGS: ; L.SEQ - <7,1Š FILE NAME TO ASCII ; ; MVFNAM - SUBROUTINE TO CONVERT SOURCE FILE NAME ; FROM RADIX-50 IN FDB TO ASCII IN LISTING HEADER ; ; REGISTER USAGE - SAVES REGISTERS ; WITHIN ROUTINE: ; R1 - POINTS AT RADIX50 TO CONVERT ; R2 - POINTS AT ASCII OUTPUT STRING ; R3 - COUNT OF BYTES TO CONVERT MVFNAM: SAVR1 MOV #HEDFIL,R2 ;POINT TO ASCII LISTING HEADER ; UNPACK AND MOVE FILE NAME MOV #SRCFDB+F.FNB+N.FNAM,R1 MOV #3,R3 ;3 WORDS OF FILE NAME CALL MOVSTR CMP R2,#HEDFIL ;IF THE FILE NAME WAS NULL‹.IOER. IE.MBK,-47. .IOER. IE.2DV,-48. .IOER. IE.FEX,-49. .IOER. IE.BDR,-50. .IOER. IE.RNM,-51. .IOER. IE.BDI,-52. .IOER. IE.FOP,-53. .IOER. IE.BNM,-54. .IOER. IE.BDV,-55. .IOER. IE.NFI,-60. .IOER. IE.ISQ,-61. .BYTE. IS.PND,+00. .BYTE. IS.SUC,+01. .BYTE. IS.BV,+05. .WORD. IS.CR,+01.,15 .WORD. IS.ESC,+01.,33 .ENDM QIOSY$ .MACRO PRINT$ FDB,ERR,?LBL .MCALL CALL,CLOSE$,LDR0$,SDRQ$S LDR0$ FDB TST F.BDB(R0) BEQ LBL BITB #FD.REC,F.RCTL(R0) BNE LBL MOV R1,-(SP) MOŒ> SET: INCLUDE SEQUENCE NO. ON LISTING ; L.MOV - <15,1> SET: APPEND REMAINDER OF LINE TO STATEMENT ; ; INITIALLY THE INPUT POINTER(R4) AND INPUT COUNT(R5) ; POINT AT FIRST BYTE OF STATEMENT FIELD OF THE INPUT ; RECORD. ; ; ALL CHARACTERS MUST BE SCANNED OVER BY THE GETCHR ROUTINE ; TO CLEANSE THEM (I.E. GET RID OF CONTROL CHARACTERS, ETC.). ; ; THE LINE IS LISTED UNLESS /LI:0 WAS SPECIFIED (I.E. UNLESS ; LSTVAL<0,2>=0). THE LINE WITH OR WITHOUT SEQUENCE NUMBER IS ; OUTPUT TO Ž, BEQ 4$ ;DON'T CONVERT THE FILE TYPE MOVB #'.,(R2)+ ; UNPACK AND MOVE FILE TYPE MOV #SRCFDB+F.FNB+N.FTYP,R1 MOV #1,R3 ;1 WORD OF FILE TYPE CALL MOVSTR MOVB #TAB,(R2)+ ;INSERT A TAB ; MOVE OPTIONS TO HEADER 4$: CALL MOVOPT MOVB #LF,(R2)+ ;INSERT A LINE FEED SUB #HEDFIL,R2 ;GET STRING LENGTH MOV R2,OPTLEN ;SET LENGTH FOR LATER OUTPUT RETURN ; SUBROUTINE TO CONVERT AND MOVE STRING ; R1 - ADDRESS OF RADIX50 WORDS TO CONVERT ; R2 - OUTPUT STRING POINTER (UPDATED) ; R3 - MAXIMUM NV R2,-(SP) MOV (PC)+,-(SP) .RAD50 /.../ MOV (PC)+,-(SP) .RAD50 /PRT/ MOV SP,R1 MOV R0,R2 ;COPY FBD ADDRESS ADD #F.FNB,R2 MOV N.DID+4(R2),-(SP);PUSH DIRECTORY ID MOV N.DID+2(R2),-(SP); MOV N.DID(R2),-(SP) ; MOV N.FID+4(R2),-(SP) MOV N.FID+2(R2),-(SP) MOV N.FID(R2),-(SP) MOV N.UNIT(R2),-(SP) MOV N.DVNM(R2),-(SP) MOV N.FVER(R2),-(SP) MOV N.FTYP(R2),-(SP) MOV N.FNAM+4(R2),-(SP) MOV N.FNAM+2(R2),-(SP) MOV N.FNAM(R2),-(SP) MOV SP,R2 CLOSE$ R0 SDRQ$S R1,,,,,R2 RORTHE LISTING CHANNEL. ; ; REGISTER USAGE ; INPUT - R0 IS PARAMETER WORD AS ABOVE ; - R4 IS SOURCE POINTER ; - R5 IS SOURCE INPUT COUNT ; OUTPUT - NONE ; MODIFY - ALL ; LSTMOV: MOV R0,-(SP) ;SAVE PARAMETER ON STACK MOV #LSTBUF+4,R0 ;POINTER TO LISTING BUFFER MOV #" ,-(R0) ;BLANK OUT SEQ NO FIELDS MOV #" ,-(R0) TSTB (SP) ;PRINT SEQ NO? BPL 1$ ;NO MOV R0,-(SP) ;CONVERT SEQUENCE NO. TO ASCII MOV SEQNO,-(SP) MOV #30004,-(SP) ;FILL= "0", WIDTH= 4 CALL CVTDEC ;CVTDEC’UMBER OF BYTES TO MOVE ; R4, R5 - TEMPORARY MOVSTR: 10$: MOV #TMPBUF,R5 MOV #3,R4 ;3 RADIX50 CHARACTERS PER WORD MOV R5,-(SP) ;RADIX50 TO CONVERT MOV (R1)+,(R5)+ ;MOVE 1 WORD FROM SOURCE CLR (R5)+ ;APPEND A WORD OF 0 MOV R5,-(SP) ;TEMPORARY ASCII BUFFER CALL UNPK50 ;UNPACK 3 BYTES CMP (SP)+,(SP)+ ;POP ARGUMENTS FROM STACK 12$: MOVB (R5)+,(R2)+ ;MOVE STRING TO ASCII BUFFER BNE 14$ ;MOVE QUITS ON 0 BYTE OR COUNT DEC R2 ;ADJUST OUTPUT POINTER RETURN 14$: SOB R4,12$ ;COUNT CHA“ R1 ADD #<13.*2>+<2*2>,SP ROL R1 MOV (SP)+,R2 MOV (SP)+,R1 .IF NB ERR BCC LBL CALL ERR .ENDC LBL: .ENDM .MACRO GCMLB$ MAXD,PRMPT,UBUF,?FILNM,?BUF .MCALL FDBDF$,FDAT$A,FDOP$A,NMBLK$,FDOFF$,FDBF$A FDBDF$ FDAT$A 2 FDOP$A 1,,FILNM FDBF$A ,,1 .BYTE 0,3; DEFAULT @ AND .BLKW 4 .IIF NB , .BYTE 0,MAXD,0,0 .IIF B , .BLKB 4 .IIF NB , .WORD UBUF .IIF B , .WORD BUF $$$=. .IIF NB , .ASCII <15><12>%PRMPT>% .IIF B , .ASCII <15><12>% >”(#LSTBUF,.SEQNO,REQ) ADD #6,SP 1$: MOV SRCLIN,R2 ;POINT R2 AT FIRST BYTE PAST ADD SRCLIN+2,R2 ; END OF STATEMENT BUFFER SUB #2,R2 ;ROOM FOR END CHARACTERS MOV SRCPTR,R3 ;PICK UP CURRENT STMNT BUFFR PTR CMP R3,R2 ;HAS BUFFER OVERFLOWED ALREADY BHIS 4$ ;YES 3$: CALL GETCHR ;LOOK AT NEXT CHARACTER BVS 5$ ;NONE LEFT TST (SP) ;MOVE IT TO BUFFER? BPL 3$ ;NO MOVB R0,(R3)+ ;YES CMP R3,R2 ;BUFFER OVERFLOW? BLO 3$ ;NO, CONTINUE TRAP 3 ;YES, SEND MESSAGE 4$: CLR (SP) ;QUIT –RACTERS MOVED SOB R3,10$ ;COUNT WORDS MOVED RETURN ; SUBROUTINE TO MOVE OPTIONS TO LISTING HEADER ; R0 - POINTER TO LIST OF OPTIONS ; R1 - STRING POINTER ; R2 - OUTPUT STRING POINTER (UPDATED) ; MOVOPT: MOV #OPTLST,R0 ;POINTER TO OPTION LIST 2$: MOV (R0)+,R1 ;GET STRING POINTER FROM LIST BEQ 6$ ;END OF LIST CMP @(R0)+,(R0)+ ;CHECK IF OPTION IS SET BNE 2$ ;NO, TRY NEXT ; MOVE ASCIZ STRING POINTED TO BY R1 4$: MOVB (R1)+,(R2)+ BNE 4$ ;MOVE SOME MORE DEC R2 ;DELETE NULL BR 2—% .=$$$+6 FILNM: NMBLK$ CMI,CMD FDOFF$ DEF$L .IIF NB , .BLKB *<6+S.FNB> .IIF B ,BUF: .BLKB 82. .ENDM GCMLB$ .MACRO GCML$ NAME,ADPR,LNPR .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L LDR0$ NAME .IF NB MOV LNPR,G.PSDS(R0) .IIF B , .ERROR .IIF NB , MOV ADPR,G.PSDS+2(R0) .ENDC .IIF B , CLR G.PSDS(R0) .GLOBL .GCML1 JSR PC,.GCML1 .ENDM GCML$ .MACRO RCML$ NAME .MCALL LDR0$ LDR0$ NAME .GLOBL .GCML2 JSR PC,.GCML2 .ENDM RCML$ .MACRO GCMLD˜MOVING CHARACTERS BR 3$ 5$: TST (SP)+ ;MOVING CHARACTERS TO BUFFER? BPL 6$ ;NO MOVB #1,(R3)+ ;APPEND END-OF-CARD CHARACTER 6$: MOV R3,SRCPTR ;UPDATE STMNT BUFFER POINTER MOV CURLIN,R0 ;PICK UP CURRENT LINE LENGTH CLR CURLIN ;NO LONGER A LINE IN SRCBUF ADD #8.,R0 ;ACCOUNT FOR SEQ NO BIT #3,LSTVAL ;IS LISTING NECESSARY BEQ 9$ ;NO MOV #LSTBUF,-(SP) ;LSTREC(#LSTBUF,.R0) MOV R0,-(SP) CALL LSTREC CMP (SP)+,(SP)+ 9$: RETURN ;AND RETURN .SBTTL NXTLAB - SCAN STMT LABEL OF NEXš$ ;CHECK FOR MORE OPTIONS 6$: RETURN .SBTTL DATA STORAGE .PSECT IMPURE,D TMPBUF: .BLKW 16. ;OWN STORAGE FOR THE MODULE TSKLIM: .LIMIT ;TASK ADDRESS LIMITS ;TSKLIM[0] IS LOWER BOUND ;TSKLIM[1] IS UPPER BOUND FTNID: .WORD VERLEN,VERSON ;STRING DESCRIPTOR OF /ID STRING IDFLAG: .BLKW ;NON-ZERO IF /ID REQUESTED ERROUT: .WORD 0 .BYTE ERRLEN ERRSUM: .ASCII /.. ERROR/ ERRNUM: .ASCII /S/ ERRLEN=.-ERRSUM .EVEN ; MESSAGE OUTPUT (MO) TASK PARAMETERS MOUT: MOUT$ MOSTR,MO›$ GBL .MCALL FDBSZ$ FDBSZ$ .IF IDN , .GLOBL G.ERR,G.MODE,G.PSDS,G.CMLD .GLOBL GE.COM,GE.IND,GE.IOR,GE.OPR,GE.BIF,GE.MDE,GE.EOF .ENDC G.ERR =S.FDB G.MODE =G.ERR+1 G.PSDS =G.ERR+2 G.CMLD =G.ERR+6 GE.COM =1 GE.IND =2 GE.IOR =-1 GE.OPR =-2 GE.BIF =-3 GE.MDE =-4 GE.EOF =-10. .MACRO GCMLD$ GBLX .ENDM .ENDM GCMLD$ .MACRO CSI$1 CSBLK,BUFF,LEN .GLOBL .CSI1 .MCALL CSI$,LDR0$ .IF NDF C.SIZE CSI$ .ENDC LDR0$ CSBLK .IF NB MOV BUFF,C.CMLD+2(R0) .ENDC .œT LINE ; GLOBAL ROUTINE BLISS NXTLAB(DEST) ; ; FUNCTION ; LOOKS AHEAD AT LABEL OF NEXT SOURCE LINE ; USED PRIMARILY BY ARITHMETIC-IF SYNTAX ROUTINE ; ; INPUTS ; DEST - ADDRESS WHERE RAD50 RESULT IS RETURNED ; ; OUTPUTS ; VALUE - NONE ; DEST - RAD50 REPRESENTATION OF LABEL (0 IF NO LABEL) ; DEST =16 ;STACK OFFSET( AFTER .SAVR1) TO PARAMETER NXTLAB::SAVR1 MOV DEST(SP),R0 ;INITIALIZE OUTPUT VALUE CLR (R0)+ CLR (R0)+ MOV #SRCBUF,R4 ;SCAN STMT LABEL FIELD OF NEXTžPRM,0,CONT,SY$STM,,,,8. MOSTR: .BLKW 2 ;FORMAT STRING DESCRIPTOR MOPRM: .BLKW 6 ;PARAMETER BLOCK MOFM1: .ASCII ^F4P -- %VA%L^ MOFM2: .ASCII ^F4P -- %VA^ MOFM3: .ASCII ^%LF4P -- %VA^ MOLN1=.-MOFM1 MOLN2=.-MOFM2 MOEXT=.-MOFM3 .EVEN ; DATA SET POINTER FOR MESSAGE TEXT FILE MSG6WD::.WORD 3,MSGDEV ;DEVICE STRING DESCRIPTOR .WORD 5,MSGDIR ;DIRECTORY STRING DESCRIPTOR .WORD 10.,MSGFIL ;FILE NAME STRING DESCRIPTOR MSGDEV: .ASCII /SY0/ MSGDIR: .ASCII /[1,2]/ MSGFIL: .ASCII /F4PCOM.MSG/ .ŸIF NB MOV LEN,C.CMLD(R0) .ENDC JSR PC,.CSI1 .ENDM .MACRO CSI$2 CSBLK,IO,SWTAB .GLOBL .CSI2 .MCALL CSI$,LDR0$ .IF NDF C.SIZE CSI$ .ENDC LDR0$ CSBLK .IF NB .IF IDN , MOVB #CS.INP,(R0) .IFF .IF IDN , MOVB #CS.OUT,(R0) .IFF .ERROR .ENDC .ENDC .ENDC .IF NB MOV SWTAB,C.SWAD(R0) .ENDC JSR PC,.CSI2 .ENDM .MACRO CSI$SW SW,MK,MKW,CLR,NEGS,VALTAB $$=. .IF NB SW .ASCII /SW/ .IFF .ERROR .ENDC .=$$+2 .IF NB M  LINE MOV CURLIN,R5 ;LENGTH OF NEXT LINE BLE 5$ ;SKIP IF NO LINE IN BUFFER CALL SLCC ;SLCC(#SRCBUF, .CURLIN) BCS 5$ ;ERROR IN STMT LABEL FIELD MOV DEST(SP),R0 ;PACK AND MOVE LABEL CALL PAKLAB 5$: RETURN .SBTTL PAKLAB - PACK AND MOVE STMT LABEL ; ROUTINE BLISSREG0 PAKLAB(R0) ; ; FUNCTION ; RADIX50 PACK AND MOVE LABEL FROM TLINE TO (R0) ; INPUTS ; R0 POINTS TO DESTINATION ADDRESS ; PAKLAB: TSTB TLINE+1 ;IF LABEL IS NULL, RETURN BEQ 5$ MOV #TLINE,-(SP) MOV R0,-(SPЂEVEN ; DEFAULT FILE NAME BLOCKS LSTNAM::NMBLK$ ,LST,,SY,0 OBJNAM::NMBLK$ ,OBJ,,SY,0 SRCNAM::NMBLK$ ,FTN,,SY,0 WKLST: .WORD SRCCHA; DLLST: .WORD LSTCHA,OBJCHA,0; .SBTTL SWITCH AND CSI BLOCKS ; CSI CONTROL BLOCK CSIBLK: .BLKB C.SIZE; .EVEN ; CSI MASK DEFINITIONS TRMSK =000004 OBJSWT: CSI$SW ID,1 ,IDFLAG ,SET,NEG CSI$ND SRCSWT: CSI$SW CK,1 ,ARYCHK ,SET,NEG CSI$SW CO,0 , ,SET,,COVAL CSI$SW DE,1 ,DEBGSW ,SET,NEG CSI$SW I4,1 ,INT4SW ,SET,NEG CSI$SW ID,1 ,IDFLAG ,SET,NEG ЃK .WORD MK .IFF .WORD 0 .ENDC $$=0 .IF NB CLR .IF IDN , $$=1 .IFF .IF IDN , .IFF .ERROR .ENDC .ENDC .ENDC .WORD MKW+$$ $$=0 .IF NB NEGS .IF IDN , $$=1 .IFF .ERROR .ENDC .ENDC .WORD VALTAB+$$ .ENDM .MACRO CSI$ND .WORD 0 .ENDM .MACRO CSI$SV TYPE,ADDR,LEN,VALTAB .IF NB VALTAB VALTAB: .ENDC .IF NB TYPE .IF IDN , .BYTE 1 .IFF .IF IDN , .BYTE 2 .IFF .ERROR .ENDC .ENDC .) CALL PACK50 ;PACK50(#TLINE, .R0) CMP (SP)+,(SP)+ ;POP ARGUMENTS 5$: RETURN .END І CSI$SW LA,1 ,LA000 ,SET,NEG CSI$SW TR,TRMSK, ,SET,NEG,TRVAL CSI$SW WF,0 , ,SET,,WFVAL CSI$SW OP,0 , ,SET,,OPVAL CSI$SW CG,0 , ,SET,,CGVAL CSI$SW FI,0 , ,SET,,FIVAL LSTSWT: CSI$SW LI,0 , ,SET,,LIVAL CSI$SW SP,1 ,SPOOL ,SET,NEG CSI$ND ; SWITCH VALUE TABLES LIVAL: CSI$SV NUMERIC,LSTVAL,2 CSI$ND COVAL: CSI$SV NUMERIC,CONCNT,2 CSI$ND TRVAL: CSI$SV ASCII,TMPBUF,6 CSI$ND WFVAL: CSI$SV NUMERIC,WFPARM,2 CSI$SV NUMERIC,WFPARM+2,2 CSI$ND OPVAL: CSI$SV NUMERIC,OPSWCH,2 CSЇIFF .BYTE 1 .ENDC .IF NB LEN .BYTE LEN .IFF .ERROR .BYTE 0 .ENDC .IF NB ADDR .WORD ADDR .IFF .ERROR .WORD 0 .ENDC .ENDM .MACRO LDR0$ ARG .IIF B,ARG,.MEXIT .NTYPE PAR$$$,ARG .IIF EQ,PAR$$$,.MEXIT MOV ARG,R0 .ENDM .MACRO CSI$ GBL .IF IDN , .GLOBL C.TYPR,C.STAT,C.CMLD,C.DEVD,C.DIRD,C.FILD,C.SWAD,C.MKW1,C.MKW2 .GLOBL C.SIZE,C.DSDS,CS.INP,CS.OUT .GLOBL CS.NMF,CS.DIF,CS.DVF,CS.WLD,CS.MOR .ENDC C.TYPR =0 C.STAT =1 C.CMLD =2 C.DEVD =6 C.DIRD =12 ЊI$ND CGVAL: CSI$SV NUMERIC,CGSWCH,2 CSI$ND FIVAL: CSI$SV NUMERIC,FISWCH,2 CSI$ND ; DECODING TABLE FOR /TR SWITCH ; .MACRO TR STR,VAL .BYTE VAL .ASCIZ ^STR^ .ENDM TRVALS: TR ,0 TR ,1 TR ,3 TR ,7 TR ,7 .BYTE -1 .EVEN ; TABLES FOR PRINTING SWITCH OPTIONS IN LISTING HEADER ; OPTLST: .WORD 1$,ARYCHK,1 .WORD 2$,DEBGSW,1 .WORD 3$,INT4SW,1 .WORD 4$,SEQSUP,7 .WORD 5$,SEQSUP,3 .WORD 6$,SEQSUP,1 .WORD 0 1$: .ASCIZ ^/CK^ 2$: .ASЋ C.FILD =16 C.SWAD =22 C.MKW1 =24 C.MKW2 =26 C.SIZE =54 C.DSDS =C.DEVD CS.INP =1 CS.OUT =2 CS.NMF =1 CS.DIF =2 CS.DVF =4 CS.WLD =10 CS.MOR =20 .MACRO CSI$ X .ENDM CSI$ .ENDM CSI$ .MACRO MOUT$S STR,PRM,NUM,ACT,DST,BUF,SIZ,IOST,LUN,ERR,NOW .MCALL RVP$,MVB$,MOV$,DIR$,MODF$,MOWT$S MODF$ .NLIST $$$T3=9. .IIF NB ,$$$T3=10. .IIF NB ,$$$T3=12. .LIST .IIF EQ $$$T3-12., RVP$ BUF,SIZ .IIF GT $$$T3-9., MOV$ PRM RVP$ NUM,STR .IF B MOVB #HE$ADR!SY$STM,-(SP) .ЎCIZ ^/DE^ 3$: .ASCIZ ^/I4^ 4$: .ASCIZ ^/TR:ALL^ 5$: .ASCIZ ^/TR:BLOCKS^ 6$: .ASCIZ ^/TR:NAMES^ .EVEN ; SWITCH DEFAULT VALUES ; CK000:: .WORD 0 ; /-CK CO000:: .WORD 5. ; /CO:5 DE000:: .WORD 0 ; /-DE I4000:: .WORD 0 ; /-I4 LI000:: .WORD 1 ; /LI:1 SP000:: .WORD 1 ; /SP TR000:: .WORD 3 ; /TR:BLOCKS .SBTTL COMMAND ERROR MESSAGES ; ; COMMAND LEVEL MESSAGES ; .MACRO MSG MTEXT,TEXTDS .IF NB .IFT .WORD TEXTDS .IFF .WORD 0 .ENDC .BYTE 1$-.-1 .ASCII ^MTEXT^ 1ЏIFF .IF IDN , MOVB #BU$FFR,-(SP) .IFF .IF IDN , MOVB #HE$ADR!SY$STM!BU$FFR,-(SP) .IFF .IF IDN , MOVB #HE$ADR!SY$STM,-(SP) .IFF MOVB DST,-(SP) .ENDC .ENDC .ENDC .ENDC .IF B MOVB #C$ONT,1(SP) .IFF .IF IDN , MOVB #A$BRT,1(SP) .IFF .IF IDN , MOVB #S$USP,1(SP) .IFF .IF IDN , MOVB #C$ONT,1(SP) .IFF MOVB ACT,1(SP) .ENDC .ENDC .ENDC .ENDC RVP$ IOST, MOV #30.,-(SP) .IF NВ$: .EVEN .ENDM MSG .EVEN CSIM1: MSG ,CSIBLK+C.FILD CSIM2: MSG CSIM3: MSG CSIM4: MSG CSIM5: MSG CSIM6: MSG CSIM7: MSG CSIM8: MSG ,FTNID CMLM2: MSG CMLM3: MSG CMLM4: MSG CMLM5: MSG ГB .IFT MOV LUN,-(SP) .IFF MOV .MOLUN,-(SP) .ENDC RVP$ <<.BYTE 1,$$$T3>>,#400 DIR$ ,ERR .IF B MOWT$S ACT,ERR .IFF .IF DIF , MOWT$S ACT,ERR .ENDC .ENDC .ENDM MOUT$S .MACRO MOUT$C STR,PRM,NUM,ACT,DST,BUF,SIZ,IOST,LUN,CS,ERR,NOW .MCALL MOUT$,MOWT$S,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF MOUT$ STR,PRM,NUM,ACT,DST,BUF,SIZ,IOST,LUN .IFT .PSECT CS DIR$ #$$$,ERR .IF B MOWT$S ACT,ERR .IFF .IF DIF , MOWT$S AC .EVEN .END ЗT,ERR .ENDC .ENDC .ENDC .ENDM MOUT$C .MACRO MOUT$ STR,PRM,NUM,ACT,DST,BUF,SIZ,IOST,LUN .MCALL OFF$,MODF$ .IF NDF $$$GLB MODF$ .NLIST $$$T3=9. .IIF NB ,$$$T3=10. .IIF NB ,$$$T3=12. .LIST .BYTE 1,$$$T3 .WORD 400 .WORD LUN .BYTE 30.,0 .WORD IOST .WORD 0 .IF B .BYTE HE$ADR!SY$STM .IFF .IF IDN , .BYTE BU$FFR .IFF .IF IDN , .BYTE HE$ADR!SY$STM!BU$FFR .IFF .IF IDN , .BYTE Л HE$ADR!SY$STM .IFF .BYTE DST .ENDC .ENDC .ENDC .ENDC .IF B .BYTE C$ONT .IFF .IF IDN , .BYTE A$BRT .IFF .IF IDN , .BYTE S$USP .IFF .IF IDN , .BYTE C$ONT .IFF .BYTE ACT .ENDC .ENDC .ENDC .ENDC .WORD NUM .WORD STR .IIF GT $$$T3-9., .WORD PRM .IIF EQ $$$T3-12., .WORD BUF,SIZ .ENDC .IF NDF M.OLUN .NLIST .IRP X,<,<$$$T3,2>,,<$$$T3,2>,,<$$$T3,2>> OFF$ X П .ENDM .IRP X,<,,,,> OFF$ X .ENDM OFF$ M.OBUF,2 OFF$ M.OSIZ,2 .LIST .ENDC .ENDM MOUT$ .MACRO MOWT$S ACT,ERR,?LBL .MCALL EXIT$S,WTSE$S .IF NB WTSE$S #30. .IFF .IF IDN , BCC LBL EXIT$S LBL: WTSE$S #30. .IFF BCS LBL WTSE$S #30. LBL: .ENDC .ENDC .ENDM MOWT$S .MACRO MODF$ .IIF NDF C$ONT, C$ONT=0 .IIF NDF A$BRT,A$BRT=1 .IIF NDF S$USP, S$USP=2 .IIF NDF SY$STM, SY$STM=1 .IIF NDF BУU$FFR, BU$FFR=4 .IIF NDF HE$ADR, HE$ADR=10 .ENDM MODF$ .MACRO MOWA$S .MCALL WTSE$S WTSE$S #30. .ENDM MOWA$S .TITLE FCSMAC-FILE CONTROL SERVICES MACRO DEFINITIONS .IDENT /0716/ .MACRO FCSMC$ .MCALL OPEN$R,OPEN$W,OPEN$M,OPEN$U,OPEN$A,CLOSE$ .MCALL OPNS$R,OPNS$W,OPNS$M,OPNS$U,OPNS$A .MCALL READ$,WRITE$,WAIT$,GET$,PUT$,DELET$,FINIT$ .MCALL FSRSZ$,FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A,FDBK$A .MCALL FDAT$R,FDRC$R,FDOP$R,FDBF$R,FDBK$R,NMBLK$ .MACRO FCSMC$ .ENDM FCSMC$ .ENDM FCSMC$Ч .MACRO OPEN$R FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FO.RD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPEN$R .MACRO OPEN$W FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FO.WRT,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPEN$W .MACRO OPEN$M FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FO.MFY,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPEN$M .MACRO OPEN$U FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FO.UPD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPEN$U Ы.MACRO OPEN$A FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FO.APD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPEN$A .MACRO OPNS$R FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FA.SHR!FO.RD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPNS$R .MACRO OPNS$W FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FA.SHR!FO.WRT,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPNS$W .MACRO OPNS$M FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FA.SHR!FO.MFY,LUN,FNPT,,RACC,URBA,URBS,ERЯR .ENDM OPNS$M .MACRO OPNS$U FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FA.SHR!FO.UPD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPNS$U .MACRO OPNS$A FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FDB,#FA.SHR!FO.APD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPNS$A .MACRO OPNT$D FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPNT$W OPNT$W FDB,LUN,FNPT,RACC,URBA,URBS BCS .+6 JSR PC,.MRKDL ERR$ ERR .ENDM OPNT$D .MACRO OPNT$W FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OPEN$ OPEN$ FгDB,#FA.TMP!FO.WRT,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OPNT$W .MACRO OPEN$ FDB,FACC,LUN,FNPT,DFNB,RACC,URBA,URBS,ERR .MCALL FDOP$R,FDRC$R,ERR$,CMOV$B FDOP$R FDB,LUN,FNPT,DFNB,FACC FDRC$R ,RACC,URBA,URBS .GLOBL .OPEN JSR PC,.OPEN ERR$ ERR .ENDM OPEN$ .MACRO OFID$R FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFID$ OFID$ FDB,#FO.RD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFID$R .MACRO OFID$W FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFID$ OFID$ FDB,#FO.WRT,LUN,FNPT,,RACC,URBA,URBS,ERR .ENзDM OFID$W .MACRO OFID$M FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFID$ OFID$ FDB,#FO.MFY,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFID$M .MACRO OFID$U FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFID$ OFID$ FDB,#FO.UPD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFID$U .MACRO OFID$A FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFID$ OFID$ FDB,#FO.APD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFID$A .MACRO OFID$ FDB,FACC,LUN,FNPT,DFNB,RACC,URBA,URBS,ERR .MCALL FDOP$R,FDRC$R,ERR$,CMOV$B FDOP$R FDB,LUN,FNPT,DFNB,лFACC FDRC$R ,RACC,URBA,URBS .GLOBL .OPFID JSR PC,.OPFID ERR$ ERR .ENDM OFID$ .MACRO OFNB$R FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFNB$ OFNB$ FDB,#FO.RD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFNB$R .MACRO OFNB$W FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFNB$ OFNB$ FDB,#FO.WRT,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFNB$W .MACRO OFNB$M FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFNB$ OFNB$ FDB,#FO.MFY,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFNB$M .MACRO OFNB$U FDB,LUN,FNPT,RACC,URBA,URBпS,ERR .MCALL OFNB$ OFNB$ FDB,#FO.UPD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFNB$U .MACRO OFNB$A FDB,LUN,FNPT,RACC,URBA,URBS,ERR .MCALL OFNB$ OFNB$ FDB,#FO.APD,LUN,FNPT,,RACC,URBA,URBS,ERR .ENDM OFNB$A .MACRO OFNB$ FDB,FACC,LUN,FNPT,DFNB,RACC,URBA,URBS,ERR .MCALL FDOP$R,FDRC$R,ERR$,CMOV$B FDOP$R FDB,LUN,FNPT,DFNB,FACC FDRC$R ,RACC,URBA,URBS .GLOBL .OPFNB JSR PC,.OPFNB ERR$ ERR .ENDM OFNB$ .MACRO CLOSE$ FDB,ERR .MCALL LDFDB$,ERR$ LDFDB$ FDB .GLOBL .CLOSE JSR PC,.CLOSE у ERR$ ERR .ENDM CLOSE$ .MACRO READ$ FDB,BKAD,BKSZ,BKVB,BKEF,BKST,BKDN,ERR .MCALL FDBK$R,ERR$ FDBK$R FDB,BKAD,BKSZ,BKVB,BKEF,BKST,BKDN .GLOBL .READ JSR PC,.READ ERR$ ERR .ENDM READ$ .MACRO WRITE$ FDB,BKAD,BKSZ,BKVB,BKEF,BKST,BKDN,ERR .MCALL FDBK$R,ERR$ FDBK$R FDB,BKAD,BKSZ,BKVB,BKEF,BKST,BKDN .GLOBL .WRITE JSR PC,.WRITE ERR$ ERR .ENDM WRITE$ .MACRO WAIT$ FDB,EFN,BKST,ERR .MCALL LDFDB$,CMOV$W,CMOV$B,ERR$ LDFDB$ FDB CMOV$B EFN,F.EFN CMOV$W BKST,F.BKST .GLOBL .WAIT чJSR PC,.WAIT ERR$ ERR .ENDM WAIT$ .MACRO GET$ FDB,INADR,MAXCNT,ERR .MCALL LDFDB$,CMOV$W,ERR$ LDFDB$ FDB CMOV$W INADR,F.URBD+2 CMOV$W MAXCNT,F.URBD .GLOBL .GET JSR PC,.GET ERR$ ERR .ENDM GET$ .MACRO GET$R FDB,INADR,MAXCNT,LRCNM,HRCNM,ERR .MCALL LDFDB$,CMOV$W,ERR$ LDFDB$ FDB CMOV$W INADR,F.URBD+2 CMOV$W MAXCNT,F.URBD CMOV$W LRCNM,F.RCNM+2 CMOV$W HRCNM,F.RCNM .GLOBL .GET JSR PC,.GET ERR$ ERR .ENDM GET$R .MACRO GET$S FDB,INADR,MAXCNT,ERR .MCALL LDFDB$,CMOV$W,ERыR$ LDFDB$ FDB CMOV$W INADR,F.URBD+2 CMOV$W MAXCNT,F.URBD .GLOBL .GETSQ JSR PC,.GETSQ ERR$ ERR .ENDM GET$S .MACRO PUT$ FDB,OUTADR,OUTCNT,ERR .MCALL LDFDB$,CMOV$W,ERR$ LDFDB$ FDB CMOV$W OUTADR,F.NRBD+2 CMOV$W OUTCNT,F.NRBD .GLOBL .PUT JSR PC,.PUT ERR$ ERR .ENDM PUT$ .MACRO PUT$R FDB,OUTADR,OUTCNT,LRCNM,HRCNM,ERR .MCALL LDFDB$,CMOV$W,ERR$ LDFDB$ FDB CMOV$W OUTADR,F.NRBD+2 CMOV$W OUTCNT,F.NRBD CMOV$W LRCNM,F.RCNM+2 CMOV$W HRCNM,F.RCNM .GLOBL .PUT JSR PC,.PUT я ERR$ ERR .ENDM PUT$R .MACRO PUT$S FDB,OUTADR,OUTCNT,ERR .MCALL LDFDB$,CMOV$W,ERR$ LDFDB$ FDB CMOV$W OUTADR,F.NRBD+2 CMOV$W OUTCNT,F.NRBD .GLOBL .PUTSQ JSR PC,.PUTSQ ERR$ ERR .ENDM PUT$S .MACRO DELET$ FDB,ERR .MCALL LDFDB$,ERR$ LDFDB$ FDB .GLOBL .DELET JSR PC,.DELET ERR$ ERR .ENDM DELET$ .MACRO FINIT$ .GLOBL .FINIT JSR PC,.FINIT .ENDM FINIT$ .MACRO FSRSZ$ NFILES,BFSPAC,PSECT .MCALL BDOFF$,DEF$L .IF NDF,S.BFHD BDOFF$ DEF$N DEF$L S.BFHD .ENDC .GLOBL ѓ.FSRPT .PSECT $$FSR1,GBL,OVR,D .IF NB,BFSPAC .IFT .BLKB NFILES*S.BFHD+BFSPAC .IFF .BLKB NFILES* .ENDC .PSECT PSECT .ENDM FSRSZ$ .MACRO FDBDF$ .MCALL FDBSZ$ FDBSZ$ ...PC1=. .BLKB S.FDB .ENDM FDBDF$ .MACRO FDAT$A RTYP,RATT,RSIZ,CNTG,ALOC .MCALL FDOF$L,CBYTE$,CWORD$ FDOF$L CBYTE$ ,F.RTYP CBYTE$ ,F.RATT CWORD$ ,F.RSIZ CWORD$ ,F.CNTG CWORD$ ,F.ALOC .ENDM FDAT$A .MACRO FDRC$A RACC,URBA,URBS .MCALL FDOF$L,CBYTE$,CWORDї$ FDOF$L CBYTE$ ,F.RACC CWORD$ ,F.URBD+2 CWORD$ ,F.URBD .ENDM FDRC$A .MACRO FDOP$A LUN,FNPT,DFNB,FACC .MCALL FDOF$L,CBYTE$,CWORD$ FDOF$L CBYTE$ ,F.LUN CWORD$ ,F.DSPT CWORD$ ,F.DFNB CBYTE$ ,F.FACC .ENDM FDOP$A .MACRO FDBF$A EFN,OVBS,MBCT,MBFG .MCALL FDOF$L,CBYTE$,CWORD$ FDOF$L CBYTE$ ,F.EFN CWORD$ ,F.OVBS CBYTE$ ,F.MBCT CBYTE$ ,F.MBFG .ENDM FDBF$A .MACRO FDBK$A BKAD,BKSZ,BKVB,BKEF,BKST,BKDN .MCALL ћFDOF$L,CBYTE$,CWORD$ FDOF$L CWORD$ ,F.BKDS+2 CWORD$ ,F.BKDS CWORD$ ,F.BKVB+2 CBYTE$ ,F.BKEF CWORD$ ,F.BKST CWORD$ ,F.BKDN .ENDM FDBK$A .MACRO FDAT$R FDB,RTYP,RATT,RSIZ,CNTG,ALOC .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB CMOV$B RTYP,F.RTYP CMOV$B RATT,F.RATT CMOV$W RSIZ,F.RSIZ CMOV$W CNTG,F.CNTG CMOV$W ALOC,F.ALOC .ENDM FDAT$R .MACRO FDRC$R FDB,RACC,URBA,URBS .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB CMOV$B RACC,F.RACC CMOV$W URBA,Fџ.URBD+2 CMOV$W URBS,F.URBD .ENDM FDRC$R .MACRO FDOP$R FDB,LUN,FNPT,DFNB,FACC .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB CMOV$B LUN,F.LUN CMOV$W FNPT,F.DSPT CMOV$W DFNB,F.DFNB CMOV$B FACC,F.FACC .ENDM FDOP$R .MACRO FDBF$R FDB,EFN,OVBS,MBCT,MBFG .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB CMOV$B EFN,F.EFN CMOV$W OVBS,F.OVBS CMOV$B MBCT,F.MBCT CMOV$B MBFG,F.MBFG .ENDM FDBF$R .MACRO FDBK$R FDB,BKAD,BKSZ,BKVB,BKEF,BKST,BKDN .MCALL LDFDB$,CMOV$B,CMOV$W,CMOV$2 LDFDB$ FDB CMOV$W BKAD,F.BKDS+2 CMOV$W BKSZ,F.BKDS CMOV$2 BKVB,F.BKVB CMOV$B BKEF,F.BKEF CMOV$W BKST,F.BKST CMOV$W BKDN,F.BKDN .ENDM FDBK$R .MACRO FDBSZ$ .IIF DF,S.FDB,.MEXIT .MCALL FDOFF$,DEF$L FDOFF$ DEF$N DEF$L S.FDB .ENDM FDBSZ$ .MACRO FDOF$L .MCALL FDOFF$ FDOFF$ DEF$L .ENDM FDOF$L .MACRO NMBLK$ FNAME,FTYPE,VERS,DEVNAM,UNIT .MCALL RAD50$,CWORD$,NBOF$L NBOF$L .IIF NDF,...PC1,...PC1=0 ...PC3=...PC1 ...PC1=. .=...PC1+N.FNAM RAD50$ ,S.FNAM/2 .=...PC1+N.FTYP RAD50$ ,S.FTYP/2 CWORD$ ,N.FVER .IF NB,DEVNAM .=...PC1+N.DVNM .WORD "DEVNAM .ENDC CWORD$ ,N.UNIT .=...PC1+S.FNB ...PC1=...PC3 .ENDM NMBLK$ .MACRO NBOF$L .MCALL NBOFF$ NBOFF$ DEF$L .ENDM NBOF$L .MACRO LDFDB$ FDB .IIF B,FDB,.MEXIT .NTYPE PAR$$$,FDB .IIF EQ,PAR$$$,.MEXIT MOV FDB,R0 .ENDM LDFDB$ .MACRO CMOV$W VAR,OFFSET .IF IDN,<#0>, CLR OFFSET(R0) .MEXIT .ENDC .IIF NB,VAR, MOV VAR,OFFSET(R0) .ENDM CMOV$W .MACRO CMOV$B VAR,OFFSET .IF IDN,<#0>, CLRB OFFSET(R0) .MEXIT .ENDC .IIF NB,VAR, MOVB VAR,OFFSET(R0) .ENDM CMOV$B .MACRO CMOV$2 VAR,OFFSET .IIF B,VAR,.MEXIT MOV VAR,-(SP) MOV @(SP),OFFSET(R0) ADD #2,(SP) MOV @(SP)+,OFFSET+2(R0) .ENDM CMOV$2 .MACRO CBYTE$ VAR,OFFSET .IF NB,VAR ...PC2=. .=...PC1+OFFSET .BYTE VAR .=...PC2 .ENDC .ENDM CBYTE$ .MACRO CWORD$ VAR,OFFSET .IF NB,VAR ...PC2=. .=...PC1+OFFSET .WORD VAR .=...PC2 .ENDC .ENDM CWORD$ .MACRO FCSBT$ GLOBL .MCALL DEFIN$  ...GBL=0 .IIF IDN,,,...GBL=1 DEFIN$ FD.FTN,1 DEFIN$ FD.CR,2 DEFIN$ FD.BLK,10 DEFIN$ FD.RWM,1 DEFIN$ FD.RAN,2 DEFIN$ FD.PLC,4 DEFIN$ FD.INS,10 DEFIN$ FD.REC,1 DEFIN$ FD.CCL,2 DEFIN$ FD.TTY,4 DEFIN$ FD.DIR,10 DEFIN$ FD.SDI,20 DEFIN$ FD.SQD,40 DEFIN$ NB.VER,1 DEFIN$ NB.TYP,2 DEFIN$ NB.NAM,4 DEFIN$ NB.SVR,10 DEFIN$ NB.STP,20 DEFIN$ NB.SNM,40 DEFIN$ NB.DIR,100 DEFIN$ NB.DEV,200 DEFIN$ NB.SD1,400 DEFIN$ NB.SD2,1000 DEFIN$ R.FIX,1 DEFIN$ R.VAR,2 DEFIN$ FA.RD,1 DEFIN$ FA.WRT,2 DEFIN$ FA.EXT,4 DEFIN$ FA.CRE,10 DEFIN$ FA.TMP,20 DEFIN$ FA.SHR,40 DEFIN$ FA.APD,100 DEFIN$ FA.NSP,100 DEFIN$ FO.RD,FA.RD DEFIN$ FO.WRT,FA.WRT!FA.EXT!FA.CRE DEFIN$ FO.APD,FA.WRT!FA.EXT!FA.APD DEFIN$ FO.MFY,FA.WRT DEFIN$ FO.UPD,FA.WRT!FA.EXT DEFIN$ FD.RAH,1 DEFIN$ FD.WBH,2 .MACRO FCSBT$ ARG .ENDM FCSBT$ .ENDM FCSBT$ .MACRO DEFIN$ SYM,VAL .IIF EQ,...GBL-1,.GLOBL SYM SYM=VAL .ENDM DEFIN$ .MACRO FDOFF$ OFFSET .MCALL OFFSET,DEF$I,NBOFF$ NBOFF$ OFFSET DEF$I 0 OFFSET F.RTYP,1 OFFSET F.RATT,1 OFFSET F.RSIZ,2 OFFSET F.HIBK,4 OFFSET F.EFBK,4 OFFSET F.FFBY,2 OFFSET S.FATT OFFSET F.RACC,1 OFFSET F.RCTL,1 OFFSET F.BKDS OFFSET F.URBD,4 OFFSET F.BKST OFFSET F.NRBD,2 OFFSET F.BKDN OFFSET ,2 OFFSET F.OVBS OFFSET F.NREC,2 OFFSET F.EOBB,2 OFFSET F.CNTG OFFSET F.RCNM,2 OFFSET F.STBK OFFSET ,2 OFFSET F.ALOC,2 OFFSET F.LUN,1 OFFSET F.FACC,1 OFFSET F.DSPT,2 OFFSET F.DFNB,2 OFFSET F.BKEF OFFSET F.EFN,1 OFFSET F.BKP1,1 OFFSET F.ERR,2 OFFSET F.MBCT,1 OFFSET F.MBC1,1 OFFSET F.MBFG,1 OFFSET F.BGBC,1 OFFSET F.VBSZ,2 OFFSET F.BBFS,2 OFFSET F.BKVB OFFSET F.VBN,4 OFFSET F.BDB,2 OFFSET ,8. OFFSET F.FNB,S.FNB .IIF IDN,,,.MEXIT .IF IDN,, .GLOBL F.FNAM,F.FTYP,F.FVER,F.DVNM,F.UNIT .ENDC F.FNAM=N.FNAM+F.FNB F.FTYP=N.FTYP+F.FNB F.FVER=N.FVER+F.FNB F.DVNM=N.DVNM+F.FNB F.UNIT=N.UNIT+F.FNB OFFSET S.FDB .MACRO FDOFF$ ARG .ENDM FDOFF$ .ENDM FDOFF$ .MACRO BDOFF$ OFFSET .MCALL OFFSET,DEF$I DEF$I 0 OFFSET ,4 OFFSET B.VBN,4 OFFSET B.BBFS,2 OFFSET B.NXBD,2 OFFSET ,1 OFFSET B.BFST,1 OFFSET ,2 OFFSET S.BFHD .IIF IDN,,,.MEXIT .MACRO BDOFF$ ARG .ENDM BDOFF$ .ENDM BDOFF$ .MACRO NBOFF$ OFFSET .MCALL OFFSET,DEF$I,DEF$L DEF$I 0 OFFSET S.FNAM OFFSET S.FTYP OFFSET S.FNTY OFFSET S.FNBW S.FNAM=6 S.FTYP=2 S.FNTY=/2 OFFSET N.FID,6 OFFSET N.FNAM,S.FNAM OFFSET N.#FTYP,S.FTYP OFFSET N.FVER,2 OFFSET S.NFEN DEF$L S.NFEN OFFSET N.STAT,2 OFFSET N.NEXT,2 OFFSET N.DID,6 OFFSET N.DVNM,2 OFFSET N.UNIT,2 OFFSET S.FNB DEF$L S.FNB S.FNBW=S.FNB/2 .IIF IDN,,,.MEXIT .MACRO NBOFF$ ARG .ENDM NBOFF$ .ENDM NBOFF$ .MACRO FSROF$ OFFSET .MCALL OFFSET,DEF$I,DEF$L DEF$I 0 OFFSET ,4 OFFSET A.BFSR,2 OFFSET A.EFSR,2 OFFSET A.OWUI,2 OFFSET A.FIPR,2 OFFSET A.IOST,4 OFFSET A.DFDR,24. OFFSET A.DFBC,2 OFFSET S.FSR2 DEF$L S.F'SR2 DEF$I 0 OFFSET ,14. OFFSET D.DFID,6 OFFSET D.DFDV,2 OFFSET D.DFUN,2 .IIF IDN,,,.MEXIT .MACRO FSROF$ ARG .ENDM FSROF$ .ENDM FSROF$ .MACRO FDSOF$ OFFSET .MCALL OFFSET,DEF$I,DEF$L DEF$I 0 OFFSET N.DEVD,4 OFFSET N.DIRD,4 OFFSET N.FNMD,4 OFFSET S.FIDS .IF IDN,, DEF$L S.FIDS .MEXIT .ENDC .MACRO FDSOF$ ARG .ENDM FDSOF$ .ENDM FDSOF$ .MACRO DEF$G VAR,SIZ .MCALL DEF$L .IIF NB,VAR,.GLOBL VAR DEF$L VAR,SIZ .ENDM DEF$G .MACRO +DEF$N VAR,SIZ .MCALL DEF$L DEF$L ,SIZ .ENDM DEF$N .MACRO DEF$I IVAL ...TPC=IVAL .ENDM DEF$I .MACRO DEF$L SYM,SIZ .IF NB,SYM SYM=...TPC .ENDC .IF NB,SIZ ...TPC=...TPC+SIZ .ENDC .ENDM DEF$L .MACRO RAD50$ STRING,MAXWRD ...PC2=. .RAD50 /STRING/ .IF GT,<.-...PC2>-<2*MAXWRD> .ERROR STRING ;RAD50 - STRING TOO LONG, TRUNCATED .=...PC2+2*MAXWRD .MEXIT .ENDC .REPT MAXWRD-<<.-...PC2>/2> .WORD 0 .ENDR .ENDM RAD50$ .MACRO CALL ADR JSR PC,ADR .ENDM CALL .MAC/RO RETURN RTS PC .ENDM RETURN .MACRO .INH MOV @#177776,-(SP) BIS #340,@#177776 .ENDM .INH .MACRO .ENB MOV (SP)+,@#177776 .ENDM .ENB .MACRO .PARAM .ENDM .PARAM .MACRO ABRT$C TSK,PSCT,ERR .MCALL ABRT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF ABRT$ TSK .IFT .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ABRT$C .MACRO ABRT$S NADR,ERR .MCALL RFA$,DIR$ RFA$ NADR MOV (PC)+,-(SP) .BYTE 83.,3 DIR$ ,ERR .ENDM ABRT$S .MACRO ABRT$ TSK .MCALL R50$,OFF$ .IF N3DF $$$GLB .BYTE 83.,3 R50$ TSK .ENDC .IF NDF A.BTTN .NLIST OFF$ OFF$ A.BTTN,4 .LIST .ENDC .ENDM ABRT$ .MACRO ALTP$C TN,PR,CS,ERR .MCALL ALTP$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF ALTP$ TN,PR .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ALTP$C .MACRO ALTP$S TNAD,PRI,ERR .MCALL MOV$,RFA$,DIR$ MOV$ PRI RFA$ TNAD MOV (PC)+,-(SP) .BYTE 9.,4 DIR$ ,ERR .ENDM ALTP$S .MACRO ALTP$ TN,PR .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 9.,4 R50$ TN .WO7RD PR .ENDC .IF NDF A.LTTN .NLIST OFF$ OFF$ A.LTTN,4 OFF$ A.LTPR,2 .LIST .ENDC .ENDM ALTP$ .MACRO ALUN$C LUN,DA,DU,CS,ERR .MCALL ALUN$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF ALUN$ LUN,DA,DU .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ALUN$C .MACRO ALUN$S LUN,DA,DU,ERR .MCALL RVP$,DIR$,NBL$ NBL$ .IF EQ $$$ARG RVP$ <<.BYTE 7,2>>,LUN .IFF RVP$ <<.BYTE 7,4>>,LUN,DA,DU .ENDC DIR$ ,ERR .ENDM ALUN$S .MACRO ALUN$ LUN,DA,DU .MCALL OFF$,NB;L$ .IF NDF $$$GLB NBL$ .IF EQ $$$ARG .BYTE 7,2 .IFF .BYTE 7,4 .IFTF .WORD LUN .IFF .NLIST $$$T1=0 .LIST .IRPC X, .IF LT $$$T1-2 .ASCII /X/ .NLIST $$$T1=$$$T1+1 .LIST .ENDC .ENDM .IIF EQ $$$T1, .ASCII / / .IIF EQ $$$T1-1, .ASCII / / .WORD DU .ENDC .ENDC .IF NDF A.LULU .NLIST .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM ALUN$ .MACRO ASTX$C PSCT,ERR .MCALL ASTX$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ ? $$$=. .IFTF ASTX$ .IFT .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ASTX$C .MACRO ASTX$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 115.,1 DIR$ ,ERR .ENDM ASTX$S .MACRO ASTX$ .IF NDF $$$GLB .BYTE 115.,1 .ENDC .ENDM ASTX$ .MACRO CLEF$C EFN,CS,ERR .MCALL CLEF$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF CLEF$ EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CLEF$C .MACRO CLEF$S EFN,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 31.,2>>,EFN DIR$ ,ERR .ENDM CLEF$S C.MACRO CLEF$ EFN .MCALL OFF$ .IF NDF $$$GLB .BYTE 31.,2 .WORD EFN .ENDC .IF NDF C.LEEF .NLIST OFF$ OFF$ C.LEEF,2 .LIST .ENDC .ENDM CLEF$ .MACRO CMKT$C EFN,AST,PSCT,ERR .MCALL CMKT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF CMKT$ EFN,AST .IFT .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM CMKT$C .MACRO CMKT$S EFN,AST,ERR .MCALL NBL$,RVP$,DIR$ NBL$ .IF EQ $$$ARG MOV (PC)+,-(SP) .BYTE 27.,1 .IFF RVP$ <<.BYTE 27.,3>>,EFN,AST .ENDC DIR$ ,EGRR .ENDM CMKT$S .MACRO CMKT$ EFN,AST .MCALL NBL$,OFF$ .IF NDF $$$GLB NBL$ .IF EQ $$$ARG .BYTE 27.,1 .IFF .BYTE 27.,3 .WORD EFN .WORD AST .ENDC .ENDC .IF NDF C.MKEF .NLIST .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM CMKT$ .MACRO CSRQ$C TT,RT,CS,ERR .MCALL CSRQ$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF CSRQ$ TT,RT .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CSRQ$C .MACRO CSRQ$S TN,RN,ERR .MCALL RFA$,DIR$ .IKF NB RFA$ RN .IFTF RFA$ TN MOV (PC)+,-(SP) .IFT .BYTE 25.,5 .IFF .BYTE 25.,3 .ENDC DIR$ ,ERR .ENDM CSRQ$S .MACRO CSRQ$ TT,RT .MCALL R50$,OFF$ .IF NDF $$$GLB .IF B .BYTE 25.,3 .IFF .BYTE 25.,5 .IFTF R50$ TT .IFF R50$ RT .ENDC .ENDC .IF NDF C.SRTN .NLIST OFF$ OFF$ C.SRTN,4 OFF$ C.SRRN,4 .LIST .ENDC .ENDM CSRQ$ .MACRO DECL$C EFN,CS,ERR .MCALL DECL$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF DECL$ EFN .IFT .PSECT CS O DIR$ #$$$,ERR .ENDC .ENDM DECL$C .MACRO DECL$S EFN,ERR .MCALL RVP$,DIR$ .IF B MOV (PC)+,-(SP) .BYTE 35.,1 .IFF RVP$ <<.BYTE 35.,2>>,EFN .ENDC DIR$ ,ERR .ENDM DECL$S .MACRO DECL$ EFN .MCALL OFF$ .IF NDF $$$GLB .IF B .BYTE 35.,1 .IFF .BYTE 35.,2 .WORD EFN .ENDC .ENDC .IF NDF D.CLEF .NLIST OFF$ OFF$ D.CLEF,2 .LIST .ENDC .ENDM DECL$ .MACRO DSBL$C TASK,CS,ERR .MCALL DSBL$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF DSBL$ TASSK .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM DSBL$C .MACRO DSBL$S TN,ERR .MCALL RFA$,DIR$ RFA$ TN MOV (PC)+,-(SP) .BYTE 91.,3 DIR$ ,ERR .ENDM DSBL$S .MACRO DSBL$ TASK .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 91.,3 R50$ TASK .ENDC .IF NDF D.SBTN .NLIST OFF$ OFF$ D.SBTN,4 .LIST .ENDC .ENDM DSBL$ .MACRO DSCP$C CS,ERR .MCALL DSCP$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF DSCP$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM DSCP$C .MACRO DSCPW$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 95.,1 DIR$ ,ERR .ENDM DSCP$S .MACRO DSCP$ .IF NDF $$$GLB .BYTE 95.,1 .ENDC .ENDM DSCP$ .MACRO ENBL$C TN,CS,ERR .MCALL ENBL$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF ENBL$ TN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ENBL$C .MACRO ENBL$S TN,ERR .MCALL RFA$,DIR$ RFA$ TN MOV (PC)+,-(SP) .BYTE 93.,3 DIR$ ,ERR .ENDM ENBL$S .MACRO ENBL$ TN .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 93.,3 R50$ TN .ENDC [.IF NDF E.NBTN .NLIST OFF$ OFF$ E.NBTN,4 .LIST .ENDC .ENDM ENBL$ .MACRO ENAR$C CS,ERR .MCALL ENAR$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF ENAR$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ENAR$C .MACRO ENAR$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 101.,1 DIR$ ,ERR .ENDM ENAR$S .MACRO ENAR$ .IF NDF $$$GLB .BYTE 101.,1 .ENDC .ENDM ENAR$ .MACRO ENCP$C CS,ERR .MCALL ENCP$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF ENCP$ .IFT .PSEC_T CS DIR$ #$$$,ERR .ENDC .ENDM ENCP$C .MACRO ENCP$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 97.,1 DIR$ ,ERR .ENDM ENCP$S .MACRO ENCP$ .IF NDF $$$GLB .BYTE 97.,1 .ENDC .ENDM ENCP$ .MACRO EXEC$C TN,PN,PRI,GC,UP,CS,ERR .MCALL EXEC$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF EXEC$ TN,PN,PRI,GC,UP .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXEC$C .MACRO EXEC$S TN,PN,PR,GC,PG,ERR .MCALL MVB$,MOV$,RFA$,DIR$ MVB$ PG,GC MOV$ PR RFA$ PN RFA$ TN MOV (PCc)+,-(SP) .BYTE 13.,7 DIR$ ,ERR .ENDM EXEC$S .MACRO EXEC$ TN,PN,PR,GC,UP .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 13.,7 R50$ TN R50$ PN .WORD PR .BYTE UP,GC .ENDC .IF NDF E.XCTN .NLIST .IRP X,<,,,,,> OFF$ X .ENDM .LIST .ENDC .ENDM EXEC$ .MACRO EXIF$C EFN,CS,ERR .MCALL EXIF$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF EXIF$ EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXIF$C .MACRO EXIF$S EFN,ERgR .MCALL RVP$,DIR$ RVP$ <<.BYTE 53.,2>>,EFN DIR$ ,ERR .ENDM EXIF$S .MACRO EXIF$ EFN .MCALL OFF$ .IF NDF $$$GLB .BYTE 53.,2 .WORD EFN .ENDC .IF NDF E.XFEF .NLIST OFF$ OFF$ E.XFEF,2 .LIST .ENDC .ENDM EXIF$ .MACRO EXIT$C CS,ERR .MCALL EXIT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF EXIT$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXIT$C .MACRO EXIT$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 51.,1 DIR$ ,ERR .ENDM EXIT$S .MACRO EXIT$ .IF NkDF $$$GLB .BYTE 51.,1 .ENDC .ENDM EXIT$ .MACRO FIX$C TN,CS,ERR .MCALL FIX$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF FIX$ TN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM FIX$C .MACRO FIX$S TN,ERR .MCALL RFA$,DIR$ RFA$ TN MOV (PC)+,-(SP) .BYTE 85.,3 DIR$ ,ERR .ENDM FIX$S .MACRO FIX$ TN .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 85.,3 R50$ TN .ENDC .IF NDF F.IXTN .NLIST OFF$ OFF$ F.IXTN,4 .LIST .ENDC .ENDM FIX$ .MACRO GCOM$C BLK,BUF,CS,ERR o.MCALL GCOM$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF GCOM$ BLK,BUF .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GCOM$C .MACRO GCOM$S BLK,BUF,ERR .MCALL OFF$,RFA$,MOV$,DIR$ MOV$ BUF RFA$ BLK MOV (PC)+,-(SP) .BYTE 67.,4 DIR$ ,ERR .IF NDF G.COBB .NLIST $$$OST=0 .IRP X,<,,,> OFF$ X .ENDM .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM GCOM$S .MACRO GCOM$ BLK,BUF .MCALL OFF$s,R50$ .IF NDF $$$GLB .BYTE 67.,4 R50$ BLK .WORD BUF .ENDC .IF NDF G.COBN .NLIST OFF$ OFF$ G.COBN,4 OFF$ G.COBA,2 .IF NDF G.COBB $$$OST=0 .IRP X,<,,,> OFF$ X .ENDM .IRP X,<,,,> OFF$ X .ENDM .ENDC .LIST .ENDC .ENDM GCOM$ .MACRO GPRT$C PRT,BUF,CS,ERR .MCALL GPRT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF GPRT$ PRT,BUF .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GPwRT$C .MACRO GPRT$S PRT,BUF,ERR .MCALL MOV$,RFA$,DIR$ MOV$ BUF RFA$ PRT MOV (PC)+,-(SP) .BYTE 65.,4 DIR$ ,ERR .IF NDF G.PRPB .NLIST $$$OST=0 .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM GPRT$S .MACRO GPRT$ PRT,BUF .MCALL OFF$,R50$ .IF NDF $$$GLB .BYTE 65.,4 R50$ PRT .WORD BUF .ENDC .IF NDF G.PRPN .NLIST OFF$ OFF$ G.PRPN,4 OFF$ G.PRBA,2 .IF NDF G.PRPB $$$OST=0 .IRP X,<,,> OFF$ X .ENDM {.ENDC .LIST .ENDC .ENDM GPRT$ .MACRO GLUN$C LUN,BUFD,CS,ERR .MCALL GLUN$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF GLUN$ LUN, .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GLUN$C .MACRO GLUN$S LUN,BUFD,ERR .MCALL RVP$,DIR$ RVP$ BUFD .NLIST $$$T1=$$$ARG+2 .LIST RVP$ <<.BYTE 5,$$$T1>>,LUN DIR$ ,ERR .IF NDF G.LUNA .NLIST $$$OST=0 .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM GLUN$S .MACRO GLUN$ LUN,BUFD .MCALL OFF$ .IF NDF $$$GLB .NLIST $$$ARG=2 .IRP X, $$$ARG=$$$ARG+1 .ENDM .LIST .BYTE 5,$$$ARG .WORD LUN .IRP X, .WORD X .ENDM .ENDC .IF NDF G.LULU .NLIST .IRP X,<,,,> OFF$ X .ENDM .IF NDF G.LUNA $$$OST=0 .IRP X,<,,,> OFF$ X .ENDM .ENDC .LIST .ENDC .ENDM GLUN$ .MACRO GMCR$C CS,ERR .MCALL GMCR$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF GMCR$ .IFT .PSEƒCT CS DIR$ #$$$,ERR .ENDC .ENDM GMCR$C .MACRO GMCR$ .MCALL OFF$ .IF NDF $$$GLB .BYTE 127.,41. .BLKW 40. .ENDC .IF NDF G.MCRB .NLIST OFF$ OFF$ G.MCRB,80. .LIST .ENDC .ENDM GMCR$ .MACRO GSSW$C CS,ERR .MCALL GSSW$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF GSSW$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GSSW$C .MACRO GSSW$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 125.,1 DIR$ ,ERR .ENDM GSSW$S .MACRO GSSW$ .IF NDF $$$GLB .BYTE 125.,1 .‡ENDC .ENDM GSSW$ .MACRO GTIM$C BUFA,CS ERR .MCALL GTIM$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF GTIM$ BUFA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GTIM$C .MACRO GTIM$S BUFA,ERR .MCALL RVP$,DIR$,OFF$ RVP$ <<.BYTE 61.,2>>,BUFA DIR$ ,ERR .IF NDF G.TIYR .NLIST $$$OST=0 .IRP X,<,,,> OFF$ X .ENDM .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM GTIM$S .MACRO GTIM$ BUFA .M‹CALL OFF$ .IF NDF $$$GLB .BYTE 61.,2 .WORD BUFA .ENDC .IF NDF G.TIBA .NLIST OFF$ OFF$ G.TIBA,2 .IF NDF G.TIYR $$$OST=0 .IRP X,<,,,> OFF$ X .ENDM .IRP X,<,,,> OFF$ X .ENDM .ENDC .LIST .ENDC .ENDM GTIM$ .MACRO GTSK$C BUFA,CS,ERR .MCALL GTSK$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFT GTSK$ BUFA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GTSK$C .MACRO GTSK$S BUFA,ERR .MCALL RVP$,DIR$,OFF$ RVP$ <<.BYTE 63.,2>>,BUFA DIR$ ,ERR .IF NDF G.TSTN .NLIST $$$OST=0 .IRP X,<,,,,> OFF$ X .ENDM .IRP X,<,,,,> OFF$ X .ENDM OFF$ G.TSVL,2 .LIST .ENDC .ENDM GTSK$S .MACRO GTSK$ BUFA .MCALL OFF$ .IF NDF $$$GLB .BYTE 63.,2 .WORD BUFA .ENDC .IF NDF G.TSBA .NLIST OFF$ OFF$ G.TSBA,2 .IF NDF G.TSTN $$$OST=0 .IRP X,<,,,,> OFF$ X .ENDM .IRP X,<,,,,> OFF$ X .ENDM OFF$ G.TSVL,2 .ENDC .LIST .ENDC .ENDM GTSK$ .MACRO IHAR$C CS,ERR .MCALL IHAR$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF IHAR$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM IHAR$C .MACRO IHAR$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 99.,1 DIR$ ,ERR .ENDM IHAR$S .MACRO IHAR$ .IF NDF $$$GLB .BYTE 99.,1 .ENDC .ENDM IHAR$ .MAC—RO MRKT$C EF,TM,TU,AST,CS,ERR .MCALL MRKT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF MRKT$ EF,TM,TU,AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM MRKT$C .MACRO MRKT$S EF,TM,TU,AST,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 23.,5>>,EF,TM,TU,AST DIR$ ,ERR .ENDM MRKT$S .MACRO MRKT$ EFN,TM,TU,AST .MCALL OFF$ .IF NDF $$$GLB .BYTE 23.,5 .WORD EFN .WORD TM .WORD TU .WORD AST .ENDC .IF NDF M.KTEF .NLIST .IRP X,<,,,,> OFF$ X› .ENDM .LIST .ENDC .ENDM MRKT$ .MACRO QIO$C FNC,LUN,EFN,PRI,IOST,AST,PRMLST,PSCT,ERR .MCALL QDPB$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF QDPB$ 1,FNC,LUN,EFN,PRI,IOST,AST, .IFT .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM QIO$C .MACRO QIO$S FNC,LUN,EFN,PRI,IOST,AST,PRMLST,ERR .MCALL QDPB$S QDPB$S 1,FNC,LUN,EFN,PRI,IOST,AST,,ERR .ENDM QIO$S .MACRO QIO$ FNC,LUN,EFN,PRI,IOST,AST,PRMLST .MCALL QDPB$ QDPB$ 1,FNC,LUN,EFN,PRI,IOST,AST, .ENDM QŸIO$ .MACRO QIOW$C FNC,LUN,EFN,PRI,IOST,AST,PRMLST,CS,ERR .MCALL QDPB$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF QDPB$ 3,FNC,LUN,EFN,PRI,IOST,AST, .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM QIOW$C .MACRO QIOW$S FNC,LUN,EFN,PRI,IOST,AST,PRMLST,ERR .MCALL QDPB$S QDPB$S 3,FNC,LUN,EFN,PRI,IOST,AST,,ERR .ENDM QIOW$S .MACRO QIOW$ FNC,LUN,EFN,PRI,IOST,AST,PRMLST .MCALL QDPB$ QDPB$ 3,FNC,LUN,EFN,PRI,IOST,AST, .ENDM QIOW$ .MACRO QDPB$ DIC,FNC,LUN,EFЃN,PRI,IOST,AST,PRMLST .MCALL OFF$ .IF NDF $$$GLB .NLIST $$$ARG=6 .IRP X, $$$ARG=$$$ARG+1 .ENDM .LIST .BYTE DIC,$$$ARG .WORD FNC .WORD LUN .BYTE EFN,PRI .WORD IOST .WORD AST .IRP XTMP, .WORD XTMP .ENDM .ENDC .IF NDF Q.IOFN .NLIST .IRP XTMP,<,,,,> OFF$ XTMP .ENDM .IRP XTMP,<,,> OFF$ XTMP .ENDM .LIST .ENDC .ENDM QDPB$ .MACRO QDPB$S DIC,FNC,LUN,EFN,PRI,IOST,AST,PRMLST,ЇERR .MCALL RVP$,MVB$,DIR$ RVP$ PRMLST .NLIST $$$T1=$$$ARG+6 .LIST RVP$ IOST,AST MVB$ EFN,PRI RVP$ <<.BYTE DIC,$$$T1>>,FNC,LUN DIR$ ,ERR .ENDM QDPB$S .MACRO RDAF$C BA,CS,ERR .MCALL RDAF$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RDAF$ BA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RDAF$C .MACRO RDAF$S BA,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 39.,2>>,BA DIR$ ,ERR .ENDM RDAF$S .MACRO RDAF$ BA .MCALL OFF$ .IF NDF $$$GLB .BYTE 39.,2 .WORD BA .ENDC Ћ.IF NDF R.DABA .NLIST OFF$ OFF$ R.DABA,2. .LIST .ENDC .ENDM RDAF$ .MACRO RDEF$C EF,CS,ERR .MCALL RDEF$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RDEF$ EF .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RDEF$C .MACRO RDEF$S EF,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 37.,2>>,EF DIR$ ,ERR .ENDM RDEF$S .MACRO RDEF$ EFN .MCALL OFF$ .IF NDF $$$GLB .BYTE 37.,2 .WORD EFN .ENDC .IF NDF R.DEEF .NLIST OFF$ OFF$ R.DEEF,2 .LIST .ENDC .ENDM RDEF$ .MACRO RCЏVD$C TN,BA,CS,ERR .MCALL RCVD$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RCVD$ TN,BA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RCVD$C .MACRO RCVD$S TN,BA,ERR .MCALL MOV$,RFA$,DIR$ MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 75.,4 DIR$ ,ERR .ENDM RCVD$S .MACRO RCVD$ TN,BA .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 75.,4 R50$ TN .WORD BA .ENDC .IF NDF R.VDTN .NLIST .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM RCVD$ .MACRO RCVS$C ГTN,BA,CS,ERR .MCALL RCVS$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RCVS$ TN,BA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RCVS$C .MACRO RCVS$S TN,BA,ERR .MCALL MOV$,RFA$,DIR$ MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 79.,4 DIR$ ,ERR .ENDM RCVS$S .MACRO RCVS$ TN,BA .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 79.,4 R50$ TN .WORD BA .ENDC .IF NDF R.VSTN .NLIST .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM RCVS$ .MACRO RCVX$C TN,BAЗ,CS,ERR .MCALL RCVX$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RCVX$ TN,BA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RCVX$C .MACRO RCVX$S TN,BA,ERR .MCALL MOV$,RFA$,DIR$ MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 77.,4 DIR$ ,ERR .ENDM RCVX$S .MACRO RCVX$ TN,BA .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 77.,4 R50$ TN .WORD BA .ENDC .IF NDF R.VXTN .NLIST .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM RCVX$ .MACRO RQST$C TN,PN,PR,GЛC,P,CS,ERR .MCALL RQST$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RQST$ TN,PN,PR,GC,P .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM .MACRO RQST$S TN,PN,PR,GC,P,ERR .MCALL MVB$,MOV$,RFA$,DIR$ MVB$ P,GC MOV$ PR RFA$ PN RFA$ TN MOV (PC)+,-(SP) .BYTE 11.,7 DIR$ ,ERR .ENDM RQST$S .MACRO RQST$ TN,PN,PR,GC,P .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 11.,7 R50$ TN R50$ PN .WORD PR .BYTE P,GC .ENDC .IF NDF R.QSTN .NLIST .IRP X,<,,,,,> OFF$ X .ENDM .LIST .ENDC .ENDM RQST$ .MACRO RSUM$C TN,CS,ERR .MCALL RSUM$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RSUM$ TN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RSUM$C .MACRO RSUM$S TN,ERR .MCALL RFA$,DIR$ RFA$ TN MOV (PC)+,-(SP) .BYTE 47.,3 DIR$ ,ERR .ENDM RSUM$S .MACRO RSUM$ TN .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 47.,3 R50$ TN .ENDC .IF NDF R.SUTN .NLIST OFF$ OFF$ R.SUTN,4 .LIST .ENDC .ENDM УRSUM$ .MACRO RUN$C TN,PN,PR,UG,UP,SM,SU,RM,RU,CS,ERR .MCALL RUN$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF RUN$ TN,PN,PR,UG,UP,SM,SU,RM,RU .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RUN$C .MACRO RUN$S TN,PN,PR,UG,UP,SM,SU,RM,RU,ERR .MCALL RVP$,MVB$,MOV$,RFA$,DIR$ RVP$ SM,SU,RM,RU MVB$ UP,UG MOV$ PR RFA$ PN RFA$ TN MOV (PC)+,-(SP) .BYTE 17.,11. DIR$ ,ERR .ENDM RUN$S .MACRO RUN$ TN,PN,PR,GC,P,SM,SU,RM,RU .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 17.,11. RЧ50$ TN R50$ PN .WORD PR .BYTE P,GC .IRP X, .WORD X .ENDM .ENDC .IF NDF R.UNTN .NLIST .IRP X,<,,,,,> OFF$ X .ENDM .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM RUN$ .MACRO SCHD$C TN,PN,PR,UG,UC,H,M,S,T,RM,RU,CS,ERR .MCALL SCHD$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SCHD$ TN,PN,PR,UG,UC,H,M,S,T,RM,RU .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMЫ SCHD$C .MACRO SCHD$S TN,PN,PR,UG,UP,H,M,S,T,RM,RU,ERR .MCALL RVP$,MVB$,MOV$,RFA$,DIR$ RVP$ H,M,S,T,RM,RU MVB$ UP,UG MOV$ PR RFA$ PN RFA$ TN MOV (PC)+,-(SP) .BYTE 15.,13. DIR$ ,ERR .ENDM SCHD$S .MACRO SCHD$ TN,PN,PR,UG,UP,H,M,S,T,RM,RU .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 15.,13. R50$ TN R50$ PN .WORD PR .BYTE UP,UG .IRP X, .WORD X .ENDM .ENDC .IF NDF S.CHTN .NLIST .IRP X,<,,,,> OFF$ X .ENDM .ЯIRP X,<,,,> OFF$ X .ENDM .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM SCHD$ .MACRO SDAT$C TN,BA,EFN,CS,ERR .MCALL SDAT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SDAT$ TN,BA,EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SDAT$C .MACRO SDAT$S TN,BA,EFN,ERR .MCALL RVP$,RFA$,DIR$ RVP$ BA,EFN RFA$ TN MOV (PC)+,-(SP) .BYTE 71.,5 DIR$ ,ERR .ENDM SDAT$S .MACRO SDAT$ TN,BA,EFN .MCALL R5г0$,OFF$ .IF NDF $$$GLB .BYTE 71.,5 R50$ TN .WORD BA .WORD EFN .ENDC .IF NDF S.DATN .NLIST .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM SDAT$ .MACRO SDRQ$C TN,PN,PR,UG,UP,BA,EFN,CS,ERR .MCALL SDRQ$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SDRQ$ TN,PN,PR,UG,UP,BA,EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SDRQ$C .MACRO SDRQ$S TN,PN,PR,UG,UP,BA,EFN,ERR .MCALL RVP$,MVB$,MOV$,RFA$,DIR$ RVP$ BA,EFN MVB$ UP,UG MOV$ PзR RFA$ PN RFA$ TN MOV (PC)+,-(SP) .BYTE 73.,9. DIR$ ,ERR .ENDM SDRQ$S .MACRO SDRQ$ TN,PN,PR,UG,UP,BA,EFN .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 73.,9. R50$ TN R50$ PN .WORD PR .BYTE UP,UG .WORD BA .WORD EFN .ENDC .IF NDF S.DRTN .NLIST .IRP X,<,,,> OFF$ X .ENDM .IRP X,<,,,> OFF$ X .ENDM .LIST .ENDC .ENDM SDRQ$ .MACRO SETF$C EFN,CS,ERR .MCALL SETF$,DIR$ .IF NDF $$$GLB .PSECT $лDPB$$ $$$=. .IFTF SETF$ EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SETF$C .MACRO SETF$S EFN,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 33.,2>>,EFN DIR$ ,ERR .ENDM SETF$S .MACRO SETF$ EFN .MCALL OFF$ .IF NDF $$$GLB .BYTE 33.,2 .WORD EFN .ENDC .IF NDF S.ETEF .NLIST OFF$ OFF$ S.ETEF,2 .LIST .ENDC .ENDM SETF$ .MACRO$ SFPA$C AST,CS,ERR .MCALL SFPA$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SFPA$ AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM пSFPA$C .MACRO SFPA$S AST,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 111.,2>>,AST DIR$ ,ERR .ENDM SFPA$S .MACRO SFPA$ AST .MCALL OFF$ .IF NDF $$$GLB .BYTE 111.,2 .WORD AST .ENDC .IF NDF S.FPAE .NLIST OFF$ OFF$ S.FPAE,2 .LIST .ENDC .ENDM .MACRO SPND$C CS,ERR .MCALL SPND$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SPND$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SPND$C .MACRO SPND$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 45.,1 DIR$ ,ERR .ENDM SPNDу$S .MACRO SPND$ .IF NDF $$$GLB .BYTE 45.,1 .ENDC .ENDM SPND$ .MACRO SPRA$C AST,CS,ERR .MCALL SPRA$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SPRA$ AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SPRA$C .MACRO SPRA$S AST,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 109.,2>>,AST DIR$ ,ERR .ENDM SPRA$S .MACRO SPRA$ AST .MCALL OFF$ .IF NDF $$$GLB .BYTE 109.,2 .WORD AST .ENDC .IF NDF S.PRAE .NLIST OFF$ OFF$ S.PRAE,2 .LIST .ENDC .ENDM SPRA$ .MACRO SRDчA$C AST,CS,ERR .MCALL SRDA$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SRDA$ AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SRDA$C .MACRO SRDA$S AST,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 107.,2>>,AST DIR$ ,ERR .ENDM SRDA$S .MACRO SRDA$ AST .MCALL OFF$ .IF NDF $$$GLB .BYTE 107.,2 .WORD AST .ENDC .IF NDF S.RDAE .NLIST OFF$ OFF$ S.RDAE,2 .LIST .ENDC .ENDM SRDA$ .MACRO SVDB$C AD,LN,CS,ERR .MCALL SVDB$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTыF SVDB$ AD,LN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SVDB$C .MACRO SVDB$S AD,LN,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 103.,3>>,AD,LN DIR$ ,ERR .ENDM SVDB$S .MACRO SVDB$ A,L .MCALL OFF$ .IF NDF $$$GLB .BYTE 103.,3 .WORD A .WORD L .ENDC .IF NDF S.VDTA .NLIST .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM SVDB$ .MACRO SVTK$C ADR,LEN,CS,ERR .MCALL SVTK$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SVTK$ ADR,LEN .IFT .PSECT CS я DIR$ #$$$,ERR .ENDC .ENDM SVTK$C .MACRO SVTK$S ADR,LEN,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 105.,3>>,ADR,LEN DIR$ ,ERR .ENDM SVTK$S .MACRO SVTK$ TA,TL .MCALL OFF$ .IF NDF $$$GLB .BYTE 105.,3 .WORD TA .WORD TL .ENDC .IF NDF S.VTTA .NLIST .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM SVTK$ .MACRO SYNC$C TN,PN,PR,UG,UP,SM,SU,SY,RM,RU,CS,ERR .MCALL SYNC$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF SYNC$ TN,PN,PR,UG,UP,SM,SU,SY,RM,RU ѓ.IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SYNC$C .MACRO SYNC$S TN,PN,PR,UG,UP,SM,SU,SY,RM,RU,ERR .MCALL RVP$,MVB$,MOV$,RFA$,DIR$ RVP$ SM,SU,SY,RM,RU MVB$ UP,UG MOV$ PR RFA$ PN RFA$ TN MOV (PC)+,-(SP) .BYTE 19.,12. DIR$ ,ERR .ENDM SYNC$S .MACRO SYNC$ TN,PN,PR,UG,UP,SM,SU,SY,RM,RU .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 19.,12. R50$ TN R50$ PN .WORD PR .BYTE UP,UG .IRP X, .WORD X .ENDM .ENDC .IF NDF S.YNTN .NLIST .IRP X,<,,,,,> OFF$ X .ENDM .IRP X,<,,,,> OFF$ X .ENDM .LIST .ENDC .ENDM SYNC$ .MACRO UFIX$C TN,CS,ERR .MCALL UFIX$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF UFIX$ TN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM UFIX$C .MACRO UFIX$S TN,ERR .MCALL RFA$,DIR$ RFA$ TN MOV (PC)+,-(SP) .BYTE 87.,3 DIR$ ,ERR .ENDM UFIX$S .MACRO UFIX$ TN .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 8ћ7.,3 R50$ TN .ENDC .IF NDF U.FXTN .NLIST OFF$ OFF$ U.FXTN,4 .LIST .ENDC .ENDM UFIX$ .MACRO WSIG$C CS,ERR .MCALL WSIG$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF WSIG$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM WSIG$C .MACRO WSIG$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 49.,1 DIR$ ,ERR .ENDM WSIG$S .MACRO WSIG$ .IF NDF $$$GLB .BYTE 49.,1 .ENDC .ENDM WSIG$ .MACRO WTLO$C SET,MASK,CS,ERR .MCALL WTLO$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=џ. .IFTF WTLO$ SET, .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM WTLO$C ; OPERAND REPRESENTING A MASK WORD .MACRO WTLO$S SET,MSK,ERR .MCALL MOV$,RVP$,DIR$ .IF EQ SET-4 .NLIST $$$T1=0 .IRP X, $$$T1=$$$T1+1 .ENDM .LIST .REPT <4-$$$T1> CLR -(SP) .ENDR RVP$ MSK .IFF MOV$ MSK .IF NE SET MOV #SET,-(SP) .IFF CLR -(SP) .ENDC .IFTF MOV (PC)+,-(SP) .IFT .BYTE 43.,5 .IFF .BYTE 43.,3 .ENDC DIR$ ,ERR .ENDM WTLO$S .MACRO WTLO$ SET,MASK .IF NDF $$$GLB .IF EQ SET-4 .BYTE 43.,5 .IRP X, .WORD X .ENDM .IFF .BYTE 43.,3 .WORD SET .WORD MASK .ENDC .ENDC .ENDM WTLO$ .MACRO WTSE$C EF,CS,ERR .MCALL WTSE$,DIR$ .IF NDF $$$GLB .PSECT $DPB$$ $$$=. .IFTF WTSE$ EF .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM WTSE$C .MACRO WTSE$S EF,ERR .MCALL RVP$,DIR$ RVP$ <<.BYTE 41.,2>>,EF DIR$ ,ERR .ENDM WTSE$S .MACRO WTSE$ EFN .MCALL OFF$ .IF NDF $$$GLB .BYTE 41.,2 .WORD EFN .ENDC .IF NDF W.TSEF .NLIST OFF$ OFF$ W.TSEF,2 .LIST .ENDC .ENDM WTSE$ .MACRO DIR$ ADR,ERR .MCALL ERR$ .IF NB MOV ADR,-(SP) .ENDC EMT 377 .IIF NB , ERR$ ERR .ENDM DIR$ .MACRO ERR$ ERR .MCALL CALL .IF NB .NLIST .NTYPE $$$T1,ERR .LIST .IIF EQ $$$T1-27, BCC .+6 .IIF EQ $$$T1-37, BCC .+6 .IF GE $$$T1-60 BCC .+6 .IFF .IF NE $$$T1-27 .IIF NE $$$T1-37, BCC .+4 .ENDC .ENDC CALL ERR .ENDC .ENDM ERR$ .MACRO MVB$ LOW,HIGH .IF B .IF B C LR -(SP) .IFF CLRB -(SP) MOVB HIGH,1(SP) .ENDC .IFF .IF B CLR -(SP) MOVB LOW,(SP) .IFF MOVB LOW,-(SP) MOVB HIGH,1(SP) .ENDC .ENDC .ENDM MVB$ .MACRO NBL$ LIST .NLIST $$$ARG=0 .IRP X, .IIF NB ,$$$ARG=$$$ARG+1 .ENDM .LIST .ENDM NBL$ .MACRO OFF$ SYMB,LEN .IF NB .IF NDF $$$GLB SYMB=$$$OST .IFF SYMB==$$$OST .ENDC .IF NB $$$OST=$$$OST+LEN .ENDC .IFF $$$OST=2 .ENDC .ENDM OFF$ .MACRO RFA$ ADR .IF NB .NLIST  .NTYPE $$$T2,ADR .LIST .IF LT $$$T2-6 MOV 2(ADR),-(SP) MOV (ADR),-(SP) .IFF MOV ADR,-(SP) MOV @(SP),-(SP) ADD #2,2(SP) MOV @2(SP),2(SP) .ENDC .IFF CLR -(SP) CLR -(SP) .ENDC .ENDM RFA$ .MACRO RVP$ P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 .MCALL MOV$ .NLIST .NARG $$$ARG .LIST .IIF GT $$$ARG-9., MOV$ .IIF GT $$$ARG-8., MOV$ .IIF GT $$$ARG-7, MOV$ .IIF GT $$$ARG-6, MOV$ .IIF GT $$$ARG-5, MOV$ .IIF GT $$$ARG-4, MOV$ .IIF GT $$$ARG-3, MOV$ .IIF GT $$$ARG-2, MOV$ .IIF GT $$$ARG-1, MOV$ .IIF GT $$$ARG, MOV$ .ENDM RVP$ .MACRO R50$ NAME .NLIST .NCHR $$$T1,NAME .LIST .IF EQ $$$T1 .WORD 0,0 .IFF .IF GT $$$T1-6 $$$T4=.+4 .IFTF .RAD50 /NAME/ .IFT .=$$$T4 .ENDC .IIF LT $$$T1-4, .WORD 0 .ENDC .ENDM R50$ .MACRO MOV$ ARG .IF B CLR -(SP) .IFF .IF IDN ,<#0> CLR -(SP) .MEXIT .ENDC .NLIST $$$T2=0 .IRPC X, .IF EQ $$$T2 $$$T2=1 .LIST .IF IDN ^/X/,^/ MOV (PC)+,-(SP) XX .ENDM .IFF MOV ARG,-(SP) .ENDC .ENDC .MEXIT .ENDM .ENDC .ENDM MOV$ .MACRO CALL ADR JSR PC,ADR .ENDM CALL .MACRO RETURN RTS PC .ENDM RETURN