COMPILATION LISTING OF SEGMENT sort_merge_initiate Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/11/82 1231.0 mst Thu 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 sort_merge_initiate: proc(keys_ptr, exits_ptr, user_out_sw_par, code); 11 dcl (keys_ptr ptr, /* Pointer to keys substructure (Input) */ 12 exits_ptr ptr, /* Pointer to exits substructure (Input) */ 13 user_out_sw_par char(*), /* Destination of Sort Report: (Input) 14* "" = normal (user_output); 15* "-bf" = none (discard); 16* "" = switchname. */ 17 code fixed bin(35) ) parameter; /* Status code (Output) */ 18 19 /* EXTERNAL ENTRIES */ 20 dcl convert_status_code_ entry(fixed bin(35), char(8) aligned, char(100) aligned); 21 dcl get_group_id_ entry returns(char(32)); 22 dcl get_pdir_ entry returns(char(168) aligned); 23 dcl hcs_$make_seg entry(char(*) aligned, char(*) aligned, char(*), fixed bin(5), ptr, fixed bin(35)); 24 dcl ioa_$ioa_stream entry options(variable); 25 26 dcl sort_build_keys entry(ptr, fixed bin(35)); 27 dcl sort_convert_internal$convert_datatype entry(ptr, fixed bin(17), fixed bin(17)); 28 /*1*/ dcl sort_$noexit entry external; 29 30 /* EXTERNAL STATIC */ 31 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); 32 33 34 dcl sys_info$max_seg_size fixed bin(35) external static; 35 dcl (error_table_$bad_arg, 36 error_table_$fatal_error) fixed bin(35) external static; 37 38 /* INTERNAL STATIC (constants only) */ 39 dcl (on bit(1) init("1"b), 40 off bit(1) init("0"b) ) internal static; 41 dcl keys_number_max fixed bin(17) init(32) internal static; /* Currently up to 32 keys. */ 42 dcl keys_version_max fixed bin(17) init(1) internal static; /* Currently 1 version only */ 43 dcl exits_version_max fixed bin(17) init(1) internal static; /* Currently 1 version only */ 44 45 /* AUTOMATIC and BASED */ 2 1 /* Sort Description, internal format. */ 2 2 2 3 dcl 1 keys based(work_ptr), 2 4 2 version fixed bin init(1), 2 5 2 number fixed bin, 2 6 2 key_desc(0 refer(keys.number)), 2 7 3 datatype char(8), 2 8 3 len fixed bin(24), 2 9 3 word_offset fixed bin(18), 2 10 3 bit_offset fixed bin(6), 2 11 3 rv char(3), 2 12 2 dummy fixed bin(71); 2 13 2 14 dcl 1 io_exits based(work_ptr), 2 15 2 version fixed bin init(1), 2 16 2 input_file_exit entry, 2 17 2 output_file_exit entry, 2 18 2 dummy fixed bin(71); 2 19 2 20 dcl 1 exits based(work_ptr), 2 21 2 version fixed bin init(1), 2 22 2 compare_exit entry, 2 23 2 input_record_exit entry, 2 24 2 output_record_exit entry, 2 25 2 dummy fixed bin(71); 2 26 46 47 48 dcl work_ptr ptr; 49 dcl keys_sw bit(1); 50 dcl arg_err_sw bit(1); 51 dcl fatal_sw bit(1); 52 dcl verify_keys_code fixed bin(35), 53 verify_exits_code fixed bin(35); 54 dcl hcs_code fixed bin(35), 55 shortinfo char(8) aligned, 56 longinfo char(100) aligned; 57 58 59 /* Start. */ 60 61 rec_ptr_a, 62 rec_ptr_b = null(); 63 code = 0; 64 arg_err_sw = off; 65 fatal_sw = off; 66 compares_counter, 67 presort_compares, /* Not used by Merge. */ 68 merge_compares = 0; 69 user_id = get_group_id_(); 70 max_rec_length = (sys_info$max_seg_size - 100)*4; 71 /* Must be set before call process_key_desc. */ 72 release_count = 0; /* not used by Merge. */ 73 return_count = 0; 74 75 /* keys_ptr: */ 76 call process_key_desc; 77 78 /* exits_ptr: */ 79 call initialize_exits; 80 81 /* Create temporary segments for output_record exit processing. */ 82 if output_record_exit_sw = 1 then do; 83 call hcs_$make_seg(get_pdir_(), unique_prefix||"sort_out_a_", "", 8+2, rec_ptr_a, hcs_code); 84 if rec_ptr_a = null() then do; 85 call unable_error("create", "sort_out_a_"); 86 end; 87 call hcs_$make_seg(get_pdir_(), unique_prefix||"sort_out_b_", "", 8+2, rec_ptr_b, hcs_code); 88 if rec_ptr_b = null() then do; 89 call unable_error("create", "sort_out_b_"); 90 end; 91 end; 92 93 /* Test if keys and compare are both present or are both absent: */ 94 if keys_sw = off & compare_sw = 0 then 95 do; 96 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 97 "^a: Neither key descriptions nor user compare exit procedure specified.", whoami); 98 arg_err_sw = on; 99 end; 100 if keys_sw = on & compare_sw = 1 then do; 101 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 102 "^a: Both key descriptions and user compare exit procedure specified.", whoami);; 103 arg_err_sw = on; 104 end; 105 106 /* report: */ 107 if user_out_sw = "" then report_sw = "01"b; /* Report suppressed. */ 108 else report_sw = "00"b; /* Produce report. */ 109 110 /* Test for errors detected: */ 111 if arg_err_sw = on then code = error_table_$bad_arg; 112 113 if fatal_sw = on then code = error_table_$fatal_error; 114 115 exit: 116 return; /* To caller (sort_initiate or merge_initiate). */ 117 118 119 initialize_exits: proc; 120 /* Set all exit switches to off (0). */ 121 compare_sw, 122 input_record_exit_sw, /* Not used by Merge. */ 123 output_record_exit_sw = 0; 124 if exits_ptr = null() then return; 125 work_ptr = exits_ptr; 126 call verify_exits(work_ptr, verify_exits_code); 127 if verify_exits_code ^= 0 then do; 128 arg_err_sw = on; 129 return; 130 end; 131 /* exits substructure is valid: set entry variables. */ 132 /*1*/ if exits.compare_exit ^= sort_$noexit then 133 do; 134 sort_ext$sort_compare_exit = exits.compare_exit; 135 compare_sw = 1; 136 end; 137 /*1*/ if exits.input_record_exit ^= sort_$noexit then do; 138 sort_input_record_exit = exits.input_record_exit; 139 input_record_exit_sw = 1; 140 if substr(whoami, 1, 5) = "merge" then do; 141 arg_err_sw = on; 142 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 143 "^a: Input_record exit not permitted.", 144 whoami); 145 end; 146 end; 147 /*1*/ if exits.output_record_exit ^= sort_$noexit then do; 148 sort_output_record_exit = exits.output_record_exit; 149 output_record_exit_sw = 1; 150 end; 151 return; 152 end initialize_exits; 153 154 155 verify_exits: proc(work_ptr, code); 156 /* Validate exits substructure. */ 157 dcl (work_ptr ptr, 158 code fixed bin(35) ) parameter; 159 160 if exits.version < 0 | exits.version > exits_version_max then do; 161 code = 1; 162 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 163 "^a: Exits structure has invalid version number ^d. Must be > 0 and <_ ^d.", 164 whoami, exits.version, exits_version_max); 165 end; 166 else code = 0; 167 end verify_exits; 168 169 process_key_desc: proc; 170 dcl code fixed bin(35); 171 keys_sw = off; 172 min_rec_length = 0; /* For sort_$release or merge_$return, in case no keys were specified */ 173 if keys_ptr = null() then return; 174 work_ptr = keys_ptr; 175 keys_sw = on; 176 call verify_keys(work_ptr, verify_keys_code); 177 if verify_keys_code ^= 0 then do; 178 arg_err_sw = on; 179 return; 180 end; 181 /* Convert keys substructure into faster form. /* 182*/* Separate arrays for (datatype, word_offset, bit_offset, len, rv) 183*and with appropriate data types and with ranges of (0:n-1). */ 184 185 call sort_build_keys(keys_ptr, code); 186 if code ^= 0 then do; 187 arg_err_sw = on; 188 end; 189 end process_key_desc; 190 191 192 verify_keys: proc(work_ptr, code); 193 /* Validate keys substructure. */ 194 dcl (work_ptr ptr, 195 code fixed bin(35) ) parameter; 196 197 dcl i fixed bin, 198 typecode fixed bin (17); 199 200 code = 0; 201 call check_structure; 202 if code = 1 then return; 203 do i = 1 to keys.number; 204 call sort_convert_internal$convert_datatype(work_ptr, i, typecode); 205 if typecode = 0 then do; 206 code = 1; 207 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 208 "^a: Key ^d has invalid data type ""^a"".", 209 whoami, i, datatype(i)); 210 end; 211 if len(i) <= 0 then do; 212 code = 1; 213 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 214 "^a: Key ^d has invalid length or precision ^d. Must be > 0.", 215 whoami, i, len(i)); 216 end; 217 if word_offset(i) < 0 then do; 218 call error(fixed(word_offset(i), 35), "word_offset", "", i); 219 end; 220 if bit_offset(i) < 0 | bit_offset(i) > 35 then do; 221 call error(fixed(bit_offset(i), 35), "bit offset", " and <_ 35", i); 222 end; 223 if rv(i) ^= "dsc" & rv(i) ^= "" then do; 224 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 225 "^a: Key ^d has invalid descending argument ""^a"". Must be ""dsc"" or """".", 226 whoami, i, rv(i)); 227 code = 1; 228 end; 229 end; /* of do */ 230 return; 231 232 check_structure: proc; 233 if keys.version <= 0 | keys.version > keys_version_max then 234 do; 235 code = 1; 236 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 237 "^a: Keys structure has invalid version number ^d. Must be > 0 and <_ ^d.", 238 whoami, keys.version, keys_version_max); 239 end; 240 if keys.number <=0 | keys.number > keys_number_max then 241 do; 242 code = 1; 243 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 244 "^a: Keys structure has invalid number of keys ^d. Must be > 0 and <_ ^d.", 245 whoami, keys.number, keys_number_max); 246 end; 247 end check_structure; 248 249 error: proc(value, literal, and, index); 250 dcl (value fixed bin(35), 251 literal char(*), 252 and char(*), 253 index fixed bin(17) ) parameter; 254 code = 1; 255 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 256 "^a: Key ^d has invalid ^a ^d. Must be >_ 0^a.", 257 whoami, index, literal, value, and); 258 end error; 259 end verify_keys; 260 261 262 unable_error: proc(action, name); 263 dcl (action, 264 name) char(*) parameter; 265 fatal_sw = on; 266 call convert_status_code_(hcs_code, shortinfo, longinfo); 267 if user_out_sw ^= "" then call ioa_$ioa_stream(user_out_sw, 268 "^a: ^a Unable to ^a temporary segment [pd]>^a^a", 269 whoami, longinfo, action, unique_prefix, name); 270 end unable_error; 271 272 end sort_merge_initiate; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/82 1024.9 sort_merge_initiate.pl1 >spec>on>11/11/82>sort_merge_initiate.pl1 32 1 12/20/77 1614.2 sort_ext.incl.pl1 >ldd>include>sort_ext.incl.pl1 46 2 04/26/76 1500.0 sort_sd.incl.pl1 >ldd>include>sort_sd.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. acl defined structure array level 1 unaligned dcl 1-6 action parameter char unaligned dcl 263 set ref 262 267* and parameter char unaligned dcl 250 set ref 249 255* arg_err_sw 000103 automatic bit(1) unaligned dcl 50 set ref 64* 98* 103* 111 128* 141* 178* 187* bit_offset 6 based fixed bin(6,0) array level 3 dcl 2-3 ref 220 220 221 221 code parameter fixed bin(35,0) dcl 11 in procedure "sort_merge_initiate" set ref 10 63* 111* 113* code parameter fixed bin(35,0) dcl 157 in procedure "verify_exits" set ref 155 161* 166* code parameter fixed bin(35,0) dcl 194 in procedure "verify_keys" set ref 192 200* 202 206* 212* 227* 235* 242* 254* code 000166 automatic fixed bin(35,0) dcl 170 in procedure "process_key_desc" set ref 185* 186 compare_exit 2 based entry variable level 2 dcl 2-20 ref 132 134 compare_sw defined fixed bin(1,0) dcl 1-19 set ref 94 100 121* 135* compares_counter defined fixed bin(34,0) dcl 1-16 set ref 66* convert_status_code_ 000014 constant entry external dcl 20 ref 266 datatype 2 based char(8) array level 3 packed unaligned dcl 2-3 set ref 207* error_table_$bad_arg 000106 external static fixed bin(35,0) dcl 35 ref 111 error_table_$fatal_error 000110 external static fixed bin(35,0) dcl 35 ref 113 exits based structure level 1 unaligned dcl 2-20 exits_ptr parameter pointer dcl 11 ref 10 124 125 exits_version_max 000012 internal static fixed bin(17,0) initial dcl 43 set ref 160 162* fatal_sw 000104 automatic bit(1) unaligned dcl 51 set ref 65* 113 265* get_group_id_ 000016 constant entry external dcl 21 ref 69 get_pdir_ 000020 constant entry external dcl 22 ref 83 83 87 87 hcs_$make_seg 000022 constant entry external dcl 23 ref 83 87 hcs_code 000107 automatic fixed bin(35,0) dcl 54 set ref 83* 87* 266* i 000176 automatic fixed bin(17,0) dcl 197 set ref 203* 204* 207* 207 211 213* 213 217 218 218 218* 220 220 221 221 221* 223 223 224* 224* index parameter fixed bin(17,0) dcl 250 set ref 249 255* input_record_exit 6 based entry variable level 2 dcl 2-20 ref 137 138 input_record_exit_sw defined fixed bin(1,0) dcl 1-56 set ref 121* 139* ioa_$ioa_stream 000024 constant entry external dcl 24 ref 96 101 142 162 207 213 224 236 243 255 267 key_desc 2 based structure array level 2 unaligned dcl 2-3 keys based structure level 1 unaligned dcl 2-3 keys_number_max 000010 internal static fixed bin(17,0) initial dcl 41 set ref 240 243* keys_ptr parameter pointer dcl 11 set ref 10 173 174 185* keys_sw 000102 automatic bit(1) unaligned dcl 49 set ref 94 100 171* 175* keys_version_max 000011 internal static fixed bin(17,0) initial dcl 42 set ref 233 236* len 4 based fixed bin(24,0) array level 3 dcl 2-3 set ref 211 213* literal parameter char unaligned dcl 250 set ref 249 255* longinfo 000112 automatic char(100) dcl 54 set ref 266* 267* max_rec_length defined fixed bin(30,0) dcl 1-84 set ref 70* merge_compares defined fixed bin(34,0) dcl 1-87 set ref 66* min_rec_length defined fixed bin(30,0) dcl 1-102 set ref 172* name parameter char unaligned dcl 263 set ref 262 267* number 1 based fixed bin(17,0) level 2 dcl 2-3 set ref 203 240 240 243* off constant bit(1) initial unaligned dcl 39 ref 64 65 94 171 on constant bit(1) initial unaligned dcl 39 ref 98 100 103 111 113 128 141 175 178 187 265 output_record_exit 12 based entry variable level 2 dcl 2-20 ref 147 148 output_record_exit_sw defined fixed bin(1,0) dcl 1-129 set ref 82 121* 149* presort_compares defined fixed bin(34,0) dcl 1-132 set ref 66* rec_ptr_a defined pointer dcl 1-145 set ref 61* 83* 84 rec_ptr_b defined pointer dcl 1-148 set ref 61* 87* 88 release_count defined fixed bin(30,0) dcl 1-151 set ref 72* report_sw defined bit(2) unaligned dcl 1-154 set ref 107* 108* return_count defined fixed bin(30,0) dcl 1-157 set ref 73* rv 7 based char(3) array level 3 packed unaligned dcl 2-3 set ref 223 223 224* shortinfo 000110 automatic char(8) dcl 54 set ref 266* sort_$noexit 000032 constant entry external dcl 28 ref 132 137 147 sort_build_keys 000026 constant entry external dcl 26 ref 185 sort_convert_internal$convert_datatype 000030 constant entry external dcl 27 ref 204 sort_ext$acl 000034 external static structure array level 1 unaligned dcl 1-1 ref 69 69 sort_ext$compare_sw 000040 external static fixed bin(1,0) dcl 1-18 set ref 94 94 100 100 121* 121 135* 135 sort_ext$compares_counter 000036 external static fixed bin(34,0) dcl 1-15 set ref 66* 66 sort_ext$input_record_exit_sw 000042 external static fixed bin(1,0) dcl 1-55 set ref 121* 121 139* 139 sort_ext$max_rec_length 000044 external static fixed bin(30,0) dcl 1-82 set ref 70* 70 sort_ext$merge_compares 000046 external static fixed bin(34,0) dcl 1-86 set ref 66* 66 sort_ext$min_rec_length 000050 external static fixed bin(30,0) dcl 1-101 set ref 172* 172 sort_ext$output_record_exit_sw 000052 external static fixed bin(1,0) dcl 1-128 set ref 82 82 121* 121 149* 149 sort_ext$presort_compares 000054 external static fixed bin(34,0) dcl 1-131 set ref 66* 66 sort_ext$rec_ptr_a 000056 external static pointer dcl 1-144 set ref 61* 61 83 83 84 84 sort_ext$rec_ptr_b 000060 external static pointer dcl 1-147 set ref 61* 61 87 87 88 88 sort_ext$release_count 000062 external static fixed bin(30,0) dcl 1-150 set ref 72* 72 sort_ext$report_sw 000064 external static bit(2) unaligned dcl 1-153 set ref 107* 107 108* 108 sort_ext$return_count 000066 external static fixed bin(30,0) dcl 1-156 set ref 73* 73 sort_ext$sort_compare_exit 000070 external static entry variable dcl 1-168 set ref 134* sort_ext$sort_input_record_exit 000072 external static entry variable dcl 1-173 set ref 138* 138 sort_ext$sort_output_record_exit 000074 external static entry variable dcl 1-178 set ref 148* 148 sort_ext$unique_prefix 000100 external static char(16) unaligned dcl 1-215 ref 83 83 87 87 267 267 sort_ext$user_out_sw 000076 external static char(32) unaligned dcl 1-212 ref 96 96 96 96 101 101 101 101 107 107 142 142 142 142 162 162 162 162 207 207 207 207 213 213 213 213 224 224 224 224 236 236 236 236 243 243 243 243 255 255 255 255 267 267 267 267 sort_ext$whoami 000102 external static char(6) unaligned dcl 1-227 ref 96 96 101 101 140 140 142 142 162 162 207 207 213 213 224 224 236 236 243 243 255 255 267 267 sort_input_record_exit defined entry variable dcl 1-175 set ref 138* sort_output_record_exit defined entry variable dcl 1-180 set ref 148* sys_info$max_seg_size 000104 external static fixed bin(35,0) dcl 34 ref 70 typecode 000177 automatic fixed bin(17,0) dcl 197 set ref 204* 205 unique_prefix defined char(16) unaligned dcl 1-216 set ref 83 87 267* user_id defined char(32) array level 2 packed unaligned dcl 1-6 set ref 69* user_out_sw defined char(32) unaligned dcl 1-213 set ref 96 96* 101 101* 107 142 142* 162 162* 207 207* 213 213* 224 224* 236 236* 243 243* 255 255* 267 267* user_out_sw_par parameter char unaligned dcl 11 ref 10 value parameter fixed bin(35,0) dcl 250 set ref 249 255* verify_exits_code 000106 automatic fixed bin(35,0) dcl 52 set ref 126* 127 verify_keys_code 000105 automatic fixed bin(35,0) dcl 52 set ref 176* 177 version based fixed bin(17,0) initial level 2 in structure "exits" dcl 2-20 in procedure "sort_merge_initiate" set ref 160 160 162* version based fixed bin(17,0) initial level 2 in structure "keys" dcl 2-3 in procedure "sort_merge_initiate" set ref 233 233 236* whoami defined char(6) unaligned dcl 1-228 set ref 96* 101* 140 142* 162* 207* 213* 224* 236* 243* 255* 267* word_offset 5 based fixed bin(18,0) array level 3 dcl 2-3 ref 217 218 218 work_ptr parameter pointer dcl 157 in procedure "verify_exits" ref 155 work_ptr parameter pointer dcl 194 in procedure "verify_keys" set ref 192 204* work_ptr 000100 automatic pointer dcl 48 in procedure "sort_merge_initiate" set ref 125* 126* 132 134 137 138 147 148 160 160 162 174* 176* 203 207 211 213 217 218 218 220 220 221 221 223 223 224 233 233 236 240 240 243 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. b defined fixed bin(30,0) array dcl 1-13 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 debug_sw defined bit(1) unaligned dcl 1-37 disaster2 defined fixed bin(17,0) dcl 1-40 dt defined fixed bin(30,0) array dcl 1-43 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 io_exits based structure level 1 unaligned dcl 2-14 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 merge_in_iocb_ptrs defined pointer array dcl 1-90 merge_input_file_attaches defined char(256) array unaligned dcl 1-93 merge_input_file_names defined char(256) array unaligned dcl 1-96 mii defined fixed bin(17,0) dcl 1-99 mip defined fixed bin(30,0) array dcl 1-105 msp defined pointer array dcl 1-108 no_of_keys defined fixed bin(30,0) dcl 1-111 old_input_file_num defined fixed bin(17,0) dcl 1-114 output_driver_is_sort defined bit(1) unaligned dcl 1-117 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 pu defined structure array level 1 unaligned dcl 1-137 read_count defined fixed bin(30,0) dcl 1-142 rev defined fixed bin(1,0) array dcl 1-160 sii defined fixed bin(30,0) dcl 1-163 sip defined pointer dcl 1-166 sort_desc_pn defined char(168) unaligned dcl 1-171 sort_ext$b external static fixed bin(30,0) array dcl 1-12 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$debug_sw external static bit(1) unaligned dcl 1-36 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$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$merge_in_iocb_ptrs external static pointer array dcl 1-89 sort_ext$merge_input_file_attaches external static char(256) array unaligned dcl 1-92 sort_ext$merge_input_file_names external static char(256) array unaligned dcl 1-95 sort_ext$mii external static fixed bin(17,0) dcl 1-98 sort_ext$mip external static fixed bin(30,0) array dcl 1-104 sort_ext$msp external static pointer array dcl 1-107 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_driver_is_sort external static bit(1) unaligned dcl 1-116 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$pu external static structure array level 1 unaligned dcl 1-134 sort_ext$read_count external static fixed bin(30,0) dcl 1-141 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$sip external static pointer dcl 1-165 sort_ext$sort_desc_pn external static char(168) unaligned dcl 1-170 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$state external static fixed bin(17,0) dcl 1-192 sort_ext$terminate_print_sw external static bit(1) unaligned dcl 1-195 sort_ext$time_info external static structure array level 1 unaligned dcl 1-198 sort_ext$time_sw external static bit(1) unaligned dcl 1-209 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 srp defined pointer dcl 1-184 ssi defined fixed bin(30,0) dcl 1-187 ssp defined pointer dcl 1-190 state defined fixed bin(17,0) dcl 1-193 terminate_print_sw defined bit(1) unaligned dcl 1-196 time_info defined structure array level 1 unaligned dcl 1-203 time_sw defined bit(1) unaligned dcl 1-210 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. check_structure 001602 constant entry internal dcl 232 ref 201 error 001725 constant entry internal dcl 249 ref 218 221 exit 000756 constant label dcl 115 initialize_exits 000757 constant entry internal dcl 119 ref 79 process_key_desc 001216 constant entry internal dcl 169 ref 76 sort_merge_initiate 000344 constant entry external dcl 10 unable_error 002022 constant entry internal dcl 262 ref 85 89 verify_exits 001142 constant entry internal dcl 155 ref 126 verify_keys 001263 constant entry internal dcl 192 ref 176 NAMES DECLARED BY CONTEXT OR IMPLICATION. fixed builtin function ref 218 218 221 221 null builtin function ref 61 84 88 124 173 substr builtin function ref 140 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2632 2744 2230 2642 Length 3260 2230 112 277 401 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sort_merge_initiate 510 external procedure is an external procedure. initialize_exits internal procedure shares stack frame of external procedure sort_merge_initiate. verify_exits internal procedure shares stack frame of external procedure sort_merge_initiate. process_key_desc internal procedure shares stack frame of external procedure sort_merge_initiate. verify_keys internal procedure shares stack frame of external procedure sort_merge_initiate. check_structure internal procedure shares stack frame of external procedure sort_merge_initiate. error internal procedure shares stack frame of external procedure sort_merge_initiate. unable_error internal procedure shares stack frame of external procedure sort_merge_initiate. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 keys_number_max sort_merge_initiate 000011 keys_version_max sort_merge_initiate 000012 exits_version_max sort_merge_initiate STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sort_merge_initiate 000100 work_ptr sort_merge_initiate 000102 keys_sw sort_merge_initiate 000103 arg_err_sw sort_merge_initiate 000104 fatal_sw sort_merge_initiate 000105 verify_keys_code sort_merge_initiate 000106 verify_exits_code sort_merge_initiate 000107 hcs_code sort_merge_initiate 000110 shortinfo sort_merge_initiate 000112 longinfo sort_merge_initiate 000166 code process_key_desc 000176 i verify_keys 000177 typecode verify_keys THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return mpfx2 ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_status_code_ get_group_id_ get_pdir_ hcs_$make_seg ioa_$ioa_stream sort_$noexit sort_build_keys sort_convert_internal$convert_datatype THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$fatal_error sort_ext$acl sort_ext$compare_sw sort_ext$compares_counter sort_ext$input_record_exit_sw sort_ext$max_rec_length sort_ext$merge_compares sort_ext$min_rec_length sort_ext$output_record_exit_sw sort_ext$presort_compares sort_ext$rec_ptr_a sort_ext$rec_ptr_b sort_ext$release_count sort_ext$report_sw sort_ext$return_count sort_ext$sort_compare_exit sort_ext$sort_input_record_exit sort_ext$sort_output_record_exit sort_ext$unique_prefix sort_ext$user_out_sw sort_ext$whoami sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 10 000337 61 000357 63 000362 64 000364 65 000365 66 000366 69 000371 70 000415 72 000427 73 000430 76 000431 79 000432 82 000433 83 000437 84 000513 85 000520 87 000531 88 000606 89 000613 94 000625 96 000632 98 000662 100 000664 101 000673 103 000723 107 000725 108 000740 111 000742 113 000750 115 000756 119 000757 121 000760 124 000764 125 000772 126 000775 127 000777 128 001001 129 001003 132 001004 134 001022 135 001027 137 001031 138 001045 139 001052 140 001054 141 001062 142 001064 147 001114 148 001132 149 001137 151 001141 155 001142 160 001144 161 001151 162 001153 165 001213 166 001214 167 001215 169 001216 171 001217 172 001220 173 001222 174 001230 175 001233 176 001235 177 001237 178 001241 179 001243 185 001244 186 001256 187 001260 189 001262 192 001263 200 001265 201 001266 202 001267 203 001274 204 001304 205 001320 206 001322 207 001325 211 001373 212 001401 213 001404 217 001450 218 001456 220 001466 221 001475 223 001512 224 001530 227 001574 229 001577 230 001601 232 001602 233 001603 235 001610 236 001613 240 001653 242 001661 243 001664 247 001724 249 001725 254 001743 255 001746 258 002021 262 002022 265 002040 266 002042 267 002055 270 002130 ----------------------------------------------------------- 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