COMPILATION LISTING OF SEGMENT file_output Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-04-17_1933.55_Mon_mdt 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 file_output: 12 fo: 13 procedure () options (variable); 14 15 /* This module implements the file_output, terminal_output and 16* revert_output commands. Both file_output and terminal_output push 17* a stack of attachments. The revert_output command pops the latest 18* attachment for a specified switch. revert_output -all pops the 19* entire stack. 20* 21* Usage: 22* file_output {path} {-ssw switchname}... {-truncate|-extend} 23* terminal_output {-ssw switchname}... 24* revert_output {-all} {-ssw switchname}... 25* syn_output target_sw {-ssw source_switchname}... 26* 27* If no switchnames are specified, the default is user_output. 28* revert_output -all reverts all switches, unless one is specified. 29* */ 30 31 /* Written 4/5/77 by Steve Herbst */ 32 /* Modified 07/14/77 by G. Palter to work properly */ 33 /* Modified 08/77 by B. Greenberg for syn_output */ 34 /* Modified 06/78 by M. R. Jordan for -truncate and -extend */ 35 /* test for invalid entrynames 04/18/79 S. Herbst */ 36 /* Modified 10/82 by Linda Pugh to attach switch to segment containing 37* a space in its name */ 38 39 dcl 1 node aligned based (p), /* node in list of saved attachments */ 40 2 next ptr, 41 2 last ptr, 42 2 this_iocb ptr, /* ptr to saved IOCB */ 43 2 fo_def_ptr ptr, /* ptr to definition of file_output_n for new attachment */ 44 2 saved_iocb ptr, /* pointer to iocb where attachment moved */ 45 2 was_detached bit (1) aligned; /* ON if switch not already attached */ 46 47 dcl 1 fo_def aligned based, /* definition of an file_output_n attachment */ 48 2 fo_ptr ptr, /* ptr to file_output_n IOCB */ 49 2 ref_count fixed bin; /* number of IOCB's syn'ed to this one */ 50 51 dcl area area based (area_ptr); 52 53 dcl arg char (arg_len) based (arg_ptr); 54 dcl attach_description char (200); 55 dcl file_path char (168); 56 dcl (switch_name, target_name, save_name) char (32); /* names of output I/O switches */ 57 dcl command char (32); /* name of command entry point called */ 58 59 dcl ips_mask bit (36); /* mask for disabling quits, etc. */ 60 dcl (file, terminal, revert) bit (1) init ("0"b); /* ON for fo, to, and ro */ 61 dcl syn_entry bit (1) init ("0"b); /* ON for so */ 62 dcl console bit (1) init ("0"b); /* ON for console_output (obsolete) */ 63 dcl all bit (1); /* ON for revert_output -all */ 64 dcl all_switches bit (1); /* ON for same without osw's */ 65 dcl found_one bit (1); /* found a saved attachment to restore */ 66 dcl path_given bit (1); /* pathname specified to file_output */ 67 dcl truncate bit (1); /* truncate the output file */ 68 69 dcl area_ptr ptr int static init (null ()); /* for allocations */ 70 dcl new_fo_def_ptr ptr; /* ptr to file_output_n definition */ 71 dcl new_fo_ptr ptr; /* ptr to file_output_n IOCB */ 72 dcl (first_p, last_p) ptr int static init (null ()); /* ptrs to threaded list of nodes */ 73 dcl (p, prev_p) ptr; 74 dcl (arg_list_ptr, arg_ptr, iocb_ptr) ptr; 75 76 dcl (arg_count, i, iocb_count, iocb_limit) fixed bin; 77 dcl last_processed fixed bin; /* last IOCB saved/restored for cleanup */ 78 dcl arg_len fixed bin (21); 79 dcl code fixed bin (35); 80 dcl saved_code fixed bin (35); 81 82 dcl error_table_$badopt fixed bin (35) ext; 83 dcl error_table_$badstar fixed bin (35) ext; 84 dcl error_table_$nostars fixed bin (35) ext; 85 86 dcl absolute_pathname_ entry (char (*), char (*), fixed bin (35)); 87 dcl check_star_name_$path entry (char (*), fixed bin (35)); 88 dcl com_err_ entry options (variable); 89 dcl cu_$arg_count entry (fixed bin); 90 dcl cu_$arg_list_ptr entry (ptr); 91 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 92 dcl get_system_free_area_ entry returns (ptr); 93 dcl hcs_$reset_ips_mask entry (bit (36), bit (36)); 94 dcl hcs_$set_ips_mask entry (bit (36), bit (36)); 95 dcl iox_$attach_ptr entry (ptr, char (*), ptr, fixed bin (35)); 96 dcl iox_$close entry (ptr, fixed bin (35)); 97 dcl iox_$detach_iocb entry (ptr, fixed bin (35)); 98 dcl iox_$destroy_iocb entry (ptr, fixed bin (35)); 99 dcl iox_$find_iocb entry (char (*), ptr, fixed bin (35)); 100 dcl iox_$look_iocb entry (char (*), ptr, fixed bin (35)); 101 dcl iox_$move_attach entry (ptr, ptr, fixed bin (35)); 102 dcl iox_$open entry (ptr, fixed bin, bit (1), fixed bin (35)); 103 dcl iox_$user_output ptr ext; 104 dcl requote_string_ entry (char(*)) returns (char(*)); 105 dcl unique_chars_ entry (bit (*)) returns (char (15)); 106 107 dcl (divide, null, rtrim, substr) builtin; 108 109 dcl error_table_$noarg fixed bin (35) external; 110 111 dcl cleanup condition; 112 1 1 /* Begin include file ..... iox_modes.incl.pl1 */ 1 2 1 3 /* Written by C. D. Tavares, 03/17/75 */ 1 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 1 5 1 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 1 7 ("stream_input", "stream_output", "stream_input_output", 1 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 1 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 1 10 "direct_input", "direct_output", "direct_update"); 1 11 1 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 1 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 1 14 1 15 dcl (Stream_input initial (1), 1 16 Stream_output initial (2), 1 17 Stream_input_output initial (3), 1 18 Sequential_input initial (4), 1 19 Sequential_output initial (5), 1 20 Sequential_input_output initial (6), 1 21 Sequential_update initial (7), 1 22 Keyed_sequential_input initial (8), 1 23 Keyed_sequential_output initial (9), 1 24 Keyed_sequential_update initial (10), 1 25 Direct_input initial (11), 1 26 Direct_output initial (12), 1 27 Direct_update initial (13)) fixed bin int static options (constant); 1 28 1 29 /* End include file ..... iox_modes.incl.pl1 */ 113 114 115 116 /* file_output: 117* fo: 118* procedure () options (variable); 119* */ 120 121 command = "file_output"; 122 file = "1"b; 123 file_path = "output_file"; 124 go to COMMON; 125 126 127 terminal_output: 128 to: entry () options (variable); 129 130 command = "terminal_output"; 131 terminal = "1"b; 132 go to COMMON; 133 134 135 revert_output: 136 ro: entry () options (variable); 137 138 command = "revert_output"; 139 revert = "1"b; 140 all = "0"b; 141 go to COMMON; 142 143 syn_output: 144 so: entry () options (variable); 145 146 command = "syn_output"; 147 syn_entry = "1"b; 148 go to COMMON; 149 150 151 152 console_output: 153 co: entry () options (variable); /* Obsolete: eqv to "revert_output user_output -all" */ 154 155 command = "console_output"; 156 revert, console = "1"b; 157 all = "1"b; 158 159 COMMON: iocb_count = 0; 160 truncate = "0"b; /* Default is to extend file */ 161 path_given = "0"b; /* no pathname seen yet */ 162 all_switches = "0"b; 163 call cu_$arg_count (arg_count); 164 if console & arg_count>0 then do; /* obsolete */ 165 call com_err_ (0, command, "Usage: console_output"); 166 return; 167 end; 168 call cu_$arg_list_ptr (arg_list_ptr); 169 iocb_limit = divide (arg_count, 2, 17, 0)+1; 170 171 172 begin; 173 174 dcl iocbp (iocb_limit) ptr; 175 dcl iocb_name (iocb_limit) char (32); 176 177 do i = 1 to arg_count; 178 call cu_$arg_ptr_rel (i, arg_ptr, arg_len, code, arg_list_ptr); 179 if substr (arg, 1, 1) = "-" then do; 180 if arg = "-ssw" | arg = "-osw" | arg = "-source_switch" | arg = "-output_switch" then do; 181 i = i+1; 182 call cu_$arg_ptr_rel (i, arg_ptr, arg_len, code, arg_list_ptr); 183 if code ^= 0 then do; 184 call com_err_ (code, command, "No value specified for source switch."); 185 return; 186 end; 187 call iox_$look_iocb (arg, iocb_ptr, code); 188 if iocb_ptr = null () then do; 189 call com_err_ (code, command, "^a", arg); 190 return; 191 end; 192 iocb_count = iocb_count+1; 193 iocbp (iocb_count) = iocb_ptr; 194 iocb_name (iocb_count) = arg; 195 end; 196 else if revert & (arg = "-a" | arg = "-all") then all = "1"b; 197 else if file & (arg = "-tc" | arg = "-truncate") then truncate = "1"b; 198 else if file & (arg = "-extend") then truncate = "0"b; 199 else do; 200 call com_err_ (error_table_$badopt, command, "^a", arg); 201 return; 202 end; 203 end; 204 else if revert then do; 205 call com_err_ (0, command, "Usage: revert_output {-all} {-ssw switchname}..."); 206 return; 207 end; 208 else if terminal then do; 209 call com_err_ (0, command, "Usage: terminal_output {-ssw switchname}..."); 210 return; 211 end; 212 else if path_given then do; 213 if file then call com_err_ (0, command, 214 "Usage: file_output {path} {-ssw switchname}... {-truncate|-extend}"); 215 else call com_err_ (0, command, "Usage: syn_output target_switch {-ssw switchname}..."); 216 return; 217 end; 218 else do; 219 path_given = "1"b; 220 file_path = arg; 221 end; 222 end; 223 224 if path_given & file then do; /* Check pathname for file_output */ 225 call check_star_name_$path (file_path, code); 226 if code ^= 0 then do; 227 if code = error_table_$badstar then call com_err_ (code, command, "^a", file_path); 228 else call com_err_ (error_table_$nostars, command, "^a", file_path); 229 return; 230 end; 231 end; 232 233 if iocb_count = 0 then do; /* apply default */ 234 if all & revert & ^console then all_switches = "1"b; 235 iocb_count = 1; 236 iocbp (1) = iox_$user_output; 237 iocb_name (1) = "user_output"; 238 end; 239 240 if syn_entry & ^path_given then do; 241 call com_err_ (error_table_$noarg, command, "No target switch given."); 242 return; 243 end; 244 245 246 247 if terminal then target_name = "user_i/o"; 248 else if syn_entry then do; 249 target_name = file_path; 250 call iox_$look_iocb (target_name, iocb_ptr, code); 251 if code ^= 0 then do; 252 call com_err_ (code, command, target_name); 253 return; 254 end; 255 end; 256 else if file then do; 257 call absolute_pathname_ ((file_path), file_path, code); 258 if code ^= 0 then do; 259 call com_err_ (code, command, "^a", file_path); 260 return; 261 end; 262 263 target_name = "fo_" || unique_chars_ ("0"b); 264 call iox_$find_iocb (target_name, new_fo_ptr, code); 265 if code ^= 0 then do; 266 call com_err_ (code, command, "^a", target_name); 267 return; 268 end; 269 270 if truncate then attach_description = "vfile_ " || requote_string_ (rtrim (file_path)) ; 271 else attach_description = "vfile_ " || requote_string_ (rtrim (file_path)) || " -extend"; 272 if ^path_given then /* Say what's happening */ 273 call com_err_ (0, command, "Writing output into ^a. Use revert_output to stop.", file_path); 274 275 call iox_$attach_ptr (new_fo_ptr, attach_description, null (), code); 276 if code ^= 0 then do; 277 call com_err_ (code, command, "Unable to attach switch ""^a"" to ^a.", target_name, file_path); 278 call iox_$destroy_iocb (new_fo_ptr, code); 279 return; 280 end; 281 call iox_$open (new_fo_ptr, Stream_output, "0"b, code); 282 if code ^= 0 then do; 283 call com_err_ (code, command, "Unable to open switch ""^a"" for write to ^a.", target_name, file_path); 284 call iox_$detach_iocb (new_fo_ptr, code); 285 call iox_$destroy_iocb (new_fo_ptr, code); 286 return; 287 end; 288 if area_ptr = null () then area_ptr = get_system_free_area_ (); 289 allocate fo_def in (area) set (new_fo_def_ptr); 290 new_fo_def_ptr -> fo_def.fo_ptr = new_fo_ptr; 291 new_fo_def_ptr -> fo_def.ref_count = 0; 292 end; 293 294 295 last_processed = 0; /* haven't done anything yet */ 296 297 on condition (cleanup) call clean_up (); 298 299 300 do i = 1 to iocb_count; 301 302 iocb_ptr = iocbp (i); 303 switch_name = iocb_name (i); 304 305 ips_mask = "0"b; 306 307 if revert 308 then call restore_attachment (); 309 310 else do; 311 call save_attachment (); 312 313 call iox_$attach_ptr (iocb_ptr, "syn_ " || target_name, null (), code); 314 if code ^= 0 then do; 315 saved_code = code; 316 call restore_attachment (); 317 call clean_up (); 318 call com_err_ (saved_code, command, "^a", switch_name); 319 return; 320 end; 321 end; 322 323 last_processed = i; 324 end; 325 326 return; 327 328 329 ABORT: call clean_up (); 330 return; 331 332 333 clean_up: procedure (); 334 335 if ips_mask ^= "0"b 336 then call hcs_$reset_ips_mask ((ips_mask), ips_mask); 337 338 if last_processed ^= 0 /* have done some work */ 339 then if revert /* always do reverts regardless */ 340 then do i = last_processed + 1 to iocb_count; 341 iocb_ptr = iocbp (i); 342 call restore_attachment (); 343 end; 344 345 else /* not revert: restore what was done */ 346 do i = 1 to last_processed; 347 iocb_ptr = iocbp (i); 348 call restore_attachment (); 349 end; 350 351 return; 352 353 end clean_up; 354 355 356 save_attachment: procedure (); 357 358 /* This internal procedure saves the current attachment of iocb_ptr */ 359 360 call hcs_$set_ips_mask ("0"b, ips_mask); 361 362 if area_ptr = null () then area_ptr = get_system_free_area_ (); 363 364 allocate node in (area) set (p); 365 p -> node.this_iocb = iocb_ptr; 366 367 save_name = "fo_save_" || unique_chars_ ("0"b); 368 call iox_$find_iocb (save_name, p -> node.saved_iocb, code); 369 if code ^= 0 then do; 370 call com_err_ (code, command, "^a", switch_name); 371 go to ABORT; 372 end; 373 374 call iox_$move_attach (iocb_ptr, p -> node.saved_iocb, code); 375 if code = 0 376 then p -> node.was_detached = "0"b; 377 else p -> node.was_detached = "1"b; 378 379 if file then do; /* ptr to file_output_n definition */ 380 p -> node.fo_def_ptr = new_fo_def_ptr; 381 new_fo_def_ptr -> fo_def.ref_count = new_fo_def_ptr -> fo_def.ref_count + 1; 382 end; 383 else p -> node.fo_def_ptr = null (); 384 385 p -> node.next = null (); 386 if first_p = null () then do; /* this is the first node saved */ 387 first_p = p; 388 p -> node.last = null (); 389 end; 390 else do; /* thread to last node */ 391 last_p -> node.next = p; 392 p -> node.last = last_p; 393 end; 394 last_p = p; 395 396 call hcs_$reset_ips_mask ((ips_mask), ips_mask); 397 398 return; 399 400 end save_attachment; 401 402 403 restore_attachment: procedure (); 404 405 /* This internal procedure restores the last or first (-all) saved 406* attachment of iocb_ptr and frees the last node or all nodes (-all) */ 407 408 if first_p = null () then do; 409 NOT_FOUND: if all_switches then call com_err_ (0, command, "No previous attachments."); 410 else call com_err_ (0, command, "No previous attachment of ^a", switch_name); 411 if ips_mask ^= "0"b then call hcs_$reset_ips_mask ((ips_mask), ips_mask); 412 return; 413 end; 414 415 /* Find the right saved attachment */ 416 417 call hcs_$set_ips_mask ("0"b, ips_mask); 418 419 if all then do; 420 found_one = "0"b; 421 do p = last_p repeat (p -> node.last) while (p ^= null ()); 422 if p -> node.this_iocb = iocb_ptr | all_switches then do; 423 found_one = "1"b; 424 call restore_iocb (); 425 end; 426 end; 427 if ^found_one then go to NOT_FOUND; 428 end; 429 else do; 430 do p = last_p repeat (p -> node.last) while (p ^= null ()); 431 if p -> this_iocb = iocb_ptr then go to FOUND; 432 end; 433 FOUND: if p = null () then go to NOT_FOUND; 434 call restore_iocb (); 435 end; 436 437 /* Free the appropriate nodes */ 438 439 if all then do; 440 prev_p = last_p; 441 do p = last_p repeat (prev_p) while (prev_p ^= null ()); 442 prev_p = p -> node.last; 443 if p -> this_iocb = iocb_ptr | all_switches then call rethread (); 444 end; 445 end; 446 else call rethread (); 447 448 call hcs_$reset_ips_mask ((ips_mask), ips_mask); 449 450 return; 451 452 453 restore_iocb: procedure (); 454 455 /* This procedure internal to restore_attachment restores one iocb */ 456 457 call iox_$detach_iocb (p -> node.this_iocb, code); 458 if ^ (p -> node.was_detached) 459 then call iox_$move_attach (p -> node.saved_iocb, p -> node.this_iocb, code); 460 call iox_$destroy_iocb (p -> node.saved_iocb, code); 461 462 return; 463 464 end restore_iocb; 465 466 end restore_attachment; 467 468 469 rethread: procedure (); 470 471 if p = first_p then do; 472 first_p = p -> node.next; 473 if first_p ^= null () then first_p -> node.last = null (); 474 else last_p = null (); 475 end; 476 else if p = last_p then do; 477 last_p = p -> node.last; 478 if last_p ^= null () then last_p -> node.next = null (); 479 else first_p = null (); 480 end; 481 else do; 482 p -> node.next -> node.last = p -> node.last; 483 p -> node.last -> node.next = p -> node.next; 484 end; 485 486 if p -> node.fo_def_ptr ^= null () then do; /* was replaced by an fo attachment */ 487 p -> node.fo_def_ptr -> fo_def.ref_count = p -> node.fo_def_ptr -> fo_def.ref_count - 1; 488 if p -> node.fo_def_ptr -> fo_def.ref_count = 0 then do; /* this file_output_n is unused */ 489 call iox_$close (p -> node.fo_def_ptr -> fo_def.fo_ptr, code); 490 call iox_$detach_iocb (p -> node.fo_def_ptr -> fo_def.fo_ptr, code); 491 call iox_$destroy_iocb (p -> node.fo_def_ptr -> fo_def.fo_ptr, code); 492 free p -> node.fo_def_ptr -> fo_def in (area); 493 end; 494 end; 495 496 free p -> node in (area); 497 498 return; 499 500 end rethread; 501 502 end; /* end begin block */ 503 504 505 end file_output; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/17/00 1933.5 file_output.pl1 >udd>sm>ds>w>ml>file_output.pl1 113 1 02/02/78 1329.7 iox_modes.incl.pl1 >ldd>incl>iox_modes.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. Stream_output 000030 constant fixed bin(17,0) initial dcl 1-15 set ref 281* absolute_pathname_ 000024 constant entry external dcl 86 ref 257 all 000302 automatic bit(1) packed unaligned dcl 63 set ref 140* 157* 196* 234 419 439 all_switches 000303 automatic bit(1) packed unaligned dcl 64 set ref 162* 234* 409 422 443 area based area(1024) dcl 51 ref 289 364 492 496 area_ptr 000010 internal static pointer initial dcl 69 set ref 288 288* 289 362 362* 364 492 496 arg based char packed unaligned dcl 53 set ref 179 180 180 180 180 187* 189* 194 196 196 197 197 198 200* 220 arg_count 000326 automatic fixed bin(17,0) dcl 76 set ref 163* 164 169 177 arg_len 000333 automatic fixed bin(21,0) dcl 78 set ref 178* 179 180 180 180 180 182* 187 187 189 189 194 196 196 197 197 198 200 200 220 arg_list_ptr 000320 automatic pointer dcl 74 set ref 168* 178* 182* arg_ptr 000322 automatic pointer dcl 74 set ref 178* 179 180 180 180 180 182* 187 189 194 196 196 197 197 198 200 220 attach_description 000100 automatic char(200) packed unaligned dcl 54 set ref 270* 271* 275* check_star_name_$path 000026 constant entry external dcl 87 ref 225 cleanup 000000 stack reference condition dcl 111 ref 297 code 000334 automatic fixed bin(35,0) dcl 79 set ref 178* 182* 183 184* 187* 189* 225* 226 227 227* 250* 251 252* 257* 258 259* 264* 265 266* 275* 276 277* 278* 281* 282 283* 284* 285* 313* 314 315 368* 369 370* 374* 375 457* 458* 460* 489* 490* 491* com_err_ 000030 constant entry external dcl 88 ref 165 184 189 200 205 209 213 215 227 228 241 252 259 266 272 277 283 318 370 409 410 command 000264 automatic char(32) packed unaligned dcl 57 set ref 121* 130* 138* 146* 155* 165* 184* 189* 200* 205* 209* 213* 215* 227* 228* 241* 252* 259* 266* 272* 277* 283* 318* 370* 409* 410* console 000301 automatic bit(1) initial packed unaligned dcl 62 set ref 62* 156* 164 234 cu_$arg_count 000032 constant entry external dcl 89 ref 163 cu_$arg_list_ptr 000034 constant entry external dcl 90 ref 168 cu_$arg_ptr_rel 000036 constant entry external dcl 91 ref 178 182 divide builtin function dcl 107 ref 169 error_table_$badopt 000016 external static fixed bin(35,0) dcl 82 set ref 200* error_table_$badstar 000020 external static fixed bin(35,0) dcl 83 ref 227 error_table_$noarg 000074 external static fixed bin(35,0) dcl 109 set ref 241* error_table_$nostars 000022 external static fixed bin(35,0) dcl 84 set ref 228* file 000275 automatic bit(1) initial packed unaligned dcl 60 set ref 60* 122* 197 198 213 224 256 379 file_path 000162 automatic char(168) packed unaligned dcl 55 set ref 123* 220* 225* 227* 228* 249 257 257* 259* 270 270 271 271 272* 277* 283* first_p 000012 internal static pointer initial dcl 72 set ref 386 387* 408 471 472* 473 473 479* fo_def based structure level 1 dcl 47 set ref 289 492 fo_def_ptr 6 based pointer level 2 dcl 39 set ref 380* 383* 486 487 487 488 489 490 491 492 fo_ptr based pointer level 2 dcl 47 set ref 290* 489* 490* 491* found_one 000304 automatic bit(1) packed unaligned dcl 65 set ref 420* 423* 427 get_system_free_area_ 000040 constant entry external dcl 92 ref 288 362 hcs_$reset_ips_mask 000042 constant entry external dcl 93 ref 335 396 411 448 hcs_$set_ips_mask 000044 constant entry external dcl 94 ref 360 417 i 000327 automatic fixed bin(17,0) dcl 76 set ref 177* 178* 181* 181 182* 300* 302 303 323* 338* 341* 345* 347* iocb_count 000330 automatic fixed bin(17,0) dcl 76 set ref 159* 192* 192 193 194 233 235* 300 338 iocb_limit 000331 automatic fixed bin(17,0) dcl 76 set ref 169* 174 175 iocb_name 000100 automatic char(32) array packed unaligned dcl 175 set ref 194* 237* 303 iocb_ptr 000324 automatic pointer dcl 74 set ref 187* 188 193 250* 302* 313* 341* 347* 365 374* 422 431 443 iocbp 000100 automatic pointer array dcl 174 set ref 193* 236* 302 341 347 iox_$attach_ptr 000046 constant entry external dcl 95 ref 275 313 iox_$close 000050 constant entry external dcl 96 ref 489 iox_$destroy_iocb 000054 constant entry external dcl 98 ref 278 285 460 491 iox_$detach_iocb 000052 constant entry external dcl 97 ref 284 457 490 iox_$find_iocb 000056 constant entry external dcl 99 ref 264 368 iox_$look_iocb 000060 constant entry external dcl 100 ref 187 250 iox_$move_attach 000062 constant entry external dcl 101 ref 374 458 iox_$open 000064 constant entry external dcl 102 ref 281 iox_$user_output 000066 external static pointer dcl 103 ref 236 ips_mask 000274 automatic bit(36) packed unaligned dcl 59 set ref 305* 335 335 335* 360* 396 396* 411 411 411* 417* 448 448* last 2 based pointer level 2 dcl 39 set ref 388* 392* 426 432 442 473* 477 482* 482 483 last_p 000014 internal static pointer initial dcl 72 set ref 391 392 394* 421 430 440 441 474* 476 477* 478 478 last_processed 000332 automatic fixed bin(17,0) dcl 77 set ref 295* 323* 338 338 345 new_fo_def_ptr 000310 automatic pointer dcl 70 set ref 289* 290 291 380 381 381 new_fo_ptr 000312 automatic pointer dcl 71 set ref 264* 275* 278* 281* 284* 285* 290 next based pointer level 2 dcl 39 set ref 385* 391* 472 478* 482 483* 483 node based structure level 1 dcl 39 set ref 364 496 null builtin function dcl 107 ref 188 275 275 288 313 313 362 383 385 386 388 408 421 430 433 441 473 473 474 478 478 479 486 p 000314 automatic pointer dcl 73 set ref 364* 365 368 374 375 377 380 383 385 387 388 391 392 394 421* 421* 422* 426 430* 430* 431* 432 433 441* 442 443* 457 458 458 458 460 471 472 476 477 482 482 483 483 486 487 487 488 489 490 491 492 496 path_given 000305 automatic bit(1) packed unaligned dcl 66 set ref 161* 212 219* 224 240 272 prev_p 000316 automatic pointer dcl 73 set ref 440* 441 442* 444 ref_count 2 based fixed bin(17,0) level 2 dcl 47 set ref 291* 381* 381 487* 487 488 requote_string_ 000070 constant entry external dcl 104 ref 270 271 revert 000277 automatic bit(1) initial packed unaligned dcl 60 set ref 60* 139* 156* 196 204 234 307 338 rtrim builtin function dcl 107 ref 270 270 271 271 save_name 000254 automatic char(32) packed unaligned dcl 56 set ref 367* 368* saved_code 000335 automatic fixed bin(35,0) dcl 80 set ref 315* 318* saved_iocb 10 based pointer level 2 dcl 39 set ref 368* 374* 458* 460* substr builtin function dcl 107 ref 179 switch_name 000234 automatic char(32) packed unaligned dcl 56 set ref 303* 318* 370* 410* syn_entry 000300 automatic bit(1) initial packed unaligned dcl 61 set ref 61* 147* 240 248 target_name 000244 automatic char(32) packed unaligned dcl 56 set ref 247* 249* 250* 252* 263* 264* 266* 277* 283* 313 terminal 000276 automatic bit(1) initial packed unaligned dcl 60 set ref 60* 131* 208 247 this_iocb 4 based pointer level 2 dcl 39 set ref 365* 422 431 443 457* 458* truncate 000306 automatic bit(1) packed unaligned dcl 67 set ref 160* 197* 198* 270 unique_chars_ 000072 constant entry external dcl 105 ref 263 367 was_detached 12 based bit(1) level 2 dcl 39 set ref 375* 377* 458 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 1-15 Direct_output internal static fixed bin(17,0) initial dcl 1-15 Direct_update internal static fixed bin(17,0) initial dcl 1-15 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 1-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 1-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 1-15 Sequential_input internal static fixed bin(17,0) initial dcl 1-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 1-15 Sequential_output internal static fixed bin(17,0) initial dcl 1-15 Sequential_update internal static fixed bin(17,0) initial dcl 1-15 Stream_input internal static fixed bin(17,0) initial dcl 1-15 Stream_input_output internal static fixed bin(17,0) initial dcl 1-15 iox_modes internal static char(24) initial array dcl 1-6 short_iox_modes internal static char(4) initial array dcl 1-12 NAMES DECLARED BY EXPLICIT CONTEXT. ABORT 002611 constant label dcl 329 ref 371 COMMON 000502 constant label dcl 159 ref 124 132 141 148 FOUND 003404 constant label dcl 433 ref 431 NOT_FOUND 003203 constant label dcl 409 ref 427 433 clean_up 002621 constant entry internal dcl 333 ref 297 317 329 co 000455 constant entry external dcl 152 console_output 000465 constant entry external dcl 152 file_output 000335 constant entry external dcl 11 fo 000325 constant entry external dcl 11 restore_attachment 003172 constant entry internal dcl 403 ref 307 316 342 348 restore_iocb 003472 constant entry internal dcl 453 ref 424 434 rethread 003544 constant entry internal dcl 469 ref 443 446 revert_output 000412 constant entry external dcl 135 ro 000402 constant entry external dcl 135 save_attachment 002732 constant entry internal dcl 356 ref 311 so 000430 constant entry external dcl 143 syn_output 000440 constant entry external dcl 143 terminal_output 000365 constant entry external dcl 127 to 000355 constant entry external dcl 127 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4304 4402 3712 4314 Length 4700 3712 76 261 371 6 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fo 248 external procedure is an external procedure. begin block on line 172 230 begin block uses auto adjustable storage, and enables or reverts conditions. on unit on line 297 64 on unit clean_up 74 internal procedure is called by several nonquick procedures. save_attachment internal procedure shares stack frame of begin block on line 172. restore_attachment 136 internal procedure is called by several nonquick procedures. restore_iocb internal procedure shares stack frame of internal procedure restore_attachment. rethread internal procedure shares stack frame of internal procedure restore_attachment. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 area_ptr fo 000012 first_p fo 000014 last_p fo STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 172 000100 iocbp begin block on line 172 000100 iocb_name begin block on line 172 fo 000100 attach_description fo 000162 file_path fo 000234 switch_name fo 000244 target_name fo 000254 save_name fo 000264 command fo 000274 ips_mask fo 000275 file fo 000276 terminal fo 000277 revert fo 000300 syn_entry fo 000301 console fo 000302 all fo 000303 all_switches fo 000304 found_one fo 000305 path_given fo 000306 truncate fo 000310 new_fo_def_ptr fo 000312 new_fo_ptr fo 000314 p fo 000316 prev_p fo 000320 arg_list_ptr fo 000322 arg_ptr fo 000324 iocb_ptr fo 000326 arg_count fo 000327 i fo 000330 iocb_count fo 000331 iocb_limit fo 000332 last_processed fo 000333 arg_len fo 000334 code fo 000335 saved_code fo THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp cat_realloc_chars enter_begin_block call_ext_out_desc call_ext_out call_int_this call_int_other begin_return_mac return_mac alloc_auto_adj enable_op shorten_stack ext_entry int_entry op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ check_star_name_$path com_err_ cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr_rel get_system_free_area_ hcs_$reset_ips_mask hcs_$set_ips_mask iox_$attach_ptr iox_$close iox_$destroy_iocb iox_$detach_iocb iox_$find_iocb iox_$look_iocb iox_$move_attach iox_$open requote_string_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$badstar error_table_$noarg error_table_$nostars iox_$user_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 60 000315 61 000320 62 000321 11 000324 121 000343 122 000346 123 000350 124 000353 127 000354 130 000373 131 000376 132 000400 135 000401 138 000420 139 000423 140 000425 141 000426 143 000427 146 000446 147 000451 148 000453 152 000454 155 000473 156 000476 157 000501 159 000502 160 000503 161 000504 162 000505 163 000506 164 000515 165 000521 166 000546 168 000547 169 000556 172 000562 174 000565 175 000574 177 000602 178 000612 179 000631 180 000637 181 000660 182 000661 183 000700 184 000703 185 000727 187 000731 188 000755 189 000762 190 001014 192 001016 193 001017 194 001024 195 001035 196 001036 197 001054 198 001072 200 001103 201 001135 203 001137 204 001140 205 001142 206 001167 208 001171 209 001173 210 001220 212 001222 213 001224 215 001254 216 001301 219 001303 220 001305 222 001311 224 001314 225 001320 226 001335 227 001340 228 001372 229 001420 233 001422 234 001424 235 001434 236 001436 237 001442 240 001446 241 001452 242 001476 247 001500 248 001506 249 001510 250 001513 251 001534 252 001537 253 001557 255 001561 256 001562 257 001564 258 001610 259 001613 260 001642 263 001644 264 001677 265 001721 266 001724 267 001752 270 001754 271 002037 272 002131 275 002165 276 002214 277 002217 278 002252 279 002264 281 002266 282 002305 283 002310 284 002343 285 002355 286 002367 288 002371 289 002404 290 002413 291 002415 295 002416 297 002420 300 002442 302 002454 303 002460 305 002467 307 002470 311 002477 313 002500 314 002535 315 002540 316 002541 317 002545 318 002551 319 002600 323 002602 324 002605 326 002607 329 002611 330 002615 502 002617 333 002620 335 002626 338 002643 341 002663 342 002670 343 002675 345 002702 347 002713 348 002720 349 002725 351 002731 356 002732 360 002733 362 002747 364 002762 365 002771 367 002773 368 003026 369 003051 370 003054 371 003102 374 003103 375 003117 377 003125 379 003130 380 003132 381 003134 382 003135 383 003136 385 003140 386 003142 387 003146 388 003147 389 003151 391 003152 392 003153 394 003155 396 003156 398 003170 403 003171 408 003177 409 003203 410 003235 411 003265 412 003303 417 003304 419 003320 420 003324 421 003325 422 003336 423 003345 424 003347 426 003350 427 003360 428 003362 430 003363 431 003374 432 003401 433 003404 434 003410 439 003411 440 003415 441 003420 442 003430 443 003433 444 003443 445 003452 446 003453 448 003454 450 003471 453 003472 457 003473 458 003507 460 003527 462 003543 469 003544 471 003545 472 003554 473 003557 474 003566 475 003570 476 003571 477 003575 478 003600 479 003607 480 003611 482 003612 483 003617 486 003623 487 003630 488 003633 489 003635 490 003645 491 003661 492 003675 496 003702 498 003706 505 003707 ----------------------------------------------------------- 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