COMPILATION LISTING OF SEGMENT record_status 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 0936.4 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /* Written by Lindsey Spratt, most likely */ 14 /* Modified by Chris Jones, February 1985, to use privileges and to clean up. */ 15 16 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 17 record_status: 18 proc (p_journal_control_block_ptr, p_info_ptr, p_code); 19 20 /* Parameter */ 21 22 dcl p_journal_control_block_ptr 23 ptr; 24 dcl p_info_ptr ptr; 25 dcl p_code fixed bin (35); 26 27 /* Automatic */ 28 29 dcl privileges_string bit (36) aligned; 30 dcl temp_key char (256) varying; 31 32 /* Based */ 33 34 dcl dummy_record char (rs_info.record_length) based (rs_info.record_ptr); 35 36 /* Builtin */ 37 38 dcl length builtin; 39 dcl null builtin; 40 41 /* Condition */ 42 43 dcl cleanup condition; 44 45 /* External */ 46 47 dcl rcprm_registry_util_$turn_off_privs 48 entry (bit (36) aligned); 49 dcl rcprm_registry_util_$turn_on_privs 50 entry (bit (36) aligned); 51 52 dcl error_table_$locked_by_this_process 53 fixed bin (35) ext; 54 55 journal_control_block_ptr = p_journal_control_block_ptr; 56 rs_info_ptr = p_info_ptr; 57 privileges_string = ""b; 58 59 on cleanup call clean_up; 60 61 call iox_$control (journal_control_block.vfile_iocb_ptr, "record_status", rs_info_ptr, p_code); 62 if p_code ^= 0 & p_code ^= error_table_$locked_by_this_process then do; 63 call clean_up; 64 return; 65 end; 66 67 if rs_info.lock_sw then 68 if rs_info.create_sw then do; 69 if ^rs_info.locate_sw then do; 70 call iox_$read_key (journal_control_block.vfile_iocb_ptr, temp_key, 0, p_code); 71 if p_code ^= 0 & p_code ^= error_table_$locked_by_this_process then do; 72 call clean_up; 73 return; 74 end; 75 76 a_key_len = length (temp_key); 77 end; 78 79 else a_key_len = 0; 80 81 a_rec_len = 0; 82 83 allocate journal_entry in (journal_area); 84 85 if a_key_len > 0 then 86 journal_entry.key_str = temp_key; 87 journal_entry.type = RS_LOCK_CREATE; 88 end; 89 90 else if rs_info.inc_ref_count | rs_info.dec_ref_count then do; 91 a_rec_len = rs_info.record_length; 92 a_key_len = 0; 93 94 allocate journal_entry in (journal_area); 95 96 journal_entry.inc_ref_count = rs_info.inc_ref_count; 97 journal_entry.dec_ref_count = rs_info.dec_ref_count; 98 journal_entry.rec_str = dummy_record; 99 journal_entry.type = RS_LOCK_COUNT; 100 end; 101 102 else do; 103 a_rec_len = rs_info.record_length; 104 a_key_len = 0; 105 106 allocate journal_entry in (journal_area); 107 108 journal_entry.rec_str = dummy_record; 109 journal_entry.type = RS_LOCK; 110 end; 111 112 else if rs_info.inc_ref_count | rs_info.dec_ref_count then do; 113 a_rec_len, a_key_len = 0; 114 115 allocate journal_entry in (journal_area); 116 117 journal_entry.inc_ref_count = rs_info.inc_ref_count; 118 journal_entry.dec_ref_count = rs_info.dec_ref_count; 119 120 journal_entry.type = RS_COUNT; 121 end; 122 123 else do; 124 call clean_up; 125 return; 126 end; 127 128 journal_entry.descriptor = rs_info.descriptor; 129 journal_entry.next_ptr = null; 130 journal_entry.prev_ptr = journal_control_block.latest_entry_ptr; 131 if journal_control_block.latest_entry_ptr ^= null then 132 journal_control_block.latest_entry_ptr -> journal_entry.next_ptr = journal_entry_ptr; 133 journal_control_block.latest_entry_ptr = journal_entry_ptr; 134 call clean_up; 135 return; 136 137 clean_up: 138 proc; 139 140 call rcprm_registry_util_$turn_off_privs (privileges_string); 141 142 end clean_up; 143 1 1 /* BEGIN INCLUDE FILE journal_entry.incl.pl1 */ 1 2 1 3 dcl journal_entry_ptr ptr; 1 4 dcl a_rec_len fixed bin (21); 1 5 dcl a_key_len fixed bin; 1 6 dcl 1 journal_entry based (journal_entry_ptr) aligned, 1 7 2 head, 1 8 3 prev_ptr ptr, 1 9 3 next_ptr ptr, 1 10 3 type fixed bin, 1 11 2 descriptor fixed bin (35), 1 12 2 inc_ref_count bit (1) init ("0"b), 1 13 2 dec_ref_count bit (1) init ("0"b), 1 14 2 key_len fixed bin , 1 15 2 rec_len fixed bin (21) , 1 16 2 key_str char (a_key_len refer (journal_entry.key_len)), 1 17 2 rec_str char (a_rec_len refer (journal_entry.rec_len)); 1 18 1 19 dcl RS_LOCK fixed bin init(1) options(constant) internal static; 1 20 dcl WRITE_RECORD fixed bin init(2) options(constant) internal static; 1 21 dcl DELETE_RECORD fixed bin init(3) options(constant) internal static; 1 22 dcl ADD_KEY fixed bin init(4) options(constant) internal static; 1 23 dcl DELETE_KEY fixed bin init(5) options(constant) internal static; 1 24 dcl RS_COUNT fixed bin init(6) options(constant) internal static; 1 25 dcl RS_LOCK_COUNT fixed bin init(7) options(constant) internal static; 1 26 dcl RS_LOCK_CREATE fixed bin init(8) options(constant) internal static; 1 27 1 28 /* END INCLUDE FILE journal_entry.incl.pl1 */ 144 2 1 /* BEGIN INCLUDE FILE journal_control_block.incl.pl1 */ 2 2 2 3 dcl sys_info$max_seg_size fixed bin (24) ext; 2 4 2 5 dcl journal_control_block_ptr 2 6 ptr; 2 7 dcl 1 journal_control_block 2 8 aligned based (journal_control_block_ptr), 2 9 2 attach char (128) var, 2 10 2 open_desc char (128) var, 2 11 2 vfile_iocb_ptr ptr, 2 12 2 latest_entry_ptr ptr, 2 13 2 journal_area_ptr ptr; 2 14 2 15 dcl journal_area area (sys_info$max_seg_size) based (journal_control_block.journal_area_ptr) aligned; 2 16 2 17 2 18 /* END INCLUDE FILE journal_control_block.incl.pl1 */ 145 3 1 /* include file for info structure used with record_status control order 3 2* created by M. Asherman 1/6/76 */ 3 3 /* modified 6/15/77 to support stationary type records */ 3 4 3 5 dcl rs_info_ptr ptr; 3 6 dcl 1 rs_info based (rs_info_ptr) aligned, 3 7 2 version fixed, /* must be set to 1 or 2 (Input) */ 3 8 2 flags aligned, 3 9 3 lock_sw bit (1) unal, /* Input -- if ="1"b try to lock record */ 3 10 3 unlock_sw bit (1) unal, /* Input -- if ="1"b try to unlock record */ 3 11 3 create_sw bit (1) unal, /* Input--if set creat new record */ 3 12 3 locate_sw bit (1) unal, /* Input--if set causes current rec to be 3 13* located outside the index by descrip, or created without key */ 3 14 3 inc_ref_count bit (1) unal, /* Input--bump reference count of record, if stationary */ 3 15 3 dec_ref_count bit (1) unal, /* Input--decrement ref count if this flag set and record stationary */ 3 16 3 locate_pos_sw bit (1) unal, /* Input--if set the record_length is taken 3 17* as an input argument specifying the absolute logical record positioni to which both the current and next positions will be set */ 3 18 3 mbz1 bit (29) unal, /* must be set to "0"b, reserved for future use */ 3 19 2 record_length fixed (21), /* length in bytes, Input if create_sw set */ 3 20 2 max_rec_len fixed (21), /* max length of contained record 3 21* Input if create_sw is set--overrides min_block_size in effect */ 3 22 2 record_ptr ptr, /* points to first byte of record--will be word aligned */ 3 23 2 descriptor fixed (35), /* Input if locate_sw set and create_sw="0"b */ 3 24 2 ref_count fixed (34), /* Output--should match number of keys on this record-- = -1 if non-stationary record */ 3 25 2 time_last_modified fixed (71), /* Output */ 3 26 2 modifier fixed (35), /* Output--also Input when locking */ 3 27 2 block_ptr ptr unal, /* Output */ 3 28 2 last_image_modifier 3 29 fixed (35), 3 30 2 mbz2 fixed; 3 31 3 32 dcl 1 rs_desc based (addr (rs_info.descriptor)), 3 33 /* record block descriptor structure */ 3 34 2 comp_num fixed (17) unal, /* msf component number */ 3 35 2 offset bit (18) unal; /* word offset of record block */ 3 36 3 37 dcl 1 seq_desc based (addr (rs_info.descriptor)), 3 38 /* for sequential files */ 3 39 2 bitno bit (6) unal, 3 40 2 comp_num fixed (11) unal, /* msf component number */ 3 41 2 wordno bit (18) unal; /* word offset */ 3 42 3 43 dcl rs_info_version_1 static internal fixed init (1); 3 44 dcl rs_info_version_2 static internal fixed init (2); 3 45 146 4 1 /* --------------- BEGIN include file iox_dcls.incl.pl1 --------------- */ 4 2 4 3 /* Written 05/04/78 by C. D. Tavares */ 4 4 /* Fixed declaration of iox_$find_iocb_n 05/07/80 by R. Holmstedt */ 4 5 /* Modified 5/83 by S. Krupp to add declarations for: iox_$open_file, 4 6* iox_$close_file, iox_$detach and iox_$attach_loud entries. */ 4 7 4 8 dcl iox_$attach_name entry (char (*), pointer, char (*), pointer, fixed bin (35)), 4 9 iox_$attach_ptr entry (pointer, char (*), pointer, fixed bin (35)), 4 10 iox_$close entry (pointer, fixed bin (35)), 4 11 iox_$control entry (pointer, char (*), pointer, fixed bin (35)), 4 12 iox_$delete_record entry (pointer, fixed bin (35)), 4 13 iox_$destroy_iocb entry (pointer, fixed bin (35)), 4 14 iox_$detach_iocb entry (pointer, fixed bin (35)), 4 15 iox_$err_not_attached entry options (variable), 4 16 iox_$err_not_closed entry options (variable), 4 17 iox_$err_no_operation entry options (variable), 4 18 iox_$err_not_open entry options (variable), 4 19 iox_$find_iocb entry (char (*), pointer, fixed bin (35)), 4 20 iox_$find_iocb_n entry (fixed bin, ptr, fixed bin(35)), 4 21 iox_$get_chars entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 4 22 iox_$get_line entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 4 23 iox_$look_iocb entry (char (*), pointer, fixed bin (35)), 4 24 iox_$modes entry (pointer, char (*), char (*), fixed bin (35)), 4 25 iox_$move_attach entry (pointer, pointer, fixed bin (35)), 4 26 iox_$open entry (pointer, fixed bin, bit (1) aligned, fixed bin (35)), 4 27 iox_$position entry (pointer, fixed bin, fixed bin (21), fixed bin (35)), 4 28 iox_$propagate entry (pointer), 4 29 iox_$put_chars entry (pointer, pointer, fixed bin (21), fixed bin (35)), 4 30 iox_$read_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 4 31 iox_$read_length entry (pointer, fixed bin (21), fixed bin (35)), 4 32 iox_$read_record entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 4 33 iox_$rewrite_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 4 34 iox_$seek_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 4 35 iox_$write_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 4 36 iox_$open_file entry(ptr, fixed bin, char(*), bit(1) aligned, fixed bin(35)), 4 37 iox_$close_file entry(ptr, char(*), fixed bin(35)), 4 38 iox_$detach entry(ptr, char(*), fixed bin(35)), 4 39 iox_$attach_loud entry(ptr, char(*), ptr, fixed bin(35)); 4 40 4 41 dcl (iox_$user_output, 4 42 iox_$user_input, 4 43 iox_$user_io, 4 44 iox_$error_output) external static pointer; 4 45 4 46 /* ---------------- END include file iox_dcls.incl.pl1 ---------------- */ 147 148 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0806.0 record_status.pl1 >spec>install>1111>record_status.pl1 144 1 02/11/80 1426.1 journal_entry.incl.pl1 >ldd>include>journal_entry.incl.pl1 145 2 02/11/80 1426.1 journal_control_block.incl.pl1 >ldd>include>journal_control_block.incl.pl1 146 3 07/19/79 1547.0 rs_info.incl.pl1 >ldd>include>rs_info.incl.pl1 147 4 05/23/83 0916.6 iox_dcls.incl.pl1 >ldd>include>iox_dcls.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. RS_COUNT constant fixed bin(17,0) initial dcl 1-24 ref 120 RS_LOCK constant fixed bin(17,0) initial dcl 1-19 ref 109 RS_LOCK_COUNT constant fixed bin(17,0) initial dcl 1-25 ref 99 RS_LOCK_CREATE constant fixed bin(17,0) initial dcl 1-26 ref 87 a_key_len 000213 automatic fixed bin(17,0) dcl 1-5 set ref 76* 79* 83 83 85 92* 94 94 104* 106 106 113* 115 115 a_rec_len 000212 automatic fixed bin(21,0) dcl 1-4 set ref 81* 83 83 91* 94 94 103* 106 106 113* 115 115 cleanup 000202 stack reference condition dcl 43 ref 59 create_sw 1(02) based bit(1) level 3 packed packed unaligned dcl 3-6 ref 67 dec_ref_count 1(05) based bit(1) level 3 in structure "rs_info" packed packed unaligned dcl 3-6 in procedure "record_status" ref 90 97 112 118 dec_ref_count 7 based bit(1) initial level 2 in structure "journal_entry" dcl 1-6 in procedure "record_status" set ref 83* 94* 97* 106* 115* 118* descriptor 5 based fixed bin(35,0) level 2 in structure "journal_entry" dcl 1-6 in procedure "record_status" set ref 128* descriptor 6 based fixed bin(35,0) level 2 in structure "rs_info" dcl 3-6 in procedure "record_status" ref 128 dummy_record based char packed unaligned dcl 34 ref 98 108 error_table_$locked_by_this_process 000012 external static fixed bin(35,0) dcl 52 ref 62 71 flags 1 based structure level 2 dcl 3-6 head based structure level 2 dcl 1-6 inc_ref_count 1(04) based bit(1) level 3 in structure "rs_info" packed packed unaligned dcl 3-6 in procedure "record_status" ref 90 96 112 117 inc_ref_count 6 based bit(1) initial level 2 in structure "journal_entry" dcl 1-6 in procedure "record_status" set ref 83* 94* 96* 106* 115* 117* iox_$control 000014 constant entry external dcl 4-8 ref 61 iox_$read_key 000016 constant entry external dcl 4-8 ref 70 journal_area based area dcl 2-15 ref 83 94 106 115 journal_area_ptr 106 based pointer level 2 dcl 2-7 ref 83 94 106 115 journal_control_block based structure level 1 dcl 2-7 journal_control_block_ptr 000214 automatic pointer dcl 2-5 set ref 55* 61 70 83 94 106 115 130 131 131 133 journal_entry based structure level 1 dcl 1-6 set ref 83 94 106 115 journal_entry_ptr 000210 automatic pointer dcl 1-3 set ref 83* 85 87 94* 96 97 98 99 106* 108 109 115* 117 118 120 128 129 130 131 133 key_len 10 based fixed bin(17,0) level 2 dcl 1-6 set ref 83* 85 94* 98 106* 108 115* key_str 12 based char level 2 dcl 1-6 set ref 85* latest_entry_ptr 104 based pointer level 2 dcl 2-7 set ref 130 131 131 133* length builtin function dcl 38 ref 76 locate_sw 1(03) based bit(1) level 3 packed packed unaligned dcl 3-6 ref 69 lock_sw 1 based bit(1) level 3 packed packed unaligned dcl 3-6 ref 67 next_ptr 2 based pointer level 3 dcl 1-6 set ref 129* 131* null builtin function dcl 39 ref 129 131 p_code parameter fixed bin(35,0) dcl 25 set ref 17 61* 62 62 70* 71 71 p_info_ptr parameter pointer dcl 24 ref 17 56 p_journal_control_block_ptr parameter pointer dcl 22 ref 17 55 prev_ptr based pointer level 3 dcl 1-6 set ref 130* privileges_string 000100 automatic bit(36) dcl 29 set ref 57* 140* rcprm_registry_util_$turn_off_privs 000010 constant entry external dcl 47 ref 140 rec_len 11 based fixed bin(21,0) level 2 dcl 1-6 set ref 83* 94* 98 106* 108 115* rec_str based char level 2 dcl 1-6 set ref 98* 108* record_length 2 based fixed bin(21,0) level 2 dcl 3-6 ref 91 98 103 108 record_ptr 4 based pointer level 2 dcl 3-6 ref 98 108 rs_info based structure level 1 dcl 3-6 rs_info_ptr 000216 automatic pointer dcl 3-5 set ref 56* 61* 67 67 69 90 90 91 96 97 98 98 103 108 108 112 112 117 118 128 temp_key 000101 automatic varying char(256) dcl 30 set ref 70* 76 85 type 4 based fixed bin(17,0) level 3 dcl 1-6 set ref 87* 99* 109* 120* vfile_iocb_ptr 102 based pointer level 2 dcl 2-7 set ref 61* 70* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ADD_KEY internal static fixed bin(17,0) initial dcl 1-22 DELETE_KEY internal static fixed bin(17,0) initial dcl 1-23 DELETE_RECORD internal static fixed bin(17,0) initial dcl 1-21 WRITE_RECORD internal static fixed bin(17,0) initial dcl 1-20 iox_$attach_loud 000000 constant entry external dcl 4-8 iox_$attach_name 000000 constant entry external dcl 4-8 iox_$attach_ptr 000000 constant entry external dcl 4-8 iox_$close 000000 constant entry external dcl 4-8 iox_$close_file 000000 constant entry external dcl 4-8 iox_$delete_record 000000 constant entry external dcl 4-8 iox_$destroy_iocb 000000 constant entry external dcl 4-8 iox_$detach 000000 constant entry external dcl 4-8 iox_$detach_iocb 000000 constant entry external dcl 4-8 iox_$err_no_operation 000000 constant entry external dcl 4-8 iox_$err_not_attached 000000 constant entry external dcl 4-8 iox_$err_not_closed 000000 constant entry external dcl 4-8 iox_$err_not_open 000000 constant entry external dcl 4-8 iox_$error_output external static pointer dcl 4-41 iox_$find_iocb 000000 constant entry external dcl 4-8 iox_$find_iocb_n 000000 constant entry external dcl 4-8 iox_$get_chars 000000 constant entry external dcl 4-8 iox_$get_line 000000 constant entry external dcl 4-8 iox_$look_iocb 000000 constant entry external dcl 4-8 iox_$modes 000000 constant entry external dcl 4-8 iox_$move_attach 000000 constant entry external dcl 4-8 iox_$open 000000 constant entry external dcl 4-8 iox_$open_file 000000 constant entry external dcl 4-8 iox_$position 000000 constant entry external dcl 4-8 iox_$propagate 000000 constant entry external dcl 4-8 iox_$put_chars 000000 constant entry external dcl 4-8 iox_$read_length 000000 constant entry external dcl 4-8 iox_$read_record 000000 constant entry external dcl 4-8 iox_$rewrite_record 000000 constant entry external dcl 4-8 iox_$seek_key 000000 constant entry external dcl 4-8 iox_$user_input external static pointer dcl 4-41 iox_$user_io external static pointer dcl 4-41 iox_$user_output external static pointer dcl 4-41 iox_$write_record 000000 constant entry external dcl 4-8 rcprm_registry_util_$turn_on_privs 000000 constant entry external dcl 49 rs_desc based structure level 1 packed packed unaligned dcl 3-32 rs_info_version_1 internal static fixed bin(17,0) initial dcl 3-43 rs_info_version_2 internal static fixed bin(17,0) initial dcl 3-44 seq_desc based structure level 1 packed packed unaligned dcl 3-37 sys_info$max_seg_size external static fixed bin(24,0) dcl 2-3 NAMES DECLARED BY EXPLICIT CONTEXT. clean_up 000457 constant entry internal dcl 137 ref 59 63 72 124 134 record_status 000020 constant entry external dcl 17 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 604 624 474 614 Length 1062 474 20 221 110 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME record_status 167 external procedure is an external procedure. on unit on line 59 64 on unit clean_up 68 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME record_status 000100 privileges_string record_status 000101 temp_key record_status 000210 journal_entry_ptr record_status 000212 a_rec_len record_status 000213 a_key_len record_status 000214 journal_control_block_ptr record_status 000216 rs_info_ptr record_status THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op ext_entry int_entry op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. iox_$control iox_$read_key rcprm_registry_util_$turn_off_privs THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$locked_by_this_process LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 17 000014 55 000025 56 000031 57 000034 59 000035 61 000057 62 000111 63 000117 64 000123 67 000124 69 000133 70 000136 71 000155 72 000163 73 000167 76 000170 77 000172 79 000173 81 000174 83 000175 85 000221 87 000230 88 000232 90 000233 91 000236 92 000240 94 000241 96 000265 97 000272 98 000276 99 000310 100 000312 103 000313 104 000315 106 000316 108 000342 109 000355 110 000357 112 000360 113 000363 115 000365 117 000411 118 000416 120 000422 121 000424 124 000425 125 000431 128 000432 129 000435 130 000437 131 000442 133 000450 134 000451 135 000455 137 000456 140 000464 142 000473 ----------------------------------------------------------- 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