COMPILATION LISTING OF SEGMENT daily_summary Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 07/13/88 1024.0 mst Wed Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 /* ****************************************************** 8* * * 9* * * 10* * Copyright (c) 1972 by Massachusetts Institute of * 11* * Technology and Honeywell Information Systems, Inc. * 12* * * 13* * * 14* ****************************************************** */ 15 16 daily_summary: proc; 17 18 /* daily summary program. 19* 20* This program produces a daily billing and overspent account summary. 21* It also inserts cutoff codes into the sat to prevent overspent accounts from logging in. 22* 23* inputs: 24* . "reqfile" per-account requisition info 25* 26* outputs: 27* . "sumry" one line per requisition showing status & charges 28* . "sat" new cutoff code for every project in sat 29* . "cutrpt" list of user cutoff information 30* 31* THVV 11/69 - KAW 6/71 32* 33* Modified by T. Casey, May 1976, to put account balance figures into SAT entry. 34* */ 35 36 dcl dn char (168) aligned, /* segment names */ 37 en char (32) aligned, /* ... */ 38 ec fixed bin, /* file-system error code */ 39 al fixed bin, 40 (i, j, m) fixed bin, /* counters */ 41 dtemp char (8) aligned, /* ... */ 42 (rv, rb) char (15) aligned, /* ... */ 43 (total_month, total_amt, total_req, total_balance) float bin init (0e0), 44 open char (15) aligned internal static init (" open"), 45 warn_amt float bin int static init (10e0), 46 warn_pct float bin int static init (0.10e0), /* percentage */ 47 oneday fixed bin (71) int static init (86400000000), /* one day's worth of microseconds */ 48 warn_days fixed bin int static init (10), /* number of days to wait before warning */ 49 today fixed bin (71), 50 isat fixed bin, 51 cutoff_code char (1) aligned init (" "), 52 satp ptr, 53 satep ptr, 54 (coxx, dpxx) char (4) aligned, 55 date_string char (24) aligned, 56 cut_count fixed bin init (0), 57 warn_count fixed bin init (0), 58 p ptr, 59 ap ptr, 60 qp ptr; /* ptr to "reqfile" */ 61 62 dcl argu char (al) based (ap) unaligned, 63 arg char (8) aligned, 64 nargs fixed bin, 65 balance float bin (63), 66 warn bit (1) init ("0"b), 67 sum bit (1) init ("1"b), 68 projord bit (1) aligned init ("1"b), 69 cutr bit (1) init ("1"b), 70 satlist bit (1) init ("1"b); 71 72 dcl (days_to_cutoff, pct_balance) fixed bin; 73 74 dcl (addr, divide, fixed, mod, null, float, substr) builtin; 75 76 dcl sumry char (32) int static aligned init ("sumry"); /* stream names */ 77 dcl cutrpt char (32) aligned int static init ("cutrpt"); 78 79 dcl error_table_$badopt fixed bin ext; 80 81 /* format statements */ 82 83 dcl l1 char (120) aligned, 84 l2 char (120) aligned, 85 l3 char (48) aligned int static init 86 ("^-^-^-Multics ^a for the date of ^a^/"), 87 l4 char (60) aligned int static init 88 ("^-^-^-Table of cutoff codes"), 89 l5 char (60) aligned int static init 90 ("^-^-^-X - Project is out of funds and no logins permitted"), 91 l6 char (60) aligned int static init 92 ("^-^-^-Y - Project is out of funds but logins permitted"), 93 l7 char (70) aligned int static init 94 ("^-^-^-T - Project has past termination date and no logins permitted "), 95 l8 char (70) aligned int static init 96 ("^-^-^-S - Project has past termination date but logins permitted "), 97 l9 char (70) aligned int static init 98 ("^-^-^-W - Project is almost out of funds and logins permitted "), 99 l10 char (70) aligned int static init 100 ("^-^-^-R - Project is almost past termination date and logins permitted"), 101 l11 char (90) aligned int static init 102 ("^/^2xAcctid^8xAcctno^8xReq. no.^6xBilling Name^22xBilling Address^19xCutoff Code"), 103 dashx1 char (90) aligned int static init 104 (" ------^8x-------^7x--------^6x------------^22x---------------^19x-----------"), 105 xl2a char (98) aligned int static init 106 ("^-^-^4xRequisition^8xCharge^10xRequisition^8xCharge^9xRequisition Termination Cutoff"), 107 xl2b char (93) aligned int static init 108 ("^-^14a or PO no.^8xthis month^6xAmount^13xthis req.^6xBalance^6xDate^9xCode"), 109 xl3 char (72) aligned int static init 110 ("^9a ^12a ^12a ^15a ^15a ^15a ^15a ^8a ^1a"), 111 dashx char (120) aligned int static init 112 ("^/^------------- ------------^3x--------------^3x--------------^3x--------------^3x-------------- -------- -----"); 113 114 /* procedures called by this program */ 115 116 dcl ioa_ entry options (variable), /* output routine */ 117 ioa_$ioa_stream entry options (variable), /* output on file */ 118 expand_path_ entry (ptr, fixed bin, ptr, ptr, fixed bin), 119 idsort_ entry ((*) char (32) aligned, (*) fixed bin, fixed bin), 120 system_info_$titles entry (char (*) aligned, char (*) aligned, char (*) aligned, char (*) aligned), 121 get_wdir_ entry () returns (char (168) aligned), 122 date_time_ entry (fixed bin (71), char (*) aligned), 123 clock_ entry () returns (fixed bin (71)), 124 cv_$mwvf entry (float bin) returns (char (15) aligned), /* dollar converter */ 125 hcs_$initiate entry (char (*) aligned, char (*) aligned, char (*) aligned, 126 fixed bin (1), fixed bin (2), ptr, fixed bin), 127 hcs_$terminate_noname entry (ptr, fixed bin), 128 cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin), 129 com_err_ entry options (variable); 130 131 1 1 /* BEGIN INCLUDE FILE ... user_attributes.incl.pl1 TAC 10/79 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(86-12-11,Brunelle), approve(87-07-13,MCR7741), 1 6* audit(87-04-19,GDixon), install(87-08-04,MR12.1-1056): 1 7* Add incl for abs_attributes.incl.pl1 to automatically include absentee 1 8* attribute switches. 1 9* 2) change(87-04-19,GDixon), approve(87-07-13,MCR7741), 1 10* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 1 11* A) Add USER_ATTRIBUTE_NAMES arrays. attribute_names.incl.pl1 can thereby 1 12* be deleted. 1 13* B) Add constants identifying attributes that can be changed by user at 1 14* login, etc. 1 15* END HISTORY COMMENTS */ 1 16 1 17 1 18 /* Modified 82-01-03 E. N. Kittlitz. to declare a complete level-1 structure */ 1 19 1 20 /* format: style4 */ 1 21 dcl 1 user_attributes aligned based, /* the user user_attributes */ 1 22 (2 administrator bit (1), /* 1 system administrator privileges */ 1 23 2 primary_line bit (1), /* 2 user has primary-line privileges */ 1 24 2 nobump bit (1), /* 2 user cannot be bumped */ 1 25 2 guaranteed_login bit (1), /* 4 user has guaranteed login privileges */ 1 26 2 anonymous bit (1), /* 5 used only in SAT. project may have anon.users */ 1 27 2 nopreempt bit (1), /* 6 used only in PDT. user not preemptable by others 1 28* . of same project (distinct from "nobump") */ 1 29 2 nolist bit (1), /* 7 don't list user on "who" */ 1 30 2 dialok bit (1), /* 8 user may have multiple consoles */ 1 31 2 multip bit (1), /* 9 user may have several processes */ 1 32 2 bumping bit (1), /* 10 in SAT. Can users in project bump each other? */ 1 33 2 brief bit (1), /* 11 no login or logout message */ 1 34 2 vinitproc bit (1), /* 12 user may change initial procedure */ 1 35 2 vhomedir bit (1), /* 13 user may change homedir */ 1 36 2 nostartup bit (1), /* 14 user does not want start_up.ec */ 1 37 2 sb_ok bit (1), /* 15 user may be standby */ 1 38 2 pm_ok bit (1), /* 16 user may be primary */ 1 39 2 eo_ok bit (1), /* 17 user may be edit_only */ 1 40 2 daemon bit (1), /* 18 user may login as daemon */ 1 41 2 vdim bit (1), /* 19 * OBSOLETE * user may change outer mdle */ 1 42 2 no_warning bit (1), /* 20 no warning message */ 1 43 2 igroup bit (1), /* 21 in SAT: this project may give its users individual groups 1 44* . in PDT: this user has an individual load control group */ 1 45 2 save_pdir bit (1), /* 22 save pdir after fatal process error */ 1 46 2 disconnect_ok bit (1), /* 23 ok to save user's disconnected processes */ 1 47 2 save_on_disconnect bit (1), /* 24 save them unless -nosave login arg is given */ 1 48 2 pad bit (12)) unaligned; 1 49 1 50 dcl USER_ATTRIBUTE_NAMES (0:24) char (20) int static options (constant) init 1 51 ("none", /* 0 */ 1 52 "administrator", /* 1 */ 1 53 "primary_line", /* 2 */ 1 54 "nobump", /* 3 */ 1 55 "guaranteed_login", /* 4 */ 1 56 "anonymous", /* 5 */ 1 57 "nopreempt", /* 6 */ 1 58 "nolist", /* 7 */ 1 59 "dialok", /* 8 */ 1 60 "multip", /* 9 */ 1 61 "bumping", /* 10 */ 1 62 "brief", /* 11 */ 1 63 "vinitproc", /* 12 */ 1 64 "vhomedir", /* 13 */ 1 65 "nostartup", /* 14 */ 1 66 "no_secondary", /* 15 */ 1 67 "no_prime", /* 16 */ 1 68 "no_eo", /* 17 */ 1 69 "daemon", /* 18 */ 1 70 "", /* 19 vdim OBSOLETE */ 1 71 "no_warning", /* 20 */ 1 72 "igroup", /* 21 */ 1 73 "save_pdir", /* 22 */ 1 74 "disconnect_ok", /* 23 */ 1 75 "save_on_disconnect"); /* 24 */ 1 76 1 77 dcl ALT_USER_ATTRIBUTE_NAMES (0:24) char (20) int static options (constant) init 1 78 ("null", /* 0 */ 1 79 "admin", /* 1 */ 1 80 "", "", /* 2 - 3 */ 1 81 "guar", /* 4 */ 1 82 "anon", /* 5 */ 1 83 "", "", /* 6 - 7 */ 1 84 "dial", /* 8 */ 1 85 "multi_login", /* 9 */ 1 86 "preempting", /* 10 */ 1 87 "", /* 11 */ 1 88 "v_process_overseer", /* 12 */ 1 89 "v_home_dir", /* 13 */ 1 90 "no_start_up", /* 14 */ 1 91 "no_sec", /* 15 */ 1 92 "no_primary", /* 16 */ 1 93 "no_edit_only", /* 17 */ 1 94 "op_login", /* 18 */ 1 95 "", /* 19 */ 1 96 "nowarn", /* 20 */ 1 97 "", "", "", /* 21 - 23 */ 1 98 "save"); /* 24 */ 1 99 1 100 dcl USER_ATTRIBUTES_always_allowed bit (36) aligned int static 1 101 options(constant) init("000000000010000000010000000000000000"b); 1 102 /* SAT/PDT attributes not needed for user to give (brief, no_warning) */ 1 103 1 104 dcl USER_ATTRIBUTES_default_in_pdt bit (36) aligned int static 1 105 options(constant) init("000000000010000000010000000000000000"b); 1 106 /* PDT value for (brief, no_warning) is default */ 1 107 1 108 dcl USER_ATTRIBUTES_settable_by_user bit (36) aligned int static 1 109 options(constant) init("000100000110010000010000000000000000"b); 1 110 /* user MIGHT set (bump, ns, brief, guar, no_warning) */ 1 111 2 1 /* BEGIN INCLUDE FILE ... user_abs_attributes.incl.pl1 */ 2 2 2 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 4 /* */ 2 5 /* This include file describes the attributes of an absentee job. It is */ 2 6 /* used by user_table_entry.incl.pl1, abs_message_format.incl.pl1 */ 2 7 /* and PIT.incl.pl1. */ 2 8 /* */ 2 9 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 10 2 11 /****^ HISTORY COMMENTS: 2 12* 1) change(86-12-08,GDixon), approve(87-07-13,MCR7741), 2 13* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 2 14* Separated abs_attributes from the request structure 2 15* (abs_message_format.incl.pl1) so that the identical structure could be 2 16* used in the ute structure (user_table_entry.incl.pl1). 2 17* 2) change(87-04-19,GDixon), approve(87-07-13,MCR7741), 2 18* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 2 19* Added ABS_ATTRIBUTE_NAMES array. 2 20* 3) change(87-11-11,Parisek), approve(88-02-11,MCR7849), 2 21* audit(88-03-22,Lippard), install(88-07-13,MR12.2-1047): 2 22* Added the no_start_up flag. SCP6367 2 23* END HISTORY COMMENTS */ 2 24 2 25 dcl 1 user_abs_attributes aligned based, 2 26 2 restartable bit (1) unaligned, /* 1 if request may be started over from the beginning */ 2 27 2 user_deferred_until_time bit (1) unaligned, /* 1 if request was specified as deferred */ 2 28 2 proxy bit (1) unaligned, /* 1 if request submitted for someone else */ 2 29 2 set_bit_cnt bit (1) unaligned, /* 1 if should set bit count after every write call */ 2 30 2 time_in_gmt bit (1) unaligned, /* 1 if deferred_time is in GMT */ 2 31 2 user_deferred_indefinitely bit (1) unaligned, /* 1 if operator is to say when to run it */ 2 32 2 secondary_ok bit (1) unaligned, /* 1 if ok to log in as secondary foreground user */ 2 33 2 truncate_absout bit (1) unaligned, /* 1 if .absout is to be truncated */ 2 34 2 restarted bit (1) unaligned, /* 1 if job is restarted */ 2 35 2 no_start_up bit (1) unaligned, /* 1 if requested -ns */ 2 36 2 attributes_pad bit (26) unaligned; 2 37 2 38 dcl ABS_ATTRIBUTE_NAMES (10) char (28) varying int static options(constant) init( 2 39 "restartable", 2 40 "user_deferred_until_time", 2 41 "proxy", 2 42 "set_bit_cnt", 2 43 "time_in_gmt", 2 44 "user_deferred_indefinitely", 2 45 "secondary_ok", 2 46 "truncate_absout", 2 47 "restarted", 2 48 "no_start_up"); 2 49 2 50 /* END INCLUDE FILE ... user_abs_attributes.incl.pl1 */ 2 51 1 112 1 113 1 114 /* END INCLUDE FILE ... user_attributes.incl.pl1 */ 132 3 1 /* Requisition file declaration */ 3 2 /* Modified BIM 1984-07-10 for unaligned strings */ 3 3 /* Modified BIM 1984-09-14 foor 3000 size-array */ 3 4 3 5 dcl 1 reqfile based (qp) aligned, /* MIT accounting data */ 3 6 2 nacts fixed, 3 7 2 version fixed bin, 3 8 2 pad (6) bit (36) aligned, 3 9 2 reqfiletab (3000), /* one entry per Multics account */ 3 10 /* same size as projfile */ 3 11 3 acctid char (12) unal, /* account id. usually same as Proj */ 3 12 3 mitacct char (12) unal, /* MIT account no. */ 3 13 3 reqno char (12) unal, /* requisition or PO no. */ 3 14 3 qflag char (8), /* class & activity */ 3 15 3 procssd fixed bin, /* temp for usage report */ 3 16 3 qdn fixed bin (71), /* date on for account */ 3 17 3 qdf fixed bin (71), /* date off */ 3 18 3 billing_name char (32) unal, /* where to send bill */ 3 19 3 billing_addr char (32) unal, 3 20 3 chg_mo float bin (63), /* charges this month */ 3 21 3 chg_tr float bin (63), /* charges this req */ 3 22 3 req_amt float bin (63), /* req face value */ 3 23 3 cutoff fixed bin (71); /* term date for req */ 3 24 3 25 dcl loqh int static fixed bin (17) init (8), /* length of reqfile head */ 3 26 loqe int static fixed bin (17) init (40); /* lth of reqfile entry */ 3 27 3 28 declare REQFILE_VERSION fixed bin init (2) int static options (constant); 3 29 3 30 /* End include file reqfile.incl.pl1 */ 133 4 1 /* BEGIN INCLUDE FILE ... sat.incl.pl1 */ 4 2 4 3 4 4 4 5 4 6 /****^ HISTORY COMMENTS: 4 7* 1) change(86-09-05,Parisek), approve(87-06-17,MCR7570), 4 8* audit(87-06-15,Hirneisen), install(87-08-06,MR12.1-1066): 4 9* Expand comment line of project.state to include the renamed state (state = 4 10* 3). 4 11* END HISTORY COMMENTS */ 4 12 4 13 4 14 4 15 /* Modified 740723 by PG to add AIM info */ 4 16 /* Modified 750604 by T. Casey to add priority scheduler parameters */ 4 17 /* Modified May 1976 by T. Casey to add project cutoff limits */ 4 18 /* Modified May 1978 by T. Casey to add pdir_quota */ 4 19 /* Modified November 1978 by T. Casey to add max_(fore back)ground and abs_foreground_cpu_limit */ 4 20 /* Modified July 1979 by J. N. R. Barnecut to support multiple rate structures. (UNCA) */ 4 21 /* Modified January 1982 by E. N. Kittlitz for user_attributes.incl.pl1 changes */ 4 22 /* Modified 1984-07-05 BIM range of authorizations, version 3 */ 4 23 4 24 dcl (SAT_version init (3), /* version 2 of this declaration */ 4 25 4 26 SAT_header_lth init (466), /* length in words of SAT header */ 4 27 SAT_entry_lth init (80), /* length in words of SAT entry */ 4 28 4 29 SAT_project_name_length init (9) /* proper length of project.project_id */ 4 30 ) fixed bin internal static options (constant); 4 31 4 32 dcl 1 sat based (satp) aligned, 4 33 5 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 5 2 5 3 /* the "author" items must always be the first ones in the table. The 5 4* module which moves the converted table to the System Control process 5 5* fills in these data items and assumes them to be at the head of the segment 5 6* regardless of the specific table's actual declaration. The variables 5 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 5 8* respectively. For tables installed in multiple processes, these 5 9* are to be used to lock out multiple installations. */ 5 10 5 11 /* Lock should be used as a modification lock. Since, in general, 5 12* entries may not be moved in system tables, even by installations, 5 13* it is sufficient for only installers and programs that change threads 5 14* to set or respect the lock. Simply updating data in an entry 5 15* requires no such protection. 5 16* 5 17* Last_install_time is used by readers of system tables to detect 5 18* installations or other serious modifications. By checking it before 5 19* and after copying a block of data, they can be protected against 5 20* modifications. 5 21* 5 22* Modules that set the lock should save proc_group_id, and then 5 23* put their group id there for the time they hold the lock. 5 24* if they do not actually install the, they should restore the group id. 5 25**/ 5 26 5 27 2 author aligned, /* validation data about table's author */ 5 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 5 29 3 lock bit (36), /* installation lock */ 5 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 5 31 3 update_authorization bit (1) unal, /* update only authorizations */ 5 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 5 33 3 pad bit (33) unaligned, 5 34 3 last_install_time fixed bin (71), 5 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 5 36 3 w_dir char (64), /* author's working directory */ 5 37 5 38 /* END INCLUDE FILE author.incl.pl1 */ 4 34 4 35 2 max_size fixed bin, /* max number of entries table can grow */ 4 36 2 current_size fixed bin, /* current size of table (in entries) */ 4 37 2 version fixed bin, /* version number of table (word 32) */ 4 38 2 freep fixed bin, /* free chain ptr. 0 if no free entries */ 4 39 2 n_projects fixed bin, /* number of entries actually used */ 4 40 2 pad_was_max_users bit (36) aligned, 4 41 2 max_units fixed bin, /* maximum number of login-units per session */ 4 42 2 pad_was_max_prim bit (36) aligned, 4 43 2 uwt_size fixed bin, /* size of User Weight Table */ 4 44 2 uwt (24) aligned, /* User Weight Table */ 4 45 3 initproc char (64) unaligned, /* user's initial procedure */ 4 46 3 units fixed bin, /* weight of initial procedure */ 4 47 2 system_admin (2) char (32) unal, /* system administrator ID */ 4 48 2 pad1 (4) fixed bin, /* padding to 466 wds */ 4 49 2 project (3258), /* The SAT entries. 255K segment. */ 4 50 3 pad (80) fixed bin; /* each entry is 80 words long */ 4 51 4 52 4 53 dcl 1 project based (satep) aligned, /* declaration of a single SAT entry */ 4 54 2 state fixed bin, /* state 1 = normal, 0 = free, 2 = deleted, 3 = renamed */ 4 55 2 project_id char (12) unaligned, /* project's name */ 4 56 2 project_dir char (64) unaligned, /* project's directory */ 4 57 2 pdt_ptr pointer, /* pointer to current PDT */ 4 58 2 max_users fixed bin, /* maximum number of users from project */ 4 59 2 n_users fixed bin, /* current number */ 4 60 2 at like user_attributes aligned, /* include user_attributes.incl.pl1 */ 4 61 2 admin (4) aligned, /* list of project's administrators */ 4 62 3 userid char (30) unal, /* administrator's user-id (personid.projectid) */ 4 63 3 pad char (2) unal, 4 64 2 cutoff char (1), /* if project is cut off, why. */ 4 65 2 min_ring fixed bin, /* lowest ring for project */ 4 66 2 max_ring fixed bin, /* highest ring for project */ 4 67 2 alias char (8) unal, /* project alias */ 4 68 2 group char (8) unal, /* default group for this project */ 4 69 2 grace_max fixed bin, /* maximum bump grace */ 4 70 2 audit bit (36), /* audit flags for project */ 4 71 2 project_authorization (2) bit (72), /* authorization of this project */ 4 72 2 groups (2) char (8) unal, /* authorized groups for this project */ 4 73 2 days_to_cutoff fixed bin (17) unaligned, /* these figures are as of last running of daily_summary */ 4 74 2 pct_balance fixed bin (17) unaligned, /* they are used for warning message printing only */ 4 75 2 dollars_to_cutoff float bin, /* and are not to be taken as up-to-date figures */ 4 76 2 pdir_quota fixed bin (17) unaligned, /* max pdir quota allowed for project */ 4 77 2 max_foreground fixed bin (9) unsigned unaligned, /* max simultaneous foreground and background */ 4 78 2 max_background fixed bin (9) unsigned unaligned, /* processes that a user on this project can have */ 4 79 2 abs_foreground_cpu_limit fixed bin (17) unaligned, /* time limit on foreground absentee jobs */ 4 80 2 rs_number fixed bin (9) unsigned unaligned, /* rate structure number (0=default rates ) */ 4 81 2 satpad1 fixed bin (9) unsigned unaligned, 4 82 2 satpad (1) bit (36) aligned, /* pad to 80 words */ 4 83 2 chain fixed bin; /* if free entry, chain */ 4 84 4 85 /* END INCLUDE FILE ... sat.incl.pl1 */ 134 135 136 /* - - - - - - */ 137 138 nargs = 1; 139 getarg: call cu_$arg_ptr (nargs, ap, al, ec); 140 141 /* five optional arguments are permitted 142* . -warn - use only warning codes for projects which should be cutoff 143* . -nosat - don't put cutoff codes in the sat 144* . -nosum - don't print a sumry report 145* . -nocutr - don't print a cutrpt 146* . -noproj - output is sorted by account number instead of project id 147* */ 148 if ec = 0 then do; 149 nargs = nargs+1; 150 arg = argu; 151 if arg = "-warn" then warn = "1"b; 152 else if arg = "-nosat" then satlist = "0"b; 153 else if arg = "-nosum" then sum = "0"b; 154 else if arg = "-nocutr" then cutr = "0"b; 155 else if arg = "-noproj" then projord = "0"b; 156 else call com_err_ (error_table_$badopt, "daily_summary", """^a""", arg); 157 go to getarg; 158 end; 159 today = clock_ (); /* get date to put on reports */ 160 call date_time_ (today, date_string); 161 call system_info_$titles (coxx, dpxx, l1, l2); /* get installation id */ 162 dn = get_wdir_ (); /* get working directory */ 163 en = "reqfile"; /* Now get requisition file. */ 164 call hcs_$initiate (dn, en, "", 0, 1, qp, ec); /* Initiate reqfile. */ 165 if qp = null then do; 166 err: call com_err_ (ec, "daily_summary", en); 167 return; 168 end; 169 170 if satlist then do; /* initiate sat unless "nosat" arg given */ 171 en = "smf.cur.sat"; 172 call hcs_$initiate (dn, en, "", 0, 1, satp, ec); 173 if satp = null then go to err; 174 end; 175 176 if sum then do; /* print heading on sumry unless "nosum" arg given */ 177 call ioa_$ioa_stream (sumry, "^|^-^-^a^/", l1); /* heading on summary */ 178 call ioa_$ioa_stream (sumry, "^-^-^-^a^/", l2); 179 call ioa_$ioa_stream (sumry, l3, "billing summary", date_string); 180 call ioa_$ioa_stream (sumry, xl2a); 181 call ioa_$ioa_stream (sumry, xl2b, "Account no."); 182 call ioa_$ioa_stream (sumry, dashx); 183 end; 184 if cutr then do; /* print heading on cutrpt unless "nocutr" arg given */ 185 186 call ioa_$ioa_stream (cutrpt, "^|^-^-^a^/", l1); 187 call ioa_$ioa_stream (cutrpt, "^-^-^-^a^/", l2); 188 call ioa_$ioa_stream (cutrpt, l3, "overspent account summary", date_string); 189 call ioa_$ioa_stream (cutrpt, l4); 190 call ioa_$ioa_stream (cutrpt, l5); 191 call ioa_$ioa_stream (cutrpt, l6); 192 call ioa_$ioa_stream (cutrpt, l7); 193 call ioa_$ioa_stream (cutrpt, l8); 194 call ioa_$ioa_stream (cutrpt, l9); 195 call ioa_$ioa_stream (cutrpt, l10); 196 call ioa_$ioa_stream (cutrpt, l11); 197 call ioa_$ioa_stream (cutrpt, dashx1); 198 end; 199 200 m = reqfile.nacts; 201 begin; 202 203 204 dcl strings (m) char (32) aligned, 205 indices (m) fixed bin; 206 207 do i = 1 to m; 208 indices (i) = i; 209 strings (i) = reqfile.reqfiletab (i).acctid; 210 end; 211 if projord then call idsort_ (strings, indices, m); 212 do j = 1 to m; 213 i = indices (j); 214 if acctid (i) = " " then go to skipb; 215 cutoff_code = " "; 216 balance = 0e0; 217 pct_balance = 100; /* pct_balance=100 means req_amt=0 and there is no dollar limit */ 218 days_to_cutoff = 131071; 219 if mitacct (i) = "nonbill" then goto setsat; /* be sure users on nonbill projects 220* do not get cutoff warning messages */ 221 if reqfiletab.cutoff (i) < today then cutoff_code = "T"; /* has project past termination date */ 222 else if reqfiletab.cutoff (i) < today + (warn_days*oneday) then cutoff_code = "R"; 223 224 days_to_cutoff = 1 + divide (reqfiletab.cutoff (i) - today, oneday, 17, 0); /* truncate to next lower 225* whole day, and then add 1; 226* the message says "less than N days" */ 227 if req_amt (i) > 0e0 then do; /* there is no limit for req_amt=0 */ 228 balance = req_amt (i) - chg_tr (i) - chg_mo (i); /* get current balance for project */ 229 if balance < 0e0 then cutoff_code = "X"; /* account is overspent */ 230 else if balance < warn_amt then if cutoff_code ^= "T" then cutoff_code = "W"; 231 else; 232 else if balance < warn_pct * req_amt (i) then if cutoff_code ^= "T" then cutoff_code = "W"; 233 234 pct_balance = (balance*100e0) / req_amt (i); /* floating divide, then fix */ 235 236 end; 237 if warn then do; /* if "warn" arg given change severe codes to warn codes */ 238 if cutoff_code = "T" then cutoff_code = "S"; 239 else if cutoff_code = "X" then cutoff_code = "Y"; 240 end; 241 if cutoff_code = "X" then cut_count = cut_count + 1; 242 else if cutoff_code = "T" then cut_count = cut_count + 1; 243 else if cutoff_code ^= " " then warn_count = warn_count + 1; 244 245 if chg_mo (i) = 0e0 then go to skipp; /* ignore if zero charge */ 246 if sum then do; /* print sumry total unless "nosum" arg given */ 247 if req_amt (i) = 0e0 then do; /* Check for OPEN */ 248 rv, rb = open; 249 end; 250 else do; /* ... no */ 251 rv = cv_$mwvf (float (req_amt (i))); 252 rb = cv_$mwvf (float (balance)); 253 end; 254 call date_time_ (reqfile.cutoff (i), dtemp); 255 call ioa_$ioa_stream (sumry, xl3, acctid (i), mitacct (i), reqno (i), 256 cv_$mwvf (float (chg_mo (i))), rv, 257 cv_$mwvf (float (chg_mo (i) + chg_tr (i))), rb, dtemp, cutoff_code); 258 end; 259 260 skipp: total_month = total_month + chg_mo (i); 261 total_amt = total_amt + req_amt (i); 262 total_req = total_req + chg_mo (i) + chg_tr (i); 263 total_balance = total_balance + balance; 264 265 setsat: if satlist then do; /* put cutoff_code in sat unless "nosat" arg given */ 266 do isat = 1 to satp -> sat.current_size; /* locate corresponding sat entry */ 267 satep = addr (satp -> sat.project (isat)); 268 if project.state = 1 then if project.project_id = acctid (i) then do; 269 project.cutoff = cutoff_code; 270 /* copy figures used for printing of cutoff warning messages */ 271 project.days_to_cutoff = days_to_cutoff; /* into the sat entry for the project */ 272 project.dollars_to_cutoff = balance; 273 project.pct_balance = pct_balance; 274 275 go to print_cut; /* we found the project; now get out of the loop */ 276 end; 277 end; 278 if chg_mo (i) ^= 0e0 then /* error unless proj is dead */ 279 if qdf (i) = 0 then 280 call ioa_ ("daily_summary: project ""^a"" not in sat but req has charge $^.2f", 281 acctid (i), chg_mo (i)); 282 end; 283 print_cut: if cutr then do; /* print nonblank cutoff_codes unless "nocutr" arg given */ 284 if cutoff_code ^= " " then /* */ 285 if qdf (i) = 0 then /* only active projects */ 286 call ioa_$ioa_stream (cutrpt, "^/^2x^12a ^12a ^12a ^32a ^32a ^1a", 287 acctid (i), mitacct (i), reqno (i), billing_name (i), billing_addr (i), cutoff_code); 288 end; 289 skipb: end; 290 end; 291 if sum then do; /* print totals unles "nosum" arg given */ 292 call ioa_$ioa_stream (sumry, dashx); 293 call ioa_$ioa_stream (sumry, xl3, "", "", "", cv_$mwvf (total_month), cv_$mwvf (total_amt), 294 cv_$mwvf (total_req), cv_$mwvf (total_balance), "", ""); 295 end; 296 297 /* close all files */ 298 299 call ioa_ ("daily_summary: cut ^d, warned ^d, total $^.2f", cut_count, warn_count, total_month); 300 301 if satlist then call hcs_$terminate_noname (satp, ec); 302 call hcs_$terminate_noname (qp, ec); /* Terminate reqfile. */ 303 return; 304 305 end daily_summary; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/13/88 0941.0 daily_summary.pl1 >special_ldd>install>MR12.2-1047>daily_summary.pl1 132 1 08/06/87 0913.6 user_attributes.incl.pl1 >ldd>include>user_attributes.incl.pl1 1-112 2 07/13/88 0900.1 user_abs_attributes.incl.pl1 >special_ldd>install>MR12.2-1047>user_abs_attributes.incl.pl1 133 3 09/20/84 0925.7 reqfile.incl.pl1 >ldd>include>reqfile.incl.pl1 134 4 08/06/87 1416.6 sat.incl.pl1 >ldd>include>sat.incl.pl1 4-34 5 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.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. acctid 10 based char(12) array level 3 packed packed unaligned dcl 3-5 set ref 209 214 255* 268 278* 284* addr builtin function dcl 74 ref 267 al 000163 automatic fixed bin(17,0) dcl 36 set ref 139* 150 ap 000230 automatic pointer dcl 36 set ref 139* 150 arg 000234 automatic char(8) dcl 62 set ref 150* 151 152 153 154 155 156* argu based char packed unaligned dcl 62 ref 150 balance 000240 automatic float bin(63) dcl 62 set ref 216* 228* 229 230 232 234 252 252 263 272 billing_addr 40 based char(32) array level 3 packed packed unaligned dcl 3-5 set ref 284* billing_name 30 based char(32) array level 3 packed packed unaligned dcl 3-5 set ref 284* chg_mo 50 based float bin(63) array level 3 dcl 3-5 set ref 228 245 255 255 255 255 255 255 255 255 260 262 278 278* chg_tr 52 based float bin(63) array level 3 dcl 3-5 ref 228 255 255 255 255 262 clock_ 000466 constant entry external dcl 116 ref 159 com_err_ 000500 constant entry external dcl 116 ref 156 166 coxx 000216 automatic char(4) dcl 36 set ref 161* cu_$arg_ptr 000476 constant entry external dcl 116 ref 139 current_size 36 based fixed bin(17,0) level 2 dcl 4-32 ref 266 cut_count 000226 automatic fixed bin(17,0) initial dcl 36 set ref 36* 241* 241 242* 242 299* cutoff 71 based char(1) level 2 in structure "project" dcl 4-53 in procedure "daily_summary" set ref 269* cutoff 56 based fixed bin(71,0) array level 3 in structure "reqfile" dcl 3-5 in procedure "daily_summary" set ref 221 222 224 254* cutoff_code 000211 automatic char(1) initial dcl 36 set ref 36* 215* 221* 222* 229* 230 230* 232 232* 238 238* 239 239* 241 242 243 255* 269 284 284* cutr 000245 automatic bit(1) initial packed unaligned dcl 62 set ref 62* 154* 184 283 cutrpt 000020 internal static char(32) initial dcl 77 set ref 186* 187* 188* 189* 190* 191* 192* 193* 194* 195* 196* 197* 284* cv_$mwvf 000470 constant entry external dcl 116 ref 251 252 255 255 255 255 293 293 293 293 293 293 293 293 dashx 000412 internal static char(120) initial dcl 83 set ref 182* 292* dashx1 000260 internal static char(90) initial dcl 83 set ref 197* date_string 000220 automatic char(24) dcl 36 set ref 160* 179* 188* date_time_ 000464 constant entry external dcl 116 ref 160 254 days_to_cutoff 000247 automatic fixed bin(17,0) dcl 72 in procedure "daily_summary" set ref 218* 224* 271 days_to_cutoff 112 based fixed bin(17,0) level 2 in structure "project" packed packed unaligned dcl 4-53 in procedure "daily_summary" set ref 271* divide builtin function dcl 74 ref 224 dn 000100 automatic char(168) dcl 36 set ref 162* 164* 172* dollars_to_cutoff 113 based float bin(27) level 2 dcl 4-53 set ref 272* dpxx 000217 automatic char(4) dcl 36 set ref 161* dtemp 000170 automatic char(8) dcl 36 set ref 254* 255* ec 000162 automatic fixed bin(17,0) dcl 36 set ref 139* 148 164* 166* 172* 301* 302* en 000152 automatic char(32) dcl 36 set ref 163* 164* 166* 171* 172* error_table_$badopt 000450 external static fixed bin(17,0) dcl 79 set ref 156* float builtin function dcl 74 ref 251 251 252 252 255 255 255 255 255 255 255 255 get_wdir_ 000462 constant entry external dcl 116 ref 162 hcs_$initiate 000472 constant entry external dcl 116 ref 164 172 hcs_$terminate_noname 000474 constant entry external dcl 116 ref 301 302 i 000164 automatic fixed bin(17,0) dcl 36 set ref 207* 208 208 209 209* 213* 214 219 221 222 224 227 228 228 228 232 234 245 247 251 251 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 260 261 262 262 268 278 278 278 278 284 284 284 284 284 284 idsort_ 000456 constant entry external dcl 116 ref 211 indices 000100 automatic fixed bin(17,0) array dcl 204 set ref 208* 211* 213 ioa_ 000452 constant entry external dcl 116 ref 278 299 ioa_$ioa_stream 000454 constant entry external dcl 116 ref 177 178 179 180 181 182 186 187 188 189 190 191 192 193 194 195 196 197 255 284 292 293 isat 000210 automatic fixed bin(17,0) dcl 36 set ref 266* 267* j 000165 automatic fixed bin(17,0) dcl 36 set ref 212* 213* l1 000251 automatic char(120) dcl 83 set ref 161* 177* 186* l10 000207 internal static char(70) initial dcl 83 set ref 195* l11 000231 internal static char(90) initial dcl 83 set ref 196* l2 000307 automatic char(120) dcl 83 set ref 161* 178* 187* l3 000030 internal static char(48) initial dcl 83 set ref 179* 188* l4 000044 internal static char(60) initial dcl 83 set ref 189* l5 000063 internal static char(60) initial dcl 83 set ref 190* l6 000102 internal static char(60) initial dcl 83 set ref 191* l7 000121 internal static char(70) initial dcl 83 set ref 192* l8 000143 internal static char(70) initial dcl 83 set ref 193* l9 000165 internal static char(70) initial dcl 83 set ref 194* m 000166 automatic fixed bin(17,0) dcl 36 set ref 200* 204 204 207 211* 212 mitacct 13 based char(12) array level 3 packed packed unaligned dcl 3-5 set ref 219 255* 284* nacts based fixed bin(17,0) level 2 dcl 3-5 ref 200 nargs 000236 automatic fixed bin(17,0) dcl 62 set ref 138* 139* 149* 149 null builtin function dcl 74 ref 165 173 oneday 000000 constant fixed bin(71,0) initial dcl 36 ref 222 224 open 000003 constant char(15) initial dcl 36 ref 248 pct_balance 112(18) based fixed bin(17,0) level 2 in structure "project" packed packed unaligned dcl 4-53 in procedure "daily_summary" set ref 273* pct_balance 000250 automatic fixed bin(17,0) dcl 72 in procedure "daily_summary" set ref 217* 234* 273 project based structure level 1 dcl 4-53 in procedure "daily_summary" project 722 based structure array level 2 in structure "sat" dcl 4-32 in procedure "daily_summary" set ref 267 project_id 1 based char(12) level 2 packed packed unaligned dcl 4-53 ref 268 projord 000244 automatic bit(1) initial dcl 62 set ref 62* 155* 211 qdf 26 based fixed bin(71,0) array level 3 dcl 3-5 ref 278 284 qp 000232 automatic pointer dcl 36 set ref 164* 165 200 209 214 219 221 222 224 227 228 228 228 232 234 245 247 251 251 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 260 261 262 262 268 278 278 278 278 284 284 284 284 284 284 302* rb 000176 automatic char(15) dcl 36 set ref 248* 252* 255* req_amt 54 based float bin(63) array level 3 dcl 3-5 ref 227 228 232 234 247 251 251 261 reqfile based structure level 1 dcl 3-5 reqfiletab 10 based structure array level 2 dcl 3-5 reqno 16 based char(12) array level 3 packed packed unaligned dcl 3-5 set ref 255* 284* rv 000172 automatic char(15) dcl 36 set ref 248* 251* 255* sat based structure level 1 dcl 4-32 satep 000214 automatic pointer dcl 36 set ref 267* 268 268 269 271 272 273 satlist 000246 automatic bit(1) initial packed unaligned dcl 62 set ref 62* 152* 170 265 301 satp 000212 automatic pointer dcl 36 set ref 172* 173 266 267 301* state based fixed bin(17,0) level 2 dcl 4-53 ref 268 strings 000100 automatic char(32) array dcl 204 set ref 209* 211* sum 000243 automatic bit(1) initial packed unaligned dcl 62 set ref 62* 153* 176 246 291 sumry 000010 internal static char(32) initial dcl 76 set ref 177* 178* 179* 180* 181* 182* 255* 292* 293* system_info_$titles 000460 constant entry external dcl 116 ref 161 today 000206 automatic fixed bin(71,0) dcl 36 set ref 159* 160* 221 222 224 total_amt 000203 automatic float bin(27) initial dcl 36 set ref 36* 261* 261 293* 293* total_balance 000205 automatic float bin(27) initial dcl 36 set ref 36* 263* 263 293* 293* total_month 000202 automatic float bin(27) initial dcl 36 set ref 36* 260* 260 293* 293* 299* total_req 000204 automatic float bin(27) initial dcl 36 set ref 36* 262* 262 293* 293* user_attributes based structure level 1 dcl 1-21 warn 000242 automatic bit(1) initial packed unaligned dcl 62 set ref 62* 151* 237 warn_amt constant float bin(27) initial dcl 36 ref 230 warn_count 000227 automatic fixed bin(17,0) initial dcl 36 set ref 36* 243* 243 299* warn_days constant fixed bin(17,0) initial dcl 36 ref 222 warn_pct 000002 constant float bin(27) initial dcl 36 ref 232 xl2a 000307 internal static char(98) initial dcl 83 set ref 180* xl2b 000340 internal static char(93) initial dcl 83 set ref 181* xl3 000370 internal static char(72) initial dcl 83 set ref 255* 293* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ABS_ATTRIBUTE_NAMES internal static varying char(28) initial array dcl 2-38 ALT_USER_ATTRIBUTE_NAMES internal static char(20) initial array packed unaligned dcl 1-77 REQFILE_VERSION internal static fixed bin(17,0) initial dcl 3-28 SAT_entry_lth internal static fixed bin(17,0) initial dcl 4-24 SAT_header_lth internal static fixed bin(17,0) initial dcl 4-24 SAT_project_name_length internal static fixed bin(17,0) initial dcl 4-24 SAT_version internal static fixed bin(17,0) initial dcl 4-24 USER_ATTRIBUTES_always_allowed internal static bit(36) initial dcl 1-100 USER_ATTRIBUTES_default_in_pdt internal static bit(36) initial dcl 1-104 USER_ATTRIBUTES_settable_by_user internal static bit(36) initial dcl 1-108 USER_ATTRIBUTE_NAMES internal static char(20) initial array packed unaligned dcl 1-50 expand_path_ 000000 constant entry external dcl 116 fixed builtin function dcl 74 loqe internal static fixed bin(17,0) initial dcl 3-25 loqh internal static fixed bin(17,0) initial dcl 3-25 mod builtin function dcl 74 p automatic pointer dcl 36 substr builtin function dcl 74 user_abs_attributes based structure level 1 dcl 2-25 NAMES DECLARED BY EXPLICIT CONTEXT. daily_summary 000176 constant entry external dcl 16 err 000475 constant label dcl 166 ref 173 getarg 000224 constant label dcl 139 ref 157 print_cut 002113 constant label dcl 283 ref 275 setsat 002006 constant label dcl 265 ref 219 skipb 002176 constant label dcl 289 ref 214 skipp 001766 constant label dcl 260 ref 245 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2566 3270 2414 2576 Length 3622 2414 502 316 152 440 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME daily_summary 350 external procedure is an external procedure. begin block on line 201 158 begin block uses auto adjustable storage. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 sumry daily_summary 000020 cutrpt daily_summary 000030 l3 daily_summary 000044 l4 daily_summary 000063 l5 daily_summary 000102 l6 daily_summary 000121 l7 daily_summary 000143 l8 daily_summary 000165 l9 daily_summary 000207 l10 daily_summary 000231 l11 daily_summary 000260 dashx1 daily_summary 000307 xl2a daily_summary 000340 xl2b daily_summary 000370 xl3 daily_summary 000412 dashx daily_summary STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 201 000100 indices begin block on line 201 000100 strings begin block on line 201 daily_summary 000100 dn daily_summary 000152 en daily_summary 000162 ec daily_summary 000163 al daily_summary 000164 i daily_summary 000165 j daily_summary 000166 m daily_summary 000170 dtemp daily_summary 000172 rv daily_summary 000176 rb daily_summary 000202 total_month daily_summary 000203 total_amt daily_summary 000204 total_req daily_summary 000205 total_balance daily_summary 000206 today daily_summary 000210 isat daily_summary 000211 cutoff_code daily_summary 000212 satp daily_summary 000214 satep daily_summary 000216 coxx daily_summary 000217 dpxx daily_summary 000220 date_string daily_summary 000226 cut_count daily_summary 000227 warn_count daily_summary 000230 ap daily_summary 000232 qp daily_summary 000234 arg daily_summary 000236 nargs daily_summary 000240 balance daily_summary 000242 warn daily_summary 000243 sum daily_summary 000244 projord daily_summary 000245 cutr daily_summary 000246 satlist daily_summary 000247 days_to_cutoff daily_summary 000250 pct_balance daily_summary 000251 l1 daily_summary 000307 l2 daily_summary THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. enter_begin_block leave_begin_block call_ext_out_desc call_ext_out return_mac fl2_to_fx1 alloc_auto_adj mpfx2 ext_entry divide_fx4 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. clock_ com_err_ cu_$arg_ptr cv_$mwvf date_time_ get_wdir_ hcs_$initiate hcs_$terminate_noname idsort_ ioa_ ioa_$ioa_stream system_info_$titles THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 16 000175 36 000203 62 000214 138 000222 139 000224 148 000241 149 000243 150 000244 151 000251 152 000260 153 000266 154 000274 155 000302 156 000310 157 000343 159 000344 160 000353 161 000370 162 000413 163 000422 164 000425 165 000471 166 000475 167 000522 170 000523 171 000525 172 000530 173 000574 176 000600 177 000602 178 000627 179 000655 180 000706 181 000723 182 000750 184 000765 186 000767 187 001014 188 001042 189 001072 190 001107 191 001124 192 001141 193 001156 194 001173 195 001210 196 001225 197 001242 200 001257 201 001261 204 001264 211 001277 207 001317 208 001330 209 001332 210 001345 211 001347 212 001372 213 001404 214 001407 215 001416 216 001420 217 001423 218 001425 219 001427 221 001436 222 001445 224 001455 227 001464 228 001466 229 001471 230 001475 231 001506 232 001507 234 001521 237 001526 238 001530 239 001537 241 001543 242 001551 243 001555 245 001560 246 001562 247 001564 248 001566 249 001604 251 001605 252 001617 254 001633 255 001653 260 001766 261 001773 262 001777 263 002003 265 002006 266 002010 267 002022 268 002026 269 002041 271 002044 272 002047 273 002051 275 002053 277 002054 278 002056 283 002113 284 002116 289 002176 290 002201 291 002202 292 002204 293 002221 299 002337 301 002366 302 002401 303 002412 ----------------------------------------------------------- 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