COMPILATION LISTING OF SEGMENT bjm_open Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/04/85 0941.1 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* format: style4,indattr,ifthenstmt,ifthen,^indcomtxt,idind33 */ 8 9 bjm_open: 10 proc (p_dir, p_entry, p_bj_oid, p_code); 11 12 /* DESCRIPTION: 13* 14* This opens a BJ in a user's process. There are five major steps in 15*opening a BJ to a process: 16* 17*- calling file_manager_ to actually open the BJ, 18* 19*- creating a bj_pst entry for the BJ if one does not exist, 20* 21*- registering the user as a user of the BJ in the bj_check_in_table, 22* 23*- creating a bj_ppt entry if needed and adding one to the number of times 24*the user process has opened the BJ, 25* 26*- and setting the BJ last opened value for write_begin_mark to select 27*a default BJ if the user does not give it one and has not called 28*bjm_set_default_bj. 29**/ 30 31 /* HISTORY: 32*Written by Andre Bensoussan, 07/01/82. 33*Modified: 34*10/04/82 by Lee A. Newcomb: To replace the old default_bj setting with the 35* new bj_ppt.default_bj.last_opened_oid for write_begin_mark, fix 36* the calling protocol so recursive references to dm_data_ will not 37* occur, and to document. 38*10/15/82 by M. Pandolf: to use file_manager_ to manipulate data management 39* files. 40*12/10/82 by M. Pandolf: to bring rest of code up to date. 41*04/06/83 by A. Bensoussan: to add the new entry point $for_recovery. 42*05/13/83 by A. Bensoussan: to add the new entry point $force. 43*11/02/83 by M. Pandolf: to only allow entrynames ending in ".bj" 44*12/06/83 by L. A. Newcomb: Renamed before_journal_manager_static_ to 45* bjm_data_ and moved some cells from dm_data_ to bjm_data_. 46*06/11/84 by Lee Baldwin: Renamed dm_error_$bj_header_bad to $bj_bad_header. 47*03/19/85 by Steve Herbst: Fixed to initialize bjm_data_$bj_code. 48**/ 49 50 /* standard entry: */ 51 52 entry_no = 1; 53 goto COMMON; 54 55 for_recovery: entry (p_dir, p_entry, p_bj_oid, p_code); 56 57 entry_no = 2; 58 goto COMMON; 59 60 force: entry (p_dir, p_entry, p_bj_oid, p_code); 61 62 entry_no = 3; 63 goto COMMON; 64 65 66 COMMON: 67 68 /* validate entry name */ 69 70 if ^is_valid_bj_name (p_entry) 71 then do; 72 p_code = dm_error_$bj_invalid_name; 73 return; 74 end; 75 76 /* Enter BJM primitive via standard protocol: */ 77 78 /* Check that BJM is not already active and claim it if not */ 79 80 if bjm_data_$bj_operation = "" 81 then bjm_data_$bj_operation = ME; 82 else do; 83 p_code = dm_error_$bj_recursive_invoc; 84 goto quick_exit; 85 end; 86 87 /* Set up values for and enable the cleanup handler */ 88 89 pf_oid = ""b; 90 level = cu_$level_get (); 91 92 bjm_data_$bj_exit_err = nonlocal_error_exit; 93 bjm_data_$bj_code = 0; 94 95 on cleanup 96 call CLEANUP (); 97 98 /* copy arguments into BJM ring and set local code to zero for safety */ 99 100 bj_dir = p_dir; 101 bj_entry = p_entry; 102 p_code = 0; 103 104 call cu_$level_set (get_ring_ ()); 105 106 /* End of standard BJM entry protocol */ 107 108 /* 109* Open the page file for that journal. Compare the pf_uid recorded in the 110* CI header with the bj_uid recorded in the bj_header; they must be 111* identical 112**/ 113 114 call file_manager_$open (bj_dir, bj_entry, pf_oid, code); 115 116 if code ^= 0 117 then if code = dm_error_$file_already_open 118 then call_fm_close_when_done = "1"b; 119 else do; 120 p_code = code; 121 goto local_error_exit; 122 end; 123 else call_fm_close_when_done = "0"b; 124 125 pf_uid = bj_ci_zero$get_pf_uid (pf_oid); 126 127 bj_uid = bj_ci_zero$get_bj_uid (pf_oid); 128 129 if pf_uid ^= bj_uid then 130 do; 131 if call_fm_close_when_done then call file_manager_$close (pf_oid, code); 132 p_code = dm_error_$bj_bad_header; 133 goto local_error_exit; 134 end; 135 136 137 138 /* Search the per process and the per system tables for an entry for this 139* journal. Build an entry in the appropriate table if it does not already 140* exist. Register the process as a user of the journal. */ 141 142 bj_ppte_ptr = bj_ppt_search (bj_uid); 143 144 if bj_ppte_ptr = null () 145 then do; 146 call bj_pst_lock (); 147 bj_pste_ptr = bj_pst_search (bj_uid); 148 149 if bj_pste_ptr = null () 150 then do; 151 if entry_no = 1 then bj_pste_ptr = bj_pste_create (bj_dir, bj_entry, pf_oid, bj_uid); 152 if entry_no = 2 then bj_pste_ptr = bj_pste_create$for_recovery (bj_dir, bj_entry, pf_oid, bj_uid); 153 if entry_no = 3 then bj_pste_ptr = bj_pste_create$force (bj_dir, bj_entry, pf_oid, bj_uid); 154 end; 155 156 else call bj_pste_register$check_in (bj_pste_ptr); 157 158 bj_ppte_ptr = bj_ppte_create (bj_uid, pf_oid, bj_pste_ptr); 159 160 call bj_pst_lock$unlock (); 161 162 end; 163 164 else call bj_ppte_register$check_in (bj_ppte_ptr); 165 166 167 bj_oid = bj_oid_util$get_oid (bj_ppte_ptr); 168 bjm_data_$bj_ppt_ptr -> bj_ppt.default_bj.last_opened_oid = bj_oid; 169 170 p_bj_oid = bj_oid; 171 172 if call_fm_close_when_done then call file_manager_$close (pf_oid, code); 173 174 /* Exit according to standard protocol */ 175 176 std_exit: 177 call cu_$level_set (level); 178 bjm_data_$bj_exit_err = 179 bjm_data_$bj_default_error_label; 180 bjm_data_$bj_operation = ""; 181 182 quick_exit: 183 return; 184 185 nonlocal_error_exit: 186 p_code = bjm_data_$bj_code; 187 188 local_error_exit: 189 call CLEANUP; 190 goto quick_exit; 191 192 193 194 /* INTERNAL PROCEDURES */ 195 196 is_valid_bj_name: 197 proc (bj_name) 198 reducible 199 returns (bit (1) aligned); 200 201 dcl bj_name char (*) parameter; 202 dcl (length, substr, reverse, rtrim) builtin; 203 204 return ( 205 (length (rtrim (bj_name)) < 33) & 206 (substr (reverse (rtrim (bj_name)), 1, 3) = "jb.")); 207 208 end is_valid_bj_name; 209 210 211 212 CLEANUP: proc; 213 214 dcl ec fixed bin (35); 215 216 217 218 call bj_cleanup_tables$handler (ec); /* Also unlocks the locks */ 219 220 if call_fm_close_when_done 221 then call file_manager_$close (pf_oid, ec); 222 223 bjm_data_$bj_operation = ""; 224 bjm_data_$bj_exit_err = 225 bjm_data_$bj_default_error_label; 226 227 call cu_$level_set (level); 228 229 return; 230 231 end CLEANUP; 232 233 234 235 /* PARAMETERS */ 236 237 dcl p_dir char (*), /* Dir path of the journal */ 238 p_entry char (*), /* Entry name of the journal */ 239 p_bj_oid bit (36) aligned, 240 p_code fixed bin (35); 241 242 /* AUTOMATIC */ 243 244 dcl bj_dir char (168); 245 dcl bj_entry char (32); 246 dcl bj_oid bit (36) aligned; 247 dcl code fixed bin (35); 248 dcl pf_oid bit (36) aligned; 249 dcl pf_uid bit (36) aligned; 250 dcl bj_uid bit (36) aligned; 251 dcl level fixed bin; 252 dcl bj_pste_ptr ptr; 253 dcl call_fm_close_when_done bit (1) aligned; 254 dcl entry_no fixed bin; 255 256 257 /* CONSTANT */ 258 259 dcl ME char (8) internal static 260 options (constant) init ("bjm_open"); 261 262 /* EXTERNAL */ 263 264 dcl dm_error_$bj_recursive_invoc fixed bin(35) ext static; 265 dcl dm_error_$bj_bad_header fixed bin(35) ext static; 266 dcl dm_error_$file_already_open fixed bin(35) ext static; 267 dcl dm_error_$bj_invalid_name fixed bin(35) ext static; 268 dcl bjm_data_$bj_ppt_ptr pointer ext static; 269 270 /* ENTRY */ 271 272 dcl cu_$level_get entry returns (fixed bin); 273 dcl cu_$level_set entry (fixed bin); 274 dcl get_ring_ entry returns (fixed bin (3)); 275 dcl file_manager_$open entry (char (*), char (*), bit (36) aligned, fixed bin (35)); 276 dcl file_manager_$close entry (bit (36) aligned, fixed bin (35)); 277 dcl bj_ci_zero$get_pf_uid entry (bit (36) aligned) returns (bit (36) aligned); 278 dcl bj_ci_zero$get_bj_uid entry (bit (36) aligned) returns (bit (36) aligned); 279 dcl bj_ppt_search entry (bit (36) aligned) returns (ptr); 280 dcl bj_pst_search entry (bit (36) aligned) returns (ptr); 281 dcl bj_pste_create entry (char (168), char (32), bit (36) aligned, bit (36) aligned) returns (ptr); 282 dcl bj_pste_create$for_recovery entry (char (168), char (32), bit (36) aligned, bit (36) aligned) returns (ptr); 283 dcl bj_pste_create$force entry (char (168), char (32), bit (36) aligned, bit (36) aligned) returns (ptr); 284 dcl bj_ppte_create entry (bit (36) aligned, bit (36) aligned, ptr) returns (ptr); 285 dcl bj_pst_lock entry; 286 dcl bj_pst_lock$unlock entry; 287 dcl bj_pste_register$check_in entry (ptr); 288 dcl bj_ppte_register$check_in entry (ptr); 289 dcl bj_oid_util$get_oid entry (ptr) returns (bit (36) aligned); 290 dcl bj_cleanup_tables$handler entry (fixed bin (35)); 291 292 /* CONDITION */ 293 294 dcl cleanup condition; 295 296 /* INCLUDE FILES */ 297 298 1 1 /* BEGIN INCLUDE FILE dm_bj_global_error_info.incl.pl1 */ 1 2 1 3 /* Originally found in before journal primitives written by */ 1 4 /* A. Bensoussan. Gathered into an include file for ease of use. */ 1 5 /* See the bjm_data_.alm source for details of use. */ 1 6 1 7 /* HISTORY: 1 8*Written by Mike Pandolf, 07/14/82. 1 9*Modified: 1 10*12/06/83 by L. A. Newcomb: Renamed before_journal_manager_static_ to 1 11* bjm_data_ and moved some cells from dm_data_ to bjm_data_. 1 12**/ 1 13 1 14 /* format: style4,indattr,ifthenstmt,ifthen,^indcomtxt,idind33 */ 1 15 dcl bjm_data_$bj_operation char (32) external static; 1 16 1 17 dcl bjm_data_$bj_exit_err label variable external; 1 18 1 19 dcl bjm_data_$bj_code fixed bin (35) external; 1 20 1 21 dcl bjm_data_$bj_default_error_label label external static; 1 22 1 23 1 24 /* END INCLUDE FILE dm_bj_global_error_info.incl.pl1 */ 299 300 2 1 /* BEGIN dm_bj_static.incl.pl1 */ 2 2 /* 2 3*Modified: 2 4*10/04/82 by Lee A. Newcomb: To change from internal static to external 2 5* static. 2 6**/ 2 7 2 8 dcl dm_system_data_$bj_max_n_journals fixed bin ext static; 2 9 dcl dm_system_data_$bj_max_n_processes fixed bin ext static; 2 10 dcl dm_system_data_$max_n_transactions fixed bin ext static; 2 11 2 12 /* END dm_bj_static.incl.pl1 */ 2 13 301 302 3 1 /* BEGIN INCLUDE FILE: dm_bj_ppt.incl.pl1 */ 3 2 /* 3 3*Layout of the per-process before journal table and entries. 3 4* 3 5*Written by Andre Bensoussan June/July 1982 3 6*Modified: 3 7*09/29/82 by Lee A. Newcomb: To make two default oid cells, pad ppte's 3 8* to account for all used space, and use dm_system_data_ for 3 9* determining dimension of bj_ppt.e. 3 10**/ 3 11 /* format: style4,indattr,idind33,^indcomtxt */ 3 12 3 13 dcl BJ_PPT_VERSION_1 fixed bin int static options (constant) init (1); 3 14 dcl BJ_PPTE_VERSION_1 fixed bin int static options (constant) init (1); 3 15 3 16 dcl bj_ppt_ptr ptr; 3 17 3 18 dcl 1 bj_ppt based (bj_ppt_ptr) aligned, 3 19 2 version fixed bin, 3 20 2 max_n_entries fixed bin, /* should be = dm_system_data_$bj_max_n_journals */ 3 21 2 n_entries_used fixed bin, /* # of BJs open in this process */ 3 22 2 highest_ix_used fixed bin, /* max. # of BJs ever opened in this process */ 3 23 2 default_bj, /* for selecting a txn def. BJ by write_before_mark protocol */ 3 24 3 user_set_oid bit (36), /* explicit user setting via $set_default_bj */ 3 25 3 last_opened_oid bit (36), /* implicit if no user setting, set by open and close */ 3 26 /* if both zero, use system default BJ */ 3 27 2 process_id bit (36), /* so we don't have to keep calling for it. */ 3 28 2 process_ix fixed bin, /* index into bj_check_in_table */ 3 29 2 mod_list_area (100) fixed bin (35), /* for keeping track of ppt mods, not curr. used */ 3 30 3 31 2 e dim (dm_system_data_$bj_max_n_journals refer (bj_ppt.max_n_entries)) 3 32 like bj_ppte; /* an entry for each BJ open in this process */ 3 33 /* always make sure bj_ppt.e is on a even word boundary */ 3 34 3 35 /* now specify the format of each per-process BJ table entry */ 3 36 3 37 dcl bj_ppte_ptr ptr; 3 38 3 39 dcl 1 bj_ppte based (bj_ppte_ptr) aligned, 3 40 2 version fixed bin, /* better be the same for all entries in a bj_ppt */ 3 41 2 bj_uid bit (36), /* UID of the BJ page file */ 3 42 2 pf_oid bit (36), /* OID of the BJ page file */ 3 43 2 n_opening fixed bin, /* how many openings this process has done for this BJ */ 3 44 2 bj_pste_ptr ptr, /* "link" to per-system BJ table entry */ 3 45 2 open_time fixed bin (71); /* used to fill in bj_ppt.default_bj.last_opened_oid */ 3 46 /* if the last opened BJ is closed */ 3 47 3 48 /* END INCLUDE FILE: bj_ppt.incl.pl1 */ 303 304 305 306 end bjm_open; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/04/85 0826.3 bjm_open.pl1 >spec>on>7192.pbf-04/04/85>bjm_open.pl1 299 1 01/07/85 0857.3 dm_bj_global_error_info.incl.pl1 >ldd>include>dm_bj_global_error_info.incl.pl1 301 2 01/07/85 0857.8 dm_bj_static.incl.pl1 >ldd>include>dm_bj_static.incl.pl1 303 3 01/07/85 0857.6 dm_bj_ppt.incl.pl1 >ldd>include>dm_bj_ppt.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. ME 000000 constant char(8) initial unaligned dcl 259 ref 80 bj_ci_zero$get_bj_uid 000036 constant entry external dcl 278 ref 127 bj_ci_zero$get_pf_uid 000034 constant entry external dcl 277 ref 125 bj_cleanup_tables$handler 000066 constant entry external dcl 290 ref 218 bj_dir 000100 automatic char(168) unaligned dcl 244 set ref 100* 114* 151* 152* 153* bj_entry 000152 automatic char(32) unaligned dcl 245 set ref 101* 114* 151* 152* 153* bj_name parameter char unaligned dcl 201 ref 196 204 204 bj_oid 000162 automatic bit(36) dcl 246 set ref 167* 168 170 bj_oid_util$get_oid 000064 constant entry external dcl 289 ref 167 bj_ppt based structure level 1 dcl 3-18 bj_ppt_search 000040 constant entry external dcl 279 ref 142 bj_ppte based structure level 1 dcl 3-39 bj_ppte_create 000052 constant entry external dcl 284 ref 158 bj_ppte_ptr 000202 automatic pointer dcl 3-37 set ref 142* 144 158* 164* 167* bj_ppte_register$check_in 000062 constant entry external dcl 288 ref 164 bj_pst_lock 000054 constant entry external dcl 285 ref 146 bj_pst_lock$unlock 000056 constant entry external dcl 286 ref 160 bj_pst_search 000042 constant entry external dcl 280 ref 147 bj_pste_create 000044 constant entry external dcl 281 ref 151 bj_pste_create$for_recovery 000046 constant entry external dcl 282 ref 152 bj_pste_create$force 000050 constant entry external dcl 283 ref 153 bj_pste_ptr 000170 automatic pointer dcl 252 set ref 147* 149 151* 152* 153* 156* 158* bj_pste_register$check_in 000060 constant entry external dcl 287 ref 156 bj_uid 000166 automatic bit(36) dcl 250 set ref 127* 129 142* 147* 151* 152* 153* 158* bjm_data_$bj_code 000074 external static fixed bin(35,0) dcl 1-19 set ref 93* 185 bjm_data_$bj_default_error_label 000076 external static label variable dcl 1-21 ref 178 224 bjm_data_$bj_exit_err 000072 external static label variable dcl 1-17 set ref 92* 178* 224* bjm_data_$bj_operation 000070 external static char(32) unaligned dcl 1-15 set ref 80 80* 180* 223* bjm_data_$bj_ppt_ptr 000020 external static pointer dcl 268 ref 168 call_fm_close_when_done 000172 automatic bit(1) dcl 253 set ref 116* 123* 131 172 220 cleanup 000174 stack reference condition dcl 294 ref 95 code 000163 automatic fixed bin(35,0) dcl 247 set ref 114* 116 116 120 131* 172* cu_$level_get 000022 constant entry external dcl 272 ref 90 cu_$level_set 000024 constant entry external dcl 273 ref 104 176 227 default_bj 4 based structure level 2 dcl 3-18 dm_error_$bj_bad_header 000012 external static fixed bin(35,0) dcl 265 ref 132 dm_error_$bj_invalid_name 000016 external static fixed bin(35,0) dcl 267 ref 72 dm_error_$bj_recursive_invoc 000010 external static fixed bin(35,0) dcl 264 ref 83 dm_error_$file_already_open 000014 external static fixed bin(35,0) dcl 266 ref 116 ec 000100 automatic fixed bin(35,0) dcl 214 set ref 218* 220* entry_no 000173 automatic fixed bin(17,0) dcl 254 set ref 52* 57* 62* 151 152 153 file_manager_$close 000032 constant entry external dcl 276 ref 131 172 220 file_manager_$open 000030 constant entry external dcl 275 ref 114 get_ring_ 000026 constant entry external dcl 274 ref 104 104 last_opened_oid 5 based bit(36) level 3 dcl 3-18 set ref 168* length builtin function dcl 202 ref 204 level 000167 automatic fixed bin(17,0) dcl 251 set ref 90* 176* 227* p_bj_oid parameter bit(36) dcl 237 set ref 9 55 60 170* p_code parameter fixed bin(35,0) dcl 237 set ref 9 55 60 72* 83* 102* 120* 132* 185* p_dir parameter char unaligned dcl 237 ref 9 55 60 100 p_entry parameter char unaligned dcl 237 set ref 9 55 60 66* 101 pf_oid 000164 automatic bit(36) dcl 248 set ref 89* 114* 125* 127* 131* 151* 152* 153* 158* 172* 220* pf_uid 000165 automatic bit(36) dcl 249 set ref 125* 129 reverse builtin function dcl 202 ref 204 rtrim builtin function dcl 202 ref 204 204 substr builtin function dcl 202 ref 204 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BJ_PPTE_VERSION_1 internal static fixed bin(17,0) initial dcl 3-14 BJ_PPT_VERSION_1 internal static fixed bin(17,0) initial dcl 3-13 bj_ppt_ptr automatic pointer dcl 3-16 dm_system_data_$bj_max_n_journals external static fixed bin(17,0) dcl 2-8 dm_system_data_$bj_max_n_processes external static fixed bin(17,0) dcl 2-9 dm_system_data_$max_n_transactions external static fixed bin(17,0) dcl 2-10 NAMES DECLARED BY EXPLICIT CONTEXT. CLEANUP 000714 constant entry internal dcl 212 ref 95 188 COMMON 000122 constant label dcl 66 ref 53 58 63 bjm_open 000025 constant entry external dcl 9 for_recovery 000052 constant entry external dcl 55 force 000077 constant entry external dcl 60 is_valid_bj_name 000645 constant entry internal dcl 196 ref 66 local_error_exit 000640 constant label dcl 188 ref 121 133 nonlocal_error_exit 000634 constant label dcl 185 ref 92 quick_exit 000633 constant label dcl 182 ref 84 190 std_exit 000611 constant label dcl 176 NAME DECLARED BY CONTEXT OR IMPLICATION. null builtin function ref 144 149 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1350 1450 766 1360 Length 1746 766 100 261 362 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME bjm_open 177 external procedure is an external procedure. on unit on line 95 64 on unit is_valid_bj_name internal procedure shares stack frame of external procedure bjm_open. CLEANUP 76 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME CLEANUP 000100 ec CLEANUP bjm_open 000100 bj_dir bjm_open 000152 bj_entry bjm_open 000162 bj_oid bjm_open 000163 code bjm_open 000164 pf_oid bjm_open 000165 pf_uid bjm_open 000166 bj_uid bjm_open 000167 level bjm_open 000170 bj_pste_ptr bjm_open 000172 call_fm_close_when_done bjm_open 000173 entry_no bjm_open 000202 bj_ppte_ptr bjm_open THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_e_as call_ext_out_desc call_ext_out call_int_this call_int_other return enable shorten_stack ext_entry_desc int_entry reverse_cs set_cs_eis THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. bj_ci_zero$get_bj_uid bj_ci_zero$get_pf_uid bj_cleanup_tables$handler bj_oid_util$get_oid bj_ppt_search bj_ppte_create bj_ppte_register$check_in bj_pst_lock bj_pst_lock$unlock bj_pst_search bj_pste_create bj_pste_create$for_recovery bj_pste_create$force bj_pste_register$check_in cu_$level_get cu_$level_set file_manager_$close file_manager_$open get_ring_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. bjm_data_$bj_code bjm_data_$bj_default_error_label bjm_data_$bj_exit_err bjm_data_$bj_operation bjm_data_$bj_ppt_ptr dm_error_$bj_bad_header dm_error_$bj_invalid_name dm_error_$bj_recursive_invoc dm_error_$file_already_open LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 9 000020 52 000045 53 000047 55 000050 57 000072 58 000074 60 000075 62 000117 63 000121 66 000122 72 000143 73 000147 80 000150 83 000162 84 000165 89 000166 90 000167 92 000175 93 000202 95 000203 100 000225 101 000233 102 000240 104 000241 114 000261 116 000306 120 000316 121 000320 122 000321 123 000322 125 000323 127 000334 129 000345 131 000350 132 000363 133 000367 142 000370 144 000401 146 000405 147 000412 149 000423 151 000427 152 000451 153 000473 154 000515 156 000516 158 000525 160 000542 162 000547 164 000550 167 000557 168 000570 170 000575 172 000577 176 000611 178 000620 180 000627 182 000633 185 000634 188 000640 190 000644 196 000645 204 000656 212 000713 218 000721 220 000727 223 000743 224 000750 227 000756 229 000765 ----------------------------------------------------------- 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