.MCALL .MODULE
.MODULE LINK,VERSION=45,COMMENT= AUDIT=YES,MODNAME=LINK0,GLOBAL=.LINK0
; Copyright (c) 1998 by Mentec, Inc., Nashua, NH.
; All rights reserved
;
; This software is furnished under a license for use only on a
; single computer system and may be copied only 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 except for use on such
; system and to one who agrees to these license terms. Title
; to and ownership of the software shall at all times remain
; in Mentec, Inc.
;
; The information in this document is subject to change without
; notice and should not be construed as a commitment by Digital
; Equipment Corporation, or Mentec, Inc.
;
; Digital and Mentec assume no responsibility for the use or
; reliability of its software on equipment which is not supplied
; by Digital or Mentec, and listed in the Software Product
; Description.
.AUDIT .LINK0,.LINK1,.LINK2,.LINK3,.LINK4
.AUDIT .LINK5,.LINK6,.LINK7,.LINK8,.LNKEM
.SBTTL ROOT SEGMENT
.ENABL GBL
;CER,MAS,SHD,DBB,JFW
.IIF NDF LDA$ LDA$= 1 ;TURN ON LDA FEATURE
.IIF NDF REL$ REL$= 1 ;TURN ON REL OUTPUT FEATURE
.IIF NDF EIS$ EIS$= 0 ;SAY NO EIS AVAILABLE
.IIF NDF RST$ RST$= 0 ;TURN OFF RSTS/E SAV PARAMETER FUNCTION ;MAS17
; EDIT HISTORY
; COMMENT IMPURE AREA USES ;MAS06
; XM OVERLAYS ;MAS15
; ADD RSTS/E SAV PARAMETER FUNCTION ;MAS17
; ADD /Q SWITCH ;MAS20
; FIX SEGMENT SELECTION FOR LAYERED REFERENCES TO LIBRARY MODULES ;MAS23
; ADD PROTECTION VIOLATION ERROR ON .ENTER AND .CLOSE ;MAS24
; SAVE ADDR OF /V SEGMENTS IN OVERLAY HANDLER TABLE FOR USE BY SIPP.SAV ;MAS28
; FIX NEWBLK TO READ FORMATTED BINARY BLOCKS CORRECTLY ;SHD01
; FIX LOOKUP ROUTINES TO WORK WITH DUPLICATE SYMBOLS ;DBB01
; ADD GLOBAL LOCATIONS FOR DUPLICATE LIBRARY MODULE PROCESSING ;DBB02
; ADD GLOBAL CROSS REFERENCE ;DBB03
; CLEAN UP END-OF-FILE PROCESSING AND STACK MAINTENANCE ;DBB04
; REORGANIZE OVERLAY SCHEME ;DBB05
; STANDARDIZE PROGRAMMED REQUESTS ;DBB06
; ALLOW VALUES ON /V IN FIRST LINE ;DBB07
; ADD I-D SPACE VARIABLES ;LB
; ADD JSX settings ;JFW
.SBTTL MISCELLANEOUS MACRO DEFINITIONS
TAB== 11
RECSIZ==128. ;MAXIMUM SIZE OF A FORMATTED BINARY RECORD IN BYTES
;DOES NOT COUNT LEADING 1ST WORD OF 1 OR THE CHECKSUM BYTE
QNUM= 8. ;NUMBER OF /Q PSECTS ALLOWED ;MAS20
.MCALL .CLOSE,.SRESET,.RCTRLO,.PRINT,.READW ;DBB06
.IF Z EIS$
.MCALL SOB
.ENDC
.LIBRARY "SRC:SYSTEM"
.MCALL .JSWDF .JSXDF .SYCDF
.JSWDF
.JSXDF
.SYCDF
.MACRO ERROR$ ERNB,SEV,ETYP,REG ;THIS IS SPECIAL FOR ROOT
.IF NB REG
.IIF DIF , MOV REG,R0
.IFF
.IIF IDN , CLR R0
.ENDC
JSR R5,ERROVR ;ENTRY WHEN CALLED FROM ROOT
.BYTE ERNB, SEV*100!ETYP
.ENDM
.SBTTL - LINK FLOW CHART FOR NEW OVERLAY STRUCTURE
;+
; The following chart has the general flow of code for the RT-11 V05
; LINKer, and a brief description of the function of each segment of
; code. LINK0 is the root, all other modules are separate overlays.
;
;
;
; LINK0-> !-----------------------! !-----------------------!
; !START:: !<----------!RESTRT:: !
; !entry point to LINK; ! !reset control O !
; !root code ! !-----------------------!
; !-----------------------! .
; ! /!\
; \!/ !
; " !
; LINK1-> !-----------------------! !
; !START1:: ! !
; !initialization code; ! !
; !CSI,FETCH,SAVESTATUS; ! !
; !switch processing ! !
; !-----------------------! !
; ! !
; \!/ !
; " !
; LINK2-> !-----------------------! !
; !INIT:: ! !
; !buffer initialization; ! !
; !. ABS. psect,symbol ! !
; !table, and overlay ! !
; !handler setup; switch ! !
; !prompts ! !
; !-----------------------! !
; ! !
; \!/ !
; " !
; LINK3-> !-----------------------! !
; !PASS1:: ! !
; !GSD processing ! !
; !-----------------------! !
; ! !
; \!/ !
; " !
; LINK4-> !-----------------------! !
; !ENDP1:: ! !
; !flag overlay table ! !
; !symbols; do . VIR.; ! !
; !/E extend section; ! !
; !initialization for map;! !
; !/Q, /U, /Y, /V, /H ! !
; !switch processing ! !
; !-----------------------! !
; ! !
; \!/ !
; " !
; LINK5-> !-----------------------! .
; !RESOLV:: ! /!\
; !resolve section starts;! !
; !output map ! !
; !-----------------------! !
; ! !
; \!/ !
; " !
; LINK6-> !-----------------------! !
; !DOCASH:: ! !
; !cache buffer and syscom!------>! !
; !setup; pass2 init. ! ! !
; !-----------------------! ! !
; ! ! !
; \!/ ! no !
; " ! !
; !-----------------------! ! /O !
; !PA2INT:: ! ! !
; !overlay initialization;! ! or !
; !only done with /O or /V! ! !
; !-----------------------! ! /V !
; ! ! !
; \!/ ! s !
; " ! w !
; LINK7-> !-----------------------! ! i !
; !PA2OVL:: ! ! t !
; !only with /O or /V; ! ! c !
; !create overlay tables ! ! h !
; !-----------------------! ! !
; ! ! !
; \!/ ! !
; " ! !
; !-----------------------! ! !
; !PASS2:: !<------! !
; !create output file; ! !
; !do TXT and RLD blocks; ! !
; !output cref temp file ! !
; !update syscom area; ! !
; !write cache buffers; ! !
; !switch processing ! !
; !-----------------------! !
; ! !
; \!/ !
; " !
; LINK8-> !-----------------------! !
; !GBLCRF:: output global! !
; !cref in map file if /N;!---------------------->!
; !close files !
; !-----------------------!
;
; LNKEM-> !-----------------------!
; !ERROVR:: !
; !entered by any overlay !
; !(or root), via root !
; !-----------------------!
;
; LNKLB1 is an object library module that contains SAV file I/O
; routines that are duplicated in modules LINK6 and LINK7.
;-
.SBTTL - IMPURE TABLE
;+
; IMPURE AREA IN LINK ROOT CODE
; AVAILABILITY FOR FUTURE USE OF LOCATIONS
;
; The accuracy of this table is not guaranteed. Any new uses of impure
; root locations in LINK must be carefully studied. This table is to be
; used only as a guide.
;
; All locations are one (1) word in length, unless otherwise specified.
;
; KEY:
;
; SET= OVERLAY SETS/USES LOCATION
; USES= OVERLAY ONLY USES LOCATION
; CLR= OVERLAY ONLY CLEARS LOCATION
; SAV= MUST BE SAVED FOR USE IN ANOTHER OVERLAY
; (N)= LENGTH IN WORDS
; -= NOT ACCESSED BY ROOT
; ?= LOCATION MAY BE AVAILABLE FOR USE IN OVERLAY
; LOCATION SEGMENT
; LINK1
; LINK0 ;END2 LINK2 LINK3 LINK4 LINK5 LINK6 LINK7
;
; BASE - ? ? SET SAV SAV SAV SET
; BEGBLK(4) - SET USED USED SAV USED USED USED
; CKSUM - SET ? ? ? SET ? SET
; CSECT - ? ? SET ? SET ? ?
; EIB512 - ? ? ? SET USED ? ?
; ENDLML - SET SAV USED ? ? SET USED
; ENDRT - CLR;USED ? SET ? ? SET SAV
; ESWNAM(2) - SET USED SAV USED USED ? SET
; ESWVAL - SET USED SAV USED USED SET SET
; ESZRBA - ? ? SET ? ? SET USED
; FILPT1 - SET;USED USED USED ? ? ? USED
; HGHLIM - ? ? SET USED SET USED USED
; HIPHYS - SET USED ? SET SET SET SET
; HSWVAL - SET SAV SAV USED ? SET USED
; IDENT(2) - SET? ? USED USED ? ? ?
; KSWVAL - SET SAV SAV SAV SAV USED ?
; LIBNB(1/2) - ? ? SET ? ? SET SET
; LMLPTR - SET ? SET ? ? SET SET
; LOC66 - SET SAV SAV SAV SAV USED ?
; MBLK - ? SET ? ? ? ? ?
; MBPTR - ? SET ? SET SET ? SET
; MODNAM(2) - SET? ? USED USED ? SET SET
; NUMCOL(1/2) - SET SAV SAV USED USED SET SET
; ODBLK(5) USED SET? USED ? USED ? USED USED
; OVCOUN - SET SAV SAV SET SAV USED ?
; OVSPTR - SET ? ? ? SET SET USED
; PA2LML - SET USED SAV USED SAV USED ?
; PAS1.5(1/2) SET ? ? SET SET SAV USED SET
; QSWVAL - SET USED SAV USED ? ? ?
; REGION - SET SET ? SET SET SET USED
; RSTSAV(5)* - SET SAV SAV SAV USED ? ?
; SEGBAS - CLR ? SET SET SET ? SET
; SEGBLK - CLR ? ? SET SET SET SET
; STKBLK(5) - SET USED SAV SAV SAV USED USED
; STLML - SET ? SET SET ? SET USED
; SVLML - ? ? SET/L ? ? ? ?
; SWITCH - SET USED USED USED USED USED USED
; SW.LML - SET SAV USED ? ? ? ?
; SYEN0 - ? SET USED USED USED SAV USED
; TEMP(2) - USED USED ? ? ? ? USED
; TXTBLK(RECSIZ/2) - ? ? SET SET SET SET USED
; TXTLEN - SET USED SET ? ? SET SET
; UNDLST - ? SET USED SAV USED ? ?
; USWNAM(2) - SET USED SAV USED ? ? ?
; USWVAL - SET SAV SAV USED ? ? ?
; VIRSIZ - ? ? ? SET SET SET SET
; WDBCNT - SET SAV SAV SAV SAV SET SET
; YSWNAM(2) - SET USED SAV USED SET SET SET
; YSWVAL - SET SAV SAV USED ? ? ?
;
; * RSTSAV is only present when RST$=1
;-
;+
; NOTES ON I-D SPACE CODING
;
; THE /J SWITCH TURNS ON SEPARATED I-D SPACE PROCESSING. IF YOU DO NOT
; USE /J, LINK WORKS AS IT DID BEFORE /J EXISTED - ALL THE
; VARIABLES HAVE THE SAME MEANING AS THEY DID BEFORE /J. WITHOUT /J,
; ALL CODE IS ASSUMED TO BE IN I-SPACE.
;
; IF YOU USE /J, THE EXISTING VARIABLES WILL AGAIN BE USED FOR THE
; I-SPACE PROCESSING. WHEN NEW VARIABLES CORRESPONDING TO EXISTING
; VARIABLES HAVE BEEN ADDED, THEY HAVE BEEN ADDED FOR D-SPACE.
; THERE ARE EXCEPTIONS:
;
; EXCEPTIONS:
; NON I-D SPACE I-D SPACE MEANING
;
; BITBAD START OF BITMAP - START OF D-SPACE BITMAP - ALSO
; LOCATED IN BLOCK 0 LOCATED IN BLOCK 0
;-
.SBTTL - ASECT THE RESTART BIT OF JSW
.ASECT
.=$JSX
; .WORD VBGEX$
.WORD ALL64$!VBGEX$
.=$JSW
.WORD RSTRT$
.SBTTL - INTERNAL VARIABLES FOR LINKER
.PSECT DPURE,D ;MAS20+
.IF EQ RST$ ;SHD03+
LMLSIZ:: 252 ;DEFAULT NUMBER OF LIBRARY MOD LIST ENTRIES
; EACH ENTRY IS 6 BYTES LONG
.IFF
LMLSIZ:: 525 ;RSTS NEEDS MUCH MORE FOR SYSTEM BUILDS
.ENDC ;SHD03-
LINPPG::.WORD 60. ;NUMBER OF LINES PER PAGE FOR MAP
QSWNUM::.BYTE QNUM ;NUMBER OF /Q PSECTS. CAN BE PATCHED
.BYTE 0 ; AND RAISED UP TO 177 OCTAL ;MAS20-
NOBOUT::.BYTE 0 ; FLAG SET IF BIN OUTPUT TO NL:
.EVEN
.PSECT IMPURE,D,GBL
;+
; EVERYTHING IN THIS SECTION IS CLEARED AT THE START AND
; INITIALIZED AS REQUIRED.
;-
IMPURE::
;DO NOT CHANGE ORDER OF FOLLOWING 3 AREAS
ODBLK:: .BLKW 15. ;BLOCK TO HOLD BINOUT SPEC ;MAS27
;LNKOV1->STORE TIME TO ROLL OVER DATE ;MAS06
TEMP:: .BLKW 2 ;TEMPORARY STORAGE
TXTBLK::.BLKB RECSIZ ;SPACE FOR A FORMATTED BINARY RECORD
.EVEN
;SYMBOL TABLE PARAMETERS:
UNDLST::.BLKW ;START OF UNDEFINED SYMBOL LIST
SYEN0:: .BLKW ;ADR OF SYMBOL TABLE ENTRY NUMBER 0
;REL PTR + THIS = ABS ADDR OF SYMBOL NODE
CSECT:: .BLKW ;PTR TO LATEST SECTION (PASS1)
;NEXT 4 IN THIS ORDER
PA2LML::.BLKW ;START OF LML BUFR
;LNKOV1->TEMP. SEGMENT POINTER ;MAS06
LMLPTR::.BLKW ;CURRENT PTR TO LIBRARY MOD LIST
STLML:: .BLKW ;CURRENT START OF LMLPTR IF MULTI-LIBR FILES
ENDLML::.BLKW ;END OF LIB MOD LIST
ESZRBA::.BLKW ;SIZE OF CURRENT LIBRARY EPT
;RELOCATION INFO OUTPUT BUFR ADR
OVCOUN::.BLKW ;NO. OF OVERLAY ENTRY PTS.
OVSPTR::.WORD ASECT ;PTR TO OVERLAY SEGMENT BLK
PAS1.5::.BLKB ;PASS 1.5 SWITCH(0 ON PASS1, 1 IF TO DO LIBRARY,
;BIT 7 SET IF DOING LIBRARIES
DUPMOD::.BLKB ;1 IF LIB MOD IS DUP ;DBB02
;0 IF LIB MOD IS NOT DUP ;DBB02
NUMCOL::.BLKB ;NUMBER OF COLUMNS WIDE FOR MAP
;IND + OR - RELOCATION DURING PASS 2
LIBNB:: .BLKB ;LIBRARY FILE NUMBER FOR LML
.EVEN
SWITCH::.BLKW ;SWITCHES FROM CSI (SEE "LINK1" FOR DETAILS)
SWIT1:: .BLKW ;SWITCHES FROM CSI (SEE "LINK1" FOR DETAILS) ;DBB02
FILPT1::.BLKW ;START OF SAVESTATUS AREA -4
.SBTTL - VARIABLES FOR PROGRAM BEING LINKED
HGHLIM::.BLKW ;MAX # OF SECTIONS IN ANY MODULE PROCESSED
;HIGHEST LOCATION USED BY PROGRAM (I-SPACE)
DHGHLM::.BLKW ;MAX # OF SECTIONS IN ANY MODULE PROCESSED
;HIGHEST LOCATION USED BY PROGRAM (D-SPACE)
BEGBLK::.BLKW 4 ;TRANSFER ADDRESS BLOCK (4 WD GSD ENTRY)
; TRANS ADDR OR REL OFFSET FROM PSECT
; KEEP STKBLK & HSWVAL TOGETHER FOR 4 WD GSD AREA USED IN SAV & REL OUTPUT
STKBLK::.BLKW 3 ;USER STACK ADDRESS BLOCK(SYMBOL & VALUE)
;LNKSAV->TEMP 4 WORD STORAGE FOR GSD RECORD ;MAS06
HSWVAL::.BLKW ;/H SWITCH VALUE - I-SPACE
DHSWVL::.BLKW ;/H SWITCH VALUE - D-SPACE
; ESWVAL & ESWNAM MUST BE IN THAT ORDER
; DESWVL & DESWNM MUST BE IN THAT ORDER AND MUST FOLLOW ESWNAM
ESWVAL::.BLKW ;/E SWITCH VALUE - I-SPACE
ESWNAM::.BLKW 2 ;/E SWITCH NAME - I-SPACE
DESWVL::.BLKW ;/E SWITCH VALUE - D-SPACE
DESWNM::.BLKW 2 ;/E SWITCH NAME - D-SPACE
KSWVAL::.BLKW ;/K SWITCH VALUE OR STACK SIZE FOR REL FILE
;YSWNAM::.BLKW 2 ;/Y SECTION NAME ARRAY(TEMP OVERLAY # IN OV1 & SAV)
;+2 NEXT ASSIGNABLE OUTPUT BLK(LNKMAP)
; RELOCATION INFO BLOCK #(LNKSAV)
;YSWVAL::.BLKW 22. ;/Y SWITCH VALUE ARRAY
YSWNAM::.BLKW 24. ;/Y SECTION NAME ARRAY(TEMP OVERLAY # IN OV1 & SAV)
;+2 NEXT ASSIGNABLE OUTPUT BLK(LNKMAP)
; RELOCATION INFO BLOCK #(LNKSAV) - I-SPACE
YSWVAL==YSWNAM+4 ;/Y SWITCH VALUE ARRAY - I-SPACE
.WORD 0 ;TERMINATOR - I-SPACE
DYSWNM::.BLKW 24. ;/Y SECTION NAME ARRAY(TEMP OVERLAY # IN OV1 & SAV)
;+2 NEXT ASSIGNABLE OUTPUT BLK(LNKMAP)
; RELOCATION INFO BLOCK #(LNKSAV) - D-SPACE
DYSWVL==DYSWNM+4 ;/Y SWITCH VALUE ARRAY - D-SPACE
.WORD 0 ;TERMINATOR - D-SPACE
YSWT:: .BYTE 0 ;SAY WE ARE USING /Y
YCNT:: .BYTE 0 ;NUMBER OF TIMES TO PROMPT FOR /Y (SET IN LINK2)
DEFALT::.WORD 0 ;DEFAULT BOUNDARY VALUE FOR /Y (SET IN LINK2)
USWVAL::.BLKW ;/U SWITCH VALUE - I-SPACE
USWNAM::.BLKW 2 ;/U SWITCH NAME - I-SPACE
DUSWVL::.BLKW ;/U SWITCH VALUE - D-SPACE
DUSWNM::.BLKW 2 ;/U SWITCH NAME - D-SPACE
QSWVAL::.BLKW ;/Q BUFFER POINTER ;MAS20
ZSWVAL::.BLKW ;/Z SWITCH VALUE - I-SPACE ;DBB05+
DZSWVL::.BLKW ;/Z SWITCH VALUE - D-SPACE
LRUNUM::.BLKW ;USED TO COUNT MAX # OF SECTIONS AND AS
; TIME STAMP FOR SAV FILE CACHING
BITBAD::.BLKW ;-> START OF BITMAP TABLE (D-SPACE IF /J USED)
IBITBD::.BLKW ;-> START OF I-SPACE BITMAP TABLE
BITMAP::.BLKW ;CONTAINS BITMAP OR IBITBD (IF /J USED)
CACHER::.BLKW ;-> CACHE CONTROL BLOCKS
NUMBUF::.WORD 3 ;NUMBER OF AVAILABLE CACHING BLOCKS (DEF=3) ;DBB05-
BASE:: .BLKW ;BASE OF CURRENT SECTION
CKSUM:: .BLKW ;CHECKSUM FOR STB & LDA OUTPUT
;LNKOV1->TEMP LINK POINTER TO NEW REGION BLK ;MAS06
;CURRENT REL BLK OVERLAY NUM
ENDRT:: .BLKW ;REMEMBERED END-OF-ROOT SYMBOL TBL LIST
VIRSIZ::.BLKW ;LARGEST REGION IN A PARTITION ;MAS15+
REGION::.BLKW ;XM REGION NUMBER
WDBCNT::.BLKW ;WDB TABLE SIZE ( 14. * NUMBER OF PARTITIONS)
HIPHYS::.BLKW ;HIGH LIMIT FOR EXTENDED MEMORY (96K MAX) ;MAS15-
SVLML:: .BLKW ;START OF LML LIST FOR WHOLE LIBRARY ;MAS23
SW.LML::.BLKW ;LML INTO OVERLAY SWITCH, AND PASS INDICATOR ;MAS23
LOC0:: .BLKW ;USED FOR CONTENTS OF LOC 0 IN SAV HEADER ;DBB07
LOC66:: .BLKW ;# /O SEGMENTS SAVED FOR CONVERSION TO ADDR OF ;MAS28
; /V SEGS IN OVERLAY HANLDER TABLE ;MAS28
LSTFMT::.BLKW ;CREF LISTING FORMAT (0=80COL, -1=132COL) ;DBB03
; I-D SPACE VARIABLES
IDSWIT::.BLKW ;BITMASK WORD FOR WHICH SWITCHES USE SEPARATED
;I-D SPACE
;D-SPACE, LOW BYTE, I-SPACE, HI BYTE
ILEN:: .BLKW ;TOTAL LENGTH OF I-SPACE PSECTS IN WORDS
DLEN:: .BLKW ;TOTAL LENGTH OF D-SPACE PSECTS IN WORDS
IBLK:: .BLKW ;TOTAL LENGTH OF I-SPACE PSECTS IN BLOCKS
DBLK:: .BLKW ;TOTAL LENGTH OF D-SPACE PSECTS IN BLOCKS
IROOT:: .BLKW ;SIZE OF THE I-SPACE ROOT IN WORDS
DROOT:: .BLKW ;SIZE OF THE D-SPACE ROOT IN WORDS
IBASE:: .BLKW ;START OF THE I BASE (BLOCKS)
DBASE:: .BLKW ;START OF THE D BASE (BLOCKS)
ILOC40::.BLKW ;CONTENTS OF LOC 40 FOR I-SPACE CCB
IFLG:: .BLKW ;NON-ZERO MEANS WRITING I-SPACE BITMAP
IDSTRT::.BLKW ;I-D SPACE ENTRY POINT ($OVRHZ)
ZTAB:: .BLKW ;I-D SPACE START ADDRESS OF PSECT $ZTABL
OVRCNT::.BLKW ;# OF OVERLAY SEGMENTS, USED FOR COMPUTING $OVDF6
DSGBAS::.BLKW ;PASS 2 BASE ADR OF D-SPACE OVERLAY SEGMENT
DSGBLK::.BLKW ;PASS 2 BASE BLK OF D-SPACE OVERLAY SEGMENT
; NEXT 2 IN THIS ORDER FOR STB OUTPUT
MODNAM::.BLKW 2 ;MODULE NAME
;LDA OUTPUT BUFR PTR OR REL INFO BUFR PTR
IDENT:: .BLKW 2 ;PROGRAM IDENTIFICATION
;"RELADR" ADR OF RELOCATION CODE IN TEXT OF REL FILE
;+2 "RELOVL" NEXT REL BLK OVERLAY #
.IIF NE RST$ RSTSAV::.BLKW 5 ;RSTS .SAV FILE PARAMETER BLOCK ;MAS17
.SBTTL - DUMMY OVERLAY SEGMENT DESCRIPTOR BLOCK (OSDB)
;+
; (ADDED ONES FOR EACH /O SWITCH) THIS ONE IS FOR THE ROOT
;-
ASECT:: .BLKW ;-> SYMBOL TABLE LIST FOR THIS SEG
;ADDR OF . ABS. IN SYMTAB
;ENTRY NUMBER POINTER WHEN NOT ROOT SEGMENT
.WORD BOTTOM ;-> ORDB FOR THIS SEG (S.GRGP)
.WORD 0 ;ID NO. OF SEGMENT (S.GID)
.WORD 0 ;BASE BLOCK OF SEGMENT (S.GBSB)
.BLKW ;LENGTH OF SEGMENT (S.GHCL)
.WORD 0 ;-> NEXT OSDB THIS REGION OR 0 IF NONE (S.GNXP)
.WORD 0 ;D-SPACE BASE BLK OF SEG. IN SAV FILE (S.GBBD)
.WORD 0 ;D-SPACE HI CORE LIMIT OF SEGMENT (S.GHLD)
.SBTTL - OFFSETS OF OVERLAY SEGMENT DESCRIPTOR BLOCK (OSDB)
.ASECT
.=0
.BLKW ;SYMBOL TABLE ENTRY # POINTER FOR THIS SEGMENT
S.GRGP::.BLKW ;-> ORDB FOR THIS SEGMENT
S.GID:: .BLKW ;SEGMENT ID # = 6*SEGMENT #
S.GBSB::.BLKW ;BASE BLOCK OF SEG IN SAVE FILE
S.GHCL::.BLKW ;HIGH CORE LIMIT OF SEGMENT
S.GNXP::.BLKW ;-> NEXT OSDB THIS REGION OR 0 IF NONE
S.GBBD::.BLKW ;D-SPACE BASE BLK OF SEG. IN SAV FILE
S.GHLD::.BLKW ;D-SPACE HI CORE LIMIT OF SEGMENT
.PSECT IMPURE,D,GBL
.SBTTL - DUMMY OVERLAY REGION DESCRIPTOR BLOCK (ORDB)
;+
; THIS ONE IS FOR THE ROOT REGION, ONE FOR EACH DIFFERENT REGION
;-
DHLRT:: .WORD 0 ;D-SPACE HIGH ADDR LIMIT OF REGION (R.GHLD)
DBOTTM::.WORD 1000 ;ST ADDR OF REGION AREA - D-SPACE (R.GSAD)
.BLKW ;REGION NUMBER (R.GNB)
OVRG1:: .BLKW ;-> NEXT ORDB (R.GNXP)
.WORD ASECT ;-> OSDB THIS REGION (R.GSGP)
HLRT:: .BLKW ;HIGH LIMIT OF AREA (R.GHL)
BOTTOM::.WORD 1000 ;ST ADDR OF REGION AREA - (I-SPACE IF /J USED)
IMPSIZ==.-IMPURE ;SIZE OF IMPURE AREA IN BYTES TO CLEAR
CBUF:: .BLKW ;START OF CREF BUFFER
CBEND:: .BLKW ;CBUF + 512. BYTES FOR A 1 BLOCK CREF BUFFER
QAREA:: .BLKW 10. ;EXTRA QUEUE ELEMENT ;DBB03-
PRAREA::.BLKW 5. ;AREA FOR PROGRAMMED REQUESTS ;DBB06
EIB512::.BLKW ;IBUF + 512. BYTES FOR A 1 BLOCK MAP BUFR
SEGBAS::.BLKW ;PASS 2 BASE ADR OF OVERLAY SEGMENT
SEGBLK::.BLKW ;PASS 2 BASE BLK OF OVERLAY SEGMENT
TXTLEN::.BLKW ;LENGTH OF TXT BLK FROM OBJ
LINLFT::.BLKW ;NUMBER OF LINES LEFT ON CURRENT MAP PAGE
.SBTTL START, ERROR, END & RESTART
.PSECT MAIN ;ROOT CODE
;+
; ENTER HERE TO CALL START OVERLAY
;-
BR RESTRT
START:: JMP START1 ;OVERLAY TO INITIALIZE & STARTUP
ERROR:: .PRINT ;PRINT FATAL ERROR MSG & RESTART
RESTRT::.RCTRLO
.SRESET
BR START
.SBTTL ERROOT:: ROOT ERROR TRANSFER ROUTINE
;+
; THIS ROUTINE IS IN THE ROOT SEGMENT TO TRANSFER CONTROL TO THE
; ERROR MESSAGE OVERLAY. THE RETURN PATH IS SAVE SINCE THE
; ERROR OVERLAY IS IN THE SAME REGION AS THE ORGINAL CALLING ROUTINE.
; THIS ROUTINE IS CALLED BY THE ERROR$ MACRO DEFINED IN EACH OVERLAY
; ROUTINE. A DUMMY ENTRY POINT IS CALLED TO ASSURE THE CALLING OVERLAY
; IS MADE RESIDENT AGAIN. OV1DUM MUST BE A "RTS R5"
; CALLING SEQUENCE:
; JSR R5,ERROOT
; .WORD ERROR CODE WORD
;-
ERROOT::MOV (R5)+,(PC)+ ;SAVE THE ERROR CODE WORD
ERCODE:: .BLKW
MOV ERRIDX,-(SP) ;GET THE OVERLAY INDEX #
;***THIS MUST BE THE 1ST LOCATION IN EACH OVERLAY***
ADD #DUMTBL,@SP ;ADD IN START OF VECTOR TABLE
MOV @(SP)+,-(SP) ;THE RETURNS WILL CALL IT SINCE THE ADR IS ON STACK
JMP ERROVL ;PROCESS THE ERROR VIA THE ERROR OVERLAY
.PSECT DPURE,D
DUMTBL: .WORD OV1DUM ;OVERLAY DUMMY ENTRY POINT VECTOR TABLE
.WORD OV2DUM ; ONE FOR EACH OVERLAY THAT HAS NON-FATAL ERRORS
.WORD OV3DUM
.WORD OV4DUM
.WORD OV5DUM
.WORD OV6DUM
.WORD OV7DUM
.WORD OV8DUM ;DBB03
.PSECT MAIN
.SBTTL LOOKUP:: SYMBOL TABLE SEARCH ROUTINE
;+ ;DBB01+
; THIS ROUTINE HAS 4 ENTRY POINTS:
; 'DLOOKE' DOES A LOOKUP & IF NOT FOUND THEN ENTERS THE NEW SYMBOL INTO
; THE SYMBOL TABLE. DOES NOT REQUIRE A SEGMENT NUMBER MATCH
; WHETHER THE SYMBOL IS A DUPLICATE OR NOT.
;
; 'LOOKUP' ONLY SEARCHES THE SYMBOL TABLE FOR A SYMBOL MATCH. IF SYMBOL
; IS A DUPLICATE, THIS ROUTINE REQUIRES A SEGMENT NUMBER MATCH.
;
; 'LOOKE' DOES A LOOKUP & IF NOT FOUND THEN ENTERS THE NEW SYMBOL INTO
; THE SYMBOL TABLE. IF SYMBOL IS A DUPLICATE, THIS ROUTINE
; REQUIRES A SEGMENT NUMBER MATCH.
;
; 'SEARCH' THIS ROUTINE DOES A LOOKUP ONLY AND DOES NOT CARE WHETHER THE
; SYMBOL IS A DUPLICATE OR NOT. THIS ROUTINE IS USED REPEATEDLY
; AFTER A SINGLE CALL TO 'DLOOKE'.
;
; NOTE!!! INPUTS TO 'SEARCH' ARE THE SAME AS LISTED BELOW EXCEPT RO AND
; R3 MUST BE AS THEY ARE RETURNED BY 'DLOOKE'.
;
;
; ENTRY # = MOD(WD1 + WD2, STSIZE)
;
; INPUT: R3 -> 1ST WORD OF SYMBOL TO BE LOOKED UP (2 RAD50 WORDS)
; LKWD = VALUE TO ENTER OR LOOK FOR AS A MATCH ON THE SYM TBL
; FLAGS & SEGMENT # WORD
; LKMSK = MASK WORD WITH BITS SET WE DO NOT CARE ABOUT WHEN
; COMPARING FLAGS & SEGMENT # WORD WITH "LKWD"
;
; OUTPUT: R0 -> SYMBOL TABLE ENTRY STATUS WORD
; R3 ADD 4 IF FOUND (NOT ADDED IF LOOKUP & NOT FOUND)
; C = 0 IF SYMBOL FOUND (FOR LOOKE & DLOOKE ALREADY ENTERED)
; C = 1 IF SYMBOL NOT FOUND (FOR LOOKE & DLOOKE NOT FOUND BUT
; ENTERED)
;-
.SBTTL LOOKE:: LOOKUP WITH ENTER
.ENABL LSB
SEARCH::SUB #6,R0 ;ADJUST POINTER TO SYM'S WORD 2
CMP -(R3),-(R3) ;ADJUST POINTER TO SYMBOL NAME
CLR -(SP) ;JUST A LOOKUP
; SO PUT A POSITIVE VALUE ON STACK
BR 60$ ;FIND NEXT OCCURRENCE OF SYMBOL
DLOOKE::SEC ;LOOKUP AND ENTER IF NOT FOUND
ROR -(SP) ;>=0 IF JUST A LOOKUP
CLR DUPMSK ;IGNORE DUP BIT
BR 10$ ;JOIN MAIN ROUTINE
LOOKUP::TST (PC)+ ;SKIP "SEC" & CLEAR CARRY
LOOKE:: SEC ;LOOKUP AND ENTER IF NOT FOUND
ROR -(SP) ;>=0 IF JUST A LOOKUP
MOV #SY.DUP,DUPMSK ;CONSIDER DUP BIT IN MATCH CRITERIA
10$: CLR DUPWD ;ASSUME SYMBOL IS NOT DUP ;DBB01-
MOV R5,-(SP) ;SAVE IT
MOV @R3,R0 ;1ST RAD50 WORD
BNE 20$ ;0 = BLANK NAME
MOV (PC)+,R0 ;USE SEGMENT # FOR BLANK SECTION NAME
SEGNUM:: .BLKW ;SEGMENT # CURRENTLY PROCESSING
INC R0 ;SEG # START AT 0
ASL R0 ;TIMES 4 (UP TO 3100/4 OCTAL SEGMENTS
; CAN BE PROCESSED)
ASL R0
MOV R0,@R3 ;REPLACE 0
20$: ADD 2(R3),R0 ;ADD 2ND WORD OF SYMBOL TO 1ST
MOV (PC)+,R5 ;NORMALIZED SYMBOL TABLE SIZE
STDIV:: .BLKW ;NORMALIZED STSIZE USED FOR DIVISION
30$: CMP R5,R0 ;CAN SUBTR BE DONE?
BHI 40$ ;YES
SUB R5,R0 ;NO
40$: CLC
ROR R5 ;SHIFT DIVISOR
CMP (PC)+,R0 ;SMALLER THAN TABLE SIZE?
STSIZE:: .BLKW ;LENGTH OF TABLE IN ITEMS (5 WDS/ITEM)
BLOS 30$ ;NO
ASL R0 ;YES, R0 = ENTRY #
MOV R0,R5 ; NOW TIMES 10
ASL R0
ASL R0
ADD R5,R0
ADD (PC)+,R0 ;CALC ADDR OF TABLE ENTRY
SYNB1:: .BLKW ;ADDR OF ENTRY # 1 WD 1 ON SYM NAME
MOV (SP)+,R5 ;RESTORE IT
MOV STSIZE,STCNT ;NUMBER OF ENTRIES TO SEARCH
50$: TST @R0 ;EMPTY CELL?
BEQ 110$ ;YES
CMP (R0)+,@R3 ;ARE THEY THE SAME 1ST WD
BNE 60$ ;NO, TRY NEXT NODE
CMP 2(R3),@R0 ;ARE 2ND WDS OF SYMBOL THE SAME?
BEQ 80$ ;YES
60$: DEC (PC)+ ;ARE ALL ENTRIES USED?
STCNT: .BLKW ;SYMBOL TBL ENTRIES COUNTER
BEQ 140$ ;YES, ERROR: SYMBOL TABLE FILLED
ADD (PC)+,R0 ;NO, INCREMENT SEARCH POINTER, LESS 2
STINCR:: .BLKW ;SYM TBL INC TO FIND NEXT EMPTY SLOT
BCS 70$ ;IF WRAP-AROUND, WE'RE AT END OF TABLE
CMP @#HIGH,R0 ;AT END OF TABLE?
BHI 50$ ;NO
70$: SUB (PC)+,R0 ;YES, LENGTH OF TBL
STLEN:: .BLKW ;LENGTH OF TABLE IN BYTES
BR 50$ ;LOOK AGAIN
; AT THIS POINT HAVE FOUND A MATCHING SYMBOL NAME, NOW
; MUST CHECK FOR MATCHING ATTRIBUTES. R0 -> 2ND WD OF NAME
80$: MOV 2(R0),-(SP) ;GET SYM TBL ATTRIBUTE WD
BIC (PC)+,@SP ;GET RID OF BITS WE DO NOT CARE ABOUT
LKMSK:: .BLKW ;MASK OF BITS DO NOT CARE ABOUT FOR A MATCH
CMP (PC)+,(SP)+ ;DO THE ATTRIBUTES OF CONCERN MATCH ?
LKWD:: .BLKW ;FLAGS & SEGMENT # MATCH WORD
BNE 60$ ;NO, TRY AGAIN
BIT 6(R0),(PC)+ ;IS DUP BIT SET AND CARED ABOUT? ;DBB01+
DUPMSK:: .BLKW ;DUPMSK = SY.DUP IF DUP BIT IS CARED ABOUT
BEQ 100$ ;.EQ. -> NO. RETURN FOUND SYMBOL
MOV #SY.DUP,DUPWD ;IF WE ENTER, IT MUST BE DUP
BIT #SY.SEG,2(R0) ;IS SYMBOL IN ROOT?
BEQ 90$ ;BRANCH IF SO
MOV 2(R0),-(SP) ;GET SYM TBL ATTRIBUTE WD
BIC #^CSY.SEG,@SP ;ISOLATE SEG # OF ENTRY
CMP (SP)+,SEGNUM ;IF SEG # = SEGNUM, THEN WE HAVE A MATCH
BNE 60$ ;BRANCH IF NOT A MATCH TO TRY AGAIN
90$: BIS SEGNUM,2(R0) ;DBB01-
100$: CMP (R3)+,(R3)+ ;ADD 4
ADD #6,R0 ;R0 -> LAST WORD OF NODE
TST (SP)+ ;GET RID OF CALLED ROUTINE INDICATOR
RETURN ;C=0, SYMBOL FOUND RETURN
; SYMBOL NOT FOUND, POSITIONED AT AN EMPTY TBL NODE
110$: TST (SP)+ ;JUST A LOOKUP REQUESTED?
BPL 120$ ;+ IF NO ENTER WANTED
MOV (R3)+,(R0)+ ;PUT NEW SYMBOL INTO TBL
MOV (R3)+,(R0)+
MOV LKWD,(R0)+ ;ALSO THE ATTRIBUTE WORD
TST (R0)+ ;R0 -> LAST WORD OF NODE
MOV (PC)+,@R0 ;SET DUP BIT IF NECESSARY ;DBB01
DUPWD: .BLKW ;EITHER 0 OR SY.DUP ;DBB01
BR 130$ ;NOT FOUND BUT ENTERED
120$: ADD #8.,R0 ;R0 -> LAST WORD OF NODE
130$: SEC ;C=1 SYMBOL NOT FOUND
RETURN ;SYMBOL NOT FOUND RETURN
140$: ERROR$ ERR1,E$F,E$PRT ;SYMBOL TABLE OVERFLOW
.DSABL LSB
.SBTTL BYTE:: GET NEXT INPUT BYTE INTO R0
;+
; INPUT: R4 -> CURRENT BUFFER POSITION
; ENDBUF -> THE BYTE AFTER THE LAST BYTE OF THE CURRENT INPUT BUFFER
;
; OUTPUT:R0 = NEXT INPUT BYTE
;-
.ENABL LSB
10$: CALL NEWBUF ;GET ANOTHER BUFFER
BYTE:: CMP (PC)+,R4 ;END OF INPUT BUFFER?
ENDBUF:: .BLKW
BLOS 10$ ;YES
CLR R0 ;BECAUSE OF SIGN EXTEND
BISB (R4)+,R0 ;GET BYTE IN R0
RETURN
.DSABL LSB
.SBTTL NEWBLK:: GET NEXT FORMATTED BINARY BLOCK FOR INPUT
;+
; DATA STRUCTURE IS: .BYTE 1,0 .WORD .BYTE ,0
;
; INPUT: R4 -> CURRENT BUFFER POSITION
;
; OUTPUT:R4 -> 1ST DATA WORD OF NEW BLOCK
; R5 = NUMBER OF DATA BYTES IN THE BLOCK.
; R0 = TYPE CODE OF THE BLOCK
;-
NEWBLK::
10$: CALL BYTE ;GET NEXT INPUT BYTE
; TSTB R0 ;IS BYTE A 0 ? ;SHD01
BEQ 10$ ;YES, SKIP ALL NULL BYTES
DECB R0 ;NEW BLK ST WITH A 1
BNE 10$ ;MODE ERROR, NOT FB BLOCK
CALL BYTE ;SKIP HIGH BYTE OF F.B.
; TSTB R0 ;HIGH BYTE A ZERO? ;SHD01
BNE 10$ ;INSURE ITS A FB BLOCK ;SHD01
CALL GETWD ;ASSEMBLE THE LENGTH WORD
MOV R0,R5 ;COPY OF LENGTH
SUB #4,R5 ;CALC CORRECTED LENGTH
;BR GETWD ;GET TYPE & IGNORE NULL BYTE
; 'GETWD' WILL RETURN
.SBTTL GETWD:: GET A WORD FROM OBJ FILE INTO R0
;+
; INPUT: R4 -> CURRENT BUFFER POSITION
; R5 = # OF DATA BYTES IN THE F.B. BLOCK
;
; OUTPUT:R5 IS REDUCED BY 2
;-
GETWD:: CALL BYTE ;GET NEXT INPUT BYTE (LOW ORDER)
MOV R0,-(SP) ;SAVE IT
CALL BYTE ;GET HIGH ORDER BYTE
SWAB R0 ;PROPER PLACE
BIS (SP)+,R0 ;SET IN LOW ORDER PART
SUB #2,R5 ;BOOKKEEP THE BYTE COUNT
RTSPC: RETURN
.SBTTL SKPBLK:: SKIP FB BLOCKS ON INPUT
;+
; INPUT: R4 = CURRENT BUFR POSITION
; ENDBUF = END OF CURRENT INPUT BUFFER
; R5 = LENGTH OF BLOCK
;
; OUTPUT:R4 & ENDBUF UPDATED IF REQUIRED
; DESTROYS R0
;-
SKPBLK::INC R5 ;INCLUDE CHECKSUM BYTE
10$: ADD R5,R4 ;LENGTH TO CURRENT POSITION
CMP ENDBUF,R4 ;GONE PAST END OF BUFR?
BHI RTSPC ;NO, JUST RETURN
MOV R4,R5 ;YES, HOW MUCH INTO NEXT BUFR
SUB ENDBUF,R5 ;# TO PASS OVER IN NEXT BUFR
CALL NEWBUF ;GET MORE
BR 10$ ;TRY AGAIN
.SBTTL - READ ERROR FOR INPUT FILE
HARDER: ERROR$ ERR2,E$F,E$FIL ;READ ERROR IN
.SBTTL CLOSE:: READ/WRITE ERROR RECOVERY
CLOSE:: .CLOSE #3 ;CLOSE INPUT CHANNEL
BCC 10$ ;NO PROTECTION VIOLATION ;MAS24+
CMPB #PROTCT,@#ERRBYT ;IS THIS A PROTECTION VIOLATION?
BNE 10$ ;NE -> NO
ERROR$ ERR66,E$W,E$FIL ;DUPLICATE FILES CREATED ;MAS24-
10$: MOV (PC)+,R0 ;R0 -> LAST OPEN FILE
FILPT:: .BLKW ;PTR TO CURRENT INPUT FILE BLK
TST -(R0) ;IS THIS THE LAST INPUT FILE ?
BMI ENDPAS ;YES
SUB #S.VSIZ+2,R0 ;R0 -> NEXT FILE BLK
CALL @(PC)+ ;INIT NEXT FILE & VARIABLES
NXTFIL:: .BLKW ;ADR OF ROUTINE TO GOTO ON NEXT FILE
;BR NEWBUF ;AND GO READ FROM NEW FILE
.SBTTL NEWBUF:: READ NEXT INPUT BUFFER
;+
; INPUT:CURBLK = RELATIVE INPUT BLK #
; WHILE PROCESSING R4 -> NEXT AVAILABLE BYTE
; ENDBUF = END OF CURRENT BUFR(IF R4.GE.ENDBUF, BUFR IS EXHAUSTED
;
; OUTPUT: R4 -> START OF INPUT BUFR
; ENDBUF = END OF INPUT BUFR
; CURBLK = CURBLK + IBKINC
; DESTROYS R0!!!
;-
.ENABL LSB
NEWBUF::MOV (PC)+,R4 ;STATUS OF BUFFER
IEOI:: .BLKW ;0=NORMAL, N = BUFR BEGINS AN
;OVERLAY SEGMENT, PTS TO SEGMENT BLK
BEQ 20$ ;0 = NORMAL CASE
;BUFFER BEGINS AN OVERLAY SEGMENT SO SET IT UP
CLR IEOI ;RESET BUFFER STAT
TST (PC)+ ;DECIDE PASS(+=PASS1)
FLGWD:: .WORD 0 ;VARIOUS FLAGS (SEE "LNKOV1" FOR DETAILS)
BPL 10$ ;PASS 1 IF +
CALL DMPID ;OUTPUT OVERLAY ID WORD
BR 20$
10$: MOV R4,(PC)+ ;START NEW SYMTAB LIST FOR OVERLAY
ENDOL:: .BLKW ;CURRENT END OF SYMTAB LIST
20$: MOV IBUF,R4 ;ADDR OF BUFFER
.READW #IRAREA,#3 ;READ A BUFFER FULL ;DBB06
BCC 30$ ;NO ERROR
TSTB @#ERRBYT ;0=EOF, 1=HARDWARE, 2=CHAN NOT OPEN
BNE HARDER ;NOT EOF SO GIVE ERROR
30$: ASL R0 ;WORDS READ TO BYTES READ
BEQ CLOSE ;IF=0 THEN EOF SO CLOSE & CONT
ADD R4,R0 ;NOW THE END OF BUFR
MOV R0,ENDBUF ;UPDATE ENDBUF
ADD (PC)+,@(PC)+ ;UPDATE REL BLK #
IBKINC:: .BLKW ;INPUT BLOCK INCREMENT IBFSIZ/256.
.WORD CURBLK ;ADR OF CURRENT INPUT BLOCK
RETURN
.DSABL LSB
.PSECT MAIN
.SBTTL - ENDPAS END OF INPUT PASS
ENDPAS:: MOV (PC)+,SP ;RESTORE SP AS IT WAS BEFORE FILE OPEN ;DBB04
EOFSP:: .WORD 0 ;SAVED SP TO MAKE STACK CLEAN UP EASIER ;DBB04
BISB #200,PAS1.5 ;MARK BEGINING OF 2ND HALF OF PASS
TST FLGWD ;ARE WE ON PASS 2?
BMI 10$ ;YES
JMP PASS1 ;GO FINISH UP PASS 1
10$: JMP PASS2 ;GO FINISH UP PASS 2 ;DBB04
.SBTTL - INPUT BUFFER INFORMATION
.PSECT IMPURE,D,GBL
;NEXT 5 WORDS MUST BE IN THIS ORDER
IRAREA: .BLKW ;CHANNEL NUMBER AND .READ EMT CODE ;DBB06
CURBLK::.BLKW ;RELATIVE INPUT BLOCK NUMBER
IBUF:: .BLKW ;INPUT BUFR ADR(ALSO END OF OUTPUT BUFR (OBUF+512))
IBFSIZ::.BLKW ;INPUT BUFR SIZE (MULTIPLE OF 256) WORD COUNT
.BLKW ;.READ WAIT INDICATOR ;DBB06
.SBTTL - CHANNEL 0 EMT REQUEST AREA
.PSECT IMPURE,D,GBL
;NEXT 5 WORDS MUST BE IN THIS ORDER
OAREA:: .BYTE 0 ;CHANNEL 0
.BYTE 10 ;10 FOR READ, 11 FOR WRITE
OBLK:: .BLKW ;RELATIVE OUTPUT BLOCK #
OBUF:: .BLKW ;OUTPUT BUFR ADR
.WORD 256. ;WORD COUNT
.WORD 0 ;0 TO INDICATE WAIT
.SBTTL - MAP OUTPUT .WRITW REQUEST AREA
;NEXT 5 WORDS MUST BE IN THIS ORDER
.BYTE 1 ;OUTPUT CHANNEL #
.BYTE 11 ;WRITE EMT CODE
MBLK:: .BLKW ;OUTPUT BLK # (INIT TO -1 FOR BUMP BEFORE WRITE)
MBPTR:: .BLKW ;OUTPUT BUFR POINTER (0 MEANS NO MAP OUTPUT)
.WORD 256. ;WORD COUNT
.BLKW ;WAIT FOR COMPLETION INDICATOR ;DBB06
.SBTTL - CREF OUTPUT .WRITW REQUEST AREA
;NEXT 5 WORDS MUST BE IN THIS ORDER
.BYTE 11 ;OUTPUT CHANNEL # ;DBB03+
.BYTE 11 ;WRITE EMT CODE
CBLK:: .BLKW ;OUTPUT BLK # (INIT TO -1 FOR BUMP BEFORE WRITE)
CBPTR:: .BLKW ;OUTPUT BUFR POINTER (0 MEANS NO MAP OUTPUT)
.WORD 256. ;WORD COUNT
.WORD 0 ;INDICATE WAIT FOR COMPLETION
CRFSPC::.RAD50 /DK CREF TMP/ ;CREF FILE SPEC ;DBB03
FORLIB::.RAD50 /SY FORLIBOBJ/ ;FORTRAN LIBRARY FILENAME
SYSLIB::.RAD50 /SY SYSLIBOBJ/ ;DEFAULT SYSTEM LIBRARY FILENAME
.PSECT PATCH
.BLKW 64. ;PSECT FOR PATCHES
.END START