COMPILATION LISTING OF SEGMENT fm_sys_pn_tbl_get_path Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/04/85 0945.6 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 7 8 /* DESCRIPTION: 9* 10* This routine finds an entry in the System Pathname Table (sys_pn_tbl). 11* returning the index of the entry. It is not assumed that the sys_pn_tbl is 12* locked, and this routine will lock it while examining it. It is assumed 13* that the caller has set the validation level to the Data Management Ring. 14**/ 15 16 /* HISTORY: 17* 18*Written by Matthew, 10/29/84. 19*Modified: 20*01/09/85 by Matthew Pierret: Moved initialization of lock_is_locked to 21* before the first potential call to FINISH (via LOG_ERROR_RETURN). 22*01/10/85 by Matthew C. Pierret: Changed LOG_ERROR_RETURN to ERROR_RETURN, 23* making ERROR_RETURN call fm_error_util_$signal. Also removed the 24* call to FINISH, relying on the cleanup on-unit to be invoked when 25* the stack is unwound. Removed knowledge of the now-obsolete 26* SPT_ENTRY_IN_USE_BUT_DELETED state. 27*03/05/85 by Steve Herbst: Replaced dm_log_ with dm_misc_util_$log. 28*03/14/85 by Matthew C. Pierret: Changed to only attempt to unlock the lock if 29* it has not yet attempted to do so and the lock was validly 30* obtained. In the case of the sys_pn_tbl.lock, it is invalid to 31* obtain the lock if the process already has it locked. 32**/ 33 34 /* format: style2,ind3 */ 35 36 fm_sys_pn_tbl_get_path: 37 proc (p_sys_pn_tbl_ptr, p_lock_sys_pn_tbl, p_file_uid, p_file_path); 38 39 /* START OF DECLARATIONS */ 40 /* Parameter */ 41 42 dcl p_sys_pn_tbl_ptr ptr; /* points to the sys_pn_tbl */ 43 dcl p_lock_sys_pn_tbl bit (1) aligned; /* ON->lock the sys_pn_tbl */ 44 dcl p_file_uid bit (36) aligned; /*unique id of the file*/ 45 dcl p_file_path char (168); /*pathname of file */ 46 47 /* Automatic */ 48 49 dcl code fixed bin (35) init (0); 50 dcl file_uid bit (36) aligned init (""b); 51 dcl lock_code fixed bin (35) init (LOCK_NOT_YET_ATTEMPTED); 52 dcl sys_idx fixed bin init (-1); 53 dcl sys_pn_tbl_ptr ptr; 54 dcl unlock_code fixed bin (35) init (UNLOCK_NOT_YET_ATTEMPTED); 55 56 /* Based */ 57 /* Builtin */ 58 59 dcl (addr, length, lbound, min, substr) 60 builtin; 61 62 /* Condition */ 63 64 dcl cleanup condition; 65 66 /* Constant */ 67 68 dcl MYNAME init ("fm_sys_pn_tbl_get_path") char (32) varying internal static options (constant); 69 dcl LOCK_WAIT_TIME init (1000000000) fixed bin (71) internal static options (constant); 70 dcl (LOCK_NOT_YET_ATTEMPTED, UNLOCK_NOT_YET_ATTEMPTED) 71 fixed bin (35) init (-1) internal static options (constant); 72 73 /* Entry */ 74 75 dcl cu_$arg_list_ptr entry (ptr); 76 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 77 dcl dm_misc_util_$log entry options (variable); 78 dcl fm_error_util_$signal entry options (variable); 79 dcl ioa_$general_rs entry (ptr, fixed bin, fixed bin, char (*), fixed bin (21), bit (1) aligned, 80 bit (1) aligned); 81 dcl lock_manager_$lock_fast 82 entry (ptr, fixed bin (71), fixed bin (35)); 83 dcl lock_manager_$unlock_fast 84 entry (ptr, fixed bin (35)); 85 86 /* External */ 87 88 dcl dm_error_$fast_lock_invalid_reset 89 fixed bin (35) ext; 90 dcl dm_error_$fm_bad_sys_pn_tbl_ver 91 fixed bin (35) ext; 92 93 /* END OF DECLARATIONS */ 94 95 96 on cleanup call FINISH (); 97 98 file_uid = p_file_uid; 99 sys_pn_tbl_ptr = p_sys_pn_tbl_ptr; 100 if sys_pn_tbl_ptr -> sys_pn_tbl.h.version ^= SYS_PN_TBL_VERSION_1 101 then call ERROR_RETURN (dm_error_$fm_bad_sys_pn_tbl_ver, " Expected version ^w of ^a, received version ^w.", 102 SYS_PN_TBL_VERSION_1, fm_data_$sys_pn_tbl_name, sys_pn_tbl_ptr -> sys_pn_tbl.h.version); 103 104 if p_lock_sys_pn_tbl 105 then 106 do; 107 call lock_manager_$lock_fast (addr (sys_pn_tbl_ptr -> sys_pn_tbl.h.lock), LOCK_WAIT_TIME, lock_code); 108 if lock_code ^= 0 & lock_code ^= dm_error_$fast_lock_invalid_reset 109 then call ERROR_RETURN (lock_code, " Unable to lock ^a.", fm_data_$sys_pn_tbl_name); 110 end; 111 112 do sys_idx = lbound (sys_pn_tbl_ptr -> sys_pn_tbl.e, 1) to sys_pn_tbl_ptr -> sys_pn_tbl.h.last_entry 113 while (sys_pn_tbl_ptr -> sys_pn_tbl.e (sys_idx).file_uid ^= file_uid 114 | sys_pn_tbl_ptr -> sys_pn_tbl.e (sys_idx).in_use = SPT_ENTRY_NOT_IN_USE); 115 end; 116 117 if sys_idx > sys_pn_tbl_ptr -> sys_pn_tbl.h.last_entry 118 then p_file_path = ""; 119 else p_file_path = sys_pn_tbl_ptr -> sys_pn_tbl.paths (sys_idx); 120 121 if lock_code ^= LOCK_NOT_YET_ATTEMPTED 122 then 123 do; 124 call lock_manager_$unlock_fast (addr (sys_pn_tbl_ptr -> sys_pn_tbl.h.lock), unlock_code); 125 if unlock_code ^= 0 126 then call ERROR_RETURN (unlock_code, " Unable to unlock ^a.^s", fm_data_$sys_pn_tbl_name); 127 end; 128 129 return; 130 131 132 ERROR_RETURN: 133 proc options (variable); 134 135 136 dcl er_arg_list_ptr ptr; 137 dcl er_code fixed bin (35) based (er_code_ptr); 138 dcl er_code_ptr ptr; 139 dcl er_code_len fixed bin (21); 140 141 call cu_$arg_list_ptr (er_arg_list_ptr); 142 call cu_$arg_ptr_rel (1, er_code_ptr, er_code_len, (0), er_arg_list_ptr); 143 call fm_error_util_$signal (er_code, MYNAME, FM_ACTION_CANT_RESTART | FM_ACTION_LOG, LOG_SV, 144 MAKE_MESSAGE (er_arg_list_ptr)); 145 146 /* FINISH will be invoked to unlock the lock when the stack is unwound */ 147 /* because of the "on cleanup call FIISH ();". */ 148 149 end ERROR_RETURN; 150 151 MAKE_MESSAGE: 152 proc (mm_p_arg_list_ptr) returns (char (*)); 153 154 dcl mm_p_arg_list_ptr ptr; 155 dcl mm_message_len fixed bin (21); 156 dcl mm_message_buffer char (1024); 157 dcl (DONT_PAD, NO_NEW_LINE) 158 init ("0"b) bit (1) aligned; 159 160 call ioa_$general_rs (mm_p_arg_list_ptr, 2, 3, mm_message_buffer, mm_message_len, DONT_PAD, NO_NEW_LINE); 161 162 return (substr (mm_message_buffer, 1, min (length (mm_message_buffer), mm_message_len))); 163 164 end MAKE_MESSAGE; 165 166 167 FINISH: 168 proc (); 169 170 if (lock_code = 0 | lock_code = dm_error_$fast_lock_invalid_reset) & unlock_code = UNLOCK_NOT_YET_ATTEMPTED 171 then 172 do; 173 call lock_manager_$unlock_fast (addr (sys_pn_tbl_ptr -> sys_pn_tbl.h.lock), unlock_code); 174 if unlock_code ^= 0 175 then call dm_misc_util_$log (LOG_SV, unlock_code, MYNAME, " Failed to unlock ^a during cleanup.", 176 fm_data_$sys_pn_tbl_name); 177 end; 178 179 end FINISH; 180 181 1 1 /* BEGIN INCLUDE FILE dm_fm_sys_pn_tbl.incl.pl1 */ 1 2 1 3 /* DESCRIPTION: 1 4* This include file contains the sys_pn_tbl structure, the 1 5* file_manager_'s System Pathname Table. Each file which can possibly 1 6* have a before image current must have an entry in this table. Every 1 7* time this table is modified it is force-written to disk, as its 1 8* correct contents are necessary for rolling back transactions by a 1 9* process other than the process which originally owned the transaction. 1 10* When an entry is inserted, it is force-written twice: the first time with 1 11* the entry filled in but with the "in_use" element set to indicate that the 1 12* entry is not yet in use; the second time with the "in_use" element set 1 13* to indicate that the entry is in use. This is done to avoid the possibility 1 14* of a failure while the entry is being written which could successfully 1 15* write the "in_use" but not all of the rest of the entry. "in_use" can have 1 16* one of three values: 0 - not in use; -1 - in use ; +1 - in use but the 1 17* file has been deleted. 1 18**/ 1 19 1 20 /* HISTORY: 1 21*Written by Jeffrey D. Ives, 10/11/82. 1 22* (Design by Andre Bensoussan and Jeffrey Ives.) 1 23*Modified: 1 24*10/30/84 by Matthew Pierret: Added DESCRIPTION and HISTORY sections, 1 25* *_IN_USE constants. Changed thread to in_use, pfuid to file_uid, 1 26* fsuid to file_system_uid. 1 27**/ 1 28 1 29 /* format: style2,ind3 */ 1 30 1 31 dcl fm_data_$sys_pn_tbl_name 1 32 char (32) ext; 1 33 dcl fm_data_$sys_pn_tbl_ptr 1 34 ptr ext; 1 35 1 36 dcl 1 sys_pn_tbl aligned based (fm_data_$sys_pn_tbl_ptr), 1 37 2 h, 1 38 3 version bit (36), 1 39 3 last_entry fixed bin, 1 40 3 lock fixed bin (71), 1 41 3 mbz (30) fixed bin (71), 1 42 2 e (4096), 1 43 3 in_use fixed bin, 1 44 3 open_count fixed bin, 1 45 3 file_uid bit (36), 1 46 3 file_system_uid bit (36), 1 47 2 paths (4096) char (168) unal; 1 48 1 49 dcl SYS_PN_TBL_VERSION_1 bit (36) aligned static options (constant) init ("162363353101"b3); 1 50 1 51 dcl ( 1 52 SPT_ENTRY_IN_USE init (-1), 1 53 SPT_ENTRY_IN_USE_BUT_DELETED 1 54 init (1), 1 55 SPT_ENTRY_NOT_IN_USE init (0) 1 56 ) fixed bin internal static options (constant); 1 57 1 58 /* END INCLUDE FILE dm_fm_sys_pn_tbl.incl.pl1 */ 182 183 2 1 /* ******* BEGIN INCLUDE FILE dm_fm_sub_error_flags.incl.pl1 ******** */ 2 2 2 3 /* format: style2,ind3 */ 2 4 2 5 /* HISTORY: 2 6*Written by Matthew Pierret, 07/02/83. 2 7*Modified: 2 8**/ 2 9 2 10 dcl 1 fm_error_flags aligned based, 2 11 2 action unal, 2 12 3 cant_restart bit (1) unal, 2 13 3 default_restart bit (1) unal, 2 14 3 quiet_restart bit (1) unal, 2 15 3 support_signal bit (1) unal, 2 16 3 mbz_1 bit (14) unal, 2 17 2 log unal, 2 18 3 system bit (1) unal, 2 19 3 mbz_2 bit (1) unal, 2 20 2 mbz_3 bit (16) unal; 2 21 2 22 dcl ( 2 23 FM_ACTION_CANT_RESTART init ("1000"b || (32)"0"b), 2 24 FM_ACTION_CAN_RESTART init ("0000"b || (32)"0"b), 2 25 FM_ACTION_DEFAULT_RESTART 2 26 init ("0100"b || (32)"0"b), 2 27 FM_ACTION_QUIET_RESTART 2 28 init ("0010"b || (32)"0"b), 2 29 FM_ACTION_LOG init ((18)"0"b || "10"b || (16)"0"b) 2 30 ) bit (36) aligned internal static options (constant); 2 31 2 32 /* ********* END INCLUDE FILE dm_fm_sub_error_flags.incl.pl1 ******** */ 184 185 3 1 /* BEGIN INCLUDE FILE dm_log_sv_codes.incl.pl1 */ 3 2 3 3 /* format: ^indcom */ 3 4 3 5 /* DESCRIPTION: 3 6* These are the severity codes used by the dms daemon when calling its logger. 3 7* The severity is ranked thusly: 3 8* 3 9* severity log write situation 3 10* -------- --- ----- --------- 3 11* 0 no yes standard output, query, etc. 3 12* 1 yes yes fatal error, terminate dms daemon. 3 13* 2 yes yes nonfatal error. 3 14* 3 yes yes informative message. 3 15* 4 yes no log information only. 3 16**/ 3 17 3 18 /* HISTORY: 3 19* 3 20*Written by M. Pandolf, 10/06/82. 3 21*Modified: 3 22*12/10/84 by R. Michael Tague: Rename and reformat description/history. 3 23*01/13/85 by Lee A. Newcomb: Renamed to dm_log_sv_codes from 3 24* dm_daemon_sv_codes as the severity codes for the DM log are not 3 25* restrained to the DM Daemon's use. 3 26*01/24/85 by Lee A. Newcomb: Fixed to say dm_log_sv_codes.incl.pl1 in the 3 27* BEGIN and END INCLUDE comments, instead of dm_daemon_sv_codes.==. 3 28**/ 3 29 3 30 /* format: style5 */ 3 31 3 32 dcl (PRINT_SV, QUERY_SV) fixed bin internal static 3 33 options (constant) init (0); 3 34 dcl (CRASH_SV, FATAL_SV) fixed bin internal static 3 35 options (constant) init (1); 3 36 dcl ERROR_SV fixed bin internal static 3 37 options (constant) init (2); 3 38 dcl INFORM_SV fixed bin internal static 3 39 options (constant) init (3); 3 40 dcl LOG_SV fixed bin internal static 3 41 options (constant) init (4); 3 42 3 43 /* END INCLUDE FILE dm_log_sv_codes.incl.pl1 */ 186 187 188 end fm_sys_pn_tbl_get_path; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/04/85 0826.9 fm_sys_pn_tbl_get_path.pl1 >spec>on>7192.pbf-04/04/85>fm_sys_pn_tbl_get_path.pl1 182 1 01/07/85 0900.8 dm_fm_sys_pn_tbl.incl.pl1 >ldd>include>dm_fm_sys_pn_tbl.incl.pl1 184 2 01/07/85 0858.8 dm_fm_sub_error_flags.incl.pl1 >ldd>include>dm_fm_sub_error_flags.incl.pl1 186 3 03/06/85 1031.1 dm_log_sv_codes.incl.pl1 >ldd>include>dm_log_sv_codes.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. DONT_PAD 000501 automatic bit(1) initial dcl 157 set ref 157* 160* FM_ACTION_CANT_RESTART constant bit(36) initial dcl 2-22 ref 143 FM_ACTION_LOG constant bit(36) initial dcl 2-22 ref 143 LOCK_NOT_YET_ATTEMPTED 000662 constant fixed bin(35,0) initial dcl 70 ref 51 121 LOCK_WAIT_TIME 000002 constant fixed bin(71,0) initial dcl 69 set ref 107* LOG_SV 000031 constant fixed bin(17,0) initial dcl 3-40 set ref 143* 174* MYNAME 000004 constant varying char(32) initial dcl 68 set ref 143* 174* NO_NEW_LINE 000502 automatic bit(1) initial dcl 157 set ref 157* 160* SPT_ENTRY_NOT_IN_USE constant fixed bin(17,0) initial dcl 1-51 ref 112 SYS_PN_TBL_VERSION_1 000000 constant bit(36) initial dcl 1-49 set ref 100 100* UNLOCK_NOT_YET_ATTEMPTED 000662 constant fixed bin(35,0) initial dcl 70 ref 54 170 addr builtin function dcl 59 ref 107 107 124 124 173 173 cleanup 000110 stack reference condition dcl 64 ref 96 code 000100 automatic fixed bin(35,0) initial dcl 49 set ref 49* cu_$arg_list_ptr 000010 constant entry external dcl 75 ref 141 cu_$arg_ptr_rel 000012 constant entry external dcl 76 ref 142 dm_error_$fast_lock_invalid_reset 000026 external static fixed bin(35,0) dcl 88 ref 108 170 dm_error_$fm_bad_sys_pn_tbl_ver 000030 external static fixed bin(35,0) dcl 90 set ref 100* dm_misc_util_$log 000014 constant entry external dcl 77 ref 174 e 100 based structure array level 2 dcl 1-36 ref 112 er_arg_list_ptr 000100 automatic pointer dcl 136 set ref 141* 142* 143* er_code based fixed bin(35,0) dcl 137 set ref 143* er_code_len 000104 automatic fixed bin(21,0) dcl 139 set ref 142* er_code_ptr 000102 automatic pointer dcl 138 set ref 142* 143 file_uid 102 based bit(36) array level 3 in structure "sys_pn_tbl" dcl 1-36 in procedure "fm_sys_pn_tbl_get_path" ref 112 file_uid 000101 automatic bit(36) initial dcl 50 in procedure "fm_sys_pn_tbl_get_path" set ref 50* 98* 112 fm_data_$sys_pn_tbl_name 000032 external static char(32) unaligned dcl 1-31 set ref 100* 108* 125* 174* fm_error_util_$signal 000016 constant entry external dcl 78 ref 143 h based structure level 2 dcl 1-36 in_use 100 based fixed bin(17,0) array level 3 dcl 1-36 ref 112 ioa_$general_rs 000020 constant entry external dcl 79 ref 160 last_entry 1 based fixed bin(17,0) level 3 dcl 1-36 ref 112 117 lbound builtin function dcl 59 ref 112 length builtin function dcl 59 ref 162 lock 2 based fixed bin(71,0) level 3 dcl 1-36 set ref 107 107 124 124 173 173 lock_code 000102 automatic fixed bin(35,0) initial dcl 51 set ref 51* 107* 108 108 108* 121 170 170 lock_manager_$lock_fast 000022 constant entry external dcl 81 ref 107 lock_manager_$unlock_fast 000024 constant entry external dcl 83 ref 124 173 min builtin function dcl 59 ref 162 mm_message_buffer 000101 automatic char(1024) unaligned dcl 156 set ref 160* 162 162 mm_message_len 000100 automatic fixed bin(21,0) dcl 155 set ref 160* 162 mm_p_arg_list_ptr parameter pointer dcl 154 set ref 151 160* p_file_path parameter char(168) unaligned dcl 45 set ref 36 117* 119* p_file_uid parameter bit(36) dcl 44 ref 36 98 p_lock_sys_pn_tbl parameter bit(1) dcl 43 ref 36 104 p_sys_pn_tbl_ptr parameter pointer dcl 42 ref 36 99 paths 40100 based char(168) array level 2 packed unaligned dcl 1-36 ref 119 substr builtin function dcl 59 ref 162 sys_idx 000103 automatic fixed bin(17,0) initial dcl 52 set ref 52* 112* 112 112* 117 119 sys_pn_tbl based structure level 1 dcl 1-36 sys_pn_tbl_ptr 000104 automatic pointer dcl 53 set ref 99* 100 100 107 107 112 112 112 112 117 119 124 124 173 173 unlock_code 000106 automatic fixed bin(35,0) initial dcl 54 set ref 54* 124* 125 125* 170 173* 174 174* version based bit(36) level 3 dcl 1-36 set ref 100 100* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CRASH_SV internal static fixed bin(17,0) initial dcl 3-34 ERROR_SV internal static fixed bin(17,0) initial dcl 3-36 FATAL_SV internal static fixed bin(17,0) initial dcl 3-34 FM_ACTION_CAN_RESTART internal static bit(36) initial dcl 2-22 FM_ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 2-22 FM_ACTION_QUIET_RESTART internal static bit(36) initial dcl 2-22 INFORM_SV internal static fixed bin(17,0) initial dcl 3-38 PRINT_SV internal static fixed bin(17,0) initial dcl 3-32 QUERY_SV internal static fixed bin(17,0) initial dcl 3-32 SPT_ENTRY_IN_USE internal static fixed bin(17,0) initial dcl 1-51 SPT_ENTRY_IN_USE_BUT_DELETED internal static fixed bin(17,0) initial dcl 1-51 fm_data_$sys_pn_tbl_ptr external static pointer dcl 1-33 fm_error_flags based structure level 1 dcl 2-10 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 000375 constant entry internal dcl 132 ref 100 108 125 FINISH 000574 constant entry internal dcl 167 ref 96 MAKE_MESSAGE 000506 constant entry internal dcl 151 ref 143 fm_sys_pn_tbl_get_path 000107 constant entry external dcl 36 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1064 1120 663 1074 Length 1372 663 34 235 201 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fm_sys_pn_tbl_get_path 120 external procedure is an external procedure. on unit on line 96 110 on unit ERROR_RETURN 112 internal procedure is declared options(variable). MAKE_MESSAGE 356 internal procedure uses returns(char(*)) or returns(bit(*)). FINISH internal procedure shares stack frame of on unit on line 96. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ERROR_RETURN 000100 er_arg_list_ptr ERROR_RETURN 000102 er_code_ptr ERROR_RETURN 000104 er_code_len ERROR_RETURN MAKE_MESSAGE 000100 mm_message_len MAKE_MESSAGE 000101 mm_message_buffer MAKE_MESSAGE 000501 DONT_PAD MAKE_MESSAGE 000502 NO_NEW_LINE MAKE_MESSAGE fm_sys_pn_tbl_get_path 000100 code fm_sys_pn_tbl_get_path 000101 file_uid fm_sys_pn_tbl_get_path 000102 lock_code fm_sys_pn_tbl_get_path 000103 sys_idx fm_sys_pn_tbl_get_path 000104 sys_pn_tbl_ptr fm_sys_pn_tbl_get_path 000106 unlock_code fm_sys_pn_tbl_get_path THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this_desc call_int_other_desc return enable shorten_stack ext_entry int_entry int_entry_desc return_chars_eis THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$arg_list_ptr cu_$arg_ptr_rel dm_misc_util_$log fm_error_util_$signal ioa_$general_rs lock_manager_$lock_fast lock_manager_$unlock_fast THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$fast_lock_invalid_reset dm_error_$fm_bad_sys_pn_tbl_ver fm_data_$sys_pn_tbl_name LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 36 000102 49 000114 50 000115 51 000116 52 000120 54 000122 96 000124 98 000142 99 000145 100 000150 104 000206 107 000212 108 000230 112 000263 115 000303 117 000305 119 000317 121 000327 124 000332 125 000345 129 000373 132 000374 141 000402 142 000410 143 000432 149 000503 151 000505 157 000513 160 000515 162 000560 167 000574 170 000575 173 000606 174 000622 179 000661 ----------------------------------------------------------- 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