COMPILATION LISTING OF SEGMENT ta_upgrade_version_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 02/16/84 1257.1 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ****************************************************** 10* * * 11* * * 12* * Copyright (c) 1972 by Massachusetts Institute of * 13* * Technology and Honeywell Information Systems, Inc. * 14* * * 15* * * 16* ****************************************************** */ 17 18 ta_upgrade_version_: proc (table_dir, table_name, table_ptr, w_permit, code); 19 20 /* This subroutine is used to upgrade a tape_archive table to a new version. 21* It is called only from ta_table_mgr_. 22* 23* Written 04/11/79 by C. D. Tavares. 24* Modified 09/03/80 by CDT for version 3. 25* Last modified 83-03-16 by S. G. Harris (UNCA) for version 4. 26* Modified 6/83 by S. Krupp for conversion to mtape_. 27**/ 28 29 /* Parameter */ 30 31 dcl (table_dir char (*), 32 table_name char (*), 33 w_permit bit (1) aligned, 34 code fixed bin (35)) parameter; 35 36 /* Automatic */ 37 38 dcl i fixed bin; 39 dcl reason char (256) varying; 40 41 /* Based */ 42 43 44 /* Entries */ 45 46 dcl (ioa_, ioa_$rsnnl, com_err_) ext entry options (variable), 47 hcs_$set_bc_seg ext entry (pointer, fixed bin (24), fixed bin (35)), 48 hcs_$set_safety_sw_seg ext entry (pointer, bit (1) aligned, fixed bin (35)); 49 50 /* Static */ 51 52 dcl (error_table_$unimplemented_version, 53 error_table_$insufficient_access) ext fixed bin (35) static; 54 55 /* Builtin */ 56 57 dcl (addr, dim, size, unspec) builtin; 58 1 1 /* ---------- BEGIN include file tape_archive_table_dcl.incl.pl1 ---------- */ 1 2 1 3 /* Version 2 lengthened volume names from 6 to 32 characters */ 1 4 /* Version 3 introduced density field, workspace strategy for updates, */ 1 5 /* and the mount lock, which is less of a lock than a retain indicator. */ 1 6 /* Version 4 expanded density field to an array for independent volume set */ 1 7 /* densities and added uid fields for table deletion checking. */ 1 8 /* Modified 09/21/80 by C. D. Tavares for version 3 */ 1 9 /* Modified 12/9/81 by CDT to add highest_mount_type field */ 1 10 /* Last modified 83-03-16 by S. G. Harris (UNCA) for version 4. */ 1 11 /* Modified 09/16/83 by S. Krupp to add the TAPE_ARCHIVE_IO_MODULE 1 12* declaration for conversion to the mtape_ I/O module. */ 1 13 1 14 dcl 1 tape_archive_table aligned based (table_ptr), /* online segment for tape_archive command */ 1 15 2 nonvolatile_part aligned, /* temp table moving doesn't touch these */ 1 16 3 version_number fixed bin, /* of table */ 1 17 3 magic_constant char (8), /* "ta table" */ 1 18 3 compaction_warning_threshold float bin, /* when to suggest compaction to user */ 1 19 3 auto_compaction_threshold float bin, /* when to compact when user doesn't take hint */ 1 20 3 table_is_consistent bit (1) unaligned, /* update in progress indicator */ 1 21 3 lock bit (36), /* allows shared tape archives */ 1 22 3 lock_reason fixed bin, /* reason seg already locked, for failure msg */ 1 23 3 locker_id char (32), /* userid of locking process, for failure msg */ 1 24 3 io_module_name char (32), /* tape_ansi_ or tape_ibm_ */ 1 25 3 recovery_info_offset bit (18) aligned, /* holds address of workspace for table updates */ 1 26 3 perm_table_uid bit (36), /* used to prevent table deletion */ 1 27 3 future_expansion (6) bit (36), /* ... */ 1 28 2 volatile_part aligned, /* these can get altered due to temp table moves */ 1 29 3 n_components fixed bin, /* number valid (undeleted) components in archive */ 1 30 3 n_component_slots fixed bin, /* number of used component slots in table */ 1 31 3 n_queued_requests fixed bin, /* number requests to be performed next mount */ 1 32 3 n_request_slots fixed bin, /* number of used request slots in table */ 1 33 3 next_mount_type fixed bin, /* read only, write, or compact */ 1 34 3 date_time_tape_modified bit (36), /* last time tape written on */ 1 35 3 date_time_last_compacted bit (36), /* last time tape compacted */ 1 36 3 total_records fixed bin (35), /* data out on tape, in Multics records */ 1 37 3 dead_records fixed bin (35), /* records wasted (deletions, replacements) */ 1 38 3 incomplete_write_op_last bit (1), /* ON if determined that user or sys crashed while writing tape */ 1 39 3 last_tape_file_no fixed bin, /* number of last file existing on volume set */ 1 40 3 last_table_no fixed bin, /* number of copies of online table on this volume set */ 1 41 3 mount_lock bit (36) aligned, /* set to lock_id while volume set mounted */ 1 42 3 highest_mount_type fixed bin, /* max of next_mount_type since retained */ 1 43 3 future_expansion (6) bit (36), /* ... */ 1 44 3 tape_info aligned, 1 45 4 density (2) fixed bin (17) unal, /* post version 3 volume set densities */ 1 46 4 active_set fixed bin, /* which of the two is most current */ 1 47 4 n_volumes_in_set (2) fixed bin, /* how many reels comprise volume set */ 1 48 4 volume_set (2) aligned, 1 49 5 volume_id (8) char (168), /* physical reel and slot info */ 1 50 3 component_table (0 refer (tape_archive_table.n_component_slots)) aligned like component, 1 51 3 request_queue (0 refer (tape_archive_table.n_request_slots)) aligned like request; 1 52 1 53 dcl 1 component aligned based (component_ptr), /* format of one component entry */ 1 54 2 entry_status_descriptor like entry_status_descriptor aligned, 1 55 2 previous_instance_backchain fixed bin, /* index of file it replaced, if any */ 1 56 2 associated_request_index fixed bin, /* if extract pending, index of request with dirpath */ 1 57 2 date_time_deleted bit (36) aligned, /* if logically deleted, when. */ 1 58 2 future_expansion (5) bit (36) aligned; /* ... */ 1 59 1 60 dcl 1 request aligned based (request_ptr), /* format of a queued request */ 1 61 2 entry_status_descriptor like entry_status_descriptor aligned, 1 62 2 directory_name char (168) unaligned, /* in Multics file system */ 1 63 2 requested_ops unaligned, 1 64 3 append bit (1) unaligned, /* add to tape */ 1 65 3 replace bit (1) unaligned, /* replace to tape */ 1 66 3 extract bit (1) unaligned, /* extract from tape */ 1 67 3 delete bit (1) unaligned, /* delete from tape or file system */ 1 68 3 force bit (1) unaligned, /* forcibly do any of the above */ 1 69 3 single_name bit (1) unaligned, /* append/extract with only given name */ 1 70 3 future_expansion bit (30) unaligned, 1 71 2 existing_reference fixed bin, /* index of component block, if exists (e.g. read) */ 1 72 2 future_expansion (4) bit (36) aligned; 1 73 1 74 dcl 1 entry_status_descriptor aligned based, 1 75 2 valid bit (1) unaligned, /* an undeleted component or request if on */ 1 76 2 no_final_newline bit (1) unaligned, /* ON if last char in file was not newline */ 1 77 2 safety_switch bit (1) unaligned, /* reflects safety switch of file while online */ 1 78 2 pad bit (33) unaligned, 1 79 2 file_info aligned, /* main tape file for this entry */ 1 80 3 tape_file_name char (17), 1 81 3 entry_name char (32) unaligned, /* for Multics file system */ 1 82 3 date_time_archived bit (36), /* when it was put on tape */ 1 83 3 recording_mode char (8) aligned, /* "ascii", "binary", "ebcdic", etc. */ 1 84 3 date_time_branch_modified bit (36), /* last modified while in file system */ 1 85 3 date_time_dumped bit (36), /* by backup facility */ 1 86 3 bitcount_author char (32), /* last person who modified it while online */ 1 87 3 file_length fixed bin (35), /* in Multics pages */ 1 88 3 attribute_file_no fixed bin, /* file number of attribute file on tape */ 1 89 3 n_tape_records fixed bin (35), /* number of logical records on tape for this file */ 1 90 2 uid bit (36) aligned, /* used to prevent table deletion */ 1 91 2 future_expansion bit (36) aligned; 1 92 1 93 dcl 1 workspace based (workspace_ptr) aligned, /* to prevent update inconsistencies */ 1 94 2 workspace_id char (8), /* "wrkspace" */ 1 95 2 component_no fixed bin, 1 96 2 request_no fixed bin, 1 97 2 n_queued_requests fixed bin, 1 98 2 dead_records fixed bin, 1 99 2 total_records fixed bin, 1 100 2 n_components fixed bin, 1 101 2 n_request_slots fixed bin, 1 102 2 next_mount_type fixed bin, 1 103 2 future_expansion (70) fixed bin (35), 1 104 2 tape_info_copy aligned like tape_archive_table.tape_info, 1 105 2 future_expansion2 (16) fixed bin (35), 1 106 2 component_copy like component aligned, 1 107 2 future_expansion3 (16) fixed bin (35), 1 108 2 request_copy like request aligned; 1 109 1 110 dcl 1 based_tape_info based (tape_info_ptr) like tape_archive_table.tape_info aligned; 1 111 1 112 dcl (table_ptr, component_ptr, request_ptr, workspace_ptr, tape_info_ptr) pointer; 1 113 1 114 dcl ((None initial (0), /* next scheduled processing flags */ 1 115 Delete initial (1), 1 116 Read initial (2), 1 117 Write initial (3), 1 118 Compact initial (4), 1 119 1 120 Examine initial (1), /* current lock reason flags */ 1 121 Modify initial (2), 1 122 Process_tape initial (3), 1 123 1 124 Deletion initial (1), /* pending_operation flags */ 1 125 Extraction initial (2), 1 126 Replacement initial (3), 1 127 Cancellation initial (4), 1 128 Deletion_cancellation initial (5), 1 129 Volume_alteration initial (6), 1 130 Table_creation initial (7), 1 131 Table_copy initial (8), 1 132 1 133 Default_density initial (1600), 1 134 1 135 tape_archive_version_4 initial (4)) fixed bin, 1 136 1 137 TAPE_ARCHIVE_IO_MODULE char(6) init("mtape_"), 1 138 1 139 Lock_reasons (0:3) char (24) initial 1 140 ("no discernable reason", "table examination", "table modification", "tape processing"), 1 141 1 142 Magic_constant char (8) initial ("ta table"), 1 143 Magic_workspace_constant char (8) initial ("wrkspace")) static options (constant); 1 144 1 145 /* ---------------- END include file tape_archive_table_dcl.incl.pl1 ---------------- */ 59 60 61 62 /* First check to see that the version number makes any sense at all. */ 63 64 if tape_archive_table.version_number > 4 | tape_archive_table.version_number < 1 65 then do; 66 code = error_table_$unimplemented_version; 67 call ioa_$rsnnl ("Version ^d is not a defined version.", reason, 0, tape_archive_table.version_number); 68 goto err; 69 end; 70 71 /* Now we know that the operation we are about to perform makes sense. 72* Now see if we can perform it. */ 73 74 if ^w_permit 75 then do; 76 code = error_table_$insufficient_access; 77 call ioa_$rsnnl ("^/^-^a>^a is an obsolete version and must be upgraded before it may be used.", 78 reason, 0, table_dir, table_name); 79 goto err; 80 end; 81 82 83 /* Now we perform the upgrade, step by step */ 84 85 86 /* Upgrade for version 2 */ 87 /* Version 2 extended the volume_id field from 6 chars. */ 88 89 if tape_archive_table.version_number < 2 then begin; 90 91 dcl 1 tape_archive_table_v1 aligned based (table_ptr), 92 2 nonvolatile_part aligned, 93 3 version_number fixed bin, 94 3 magic_constant char (8), 95 3 compaction_warning_threshold float bin, 96 3 auto_compaction_threshold float bin, 97 3 table_is_consistent bit (1) unaligned, 98 3 lock bit (36), 99 3 lock_reason fixed bin, 100 3 locker_id char (32), 101 3 io_module_name char (32), 102 3 future_expansion (8) bit (36), 103 2 volatile_part aligned, 104 3 n_components fixed bin, 105 3 n_component_slots fixed bin, 106 3 n_queued_requests fixed bin, 107 3 n_request_slots fixed bin, 108 3 next_mount_type fixed bin, 109 3 date_time_tape_modified bit (36), 110 3 date_time_last_compacted bit (36), 111 3 total_records fixed bin (35), 112 3 dead_records fixed bin (35), 113 3 incomplete_write_op_last bit (1), 114 3 last_tape_file_no fixed bin, 115 3 last_table_no fixed bin, 116 3 future_expansion (9) bit (36), 117 3 tape_info aligned, 118 4 active_set fixed bin, 119 4 n_volumes_in_set (2) fixed bin, 120 4 volume_set (2) aligned, 121 5 volume_id (8) char (6), 122 3 component_table (0 refer (tape_archive_table.n_component_slots)) aligned like component, 123 3 request_queue (0 refer (tape_archive_table.n_request_slots)) aligned like request; 124 125 dcl (i, j) fixed bin; 126 127 do i = tape_archive_table.n_request_slots to 1 by -1; 128 unspec (tape_archive_table.request_queue (i)) = unspec (tape_archive_table_v1.request_queue (i)); 129 end; 130 131 do i = tape_archive_table.n_component_slots to 1 by -1; 132 unspec (tape_archive_table.component_table (i)) = unspec (tape_archive_table_v1.component_table (i)); 133 end; 134 135 do i = 2 to 1 by -1; 136 do j = dim (tape_archive_table_v1.volume_id, 2) to 1 by -1; 137 tape_archive_table.volume_id (i, j) = tape_archive_table_v1.volume_id (i, j); 138 end; 139 end; 140 141 tape_archive_table.version_number = 2; 142 143 call hcs_$set_bc_seg (table_ptr, size (tape_archive_table) * 36, 0); 144 145 end; 146 147 148 /* Upgrade for version 3. */ 149 /* Version 3 introduced density field */ 150 151 if tape_archive_table.version_number < 3 then do; 152 tape_archive_table.tape_info.density (*) = Default_density; 153 tape_archive_table.version_number = 3; 154 end; 155 156 157 /* Upgrade for version 4. */ 158 159 if tape_archive_table.version_number < 4 160 then do; 161 tape_archive_table.tape_info.density(1) = tape_archive_table.tape_info.density(2); 162 tape_archive_table.version_number = 4; 163 call hcs_$set_safety_sw_seg(table_ptr, "1"b, code); 164 end; 165 166 167 /* No more versions to upgrade, return. */ 168 169 call ioa_ ("tape_archive: ^a>^a upgraded to version ^d.", 170 table_dir, table_name, tape_archive_table.version_number); 171 172 code = 0; 173 return; 174 175 err: call com_err_ (code, "tape_archive", reason); 176 return; 177 end ta_upgrade_version_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/16/84 1249.5 ta_upgrade_version_.pl1 >spec>on>mtape>ta_upgrade_version_.pl1 59 1 02/16/84 1230.3 tape_archive_table_dcl.incl.pl1 >spec>on>mtape>tape_archive_table_dcl.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. Default_density constant fixed bin(17,0) initial dcl 1-114 ref 152 code parameter fixed bin(35,0) dcl 31 set ref 18 66* 76* 163* 172* 175* com_err_ 000014 constant entry external dcl 46 ref 175 component based structure level 1 dcl 1-53 component_table 130 based structure array level 3 in structure "tape_archive_table_v1" dcl 91 in begin block on line 89 ref 132 component_table 1330 based structure array level 3 in structure "tape_archive_table" dcl 1-14 in procedure "ta_upgrade_version_" set ref 132* density 64 based fixed bin(17,0) array level 4 packed unaligned dcl 1-14 set ref 152* 161* 161 dim builtin function dcl 57 ref 136 entry_status_descriptor based structure level 1 dcl 1-74 error_table_$insufficient_access 000024 external static fixed bin(35,0) dcl 52 ref 76 error_table_$unimplemented_version 000022 external static fixed bin(35,0) dcl 52 ref 66 hcs_$set_bc_seg 000016 constant entry external dcl 46 ref 143 hcs_$set_safety_sw_seg 000020 constant entry external dcl 46 ref 163 i 000202 automatic fixed bin(17,0) dcl 125 set ref 127* 128 128* 131* 132 132* 135* 137 137* ioa_ 000010 constant entry external dcl 46 ref 169 ioa_$rsnnl 000012 constant entry external dcl 46 ref 67 77 j 000203 automatic fixed bin(17,0) dcl 125 set ref 136* 137 137* n_component_slots 41 based fixed bin(17,0) level 3 dcl 1-14 ref 128 128 131 n_request_slots 43 based fixed bin(17,0) level 3 dcl 1-14 ref 127 nonvolatile_part based structure level 2 dcl 1-14 reason 000100 automatic varying char(256) dcl 39 set ref 67* 77* 175* request based structure level 1 dcl 1-60 request_queue based structure array level 3 in structure "tape_archive_table" dcl 1-14 in procedure "ta_upgrade_version_" set ref 128* request_queue based structure array level 3 in structure "tape_archive_table_v1" dcl 91 in begin block on line 89 ref 128 size builtin function dcl 57 ref 143 table_dir parameter char unaligned dcl 31 set ref 18 77* 169* table_name parameter char unaligned dcl 31 set ref 18 77* 169* table_ptr parameter pointer dcl 1-112 set ref 18 64 64 67 89 127 128 128 131 132 132 136 137 137 141 143* 143 151 152 153 159 161 161 162 163* 169 tape_archive_table based structure level 1 dcl 1-14 set ref 143 tape_archive_table_v1 based structure level 1 dcl 91 tape_info 65 based structure level 3 in structure "tape_archive_table_v1" dcl 91 in begin block on line 89 tape_info 64 based structure level 3 in structure "tape_archive_table" dcl 1-14 in procedure "ta_upgrade_version_" unspec builtin function dcl 57 set ref 128* 128 132* 132 version_number based fixed bin(17,0) level 3 dcl 1-14 set ref 64 64 67* 89 141* 151 153* 159 162* 169* volatile_part 40 based structure level 2 in structure "tape_archive_table_v1" dcl 91 in begin block on line 89 volatile_part 40 based structure level 2 in structure "tape_archive_table" dcl 1-14 in procedure "ta_upgrade_version_" volume_id 70 based char(168) array level 5 in structure "tape_archive_table" dcl 1-14 in procedure "ta_upgrade_version_" set ref 137* volume_id 70 based char(6) array level 5 in structure "tape_archive_table_v1" dcl 91 in begin block on line 89 ref 136 137 volume_set 70 based structure array level 4 in structure "tape_archive_table" dcl 1-14 in procedure "ta_upgrade_version_" volume_set 70 based structure array level 4 in structure "tape_archive_table_v1" dcl 91 in begin block on line 89 w_permit parameter bit(1) dcl 31 ref 18 74 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Cancellation internal static fixed bin(17,0) initial dcl 1-114 Compact internal static fixed bin(17,0) initial dcl 1-114 Delete internal static fixed bin(17,0) initial dcl 1-114 Deletion internal static fixed bin(17,0) initial dcl 1-114 Deletion_cancellation internal static fixed bin(17,0) initial dcl 1-114 Examine internal static fixed bin(17,0) initial dcl 1-114 Extraction internal static fixed bin(17,0) initial dcl 1-114 Lock_reasons internal static char(24) initial array unaligned dcl 1-114 Magic_constant internal static char(8) initial unaligned dcl 1-114 Magic_workspace_constant internal static char(8) initial unaligned dcl 1-114 Modify internal static fixed bin(17,0) initial dcl 1-114 None internal static fixed bin(17,0) initial dcl 1-114 Process_tape internal static fixed bin(17,0) initial dcl 1-114 Read internal static fixed bin(17,0) initial dcl 1-114 Replacement internal static fixed bin(17,0) initial dcl 1-114 TAPE_ARCHIVE_IO_MODULE internal static char(6) initial unaligned dcl 1-114 Table_copy internal static fixed bin(17,0) initial dcl 1-114 Table_creation internal static fixed bin(17,0) initial dcl 1-114 Volume_alteration internal static fixed bin(17,0) initial dcl 1-114 Write internal static fixed bin(17,0) initial dcl 1-114 addr builtin function dcl 57 based_tape_info based structure level 1 dcl 1-110 component_ptr automatic pointer dcl 1-112 i automatic fixed bin(17,0) dcl 38 request_ptr automatic pointer dcl 1-112 tape_archive_version_4 internal static fixed bin(17,0) initial dcl 1-114 tape_info_ptr automatic pointer dcl 1-112 workspace based structure level 1 dcl 1-93 workspace_ptr automatic pointer dcl 1-112 NAMES DECLARED BY EXPLICIT CONTEXT. err 000516 constant label dcl 175 ref 68 79 ta_upgrade_version_ 000067 constant entry external dcl 18 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 660 706 545 670 Length 1104 545 26 162 113 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ta_upgrade_version_ 216 external procedure is an external procedure. begin block on line 89 begin block shares stack frame of external procedure ta_upgrade_version_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ta_upgrade_version_ 000100 reason ta_upgrade_version_ 000202 i begin block on line 89 000203 j begin block on line 89 THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ hcs_$set_bc_seg hcs_$set_safety_sw_seg ioa_ ioa_$rsnnl THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$insufficient_access error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 18 000062 64 000107 66 000116 67 000120 68 000150 74 000151 76 000154 77 000156 79 000212 89 000213 127 000215 128 000225 129 000250 131 000253 132 000263 133 000274 135 000277 136 000305 137 000313 138 000340 139 000343 141 000346 143 000352 151 000375 152 000402 153 000426 159 000431 161 000435 162 000441 163 000443 169 000460 172 000513 173 000515 175 000516 176 000544 ----------------------------------------------------------- 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