Trailing-Edge
-
PDP-10 Archives
-
BB-D480G-SB_FORTRAN10_V11.0_short
-
formsc.mac
There are 19 other files named formsc.mac in the archive. Click here to see a list.
SEARCH MTHPRM,FORPRM
TV FORMSC Miscellaneous routines ,11(5025)
SUBTTL Sue Godsell/SRM/EDS/EGM/CDM/AHM/RVM/PLB/MRB/TGS 1-Feb-86
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1977, 1987
;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.
COMMENT \
***** Begin Revision History *****
***** Begin Version 6 *****
1100 SWG 15-Aug-75
CLEANUP FOR V6 - REMOVE ALL F40, KA THINGS. JSYSIZE
THOSE ROUTINES WHICH DO MONITOR CALLS: TIME,TIM2G0,DATE
SSWTCH
REMOVE .MXFOR AND FORX40;TAKE KA CONDITIONALS OUT OF UNIVERSAL;
REMOVE UNNECESSARY AC DEFS FROM FLOAT. AND IFIX.
Add OUTSTR macro for TOPS-20 IN FDDT.
1175 JLC 12-Dec-80
Fixed LSNGET routine, did not like nulls in line number
and did not clear digit AC, always returned error (-1).
1256 DAW 5-FEB-81
Use new calling sequence for FOROP.
1260 DAW 6-Feb-81
LSNGET smashed ACs 2 and 3.
1266 DAW 11-Feb-81
Changes to support extended addressing in DUMP & PDUMP, TIME,
and DATE routines.
1300 DAW 24-Feb-81
Get FIN. calls and IOLISTS correct again in DUMP and PDUMP.
1302 JLC 24-Feb-81
Changed LSNGET to have channel # as arg.
1335 EDS 12-Mar-81 Q10-05759
Use symbols when testing output of ODCNV% jsys in TIME.
Make TIME return the arguments correctly.
1342 EDS 13-Mar-81 Q10-05075
Make routines TRACEable change everything to HELLO macros.
Fix TWOSEG and RELOC problems. Clean up TITLEs.
1351 EDS 16-Mar-81 Q10-04786
Fix TWOSEG and RELOC problems.
1372 EGM 30-Mar-81 ________
Make OVERFL compatible with 5A, and eliminate TIME JSYS conflict.
1425 BL 14-Apr-81 Q10-05076
Make OVERFL functionality include 'logical function'.
Returns T0=0 if OVERFLOW=NO, T0=-1 if OVERLFOW=YES.
Original functionality unchanged.
1464 DAW 12-May-81
Error messages.
1500 DAW 27-May-81
Edit 1464 made it get "E" error.
1517 BL 18-Jun-81 Q10-05075
Use HELLO macro at CLRDIV (FORMSC).
1532 DAW 14-Jul-81
OPEN rewrite: Base level 1
1560 DAW 28-Jul-81
OPEN rewrite: Base level 2
1615 DAW 19-Aug-81
Get rid of 2-word BP option.
1656 DAW 2-Sep-81
Get rid of magic numbers.
1720 JLC 16-Sep-81
Added test in DIVERT to make sure unit is open for FORMATTED I/O.
1747 DAW 28-Sep-81
Got rid of FORPRM dependency in DIVERT.
1767 DAW 8-Oct-81
Explain "magic" numbers in OVERFL.
2020 DAW 21-Oct-81
Change DATE to return SPACE as last character instead of NULL,
so it will match a literal generated by the compiler.
***** Begin Version 6A *****
2077 RJD 31-Aug-82
In OVERFL, index OLDCT for a correct comparison between the tables
containing the current APR counts and the old counts.
2103 MRB 13-Sep-82 20-18016
Time function will return incorrect results for european time
zones. Use the TOPS-20 JSYS ODTIM to get correct time.
***** Begin Version 7 *****
3000 CDM 19-Oct-81
Added character routines ADJC1., ADJCG.
3001 AHM 2-Oct-81
Make ADJ1. and ADJG. work under extended addressing. Also,
redefine array dimension field from 777B8 to 177B8 so that array
bounds checking blocks in section 0 will hopefully look more
like the final version to be redefined for extended addressing.
Finally, create a PROTA. entry point which is the same as PROAR.
for now to match the symbol that FORTRA 7(1250) requests.
3025 AHM 18-Nov-81
Fix a bug in the trailing space edit to DATE (2020) that I introduced
when merging it into the V7 sources, and change two MOVEIs to XMOVEIs
for extended addressing support for good measure.
3052 AHM 1-Mar-82
Make PROAR. work for extended addressing by widening the flag
field in the dimension block to the upper 4 bits. Delete
PROTA. entry point since it is not needed for extended
addressing after all.
3066 RVM 27-Mar-82
Fix ADJ1., ADJG., ADJC1., and ADJCG. to not calculate the size
of assumed-size arrays.
3073 JLC 31-Mar-82
Remove RELEAS routine; it was for F40.
3122 JLC 28-May-82
Segment FORMSC. Changed LERRs to $FCALLs, and move error msgs
to a separate module FORMSL in FORMSC.
3124 AHM 6-Jun-82
Added a SEGMENT macro to FDDT so that everything goes into
.CODE. and .DATA. under FTXLIB. Also, preserve T1 around the
PSOUT for "%FORDDT not loaded" under Tops-20.
3125 JLC 3-Jun-82
Moved the error character to the beginning of the error macro
calls.
3131 JLC 11-Jun-82
Allow character string argument for ERRSNS error string return.
3132 CKS 11-Jun-82
Add PROSB. to do substring bounds checking.
3140 JLC 2-Jul-82
Fix ERRSET so that -1 for error number gets the entire table
instead of just the V6-defined traps.
3141 JLC 2-Jul-82
Install FFUNIT.
3142 AHM 3-Jul-82
Install PRGEND in FFUNIT.
3161 JLC 16-Aug-82
Fixed ERRSNS for extended addressing multi-sections.
3165 JLC 28-Aug-82
Separate bounds check errors from others.
3205 AHM 18-Nov-82
Insert error message texts for TMA, CGP, CRP, NSS, CFS, CGS.
Change VDM and ICF to "Should not happen" errors. Reword AQS.
3206 CDM 5-Nov-82/17-Jan-83
Allow character arguments for DATE and TIME.
3257 AHM 14-Jan-83
Fix DUMP and PDUMP - FUNCT macro made OTSZERWRD I/O list
elements non-zero, FIN word was in wrong half of an I/O list,
change positional OUT. argument lists to keyword form, correct
change in carriage control semantics between V6 and V7.
***** End V7 Development *****
3311 AHM 21-Apr-83
The dummy FDDT module that resolves XCT FDDT.## requests from
/DEBUG:TRACE when FORDDT isn't loaded was in the hiseg instead
of the lowseg. Unfortunately, FDDT. contains self-modifying
code, and write-locking the high segment made it die.
3322 TGS 6-Jun-83 SPR:20-19252
Calling ERRSET with a subroutine argument not declared EXTERNAL
in the calling program unit jumps into an empty variable when
the user subroutine is called. Test for this case and ABORT if so.
3362 TGS 28-Oct-83 SPR:20-19293
New TOPMEM and SRTINI calls to set ENDP/STARTP to force memory
allocation from a user-supplied page number downward and, for
SRTINI, preallocate pages 600:677 for SORT. Insert new error
messages for IPN (Illegal page number) and CPP (Can't preallocate
pages) errors.
3405 TGS 24-Jan-84 SPR:20-19857
TIME subroutine will round minutes early (09:13 59.6 to 09:14 59.9
if called in a loop, for example.) Do not use ODTIM% to return
hours and minutes, since this JSYS uses a totally different algorithm
for rounding on minute boundaries.
3407 TGS 31-Jan-84 SPR:20-19929
QUIETX should suppress library routine error summaries as well as
CPU summaries. (FORMSC comment change only).
***** Begin Version 10 *****
4007 RJD 24-Mar-83
Eliminate extra PUSH and POP in OVLP.
4012 PLB 1-Jun-83
Fix ERRSET to work with user code and OTS in different sections.
4023 JLC 23-Jun-83
Search MTHPRM also.
4030 PLB 6-Jul-83
Fix OVERFL to remove AOBJN & BLT.
4044 JLC 19-Sep-83
Changed F.MED so it uses $N for the subroutine name, and
thus can be called by any subroutine.
4060 JLC 1-Nov-83
Removed EXTEND error messages, mistakenly placed (by me)
in FORMSL.
4065 JLC 6-Dec-83
Add subroutine PA1050 to allow PA1050 in core for V10
programs running on TOPS-20.
4074 RVM 28-Jan-84
Add the Mil. Spec/VAX FORTRAN bit manipulation functions.
4100 MRB 9-Feb-84
Added code to do compatibility flagging in FORLIB. Outputs
a warning message for usage of non compatible language features
like CALLing an external function.
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.
4110 CDM 8-Mar-84
Reworked DUMP and PDUMP to work under extended addressing.
Changed how the AC's are stored to be dumped out (used to be
stored on the stack, with AC's being PUSH-ed and POP-ed
everywhere, even though this is a subroutine and doesn't need to
preserve any AC's). Corrected I/O calls to the ots to work in
non-zero sections. For now, not giving both upper and lower
bounds for dumping will give a warning message. Lots of
comments added. Grouped together argument lists to make them
look coherent. Changed "-" to "///" in format statements to
make then standard conforming (/FLAG will flag this).
4121 AHM 30-Apr-84
Made QUIETX use HELLO macro, since it is now user callable,
and supported.
Module: FORMSC
4130 MRB 6-Jun-84
Add check for compatibility flagger to routine FFUNIT.
4155 JLC 2-Oct-84
Moved %SVCNV, a routine to manipulate symbol table pointers,
to here so it can be accessed by FORDDT with OTS:SHARE, the
LINKing of sharable FOROTS, and OTS:NONSHARE.
Separate system-dependent code in %SVCNV.
4162 RVM 2-Nov-84
Define VAX FORTRAN INTEGER*2 and INTEGER*4 INTRINSIC function names.
4163 RVM 2-Nov-84
Define the undotted names of the bit functions.
4165 MRB 15-Nov-84
Change the equates for the undotted names to the dotted names
to equate 30 bit addresses instead of just 18 bit addresses.
4170 JLC 19-Nov-84
Fix FORSYM: put in a SEGMENT CODE so the code isn't obliterated
on TOPS-10.
4171 JLC 29-Nov-84
Fix some documentation in ERRSET.
4172 MRB 4-Dec-84
Fix-up some flagger stuff for the routines DATE, TIME, ERRSET,
ERRSNS.
4174 JLC 9-Jan-85
Fix %SVCNV for symbol tables up to 511 pages as IOWDs.
4206 CDM 29-Mar-85 QAR 853072
Fix ISHFTC to work correctly when rotate index is negative.
4207 CDM 29-Mar-85 QAR 853038
Add SECNDS function for VMS compatability.
***** End V10 Development *****
***** Begin Version 11 *****
5007 MRB 15-APR-86
Add 4TH argument to ERRSNS for RMS STV values.
5015 MRB 5-JUN-86
In routine PROSB. added a check to see if the symbol name is
a long symbol name. If it is a long symbol then we pass the
address of the sixbitz string otherwise we pass a sixbit word
to the error routine.
5024 MRB 20-Nov-86
Moved routine DUMON here from FORCOM. Routines contained in
this module need the global symbol FLGON. or they will get
undefinds when LINKing.
5025 MRB 7-Jan-87
When calling the error message routine (SSE) from PROSB.
T5 must contain the 30 bit address of a string. But, the
compiler only has an 18 bit address so we will figure it out.
We will assume that the address of the PROSB. argument list
is in register L (this is a full 30 bit address). The sixbit
string will ALWAYS be in the same section as the PROSB.
argument list. We will get the section number of the argument
list and use that when calling the error routine.
***** End Revision History *****
\
PRGEND
TITLE ADJ1.
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
SEARCH MTHPRM,FORPRM
;AC ASSIGNMENTS
ARG==L ;ARG POINTER
TEMOFF==T0 ;HOLDS OFFSET COMPUTATION
;T1==1 ;HOLDS LOOP DOUNTER (DIMENSIONALITY)
;T2==2 ;HOLDS MULTIPLIER COMPUTED
TABREG==T3 ;HOLDS DESTROYED ARG POINTER
;THE FOLLOWING ALGORITHM IS IMPLEMENTED TO
;COMPUTE ARRAY FACTORS, OFFSET AND SIZE FOR THE
;SPECIAL CASE WHEN ALL LOWER BOUNDS ARE A
;CONSTANT 1 AND ALL DIMENSIONS ARE ADJUSTABLE.
;MULT(I) ARE MULTIPLIERS
;U(I) ARE UPPER BOUNDS (EQUIVALENT TO RANGE)
;OFFSET=MULT(1)
;ARRAYSIZ=MULT(1)
;DO 10 I=2,NUMBER OF DIMENSIONS-1
;ARRAYSIZ=ARRAYSIZ*U(I-1)
;MULT(I)=MULT(I-1)*U(I-1)
;OFFSET=OFFSET+MULT(I)
;10 CONTINUE
;OFFSET=-OFFSET+BASE ADDRESS OF ARRAY
;THE PARAMETERS PASSED ARE (INORDER):
;POINTER TO NUMBER OF DIMENSIONS
;POINTER TO TEMP FOR ARRAYSIZ
;BASE ADDRESS OF ARRAY
;POINTER TO TEMP FOR OFFSET
;MULT(1)
;U(1)
;MULT(2)
;U(2)
; .
; .
; .
;MULT(N)
;U(N)
;**NOTE THAT THE DOUBLE PRECISION/SINGLE PRECISION
;IS HANDLED BY PASSING A 2/1 AS MULT(1).
SEGMENT CODE
HELLO (ADJ1.)
PUSH P,T2 ;SAVE REGISTERS USED
PUSH P,TABREG ;
MOVE T1,@0(ARG) ;FETCH DIMENSIONALITY
MOVE TABREG,ARG ;COPY ARG REGISTER
MOVE TEMOFF,@4(ARG) ;GET OFFSET WITH MULT(1)
MOVE T2,TEMOFF ;GET MULT(1) WITH MULT(1)
MOVEM T2,@1(ARG) ;INITIALIZE ARRAYSIZ
LOOP1: SOJLE T1,LUPDUN ;QUIT IF DONE
MOVE T2,@5(TABREG) ;FETCH U(I-1)
IMULM T2,@1(ARG) ;MULTIPLY INTO ARRAYSIZ
IMUL T2,@4(TABREG) ;MULT BY MULT(I-1)
MOVEM T2,@6(TABREG) ;FORMING MULT(I)
ADD TEMOFF,T2 ;[3001] Keep (30 bit) sum of offset factors
ADDI TABREG,2 ;ADVANCE POINTER
JRST LOOP1 ;GO AROUND AGAIN
LUPDUN: MOVN TEMOFF,TEMOFF ;NEGATE OFFSET
XMOVEI T2,@2(ARG) ;[3001] Get 30 bit array base address
ADD TEMOFF,T2 ;[3001] Add it in
MOVEM TEMOFF,@3(ARG) ;STORE VALUE OF OFFSET
MOVE T2,@5(TABREG) ;FETCH U(I) FOR LAST ARRAYSIZE MULTIPLY
CAME T2,[1B0-1] ;[3066] Don't multiply for assumed-size array
IMULM T2,@1(ARG) ;MULTIPLY TO MEM IT IN
POP P,TABREG ;RESTORE REGISTERS
POP P,T2
GOODBY
PRGEND
TITLE ADJG.
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
SEARCH MTHPRM,FORPRM
;AC ASSIGNMENTS
ARG==L ;ARGUMENT LIST
TEMOFF==T0 ;USED TO COMPUTE OFFSET
;T1==1 ;USED TO HOLD LOOP COUNT (DIMENSIONALITY)
;T2==2 ;USED TO HOLD MULTIPLIERS
TABREG==T3 ;USED TO HOLD DESTROYED ARG PTR
;THE FOLLOWING ALGORITHM IS IMPLEMENTED TO COMPUTE
;ARRAY FACTORS AND OFFSET AND SIZE FOR THE
;GENERAL CASE.
;A PARTIALLY COMPUTED OFFSET MAY BE INPUT
;THE ALGORITHM MAY START IN AN ARBITRARY PLACE AND MULT(1)
;MAY BE 1 (STARTING FROM SCRATCH) OR ANOTHER VALUE.
;THE ABILITY TO START ANYWHERE IS NECESSARY SINCE
;FACTOR AND OFFSET INFO MAY ALREADY HAVE BEEN
;COMPUTED FOR CONSTANT ARRAY BOUNDS APPEARING IN THE
;LIST FIRST.
;MULT(I) ARE THE FACTORS
;U(I) ARE THE UPPER BOUNDS
;L(I) ARE THE LOWER BOUNDS
;OFFSET=MULT(1)*L(1)
;ARRAYSIZ=MULT(1)
;DO 10 I=2,NUMBER OF DIMENSIONS-1
;TEMP=U(I-1)-L(I-1)+1
;MULT(I)=MULT(I-1)*TEMP
;OFFSET=OFFSET+MULT(I)
;ARRAYSIZ=ARRAYSIZ*TEMP
;10 CONTINUE
;OFFSET=-OFFSET+BASE ADDRESS OF ARRAY
;TEMP=U(I)-L(I)+1
;ARRAYSIZ=ARRAYSIZ*TEMP
;THE PARAMETERS ARE (IN ORDER OF APPEARANCE)
;POINTER TO NUMBER OF DIMENSIONS
;POINTER TO ARRAY SIZE
;BASE ADDRESS OF ARRAY
;POINTER TO TEMP CONTAINING OFFSET
;MULT(1)
;U(1)
;L(1)
;MULT(2)
;U(2)
;L(2)
; .
; .
; .
;MULT(N)
SEGMENT CODE
HELLO (ADJG.)
PUSH P,T2 ;SAVE REGISTERS USED
PUSH P,TABREG ;
MOVE T1,@0(ARG) ;FETCH DIMENSIONALITY
MOVE TABREG,ARG ;COPY ARG REGISTER
SETZ TEMOFF, ;[324] CLEAR OFFSET
MOVE T2,@4(ARG) ;MULT(1) - (PASSED IN)
MOVEM T2,@1(ARG) ;INITIALIZE ARRAYSIZ
LOOP1: IMUL T2,@6(TABREG) ;MULT(1)*L(1)
ADD TEMOFF,T2 ;[3001] Add (30 bits) to initial offset
SOJLE T1,LUPDUN ;QUIT IF DONE
MOVE T2,@5(TABREG) ;U(I-1)
SUB T2,@6(TABREG) ;MINUS L(I-1)
ADDI T2,1 ;PLUS 1
IMULM T2,@1(ARG) ;MULTIPLY INTO ARRAYSIZ
IMUL T2,@4(TABREG) ;TIMES MULT(I-1)
MOVEM T2,@7(TABREG) ;EQUALS MULT(I)
ADDI TABREG,3 ;INCREMENT TO NEXT BUNCH
JRST LOOP1 ;GO AROUND AGAIN
LUPDUN: MOVN TEMOFF,TEMOFF ;NEGATE OFFSET
XMOVEI T2,@2(ARG) ;[3001] Get 30 bit array base address
ADD TEMOFF,T2 ;[3001] Add it in
MOVEM TEMOFF,@3(ARG) ;STORE OFFSET
MOVE T2,@5(TABREG) ;GET U(I) FOR LAST ARRAYSIZ MULT
CAMN T2,[1B0-1] ;[3066] Assumed-size array case?
JRST BYE ;[3066] Yes, don't calculate size
SUB T2,@6(TABREG) ;-L(I)
ADDI T2,1 ;ADD ONE OF COURSE
IMULM T2,@1(ARG) ;MULT AND STACH IN ARRAY SIZE
BYE: POP P,TABREG ;RESTORE REGISTERS USED
POP P,T2
GOODBY
PRGEND
TITLE ADJC1. Adjustable dimension with start of 1
SEARCH MTHPRM,FORPRM
;AC ASSIGNMENTS
ARG==L ;Arg pointer
TEMOFF==T0 ;Holds offset computation
;T1==1 ;Holds loop dounter (dimensionality)
;T2==2 ;Holds multiplier computed
TABREG==T3 ;Holds destroyed arg pointer
; The following algorithm is implemented to compute array factors,
; offset and size for the special case when all lower bounds are a
; constant 1 and all dimensions are adjustable. Modeled from ADJ1.
; MULT(I) are multipliers.
; U(I) are upper bounds (equivalent to range).
; MULT(1)=<size of array from descriptor>
; OFFSET=MULT(1)
; ARRAYSIZ=MULT(1)
; DO 10 I=2,NUMBER OF DIMENSIONS-1
; ARRAYSIZ=ARRAYSIZ*U(I-1)
; MULT(I)=MULT(I-1)*U(I-1)
; OFFSET=OFFSET+MULT(I)
;10 CONTINUE
; OFFSET=-OFFSET
; The parameters passed are (inorder):
; Pointer to number of dimensions
; Pointer to temp for ARRAYSIZ
; Descriptor of array
; Pointer to temp for OFFSET
; MULT(1)
; U(1)
; MULT(2)
; U(2)
; .
; .
; .
; MULT(N)
; U(N)
; **Note that MULT1(1) is assigned from the descriptor's size
; unlike for numeric arrays (ADJ1) which has a constant passed.
SEGMENT CODE
HELLO (ADJC1.)
PUSH P,T2 ;Save registers used
PUSH P,TABREG ;
DMOVE T1,@2(ARG) ;Get array descriptor, t2=size of array
MOVEM T2,@4(ARG) ;Assign MULT(1)
MOVEM T2,@1(ARG) ;Initialize ARRAYSIZ
MOVE TEMOFF,T2 ;Get offset with MULT(1)
MOVE T1,@0(ARG) ;Fetch dimensionality
MOVE TABREG,ARG ;Copy arg register
LOOP1: SOJLE T1,LUPDUN ;Quit if done
MOVE T2,@5(TABREG) ;Fetch U(I-1)
IMULM T2,@1(ARG) ;Multiply into ARRAYSIZ
IMUL T2,@4(TABREG) ;Mult by MULT(I-1)
MOVEM T2,@6(TABREG) ;Forming MULT(I)
ADD TEMOFF,T2 ;Keep sum of OFFSET factors
ADDI TABREG,2 ;Advance pointer
JRST LOOP1 ;Go around again
LUPDUN: MOVNM TEMOFF,@3(ARG) ;Negate OFFSET and store it
MOVE T2,@5(TABREG) ;Fetch U(I) for last arraysize multiply
CAME T2,[1B0-1] ;[3066] Don't multiply for assumed-size array
IMULM T2,@1(ARG) ;Multiply to mem it in
POP P,TABREG ;Restore registers
POP P,T2
GOODBY
PRGEND
TITLE ADJCG. General adjustable dimension array
SEARCH MTHPRM,FORPRM
;AC assignments
ARG==L ;Argument list
TEMOFF==T0 ;Used to compute offset
;T1==1 ;Used to hold loop count (dimensionality)
;T2==2 ;Used to hold multipliers
TABREG==T3 ;Used to hold destroyed arg ptr
; The following algorithm is implemented to compute array factors and
; offset and size for the general case. It is modeled after ADJG.
; A partially computed offset may be input.
; The algorithm may start in an arbitrary place and MULT(1)
; may be 1 (starting from scratch) or another value.
; The ability to start anywhere is necessary since factor and offset
; info may already have been computed for constant array bounds appearing
; in the list first.
; MULT(I) are the factors
; U(I) are the upper bounds
; L(I) ARE THE LOWER BOUNDS
; MULT(1)=<size from descriptor passed>
; OFFSET=MULT(1)*L(1)
; ARRAYSIZ=MULT(1)
; DO 10 I=2,NUMBER OF DIMENSIONS-1
; TEMP=U(I-1)-L(I-1)+1
; MULT(I)=MULT(I-1)*TEMP
; OFFSET=OFFSET+MULT(I)
; ARRAYSIZ=ARRAYSIZ*TEMP
;10 CONTINUE
; OFFSET=-OFFSET
; TEMP=U(I)-L(I)+1
; ARRAYSIZ=ARRAYSIZ*TEMP
; The paramters are (in order of appearance)
; Pointer to number of dimensions
; Pointer to array size
; Descriptor for array
; Pointer to temp containing offset
; MULT(1)
; U(1)
; L(1)
; MULT(2)
; U(2)
; L(2)
; .
; .
; .
; MULT(N)
SEGMENT CODE
HELLO (ADJCG.)
PUSH P,T2 ;SAVE REGISTERS USED
PUSH P,TABREG ;
DMOVE T1,@2(ARG) ;Descriptor, T2 is size of array
MOVEM T2,@4(ARG) ;Assign MULT(1)
MOVEM T2,@1(ARG) ;INITIALIZE ARRAYSIZ
MOVE T1,@0(ARG) ;FETCH DIMENSIONALITY
MOVE TABREG,ARG ;COPY ARG REGISTER
SETZ TEMOFF, ;CLEAR OFFSET
LOOP1: IMUL T2,@6(TABREG) ;MULT(1)*L(1)
ADD TEMOFF,T2 ;ADD TO INITIAL OFFSET
SOJLE T1,LUPDUN ;QUIT IF DONE
MOVE T2,@5(TABREG) ;U(I-1)
SUB T2,@6(TABREG) ;MINUS L(I-1)
ADDI T2,1 ;PLUS 1
IMULM T2,@1(ARG) ;MULTIPLY INTO ARRAYSIZ
IMUL T2,@4(TABREG) ;TIMES MULT(I-1)
MOVEM T2,@7(TABREG) ;EQUALS MULT(I)
ADDI TABREG,3 ;INCREMENT TO NEXT BUNCH
JRST LOOP1 ;GO AROUND AGAIN
LUPDUN: MOVNM TEMOFF,@3(ARG) ;NEGATE OFFSET and store it
MOVE T2,@5(TABREG) ;GET U(I) FOR LAST ARRAYSIZ MULT
CAMN T2,[1B0-1] ;[3066] Assumed-size array case?
JRST BYE ;[3066] Yes, don't calculate size
SUB T2,@6(TABREG) ;-L(I)
ADDI T2,1 ;ADD ONE OF COURSE
IMULM T2,@1(ARG) ;MULT AND STACH IN ARRAY SIZE
BYE: POP P,TABREG ;RESTORE REGISTERS USED
POP P,T2
GOODBY
PRGEND
TITLE ADJ. VARIABLE DIMENSION SUBSCRIPT CALCULATOR
SUBTTL D. TODD /DRT 15-FEB-1973 TOM OSTEN/TWE
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM LIB40 VERSION V.032(323)
;ADJ. IS A PROGRAM CALLED AT RUN-TIME BY A FORTRAN PROGRAM
;TO CALCULATE THE MULTIPLIERS AND OFFSET FOR SUBSCRIPT CALCULATIONS
;FOR DIMENSIONS DECLARED AS SUBROUTINE ARGUMENTS. THE COMPILER
;GENERATES THE FOLLOWING SEQUENCE:
; JSA 16, ADJ.
; EXP N ;DIMENSIONALITY OF ARRAY
; ARG X, TEMP+N+1 ;ARG IS A NO-OP, X IS THE TYPE
;OF THE ARGUMENT,TEMP IS A PNTR
;TYPE,TEMP+N+1 POINTS TO END OF
;MULTIPLIER TABLE
; EXP U1 ;ADDRESS OF NUMBER WHICH IS THE
; ;UPPER BOUND FOR FIRST SUBSCRIPT
; EXP L1 ;ADDRESS OF NUMBER WHICH IS THE
; ;LOWER BOUND FOR FIRST SUBSCRIPT
; .
; .
; .
; EXP LN ;LAST LOWER BOUND ADDRESS
;THE TEMP BLOCK IS CONSTRUCTED AS FOLLOWS:
;TEMP: SIZE OF ARRAY (EQUAL TO MULTIPLIER N)
; OFFSET
; MULTIPLIER N-1
; .
; .
; .
; MULTIPLIER 1
; MULTIPLIER 0
;THE I-TH MULTIPLIER, P(I), IS DESCRIBED BY:
; P(0) = 1
; P(I) = P(I-1) * (U(I) - L(I) + 1)
;THE OFFSET IS DESCRIBED BY
; OFFSET = SUM FROM 1 TO N OF P(I-1)*L(I)
SEARCH MTHPRM,FORPRM
A=0
B=1
C=2
D=3
E=4
F=5
G=6
Q=16
P=17
SEGMENT CODE
HELLO (ADJ.) ;ENTRY TO ADJ. ROUTINE
MOVEM 2,SAV2 ;SAVE AC 2
LDB C,[POINT 3,1(Q),11] ;GET HI 3 BITS OF ARG TYPE
SUBI C,3 ;0 RESULT MEANS D.P. OR COMPLEX
MOVEM C,ACFLD ;SAVE THE RESULT
MOVNI C, @(Q) ;GET MINUS COUNT OF DIMENSIONS
MOVEI B, @1(Q) ;GET TOP ADDRESS OF TEMP BLOCK
ADDI B, -1(C) ;SET B TO BEGINNING OF TEMP BLOCK
HRL B, C ;AOBJN WORD IS (-CNT)ADDR
MOVEI A, 1 ;INITIALIZE P(0) = 1
SETZM OFFSET ;INITIALIZE OFFSET=0
ADJ.1: MOVEM A, (B) ;STORE P(N)
ADDI Q, 2 ;SET FOR NEXT PAIR OF DIMENSIONS
MOVE C, A ;COPY P(N)
IMUL C, @1(Q) ;P(N-1)*L(N)
ADDM C,OFFSET ;ADD INTO OFFSET
MOVE C, @(Q) ;GET U(N)
SUB C, @1(Q) ;U(N) - L(N)
IMULI A, 1(C) ;P(N-1)*(U(N) -L(N) +1)
AOBJN B, ADJ.1 ;N=N+1, GO AROUND LOOP
MOVE C,OFFSET ;GET OFFSET BACK
SKIPN ACFLD ;WAS TYPE D.P. OR COMPLEX?
ASH C,1 ;YES, MULTIPLY OFFSET BY 2 FOR
;COMPLEX OR DOUBLE PRECISION ARG.
MOVEM C, (B) ;OFFSET TO NEXT TO LAST ENTRY
MOVEM A, 1(B) ;SIZE TO LAST ENTRY
MOVE 2,SAV2 ;RESTORE AC 2
GOODBY (2) ;RETURN
SEGMENT DATA
OFFSET: BLOCK 1
ACFLD: BLOCK 1 ;HOLD 0 IF DOUBLE PRECISION OR COMPLEX
SAV2: BLOCK 1 ;TEMP STORAGE FOR AC 2
PRGEND
TITLE PROAR. ARRAY BOUNDS CHECKING ROUTINE
SUBTTL SARA MURPHY/AHM 1-Mar-81
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
SEARCH MTHPRM,FORPRM ;DEFINE GLOBAL SYMBOLS
FSRCH ;[3052] Search MACTEN or MACSYM
; Routine to perform FORTRAN array bounds checking at run time.
; Called with an argument block of the form:
; -------------------------------------------------
; !1!0! ! PTR TO SEQ NUMB OF ST !
; -------------------------------------------------
; !1!0! ! PTR TO DIMENSION INF !
; -------------------------------------------------
; !1!0! ! PTR TO 1ST SUBSCRIPT !
; -------------------------------------------------
; !1!0! ! PTR TO 2ND SUBSCRIPT !
; Etc.
;
; Where dimension information is represented by a block of the form:
; -------------------------------------------------
; ! ARRAY NAME (IN SIXBIT) !
; -------------------------------------------------
; !1!0! DIM CT ! !I! ! BASE ADDRESS !
; -------------------------------------------------
; V6 !A!F!0!0! ! PTR TO OFFSET !
; V7 !1!0!A!F! ! PTR TO OFFSET !
; -------------------------------------------------
; !1!0! ! PTR TO 1ST LOWER BND !
; -------------------------------------------------
; !1!0! ! PTR TO 1ST UPPER BND !
; -------------------------------------------------
; !1!0! ! PTR TO 1ST FACTOR !
; -------------------------------------------------
; !1!0! ! PTR TO 2ND UPPER BND !
;
; ETC
; WHERE A IS A FLAG FOR "ADJUSTABLY DIMENSIONED ARRAY"
; F IS A FLAG FOR "FORMAL ARRAY"
;
; Note that the argument list is created in the compiler routine
; PROARRXPN in the file ARRXPN.BLI and the dimension block is created
; and written in CGDIMBLK in DEBUG.BLI.
;
;COMPUTES THE ADDRESS OF THE SPECIFIED ARRAY ELEMENT AND
; RETURNS THAT ADDRESS IN AC 0. IF ANY OF THE BOUNDS ARE
; EXCEEDED, AN ERROR MESSAGE IS GIVEN BEFORE PROCEEDING
;THE ADDRESS OF THE ARRAY ELEMENT IS COMPUTED BY THE
; FORMULA:
; BASE ADDR + OFFSET + (1ST SS)*(1ST FACTOR) +
; (2ND SS)*(2ND FACTOR) + .....
;IF AN ARRAY IS NOT A FORMAL, THE BASE ADDR+OFFSET WILL BE ADDED
; IN TO THE RESULT OF THIS ROUTINE BY THE FORTRAN PROGRAM CALLING
; THIS ROUTINE - THEREFORE THESE 2 TERMS ARE NOT INCLUDED IN THE RESULT
; UNLESS THE ARRAY IS FORMAL.
;IF AN ARRAY IS ADJUSTABLY DIMENSIONED, THE "OFFSET" CALCULATED UPON
; ENTRY TO THE SUBROUTINE IN WHICH THE ARRAY IS DECLARED ALREADY
; INCLUDES THE BASE ADDRESS - THEREFORE FOR ADJUSTABLY DIMENSIONED
; ARRAYS NEED NOT HAVE THE BASE ADDRESS ADDED IN SEPARATELY.
; Note that there are two formats for the adjustably dimensioned array
; and formal array flags. The old format used for V6 and before used
; the two high order bits of the flag word. The pattern "10" was
; illegal for V6 because it means "adjustably dimensioned but not
; formal" - a non-sequitur for Fortran. Which is just as well,
; because the two high order bits of the flag word had to be forced to
; "10" for V7 in order to make the flag word an IFIW for extended
; addressing. The definitions of the bits were just shifted over by 2
; places for extended addressing.
DP=P4 ;PTR INTO THE BLOCK OF DIMENSION INFORMATION. POINTS
; TO THE SUB-BLOCK OF INFORMATION FOR A GIVEN DIMENSION
SSP=P1 ;[3052] Pointer to the arg block entry for a subscript
SS=P2 ;Value of the subscript being processed
COUNT=P3 ;[3052] The number of subscripts left to go
SUM=0 ;[3052] Computed sum of subscripts with factors
;[3052] (Used to compute the element address)
;DEFINE FIELDS IN THE ARG-BLOCK FOR THIS ROUTINE
ISNWD=0 ;WD 0 CONTAINS THE SEQ NUMBER OF THE STMNT
; CONTAINING THIS ARRAY REF
DBLKP=1 ;WD 1 CONTAINS PTR TO THE DIMENSION BLOCK
; FOR THIS ARRAY
ARNAMP=1 ;SINCE 1ST WD OF DIMENSION BLOCK IS THE ARRAY
; NAME, WD 1 OF ARG BLOCK PTS TO THE ARRAY NAME
SS1WD=2 ;WD 2 CONTAINS PTR TO THE 1ST SS
;DEFINE FIELDS IN THE DIMENSION BLOCK
DNAMWD=0 ;ARRAY NAME IS IN WD 0 OF THE DIMENS BLOCK
DBASWD=1 ;BASE ADDR IS IN WD 1 OF THE BLOCK
DOFFWD=2 ;OFFSET IS IN WD 2 OF THE BLOCK
D1WD=3 ;SUB-BLOCK FOR THE 1ST DIMENSION STARTS
; IN WD 3
DCTSIZ=7 ;[3001] Number of bits in the dimension count
;[3001] field in the dimension descriptor block
DCTPOS=8 ;LAST BIT IN THE DIMENSION CT FIELD IS BIT 8
DCTWD=1 ;DIMENSION CT FIELD IS IN WD 1 OF THE BLOCK
TYPWRD==1 ;[3052] Dim block word that contains the array type
TYPMSK==<Z 17,0> ;[3052] Type field is the AC field
DFLGWD=2 ;DIMENSION BLOCK FLAGS ARE IN WD 2 OF DIM BLO
DFLSIZ=4 ;[3052] Dimension block flags are 4 bits
DFLPOS=3 ;[3052] Bits 0-3
;DEFINE FIELDS IN THE SUB-BLOCKS FOR EACH DIMENSION
DLBWD=0 ;PTR TO LOWER BOUND IS IN WD 0 OF A SUB-BLOCK
; FOR A GIVEN DIMENSION
DUBWD=1 ;PTR TO UPPER BOUND IS IN WD 1 OF A SUB-BLOCK
DFACWD=2 ;PTR TO FACTOR IS IN WD 2 OF A SUB-BLOCK
DSBSIZ=3 ;NUMBER OF WDS IN THE SUB-BLOCK FOR EACH DIMEN
SEGMENT CODE
EXTERN ABORT. ;[3205] FOROTS fatal error entry point
HELLO (PROAR.)
PUSH P,DP ;SAVE ACs
PUSH P,SSP
PUSH P,SS
PUSH P,COUNT ;[3052] Save the count AC
XMOVEI DP,@DBLKP(L) ;[3052] Pointer to dimension block
XMOVEI SSP,SS1WD(L) ;[3052] Set up pointer to the SS list
LDB COUNT,[POINT DCTSIZ,DCTWD(DP),DCTPOS] ;Load dimension count
; Get flags to see how to compute the base address of the array.
LDB T1,[POINT DFLSIZ,DFLGWD(DP),DFLPOS] ; Adj-dim and formal flags
LDB SUM,[POINTR (TYPWRD(DP),TYPMSK)] ;[3052] Get the array type
CAIN SUM,TP%CHR ;[3052] Is it a character variable ?
MOVEI T1,^B1011 ;[3052] Yes, they act like an adjustable formal
;[3052] (The main program "adds in" the array
;[3052] base with an ADJBP, but we are
;[3052] responsible for starting off with the
;[3052] offset pointed to by DOFFWD(DP))
XCT PXCTAB(T1) ;Execute table entry (indexed by T1)
XMOVEI DP,D1WD(DP) ;[3052] Pointer to info on 1st dimension
LP: MOVE SS,@0(SSP) ;1ST SUBSCRIPT
CAML SS,@DLBWD(DP) ;IF LESS THAN LOWER BOUND
CAMLE SS,@DUBWD(DP) ; OR GTR THAN UPPER BOUND
PUSHJ P,PERR ; GIVE A MESSAGE
IMUL SS,@DFACWD(DP) ;MULTIPLY BY FACTOR
ADD SUM,SS ;ADD INTO THE ADDRESS BEING COMPUTED
ADDI DP,DSBSIZ ;GO ON TO NEXT DIMENSION
ADDI SSP,1 ;[3052] Go on to next SS
SOJG COUNT,LP ;[3052] Loop back for more
POP P,COUNT ;[3052] Restore ACs
POP P,SS
POP P,SSP
POP P,DP
POPJ P, ;RETURN
;EXECUTE TABLE
; There are presently 4 bits - this implies a 16 word table.
PXCTAB: MOVEI SUM,0 ;[3052] |0000| V6 Non-formal
$FCALL SNH,ABORT. ;[3052] |0001| Flags for V7 set by V6
$FCALL SNH,ABORT. ;[3052] |0010| Flags for V7 set by V6
$FCALL SNH,ABORT. ;[3052] |0011| Flags for V7 set by V6
XMOVEI SUM,@DBASWD(DP) ;[3052] |0100| V6 Non-adj formal
$FCALL SNH,ABORT. ;[3052] |0101| Flags for V7 set by V6
$FCALL SNH,ABORT. ;[3052] |0110| Flags for V7 set by V6
$FCALL SNH,ABORT. ;[3052] |0111| Flags for V7 set by V6
MOVEI SUM,0 ;[3052] |1000| V7 Non-formal
XMOVEI SUM,@DBASWD(DP) ;[3052] |1001| V7 Non-adj formal
$FCALL SNH,ABORT. ;[3052] |1010| V7 Adj but not formal
;[3052] should never occur
MOVE SUM,@DOFFWD(DP) ;[3052] |1011| V7 Computed offset for
;[3052] an adjustable array
MOVE SUM,@DOFFWD(DP) ;[3052] |1100| V6 Computed offset for
;[3052] an adjustable array
$FCALL SNH,ABORT. ;[3052] |1101| Flags for V7 set by V6
$FCALL SNH,ABORT. ;[3052] |1110| Flags for V7 set by V6
$FCALL SNH,ABORT. ;[3052] |1111| Flags for V7 set by V6
;END OF EXECUTE TABLE
;ROUTINE CALLED WHEN A BOUNDS VIOLATION HAS BEEN DETECTED
PERR: XMOVEI T1,1-SS1WD(SSP) ;[3052] Set T1 to the dimension
SUB T1,L ;[3052] being processed
PUSH P,T2 ;SAVE T2,T3
PUSH P,T3
MOVE T2,@ARNAMP(L) ;GET THE ARRAY NAME
MOVE T3,@ISNWD(L) ;GET THE ISN
;(SRE,21,101,%,<Subscript range error - subscript $D of array $S = $D
; on line $D>,<T1,T2,P2,T3>)
$FCALL SRE ;ISSUE MESSAGE, CONTINUE
POP P,T3 ;RESTORE T2,T3
POP P,T2
POPJ P,
;@ISNWD(L)[T3]/ ISN of statement containing this array ref
;T1/ Dimension number being processed
;@ARNAMP(L)[T2]/ Array name in SIXBIT
;SS[P2]/ Value of illegal subscript
PRGEND
TITLE FORDMP - DUMP and PDUMP Dump memory routines
SUBTTL /DMN/SWG/DAW/AHM
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM 1 MAY 1966 ED YOURDON, 2/12/68 NSR
;++
; FUNCTIONAL DESCRIPTION:
;
; Both DUMP and PDUMP output core to a line printer between the
; optional locations passed by the user. DUMP calls "EXIT." when
; done, while PDUMP returns to the users program. The code is
; shared, ENTFLG is used to determine whether DUMP or PDUMP was
; entered.
;
; First to be dumped are following PC flags and then the contents
; of the accumulators.
;
; AR OV FLAG
; AR CRY0 FLAG
; AR CRY1 FLAG
; PC CHANGE FLAG - FLOATING OVERFLOW
; BIS FLAG
;
; Following this are any memory locations the user has specified.
;
; If a group of memory locations have the same contents, DUMP and
; PDUMP will finish printing the current line, then indicate the
; repeated locations by:
;
; Locations xx through yy contain zz
;
; CALLING SEQUENCE:
;
; CALL DUMP(A(1),B(1),F(1), ... ,A(n),B(n),F(n))
; CALL PDUMP(A(1),B(1),F(1), ... ,A(n),B(n),F(n))
;
; INPUT PARAMETERS:
;
; Arguments are in triplets, each triplet taken separately.
;
; A(n) First element to be dumped.
;
; B(n) Last element to be dumped.
;
; If the last two arguments, B(n) and F(n), are missing an
; octal dump is made from A(n) to the end of user area.
;
; F(n) Mode to dump the elements in.
;
; 0 octal (O12 format)
; 1 floating point (G12.5 format)
; 2 integer (I12 format)
; 3 ascii (A12 format)
; 4 double precision (G25.16)
;
; An illegal or missing mode assignment causes the dump to
; be made in octal.
;
; where A, B, and F are optional sets of triplet arguments.
;
; If no arguments are given, the entire user area is dumped in
; octal. Under extended addressing, both A(n) and B(n) must be
; given.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; None
;
; SIDE EFFECTS:
;
; Used as Fortran subroutine, does NOT save AC values.
;
;--
;Accumulator assignments and parameter assignments
B==3 ;SCRATCH
C==4 ;...
S==5 ;ADDRESS OF LOCATION CURRENTLY DUMPED
F==6 ;ADDRESS OF HIGH LOCATION TO BE DUMPED
I==7 ;ARGUMENT INDICATOR
LL==10 ;LOOP COUNTER
FRMT==11 ;HOLDS FORMAT FOR REPEATED LINES
ARC==12 ;-Number of args left
PP==15 ;BLT AC, ALSO HOLDS A FORMAT ADDRESS
P==17 ;PUSHDOWN POINTER
N==12 ;SIZE OF AC BLOCK TO BE SAVED ON PD LIST
DEVICE==-3 ;DEVICE ASSIGNMENT FOR PRINT
NLIST==5 ;NO. OF DIFFERENT FORMAT DUMPS AVAILABLE
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (DUMP) ;Beginning of DUMP routine
SETOM ENTFLG ;FLAG DUMP ENTRY = -1
JRST DUMPA ;HOP DOWN TO COMMON CODE
HELLO (PDUMP) ;Beginning of PDUMP routine
SETZM ENTFLG ;FLAG PDUMP ENTRY = 0
;Common code to DUMP and PDUMP. Dump the PC flags and save away the
;AC's.
DUMPA: DMOVEM T0,ACSAVE ;[4110] Save AC0, AC1
MOVEM T2,ACSAVE+2 ;[4110] Save AC2
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
IF20,<
XMOVEI T1,. ;What section are we running in?
TLNN T1,-1 ;[4110] Is section non-zero?
JRST DPNZER ;[4110] No, in section 0
;Running in non-zero section. Get and Save PC flags
;differently.
XSFM FLGLOC ;Save PC flags the extended way.
;Save AC3 through AC17
MOVEI T0,20-3 ;[4110] Number of AC's to move.
XMOVEI T1,T3 ;[4110] AC3 is start of what to move
XMOVEI T2,ACSAVE+3 ;[4110] Where to put the saved AC's
EXTEND T0,[XBLT] ;[4110] Save AC 3 thru AC 17
JRST DPPRFL ;[4110] Ready to dump flags
>; End IF20
;Get PC flags and save AC's away.
DPNZER: POP P,FLGLOC ;[4110] Get PC flags out. The PUSHJ to
; call us loaded them in the left half
; of the return address pushed on the
; stack.
PUSH P,FLGLOC ;Restore to top of stack
;Save AC3 through AC17
HRLI T1,T3 ;[4110] [Source=AC3,,0]
HRRI T1,ACSAVE+3 ;[4110] [source,,Destination]
BLT T1,ACSAVE+20-1 ;[4110] Save AC's
;[4110] Destination + n -1
;Print headers for PC flags
DPPRFL: XMOVEI L,ARG3 ;[4110]
PUSHJ P,OUT.## ;[3257] Set up for output
;Put out the actual PC flags, "ON"/"OFF"
MOVE C,BYTEP ;GET BYTE POINTER FOR FLAGS
MOVEI F,5 ;LOOP FOR FIVE FLAGS
FLAGS: ILDB B,C ;GET FLAG BIT STORED BY JSR
MOVE S,OFFON(B) ;GET EITHER "OFF" OR "ON"
XMOVEI L,ARG4 ;[4110]
PUSHJ P,IOLST.## ;[3257] Do the output
SOJG F,FLAGS ;LOOP BACK FOR MORE FLAGS
FUNCT FIN.## ;Finish outputting
;Output the values in the AC's.
;Setup the format for printing "ACnn" headers and the AC values
XMOVEI L,ARG5 ;[4110] Output S
PUSHJ P,OUT.## ;[3257] Set up for more output
CLEARB S,I ;AC0-AC7, SET INDICATOR TO ZERO
;Output "AC 00 ... AC 07"
D1: XMOVEI L,ARG4 ;[4110] Output S
PUSHJ P,IOLST.##
CAIGE S,7 ;For registers 0 thru 7
AOJA S,D1 ;Loop back until done
;Output the contents of AC0 through AC7
XMOVEI L,ARG6 ;[4110] ACSAVE through ACSAVE+7
PUSHJ P,IOLST.##
;Output "AC 10 ... AC 17"
MOVEI S,10 ;Start with AC 10
D3: XMOVEI L,ARG4 ;[4110] Output S
PUSHJ P,IOLST.##
CAIGE S,17 ;Done AC17 yet?
AOJA S,D3 ;No, Loop again
;Output contents of AC10 through AC17
XMOVEI L,ARG7 ;[4110] ACSAVE+10 through ACSAVE+17
PUSHJ P,IOLST.##
;Argument processor. See how many arguments we have.
MOVE L,ACSAVE+L ;[4110] Restore argument pointer
HLRE ARC,-1(L) ;Get -arg count
JUMPE ARC,ENDCHK ;No arguments: Dump all of core
;Come here to process a set of 3 args. We have at least one. If less
;than three, then we must set up defaults.
;
; L points to arg list
; ARC is -number of args left
SGET: SETZ I, ;Set to 1 if whole group of 3 args present
XMOVEI L,ARG8 ;[4110]
PUSHJ P,OUT.## ;[3257] Go set up for output and do it
FUNCT FIN.## ;[3257] All done!
AOJG ARC,SDOUT ;If no more args, quit
MOVE L,ACSAVE+L ;[4110] Restore argument pointer
XMOVEI S,@0(L) ;Yes, pick up the address of beginning
AOJG ARC,ENDCK2 ;End of arg list
XMOVEI F,@1(L) ;No, F:= end address
AOJG ARC,ENDCK3 ;Jump if end of arg list
MOVE C,@2(L) ;No, C:= format type code
AOJ I, ;INDICATE THAT ALL 3 ARGUMENTS HAVE BEEN SEEN
CAIL C,NLIST ;IS THIS A LEGAL ARGUMENT?
JRST ENDCK3 ;No, DUMP IN OCTAL MODE
;Now we dump some memory out. Check the arguments
;Come here with:
; C = type of dump (0= Octal, 1= floating, etc.)
; S = Lowest location to be dumped
; F = Highest location to be dumped
; I = 0 if we defaulted any args because they were missing,
; = 1 if all three args were present.
SCHEK: CAML S,F ;ARE ARGUMENTS IN ORDER?
EXCH S,F ;NO, SWITCH THEM
MOVE PP,C ;COPY ARG TO PP FOR USE IN ARG BLOCKS
MOVE B,TABLE(C) ;Get ots code for the mode specified
DPB B,[POINT 4,IOLSTC,12] ;Put mode in the format for IO call
DPB B,[POINT 4,IOLSTS,12] ;""
;Main dump processor
DPROC: MOVE B,S ;[4110] GET CURRENT ADDRESS IN B
MOVE LL,S ;POINTER IN REPETITION CHECK
;Look for repeating words in the dump. If we can find multiple line(s)
;(8 or more words) that repeat, then output them in groups rather than
;every word separately.
; C is the location to compare against.
; LL is incremented every time through the loop to be the
; next memory location to look at.
MOVE C,@S ;Word to check against for repetition
LOOK: CAMN C,@LL ;Do words match?
CAMGE F,LL ;Yes, Finished this section of code?
JRST DIFF ;Go compute repeated lines
XMOVEI T1,@S ;Where to begin dumping
ADDI T1,7 ;Above + 7 = "end of a line"
CAML LL,T1 ;Finished checking a line?
ADDI S,10 ;Yes, increment S to next line
; Unless incremented, we don't have any matches
CAMG S,F ;Beyond the end of what to dump?
AOJA LL,LOOK ;No, increment pointer, check more
;End of checking for repetition. Either have reached the end of
;memory to dump or have found a non-identical line.
DIFF: CAMN B,S ;WERE ANY LINES REPEATED?
JRST OLOOP0 ;NO, DUMP THIS LINE INDIVIDUALLY
;Found identical line(s). "Locations n thru m contain "
MOVE T1,S ;[4110] Last loc
SUBI T1,1 ;[4110] Off by one
XMOVEI L,ARG9 ;[4110]
PUSHJ P,OUT.## ;[3257] Set up for output
XMOVEI L,ARG10 ;[4110] Output B, T1
PUSHJ P,IOLST.## ;END OF REPETITION MESSAGE
;Output the common word that is repeated.
XMOVEI L,ARG1 ;GET FORMAT FOR MESSAGE
PUSHJ P,OUT.##
XMOVEI L,IOLSTC ;OUTPUT REPEATED WORD -> C
PUSHJ P,IOLST.##
;Loop for outputting words. Start outputting a regular line
;here. 8 words per line.
OLOOP0: MOVE C,LIST2(PP) ;PICK UP FORMAT TYPE
OLOOP1: CAMLE S,F ;ALL DONE DUMPING?
JRST NEXT1 ;YES, CHECK for more ARGUMENTS
XMOVEI L,ARG2 ;NO, OUTPUT FOR 8 WORDS/LINE
PUSHJ P,OUT.##
XMOVEI L,ARG4 ;[4110] Output S
PUSHJ P,IOLST.##
;Each time through loop output one location.
MOVEI B,^D8 ;LOOP COUNTER - Output 8 memory locations
OLOOP2: XMOVEI L,IOLSTS ;ADDRESS FOR THIS LINE
PUSHJ P,IOLST.## ;MEMORY WORD
CAML S,F ;ALL DONE DUMPING
JRST NEXT ;YES, CHECK for more ARGUMENTS
CAIE PP,DFMNM ;Double precision?
AOJA S,OLOOP3 ;NO, MOVE POINTER TO NEXT WORD
ADDI S,2 ;YES, ADVANCE POINTER ONE WORD
SOJ B, ;OUTPUTS ONLY 4 WORDS
OLOOP3: SOJG B,OLOOP2 ;DONE WITH THIS LINE?
PUSHJ P,FIN.## ;YES, FINISH OFF FORMAT STATEMENT
JRST DPROC ;[4110] SCAN NEXT LINE
;One or more arguments missing. Set defaults, then dump the memory.
;No arguments given.
ENDCHK: HRRZI S,20 ;DUMP FROM 20 (after registers)
;Ending and mode not given
ENDCK2: HRRZ F,.JBFF ;TO END OF USER AREA
SUBI F,1 ;DO NOT DUMP FIRST FREE
IF20,<
;If running in non-zero section, user must give beginning and
;ending arguments to dump memory. Extended adressing means too
;much memory to dump everything on an innocent line printer.
XMOVEI T1,T0 ;[4110] Section that AC 0 is in
JUMPE T1,ENDCK3 ;[4110] If section zero, then ok
$FCALL DMA ;[4110] Warning - Give me some arguments!!
JRST SDOUT ;[4110] Exit, don't do anything.
> ;End IF20
;Mode not given
ENDCK3: SETZ C, ;Set OCTAL mode
JRST SCHEK ;FIX EXIT, CHECK CORE LIMITS
;Dump is finished. Process next triplet of arguments (if there is any).
NEXT: PUSHJ P,FIN.## ;FINISH FORMAT
NEXT1: JUMPE I,SDOUT ;MORE ARGUMENTS TO COME?
MOVEI T0,3 ;[4110]
ADDM T0,ACSAVE+L ;[4110] Yes, saw 3 args last time, Bump arg ptr.
JRST SGET ;GO GET SOME MORE ARGUMENTS
;Here when done dumping all arguments. Get ready to return to caller or
;jump to EXIT. .
SDOUT: SKIPE ENTFLG ;[4110] IS IT THE PDUMP ENTRY?
JRST SDOUT1 ;NO - DUMP
GOODBY ;PDUMP - RETURN TO USER
SDOUT1: FUNCT (EXIT.) ;DUMP - Exit and stop the program
;Format statements for output
EXP MESS1L ;[3257] FMTSIZ=
MESS1: ASCII "(1H148X9HCORE DUMP/1H 7HOv flag17X9HCry0"
ASCII " flag15X9HCry1 flag15x12HFlt ov flag 13X"
ASCII "8HFPD flag/1H 5(A9,15X))"
MESS1L==.-MESS1 ;[3257] Compute size of FORMAT statement
EXP MESS2L ;[3257] FMTSIZ=
MESS2: ASCII "(2(/// 8(9X 3HAC O2) /7X8O14/))" ;[4110] "AC nn"
MESS2L==.-MESS2 ;[3257] Compute size of FORMAT statement
EXP MESS3L ;[3257] FMTSIZ=
MESS3: ASCII "(///)" ;[4110] Skip three lines
MESS3L==.-MESS3 ;[3257] Compute size of FORMAT statement
EXP MESS4L ;[3257] FMTSIZ=
MESS4: ASCII "(///' Locations 'O10,9H through O10,9H contain /1H )" ;[4110]
MESS4L==.-MESS4 ;[3257] Compute size of FORMAT statement
;Argument blocks for OUT./IOLST. calls
XWD -2,0
ARG1: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)[DEVICE] ;[4110] UNIT=
BYTE (2)^B10 (7)2 (4)TP%LBL (5)35 (18)LIST1 ;[4110] @LIST1(PP)
XWD -2,0
ARG2: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)[DEVICE] ;[4110] UNIT=
BYTE (2)^B10 (7)2 (4)TP%LBL (5)35 (18)LIST2 ;[4110] @LIST2(PP)
XWD -2,0 ;[3257] Arg count
ARG3: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)[DEVICE] ;[4110] UNIT=
BYTE (2)^B10 (7)2 (4)TP%LBL (5)0 (18)MESS1 ;[4110] FMT=
XWD -2,0 ;[3257] Arg count
ARG4: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)S ;[4110] S
0 ;[4110] End of list
XWD -2,0 ;[3257] Arg count
ARG5: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)[DEVICE] ;[4110] UNIT=
BYTE (2)^B10 (7)2 (4)TP%LBL (5)0 (18)MESS2 ;[4110] FMT=
XWD -4,0 ;[4110] 4 args
ARG6: BYTE (2)^B10 (7)2 (4)TP%INT (5)0 (18)[10] ;[4110] 10 words
BYTE (2)^B10 (7)0 (4)TP%INT (5)0 (18)[1] ;[4110] Incr by 1
BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)ACSAVE ;[4110] Start here
0 ;[4110] EOL
XWD -4,0 ;[4110] 4 args
ARG7: BYTE (2)^B10 (7)2 (4)TP%INT (5)0 (18)[10] ;[4110] 10 words
BYTE (2)^B10 (7)0 (4)TP%INT (5)0 (18)[1] ;[4110] Incr by 1
BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)ACSAVE+10 ;[4110] Start here
BYTE (2)^B10 (7)4 (27)0 ;[4110] Fin
XWD -2,0 ;[3257] Arg count
ARG8: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)[DEVICE] ;[4110] UNIT=
BYTE (2)^B10 (7)2 (4)TP%LBL (5)0 (18)MESS3 ;[4110] FMT=
XWD -2,0 ;[3257] Arg count
ARG9: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)[DEVICE] ;[4110] UNIT=
BYTE (2)^B10 (7)2 (4)TP%LBL (5)0 (18)MESS4 ;[4110] FMT=
XWD -3,0 ;3 args
ARG10: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)B ;[4110] Addresses
BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)T1 ;[4110] First location rep'ed
BYTE (2)^B10 (7)4 (27)0 ;[4110] Last
;More format statements and some constants, too
EXP 4 ;[3257] Size of FORMAT
OFRMT: ASCII "(1H0,O10,8O14)"
EXP 4 ;[3257]
EFRMT: ASCII "(1H0,O10,8G14.5)"
EXP 4 ;[3257]
IFRMT: ASCII "(1H0,O10,8I14)"
EXP 4 ;[3257]
AFRMT: ASCII "(1H0,O10,8A14)"
EXP 4 ;[3257]
DFRMT: ASCII "(1H0,O10,4G25.16)"
EXP 4 ;[3257]
OFRMT2: ASCII "(1H0,40X,O14)"
EXP 4 ;[3257]
EFRMT2: ASCII "(1H0,40X,G14.5)"
EXP 4 ;[3257]
IFRMT2: ASCII "(1H0,40X,I14)"
EXP 4 ;[3257]
AFRMT2: ASCII "(1H0,40X,A14)"
EXP 4 ;[3257]
DFRMT2: ASCII "(1H0,40X,G25.16)"
LIST1: IFIW OFRMT2
IFIW EFRMT2
IFIW IFRMT2
IFIW AFRMT2
IFIW DFRMT2
LIST2: IFIW OFRMT
IFIW EFRMT
IFIW IFRMT
IFIW AFRMT
IFIW DFRMT
DFMNM==.-LIST2-1 ;D format index
OFFON: ASCII "OFF " ;Flag is off
ASCII "ON " ;Flag is on
TABLE: EXP TP%SPO,TP%SPR,TP%INT,TP%LIT,TP%DPR
BYTEP: POINT 1,FLGLOC ;Byte pointer for PC flags
SEGMENT DATA
;** IOLSTC and IOLSTS have their dump "mode" (specified by user) written
;** into them, so they must be writable.
XWD -2,0
IOLSTC: BYTE (2)^B10 (7)1 (4)TP%INT (5)0 (18)C ;[4110] C
BYTE (2)^B10 (7)4 (29)0 ;[4110] Fin
XWD -2,0
IOLSTS: BYTE (2)^B10 (7)1 (4)TP%INT (1)1 (4)0 (18)S ;[4110] Indirect bit on
0 ;End of list
FLGLOC: BLOCK 1 ;TO STORE PC WORD flags
ENTFLG: BLOCK 1 ;Flag for which entry WAS taken
; 0 = DUMP
; 1 = PDUMP
ACSAVE: BLOCK 20 ;[4110] Save the AC's
PRGEND
TITLE ILL ZERO INPUT WORD ON ILLEG. CHARACTERS
SUBTTL D. TODD /DRT/DMN/TWE/SWG 20-Aug-79
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM LIB40 VERSION V.032(323)
;WHEN THE FLAG ILLEG. IS SET (BY CALLING ILL),
;FLOATING POINT INPUT WORDS WILL BE CLEARED IF
;ANY ILLEGAL CHARACTERS ARE SCANNED FOR THAT WORD.
;THE ILLEG. FLAG IS CLEARED BY FOROTS. AT THE END
;OF EACH FORMAT STATEMENT.
;THE CALLING SEQUENCE IS PUSHJ P,ILL
;THE ROUTINE 'LEGAL' ALLOWS ONE TO CLEAR THE
;ILLEG. FLAG SO THAT ILLEGAL CHARACTERS WILL
;RESULT IN THE NORMAL ILLEGAL CHARACTER RETURN.
;THE CALLING SEQUENCE IS PUSHJ P,LEGAL
SEARCH MTHPRM,FORPRM
EXTERNAL FOROP.
SEGMENT CODE
HELLO (ILL)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVEI T0,FO$ILL ;Function code in T0
XMOVEI T1,ILLEG ;FOROP. returns addr. here
PUSHJ P,FOROP. ;FOROP RETURNS ADDRESS
SETOM @ILLEG ;SET ILL CH FLAG
GOODBY
HELLO (LEGAL)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVEI T0,FO$ILL ;T0:= function code
XMOVEI T1,ILLEG ;T1:= Address to return adr in
PUSHJ P,FOROP. ;GET ADDRESS OF ILLEGAL FLAG
SETZM @ILLEG ;CLEAR ILL CH FLAG
GOODBY
SEGMENT DATA
ILLEG: BLOCK 1
PRGEND
TITLE SAVFMT
;CODE TO ENCODE THE FORMAT IN AN ARRAY
;CALLS FOROP TO CALL %FMTSV IN FOROTS
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (SAVFMT)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVEI T0,FO$FSV ;Function code
;No arg used
PUSHJ P,FOROP.
GOODBY
PRGEND
TITLE CLRFMT
;CODE TO THROW AWAY THE ENCODING OF A FORMAT IN AN ARRAY
;CALLS FOROP TO CALL %FMTCL IN FOROTS
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (CLRFMT)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVEI T0,FO$FCL ;SETUP FOR FOROP
;No arg used
PUSHJ P,FOROP.
GOODBY
PRGEND
TITLE LSNGET
;FUNCTION WHICH RETURNS THE INTEGER VALUE OF THE LINE SEQUENCE NUMBER
;OF THE CURRENT LINE FOR MODE=LINED
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (LSNGET)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVEI T0,FO$GLN ;Return current line number
MOVE T1,@(L) ;GET CHANNEL #
PUSHJ P,FOROP. ;Returns line number in T0
DMOVEM T2,SAVE2 ;SAVE 2 AC'S
MOVEI T3,5 ;5 CHARS IN LSN
SETZB T1,T2 ;CLEAR THE NUMBER
LSNLP: ROTC T0,7 ;GET A CHAR
JUMPE T1,LSNENL ;SKIP NULLS
CAIN T1," " ;CONVERT SPACE TO "0"
MOVEI T1,"0"
CAIG T1,"9" ;MAKE SURE IT'S LEGAL
CAIGE T1,"0"
JRST LSNILL ;NOT LEGAL
IMULI T2,^D10 ;MUL PREVIOUS BY 10
ADDI T2,-"0"(T1) ;ACCUMULATE NUMBER
SETZ T1, ;AND CLEAR FOR NEW DIGIT
LSNENL: SOJG T3,LSNLP
MOVE T0,T2 ;RETURN THE INTEGER
DMOVE T2,SAVE2 ;Restore acs
GOODBY
LSNILL: MOVNI T0,1 ;-1=ILLEGAL CHAR IN LSN
DMOVE T2,SAVE2 ;Restore acs
GOODBY
SEGMENT DATA
SAVE2: BLOCK 2 ;FOR THE AC'S
PRGEND
TITLE DATE TODAY'S DATE
SUBTTL D. TODD /DRT/KK/DMN/SWG/AHM/CDM 5-Nov-82
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM LIB40 VERSION V.32(433)
;This subroutine puts today's date into a numeric dimensioned two-word
;array or a character variable.
;The date will be in the form:
; "17-Aug-66 "
;The routine is called in the following manner:
; MOVEI L,ARGBLK
; PUSHJ P,DATE
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (DATE) ;ENTRY TO DATE ROUTINE.
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4172]Is compatbility flagging on?
$FCALL CFX ;[4172]Yes; display the compatibility message
PUSH P,T2 ;[3206] Save ac's
PUSH P,T3 ;[3206]
; Put time into SVDT
IF10,<
XMOVEI T1,@0(L) ;[3025] Get address of 2 word array
CALLI T1,14 ;Get the date from the monitor.
IDIVI T1,^D31 ;Div. by 31 to obtain the day-1.
ADDI T2,1 ;To obtain the day.
IDIVI T2,^D10 ;Convert into two dec. digits.
SKIPN T2 ;Is the day .LT. 10?
MOVNI T2,20 ;Yes, output blank.
MOVEI T0,"0"(T2) ;Get first digit
LSH T0,7 ;Make space
ADDI T0,"0"(T3) ;Add in 2nd digit
IDIVI T1,^D12 ;To obtain the month
EXCH T1,T2 ;Save year in T2
MOVE T1,TABLE(T1) ;Get month in T1
LSHC T0,3*7 ;Left justify 0 & 1
LSH T0,1 ;0 = ASCII /DD-MO/
;1 = ASCII /N-/
MOVEI T2,^D64(T2) ;Get the year
IDIVI T2,^D10 ;Convert into two dec. digits
ADDI T2,"0" ;Make ASCII
ADDI T3,"0"
LSH T2,2*7+1 ;Shift to CHAR 3
LSH T3,7+1 ;Shift to CHAR 4
ADD T3,T2 ;Add in to T3
ADD T1,T3 ;[3206] So low word is in T1
ADDI T1," "_1 ;[3206] Make space for last character instead
;[2020] of NULL; this allows compare of
;[2020] literal to work, since FORTRAN pads
;[2020] the word with spaces.
DMOVEM T0,SVDT ;[3206] Store away date to return
> ;END IF10
IF20,< ;BEGIN -20 ONLY CODE
HRROI T1,SVDT ;Point to address for result
SETO T2, ;Ask for today's date
MOVX T3,OT%NTM ;Do not want time
ODTIM% ;Do the JSYS
MOVEI T1," "_1 ;[3206] Change NULL to SPACE
;[2020] This allows compare of literal to
;[2020] work, since FORTRAN pads the word
;[2020] with spaces.
IORM T1,SVDT+1 ;[3206] Store away date to return
> ;END IF20
; Return date to caller
LDB T0,[POINTR (0(L),ARGTYP)] ;[3206] Type of argument
CAIE T0,TP%CHR ;[3206] Is it character?
JRST NOTCHR ;[3206] No
; Argument is character. Rather than worrying how to handle the
; length of the character descriptor, and how to pad with
; blanks, let the move sludge handle this.
MOVEI T0,^D10 ;[3206] Move 2 words of source
MOVE T1,[POINT 7,SVDT] ;[3206] Make a byte pointer for source
DMOVE T3,@0(L) ;[3206] Arg's BP and length
EXCH T3,T4 ;[3206] Reverse order
EXTEND T0,[MOVSLJ
" "] ;[3206] Put the date in the argument
JFCL ;[3206] NOP
JRST EXDATE ;[3206] Return
NOTCHR: ; Argument is numeric
DMOVE T0,SVDT ;[3206] Get date
DMOVEM T0,@0(L) ;[3206] Return date calculated above
EXDATE: POP P,T3 ;[3206] Return ac's
POP P,T2 ;[3206]
POPJ P, ;[3206] Return to caller
IF10,<
TABLE: ASCII /-Jan-/
ASCII /-Feb-/
ASCII /-Mar-/
ASCII /-Apr-/
ASCII /-May-/
ASCII /-Jun-/
ASCII /-Jul-/
ASCII /-Aug-/
ASCII /-Sep-/
ASCII /-Oct-/
ASCII /-Nov-/
ASCII /-Dec-/
>
SEGMENT DATA
SVDT: BLOCK 2 ;Place to store results from monitor call
PRGEND
TITLE TIM2GO RETURN TIME LIMIT IN SECONDS
SUBTTL H. P. WEISS/SWG 20-AUG-79
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
IF10,< ;BEGIN TOPS-10 CODE
HELLO (TIM2GO) ;DEFINE ENTRY POINT
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
PUSH P,T1 ;GRAB A REGISTER
MOVE T1,[44,,11] ;DETERMINE JIFFIES PER SECOND
GETTAB T1, ;VIA GETTAB
JRST NEVER ;UNIMPLEMENTED
FSC T1,233 ;CONVERT TO FLOATING POINT
MOVE T0,[-1,,40] ;DETERMINE TIME LIMIT
GETTAB T0, ;VIA GETTAB
JRST NEVER ;UNIMPLEMENTED
TLZ T0,777700 ;CLEAR EXTRA BITS
JUMPE T0,NEVER ;RETURN INFINITY IF 0
FSC T0,233 ;CONVERT TO FLOATING POINT
FDVR T0,T1 ;COMPUTE SECONDS TILL EXPIRATION
DONE: POP P,T1 ;RESTORE REGISTER USED
GOODBY (0) ;RETURN
NEVER: HRLOI T0,377777 ;SET LIMIT TO INFINITY
JRST DONE
> ;END IF10
IF20,< ;TOPS-20 CODE
ENTRY TIM2GO
TIM2GO:
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
PUSH P,T1 ;SAVE ACS
PUSH P,T2
PUSH P,T3
SETO T1, ;SET T1 TO -1 TO GET THIS JOB'S TIME
MOVE T2,[-3,,TBLK] ;SET UP POINTER TO BLOCK FOR RETURN VALS
MOVX T3,.JIRT ;START AT RUNTIME FIELD IN STRUCTURE
GETJI% ;DO THE JSYS
JRST NEVER
SKIPN T1,TBLK+2 ;PICK UP TIME LIMIT
JRST NEVER ;LIMIT IS 0 THEREFORE INFINITY
MOVE T2,TBLK ;PICK UP RUNTIME
SUB T1,T2 ;GET DIFFERENCE BETWEEN RUNTIME AND TIME LIMIT
FLTR T0,T1 ;AND FLOAT IT
FDVRI T0,(1000.0) ;CONVERT MILLISECONDS TO SECONDS
DONE: POP P,T3 ;RESTORE ACS
POP P,T2
POP P,T1
POPJ P,
NEVER: HRLOI T0,377777
JRST DONE
SEGMENT DATA
TBLK: BLOCK 3
> ;END IF20
PRGEND ;END OF TIM2GO
TITLE TIME TIME OF DAY
SUBTTL /KK/SWG/EDS/EGM/CDM
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM LIB40 %2.(120)
;This subroutine returns the time of day in two single word arguments or
;a character variable.
;
;The first argument gets the hour and minute, and the optional second
;argument gets the second and tenth of a second.
;The first argument is given in military time:
; 02:15 (for a.m. time)
; 14:15 (for p.m. time)
;
;The optional second argument is of the form:
; 37.4
;The routine is called in the following manner:
; XMOVEI L,ARGBLK
; PUSHJ P,TIME
;ON THE -10, TIME OBTAINS THE TIME FROM THE MONITOR IN THE FORM:
; TIME=THE NUMBER OF MILLISECONDS SINCE MIDNIGHT.
;ON THE -20, TIME OBTAINS THE INTERNAL TIME FROM THE MONITOR AND
; CONVERTS IT INTO MILLISECONDS SINCE MIDNIGHT, DOES THE SAME
; CONVERSION FROM THERE AS ON THE -10, BUT ALSO HAS TO CORRECT FOR
; GREENWICH MEAN TIME WHICH IS THE TIME THE -20 INTERNAL TIME IS
; STORED IN.
SEARCH MTHPRM,FORPRM
SEGMENT CODE
SALL ;FOR HELLO MACRO - SEE BELOW
HELLO (TIME)
FSRCH ;MUST FOLLOW HELLO MACRO TO AVOID OLD TIME JSYS
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4172]Is compatbility flagging on?
$FCALL CFX ;[4172]Yes; display the compatibility message
PUSH P,T2 ;[3206] Save ac's
PUSH P,T3 ;[3206]
PUSH P,T4 ;[3405]
;Process the first argument. Put it into TTIME.
IF10,< ;TOPS10-only code
MSTIME T1, ;Get time in millisecs from the monitor.
> ;[3405] End IF10
IF20,< ;[3405] TOP20-only code
GTAD% ;[3405] Get internal GMT
HRLZ T1,T1 ;[3405] Put in left half
LSH T1,-1 ;[3405] Divide by 2
MUL T1,[^D86400000] ;[3405] Compute ms since midnight in T1
> ;[3405] End IF20
IDIVI T1,^D60000 ;[2103]Total mins. in 1, leftover msecs. in 2.
MOVEM T2,TEMP1 ;Save the leftover ms
IDIVI T1,^D60 ;Hours in 1, minutes in 2.
MOVEM T2,TEMP2 ;[3405] Save minutes
;[3405] For TOPS20, which is based on Greenwich Mean Time, determine and
;[3405] adjust for local time zone correction factor and adjust if necessary for
;[3405] Daylight Savings.
;The general algorithm is similar to that in SECNDS. If this must be
;changed, them SECNDS probably ought to be changed also.
IF20,< ;[3405] TOPS20-only code
SETO T2, ;[3405] -1 for current time
SETZ T4, ;[3405] 0 for local time
ODCNV% ;[3405] Return T4/flags+zone,,secs since 00:00
HLR T3,T4 ;[3405] Pick up left half
HRROI T2,<^-<(IC%TMZ)>> ;[3405] Mask -1,,777700 to isolate zone
TDZ T3,T2 ;[3405] Get zone bits (12-17) only
TRNE T3,40 ;[3405] Time zone negative(-12 to +12)?
TDO T3,T2 ;[3405] Yes, propogate its sign bit
TXNE T4,IC%ADS ;[3405] Was Daylight Savings in effect?
SUBI T3,1 ;[3405] Yes, subtract one hour
SUB T1,T3 ;[3405] Adjust hours by time zone factor
SKIPGE T1 ;[3405] Did hours go negative?
ADDI T1,^D24 ;[3405] Yes, get it mod 24 hours
> ;[3405] End IF20
MOVE T0,[POINT 7,TTIME] ;[3206] Build a BP for answer
MOVEM T0,HLDBP ;Save it away
JSP T3,SUB1 ;[3405] Go to subr. to set up hr.in T1 in ASCII
MOVEI T1,":" ;Set up ":".
IDPB T1,HLDBP ;Deposit ":" in the word.
MOVE T1,TEMP2 ;Pick up the minutes.
JSP T3,SUB1 ;Go to subr. to set up min. in ASCII.
;[3405]
; Return time in 1st argument
LDB T0,[POINTR (0(L),ARGTYP)] ;[3206] Get type of 1st argument
CAIE T0,TP%CHR ;[3206] Is it character?
JRST NTCHR1 ;[3206] no
; Character argument. Use move string, so we don't have to
; worry about the length the user specified and how to pad with
; spaces.
MOVEI T0,5 ;[3206] Length of 1 numeric word
MOVE T1,[POINT 7,TTIME] ;[3206] Address of source (time to return)
DMOVE T3,@0(L) ;[3206] Arg BP and length
EXCH T3,T4 ;[3206] Exchange positions
EXTEND T0,[MOVSLJ
" "] ;[3206] Put the time in the argument
JFCL ;[3206] NOP
JRST NEXT1 ;[3206]
NTCHR1: ; Numeric argument
MOVE T0,TTIME ;[3206] Return time in
MOVEM T0,@0(L) ;[3206] the first argument
NEXT1: HLRZ T3,-1(L) ;[3206] Number of arguments
CAIE T3,-2 ;[3206] Are there two?
JRST EXTIME ;[3206] Exit from here
;[3405]
; Process 2nd argument to return seconds
TIME02:
MOVE T0,[POINT 7,TTIME] ;[3206] Build BP for second argument
MOVEM T0,HLDBP ;Save it away
MOVEI T1," " ;PUT IN A BLANK AS THE FIRST
IDPB T1,HLDBP ;CHARACTER IN THE 2ND WORD.
MOVE T1,TEMP1 ;PICK UP THE MSECONDS.
IDIVI T1,^D1000 ;SECONDS IN 1, LEFTOVER MSECS. IN 2.
MOVEM T2,TEMP1 ;SAVE THE MSECS.
JSP T3,SUB1 ;GO TO SUBR. TO SET UP THE SECS. IN ASCII.
MOVEI T1,"." ;SET UP "."
IDPB T1,HLDBP ;IN THE WORD.
MOVE T2,TEMP1 ;PICK UP THE MSECS.
IDIVI T2,^D100 ;GET THE TENTH OF A SECOND.
MOVEI T2,"0"(2) ;MAKE IT ASCII
IDPB T2,HLDBP ;PUT IT IN THE SECOND WORD.
LDB T0,[POINTR (1(L),ARGTYP)] ;[3206] Type of 2nd argument
CAIE T0,TP%CHR ;[3206] Is it character?
JRST NTCHR2 ;[3206] No
; 2nd argument is character.
MOVEI T0,5 ;[3206] Length of source in characters
MOVE T1,[POINT 7,TTIME] ;[3206] Make a BP for
DMOVE T3,@1(L) ;[3206] 2nd arg's BP and length
EXCH T3,T4 ;[3206] Exchange them
EXTEND T0,[MOVSLJ
" "] ;[3206] Put the time in the argument
JFCL ;[3206] NOP
JRST EXTIME ;[3206] Exit from here
NTCHR2: ; 2nd argument is numeric.
MOVE T0,TTIME ;[3206] Return the seconds as the 2nd arg
MOVEM T0,@1(L) ;[3206]
EXTIME: POP P,T4 ;[3405]
POP P,T3 ;[3206] Restore ac's
POP P,T2 ;[3206]
POPJ P, ;[3206] Return
SUB1: IDIVI T1,^D10 ;SUBROUTINE ENTRY POINT.
MOVEI T1,"0"(T1) ;MAKE IT ASCII
IDPB T1,HLDBP ;DEPOSIT IT IN THE WORD.
MOVEI T2,"0"(T2) ;MAKE IT ASCII
IDPB T2,HLDBP ;DEPOSIT IT IN THE WORD.
JRST (T3) ;RETURN TO MAIN SEQUENCE.
SEGMENT DATA
TTIME: BLOCK 1 ;[3206] Temporary storage for Time
TEMP1: BLOCK 1 ;[3206]
TEMP2: BLOCK 1 ;[3206]
HLDBP: BLOCK 1 ;Saved byte ptr
PRGEND
TITLE SLITE SENSE LITE SETTING AND TESTING FUNCTION
SUBTTL D. TODD /DRT/TWE/SWG 20-AUG-1979
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM LIB40 VERSION V.032(323)
;SENSE LIGHT SETTING AND TESTING PROGRAM
;THIS PROGRAM CAN BE ENTERED AT TWO PLACES. THE SENSE LIGHT
;TESTING PROGRAM IS CALLED IN THE FOLLOWING MANNER:
; MOVEI L,ARGBLK
; PUSHJ P,SLITET
;IT TAKES TWO ARGUMENTS I AND J.
;I IS THE ADDRESS OF AN INTEGER ARGUMENT, AND J IS THE ADDRESS
;OF THE ANSWER. IF SENSE LIGHT I IS ON, THE ANSWER IS ONE, AND
;IF IT IS OFF, THE ANSWER IS 2.
;THE SENSE LIGHT SETTING PROGRAM IS CALLED IN THE FOLLOWING
;MANNER:
; MOVEI L,ARGBLK
; PUSHJ P,SLITE
;SLITE TAKES ONE ARGUMENT I.
;I IS THE ADDRESS OF AN INTEGER ARGUMENT WHOSE VALUE IS
;BETWEEN 0 AND 36. IF I=0, ALL SENSE LIGHTS ARE TURNED OFF.
;OTHERWISE, SENSE LIGHT I IS TURNED ON.
SEARCH MTHPRM,FORPRM
SEGMENT CODE
HELLO (SLITE) ;ENTRY TO SLITE PROGRAM
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVN T1, @(L) ;GET ARGUMENT
JUMPE T1, SLITE2 ;IS IT ZERO?
MOVSI T0, 400000 ;NO, PUT A ONE IN BIT 0
ROT T0, 1(T1) ;ROTATE IT INTO POSITION
MOVE T1, LITES ;GET THE SENSE LIGHTS
TDO T1, T0 ;TURN ON PROPER LIGHT
SLITE2: MOVEM T1, LITES ;SAVE NEW SENSE LIGHTS
GOODBY (1) ;RETURN
HELLO (SLITET) ;ENTRY TO SENSE TESTING PROGRAM
MOVN T1, @(L) ;PICK UP ARGUMENT
MOVSI T0, 400000 ;PUT A ONE IN BIT 0
ROT T0, 1(T1) ;ROTATE IT INTO POSITION
MOVEI T1, 1 ;SET ANSWER TO ONE FOR NOW
MOVEM T1, @1(L) ;...
MOVE T1, LITES ;PICK UP SENSE LIGHTS
TDZN T1,T0 ;IS THE PROPER LIGHT ON?
AOS @1(L) ;NO, CHANGE ANSWER TO 2
MOVEM T1,LITES ;RESTORE WITH TESTED LIGHT OFF
GOODBY (2) ;RETURN
SEGMENT DATA
LITES: 0
PRGEND
TITLE SSWTCH DATA SWITCH TESTING FUNCTION
SUBTTL D. TODD /DRT/TWE/SWG/EDS 16-Mar-81
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
;ALL RIGHTS RESERVED.
;FROM LIB40 VERSION V.032(323)
; DATA SWITCH TESTING PROGRAM
;THIS PROGRAM IS CALLED IN THE FOLLOWING MANNER:
; MOVEI L, ARGBLK
; PUSHJ P,SSWTCH
;I IS THE ADDRESS OF AN INTEGER ARGUMENT AND J IS THE ADDRESS
; OF THE ANSWER . IF DATA SWITCH I IS UP,THE ANSWER IS 2 , AND
; IF IT IS DOWN, THE ANSWER IS 1.
;ON TOPS-20, THE SWITCHES ARE NOT AVAILABLE, THEREFORE SSWTCH WILL
; ALWAYS RETURN AN ANSWER OF 1. WE ARE KEEPING THE ROUTINE AROUND
;FOR COMPATIBILITY
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (SSWTCH) ;ENTRY TO SSWTCH PROGRAM
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
IF10,< ;ONLY MAKES SENSE ON A -10
MOVN T1, @(L) ;PICK UP ARGUMENT
MOVSI T0, 400000 ;PUT A ONE IN BIT 0
ROT T0,(T1) ; ROTATE BIT INTO POSITION
MOVEI T1,2 ; SET ANSWER TO 2 FOR NOW
MOVEM T1, @1(L) ;...
SWITCH T1, ;GET DATA SWITCHES FROM MONITOR
MOVEI T1,2 ; SET ANSWER TO 2 FOR NOW
SOS @1(L) ; NO, CHANGE ANSWER TO ONE
> ;END IF10
IF20,<
MOVEI T1,1 ;ALWAYS SAY NO
MOVEM T1,@1(L) ;STORE IN USER'S VARIABLE
> ;END IF20
GOODBY (2) ;RETURN
PRGEND
TITLE ERRSET SET APR TRAP PARAMETERS
SUBTTL CHRIS SMITH/CKS/PLB
;Call:
; CALL ERRSET (N)
;or CALL ERRSET (N, I)
;or CALL ERRSET (N, I, SUBR)
;
;where N = max number of error messages to type
;
; I = which error this call applies to. One of:
; -1 any of the following
; 0 integer overflow
; 1 integer divide check
; 2 input integer overflow
; 3 input floating overflow
; 4 floating overflow
; 5 floating divide check
; 6 floating underflow
; 7 input floating underflow
; 8 library routine error
; 9 output field width too small
; 21 FORLIB warnings
; 22 non-standard usage warnings
;
; If I is not specified, -1 is assumed
;
; SUBR = routine to call on the trap
;
; The effect is as if
; CALL SUBR (I, IPC, N2, ITYPE, UNFIXED, FIXED)
; were placed in the program just after the instruction causing
; the trap.
; I = error number of trap, same as above
; IPC = PC of trap instruction
; (or if error number= 9, IPC = PC of FOROTS call)
; N2 = 2nd error number (reserved for DEC)
; ITYPE = data type of value
; UNFIXED = value returned by the processor
; FIXED = value after fixup by MTHTRP
; If SUBR is not specified, no routine is called on the APR trap.
SEARCH MTHPRM,FORPRM
EXTERN MTHOP.
EXTERN ABORT. ;[3322]
SEGMENT CODE
HELLO (ERRSET)
;
; [4172] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4172]Is any compatbility flagging on?
$FCALL CFX ;[4172]Yes; display the compatibility message
MOVEI T0,ML$APR ;T0:= function code
XMOVEI T1,APRCT ;Read apr table addresses to here
PUSHJ P,MTHOP. ;READ THEM
MOVEM T0,ERRSZ ;SAVE SIZE OF TABLE
XMOVEI T1,. ;[4012] GET LOCAL SECTION
TLNE T1,-1 ;[4012] IS SECTION NUMBER ZERO?
SKIPA T1,[<T2>B5] ;[4012] NO, USE "EFIW T2,"
MOVSI T1,(IFIW (T2)) ;[4012] ELSE, MAKE IFIW INDEXED BY T2
IORM T1,APRCT ;[4012] POINTING TO ERROR COUNT TABLE
IORM T1,APRLM ;[4012] AND ERROR MESSAGE LIMIT TABLE
IORM T1,APRSB ;[4012] AND SUBROUTINE ADDRESS TABLE
HLLZ T4,-1(L) ;[4012] GET ARG COUNT
SETO T2, ;DEFAULT IS ALL APR ERRORS
SETZ T3, ;DEFAULT SUBROUTINE IS NONE
MOVE T1,@(L) ;GET ERR MESSAGE LIMIT
AOBJP T4,ERSET1 ;[4012] IF OUT OF ARGS, GO STORE THEM
MOVE T2,@1(L) ;[4012] GET ERROR NUMBER
AOBJP T4,ERSET1 ;[4012] IF OUT OF ARGS, GO STORE THEM
XMOVEI T3,@2(L) ;[4012] GET ROUTINE TO CALL
SKIPN (T3) ;[3322] VALID ROUTINE CALL?
$FCALL MXD,ABORT. ;[3322] MISSING EXTERNAL DECLARATION. ABORT
ERSET1: CAML T2,ERRSZ ;REASONABLE ERROR NUMBER?
$FCALL NOR,EPOPJ ;NUMBER OUT OF RANGE
MOVEI T0,1 ;[4012] DEFAULT IS DO JUST ONE ITEM
JUMPGE T2,ERSETL ;IF INDIVIDUAL ERROR, GO SET IT
MOVE T0,ERRSZ ;[4012] IF ALL ERRORS, LOOP MAXIMUM TIMES
SETZ T2, ;[4012] STARTING AT ITEM ZERO
ERSETL: MOVE T4,T1 ;GET ERR MESSAGE LIMIT
ADD T4,@APRCT ;ADD TO NUMBER THAT ALREADY HAPPENED
MOVEM T4,@APRLM ;STORE ERR MESSAGE LIMIT
MOVEM T3,@APRSB ;STORE SUBROUTINE ADDRESS OR 0
AOJ T2, ;[4012] BUMP INDEX AC
SOJG T0,ERSETL ;[4012] SET ALL ERRORS IF THAT'S WHAT HE WANTS
EPOPJ: POPJ P, ;DONE
SEGMENT DATA
APRCT: BLOCK 1 ;ADDRESS OF APR ERROR COUNTS
APRLM: BLOCK 1 ;ADDRESS OF APR ERROR LIMITS
APRSB: BLOCK 1 ;ADDRESS OF APR ERROR SUBROUTINES
ERRSZ: BLOCK 1 ;SIZE OF TABLES
PRGEND
TITLE MTHOP.
SEARCH MTHPRM,FORPRM
ENTRY MTHOP.
EXTERN FOROP.
MTHOP.==<FOROP.+0>
PRGEND
TITLE ERRSNS READ LAST IO ERROR
SUBTTL CHRIS SMITH/CKS
;Call:
; CALL ERRSNS (I,J)
;or CALL ERRSNS (I,J,MSG)
;
;I and J are returned with the First number and the Second number
;for the last error
;
;MSG, if present, is a 16-word array returned holding the text
;of the message for the last error
SEARCH MTHPRM,FORPRM
FSRCH
EXTERN FOROP.
SEGMENT CODE
HELLO (ERRSNS)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4172]Is compatbility flagging on?
$FCALL CFX ;[4172]Yes; display the compatibility message
MOVEI T0,FO$ERR ;Read error numbers
XMOVEI T1,ERRNUM ;To block beginning here
PUSHJ P,FOROP. ;READ THEM
HLRE T1,-1(L) ;GET ARG COUNT
MOVN T1,T1 ;MAKE POSITIVE
CAIGE T1,1 ;[5007]ANY ARGS?
POPJ P, ;[5007]NOPE, JUST RETURN
MOVE T2,ERRNUM ;[5007]ELSE,GET 1ST ERR NUMBER
HLRZM T2,@0(L) ;[5007]STORE IN FIRST ARG
CAIGE T1,2 ;[5007]IS THERE A SECOND ARG?
POPJ P, ;[5007]NOPE, RETURN
HRRZ T2,T2 ;Get RH only
CAIN T2,-1 ;-1?
SETO T2, ;Yes, make full word
MOVEM T2,@1(L) ;Store 2nd ERR number
CAIGE T1,4 ;[5007]IS THERE A FOURTH ARG?
JRST ERRMSG ;[5007]NO, (SEE ABOUT THE 3RD)
HRRZ T2,ERRNM3 ;[5007]GET THE STV
HRRZM T2,@4(L) ;[5007]STORE THE FOURTH ARG
ERRMSG: CAIGE T1,3 ;THIRD ARG (STRING) SPECIFIED?
POPJ P, ;NO, DONE
MOVE T1,ERRMSA ;GET MSG POINTER
LDB T2,[POINTR (2(L),ARGTYP)] ;GET ARG TYPE
CAIE T2,TP%CHR ;CHARACTER?
JRST ERRNC ;NO
DMOVE T2,@2(L) ;YES. GET PNTR/COUNT
JRST ERRLP ;AND JOIN COMMON CODE
ERRNC: XMOVEI T2,@2(L) ;GET STRING ADDRESS
$BLDBP T2 ;BUILD A BYTE POINTER TO IT
MOVEI T3,^D80 ;COUNT 80 CHARS
ERRLP: ILDB T4,T1 ;GET CHAR
JUMPE T4,ERREND ;NULL IS END
IDPB T4,T2 ;STORE CHAR
SOJG T3,ERRLP
ERREND: JUMPLE T3,ERRRET ;IF 80 CHARS, DONE
MOVEI T1," " ;PAD WITH TRAILING SPACES
IDPB T1,T2
SOJG T3,.-1
ERRRET: POPJ P, ;DONE
SEGMENT DATA
ERRNUM: BLOCK 1 ;ERR NUMBERS
ERRMSA: BLOCK 1 ;ERR MSG ADDRESS
ERRNM3: BLOCK 1 ;3RD ERROR NUMBER (STV)
PRGEND
TITLE DIVERT DIVERT ERROR MESSAGE OUTPUT
SUBTTL CHRIS SMITH/CKS
;Call:
;
; CALL DIVERT (U)
;where U is the unit number of an open unit, sends error messages
;to U instead of to the TTY. If U is -1, the diversion is ended.
;
; CALL CHKDIV (U)
;sets U to the unit number where errors are diverted, or -1 if none
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (CLRDIV)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
SETO T1, ;Same as saying "UNIT=-1"
JRST DIV01 ; (Should always return status 0)
HELLO (DIVERT)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVE T1,@(L) ;Get unit number
DIV01: MOVEI T0,FO$DIV ;Do diversion
PUSHJ P,FOROP.
;Status is returned in T1.
;T1: = 0 means ok.
; = 1 means ?Illegal unit number.
; = 2 means ?unit not open
; = 3 means ?Not open for FORMATTED IO
; = 4 means ?Can't write to unit.
XMOVEI T0,DIVRT(T1) ;GET ADDR TO GO
MOVE T1,@(L) ;GET UNIT NUMBER
PJRST @T0 ;GO THERE
;Indexed by status value
DIVRT: JRST DIVRET ;(0) OK, return
$FCALL IDU,DIVRET ;(1) Illegal unit
$FCALL UNO,DIVRET ;(2) Unit not open
$FCALL NOF,DIVRET ;(3) Not open for FORMATTED IO
$FCALL CWU,DIVRET ;(4) Can't write to unit
DIVRET: POPJ P, ;DONE
HELLO (CHKDIV)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
MOVEI T0,FO$GDV ;Get divert unit
PUSHJ P,FOROP.
MOVEM T1,@(L) ;Return unit number
POPJ P, ;Done
PRGEND
TITLE OVERFL RETURN OVERFLOW INFO
SUBTTL CHRIS SMITH/CKS/EGM
;Call:
;
; CALL OVERFL (IANS)
;
;If any overflow, underflow, or divide check has occurred since the last
;call to OVERFL, IANS is set to 1 and T0 is set to -1; if not, IANS is
;set to 2 and T0 is set to 0.
;
; Note to maintainers: The "magic" number 8 that appears in this routine
;is because APR counts 0 thru 7 are various arithmetic traps.
;The entry number is determined by 3 PC flag bits in combination.
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (OVERFL)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4100]Is any compatbility flagging on?
$FCALL CFX ;[4100]Yes; display the compatibility message
PUSH P,T2 ;SAVE
PUSH P,T3 ; REGS
MOVEI T0,FO$APR ;Read APR table addresses
XMOVEI T1,APRCT ;Into here
PUSHJ P,FOROP. ;READ THEM
XMOVEI T1,. ;[4030] GET LOCAL SECTION
TLNE T1,-1 ;[4030] IS SECTION NUMBER ZERO?
SKIPA T1,[<T1>B5] ;[4030] NO, USE "EFIW T1,"
MOVSI T1,(IFIW (T1)) ;MAKE INDIRECT WORD INDEXED BY T1
IORM T1,APRCT ;[4030] POINTING TO COUNT TABLE
MOVEI T1,8-1 ;[4030] MAKE TABLE SOJG COUNTR
MOVEI T2,2 ;INIT ANSWER TO 2 (NO OVERFLOWS)
OVLP: MOVE T3,@APRCT ;GET CURRENT COUNT
CAMLE T3,OLDCT(T1) ;[2077][4007] GREATER THAN OLD COUNT?
MOVEI T2,1 ;YES, SET ANSWER TO 1 (OVERFLOW OCCURRED)
MOVEM T3,OLDCT(T1) ;[4030] STORE NEW COUNT
SOJG T1,OVLP ;[4030] LOOK THROUGH WHOLE TABLE
MOVEM T2,@0(L) ;STORE ANSWER FOR CALLER
SETZM T0 ;ASSUME NO OVERFLOW, T0=FALSE
CAIN T2,1 ;WAS THERE?
SETOM T0 ; YES, SET T0=TRUE
POP P,T3 ;RESTORE
POP P,T2 ; REGS
POPJ P, ;DONE
SEGMENT DATA
OLDCT: BLOCK 8 ;PREVIOUS APR COUNTS
APRCT: BLOCK 1 ;ADDRESS OF CURRENT APR COUNTS
APRLM: BLOCK 1 ;ADDRESS OF LIMITS
APRSB: BLOCK 1 ;ADDRESS OF SUBROUTINES
PRGEND
TITLE TRACE DUMMY ROUTINE DEFINES TRACE ENTRY IN FOROTS (FORERR)
SUBTTL D. TODD /DRT 05-APR-1973
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1973, 1987
;ALL RIGHTS RESERVED.
SEARCH MTHPRM,FORPRM
NOSYM
ENTRY TRACE ;HELLO MACRO CAN NOT BE USED
;SIXBIT NAME DEFINED IN TRACE (FORERR)
HELLO (TRACE)
;
; [4100] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;Is any compatbility flagging on ?
$FCALL CFX ;Yes; display the compatibility message
PJRST TRACE.## ;Call the correct (dotted) name
PRGEND
TITLE INIOVL SUBROUTINE TO SET PRINCIPAL OVERLAY FILE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY INIOVL
INIOVL=INIOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE GETOVL SUBROUTINE TO GET LINKS INTO CORE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY GETOVL
GETOVL=GETOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE REMOVL SUBROUTINE TO REMOVE LINKS FROM CORE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY REMOVL
REMOVL=REMOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE RUNOVL SUBROUTINE TO JUMP TO START ADDRESS OF LINK
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY RUNOVL
RUNOVL=RUNOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE LOGOVL SUBROUTINE TO SET LOG OVERLAY FILE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY LOGOVL
LOGOVL=LOGOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE TMPOVL SUBROUTINE TO SET WRITABLE OVERLAY FILE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY TMPOVL
TMPOVL=TMPOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE SAVOVL SUBROUTINE TO MARK LINK AS WRITABLE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY SAVOVL
SAVOVL=SAVOV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE CLROVL SUBROUTINE TO MARK LINK AS NOT WRITABLE
SUBTTL D. M. NIXON 10-MAY-74
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
VERWHO==0 ;EDITOR
VERVER==1 ;MAJOR VERSION NUMBER
VERUPD==0 ;MINOR VERSION NUMBER
VEREDT==1 ;EDIT NUMBER
ENTRY CLROVL
CLROVL=CLROV.## ;REAL SUBROUTINE IS IN OVRLAY
PRGEND
TITLE FDDT - DUMMY FORDDT
SUBTTL D. M. NIXON/DMN/CKS/AHM 21-Apr-83
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT DATA ;[3311] Put this in the lowseg because
;[3124] FDDT. is impure
IF20,<
DEFINE OUTSTR (X) <
PUSH P,T1 ;[3124] Save T1
HRROI T1,X
PSOUT%
POP P,T1 ;[3124] Restore T1
>
>
HELLO (FDDT.)
PUSHJ P,.+1 ;FIRST TIME IN
OUTSTR [ASCIZ /%FORDDT not loaded
/]
PUSH P,[CAI] ;REPLACE WITH NO-OP
POP P,FDDT. ;SO WE ONLY SEE MESSAGE ONCE
POPJ P, ;RETURN
PRGEND
TITLE EXIT
SEARCH MTHPRM,FORPRM
ENTRY EXIT
EXTERN EXIT.
HELLO (EXIT)
;
; [4100] Check for compatibility flagging
;
SKIPE [FLG77.##] ;Is ANSI compatbility flagging on ?
$FCALL CFR ;Yes; display the compatibility message
PJRST EXIT.## ;Call the correct (dotted) name
PRGEND
TITLE EXIT1
;ENTRY POINT TO JUST CLOSE FILES
ENTRY EXIT1
EXTERN EXIT1.
EXIT1==<EXIT1.+0>
PRGEND
TITLE QUIETX
SEARCH MTHPRM,FORPRM
;[3407] DOES A QUIET EXIT FROM FOROTS (NO CPU TIME MESSAGE, NO ERROR
;[3407] SUMMARIES, IF ANY)
EXTERN FOROP.
SEGMENT CODE
HELLO (QUIETX) ;[4121] User callable subroutine
MOVEI T0,FO$QIT ;QUIET EXIT FUNCTION
PJRST FOROP.
PRGEND
TITLE PROSB. Substring bounds checking routine
SUBTTL CHRIS SMITH/CKS 8-Jun-82
;[3132] New
;Routine to perform substring bounds checking.
;The compiler transforms the substring reference
;
; VAR(LB:UB)
;
;into
;
; VAR(LB: PROSB.(VAR,LB-1,UB,ISN,'VAR') )
;
;where PROSB. checks the validity of LB and UB, then returns UB. If the bounds
;are invalid, a warning message is typed. (LB-1 is used instead of LB because
;LB-1 is conveniently available in the compiler's internal representation of
;substrings.)
;The conditions for valid substring bounds are
;
; LB .LE. UB
; LB .GE. 1
; UB .LE. LEN(VAR)
;
;If a bound is found to be out of range, a warning message is typed. No
;attempt at correction is made - the program will get the same results as if
;/DEBUG:BOUNDS were not specified, except for the message.
SEARCH MTHPRM,FORPRM
FSRCH ;[5015]
SEGMENT CODE
SALL
;Argument block offsets
VAR==0 ;Variable we're taking substring of
LB==1 ;Lower bound - 1
UB==2 ;Upper bound
ISN==3 ;Statement number of substring reference
VARNAME==4 ;Sixbit variable name for error message
HELLO (PROSB.)
PUSH P,T2 ;SAVE ACS
PUSH P,T3
XMOVEI T1,@VAR(L) ;GET POINTER TO DESCRIPTOR
MOVE T1,1(T1) ;GET CHARACTER VARIABLE LENGTH
MOVE T2,@LB(L) ;GET LOWER BOUND - 1
MOVE T3,@UB(L) ;GET UPPER BOUND
JUMPL T2,SERR ;CHECK LB .GE. 1 (LB-1 .GE. 0)
CAML T2,T3 ;MUST HAVE LB .LE. UB (LB-1 .LT. UB)
JRST SERR ;NO, ERROR
CAMLE T3,T1 ;CHECK UB .LE. LENGTH
JRST SERR ;NO, ERROR
;Return UB.
RET: MOVE T0,@UB(L) ;RETURN UB FOR SUBSTRING CALCULATION
POP P,T3 ;RESTORE ACS
POP P,T2
POPJ P, ;RETURN
;Here on error, type message and return normally.
SERR: PUSH P,T4 ;SAVE SOME MORE REGISTERS FOR ERR MESSAGE
PUSH P,T5
MOVE T4,@ISN(L) ;GET ISN
LDB T5,[POINTR (VARNAME(L),ARGTYP)];[5015]
CAIN T5,TP%6BZ ;[5015]Is it SIXBITZ?
JRST SERR6Z ;[5025]Yes, Pass pointer to sixbitz
MOVE T5,@VARNAME(L) ;[5025]No, Pass sixbit word
JRST SERR2 ;[5025]and skip over this stuff
SERR6Z: MOVE T5,VARNAME(L) ;[5025]GET THE 18 BIT ADDRESS
HLL T5,L ;[5025]ADD THE SECTION NUMBER
SERR2: ADDI T2,1 ;CONVERT LB-1 TO LB
$FCALL SSE ;"%Substring range error VAR(LB:UB)
; on line ISN at LABEL+OFFSET"
POP P,T5 ;RESTORE REGISTERS
POP P,T4
JRST RET ;GO RETURN UB
PRGEND
TITLE PA1050
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (PA1050)
MOVEI T0,FO$PAT ;ALLOW AND GET PA1050
PJRST FOROP.
PRGEND
TITLE FFUNIT
SEARCH MTHPRM,FORPRM
EXTERN FOROP.
SEGMENT CODE
HELLO (FFUNIT)
;
; [4130] Check for compatibility flagging.
;
SKIPE [FLGON.##] ;[4130]Is any compatbility flagging on?
$FCALL CFX ;[4130]Yes; display the compatibility message
MOVEI T0,FO$GFU ;GET # OF FIRST FREE UNIT
PUSHJ P,FOROP.
MOVEM T0,@(L) ;SAVE IN USER'S VARIABLE
POPJ P,
PRGEND ;[3142] End of the routine
TITLE TOPMEM ALLOCATE MEMORY FROM TOP DOWN
SUBTTL TGS 20-Oct-83
SEARCH MTHPRM,FORPRM ;[3362]
EXTERN FOROP.,ABORT. ;[3362]
SEGMENT CODE ;[3362]
;[3362] SET ENDP AND STARTP TO DESIRED PAGE NUMBER TO FORCE MEMORY
;[3362] ALLOCATION FROM THE TOP DOWN. NO PREALLOCATION FOR SORT'S PAGES
;[3362] IS DONE.
;[3362] USER CALL:
;[3362] CALL TOPMEM (<top page number>)
HELLO (TOPMEM) ;[3362]
MOVE T1,@0(L) ;[3362] GET PAGE NUMBER ARGUMENT
CAIG T1,777 ;[3362] WITHIN RANGE?
CAIG T1,0 ;[3362] 1-777?
$FCALL IPN,ABORT. ;[3362] NO, DIE.
MOVEI T0,FO$NOS ;[3362] FOROP FUNCTION TO SET ENDP/STARTP
PUSHJ P,FOROP. ;[3362] DO IT.
GOODBY ;[3362] RETURN
PRGEND ;[3362]
TITLE SRTINI ALLOCATE MEMORY TOPDOWN AND PREALLOCATE SORT
SUBTTLE TGS 20-Oct-83
SEARCH MTHPRM,FORPRM ;[3362]
EXTERN FOROP.,ABORT.,%PASRT ;[3362]
SEGMENT CODE ;[3362]
;[3362] SET ENDP AND STARTP TO DESIRED PAGE NUMBER TO FORCE MEMORY
;[3362] ALLOCATION FROM THE TOP DOWN. ALSO PREALLOCATE PAGES FOR SORT.
;[3362] FOROP. CALL FO$SRT SETS A FLAG SO FORSRT WON'T ALSO TRY TO PREALLOCATE.
;[3362] CALLING THIS ROUTINE SHOULD BE UNNECESSARY ON EXTENDED MACHINES SINCE
;[3362] SORT WILL BE IN ITS OWN SECTION.
;[3362] USER CALL:
;[3362] CALL SRTINI (<top page number>)
HELLO (SRTINI) ;[3362]
MOVE T1,@0(L) ;[3362] GET PAGE NUMBER ARGUMENT
CAIG T1,777 ;[3362] WITHIN RANGE?
CAIG T1,0 ;[3362] 1-777?
$FCALL IPN,ABORT. ;[3362] NO, DIE.
MOVEI T0,FO$SRT ;[3362] FOROP. FUNCTION CODE TO SET ENDP/STARTP
PUSHJ P,FOROP. ;[3362] AND PREALLOCATE SORT PAGES.
SETOM %PASRT ;[3362] ASSUME SUCCESS.
CAME T0,[-1] ;[3362] DID WE PREALLOCATE?
POPJ P, ;[3362] YES, RETURN.
SETZM %PASRT ;[3362] NO. CLEAR FLAG,
$FCALL CPP ;[3362] WARN AND RETURN.
POPJ P, ;[3362] RETURN
PRGEND ;[3362]
TITLE FORMSL - Fortran Library error message macros
SUBTTL Jon Campbell/JLC 28-May-82
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1982, 1987
;ALL RIGHTS RESERVED.
;++
; FUNCTIONAL DESCRIPTION:
;
; Defines the text of error messages in the fortran library (FORLIB).
; Uses the Macro $FERR to generate error messages in propper format.
;
; Arguments to $FERR:
; $FERR( 1st - Warning/error character (? or %),
; 2nd - Unique three character pnuemonic for error
; message. A F.<3 character> symbol is created,
; 3rd - Error class number. (21 for Forlib error messages.)
; 4th - Unique error number for message. (Not currently used.)
; 5th - Message to appear
;
; For more information the error message macros see FORPRM & MTHPRM.
;
; CALLING SEQUENCE:
;
; Called from FORLIB code with a $FCALL macro (which generates):
;
; JRST F.nnn ;Where nnn is the 3 letter error code.
;
; For more information on the $FERR macro see FORPRM.
;
; INPUT PARAMETERS:
;
; None
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM, FORPRM
SEGMENT CODE
RADIX 10
SALL
$FERR (%,CFF,33,322,$I Intrinsic routine $N invoked incompatibly,<[VAXIDX]>);[4100]
IF20,< $FERR (%,CFR,33,323,$I FORTRAN-20 supplied routine $N invoked,<[ANSIDX]>)
$FERR (%,CFX,33,323,$I FORTRAN-20 supplied routine $N invoked,<[ANSIDX+VAXIDX]>) >;END IF20
IF10,< $FERR (%,CFR,33,323,$I FORTRAN-10 supplied routine $N invoked,<[ANSIDX]>)
$FERR (%,CFX,33,323,$I FORTRAN-10 supplied routine $N invoked,<[ANSIDX+VAXIDX]>) >;END IF10
$FERR (%,CFO,33,326,$I Overlap of character assignments,<[VAXIDX]>)
$FERR (?,IOE,98,0,$J) ;General-purpose I/O error
$FERR (%,NOR,-1,0,ERRSET: error number out of range - ignored)
;[3205] 21,102 was VDM
;[3205] 21,103 was ICF
$FERR (?,IDU,21,104,DIVERT: illegal to divert to unit $D,<T1>)
$FERR (?,UNO,21,105,DIVERT: unit $D is not open,<T1>)
$FERR (?,NOF,21,106,DIVERT: unit $D is not open for FORMATTED I/O,<T1>)
$FERR (?,CWU,21,107,DIVERT: Can't write to unit $D,<T1>)
$FERR (?,CLE,21,108,<Concatenation result larger than expected>)
$FERR (?,ICE,21,109,<Illegal length character expression>)
$FERR (?,NCS,21,110,No character stack allocated - compiler error)
;[4101] 21,111 was NCA
$FERR (?,AQS,21,112,<First argument to SORT must be a quoted string>) ;[3205]
$FERR (%,SSE,23,113,<Substring range error $S($D:$D)
on line $D>,<T5,T2,T3,T4>)
$FERR (%,SRE,23,114,<Subscript range error - subscript $D of array $S = $D
on line $D>,<T1,T2,P2,T3>)
$FERR (?,TMA,21,115,<Too many arguments in call to SORT>) ;[3205]
$FERR (?,CGP,21,116,<Can't get pages 600:677 for SORT>) ;[3205]
$FERR (?,MXD,-1,0,<Missing EXTERNAL declaration in CALL to $N>);[3322]
$FERR (%,WNA,21,0,<Wrong number of arguments in call to $N>) ;[4207]
$FERR (%,NFL,21,0,<Argument to SECNDS not floating point>) ;[4207]
IF10,<
$FERR (?,CRP,21,117,<Can't return pages 600:677 after call to SORT>)
> ; End of IF10
IF20,<
$FERR (?,NSS,21,118,<No free section available for SORT>) ;[3205]
$FERR (?,CFS,21,119,<Can't find SYS:SORT.EXE - $J>) ;[3205]
$FERR (?,CGS,21,120,<Can't get SYS:SORT.EXE - $J>) ;[3205]
> ; End of IF20
$FERR (%,CPP,21,121,<Can't preallocate pages 600:677 for SORT>) ;[3362]
$FERR (?,IPN,21,122,Illegal page number $O,<T1>) ;[3362]
$FERR (?,SNH,-1,0,<Internal FOROTS error>) ;[3205]
IF20,< ;[3205]
$FERR (?,IJE,-1,0,<Internal FOROTS JSYS error - $J>) ;[3205]
$FERR (%,DMA,21,126,<$N: Must give lower and upper bounds to dump in non-zero section>) ;[4110]
> ; End of IF20 ;[3205]
$FERR (?,CCS,21,123,<Not enough memory for creating character stack>) ;[4101]
$FERR (?,ECS,21,124,<Not enough memory for expanding character stack>) ;[4101]
$FERR (?,ALZ,21,125,<$N: Argument less than or equal to zero>) ;[4101]
PRGEND
TITLE IIABS -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIABS
EXTERN IABS.
IIABS=<IABS.+0>
PRGEND
TITLE JIABS -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIABS
EXTERN IABS.
JIABS=<IABS.+0>
PRGEND
TITLE IINT -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IINT
EXTERN INT.
IINT=<INT.+0>
PRGEND
TITLE JINT -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JINT
EXTERN INT.
JINT=<INT.+0>
PRGEND
TITLE IIDINT -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIDINT
EXTERN IDINT.
IIDINT=<IDINT.+0>
PRGEND
TITLE JIDINT -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIDINT
EXTERN IDINT.
JIDINT=<IDINT.+0>
PRGEND
TITLE ININT -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY ININT
EXTERN NINT.
ININT=<NINT.+0>
PRGEND
TITLE JNINT -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JNINT
EXTERN NINT.
JNINT=<NINT.+0>
PRGEND
TITLE IIDNNT -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIDNNT
EXTERN IDNIN.
IIDNNT=<IDNIN.+0>
PRGEND
TITLE JIDNNT -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIDNNT
EXTERN IDNIN.
JIDNNT=<IDNIN.+0>
PRGEND
TITLE FLOATI -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY FLOATI
EXTERN FLOAT.
FLOATI=<FLOAT.+0>
PRGEND
TITLE FLOATJ -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY FLOATJ
EXTERN FLOAT.
FLOATJ=<FLOAT.+0>
PRGEND
TITLE IIFIX -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIFIX
EXTERN IFIX.
IIFIX=<IFIX.+0>
PRGEND
TITLE JIFIX -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIFIX
EXTERN IFIX.
JIFIX=<IFIX.+0>
PRGEND
TITLE DFLOTI -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY DFLOTI
EXTERN DFLOT.
DFLOTI=<DFLOT.+0>
PRGEND
TITLE DFLOTJ -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY DFLOTJ
EXTERN DFLOT.
DFLOTJ=<DFLOT.+0>
PRGEND
TITLE IMAX0 -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IMAX0
EXTERN MAX0.
IMAX0=<MAX0.+0>
PRGEND
TITLE JMAX0 -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JMAX0
EXTERN MAX0.
JMAX0=<MAX0.+0>
PRGEND
TITLE IMAX1 -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IMAX1
EXTERN MAX1.
IMAX1=<MAX1.+0>
PRGEND
TITLE JMAX1 -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JMAX1
EXTERN MAX1.
JMAX1=<MAX1.+0>
PRGEND
TITLE AIMAX0 -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY AIMAX0
EXTERN AMAX0.
AIMAX0=<AMAX0.+0>
PRGEND
TITLE AJMAX0 -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY AJMAX0
EXTERN AMAX0.
AJMAX0=<AMAX0.+0>
PRGEND
TITLE IMIN0 -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IMIN0
EXTERN MIN0.
IMIN0=<MIN0.+0>
PRGEND
TITLE JMIN0 -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JMIN0
EXTERN MIN0.
JMIN0=<MIN0.+0>
PRGEND
TITLE IMIN1 -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IMIN1
EXTERN MIN1.
IMIN1=<MIN1.+0>
PRGEND
TITLE JMIN1 -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JMIN1
EXTERN MIN1.
JMIN1=<MIN1.+0>
PRGEND
TITLE AIMIN0 -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY AIMIN0
EXTERN AMIN0.
AIMIN0=<AMIN0.+0>
PRGEND
TITLE AJMIN0 -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY AJMIN0
EXTERN AMIN0.
AJMIN0=<AMIN0.+0>
PRGEND
TITLE IIDIM -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIDIM
EXTERN IDIM.
IIDIM=<IDIM.+0>
PRGEND
TITLE JIDIM -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIDIM
EXTERN IDIM.
JIDIM=<IDIM.+0>
PRGEND
TITLE IMOD -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IMOD
EXTERN MOD.
IMOD=<MOD.+0>
PRGEND
TITLE JMOD -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JMOD
EXTERN MOD.
JMOD=<MOD.+0>
PRGEND
TITLE IISIGN -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IISIGN
EXTERN ISIGN.
IISIGN=<ISIGN.+0>
PRGEND
TITLE JISIGN -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JISIGN
EXTERN ISIGN.
JISIGN=<ISIGN.+0>
PRGEND
TITLE BITEST -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY BITEST
EXTERN BTEST.
BITEST=<BTEST.+0>
PRGEND
TITLE BJTEST -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY BJTEST
EXTERN BTEST.
BJTEST=<BTEST.+0>
PRGEND
TITLE IIAND -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIAND
EXTERN IAND.
IIAND=<IAND.+0>
PRGEND
TITLE JIAND -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIAND
EXTERN IAND.
JIAND=<IAND.+0>
PRGEND
TITLE IIBCLR -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIBCLR
EXTERN IBCLR.
IIBCLR=<IBCLR.+0>
PRGEND
TITLE JIBCLR -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIBCLR
EXTERN IBCLR.
JIBCLR=<IBCLR.+0>
PRGEND
TITLE IIBITS -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIBITS
EXTERN IBITS.
IIBITS=<IBITS.+0>
PRGEND
TITLE JIBITS -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIBITS
EXTERN IBITS.
JIBITS=<IBITS.+0>
PRGEND
TITLE IIBSET -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIBSET
EXTERN IBSET.
IIBSET=<IBSET.+0>
PRGEND
TITLE JIBSET -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIBSET
EXTERN IBSET.
JIBSET=<IBSET.+0>
PRGEND
TITLE IIEOR -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIEOR
EXTERN IEOR.
IIEOR=<IEOR.+0>
PRGEND
TITLE JIEOR -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIEOR
EXTERN IEOR.
JIEOR=<IEOR.+0>
PRGEND
TITLE IIOR -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IIOR
EXTERN IOR.
IIOR=<IOR.+0>
PRGEND
TITLE JIOR -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JIOR
EXTERN IOR.
JIOR=<IOR.+0>
PRGEND
TITLE IISHFT -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IISHFT
EXTERN ISHFT.
IISHFT=<ISHFT.+0>
PRGEND
TITLE JISHFT -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JISHFT
EXTERN ISHFT.
JISHFT=<ISHFT.+0>
PRGEND
TITLE INOT -- VAX FORTRAN INTEGER*2 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*2 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY INOT
EXTERN NOT.
INOT=<NOT.+0>
PRGEND
TITLE JNOT -- VAX FORTRAN INTEGER*4 FUNCTION NAME
SUBTTL R. Meyers/RVM 12-Sep-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4162.
;
; Provide the VAX-11 FORTRAN INTEGER*4 function name as a synonym of
; the FORTRAN-10/20 INTEGER function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY JNOT
EXTERN NOT.
JNOT=<NOT.+0>
PRGEND
TITLE BTEST -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY BTEST
EXTERN BTEST.
BTEST=<BTEST.+0>
PRGEND
TITLE IAND -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IAND
EXTERN IAND.
IAND=<IAND.+0>
PRGEND
TITLE IBCLR -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IBCLR
EXTERN IBCLR.
IBCLR=<IBCLR.+0>
PRGEND
TITLE IBITS -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IBITS
EXTERN IBITS.
IBITS=<IBITS.+0>
PRGEND
TITLE IBSET -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IBSET
EXTERN IBSET.
IBSET=<IBSET.+0>
PRGEND
TITLE IEOR -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IEOR
EXTERN IEOR.
IEOR=<IEOR.+0>
PRGEND
TITLE IOR -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY IOR
EXTERN IOR.
IOR=<IOR.+0>
PRGEND
TITLE ISHFT -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY ISHFT
EXTERN ISHFT.
ISHFT=<ISHFT.+0>
PRGEND
TITLE ISHFTC -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY ISHFTC
EXTERN ISHFC.
ISHFTC=<ISHFC.+0>
PRGEND
TITLE NOT -- Undotted Function name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit function.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY NOT
EXTERN NOT.
NOT=<NOT.+0>
PRGEND
TITLE MVBITS -- Undotted Subroutine name
SUBTTL R. Meyers/RVM 2-Nov-84
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;+
; Created in edit 4163.
;
; Provide the undottend name of the bit subroutine.
;
;-
SEARCH MTHPRM
NOSYM
ENTRY MVBITS
EXTERN MVBIT.
MVBITS=<MVBIT.+0>
PRGEND
TITLE BTEST. - Test a Bit for Being On
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This function is a logical function. The ith bit of argument
; 'n' is tested. If it is 1, the value of this function is
; .TRUE.; if it is 0, the value of the function is .FALSE.
;
; CALLING SEQUENCE:
;
; FLAG = BTEST(N, I)
;
; INPUT PARAMETERS:
;
; N An INTEGER containing the bit to be tested.
; I An INTEGER that is the bit position of the bit to be
; tested (0 is the rightmost bit).
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; .TRUE. If the bit tested was one.
; .FALSE. If the bit tested was zero.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (BTEST.) ;Entry to BTEST function
MOVE T1,@1(L) ;Get second argument
MOVEI T0,1 ;Get a one
LSH T0,(T1) ;Make up mask
TDNN T0,@0(L) ;Is the bit turned on?
TDZA T0,T0 ;No--return .FALSE.
SETO T0, ;Yes--return .TRUE.
POPJ P, ;Return
PRGEND
TITLE IAND. - Bitwise AND
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function performs the bitwise AND of its two
; INTEGER arguments.
;
; CALLING SEQUENCE:
;
; IANS = IAND(M, N)
;
; INPUT PARAMETERS:
;
; M An INTEGER to be AND'ed
; N An INTEGER to be AND'ed
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The bitwise and of the two arguments as an INTEGER.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (IAND.) ;Entry to IAND function
MOVE T0,@0(L) ;Get first argument
AND T0,@1(L) ;AND with second argument
POPJ P, ;Return
PRGEND
TITLE IBCLR. - Clear a bit
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function returns a copy of argument N with the
; ith bit set to zero.
;
; CALLING SEQUENCE:
;
; IANS = IBCLR(N, I)
;
; INPUT PARAMETERS:
;
; N An INTEGER containing the bit to be cleared.
; I An INTEGER that is the bit position of the bit to be
; cleared (0 is the rightmost bit).
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; A copy of argument N with bit I set to zero.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (IBCLR.) ;Entry to IBCLR function
MOVE T1,@1(L) ;Get second argument
MOVEI T0,1 ;Get a one
LSH T0,(T1) ;Make up mask
ANDCA T0,@0(L) ;Get first argument with bit turned off
POPJ P, ;Return
PRGEND
TITLE IBITS. - Extract a bit field
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function extracts a subfield of 'LEN' bits from
; 'M' starting with bit position 'I' and extending left for
; 'LEN'. The result field is right justified and the remaining
; bits are set to zero. The value of I must be greater than or
; equal to zero, and less than 35. The value of I+LEN must be
; less than or equal to 36.
;
; CALLING SEQUENCE:
;
; IANS = IBITS(M, I, LEN)
;
; INPUT PARAMETERS:
;
; M An INTEGER, the source of the bitfield.
; I An INTEGER, the starting position of the bitfield (the
; leftmost bit).
; LEN An INTEGER, the length of the bitfield.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The bitfield, right justified, as an INTEGER.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (IBITS.) ;Entry to IBITS function
MOVE T0,@1(L) ;Get argument 2 (The start of bit field)
DPB T0,[POINT 6,PTR,5] ;Store in pointer
MOVE T0,@2(L) ;Get argument 3 (The size of the bit field)
DPB T0,[POINT 6,PTR,11] ;Store in pointer
LDB T0,PTR ;Get bit field
POPJ P, ;Return
LIT
SEGMENT DATA
PTR: POINT .-.,@0(L),.-. ;Pointer to first argument
PRGEND
TITLE IBSET. - Set a bit
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function returns a copy of its first argument
; with a bit to one.
;
; CALLING SEQUENCE:
;
; IANS = IBSET(N, I)
;
; INPUT PARAMETERS:
;
; N An INTEGER containing the source bitstring.
; I An INTEGER that is the bit position of the bit to be
; set (0 is the rightmost bit).
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; A copy of the first argument with the I'th bit set to one.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (IBSET.) ;Entry to IBSET function
MOVE T1,@1(L) ;Get second argument
MOVEI T0,1 ;Get a one
LSH T0,(T1) ;Make up mask
IOR T0,@0(L) ;Get first argument with specified bit on
POPJ P, ;Return
PRGEND
TITLE IEOR. - Bitwise Exclusive OR
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function performs the bitwise exclusive OR of its
; two INTEGER arguments.
;
; CALLING SEQUENCE:
;
; IANS = IEOR(M, N)
;
; INPUT PARAMETERS:
;
; M An INTEGER to be exclusive OR'ed
; N An INTEGER to be exclusive OR'ed
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The bitwise exclusive OR of the two arguments as an INTEGER.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (IEOR.) ;Entry to IEOR function
MOVE T0,@0(L) ;Get first argument
XOR T0,@1(L) ;Exclusive OR with second argument
POPJ P, ;Return
PRGEND
TITLE IOR. - Bitwise Inclusive OR
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function performs the bitwise inclusive OR of its
; two INTEGER arguments.
;
; CALLING SEQUENCE:
;
; IANS = IOR(M, N)
;
; INPUT PARAMETERS:
;
; M An INTEGER to be inclusive OR'ed
; N An INTEGER to be inclusive OR'ed
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The bitwise inclusive OR of the two arguments as an INTEGER.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (IOR.) ;Entry to IOR function
MOVE T0,@0(L) ;Get first argument
IOR T0,@1(L) ;Inclusive OR with second argument
POPJ P, ;Return
PRGEND
TITLE ISHFT. - Logical Shift
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function performs a LOGICAL shift of 'K' places.
;
; CALLING SEQUENCE:
;
; IANS = ISHFT(M, K)
;
; INPUT PARAMETERS:
;
; M The INTEGER to be shifted.
; K The INTEGER number of places to shift.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; 'M' logically shifted by 'K' bits.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (ISHFT.) ;Entry to ISHFT function
MOVE T0,@0(L) ;Get first argument
MOVE T1,@1(L) ;Get second argument
LSH T0,(T1) ;Shift
POPJ P, ;Return
PRGEND
TITLE ISHFC. - Logical Shift
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function circularly shifts the rightmost 'IC'
; bits of its argument 'K' places; i.e., the bits shifted out
; of one end are shifted into the opposite end. No bits are
; lost. The unshifted bits of the result are the same as the
; unshifted bits of the argument 'M'. The absolute value of the
; argument 'K' must be less than or equal to 'IC'. The argument
; 'IC' must be greater than zero and less than or equal to 36.
; (This function is known by the FORTRAN INTRISIC name 'ISHFTC'.)
;
; CALLING SEQUENCE:
;
; IANS = ISHFTC(M, K, IC)
;
; INPUT PARAMETERS:
;
; M The INTEGER to rotate.
; K The INTEGER number of places to rotate.
; IC The INTEGER size of the bitfield to rotate.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The rightmost 'IC' bits of 'M' logically rotated by 'K' bits.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
; T0 == argument
; T1 == shift factor
; T2 == byte to rotate
; T3 == byte to rotate
HELLO (ISHFC.) ;Entry to ISHFTC function
DMOVEM T2,SAVE23 ;Save T2 and T3
PUSH P,T4 ;[4206] Save T4
MOVE T0,@0(L) ;Get argument 1 (the bitstring)
MOVE T1,@1(L) ;Get argument 2 (the shift factor)
MOVE T2,@2(L) ;Get argument 3 (the byte size)
DPB T2,[POINT 6,PTR,11] ;Store byte size in pointer
LDB T3,PTR ;Get byte to be rotated
MOVE T2,T3 ;Get copy of byte
LSH T3,(T1) ;Shift to get high order part of rotated byte
MOVE T4,@2(L) ;[4206] Byte size
SKIPGE T1 ;[4206] If shift factor was negative,
MOVN T4,T4 ;[4206] Then negate byte size, make it positive
SUB T1,T4 ;[4206] Get shift factor used to form low order part
LSH T2,(T1) ;Shift to get low order part of rotated byte
OR T3,T2 ;Form rotated result
DPB T3,PTR ;Deposit in copy of original bitstring
POP P,T4 ;[4206] Restore T4
DMOVE T2,SAVE23 ;Restore T2 and T3
POPJ P, ;Return
LIT
SEGMENT DATA
PTR: POINT .-.,T0,35 ;Pointer to copy of first argument
SAVE23: BLOCK 2 ;Local storage for T2 and T3
PRGEND
TITLE MVBIT. - Extract a bit field
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This subroutine moves 'LEN' bits from positions 'I' through
; I+LEN-1 of argument 'M' to positions J through J+LEN-1 of
; argument 'N'. The portion of argument 'N' not affected by
; the movement of bits remians unchanged. All arguments are
; INTEGER expressions except 'N' must be a variable or array
; element. Arguments 'M' and 'N' are permitted to be the same
; numeric storage unit. The values of I+LEN and of J+LEN must
; be less than or equal to 36.
;
; CALLING SEQUENCE:
;
; CALL MVBITS(M, I, LEN, N, J)
;
; INPUT PARAMETERS:
;
; M The source of the bitstring to be transferred.
; I The bit position of the source bitstring in M.
; LEN The number of bits.
; N The destination (this word will have the bitsting
; inserted.
; J The bit position of the source bitstring in N.
;
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; None
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (MVBIT.) ;[4163] Entry to MVBITS function
MOVE T0,@1(L) ;Get argument 2 (Start of source field)
DPB T0,[POINT 6,SPTR,5] ;Store in pointer to source
MOVE T0,@4(L) ;Get argument 5 (Start of destination field)
DPB T0,[POINT 6,DPTR,5] ;Store in pointer to destination
MOVE T0,@2(L) ;Get argument 3 (The size of the bit fields)
DPB T0,[POINT 6,SPTR,11] ;Store in pointer to source
DPB T0,[POINT 6,DPTR,11] ;Store in pointer to destination
LDB T0,SPTR ;Get bit field from source
DPB T0,DPTR ;Store bit field in destination
POPJ P, ;Return
LIT
SEGMENT DATA
SPTR: POINT .-.,@0(L),.-. ;Pointer to first argument (source)
DPTR: POINT .-.,@3(L),.-. ;Pointer to fourth argument (destination)
PRGEND
TITLE NOT. - Bitwise NOT
SUBTTL Randall Meyers/RVM 3-Oct-83
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1984, 1987
;ALL RIGHTS RESERVED.
;++ [4074] Create this routine
; FUNCTIONAL DESCRIPTION:
;
; This INTEGER function performs the bitwise logical complement
; of its INTEGER argument.
;
; CALLING SEQUENCE:
;
; IANS = NOT(M)
;
; INPUT PARAMETERS:
;
; M An INTEGER to be complemented.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The bitwise logical complement of the argument.
;
; SIDE EFFECTS:
;
; None
;
;--
SEARCH MTHPRM,FORPRM
FSRCH
SEGMENT CODE
HELLO (NOT.) ;Entry to NOT function
SETCM T0,@0(L) ;Complement argument
POPJ P, ;Return
PRGEND
SEARCH MTHPRM,FORPRM
TV FORSYM SYMBOL TABLE MANIPULATION ROUTINES
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974, 1987
;ALL RIGHTS RESERVED.
;[4152] NEW
;++
; FUNCTIONAL DESCRIPTION:
;
; Converts an IOWD or pointer to a symbol table (usually found
; in .JBSYM of FOROTS' section) into an address and count in
; T1 and T2.
;
; CALLING SEQUENCE:
;
; PUSHJ P,%SVCNV
;
; INPUT PARAMETERS:
;
; Symbol table IOWD or address of symbol vector in T1
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; Address of symbol table in T1
; Length of symbol table in T2
;
; IMPLICIT OUTPUTS:
;
; None
;
; SIDE EFFECTS:
;
; None
;
;--
SEGMENT CODE
ENTRY %SVCNV
IF20,<
%SVCNV: TLNE T1,777000 ;[4174] IF ANY OF THESE BITS ARE SET
JRST STIOWD ;[4174] ASSUME IT'S AN IOWD
MOVE T3,.STLEN(T1) ;GET SYMBOL VECTOR LENGTH FOR SEARCHING IT
SUBI T3,1 ;MINUS THE COUNT WORD
ADDI T1,1 ;POINT TO 1ST ENTRY
SVCLP: LDB T2,[POINTR (.STDAT(T1),ST%TYP)] ;GET SYMBOL TYPE
CAIN T2,.R50D ;THE DEFINED SYMBOL TABLE?
JRST SVCDON ;YES. GO PICK UP ADDRESS AND LENGTH
ADDI T1,3 ;NO. GO TRY AGAIN
SUBI T3,3 ;DECREMENT COUNT
JUMPG T3,SVCLP ;LOOP IF MORE
SETZB T1,T2 ;RETURN NO SYMBOL TABLE IF NO MATCH
POPJ P,
SVCDON: LDB T2,[POINTR (.STDAT(T1),ST%LEN)] ;GET SYMBOL TABLE SIZE
MOVE T1,.STPTR(T1) ;AND ADDRESS
POPJ P,
> ;END IF20
IF10,<
%SVCNV:
> ;END IF10
STIOWD: HLRO T2,T1 ;[4174] GET NEGATIVE SIZE IN T2
MOVM T2,T2 ;GET POSITIVE
XMOVEI T1,(T1) ;GET ADDRESS OF SYMBOL TABLE
POPJ P,
PRGEND
SEARCH MTHPRM,FORPRM
TV SECNDS Returns seconds since midnight
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1985, 1987
;ALL RIGHTS RESERVED.
;[4207] NEW
;++
; FUNCTIONAL DESCRIPTION:
;
; User-callable routine which returns the number of seconds since
; midnight in single precision floating point, minus the argument
; passed to it.
;
; CALLING SEQUENCE:
;
; X = SECNDS( Y )
;
; Where X and Y are single precision floating point.
;
; INPUT PARAMETERS:
;
; Y (Shown above) A floating point number to be subtracted
; from the number of seconds from midnight.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; Function return value is in T0.
;
; IMPLICIT OUTPUTS:
;
; None
;
; FUNCTION VALUE:
;
; The number of seconds since midnight in floating point format.
;
; SIDE EFFECTS:
;
; None
;
;--
SEGMENT CODE
ENTRY SECNDS
HELLO (SECNDS)
;Check for correct number of arguments. Only 1 allowed.
HLRZ T0,-1(L) ;Get count of arguments
CAIE T0,-1 ;If -1 (one argument),
$FCALL WNA ;Wrong number of arguments
;Check argument to insure that it's floating point or octal.
LDB T0,[POINTR (0(L),ARGTYP)] ;Get argument type
CAIN T0,TP%SPR ;.NE. floating point?
JRST OK ;Yes, go around
CAIE T0,TP%SPO ;Argument single precision octal?
$FCALL NFL ;Argument isn't floating or octal
OK: SKIPE [FLG77.##] ;Is /FLAG:ANSI on?
$FCALL CFX ;Yes; give warning message, this isn't ANSI
;Calculate milliseconds since midnight
IF10,<
MSTIME T0, ;Milliseconds since midnight
> ;END IF10
IF20,<
PUSH P,T2 ; Save registers
PUSH P,T3
PUSH P,T4
GTAD% ;Get internal time
;Convert <days,,fraction-of-days> to milliseconds since midnight
HRLZ T0,T1 ;Get fractional days, put in left half
LSH T0,-1 ;Move away from sign bit
MUL T0,[<^D24>*<^D60>*<^D60>*<^D1000>]
;Compute msec since midnight
;Adjust for local time zone (from GMT) and daylight savings time
;The general algorithm is similar to that in TIME. If this must be
;changed, them TIME probably ought to be changed also.
SETO T2, ;Want current time
SETZ T4, ;Use local time
ODCNV% ;JSYS, get local zone and daylight indicator
HLR T3,T4 ;Bits indicating time zone, daylight savings...
HRROI T2,<^-<(IC%TMZ)>> ;Mask -1,,777700 to isolate time zone
TDZ T3,T2 ;Get time zone bits (12-17) only
TRNE T3,40 ;Time zone negative (-12 to +12)?
TDO T3,T2 ;Yes, propogate its sign bit
TXNE T4,IC%ADS ;Is Daylight Savings in effect?
SUBI T3,1 ;Yes, subtract one hour
IMUL T3,[<^D60>*<^D60>*<^D1000>]
;Convert hours to milliseconds
SUB T0,T3 ;Add in local time/daylight savings factors
SKIPGE T0 ;Seconds go negative?
ADD T0,[<^D24>*<^D60>*<^D60>*<^D1000>]
; yes, add in a day's milliseconds to get
; mod 24 hrs.
POP P,T4 ;Restore registers
POP P,T3
POP P,T2
> ;END IF20
FLTR T0,T0 ;Convert integer milliseconds to floating point
FDVR T0,[1000.0] ;Convert milliseconds to seconds
FSBR T0,@0(16) ;Subtract off user's argument
POPJ P, ;Return to caller
PRGEND ;End of SECNDS
TITLE DUMON.
;++ ;[5024][4240]New Routine
; THIS MODULE IS LINKED IF THE FLAGGER IS NOT INVOKED
;--
ENTRY FLGON.
FLGON.==0
PRGEND ;End of DUMON.
END ;End of FORMSC.MAC