COMPILATION LISTING OF SEGMENT tail_sheet_ Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 10/28/88 1333.6 mst Fri Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /* format: style4 */ 14 15 /* format: off */ 16 17 /* TAIL_SHEET_ - make distribution and filing page for IO Daemon output. 18* This page is always printed on the outside. It contains the accounting information too. 19* 20* THVV */ 21 22 /* Modified in December 1975 by M. A. Braida to state when a request has been continued */ 23 /* Modified June 1976 by J. L. Homan to accommodate charging by line count instead of block count. */ 24 /* Modified August 1977 by J. C. Whitmore to add variable page length */ 25 /* Modified by J. C. Whitmore, 4/78, for new dprint_msg_format and ordata info for price msg */ 26 /* Modified by J. C. Whitmore, 8/78, for new info from ordata in price block */ 27 /* Modified by C. Hornig, 6/79, to add print_tail_sheet entry */ 28 /* Modified by R. McDonald May 1980 to include page charges on tail sheet (UNCA) */ 29 /* Modified by E. N. Kittlitz June 1981 for UNCA page charges */ 30 /* Modified: 25 November 1981 by G. Palter as part of fixing the following bug from the I/O daemon error list: 31* 0032: phx11372 32* When running an I/O daemon in test mode with the coordinator and driverin the same process, printing a single 33* request, exiting the I/O daemon, re-entering the I/O daemon, and printing another request will cause the 34* head/tail sheets of the first request to be printed surrounding the file specified in the second request */ 35 /* Modified 15 February 1982 by E. N. Kittlitz for ordata.rs_unavailable flag. */ 36 /* Modified: November 1983 by C. Marker Added support for no_separator */ 37 /* Modified: August 1984 by JAFalksen converted to use default date format */ 38 39 40 /****^ HISTORY COMMENTS: 41* 1) change(87-05-10,Gilcrease), approve(87-08-17,MCR7686), 42* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 43* eor -nb change; corrected stringsize error. 44* 2) change(88-06-03,Brunelle), approve(88-06-03,MCR7911), 45* audit(88-10-18,Wallman), install(88-10-28,MR12.2-1199): 46* The print_tail_sheet entrypoint was upgraded to handle a null 47* a_prt_ctl_ptr argument by using the default_ctl values. The declarations 48* were reorganized. 49* END HISTORY COMMENTS */ 50 51 /* format: on */ 52 53 tail_sheet_: 54 proc (a_stream, a_ordatap, a_code); 55 56 /* Parameters */ 57 58 dcl a_code fixed bin (35) parameter; /* return error code */ 59 dcl a_ordatap ptr parameter; /* ptr to output_request_data */ 60 dcl a_prt_ctl_ptr pointer parameter; /* ptr to prt_ctl */ 61 dcl a_stream char (*) parameter; /* Output streamname */ 62 dcl a_switch pointer parameter; /* IOCB ptr for same */ 63 64 /* External Procedures & Variables */ 65 66 dcl bigletter_$five entry (char (*) aligned, entry); 67 dcl convert_binary_integer_$decimal_string entry (fixed bin) returns (char (12) var); 68 dcl date_time_$format entry (char (*), fixed bin (71), char (*), char (*)) returns (char (250) var); 69 dcl error_table_$action_not_performed fixed bin (35) ext; 70 dcl hcs_$make_seg entry (char (*), char (*), char (*), fixed bin (5), ptr, fixed bin (35)); 71 dcl hcs_$truncate_seg entry (ptr, fixed bin, fixed bin (35)); 72 dcl ioa_$rsnnl entry options (variable); 73 dcl iox_$find_iocb entry (char (*), pointer, fixed bin (35)); 74 dcl iox_$modes entry (pointer, char (*), char (*), fixed bin (35)); 75 dcl iox_$put_chars entry (pointer, pointer, fixed bin (21), fixed bin (35)); 76 dcl system_info_$max_rs_number entry (fixed bin); 77 dcl system_info_$rs_name entry (fixed bin, char (*), fixed bin (35)); 78 79 /* Builtins */ 80 81 dcl (addr, addrel, char, copy, divide, hbound, index, length, max, min, null, rtrim, size, unspec, substr) builtin; 82 83 /* Internal Static */ 84 85 dcl NL char (1) int static options (constant) init (" 86 "); 87 dcl static_ctl_not_set bit (1) int static init ("1"b); /* initialize on first call */ 88 dcl default_ctl_not_set bit (1) int static init ("1"b); /* initialize when first used */ 89 dcl mode char (256) int static; /* mode string to provide output truncation */ 90 dcl ctr_len fixed bin int static; /* how big is the center part, print positions */ 91 dcl path_field fixed bin int static; /* how much room to allow for the pathname */ 92 dcl block_ind fixed bin int static; /* how far to indent the charge block */ 93 dcl ts_ptr ptr int static init (null); /* ptr to space for 60 lines of 132 + NL chars */ 94 dcl lh_ptr ptr int static init (null); /* ptr to left array of vert letters */ 95 dcl rh_ptr ptr int static init (null); /* ptr to right array of vert letters */ 96 dcl buf_ptr ptr int static init (null); /* ptr to the tail sheet buffer */ 97 dcl page_size fixed bin (21) int static; /* size of the complete tailsheet */ 98 dcl real_ll fixed bin int static init (136); /* line length to be printed */ 99 dcl pl fixed bin int static init (60); /* number of print lines on the tail sheet */ 100 dcl lpi fixed bin int static init (6); /* number of lines per inch printed */ 101 dcl copy_offset fixed bin int static; /* where "copy x of y" starts */ 102 dcl last_request_no fixed bin int static; /* request number of the last tailsheet we made */ 103 dcl step fixed bin int static; /* indicates how much vertical shrinkage to use */ 104 dcl vert_names bit (1) int static; 105 dcl max_big_v fixed bin int static; 106 dcl max_big_h fixed bin int static; 107 dcl max_rs_number fixed bin int static init (-1); /* maximum rate structure number */ 108 dcl rs_names (-1:9) char (32) static int init ((11) ("tail_sheet_ uninitialized")); 109 110 dcl 1 default_ctl aligned like prt_ctl int static; /* the default parameters for old type entries */ 111 112 dcl 1 static_ctl aligned like prt_ctl int static; /* the active set of parameters */ 113 114 /* Automatic */ 115 116 dcl (head, dest) char (64) aligned; 117 dcl (i, j, n) fixed bin; /* random index variables */ 118 dcl bottom_ctr char (204); 119 dcl calc_line_charge float bin; /* temporary storage for line charge */ 120 dcl calc_page_charge float bin; /* temporary storage for page charge */ 121 dcl change_static bit (1); 122 dcl datstr char (64) var; 123 dcl iocbp pointer; 124 dcl letter_index fixed bin; 125 dcl line_no fixed bin; /* marker fir the current line number */ 126 dcl next_char fixed bin; /* next free char in the tail sheet string (buf) */ 127 dcl omode char (256); /* old mode string */ 128 dcl real_line_count fixed bin; /* Actual line count taking -no_separator into account. */ 129 dcl real_page_count fixed bin; /* Actual page count taking -no_separator into account. */ 130 dcl temp char (280); 131 dcl temp1 char (200); 132 133 /* Based */ 134 135 dcl lh_part (pl) char (12) based (lh_ptr); /* the array of left hand vertical letters */ 136 dcl rh_part (pl) char (12) based (rh_ptr); /* the array of right hand vertical letters */ 137 dcl buf char (16000) based (buf_ptr); /* the tailsheet buffer */ 138 139 140 /* tail_sheet_: proc (a_stream, a_ordatap, a_code); */ 141 142 /* locate the iocb to use based on input stream name */ 143 call iox_$find_iocb (a_stream, iocbp, a_code); 144 if a_code ^= 0 then 145 return; 146 147 /* use our default ctl for printer control. initialize if necessary */ 148 if default_ctl_not_set then 149 call init_default_prt_ctl; 150 151 goto common; 152 153 print_tail_sheet: 154 entry (a_switch, a_prt_ctl_ptr, a_ordatap, a_code); 155 156 iocbp = a_switch; 157 158 /* if passed a null pointer to prt_ctl use our own default. initialize if necessary */ 159 if a_prt_ctl_ptr ^= null then 160 prt_ctl_ptr = a_prt_ctl_ptr; 161 else do; 162 if default_ctl_not_set then 163 call init_default_prt_ctl; 164 prt_ctl_ptr = addr (default_ctl); 165 end; 166 167 common: if prt_ctl.banner_type = NO_BANNERS then 168 return; /* nothing to do - forget it */ 169 /* AND don't mess up and static values! */ 170 171 call check_static_ctl (prt_ctl_ptr, change_static); 172 173 if change_static then do; 174 call init_template_and_static (prt_ctl_ptr, a_code); 175 /* set up field definitions */ 176 if a_code ^= 0 then 177 return; 178 end; 179 180 a_code = 0; 181 ordatap = a_ordatap; /* define output_request_data for proc */ 182 dmp = ordata.dpmp; 183 184 if pl < 11 then do; /* if too small, make it blank */ 185 page_size = pl + lpi - 3; 186 substr (buf, 1, page_size) = copy (NL, page_size); 187 /* all new lines past the perforations */ 188 go to print_it; 189 end; 190 191 if ^ordata.continued then /* the continued flag may mean restarting this request */ 192 if ordata.request_no = last_request_no then do; /* same as the last? */ 193 if copy_offset > 0 then do; /* multiple copy field? */ 194 if ordata.no_separator then 195 call ioa_$rsnnl ("^2d copies", temp, n, ordata.copy_no); 196 else call ioa_$rsnnl ("Copy ^2d of ^2d", temp, n, ordata.copy_no, ordata.copies); 197 substr (buf, copy_offset, n) = temp; 198 /* just put in new copy number */ 199 end; 200 go to print_it; /* now print what is there */ 201 end; 202 203 last_request_no = ordata.request_no; /* save the new request number */ 204 lh_part (*) = ""; /* clear out old vertical names */ 205 rh_part (*) = ""; 206 line_no = 1; /* this is the next line to be formatted */ 207 next_char = 1; /* this is where the next char should be put into buf */ 208 209 if vert_names then do; /* make up vert sideways names if we should */ 210 letter_index = 1; /* start with the first line of the letters */ 211 i = index (ordata.requestor, "."); 212 j = index (substr (ordata.requestor, i + 1), "."); 213 if dprint_msg.destination ^= "" then 214 dest = dprint_msg.destination; /* Get destination. */ 215 else dest = substr (ordata.requestor, i + 1, j - 1); 216 /* Default is project. */ 217 218 if dprint_msg.heading = "" then 219 head = substr (ordata.requestor, 1, i - 1); 220 else do; 221 head = dprint_msg.heading; 222 if substr (head, 1, 5) = " for " then 223 head = substr (head, 6); 224 end; 225 226 call bigletter_$five (substr (dest, 1, max_big_v), w_left); 227 /* make the left column from the dest */ 228 229 call bigletter_$five (substr (head, 1, max_big_v), w_right); 230 /* head makes the right column */ 231 end; 232 233 /* LINE 1 - request number and pathname (use the same for the last line ) */ 234 235 call ioa_$rsnnl ("^d^10t ^a ^vt^d", temp, n, ordata.request_no, char (ordata.full_path, path_field), 236 ctr_len - 7, ordata.request_no); 237 substr (bottom_ctr, 1, length (bottom_ctr)) = substr (temp, 1, length (bottom_ctr)); 238 /* save this for the last line */ 239 call make_line (temp); /* this will write it into the buffer */ 240 241 /* LINE 2 - blank in the center */ 242 243 call make_line (""); 244 245 /* LINE 3 - copy x of y or blank */ 246 if ordata.copies > 1 then do; 247 if ordata.no_separator then 248 call ioa_$rsnnl ("^2d copies", temp, n, ordata.copy_no); 249 else call ioa_$rsnnl ("Copy ^2d of ^2d", temp, n, ordata.copy_no, ordata.copies); 250 if vert_names then 251 n = 20; 252 else n = 8; 253 copy_offset = next_char + n; /* where the "C" will start in buf */ 254 end; 255 else do; 256 temp = ""; 257 copy_offset = 0; /* don't try to replace the copy string */ 258 end; 259 260 call make_line ((8)" " || temp); /* this starts 8 spaces into the center part */ 261 262 /* LINE 4 - center is all blank */ 263 264 call make_line (""); 265 266 /* LINE 5 to 10 - a blank center plus the big entry name for long tail sheets */ 267 268 if step < 3 then do; 269 call make_line (""); 270 call bigletter_$five (substr (dprint_msg.ename, 1, max_big_h), make_big_line); 271 end; 272 273 /* LINES 11 to 21 - more blank centers depending on page length */ 274 275 if step = 1 then 276 n = 11; /* 11 blanks for long pages */ 277 else if step = 2 then 278 n = 1; /* 1 for medium size pages */ 279 else n = 0; /* forget it for small ones */ 280 281 do i = 1 to n; 282 call make_line (""); 283 end; 284 285 /* LINE 22 - this is the top of the charge block */ 286 287 call make_line (copy (" ", block_ind) || (64)"$"); 288 289 /* LINE 23 - box with blank inside */ 290 291 call make_line (copy (" ", block_ind) || "$" || (62)" " || "$"); 292 293 /* LINE 24 - When was it requested */ 294 295 if step < 4 then do; /* only for normal charge blocks */ 296 datstr = date_time_$format ("date_time", dprint_msg.msg_time, "", ""); 297 call ioa_$rsnnl ("$ Requested ^24a^26x$", temp, n, datstr); 298 call make_line (copy (" ", block_ind) || temp); 299 300 /* LINE 25 - When it was dprinted */ 301 302 call ioa_$rsnnl ("$ Output ^24a^26x$", temp, n, ordata.date_time_start_request); 303 call make_line (copy (" ", block_ind) || temp); 304 305 /* LINE 26 - Box blank */ 306 307 call make_line (copy (" ", block_ind) || "$" || (62)" " || "$"); 308 309 /* LINE 27 - Output mode user specified */ 310 311 if ordata.output_mode ^= "" then /* print modes as user requested */ 312 call ioa_$rsnnl ("$ Output mode ^46a $", temp, n, char (ordata.output_mode, 46)); 313 else temp = "$" || (62)" " || "$"; 314 call make_line (copy (" ", block_ind) || temp); 315 316 /* LINE 28 - Request type queue and device */ 317 318 call ioa_$rsnnl ("$ ^a queue ^d^12x^a^[ ** Priority ^d **^;^s^]", temp, n, ordata.request_type, 319 ordata.queue, ordata.device_name, ordata.priority_request, ordata.charge_queue); 320 substr (temp, 62) = " $"; /* trim off any extra */ 321 call make_line (copy (" ", block_ind) || temp); 322 323 /* LINE 29 - Box blank */ 324 325 call make_line (copy (" ", block_ind) || "$" || (62)" " || "$"); 326 327 /* LINE 30 - number of pages and restart msg */ 328 329 if ordata.saved then 330 temp1 = "Request suspended by operator."; 331 332 else if ordata.control_flags.continued then /* else if continued..tell user */ 333 call ioa_$rsnnl ("Continued from request ^d", temp1, n, ordata.contd_no); 334 335 else if ordata.control_flags.restarted then /* else if control_flags.restarted..tell user */ 336 call ioa_$rsnnl ("Restarted from request ^d", temp1, n, ordata.restart_no); 337 else temp1 = ""; 338 if temp1 ^= "" then do; 339 call ioa_$rsnnl ("$ ^a", temp, n, temp1); 340 substr (temp, 62) = " $"; 341 call make_line (copy (" ", block_ind) || temp); 342 end; 343 344 345 if ordata.no_separator then 346 real_page_count = ordata.page_count * ordata.copies; 347 else real_page_count = ordata.page_count; 348 349 /* calculate the page charge and put it out */ 350 if ordata.charge > 0e0 then 351 calc_page_charge = real_page_count * ordata.price_per_n_pages / ordata.n_pages_for_price; 352 else calc_page_charge = 0e0; 353 call ioa_$rsnnl ("$ ^d pages^[ at $^.2f per ^d pages ^52t^10.2f^;^3s^]", temp, n, real_page_count, 354 (calc_page_charge > 0e0), ordata.price_per_n_pages, ordata.n_pages_for_price, calc_page_charge); 355 substr (temp, 62) = " $"; /* trim the extra */ 356 call make_line (copy (" ", block_ind) || temp); 357 358 /* LINE 31 - Box blank */ 359 360 call make_line (copy (" ", block_ind) || "$" || (62)" " || "$"); 361 362 /* LINE 32 - charge basis msg */ 363 364 if ordata.no_separator then 365 real_line_count = ordata.line_count * ordata.copies; 366 else real_line_count = ordata.line_count; 367 368 if ordata.charge > 0e0 then 369 calc_line_charge = real_line_count * ordata.price_per_n_lines / ordata.n_lines_for_price; 370 else calc_line_charge = 0e0; 371 call ioa_$rsnnl ("$ ^d lines^[ at $^.2f per ^d lines ^52t^10.2f^;^3s^]", temp, n, real_line_count, 372 (calc_line_charge > 0e0), ordata.price_per_n_lines, ordata.n_lines_for_price, calc_line_charge); 373 substr (temp, 62) = " $"; /* again trim */ 374 call make_line (copy (" ", block_ind) || temp); 375 376 /* LINE 33 - Box blank */ 377 378 call make_line (copy (" ", block_ind) || "$" || (62)" " || "$"); 379 end; 380 381 /* LINE 34 - charge to the user */ 382 383 call ioa_$rsnnl ("$ Charge to ^32a^6x^10.2f $", temp, n, ordata.requestor, ordata.charge); 384 call make_line (copy (" ", block_ind) || temp); 385 386 /* LINE 35 - Box blank or rate structure info */ 387 388 if max_rs_number = 0 | ordata.no_accounting then 389 call make_line (copy (" ", block_ind) || "$" || (62)" " || "$"); 390 else do; 391 call ioa_$rsnnl ("$ Rate structure ^[unknown, ^a used^;^a^].", temp, n, ordata.rs_unavailable, 392 rs_names ((ordata.rs_number))); 393 substr (temp, 62) = " $"; 394 call make_line (copy (" ", block_ind) || temp); 395 end; 396 397 /* LINE 36 - Bottom of the box */ 398 399 call make_line (copy (" ", block_ind) || (64)"$"); 400 401 /* LINE 37 to 51 are for the ACCESS CLASS if it exists */ 402 403 if ordata.access_class_string ^= "" & step < 4 then do; /* do we have a printable access class */ 404 405 /* LINE 37 to 40 - blank center */ 406 407 if step = 1 then 408 n = 4; 409 else if step = 2 then 410 n = 2; 411 else n = 1; 412 413 do i = 1 to n; 414 call make_line (""); 415 end; 416 417 /* LINE 41 and 42 access class in small letters */ 418 419 i = length (rtrim (ordata.access_class_string)); 420 if i > ctr_len then do; /* break it if too long */ 421 call make_line (substr (ordata.access_class_string, 1, ctr_len)); 422 temp = substr (ordata.access_class_string, ctr_len + 1); 423 i = length (rtrim (temp)); 424 if i > ctr_len then 425 substr (temp, ctr_len, 1) = "?"; 426 call make_line (substr (temp, 1, ctr_len)); 427 end; 428 else do; /* if it fits in the middle, center it */ 429 temp = ""; /* clear any junk */ 430 substr (temp, divide (ctr_len - i, 2, 17) + 1, i) = ordata.access_class_string; 431 call make_line (temp); 432 end; 433 434 /* LINE 43 to 46 - more blank centers */ 435 436 if step = 1 then 437 n = 4; 438 else if step = 2 then 439 n = 2; 440 else n = 0; 441 442 do i = 1 to n; 443 call make_line (""); /* put in the right number of blank lines */ 444 end; 445 446 /* LINE 47 to 51 BIG access class */ 447 448 if step < 3 then do; /* only if the page length is large enough */ 449 i = index (ordata.access_class_string, ",") - 1; 450 /* find the break char if any */ 451 if i < 0 then /* no comma...find first non blank from right */ 452 i = length (rtrim (ordata.access_class_string)); 453 temp = ""; /* start with blanks */ 454 substr (temp, max (1, divide (max_big_h - i, 2, 17) + 1), i) = 455 substr (ordata.access_class_string, 1, i); 456 call bigletter_$five (substr (temp, 1, max_big_h), make_big_line); 457 end; 458 end; 459 460 /* LINE 52 to the end of the page are now filled in */ 461 462 n = pl - line_no; /* how many lines before the bottom */ 463 464 do i = 1 to n; 465 call make_line (""); /* finish off the vertical columns on left and right */ 466 end; 467 468 /* BOTTOM LINE of printing for the tail sheet */ 469 470 call make_line (bottom_ctr); /* it was taken from the first line */ 471 472 /* Now feed past the perforations */ 473 474 substr (buf, next_char, lpi - 2) = copy (NL, lpi - 2); 475 476 page_size = next_char + lpi - 3; /* the final char count */ 477 478 print_it: 479 call iox_$modes (iocbp, mode, omode, a_code); 480 481 call iox_$put_chars (iocbp, buf_ptr, page_size, a_code); 482 483 call iox_$modes (iocbp, omode, (""), (0)); 484 485 return; 486 487 488 make_line: 489 proc (center); 490 491 /* this proc takes the center part of the tailsheet and adds on the right and left columns */ 492 493 dcl center char (*); 494 dcl line char (204); /* line image buffer */ 495 dcl n fixed bin; /* our own index variable */ 496 497 if vert_names then do; /* add vert columns if supposed to */ 498 line = lh_part (line_no); /* left part is the first 12 chars */ 499 substr (line, 13) = center; /* center part starts in col 13 */ 500 substr (line, ctr_len + 13) = rh_part (line_no); 501 /* last 12 chars are the right column */ 502 end; 503 else line = center; /* otherwise just use the center */ 504 505 n = length (rtrim (line)); 506 n = min (n, real_ll) + 1; /* truncate if need be */ 507 508 substr (buf, next_char, n) = substr (line, 1, n - 1) || NL; 509 next_char = next_char + n; 510 line_no = line_no + 1; /* ready for the next line */ 511 return; 512 513 end make_line; 514 515 /* ---------------------------------------- */ 516 517 make_big_line: 518 proc (p, len); 519 520 /* this is like make_line, but it is used by bigletter_ */ 521 522 dcl p ptr; /* ptr to big line string */ 523 dcl len fixed bin; /* length of big string */ 524 dcl center char (len) based (p); 525 dcl line char (204); /* line image buffer */ 526 dcl n fixed bin; /* our own index variable */ 527 528 if vert_names then do; /* add vert columns if supposed to */ 529 line = lh_part (line_no); /* left part is the first 12 chars */ 530 substr (line, 13) = center; /* center part starts in col 13 */ 531 substr (line, ctr_len + 13) = rh_part (line_no); 532 /* last 12 chars are the right column */ 533 end; 534 else line = center; /* otherwise just use the center */ 535 536 n = length (rtrim (line)); 537 n = min (n, real_ll) + 1; /* truncate if need be */ 538 539 substr (buf, next_char, n) = substr (line, 1, n - 1) || NL; 540 next_char = next_char + n; 541 line_no = line_no + 1; /* ready for the next line */ 542 return; 543 544 end make_big_line; 545 546 547 w_left: 548 proc (p, len); 549 550 /* this is the bigletter_ proc which makes left columns */ 551 552 dcl p ptr; 553 dcl len fixed bin; 554 dcl string char (len) based (p); 555 dcl line char (256); 556 dcl (i, i1, i2) fixed bin; 557 558 line = string; /* make the string big enough */ 559 do i = 1 to pl; 560 substr (lh_part (i), 6 - letter_index, 1) = substr (line, i, 1); 561 end; 562 letter_index = letter_index + 1; /* advance to next letter col */ 563 if letter_index > 5 then 564 letter_index = 1; /* auto reset */ 565 return; 566 567 568 w_right: 569 entry (p, len); 570 571 /* this is like w_left but for the right hand column */ 572 573 574 line = string; 575 576 i1 = letter_index + 7; /* positions 8 to 12 in rh_part form the col */ 577 i2 = pl + 1; /* make this easier to read and run */ 578 do i = pl to 1 by -1; /* on right we go up */ 579 substr (rh_part (i), i1, 1) = substr (line, i2 - i, 1); 580 end; 581 letter_index = letter_index + 1; 582 if letter_index > 5 then 583 letter_index = 1; /* auto reset */ 584 return; 585 586 end w_left; 587 588 589 set_ctl: 590 entry (a_prt_ctl_ptr, a_code); 591 592 /* This entry is used to get data on how the tail sheet is to be formatted */ 593 594 a_code = 0; 595 596 prt_ctl_ptr = a_prt_ctl_ptr; /* copy ptr to make code easier to read */ 597 598 if prt_ctl.banner_bars < 0 | prt_ctl.banner_bars > 2 599 /* legal type? */ 600 | prt_ctl.banner_type < 0 | prt_ctl.banner_type > 2 then do; 601 ctl_err: 602 a_code = error_table_$action_not_performed; 603 return; 604 end; 605 606 if prt_ctl.phys_line_length < 10 | prt_ctl.phys_line_length > 200 then 607 go to ctl_err; 608 609 if prt_ctl.lines_per_inch ^= 6 & prt_ctl.lines_per_inch ^= 8 then 610 go to ctl_err; 611 612 if prt_ctl.phys_page_length < prt_ctl.lines_per_inch + 1 | prt_ctl.phys_page_length > 258 then 613 go to ctl_err; 614 615 default_ctl = prt_ctl; /* get the new default values */ 616 617 default_ctl_not_set = "0"b; /* it is now initialized */ 618 619 return; 620 621 622 623 /* ------- INIT ENTRY ------- */ 624 625 init: 626 entry (); 627 628 last_request_no = 0; 629 return; 630 631 632 init_template_and_static: 633 proc (ctlp, code); 634 635 dcl ctlp ptr; 636 dcl code fixed bin (35); 637 638 code = 0; 639 640 static_ctl = ctlp -> prt_ctl; /* record the current (last) control data */ 641 static_ctl_not_set = "0"b; 642 643 if ts_ptr = null then do; /* be sure we have a ptr to the template */ 644 645 call hcs_$make_seg ("", "tail_sheet_.template", "", 01010b, ts_ptr, code); 646 if ts_ptr = null then 647 return; /* didn't work, return error code */ 648 649 end; 650 call hcs_$truncate_seg (ts_ptr, 0, code); /* make it clean */ 651 if code ^= 0 then 652 return; 653 654 real_ll = static_ctl.phys_line_length; /* use short name variables for frequent values */ 655 lpi = static_ctl.lines_per_inch; 656 pl = static_ctl.phys_page_length - lpi; /* printable lines */ 657 658 lh_ptr = ts_ptr; /* start with the left vert letters */ 659 rh_ptr = addrel (lh_ptr, size (lh_part) + 1); /* then the right side */ 660 buf_ptr = addrel (rh_ptr, size (rh_part) + 1); /* finally the full buffer */ 661 if (real_ll > 87) & (static_ctl.banner_type = NORMAL_BANNERS) then do; /* see if there is space for vertical letters */ 662 vert_names = "1"b; 663 ctr_len = real_ll - 24; 664 end; 665 else do; 666 vert_names = "0"b; 667 ctr_len = real_ll; /* put it all in the center */ 668 end; 669 max_big_h = divide (ctr_len, 7, 17, 0); /* number of horiz big letters */ 670 max_big_v = divide (pl, 7, 17, 0); /* number of vertical letters */ 671 block_ind = max (0, divide (ctr_len - 64, 2, 17, 0)); 672 /* spaces before the charge block */ 673 if pl > 53 then 674 step = 1; /* start block on line 22 */ 675 else if pl > 39 then 676 step = 2; /* start block on line 12 */ 677 else if pl > 20 then 678 step = 3; /* omit all big horiz letters */ 679 else step = 4; /* only the charge data */ 680 last_request_no = -1; /* can't use last tail sheet */ 681 copy_offset = 0; /* don't insert a copy.... field for 2, 3, ... */ 682 path_field = ctr_len - 18; /* space for pathname in small letters */ 683 mode = "in0,noskip,truncate,ll" || convert_binary_integer_$decimal_string (real_ll); 684 685 /* if we've never done it before, get all the rate_structure names. 686* For RS numbers > max_rs_number, system_info_ will return a name 687* of the form " INVALID_RS_n". */ 688 689 if max_rs_number < 0 then do; 690 call system_info_$max_rs_number (max_rs_number); 691 do i = 0 to hbound (rs_names (i), 1); 692 call system_info_$rs_name (i, rs_names (i), (0)); 693 end; 694 end; 695 696 return; 697 698 end init_template_and_static; 699 700 701 init_default_prt_ctl: 702 proc; 703 704 unspec (default_ctl) = "0"b; /* clear everything */ 705 706 default_ctl.phys_line_length = 136; 707 default_ctl.phys_page_length = 66; 708 default_ctl.lines_per_inch = 6; 709 default_ctl.banner_bars = NORMAL_BANNER_BARS; 710 default_ctl.banner_type = NORMAL_BANNERS; 711 712 default_ctl_not_set = "0"b; /* once per process */ 713 714 return; 715 716 end init_default_prt_ctl; 717 718 719 720 721 check_static_ctl: 722 proc (ctlp, change_static); 723 724 dcl ctlp ptr; 725 dcl change_static bit (1); 726 727 728 change_static = "0"b; /* clear to the normal case */ 729 730 if static_ctl_not_set then do; 731 change_static = "1"b; /* nothing to check against */ 732 return; 733 end; 734 735 /* check for changed values of importance to this program */ 736 737 if ctlp -> prt_ctl.phys_line_length ^= static_ctl.phys_line_length then 738 change_static = "1"b; 739 else if ctlp -> prt_ctl.phys_page_length ^= static_ctl.phys_page_length then 740 change_static = "1"b; 741 else if ctlp -> prt_ctl.lines_per_inch ^= static_ctl.lines_per_inch then 742 change_static = "1"b; 743 else if ctlp -> prt_ctl.banner_type ^= static_ctl.banner_type then 744 change_static = "1"b; 745 746 return; 747 748 end check_static_ctl; 749 /* BEGIN INCLUDE FILE ... dprint_msg.incl.pl1 */ 1 2 /* Modified: November 1983 by C. Marker Added no_separator. */ 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(87-05-10,Gilcrease), approve(87-05-13,MCR7686), 1 6* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 1 7* Add line_nbrs bit for line-numbered printouts, version 4. 1 8* 2) change(88-02-05,Farley), approve(88-02-05,PBF7686), audit(88-02-05,GWMay), 1 9* install(88-02-05,MR12.2-1022): 1 10* Corrected alignment of line_nbrs, was aligned s/b unaligned.. 1 11* 3) change(88-08-23,Farley), approve(88-09-16,MCR7911), 1 12* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 1 13* Increased size of forms field to 64 characters (was only 24), which 1 14* updates the version to 5. 1 15* END HISTORY COMMENTS */ 1 16 1 17 1 18 dcl dmp ptr; /* ptr to message */ 1 19 1 20 dcl 1 dprint_msg based (dmp) aligned, /* structure of a IO daemon print or punch request */ 1 21 2 header like queue_msg_hdr, /* header for all standard queue messages */ 1 22 2 version fixed bin, /* version of the dprint_msg used */ 1 23 2 copies fixed bin, /* number of copies user requested */ 1 24 2 bit_count fixed bin (35), /* the bitcount of the segment at request time */ 1 25 2 output_module fixed bin, /* 1=print, 2=7punch, 3= mcc, 4=raw */ 1 26 2 control, /* control flags. */ 1 27 3 nep bit (1) unal, /* TRUE if printing over perforations */ 1 28 3 single bit (1) unal, /* TRUE if ignore FF and VT */ 1 29 3 non_edited bit (1) unal, /* TRUE if printing in non-edited mode */ 1 30 3 truncate bit (1) unal, /* TRUE if truncating lines at line length */ 1 31 3 esc bit (1) unal, /* TRUE if text escapes are to be processed */ 1 32 3 center_top_label bit (1) unal, /* TRUE if top label to be centered */ 1 33 3 center_bottom_label bit (1) unal, /* TRUE if bottom label to be centered */ 1 34 3 no_separator bit(1) unal, /* TRUE if the inner head a tail sheets of multiple copies are to be suppressed. */ 1 35 3 line_nbrs bit (1) unal, /* TRUE if line numbers wanted */ 1 36 3 padding bit (27) unal, 1 37 2 lmargin fixed bin, /* indent from the left */ 1 38 2 line_lth fixed bin, /* logical line length */ 1 39 2 page_lth fixed bin, /* logical page length */ 1 40 2 heading_lth fixed bin, /* number of chars in heading */ 1 41 2 top_label_lth fixed bin, /* number of chars in the top label */ 1 42 2 bottom_label_lth fixed bin, /* number of chars in bottom label */ 1 43 2 chan_stop_path_lth fixed bin, /* number of chars in channel stop pathname */ 1 44 2 forms_name_lth fixed bin, /* number of chars in forms name */ 1 45 2 future_fb_values (7) fixed bin, /* make future versions possible */ 1 46 2 forms char (24), /* name of special forms, or blank */ 1 47 2 destination char (24), /* routing for output */ 1 48 2 heading char (head_max_lth refer (dprint_msg.heading_lth)), /* heading on page 1 */ 1 49 2 top_label char (label_max_lth refer (dprint_msg.top_label_lth)), /* top page heading for each page */ 1 50 2 bottom_label char (label_max_lth refer (dprint_msg.bottom_label_lth)), /* bottom page heading */ 1 51 2 chan_stop_path char (path_max_lth refer (dprint_msg.chan_stop_path_lth)), /* path of rqti seg with channel stops */ 1 52 2 forms_name char (forms_max_lth refer (dprint_msg.forms_name_lth)); /* forms name string */ 1 53 1 54 1 55 dcl ( 1 56 head_max_lth init (64), /* allocation size for heading */ 1 57 label_max_lth init (136), /* allocation size for label fields */ 1 58 path_max_lth init (168), /* allocation size for pathname fields */ 1 59 forms_max_lth init (64) /* allocation size for forms name string */ 1 60 ) fixed bin int static options (constant); 1 61 1 62 dcl ( 1 63 dprint_msg_version_3 init (3), 1 64 dprint_msg_version_4 init (4), 1 65 dprint_msg_version_5 init (5) /* current version */ 1 66 ) fixed bin int static options (constant); 1 67 1 68 /* END INCLUDE FILE ... dprint_msg.incl.pl1 */ 749 750 /* BEGIN INCLUDE FILE ... output_request_data.incl.pl1 */ 2 2 2 3 /* Modified by R. McDonald May 1980 to include page charges (UNCA) */ 2 4 /* Modified by C. Marker October 1983 added no_separator */ 2 5 2 6 2 7 /****^ HISTORY COMMENTS: 2 8* 1) change(87-05-10,Gilcrease), approve(87-05-13,MCR7686), 2 9* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 2 10* Add the line_nbrs bit for line-numbered output. 2 11* 2) change(88-08-19,Brunelle), approve(88-08-19,MCR7911), 2 12* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 2 13* Added single_sheet bit to denote if continuous paper. 2 14* END HISTORY COMMENTS */ 2 15 2 16 2 17 dcl 1 ordata based (ordatap) aligned, 2 18 2 dpmp ptr, /* Ptr to dprint_msg */ 2 19 2 requestor char (32), /* Person.Proj.tag requesting */ 2 20 2 full_path char (168), /* source of the output */ 2 21 2 queue fixed bin, /* Queue requested. */ 2 22 2 copies fixed bin, /* Copies requested. */ 2 23 2 copy_no fixed bin, /* Number this copy */ 2 24 2 request_no fixed bin (35), /* Number request assigned by coord */ 2 25 2 restart_no fixed bin (35), /* old number of restarted request (0 = not restarted) */ 2 26 2 request_type char (32), /* Name of device class wanted. */ 2 27 2 access_class_string char (280), /* Access class - size limit for two printer lines */ 2 28 2 punsw fixed bin, /* 0 = print, 1= punch */ 2 29 2 delete fixed bin, /* 1= delete, 0= don't */ 2 30 2 device_name char (32), /* Name of physical device used */ 2 31 2 output_mode char (128), /* user's mode string for ios_$changemode */ 2 32 2 time_start_request fixed bin (71), /* Clock time when picked request */ 2 33 2 date_time_start_request char (24), /* .. in chars too */ 2 34 2 line_count fixed bin (24), /* Line count returned by DIM */ 2 35 2 page_count fixed bin, /* Page count returned by DIM */ 2 36 2 cpu_time fixed bin (71), /* Total CPU usage while printing */ 2 37 2 real_time fixed bin (71), /* Total realtime while printing */ 2 38 2 page_waits fixed bin, /* Total page-waits while printing */ 2 39 2 pre_pages fixed bin, /* Total pre-pages (???) .. */ 2 40 2 bit_count fixed bin (24), /* Number of bits transmitted. */ 2 41 2 charge float bin, /* What the thing cost. */ 2 42 2 control_flags, 2 43 3 continued bit (1) unal, /* request started by one driver and given to another */ 2 44 3 restarted bit (1) unal, /* request is restarted */ 2 45 3 separator bit (1) unal, /* used to determine necessity of a separator page */ 2 46 3 notify bit (1) unal, /* if should confirm to user */ 2 47 3 saved bit (1) unal, /* request was suspended by operator, we'll save it */ 2 48 3 priority_request bit (1) unal, /* operator said run now!! */ 2 49 3 no_separator bit (1) unal, /* suppress inner head and tail sheets when printing multiple copies */ 2 50 3 line_nbrs bit (1) unal, /* if line-numbered output requested */ 2 51 3 single_sheet bit (1) unal, /* ON if single_sheet output */ 2 52 3 padding bit (27) unal, /* not used */ 2 53 2 contd_no fixed bin (35), /* old number of continued request (0 = not continued) */ 2 54 2 total_charge float bin, /* total charge for all copies */ 2 55 2 price_per_n_lines float bin, /* line price rate used to compute charge */ 2 56 2 n_lines_for_price fixed bin, /* number of lines price is based on */ 2 57 2 charge_queue fixed bin, /* base charge rate on this queue */ 2 58 2 price_per_n_pages float bin, /* page charge rate used to compute charge */ 2 59 2 n_pages_for_price fixed bin, /* number of pages price is based on */ 2 60 2 rs_number fixed bin (9) unsigned unaligned, /* rate_structure number used */ 2 61 2 rs_unavailable bit (1) unaligned, /* 1=>couldn't read SAT */ 2 62 2 no_accounting bit (1) unaligned, /* 1=>accounting:nothing in iod_tables */ 2 63 2 pad_bits bit (25) unaligned, 2 64 2 line_nbr fixed bin (35), /* current line number */ 2 65 2 pad_space (6) fixed bin (35); /* save some room to grow */ 2 66 2 67 dcl ordatap ptr; /* Ptr to above structure */ 2 68 2 69 dcl 1 REQUEST like ordata aligned; /* If wanted, a place to put the above thing */ 2 70 2 71 /* END INCLUDE FILE ... output_request_data.incl.pl1 */ 750 751 /* BEGIN INCLUDE FILE ... prt_ctl.incl.pl1 */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(88-02-23,Brunelle), approve(88-08-31,MCR7911), 3 6* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 3 7* Ancient History 3 8* Modified: 11 December 1981 by G. Palter to add force_ctl_char 3 9* Modified: November 1983 by C. Marker to add force_nsep 3 10* 2) change(88-02-23,Brunelle), approve(88-08-31,MCR7911), 3 11* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 3 12* Literals for banner type and banner bars type added. 3 13* END HISTORY COMMENTS */ 3 14 3 15 3 16 /* format: style4 */ 3 17 3 18 /* This structure is used by the IO Daemon to define the printer control functions */ 3 19 3 20 dcl prt_ctl_ptr ptr; 3 21 3 22 dcl 1 prt_ctl aligned based (prt_ctl_ptr), /* printer control values */ 3 23 2 flags, 3 24 3 force_nep bit (1) unal, /* set noskip for the user */ 3 25 3 force_esc bit (1) unal, /* set escape processing for the user */ 3 26 3 no_auto_print bit (1) unal, /* ask for a cmd before each request is printed */ 3 27 3 meter bit (1) unal, /* meter printer functions */ 3 28 3 force_ctl_char bit (1) unal, /* set ctl_char mode for the user */ 3 29 3 force_nsep bit (1) unal, /* supress printing of inner head and tail sheets for multiple copies */ 3 30 3 ctl_pad bit (30) unal, /* default for future values */ 3 31 2 banner_type fixed bin, /* 0 = no banners */ 3 32 /* 1 = normal head/tail sheets */ 3 33 /* 2 = brief head/tail sheets */ 3 34 /* 3 to 10 RESERVED */ 3 35 2 banner_bars fixed bin, /* 0 = normal overprinted separator bars */ 3 36 /* 1 = single print line bars (no overprint) */ 3 37 /* 2 = suppress the separator bars (no separator) */ 3 38 2 banner_indent fixed bin, /* how far to indent the banner (future) */ 3 39 2 banner_line fixed bin, /* what line to start the banner on (future) */ 3 40 3 41 2 paper_info, 3 42 3 phys_page_length fixed bin, 3 43 3 phys_line_length fixed bin, 3 44 3 lines_per_inch fixed bin, 3 45 2 channel_stops (256) bit (16) unal, /* logical stops for slew to channel */ 3 46 2 prt_ctl_pad (10) fixed bin; /* for future additions */ 3 47 3 48 /* constants for prt_ctl.banner_type */ 3 49 dcl (NO_BANNERS init (0), 3 50 NORMAL_BANNERS init (1), 3 51 BRIEF_BANNERS init (2)) fixed bin int static options (constant); 3 52 3 53 /* constants for prt_ctl.banner_bars */ 3 54 dcl (NORMAL_BANNER_BARS init (0), 3 55 SINGLE_BANNER_BARS init (1), 3 56 NO_BANNER_BARS init (2)) fixed bin int static options (constant); 3 57 3 58 /* END INCLUDE FILE ... prt_ctl.incl.pl1 */ 751 752 /* BEGIN INCLUDE FILE ... queue_msg_hdr.incl.pl1 */ 4 2 4 3 /* This is the message header used for standard system queue messages, namely: 4 4* IO daemon requests, absentee requests, retrieval requests. 4 5**/ 4 6 4 7 /* Written by Jerry Whitmore, Spring 1978. 4 8* Modified by T. Casey, November 1978, to add values for state. 4 9* Modified by R. Kovalcik, June 1982, defer_until_process_terminataion 4 10**/ 4 11 4 12 dcl 1 queue_msg_hdr based aligned, /* standard header for all system queue messages */ 4 13 2 msg_time fixed bin (71), /* date and time of request */ 4 14 2 hdr_version fixed bin, /* version of this declaration */ 4 15 2 dirname char (168), /* directory name */ 4 16 2 ename char (32), /* entry name of file requested */ 4 17 2 message_type fixed bin, /* message format descriptor */ 4 18 /* 0 = absentee request */ 4 19 /* 1 = print request */ 4 20 /* 2 = punch request */ 4 21 /* 3 = tape request */ 4 22 /* 4 = retrieval request */ 4 23 2 bit_flags, 4 24 3 delete_sw bit (1) unal, /* delete file when done */ 4 25 3 notify bit (1) unal, /* user wants to be notified */ 4 26 3 defer_until_process_termination bit (1) unal, /* don't process request until process terminates */ 4 27 3 padding bit (33) unal, 4 28 2 state fixed bin, /* stage of processing after being queued: 4 29* 0 = initial unprocessed state, 1 = deferred, 4 30* 2 = in state transition, 3 = eligible, 4 = running, 4 31* 5 = bumped, 6 = deferred_until_process_termination */ 4 32 2 orig_queue fixed bin, /* queue the request was submitted to */ 4 33 2 std_length fixed bin, /* length of std msg for this type */ 4 34 2 dupt_lock bit (36) aligned, /* lock word for defer until process termination */ 4 35 2 hdr_pad (3) fixed bin; 4 36 4 37 dcl queue_msg_hdr_version_1 fixed bin int static options (constant) init (1); /* current version of the header */ 4 38 4 39 /* Values for queue_msg_hdr.state */ 4 40 4 41 dcl STATE_UNPROCESSED fixed bin int static options (constant) init (0); 4 42 dcl STATE_DEFERRED fixed bin int static options (constant) init (1); 4 43 dcl STATE_TRANSITION fixed bin int static options (constant) init (2); 4 44 dcl STATE_ELIGIBLE fixed bin int static options (constant) init (3); 4 45 dcl STATE_RUNNING fixed bin int static options (constant) init (4); 4 46 dcl STATE_BUMPED fixed bin int static options (constant) init (5); 4 47 dcl STATE_DUPT fixed bin int static options (constant) init (6); 4 48 4 49 /* END INCLUDE FILE ... queue_msg_hdr.incl.pl1 */ 752 753 754 end tail_sheet_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/28/88 1238.8 tail_sheet_.pl1 >special_ldd>install>MR12.2-1199>tail_sheet_.pl1 749 1 10/28/88 1227.6 dprint_msg.incl.pl1 >special_ldd>install>MR12.2-1199>dprint_msg.incl.pl1 750 2 10/28/88 1226.4 output_request_data.incl.pl1 >special_ldd>install>MR12.2-1199>output_request_data.incl.pl1 751 3 10/28/88 1227.1 prt_ctl.incl.pl1 >special_ldd>install>MR12.2-1199>prt_ctl.incl.pl1 752 4 08/31/82 1636.3 queue_msg_hdr.incl.pl1 >ldd>include>queue_msg_hdr.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. NL 005120 constant char(1) initial packed unaligned dcl 85 ref 186 474 508 539 NORMAL_BANNERS constant fixed bin(17,0) initial dcl 3-49 ref 661 710 NORMAL_BANNER_BARS constant fixed bin(17,0) initial dcl 3-54 ref 709 NO_BANNERS constant fixed bin(17,0) initial dcl 3-49 ref 167 a_code parameter fixed bin(35,0) dcl 58 set ref 53 143* 144 153 174* 176 180* 478* 481* 589 594* 601* a_ordatap parameter pointer dcl 59 ref 53 153 181 a_prt_ctl_ptr parameter pointer dcl 60 ref 153 159 159 589 596 a_stream parameter char packed unaligned dcl 61 set ref 53 143* a_switch parameter pointer dcl 62 ref 153 156 access_class_string 101 based char(280) level 2 dcl 2-17 ref 403 419 421 421 422 430 449 451 454 addr builtin function dcl 81 ref 164 addrel builtin function dcl 81 ref 659 660 banner_bars 2 000271 internal static fixed bin(17,0) level 2 in structure "default_ctl" dcl 110 in procedure "tail_sheet_" set ref 709* banner_bars 2 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 3-22 in procedure "tail_sheet_" ref 598 598 banner_type 1 000475 internal static fixed bin(17,0) level 2 in structure "static_ctl" dcl 112 in procedure "tail_sheet_" set ref 661 743 banner_type 1 000271 internal static fixed bin(17,0) level 2 in structure "default_ctl" dcl 110 in procedure "tail_sheet_" set ref 710* banner_type 1 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 3-22 in procedure "tail_sheet_" ref 167 598 598 743 bigletter_$five 000702 constant entry external dcl 66 ref 226 229 270 456 block_ind 000114 internal static fixed bin(17,0) dcl 92 set ref 287 291 298 303 307 314 321 325 341 356 360 374 378 384 388 394 399 671* bottom_ctr 000143 automatic char(204) packed unaligned dcl 118 set ref 237 237* 237 470* buf based char(16000) packed unaligned dcl 137 set ref 186* 197* 474* 508* 539* buf_ptr 000124 internal static pointer initial dcl 96 set ref 186 197 474 481* 508 539 660* calc_line_charge 000226 automatic float bin(27) dcl 119 set ref 368* 370* 371 371* calc_page_charge 000227 automatic float bin(27) dcl 120 set ref 350* 352* 353 353* center parameter char packed unaligned dcl 493 in procedure "make_line" ref 488 499 503 center based char packed unaligned dcl 524 in procedure "make_big_line" ref 530 534 change_static 000230 automatic bit(1) packed unaligned dcl 121 in procedure "tail_sheet_" set ref 171* 173 change_static parameter bit(1) packed unaligned dcl 725 in procedure "check_static_ctl" set ref 721 728* 731* 737* 739* 741* 743* char builtin function dcl 81 ref 235 235 311 311 charge 303 based float bin(27) level 2 dcl 2-17 set ref 350 368 383* charge_queue 311 based fixed bin(17,0) level 2 dcl 2-17 set ref 318* code parameter fixed bin(35,0) dcl 636 set ref 632 638* 645* 650* 651 contd_no 305 based fixed bin(35,0) level 2 dcl 2-17 set ref 332* continued 304 based bit(1) level 3 packed packed unaligned dcl 2-17 ref 191 332 control_flags 304 based structure level 2 dcl 2-17 convert_binary_integer_$decimal_string 000704 constant entry external dcl 67 ref 683 copies 65 based fixed bin(17,0) level 2 dcl 2-17 set ref 196* 246 249* 345 364 copy builtin function dcl 81 ref 186 287 291 298 303 307 314 321 325 341 356 360 374 378 384 388 394 399 474 copy_no 66 based fixed bin(17,0) level 2 dcl 2-17 set ref 194* 196* 247* 249* copy_offset 000132 internal static fixed bin(17,0) dcl 101 set ref 193 197 253* 257* 681* ctlp parameter pointer dcl 635 in procedure "init_template_and_static" ref 632 640 ctlp parameter pointer dcl 724 in procedure "check_static_ctl" ref 721 737 739 741 743 ctr_len 000112 internal static fixed bin(17,0) dcl 90 set ref 235 420 421 421 422 424 424 426 426 430 500 531 663* 667* 669 671 682 date_time_$format 000706 constant entry external dcl 68 ref 296 date_time_start_request 264 based char(24) level 2 dcl 2-17 set ref 302* datstr 000231 automatic varying char(64) dcl 122 set ref 296* 297* default_ctl 000271 internal static structure level 1 dcl 110 set ref 164 615* 704* default_ctl_not_set 000011 internal static bit(1) initial packed unaligned dcl 88 set ref 148 162 617* 712* dest 000120 automatic char(64) dcl 116 set ref 213* 215* 226 226 destination 130 based char(24) level 2 dcl 1-20 ref 213 213 device_name 211 based char(32) level 2 dcl 2-17 set ref 318* divide builtin function dcl 81 ref 430 454 669 670 671 dmp 000552 automatic pointer dcl 1-18 set ref 182* 213 213 218 221 270 270 296 dpmp based pointer level 2 dcl 2-17 ref 182 dprint_msg based structure level 1 dcl 1-20 ename 55 based char(32) level 3 dcl 1-20 ref 270 270 error_table_$action_not_performed 000710 external static fixed bin(35,0) dcl 69 ref 601 full_path 12 based char(168) level 2 dcl 2-17 ref 235 235 hbound builtin function dcl 81 ref 691 hcs_$make_seg 000712 constant entry external dcl 70 ref 645 hcs_$truncate_seg 000714 constant entry external dcl 71 ref 650 head 000100 automatic char(64) dcl 116 set ref 218* 221* 222 222* 222 229 229 header based structure level 2 dcl 1-20 heading 136 based char level 2 dcl 1-20 ref 218 221 heading_lth 106 based fixed bin(17,0) level 2 dcl 1-20 ref 218 221 i 000200 automatic fixed bin(17,0) dcl 556 in procedure "w_left" set ref 559* 560 560* 578* 579 579* i 000140 automatic fixed bin(17,0) dcl 117 in procedure "tail_sheet_" set ref 211* 212 215 218 281* 413* 419* 420 423* 424 430 430 442* 449* 451 451* 454 454 454 464* 691* 691* 692* 692* i1 000201 automatic fixed bin(17,0) dcl 556 set ref 576* 579 i2 000202 automatic fixed bin(17,0) dcl 556 set ref 577* 579 index builtin function dcl 81 ref 211 212 449 ioa_$rsnnl 000716 constant entry external dcl 72 ref 194 196 235 247 249 297 302 311 318 332 335 339 353 371 383 391 iocbp 000252 automatic pointer dcl 123 set ref 143* 156* 478* 481* 483* iox_$find_iocb 000720 constant entry external dcl 73 ref 143 iox_$modes 000722 constant entry external dcl 74 ref 478 483 iox_$put_chars 000724 constant entry external dcl 75 ref 481 j 000141 automatic fixed bin(17,0) dcl 117 set ref 212* 215 last_request_no 000133 internal static fixed bin(17,0) dcl 102 set ref 191 203* 628* 680* len parameter fixed bin(17,0) dcl 553 in procedure "w_left" ref 547 558 568 574 len parameter fixed bin(17,0) dcl 523 in procedure "make_big_line" ref 517 530 534 length builtin function dcl 81 ref 237 237 419 423 451 505 536 letter_index 000254 automatic fixed bin(17,0) dcl 124 set ref 210* 560 562* 562 563 563* 576 581* 581 582 582* lh_part based char(12) array packed unaligned dcl 135 set ref 204* 498 529 560* 659 lh_ptr 000120 internal static pointer initial dcl 94 set ref 204 498 529 560 658* 659 659 line 000100 automatic char(204) packed unaligned dcl 525 in procedure "make_big_line" set ref 529* 530* 531* 534* 536 539 line 000100 automatic char(204) packed unaligned dcl 494 in procedure "make_line" set ref 498* 499* 500* 503* 505 508 line 000100 automatic char(256) packed unaligned dcl 555 in procedure "w_left" set ref 558* 560 574* 579 line_count 272 based fixed bin(24,0) level 2 dcl 2-17 ref 364 366 line_no 000255 automatic fixed bin(17,0) dcl 125 set ref 206* 462 498 500 510* 510 529 531 541* 541 lines_per_inch 7 based fixed bin(17,0) level 3 in structure "prt_ctl" dcl 3-22 in procedure "tail_sheet_" ref 609 609 612 741 lines_per_inch 7 000475 internal static fixed bin(17,0) level 3 in structure "static_ctl" dcl 112 in procedure "tail_sheet_" set ref 655 741 lines_per_inch 7 000271 internal static fixed bin(17,0) level 3 in structure "default_ctl" dcl 110 in procedure "tail_sheet_" set ref 708* lpi 000131 internal static fixed bin(17,0) initial dcl 100 set ref 185 474 474 476 655* 656 max builtin function dcl 81 ref 454 671 max_big_h 000137 internal static fixed bin(17,0) dcl 106 set ref 270 270 454 456 456 669* max_big_v 000136 internal static fixed bin(17,0) dcl 105 set ref 226 226 229 229 670* max_rs_number 000140 internal static fixed bin(17,0) initial dcl 107 set ref 388 689 690* min builtin function dcl 81 ref 506 537 mode 000012 internal static char(256) packed unaligned dcl 89 set ref 478* 683* msg_time based fixed bin(71,0) level 3 dcl 1-20 set ref 296* n 000142 automatic fixed bin(17,0) dcl 117 in procedure "tail_sheet_" set ref 194* 196* 197 235* 247* 249* 250* 252* 253 275* 277* 279* 281 297* 302* 311* 318* 332* 335* 339* 353* 371* 383* 391* 407* 409* 411* 413 436* 438* 440* 442 462* 464 n 000163 automatic fixed bin(17,0) dcl 526 in procedure "make_big_line" set ref 536* 537* 537 539 539 540 n 000163 automatic fixed bin(17,0) dcl 495 in procedure "make_line" set ref 505* 506* 506 508 508 509 n_lines_for_price 310 based fixed bin(17,0) level 2 dcl 2-17 set ref 368 371* n_pages_for_price 313 based fixed bin(17,0) level 2 dcl 2-17 set ref 350 353* next_char 000256 automatic fixed bin(17,0) dcl 126 set ref 207* 253 474 476 508 509* 509 539 540* 540 no_accounting 314(10) based bit(1) level 2 packed packed unaligned dcl 2-17 ref 388 no_separator 304(06) based bit(1) level 3 packed packed unaligned dcl 2-17 ref 194 247 345 364 null builtin function dcl 81 ref 159 643 646 omode 000257 automatic char(256) packed unaligned dcl 127 set ref 478* 483* ordata based structure level 1 dcl 2-17 ordatap 000554 automatic pointer dcl 2-67 set ref 181* 182 191 191 194 194 196 196 203 211 212 215 218 235 235 235 235 246 247 247 249 249 302 311 311 311 318 318 318 318 318 329 332 332 335 335 345 345 345 347 350 350 350 353 353 364 364 364 366 368 368 368 371 371 383 383 388 391 391 403 419 421 421 422 430 449 451 454 output_mode 221 based char(128) level 2 dcl 2-17 ref 311 311 311 p parameter pointer dcl 552 in procedure "w_left" ref 547 558 568 574 p parameter pointer dcl 522 in procedure "make_big_line" ref 517 530 534 page_count 273 based fixed bin(17,0) level 2 dcl 2-17 ref 345 347 page_size 000126 internal static fixed bin(21,0) dcl 97 set ref 185* 186 186 476* 481* paper_info 5 000475 internal static structure level 2 in structure "static_ctl" dcl 112 in procedure "tail_sheet_" paper_info 5 based structure level 2 in structure "prt_ctl" dcl 3-22 in procedure "tail_sheet_" paper_info 5 000271 internal static structure level 2 in structure "default_ctl" dcl 110 in procedure "tail_sheet_" path_field 000113 internal static fixed bin(17,0) dcl 91 set ref 235 235 682* phys_line_length 6 based fixed bin(17,0) level 3 in structure "prt_ctl" dcl 3-22 in procedure "tail_sheet_" ref 606 606 737 phys_line_length 6 000271 internal static fixed bin(17,0) level 3 in structure "default_ctl" dcl 110 in procedure "tail_sheet_" set ref 706* phys_line_length 6 000475 internal static fixed bin(17,0) level 3 in structure "static_ctl" dcl 112 in procedure "tail_sheet_" set ref 654 737 phys_page_length 5 000271 internal static fixed bin(17,0) level 3 in structure "default_ctl" dcl 110 in procedure "tail_sheet_" set ref 707* phys_page_length 5 000475 internal static fixed bin(17,0) level 3 in structure "static_ctl" dcl 112 in procedure "tail_sheet_" set ref 656 739 phys_page_length 5 based fixed bin(17,0) level 3 in structure "prt_ctl" dcl 3-22 in procedure "tail_sheet_" ref 612 612 739 pl 000130 internal static fixed bin(17,0) initial dcl 99 set ref 184 185 204 205 462 559 577 578 656* 659 660 670 673 675 677 price_per_n_lines 307 based float bin(27) level 2 dcl 2-17 set ref 368 371* price_per_n_pages 312 based float bin(27) level 2 dcl 2-17 set ref 350 353* priority_request 304(05) based bit(1) level 3 packed packed unaligned dcl 2-17 set ref 318* prt_ctl based structure level 1 dcl 3-22 ref 615 640 prt_ctl_ptr 000556 automatic pointer dcl 3-20 set ref 159* 164* 167 171* 174* 596* 598 598 598 598 606 606 609 609 612 612 612 615 queue 64 based fixed bin(17,0) level 2 dcl 2-17 set ref 318* queue_msg_hdr based structure level 1 dcl 4-12 real_line_count 000357 automatic fixed bin(17,0) dcl 128 set ref 364* 366* 368 371* real_ll 000127 internal static fixed bin(17,0) initial dcl 98 set ref 506 537 654* 661 663 667 683* real_page_count 000360 automatic fixed bin(17,0) dcl 129 set ref 345* 347* 350 353* request_no 67 based fixed bin(35,0) level 2 dcl 2-17 set ref 191 203 235* 235* request_type 71 based char(32) level 2 dcl 2-17 set ref 318* requestor 2 based char(32) level 2 dcl 2-17 set ref 211 212 215 218 383* restart_no 70 based fixed bin(35,0) level 2 dcl 2-17 set ref 335* restarted 304(01) based bit(1) level 3 packed packed unaligned dcl 2-17 ref 335 rh_part based char(12) array packed unaligned dcl 136 set ref 205* 500 531 579* 660 rh_ptr 000122 internal static pointer initial dcl 95 set ref 205 500 531 579 659* 660 660 rs_names 000141 internal static char(32) initial array packed unaligned dcl 108 set ref 391* 691 692* rs_number 314 based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 2-17 ref 391 rs_unavailable 314(09) based bit(1) level 2 packed packed unaligned dcl 2-17 set ref 391* rtrim builtin function dcl 81 ref 419 423 451 505 536 saved 304(04) based bit(1) level 3 packed packed unaligned dcl 2-17 ref 329 size builtin function dcl 81 ref 659 660 static_ctl 000475 internal static structure level 1 dcl 112 set ref 640* static_ctl_not_set 000010 internal static bit(1) initial packed unaligned dcl 87 set ref 641* 730 step 000134 internal static fixed bin(17,0) dcl 103 set ref 268 275 277 295 403 407 409 436 438 448 673* 675* 677* 679* string based char packed unaligned dcl 554 ref 558 574 substr builtin function dcl 81 set ref 186* 197* 212 215 218 222 222 226 226 229 229 237* 237 270 270 320* 340* 355* 373* 393* 421 421 422 424* 426 426 430* 454* 454 456 456 474* 499* 500* 508* 508 530* 531* 539* 539 560* 560 579* 579 system_info_$max_rs_number 000726 constant entry external dcl 76 ref 690 system_info_$rs_name 000730 constant entry external dcl 77 ref 692 temp 000361 automatic char(280) packed unaligned dcl 130 set ref 194* 196* 197 235* 237 239* 247* 249* 256* 260 297* 298 302* 303 311* 313* 314 318* 320* 321 339* 340* 341 353* 355* 356 371* 373* 374 383* 384 391* 393* 394 422* 423 424* 426 426 429* 430* 431* 453* 454* 456 456 temp1 000467 automatic char(200) packed unaligned dcl 131 set ref 329* 332* 335* 337* 338 339* ts_ptr 000116 internal static pointer initial dcl 93 set ref 643 645* 646 650* 658 unspec builtin function dcl 81 set ref 704* vert_names 000135 internal static bit(1) packed unaligned dcl 104 set ref 209 250 497 528 662* 666* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BRIEF_BANNERS internal static fixed bin(17,0) initial dcl 3-49 NO_BANNER_BARS internal static fixed bin(17,0) initial dcl 3-54 REQUEST automatic structure level 1 dcl 2-69 SINGLE_BANNER_BARS internal static fixed bin(17,0) initial dcl 3-54 STATE_BUMPED internal static fixed bin(17,0) initial dcl 4-46 STATE_DEFERRED internal static fixed bin(17,0) initial dcl 4-42 STATE_DUPT internal static fixed bin(17,0) initial dcl 4-47 STATE_ELIGIBLE internal static fixed bin(17,0) initial dcl 4-44 STATE_RUNNING internal static fixed bin(17,0) initial dcl 4-45 STATE_TRANSITION internal static fixed bin(17,0) initial dcl 4-43 STATE_UNPROCESSED internal static fixed bin(17,0) initial dcl 4-41 dprint_msg_version_3 internal static fixed bin(17,0) initial dcl 1-62 dprint_msg_version_4 internal static fixed bin(17,0) initial dcl 1-62 dprint_msg_version_5 internal static fixed bin(17,0) initial dcl 1-62 forms_max_lth internal static fixed bin(17,0) initial dcl 1-55 head_max_lth internal static fixed bin(17,0) initial dcl 1-55 label_max_lth internal static fixed bin(17,0) initial dcl 1-55 path_max_lth internal static fixed bin(17,0) initial dcl 1-55 queue_msg_hdr_version_1 internal static fixed bin(17,0) initial dcl 4-37 NAMES DECLARED BY EXPLICIT CONTEXT. check_static_ctl 005036 constant entry internal dcl 721 ref 171 common 000412 constant label dcl 167 ref 151 ctl_err 004034 constant label dcl 601 ref 606 609 612 init 004067 constant entry external dcl 625 init_default_prt_ctl 005015 constant entry internal dcl 701 ref 148 162 init_template_and_static 004506 constant entry internal dcl 632 ref 174 make_big_line 004223 constant entry internal dcl 517 ref 270 270 456 456 make_line 004100 constant entry internal dcl 488 ref 239 243 260 264 269 282 287 291 298 303 307 314 321 325 341 356 360 374 378 384 388 394 399 414 421 426 431 443 465 470 print_it 003713 constant label dcl 478 ref 188 200 print_tail_sheet 000353 constant entry external dcl 153 set_ctl 004006 constant entry external dcl 589 tail_sheet_ 000277 constant entry external dcl 53 w_left 004343 constant entry internal dcl 547 ref 226 226 w_right 004421 constant entry internal dcl 568 ref 229 229 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5422 6354 5162 5432 Length 7004 5162 732 413 240 672 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tail_sheet_ 596 external procedure is an external procedure. make_line 119 internal procedure is called during a stack extension. make_big_line 118 internal procedure is assigned to an entry variable. w_left 133 internal procedure is assigned to an entry variable. init_template_and_static internal procedure shares stack frame of external procedure tail_sheet_. init_default_prt_ctl internal procedure shares stack frame of external procedure tail_sheet_. check_static_ctl internal procedure shares stack frame of external procedure tail_sheet_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 static_ctl_not_set tail_sheet_ 000011 default_ctl_not_set tail_sheet_ 000012 mode tail_sheet_ 000112 ctr_len tail_sheet_ 000113 path_field tail_sheet_ 000114 block_ind tail_sheet_ 000116 ts_ptr tail_sheet_ 000120 lh_ptr tail_sheet_ 000122 rh_ptr tail_sheet_ 000124 buf_ptr tail_sheet_ 000126 page_size tail_sheet_ 000127 real_ll tail_sheet_ 000130 pl tail_sheet_ 000131 lpi tail_sheet_ 000132 copy_offset tail_sheet_ 000133 last_request_no tail_sheet_ 000134 step tail_sheet_ 000135 vert_names tail_sheet_ 000136 max_big_v tail_sheet_ 000137 max_big_h tail_sheet_ 000140 max_rs_number tail_sheet_ 000141 rs_names tail_sheet_ 000271 default_ctl tail_sheet_ 000475 static_ctl tail_sheet_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME make_big_line 000100 line make_big_line 000163 n make_big_line make_line 000100 line make_line 000163 n make_line tail_sheet_ 000100 head tail_sheet_ 000120 dest tail_sheet_ 000140 i tail_sheet_ 000141 j tail_sheet_ 000142 n tail_sheet_ 000143 bottom_ctr tail_sheet_ 000226 calc_line_charge tail_sheet_ 000227 calc_page_charge tail_sheet_ 000230 change_static tail_sheet_ 000231 datstr tail_sheet_ 000252 iocbp tail_sheet_ 000254 letter_index tail_sheet_ 000255 line_no tail_sheet_ 000256 next_char tail_sheet_ 000257 omode tail_sheet_ 000357 real_line_count tail_sheet_ 000360 real_page_count tail_sheet_ 000361 temp tail_sheet_ 000467 temp1 tail_sheet_ 000552 dmp tail_sheet_ 000554 ordatap tail_sheet_ 000556 prt_ctl_ptr tail_sheet_ w_left 000100 line w_left 000200 i w_left 000201 i1 w_left 000202 i2 w_left THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_g_a alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this_desc return_mac shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. bigletter_$five convert_binary_integer_$decimal_string date_time_$format hcs_$make_seg hcs_$truncate_seg ioa_$rsnnl iox_$find_iocb iox_$modes iox_$put_chars system_info_$max_rs_number system_info_$rs_name THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 53 000273 143 000317 144 000337 148 000341 151 000345 153 000346 156 000367 159 000373 162 000403 164 000407 167 000412 171 000415 173 000417 174 000422 176 000432 180 000434 181 000435 182 000440 184 000442 185 000446 186 000451 188 000455 191 000456 193 000464 194 000466 196 000522 197 000554 200 000563 203 000564 204 000566 205 000604 206 000622 207 000624 209 000625 210 000627 211 000630 212 000642 213 000656 215 000667 218 000673 221 000706 222 000711 226 000720 229 000746 231 000776 235 000777 237 001056 239 001062 243 001072 246 001102 247 001106 249 001143 250 001176 252 001204 253 001206 254 001210 256 001211 257 001214 260 001216 264 001234 268 001244 269 001250 270 001260 271 001310 275 001311 277 001320 279 001325 281 001326 282 001335 283 001345 287 001347 291 001377 295 001450 296 001455 297 001520 298 001550 302 001600 303 001632 307 001662 311 001733 313 001775 314 002000 318 002030 320 002101 321 002104 325 002134 329 002205 332 002216 335 002252 337 002306 338 002311 339 002315 340 002344 341 002347 342 002377 345 002400 347 002410 350 002412 352 002425 353 002427 355 002476 356 002501 360 002531 364 002602 366 002613 368 002615 370 002630 371 002632 373 002701 374 002704 378 002734 379 003005 383 003006 384 003043 388 003073 390 003153 391 003154 393 003214 394 003217 395 003247 399 003250 403 003300 407 003312 409 003317 411 003324 413 003326 414 003335 415 003345 419 003347 420 003362 421 003365 422 003404 423 003415 424 003427 426 003434 427 003453 429 003455 430 003460 431 003467 436 003477 438 003506 440 003513 442 003514 443 003523 444 003533 448 003535 449 003541 451 003552 453 003565 454 003570 456 003603 457 003631 462 003632 464 003636 465 003645 466 003655 470 003657 474 003667 476 003706 478 003713 481 003736 483 003753 485 004001 589 004002 594 004020 596 004021 598 004024 601 004034 603 004037 606 004040 609 004045 612 004052 615 004060 617 004064 619 004065 625 004066 628 004074 629 004076 488 004077 497 004113 498 004115 499 004125 500 004133 502 004147 503 004150 505 004155 506 004167 508 004174 509 004215 510 004220 511 004221 517 004222 528 004230 529 004232 530 004242 531 004251 533 004265 534 004266 536 004275 537 004307 539 004314 540 004335 541 004340 542 004341 547 004342 558 004350 559 004357 560 004367 561 004406 562 004410 563 004412 565 004417 568 004420 574 004426 576 004435 577 004441 578 004445 579 004453 580 004473 581 004476 582 004500 584 004505 632 004506 638 004510 640 004511 641 004517 643 004520 645 004524 646 004570 650 004576 651 004612 654 004616 655 004621 656 004623 658 004626 659 004630 660 004635 661 004640 662 004646 663 004650 664 004653 666 004654 667 004655 669 004657 670 004661 671 004664 673 004673 675 004701 677 004706 679 004713 680 004715 681 004717 682 004720 683 004723 689 004751 690 004754 691 004762 692 004767 693 005012 696 005014 701 005015 704 005016 706 005022 707 005024 708 005026 709 005030 710 005032 712 005034 714 005035 721 005036 728 005040 730 005044 731 005047 732 005052 737 005053 739 005064 741 005073 743 005102 746 005110 ----------------------------------------------------------- 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