COMPILATION LISTING OF SEGMENT asum_create_segment_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/08/85 1141.4 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1985 * 4* * * 5* *********************************************************** */ 6 /* asum_create_segment_ -- program to create (if needed) and initialize 7* one segment of the as_user_message. Note that this program is NOT 8* used by a process reading that wants to initiate a new segment, 9* only by a process that KNOWS that the segment in question has not 10* yet been used in the current session. Thus it cheerfully truncates 11* segments that already exist. */ 12 13 /* format: style5,indcomtxt */ 14 15 /* Written 2/20/85, BIM */ 16 17 asum_create_segment_: 18 procedure (P_segment_index, P_segment_ptr); 19 20 declare P_segment_index fixed bin; /* Which segment do we create ? */ 21 declare P_segment_ptr pointer; 22 1 1 /* *********************************************************** 1 2* * * 1 3* * Copyright, (C) Honeywell Information Systems Inc., 1985 * 1 4* * * 1 5* *********************************************************** */ 1 6 /* Begin include file asum_data_.incl.pl1 */ 1 7 /* Definitions in asum_data_ (as_user_message_data_) BIM 1985-01-17 */ 1 8 /* format: style3 */ 1 9 1 10 declare asum_data_$acl_entries 1 11 bit (36) aligned ext; /* base acl array here */ 1 12 declare asum_data_$db_dir char (168) ext; 1 13 declare asum_data_$db_multiclass 1 14 bit (1) aligned ext; 1 15 declare asum_data_$n_acl_entries 1 16 fixed bin ext; 1 17 declare asum_data_$db_cbi bit (36) aligned ext; /* No need to declare the whole structure here */ 1 18 declare asum_data_$db_dir_cbi 1 19 bit (36) aligned ext; /* No need to declare the whole structure here */ 1 20 declare asum_data_$db_dir_rb 1 21 (2) fixed bin (3) ext; 1 22 declare asum_data_$db_rb (3) fixed bin (3) ext; 1 23 declare asum_data_$db_locked 1 24 bit (1) aligned ext; 1 25 declare asum_data_$process_info_ptr 1 26 pointer static ext; 1 27 declare asum_data_$system_info_ptr 1 28 pointer static ext; 1 29 declare asum_data_$entry_ring 1 30 fixed bin (3) static ext; 1 31 declare asum_data_$lock_id bit (36) aligned ext; 1 32 declare asum_data_$process_id 1 33 bit (36) aligned ext; 1 34 1 35 /* End include file asum_data_.incl.pl1 */ 23 2 1 /* Begin include file as_user_message_system.incl.pl1 BIM 1985-01-11 */ 2 2 /* format: style4 */ 2 3 2 4 /**** Per-system and per-user information on the as_user_message segments */ 2 5 2 6 /**** Declaration used to construct the name of one of the set of segments */ 2 7 2 8 declare 1 as_user_message_segment_name unaligned, 2 9 2 constant char (16), /* as_user_message_ */ 2 10 2 index picture "99"; 2 11 2 12 declare AS_USER_MESSAGE_SEGMENT_NAME_CONSTANT char (16) init ("as_user_message_") int static options (constant); 2 13 2 14 /**** as_user_messages (mis)-use the pad bits in a message segment 2 15* message ID to identify which of one of a series of segments 2 16* to find the message in. */ 2 17 2 18 declare 1 as_user_message_id aligned, /* use UNSPEC, not based (addr) */ 2 19 2 segment_index fixed bin (9) unsigned unaligned, 2 20 2 pad bit (11) unaligned, 2 21 2 pad_clock bit (52) unaligned; 2 22 2 23 /**** Data stored in the as_user_message_system segment. 2 24* This is the shared overhead database, including the 2 25* associative memory of messages and destination processes. */ 2 26 2 27 declare AS_USER_MESSAGE_SYSTEM_NAME char (32) init ("as_user_message_system") int static options (constant); 2 28 2 29 declare as_user_message_system_info_ptr pointer; 2 30 declare 1 as_user_message_system_info aligned based (as_user_message_system_info_ptr), 2 31 2 header aligned, 2 32 3 sentinel char (8) aligned, /* Version, but mostly validity check */ 2 33 3 time_of_bootload fixed bin (71), /* was this segment initialized in this bootload? */ 2 34 3 lock bit (36) aligned, /* on segment creation/deletion */ 2 35 3 n_segments fixed bin, /* total created */ 2 36 2 37 3 highest_in_use fixed bin (35), /* update with stacq */ 2 38 2 pad (9) bit (36) aligned, 2 39 2 destination_am (16000) aligned, /* each entry is 16 words. Listen UP, compiler */ 2 40 3 process_id bit (36) aligned, 2 41 3 ring fixed bin (3) unsigned unaligned, 2 42 3 reader_deletes bit (1) unaligned, 2 43 3 pad bit (32) unaligned, 2 44 3 handle bit (72) aligned, 2 45 3 message_id bit (72) aligned, 2 46 3 group_id char (32) unaligned, 2 47 3 access_class bit (72) aligned; 2 48 2 49 declare AS_USER_ANY_PROCESS_ID bit (36) aligned init ("777777777777"b3) int static options (constant); 2 50 2 51 2 52 /**** + To look for a message, do the following: 2 53* initialize the message_id to 72 1's. 2 54* loop on the process_id_list, setting px as index; 2 55* if the process_id (px) is ANY_PROCESS_ID or the target process id then do; 2 56* if handle_list (px) is the desired handle then do; 2 57* if the process_id match was exact then 2 58* message_id = min (message_id, message_id (px)); 2 59* otherwise do; 2 60* read out the mesage for message_id (px), 2 61* determine if it is really for target_process. If so, 2 62* message_id = min (message_id, message_id (px)); 2 63* end; 2 64* end; 2 65* end; 2 66* 2 67* If message_id = 72 1's, then there is no message destined for this handle 2 68* for this process. 2 69* 2 70* Otherwise, message_id is the id of the first message for this handle. 2 71**/ 2 72 2 73 declare AS_USER_MESSAGE_SYSTEM_SENTINEL char (8) aligned init ("asumsys1") int static options (constant); 2 74 2 75 /**** Data for each user process */ 2 76 2 77 /**** *system variable to find this stuff with */ 2 78 2 79 declare as_user_message_perprocess_info_ptr pointer; 2 80 2 81 declare 1 as_user_message_perprocess_info aligned based (as_user_message_perprocess_info_ptr), 2 82 2 sentinel char (8) aligned, 2 83 2 mseg_ptr (0:99) pointer options (packed); /* for mseg_ */ 2 84 2 85 declare AS_USER_MESSAGE_PROCESS_SENTINEL char (8) aligned init ("asumprc1") int static options (constant); 2 86 2 87 /* End include file as_user_message_system.incl.pl1 */ 24 3 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 3 2* 3 3* Values for the "access mode" argument so often used in hardcore 3 4* James R. Davis 26 Jan 81 MCR 4844 3 5* Added constants for SM access 4/28/82 Jay Pattin 3 6* Added text strings 03/19/85 Chris Jones 3 7**/ 3 8 3 9 3 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 3 11 dcl ( 3 12 N_ACCESS init ("000"b), 3 13 R_ACCESS init ("100"b), 3 14 E_ACCESS init ("010"b), 3 15 W_ACCESS init ("001"b), 3 16 RE_ACCESS init ("110"b), 3 17 REW_ACCESS init ("111"b), 3 18 RW_ACCESS init ("101"b), 3 19 S_ACCESS init ("100"b), 3 20 M_ACCESS init ("010"b), 3 21 A_ACCESS init ("001"b), 3 22 SA_ACCESS init ("101"b), 3 23 SM_ACCESS init ("110"b), 3 24 SMA_ACCESS init ("111"b) 3 25 ) bit (3) internal static options (constant); 3 26 3 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 3 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 3 29 3 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 3 31 static options (constant); 3 32 3 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 3 34 static options (constant); 3 35 3 36 dcl ( 3 37 N_ACCESS_BIN init (00000b), 3 38 R_ACCESS_BIN init (01000b), 3 39 E_ACCESS_BIN init (00100b), 3 40 W_ACCESS_BIN init (00010b), 3 41 RW_ACCESS_BIN init (01010b), 3 42 RE_ACCESS_BIN init (01100b), 3 43 REW_ACCESS_BIN init (01110b), 3 44 S_ACCESS_BIN init (01000b), 3 45 M_ACCESS_BIN init (00010b), 3 46 A_ACCESS_BIN init (00001b), 3 47 SA_ACCESS_BIN init (01001b), 3 48 SM_ACCESS_BIN init (01010b), 3 49 SMA_ACCESS_BIN init (01011b) 3 50 ) fixed bin (5) internal static options (constant); 3 51 3 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 25 26 27 28 declare code fixed bin (35); 29 declare saved_privileges bit (36) aligned; 30 declare segment_entryname char (32); 31 declare seg_ptr pointer; 32 declare first bit (1) aligned; 33 34 declare admin_gate_$set_privileges 35 entry (bit (36) aligned, 36 bit (36) aligned); 37 declare admin_gate_$reset_privileges 38 entry (bit (36) aligned); 39 declare asum_error_ entry options (variable); 40 /* signals a condition, unwinding */ 41 declare delete_$path entry (character (*), character (*), 42 bit (36) aligned, character (*), 43 fixed binary (35)); 44 declare hcs_$create_branch_ entry (char (*), char (*), ptr, 45 fixed bin (35)); 46 declare hcs_$replace_acl entry (char (*), char (*), ptr, 47 fixed bin, bit (1), fixed bin (35)); 48 declare hcs_$truncate_seg entry (ptr, fixed bin (19), 49 fixed bin (35)); 50 declare initiate_file_ entry (character (*), character (*), 51 bit (*), pointer, fixed binary (24), 52 fixed binary (35)); 53 declare pathname_ entry (character (*), character (*)) 54 returns (character (168)); 55 declare error_table_$noentry fixed bin (35) ext static; 56 57 declare ( 58 sys_info$seg_privilege, 59 sys_info$dir_privilege 60 ) bit (36) aligned external; 61 62 declare cleanup condition; 63 64 dcl addr builtin; 65 dcl string builtin; 66 dcl substr builtin; 67 68 69 70 first = "0"b; 71 go to COMMON; 72 first: 73 entry (P_segment_ptr); 74 75 first = "1"b; 76 COMMON: 77 /**** Assume caller is at validation level 1 */ 78 saved_privileges = ""b; 79 on cleanup 80 begin; 81 if substr (saved_privileges, 36, 1) = "1"b then 82 call admin_gate_$reset_privileges (saved_privileges); 83 end; 84 85 if ^first then 86 do; 87 as_user_message_segment_name.constant = 88 AS_USER_MESSAGE_SEGMENT_NAME_CONSTANT; 89 as_user_message_segment_name.index = P_segment_index; 90 91 segment_entryname = string (as_user_message_segment_name); 92 end; 93 else 94 segment_entryname = AS_USER_MESSAGE_SYSTEM_NAME; 95 96 RETRY_INITIATE: 97 call initiate_file_ (asum_data_$db_dir, segment_entryname, RW_ACCESS, 98 seg_ptr, (0), code); 99 if code ^= error_table_$noentry & code ^= 0 /* Something is busted */ 100 then 101 call PROBLEM_SEGMENT; /* ACL, or seg-fault, or ?dir? */ 102 103 if code = error_table_$noentry then 104 call CREATE_SEGMENT; 105 106 /**** We get here with the segment initiated. */ 107 108 call hcs_$truncate_seg (seg_ptr, 0, code); 109 if code ^= 0 then 110 call asum_error_ (code, "asum_create_segment_", 111 "Failed to truncate segment ^a", 112 pathname_ (asum_data_$db_dir, segment_entryname)); 113 114 /**** The segment now exists and is empty. The message segment 115* primitives provide no entrypoint to initialize an empty 116* segment. They initialize it when you add something. 117* So at this point we hand the segment up to our caller, 118* who has the data to write the first message. */ 119 120 P_segment_ptr = seg_ptr; 121 return; 122 123 124 PROBLEM_SEGMENT: 125 procedure; 126 127 128 if asum_data_$db_multiclass then 129 call admin_gate_$set_privileges (sys_info$seg_privilege 130 | sys_info$dir_privilege, saved_privileges); 131 132 call delete_$path (asum_data_$db_dir, segment_entryname, "101110"b, "", 133 code); 134 135 if code ^= 0 then 136 call asum_error_ (code, "asum_create_segment_", 137 "Segment ^a exists, but cannot be initiated or deleted.", 138 pathname_ (asum_data_$db_dir, segment_entryname)); 139 140 end PROBLEM_SEGMENT; 141 142 143 144 CREATE_SEGMENT: 145 procedure; 146 147 if asum_data_$db_multiclass & ^substr (saved_privileges, 36, 1) 148 /* might be already set */ 149 then 150 call admin_gate_$set_privileges (sys_info$seg_privilege 151 | sys_info$dir_privilege, saved_privileges); 152 153 call hcs_$create_branch_ (asum_data_$db_dir, segment_entryname, 154 addr (asum_data_$db_cbi), code); 155 if code ^= 0 then 156 call asum_error_ (code, "asum_create_segment_", 157 "Failed to append ^a", 158 pathname_ (asum_data_$db_dir, segment_entryname)); 159 160 code = 0; 161 if asum_data_$db_multiclass then 162 call hcs_$replace_acl (asum_data_$db_dir, segment_entryname, 163 addr (asum_data_$acl_entries), asum_data_$n_acl_entries, 164 "1"b, code); 165 if code ^= 0 then 166 call asum_error_ (code, "asum_create_segment_", 167 "Failed to replace the ACL of ^a", 168 pathname_ (asum_data_$db_dir, segment_entryname)); 169 if substr (saved_privileges, 36, 1) = "1"b then 170 call admin_gate_$reset_privileges (saved_privileges); 171 go to RETRY_INITIATE; /* Okay, its there now */ 172 173 end CREATE_SEGMENT; 174 end asum_create_segment_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1128.1 asum_create_segment_.pl1 >spec>on>41-15>asum_create_segment_.pl1 23 1 03/19/85 1613.7 asum_data_.incl.pl1 >ldd>include>asum_data_.incl.pl1 24 2 03/08/85 0852.5 as_user_message_system.incl.pl1 >ldd>include>as_user_message_system.incl.pl1 25 3 04/08/85 1113.3 access_mode_values.incl.pl1 >spec>on>41-15>access_mode_values.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. AS_USER_MESSAGE_SEGMENT_NAME_CONSTANT 000011 constant char(16) initial unaligned dcl 2-12 ref 87 AS_USER_MESSAGE_SYSTEM_NAME 000001 constant char(32) initial unaligned dcl 2-27 ref 93 P_segment_index parameter fixed bin(17,0) dcl 20 ref 17 89 P_segment_ptr parameter pointer dcl 21 set ref 17 72 120* RW_ACCESS 000000 constant bit(3) initial unaligned dcl 3-11 set ref 96* addr builtin function dcl 64 ref 153 153 161 161 admin_gate_$reset_privileges 000024 constant entry external dcl 37 ref 81 169 admin_gate_$set_privileges 000022 constant entry external dcl 34 ref 128 147 as_user_message_segment_name 000100 automatic structure level 1 packed unaligned dcl 2-8 set ref 91 asum_data_$acl_entries 000010 external static bit(36) dcl 1-10 set ref 161 161 asum_data_$db_cbi 000020 external static bit(36) dcl 1-17 set ref 153 153 asum_data_$db_dir 000012 external static char(168) unaligned dcl 1-12 set ref 96* 109* 109* 132* 135* 135* 153* 155* 155* 161* 165* 165* asum_data_$db_multiclass 000014 external static bit(1) dcl 1-13 ref 128 147 161 asum_data_$n_acl_entries 000016 external static fixed bin(17,0) dcl 1-15 set ref 161* asum_error_ 000026 constant entry external dcl 39 ref 109 135 155 165 cleanup 000124 stack reference condition dcl 62 ref 79 code 000105 automatic fixed bin(35,0) dcl 28 set ref 96* 99 99 103 108* 109 109* 132* 135 135* 153* 155 155* 160* 161* 165 165* constant 000100 automatic char(16) level 2 packed unaligned dcl 2-8 set ref 87* delete_$path 000030 constant entry external dcl 41 ref 132 error_table_$noentry 000044 external static fixed bin(35,0) dcl 55 ref 99 103 first 000122 automatic bit(1) dcl 32 set ref 70* 75* 85 hcs_$create_branch_ 000032 constant entry external dcl 44 ref 153 hcs_$replace_acl 000034 constant entry external dcl 46 ref 161 hcs_$truncate_seg 000036 constant entry external dcl 48 ref 108 index 4 000100 automatic picture(2) level 2 packed unaligned dcl 2-8 set ref 89* initiate_file_ 000040 constant entry external dcl 50 ref 96 pathname_ 000042 constant entry external dcl 53 ref 109 109 135 135 155 155 165 165 saved_privileges 000106 automatic bit(36) dcl 29 set ref 76* 81 81* 128* 147 147* 169 169* seg_ptr 000120 automatic pointer dcl 31 set ref 96* 108* 120 segment_entryname 000107 automatic char(32) unaligned dcl 30 set ref 91* 93* 96* 109* 109* 132* 135* 135* 153* 155* 155* 161* 165* 165* string builtin function dcl 65 ref 91 substr builtin function dcl 66 ref 81 147 169 sys_info$dir_privilege 000050 external static bit(36) dcl 57 ref 128 147 sys_info$seg_privilege 000046 external static bit(36) dcl 57 ref 128 147 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AS_USER_ANY_PROCESS_ID internal static bit(36) initial dcl 2-49 AS_USER_MESSAGE_PROCESS_SENTINEL internal static char(8) initial dcl 2-85 AS_USER_MESSAGE_SYSTEM_SENTINEL internal static char(8) initial dcl 2-73 A_ACCESS internal static bit(3) initial unaligned dcl 3-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 3-33 E_ACCESS internal static bit(3) initial unaligned dcl 3-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 M_ACCESS internal static bit(3) initial unaligned dcl 3-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 N_ACCESS internal static bit(3) initial unaligned dcl 3-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 REW_ACCESS internal static bit(3) initial unaligned dcl 3-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 RE_ACCESS internal static bit(3) initial unaligned dcl 3-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 R_ACCESS internal static bit(3) initial unaligned dcl 3-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SA_ACCESS internal static bit(3) initial unaligned dcl 3-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 3-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 3-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SM_ACCESS internal static bit(3) initial unaligned dcl 3-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 S_ACCESS internal static bit(3) initial unaligned dcl 3-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 W_ACCESS internal static bit(3) initial unaligned dcl 3-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 as_user_message_id automatic structure level 1 dcl 2-18 as_user_message_perprocess_info based structure level 1 dcl 2-81 as_user_message_perprocess_info_ptr automatic pointer dcl 2-79 as_user_message_system_info based structure level 1 dcl 2-30 as_user_message_system_info_ptr automatic pointer dcl 2-29 asum_data_$db_dir_cbi external static bit(36) dcl 1-18 asum_data_$db_dir_rb external static fixed bin(3,0) array dcl 1-20 asum_data_$db_locked external static bit(1) dcl 1-23 asum_data_$db_rb external static fixed bin(3,0) array dcl 1-22 asum_data_$entry_ring external static fixed bin(3,0) dcl 1-29 asum_data_$lock_id external static bit(36) dcl 1-31 asum_data_$process_id external static bit(36) dcl 1-32 asum_data_$process_info_ptr external static pointer dcl 1-25 asum_data_$system_info_ptr external static pointer dcl 1-27 NAMES DECLARED BY EXPLICIT CONTEXT. COMMON 000143 constant label dcl 76 ref 71 CREATE_SEGMENT 000523 constant entry internal dcl 144 ref 103 PROBLEM_SEGMENT 000373 constant entry internal dcl 124 ref 99 RETRY_INITIATE 000225 constant label dcl 96 ref 171 asum_create_segment_ 000114 constant entry external dcl 17 first 000131 constant entry external dcl 72 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1252 1324 1012 1262 Length 1610 1012 52 247 237 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME asum_create_segment_ 420 external procedure is an external procedure. on unit on line 79 68 on unit PROBLEM_SEGMENT internal procedure shares stack frame of external procedure asum_create_segment_. CREATE_SEGMENT internal procedure shares stack frame of external procedure asum_create_segment_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME asum_create_segment_ 000100 as_user_message_segment_name asum_create_segment_ 000105 code asum_create_segment_ 000106 saved_privileges asum_create_segment_ 000107 segment_entryname asum_create_segment_ 000120 seg_ptr asum_create_segment_ 000122 first asum_create_segment_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. admin_gate_$reset_privileges admin_gate_$set_privileges asum_error_ delete_$path hcs_$create_branch_ hcs_$replace_acl hcs_$truncate_seg initiate_file_ pathname_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. asum_data_$acl_entries asum_data_$db_cbi asum_data_$db_dir asum_data_$db_multiclass asum_data_$n_acl_entries error_table_$noentry sys_info$dir_privilege sys_info$seg_privilege LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 17 000110 70 000124 71 000125 72 000126 75 000141 76 000143 79 000144 81 000160 83 000173 85 000174 87 000176 89 000204 91 000216 92 000221 93 000222 96 000225 99 000263 103 000272 108 000277 109 000313 120 000370 121 000372 124 000373 128 000374 132 000412 135 000445 140 000522 144 000523 147 000524 153 000545 155 000574 160 000654 161 000655 165 000720 169 000775 171 001010 ----------------------------------------------------------- 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