COMPILATION LISTING OF SEGMENT linus_parse_file Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 03/15/88 1553.6 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 /* format: off */ 7 8 /* This is the subroutine called by the linus store and store_from_data_file 9* requests to implement the file parsing. Description and usage follows. 10* 11* Description: 12* 13* This subroutine has the following entrypoints. 14* 15* start 16* called as the first thing the request does. 17* 18* Usage: "call linus_parse_file$start (lcb_ptr, addr (data_file_info), 19* table_info_ptr, code);" 20* 21* stop 22* called as the last thing the request does. 23* 24* Usage: "call linus_parse_file$stop (lcb_ptr, addr (data_file_info), 25* table_info_ptr, cleanup_signalled, code);" 26* 27* get_row 28* called to get a row from the file and place in row value slot. 29* 30* Usage: "call linus_parse_file$get_row (lcb_ptr, addr (data_file_info), 31* table_info_ptr, row_value_ptr, code);" 32* 33* Known Bugs: 34* 35* Other Problems: 36* 37* History: 38* 39* Written - Al Dupuis - September 1983. 40* 41**/ 42 43 linus_parse_file: proc; 44 45 /* These parms are described at each entry where they are used. */ 46 47 dcl code_parm fixed bin (35) parm; 48 dcl cleanup_signalled_parm bit (1) aligned parm; 49 dcl data_file_info_ptr_parm ptr parm; 50 dcl lcb_ptr_parm ptr parm; 51 dcl row_value_ptr_parm ptr parm; 52 dcl table_info_ptr_parm ptr parm; 53 54 return; 55 56 get_row: entry ( 57 58 lcb_ptr_parm, /* input: ptr to the linus control block */ 59 data_file_info_ptr_parm, /* input: ptr to data_file_info structure */ 60 table_info_ptr_parm, /* input: ptr to table_info structure */ 61 row_value_ptr_parm, /* input: ptr to row value char string */ 62 code_parm /* output: success or failure */ 63 ); 64 65 lcb_ptr = lcb_ptr_parm; 66 file_info_ptr = data_file_info_ptr_parm; 67 table_ip = table_info_ptr_parm; 68 row_value_p = row_value_ptr_parm; 69 code_parm = 0; 70 71 call fill_the_buffer (code_parm); 72 if code_parm = 0 73 then call get_the_row (code_parm); 74 75 return; 76 77 start: entry ( 78 79 lcb_ptr_parm, /* input: ptr to the linus control block */ 80 data_file_info_ptr_parm, /* input: ptr to data_file_info structure */ 81 table_info_ptr_parm, /* input: ptr to table_info structure */ 82 code_parm /* output: success or failure */ 83 ); 84 85 lcb_ptr = lcb_ptr_parm; 86 file_info_ptr = data_file_info_ptr_parm; 87 table_ip = table_info_ptr_parm; 88 code_parm = 0; 89 90 call start_parsing_file; 91 92 return; 93 94 stop: entry ( 95 96 lcb_ptr_parm, /* input: ptr to the linus control block */ 97 data_file_info_ptr_parm, /* input: ptr to data_file_info structure */ 98 table_info_ptr_parm, /* input: ptr to table_info structure */ 99 cleanup_signalled_parm, /* input: on if called by cleanup handler */ 100 code_parm /* output: success or failure */ 101 ); 102 103 lcb_ptr = lcb_ptr_parm; 104 file_info_ptr = data_file_info_ptr_parm; 105 table_ip = table_info_ptr_parm; 106 cleanup_signalled = cleanup_signalled_parm; 107 code_parm = 0; 108 109 call stop_parsing_file; 110 111 return; 112 113 fill_the_buffer: proc ( 114 115 ftb_code_parm /* output: success or failure */ 116 ); 117 118 dcl ftb_code fixed bin (35); 119 dcl ftb_code_parm fixed bin (35) parm; 120 dcl ftb_current_file_buffer_length fixed bin (21); 121 dcl ftb_file_buffer_ptr ptr; 122 dcl ftb_number_of_chars_available_in_buffer fixed bin (21); 123 dcl ftb_number_of_chars_read fixed bin (21); 124 125 ftb_code_parm = 0; 126 127 sci_ptr = lcb.subsystem_control_info_ptr; 128 work_area_ptr = addr (lcb.static_area); 129 the_row_delimiter = file_info.row_delimiter; 130 the_column_delimiter = file_info.column_delimiter; 131 132 if file_info.current_char_in_previous_buffer ^= 0 133 then do; 134 file_buffer = substr (file_buffer, file_info.current_char_in_previous_buffer); 135 file_info.current_char_in_previous_buffer = 0; 136 end; 137 else file_buffer = ""; 138 139 if file_info.flags.end_of_file_has_been_hit 140 then do; 141 if length (file_buffer) = 0 142 then ftb_code_parm = error_table_$end_of_info; 143 return; 144 end; 145 146 ftb_current_file_buffer_length = length (file_buffer); 147 ftb_number_of_chars_available_in_buffer 148 = file_info.file_buffer_length - ftb_current_file_buffer_length; 149 if ftb_number_of_chars_available_in_buffer < 1 150 then return; 151 152 ftb_file_buffer_ptr = addcharno (addrel (file_info.file_buffer_ptr, 1), 153 ftb_current_file_buffer_length); 154 call iox_$get_chars (file_info.file_iocb_ptr, ftb_file_buffer_ptr, 155 ftb_number_of_chars_available_in_buffer, 156 ftb_number_of_chars_read, ftb_code); 157 file_info.file_buffer_ptr -> file_buffer_length_word 158 = ftb_number_of_chars_read + ftb_current_file_buffer_length; 159 if ftb_code ^= 0 & ftb_code ^= error_table_$short_record 160 then if ftb_code = error_table_$end_of_info 161 then do; 162 if ftb_number_of_chars_read = 0 & ftb_current_file_buffer_length = 0 163 then ftb_code_parm = error_table_$end_of_info; 164 file_info.flags.end_of_file_has_been_hit = ON; 165 end; 166 else call ssu_$abort_line (sci_ptr, ftb_code); 167 else; 168 169 return; 170 171 end fill_the_buffer; 172 173 get_the_row: proc ( 174 175 gtr_code_parm /* output: success or failure */ 176 ); 177 178 dcl gtr_code_parm fixed bin (35) parm; 179 dcl gtr_column_delimiter_was_found bit (1) aligned; 180 dcl gtr_current_column_number fixed bin; 181 dcl gtr_current_row_number fixed bin; 182 dcl gtr_end_of_buffer fixed bin (21); 183 dcl gtr_in_a_quoted_string bit (1) aligned; 184 dcl gtr_last_column_processed fixed bin; 185 dcl gtr_maximum_column_length fixed bin (21); 186 dcl gtr_number_of_columns fixed bin; 187 dcl gtr_processing_quotes bit (1) aligned; 188 dcl gtr_processing_whitespace bit (1) aligned; 189 dcl gtr_row_delimiter_was_found bit (1) aligned; 190 dcl gtr_still_processing_the_row bit (1) aligned; 191 192 gtr_code_parm = 0; 193 194 if length (file_buffer) = 0 195 then do; 196 gtr_code_parm = error_table_$end_of_info; 197 if file_info.current_row_number = 0 198 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 199 PROBLEM_LINE_NUMBER_MESSAGE 200 || PROBLEM_ROW_NUMBER_MESSAGE 201 ||"^/The file ^a is empty.", 202 file_info.current_line_number, file_info.current_row_number, 203 file_info.directory_name || ">" || file_info.entry_name); 204 return; 205 end; 206 207 gtr_current_row_number = file_info.current_row_number; 208 file_info.current_char_in_buffer = 1; 209 gtr_end_of_buffer = length (file_buffer); 210 gtr_number_of_columns = table_info.column_count; 211 gtr_row_delimiter_was_found = OFF; 212 gtr_processing_quotes = file_info.flags.process_quotes; 213 gtr_processing_whitespace = file_info.flags.process_whitespace; 214 gtr_still_processing_the_row = ON; 215 216 do gtr_current_column_number = 1 to gtr_number_of_columns 217 while (gtr_still_processing_the_row); 218 call get_column (gtr_current_row_number, gtr_current_column_number); 219 gtr_maximum_column_length = table_info.columns.column_length (gtr_current_column_number); 220 if length (column_buffer) > gtr_maximum_column_length 221 then do; 222 call ssu_$print_message (sci_ptr, 0, 223 "Warning: the value ""^a"" ^/for the ""^a"" column will be truncated to ^d characters.", 224 column_buffer, table_info.columns.column_name ( 225 gtr_current_column_number), gtr_maximum_column_length); 226 substr (row_value, table_info.columns.column_index (gtr_current_column_number), 227 table_info.columns.column_length (gtr_current_column_number)) 228 = substr (column_buffer, 1, gtr_maximum_column_length); 229 end; 230 else substr (row_value, table_info.columns.column_index (gtr_current_column_number), 231 table_info.columns.column_length (gtr_current_column_number)) 232 = column_buffer; 233 gtr_last_column_processed = gtr_current_column_number; 234 end; 235 236 if gtr_last_column_processed ^= gtr_number_of_columns 237 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 238 PROBLEM_LINE_NUMBER_MESSAGE 239 || PROBLEM_ROW_NUMBER_MESSAGE 240 || PROBLEM_COLUMN_NAME_MESSAGE 241 || "^/There were ^d columns expected but only ^d were found." 242 || PROBLEM_ROW_VALUE_MESSAGE, 243 file_info.current_line_number, file_info.current_row_number, 244 table_info.columns.column_name (gtr_last_column_processed + 1), 245 gtr_number_of_columns, gtr_last_column_processed, 246 substr (file_buffer, 1, file_info.current_char_in_buffer - 1)); 247 else if ^gtr_row_delimiter_was_found 248 then do; 249 if file_info.current_char_in_buffer ^> gtr_end_of_buffer 250 then if substr (file_buffer, file_info. 251 current_char_in_buffer, 1) = the_row_delimiter 252 then do; 253 gtr_row_delimiter_was_found = ON; 254 file_info.current_char_in_buffer 255 = file_info.current_char_in_buffer + 1; 256 if the_row_delimiter = NEWLINE 257 then file_info.current_line_number 258 = file_info.current_line_number + 1; 259 end; 260 else; 261 else; 262 if ^gtr_row_delimiter_was_found 263 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 264 PROBLEM_LINE_NUMBER_MESSAGE 265 || PROBLEM_ROW_NUMBER_MESSAGE 266 || MISSING_ROW_DELIMITER_MESSAGE 267 || PROBLEM_ROW_VALUE_MESSAGE, 268 file_info.current_line_number, file_info.current_row_number, 269 table_info.columns.column_name (gtr_number_of_columns), 270 substr (file_buffer, 1, file_info.current_char_in_buffer - 1)); 271 end; 272 else if ^gtr_column_delimiter_was_found 273 then if ^file_info.flags.last_column_delimiter_is_optional 274 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 275 PROBLEM_LINE_NUMBER_MESSAGE 276 || PROBLEM_ROW_NUMBER_MESSAGE 277 || MISSING_COLUMN_DELIMITER_MESSAGE 278 || PROBLEM_ROW_VALUE_MESSAGE, 279 file_info.current_line_number, file_info.current_row_number, 280 table_info.columns.column_name (gtr_number_of_columns), 281 substr (file_buffer, 1, file_info.current_char_in_buffer - 1)); 282 else; 283 else; 284 285 if file_info.current_char_in_buffer <= gtr_end_of_buffer 286 then file_info.current_char_in_previous_buffer = file_info.current_char_in_buffer; 287 else file_info.current_char_in_previous_buffer = 0; 288 289 file_info.current_row_number = file_info.current_row_number + 1; 290 291 return; 292 293 get_column: proc ( 294 295 gc_row_number_parm, /* input: number of our current row */ 296 gc_column_number_parm /* input: number of our current column */ 297 ); 298 299 dcl gc_column_number_parm fixed bin parm; 300 dcl gc_current_char char (1); 301 dcl gc_current_position fixed bin (21); 302 dcl gc_maximum_reasonable_column_length fixed bin (21); 303 dcl gc_row_number_parm fixed bin parm; 304 dcl gc_starting_position fixed bin (21); 305 dcl gc_still_getting_the_column bit (1) aligned; 306 307 gc_starting_position = file_info.current_char_in_buffer; 308 gc_current_position = gc_starting_position; 309 gc_maximum_reasonable_column_length 310 = table_info.columns.column_length (gc_column_number_parm) * 2 + 2; 311 gtr_column_delimiter_was_found = OFF; 312 column_buffer = ""; 313 314 if gc_current_position > gtr_end_of_buffer 315 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 316 PROBLEM_LINE_NUMBER_MESSAGE 317 || PROBLEM_ROW_NUMBER_MESSAGE 318 || PROBLEM_COLUMN_NAME_MESSAGE 319 || MAXIMUM_CHARACTERS_FOR_A_ROW_MESSAGE 320 || NUMBER_OF_CHARACTERS_ALREADY_PROCESSED_MESSAGE 321 || PROBLEM_ROW_VALUE_MESSAGE, 322 file_info.current_line_number, file_info.current_row_number, 323 table_info.columns.column_name (gc_column_number_parm), 324 file_info.file_buffer_length, file_info.file_buffer_length, 325 substr (file_buffer, 1, gc_current_position)); 326 327 gc_still_getting_the_column = ON; 328 gtr_in_a_quoted_string = OFF; 329 330 do while (gc_still_getting_the_column); 331 332 gc_current_char = substr (file_buffer, gc_current_position, 1); 333 334 if gc_current_char = QUOTE & gtr_processing_quotes 335 then call current_char_is_a_quote; 336 else if gc_current_char = the_column_delimiter 337 then call current_char_is_the_column_delimiter; 338 else if gc_current_char = the_row_delimiter 339 then call current_char_is_the_row_delimiter; 340 else column_buffer = column_buffer || gc_current_char; 341 342 gc_current_position = gc_current_position + 1; 343 344 if gc_still_getting_the_column 345 then do; 346 if gc_current_position > gtr_end_of_buffer 347 then gc_still_getting_the_column = OFF; 348 else if gc_current_position - gc_starting_position - 1 349 > gc_maximum_reasonable_column_length 350 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 351 PROBLEM_LINE_NUMBER_MESSAGE 352 || PROBLEM_ROW_NUMBER_MESSAGE 353 || PROBLEM_COLUMN_NAME_MESSAGE 354 || MAXIMUM_CHARACTERS_FOR_A_COLUMN_MESSAGE 355 || NUMBER_OF_CHARACTERS_ALREADY_PROCESSED_MESSAGE 356 || PROBLEM_ROW_VALUE_MESSAGE, 357 file_info.current_line_number, file_info.current_row_number, 358 table_info.columns.column_name (gc_column_number_parm), 359 gc_maximum_reasonable_column_length, gc_maximum_reasonable_column_length, 360 substr (file_buffer, 1, gc_current_position - 1)); 361 else; 362 end; 363 else if gc_starting_position = gc_current_position 364 then call ssu_$abort_line (sci_ptr, linus_error_$bad_file_process, 365 PROBLEM_LINE_NUMBER_MESSAGE 366 || PROBLEM_ROW_NUMBER_MESSAGE 367 || "^/There were ^d columns expected but only ^d were found." 368 || PROBLEM_ROW_VALUE_MESSAGE, 369 file_info.current_line_number, file_info.current_row_number, 370 gtr_number_of_columns, gc_column_number_parm - 1, 371 substr (file_buffer, 1, gc_current_position - 1)); 372 else; 373 374 if gc_current_char = NEWLINE 375 then file_info.current_line_number = file_info.current_line_number + 1; 376 377 end; 378 379 file_info.current_char_in_buffer = gc_current_position; 380 381 return; 382 383 current_char_is_a_quote: proc; 384 385 if gtr_in_a_quoted_string 386 then do; 387 if gc_current_position + 1 ^> gtr_end_of_buffer 388 then do; 389 if substr (file_buffer, gc_current_position + 1, 1) = QUOTE 390 then do; 391 gc_current_position = gc_current_position + 1; 392 column_buffer = column_buffer || QUOTE; 393 end; 394 else gtr_in_a_quoted_string = OFF; 395 end; 396 else gtr_in_a_quoted_string = OFF; 397 end; 398 else gtr_in_a_quoted_string = ON; 399 400 return; 401 402 end current_char_is_a_quote; 403 404 current_char_is_the_column_delimiter: proc; 405 406 dcl ccitcd_still_processing_whitespace bit (1) aligned; 407 408 if gtr_in_a_quoted_string 409 then do; 410 column_buffer = column_buffer || gc_current_char; 411 return; 412 end; 413 414 gtr_column_delimiter_was_found = ON; 415 gc_still_getting_the_column = OFF; 416 417 if gtr_processing_whitespace 418 then do; 419 ccitcd_still_processing_whitespace = ON; 420 do while (ccitcd_still_processing_whitespace); 421 if gc_current_position + 1 ^> gtr_end_of_buffer 422 then do; 423 if search (substr (file_buffer, gc_current_position + 1, 1), WHITESPACE) ^= 0 424 then gc_current_position = gc_current_position + 1; 425 else ccitcd_still_processing_whitespace = OFF; 426 end; 427 else ccitcd_still_processing_whitespace = OFF; 428 end; 429 end; 430 431 return; 432 433 end current_char_is_the_column_delimiter; 434 435 current_char_is_the_row_delimiter: proc; 436 437 if gtr_in_a_quoted_string 438 then column_buffer = column_buffer || gc_current_char; 439 else do; 440 gtr_still_processing_the_row = OFF; 441 gc_still_getting_the_column = OFF; 442 gtr_row_delimiter_was_found = ON; 443 end; 444 445 return; 446 447 end current_char_is_the_row_delimiter; 448 449 end get_column; 450 451 end get_the_row; 452 453 start_parsing_file: proc; 454 455 dcl spf_code fixed bin (35); 456 457 sci_ptr = lcb.subsystem_control_info_ptr; 458 work_area_ptr = addr (lcb.static_area); 459 460 file_info.flags.file_is_attached = OFF; 461 file_info.flags.file_is_opened = OFF; 462 file_info.flags.end_of_file_has_been_hit = OFF; 463 file_info.current_row_number = 1; 464 file_info.current_line_number = 1; 465 file_info.current_char_in_buffer = 1; 466 file_info.current_char_in_previous_buffer = 0; 467 file_info.file_iocb_ptr = null; 468 file_info.file_buffer_ptr = null; 469 470 call expand_pathname_ (file_info.output_file_pathname, 471 file_info.directory_name, file_info.entry_name, spf_code); 472 if spf_code ^= 0 473 then call ssu_$abort_line (sci_ptr, spf_code, 474 "^/While trying to expand the output file pathname ^a.", 475 file_info.output_file_pathname); 476 477 switch_name = unique_chars_ ("0"b) || ".parse_file"; 478 attach_description = "vfile_ " 479 || rtrim (file_info.directory_name) || ">" || rtrim (file_info.entry_name); 480 481 call iox_$attach_name (switch_name, file_info.file_iocb_ptr, 482 attach_description, null, spf_code); 483 if spf_code ^= 0 484 then call ssu_$abort_line (sci_ptr, spf_code, 485 "While trying to attach file ^a in dir ^a.", 486 rtrim (file_info.entry_name), rtrim (file_info.directory_name)); 487 file_info.flags.file_is_attached = ON; 488 489 call iox_$open (file_info.file_iocb_ptr, Stream_input, "0"b, spf_code); 490 if spf_code ^= 0 491 then call ssu_$abort_line (sci_ptr, spf_code, 492 "^/Unable to open file ^a in dir ^a.", 493 rtrim (file_info.entry_name), rtrim (file_info.directory_name)); 494 file_info.flags.file_is_opened = ON; 495 496 file_info.file_buffer_length 497 = (table_info.row_value_length * 2) + (table_info.column_count * 2); 498 allocate file_buffer in (work_area) set (file_info.file_buffer_ptr); 499 file_buffer = ""; 500 501 return; 502 503 end start_parsing_file; 504 505 stop_parsing_file: proc; 506 507 dcl spf_code fixed bin (35); 508 509 sci_ptr = lcb.subsystem_control_info_ptr; 510 work_area_ptr = addr (lcb.static_area); 511 512 if file_info.file_buffer_ptr ^= null 513 then do; 514 free file_buffer; 515 file_info.file_buffer_ptr = null; 516 end; 517 518 if file_info.flags.file_is_opened 519 then do; 520 call iox_$close (file_info.file_iocb_ptr, spf_code); 521 if spf_code ^= 0 & ^cleanup_signalled 522 then call ssu_$print_message (sci_ptr, spf_code, 523 "^/While trying to close ^a.", file_info.entry_name); 524 file_info.flags.file_is_opened = OFF; 525 end; 526 else; 527 528 if file_info.flags.file_is_attached 529 then do; 530 call iox_$detach_iocb (file_info.file_iocb_ptr, spf_code); 531 if spf_code ^= 0 & ^cleanup_signalled 532 then call ssu_$print_message (sci_ptr, spf_code, 533 "^/While trying to detach ^p.", file_info.file_iocb_ptr); 534 file_info.flags.file_is_attached = OFF; 535 call iox_$destroy_iocb (file_info.file_iocb_ptr, spf_code); 536 if spf_code ^= 0 & ^cleanup_signalled 537 then call ssu_$print_message (sci_ptr, spf_code, 538 "^/While trying to destroy ^p.", file_info.file_iocb_ptr); 539 end; 540 541 return; 542 543 end stop_parsing_file; 544 545 546 dcl MAXIMUM_CHARACTERS_FOR_A_COLUMN_MESSAGE char (58) static internal options (constant) init ( 547 "^/The column should have taken a maximum of ^d characters."); 548 549 dcl MAXIMUM_CHARACTERS_FOR_A_ROW_MESSAGE char (55) static internal options (constant) init ( 550 "^/The row should have taken a maximum of ^d characters."); 551 552 dcl MAXIMUM_MRDS_ATTRIBUTE_LENGTH fixed bin internal static options (constant) init (4096); 553 554 dcl MISSING_COLUMN_DELIMITER_MESSAGE char (66) static internal options (constant) init ( 555 "^/The column delimiter character wasn't found after the ^a column."); 556 557 dcl NUMBER_OF_CHARACTERS_ALREADY_PROCESSED_MESSAGE char (53) static internal options (constant) init ( 558 "^/There were already ^d characters processed for it."); 559 560 dcl OFF bit (1) aligned static internal options (constant) init ("0"b); 561 dcl ON bit (1) aligned static internal options (constant) init ("1"b); 562 563 dcl MISSING_ROW_DELIMITER_MESSAGE char (63) static internal options (constant) init ( 564 "^/The row delimiter character wasn't found after the ^a column."); 565 566 dcl NEWLINE char (1) static internal options (constant) init (" 567 "); 568 569 dcl PROBLEM_COLUMN_NAME_MESSAGE char (61) static internal options (constant) init ( 570 "^/The ^a column was being processed when the problem occured."); 571 572 dcl PROBLEM_LINE_NUMBER_MESSAGE char (58) static internal options (constant) init ( 573 "^/A problem was encountered on line ^d of the input file."); 574 575 dcl PROBLEM_ROW_NUMBER_MESSAGE char (59) static internal options (constant) init ( 576 "^/The current row about to be stored into the table was ^d."); 577 578 dcl PROBLEM_ROW_VALUE_MESSAGE char (61) static internal options (constant) init ( 579 "^/The row value collected at the time of the error was:^/""^a"""); 580 581 dcl QUOTE char (1) static internal options (constant) init (""""); 582 583 /* WHITESPACE is BLANK, HORIZONTAL TAB, and VERTICAL TAB */ 584 dcl WHITESPACE char (3) internal static options (constant) init (" "); 585 586 dcl addcharno builtin; 587 dcl addr builtin; 588 dcl addrel builtin; 589 dcl attach_description char (256); 590 591 dcl cleanup_signalled bit (1) aligned; 592 dcl column_buffer char (MAXIMUM_MRDS_ATTRIBUTE_LENGTH) varying; 593 594 dcl error_table_$end_of_info fixed bin(35) ext static; 595 dcl error_table_$short_record fixed bin(35) ext static; 596 dcl expand_pathname_ entry (char(*), char(*), char(*), fixed bin(35)); 597 598 599 dcl file_buffer char (file_info.file_buffer_length) varying based (file_info.file_buffer_ptr); 600 dcl file_buffer_length_word fixed bin (35) based; 601 dcl 1 file_info like data_file_info based (file_info_ptr); 602 dcl file_info_ptr ptr; 603 dcl fixed builtin; 604 605 dcl length builtin; 606 dcl linus_error_$bad_file_process fixed bin(35) ext static; 607 608 dcl null builtin; 609 610 dcl rel builtin; 611 dcl rtrim builtin; 612 613 dcl sci_ptr ptr; 614 dcl search builtin; 615 dcl ssu_$abort_line entry() options(variable); 616 dcl ssu_$print_message entry() options(variable); 617 dcl substr builtin; 618 dcl switch_name char (32); 619 dcl sys_info$max_seg_size fixed bin(35) ext static; 620 621 dcl the_column_delimiter char (1); 622 dcl the_row_delimiter char (1); 623 624 dcl unique_chars_ entry (bit(*)) returns(char(15)); 625 626 dcl work_area area (sys_info$max_seg_size) based (work_area_ptr); 627 dcl work_area_ptr ptr; 628 1 1 /* BEGIN INCLUDE FILE ... arg_descriptor.incl.pl1 1 2* 1 3* James R. Davis 1 Mar 79 */ 1 4 /* Modified June 83 JMAthane for extended arg descriptor format */ 1 5 1 6 dcl 1 arg_descriptor based (arg_descriptor_ptr) aligned, 1 7 2 flag bit (1) unal, 1 8 2 type fixed bin (6) unsigned unal, 1 9 2 packed bit (1) unal, 1 10 2 number_dims fixed bin (4) unsigned unal, 1 11 2 size fixed bin (24) unsigned unal; 1 12 1 13 dcl 1 fixed_arg_descriptor based (arg_descriptor_ptr) aligned, 1 14 2 flag bit (1) unal, 1 15 2 type fixed bin (6) unsigned unal, 1 16 2 packed bit (1) unal, 1 17 2 number_dims fixed bin (4) unsigned unal, 1 18 2 scale fixed bin (11) unal, 1 19 2 precision fixed bin (12) unsigned unal; 1 20 1 21 dcl 1 extended_arg_descriptor based (arg_descriptor_ptr) aligned, 1 22 2 flag bit (1) unal, /* = "1"b */ 1 23 2 type fixed bin (6) unsigned unal, /* = 58 */ 1 24 2 packed bit (1) unal, /* significant if number_dims ^= 0 */ 1 25 2 number_dims fixed (4) unsigned unal,/* number of variable dimensions */ 1 26 2 size bit (24) unal, 1 27 2 dims (0 refer (extended_arg_descriptor.number_dims)), /* part referenced by called generated code */ 1 28 3 low fixed bin (35), 1 29 3 high fixed bin (35), 1 30 3 multiplier fixed bin (35), /* in bits if packed, in words if not */ 1 31 2 real_type fixed bin (18) unsigned unal, 1 32 2 type_offset fixed bin (18) unsigned unal; /* offset rel to symbol tree to symbol node for type, if any */ 1 33 1 34 dcl arg_descriptor_ptr ptr; 1 35 1 36 dcl extended_arg_type fixed bin init (58); 1 37 1 38 /* END INCLUDE file .... arg_descriptor.incl.pl1 */ 629 630 2 1 /* BEGIN INCLUDE FILE ... arg_list.incl.pl1 2 2* 2 3* James R. Davis 10 May 79 */ 2 4 2 5 2 6 2 7 /****^ HISTORY COMMENTS: 2 8* 1) change(86-05-15,DGHowe), approve(86-05-15,MCR7375), 2 9* audit(86-07-15,Schroth): 2 10* added command_name_arglist declaration to allow the storage of the 2 11* command name given to the command processor 2 12* END HISTORY COMMENTS */ 2 13 2 14 dcl 1 arg_list aligned based, 2 15 2 header, 2 16 3 arg_count fixed bin (17) unsigned unal, 2 17 3 pad1 bit (1) unal, 2 18 3 call_type fixed bin (18) unsigned unal, 2 19 3 desc_count fixed bin (17) unsigned unal, 2 20 3 pad2 bit (19) unal, 2 21 2 arg_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr, 2 22 2 desc_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr; 2 23 2 24 2 25 dcl 1 command_name_arglist aligned based, 2 26 2 header, 2 27 3 arg_count fixed bin (17) unsigned unal, 2 28 3 pad1 bit (1) unal, 2 29 3 call_type fixed bin (18) unsigned unal, 2 30 3 desc_count fixed bin (17) unsigned unal, 2 31 3 mbz bit(1) unal, 2 32 3 has_command_name bit(1) unal, 2 33 3 pad2 bit (17) unal, 2 34 2 arg_ptrs (arg_list_arg_count refer (command_name_arglist.arg_count)) ptr, 2 35 2 desc_ptrs (arg_list_arg_count refer (command_name_arglist.arg_count)) ptr, 2 36 2 name, 2 37 3 command_name_ptr pointer, 2 38 3 command_name_length fixed bin (21); 2 39 2 40 2 41 2 42 dcl 1 arg_list_with_envptr aligned based, /* used with non-quick int and entry-var calls */ 2 43 2 header, 2 44 3 arg_count fixed bin (17) unsigned unal, 2 45 3 pad1 bit (1) unal, 2 46 3 call_type fixed bin (18) unsigned unal, 2 47 3 desc_count fixed bin (17) unsigned unal, 2 48 3 pad2 bit (19) unal, 2 49 2 arg_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr, 2 50 2 envptr ptr, 2 51 2 desc_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr; 2 52 2 53 2 54 dcl ( 2 55 Quick_call_type init (0), 2 56 Interseg_call_type init (4), 2 57 Envptr_supplied_call_type 2 58 init (8) 2 59 ) fixed bin (18) unsigned unal int static options (constant); 2 60 2 61 /* The user must declare arg_list_arg_count - if an adjustable automatic structure 2 62* is being "liked" then arg_list_arg_count may be a parameter, in order to allocate 2 63* an argument list of the proper size in the user's stack 2 64* 2 65**/ 2 66 /* END INCLUDE FILE ... arg_list.incl.pl1 */ 631 632 3 1 /* --------------- BEGIN include file iox_dcls.incl.pl1 --------------- */ 3 2 3 3 /* Written 05/04/78 by C. D. Tavares */ 3 4 /* Fixed declaration of iox_$find_iocb_n 05/07/80 by R. Holmstedt */ 3 5 /* Modified 5/83 by S. Krupp to add declarations for: iox_$open_file, 3 6* iox_$close_file, iox_$detach and iox_$attach_loud entries. */ 3 7 3 8 dcl iox_$attach_name entry (char (*), pointer, char (*), pointer, fixed bin (35)), 3 9 iox_$attach_ptr entry (pointer, char (*), pointer, fixed bin (35)), 3 10 iox_$close entry (pointer, fixed bin (35)), 3 11 iox_$control entry (pointer, char (*), pointer, fixed bin (35)), 3 12 iox_$delete_record entry (pointer, fixed bin (35)), 3 13 iox_$destroy_iocb entry (pointer, fixed bin (35)), 3 14 iox_$detach_iocb entry (pointer, fixed bin (35)), 3 15 iox_$err_not_attached entry options (variable), 3 16 iox_$err_not_closed entry options (variable), 3 17 iox_$err_no_operation entry options (variable), 3 18 iox_$err_not_open entry options (variable), 3 19 iox_$find_iocb entry (char (*), pointer, fixed bin (35)), 3 20 iox_$find_iocb_n entry (fixed bin, ptr, fixed bin(35)), 3 21 iox_$get_chars entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 3 22 iox_$get_line entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 3 23 iox_$look_iocb entry (char (*), pointer, fixed bin (35)), 3 24 iox_$modes entry (pointer, char (*), char (*), fixed bin (35)), 3 25 iox_$move_attach entry (pointer, pointer, fixed bin (35)), 3 26 iox_$open entry (pointer, fixed bin, bit (1) aligned, fixed bin (35)), 3 27 iox_$position entry (pointer, fixed bin, fixed bin (21), fixed bin (35)), 3 28 iox_$propagate entry (pointer), 3 29 iox_$put_chars entry (pointer, pointer, fixed bin (21), fixed bin (35)), 3 30 iox_$read_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 3 31 iox_$read_length entry (pointer, fixed bin (21), fixed bin (35)), 3 32 iox_$read_record entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 3 33 iox_$rewrite_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 3 34 iox_$seek_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 3 35 iox_$write_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 3 36 iox_$open_file entry(ptr, fixed bin, char(*), bit(1) aligned, fixed bin(35)), 3 37 iox_$close_file entry(ptr, char(*), fixed bin(35)), 3 38 iox_$detach entry(ptr, char(*), fixed bin(35)), 3 39 iox_$attach_loud entry(ptr, char(*), ptr, fixed bin(35)); 3 40 3 41 dcl (iox_$user_output, 3 42 iox_$user_input, 3 43 iox_$user_io, 3 44 iox_$error_output) external static pointer; 3 45 3 46 /* ---------------- END include file iox_dcls.incl.pl1 ---------------- */ 633 634 4 1 /* Begin include file ..... iox_modes.incl.pl1 */ 4 2 4 3 /* Written by C. D. Tavares, 03/17/75 */ 4 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 4 5 4 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 4 7 ("stream_input", "stream_output", "stream_input_output", 4 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 4 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 4 10 "direct_input", "direct_output", "direct_update"); 4 11 4 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 4 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 4 14 4 15 dcl (Stream_input initial (1), 4 16 Stream_output initial (2), 4 17 Stream_input_output initial (3), 4 18 Sequential_input initial (4), 4 19 Sequential_output initial (5), 4 20 Sequential_input_output initial (6), 4 21 Sequential_update initial (7), 4 22 Keyed_sequential_input initial (8), 4 23 Keyed_sequential_output initial (9), 4 24 Keyed_sequential_update initial (10), 4 25 Direct_input initial (11), 4 26 Direct_output initial (12), 4 27 Direct_update initial (13)) fixed bin int static options (constant); 4 28 4 29 /* End include file ..... iox_modes.incl.pl1 */ 635 636 5 1 /* BEGIN INCLUDE FILE linus_data_file_info.incl.pl1 5 2* 5 3* Written - Al Dupuis - September 1983 5 4**/ 5 5 5 6 /****^ HISTORY COMMENTS: 5 7* 1) change(88-01-27,Dupuis), approve(88-03-03,MCR7844), 5 8* audit(88-03-14,Blair), install(88-03-15,MR12.2-1036): 5 9* Added the trace_every_n_tuples field and the tracing flag. 5 10* END HISTORY COMMENTS */ 5 11 5 12 /* format: off */ 5 13 5 14 dcl 1 create_columns_map aligned based (create_cm_ptr), 5 15 2 number_of_columns fixed bin, 5 16 2 column_numbers (create_columns_map_init_number_of_columns refer (create_columns_map.number_of_columns)) fixed bin; 5 17 dcl create_columns_map_init_number_of_columns fixed bin; 5 18 dcl create_cm_ptr ptr; 5 19 5 20 dcl 1 data_file_info aligned, 5 21 2 flags, 5 22 3 truncate_file bit (1) unaligned, /* ON means truncate */ 5 23 3 check_values_for_delimiters bit (1) unaligned, /* ON means to check */ 5 24 3 process_quotes bit (1) unaligned, /* ON means process quotes */ 5 25 3 process_whitespace bit (1) unaligned, /* ON means treat all whitespace as one blank */ 5 26 3 last_column_delimiter_is_optional bit (1) unaligned, /* ON means last column delimiter is optional */ 5 27 3 create_new_columns bit (1) unaligned, /* ON means create new columns */ 5 28 3 file_is_opened bit (1) unaligned, /* ON means file is opened */ 5 29 3 file_is_attached bit (1) unaligned, /* ON means file is attached */ 5 30 3 end_of_file_has_been_hit bit (1) unaligned, /* ON means we've already hit EOF */ 5 31 3 tracing bit (1) unaligned, /* ON means we need to give progress reports */ 5 32 3 available bit (26) unaligned, 5 33 2 current_row_number fixed bin (35), /* current row number in table */ 5 34 2 current_line_number fixed bin (35), /* current line number of file */ 5 35 2 current_char_in_buffer fixed bin (35), /* index of where we're about to start */ 5 36 2 current_char_in_previous_buffer fixed bin (35), /* index of where we left off in previous buffer */ 5 37 2 file_buffer_length fixed bin (21), /* length of file buffer in chars */ 5 38 2 trace_every_n_tuples fixed bin (35), /* print a progress report every n */ 5 39 2 create_columns_map_ptr ptr, /* points to create_columns_map structure */ 5 40 2 file_iocb_ptr ptr, /* points to iocb for file */ 5 41 2 file_buffer_ptr ptr, /* points to buffer for file */ 5 42 2 column_delimiter char (1) unaligned, /* a single ascii character */ 5 43 2 row_delimiter char (1) unaligned, /* a single ascii character */ 5 44 2 output_file_pathname char (168) unaligned, /* path of output file */ 5 45 2 entry_name char (32) unaligned, /* dir name where file is located */ 5 46 2 directory_name char (168) unaligned; /* entry name of file */ 5 47 5 48 /* END INCLUDE FILE linus_data_file_info.incl.pl1 */ 637 638 6 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 6 2 6 3 6 4 6 5 /****^ HISTORY COMMENTS: 6 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 6 7* install(86-07-29,MR12.0-1106): 6 8* Added general_work_area_ptr and renamed sfr_ptr to 6 9* force_retrieve_scope_ptr. 6 10* END HISTORY COMMENTS */ 6 11 6 12 6 13 /* HISTORY: 6 14* 6 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 6 16* 6 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 6 18* a part of the attribute level control work. 6 19* 6 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 6 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 6 22* scope information. 6 23* 6 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 6 25* retaining various vcpu times to be collected when in timing mode. The 6 26* times to be collected are: LINUS parsing time, LINUS processing time, and 6 27* MRDS processing time. 6 28* 6 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 6 30* part of the line numbering implementation. This allows for possible later 6 31* LINUS control of the build defaults. 6 32* 6 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 6 34* information is now retained by ssu_. Removed parse_timer as no longer 6 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 6 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 6 37* 6 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 6 39* subsystem_invocation_level, and selection_expression_identifier. 6 40* 6 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 6 42* table_control_info_ptr. 6 43* 6 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 6 45* 6 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 6 47* 6 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 6 49* 6 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 6 51**/ 6 52 6 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 6 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 6 55 2 rb_len fixed bin (21), /* length of request buffer */ 6 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 6 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 6 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 6 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 6 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 6 61 2 test_flag bit (1) unal, /* on if in test mode */ 6 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 6 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 6 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 6 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 6 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 6 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 6 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 6 69 2 reserved bit (27) unal, 6 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 6 71 2 rb_ptr ptr, /* ptr to request buffer */ 6 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 6 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 6 74 2 ttn_ptr ptr, /* pointer to table info structure */ 6 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 6 76 2 lv_ptr ptr, /* pointer linus variables */ 6 77 2 si_ptr ptr, /* pointer to select_info structure */ 6 78 2 setfi_ptr ptr, /* pointer to set function information */ 6 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 6 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 6 81 2 lit_ptr ptr, /* pointer to literal pool */ 6 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 6 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 6 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 6 85* (MR7.0) */ 6 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 6 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 6 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 6 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 6 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 6 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 6 92* for current lila expression */ 6 93 2 unused_timer float bin (63), /* future expansion */ 6 94 2 request_time float bin (63), /* How much request time was spent 6 95* in LINUS. (-1 = user has just enabled 6 96* timing, do not report) */ 6 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 6 98 2 build_increment fixed bin, /* default increment for build mode */ 6 99 2 build_start fixed bin, /* default start count for build mode */ 6 100 2 linus_version char (4), /* current version of LINUS */ 6 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 6 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 6 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 6 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 6 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 6 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 6 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 6 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 6 109 2 word_pad (6) bit (36) unal, 6 110 /* procedures that will be optionally */ 6 111 /* replaced by the user. Saved so they */ 6 112 /* can be reinstated if desired. */ 6 113 2 ssu_abort_line entry options (variable), 6 114 2 ssu_post_request_line variable entry (ptr), 6 115 2 ssu_pre_request_line variable entry (ptr), 6 116 6 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 6 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 6 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 6 120 6 121 dcl lcb_ptr ptr; 6 122 6 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 639 640 7 1 /* BEGIN INCLUDE FILE linus_table_info.incl.pl1 -- Dave Schimke 1/5/83 */ 7 2 /* 7 3*09/28/83 Al Dupuis: Added the store_args_ptr variable and the store_args structure. 7 4**/ 7 5 dcl 1 table_info aligned based (table_ip), /* info on displayable table */ 7 6 2 retrieval_identifier fixed bin , /* current retrieval id */ 7 7 2 row_count fixed bin(35), /* number of rows in table */ 7 8 2 column_count fixed bin, /* number of columns in table */ 7 9 2 maximum_column_name_length fixed bin, 7 10 /* largest column name */ 7 11 2 maximum_column_value_length fixed bin, 7 12 /* largest column length */ 7 13 2 row_value_length fixed bin (21), /* length of entire row */ 7 14 /* (sum of column lengths) */ 7 15 2 row_segs_info_ptr ptr init (null), /* ptr to the row segs info */ 7 16 2 store_args_ptr ptr, /* ptr to the arg list for storing rows */ 7 17 2 columns (ti_init_column_count refer (table_info.column_count)), 7 18 /* column info */ 7 19 3 column_name char (69) var, /* column header name */ 7 20 3 column_data_type bit (36), /* original data descriptor */ 7 21 3 column_length fixed bin (21), /* length of column in chars */ 7 22 3 column_index fixed bin (21); /* index of start of column in */ 7 23 /* row value */ 7 24 7 25 dcl 1 row_segs_info aligned based (row_segs_ip), 7 26 2 max_number_of_seg_ptrs fixed bin, 7 27 2 max_number_of_ptrs_per_seg fixed bin(21), 7 28 2 number_of_seg_ptrs fixed bin, 7 29 2 seg_ptr (rsi_init_max_number_of_seg_ptrs refer (row_segs_info. 7 30 max_number_of_seg_ptrs)) ptr unal; 7 31 7 32 dcl 1 row_ptrs aligned based (row_ptrs_p), 7 33 2 number_of_ptrs_this_seg fixed bin(21), 7 34 2 row_value_ptr (row_ptrs.number_of_ptrs_this_seg) ptr unal; 7 35 7 36 dcl row_value char (table_info.row_value_length) based (row_value_p); 7 37 dcl row_value_p ptr unal; /* ptr to the current row value */ 7 38 7 39 dcl row_segs_ip ptr; /* ptr to the seg of ptrs to */ 7 40 /* the arrays of row_value_ptrs */ 7 41 dcl row_ptrs_p ptr; /* ptr to an array of */ 7 42 /* row_value_ptrs */ 7 43 7 44 dcl 1 store_args aligned based (store_ap), 7 45 2 table_name char (30), 7 46 2 error_code fixed bin (35), 7 47 2 number_of_descriptors fixed bin, 7 48 2 header like arg_list.header, 7 49 2 arg_ptrs (arg_list_arg_count refer (store_args.header.arg_count)) ptr, 7 50 2 desc_ptrs (arg_list_arg_count refer (store_args.header.arg_count)) ptr, 7 51 2 argument_list_descriptors (init_number_of_descriptors refer 7 52 (store_args.number_of_descriptors)) like arg_descriptor; 7 53 7 54 dcl init_number_of_descriptors; 7 55 dcl rsi_init_max_number_of_seg_ptrs fixed bin; 7 56 dcl store_ap ptr; 7 57 dcl table_ip ptr; 7 58 dcl ti_init_column_count fixed bin; 7 59 7 60 /* END INCLUDE FILE linus_table_info.incl.pl1 */ 641 642 643 end linus_parse_file; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/15/88 1553.6 linus_parse_file.pl1 >spec>install>MR12.2-1036>linus_parse_file.pl1 629 1 11/02/83 1845.0 arg_descriptor.incl.pl1 >ldd>include>arg_descriptor.incl.pl1 631 2 08/05/86 0856.8 arg_list.incl.pl1 >ldd>include>arg_list.incl.pl1 633 3 05/23/83 0916.6 iox_dcls.incl.pl1 >ldd>include>iox_dcls.incl.pl1 635 4 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 637 5 03/15/88 1550.1 linus_data_file_info.incl.pl1 >spec>install>MR12.2-1036>linus_data_file_info.incl.pl1 639 6 07/29/86 1148.4 linus_lcb.incl.pl1 >ldd>include>linus_lcb.incl.pl1 641 7 10/06/83 1219.0 linus_table_info.incl.pl1 >ldd>include>linus_table_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. MAXIMUM_CHARACTERS_FOR_A_COLUMN_MESSAGE 000174 constant char(58) initial packed unaligned dcl 546 ref 348 MAXIMUM_CHARACTERS_FOR_A_ROW_MESSAGE 000156 constant char(55) initial packed unaligned dcl 549 ref 314 MAXIMUM_MRDS_ATTRIBUTE_LENGTH internal static fixed bin(17,0) initial dcl 552 ref 592 MISSING_COLUMN_DELIMITER_MESSAGE 000135 constant char(66) initial packed unaligned dcl 554 ref 272 MISSING_ROW_DELIMITER_MESSAGE 000077 constant char(63) initial packed unaligned dcl 563 ref 262 NEWLINE constant char(1) initial packed unaligned dcl 566 ref 256 374 NUMBER_OF_CHARACTERS_ALREADY_PROCESSED_MESSAGE 000117 constant char(53) initial packed unaligned dcl 557 ref 314 348 OFF constant bit(1) initial dcl 560 ref 211 311 328 346 394 396 415 425 427 440 441 460 461 462 524 534 ON constant bit(1) initial dcl 561 ref 164 214 253 327 398 414 419 442 487 494 PROBLEM_COLUMN_NAME_MESSAGE 000057 constant char(61) initial packed unaligned dcl 569 ref 236 314 348 PROBLEM_LINE_NUMBER_MESSAGE 000040 constant char(58) initial packed unaligned dcl 572 ref 197 236 262 272 314 348 363 PROBLEM_ROW_NUMBER_MESSAGE 000021 constant char(59) initial packed unaligned dcl 575 ref 197 236 262 272 314 348 363 PROBLEM_ROW_VALUE_MESSAGE 000001 constant char(61) initial packed unaligned dcl 578 ref 236 262 272 314 348 363 QUOTE 003462 constant char(1) initial packed unaligned dcl 581 ref 334 389 392 Stream_input 000245 constant fixed bin(17,0) initial dcl 4-15 set ref 489* WHITESPACE 000000 constant char(3) initial packed unaligned dcl 584 ref 423 addcharno builtin function dcl 586 ref 152 addr builtin function dcl 587 ref 128 458 510 addrel builtin function dcl 588 ref 152 arg_descriptor based structure level 1 dcl 1-6 arg_list based structure level 1 dcl 2-14 attach_description 000100 automatic char(256) packed unaligned dcl 589 set ref 478* 481* ccitcd_still_processing_whitespace 002500 automatic bit(1) dcl 406 set ref 419* 420 425* 427* cleanup_signalled 000200 automatic bit(1) dcl 591 set ref 106* 521 531 536 cleanup_signalled_parm parameter bit(1) dcl 48 ref 94 106 code_parm parameter fixed bin(35,0) dcl 47 set ref 56 69* 71* 72 72* 77 88* 94 107* column_buffer 000201 automatic varying char(4096) dcl 592 set ref 220 222* 226 230 312* 340* 340 392* 392 410* 410 437* 437 column_count 2 based fixed bin(17,0) level 2 dcl 7-5 ref 210 496 column_delimiter 16 based char(1) level 2 packed packed unaligned dcl 601 ref 130 column_index 37 based fixed bin(21,0) array level 3 dcl 7-5 ref 226 230 column_length 36 based fixed bin(21,0) array level 3 dcl 7-5 ref 219 226 230 309 column_name 12 based varying char(69) array level 3 dcl 7-5 set ref 222* 236* 262* 272* 314* 348* columns 12 based structure array level 2 dcl 7-5 current_char_in_buffer 3 based fixed bin(35,0) level 2 dcl 601 set ref 208* 236 236 249 249 254* 254 262 262 272 272 285 285 307 379* 465* current_char_in_previous_buffer 4 based fixed bin(35,0) level 2 dcl 601 set ref 132 134 135* 285* 287* 466* current_line_number 2 based fixed bin(35,0) level 2 dcl 601 set ref 197* 236* 256* 256 262* 272* 314* 348* 363* 374* 374 464* current_row_number 1 based fixed bin(35,0) level 2 dcl 601 set ref 197 197* 207 236* 262* 272* 289* 289 314* 348* 363* 463* data_file_info 002224 automatic structure level 1 dcl 5-20 data_file_info_ptr_parm parameter pointer dcl 49 ref 56 66 77 86 94 104 directory_name 100(18) based char(168) level 2 packed packed unaligned dcl 601 set ref 197 470* 478 483 483 490 490 end_of_file_has_been_hit 0(08) based bit(1) level 3 packed packed unaligned dcl 601 set ref 139 164* 462* entry_name 70(18) based char(32) level 2 packed packed unaligned dcl 601 set ref 197 470* 478 483 483 490 490 521* error_table_$end_of_info 000010 external static fixed bin(35,0) dcl 594 ref 141 159 162 196 error_table_$short_record 000012 external static fixed bin(35,0) dcl 595 ref 159 expand_pathname_ 000014 constant entry external dcl 596 ref 470 extended_arg_type 002222 automatic fixed bin(17,0) initial dcl 1-36 set ref 1-36* file_buffer based varying char dcl 599 set ref 134* 134 137* 141 146 194 209 236 236 249 262 262 272 272 314 314 332 348 348 363 363 389 423 498 499* 514 file_buffer_length 5 based fixed bin(21,0) level 2 dcl 601 set ref 134 137 147 314* 314* 496* 498 499 514 file_buffer_length_word based fixed bin(35,0) dcl 600 set ref 157* file_buffer_ptr 14 based pointer level 2 dcl 601 set ref 134 134 137 141 146 152 157 194 209 236 236 249 262 262 272 272 314 314 332 348 348 363 363 389 423 468* 498* 499 512 514 515* file_info based structure level 1 unaligned dcl 601 file_info_ptr 002202 automatic pointer dcl 602 set ref 66* 86* 104* 129 130 132 134 134 134 134 135 137 137 139 141 146 147 152 154 157 164 194 197 197 197 197 197 207 208 209 212 213 236 236 236 236 236 236 249 249 249 254 254 256 256 262 262 262 262 262 262 272 272 272 272 272 272 272 285 285 285 287 289 289 307 314 314 314 314 314 314 332 348 348 348 348 363 363 363 363 374 374 379 389 423 460 461 462 463 464 465 466 467 468 470 470 470 472 478 478 481 483 483 483 483 487 489 490 490 490 490 494 496 498 498 499 499 512 514 514 515 518 520 521 524 528 530 531 534 535 536 file_iocb_ptr 12 based pointer level 2 dcl 601 set ref 154* 467* 481* 489* 520* 530* 531* 535* 536* file_is_attached 0(07) based bit(1) level 3 packed packed unaligned dcl 601 set ref 460* 487* 528 534* file_is_opened 0(06) based bit(1) level 3 packed packed unaligned dcl 601 set ref 461* 494* 518 524* flags based structure level 2 packed packed unaligned dcl 601 ftb_code 002416 automatic fixed bin(35,0) dcl 118 set ref 154* 159 159 159 166* ftb_code_parm parameter fixed bin(35,0) dcl 119 set ref 113 125* 141* 162* ftb_current_file_buffer_length 002417 automatic fixed bin(21,0) dcl 120 set ref 146* 147 152 157 162 ftb_file_buffer_ptr 002420 automatic pointer dcl 121 set ref 152* 154* ftb_number_of_chars_available_in_buffer 002422 automatic fixed bin(21,0) dcl 122 set ref 147* 149 154* ftb_number_of_chars_read 002423 automatic fixed bin(21,0) dcl 123 set ref 154* 157 162 gc_column_number_parm parameter fixed bin(17,0) dcl 299 ref 293 309 314 348 363 gc_current_char 002456 automatic char(1) packed unaligned dcl 300 set ref 332* 334 336 338 340 374 410 437 gc_current_position 002457 automatic fixed bin(21,0) dcl 301 set ref 308* 314 314 314 332 342* 342 346 348 348 348 363 363 363 379 387 389 391* 391 421 423 423* 423 gc_maximum_reasonable_column_length 002460 automatic fixed bin(21,0) dcl 302 set ref 309* 348 348* 348* gc_row_number_parm parameter fixed bin(17,0) dcl 303 ref 293 gc_starting_position 002461 automatic fixed bin(21,0) dcl 304 set ref 307* 308 348 363 gc_still_getting_the_column 002462 automatic bit(1) dcl 305 set ref 327* 330 344 346* 415* 441* gtr_code_parm parameter fixed bin(35,0) dcl 178 set ref 173 192* 196* gtr_column_delimiter_was_found 002432 automatic bit(1) dcl 179 set ref 272 311* 414* gtr_current_column_number 002433 automatic fixed bin(17,0) dcl 180 set ref 216* 218* 219 222 226 226 230 230 233* gtr_current_row_number 002434 automatic fixed bin(17,0) dcl 181 set ref 207* 218* gtr_end_of_buffer 002435 automatic fixed bin(21,0) dcl 182 set ref 209* 249 285 314 346 387 421 gtr_in_a_quoted_string 002436 automatic bit(1) dcl 183 set ref 328* 385 394* 396* 398* 408 437 gtr_last_column_processed 002437 automatic fixed bin(17,0) dcl 184 set ref 233* 236 236 236* gtr_maximum_column_length 002440 automatic fixed bin(21,0) dcl 185 set ref 219* 220 222* 226 gtr_number_of_columns 002441 automatic fixed bin(17,0) dcl 186 set ref 210* 216 236 236* 262 272 363* gtr_processing_quotes 002442 automatic bit(1) dcl 187 set ref 212* 334 gtr_processing_whitespace 002443 automatic bit(1) dcl 188 set ref 213* 417 gtr_row_delimiter_was_found 002444 automatic bit(1) dcl 189 set ref 211* 247 253* 262 442* gtr_still_processing_the_row 002445 automatic bit(1) dcl 190 set ref 214* 216 440* header based structure level 2 dcl 2-14 iox_$attach_name 000026 constant entry external dcl 3-8 ref 481 iox_$close 000030 constant entry external dcl 3-8 ref 520 iox_$destroy_iocb 000032 constant entry external dcl 3-8 ref 535 iox_$detach_iocb 000034 constant entry external dcl 3-8 ref 530 iox_$get_chars 000036 constant entry external dcl 3-8 ref 154 iox_$open 000040 constant entry external dcl 3-8 ref 489 last_column_delimiter_is_optional 0(04) based bit(1) level 3 packed packed unaligned dcl 601 ref 272 lcb based structure level 1 dcl 6-53 lcb_ptr 002400 automatic pointer dcl 6-121 set ref 65* 85* 103* 127 128 457 458 509 510 lcb_ptr_parm parameter pointer dcl 50 ref 56 65 77 85 94 103 length builtin function dcl 605 ref 141 146 194 209 220 linus_error_$bad_file_process 000016 external static fixed bin(35,0) dcl 606 set ref 197* 236* 262* 272* 314* 348* 363* null builtin function dcl 608 ref 467 468 481 481 512 515 output_file_pathname 16(18) based char(168) level 2 packed packed unaligned dcl 601 set ref 470* 472* process_quotes 0(02) based bit(1) level 3 packed packed unaligned dcl 601 ref 212 process_whitespace 0(03) based bit(1) level 3 packed packed unaligned dcl 601 ref 213 row_delimiter 16(09) based char(1) level 2 packed packed unaligned dcl 601 ref 129 row_value based char packed unaligned dcl 7-36 set ref 226* 230* row_value_length 5 based fixed bin(21,0) level 2 dcl 7-5 ref 226 230 496 row_value_p 002402 automatic pointer packed unaligned dcl 7-37 set ref 68* 226 230 row_value_ptr_parm parameter pointer dcl 51 ref 56 68 rtrim builtin function dcl 611 ref 478 478 483 483 483 483 490 490 490 490 sci_ptr 002204 automatic pointer dcl 613 set ref 127* 166* 197* 222* 236* 262* 272* 314* 348* 363* 457* 472* 483* 490* 509* 521* 531* 536* search builtin function dcl 614 ref 423 spf_code 002526 automatic fixed bin(35,0) dcl 507 in procedure "stop_parsing_file" set ref 520* 521 521* 530* 531 531* 535* 536 536* spf_code 002516 automatic fixed bin(35,0) dcl 455 in procedure "start_parsing_file" set ref 470* 472 472* 481* 483 483* 489* 490 490* ssu_$abort_line 000020 constant entry external dcl 615 ref 166 197 236 262 272 314 348 363 472 483 490 ssu_$print_message 000022 constant entry external dcl 616 ref 222 521 531 536 static_area 144 based area level 2 dcl 6-53 set ref 128 458 510 substr builtin function dcl 617 set ref 134 226* 226 230* 236 236 249 262 262 272 272 314 314 332 348 348 363 363 389 423 subsystem_control_info_ptr 102 based pointer level 2 dcl 6-53 ref 127 457 509 switch_name 002206 automatic char(32) packed unaligned dcl 618 set ref 477* 481* table_info based structure level 1 dcl 7-5 table_info_ptr_parm parameter pointer dcl 52 ref 56 67 77 87 94 105 table_ip 002404 automatic pointer dcl 7-57 set ref 67* 87* 105* 210 219 222 226 226 226 230 230 230 236 262 272 309 314 348 496 496 the_column_delimiter 002216 automatic char(1) packed unaligned dcl 621 set ref 130* 336 the_row_delimiter 002217 automatic char(1) packed unaligned dcl 622 set ref 129* 249 256 338 unique_chars_ 000024 constant entry external dcl 624 ref 477 work_area based area dcl 626 ref 498 work_area_ptr 002220 automatic pointer dcl 627 set ref 128* 458* 498 510* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 4-15 Direct_output internal static fixed bin(17,0) initial dcl 4-15 Direct_update internal static fixed bin(17,0) initial dcl 4-15 Envptr_supplied_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-54 Interseg_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-54 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 4-15 Quick_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-54 Sequential_input internal static fixed bin(17,0) initial dcl 4-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 4-15 Sequential_output internal static fixed bin(17,0) initial dcl 4-15 Sequential_update internal static fixed bin(17,0) initial dcl 4-15 Stream_input_output internal static fixed bin(17,0) initial dcl 4-15 Stream_output internal static fixed bin(17,0) initial dcl 4-15 arg_descriptor_ptr automatic pointer dcl 1-34 arg_list_with_envptr based structure level 1 dcl 2-42 command_name_arglist based structure level 1 dcl 2-25 create_cm_ptr automatic pointer dcl 5-18 create_columns_map based structure level 1 dcl 5-14 create_columns_map_init_number_of_columns automatic fixed bin(17,0) dcl 5-17 extended_arg_descriptor based structure level 1 dcl 1-21 fixed builtin function dcl 603 fixed_arg_descriptor based structure level 1 dcl 1-13 init_number_of_descriptors automatic fixed bin(17,0) dcl 7-54 iox_$attach_loud 000000 constant entry external dcl 3-8 iox_$attach_ptr 000000 constant entry external dcl 3-8 iox_$close_file 000000 constant entry external dcl 3-8 iox_$control 000000 constant entry external dcl 3-8 iox_$delete_record 000000 constant entry external dcl 3-8 iox_$detach 000000 constant entry external dcl 3-8 iox_$err_no_operation 000000 constant entry external dcl 3-8 iox_$err_not_attached 000000 constant entry external dcl 3-8 iox_$err_not_closed 000000 constant entry external dcl 3-8 iox_$err_not_open 000000 constant entry external dcl 3-8 iox_$error_output external static pointer dcl 3-41 iox_$find_iocb 000000 constant entry external dcl 3-8 iox_$find_iocb_n 000000 constant entry external dcl 3-8 iox_$get_line 000000 constant entry external dcl 3-8 iox_$look_iocb 000000 constant entry external dcl 3-8 iox_$modes 000000 constant entry external dcl 3-8 iox_$move_attach 000000 constant entry external dcl 3-8 iox_$open_file 000000 constant entry external dcl 3-8 iox_$position 000000 constant entry external dcl 3-8 iox_$propagate 000000 constant entry external dcl 3-8 iox_$put_chars 000000 constant entry external dcl 3-8 iox_$read_key 000000 constant entry external dcl 3-8 iox_$read_length 000000 constant entry external dcl 3-8 iox_$read_record 000000 constant entry external dcl 3-8 iox_$rewrite_record 000000 constant entry external dcl 3-8 iox_$seek_key 000000 constant entry external dcl 3-8 iox_$user_input external static pointer dcl 3-41 iox_$user_io external static pointer dcl 3-41 iox_$user_output external static pointer dcl 3-41 iox_$write_record 000000 constant entry external dcl 3-8 iox_modes internal static char(24) initial array dcl 4-6 rel builtin function dcl 610 row_ptrs based structure level 1 dcl 7-32 row_ptrs_p automatic pointer dcl 7-41 row_segs_info based structure level 1 dcl 7-25 row_segs_ip automatic pointer dcl 7-39 rsi_init_max_number_of_seg_ptrs automatic fixed bin(17,0) dcl 7-55 short_iox_modes internal static char(4) initial array dcl 4-12 store_ap automatic pointer dcl 7-56 store_args based structure level 1 dcl 7-44 sys_info$max_seg_size external static fixed bin(35,0) dcl 619 ti_init_column_count automatic fixed bin(17,0) dcl 7-58 NAMES DECLARED BY EXPLICIT CONTEXT. current_char_is_a_quote 002334 constant entry internal dcl 383 ref 334 current_char_is_the_column_delimiter 002372 constant entry internal dcl 404 ref 336 current_char_is_the_row_delimiter 002444 constant entry internal dcl 435 ref 338 fill_the_buffer 000603 constant entry internal dcl 113 ref 71 get_column 001636 constant entry internal dcl 293 ref 218 get_row 000444 constant entry external dcl 56 get_the_row 000760 constant entry internal dcl 173 ref 72 linus_parse_file 000430 constant entry external dcl 43 start 000517 constant entry external dcl 77 start_parsing_file 002464 constant entry internal dcl 453 ref 90 stop 000552 constant entry external dcl 94 stop_parsing_file 003221 constant entry internal dcl 505 ref 109 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3672 3734 3464 3702 Length 4304 3464 42 333 205 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_parse_file 1914 external procedure is an external procedure. fill_the_buffer internal procedure shares stack frame of external procedure linus_parse_file. get_the_row internal procedure shares stack frame of external procedure linus_parse_file. get_column internal procedure shares stack frame of external procedure linus_parse_file. current_char_is_a_quote internal procedure shares stack frame of external procedure linus_parse_file. current_char_is_the_column_delimiter internal procedure shares stack frame of external procedure linus_parse_file. current_char_is_the_row_delimiter internal procedure shares stack frame of external procedure linus_parse_file. start_parsing_file internal procedure shares stack frame of external procedure linus_parse_file. stop_parsing_file internal procedure shares stack frame of external procedure linus_parse_file. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_parse_file 000100 attach_description linus_parse_file 000200 cleanup_signalled linus_parse_file 000201 column_buffer linus_parse_file 002202 file_info_ptr linus_parse_file 002204 sci_ptr linus_parse_file 002206 switch_name linus_parse_file 002216 the_column_delimiter linus_parse_file 002217 the_row_delimiter linus_parse_file 002220 work_area_ptr linus_parse_file 002222 extended_arg_type linus_parse_file 002224 data_file_info linus_parse_file 002400 lcb_ptr linus_parse_file 002402 row_value_p linus_parse_file 002404 table_ip linus_parse_file 002416 ftb_code fill_the_buffer 002417 ftb_current_file_buffer_length fill_the_buffer 002420 ftb_file_buffer_ptr fill_the_buffer 002422 ftb_number_of_chars_available_in_buffer fill_the_buffer 002423 ftb_number_of_chars_read fill_the_buffer 002432 gtr_column_delimiter_was_found get_the_row 002433 gtr_current_column_number get_the_row 002434 gtr_current_row_number get_the_row 002435 gtr_end_of_buffer get_the_row 002436 gtr_in_a_quoted_string get_the_row 002437 gtr_last_column_processed get_the_row 002440 gtr_maximum_column_length get_the_row 002441 gtr_number_of_columns get_the_row 002442 gtr_processing_quotes get_the_row 002443 gtr_processing_whitespace get_the_row 002444 gtr_row_delimiter_was_found get_the_row 002445 gtr_still_processing_the_row get_the_row 002456 gc_current_char get_column 002457 gc_current_position get_column 002460 gc_maximum_reasonable_column_length get_column 002461 gc_starting_position get_column 002462 gc_still_getting_the_column get_column 002500 ccitcd_still_processing_whitespace current_char_is_the_column_delimiter 002516 spf_code start_parsing_file 002526 spf_code stop_parsing_file THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out return_mac shorten_stack ext_entry op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. expand_pathname_ iox_$attach_name iox_$close iox_$destroy_iocb iox_$detach_iocb iox_$get_chars iox_$open ssu_$abort_line ssu_$print_message unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$end_of_info error_table_$short_record linus_error_$bad_file_process LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 1 36 000423 43 000427 54 000436 56 000437 65 000455 66 000461 67 000464 68 000467 69 000472 71 000473 72 000501 75 000511 77 000512 85 000530 86 000534 87 000537 88 000542 90 000543 92 000544 94 000545 103 000563 104 000567 105 000572 106 000575 107 000600 109 000601 111 000602 113 000603 125 000605 127 000606 128 000611 129 000614 130 000621 132 000624 134 000626 135 000646 136 000647 137 000650 139 000651 141 000654 143 000661 146 000662 147 000664 149 000667 152 000672 154 000677 157 000716 159 000722 162 000731 164 000740 165 000742 166 000743 169 000757 173 000760 192 000762 194 000763 196 000766 197 000771 204 001061 207 001063 208 001065 209 001067 210 001071 211 001074 212 001075 213 001101 214 001105 216 001107 218 001121 219 001123 220 001131 222 001133 226 001177 229 001213 230 001214 233 001223 234 001225 236 001227 247 001352 249 001355 253 001366 254 001370 256 001374 262 001403 271 001507 272 001511 282 001621 285 001622 287 001630 289 001631 291 001635 293 001636 307 001640 308 001643 309 001644 311 001654 312 001655 314 001656 327 001777 328 002002 330 002003 332 002006 334 002015 336 002024 338 002031 340 002035 342 002044 344 002045 346 002047 348 002054 361 002204 362 002205 363 002206 372 002316 374 002317 377 002327 379 002330 381 002333 383 002334 385 002335 387 002337 389 002343 391 002352 392 002353 393 002362 394 002363 395 002364 396 002365 397 002366 398 002367 400 002371 404 002372 408 002373 410 002375 411 002404 414 002405 415 002407 417 002410 419 002412 420 002414 421 002416 423 002422 425 002437 426 002440 427 002441 428 002442 431 002443 435 002444 437 002445 440 002457 441 002460 442 002461 445 002463 453 002464 457 002465 458 002470 460 002473 461 002475 462 002477 463 002501 464 002504 465 002505 466 002506 467 002507 468 002511 470 002512 472 002542 477 002577 478 002631 481 002715 483 002750 487 003047 489 003052 490 003072 494 003171 496 003174 498 003205 499 003217 501 003220 505 003221 509 003222 510 003225 512 003230 514 003235 515 003243 518 003246 520 003251 521 003263 524 003322 528 003324 530 003327 531 003341 534 003377 535 003401 536 003413 541 003447 ----------------------------------------------------------- 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