COMPILATION LISTING OF SEGMENT get_dm_free_area_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/08/85 1138.8 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* This routine gets a pointer to the Data Management free area. 9**/ 10 11 /* HISTORY: 12*Written by Matthew Pierret, 02/23/83. 13*Modified: 14*03/29/83 by Lindsey Spratt: Changed to create its own free area, rather than 15* reference dm_data_$area_ptr. Added an entry, set, for setting the 16* dm_area_ptr to an arbitrary location. 17*04/05/83 by Lindsey L. Spratt: Changed the $set entry to take two arguments, 18* a directory pathname and an error code. It creates a new segment 19* in the specified directory and makes this the initial component of 20* the dm_free_area. 21*12/07/84 by Matthew Pierret: Moved main procedure statement to standard 22* location. Used local my_area_info instead of allocating one. 23*12/08/84 by Lindsey L. Spratt: Fixed to my_area_info when setting 24* internal_area_ptr, rather than area_info. 25*02/07/85 by Lindsey L. Spratt: Changed the $set entry to take parameter 26* specifying whether or not to release the old free area (if there 27* is one), and removed the p_code argument. Changed the area suffix 28* to be gotten from the new internal proc GET_AREA_SUFFIX. This is 29* done in two places, the gap_area_info.owner value setting and the 30* temp_area_entry name setting. The new form of the is two 31* components, the validation level followed by the value of 32* AREA_NAME ("dm_free_area"). The setting of the area_ptr is now 33* done by an internal proc, GET_AREA_PTR, which is used by both the 34* main and $set entries. $set is changed to use 35* initiate_file_$create instead of hcs_$append_branchx and 36* initiate_file_. Error reporting is now done via ERROR_RETURN 37* (which calls sub_err_), rather than via a "code" parameter. 38**/ 39 40 /* format: style2,ind3 */ 41 42 get_dm_free_area_: 43 proc () returns (ptr); 44 45 /* START OF DECLARATIONS */ 46 /* Parameter */ 47 48 dcl p_temp_dir_path char (*) parm; 49 dcl p_release_old_area bit (1) aligned parm; 50 dcl p_output_area_ptr ptr parm; 51 52 /* Automatic */ 53 54 dcl seg_was_created bit (1) aligned init (NO); 55 dcl temp_seg_ptr ptr init (null); 56 dcl code fixed bin (35); 57 dcl temp_area_dir char (256); 58 dcl temp_area_entry char (64); 59 60 /* Based */ 61 /* Builtin */ 62 63 dcl null builtin; 64 65 /* Constant */ 66 67 dcl AREA_NAME init ("dm_free_area") char (12) options (constant) internal static; 68 dcl ( 69 YES init ("1"b), 70 NO init ("0"b) 71 ) bit (1) aligned internal static options (constant); 72 dcl myname init ("get_dm_free_area_") char (32) varying internal static options (constant); 73 74 /* Entry */ 75 76 dcl absolute_pathname_ entry (char (*), char (*), fixed bin (35)); 77 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 78 dcl cu_$arg_list_ptr entry (ptr); 79 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 80 dcl cu_$level_get entry (fixed bin); 81 dcl define_area_ entry (ptr, fixed bin (35)); 82 dcl hcs_$append_branch entry (char (*), char (*), fixed bin (5), fixed bin (35)); 83 dcl initiate_file_$create entry (char (*), char (*), bit (*), ptr, bit (1) aligned, fixed bin (24), 84 fixed bin (35)); 85 dcl ioa_$general_rs entry (ptr, fixed bin, fixed bin, char (*), fixed bin (21), bit (1) aligned, 86 bit (1) aligned); 87 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 88 dcl release_area_ entry (ptr); 89 dcl sub_err_ entry () options (variable); 90 dcl unique_chars_ entry (bit (*)) returns (char (15)); 91 92 /* External */ 93 94 dcl sys_info$max_seg_size fixed bin (35) ext static; 95 96 /* Static */ 97 98 dcl internal_area_ptr ptr init (null) internal static; 99 100 /* END OF DECLARATIONS */ 101 102 103 return (GET_AREA_PTR (null ())); 104 105 set: 106 entry (p_temp_dir_path, p_release_old_area, p_output_area_ptr); 107 code = 0; 108 109 if internal_area_ptr ^= null & p_release_old_area = YES 110 then call release_area_ (internal_area_ptr); 111 112 temp_seg_ptr = null; 113 114 call absolute_pathname_ (p_temp_dir_path, temp_area_dir, code); 115 if code ^= 0 116 then call ERROR_RETURN (code, "^/Unable to convert ""^a"" into an absolute path.", p_temp_dir_path); 117 118 temp_area_entry = unique_chars_ ("0"b) || "." || GET_AREA_SUFFIX (); 119 120 call initiate_file_$create (temp_area_dir, temp_area_entry, RW_ACCESS, temp_seg_ptr, seg_was_created, (0), code); 121 if code ^= 0 122 then call ERROR_RETURN (code, "^/Unable to create the new dm free area segment ""^a"".", 123 pathname_ (temp_area_dir, temp_area_entry)); 124 125 p_output_area_ptr = GET_AREA_PTR (temp_seg_ptr); 126 127 return; 128 129 130 ERROR_RETURN: 131 proc () options (variable); 132 dcl er_p_code fixed bin (35) based (er_p_code_ptr); 133 dcl er_p_code_ptr ptr init (null); 134 dcl er_msg char (1024) varying aligned; 135 136 dcl 1 er_msg_struc aligned based (addr (er_msg)), 137 2 len fixed bin (21), 138 2 str char (length (er_msg)) unaligned; 139 140 dcl er_arg_list_ptr ptr; 141 dcl er_nargs fixed bin; 142 143 call cu_$arg_list_ptr (er_arg_list_ptr); 144 call cu_$arg_count (er_nargs, (0)); 145 call cu_$arg_ptr (1, er_p_code_ptr, (0), (0)); 146 if er_nargs > 1 147 then call ioa_$general_rs (er_arg_list_ptr, 2, 3, er_msg_struc.str, er_msg_struc.len, "0"b, "0"b); 148 else er_msg = ""; 149 150 call sub_err_ (er_p_code, myname, ACTION_CANT_RESTART, null (), 0, "^a", er_msg); 151 end ERROR_RETURN; 152 153 GET_AREA_PTR: 154 proc (gap_p_initial_seg_ptr) returns (ptr); 155 dcl gap_p_initial_seg_ptr ptr parm; 156 dcl 1 gap_area_info aligned like area_info; 157 dcl gap_code fixed bin (35) init (0); 158 159 if internal_area_ptr = null () | gap_p_initial_seg_ptr ^= null () 160 then 161 do; 162 gap_area_info.version = area_info_version_1; 163 gap_area_info.areap = gap_p_initial_seg_ptr; 164 gap_area_info.owner = GET_AREA_SUFFIX (); 165 gap_area_info.size = sys_info$max_seg_size; 166 string (gap_area_info.control) = "0"b; 167 gap_area_info.control.system = YES; /* Makes extensions be created in the same directory as the original component. */ 168 gap_area_info.control.extend = YES; 169 gap_area_info.control.zero_on_alloc = YES; 170 171 call define_area_ (addr (gap_area_info), gap_code); 172 if gap_code ^= 0 173 then call ERROR_RETURN (gap_code, "^/Unable to define the Data Management temporary area."); 174 175 internal_area_ptr = gap_area_info.areap; 176 end; 177 return (internal_area_ptr); 178 end GET_AREA_PTR; 179 180 GET_AREA_SUFFIX: 181 proc () returns (char (*)); 182 dcl gas_ring fixed bin init (0); 183 dcl gas_ring_pic pic "9"; 184 call cu_$level_get (gas_ring); 185 gas_ring_pic = gas_ring; 186 return (gas_ring_pic || "." || AREA_NAME); 187 end GET_AREA_SUFFIX; 188 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 189 190 2 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 2 2 2 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 2 4 2 5 dcl area_infop ptr; 2 6 2 7 dcl 1 area_info aligned based (area_infop), 2 8 2 version fixed bin, /* version number for this structure is 1 */ 2 9 2 control aligned like area_control, /* control bits for the area */ 2 10 2 owner char (32) unal, /* creator of the area */ 2 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 2 12 2 size fixed bin (18), /* size of the area in words */ 2 13 2 version_of_area fixed bin, /* version of area (returned only) */ 2 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 2 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 2 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 2 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 2 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 2 19 2 20 dcl 1 area_control aligned based, 2 21 2 extend bit (1) unal, /* says area is extensible */ 2 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 2 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 2 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 2 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 2 26 2 system bit (1) unal, /* says area is managed by system */ 2 27 2 pad bit (30) unal; 2 28 2 29 /* END INCLUDE FILE area_info.incl.pl1 */ 191 192 3 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 3 2 /* format: style3 */ 3 3 3 4 /* These constants are to be used for the flags argument of sub_err_ */ 3 5 /* They are just "string (condition_info_header.action_flags)" */ 3 6 3 7 declare ( 3 8 ACTION_CAN_RESTART init (""b), 3 9 ACTION_CANT_RESTART init ("1"b), 3 10 ACTION_DEFAULT_RESTART 3 11 init ("01"b), 3 12 ACTION_QUIET_RESTART 3 13 init ("001"b), 3 14 ACTION_SUPPORT_SIGNAL 3 15 init ("0001"b) 3 16 ) bit (36) aligned internal static options (constant); 3 17 3 18 /* End include file */ 193 194 end get_dm_free_area_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1128.1 get_dm_free_area_.pl1 >spec>on>41-15>get_dm_free_area_.pl1 189 1 04/08/85 1113.3 access_mode_values.incl.pl1 >spec>on>41-15>access_mode_values.incl.pl1 191 2 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 193 3 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.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. ACTION_CANT_RESTART 000012 constant bit(36) initial dcl 3-7 set ref 150* AREA_NAME 000013 constant char(12) initial unaligned dcl 67 ref 186 NO constant bit(1) initial dcl 68 ref 54 RW_ACCESS 000000 constant bit(3) initial unaligned dcl 1-11 set ref 120* YES 000012 constant bit(1) initial dcl 68 ref 109 167 168 169 absolute_pathname_ 000012 constant entry external dcl 76 ref 114 area_control based structure level 1 dcl 2-20 area_info based structure level 1 dcl 2-7 area_info_version_1 constant fixed bin(17,0) initial dcl 2-3 ref 162 areap 16 000234 automatic pointer level 2 dcl 156 set ref 163* 175 code 000104 automatic fixed bin(35,0) dcl 56 set ref 107* 114* 115 115* 120* 121 121* control 1 000234 automatic structure level 2 dcl 156 set ref 166* cu_$arg_count 000014 constant entry external dcl 77 ref 144 cu_$arg_list_ptr 000016 constant entry external dcl 78 ref 143 cu_$arg_ptr 000020 constant entry external dcl 79 ref 145 cu_$level_get 000022 constant entry external dcl 80 ref 184 define_area_ 000024 constant entry external dcl 81 ref 171 er_arg_list_ptr 000504 automatic pointer dcl 140 set ref 143* 146* er_msg 000102 automatic varying char(1024) dcl 134 set ref 146 146 146 146 148* 150* er_msg_struc based structure level 1 dcl 136 er_nargs 000506 automatic fixed bin(17,0) dcl 141 set ref 144* 146 er_p_code based fixed bin(35,0) dcl 132 set ref 150* er_p_code_ptr 000100 automatic pointer initial dcl 133 set ref 133* 145* 150 extend 1 000234 automatic bit(1) level 3 packed unaligned dcl 156 set ref 168* gap_area_info 000234 automatic structure level 1 dcl 156 set ref 171 171 gap_code 000260 automatic fixed bin(35,0) initial dcl 157 set ref 157* 171* 172 172* gap_p_initial_seg_ptr parameter pointer dcl 155 ref 153 159 163 gas_ring 000100 automatic fixed bin(17,0) initial dcl 182 set ref 182* 184* 185 gas_ring_pic 000101 automatic picture(1) unaligned dcl 183 set ref 185* 186 initiate_file_$create 000026 constant entry external dcl 83 ref 120 internal_area_ptr 000010 internal static pointer initial dcl 98 set ref 109 109* 159 175* 177 ioa_$general_rs 000030 constant entry external dcl 85 ref 146 len based fixed bin(21,0) level 2 dcl 136 set ref 146* myname 000001 constant varying char(32) initial dcl 72 set ref 150* null builtin function dcl 63 ref 55 103 103 109 112 133 150 150 159 159 owner 2 000234 automatic char(32) level 2 packed unaligned dcl 156 set ref 164* p_output_area_ptr parameter pointer dcl 50 set ref 105 125* p_release_old_area parameter bit(1) dcl 49 ref 105 109 p_temp_dir_path parameter char unaligned dcl 48 set ref 105 114* 115* pathname_ 000032 constant entry external dcl 87 ref 121 121 release_area_ 000034 constant entry external dcl 88 ref 109 seg_was_created 000100 automatic bit(1) initial dcl 54 set ref 54* 120* size 13 000234 automatic fixed bin(18,0) level 2 dcl 156 set ref 165* str 1 based char level 2 packed unaligned dcl 136 set ref 146* sub_err_ 000036 constant entry external dcl 89 ref 150 sys_info$max_seg_size 000042 external static fixed bin(35,0) dcl 94 ref 165 system 1(05) 000234 automatic bit(1) level 3 packed unaligned dcl 156 set ref 167* temp_area_dir 000105 automatic char(256) unaligned dcl 57 set ref 114* 120* 121* 121* temp_area_entry 000205 automatic char(64) unaligned dcl 58 set ref 118* 120* 121* 121* temp_seg_ptr 000102 automatic pointer initial dcl 55 set ref 55* 112* 120* 125* unique_chars_ 000040 constant entry external dcl 90 ref 118 version 000234 automatic fixed bin(17,0) level 2 dcl 156 set ref 162* zero_on_alloc 1(01) 000234 automatic bit(1) level 3 packed unaligned dcl 156 set ref 169* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 3-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 3-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 3-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 3-7 A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS internal static bit(3) initial unaligned dcl 1-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 area_infop automatic pointer dcl 2-5 hcs_$append_branch 000000 constant entry external dcl 82 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 000512 constant entry internal dcl 130 ref 115 121 172 GET_AREA_PTR 000707 constant entry internal dcl 153 ref 103 125 GET_AREA_SUFFIX 001026 constant entry internal dcl 180 ref 118 164 get_dm_free_area_ 000135 constant entry external dcl 42 set 000167 constant entry external dcl 105 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 146 146 171 171 length builtin function ref 146 146 string builtin function ref 166 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1310 1354 1103 1320 Length 1622 1103 44 231 205 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME get_dm_free_area_ 330 external procedure is an external procedure. ERROR_RETURN 384 internal procedure is declared options(variable). GET_AREA_PTR internal procedure shares stack frame of external procedure get_dm_free_area_. GET_AREA_SUFFIX 71 internal procedure uses returns(char(*)) or returns(bit(*)). STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 internal_area_ptr get_dm_free_area_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ERROR_RETURN 000100 er_p_code_ptr ERROR_RETURN 000102 er_msg ERROR_RETURN 000504 er_arg_list_ptr ERROR_RETURN 000506 er_nargs ERROR_RETURN GET_AREA_SUFFIX 000100 gas_ring GET_AREA_SUFFIX 000101 gas_ring_pic GET_AREA_SUFFIX get_dm_free_area_ 000100 seg_was_created get_dm_free_area_ 000102 temp_seg_ptr get_dm_free_area_ 000104 code get_dm_free_area_ 000105 temp_area_dir get_dm_free_area_ 000205 temp_area_entry get_dm_free_area_ 000234 gap_area_info GET_AREA_PTR 000260 gap_code GET_AREA_PTR THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this_desc return signal shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc return_chars_eis THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr cu_$level_get define_area_ initiate_file_$create ioa_$general_rs pathname_ release_area_ sub_err_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 54 000125 55 000126 42 000132 103 000145 105 000163 107 000204 109 000205 112 000225 114 000227 115 000252 118 000301 120 000361 121 000424 125 000472 127 000503 130 000511 133 000517 143 000521 144 000527 145 000541 146 000562 148 000637 150 000640 151 000706 153 000707 157 000711 159 000712 162 000723 163 000725 164 000730 165 000750 166 000754 167 000755 168 000757 169 000761 171 000763 172 000775 175 001016 177 001021 180 001025 182 001033 184 001034 185 001042 186 001052 ----------------------------------------------------------- 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