COMPILATION LISTING OF SEGMENT gcos_tss_build_library Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/09/85 1151.8 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 /* format: style1,^inddcls,ind4 */ 7 gcos_tss_build_library: gtbl: proc; 8 /**** Build or update the GTSS fast load software library from 9* all or selected parts of GCOS software files (native or GES) 10* and update the GTSS program descriptors. 11* 12* Based on the command "gcos_lib_obtain_modules" or "glom" 13* 14* Usage: gtbl INPUT_LIBS {-control_args} 15* 16* INPUT_LIBS are paths of one or more gcos software files 17* the files may be either native GCOS or simulator format 18* -control_args := -module_file PATH, -mf PATH 19* a segment containing a list of modules 20* to be moved from INPUT_LIBS to output 21* -modules STR..., -mods STR... 22* names of modules to be moved 23* -program_descriptors PATH, -prgdes PATH 24* path of a gtss_prgdes_alm_.incl.alm to be updated 25* -output_library PATH, -olb PATH 26* path of the gtss_fast_library_ 27* -print_catalog, -prcat 28* print contents of GES format INPUT_LIBS 29* -brief, -bf 30* don't print catalog or modules moved 31* 32* 33* Created: Dave Ward 78-04-18 As glom 34* Modified: Ron Barstad 83-03-03 1.0 Changed name to gtbl, added version 1.0 35* Changed to standard or current conventions 36* Changed command line 37* -cf to -module_file 38* -nm to -modules 39* -ol to -output_library 40* -no_cat to -format 41* added -program_descriptors 42* deleted -olli 43* Changed reference to XIO to gcos_xio_ 44* Changed reference to HASH to gfms_hash_ 45* Moved inits from dcl to procedure 46* Changed gtss_bcd_ascii_ calls to gfms_bcd_ascii_ 47* Fixed msf boundry bug, each object wholly contained in a segment. 48* Added prgdes update functionality 49* 50* 51* Modified: Ron Barstad 83-04-14 1.1 Removed need for -format, determine this 52* by inspection 53**/ 54 55 /**** P R O C E D U R E */ 56 57 call cu_$arg_count (nargs, e); 58 if e = 0 & nargs < 1 then e = error_table_$noarg; 59 if e ^= 0 then do; 60 call com_err_ (e, ME, "^/Usage: gtbl INPUT_LIBS {-control_args}"); 61 return; 62 end; 63 on condition (cleanup) call closer; 64 65 /**** Initialize */ 66 /* format: off */ 67 all_mods = TRUE; 68 brief = FALSE; 69 get_mod_name = FALSE; 70 need_1_mod_name = FALSE; 71 no_cat = FALSE; 72 prgdes = FALSE; 73 open_prgdes = FALSE; 74 have_output_lib = FALSE; 75 process_mf = FALSE; 76 process_ol = FALSE; 77 pr_cat = FALSE; 78 79 catl = 1000; /* length of catalog at front of GES format lib. */ 80 catl_parm = 0; 81 cc = -1; 82 copy_names.start = 0; 83 dcwbc = 0; 84 init_nm = 0; 85 libc = 0; 86 msw = sys_info$max_seg_size; 87 ndcw = 1; 88 obj_num = 0; 89 outc = -1; 90 outl = 0; 91 wdl = 0; 92 copy_names.nm = 0; 93 lib_stack.libn = 0; 94 95 input_lib_path = "NONE"; 96 output_lib_path = "NONE"; 97 path = "NONE"; 98 prgdes_path = "NO_PRGDES"; 99 100 mf_fcbp = null(); 101 lib_fcbp = null(); 102 out_fcbp = null(); 103 prgdes_fcbp = null(); 104 outp = null(); 105 dcwbp = null(); 106 eo_word_loc = null(); 107 reloc_word_loc = null(); 108 rd_word_loc = null(); 109 dcw_loc = null(); 110 111 call date_time_ (clock_(), run_date); 112 /* format: on */ 113 114 /* Process command line */ 115 116 do arg_num = 1 to nargs; 117 call cu_$arg_ptr (arg_num, ap, al, e); 118 if e ^= 0 then do; 119 call com_err_ (e, ME, "Argument ^i", arg_num); 120 goto close_files; 121 end; 122 if al < 1 then do; 123 call com_err_ (error_table_$bad_arg, ME, "Zero length parameter (^i). Quitting.", arg_num); 124 goto close_files; 125 end; 126 if substr (arg, 1, 1) = "-" then get_mod_name = FALSE; 127 if get_mod_name then do; 128 need_1_mod_name = FALSE; /* Regulates reporting name missing. */ 129 call next_mod_name (ap, al); 130 end; 131 else 132 if process_mf then call get_module_file; /* Obtain control file and names therein. */ 133 else 134 if process_ol then call get_out_lib; /* Obtain output file. */ 135 else 136 if open_prgdes then call get_prgdes_file; 137 else 138 if (arg = "-prgdes") | (arg = "-program_descriptors") then open_prgdes = TRUE; 139 else 140 if (arg = "-bf") | (arg = "-brief") then brief = TRUE; 141 else 142 if (arg = "-module_file") | (arg = "-mf") then process_mf = TRUE; 143 else 144 if (arg = "-output_library") | (arg = "-olb") then process_ol = TRUE; 145 else 146 if (arg = "-print_catalog") | (arg = "-prcat") then pr_cat = TRUE; 147 else 148 if (arg = "-modules") | (arg = "-mods") | (arg = "-module") | (arg = "-mod") 149 then get_mod_name, need_1_mod_name = TRUE; 150 else 151 if substr (arg, 1, 1) = "-" then do; 152 call com_err_ (error_table_$badopt, ME, 153 "Unknown option ""^a"". Quitting.", arg); 154 goto close_files; 155 end; 156 else 157 call stack_lib_path; 158 end; 159 160 /**** Verify that caller's parameters are acceptable. */ 161 if libn < 1 then do; 162 call com_err_ (error_table_$noarg, ME, "At least one input library must be specified. Quitting."); 163 goto close_files; 164 end; 165 if need_1_mod_name then do; 166 call com_err_ (error_table_$noarg, ME, "Missing module name for -modules. Quitting."); 167 goto close_files; 168 end; 169 if open_prgdes then do; 170 call com_err_ (error_table_$noarg, ME, "No path supplied for -prgdes. Quitting."); 171 goto close_files; 172 end; 173 if process_mf then do; 174 call com_err_ (error_table_$noarg, ME, "No module path supplied for -module_file. Quitting."); 175 goto close_files; 176 end; 177 if process_ol then do; 178 call com_err_ (error_table_$noarg, ME, "Missing output path for -output_library. Quitting."); 179 goto close_files; 180 end; 181 182 /**** check for some possibly incompatable parameters */ 183 if prgdes & ^have_output_lib 184 then call ioa_$ioa_stream ("error_output", 185 "^/Warning: no output library was specified, the program descriptors will not be updated."); 186 else if ^prgdes & have_output_lib 187 then call ioa_$ioa_stream ("error_output", 188 "^/Warning: the output library will be updated but no program descriptor file was specified."); 189 190 /**** give run date_time */ 191 if prgdes then call ioa_ ("Updated program descriptors will be labeled ""^a"".", run_date); 192 193 /**** Process input libraries. */ 194 max_dcw_count = 2 ** length (addr (i) -> dcw.count);/* Constant => if count=0. */ 195 init_nm = nm; 196 if nm > 0 then all_mods = FALSE; /* Specific modules selected. */ 197 libc = 0; /* Current library. */ 198 199 next_input_library: ; 200 libc = libc + 1; 201 if libc > libn then do; /* All input libraries processed. */ 202 if nm > 0 then do; 203 if nm = 1 then 204 call ioa_$ioa_stream ("error_output", 205 "Specified module not found on input libraries."); 206 else 207 call ioa_$ioa_stream ("error_output", 208 "^i specified modules not found on input libraries.", nm); 209 if ^brief then do; 210 j = 0; 211 do k = 1 to init_nm; 212 if link (k) > -1 then do; 213 j = j + 1; 214 call ioa_$ioa_stream ("error_output", "^4i. ""^a""", j, mod_name (k)); 215 end; 216 end; 217 end; 218 end; 219 goto close_files; 220 end; 221 if get_input_lib () then goto next_input_library; /* Could not obtain it. */ 222 /*** look at the first word of the library to see if it is native gcos or simulator format */ 223 if cp (0) -> just_a_word = "0"b 224 then catl = 1000; /* simulator library */ 225 else catl = 0; /* native gcos format */ 226 if pr_cat then call print_catalog; 227 if (brief) & (out_fcbp = null ()) & (nm = 0) then goto next_input_library; 228 229 next_dcw_block: ; 230 fw = fw + obj_len; 231 rl = rl - obj_len; 232 if rl > 0 then dcwbp = addrel (dcwbp, obj_len); 233 else 234 if word (catl + fw, dcwbp, rl, cc) then goto next_input_library; 235 236 /*** Obtain pointer to relocation bit word (3). */ 237 call get_dcw_block_word (3, reloc_word_loc); 238 239 /*** Locate name field on dcw block record. (4th word). */ 240 call get_dcw_block_word (4, name_loc); 241 call gfms_bcd_ascii_ (name_loc, 6, addr (name_chars)); 242 dcwbc = dcwbc + 1; /* Count of dcw blocks. */ 243 nl = search (name_chars, " ") - 1; 244 if nl < 0 then nl = length (name_chars); 245 246 call calculate_object_length (obj_len, total_dcw_count, initial_load_address); 247 if obj_len < 1 then do; 248 if (fw = 1) & (catl ^= 0) then do; 249 call ioa_$ioa_stream ("error_output", 250 "Attempting native GCOS format for ""^a"".", input_lib_path); 251 rl, obj_len, catl = 0; 252 goto next_dcw_block; 253 end; 254 call com_err_ (error_table_$improper_data_format, ME, 255 "Object length calculation negative for ""^a"". Library ""^a"" skipped.", 256 name_chars, input_lib_path); 257 goto next_input_library; 258 end; 259 260 if all_mods then f = TRUE; 261 else 262 f = lookup (obj_name); 263 if f then do; /* Object named in input library is a 264* module caller specified. */ 265 if ^have_output_lib 266 then do; 267 if ^brief then call ioa_ ("Found module ""^a"" in ^a.", name_chars, input_lib_path); 268 end; 269 else do; /* have output lib */ 270 if ^prgdes 271 then call copy_obj; 272 else do; /* have prgdes */ 273 if 0 = index (substr (prgdes_seg, start_prgdes, end_prgdes - start_prgdes), "," || obj_name) 274 then do; /* but prgdes doesn't have module */ 275 if ^brief 276 then call ioa_ ( 277 "Call name ""^a"" not found in ^a. Did not add module to ^a.", 278 name_chars, prgdes_path, output_lib_path); 279 end; 280 else /* have out lib, prgdes, and call name */ 281 call copy_obj; 282 end; 283 end; 284 /**** debug */ if Debug then do; 285 obj_num = obj_num + 1; 286 if obj_num = 1 then do; /* Output header. */ 287 call ioa_ ( 288 "^15xOBJECT DATA RELOC"); 289 call ioa_ ( 290 "^7xNAME^3x^3( WORDS^)^3xDCWS OBJECT COMP REMAIN PATH"); 291 end; 292 call ioa_ ( 293 "^4i. ""^a""^vx^7(^1x^6i^) ^a" 294 , obj_num /** Count of objects found. */ 295 , name_chars /** Name of object. */ 296 , max (0, 6 - nl) /** Align next field. */ 297 , obj_len /** No. words in object. */ 298 , data_wds /** No. data words. */ 299 , reloc_wds /** No. relocation words. */ 300 , ndcw /** No. DCW's. */ 301 , dcwbc /** Which object on library. */ 302 , cc /** Which msf component of library. */ 303 , rl /** Words remaining in component. */ 304 , input_lib_path /** Multics file name of library. */ 305 ); 306 end; 307 end; 308 if all_mods then goto next_dcw_block; 309 if nm > 0 then goto next_dcw_block; 310 311 close_files: ; 312 call closer; 313 return; 314 315 db: entry; 316 Debug = ^Debug; 317 return; 318 dcl Debug bit (1) static int init ("0"b); 319 320 /**** Command line processing procedures */ 321 get_module_file: proc; 322 e = open_file (arg, mf_fcbp); 323 if mf_fcbp ^= null () then 324 call msf_manager_$get_ptr (mf_fcbp, 0, USE_EXISTING_COMPONENTS, mfp, mfl, e); 325 if e ^= 0 then do; 326 call com_err_ (e, ME, "Module file ""^a"". Quitting.", path); 327 goto close_files; 328 end; 329 mfl = divide (mfl, 9, 24, 0); /* Number characters in control file. */ 330 process_mf = FALSE; 331 j = 1; 332 do while (j <= mfl); 333 k = search (substr (mf, j), NL); 334 if k < 1 then k = mfl - j + 2; 335 if k > 1 then call next_mod_name (addr (mfa (j)), k - 1); 336 j = j + k; 337 end; 338 end get_module_file; 339 340 get_prgdes_file: proc; 341 if prgdes then do; 342 call com_err_ (error_table_$inconsistent, ME, 343 "File ""^a"" already open for prgdes. Quitting.", prgdes_path); 344 goto close_files; 345 end; 346 prgdes_path = arg; 347 call expand_pathname_ (prgdes_path, prgdes_dir, prgdes_entry, e); 348 if e ^= 0 then goto bad_prgdes_path; 349 call initiate_file_ (prgdes_dir, prgdes_entry, RW_ACCESS, prgdes_seg_ptr, prgdes_bit_count, e); 350 if e ^= 0 then do; 351 bad_prgdes_path: call com_err_ (e, ME, "^/Program descriptor file ""^a"" not available. Quitting.", prgdes_path); 352 goto close_files; 353 end; 354 prgdes_seg_size = divide (prgdes_bit_count, 9, 24); 355 start_prgdes = index (prgdes_seg, "Program descriptor 1.") + 22; 356 end_prgdes = index (prgdes_seg, "Program descriptor end."); 357 reverse_PRGDES = reverse ("PRGDES "); 358 reverse_prog_desc = reverse ("Program descriptor "); 359 open_prgdes = FALSE; 360 prgdes = TRUE; 361 return; 362 end get_prgdes_file; 363 364 get_out_lib: proc; 365 if out_fcbp ^= null () then do; 366 call com_err_ (error_table_$inconsistent, ME, 367 "Output library ""^a"" already open. Quitting.", output_lib_path); 368 goto close_files; 369 end; 370 process_ol = FALSE; 371 have_output_lib = TRUE; 372 e = open_file (arg, out_fcbp); 373 output_lib_path = path; 374 if e ^= 0 then 375 if e = error_table_$noentry then do; /* New output. */ 376 outc = -1; /* so first output component will be 0 */ 377 call next_out_comp; 378 outp -> fast_lib_header.id = "gtssflib"; 379 outp -> fast_lib_header.num_objects = 0; 380 outl = FAST_LIB_HEADER_LENGTH; /* Position past the header. */ 381 return; 382 end; 383 else do; 384 out_fail: ; 385 call com_err_ (e, ME, 386 "Could not obtain output ""^a"". Quitting.", output_lib_path); 387 goto close_files; 388 end; 389 last_outc, outc = 0; /* init output msf component */ 390 e = 0; 391 do while (e = 0); /* Position to the end of the output library. */ 392 call msf_manager_$get_ptr (out_fcbp, outc, USE_EXISTING_COMPONENTS, outp, outl, e); 393 if outc = 0 then 394 if outp -> fast_lib_header.id ^= "gtssflib" then do; 395 call com_err_ (error_table_$improper_data_format, ME, 396 "Output library ""^a"" header not ""gtssflib"". Quitting.", 397 output_lib_path); 398 goto close_files; 399 end; 400 if e = 0 then do; 401 last_outc = outc; 402 last_outl = outl; 403 last_outp = outp; 404 outc = outc + 1; 405 end; 406 else 407 if e ^= error_table_$noentry then goto out_fail; 408 end; 409 outc = last_outc; 410 outp = last_outp; 411 outl = last_outl; 412 if mod (outl, 36) ^= 0 then do; 413 call com_err_ (e, ME, 414 "Component ^i of msf ""^a"" bit count (^i) not modulo 36. Quitting.", 415 outc, output_lib_path, outl); 416 goto close_files; 417 end; 418 outl = divide (outl, 36, 24, 0); 419 return; 420 421 dcl e fixed bin (35); /* error code */ 422 dcl last_outc fixed bin (24); 423 dcl last_outl fixed bin (24); 424 dcl last_outp ptr; 425 end get_out_lib; 426 427 stack_lib_path: proc; 428 /**** Stack pointer to and length of library pathname. */ 429 libn = libn + 1; 430 if libn > hbound (input_lib, 1) then do; 431 if (libn - 1) = hbound (input_lib, 1) then 432 call com_err_ (error_table_$too_many_names, ME, 433 "Only provision for ^i input libraries. None starting with ""^a"" used.", 434 hbound (input_lib, 1), arg); 435 end; 436 else do; 437 lib_name_loc (libn) = ap; 438 lib_name_len (libn) = al; 439 end; 440 return; 441 442 end stack_lib_path; 443 444 /**** Main procedures */ 445 calculate_object_length: proc (ol, tc, da); 446 /**** Set parameter (ol) to the total length of the next input 447* library object, i.e., length of dcw block (6 + number of dcw's) 448* plus the length of object data words and relocation words. 449* Set parameter (tc) to the total of the dcw count fields values. 450* Set parameter (da) to data address in first DCW. 451* */ 452 dcl ol fixed bin (24) parm; /* object length */ 453 dcl tc fixed bin (24) parm; /* total count, dcw content fields */ 454 dcl da fixed bin (24) parm; /* data address */ 455 456 call get_dcw_block_word (6, rd_word_loc); /* Obtain pointer to reloc/data words. */ 457 ndcw = 0; /* Count of DCW's. */ 458 t = 0; /* Totoal of DCW counts. */ 459 done_with_dcws = FALSE; 460 do dcw_index = 1 to 58 while (done_with_dcws = FALSE); 461 call get_dcw_block_word (6 + dcw_index, dcw_loc); 462 ndcw = ndcw + 1; 463 if count then t = t + fixed (count); 464 else t = t + max_dcw_count; 465 if dcw_index = 1 then da = fixed (data_address); 466 if action = "000"b then done_with_dcws = TRUE; 467 end; 468 tc = t; 469 ol = 6 + reloc_wds + data_wds + ndcw; 470 return; 471 472 dcl dcw_index fixed bin (24); 473 dcl done_with_dcws bit (1); 474 dcl t fixed bin (24); /* total count */ 475 end calculate_object_length; 476 477 closer: proc; 478 /**** Release spaces for file control blocks and terminate files. */ 479 480 if lib_fcbp ^= null () then 481 call msf_manager_$close (lib_fcbp); 482 if out_fcbp ^= null () then do; 483 /*** Set count of objects in file header. */ 484 call msf_manager_$get_ptr (out_fcbp, 0, USE_EXISTING_COMPONENTS, outp, (outl), e); 485 if e ^= 0 then 486 call com_err_ (e, ME, 487 "Unable to store number of objects (^i) in header.", obj_num); 488 else 489 outp -> fast_lib_header.num_objects = outp -> fast_lib_header.num_objects + obj_num; 490 call msf_manager_$adjust (out_fcbp, outc, outl * 36, "111"b, e); 491 if e ^= 0 then 492 call com_err_ (e, ME, 493 "Setting bit count to ^i words for ""^a"", component ^i", outl, output_lib_path, outc); 494 call msf_manager_$close (out_fcbp); 495 end; 496 if mf_fcbp ^= null () then 497 call msf_manager_$close (mf_fcbp); 498 if prgdes then do; 499 prgdes_bit_count = prgdes_seg_size * 9; /* 9 bits to a byte */ 500 call terminate_file_ (prgdes_seg_ptr, prgdes_bit_count, TERM_FILE_TRUNC_BC_TERM, e); /* e doesn't matter*/ 501 end; 502 return; 503 end closer; 504 505 copy_obj: proc; 506 /**** Copy to the output library. */ 507 508 calc_out_length: ; 509 if (msw - outl - OBJECT_HEADER_LENGTH - obj_len) < 1 then do; 510 call next_out_comp; 511 goto calc_out_length; 512 end; 513 out_length = msw - outl; /* Words remaining in current output component. */ 514 515 /*** Output object header. */ 516 out_ptr = addr (out (outl + 1)); /* Pointer to next output word. */ 517 out_ptr -> object_header.marker = MARKER; 518 out_ptr -> object_header.obj_name = obj_name; 519 out_ptr -> object_header.obj_len_wds = obj_len; 520 out_ptr = addr (out_ptr -> object_header.obj_word1); 521 out_length = out_length - OBJECT_HEADER_LENGTH; 522 f, outl = outl + OBJECT_HEADER_LENGTH; 523 out_ptr = addr (out (outl + 1)); /* Pointer to next output word. */ 524 525 in_ptr = dcwbp; /* Pointer to next input word. */ 526 remain_words = rl; 527 total_moved = 0; 528 in_length = obj_len; /* Words to move. */ 529 530 do while (in_length > 0); 531 words_moved = min (remain_words, in_length, out_length); /* Number of words to move. */ 532 chars_moved = words_moved * 4; /* Number of characters to move. */ 533 out_ptr -> move_seg = in_ptr -> move_seg; 534 outl = outl + words_moved; 535 in_length = in_length - words_moved; 536 if in_length > 0 then do; /* More to move. */ 537 total_moved = total_moved + words_moved; 538 out_length = out_length - words_moved; 539 if out_length > 0 then out_ptr = addr (out (msw - out_length + 1)); 540 else do; 541 call next_out_comp; 542 out_ptr = outp; 543 out_length = msw; 544 end; 545 remain_words = remain_words - words_moved; 546 if remain_words > 0 then in_ptr = addrel (in_ptr, words_moved); 547 else /* Position to next input library component. */ 548 if word (catl + fw + total_moved, in_ptr, remain_words, cc2) then do; 549 call com_err_ (error_table_$improper_data_format, ME, 550 "Move of object ""^a"" exceeded input library ""^a"" component ^i. Quitting", 551 name_chars, input_lib_path, nc); 552 goto close_files; 553 end; 554 end; 555 end; 556 557 if (reloc_abs) | (reloc_wds > 0) then 558 call com_err_ (error_table_$improper_data_format, ME, 559 "Warning, relocation specified (^1b ^i words) object ""^a"", library ""^a""", 560 reloc_abs, reloc_wds, obj_name, input_lib_path); 561 562 if total_dcw_count ^= data_words then /* Lengths differ. */ 563 call com_err_ (error_table_$improper_data_format, ME, 564 "Object ""^a"" total dcw count = ^i, data words = ^i (lib ^a).", 565 obj_name, total_dcw_count, data_wds, input_lib_path); 566 567 if ^brief then call ioa_ ("Added module ""^a"" from ^a.", name_chars, input_lib_path); 568 569 /**** now add entry to program descriptors */ 570 if prgdes then do; 571 /*** Obtain pointer to entry location word (5). */ 572 call get_dcw_block_word (5, eo_word_loc); 573 dcw_block_wds = 6 + ndcw; 574 initial_load_address = initial_load_address - 1024; /* Minus 2000 octal, related to GCOS usage. */ 575 if Debug then 576 if initial_load_address < 66 then /* => 102 octal. */ 577 call com_err_ (error_table_$improper_data_format, ME, 578 "Object ""^a"" biased entry = ^i (lib ^a).", 579 obj_name, initial_load_address, input_lib_path); 580 call update_prgdes (obj_name 581 , 1 /** Library number. */ 582 , fixed (outc, 24) /** Output component. */ 583 , f + dcw_block_wds /** Offset to object. */ 584 , data_words + initial_load_address /** Program size (words). */ 585 , fixed (data_words, 24) /** Object length (words). */ 586 , fixed (entry_loc) /** Entry point. */ 587 , initial_load_address /** Initial load address. */ 588 ); 589 end; 590 return; 591 592 dcl total_moved fixed bin (24); /* total words moved in this object */ 593 dcl dcw_block_wds fixed bin (24); 594 dcl f fixed bin (24); 595 dcl in_length fixed bin (24); /* words left in input seg */ 596 dcl out_length fixed bin (24); /* words left in output seg */ 597 dcl words_moved fixed bin (24); /* number of words moved from in to out segs */ 598 dcl chars_moved fixed bin (24); /* 4 times the words moved */ 599 dcl min builtin; 600 dcl move_seg char (chars_moved) based aligned; /* the Move Segment */ 601 dcl out (msw) bit (36) aligned based (outp); 602 dcl in_ptr ptr; 603 dcl out_ptr ptr; 604 dcl remain_words fixed bin (24); /* the number of words left in input to move */ 605 end copy_obj; 606 607 get_dcw_block_word: proc (n, p); 608 /**** Set (p) to n-th word of dcw block. */ 609 dcl n fixed bin (24) parm; /* dcw block word number */ 610 dcl p ptr parm; /* dcw ptr */ 611 offset = n - 1; 612 if rl > offset then do; 613 p = addrel (dcwbp, offset); 614 return; 615 end; 616 617 if word (catl + fw + offset, p, r, c) then do; 618 call com_err_ (error_table_$improper_data_format, ME, 619 "Input terminates with incomplete dcw block. Quitting."); 620 goto close_files; 621 end; 622 return; 623 624 dcl r fixed bin (24); 625 dcl c fixed bin (24); 626 dcl offset fixed bin (24); 627 end get_dcw_block_word; 628 629 get_input_lib: proc returns (bit (1)); 630 /**** Return TRUE if next input library could 631* NOT be obtained. 632**/ 633 fw = 1; /* First word. */ 634 obj_len = 0; /* Length of current object. */ 635 rl = 0; /* Remaining length of component segment. */ 636 if lib_fcbp ^= null () then /* Close last library. */ 637 call msf_manager_$close (lib_fcbp); 638 e = open_file (lib_name, lib_fcbp); 639 if e ^= 0 then do; 640 call com_err_ (e, ME, 641 "Library ""^a"" not available. Library skipped.", path); 642 return (TRUE); 643 end; 644 input_lib_path = path; 645 646 647 /*** Obtain list of pointers to components and their word lengths. */ 648 do nc = 0 to hbound (comp, 1); 649 cp (nc) = null (); 650 wl (nc) = 0; 651 call msf_manager_$get_ptr (lib_fcbp, nc, USE_EXISTING_COMPONENTS, cp (nc), bc, e); 652 if e ^= 0 then do; 653 if (e = error_table_$noentry) & (nc > 0) then return (FALSE); 654 call com_err_ (e, ME, 655 "Component ^i. ^a. Library skipped.", nc, input_lib_path); 656 return (TRUE); 657 end; 658 659 if mod (bc, 36) ^= 0 then do; 660 call com_err_ (error_table_$bad_file, ME, 661 "Component ^i of ^a bit count (^i) not multiple of 36. Library skipped.", 662 nc, input_lib_path, bc); 663 return (TRUE); 664 665 end; 666 wl (nc) = divide (bc, 36, 24, 0); 667 end; 668 call com_err_ (error_table_$bad_file, ME, 669 "Exceeded ^i components in ^a. Library skipped.", 670 hbound (comp, 1) + 1, input_lib_path); 671 return (TRUE); 672 673 dcl lib_name char (lib_name_len (libc)) based (lib_name_loc (libc)); 674 end get_input_lib; 675 676 lookup: proc (lookup_name) returns (bit (1)); 677 /**** Return TRUE if lookup_name is specified in module names list. */ 678 dcl lookup_name char (6) var parm; 679 k = gfms_hash_ ((lookup_name), hbound (start, 1) + 1); 680 ln = 0; 681 n = start (k); 682 do while (n > 0); /* Search linked list. */ 683 if lookup_name = mod_name (n) then do; /* Found. */ 684 if ln = 0 then start (k) = link (n); /* Start with next entry. */ 685 else link (ln) = link (n); /* Link around entry. */ 686 link (n) = -1; /* Mark entry found. */ 687 nm = nm - 1; /* Reduce name count. */ 688 return (TRUE); 689 end; 690 ln = n; /* Record last entry. */ 691 n = link (n); /* Proceed to next entry. */ 692 end; 693 return (FALSE); /* Not found. */ 694 695 dcl k fixed bin (24); 696 dcl n fixed bin (24); 697 dcl ln fixed bin (24); 698 end lookup; 699 700 next_mod_name: proc (p, l); 701 /**** Store next module name (upper cased) in hash list. 702**/ 703 dcl l fixed bin (24) parm; 704 dcl p ptr parm; 705 if l > 6 then call com_err_ (error_table_$bigarg, ME, 706 "Module name ""^a"" truncated to 6 characters.", name); 707 nm = nm + 1; 708 if nm > hbound (hash_list, 1) then do; 709 if (nm - 1) = hbound (hash_list, 1) then 710 call com_err_ (error_table_$too_many_names, ME, 711 "Only space for ^i module names. Names starting with ""^a"" lost.", 712 hbound (hash_list, 1), name); 713 end; 714 else do; 715 mod_name (nm) = translate (name 716 , "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 717 , "abcdefghijklmnopqrstuvwxyz" 718 ); 719 /*** Store name in hash list. */ 720 k = gfms_hash_ ((mod_name (nm)), hbound (start, 1) + 1); 721 link (nm) = start (k); 722 start (k) = nm; 723 end; 724 return; 725 dcl name char (l) based (p); 726 dcl k fixed bin (24); 727 end next_mod_name; 728 729 next_out_comp: proc; 730 /**** Obtain next output msf component. 731**/ 732 outc = outc + 1; 733 call msf_manager_$get_ptr (out_fcbp, outc, PROVIDE_NEW_COMPONENTS, outp, outl, e); 734 if e ^= 0 then do; 735 call com_err_ (e, ME, 736 "Can not obtain output ""^a"". Quitting.", output_lib_path); 737 goto close_files; 738 end; 739 if mod (outl, 36) ^= 0 then do; 740 call com_err_ (e, ME, 741 "Component ^i of msf ""^a"" bit count (^i) not modulo 36. Quitting.", 742 outc, output_lib_path, outl); 743 goto close_files; 744 end; 745 outl = divide (outl, 36, 24, 0); 746 return; 747 end next_out_comp; 748 749 open_file: proc (arg, fcbp) returns (fixed bin (35)); 750 /**** Set file control block pointer (fcbp) to 751* the msf file named by (arg). Return msf_manager error code. 752**/ 753 dcl arg char (*) parm; 754 dcl fcbp ptr parm; 755 l = length (arg); 756 k = search (reverse (arg), ">"); 757 if k > 0 then do; /* User supplied directory. */ 758 dir = substr (arg, 1, l - k); 759 msf = substr (arg, l - k + 2); 760 end; 761 else do; 762 if wdl = 0 then do; 763 wd = get_wdir_ (); 764 wdl = search (wd, " ") - 1; 765 if wdl < 0 then wdl = length (wd); 766 end; 767 dir = substr (wd, 1, wdl); 768 msf = arg; 769 end; 770 path = dir || ">" || msf; 771 /*** Open the input library file. */ 772 fcbp = null (); 773 call msf_manager_$open ((dir), (msf), fcbp, e); 774 return (e); 775 776 dcl dir char (168) var; 777 dcl e fixed bin (35); /* error code */ 778 dcl k fixed bin (24); /* position of > before enttry name */ 779 dcl l fixed bin (24); /* arg length of path */ 780 dcl msf char (32) var; 781 end open_file; 782 783 print_catalog: proc; 784 catp = null (); 785 if catl = 0 then 786 call ioa_ ("^/Library ^a appears to be native gcos and has no catalog.", input_lib_path); 787 else do; 788 catp = cp (0); 789 call ioa_ ("Catalog for ^a:", input_lib_path); 790 do i = 1 to catalog.no_ent; 791 call gfms_bcd_ascii_ (addr (catalog.elements (i).name), 6, addr (name_chars)); 792 call ioa_ ("^4i.^-^a^-^o", i, name_chars, catalog.elements (i).address); 793 end; 794 end; 795 return; 796 797 dcl i fixed bin (24); 798 dcl catp ptr; 799 800 dcl 1 catalog aligned based (catp), 801 2 fill fixed bin (24), 802 2 no_ent fixed bin (24), 803 2 elements (no_ent), 804 3 name bit (36), 805 3 address fixed bin (24); 806 807 end print_catalog; 808 809 update_prgdes: proc (call_name, lib_num, comp_num, offset, prog_size, load_size, entry_pt, load_addr); 810 /**** Update prgdes_path with program descriptor info for call_name 811* The seg named by prgdes_path (which is a copy of gtss_prgdes_alm_.incl.alm) 812* MUST be in the following format: 813* 814*1---------------------------------------------------------------------------- 815* 816*segdef prgdes 817*prgdes: null 818* 819*" Program descriptor 1. 820*CARD: PRGDES 0,0,0,0,0,0,0, 821* card,(CARDCL,1),,.BCMCL 822* 823*label: PRGDES 824* STR1,STR2,{,STRi} 825*" Program descriptor . 826*CMDL: PRGDES 827* cmdl,EXPCL,.TSCLD,.BEXEC,LODX MUST BE LAST DESCR. 828*" Program descriptor end. 829* 830* end 831*---------------------------------------------------------------------------- 832* 833* Notes: 834* label: is optional. 835* STR1 etc. are optional. 836* The are for the module . 837* Although, is third arg of the second line, 838* it is also the only occurance on that line. That is, 839* the string "" is unique in any one prog. desc. 840* The are either all zero (as in the first 841* one) or are these values 842* 1. library number, always 1 843* 2. component number of the output library 844* 3. offset of this object in this component 845* 4. the program size 846* 5. the load size 847* 6. the address of the entry point 848* 7. the initial load address 849* 850* This routine replaces all the program descriptors in prgdes_path 851* which contain the given call name. 852* 853* The eight parameters to this procedure are the call name and the 854* seven numbers required for the program descriptor. 855**/ 856 dcl call_name char (6) var parm; 857 dcl lib_num fixed bin (24) parm; 858 dcl comp_num fixed bin (24) parm; 859 dcl offset fixed bin (24) parm; 860 dcl prog_size fixed bin (24) parm; 861 dcl load_size fixed bin (24) parm; 862 dcl entry_pt fixed bin (24) parm; 863 dcl load_addr fixed bin (24) parm; 864 865 /* Initialize */ 866 found_name = FALSE; 867 current_prgdes = start_prgdes; 868 prgdes_inc = 0; 869 /*** For each match of the call name, back up and replace the program descriptors */ 870 do while (current_prgdes < end_prgdes); 871 /*** find next reference to call name */ 872 current_prgdes_size = end_prgdes - current_prgdes; 873 rel_next_name = index (substr (prgdes_seg, current_prgdes, current_prgdes_size), "," || call_name); 874 if rel_next_name = 0 then goto prgdes_done; /* call name not found */ 875 next_name = rel_next_name + current_prgdes; /* now absolute */ 876 if verify (substr (prgdes_seg, next_name + length (call_name), 1), VALID_FOL_CHAR) ^= 0 877 then goto get_next_prgdes; 878 /*** locate the old prgdes */ 879 old_prgdes_last_char = next_name 880 - index (reverse (substr (prgdes_seg, current_prgdes, rel_next_name)), NL) - 1; 881 prgdes_first_char = old_prgdes_last_char 882 - index (reverse (substr (prgdes_seg, current_prgdes, old_prgdes_last_char - current_prgdes)) 883 , reverse_PRGDES) + 1; 884 old_prgdes_size = old_prgdes_last_char - prgdes_first_char + 1; 885 if (old_prgdes_size < 1) then do; 886 call com_err_ (error_table_$improper_data_format, ME, 887 "Cannot find program descriptors for ""^a"" in ^a. Check format.", call_name, prgdes_path); 888 goto close_files; 889 end; 890 /*** build the new prgdes */ 891 if substr (prgdes_seg, prgdes_first_char, 1) = "0" /* lib=0 */ 892 then update_type = "Added"; 893 else update_type = "Replaced"; 894 if ^found_name then 895 call ioa_$rsnnl ("^7(^i,^) "" ^a by gtbl on ^a", 896 new_prgdes, new_prgdes_size, 897 libn, comp_num, offset, prog_size, load_size, entry_pt, load_addr, 898 update_type, run_date); 899 found_name = TRUE; 900 /*** WHEW! Now comes the easy part: updating the seg with the new prgdes */ 901 prgdes_inc = new_prgdes_size - old_prgdes_size; 902 if prgdes_inc > 0 903 then do; /* hole is too small */ 904 prgdes_move_len = prgdes_seg_size - old_prgdes_last_char; 905 prgdes_seg_size = prgdes_seg_size + prgdes_inc; 906 call mrl_ (addcharno (prgdes_seg_ptr, old_prgdes_last_char), prgdes_move_len, 907 addcharno (prgdes_seg_ptr, old_prgdes_last_char + prgdes_inc), prgdes_move_len); 908 end; 909 /*** now move it in */ 910 substr (prgdes_seg, prgdes_first_char, new_prgdes_size) = new_prgdes; 911 if prgdes_inc < 0 /* hole was too big! blank out rest */ 912 then substr (prgdes_seg, prgdes_first_char + new_prgdes_size, -prgdes_inc) = " "; 913 if ^brief then do; 914 /*** figure out which prgdes this is */ 915 this_prgdes = old_prgdes_last_char 916 - index (reverse (substr (prgdes_seg, current_prgdes, old_prgdes_last_char - current_prgdes)), 917 reverse_prog_desc) + 1; 918 this_prgdes_num = substr (prgdes_seg, this_prgdes, index (substr (prgdes_seg, this_prgdes, 4), ".") - 1); 919 call ioa_ ("^a program descriptor ^a for ""^a"".", 920 update_type, this_prgdes_num, call_name); 921 end; 922 if Debug then call ioa_ ("^a^-^a", call_name, new_prgdes); 923 get_next_prgdes: ; 924 /*** move up to next prgdes and continue */ 925 if prgdes_inc < 0 then prgdes_inc = 0; 926 end_prgdes = end_prgdes + prgdes_inc; 927 current_prgdes = next_name + prgdes_inc + index (substr (prgdes_seg, next_name + prgdes_inc), NL) + 1; 928 prgdes_inc = 0; 929 end; 930 prgdes_done: 931 if ^found_name then 932 if ^brief then 933 call ioa_$ioa_stream ("error_output", 934 "Call name ""^a"" not found in ^a. Module WAS added to ^a", call_name, prgdes_path, output_lib_path); 935 return; 936 937 dcl current_prgdes fixed bin (24); 938 dcl current_prgdes_size fixed bin (24); 939 dcl found_name bit (1); 940 dcl new_prgdes char (100) varying; 941 dcl new_prgdes_size fixed bin (24); 942 dcl next_name fixed bin (24); 943 dcl old_prgdes_last_char fixed bin (24); 944 dcl old_prgdes_size fixed bin (24); 945 dcl prgdes_first_char fixed bin (24); 946 dcl prgdes_inc fixed bin (24); 947 dcl prgdes_move_len fixed bin (24); 948 dcl rel_next_name fixed bin (24); 949 dcl this_prgdes fixed bin (24); 950 dcl this_prgdes_num char (3) var; 951 dcl update_type char (8) varying; 952 953 end update_prgdes; 954 955 word: proc (w, p, l, c) returns (bit (1)); 956 /**** Set pointer (p) to word (w) of input msf and 957* set the length (l) to number of words available 958* in component segment. 959* Set (c) to the number of the msf component 960* in which the word was found. 961* Return FALSE; 962* 963* Return TRUE if word (w) not available. 964* */ 965 dcl c fixed bin (24) parm; 966 dcl l fixed bin (24) parm; 967 dcl p ptr parm; 968 dcl w fixed bin (24) parm; 969 c = -1; 970 if w < 1 then return (TRUE); 971 k = 0; 972 do i = 0 to nc; 973 k = k + wl (i); 974 if w <= k then do; /* Component located. */ 975 l = k - w + 1; 976 p = addrel (cp (i), wl (i) - l); 977 c = i; 978 return (FALSE); 979 end; 980 end; 981 return (TRUE); 982 983 dcl i fixed bin (24); 984 dcl k fixed bin (24); 985 end word; 986 987 /* Constants */ 988 dcl ME char (28) static int options (constant) init ("gcos_tss_build_library (1.1)"); 989 dcl TRUE bit (1) static int options (constant) init ("1"b); 990 dcl FALSE bit (1) static int options (constant) init ("0"b); 991 dcl MARKER bit (36) static int options (constant) init ("101100011111000000001111111111111000"b); 992 dcl USE_EXISTING_COMPONENTS bit (1) static int options (constant) init ("0"b); 993 dcl PROVIDE_NEW_COMPONENTS bit (1) static int options (constant) init ("1"b); 994 dcl NL char (1) static int options (constant) init (" 995 "); 996 dcl FAST_LIB_HEADER_LENGTH fixed bin (24) static int options (constant) init (4); 997 dcl OBJECT_HEADER_LENGTH fixed bin (24) static int options (constant) init (5); 998 dcl VALID_FOL_CHAR char (4) static int options (constant) init (", 999 "); /* comma, space, tab, new line */ 1000 1001 /**** builtins, conditions, entries, externals (non-variables) */ 1002 1003 dcl (addcharno, 1004 addr, 1005 addrel, 1006 divide, 1007 fixed, 1008 hbound, 1009 index, 1010 length, 1011 max, 1012 mod, 1013 null, 1014 reverse, 1015 search, 1016 substr, 1017 translate, 1018 verify) builtin; 1019 1020 dcl cleanup condition; 1021 1022 dcl clock_ entry () returns (fixed bin (71)); 1023 dcl com_err_ entry options (variable); 1024 dcl cu_$arg_count entry (fixed bin (24), fixed bin (35)); 1025 dcl cu_$arg_ptr entry (fixed bin (24), ptr, fixed bin (24), fixed bin (35)); 1026 dcl date_time_ entry (fixed bin (71), char (*)); 1027 dcl expand_pathname_ entry (char (*), char (*), char (*), fixed bin (35)); 1028 dcl get_wdir_ entry returns (char (168)); 1029 dcl gfms_bcd_ascii_ entry (ptr, fixed bin (24), ptr); 1030 dcl gfms_hash_ entry (char (*), fixed bin (24)) returns (fixed bin (35)); 1031 dcl initiate_file_ entry (char (*), char (*), bit (*), ptr, fixed bin (24), fixed bin (35)); 1032 dcl ioa_ entry options (variable); 1033 dcl ioa_$ioa_stream entry options (variable); 1034 dcl ioa_$rsnnl entry () options (variable); 1035 dcl mrl_ entry options (variable); 1036 dcl msf_manager_$adjust entry (ptr, fixed bin, fixed bin (24), bit (3), fixed bin (35)); 1037 dcl msf_manager_$close entry (ptr); 1038 dcl msf_manager_$get_ptr entry (ptr, fixed bin, bit (1), ptr, fixed bin (24), fixed bin (35)); 1039 dcl msf_manager_$open entry (char (*), char (*), ptr, fixed bin (35)); 1040 dcl terminate_file_ entry (ptr, fixed bin (24), bit (*), fixed bin (35)); 1041 1042 dcl (error_table_$bad_arg, 1043 error_table_$bad_file, 1044 error_table_$badopt, 1045 error_table_$bigarg, 1046 error_table_$improper_data_format, 1047 error_table_$inconsistent, 1048 error_table_$noarg, 1049 error_table_$noentry, 1050 error_table_$too_many_names) fixed bin (35) ext static; 1051 dcl sys_info$max_seg_size fixed bin (35) ext static; 1052 1053 /**** Variables for gtbl: 1054* IDENTIFIER ATTRIBUTES */ 1055 1056 dcl al fixed bin (24); 1057 dcl all_mods bit (1); 1058 dcl ap ptr; 1059 dcl arg char (al) based (ap); 1060 dcl arg_num fixed bin (24); 1061 dcl bc fixed bin (24); 1062 dcl brief bit (1); 1063 dcl catl fixed bin (24); 1064 dcl catl_parm fixed bin (24); 1065 dcl cc fixed bin (24); 1066 dcl cc2 fixed bin (24); 1067 dcl dcwbc fixed bin (24); 1068 dcl e fixed bin (35); 1069 dcl end_prgdes fixed bin (24); 1070 dcl f bit (1); 1071 dcl fw fixed bin (24); 1072 dcl get_mod_name bit (1); 1073 dcl have_output_lib bit (1); 1074 dcl i fixed bin (24); 1075 dcl initial_load_address fixed bin (24); 1076 dcl init_nm fixed bin (24); 1077 dcl input_lib_path char (168) var; 1078 dcl j fixed bin (24); 1079 dcl k fixed bin (24); 1080 dcl libc fixed bin (24); /* current input library number */ 1081 dcl lib_fcbp ptr; 1082 dcl max_dcw_count fixed bin (24); 1083 dcl mf char (mfl) based (mfp); /* module file */ 1084 dcl mfa (mfl) char (1) based (mfp); 1085 dcl mfl fixed bin (24); 1086 dcl mfp ptr; 1087 dcl mf_fcbp ptr; 1088 dcl msw fixed bin (24); /* max seg words */ 1089 dcl nargs fixed bin (24); 1090 dcl name_loc ptr; 1091 dcl nc fixed bin; 1092 dcl ndcw fixed bin (24); 1093 dcl need_1_mod_name bit (1); 1094 dcl no_cat bit (1); 1095 dcl obj_len fixed bin (24); 1096 dcl obj_name char (6) var based (addr (nl)); 1097 dcl obj_num fixed bin (24); 1098 dcl prgdes bit (1); 1099 dcl prgdes_bit_count fixed bin (24); 1100 dcl prgdes_dir char (168); 1101 dcl prgdes_entry char (32); 1102 dcl prgdes_fcbp ptr; 1103 dcl prgdes_path char (168); 1104 dcl prgdes_seg char (prgdes_seg_size) based (prgdes_seg_ptr); 1105 dcl prgdes_seg_ptr ptr; 1106 dcl prgdes_seg_size fixed bin (24); /* number of chars in prgdes seg */ 1107 dcl process_mf bit (1); 1108 dcl process_ol bit (1); 1109 dcl open_prgdes bit (1); 1110 dcl outc fixed bin; /* output lib component num */ 1111 dcl outl fixed bin (24); /* output lib word length */ 1112 dcl outp ptr; /* output lib pointer */ 1113 dcl output_lib_path char (168) var; 1114 dcl out_fcbp ptr; 1115 dcl path char (168) var; 1116 dcl pr_cat bit (1); 1117 dcl reverse_PRGDES char (8); /* PRGDES spelled backwards */ 1118 dcl reverse_prog_desc char (19); /* Program descriptor backwards */ 1119 dcl rl fixed bin (24); 1120 dcl run_date char (16); /* don't want time zone and day */ 1121 dcl start_prgdes fixed bin (24); 1122 dcl total_dcw_count fixed bin (24); 1123 dcl wd char (168); /* working dir */ 1124 dcl wdl fixed bin (24); /* working dir length */ 1125 dcl just_a_word bit (36) based; 1126 1127 1128 /* format: off */ 1129 dcl 1 object_name_structure, 1130 2 nl fixed bin(24), /* Number characters in Name. */ 1131 2 name_chars char(6); 1132 1133 1134 dcl 1 msf aligned 1135 , 2 nc fixed bin(24) /* Number of components. */ 1136 , 2 comp (0:99) /* Components: */ 1137 , 3 cp ptr /* segment. */ 1138 , 3 wl fixed bin(24) /* number words. */ 1139 ; 1140 1141 dcl 1 copy_names 1142 , 2 nm fixed bin(24) /* Number of module names. */ 1143 , 2 start (0:1020)fixed bin(24)/* Hash start list. 1144* >0 => hash_list entry. */ 1145 , 2 hash_list (2000) 1146 , 3 link fixed bin(24) /* >0 => previous hash_list entry. */ 1147 , 3 mod_name char(6)var /* Module name. */ 1148 ; 1149 1150 dcl dcwbp ptr; 1151 dcl 1 dcw_block aligned based(dcwbp) 1152 , 2 data_check fixed bin(24) /* Checksum for data words. */ 1153 , 2 rel_check fixed bin(24) /* checksum for reloc words */ 1154 , 2 rel_abs bit(36) /* 6th bit = "1"b => relocatable. */ 1155 , 2 name bit(36) /* name of program (BCD). */ 1156 , 2 word5 1157 , 3 entry bit(18)unal /* entry address. */ 1158 , 3 origin bit(18)unal /* origin. */ 1159 , 2 word6 1160 , 3 reloc_words fixed bin(17)unal /* Number of relocation words. */ 1161 , 3 data_words fixed bin(17)unal /* Number of data words. */ 1162 , 2 dcws (ndcw)bit(36) 1163 ; 1164 1165 dcl eo_word_loc ptr; 1166 dcl 1 eo_word aligned based(eo_word_loc) 1167 , 2 entry_loc bit(18)unal 1168 , 2 origin_loc bit(18)unal 1169 ; 1170 1171 dcl reloc_word_loc ptr; 1172 dcl 1 reloc_word aligned based(reloc_word_loc) 1173 , 2 fill1 bit( 6)unal 1174 , 2 reloc_abs bit( 1)unal /* "1"b => relocatable. */ 1175 , 2 fill2 bit(29)unal 1176 ; 1177 1178 dcl rd_word_loc ptr; 1179 dcl 1 rd_word aligned based(rd_word_loc) 1180 , 2 reloc_wds fixed bin(17)unal 1181 , 2 data_wds fixed bin(17)unal 1182 ; 1183 1184 dcl dcw_loc ptr; 1185 dcl 1 dcw aligned based(dcw_loc) 1186 , 2 data_address bit(18)unal 1187 , 2 zero bit( 3)unal 1188 , 2 action bit( 3)unal 1189 , 2 count bit(12)unal 1190 ; 1191 1192 1193 dcl 1 lib_stack 1194 , 2 libn fixed bin(24) /* total number of input libraries */ 1195 , 2 input_lib (10) 1196 , 3 lib_name_loc ptr 1197 , 3 lib_name_len fixed bin(24) 1198 ; 1199 1200 dcl 1 fast_lib_header aligned based 1201 , 2 id char(8) 1202 , 2 num_objects pic "(8)9" 1203 ; 1204 1205 dcl 1 object_header aligned based 1206 , 2 marker bit(36) 1207 , 2 obj_name char(8)var 1208 , 2 obj_len_wds fixed bin(24) 1209 , 2 obj_word1 bit(36) 1210 ; 1211 1 1 /* BEGIN INCLUDE FILE gcos_xio_dcl_.incl.pl1 */ 1 2 /* 1 3* Created: Ron Barstad 83-03-04 based on dcl_XIO.incl.pl1 1 4**/ 1 5 dcl gcos_xio_$open entry( 1 6 /* 1. */ char(*) /* (input) Caller. */ 1 7 , /* 2. */ char(*) /* (input) Stream name. */ 1 8 , /* 3. */ char(*) /* (input) Mode: "input" | "output" */ 1 9 , /* 4. */ ptr /* (output) Pointer to file control block . */ 1 10 , /* 5. */ char(*)) /* (input) Segment pathname. */ 1 11 /* 6. */ returns(bit(1)) /* "1"b => failure. */; 1 12 1 13 dcl gcos_xio_$close entry( 1 14 /* 1. */ char(*) /* (input) Caller. */ 1 15 , /* 2. */ ptr) /* (input) Pointer to file control block. */ 1 16 /* 3. */ returns(bit(1)) /* "1"b => failure. */; 1 17 /* END INCLUDE FILE gcos_xio_dcl_.incl.pl1 */ 1212 1213 2 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 2 2 /* format: style2,^inddcls,idind32 */ 2 3 2 4 declare 1 terminate_file_switches based, 2 5 2 truncate bit (1) unaligned, 2 6 2 set_bc bit (1) unaligned, 2 7 2 terminate bit (1) unaligned, 2 8 2 force_write bit (1) unaligned, 2 9 2 delete bit (1) unaligned; 2 10 2 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 2 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 2 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 2 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 2 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 2 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 2 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 2 18 2 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 1214 1215 3 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 3 2* 3 3* Values for the "access mode" argument so often used in hardcore 3 4* James R. Davis 26 Jan 81 MCR 4844 3 5* Added constants for SM access 4/28/82 Jay Pattin 3 6* Added text strings 03/19/85 Chris Jones 3 7**/ 3 8 3 9 3 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 3 11 dcl ( 3 12 N_ACCESS init ("000"b), 3 13 R_ACCESS init ("100"b), 3 14 E_ACCESS init ("010"b), 3 15 W_ACCESS init ("001"b), 3 16 RE_ACCESS init ("110"b), 3 17 REW_ACCESS init ("111"b), 3 18 RW_ACCESS init ("101"b), 3 19 S_ACCESS init ("100"b), 3 20 M_ACCESS init ("010"b), 3 21 A_ACCESS init ("001"b), 3 22 SA_ACCESS init ("101"b), 3 23 SM_ACCESS init ("110"b), 3 24 SMA_ACCESS init ("111"b) 3 25 ) bit (3) internal static options (constant); 3 26 3 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 3 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 3 29 3 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 3 31 static options (constant); 3 32 3 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 3 34 static options (constant); 3 35 3 36 dcl ( 3 37 N_ACCESS_BIN init (00000b), 3 38 R_ACCESS_BIN init (01000b), 3 39 E_ACCESS_BIN init (00100b), 3 40 W_ACCESS_BIN init (00010b), 3 41 RW_ACCESS_BIN init (01010b), 3 42 RE_ACCESS_BIN init (01100b), 3 43 REW_ACCESS_BIN init (01110b), 3 44 S_ACCESS_BIN init (01000b), 3 45 M_ACCESS_BIN init (00010b), 3 46 A_ACCESS_BIN init (00001b), 3 47 SA_ACCESS_BIN init (01001b), 3 48 SM_ACCESS_BIN init (01010b), 3 49 SMA_ACCESS_BIN init (01011b) 3 50 ) fixed bin (5) internal static options (constant); 3 51 3 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 1216 1217 end gcos_tss_build_library; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1131.8 gcos_tss_build_library.pl1 >spec>on>41-15>gcos_tss_build_library.pl1 1212 1 06/09/83 1430.1 gcos_xio_dcl_.incl.pl1 >ldd>include>gcos_xio_dcl_.incl.pl1 1214 2 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.incl.pl1 1216 3 04/09/85 1109.7 access_mode_values.incl.pl1 >spec>on>41-15>access_mode_values.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. Debug 000010 internal static bit(1) initial unaligned dcl 318 set ref 284 316* 316 575 922 FALSE constant bit(1) initial unaligned dcl 990 ref 68 69 70 71 72 73 74 75 76 77 126 128 196 330 359 370 459 460 653 693 866 978 FAST_LIB_HEADER_LENGTH constant fixed bin(24,0) initial dcl 996 ref 380 MARKER 000002 constant bit(36) initial unaligned dcl 991 ref 517 ME 000004 constant char(28) initial unaligned dcl 988 set ref 60* 119* 123* 152* 162* 166* 170* 174* 178* 254* 326* 342* 351* 366* 385* 395* 413* 431* 485* 491* 549* 557* 562* 575* 618* 640* 654* 660* 668* 705* 709* 735* 740* 886* NL constant char(1) initial unaligned dcl 994 ref 333 879 927 OBJECT_HEADER_LENGTH constant fixed bin(24,0) initial dcl 997 ref 509 521 522 PROVIDE_NEW_COMPONENTS 000003 constant bit(1) initial unaligned dcl 993 set ref 733* RW_ACCESS 000000 constant bit(3) initial unaligned dcl 3-11 set ref 349* TERM_FILE_TRUNC_BC_TERM 000033 constant bit(3) initial unaligned dcl 2-15 set ref 500* TRUE 000003 constant bit(1) initial unaligned dcl 989 ref 67 137 139 141 143 145 147 260 360 371 466 642 656 663 671 688 899 970 981 USE_EXISTING_COMPONENTS 000105 constant bit(1) initial unaligned dcl 992 set ref 323* 392* 484* 651* VALID_FOL_CHAR 000001 constant char(4) initial unaligned dcl 998 ref 876 action 0(21) based bit(3) level 2 packed unaligned dcl 1185 ref 466 addcharno builtin function dcl 1003 ref 906 906 906 906 addr builtin function dcl 1003 ref 194 241 241 261 273 335 335 516 518 520 523 539 557 562 575 580 791 791 791 791 addrel builtin function dcl 1003 ref 232 546 613 976 address 3 based fixed bin(24,0) array level 3 dcl 800 set ref 792* al 000106 automatic fixed bin(24,0) dcl 1056 set ref 117* 122 126 129* 137 137 139 139 141 141 143 143 145 145 147 147 147 147 150 152 152 322 322 346 372 372 431 431 438 all_mods 000107 automatic bit(1) unaligned dcl 1057 set ref 67* 196* 260 308 ap 000110 automatic pointer dcl 1058 set ref 117* 126 129* 137 137 139 139 141 141 143 143 145 145 147 147 147 147 150 152 322 346 372 431 437 arg parameter char unaligned dcl 753 in procedure "open_file" ref 749 755 756 758 759 768 arg based char unaligned dcl 1059 in procedure "gtbl" set ref 126 137 137 139 139 141 141 143 143 145 145 147 147 147 147 150 152* 322* 346 372* 431* arg_num 000112 automatic fixed bin(24,0) dcl 1060 set ref 116* 117* 119* 123* bc 000113 automatic fixed bin(24,0) dcl 1061 set ref 651* 659 660* 666 brief 000114 automatic bit(1) unaligned dcl 1062 set ref 68* 139* 209 227 267 275 567 913 930 c 023347 automatic fixed bin(24,0) dcl 625 in procedure "get_dcw_block_word" set ref 617* c parameter fixed bin(24,0) dcl 965 in procedure "word" set ref 955 969* 977* call_name parameter varying char(6) dcl 856 set ref 809 873 876 886* 919* 922* 930* catalog based structure level 1 dcl 800 catl 000115 automatic fixed bin(24,0) dcl 1063 set ref 79* 223* 225* 233 248 251* 547 617 785 catl_parm 000116 automatic fixed bin(24,0) dcl 1064 set ref 80* catp 023516 automatic pointer dcl 798 set ref 784* 788* 790 791 791 792 cc 000117 automatic fixed bin(24,0) dcl 1065 set ref 81* 233* 292* cc2 000120 automatic fixed bin(24,0) dcl 1066 set ref 547* chars_moved 023330 automatic fixed bin(24,0) dcl 598 set ref 532* 533 533 cleanup 000100 stack reference condition dcl 1020 ref 63 clock_ 000014 constant entry external dcl 1022 ref 111 111 com_err_ 000016 constant entry external dcl 1023 ref 60 119 123 152 162 166 170 174 178 254 326 342 351 366 385 395 413 431 485 491 549 557 562 575 618 640 654 660 668 705 709 735 740 886 comp 2 000634 automatic structure array level 2 dcl 1134 set ref 648 668 comp_num parameter fixed bin(24,0) dcl 858 set ref 809 894* copy_names 001456 automatic structure level 1 unaligned dcl 1141 count 0(24) based bit(12) level 2 packed unaligned dcl 1185 ref 194 463 463 cp 2 000634 automatic pointer array level 3 dcl 1134 set ref 223 649* 651* 788 976 cu_$arg_count 000020 constant entry external dcl 1024 ref 57 cu_$arg_ptr 000022 constant entry external dcl 1025 ref 117 current_prgdes 023530 automatic fixed bin(24,0) dcl 937 set ref 867* 870 872 873 875 879 881 881 915 915 927* current_prgdes_size 023531 automatic fixed bin(24,0) dcl 938 set ref 872* 873 da parameter fixed bin(24,0) dcl 454 set ref 445 465* data_address based bit(18) level 2 packed unaligned dcl 1185 ref 465 data_wds 0(18) based fixed bin(17,0) level 2 packed unaligned dcl 1179 set ref 292* 469 562* data_words 5(18) based fixed bin(17,0) level 3 packed unaligned dcl 1151 ref 562 580 580 580 date_time_ 000024 constant entry external dcl 1026 ref 111 dcw based structure level 1 dcl 1185 dcw_block based structure level 1 dcl 1151 dcw_block_wds 023323 automatic fixed bin(24,0) dcl 593 set ref 573* 580 dcw_index 023310 automatic fixed bin(24,0) dcl 472 set ref 460* 461 465* dcw_loc 023164 automatic pointer dcl 1184 set ref 109* 461* 463 463 465 466 dcwbc 000121 automatic fixed bin(24,0) dcl 1067 set ref 83* 242* 242 292* dcwbp 023154 automatic pointer dcl 1150 set ref 105* 232* 232 233* 525 562 580 580 580 613 dir 023416 automatic varying char(168) dcl 776 set ref 758* 767* 770 773 divide builtin function dcl 1003 ref 329 354 418 666 745 done_with_dcws 023311 automatic bit(1) unaligned dcl 473 set ref 459* 460 466* e 000122 automatic fixed bin(35,0) dcl 1068 in procedure "gtbl" set ref 57* 58 58* 59 60* 117* 118 119* 322* 323* 325 326* 347* 348 349* 350 351* 484* 485 485* 490* 491 491* 500* 638* 639 640* 651* 652 653 654* 733* 734 735* 740* e 023471 automatic fixed bin(35,0) dcl 777 in procedure "open_file" set ref 773* 774 e 023266 automatic fixed bin(35,0) dcl 421 in procedure "get_out_lib" set ref 372* 374 374 385* 390* 391 392* 400 406 413* elements 2 based structure array level 2 dcl 800 end_prgdes 000123 automatic fixed bin(24,0) dcl 1069 set ref 273 356* 870 872 926* 926 entry_loc based bit(18) level 2 packed unaligned dcl 1166 ref 580 580 entry_pt parameter fixed bin(24,0) dcl 862 set ref 809 894* eo_word based structure level 1 dcl 1166 eo_word_loc 023156 automatic pointer dcl 1165 set ref 106* 572* 580 580 error_table_$bad_arg 000062 external static fixed bin(35,0) dcl 1042 set ref 123* error_table_$bad_file 000064 external static fixed bin(35,0) dcl 1042 set ref 660* 668* error_table_$badopt 000066 external static fixed bin(35,0) dcl 1042 set ref 152* error_table_$bigarg 000070 external static fixed bin(35,0) dcl 1042 set ref 705* error_table_$improper_data_format 000072 external static fixed bin(35,0) dcl 1042 set ref 254* 395* 549* 557* 562* 575* 618* 886* error_table_$inconsistent 000074 external static fixed bin(35,0) dcl 1042 set ref 342* 366* error_table_$noarg 000076 external static fixed bin(35,0) dcl 1042 set ref 58 162* 166* 170* 174* 178* error_table_$noentry 000100 external static fixed bin(35,0) dcl 1042 ref 374 406 653 error_table_$too_many_names 000102 external static fixed bin(35,0) dcl 1042 set ref 431* 709* expand_pathname_ 000026 constant entry external dcl 1027 ref 347 f 000124 automatic bit(1) unaligned dcl 1070 in procedure "gtbl" set ref 260* 261* 263 f 023324 automatic fixed bin(24,0) dcl 594 in procedure "copy_obj" set ref 522* 580 fast_lib_header based structure level 1 dcl 1200 fcbp parameter pointer dcl 754 set ref 749 772* 773* fixed builtin function dcl 1003 ref 463 465 580 580 580 580 580 580 found_name 023532 automatic bit(1) unaligned dcl 939 set ref 866* 894 899* 930 fw 000125 automatic fixed bin(24,0) dcl 1071 set ref 230* 230 233 248 547 617 633* get_mod_name 000126 automatic bit(1) unaligned dcl 1072 set ref 69* 126* 127 147* get_wdir_ 000030 constant entry external dcl 1028 ref 763 gfms_bcd_ascii_ 000032 constant entry external dcl 1029 ref 241 791 gfms_hash_ 000034 constant entry external dcl 1030 ref 679 720 hash_list 1776 001456 automatic structure array level 2 unaligned dcl 1141 set ref 708 709 709 709 have_output_lib 000127 automatic bit(1) unaligned dcl 1073 set ref 74* 183 186 265 371* hbound builtin function dcl 1003 ref 430 431 431 431 648 668 679 708 709 709 709 720 i 000130 automatic fixed bin(24,0) dcl 1074 in procedure "gtbl" set ref 194 i 023514 automatic fixed bin(24,0) dcl 797 in procedure "print_catalog" set ref 790* 791 791 792* 792* i 023612 automatic fixed bin(24,0) dcl 983 in procedure "word" set ref 972* 973 976 976 977* id based char(8) level 2 dcl 1200 set ref 378* 393 in_length 023325 automatic fixed bin(24,0) dcl 595 set ref 528* 530 531 535* 535 536 in_ptr 023332 automatic pointer dcl 602 set ref 525* 533 546* 546 547* index builtin function dcl 1003 ref 273 355 356 873 879 881 915 918 927 init_nm 000132 automatic fixed bin(24,0) dcl 1076 set ref 84* 195* 211 initial_load_address 000131 automatic fixed bin(24,0) dcl 1075 set ref 246* 574* 574 575 575* 580 580* initiate_file_ 000036 constant entry external dcl 1031 ref 349 input_lib 2 023166 automatic structure array level 2 unaligned dcl 1193 set ref 430 431 431 431 input_lib_path 000133 automatic varying char(168) dcl 1077 set ref 95* 249* 254* 267* 292* 549* 557* 562* 567* 575* 644* 654* 660* 668* 785* 789* ioa_ 000040 constant entry external dcl 1032 ref 191 267 275 287 289 292 567 785 789 792 919 922 ioa_$ioa_stream 000042 constant entry external dcl 1033 ref 183 186 203 206 214 249 930 ioa_$rsnnl 000044 constant entry external dcl 1034 ref 894 j 000206 automatic fixed bin(24,0) dcl 1078 set ref 210* 213* 213 214* 331* 332 333 334 335 335 336* 336 just_a_word based bit(36) unaligned dcl 1125 ref 223 k 023400 automatic fixed bin(24,0) dcl 726 in procedure "next_mod_name" set ref 720* 721 722 k 000207 automatic fixed bin(24,0) dcl 1079 in procedure "gtbl" set ref 211* 212 214* 333* 334 334* 335 335 336 k 023366 automatic fixed bin(24,0) dcl 695 in procedure "lookup" set ref 679* 681 684 k 023472 automatic fixed bin(24,0) dcl 778 in procedure "open_file" set ref 756* 757 758 759 k 023613 automatic fixed bin(24,0) dcl 984 in procedure "word" set ref 971* 973* 973 974 975 l 023473 automatic fixed bin(24,0) dcl 779 in procedure "open_file" set ref 755* 758 759 l parameter fixed bin(24,0) dcl 966 in procedure "word" set ref 955 975* 976 l parameter fixed bin(24,0) dcl 703 in procedure "next_mod_name" ref 700 705 705 705 709 709 715 last_outc 023267 automatic fixed bin(24,0) dcl 422 set ref 389* 401* 409 last_outl 023270 automatic fixed bin(24,0) dcl 423 set ref 402* 411 last_outp 023272 automatic pointer dcl 424 set ref 403* 410 length builtin function dcl 1003 ref 194 244 755 765 876 lib_fcbp 000212 automatic pointer dcl 1081 set ref 101* 480 480* 636 636* 638* 651* lib_name based char unaligned dcl 673 set ref 638* lib_name_len 4 023166 automatic fixed bin(24,0) array level 3 dcl 1193 set ref 438* 638 638 lib_name_loc 2 023166 automatic pointer array level 3 dcl 1193 set ref 437* 638 lib_num parameter fixed bin(24,0) dcl 857 ref 809 lib_stack 023166 automatic structure level 1 unaligned dcl 1193 libc 000210 automatic fixed bin(24,0) dcl 1080 set ref 85* 197* 200* 200 201 638 638 638 libn 023166 automatic fixed bin(24,0) level 2 dcl 1193 set ref 93* 161 201 429* 429 430 431 437 438 894* link 1776 001456 automatic fixed bin(24,0) array level 3 dcl 1141 set ref 212 684 685* 685 686* 691 721* ln 023370 automatic fixed bin(24,0) dcl 697 set ref 680* 684 685 690* load_addr parameter fixed bin(24,0) dcl 863 set ref 809 894* load_size parameter fixed bin(24,0) dcl 861 set ref 809 894* lookup_name parameter varying char(6) dcl 678 ref 676 679 683 marker based bit(36) level 2 dcl 1205 set ref 517* max builtin function dcl 1003 ref 292 292 max_dcw_count 000214 automatic fixed bin(24,0) dcl 1082 set ref 194* 464 mf based char unaligned dcl 1083 ref 333 mf_fcbp 000220 automatic pointer dcl 1087 set ref 100* 322* 323 323* 496 496* mfa based char(1) array unaligned dcl 1084 set ref 335 335 mfl 000215 automatic fixed bin(24,0) dcl 1085 set ref 323* 329* 329 332 333 334 mfp 000216 automatic pointer dcl 1086 set ref 323* 333 335 335 min builtin function dcl 599 ref 531 mod builtin function dcl 1003 ref 412 659 739 mod_name 1777 001456 automatic varying char(6) array level 3 dcl 1141 set ref 214* 683 715* 720 move_seg based char dcl 600 set ref 533* 533 mrl_ 000046 constant entry external dcl 1035 ref 906 msf 023474 automatic varying char(32) dcl 780 in procedure "open_file" set ref 759* 768* 770 773 msf 000634 automatic structure level 1 dcl 1134 in procedure "gtbl" msf_manager_$adjust 000050 constant entry external dcl 1036 ref 490 msf_manager_$close 000052 constant entry external dcl 1037 ref 480 494 496 636 msf_manager_$get_ptr 000054 constant entry external dcl 1038 ref 323 392 484 651 733 msf_manager_$open 000056 constant entry external dcl 1039 ref 773 msw 000222 automatic fixed bin(24,0) dcl 1088 set ref 86* 509 513 539 543 n parameter fixed bin(24,0) dcl 609 in procedure "get_dcw_block_word" ref 607 611 n 023367 automatic fixed bin(24,0) dcl 696 in procedure "lookup" set ref 681* 682 683 684 685 686 690 691* 691 name 2 based bit(36) array level 3 in structure "catalog" dcl 800 in procedure "print_catalog" set ref 791 791 name based char unaligned dcl 725 in procedure "next_mod_name" set ref 705* 709* 715 name_chars 1 000631 automatic char(6) level 2 packed unaligned dcl 1129 set ref 241 241 243 244 254* 267* 275* 292* 549* 567* 791 791 792* name_loc 000224 automatic pointer dcl 1090 set ref 240* 241* nargs 000223 automatic fixed bin(24,0) dcl 1089 set ref 57* 58 116 nc 000226 automatic fixed bin(17,0) dcl 1091 set ref 549* 648* 649 650 651* 651 653 654* 660* 666* 972 ndcw 000227 automatic fixed bin(24,0) dcl 1092 set ref 87* 292* 457* 462* 462 469 573 need_1_mod_name 000230 automatic bit(1) unaligned dcl 1093 set ref 70* 128* 147* 165 new_prgdes 023533 automatic varying char(100) dcl 940 set ref 894* 910 922* new_prgdes_size 023565 automatic fixed bin(24,0) dcl 941 set ref 894* 901 910 911 next_name 023566 automatic fixed bin(24,0) dcl 942 set ref 875* 876 879 927 927 nl 000631 automatic fixed bin(24,0) level 2 dcl 1129 set ref 243* 244 244* 261 273 292 292 518 557 562 575 580 nm 001456 automatic fixed bin(24,0) level 2 dcl 1141 set ref 92* 195 196 202 203 206* 227 309 687* 687 707* 707 708 709 715 720 721 722 no_cat 000231 automatic bit(1) unaligned dcl 1094 set ref 71* no_ent 1 based fixed bin(24,0) level 2 dcl 800 ref 790 null builtin function dcl 1003 ref 100 101 102 103 104 105 106 107 108 109 227 323 365 480 482 496 636 649 772 784 num_objects 2 based picture(8) level 2 dcl 1200 set ref 379* 488* 488 obj_len 000232 automatic fixed bin(24,0) dcl 1095 set ref 230 231 232 246* 247 251* 292* 509 519 528 634* obj_len_wds 4 based fixed bin(24,0) level 2 dcl 1205 set ref 519* obj_name based varying char(6) dcl 1096 in procedure "gtbl" set ref 261* 273 518 557* 562* 575* 580* obj_name 1 based varying char(8) level 2 in structure "object_header" dcl 1205 in procedure "gtbl" set ref 518* obj_num 000233 automatic fixed bin(24,0) dcl 1097 set ref 88* 285* 285 286 292* 485* 488 obj_word1 5 based bit(36) level 2 dcl 1205 set ref 520 object_header based structure level 1 dcl 1205 object_name_structure 000631 automatic structure level 1 unaligned dcl 1129 offset 023350 automatic fixed bin(24,0) dcl 626 in procedure "get_dcw_block_word" set ref 611* 612 613 617 offset parameter fixed bin(24,0) dcl 859 in procedure "update_prgdes" set ref 809 894* ol parameter fixed bin(24,0) dcl 452 set ref 445 469* old_prgdes_last_char 023567 automatic fixed bin(24,0) dcl 943 set ref 879* 881 881 884 904 906 906 906 906 915 915 old_prgdes_size 023570 automatic fixed bin(24,0) dcl 944 set ref 884* 885 901 open_prgdes 000401 automatic bit(1) unaligned dcl 1109 set ref 73* 135 137* 169 359* out based bit(36) array dcl 601 set ref 516 523 539 out_fcbp 000462 automatic pointer dcl 1114 set ref 102* 227 365 372* 392* 482 484* 490* 494* 733* out_length 023326 automatic fixed bin(24,0) dcl 596 set ref 513* 521* 521 531 538* 538 539 539 543* out_ptr 023334 automatic pointer dcl 603 set ref 516* 517 518 519 520* 520 523* 533 539* 542* outc 000402 automatic fixed bin(17,0) dcl 1110 set ref 89* 376* 389* 392* 393 401 404* 404 409* 413* 490* 491* 580 580 732* 732 733* 740* outl 000403 automatic fixed bin(24,0) dcl 1111 set ref 90* 380* 392* 402 411* 412 413* 418* 418 484 490 491* 509 513 516 522 522* 523 534* 534 733* 739 740* 745* 745 outp 000404 automatic pointer dcl 1112 set ref 104* 378 379 392* 393 403 410* 484* 488 488 516 523 539 542 733* output_lib_path 000406 automatic varying char(168) dcl 1113 set ref 96* 275* 366* 373* 385* 395* 413* 491* 735* 740* 930* p parameter pointer dcl 704 in procedure "next_mod_name" ref 700 705 709 715 p parameter pointer dcl 610 in procedure "get_dcw_block_word" set ref 607 613* 617* p parameter pointer dcl 967 in procedure "word" set ref 955 976* path 000464 automatic varying char(168) dcl 1115 set ref 97* 326* 373 640* 644 770* pr_cat 000537 automatic bit(1) unaligned dcl 1116 set ref 77* 145* 226 prgdes 000234 automatic bit(1) unaligned dcl 1098 set ref 72* 183 186 191 270 341 360* 498 570 prgdes_bit_count 000235 automatic fixed bin(24,0) dcl 1099 set ref 349* 354 499* 500* prgdes_dir 000236 automatic char(168) unaligned dcl 1100 set ref 347* 349* prgdes_entry 000310 automatic char(32) unaligned dcl 1101 set ref 347* 349* prgdes_fcbp 000320 automatic pointer dcl 1102 set ref 103* prgdes_first_char 023571 automatic fixed bin(24,0) dcl 945 set ref 881* 884 891 910 911 prgdes_inc 023572 automatic fixed bin(24,0) dcl 946 set ref 868* 901* 902 905 906 906 911 911 925 925* 926 927 927 928* prgdes_move_len 023573 automatic fixed bin(24,0) dcl 947 set ref 904* 906* 906* prgdes_path 000322 automatic char(168) unaligned dcl 1103 set ref 98* 275* 342* 346* 347* 351* 886* 930* prgdes_seg based char unaligned dcl 1104 set ref 273 355 356 873 876 879 881 891 910* 911* 915 918 918 927 prgdes_seg_ptr 000374 automatic pointer dcl 1105 set ref 273 349* 355 356 500* 873 876 879 881 891 906 906 906 906 910 911 915 918 918 927 prgdes_seg_size 000376 automatic fixed bin(24,0) dcl 1106 set ref 273 354* 355 356 499 873 876 879 881 891 904 905* 905 910 911 915 918 918 927 process_mf 000377 automatic bit(1) unaligned dcl 1107 set ref 75* 131 141* 173 330* process_ol 000400 automatic bit(1) unaligned dcl 1108 set ref 76* 133 143* 177 370* prog_size parameter fixed bin(24,0) dcl 860 set ref 809 894* r 023346 automatic fixed bin(24,0) dcl 624 set ref 617* rd_word based structure level 1 dcl 1179 rd_word_loc 023162 automatic pointer dcl 1178 set ref 108* 292 292 456* 469 469 557 557 562 rel_next_name 023574 automatic fixed bin(24,0) dcl 948 set ref 873* 874 875 879 reloc_abs 0(06) based bit(1) level 2 packed unaligned dcl 1172 set ref 557 557* reloc_wds based fixed bin(17,0) level 2 packed unaligned dcl 1179 set ref 292* 469 557 557* reloc_word based structure level 1 dcl 1172 reloc_word_loc 023160 automatic pointer dcl 1171 set ref 107* 237* 557 557 remain_words 023336 automatic fixed bin(24,0) dcl 604 set ref 526* 531 545* 545 546 547* reverse builtin function dcl 1003 ref 357 358 756 879 881 915 reverse_PRGDES 000540 automatic char(8) unaligned dcl 1117 set ref 357* 881 reverse_prog_desc 000542 automatic char(19) unaligned dcl 1118 set ref 358* 915 rl 000547 automatic fixed bin(24,0) dcl 1119 set ref 231* 231 232 233* 251* 292* 526 612 635* run_date 000550 automatic char(16) unaligned dcl 1120 set ref 111* 191* 894* search builtin function dcl 1003 ref 243 333 756 764 start 1 001456 automatic fixed bin(24,0) array level 2 dcl 1141 set ref 82* 679 681 684* 720 721 722* start_prgdes 000554 automatic fixed bin(24,0) dcl 1121 set ref 273 273 355* 867 substr builtin function dcl 1003 set ref 126 150 273 333 758 759 767 873 876 879 881 891 910* 911* 915 918 918 927 sys_info$max_seg_size 000104 external static fixed bin(35,0) dcl 1051 ref 86 t 023312 automatic fixed bin(24,0) dcl 474 set ref 458* 463* 463 464* 464 468 tc parameter fixed bin(24,0) dcl 453 set ref 445 468* terminate_file_ 000060 constant entry external dcl 1040 ref 500 this_prgdes 023575 automatic fixed bin(24,0) dcl 949 set ref 915* 918 918 this_prgdes_num 023576 automatic varying char(3) dcl 950 set ref 918* 919* total_dcw_count 000555 automatic fixed bin(24,0) dcl 1122 set ref 246* 562 562* total_moved 023322 automatic fixed bin(24,0) dcl 592 set ref 527* 537* 537 547 translate builtin function dcl 1003 ref 715 update_type 023600 automatic varying char(8) dcl 951 set ref 891* 893* 894* 919* verify builtin function dcl 1003 ref 876 w parameter fixed bin(24,0) dcl 968 ref 955 970 974 975 wd 000556 automatic char(168) unaligned dcl 1123 set ref 763* 764 765 767 wdl 000630 automatic fixed bin(24,0) dcl 1124 set ref 91* 762 764* 765 765* 767 wl 4 000634 automatic fixed bin(24,0) array level 3 dcl 1134 set ref 650* 666* 973 976 word6 5 based structure level 2 dcl 1151 words_moved 023327 automatic fixed bin(24,0) dcl 597 set ref 531* 532 534 535 537 538 545 546 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 3-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 3-33 E_ACCESS internal static bit(3) initial unaligned dcl 3-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 M_ACCESS internal static bit(3) initial unaligned dcl 3-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 N_ACCESS internal static bit(3) initial unaligned dcl 3-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 REW_ACCESS internal static bit(3) initial unaligned dcl 3-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 RE_ACCESS internal static bit(3) initial unaligned dcl 3-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 R_ACCESS internal static bit(3) initial unaligned dcl 3-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SA_ACCESS internal static bit(3) initial unaligned dcl 3-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 3-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 3-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SM_ACCESS internal static bit(3) initial unaligned dcl 3-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 S_ACCESS internal static bit(3) initial unaligned dcl 3-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 TERM_FILE_BC internal static bit(2) initial unaligned dcl 2-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 2-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 2-16 TERM_FILE_TERM internal static bit(3) initial unaligned dcl 2-14 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 2-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 2-13 W_ACCESS internal static bit(3) initial unaligned dcl 3-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 gcos_xio_$close 000000 constant entry external dcl 1-13 gcos_xio_$open 000000 constant entry external dcl 1-5 terminate_file_switches based structure level 1 packed unaligned dcl 2-4 NAMES DECLARED BY EXPLICIT CONTEXT. bad_prgdes_path 003745 constant label dcl 351 ref 348 calc_out_length 005041 constant label dcl 508 ref 511 calculate_object_length 004442 constant entry internal dcl 445 ref 246 close_files 003414 constant label dcl 311 ref 120 124 154 163 167 171 175 179 219 327 344 352 368 387 398 416 552 620 737 743 888 closer 004537 constant entry internal dcl 477 ref 63 312 copy_obj 005040 constant entry internal dcl 505 ref 270 280 db 003423 constant entry external dcl 315 gcos_tss_build_library 001422 constant entry external dcl 7 get_dcw_block_word 005553 constant entry internal dcl 607 ref 237 240 456 461 572 get_input_lib 005642 constant entry internal dcl 629 ref 221 get_module_file 003435 constant entry internal dcl 321 ref 131 get_next_prgdes 010022 constant label dcl 923 ref 876 get_out_lib 004030 constant entry internal dcl 364 ref 133 get_prgdes_file 003617 constant entry internal dcl 340 ref 135 gtbl 001413 constant entry external dcl 7 lookup 006215 constant entry internal dcl 676 ref 261 next_dcw_block 002712 constant label dcl 229 ref 252 308 309 next_input_library 002507 constant label dcl 199 ref 221 227 233 257 next_mod_name 006340 constant entry internal dcl 700 ref 129 335 next_out_comp 006550 constant entry internal dcl 729 ref 377 510 541 open_file 006677 constant entry internal dcl 749 ref 322 372 638 out_fail 004144 constant label dcl 384 ref 406 prgdes_done 010057 constant label dcl 930 ref 874 print_catalog 007142 constant entry internal dcl 783 ref 226 stack_lib_path 004361 constant entry internal dcl 427 ref 156 update_prgdes 007310 constant entry internal dcl 809 ref 580 word 010126 constant entry internal dcl 955 ref 233 547 617 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 11716 12024 11345 11726 Length 12402 11345 106 342 351 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME gtbl 10997 external procedure is an external procedure. on unit on line 63 64 on unit get_module_file internal procedure shares stack frame of external procedure gtbl. get_prgdes_file internal procedure shares stack frame of external procedure gtbl. get_out_lib internal procedure shares stack frame of external procedure gtbl. stack_lib_path internal procedure shares stack frame of external procedure gtbl. calculate_object_length internal procedure shares stack frame of external procedure gtbl. closer 130 internal procedure is called by several nonquick procedures. copy_obj internal procedure shares stack frame of external procedure gtbl. get_dcw_block_word internal procedure shares stack frame of external procedure gtbl. get_input_lib internal procedure shares stack frame of external procedure gtbl. lookup internal procedure shares stack frame of external procedure gtbl. next_mod_name internal procedure shares stack frame of external procedure gtbl. next_out_comp internal procedure shares stack frame of external procedure gtbl. open_file internal procedure shares stack frame of external procedure gtbl. print_catalog internal procedure shares stack frame of external procedure gtbl. update_prgdes internal procedure shares stack frame of external procedure gtbl. word internal procedure shares stack frame of external procedure gtbl. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 Debug gtbl STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME gtbl 000106 al gtbl 000107 all_mods gtbl 000110 ap gtbl 000112 arg_num gtbl 000113 bc gtbl 000114 brief gtbl 000115 catl gtbl 000116 catl_parm gtbl 000117 cc gtbl 000120 cc2 gtbl 000121 dcwbc gtbl 000122 e gtbl 000123 end_prgdes gtbl 000124 f gtbl 000125 fw gtbl 000126 get_mod_name gtbl 000127 have_output_lib gtbl 000130 i gtbl 000131 initial_load_address gtbl 000132 init_nm gtbl 000133 input_lib_path gtbl 000206 j gtbl 000207 k gtbl 000210 libc gtbl 000212 lib_fcbp gtbl 000214 max_dcw_count gtbl 000215 mfl gtbl 000216 mfp gtbl 000220 mf_fcbp gtbl 000222 msw gtbl 000223 nargs gtbl 000224 name_loc gtbl 000226 nc gtbl 000227 ndcw gtbl 000230 need_1_mod_name gtbl 000231 no_cat gtbl 000232 obj_len gtbl 000233 obj_num gtbl 000234 prgdes gtbl 000235 prgdes_bit_count gtbl 000236 prgdes_dir gtbl 000310 prgdes_entry gtbl 000320 prgdes_fcbp gtbl 000322 prgdes_path gtbl 000374 prgdes_seg_ptr gtbl 000376 prgdes_seg_size gtbl 000377 process_mf gtbl 000400 process_ol gtbl 000401 open_prgdes gtbl 000402 outc gtbl 000403 outl gtbl 000404 outp gtbl 000406 output_lib_path gtbl 000462 out_fcbp gtbl 000464 path gtbl 000537 pr_cat gtbl 000540 reverse_PRGDES gtbl 000542 reverse_prog_desc gtbl 000547 rl gtbl 000550 run_date gtbl 000554 start_prgdes gtbl 000555 total_dcw_count gtbl 000556 wd gtbl 000630 wdl gtbl 000631 object_name_structure gtbl 000634 msf gtbl 001456 copy_names gtbl 023154 dcwbp gtbl 023156 eo_word_loc gtbl 023160 reloc_word_loc gtbl 023162 rd_word_loc gtbl 023164 dcw_loc gtbl 023166 lib_stack gtbl 023266 e get_out_lib 023267 last_outc get_out_lib 023270 last_outl get_out_lib 023272 last_outp get_out_lib 023310 dcw_index calculate_object_length 023311 done_with_dcws calculate_object_length 023312 t calculate_object_length 023322 total_moved copy_obj 023323 dcw_block_wds copy_obj 023324 f copy_obj 023325 in_length copy_obj 023326 out_length copy_obj 023327 words_moved copy_obj 023330 chars_moved copy_obj 023332 in_ptr copy_obj 023334 out_ptr copy_obj 023336 remain_words copy_obj 023346 r get_dcw_block_word 023347 c get_dcw_block_word 023350 offset get_dcw_block_word 023366 k lookup 023367 n lookup 023370 ln lookup 023400 k next_mod_name 023416 dir open_file 023471 e open_file 023472 k open_file 023473 l open_file 023474 msf open_file 023514 i print_catalog 023516 catp print_catalog 023530 current_prgdes update_prgdes 023531 current_prgdes_size update_prgdes 023532 found_name update_prgdes 023533 new_prgdes update_prgdes 023565 new_prgdes_size update_prgdes 023566 next_name update_prgdes 023567 old_prgdes_last_char update_prgdes 023570 old_prgdes_size update_prgdes 023571 prgdes_first_char update_prgdes 023572 prgdes_inc update_prgdes 023573 prgdes_move_len update_prgdes 023574 rel_next_name update_prgdes 023575 this_prgdes update_prgdes 023576 this_prgdes_num update_prgdes 023600 update_type update_prgdes 023612 i word 023613 k word THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this call_int_other return mod_fx1 enable shorten_stack ext_entry int_entry reverse_cs set_cs_eis index_cs_eis unpack_pic fetch_chars_eis index_reverse_cs THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. clock_ com_err_ cu_$arg_count cu_$arg_ptr date_time_ decimal_exp_ expand_pathname_ get_wdir_ gfms_bcd_ascii_ gfms_hash_ initiate_file_ ioa_ ioa_$ioa_stream ioa_$rsnnl mrl_ msf_manager_$adjust msf_manager_$close msf_manager_$get_ptr msf_manager_$open terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$bad_file error_table_$badopt error_table_$bigarg error_table_$improper_data_format error_table_$inconsistent error_table_$noarg error_table_$noentry error_table_$too_many_names sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 7 001412 57 001427 58 001437 59 001447 60 001451 61 001475 63 001476 67 001520 68 001522 69 001523 70 001524 71 001525 72 001526 73 001527 74 001530 75 001531 76 001532 77 001533 79 001534 80 001536 81 001537 82 001541 83 001552 84 001553 85 001554 86 001555 87 001560 88 001562 89 001563 90 001565 91 001566 92 001567 93 001570 95 001571 96 001575 97 001577 98 001601 100 001604 101 001606 102 001607 103 001610 104 001611 105 001612 106 001613 107 001614 108 001615 109 001616 111 001617 116 001642 117 001651 118 001666 119 001670 120 001722 122 001723 123 001726 124 001756 126 001757 127 001767 128 001771 129 001772 130 001774 131 001775 133 002001 135 002005 137 002011 139 002024 141 002037 143 002052 145 002065 147 002100 150 002124 152 002127 154 002161 156 002162 158 002163 161 002165 162 002170 163 002214 165 002215 166 002217 167 002243 169 002244 170 002246 171 002272 173 002273 174 002275 175 002321 177 002322 178 002324 179 002350 183 002351 186 002403 191 002434 194 002456 195 002502 196 002504 197 002506 199 002507 200 002510 201 002511 202 002514 203 002516 206 002546 209 002577 210 002601 211 002602 212 002611 213 002616 214 002617 216 002656 219 002660 221 002661 223 002666 225 002676 226 002677 227 002702 229 002712 230 002713 231 002715 232 002717 233 002726 237 002736 240 002742 241 002746 242 002765 243 002766 244 002777 246 003002 247 003004 248 003007 249 003014 251 003045 252 003050 254 003051 257 003105 260 003106 261 003113 263 003123 265 003126 267 003130 268 003161 270 003162 273 003166 275 003220 279 003253 280 003254 284 003255 285 003260 286 003261 287 003264 289 003302 292 003316 308 003410 309 003412 311 003414 312 003415 313 003421 315 003422 316 003430 317 003434 321 003435 322 003436 323 003461 325 003507 326 003511 327 003541 329 003542 330 003545 331 003546 332 003550 333 003553 334 003573 335 003601 336 003613 337 003615 338 003616 340 003617 341 003620 342 003622 344 003652 346 003653 347 003660 348 003704 349 003706 350 003743 351 003745 352 003775 354 003776 355 004001 356 004010 357 004017 358 004021 359 004024 360 004025 361 004027 364 004030 365 004031 366 004035 368 004065 370 004066 371 004067 372 004071 373 004114 374 004121 376 004126 377 004130 378 004131 379 004135 380 004141 381 004143 384 004144 385 004145 387 004175 389 004176 390 004200 391 004201 392 004204 393 004225 395 004234 398 004264 400 004265 401 004267 402 004271 403 004273 404 004275 405 004276 406 004277 408 004302 409 004303 410 004305 411 004307 412 004311 413 004314 416 004354 418 004355 419 004360 427 004361 429 004362 430 004363 431 004366 435 004432 437 004433 438 004436 440 004441 445 004442 456 004444 457 004450 458 004451 459 004452 460 004453 461 004463 462 004467 463 004470 464 004500 465 004502 466 004511 467 004516 468 004520 469 004523 470 004535 477 004536 480 004544 482 004557 484 004564 485 004610 488 004644 490 004670 491 004715 494 004760 496 004770 498 005004 499 005007 500 005012 502 005037 505 005040 508 005041 509 005042 510 005050 511 005051 513 005052 516 005055 517 005060 518 005062 519 005067 520 005071 521 005073 522 005075 523 005101 525 005103 526 005105 527 005107 528 005110 530 005112 531 005114 532 005124 533 005126 534 005133 535 005135 536 005137 537 005141 538 005143 539 005145 541 005154 542 005155 543 005157 545 005161 546 005163 547 005172 549 005203 552 005243 555 005244 557 005245 562 005321 567 005375 570 005423 572 005425 573 005431 574 005434 575 005436 580 005503 590 005552 607 005553 611 005555 612 005560 613 005562 614 005565 617 005566 618 005614 620 005640 622 005641 629 005642 633 005644 634 005646 635 005647 636 005650 638 005663 639 005711 640 005713 642 005743 644 005751 648 005756 649 005763 650 005767 651 005770 652 006011 653 006013 654 006026 656 006061 659 006067 660 006073 663 006133 666 006141 667 006147 668 006151 671 006207 676 006215 679 006217 680 006255 681 006257 682 006261 683 006264 684 006277 685 006306 686 006313 687 006315 688 006317 690 006324 691 006326 692 006331 693 006332 700 006340 705 006342 707 006401 708 006402 709 006405 713 006453 715 006454 720 006477 721 006536 722 006545 724 006547 729 006550 732 006551 733 006552 734 006573 735 006575 737 006625 739 006626 740 006632 743 006672 745 006673 746 006676 749 006677 755 006710 756 006715 757 006732 758 006733 759 006745 760 006762 762 006763 763 006765 764 006774 765 007005 767 007010 768 007017 770 007031 772 007065 773 007070 774 007135 783 007142 784 007143 785 007145 788 007170 789 007172 790 007215 791 007225 792 007250 793 007305 795 007307 809 007310 866 007312 867 007313 868 007315 870 007316 872 007321 873 007324 874 007355 875 007360 876 007362 879 007373 881 007412 884 007440 885 007445 886 007447 888 007503 891 007504 893 007517 894 007524 899 007607 901 007611 902 007614 904 007615 905 007620 906 007622 910 007655 911 007664 913 007676 915 007700 918 007723 919 007743 922 007774 923 010022 925 010023 926 010026 927 010030 928 010055 929 010056 930 010057 935 010125 955 010126 969 010130 970 010132 971 010142 972 010143 973 010151 974 010155 975 010161 976 010165 977 010173 978 010175 980 010202 981 010204 ----------------------------------------------------------- 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