COMPILATION LISTING OF SEGMENT rcm_modify_record_by_id Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-05-05_1828.03_Fri_mdt Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION 8* 9* Modifies the records specified by the caller. Record fields to 10* be modified are fields 1-N if a simple_typed_vector is given, or the 11* fields specified by identifier if a general_typed_vector is given. 12* The cursor is positioned to the last record modified. The parameter 13* p_number_of_records_processed contains the number of records that were 14* were succesfully modified. 15* 16* This routine always gets the record collection's opening information. 17* A later performance gain can be achieved by adding single_info and 18* array_info entry points that take pointers to opening information. 19**/ 20 21 /* HISTORY: 22*Written by Matthew Pierret 04/23/82. 23*Modified: 24*08/20/82 by Matthew Pierret: Made enter-able only by the entry points single 25* and array. Added use of rm_get_opening_info, which is in reality 26* simply the field_table. 27*10/06/82 by Matthew Pierret: Made to use dmu_$general_modify_string. 28*01/04/83 by Lindsey Spratt: Enhanced to cope with arbitrarily long records. 29*03/03/83 by Lindsey Spratt: Changed to correctly interpret buffer management 30* done by dmu_$general_modify_string. 31*03/16/83 by Matthew Pierret: Changed to receive record_collection_opening_info 32* structure from rm_get_opening_info, to translate some error codes 33* returned from collection_manager_$get_element to 34* dm_error_$record_not_found, to use dm_error_$wrong_cursor_type, 35* to use get_dm_free_area_ () and to keep the internal static 36* dm_work_area_ptr so that ony one call to get_dm_free_area need be 37* per process. Changed dm_data_area to dm_work_area. 38* Moved the record_cursor type check after the version check. 39*03/24/83 by Lindsey Spratt: Removed the field_table include file, declared 40* field_table_ptr locally. 41*07/28/83 by Matthew Pierret: Changed name from rm_modify_record_by_id to 42* rcm_modify_record_by_id, and all rm_ prefixes to rcm_. 43*04/12/84 by Lee Baldwin: Renamed the parameters to coincide with all the other 44* rcm_XX routines. 45*05/10/84 by Matthew Pierret: Changed to align record buffers on even word 46* boundaries. Removed declarations of un-used variables. Changed 47* references to data_mgmt_util_ to be to data_format_util_. 48*06/07/84 by Matthew Pierret: Re-named cm_$get_element to cm_$get, 49* cm_$put_element to cm_$modify. 50*09/27/84 by Maggie Sharpe: Cleaned up declarations; changed the call to 51* CHECK_VERSION for element_id_list to pass parameters by reference 52* instead of value. 53**/ 54 55 /* format: style2,ind3 */ 56 57 rcm_modify_record_by_id: 58 proc (); 59 60 call 61 sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, "^/^a$^a is not a valid entrypoint", 62 myname, myname); 63 64 65 /* START OF DECLARATIONS */ 66 /* Parameter */ 67 68 dcl p_record_cursor_ptr ptr; 69 dcl p_general_typed_vector_ptr 70 ptr; 71 dcl p_number_of_records_processed 72 fixed bin (35); 73 dcl p_element_id_list_ptr ptr; 74 dcl p_record_id bit (36) aligned; 75 dcl p_code fixed bin (35); 76 77 /* Automatic */ 78 79 dcl (modify_single_record, new_buffer_was_allocated) 80 bit (1) aligned init ("0"b); 81 dcl new_record_string_length 82 fixed bin (35); 83 dcl new_record_string_ptr ptr; 84 dcl number_of_records_to_modify 85 fixed bin (35); 86 dcl field_table_ptr ptr init (null); 87 dcl automatic_new_record_buffer 88 (DOUBLE_WORDS_PER_PAGE) fixed bin (71); 89 /* Forces even-word alignment */ 90 dcl automatic_old_record_buffer 91 (DOUBLE_WORDS_PER_PAGE) fixed bin (71); 92 /* Forces even-word alignment */ 93 dcl old_record_string_length 94 fixed bin (35); 95 dcl old_record_string_ptr ptr; 96 dcl record_count fixed bin (35); 97 dcl record_id bit (36) aligned; 98 dcl (old_record_buffer_ptr, new_record_buffer_ptr) 99 ptr init (null); 100 dcl ( 101 old_record_buffer_length 102 init (BITS_PER_PAGE), 103 new_record_buffer_length 104 init (BITS_PER_PAGE), 105 new_new_record_buffer_length 106 init (0) 107 ) fixed bin (35); 108 109 /* Based */ 110 111 dcl new_record_buffer bit (new_record_buffer_length) based (new_record_buffer_ptr); 112 dcl old_record_buffer bit (old_record_buffer_length) based (old_record_buffer_ptr); 113 dcl dm_work_area area based (dm_work_area_ptr); 114 115 /* Builtin */ 116 117 dcl (addr, null) builtin; 118 119 /* Condition */ 120 121 dcl cleanup condition; 122 123 /* Constant */ 124 125 dcl BITS_PER_PAGE init (1024 * 36) fixed bin internal static options (constant); 126 dcl DOUBLE_WORDS_PER_PAGE init (512) fixed bin internal static options (constant); 127 dcl myname init ("rcm_modify_record_by_id") char (32) varying internal static 128 options (constant); 129 130 /* Entry */ 131 132 dcl rcm_get_opening_info entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35)); 133 dcl data_format_util_$general_modify_string 134 entry (ptr, ptr, ptr, fixed bin (35), ptr, fixed bin (35), ptr, ptr, fixed bin (35), 135 fixed bin (35), fixed bin (35)); 136 dcl get_dm_free_area_ entry () returns (ptr); 137 dcl sub_err_ entry () options (variable); 138 139 /* External */ 140 141 dcl ( 142 dm_error_$programming_error, 143 dm_error_$record_not_found, 144 dm_error_$wrong_cursor_type 145 ) ext fixed bin (35); 146 dcl error_table_$unimplemented_version 147 ext fixed bin (35); 148 149 /* Static */ 150 151 dcl dm_work_area_ptr ptr internal static init (null); 152 153 /* END OF DECLARATIONS */ 154 155 single: 156 entry (p_record_id, p_general_typed_vector_ptr, p_record_cursor_ptr, p_code); 157 158 modify_single_record = "1"b; 159 number_of_records_to_modify = 1; 160 161 goto JOIN; 162 163 164 array: 165 entry (p_element_id_list_ptr, p_general_typed_vector_ptr, p_record_cursor_ptr, p_number_of_records_processed, p_code); 166 167 modify_single_record = "0"b; 168 p_number_of_records_processed = 0; 169 170 element_id_list_ptr = p_element_id_list_ptr; 171 172 call CHECK_VERSION (element_id_list.version, ELEMENT_ID_LIST_VERSION_1, "element_id_list"); 173 174 number_of_records_to_modify = element_id_list.number_of_elements; 175 176 goto JOIN; 177 178 179 JOIN: 180 p_code = 0; 181 182 record_cursor_ptr = p_record_cursor_ptr; 183 184 if record_cursor.type ^= RECORD_CURSOR_TYPE 185 then call 186 sub_err_ (dm_error_$wrong_cursor_type, myname, ACTION_CANT_RESTART, null, 0, 187 "^/Expected record cursor, type ^d; received type ^d.", RECORD_CURSOR_TYPE, record_cursor.type); 188 189 call CHECK_VERSION ((record_cursor.version), (RECORD_CURSOR_VERSION_2), "record_cursor"); 190 191 general_typed_vector_ptr = p_general_typed_vector_ptr; 192 193 call CHECK_VERSION ((general_typed_vector.type), (GENERAL_TYPED_VECTOR_TYPE), "general_typed_vector"); 194 195 196 call 197 rcm_get_opening_info (record_cursor.file_opening_id, record_cursor.collection_id, 198 record_collection_opening_info_ptr, p_code); 199 if p_code ^= 0 200 then return; 201 202 call 203 CHECK_VERSION_CHAR_8 (record_collection_opening_info.version, RECORD_COLLECTION_OPENING_INFO_VERSION_1, 204 "record_collection_opening_info"); 205 206 field_table_ptr = record_collection_opening_info.field_table_ptr; 207 208 old_record_buffer_ptr = addr (automatic_old_record_buffer); 209 new_record_buffer_ptr = addr (automatic_new_record_buffer); 210 211 if dm_work_area_ptr = null 212 then dm_work_area_ptr = get_dm_free_area_ (); 213 214 on cleanup call FINISH; 215 216 RECORD_LOOP: 217 do record_count = 1 to number_of_records_to_modify; 218 219 if modify_single_record 220 then record_id = p_record_id; 221 else record_id = element_id_list.id (record_count); 222 223 224 call 225 collection_manager_$get (record_cursor.file_opening_id, record_cursor.collection_id, record_id, 0, 226 old_record_buffer_ptr, old_record_buffer_length, dm_work_area_ptr, new_buffer_was_allocated, 227 old_record_string_ptr, old_record_string_length, p_code); 228 if p_code ^= 0 229 then call GET_ELEMENT_ERROR_RETURN (p_code); 230 231 if new_buffer_was_allocated 232 then 233 do; 234 if old_record_buffer_ptr ^= addr (automatic_old_record_buffer) & old_record_buffer_ptr ^= null 235 then free old_record_buffer in (dm_work_area); 236 old_record_buffer_ptr = old_record_string_ptr; 237 old_record_buffer_length = old_record_string_length; 238 end; 239 240 call 241 data_format_util_$general_modify_string (field_table_ptr, general_typed_vector_ptr, old_record_string_ptr, 242 old_record_string_length, new_record_buffer_ptr, new_record_buffer_length, dm_work_area_ptr, 243 new_record_string_ptr, new_record_string_length, new_new_record_buffer_length, p_code); 244 if p_code ^= 0 245 then call ERROR_RETURN (); 246 247 if new_new_record_buffer_length > 0 /* Only true if a new buffer was allocated. */ 248 then 249 do; 250 if new_record_buffer_ptr ^= addr (automatic_new_record_buffer) 251 then free new_record_buffer in (dm_work_area); 252 new_record_buffer_ptr = new_record_string_ptr; 253 new_record_buffer_length = new_new_record_buffer_length; 254 end; 255 call 256 collection_manager_$modify (record_cursor.file_opening_id, record_cursor.collection_id, new_record_string_ptr, 257 new_record_string_length, record_id, (0), p_code); 258 if p_code ^= 0 259 then call ERROR_RETURN (); 260 261 end RECORD_LOOP; 262 263 record_cursor.record_id = record_id; 264 record_cursor.flags.position_is_valid = "1"b; 265 266 call FINISH (); 267 268 MAIN_RETURN: 269 return; 270 271 272 CHECK_VERSION: 273 proc (p_received_version, p_expected_version, p_structure_name); 274 275 dcl p_received_version fixed bin (35); 276 dcl p_expected_version fixed bin (35); 277 dcl p_structure_name char (*); 278 279 if p_received_version ^= p_expected_version 280 then call 281 sub_err_ (error_table_$unimplemented_version, myname, ACTION_CANT_RESTART, null, 0, 282 "^/Expected version ^d of the ^a structure. 283 Received version ^d, instead.", p_expected_version, p_structure_name, p_received_version); 284 285 end CHECK_VERSION; 286 287 288 CHECK_VERSION_CHAR_8: 289 proc (p_given_version, p_correct_version, p_structure_name); 290 291 dcl p_structure_name char (*); 292 dcl p_given_version char (8) aligned; 293 dcl p_correct_version char (8) aligned; 294 295 if p_given_version ^= p_correct_version 296 then call 297 sub_err_ (error_table_$unimplemented_version, myname, ACTION_CANT_RESTART, null, 0, 298 "^/Expected version ""^8a"" of ^a structure; received ""^8a"".", p_correct_version, p_structure_name, 299 p_given_version); 300 301 return; 302 303 end CHECK_VERSION_CHAR_8; 304 305 FINISH: 306 proc (); 307 308 if ^modify_single_record 309 then p_number_of_records_processed = record_count - 1; 310 311 if old_record_buffer_ptr ^= addr (automatic_old_record_buffer) & old_record_buffer_ptr ^= null 312 then free old_record_buffer in (dm_work_area); 313 314 if new_record_buffer_ptr ^= addr (automatic_new_record_buffer) & new_record_buffer_ptr ^= null 315 then free new_record_buffer in (dm_work_area); 316 317 end FINISH; 318 319 320 ERROR_RETURN: 321 proc (); 322 323 call FINISH (); 324 goto MAIN_RETURN; 325 326 end ERROR_RETURN; 327 328 329 GET_ELEMENT_ERROR_RETURN: 330 proc (p_code); 331 332 dcl p_code fixed bin (35); 333 dcl ( 334 dm_error_$ci_not_allocated, 335 dm_error_$ci_not_in_collection, 336 dm_error_$no_element 337 ) fixed bin (35) ext; 338 339 if p_code = dm_error_$no_element 340 then p_code = dm_error_$record_not_found; 341 if p_code = dm_error_$ci_not_in_collection 342 then p_code = dm_error_$record_not_found; 343 if p_code = dm_error_$ci_not_allocated 344 then p_code = dm_error_$record_not_found; 345 346 call ERROR_RETURN; 347 348 end GET_ELEMENT_ERROR_RETURN; 349 1 1 /* BEGIN INCLUDE FILE - dm_rcm_cursor.incl.pl1 */ 1 2 1 3 /* HISTORY: 1 4*Written by Matthew Pierret, 04/05/82. 1 5*Modified: 1 6*08/19/82 by Matthew Pierret: Version 2. Changed collection_id to 1 7* bit (36) aligned. 1 8*07/28/83 by Matthew Pierret: Changed name from dm_rm_cursor.incl.pl1 to 1 9* dm_rcm_cursor.incl.pl1. 1 10*04/13/84 by Lee Baldwin: Renamed pf_opening_id to file_opening_id to coincide 1 11* with the naming conventions used in the rcm_XX routines. 1 12**/ 1 13 1 14 /* format: style2,ind3 */ 1 15 dcl 1 record_cursor aligned based (record_cursor_ptr), 1 16 2 type fixed bin (17) unaligned, 1 17 2 version fixed bin (17) unaligned, 1 18 2 flags, 1 19 3 position_is_valid 1 20 bit (1) unal, 1 21 3 pad bit (35) unal, 1 22 2 area_ptr ptr, 1 23 2 file_opening_id bit (36) aligned, 1 24 2 collection_id bit (36) aligned, 1 25 2 record_id bit (36) aligned, 1 26 2 record_check_value bit (36) aligned; 1 27 1 28 dcl record_cursor_ptr ptr; 1 29 dcl RECORD_CURSOR_VERSION_2 1 30 init (2) fixed bin int static options (constant); 1 31 dcl RECORD_CURSOR_TYPE init (1) fixed bin int static options (constant); 1 32 dcl BEGINNING_OF_COLLECTION_RECORD_ID 1 33 init ("0"b) bit (36) aligned int static options (constant); 1 34 1 35 /* END INCLUDE FILE - dm_rcm_cursor.incl.pl1 */ 350 351 2 1 /* BEGIN INCLUDE FILE dm_rcm_opening_info.incl.pl1 */ 2 2 2 3 /* HISTORY: 2 4*Written by Matthew Pierret, 03/15/83. 2 5*Modified: 2 6*07/28/83 by Matthew Pierret: Changed name from dm_rm_opening_info.incl.pl1 to 2 7* dm_rcm_opening_info.incl.pl1. 2 8**/ 2 9 2 10 /* format: style2,ind3 */ 2 11 dcl 1 record_collection_opening_info 2 12 aligned based (record_collection_opening_info_ptr), 2 13 2 version char (8) aligned init (RECORD_COLLECTION_OPENING_INFO_VERSION_1), 2 14 2 current_transaction_id 2 15 bit (36) aligned init ("0"b), 2 16 2 current_rollback_count 2 17 fixed bin (35) init (0), 2 18 2 file_opening_id bit (36) aligned init ("0"b), 2 19 2 collection_id bit (36) aligned init ("0"b), 2 20 2 field_table_ptr ptr init (null); 2 21 2 22 dcl record_collection_opening_info_ptr 2 23 ptr init (null); 2 24 dcl RECORD_COLLECTION_OPENING_INFO_VERSION_1 2 25 char (8) aligned init ("rc_open1") internal static options (constant); 2 26 2 27 /* BEGIN INCLUDE FILE dm_rcm_opening_info.incl.pl1 */ 352 353 3 1 /* BEGIN INCLUDE FILE - dm_element_id_list.incl.pl1 */ 3 2 3 3 /* DESCRIPTION: 3 4* The element_id_list structure contains an array of element 3 5* identifiers. These identifiers are used as tuple, record or 3 6* element identifiers. This structure is used across the relation_manager_, 3 7* record_manager_ and index_manager_ interfaces. At some time the 3 8* version should be changed to be char(8)aligned, when such a conversion 3 9* can be coordinated with the other structures used at these interfaces. 3 10**/ 3 11 3 12 /* HISTORY: 3 13*Written by Matthew Pierret, 06/06/82. 3 14*Modified: 3 15*12/16/82 by Roger Lackey: Changed number_of_elements to fixed bin (35). 3 16* Did not change version. 3 17*02/11/85 by Matthew Pierret: Added DESCRIPTION, Written by. 3 18**/ 3 19 3 20 /* format: style2,ind3 */ 3 21 dcl 1 element_id_list aligned based (element_id_list_ptr), 3 22 2 version fixed bin (35), 3 23 2 number_of_elements fixed bin (35), 3 24 2 id (eil_number_of_elements refer (element_id_list.number_of_elements)) bit (36) aligned; 3 25 3 26 dcl element_id_list_ptr ptr; 3 27 dcl eil_number_of_elements fixed bin (35); 3 28 dcl ELEMENT_ID_LIST_VERSION_1 3 29 init (1) fixed bin (35); 3 30 3 31 3 32 /* END INCLUDE FILE - dm_element_id_list.incl.pl1 */ 354 355 4 1 /* *********************************************************** 4 2* * * 4 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4 4* * * 4 5* *********************************************************** */ 4 6 /* BEGIN INCLUDE FILE - vu_typed_vector.incl.pl1 */ 4 7 4 8 /* Written by Lindsey Spratt, 04/02/82. 4 9*Modified: 4 10*09/01/82 by Lindsey Spratt: Changed value_ptr in simple_typed_vector to be 4 11* unaligned. Changed the type number of the simple_typed_vector to 4 12* "3" from "1". The OLD_SIMPLE_TYPED_VECTOR_TYPE is now an invalid 4 13* type. 4 14**/ 4 15 4 16 /* format: style2,ind3 */ 4 17 dcl 1 simple_typed_vector based (simple_typed_vector_ptr), 4 18 2 type fixed bin (17) unal, 4 19 2 number_of_dimensions 4 20 fixed bin (17) unal, 4 21 2 dimension (stv_number_of_dimensions refer (simple_typed_vector.number_of_dimensions)), 4 22 3 value_ptr ptr unaligned; 4 23 4 24 dcl 1 general_typed_vector based (general_typed_vector_ptr), 4 25 2 type fixed bin (17) unal, 4 26 2 number_of_dimensions 4 27 fixed bin (17) unal, 4 28 2 dimension (gtv_number_of_dimensions refer (general_typed_vector.number_of_dimensions)), 4 29 3 identifier fixed bin (17) unal, 4 30 3 pad bit (18) unal, 4 31 3 value_ptr ptr unal; 4 32 4 33 dcl simple_typed_vector_ptr 4 34 ptr; 4 35 dcl stv_number_of_dimensions 4 36 fixed bin (17); 4 37 4 38 dcl general_typed_vector_ptr 4 39 ptr; 4 40 dcl gtv_number_of_dimensions 4 41 fixed bin (17); 4 42 4 43 dcl ( 4 44 OLD_SIMPLE_TYPED_VECTOR_TYPE 4 45 init (1), /* value_ptr was aligned. */ 4 46 GENERAL_TYPED_VECTOR_TYPE 4 47 init (2), 4 48 SIMPLE_TYPED_VECTOR_TYPE 4 49 init (3) 4 50 ) fixed bin (17) internal static options (constant); 4 51 4 52 /* END INCLUDE FILE - vu_typed_vector.incl.pl1 */ 356 357 5 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 5 2 /* format: style3 */ 5 3 5 4 /* These constants are to be used for the flags argument of sub_err_ */ 5 5 /* They are just "string (condition_info_header.action_flags)" */ 5 6 5 7 declare ( 5 8 ACTION_CAN_RESTART init (""b), 5 9 ACTION_CANT_RESTART init ("1"b), 5 10 ACTION_DEFAULT_RESTART 5 11 init ("01"b), 5 12 ACTION_QUIET_RESTART 5 13 init ("001"b), 5 14 ACTION_SUPPORT_SIGNAL 5 15 init ("0001"b) 5 16 ) bit (36) aligned internal static options (constant); 5 17 5 18 /* End include file */ 358 359 6 1 /* BEGIN INCLUDE FILE dm_collmgr_entry_dcls.incl.pl1 */ 6 2 6 3 /* DESCRIPTION: 6 4* This include file contains declarations of all collection_manager_ 6 5* entrypoints. 6 6**/ 6 7 6 8 /* HISTORY: 6 9*Written by Matthew Pierret 6 10*Modified: 6 11*04/14/82 by Lindsey Spratt: Changed the control_interval_id parameter of the 6 12* allocate_control_interval operation to be unaligned, as well as 6 13* unsigned. 6 14*06/17/82 by Matthew Pierret: Added the put_element_portion opertion and 6 15* removed the beginning_location parameter from the put_element 6 16* operation. Added the create_page_file_operation. 6 17*08/09/82 by Matthew Pierret: Changed "fixed bin (17)"s to "bit (36) aligned"s 6 18* wherever collection_id was required. 6 19* Also changed the control_interval_id parameter of the 6 20* allocate_control_interval operation back to be aligned. So there. 6 21*10/20/82 by Matthew Pierret: Changed $create_page_file to $create_file, 6 22* added the argument file_create_info_ptr to $create_file. 6 23*12/13/82 by Lindsey Spratt: Corrected $free_control_interval to 6 24* include the zero_on_free bit. 6 25*12/17/82 by Matthew Pierret: Added cm_$get_id. 6 26*01/07/83 by Matthew Pierret: Added cm_$put_element_buffered, 6 27* cm_$allocate_element_buffered, cm_$free_element_buffered. 6 28*04/27/83 by Matthew Pierret: Added cm_$put_unprotected_element, 6 29* cm_$put_unprotected_header. 6 30*11/07/83 by Matthew Pierret: Added $get_element_portion_buffered, 6 31* $simple_get_buffered_element. 6 32*02/08/84 by Matthew Pierret: Changed $get_id to have only one bit(1)aligned 6 33* parameter for specifying absolute/relative nature of search. 6 34*03/16/84 by Matthew Pierret: Added cm_$get_control_interval_ptr, 6 35* $get_element_ptr, $get_element_portion_ptr, $simple_get_element_ptr 6 36*04/03/84 by Matthew Pierret: Added cm_$compact_control_interval. 6 37*06/06/84 by Matthew Pierret: Re-named free_element* to delete and 6 38* delete_from_ci_buffer. 6 39* Re-named *_buffered_ci to =_ci_buffer. 6 40* get entries. 6 41* modify entries. 6 42* Changed calling sequence of modify entries to have a ptr/length 6 43* instead of length/ptr parameter pair. 6 44*03/11/85 by R. Michael Tague: Added $postcommit_increments. 6 45**/ 6 46 6 47 /* This include file contains declarations of collection_manager_ entrypoints */ 6 48 6 49 /* format: style2,ind3 */ 6 50 dcl collection_manager_$allocate_control_interval 6 51 entry (bit (36) aligned, bit (36) aligned, fixed bin (24) unsigned, fixed bin (35)); 6 52 dcl collection_manager_$compact_control_interval 6 53 entry (bit (36) aligned, fixed bin (24) uns, fixed bin (35)); 6 54 dcl collection_manager_$create_collection 6 55 entry (bit (36) aligned, ptr, ptr, bit (36) aligned, fixed bin (35)); 6 56 dcl collection_manager_$create_file 6 57 entry (char (*), char (*), ptr, bit (36) aligned, fixed bin (35)); 6 58 dcl collection_manager_$destroy_collection 6 59 entry (bit (36) aligned, bit (36) aligned, fixed bin (35)); 6 60 dcl collection_manager_$free_control_interval 6 61 entry (bit (36) aligned, bit (36) aligned, fixed bin (24) unsigned, bit (1) aligned, 6 62 fixed bin (35)); 6 63 6 64 dcl collection_manager_$delete 6 65 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, bit (1) aligned, 6 66 fixed bin (35)); 6 67 dcl collection_manager_$delete_from_ci_buffer 6 68 entry (ptr, bit (36) aligned, bit (36) aligned, bit (36) aligned, bit (1) aligned, 6 69 fixed bin (35)); 6 70 6 71 dcl collection_manager_$get 6 72 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin (17), ptr, 6 73 fixed bin (35), ptr, bit (1) aligned, ptr, fixed bin (35), fixed bin (35)); 6 74 dcl collection_manager_$get_control_interval_ptr 6 75 entry (bit (36) aligned, bit (36) aligned, fixed bin (24) unsigned, ptr, 6 76 fixed bin (35)); 6 77 dcl collection_manager_$get_from_ci_buffer 6 78 entry (ptr, bit (36) aligned, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), 6 79 ptr, bit (1) aligned, ptr, fixed bin (35), fixed bin (35)); 6 80 dcl collection_manager_$get_by_ci_ptr 6 81 entry (ptr, bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin, ptr, 6 82 fixed bin (35), ptr, bit (1) aligned, ptr, fixed bin (35), ptr, fixed bin (35)); 6 83 dcl collection_manager_$get_header 6 84 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (17), ptr, bit (1) aligned, 6 85 ptr, fixed bin (35), fixed bin (35)); 6 86 dcl collection_manager_$get_id 6 87 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin (17), 6 88 bit (1) aligned, bit (36) aligned, fixed bin (35)); 6 89 dcl collection_manager_$get_portion 6 90 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin, ptr, 6 91 fixed bin (35), ptr, fixed bin (35), fixed bin (35), bit (1) aligned, ptr, 6 92 fixed bin (35), fixed bin (35)); 6 93 dcl collection_manager_$get_portion_from_ci_buffer 6 94 entry (ptr, bit (36) aligned, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), 6 95 ptr, fixed bin (35), fixed bin (35), bit (1) aligned, ptr, fixed bin (35), 6 96 fixed bin (35)); 6 97 dcl collection_manager_$get_portion_by_ci_ptr 6 98 entry (ptr, bit (36) aligned, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), 6 99 ptr, fixed bin (35), fixed bin (35), bit (1) aligned, ptr, fixed bin (35), 6 100 fixed bin (35)); 6 101 dcl collection_manager_$modify 6 102 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 103 fixed bin (35), fixed bin (35)); 6 104 dcl collection_manager_$modify_unprotected 6 105 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 106 fixed bin (35), fixed bin (35)); 6 107 dcl collection_manager_$modify_in_ci_buffer 6 108 entry (ptr, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 109 fixed bin (35), fixed bin (35)); 6 110 dcl collection_manager_$modify_portion 6 111 entry (bit (36) aligned, bit (36) aligned, fixed bin (35), fixed bin (35), ptr, 6 112 fixed bin (35), bit (36) aligned, fixed bin (35), fixed bin (35)); 6 113 dcl collection_manager_$postcommit_increments 6 114 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35)); 6 115 dcl collection_manager_$put 6 116 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 117 fixed bin (35), fixed bin (35)); 6 118 dcl collection_manager_$put_in_ci_buffer 6 119 entry (ptr, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 120 fixed bin (35), fixed bin (35)); 6 121 dcl collection_manager_$put_header 6 122 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), fixed bin (35)); 6 123 dcl collection_manager_$put_unprotected_header 6 124 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), fixed bin (35)); 6 125 6 126 dcl collection_manager_$replace_ci_buffer 6 127 entry (bit (36) aligned, bit (36) aligned, fixed bin (24) uns, ptr, fixed bin (35), 6 128 fixed bin (35)); 6 129 dcl collection_manager_$setup_ci_buffer 6 130 entry (bit (36) aligned, bit (36) aligned, fixed bin (24) uns, ptr, fixed bin (35), 6 131 fixed bin (35)); 6 132 dcl collection_manager_$simple_get_by_ci_ptr 6 133 entry (ptr, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), fixed bin (35), 6 134 fixed bin (35)); 6 135 dcl collection_manager_$simple_get_from_ci_buffer 6 136 entry (ptr, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), fixed bin (35), 6 137 fixed bin (35)); 6 138 6 139 /* END INCLUDE FILE dm_collmgr_entry_dcls.incl.pl1 */ 360 361 362 end rcm_modify_record_by_id; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/05/00 1828.0 rcm_modify_record_by_id.pl1 >udd>sm>ds>w>ml>rcm_modify_record_by_id.pl1 350 1 01/07/85 0959.4 dm_rcm_cursor.incl.pl1 >ldd>incl>dm_rcm_cursor.incl.pl1 352 2 01/07/85 0959.4 dm_rcm_opening_info.incl.pl1 >ldd>incl>dm_rcm_opening_info.incl.pl1 354 3 03/06/85 1131.5 dm_element_id_list.incl.pl1 >ldd>incl>dm_element_id_list.incl.pl1 356 4 10/14/83 1709.1 vu_typed_vector.incl.pl1 >ldd>incl>vu_typed_vector.incl.pl1 358 5 04/16/82 1058.1 sub_err_flags.incl.pl1 >ldd>incl>sub_err_flags.incl.pl1 360 6 04/05/85 1024.4 dm_collmgr_entry_dcls.incl.pl1 >ldd>incl>dm_collmgr_entry_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. ACTION_CANT_RESTART 000026 constant bit(36) initial dcl 5-7 set ref 60* 184* 279* 295* BITS_PER_PAGE constant fixed bin(17,0) initial dcl 125 ref 100 100 DOUBLE_WORDS_PER_PAGE constant fixed bin(17,0) initial dcl 126 ref 87 90 ELEMENT_ID_LIST_VERSION_1 000144 automatic fixed bin(35,0) initial dcl 3-28 set ref 172* 3-28* GENERAL_TYPED_VECTOR_TYPE constant fixed bin(17,0) initial dcl 4-43 ref 193 RECORD_COLLECTION_OPENING_INFO_VERSION_1 000000 constant char(8) initial dcl 2-24 set ref 202* RECORD_CURSOR_TYPE 000033 constant fixed bin(17,0) initial dcl 1-31 set ref 184 184* RECORD_CURSOR_VERSION_2 constant fixed bin(17,0) initial dcl 1-29 ref 189 addr builtin function dcl 117 ref 208 209 234 250 311 314 automatic_new_record_buffer 000112 automatic fixed bin(71,0) array dcl 87 set ref 209 250 314 automatic_old_record_buffer 000112 automatic fixed bin(71,0) array dcl 90 set ref 208 234 311 cleanup 000130 stack reference condition dcl 121 ref 214 collection_id 5 based bit(36) level 2 dcl 1-15 set ref 196* 224* 255* collection_manager_$get 000032 constant entry external dcl 6-71 ref 224 collection_manager_$modify 000034 constant entry external dcl 6-101 ref 255 data_format_util_$general_modify_string 000014 constant entry external dcl 133 ref 240 dm_error_$ci_not_allocated 000036 external static fixed bin(35,0) dcl 333 ref 343 dm_error_$ci_not_in_collection 000040 external static fixed bin(35,0) dcl 333 ref 341 dm_error_$no_element 000042 external static fixed bin(35,0) dcl 333 ref 339 dm_error_$programming_error 000022 external static fixed bin(35,0) dcl 141 set ref 60* dm_error_$record_not_found 000024 external static fixed bin(35,0) dcl 141 ref 339 341 343 dm_error_$wrong_cursor_type 000026 external static fixed bin(35,0) dcl 141 set ref 184* dm_work_area based area(1024) dcl 113 ref 234 250 311 314 dm_work_area_ptr 000010 internal static pointer initial dcl 151 set ref 211 211* 224* 234 240* 250 311 314 element_id_list based structure level 1 dcl 3-21 element_id_list_ptr 000142 automatic pointer dcl 3-26 set ref 170* 172 174 221 error_table_$unimplemented_version 000030 external static fixed bin(35,0) dcl 146 set ref 279* 295* field_table_ptr 000110 automatic pointer initial dcl 86 in procedure "rcm_modify_record_by_id" set ref 86* 206* 240* field_table_ptr 6 based pointer initial level 2 in structure "record_collection_opening_info" dcl 2-11 in procedure "rcm_modify_record_by_id" ref 206 file_opening_id 4 based bit(36) level 2 dcl 1-15 set ref 196* 224* 255* flags 1 based structure level 2 dcl 1-15 general_typed_vector based structure level 1 packed packed unaligned dcl 4-24 general_typed_vector_ptr 000146 automatic pointer dcl 4-38 set ref 191* 193 240* get_dm_free_area_ 000016 constant entry external dcl 136 ref 211 id 2 based bit(36) array level 2 dcl 3-21 ref 221 modify_single_record 000100 automatic bit(1) initial dcl 79 set ref 79* 158* 167* 219 308 myname 000002 constant varying char(32) initial dcl 127 set ref 60* 60* 60* 184* 279* 295* new_buffer_was_allocated 000101 automatic bit(1) initial dcl 79 set ref 79* 224* 231 new_new_record_buffer_length 000126 automatic fixed bin(35,0) initial dcl 100 set ref 100* 240* 247 253 new_record_buffer based bit packed unaligned dcl 111 ref 250 314 new_record_buffer_length 000125 automatic fixed bin(35,0) initial dcl 100 set ref 100* 240* 250 250 253* 314 314 new_record_buffer_ptr 000122 automatic pointer initial dcl 98 set ref 98* 209* 240* 250 250 252* 314 314 314 new_record_string_length 000102 automatic fixed bin(35,0) dcl 81 set ref 240* 255* new_record_string_ptr 000104 automatic pointer dcl 83 set ref 240* 252 255* null builtin function dcl 117 ref 60 60 86 98 98 184 184 211 234 2-22 279 279 295 295 311 314 number_of_elements 1 based fixed bin(35,0) level 2 dcl 3-21 ref 174 number_of_records_to_modify 000106 automatic fixed bin(35,0) dcl 84 set ref 159* 174* 216 old_record_buffer based bit packed unaligned dcl 112 ref 234 311 old_record_buffer_length 000124 automatic fixed bin(35,0) initial dcl 100 set ref 100* 224* 234 234 237* 311 311 old_record_buffer_ptr 000120 automatic pointer initial dcl 98 set ref 98* 208* 224* 234 234 234 236* 311 311 311 old_record_string_length 000112 automatic fixed bin(35,0) dcl 93 set ref 224* 237 240* old_record_string_ptr 000114 automatic pointer dcl 95 set ref 224* 236 240* p_code parameter fixed bin(35,0) dcl 75 in procedure "rcm_modify_record_by_id" set ref 155 164 179* 196* 199 224* 228 228* 240* 244 255* 258 p_code parameter fixed bin(35,0) dcl 332 in procedure "GET_ELEMENT_ERROR_RETURN" set ref 329 339 339* 341 341* 343 343* p_correct_version parameter char(8) dcl 293 set ref 288 295 295* p_element_id_list_ptr parameter pointer dcl 73 ref 164 170 p_expected_version parameter fixed bin(35,0) dcl 276 set ref 272 279 279* p_general_typed_vector_ptr parameter pointer dcl 69 ref 155 164 191 p_given_version parameter char(8) dcl 292 set ref 288 295 295* p_number_of_records_processed parameter fixed bin(35,0) dcl 71 set ref 164 168* 308* p_received_version parameter fixed bin(35,0) dcl 275 set ref 272 279 279* p_record_cursor_ptr parameter pointer dcl 68 ref 155 164 182 p_record_id parameter bit(36) dcl 74 ref 155 219 p_structure_name parameter char packed unaligned dcl 277 in procedure "CHECK_VERSION" set ref 272 279* p_structure_name parameter char packed unaligned dcl 291 in procedure "CHECK_VERSION_CHAR_8" set ref 288 295* position_is_valid 1 based bit(1) level 3 packed packed unaligned dcl 1-15 set ref 264* rcm_get_opening_info 000012 constant entry external dcl 132 ref 196 record_collection_opening_info based structure level 1 dcl 2-11 record_collection_opening_info_ptr 000140 automatic pointer initial dcl 2-22 set ref 196* 202 206 2-22* record_count 000116 automatic fixed bin(35,0) dcl 96 set ref 216* 221* 308 record_cursor based structure level 1 dcl 1-15 record_cursor_ptr 000136 automatic pointer dcl 1-28 set ref 182* 184 184 189 196 196 224 224 255 255 263 264 record_id 6 based bit(36) level 2 in structure "record_cursor" dcl 1-15 in procedure "rcm_modify_record_by_id" set ref 263* record_id 000117 automatic bit(36) dcl 97 in procedure "rcm_modify_record_by_id" set ref 219* 221* 224* 255* 263 sub_err_ 000020 constant entry external dcl 137 ref 60 184 279 295 type based fixed bin(17,0) level 2 in structure "record_cursor" packed packed unaligned dcl 1-15 in procedure "rcm_modify_record_by_id" set ref 184 184* type based fixed bin(17,0) level 2 in structure "general_typed_vector" packed packed unaligned dcl 4-24 in procedure "rcm_modify_record_by_id" ref 193 version based char(8) initial level 2 in structure "record_collection_opening_info" dcl 2-11 in procedure "rcm_modify_record_by_id" set ref 202* version 0(18) based fixed bin(17,0) level 2 in structure "record_cursor" packed packed unaligned dcl 1-15 in procedure "rcm_modify_record_by_id" ref 189 version based fixed bin(35,0) level 2 in structure "element_id_list" dcl 3-21 in procedure "rcm_modify_record_by_id" set ref 172* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 5-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 5-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 5-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 5-7 BEGINNING_OF_COLLECTION_RECORD_ID internal static bit(36) initial dcl 1-32 OLD_SIMPLE_TYPED_VECTOR_TYPE internal static fixed bin(17,0) initial dcl 4-43 SIMPLE_TYPED_VECTOR_TYPE internal static fixed bin(17,0) initial dcl 4-43 collection_manager_$allocate_control_interval 000000 constant entry external dcl 6-50 collection_manager_$compact_control_interval 000000 constant entry external dcl 6-52 collection_manager_$create_collection 000000 constant entry external dcl 6-54 collection_manager_$create_file 000000 constant entry external dcl 6-56 collection_manager_$delete 000000 constant entry external dcl 6-64 collection_manager_$delete_from_ci_buffer 000000 constant entry external dcl 6-67 collection_manager_$destroy_collection 000000 constant entry external dcl 6-58 collection_manager_$free_control_interval 000000 constant entry external dcl 6-60 collection_manager_$get_by_ci_ptr 000000 constant entry external dcl 6-80 collection_manager_$get_control_interval_ptr 000000 constant entry external dcl 6-74 collection_manager_$get_from_ci_buffer 000000 constant entry external dcl 6-77 collection_manager_$get_header 000000 constant entry external dcl 6-83 collection_manager_$get_id 000000 constant entry external dcl 6-86 collection_manager_$get_portion 000000 constant entry external dcl 6-89 collection_manager_$get_portion_by_ci_ptr 000000 constant entry external dcl 6-97 collection_manager_$get_portion_from_ci_buffer 000000 constant entry external dcl 6-93 collection_manager_$modify_in_ci_buffer 000000 constant entry external dcl 6-107 collection_manager_$modify_portion 000000 constant entry external dcl 6-110 collection_manager_$modify_unprotected 000000 constant entry external dcl 6-104 collection_manager_$postcommit_increments 000000 constant entry external dcl 6-113 collection_manager_$put 000000 constant entry external dcl 6-115 collection_manager_$put_header 000000 constant entry external dcl 6-121 collection_manager_$put_in_ci_buffer 000000 constant entry external dcl 6-118 collection_manager_$put_unprotected_header 000000 constant entry external dcl 6-123 collection_manager_$replace_ci_buffer 000000 constant entry external dcl 6-126 collection_manager_$setup_ci_buffer 000000 constant entry external dcl 6-129 collection_manager_$simple_get_by_ci_ptr 000000 constant entry external dcl 6-132 collection_manager_$simple_get_from_ci_buffer 000000 constant entry external dcl 6-135 eil_number_of_elements automatic fixed bin(35,0) dcl 3-27 gtv_number_of_dimensions automatic fixed bin(17,0) dcl 4-40 simple_typed_vector based structure level 1 packed packed unaligned dcl 4-17 simple_typed_vector_ptr automatic pointer dcl 4-33 stv_number_of_dimensions automatic fixed bin(17,0) dcl 4-35 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_VERSION 001067 constant entry internal dcl 272 ref 172 189 193 CHECK_VERSION_CHAR_8 001163 constant entry internal dcl 288 ref 202 ERROR_RETURN 001346 constant entry internal dcl 320 ref 244 258 346 FINISH 001266 constant entry internal dcl 305 ref 214 266 323 GET_ELEMENT_ERROR_RETURN 001354 constant entry internal dcl 329 ref 228 JOIN 000372 constant label dcl 179 ref 161 176 MAIN_RETURN 001066 constant label dcl 268 set ref 324 RECORD_LOOP 000626 constant label dcl 216 array 000324 constant entry external dcl 164 rcm_modify_record_by_id 000215 constant entry external dcl 57 single 000301 constant entry external dcl 155 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1672 1736 1434 1702 Length 2262 1434 44 310 236 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcm_modify_record_by_id 342 external procedure is an external procedure. on unit on line 214 64 on unit CHECK_VERSION internal procedure shares stack frame of external procedure rcm_modify_record_by_id. CHECK_VERSION_CHAR_8 internal procedure shares stack frame of external procedure rcm_modify_record_by_id. FINISH 68 internal procedure is called by several nonquick procedures. ERROR_RETURN internal procedure shares stack frame of external procedure rcm_modify_record_by_id. GET_ELEMENT_ERROR_RETURN internal procedure shares stack frame of external procedure rcm_modify_record_by_id. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 dm_work_area_ptr rcm_modify_record_by_id STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcm_modify_record_by_id 000100 modify_single_record rcm_modify_record_by_id 000101 new_buffer_was_allocated rcm_modify_record_by_id 000102 new_record_string_length rcm_modify_record_by_id 000104 new_record_string_ptr rcm_modify_record_by_id 000106 number_of_records_to_modify rcm_modify_record_by_id 000110 field_table_ptr rcm_modify_record_by_id 000112 old_record_string_length rcm_modify_record_by_id 000112 automatic_old_record_buffer rcm_modify_record_by_id 000112 automatic_new_record_buffer rcm_modify_record_by_id 000114 old_record_string_ptr rcm_modify_record_by_id 000116 record_count rcm_modify_record_by_id 000117 record_id rcm_modify_record_by_id 000120 old_record_buffer_ptr rcm_modify_record_by_id 000122 new_record_buffer_ptr rcm_modify_record_by_id 000124 old_record_buffer_length rcm_modify_record_by_id 000125 new_record_buffer_length rcm_modify_record_by_id 000126 new_new_record_buffer_length rcm_modify_record_by_id 000136 record_cursor_ptr rcm_modify_record_by_id 000140 record_collection_opening_info_ptr rcm_modify_record_by_id 000142 element_id_list_ptr rcm_modify_record_by_id 000144 ELEMENT_ID_LIST_VERSION_1 rcm_modify_record_by_id 000146 general_typed_vector_ptr rcm_modify_record_by_id THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return_mac alloc_auto_adj enable_op ext_entry int_entry op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. collection_manager_$get collection_manager_$modify data_format_util_$general_modify_string get_dm_free_area_ rcm_get_opening_info sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$ci_not_allocated dm_error_$ci_not_in_collection dm_error_$no_element dm_error_$programming_error dm_error_$record_not_found dm_error_$wrong_cursor_type error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 79 000157 86 000161 87 000163 90 000171 98 000177 100 000202 2 22 000206 3 28 000210 57 000214 60 000223 155 000273 158 000312 159 000314 161 000316 164 000317 167 000335 168 000336 170 000340 172 000343 174 000366 176 000371 179 000372 182 000373 184 000377 189 000456 191 000473 193 000477 196 000520 199 000536 202 000540 206 000562 208 000565 209 000567 211 000571 214 000604 216 000626 219 000635 221 000643 224 000646 228 000703 231 000713 234 000716 236 000735 237 000737 240 000741 244 000774 247 000777 250 001001 252 001014 253 001016 255 001020 258 001045 261 001050 263 001055 264 001060 266 001062 268 001066 272 001067 279 001100 285 001162 288 001163 295 001174 301 001264 305 001265 308 001273 311 001305 314 001324 317 001345 320 001346 323 001347 324 001353 329 001354 339 001356 341 001364 343 001371 346 001376 348 001377 ----------------------------------------------------------- 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