COMPILATION LISTING OF SEGMENT sort_merge_command Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/11/82 1230.6 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 /* Modified on 02/17/82 by FCH, [1], version number printed */ 11 12 sort_merge_command: proc(input_file, output_file, sort_desc, temp_dir, user_out_sw_par, total_if_pns, 13 arg_err_sw, fatal_sw, no_args_sw, merge_order_par, string_size_par, 14 file_size_par, total_args, arg_list_ptr, perm_sd, temp_sd); 15 16 /* PARAMETERS */ 17 dcl (input_file(*) char(*), /* Input file pathnames or attach descriptions (Output). */ 18 output_file char(*), /* Output file pathname or attach description (Output). */ 19 sort_desc(1) ptr, /* Pointer to Sort/Merge Description (source form) (Output). */ 20 temp_dir char(*), /* Pathname of directory for work files (Output). */ 21 user_out_sw_par char(*), /* Switchname for diagnostics and Sort/Merge Report (Output). */ 22 total_if_pns fixed bin(35), /* Number of input files specified by user (Output). */ 23 arg_err_sw bit(1), /* Error(s) detected in arguments (Output). */ 24 fatal_sw bit(1), /* Fatal error detected (Output). */ 25 no_args_sw bit(1), /* no arguments specified - user will be prompted (Output). */ 26 merge_order_par fixed bin(35), /* Merge order specified by user (Output). */ 27 string_size_par fixed bin(35), /* String size specified by user (Output). */ 28 file_size_par float bin(27), /* File size specified by user (Output). */ 29 total_args fixed bin(35), /* Number of arguments specified (Input). */ 30 arg_list_ptr ptr, /* Pointer to command's argument list - sort or merge (Input). */ 31 perm_sd ptr, /* Pointer to Sort/Merge Description if -sd pn specified (Output) */ 32 temp_sd ptr ) parameter; /* Pointer to Sort/Merge Description when -ci specified (Output) */ 33 34 /* EXTERNAL ENTRIES */ 35 dcl convert_status_code_ entry(fixed bin(35), char(8) aligned, char(100) aligned); 36 dcl cu_$arg_ptr_rel entry(fixed bin, ptr, fixed bin, fixed bin(35), ptr); 37 dcl cv_dec_check_ entry(char(*), fixed bin(35)) returns(fixed bin(35)); 38 dcl cv_float_ entry(char(*), fixed bin(35), float bin(27)); 39 dcl expand_path_ entry(ptr, fixed bin, ptr, ptr, fixed bin(35)); 40 dcl get_pdir_ entry returns(char(168) aligned); 41 dcl hcs_$initiate entry(char(*) aligned, char(*) aligned, char(*), 42 fixed bin(1), fixed bin(2), ptr, fixed bin(35)), 43 hcs_$make_seg entry(char(*) aligned, char(*) aligned, char(*), fixed bin(5), ptr, fixed bin(35)), 44 hcs_$truncate_seg entry(ptr, fixed bin(24), fixed bin(35)), 45 hcs_$set_bc_seg entry(ptr, fixed bin(24), fixed bin(35)); 46 dcl ioa_ entry options(variable), 47 ioa_$nnl entry options(variable), 48 ioa_$ioa_switch entry options(variable); 49 dcl iox_$get_line entry(ptr, ptr, fixed bin(21), fixed bin(21), fixed bin(35)); 50 51 /* EXTERNAL STATIC */ 52 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); 53 54 dcl (iox_$user_output, 55 iox_$user_input, 56 iox_$user_io) ptr external static; 57 dcl (error_table_$bad_arg, 58 error_table_$bigarg) fixed bin(35) external; 59 60 /* INTERNAL STATIC (constants only) */ 61 dcl nl char(1) init(" 62 ") internal static; 63 dcl (on init("1"b), 64 off init("0"b) ) bit(1) internal static; 65 66 /* AUTOMATIC AND BASED */ 67 dcl shortinfo char(8) aligned, 68 longinfo char(100) aligned; 69 70 dcl none fixed bin(1); 71 72 dcl (if_arg_count, 73 of_arg_count, 74 td_arg_count, 75 file_size_arg_count, 76 ci_fi_arg_count, 77 time_arg_count, 78 merge_order_arg_count, 79 string_size_arg_count, 80 debug_arg_count, 81 bf_lg_arg_count) fixed bin(17); 82 83 dcl (total_of_pns, 84 total_td_pns, 85 total_file_size_args, 86 total_fi_pns, 87 total_merge_order_args, 88 total_string_size_args) fixed bin(17); 89 dcl temp_if_pns fixed bin(17); 90 91 dcl last_ci_fi char(16), 92 last_bf_lg char(8), 93 file_size char(16), 94 merge_order char(8), 95 string_size char(16); 96 97 dcl arg_num fixed bin, 98 arg_ptr ptr, 99 arg_len fixed bin, 100 cu_code fixed bin(35); 101 dcl argument char(arg_len) based(arg_ptr); 102 103 dcl pn_or_attach char(256); 104 dcl file_spec_keyword char(32); 105 106 dcl (expand_code, 107 cv_err) fixed bin(35); 108 109 dcl hcs_code fixed bin(35); 110 dcl iox_code fixed bin(35); 111 dcl process_dir char(168) aligned; 112 113 114 /* Start. */ 115 116 /* Set error switches off. */ 117 no_args_sw, fatal_sw, arg_err_sw = off; 118 119 /* Obtain all arguments of the command. */ 120 call get_all_args; 121 122 /* Process the arguments in appropriate sequence. 123* Report errors including inconsistencies between arguments. 124* Do not report on errors in Sort/Merge Description; 125* that is deferred until sort_(merge_) or sort_(merge_)$initiate. 126* Prepare parameters for call to sort_(merge_). */ 127 128 call process_ci_fi_arg; 129 call process_if_arg; 130 call process_of_arg; 131 call process_td_arg; 132 call process_file_size_arg; 133 call process_bf_lg_arg; 134 call process_time_arg; 135 call process_merge_order_arg; 136 call process_string_size_arg; 137 call process_debug_arg; 138 139 exit: 140 return; /* To caller (sort or merge). */ 141 142 143 get_all_args: proc; /* Get all arguments of command. */ 144 145 /* Set all argument counters = 0. */ 146 if_arg_count, 147 of_arg_count, 148 td_arg_count, /* Not used by merge. */ 149 file_size_arg_count, 150 ci_fi_arg_count, 151 bf_lg_arg_count, 152 time_arg_count, 153 merge_order_arg_count, /* Not used by merge. */ 154 string_size_arg_count, /* Not used by merge. */ 155 debug_arg_count = 0; 156 /* Set all path name counters = 0. */ 157 total_if_pns, temp_if_pns, 158 total_of_pns, 159 total_td_pns, /* Not used by merge. */ 160 total_fi_pns = 0; 161 if total_args = 0 then do; /* Prompt user. */ 162 /*1*/ call ioa_("^a: Version 2.0",whoami); 163 call ioa_("^a: Command and basic arguments are:", 164 whoami); 165 call ioa_("^2x^a {-if pn|-ids ""att_desc""} {-of pn|-ods ""att_desc""} {-ci|-^ad ^a_desc}", 166 whoami, substr(whoami, 1, 1), whoami); 167 no_args_sw = on; 168 go to exit; 169 end; 170 arg_num = 0; 171 172 /* Get first argument -- Sort/Merge Description: 173* call get_one_arg(none); 174* if none = 1 then do; 175* Error: Sort/Merge Description required, but will be detected later by process_ci_fi_arg. 176* return; 177* end; 178* call get_sd_arg; */ 179 get_next_arg: call get_one_arg(none); /* Get next argument of command. */ 180 if none = 1 then return; 181 if argument = "-input_file" | argument = "-if" 182 | argument = "-input_description" | argument = "-ids" then do; 183 call get_if_arg; 184 go to get_next_arg; 185 end; 186 else if argument = "-output_file" | argument = "-of" 187 | argument = "-output_description" | argument = "-ods" then do; 188 call get_of_arg; 189 go to get_next_arg; 190 end; 191 else if argument = "-temp_dir" | argument = "-td" | argument = "-temp_directory" then 192 do; /* Will be rejected later for merge. */ 193 call get_td_arg; 194 go to get_next_arg; 195 end; 196 else if argument = "-ci" | argument = "-console_input" then 197 do; /* Allow -ci argument to appear anywhere in command line. */ 198 call get_ci_arg; 199 go to get_next_arg; 200 end; 201 else if argument = "-sd" | argument = "-md" 202 | argument = "-sort_desc" | argument = "-merge_desc" 203 | argument = "-sort_description" | argument = "-merge_description" then do; 204 call get_sd_arg; 205 go to get_next_arg; 206 end; 207 else if argument = "-file_size" then do; 208 call get_file_size_arg; 209 go to get_next_arg; 210 end; 211 else if argument = "-brief" | argument = "-bf" then 212 do; 213 call get_bf_lg_arg; 214 go to get_next_arg; 215 end; 216 else if argument = "-time" | argument = "-tm" then do; 217 call get_time_arg; 218 go to get_next_arg; 219 end; 220 else if argument = "-merge_order" then do; /* Will be rejected later for merge. */ 221 call get_merge_order_arg; 222 go to get_next_arg; 223 end; 224 else if argument = "-string_size" then do; /* Will be rejected later for merge. */ 225 call get_string_size_arg; 226 go to get_next_arg; 227 end; 228 else if argument = "-debug" | argument = "-db" then do; 229 call get_debug_arg; 230 go to get_next_arg; 231 end; 232 else do; 233 /* Error: unrecognized control argument. */ 234 call convert_status_code_(error_table_$bad_arg, shortinfo, longinfo); 235 call ioa_$ioa_switch(iox_$user_output, "^a: ^a Argument ""^a"" is ignored.", whoami, longinfo, argument); 236 arg_err_sw = on; 237 go to get_next_arg; 238 end; 239 end get_all_args; 240 241 get_one_arg: proc(none); /* Get one argument of command: */ 242 dcl none fixed bin(1); /* value 1 = no next argument */ 243 244 loop: arg_num = arg_num + 1; 245 if arg_num > total_args then 246 do; 247 none = 1; 248 return; 249 end; 250 call cu_$arg_ptr_rel(arg_num, arg_ptr, arg_len, cu_code, arg_list_ptr); 251 if cu_code ^= 0 then 252 do; 253 call convert_status_code_(cu_code, shortinfo, longinfo); 254 call ioa_$ioa_switch(iox_$user_output, "^a: ^a Argument ^d", whoami, longinfo, arg_num); 255 fatal_sw = on; 256 return; 257 end; 258 if arg_len = 0 | argument = "" then 259 do; 260 arg_err_sw = on; 261 call ioa_$ioa_switch(iox_$user_output, "^a: Argument """" ignored.", whoami); 262 go to loop; 263 end; 264 if arg_len > 256 then 265 do; 266 arg_len = 256; 267 arg_err_sw = on; 268 call convert_status_code_(error_table_$bigarg, shortinfo, longinfo); 269 call ioa_$ioa_switch(iox_$user_output, "^a: ^a Argument ^a truncated.", whoami, longinfo, argument); 270 end; 271 none = 0; 272 end get_one_arg; 273 274 275 get_if_arg: proc; /* Get argument following input file specification keyword argument. */ 276 if_arg_count = if_arg_count + 1; 277 file_spec_keyword = argument; 278 call get_pn_or_attach; 279 if pn_or_attach = "" then return; /* No pathname or attach */ 280 temp_if_pns = temp_if_pns + 1; 281 if total_if_pns >= input_file_max then do; 282 arg_err_sw = on; 283 call ioa_$ioa_switch(iox_$user_output, 284 "^a: Too many input files specified. Specification ^a ^a for input file ^d ignored.", 285 whoami, file_spec_keyword, pn_or_attach, temp_if_pns); 286 return; 287 end; 288 total_if_pns = total_if_pns + 1; 289 input_file(total_if_pns) = before(file_spec_keyword, " ")||" "||pn_or_attach; 290 end get_if_arg; 291 292 293 get_of_arg: proc; /* Get word following input file specification keyword. */ 294 of_arg_count = of_arg_count + 1; 295 total_of_pns = 0; 296 output_file = ""; 297 file_spec_keyword = argument; 298 call get_pn_or_attach; 299 if pn_or_attach = "" then return; /* No pathname or attach. */ 300 total_of_pns = total_of_pns + 1; 301 output_file = before(file_spec_keyword, " ")||" "||pn_or_attach; 302 end get_of_arg; 303 304 305 get_pn_or_attach: proc; 306 pn_or_attach = ""; 307 call get_one_arg(none); 308 if none = 1 then do; /* No argument follows. */ 309 call no_pns_err(file_spec_keyword, " or attach description"); 310 end; 311 else if substr(argument, 1, 1) ^= "-" then do; /* Pathname or attach description. */ 312 pn_or_attach = argument; 313 end; 314 else if argument = "-rp" | argument = "-replace" then do; 315 pn_or_attach = argument; 316 end; 317 else do; /* Next control argument found. */ 318 arg_num = arg_num - 1; 319 call no_pns_err(file_spec_keyword, " or attach description"); 320 end; 321 end get_pn_or_attach; 322 323 324 get_td_arg: proc; /* Get path name or -pd or -wd following -td argument. */ 325 td_arg_count = td_arg_count + 1; 326 total_td_pns = 0; 327 temp_dir = "-pd"; 328 call get_one_arg(none); 329 if none = 1 then return; 330 if argument = "-process_directory" | argument = "-working_directory" 331 | argument = "-process_dir" | argument = "-working_dir" 332 | argument = "-pd" | argument = "-wd" 333 | substr(argument, 1, 1) ^= "-" then do; 334 total_td_pns = total_td_pns + 1; 335 temp_dir = argument; 336 return; 337 end; 338 else 339 /* argument begins with "-" (but is not "-pd" or "-wd"). */ 340 arg_num = arg_num - 1; /* Will be treated as next control argument. */ 341 return; 342 end get_td_arg; 343 344 345 get_ci_arg: proc; 346 ci_fi_arg_count = ci_fi_arg_count + 1; 347 last_ci_fi = "-console_input"; 348 end get_ci_arg; 349 350 351 get_sd_arg: proc; /* Get Sort/Merge Description argument: */ 352 ci_fi_arg_count = ci_fi_arg_count + 1; 353 total_fi_pns = 0; 354 call get_one_arg(none); 355 if none = 1 then return; 356 if substr(argument, 1, 1) = "-" then do; /* Found next control argument. */ 357 arg_num = arg_num - 1; 358 return; 359 end; 360 else do; 361 total_fi_pns = total_fi_pns + 1; 362 sort_desc_pn = argument; 363 last_ci_fi = "-fi"; /* Indicates that S.D. argument is a path name (file input). */ 364 end; 365 end get_sd_arg; 366 367 368 get_file_size_arg: proc; 369 file_size_arg_count = file_size_arg_count + 1; 370 total_file_size_args = 0; 371 call get_one_arg(none); 372 if none = 1 then return; 373 if substr(argument, 1, 1) = "-" then do; 374 arg_num = arg_num - 1; 375 return; 376 end; 377 else do; 378 total_file_size_args = total_file_size_args + 1; 379 if arg_len > 16 then do; 380 arg_err_sw = on; 381 call ioa_$ioa_switch(iox_$user_output, 382 "^a: -file_size argument too long. Must be <_ 16 characters.", 383 whoami); 384 end; 385 file_size = argument; 386 end; 387 end get_file_size_arg; 388 389 390 get_bf_lg_arg: proc; /* Count report arguments; save last value: */ 391 bf_lg_arg_count = bf_lg_arg_count + 1; 392 last_bf_lg = argument; 393 end get_bf_lg_arg; 394 395 396 get_time_arg: proc; 397 time_arg_count = time_arg_count + 1; 398 end get_time_arg; 399 400 401 get_merge_order_arg: proc; 402 merge_order_arg_count = merge_order_arg_count + 1; 403 total_merge_order_args = 0; 404 call get_one_arg(none); 405 if none = 1 then return; 406 if substr(argument, 1, 1) = "-" then do; 407 arg_num = arg_num - 1; 408 return; 409 end; 410 else do; 411 total_merge_order_args = total_merge_order_args + 1; 412 merge_order = argument; 413 end; 414 end get_merge_order_arg; 415 416 417 get_string_size_arg: proc; 418 string_size_arg_count = string_size_arg_count + 1; 419 total_string_size_args = 0; 420 call get_one_arg(none); 421 if none = 1 then return; 422 if substr(argument, 1, 1) = "-" then do; 423 arg_num = arg_num - 1; 424 return; 425 end; 426 else do; 427 total_string_size_args = total_string_size_args + 1; 428 string_size = argument; 429 end; 430 end get_string_size_arg; 431 432 433 get_debug_arg: proc; 434 debug_arg_count = debug_arg_count + 1; 435 end get_debug_arg; 436 437 438 process_if_arg: proc; 439 /* Process input file specification. */ 440 if if_arg_count <= 0 then /* No -if/-ids argument. */ 441 do; 442 input_file(1) = ""; /* Spaces will indicate no input files when sort_ is called. */ 443 return; 444 end; 445 end process_if_arg; 446 447 448 process_of_arg: proc; 449 /* Process output file specification. */ 450 if of_arg_count <= 0 then /* No -of/-ods argument. */ 451 do; 452 output_file = ""; 453 return; 454 end; 455 if of_arg_count > 1 then /* More than one -of/-ods argument. */ 456 do; 457 call arg_count_err("-output_file", of_arg_count); 458 end; 459 end process_of_arg; 460 461 462 process_td_arg: proc; 463 /* Process -temp_dir argument. */ 464 if td_arg_count <= 0 then 465 do; 466 temp_dir = "-pd"; /* default */ 467 return; 468 end; 469 if td_arg_count > 1 then /* More than one -td argument. */ 470 do; 471 call arg_count_err("-temp_dir", td_arg_count); 472 end; 473 if total_td_pns <= 0 then /* No path name (or -pd or -wd). */ 474 do; 475 call no_pns_err("-temp_dir", ""); 476 end; 477 if whoami = "merge" then call not_permitted("-temp_dir"); 478 end process_td_arg; 479 480 481 process_ci_fi_arg: proc; 482 /* Process console input - Sort/Merge Description path name arguments. 483* Get Sort/Merge Description. */ 484 if ci_fi_arg_count <= 0 then /* No S.D. argument. */ 485 do; 486 call ioa_$ioa_switch(iox_$user_output, 487 "^a: ^a Description not specified. Please specify either ""-ci"" or ""-^ad pathname"".", 488 whoami, caps(whoami), substr(whoami, 1, 1)); 489 fatal_sw = on; 490 return; /* Avoid getting Sort/Merge Description. */ 491 end; 492 if ci_fi_arg_count > 1 then /* More than one S.D. argument. */ 493 do; 494 call ioa_$ioa_switch(iox_$user_output, 495 "^a: ^a Description given ^d times.", 496 whoami, caps(whoami), ci_fi_arg_count); 497 arg_err_sw = on; 498 end; 499 call get_sort_desc; /* Get access to S.D. */ 500 return; 501 end process_ci_fi_arg; 502 503 504 caps: proc(whoami) returns(char(5)); 505 dcl whoami char(*) parameter; 506 if substr(whoami, 1, 4) = "sort" then return("Sort"); 507 else return("Merge"); 508 end caps; 509 510 511 get_sort_desc: proc; 512 /* Get access to Sort/Merge Description; set "sort_desc" = pointer to segment. */ 513 dcl dirname char(168) aligned, 514 ename char(32) aligned; 515 dcl line_buff char(200) aligned, 516 max_line_length fixed bin(21) init(200), 517 /* How long should the above be ?? */ 518 read_length fixed bin(21), 519 seg_length fixed bin(24), 520 string char(262144) based(sort_desc(1)); 521 522 if last_ci_fi = "-fi" then 523 /* File input: Initiate segment. */ 524 do; 525 call expand_path_(addr(sort_desc_pn), length(sort_desc_pn), addr(dirname), addr(ename), expand_code); 526 if expand_code ^= 0 then 527 do; 528 call sd_err(expand_code); 529 return; 530 end; 531 call hcs_$initiate(dirname, ename, "", 0, 0, perm_sd, hcs_code); 532 /* ?? Test for error_table_$segknown ?? */ 533 if perm_sd = null() then 534 do; 535 call sd_err(hcs_code); 536 return; 537 end; 538 sort_desc(1) = perm_sd; 539 return; 540 end; /* of file input. */ 541 else 542 /* Console input: Read user_input and store in temporary segment (whose name ends in ".sort_par_"). */ 543 do; 544 process_dir = get_pdir_(); 545 /* Set "sort_desc". */ 546 sort_desc_pn = "[pd]>"||unique_prefix||"sort_par_"; 547 call hcs_$make_seg(process_dir, unique_prefix||"sort_par_", "", 8+2 /* rw */ , temp_sd, hcs_code); 548 /* ?? check error code ?? */ 549 if temp_sd = null() then 550 do; 551 call unable_err(hcs_code, "create"); 552 return; 553 end; 554 sort_desc(1) = temp_sd; 555 call ioa_$ioa_switch(iox_$user_io, "Input:"); 556 seg_length = 0; 557 get_line: 558 call iox_$get_line(iox_$user_input, addr(line_buff), max_line_length, read_length, iox_code); 559 if iox_code ^= 0 then do; 560 fatal_sw = on; 561 call convert_status_code_(iox_code, shortinfo, longinfo); 562 call ioa_$ioa_switch(iox_$user_output, 563 "^a: ^a ^a Description from user_input.", 564 whoami, longinfo, caps(whoami)); 565 return; 566 end; 567 if substr(line_buff, 1, 2) = "."||nl then go to end_line; 568 substr(string, seg_length + 1, read_length) = substr(line_buff, 1, read_length); 569 seg_length = seg_length + read_length; 570 go to get_line; 571 end_line: 572 call hcs_$truncate_seg(sort_desc(1), divide(seg_length+3, 4, 24, 0), hcs_code); 573 if hcs_code ^= 0 then do; 574 call unable_err(hcs_code, "truncate"); 575 end; 576 call hcs_$set_bc_seg(sort_desc(1), seg_length*9, hcs_code); 577 if hcs_code ^= 0 then 578 do; 579 call unable_err(hcs_code, "set bit count for"); 580 end; 581 return; 582 end; /* of console input. */ 583 end get_sort_desc; 584 585 586 process_file_size_arg: proc; 587 file_size_par = 0; 588 if file_size_arg_count <= 0 then return; 589 if file_size_arg_count > 1 then call arg_count_err("-file_size", file_size_arg_count); 590 if total_file_size_args <= 0 then call no_value_err("-file_size"); 591 else do; 592 call cv_float_(file_size, cv_err, file_size_par); 593 if cv_err ^= 0 then do; 594 arg_err_sw = on; 595 call ioa_$ioa_switch(iox_$user_output, 596 "^a: -file_size argument has invalid value ""^a"". Must be a decimal number.", 597 whoami, file_size); 598 end; 599 end; 600 if whoami = "merge" then call not_permitted("-file_size"); 601 end process_file_size_arg; 602 603 604 process_bf_lg_arg: proc; 605 /* Process -brief report argument: 606* prepare report parameter. */ 607 user_out_sw_par = ""; /* Report always produced */ 608 user_out_sw = "user_output"; /* on user_output. */ 609 if bf_lg_arg_count <= 0 then return; /* No report argument. */ 610 else call ioa_$ioa_switch(iox_$user_output, "^a: Warning: -brief argument no longer supported.", whoami); 611 end process_bf_lg_arg; 612 613 614 process_time_arg: proc; 615 /* Process -time argument: set time_sw. */ 616 if time_arg_count <= 0 then do; 617 time_sw = off; 618 end; 619 else if time_arg_count >= 1 then do; /* Ignore multiple occurrences */ 620 time_sw = on; 621 end; 622 end process_time_arg; 623 624 625 process_merge_order_arg: proc; 626 /* Process -merge_order argument: check integer > 0, 627* prepare merge_order_parameter. */ 628 merge_order_par = 0; 629 if merge_order_arg_count <= 0 then return; /* Merge order not specified. */ 630 if merge_order_arg_count > 1 then do; /* Merge order specified more than once. */ 631 call arg_count_err("-merge_order", merge_order_arg_count); 632 end; 633 if total_merge_order_args <= 0 then 634 call no_value_err("-merge_order"); 635 else do; 636 merge_order_par = cv_dec_check_(merge_order, cv_err); 637 if cv_err ^= 0 | merge_order_par <= 0 then 638 call value_err("-merge_order", merge_order); 639 end; 640 if whoami = "merge" then call not_permitted("-merge_order"); 641 end process_merge_order_arg; 642 643 644 process_string_size_arg: proc; 645 /* Process -string_size argument: check integer > 0, 646* prepare string_size parameter. */ 647 string_size_par = 0; 648 if string_size_arg_count <= 0 then return; 649 if string_size_arg_count > 1 then /* String size specified more than once */ 650 call arg_count_err("-string_size", string_size_arg_count); 651 if total_string_size_args <= 0 then 652 call no_value_err("-string_size"); 653 else do; 654 string_size_par = cv_dec_check_(string_size, cv_err); 655 if cv_err ^= 0 | string_size_par <= 0 then 656 call value_err("-string_size", string_size); 657 end; 658 if whoami = "merge" then call not_permitted("-string_size"); 659 end process_string_size_arg; 660 661 662 process_debug_arg: proc; 663 /* Process -debug argument: set debug_sw. */ 664 if debug_arg_count <= 0 then debug_sw = off; 665 else if debug_arg_count >= 1 then /* ignore multiple occurrences */ 666 debug_sw = on; 667 end process_debug_arg; 668 669 670 not_permitted: proc(name); 671 dcl name char(*) parameter; 672 arg_err_sw = on; 673 call ioa_$ioa_switch(iox_$user_output, 674 "^a: ^a argument not permitted.", 675 whoami, name); 676 end not_permitted; 677 678 679 arg_count_err: proc(arg1, count); 680 /* Multiple specification of an argument. */ 681 dcl arg1 char(*), 682 count fixed bin(17); 683 call ioa_$ioa_switch(iox_$user_output, "^a: ^a argument given ^d times.", whoami, arg1, count); 684 arg_err_sw = on; 685 end arg_count_err; 686 687 sd_err: proc(code); 688 dcl code fixed bin(35) parameter; 689 fatal_sw = on; 690 call convert_status_code_(code, shortinfo, longinfo); 691 call ioa_$ioa_switch(iox_$user_output, "^a: ^a ^a Description pathname ^a", 692 whoami, longinfo, caps(whoami), sort_desc_pn); 693 end sd_err; 694 695 unable_err: proc(code, action); 696 dcl (code fixed bin(35), 697 action char(*) ) parameter; 698 fatal_sw = on; 699 call convert_status_code_(code, shortinfo, longinfo); 700 call ioa_$ioa_switch(iox_$user_output, "^a: ^a Unable to ^a temporary segment [pd]>^asort_par_", 701 whoami, longinfo, action, unique_prefix); 702 end unable_err; 703 704 705 no_pns_err: proc(name, attach); 706 /* Argument given without pathname or attach. */ 707 dcl (name char(*), 708 attach char(*) ) parameter; 709 arg_err_sw = on; 710 call ioa_$ioa_switch(iox_$user_output, "^a: ^a argument present but no pathname^a given.", 711 whoami, name, attach); 712 end no_pns_err; 713 714 715 no_value_err: proc(name); 716 dcl name char(*); 717 arg_err_sw = on; 718 call ioa_$ioa_switch(iox_$user_output, "^a: ^a argument present but no value given.", whoami, name); 719 end no_value_err; 720 721 722 value_err: proc(name, value); 723 dcl (name, 724 value) char(*); 725 arg_err_sw = on; 726 call ioa_$ioa_switch(iox_$user_output, "^a: ^a argument has invalid value ^a. Must be a positive integer.", 727 whoami, name, value); 728 end value_err; 729 730 731 732 end sort_merge_command; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/82 1024.7 sort_merge_command.pl1 >spec>on>11/11/82>sort_merge_command.pl1 53 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. action parameter char unaligned dcl 696 set ref 695 700* arg1 parameter char unaligned dcl 681 set ref 679 683* arg_err_sw parameter bit(1) unaligned dcl 17 set ref 12 117* 236* 260* 267* 282* 380* 497* 594* 672* 684* 709* 717* 725* arg_len 000202 automatic fixed bin(17,0) dcl 97 set ref 181 181 181 181 186 186 186 186 191 191 191 196 196 201 201 201 201 201 201 207 211 211 216 216 220 224 228 228 235 235 250* 258 258 264 266* 269 269 277 297 311 312 314 314 315 330 330 330 330 330 330 330 335 356 362 373 379 385 392 406 412 422 428 arg_list_ptr parameter pointer dcl 17 set ref 12 250* arg_num 000176 automatic fixed bin(17,0) dcl 97 set ref 170* 244* 244 245 250* 254* 318* 318 338* 338 357* 357 374* 374 407* 407 423* 423 arg_ptr 000200 automatic pointer dcl 97 set ref 181 181 181 181 186 186 186 186 191 191 191 196 196 201 201 201 201 201 201 207 211 211 216 216 220 224 228 228 235 250* 258 269 277 297 311 312 314 314 315 330 330 330 330 330 330 330 335 356 362 373 385 392 406 412 422 428 argument based char unaligned dcl 101 set ref 181 181 181 181 186 186 186 186 191 191 191 196 196 201 201 201 201 201 201 207 211 211 216 216 220 224 228 228 235* 258 269* 277 297 311 312 314 314 315 330 330 330 330 330 330 330 335 356 362 373 385 392 406 412 422 428 attach parameter char unaligned dcl 707 set ref 705 710* bf_lg_arg_count 000145 automatic fixed bin(17,0) dcl 72 set ref 146* 391* 391 609 ci_fi_arg_count 000140 automatic fixed bin(17,0) dcl 72 set ref 146* 346* 346 352* 352 484 492 494* code parameter fixed bin(35,0) dcl 696 in procedure "unable_err" set ref 695 699* code parameter fixed bin(35,0) dcl 688 in procedure "sd_err" set ref 687 690* convert_status_code_ 000010 constant entry external dcl 35 ref 234 253 268 561 690 699 count parameter fixed bin(17,0) dcl 681 set ref 679 683* cu_$arg_ptr_rel 000012 constant entry external dcl 36 ref 250 cu_code 000203 automatic fixed bin(35,0) dcl 97 set ref 250* 251 253* cv_dec_check_ 000014 constant entry external dcl 37 ref 636 654 cv_err 000315 automatic fixed bin(35,0) dcl 106 set ref 592* 593 636* 637 654* 655 cv_float_ 000016 constant entry external dcl 38 ref 592 debug_arg_count 000144 automatic fixed bin(17,0) dcl 72 set ref 146* 434* 434 664 665 debug_sw defined bit(1) unaligned dcl 1-37 set ref 664* 665* dirname 000562 automatic char(168) dcl 513 set ref 525 525 531* ename 000634 automatic char(32) dcl 513 set ref 525 525 531* error_table_$bad_arg 000066 external static fixed bin(35,0) dcl 57 set ref 234* error_table_$bigarg 000070 external static fixed bin(35,0) dcl 57 set ref 268* expand_code 000314 automatic fixed bin(35,0) dcl 106 set ref 525* 526 528* expand_path_ 000020 constant entry external dcl 39 ref 525 fatal_sw parameter bit(1) unaligned dcl 17 set ref 12 117* 255* 489* 560* 689* 698* file_size 000164 automatic char(16) unaligned dcl 91 set ref 385* 592* 595* file_size_arg_count 000137 automatic fixed bin(17,0) dcl 72 set ref 146* 369* 369 588 589 589* file_size_par parameter float bin(27) dcl 17 set ref 12 587* 592* file_spec_keyword 000304 automatic char(32) unaligned dcl 104 set ref 277* 283* 289 297* 301 309* 319* get_pdir_ 000022 constant entry external dcl 40 ref 544 hcs_$initiate 000024 constant entry external dcl 41 ref 531 hcs_$make_seg 000026 constant entry external dcl 41 ref 547 hcs_$set_bc_seg 000032 constant entry external dcl 41 ref 576 hcs_$truncate_seg 000030 constant entry external dcl 41 ref 571 hcs_code 000316 automatic fixed bin(35,0) dcl 109 set ref 531* 535* 547* 551* 571* 573 574* 576* 577 579* if_arg_count 000134 automatic fixed bin(17,0) dcl 72 set ref 146* 276* 276 440 input_file parameter char array unaligned dcl 17 set ref 12 289* 442* input_file_max defined fixed bin(17,0) dcl 1-53 ref 281 ioa_ 000034 constant entry external dcl 46 ref 162 163 165 ioa_$ioa_switch 000036 constant entry external dcl 46 ref 235 254 261 269 283 381 486 494 555 562 595 610 673 683 691 700 710 718 726 iox_$get_line 000040 constant entry external dcl 49 ref 557 iox_$user_input 000062 external static pointer dcl 54 set ref 557* iox_$user_io 000064 external static pointer dcl 54 set ref 555* iox_$user_output 000060 external static pointer dcl 54 set ref 235* 254* 261* 269* 283* 381* 486* 494* 562* 595* 610* 673* 683* 691* 700* 710* 718* 726* iox_code 000317 automatic fixed bin(35,0) dcl 110 set ref 557* 559 561* last_bf_lg 000162 automatic char(8) unaligned dcl 91 set ref 392* last_ci_fi 000155 automatic char(16) unaligned dcl 91 set ref 347* 363* 522 line_buff 000644 automatic char(200) dcl 515 set ref 557 557 567 568 longinfo 000102 automatic char(100) dcl 67 set ref 234* 235* 253* 254* 268* 269* 561* 562* 690* 691* 699* 700* max_line_length 000726 automatic fixed bin(21,0) initial dcl 515 set ref 515* 557* merge_order 000170 automatic char(8) unaligned dcl 91 set ref 412* 636* 637* merge_order_arg_count 000142 automatic fixed bin(17,0) dcl 72 set ref 146* 402* 402 629 630 631* merge_order_par parameter fixed bin(35,0) dcl 17 set ref 12 628* 636* 637 name parameter char unaligned dcl 707 in procedure "no_pns_err" set ref 705 710* name parameter char unaligned dcl 716 in procedure "no_value_err" set ref 715 718* name parameter char unaligned dcl 671 in procedure "not_permitted" set ref 670 673* name parameter char unaligned dcl 723 in procedure "value_err" set ref 722 726* nl constant char(1) initial unaligned dcl 61 ref 567 no_args_sw parameter bit(1) unaligned dcl 17 set ref 12 117* 167* none 000133 automatic fixed bin(1,0) dcl 70 in procedure "sort_merge_command" set ref 179* 180 307* 308 328* 329 354* 355 371* 372 404* 405 420* 421 none parameter fixed bin(1,0) dcl 242 in procedure "get_one_arg" set ref 241 247* 271* of_arg_count 000135 automatic fixed bin(17,0) dcl 72 set ref 146* 294* 294 450 455 457* off constant bit(1) initial unaligned dcl 63 ref 117 617 664 on constant bit(1) initial unaligned dcl 63 ref 167 236 255 260 267 282 380 489 497 560 594 620 665 672 684 689 698 709 717 725 output_file parameter char unaligned dcl 17 set ref 12 296* 301* 452* perm_sd parameter pointer dcl 17 set ref 12 531* 533 538 pn_or_attach 000204 automatic char(256) unaligned dcl 103 set ref 279 283* 289 299 301 306* 312* 315* process_dir 000320 automatic char(168) dcl 111 set ref 544* 547* read_length 000727 automatic fixed bin(21,0) dcl 515 set ref 557* 568 568 569 seg_length 000730 automatic fixed bin(24,0) dcl 515 set ref 556* 568 569* 569 571 571 576 shortinfo 000100 automatic char(8) dcl 67 set ref 234* 253* 268* 561* 690* 699* sort_desc parameter pointer array dcl 17 set ref 12 538* 554* 568 571* 576* sort_desc_pn defined char(168) unaligned dcl 1-171 set ref 362* 525 525 525 525 546* 691* sort_ext$debug_sw 000042 external static bit(1) unaligned dcl 1-36 set ref 664* 664 665* 665 sort_ext$input_file_max 000044 external static fixed bin(17,0) dcl 1-51 ref 281 281 sort_ext$sort_desc_pn 000046 external static char(168) unaligned dcl 1-170 set ref 362* 362 525 525 525 525 525 525 525 525 546* 546 691 691 sort_ext$time_sw 000050 external static bit(1) unaligned dcl 1-209 set ref 617* 617 620* 620 sort_ext$unique_prefix 000054 external static char(16) unaligned dcl 1-215 ref 546 546 547 547 700 700 sort_ext$user_out_sw 000052 external static char(32) unaligned dcl 1-212 set ref 608* 608 sort_ext$whoami 000056 external static char(6) unaligned dcl 1-227 ref 162 162 163 163 165 165 165 165 165 165 165 165 235 235 254 254 261 261 269 269 283 283 381 381 477 477 486 486 486 486 486 486 486 486 486 486 494 494 494 494 494 494 562 562 562 562 562 562 595 595 600 600 610 610 640 640 658 658 673 673 683 683 691 691 691 691 691 691 700 700 710 710 718 718 726 726 string based char(262144) unaligned dcl 515 set ref 568* string_size 000172 automatic char(16) unaligned dcl 91 set ref 428* 654* 655* string_size_arg_count 000143 automatic fixed bin(17,0) dcl 72 set ref 146* 418* 418 648 649 649* string_size_par parameter fixed bin(35,0) dcl 17 set ref 12 647* 654* 655 td_arg_count 000136 automatic fixed bin(17,0) dcl 72 set ref 146* 325* 325 464 469 471* temp_dir parameter char unaligned dcl 17 set ref 12 327* 335* 466* temp_if_pns 000154 automatic fixed bin(17,0) dcl 89 set ref 157* 280* 280 283* temp_sd parameter pointer dcl 17 set ref 12 547* 549 554 time_arg_count 000141 automatic fixed bin(17,0) dcl 72 set ref 146* 397* 397 616 619 time_sw defined bit(1) unaligned dcl 1-210 set ref 617* 620* total_args parameter fixed bin(35,0) dcl 17 ref 12 161 245 total_fi_pns 000151 automatic fixed bin(17,0) dcl 83 set ref 157* 353* 361* 361 total_file_size_args 000150 automatic fixed bin(17,0) dcl 83 set ref 370* 378* 378 590 total_if_pns parameter fixed bin(35,0) dcl 17 set ref 12 157* 281 288* 288 289 total_merge_order_args 000152 automatic fixed bin(17,0) dcl 83 set ref 403* 411* 411 633 total_of_pns 000146 automatic fixed bin(17,0) dcl 83 set ref 157* 295* 300* 300 total_string_size_args 000153 automatic fixed bin(17,0) dcl 83 set ref 419* 427* 427 651 total_td_pns 000147 automatic fixed bin(17,0) dcl 83 set ref 157* 326* 334* 334 473 unique_prefix defined char(16) unaligned dcl 1-216 set ref 546 547 700* user_out_sw defined char(32) unaligned dcl 1-213 set ref 608* user_out_sw_par parameter char unaligned dcl 17 set ref 12 607* value parameter char unaligned dcl 723 set ref 722 726* whoami parameter char unaligned dcl 505 in procedure "caps" ref 504 506 whoami defined char(6) unaligned dcl 1-228 in procedure "sort_merge_command" set ref 162* 163* 165* 165 165 165* 235* 254* 261* 269* 283* 381* 477 486* 486* 486* 486 486 494* 494* 494* 562* 562* 562* 595* 600 610* 640 658 673* 683* 691* 691* 691* 700* 710* 718* 726* 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 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_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 ioa_$nnl 000000 constant entry external dcl 46 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_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 min_rec_length defined fixed bin(30,0) dcl 1-102 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 output_record_exit_sw defined fixed bin(1,0) dcl 1-129 presort_compares defined fixed bin(34,0) dcl 1-132 pu defined structure array level 1 unaligned dcl 1-137 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 sip defined pointer dcl 1-166 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_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$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$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$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$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$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$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$sip external static pointer dcl 1-165 sort_ext$sort_compare_exit external static entry variable dcl 1-168 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$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$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_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 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 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. arg_count_err 004260 constant entry internal dcl 679 ref 457 471 589 631 649 caps 002772 constant entry internal dcl 504 ref 486 486 494 494 562 562 691 691 end_line 003444 constant label dcl 571 ref 567 exit 000752 constant label dcl 139 ref 168 get_all_args 000753 constant entry internal dcl 143 ref 120 get_bf_lg_arg 002376 constant entry internal dcl 390 ref 213 get_ci_arg 002250 constant entry internal dcl 345 ref 198 get_debug_arg 002467 constant entry internal dcl 433 ref 229 get_file_size_arg 002312 constant entry internal dcl 368 ref 208 get_if_arg 001636 constant entry internal dcl 275 ref 183 get_line 003305 constant label dcl 557 ref 570 get_merge_order_arg 002411 constant entry internal dcl 401 ref 221 get_next_arg 001100 constant label dcl 179 ref 184 189 194 199 205 209 214 218 222 226 230 237 get_of_arg 002005 constant entry internal dcl 293 ref 188 get_one_arg 001376 constant entry internal dcl 241 ref 179 307 328 354 371 404 420 get_pn_or_attach 002072 constant entry internal dcl 305 ref 278 298 get_sd_arg 002256 constant entry internal dcl 351 ref 204 get_sort_desc 003023 constant entry internal dcl 511 ref 499 get_string_size_arg 002440 constant entry internal dcl 417 ref 225 get_td_arg 002160 constant entry internal dcl 324 ref 193 get_time_arg 002406 constant entry internal dcl 396 ref 217 loop 001400 constant label dcl 244 ref 262 no_pns_err 004532 constant entry internal dcl 705 ref 309 319 475 no_value_err 004614 constant entry internal dcl 715 ref 590 633 651 not_permitted 004207 constant entry internal dcl 670 ref 477 600 640 658 process_bf_lg_arg 003664 constant entry internal dcl 604 ref 133 process_ci_fi_arg 002623 constant entry internal dcl 481 ref 128 process_debug_arg 004172 constant entry internal dcl 662 ref 137 process_file_size_arg 003526 constant entry internal dcl 586 ref 132 process_if_arg 002472 constant entry internal dcl 438 ref 129 process_merge_order_arg 003744 constant entry internal dcl 625 ref 135 process_of_arg 002515 constant entry internal dcl 448 ref 130 process_string_size_arg 004061 constant entry internal dcl 644 ref 136 process_td_arg 002541 constant entry internal dcl 462 ref 131 process_time_arg 003727 constant entry internal dcl 614 ref 134 sd_err 004335 constant entry internal dcl 687 ref 528 535 sort_merge_command 000666 constant entry external dcl 12 unable_err 004435 constant entry internal dcl 695 ref 551 574 579 value_err 004665 constant entry internal dcl 722 ref 637 655 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 525 525 525 525 525 525 557 557 before builtin function ref 289 301 divide builtin function ref 571 571 length builtin function ref 525 525 null builtin function ref 533 549 substr builtin function set ref 165 165 311 330 356 373 406 422 486 486 506 567 568* 568 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5504 5576 5210 5514 Length 6110 5210 72 276 273 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sort_merge_command 1294 external procedure is an external procedure. get_all_args internal procedure shares stack frame of external procedure sort_merge_command. get_one_arg internal procedure shares stack frame of external procedure sort_merge_command. get_if_arg internal procedure shares stack frame of external procedure sort_merge_command. get_of_arg internal procedure shares stack frame of external procedure sort_merge_command. get_pn_or_attach internal procedure shares stack frame of external procedure sort_merge_command. get_td_arg internal procedure shares stack frame of external procedure sort_merge_command. get_ci_arg internal procedure shares stack frame of external procedure sort_merge_command. get_sd_arg internal procedure shares stack frame of external procedure sort_merge_command. get_file_size_arg internal procedure shares stack frame of external procedure sort_merge_command. get_bf_lg_arg internal procedure shares stack frame of external procedure sort_merge_command. get_time_arg internal procedure shares stack frame of external procedure sort_merge_command. get_merge_order_arg internal procedure shares stack frame of external procedure sort_merge_command. get_string_size_arg internal procedure shares stack frame of external procedure sort_merge_command. get_debug_arg internal procedure shares stack frame of external procedure sort_merge_command. process_if_arg internal procedure shares stack frame of external procedure sort_merge_command. process_of_arg internal procedure shares stack frame of external procedure sort_merge_command. process_td_arg internal procedure shares stack frame of external procedure sort_merge_command. process_ci_fi_arg internal procedure shares stack frame of external procedure sort_merge_command. caps internal procedure shares stack frame of external procedure sort_merge_command. get_sort_desc internal procedure shares stack frame of external procedure sort_merge_command. process_file_size_arg internal procedure shares stack frame of external procedure sort_merge_command. process_bf_lg_arg internal procedure shares stack frame of external procedure sort_merge_command. process_time_arg internal procedure shares stack frame of external procedure sort_merge_command. process_merge_order_arg internal procedure shares stack frame of external procedure sort_merge_command. process_string_size_arg internal procedure shares stack frame of external procedure sort_merge_command. process_debug_arg internal procedure shares stack frame of external procedure sort_merge_command. not_permitted internal procedure shares stack frame of external procedure sort_merge_command. arg_count_err internal procedure shares stack frame of external procedure sort_merge_command. sd_err internal procedure shares stack frame of external procedure sort_merge_command. unable_err internal procedure shares stack frame of external procedure sort_merge_command. no_pns_err internal procedure shares stack frame of external procedure sort_merge_command. no_value_err internal procedure shares stack frame of external procedure sort_merge_command. value_err internal procedure shares stack frame of external procedure sort_merge_command. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sort_merge_command 000100 shortinfo sort_merge_command 000102 longinfo sort_merge_command 000133 none sort_merge_command 000134 if_arg_count sort_merge_command 000135 of_arg_count sort_merge_command 000136 td_arg_count sort_merge_command 000137 file_size_arg_count sort_merge_command 000140 ci_fi_arg_count sort_merge_command 000141 time_arg_count sort_merge_command 000142 merge_order_arg_count sort_merge_command 000143 string_size_arg_count sort_merge_command 000144 debug_arg_count sort_merge_command 000145 bf_lg_arg_count sort_merge_command 000146 total_of_pns sort_merge_command 000147 total_td_pns sort_merge_command 000150 total_file_size_args sort_merge_command 000151 total_fi_pns sort_merge_command 000152 total_merge_order_args sort_merge_command 000153 total_string_size_args sort_merge_command 000154 temp_if_pns sort_merge_command 000155 last_ci_fi sort_merge_command 000162 last_bf_lg sort_merge_command 000164 file_size sort_merge_command 000170 merge_order sort_merge_command 000172 string_size sort_merge_command 000176 arg_num sort_merge_command 000200 arg_ptr sort_merge_command 000202 arg_len sort_merge_command 000203 cu_code sort_merge_command 000204 pn_or_attach sort_merge_command 000304 file_spec_keyword sort_merge_command 000314 expand_code sort_merge_command 000315 cv_err sort_merge_command 000316 hcs_code sort_merge_command 000317 iox_code sort_merge_command 000320 process_dir sort_merge_command 000562 dirname get_sort_desc 000634 ename get_sort_desc 000644 line_buff get_sort_desc 000726 max_line_length get_sort_desc 000727 read_length get_sort_desc 000730 seg_length get_sort_desc THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_status_code_ cu_$arg_ptr_rel cv_dec_check_ cv_float_ expand_path_ get_pdir_ hcs_$initiate hcs_$make_seg hcs_$set_bc_seg hcs_$truncate_seg ioa_ ioa_$ioa_switch iox_$get_line THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$bigarg iox_$user_input iox_$user_io iox_$user_output sort_ext$debug_sw sort_ext$input_file_max sort_ext$sort_desc_pn 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 12 000653 117 000720 120 000737 128 000740 129 000741 130 000742 131 000743 132 000744 133 000745 134 000746 135 000747 136 000750 137 000751 139 000752 143 000753 146 000754 157 000766 161 000774 162 000776 163 001017 165 001037 167 001071 168 001076 170 001077 179 001100 180 001102 181 001106 183 001130 184 001131 186 001132 188 001152 189 001153 191 001154 193 001170 194 001171 196 001172 198 001202 199 001203 201 001204 204 001234 205 001235 207 001236 208 001242 209 001243 211 001244 213 001254 214 001255 216 001256 217 001266 218 001267 220 001270 221 001274 222 001275 224 001276 225 001302 226 001303 228 001304 229 001314 230 001315 234 001316 235 001331 236 001370 237 001375 241 001376 244 001400 245 001401 247 001405 248 001410 250 001411 251 001430 253 001432 254 001445 255 001501 256 001506 258 001507 260 001516 261 001523 262 001547 264 001550 266 001552 267 001554 268 001561 269 001574 271 001633 272 001635 275 001636 276 001637 277 001640 278 001645 279 001646 280 001653 281 001654 282 001661 283 001665 286 001724 288 001725 289 001731 290 002003 293 002005 294 002006 295 002007 296 002010 297 002016 298 002023 299 002024 300 002031 301 002032 302 002070 305 002072 306 002073 307 002076 308 002100 309 002103 310 002114 311 002115 312 002122 313 002126 314 002127 315 002140 316 002143 318 002144 319 002146 321 002157 324 002160 325 002161 326 002162 327 002163 328 002171 329 002173 330 002177 334 002235 335 002236 336 002244 338 002245 341 002247 345 002250 346 002251 347 002252 348 002255 351 002256 352 002257 353 002260 354 002261 355 002263 356 002267 357 002274 358 002276 361 002277 362 002300 363 002306 365 002311 368 002312 369 002313 370 002314 371 002315 372 002317 373 002323 374 002330 375 002332 378 002333 379 002334 380 002337 381 002344 385 002370 387 002375 390 002376 391 002377 392 002400 393 002405 396 002406 397 002407 398 002410 401 002411 402 002412 403 002413 404 002414 405 002416 406 002422 407 002427 408 002431 411 002432 412 002433 414 002437 417 002440 418 002441 419 002442 420 002443 421 002445 422 002451 423 002456 424 002460 427 002461 428 002462 430 002466 433 002467 434 002470 435 002471 438 002472 440 002473 442 002475 443 002513 445 002514 448 002515 450 002516 452 002520 453 002526 455 002527 457 002531 459 002540 462 002541 464 002542 466 002544 467 002552 469 002553 471 002555 473 002565 475 002567 477 002577 478 002622 481 002623 484 002624 486 002626 489 002702 490 002707 492 002710 494 002712 497 002763 499 002770 500 002771 504 002772 506 003003 507 003016 511 003023 515 003024 522 003026 525 003032 526 003061 528 003063 529 003065 531 003066 533 003132 535 003137 536 003141 538 003142 539 003145 544 003146 546 003155 547 003200 549 003247 551 003254 552 003261 554 003262 555 003265 556 003304 557 003305 559 003326 560 003330 561 003335 562 003350 565 003421 567 003422 568 003431 569 003441 570 003443 571 003444 573 003464 574 003466 576 003473 577 003512 579 003514 581 003525 586 003526 587 003527 588 003532 589 003535 590 003546 592 003560 593 003602 594 003604 595 003611 600 003641 601 003663 604 003664 607 003665 608 003673 609 003700 610 003703 611 003726 614 003727 616 003730 617 003732 618 003735 619 003736 620 003740 622 003743 625 003744 628 003745 629 003747 630 003752 631 003754 633 003764 636 003777 637 004020 640 004035 641 004060 644 004061 647 004062 648 004064 649 004067 651 004100 654 004112 655 004133 658 004147 659 004171 662 004172 664 004173 665 004201 667 004206 670 004207 672 004220 673 004225 676 004257 679 004260 683 004271 684 004327 685 004334 687 004335 689 004337 690 004344 691 004357 693 004434 695 004435 698 004446 699 004453 700 004467 702 004531 705 004532 709 004550 710 004555 712 004613 715 004614 717 004625 718 004632 719 004664 722 004665 725 004703 726 004710 728 004746 ----------------------------------------------------------- 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