COMPILATION LISTING OF SEGMENT link_unsnap_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/04/82 1645.6 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* LINK_UNSNAP is a proceedure to unsnap links in a combined linkage section. */ 12 /* it also gives a warning and unsnaps trap before link linkage */ 13 /* Modification record: */ 14 /* first coded by M.A.Meer and completed 10/69 */ 15 /* converted to v2 PL/I and changed to validate the linkage template */ 16 /* pointer in the linkage section header (to get around a bug in HC) */ 17 /* by D. M. Wells on 1974.05.02 (MCR 476 - part iii) */ 18 /* 11/6/74 by S. Webber to allow lots to begin other than at the base of a segment */ 19 /* 5/17/76 by M. Weaver to check for links to separate static */ 20 /* 6/11/76 by M. Weaver to fix bug that unsnaps almost all links */ 21 22 link_unsnap_: proc (lotptr, isotptr, linkageptr, hcsc, high_seg); 23 24 dcl (addrel, baseno, bit, bin, fixed, null, rel) builtin; 25 dcl term_segno bit (15) aligned; /* Seg. no. of seg. to be discarded. */ 26 dcl term_link_segno bit (15) aligned; /* Seg. no. of linkage to be discarded. */ 27 dcl term_static_segno bit (15) aligned; /* seg. no. of static to be discarded */ 28 dcl sep_static_sw bit (1) aligned; /* ON if static is separate from linkage */ 29 dcl bptr bit (72) aligned based; 30 dcl based_ptr ptr based; 31 32 dcl (lotptr, /* pointer to linkage offset tabel */ 33 linkageptr, /* pointer to linkage section to be discarded */ 34 headptr, /* pointer to beginning of block -- header */ 35 defstartptr, /* pointer to beginning of definition section for this block */ 36 linkstartptr, /* pointer to beginning of links in this block */ 37 itsptr, /* pointer to a link -- its pair */ 38 vlp, /* pointer to virgin linkage section */ 39 isotptr, /* pointer to static offset table */ 40 nxtblkptr) ptr; /* pointer to next block in this section */ 41 42 dcl (hcsc, /* hard core segment count */ 43 segno, 44 hard_core_seg_count, 45 high_seg) fixed bin (17); /* highest segment number used minus hcsc */ 46 dcl t_segno fixed bin (18); 47 48 49 dcl fword fixed bin (35) based (lotp); /* useful way of addressing a word */ 50 51 52 dcl (relbeginptr, /* relative ptr to beginning of linkage section to be discarded */ 53 block_end, /* rel ptr to end of links in this block */ 54 rel_end_ptr) bit (18) aligned; /* end of linkage section to be discarded */ 55 56 dcl (static_relbeginptr, /* relative ptr to beginning of static to be discarded */ 57 static_rel_end_ptr) bit (18) aligned; /* end of static section to be discarded */ 58 59 60 1 1 /* BEGIN INCLUDE FILE its.incl.pl1 1 2* modified 27 July 79 by JRDavis to add its_unsigned 1 3* Internal format of ITS pointer, including ring-number field for follow-on processor */ 1 4 1 5 dcl 1 its based aligned, /* declaration for ITS type pointer */ 1 6 2 pad1 bit (3) unaligned, 1 7 2 segno bit (15) unaligned, /* segment number within the pointer */ 1 8 2 ringno bit (3) unaligned, /* ring number within the pointer */ 1 9 2 pad2 bit (9) unaligned, 1 10 2 its_mod bit (6) unaligned, /* should be 43(8) */ 1 11 1 12 2 offset bit (18) unaligned, /* word offset within the addressed segment */ 1 13 2 pad3 bit (3) unaligned, 1 14 2 bit_offset bit (6) unaligned, /* bit offset within the word */ 1 15 2 pad4 bit (3) unaligned, 1 16 2 mod bit (6) unaligned; /* further modification */ 1 17 1 18 dcl 1 itp based aligned, /* declaration for ITP type pointer */ 1 19 2 pr_no bit (3) unaligned, /* number of pointer register to use */ 1 20 2 pad1 bit (27) unaligned, 1 21 2 itp_mod bit (6) unaligned, /* should be 41(8) */ 1 22 1 23 2 offset bit (18) unaligned, /* word offset from pointer register word offset */ 1 24 2 pad2 bit (3) unaligned, 1 25 2 bit_offset bit (6) unaligned, /* bit offset relative to new word offset */ 1 26 2 pad3 bit (3) unaligned, 1 27 2 mod bit (6) unaligned; /* further modification */ 1 28 1 29 1 30 dcl 1 its_unsigned based aligned, /* just like its, but with unsigned binary */ 1 31 2 pad1 bit (3) unaligned, 1 32 2 segno fixed bin (15) unsigned unaligned, 1 33 2 ringno fixed bin (3) unsigned unaligned, 1 34 2 pad2 bit (9) unaligned, 1 35 2 its_mod bit (6) unaligned, 1 36 1 37 2 offset fixed bin (18) unsigned unaligned, 1 38 2 pad3 bit (3) unaligned, 1 39 2 bit_offset fixed bin (6) unsigned unaligned, 1 40 2 pad4 bit (3) unaligned, 1 41 2 mod bit (6) unaligned; 1 42 1 43 dcl 1 itp_unsigned based aligned, /* just like itp, but with unsigned binary where appropriate */ 1 44 2 pr_no fixed bin (3) unsigned unaligned, 1 45 2 pad1 bit (27) unaligned, 1 46 2 itp_mod bit (6) unaligned, 1 47 1 48 2 offset fixed bin (18) unsigned unaligned, 1 49 2 pad2 bit (3) unaligned, 1 50 2 bit_offset fixed bin (6) unsigned unaligned, 1 51 2 pad3 bit (3) unaligned, 1 52 2 mod bit (6) unaligned; 1 53 1 54 1 55 dcl ITS_MODIFIER bit (6) unaligned internal static options (constant) init ("43"b3); 1 56 dcl ITP_MODIFIER bit (6) unaligned internal static options (constant) init ("41"b3); 1 57 1 58 /* END INCLUDE FILE its.incl.pl1 */ 61 2 1 /* BEGIN INCLUDE FILE -- lot.incl.pl1 S.Webber 9/74, Modified by R. Bratt 04/76, modified by M. Weaver 7/76 */ 2 2 /* modified by M. Weaver 3/77 */ 2 3 2 4 dcl lotp ptr; 2 5 2 6 dcl 1 lot based (lotp) aligned, 2 7 2 lp (0:9999) ptr unaligned; /* array of packed pointers to linkage sections */ 2 8 2 9 dcl lot_fault bit (36) aligned static options (constant) init ("111000000000000000000000000000000000"b); 2 10 /* lot fault has fault code = 0 and offset = 0 */ 2 11 2 12 dcl isotp ptr; 2 13 dcl 1 isot based (isotp) aligned, 2 14 2 isp (0:9999) ptr unaligned; 2 15 2 16 dcl 1 isot1 (0 :9999) aligned based, 2 17 2 flags unaligned, 2 18 3 fault bit (2) unaligned, 2 19 3 system bit (1) unaligned, 2 20 3 mbz bit (6) unaligned, 2 21 2 fault_code fixed bin (8) unaligned, 2 22 2 static_offset bit (18) unaligned; 2 23 2 24 2 25 /* END INCLUDE FILE lot.incl.pl1 */ 62 3 1 /* BEGIN INCLUDE FILE linkdcl.incl.pl1 --- last modified 15 Nov 1971 by C Garman */ 3 2 3 3 /* Last Modified (Date and Reason): 3 4* 6/75 by M.Weaver to add virgin_linkage_header declaration 3 5* 6/75 by S.Webber to comment existing structures better 3 6* 9/77 by M. Weaver to add run_depth to link 3 7**/ 3 8 3 9 dcl 1 link based aligned, /* link pair in linkage section */ 3 10 2 head_ptr bit (18) unal, /* rel pointer to beginning of linkage section */ 3 11 2 ringno bit (3) unal, 3 12 2 mbz bit (3) unal, 3 13 2 run_depth fixed bin (5) unal, /* run unit depth, filled when link is snapped */ 3 14 2 ft2 bit (6) unal, /* fault tag. 46(8) if not snapped, 43(8) if snapped */ 3 15 3 16 2 exp_ptr bit (18) unal, /* pointer (rel to defs) of expression word */ 3 17 2 mbz2 bit (12) unal, 3 18 2 modifier bit (6) unal; /* modifier to be left in snapped link */ 3 19 3 20 dcl 1 exp_word based aligned, /* expression word in link definition */ 3 21 2 type_ptr bit (18) unal, /* pointer (rel to defs) of type pair structure */ 3 22 2 exp bit (18) unal; /* constant expression to be added in when snapping link */ 3 23 3 24 dcl 1 type_pair based aligned, /* type pair in link definition */ 3 25 2 type bit (18) unal, /* type of link. may be 1,2,3,4,5, or 6 */ 3 26 2 trap_ptr bit (18) unal, /* pointer (rel to defs) to the trap word */ 3 27 2 seg_ptr bit (18) unal, /* pointer to ACC reference name for segment referenced */ 3 28 2 ext_ptr bit (18) unal; /* pointer (rel to defs) of ACC segdef name */ 3 29 3 30 dcl 1 header based aligned, /* linkage block header */ 3 31 2 def_ptr ptr, /* pointer to definition section */ 3 32 2 symbol_ptr ptr unal, /* pointer to symbol section in object segment */ 3 33 2 original_linkage_ptr ptr unal, /* pointer to linkage section in object segment */ 3 34 2 unused bit (72), 3 35 2 stats, 3 36 3 begin_links bit (18) unal, /* offset (rel to this section) of first link */ 3 37 3 block_length bit (18) unal, /* number of words in this linkage section */ 3 38 3 segment_number bit (18) unal, /* text segment number associated with this section */ 3 39 3 static_length bit (18) unal; /* number of words of static for this segment */ 3 40 3 41 dcl 1 virgin_linkage_header aligned based, /* template for linkage header in object segment */ 3 42 2 pad bit (30) unaligned, /* is filled in by linker */ 3 43 2 defs_in_link bit (6) unaligned, /* =o20 if defs in linkage (nonstandard) */ 3 44 2 def_offset bit (18) unaligned, /* offset of definition section */ 3 45 2 first_ref_relp bit (18) unaligned, /* offset of trap-at-first-reference offset array */ 3 46 2 filled_in_later bit (144), 3 47 2 link_begin bit (18) unaligned, /* offset of first link */ 3 48 2 linkage_section_lng bit (18) unaligned, /* length of linkage section */ 3 49 2 segno_pad bit (18) unaligned, /* will be segment number of copied linkage */ 3 50 2 static_length bit (18) unaligned; /* length of static section */ 3 51 3 52 3 53 dcl 1 trap_word based aligned, /* trap word in link definition */ 3 54 2 call_ptr bit (18) unal, /* pointer (rel to link) of link to trap procedure */ 3 55 2 arg_ptr bit (18) unal; /* pointer (rel to link) of link to arg info for trap proc */ 3 56 3 57 dcl 1 name based aligned, /* storage of ASCII names in definitions */ 3 58 2 nchars bit (9) unaligned, /* number of characters in name */ 3 59 2 char_string char (31) unaligned; /* 31-character name */ 3 60 3 61 /* END INCLUDE FILE linkdcl.incl.pl1 */ 63 64 65 /* */ 66 67 68 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 69 70 hard_core_seg_count = hcsc; 71 if rel (linkageptr) = (18)"1"b then do; /* initialize for no linkage section to be discarded */ 72 term_segno = bit (bin (baseno (linkageptr), 15, 0), 15); 73 headptr = null (); 74 relbeginptr = "0"b; 75 rel_end_ptr = "0"b; 76 term_link_segno = "0"b; 77 sep_static_sw = "0"b; 78 end; 79 else do; /* for segments with linkage sections to be discarded */ 80 headptr = linkageptr; /* header pointer for linkage section to be discarded */ 81 relbeginptr = rel (headptr); /* rel ptr to beginning of linkage section to be discarded */ 82 83 /* first set up variables relating to linkage to be discarded */ 84 85 rel_end_ptr = bit (bin (bin (headptr -> header.block_length, 18)+bin (relbeginptr, 18)-1, 18)); 86 term_segno = bit (bin (headptr -> header.stats.segment_number, 15, 0), 15); /* segment to be discarded */ 87 term_link_segno = bit (bin (baseno (headptr), 15, 0), 15); /* segment number of linkage to be discarded */ 88 t_segno = bin (term_segno, 18); /* see if we have a separate static section allocated */ 89 if isotptr -> isot1 (t_segno).flags.fault = "11"b then sep_static_sw = "0"b; 90 else if isotptr -> isot.isp (t_segno) = lotptr -> lot.lp (t_segno) then sep_static_sw = "0"b; 91 else do; 92 sep_static_sw = "1"b; 93 static_relbeginptr = rel (isotptr -> isot.isp (t_segno)); 94 static_rel_end_ptr = bit (bin (bin (headptr -> header.static_length, 18) 95 + bin (static_relbeginptr, 18) - 1, 18)); 96 term_static_segno = bit (bin (baseno (isotptr -> isot.isp (t_segno)), 15), 15); 97 end; 98 end; 99 100 /* next fiddle with the linkage offset table to start down the combined linkage section */ 101 102 do segno = hard_core_seg_count+1 to hard_core_seg_count+high_seg; 103 if rel (lotptr -> lot.lp (segno)) ^= "0"b then do; 104 headptr = lotptr -> lot.lp (segno); 105 defstartptr = headptr -> header.def_ptr; /* pointer to beginning of def section */ 106 linkstartptr = addrel (headptr, headptr -> header.stats.begin_links); /* pointer to beginning of links */ 107 108 /* check for defs in linkage section and compute end of links */ 109 110 if (baseno (linkstartptr) = baseno (defstartptr)) & (fixed (rel (defstartptr), 18) > fixed (rel (linkstartptr), 18)) 111 then block_end = rel (defstartptr); /* end of links before end of block if defs follow links */ 112 else block_end = rel (addrel (headptr, headptr -> header.stats.block_length)); 113 /* end of links and end of block are the same */ 114 115 /* GET LINK PAIRS */ 116 117 118 do itsptr = linkstartptr repeat (addrel (itsptr, 2)) /* loop through all ITS ptrs here */ 119 while (bin (rel (itsptr), 18) < bin (block_end, 18)); 120 if itsptr -> its.its_mod ^= "100011"b then go to next_lk; /* not a snapped link */ 121 if fixed (itsptr -> its.segno, 18) < hard_core_seg_count then 122 go to next_lk; /* an aos count should never get this big */ 123 124 /* now check for segment or linkage section to be deleted */ 125 126 if itsptr -> its.segno ^= term_segno 127 then do; /* need to check more to see if should unsnap */ 128 if itsptr -> its.segno ^= term_link_segno then goto check_static; 129 if itsptr -> its.offset > rel_end_ptr then goto check_static; 130 if itsptr -> its.offset >= relbeginptr then goto unsnap; 131 /* link is to linkage section to be discarded */ 132 check_static: if sep_static_sw then do; /* check to see if link points to separate static */ 133 if itsptr -> its.segno ^= term_static_segno then goto next_lk; 134 if itsptr -> its.offset > static_rel_end_ptr then goto next_lk; 135 if itsptr -> its.offset < static_relbeginptr then goto next_lk; 136 end; 137 else goto next_lk; /* no separate static */ 138 end; 139 140 unsnap: vlp = headptr -> header.original_linkage_ptr; 141 itsptr -> bptr = addrel (vlp, bit (bin (bin (rel (itsptr), 18)-bin (rel (headptr), 18), 18))) -> bptr; 142 143 next_lk: 144 end; 145 146 end; 147 148 end; 149 150 return; 151 152 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/04/82 1614.6 link_unsnap_.pl1 >dumps>old>recomp>link_unsnap_.pl1 61 1 11/26/79 1320.6 its.incl.pl1 >ldd>include>its.incl.pl1 62 2 08/05/77 1022.4 lot.incl.pl1 >ldd>include>lot.incl.pl1 63 3 10/13/77 1545.6 linkdcl.incl.pl1 >ldd>include>linkdcl.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. addrel builtin function dcl 24 ref 106 112 141 143 baseno builtin function dcl 24 ref 72 87 96 110 110 begin_links 6 based bit(18) level 3 packed unaligned dcl 3-30 ref 106 bin builtin function dcl 24 ref 72 85 85 85 86 87 88 94 94 94 96 118 118 141 141 141 bit builtin function dcl 24 ref 72 85 86 87 94 96 141 block_end 000122 automatic bit(18) dcl 52 set ref 110* 112* 118 block_length 6(18) based bit(18) level 3 packed unaligned dcl 3-30 ref 85 112 bptr based bit(72) dcl 29 set ref 141* 141 def_ptr based pointer level 2 dcl 3-30 ref 105 defstartptr 000106 automatic pointer dcl 32 set ref 105* 110 110 110 fault based bit(2) array level 3 packed unaligned dcl 2-16 ref 89 fixed builtin function dcl 24 ref 110 110 121 flags based structure array level 2 packed unaligned dcl 2-16 hard_core_seg_count 000117 automatic fixed bin(17,0) dcl 42 set ref 70* 102 102 121 hcsc parameter fixed bin(17,0) dcl 42 ref 22 70 header based structure level 1 dcl 3-30 headptr 000104 automatic pointer dcl 32 set ref 73* 80* 81 85 86 87 94 104* 105 106 106 112 112 140 141 high_seg parameter fixed bin(17,0) dcl 42 ref 22 102 isot based structure level 1 dcl 2-13 isot1 based structure array level 1 dcl 2-16 isotptr parameter pointer dcl 32 ref 22 89 90 93 96 isp based pointer array level 2 packed unaligned dcl 2-13 ref 90 93 96 its based structure level 1 dcl 1-5 its_mod 0(30) based bit(6) level 2 packed unaligned dcl 1-5 ref 120 itsptr 000112 automatic pointer dcl 32 set ref 118* 118* 120 121 126 128 129 130 133 134 135 141 141* 143 linkageptr parameter pointer dcl 32 ref 22 71 72 80 linkstartptr 000110 automatic pointer dcl 32 set ref 106* 110 110 118 lot based structure level 1 dcl 2-6 lotptr parameter pointer dcl 32 ref 22 90 103 104 lp based pointer array level 2 packed unaligned dcl 2-6 ref 90 103 104 null builtin function dcl 24 ref 73 offset 1 based bit(18) level 2 packed unaligned dcl 1-5 ref 129 130 134 135 original_linkage_ptr 3 based pointer level 2 packed unaligned dcl 3-30 ref 140 rel builtin function dcl 24 ref 71 81 93 103 110 110 110 112 118 141 141 rel_end_ptr 000123 automatic bit(18) dcl 52 set ref 75* 85* 129 relbeginptr 000121 automatic bit(18) dcl 52 set ref 74* 81* 85 130 segment_number 7 based bit(18) level 3 packed unaligned dcl 3-30 ref 86 segno 000116 automatic fixed bin(17,0) dcl 42 in procedure "link_unsnap_" set ref 102* 103 104* segno 0(03) based bit(15) level 2 in structure "its" packed unaligned dcl 1-5 in procedure "link_unsnap_" ref 121 126 128 133 sep_static_sw 000103 automatic bit(1) dcl 28 set ref 77* 89* 90* 92* 132 static_length 7(18) based bit(18) level 3 packed unaligned dcl 3-30 ref 94 static_rel_end_ptr 000125 automatic bit(18) dcl 56 set ref 94* 134 static_relbeginptr 000124 automatic bit(18) dcl 56 set ref 93* 94 135 stats 6 based structure level 2 dcl 3-30 t_segno 000120 automatic fixed bin(18,0) dcl 46 set ref 88* 89 90 90 93 96 term_link_segno 000101 automatic bit(15) dcl 26 set ref 76* 87* 128 term_segno 000100 automatic bit(15) dcl 25 set ref 72* 86* 88 126 term_static_segno 000102 automatic bit(15) dcl 27 set ref 96* 133 vlp 000114 automatic pointer dcl 32 set ref 140* 141 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ITP_MODIFIER internal static bit(6) initial unaligned dcl 1-56 ITS_MODIFIER internal static bit(6) initial unaligned dcl 1-55 based_ptr based pointer dcl 30 exp_word based structure level 1 dcl 3-20 fword based fixed bin(35,0) dcl 49 isotp automatic pointer dcl 2-12 itp based structure level 1 dcl 1-18 itp_unsigned based structure level 1 dcl 1-43 its_unsigned based structure level 1 dcl 1-30 link based structure level 1 dcl 3-9 lot_fault internal static bit(36) initial dcl 2-9 lotp automatic pointer dcl 2-4 name based structure level 1 dcl 3-57 nxtblkptr automatic pointer dcl 32 trap_word based structure level 1 dcl 3-53 type_pair based structure level 1 dcl 3-24 virgin_linkage_header based structure level 1 dcl 3-41 NAMES DECLARED BY EXPLICIT CONTEXT. check_static 000276 constant label dcl 132 ref 128 129 link_unsnap_ 000011 constant entry external dcl 22 next_lk 000335 constant label dcl 143 ref 120 121 132 133 134 135 unsnap 000312 constant label dcl 140 ref 130 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 370 400 343 400 Length 602 343 10 165 25 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME link_unsnap_ 89 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME link_unsnap_ 000100 term_segno link_unsnap_ 000101 term_link_segno link_unsnap_ 000102 term_static_segno link_unsnap_ 000103 sep_static_sw link_unsnap_ 000104 headptr link_unsnap_ 000106 defstartptr link_unsnap_ 000110 linkstartptr link_unsnap_ 000112 itsptr link_unsnap_ 000114 vlp link_unsnap_ 000116 segno link_unsnap_ 000117 hard_core_seg_count link_unsnap_ 000120 t_segno link_unsnap_ 000121 relbeginptr link_unsnap_ 000122 block_end link_unsnap_ 000123 rel_end_ptr link_unsnap_ 000124 static_relbeginptr link_unsnap_ 000125 static_rel_end_ptr link_unsnap_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. return ext_entry NO EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000004 70 000016 71 000021 72 000026 73 000037 74 000041 75 000042 76 000043 77 000044 78 000045 80 000046 81 000047 85 000051 86 000064 87 000074 88 000105 89 000110 90 000117 92 000126 93 000130 94 000133 96 000146 102 000157 103 000170 104 000175 105 000177 106 000201 110 000206 112 000227 118 000235 120 000247 121 000253 126 000262 128 000265 129 000267 130 000274 132 000276 133 000300 134 000303 135 000310 140 000312 141 000315 143 000335 148 000340 150 000342 ----------------------------------------------------------- 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