File: CORMAP.PA of Tape: Sources/Other/new-17
(Source file text) 

/***********************************************************************
/
/ CORMAP ; OS/8 CORE MAP PROGRAM
/ A.WINDRAM  6 JAN 75
/
/ THIS PROGRAM IS AN ALTERNATIVE TO THE OS/8 SYSTEM PROGRAM BITMAP
/ IT OFFERS MORE CONCISE OUTPUT, AND ADDITIONAL FACILITIES
/
/ BOTH ABSOLUTE AND RELOCATABLE BINARY FILES CAN BE MAPPED
/
/ FILES ARE SPECIFIED IN GROUPS
/ FOR ABSOLUTE BINARY FILES, ALL INPUT FILES IN THE GROUP ARE ASSUMED
/ TO BE PART OF THE SAME PROGRAM, AND ARE ENTERED IN THE SAME MAP
/ FOR RELOCATABLE BINARY FILES, EACH SECTION IS MAPPED INDEPENDENTLY,
/ AND ITS ENTRY NAMES ARE LISTED
/
/ FILE SPECIFICATION IS BY COMMAND DECODER.  A GROUP SPECIFICATION
/ ENDS ON THE FIRST LINE ON WHICH /C IS NOT SPECIFIED.
/ ONLY THE FIRST OUTPUT FILE ON ANY LINE IS RECOGNISED.
/ OUTPUT FOR A GROUP WILL GO TO THE LAST MENTIONED OUTPUT FILE FOR
/ THE GROUP, OR TO TTY: BY DEFAULT.  IF TTY: IS NOT AVAILABLE, AND
/ THE OUTPUT FILE IS DEFAULTED, /C WILL BE ASSUMED FOR THE LAST LINE
/ AND A WARNING MESSAGE WILL BE PRINTED BEFORE CD IS RECALLED.
/ DEFAULT EXTENSION FOR INPUT FILES IS "BN", & FOR OUTPUT IS "MP"
/
/ OPTIONS AVAILABLE FALL INTO 3 CATEGORIES :-
/
/ 1)  IMMEDIATE ACTION OPTIONS :-
/
/  /A	ABANDON THIS GROUP AND START AGAIN
/
/  /C	CONTINUE THIS GROUP ON TO ANOTHER COMMAND DECODER LINE
/
/  /O	CANCEL ANY GLOBAL OPTIONS SPECIFIED ON PREVIOUS LINES
/	IN THIS GROUP
/
/
/ 2)  GLOBAL OPTIONS ; APPLY TO ALL FILES IN THE GROUP :-
/
/  /F	PRINT FREE AREAS INSTEAD OF LOADED AREAS
/	( THIS FORCES /N ON FOR ALL FILES, AND /X OFF )
/
/  /K	KEEP ANY CURRENT MAP AND ADD TO IT
/
/  /L	PRINT LENGTH OF EACH AREA IN ADDITION TO START & END ADDRESSES
/
/  /R	INPUT FILES ARE RELOCATABLE BINARY
/	( THIS FORCES /N AND /0 ON FOR ALL FILES, AND /X OFF )
/
/  /X	INHIBIT PRINTING OF SUMMARY MAP
/
/  =DG	WHERE DG IS AN OCTAL DIGIT > 0.  PRINT DG AREAS PER LINE
/	( DEFAULT IS 4, OR 3 IF /L IS SPECIFIED )
/
/
/ 3)  LOCAL OPTIONS ; APPLY TO FILES ON THE LINE ON WHICH THEY ARE GIVEN
/
/  /N	INHIBIT PRINT OF DETAILS OF EACH BLOCK OF CODE
/	AS IT IS ENCOUNTERED
/
/  /S	PROCESS ALL BINARY SECTIONS IN EACH FILE, NOT JUST THE FIRST
/	SECTION
/
/  /DG	WHERE DG IS AN OCTAL DIGIT.  FORCE LOADING INTO FIELD DG,
/	UNLESS THE FILE CONTAINS FIELD DEFINITIONS
/
/
/
/ A * APPEARING AFTER DETAILS OF A BLOCK OF CODE MEANS THAT THE BLOCK
/ OVERLAYS SOME AREA WHICH HAS ALREADY BEEN LOADED.
/ THIS INFORMATION DOES NOT APPEAR IF /N IS ON
/
/
/ CORE LAYOUT :-
/  00000 - 04577	PROGRAM
/  04600 - 05577	OUTPUT BUFFER ( 2 BLOCKS ) + 1-TIME CODE
/  05600 - 06577	MINIMUM INPUT BUFFER ( 2 BLOCKS )
/  06600 - 07577	REST OF INPUT BUFFER, & DEVICE HANDLERS
/  10000 - 17577	CORE MAP OF AREAS LOADED
/
/
/ TO ASSEMBLE, LOAD & SAVE THE PROGRAM :-
/ .R PAL8
/ *CORMAP/L/P$
/
/ .SAVE SYS CORMAP
/
/***********************************************************************
/ SYMBOL DEFINITIONS
ZZZOB=4600	/ OUTPUT BUFFER
ZZZOR=2		/ 2 BLOCKS
ZZZIB=5600	/ INPUT BUFFER
HPB=7400	/ TOP HANDLER PAGE
BLHP=6600	/ LOWEST PAGE FOR HANDLERS

	FIELD 0
CURFLD=0
/ PAGE 0
*1
	HLT
	JMP .-1		/ IN CASE OF CALL TO NON-EXISTENT HANDLER

ZERO,	"0
TEMP,	-5		/ FOR BATCH
T1,	0
CTR,	0

*16
TTYFAK-1; TYPE+1	/ AIX POINTERS (SET UP FOR BATCH)

NWDS,	0		/ NO OF WORDS IN BLOCK
OFLOW,	0		/ OVERFLOW FOR NWDS
IA,	0		/ INITIAL ADDRESS OF BLOCK
FA,	0		/ FINAL ADDRESS OF BLOCK
PTRA,	0
PTRB,	0		/ POINTERS FOR CHAINING
PTRC,	0
NBP,	0
OVL,	0		/ OVERLAY FLAG FOR CHAINING
HDCHN,	0		/ HEAD OF CURRENT FIELD CHAIN
FREE,	0		/ HEAD OF FREE CHAIN
DFF,	0		/ DEFAULT FIELD
FLD,	0		/ CURRENT FIELD (CHAR)
NPL,	0		/ NO OF BLOCKS PER PRINT LINE (-)
FSW,	0		/ /F SWITCH  ( DON'T CHANGE THE ORDER OF
KSW,	0		/ /K SWITCH    THE F,K,L,R, & X SWITCHES,
LSW,	0		/ /L SWITCH    OR SPLIT THEM UP )
RSW,	0		/ /R SWITCH
XSW,	0		/ /X SWITCH
NSW,	0		/ /N SWITCH
SSW,	0		/ /S SWITCH
IPRINT,	0		/ ALLOW PRINTING IF 0
SYMCTR,	0		/ COUNTER FOR RELOCATABLE SYMBOLS
NBOLC,	0		/ COUNTER FOR OBLOK
NFM,	0		/ MESSAGE NO FOR OBLOK
CC,	0		/ CHAIN ADDRESS FOR UNCHN

SNOF,	0		/ "STORE NEW OPTIONS"
POPT,	0		/ PREVIOUS OPTIONS
IFCTR,	0		/ INPUT FILE LIST COUNTER
FSP,	0		/ FILE LIST FREE-SPACE POINTER
IFTP,	0		/ FILE LIST POINTER
PLOF,	0		/ "PRINT LOCAL OPTIONS"
NCIF,	0		/ NO OF CURRENT INPUT FILE
OFT,	0		/ OUTPUT FILE DEVICE
OHNP,	0		/ NO OF GOES TO GET OUTPUT HANDLER
OHPA=OOPNT1
FFHP,	0		/ FIRST FREE HANDLER PAGE
NFHP,	0		/ NEXT FREE HANDLER PAGE
NXIFA,	0		/ ADDR OF NEXT INPUT FILE
TNXIF,	0		/ TEMP ADDR OF NEXT INPUT FILE
IHNP,	0		/ NO OF GOES TO FETCH INPUT HANDLER
DATE,	0		/ DATE
FTIME,	0		/ FIRST TIME IN NEW SECTION
SAV,	0
SAV2,	0		/ CHAR STORES FOR CONSTRUCT ROUTINES
SAV3,	0
CKSUM,	0		/ CHECKSUM
CMPR1,	0
TELTAL,	-1		/ #0 IF NO MAP YET
ICNTSV,	0
ICNBSV,	0		/ FOR INPUT ROUTINES
EQLM,	0;0		/ MESSAGE BOX
SAVE,	0
FSPFLG,	0
NOSTOR,	0		/ STORE INFO IN MAP IF 0
CRALT,	0		/ CD LINE ENDING

CONSTR,	0		/ ADDR OF CONSTRUCT ITEM ROUTINE
APUTXT,	PUTTXT		/ OUTPUT TEXT
APUTK,	PUTK		/ OUTPUT CHAR
ACOUT,	0		/ ADDR OF CHAR OUT ROUTINE
ATRTD,	TRTDEC		/ OUTPUT DECIMAL NO
AUSRL,	USRLOK		/ LOCK USR
AUSRD,	USRRLS		/ DISMISS USR
EQL0=7560		/ "=0"

ANL,	NL
ANL2,	NL2
ANL3,	NL3

P200,	200
M200,
P7600,	7600
P7700,	7700

P7746,	7746
P6777,	6777
P1000,	1000

CHAIND,	-1		/ -1 IF CHAINED TO, 0 IF NOT

XMONL,	JMS I AUSRD	/ DISMISS USR
	JMP I P7600	/ & BACK TO MONITOR

XMON,	TAD I P7746	/ GET JSW
	AND P6777
	TAD P1000
	DCA I P7746	/ NO RESTART
	JMP I P7600

	PAGE
START,	DCA CHAIND	/ NOT A CHAINING CALL
	JMP I DFDV+1	/ 1-TIME CODE ; OVERWRITTEN
/	JMS I AUSRL	/ LOCK IN USR
	DCA DFDV+1	/ RESTORE "TTY"
	CIF 10
	JMS I P200
	12		/ ENQUIRE WHAT DEFAULT DEVICE IS
DFDV,	5524; STARTT	/ EQUIVALENT TO "DEVICE TTY"
	0
	DCA DFDV+1	/ ZERO IF NOT AVAILABLE

/ NEW SET OF FILES
RSTRT,	CDF CURFLD
	DCA NOSTOR	/ ALLOW MAP STORAGE
	TAD (TYPE
	DCA ACOUT	/ MESSAGES TO CONSOLE
	JMS CLPO	/ CLEAR GLOBAL OPTIONS
	DCA OFT
	DCA POPT
	DCA IPRINT	/ ALLOW PRINTING
	TAD (-NFT-1
	DCA IFCTR	/ - NO OF 2-WORD BLOCKS
	TAD (FIFL
	DCA FSP		/ FREE-SPACE POINTER
	DCA I FSP
	DCA FSPFLG	/ WARNING MESSAGE FLAG

/ CALL COMMAND DECODER
CALLCD,	TAD IFCTR
	TAD (12
	SPA CLA
	JMP CLCD2	/ NOT NEAR END
	TAD FSPFLG
	SZA CLA
	JMP CLCD2	/ MESSAGE SENT ALREADY
	ISZ FSPFLG
	TAD (SPMES
	JMS I APUTXT
	TAD IFCTR
	CMA
	TAD ZERO
	JMS I APUTK
	TAD (SPMES2
	JMS I APUTXT	/ "ONLY N MORE INPUT FILES ALLOWED"

CLCD2,	ISZ CHAIND
	SKP
	JMP CDCLLD	/ CD TABLES SET UP ALREADY
	CIF 10
	JMS I P200
	5		/ CALL COMMAND DECODER
	216		/ ASSUMED EXTENSION IS "BN"
CDCLLD,	CDF 10		/ KILL TENTATIVE FILES
	TAD I (7642
	DCA CRALT	/ CD LINE ENDING
	TAD CRALT
	SMA CLA
	JMP .+5
	CDF CURFLD
	TAD ANL
	JMS I APUTXT	/ SEND NEWLINE IF ALTMODE ENDING
	CDF 10
	CLL CML RAR	/ 4000
	AND I (7643
	SZA CLA
	JMP RSTRT	/ RESTART IF /A
	TAD I P7600
	SNA
	JMP NOTO	/ NO OUTPUT FILE
	DCA OFT		/ STORE OUTPUT DEVICE
	TAD P7600
	DCA 17
	TAD (OOPNCW
	DCA 16
	TAD (-4
	DCA CTR

	TAD I 17
	CDF CURFLD
	DCA I 16	/ COPY REST OF OUTPUT FILENAME
	CDF 10
	ISZ CTR
	JMP .-5

/ DECODE LOCAL OPTIONS
NOTO,	CLA CLL CML RAR	/ 4000
	DCA SSW
	TAD (1774
	AND I (7645	/ GET OCTAL DIGITS
	CLL RTL
	SPA SNA		/ SKIP IF NOT CURRENT DIGIT
	JMP .+4
	RAL
	ISZ SSW		/ ADD ONE TO CURRENT DIGIT
	JMP .-4
	CLA CLL CML RTR	/ 2000
	AND I (7644
	TAD SSW
	DCA SSW		/ UPDATE TO INCLUDE /N
	TAD (40
	AND I (7644	/ GET /S
	CLL RTL
	RTL
	TAD SSW
	DCA SSW		/ UPDATE OPTIONS
	DCA SNOF	/ CLEAR "STORE NEW OPTIONS" FLAG
	TAD SSW
	CIA
	TAD POPT	/ COMPARE WITH PREVIOUS OPTIONS
	SNA CLA
	JMP SAMOP	/ IF SAME AS LAST TIME
	ISZ IFCTR
	SKP
	JMP IF65	/ NO MORE ROOM
	CMA
	DCA SNOF	/ SET "STORE NEW OPTIONS"
	SKP
SAMOP,	CLL CMA RAL	/ 0 IF NEW OPTIONS ; -2 IF SAME
	JMP PG2		/ ACROSS TO NEXT PAGE

	PAGE
IF65,	CLA
	CDF CURFLD
	TAD (TOOMNY
	JMS I APUTXT	/ "TOO MANY INPUT FILES"
	JMP RSTRT

/ COPY LIST OF INPUT FILES
PG2,	TAD FSP
	DCA IFTP	/ START FOR INPUT FILES
	TAD (7617-1
	DCA 17
	TAD IFTP
	DCA 16

CNXIF,	CDF 10		/ NEXT INPUT FILE
	TAD I 17
	CDF CURFLD
	SNA
	JMP EIF		/ END OF INPUT FILES
	ISZ IFCTR
	SKP
	JMP IF65	/ TOO MANY INPUT FILES
	DCA I 16
	CDF 10
	TAD I 17
	CDF CURFLD
	DCA I 16	/ COPY START BLOCK
	JMP CNXIF

/ END OF INPUT FILE LIST
EIF,	TAD 16
	CIA
	TAD IFTP
	SNA CLA
	JMP CHEKPO	/ NO FILES ; CHECK GLOBAL OPTIONS
	DCA I 16
	DCA I 16	/ TO ROUND OFF
	ISZ SNOF
	JMP .+5
	TAD SSW
	DCA I FSP	/ STORE NEW OPTIONS
	TAD SSW
	DCA POPT	/ PRESERVE PREVIOUS OPTIONS
	TAD 16
	DCA FSP		/ NEW FREE-SPACE POINTER

/ CHECK GLOBAL OPTIONS
CHEKPO,	CDF 10
	TAD (1000
	AND I (7644
	SZA CLA
	JMS CLPO	/ CLEAR PERMANENT OPTIONS IF /O
	TAD (100
	AND I (7644
	SNA CLA
	JMP .+3
	CMA
	DCA RSW		/ RELOCATABLE FILES
	IAC
	AND I (7644
	SNA CLA
	JMP .+3
	CMA
	DCA XSW		/ INHIBIT SUMMARY
	CLL CML RTL	/ 2
	AND I (7643
	SNA CLA
	JMP .+3
	CMA 
	DCA KSW		/ KEEP PREVIOUS MAP
	TAD (100
	AND I (7643
	SNA CLA
	JMP .+3
	CMA
	DCA FSW		/ PRINT FREE SPACE, NOT USED
	IAC
	AND I (7643
	SNA CLA
	JMP .+3
	CMA
	DCA LSW		/ PRINT BLOCK LENGTHS
	TAD I (7646
	SNA		/ SKIP IF =N OPTION
	JMP .+3
	AND (7
	DCA NPL		/ NO OF BLOCKS PER LINE
	TAD (1000
	AND I (7643
	CDF CURFLD
	SZA CLA
	JMP CALLCD	/ RECALL CD IF /C
	TAD RSW
	SNA CLA
	JMP .+7		/ IF ABSOLUTE BINARY FILES
	DCA KSW
	DCA XSW		/ ALLOW SUMMARY
	IAC
	DCA NSW
	DCA DFF		/ ZERO DEFAULT FIELD
	TAD (CNRBI-CNABI

	TAD (CNABI
	DCA CONSTR	/ ADDR OF CONSTRUCT ROUTINE
	TAD I (FIFL	/ GET FIRST OPTION WORD
	SNA
	TAD KSW
	SNA CLA
	JMP ENDR2	/ NO FILES & NO MAP ; CHECK CD ENDING
	CLA IAC
	DCA NCIF	/ NO OF CURRENT INPUT FILE
	TAD OFT
	SNA
	TAD DFDV+1	/ GET DEFAULT OUTPUT
	SNA
	JMP NODFO	/ NO DEFAULT OUTPUT
	DCA OFT
	JMP PAG3	/ ACROSS TO NEXT PAGE

	PAGE
PAG3,	CLL CMA RAL	/ -2
	DCA OHNP	/ - NO OF GOES

/ OPEN OUTPUT FILE ( HOPEFULLY )
FOH,	TAD (HPB
	DCA OHPA	/ HANDLER PAGE ADDRESS
	JMS I (OOPEN	/ TRY OPEN
	JMP AGN		/ FAILURE
	JMP FOK		/ SUCCESS

AGN,	TAD (-177	/ INCREMENT HANDLER PAGE ADDRESS
	ISZ OHNP
	JMP FOH		/ TRY WITH 2 PAGES
	TAD (WLOKM-NDFO	/ "WRITE-LOCKED/READ-ONLY OUTPUT ; RESPECIFY"
NODFO,	TAD (NDFO	/ "SPECIFY OUTPUT"
	JMS I APUTXT
	JMP CALLCD

/ PRINT START MESSAGE & DATE
FOK,	TAD (OCHAR
	DCA ACOUT
	CDF 10
	TAD I (7666	/ GET DATE
	CDF CURFLD
	DCA DATE
	TAD (STARTM
	JMS I APUTXT	/ "_CORMAP  V4  "
	TAD DATE
	SNA
	JMP NXBIT
	AND (370	/ GET DAY
	CLL RTR
	RAR
	JMS I ATRTD	/ OUTPUT DECIMAL NO
	TAD ("-
	JMS I APUTK
	TAD DATE
	AND (7400
	CLL RTL
	RTL
	RTL
	TAD (MONTH-2
	JMS I APUTXT	/ OUTPUT MONTH
	TAD ("-
	JMS I APUTK
	TAD DATE
	AND (7
	DCA DATE
	TAD I (7777
	AND (600
	CLL RTR
	RTR
	TAD DATE
	TAD (106
	JMS I ATRTD	/ & YEAR ( NOW 70 - 99 )
	CLA CMA		/ EXTRA 2 SPACES

NXBIT,	TAD (SP4OP+1
	JMS I APUTXT	/ "OPTIONS "
	DCA I APUTXT	/ FLAG
	TAD (-5
	DCA T1
	TAD (FSW-1
	DCA 17

OPPOP,	TAD I 17	/ CHECK NEXT PERMANENT OPTION
	SNA CLA
	JMP .+10
	TAD 17
	TAD (POPL-FSW
	DCA EQLM	/ GET OPTION MESSAGE
	TAD I EQLM
	DCA EQLM
	TAD (EQLM
	JMS I APUTXT	/ PRINT OPTION
	ISZ T1
	JMP OPPOP

EQLOP,	TAD NPL
	SNA
	JMP .+6
	TAD (EQL0
	DCA EQLM
	TAD (EQLM
	JMS I APUTXT
	JMP .+6
	TAD I APUTXT	/ ANY OPTIONS BEEN OUTPUT ?
	SZA CLA
	JMP .+3
	TAD (NONE
	JMS I APUTXT

	TAD NPL
	SZA
	JMP .+3
	TAD LSW
	TAD (4
	CIA
	DCA NPL		/ - NO OF BLOCKS PER LINE
	TAD (DHRTSA-1
	DCA 16
	TAD (7647
	DCA 17
	TAD (-16
	DCA CTR
	JMP CDHRT

	PAGE
/ COPY DEVICE HANDLER RESIDENCY TABLE ( EXCEPT SYS )
CDHRT,	CDF 10
	TAD I 17
	CDF CURFLD
	DCA I 16
	ISZ CTR
	JMP CDHRT

	CLL
	TAD P200
	TAD OHPA
	SZL CLA
	JMP .+5
	TAD P7600
	AND OHPA
	TAD M200
	SKP
	TAD (HPB
	DCA FFHP	/ FIRST FREE HANDLER PAGE
	TAD (FIFL-1
	DCA NXIFA	/ ADDR OF NEXT INPUT FILE
	TAD NXIFA
	DCA TNXIF	/ ADDR FOR HANDLER FETCH CODE

/ GET NEXT SET OF DEVICE HANDLERS
GMDH,	TAD FFHP
	DCA NFHP
NXIF,	CLL CMA RAL	/ -2
	DCA IHNP
	TAD NFHP
	DCA IHPA
	TAD I TNXIF	/ GET NEXT TABLE ENTRY
	SZA
	JMP GOODF	/ GOOD FILE
	ISZ TNXIF
	TAD I TNXIF	/ GET OPTION WORD
	ISZ TNXIF
	SZA CLA
	JMP .-7		/ CARRY ON IF NOT END
	JMP PROCES	/ IF NO MORE FILES

/ GOOD FILE ENTRY ; FETCH HANDLER
GOODF,	CIF 10
	JMS I P200
	1
IHPA,	0		/ PAGE ADDRESS
	JMP RTRY	/ IF FETCH FAILED
	ISZ TNXIF
	ISZ TNXIF	/ ON TO NEXT FILE
	TAD NFHP
	TAD P200
	CLL CIA
	TAD IHPA
	SZL CLA
	JMP XX		/ SOMEWHERE ELSE ALREADY
	TAD P7600
	AND IHPA
	TAD M200
	DCA NFHP	/ UPDATE PAGE ADDRESS
	TAD NFHP
	CLL
	TAD (-BLHP	/ NO MORE ROOM ?
	SNL CLA		/ OK IF L=1
	JMP PROCES	/ FINISH IF NO MORE SPACE
XX,	JMP NXIF

/ RETRY WITH 2 PAGES
RTRY,	CLA
	TAD (-177
	TAD IHPA
	DCA IHPA	/ BACK-UP 1 PAGE
	TAD IHPA
	CLL
	TAD (-BLHP
	SNL CLA
	JMP PROCES	/ OUT OF ROOM
	ISZ IHNP
	JMP NXIF+2
	HLT CLA

/ PROCESS SOME FILES
PROCES,	TAD NFHP	/ 200 LESS THAN LAST HANDLER PAGE
	TAD (-ZZZIB+200	/ SUBTRACT LOWER LIMIT
	AND (7400	/ GET BLOCKS*200
	CLL RAR
	DCA ICHRP1-1	/ SET FUNCTION WORD
	TAD ICHRP1-1
	CIA
	DCA ICNTSV	/ SET COUNTER
	TAD ICHRP1-1
	CLL RTL
	RTL
	RTL
	DCA ICNBSV	/ NO OF BLOCKS
	JMS I AUSRD	/ DISMISS USR

/ CHECK IF MAP TO BE INITIALISED
	TAD TELTAL
	SNA CLA
	ISZ KSW
	JMS PURGE
	DCA KSW
	JMP ONIF

/ SUBROUTINE TO SET UP LOCAL OPTIONS
SETOP,	0
	DCA TEMP
	TAD TEMP
	CLL RTL
	SPA CLA
	IAC
	DCA SSW		/ SET /S SWITCH
	TAD RSW		/ /R SETS /N
	TAD FSW		/ SO DOES /F
	SNA		/ ACC HOLDS -2 OR -1 IF /F OR /R IS SET
	TAD TEMP
	CLL RAL
	SPA CLA
	IAC
	DCA NSW		/ SET /N SWITCH
	TAD RSW		/ /R SETS DEFAULT FIELD TO 0
	SNA CLA
	TAD (7
	AND TEMP
	DCA DFF		/ SET DEFAULT FIELD
	CMA
	DCA PLOF	/ "PRINT LOCAL OPTIONS"
	JMP I SETOP

	PAGE
/ OPEN NEXT INPUT FILE
ONIF,	JMS I (IOPEN
	 JMP MOROPT	/ MORE OPTIONS
	DCA IPRINT
	TAD PLOF
	TAD (FILE+1
	JMS I APUTXT
	TAD NCIF
	JMS I ATRTD	/ OUTPUT FILE NO
	ISZ PLOF	/ PRINT LOCAL OPTIONS ?
	JMP EL
	TAD (LOCOP
	JMS I APUTXT
	TAD DFF
	TAD ZERO
	JMS I APUTK
	TAD NSW
	SNA CLA
	JMP .+3
	TAD (SLN
	JMS I APUTXT
	TAD SSW
	SNA CLA
	JMP EL
	TAD (SLS
	JMS I APUTXT
EL,	DCA PLOF	/ DON'T PRINT AGAIN UNTIL NEW OPTIONS

	JMS I (ICHAR	/ GET CHAR 1 & CHECK FOR L-T
	 JMP NOTGF	/ NOT GOOD FILE UNLESS L-T AT START
	TAD M200
	SZA CLA
	 JMP NOTGF

EL2,	IAC
	DCA NFM		/ SET UP OBLOK MESSAGE
	CMA
	DCA NBOLC
	CMA
	DCA SYMCTR
	TAD NSW
	DCA IPRINT
	DCA NWDS
	DCA OFLOW
	TAD DFF
	DCA HDCHN
	TAD P200
	DCA IA
	TAD HDCHN
	TAD ZERO
	DCA FLD
	JMS I (ICHAR
	 JMP EOF	/ END OF FILE ?
	TAD M200
	SNA
	JMP .-4		/ IF STILL L-T
	TAD P200	/ RESTORE CODE

/ CONSTRUCT NEXT ITEM
NXITEM,	JMS I CONSTR
	 JMP DATA
	 JMP ORIGIN
	 JMP CHKSUM
	 JMP FEELD
	 JMP ERROR

/ MORE OPTIONS ??
MOROPT,	TAD I NXIFA
	SNA
	JMP ENDRUN
	JMS SETOP	/ SET NEW OPTIONS
	ISZ NXIFA
	JMP ONIF

/ DATA WORD
DATA,	ISZ NWDS
	JMP NXITEM
	ISZ OFLOW
	JMP NXITEM

/ ORIGIN SETTING ; VALUE IN ACC
ORIGIN,	JMS CALCHN	/ CHAIN OUTSTANDING BLOCK
	DCA IA		/ SET INITIAL ADDRESS
	JMP NXITEM

/ FIELD SETTING ; VALUE IN ACC
FEELD,	JMS CALCHN
	DCA HDCHN
	TAD HDCHN
	TAD ZERO
	DCA FLD		/ CURRENT FIELD
	JMP NXITEM

/ CHECKSUM ; DIFFERENCE IN ACC
CHKSUM,	JMS CALCHN
	SNA CLA
	JMP NXSECT	/ GO DO NEXT SECTION
	TAD (CKSERR
	JMS I APUTXT	/ OUTPUT ERROR MESSAGE

/ DO NEXT SECTION
NXSECT,	TAD RSW
	SNA CLA
	JMP .+3
	JMS SUMMRY	/ PRINT SUMMARY IF RELOCATABLE FILE
	JMS PURGE	/ & PURGE MAP
	TAD SSW
	SNA CLA
	JMP EOF		/ CARRY ON WITH NEXT FILE
	IAC		/ BLANK LINE BEFORE NEW TEXT
	JMP EL2

	PAGE
/ NEW FILE
EOF,	SZA CLA
	JMP BADF	/ BAD FILE
	ISZ NCIF	/ NEW FILE
	TAD NSW
	TAD ANL2
	JMS I APUTXT	/ OUTPUT NEWLINES IF DESIRABLE
	TAD TNXIF
	CIA
	TAD NXIFA
	SZA CLA
	JMP ONIF	/ OPEN NEXT INPUT FILE

/ GET NEW HANDLERS ETC
	JMS I AUSRL	/ LOCK IN USR AGAIN
	TAD (7647
	DCA 16
	TAD (DHRTSA-1
	DCA 17
	TAD (-16
	DCA CTR

	TAD I 17
	CDF 10
	DCA I 16
	CDF CURFLD
	ISZ CTR
	JMP .-5
	JMP GMDH	/ NOW GET MORE HANDLERS

/ END OF THIS LOT OF FILES ; PRINT SUMMARY
ENDRUN,	TAD RSW
	SNA CLA		/ SKIP IF RELOCATABLE
	JMS SUMMRY	/ PRINT SUMMARY
	TAD ANL3
	JMS I APUTXT
	JMS I (OCLOS	/ CLOSE OUTPUT
	JMP CLERR	/ CLOSE ERROR
ENDR2,	TAD CRALT
	SZA CLA
	JMP XMONL	/ EXIT TO MONITOR
	JMP RSTRT	/ IF CR ENDING

/ ERROR IN OUTPUT FILE
BADFO,
CLERR,	ISZ TELTAL	/ SCRUB MAP
	SNA CLA		/ SKIP IF USR IN ALREADY
	JMS I AUSRL	/ RE-GET USR
	TAD (TYPE
	DCA ACOUT
	DCA IPRINT
	TAD (OFERR
	JMS I APUTXT
	JMP RSTRT

/ SUBROUTINE TO PURGE CORE MAP
PURGE,	0
	TAD (-10
	DCA CTR
	CDF 10
	DCA FREE
	DCA I FREE	/ ZERO CHAIN-START LOCATIONS
	ISZ FREE
	ISZ CTR
	JMP .-3
	TAD FREE	/ 1ST 3-WORD BLOCK AT ADDR 10

PRG2,	DCA NBP
	CLL CLA
	TAD NBP
	TAD (-7573
	SZL CLA
	JMP PRG3	/ NO MORE ROOM
	TAD (3
	TAD NBP
	DCA I NBP	/ POINTER TO NEXT BLOCK
	TAD I NBP
	JMP PRG2

PRG3,	DCA I NBP	/ LAST BLOCK HAS 0 POINTER
	CDF CURFLD
	CLA IAC
	DCA TELTAL	/ NOTHING YET IN MAP
	JMP I PURGE

/ SUBROUTINE TO PRINT CORE MAP
SUMMRY,	0
	TAD XSW
	SZA CLA
	JMP I SUMMRY	/ SUMMARY INHIBITED
	TAD TELTAL
	SZA CLA
	JMP I SUMMRY	/ NOTHING THERE
	DCA IPRINT	/ ALLOW PRINT
	TAD FSW
	SZA CLA
	TAD (AREAF-AREAS / "FREE AREAS"
	TAD (AREAS
	JMS I APUTXT	/ OUTPUT "AREAS LOADED"
	CLA IAC
	DCA NFM		/ GET "START  END  LENGTH" OUT AGAIN
	TAD RSW
	SNA CLA
	TAD ("0-" 
	TAD (" 
	DCA FLD		/ SET FIELD DIGIT
	DCA CC
	TAD RSW
	SNA		/ -1 IF SET
	TAD (-10
	DCA SYMCTR
	DCA OVL		/ NO OVERLAY FLAGS
	CDF 10

	CLA CMA
	DCA NBOLC	/ START NEW LINE
	JMS UNCHN	/ PRINT NEXT FIELD
	ISZ CC		/ INC FIELD NO
	ISZ FLD
	ISZ SYMCTR
	JMP .-6
	CDF CURFLD
	TAD ANL3
	JMS I APUTXT
	JMP I SUMMRY

	PAGE
/ CONSTRUCT NEXT ABSOLUTE BINARY ITEM
CNABI,	0
	SNA		/ SKIP IF NEW SECTION
	JMP .+4
	DCA SAV
	DCA CKSUM
	CMA
	DCA FTIME	/ FIRST-TIME-THROUGH FLAG
	JMS I (ICHAR
	 JMP ERRORA	/ BAD !
	DCA SAV2
	TAD SAV
	AND (307
	TAD (-300
	SNA CLA
	JMP AFLD	/ FIELD SETTING
	JMS I (ICHAR
	 JMP ERRORA	/ EQUALLY BAD !
	DCA SAV3
	TAD SAV3
	TAD M200
	SNA CLA		/ NOT LEADER-TRAILER
	JMP ALT
	TAD P7600
	JMS ACON
	SZL
	JMP AORG	/ IF ORIGIN
	CLA		/ DATA
	ISZ FTIME
	JMP AORG+1	/ RETURN
	JMP ABADF	/ FIRST ITEM IS DATA ; BAD

AFLD,	TAD SAV
	AND (70
	CLL RTR
	RAR		/ GET FIELD
	DCA FTIME
	TAD SAV2
	DCA SAV		/ SHIFT UP LAST CHAR READ
	TAD FTIME
	ISZ CNABI
	ISZ CNABI
	ISZ CNABI
	JMP I CNABI	/ RETURN WITH FIELD IN ACC

	ISZ CNABI
AORG,	ISZ CNABI
	DCA FTIME
	JMS UPDCKS	/ UPDATE CHECKSUM
	TAD FTIME
	JMP I CNABI	/ RETURN

ALT,	TAD P7700	/ CHECK FOR CHECKSUM
	JMS ACON
	CIA
	TAD CKSUM
	ISZ FTIME
	JMP AORG-1	/ IF NOT FIRST TIME
	CLA
	JMP ABADF	/CHECKSUM AS FIRST ITEM

ERRORA,	CLA
	TAD (4
	TAD CNABI
	DCA CNABI
	JMP I CNABI	/ ERROR EXIT

/ UTILITY SUBROUTINE
ACON,	0
	AND SAV
	SZA CLA
	JMP ERRORA
	TAD SAV2
	AND P7700
	SZA CLA
	JMP ERRORA
	TAD SAV
	CLL RTL
	RTL
	RTL
	TAD SAV2
	JMP I ACON

/ UPDATE CHECKSUM
UPDCKS,	0
	TAD CKSUM
	TAD SAV
	TAD SAV2
	DCA CKSUM
	TAD SAV3
	DCA SAV
	JMP I UPDCKS

/ MAP FULL
FATL,	JMS PURGE
	ISZ NOSTOR	/ DONT STORE ANY MORE
	TAD (TYPE
	DCA ACOUT
	DCA IPRINT
	TAD (MPFUL
	JMS I APUTXT
	TAD NSW
	DCA IPRINT
	TAD (OCHAR
	DCA ACOUT
	JMP OUT

	PAGE
/ CONSTRUCT NEXT RELOCATABLE BINARY ITEM
CNRBI,	0
	SNA
	JMP .+4
	DCA SAV		/ IF FIRST TIME
	DCA CKSUM
	CMA
CNR2,	DCA FTIME
	JMS I (ICHAR
	 JMS EXAM	/ SEE IF ^Z ; COULD BE LEGAL
	DCA SAV2
	JMS I (ICHAR
	JMP RERR
	DCA SAV3
	TAD SAV
	AND (17
	CLL RTR
	RTR
	RAR
	TAD SAV2
	DCA T1		/ DATA WORD
	TAD SAV
	AND (360
	CLL RTR
	RTR
	TAD (JMP I TRANS
	DCA .+1
	HLT		/ SWITCH ON LOADER CODE

TRANS,	RDAT;RDAT;RERR;RDEF;RORG;RDAT;RDAT;RERR
	RCKS;RERR;RCOM;RERR;RERR;RERR;RERR;RSYM

/ SYMBOL DEFINITION OR REFERENCE
RDEF,	DCA IPRINT	/ ALLOW PRINT FOR SYMBOL
	ISZ SYMCTR
	JMP .+10
	TAD LSW
	SZA CLA
	TAD NPL
	TAD NPL
	TAD NPL
	DCA SYMCTR
	TAD (NL-SPACE2
	TAD (SPACE2
	JMS I APUTXT
	IAC

RSYM,	DCA T1		/ PRINT SYMBOL FLAG
	ISZ FTIME
	SKP
	JMP RBADF
	JMS UPDCKS	/ UPDATE CHECKSUM
	TAD (-6
	DCA CTR
NXC,	TAD SAV
	TAD CKSUM
	DCA CKSUM	/ UPDATE CHECKSUM
	TAD T1
	SNA CLA
	JMP .+3
	TAD SAV
	JMS I APUTK	/ PRINT SYMBOL
	JMS I (ICHAR
	 JMP RERR
	DCA SAV
	ISZ CTR
	JMP NXC
	TAD NSW
	DCA IPRINT
	JMP CNR2	/ AFTER PASSING OVER SYMBOL

/ COMMON DEFINITION
RCOM,	ISZ FTIME
	JMP RBADF
	JMS UPDCKS
	JMP CNR2+1

/ DATA WORD
RDAT,	DCA T1
	ISZ FTIME
	JMP XRBI
	JMP RBADF

/ ORIGIN
RORG,	ISZ FTIME
	SKP
	JMP RBADF
	ISZ CNRBI

XRBI,	JMS UPDCKS	/ UPDATE CHECKSUM
	TAD T1
	JMP I CNRBI

/ CHECKSUM
RCKS,	ISZ FTIME
	SKP
	JMP RBADF
	TAD SAV3
	TAD M200
	SZA CLA
	JMP RERR	/ CHECKSUM NOT FOLLOWED BY L-T
	TAD T1
	CIA
	TAD CKSUM
	ISZ CNRBI
	ISZ CNRBI
	JMP I CNRBI

/ UNRECOGNISED CODE
/ ERROR
RERR,	CLA
	TAD (4
	TAD CNRBI
	DCA CNRBI
	JMP I CNRBI

/ EXAMINE CHAR FOR ^Z
EXAM,	0
	SZA CLA
	JMP RERR
	TAD (232
	JMP I EXAM	/ RETURN ^Z

	PAGE
/ SUBROUTINE UNCHN ; UNRAVEL CHAIN AND PRINT IT OUT
/ RECEIVES ADDRESS OF HEAD NODE OF CHAIN IN CC
/ ENTRY & EXIT WITH DF=10
UNCHN,	0
	TAD CC
	DCA PTRB
	DCA PB		/ NOTHING YET PRINTED
	TAD FSW
	SZA CLA
	JMP UNCF	/ PRINT FREE SPACE
	TAD I PTRB
	SNA
	JMP I UNCHN
BACK,	DCA PTRB
	TAD I PTRB
	DCA IA
	ISZ PTRB
	TAD I PTRB
	DCA FA
	JMS PB		/ PRINT BLOCK INFO
	ISZ PTRB
	TAD I PTRB
	SZA
	JMP BACK
	JMP I UNCHN

/ PRINT FREE SPACE
UNCF,	TAD RSW
	SZA CLA
	TAD (200
	DCA IA
	TAD I PTRB
	SNA
	JMP I UNCHN
BACKF,	DCA PTRB
	CLL CMA
	TAD I PTRB
	DCA FA
	TAD IA
	CIA
	TAD FA
	SNL CLA
	JMS PB
	ISZ PTRB
	CLL
	TAD I PTRB
	IAC
	DCA IA
	ISZ PTRB
	TAD I PTRB
	SZA		/ SKIP IF END OF CHAIN
	JMP BACKF
	SZL
	JMP UNCHNX	/ IF LAST LOADED ADDRESS WAS 7777
	TAD IA
	TAD (200
	SNA CLA
	JMP UNCHNX	/ IF LAST LOADED ADDRESS WAS 7577
	TAD RSW
	SZA CLA
	JMP FLAR	/ FIND LAST ADDRESS FOR RELOCATABLE CODE
	RAL		/ GET 1 IF TOP PAGE
	TAD (7577
UNCNX2,	AND (7600
	TAD (177
	DCA FA
	JMS PB

UNCHNX,	TAD PB		/ HAS ANYTHING BEEN OUTPUT ?
	SZA CLA
	JMP I UNCHN
	CDF CURFLD
	JMS OMESS	/ OUTPUT PRELIMINARY MESSAGE ( IF ANY )
	TAD (NFSIF
	JMS I APUTXT
	TAD FLD
	JMS I APUTK	/ "NO FREE SPACE IN FIELD N"
	CDF 10
	JMP I UNCHN

/ SUBROUTINE TO SET UP & PRINT BLOCK
PB,	0
	TAD IA
	CIA
	TAD FA
	CLL IAC
	DCA NWDS
	RAL
	DCA OFLOW
	CDF CURFLD
	JMS OBLOK	/ PRINT DETAILS OF THIS BLOCK
	CDF 10
	JMP I PB

/ SUBROUTINE TO OUTPUT MESSAGE FOR OBLOK
OMESS,	0
	TAD NPL
	DCA NBOLC	/ SET COUNTER
	TAD NFM
	TAD (JMP I OBSW
	DCA .+2
	DCA NFM		/ CLEAR OUT MESSAGE
	HLT		/ SWITCH ON MESSAGE NO
OBSW,	OBEGN		/ JUST BEGINNING OF LINE
	OTITL		/ "START  END  LENGTH" TITLE
	OBLANK		/ BLANK LINE BEFORE START

OTITL,	TAD (SEL
	JMS I APUTXT	/ "START  END"
	TAD LSW
	SNA CLA
	JMP .+3
	TAD (LNGTH
	JMS I APUTXT	/ "LENGTH"
	ISZ NBOLC
	SKP
	JMP OTITL2
	TAD (SPACE4
	JMS I APUTXT
	IAC
	JMP OTITL

OTITL2,	TAD NPL
	DCA NBOLC

OBLANK,	TAD (NL2-NL
OBEGN,	TAD ANL
	JMS I APUTXT
	JMP I OMESS

	PAGE
/ SUBROUTINE TRTOCT ; RECEIVES WORD IN ACC
/ AND OUTPUTS IT AS 4 OCTAL DIGITS
TRTOCT, 0
	CDF CURFLD
	DCA SVA
	TAD (-4
	DCA PUTTXT
	TAD SVA
	CLL RTL
	JMP TRTIN
AROUND,	TAD SVA
	CLL RAL
	TAD SL
TRTIN,	RTL
	DCA SVA
	RAL
	DCA SL
	TAD SVA
	AND (7
	TAD ZERO
	JMS PUTK	/ DOESNT PRESERVE LINK
	ISZ PUTTXT
	JMP AROUND
	JMP I TRTOCT
SVA,	0
SL,	0

/ SUBROUTINE PUTTXT ; OUTPUTS A TEXT STRING TERMINATED BY 6-BIT 0
/ START ADDRESS OF TEXT IS RECEIVED IN ACC
PUTTXT, 0	; PTR=TRTOCT
	DCA PTR
	CDF CURFLD
	DCA CTR		/ LEFT-RIGHT FLIP-FLOP
AGAIN,	ISZ CTR
	JMP .+4
	TAD I PTR
	ISZ PTR
	JMP .+7
	CLA CMA
	DCA CTR
	TAD I PTR
	CLL RTR
	RTR
	RTR
	AND (77
	SNA
	JMP I PUTTXT
	TAD (-37
	SNA
	JMP CRLF	/ IF _
	SPA
	TAD (100
	TAD (237
	JMS PUTK
	JMP AGAIN
CRLF,	TAD (215
	JMS PUTK
	TAD (212
	JMP CRLF-2

/ SUBROUTINE TYPE ; OUTPUTS 1 CHAR TO TTY
TYPE,	0
	ISZ TYPE
	TLS
	CLA
TYPWT,	TSF
	JMP .-1
	JMP I TYPE

/ SUBROUTINE PUTK ; OUTPUTS 1 CHAR TO OUTPUT DEVICE
/ UNLESS INHIBIT SWITCH IS ON, WHEN OUTPUT IS INHIBITED
PUTK,	0	; TM2=TYPE
	DCA TM2
	TAD IPRINT
	SZA CLA
	JMP I PUTK
	TAD TM2
	JMS I ACOUT	/ IN SAME FIELD
	JMP BADFO	/ BAD FILE
	JMP I PUTK

/ HELP OUT UNCHN
FLAR,	TAD IA
	AND (177
	SNA CLA
	JMP UNCHNX	/ CODE ENDS AT END OF PAGE
	TAD IA
	JMP UNCNX2	/ FREE SPACE ENDS ON THIS PAGE

	PAGE
CALCHN, 0
	DCA SAVE
	JMS CHAIN
	DCA NWDS
	DCA OFLOW
	TAD SAVE
	JMP I CALCHN

/ SUBROUTINE CHAIN ; OUTPUT CODE BLOCK INFORMATION
/ & APPEND NEW BLOCK TO CURRENT CHAIN
CHAIN,	0
	TAD NWDS
	SNA
	TAD OFLOW
	SNA CLA
	JMP I CHAIN	/ NO WORDS IN BLOCK

	CLA CMA
	DCA OVL		/ SET OVERLAY FLAG
	CLA CMA
	TAD IA
	TAD NWDS
	DCA FA
	TAD NOSTOR
	SZA CLA
	JMP OUT		/ JUST OUTPUT INFO
	DCA TELTAL
	CLL CLA CMA
	TAD IA
	CIA		/ L=1 UNLESS IA=0 OR 1
	DCA CMPR1

	TAD HDCHN
	CDF 10
NXTBLK,	DCA PTRA
	TAD I PTRA
	DCA PTRB
	TAD PTRB
	SNA
	JMP XIT		/ END OF CHAIN
	IAC
	DCA PTRC
	TAD CMPR1
	SPA SNA SZL	/ SKIP IF IA=0
	TAD I PTRC
	SNL
	JMP EX2
	CLA IAC		/ FA(CB)<IA-1
	TAD PTRC
	JMP NXTBLK

/ IF ACC=0, NO OVERLAY THIS SIDE
EX2,	SNA CLA
	DCA OVL		/ CLEAR OVERLAY FLAG
	CLL CLA CMA
	TAD I PTRB
	CIA
	SPA SNA SZL	/ SKIP IF IA(CB)=0 ( ACC=1 & L=0 )
	TAD FA
	SNL		/ SKIP IF FA<IA(CB)-1
	JMP MERGE
	CLA
XIT,	DCA OVL		/ NEW BLOCK CAN'T OVERLAY

/ GET NEW BLOCK FROM FREE CHAIN & LINK INTO FIELD CHAIN
	TAD FREE
	SNA
	JMP FATL	/ NO FREE BLOCKS LEFT ; FATAL ERROR
	DCA NBP		/ NEW BLOCK POINTER
	TAD I NBP
	DCA FREE	/ UNCHAIN CURRENT BLOCK FROM FREE LIST
	TAD NBP
	DCA I PTRA	/ CHAIN ONTO FIELD CHAIN AT TOP
	TAD IA
	DCA I NBP
	ISZ NBP
	TAD FA
	DCA I NBP
	ISZ NBP
	TAD PTRB
	DCA I NBP	/ CHAIN ONTO FIELD CHAIN AT BOTTOM
	JMP OUT

/ MERGE THIS BLOCK INTO ALREADY EXISTING ONES
/ NOTE THAT EXISTING BLOCKS MAY DISAPPEAR AS A RESULT
MERGE,	SNA CLA
	DCA OVL		/ NO OVERLAY THIS SIDE
/ FIX MIN OF IA & IA(CB) INTO IA(CB)
	TAD IA
	CLL CIA
	TAD I PTRB
	SZL
	CLA
	TAD IA
	DCA I PTRB

/ FIX MAX OF FA & FA(CB) INTO FA(CB)
NXPMG,	TAD FA
	CLL CIA
	TAD I PTRC
	SNL
	CLA
	TAD FA
	DCA I PTRC

/ NOW EXAMINE NEXT BLOCK FOR OVERLAY
	CLA IAC
	TAD PTRC
	DCA PTRA
	TAD I PTRA	/ EXAMINE NEXT POTENTIAL MERGE BLOCK
	DCA PTRB
	TAD PTRB
	SNA CLA
	JMP OUT
	CLL CLA CMA
	TAD I PTRB	/ MUST BE >0
	CIA
	TAD FA		/ ONLY FA CAN CHANGE STATUS QUO
	SZL
	JMP OUT-1	/ NO OVERLAY
	SZA CLA
	CMA
	TAD OVL
	DCA OVL		/ ADJUST OVERLAY FLAG

/ CHAIN THIS BLOCK ONTO FREE LIST & EXTRACT CONTENTS
	TAD FREE
	DCA I PTRB
	TAD PTRB
	DCA FREE
	ISZ PTRB
	TAD I PTRB
	DCA I PTRC
	ISZ PTRB
	TAD I PTRB
	DCA I PTRA
	JMP NXPMG

	CLA
OUT,	JMS OBLOK	/ PRINT INFORMATION
	JMP I CHAIN

	PAGE
/ BAD BINARY FILE
NOTGF,
ERROR,
BADF,
ABADF,
RBADF,	CLA CMA
	DCA T1
	TAD (TYPE
	DCA ACOUT
	DCA IPRINT

BADF2,	TAD (FILM
	JMS I APUTXT	/ "FILE NN NOT VALID BINARY FILE"
	TAD NCIF
	JMS I ATRTD
	TAD (FILM2
	JMS I APUTXT
	ISZ T1
	JMP .+6
	TAD (OCHAR
	DCA ACOUT
	TAD ANL
	JMS I APUTXT
	JMP BADF2
	TAD RSW
	SZA CLA
	JMP .+5
	ISZ IPRINT
	CMA
	DCA XSW		/ INHIBIT PRINT & SUMMARY
	ISZ NOSTOR	/ & STORAGE
	JMS PURGE
	JMP EOF

/ SUBROUTINE TO PRINT BLOCK INFO
OBLOK,	0
	ISZ NBOLC
	JMP MIDDLE	/ MIDDLE OF LINE
	JMS OMESS
	JMP MIDDLE+2

MIDDLE,	TAD (SPACE3
	JMS I APUTXT
	TAD FLD
	JMS I APUTK
	TAD IA
	JMS I (TRTOCT
	TAD (SEP
	JMS I APUTXT
	TAD FLD
	JMS I APUTK
	TAD FA
	JMS I (TRTOCT
	TAD LSW
	SNA CLA
	JMP TOVL
	TAD (" 
	JMS I APUTK
	TAD OFLOW
	SNA
	TAD (" -"0
	TAD ZERO
	JMS I APUTK
	TAD NWDS
	JMS I (TRTOCT
TOVL,	TAD OVL
	SZA CLA
	TAD (STAR-SPACE2
	TAD (SPACE2
	JMS I APUTXT
	JMP I OBLOK

/ TRANSLATE TO DECIMAL (0 TO 99)
TRTDEC,	0
	DCA TEMP
	DCA CTR
	TAD TEMP
	ISZ CTR
	TAD (-12
	SMA
	JMP .-3
	TAD (12+"0
	DCA TEMP
	CMA
	TAD CTR
	SNA
	JMP .+3
	TAD ZERO
	JMS I APUTK
	TAD TEMP
	JMS I APUTK
	JMP I TRTDEC

/ SUBROUTINE TO CLEAR PERMANENT OPTIONS
CLPO,	0
	DCA NPL
	DCA FSW
	DCA KSW
	DCA LSW
	DCA RSW
	DCA XSW
	JMP I CLPO

	PAGE
/ TEXT STRINGS
STARTM,	TEXT "_CORMAP  V4  "
MONTH,	TEXT "JAN@FEB@MAR@APR@MAY@JUN@JUL@AUG@SEP@OCT@NOV@DEC"
SP7,	TEXT " 7"
SP4OP,	TEXT "    OPTIONS "
POPL,	TEXT "/F/K/L/R/X"
SLN,	TEXT "/N"
SLS,	TEXT "/S"
FILE,	TEXT "_ _FILE "
LOCOP,	TEXT " ; LOCAL OPTIONS /"
CKSERR,	TEXT "CHECKSUM ERROR_"
NL3,	TEXT "___"
NL2,	TEXT "__"
NL=NL3+1
SPACE4,	TEXT "    "
SPACE3,	TEXT "   "
SPACE2=SPACE4+1
SEP,	TEXT " - "
SEL,	TEXT "__START    END  "
LNGTH,	TEXT "LENGTH"
STAR,	TEXT " *"
SPMES,	TEXT "ONLY "
SPMES2,	TEXT " MORE INPUT FILES ALLOWED_"
TOOMNY,	TEXT "TOO MANY INPUT FILES_"
WLOKM,	TEXT "WRITE-LOCKED/READ-ONLY OUTPUT ; RESPECIFY_"
NDFO,	TEXT "SPECIFY OUTPUT_"
OFERR,	TEXT "OUTPUT FILE ERROR_"
AREAS,	TEXT "_AREAS LOADED"
AREAF,	TEXT "_FREE AREAS"
FILM,	TEXT "_FILE "
FILM2,	TEXT " NOT VALID BINARY FILE_"
MPFUL,	TEXT "MAP FULL_"
NFSIF,	TEXT "NO FREE SPACE IN FIELD "

/ DEVICE HANDLER RESIDENCY TABLE SAVE AREA
DHRTSA,	ZBLOCK 16

/ INPUT FILE LIST ( ROOM FOR 64 FILES & OPTIONS )
NONE,	TEXT "NONE"	/ LEADING 0 FOR FILE LIST
FIFL,	ZBLOCK LFT

*4000
LFT=.-FIFL		/ LENGTH OF INPUT FILE LIST
NFT=LFT-1%2		/ NO OF 2-WORD BLOCKS IN FILE LIST
/ PS/8 I/O MACROS (8BAL) (DMK) (MUCH MODIFIED !!)

	ZZZ=0	/FOR FILL-INS

ICHRP2=.
IOPEN,	.-.
	TAD I NXIFA	/ IN PAGE 0 OF THIS FIELD
	ISZ NXIFA
	SNA
	JMP IOPNRT
	AND (17
	TAD (7647-1	/ ADDR OF DEVICE HANDLER RESIDENCY TABLE
	DCA IHNDAD
	TAD I NXIFA
	ISZ NXIFA
	DCA IBLK	/ SET START BLOCK
	CDF 10
	TAD I IHNDAD	/ GET HANDLER ADDRESS
	DCA IHNDAD	/ & STORE
	TAD (ICHR2
	DCA ICHRS1
	TAD (CURFLD
	TAD ICHRP1-1
	DCA ICHRP1-1
	ISZ IOPEN
	CDF CURFLD
IOPNRT,	JMP I IOPEN

IHNDAD,	0		/ INPUT HANDLER ADDRESS
ICNT,	0

ICHAR,	.-.
	JMP I ICHRS1

ICHR2,	CDF CURFLD
	CIF 0
	JMS I IHNDAD
	 ZZZ		/ SET BY HANDLER-FETCHER
ICHRP1,	 ZZZIB
IBLK,	 ZZZ
	SMA
	SKP CLA
	JMP I ICHAR	/RETURN ERROR
	TAD ICNTSV	/ SET BY HANDLER-FETCHER
	DCA ICNT
	TAD ICHRP1
	DCA ICHRP2
	TAD IBLK
	TAD ICNBSV	/ SET BY HANDLER-FETCHER
	DCA IBLK
ICHR3,	TAD I ICHRP2
	JMS ICHRS1
	TAD I ICHRP2
	JMS ICHRS1
	CMA CLL RTL
	TAD ICHRP2
	DCA ICHRP2
	JMS ICHRS2
	JMS ICHRS2
	RAL
	JMS ICHRS1
	ISZ ICNT
	JMP ICHR3
	JMP ICHR2

ICHRT1=.
ICHRS1,	.-.
	ISZ ICHRP2
	AND (377
	TAD (-232	/^Z
	SNA
	JMP I ICHAR
	TAD (232
	ISZ ICHAR
	JMP I ICHAR

ICHRS2,	.-.
	DCA ICHRT1
	ISZ ICHRP2
	TAD I ICHRP2
	AND (7400
	TAD ICHRT1
	RTL
	RTL
	JMP I ICHRS2

/ LOCK IN USR
USRLOK,	0
	TAD TELTAL	/ ANY FIELD 1 ?
	SNA CLA
	JMP .+5
	CLL CMA RAL
	AND I (7746	/ GET JSW
	IAC
	DCA I (7746	/ FIELD 1 NOT SAVED
	CIF 10
	JMS I P7700
	10
	JMP I USRLOK

/ DISMISS USR
USRRLS,	0
	CIF 10
	JMS I P200
	11
	CLL CMA RAL
	AND I (7746
	DCA I (7746	/ SAVE FIELD 1
	JMP I USRRLS
	PAGE

OWRIT,	.-.
	TAD OCHRP1
	CIA
	TAD OCHRP2
	TAD (177
	AND P7600
	CLL RAR
	DCA OWRTT1
	TAD OWRTT1
	CLL RTR
	RTR
	RTR
	SNA
	JMP OWRIT1
	IAC
	RAR
	TAD OLEN
	DCA OLEN
	CLL
	TAD OLIM
	TAD OLEN
	SZL CLA
	JMP I OWRIT
	TAD OWRTT1
	TAD (4000
	DCA OWRTT1
	CIF 0
	JMS I OHNDAD
OCHRT1=.
OWRTT1,	 ZZZ
OCHRP1,	 ZZZOB
OBLK,	 ZZZ
	 JMP OWRTE1
	TAD OBLK
	TAD (ZZZOR
	JMS OSETUP
OWRIT1,	ISZ OWRIT
	JMP I OWRIT
OWRTE1,	CLA
	JMP I OWRIT

OHNDAD, 0

OCLOS,	.-.
	CDF CURFLD
	TAD (232
OCLO1,	JMS OCHAR
	 JMP I OCLOS
	TAD OCNT
	AND (77
	SZA CLA
	JMP OCLO1
	JMS OWRIT
	 JMP I OCLOS
	JMS I AUSRL	/ LOCK IN USR
	TAD OFT
	CIF 10
	JMS I P200	/ USR IS LOCKED IN
	 4
	 OFLNM
OLEN,	 ZZZ
	 JMP OCLOE1
	DCA OOPNI1
	ISZ OCLOS
	JMP I OCLOS
OCLOE1,	STL RAR
	JMP I OCLOS

OCNT, 0

OCHAR,	.-.
	AND (377
	DCA OCHRT1
	JMP I OCHRS1
OCHR1,	ISZ OCHAR
OCHR2,	JMS OCHRS1
	JMS OCHRS2
	JMS OCHRS2
	CMA CLL RAL
	TAD OCHRP2
	DCA OCHRP2
	JMS OCHRS3
	JMS OCHRS3
	ISZ OCNT
	JMP OCHR1
	CDF CURFLD
	JMS OWRIT
	 JMP OCHRE1
	JMP OCHR1

OCHRS1,	.-.
	JMP I OCHAR

OCHRS2,	.-.
	TAD OCHRT1
	DCA I OCHRP2
	ISZ OCHRP2
	ISZ OCHAR
	JMS OCHRS1
	JMP I OCHRS2

OCHRS3,	.-.
	TAD OCHRT1
	CLL RTL
	RTL
	DCA OCHRT1
	TAD OCHRT1
	AND (7400
	TAD I OCHRP2
	DCA I OCHRP2
	ISZ OCHRP2
	JMP I OCHRS3

OCHRP2, 0
	PAGE

OCHRE1,	CLA		/ERROR FROM OCHR
	DCA OOPNI1
	JMP OCHR2

OOPEN,	.-.
	TAD OOPNI1	/ GET "OPENED" FLAG
	SZA CLA
	JMP OOPNE1	/ONLY 1 OUTPUT FILE OPEN AT A TIME
	TAD OOPNEX
	SNA
	TAD OODFX	/ IF NO SPECIFIC EXTENSION, IMPLY DEFAULT
	DCA OOPNEX
	TAD OFT
	AND (17
	SNA
	JMP I OOPEN
	CIF 10
	JMS I P200	/ USR IS LOCKED IN
	 1
OOPNT1,	 ZZZ
	 JMP OOPNE1
	TAD OOPNT1
	DCA OHNDAD
	TAD (OFLNM
	DCA OOPN1
	TAD OFT
	CIF 10
	JMS I P200
	 3	/ENTER
OOPN1,	 OFLNM
OLIM,	 0
	 JMP OOPNE1
	ISZ OOPNI1
	TAD OOPN1
	JMS OSETUP
	TAD (OCHR2+1
	DCA OCHRS1
	DCA OLEN
	ISZ OOPEN
OOPNE1,	JMP I OOPEN

OSETUP,	.-.
	DCA OBLK
	TAD (-200^ZZZOR
	DCA OCNT
	TAD OCHRP1
	DCA OCHRP2
	JMP I OSETUP

OOPNCW, 0		/ OPEN OUT CONTROL WORD
OFLNM, 0;0;0		/ OUTPUT FILENAME
OOPNEX, 0		/ OUTPUT EXTENSION
OODFX,	1520		/ "MP" ( DEFAULT EXTENSION )

OOPNP1, 0
OOPNP2, 0
OOPNI1, 0

	PAGE

/ ONE-TIME CODE TO TEST FOR BATCH, & DIVERT CONSOLE OUTPUT
STARTT,	TAD .+2
	DCA I ASP1	/ DISCONNECT LINK TO HERE
	JMS I AUSRL	/ LOCK IN USR
	TAD I A7777
	CLL RAL
	SMA CLA
	JMP I EX1TIM+1	/ NO BATCH ; RETURN
	TAD I A7777
	AND Z70
	TAD TTYFAK
	DCA TTYFAK	/ CIF TO BATCH
	TAD I 16
	DCA I 17
	ISZ TEMP	/ OVERWRITE TYPE ROUTINE
	JMP .-3
EX1TIM,	JMP I .+1
	START+2

ASP1,	START+1
A7777,	7777
Z70,	70

TTYFAK,	RELOC TYPE+2
	CIF
	JMS I .+3
	CLA
	JMP I TYPE
	7400		/ LOG TO BATCH
	RELOC

$$$$$$$$