COMPILATION LISTING OF SEGMENT ta_replace_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 02/16/84 1256.2 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_replace_: proc (table_ptr, arg_array, delete, force, table_name, code); 19 20 /* This subroutine handles the replace, append, and update keys of 21* tape_archive. 22* 23* Written 05/10/77 by C. D. Tavares. 24* Modified 09/24/79 by CDT to add star convention. 25* Last modified 09/21/80 by CDT to implement table workspace strategy 26* (indivisible updates). 27**/ 28 29 /* PARAMETERS */ 30 31 dcl arg_array (*) char (168) parameter, 32 delete bit (1) aligned parameter, 33 force bit (1) aligned parameter, 34 table_name char (*) parameter, 35 code fixed bin (35) parameter; 36 37 /* AUTOMATIC */ 38 39 dcl answer char (4) varying, 40 arg char (168), 41 binary_file bit (1), 42 branch_type fixed bin, 43 component_slot fixed bin, 44 current_mode char (8), 45 dirname char (168), 46 dtbm bit (36), 47 ename char (32), 48 file_length fixed bin (35), 49 i fixed bin, 50 operation fixed bin, 51 request_slot fixed bin, 52 safety_sw bit (1), 53 single_name_sw bit (1) aligned, 54 specific_component bit (1) aligned, 55 wdir char (168); 56 57 /* CONDITIONS */ 58 59 dcl cleanup condition; 60 61 62 /* CONSTANTS */ 63 64 dcl (Append initial (1), 65 Replace initial (2), 66 Update initial (3)) fixed bin static options (constant); 67 68 /* INTERNAL STATIC */ 69 70 dcl system_free_ptr pointer static initial (null); 71 72 /* EXTERNAL STATIC */ 73 74 dcl (error_table_$bad_mode, 75 error_table_$badopt, 76 error_table_$namedup, 77 error_table_$noarg) ext fixed bin (35) static; 78 79 dcl sys_info$max_seg_size ext fixed bin (35) static; 80 81 /* ENTRIES */ 82 83 dcl check_star_name_$entry ext entry (char (*), fixed bin (35)), 84 com_err_ ext entry options (variable), 85 command_query_ ext entry options (variable), 86 expand_pathname_ ext entry (char (*), char (*), char (*), fixed bin (35)), 87 get_system_free_area_ ext entry returns (pointer), 88 get_wdir_ ext entry returns (char (168)), 89 hcs_$status_ ext entry (char (*), char (*), fixed bin, pointer, pointer, fixed bin (35)), 90 hcs_$status_minf ext entry (char (*), char (*), fixed bin, fixed bin, fixed bin (24), fixed bin (35)), 91 ioa_ ext entry options (variable); 92 93 dcl ta_filesys_util_$get_file_info ext entry (char (*), char (*), fixed bin, fixed bin (35), bit (1), bit (1), bit (36), fixed bin (35)), 94 ta_filesys_util_$star_list ext entry (char (*), char (*), pointer, fixed bin (35)); 95 96 dcl ta_table_mgr_$find_component ext entry (pointer, char (*), char (*), bit (1) aligned, fixed bin, fixed bin, fixed bin (35)), 97 ta_table_mgr_$lock ext entry (pointer, char (*), fixed bin, fixed bin (35)), 98 ta_table_mgr_$unlock ext entry (pointer, fixed bin (35)), 99 ta_table_mgr_$setup_workspace entry (ptr, fixed bin, fixed bin, ptr), 100 ta_table_mgr_$complete_table_op entry (ptr); 101 102 /* BASED */ 103 104 dcl system_free_area area (sys_info$max_seg_size) based (system_free_ptr); 105 106 /* BUILTINS */ 107 108 dcl (addr, binary, dim, null, substr, unspec) builtin; 109 110 /* INCLUDE FILES */ 1 1 /* BEGIN INCLUDE FILE status_info_branch.incl.pl1 */ 1 2 dcl 1 status_info_branch, /* structure returned for branch */ 1 3 2 type bit(2), /* 0=link, 1=seg, 2=dir */ 1 4 2 nnames bit(16), /* number of names for this entry */ 1 5 2 nrp bit(18), /* ??????? */ 1 6 2 dtm bit(36), /* date and time last modified */ 1 7 2 dtu bit(36), /* date and time last used */ 1 8 2 mode bit(5), /* user's access mode */ 1 9 2 pad bit(13), 1 10 2 records bit(18); /* number of records used */ 1 11 /* END INCLUDE FILE status_info_branch.incl.pl1 */ 111 112 2 1 /* BEGIN INCLUDE FILE query_info.incl.pl1 TAC June 1, 1973 */ 2 2 /* Renamed to query_info.incl.pl1 and cp_escape_control added, 08/10/78 WOS */ 2 3 /* version number changed to 4, 08/10/78 WOS */ 2 4 /* Version 5 adds explanation_(ptr len) 05/08/81 S. Herbst */ 2 5 /* Version 6 adds literal_sw, prompt_after_explanation switch 12/15/82 S. Herbst */ 2 6 2 7 dcl 1 query_info aligned, /* argument structure for command_query_ call */ 2 8 2 version fixed bin, /* version of this structure - must be set, see below */ 2 9 2 switches aligned, /* various bit switch values */ 2 10 3 yes_or_no_sw bit (1) unaligned init ("0"b), /* not a yes-or-no question, by default */ 2 11 3 suppress_name_sw bit (1) unaligned init ("0"b), /* do not suppress command name */ 2 12 3 cp_escape_control bit (2) unaligned init ("00"b), /* obey static default value */ 2 13 /* "01" -> invalid, "10" -> don't allow, "11" -> allow */ 2 14 3 suppress_spacing bit (1) unaligned init ("0"b), /* whether to print extra spacing */ 2 15 3 literal_sw bit (1) unaligned init ("0"b), /* ON => do not strip leading/trailing white space */ 2 16 3 prompt_after_explanation bit (1) unaligned init ("0"b), /* ON => repeat question after explanation */ 2 17 3 padding bit (29) unaligned init (""b), /* pads it out to t word */ 2 18 2 status_code fixed bin (35) init (0), /* query not prompted by any error, by default */ 2 19 2 query_code fixed bin (35) init (0), /* currently has no meaning */ 2 20 2 21 /* Limit of data defined for version 2 */ 2 22 2 23 2 question_iocbp ptr init (null ()), /* IO switch to write question */ 2 24 2 answer_iocbp ptr init (null ()), /* IO switch to read answer */ 2 25 2 repeat_time fixed bin (71) init (0), /* repeat question every N seconds if no answer */ 2 26 /* minimum of 30 seconds required for repeat */ 2 27 /* otherwise, no repeat will occur */ 2 28 /* Limit of data defined for version 4 */ 2 29 2 30 2 explanation_ptr ptr init (null ()), /* explanation of question to be printed if */ 2 31 2 explanation_len fixed bin (21) init (0); /* user answers "?" (disabled if ptr=null or len=0) */ 2 32 2 33 dcl query_info_version_3 fixed bin int static options (constant) init (3); 2 34 dcl query_info_version_4 fixed bin int static options (constant) init (4); 2 35 dcl query_info_version_5 fixed bin int static options (constant) init (5); 2 36 dcl query_info_version_6 fixed bin int static options (constant) init (6); /* the current version number */ 2 37 2 38 /* END INCLUDE FILE query_info.incl.pl1 */ 113 114 3 1 /* ---------- BEGIN include file tape_archive_table_dcl.incl.pl1 ---------- */ 3 2 3 3 /* Version 2 lengthened volume names from 6 to 32 characters */ 3 4 /* Version 3 introduced density field, workspace strategy for updates, */ 3 5 /* and the mount lock, which is less of a lock than a retain indicator. */ 3 6 /* Version 4 expanded density field to an array for independent volume set */ 3 7 /* densities and added uid fields for table deletion checking. */ 3 8 /* Modified 09/21/80 by C. D. Tavares for version 3 */ 3 9 /* Modified 12/9/81 by CDT to add highest_mount_type field */ 3 10 /* Last modified 83-03-16 by S. G. Harris (UNCA) for version 4. */ 3 11 /* Modified 09/16/83 by S. Krupp to add the TAPE_ARCHIVE_IO_MODULE 3 12* declaration for conversion to the mtape_ I/O module. */ 3 13 3 14 dcl 1 tape_archive_table aligned based (table_ptr), /* online segment for tape_archive command */ 3 15 2 nonvolatile_part aligned, /* temp table moving doesn't touch these */ 3 16 3 version_number fixed bin, /* of table */ 3 17 3 magic_constant char (8), /* "ta table" */ 3 18 3 compaction_warning_threshold float bin, /* when to suggest compaction to user */ 3 19 3 auto_compaction_threshold float bin, /* when to compact when user doesn't take hint */ 3 20 3 table_is_consistent bit (1) unaligned, /* update in progress indicator */ 3 21 3 lock bit (36), /* allows shared tape archives */ 3 22 3 lock_reason fixed bin, /* reason seg already locked, for failure msg */ 3 23 3 locker_id char (32), /* userid of locking process, for failure msg */ 3 24 3 io_module_name char (32), /* tape_ansi_ or tape_ibm_ */ 3 25 3 recovery_info_offset bit (18) aligned, /* holds address of workspace for table updates */ 3 26 3 perm_table_uid bit (36), /* used to prevent table deletion */ 3 27 3 future_expansion (6) bit (36), /* ... */ 3 28 2 volatile_part aligned, /* these can get altered due to temp table moves */ 3 29 3 n_components fixed bin, /* number valid (undeleted) components in archive */ 3 30 3 n_component_slots fixed bin, /* number of used component slots in table */ 3 31 3 n_queued_requests fixed bin, /* number requests to be performed next mount */ 3 32 3 n_request_slots fixed bin, /* number of used request slots in table */ 3 33 3 next_mount_type fixed bin, /* read only, write, or compact */ 3 34 3 date_time_tape_modified bit (36), /* last time tape written on */ 3 35 3 date_time_last_compacted bit (36), /* last time tape compacted */ 3 36 3 total_records fixed bin (35), /* data out on tape, in Multics records */ 3 37 3 dead_records fixed bin (35), /* records wasted (deletions, replacements) */ 3 38 3 incomplete_write_op_last bit (1), /* ON if determined that user or sys crashed while writing tape */ 3 39 3 last_tape_file_no fixed bin, /* number of last file existing on volume set */ 3 40 3 last_table_no fixed bin, /* number of copies of online table on this volume set */ 3 41 3 mount_lock bit (36) aligned, /* set to lock_id while volume set mounted */ 3 42 3 highest_mount_type fixed bin, /* max of next_mount_type since retained */ 3 43 3 future_expansion (6) bit (36), /* ... */ 3 44 3 tape_info aligned, 3 45 4 density (2) fixed bin (17) unal, /* post version 3 volume set densities */ 3 46 4 active_set fixed bin, /* which of the two is most current */ 3 47 4 n_volumes_in_set (2) fixed bin, /* how many reels comprise volume set */ 3 48 4 volume_set (2) aligned, 3 49 5 volume_id (8) char (168), /* physical reel and slot info */ 3 50 3 component_table (0 refer (tape_archive_table.n_component_slots)) aligned like component, 3 51 3 request_queue (0 refer (tape_archive_table.n_request_slots)) aligned like request; 3 52 3 53 dcl 1 component aligned based (component_ptr), /* format of one component entry */ 3 54 2 entry_status_descriptor like entry_status_descriptor aligned, 3 55 2 previous_instance_backchain fixed bin, /* index of file it replaced, if any */ 3 56 2 associated_request_index fixed bin, /* if extract pending, index of request with dirpath */ 3 57 2 date_time_deleted bit (36) aligned, /* if logically deleted, when. */ 3 58 2 future_expansion (5) bit (36) aligned; /* ... */ 3 59 3 60 dcl 1 request aligned based (request_ptr), /* format of a queued request */ 3 61 2 entry_status_descriptor like entry_status_descriptor aligned, 3 62 2 directory_name char (168) unaligned, /* in Multics file system */ 3 63 2 requested_ops unaligned, 3 64 3 append bit (1) unaligned, /* add to tape */ 3 65 3 replace bit (1) unaligned, /* replace to tape */ 3 66 3 extract bit (1) unaligned, /* extract from tape */ 3 67 3 delete bit (1) unaligned, /* delete from tape or file system */ 3 68 3 force bit (1) unaligned, /* forcibly do any of the above */ 3 69 3 single_name bit (1) unaligned, /* append/extract with only given name */ 3 70 3 future_expansion bit (30) unaligned, 3 71 2 existing_reference fixed bin, /* index of component block, if exists (e.g. read) */ 3 72 2 future_expansion (4) bit (36) aligned; 3 73 3 74 dcl 1 entry_status_descriptor aligned based, 3 75 2 valid bit (1) unaligned, /* an undeleted component or request if on */ 3 76 2 no_final_newline bit (1) unaligned, /* ON if last char in file was not newline */ 3 77 2 safety_switch bit (1) unaligned, /* reflects safety switch of file while online */ 3 78 2 pad bit (33) unaligned, 3 79 2 file_info aligned, /* main tape file for this entry */ 3 80 3 tape_file_name char (17), 3 81 3 entry_name char (32) unaligned, /* for Multics file system */ 3 82 3 date_time_archived bit (36), /* when it was put on tape */ 3 83 3 recording_mode char (8) aligned, /* "ascii", "binary", "ebcdic", etc. */ 3 84 3 date_time_branch_modified bit (36), /* last modified while in file system */ 3 85 3 date_time_dumped bit (36), /* by backup facility */ 3 86 3 bitcount_author char (32), /* last person who modified it while online */ 3 87 3 file_length fixed bin (35), /* in Multics pages */ 3 88 3 attribute_file_no fixed bin, /* file number of attribute file on tape */ 3 89 3 n_tape_records fixed bin (35), /* number of logical records on tape for this file */ 3 90 2 uid bit (36) aligned, /* used to prevent table deletion */ 3 91 2 future_expansion bit (36) aligned; 3 92 3 93 dcl 1 workspace based (workspace_ptr) aligned, /* to prevent update inconsistencies */ 3 94 2 workspace_id char (8), /* "wrkspace" */ 3 95 2 component_no fixed bin, 3 96 2 request_no fixed bin, 3 97 2 n_queued_requests fixed bin, 3 98 2 dead_records fixed bin, 3 99 2 total_records fixed bin, 3 100 2 n_components fixed bin, 3 101 2 n_request_slots fixed bin, 3 102 2 next_mount_type fixed bin, 3 103 2 future_expansion (70) fixed bin (35), 3 104 2 tape_info_copy aligned like tape_archive_table.tape_info, 3 105 2 future_expansion2 (16) fixed bin (35), 3 106 2 component_copy like component aligned, 3 107 2 future_expansion3 (16) fixed bin (35), 3 108 2 request_copy like request aligned; 3 109 3 110 dcl 1 based_tape_info based (tape_info_ptr) like tape_archive_table.tape_info aligned; 3 111 3 112 dcl (table_ptr, component_ptr, request_ptr, workspace_ptr, tape_info_ptr) pointer; 3 113 3 114 dcl ((None initial (0), /* next scheduled processing flags */ 3 115 Delete initial (1), 3 116 Read initial (2), 3 117 Write initial (3), 3 118 Compact initial (4), 3 119 3 120 Examine initial (1), /* current lock reason flags */ 3 121 Modify initial (2), 3 122 Process_tape initial (3), 3 123 3 124 Deletion initial (1), /* pending_operation flags */ 3 125 Extraction initial (2), 3 126 Replacement initial (3), 3 127 Cancellation initial (4), 3 128 Deletion_cancellation initial (5), 3 129 Volume_alteration initial (6), 3 130 Table_creation initial (7), 3 131 Table_copy initial (8), 3 132 3 133 Default_density initial (1600), 3 134 3 135 tape_archive_version_4 initial (4)) fixed bin, 3 136 3 137 TAPE_ARCHIVE_IO_MODULE char(6) init("mtape_"), 3 138 3 139 Lock_reasons (0:3) char (24) initial 3 140 ("no discernable reason", "table examination", "table modification", "tape processing"), 3 141 3 142 Magic_constant char (8) initial ("ta table"), 3 143 Magic_workspace_constant char (8) initial ("wrkspace")) static options (constant); 3 144 3 145 /* ---------------- END include file tape_archive_table_dcl.incl.pl1 ---------------- */ 115 116 4 1 /* --------------- BEGIN include file tape_archive_star.incl.pl1 --------------- */ 4 2 4 3 dcl 1 ta_filesys_star_info aligned based (ta_filesys_star_ptr), 4 4 2 n_entries fixed bin, 4 5 2 ename (ta_star_match_count refer (ta_filesys_star_info.n_entries)) char (32) unaligned; 4 6 4 7 dcl 1 ta_component_star_info aligned based (ta_component_star_ptr), 4 8 2 n_entries fixed bin, 4 9 2 entry (ta_star_match_count refer (ta_component_star_info.n_entries)), 4 10 3 ename char (32) unaligned, 4 11 3 type fixed bin, 4 12 3 table_idx fixed bin; 4 13 4 14 dcl ta_star_match_count fixed bin, 4 15 ta_filesys_star_ptr pointer, 4 16 ta_component_star_ptr pointer; 4 17 4 18 dcl (Component initial (1), 4 19 Request initial (2)) fixed bin static options (constant); 4 20 4 21 /* ---------------- END include file tape_archive_star.incl.pl1 ---------------- */ 117 118 119 120 /* ta_replace_: proc... */ 121 122 operation = Replace; 123 goto common; 124 125 update: entry (table_ptr, arg_array, delete, force, table_name, code); 126 127 operation = Update; 128 goto common; 129 130 append: entry (table_ptr, arg_array, delete, force, table_name, code); 131 132 operation = Append; 133 134 common: 135 if system_free_ptr = null then 136 system_free_ptr = get_system_free_area_ (); 137 138 current_mode = ""; /* the "we choose" recording mode */ 139 single_name_sw = ""b; 140 specific_component = ""b; 141 query_info.version = query_info_version_5; 142 143 /* Following block handles control args */ 144 145 do i = 1 to dim (arg_array, 1); 146 147 arg = arg_array (i); 148 149 if substr (arg, 1, 1) = "-" then do; 150 if arg = "-mode" then do; 151 i = i + 1; 152 if i > dim (arg_array, 1) then do; 153 code = error_table_$noarg; 154 call com_err_ (code, "tape_archive", "-mode must be followed by a recording mode."); 155 return; 156 end; 157 158 current_mode = arg_array (i); 159 if current_mode ^= "ascii" then 160 if current_mode ^= "binary" then 161 if current_mode ^= "ebcdic" then do; 162 code = error_table_$bad_mode; 163 call com_err_ (code, "tape_archive", 164 "Arguments following ""-mode ^a"" were not processed.", current_mode); 165 return; 166 end; 167 168 arg_array (i) = "-"; /* so pathname loop skips it */ 169 end; 170 171 else if (arg = "-single_name" | arg = "-snm") then single_name_sw = "1"b; 172 173 else do; 174 code = error_table_$badopt; 175 call com_err_ (code, "tape_archive", "Arguments from ""^a"" were not processed.", 176 arg); 177 return; 178 end; 179 end; 180 181 else specific_component = "1"b; 182 end; 183 184 /* Following block handles args which should be storage system pathnames */ 185 186 if specific_component then 187 do i = 1 to dim (arg_array, 1); 188 189 arg = arg_array (i); 190 191 if substr (arg, 1, 1) ^= "-" then call process_filearg (arg); 192 end; 193 194 else if operation = Append then 195 call com_err_ (error_table_$noarg, "tape_archive", "At least one file must be specified to append."); 196 else do; 197 198 wdir = get_wdir_ (); 199 200 do i = 1 to tape_archive_table.n_component_slots; /* non-specific replace or update */ 201 component_ptr = addr (component_table (i)); 202 if component.valid then do; 203 call hcs_$status_minf (wdir, component.entry_name, 1 /* chase */, 0, 0, code); 204 if code = 0 then call process_filearg (component.entry_name); 205 end; 206 end; 207 end; 208 209 code = 0; 210 return_hard: 211 return; 212 213 process_filearg: proc (component_name); 214 215 dcl component_name char (*) parameter; 216 217 call expand_pathname_ (component_name, dirname, ename, code); 218 if code ^= 0 then do; 219 not_processed: call com_err_ (code, "tape_archive", """^a"" not processed.", component_name); 220 return; 221 end; 222 223 call check_star_name_$entry (ename, code); 224 if code = 0 then do; 225 call replace_one (dirname, ename); 226 return; 227 end; 228 229 else if (code = 1) | (code = 2) then begin; /* arbitrary starname or "**" */ 230 /* the begin keeps the current procedure fast by limiting 231* the scope of the following cleanup handler. */ 232 233 dcl i fixed bin; 234 235 ta_filesys_star_ptr = null; 236 237 on cleanup begin; 238 if ta_filesys_star_ptr ^= null then 239 free ta_filesys_star_info in (system_free_area); 240 end; 241 242 call ta_filesys_util_$star_list (dirname, ename, ta_filesys_star_ptr, code); 243 if code ^= 0 then goto not_processed; 244 245 do i = 1 to ta_filesys_star_info.n_entries; 246 call replace_one (dirname, ta_filesys_star_info (i).ename); 247 end; 248 249 free ta_filesys_star_info in (system_free_area); 250 end; 251 252 else goto not_processed; 253 return; 254 255 replace_one: proc (dirname, ename); 256 257 dcl (dirname, ename) char (*) parameter; 258 259 on cleanup call ta_table_mgr_$unlock (table_ptr, code); 260 261 call ta_table_mgr_$lock (table_ptr, table_name, Modify, code); 262 if code ^= 0 then do; 263 call com_err_ (code, "tape_archive", 264 "Arguments from ""^a"" could not be processed.", component_name); 265 goto return_hard; 266 end; 267 268 call ta_table_mgr_$find_component (table_ptr, table_name, ename, 269 "0"b /* doesn't have to be there */, component_slot, request_slot, code); 270 if code ^= 0 then goto unlock_and_return; 271 272 request_ptr = addr (tape_archive_table.request_queue (request_slot)); 273 unspec (request) = ""b; /* clear out any old garbage */ 274 275 if current_mode ^= "" then /* user specified recording mode */ 276 request.recording_mode = current_mode; 277 278 else if component_slot > 0 then do; /* get default mode from old copy */ 279 component_ptr = addr (tape_archive_table.component_table (component_slot)); 280 request.recording_mode = component.recording_mode; 281 end; 282 283 else request.recording_mode = "binary"; /* last resort default */ 284 285 component_ptr = null; /* catch wild refs */ 286 287 if request.recording_mode = "binary" then binary_file = "1"b; 288 else binary_file = ""b; 289 290 call ta_filesys_util_$get_file_info (dirname, ename, branch_type, file_length, 291 safety_sw, binary_file, dtbm, code); 292 if code ^= 0 then do; 293 call com_err_ (code, "tape_archive", "^a>^a", dirname, ename); 294 goto unlock_and_return; 295 end; 296 297 if binary_file then 298 if request.recording_mode ^= "binary" then do; 299 call com_err_ (0, "tape_archive", 300 "^a cannot be recorded in ^a mode; using binary mode.", ename, request.recording_mode); 301 request.recording_mode = "binary"; 302 end; 303 304 if operation = Append then do; 305 if component_slot > 0 then do; /* already there, complain */ 306 call com_err_ (error_table_$namedup, "tape_archive", "^a already exists in ^a.", ename, table_name); 307 goto unlock_and_return; 308 end; 309 else request.append = "1"b; 310 end; 311 312 else if operation = Replace then do; 313 if component_slot = 0 then do; 314 call com_err_ (0, "tape_archive", "Appending ^a to ^a", ename, table_name); 315 request.append = "1"b; 316 end; 317 else do; 318 request.replace = "1"b; 319 request.existing_reference = component_slot; 320 end; 321 end; 322 323 else if operation = Update then do; 324 if component_slot = 0 then goto unlock_and_return; /* update never appends, only replaces */ 325 326 call hcs_$status_ (dirname, ename, 1, addr (status_info_branch), null, code); 327 if code ^= 0 then do; 328 call com_err_ (code, "tape_archive", "^a>^a", dirname, ename); 329 goto unlock_and_return; 330 end; 331 332 if binary (status_info_branch.dtm) <= binary (component_table (component_slot).date_time_archived) 333 then goto unlock_and_return; 334 request.replace = "1"b; 335 request.existing_reference = component_slot; 336 call ioa_ ("tape_archive: Updating ^a in ^a", ename, table_name); 337 end; 338 339 request.directory_name = dirname; 340 request.entry_name = ename; 341 request.delete = delete; 342 request.force = force; 343 request.single_name = single_name_sw; 344 request.file_length = file_length; 345 request.date_time_branch_modified = dtbm; 346 request.n_tape_records = 0; 347 348 if (delete & safety_sw & ^force) then do; 349 query_info.yes_or_no_sw = "1"b; 350 call command_query_ (addr (query_info), answer, "tape_archive", 351 "^a>^a is protected. Do you wish to delete it?? ", dirname, ename); 352 if answer = "no" then request.delete, request.force = ""b; 353 else request.delete, request.force = "1"b; 354 end; 355 356 call ta_table_mgr_$setup_workspace (table_ptr, component_slot, request_slot, workspace_ptr); 357 358 request_ptr = addr (workspace_ptr -> workspace.request_copy); 359 component_ptr = addr (workspace_ptr -> workspace.component_copy); 360 361 workspace_ptr -> workspace.n_queued_requests = workspace_ptr -> workspace.n_queued_requests + 1; 362 if request.replace then 363 workspace_ptr -> workspace.dead_records = workspace_ptr -> workspace.dead_records 364 + component.file_length; 365 workspace_ptr -> workspace.total_records = workspace_ptr -> workspace.total_records + file_length; 366 367 if request_slot > tape_archive_table.n_request_slots then 368 workspace_ptr -> workspace.n_request_slots = request_slot; 369 370 if workspace_ptr -> workspace.next_mount_type < Write then 371 workspace_ptr -> workspace.next_mount_type = Write; 372 373 if component_slot > 0 then /* we are replacing an existing component */ 374 component.associated_request_index = request_slot; 375 376 request.valid = "1"b; 377 378 call ta_table_mgr_$complete_table_op (table_ptr); 379 380 unlock_and_return: 381 call ta_table_mgr_$unlock (table_ptr, code); 382 return; 383 end replace_one; 384 end process_filearg; 385 end ta_replace_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/16/84 1249.4 ta_replace_.pl1 >spec>on>mtape>ta_replace_.pl1 111 1 05/06/74 1751.6 status_info_branch.incl.pl1 >ldd>include>status_info_branch.incl.pl1 113 2 03/11/83 1204.3 query_info_.incl.pl1 >ldd>include>query_info.incl.pl1 115 3 02/16/84 1230.3 tape_archive_table_dcl.incl.pl1 >spec>on>mtape>tape_archive_table_dcl.incl.pl1 117 4 12/14/79 1519.0 tape_archive_star.incl.pl1 >ldd>include>tape_archive_star.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. Append constant fixed bin(17,0) initial dcl 64 ref 132 194 304 Modify 000033 constant fixed bin(17,0) initial dcl 3-114 set ref 261* Replace constant fixed bin(17,0) initial dcl 64 ref 122 312 Update constant fixed bin(17,0) initial dcl 64 ref 127 323 Write constant fixed bin(17,0) initial dcl 3-114 ref 370 370 addr builtin function dcl 108 ref 201 272 279 326 326 350 350 358 359 answer 000100 automatic varying char(4) dcl 39 set ref 350* 352 answer_iocbp 6 000332 automatic pointer initial level 2 dcl 2-7 set ref 2-7* append 112 based bit(1) level 3 packed unaligned dcl 3-60 set ref 309* 315* arg 000102 automatic char(168) unaligned dcl 39 set ref 147* 149 150 171 171 175* 189* 191 191* arg_array parameter char(168) array unaligned dcl 31 set ref 18 125 130 145 147 152 158 168* 186 189 associated_request_index 41 based fixed bin(17,0) level 2 dcl 3-53 set ref 373* binary builtin function dcl 108 ref 332 332 binary_file 000154 automatic bit(1) unaligned dcl 39 set ref 287* 288* 290* 297 branch_type 000155 automatic fixed bin(17,0) dcl 39 set ref 290* check_star_name_$entry 000022 constant entry external dcl 83 ref 223 cleanup 000000 stack reference condition dcl 59 ref 237 259 code parameter fixed bin(35,0) dcl 31 set ref 18 125 130 153* 154* 162* 163* 174* 175* 203* 204 209* 217* 218 219* 223* 224 229 229 242* 243 259* 261* 262 263* 268* 270 290* 292 293* 326* 327 328* 380* com_err_ 000024 constant entry external dcl 83 ref 154 163 175 194 219 263 293 299 306 314 328 command_query_ 000026 constant entry external dcl 83 ref 350 component based structure level 1 dcl 3-53 component_copy 1404 based structure level 2 dcl 3-93 set ref 359 component_name parameter char unaligned dcl 215 set ref 213 217* 219* 263* component_ptr 000350 automatic pointer dcl 3-112 set ref 201* 202 203 204 279* 280 285* 359* 362 373 component_slot 000156 automatic fixed bin(17,0) dcl 39 set ref 268* 278 279 305 313 319 324 332 335 356* 373 component_table 1330 based structure array level 3 dcl 3-14 set ref 201 279 cp_escape_control 1(02) 000332 automatic bit(2) initial level 3 packed unaligned dcl 2-7 set ref 2-7* current_mode 000160 automatic char(8) unaligned dcl 39 set ref 138* 158* 159 159 159 163* 275 275 date_time_archived 1346 based bit(36) array level 6 dcl 3-14 set ref 332 date_time_branch_modified 21 based bit(36) level 4 dcl 3-60 set ref 345* dead_records 5 based fixed bin(17,0) level 2 dcl 3-93 set ref 362* 362 delete parameter bit(1) dcl 31 in procedure "ta_replace_" ref 18 125 130 341 348 delete 112(03) based bit(1) level 3 in structure "request" packed unaligned dcl 3-60 in procedure "ta_replace_" set ref 341* 352* 353* dim builtin function dcl 108 ref 145 152 186 directory_name 40 based char(168) level 2 packed unaligned dcl 3-60 set ref 339* dirname parameter char unaligned dcl 257 in procedure "replace_one" set ref 255 290* 293* 326* 328* 339 350* dirname 000162 automatic char(168) unaligned dcl 39 in procedure "ta_replace_" set ref 217* 225* 242* 246* dtbm 000234 automatic bit(36) unaligned dcl 39 set ref 290* 345 dtm 1 000326 automatic bit(36) level 2 packed unaligned dcl 1-2 set ref 332 ename 000235 automatic char(32) unaligned dcl 39 in procedure "ta_replace_" set ref 217* 223* 225* 242* ename parameter char unaligned dcl 257 in procedure "replace_one" set ref 255 268* 290* 293* 299* 306* 314* 326* 328* 336* 340 350* ename 1 based char(32) array level 2 in structure "ta_filesys_star_info" packed unaligned dcl 4-3 in procedure "ta_replace_" set ref 246* entry_name 6 based char(32) level 4 in structure "request" packed unaligned dcl 3-60 in procedure "ta_replace_" set ref 340* entry_name 6 based char(32) level 4 in structure "component" packed unaligned dcl 3-53 in procedure "ta_replace_" set ref 203* 204* entry_status_descriptor based structure level 1 dcl 3-74 in procedure "ta_replace_" entry_status_descriptor 1330 based structure array level 4 in structure "tape_archive_table" dcl 3-14 in procedure "ta_replace_" entry_status_descriptor based structure level 2 in structure "request" dcl 3-60 in procedure "ta_replace_" entry_status_descriptor based structure level 2 in structure "component" dcl 3-53 in procedure "ta_replace_" error_table_$bad_mode 000012 external static fixed bin(35,0) dcl 74 ref 162 error_table_$badopt 000014 external static fixed bin(35,0) dcl 74 ref 174 error_table_$namedup 000016 external static fixed bin(35,0) dcl 74 set ref 306* error_table_$noarg 000020 external static fixed bin(35,0) dcl 74 set ref 153 194* existing_reference 113 based fixed bin(17,0) level 2 dcl 3-60 set ref 319* 335* expand_pathname_ 000030 constant entry external dcl 83 ref 217 explanation_len 14 000332 automatic fixed bin(21,0) initial level 2 dcl 2-7 set ref 2-7* explanation_ptr 12 000332 automatic pointer initial level 2 dcl 2-7 set ref 2-7* file_info 1 based structure level 3 in structure "component" dcl 3-53 in procedure "ta_replace_" file_info 1331 based structure array level 5 in structure "tape_archive_table" dcl 3-14 in procedure "ta_replace_" file_info 1 based structure level 3 in structure "request" dcl 3-60 in procedure "ta_replace_" file_length 33 based fixed bin(35,0) level 4 in structure "component" dcl 3-53 in procedure "ta_replace_" ref 362 file_length 000245 automatic fixed bin(35,0) dcl 39 in procedure "ta_replace_" set ref 290* 344 365 file_length 33 based fixed bin(35,0) level 4 in structure "request" dcl 3-60 in procedure "ta_replace_" set ref 344* force 112(04) based bit(1) level 3 in structure "request" packed unaligned dcl 3-60 in procedure "ta_replace_" set ref 342* 352* 353* force parameter bit(1) dcl 31 in procedure "ta_replace_" ref 18 125 130 342 348 get_system_free_area_ 000032 constant entry external dcl 83 ref 134 get_wdir_ 000034 constant entry external dcl 83 ref 198 hcs_$status_ 000036 constant entry external dcl 83 ref 326 hcs_$status_minf 000040 constant entry external dcl 83 ref 203 i 000100 automatic fixed bin(17,0) dcl 233 in begin block on line 229 set ref 245* 246* i 000246 automatic fixed bin(17,0) dcl 39 in procedure "ta_replace_" set ref 145* 147 151* 151 152 158 168* 186* 189* 200* 201* ioa_ 000042 constant entry external dcl 83 ref 336 literal_sw 1(05) 000332 automatic bit(1) initial level 3 packed unaligned dcl 2-7 set ref 2-7* n_component_slots 41 based fixed bin(17,0) level 3 dcl 3-14 ref 200 272 n_entries based fixed bin(17,0) level 2 dcl 4-3 ref 238 245 249 n_queued_requests 4 based fixed bin(17,0) level 2 dcl 3-93 set ref 361* 361 n_request_slots 43 based fixed bin(17,0) level 3 in structure "tape_archive_table" dcl 3-14 in procedure "ta_replace_" ref 367 n_request_slots 10 based fixed bin(17,0) level 2 in structure "workspace" dcl 3-93 in procedure "ta_replace_" set ref 367* n_tape_records 35 based fixed bin(35,0) level 4 dcl 3-60 set ref 346* next_mount_type 11 based fixed bin(17,0) level 2 dcl 3-93 set ref 370 370* null builtin function dcl 108 ref 134 2-7 2-7 2-7 235 238 285 326 326 operation 000247 automatic fixed bin(17,0) dcl 39 set ref 122* 127* 132* 194 304 312 323 padding 1(07) 000332 automatic bit(29) initial level 3 packed unaligned dcl 2-7 set ref 2-7* prompt_after_explanation 1(06) 000332 automatic bit(1) initial level 3 packed unaligned dcl 2-7 set ref 2-7* query_code 3 000332 automatic fixed bin(35,0) initial level 2 dcl 2-7 set ref 2-7* query_info 000332 automatic structure level 1 dcl 2-7 set ref 350 350 query_info_version_5 constant fixed bin(17,0) initial dcl 2-35 ref 141 question_iocbp 4 000332 automatic pointer initial level 2 dcl 2-7 set ref 2-7* recording_mode 17 based char(8) level 4 in structure "component" dcl 3-53 in procedure "ta_replace_" ref 280 recording_mode 17 based char(8) level 4 in structure "request" dcl 3-60 in procedure "ta_replace_" set ref 275* 280* 283* 287 297 299* 301* repeat_time 10 000332 automatic fixed bin(71,0) initial level 2 dcl 2-7 set ref 2-7* replace 112(01) based bit(1) level 3 packed unaligned dcl 3-60 set ref 318* 334* 362 request based structure level 1 dcl 3-60 set ref 273* request_copy 1474 based structure level 2 dcl 3-93 set ref 358 request_ptr 000352 automatic pointer dcl 3-112 set ref 272* 273 275 280 283 287 297 299 301 309 315 318 319 334 335 339 340 341 342 343 344 345 346 352 352 353 353 358* 362 376 request_queue based structure array level 3 dcl 3-14 set ref 272 request_slot 000250 automatic fixed bin(17,0) dcl 39 set ref 268* 272 356* 367 367 373 requested_ops 112 based structure level 2 packed unaligned dcl 3-60 safety_sw 000251 automatic bit(1) unaligned dcl 39 set ref 290* 348 single_name 112(05) based bit(1) level 3 packed unaligned dcl 3-60 set ref 343* single_name_sw 000252 automatic bit(1) dcl 39 set ref 139* 171* 343 specific_component 000253 automatic bit(1) dcl 39 set ref 140* 181* 186 status_code 2 000332 automatic fixed bin(35,0) initial level 2 dcl 2-7 set ref 2-7* status_info_branch 000326 automatic structure level 1 packed unaligned dcl 1-2 set ref 326 326 substr builtin function dcl 108 ref 149 191 suppress_name_sw 1(01) 000332 automatic bit(1) initial level 3 packed unaligned dcl 2-7 set ref 2-7* suppress_spacing 1(04) 000332 automatic bit(1) initial level 3 packed unaligned dcl 2-7 set ref 2-7* switches 1 000332 automatic structure level 2 dcl 2-7 system_free_area based area dcl 104 ref 238 249 system_free_ptr 000010 internal static pointer initial dcl 70 set ref 134 134* 238 249 ta_filesys_star_info based structure level 1 dcl 4-3 set ref 238 249 ta_filesys_star_ptr 000356 automatic pointer dcl 4-14 set ref 235* 238 238 242* 245 246 249 ta_filesys_util_$get_file_info 000044 constant entry external dcl 93 ref 290 ta_filesys_util_$star_list 000046 constant entry external dcl 93 ref 242 ta_table_mgr_$complete_table_op 000060 constant entry external dcl 96 ref 378 ta_table_mgr_$find_component 000050 constant entry external dcl 96 ref 268 ta_table_mgr_$lock 000052 constant entry external dcl 96 ref 261 ta_table_mgr_$setup_workspace 000056 constant entry external dcl 96 ref 356 ta_table_mgr_$unlock 000054 constant entry external dcl 96 ref 259 380 table_name parameter char unaligned dcl 31 set ref 18 125 130 261* 268* 306* 314* 336* table_ptr parameter pointer dcl 3-112 set ref 18 125 130 200 201 259* 261* 268* 272 279 332 356* 367 378* 380* tape_archive_table based structure level 1 dcl 3-14 tape_info 64 based structure level 3 dcl 3-14 total_records 6 based fixed bin(17,0) level 2 dcl 3-93 set ref 365* 365 unspec builtin function dcl 108 set ref 273* valid based bit(1) level 3 in structure "request" packed unaligned dcl 3-60 in procedure "ta_replace_" set ref 376* valid based bit(1) level 3 in structure "component" packed unaligned dcl 3-53 in procedure "ta_replace_" ref 202 version 000332 automatic fixed bin(17,0) level 2 dcl 2-7 set ref 141* volatile_part 40 based structure level 2 dcl 3-14 wdir 000254 automatic char(168) unaligned dcl 39 set ref 198* 203* workspace based structure level 1 dcl 3-93 workspace_ptr 000354 automatic pointer dcl 3-112 set ref 356* 358 359 361 361 362 362 365 365 367 370 370 yes_or_no_sw 1 000332 automatic bit(1) initial level 3 packed unaligned dcl 2-7 set ref 2-7* 349* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Cancellation internal static fixed bin(17,0) initial dcl 3-114 Compact internal static fixed bin(17,0) initial dcl 3-114 Component internal static fixed bin(17,0) initial dcl 4-18 Default_density internal static fixed bin(17,0) initial dcl 3-114 Delete internal static fixed bin(17,0) initial dcl 3-114 Deletion internal static fixed bin(17,0) initial dcl 3-114 Deletion_cancellation internal static fixed bin(17,0) initial dcl 3-114 Examine internal static fixed bin(17,0) initial dcl 3-114 Extraction internal static fixed bin(17,0) initial dcl 3-114 Lock_reasons internal static char(24) initial array unaligned dcl 3-114 Magic_constant internal static char(8) initial unaligned dcl 3-114 Magic_workspace_constant internal static char(8) initial unaligned dcl 3-114 None internal static fixed bin(17,0) initial dcl 3-114 Process_tape internal static fixed bin(17,0) initial dcl 3-114 Read internal static fixed bin(17,0) initial dcl 3-114 Replacement internal static fixed bin(17,0) initial dcl 3-114 Request internal static fixed bin(17,0) initial dcl 4-18 TAPE_ARCHIVE_IO_MODULE internal static char(6) initial unaligned dcl 3-114 Table_copy internal static fixed bin(17,0) initial dcl 3-114 Table_creation internal static fixed bin(17,0) initial dcl 3-114 Volume_alteration internal static fixed bin(17,0) initial dcl 3-114 based_tape_info based structure level 1 dcl 3-110 query_info_version_3 internal static fixed bin(17,0) initial dcl 2-33 query_info_version_4 internal static fixed bin(17,0) initial dcl 2-34 query_info_version_6 internal static fixed bin(17,0) initial dcl 2-36 sys_info$max_seg_size external static fixed bin(35,0) dcl 79 ta_component_star_info based structure level 1 dcl 4-7 ta_component_star_ptr automatic pointer dcl 4-14 ta_star_match_count automatic fixed bin(17,0) dcl 4-14 tape_archive_version_4 internal static fixed bin(17,0) initial dcl 3-114 tape_info_ptr automatic pointer dcl 3-112 NAMES DECLARED BY EXPLICIT CONTEXT. append 000350 constant entry external dcl 130 common 000366 constant label dcl 134 ref 123 128 not_processed 001161 constant label dcl 219 ref 229 243 process_filearg 001115 constant entry internal dcl 213 ref 191 204 replace_one 001425 constant entry internal dcl 255 ref 225 246 return_hard 001114 constant label dcl 210 ref 265 ta_replace_ 000306 constant entry external dcl 18 unlock_and_return 002727 constant label dcl 380 ref 270 294 307 324 329 332 update 000327 constant entry external dcl 125 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3254 3336 2754 3264 Length 3644 2754 62 272 277 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ta_replace_ 372 external procedure is an external procedure. process_filearg internal procedure shares stack frame of external procedure ta_replace_. begin block on line 229 92 begin block enables or reverts conditions. on unit on line 237 64 on unit replace_one 188 internal procedure enables or reverts conditions. on unit on line 259 70 on unit STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 system_free_ptr ta_replace_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 229 000100 i begin block on line 229 ta_replace_ 000100 answer ta_replace_ 000102 arg ta_replace_ 000154 binary_file ta_replace_ 000155 branch_type ta_replace_ 000156 component_slot ta_replace_ 000160 current_mode ta_replace_ 000162 dirname ta_replace_ 000234 dtbm ta_replace_ 000235 ename ta_replace_ 000245 file_length ta_replace_ 000246 i ta_replace_ 000247 operation ta_replace_ 000250 request_slot ta_replace_ 000251 safety_sw ta_replace_ 000252 single_name_sw ta_replace_ 000253 specific_component ta_replace_ 000254 wdir ta_replace_ 000326 status_info_branch ta_replace_ 000332 query_info ta_replace_ 000350 component_ptr ta_replace_ 000352 request_ptr ta_replace_ 000354 workspace_ptr ta_replace_ 000356 ta_filesys_star_ptr ta_replace_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. enter_begin leave_begin call_ext_out_desc call_ext_out call_int_this_desc call_int_other_desc return tra_ext enable ext_entry_desc int_entry int_entry_desc free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. check_star_name_$entry com_err_ command_query_ expand_pathname_ get_system_free_area_ get_wdir_ hcs_$status_ hcs_$status_minf ioa_ ta_filesys_util_$get_file_info ta_filesys_util_$star_list ta_table_mgr_$complete_table_op ta_table_mgr_$find_component ta_table_mgr_$lock ta_table_mgr_$setup_workspace ta_table_mgr_$unlock THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_mode error_table_$badopt error_table_$namedup error_table_$noarg LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 2 7 000246 18 000300 122 000322 123 000324 125 000325 127 000343 128 000345 130 000346 132 000364 134 000366 138 000401 139 000403 140 000404 141 000405 145 000407 147 000425 149 000443 150 000447 151 000453 152 000454 153 000463 154 000466 155 000516 158 000517 159 000526 162 000543 163 000546 165 000602 168 000603 169 000607 171 000610 174 000623 175 000626 177 000662 179 000663 181 000664 182 000666 186 000670 189 000707 191 000725 192 000741 194 000744 198 001001 200 001010 201 001023 202 001031 203 001034 204 001074 206 001110 209 001112 210 001114 213 001115 217 001126 218 001156 219 001161 220 001221 223 001222 224 001237 225 001242 226 001256 229 001257 235 001266 237 001271 238 001305 240 001320 242 001321 243 001350 245 001357 246 001367 247 001412 249 001414 250 001422 253 001423 255 001424 259 001445 261 001475 262 001525 263 001531 265 001570 268 001573 270 001640 272 001644 273 001657 275 001662 278 001672 279 001674 280 001677 281 001704 283 001705 285 001710 287 001712 288 001724 290 001726 292 001773 293 001777 294 002041 297 002042 299 002054 301 002120 304 002125 305 002130 306 002132 307 002202 309 002203 310 002206 312 002207 313 002211 314 002213 315 002264 316 002270 318 002271 319 002274 321 002275 323 002276 324 002300 326 002302 327 002347 328 002353 329 002415 332 002416 334 002431 335 002434 336 002436 339 002465 340 002475 341 002502 342 002511 343 002516 344 002523 345 002525 346 002527 348 002530 349 002541 350 002543 352 002613 353 002627 356 002634 358 002652 359 002657 361 002661 362 002662 365 002671 367 002675 370 002704 373 002711 376 002716 378 002720 380 002727 382 002742 ----------------------------------------------------------- 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