COMPILATION LISTING OF SEGMENT generate_pnotice Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 02/13/86 1219.8 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(85-09-27,LJAdams), approve(85-09-27,MCR7150), 12* audit(86-02-07,Wallman), install(86-02-13,MR12.0-1017): 13* The following 14* changes were made: (1) Accept -dc, -dts, and public_domain as valid 15* pnotice names, (2) Accept multiple component prefixes for pnotice names, 16* (3) Accept new format of template name without the date, and (4) 17* compatibiltiy and validity checking of template names of user input and of 18* psp_info_. 19* END HISTORY COMMENTS */ 20 21 22 generate_pnotice: 23 proc; 24 25 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 26 /* */ 27 /* NAME: generate_pnotice */ 28 /* */ 29 /* FUNCTION: */ 30 /* This program is the tool that provides software protection notices (pnotices) for */ 31 /* the various Multics Priced Software Products (PSPs). There are numerous checks built */ 32 /* into the program to check the consistency and accuracy of the psp_info_ database, */ 33 /* which is the driver data structure for each PSP's protection notices. This program */ 34 /* also provides the Software Technical Identifiers (STIs) for each product. The method */ 35 /* used to protect each product is, basically, to build an ALM source containing */ 36 /* pnotices and STIs. This source is put into the source archive (primary archive) of */ 37 /* the PSP. The ALM source is compiled, and that is put into the corresponding object */ 38 /* archive of the PSP. */ 39 /* */ 40 /* CREATED: May 1981 by JM Stansbury. */ 41 /* */ 42 /* Modified: June 1982 by JM Stansbury. */ 43 /* 1. To force access if necessary to archives if -special is used. */ 44 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 45 /* */ 46 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 47 48 49 50 51 52 53 /* A U T O M A T I C */ 54 dcl Fany bit (1), /* flag to say that any args other than */ 55 /* "-special" have been supplied. */ 56 Fcopy_right bit (1), 57 Fdcopy_right bit (1), /* flag for indicating default copyright */ 58 Fdtrade_secret bit (1), /* flag for indicating default trade secret */ 59 Fname bit (1), /* flag for indication of the "-name" arg */ 60 Fmust_reset_object bit (1), /* indicate actions on acl */ 61 Fmust_reset_source bit (1), 62 Fsti bit (1), /* flag for indication of the "-sti" arg */ 63 Fpublic_domain bit (1), /* flag for indicating public domain */ 64 Fmid bit (1), /* flag for indication of the "-id" arg for MIDs */ 65 Fspec bit (1), /* flag for indication of the "-special" arg */ 66 Ftrade_secret bit (1), 67 Idx fixed bin, /* general purpose indices */ 68 Idx1 fixed bin, 69 Idx2 fixed bin, 70 Idx3 fixed bin, 71 Isnotice fixed bin, 72 Ionotice fixed bin, 73 Larg fixed bin (21), /* lgth of current argument */ 74 Ltemp fixed bin, /* lgth of a single pnotice */ 75 Ltotal fixed bin, /* lgth of multiple pnotices */ 76 Nargs fixed bin, /* no. of input args */ 77 Parg ptr, /* ptr to current argument */ 78 P_line ptr, /* ptr to a command line for cu_$cp */ 79 Piocb ptr, 80 Pnotices ptr, /* ptr to Ppaths temp seg for pnotice_paths_ */ 81 Po_archive ptr, /* ptr to the object archive */ 82 Ppsp_info ptr, /* ptr to psp_info_ structure */ 83 Ps_archive ptr, /* ptr to the source archive */ 84 Ptemp ptr, /* ptr to temp segment */ 85 answer char (168) var, /* from command_query_ */ 86 sbit_count fixed bin (24), /* bit count of source archive */ 87 obit_count fixed bin (24), /* bit count of object archive */ 88 case fixed bin, 89 code fixed bin (35), 90 component_name char (32), /* name of PNOTICE seg in an archive */ 91 current_year_a char(4), 92 Iyr fixed bin(24), 93 sdir char (168), 94 odir char (168), 95 match_found bit (1), /* checks correspondence between source & object */ 96 object_pnotices fixed bin, /* count of object pnotices */ 97 oentry char (32), 98 path char (168), 99 pn char (512) var, /* string containing text of multiple pnotices */ 100 prod char (20), /* generic product name */ 101 prod_mid char (7), /* product marketing ID, if supplied via args */ 102 prod_object_pnotice (10) char (32) var, 103 prod_object_ename char (32), 104 prod_source_pnotice (10) char (32) var, /* use the primary name of template */ 105 prod_source_ename char (32), 106 prod_sti char (12), /* product's STI number */ 107 sentry char (32), 108 source_pnotices fixed bin, /* count of source pnotices */ 109 this_is_object_archive bit(1), 110 this_is_source_archive bit(1), 111 user_on_source_acl bit(1), 112 user_on_object_acl bit(1), 113 working_dir char (168); 114 115 116 /* B A S E D A N D S T R U C T U R E S */ 117 dcl argument char (Larg) based (Parg); 118 dcl temp char (Ltemp) based (Ptemp); 119 dcl 1 ACI, 120 2 aci like archive_component_info; /* structure filled in by */ 121 /* archive_$get_component_info */ 122 dcl 1 ACIS aligned int static options (constant), 123 2 vers fixed bin init (1), 124 2 bc fixed bin (24), 125 2 c_ptr ptr, 126 2 nm char (32) unaligned, 127 2 tmod fixed bin (71), 128 2 tupd fixed bin (71), 129 2 c_lgth fixed bin (19), 130 2 acl bit (36) unaligned; 131 132 /* structure used by command_query_ */ 133 dcl 1 query_info aligned int static, 134 2 version fixed bin init (1), 135 2 switches, 136 3 yes_or_no_sw bit (1) unal init ("0"b), 137 3 suppress_name_sw bit (1) unal init ("1"b), 138 3 suppress_spacing_sw bit (1) unal init ("1"b), 139 3 cp_escape_control bit (2) unal init ("00"b), 140 3 pad bit (31) unal, 141 2 status_code fixed bin (35) init (0), 142 2 query_code fixed bin (35) init (0), 143 2 question_iocbp ptr init (null), 144 2 answer_iocbp ptr init (null), 145 2 repeat_time fixed bin (71) init (0); 146 147 148 149 /* B U I L T I N */ 150 dcl (addr, 151 after, 152 before, 153 clock, 154 dim, 155 hbound, 156 index, 157 length, 158 null, 159 reverse, 160 rtrim, 161 substr, 162 unspec) builtin; 163 164 /* C O N D I T I O N S */ 165 dcl (cleanup, 166 not_in_write_bracket, 167 no_write_permission) condition; 168 169 /* E N T R I E S */ 170 dcl alm entry options(variable), 171 archive entry options(variable), 172 archive_$get_component_info 173 entry (ptr, fixed bin(24), char(*), ptr, fixed bin(35)), 174 check_entryname_ entry (char(*), fixed bin(35)), 175 com_err_ entry() options(variable), 176 command_query_ entry() options(variable), 177 cu_$arg_count entry (fixed bin, fixed bin(35)), 178 cu_$arg_ptr entry (fixed bin, ptr, fixed bin(21), fixed bin(35)), 179 date_time_$format entry (char(*), fixed bin(71), char(*), char(*)) returns(char(250) var), 180 delete_$path entry (char(*), char(*), bit(6), char(*), fixed bin(35)), 181 expand_pathname_ entry (char(*), char(*), char(*), fixed bin(35)), 182 get_group_id_ entry() returns(char(32)), 183 get_temp_segment_ entry (char(*), ptr, fixed bin(35)), 184 get_wdir_ entry() returns(char(168)), 185 hcs_$add_acl_entries entry (char(*), char(*), ptr, fixed bin, fixed bin(35)), 186 hcs_$delete_acl_entries entry (char(*), char(*), ptr, fixed bin, fixed bin(35)), 187 hcs_$initiate_count entry (char(*), char(*), char(*), fixed bin(24), fixed bin(2), ptr, fixed bin(35)), 188 hcs_$list_acl entry (char(*), char(*), ptr, ptr, ptr, fixed bin, fixed bin(35)), 189 ioa_ entry() options(variable), 190 ioa_$ioa_switch entry() options(variable), 191 iox_$attach_ioname entry (char(*), ptr, char(*), fixed bin(35)), 192 iox_$close entry (ptr, fixed bin(35)), 193 iox_$detach_iocb entry (ptr, fixed bin(35)), 194 iox_$open entry (ptr, fixed bin, bit(1) aligned, fixed bin(35)), 195 list_pnotice_names entry options(variable), 196 parse_pnotice_info_ entry (ptr, fixed bin (35)), 197 parse_pnotice_info_$validate_sti 198 entry (char(12)) returns(bit(1)), 199 pnotice_paths_ entry (char(*), bit(*), ptr, fixed bin(35)), 200 release_temp_segment_ entry (char(*), ptr, fixed bin(35)), 201 terminate_file_ entry (ptr, fixed bin(24), bit(*), fixed bin(35)); 202 203 204 /* E X T E R N A L S T A T I C */ 205 dcl error_table_$badopt fixed bin(35) ext static, 206 error_table_$name_not_found fixed bin(35) ext static, 207 error_table_$active_function fixed bin(35) ext static, 208 error_table_$no_w_permission fixed bin(35) ext static, 209 error_table_$lower_ring fixed bin(35) ext static, 210 error_table_$no_component fixed bin(35) ext static, 211 error_table_$noentry fixed bin(35) ext static, 212 error_table_$wrong_no_of_args fixed bin(35) ext static; 213 214 215 216 /* I N T E R N A L S T A T I C */ 217 dcl ME char (16) int static options (constant) init ("generate_pnotice"), 218 NL char (1) int static options (constant) init (" 219 "), 220 True bit (1) int static options (constant) init ("1"b), 221 False bit (1) int static options (constant) init ("0"b); 222 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 223 224 225 on cleanup call clean_up; 226 call init; 227 call cu_$arg_count (Nargs, code); 228 if code = error_table_$active_function then 229 goto USAGE; 230 else if Nargs = 0 then do; 231 code = error_table_$wrong_no_of_args; 232 go to USAGE; 233 end; 234 do Idx = 1 to Nargs; 235 call cu_$arg_ptr (Idx, Parg, Larg, code); 236 if code ^= 0 then do; 237 call com_err_ (code, ME, argument); 238 return; 239 end; 240 else if substr(argument, 1, 1) ^= "-" then 241 goto USAGE; 242 else if argument = "-name" | argument = "-nm" then do; 243 Idx = Idx + 1; 244 call cu_$arg_ptr (Idx, Parg, Larg, code); 245 if code ^= 0 then do; 246 call com_err_ (code, ME, "Arg= ^a", argument); 247 return; 248 end; 249 prod = argument; /* should be generic name of product. */ 250 Fany = True; 251 Fname = True; 252 end; 253 else if argument = "-id" then do; 254 Idx = Idx + 1; 255 call cu_$arg_ptr (Idx, Parg, Larg, code); 256 if code ^= 0 then do; 257 call com_err_ (code, ME, "Arg= ^a", argument); 258 return; 259 end; 260 prod_mid = argument; /* product's marketing ID. */ 261 Fany = True; 262 Fmid = True; 263 end; 264 else if argument = "-sti" then do; /* product STI. Input if user wants to */ 265 /* over-ride psp_info_ */ 266 Idx = Idx + 1; 267 call cu_$arg_ptr (Idx, Parg, Larg, code); 268 if code ^= 0 then do; 269 call com_err_ (code, ME, "Arg= ^a", argument); 270 return; 271 end; 272 prod_sti = argument; 273 if ^parse_pnotice_info_$validate_sti (prod_sti) then do; 274 call ioa_ ("Error - invalid STI: ^a", argument); 275 return; 276 end; 277 Fany = True; 278 Fsti = True; 279 end; 280 else if argument = "-special" then 281 Fspec = True; /* user wants to provide most of the info. */ 282 else do; 283 code = error_table_$badopt; 284 goto USAGE; 285 end; 286 end; 287 MORE_TRASH: 288 if Fname & Fmid then do; 289 call ioa_ ("The name and match args are mutually exclusive."); 290 code = error_table_$wrong_no_of_args; 291 goto USAGE; 292 end; 293 else if Fspec & Fany then do; 294 call ioa_ ("The special arg is to be used alone."); 295 code = error_table_$wrong_no_of_args; 296 goto USAGE; 297 end; 298 else go to WORK; 299 USAGE: call com_err_ (code, ME, " 300 Usage: generate_pnotice {-name | -nm } 301 {-id } 302 {-sti } 303 {-special}"); 304 return; 305 WORK: call get_temp_segment_ (ME, Ppsp_info, code); 306 if code ^= 0 then do; 307 call com_err_ (code, ME, "getting temp seg for psp_info."); 308 return; 309 end; 310 SI_ptr = Ppsp_info; 311 call parse_pnotice_info_ (SI_ptr, code); /* fill in the psp_info structure */ 312 if code ^= 0 then do; 313 call com_err_ (code, ME, "filling in psp_info."); 314 call release_temp_segment_ (ME, Ppsp_info, code); 315 return; 316 end; 317 call pnotice_paths_ (ME, "00"b, Ppaths, code); /* fill in template information */ 318 if code ^= 0 then /* pnotice_paths_ will complain for us. */ 319 goto CLEAN; /* get out of this */ 320 pnotice_paths.templates(*).primary_name = before(pnotice_paths.templates(*).primary_name, ".pnotice"); 321 /* this program was written before pnotice_paths_ */ 322 /* was trained to return the entire name. */ 323 working_dir = get_wdir_ (); /* use wdir for archives and PNOTICEs */ 324 if Fspec then do; 325 call get_PNOTICE_info; 326 goto CHECK_PN; 327 end; 328 else if Fname then do; 329 do Idx3 = 1 to product.prod_number while (prod ^= product.num(Idx3).prod_name); 330 end; 331 if Idx3 > product.prod_number then do; 332 code = error_table_$name_not_found; 333 call com_err_ (code, ME, "^/Looking for ""^a"" in psp_info_", prod); 334 call clean_up; 335 return; 336 end; 337 end; 338 else if Fmid then do; 339 do Idx3 = 1 to product.prod_number while (prod_mid ^= product.num(Idx3).MI); 340 end; 341 if Idx3 > product.prod_number then do; 342 code = error_table_$name_not_found; 343 call com_err_ (code, ME, "^/Specified MID was not found in psp_info_.", prod_mid); 344 call clean_up; 345 end; 346 end; 347 prod = product.num(Idx3).prod_name; /* generic name */ 348 if product.num(Idx3).prod_use(1) ^= "" then do; 349 call ioa_ ("Multiple products found in psp_info_. 350 ^/Please use this command with each product."); 351 call clean_up; 352 return; 353 end; 354 if ^Fsti then 355 prod_sti = product.num(Idx3).prod_STI; /* STI in psp_info_ is for source code */ 356 Idx = 0; /*Initialize index to 0 */ 357 do Idx2 = 1 to 10 while (product.num(Idx3).source_C(Idx2) ^= ""); 358 /* get all source pnotice names */ 359 prod_source_pnotice(Idx2) = product.num(Idx3).source_C(Idx2); 360 Idx1 = check_name(prod_source_pnotice(Idx2)); 361 if Idx1 > pnotice_paths.Ntemplates then do; 362 code = error_table_$name_not_found; 363 call com_err_ (code, ME, "^/Invalid psp_info_ name - ^a.", prod_source_pnotice(Idx2)); 364 goto CLEAN; 365 end; 366 Idx = Idx + 1; 367 if Idx > 1 then 368 if ^templates_compatible(prod_source_pnotice) then do; 369 call com_err_ (code, ME, "^a - ^/pnotice types not compatible.", prod); 370 goto CLEAN; 371 end; 372 source_pnotices = source_pnotices + 1; /* count them */ 373 end; 374 Idx = 0; /* Initialize index to 0 */ 375 do Idx2 = 1 to 10 while (product.num(Idx3).object_C(Idx2) ^= ""); 376 /* get all object pnotice names */ 377 prod_object_pnotice(Idx2) = product.num(Idx3).object_C(Idx2); 378 Idx1 = check_name(prod_object_pnotice(Idx2)); 379 if Idx1 > pnotice_paths.Ntemplates then do; 380 code = error_table_$name_not_found; 381 call com_err_ (code, ME, "^/Invalid psp_info_ name - ^a.", prod_object_pnotice(Idx2)); 382 goto CLEAN; 383 end; 384 Idx = Idx + 1; 385 if Idx > 1 then 386 if ^templates_compatible(prod_object_pnotice) then do; 387 call com_err_ (code, ME, "^a - ^/pnotice types not compatible.", prod); 388 goto CLEAN; 389 end; 390 object_pnotices = object_pnotices + 1; /* count these too */ 391 end; 392 /* next, get source archive name */ 393 prod_source_ename = product.num(Idx3).source_path.entryname; 394 /* next, get object archive name */ 395 prod_object_ename = product.num(Idx3).object_path.entryname; 396 CHECK_PN: 397 if source_pnotices = 1 & object_pnotices = 1 then do; 398 if prod_source_pnotice(1) = prod_object_pnotice(1) then 399 case = 1; /* only one PNOTICE source has to be made */ 400 else case = 3; /* two PNOTICE source segs needed */ 401 end; 402 else do; 403 404 if ^check_multiple_pnotices() then do; 405 call ioa_ ("Unexpected errors encountered - procedure terminated."); 406 call clean_up; 407 return; 408 end; 409 if source_pnotices ^= object_pnotices then do; 410 case = 4; 411 goto CONTINUE; 412 end; 413 else do Idx = 1 to source_pnotices; /* check to see if there is an object */ 414 /* pnotice corresponding to each source pnotice */ 415 match_found = False; 416 do Idx2 = 1 to object_pnotices; 417 if prod_object_pnotice(Idx2) = prod_source_pnotice(Idx) then 418 match_found = True; 419 end; 420 if ^match_found then do; 421 case = 4; 422 goto CONTINUE; 423 end; 424 end; 425 case = 2; 426 end; 427 428 CONTINUE: 429 call make_PNOTICE (case); /* create the ALM source and object segs */ 430 if Fspec then 431 call archive_PNOTICE (sdir, odir); 432 else 433 call archive_PNOTICE (working_dir, working_dir); 434 /* put them into proper archives */ 435 CLEAN: call clean_up; /* logical exit from the program */ 436 return; 437 438 439 440 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 441 check_archive: 442 proc (Adir, Aentry, Aptr); 443 444 dcl Adir char(*), 445 Aentry char(*), 446 Aptr ptr; 447 dcl one_word char(4) based; 448 449 on not_in_write_bracket begin; 450 call com_err_ (error_table_$lower_ring, ME, "^/Writing ^a>^a.", Adir, Aentry); 451 goto CLEAN; 452 end; 453 on no_write_permission goto COMPLAIN; 454 Aptr -> one_word = Aptr -> one_word; /* try to write the first word */ 455 return; /* if it worked, everything is OK */ 456 COMPLAIN: call com_err_ (error_table_$no_w_permission, ME, "^/Checking ACL of ^a>^a.", Adir, Aentry); 457 goto CLEAN; 458 end check_archive; 459 460 461 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 462 463 clean_up: proc; 464 465 if Ppaths ^= null then do; 466 do Idx = 1 to dim(pnotice_paths.templates, 1); 467 /* terminate all templates first */ 468 call terminate_file_ (pnotice_paths.templates(Idx).Ptemplate, 469 pnotice_paths.templates(Idx).Ltemplate * 9, TERM_FILE_TERM, code); 470 end; 471 call release_temp_segment_ (ME, Ppaths, code); 472 /* now release temp seg */ 473 end; 474 475 if Ppsp_info ^= null then 476 call release_temp_segment_ (ME, Ppsp_info, code); 477 478 if Fspec then do; 479 if Fmust_reset_source then 480 call check_acl$reset_acl (Ps_archive, sdir, sentry, "1"b, user_on_source_acl); 481 if Fmust_reset_object then 482 call check_acl$reset_acl (Po_archive, odir, oentry, "0"b, user_on_object_acl); 483 end; 484 if Ps_archive ^= null then 485 call terminate_file_ (Ps_archive, sbit_count, TERM_FILE_TERM, code); 486 if Po_archive ^= null then 487 call terminate_file_ (Po_archive, obit_count, TERM_FILE_TERM, code); 488 end clean_up; 489 490 491 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 492 493 494 init: proc; 495 496 Fmust_reset_source, Fmust_reset_object = False; 497 Idx = 0; 498 Idx2 = 0; 499 Idx3 = 0; 500 Isnotice = 0; 501 Ionotice = 0; 502 Ps_archive = null; 503 Po_archive = null; 504 Ppaths = null; 505 Ptemp = null; 506 P_line = null; 507 Ppsp_info = null; 508 Pnotices = null; 509 Ltotal = 0; 510 pn = ""; 511 source_pnotices = 0; 512 object_pnotices = 0; 513 prod_source_pnotice(*) = ""; 514 prod_object_pnotice(*) = ""; 515 unspec (ACI) = unspec (ACIS); 516 match_found = False; 517 Fany = False; 518 Fname = False; 519 Fsti = False; 520 Fspec = False; 521 Fmid = False; 522 case = 0; 523 524 current_year_a = date_time_$format("^9999yc",clock(),"",""); 525 end init; 526 527 528 529 530 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 531 532 make_PNOTICE: 533 proc (CASE); 534 535 536 537 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 538 /* */ 539 /* This internal procedure creates the ALM source macro and the corresponding object */ 540 /* segment for inclusion into the proper source and object archives as shown in */ 541 /* psp_info_. There are four cases depicted in this procedure. They are: */ 542 /* */ 543 /* 1) Both source and object are protected by single pnotices, and so only one PNOTICE */ 544 /* source segment needs to be created and compiled. */ 545 /* */ 546 /* 2) Source and object are protected by more than one pnotice (i.e. multiple */ 547 /* copyrights), but these are the same ones. So, again only one PNOTICE source is */ 548 /* required. */ 549 /* */ 550 /* 3) Source and object are protected by only one pnotice each, but these pnotices are */ 551 /* different (i.e. source ->Trade Secret and object -> Copyright). This requires that */ 552 /* two PNOTICE source segments be created, since the notices in each are different. In */ 553 /* this case, the PNOTICE source destined for the object archive is created first, */ 554 /* compiled, and then the source is deleted. Then, the PNOTICE source destined for the */ 555 /* source archive is created, but not compiled. */ 556 /* */ 557 /* 4) Source and object are protected by multiple pnotices, and these are not identical. */ 558 /* So, again multiple PNOTICE segments must be created as outlined above in (3). */ 559 /* */ 560 /* A second temporary segment has been set up to hold the pnotice */ 561 /* with the current date inputted in place of the deliminator. */ 562 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 563 564 565 566 dcl CASE fixed bin; 567 568 569 goto PNOTICE (CASE); 570 571 PNOTICE(1): /* one PNOTICE source req'd and not */ 572 /* multiple notices */ 573 574 Piocb = null; 575 call iox_$attach_ioname (ME, Piocb, "vfile_ " 576 || rtrim(working_dir) || ">" || "PNOTICE_" 577 || rtrim(prod) || ".alm", code); 578 if code ^= 0 then do; 579 call com_err_ (code, ME, "^/Attaching PNOTICE segment."); 580 return; 581 end; 582 call iox_$open (Piocb, 2, "0"b, code); 583 if code ^= 0 then do; 584 call com_err_ (code, ME, "^/Opening PNOTICE seg switch for output."); 585 return; 586 end; 587 call ioa_ ("Creating ^a>PNOTICE_^a.alm.", rtrim(working_dir), prod); 588 call ioa_$ioa_switch (Piocb, "^-dec^-1^3-""version 1 structure"); 589 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""no. of pnotices", source_pnotices); 590 call ioa_$ioa_switch (Piocb, "^-dec^-3^3-""no. of STIs"); 591 /* this may change eventually */ 592 if substr (prod_source_pnotice(1), 1, 8) = "default." then 593 /* if it is a default copyright... */ 594 do Idx2 = 1 to pnotice_paths.Ntemplates; 595 if pnotice_paths.templates(Idx2).defaultC then do; 596 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 597 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 598 /* leave the new line off */ 599 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 600 call get_year; /*put in current date */ 601 end; 602 end; 603 else if substr (prod_source_pnotice(1), 1, 20) = "default_trade_secret" then 604 /* if it is a default TS pnotice... */ 605 do Idx2 = 1 to pnotice_paths.Ntemplates; 606 if pnotice_paths.templates(Idx2).defaultTS then do; 607 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 608 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 609 /* leave the new line off */ 610 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 611 pn = pn || " acc " || """" || temp || """" || NL; 612 end; 613 end; 614 /* otherwise, look for a matching pnotice... */ 615 else do Idx2 = 1 to pnotice_paths.Ntemplates; 616 if pnotice_paths.templates(Idx2).primary_name = prod_source_pnotice(1) then do; 617 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 618 /* leave the new line off the lgth */ 619 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 620 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 621 call get_year; /*put in current date */ 622 end; 623 end; 624 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""lgth of all pnotices + no. of pnotices", Ltotal + source_pnotices); 625 call ioa_$ioa_switch (Piocb, "^a", pn); /* insert all pnotices */ 626 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", prod_sti); 627 /* STI for source code */ 628 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "2" || substr(prod_sti, 3)); 629 /* STI for object code */ 630 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "3" || substr(prod_sti, 3)); 631 /* STI for executable code */ 632 call ioa_$ioa_switch (Piocb, "^-end"); 633 call iox_$close (Piocb, code); 634 if code ^= 0 then 635 call com_err_ (code, ME, "Closing PNOTICE switch."); 636 call iox_$detach_iocb (Piocb, code); 637 if code ^= 0 then 638 call com_err_ (code, ME, "Detaching PNOTICE switch."); 639 /* finished with source segment now */ 640 641 642 call ioa_ ("Creating ^a>PNOTICE_^a.", rtrim(working_dir), prod); 643 call alm (rtrim(working_dir) || ">PNOTICE_" || prod); 644 return; 645 646 PNOTICE(2): /* one PNOTICE source, multiple pnotices */ 647 648 649 Piocb = null; 650 working_dir = get_wdir_ (); 651 call iox_$attach_ioname (ME, Piocb, "vfile_ " 652 || rtrim(working_dir) || ">" || "PNOTICE_" 653 || rtrim(prod) || ".alm", code); 654 if code ^= 0 then do; 655 call com_err_ (code, ME, "^/Attaching PNOTICE segment."); 656 return; 657 end; 658 call iox_$open (Piocb, 2, "0"b, code); 659 if code ^= 0 then do; 660 call com_err_ (code, ME, "^/Opening PNOTICE seg switch for output."); 661 return; 662 end; 663 call ioa_ ("Creating ^a>PNOTICE_^a.alm.", rtrim(working_dir), prod); 664 call ioa_$ioa_switch (Piocb, "^-dec^-1^3-""version 1 structure"); 665 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""no. of pnotices", source_pnotices); 666 call ioa_$ioa_switch (Piocb, "^-dec^-3^3-""no. of STIs"); 667 /* this may change eventually */ 668 do Idx = 1 to source_pnotices; 669 /* this time, there are multiple pnotices, so */ 670 /* they must all be processed. */ 671 if substr (prod_source_pnotice(Idx), 1, 8) = "default." then 672 /* if it is a default copyright... */ 673 do Idx2 = 1 to pnotice_paths.Ntemplates; 674 if pnotice_paths.templates(Idx2).defaultC then do; 675 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 676 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 677 /* leave the new line off */ 678 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 679 call get_year; /*put in current date */ 680 end; 681 end; 682 else if substr (prod_source_pnotice(Idx), 1, 20) = "default_trade_secret" then 683 /* if it is a default TS pnotice... */ 684 do Idx2 = 1 to pnotice_paths.Ntemplates; 685 if pnotice_paths.templates(Idx2).defaultTS then do; 686 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 687 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 688 /* leave the new line off */ 689 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 690 pn = pn || " acc " || """" || temp || """" || NL; 691 /* add it to the list of pnotices. */ 692 end; 693 end; 694 /* otherwise, look for a matching pnotice... */ 695 else do Idx2 = 1 to pnotice_paths.Ntemplates; 696 if pnotice_paths.templates(Idx2).primary_name = prod_source_pnotice(Idx) then do; 697 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 698 /* leave the new line off the lgth */ 699 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 700 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 701 call get_year; /*put in current date */ 702 703 704 end; 705 end; 706 end; 707 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""lgth of all pnotices + no. of pnotices", Ltotal + source_pnotices); 708 call ioa_$ioa_switch (Piocb, "^a", pn); /* insert all pnotices */ 709 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", prod_sti); 710 /* STI for source code */ 711 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "2" || substr(prod_sti, 3)); 712 /* STI for object code */ 713 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "3" || substr(prod_sti, 3)); 714 /* STI for executable code */ 715 call ioa_$ioa_switch (Piocb, "^-end"); 716 call iox_$close (Piocb, code); 717 if code ^= 0 then 718 call com_err_ (code, ME, "Closing PNOTICE switch."); 719 call iox_$detach_iocb (Piocb, code); 720 if code ^= 0 then 721 call com_err_ (code, ME, "Detaching PNOTICE switch."); 722 /* finished with source segment now */ 723 724 725 call ioa_ ("Creating ^a>PNOTICE_^a.", rtrim(working_dir), prod); 726 call alm (rtrim(working_dir) || ">PNOTICE_" || prod); 727 return; 728 729 PNOTICE(3): /* two PNOTICE source segs, single pnotices */ 730 731 732 Piocb = null; 733 working_dir = get_wdir_ (); 734 call iox_$attach_ioname (ME, Piocb, "vfile_ " 735 || rtrim(working_dir) || ">" || "PNOTICE_" 736 || rtrim(prod) || ".alm", code); 737 if code ^= 0 then do; 738 call com_err_ (code, ME, "^/Attaching PNOTICE segment."); 739 return; 740 end; 741 call iox_$open (Piocb, 2, "0"b, code); 742 if code ^= 0 then do; 743 call com_err_ (code, ME, "^/Opening PNOTICE seg switch for output."); 744 return; 745 end; 746 /* create the source PNOTICE for object */ 747 /* archive first, compile it, and then delete it */ 748 /* before going to work on the PNOTICE for the */ 749 /* source archive. */ 750 call ioa_ ("Multiple PNOTICE segs required. Object will be done first."); 751 call ioa_$ioa_switch (Piocb, "^-dec^-1^3-""version 1 structure"); 752 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""no. of pnotices", object_pnotices); 753 call ioa_$ioa_switch (Piocb, "^-dec^-3^3-""no. of STIs"); 754 /* this may change eventually */ 755 if substr (prod_object_pnotice(1), 1, 8) = "default." then 756 /* if it is a default copyright... */ 757 do Idx2 = 1 to pnotice_paths.Ntemplates; 758 if pnotice_paths.templates(Idx2).defaultC then do; 759 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 760 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 761 /* leave the new line off */ 762 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 763 call get_year; /*put in current_date */ 764 end; 765 end; 766 else if substr (prod_object_pnotice(1), 1, 20) = "default_trade_secret" then 767 /* if it is a default TS pnotice... */ 768 do Idx2 = 1 to pnotice_paths.Ntemplates; 769 if pnotice_paths.templates(Idx2).defaultTS then do; 770 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 771 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 772 /* leave the new line off */ 773 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 774 pn = pn || " acc " || """" || temp || """" || NL; 775 /* add it to the list of pnotices. */ 776 end; 777 end; 778 /* otherwise, look for a matching pnotice... */ 779 else do Idx2 = 1 to pnotice_paths.Ntemplates; 780 if pnotice_paths.templates(Idx2).primary_name = prod_object_pnotice(1) then do; 781 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 782 /* leave the new line off the lgth */ 783 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 784 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 785 call get_year; /*put in current date */ 786 end; 787 end; 788 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""lgth of all pnotices + no. of pnotices", Ltotal + object_pnotices); 789 call ioa_$ioa_switch (Piocb, "^a", pn); /* insert all pnotices */ 790 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", prod_sti); 791 /* STI for source code */ 792 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "2" || substr(prod_sti, 3)); 793 /* STI for object code */ 794 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "3" || substr(prod_sti, 3)); 795 /* STI for executable code */ 796 call ioa_$ioa_switch (Piocb, "^-end"); 797 call iox_$close (Piocb, code); 798 if code ^= 0 then 799 call com_err_ (code, ME, "Closing PNOTICE switch."); 800 call iox_$detach_iocb (Piocb, code); 801 if code ^= 0 then 802 call com_err_ (code, ME, "Detaching PNOTICE switch."); 803 /* finished with source segment now */ 804 805 806 call ioa_ ("Creating ^a>PNOTICE_^a.", rtrim(working_dir), prod); 807 call alm (rtrim(working_dir) || ">PNOTICE_" || prod); 808 call delete_$path (working_dir, "PNOTICE_" || rtrim(prod) || ".alm", "100100"b, ME, code); 809 if code ^= 0 then 810 call com_err_ (code, ME, "Deleting PNOTICE source for the object archive."); 811 /* now create PNOTICE for the source archive. */ 812 Piocb = null; 813 Ltotal = 0; /* don't use anything from the object PNOTICE. */ 814 pn = ""; /* ditto */ 815 call iox_$attach_ioname (ME, Piocb, "vfile_ " 816 || rtrim(working_dir) || ">" || "PNOTICE_" 817 || rtrim(prod) || ".alm", code); 818 if code ^= 0 then do; 819 call com_err_ (code, ME, "^/Attaching PNOTICE segment."); 820 return; 821 end; 822 call iox_$open (Piocb, 2, "0"b, code); 823 if code ^= 0 then do; 824 call com_err_ (code, ME, "^/Opening PNOTICE seg switch for output."); 825 return; 826 end; 827 call ioa_ ("Creating ^a>PNOTICE_^a.alm.", rtrim(working_dir), prod); 828 call ioa_$ioa_switch (Piocb, "^-dec^-1^3-""version 1 structure"); 829 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""no. of pnotices", source_pnotices); 830 call ioa_$ioa_switch (Piocb, "^-dec^-3^3-""no. of STIs"); 831 /* this may change eventually */ 832 if substr (prod_source_pnotice(1), 1, 8) = "default." then 833 /* if it is a default copyright... */ 834 do Idx2 = 1 to pnotice_paths.Ntemplates; 835 if pnotice_paths.templates(Idx2).defaultC then do; 836 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 837 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 838 /* leave the new line off */ 839 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 840 call get_year; /*put in current date */ 841 end; 842 end; 843 else if substr (prod_source_pnotice(1), 1, 20) = "default_trade_secret" then 844 /* if it is a default TS pnotice... */ 845 do Idx2 = 1 to pnotice_paths.Ntemplates; 846 if pnotice_paths.templates(Idx2).defaultTS then do; 847 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 848 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 849 /* leave the new line off */ 850 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 851 pn = pn || " acc " || """" || temp || """" || NL; 852 /* add it to the list of pnotices. */ 853 end; 854 end; 855 /* otherwise, look for a matching pnotice... */ 856 else do Idx2 = 1 to pnotice_paths.Ntemplates; 857 if pnotice_paths.templates(Idx2).primary_name = prod_source_pnotice(1) then do; 858 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 859 /* leave the new line off the lgth */ 860 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 861 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 862 call get_year; /*put in current date */ 863 end; 864 end; 865 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""lgth of all pnotices + no. of pnotices", Ltotal + source_pnotices); 866 call ioa_$ioa_switch (Piocb, "^a", pn); /* insert all pnotices */ 867 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", prod_sti); 868 /* STI for source code */ 869 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "2" || substr(prod_sti, 3)); 870 /* STI for object code */ 871 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "3" || substr(prod_sti, 3)); 872 /* STI for executable code */ 873 call ioa_$ioa_switch (Piocb, "^-end"); 874 call iox_$close (Piocb, code); 875 if code ^= 0 then 876 call com_err_ (code, ME, "Closing PNOTICE switch."); 877 call iox_$detach_iocb (Piocb, code); 878 if code ^= 0 then 879 call com_err_ (code, ME, "Detaching PNOTICE switch."); 880 /* finished with source segment now */ 881 882 883 return; 884 885 PNOTICE(4): /* two PNOTICE source segs, multiple pnotices */ 886 887 888 Piocb = null; 889 working_dir = get_wdir_ (); 890 call iox_$attach_ioname (ME, Piocb, "vfile_ " 891 || rtrim(working_dir) || ">" || "PNOTICE_" 892 || rtrim(prod) || ".alm", code); 893 if code ^= 0 then do; 894 call com_err_ (code, ME, "^/Attaching PNOTICE segment."); 895 return; 896 end; 897 call iox_$open (Piocb, 2, "0"b, code); 898 if code ^= 0 then do; 899 call com_err_ (code, ME, "^/Opening PNOTICE seg switch for output."); 900 return; 901 end; 902 /* create the source PNOTICE for object archive */ 903 /* first, compile it, and then delete it before */ 904 /* going to work on the PNOTICE for the source */ 905 /* archive. */ 906 call ioa_ ("Multiple PNOTICE segs required. Object will be done first."); 907 call ioa_$ioa_switch (Piocb, "^-dec^-1^3-""version 1 structure"); 908 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""no. of pnotices", object_pnotices); 909 call ioa_$ioa_switch (Piocb, "^-dec^-3^3-""no. of STIs"); 910 /* this may change eventually */ 911 do Idx = 1 to object_pnotices; 912 /* this time, there are multiple pnotices, so */ 913 /* they must all be processed. */ 914 if substr (prod_object_pnotice(Idx), 1, 8) = "default." then 915 /* if it is a default copyright... */ 916 do Idx2 = 1 to pnotice_paths.Ntemplates; 917 if pnotice_paths.templates(Idx2).defaultC then do; 918 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 919 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 920 /* leave the new line off */ 921 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 922 call get_year; /*put in current date */ 923 end; 924 end; 925 else if substr (prod_object_pnotice(Idx), 1, 20) = "default_trade_secret" then 926 /* if it is a default TS pnotice... */ 927 do Idx2 = 1 to pnotice_paths.Ntemplates; 928 if pnotice_paths.templates(Idx2).defaultTS then do; 929 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 930 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 931 /* leave the new line off */ 932 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 933 pn = pn || " acc " || """" || temp || """" || NL; 934 /* add it to the list of pnotices. */ 935 end; 936 end; 937 /* otherwise, look for a matching pnotice... */ 938 else do Idx2 = 1 to pnotice_paths.Ntemplates; 939 if pnotice_paths.templates(Idx2).primary_name = prod_object_pnotice(Idx) then do; 940 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 941 /* leave the new line off the lgth */ 942 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 943 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 944 call get_year; /*put in current date */ 945 end; 946 end; 947 end; 948 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""lgth of all pnotices + no. of pnotices", Ltotal + object_pnotices); 949 call ioa_$ioa_switch (Piocb, "^a", pn); /* insert all pnotices */ 950 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", prod_sti); 951 /* STI for source code */ 952 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "2" || substr(prod_sti, 3)); 953 /* STI for object code */ 954 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "3" || substr(prod_sti, 3)); 955 /* STI for executable code */ 956 call ioa_$ioa_switch (Piocb, "^-end"); 957 call iox_$close (Piocb, code); 958 if code ^= 0 then 959 call com_err_ (code, ME, "Closing PNOTICE switch."); 960 call iox_$detach_iocb (Piocb, code); 961 if code ^= 0 then 962 call com_err_ (code, ME, "Detaching PNOTICE switch."); 963 /* finished with source segment now */ 964 965 966 call ioa_ ("Creating ^a>PNOTICE_^a.", rtrim(working_dir), prod); 967 call alm (rtrim(working_dir) || ">PNOTICE_" || prod); 968 969 call delete_$path (working_dir, "PNOTICE_" || rtrim(prod) || ".alm", "100100"b, ME, code); 970 if code ^= 0 then 971 call com_err_ (code, ME, "Deleting PNOTICE source for the object archive."); 972 /* now create PNOTICE for the source archive. */ 973 Piocb = null; 974 Ltotal = 0; /* don't use anything from the object PNOTICE. */ 975 pn = ""; /* ditto */ 976 call iox_$attach_ioname (ME, Piocb, "vfile_ " 977 || rtrim(working_dir) || ">" || "PNOTICE_" 978 || rtrim(prod) || ".alm", code); 979 if code ^= 0 then do; 980 call com_err_ (code, ME, "^/Attaching PNOTICE segment."); 981 return; 982 end; 983 call iox_$open (Piocb, 2, "0"b, code); 984 if code ^= 0 then do; 985 call com_err_ (code, ME, "^/Opening PNOTICE seg switch for output."); 986 return; 987 end; 988 call ioa_ ("Creating ^a>PNOTICE_^a.alm.", rtrim(working_dir), prod); 989 call ioa_$ioa_switch (Piocb, "^-dec^-1^3-""version 1 structure"); 990 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""no. of pnotices", source_pnotices); 991 call ioa_$ioa_switch (Piocb, "^-dec^-3^3-""no. of STIs"); 992 /* this may change eventually */ 993 do Idx = 1 to source_pnotices; /* there may also be multiple pnotices here. */ 994 if substr (prod_source_pnotice(Idx), 1, 8) = "default." then 995 /* if it is a default copyright... */ 996 do Idx2 = 1 to pnotice_paths.Ntemplates; 997 if pnotice_paths.templates(Idx2).defaultC then do; 998 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 999 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 1000 /* leave the new line off */ 1001 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 1002 call get_year; /*put in current date */ 1003 end; 1004 end; 1005 else if substr (prod_source_pnotice(Idx), 1, 20) = "default_trade_secret" then 1006 /* if it is a default TS pnotice... */ 1007 do Idx2 = 1 to pnotice_paths.Ntemplates; 1008 if pnotice_paths.templates(Idx2).defaultTS then do; 1009 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 1010 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 1011 /* leave the new line off */ 1012 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 1013 pn = pn || " acc " || """" || temp || """" || NL; 1014 /* add it to the list of pnotices. */ 1015 end; 1016 end; 1017 /* otherwise, look for a matching pnotice... */ 1018 else do Idx2 = 1 to pnotice_paths.Ntemplates; 1019 if pnotice_paths.templates(Idx2).primary_name = prod_source_pnotice(Idx) then do; 1020 Ltotal = Ltotal + pnotice_paths.templates(Idx2).Ltemplate - 1; 1021 /* leave the new line off the lgth */ 1022 Ltemp = pnotice_paths.templates(Idx2).Ltemplate - 1; 1023 Ptemp = pnotice_paths.templates(Idx2).Ptemplate; 1024 call get_year; /*put in current date */ 1025 end; 1026 end; 1027 end; 1028 call ioa_$ioa_switch (Piocb, "^-dec^-^d^3-""lgth of all pnotices + no. of pnotices", Ltotal + source_pnotices); 1029 call ioa_$ioa_switch (Piocb, "^a", pn); /* insert all pnotices */ 1030 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", prod_sti); 1031 /* STI for source code */ 1032 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "2" || substr(prod_sti, 3)); 1033 /* STI for object code */ 1034 call ioa_$ioa_switch (Piocb, "^-aci^-""^a""", substr(prod_sti, 1, 1) || "3" || substr(prod_sti, 3)); 1035 /* STI for executable code */ 1036 call ioa_$ioa_switch (Piocb, "^-end"); 1037 call iox_$close (Piocb, code); 1038 if code ^= 0 then 1039 call com_err_ (code, ME, "Closing PNOTICE switch."); 1040 call iox_$detach_iocb (Piocb, code); 1041 if code ^= 0 then 1042 call com_err_ (code, ME, "Detaching PNOTICE switch."); 1043 /* finished with source segment now */ 1044 1045 1046 return; 1047 1048 1049 get_year: 1050 proc; 1051 1052 dcl temp2 char(Ltemp); 1053 1054 Iyr = index(Ptemp->temp,""); 1055 if Iyr = 0 then 1056 pn = pn || " acc " || """" || temp || """" || NL; 1057 else do; 1058 temp2 = Ptemp->temp; 1059 substr(temp2,Iyr,4) = current_year_a; 1060 pn = pn || " acc " || """" || temp2 || """" || NL; 1061 end; 1062 return; 1063 end get_year; 1064 1065 1066 end make_PNOTICE; 1067 1068 1069 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1070 1071 archive_PNOTICE: 1072 proc (source_dir, object_dir); 1073 1074 1075 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1076 /* */ 1077 /* This internal procedure provides the capability for appending or replacing the */ 1078 /* PNOTICE segments in both source and object archives. In order to do so, the archive */ 1079 /* command itself is called....which may be questionable....but it was in the specs, so */ 1080 /* it was done. */ 1081 /* */ 1082 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1083 1084 dcl source_dir char(*), 1085 object_dir char(*); 1086 1087 1088 S_ARCHIVE: 1089 component_name = "PNOTICE_" || rtrim(prod) || ".alm"; 1090 if Fspec then do; /* if "-special" has been used */ 1091 this_is_source_archive = True; 1092 call check_acl (Ps_archive, sdir, sentry, Fmust_reset_source); 1093 goto S_INFO; /* archive is already known */ 1094 end; 1095 call hcs_$initiate_count (source_dir, prod_source_ename, "", sbit_count, 0, Ps_archive, code); 1096 if Ps_archive = null then do; 1097 call com_err_ (code, ME, "Initiating source archive - Procedure terminated."); 1098 return; 1099 end; 1100 S_INFO: call archive_$get_component_info (Ps_archive, sbit_count, component_name, addr(ACI), code); 1101 if code = error_table_$no_component then 1102 goto NO_S_COMPONENT; 1103 else if code ^= 0 then do; 1104 call com_err_ (code, ME, "^/Getting source archive component info, PNOTICE not appended."); 1105 return; 1106 end; 1107 else do; 1108 call ioa_ ("Replacing ^a in ^a in ^a.", component_name, prod_source_ename, source_dir); 1109 call archive ("rd", rtrim(source_dir) || ">" || rtrim(prod_source_ename), 1110 rtrim(working_dir) || ">" || rtrim(component_name)); 1111 /* Replace and Delete */ 1112 goto O_ARCHIVE; 1113 end; 1114 1115 NO_S_COMPONENT: 1116 call ioa_ ("Appending ^a to ^a in ^a.", component_name, prod_source_ename, source_dir); 1117 call archive ("ad", rtrim(source_dir) || ">" || rtrim(prod_source_ename), 1118 rtrim(working_dir) || ">" || rtrim(component_name)); 1119 /* Append and Delete */ 1120 1121 1122 O_ARCHIVE: 1123 component_name = rtrim("PNOTICE_" || rtrim(prod)); 1124 if Fspec then do; 1125 this_is_object_archive = True; 1126 call check_acl (Po_archive, odir, oentry, Fmust_reset_object); 1127 goto O_INFO; 1128 end; 1129 call hcs_$initiate_count (object_dir, prod_object_ename, "", obit_count, 0, Po_archive, code); 1130 if Po_archive = null then do; 1131 call com_err_ (code, ME, "Initiating object archive - Procedure terminated."); 1132 return; 1133 end; 1134 O_INFO: call archive_$get_component_info (Po_archive, obit_count, component_name, addr(ACI), code); 1135 if code = error_table_$no_component then 1136 goto NO_O_COMPONENT; 1137 else if code ^= 0 then do; 1138 call com_err_ (code, ME, "^/Getting object archive component info, PNOTICE not appended."); 1139 return; 1140 end; 1141 else do; 1142 call ioa_ ("Replacing ^a in ^a in ^a.", component_name, prod_object_ename, object_dir); 1143 call archive ("rd", rtrim(object_dir) || ">" || rtrim(prod_object_ename), 1144 rtrim(working_dir) || ">" || rtrim(component_name)); 1145 /* Replace and Delete */ 1146 goto END_ARCHIVE; 1147 end; 1148 NO_O_COMPONENT: 1149 call ioa_ ("Appending ^a to ^a in ^a.", component_name, prod_object_ename, object_dir); 1150 call archive ("ad", rtrim(object_dir) || ">" || rtrim(prod_object_ename), 1151 rtrim(working_dir) || ">" || rtrim(component_name)); 1152 /* Append and Delete */ 1153 1154 1155 END_ARCHIVE: 1156 return; 1157 end archive_PNOTICE; 1158 1159 1160 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1161 1162 check_acl: 1163 proc (Aptr, Adir, Aentry, Areset_acl); 1164 1165 1166 dcl Aptr ptr, /* IN */ 1167 Adir char(*), /* IN */ 1168 Aentry char(*), /* IN */ 1169 Atype bit(1), /* IN, True = source and False = object */ 1170 Areset_acl bit(1); /* OUT */ 1171 dcl Acode fixed bin (35), 1172 original_source_mode bit(36) aligned, 1173 original_object_mode bit(36) aligned; 1174 1175 dcl 1 acle(1), /* structure for the list_acl and */ 1176 /* add_acl_entries calls */ 1177 2 name char(32) aligned, 1178 2 mode bit(36) aligned, 1179 2 mbz bit(36) aligned, 1180 2 code fixed bin (35); 1181 1182 dcl 1 del_acl(1), /* structure for the delete_acl_entries call */ 1183 2 name char(32) aligned, 1184 2 code fixed bin (35); 1185 1186 dcl one_word char(4) based, 1187 error_table_$user_not_found fixed bin(35) ext static; 1188 1189 on no_write_permission goto FORCE_ACL; 1190 Aptr -> one_word = Aptr -> one_word; /* try to write the first word of the seg. */ 1191 return; /* no need to go further if it worked. */ 1192 1193 1194 FORCE_ACL: 1195 acle(1).name = get_group_id_ (); 1196 acle(1).mode = "0"b; 1197 acle(1).mbz = "0"b; 1198 acle(1).code = 0; 1199 call hcs_$list_acl (Adir, Aentry, null, null, addr(acle), 1, Acode); 1200 if acle(1).code ^= 0 then 1201 if acle(1).code = error_table_$user_not_found then do; 1202 /* this user not in ACL */ 1203 if this_is_source_archive then 1204 user_on_source_acl = False; 1205 if this_is_object_archive then 1206 user_on_object_acl = False; 1207 end; 1208 else 1209 goto ERROR; 1210 else do; 1211 if Acode ^= 0 then do; 1212 acle(1).code = Acode; 1213 goto ERROR; 1214 end; 1215 if this_is_source_archive then do; 1216 user_on_source_acl = True; 1217 original_source_mode = acle(1).mode; /* save current mode for restoring */ 1218 end; 1219 if this_is_object_archive then do; 1220 user_on_object_acl = True; 1221 original_object_mode = acle(1).mode; 1222 end; 1223 end; 1224 acle(1).mode = "101"b; /* we need rw access */ 1225 acle(1).mbz = "0"b; 1226 acle(1).code = 0; 1227 call hcs_$add_acl_entries (Adir, Aentry, addr(acle), 1, Acode); 1228 if Acode ^= 0 then do; 1229 call com_err_ (Acode, ME, " 1230 Unable to force write access for ^a to ^a>^a.", acle(1).name, Adir, Aentry); 1231 goto CLEAN; 1232 end; 1233 Areset_acl = True; /* some resetting will be required */ 1234 return; 1235 ERROR: call com_err_ (acle(1).code, ME, " 1236 When listing ^a's access to ^a>^a", acle(1).name, Adir, Aentry); 1237 goto CLEAN; 1238 1239 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1240 1241 1242 check_acl$reset_acl: 1243 entry (Aptr, Adir, Aentry, Atype, Areset_acl); 1244 1245 acle(1).name = get_group_id_ (); /* this proc has its own stack frame, so don't */ 1246 /* rely on earlier name being there... */ 1247 if Areset_acl then do; /* we must restore old mode */ 1248 if Atype = True then 1249 acle(1).mode = original_source_mode; 1250 else 1251 acle(1).mode = original_object_mode; 1252 acle(1).mbz = "0"b; 1253 acle(1).code = 0; 1254 call hcs_$add_acl_entries (Adir, Aentry, addr(acle), 1, Acode); 1255 if acle(1).code ^= 0 then do; 1256 call com_err_ (Acode, ME, " 1257 Restoring access for ^a to ^a>^a.", acle(1).name, Adir, Aentry); 1258 return; 1259 end; 1260 end; 1261 else do; 1262 del_acl(1).name = acle(1).name; 1263 del_acl(1).code = 0; 1264 call hcs_$delete_acl_entries (Adir, Aentry, addr(del_acl), 1, Acode); 1265 if Acode ^= 0 then 1266 call com_err_ (Acode, ME, " 1267 Removing access for ^a to ^a>^a.", del_acl(1).name, Adir, Aentry); 1268 return; 1269 end; 1270 return; 1271 1272 end check_acl; 1273 1274 1275 1276 1277 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1278 1279 1280 check_multiple_pnotices: 1281 proc returns (bit (1)); 1282 1283 dcl Idx1 fixed bin, 1284 Idx2 fixed bin, 1285 value bit (1), 1286 TS bit (1), 1287 CP bit (1); 1288 1289 value = True; /* assume things are OK */ 1290 TS = False; 1291 CP = False; 1292 do Idx = 1 to source_pnotices; 1293 if after(prod_source_pnotice(Idx), ".") = "trade_secret.pnotice" then 1294 TS = True; 1295 else 1296 CP = True; 1297 do Idx1 = 1 to source_pnotices; 1298 do Idx2 = Idx1 + 1 to source_pnotices; 1299 if prod_source_pnotice(Idx1) = prod_source_pnotice(Idx2) then 1300 call ioa_ ("Error in psp_info_ for ^a: Duplicate source notices.", prod); 1301 end; 1302 end; 1303 end; 1304 if CP & TS then do; 1305 call ioa_ ("Error in psp_info_ for ^a: mixed copyright and Trade Secret for source.", prod); 1306 value = False; 1307 end; 1308 /* now check object too */ 1309 TS = False; 1310 CP = False; 1311 do Idx = 1 to object_pnotices; 1312 if after(prod_object_pnotice(Idx), ".") = "trade_secret.pnotice" then 1313 TS = True; 1314 else 1315 CP = True; 1316 do Idx1 = 1 to object_pnotices; 1317 do Idx2 = Idx1 + 1 to object_pnotices; 1318 if prod_object_pnotice(Idx1) = prod_object_pnotice(Idx2) then 1319 call ioa_ ("Error in psp_info_ for ^a: duplicate object notices.", prod); 1320 end; 1321 end; 1322 end; 1323 if CP & TS then do; 1324 call ioa_ ("Error in psp_info_ for ^a: mixed copyright and Trade Secret for object.", prod); 1325 value = False; 1326 end; 1327 1328 1329 return (value); 1330 end check_multiple_pnotices; 1331 1332 1333 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1334 1335 1336 get_PNOTICE_info: 1337 proc; 1338 1339 1340 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1341 /* */ 1342 /* This internal procedure is used only when the "-special" control argument has been */ 1343 /* specified. A user of this command must have good reason to use this argument because */ 1344 /* it basically over-rides psp_info_, and in most cases, ignores it. The presumed major */ 1345 /* use of this functionality would be to create PNOTICEs for pre-release software or */ 1346 /* RPQ'd software. It is presumed that the user has proper legal and other documentation */ 1347 /* necessary to correctly protect and identify the software in question. */ 1348 /* */ 1349 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1350 1351 1352 dcl product_known bit(1), 1353 prodno fixed bin; 1354 1355 1356 call ioa_ ("Type ""?"" for more info on any question."); 1357 call ioa_ ("Type ""exit"" at any time to exit prematurely."); 1358 ASK_PROD: call command_query_ (addr(query_info), answer, ME, "-> Generic name? "); 1359 if answer = "exit" then 1360 goto CLEAN; 1361 if answer = "?" then do; 1362 call ioa_ ("Generic name (<= 20 chars). 1363 ^/A descriptive short name for the software module(s) to be protected."); 1364 goto ASK_PROD; 1365 end; 1366 else do; 1367 call check_entryname_ ("PNOTICE_" || answer || ".alm", code); 1368 /* check the source form of the name */ 1369 if code ^= 0 then do; /* if its bad, complain */ 1370 call com_err_ (code, ME, " 1371 Your answer would form an illegal name:^/PNOTICE_^a.alm", answer); 1372 goto ASK_PROD; 1373 end; 1374 else 1375 prod = answer; /* else accept it */ 1376 end; 1377 do prodno = 1 to product.prod_number while (prod ^= product.num(prodno).prod_name); 1378 /* find out if it is a known product */ 1379 end; 1380 if prodno > product.prod_number then 1381 product_known = False; /* it is not known */ 1382 else product_known = True; /* it IS known */ 1383 if product_known & product.num(prodno).prod_use(1) ^= "" then do; 1384 call ioa_ ("Multiple products found in psp_info_. 1385 ^/Please use this command for each product."); 1386 /* This msg is produced if the user tries this */ 1387 /* command and finds only a "Use: " statement */ 1388 1389 1390 goto CLEAN; 1391 end; 1392 if product_known then 1393 call ioa_ ("^a is in psp_info_, type ""pr"" to see the STI, else input new STI.", prod); 1394 ASK_STI: call command_query_ (addr(query_info), answer, ME, "-> STI? "); 1395 if answer = "exit" then 1396 goto CLEAN; 1397 if answer = "?" then do; 1398 call ioa_ ("STI (12 chars). 1399 Software Technical ID. May be blank for non-product software. 1400 Type CR for blank STI.^/Type ""..help sti.gi"" for more information."); 1401 goto ASK_STI; 1402 end; 1403 else if answer = "pr" then do; 1404 if product_known then 1405 call ioa_ ("STI for ^a:^-^a", prod, product.num(prodno).prod_STI); 1406 else 1407 call ioa_ ("^a is not in psp_info_, there is no STI.", prod); 1408 goto ASK_STI; 1409 end; 1410 else if product_known then do; /* there is such a product */ 1411 if answer = "" then do; 1412 call ioa_ ("Error - ^a is in psp_info_. You must supply an updated STI.", prod); 1413 call ioa_ ("Type ""pr"" to see STI, type ""..help sti.gi"" for more information."); 1414 goto ASK_STI; 1415 end; 1416 else if length(answer) ^= 12 then do; 1417 call ioa_ ("Error - the STI must be 12 characters long."); 1418 goto ASK_STI; 1419 end; 1420 prod_sti = answer; 1421 if ^parse_pnotice_info_$validate_sti (prod_sti) then do; 1422 call ioa_ ("Error - invalid STI: ^a", prod_sti); 1423 goto ASK_STI; 1424 end; 1425 end; 1426 else do; /* there is no product in psp_info_ */ 1427 if answer = "" then do; 1428 prod_sti = answer; /* accept blank for non-products */ 1429 goto ASK_PNOTICE; 1430 end; 1431 1432 else if length(answer) ^= 12 then do; 1433 call ioa_ ("Error - the STI must be 12 characters long.^/Type ""..help sti.gi"" for more information."); 1434 goto ASK_STI; 1435 end; 1436 prod_sti = answer; 1437 if ^parse_pnotice_info_$validate_sti (prod_sti) then do; 1438 call ioa_ ("Error - Invalid Software Technical Identifier."); 1439 goto ASK_STI; 1440 end; 1441 end; 1442 answer = ""; /* avoid possible problems */ 1443 ASK_PNOTICE: 1444 if product_known then do; /* if there is already a product, ask if they */ 1445 /* should be included or not. */ 1446 call ioa_ ("^a is in psp_info_.^/Type ""ls"" for list of notice names in psp_info_ for ^a.", prod, prod); 1447 call ioa_ ("Type ""lpn"" to see all available notice names. 1448 Type ""yes"" to include notices already in psp_info_, or ""no"" to input your own notices."); 1449 ASK1: call command_query_ (addr(query_info), answer, ME, 1450 "Include the notices from psp_info_? Type ""yes"" or ""no""."); 1451 if answer = "exit" then /* just want out */ 1452 goto CLEAN; 1453 if answer = "yes" then do; /* get names from psp_info_ */ 1454 Idx = 0; /*Initialize index to 0 */ 1455 do Idx3 = 1 to hbound (product.num.source_C, 2); 1456 if product.num(prodno).source_C(Idx3) = "" then; 1457 else do; 1458 prod_source_pnotice(Idx3) = product.num(prodno).source_C(Idx3); 1459 Idx1 = check_name(prod_source_pnotice(Idx3)); 1460 if Idx1 > pnotice_paths.Ntemplates then do; 1461 code = error_table_$name_not_found; 1462 call com_err_ (code, ME, "^/Invalid psp_info_ name - ^a.", prod_source_pnotice(Idx3)); 1463 goto CLEAN; 1464 end; 1465 Idx = Idx + 1; 1466 if Idx > 1 then 1467 if ^templates_compatible(prod_source_pnotice) 1468 then do; 1469 call com_err_ (code, ME, "^a - ^/pnotice types not compatible", prod); 1470 goto CLEAN; 1471 end; 1472 source_pnotices = source_pnotices + 1; 1473 end; 1474 end; 1475 Idx = 0; /* Initialize index to 0 */ 1476 do Idx3 = 1 to hbound (product.num.object_C, 2); 1477 if product.num(prodno).object_C(Idx3) = "" then; 1478 else do; 1479 prod_object_pnotice(Idx3) = product.num(prodno).object_C(Idx3); 1480 Idx1 = check_name(prod_object_pnotice(Idx3)); 1481 if Idx1 > pnotice_paths.Ntemplates then do; 1482 code = error_table_$name_not_found; 1483 call com_err_ (code, ME, "^/Invalid psp_info_ name - ^a.", prod_object_pnotice(Idx3)); 1484 goto CLEAN; 1485 end; 1486 Idx = Idx + 1; 1487 if Idx > 1 then 1488 if ^templates_compatible(prod_object_pnotice) 1489 then do; 1490 call com_err_ (code, ME, "^a - ^/pnotice types not compatible", prod); 1491 goto CLEAN; 1492 end; 1493 object_pnotices = object_pnotices + 1; 1494 end; 1495 end; 1496 goto GOT_PSP; /* got'em */ 1497 end; 1498 1499 else if answer = "lpn" then do; 1500 /* tell me what's available */ 1501 call list_pnotice_names (); 1502 goto ASK1; 1503 end; 1504 else if answer = "ls" then do; /* tell me what's in psp_info_ */ 1505 call ioa_ ("Source notices in psp_info_ for ^a:", prod); 1506 do Idx = 1 to hbound(product.num.source_C, 2) while (product.num(prodno).source_C(Idx) ^= ""); 1507 call ioa_ ("^3x^a", product.num(prodno).source_C(Idx)); 1508 end; 1509 call ioa_ ("Object notices in psp_info_ for ^a:", prod); 1510 do Idx = 1 to hbound(product.num.object_C, 2) while (product.num(prodno).object_C(Idx) ^= ""); 1511 call ioa_ ("^3x^a", product.num(prodno).object_C(Idx)); 1512 end; 1513 goto ASK1; 1514 end; 1515 else if answer = "no" then do; 1516 source_pnotices = 0; 1517 object_pnotices = 0; 1518 goto START_PN; 1519 end; 1520 else do; 1521 call ioa_ ("Unrecognized answer - ^a", answer); 1522 goto ASK_PNOTICE; 1523 end; 1524 GOT_PSP: call ioa_ ("Notices from psp_info_ have been included."); 1525 call command_query_ (addr(query_info), answer, ME, "->Do you wish to input more? Type ""yes"" or ""no"":"); 1526 if answer = "exit" then 1527 goto CLEAN; 1528 if answer = "yes" then do; 1529 START_PN: call ioa_ ("Input source pnotice names, type ""q"" when done."); 1530 Idx = 0; 1531 GET_PN: do Idx3 = source_pnotices to hbound(prod_source_pnotice, 1); 1532 ASK_SNAME: call command_query_ (addr(query_info), answer, ME, "-> Source pnotice name? "); 1533 if answer = "exit" then 1534 goto CLEAN; 1535 else if answer = "q" then do; 1536 if source_pnotices = 0 then do; 1537 call ioa_ ("There must be at least one source notice."); 1538 goto ASK_SNAME; 1539 end; 1540 else 1541 goto BEGIN_ONAME; 1542 end; 1543 else if answer = "?" then do; 1544 call ioa_ ("Source pnotice name (<= 24 chars). 1545 ^/Primary name of a pnotice template, without the "".pnotice"" suffix."); 1546 goto ASK_SNAME; 1547 end; 1548 else if answer = "lpn" then do; 1549 call list_pnotice_names (); 1550 goto ASK_SNAME; 1551 end; 1552 else if index (answer, "pnotice") ^= 0 then do; 1553 call ioa_ ("Error - Type template primary name, without the ""pnotice"" suffix."); 1554 goto ASK_SNAME; 1555 end; 1556 else do; 1557 Idx2 = check_name(answer); 1558 if Idx2 > pnotice_paths.Ntemplates then do; 1559 code = error_table_$name_not_found; 1560 call com_err_ (code, ME, "^/The template was not found - ^a.", answer); 1561 call ioa_ ("Type ""lpn"" for template names."); 1562 goto ASK_SNAME; 1563 end; 1564 Idx = Idx + 1; 1565 prod_source_pnotice(Isnotice + Idx) = 1566 templates(Idx2).primary_name; 1567 /* add this one to the list */ 1568 if Idx > 1 then 1569 if ^templates_compatible(prod_source_pnotice) 1570 then do; 1571 call com_err_ (code, ME, "^a - ^/pnotice types not compatible", prod); 1572 goto ASK_SNAME; 1573 end; 1574 end; 1575 source_pnotices = Idx; 1576 end; 1577 BEGIN_ONAME: call ioa_ ("Input object pnotice names, type ""q"" when done."); 1578 Idx = 0; 1579 do Idx3 = object_pnotices to hbound(prod_object_pnotice, 1); 1580 ASK_ONAME: call command_query_ (addr(query_info), answer, ME, "-> Object pnotice name? "); 1581 if answer = "exit" then 1582 goto CLEAN; 1583 if answer = "q" then do; 1584 if object_pnotices = 0 then do; 1585 call ioa_ ("There must be at least one object notice."); 1586 goto ASK_ONAME; 1587 end; 1588 else 1589 goto ASK_SARCHIVE; 1590 end; 1591 else if answer = "?" then do; 1592 call ioa_ ("Object pnotice name (<= 24 chars). 1593 ^/Primary name of a pnotice template, without the "".pnotice"" suffix."); 1594 goto ASK_ONAME; 1595 end; 1596 else if answer = "lpn" then do; 1597 call list_pnotice_names (); 1598 goto ASK_ONAME; 1599 end; 1600 else if index (answer, "pnotice") ^= 0 then do; 1601 call ioa_ ("Error - Type template primary name, without the ""pnotice"" suffix."); 1602 goto ASK_ONAME; 1603 end; 1604 else do; 1605 Idx2 = check_name(answer); 1606 if Idx2 > pnotice_paths.Ntemplates then do; 1607 code = error_table_$name_not_found; 1608 call com_err_ (code, ME, "^/The template was not found - ^a.", answer); 1609 call ioa_ ("^/Type ""lpn"" for template names."); 1610 goto ASK_ONAME; 1611 end; 1612 Idx = Idx + 1; 1613 prod_object_pnotice(Ionotice + Idx) = 1614 templates(Idx2).primary_name; 1615 /* add this one to the list */ 1616 if Idx > 1 then 1617 if ^templates_compatible(prod_object_pnotice) 1618 then do; 1619 call com_err_ (code, ME, "^a - ^/pnotice types not compatible", prod); 1620 goto ASK_ONAME; 1621 end; end; 1622 object_pnotices = Idx; 1623 end; 1624 end; 1625 end; 1626 else do; /* if there is no psp_info_ entry */ 1627 Idx = 0; 1628 call ioa_ ("Input source pnotice names. 1629 Type ""q"" when done.^/Type ""lpn"" to see all available notice names."); 1630 do Idx3 = object_pnotices to hbound(prod_object_pnotice, 1); 1631 ASK_SNAME_ALL: call command_query_ (addr(query_info), answer, ME, "-> Source pnotice name? "); 1632 if answer = "exit" then 1633 goto CLEAN; 1634 if answer = "?" then do; 1635 call ioa_ ("Source pnotice name (<= 24 chars). 1636 Primary name of a pnotice template, without the "".pnotice"" suffix. 1637 Type ""lpn"" for available names. Type ""q"" when finished."); 1638 goto ASK_SNAME_ALL; 1639 end; 1640 else if answer = "lpn" then do; 1641 call list_pnotice_names (); 1642 goto ASK_SNAME_ALL; 1643 end; 1644 else if index (answer, "pnotice") ^= 0 then do; 1645 call ioa_ ("Error - Type template primary name, without the ""pnotice"" suffix."); 1646 goto ASK_SNAME_ALL; 1647 end; 1648 else if answer = "" then do; 1649 call ioa_ ("Error - A pnotice primary name is required."); 1650 goto ASK_SNAME_ALL; 1651 end; 1652 else if answer = "q" & source_pnotices > 0 then 1653 goto BEGIN_ONAME_ALL; 1654 else do; 1655 Idx2 = check_name(answer); 1656 if Idx2 > pnotice_paths.Ntemplates then do; 1657 code = error_table_$name_not_found; 1658 call com_err_ (code, ME, "^/The template was not found - ^a.", answer); 1659 call ioa_ ("Type ""lpn"" for available names."); 1660 goto ASK_SNAME_ALL; 1661 end; 1662 Idx = Idx + 1; 1663 prod_source_pnotice(Idx) = 1664 templates(Idx2).primary_name; 1665 /* add this one to the list */ 1666 if Idx > 1 then 1667 if ^templates_compatible(prod_source_pnotice) then 1668 goto ASK_SNAME_ALL; 1669 end; 1670 source_pnotices = Idx; 1671 end; 1672 BEGIN_ONAME_ALL: 1673 Idx = 0; 1674 call ioa_ ("Input object pnotice names. Type ""q"" when done."); 1675 do Idx3 = object_pnotices to hbound(prod_object_pnotice, 1); 1676 ASK_ONAME_ALL: call command_query_ (addr(query_info), answer, ME, "-> Object pnotice name? "); 1677 if answer = "exit" then 1678 goto CLEAN; 1679 if answer = "?" then do; 1680 call ioa_ ("Object pnotice name (<= 24 chars). 1681 Primary name of a pnotice template, without the "".pnotice"" suffix. 1682 Type ""lpn"" for available names. Type ""q"" when finished."); 1683 goto ASK_ONAME_ALL; 1684 end; 1685 else if answer = "lpn" then do; 1686 call list_pnotice_names (); 1687 goto ASK_ONAME_ALL; 1688 end; 1689 else if index (answer, "pnotice") ^= 0 then do; 1690 1691 call ioa_ ("Error - Type template primary name, without the ""pnotice"" suffix."); 1692 goto ASK_ONAME_ALL; 1693 end; 1694 else if answer = "" then do; 1695 call ioa_ ("Error - A pnotice primary name is required."); 1696 goto ASK_ONAME_ALL; 1697 end; 1698 else if answer = "q" & object_pnotices > 0 then 1699 goto ASK_SARCHIVE; 1700 else do; 1701 Idx2 = check_name(answer); 1702 if Idx2 > pnotice_paths.Ntemplates then do; 1703 code = error_table_$name_not_found; 1704 call com_err_ (code, ME, "^/The template was not found - ^a.", answer); 1705 call ioa_ ("^/Type ""lpn"" for available names."); 1706 goto ASK_ONAME_ALL; 1707 end; 1708 Idx = Idx + 1; 1709 prod_object_pnotice(Idx) = 1710 templates(Idx2).primary_name; 1711 /* add this one to the list */ 1712 if Idx > 1 then 1713 if ^templates_compatible(prod_object_pnotice) then 1714 goto ASK_ONAME_ALL; /*templates in prod_object_pnotice not compatible */ 1715 /* - reinput correctly */ 1716 end; 1717 object_pnotices = Idx; 1718 end; 1719 end; 1720 ASK_SARCHIVE: 1721 call command_query_ (addr(query_info), answer, ME, "-> Pathname of source archive? "); 1722 if answer = "exit" then 1723 goto CLEAN; 1724 if answer = "?" then do; 1725 call ioa_ ("Archive pathname of source archive. 1726 ^/Example: >exl>new_dir>source>bound_new_.s"); 1727 goto ASK_SARCHIVE; 1728 end; 1729 if index(answer, ".archive") = 0 then 1730 path = answer || ".archive"; 1731 else 1732 path = answer; 1733 call expand_pathname_ (path, sdir, sentry, code); 1734 if code ^= 0 then do; 1735 call com_err_ (code, ME, "^a.", path); 1736 goto CLEAN; 1737 end; 1738 call hcs_$initiate_count (sdir, sentry, "", sbit_count, 0, Ps_archive, code); 1739 if Ps_archive = null then do; 1740 if code = error_table_$noentry then do; 1741 call com_err_ (code, ME, "^a.", path); 1742 goto ASK_SARCHIVE; 1743 end; 1744 else do; 1745 call com_err_ (code, ME, "^a. ^/Terminating this procedure.", path); 1746 goto CLEAN; 1747 end; 1748 end; 1749 if ^Fspec then 1750 call check_archive (sdir, sentry, Ps_archive); 1751 prod_source_ename = sentry; /* save entry name */ 1752 1753 1754 ASK_OARCHIVE: 1755 call command_query_ (addr(query_info), answer, ME, "-> Pathname of object archive? "); 1756 if answer = "exit" then 1757 goto CLEAN; 1758 if answer = "?" then do; 1759 call ioa_ ("Archive pathname of object archive. 1760 ^/Example: >exl>new_dir>object>bound_new_"); 1761 goto ASK_OARCHIVE; 1762 end; 1763 if index(answer, ".archive") = 0 then 1764 path = answer || ".archive"; 1765 else 1766 path = answer; 1767 call expand_pathname_ (path, odir, oentry, code); 1768 if code ^= 0 then do; 1769 call com_err_ (code, ME, "^a.", path); 1770 goto CLEAN; 1771 end; 1772 call hcs_$initiate_count (odir, oentry, "", obit_count, 0, Po_archive, code); 1773 if Po_archive = Ps_archive then do; /*cannot use same archive for both source and */ 1774 /* object pnotices */ 1775 call ioa_ ("The same archive may not be used for both source and object pnotices."); 1776 call com_err_ (code, ME, "^a. ^/Terminating this procedure.",path); 1777 goto CLEAN; 1778 end; 1779 if Po_archive = null then do; 1780 if code = error_table_$noentry then do; 1781 call com_err_ (code, ME, "^a.", path); 1782 goto ASK_OARCHIVE; 1783 end; 1784 else do; 1785 call com_err_ (code, ME, "^a. ^/Terminating this procedure.", path); 1786 goto CLEAN; 1787 end; 1788 end; 1789 if ^Fspec then 1790 call check_archive (odir, oentry, Po_archive); 1791 prod_object_ename = oentry; /* save entry name */ 1792 1793 1794 1795 1796 1797 end get_PNOTICE_info; 1798 1799 1800 check_template_name: 1801 proc; 1802 check_name: 1803 entry(name_in) returns (fixed bin); 1804 1805 dcl name_in char(*) var, 1806 count_of fixed bin; 1807 1808 Fdcopy_right = False; 1809 Fdtrade_secret = False; 1810 1811 if name_in = "-trade_secret" | name_in = "-dts" then 1812 Fdtrade_secret = True; 1813 1814 if name_in = "-default_copyright" | name_in = "-dc" then 1815 Fdcopy_right = True; 1816 1817 if Ftrade_secret then do count_of = 1 to pnotice_paths.Ntemplates while (^pnotice_paths.templates(count_of).defaultTS); 1818 end; 1819 1820 if Fdcopy_right then do count_of = 1 to pnotice_paths.Ntemplates while (^pnotice_paths.templates(count_of).defaultC); 1821 end; 1822 1823 if ^Fdcopy_right & ^Fdtrade_secret then 1824 do count_of = 1 to pnotice_paths.Ntemplates while (name_in ^= templates(count_of).primary_name); 1825 end; 1826 1827 return(count_of); 1828 1829 end check_template_name; 1830 1831 templates_compatible: 1832 proc(name_in) returns(bit(1)); 1833 1834 dcl name_in (10) char(32) varying, 1835 i fixed bin(24); 1836 1837 Ftrade_secret = False; 1838 Fdtrade_secret = False; 1839 Fpublic_domain = False; 1840 Fcopy_right = False; 1841 Fdcopy_right = False; 1842 1843 do i = 1 to Idx by 1; 1844 if name_in(i) = "-default_trade_secret" | name_in(i) = "-dts" then 1845 Fdtrade_secret = True; 1846 else 1847 if name_in(i) = "-default_copy_right" | name_in(i) = "-dc" then 1848 Fdcopy_right = True; 1849 else 1850 if name_in(i) = "public_domain" then 1851 Fpublic_domain = True; 1852 else 1853 if reverse(before(reverse(name_in(i)),".")) = "trade_secret" then 1854 Ftrade_secret = True; 1855 else 1856 Fcopy_right = True; 1857 end; 1858 1859 if (Fcopy_right | Fdcopy_right | Ftrade_secret| Fdtrade_secret) & 1860 Fpublic_domain then do; 1861 call ioa_ ("A public domain pnotice can only exist by itself"); 1862 Idx = Idx - 1; 1863 return(False); 1864 end; 1865 if (Fcopy_right | Fdcopy_right | Fpublic_domain) & (Ftrade_secret | 1866 Fdtrade_secret) then do; 1867 call ioa_("Trade secret pnotices can only exist by themselves"); 1868 return(False); 1869 end; 1870 1871 return(True); 1872 1873 end templates_compatible; 1874 1 1 /* BEGIN INCLUDE FILE ... archive_component_info.incl.pl1 ... WOS 01/13/81 */ 1 2 /* Structure describing an archive component, used by archive_ */ 1 3 1 4 dcl archive_component_info_ptr pointer; 1 5 1 6 dcl 1 archive_component_info aligned based (archive_component_info_ptr), 1 7 2 version fixed bin, 1 8 2 comp_bc fixed bin (24), 1 9 2 comp_ptr pointer, 1 10 2 name char (32) unaligned, 1 11 2 time_modified fixed bin (71), 1 12 2 time_updated fixed bin (71), 1 13 2 comp_lth fixed bin (19), 1 14 2 access bit (36) unaligned; 1 15 1 16 dcl ARCHIVE_COMPONENT_INFO_VERSION_1 fixed bin internal static options (constant) init (1); 1 17 1 18 /* BEGIN INCLUDE FILE ... archive_component_info.incl.pl1 ... WOS 01/13/81 */ 1875 1876 2 1 /* START OF: pnotice_paths.incl.pl1 * * * * * * * * * * * * * * * * */ 2 2 2 3 2 4 2 5 /****^ HISTORY COMMENTS: 2 6* 1) change(86-01-28,LJAdams), approve(86-01-28,MCR7150), 2 7* audit(86-02-07,Wallman), install(86-02-13,MR12.0-1017): 2 8* Changed attributes of constants from automatic to internal static options 2 9* constant. Removed all initialization of automatic variables. 2 10* END HISTORY COMMENTS */ 2 11 2 12 2 13 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 14 /* */ 2 15 /* This include file defines the structure that the software protection tools fill in */ 2 16 /* with information on the proper search paths for notice templates, primary names of */ 2 17 /* these templates, their lengths, pointers to each, and whether or not they are the */ 2 18 /* default notice. There are only two defined default notices, one for copyright (named */ 2 19 /* "default.pnotice" as an add_name), and Trade Secret (named */ 2 20 /* "default_trade_secret.pnotice" as an add_name). */ 2 21 /* */ 2 22 /* Created: April 1981 by JM Stansbury */ 2 23 /* Modified: November 1981 by JM Stansbury */ 2 24 /* added Isearch_dir index to allow for >1 search path in search segment. */ 2 25 /* added Ifirst_template and Ilast_template to aid in sort for multiple directories */ 2 26 /* in the search list. */ 2 27 /* Modified: December 10, 1981 by JM Stansbury */ 2 28 /* added duplicate bit to provide list_pnotice_names with capability of flagging */ 2 29 /* and explaining same in its output. */ 2 30 /* Modified: December 7, 1982 by JM Stansbury */ 2 31 /* added type field to indicate whether a notice is copyright, trade secret or */ 2 32 /* public domain. */ 2 33 /* */ 2 34 /* */ 2 35 /* */ 2 36 /* */ 2 37 /* */ 2 38 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 39 2 40 2 41 dcl 1 pnotice_paths aligned based (Ppaths), 2 42 2 Ndirs fixed bin, /* no. of search dirs */ 2 43 2 Ntemplates fixed bin, /* no. of pnotice templates */ 2 44 2 dirs (0 refer (pnotice_paths.Ndirs)), 2 45 3 dir_path char (168) unal, 2 46 3 Ifirst_template fixed bin, /* index of first template in this dir */ 2 47 3 Ilast_template fixed bin, /* index of last template in this dir */ 2 48 2 templates (0 refer (pnotice_paths.Ntemplates)), 2 49 3 primary_name char (32), 2 50 3 Ptemplate ptr, /* ptr to each template */ 2 51 3 Ltemplate fixed bin, /* lgth of each template */ 2 52 3 type fixed bin, /* copyright, trade secret, and */ 2 53 /* public domain */ 2 54 3 Isearch_dir fixed bin, /* index of dir that this template is in */ 2 55 3 defaultC bit (1) unal, /* this bit is ON if the template is a default */ 2 56 /* copyright, i.e. "default.pnotice" */ 2 57 3 defaultTS bit (1) unal, /* this bit is ON if the template is a default */ 2 58 /* trade secret notice, */ 2 59 3 duplicate bit (1) unal, /* this bit is ON if an earlier template in the */ 2 60 /* search list had the same name, and thus */ 2 61 /* would be used instead of this one. */ 2 62 3 pad bit (33) unal; 2 63 2 64 2 65 dcl Ppaths ptr; 2 66 /* types */ 2 67 dcl UNDEFINED fixed bin int static options (constant) init (0); 2 68 dcl COPYRIGHT fixed bin int static options (constant) init (1); 2 69 dcl TRADE_SECRET fixed bin int static options (constant) init (2); 2 70 dcl PUBLIC_DOMAIN fixed bin int static options (constant) init (3); 2 71 2 72 /* END OF: pnotice_paths.incl.pl1 * * * * * * * * * * * * * * * * */ 1877 1878 3 1 /*********** Start of software_pnotice_info_.incl.pl1 *********/ 3 2 /* This file contains the structure used by the software information tools */ 3 3 /* -Written by R. Holmstedt 04/18/81 */ 3 4 3 5 3 6 dcl 01 product aligned based (SI_ptr), /* each PSP will have a entry */ 3 7 02 prod_number fixed bin, /* product count */ 3 8 02 num (0 refer (product.prod_number)), 3 9 03 MI char(7), /* marketing number of this product */ 3 10 03 prod_name char(20), /* generic name of the product */ 3 11 03 prod_title char(80), /* long explaination of the product */ 3 12 03 prod_STI char(12), /* software technical identifier */ 3 13 03 source_C (10) char(24), /* products copyright for source */ 3 14 03 object_C (10) char(24), /* products copyright for object */ 3 15 03 x_path, 3 16 04 dirname char(168), 3 17 04 entryname char(32), 3 18 03 source_path, 3 19 04 dirname char(168), 3 20 04 entryname char(32), 3 21 03 object_path, 3 22 04 dirname char(168), 3 23 04 entryname char(32), 3 24 03 prod_use(10) char(7); /* market number of many products 3 25* that make up this one MI */ 3 26 dcl SI_ptr ptr; 3 27 3 28 /*********** End of software_pnotice_info_.incl.pl1 *********/ 1879 1880 4 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 4 2 /* format: style2,^inddcls,idind32 */ 4 3 4 4 declare 1 terminate_file_switches based, 4 5 2 truncate bit (1) unaligned, 4 6 2 set_bc bit (1) unaligned, 4 7 2 terminate bit (1) unaligned, 4 8 2 force_write bit (1) unaligned, 4 9 2 delete bit (1) unaligned; 4 10 4 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 4 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 4 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 4 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 4 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 4 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 4 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 4 18 4 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 1881 1882 1883 end generate_pnotice; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/13/86 1217.2 generate_pnotice.pl1 >spec>install>1017>generate_pnotice.pl1 1875 1 04/16/81 0942.6 archive_component_info.incl.pl1 >ldd>include>archive_component_info.incl.pl1 1877 2 02/13/86 1218.9 pnotice_paths.incl.pl1 >spec>install>1017>pnotice_paths.incl.pl1 1879 3 03/27/82 0435.8 software_pnotice_info_.incl.pl1 >ldd>include>software_pnotice_info_.incl.pl1 1881 4 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.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. ACI 001256 automatic structure level 1 unaligned dcl 119 set ref 515* 1100 1100 1134 1134 ACIS 000000 constant structure level 1 dcl 122 ref 515 Acode 000100 automatic fixed bin(35,0) dcl 1171 set ref 1199* 1211 1212 1227* 1228 1229* 1254* 1256* 1264* 1265 1265* Adir parameter char unaligned dcl 1166 in procedure "check_acl" set ref 1162 1199* 1227* 1229* 1235* 1242 1254* 1256* 1264* 1265* Adir parameter char unaligned dcl 444 in procedure "check_archive" set ref 441 450* 456* Aentry parameter char unaligned dcl 444 in procedure "check_archive" set ref 441 450* 456* Aentry parameter char unaligned dcl 1166 in procedure "check_acl" set ref 1162 1199* 1227* 1229* 1235* 1242 1254* 1256* 1264* 1265* Aptr parameter pointer dcl 1166 in procedure "check_acl" ref 1162 1190 1190 1242 Aptr parameter pointer dcl 444 in procedure "check_archive" ref 441 454 454 Areset_acl parameter bit(1) unaligned dcl 1166 set ref 1162 1233* 1242 1247 Atype parameter bit(1) unaligned dcl 1166 ref 1242 1248 CASE parameter fixed bin(17,0) dcl 566 ref 532 569 CP 001404 automatic bit(1) unaligned dcl 1283 set ref 1291* 1295* 1304 1310* 1314* 1323 False constant bit(1) initial unaligned dcl 217 ref 415 496 516 517 518 519 520 521 1203 1205 1290 1291 1306 1309 1310 1325 1380 1808 1809 1837 1838 1839 1840 1841 1863 1868 Fany 000100 automatic bit(1) unaligned dcl 54 set ref 250* 261* 277* 293 517* Fcopy_right 000101 automatic bit(1) unaligned dcl 54 set ref 1840* 1855* 1859 1865 Fdcopy_right 000102 automatic bit(1) unaligned dcl 54 set ref 1808* 1814* 1820 1823 1841* 1846* 1859 1865 Fdtrade_secret 000103 automatic bit(1) unaligned dcl 54 set ref 1809* 1811* 1823 1838* 1844* 1859 1865 Fmid 000111 automatic bit(1) unaligned dcl 54 set ref 262* 287 338 521* Fmust_reset_object 000105 automatic bit(1) unaligned dcl 54 set ref 481 496* 1126* Fmust_reset_source 000106 automatic bit(1) unaligned dcl 54 set ref 479 496* 1092* Fname 000104 automatic bit(1) unaligned dcl 54 set ref 251* 287 328 518* Fpublic_domain 000110 automatic bit(1) unaligned dcl 54 set ref 1839* 1849* 1859 1865 Fspec 000112 automatic bit(1) unaligned dcl 54 set ref 280* 293 324 430 478 520* 1090 1124 1749 1789 Fsti 000107 automatic bit(1) unaligned dcl 54 set ref 278* 354 519* Ftrade_secret 000113 automatic bit(1) unaligned dcl 54 set ref 1817 1837* 1852* 1859 1865 Idx 000114 automatic fixed bin(17,0) dcl 54 set ref 234* 235* 243* 243 244* 254* 254 255* 266* 266 267* 356* 366* 366 367 374* 384* 384 385 413* 417* 466* 468 468* 497* 668* 671 682 696* 911* 914 925 939* 993* 994 1005 1019* 1292* 1293* 1311* 1312* 1454* 1465* 1465 1466 1475* 1486* 1486 1487 1506* 1506* 1507* 1510* 1510* 1511* 1530* 1564* 1564 1565 1568 1575 1578* 1612* 1612 1613 1616 1622 1627* 1662* 1662 1663 1666 1670 1672* 1708* 1708 1709 1712 1717 1843 1862* 1862 Idx1 001400 automatic fixed bin(17,0) dcl 1283 in procedure "check_multiple_pnotices" set ref 1297* 1298 1299* 1316* 1317 1318* Idx1 000115 automatic fixed bin(17,0) dcl 54 in procedure "generate_pnotice" set ref 360* 361 378* 379 1459* 1460 1480* 1481 Idx2 000116 automatic fixed bin(17,0) dcl 54 in procedure "generate_pnotice" set ref 357* 357* 359 359 360 363* 375* 375* 377 377 378 381* 416* 417* 498* 592* 595 596 597 599* 603* 606 607 608 610* 615* 616 617 619 620* 671* 674 675 676 678* 682* 685 686 687 689* 695* 696 697 699 700* 755* 758 759 760 762* 766* 769 770 771 773* 779* 780 781 783 784* 832* 835 836 837 839* 843* 846 847 848 850* 856* 857 858 860 861* 914* 917 918 919 921* 925* 928 929 930 932* 938* 939 940 942 943* 994* 997 998 999 1001* 1005* 1008 1009 1010 1012* 1018* 1019 1020 1022 1023* 1557* 1558 1565 1605* 1606 1613 1655* 1656 1663 1701* 1702 1709 Idx2 001401 automatic fixed bin(17,0) dcl 1283 in procedure "check_multiple_pnotices" set ref 1298* 1299* 1317* 1318* Idx3 000117 automatic fixed bin(17,0) dcl 54 set ref 329* 329* 331 339* 339* 341 347 348 354 357 359 375 377 393 395 499* 1455* 1456 1458 1458 1459 1462* 1476* 1477 1479 1479 1480 1483* 1531* 1579* 1630* 1675* Ionotice 000121 automatic fixed bin(17,0) dcl 54 set ref 501* 1613 Isnotice 000120 automatic fixed bin(17,0) dcl 54 set ref 500* 1565 Iyr 000236 automatic fixed bin(24,0) dcl 54 set ref 1054* 1055 1059 Larg 000122 automatic fixed bin(21,0) dcl 54 set ref 235* 237 237 240 242 242 244* 246 246 249 253 255* 257 257 260 264 267* 269 269 272 274 274 280 Ltemp 000123 automatic fixed bin(17,0) dcl 54 set ref 597* 608* 611 619* 676* 687* 690 699* 760* 771* 774 783* 837* 848* 851 860* 919* 930* 933 942* 999* 1010* 1013 1022* 1052 1054 1055 1058 Ltemplate based fixed bin(17,0) array level 3 dcl 2-41 ref 468 596 597 607 608 617 619 675 676 686 687 697 699 759 760 770 771 781 783 836 837 847 848 858 860 918 919 929 930 940 942 998 999 1009 1010 1020 1022 Ltotal 000124 automatic fixed bin(17,0) dcl 54 set ref 509* 596* 596 607* 607 617* 617 624 675* 675 686* 686 697* 697 707 759* 759 770* 770 781* 781 788 813* 836* 836 847* 847 858* 858 865 918* 918 929* 929 940* 940 948 974* 998* 998 1009* 1009 1020* 1020 1028 ME 000027 constant char(16) initial unaligned dcl 217 set ref 237* 246* 257* 269* 299* 305* 307* 313* 314* 317* 333* 343* 363* 369* 381* 387* 450* 456* 471* 475* 575* 579* 584* 634* 637* 651* 655* 660* 717* 720* 734* 738* 743* 798* 801* 808* 809* 815* 819* 824* 875* 878* 890* 894* 899* 958* 961* 969* 970* 976* 980* 985* 1038* 1041* 1097* 1104* 1131* 1138* 1229* 1235* 1256* 1265* 1358* 1370* 1394* 1449* 1462* 1469* 1483* 1490* 1525* 1532* 1560* 1571* 1580* 1608* 1619* 1631* 1658* 1676* 1704* 1720* 1735* 1741* 1745* 1754* 1769* 1776* 1781* 1785* MI 1 based char(7) array level 3 dcl 3-6 ref 339 NL 026517 constant char(1) initial unaligned dcl 217 ref 611 690 774 851 933 1013 1055 1060 Nargs 000125 automatic fixed bin(17,0) dcl 54 set ref 227* 230 234 Ndirs based fixed bin(17,0) level 2 dcl 2-41 ref 320 320 466 468 468 595 596 597 599 606 607 608 610 616 617 619 620 674 675 676 678 685 686 687 689 696 697 699 700 758 759 760 762 769 770 771 773 780 781 783 784 835 836 837 839 846 847 848 850 857 858 860 861 917 918 919 921 928 929 930 932 939 940 942 943 997 998 999 1001 1008 1009 1010 1012 1019 1020 1022 1023 1565 1613 1663 1709 1817 1820 1823 Ntemplates 1 based fixed bin(17,0) level 2 dcl 2-41 ref 320 320 361 379 466 592 603 615 671 682 695 755 766 779 832 843 856 914 925 938 994 1005 1018 1460 1481 1558 1606 1656 1702 1817 1820 1823 P_line 000130 automatic pointer dcl 54 set ref 506* Parg 000126 automatic pointer dcl 54 set ref 235* 237 240 242 242 244* 246 249 253 255* 257 260 264 267* 269 272 274 280 Piocb 000132 automatic pointer dcl 54 set ref 571* 575* 582* 588* 589* 590* 624* 625* 626* 628* 630* 632* 633* 636* 646* 651* 658* 664* 665* 666* 707* 708* 709* 711* 713* 715* 716* 719* 729* 734* 741* 751* 752* 753* 788* 789* 790* 792* 794* 796* 797* 800* 812* 815* 822* 828* 829* 830* 865* 866* 867* 869* 871* 873* 874* 877* 885* 890* 897* 907* 908* 909* 948* 949* 950* 952* 954* 956* 957* 960* 973* 976* 983* 989* 990* 991* 1028* 1029* 1030* 1032* 1034* 1036* 1037* 1040* Pnotices 000134 automatic pointer dcl 54 set ref 508* Po_archive 000136 automatic pointer dcl 54 set ref 481* 486 486* 503* 1126* 1129* 1130 1134* 1772* 1773 1779 1789* Ppaths 001306 automatic pointer dcl 2-65 set ref 317* 320 320 361 379 465 466 468 468 471* 504* 592 595 596 597 599 603 606 607 608 610 615 616 617 619 620 671 674 675 676 678 682 685 686 687 689 695 696 697 699 700 755 758 759 760 762 766 769 770 771 773 779 780 781 783 784 832 835 836 837 839 843 846 847 848 850 856 857 858 860 861 914 917 918 919 921 925 928 929 930 932 938 939 940 942 943 994 997 998 999 1001 1005 1008 1009 1010 1012 1018 1019 1020 1022 1023 1460 1481 1558 1565 1606 1613 1656 1663 1702 1709 1817 1817 1820 1820 1823 1823 Ppsp_info 000140 automatic pointer dcl 54 set ref 305* 310 314* 475 475* 507* Ps_archive 000142 automatic pointer dcl 54 set ref 479* 484 484* 502* 1092* 1095* 1096 1100* 1738* 1739 1749* 1773 Ptemp 000144 automatic pointer dcl 54 set ref 505* 599* 610* 611 620* 678* 689* 690 700* 762* 773* 774 784* 839* 850* 851 861* 921* 932* 933 943* 1001* 1012* 1013 1023* 1054 1055 1058 Ptemplate based pointer array level 3 dcl 2-41 set ref 468* 599 610 620 678 689 700 762 773 784 839 850 861 921 932 943 1001 1012 1023 SI_ptr 001310 automatic pointer dcl 3-26 set ref 310* 311* 329 329 331 339 339 341 347 348 354 357 359 375 377 393 395 1377 1377 1380 1383 1404 1455 1456 1458 1476 1477 1479 1506 1506 1507 1510 1510 1511 TERM_FILE_TERM 000026 constant bit(3) initial unaligned dcl 4-14 set ref 468* 484* 486* TS 001403 automatic bit(1) unaligned dcl 1283 set ref 1290* 1293* 1304 1309* 1312* 1323 True 026516 constant bit(1) initial unaligned dcl 217 ref 250 251 261 262 277 278 280 417 1091 1125 1216 1220 1233 1248 1289 1293 1295 1312 1314 1382 1811 1814 1844 1846 1849 1852 1855 1871 acle 000103 automatic structure array level 1 unaligned dcl 1175 set ref 1199 1199 1227 1227 1254 1254 addr builtin function dcl 150 ref 1100 1100 1134 1134 1199 1199 1227 1227 1254 1254 1264 1264 1358 1358 1394 1394 1449 1449 1525 1525 1532 1532 1580 1580 1631 1631 1676 1676 1720 1720 1754 1754 after builtin function dcl 150 ref 1293 1312 alm 000022 constant entry external dcl 170 ref 643 726 807 967 answer 000146 automatic varying char(168) dcl 54 set ref 1358* 1359 1361 1367 1370* 1374 1394* 1395 1397 1403 1411 1416 1420 1427 1428 1432 1436 1442* 1449* 1451 1453 1499 1504 1515 1521* 1525* 1526 1528 1532* 1533 1535 1543 1548 1552 1557* 1560* 1580* 1581 1583 1591 1596 1600 1605* 1608* 1631* 1632 1634 1640 1644 1648 1652 1655* 1658* 1676* 1677 1679 1685 1689 1694 1698 1701* 1704* 1720* 1722 1724 1729 1729 1731 1754* 1756 1758 1763 1763 1765 archive 000024 constant entry external dcl 170 ref 1109 1117 1143 1150 archive_$get_component_info 000026 constant entry external dcl 170 ref 1100 1134 archive_component_info based structure level 1 dcl 1-6 argument based char unaligned dcl 117 set ref 237* 240 242 242 246* 249 253 257* 260 264 269* 272 274* 280 before builtin function dcl 150 ref 320 1852 case 000223 automatic fixed bin(17,0) dcl 54 set ref 398* 400* 410* 421* 425* 428* 522* check_entryname_ 000030 constant entry external dcl 170 ref 1367 cleanup 001300 stack reference condition dcl 165 ref 225 clock builtin function dcl 150 ref 524 524 code 000224 automatic fixed bin(35,0) dcl 54 in procedure "generate_pnotice" set ref 227* 228 231* 235* 236 237* 244* 245 246* 255* 256 257* 267* 268 269* 283* 290* 295* 299* 305* 306 307* 311* 312 313* 314* 317* 318 332* 333* 342* 343* 362* 363* 369* 380* 381* 387* 468* 471* 475* 484* 486* 575* 578 579* 582* 583 584* 633* 634 634* 636* 637 637* 651* 654 655* 658* 659 660* 716* 717 717* 719* 720 720* 734* 737 738* 741* 742 743* 797* 798 798* 800* 801 801* 808* 809 809* 815* 818 819* 822* 823 824* 874* 875 875* 877* 878 878* 890* 893 894* 897* 898 899* 957* 958 958* 960* 961 961* 969* 970 970* 976* 979 980* 983* 984 985* 1037* 1038 1038* 1040* 1041 1041* 1095* 1097* 1100* 1101 1103 1104* 1129* 1131* 1134* 1135 1137 1138* 1367* 1369 1370* 1461* 1462* 1469* 1482* 1483* 1490* 1559* 1560* 1571* 1607* 1608* 1619* 1657* 1658* 1703* 1704* 1733* 1734 1735* 1738* 1740 1741* 1745* 1767* 1768 1769* 1772* 1776* 1780 1781* 1785* code 10 000116 automatic fixed bin(35,0) array level 2 in structure "del_acl" dcl 1182 in procedure "check_acl" set ref 1263* code 12 000103 automatic fixed bin(35,0) array level 2 in structure "acle" dcl 1175 in procedure "check_acl" set ref 1198* 1200 1200 1212* 1226* 1235* 1253* 1255 com_err_ 000032 constant entry external dcl 170 ref 237 246 257 269 299 307 313 333 343 363 369 381 387 450 456 579 584 634 637 655 660 717 720 738 743 798 801 809 819 824 875 878 894 899 958 961 970 980 985 1038 1041 1097 1104 1131 1138 1229 1235 1256 1265 1370 1462 1469 1483 1490 1560 1571 1608 1619 1658 1704 1735 1741 1745 1769 1776 1781 1785 command_query_ 000034 constant entry external dcl 170 ref 1358 1394 1449 1525 1532 1580 1631 1676 1720 1754 component_name 000225 automatic char(32) unaligned dcl 54 set ref 1088* 1100* 1108* 1109 1115* 1117 1122* 1134* 1142* 1143 1148* 1150 count_of 001434 automatic fixed bin(17,0) dcl 1805 set ref 1817* 1817* 1820* 1820* 1823* 1823* 1827 cu_$arg_count 000036 constant entry external dcl 170 ref 227 cu_$arg_ptr 000040 constant entry external dcl 170 ref 235 244 255 267 current_year_a 000235 automatic char(4) unaligned dcl 54 set ref 524* 1059 date_time_$format 000042 constant entry external dcl 170 ref 524 defaultC based bit(1) array level 3 packed unaligned dcl 2-41 ref 595 674 758 835 917 997 1820 defaultTS based bit(1) array level 3 packed unaligned dcl 2-41 ref 606 685 769 846 928 1008 1817 del_acl 000116 automatic structure array level 1 unaligned dcl 1182 set ref 1264 1264 delete_$path 000044 constant entry external dcl 170 ref 808 969 dim builtin function dcl 150 ref 466 entryname 363 based char(32) array level 4 in structure "product" dcl 3-6 in procedure "generate_pnotice" ref 393 entryname 445 based char(32) array level 4 in structure "product" dcl 3-6 in procedure "generate_pnotice" ref 395 error_table_$active_function 000122 external static fixed bin(35,0) dcl 205 ref 228 error_table_$badopt 000116 external static fixed bin(35,0) dcl 205 ref 283 error_table_$lower_ring 000126 external static fixed bin(35,0) dcl 205 set ref 450* error_table_$name_not_found 000120 external static fixed bin(35,0) dcl 205 ref 332 342 362 380 1461 1482 1559 1607 1657 1703 error_table_$no_component 000130 external static fixed bin(35,0) dcl 205 ref 1101 1135 error_table_$no_w_permission 000124 external static fixed bin(35,0) dcl 205 set ref 456* error_table_$noentry 000132 external static fixed bin(35,0) dcl 205 ref 1740 1780 error_table_$user_not_found 000136 external static fixed bin(35,0) dcl 1186 ref 1200 error_table_$wrong_no_of_args 000134 external static fixed bin(35,0) dcl 205 ref 231 290 295 expand_pathname_ 000046 constant entry external dcl 170 ref 1733 1767 get_group_id_ 000050 constant entry external dcl 170 ref 1194 1245 get_temp_segment_ 000052 constant entry external dcl 170 ref 305 get_wdir_ 000054 constant entry external dcl 170 ref 323 650 733 889 hbound builtin function dcl 150 ref 1455 1476 1506 1510 1531 1579 1630 1675 hcs_$add_acl_entries 000056 constant entry external dcl 170 ref 1227 1254 hcs_$delete_acl_entries 000060 constant entry external dcl 170 ref 1264 hcs_$initiate_count 000062 constant entry external dcl 170 ref 1095 1129 1738 1772 hcs_$list_acl 000064 constant entry external dcl 170 ref 1199 i 001450 automatic fixed bin(24,0) dcl 1834 set ref 1843* 1844 1844 1846 1846 1849 1852* index builtin function dcl 150 ref 1054 1552 1600 1644 1689 1729 1763 ioa_ 000066 constant entry external dcl 170 ref 274 289 294 349 405 587 642 663 725 750 806 827 906 966 988 1108 1115 1142 1148 1299 1305 1318 1324 1356 1357 1362 1384 1392 1398 1404 1406 1412 1413 1417 1422 1433 1438 1446 1447 1505 1507 1509 1511 1521 1524 1529 1537 1544 1553 1561 1577 1585 1592 1601 1609 1628 1635 1645 1649 1659 1674 1680 1691 1695 1705 1725 1759 1775 1861 1867 ioa_$ioa_switch 000070 constant entry external dcl 170 ref 588 589 590 624 625 626 628 630 632 664 665 666 707 708 709 711 713 715 751 752 753 788 789 790 792 794 796 828 829 830 865 866 867 869 871 873 907 908 909 948 949 950 952 954 956 989 990 991 1028 1029 1030 1032 1034 1036 iox_$attach_ioname 000072 constant entry external dcl 170 ref 575 651 734 815 890 976 iox_$close 000074 constant entry external dcl 170 ref 633 716 797 874 957 1037 iox_$detach_iocb 000076 constant entry external dcl 170 ref 636 719 800 877 960 1040 iox_$open 000100 constant entry external dcl 170 ref 582 658 741 822 897 983 length builtin function dcl 150 ref 1416 1432 list_pnotice_names 000102 constant entry external dcl 170 ref 1501 1549 1597 1641 1686 match_found 000363 automatic bit(1) unaligned dcl 54 set ref 415* 417* 420 516* mbz 11 000103 automatic bit(36) array level 2 dcl 1175 set ref 1197* 1225* 1252* mode 10 000103 automatic bit(36) array level 2 dcl 1175 set ref 1196* 1217 1221 1224* 1248* 1250* name 000116 automatic char(32) array level 2 in structure "del_acl" dcl 1182 in procedure "check_acl" set ref 1262* 1265* name 000103 automatic char(32) array level 2 in structure "acle" dcl 1175 in procedure "check_acl" set ref 1194* 1229* 1235* 1245* 1256* 1262 name_in parameter varying char(32) array dcl 1834 in procedure "templates_compatible" ref 1831 1844 1844 1846 1846 1849 1852 name_in parameter varying char dcl 1805 in procedure "check_template_name" ref 1802 1811 1811 1814 1814 1823 no_write_permission 000000 stack reference condition dcl 165 ref 453 1189 not_in_write_bracket 000000 stack reference condition dcl 165 ref 449 null builtin function dcl 150 ref 465 475 484 486 502 503 504 505 506 507 508 571 646 729 812 885 973 1096 1130 1199 1199 1199 1199 1739 1779 num 1 based structure array level 2 dcl 3-6 obit_count 000222 automatic fixed bin(24,0) dcl 54 set ref 486* 1129* 1134* 1772* object_C 133 based char(24) array level 3 dcl 3-6 set ref 375 377 1476 1477 1479 1510 1510 1511* object_dir parameter char unaligned dcl 1084 set ref 1071 1129* 1142* 1143 1148* 1150 object_path 373 based structure array level 3 dcl 3-6 object_pnotices 000364 automatic fixed bin(17,0) dcl 54 set ref 390* 390 396 409 416 512* 752* 788 908* 911 948 1311 1316 1317 1493* 1493 1517* 1579 1584 1622* 1630 1675 1698 1717* odir 000311 automatic char(168) unaligned dcl 54 set ref 430* 481* 1126* 1767* 1772* 1789* oentry 000365 automatic char(32) unaligned dcl 54 set ref 481* 1126* 1767* 1772* 1789* 1791 one_word based char(4) unaligned dcl 447 in procedure "check_archive" set ref 454* 454 one_word based char(4) unaligned dcl 1186 in procedure "check_acl" set ref 1190* 1190 original_object_mode 000102 automatic bit(36) dcl 1171 set ref 1221* 1250 original_source_mode 000101 automatic bit(36) dcl 1171 set ref 1217* 1248 parse_pnotice_info_ 000104 constant entry external dcl 170 ref 311 parse_pnotice_info_$validate_sti 000106 constant entry external dcl 170 ref 273 1421 1437 path 000375 automatic char(168) unaligned dcl 54 set ref 1729* 1731* 1733* 1735* 1741* 1745* 1763* 1765* 1767* 1769* 1776* 1781* 1785* pn 000447 automatic varying char(512) dcl 54 set ref 510* 611* 611 625* 690* 690 708* 774* 774 789* 814* 851* 851 866* 933* 933 949* 975* 1013* 1013 1029* 1055* 1055 1060* 1060 pnotice_paths based structure level 1 dcl 2-41 pnotice_paths_ 000110 constant entry external dcl 170 ref 317 primary_name based char(32) array level 3 dcl 2-41 set ref 320* 320 616 696 780 857 939 1019 1565 1613 1663 1709 1823 prod 000650 automatic char(20) unaligned dcl 54 set ref 249* 329 333* 347* 369* 387* 575 587* 642* 643 651 663* 725* 726 734 806* 807 808 815 827* 890 966* 967 969 976 988* 1088 1122 1299* 1305* 1318* 1324* 1374* 1377 1392* 1404* 1406* 1412* 1446* 1446* 1469* 1490* 1505* 1509* 1571* 1619* prod_STI 34 based char(12) array level 3 dcl 3-6 set ref 354 1404* prod_mid 000656 automatic char(7) unaligned dcl 54 set ref 260* 339 343* prod_name 3 based char(20) array level 3 dcl 3-6 ref 329 347 1377 prod_number based fixed bin(17,0) level 2 dcl 3-6 ref 329 331 339 341 1377 1380 prod_object_ename 001012 automatic char(32) unaligned dcl 54 set ref 395* 1129* 1142* 1143 1148* 1150 1791* prod_object_pnotice 000660 automatic varying char(32) array dcl 54 set ref 377* 378* 381* 385* 398 417 514* 755 766 780 914 925 939 1312 1318 1318 1479* 1480* 1483* 1487* 1579 1613* 1616* 1630 1675 1709* 1712* prod_source_ename 001154 automatic char(32) unaligned dcl 54 set ref 393* 1095* 1108* 1109 1115* 1117 1751* prod_source_pnotice 001022 automatic varying char(32) array dcl 54 set ref 359* 360* 363* 367* 398 417 513* 592 603 616 671 682 696 832 843 857 994 1005 1019 1293 1299 1299 1458* 1459* 1462* 1466* 1531 1565* 1568* 1663* 1666* prod_sti 001164 automatic char(12) unaligned dcl 54 set ref 272* 273* 354* 626* 628 628 630 630 709* 711 711 713 713 790* 792 792 794 794 867* 869 869 871 871 950* 952 952 954 954 1030* 1032 1032 1034 1034 1420* 1421* 1422* 1428* 1436* 1437* prod_use 455 based char(7) array level 3 dcl 3-6 ref 348 1383 prodno 001423 automatic fixed bin(17,0) dcl 1352 set ref 1377* 1377* 1380 1383 1404 1456 1458 1477 1479 1506 1507 1510 1511 product based structure level 1 dcl 3-6 product_known 001422 automatic bit(1) unaligned dcl 1352 set ref 1380* 1382* 1383 1392 1404 1410 1443 query_info 000010 internal static structure level 1 dcl 133 set ref 1358 1358 1394 1394 1449 1449 1525 1525 1532 1532 1580 1580 1631 1631 1676 1676 1720 1720 1754 1754 release_temp_segment_ 000112 constant entry external dcl 170 ref 314 471 475 reverse builtin function dcl 150 ref 1852 1852 rtrim builtin function dcl 150 ref 575 575 587 587 642 642 643 651 651 663 663 725 725 726 734 734 806 806 807 808 815 815 827 827 890 890 966 966 967 969 976 976 988 988 1088 1109 1109 1109 1109 1117 1117 1117 1117 1122 1122 1143 1143 1143 1143 1150 1150 1150 1150 sbit_count 000221 automatic fixed bin(24,0) dcl 54 set ref 484* 1095* 1100* 1738* sdir 000237 automatic char(168) unaligned dcl 54 set ref 430* 479* 1092* 1733* 1738* 1749* sentry 001167 automatic char(32) unaligned dcl 54 set ref 479* 1092* 1733* 1738* 1749* 1751 source_C 37 based char(24) array level 3 dcl 3-6 set ref 357 359 1455 1456 1458 1506 1506 1507* source_dir parameter char unaligned dcl 1084 set ref 1071 1095* 1108* 1109 1115* 1117 source_path 311 based structure array level 3 dcl 3-6 source_pnotices 001177 automatic fixed bin(17,0) dcl 54 set ref 372* 372 396 409 413 511* 589* 624 665* 668 707 829* 865 990* 993 1028 1292 1297 1298 1472* 1472 1516* 1531 1536 1575* 1652 1670* substr builtin function dcl 150 set ref 240 592 603 628 628 630 630 671 682 711 711 713 713 755 766 792 792 794 794 832 843 869 869 871 871 914 925 952 952 954 954 994 1005 1032 1032 1034 1034 1059* temp based char unaligned dcl 118 ref 611 690 774 851 933 1013 1054 1055 1058 temp2 000100 automatic char unaligned dcl 1052 set ref 1058* 1059* 1060 templates based structure array level 2 dcl 2-41 set ref 466 terminate_file_ 000114 constant entry external dcl 170 ref 468 484 486 this_is_object_archive 001200 automatic bit(1) unaligned dcl 54 set ref 1125* 1205 1219 this_is_source_archive 001201 automatic bit(1) unaligned dcl 54 set ref 1091* 1203 1215 unspec builtin function dcl 150 set ref 515* 515 user_on_object_acl 001203 automatic bit(1) unaligned dcl 54 set ref 481* 1205* 1220* user_on_source_acl 001202 automatic bit(1) unaligned dcl 54 set ref 479* 1203* 1216* value 001402 automatic bit(1) unaligned dcl 1283 set ref 1289* 1306* 1325* 1329 working_dir 001204 automatic char(168) unaligned dcl 54 set ref 323* 432* 432* 575 587 587 642 642 643 650* 651 663 663 725 725 726 733* 734 806 806 807 808* 815 827 827 889* 890 966 966 967 969* 976 988 988 1109 1117 1143 1150 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ARCHIVE_COMPONENT_INFO_VERSION_1 internal static fixed bin(17,0) initial dcl 1-16 COPYRIGHT internal static fixed bin(17,0) initial dcl 2-68 PUBLIC_DOMAIN internal static fixed bin(17,0) initial dcl 2-70 TERM_FILE_BC internal static bit(2) initial unaligned dcl 4-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 4-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 4-16 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 4-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 4-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial unaligned dcl 4-15 TRADE_SECRET internal static fixed bin(17,0) initial dcl 2-69 UNDEFINED internal static fixed bin(17,0) initial dcl 2-67 archive_component_info_ptr automatic pointer dcl 1-4 terminate_file_switches based structure level 1 packed unaligned dcl 4-4 NAMES DECLARED BY EXPLICIT CONTEXT. ASK1 022337 constant label dcl 1449 ref 1502 1513 ASK_OARCHIVE 025347 constant label dcl 1754 ref 1761 1782 ASK_ONAME 023635 constant label dcl 1580 ref 1586 1594 1598 1602 1610 1620 ASK_ONAME_ALL 024507 constant label dcl 1676 ref 1683 1687 1692 1696 1706 1712 ASK_PNOTICE 022277 constant label dcl 1443 ref 1429 1522 ASK_PROD 021426 constant label dcl 1358 ref 1364 1372 ASK_SARCHIVE 024777 constant label dcl 1720 ref 1584 1698 1727 1742 ASK_SNAME 023275 constant label dcl 1532 ref 1538 1546 1550 1554 1562 1572 ASK_SNAME_ALL 024175 constant label dcl 1631 ref 1638 1642 1646 1650 1660 1666 ASK_STI 021716 constant label dcl 1394 ref 1401 1408 1414 1418 1423 1434 1439 BEGIN_ONAME 023612 constant label dcl 1577 set ref 1536 BEGIN_ONAME_ALL 024465 constant label dcl 1672 ref 1652 CHECK_PN 004437 constant label dcl 396 ref 326 CLEAN 004603 constant label dcl 435 ref 318 364 370 382 388 451 457 1231 1237 1359 1390 1395 1451 1463 1470 1484 1491 1526 1533 1581 1632 1677 1722 1736 1746 1756 1770 1777 1786 COMPLAIN 004735 constant label dcl 456 ref 453 CONTINUE 004564 constant label dcl 428 ref 411 422 END_ARCHIVE 020146 constant label dcl 1155 ref 1146 ERROR 020466 constant label dcl 1235 ref 1200 1213 FORCE_ACL 020222 constant label dcl 1194 ref 1189 GET_PN 023267 constant label dcl 1531 GOT_PSP 023172 constant label dcl 1524 ref 1496 MORE_TRASH 003277 constant label dcl 287 NO_O_COMPONENT 017746 constant label dcl 1148 ref 1135 NO_S_COMPONENT 017067 constant label dcl 1115 ref 1101 O_ARCHIVE 017267 constant label dcl 1122 ref 1112 O_INFO 017460 constant label dcl 1134 ref 1127 PNOTICE 000022 constant label array(4) dcl 571 ref 569 START_PN 023252 constant label dcl 1529 ref 1518 S_ARCHIVE 016413 constant label dcl 1088 S_INFO 016601 constant label dcl 1100 ref 1093 USAGE 003347 constant label dcl 299 ref 228 232 240 284 291 296 WORK 003374 constant label dcl 305 ref 293 archive_PNOTICE 016375 constant entry internal dcl 1071 ref 430 432 check_acl 020151 constant entry internal dcl 1162 ref 1092 1126 check_acl$reset_acl 020534 constant entry internal dcl 1242 ref 479 481 check_archive 004611 constant entry internal dcl 441 ref 1749 1789 check_multiple_pnotices 021030 constant entry internal dcl 1280 ref 404 check_name 025775 constant entry internal dcl 1802 ref 360 378 1459 1480 1557 1605 1655 1701 check_template_name 025771 constant entry internal dcl 1800 clean_up 004777 constant entry internal dcl 463 ref 225 334 344 351 406 435 generate_pnotice 002612 constant entry external dcl 22 get_PNOTICE_info 021375 constant entry internal dcl 1336 ref 325 get_year 016161 constant entry internal dcl 1049 ref 600 621 679 701 763 785 840 862 922 944 1002 1024 init 005333 constant entry internal dcl 494 ref 226 make_PNOTICE 005464 constant entry internal dcl 532 ref 428 templates_compatible 026202 constant entry internal dcl 1831 ref 367 385 1466 1487 1568 1616 1666 1712 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 27300 27440 26530 27310 Length 30236 26530 140 561 550 12 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME generate_pnotice 1371 external procedure is an external procedure. on unit on line 225 64 on unit check_archive 106 internal procedure enables or reverts conditions. on unit on line 449 90 on unit on unit on line 453 64 on unit clean_up 112 internal procedure is called by several nonquick procedures. init internal procedure shares stack frame of external procedure generate_pnotice. make_PNOTICE internal procedure shares stack frame of external procedure generate_pnotice. get_year 70 internal procedure uses auto adjustable storage. archive_PNOTICE internal procedure shares stack frame of external procedure generate_pnotice. check_acl 174 internal procedure enables or reverts conditions. on unit on line 1189 64 on unit check_multiple_pnotices internal procedure shares stack frame of external procedure generate_pnotice. get_PNOTICE_info internal procedure shares stack frame of external procedure generate_pnotice. check_template_name internal procedure shares stack frame of external procedure generate_pnotice. templates_compatible internal procedure shares stack frame of external procedure generate_pnotice. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 query_info generate_pnotice STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME check_acl 000100 Acode check_acl 000101 original_source_mode check_acl 000102 original_object_mode check_acl 000103 acle check_acl 000116 del_acl check_acl generate_pnotice 000100 Fany generate_pnotice 000101 Fcopy_right generate_pnotice 000102 Fdcopy_right generate_pnotice 000103 Fdtrade_secret generate_pnotice 000104 Fname generate_pnotice 000105 Fmust_reset_object generate_pnotice 000106 Fmust_reset_source generate_pnotice 000107 Fsti generate_pnotice 000110 Fpublic_domain generate_pnotice 000111 Fmid generate_pnotice 000112 Fspec generate_pnotice 000113 Ftrade_secret generate_pnotice 000114 Idx generate_pnotice 000115 Idx1 generate_pnotice 000116 Idx2 generate_pnotice 000117 Idx3 generate_pnotice 000120 Isnotice generate_pnotice 000121 Ionotice generate_pnotice 000122 Larg generate_pnotice 000123 Ltemp generate_pnotice 000124 Ltotal generate_pnotice 000125 Nargs generate_pnotice 000126 Parg generate_pnotice 000130 P_line generate_pnotice 000132 Piocb generate_pnotice 000134 Pnotices generate_pnotice 000136 Po_archive generate_pnotice 000140 Ppsp_info generate_pnotice 000142 Ps_archive generate_pnotice 000144 Ptemp generate_pnotice 000146 answer generate_pnotice 000221 sbit_count generate_pnotice 000222 obit_count generate_pnotice 000223 case generate_pnotice 000224 code generate_pnotice 000225 component_name generate_pnotice 000235 current_year_a generate_pnotice 000236 Iyr generate_pnotice 000237 sdir generate_pnotice 000311 odir generate_pnotice 000363 match_found generate_pnotice 000364 object_pnotices generate_pnotice 000365 oentry generate_pnotice 000375 path generate_pnotice 000447 pn generate_pnotice 000650 prod generate_pnotice 000656 prod_mid generate_pnotice 000660 prod_object_pnotice generate_pnotice 001012 prod_object_ename generate_pnotice 001022 prod_source_pnotice generate_pnotice 001154 prod_source_ename generate_pnotice 001164 prod_sti generate_pnotice 001167 sentry generate_pnotice 001177 source_pnotices generate_pnotice 001200 this_is_object_archive generate_pnotice 001201 this_is_source_archive generate_pnotice 001202 user_on_source_acl generate_pnotice 001203 user_on_object_acl generate_pnotice 001204 working_dir generate_pnotice 001256 ACI generate_pnotice 001306 Ppaths generate_pnotice 001310 SI_ptr generate_pnotice 001400 Idx1 check_multiple_pnotices 001401 Idx2 check_multiple_pnotices 001402 value check_multiple_pnotices 001403 TS check_multiple_pnotices 001404 CP check_multiple_pnotices 001422 product_known get_PNOTICE_info 001423 prodno get_PNOTICE_info 001434 count_of check_template_name 001450 i templates_compatible get_year 000100 temp2 get_year THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return tra_ext alloc_auto_adj signal enable shorten_stack ext_entry int_entry int_entry_desc reverse_cs set_cs_eis index_cs_eis index_before_cs clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. alm archive archive_$get_component_info check_entryname_ com_err_ command_query_ cu_$arg_count cu_$arg_ptr date_time_$format delete_$path expand_pathname_ get_group_id_ get_temp_segment_ get_wdir_ hcs_$add_acl_entries hcs_$delete_acl_entries hcs_$initiate_count hcs_$list_acl ioa_ ioa_$ioa_switch iox_$attach_ioname iox_$close iox_$detach_iocb iox_$open list_pnotice_names parse_pnotice_info_ parse_pnotice_info_$validate_sti pnotice_paths_ release_temp_segment_ terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$active_function error_table_$badopt error_table_$lower_ring error_table_$name_not_found error_table_$no_component error_table_$no_w_permission error_table_$noentry error_table_$user_not_found error_table_$wrong_no_of_args LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 002611 225 002617 226 002641 227 002642 228 002653 230 002657 231 002661 232 002663 234 002664 235 002673 236 002710 237 002712 238 002736 240 002737 242 002744 243 002755 244 002756 245 002773 246 002775 247 003027 249 003030 250 003035 251 003037 252 003040 253 003041 254 003045 255 003046 256 003063 257 003065 258 003117 260 003120 261 003126 262 003130 263 003131 264 003132 266 003136 267 003137 268 003154 269 003156 270 003210 272 003211 273 003216 274 003232 275 003255 277 003256 278 003260 279 003261 280 003262 283 003271 284 003274 286 003275 287 003277 289 003303 290 003317 291 003322 293 003323 294 003327 295 003343 296 003346 299 003347 304 003373 305 003374 306 003415 307 003417 308 003443 310 003444 311 003446 312 003457 313 003461 314 003510 315 003531 317 003532 318 003561 320 003563 323 003631 324 003640 325 003642 326 003643 328 003644 329 003646 330 003664 331 003666 332 003671 333 003674 334 003723 335 003727 337 003730 338 003731 339 003733 340 003754 341 003756 342 003761 343 003764 344 004013 347 004017 348 004027 349 004037 351 004053 352 004057 354 004060 356 004067 357 004070 359 004111 360 004123 361 004137 362 004143 363 004146 364 004177 366 004200 367 004201 369 004211 370 004241 372 004242 373 004243 374 004245 375 004246 377 004267 378 004301 379 004315 380 004321 381 004324 382 004355 384 004356 385 004357 387 004367 388 004417 390 004420 391 004421 393 004423 395 004432 396 004437 398 004445 400 004456 401 004460 404 004461 405 004466 406 004502 407 004506 409 004507 410 004512 411 004514 413 004515 415 004523 416 004524 417 004533 419 004551 420 004553 421 004555 422 004557 424 004560 425 004562 428 004564 430 004572 432 004600 435 004603 436 004607 441 004610 449 004631 450 004645 451 004704 453 004707 454 004726 455 004734 456 004735 457 004773 463 004776 465 005004 466 005011 468 005022 470 005074 471 005077 475 005120 478 005146 479 005151 481 005207 484 005246 486 005300 488 005332 494 005333 496 005334 497 005345 498 005346 499 005347 500 005350 501 005351 502 005352 503 005354 504 005355 505 005356 506 005357 507 005360 508 005361 509 005362 510 005363 511 005364 512 005365 513 005366 514 005377 515 005411 516 005414 517 005415 518 005416 519 005417 520 005420 521 005421 522 005422 524 005423 525 005463 532 005464 569 005466 571 005470 575 005472 578 005620 579 005623 580 005647 582 005650 583 005671 584 005673 585 005717 587 005720 588 005764 589 006005 590 006031 592 006051 595 006065 596 006103 597 006113 599 006116 600 006123 602 006127 603 006132 606 006147 607 006170 608 006203 610 006206 611 006213 612 006277 613 006300 615 006303 616 006313 617 006333 619 006344 620 006347 621 006354 623 006360 624 006362 625 006411 626 006434 628 006462 630 006524 632 006566 633 006605 634 006616 636 006644 637 006655 642 006703 643 006747 644 007017 646 007021 650 007023 651 007032 654 007160 655 007163 656 007207 658 007210 659 007231 660 007233 661 007257 663 007260 664 007324 665 007345 666 007371 668 007411 671 007421 674 007437 675 007455 676 007465 678 007470 679 007475 681 007501 682 007504 685 007523 686 007544 687 007557 689 007562 690 007567 692 007653 693 007654 695 007657 696 007667 697 007713 699 007724 700 007727 701 007734 705 007740 706 007742 707 007744 708 007773 709 010016 711 010044 713 010106 715 010150 716 010167 717 010200 719 010226 720 010237 725 010265 726 010331 727 010401 729 010403 733 010405 734 010414 737 010542 738 010545 739 010571 741 010572 742 010613 743 010615 744 010641 750 010642 751 010656 752 010676 753 010722 755 010742 758 010757 759 010775 760 011005 762 011010 763 011015 765 011021 766 011024 769 011041 770 011062 771 011075 773 011100 774 011105 776 011171 777 011172 779 011175 780 011205 781 011225 783 011236 784 011241 785 011246 787 011252 788 011254 789 011303 790 011326 792 011354 794 011416 796 011460 797 011477 798 011510 800 011536 801 011547 806 011575 807 011641 808 011711 809 012003 812 012032 813 012034 814 012035 815 012036 818 012164 819 012167 820 012213 822 012214 823 012235 824 012237 825 012263 827 012264 828 012330 829 012351 830 012375 832 012415 835 012431 836 012447 837 012457 839 012462 840 012467 842 012473 843 012476 846 012513 847 012534 848 012547 850 012552 851 012557 853 012643 854 012644 856 012647 857 012657 858 012677 860 012710 861 012713 862 012720 864 012724 865 012726 866 012755 867 013000 869 013026 871 013070 873 013132 874 013151 875 013162 877 013210 878 013221 883 013247 885 013250 889 013252 890 013261 893 013407 894 013412 895 013436 897 013437 898 013460 899 013462 900 013506 906 013507 907 013523 908 013543 909 013567 911 013607 914 013617 917 013635 918 013653 919 013663 921 013666 922 013673 924 013677 925 013702 928 013721 929 013742 930 013755 932 013760 933 013765 935 014051 936 014052 938 014055 939 014065 940 014111 942 014122 943 014125 944 014132 946 014136 947 014140 948 014142 949 014171 950 014214 952 014242 954 014304 956 014346 957 014365 958 014376 960 014424 961 014435 966 014463 967 014527 969 014577 970 014671 973 014720 974 014722 975 014723 976 014724 979 015052 980 015055 981 015101 983 015102 984 015123 985 015125 986 015151 988 015152 989 015216 990 015237 991 015263 993 015303 994 015313 997 015331 998 015347 999 015357 1001 015362 1002 015367 1004 015373 1005 015376 1008 015415 1009 015436 1010 015451 1012 015454 1013 015461 1015 015545 1016 015546 1018 015551 1019 015561 1020 015605 1022 015616 1023 015621 1024 015626 1026 015632 1027 015634 1028 015636 1029 015665 1030 015710 1032 015736 1034 016000 1036 016042 1037 016061 1038 016072 1040 016120 1041 016131 1046 016157 1049 016160 1052 016166 1054 016176 1055 016205 1057 016274 1058 016275 1059 016304 1060 016307 1061 016373 1062 016374 1071 016375 1088 016413 1090 016452 1091 016455 1092 016457 1093 016503 1095 016504 1096 016550 1097 016554 1098 016600 1100 016601 1101 016633 1103 016637 1104 016641 1105 016664 1108 016665 1109 016715 1112 017065 1115 017067 1117 017117 1122 017267 1124 017331 1125 017334 1126 017336 1127 017362 1129 017363 1130 017427 1131 017433 1132 017457 1134 017460 1135 017512 1137 017516 1138 017520 1139 017543 1142 017544 1143 017574 1146 017744 1148 017746 1150 017776 1155 020146 1162 020150 1189 020174 1190 020213 1191 020221 1194 020222 1196 020234 1197 020235 1198 020236 1199 020237 1200 020307 1203 020314 1205 020321 1207 020325 1211 020326 1212 020330 1213 020331 1215 020332 1216 020335 1217 020337 1219 020341 1220 020343 1221 020345 1224 020347 1225 020351 1226 020352 1227 020353 1228 020412 1229 020414 1231 020456 1233 020461 1234 020465 1235 020466 1237 020530 1242 020533 1245 020557 1247 020571 1248 020576 1250 020607 1252 020611 1253 020612 1254 020613 1255 020651 1256 020653 1258 020715 1260 020716 1262 020717 1263 020722 1264 020723 1265 020762 1268 021026 1270 021027 1280 021030 1289 021032 1290 021034 1291 021035 1292 021036 1293 021045 1295 021100 1297 021102 1298 021111 1299 021121 1301 021156 1302 021160 1303 021162 1304 021164 1305 021170 1306 021210 1309 021211 1310 021212 1311 021213 1312 021223 1314 021256 1316 021260 1317 021267 1318 021277 1320 021334 1321 021336 1322 021340 1323 021342 1324 021346 1325 021366 1329 021367 1336 021375 1356 021376 1357 021412 1358 021426 1359 021463 1361 021470 1362 021475 1364 021511 1367 021512 1369 021554 1370 021557 1372 021607 1374 021610 1377 021614 1379 021632 1380 021634 1382 021641 1383 021643 1384 021657 1390 021673 1392 021674 1394 021716 1395 021747 1397 021754 1398 021761 1401 021775 1403 021776 1404 022003 1406 022040 1408 022060 1410 022061 1411 022063 1412 022070 1413 022110 1414 022124 1416 022125 1417 022130 1418 022144 1420 022145 1421 022151 1422 022165 1423 022205 1425 022206 1427 022207 1428 022214 1429 022220 1432 022221 1433 022224 1434 022240 1436 022241 1437 022245 1438 022261 1439 022275 1442 022276 1443 022277 1446 022301 1447 022323 1449 022337 1451 022371 1453 022376 1454 022403 1455 022404 1456 022411 1458 022427 1459 022440 1460 022454 1461 022460 1462 022463 1463 022514 1465 022515 1466 022516 1469 022526 1470 022556 1472 022557 1474 022560 1475 022562 1476 022563 1477 022571 1479 022607 1480 022620 1481 022634 1482 022640 1483 022643 1484 022674 1486 022675 1487 022676 1490 022706 1491 022736 1493 022737 1495 022740 1496 022742 1499 022743 1501 022750 1502 022755 1504 022756 1505 022763 1506 023003 1507 023025 1508 023050 1509 023052 1510 023072 1511 023113 1512 023136 1513 023140 1515 023141 1516 023146 1517 023147 1518 023150 1521 023151 1522 023171 1524 023172 1525 023206 1526 023240 1528 023245 1529 023252 1530 023266 1531 023267 1532 023275 1533 023327 1535 023334 1536 023341 1537 023343 1538 023357 1543 023360 1544 023365 1546 023401 1548 023402 1549 023407 1550 023414 1552 023415 1553 023424 1554 023440 1557 023441 1558 023444 1559 023450 1560 023453 1561 023502 1562 023516 1564 023517 1565 023520 1568 023545 1571 023555 1572 023605 1575 023606 1576 023610 1577 023612 1578 023626 1579 023627 1580 023635 1581 023667 1583 023674 1584 023701 1585 023703 1586 023717 1591 023720 1592 023725 1594 023741 1596 023742 1597 023747 1598 023754 1600 023755 1601 023764 1602 024000 1605 024001 1606 024004 1607 024010 1608 024013 1609 024042 1610 024056 1612 024057 1613 024060 1616 024105 1619 024115 1620 024145 1622 024146 1623 024150 1625 024152 1627 024153 1628 024154 1630 024170 1631 024175 1632 024227 1634 024234 1635 024241 1638 024255 1640 024256 1641 024263 1642 024270 1644 024271 1645 024300 1646 024314 1648 024315 1649 024322 1650 024336 1652 024337 1655 024346 1656 024351 1657 024355 1658 024360 1659 024407 1660 024423 1662 024424 1663 024425 1666 024451 1670 024461 1671 024463 1672 024465 1674 024466 1675 024502 1676 024507 1677 024541 1679 024546 1680 024553 1683 024567 1685 024570 1686 024575 1687 024602 1689 024603 1691 024612 1692 024626 1694 024627 1695 024634 1696 024650 1698 024651 1701 024660 1702 024663 1703 024667 1704 024672 1705 024721 1706 024735 1708 024736 1709 024737 1712 024763 1717 024773 1718 024775 1720 024777 1722 025031 1724 025036 1725 025043 1727 025057 1729 025060 1731 025106 1733 025113 1734 025137 1735 025141 1736 025170 1738 025171 1739 025233 1740 025237 1741 025243 1742 025271 1745 025272 1746 025321 1749 025322 1751 025344 1754 025347 1756 025401 1758 025406 1759 025413 1761 025427 1763 025430 1765 025456 1767 025463 1768 025507 1769 025511 1770 025540 1772 025541 1773 025603 1775 025607 1776 025623 1777 025653 1779 025654 1780 025660 1781 025664 1782 025712 1785 025713 1786 025742 1789 025743 1791 025765 1797 025770 1800 025771 1802 025774 1808 026007 1809 026010 1811 026011 1814 026027 1817 026043 1818 026075 1820 026077 1821 026126 1823 026130 1825 026166 1827 026170 1831 026202 1837 026204 1838 026205 1839 026206 1840 026207 1841 026210 1843 026211 1844 026221 1846 026243 1849 026260 1852 026270 1855 026317 1857 026322 1859 026324 1861 026336 1862 026352 1863 026354 1865 026362 1867 026372 1868 026406 1871 026414 ----------------------------------------------------------- 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