COMPILATION LISTING OF SEGMENT merge_merge Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 02/14/84 0728.2 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 merge_merge: proc(input_file, output_file, merge_desc, 11 user_out_sw_par, merge_code); 12 13 /* PARAMETERS */ 14 dcl (input_file(*) char(*), /* Input file pathnames or attach descriptions (Input). */ 15 output_file char(*), /* Output file pathnames or attach description (Input). */ 16 merge_desc(*) ptr, /* Pointer to Merge Description (source form) (Input). */ 17 user_out_sw_par char(*), /* Switchname for diagnostics and merge Report (Input). */ 18 merge_code fixed bin(35) ) parameter; /* Status code (Output). */ 19 20 /* Modified 12/01/83 by C Spitzer. change dcl of get_wdir_ so doesn't randomly fault. */ 21 22 /* EXTERNAL ENTRIES */ 23 dcl clock_ entry returns(fixed bin(71)); 24 dcl convert_status_code_ entry(fixed bin(35), char(8) aligned, char(100) aligned); 25 dcl cpu_time_and_paging_ entry(fixed bin, fixed bin(71), fixed bin); 26 dcl get_pdir_ entry returns(char(168) aligned); 27 dcl hcs_$get_process_usage entry(ptr, fixed bin(35)); 28 dcl hcs_$make_seg entry(char(*) aligned, char(*) aligned, char(*), fixed bin(5), ptr, fixed bin(35)); 29 dcl hcs_$truncate_seg entry(ptr, fixed bin(24), fixed bin(35)), 30 hcs_$delentry_seg entry(ptr, fixed bin(35)); 31 dcl hmu entry; 32 dcl ioa_$rsnnl entry options(variable); 33 dcl ioa_$ioa_stream entry options(variable); 34 dcl sub_err_ entry options(variable); 35 dcl translator_temp_$release_segment entry(ptr, fixed bin(35)); 36 dcl unique_chars_ entry(bit(*)) returns(char(15)); 37 38 dcl merge_initiate$initiate_private entry(ptr, ptr, char(*), fixed bin(35)); 39 dcl (sort_input_proc, 40 merge_output_proc) entry(fixed bin(35)); 41 dcl sort_merge_terminate$terminate entry(fixed bin(35)); 42 dcl sort_cleanup_work entry; 43 dcl sort_merge_subroutine entry((*)char(*), char(*), (*)ptr, char(*), 44 entry, entry, bit(1), bit(1), 45 ptr, ptr, 46 ptr, ptr); 47 dcl sort_merge_print_report entry; 48 49 /* EXTERNAL STATIC */ 50 1 1 dcl 1 sort_ext$acl(1) ext, 1 2 2 x_user_id char(32), 1 3 2 x_modes bit(36), 1 4 2 x_pad bit(36), 1 5 2 x_acl_code fixed bin(35); 1 6 dcl 1 acl(1) 1 7 defined(sort_ext$acl), 1 8 2 user_id char(32), 1 9 2 modes bit(36), 1 10 2 pad bit(36), 1 11 2 acl_code fixed bin(35); 1 12 dcl sort_ext$b(0: 31) fixed bin(30) ext; /* keys - bit offset (usually) for sort_comp */ 1 13 dcl b(0: 31) fixed bin(30) 1 14 defined (sort_ext$b); 1 15 dcl sort_ext$compares_counter fixed bin(34) ext; /* compares executed, excluding sequence checker */ 1 16 dcl compares_counter fixed bin(34) 1 17 defined(sort_ext$compares_counter); 1 18 dcl sort_ext$compare_sw fixed bin(1) ext; /* 1 = user compare exit specified */ 1 19 dcl compare_sw fixed bin(1) 1 20 defined (sort_ext$compare_sw); 1 21 dcl sort_ext$curr_input_file_attach char(256) ext; /* attach description, current input file (Sort) */ 1 22 dcl curr_input_file_attach char(256) 1 23 defined(sort_ext$curr_input_file_attach); 1 24 dcl sort_ext$curr_input_file_name char(256) ext; /* pathname, current input file (Sort) */ 1 25 dcl curr_input_file_name char(256) 1 26 defined (sort_ext$curr_input_file_name); 1 27 dcl sort_ext$curr_input_file_num fixed bin(17) ext; /* number for current input file (Sort) */ 1 28 dcl curr_input_file_num fixed bin(17) 1 29 defined (sort_ext$curr_input_file_num); 1 30 dcl sort_ext$curr_output_file_attach char(256) ext; /* attach description, output file */ 1 31 dcl curr_output_file_attach char(256) 1 32 defined(sort_ext$curr_output_file_attach); 1 33 dcl sort_ext$curr_output_file_name char(256) ext; /* pathname, output file */ 1 34 dcl curr_output_file_name char(256) 1 35 defined (sort_ext$curr_output_file_name); 1 36 dcl sort_ext$debug_sw bit(1) ext; /* 1 = -debug argument specified */ 1 37 dcl debug_sw bit(1) 1 38 defined(sort_ext$debug_sw); 1 39 dcl sort_ext$disaster2 fixed bin(17) ext; /* 0 = first call to sort_return or merge_return */ 1 40 dcl disaster2 fixed bin(17) 1 41 defined (sort_ext$disaster2); 1 42 dcl sort_ext$dt(0: 31) fixed bin(30) ext; /* keys - datatype for sort_comp */ 1 43 dcl dt(0: 31) fixed bin(30) 1 44 defined (sort_ext$dt); 1 45 dcl sort_ext$input_driver_is_sort bit(1) ext; /* 1 = Sort reads input files, 0 = input_file exit */ 1 46 dcl input_driver_is_sort bit(1) 1 47 defined(sort_ext$input_driver_is_sort); 1 48 dcl sort_ext$input_file_exit_sw bit(1) ext; /* 1 = user input_file exit specified */ 1 49 dcl input_file_exit_sw bit(1) 1 50 defined(sort_ext$input_file_exit_sw); 1 51 dcl sort_ext$input_file_max fixed bin(17) ext; /* number of input files specified [init(10)] */ 1 52 /* must also change merge_return: merge_read_count & input_file_len */ 1 53 dcl input_file_max fixed bin(17) 1 54 defined(sort_ext$input_file_max); 1 55 dcl sort_ext$input_record_exit_sw fixed bin(1) ext; /* 1 = user input_record exit specified */ 1 56 dcl input_record_exit_sw fixed bin(1) 1 57 defined(sort_ext$input_record_exit_sw); 1 58 dcl sort_ext$input_rec_deleted fixed bin(30) ext; /* number of records deleted at input_record exit */ 1 59 dcl input_rec_deleted fixed bin(30) 1 60 defined(sort_ext$input_rec_deleted); 1 61 dcl sort_ext$input_rec_inserted fixed bin(30) ext; /* number of records inserted _record exit */ 1 62 dcl input_rec_inserted fixed bin(30) 1 63 defined(sort_ext$input_rec_inserted); 1 64 dcl sort_ext$in_buff_ptr ptr ext; /* buffer for an input record (Sort or Merge reading) */ 1 65 dcl in_buff_ptr ptr 1 66 defined (sort_ext$in_buff_ptr); 1 67 dcl sort_ext$leng(0: 31) fixed bin(30) ext; /* keys - length or precision for sort_comp */ 1 68 dcl leng(0: 31) fixed bin(30) 1 69 defined (sort_ext$leng); 1 70 dcl sort_ext$max1 fixed bin(30) ext; /* limits size of unsorted string SS (sort_release) */ 1 71 dcl max1 fixed bin(30) 1 72 defined (sort_ext$max1); 1 73 dcl sort_ext$max2 fixed bin(30) ext; /* limits size of unsorted string SS (sort_release) */ 1 74 dcl max2 fixed bin(30) 1 75 defined (sort_ext$max2); 1 76 dcl sort_ext$max3 fixed bin(30) ext; /* maximum number of records per string SS */ 1 77 dcl max3 fixed bin(30) 1 78 defined (sort_ext$max3); 1 79 dcl sort_ext$max4 fixed bin(30) ext; /* maximum merge order allowed (sort_presort) */ 1 80 dcl max4 fixed bin(30) 1 81 defined (sort_ext$max4); 1 82 dcl sort_ext$max_rec_length fixed bin(30) ext; /* maximum record length permitted by Sort or Merge; */ 1 83 /* slightly less than sys_info$max_seg_size */ 1 84 dcl max_rec_length fixed bin(30) 1 85 defined (sort_ext$max_rec_length); 1 86 dcl sort_ext$merge_compares fixed bin(34) ext; /* number of compares in merge */ 1 87 dcl merge_compares fixed bin(34) 1 88 defined(sort_ext$merge_compares); 1 89 dcl sort_ext$merge_in_iocb_ptrs(10) ptr ext; /* iox_ iocb's for Merge input files */ 1 90 dcl merge_in_iocb_ptrs(10) ptr 1 91 defined(sort_ext$merge_in_iocb_ptrs); 1 92 dcl sort_ext$merge_input_file_attaches(10) char(256) ext; /* attach descriptions, Merge input files */ 1 93 dcl merge_input_file_attaches(10) char(256) 1 94 defined(sort_ext$merge_input_file_attaches); 1 95 dcl sort_ext$merge_input_file_names(10) char(256) ext; /* pathnames, Merge input files */ 1 96 dcl merge_input_file_names(10) char(256) 1 97 defined(sort_ext$merge_input_file_names); 1 98 dcl sort_ext$mii fixed bin(17) ext; /* merge order for Sort [init(0)] */ 1 99 dcl mii fixed bin(17) 1 100 defined (sort_ext$mii); 1 101 dcl sort_ext$min_rec_length fixed bin(30) ext; /* record length required to include all key fields */ 1 102 dcl min_rec_length fixed bin(30) 1 103 defined (sort_ext$min_rec_length); 1 104 dcl sort_ext$mip (1000) fixed bin(30) ext; /* number of records in each string MS for merge */ 1 105 dcl mip (1000) fixed bin(30) 1 106 defined (sort_ext$mip); 1 107 dcl sort_ext$msp (1000) ptr ext; /* sorted strings MS(1:mii) to be merged */ 1 108 dcl msp (1000) ptr 1 109 defined (sort_ext$msp); 1 110 dcl sort_ext$no_of_keys fixed bin(30) ext; /* number of keys specified */ 1 111 dcl no_of_keys fixed bin(30) 1 112 defined(sort_ext$no_of_keys); 1 113 dcl sort_ext$old_input_file_num fixed bin(17) ext; /* used for identifying files with bad key data */ 1 114 dcl old_input_file_num fixed bin(17) /* (illegal_procedure handler in sort_presort) */ 1 115 defined(sort_ext$old_input_file_num); 1 116 dcl sort_ext$output_driver_is_sort bit(1) ext; /* 1 = Sort or Merge writes output file; */ 1 117 dcl output_driver_is_sort bit(1) /* 0 = output_file exit */ 1 118 defined(sort_ext$output_driver_is_sort); 1 119 dcl sort_ext$output_file_exit_sw bit(1) ext; /* 1 = user output_file exit specified */ 1 120 dcl output_file_exit_sw bit(1) 1 121 defined(sort_ext$output_file_exit_sw); 1 122 dcl sort_ext$output_rec_deleted fixed bin(30) ext; /* number of records deleted at output_record exit */ 1 123 dcl output_rec_deleted fixed bin(30) 1 124 defined(sort_ext$output_rec_deleted); 1 125 dcl sort_ext$output_rec_inserted fixed bin(30) ext; /* number of record inserted at output_record exit */ 1 126 dcl output_rec_inserted fixed bin(30) 1 127 defined(sort_ext$output_rec_inserted); 1 128 dcl sort_ext$output_record_exit_sw fixed bin(1) ext; /* 1 = user output_record exit specified */ 1 129 dcl output_record_exit_sw fixed bin(1) 1 130 defined(sort_ext$output_record_exit_sw); 1 131 dcl sort_ext$presort_compares fixed bin(34) ext; /* number of compares in presort */ 1 132 dcl presort_compares fixed bin(34) 1 133 defined(sort_ext$presort_compares); 1 134 dcl 1 sort_ext$pu(5) ext, 1 135 2 x_n fixed bin, /* [init((5) 1)] */ 1 136 2 x_rcpu fixed bin(71); 1 137 dcl 1 pu(5) 1 138 defined(sort_ext$pu), 1 139 2 n fixed bin, 1 140 2 rcpu fixed bin(71); 1 141 dcl sort_ext$read_count fixed bin(30) ext; /* number of records read by Sort (or by Merge) */ 1 142 dcl read_count fixed bin(30) 1 143 defined (sort_ext$read_count); 1 144 dcl sort_ext$rec_ptr_a ptr ext; /* buffer for output_record exit and sequence checker */ 1 145 dcl rec_ptr_a ptr 1 146 defined(sort_ext$rec_ptr_a); 1 147 dcl sort_ext$rec_ptr_b ptr ext; /* buffer for output_record exit and sequence checker */ 1 148 dcl rec_ptr_b ptr 1 149 defined(sort_ext$rec_ptr_b); 1 150 dcl sort_ext$release_count fixed bin(30) ext; /* number of records released to Sort (Merge) */ 1 151 dcl release_count fixed bin(30) 1 152 defined (sort_ext$release_count); 1 153 dcl sort_ext$report_sw bit(2) ext; /* 00 = print summary report, 01 = suppress */ 1 154 dcl report_sw bit(2) 1 155 defined (sort_ext$report_sw); 1 156 dcl sort_ext$return_count fixed bin(30) ext; /* number of records returned from Sort (Merge) */ 1 157 dcl return_count fixed bin(30) 1 158 defined (sort_ext$return_count); 1 159 dcl sort_ext$rev(0: 31) fixed bin(1) ext; /* keys - descending indicator for sort_comp */ 1 160 dcl rev(0: 31) fixed bin(1) 1 161 defined (sort_ext$rev); 1 162 dcl sort_ext$sii fixed bin(30) ext; /* number of records, current string (sort_release) */ 1 163 dcl sii fixed bin(30) 1 164 defined (sort_ext$sii); 1 165 dcl sort_ext$sip ptr ext; /* SI - tree of indices (subscripts) for records */ 1 166 dcl sip ptr /* being sorted or merged */ 1 167 defined (sort_ext$sip); 1 168 dcl sort_ext$sort_compare_exit variable /* entry point, user compare exit procedure */ 1 169 entry(ptr, ptr) returns(fixed bin(1)) ext; 1 170 dcl sort_ext$sort_desc_pn char(168) ext; /* pathname, Sort (Merge) Description segment */ 1 171 dcl sort_desc_pn char(168) 1 172 defined(sort_ext$sort_desc_pn); 1 173 dcl sort_ext$sort_input_record_exit variable /* entry point, user input_record exit procedure */ 1 174 entry(ptr, fixed bin(21), fixed bin, bit(1)) ext; 1 175 dcl sort_input_record_exit variable 1 176 entry(ptr, fixed bin(21), fixed bin, bit(1)) 1 177 defined(sort_ext$sort_input_record_exit); 1 178 dcl sort_ext$sort_output_record_exit variable /* entry point, user output_record exit procedure */ 1 179 entry(ptr, fixed bin(21), ptr, fixed bin(21), fixed bin, fixed bin(1), bit(1), bit(1), bit(1)) ext; 1 180 dcl sort_output_record_exit variable 1 181 entry(ptr, fixed bin(21), ptr, fixed bin(21), fixed bin, fixed bin(1), bit(1), bit(1), bit(1)) 1 182 defined(sort_ext$sort_output_record_exit); 1 183 dcl sort_ext$srp ptr ext; /* SR - position and length of each record */ 1 184 dcl srp ptr /* in SS string for presort */ 1 185 defined (sort_ext$srp); 1 186 dcl sort_ext$ssi fixed bin(30) ext; /* char offset in SS of current record (sort_release) */ 1 187 dcl ssi fixed bin(30) 1 188 defined (sort_ext$ssi); 1 189 dcl sort_ext$ssp ptr ext; /* SS - unsorted string during presort */ 1 190 dcl ssp ptr 1 191 defined (sort_ext$ssp); 1 192 dcl sort_ext$state fixed bin(17) ext; /* state variable controlling sequence of calls to */ 1 193 dcl state fixed bin(17) /* the various stages of the Sort (Merge) [init(0)] */ 1 194 defined (sort_ext$state); 1 195 dcl sort_ext$terminate_print_sw bit(1) ext; /* 0 = command prints (sort_merge_print_report) */ 1 196 dcl terminate_print_sw bit(1) /* 1 = subroutine prints (sort_merge_terminate) */ 1 197 defined (sort_ext$terminate_print_sw); 1 198 dcl 1 sort_ext$time_info(5) ext, /* used for -time information */ 1 199 2 x_etime fixed bin(71), 1 200 2 x_vtime fixed bin(71), 1 201 2 x_pf fixed bin, 1 202 2 x_pd_f fixed bin; 1 203 dcl 1 time_info(5) 1 204 defined(sort_ext$time_info), 1 205 2 etime fixed bin(71), 1 206 2 vtime fixed bin(71), 1 207 2 pf fixed bin, 1 208 2 pd_f fixed bin; 1 209 dcl sort_ext$time_sw bit(1) ext; /* 1 = -time argument specified */ 1 210 dcl time_sw bit(1) 1 211 defined(sort_ext$time_sw); 1 212 dcl sort_ext$user_out_sw char(32) ext; /* I/O switch for summary report, diagnostics: */ 1 213 dcl user_out_sw char(32) /* "user_output", "" = suppress, other = user switch */ 1 214 defined(sort_ext$user_out_sw); 1 215 dcl sort_ext$unique_prefix char(16) ext; /* unique to each invocation, for temporary names */ 1 216 dcl unique_prefix char(16) 1 217 defined (sort_ext$unique_prefix); /* -4- */ 1 218 dcl sort_ext$w(0: 31) fixed bin(30) ext; /* keys - word (sometimes char) offset for sort_comp */ 1 219 dcl w(0: 31) fixed bin(30) 1 220 defined (sort_ext$w); 1 221 dcl sort_ext$wf_dir_name char(168) aligned ext; /* -td directory pathname argument */ 1 222 dcl wf_dir_name char(168) aligned 1 223 defined(sort_ext$wf_dir_name); 1 224 dcl sort_ext$wf_full_name char(168) ext; /* absolute -td directory pathname */ 1 225 dcl wf_full_name char(168) 1 226 defined (sort_ext$wf_full_name); /* -42- */ 1 227 dcl sort_ext$whoami char(6) ext; /* "sort", "merge", "sort_", "merge_" called */ 1 228 dcl whoami char(6) 1 229 defined (sort_ext$whoami); /* -2- */ 1 230 dcl sort_ext$write_count fixed bin(30) ext; /* number of records written by Sort (Merge) */ 1 231 dcl write_count fixed bin(30) 1 232 defined (sort_ext$write_count); 51 52 53 dcl (error_table_$out_of_sequence, 54 error_table_$fatal_error, 55 error_table_$bad_arg) external static fixed bin(35); 56 57 /* INTERNAL STATIC (constants only) */ 58 dcl (on init("1"b), 59 off init("0"b) ) bit(1) internal static; 60 61 /* AUTOMATIC AND BASED */ 62 dcl keys_ptr ptr, 63 exits_ptr ptr, 64 user_out_sw_temp char(32), 65 code fixed bin(35), 66 file_size_temp float bin(27), 67 merge_order_temp fixed bin(35), 68 string_size_temp fixed bin(35); 69 70 dcl (temp_sd_int, 71 temp_sd_lex) ptr init(null()); 72 73 dcl (sort_input_exit, 74 sort_output_exit) entry(fixed bin(35)) variable; 75 76 dcl state_code fixed bin(35); 77 78 dcl arg_err_sw bit(1), 79 fatal_sw bit(1); 80 81 dcl j fixed bin(17); /* Used for do loop on input file names and attaches. */ 82 dcl hcs_code fixed bin(35); 83 84 dcl shortinfo char(8) aligned, 85 longinfo char(100) aligned; 86 87 dcl retval fixed bin(35); 88 dcl cleanup condition; 89 90 /* Start. */ 91 92 call state_test(state_code); /* Test state variable. */ 93 if state_code ^= 0 then do; 94 merge_code = error_table_$out_of_sequence; 95 return; /* to caller without resetting state variable */ 96 end; 97 state = 2; 98 time_sw = off; /* Timing not specified. */ 99 debug_sw = off; /* Debug option not specified. */ 100 arg_err_sw = off; /* Not done in common_start - see merge_private entry. */ 101 common_start: 102 merge_code = 0; 103 mii = dimension(input_file, 1); /* merge order = number of input files. */ 104 sip = null(); /* Used by sort_cleanup_work */ 105 do j = 1 to mii + 1; /* extra location for pointer swapp9ng */ 106 msp(j) = null(); 107 end; 108 temp_sd_lex, 109 temp_sd_int = null(); /* used by cleanup procedure */ 110 on cleanup call cleanup_proc; 111 user_out_sw_temp = user_out_sw_par; /* Pass on. */ 112 /* temp_dir, file_size, string_size not used by merge. */ 113 114 call sort_merge_subroutine(input_file, output_file, merge_desc, user_out_sw_temp, 115 sort_input_exit, sort_output_exit, arg_err_sw, fatal_sw, 116 keys_ptr, exits_ptr, temp_sd_lex, temp_sd_int); 117 118 call create_in_buffs; /* uses mii for number of input files. */ 119 120 /* Driver: 3 steps. */ 121 /* (1) Initiate. */ 122 if fatal_sw = off then 123 call merge_initiate$initiate_private(keys_ptr, exits_ptr, user_out_sw_temp, code); 124 if arg_err_sw = on | fatal_sw = on then do; 125 merge_code = error_table_$bad_arg; 126 go to exit; 127 end; 128 if code ^= 0 then do; 129 if code = error_table_$out_of_sequence then do; 130 call sub_err_(code, (whoami), "c", null(), retval, 131 "Calling merge_$initiate."); 132 merge_code = error_table_$fatal_error; 133 end; 134 else merge_code = code; 135 go to exit; 136 end; 137 138 if time_sw = on then do; /* End of Overhead phase (first part). */ 139 etime(2) = clock_(); 140 call cpu_time_and_paging_(pf(2), vtime(2), pd_f(2)); 141 call hcs_$get_process_usage(addr(pu(2)), hcs_code); 142 end; 143 144 /* No presort, beginning of merge phase. */ 145 146 /* Create arrays of input file names and attach descriptions. */ 147 do j = 1 to mii; 148 merge_input_file_names(j) = input_file(lbound(input_file, 1) + j - 1); 149 call scan_for_pn_or_attach(merge_input_file_names(j), merge_input_file_attaches(j)); 150 end; 151 if time_sw = on then do; 152 etime(3) = clock_(); 153 call cpu_time_and_paging_(pf(3), vtime(3), pd_f(3)); 154 call hcs_$get_process_usage(addr(pu(3)), hcs_code); 155 call hmu; 156 end; 157 state = 5; /* since there are no presort or commence calls */ 158 159 /* (2) Call an output file procedure. */ 160 if output_driver_is_sort = on then /* Call merge's output file procedure. */ 161 do; 162 /* curr_output_file_name, curr_output_file_attach already set up by sort_merge_subroutine. */ 163 call merge_output_proc(code); 164 if code ^= 0 then do; 165 if code ^= error_table_$fatal_error then do; 166 call sub_err_(code, (whoami), "c", null(), retval, 167 "Merge's output_file procedure."); 168 end; 169 merge_code = error_table_$fatal_error; 170 go to exit; 171 end; 172 end; 173 else do; /* Call user's output file procedure. */ 174 /* User output_file procedure currently not permitted for Merge. */ 175 call sort_output_exit(code); /* User's output procedure. */ 176 if code ^= 0 then do; 177 if code ^= error_table_$fatal_error 178 then call sub_err_(code, (whoami), "c", null(), retval, 179 "User output_file exit procedure."); 180 merge_code = error_table_$fatal_error; 181 go to exit; 182 end; 183 end; 184 if time_sw = on then do; 185 etime(4) = clock_(); 186 call cpu_time_and_paging_(pf(4), vtime(4), pd_f(4)); 187 call hcs_$get_process_usage(addr(pu(4)), hcs_code); 188 end; 189 190 /* (3) Terminate. */ 191 call sort_merge_print_report; 192 call sort_merge_terminate$terminate(code); 193 if code ^= 0 then do; 194 if code = error_table_$out_of_sequence then 195 call sub_err_(code, (whoami), "c", null(), retval, 196 "Calling merge_$terminate."); 197 merge_code = error_table_$fatal_error; 198 end; 199 exit: 200 call cleanup_proc; 201 state = 8; 202 return; /* to caller of merge_ */ 203 204 205 /* ENTRY merge_$merge_private called only by merge command. */ 206 merge_private: entry(input_file, output_file, merge_desc, user_out_sw_par, merge_code); 207 state = 2; 208 if merge_code ^= 0 then arg_err_sw = on; /* merge has encountered some error already */ 209 else arg_err_sw = off; 210 go to common_start; 211 212 213 state_test: proc(state_code); /* Test state variable: */ 214 dcl state_code fixed bin(35) parameter; 215 if state = 0 216 | (state = 8 & index(whoami, "_") ^= 0) /* Subroutine called last */ 217 then do; 218 whoami = "merge_"; 219 unique_prefix = before(unique_chars_("0"b), " ")||"."; /* Get unique character string. */ 220 state_code = 0; 221 end; 222 else do; 223 state_code = 1; 224 return; 225 end; 226 end state_test; 227 228 229 scan_for_pn_or_attach: proc(name, attach); 230 dcl (name char(*), 231 attach char(*) ) parameter; 232 dcl (j, k) fixed bin(17); 233 k = 1; 234 do while(substr(name, k, 1) = " " & k < length(name)); 235 k = k + 1; 236 end; 237 j = k; 238 do while(substr(name, k, 1) ^= " " & k < length(name)); 239 k = k + 1; 240 end; 241 do while(substr(name, k, 1) = " " & k < length(name)); 242 k = k + 1; 243 end; 244 if substr(name, j, 4) = "-if " | substr(name, j, 12) = "-input_file " then do; 245 name = substr(name, k); 246 attach = ""; 247 end; 248 else if substr(name, j, 5) = "-ids " | substr(name, j, 19) = "-input_description " then do; 249 attach = substr(name, k); 250 end; 251 end scan_for_pn_or_attach; 252 253 254 create_in_buffs: proc; 255 dcl i fixed bin; 256 dcl number char(2) varying; 257 dcl S char(16) aligned based; 258 dcl ioa_len fixed bin; 259 do i = 1 to mii+1; /* extra segment for reading next input record without destroying previous merge winner*/ 260 call ioa_$rsnnl("^d", number, ioa_len, i); 261 call hcs_$make_seg(get_pdir_(), unique_prefix||"sort_in_buff_"||number||"_", "", 262 8+2, /* rw */ msp(i), hcs_code); 263 if msp(i) = null() then do; 264 arg_err_sw = on; 265 call convert_status_code_(hcs_code, shortinfo, longinfo); 266 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 267 "^a: ^a Unable to create temporary segment [pd]>^asort_in_buff_^a_", 268 whoami, longinfo, unique_prefix, number); 269 return; 270 end; 271 msp(i) = addr(substr(msp(i)->S, 9)); /* Leave space for record length prior to record. */ 272 end; /* of do for all input files (mii) */ 273 end create_in_buffs; 274 275 276 cleanup_proc: proc; 277 dcl code fixed bin(35); 278 if debug_sw = off then do; 279 if temp_sd_lex ^= null() then call translator_temp_$release_segment(temp_sd_lex, code); 280 if temp_sd_int ^= null() then call hcs_$delentry_seg(temp_sd_int, code); 281 end; 282 else do; 283 if temp_sd_lex ^= null() then call hcs_$truncate_seg(temp_sd_lex, 0, code); 284 if temp_sd_int ^= null() then call hcs_$truncate_seg(temp_sd_int, 0, code); 285 end; 286 call sort_cleanup_work; 287 state = 8; 288 end cleanup_proc; 289 290 291 end merge_merge; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/14/84 0726.6 merge_merge.pl1 >spec>on>6641>merge_merge.pl1 51 1 12/20/77 1614.2 sort_ext.incl.pl1 >ldd>include>sort_ext.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. S based char(16) dcl 257 set ref 271 arg_err_sw 000133 automatic bit(1) unaligned dcl 78 set ref 100* 114* 124 208* 209* 264* attach parameter char unaligned dcl 230 set ref 229 246* 249* cleanup 000174 stack reference condition dcl 88 ref 110 clock_ 000010 constant entry external dcl 23 ref 139 152 185 code 000114 automatic fixed bin(35,0) dcl 62 in procedure "merge_merge" set ref 122* 128 129 130* 134 163* 164 165 166* 175* 176 177 177* 192* 193 194 194* code 000100 automatic fixed bin(35,0) dcl 277 in procedure "cleanup_proc" set ref 279* 280* 283* 284* convert_status_code_ 000012 constant entry external dcl 24 ref 265 cpu_time_and_paging_ 000014 constant entry external dcl 25 ref 140 153 186 debug_sw defined bit(1) unaligned dcl 1-37 set ref 99* 278 error_table_$bad_arg 000120 external static fixed bin(35,0) dcl 53 ref 125 error_table_$fatal_error 000116 external static fixed bin(35,0) dcl 53 ref 132 165 169 177 180 197 error_table_$out_of_sequence 000114 external static fixed bin(35,0) dcl 53 ref 94 129 194 etime defined fixed bin(71,0) array level 2 dcl 1-203 set ref 139* 152* 185* exits_ptr 000102 automatic pointer dcl 62 set ref 114* 122* fatal_sw 000134 automatic bit(1) unaligned dcl 78 set ref 114* 122 124 get_pdir_ 000016 constant entry external dcl 26 ref 261 261 hcs_$delentry_seg 000026 constant entry external dcl 29 ref 280 hcs_$get_process_usage 000020 constant entry external dcl 27 ref 141 154 187 hcs_$make_seg 000022 constant entry external dcl 28 ref 261 hcs_$truncate_seg 000024 constant entry external dcl 29 ref 283 284 hcs_code 000136 automatic fixed bin(35,0) dcl 82 set ref 141* 154* 187* 261* 265* hmu 000030 constant entry external dcl 31 ref 155 i 000230 automatic fixed bin(17,0) dcl 255 set ref 259* 260* 261 263 271 271* input_file parameter char array unaligned dcl 14 set ref 10 103 114* 148 148 206 ioa_$ioa_stream 000034 constant entry external dcl 33 ref 266 ioa_$rsnnl 000032 constant entry external dcl 32 ref 260 ioa_len 000234 automatic fixed bin(17,0) dcl 258 set ref 260* j 000220 automatic fixed bin(17,0) dcl 232 in procedure "scan_for_pn_or_attach" set ref 237* 244 244 248 248 j 000135 automatic fixed bin(17,0) dcl 81 in procedure "merge_merge" set ref 105* 106* 147* 148 148 149 149* k 000221 automatic fixed bin(17,0) dcl 232 set ref 233* 234 234 235* 235 237 238 238 239* 239 241 241 242* 242 245 249 keys_ptr 000100 automatic pointer dcl 62 set ref 114* 122* longinfo 000142 automatic char(100) dcl 84 set ref 265* 266* merge_code parameter fixed bin(35,0) dcl 14 set ref 10 94* 101* 125* 132* 134* 169* 180* 197* 206 208 merge_desc parameter pointer array dcl 14 set ref 10 114* 206 merge_initiate$initiate_private 000044 constant entry external dcl 38 ref 122 merge_input_file_attaches defined char(256) array unaligned dcl 1-93 set ref 149* merge_input_file_names defined char(256) array unaligned dcl 1-96 set ref 148* 149* merge_output_proc 000046 constant entry external dcl 39 ref 163 mii defined fixed bin(17,0) dcl 1-99 set ref 103* 105 147 259 msp defined pointer array dcl 1-108 set ref 106* 261* 263 271* 271 name parameter char unaligned dcl 230 set ref 229 234 234 238 238 241 241 244 244 245* 245 248 248 249 number 000232 automatic varying char(2) dcl 256 set ref 260* 261 266* off constant bit(1) initial unaligned dcl 58 ref 98 99 100 122 209 278 on constant bit(1) initial unaligned dcl 58 ref 124 124 138 151 160 184 208 264 output_driver_is_sort defined bit(1) unaligned dcl 1-117 ref 160 output_file parameter char unaligned dcl 14 set ref 10 114* 206 pd_f 5 defined fixed bin(17,0) array level 2 dcl 1-203 set ref 140* 153* 186* pf 4 defined fixed bin(17,0) array level 2 dcl 1-203 set ref 140* 153* 186* pu defined structure array level 1 unaligned dcl 1-137 set ref 141 141 154 154 187 187 retval 000173 automatic fixed bin(35,0) dcl 87 set ref 130* 166* 177* 194* shortinfo 000140 automatic char(8) dcl 84 set ref 265* sip defined pointer dcl 1-166 set ref 104* sort_cleanup_work 000052 constant entry external dcl 42 ref 286 sort_ext$debug_sw 000060 external static bit(1) unaligned dcl 1-36 set ref 99* 99 278 278 sort_ext$merge_input_file_attaches 000062 external static char(256) array unaligned dcl 1-92 ref 149 149 sort_ext$merge_input_file_names 000064 external static char(256) array unaligned dcl 1-95 set ref 148* 148 149 149 sort_ext$mii 000066 external static fixed bin(17,0) dcl 1-98 set ref 103* 103 105 105 147 147 259 259 sort_ext$msp 000070 external static pointer array dcl 1-107 set ref 106* 106 261 261 263 263 271* 271 271 271 sort_ext$output_driver_is_sort 000072 external static bit(1) unaligned dcl 1-116 ref 160 160 sort_ext$pu 000074 external static structure array level 1 unaligned dcl 1-134 ref 141 141 141 141 141 141 141 141 154 154 154 154 154 154 154 154 187 187 187 187 187 187 187 187 sort_ext$sip 000076 external static pointer dcl 1-165 set ref 104* 104 sort_ext$state 000100 external static fixed bin(17,0) dcl 1-192 set ref 97* 97 157* 157 201* 201 207* 207 215 215 215 215 287* 287 sort_ext$time_info 000102 external static structure array level 1 unaligned dcl 1-198 set ref 139* 139 140 140 140 140 140 140 152* 152 153 153 153 153 153 153 185* 185 186 186 186 186 186 186 sort_ext$time_sw 000104 external static bit(1) unaligned dcl 1-209 set ref 98* 98 138 138 151 151 184 184 sort_ext$unique_prefix 000110 external static char(16) unaligned dcl 1-215 set ref 219* 219 261 261 266 266 sort_ext$user_out_sw 000106 external static char(32) unaligned dcl 1-212 ref 266 266 266 266 sort_ext$whoami 000112 external static char(6) unaligned dcl 1-227 set ref 130 130 166 166 177 177 194 194 215 215 218* 218 266 266 sort_input_exit 000122 automatic entry variable dcl 73 set ref 114* sort_merge_print_report 000056 constant entry external dcl 47 ref 191 sort_merge_subroutine 000054 constant entry external dcl 43 ref 114 sort_merge_terminate$terminate 000050 constant entry external dcl 41 ref 192 sort_output_exit 000126 automatic entry variable dcl 73 set ref 114* 175 state defined fixed bin(17,0) dcl 1-193 set ref 97* 157* 201* 207* 215 215 287* state_code parameter fixed bin(35,0) dcl 214 in procedure "state_test" set ref 213 220* 223* state_code 000132 automatic fixed bin(35,0) dcl 76 in procedure "merge_merge" set ref 92* 93 sub_err_ 000036 constant entry external dcl 34 ref 130 166 177 194 temp_sd_int 000116 automatic pointer initial dcl 70 set ref 70* 108* 114* 280 280* 284 284* temp_sd_lex 000120 automatic pointer initial dcl 70 set ref 70* 108* 114* 279 279* 283 283* time_info defined structure array level 1 unaligned dcl 1-203 time_sw defined bit(1) unaligned dcl 1-210 set ref 98* 138 151 184 translator_temp_$release_segment 000040 constant entry external dcl 35 ref 279 unique_chars_ 000042 constant entry external dcl 36 ref 219 unique_prefix defined char(16) unaligned dcl 1-216 set ref 219* 261 266* user_out_sw defined char(32) unaligned dcl 1-213 set ref 266 266* user_out_sw_par parameter char unaligned dcl 14 ref 10 111 206 user_out_sw_temp 000104 automatic char(32) unaligned dcl 62 set ref 111* 114* 122* vtime 2 defined fixed bin(71,0) array level 2 dcl 1-203 set ref 140* 153* 186* whoami defined char(6) unaligned dcl 1-228 set ref 130 166 177 194 215 218* 266* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. acl defined structure array level 1 unaligned dcl 1-6 b defined fixed bin(30,0) array dcl 1-13 compare_sw defined fixed bin(1,0) dcl 1-19 compares_counter defined fixed bin(34,0) dcl 1-16 curr_input_file_attach defined char(256) unaligned dcl 1-22 curr_input_file_name defined char(256) unaligned dcl 1-25 curr_input_file_num defined fixed bin(17,0) dcl 1-28 curr_output_file_attach defined char(256) unaligned dcl 1-31 curr_output_file_name defined char(256) unaligned dcl 1-34 disaster2 defined fixed bin(17,0) dcl 1-40 dt defined fixed bin(30,0) array dcl 1-43 file_size_temp automatic float bin(27) dcl 62 in_buff_ptr defined pointer dcl 1-65 input_driver_is_sort defined bit(1) unaligned dcl 1-46 input_file_exit_sw defined bit(1) unaligned dcl 1-49 input_file_max defined fixed bin(17,0) dcl 1-53 input_rec_deleted defined fixed bin(30,0) dcl 1-59 input_rec_inserted defined fixed bin(30,0) dcl 1-62 input_record_exit_sw defined fixed bin(1,0) dcl 1-56 leng defined fixed bin(30,0) array dcl 1-68 max1 defined fixed bin(30,0) dcl 1-71 max2 defined fixed bin(30,0) dcl 1-74 max3 defined fixed bin(30,0) dcl 1-77 max4 defined fixed bin(30,0) dcl 1-80 max_rec_length defined fixed bin(30,0) dcl 1-84 merge_compares defined fixed bin(34,0) dcl 1-87 merge_in_iocb_ptrs defined pointer array dcl 1-90 merge_order_temp automatic fixed bin(35,0) dcl 62 min_rec_length defined fixed bin(30,0) dcl 1-102 mip defined fixed bin(30,0) array dcl 1-105 no_of_keys defined fixed bin(30,0) dcl 1-111 old_input_file_num defined fixed bin(17,0) dcl 1-114 output_file_exit_sw defined bit(1) unaligned dcl 1-120 output_rec_deleted defined fixed bin(30,0) dcl 1-123 output_rec_inserted defined fixed bin(30,0) dcl 1-126 output_record_exit_sw defined fixed bin(1,0) dcl 1-129 presort_compares defined fixed bin(34,0) dcl 1-132 read_count defined fixed bin(30,0) dcl 1-142 rec_ptr_a defined pointer dcl 1-145 rec_ptr_b defined pointer dcl 1-148 release_count defined fixed bin(30,0) dcl 1-151 report_sw defined bit(2) unaligned dcl 1-154 return_count defined fixed bin(30,0) dcl 1-157 rev defined fixed bin(1,0) array dcl 1-160 sii defined fixed bin(30,0) dcl 1-163 sort_desc_pn defined char(168) unaligned dcl 1-171 sort_ext$acl external static structure array level 1 unaligned dcl 1-1 sort_ext$b external static fixed bin(30,0) array dcl 1-12 sort_ext$compare_sw external static fixed bin(1,0) dcl 1-18 sort_ext$compares_counter external static fixed bin(34,0) dcl 1-15 sort_ext$curr_input_file_attach external static char(256) unaligned dcl 1-21 sort_ext$curr_input_file_name external static char(256) unaligned dcl 1-24 sort_ext$curr_input_file_num external static fixed bin(17,0) dcl 1-27 sort_ext$curr_output_file_attach external static char(256) unaligned dcl 1-30 sort_ext$curr_output_file_name external static char(256) unaligned dcl 1-33 sort_ext$disaster2 external static fixed bin(17,0) dcl 1-39 sort_ext$dt external static fixed bin(30,0) array dcl 1-42 sort_ext$in_buff_ptr external static pointer dcl 1-64 sort_ext$input_driver_is_sort external static bit(1) unaligned dcl 1-45 sort_ext$input_file_exit_sw external static bit(1) unaligned dcl 1-48 sort_ext$input_file_max external static fixed bin(17,0) dcl 1-51 sort_ext$input_rec_deleted external static fixed bin(30,0) dcl 1-58 sort_ext$input_rec_inserted external static fixed bin(30,0) dcl 1-61 sort_ext$input_record_exit_sw external static fixed bin(1,0) dcl 1-55 sort_ext$leng external static fixed bin(30,0) array dcl 1-67 sort_ext$max1 external static fixed bin(30,0) dcl 1-70 sort_ext$max2 external static fixed bin(30,0) dcl 1-73 sort_ext$max3 external static fixed bin(30,0) dcl 1-76 sort_ext$max4 external static fixed bin(30,0) dcl 1-79 sort_ext$max_rec_length external static fixed bin(30,0) dcl 1-82 sort_ext$merge_compares external static fixed bin(34,0) dcl 1-86 sort_ext$merge_in_iocb_ptrs external static pointer array dcl 1-89 sort_ext$min_rec_length external static fixed bin(30,0) dcl 1-101 sort_ext$mip external static fixed bin(30,0) array dcl 1-104 sort_ext$no_of_keys external static fixed bin(30,0) dcl 1-110 sort_ext$old_input_file_num external static fixed bin(17,0) dcl 1-113 sort_ext$output_file_exit_sw external static bit(1) unaligned dcl 1-119 sort_ext$output_rec_deleted external static fixed bin(30,0) dcl 1-122 sort_ext$output_rec_inserted external static fixed bin(30,0) dcl 1-125 sort_ext$output_record_exit_sw external static fixed bin(1,0) dcl 1-128 sort_ext$presort_compares external static fixed bin(34,0) dcl 1-131 sort_ext$read_count external static fixed bin(30,0) dcl 1-141 sort_ext$rec_ptr_a external static pointer dcl 1-144 sort_ext$rec_ptr_b external static pointer dcl 1-147 sort_ext$release_count external static fixed bin(30,0) dcl 1-150 sort_ext$report_sw external static bit(2) unaligned dcl 1-153 sort_ext$return_count external static fixed bin(30,0) dcl 1-156 sort_ext$rev external static fixed bin(1,0) array dcl 1-159 sort_ext$sii external static fixed bin(30,0) dcl 1-162 sort_ext$sort_compare_exit external static entry variable dcl 1-168 sort_ext$sort_desc_pn external static char(168) unaligned dcl 1-170 sort_ext$sort_input_record_exit external static entry variable dcl 1-173 sort_ext$sort_output_record_exit external static entry variable dcl 1-178 sort_ext$srp external static pointer dcl 1-183 sort_ext$ssi external static fixed bin(30,0) dcl 1-186 sort_ext$ssp external static pointer dcl 1-189 sort_ext$terminate_print_sw external static bit(1) unaligned dcl 1-195 sort_ext$w external static fixed bin(30,0) array dcl 1-218 sort_ext$wf_dir_name external static char(168) dcl 1-221 sort_ext$wf_full_name external static char(168) unaligned dcl 1-224 sort_ext$write_count external static fixed bin(30,0) dcl 1-230 sort_input_proc 000000 constant entry external dcl 39 sort_input_record_exit defined entry variable dcl 1-175 sort_output_record_exit defined entry variable dcl 1-180 srp defined pointer dcl 1-184 ssi defined fixed bin(30,0) dcl 1-187 ssp defined pointer dcl 1-190 string_size_temp automatic fixed bin(35,0) dcl 62 terminate_print_sw defined bit(1) unaligned dcl 1-196 w defined fixed bin(30,0) array dcl 1-219 wf_dir_name defined char(168) dcl 1-222 wf_full_name defined char(168) unaligned dcl 1-225 write_count defined fixed bin(30,0) dcl 1-231 NAMES DECLARED BY EXPLICIT CONTEXT. cleanup_proc 002037 constant entry internal dcl 276 ref 110 199 common_start 000227 constant label dcl 101 ref 210 create_in_buffs 001571 constant entry internal dcl 254 ref 118 exit 001255 constant label dcl 199 ref 126 135 170 181 merge_merge 000161 constant entry external dcl 10 merge_private 001267 constant entry external dcl 206 scan_for_pn_or_attach 001430 constant entry internal dcl 229 ref 149 state_test 001331 constant entry internal dcl 213 ref 92 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 141 141 154 154 187 187 271 before builtin function ref 219 dimension builtin function ref 103 index builtin function ref 215 lbound builtin function ref 148 length builtin function ref 234 238 241 null builtin function ref 70 70 104 106 108 130 130 166 166 177 177 194 194 263 279 280 283 284 substr builtin function ref 234 238 241 244 244 245 248 248 249 271 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2656 3000 2171 2666 Length 3272 2171 122 256 464 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME merge_merge 356 external procedure is an external procedure. on unit on line 110 64 on unit state_test internal procedure shares stack frame of external procedure merge_merge. scan_for_pn_or_attach internal procedure shares stack frame of external procedure merge_merge. create_in_buffs internal procedure shares stack frame of external procedure merge_merge. cleanup_proc 80 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cleanup_proc 000100 code cleanup_proc merge_merge 000100 keys_ptr merge_merge 000102 exits_ptr merge_merge 000104 user_out_sw_temp merge_merge 000114 code merge_merge 000116 temp_sd_int merge_merge 000120 temp_sd_lex merge_merge 000122 sort_input_exit merge_merge 000126 sort_output_exit merge_merge 000132 state_code merge_merge 000133 arg_err_sw merge_merge 000134 fatal_sw merge_merge 000135 j merge_merge 000136 hcs_code merge_merge 000140 shortinfo merge_merge 000142 longinfo merge_merge 000173 retval merge_merge 000220 j scan_for_pn_or_attach 000221 k scan_for_pn_or_attach 000230 i create_in_buffs 000232 number create_in_buffs 000234 ioa_len create_in_buffs THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_var call_ext_out_desc call_ext_out call_int_this call_int_other return enable shorten_stack ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. clock_ convert_status_code_ cpu_time_and_paging_ get_pdir_ hcs_$delentry_seg hcs_$get_process_usage hcs_$make_seg hcs_$truncate_seg hmu ioa_$ioa_stream ioa_$rsnnl merge_initiate$initiate_private merge_output_proc sort_cleanup_work sort_merge_print_report sort_merge_subroutine sort_merge_terminate$terminate sub_err_ translator_temp_$release_segment unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$fatal_error error_table_$out_of_sequence sort_ext$debug_sw sort_ext$merge_input_file_attaches sort_ext$merge_input_file_names sort_ext$mii sort_ext$msp sort_ext$output_driver_is_sort sort_ext$pu sort_ext$sip sort_ext$state sort_ext$time_info sort_ext$time_sw sort_ext$unique_prefix sort_ext$user_out_sw sort_ext$whoami LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 70 000147 10 000154 92 000207 93 000211 94 000213 95 000217 97 000220 98 000223 99 000225 100 000226 101 000227 103 000231 104 000242 105 000244 106 000255 107 000263 108 000265 110 000270 111 000312 114 000320 118 000401 122 000402 124 000431 125 000441 126 000445 128 000446 129 000450 130 000453 132 000525 133 000531 134 000532 135 000534 138 000535 139 000542 140 000551 141 000565 147 000601 148 000611 149 000637 150 000654 151 000656 152 000663 153 000672 154 000706 155 000722 157 000727 160 000732 163 000736 164 000744 165 000746 166 000751 169 001020 170 001024 172 001025 175 001026 176 001034 177 001036 180 001110 181 001114 184 001115 185 001122 186 001131 187 001145 191 001161 192 001166 193 001175 194 001177 197 001251 199 001255 201 001261 202 001264 206 001265 207 001315 208 001320 209 001326 210 001330 213 001331 215 001333 218 001352 219 001356 220 001420 221 001423 223 001424 224 001426 226 001427 229 001430 233 001446 234 001450 235 001462 236 001463 237 001464 238 001466 239 001500 240 001501 241 001502 242 001514 243 001515 244 001516 245 001527 246 001540 247 001545 248 001546 249 001556 251 001570 254 001571 259 001572 260 001603 261 001631 263 001736 264 001746 265 001750 266 001762 269 002027 271 002030 272 002033 273 002035 276 002036 278 002044 279 002047 280 002064 281 002102 283 002103 284 002123 286 002144 287 002151 288 002154 ----------------------------------------------------------- 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