COMPILATION LISTING OF SEGMENT lister_sort_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/05/84 1154.7 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ****************************************************** 10* * * 11* * * 12* * Copyright (c) 1972 by Massachusetts Institute of * 13* * Technology and Honeywell Information Systems, Inc. * 14* * * 15* * * 16* ****************************************************** */ 17 18 /* Program to sort a Lister file into either ascending or descending alphabetical (not ASCII!) order. 19* Written by Paul Green 20* Modified by PG on 741110 to use alphabetical sort (thanks to Jerry Stern, who first debugged it) 21* Modified 770606 by PG to handle -asc/-dsc on a per-field basis 22* Modified 770706 by PG to take array of record ptrs as input and not rethread file. 23* Modified 770721 by PG to fix bug 8 (can't sort 0 records). 24* Modified 781020 by PG to get around pl1 bug 1795. 25* Modified 790702 by PG to add numeric sorting. 26* NOTE: This program gets bug 1844 if compiled with PL/I 24c or earlier. 27* Modified 800312 by PG to fix 052 (sort null fields last in descending order). 28* Modified 800605 by PB to remove, hopefully, last vestige of case-sensitivity. 29**/ 30 31 /* format: style3 */ 32 lister_sort_: 33 procedure (bv_in_file_ptr, bv_list_ptr, bv_sort_list_ptr) options (packed_decimal); 34 35 /* parameters */ 36 37 declare ( 38 bv_in_file_ptr ptr, 39 bv_list_ptr ptr, 40 bv_sort_list_ptr ptr 41 ) parameter; 42 43 /* builtin */ 44 45 declare (convert, divide, hbound, lbound, null, onsource, translate) 46 builtin; 47 48 /* conditions */ 49 50 declare conversion condition; 51 52 /* internal static */ 53 54 declare ( 55 upper_case initial ("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 56 lower_case initial ("abcdefghijklmnopqrstuvwxyz") 57 ) char (26) internal static; 58 59 /* include files */ 60 1 1 /* ====== BEGIN INCLUDE FILE lister_structures.incl.pl1 ================================ */ 1 2 1 3 /* 1 4* Modified 800813 by PB to add PUT_UID to listform declarations. 1 5* Modified 800825 by PB for version 2 lister file. 1 6* Modified 840523 by PB to add SELECT_BEG and SELECT_END. 1 7**/ 1 8 /* MASTER DECLARATIONS */ 1 9 1 10 /* format: style3 */ 1 11 dcl lister_file_version_2 1 12 fixed bin initial (2) internal static options (constant); 1 13 1 14 dcl 1 input_file based (in_file_ptr) aligned, 1 15 2 ( 1 16 field_table_offset, 1 17 record_head, 1 18 record_tail, 1 19 unused (2) 1 20 ) offset (input_file.area), 1 21 2 next_uid fixed bin (24) unsigned, 1 22 2 version fixed bin, 1 23 2 n_records fixed bin (17), 1 24 2 area area (261112); 1 25 1 26 dcl 1 update_file based (up_file_ptr) aligned, 1 27 2 ( 1 28 field_table_offset, 1 29 record_head, 1 30 record_tail, 1 31 unused (2) 1 32 ) offset (update_file.area), 1 33 2 next_uid fixed bin (24) unsigned, 1 34 2 version fixed bin, 1 35 2 n_records fixed bin (17), 1 36 2 area area (261112); 1 37 1 38 dcl 1 output_file based (out_file_ptr) aligned, 1 39 2 ( 1 40 field_table_offset, 1 41 record_head, 1 42 record_tail, 1 43 unused (2) 1 44 ) offset (output_file.area), 1 45 2 next_uid fixed bin (24) unsigned, 1 46 2 version fixed bin, 1 47 2 n_records fixed bin (17), 1 48 2 area area (261112); 1 49 1 50 dcl 1 input_record based (recordp) aligned, 1 51 2 next offset (input_file.area), 1 52 2 uid fixed bin (24) unsigned unaligned, 1 53 2 max_field_index fixed bin (12) unsigned unaligned, 1 54 2 field dim (0:field_table.max_field_index refer (input_record.max_field_index)) 1 55 offset (input_file.area); 1 56 1 57 dcl 1 update_record based aligned, 1 58 2 next offset (update_file.area), 1 59 2 uid fixed bin (24) unsigned unaligned, 1 60 2 max_field_index fixed bin (12) unsigned unaligned, 1 61 2 field dim (0:field_table.max_field_index refer (update_record.max_field_index)) 1 62 offset (update_file.area); 1 63 1 64 dcl 1 output_record based aligned, 1 65 2 next offset (output_file.area), 1 66 2 uid fixed bin (24) unsigned unaligned, 1 67 2 max_field_index fixed bin (12) unsigned unaligned, 1 68 2 field dim (0:field_table.max_field_index refer (output_record.max_field_index)) 1 69 offset (output_file.area); 1 70 1 71 dcl atom char (atom_length) based (atomp) varying aligned, 1 72 atom_length fixed bin initial (0), /* for table option */ 1 73 atomp ptr; 1 74 1 75 dcl (fidp, field_table_ptr, format_table_ptr, in_file_ptr, ltp, recordp, select_ptr, out_file_ptr, up_file_ptr) 1 76 ptr, 1 77 n fixed bin; 1 78 1 79 dcl 1 field_table based (field_table_ptr) aligned, 1 80 2 record_delimiter 1 81 unal char (1), 1 82 2 field_delimiter unal char (1), 1 83 2 max_field_index unal fixed bin (17), 1 84 2 hash_field_id_to_index 1 85 dimension (0:18) offset, 1 86 2 index_to_field_id 1 87 dimension (0:n refer (field_table.max_field_index)) offset; 1 88 1 89 dcl 1 field_identifier based (fidp) aligned, 1 90 2 next offset, 1 91 2 field_index unal fixed bin (17), 1 92 2 size unal fixed bin (17), 1 93 2 string unal char (n refer (field_identifier.size)); 1 94 1 95 dcl system_area area (261120) based (area_ptr); 1 96 dcl area_ptr ptr; 1 97 1 98 /* LISTFORM DECLARATIONS */ 1 99 1 100 declare ( 1 101 PUT_LITERAL initial (-1), 1 102 PUT_SPACES initial (-2), 1 103 PUT_END initial (-3), 1 104 PUT_DATE initial (-4), 1 105 PUT_TIME initial (-5), 1 106 PUT_RECORD_COUNT initial (-6), 1 107 PUT_ARGUMENT initial (-7), 1 108 PUT_UID initial (-8) 1 109 ) fixed bin internal static; 1 110 1 111 dcl 1 format_table aligned based (format_table_ptr), 1 112 2 size fixed bin (17) unal, 1 113 2 before fixed bin (17) unal, 1 114 2 after fixed bin (17) unal, 1 115 2 record fixed bin (17) unal, 1 116 2 literal_table ptr, 1 117 2 item dim (n refer (format_table.size)), 1 118 3 action fixed bin (17) unal, 1 119 3 justification bit (2) unal, 1 120 3 argument_number 1 121 fixed bin (15) unal, 1 122 3 width fixed bin (21); 1 123 1 124 dcl 1 literal_table aligned based (ltp), 1 125 2 size fixed bin, /* number of slots allocated */ 1 126 2 n_literals fixed bin, /* number of slots in use */ 1 127 2 literal dim (n refer (literal_table.size)) ptr unal; 1 128 1 129 dcl ( 1 130 flush_left initial ("00"b), 1 131 center initial ("01"b), 1 132 flush_right initial ("10"b) 1 133 ) bit (2) aligned internal static options (constant); 1 134 1 135 dcl MIN_FIELD_INDEX fixed bin initial (0) internal static options (constant); 1 136 1 137 dcl 1 list_node aligned based, 1 138 2 size fixed bin, 1 139 2 list dimension (n refer (list_node.size)) ptr; 1 140 1 141 /* SELECT DECLARATIONS */ 1 142 1 143 dcl 1 select_expression based (select_ptr) aligned, 1 144 2 literal_table_ptr 1 145 ptr, 1 146 2 size fixed bin, 1 147 2 last_element fixed bin, 1 148 2 element dim (n refer (select_expression.size)), 1 149 3 opcode unal bit (9), 1 150 3 not unal bit (1), 1 151 3 top unal bit (1), 1 152 3 unused unal bit (7), 1 153 3 field_index unal fixed bin (8), 1 154 3 literal_index unal fixed bin (8), 1 155 1 element aligned, 1 156 2 opcode fixed bin, 1 157 2 not bit (1) aligned, 1 158 2 top bit (1) aligned, 1 159 2 field_index fixed bin, 1 160 2 literal_index fixed bin, 1 161 operand1 fixed bin defined (element.field_index), 1 162 operand2 fixed bin defined (element.literal_index); 1 163 1 164 dcl ( 1 165 SELECT_AND init ("000000001"b), 1 166 SELECT_OR init ("000000010"b), 1 167 SELECT_NOT init ("000000011"b), 1 168 SELECT_FIND init ("000000100"b), 1 169 SELECT_EQ init ("000000101"b), 1 170 SELECT_LT init ("000000110"b), 1 171 SELECT_GT init ("000000111"b), 1 172 SELECT_LE init ("000001000"b), 1 173 SELECT_GE init ("000001001"b), 1 174 SELECT_NEQ init ("000001010"b), 1 175 SELECT_NLT init ("000001011"b), 1 176 SELECT_NGT init ("000001100"b), 1 177 SELECT_NLE init ("000001101"b), 1 178 SELECT_NGE init ("000001110"b), 1 179 SELECT_BEG init ("000001111"b), 1 180 SELECT_END init ("000010000"b) 1 181 ) bit (9) aligned internal static; 1 182 1 183 dcl ( 1 184 ANY_FIELD init (-1), 1 185 NULL_FIELD init (-2), 1 186 NUMERIC_FIELD init (-3), 1 187 UID init (-4) 1 188 ) aligned fixed bin (8) static; 1 189 1 190 dcl 1 numeric_atom aligned based (atomp), 1 191 2 flag fixed bin (35), /* must be -1 */ 1 192 2 value float dec (29) unal; 1 193 1 194 dcl numeric_flag fixed bin (35) internal static initial (-1) options (constant); 1 195 1 196 /* SORT DECLARATIONS */ 1 197 1 198 declare n_items_to_sort fixed bin, 1 199 sort_list_ptr ptr; 1 200 1 201 declare 1 sort_list aligned based (sort_list_ptr), 1 202 2 n_keys fixed bin, 1 203 2 key (n_items_to_sort refer (sort_list.n_keys)), 1 204 3 field_index fixed bin, 1 205 3 ascending bit (1) aligned, 1 206 3 numeric bit (1) aligned; 1 207 1 208 /* MERGE DECLARATIONS */ 1 209 1 210 dcl ( 1 211 MERGE_ADD init (0), 1 212 MERGE_AND init (1), 1 213 MERGE_OR init (2), 1 214 MERGE_SUBTRACT init (3) 1 215 ) fixed bin internal static options (constant); 1 216 1 217 /* ------ END INCLUDE FILE lister_structures.incl.pl1 -------------------------------- */ 61 62 63 /* program */ 64 65 in_file_ptr = bv_in_file_ptr; 66 sort_list_ptr = bv_sort_list_ptr; 67 68 if bv_list_ptr = null /* sorting 0 records is trivial */ 69 then return; 70 71 n = bv_list_ptr -> list_node.size; 72 73 if n = 1 /* sorting 1 record is trivial, too. */ 74 then return; 75 76 on conversion onsource = "0"; 77 78 begin; /* enter begin block to get storage */ 79 80 /* automatic */ 81 82 dcl (d, f, fi, i, j, k, previous_d, t) 83 fixed bin; 84 dcl (p, pj, pk, list_ptr) 85 ptr; 86 dcl (ascending, exchange) 87 bit (1) aligned; 88 89 /* automatic adjustable */ 90 91 declare index_list (n) fixed bin; 92 declare numeric_field (n) float decimal (29) unaligned; 93 /* 4 words per element, 29 digits is plenty */ 94 95 /* begin block */ 96 97 list_ptr = bv_list_ptr; 98 99 do f = lbound (sort_list.key, 1) to hbound (sort_list.key, 1); 100 fi = sort_list.key (f).field_index; 101 ascending = sort_list.key (f).ascending; 102 d = n; 103 previous_d = d; 104 105 do i = 1 to n; 106 index_list (i) = i; 107 end; 108 109 if sort_list.key (f).numeric 110 then do i = 1 to n; 111 pj = list_ptr -> list_node.list (i) -> input_record.field (fi); 112 113 if pj = null 114 then numeric_field (i) = 0e0; 115 else numeric_field (i) = convert (numeric_field (1), pj -> atom); 116 end; 117 118 do d = (2 * divide (n, 4, 17, 0) + 1) repeat (2 * divide (d, 4, 17, 0) + 1) while (previous_d > 1); 119 previous_d = d; 120 121 do i = 1 to n - d; 122 k = i + d; 123 up: 124 j = k - d; 125 126 pj = list_ptr -> list_node.list (j) -> input_record.field (fi); 127 pk = list_ptr -> list_node.list (k) -> input_record.field (fi); 128 129 exchange = "0"b; 130 131 /* Collating Sequence: 132* Null fields. 133* Non-null fields in alphabetical order. 134* 135* Algorithm: 136* 1. null fields get sorted before non-null fields if ascending, 137* and after non-null fields if descending. 138* 2. equal fields always remain in the same relative order (sort is stable). 139* 3. alphabetics are translated to lower case before comparison; fields equal 140* under translation are then compared directly. Ascending sorts put 141* records into ascending (A index_list (k) 147 then exchange = "1"b; 148 /* preserve previous order */ 149 else ; /* in order */ 150 else exchange = ^ascending; 151 /* ascending implies null items first */ 152 /* descending implies non-null items first */ 153 else if pk = null 154 then exchange = ascending; /* ascending implies null items first */ 155 /* descending implies non-null items first */ 156 else if sort_list.key (f).numeric 157 /* NUMERIC SORT */ 158 then if numeric_field (index_list (j)) = numeric_field (index_list (k)) 159 then if index_list (j) > index_list (k) 160 then exchange = "1"b; 161 /* preserve previous order */ 162 else ; /* order ok */ 163 else if numeric_field (index_list (j)) > numeric_field (index_list (k)) 164 then exchange = ascending; 165 /* ascending implies "less" items first */ 166 else exchange = ^ascending; 167 /* descending implies "greater" items first */ 168 169 /* AVOID BUG 1795 else if translate (pj -> atom, lower_case, upper_case) = 170* translate (pk -> atom, lower_case, upper_case) ... */ 171 else do; /* ALPHABETIC SORT */ 172 equal_bit = 173 translate (pj -> atom, lower_case, upper_case) 174 = translate (pk -> atom, lower_case, upper_case); 175 if equal_bit 176 then if index_list (j) > index_list (k) 177 then exchange = "1"b; /* preserve previous order. */ 178 else; 179 /* AVOID BUG 1795... else if translate (pj -> atom, lower_case, upper_case) > 180* translate (pk -> atom, lower_case, upper_case) ... */ 181 else do; 182 greater_bit = 183 translate (pj -> atom, lower_case, upper_case) 184 > translate (pk -> atom, lower_case, upper_case); 185 if greater_bit 186 then exchange = ascending; 187 /* ascending implies "less" items first */ 188 else exchange = ^ascending; 189 /* descending implies "greater" items first */ 190 191 /* Following is for bug 1795 too */ 192 end; 193 end; 194 dcl (equal_bit, greater_bit) 195 bit (1) aligned; 196 197 /* end bug 1795 section */ 198 199 if exchange 200 then do; 201 p = list_ptr -> list_node.list (k); 202 list_ptr -> list_node.list (k) = list_ptr -> list_node.list (j); 203 list_ptr -> list_node.list (j) = p; 204 205 t = index_list (k); 206 index_list (k) = index_list (j); 207 index_list (j) = t; 208 209 if j > d 210 then do; 211 k = j; 212 go to up; 213 end; 214 end; 215 end; 216 end; 217 end; 218 end; /* the begin block */ 219 220 return; 221 222 end /* lister_sort_ */; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/05/84 1151.5 lister_sort_.pl1 >special_ldd>online>6883-11/02/84>lister_sort_.pl1 61 1 11/02/84 1208.5 lister_structures.incl.pl1 >special_ldd>online>6883-11/02/84>lister_structures.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. area 10 based area(261112) level 2 dcl 1-14 ref 111 126 127 ascending 2 based bit(1) array level 3 in structure "sort_list" dcl 1-201 in procedure "lister_sort_" ref 101 ascending 000120 automatic bit(1) dcl 86 in begin block on line 78 set ref 101* 150 153 163 166 185 188 atom based varying char dcl 1-71 ref 115 172 172 182 182 atom_length 000106 automatic fixed bin(17,0) initial dcl 1-71 set ref 1-71* bv_in_file_ptr parameter pointer dcl 37 ref 32 65 bv_list_ptr parameter pointer dcl 37 ref 32 68 71 97 bv_sort_list_ptr parameter pointer dcl 37 ref 32 66 conversion 000100 stack reference condition dcl 50 ref 76 convert builtin function dcl 45 ref 115 d 000100 automatic fixed bin(17,0) dcl 82 set ref 102* 103 118* 119 121 122 123 209* 216* divide builtin function dcl 45 ref 118 216 equal_bit 000122 automatic bit(1) dcl 194 set ref 172* 175 exchange 000121 automatic bit(1) dcl 86 set ref 129* 144* 150* 153* 156* 163* 166* 175* 185* 188* 199 f 000101 automatic fixed bin(17,0) dcl 82 set ref 99* 100 101 109 156* fi 000102 automatic fixed bin(17,0) dcl 82 set ref 100* 111 126 127 field 2 based offset array level 2 dcl 1-50 ref 111 126 127 field_index 1 based fixed bin(17,0) array level 3 dcl 1-201 ref 100 greater_bit 000123 automatic bit(1) dcl 194 set ref 182* 185 hbound builtin function dcl 45 ref 99 i 000103 automatic fixed bin(17,0) dcl 82 set ref 105* 106 106* 109* 111 113 115* 121* 122* in_file_ptr 000110 automatic pointer dcl 1-75 set ref 65* 111 126 127 index_list 000122 automatic fixed bin(17,0) array dcl 91 set ref 106* 144 144 156 156 156 156 163 163 175 175 205 206* 206 207* input_file based structure level 1 dcl 1-14 input_record based structure level 1 dcl 1-50 j 000104 automatic fixed bin(17,0) dcl 82 set ref 123* 126 144 156 156 163 175 202 203 206 207 209 211 k 000105 automatic fixed bin(17,0) dcl 82 set ref 122* 123 127 144 156 156 163 175 201 202 205 206 211* key 1 based structure array level 2 dcl 1-201 ref 99 99 lbound builtin function dcl 45 ref 99 list 2 based pointer array level 2 dcl 1-137 set ref 111 126 127 201 202* 202 203* list_node based structure level 1 dcl 1-137 list_ptr 000116 automatic pointer dcl 84 set ref 97* 111 126 127 201 202 202 203 lower_case 000000 constant char(26) initial unaligned dcl 54 ref 172 172 182 182 n 000112 automatic fixed bin(17,0) dcl 1-75 set ref 71* 73 91 92 102 105 109 118 121 n_keys based fixed bin(17,0) level 2 dcl 1-201 ref 99 null builtin function dcl 45 ref 68 113 144 144 153 numeric 3 based bit(1) array level 3 dcl 1-201 ref 109 156 numeric_field 000122 automatic float dec(29) array unaligned dcl 92 set ref 113* 115* 115 156 156 163 163 onsource builtin function dcl 45 set ref 76* p 000110 automatic pointer dcl 84 set ref 201* 203 pj 000112 automatic pointer dcl 84 set ref 111* 113 115 126* 144 172 182 pk 000114 automatic pointer dcl 84 set ref 127* 144 153 172 182 previous_d 000106 automatic fixed bin(17,0) dcl 82 set ref 103* 118 119* size based fixed bin(17,0) level 2 dcl 1-137 ref 71 sort_list based structure level 1 dcl 1-201 sort_list_ptr 000114 automatic pointer dcl 1-198 set ref 66* 99 99 100 101 109 156 t 000107 automatic fixed bin(17,0) dcl 82 set ref 205* 207 translate builtin function dcl 45 ref 172 172 182 182 upper_case 000007 constant char(26) initial unaligned dcl 54 ref 172 172 182 182 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ANY_FIELD internal static fixed bin(8,0) initial dcl 1-183 MERGE_ADD internal static fixed bin(17,0) initial dcl 1-210 MERGE_AND internal static fixed bin(17,0) initial dcl 1-210 MERGE_OR internal static fixed bin(17,0) initial dcl 1-210 MERGE_SUBTRACT internal static fixed bin(17,0) initial dcl 1-210 MIN_FIELD_INDEX internal static fixed bin(17,0) initial dcl 1-135 NULL_FIELD internal static fixed bin(8,0) initial dcl 1-183 NUMERIC_FIELD internal static fixed bin(8,0) initial dcl 1-183 PUT_ARGUMENT internal static fixed bin(17,0) initial dcl 1-100 PUT_DATE internal static fixed bin(17,0) initial dcl 1-100 PUT_END internal static fixed bin(17,0) initial dcl 1-100 PUT_LITERAL internal static fixed bin(17,0) initial dcl 1-100 PUT_RECORD_COUNT internal static fixed bin(17,0) initial dcl 1-100 PUT_SPACES internal static fixed bin(17,0) initial dcl 1-100 PUT_TIME internal static fixed bin(17,0) initial dcl 1-100 PUT_UID internal static fixed bin(17,0) initial dcl 1-100 SELECT_AND internal static bit(9) initial dcl 1-164 SELECT_BEG internal static bit(9) initial dcl 1-164 SELECT_END internal static bit(9) initial dcl 1-164 SELECT_EQ internal static bit(9) initial dcl 1-164 SELECT_FIND internal static bit(9) initial dcl 1-164 SELECT_GE internal static bit(9) initial dcl 1-164 SELECT_GT internal static bit(9) initial dcl 1-164 SELECT_LE internal static bit(9) initial dcl 1-164 SELECT_LT internal static bit(9) initial dcl 1-164 SELECT_NEQ internal static bit(9) initial dcl 1-164 SELECT_NGE internal static bit(9) initial dcl 1-164 SELECT_NGT internal static bit(9) initial dcl 1-164 SELECT_NLE internal static bit(9) initial dcl 1-164 SELECT_NLT internal static bit(9) initial dcl 1-164 SELECT_NOT internal static bit(9) initial dcl 1-164 SELECT_OR internal static bit(9) initial dcl 1-164 UID internal static fixed bin(8,0) initial dcl 1-183 area_ptr automatic pointer dcl 1-96 atomp automatic pointer dcl 1-71 center internal static bit(2) initial dcl 1-129 element automatic structure level 1 dcl 1-143 fidp automatic pointer dcl 1-75 field_identifier based structure level 1 dcl 1-89 field_table based structure level 1 dcl 1-79 field_table_ptr automatic pointer dcl 1-75 flush_left internal static bit(2) initial dcl 1-129 flush_right internal static bit(2) initial dcl 1-129 format_table based structure level 1 dcl 1-111 format_table_ptr automatic pointer dcl 1-75 lister_file_version_2 internal static fixed bin(17,0) initial dcl 1-11 literal_table based structure level 1 dcl 1-124 ltp automatic pointer dcl 1-75 n_items_to_sort automatic fixed bin(17,0) dcl 1-198 numeric_atom based structure level 1 dcl 1-190 numeric_flag internal static fixed bin(35,0) initial dcl 1-194 operand1 defined fixed bin(17,0) dcl 1-143 operand2 defined fixed bin(17,0) dcl 1-143 out_file_ptr automatic pointer dcl 1-75 output_file based structure level 1 dcl 1-38 output_record based structure level 1 dcl 1-64 recordp automatic pointer dcl 1-75 select_expression based structure level 1 dcl 1-143 select_ptr automatic pointer dcl 1-75 system_area based area(261120) dcl 1-95 up_file_ptr automatic pointer dcl 1-75 update_file based structure level 1 dcl 1-26 update_record based structure level 1 dcl 1-57 NAMES DECLARED BY EXPLICIT CONTEXT. lister_sort_ 000031 constant entry external dcl 32 up 000317 constant label dcl 123 ref 212 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1100 1114 1024 1110 Length 1310 1024 14 160 53 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME lister_sort_ 78 external procedure is an external procedure. on unit on line 76 74 on unit begin block on line 78 262 begin block uses auto adjustable storage. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 78 000100 d begin block on line 78 000101 f begin block on line 78 000102 fi begin block on line 78 000103 i begin block on line 78 000104 j begin block on line 78 000105 k begin block on line 78 000106 previous_d begin block on line 78 000107 t begin block on line 78 000110 p begin block on line 78 000112 pj begin block on line 78 000114 pk begin block on line 78 000116 list_ptr begin block on line 78 000120 ascending begin block on line 78 000121 exchange begin block on line 78 000122 numeric_field begin block on line 78 000122 equal_bit begin block on line 78 000122 index_list begin block on line 78 000123 greater_bit begin block on line 78 lister_sort_ 000106 atom_length lister_sort_ 000110 in_file_ptr lister_sort_ 000112 n lister_sort_ 000114 sort_list_ptr lister_sort_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_s r_e_as alloc_cs enter_begin leave_begin call_ext_out_desc call_ext_out return alloc_auto_adj enable shorten_stack ext_entry int_entry pointer_hard any_to_any_rd THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. on_data_$getonsource on_data_$setonsource NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 32 000025 1 71 000036 65 000037 66 000043 68 000046 71 000052 73 000055 76 000057 78 000130 91 000133 92 000140 97 000146 99 000152 100 000161 101 000167 102 000171 103 000173 105 000174 106 000203 107 000205 109 000207 111 000223 113 000235 115 000250 116 000265 118 000267 119 000301 121 000303 122 000315 123 000317 126 000322 127 000335 129 000346 144 000347 149 000367 150 000370 153 000374 156 000403 162 000437 163 000440 166 000444 172 000450 175 000500 178 000513 182 000514 185 000544 188 000552 199 000555 201 000557 202 000563 203 000567 205 000570 206 000574 207 000577 209 000601 211 000604 212 000605 215 000606 216 000610 217 000616 218 000620 220 000621 ----------------------------------------------------------- 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