-
Notifications
You must be signed in to change notification settings - Fork 0
/
read_disk.list
841 lines (813 loc) · 53 KB
/
read_disk.list
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
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
COMPILATION LISTING OF SEGMENT read_disk
Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989
Compiled at: Bull HN, Phoenix AZ, System-M
Compiled on: 11/11/89 1003.9 mst Sat
Options: optimize map
1 /****^ ***********************************************************
2* * *
3* * Copyright, (C) Honeywell Bull Inc., 1987 *
4* * *
5* * Copyright, (C) Honeywell Information Systems Inc., 1983 *
6* * *
7* *********************************************************** */
8
9
10 read_disk$init: proc;
11
12 /* This procedure performs I/O from/to a given disk address. In the current
13* implementation, this will always be a one-page record. The initializer
14* process uses the ASTE created by initialization to avoid calling AST
15* management during collection 1, and to speed up disk initializations via
16* initializer_gate. Shutdown uses this ASTE as well to avoid getting involved
17* with AST management. */
18
19 /* coded 03/07/75 by Bernard S. Greenberg. */
20 /* Modified by BSG 04/09/76 for disk_control$test_drive */
21 /* Modified by BSG 08/31/76 for dynamic ASTE getting, for volume dumper */
22 /* Modified by J. A. Bush 2/22/80 to fix an infinite loop bug in ESD */
23 /* Modified 04/16/81, W. Olin Sibert, for ADP PTWs and SDWs, and to use sst external static */
24 /* Modified 03/01/82 by J. Bongiovanni for new PVTE include file */
25 /* Modified '82 for english disk error codes */
26 /* Modified 11/01/83 by Keith Loepere for swapping rdisk sdw at init */
27 /* Modified 1/13/84 by Keith Loepere for $no_test */
28 /* Modified 84-01-16 BIM for records = 0 */
29 /* Modified 84-05-04 for bce_abs_seg$add, Keith Loepere */
30 /* Modified 84-10-23 by Keith Loepere to null ptw when done. */
31
32 dcl a_dataptr ptr parameter;
33 dcl a_pvtx fixed bin parameter; /* params */
34 dcl a_recno fixed bin (18) parameter;
35
36 dcl code fixed bin; /* error code */
37 dcl dataptr ptr; /* pointer to transferable data */
38 dcl ptp pointer; /* pointer to its ASTE */
39 dcl pvtx fixed bin (17); /* phys vol table index */
40 dcl rdskp ptr; /* pointer to rdisk_seg */
41 dcl record_no fixed bin (18); /* record number on disk */
42 dcl static_rdisks_astep ptr internal static init (null ()); /* Ditto astep */
43 dcl static_rdisks_sdw fixed bin (71) aligned internal static init (0); /* SDW form initialization forever */
44 dcl testsw bit (1); /* "1"b => test */
45 dcl tsdw fixed bin (71) aligned; /* sdw temp */
46 dcl use_init bit (1) aligned; /* 1 = use init SDW, astep */
47 dcl writesw bit (1); /* "1"b => write */
48
49 dcl bdata (1024) fixed bin (35) based; /* block of data */
50
51 dcl pds$processid bit (36) aligned external static; /* equal to tc_data$initializer_id during init. */
52 dcl rdisk_seg$ ext fixed bin; /* segment for I/O */
53 dcl sst$astsize fixed bin external static;
54 dcl 1 sst$level (0 : 3) aligned external static,
55 2 ausedp bit (18) unaligned,
56 2 no_aste bit (18) unaligned;
57 dcl sys_info$page_size fixed bin external static;
58 dcl tc_data$initializer_id bit (36) aligned external static;
59 dcl tc_data$system_shutdown bit (1) aligned external;
60
61 dcl bce_abs_seg$add entry (fixed bin (15));
62 dcl disk_control$test_drive entry (fixed bin);
63 dcl disk_run entry;
64 dcl get_aste entry (fixed bin) returns (ptr);
65 dcl get_ptrs_$ptw_to_cmep entry (pointer, pointer);
66 dcl get_ptrs_$given_astep entry (ptr, fixed bin (71) aligned);
67 dcl lock$lock_ast entry ();
68 dcl lock$unlock_ast entry ();
69 dcl make_sdw$unthreaded entry (fixed bin (18), fixed bin (71) aligned, ptr, ptr);
70 dcl pc$cleanup entry (ptr);
71 dcl pmut$swap_sdw entry (ptr, ptr);
72 dcl ptw_util_$make_disk entry (pointer, fixed bin (20));
73 dcl ptw_util_$make_null entry (ptr, bit (22) aligned);
74 dcl ptw_util_$make_null_disk entry (pointer, fixed bin (20));
75 dcl ptw_util_$set_unwired entry (pointer);
76 dcl ptw_util_$set_wired entry (pointer);
77 dcl put_aste entry (ptr);
78 dcl sdw_util_$set_size entry (pointer, fixed bin (19));
79 dcl thread$cin entry (ptr, bit (18));
80 dcl thread$out entry (ptr, bit (18));
81
82 dcl page_fault_error condition;
83
84 dcl (error_table_$fsdisk_phydev_err, error_table_$fsdisk_not_ready)
85 ext static fixed bin (35);
86
87 dcl (addr, addrel, baseno, bit, fixed, segno) builtin;
88
89 rdskp = addr (rdisk_seg$); /* similarly, rdisk_seg */
90 call make_sdw$unthreaded (fixed (baseno (rdskp), 18), tsdw, astep, ptp);
91 /* force seg to become paged */
92 call sdw_util_$set_size (addr (tsdw), (sys_info$page_size)); /* A single page */
93 /* do not allow any access xcept page 0 */
94
95 astep -> aste. dnzp, /* pages may never be nulled/deposited */
96 astep -> aste.nqsw = "1"b; /* or complained about. */
97 static_rdisks_sdw = tsdw;
98 static_rdisks_astep = astep; /* Save for posterity */
99 call pmut$swap_sdw (rdskp, addr (tsdw)); /* Install SDW */
100 call bce_abs_seg$add (segno (rdskp)); /* free at shut */
101 return;
102
103 read_disk_no_test: entry (a_pvtx, a_recno, a_dataptr, code); /* entry to read data */
104
105 writesw = "0"b;
106 go to no_test;
107
108 write_disk_no_test: entry (a_pvtx, a_recno, a_dataptr, code);
109
110 writesw = "1"b;
111
112 no_test:
113 record_no = a_recno;
114 dataptr = a_dataptr;
115 pvtx = a_pvtx; /* copy parms */
116
117 rdskp = addr (rdisk_seg$); /* set up special seg ptr */
118 pvt_arrayp = addr (pvt$array); /* Get pointer to PVTE array */
119 pvtep = addr (pvt_array (pvtx)); /* Get pvte pointer. */
120 go to operate;
121
122 read_disk: entry (a_pvtx, a_recno, a_dataptr, code); /* entry to read data */
123
124 writesw = "0"b;
125 testsw = "0"b; /* Not a test */
126 record_no = a_recno;
127 dataptr = a_dataptr;
128 go to merge;
129
130 write_disk: entry (a_pvtx, a_recno, a_dataptr, code);
131
132 writesw = "1"b;
133 testsw = "0"b;
134 record_no = a_recno;
135 dataptr = a_dataptr;
136 go to merge;
137
138 test_disk: entry (a_pvtx, code);
139
140 testsw = "1"b;
141
142 merge:
143 pvtx = a_pvtx; /* copy parms */
144
145 rdskp = addr (rdisk_seg$); /* set up special seg ptr */
146 pvt_arrayp = addr (pvt$array); /* Get pointer to PVTE array */
147 pvtep = addr (pvt_array (pvtx)); /* Get pvte pointer. */
148
149 pvte.testing = "1"b; /* Turn on disk dim protocol bit. */
150 call disk_control$test_drive (pvtx); /* Start a RQS op up */
151 do while (pvte.testing); /* Noel has sworn that SOMETHING will come back. */
152 call disk_run; /* in case something doesn't come back, force looking at status */
153 end;
154 if pvte.device_inoperative then do; /* If we found disk not operaable, */
155 pvte.device_inoperative = "0"b; /* Clear silly flag, and */
156 code = error_table_$fsdisk_not_ready; /* return a usable diagnostic. */
157 return;
158 end;
159
160 if testsw then do; /* Successful test. */
161 code = 0;
162 return;
163 end;
164
165
166 /* If this is not the initializer or shutdown, an ASTE must be gotten and inserted.
167* Otherwise, use the ASTE created by initialization. */
168
169 operate:
170 use_init = (tc_data$initializer_id = pds$processid) | tc_data$system_shutdown;
171
172
173 if use_init then do;
174 tsdw = static_rdisks_sdw;
175 astep = static_rdisks_astep;
176 end;
177 else do; /* Must get_aste */
178 call lock$lock_ast;
179 astep = get_aste (1); /* Need 1 page ASTE */
180 call thread$out (astep, sst$level.ausedp (0)); /* thread aste out of used list */
181 call lock$unlock_ast; /* and unlock ast */
182 call get_ptrs_$given_astep (astep, tsdw); /* Generate SDW */
183 astep -> aste.nqsw, astep -> aste.dnzp = "1"b;
184 end;
185
186 astep -> aste.records, astep -> aste.csl, astep -> aste.np = ""b;
187 ptp = addrel (astep, sst$astsize);
188 call pmut$swap_sdw (rdskp, addr (tsdw)); /* Install SDW */
189
190 /* Now make this seg reflect the given pvtx, with the first and only page being
191* the given record. */
192
193 astep -> aste.pvtx = pvtx; /* copy supplied pvtx */
194
195 if writesw then /* If writing, then pages contents aren't there yet */
196 call ptw_util_$make_null_disk (ptp, (record_no));
197 else call ptw_util_$make_disk (ptp, (record_no)); /* Otherwise, they are, and we want them */
198 call ptw_util_$set_wired (ptp); /* Page is "wired" */
199
200 astep -> aste.npfs = "0"b; /* Previous cleanup turned on npfs- it was good to leave
201* it on until now. */
202
203 /* Now copy the data to/from this abs-seg. Notice that even in the write case, we
204* fault in the page. */
205
206 on page_fault_error begin;
207 code = error_table_$fsdisk_phydev_err;
208 go to fini;
209 end;
210
211 if writesw then rdskp -> bdata = dataptr -> bdata;
212 else dataptr -> bdata = rdskp -> bdata;
213
214 /* Now comes the peculiar part. If this is a write_disk, we magically migrate the page to disk. */
215
216 if writesw then do;
217 call get_ptrs_$ptw_to_cmep (ptp, cmep); /* Find its CME, and do magic with it */
218 cmep -> mcme.record_no = bit (fixed (record_no, 18), 18);
219 cmep -> mcme.add_type = add_type.disk; /* Note that record # is changed first */
220 call ptw_util_$set_unwired (ptp); /* rdisk_seg is now at the mercy of page_fault */
221 end;
222
223 code = 0;
224
225 fini:
226 call pc$cleanup (astep);
227
228 /* This gets all the pages out of core. In the write case,
229* It is guaranteed to actually write (phm will be on)
230* and wait for done. */
231
232 if ^use_init then do;
233 tsdw = 0; /* Leave around in shutdown for debugging */
234 call pmut$swap_sdw (rdskp, addr (tsdw));
235 call lock$lock_ast; /* lock ast */
236 call thread$cin (astep, sst$level.ausedp (0)); /* thread aste back in */
237 call put_aste (astep); /* Return the ASTE */
238 call lock$unlock_ast;
239 end;
240 else call ptw_util_$make_null (ptp, make_sdw_null_addr); /* null ptw so dumpers won't be confused */
241
242 return;
243
244
1 2 /* BEGIN INCLUDE FILE add_type.incl.pl1 */
1 3 /* 02/26/75 by Bernard S. Greenberg */
1 4
1 5 /* This file provides a structure for checking
1 6* PTW/CME address type fields in PL/I */
1 7
1 8 dcl 1 add_type unaligned static internal,
1 9 2 core bit (4) init ("1000"b), /* in core- S/B only in PTW */
1 10 2 disk bit (4) init ("0100"b), /* Disk address */
1 11 2 pd bit (4) init ("0010"b), /* Paging Device */
1 12 2 reserved bit (4) init ("0001"b), /* Reserved */
1 13 2 non_null bit (4) init ("1111"b); /* Not null address */
1 14
1 15 dcl 1 badd_type unaligned based,
1 16 2 (core, disk, pd, reserved) bit (1) unaligned;
1 17
1 18 /* END INCLUDE FILE add_type.incl.pl1 */
244
245 /* BEGIN INCLUDE FILE ...aste.incl.pl1 ... */
2 2
2 3 /* Template for an AST entry. Length = 12 words. */
2 4
2 5 /* Words 0 to 7, and 11 are read by PC; they are read and modified by SC.
2 6* Words 8, 9 and 10 are modified by PC; they should never be modified without locking the PC lock */
2 7 /* Modified January 1985 by Keith Loepere for multi_class. */
2 8
2 9 dcl astep ptr;
2 10
2 11 dcl 1 aste based (astep) aligned,
2 12
2 13 (2 fp bit (18), /* forward used list rel pointer */
2 14 2 bp bit (18), /* backward used list rel pointer */
2 15
2 16 2 infl bit (18), /* ptr to NEXT in list of ASTE's of my brothers */
2 17 2 infp bit (18), /* ptr to FIRST in list of ASTE's of my children */
2 18
2 19 2 strp bit (18), /* rel pointer to process trailer */
2 20 2 par_astep bit (18), /* rel pointer to parent aste */
2 21
2 22 2 uid bit (36), /* segment unique id */
2 23
2 24 2 msl bit (9), /* maximum segment length in 1024 word units */
2 25 2 pvtx fixed bin (8), /* physical volume table index */
2 26 2 vtocx fixed bin (17), /* vtoc entry index */
2 27
2 28 2 usedf bit (1), /* ast entry is being used if non-zero */
2 29 2 init bit (1), /* used bit - insure 1 lap */
2 30 2 gtus bit (1), /* global transparent usage switch */
2 31 2 gtms bit (1), /* global transparent modified switch */
2 32 2 hc bit (1), /* hard core segment */
2 33 2 hc_sdw bit (1), /* aste with sdw for hardcore seg if non-zero */
2 34 2 any_access_on bit (1), /* any sdw allows access, unless write_access_on */
2 35 2 write_access_on bit (1), /* any sdw allows write access */
2 36 2 inhibit_cache bit (1), /* flag not to reset above bits */
2 37 2 explicit_deact_ok bit (1), /* set if user can deactivate seg */
2 38 2 deact_error bit (1), /* set if error occurred while deactivating */
2 39 2 hc_part bit (1), /* set if pages are in a hardcore partition */
2 40 2 fm_damaged bit (1), /* set if filemap checksum was ever bad */
2 41 2 multi_class bit (1), /* set if page_control should watch state changes to this segment */
2 42 2 pad1 bit (2), /* OO */
2 43 2 dius bit (1), /* dumper in use switch */
2 44 2 nid bit (1), /* if on prevents addtion to incremental dump map */
2 45 2 dmpr_pad bit (1),
2 46 2 ehs bit (1), /* entry hold switch */
2 47 2 nqsw bit (1), /* no quota switch - no checking for pages of this seg */
2 48 2 dirsw bit (1), /* directory switch */
2 49 2 master_dir bit (1), /* master dir - a root for the log volume */
2 50 2 volmap_seg bit (1), /* volmap_seg for some volume */
2 51 2 tqsw (0:1) bit (1), /* terminal quota switch - (0) for non dir pages */
2 52 2 pad_ic bit (10), /* Used to be aste.ic */
2 53
2 54 2 dtu bit (36), /* date and time segment last used */
2 55
2 56 2 dtm bit (36), /* date and time segment last modified */
2 57
2 58
2 59 2 quota (0:1) fixed bin (18) unsigned, /* sec storage quota - (0) for non dir pages */
2 60
2 61 2 used (0:1) fixed bin (18) unsigned, /* sec storage used - (0) for non dir pages */
2 62
2 63 2 csl bit (9), /* current segment length in 1024 words units */
2 64 2 fmchanged bit (1), /* turned on by page if file map changed */
2 65 2 fms bit (1), /* file modified switch */
2 66 2 npfs bit (1), /* no page fault switch */
2 67 2 gtpd bit (1), /* global transparent paging device switch */
2 68 2 dnzp bit (1), /* don't null out if zero page switch */
2 69 2 per_process bit (1), /* use master quota for this entry */
2 70 2 ddnp bit (1), /* don't deposit nulled pages */
2 71 2 pad2 bit (2),
2 72 2 records bit (9), /* number of records used by the seg in sec storage */
2 73 2 np bit (9), /* number of pages in core */
2 74
2 75
2 76 2 ht_fp bit (18), /* hash table forward rel pointer */
2 77 2 fmchanged1 bit (1), /* value of "fmchanged" saved by pc$get_file_map */
2 78 2 damaged bit (1), /* PC declared segment unusable */
2 79 2 pack_ovfl bit (1), /* page fault on seg would cause pack overflow */
2 80 2 synchronized bit (1), /* Data Management synchronized segment */
2 81 2 pad3 bit (6), /* OOOOOOOOO */
2 82 2 ptsi bit (2), /* page table size index */
2 83 2 marker bit (6)) unaligned; /* marker to indicate last word of ASTE */
2 84
2 85
2 86 dcl asta (0 : 8000) bit (36*12 /* sst-> sst.astsize */) based aligned;
2 87
2 88
2 89 dcl 1 aste_part aligned based (astep),
2 90
2 91 2 one bit (36) unaligned, /* fp and bp */
2 92 2 two bit (36*11 - 8) unaligned, /* part that has to be zeroed when ASTE is freed */
2 93 2 three bit (8) unaligned; /* ptsi and marker */
2 94
2 95
2 96 dcl 1 seg_aste based (astep) aligned, /* Overlay because quota is only for dirs */
2 97 2 pad1 bit (8*36),
2 98 2 usage fixed bin (35), /* page fault count: overlays quota */
2 99 2 pad2 bit (3*36);
2 100
2 101 /* END INCLUDE FILE ... aste.incl.pl1 */
245
246 /* BEGIN INCLUDE FILE cmp.incl.pl1 --- October 1982 */
3 2 /* Note: This include file has an ALM counterpart NOT made with cif (for historical reasons). Keep it up to date */
3 3
3 4 dcl cmep ptr; /* pointer to core map entry */
3 5
3 6 dcl 1 cme based (cmep) aligned, /* core map entry */
3 7 2 fp bit (18) unaligned, /* forward pointer to next entry */
3 8 2 bp bit (18) unaligned, /* backward pointer to previous entry */
3 9
3 10 2 devadd bit (22) unaligned, /* device address of page in the core block */
3 11 2 pad5 bit (1) unaligned,
3 12 2 synch_held bit (1) unaligned, /* Page of synchronized seg held in memory */
3 13 2 io bit (1) unaligned, /* input/output indicator 1=output, 0=input */
3 14 2 pad2 bit (1) unaligned,
3 15 2 er bit (1) unaligned, /* indicates error in previous IO activity */
3 16 2 removing bit (1) unaligned, /* core is being removed by reconfiguration */
3 17 2 abs_w bit (1) unaligned, /* absolute address must not be changed for page */
3 18 2 abs_usable bit (1) unaligned, /* page may be assigned with fixed absolute address */
3 19 2 notify_requested bit (1) unaligned, /* notify requested on I/O completion */
3 20 2 pad3 bit (1) unaligned,
3 21 2 phm_hedge bit (1) unaligned, /* on => pc$flush_core ought write. */
3 22 2 contr bit (3) unaligned, /* controller in which core block is located */
3 23
3 24 2 ptwp bit (18) unaligned, /* pointer to page table word for the page */
3 25 2 astep bit (18) unaligned, /* relative AST entry pointer of page */
3 26 2 pin_counter fixed bin (17) unaligned, /* number of times to skip eviction */
3 27 2 synch_page_entryp bit (18) unaligned; /* relp to synch page entry */
3 28
3 29
3 30 dcl 1 cma (0: 1) based aligned like cme; /* Core map array */
3 31
3 32 dcl 1 mcme based (cmep) aligned, /* core map entry for extracting DID */
3 33 2 pad bit (36) unaligned,
3 34 2 record_no bit (18) unaligned, /* record number of device */
3 35 2 add_type bit (4) unaligned, /* see add_type.incl.pl1 */
3 36 2 flags bit (14) unal,
3 37 2 pad1 bit (18) unal;
3 38
3 39
3 40 /* END INCLUDE FILE cmp.incl.pl1 */
246
247 /* BEGIN INCLUDE FILE null_addresses.incl.pl1 */
4 2 /* Added segmove values, Benson Margulies, 84-01 */
4 3
4 4 dcl (pc_move_page_table_1_null_addr init ("3770070"b3),
4 5 pc_move_page_table_2_null_addr init ("3770100"b3),
4 6 get_aste_null_addr init ("3770110"b3),
4 7 make_sdw_null_addr init ("3770120"b3),
4 8 put_aste_null_addr init ("3770130"b3),
4 9 page_bad_pd_null_addr init ("3770150"b3),
4 10 list_deposit_null_addr init ("3770160"b3),
4 11 get_file_map_null_addr init ("3770170"b3),
4 12 fill_page_table_null_addr init ("3770200"b3),
4 13 init_sst_null_addr init ("3770210"b3),
4 14 get_file_map_vt_null_addr init ("3770220"b3),
4 15 unprotected_null_addr init ("3770230"b3),
4 16 page_bad_null_addr init ("3770240"b3),
4 17 page_problem_null_addr init ("3770250"b3),
4 18 page_parity_null_addr init ("3770260"b3),
4 19 page_devparity_null_addr init ("3770270"b3),
4 20 segmove_old_addr_null_addr init ("3770300"b3),
4 21 segmove_new_addr_null_addr init ("3770310"b3),
4 22 get_file_map_dumper_non_null_addr init ("3777720"b3),
4 23 append_null_addr init ("3777770"b3)) bit (22) aligned static options (constant);
4 24 dcl create_vtoce_four_null_addrs fixed bin (71) int static init (-1);/* 777777 777777 777777 777777 */
4 25
4 26 dcl (create_vtoce_null_addr init ("777777"b3),
4 27 update_vtoce_null_addr init ("777776"b3),
4 28 truncate_vtoce_fill_null_addr init ("777775"b3),
4 29 truncate_vtoce_null_addr init ("777002"b3),
4 30 pv_salv_null_addr init ("777004"b3),
4 31 pv_scav_null_addr init ("777006"b3),
4 32 volume_reloader_null_addr init ("777774"b3),
4 33 volume_retriever_null_addr init ("777773"b3),
4 34 salv_truncate_null_addr init ("777005"b3)) bit (18) aligned static options (constant);
4 35
4 36 /* END INCLUDE FILE null_addresses.incl.pl1 */
247
248 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */
5 2
5 3 /* Added pc_vacating, Benson Margulies 84-10-17 */
5 4
5 5 /****^ HISTORY COMMENTS:
5 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383),
5 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098):
5 8* Add the support for subvolumes
5 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309),
5 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098):
5 11* Add root_lv flag to mount RLVs that do not have hardcore partitions.
5 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883),
5 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061):
5 14* Added inconsistent_dbm bit for determining the status of volume
5 15* dumper bit maps.
5 16* END HISTORY COMMENTS */
5 17
5 18 dcl pvt$array aligned external;
5 19 dcl pvt$max_n_entries fixed bin external;
5 20
5 21 dcl pvt_arrayp ptr;
5 22 dcl pvtep ptr;
5 23
5 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp);
5 25
5 26 dcl 1 pvte based (pvtep) aligned,
5 27
5 28 2 pvid bit (36), /* physical volume ID */
5 29
5 30 2 lvid bit (36), /* logical volume ID */
5 31
5 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */
5 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */
5 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */
5 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */
5 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */
5 37 2 pad3 bit (2) unaligned,
5 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */
5 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */
5 40
5 41
5 42
5 43 2 devname char (4), /* device name */
5 44
5 45 (2 device_type fixed bin (8), /* device type */
5 46 2 logical_area_number fixed bin (8), /* disk drive number */
5 47 2 used bit (1), /* TRUE if this entry is used */
5 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */
5 49 2 permanent bit (1), /* TRUE if cannot be demounted */
5 50 2 testing bit (1), /* Protocol bit for read_disk$test */
5 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */
5 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */
5 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */
5 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */
5 55 2 rpv bit (1), /* TRUE if this is the root physical volume */
5 56 2 scav_check_address
5 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */
5 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */
5 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */
5 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */
5 61 2 vacating bit (1), /* don't put new segs on this vol */
5 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */
5 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */
5 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */
5 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */
5 66
5 67
5 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */
5 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */
5 70
5 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */
5 72
5 73 2 nleft fixed bin (17), /* number of records left */
5 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */
5 75
5 76 2 dim_info bit (36), /* Information peculiar to DIM */
5 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */
5 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */
5 79 2 records_per_cyl fixed bin,
5 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */
5 81 2 sv_name char (2) aligned,
5 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */
5 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */
5 84
5 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */
5 86 2 pad2 bit (18) unaligned,
5 87
5 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */
5 89
5 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */
5 91
5 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */
5 93
5 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */
5 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */
5 96
5 97
5 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */
5 99
5 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */
5 101
5 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */
5 103
5 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */
5 105
5 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */
5 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */
5 108
5 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */
5 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */
5 111
5 112
5 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */
5 114 VOLMAP_ASYNC_READ init (1),
5 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant);
5 116
5 117
5 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */
248
249
250 end read_disk$init;
SOURCE FILES USED IN THIS COMPILATION.
LINE NUMBER DATE MODIFIED NAME PATHNAME
0 11/11/89 0839.5 read_disk.pl1 >special_ldd>install>MR12.3-1114>read_disk.pl1
244 1 09/29/77 1502.7 add_type.incl.pl1 >ldd>include>add_type.incl.pl1
245 2 01/30/85 1523.9 aste.incl.pl1 >ldd>include>aste.incl.pl1
246 3 11/23/82 0953.7 cmp.incl.pl1 >ldd>include>cmp.incl.pl1
247 4 07/11/84 0937.3 null_addresses.incl.pl1 >ldd>include>null_addresses.incl.pl1
248 5 07/21/88 2036.0 pvte.incl.pl1 >ldd>include>pvte.incl.pl1
NAMES DECLARED IN THIS COMPILATION.
IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES
(* indicates a set context)
NAMES DECLARED BY DECLARE STATEMENT.
a_dataptr parameter pointer dcl 32 ref 103 108 114 122 127 130 135
a_pvtx parameter fixed bin(17,0) dcl 33 ref 103 108 115 122 130 138 142
a_recno parameter fixed bin(18,0) dcl 34 ref 103 108 112 122 126 130 134
add_type 000000 constant structure level 1 packed packed unaligned dcl 1-8 in procedure
"read_disk$init"
add_type 1(18) based bit(4) level 2 in structure "mcme" packed packed unaligned
dcl 3-32 in procedure "read_disk$init" set ref
219*
addr builtin function dcl 87 ref 89 92 92 99 99 117 118 119 145 146 147
188 188 234 234
addrel builtin function dcl 87 ref 187
aste based structure level 1 dcl 2-11
astep 000124 automatic pointer dcl 2-9 set ref 90* 95 95 98 175* 179* 180* 182* 183
183 186 186 186 187 193 200 225* 236* 237*
ausedp 000022 external static bit(18) array level 2 packed packed unaligned dcl 54 set ref
180* 236*
baseno builtin function dcl 87 ref 90 90
bce_abs_seg$add 000032 constant entry external dcl 61 ref 100
bdata based fixed bin(35,0) array dcl 49 set ref 211* 211 212* 212
bit builtin function dcl 87 ref 218
cme based structure level 1 dcl 3-6
cmep 000126 automatic pointer dcl 3-4 set ref 217* 218 219
code parameter fixed bin(17,0) dcl 36 set ref 103 108 122 130 138 156* 161* 207*
223*
csl 12 based bit(9) level 2 packed packed unaligned dcl 2-11 set ref
186*
dataptr 000100 automatic pointer dcl 37 set ref 114* 127* 135* 211 212
device_inoperative 4(25) based bit(1) level 2 packed packed unaligned dcl 5-26 set ref 154
155*
disk 0(04) 000000 constant bit(4) initial level 2 packed packed unaligned dcl 1-8 ref
219
disk_control$test_drive 000034 constant entry external dcl 62 ref 150
disk_run 000036 constant entry external dcl 63 ref 152
dnzp 12(13) based bit(1) level 2 packed packed unaligned dcl 2-11 set ref 95*
183*
error_table_$fsdisk_not_ready 000104 external static fixed bin(35,0) dcl 84 ref 156
error_table_$fsdisk_phydev_err 000102 external static fixed bin(35,0) dcl 84 ref 207
fixed builtin function dcl 87 ref 90 90 218
get_aste 000040 constant entry external dcl 64 ref 179
get_ptrs_$given_astep 000044 constant entry external dcl 66 ref 182
get_ptrs_$ptw_to_cmep 000042 constant entry external dcl 65 ref 217
lock$lock_ast 000046 constant entry external dcl 67 ref 178 235
lock$unlock_ast 000050 constant entry external dcl 68 ref 181 238
make_sdw$unthreaded 000052 constant entry external dcl 69 ref 90
make_sdw_null_addr 000001 constant bit(22) initial dcl 4-4 set ref 240*
mcme based structure level 1 dcl 3-32
np 12(27) based bit(9) level 2 packed packed unaligned dcl 2-11 set ref
186*
npfs 12(11) based bit(1) level 2 packed packed unaligned dcl 2-11 set ref
200*
nqsw 5(20) based bit(1) level 2 packed packed unaligned dcl 2-11 set ref 95*
183*
page_fault_error 000116 stack reference condition dcl 82 ref 206
pc$cleanup 000054 constant entry external dcl 70 ref 225
pds$processid 000014 external static bit(36) dcl 51 ref 169
pmut$swap_sdw 000056 constant entry external dcl 71 ref 99 188 234
ptp 000102 automatic pointer dcl 38 set ref 90* 187* 195* 197* 198* 217* 220*
240*
ptw_util_$make_disk 000060 constant entry external dcl 72 ref 197
ptw_util_$make_null 000062 constant entry external dcl 73 ref 240
ptw_util_$make_null_disk 000064 constant entry external dcl 74 ref 195
ptw_util_$set_unwired 000066 constant entry external dcl 75 ref 220
ptw_util_$set_wired 000070 constant entry external dcl 76 ref 198
put_aste 000072 constant entry external dcl 77 ref 237
pvt$array 000106 external static fixed bin(17,0) dcl 5-18 set ref 118 146
pvt_array based structure array level 1 dcl 5-24 set ref 119 147
pvt_arrayp 000130 automatic pointer dcl 5-21 set ref 118* 119 146* 147
pvte based structure level 1 dcl 5-26
pvtep 000132 automatic pointer dcl 5-22 set ref 119* 147* 149 151 154 155
pvtx 4(09) based fixed bin(8,0) level 2 in structure "aste" packed packed unaligned
dcl 2-11 in procedure "read_disk$init" set ref
193*
pvtx 000104 automatic fixed bin(17,0) dcl 39 in procedure "read_disk$init" set ref 115*
119 142* 147 150* 193
rdisk_seg$ 000016 external static fixed bin(17,0) dcl 52 set ref 89 117 145
rdskp 000106 automatic pointer dcl 40 set ref 89* 90 90 99* 100 100 117* 145* 188*
211 212 234*
record_no 1 based bit(18) level 2 in structure "mcme" packed packed unaligned
dcl 3-32 in procedure "read_disk$init" set ref
218*
record_no 000110 automatic fixed bin(18,0) dcl 41 in procedure "read_disk$init" set ref 112*
126* 134* 195 197 218
records 12(18) based bit(9) level 2 packed packed unaligned dcl 2-11 set ref
186*
sdw_util_$set_size 000074 constant entry external dcl 78 ref 92
segno builtin function dcl 87 ref 100 100
sst$astsize 000020 external static fixed bin(17,0) dcl 53 ref 187
sst$level 000022 external static structure array level 1 dcl 54
static_rdisks_astep 000010 internal static pointer initial dcl 42 set ref 98* 175
static_rdisks_sdw 000012 internal static fixed bin(71,0) initial dcl 43 set ref 97* 174
sys_info$page_size 000024 external static fixed bin(17,0) dcl 57 ref 92
tc_data$initializer_id 000026 external static bit(36) dcl 58 ref 169
tc_data$system_shutdown 000030 external static bit(1) dcl 59 ref 169
testing 4(21) based bit(1) level 2 packed packed unaligned dcl 5-26 set ref
149* 151
testsw 000111 automatic bit(1) packed unaligned dcl 44 set ref 125* 133* 140* 160
thread$cin 000076 constant entry external dcl 79 ref 236
thread$out 000100 constant entry external dcl 80 ref 180
tsdw 000112 automatic fixed bin(71,0) dcl 45 set ref 90* 92 92 97 99 99 174* 182* 188 188
233* 234 234
use_init 000114 automatic bit(1) dcl 46 set ref 169* 173 232
writesw 000115 automatic bit(1) packed unaligned dcl 47 set ref 105* 110* 124* 132*
195 211 216
NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED.
VOLMAP_ASYNC_IDLE internal static fixed bin(17,0) initial dcl 5-113
VOLMAP_ASYNC_READ internal static fixed bin(17,0) initial dcl 5-113
VOLMAP_ASYNC_WRITE internal static fixed bin(17,0) initial dcl 5-113
append_null_addr internal static bit(22) initial dcl 4-4
asta based bit(432) array dcl 2-86
aste_part based structure level 1 dcl 2-89
badd_type based structure level 1 packed packed unaligned dcl 1-15
cma based structure array level 1 dcl 3-30
create_vtoce_four_null_addrs internal static fixed bin(71,0) initial dcl 4-24
create_vtoce_null_addr internal static bit(18) initial dcl 4-26
fill_page_table_null_addr internal static bit(22) initial dcl 4-4
get_aste_null_addr internal static bit(22) initial dcl 4-4
get_file_map_dumper_non_null_addr internal static bit(22) initial dcl 4-4
get_file_map_null_addr internal static bit(22) initial dcl 4-4
get_file_map_vt_null_addr internal static bit(22) initial dcl 4-4
init_sst_null_addr internal static bit(22) initial dcl 4-4
list_deposit_null_addr internal static bit(22) initial dcl 4-4
page_bad_null_addr internal static bit(22) initial dcl 4-4
page_bad_pd_null_addr internal static bit(22) initial dcl 4-4
page_devparity_null_addr internal static bit(22) initial dcl 4-4
page_parity_null_addr internal static bit(22) initial dcl 4-4
page_problem_null_addr internal static bit(22) initial dcl 4-4
pc_move_page_table_1_null_addr internal static bit(22) initial dcl 4-4
pc_move_page_table_2_null_addr internal static bit(22) initial dcl 4-4
put_aste_null_addr internal static bit(22) initial dcl 4-4
pv_salv_null_addr internal static bit(18) initial dcl 4-26
pv_scav_null_addr internal static bit(18) initial dcl 4-26
pvt$max_n_entries external static fixed bin(17,0) dcl 5-19
salv_truncate_null_addr internal static bit(18) initial dcl 4-26
seg_aste based structure level 1 dcl 2-96
segmove_new_addr_null_addr internal static bit(22) initial dcl 4-4
segmove_old_addr_null_addr internal static bit(22) initial dcl 4-4
truncate_vtoce_fill_null_addr internal static bit(18) initial dcl 4-26
truncate_vtoce_null_addr internal static bit(18) initial dcl 4-26
unprotected_null_addr internal static bit(22) initial dcl 4-4
update_vtoce_null_addr internal static bit(18) initial dcl 4-26
volume_reloader_null_addr internal static bit(18) initial dcl 4-26
volume_retriever_null_addr internal static bit(18) initial dcl 4-26
NAMES DECLARED BY EXPLICIT CONTEXT.
fini 000616 constant label dcl 225 ref 208
merge 000261 constant label dcl 142 ref 128 136
no_test 000153 constant label dcl 112 ref 106
operate 000333 constant label dcl 169 ref 120
read_disk 000176 constant entry external dcl 122
read_disk$init 000015 constant entry external dcl 10
read_disk_no_test 000125 constant entry external dcl 103
test_disk 000247 constant entry external dcl 138
write_disk 000221 constant entry external dcl 130
write_disk_no_test 000141 constant entry external dcl 108
THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION.
STORAGE REQUIREMENTS FOR THIS PROGRAM.
Object Text Link Symbol Defs Static
Start 0 0 1352 1462 716 1362
Length 2014 716 110 316 433 4
BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME
read_disk$init 108 external procedure is an external procedure.
on unit on line 206 64 on unit
STORAGE FOR INTERNAL STATIC VARIABLES.
LOC IDENTIFIER BLOCK NAME
000010 static_rdisks_astep read_disk$init
000012 static_rdisks_sdw read_disk$init
STORAGE FOR AUTOMATIC VARIABLES.
STACK FRAME LOC IDENTIFIER BLOCK NAME
read_disk$init 000100 dataptr read_disk$init
000102 ptp read_disk$init
000104 pvtx read_disk$init
000106 rdskp read_disk$init
000110 record_no read_disk$init
000111 testsw read_disk$init
000112 tsdw read_disk$init
000114 use_init read_disk$init
000115 writesw read_disk$init
000124 astep read_disk$init
000126 cmep read_disk$init
000130 pvt_arrayp read_disk$init
000132 pvtep read_disk$init
THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM.
r_e_as call_ext_out return_mac tra_ext_1 enable_op ext_entry
int_entry
THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM.
bce_abs_seg$add disk_control$test_drive disk_run get_aste
get_ptrs_$given_astep get_ptrs_$ptw_to_cmep lock$lock_ast lock$unlock_ast
make_sdw$unthreaded pc$cleanup pmut$swap_sdw ptw_util_$make_disk
ptw_util_$make_null ptw_util_$make_null_disk ptw_util_$set_unwired ptw_util_$set_wired
put_aste sdw_util_$set_size thread$cin thread$out
THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM.
error_table_$fsdisk_not_ready error_table_$fsdisk_phydev_err pds$processid
pvt$array rdisk_seg$ sst$astsize sst$level
sys_info$page_size tc_data$initializer_id tc_data$system_shutdown
LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC
10 000014 89 000022 90 000024 92 000044 95 000061 97 000066 98 000071
99 000072 100 000104 101 000117 103 000120 105 000135 106 000136 108 000137
110 000151 112 000153 114 000156 115 000161 117 000163 118 000166 119 000170
120 000173 122 000174 124 000206 125 000207 126 000210 127 000213 128 000216
130 000217 132 000231 133 000233 134 000234 135 000237 136 000242 138 000243
140 000257 142 000261 145 000264 146 000267 147 000271 149 000274 150 000276
151 000304 152 000310 153 000315 154 000316 155 000321 156 000323 157 000326
160 000327 161 000331 162 000332 169 000333 173 000341 174 000342 175 000344
176 000346 178 000347 179 000353 180 000366 181 000377 182 000404 183 000415
186 000422 187 000431 188 000436 193 000450 195 000454 197 000472 198 000505
200 000514 206 000517 207 000533 208 000536 211 000541 212 000552 216 000560
217 000562 218 000573 219 000601 220 000606 223 000615 225 000616 232 000625
233 000627 234 000631 235 000644 236 000651 237 000662 238 000671 239 000676
240 000677 242 000710
-----------------------------------------------------------
Historical Background
This edition of the Multics software materials and documentation is provided and donated
to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc.
as a contribution to computer science knowledge.
This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology,
Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL
and BULL HN Information Systems Inc. to the development of this operating system.
Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970),
renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership
of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture
for managing computer hardware properly and for executing programs. Many subsequent operating systems
incorporated Multics principles.
Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc.,
as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. .
-----------------------------------------------------------
Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without
fee is hereby granted,provided that the below copyright notice and historical background appear in all copies
and that both the copyright notice and historical background and this permission notice appear in supporting
documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining
to distribution of the programs without specific prior written permission.
Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc.
Copyright 2006 by BULL HN Information Systems Inc.
Copyright 2006 by Bull SAS
All Rights Reserved