.TITLE LIBRARY UPDATE - V8A (EDIT #1:10-1-70)
/PDP-9 ADVANCED SOFTWARE SYSTEM
/LIBRARY FILE UPDATE
/DAVE LENEY
/29 JAN 70
/COPYRIGHT 1969, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
/
	.ABS
	.LOC 13632
.SCOM=100
SIZE1=6
BSIZE=2000*SIZE1+1000
LISTBF	32002			/LISTING BUFFER
INSN=LISTBF+64
COMAND=LISTBF+67
BUFFER=LISTBF+72
/
/ROUTINE TO BANK RELOCATE UPDATE
START	LAC* (.SCOM
	AND (60000
	DAC BANKBT
CNTR	ADCT
	LAC (ADF-1
	XOR BANKBT
	DAC* (10
	DAC* (11
LOOP	LAC* 10
	XOR BANKBT
	DAC* 11
	ISZ CNTR
	JMP LOOP
CTR	MODCT
	LAC AD00
	DAC CNTR
LOOP1	LAC* CNTR
	XOR BANKBT
	DAC TMP
	LAC* TMP
	XOR BANKBT
	DAC* TMP
	ISZ CNTR
	ISZ CTR
	JMP LOOP1
	DZM CPSW
	JMP BEGIN
TMP	0
	.EJECT
MODF=.
	MOD01
	MOD02
	MOD03
	MOD03A
	MOD04
	MOD05
	MOD06
	MOD07
	MOD10
	MOD11
	MOD12
	MOD13
	MOD14
	MOD15
	MOD16
	MOD17
	MOD20
	MOD21
	MOD22
	MOD23
	MOD24
	MOD25
	MOD26
	MOD27
	MOD30
	MOD31
	MOD32
	MOD33
	MOD34
	MOD35
	MOD36
	MOD37
	MOD40
	MOD41
	MOD42
	MOD43
	MOD44
	MOD45
	MOD46
	MOD47
	MOD50
	MOD51
	MOD52
	MOD53
	MOD54
	MOD55
	MOD56
	MOD57
	MOD60
	MOD61
	MOD62
/
MODL=.
MODCT=MODL-MODF\777777+1
	.EJECT
	.BLOCK MODL-LISTBF\777777+140
/
CPINT	LAC CPSW
	SZA
	JMP CPNTP
BEGIN	CAL+776		/.INIT
	1
MOD01	CPINT
	0
	DZM CPSW
	JMS TYPE		/.WRITE
MOD02	MS01
AGAIN	LAC (NOP		/INITIALIZE SWITCHES TO NOP
	DAC LIST
	DAC UPDATE
	DAC NEW
	DAC ENDSW
	DAC FINIS
	DAC LSTACT
	DAC	CRUNCH
	JMS GETCMD	/GET COMMAND STRING
PROPTS	JMS GET		/CHECK OPTIONS
	SAD (12		/LINE FEED
	JMP PROPTS	/IGNORED
	SAD (137
	JMP ENDOPT	/END OF OPTIONS
	SAD (15		/RETURN
	JMP QUEST
	SAD (175		/ALTMODE
	JMP QUEST-2
	SAD (114		/L
	JMP LISTOP	/LISTING WANTED
	SAD (125		/U
	JMP UPDTMD	/UPDATE MODE
	SAD (116		/N
	JMP NEWOPT	/NEW FILE MODE
	SAD	(123	/S - SHORTEN BY ELIMINATING LOCAL SYMBOLS
	JMP	CRUN0
	JMP PROPTS
	CAL+775
	6
QUEST	JMS TYPE		/.WRITE
MOD07	MS03
	JMP AGAIN
LISTOP	LAC (SKP
	DAC LIST		/LISTING SWITCH
	JMP PROPTS
	.EJECT
UPDTMD	LAC (SKP
	SAD NEW
	JMP QUEST
	DAC UPDATE	/UPDATE SWITCH
	JMP PROPTS
NEWOPT	LAC (SKP
	SAD UPDATE
	JMP QUEST
	DAC NEW		/NEW FILE SWITCH
	JMP PROPTS
CRUN0	LAC	(SKP
	DAC	CRUNCH
	JMP	PROPTS
ENDOPT	JMS SCAN		/FOR FILE NAME
	LAC LASTCH
	SAD (15		/RETURN
	JMP SCANOK
	LAC COMAND	/FILE NAME
	SNA
	JMP ENDOPT	/IGNORE LEADING BLANKS
	JMP .+5
SCANOK	LAC CHARL		/SEE IF RETURN OR ALTMODE
	SNA
	LAC (15
	DAC LASTCH
	LAC COMAND		/CHECK FOR DEFAULT
	SZA		/NAME FOR FILE
	JMP .+6		/USER SPECIFIED NAME
	LAC .LIBRN	/.LIBR BY DEFAULT
	DAC COMAND
	LAC .LIBRN+1
	DAC COMAND+1
	DZM COMAND+2
	LAC LASTCH
	SAD (15		/RETURN
	JMP CONVRT
	SAD (175		/ALTMODE
	JMP ALTFIN
	JMS GET		/UNTIL RETURN OR ALTMODE
	JMP .-5
ALTFIN	LAC (SKP
	DAC FINIS		/EXIT SWITCH
CONVRT	JMS SIXF57	/CONVERT FILE NAME
	.EJECT
MOD27	FILE
	XCT NEW
	SKP
	JMP .+5		/NO INPUT FILE
	CAL+764		/.INIT - INPUT
	1
MOD03	CPINT
	0
	XCT UPDATE
	SKP
	JMP .+3
	XCT NEW
	JMP .+5
	CAL+1763
	1
MOD05	CPINT
	0
	XCT NEW
	SKP
	JMP .+4
	CAL+764		/.SEEK
	3
MOD10	FILE
	LAC WRKEXT		/WORK FILE TYPE
	DAC FILE+2
	XCT UPDATE
	SKP
	JMP .+3
	XCT NEW
	JMP .+4		/NO OUTPUT FILE
	CAL+763
	4
MOD15	FILE
	LAC LSTEXT
	DAC FILE+2
	LAC COMAND
	DAC ENAMEL
	LAC COMAND+1
	DAC ENAMEL+1
	LAC COMAND+2
	DAC ENAMEL+2
	XCT LIST
	JMP .+13		/NO LISTING FILE
	CAL+1766		/.INIT - LISTING
	1
MOD04	CPINT
	0
	CAL+766		/.ENTER
	4
	.EJECT
MOD14	FILE
	DZM PAGECT
	LAW -1
	DAC LINECT
	LAC* (.SCOM+2	/LOWEST FREE LOC
	DAC LB1ST
	DAC LBLAST
	DAC LBNEXT
	LAC* (.SCOM+3	/HIGHEST FREE LOC
	DAC LBFULL
	DZM	NSYMF
	DZM	F
	JMS	INOUT
	LAC	MOD62
	DAC	TBP
	LAW	-3
	DAC	B
	DZM	TO
NXTCMD	JMS GETCMD	/BRING IN COMMAND STRING
	JMS SCAN		/GET 1ST UNIT
	JMS TABLE		/SEARCH TABLE
	JMP WHAT		/ILLEGAL
	LAC* TABLEP
	XOR BANKBT
	DAC TABLEP
	JMP* TABLEP	/DISPATCH
/
WHAT	JMS TYPE		/.WRITE
MOD17	MS03
	JMP NXTCMD
/
INOUT	0
	LAC	(BSIZE	/INITIALIZE OUTPUT BUFFER HEADER WORD
	DAC	OUTBUF
	LAC	MOD61	/INITIALIZE OUTPUT BUFFER NEXT WORD POINTER
	TAD	(2
	DAC	Q
	LAW	-SIZE1	/INITIALIZE 4 WORD GROUPING COUNT
	DAC	OC
	DAC	OC1
	JMP*	INOUT
	.EJECT
/ERROR MESSAGES
NOUPD	JMS TYPE
MOD36	MS06
	JMP NXTCMD
ILLCS	JMS TYPE
MOD37	MS07
	JMP NXTCMD
NOUORN	JMS TYPE
MOD40	MS10
	JMP NXTCMD
NOPGNM	JMS TYPE
MOD41	MS11
	JMP BEGIN
OVERFO	JMS TYPE
MOD42	MS12
	JMP BEGIN
BADINP	JMS TYPE
MOD57	MS17
	JMP BEGIN
BADEOF	JMS TYPE
MOD43	MS13
	LAC (SKP
	DAC ENDSW
	JMP NXTCMD
WRONGP	JMS TYPE
MOD44	MS14
	LAW -1
	DAC CPSW
	JMP .
/
READER	LAC R.DAT
	XOR (777000
	TAD (-1
	CMA
	RTL
	RTL
	AND (160
	XOR (1400
	DAC DATMSG
	JMS TYPE
MOD06	MS16
	JMP BEGIN
	.EJECT
/DELETE PROCESSING
DELETE	XCT UPDATE
	JMP NOUPD
	JMS SCAN		/GET NAME 2
	LAC LASTCH
	SAD (15		/RETURN
	JMP DELOK
	LAC COMAND	/SUPPRESS LEADING SPACES
	SNA
	JMP DELETE+2
DELOK	LAC COMAND	/SEE IF GOOD COMMAND
	SNA
	JMP ILLCS		/NOTHING TO DELETE
	LAC GETP		/SAVE POINTERS
	DAC GETPT
	LAC GETC
	DAC GETCT
	LAC GET1
	DAC GET1T
	LAC GET2
	DAC GET2T
	JMS R50F57
MOD21	NAME2
	JMS DELUNT
	LAC LIST		/SAVE FOR LATER
	DAC SLIST
	LAC UPDATE
	DAC SUPDAT
	LAC (NOP
	DAC LIST		/DELETE WITHOUT LIST OR COPY
	DAC UPDATE
	LAC LASTCH
	SAD (15
	JMP DELDON	/NO MORE
	LAC GETPT		/RESTORE POINTERS
	DAC GETP
	LAC GETCT
	DAC GETC
	LAC GET1T
	DAC GET1
	LAC GET2T
	DAC GET2
DELOOK	JMS SCAN		/GET NAME
	LAC COMAND
	SZA
	JMP MOD60-1
	LAC LASTCH
	SAD (15
	JMP DELDON
	JMP DELOOK
	JMS R50F57
MOD60	NAME2
	JMS POSUNT		/ACTUALLY DELETES BLOCK
DELDON	LAC SLIST		/RESTORE OPTIONS
	DAC LIST
	LAC SUPDAT
	DAC UPDATE
	DZM PROGN		/CLEAR OUT PROG NAME
	DZM PROGN+1
	DZM LSTACT		/PRINT ACTION
	DZM SIZE
	XCT LIST
	SKP
	JMS LINEB		/BUILD LINE + PRINT
	JMP NXTCMD	/ALL DONE ACTION
	.EJECT
/
/REPLACE PROCESSING
REPLAC	XCT UPDATE
	JMP NOUPD
	JMS SCAN		/GET NAME 2 & DEFAULT NAME 1
	LAC LASTCH
	SAD (15		/RETURN
	JMP REPLOK
	LAC COMAND	/SUPPRESS LEADING BLANKS
	SNA
	JMP REPLAC+2
REPLOK	LAC COMAND	/SEE IF GOOD NAME
	SNA
	JMP ILLCS		/NOTHING TO REPLACE
	JMS R50F57
MOD22	NAME1
	JMS R50F57
MOD23	NAME2
	JMS PUSH
	
REPAGN	JMS SCAN		/GET NAME 1
	LAC LASTCH
	SAD (15		/RETURN
	JMP REPOK
	LAC COMAND
	SNA
	JMP REPAGN	/SUPPRESS LEADING BLANKS
REPOK	LAC COMAND	/SEE IF NAME THERE
	SNA
	JMP .+4		/USE SAME AS NAME 2
	JMS R50F57
MOD24	NAME1
	JMS PUSH
	JMS DELUNT	/DELETE OLD
	JMS INSUNT	/INSERT NEW
	JMP NXTCMD
	.EJECT
/INSERT PROCESSING
INSERT	JMS SCAN		/GET NAME 1
	LAC LASTCH
	SAD (15		/RETURN
	JMP INSOK
	LAC COMAND
	SNA
	JMP INSERT
INSOK	LAC COMAND	/SEE IF GOOD NAME
	SNA
	JMP ILLCS		/NOTHING TO INSERT
	JMS R50F57
MOD25	NAME1
	JMS PUSH
	LAC LASTCH
	SAD (15
	JMP INSNAF
INSAGN	JMS SCAN		/GET NAME 2
	LAC LASTCH
	SAD (15		/RETURN
	JMP INSTOK
	LAC COMAND
	SNA
	JMP INSAGN	/SUPPRESS LEADING SPACES
INSTOK	LAC COMAND	/SEE IF NAME THERE
	SZA
	JMP INSAFT	/INSERT AFTER
INSNAF	XCT NEW
	SKP
	JMP .+3
	XCT UPDATE
	JMP NOUORN	/ILLEGAL COMMAND
	JMS INSUNT
	JMP NXTCMD	/ALL DONE ACTION
INSAFT	JMS R50F57
MOD26	NAME2
	XCT UPDATE
	JMP NOUPD		/ILLEGAL COMMAND
	JMS POSUNT
	JMS INSUNT
	JMP NXTCMD	/ALL DONE ACTION
	.EJECT
/END PROCESSING
END	XCT NEW
	SKP
	JMP NOUPD
	XCT ENDSW		/SKIP IF AT END
	JMS POSEOF
	JMP NXTCMD
/
/KILL PROCESSING
KILL	JMP BEGIN		/START OVER
/
/
/CLOSE PROCESSING
CLOSE	JMS SCAN
	LAC LASTCH
	SAD (15
	JMP .+4
	LAC COMAND
	SNA
	JMP CLOSE
	XCT NEW
	SKP
	JMP .+3
	XCT ENDSW
	JMS POSEOF
CLOSOK	LAC COMAND	/SEE IF DEFAULT FILE
	SZA
	JMP .+7		/USER SPECIFIED NAME
	LAC ENAMEL
	DAC COMAND
	LAC ENAMEL+1
	DAC COMAND+1
	LAC ENAMEL+2
	DAC COMAND+2
	JMS SIXF57
MOD33	FILE+3
	XCT NEW
	SKP
	JMP .+3
	XCT UPDATE
	JMP NOCLOS	/NO OUTPUT FILE
	.EJECT
	CAL+763		/.CLOSE
	6
	LAC BINEXT
	DAC FILE+2
	DAC FILE+5
	LAC FILE		/SEE IF BOTH NAMES
	SAD FILE+3	/ARE IDENTICAL
	SKP
	JMP NOTSFL	/NOT SAME NAME
	LAC FILE+1
	SAD FILE+4
	SKP
	JMP NOTSFL	/NOT SAME NAME
	CAL+1763		/.DLETE - ON NEW FILE
	2
MOD34	FILE+3
NOTSFL	LAC WRKEXT
	DAC FILE+2
	CAL+2763		/.RENAM - ON WORK FILE
	2
MOD35	FILE
NOCLOS	XCT LIST
	JMP .+3		/NO LISTING
	CAL+766		/.CLOSE
	6
	XCT NEW
	SKP
	JMP .+3		/NO PRIMARY INPUT
	CAL+764		/.CLOSE
	6
	XCT FINIS
	JMP BEGIN
	CAL		/.EXIT
	15
	.EJECT
/IOPS 5/7 ASCII PACKING ROUTINE
/INITIALIZE:
/	PUTC TO 0
/	PUTP TO 1ST WORD
PUT	0
	AND (177
	DAC PUT1
	CLL
	LAC PUTC		/CHAR POSITION
	TAD (JMP* PUTJ
	DAC .+2
	LAC PUT1
	XX		/MODIFIED JMP
MOD52=.
PUTJ	PUT571		/CHAR 1
MOD53	PUT572		/CHAR 2
MOD54	PUT573		/CHAR 3
MOD55	PUT574		/CHAR 4
MOD56	PUT575		/CHAR 5
PUT571	JMS	SUBS8		/8 RIGHT
	RTR
PUT57A	DZM* PUTP		/CLEAR DATA WORD
	JMP PUTEND
PUT572	RTL		/4 LEFT
	RTL
	JMP PUTEND
PUT573	RTR		/3 RIGHT - 1ST HALF
	RAR
	AND (17
	XOR* PUTP
	DAC* PUTP
	ISZ PUTP		/LAST WORD OF PAIR
	LAC PUT1
	RTR		/4 RIGHT - 2ND HALF
	RTR
	AND (700000
	JMP PUT57A
PUT574	JMS	SUBS8		/8 LEFT
	RTL
	JMP PUTEND
PUT575	RAL		/1 LEFT
	DZM PUTC		/RESET 5/7 COUNTER
	SKP
PUTEND	ISZ PUTC
	XOR* PUTP
	DAC* PUTP
	LAC PUTC
	SNA
	ISZ PUTP		/2ND WD COMPLETE
	LAC PUT1
	JMP* PUT		/RETURN
/IOPS 5/7 ASCII UNPACKING ROUTINE
/INITIALIZE:
/	GETC TO LAW -1
/	GETP TO 1ST WORD
GET	0
	ISZ GETC
	JMP GETS		/WORD PAIR STARTED
	LAC* GETP
	ISZ GETP
	DAC GET1		/FIRST PART
	LAC* GETP
	ISZ GETP
	DAC GET2		/LAST PART
	LAW -5
	DAC GETC		/RESET 5/7 COUNTER
GETS	LAW -10
	DAC GET3		/SHIFT LOOP 7+1/2 TIMES
GETL	LAC GET2
	RAL
	ISZ GET3
	JMP .+3
	AND (177		/GOT CHARACTER
	JMP* GET		/RETURN
	DAC GET2
	LAC GET1
	RAL
	DAC GET1
	JMP GETL		/BACK TO LOOP
/
/TYPE ROUTINE
TYPE	0
	LAC* TYPE
	DAC .+3
	CAL+2775
	11
	XX
	-60
	ISZ TYPE
	JMP* TYPE
/
	.EJECT
/GET COMMAND STRING FROM TT1
GETCMD	0
	CAL+2775		/.WRITE
	11
MOD12	MS02
	-42
	LAC AD03		/(BUFFER+2
	DAC GETP		/SETUP POINTERS + COUNTERS
	LAW -1
	DAC GETC
	CAL+2776		/.READ
	10
MOD13	BUFFER
	-42
	CAL+776		/.WAIT
	12
	CAL+776
	6
	DZM LASTCH
	JMP* GETCMD	/RETURN
	.EJECT
/COMMAND PUSH/POP
PUSH	0
	LAC COMAND
	DAC INSN
	LAC COMAND+1
	DAC INSN+1
	LAC COMAND+2
	DAC INSN+2
	JMP* PUSH
/
POP	0
	LAC INSN
	DAC COMAND
	LAC INSN+1
	DAC COMAND+1
	LAC INSN+2
	DAC COMAND+2
	JMP* POP
/
/SCAN FOR COMMAND UNIT TERMINATED
/   BY SPACE, COMMA, RETURN, OR ALTMODE
SCAN	0
	LAC AD01		/(COMAND
	DAC PUTP		/SETUP POINTER + COUNTER
	DZM PUTC
	DZM CHARL
	DZM COMAND
	DZM COMAND+1
	DZM COMAND+2
	LAC LASTCH
	SAD (15
	JMP* SCAN
SCANL	JMS GET
	SAD (12		/LINE FEED
	JMP .-2		/IGNORED
	SAD (40		/SPACE
	JMP SCANT
	SAD (54		/COMMA
	JMP SCANT
	SAD (15		/RETURN
	JMP SCANT
	SAD (175		/ALTMODE
	JMP SCANAT
	JMS PUT		/FILL UP COMAND
	JMP SCANL		/NEXT CHAR
SCANAT	DAC CHARL
	CAL+775		/.CLOSE
	6
	LAC (15		/ALTMODE TO RETURN
SCANT	DAC LASTCH	/SAVE LAST CHARACTER
	JMP* SCAN		/RETURN
	.EJECT
/TABLE SEARCH ROUTINE
TABLE	0
	LAC AD02		/(COMTAB+1
	DAC TABLEP	/POINTER
	LAC COMTAB
	DAC TABLEC	/COUNTER
NEXTAB	LAC* TABLEP	/GET COMMAND
	SAD COMAND
	JMP COMDOK	/1ST 3 CHARS OK
	ISZ TABLEP
	ISZ TABLEP
LASTNG	ISZ TABLEP
	ISZ TABLEC
	JMP NEXTAB	/TRY NEXT COMMAND
	JMP* TABLE	/ILLEGAL COMMAND
COMDOK	ISZ TABLEP
	LAC* TABLEP	/GET REST
	ISZ TABLEP
	SAD COMAND+1
	SKP
	JMP LASTNG	/NOT RIGNT ONE
	ISZ TABLE
	JMP* TABLE	/GOOD - RETURN
	.EJECT
/CONVERT FROM 5/7 ASCII TO SIXBIT
SIXF57	0
	LAC* SIXF57	/GET FILE ENTRY POINTER
	DAC FILEP		/SAVE
	ISZ SIXF57	/TO RETURN POINT
	LAC COMAND
	RCL
	DAC SAVEC
	AND (770000	/CHARACTER 1
	DAC SAVE
	LAC SAVEC
	RCL
	DAC SAVEC
	AND (7700		/CHARACTER 2
	XOR SAVE
	DAC SAVE
	LAC SAVEC
	RCL
	AND (70		/CHARACTER 3 - PART 1
	XOR SAVE
	DAC SAVE
	LAC COMAND+1
	RTL
	RTL
	DAC SAVEC
	AND (7		/CHARACTER 3 - PART 2
	XOR SAVE
	DAC* FILEP
	ISZ FILEP
	LAC SAVEC
	AND (770000	/CHARACTER 4
	DAC SAVE
	LAC SAVEC
	RCL
	AND (7700		/CHARACTER 5
	XOR SAVE
	DAC SAVE
	LAC COMAND+2
	JMS	SUBS8
	RTL
	AND (77		/CHARACTER 6
	XOR SAVE
	DAC* FILEP
	ISZ FILEP
	LAC BINEXT	/EXTENSION
	DAC* FILEP
	JMP* SIXF57	/DONE
	.EJECT
/OCTAL TO ASCII - ZERO SUPPRESSES
OCTALZ	0
	SNA
	JMP ZEROLC	/CONTENTS = 0
	DAC SAVEZ		/SAVE
	LAW -6
	DAC OCTALC	/6 DIGITS
	LAC (JMP LEADZ
	DAC LEADZX	/RESTORE ZERO SUP
NEXTCZ	LAC SAVEZ		/GET WORD
	RCL
	RTL
	DAC SAVEZ		/SAVE WORD
	RAL
	AND (7
	SNA		/NOT ZERO
LEADZX	JMP LEADZ		/LEADING ZERO
	XOR (60		/MAKE ASCII
	JMS PUT		/OUTPUT
	LAC (NOP
	DAC LEADZX	/PRINT REST OF ZEROS
	ISZ OCTALC
	JMP NEXTCZ	/NEXT DIGIT
	JMP FIXSUP
LEADZ	LAC SUPRES	/SPACE INSTEAD OF ZERO
	SZA		/IGNORE LEADING ZEROS IF 0
	JMS PUT
	JMP LEADZX+5
ZEROLC	LAW -5
	DAC OCTALC	/5 SPACES
	LAC (40
	JMS PUT		/OUTPUT
	ISZ OCTALC
	JMP .-3
	LAC (60		/ZERO
	JMS PUT		/OUTPUT
FIXSUP	LAC (40		/SPACE
	DAC SUPRES
	JMP* OCTALZ	/RETURN
	.EJECT
/RADIX 50 FROM 5/7 ASCII
R50F57	0
	JMS SIXF57	/5/7 TO SIXBIT
MOD47	R50SX
	LAC* R50F57	/GET PLACE TO PUT SYMBOL
	ISZ R50F57	/INDEX TO RETURN
	DAC F57P
	JMS FSQZE		/CONVERT 1ST PART
MOD50	R50SX
	LAC* MOD51
	SNA
	JMP* R50F57	/RETURN
	LAC* F57P
	XOR (400000	/INDICATE PRESENCE OF
	DAC* F57P		/2ND PART
	ISZ F57P
	JMS FSQZE		/CONVERT 2ND PART
MOD51	R50SX+1
	JMP* R50F57	/RETURN
FSQZE	0
	LAC* FSQZE
	DAC F57T3
	DZM* F57P		/CLEAR ENTRY
	LAW -3
	DAC F57C		/3 CHARS
FSQZN	LAC* F57T3		/GET CHARACTER
	RTL
	RTL
	RTL
	DAC* F57T3
	RAL
	AND (77		/6 BIT
	DAC F57T1		/SAVE
	DAC F57T2
	AND (40
	SNA
	JMP FSQOK		/A-Z
	LAC F57T1
	AND (20
	SNA
	JMP FSQ.%
	LAC F57T1		/0-9
	TAD (777755
	DAC F57T1
	JMP FSQOK
	.EJECT
FSQ.%	LAC (33		/.
	DAC F57T1
	LAC F57T2		/ACTUAL CHAR
	SAD (56		/SKIP IF PERIOD
	ISZ F57T1		/%
FSQOK	LAC* F57P		/PREVIOUS CHARS
	RCL		/TIMES 50 (8)
	RTL
	DAC F57T2
	RTL
	TAD F57T2
	TAD F57T1		/NEW CHAR
	DAC* F57P
	ISZ F57C		/3 TIMES
	JMP FSQZN
	ISZ FSQZE		/BUMP TO RETURN
	JMP* FSQZE
	.EJECT
/RADIX 50 TO 5/7 ASCII
R50T57	0
	LAC PROGN
	AND (177777	/CLEAR BITS (0-1)
	JMS UNSQZE	/UNPACK PART 1
	LAC PROGN
	SPA!CLA		/DEFAULT PART 2=0
	LAC PROGN+1	/REAL PART 2
	JMS UNSQZE	/UNPACK PART 2
	JMP* R50T57	/RETURN
UNSQZE	0
	DAC T57T1		/SAVE SYMBOL
	LAW 17775
	DAC T57C		/FOR 3 CHARS
	LAC AD06
	DAC T57T2		/ADDRESS OF R50 CONSTANTS
UNSQX	LAC T57T1		/GET SYMBOL
	DZM T57T3		/CLEAR CHAR GENERATOR
	TAD* T57T2	/ADD CONSTANT
	SPA
	JMP .+4
	ISZ T57T3		/INDEX GENERATOR
	DAC T57T1		/SAVE SYMBOL
	JMP .-5
	LAW 17745
	TAD T57T3		/CHECK GENERATED CHAR
	SMA
	TAD (123		/ONLY IF NEG
	TAD (33
	XOR (100		/BIT 7 MAYBE
	SAD (56
	LAC (45		/%
	SAD (57
	LAC (56		/.
	SAD (72
	LAC (43		/#
	SAD (100
	LAC (40		/SPACE
	AND (177		/7-BIT ASCII
	JMS PUT		/INTO BUFFER
	ISZ T57T2		/NEXT R50 CONSTANT
	ISZ T57C
	JMP UNSQX		/NEXT CHAR
	JMP* UNSQZE	/RETURN
	.EJECT
/NEW PAGE ROUTINE
NEXTPG	0
	LAC LISTNG	/PUSH
	DAC SAVEL
	LAW -64
	DAC LINECT
	LAC	AD07		/PACK FILE NAME AND PAGE #
	DAC	PUTP
	DZM	PUTC
	LAC	AD08		/GET COMMAND FROM ENAMEL
	DAC	GETP
	CLC
	DAC	GETC
	LAW	-6
	DAC	WICK33
WICK34	JMS	GET
	SNA
	LAC	(40		/CHANGE NULLS INTO SPACE
	JMS	PUT
	ISZ	WICK33
	JMP	WICK34
	LAC	(11		/TAB
	JMS	PUT
	LAC	(11
	JMS	PUT
	LAC	(120		/P
	JMS	PUT
	LAC	(101		/A
	JMS	PUT
	LAC	(107		/G
	JMS	PUT
	LAC	(105		/E
	JMS	PUT
	LAC	(40		/SPACE
	JMS	PUT
	ISZ PAGECT	/INCREMENT PAGE NO.
	LAC PAGECT
	DZM SUPRES		/ZERO SUPPRESS WITH RO
	JMS OCTALZ	/OCTAL TO ASCII
	LAC	(15		/C.R.
	JMS	PUT
	XCT LIST
	JMP* NEXTPG
	JMS LISTNG
MOD03A	MS03A		/CR-LF FOR TTY
	JMS LISTNG	/PAGE NO.
MOD11	MS04
	JMS LISTNG	/BLANK LINE
MOD16	MS05
	JMS LISTNG	/HEADING
MOD45	MS15
	JMS LISTNG	/BLANK LINE
MOD46	MS05
	LAC SAVEL		/POP
	DAC LISTNG
	JMP* NEXTPG
	.EJECT
/LISTING SUBROUTINE
/CALLING SEQUENCE:
/	JMS LISTNG
/	BUFFER		/BUFFER POINTER
/	RETURN
LISTNG	0
	ISZ LINECT
	SKP
	JMS NEXTPG		/NEW PAGE
	LAC (32002
	DAC LISTBF
	LAC* LISTNG	/BUFFER ADDRESS
	DAC LSTBUF
	CAL+766		/.WAIT
	12
	CAL+2766		/.WRITE
	11
LSTBUF	0
	-100
	ISZ LISTNG
	JMP* LISTNG
	.EJECT
/LISTING LINE BUILD ROUTINE
/	LSTACT ZERO IF ACTION PRINTED
LINEB	0
	CAL+766		/.WAIT
	12
	LAC AD05		/(LISTBF+2
	DAC PUTP
	DZM PUTC
	LAC (40		/SPACES
	JMS PUT
	LAC (40
	JMS PUT
	LAC (40
	JMS PUT
	JMS R50T57	/RADIX 50 TO 5/7 ASCII
	LAW -11
	DAC GET1
	LAC (40		/SPACES
	JMS PUT
	ISZ GET1
	JMP .-3
	LAC SIZE
	JMS OCTALZ	/OCTAL TO 5/7 ASCII
	LAC LSTACT
	SZA		/CHECK ACTION SWITCH
	JMP PRINT		/NO ACTION
	LAW -10
	DAC GET1
	LAC (40		/SPACES
	JMS PUT
	ISZ GET1
	JMP .-3
	LAC AD03		/(BUFFER+2
	DAC GETP
	LAW -1
	DAC GETC
	JMS GET
	SAD (175		/ALTMODE
PRINT	LAC (15		/FORCE RETURN
	SAD (15		/RETURN
	JMP .+3
	JMS PUT
	JMP .-6
	DAC LSTACT	/NO ACTION
	JMS PUT
	JMS LISTNG
MOD20	LISTBF
	JMP* LINEB	/RETURN
	.EJECT
/READ ROUTINE INTO FREE AREA
/   IF READSW 0 OR NEG - DOUBLE BUFFER
/   IF READSW POS      - SINGLE BUFFER
READ	0
	LAC R.DAT		/.DAT SLOT BEING READ
	DAC C.DAT1
	DAC C.DAT2
	DAC C.DAT3
	SAD (764
	XCT ENDSW
	SKP
	JMP BADEOF
	LAC READSW
	SPA		/IN DOUBLE BUFFERING
	JMP C.DAT2	/TO .WAIT
	SNA!CLA!CMA
	DAC READSW		/BEGIN DOUBLE BUFFERING - OR SINGLE READ
	LAC LB1ST
	DAC LBNEXT
	DAC LBRD1
C.DAT1	CAL		/.READ - .DAT SLOT LATER
	10
LBRD1	0		/BUFFER ADDRESS
	-100
C.DAT2	CAL		/.WAIT - .DAT SLOT LATER
	12
JMPWAT	LAC LBNEXT		/UPDATE LAST BUFFER
	DAC LBLAST	/FILLED POINTER
	CLC
	DAC TEM12
	LAC* LBLAST	/GET LB HEADER
	AND (17		/GET MODE BITS
	SAD (5		/EOF
	JMP* READ
	SAD (6		/EOM
	JMP* READ
	ISZ READ		/TO NORMAL RETURN
	LAC* LBLAST	/GET LB HEADER
	AND (60		/GET VD BITS
	SZA
	JMP READER	/READ ERROR TYPEOUT
	.EJECT
	LAC* LBLAST	/GET LB HEADER
	AND (377000	/GET WPC
	JMS	SUBS8
	RTR
	DAC LBWC		/NO OF WORDS IN BUFFER
	DAC LBWCT
	LAC READSW
	SMA
	JMP* READ
	LAC LBWC
	TAD LBLAST
	DAC LBNEXT
	CMA
	TAD LBFULL	/END OF BUFFER
	SPA
	JMP OVERFO	/BUFFER OVERFLOW
	JMS SEARCH
	JMP C.DAT3
	JMP CRTEOF
	LAW -2
	TAD SEARCH
	DAC SEARCH
	JMP PROCES
C.DAT3	CAL		/.READ - .DAT SLOT LATER
	10
LBNEXT	0		/BUFFER ADDRESS
	-100
	JMP .+3
CRTEOF	LAC (1005
	DAC* LBNEXT
	LAC LBWCT
	DAC LBWC
	JMP* READ
/WAIT ROUTINE
WAIT	0
	LAC R.DAT
	DAC C.DAT4
	DAC SHRTPG
C.DAT4	CAL		/.WAIT - .DAT SLOT LATER
	12
	DZM READSW	/CLEAR READ UNDERWAY
	LAC WAIT
	DAC READ
	JMP JMPWAT
	.EJECT
/BUFFER SEARCH ROUTINE
/CALLING SEQUENCE:
/	JMS SEARCH
/	RETURN		/ON NORMAL BUFFER
/	RETURN		/ON END CODE
/	RETURN		/ON PROG NAME
SEARCH	0
	LAC LBLAST	/BUFFER ADDRESS
	TAD (2
	DAC CONTLP	/CONTROL WORD
	TAD (1
	DAC DATAP		/DATA WORD
	LAC LBWC		/WORD COUNT
	CMA
	TAD (3		/2'S COMP MINUS HEADER
	DAC LBWC
NXCNTL	LAW -3
	DAC CONTLC	/3 CODES PER WORD
	LAC* CONTLP	/GET CONTROL WORD
	SKP
NXCODE	LAC CODESV	/GET CONTROL WORD
	RTL
	RTL
	RTL
	DAC CODESV	/SAVE FOR LATER
	RAL
	AND (77		/GET CODE
	SAD (1
	JMP CODE01	/SIZE
	SAD (7
	JMP CODE07	/SYMBOL - 1ST PART
	SAD (10
	JMP CODE10	/SYMBOL - 2ND PART
	SAD (23
	JMP CODE23	/DEF - MAY BE PROG NAME
	SAD (27
	JMP CODE27	/END CODE
PROCES	ISZ LBWC
	ISZ DATAP
	ISZ CONTLC
	JMP NXCODE	/NEXT IN THIS WORD
	ISZ DATAP		/NEXT DATA WORD
	ISZ LBWC
	SKP
	JMP* SEARCH	/RETURN
	LAC CONTLP
	TAD (4
	DAC CONTLP
	JMP NXCNTL
	.EJECT
CODE01	LAC* DATAP
	DAC SIZE		/SAVE SIZE
	JMP PROCES
CODE07	LAC* DATAP
	DAC SYMBL		/SYMBOL PART 1
	JMP PROCES
CODE10	LAC* DATAP
	DAC SYMBL+1	/SYMBOL PART 2
	JMP PROCES
CODE23	LAC* DATAP
	SMA
	JMP PROCES	/NOT PROG NAME
	ISZ TEM12		/IS PROG NAME
	JMP CODE27-1
	LAC SYMBL
	DAC PROGN		/SAVE
	LAC SYMBL+1
	DAC PROGN+1
	ISZ SEARCH
CODE27	ISZ SEARCH	/ENTER HERE IF END CODE
	JMP* SEARCH	/RETURN
	.EJECT
/WRITE ROUTINE FROM BUFFERS
OUTBUF	BSIZE		/OUTPUT BUFFER
	0
	.BLOCK	4*SIZE1
MOD62	MOD62+1		/TEMPORARY STORAGE FOR OUTPUT LOADER GROUPING
TB	.BLOCK	3
WRITE	0
	DZM	FEND	/INIT. FLAG FOR END OF OUTPUT
	LAC	LB1ST	/1ST BUFFER
	JMP	R1
R2	TAD	(2
	DAC	P	/SET POINTER FOR FIRST WORD TO BE OUTPUT
	LAC*	LBWRT	/CALCULATE NUMBER OF WORDS IN CURRENT BUFFER
	AND	(377000
	JMS	SUBS8
	RTR
	DAC	IC1
	CMA
	TAD	(3
	DAC	IC
	SMA
	JMP	R
QQ	LAW	-4	/OUTPUT IN GROUPS OF 4
	DAC	C
	LAC*	P	/FIRST WORD OF GROUP IS LOADER CODES WORD
	DAC	T
S	ISZ	P
	LAC	T
	ISZ	IC
	RTL!SKP
	JMP	R	/FINISHED WITH THIS BUFFER
	ISZ	C
	RTL!SKP
	JMP	QQ	/START NEW 4 WORD GROUP
	RTL
	DAC	T	/LEAVE NEXT LOADER CODE IN POSITION
	RAL
	AND	(77	/EXTRACT THIS LOADER CODE
	DAC	TS
	TAD	(XCT	TAB	/COMPUTE ACTION TO BE PERFORMED
	DAC	.+2
	LAC*	P
	XCT	.
	JMP	S
R	ISZ	FEND
	SKP
	JMP*	WRITE	/END OF CURRENT OUTPUT
	LAC	LBWRT
	TAD	IC1
R1	DAC	LBWRT
	SAD	LBLAST
	SKP
	JMP	R2
	LAC*	LBLAST	/CHECK IF LAST BUFFER CONTAINS EOF INDICATION
	AND	(17
	SAD	(5
	JMP*	WRITE	/YES,EXIT
	CLC		/NO,OUTPUT FILE AND THEN EXIT
	DAC	FEND
	LAC	LBWRT
	JMP	R2
SO	ISZ	NSYMF	/HAS CURRENT SYMBOL BEEN OUTPUT
	JMP	NOSYM	/YES
	LAC	TS	/NO OUTPUT
	DAC	TSS	/TEMPORARY STORE LOADER CODE
	LAC	(7
	DAC	TS	/LOADER CODE FOR SYM
	LAC	SYM
	SMA
	JMP	ASO	/3 LETTER SYMBOL
	JMS	OUT
	LAC	(10
	DAC	TS
	LAC	BOL
ASO	JMS	OUT
	LAC	TSS	/RESTORE LOADER CODE
	DAC	TS
	LAC*	P
NOSYM	JMS	OUT
	JMP	S	/FETCH NEXT INPUT WORD
DACSYM	DAC	SYM
	CLC
	DAC	NSYMF
	JMP	S
CRUN1	SMA
CRUNCH	NOP	/SKP MEANS DELETE LOCAL SYMBOLS
	JMP	SO
	JMP	S
SUBS8	0		/PERFORM LONG ROTATES
	CLL
	XCT*	SUBS8
	XCT*	SUBS8
	XCT*	SUBS8
	JMP*	SUBS8
TAB	NOP		/0 LOADER CODE
	JMS	OUT	/1
	JMS	OUT	/2
	JMS	OUT	/3
	JMS	OUT	/4
	JMS	OUT	/5
	JMS	OUT	/6
	JMP	DACSYM	/7
	DAC	BOL	/8
	JMP	SO	/9
	JMP	SO	/10
	JMS	OUT	/11
	JMP	SO	/12
	JMS	OUT	/13
	JMS	OUT	/14
	JMS	OUT	/15
	JMS	OUT	/16
	JMS	OUT	/17
	JMS	OUT	/18
	JMP	CRUN1	/19
	JMS	OUT	/20
	JMS	OUT	/21
	JMS	OUT	/22
	JMP	EOR	/23
	NOP		/24
	JMS	OUT	/25
	JMS	OUT	/26
OUT	0		/OUTPUT WORD
	DAC*	TBP	/STORE WORD IN TEMPORARY BUFFER
	ISZ	TBP
	LAC	TO	/PACK CORRESPONDING LOADER CODE
	RTL
	RTL
	RTL
	AND	(777700
	XOR	TS
	DAC	TO
	ISZ	B
	JMP*	OUT	/FINISHED
	DAC*	Q	/STORE GROUP AWAY
	ISZ	Q
	LAC	MOD62	/INITIALIZE TEMPORARY BUFFER POINTER
	DAC	TBP
	DZM	TO	/INITIALIZE LOADER CODE BUFFER
	LAC	TB
	DAC*	Q
	LAC	TB+1
	ISZ	Q
	DAC*	Q
	ISZ	Q
	LAC	TB+2
	DAC*	Q
	ISZ	Q
	LAW	-3	/GO BACK FOR NEXT GROUP
	DAC	B
	ISZ	OC	/COUNT GROUPS
	JMP*	OUT
	JMS	SBOUT	/OUTPUT THIS BUFFER
	JMP*	OUT
SBOUT	0
	CAL+763		/.WRITE -15
	11
MOD61	OUTBUF
	-4*SIZE1-2
	CAL+763		/.WAIT -15
	12
	LAC	OUTBUF	/UPDATE DECTAPE BUFFER POINTER
	JMS	SUBS8
	RTR
	TAD	F
	DAC	F
	JMS	INOUT	/REINITIALIZE OUTPUT FOR NEXT BUFFER
	LAW	-370	/HAVE WE FILLED THIS DECTAPE BUFFER
	TAD	F
	SMA
	JMP	SBX	/YES
	TAD	(4*SIZE1	/CAN WE FIT ONE MORE BUFFER
	SPA!RCR
	JMP*	SBOUT	/YES
	RCR		/NO,COMPUTE SMALLER BUFFER
	TAD	OC
	DAC	OC
	DAC	OC1
	CMA		/COMPUTE NEW HEADER WORD FOR SMALLER BUFFER
	RCL
	TAD	(3
	JMS	SUBS8
	RTL
	RAL
	AND	(377000
	DAC	OUTBUF
	JMP*	SBOUT
SBX	DZM	F	/NEW DECTAPE BUFFER
	JMP*	SBOUT
EOR	JMS	OUT	/EVERY NEW PROGRAM MUST START A FRESH BUFFER
	DZM	TS
	LAW	-3
	SAD	B
	JMP	.+3
	CLA		/FILL UP REMAINING MEMBERS OF LOADER GROUP WITH IGNORED 00 CODES
	JMP	EOR
	DZM	NSYMF	/DO NOT USE SYMBOLS BETWEEN PROGRAMS IN LIBRARY
	CLC
	TAD	OC1
	CMA
	TAD	OC
	SNA
	JMP	R	/LUCKY WE JUST OUTPUT THE LAST BUFFER
	JMS	SUBS8	/COMPUTE SMALLER WORD PAIR COUNT FOR HEADER WORD
	RTL
	RTL
	TAD	(1000
	AND	(377000
	DAC	OUTBUF
	JMS	SBOUT
	JMP	R
	.EJECT
/TO POSITION ON A UNIT
POSUNT	0
POSNXT	DZM READSW
	LAC (764
	DAC R.DAT		/SETUP FOR PRIMARY INPUT
	JMS READ
	JMP BADEOF
	JMS SEARCH
	JMP .-3		/NEXT BUFFER
	JMP NOPGNM		/NO PROGRAM NAME
	LAC NAME2		/POSITION NAME
	SAD PROGN		/NAME FOUND
	JMP POSEQU
NOTPOS	JMS WAIT		/FOR LAST BUFFER
	DZM SHRTPG
	XCT UPDATE
	SKP
	JMS WRITE		/COPY
	XCT LIST
	SKP
	JMS LINEB		/LISTING
	LAC SHRTPG
	SNA
	JMP POSNXT
	JMS SEARCH
	SKP
	JMP POSNXT
	NOP
	LAC (1
	DAC READSW	/NO DOUBLE BUFFERING
POSCPY	JMS READ
	JMP BADEOF
	XCT UPDATE
	SKP
	JMS WRITE		/COPY
	JMS SEARCH
	JMP POSCPY
	JMP POSNXT
	JMP POSCPY
POSEQU	SMA
	JMP .+5		/ONE WORD SYMBOL
	LAC NAME2+1	/PART 2
	SAD PROGN+1
	SKP
	JMP NOTPOS	/NOT RIGHT PROG
	JMS WAIT
	JMP POSEND
/
	.EJECT
POSCNT	JMS SEARCH
	SKP
	JMP POSEND	/END OF RIGHT UNIT
	XCT UPDATE
	SKP
	JMS WRITE
	LAC (1
	DAC READSW		/NO DOUBLE BUFFERING
	JMS READ
	JMP BADEOF
	JMP POSCNT
POSEND	XCT UPDATE
	SKP
	JMS WRITE		/COPY REST OF UNIT
	XCT LIST
	SKP
	JMS LINEB		/LINE OF LISTING
	JMP* POSUNT
	.EJECT
/TO DELETE A UNIT
DELUNT	0
DELNXT	DZM READSW
	LAC (764
	DAC R.DAT		/SETUP FOR PRIMARY INPUT
	JMS READ
	JMP BADEOF
	JMS SEARCH
	JMP .-3		/NEXT RECORD
	JMP NOPGNM	/NO PROG NAME
	LAC NAME2		/NAME LOOKED FOR
	SAD PROGN		/NAME FOUND
	JMP DEQPN
NOTDEL	JMS WAIT		/FOR LAST BUFFER
	DZM SHRTPG
	XCT UPDATE
	SKP
	JMS WRITE		/COPY
	XCT LIST
	SKP
	JMS LINEB		/GIVE LISTING
	LAC SHRTPG
	SNA
	JMP DELNXT
	JMS SEARCH
	SKP
	JMP DELNXT
	NOP
	LAC (1
	DAC READSW	/NO DOUBLE BUFFERING
DELCPY	JMS READ
	JMP BADEOF
	XCT UPDATE
	SKP
	JMS WRITE		/COPY
	JMS SEARCH
	JMP DELCPY
	JMP DELNXT
	JMP DELCPY
DEQPN	SMA
	JMP .+5		/ONE WORD SYMBOL
	LAC NAME2+1	/PART 2
	SAD PROGN+1
	SKP
	JMP NOTDEL	/NOT RIGHT PROG
	JMS WAIT
	JMP* DELUNT
DELCNT	JMS SEARCH
	SKP
	JMP* DELUNT	/DELETE DONE
	NOP
	LAC (1
	DAC READSW	/NO DOUBLE BUFFERING
	JMS READ
	JMP BADEOF
	JMP DELCNT
	.EJECT
/TO INSERT A UNIT
INSUNT	0
CPNTP	CAL+770
	1
MOD32	CPINT
	0
	JMS POP
	JMS SIXF57
MOD30	FILE+3
	CAL+770
	3
MOD31	FILE+3
	DZM READSW
	LAC (770
	DAC R.DAT		/SETUP FOR SECONDARY INPUT
	JMS READ
	JMP WRONGP
	JMS SEARCH
	JMP .-3		/NEXT RECORD
	JMP NOPGNM	/NO PROG NAME
	LAC NAME1		/NAME WANTED
	SAD PROGN		/NAME FOUND
	SKP
	JMP WRONGP	/WRONG PROGRAM
	SMA
	JMP .+5		/ONE WORD SYMBOL
	LAC NAME1+1	/PART 2
	SAD PROGN+1
	SKP
	JMP WRONGP	/WRONG PROGRAM
	JMS WAIT
	DZM SHRTPG
	DZM LSTACT		/TO PRINT ACTION
	XCT LIST
	SKP
	JMS LINEB
	LAC SHRTPG
	SNA
	JMP INSEND
	.EJECT
	JMS SEARCH
	SKP
	JMP INSEND	/END OF INSERTED UNIT
	XCT NEW
	SKP
	JMP .+3
	XCT UPDATE
	SKP
	JMS WRITE
	LAC (1
	DAC READSW	/NO DOUBLE BUFFERING
INSRNX	JMS READ
	JMP BADINP
	JMS SEARCH
	SKP
	JMP INSEND	/END OF UNIT
	NOP
	XCT NEW
	SKP
	JMP .+3
	XCT UPDATE
	SKP
	JMS WRITE
	JMP INSRNX
INSEND	XCT NEW
	SKP
	JMP .+3
	XCT UPDATE
	SKP
	JMS WRITE
	CAL+770		/.CLOSE
	6
	JMP* INSUNT
	.EJECT
/TO POSITION AT END FILE
POSEOF	0
	LAC (764
	DAC R.DAT
	LAC (1
	DAC READSW	/NOT DOUBLE BUFFERED
EOFPNX	JMS READ
	JMP GOTEOF
	XCT UPDATE
	SKP
	JMS WRITE		/COPY
	JMS SEARCH
	JMP EOFPNX
	SKP
	JMP C.DAT3-4
	JMS READ
	JMP GOTEOF
	XCT LIST
	SKP
	JMS LINEB		/LISTING
	JMP EOFPNX+2
GOTEOF	DZM LSTACT	/PRINT ACTION
	XCT LIST
	SKP
	JMS LINEB		/LISTING
	LAC (SKP
	DAC ENDSW
	JMP* POSEOF
	.EJECT
/OUTPUT MESSAGES
MS01	MS02-MS01/2*1000\2
	777777
	.ASCII	'UPDATE V8A'<15>
MS02	MS03-MS02/2*1000\2
	777777
	.ASCII	<3><12>'>'<175>
MS03	MS03A-MS03/2*1000\2
	777777
	.ASCII	<77><15>
MS03A	MS04-MS03A/2*1000\2
	777777
	.ASCII	<12><15>
MS04	MS05-MS04/2*1000\2
	777777
	.ASCII	<14>'    LIBRARY FILE LISTING'
	.ASCII	' FOR '
ENAM1	.BLOCK	10		/LISTING HEADING PACKED INTO HERE
	.EJECT
MS05	MS06-MS05/2*1000\2
	777777
	.ASCII	<12><15>
MS06	MS07-MS06/2*1000\2
	777777
	.ASCII	' VALID ONLY IN U MODE - '
	.ASCII	'COMMAND IGNORED'<15>
MS07	MS10-MS07/2*1000\2
	777777
	.ASCII	' ILLEGAL COMMAND STRUCTURE - '
	.ASCII	'COMMAND IGNORED'<15>
MS10	MS11-MS10/2*1000\2
	777777
	.ASCII	' VALID ONLY IN U OR N MODE'
	.ASCII	' - COMMAND IGNORED'<15>
MS11	MS12-MS11/2*1000\2
	777777
	.ASCII	' PROGRAM NAME MISSING - '
	.ASCII	'DYNAMIC KILL'<15>
MS12	MS13-MS12/2*1000\2
	777777
	.ASCII	' BUFFER OVERFLOW '
	.ASCII	'- DYNAMIC KILL'<15>
MS13	MS14-MS13/2*1000\2
	777777
	.ASCII	' EOF REACHED BY SEARCH - '
	.ASCII	'COMMAND IGNORED'<15>
MS14	MS15-MS14/2*1000\2
	777777
	.ASCII	' WRONG PROGRAM '
	.ASCII	'- CORRECT INPUT AND ^P'<15>
MS15	MS16-MS15/2*1000\2
	777777
	.ASCII	'PROGRAM NAME    PROGRAM SIZE  '
	.ASCII	'  ACTION'<15>
MS16	MS17-MS16/2*1000\2
	777777
	.ASCII	'UNRECOVERABLE READ ERROR ON .DAT -1'
DATMSG	.ASCII	<0>
	.ASCII	' - DYNAMIC KILL'<15>
MS17	MS20-MS17/2*1000\2
	777777
	.ASCII	' BAD SECONDARY INPUT - DYNAMIC KILL'<15>
MS20=.
	.EJECT
/UPDATE COMMAND TABLE
COMTAB	COMTAE-COMTAB-1/3\777777+1
	.ASCII	'DELET'
	DELETE
	.ASCII	'D'
	DELETE
	.ASCII	'REPLA'
	REPLAC
	.ASCII	'R'
	REPLAC
	.ASCII	'INSER'
	INSERT
	.ASCII	'I'
	INSERT
	.ASCII	'END'
	END
	.ASCII	'E'
	END
	.ASCII	'KILL'
	KILL
	.ASCII	'K'
	KILL
	.ASCII	'CLOSE'
	CLOSE
	.ASCII	'C'
	CLOSE
COMTAE=.
	.EJECT
/CONSTANTS AND VARIABLES
BANKBT	0
PUTC	0	/PUT COUNTER
PUTP	0	/PUT POINTER
PUT1	0	/PUT TEMP
GETC	0	/GET COUNTER
GETP	0	/GET POINTER
GET1	0	/GET TEMP 1
GET2	0	/GET TEMP 2
GET3	0	/GET TEMP 3
GETPT	0
GETCT	0
GET1T	0
GET2T	0
SHRTPG	0
LASTCH	0	/LAST CHARACTER
TABLEC	0	/TABLE COUNTER
TABLEP	0	/TABLE POINTER
SAVEC	0	/SAVE COMAND, ETC.
SAVE	0	/SAVE SIXBT, ETC.
FILE	.BLOCK 6	/DIRECTORY ENTRY
ENAMEL	.BLOCK	3
WICK33	0
.LIBRN	.ASCII	'.LIBR'	/LIBRARY FILE
BINEXT	.SIXBT	'BIN'	/BINARY EXT
WRKEXT	.SIXBT	'WRK'	/WORK EXT
PAGECT	0		/NO OF PAGES
LINECT	0		/NO OF LINES PER PAGE
SUPRES	40		/ZERO SUPPRESSION CHAR
LSTEXT	.SIXBT	'LST'	/LISTING EXT
OCTALC	0		/OCTAL COUNT
SAVEZ	0		/SAVE AREA FOR OCTALZ
LBWC	0		/WORD COUNT OF BUFFER
LBWCT	0
LB1ST	0		/FIRST BUFFER POINTER
LBFULL	0		/OVERFLOW POINTER
NAME1	0		/RADIX 50 NAME
	0
NAME2	0		/RADIX 50 NAME
	0
PROGN	0		/RADIX 50 PROG NAME
	0
SYMBL	0		/RADIX 50 SYMBOL
	0
SIZE	0		/BIN PROG SIZE
CONTLP	0		/CONTROL WORD POINTER
DATAP	0		/DATA WORD POINTER
CONTLC	0		/CONTROL WORD COUNTER
CODESV	0		/STORAGE FOR OTHER CODES
SAVEL	0		/PUSH/POP FOR LISTING
R.DAT	0		/READ .DAT SLOT
CHARL	0		/LAST CHAR
FILEP	0		/POINTER TO FILE ENTRY
TEM12	0		/FLAG TO PICK UP FILE NAME ONLY ONCE
	.EJECT
R50SX	0	/SIX BIT SAVE
	0
F57C	0	/FROM 5/7 COUNTER
F57P	0	/FROM 5/7 POINTER
F57T1	0	/TEMPORARY STORAGE
F57T2	0	/TEMPORARY STORAGE
F57T3	0	/TEMPORARY STORAGE
/
R50CT	774700
	777730
	777777
T57C	0	/TO 5/7 COUNTER
T57T1	0	/TEMP STORAGE
T57T2	0	/TEMP STORAGE
T57T3	0	/TEMP STORAGE
/
/
/OPTION SWITCHES
LIST	0		/LISTING SWITCH
SLIST	0
UPDATE	0		/UPDATE SWITCH
SUPDAT	0
NEW	0		/NEW SWITCH
FINIS	0		/COMMAND TERMINATOR
ENDSW	0		/END SWITCH
READSW	0		/READ UNDERWAY SWITCH
LSTACT	0		/ACTION PRINT SWITCH
CPSW	0		/^P SWITCH
/CRUNCH VARIABLES AND CONSTANTS
/
IC	0	/INPUT BUFFER COUNTER
IC1	0	/NUMBER OF WORDS IN CURRENT INPUT BUFFER
C	0	/LOADER GROUP COUNTER
P	0	/POINTER TO CURRENT WORD TO BE OUTPUT
T	0	/LOADER CODES BEING OUTPUT NOW HOLDER
FEND	0	/FLAG SIGNALLING END OF BUFFER
LBLAST	0	/LAST BUFFER FILLED ON INPUT
LBWRT	0	/BUFFER CURRENTLY BEING OUTPUT
TS	0	/TEMPORARY STORAGE LOADER CODE
TSS	0	/TEMPORARY STORAGE OF TS
NSYMF	0	/-1 WHEN SYMBOL IS AWAITING OUTPUT
SYM	0	/FIRST HALF OF OUTPUT SYMBOL
BOL	0	/LAST HALF OF OUTPUT SYMBOL
TBP	0	/OUTPUT LOADER GROUPING BUFFER POINTER
Q	0	/OUTPUT BUFFER NEXT WORD POINTER
OC	0	/OUTPUT LOADER GROUPING COUNTER
OC1	0	/MAXIMUM COUNT OF LOADER GROUPING
TO	0	/LOADER CODE GROUPING LOADER CODE WORD TEMPORARY STORAGE
F	0	/POINTER TO DECTAPE BUFFER NEXT WORD TO BE FILLED
B	0	/LOADER CODE GROUPING MEMBER COUNTER
/
/ADDRESS CONSTANTS
ADF=.
AD00	MODF
AD01	COMAND
AD02	COMTAB+1
AD03	BUFFER+2
AD05	LISTBF+2
AD06	R50CT
AD07	ENAM1
AD08	ENAMEL
ADL=.
ADCT=ADL-ADF\777777+1
/
	.EJECT
	.END