-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPOSTLD.MAC
599 lines (544 loc) · 14.2 KB
/
POSTLD.MAC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
;<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