COMPILATION LISTING OF SEGMENT rw_table_manager Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/12/85 1045.8 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 /* format: off */ 7 8 /* 9* 10* This module is called to manage the report_writer_'s standard table 11* structure. Data retrieved by the users table_manager procedure is 12* placed into this standard table structure, and then report_writer_ 13* takes data out of the table to produce the report. The table is composed 14* of the following: 15* 16* (1) An array of pointers to segments. This array has one pointer for each 17* segment referred to as level 1 segments. The structure that contains the 18* array is called table_segments_info and can be found in the include file 19* rw_table_control_info.incl.pl1. 20* 21* (2) A series of level 1 segments. These segments contain pointers to the 22* row values. There are as many segments as needed to hold all the 23* pointers. They are packed pointers, so roughly 250,000 rows can be 24* pointed at by one segment full of pointers. The structure row_ptrs is 25* used to overlay these segments, and can be found in the include file 26* rw_table_control_info.incl.pl1. 27* 28* (3) A series of level 2 segments. These segments contain the row values. 29* The row values are stored as a fixed length character string. If a row 30* doesn't quite fit into the last slot of the segment, it is stored in the 31* next segment so that rows are never split across segment boundaries. 32* These segments are implemented as an MSF, and are pointed at by the 33* pointers in the level 1 segments. 34* 35* The array of pointers described in (1) above is a structure allocated in 36* an area. When the array is about to overflow, a new larger structure is 37* allocated and everything is moved to the new structure, and the old one is 38* freed. The level 1 segments described in (2) above are temp segments. 39* The level 2 segments described in (3) above are implemented as one MSF. 40* When the table is sorted, the rows themselves aren't moved. Only the row 41* pointers are moved. This is done by getting a new set of temp segments, 42* moving the pointers across into their sorted order, and releasing the 43* original temp segments. 44* 45**/ 46 47 /* 48* 49* The following entrypoints are provided: 50* 51* initalize_table - called when report_writer_ is creating an invocation. 52* terminate_table - called when report_writer_ is destroying an invocation. 53* 54* create_table - called when the user has asked for a new retrieve. 55* delete_table - called when the retrieval has been completed. 56* 57* load_rows - called to retrieve N rows and place them in the table. 58* load_table - called to retrieve all the rows and place them in the table. 59* 60* sort - called to sort the table. 61* 62* get_query - called to get the query statement the user used, to select 63* the table, through the subsystem's method of choice. 64* 65* set_table_manager - called to set the users table manager procedure. 66* 67* Known Bugs: 68* 69* Other Problems: 70* 71* This subroutine and sort_seg_ call rw_temp_seg_mgr to get temp segments in 72* a specified directory. All references to it should be removed after a 73* generalized Multics temp segment manager becomes available, that knows how 74* to create temp segments in places other than the process directory and 75* knows how to clean them up after a process or system failure. 76* rw_temp_seg_mgr knows how to do the former, but can't clean up after 77* itself. 78* 79* History: 80* 81* Written - October 1984 - Al Dupuis 82* 83**/ 84 85 rw_table_manager: proc; 86 87 /* These parameters are described at each entry where they are used. */ 88 89 dcl code_parm fixed bin (35) parm; 90 dcl message_parm char (*) varying parm; 91 dcl query_length_parm fixed bin (21) parm; 92 dcl query_segment_ptr_parm ptr parm; 93 dcl report_cip_parm ptr parm; 94 dcl row_count_actual_parm fixed bin (35) parm; 95 dcl row_count_specified_parm fixed bin (35) parm; 96 dcl sort_info_ptr_parm ptr parm; 97 dcl table_manager_parm char (*) parm; 98 99 call com_err_ (error_table_$badcall, RW_TABLE_MANAGER); 100 101 return; 102 103 create_table: entry ( 104 105 report_cip_parm, /* input: points to report_control_info */ 106 code_parm /* output: success or failure */ 107 ); 108 109 report_cip = report_cip_parm; 110 code_parm = 0; 111 112 call initialize_automatic_variables; 113 table_control_info.msf_directory_name = report_control_info.temp_dir_name; 114 115 call create_a_new_table; 116 call create_a_segment_for_row_ptrs; 117 call get_an_msf_component; 118 119 call report_control_info.table_manager_create_table_entry ( 120 report_control_info.subsystems_info_ptr, code_parm); 121 if code_parm ^= 0 122 then call ssu_$abort_line (sci_ptr, code_parm); 123 124 call load_a_row_into_the_table; 125 126 return; 127 128 delete_table: entry ( 129 130 report_cip_parm, /* input: points to report_control_info */ 131 code_parm /* output: success or failure */ 132 ); 133 134 report_cip = report_cip_parm; 135 code_parm = 0; 136 137 call initialize_automatic_variables; 138 call delete_the_table (code_parm); 139 140 return; 141 142 get_query: entry ( 143 144 report_cip_parm, /* input: points to report_control_info */ 145 query_segment_ptr_parm, /* input: points to query segment */ 146 query_length_parm, /* output: length of query */ 147 code_parm /* output: success or failure */ 148 ); 149 150 report_cip = report_cip_parm; 151 sci_ptr = report_control_info.subsystem_control_info_ptr; 152 153 if report_control_info.table_manager_get_query_entry = report_writer_$create_invocation 154 then call ssu_$abort_line (sci_ptr, error_table_$unsupported_operation, 155 "^/^a doesn't support the saving of a query.", 156 ssu_$get_subsystem_name (sci_ptr)); 157 else call report_control_info.table_manager_get_query_entry (report_control_info.subsystems_info_ptr, 158 query_segment_ptr_parm, query_length_parm, code_parm); 159 160 return; 161 162 initialize_table: entry ( 163 164 report_cip_parm, /* input: points to report_control_info */ 165 code_parm /* output: success or failure */ 166 ); 167 168 report_cip = report_cip_parm; 169 code_parm = 0; 170 171 call initialize_the_table; 172 173 return; 174 175 load_rows: entry ( 176 177 report_cip_parm, /* input: points to report_control_info */ 178 row_count_specified_parm, /* input: number of rows needed */ 179 row_count_actual_parm, /* output: number successfully gotten */ 180 code_parm /* output: success or failure */ 181 ); 182 183 report_cip = report_cip_parm; 184 row_count_specified = row_count_specified_parm; 185 row_count_actual_parm = 0; 186 code_parm = 0; 187 188 call initialize_automatic_variables; 189 row_ptrs_ptr = table_segments_info.segment_ptrs ( 190 table_segments_info.current_number_of_segments); 191 192 do loop = 1 to row_count_specified while (code_parm = 0); 193 call report_control_info.table_manager_get_row_entry ( 194 report_control_info.subsystems_info_ptr, code_parm); 195 if code_parm = 0 196 then do; 197 call load_a_row_into_the_table; 198 row_count_actual_parm = row_count_actual_parm + 1; 199 end; 200 end; 201 202 return; 203 204 load_table: entry ( 205 206 report_cip_parm, /* input: points to report_control_info */ 207 code_parm /* output: success or failure */ 208 ); 209 210 report_cip = report_cip_parm; 211 code_parm = 0; 212 213 call initialize_automatic_variables; 214 row_ptrs_ptr = table_segments_info.segment_ptrs ( 215 table_segments_info.current_number_of_segments); 216 still_loading_the_table = ON; 217 218 do while (still_loading_the_table); 219 call report_control_info.table_manager_get_row_entry ( 220 report_control_info.subsystems_info_ptr, code_parm); 221 if code_parm = 0 222 then call load_a_row_into_the_table; 223 else do; 224 still_loading_the_table = OFF; 225 if code_parm = rw_error_$no_data 226 then code_parm = 0; 227 end; 228 end; 229 230 return; 231 232 set_table_manager: entry ( 233 234 report_cip_parm, /* input: points to report_control_info */ 235 table_manager_parm, /* input: name of table manager procedure */ 236 code_parm, /* output: success or failure */ 237 message_parm /* output: reason for the failure */ 238 ); 239 240 report_cip = report_cip_parm; 241 code_parm = set_the_table_manager (table_manager_parm, message_parm); 242 243 return; 244 245 sort: entry ( 246 247 report_cip_parm, /* input: points to report_control_info */ 248 sort_info_ptr_parm, /* input: points to sort_info */ 249 code_parm /* output: success or failure */ 250 ); 251 252 report_cip = report_cip_parm; 253 sort_info_ptr = sort_info_ptr_parm; 254 code_parm = 0; 255 256 call initialize_automatic_variables; 257 call sort_the_table (code_parm); 258 259 return; 260 261 terminate_table: entry ( 262 263 report_cip_parm, /* input: points to report_control_info */ 264 code_parm /* output: success or failure */ 265 ); 266 267 report_cip = report_cip_parm; 268 code_parm = 0; 269 270 call initialize_automatic_variables; 271 if table_control_info.msf_file_control_block_ptr ^= null 272 then call delete_the_table (code_parm); 273 call terminate_the_table; 274 275 return; 276 277 create_a_new_table: proc; 278 279 dcl cant_code fixed bin (35); 280 281 call msf_manager_$open (table_control_info.msf_directory_name, 282 table_control_info.msf_file_name, 283 table_control_info.msf_file_control_block_ptr, cant_code); 284 if cant_code ^= error_table_$noentry 285 then call ssu_$abort_line (sci_ptr, cant_code, 286 "While trying to create/open the multi-segment file^/^a.", 287 pathname_ (table_control_info.msf_directory_name, 288 table_control_info.msf_file_name)); 289 290 table_control_info.maximum_number_of_rows_per_segment 291 = divide (sys_info$max_seg_size * 4, table_info.row_value_length, 21); 292 table_control_info.current_segment_row_count = 0; 293 table_control_info.current_component_ptr = null; 294 table_control_info.row_count = 0; 295 296 return; 297 298 end create_a_new_table; 299 300 create_a_segment_for_row_ptrs: proc; 301 302 dcl casfrp_code fixed bin (35); 303 dcl casfrp_loop fixed bin; 304 dcl casfrp_temporary_ptr ptr; 305 306 if (table_segments_info.current_number_of_segments 307 = table_segments_info.maximum_number_of_segments) 308 then do; 309 tsi_init_maximum_number_of_segments 310 = table_segments_info.maximum_number_of_segments + STARTING_NUMBER_OF_SEGMENTS; 311 allocate table_segments_info in (work_area) 312 set (casfrp_temporary_ptr); 313 casfrp_temporary_ptr -> table_segments_info.current_number_of_segments 314 = table_segments_ip -> table_segments_info.current_number_of_segments; 315 do casfrp_loop = 1 to tsi_init_maximum_number_of_segments; 316 if casfrp_loop > table_segments_ip -> table_segments_info.maximum_number_of_segments 317 then casfrp_temporary_ptr -> table_segments_info.segment_ptrs (casfrp_loop) = null; 318 else casfrp_temporary_ptr -> table_segments_info.segment_ptrs (casfrp_loop) 319 = table_segments_ip -> table_segments_info.segment_ptrs (casfrp_loop); 320 end; 321 free table_segments_ip -> table_segments_info; 322 table_segments_ip = casfrp_temporary_ptr; 323 table_control_info.table_segments_info_ptr = table_segments_ip; 324 end; 325 326 call rw_temp_seg_mgr$get_segment (table_control_ip, RW_TABLE_MANAGER, 327 report_control_info.temp_dir_name, 328 table_segments_info.segment_ptrs ( 329 table_segments_info.current_number_of_segments + 1), casfrp_code); 330 if casfrp_code ^= 0 331 then call ssu_$abort_line (sci_ptr, casfrp_code, 332 "^/Unable to get a temp segment in ^/^a.", 333 rtrim (report_control_info.temp_dir_name)); 334 335 table_segments_info.current_number_of_segments 336 = table_segments_info.current_number_of_segments + 1; 337 row_ptrs_ptr = table_segments_info.segment_ptrs ( 338 table_segments_info.current_number_of_segments); 339 row_ptrs.number_of_ptrs_in_this_segment = 0; 340 341 return; 342 343 end create_a_segment_for_row_ptrs; 344 345 delete_the_table: proc ( 346 347 dtt_code_parm /* output: success or failure */ 348 /* only returned from replaceable delete_table proc */ 349 ); 350 351 dcl dtt_code fixed bin (35); 352 dcl dtt_code_parm fixed bin (35) parm; 353 dcl dtt_loop fixed bin; 354 355 do dtt_loop = 1 to table_segments_info.current_number_of_segments; 356 call rw_temp_seg_mgr$release_segment (table_control_ip, RW_TABLE_MANAGER, 357 table_segments_info.segment_ptrs (dtt_loop), dtt_code); 358 if dtt_code ^= 0 359 then call ssu_$print_message (sci_ptr, dtt_code, 360 "^/While trying to delete the temp segment pointed to by ^p.", 361 table_segments_info.segment_ptrs (dtt_loop)); 362 end; 363 364 table_segments_info.current_number_of_segments = 0; 365 table_segments_info.segment_ptrs (*) = null; 366 table_control_info.current_component_ptr = null; 367 table_control_info.current_segment_row_count = 0; 368 369 call msf_manager_$close (table_control_info.msf_file_control_block_ptr); 370 call delete_$path (table_control_info.msf_directory_name, 371 table_control_info.msf_file_name, DELETE_SWITCH, 372 "rw_table_manager", dtt_code); 373 if dtt_code ^= 0 374 then call ssu_$print_message (sci_ptr, dtt_code, 375 "While trying to delete^/^a.", 376 pathname_ (table_control_info.msf_directory_name, 377 table_control_info.msf_file_name)); 378 table_control_info.number_of_components = 0; 379 380 call report_control_info.table_manager_delete_table_entry ( 381 report_control_info.subsystems_info_ptr, dtt_code_parm); 382 383 return; 384 385 end delete_the_table; 386 387 get_an_msf_component: proc; 388 389 dcl gamc_code fixed bin (35); 390 391 call msf_manager_$get_ptr (table_control_info.msf_file_control_block_ptr, 392 table_control_info.number_of_components, CREATE_SWITCH, 393 table_control_info.current_component_ptr, (0), gamc_code); 394 if gamc_code ^= 0 395 then call ssu_$abort_line (sci_ptr, gamc_code, 396 "^/While trying to create component ^d for the MSF ^/pointed to by ^p.", 397 table_control_info.number_of_components, table_control_info.msf_file_control_block_ptr); 398 399 table_control_info.number_of_components = table_control_info.number_of_components + 1; 400 table_control_info.current_segment_row_count = 0; 401 402 return; 403 404 end get_an_msf_component; 405 406 initialize_automatic_variables: proc; 407 408 sci_ptr = report_control_info.subsystem_control_info_ptr; 409 table_ip = report_control_info.table_information_ptr; 410 table_control_ip = report_control_info.table_control_info_ptr; 411 table_segments_ip = table_control_info.table_segments_info_ptr; 412 work_area_ptr = table_control_info.general_work_area_ptr; 413 414 return; 415 416 end initialize_automatic_variables; 417 418 initialize_the_table: proc; 419 420 work_area_ptr = report_control_info.general_work_area_ptr; 421 422 allocate table_control_info in (work_area) 423 set (table_control_ip); 424 sci_ptr = report_control_info.subsystem_control_info_ptr; 425 426 table_control_info.number_of_components = 0; 427 table_control_info.maximum_number_of_rows_per_segment = 0; 428 table_control_info.current_segment_row_count = 0; 429 table_control_info.table_information_ptr = report_control_info.table_information_ptr; 430 table_control_info.table_segments_info_ptr = null; 431 table_control_info.msf_file_control_block_ptr = null; 432 table_control_info.current_component_ptr = null; 433 table_control_info.temp_seg_info_ptr = null; 434 table_control_info.subsystem_control_info_ptr = sci_ptr; 435 table_control_info.msf_file_name = unique_chars_ (""b) || ".rw_.table"; 436 table_control_info.msf_directory_name = get_pdir_ (); 437 438 call ssu_$get_area (sci_ptr, null, "table area", work_area_ptr); 439 table_control_info.general_work_area_ptr = work_area_ptr; 440 441 tsi_init_maximum_number_of_segments = STARTING_NUMBER_OF_SEGMENTS; 442 allocate table_segments_info in (work_area) set (table_segments_ip); 443 table_segments_info.maximum_number_of_ptrs_per_segment = sys_info$max_seg_size - SIZE_OF_ROW_PTRS_HEADER; 444 table_segments_info.current_number_of_segments = 0; 445 table_segments_info.segment_ptrs (*) = null; 446 table_control_info.table_segments_info_ptr = table_segments_ip; 447 448 report_control_info.table_control_info_ptr = table_control_ip; 449 450 return; 451 452 end initialize_the_table; 453 454 load_a_row_into_the_table: proc; 455 456 dcl laritt_row_value char (table_info.row_value_length) based (laritt_row_value_ptr); 457 dcl laritt_row_value_buffer char (table_info.row_value_length) based (table_info.row_value_ptr); 458 dcl laritt_row_value_ptr ptr; 459 460 if row_ptrs.number_of_ptrs_in_this_segment >= table_segments_info.maximum_number_of_ptrs_per_segment 461 then call create_a_segment_for_row_ptrs; 462 463 if table_control_info.current_segment_row_count 464 >= table_control_info.maximum_number_of_rows_per_segment 465 then call get_an_msf_component; 466 467 laritt_row_value_ptr = addcharno (table_control_info.current_component_ptr, 468 table_control_info.current_segment_row_count * table_info.row_value_length + 1); 469 laritt_row_value = laritt_row_value_buffer; 470 table_control_info.current_segment_row_count 471 = table_control_info.current_segment_row_count + 1; 472 473 table_control_info.row_count = table_control_info.row_count + 1; 474 475 row_ptrs_ptr = table_segments_info.segment_ptrs ( 476 table_segments_info.current_number_of_segments); 477 row_ptrs.number_of_ptrs_in_this_segment = row_ptrs.number_of_ptrs_in_this_segment + 1; 478 row_ptrs.row_value_ptr (row_ptrs.number_of_ptrs_in_this_segment) = laritt_row_value_ptr; 479 480 return; 481 482 end load_a_row_into_the_table; 483 484 set_the_table_manager: proc ( 485 486 sttm_table_manager_name_parm, /* input: name of table manager */ 487 sttm_message_parm) /* output: reason for the failure */ 488 returns (fixed bin (35) /* output: success or failure */ 489 ); 490 491 dcl sttm_code fixed bin (35); 492 dcl sttm_loop char (12); 493 dcl sttm_message_parm char (*) varying parm; 494 dcl sttm_table_entry_variables (3) variable entry (ptr, fixed bin (35)); 495 dcl sttm_table_manager_name char (32); 496 dcl sttm_table_manager_name_parm char (*) parm; 497 dcl sttm_variables_index fixed bin; 498 499 sttm_table_manager_name = sttm_table_manager_name_parm; 500 sttm_message_parm = ""; 501 sttm_variables_index = 1; 502 503 do sttm_loop = "create_table", "delete_table", "get_row"; 504 call hcs_$make_entry (null, sttm_table_manager_name, 505 sttm_loop, sttm_table_entry_variables ( 506 sttm_variables_index), sttm_code); 507 if sttm_code ^= 0 508 then do; 509 sttm_message_parm = "Unable to make an entry to " 510 || rtrim (sttm_loop) || "."; 511 return (sttm_code); 512 end; 513 sttm_variables_index = sttm_variables_index + 1; 514 end; 515 516 report_control_info.table_manager_create_table_entry = sttm_table_entry_variables (1); 517 report_control_info.table_manager_delete_table_entry = sttm_table_entry_variables (2); 518 report_control_info.table_manager_get_row_entry = sttm_table_entry_variables (3); 519 520 call hcs_$make_entry (null, sttm_table_manager_name, "get_query", 521 report_control_info.table_manager_get_query_entry, sttm_code); 522 if sttm_code ^= 0 523 then report_control_info.table_manager_get_query_entry = report_writer_$create_invocation; 524 525 return (0); 526 527 end set_the_table_manager; 528 529 sort_the_table: proc ( 530 531 stt_code_parm /* output: success or failure */ 532 ); 533 534 dcl stt_code_parm fixed bin (35) parm; 535 dcl stt_loop fixed bin; 536 dcl stt_sort_descriptors_array (ss_field_count) ptr based (stt_sort_descriptors_array_ptr); 537 dcl stt_sort_descriptors_array_ptr ptr; 538 dcl 1 stt_sort_input aligned based (stt_sort_input_ptr), 539 2 number_of_segments fixed bin, 540 2 number_of_components fixed bin, 541 2 sorted bit (1), 542 2 segment_ptrs (stt_sort_input_init_number_of_segments refer ( 543 stt_sort_input.number_of_segments)) ptr unaligned, 544 2 component_ptrs (stt_sort_input_init_number_of_components refer ( 545 stt_sort_input.number_of_components)) ptr unaligned; 546 dcl stt_sort_input_init_number_of_components fixed bin; 547 dcl stt_sort_input_init_number_of_segments fixed bin; 548 dcl stt_sort_input_ptr ptr; 549 dcl 1 stt_sort_output aligned based (stt_sort_output_ptr), 550 2 number_of_segments fixed bin, 551 2 segment_ptrs (stt_sort_input_init_number_of_segments refer ( 552 stt_sort_output.number_of_segments)) ptr unaligned; 553 dcl stt_sort_output_ptr ptr; 554 dcl stt_sort_was_successful bit (1) aligned; 555 dcl stt_temp_ptr ptr; 556 557 stt_code_parm = 0; 558 ss_info_ptr = null; 559 stt_sort_descriptors_array_ptr = null; 560 stt_sort_input_ptr = null; 561 stt_sort_output_ptr = null; 562 stt_sort_was_successful = OFF; 563 564 on cleanup call cleanup_sort_information; 565 566 ss_field_count = sort_info.number_of_columns_to_sort; 567 allocate ss_info in (work_area) set (ss_info_ptr); 568 ss_info.header.version = SS_info_version_1; 569 ss_info.header.block_size = 1; 570 ss_info.header.duplicate_mode = SS_duplicates; 571 ss_info.header.mbz1 (*) = 0; 572 ss_info.header.delim.type = SS_length; 573 ss_info.header.delim.number = table_info.row_value_length; 574 ss_info.header.delim.string = ""; 575 ss_info.field.from.type (*) = SS_index; 576 ss_info.field.from.string (*) = ""; 577 ss_info.field.to.type (*) = SS_length; 578 ss_info.field.to.string (*) = ""; 579 unspec (ss_info.field.modes (*)) = OFF; 580 allocate stt_sort_descriptors_array in (work_area) 581 set (stt_sort_descriptors_array_ptr); 582 583 do stt_loop = 1 to ss_field_count; 584 ss_info.field.from.number (stt_loop) 585 = table_info.columns.column_index (sort_info.columns.number (stt_loop)); 586 ss_info.field.to.number (stt_loop) 587 = table_info.columns.column_length (sort_info.columns.number (stt_loop)); 588 ss_info.field.modes.descending (stt_loop) 589 = sort_info.columns.modes.descending (stt_loop); 590 ss_info.field.modes.non_case_sensitive (stt_loop) 591 = sort_info.columns.modes.non_case_sensitive (stt_loop); 592 stt_sort_descriptors_array (stt_loop) 593 = addr (table_info.columns.column_data_type (sort_info.columns.number (stt_loop))); 594 ss_info.field.modes.numeric (stt_loop) 595 = mdbm_util_$number_data_class (stt_sort_descriptors_array (stt_loop)); 596 end; 597 598 stt_sort_input_init_number_of_segments = table_segments_info.current_number_of_segments; 599 stt_sort_input_init_number_of_components = table_control_info.number_of_components; 600 allocate stt_sort_input in (work_area) set (stt_sort_input_ptr); 601 stt_sort_input.segment_ptrs (*) = null; 602 stt_sort_input.sorted = OFF; 603 604 do stt_loop = 1 to stt_sort_input_init_number_of_segments; 605 stt_sort_input.segment_ptrs (stt_loop) = table_segments_info.segment_ptrs (stt_loop); 606 end; 607 608 do stt_loop = 1 to stt_sort_input_init_number_of_components; 609 call msf_manager_$get_ptr (table_control_info.msf_file_control_block_ptr, 610 stt_loop - 1, DONT_CREATE_SWITCH, 611 stt_temp_ptr, (0), stt_code_parm); 612 if stt_code_parm ^= 0 613 then call ssu_$abort_line (sci_ptr, stt_code_parm, 614 "^/While trying to obtain a pointer to component # ^d, for the MSF^/pointed to by ^p.", 615 stt_loop - 1, table_control_info.msf_file_control_block_ptr); 616 stt_sort_input.component_ptrs (stt_loop) = stt_temp_ptr; 617 end; 618 619 allocate stt_sort_output in (work_area) set (stt_sort_output_ptr); 620 stt_sort_output.segment_ptrs (*) = null; 621 622 do stt_loop = 1 to stt_sort_input_init_number_of_segments; 623 call rw_temp_seg_mgr$get_segment (table_control_ip, RW_TABLE_MANAGER, 624 report_control_info.temp_dir_name, 625 stt_temp_ptr, stt_code_parm); 626 if stt_code_parm ^= 0 627 then call ssu_$abort_line (sci_ptr, stt_code_parm, 628 "^/Unable to get a temp segment in ^/^a.", 629 rtrim (report_control_info.temp_dir_name)); 630 stt_sort_output.segment_ptrs (stt_loop) = stt_temp_ptr; 631 end; 632 633 call sort_seg_$linus_table (table_control_ip, RW_TABLE_MANAGER, ss_info_ptr, 634 rw_temp_seg_mgr$get_segment, rw_temp_seg_mgr$release_segment, 635 report_control_info.temp_dir_name, stt_sort_input_ptr, 636 stt_sort_descriptors_array, stt_sort_output_ptr, stt_code_parm); 637 if stt_code_parm ^= 0 638 then call ssu_$abort_line (sci_ptr, stt_code_parm, 639 "^/Unable to sort the table."); 640 641 stt_sort_was_successful = ON; 642 call cleanup_sort_information; 643 644 return; 645 646 cleanup_sort_information: proc; 647 648 dcl csi_loop fixed bin; 649 650 if ss_info_ptr ^= null 651 then free ss_info; 652 if stt_sort_descriptors_array_ptr ^= null 653 then free stt_sort_descriptors_array; 654 655 if stt_sort_input_ptr = null 656 then return; 657 658 if stt_sort_was_successful 659 then do csi_loop = 1 to stt_sort_input_init_number_of_segments; 660 table_segments_info.segment_ptrs (csi_loop) 661 = stt_sort_output.segment_ptrs (csi_loop); 662 stt_temp_ptr = stt_sort_input.segment_ptrs (csi_loop); 663 call rw_temp_seg_mgr$release_segment (table_control_ip, RW_TABLE_MANAGER, 664 stt_temp_ptr, (0)); 665 end; 666 else if stt_sort_output_ptr ^= null 667 then do csi_loop = 1 to stt_sort_input_init_number_of_segments; 668 if stt_sort_output.segment_ptrs (csi_loop) ^= null 669 then do; 670 stt_temp_ptr = stt_sort_output.segment_ptrs (csi_loop); 671 call rw_temp_seg_mgr$release_segment (table_control_ip, RW_TABLE_MANAGER, 672 stt_temp_ptr, (0)); 673 end; 674 else; 675 end; 676 else; 677 678 free stt_sort_input; 679 if stt_sort_output_ptr ^= null 680 then free stt_sort_output; 681 682 return; 683 684 end cleanup_sort_information; 685 686 end sort_the_table; 687 688 terminate_the_table: proc; 689 690 sci_ptr = report_control_info.subsystem_control_info_ptr; 691 table_control_ip = report_control_info.table_control_info_ptr; 692 if table_control_ip = null 693 then return; 694 695 call rw_temp_seg_mgr$terminate (table_control_ip, (0)); 696 work_area_ptr = table_control_info.general_work_area_ptr; 697 call ssu_$release_area (sci_ptr, work_area_ptr); 698 free table_control_info; 699 report_control_info.table_control_info_ptr = null; 700 701 return; 702 703 end terminate_the_table; 704 705 dcl CREATE_SWITCH bit (1) internal static options (constant) init ("1"b); 706 707 dcl DELETE_SWITCH bit (6) internal static options (constant) init ("100100"b); 708 dcl DONT_CREATE_SWITCH bit (1) internal static options (constant) init ("0"b); 709 710 dcl OFF bit (1) aligned internal static options (constant) init ("0"b); 711 dcl ON bit (1) aligned internal static options (constant) init ("1"b); 712 713 dcl RW_TABLE_MANAGER char (16) internal static options (constant) init ("rw_table_manager"); 714 715 dcl SIZE_OF_ROW_PTRS_HEADER fixed bin internal static options (constant) init (1); 716 dcl STARTING_NUMBER_OF_SEGMENTS fixed bin static internal options (constant) init (10); 717 718 dcl addcharno builtin; 719 dcl addr builtin; 720 721 dcl cleanup condition; 722 dcl com_err_ entry() options(variable); 723 724 dcl delete_$path entry (char(*), char(*), bit(6), char(*), fixed bin(35)); 725 dcl divide builtin; 726 727 dcl error_table_$badcall fixed bin(35) ext static; 728 dcl error_table_$noentry fixed bin(35) ext static; 729 dcl error_table_$unsupported_operation fixed bin(35) ext static; 730 731 dcl get_pdir_ entry() returns(char(168)); 732 733 dcl hcs_$make_entry entry (ptr, char(*), char(*), entry, fixed bin(35)); 734 735 dcl loop fixed bin (35); 736 737 dcl mdbm_util_$number_data_class entry (ptr) returns (bit (1) aligned); 738 dcl msf_manager_$close entry (ptr); 739 dcl msf_manager_$get_ptr entry (ptr, fixed bin, bit(1), ptr, fixed bin(24), fixed bin(35)); 740 dcl msf_manager_$open entry (char(*), char(*), ptr, fixed bin(35)); 741 742 dcl null builtin; 743 744 dcl pathname_ entry (char(*), char(*)) returns(char(168)); 745 746 dcl report_writer_$create_invocation entry; 747 dcl row_count_specified fixed bin (35); 748 dcl rtrim builtin; 749 dcl rw_error_$no_data fixed bin(35) ext static; 750 dcl rw_temp_seg_mgr$get_segment entry (ptr, char(*), char(*), ptr, fixed bin(35)); 751 dcl rw_temp_seg_mgr$release_segment entry (ptr, char(*), ptr, fixed bin(35)); 752 dcl rw_temp_seg_mgr$terminate entry (ptr, fixed bin(35)); 753 754 dcl sci_ptr ptr; 755 dcl sort_seg_$linus_table entry (ptr, char(*), ptr, entry, entry, char(*), ptr, (*) ptr, ptr, fixed bin(35)); 756 dcl ssu_$abort_line entry() options(variable); 757 dcl ssu_$get_area entry (ptr, ptr, char(*), ptr); 758 dcl ssu_$get_subsystem_name entry (ptr) returns (char (32)); 759 dcl ssu_$print_message entry() options(variable); 760 dcl ssu_$release_area entry (ptr, ptr); 761 dcl still_loading_the_table bit (1) aligned; 762 dcl sys_info$max_seg_size fixed bin(35) ext static; 763 764 dcl unique_chars_ entry (bit(*)) returns(char(15)); 765 dcl unspec builtin; 766 767 dcl work_area area (sys_info$max_seg_size) based (work_area_ptr); 768 dcl work_area_ptr ptr; 769 1 1 /* BEGIN INCLUDE FILE rw_options_extents.incl.pl1 1 2* 1 3* Extents for the formatting options used for producing reports. 1 4* Kept as a separate include so that some programs may include this 1 5* file without including rw_format_options.incl.pl1 1 6* 1 7* Al Dupuis - August 1983 1 8* 1 9**/ 1 10 /* format: off */ 1 11 1 12 /* The three types of format options that we have. */ 1 13 1 14 dcl GENERAL_REPORT_OPTION fixed bin static int options (constant) init (1); 1 15 dcl GENERAL_COLUMN_OPTION fixed bin static int options (constant) init (2); 1 16 dcl SPECIFIC_COLUMN_OPTION fixed bin static int options (constant) init (3); 1 17 1 18 /* Used to determine how big the tables are without doing a hbound on it. */ 1 19 1 20 dcl NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (15); 1 21 dcl NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE fixed bin static int options (constant) init (9); 1 22 dcl NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (6); 1 23 1 24 /* Used to determine how much space is needed to list them. */ 1 25 1 26 dcl LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (10); /* -alignment */ 1 27 dcl LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH fixed bin static int options (constant) init (25); /* -format_document_controls */ 1 28 dcl LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (21); /* -group_footer_trigger */ 1 29 1 30 /* MAXIMUM_OPTION_IDENTIFIER_LENGTH + MAXIMUM_OPTION_NAME_LENGTH */ 1 31 1 32 dcl MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH fixed bin static int options (constant) init (101); 1 33 1 34 dcl MAXIMUM_OPTION_IDENTIFIER_LENGTH fixed bin static int options (constant) init (69); 1 35 dcl MAXIMUM_OPTION_NAME_LENGTH fixed bin static int options (constant) init (32); 1 36 dcl MAXIMUM_OPTION_VALUE_LENGTH fixed bin static int options (constant) init (4096); 1 37 1 38 /* Used to index into the OPTIONS tables defined in rw_format_options.incl.pl1. */ 1 39 1 40 dcl INDEX_FOR_DELIMITER fixed bin static int options (constant) init (1); 1 41 dcl INDEX_FOR_FORMAT_DOCUMENT_CONTROLS fixed bin static int options (constant) init (2); 1 42 dcl INDEX_FOR_HYPHENATION fixed bin static int options (constant) init (3); 1 43 dcl INDEX_FOR_PAGE_FOOTER_VALUE fixed bin static int options (constant) init (4); 1 44 dcl INDEX_FOR_PAGE_HEADER_VALUE fixed bin static int options (constant) init (5); 1 45 dcl INDEX_FOR_PAGE_LENGTH fixed bin static int options (constant) init (6); 1 46 dcl INDEX_FOR_PAGE_WIDTH fixed bin static int options (constant) init (7); 1 47 dcl INDEX_FOR_TITLE_LINE fixed bin static int options (constant) init (8); 1 48 dcl INDEX_FOR_TRUNCATION fixed bin static int options (constant) init (9); 1 49 1 50 dcl INDEX_FOR_COLUMN_ORDER fixed bin static int options (constant) init (1); 1 51 dcl INDEX_FOR_COUNT fixed bin static int options (constant) init (2); 1 52 dcl INDEX_FOR_EXCLUDE fixed bin static int options (constant) init (3); 1 53 dcl INDEX_FOR_GROUP fixed bin static int options (constant) init (4); 1 54 dcl INDEX_FOR_GROUP_FOOTER_TRIGGER fixed bin static int options (constant) init (5); 1 55 dcl INDEX_FOR_GROUP_FOOTER_VALUE fixed bin static int options (constant) init (6); 1 56 dcl INDEX_FOR_GROUP_HEADER_TRIGGER fixed bin static int options (constant) init (7); 1 57 dcl INDEX_FOR_GROUP_HEADER_VALUE fixed bin static int options (constant) init (8); 1 58 dcl INDEX_FOR_OUTLINE fixed bin static int options (constant) init (9); 1 59 dcl INDEX_FOR_PAGE_BREAK fixed bin static int options (constant) init (10); 1 60 dcl INDEX_FOR_ROW_FOOTER_VALUE fixed bin static int options (constant) init (11); 1 61 dcl INDEX_FOR_ROW_HEADER_VALUE fixed bin static int options (constant) init (12); 1 62 dcl INDEX_FOR_SUBCOUNT fixed bin static int options (constant) init (13); 1 63 dcl INDEX_FOR_SUBTOTAL fixed bin static int options (constant) init (14); 1 64 dcl INDEX_FOR_TOTAL fixed bin static int options (constant) init (15); 1 65 1 66 dcl INDEX_FOR_ALIGNMENT fixed bin static int options (constant) init (1); 1 67 dcl INDEX_FOR_EDITING fixed bin static int options (constant) init (2); 1 68 dcl INDEX_FOR_FOLDING fixed bin static int options (constant) init (3); 1 69 dcl INDEX_FOR_SEPARATOR fixed bin static int options (constant) init (4); 1 70 dcl INDEX_FOR_TITLE fixed bin static int options (constant) init (5); 1 71 dcl INDEX_FOR_WIDTH fixed bin static int options (constant) init (6); 1 72 1 73 /* END INCLUDE FILE rw_options_extents */ 770 771 2 1 /* BEGIN INCLUDE FILE rw_report_info.incl.pl1 2 2* Information needed to control the report environment. 2 3* Al Dupuis - August 1983 2 4**/ 2 5 /* format: off */ 2 6 2 7 dcl 1 report_control_info aligned based (report_cip), 2 8 2 flags, 2 9 3 report_is_paginated bit (1) unaligned, /* paged or one continous stream */ 2 10 3 table_has_been_started bit (1) unaligned, /* table clean up is necessary */ 2 11 3 table_is_full bit (1) unaligned, /* no more retrieves are necessary */ 2 12 3 report_has_been_started bit (1) unaligned, /* report clean up is necessary */ 2 13 3 report_is_formatted bit (1) unaligned, /* no more formatting is necessary */ 2 14 3 permanent_report bit (1) unaligned, /* or disposable */ 2 15 3 permanent_table bit (1) unaligned, /* or disposable */ 2 16 3 report_has_just_been_completed bit (1) unaligned, /* used for printing timers */ 2 17 3 table_has_just_been_loaded bit (1) unaligned, /* used for printing timers */ 2 18 3 multi_pass_mode bit (1) unaligned, /* on if we are to do more than 1 pass */ 2 19 3 available bit (26) unaligned, 2 20 2 format_options_flags, /* used to determine if value is default */ 2 21 3 general_report_default_value (NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE) bit (1) unaligned, 2 22 3 general_column_default_value (NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE) bit (1) unaligned, 2 23 2 value_seg_ptr ptr, /* the options value seg */ 2 24 2 table_information_ptr ptr, /* points to table_info */ 2 25 2 table_control_info_ptr ptr, /* points to table_control_info */ 2 26 2 row_value_temp_segment_ptr ptr, /* points to a segment for the row value */ 2 27 2 general_work_area_ptr ptr, /* a freeing work area */ 2 28 2 name_value_area_ptr ptr, /* area for name-value allocations */ 2 29 2 subsystem_control_info_ptr ptr, /* ptr for ssu_ info structure */ 2 30 2 subsystems_info_ptr ptr, /* points to subsystems info structure */ 2 31 2 name_value_temp_seg_ptr ptr, /* temp seg for name-value space */ 2 32 2 report_temp_seg_ptr ptr, /* report workspace */ 2 33 2 report_work_area_ptr ptr, /* report workspace */ 2 34 2 format_report_info_ptr ptr, /* info needed to create a report */ 2 35 2 input_string_temp_seg_ptr ptr, /* report workspace */ 2 36 2 output_string_temp_seg_ptr ptr, /* report workspace */ 2 37 2 editing_strings_temp_seg_ptr ptr, /* report workspace */ 2 38 2 headers_temp_seg_ptr ptr, /* report workspace */ 2 39 2 display_iocb_ptr ptr, /* report is displayed through this */ 2 40 2 area_info_ptr ptr, /* points to area_info structure */ 2 41 2 table_manager_delete_table_entry variable entry (ptr, fixed bin (35)), /* entry who deletes the table */ 2 42 2 table_manager_get_query_entry variable entry (ptr, ptr, fixed bin (21), fixed bin (35)), /* entry who gets the query */ 2 43 2 table_manager_get_row_entry variable entry (ptr, fixed bin (35)), /* entry who loads rows */ 2 44 2 table_manager_create_table_entry variable entry (ptr, fixed bin (35)), /* entry who makes a new table */ 2 45 2 options_identifier fixed bin, /* current set of options */ 2 46 2 report_identifier fixed bin, /* current report */ 2 47 2 no_of_rows_retrieved fixed bin (35), /* current no of rows */ 2 48 2 no_of_formatted_pages fixed bin (21), /* current no of pages */ 2 49 2 number_of_passes fixed bin, /* number of times report will be formatted */ 2 50 2 table_loading_time float bin (63), 2 51 2 table_sorting_time float bin (63), 2 52 2 table_deletion_time float bin (63), 2 53 2 report_setup_time float bin (63), 2 54 2 report_formatting_time float bin (63), 2 55 2 report_display_time float bin (63), 2 56 2 report_deletion_time float bin (63), 2 57 2 ssu_evaluate_active_string_time float bin (63), 2 58 2 temp_dir_unique_id bit (36), /* uid of temp dir */ 2 59 2 subsystems_ec_suffix char (32), /* suffix for saving and restoring ecs */ 2 60 2 temp_dir_name char (168) unaligned; /* the dir where we place the retrieved table and report */ 2 61 dcl report_cip ptr init (null ()); 2 62 2 63 /* END INCLUDE FILE rw_report_info.incl.pl1 */ 772 773 3 1 /* BEGIN INCLUDE FILE ... rw_sort_info.incl.pl1 3 2* 3 3* Info structure used to provide sorting. 3 4* Written: Dave Schimke 2/25/83 3 5**/ 3 6 3 7 dcl 1 sort_info based (sort_info_ptr), 3 8 2 number_of_columns_to_sort fixed bin (17), 3 9 2 columns (no_of_candidate_columns refer(sort_info.number_of_columns_to_sort)), 3 10 3 number fixed bin (17), 3 11 3 modes, 3 12 4 descending bit (1) unal, 3 13 4 non_case_sensitive bit (1) unal, 3 14 4 mbz1 bit(34) unal; 3 15 3 16 dcl sort_info_ptr ptr; 3 17 dcl no_of_candidate_columns fixed bin; 3 18 3 19 3 20 /* END INCLUDE FILE rw_sort_info.incl.pl1 */ 774 775 4 1 /* BEGIN INCLUDE FILE rw_table_control_info.incl.pl1 4 2* 4 3* Written - Al Dupuis 4 4**/ 4 5 /* format: off */ 4 6 4 7 dcl 1 row_ptrs aligned based (row_ptrs_ptr), 4 8 2 number_of_ptrs_in_this_segment fixed bin (21), 4 9 2 row_value_ptr (row_ptrs.number_of_ptrs_in_this_segment) ptr unaligned; 4 10 4 11 dcl 1 table_control_info aligned based (table_control_ip), 4 12 2 row_count fixed bin (35), 4 13 2 number_of_components fixed bin, 4 14 2 maximum_number_of_rows_per_segment fixed bin (21), 4 15 2 current_segment_row_count fixed bin (21), 4 16 2 table_information_ptr ptr, 4 17 2 table_segments_info_ptr ptr, 4 18 2 msf_file_control_block_ptr ptr, 4 19 2 current_component_ptr ptr, 4 20 2 general_work_area_ptr ptr, 4 21 2 temp_seg_info_ptr ptr, 4 22 2 subsystem_control_info_ptr ptr, 4 23 2 msf_file_name char (32) unaligned, 4 24 2 msf_directory_name char (168) unaligned; 4 25 4 26 dcl 1 table_segments_info aligned based (table_segments_ip), 4 27 2 maximum_number_of_segments fixed bin, 4 28 2 maximum_number_of_ptrs_per_segment fixed bin (21), 4 29 2 current_number_of_segments fixed bin, 4 30 2 segment_ptrs (tsi_init_maximum_number_of_segments refer 4 31 (table_segments_info.maximum_number_of_segments)) ptr; 4 32 4 33 dcl row_ptrs_ptr ptr; 4 34 dcl table_segments_ip ptr; 4 35 dcl table_control_ip ptr; 4 36 dcl tsi_init_maximum_number_of_segments fixed bin (21); 4 37 4 38 /* END INCLUDE FILE rw_table_control_info.incl.pl1 */ 776 777 5 1 /* BEGIN INCLUDE FILE rw_table_info.incl.pl1 5 2* 5 3* Written - Al Dupuis 5 4**/ 5 5 /* format: off */ 5 6 5 7 dcl 1 table_info aligned based (table_ip), 5 8 2 version char (8), 5 9 2 column_count fixed bin, 5 10 2 maximum_column_name_length fixed bin, 5 11 2 maximum_column_value_length fixed bin, 5 12 2 row_value_length fixed bin (21), 5 13 2 row_value_ptr ptr, 5 14 2 columns (ti_init_column_count refer (table_info.column_count)), 5 15 3 column_name char (69) varying, 5 16 3 column_data_type bit (36), 5 17 3 column_length fixed bin (21), 5 18 3 column_index fixed bin (21); 5 19 5 20 dcl table_ip ptr; 5 21 dcl ti_init_column_count fixed bin; 5 22 dcl TABLE_INFO_VERSION_1 char (8) internal static options (constant) init ("rwti_001"); 5 23 5 24 /* END INCLUDE FILE view_master_table_info.incl.pl1 */ 778 779 6 1 /* START OF: sort_seg_info.incl.pl1 * * * * * * * * * * * * * * * * */ 6 2 6 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 6 4 /* */ 6 5 /* This include file declares the information structure for the sort_seg_ subroutine. */ 6 6 /* This structure defines the sort string delimiter, and sort field delimiters for fields */ 6 7 /* to be sorted upon within each sort unit (sort string or block of sort strings). */ 6 8 /* */ 6 9 /* Status */ 6 10 /* 0) Created: May 1, 1982 by G. C. Dixon */ 6 11 /* 1) Modified: July 22, 1982 by DJ Schimke adding numeric and integer sort modes. */ 6 12 /* */ 6 13 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 6 14 6 15 dcl 1 ss_info aligned based(ss_info_ptr), 6 16 2 header, 6 17 3 version char(8), /* version of this structure. Set with */ 6 18 /* SS_info_version_1 string constant. */ 6 19 3 block_size fixed bin, /* number of sort strings to be blocked together */ 6 20 /* in each sort unit. */ 6 21 3 field_count fixed bin, /* number of sort fields within eacch sort unit. */ 6 22 3 duplicate_mode fixed bin, /* method of handling duplicate sort units. Set */ 6 23 /* with one of the constants below. */ 6 24 3 mbz1 (3) fixed bin, /* reserved for future use. Set to 0. */ 6 25 3 delim, /* sort string delimiter definition. */ 6 26 4 type fixed bin, /* type of delimiter. Set with one of field */ 6 27 /* constants below. */ 6 28 4 number fixed bin, /* numeric type delimiter value. */ 6 29 4 string char(256) varying, /* string type delimiter value. */ 6 30 2 field (ss_field_count refer (ss_info.field_count)), 6 31 /* sort field definitions */ 6 32 3 from like ss_info.delim, /* start of sort field. */ 6 33 3 to like ss_info.delim, /* end of sort field. */ 6 34 3 modes, /* per-field sort modes. */ 6 35 (4 descending bit(1), /* sort field in descending order */ 6 36 4 non_case_sensitive bit(1), /* translate field to lowercase for sorting. */ 6 37 4 numeric bit(1), /* sort field according to numeric value. */ 6 38 4 integer bit(1), /* sort field according to integer value. */ 6 39 4 mbz2 bit(32)) unal, /* reserved for future use. Set to ""b. */ 6 40 ss_field_count fixed bin, 6 41 ss_info_ptr ptr, 6 42 6 43 SS_info_version_1 char(8) int static options(constant) init("ss_info1"), 6 44 /* string constant which must be used to set */ 6 45 /* structure version. */ 6 46 /* constants for setting duplicate_mode, type(s) */ 6 47 (SS_unset init(0), 6 48 SS_duplicates init(1), /* duplicate modes */ 6 49 SS_unique init(2), 6 50 SS_only_duplicates init(3), 6 51 SS_only_duplicate_keys init(4), 6 52 SS_unique_keys init(5), 6 53 SS_only_unique init(6), 6 54 SS_only_unique_keys init(7), 6 55 SS_length init(1), /* field types */ 6 56 SS_index init(2), 6 57 SS_string init(3), 6 58 SS_reg_exp init(4)) fixed bin int static options(constant); 6 59 6 60 /* END OF: sort_seg_info.incl.pl1 * * * * * * * * * * * * * * * * */ 780 781 782 end rw_table_manager; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/12/85 1044.7 rw_table_manager.pl1 >special_ldd>online>report_writer.pbf-04/12/85>rw_table_manager.pl1 770 1 11/16/84 1418.1 rw_options_extents.incl.pl1 >ldd>include>rw_options_extents.incl.pl1 772 2 11/16/84 1418.0 rw_report_info.incl.pl1 >ldd>include>rw_report_info.incl.pl1 774 3 11/16/84 1418.2 rw_sort_info.incl.pl1 >ldd>include>rw_sort_info.incl.pl1 776 4 11/16/84 1418.0 rw_table_control_info.incl.pl1 >ldd>include>rw_table_control_info.incl.pl1 778 5 11/16/84 1418.0 rw_table_info.incl.pl1 >ldd>include>rw_table_info.incl.pl1 780 6 05/18/84 0830.8 sort_seg_info.incl.pl1 >ldd>include>sort_seg_info.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. CREATE_SWITCH 000007 constant bit(1) initial unaligned dcl 705 set ref 391* DELETE_SWITCH 000006 constant bit(6) initial unaligned dcl 707 set ref 370* DONT_CREATE_SWITCH 000034 constant bit(1) initial unaligned dcl 708 set ref 609* NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 1-20 ref 113 119 119 151 153 157 157 193 193 219 219 326 330 330 380 380 408 409 410 420 424 429 448 516 517 518 520 522 623 626 626 633 690 691 699 NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 1-21 ref 113 119 119 151 153 157 157 193 193 219 219 326 330 330 380 380 408 409 410 420 424 429 448 516 517 518 520 522 623 626 626 633 690 691 699 OFF constant bit(1) initial dcl 710 ref 224 562 579 602 ON constant bit(1) initial dcl 711 ref 216 641 RW_TABLE_MANAGER 000002 constant char(16) initial unaligned dcl 713 set ref 99* 326* 356* 623* 633* 663* 671* SIZE_OF_ROW_PTRS_HEADER constant fixed bin(17,0) initial dcl 715 ref 443 SS_duplicates constant fixed bin(17,0) initial dcl 6-15 ref 570 SS_index constant fixed bin(17,0) initial dcl 6-15 ref 575 SS_info_version_1 000000 constant char(8) initial unaligned dcl 6-15 ref 568 SS_length constant fixed bin(17,0) initial dcl 6-15 ref 572 577 STARTING_NUMBER_OF_SEGMENTS constant fixed bin(17,0) initial dcl 716 ref 309 441 addcharno builtin function dcl 718 ref 467 addr builtin function dcl 719 ref 592 block_size 2 based fixed bin(17,0) level 3 dcl 6-15 set ref 569* cant_code 000144 automatic fixed bin(35,0) dcl 279 set ref 281* 284 284* casfrp_code 000154 automatic fixed bin(35,0) dcl 302 set ref 326* 330 330* casfrp_loop 000155 automatic fixed bin(17,0) dcl 303 set ref 315* 316 316 318 318* casfrp_temporary_ptr 000156 automatic pointer dcl 304 set ref 311* 313 316 318 322 cleanup 000000 stack reference condition dcl 721 ref 564 code_parm parameter fixed bin(35,0) dcl 89 set ref 103 110* 119* 121 121* 128 135* 138* 142 157* 162 169* 175 186* 192 193* 195 204 211* 219* 221 225 225* 232 241* 245 254* 257* 261 268* 271* column_data_type 33 based bit(36) array level 3 dcl 5-7 set ref 592 column_index 35 based fixed bin(21,0) array level 3 dcl 5-7 ref 584 column_length 34 based fixed bin(21,0) array level 3 dcl 5-7 ref 586 columns 1 based structure array level 2 in structure "sort_info" unaligned dcl 3-7 in procedure "rw_table_manager" columns 10 based structure array level 2 in structure "table_info" dcl 5-7 in procedure "rw_table_manager" com_err_ 000010 constant entry external dcl 722 ref 99 component_ptrs based pointer array level 2 packed unaligned dcl 538 set ref 616* csi_loop 000100 automatic fixed bin(17,0) dcl 648 set ref 658* 660 660 662* 666* 668 670* current_component_ptr 12 based pointer level 2 dcl 4-11 set ref 293* 366* 391* 432* 467 current_number_of_segments 2 based fixed bin(17,0) level 2 dcl 4-26 set ref 189 214 306 313* 313 326 335* 335 337 355 364* 444* 475 598 current_segment_row_count 3 based fixed bin(21,0) level 2 dcl 4-11 set ref 292* 367* 400* 428* 463 467 470* 470 delete_$path 000012 constant entry external dcl 724 ref 370 delim 10 based structure level 3 dcl 6-15 descending 2 based bit(1) array level 4 in structure "sort_info" packed unaligned dcl 3-7 in procedure "rw_table_manager" ref 588 descending 321 based bit(1) array level 4 in structure "ss_info" packed unaligned dcl 6-15 in procedure "rw_table_manager" set ref 588* divide builtin function dcl 725 ref 290 dtt_code 000170 automatic fixed bin(35,0) dcl 351 set ref 356* 358 358* 370* 373 373* dtt_code_parm parameter fixed bin(35,0) dcl 352 set ref 345 380* dtt_loop 000171 automatic fixed bin(17,0) dcl 353 set ref 355* 356 358* duplicate_mode 4 based fixed bin(17,0) level 3 dcl 6-15 set ref 570* error_table_$badcall 000014 external static fixed bin(35,0) dcl 727 set ref 99* error_table_$noentry 000016 external static fixed bin(35,0) dcl 728 ref 284 error_table_$unsupported_operation 000020 external static fixed bin(35,0) dcl 729 set ref 153* field 113 based structure array level 2 dcl 6-15 field_count 3 based fixed bin(17,0) level 3 dcl 6-15 set ref 567* 575 576 577 578 650 from 113 based structure array level 3 dcl 6-15 gamc_code 000202 automatic fixed bin(35,0) dcl 389 set ref 391* 394 394* general_work_area_ptr 14 based pointer level 2 in structure "table_control_info" dcl 4-11 in procedure "rw_table_manager" set ref 412 439* 696 general_work_area_ptr based pointer level 2 in structure "report_control_info" dcl 2-7 in procedure "rw_table_manager" ref 420 get_pdir_ 000022 constant entry external dcl 731 ref 436 hcs_$make_entry 000024 constant entry external dcl 733 ref 504 520 header based structure level 2 dcl 6-15 laritt_row_value based char unaligned dcl 456 set ref 469* laritt_row_value_buffer based char unaligned dcl 457 ref 469 laritt_row_value_ptr 000230 automatic pointer dcl 458 set ref 467* 469 478 loop 000100 automatic fixed bin(35,0) dcl 735 set ref 192* maximum_number_of_ptrs_per_segment 1 based fixed bin(21,0) level 2 dcl 4-26 set ref 443* 460 maximum_number_of_rows_per_segment 2 based fixed bin(21,0) level 2 dcl 4-11 set ref 290* 427* 463 maximum_number_of_segments based fixed bin(17,0) level 2 dcl 4-26 set ref 306 309 311* 316 321 365 442* 445 mbz1 5 based fixed bin(17,0) array level 3 dcl 6-15 set ref 571* mdbm_util_$number_data_class 000026 constant entry external dcl 737 ref 594 message_parm parameter varying char dcl 90 set ref 232 241* modes 321 based structure array level 3 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 579* modes 2 based structure array level 3 in structure "sort_info" packed unaligned dcl 3-7 in procedure "rw_table_manager" msf_directory_name 32 based char(168) level 2 packed unaligned dcl 4-11 set ref 113* 281* 284* 284* 370* 373* 373* 436* msf_file_control_block_ptr 10 based pointer level 2 dcl 4-11 set ref 271 281* 369* 391* 394* 431* 609* 612* msf_file_name 22 based char(32) level 2 packed unaligned dcl 4-11 set ref 281* 284* 284* 370* 373* 373* 435* msf_manager_$close 000030 constant entry external dcl 738 ref 369 msf_manager_$get_ptr 000032 constant entry external dcl 739 ref 391 609 msf_manager_$open 000034 constant entry external dcl 740 ref 281 non_case_sensitive 321(01) based bit(1) array level 4 in structure "ss_info" packed unaligned dcl 6-15 in procedure "rw_table_manager" set ref 590* non_case_sensitive 2(01) based bit(1) array level 4 in structure "sort_info" packed unaligned dcl 3-7 in procedure "rw_table_manager" ref 590 null builtin function dcl 742 ref 271 2-61 293 316 365 366 430 431 432 433 438 438 445 504 504 520 520 558 559 560 561 601 620 650 652 655 666 668 679 692 699 number 114 based fixed bin(17,0) array level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 584* number 217 based fixed bin(17,0) array level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 586* number 11 based fixed bin(17,0) level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 573* number 1 based fixed bin(17,0) array level 3 in structure "sort_info" dcl 3-7 in procedure "rw_table_manager" ref 584 586 592 number_of_columns_to_sort based fixed bin(17,0) level 2 dcl 3-7 ref 566 number_of_components 1 based fixed bin(17,0) level 2 in structure "stt_sort_input" dcl 538 in procedure "sort_the_table" set ref 600* 678 number_of_components 1 based fixed bin(17,0) level 2 in structure "table_control_info" dcl 4-11 in procedure "rw_table_manager" set ref 378* 391* 394* 399* 399 426* 599 number_of_ptrs_in_this_segment based fixed bin(21,0) level 2 dcl 4-7 set ref 339* 460 477* 477 478 number_of_segments based fixed bin(17,0) level 2 in structure "stt_sort_output" dcl 549 in procedure "sort_the_table" set ref 619* 620 679 number_of_segments based fixed bin(17,0) level 2 in structure "stt_sort_input" dcl 538 in procedure "sort_the_table" set ref 600* 601 616 678 numeric 321(02) based bit(1) array level 4 packed unaligned dcl 6-15 set ref 594* pathname_ 000036 constant entry external dcl 744 ref 284 284 373 373 query_length_parm parameter fixed bin(21,0) dcl 91 set ref 142 157* query_segment_ptr_parm parameter pointer dcl 92 set ref 142 157* report_cip 000110 automatic pointer initial dcl 2-61 set ref 109* 113 119 119 134* 150* 151 153 157 157 168* 183* 193 193 210* 219 219 240* 252* 267* 2-61* 326 330 330 380 380 408 409 410 420 424 429 448 516 517 518 520 522 623 626 626 633 690 691 699 report_cip_parm parameter pointer dcl 93 ref 103 109 128 134 142 150 162 168 175 183 204 210 232 240 245 252 261 267 report_control_info based structure level 1 dcl 2-7 report_writer_$create_invocation 000040 constant entry external dcl 746 ref 153 522 row_count based fixed bin(35,0) level 2 dcl 4-11 set ref 294* 473* 473 row_count_actual_parm parameter fixed bin(35,0) dcl 94 set ref 175 185* 198* 198 row_count_specified 000101 automatic fixed bin(35,0) dcl 747 set ref 184* 192 row_count_specified_parm parameter fixed bin(35,0) dcl 95 ref 175 184 row_ptrs based structure level 1 dcl 4-7 row_ptrs_ptr 000114 automatic pointer dcl 4-33 set ref 189* 214* 337* 339 460 475* 477 477 478 478 row_value_length 5 based fixed bin(21,0) level 2 dcl 5-7 ref 290 467 469 469 573 row_value_ptr 1 based pointer array level 2 in structure "row_ptrs" packed unaligned dcl 4-7 in procedure "rw_table_manager" set ref 478* row_value_ptr 6 based pointer level 2 in structure "table_info" dcl 5-7 in procedure "rw_table_manager" ref 469 rtrim builtin function dcl 748 ref 330 330 509 626 626 rw_error_$no_data 000042 external static fixed bin(35,0) dcl 749 ref 225 rw_temp_seg_mgr$get_segment 000044 constant entry external dcl 750 ref 326 623 633 633 rw_temp_seg_mgr$release_segment 000046 constant entry external dcl 751 ref 356 633 633 663 671 rw_temp_seg_mgr$terminate 000050 constant entry external dcl 752 ref 695 sci_ptr 000102 automatic pointer dcl 754 set ref 121* 151* 153* 153* 153* 284* 330* 358* 373* 394* 408* 424* 434 438* 612* 626* 637* 690* 697* segment_ptrs 4 based pointer array level 2 in structure "table_segments_info" dcl 4-26 in procedure "rw_table_manager" set ref 189 214 316* 318* 318 326* 337 356* 358* 365* 445* 475 605 660* segment_ptrs 1 based pointer array level 2 in structure "stt_sort_output" packed unaligned dcl 549 in procedure "sort_the_table" set ref 620* 630* 660 668 670 segment_ptrs 3 based pointer array level 2 in structure "stt_sort_input" packed unaligned dcl 538 in procedure "sort_the_table" set ref 601* 605* 662 sort_info based structure level 1 unaligned dcl 3-7 sort_info_ptr 000112 automatic pointer dcl 3-16 set ref 253* 566 584 586 588 590 592 sort_info_ptr_parm parameter pointer dcl 96 ref 245 253 sort_seg_$linus_table 000052 constant entry external dcl 755 ref 633 sorted 2 based bit(1) level 2 dcl 538 set ref 602* ss_field_count 000126 automatic fixed bin(17,0) dcl 6-15 set ref 566* 567 567 580 583 633 652 ss_info based structure level 1 dcl 6-15 set ref 567 650 ss_info_ptr 000130 automatic pointer dcl 6-15 set ref 558* 567* 568 569 570 571 572 573 574 575 576 577 578 579 584 586 588 590 594 633* 650 650 ssu_$abort_line 000054 constant entry external dcl 756 ref 121 153 284 330 394 612 626 637 ssu_$get_area 000056 constant entry external dcl 757 ref 438 ssu_$get_subsystem_name 000060 constant entry external dcl 758 ref 153 153 ssu_$print_message 000062 constant entry external dcl 759 ref 358 373 ssu_$release_area 000064 constant entry external dcl 760 ref 697 still_loading_the_table 000104 automatic bit(1) dcl 761 set ref 216* 218 224* string 12 based varying char(256) level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 574* string 220 based varying char(256) array level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 578* string 115 based varying char(256) array level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 576* stt_code_parm parameter fixed bin(35,0) dcl 534 set ref 529 557* 609* 612 612* 623* 626 626* 633* 637 637* stt_loop 000100 automatic fixed bin(17,0) dcl 535 set ref 583* 584 584 586 586 588 588 590 590 592 592 594 594* 604* 605 605* 608* 609 612 616* 622* 630* stt_sort_descriptors_array based pointer array dcl 536 set ref 580 592* 594* 633* 652 stt_sort_descriptors_array_ptr 000102 automatic pointer dcl 537 set ref 559* 580* 592 594 633 652 652 stt_sort_input based structure level 1 dcl 538 set ref 600 678 stt_sort_input_init_number_of_components 000104 automatic fixed bin(17,0) dcl 546 set ref 599* 600 600 608 stt_sort_input_init_number_of_segments 000105 automatic fixed bin(17,0) dcl 547 set ref 598* 600 600 604 619 619 622 658 666 stt_sort_input_ptr 000106 automatic pointer dcl 548 set ref 560* 600* 601 602 605 616 633* 655 662 678 stt_sort_output based structure level 1 dcl 549 set ref 619 679 stt_sort_output_ptr 000110 automatic pointer dcl 553 set ref 561* 619* 620 630 633* 660 666 668 670 679 679 stt_sort_was_successful 000112 automatic bit(1) dcl 554 set ref 562* 641* 658 stt_temp_ptr 000114 automatic pointer dcl 555 set ref 609* 616 623* 630 662* 663* 670* 671* sttm_code 000240 automatic fixed bin(35,0) dcl 491 set ref 504* 507 511 520* 522 sttm_loop 000241 automatic char(12) unaligned dcl 492 set ref 503* 504* 509* sttm_message_parm parameter varying char dcl 493 set ref 484 500* 509* sttm_table_entry_variables 000244 automatic entry variable array dcl 494 set ref 504* 516 517 518 sttm_table_manager_name 000260 automatic char(32) unaligned dcl 495 set ref 499* 504* 520* sttm_table_manager_name_parm parameter char unaligned dcl 496 ref 484 499 sttm_variables_index 000270 automatic fixed bin(17,0) dcl 497 set ref 501* 504 513* 513 subsystem_control_info_ptr 20 based pointer level 2 in structure "table_control_info" dcl 4-11 in procedure "rw_table_manager" set ref 434* subsystem_control_info_ptr based pointer level 2 in structure "report_control_info" dcl 2-7 in procedure "rw_table_manager" ref 151 408 424 690 subsystems_info_ptr based pointer level 2 dcl 2-7 set ref 119* 157* 193* 219* 380* sys_info$max_seg_size 000066 external static fixed bin(35,0) dcl 762 ref 290 443 table_control_info based structure level 1 dcl 4-11 set ref 422 698 table_control_info_ptr based pointer level 2 dcl 2-7 set ref 410 448* 691 699* table_control_ip 000120 automatic pointer dcl 4-35 set ref 113 271 281 281 281 284 284 284 284 290 292 293 294 323 326* 356* 366 367 369 370 370 373 373 373 373 378 391 391 391 394 394 399 399 400 410* 411 412 422* 426 427 428 429 430 431 432 433 434 435 436 439 446 448 463 463 467 467 470 470 473 473 599 609 612 623* 633* 663* 671* 691* 692 695* 696 698 table_info based structure level 1 dcl 5-7 table_information_ptr based pointer level 2 in structure "report_control_info" dcl 2-7 in procedure "rw_table_manager" ref 409 429 table_information_ptr 4 based pointer level 2 in structure "table_control_info" dcl 4-11 in procedure "rw_table_manager" set ref 429* table_ip 000124 automatic pointer dcl 5-20 set ref 290 409* 467 469 469 469 573 584 586 592 table_manager_create_table_entry based entry variable level 2 dcl 2-7 set ref 119 516* table_manager_delete_table_entry based entry variable level 2 dcl 2-7 set ref 380 517* table_manager_get_query_entry based entry variable level 2 dcl 2-7 set ref 153 157 520* 522* table_manager_get_row_entry based entry variable level 2 dcl 2-7 set ref 193 219 518* table_manager_parm parameter char unaligned dcl 97 set ref 232 241* table_segments_info based structure level 1 dcl 4-26 set ref 311 321 442 table_segments_info_ptr 6 based pointer level 2 dcl 4-11 set ref 323* 411 430* 446* table_segments_ip 000116 automatic pointer dcl 4-34 set ref 189 189 214 214 306 306 309 313 316 318 321 322* 323 326 326 335 335 337 337 355 356 358 364 365 411* 442* 443 444 445 446 460 475 475 598 605 660 temp_dir_name based char(168) level 2 packed unaligned dcl 2-7 set ref 113 326* 330 330 623* 626 626 633* temp_seg_info_ptr 16 based pointer level 2 dcl 4-11 set ref 433* to 216 based structure array level 3 dcl 6-15 tsi_init_maximum_number_of_segments 000122 automatic fixed bin(21,0) dcl 4-36 set ref 309* 311 311 315 441* 442 442 type 113 based fixed bin(17,0) array level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 575* type 216 based fixed bin(17,0) array level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 577* type 10 based fixed bin(17,0) level 4 in structure "ss_info" dcl 6-15 in procedure "rw_table_manager" set ref 572* unique_chars_ 000070 constant entry external dcl 764 ref 435 unspec builtin function dcl 765 set ref 579* version based char(8) level 3 dcl 6-15 set ref 568* work_area based area dcl 767 ref 311 422 442 567 580 600 619 work_area_ptr 000106 automatic pointer dcl 768 set ref 311 412* 420* 422 438* 439 442 567 580 600 619 696* 697* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. GENERAL_COLUMN_OPTION internal static fixed bin(17,0) initial dcl 1-15 GENERAL_REPORT_OPTION internal static fixed bin(17,0) initial dcl 1-14 INDEX_FOR_ALIGNMENT internal static fixed bin(17,0) initial dcl 1-66 INDEX_FOR_COLUMN_ORDER internal static fixed bin(17,0) initial dcl 1-50 INDEX_FOR_COUNT internal static fixed bin(17,0) initial dcl 1-51 INDEX_FOR_DELIMITER internal static fixed bin(17,0) initial dcl 1-40 INDEX_FOR_EDITING internal static fixed bin(17,0) initial dcl 1-67 INDEX_FOR_EXCLUDE internal static fixed bin(17,0) initial dcl 1-52 INDEX_FOR_FOLDING internal static fixed bin(17,0) initial dcl 1-68 INDEX_FOR_FORMAT_DOCUMENT_CONTROLS internal static fixed bin(17,0) initial dcl 1-41 INDEX_FOR_GROUP internal static fixed bin(17,0) initial dcl 1-53 INDEX_FOR_GROUP_FOOTER_TRIGGER internal static fixed bin(17,0) initial dcl 1-54 INDEX_FOR_GROUP_FOOTER_VALUE internal static fixed bin(17,0) initial dcl 1-55 INDEX_FOR_GROUP_HEADER_TRIGGER internal static fixed bin(17,0) initial dcl 1-56 INDEX_FOR_GROUP_HEADER_VALUE internal static fixed bin(17,0) initial dcl 1-57 INDEX_FOR_HYPHENATION internal static fixed bin(17,0) initial dcl 1-42 INDEX_FOR_OUTLINE internal static fixed bin(17,0) initial dcl 1-58 INDEX_FOR_PAGE_BREAK internal static fixed bin(17,0) initial dcl 1-59 INDEX_FOR_PAGE_FOOTER_VALUE internal static fixed bin(17,0) initial dcl 1-43 INDEX_FOR_PAGE_HEADER_VALUE internal static fixed bin(17,0) initial dcl 1-44 INDEX_FOR_PAGE_LENGTH internal static fixed bin(17,0) initial dcl 1-45 INDEX_FOR_PAGE_WIDTH internal static fixed bin(17,0) initial dcl 1-46 INDEX_FOR_ROW_FOOTER_VALUE internal static fixed bin(17,0) initial dcl 1-60 INDEX_FOR_ROW_HEADER_VALUE internal static fixed bin(17,0) initial dcl 1-61 INDEX_FOR_SEPARATOR internal static fixed bin(17,0) initial dcl 1-69 INDEX_FOR_SUBCOUNT internal static fixed bin(17,0) initial dcl 1-62 INDEX_FOR_SUBTOTAL internal static fixed bin(17,0) initial dcl 1-63 INDEX_FOR_TITLE internal static fixed bin(17,0) initial dcl 1-70 INDEX_FOR_TITLE_LINE internal static fixed bin(17,0) initial dcl 1-47 INDEX_FOR_TOTAL internal static fixed bin(17,0) initial dcl 1-64 INDEX_FOR_TRUNCATION internal static fixed bin(17,0) initial dcl 1-48 INDEX_FOR_WIDTH internal static fixed bin(17,0) initial dcl 1-71 LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 1-28 LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 1-27 LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 1-26 MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 1-32 MAXIMUM_OPTION_IDENTIFIER_LENGTH internal static fixed bin(17,0) initial dcl 1-34 MAXIMUM_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 1-35 MAXIMUM_OPTION_VALUE_LENGTH internal static fixed bin(17,0) initial dcl 1-36 NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE internal static fixed bin(17,0) initial dcl 1-22 SPECIFIC_COLUMN_OPTION internal static fixed bin(17,0) initial dcl 1-16 SS_only_duplicate_keys internal static fixed bin(17,0) initial dcl 6-15 SS_only_duplicates internal static fixed bin(17,0) initial dcl 6-15 SS_only_unique internal static fixed bin(17,0) initial dcl 6-15 SS_only_unique_keys internal static fixed bin(17,0) initial dcl 6-15 SS_reg_exp internal static fixed bin(17,0) initial dcl 6-15 SS_string internal static fixed bin(17,0) initial dcl 6-15 SS_unique internal static fixed bin(17,0) initial dcl 6-15 SS_unique_keys internal static fixed bin(17,0) initial dcl 6-15 SS_unset internal static fixed bin(17,0) initial dcl 6-15 TABLE_INFO_VERSION_1 internal static char(8) initial unaligned dcl 5-22 no_of_candidate_columns automatic fixed bin(17,0) dcl 3-17 ti_init_column_count automatic fixed bin(17,0) dcl 5-21 NAMES DECLARED BY EXPLICIT CONTEXT. cleanup_sort_information 004111 constant entry internal dcl 646 ref 564 642 create_a_new_table 001177 constant entry internal dcl 277 ref 115 create_a_segment_for_row_ptrs 001320 constant entry internal dcl 300 ref 116 460 create_table 000315 constant entry external dcl 103 delete_table 000434 constant entry external dcl 128 delete_the_table 001607 constant entry internal dcl 345 ref 138 271 get_an_msf_component 002105 constant entry internal dcl 387 ref 117 463 get_query 000467 constant entry external dcl 142 initialize_automatic_variables 002173 constant entry internal dcl 406 ref 112 137 188 213 256 270 initialize_table 000613 constant entry external dcl 162 initialize_the_table 002220 constant entry internal dcl 418 ref 171 load_a_row_into_the_table 002444 constant entry internal dcl 454 ref 124 197 221 load_rows 000640 constant entry external dcl 175 load_table 000741 constant entry external dcl 204 rw_table_manager 000265 constant entry external dcl 85 set_table_manager 001032 constant entry external dcl 232 set_the_table_manager 002512 constant entry internal dcl 484 ref 241 sort 001110 constant entry external dcl 245 sort_the_table 003010 constant entry internal dcl 529 ref 257 terminate_table 001143 constant entry external dcl 261 terminate_the_table 004323 constant entry internal dcl 688 ref 273 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5066 5160 4415 5076 Length 5560 4415 72 363 450 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rw_table_manager 634 external procedure is an external procedure. create_a_new_table internal procedure shares stack frame of external procedure rw_table_manager. create_a_segment_for_row_ptrs internal procedure shares stack frame of external procedure rw_table_manager. delete_the_table internal procedure shares stack frame of external procedure rw_table_manager. get_an_msf_component internal procedure shares stack frame of external procedure rw_table_manager. initialize_automatic_variables internal procedure shares stack frame of external procedure rw_table_manager. initialize_the_table internal procedure shares stack frame of external procedure rw_table_manager. load_a_row_into_the_table internal procedure shares stack frame of external procedure rw_table_manager. set_the_table_manager internal procedure shares stack frame of external procedure rw_table_manager. sort_the_table 200 internal procedure enables or reverts conditions. on unit on line 564 64 on unit cleanup_sort_information 86 internal procedure is called by several nonquick procedures. terminate_the_table internal procedure shares stack frame of external procedure rw_table_manager. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cleanup_sort_information 000100 csi_loop cleanup_sort_information rw_table_manager 000100 loop rw_table_manager 000101 row_count_specified rw_table_manager 000102 sci_ptr rw_table_manager 000104 still_loading_the_table rw_table_manager 000106 work_area_ptr rw_table_manager 000110 report_cip rw_table_manager 000112 sort_info_ptr rw_table_manager 000114 row_ptrs_ptr rw_table_manager 000116 table_segments_ip rw_table_manager 000120 table_control_ip rw_table_manager 000122 tsi_init_maximum_number_of_segments rw_table_manager 000124 table_ip rw_table_manager 000126 ss_field_count rw_table_manager 000130 ss_info_ptr rw_table_manager 000144 cant_code create_a_new_table 000154 casfrp_code create_a_segment_for_row_ptrs 000155 casfrp_loop create_a_segment_for_row_ptrs 000156 casfrp_temporary_ptr create_a_segment_for_row_ptrs 000170 dtt_code delete_the_table 000171 dtt_loop delete_the_table 000202 gamc_code get_an_msf_component 000230 laritt_row_value_ptr load_a_row_into_the_table 000240 sttm_code set_the_table_manager 000241 sttm_loop set_the_table_manager 000244 sttm_table_entry_variables set_the_table_manager 000260 sttm_table_manager_name set_the_table_manager 000270 sttm_variables_index set_the_table_manager sort_the_table 000100 stt_loop sort_the_table 000102 stt_sort_descriptors_array_ptr sort_the_table 000104 stt_sort_input_init_number_of_components sort_the_table 000105 stt_sort_input_init_number_of_segments sort_the_table 000106 stt_sort_input_ptr sort_the_table 000110 stt_sort_output_ptr sort_the_table 000112 stt_sort_was_successful sort_the_table 000114 stt_temp_ptr sort_the_table THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_var call_ext_out_desc call_ext_out call_int_this call_int_other return enable shorten_stack ext_entry ext_entry_desc int_entry divide_fx3 alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ delete_$path get_pdir_ hcs_$make_entry mdbm_util_$number_data_class msf_manager_$close msf_manager_$get_ptr msf_manager_$open pathname_ report_writer_$create_invocation rw_temp_seg_mgr$get_segment rw_temp_seg_mgr$release_segment rw_temp_seg_mgr$terminate sort_seg_$linus_table ssu_$abort_line ssu_$get_area ssu_$get_subsystem_name ssu_$print_message ssu_$release_area unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badcall error_table_$noentry error_table_$unsupported_operation rw_error_$no_data sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 2 61 000260 85 000264 99 000273 101 000310 103 000311 109 000326 110 000332 112 000333 113 000334 115 000366 116 000367 117 000370 119 000371 121 000411 124 000430 126 000431 128 000432 134 000445 135 000451 137 000452 138 000453 140 000461 142 000462 150 000500 151 000504 153 000514 157 000574 160 000610 162 000611 168 000624 169 000630 171 000631 173 000632 175 000633 183 000651 184 000655 185 000657 186 000660 188 000661 189 000662 192 000667 193 000701 195 000721 197 000723 198 000724 200 000731 202 000736 204 000737 210 000752 211 000756 213 000757 214 000760 216 000765 218 000767 219 000772 221 001012 224 001016 225 001017 228 001023 230 001024 232 001025 240 001056 241 001062 243 001103 245 001104 252 001121 253 001125 254 001130 256 001131 257 001132 259 001140 261 001141 267 001154 268 001160 270 001161 271 001162 273 001175 275 001176 277 001177 281 001200 284 001226 290 001302 292 001313 293 001314 294 001316 296 001317 300 001320 306 001321 309 001325 311 001330 313 001341 315 001344 316 001353 318 001363 320 001370 321 001372 322 001377 323 001401 326 001404 330 001470 335 001576 337 001601 339 001605 341 001606 345 001607 355 001611 356 001621 358 001654 362 001712 364 001714 365 001716 366 001732 367 001735 369 001737 370 001746 373 002006 378 002061 380 002063 383 002104 387 002105 391 002106 394 002131 399 002167 400 002171 402 002172 406 002173 408 002174 409 002205 410 002210 411 002213 412 002215 414 002217 418 002220 420 002221 422 002232 424 002237 426 002250 427 002252 428 002253 429 002254 430 002257 431 002262 432 002264 433 002266 434 002270 435 002273 436 002324 438 002334 439 002366 441 002371 442 002373 443 002404 444 002413 445 002414 446 002430 448 002432 450 002443 454 002444 460 002445 463 002452 467 002457 469 002467 470 002474 473 002475 475 002501 477 002506 478 002507 480 002511 484 002512 499 002530 500 002536 501 002540 503 002542 504 002551 507 002606 509 002610 511 002655 513 002661 514 002662 516 002702 517 002715 518 002721 520 002725 522 002765 525 003004 529 003007 557 003015 558 003017 559 003022 560 003023 561 003024 562 003025 564 003026 566 003050 567 003053 568 003066 569 003071 570 003073 571 003075 572 003110 573 003112 574 003115 575 003116 576 003135 577 003151 578 003171 579 003205 580 003206 583 003215 584 003225 586 003242 588 003246 590 003252 592 003256 594 003263 596 003310 598 003312 599 003316 600 003321 601 003335 602 003350 604 003351 605 003361 606 003370 608 003372 609 003401 612 003430 616 003473 617 003501 619 003503 620 003514 622 003525 623 003535 626 003614 630 003724 631 003730 633 003732 637 004051 641 004101 642 004103 644 004107 646 004110 650 004116 652 004132 655 004144 658 004151 660 004163 662 004173 663 004200 665 004225 666 004230 668 004243 670 004247 671 004252 675 004300 678 004302 679 004311 682 004322 688 004323 690 004324 691 004335 692 004340 695 004345 696 004357 697 004362 698 004373 699 004375 701 004407 ----------------------------------------------------------- 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