Trailing-Edge
-
PDP-10 Archives
-
FORTRAN-10_Alpha_31-jul-86
-
forprm.mac
There are 13 other files named forprm.mac in the archive. Click here to see a list.
UNIVERSAL FORPRM UNIVERSAL FILE FOR FOROTS ,11(5016)
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1981, 1986
;ALL RIGHTS RESERVED.
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
SALL
;REVISION HISTORY
COMMENT \
***** Begin Revision History *****
1267 EGM 15-Feb-81 Q10-04519
Clean up FORPRM, add checks for feature test conflicts, and
rework byte definition such that macro GLBS references and
macro BYTPTS defines byte pointers for ALL bytes defined in
the DDB.
1271 EGM 18-Feb-81 --------
Allow DEFSTR storage macros to use previously defined DDB byte
pointer when indexing using (d), and allow the other cases to
work correctly also.
1276 DAW 20-Feb-81
Copy useful field/mask macros from MACSYM:
FLD, POINTR.
1277 JLC 23-Feb-81
Created new DDB entry for rounded record size (RSIZR) plus
added bytes/word entry (BPW) to -10 (removed it from -20-only).
1301 JLC 24-Feb-81
Created new DDB entry for line sequence number.
1310 DAW 26-Feb-81
Change half-words to full-words in the DDB: ERR=, END=, IOST=, AVAR=
that are addresses in the user's program or data.
1314 EDS 4-Mar-81
Add feature test switch FTNLC1 to allow skipping of column 1
of NAMELIST input data.
1316 JLC 5-Mar-81
Separated flag D%LIO (last I/O direction) into 2 flags, D%LIN
and D%LOUT.
1320 DAW 6-Mar-81
New feature test switches for type of global byte pointer
to use, when indexed byte pointers are not appropriate.
1334 DAW 19-Mar-81
Define macros for dealing with the different flavors of byte
pointers: $BLDBP, $LODBP, $STRBP.
1337 JLC 12-Mar-81
Moved MAXARG definition from FOROTS.MAC to here, and increased
it to 128.
1365 JLC 25-Mar-81
Typo in renaming of IBPTR/OBPTR to IPTR/OPTR.
1377 JLC 01-Apr-81
Changed FLGS from a 36-bit byte to a word (FLAGS).
1404 EGM 6-Apr-81 --------
Add feature test FTGFL for checking GFLOAT args in complex double
precision library routines.
1411 DAW 8-Apr-81
Replace JFN field in the DDB with IJFN and OJFN.
1416 JLC 10-Apr-81
Separate record buffer parameters for input and output.
1417 DAW 10-Apr-81
Added F%EDM, so FOROTS knows it should type traceback info
before throwing the user into DIALOG mode, when the reason
for the DIALOG mode is because of an OPEN error.
1427 JLC 15-Apr-81
Changed RSIZ from a halfword to a full word (RSIZE) so
we can eliminate flag D%RSIZ.
1441 JLC 17-Apr-81
Removed D%RSIZ, replaced with D%OPEN for future use in CLOSE.
1456 PY/JLC 27-Apr-81
Remove extra angle brackets from POINTR macro, was causing
MACRO to create Polish string in pass 2 after pooling literals
in pass 1, so hiseg break was incorrect.
1463 JLC 7-May-81
Add new words to -20 file database (WADR,WSIZ) plus
places to store P1-P4 for %GETIO.
1464 DAW 12-May-81
Error message cleanup, also get rid of $2HAK.
1465 JLC 15-May-81
Added data words to the -20 disk database for major I/O
changes, mostly to magtape operations.
1532 DAW 14-Jul-81
OPEN rewrite: Base level 1
1535 JLC 14-Jul-81
Added word for virtual output record size for T format.
1540 DAW 17-Jul-81
Delete IS from DDB, use IOSTAT variable directly.
Set IOSTAT variable to zero at the start of each IO statement.
Set D%ERR if "?" error in IOERR.
1542 JLC 17-Jul-81
Removed D%EOF, hopefully forever.
1543 DAW 17-Jul-81
Allow SCRATCH files to devices besides DSK.
1551 DAW 20-Jul-81
Fix structure macros so "MOVE" of a quantity that's not full-word
produces a "Q" error.
1560 DAW 28-Jul-81
OPEN rewrite, base level 2
1570 DAW 30-Jul-81
Add flag F%NION.
1615 DAW 19-Aug-81
Get rid of two word BP options.
1622 JLC 21-Aug-81
Make ORLEN a full word.
1625 DAW 21-Aug-81
Get rid of "DF".
1643 JLC 25-Aug-81
Make IRBUF & ORBUF full word byte pntrs.
1656 DAW 2-Sep-81
Define error table entries symbolically to get rid
of some magic numbers all over FOROTS.
1657 DAW 2-Sep-81
Delete 7.01 definitions.
1663 JLC 8-Sep-81
Added TPAGE(D) to record top page written in a file,
so CLOSE can unmap unused pages.
1712 JLC 15-Sep-81
Added IRVIR, the position in the input record.
Eliminated D%ERR forevermore.
1716 JLC 16-Sep-81
Changed the names of IRVIR/ORVIR to IRPOS/ORPOS.
1717 DAW 16-Sep-81
New flag D%NCLS
1725 DAW 18-Sep-81
New error flag I%TCH.
1745 JLC 24-Sep-81
Made IRBLN, ORBLN, and IRLEN full words. Removed the silly %
from the TV macro.
1747 DAW 28-Sep-81
Added defs for more FOROP. functions.
1752 DAW 29-Sep-81
Add flag F%INDST.
1775 JLC 9-Oct-81
Change parity options to be non-zero, so we can tellif program
gave one.
2005 JLC 15-Oct-81
Added new FOROP call, removed OPDEF of PJRST.
2011 DAW 19-Oct-81
Got rid of FSTAT on the -10.
***** Begin Version 7 *****
3035 JLC 5-Feb-82
Parameters to support rework of binary I/O. Make KL the
default processor, as KI's are no longer supported.
Do away with D%BIN, D%UNF and D%EOR, as code in FORIO
and FOROPN no longer needs them.
3036 BL 10-Feb-82
Inserted NLBFLN, initial buffer length for list-directed
character string input buffer.
3037 JLC 11-Feb-82
Removed ERRN from DDB; it was useless.
3050 BL 25-Feb-82
Changed NLBFLN TO NLDIBF (See #3036).
3053 AHM 4-Mar-82
Defined TWOSEG and RELOC macros under an FTXLIB feature test
that expand to .PSECT and .ENDPS pseudo ops for psects .CODE.
and .DATA. They will be used during extended addressing
development.
3056 JLC 23-Mar-82
Changed the defs of IOERR and ERR to remove literal def.
3060 JLC 25-Mar-81
Remove RELEA. entry vector. Replace it with EXIT1.
3062 JLC 25-Mar-82
Make the error entry in the FOROTS vector table point
to the AC save-type routine.
3073 JLC 31-Mar-82
Undo edit 3062. The error routine saves the ACs locally, and
should continue doing so.
3122 JLC 28-May-82
Changed error macros, made FORPRM a module added to MTHPRM.
3125 JLC 3-Jun-82
Moved the error character in the error macros.
3127 AHM 8-Jun-82
Remove temporary TWOSEG and RELOC macros created by edit 3053
from FORPRM because edit 3122 put SEGMENT macros in FORLIB.
3136 JLC 26-Jun-82
Install new DDB entries for performance improvement.
3161 JLC 16-Aug-82
Change NREC(U) to CREC(D). Increase size of FOROTS stack
to a page.
3165 JLC 28-Aug-82
Add a DDB entry for handling large files on TOPS-10.
3176 JLC 9-Sep-82
Added some FUNCT. codes for use within FOROTS.
3202 JLC 26-Oct-82
Added new DDB entries for ANSI magtapes.
Added SPCWD, a word of spaces, to the DDB.
3203 AHM 1-Nov-82
Define a lot more FUNCT. codes for use outside of FOROTS.
3212 JLC 11-Nov-82
Removed special binary SINR pointer and byte ratio and added
flag to signal whether to do formatted or 36-bit SINRs/SOUTRs.
3215 JLC 15-Nov-82
Change name of DMBS (data mode and byte size) to DMABS.
3225 JLC 24-Nov-82
Install new call ($FJCAL) for JSYS errors from FORLIB.
3231 JLC 14-Dec-82
Add new FOROTS entry macro FENTRY, for use with DBMS
interface, and allows changing the lowseg/hiseg interface
easily for V8.
3245 JLC 5-Jan-83
Fixed value of ENDP for DBMS.
3252 JLC 12-Jan-83
Created FORPRG macro to purge global symbols created by MONSYM
which do not have "%" or "." in them.
***** End V7 Development *****
3276 TGS 22-Mar-83 SPR:NONE
Fixed value of ENDP for UDDT
3300 TGS 1-Apr-83 SPR:NONE
Delete FTGFL flag as it is also defined in MTHPRM. Move ARGKWD,
ARGTYP and ARGADR from FORPRM to MTHPRM (MTHLIB edit 3242).
***** Begin Version 10 *****
4000 JLC 22-Feb-83
Remove D%IO and D%RAN, as they are used no more.
4005 JLC 28-Feb-83
Added DDB entry for FIN address.
4006 JLC 1-Mar-83
V7 becomes v10.
4010 JLC 19-Apr-83
Add IOKWD, for I/O keywords in IOLST calls.
4014 JLC 14-Jun-83
Changed names of some DDB variables so they wouldn't conflict
with definitions in MACSYM and MONSYM. Expand CC for CC.TRN.
Add definitions for INQUIRE and RMS/tape support.
4023 JLC 29-Jun-83
Remove FTSHR, D%SP, and D%BZ. Search MTHPRM.
4036 JLC 3-Aug-83
Add a word flag for ASCII-only device.
4040 JLC 6-Sep-83
Add FB%FOR temporarily until it is defined in MONSYM.
4044 JLC 19-Sep-83
Added new FOROP functions for memory manager debugger, and
left room for the SORT functions for V7A patch.
4045 JLC 30-Sep-83
Removed UBSZ from DDB. Added a new device type - RMS file.
4052 JLC 12-Oct-83
Add word for saving DEVCHR bits so we can know
whether magtape is assigned.
4055 JLC 28-Oct-83
Added synonym for IJFN/OJFN in TOPS-10 FILOP block.
4060 JLC 2-Nov-83
Fix TOPS-10 tapemode values, had one missing.
4064 JLC 14-Nov-83
Add new RMS keywords for OPEN.
4065 JLC 6-Dec-83
Add new entries in DDB for RMS.
4066 JLC 11-Jan-84
Yet more entries in the DDB for the RMS preparations.
4071 JLC 18-Jan-84
Fixed BLANK= values for new code in FOROPN.
4072 JLC 24-Jan-84
Add new DDB variables for user id, account string, and password
for RMS remote file access.
4101 CDM 16-Feb-84
Create and expand the character stack differently when running
in extended addressing. Give the stack its own section(s) so
that it has plenty of room. Also add user subroutine ALCCHR.
4102 JLC 17-Feb-84
Add yet more DDB variables for RMS, plus some flags for
compatibility flagging, and a MACRO to call the compatibility error
entry point.
4104 JLC 23-Feb-84
Remove $CERR, as it is not needed after all.
4105 JLC 28-Feb-84
Modify the calling sequence for error calls.
4111 JLC 16-Mar-84
Modify the calling sequence for error calls again.
4112 JLC 19-Mar-84
Remove FDBMS from FORVEC, as it is no longer necessary.
4114 JLC 28-Mar-84
Remove I%TCH on TOPS-10, as it is almost useless
and didn't work anyhow.
4116 JLC 6-Apr-84
Add DT.NUL for TOPS-10, same as DT.DSK.
4122 JLC 2-May-84
A whole raft of changes to make the TOPS-10 and TOPS-20
DDB databases the same.
4123 JLC 5-May-84
Add some MONSYM symbols to the TOPS-10 parameters for TABLK.
4124 JLC 8-May-84
Fix some AC definitions.
4127 JLC 15-May-84
Add some TOPS-10 UUOSYM definitions.
4131 JLC 12-Jun-84
Remove some F flags.
4132 JLC 15-Jun-84
Increased size of IOKWD to 17 from 7.
4135 JLC 10-Jul-84
Add TMPFIL for temporary files on TOPS-20. Add PPNSTR for TOPS-10
style PPNs for TOPS-20.
4144 JLC 29-Aug-84
Add keyword and table values for DISPOSE='PLOT'.
4152 JLC 24-Sep-84
Add symbols for symbol vectors in PDVs.
4153 JLC 27-Sep-84
Add a new offset (FSTAD) for the initialization arg block.
4155 JLC 4-Oct-84
Change FO$SBA to FO$GBA, since it now gets the break address
rather than setting anything. Move $DCALL and $DJCAL here
from MTHPRM.
4161 JLC 1-Nov-84
Change ASCFLG to IMGFLG, indicating that the device in question is
an image-mode device which cannot have LSCWs. This will then include
the ASCII-only devices. Remove all tests of MODE(D)=MD.IMG, since
this test is not general enough; instead just check IMGFLG.
Widen CNSL1 and CNSL2 in DDB to full-word addresses.
4171 JLC 29-Nov-84
Add some 7.03 parameters and set .RBMAX to its 7.03 value so
that CARRIAGECONTROL='FORTRAN' will work when the customers
receive 7.03.
4174 JLC 9-Jan-85
Remove private definition of .RBMAX, since the TOPS-10 monitor
group wedged the carriage control bits into the current RIB.
4200 TGS 28-Jan-85
Implement V7 edit 3442: Initialize ENDP/%ENDP to 777. In section
0, set %ENDP for MINILP to 763 if DDT is in core; if not, leave
at 777. For non-zero sections, simply set page 777 as unavailable.
(Modules FORPRM, FORMEM)
4203 JLC 13-Mar-85
Add user-supplied bytesize (UBSIZ) to DDB, to differentiate it
from the actual bytesize of the file.
***** End V10 Development *****
4233 RJD 18-Nov-85
Add MAXSEC for maximum section number.
***** Begin Version 11 *****
5000 TGS 18-Mar-85
Implement RMS OPEN. Define constants and DDB fields.
5011 MRB 7-APR-86
Allow long symbol names in namelist names. (Added defs for them)
5014 MRB 6-JUN-86
Implement RMS UNLOCK statement. Added symbol UNLOC to FORVEC.
5016 MRB 16-Jun-86
Implement MAXREC keyword in open statements.
***** End Revision History *****
\
SEARCH MTHPRM
IF10,< SEARCH UUOSYM>
IF20,< SEARCH MONSYM>
;INSTALLATION-DEPENDENT PARAMETERS
;FT10 ;TOP10 (NONZERO=YES)
;FT20 ;TOPS-20 (NONZERO=YES)
;FTKL ;KL/KS PROCESSOR (NONZERO=YES)
;FTEXT ;[5000] PROCESSOR SUPPORTS EXT ADDR. (NONZERO=YES)
;FTPSCT ;PSECTED FOROTS (NONZERO=YES)
;FTVAX ;ALL UNITS ARE DSK: EXCEPT 5, WHICH IS TTY (NONZERO=YES)
;FTDSK ;ALL UNITS DEFAULT TO DSK: (NONZERO=YES)
;FTAST ;ASTERISK FILL; FIELD WIDTH OVERFLOW (NONZERO=YES)
;STARTP ;PAGE TO START LOOKING FOR MEMORY
;FTNLC1 ;IGNORE DATA IN COL 1 OF NAMELIST INPUT (NONZERO=YES)
;FTGGL ;GFLOATING DOUBLE PRECISION LIBRARY CHECKS
;WRNCNT ;*UNSUPPORTED* NUMBER OF WARNINGS OF A SPECIFIC
; ; TYPE THAT GET PRINTED. FOROTS's default is 2.
;DEFAULTS:
;FT20: NO
;FT10: NO
;FTKL: YES IF NO PROCESSOR SPECIFIED
;FTEXT NO ;[5000]
;FTPSCT: NO
;FTVAX: NO
;FTDSK: NO
;FTAST: YES
;STARTP: 577
;FTNLC1: NO
IFNDEF FTMATH,<?PRINTX MODULE MUST BE ASSEMBLED WITH MTHPRM.MAC
END>
IFNDEF FTVAX,<FTVAX==0> ;UNITS DON'T DEFAULT TO VAX DEVICE TABLE
IFNDEF FTDSK,<FTDSK==0> ;ALL UNITS DON'T DEFAULT TO DEVICE DSK
IFNDEF FTAST,<FTAST==-1> ;ASTERISK FILL
IFNDEF STARTP,<STARTP==577> ;600 UP ARE LAST USED BY FOROTS MEMORY MGR
IFNDEF FTNLC1,<FTNLC1==0> ;DO NOT SKIP COLUMN 1 ON NAMELIST INPUT
IFNDEF WRNCNT,<WRNCNT==2> ;Number of warnings of a specific type
; that get printed.
;FOROTS AC DEFINITIONS
D==S1 ;POINTER TO CURRENT DDB
U==S2 ;THE UNIT BLOCK POINTER
F==S3 ;LOCAL FLAGS
FREEAC==S4 ;FOR NOW, IT'S THE "FREE AC"
;BYTE POINTER AND BYTE SIZE DEFINITIONS
IBPW==5 ;CURRENTLY 5 BYTES/WORD INTERNALLY IN FOROTS
IBSZ==7 ;BYTE SIZE = 7
IFBYT==<POINT 7> ;ONE-WORD LOCAL FIRST BYTE POINTER
IFOWG==<610000,,0> ;ONE-WORD GLOBAL FIRST BYTE POINTER
;$BLDBP - build byte ptr from address, when you want a 7-bit or 6-bit
; byte pointer that will give you first byte at the address
; when you ILDB.
DEFINE $BLDBP (AC),<
TLNE AC,-1 ;Skip if local address
TXOA AC,B1WBP7 ;Global address, make BP and skip
HRLI AC,(POINT 7,) ;Local address, make BP
>
DEFINE $BLBP6 (AC),< ;[5011]New for sixbit strings
TLNE AC,-1 ;Skip if local address
TXOA AC,B1WBP6 ;Global address, make BP and skip
HRLI AC,(POINT 6,) ;Local address, make BP
>
;OTHER DEFS
RWKWD==17B8 ;READ, WRITE KEYWORDS GO FROM 0 TO 17 ONLY
IOKWD==17B8 ;I/O KEYWORDS GO FROM 0 TO 17 ONLY
MOSBSZ==6 ;MTOPR STATUS BLOCK SIZE
BUFNM==4 ;DEFAULT BUFFER COUNT - NUMBER OF PAGES/FILE
CHMSIZ==200 ;MINIMUM SIZE TO ADD TO FN%GAD CHAR STACK CALLS
ETBSIZ==^D30 ;ERROR TABLE SIZE FOR ERRSET, ETC.
IFMTSZ==200 ;INITIAL FORMAT ENCODING AREA SIZE
LPDL==1000 ;LENGTH OF STACK
LRECBF==^D80 ;INITIAL LENGTH OF RECORD BUFFER, BYTES
LTEXTW==100 ;LENGTH OF BUFFER FOR FULL FILESPEC
LTEXTC==LTEXTW*5 ;# CHARACTERS IN FILESPEC BUFFER
LATOMW==40 ;ATOM BUFFER LENGTH
LATOMC==LATOMW*5 ;AND IN CHARS
NLDIBF==^D140 ;List-directed input character string buffer
;byte length
FLSIZE==20 ;INITIAL SIZE OF LS FREE LIST
PLEN==1 ;LENGTH OF PAGE. ARG BLOCK
;*** DO NOT SET ABOVE 1 UNTIL MONITOR FIXED
FMTN==^D47 ;POINTERS TO ENCODED FORMAT STATEMENTS
INQUNT==-^D12 ;INQUIRE
IFIUNI==-^D11 ;INTERNAL FILE INPUT
IFOUNI==-^D10 ;INTERNAL FILE OUTPUT
ENCUNI==-^D9 ;ENCODE
DECUNI==-^D8 ;DECODE
MINUNIT==-7 ;MIN LEGAL UNIT NUMBER
RRUNIT==-6 ;REREAD UNIT
MAXUNIT==^D99 ;MAX LEGAL UNIT NUMBER
MAXPDV==5 ;MAX PDVS TO SCAN AT ONCE
MAXSEC==37 ;[4233] MAX SECTION NUMBER
MAXARG==^D128 ;MAX # ARGS IN AN I/O LIST
;[5000] DEFINE RMS CONSTANTS
IF20,<
CACHSR==^D20 ;RMS CACHESIZE (RECORDS)
CACHSZ==CACHSR*2 ;RMS CACHESIZE (WORDS)
MAXKEY==^D255 ;MAX # RMS KEY= INDEXES
KSPLEN==3 ;KEY SPEC ARGLIST ENTRY LENGTH
LBO==0 ;OFFSET FOR LOWER BOUND
UBO==1 ;OFFSET FOR UPPER BOUND
DTO==2 ;OFFSET FOR KEY DATA TYPE
> ; End IF20
;[5000] END RMS CONSTANTS
VFOROTS==11 ;FOROTS MAJOR VERSION
;FORHST.MAC DEFINES WHOLE VERSION NUMBER
B1WBP7==<61>B5 ;Bits to TXO when you want a one-word
;global byte pointer, 7-bits, such that
;ILDB gets first byte in the word.
B1WBP6==<45>B5 ;Bits to TXO when you want a one-word
;global byte pointer with 6-bits.
;Character stack
ICHRSZ==1000 ;Create 1 page non-extended character stack
ECHSIZ==1 ;Minimum words for extended char stack
;COMPATIBILITY FLAGGING INDICES
VAXIDX==1 ;INDICATES VAX FLAGGING
ANSIDX==2 ;INDICATES ANSI-77 FLAGGING
;PROCESSOR-DEPENDENT DEFAULTS
IF20,<
ENDP==777 ;[3276][4200] TOP OF CORE ON -20 (LEAVE UDDT)
PRTDIG==6 ;6 DIGITS IN PROTECTION
> ;END IF20
IF10,<
ENDP==775 ;TOP OF CORE ON -10 (LEAVE PFH)
PRTDIG==3 ;3 DIGITS IN PROTECTION
> ;END IF10
;CHARACTER CONSTANTS
.CHLAB==74 ;Left angle bracket "<"
.CHRAB==76 ;Right angle bracket ">"
;MISCELLANEOUS DEFINITIONS
IF10,<
;TOPS-10 DEFINITIONS NOT IN RELEASE 7.01 UUOSYM
ERDAJ%==52 ;UNIT ASSIGNED TO ANOTHER JOB
ERNFC%==57 ;NOT ENOUGH CHANNELS
;PAGE. UUO FUNCTIONS
.PAGSC==12 ;SECTION MANIPULATION
PG.GSF==1B0 ;FOR .PAGSC, 1=DESTROY, 0=CREATE SECTION
PG.GMS==1B1 ;FOR .PAGSC, MAP SECTIONS TOGETHER
;FOROTS-10 DEFINITIONS FOR TOPS-20 SYMBOLS
CM%FW==1B7 ;FLAG WORD IN TABLK TABLE
CM%ABR==1B33 ;THIS IS AN ABBREVIATION STRING
CM%INV==1B35 ;INVISIBLE (NOT ACTUALLY USED BY FOROTS-10)
;FOROTS DEFINITION OF .RBTYP (AND OTHER 7.03 PARAMETERS)
;SO FORTRAN CARRIAGE CONTROL
;WILL WORK WHEN THE CUSTOMER PUTS UP 7.03
.RBTYP==22 ;FILE TYPE WORD
RB.DEC==1B0 ;TELLS TOPS-10 TO PAY ATTENTION TO .RBTYP
RB.DCC==77B35 ;CARRIAGE CONTROL
.RBCFO==1 ;FORTRAN CARRIAGE CONTROL
> ;END IF10
IF20,<
GT%ARG==1B22 ;Arg block supplied for GET
GT%BAS==1B2 ;BASE-address word supplied in arg block
FB%FOR==100000 ;NOT DEFINED IN FIELD IMAGE MONSYM
JS%NOD==400000,,0 ;NOT DEFINED IN 5.1 MONSYM
OPDEF XGVEC% [JSYS 606] ;[3156] Get extended entry vector info
OPDEF XSVEC% [JSYS 607] ;[3156] Set extended entry vector info
OPDEF PDVOP% [JSYS 603] ;[4120] MANIPULATES PROGRAM DATA VECTORS
;FUNCTION CODES ACCEPTED IN AC1:
.POGET==:0 ;GET A SET OF PDVAS
;(PROGRAM DATA VECTOR ADDRESSES)
;ARG BLOCK OFFSETS FOR BLOCK ADDRESSED BY AC2
.POCT1==:0 ;SIZE OF ARG BLOCK INCLUDING THIS WORD
.POPHD==:1 ;PROCESS HANDLE
.POCT2==:2 ;SIZE OF DATA BLOCK (AND SIZE OF RETURNED DATA)
.PODAT==:3 ;ADDRESS OF DATA BLOCK
.POADR==:4 ;SMALL ADDRESS OF DATA VECTOR
.POADE==:5 ;LARGE ADDRESS OF DATA VECTOR ADDRESS RANGE
;OFFSETS DEFINED WITHIN PROGRAM DATA VECTORS
.PVCNT==:0 ;Length of vector
.PVNAM==:1 ;Address of a word-aligned ASCIZ program name
.PVMEM==:5 ;Address of a block describing program memory
.PVSYM==:6 ;Address of the program symbol table
;[4120] PVMEM BLOCK (NOT YET IN MONSYM)
.PMCNT==:0 ;COUNT OF ALL WORDS IN BLOCK
.PMDAT==:0 ;HEADER FOR SUB-TABLE (BITS,,LENGTH)
.PMLOW==:1 ;XFIW FOR BLOCK LO ADDRESS
.PMHI==:2 ;XFIW FOR BLOCK HI ADDRESS
.PMRES==:3 ;RESERVED TO DEC
;SYMBOL VECTOR DEFINITIONS
.STLEN==0 ;SYMBOL VECTOR LENGTH
.STDAT==0 ;TYPE AND SYMBOL TABLE LENGTH WORD
ST%TYP==77B5 ;SYMBOL TABLE TYPE
ST%LEN==7777777777B35 ;SYMBOL TABLE LENGTH
.STPTR==1 ;SYMBOL TABLE POINTER WORD
.R50D==1
> ;END IF20
;FOROTS INITIALIZATION ARG BLOCK PARAMETERS
FDBS==0 ;ADDRESS OF DBSTP$
FLAL==1 ;ADDRESS OF USER FIXUP ARG BLOCK
FLGVX==2 ;VALUE OF VAX FLAGGER
FLG77==3 ;VALUE OF ANSI FLAGGER
FSTAD==4 ;ADDRESS OF LOCATION CONTAINING START ADDRESS
;FOROP FUNCTIONS
FO$APR==0 ;READ APR TABLE ADDRESSES
FO$ILL==1 ;READ ILL FLAG ADDRESS
FO$ERR==2 ;READ ERRSNS INFO
FO$DIV==3 ;Set DIVERT unit
FO$HSP==4 ;READ HIGH SEG SYMBOL POINTER
FO$FSV==5 ;ENCODE A FORMAT
FO$FCL==6 ;DELETE IT
FO$GLN==7 ;GET THE CURRENT LSA LINE NUMBER
FO$MEM==10 ;RETURN VARIOUS MEMORY PARAMETERS
FO$CHN==11 ;RETURN ADDR OF CHANNEL WORD
FO$QIT==12 ;QUIET EXIT FROM FORTRAN
FO$GDV==13 ;Get DIVERT unit
FO$CLS==14 ;CLOSE ALL FILES
FO$GCH==15 ;GET CHANNEL # (-10) OR JFN (-20)
FO$GFB==16 ;GET FILOP BLK ADDR (-10) OR 0 (-20)
FO$GFU==17 ;GET FIRST FREE UNIT NUMBER
FO$GBA==20 ;GET FORDDT BREAK ADDRESS FOR FOROTS ERRORS
FO$NOS==21 ;SET FOROTS FOR NO SORT IN FOROTS' SECTION
FO$SRT==22 ;PREMARK SORT SPACE IN FOROTS' SECTION
FO$UDB==23 ;[3432] GET ADDRESS OF %UDBAD
FO$PAT==24 ;GET AND ALLOW PA1050
FO$SVF==25 ;SET FOROTS TO SAVE ENCODED FORMATS
FO$NSF==26 ;SET FOROTS TO NOT SAVE ENCODED FORMATS
FO$DEF==27 ;DEALLOCATE ENCODED FORMATS
FO$DMM==30 ;SET DEBUG SWITCH FOR MEMORY MANAGER
.ETMAX==^D100 ;Maximum FOROTS error msg # is 99
;MNEMONICS FOR OPEN/CLOSE KEYWORD NUMBERS
OK.IGN==0 ;OMITTED ARG, IGNORED
OK.DIA==1 ;DIALOG
OK.ACC==2 ;ACCESS
OK.DEV==3 ;DEVICE
OK.BFC==4 ;BUFFER COUNT
OK.BLK==5 ;BLOCK SIZE
OK.FIL==6 ;FILE
OK.PRO==7 ;PROTECTION
OK.DIR==10 ;DIRECTORY
OK.LIM==11 ;LIMIT
OK.MOD==12 ;MODE
OK.FLS==13 ;FILE SIZE
OK.REC==14 ;RECORD SIZE
OK.DISP==15 ;DISPOSE
OK.VER==16 ;VERSION
OK.ORG==17 ;ORGANIZATION
OK.SHR==20 ;SHARED
OK.IOS==21 ;IOSTAT
OK.ASV==22 ;ASSOCIATE VARIABLE
OK.PAR==23 ;PARITY
OK.DEN==24 ;DENSITY
OK.BLNK==25 ;BLANK
OK.CC==26 ;CARRIAGE CONTROL
OK.FORM==27 ;FORM
OK.BYT==30 ;LABELS
OK.PAD==31 ;PADCHAR
OK.RTP==32 ;RECTYPE
OK.STAT==33 ;STATUS
OK.TAPM==34 ;TAPE MODE
OK.RO==35 ;READONLY
OK.UNIT==36 ;UNIT
OK.ERR==37 ;ERR
OK.XST==40 ;EXIST
OK.FRM==41 ;FORMATTED
OK.NMD==42 ;NAMED
OK.NRC==43 ;NEXTREC
OK.NBR==44 ;NUMBER
OK.OPN==45 ;OPENED
OK.SEQ==46 ;SEQUENTIAL
OK.UNF==47 ;UNFORMATTED
OK.NAM==50 ;NAME
OK.KEY==51 ;KEY [5000]
OK.UOP==52 ;USEROPEN [5000]
OK.DEQ==53 ;DIALOG= [5000]
OK.DFT==54 ;DEFAULTFILE [5000]
OK.KYD==55 ;KEYED [5000]
OK.SPN==56 ;NOSPANBLOCKS [5000]
OK.MRN==57 ;MAXREC [5016]
;MNEMONICS FOR READ/WRITE/BACKSPACE (& FRIENDS) KEYWORD NUMBERS
IK.IGN==0 ;OMITTED ARG, IGNORED
IK.UNIT==1 ;UNIT
IK.FMT==2 ;FMT
IK.FMS==3 ;FORMAT SIZE
IK.END==4 ;END
IK.ERR==5 ;ERR
IK.IOS==6 ;IOSTAT
IK.REC==7 ;REC
IK.NML==10 ;NAMELIST ADDRESS
IK.MTOP==11 ;MTA OP CODE
IK.HSA==12 ;HOLLERITH STRING (ENCODE/DECODE) ADDRESS
IK.HSL==13 ;HOLLERITH STRING LENGTH, CHARS
;ORTHOGONAL DISPOSE/STATUS INDEX VALUES
SD.ILL==-1 ;ILLEGAL
SD.NOU==0 ;NOTHING, UNKNOWN
SD.NOS==1 ;NOTHING, SAVE
SD.NOD==2 ;NOTHING, DELETE
SD.NOX==3 ;NOTHING, EXPUNGE
SD.PRU==4 ;PRINT, UNKNOWN
SD.PRS==5 ;PRINT, SAVE
SD.PRD==6 ;PRINT, DELETE
SD.PRX==7 ;PRINT, EXPUNGE
SD.PUU==10 ;PUNCH, UNKNOWN
SD.PUS==11 ;PUNCH, SAVE
SD.PUD==12 ;PUNCH, DELETE
SD.PUX==13 ;PUNCH, EXPUNGE
SD.SUU==14 ;SUBMIT, UNKNOWN
SD.SUS==15 ;SUBMIT, SAVE
SD.SUD==16 ;SUBMIT, DELETE
SD.SUX==17 ;SUBMIT, EXPUNGE
SD.PLU==20 ;PLOT, UNKNOWN
SD.PLS==21 ;PLOT, SAVE
SD.PLD==22 ;PLOT, DELETE
SD.PLX==23 ;PLOT, EXPUNGE
;FLAG BITS
DEFINE FLG (F) <
%F==%F_-1
F==%F_1>
;F: LOCAL FLAGS
; Set to initial value at start of each I-O statement
%F==1B0
FLG F%ETP ;TYPE "E" FOR SCIENTIFIC NOTATION
FLG F%DTP ;TYPE "D" FOR SCIENTIFIC NOTATION
FLG F%GTP ;G FORMAT
;PERMANENT FLAGS, LEFT UNTIL EXPLICITLY CLEARED
%F==1B0
FLG D%WRT ;WE HAVE WRITE ACCESS TO FILE
FLG D%SEOL ;SUPPRESS NEXT END OF LINE SEQUENCE
FLG D%PDOL ;DOLLAR FORMAT IN PREVIOUS RECORD
FLG D%END ;EOF REACHED IN FILE
FLG D%MOD ;(20) DISK FILE MODIFIED, MUST UPDATE FDB
FLG D%IN ;FILE IS OPEN FOR INPUT
FLG D%OUT ;FILE IS OPEN FOR OUTPUT
FLG D%OPEN ;Explicit OPEN statement has been done
;TEMP FLAGS, CLEARED AT START OF EACH I/O STATEMENT
FLG D%STCR ;$ FORMAT IN THIS RECORD
FLG D%NML ;NAMELIST I/O
FLG D%LSD ;LIST-DIRECTED I/O
FLG D%RWI ;[5000] REWRITE IN PROGRESS
;Here are the flags to clear
D%CLR== D%STCR+D%NML+D%LSD ;[5000] DO NOT ADD D%RWI!
;FLAGS FOR USE IN IOERR MACRO
%F==1B0
FLG I%REC ;TYPE ERRONEOUS RECORD WITH ARROW UNDER IT
FLG I%REC1 ;SAME AS ABOVE BUT MOVE ARROW LEFT 1 CHAR
FLG I%FMT ;TYPE FORMAT STATEMENT WITH ARROW UNDER IT
FLG I%JERR ;ERROR CONTAINS $J, MUST GET ERROR # IN T1
FLG I%UOF ;[5000] USEROPEN ERROR
PURGE %F
;MACRO DEFINITIONS
;FOROTS ENTRY VECTOR
DEFINE FORVEC <
X INIT ;FOROTS INITIALIZATION
X FORER ;ERROR PROCESSOR
X OPEN ;DEVICE OPEN
X CLOSE ;DEVICE CLOSE
X EXIT1 ;CLOSE ALL FILES
X IN ;FORMATTED INPUT
X OUT ;FORMATTED OUTPUT
X RTB ;UNFORMATTED BINARY INPUT
X WTB ;UNFORMATTED BINARY OUTPUT
X ENC ;ENCODE
X DEC ;DECODE
X NLI ;NAMELIST INPUT
X NLO ;NAMELIST OUTPUT
X IOLST ;INPUT/OUTPUT LIST ITEM PROCESSING
X FIN ;INPUT/OUTPUT LIST TERMINATION
X MTOP ;DEVICE POSITIONING/UTILITY FUNCTIONS
X FIND ;RANDOM ACCESS RECORD FIND
X EXIT ;PROGRAM TERMINATION
X ALCOR ;DYNAMIC CORE ALLOCATION
X DECOR ;DYNAMIC CORE DEALLOCATION
X ALCHN ;ALLOCATE AN I/O CHANNEL
X DECHN ;DEALLOCATE AN I/O CHANNEL
X TRACE ;TRACEBACK OF ROUTINE CALLS
X FUNCT ;GENERAL OTS INTERFACE
X INQU ;INQUIRE BY UNIT
X FOROP ;MISCELLANEOUS LIBRARY UTILITIES
X IFI ;INTERNAL FILE INPUT
X IFO ;INTERNAL FILE OUTPUT
X MTHER ;MATH LIBRARY ERROR
X ABORT ;ABORT WITH TRACE
X INQF ;INQUIRE BY FILE
IF20,<
X DELTR ;DELETE [5000]
X REWRF ;REWRITE (FORMATTED) [5000]
X REWRU ;REWRITE (UNFORMATTED) [5000]
X UNLOC ;UNLOCK [5014]
> ;End IF20
> ;END FORVEC
DEFINE FENTRY (NAME1,NAME2)
< ENTRY NAME1'.
SIXBIT /NAME1'./
NAME1'.:
IFNB <NAME2>,
< ENTRY NAME2'.
NAME2'.:
> ;END IFNB NAME2
> ;END FENTRY
;FATAL JSYS ERROR REPORTING
; E.IJE (AND ERRIJE) LIVE IN FOROTS, AND WHEN INVOKED WILL
; TELL WHERE THE ERROR OCCURED AND HALT.
IF20,<
DEFINE JSHALT <
IF2,<IFNDEF E.IJE,<EXTERN E.IJE>>
ERCAL E.IJE
> ;END JSHALT
> ;END IF20
;STACK VARIABLE MACROS
;ALLOCATE ROOM FOR VARIABLES ON THE STACK
; GIVEN THE LIST OF VARIABLES 'L', COUNT
; THE NUMBER OF ITEMS, DEFINE THEM USING THE
; NAME GIVEN IN THE LIST 'L', ADJUST THE STACK
; UP FOR ALLOCATION, AND DEFINE THE UNSTK MACRO
; TO ADJUST THE STACK SIZE BACK DOWN
DEFINE STKVAR (L) <
.L==0
IRP L,<.L==.L+1> ;COUNT ARGS
.N==0
IRP L,<
IFNB <L>,<
STKDEF (L,\<.L-.N-1>) ;DEFINE NAMED ARG
> ;END IFNB
.N==.N+1
> ;END IRP
ADJSP P,.L ;ALLOCATE STACK SPACE
DEFINE UNSTK < ADJSP P,-.L > ;DEFINE DEALLOCATOR
PURGE .N
> ;END STKVAR
;DEFINE STACK VARIABLE
; NAME 'E', DEFINED AS OFFSET -'V'
DEFINE STKDEF (E,V) <DEFINE E <-V(P)>>
;CONVENIENT DOUBLE WORD CLEAR, LOCATION 'E'AND 'E+1'
DEFINE DSETZM (E) <
SETZM E
SETZM 1+E>
;Macros for field masks
;These are the standard TOPS-20 macros taken from MACSYM.
;CONSTRUCT BYTE POINTER TO MASK
DEFINE POINTR(LOC,MASK)<POINT WID(MASK),LOC,POS(MASK)>
;PUT RIGHT-JUSTIFIED VALUE INTO FIELD SPECIFIED BY MASK
DEFINE FLD(VAL,MSK)<<VAL>B<POS(MSK)>>
;ERROR MACROS
; FERR (CHR,COD,N1,N2,MSG,ARGS,FLGS) ;FORLIB ERROR
; TERR (CHR,COD,N1,N2,MSG,ARGS,FLGS) ;APR TRAP CALL
;
;CHR INITIAL CHAR FOR ERROR MESSAGE ([, %, ?)
; IF [, MESSAGE IS TERMINATED WITH ]
; IF ?, TYPEAHEAD CLEARED AFTER MESSAGE
; IF NULL, 3-CHAR PREFIX ISN'T TYPED
; IF $, FIRST ARG IS INITIAL CHAR
;COD 3-CHARACTER PREFIX
;N1 ERROR CLASS NUMBER
;N2 2ND ERROR NUMBER
;MSG TEXT OF ERROR MESSAGE
; $ INDICATES AN ARG TO BE SUBSTITUTED INTO THE MESSAGE
; THE CHAR AFTER THE $ GIVES THE FORMAT OF THE SUBSTITUTION
;ARGS LIST OF ARGUMENT ADDRESSES, ONE-TO-ONE CORRESPONDENCE WITH $S
; IN MESSAGE TEXT
;FLGS ERROR FLAGS
;
;THE ERROR MACROS GENERATE 1 WORD IN LINE, SO CAN BE SKIPPED OVER.
;THEY DO NOT ALTER ANY ACS.
;
; MSG CAN INCLUDE FORMAT DESCRIPTORS OF THE FORM '$X'
; EACH FORMAT DESCRIPTOR TAKES AN ARGUMENT FROM THE LIST 'ARGS'
; THE CURRENT FORMATTING AVAILABLE IS:
;
; $$ ;TYPE $
; $[ ;TYPE LEFT ANGLE BRACKET
; $O ;OCTAL NUMBER
; $D ;DECIMAL NUMBER
; $A ;ASCIZ STRING
; $C ;ASCII CHAR, RIGHT-JUSTIFIED
; $S ;SIXBIT WORD
; $X ;XWD FORMAT, OCTAL
; $5 ;RADIX50 WORD
; $L ;ADDRESS AS LABEL+OFFSET
; $T ;SPACES TO GET TO COL N
; $J ;JSYS ERROR MESSAGE [NO ARG] (FT20)
; $Y ;MS TIME AS HH:MM:SS.S
; $P ;ERROR PC, OCTAL [NO ARG]
; $E ;LOOKUP/ENTER/RENAME ERROR STRING (FT10)
; $I ;IO ERROR BITS CONVERTED TO ASCII [USES (D)] (FT10)
; $F ;FILESPEC FROM DDB [NO ARG, USES (D)] (FT10)
; $Z ;SIXBIZ OR ASCIZ STRING (FT10)
; $Z ;SIXBIZ OR ASCIZ STRING (FT20)
;
; EACH CALL GENERATES 1 WORD OF CODE IN LINE, AND CAN BE SKIPPED
%EOFF==1 ;OFFSET TO ERROR BLOCK
DEFINE EMSG (CHR,PFX,N1,N2,MSG,ARGS,FLAGS) <
ENTRY E.'PFX
E.'PFX: ;DEFINE THE ERROR IF NOT NULL
"CHR" ;ERROR CHARACTER
SIXBIT /PFX/ ;ERROR PREFIX
EXP N1,N2 ;ERROR NUMBERS
POINT 7,[ASCIZ \MSG\] ;POINTER TO MESSAGE
EXP FLAGS ;ATTRIBUTE FLAGS
IRP ARGS, <ARGS> ;ARGUMENTS, IF ANY
> ;END EMSG
;SPECIAL ERRORS
;$SNH - generate "SHOULD NOT HAPPEN" error
DEFINE $SNH,<
$ECALL SNH
>;END DEFINE $SNH
;$IOERR TYPES A ONE-LINE PREFIX IDENTIFYING THE
; STATEMENT CONTAINING THE ERROR AND THE NAME OF THE CURRENT FILE.
; EXAMPLES:
; $IOERR (ILF,,,?,ILLEGAL CHARACTER IN FORMAT)
; $IOERR (RBR,39,310,?,REREAD NOT PROCEEDED BY READ)
DEFINE $IOERR (CHR,PFX,N1,N2,MSG,ARGS,FLAGS) <
INTERN E.'PFX
E.'PFX:
IF2,<IFNDEF %IOERR,<EXTERN %IOERR>>
PUSHJ P,%IOERR
"CHR" ;ERROR CHARACTER
SIXBIT /PFX/ ;ERROR PREFIX
EXP N1,N2 ;ERROR NUMBERS
POINT 7,[ASCIZ \MSG\] ;POINTER TO MESSAGE
EXP FLAGS ;ATTRIBUTE FLAGS
IRP ARGS, <ARGS> ;ARGUMENTS, IF ANY
> ;END $IOERR
;$FERR IS FOR USE BY FORLIB
; IT CALLS FORER.
; EXAMPLE:
; FERR (DNO,21,125,?,DIVERT: UNIT $D IS NOT OPEN,<@(L)>)
DEFINE $FERR (CHR,PFX,N1,N2,MSG,ARGS,FLAGS) <
ENTRY F.'PFX
F.'PFX:
PUSHJ P,FORER.##
"CHR" ;ERROR CHARACTER
SIXBIT /PFX/ ;ERROR PREFIX
EXP N1,N2 ;ERROR NUMBERS
POINT 7,[ASCIZ \MSG\] ;POINTER TO MESSAGE
EXP FLAGS ;ATTRIBUTE FLAGS
IRP ARGS, <ARGS> ;ARGUMENTS, IF ANY
>; END $FERR
;$DCALL CALLS AN ERROR ROUTINE DEFINED SOMEWHERE BY AN $DERR MACRO
DEFINE $DCALL (PFX,CONT) <
IFNB <CONT>,<PRINTX ?DCALL CONTINUATION ADDRESS SPECIFIED - IGNORED>
EXTERN D.'PFX
JRST D.'PFX
> ;END $DCALL
;$DJCAL CALLS AN ERROR ROUTINE DEFINED SOMEWHERE BY AN $DERR MACRO
;WITH AN ERJMP
DEFINE $DJCAL (PFX,CONT) <
IFNB <CONT>,<PRINTX ?DJCAL CONTINUATION ADDRESS SPECIFIED - IGNORED>
EXTERN D.'PFX
ERJMP D.'PFX
> ;END $DJCAL
;$FCALL CALLS AN ERROR ROUTINE DEFINED SOMEWHERE BY A FERR MACRO
DEFINE $FCALL (PFX,CONT) <
EXTERN F.'PFX
IFB <CONT>,< PUSHJ P,F.'PFX >
IFNB <CONT>,<JRST [PUSHJ P,F.'PFX
JRST CONT] >
> ;END $FCALL
;$FJCAL CALLS AN ERROR ROUTINE DEFINED SOMEWHERE BY A FERR MACRO
DEFINE $FJCAL (PFX,CONT) <
EXTERN F.'PFX
IFB <CONT>,< ERCAL F.'PFX >
IFNB <CONT>,<ERJMP [PUSHJ P,F.'PFX
JRST CONT] >
> ;END $FJCAL
;STORAGE/STRUCTURE DEFINITION MACROS
; NAME is defined to be a small offset, starting at 0.
; or'ed with a bit in the left half that indicates special cases
; (and causes a "U" MACRO error if used incorrectly!)
; %'NAME is defined to be RH= the rightmost bit used.
; LH(%'NAME) = 0 unless it is a byte ptr (not a halfword).
; then LH (%'NAME) = size of byte.
;Macro to start a structure definition
DEFINE DEFST,<
$LOC==0
$P==-1
>
;Macro to define a name as a number and make sure
; that it had not been previously defined.
DEFINE DFN(NAME,LOC),<
IF1,<
IFDEF NAME, PRINTX ?NAME ALREADY DEFINED
>;END IF1
NAME==LOC
>;END DFN
;Macro to define N words.
DEFINE DEFWD (NAME,N<1>),<
IFGE $P,<
$P==-1
$LOC==$LOC+1 ;Jump to next word
>
DFN (NAME,$LOC)
%'NAME==^D35
$LOC==$LOC+N
>;END DEFWD
;Macro to define a random byte
DEFINE DEFBYT (NAME,S),<
IFG <$P+^D<S>-^D35>,<
$P==-1
$LOC==$LOC+1
>
$P==$P+^D<S> ;Find end position in word
DFN (NAME,$LOC) ;Plain name is offset
%'NAME==$P ;RH (%NAME) = rightmost bit
%%DONE==0
IFE <S - ^D18>,< ;Halfword
IFE <$P - ^D35>,< ;Right halfword
NAME==NAME+1B0
%%DONE==1
>
IFE <$P - ^D17>,< ;Left halfword
NAME==NAME+1B1
%%DONE==1
>
>
IFE %%DONE,< ;Not a halfword
NAME==NAME+1B2
%'NAME==%'NAME+ <<S>_^D30> ;Byte size in LH
>
>;END DEFBYT
;Macro to define a DEFBYT or DEFWD such that
; B simply renames A.
DEFINE DEFSNN (NEWNAM, OLDNAM),<
DFN NEWNAM,OLDNAM ;Check for name conflict
; and define it the same
%'NEWNAM==%'OLDNAM
>;END DEFSNN
;Macro to load a field
DEFINE LOAD (AC,NAME,THIRD),<
IFNB <THIRD>,< PRINTX ?LOAD used with more than 2 args - AC, NAME >
%%BTS==<NAME> & 7B2
%%IDX==<<NAME>_-^D18> & ^O77 ;Get index field if any
%%LFT==<NAME> & ^O777777
IFE <%%IDX>,<PRINTX %Index is zero for LOAD AC,NAME >
IFE %%BTS,<
MOVE AC,NAME
>
IFN <%%BTS & 1B0>,<
HRRZ AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B1>,<
HLRZ AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B2>,<
%%%S==<%'NAME>_-^D30 ;Size of field
%%%P==<%'NAME> & ^O77 ;"P"
LDB AC,[POINT %%%S,%%LFT(%%IDX),%%%P]
>
>;END DEFINE LOAD
;Macro to store a field
DEFINE STORE (AC,NAME,THIRD),<
IFNB <THIRD>,<PRINTX ?STORE with more than 2 args - AC, NAME >
%%BTS==<NAME> & 7B2
%%IDX==<<NAME>_-^D18> & 77 ;Get index field if any
%%LFT==<NAME> & ^O777777
IFE <%%IDX>,<PRINTX %Index is zero for STORE AC,NAME >
IFE %%BTS,<
MOVEM AC,NAME
>
IFN <%%BTS & 1B0>,<
HRRM AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B1>,<
HRLM AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B2>,<
%%%S==<%'NAME>_-^D30 ;Size of field
%%%P==<%'NAME> & ^O77 ;"P"
DPB AC,[POINT %%%S,%%LFT(%%IDX),%%%P]
>
>;END DEFINE STORE
;Macro to generate a "HRRE" or "HLRE"
;Gives error if the field is not a halfword.
DEFINE HXRE (AC,NAME,THIRD),<
IFNB <THIRD>,< PRINTX ?HXRE used with more than 2 args - AC, NAME >
%%BTS==<NAME> & 7B2
%%IDX==<<NAME>_-^D18> & 77 ;Get index field if any
%%LFT==<NAME> & ^O777777
IFE <%%IDX>,<PRINTX %Index is zero for HXRE AC,NAME >
IFE <%%BTS & 3B1>,<
PRINTX ?HXRE ERROR - NAME
>
IFN <%%BTS & 1B0>,<
HRRE AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B1>,<
HLRE AC,%%LFT(%%IDX)
>
>;END DEFINE HXRE
;Macro to generate a "HRL" or a "HLL"
; Prints error if the field is not a halfword
DEFINE HXL (AC,NAME,THIRD),<
IFNB <THIRD>,< PRINTX ?HXL used with more than 2 args - AC, NAME >
%%BTS==<NAME> & 7B2
%%IDX==<<NAME>_-^D18> & 77 ;Get index field if any
%%LFT==<NAME> & ^O777777
IFE <%%IDX>,<PRINTX %Index is zero for HXL AC,NAME >
IFE <%%BTS & 3B1>,<
PRINTX ?HXL ERROR - NAME
>
IFN <%%BTS & 1B0>,<
HRL AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B1>,<
HLL AC,%%LFT(%%IDX)
>
>;END DEFINE HXL
;Macro to generate a "HRLZ" or a "HLLZ"
; Prints error if the field is not a halfword
DEFINE HXLZ (AC,NAME,THIRD),<
IFNB <THIRD>,< PRINTX ?HXLZ used with more than 2 args - AC, NAME >
%%BTS==<NAME> & 7B2
%%IDX==<<NAME>_-^D18> & 77 ;Get index field if any
%%LFT==<NAME> & ^O777777
IFE <%%IDX>,<PRINTX %Index is zero for HXLZ AC,NAME >
IFE <%%BTS & 3B1>,<
PRINTX ?HXLZ ERROR - NAME
>
IFN <%%BTS & 1B0>,<
HRLZ AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B1>,<
HLLZ AC,%%LFT(%%IDX)
>
>;END DEFINE HXLZ
;Macro to generate a "HRR" or a "HLR"
; Prints error if the field is not a halfword
DEFINE HXR (AC,NAME,THIRD),<
IFNB <THIRD>,< PRINTX ?HXR used with more than 2 args - AC, NAME >
%%BTS==<NAME> & 7B2
%%IDX==<<NAME>_-^D18> & 77 ;Get index field if any
%%LFT==<NAME> & ^O777777
IFE <%%IDX>,<PRINTX %Index is zero for HXR AC,NAME >
IFE <%%BTS & 3B1>,<
PRINTX ?HXR ERROR - NAME
>
IFN <%%BTS & 1B0>,<
HRR AC,%%LFT(%%IDX)
>
IFN <%%BTS & 1B1>,<
HLR AC,%%LFT(%%IDX)
>
>;END DEFINE HXR
SUBTTL UDB - Unit Data Block
;+
; Structure Definition For Unit Data Block
;
; Pointed to by AC U
;-
DEFST ;Start the structure UDB
DEFWD DDBAD ;DDB address
DEFWD CNSL1 ;Link to next unit block marked for
; consolidation
DEFWD CNSL2 ;Link to previous unit block marked for
; consolidation
DEFBYT UNUM,^D18 ;Unit number
DEFBYT BLNK,1 ;/BLANK=
BL.NULL==0 ;NULL (DEFAULT FOR OPEN STATEMENT)
BL.ZERO==1 ;ZERO (DEFAULT FOR NO OPEN STATEMENT)
DEFBYT CC,3 ;/CARRIAGECONTROL=
CC.DEV==0 ;DEVICE (DEFAULT)
CC.FOR==1 ;FORTRAN (SET FDB FORTRAN BIT)
CC.LST==2 ;LIST (ADD CRLF WHEN PRINTING EACH RECORD)
CC.NON==3 ;NONE (ADD NOTHING WHEN PRINTING FILE)
CC.TRN==4 ;TRANSLATED (DO IMMEDIATE CC TRANSLATION)
DEFBYT PADCH,9 ;/PADCHAR
DEFBYT PADSP,1 ;PADCHAR SPECIFIED FLAG
DEFWD ULEN,0 ;Length of UDB
SUBTTL DDB - Device Data Block
;+
; Device Data Block (DDB) Offsets. There is only one DDB per open unit,
; however, there may be multiple units per DDB.
;
; Pointed to by AC D
;-
DEFST ;Start the structure definition
DEFWD USCNT ;How many unit blocks point to this DDB
DEFWD DVICE ;TOPS-10: Physical device name
;TOPS-20: Device number
DEFWD IRPTR ;Current input record byte pointer
DEFWD IRCNT ;Current input record byte count
DEFWD ORPTR ;Current output record byte ptr
DEFWD ORCNT ;Current output record byte count
DEFWD IRBUF ;INPUT RECORD BUFFER PNTR
DEFWD ORBUF ;OUTPUT RECORD BUFFER PNTR
DEFWD IRBEG ;PNTRS TO BEG OF DATA
DEFWD ORBEG
DEFWD IRLEN ;INPUT RECORD LENGTH
DEFWD ORLEN ;Current output record length
DEFWD IRBLN ;INPUT RECORD BUFFER LENGTH
DEFWD ORBLN ;OUTPUT RECORD BUFFER LENGTH
DEFWD IRSIZ ;ROOM FOR DATA IN RECORD BUFFER
DEFWD ORSIZ
DEFWD ROFSET ;OFFSET FROM REC BUFFER TO DATA
DEFWD BOFSET ;OFFSET FROM BLOCK BUFFER TO DATA
;[5000] DEFINE RMS DDB FIELDS
IF20,<
DEFWD FAB ;ADDRESS OF FAB
DEFWD RAB ;ADDRESS OF RAB
DEFWD XAB ;ADDRESS OF XAB
DEFWD STS ;CURRENT STS VALUE
DEFWD STV ;CURRENT STV VALUE
DEFWD RFA ;RFA FROM LAST READ/WRITE
DEFWD OSTYPE ;OPERATING SYSTEM TYPE FROM CONFIG XAB
DEFWD CACHE ;ADDRESS OF RECORD/RFA CACHE
DEFWD CACHPT ;CACHE POINTER
DEFWD UOPN ;ADDRESS OF USEROPEN ROUTINE
DEFWD STGFLG ;XAB CHAIN HAS CHARACTER DATATYPE
> ;End IF20
;[5000] END RMS DDB FIELDS
DEFWD WTAB ;Address of in-core page table
DEFWD PFTAB ;Address of page flag table (-1=modified)
DEFWD WPTR ;Core page address of file pages
DEFWD WSIZ ;Size of window in bytes
DEFWD WADR ;Sequential - Local (18-BIT) Address of window
;Random - Offset into WTAB of least used page
IF20,<
DEFSNN BUFADR,WADR ;BUFFER ADDRESS SAME AS WINDOW ADDRESS
DEFWD IPTR ;Byte ptr to next byte from file
DEFWD ICNT ;Free byte count
DEFWD IJFN ;JFN
DEFWD OJFN ;Output JFN
;Note: Always the same except if
; .PRIIN, .PRIOU
DEFWD TMPFIL ;-1=TEMPORARY FILE
DEFWD PPNSTR ;PPN STRING FOR TOPS-10 PROGRAMS
> ;END IF20
DEFWD BYTN ;Current byte number in file
DEFWD BLKN ;Block number
DEFWD AVAR ;/ASSOCIATE variable address
DEFWD CREC ;Number of current record
DEFWD FUMXD ;-1=FORMATTED/UNFORMATTED MIXED MODE FILE
DEFWD IOREC ;ROUTINE TO CALL TO READ OR WRITE A RECORD
DEFWD IOSUB ;ROUTINE TO CALL FOR IOLST.
DEFWD IOFIN ;ROUTINE TO CALL FOR FIN.
DEFWD LSNUM ;Line seq. number for this channel
DEFWD FLAGS ;DDB control flags (From DF)
DEFWD RSIZE ;Record size, in bytes or words
DEFWD MRSIZE ;MAXIMUM RECORD SIZE
DEFWD FRSIZW ;FORMATTED RECORD SIZE IN WORDS
DEFWD FRSIZB ;FORMATTED RECORD SIZE IN BYTES
DEFWD URSIZW ;UNFORMATTED RECORD SIZE IN WORDS
DEFWD URSIZB ;UNFORMATTED RECORD SIZE IN BYTES
DEFWD BPW ;BYTES PER WORD
DEFWD SPCWD ;A WORD OF SPACES FOR THIS FILE
DEFWD ORPOS ;VIRTUAL OUTPUT RECORD POSITION
DEFWD B36FLG ;FILE OPENED IN 36-BIT MODE
DEFWD IMGFLG ;IMAGE MODE - NO LSCW'S IN THIS FILE
DEFWD FILPRS ;FILESPEC HAS BEEN PARSED
DEFWD RECTP ;/RECORDTYPE
RT.UNS==0 ; UNSPECIFIED [5000]
RT.UND==1 ; UNDEFINED (STREAM) [5000]
RT.FIX==2 ; FIXED [5000]
RT.DEL==3 ; DELIMITED (VARIABLE) [5000]
RT.SEG==4 ; SEGMENTED [5000]
RT.SCR==5 ; STREAM_CR [5000]
RT.SLF==6 ; STREAM_LF [5000]
DEFBYT QNSWT,9 ;For /DISP:QUEUE, number of extra switches
DEFBYT QCNT,9 ;LENGTH OF EXTRA SWITCHES, WORDS
DEFBYT QASWT,^D18 ;ADDRESS OF BLOCK OF EXTRA SWITCHES
DEFBYT BLKSZ,^D18 ;/BLOCK SIZE
DEFBYT LIMIT,^D18 ;/LIMIT
DEFBYT BYTPT,^D18 ;BYTE POINTER TO LAST BYTE OF WORD
DEFBYT TTYW,9 ;LINE WIDTH, CHARACTERS
DEFBYT LTYP,6 ;(MTA) LABEL TYPE
IF20,< LT.UNL==.LTUNL ;0 - UNLABELED>
IF10,< LT.UNL==0 ;0 - UNLABELED>
DEFBYT ACC,4 ;/ACCESS
AC.SIO==0 ; SEQUINOUT (SEQUENTIAL)
AC.SIN==1 ; SEQIN
AC.SOU==2 ; SEQOUT
AC.RIN==3 ; RANDIN
AC.RIO==4 ; RANDOM
AC.APP==5 ; APPEND
AC.KEY==6 ; KEYED [5000]
AC.NUM==7 ; NUMBER OF TYPES OF ACCESS (FOR SAIDX) [5000]
DEFBYT SAIDX,4 ;STATUS/ACCESS INDEX
SA.ILL==-1 ; ILLEGAL COMBINATION OF STATUS/ACCESS
SA.UR==0 ; UNKNOWN, READ (MUST BE ZERO!)
SA.UW==1 ; UNKNOWN, WRITE
SA.URW==2 ; UNKNOWN, READ, WRITE
SA.UA==3 ; UNKNOWN, APPEND
SA.OR==4 ; OLD, READ
SA.OW==5 ; OLD, WRITE
SA.ORW==6 ; OLD, READ, WRITE
SA.OA==7 ; OLD, APPEND
SA.NW==10 ; NEW, WRITE
SA.SW==11 ; SCRATCH, WRITE
SA.UK==12 ; UNKNOWN, KEYED [5000]
SA.OK==13 ; OLD, KEYED [5000]
SA.NK==14 ; NEW, KEYED [5000]
SA.SK==15 ; SCRATCH, KEYED [5000]
DEFBYT RENAM,1 ;RENAME SPECIFIED IN CLOSE
IF10,< ;[5000] NO NEED FOR UBUFCT ON -10
DEFSNN BUFCT,UBUFCT ;[5000]
> ;End IF10
DEFBYT BUFCT,6 ;/BUFFER COUNT (0-63)
DEFBYT UBUFCT,6 ;[5000] USER'S BUFFERCOUNT
DEFBYT DEN,3 ;/DENSITY
DN.DEF==0 ; DEFAULT (UNIT DEFAULT)
DN.200==1 ; 200
DN.556==2 ; 556
DN.800==3 ; 800
DN.1600==4 ; 1600
DN.6250==5 ; 6250
DN.SYS==0 ; SYSTEM
DEFBYT UBSIZ,6 ;/BYTESIZE (USER-SUPPLIED)
DEFBYT DISP,4 ;/DISPOSE
DS.NOT==0 ; NOTHING (ALSO RENAME - IGNORED)
DS.SAVE==1 ; SAVE
DS.DEL==2 ; DELETE
DS.EXP==3 ; EXPUNGE
DS.PRNT==4 ; PRINT
DS.LIST==5 ; LIST
DS.PNCH==6 ; PUNCH
DS.SUB==7 ; SUBMIT
DS.PLT==10 ; PLOT
DEFBYT ODISP,2 ;ORTHOGONAL DISPOSE VALUE
OD.NOT==0 ; NOTHING
OD.PRI==1 ; PRINT
OD.PUN==2 ; PUNCH
OD.SUB==3 ; SUBMIT
OD.PLT==4 ; PLOT
DEFBYT FORM,2 ;/FORM
FM.FORM==1 ; FORMATTED
FM.UNF==2 ; UNFORMATTED
DEFBYT MODE,4 ;/MODE
MD.IMG==1 ; IMAGE
MD.BIN==2 ; BINARY
MD.DMP==3 ; DUMP
MD.ASC==4 ; ASCII 7-BIT
MD.ASL==5 ; LINED
MD.AS9==6 ; ASCII 9-BIT
IF20,< DEFBYT ORGAN,2 ;/ORGANIZATION
OR.UNK==0 ; NONE [5000]
OR.SEQ==1 ; SEQUENTIAL [5000]
OR.REL==2 ; RELATIVE (DIRECT) [5000]
OR.IDX==3 ; INDEXED (ISAM) [5000]
> ;End IF20
DEFBYT PAR,2 ;/PARITY
PR.ODD==1 ; ODD (DEFAULT)
PR.EVEN==2 ; EVEN
DEFBYT RO,1 ;/READONLY
IF20,< DEFBYT SHARE,1 ;/SHARED [5000]
DEFBYT SPAN,1 ;/NOSPANBLOCKS [5000]
DEFWD MAXREC ;/MAXREC [5016]
> ;End IF20
DEFBYT STAT,4 ;/STATUS
ST.UNK==0 ; UNKNOWN
ST.OLD==1 ; OLD
ST.NEW==2 ; NEW
ST.SCR==3 ; SCRATCH
ST.DISP==4 ; F-77 CLOSE STATUS WHICH IS REALLY
; DISPOSITION
ST.SAV==4 ; SAVE
ST.DEL==5 ; DELETE
ST.EXP==6 ; EXPUNGE
ST.NUM==7 ; NUMBER OF STATUS VALUES (FOR DSIDX)
DEFBYT OSTAT,2 ;ORTHOGONAL CLOSE STATUS VALUE
OS.UNK==0 ; UNKNOWN
OS.SAV==1 ; SAVE
OS.DEL==2 ; DELETE
OS.EXP==3 ; EXPUNGE
DEFBYT TAPM,3 ;/TAPEMODE
IF20,<
TM.SYS==.SJDDM ; (0) SYSTEM DEFAULT
TM.DMP==.SJDMC ; (1) CORE-DUMP (36-BIT BYTES)
TM.SIX==.SJDM6 ; (2) SIXBIT (7-TRACK)
TM.ANS==.SJDMA ; (3) ANSI-ASCII
TM.IND==.SJDM8 ; (4) INDUSTRY COMPATIBLE
TM.HDN==.SJDMH ; (5) HIGH-DENSITY
> ;END IF20
IF10,<
TM.SYS==.TFMDD ; (0) SYSTEM DEFAULT
TM.DMP==.TFMID ; (1) 9-TRACK CORE-DUMP
TM.SX9==.TFM6B ; (3) 9-TRACK SIXBIT
TM.IND==.TFM8B ; (2) INDUSTRY-COMPATIBLE
TM.ANS==.TFM7B ; (4) ANSI-ASCII
TM.SIX==.TFM7T ; (5) SIXBIT (7-TRACK)
> ;END IF10
DEFWD DVBTS,0 ;DEVCHR BITS
IF20,<
DEFBYT DVIO,2 ;INPUT/OUTPUT LEGAL
DEFBYT DRDVF,1 ;1= "this is a directory device"
DEFBYT DVAS,1 ;ASSIGNABLE
DEFBYT DVMDD,1 ;MULTIPLE DIRECTORIES
DEFBYT DVAV,1 ;AVAILABLE
DEFBYT DVASN,1 ;ASSIGNED
DEFBYT DVJNK,1 ;NOT USED
DEFBYT DVMNT,1 ;MOUNTED
DEFBYT DVTYP,9 ;DEVTYP CODE
DT.DSK==.DVDSK ;DISK
DT.MTA==.DVMTA ;MTA
DT.DTA==.DVDTA ;DTA
DT.NUL==.DVNUL ;NULL DEVICE
DT.TTY==.DVTTY ;TTY
DT.PTY==.DVPTY ;PTY
DT.LPT==.DVLPT ;LPT
DT.PLT==.DVPLT ;PLOTTER
> ;END IF20
IF10,<
DEFBYT DFILL,16 ;DEVCHR FIELDS WE DON'T USE
DEFBYT DVIO,2 ;DEVICE CAN DO INPUT, OUTPUT
DV%IN==DV.IN ;DEVICE CAN DO INPUT
DV%OUT==DV.OUT ;DEVICE CAN DO OUTPUT
DEFWD DVTW,0 ;DEVTYP WORD
DEFBYT DFIL2,30 ;DEVTYP FIELDS WE DON'T USE
DEFBYT DVTYP,6 ;DEVICE TYPE
DT.NUL==.TYDSK ;NULL DEVICE
DT.DSK==.TYDSK ;DISK
DT.DTA==.TYDTA ;DTA
DT.MTA==.TYMTA ;MTA
DT.PTY==.TYPTY ;PTY
DT.LPT==.TYLPT ;LPT
DT.PLT==.TYPLT ;PLOTTER
DT.TTY==.TYTTY ;TTY
> ;END IF10
DEFBYT LGLM,^D16 ;LEGAL DATA MODES
DEFBYT INDX,3 ;DEVICE INDEX (FOR SPECIAL-CASE CODE)
DI.TTY==0 ;TTY
DI.DSK==1 ;DISK
DI.MTA==2 ;MTA
DI.OTHR==3 ;OTHER
DI.RSF==4 ;REMOTE STREAM FILE [5000]
DI.RMS==5 ;RMS FILE [5000]
DEFWD EOFN ;(Disk) Number of bytes in file
DEFWD FILSPC,0 ;BEGINNING OF FILESPEC PART OF DDB
LFILW==20 ;LENGTH OF FILENAME
LFILC==LFILW*5 ;AND IN CHARS
LEXTW==20 ;LENGTH OF EXTENSION
LEXTC==LEXTW*5 ;AND IN CHARS
LDEVW==20 ;LENGTH OF DEVICE
LDEVC==LDEVW*5 ;AND IN CHARS
LDIRW==20 ;LENGTH OF DIRECTORY
LDIRC==LDIRW*5 ;AND IN CHARS
LNODW==2 ;LENGTH OF NODENAME
LNODC==LNODW*5 ;AND IN CHARS
LPROTW==2 ;LENGTH OF PROTECTION CODE
LPROTC==LPROTW*5 ;AND IN CHARS
LGENW==2 ;LENGTH OF GENERATION
LGENC==LGENW*5 ;AND IN CHARS
LPWDW==8 ;[5000] LENGTH OF PASSWORD
LPWDC==LPWDW*5 ;[5000] AND IN CHARS
LACTW==8 ;[5000] LENGTH OF ACCOUNT
LACTC==LACTW*5 ;[5000] AND IN CHARS
LUIDW==8 ;[5000] LENGTH OF USERID
LUIDC==LUIDW*5 ;[5000] AND IN CHARS
DEFWD NODNAM,LNODW ;Node name
DEFWD DEV,LDEVW ;Device name (1-39 chars, ASCIZ)
DEFWD DIRNAM,LDIRW ;Directory name (can include ^V's)
DEFWD FILNAM,LFILW ;File name
DEFWD EXT,LEXTW ;Extension
DEFWD PROT,LPROTW ;Protection (0-6 chars, ASCIZ)
DEFWD GEN,LGENW ;Generation number (0-6 chars, ASCIZ)
IF20,< DEFWD PASWRD,LPWDW ;[5000] REMOTE ACCESS PASSWORD
DEFWD ACCNT,LACTW ;[5000] ACCOUNT STRING
DEFWD USERID,LUIDW ;[5000] USER ID
> ;End IF20
.FSSLN==$LOC-FILSPC-1 ;Length of filespec stuff
IF20,<
DEFWD DMABS,0 ;Data mode & byte size
DEFBYT BSIZ,6 ;Byte size
DEFBYT DMODE,4 ;Data mode
DEFWD VERN ;Version number (ignored)
> ;END IF20
IF10,<
DEFWD BSIZ ;BYTE SIZE
DEFWD FBLK,.FOMAX ;FILOP block.
DEFSNN CHAN,FBLK ;Channel,,FN
DEFSNN IJFN,FBLK ;MORE FOR COMPATIBILITY
DEFSNN OJFN,FBLK ;DITTO
DEFWD LKPB,.RBMAX ;LOOKUP/ENTER block
VERN==LKPB+.RBVER ;VERSION NUMBER
DEFWD PTHB,.PTMAX ;PATH. block. Set by FILOP to the real
; true path to the file.
DEFWD BUFADR ;BUFFER ADDRESS
DEFWD IBCB ;Input buffer control block
DEFWD IPTR,0 ;Byte pointer.
DEFBYT FILL2,6 ;FILLER
DEFBYT IBSIZ,6 ;Byte size
DEFWD ICNT ;Count
DEFWD TBCB ;Output buffer control block
DEFWD TPTR,0 ;Byte ptr.
DEFBYT FILL3,6 ;FILLER
DEFBYT TBSIZ,6 ;Byte size
DEFWD TCNT ;Count
> ;END IF10
DEFWD DLEN,0 ;Length of DDB
; CLEAN UP AFTER DDB DEFINITION
PURGE $P,$LOC,%%DONE
SUBTTL FORPRG - Purge Global Symbols
;+
; Purge global symbols created by MONSYM which do not have "%"
; or "." in them. Also to purge JS%DEV, which changed its value between
; Release 5.1 and Release 6 of the monitor.
;-
DEFINE FORPRG<
PURGE ERJMP,ERCAL,GJFX3,GJFX18,GJFX19,GJFX24,GJFX27
PURGE IOX4
PURGE IPCFX6,IPCFX8
PURGE LNGFX1
PURGE NPXAMB,NPXNC,NPXNOM
PURGE OPNX2,OPNX9
PURGE JS%DEV
> ;END FORPRG
END