;<135-TENEX>POSTLD.MAC;93     5-DEC-75 13:53:43    EDIT BY ROSENBERG
; REPLACE THE LIST OF MODULES (CONSIDERED FOR SYMBOL DELETION)
; WITH A CALL TO THE "%TENX%" MACRO DEFINED IN PROLOG
;<134-TENEX>POSTLD.MAC;92     5-AUG-75 11:40:33    EDIT BY CLEMENTS
; CHANGE "P2" TO "PATCH2", TO AVOID CONFLICT WITH NEW AC NAME
;<134-TENEX>POSTLD.MAC;91     8-APR-75 22:32:58    EDIT BY CLEMENTS
; SYMBOL DELETER KNOWS JSYS WAS SPLIT UP
;<134-TENEX>POSTLD.MAC;90    13-MAR-75 21:55:13    EDIT BY PLUMMER
; BADSPOT READER APPENDS TO DRMBBT AS ASSEMBLED AND IGNORES DUPLICATES
;<134-TENEX>POSTLD.MAC;89    12-MAR-75 22:40:30    EDIT BY PLUMMER
;<134-TENEX>POSTLD.MAC;88    12-MAR-75 22:17:14    EDIT BY PLUMMER
;<134-TENEX>POSTLD.MAC;87    12-MAR-75 22:07:51    EDIT BY PLUMMER
; ADDED DRUM BAD SPOTS FROM FILE FEATURE
;<133-TENEX>POSTLD.MAC;86     3-OCT-74 13:19:55    EDIT BY CLEMENTS
; MAKE SYMBOL CRUNCHER HALF-KILL LOCALS 0-777 AND ALL 20-777 .
;<133-TENEX>POSTLD.MAC;85    25-SEP-74 14:05:59    EDIT BY CLEMENTS
; REMOVED UPDATING VERSIO.MAC FROM POSTLOD. NOW DONE BY NEWVER.SAV.
;  MUST BE DONE MANUALLY. THIS IS AN ADDED JOB FOR THE SYSTEM GURU, BUT
;  IT SAVES VERSION NUMBERS FOR LOADS THAT YOU DECIDE TO SCRAP.
;<TENEX-132>POSTLD.MAC;83     9-MAY-74 19:35:47    EDIT BY CLEMENTS

	SEARCH PROLOG
	TITLE POSTLD
	BLOCK 40	;LEAVE SOME SPACE AFTER LAST PROG
RESEND:			;DEFINES END OF CODE, SYMTAB MOVED TO HERE

	SWAPCD
SWPF:			; DEFINE SWAPPABLE PATCH SPACE

DDT=DDTX		; DEFINE THIS HERE SO IT'S AVAILABLE

	LOC 4000	;GET THIS CODE OUT OF THE WAY

;POST-LOADING ONE-SHOT INIT

P=17

EXTERN	.JBHRL,.JBREL,.JBSA,.JBFF,.JBSYM

	INTERN RESEND,DDT,SWPF

	EXTERN MONCOR,SYSGO1,WMST,SWPSTP,SWPCOR,DDTX,SWCEND,SVN,SVNUM
	EXTERN SMDSKA,PATCH2,DRMBBT,DRMBST

SYSG0:	MOVE P,[IOWD 40,PDL]
	MOVSI 1,100001		; OLD FILE & STRING SHORT FORM
	HRROI 2,[ASCIZ /MAP.MAP/]
	GTJFN			; GET JFN FOR LOADER MAP
	 JRST NOMAP		; NONE
	PUSH P,1		; SAVE IT
	MOVE 1,SVNUM
	HRLI 1,400001		; FOR OUTPUT & STRING SHORT FORM
	HRROI 2,[SYSNAM(<ASCIZ \LOADER-MAP.>,<\>)]
	GTJFN			; GET JFN FOR LOADER-MAP.SYSTEM
	 JRST [	POP P,1
		RLJFN
		 JFCL
		JRST NOMAP]
	MOVE 2,1
	POP P,1
	RNAMF			; RENAME MAP
	 JFCL

	MOVE 1,2
	RLJFN
NOMAP:	 JRST [	HRROI 1,[ASCIZ /
LOADER MAP NOT RENAMED.
/]
		PSOUT
		JRST .+1]
	PUSHJ P,SMDSKA		;SETUP DSK RELOAD ADDRESSES
	HLRZ 2,.JBHRL
	ADDI 2,SWPMA0		;BASE OF SWP MON PLUS ITS SIZE
	SUBI 2,1
	LSH 2,-^D9
	MOVEM 2,SWCEND
	MOVEI 1,101
	MOVEI 3,^D8
	NOUT
	JFCL
	HRROI 1,[ASCIZ / IS LAST PAGE OF SWAPPABLE CODE.
/]
	PSOUT

; PRINT SPACE REMAINING BETWEEN BOUNDARIES

	HRROI 1,[ASCIZ /
SPACE REMAINING BETWEEN BOUNDARIES:

RES VARS & ASSUMED END =	/]
	PSOUT
	MOVEI 2,ERSLOC
	SUBI 2,RESVLC##
	CALL OCTOT
	HRROI 1,[ASCIZ / -- INCREASE RESLOC SIZE IN PARAMS./]
	SKIPGE 2
	 PSOUT
	HRROI 1,[ASCIZ /
SWP VARS & SWP PAGE VARS =	/]
	PSOUT
	MOVEI 2,NRPLBG
	SUBI 2,NRESLC##
	CALL OCTOT
	HRROI 1,[ASCIZ / -- REDUCE TABLE SIZES OR INCREASE NRPLBG/]
	SKIPGE 2
	PSOUT
	HRROI 1,[ASCIZ /
SWP VARS & SWPMON =	/]
	PSOUT
	MOVEI 2,SWPMA0
	SUBI 2,NRPLOC##
	CALL OCTOT
	HRROI 1,[ASCIZ / -- REDUCE SWP PAG VAR SIZES OR INCREASE SWPMP0/]
	SKIPGE 2
	PSOUT
	HRROI 1,[ASCIZ /
SWPMON & MDDT =	/]
	PSOUT
	MOVEI 2,MDDT
	HLRZ 3,.JBHRL
	ADDI 3,SWPMA0
	SUB 2,3
	CALL OCTOT
	HRROI 1,[ASCIZ / -- REDUCE SWPMP0 OR INCREASE MDDT/]
	SKIPGE 2
	PSOUT
	HRROI 1,[ASCIZ /
JSB STRGE & JFN STRG =	/]
	PSOUT
	MOVEI 2,JFNPC0
	SUBI 2,JSBLOC##
	CALL OCTOT
	HRROI 1,[ASCIZ / -- INCREASE JFNPC0 BY MULTIPLE OF 20(8)/]
	SKIPGE 2
	PSOUT
	HRROI 1,[ASCIZ /
AC BLOCKS & PSB STRGE =	/]
	PSOUT
	MOVEI 2,UACB
	SUBI 2,TSBLOC##
	CALL OCTOT
	HRROI 1,[ASCIZ / -- DELETE ONE AC BLOCK AND MOVE THEM UP/]
	SKIPGE 2
	PSOUT
	HRROI 1,[ASCIZ /
/]
	PSOUT
	JRST RDRMBS		;GO READ DRUM BAD SPOTS

OCTOT:	MOVEI 1,101
	MOVEI 3,8
	NOUT
	 JFCL
	RET

;READ DRUM BAD SPOTS FROM TEXT FILE AND SET INTO DRMBBT

RDRMBS:	MOVSI 1,100001
	HRROI 2,[SYSNAM(<ASCIZ \<SYSTEM>DRUM-BAD-SPOTS.>,<\>)]
	GTJFN
	 JRST [	HRROI 1,[ASCIZ /NO DRUM-BAD-SPOTS FILE
/]
		PSOUT
		JRST RDRMBX]
	PUSH P,1
	MOVE 2,[7B5!1B19]
	OPENF
	 JRST [	HRROI 1,[ASCIZ /CAN'T OPEN DRUM-BAD-SPOTS FILE
/]
		PSOUT
		POP P,1
		RLJFN
		 JFCL
		JRST RDRMBX]

RDRMB1:	MOVEI 5,DRMBST		;NEXT WORD AFTER DRMBBT
	SUBI 5,DRMBBT		;GET LENGTH OF DRMBBT
	ASH 5,1			;TWO BYTES PER WORD
	SUBI 5,1		;ALLOW ONE BYTE FOR END MARK

	MOVE 6,[POINT 18,DRMBBT];INIT SCAN POINTER
RDRMB0:	MOVE 4,6		;HERE IS WHERE TO STORE AFTER SEARCH
	ILDB 3,6		;GET BYTE FROM TABLE AS ASSEMBLED
	TRNN 3,400000		;IS IT THE END MARK?
	SOJG 5,RDRMB0		;NO, KEEP LOOKING
	JUMPE 5,RDRMB6		;TABLE ALREADY FULL, SAY SO.

RDRMB2:	HRRZ 1,0(P)		;GET FILE JFN
	MOVEI 3,8		;SET INPUT RADIX
	NIN
	 JRST RDRMB3		;BAD NUMBER MEANS DONE

	MOVE 6,[POINT 18,DRMBBT];SET SCAN POINTER
RDRMB8:	CAMN 6,4		;SEARCHED WITHOUT FINDING A DUPLICATE?
	 JRST RDRMB9		;YES, ADD NUMBER FROM FILE TO TABLE
	ILDB 3,6		;NO, GET A BYTE FROM CURRENT TABLE
	CAME 3,2		;SAME AS ONE FROM FILE?
	 JRST RDRMB8		;NO, SEARCH REST OF TABLE
	AOSA 5			;NOT GOING TO ADD. DEFEAT SOJG BELOW
RDRMB9:	IDPB 2,4		;ADD TO TABLE

	BKJFN			;SET TO GET TERMINATOR
	 JFCL
RDRMB4:	BIN			;GET THE TERMINATOR(S)
	JUMPE 2,RDRMB3		;NULL MEANS EOF
	CAIN 2,15		;RETURN?
	 JRST RDRMB4		;YES, TRY FOR LINE FEED
	CAIE 2,12		;ALLOW ANY MIXTURE OF BLANK LINES,
	CAIN 2," "		;SPACES
	 JRST RDRMB4
	CAIE 2,"	"	;TABS
	CAIN 2,","		;AND COMMAS TO SEPARATE THE NUMBERS
	 JRST RDRMB4		;NB: NULL AT EOF CAUSES NEXT NIN TO FAIL
	BKJFN			;ANYTHING ELSE MUST BE 1ST CHR OF NUMBER
	 JFCL
	SOJG 5,RDRMB2		;COUNT DOWN SLOTS IN DRMBBT

RDRMB6:	HRROI 1,[ASCIZ /TOO MANY DRUM BADSPOTS -- INCREASE SIZE IN DRM
/]
	PSOUT

RDRMB3:	SETO 2,
	IDPB 2,4
	POP P,1
	CLOSF
	 JFCL
RDRMBX:	;FALL INTO FIXSYM


FIXSYM:	HLRE 1,.JBUSY##		; GET LENGTH OF UNDEF SYM TAB
	MOVE 2,.JBSYM##		; USE LOCATION OF SYMBOL TAB
	SKIPE 1			; IF NO UNDEF SYMTAB
	MOVE 2,.JBUSY		; ELSE USE UNDEF SYMTAB
	MOVEI 3,RESEND
	HRRM 3,.JBUSY		; NEW UNDEF SYMTAB
	SUB 3,1			; ASSUMES UNDEF SYMTAB IMMEDIATELY BELOW
	HRRM 3,.JBSYM		; DEF SYMTAB, THIS YIELDS NEW DEF SYMTAB
	HLRE 1,.JBSYM		; LENGTH OF DEF SYMTAB
	SUB 3,1			; NEW END OF WORLD
	HRLI 2,RESEND
	MOVSS 2
	BLT 2,-1(3)		; MOVE SYMTABS
	HRRZM 3,.JBFF##
	HRLM 3,.JBSA##
	MOVE 1,.JBSYM
	MOVEM 1,36
	MOVE 1,.JBUSY
	MOVEM 1,32
	MOVEM 1,SAVE32##	; PUT IN SEMI-CONSTANT
	HLRZ 1,.JBHRL		; GET HIGH SEG BREAK
	ADDI 1,SWPMA0		; BASE PLUS LENGTH
	IORI 1,1777		; MOVE TO 1K BOUND
	MOVEM 1,.JBREL		; SET .JBREL
	SETZM .JBHRL
	MOVEI 2,DDTX		;START OF EDDT
	ADDI 2,777
	LSH 2,-^D9
	MOVEM 2,MONCOR		;END OF MONITOR CORE
	MOVE 2,[JRST DDTX]	;SETUP EDDT DISPATCH
	MOVEM 2,100
	HRRM 2,.JBSA
	MOVEI 1,400000
	SEVEC

;SORT THE BUG TABLE BY BUG ADDRESS

	MOVSI 7,-NBUGP
BUGSR4:	MOVSI 5,-NBUGP(7)	;SCAN FROM HERE TO END
	HRRI 5,0(7)
	MOVSI 3,1		;INITIAL MIN
BUGSR1:	HLRZ 1,STRBGP(5)	;BUG ADDRESS
	JUMPE 1,BUGSR2		;IGNORE ZEROS
	CAML 1,3		;MIN SO FAR?
	JRST BUGSR2		;NO
	MOVEI 3,0(1)		;YES, REMEMBER VALUE
	MOVEI 4,0(5)		;AND LOCATION
BUGSR2:	AOBJN 5,BUGSR1
	TLNE 3,-1		;FOUND A MIN?
	JRST BUGSR3		;NO, NOTHING BUT ZEROS LEFT
	MOVE 1,STRBGP(4)	;INTERCHANGE MIN WITH TOP OF TABLE
	EXCH 1,STRBGP(7)
	MOVEM 1,STRBGP(4)
	AOBJN 7,BUGSR4

;DUMP BUG TABLE AND STRINGS TO FILES

BUGSR3:	MOVEI 7,0(7)
	MOVNM 7,NBUGTP		;SAVE NEG OF NUMBER OF PTRS
	HRRZ 1,SVNUM		; USE SYSTEM VERSION NUMBER
	HRLI 1,(1B0+1B17)	; FOR OUTPUT AND STRING SHORT FORM
	HRROI 2,[SYSNAM(<ASCIZ \BUGSTRINGS.>,<\>)]
	GTJFN
	0
	MOVE 2,[7B5+1B20]
	OPENF
	0
	SETZ 3,
	HRROI 2,SVN		;SYSTEM VERSION TEXT
	SOUT
	HRROI 2,[ASCIZ /
BUGHLT, BUGCHK, AND BUGNTE LOCATIONS AND DESCRIPTIONS

/]
	SOUT
	MOVEI 5,STRBGP		;MOVE AND COMPACT STRINGS TO
	SUB 5,NBUGTP		;AREA IMMEDIATELY AFTER POINTERS
	MOVEI 4,1(5)		;CLEAR THE AREA FIRST
	HRLI 4,0(5)
	SETZM 0(5)
	BLT 4,STRBGP+SBUGTF-1
	HRLZ 7,NBUGTP
BUGD1:	MOVE 6,STRBGP(7)	;TABLE ENTRY?
	HLRZ 2,6		;ADDRESS
	MOVE 3,[1B2+6B17+10B35]	;OCTAL PRINT, USE EXACTLY 6 COLUMNS
	NOUT
	0
	MOVEI 2," "
	BOUT
	HRROI 2,0(6)
	SETZ 3,
	SOUT			;PRINT THE STRING
	HRROI 2,[ASCIZ /
/]
	SOUT

	HRRM 5,STRBGP(7)	;SET NEW ADDRESS OF STRING
BUGD3:	MOVE 2,0(6)		;MOVE STRING TO COMPACTING AREA
	MOVEM 2,0(5)
	ADDI 5,1
	TRNE 2,177B34		;UNTIL (LAST) CHAR OF 0 ENCOUNTERED
	AOJA 6,BUGD3
BUGD2:	AOBJN 7,BUGD1
	CLOSF
	0
	MOVE 1,SVNUM
	HRLI 1,(1B0+1B17)
	HRROI 2,[SYSNAM(<ASCIZ \BUGTABLE.>,<\>)]
	GTJFN
	0
	MOVE 2,[44B5+1B20]
	OPENF
	0
	MOVE 2,NBUGTP		;COUNT GOES OUT FIRST
	BOUT
	HRLZ 7,NBUGTP
	MOVE 2,STRBGP(7)
	SUBI 2,STRBGP		;MAKE STRING POINTERS RELATIVE
	BOUT
	AOBJN 7,.-3
	MOVM 7,NBUGTP
	HRLI 7,-SBUGTF(7)
	MOVE 2,STRBGP(7)
	BOUT			;OUTPUT STRINGS
	AOBJN 7,.-2
	CLOSF
	0

;REMOVE REDUNDANT SYMBOLS FROM TABLE

	SKIPL 7,.JBSYM		; GET SYMTAB POINTER, SKIP THE AOBJP
SS2:	AOBJP 7,SS8		; JUMP IF DONE
	MOVE 1,0(7)		;GET SYMBOL
	TLCE 1,14B23		;PROGRAM NAME, OR
	TLCN 1,14B23		;BLOCK NAME?
	AOBJN 7,SS2		;YES, KEEP SYMBOL (ALWAYS JUMP)
	TLNE 1,20B23		;DELETE NO-INPUT SYMBOLS
	JRST SS6
	MOVE 2,1(7)		;GET VALUE
	CAIL 2,1000		;VALUE 0-777?
	JRST SS23		; NO
	MOVSI 3,40B23		; YES. MAKE NO-OUTPUT IF EITHER
	TRNN 2,760		;  VALUE IS 20-777, OR
	TLNE 1,10B23		;  IT'S A LOCAL SYMBOL
	IORM 3,0(7)		; ONE OF THOSE. HALF-KILL THE SYM.
SS23:	MOVE 3,1
	TLZ 1,14B23		;FLUSH LOCAL-GLOBAL BITS
	MOVE 6,7		; START INNER SCAN FROM HERE
	AOBJP 6,SS1		; PLUS 1
SS1:	AOBJP 6,SS61		; GET NEXT, JUMP IF INNER LOOP DONE
	CAMN 2,1(6)		;VALUE THE SAME?
	SKIPN 4,0(6)		;SYMBOL NOT PREVIOUSLY DELETED?
	AOBJN 6,SS1		;NO (ALWAYS JUMP)
	TLCE 4,14B23		;PROGRAM NAME, OR
	TLCN 4,14B23		;BLOCK NAME?
	AOBJN 6,SS1		;YES (ALWAYS JUMP)
	XOR 4,3
	TDNE 4,[XWD 037777,-1]	;SYMBOL EQUAL (EXCLUDING BITS)?
	AOBJN 6,SS1		;NO (ALWAYS JUMP)
	SETZM 0(6)		;YES, DELETE SYMBOL
	TLON 1,04B23		;AND MAKE ORIGINAL GLOBAL
	MOVEM 1,0(7)
	AOBJN 6,SS1		; ALWAYS JUMP

SS6:	SETZM 0(7)		;DELETE NO-INPUT SYMBOL
SS61:	AOBJN 7,SS2		; ALWAYS JUMP

SS8:	MOVE 7,.JBSYM		;SCAN TABLE AND COMPACT
	MOVEI 6,0(7)		;WILL BE NEW TABLE POINTER
SS5:	SKIPN 1,0(7)		;DELETED?
	JRST SS4		;YES
	MOVEM 1,0(6)
	MOVE 1,1(7)
	MOVEM 1,1(6)
	ADD 6,[XWD -2,2]	;MOVE TO NEW POSITION
SS4:	AOBJN 7,.+1
	AOBJN 7,SS5
	HLLM 6,.JBSYM		;STORE NEW COUNT
	HRLM 6,.JBSA		;STORE NEW END
	HRRM 6,.JBFF
	MOVEI 2,0(6)		;PRINT NEW END
	HRROI 1,[ASCIZ /TOP OF SYM TAB IS /]
	PSOUT
	MOVEI 1,101
	MOVEI 3,^D8
	NOUT
	JFCL
	MOVE 1,.JBSYM
	MOVEM 1,SWPSTP		;PUT POINTER WHERE WMST WILL SEE IT
	JSP 4,WMST		;WRITE SYMBOL TABLE ONTO FILE
	SETZM SWPSTP

	HRROI 1,[ASCIZ /

REMOVE SYMBOLS FOR:
/]
	PSOUT
	MOVSI 16,-NPNMS		;NUMBER OF PRG NAMES TO SCAN
CKS1:	HRRZ 10,.JBSYM
	HLRE 11,.JBSYM
	SUB 10,11		;CURRENT END OF TABLE
	SUBI 10,MAXSYM		;EXCESS WORDS OF TABLE
	MOVEI 1,0(16)		;TABLE INDEX
	CAIG 10,0		;CRUNCH IF OVERLAP EXISTS, OR
	SKIPL PNAMES+1(16)	;IF ALL SYMBOLS BEING REMOVED
	JSP 17,CSS		;REMOVE LOCAL SYMBOLS IN THIS PRG
	AOBJN 16,.+1		;2 WORDS PER ENTRY
	AOBJN 16,CKS1		;CHECK NEXT PROGRAM
	JUMPLE 10,CSS7		;QUIT IF NOW NO EXCESS
	HRROI 1,[ASCIZ /
SYMBOL TABLE STILL OVERFLOWS.
/]
	PSOUT
CSS7:

SYSG01:	MOVE 3,.JBSYM		;MOVE POINTER TO EXEC DDT LOCATION
	MOVEM 3,36
	MOVEM 3,SAVE36##	;PUT IN SEMI-CONSTANT
	HRRZ 3,.JBFF		;END OF SYMTAB
	ADDI 3,777		;ADJUST TO NEXT PAGE BOUNDARY
	LSH 3,-^D9		;NUMBER OF FIRST PAGE AFTER SYMTAB
	MOVEM 3,SWPCOR
	MOVEM 3,RCADDT##	;PUT IN SEMI-CONSTANT
	HRROI 1,[ASCIZ /
SWPCOR= /]
	PSOUT
	MOVEI 1,101
	MOVE 2,3
	MOVEI 3,^D8
	NOUT
	0
	MOVEI 1,37
	PBOUT
	SETO 1,
	MOVE 4,SWPCOR
	SUBI 4,SWPMP0
	HRLZS 4
	HRR 4,SWPCOR
	MOVSI 2,400000
	SETZ 3,
	HRR 2,4
	PMAP
	AOBJN 4,.-2
	MOVEI 4,PATCH2
	LSH 4,-^D9		;FIRST PAGE OF RES MON
	MOVNI 4,-2(4)
	HRLZS 4
	HRRI 4,2
	MOVE 16,[CLRPRG,,5]
	BLT 16,16
	JRST 5

CLRPRG:	PHASE 5
	HRR 2,4
	PMAP
	AOBJN 4,.-2
	HALTF
	JRST .-1
DEPHASE

;PROGRAM AND BLOCK NAMES TO FLUSH LOCAL SYMS

	DEFINE PN (NAME,NSTRNG,WHEN<-1>),<
	IFLE WHEN,<
	RADIX50 0,NAME
	XWD WHEN,[ASCIZ /NAME/]
>>

; THE MACRO "%TENX%" CONTAINS THE LIST OF TENEX MODULES IN THE ORDER
; IN WHICH THEIR SYMBOLS ARE TO BE DELETED TO REDUCE THE SIZE OF THE
; SYMBOL TABLE. EACH ENTRY HAS THREE ARGUMENTS, AS FOLLOWS:
; FIRST ARGUMENT: MODULE (OR BLOCK) NAME
; SECOND ARGUMENT: NOT USED HERE (USED TO DEFINE BUGSTRING SYMBOLS)
; THIRD ARGUMENT: +1 MEANS DON'T DELETE ANY SYMBOLS FROM THIS MODULE
;                          (OR BLOCK)
;                  0 MEANS DELETE ALL SYMBOLS (BOTH LOCAL AND GLOBAL)
;                          FROM THIS MODULE, WHETHER OR NOT IT IS
;                          NECESSARY TO REDUCE THE SIZE OF THE SYMBOL
;                          TABLE
;                 -1 MEANS DELETE ONLY LOCAL SYMBOLS FROM THIS MODULE,
;                          AND ONLY DO IT IF IT IS NECESSARY TO REDUCE
;                          THE SIZE OF THE SYMBOL TABLE

PNAMES:	%TENX%(PN)
NPNMS==.-PNAMES

;REMOVE LOCAL SYMBOLS FROM BLOCK OR PROGRAM
;INDEX TO PNAMES TABLE GIVEN IN 1
;CALLED WITH JSP 17,CSS

CSS:	MOVEI 4,0(1)
	MOVE 5,PNAMES(1)	;GET RADIX50 OF NAME
	HRRO 1,PNAMES+1(1)	;GET ASCIZ OF NAME
	PSOUT			;SO WE KNOW WHAT WAS CRUNCHED
	SKIPL PNAMES+1(4)	;ALWAYS REMOVE?
	JRST CSSGO		;YES
	MOVEI 1,100
	SIBE			;INPUT WAITING?
	JRST CSSGO		;YES, DON'T ASK, PRESUME YES
CSSQ1:	HRROI 1,[ASCIZ /? /]
	PSOUT
	PBIN
	CAIN 1,"Y"		;YES, REMOVE
	JRST CSSGO
	CAIN 1,"N"
	JRST CSSRET		;NO, DON'T REMOVE
	JRST CSSQ1		;TRY AGAIN

CSSGO:	MOVE 7,.JBSYM		;SCAN WHOLE TABLE
	MOVE 6,7		;REMEMBER START OF CURRENT PRG
CSS1:	MOVE 1,0(7)
	TLCE 1,(14B5)		;PRG OR
	TLCN 1,(14B5)		;BLOCK NAME?
	JRST CSS2		;YES
CSS3:	AOBJN 7,.+1
	AOBJN 7,CSS1		;KEEP SCANNING TABLE
	HRROI 1,[ASCIZ / - NOT FOUND
/]
	PSOUT
	JRST 0(17)

CSS2:	TLZ 1,(74B5)		;CLEAR TYPE BITS
	CAMN 1,5		;DESIRED NAME?
	JRST CSS4		;YES
	MOVE 6,7		;NO, REMEMBER LOC OF END OF BLOCK
	ADD 6,[XWD 2,2]
	JRST CSS3

;FOUND DESIRED BLOCK, NOW REMOVE LOCAL SYMBOLS

CSS4:	MOVE 5,6
CSS6:	CAMN 5,7		;SCANNED WHOLE BLOCK?
	JRST CSS8		;YES
	MOVE 1,0(5)		;GET NEXT SYMBOL
	SKIPGE PNAMES+1(16)	;FLUSHING ALL SYMS THIS PGM, OR
	TLNE 1,(10B5)		;LOCAL?
	SOJA 10,[SOJG 10,CSS5	;ELIMINATED EXCESS SYMBOLS YET?
		SKIPL PNAMES+1(16) ;YES, REMOVING ALL OF PGR BLOCK?
		JRST CSS5	;YES, KEEP REMOVING
		ADD 5,[XWD 2,2]	;YES
		JRST CSS8]	;FINISH UP
	MOVEM 1,0(6)		;NOT LOCAL, MOVE IT
	MOVE 1,1(5)
	MOVEM 1,1(6)		;MOVE VALUE
	ADD 6,[XWD 2,2]		;UPDATE 'TO' POINTER
CSS5:	ADD 5,[XWD 2,2]		;UPDATE 'FROM' POINTER
	JRST CSS6

CSS8:	MOVSI 1,0(5)		;MOVE REST OF TABLE WITH BLT
	HRRI 1,0(6)
	HLRE 2,5		;COMPUTE NEW END OF TABLE
	MOVEI 3,0(6)		;AS AMOUNT LEFT TO MOVE PLUS
	SUB 3,2			;CURRENT 'TO' LOCATION
	BLT 1,-1(3)		;MOVE REST OF TABLE
	MOVEM 3,.JBFF		;UPDATE LOWER CORE
	HRLM 3,.JBSA
	HRRZ 2,.JBSYM		;CALC NEW LENGTH AS
	SUB 2,3			;BEG-END
	HRLM 2,.JBSYM
CSSRET:	MOVEI 1,37
	PBOUT
	JRST 0(17)

	LIT

NBUGTP:	0		;NUMBER OF BUG TABLE POINTERS
PDL:	BLOCK 40

	END SYSG0
