COMPILATION LISTING OF SEGMENT vrm_open Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/08/85 1153.3 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 vrm_open: open: proc (I_rel_dir, I_rel_name, O_opening_id, O_code); 8 9 /* . BEGIN_DESCRIPTION 10** 11** 12** Open the specified relation. This requires extracting 13** relation header information into an opening info structure and 14** setting a relation opening identifier for this opening. 15** 16** . END_DESCRIPTION 17**/ 18 19 /* History 20** 21** 82-08-19 R. Harvey: Initially written 22** 23** 83-10-24 Roger Lackey : for better performance changed call to 24* hcs_$status_long to hcs_$get_uid_file to get uid. 25**/ 26 27 /* Parameters */ 28 29 dcl I_rel_dir char (*); 30 dcl I_rel_name char (*); 31 dcl O_opening_id bit (36) aligned; 32 dcl O_code fixed bin (35); 33 34 35 O_opening_id = "0"b; 36 37 vrm_open_info_ptr = null (); 38 new_opening = "0"b; 39 40 rel_name = rtrim (I_rel_name); 41 rel_model_name = rtrim (rel_name) || ".m"; 42 43 call initiate_file_ (I_rel_dir, rel_model_name, R_ACCESS, fm_ptr, (0), (0)); 44 if fm_ptr ^= null () then do; /* MRDS permanent relation */ 45 call initiate_file_ (I_rel_dir, "db_model", R_ACCESS, dbm_ptr, (0), (0)); 46 if dbm_ptr = null then call error (error_table_$noentry); 47 end; 48 else ; /* 'model' info is in the relation */ 49 50 call hcs_$get_uid_file (I_rel_dir, rel_name, file_uid, code); /* Try for uid of relation */ 51 if code ^= 0 then if code ^= error_table_$no_s_permission then 52 call error (code); /* This works even without s_permission */ 53 54 call vrm_open_man$get_opening_id (file_uid, O_opening_id, vrm_com_ptr, vrm_open_info_ptr, code); /* Get an opening id */ 55 if code ^= 0 then call error (code); 56 57 if vrm_open_info_ptr = null () 58 then do; /* Not already open */ 59 new_opening = "1"b; 60 call vrmu_init_rel_desc (I_rel_dir, rel_name, file_uid, fm_ptr, vrm_com_ptr, O_opening_id, vrm_open_info_ptr, code); 61 if code ^= 0 then call error (code); 62 63 call vrm_open_man$set_open_info_ptr (O_opening_id, vrm_open_info_ptr); 64 end; /* not already open */ 65 else vrm_open_info.number_of_openings = vrm_open_info.number_of_openings + 1; 66 67 O_code = 0; 68 Exit: 69 return; 70 71 error: proc (error_code); 72 73 if new_opening 74 then do; 75 call vrm_open_man$remove_opening (O_opening_id); 76 if vrm_open_info_ptr ^= null () 77 then do; 78 wa_ptr = vrm_open_info.com_ptr -> vrm_com.work_area_ptr; 79 free vrm_open_info in (wa); 80 end; 81 end; 82 O_opening_id = "0"b; 83 84 O_code = error_code; 85 go to Exit; 86 87 88 dcl error_code fixed bin (35); 89 90 end; 91 1 1 /* BEGIN INCLUDE vrm_com.incl.pl1 */ 1 2 1 3 /* Written 82-08-23 by R. Harvey */ 1 4 1 5 dcl vrm_com_ptr ptr; 1 6 dcl 1 vrm_com aligned based (vrm_com_ptr), 1 7 2 get_seg_ptr ptr, /* temp seg for retrieve routines */ 1 8 2 put_seg_ptr ptr, /* temp seg for store routines */ 1 9 2 mod_seg_ptr ptr, /* temp seg for modify routines */ 1 10 2 work_area_ptr ptr, /* freeing area for oid_table sections and rel_descriptors */ 1 11 2 highest_oid bit (36) aligned, /* highest valid oid */ 1 12 2 next_free_oid bit (36) aligned, /* offset of first in free chain */ 1 13 2 first_assigned_oid bit (36) aligned, /* offset of first in assigned chain */ 1 14 2 oid_area area (sys_info$max_seg_size - fixed (rel (addr (vrm_com.work_area_ptr)))); 1 15 1 16 /* END INCLUDE vrm_com.incl.pl1 */ 92 93 2 1 /* BEGIN INCLUDE vrm_open_info.incl.pl1 */ 2 2 2 3 /* R. Harvey 82-11-02 2 4* 82-09-82 Roger Lackey: added iocb_list_ptr */ 2 5 2 6 dcl 1 vrm_open_info aligned based (vrm_open_info_ptr), /* Vfile relation description */ 2 7 2 version char (8), /* Version number of this structure */ 2 8 2 opening_id bit (36) aligned, /* Opening id associated with this desc */ 2 9 2 file_uid bit (36) aligned, /* Unique id of msf dir */ 2 10 2 number_of_openings fixed bin, /* Number of separate calls to vrm$open */ 2 11 2 switches, 2 12 3 shared bit (1) unal, /* Open relation in shared mode */ 2 13 3 pad bit (35) unal init ("0"b), /* Unused must be zero */ 2 14 2 database_dir_path char (168) varying, /* Absolute path of database */ 2 15 2 relation_name char (30) varying, /* Name of relation */ 2 16 2 relation_model_ptr pointer, /* Pointer to the relation_model in the relation itself or a temp seg */ 2 17 2 com_ptr pointer, /* Temp seg for cursors and scratch space */ 2 18 2 iocb_list_ptr pointer, /* Pointer to first vrm_iocb_list_block */ 2 19 2 primary_key_info_ptr pointer, /* Special case collection info ptr */ 2 20 2 number_of_index_collections fixed bin, /* Count of index collections (include primary key) */ 2 21 2 index_collection (voi_no_of_index_collections 2 22 refer (vrm_open_info.number_of_index_collections)), 2 23 3 id bit (36), 2 24 3 info_ptr ptr unal; /* Points to more detailed info */ 2 25 2 26 2 27 dcl VRM_OPEN_INFO_VERSION_1 char (8) int static options (constant) init (" 1"); 2 28 dcl vrm_open_info_ptr ptr; 2 29 dcl voi_no_of_index_collections fixed bin; 2 30 2 31 /* END INCLUDE vrm_open_info.incl.pl1 */ 94 95 3 1 /* BEGIN INCLUDE vrm_rel_desc.incl.pl1 */ 3 2 3 3 /* 83-05-26 Roger Lackey : Added vrm_attr_info.key_head bit for relation_cursors */ 3 4 3 5 dcl 1 vrm_rel_desc based (vrm_rel_desc_ptr), 3 6 2 record_id bit (12) unal, /* Distinguish us from tuples and collection records */ 3 7 2 version char (8), /* Version of this structure */ 3 8 2 file_id bit (7), /* Value of file id from model */ 3 9 2 rel_id bit (12), /* Relation id */ 3 10 2 switches, 3 11 3 MRDS_compatible bit (1) unal, /* For pre-relation_manager_ MRDS */ 3 12 3 stationary_records 3 13 bit (1) unal, /* On = stationary */ 3 14 3 indexed bit (1) unal, /* This relation has attributes with secondary indices */ 3 15 3 pad bit (33) unal, 3 16 2 var_offset fixed bin (35), /* Position of first varying attr */ 3 17 2 maximum_data_length 3 18 fixed bin (35), /* Maximum size of tuple in characters */ 3 19 2 number_primary_key_attrs 3 20 fixed bin, /* Number of attributes which make up the primary key */ 3 21 2 number_sec_indexes fixed bin, /* Number of attributes which have a secondary index */ 3 22 2 last_var_attr_no fixed bin, /* Attr index of last varying attribute */ 3 23 2 number_var_attrs fixed bin, /* Number of varying attributes */ 3 24 2 number_attrs fixed bin, /* Number of attribute in rel */ 3 25 2 attr (vrd_no_of_attrs /* Description of each attribute */ 3 26 refer (vrm_rel_desc.number_attrs)) aligned like vrm_attr_info; 3 27 3 28 dcl 1 vrm_attr_info based (vrm_attr_info_ptr), 3 29 /* Attribute specific info */ 3 30 2 name char (32), /* Name of the attribute */ 3 31 2 descriptor bit (36) aligned, /* domain descriptor */ 3 32 2 varying bit (1) unal, /* ON = This is a varying string */ 3 33 2 key_head bit (1) unal, /* ON = This attr can be a keyhead */ 3 34 2 primary_key_attr bit (1) unal, /* ON = This is a primary key attribute */ 3 35 2 pad bit (15) unal, /* unused */ 3 36 2 index_collextion_ix fixed bin (17) unal, /* Index into vrm_open_info.index_collection array if key_head is on */ 3 37 2 bit_length fixed bin (35), /* Maximum bit length of tuple */ 3 38 2 bit_offset fixed bin (35); /* Offset in tuple if fixed, index to offset in tuple if varying */ 3 39 3 40 3 41 dcl vrm_rel_desc_ptr pointer; 3 42 dcl vrd_no_of_attrs fixed bin; 3 43 dcl VRM_REL_DESC_RECORD_ID bit (12) unal int static options (constant) init ("100000000000"b); 3 44 dcl VRM_REL_DESC_VERSION_1 char (8) int static options (constant) init (" 1"); 3 45 dcl vrm_attr_info_ptr pointer; 3 46 dcl VRM_REL_DESC_KEY char (256) varying int static options (constant) init ("@relation_description"); 3 47 3 48 /* END INCLUDE vrm_rel_desc.incl.pl1 */ 96 97 4 1 /* BEGIN INCLUDE vrm_collection_info.incl.pl1 */ 4 2 4 3 /* R. Harvey 82-11-02 */ 4 4 4 5 4 6 dcl 1 vrm_collection_info aligned based (vrm_collection_info_ptr), 4 7 /* Index collection description */ 4 8 2 record_id unal, 4 9 3 header bit (4) unal, /* collection type */ 4 10 3 id bit (8) unal, /* index id */ 4 11 2 unique bit (1) unal, 4 12 2 primary_key bit (1) unal, /* This is the MRDS primary key collection */ 4 13 2 pad bit (26) unal, 4 14 2 number_of_attributes 4 15 fixed bin, 4 16 2 attribute (vci_no_of_attributes refer (vrm_collection_info.number_of_attributes)), 4 17 3 attr_index fixed bin, /* Attribute number in relation description */ 4 18 3 key_offset fixed bin, /* Offset within key in bits */ 4 19 3 key_bit_len fixed bin ; /* Length of key in bits */ 4 20 4 21 dcl vrm_collection_info_ptr 4 22 ptr; 4 23 dcl vci_no_of_attributes fixed bin; 4 24 dcl vrm_collection_header_type 4 25 bit (4) unal int static options (constant) init ("1100"b); 4 26 dcl VRM_COLLECTION_KEY_HEAD char (16) int static options (constant) init ("@collection_info"); 4 27 4 28 /* END INCLUDE vrm_collection_info.incl.pl1 */ 98 99 5 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 5 2* 5 3* Values for the "access mode" argument so often used in hardcore 5 4* James R. Davis 26 Jan 81 MCR 4844 5 5* Added constants for SM access 4/28/82 Jay Pattin 5 6* Added text strings 03/19/85 Chris Jones 5 7**/ 5 8 5 9 5 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 5 11 dcl ( 5 12 N_ACCESS init ("000"b), 5 13 R_ACCESS init ("100"b), 5 14 E_ACCESS init ("010"b), 5 15 W_ACCESS init ("001"b), 5 16 RE_ACCESS init ("110"b), 5 17 REW_ACCESS init ("111"b), 5 18 RW_ACCESS init ("101"b), 5 19 S_ACCESS init ("100"b), 5 20 M_ACCESS init ("010"b), 5 21 A_ACCESS init ("001"b), 5 22 SA_ACCESS init ("101"b), 5 23 SM_ACCESS init ("110"b), 5 24 SMA_ACCESS init ("111"b) 5 25 ) bit (3) internal static options (constant); 5 26 5 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 5 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 5 29 5 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 5 31 static options (constant); 5 32 5 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 5 34 static options (constant); 5 35 5 36 dcl ( 5 37 N_ACCESS_BIN init (00000b), 5 38 R_ACCESS_BIN init (01000b), 5 39 E_ACCESS_BIN init (00100b), 5 40 W_ACCESS_BIN init (00010b), 5 41 RW_ACCESS_BIN init (01010b), 5 42 RE_ACCESS_BIN init (01100b), 5 43 REW_ACCESS_BIN init (01110b), 5 44 S_ACCESS_BIN init (01000b), 5 45 M_ACCESS_BIN init (00010b), 5 46 A_ACCESS_BIN init (00001b), 5 47 SA_ACCESS_BIN init (01001b), 5 48 SM_ACCESS_BIN init (01010b), 5 49 SMA_ACCESS_BIN init (01011b) 5 50 ) fixed bin (5) internal static options (constant); 5 51 5 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 100 101 102 dcl hcs_$get_uid_file entry (char (*), char (*), bit (36) aligned, fixed bin (35)); 103 dcl initiate_file_ entry (char (*), char (*), bit (*), ptr, fixed bin (24), fixed bin (35)); 104 dcl vrmu_init_rel_desc entry (char (*), char (*), bit (36) aligned, ptr, ptr, bit (36) aligned, ptr, fixed bin (35)); 105 dcl vrm_open_man$get_opening_id entry (bit (36) aligned, bit (36) aligned, ptr, ptr, fixed bin (35)); 106 dcl vrm_open_man$set_open_info_ptr entry (bit (36) aligned, ptr); 107 dcl vrm_open_man$remove_opening entry (bit (36) aligned); 108 109 dcl error_table_$noentry fixed bin (35) ext static; 110 dcl error_table_$no_s_permission fixed bin (35) ext static; 111 dcl sys_info$max_seg_size fixed bin (35) ext static; 112 113 dcl code fixed bin (35); 114 dcl dbm_ptr ptr; 115 dcl file_uid bit (36) aligned; 116 dcl fm_ptr ptr; 117 dcl new_opening bit (1) aligned; 118 dcl rel_name char (30); 119 dcl rel_model_name char (32); 120 dcl wa_ptr ptr; 121 dcl wa area based (wa_ptr); 122 123 dcl (addr, fixed, null, rel, rtrim) builtin; 124 125 end vrm_open; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1128.6 vrm_open.pl1 >spec>on>41-15>vrm_open.pl1 92 1 10/14/83 1609.1 vrm_com.incl.pl1 >ldd>include>vrm_com.incl.pl1 94 2 10/14/83 1609.1 vrm_open_info.incl.pl1 >ldd>include>vrm_open_info.incl.pl1 96 3 10/14/83 1609.1 vrm_rel_desc.incl.pl1 >ldd>include>vrm_rel_desc.incl.pl1 98 4 10/14/83 1609.1 vrm_collection_info.incl.pl1 >ldd>include>vrm_collection_info.incl.pl1 100 5 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. I_rel_dir parameter char unaligned dcl 29 set ref 7 7 43* 45* 50* 60* I_rel_name parameter char unaligned dcl 30 ref 7 7 40 O_code parameter fixed bin(35,0) dcl 32 set ref 7 7 67* 84* O_opening_id parameter bit(36) dcl 31 set ref 7 7 35* 54* 60* 63* 75* 82* R_ACCESS 000000 constant bit(3) initial unaligned dcl 5-11 set ref 43* 45* code 000104 automatic fixed bin(35,0) dcl 113 set ref 50* 51 51 51* 54* 55 55* 60* 61 61* com_ptr 74 based pointer level 2 dcl 2-6 ref 78 dbm_ptr 000106 automatic pointer dcl 114 set ref 45* 46 error_code parameter fixed bin(35,0) dcl 88 ref 71 84 error_table_$no_s_permission 000026 external static fixed bin(35,0) dcl 110 ref 51 error_table_$noentry 000024 external static fixed bin(35,0) dcl 109 set ref 46* file_uid 000110 automatic bit(36) dcl 115 set ref 50* 54* 60* fm_ptr 000112 automatic pointer dcl 116 set ref 43* 44 60* hcs_$get_uid_file 000010 constant entry external dcl 102 ref 50 initiate_file_ 000012 constant entry external dcl 103 ref 43 45 new_opening 000114 automatic bit(1) dcl 117 set ref 38* 59* 73 null builtin function dcl 123 ref 37 44 46 57 76 number_of_index_collections 102 based fixed bin(17,0) level 2 dcl 2-6 ref 79 number_of_openings 4 based fixed bin(17,0) level 2 dcl 2-6 set ref 65* 65 rel_model_name 000125 automatic char(32) unaligned dcl 119 set ref 41* 43* rel_name 000115 automatic char(30) unaligned dcl 118 set ref 40* 41 50* 60* rtrim builtin function dcl 123 ref 40 41 vrm_attr_info based structure level 1 unaligned dcl 3-28 vrm_com based structure level 1 dcl 1-6 vrm_com_ptr 000100 automatic pointer dcl 1-5 set ref 54* 60* vrm_open_info based structure level 1 dcl 2-6 set ref 79 vrm_open_info_ptr 000102 automatic pointer dcl 2-28 set ref 37* 54* 57 60* 63* 65 65 76 78 79 vrm_open_man$get_opening_id 000016 constant entry external dcl 105 ref 54 vrm_open_man$remove_opening 000022 constant entry external dcl 107 ref 75 vrm_open_man$set_open_info_ptr 000020 constant entry external dcl 106 ref 63 vrmu_init_rel_desc 000014 constant entry external dcl 104 ref 60 wa based area(1024) dcl 121 ref 79 wa_ptr 000136 automatic pointer dcl 120 set ref 78* 79 work_area_ptr 6 based pointer level 2 dcl 1-6 ref 78 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 5-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 5-33 E_ACCESS internal static bit(3) initial unaligned dcl 5-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 M_ACCESS internal static bit(3) initial unaligned dcl 5-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 N_ACCESS internal static bit(3) initial unaligned dcl 5-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 REW_ACCESS internal static bit(3) initial unaligned dcl 5-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 RE_ACCESS internal static bit(3) initial unaligned dcl 5-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 RW_ACCESS internal static bit(3) initial unaligned dcl 5-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SA_ACCESS internal static bit(3) initial unaligned dcl 5-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 5-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 5-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SM_ACCESS internal static bit(3) initial unaligned dcl 5-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 S_ACCESS internal static bit(3) initial unaligned dcl 5-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 VRM_COLLECTION_KEY_HEAD internal static char(16) initial unaligned dcl 4-26 VRM_OPEN_INFO_VERSION_1 internal static char(8) initial unaligned dcl 2-27 VRM_REL_DESC_KEY internal static varying char(256) initial dcl 3-46 VRM_REL_DESC_RECORD_ID internal static bit(12) initial unaligned dcl 3-43 VRM_REL_DESC_VERSION_1 internal static char(8) initial unaligned dcl 3-44 W_ACCESS internal static bit(3) initial unaligned dcl 5-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 addr builtin function dcl 123 fixed builtin function dcl 123 rel builtin function dcl 123 sys_info$max_seg_size external static fixed bin(35,0) dcl 111 vci_no_of_attributes automatic fixed bin(17,0) dcl 4-23 voi_no_of_index_collections automatic fixed bin(17,0) dcl 2-29 vrd_no_of_attrs automatic fixed bin(17,0) dcl 3-42 vrm_attr_info_ptr automatic pointer dcl 3-45 vrm_collection_header_type internal static bit(4) initial unaligned dcl 4-24 vrm_collection_info based structure level 1 dcl 4-6 vrm_collection_info_ptr automatic pointer dcl 4-21 vrm_rel_desc based structure level 1 unaligned dcl 3-5 vrm_rel_desc_ptr automatic pointer dcl 3-41 NAMES DECLARED BY EXPLICIT CONTEXT. Exit 000437 constant label dcl 68 ref 85 error 000440 constant entry internal dcl 71 ref 46 51 55 61 open 000023 constant entry external dcl 7 vrm_open 000046 constant entry external dcl 7 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 640 670 505 650 Length 1150 505 30 244 133 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME open 172 external procedure is an external procedure. error internal procedure shares stack frame of external procedure open. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME open 000100 vrm_com_ptr open 000102 vrm_open_info_ptr open 000104 code open 000106 dbm_ptr open 000110 file_uid open 000112 fm_ptr open 000114 new_opening open 000115 rel_name open 000125 rel_model_name open 000136 wa_ptr open THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry_desc free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. hcs_$get_uid_file initiate_file_ vrm_open_man$get_opening_id vrm_open_man$remove_opening vrm_open_man$set_open_info_ptr vrmu_init_rel_desc THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$no_s_permission error_table_$noentry LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 7 000016 35 000066 37 000070 38 000072 40 000073 41 000111 43 000137 44 000176 45 000202 46 000245 50 000260 51 000307 54 000316 55 000336 57 000342 59 000346 60 000350 61 000414 63 000420 64 000432 65 000433 67 000435 68 000437 71 000440 73 000442 75 000444 76 000454 78 000460 79 000464 82 000472 84 000474 85 000477 ----------------------------------------------------------- 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