THIS FILE IS DAMAGED COMPILATION LISTING OF SEGMENT copy_file Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 02/06/84 1104.5 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 cpf: copy_file: procedure; 12 13 /* 14* This command copies records from a structured input file to 15* a structured output file. If the input file is keyed, the 16* keys may or may not be copied. The input file may be copied 17* either partially, or in its entirety. 18* 19* 0) Created 01/13/76 by Ross E. Klinger 20* 1) Modified 10/4/83 by Charles Spitzer: let it copy keyed files with invalid descriptors 21**/ 22 23 24 /* DECLARATIONS */ 25 26 27 /* control argument variables */ 28 dcl arg char (argL) based (argP), /* argument string */ 29 argL fixed bin, /* length of an argument string */ 30 argN fixed bin, /* number of arguments */ 31 argP ptr, /* ptr to an argument string */ 32 argX fixed bin, /* index of argument currently being processed */ 33 max_argL fixed bin, /* maximum length of an argument descriptor */ 34 numeric_arg fixed bin (35); /* holds numeric value of an argument descriptor */ 35 36 37 /* control argument validation variables */ 38 dcl input_type fixed bin, /* -1 - undefined; 0 - I/O switch; 1 - attach description */ 39 output_type fixed bin, /* -1 - undefined; 0 - I/O switch; 1 - attach description */ 40 copy_keys bit (1) aligned, /* "0"b - no; "1"b - yes */ 41 begin_cntl fixed bin, /* -1 - undefined; 0 - from_idx; 1 - start */ 42 end_cntl fixed bin, /* -1 - undefined; 0 - to; 1 - stop; 2 - count; 3 - all */ 43 msg_cntl fixed bin; /* -1 - undefined; 0 - brief; 1 - long */ 44 45 46 /* control argument validation types */ 47 dcl undefined fixed bin internal static options (constant) init (-1), 48 isw fixed bin internal static options (constant) init (0), 49 (osw, from_idx, to_idx, brief) fixed bin defined (isw), 50 ids fixed bin internal static options (constant) init (1), 51 (ods, start, stop, long) fixed bin defined (ids), 52 count fixed bin internal static options (constant) init (2), 53 all fixed bin internal static options (constant) init (3), 54 yes bit (1) aligned internal static options (constant) init ("1"b), 55 no bit (1) aligned internal static options (constant) init ("0"b); 56 57 58 /* control argument descriptor values */ 59 dcl input_switchname char (32), /* input switch name */ 60 input_description char (256), /* input attach description */ 61 output_switchname char (32), /* output switch name */ 62 output_description char (256), /* output attach description */ 63 from_idx_position fixed bin (35), /* record position at which to begin copy */ 64 start_key char (256) varying, /* record key at which to begin copying */ 65 to_idx_position fixed bin (35), /* record position after which to stop copy */ 66 stop_key char (256) varying, /* record key after which to stop copy */ 67 count_value fixed bin (35); /* record count after which to stop copy */ 68 69 70 /* I/O system variables */ 71 dcl input_iocbP ptr, /* pointer to input I/O control block */ 72 input_open_mode fixed bin, /* 4 - sequential_input :: 8 - keyed_sequential_input */ 73 output_iocbP ptr, /* pointer to output I/O control block */ 74 output_open_mode fixed bin; /* 5 - sequential_output :: 9 - keyed_sequential_output */ 75 76 77 /* opening mode constants */ 78 dcl sequential_input fixed bin internal static options (constant) init (4), 79 sequential_output fixed bin internal static options (constant) init (5), 80 keyed_sequential_input fixed bin internal static options (constant) init (8), 81 keyed_sequential_output fixed bin internal static options (constant) init (9); 82 83 84 /* I/O cleanup switches */ 85 dcl close_input bit (1) aligned, /* close input switch before exiting */ 86 detach_input bit (1) aligned, /* detach input switch before exiting */ 87 close_output bit (1) aligned, /* close output switch before exiting */ 88 detach_output bit (1) aligned; /* detach output switch before exiting */ 89 90 91 /* record copying variables */ 92 dcl recordL fixed bin (21), /* record length */ 93 recordP (1) ptr, /* pointer to record buffer segment */ 94 record_count fixed bin (35), /* number of records copied */ 95 record_key char (256) varying, /* key of record being copied */ 96 max_recordL fixed bin (21) init (sys_info$max_seg_size * 4), /* in characters */ 97 sys_info$max_seg_size fixed bin (35) external static, 98 can_rewrite bit (1) aligned, /* "0"b - no :: "1"b - yes */ 99 read_keys bit (1) aligned; /* "0"b - no :: "1"b - yes */ 100 101 102 /* Error message text variables */ 103 dcl name char (9) internal static options (constant) init ("copy_file"), 104 error_text char (256) varying, /* holds message for output via com_err_ */ 105 end_argument (0:3) char (6) internal static options (constant) 106 init ("-to", "-stop", "-count", "-all"), 107 input_open_string char (24) varying, 108 output_open_string char (24) varying; 109 110 111 /* Miscellaneous storage */ 112 dcl code fixed bin (35), /* error code */ 113 unique_string char (15); /* holds value returned by unique_string_ */ 114 115 116 /* Conditions and builtin functions */ 117 dcl cleanup condition, 118 (addr, before, binary, null, substr, unspec, verify) builtin; 119 120 121 /* Error codes */ 122 dcl (error_table_$action_not_performed, 123 error_table_$bad_arg, 124 error_table_$badopt, 125 error_table_$end_of_info, 126 error_table_$fatal_error, 127 error_table_$inconsistent, 128 error_table_$key_order, 129 error_table_$no_key, 130 error_table_$no_record, 131 error_table_$noarg, 132 error_table_$nodescr, 133 error_table_$not_attached, 134 error_table_$not_closed, 135 error_table_$wrong_no_of_args) fixed bin (35) external static; 136 137 138 /* External procedures */ 139 dcl com_err_ ext entry options (variable), 140 cu_$arg_count ext entry (fixed bin), 141 cu_$arg_ptr ext entry (fixed bin, ptr, fixed bin, fixed bin (35)), 142 get_system_free_area_ entry() returns(ptr), 143 get_temp_segments_ ext entry (char (*), (*) ptr, fixed bin (35)), 144 ioa_ ext entry options (variable), 145 iox_$attach_ioname ext entry (char (*), ptr, char (*), fixed bin (35)), 146 iox_$close ext entry (ptr, fixed bin (35)), 147 iox_$control entry (ptr, char(*), ptr, fixed bin(35)), 148 iox_$detach_iocb ext entry (ptr, fixed bin (35)), 149 iox_$destroy_iocb entry (ptr, fixed bin(35)), 150 iox_$look_iocb ext entry (char (*), ptr, fixed bin (35)), 151 iox_$open ext entry (ptr, fixed bin, bit (1) aligned, fixed bin (35)), 152 iox_$position ext entry (ptr, fixed bin, fixed bin, fixed bin (35)), 153 iox_$read_key ext entry (ptr, char (256) varying, fixed bin (21), fixed bin (35)), 154 iox_$read_record ext entry (ptr, ptr, fixed bin (21), fixed bin (21), fixed bin (35)), 155 iox_$rewrite_record ext entry (ptr, ptr, fixed bin (21), fixed bin (35)), 156 iox_$seek_key ext entry (ptr, char (256) varying, fixed bin (21), fixed bin (35)), 157 iox_$write_record ext entry (ptr, ptr, fixed bin (21), fixed bin (35)), 158 release_temp_segments_ ext entry (char (*), (*) ptr, fixed bin (35)), 159 unique_chars_ ext entry (bit (*)) returns (char (15)); 160 161 162 /* iocb attach description variable */ 163 dcl 1 input_attach_desc based (input_iocbP -> iocb.attach_descrip_ptr), 164 2 len fixed bin (17), 165 2 string char (0 refer (input_attach_desc.len)); 166 dcl io_module char (32); 167 168 /* iocb open description variables */ 169 dcl 1 input_open_desc based (input_iocbP -> iocb.open_descrip_ptr), 170 2 len fixed bin (17), 171 2 string char (0 refer (input_open_desc.len)); 172 dcl 1 output_open_desc based (output_iocbP -> iocb.open_descrip_ptr), 173 2 len fixed bin (17), 174 2 string char (0 refer (output_open_desc.len)); 175 dcl open_mode char (32) varying; /* hold open mode from an open description */ 176 177 /* Key copying variables */ 178 dcl areap ptr, /* pointer to my_area to allocate in */ 179 my_area area based (areap), /* where structures are allocated in */ 180 only_keys bit (1) aligned, /* we only copy keys and no records */ 181 1 info like indx_info; /* place to put file_status info */ 182 1 1 /* ak_info -- include file for info structures used by the following vfile_ 1 2* control orders: "add_key", "delete_key", "get_key", and "reassign_key". 1 3* Created by M. Asherman 3/23/76 1 4* Modified 5/13/77 to add separate gk_info structure */ 1 5 1 6 dcl 1 ak_info based (ak_info_ptr), 1 7 2 header like ak_header, 1 8 2 key char (ak_key_len refer (ak_info.header.key_len)); 1 9 1 10 dcl 1 ak_header based (ak_info_ptr), 1 11 2 flags aligned, 1 12 3 input_key bit (1) unal, /* set if key is input arg */ 1 13 3 input_desc bit (1) unal, /* set if descriptor is an input arg */ 1 14 3 mbz bit (34) unal, /* not used for the present */ 1 15 2 descrip fixed (35), /* record designator */ 1 16 2 key_len fixed; 1 17 1 18 dcl ak_info_ptr ptr; 1 19 dcl ak_key_len fixed; 1 20 1 21 1 22 dcl 1 rk_info based (rk_info_ptr), 1 23 2 header like rk_header, 1 24 2 key char (rk_key_len refer (rk_info.header.key_len)); 1 25 1 26 dcl 1 rk_header based (rk_info_ptr), 1 27 2 flags aligned, 1 28 3 input_key bit (1) unal, /* same as above */ 1 29 3 input_old_desc bit (1) unal, /* set if specified entry has initial descrip 1 30* given by old_descrip */ 1 31 3 input_new_desc bit (1) unal, /* set if new val for descrip is input in this struc */ 1 32 3 mbz bit (33) unal, 1 33 2 old_descrip fixed (35), /* used if first flag is set */ 1 34 2 new_descrip T<jAVabb03 TÆ4NÒ rpv root_01 root_02 root_03 root_04 tr01 bull01 bull02 bull03 bull04 bull05 pub_01 pub_02 pub_03 pub_04 pub_05 pub_06 pub_07 pub_08  Tºþ;2AVrpub_04 pub_05 T½ÁAVÃrpv root_01 root_02 root_03 root_04 tr01 bull01 bull02 bull03 bull04 bull05 pub_01 pub_02 pub_03 pub_04 pub_05 pub_06 pub_07 pub_08 abb01 abb02 abb03 abb04 abb05 abb06 abb07 abb08 T»˜ü“zAVÜpub_08 Unable to attach input file using attach description^/""^a"".", input_description); 446 return; 447 end; 448 449 call iox_$open (input_iocbP, input_open_mode, "0"b, code); 450 451 if code = 0 then close_input = yes; /* we opened, so we close */ 452 453 else do; 454 call com_err_ (code, name, "^/Unable to open input file for ^a.", input_open_string); 455 go to CLEANUP_AND_RETURN; 456 end; 457 458 end; 459 460 461 462 /* INPUT FILE POSITIONING */ 463 464 if begin_cntl = from_idx then do; /* must be able to position to a specific record */ 465 466 if ^close_input then do; /* input switch was open, position unknown */ 467 call iox_$position (input_iocbP, -1, 0, code); /* move to 1st record */ 468 if code ^= 0 then do; 469 BAD_INPUT_POSITION: call com_err_ (error_table_$no_record, name, 470 "^/Unable to position input file to record ^d.", from_idx_position); 471 go to CLEANUP_AND_RETURN; 472 end; 473 end; 474 475 call iox_$position (input_iocbP, 0, from_idx_position - 1, code); /* skips from_idx_position - 1 records */ 476 if code ^= 0 then go to BAD_INPUT_POSITION; 477 478 end; 479 480 else if begin_cntl = start then do; /* must seek to a specific key */ 481 call iox_$seek_key (input_iocbP, start_key, 0, code); 482 if code ^= 0 then do; 483 call com_err_ (code, name, "^/Starting key ""^a"" not found in input file.", start_key); 484 go to CLEANUP_AND_RETURN; 485 end; 486 487 end; 488 489 490 /* OUTPUT FILE PROCESSING - I/O SWITCH ALREADY ATTACHED */ 491 492 if output_type = osw then do; 493 call iox_$look_iocb (output_switchname, output_iocbP, code); 494 if code ^= 0 then do; 495 BAD_OUTPUT_ATTACH: call com_err_ (code, name, """^a""", output_switchname); 496 go to CLEANUP_AND_RETURN; 497 end; 498 499 call iox_$open (output_iocbP, output_open_mode, "0"b, code); 500 if code = 0 then close_output = yes; /* we opened, so we close */ 501 else if code = error_table_$not_attached then go to BAD_OUTPUT_ATTACH; 502 else if code = error_table_$not_closed then do; /* NOT AN ERROR - switch can be open */ 503 open_mode = before (output_open_desc.string, " "); 504 if copy_keys then do; 505 if open_mode = "keyed_sequential_output" then; 506 else if open_mode = "direct_output" then; 507 else if open_mode = "keyed_sequential_update" then can_rewrite = yes; 508 else if open_mode = "direct_update" then can_rewrite = yes; 509 else do; 510 error_text = "keyed sequential or direct"; 511 BAD_OUTPUT_OPEN: call com_err_ (error_table_$action_not_performed, name, 512 "Output switch ""^a"" must be closed^/and re-opened for ^a access.", 513 output_switchname, error_text); 514 go to CLEANUP_AND_RETURN; 515 end; 516 end; 517 else do; 518 if open_mode = "sequential_output" then; 519 else if open_mode = "sequential_input_output" then; 520 else do; 521 error_text = "sequential"; 522 go to BAD_OUTPUT_OPEN; 523 end; 524 end; 525 end; 526 else do; 527 call com_err_ (code, name, "^/Unable to open output switch ""^a"" for ^a.", 528 output_switchname, output_open_string); 529 go to CLEANUP_AND_RETURN; 530 end; 531 end; 532 533 534 /* OUTPUT FILE PROCESSING - I/O SWITCH NOT ALREADY ATTACHED */ 535 536 else do; 537 if unique_string = "" then unique_string = unique_chars_ ("0"b); 538 539 call iox_$attach_ioname (unique_string || ".copy_file.output", output_iocbP, output_description, code); 540 if code = 0 then detach_output = yes; /* we attached, we detach */ 541 else do; 542 call com_err_ (code, name, 543 "^/Unable to attach output file using attach description^/""^a"".", output_description); 544 go to CLEANUP_AND_RETURN; 545 end; 546 547 call iox_$open (output_iocbP, output_open_mode, "0"b, code); 548 if code = 0 then close_output = yes; /* we opened, so we close */ 549 else do; 550 call com_err_ (code, name, "^/Unable to open output file for ^a.", output_open_string); 551 go to CLEANUP_AND_RETURN; 552 end; 553 end; 554 555 556 557 /* BUFFER SEGMENT PROCESSING */ 558 559 call get_temp_segments_ (name, recordP, code); 560 if recordP (1) = null then do; 561 call com_err_ (code, name, "^/Unable to create temporary buffer segment in process directory."); 562 go to CLEANUP_AND_RETURN; 563 end; 564 565 566 if end_cntl = to_idx then count_value = to_idx_position - from_idx_position + 1; 567 record_count = 0; 568 569 if copy_keys then do; 570 io_module = before (input_attach_desc.string, " "); 571 if io_module ^= "vfile_ " then do; 572 call com_err_ (0, name, "Attempt to copy keyed file that is not open through the vfile_ I/O module."); 573 goto CLEANUP_AND_RETURN; 574 end; 575 info.info_version = vfs_version_1; 576 call iox_$control (input_iocbP, "file_status", addr (info), code); 577 if code ^= 0 then do; 578 call com_err_ (code, name, "Attempting to get the input file status."); 579 goto CLEANUP_AND_RETURN; 580 end; 581 if info.type ^= 4 then do; 582 call com_err_ (0, name, "The input ^[switch ^a^;attach description ^s^a^] must point to a keyed file.", 583 input_type=isw, input_switchname, input_description); 584 goto CLEANUP_AND_RETURN; 585 end; 586 if info.records = 0 then do; /* copy only keys */ 587 code = 0; 588 only_keys = yes; 589 590 KEY_CNTL (3): 591 KEY_LOOP: 592 call get_key_descriptor; 593 if code = error_table_$no_key | code = error_table_$no_record | code = error_table_$end_of_info 594 then goto END_OF_FILE; 595 else if code = 0 then do; 596 call add_key; 597 if code ^= 0 then goto ADD_KEY_ERROR; 598 end; 599 else goto GET_KEY_ERROR; 600 601 record_count = record_count + 1; 602 call iox_$position (input_iocbP, 0, 1, code); 603 if code = error_table_$end_of_info 604 then goto END_OF_FILE; 605 else if code ^= 0 then goto IO_ERROR; 606 607 goto KEY_CNTL (end_cntl); 608 609 KEY_CNTL (1): 610 if record_key = stop_key then goto DONE; 611 else goto KEY_LOOP; 612 613 KEY_CNTL (2): 614 KEY_CNTL (0): 615 if record_count = count_value then goto DONE; 616 else goto KEY_LOOP; 617 end; 618 end; 619 620 621 /* Copy the records and associated keys from the input file */ 622 623 RECORD_CNTL (3): 624 RECORD_LOOP: 625 if read_keys then do; 626 call iox_$read_key (input_iocbP, record_key, 0, code); 627 if code = 0 then; 628 else if code = error_table_$end_of_info then go to END_OF_FILE; 629 else go to READ_ERROR; 630 end; 631 632 call iox_$read_record (input_iocbP, recordP (1), max_recordL, recordL, code); 633 if code = 0 then; 634 else if code = error_table_$end_of_info then go to END_OF_FILE; 635 else go to READ_ERROR; 636 637 if copy_keys then do; 638 call iox_$seek_key (output_iocbP, record_key, 0, code); 639 if code = error_table_$no_record then; /* THIS IS CORRECT - means key not in file */ 640 else if code = error_table_$key_order then go to OUTPUT_KEY_ERROR; 641 else if code = 0 then do; /* duplicate key */ 642 if can_rewrite then do; 643 call iox_$rewrite_record (output_iocbP, recordP (1), recordL, code); 644 if code = 0 then go to COUNT_IT; 645 else go to WRITE_ERROR; 646 end; 647 else go to DUPLICATE_KEY_ERROR; 648 end; 649 else go to WRITE_ERROR; 650 end; 651 652 call iox_$write_record (output_iocbP, recordP (1), recordL, code); 653 if code ^= 0 then go to WRITE_ERROR; 654 655 COUNT_IT: record_count = record_count + 1; 656 go to RECORD_CNTL (end_cntl); 657 658 RECORD_CNTL (1): if record_key = stop_key then go to DONE; 659 else go to RECORD_LOOP; 660 661 RECORD_CNTL (0): 662 RECORD_CNTL (2): if record_count = count_value then go to DONE; 663 else go to RECORD_LOOP; 664 665 /* NOTE -- RECORD_CNTL (3) is at beginning of RECORD_LOOP */ 666 667 668 /* END CASE PROCESSING */ 669 670 END_OF_FILE: if end_cntl = all then go to DONE; /* this is to be expected */ 671 672 else do; /* otherwise, copying was prematurely terminated */ 673 call com_err_ (error_table_$end_of_info, name, "While reading input file. 674 ""^a"" condition not satisfied. ^d records copied.", 675 end_argument (end_cntl), record_count); 676 go to CLEANUP_AND_RETURN; 677 end; 678 679 680 681 DONE: if msg_cntl = long then call ioa_ ("^d ^[keys^;records^] copied.", record_count, only_keys); 682 683 684 CLEANUP_AND_RETURN: call cleaner; 685 686 687 RETURN_TO_CL: return; 688 689 690 /* ERROR PROCESSING */ 691 692 INCONSISTENT_ARGUMENT_ERROR: code = error_table_$inconsistent; 693 go to ARGUMENT_ERROR; 694 695 696 NO_ARGUMENT_ERROR: code = error_table_$noarg; 697 698 699 ARGUMENT_ERROR: call com_err_ (code, name, "^/^a", error_text); 700 return; 701 702 703 ADD_KEY_ERROR: 704 call com_err_ (code, name, "Adding key ""^a"" to output file.", record_key); 705 goto CLEANUP_AND_RETURN; 706 707 708 GET_KEY_ERROR: 709 call com_err_ (code, name, "Error getting next key after ""^a"" from input file.", record_key); 710 goto CLEANUP_AND_RETURN; 711 712 713 READ_ERROR: error_text = "reading input"; 714 go to IO_ERROR; 715 716 717 WRITE_ERROR: error_text = "writing output"; 718 719 720 IO_ERROR: call com_err_ (code, name, 721 "^/Error while ^a file. ^d records successfully copied.", error_text, record_count); 722 go to CLEANUP_AND_RETURN; 723 724 725 OUTPUT_KEY_ERROR: call com_err_ (error_table_$action_not_performed, name, 726 "^/Unable to perform requested copy. 727 Key of last output file record is greater than or 728 equal to key of first input file record: ""^a"".", record_key); 729 go to CLEANUP_AND_RETURN; 730 731 732 DUPLICATE_KEY_ERROR: call com_err_ (error_table_$fatal_error, name, 733 "^/Unable to copy input file record with key ""^a"". 734 A record with this key already exists in the output file. 735 The output switch must be closed and re-opened in an update mode 736 to copy this record. ^d records successfully copied.", 737 record_count); 738 go to CLEANUP_AND_RETURN; 739 740 741 /* INTERNAL PROCEDURES */ 742 /* Note: none of the following three internal procedures should be modified so that they would no longer run 743* in the stack frame of the main procedure. This restriction is imposed by the use of cu_$arg_ptr, which 744* would then operate on the argument list of the internal procedure instead of the command's argument list. */ 745 746 get_string_arg_256: procedure; /* obtains next argument, a string ^> 256 chars */ 747 max_argL = 256; 748 go to GET_ARGUMENT; 749 750 get_string_arg_32: entry; /* obtains next argument, a string ^> 32 chars */ 751 max_argL = 32; 752 753 GET_ARGUMENT: call get_arg; /* get next argument, if any */ 754 if argL > max_argL then do; 755 call com_err_ (error_table_$bad_arg, name, 756 "^/Argument descriptor length exceeds ^d characters.^/^a", max_argL, arg); 757 go to RETURN_TO_CL; 758 end; 759 return; 760 761 end get_string_arg_256; 762 763 764 get_numeric_arg: procedure; /* obtains next argument, a number */ 765 766 call get_arg; /* get the argument, if any */ 767 if argL > 10 then do; 768 BAD_NUMERIC_ARG: call com_err_ (error_table_$bad_arg, name, 769 "^/Argument descriptor must be positive integer < 10000000000.^/""^a""", arg); 770 go to RETURN_TO_CL; 771 end; 772 if verify (arg, "0123456789") ^= 0 then go to BAD_NUMERIC_ARG; 773 numeric_arg = binary (arg); 774 if numeric_arg <= 0 then go to BAD_NUMERIC_ARG; 775 return; 776 777 end get_numeric_arg; 778 779 780 get_arg: procedure; /* obtains next argument, if any */ 781 782 argX = argX + 1; /* increment to next argument */ 783 if argX > argN then do; 784 call com_err_ (error_table_$nodescr, name, "^a", arg); 785 go to RETURN_TO_CL; 786 end; 787 call cu_$arg_ptr (argX, argP, argL, code); 788 if code ^= 0 then do; 789 call com_err_ (code, name); 790 go to RETURN_TO_CL; 791 end; 792 return; 793 794 end get_arg; 795 796 797 get_key_descriptor: 798 proc; 799 800 if gk_info_ptr = null then do; 801 areap = get_system_free_area_ (); 802 gk_key_len = 256; 803 allocate gk_info in (my_area) set (gk_info_ptr); 804 unspec (gk_info_ptr -> gk_info) = "0"b; 805 gk_info_ptr -> gk_info.current = "1"b; 806 gk_info_ptr -> gk_info.version = gk_info_version_0; 807 end; 808 809 call iox_$control (input_iocbP, "get_key", gk_info_ptr, code); 810 if code = error_table_$no_key then code = error_table_$end_of_info; 811 return; 812 813 end get_key_descriptor; 814 815 816 817 add_key: 818 proc; 819 820 if ak_info_ptr = null then do; 821 areap = get_system_free_area_ (); 822 ak_key_len = 256; 823 allocate ak_info in (my_area) set (ak_info_ptr); 824 unspec (ak_info_ptr -> ak_info) = "0"b; 825 ak_info_ptr -> ak_info.flags.input_desc = "1"b; 826 ak_info_ptr -> ak_info.flags.input_key = "1"b; 827 end; 828 ak_info_ptr -> ak_info.descrip = gk_info_ptr -> gk_info.descrip; 829 ak_info_ptr -> ak_info.key_len = gk_info_ptr -> gk_info.key_len; 830 record_key, ak_info_ptr -> ak_info.key = substr (gk_info_ptr -> gk_info.key, 1, gk_info_ptr -> gk_info.key_len); 831 832 call iox_$control (output_iocbP, "add_key", ak_info_ptr, code); 833 return; 834 end add_key; 835 836 837 /* CLEANUP PROCEDURE */ 838 839 cleaner: procedure; 840 841 if recordP (1) ^= null then do; 842 call release_temp_segments_ (name, recordP, 0); 843 recordP (1) = null; 844 end; 845 846 if close_input then do; 847 call iox_$close (input_iocbP, code); 848 if code = 0 then close_input = no; 849 else call com_err_ (code, name, "^/Unable to close input file."); 850 end; 851 852 if detach_input then do; 853 call iox_$detach_iocb (input_iocbP, code); 854 if code = 0 then call iox_$destroy_iocb (input_iocbP, code); 855 if code = 0 then detach_input = no; 856 else call com_err_ (code, name, "^/Unable to detach input file."); 857 end; 858 859 if close_output then do; 860 call iox_$close (output_iocbP, code); 861 if code = 0 then close_output = no; 862 else call com_err_ (code, name, "^/Unable to close output file."); 863 end; 864 865 if detach_output then do; 866 call iox_$detach_iocb (output_iocbP, code); 867 if code = 0 then call iox_$destroy_iocb (output_iocbP, code); 868 if code = 0 then detach_output = no; 869 else call com_err_ (code, name, "^/Unable to detach output file."); 870 end; 871 872 if ak_info_ptr ^= null then do; 873 free ak_info_ptr -> ak_info in (my_area); 874 ak_info_ptr = null; 875 end; 876 877 if gk_info_ptr ^= null then do; 878 free gk_info_ptr -> gk_info in (my_area); 879 gk_info_ptr = null; 880 end; 881 882 end cleaner; 883 884 885 886 end copy_file; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/06/84 1101.5 copy_file.pl1 >spec>on>6564>copy_file.pl1 183 1 07/19/79 1547.0 ak_info.incl.pl1 >ldd>include>ak_info.incl.pl1 184 2 07/19/79 1547.0 vfs_info.incl.pl1 >ldd>include>vfs_info.incl.pl1 185 3 05/20/83 1846.4 iocb.incl.pl1 >ldd>include>iocb.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. addr builtin function dcl 117 ref 576 576 ak_header based structure level 1 unaligned dcl 1-10 ak_info based structure level 1 unaligned dcl 1-6 set ref 823 824* 873 ak_info_ptr 001066 automatic pointer dcl 1-18 set ref 379* 820 823* 824 825 826 828 829 830 832* 872 873 874* ak_key_len 001070 automatic fixed bin(17,0) dcl 1-19 set ref 822* 823 823 all constant fixed bin(17,0) initial dcl 47 ref 295 333 670 areap 001042 automatic pointer dcl 178 set ref 801* 803 821* 823 873 878 arg based char unaligned dcl 28 set ref 210 210 217 220 220 224 227 227 234 237 237 241 244 252 252 262 262 266 269 279 279 283 286 286 293 293 298 298 306 306 312* 755* 768* 772 773 784* argL 000100 automatic fixed bin(17,0) dcl 28 set ref 204* 210 210 217 220 220 224 227 227 234 237 237 241 244 252 252 262 262 266 269 279 279 283 286 286 293 293 298 298 306 306 312 312 T‘÷…7HAV!root_04 nt entry external dcl 139 ref 204 787 current 0(05) based bit(1) level 5 packed unaligned dcl 1-41 set ref 805* descrip 1 based fixed bin(35,0) level 3 in structure "ak_info" dcl 1-6 in procedure "copy_file" set ref 828* descrip 1 based fixed bin(35,0) level 3 in structure "gk_info" dcl 1-41 in procedure "copy_file" set ref 828 detach_input 000552 automatic bit(1) dcl 85 set ref 378* 441* 852 855* detach_output 000554 automatic bit(1) dcl 85 set ref 378* 540* 865 868* end_argument 000010 constant char(6) initial array unaligned dcl 103 set ref 673* end_cntl 000113 automatic fixed bin(17,0) dcl 38 set ref 190* 270 274* 280 281* 287 288* 294 295* 333 333* 334 347 355 566 607 656 670 673 error_table_$action_not_performed 000012 external static fixed bin(35,0) dcl 122 set ref 406* 511* 725* error_table_$bad_arg 000014 external static fixed bin(35,0) dcl 122 set ref 755* 768* error_table_$badopt 000016 external static fixed bin(35,0) dcl 122 set ref 312* error_table_$end_of_info 000020 external static fixed bin(35,0) dcl 122 set ref 593 603 628 634 673* 810 error_table_$fatal_error 000022 external static fixed bin(35,0) dcl 122 set ref 732* error_table_$inconsistent 000024 external static fixed bin(35,0) dcl 122 ref 692 error_table_$key_order 000026 external static fixed bin(35,0) dcl 122 ref 640 error_table_$no_key 000030 external static fixed bin(35,0) dcl 122 ref 593 810 error_table_$no_record 000032 external static fixed bin(35,0) dcl 122 set ref 469* 593 639 error_table_$noarg 000034 external static fixed bin(35,0) dcl 122 ref 696 error_table_$nodescr 000036 external static fixed bin(35,0) dcl 122 set ref 784* error_table_$not_attached 000040 external static fixed bin(35,0) dcl 122 ref 396 501 error_table_$not_closed 000042 external static fixed bin(35,0) dcl 122 ref 398 502 error_table_$wrong_no_of_args 000044 external static fixed bin(35,0) dcl 122 set ref 198* error_text 000665 automatic varying char(256) dcl 103 set ref 212* 229* 246* 254* 271* 300* 321* 326* 336* 341* 349* 405* 406* 418* 510* 511* 521* 699* 713* 717* 720* flags based structure level 3 in structure "gk_info" dcl 1-41 in procedure "copy_file" flags based structure level 3 in structure "ak_info" dcl 1-6 in procedure "copy_file" from_idx defined fixed bin(17,0) dcl 47 ref 257 335 464 from_idx_position 000335 automatic fixed bin(35,0) dcl 59 set ref 259* 340 469* 475 566 get_system_free_area_ 000054 constant entry external dcl 139 ref 801 821 get_temp_segments_ 000056 constant entry external dcl 139 ref 559 gk_header based structure level 1 unT ‡&blrpv root_01 root_02 root_03 root_04 tr01 bull01 bull02 bull03 bull04 bull05 pub_01 pub_02 pub_03 pub_04 pub_05 pub_06 pub_07 pub_08 abb01 abb02 abb03 abb04 abb05 abb06 abb07 abb08 constant entry external dcl 139 ref 386 493 iox_$open 000076 constant entry external dcl 139 ref 392 449 499 547 iox_$position 000100 constant entry external dcl 139 ref 467 475 602 iox_$read_key 000102 constant entry external dcl 139 ref 626 iox_$read_record 000104 constant entry external dcl 139 ref 632 iox_$rewrite_record 000106 constant entry external dcl 139 ref 643 iox_$seek_key 000110 constant entry external dcl 139 ref 481 638 iox_$write_record 000112 constant entry external dcl 139 ref 652 isw constant fixed bin(17,0) initial dcl 47 ref 215 232 232 257 257 274 274 303 303 334 334 335 335 385 464 464 492 492 566 566 582 key 3 based char level 2 in structure "gk_info" packed unaligned dcl 1-41 in procedure "copy_file" set ref 830 key 3 based char level 2 in structure "ak_info" packed unaligned dcl 1-6 in procedure "copy_file" set ref 830* key_len 2 based fixed bin(17,0) level 3 in structure "gk_info" dcl 1-41 in procedure "copy_file" set ref 803* 804 829 830 830 878 key_len 2 based fixed bin(17,0) level 3 in structure "ak_info" dcl 1-6 in procedure "copy_file" set ref 823* 824 829* 830 873 keyed_sequential_input constant fixed bin(17,0) initial dcl 78 ref 356 keyed_sequential_output constant fixed bin(17,0) initial dcl 78 ref 367 len based fixed bin(17,0) level 2 in structure "output_open_desc" dcl 172 in procedure "copy_file" ref 503 len based fixed bin(17,0) level 2 in structure "input_attach_desc" dcl 163 in procedure "copy_file" ref 570 len based fixed bin(17,0) level 2 in structure "input_open_desc" dcl 169 in procedure "copy_file" ref 400 long defined fixed bin(17,0) dcl 47 ref 308 331 681 max_argL 000105 automatic fixed bin(17,0) dcl 28 set ref 747* 751* 754 755* max_recordL 000662 automatic fixed bin(21,0) initial dcl 92 set ref 92* 632* msg_cntl 000114 automatic fixed bin(17,0) dcl 38 set ref 190* 299 303* 307 308* 331 331* 681 my_area based area(1024) dcl 178 ref 803 823 873 878 name 000016 constant char(9) initial unaligned dcl 103 set ref 198* 206* 312* 388* 406* 426* 444* 454* 469* 483* 495* 511* 527* 542* 550* 559* 561* 572* 578* 582* 673* 699* 703* 708* 720* 725* 732* 755* 768* 784* 789* 842* 849* 856* 862* 869* no constant bit(1) initial dcl 47 ref 191 363 378 848 855 861 868 null builtin function dcl 117 ref 379 560 800 820 841 843 872 874 877 879 numeric_arg 000106 automatic fixed bin(35,0) dcl 28 set ref 259 276 290 773* 774 ods defined fixed bin(17,0) dcl 47 ref 239 only_keys 001044 automatic bit(1) dcl 178 set ref 588* 681* open_descrip_ptr 20 based pointer level 2 dcl 3-6 ref 400 503 open_mode 001030 automatic varying char(32) dcl 175 set ref 400* 402 403 413 414 415 416 503* 505 506 507 508 518 519 osw defined fixed bin(17,0) dcl 47 ref 232 492 output_description 000235 automatic char(256) unaligned dcl 59 set ref 241* 539* 542* output_iocbP 000546 automatic pointer dcl 71 set ref 493* 499* 503 539* 547* 638* 643* 652* 832* 860* 866* 867* output_open_desc based structure level 1 unaligned dcl 172 output_open_mode 000550 automatic fixed bin(17,0) dcl 71 set ref 367* 371* 499* 547* output_open_string 000775 automatic varying char(24) dcl 103 set ref 368* 372* 527* 550* output_switchname 000225 automatic char(32) unaligned dcl 59 set ref 234* 493* 495* 511* 527* output_type 000110 automatic fixed bin(17,0) dcl 38 set ref 190* 228 232* 238 239* 325 492 position_specification 0(05) based structure level 4 packed unaligned dcl 1-41 read_keys 000664 automatic bit(1) dcl 92 set ref 358* 363* 401 623 recordL 000555 automatic fixed bin(21,0) dcl 92 set ref 632* 643* 652* recordP 000556 automatic pointer array dcl 92 set ref 379* 559* 560 632* 643* 652* 841 842* 843* record_count 000560 automatic fixed bin(35,0) dcl 92 set ref 567* 601* 601 613 655* 655 661 673* 681* 720* 732* record_key 000561 automatic varying char(256) dcl 92 set ref 609 626* 638* 658 703* 708* 725* 830* records 2 001045 automatic fixed bin(34,0) level 2 dcl 178 set ref 586 release_temp_segments_ 000114 constant entry external dcl 139 ref 842 rk_header based structure level 1 unaligned dcl 1-26 sequential_input constant fixed bin(17,0) initial dcl 78 ref 361 sequential_output constant fixed bin(17,0) initial dcl 78 ref 371 start defined fixed bin(17,0) dcl 47 ref 264 347 355 480 start_key 000336 automatic varying char(256) dcl 59 set ref 266* 348 481* 483* stop defined fixed bin(17,0) dcl 47 ref 281 347 355 stop_key 000440 automatic varying char(256) dcl 59 set ref 283* 348 609 658 string 1 based char level 2 in structure "input_attach_desc" packed unaligned dcl 163 in procedure "copy_file" ref 570 string 1 based char level 2 in structure "input_open_desc" packed unaligned dcl 169 in procedure "copy_file" ref 400 string 1 based char level 2 in structure "output_open_desc" packed unaligned dcl 172 in procedure "copy_file" ref 503 substr builtin function dcl 117 ref 830 sys_info$max_seg_size 000010 external static fixed bin(35,0) dcl 92 ref 92 to_idx defined fixed bin(17,0) dcl 47 ref 274 334 566 to_idx_position 000437 automatic fixed bin(35,0) dcl 59 set ref 276* 340 566 type 1 001045 automatic fixed bin(17,0) level 2 dcl 178 set ref 581 undefined 006325 constant fixed bin(17,0) initial dcl 47 ref 190 211 221 228 238 253 263 270 280 287 294 299 307 320 325 331 333 unique_chars_ 000116 constant entry external dcl 139 ref 437 537 unique_string 001005 automatic char(15) unaligned dcl 112 set ref 380* 437* 439 537 537* 539 unspec builtin function dcl 117 set ref 804* 824* verify builtin function dcl 117 ref 772 version 0(27) based fixed bin(8,0) level 4 packed unaligned dcl 1-41 set ref 806* vfs_version_1 constant fixed bin(17,0) initial dcl 2-67 ref 575 yes constant bit(1) initial dcl 47 ref 249 358 394 441 451 500 507 508 540 548 588 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. blk_info based structure level 1 unaligned dcl 2-21 iox_$iocb_version_sentinel external static char(4) dcl 3-51 rk_info based structure level 1 unaligned dcl 1-22 rk_info_ptr automatic pointer dcl 1-37 rk_key_len automatic fixed bin(17,0) dcl 1-38 seq_info based structure level 1 unaligned dcl 2-11 uns_info based structure level 1 unaligned dcl 2-1 vbl_info based structure level 1 unaligned dcl 2-55 NAMES DECLARED BY EXPLICIT CONTEXT. ADD_KEY_ERROR 004663 constant label dcl 703 ref 597 ARGUMENT_ERROR 004634 constant label dcl 699 ref 693 BAD_INPUT_ATTACH 002436 constant label dcl 388 ref 396 BAD_INPUT_OPEN 002561 constant label dcl 406 ref 419 BAD_INPUT_POSITION 003127 constant label dcl 469 ref 476 BAD_NUMERIC_ARG 005152 constant label dcl 768 ref 772 774 BAD_OUTPUT_ATTACH 003307 constant label dcl 495 ref 501 BAD_OUTPUT_OPEN 003452 constant label dcl 511 ref 522 CLEANUP_AND_RETURN 004620 constant label dcl 684 ref 455 471 484 496 514 529 544 551 562 573 579 584 676 705 710 722 729 738 COUNT_IT 004511 constant label dcl 655 ref 644 DONE 004571 constant label dcl 681 ref 609 613 658 661 670 DUPLICATE_KEY_ERROR 005043 constant label dcl 732 ref 642 END_OF_FILE 004531 constant label dcl 670 ref 593 603 628 634 GET_ARGUMENT 005101 constant label dcl 753 ref 748 GET_KEY_ERROR 004714 constant label dcl 708 ref 595 INCONSISTENT_ARGUMENT_ERROR 004625 constant label dcl 692 ref 213 230 247 255 272 301 342 350 IO_ERROR 004757 constant label dcl 720 set ref 605 714 KEY_CNTL 000000 constant label array(0:3) dcl 590 ref 607 KEY_LOOP 004256 constant label dcl 590 ref 611 616 MULTIPLE_BEGIN 001702 constant label dcl 254 ref 263 MULTIPLE_END 001755 constant label dcl 271 ref 280 287 294 MULTIPLE_INPUT 001527 constant label dcl 212 ref 221 MULTIPLE_MSG 002073 constant label dcl 300 ref 307 MULTIPLE_OUTPUT 001605 constant label dcl 229 ref 238 NO_ARGUMENT_ERROR 004631 constant label dcl 696 ref 322 327 337 OUTPUT_KEY_ERROR 005013 constant label dcl 725 set ref 640 READ_ERROR 004744 constant label dcl 713 ref 629 635 RECORD_CNTL 000004 constant label array(0:3) dcl 623 ref 656 RECORD_LOOP 004343 constant label dcl 623 ref 659 663 RETURN_TO_CL 004624 constant label dcl 687 ref 757 770 785 790 WRITE_ERROR 004752 constant label dcl 717 set ref 641 645 653 add_key 005433 constant entry internal dcl 817 ref 596 cleaner 005556 constant entry internal dcl 839 ref 381 684 copy_file 001363 constant entry external dcl 11 cpf 001373 constant entry external dcl 11 get_arg 005235 constant entry internal dcl 780 ref 753 766 get_key_descriptor 005333 constant entry internal dcl 797 ref 590 get_numeric_arg 005145 constant entry internal dcl 764 ref 258 275 289 get_string_arg_256 005072 constant entry internal dcl 746 ref 223 240 265 282 get_string_arg_32 005076 constant entry internal dcl 750 ref 216 233 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6750 7070 6327 6760 Length 7426 6327 120 322 420 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME copy_file 1106 external procedure is an external procedure. on unit on line 381 64 on unit get_string_arg_256 internal procedure shares stack frame of external procedure copy_file. get_numeric_arg internal procedure shares stack frame of external procedure copy_file. get_arg internal procedure shares stack frame of external procedure copy_file. get_key_descriptor internal procedure shares stack frame of external procedure copy_file. add_key internal procedure shares stack frame of external procedure copy_file. cleaner 94 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME copy_file 000100 argL copy_file 000101 argN copy_file 000102 argP copy_file 000104 argX copy_file 000105 max_argL copy_file 000106 numeric_arg copy_file 000107 input_type copy_file 000110 output_type copy_file 000111 copy_keys copy_file 000112 begin_cntl copy_file 000113 end_cntl copy_file 000114 msg_cntl copy_file 000115 input_switchname copy_file 000125 input_description copy_file 000225 output_switchname copy_file 000235 output_description copy_file 000335 from_idx_position copy_file 000336 start_key copy_file 000437 to_idx_position copy_file 000440 stop_key copy_file 000541 count_value copy_file 000542 input_iocbP copy_file 000544 input_open_mode copy_file 000546 output_iocbP copy_file 000550 output_open_mode copy_file 000551 close_input copy_file 000552 detach_input copy_file 000553 close_output copy_file 000554 detach_output copy_file 000555 recordL copy_file 000556 recordP copy_file 000560 record_count copy_file 000561 record_key copy_file 000662 max_recordL copy_file 000663 can_rewrite copy_file 000664 read_keys copy_file 000665 error_text copy_file 000766 input_open_string copy_file 000775 output_open_string copy_file 001004 code copy_file 001005 unique_string copy_file 001020 io_module copy_file 001030 open_mode copy_file 001042 areap copy_file 001044 only_keys copy_file 001045 info copy_file 001066 ak_info_ptr copy_file 001070 ak_key_len copy_file 001072 gk_info_ptr copy_file 001074 gk_key_len copy_file THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_cs call_ext_out_desc call_ext_out call_int_this call_int_other return enable shorten_stack ext_entry int_entry any_to_any_tr alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_count cu_$arg_ptr get_system_free_area_ get_temp_segments_ ioa_ iox_$attach_ioname iox_$close iox_$control iox_$destroy_iocb iox_$detach_iocb iox_$look_iocb iox_$open iox_$position iox_$read_key iox_$read_record iox_$rewrite_record iox_$seek_key iox_$write_record release_temp_segments_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$bad_arg error_table_$badopt error_table_$end_of_info error_table_$fatal_error error_table_$inconsistent error_table_$key_order error_table_$no_key error_table_$no_record error_table_$noarg error_table_$nodescr error_table_$not_attached error_table_$not_closed error_table_$wrong_no_of_args sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 92 001354 11 001362 190 001401 191 001407 196 001410 197 001417 198 001422 200 001446 203 001447 204 001455 205 001472 206 001474 207 001511 210 001512 211 001524 212 001527 213 001534 215 001535 216 001537 217 001540 218 001545 220 001546 221 001556 222 001561 223 001563 224 001564 225 001571 227 001572 228 001602 229 001605 230 001612 232 001613 233 001615 234 001616 235 001623 237 001624 238 001634 239 001637 240 001641 241 001642 242 001647 244 001650 245 001654 246 001656 247 001663 249 001664 250 001666 252 001667 253 001677 254 001702 255 001707 257 001710 258 001712 259 001713 260 001715 262 001716 263 001726 264 001731 265 001733 266 001734 267 001745 269 001746 270 001752 271 001755 272 001762 274 001763 275 001765 276 001766 277 001770 279 001771 280 002001 281 002004 282 002006 283 002007 284 002020 286 002021 287 002031 288 002034 289 002036 290 002037 291 002041 293 002042 294 002052 295 002055 296 002057 298 002060 299 002070 300 002073 301 002100 303 002101 304 002103 306 002104 307 002114 308 002117 309 002121 312 002122 313 002154 315 002155 320 002157 321 002162 322 002167 325 002170 326 002173 327 002200 331 002201 333 002206 334 002214 335 002216 336 002221 337 002226 340 002227 341 002232 342 002237 347 002240 348 002253 349 002261 350 002266 355 002267 356 002275 357 002277 358 002304 359 002306 361 002307 362 002311 363 002316 366 002317 367 002321 368 002323 369 002330 371 002331 372 002333 378 002340 379 002346 380 002364 381 002367 385 002411 386 002413 387 002434 388 002436 389 002465 392 002466 394 002505 396 002512 398 002515 400 002517 401 002536 402 002540 403 002546 405 002554 406 002561 409 002615 411 002616 413 002617 414 002625 415 002633 416 002641 418 002647 419 002654 423 002655 426 002656 428 002711 430 002712 437 002713 439 002732 441 002765 444 002772 446 003022 449 003023 451 003042 454 003047 455 003077 464 003100 466 003103 467 003105 468 003125 469 003127 471 003156 475 003157 476 003203 478 003205 480 003206 481 003210 482 003226 483 003230 484 003260 492 003261 493 003264 494 003305 495 003307 496 003336 499 003337 500 003356 501 003363 502 003366 503 003370 504 003407 505 003411 506 003417 507 003425 508 003435 510 003445 511 003452 514 003506 516 003507 518 003510 519 003516 521 003524 522 003531 525 003532 527 003533 529 003566 531 003567 537 003570 539 003613 540 003646 542 003653 544 003703 547 003704 548 003723 550 003730 551 003760 559 003761 560 004002 561 004006 562 004032 566 004033 567 004045 569 004046 570 004050 571 004063 572 004067 573 004114 575 004115 576 004117 577 004152 578 004154 579 004200 581 004201 582 004204 584 004250 586 004251 587 004253 588 004254 590 004256 593 004257 595 004267 596 004271 597 004272 601 004274 602 004300 603 004320 605 004324 607 004326 609 004330 611 004336 613 004337 616 004342 623 004343 626 004345 627 004363 628 004366 629 004371 632 004372 633 004411 634 004414 635 004417 637 004420 638 004422 639 004440 640 004445 641 004447 642 004451 643 004453 644 004467 645 004471 652 004472 653 004507 655 004511 656 004515 658 004517 659 004525 661 004526 663 004530 670 004531 673 004534 676 004570 681 004571 684 004620 687 004624 692 004625 693 004630 696 004631 699 004634 700 004662 703 004663 705 004713 708 004714 710 004743 713 004744 714 004751 717 004752 720 004757 722 005012 725 005013 729 005042 732 005043 738 005071 746 005072 747 005073 748 005075 750 005076 751 005077 753 005101 754 005102 755 005105 757 005143 759 005144 764 005145 766 005146 767 005147 768 005152 770 005205 772 005206 773 005221 774 005233 775 005234 780 005235 782 005236 783 005237 784 005242 785 005274 787 005275 788 005312 789 005314 790 005331 792 005332 797 005333 800 005334 801 005340 802 005347 803 005351 804 005363 805 005372 806 005374 809 005376 810 005424 811 005432 817 005433 820 005434 821 005440 822 005447 823 005451 824 005463 825 005472 826 005474 828 005476 829 005502 830 005504 832 005525 833 005554 839 005555 841 005563 842 005570 843 005611 846 005614 847 005616 848 005627 849 005634 852 005660 853 005663 854 005674 855 005710 856 005715 859 005741 860 005744 861 005755 862 005762 865 006006 866 006011 867 006022 868 006036 869 006043 872 006067 873 006074 874 006103 877 006106 878 006112 879 006121 882 006124 ----------------------------------------------------------- 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