COMPILATION LISTING OF SEGMENT create_mail_table Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 03/13/85 1109.9 mst Wed Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* format: style2,ifthenstmt,ifthendo,ifthen,^indnoniterdo,indcomtxt,^inditerdo,idind22 */ 8 9 /* create_mail_table: Used by privileged user (generally the 10* Initializer before the Ansewring Service is brought up) to create 11* the Mail Table and populate it with Mail Table entries for all 12* the Person_ids and aliases in the PNT. */ 13 14 /* Written: July 1983 by B. Margolin */ 15 /* Modified: November 1983 by B. Margolin to not hard-code the PNT pathname, 16* but to use the new entrypoint pnt_manager_$table_data. */ 17 /* Modified 1984-08-15 by E. Swenson for Ring-1 PNTs and Version 3 MSTBs. */ 18 19 create_mail_table: 20 proc options (variable); 21 22 /*** Automatic ***/ 23 24 dcl arg_count fixed bin; 25 dcl code fixed bin (35); 26 dcl 1 mte aligned like mail_table_entry; 27 dcl pnt_idx fixed bin (35); 28 dcl 1 pnt_mti aligned like ms_table_info; 29 dcl 1 pnte aligned like pnt_entry; 30 dcl sci_ptr ptr; 31 32 /*** Static ***/ 33 34 dcl ( 35 error_table_$bad_index, 36 error_table_$checksum_failure, 37 error_table_$id_already_exists, 38 error_table_$no_record, 39 error_table_$unimplemented_version 40 ) fixed bin (35) ext static; 41 dcl VERSION char (3) int static options (constant) init ("1.0"); 42 dcl WHOAMI char (17) int static options (constant) init ("create_mail_table"); 43 44 /*** Entries ***/ 45 46 dcl com_err_ entry () options (variable); 47 dcl ioa_ entry () options (variable); 48 dcl mail_table_priv_$add entry (ptr, bit (1), fixed bin (35)); 49 dcl mail_table_priv_$add_alias 50 entry (char (*), char (*), bit (1), fixed bin (35)); 51 dcl mail_table_priv_$create 52 entry (fixed bin, fixed bin (35)); 53 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 54 dcl pnt_manager_$get_abs_entry 55 entry (fixed bin (35), ptr, fixed bin (35)); 56 dcl pnt_manager_$table_data 57 entry (ptr, fixed bin (35), fixed bin (35)); 58 dcl ssu_$abort_line entry () options (variable); 59 dcl ssu_$arg_count entry (ptr, fixed bin); 60 dcl ssu_$destroy_invocation 61 entry (ptr); 62 dcl ssu_$print_message entry () options (variable); 63 dcl ssu_$standalone_invocation 64 entry (ptr, char (*), char (*), ptr, entry, fixed bin (35)); 65 66 /*** Misc ***/ 67 68 dcl cleanup condition; 69 dcl (addr, null, rtrim) builtin; 70 1 1 /* START OF: mail_table_entry.incl.pl1 * * * * * * * * * * * * * * * * */ 1 2 1 3 /* Written by B. Margolin - 7/4/83 */ 1 4 1 5 /* format: style2,ifthendo,ifthen,^indnoniterdo,indcomtxt,^inditerdo,idind22 */ 1 6 declare 1 mail_table_entry aligned based (mail_table_entry_ptr), 1 7 2 version char (8), 1 8 2 name char (32) varying, /* Person_id or entry name */ 1 9 2 acs_path, 1 10 3 dir char (168), 1 11 3 entry char (32), 1 12 2 default_project char (12) varying, 1 13 2 mailing_address char (256) varying; 1 14 1 15 declare mail_table_entry_ptr ptr; 1 16 declare MAIL_TABLE_ENTRY_VERSION_1 1 17 char (8) int static options (constant) init ("mte_0001"); 1 18 1 19 declare 1 mail_table_raw_entry 1 20 aligned based (mail_table_raw_entry_ptr), 1 21 2 version char (8), 1 22 2 name char (32) varying, 1 23 2 primary_name char (32) varying, /* for alias entries */ 1 24 2 flags, 1 25 3 alias_entry bit (1) unaligned, 1 26 3 registered_user bit (1) unaligned, /* In the PNT */ 1 27 3 mbz bit (34) unaligned, 1 28 2 n_names fixed bin, /* # names, including primary */ 1 29 2 next_name char (32) varying, /* Make a */ 1 30 2 prev_name char (32) varying, /* linked list */ 1 31 2 acs_path, 1 32 3 dir char (168), 1 33 3 entry char (32), 1 34 2 default_project char (12) varying, 1 35 2 mailing_address char (256) varying; 1 36 1 37 declare mail_table_raw_entry_ptr 1 38 ptr; 1 39 declare MAIL_TABLE_RAW_ENTRY_VERSION_1 1 40 char (8) int static options (constant) init ("mtre_001"); 1 41 1 42 declare 1 mail_table_aliases aligned based (mail_table_aliases_ptr), 1 43 2 version char (8), 1 44 2 n_names fixed bin, 1 45 2 names (mail_table_aliases_extent refer (mail_table_aliases.n_names)) char (32) varying; 1 46 1 47 declare mail_table_aliases_ptr 1 48 ptr; 1 49 declare mail_table_aliases_extent 1 50 fixed bin; 1 51 declare MAIL_TABLE_ALIASES_VERSION_1 1 52 int static options (constant) char (8) init ("mta_0001"); 1 53 1 54 /* END OF: mail_table_entry.incl.pl1 * * * * * * * * * * * * * * * * */ 71 72 2 1 /* Begin include file ms_table_info.incl.pl1 */ 2 2 /* Written by C. Hornig, June 1979 */ 2 3 /* Modified by B. Margolin, July 1983, for version 2 */ 2 4 /* Modified 1984-07-24 BIM for V3, improved hash, checksums */ 2 5 2 6 /* This information is passed to ms_table_mgr_$create when a multi-segment 2 7* table is created. */ 2 8 2 9 /* format: style3 */ 2 10 2 11 declare MS_TABLE_INFO_VERSION_3 2 12 fixed init (3) internal static options (constant); 2 13 2 14 declare 1 ms_table_info aligned based, 2 15 2 version fixed, /* Should be 3 */ 2 16 2 type character (32), /* what table is this? */ 2 17 2 ( 2 18 header_size, /* length of table header in words */ 2 19 entry_size 2 20 ) unsigned fixed (18), /* same for table entries */ 2 21 2 max_entries unsigned fixed bin (18), /* how many entries */ 2 22 2 max_size fixed bin (19), /* max segment length */ 2 23 2 keep_meters bit (1) aligned; /* table is writable to readers */ 2 24 2 25 /* End include file ms_table_info.incl.pl1 */ 73 74 3 1 /* BEGIN INCLUDE FILE ... pnt_entry.incl.pl1 */ 3 2 3 3 /* Modified 790702 by C. Hornig for MSF PNT */ 3 4 /* Modified 84-07-18 BIM for V2, aim ranges, long passwords. */ 3 5 /* Modified 84-09-25 for operator attribute... -E. A. Ranzenbach */ 3 6 /* Modified 85-03-05 E. Swenson for user_validated_time */ 3 7 3 8 /**** The ms_table_mgr_ has fixed sized entries, for now. 3 9* The presence of a version field and some pad allow 3 10* us to have incrementally-upgraded PNTE's in a future change. 3 11**/ 3 12 3 13 /**** The conversion to V2 copies the existing encrypted passwords. 3 14* Since the 32 character scrambling algorithm will not give the 3 15* same results, the short_XX flags indicate that the old scrambler 3 16* should be used. The short flags are automatically turned off 3 17* by calls to update the password with the long-scrambled form. */ 3 18 3 19 /* format: style4,insnl,delnl */ 3 20 3 21 declare pntep pointer automatic; 3 22 declare 1 pnt_entry based (pntep) aligned, /* declaration of a single PNT entry */ 3 23 2 version fixed bin, 3 24 2 private aligned, 3 25 3 pw_flags aligned, 3 26 4 short_pw bit (1) unal, /* ON password is eight-character form */ 3 27 4 short_network_pw bit (1) unal, /* ON card password is eight character form. */ 3 28 3 password character (32), /* person's password */ 3 29 3 network_password character (32), 3 30 2 public, 3 31 3 user_id character (32), /* user ID (for alias entries */ 3 32 3 alias character (8), 3 33 3 default_project character (16), /* user's default project */ 3 34 3 flags, /* one-bit flags */ 3 35 4 has_password bit (1) unaligned, 3 36 4 has_network_password bit (1) unaligned, 3 37 4 trap bit (1) unal, /* If this password is used, holler */ 3 38 4 lock bit (1) unal, /* prevent login if on. */ 3 39 4 nochange bit (1) unal, /* user cannot change password */ 3 40 4 must_change bit unal, /* user must change password at next login */ 3 41 4 pw_time_lock bit (1) unal, /* if password has a time lock */ 3 42 4 generate_pw bit (1) unal, /* ON if we give new pw, OFF lets user select new pw */ 3 43 4 last_bad_pw_reported bit (1) unal, /* ON if user has NOT been told about last bad password */ 3 44 4 operator bit (1) unal, /* ON if user can login as an operator... */ 3 45 4 pads bit (26) unal, 3 46 3 n_good_pw fixed bin, /* Number of good passwords */ 3 47 3 n_bad_pw fixed bin, /* Number of wrong passwords */ 3 48 3 n_bad_pw_since_good fixed bin, /* Number of wrong passwords since good */ 3 49 3 time_pw_changed fixed bin (71), /* When password was modified by user */ 3 50 3 51 3 time_last_good_pw fixed bin (71), 3 52 3 time_last_bad_pw fixed bin (71), /* When pw was last given wrong */ 3 53 3 bad_pw_term_id character (4), /* where bad password from */ 3 54 3 bad_pw_line_type fixed bin (17), /* ... */ 3 55 3 bad_pw_term_type character (32), 3 56 3 password_timelock fixed bin (71), /* Password is locked up until here */ 3 57 3 person_authorization (2) bit (72), /* authorization of this person */ 3 58 3 default_person_authorization bit (72), /* default authorization of this person */ 3 59 3 audit bit (36), /* audit flags for person */ 3 60 3 pad1 bit (36), /* pad to even word boundary */ 3 61 3 user_validated_time fixed bin (71), /* time this PNT entry was last validated by an administrator */ 3 62 2 pad (80 - 64) bit (36) aligned; 3 63 3 64 declare PNT_ENTRY_VERSION_2 fixed bin init (2) int static options (constant); 3 65 3 66 /* END INCLUDE FILE ... pnte.incl.pl1 */ 75 76 77 code = 0; 78 sci_ptr = null (); 79 on cleanup call cleanup_proc (); 80 call ssu_$standalone_invocation (sci_ptr, WHOAMI, VERSION, null (), abort_cmt, code); 81 if code ^= 0 then do; 82 call com_err_ (code, WHOAMI, "Error while creating standalone invocation."); 83 return; 84 end; 85 call ssu_$arg_count (sci_ptr, arg_count); 86 if arg_count > 0 then call ssu_$abort_line (sci_ptr, 0, "The create_mail_table command takes no arguments."); 87 /*** Find out the size of the PNT ***/ 88 call pnt_manager_$table_data (addr (pnt_mti), (0), code); 89 if code ^= 0 then call ssu_$abort_line (sci_ptr, code, "Error getting PNT size info."); 90 if pnt_mti.version ^= MS_TABLE_INFO_VERSION_3 then 91 call ssu_$abort_line (sci_ptr, error_table_$unimplemented_version, "The PNT is a version ^d MSTB.", 92 pnt_mti.version); 93 call mail_table_priv_$create ((pnt_mti.max_entries), code); 94 if code ^= 0 then call ssu_$abort_line (sci_ptr, code, "Error attempting to create the Mail Table MSTB."); 95 call ioa_ ("Created Mail Table with max_entries = ^d. Now copying info from PNT.", pnt_mti.max_entries); 96 mte.version = MAIL_TABLE_ENTRY_VERSION_1; 97 do pnt_idx = 1 repeat (pnt_idx + 1); 98 call pnt_manager_$get_abs_entry (pnt_idx, addr (pnte), code); 99 if code = 0 then call copy_entry (); 100 else if code = error_table_$bad_index then /* Went off the end */ goto DONE_COPYING; 101 else if code ^= error_table_$no_record & code ^= error_table_$checksum_failure then 102 /* Unused entry */ 103 call ssu_$abort_line (sci_ptr, code, "Error reading PNT entry #^d; copy aborted.", pnt_idx); 104 end; 105 DONE_COPYING: 106 call ioa_ ("PNT info copied into Mail Table."); 107 GLOBAL_EXIT: 108 call cleanup_proc (); 109 return; 110 111 abort_cmt: 112 proc (); 113 114 go to GLOBAL_EXIT; 115 116 end abort_cmt; 117 118 cleanup_proc: 119 proc (); 120 121 if sci_ptr ^= null () then call ssu_$destroy_invocation (sci_ptr); 122 return; 123 124 end cleanup_proc; 125 126 copy_entry: 127 proc (); 128 129 mte.name = rtrim (pnte.user_id); 130 mte.acs_path.entry, mte.acs_path.dir = ""; 131 mte.default_project = rtrim (pnte.default_project); 132 mte.mailing_address = ""; 133 call mail_table_priv_$add (addr (mte), "1"b, code); 134 if code ^= 0 then 135 if code = error_table_$id_already_exists then do; 136 call ssu_$print_message (sci_ptr, code, "Skipping PNT entry for ""^a"".", mte.name); 137 code = 0; 138 end; 139 else call ssu_$abort_line (sci_ptr, code, "Error copying PNT entry for ""^a"". PNT copy aborted.", 140 mte.name); 141 if pnte.alias ^= "" then do; /* Add the alias to the Mail Table */ 142 call mail_table_priv_$add_alias ((mte.name), rtrim (pnte.alias), "1"b, code); 143 if code ^= 0 then 144 if code = error_table_$id_already_exists then do; 145 call ssu_$print_message (sci_ptr, code, "Skipping adding alias ""^a"" to ""^a"".", 146 rtrim (pnte.alias), mte.name); 147 code = 0; 148 end; 149 else call ssu_$abort_line (sci_ptr, code, "Error adding alias ""^a"" to ""^a"". Aborting PNT copy.", 150 rtrim (pnte.alias), mte.name); 151 end; 152 return; 153 154 end copy_entry; 155 156 end create_mail_table; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/13/85 1015.0 create_mail_table.pl1 >spec>on>41-11>create_mail_table.pl1 71 1 10/27/83 2104.2 mail_table_entry.incl.pl1 >ldd>include>mail_table_entry.incl.pl1 73 2 12/07/84 1102.1 ms_table_info.incl.pl1 >ldd>include>ms_table_info.incl.pl1 75 3 03/12/85 1556.6 pnt_entry.incl.pl1 >spec>on>41-11>pnt_entry.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. MAIL_TABLE_ENTRY_VERSION_1 000000 constant char(8) initial unaligned dcl 1-16 ref 96 MS_TABLE_INFO_VERSION_3 constant fixed bin(17,0) initial dcl 2-11 ref 90 VERSION 000007 constant char(3) initial unaligned dcl 41 set ref 80* WHOAMI 000002 constant char(17) initial unaligned dcl 42 set ref 80* 82* acs_path 13 000102 automatic structure level 2 dcl 26 addr builtin function dcl 69 ref 88 88 98 98 133 133 alias 32 000324 automatic char(8) level 3 dcl 29 set ref 141 142 142 145 145 149 149 arg_count 000100 automatic fixed bin(17,0) dcl 24 set ref 85* 86 cleanup 000446 stack reference condition dcl 68 ref 79 code 000101 automatic fixed bin(35,0) dcl 25 set ref 77* 80* 81 82* 88* 89 89* 93* 94 94* 98* 99 100 101 101 101* 133* 134 134 136* 137* 139* 142* 143 143 145* 147* 149* com_err_ 000022 constant entry external dcl 46 ref 82 default_project 75 000102 automatic varying char(12) level 2 in structure "mte" dcl 26 in procedure "create_mail_table" set ref 131* default_project 34 000324 automatic char(16) level 3 in structure "pnte" dcl 29 in procedure "create_mail_table" set ref 131 dir 13 000102 automatic char(168) level 3 dcl 26 set ref 130* entry 65 000102 automatic char(32) level 3 dcl 26 set ref 130* error_table_$bad_index 000010 external static fixed bin(35,0) dcl 34 ref 100 error_table_$checksum_failure 000012 external static fixed bin(35,0) dcl 34 ref 101 error_table_$id_already_exists 000014 external static fixed bin(35,0) dcl 34 ref 134 143 error_table_$no_record 000016 external static fixed bin(35,0) dcl 34 ref 101 error_table_$unimplemented_version 000020 external static fixed bin(35,0) dcl 34 set ref 90* ioa_ 000024 constant entry external dcl 47 ref 95 105 mail_table_entry based structure level 1 dcl 1-6 mail_table_priv_$add 000026 constant entry external dcl 48 ref 133 mail_table_priv_$add_alias 000030 constant entry external dcl 49 ref 142 mail_table_priv_$create 000032 constant entry external dcl 51 ref 93 mailing_address 101 000102 automatic varying char(256) level 2 dcl 26 set ref 132* max_entries 13 000305 automatic fixed bin(18,0) level 2 unsigned dcl 28 set ref 93 95* ms_table_info based structure level 1 dcl 2-14 mte 000102 automatic structure level 1 dcl 26 set ref 133 133 name 2 000102 automatic varying char(32) level 2 dcl 26 set ref 129* 136* 139* 142 145* 149* null builtin function dcl 69 ref 78 80 80 121 pnt_entry based structure level 1 dcl 3-22 pnt_idx 000304 automatic fixed bin(35,0) dcl 27 set ref 97* 98* 101* 104* pnt_manager_$get_abs_entry 000034 constant entry external dcl 54 ref 98 pnt_manager_$table_data 000036 constant entry external dcl 56 ref 88 pnt_mti 000305 automatic structure level 1 dcl 28 set ref 88 88 pnte 000324 automatic structure level 1 dcl 29 set ref 98 98 public 22 000324 automatic structure level 2 dcl 29 rtrim builtin function dcl 69 ref 129 131 142 142 145 145 149 149 sci_ptr 000444 automatic pointer dcl 30 set ref 78* 80* 85* 86* 89* 90* 94* 101* 121 121* 136* 139* 145* 149* ssu_$abort_line 000040 constant entry external dcl 58 ref 86 89 90 94 101 139 149 ssu_$arg_count 000042 constant entry external dcl 59 ref 85 ssu_$destroy_invocation 000044 constant entry external dcl 60 ref 121 ssu_$print_message 000046 constant entry external dcl 62 ref 136 145 ssu_$standalone_invocation 000050 constant entry external dcl 63 ref 80 user_id 22 000324 automatic char(32) level 3 dcl 29 set ref 129 version 000305 automatic fixed bin(17,0) level 2 in structure "pnt_mti" dcl 28 in procedure "create_mail_table" set ref 90 90* version 000102 automatic char(8) level 2 in structure "mte" dcl 26 in procedure "create_mail_table" set ref 96* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. MAIL_TABLE_ALIASES_VERSION_1 internal static char(8) initial unaligned dcl 1-51 MAIL_TABLE_RAW_ENTRY_VERSION_1 internal static char(8) initial unaligned dcl 1-39 PNT_ENTRY_VERSION_2 internal static fixed bin(17,0) initial dcl 3-64 mail_table_aliases based structure level 1 dcl 1-42 mail_table_aliases_extent automatic fixed bin(17,0) dcl 1-49 mail_table_aliases_ptr automatic pointer dcl 1-47 mail_table_entry_ptr automatic pointer dcl 1-15 mail_table_raw_entry based structure level 1 dcl 1-19 mail_table_raw_entry_ptr automatic pointer dcl 1-37 pathname_ 000000 constant entry external dcl 53 pntep automatic pointer dcl 3-21 NAMES DECLARED BY EXPLICIT CONTEXT. DONE_COPYING 000677 constant label dcl 105 ref 100 GLOBAL_EXIT 000713 constant label dcl 107 ref 114 abort_cmt 000721 constant entry internal dcl 111 ref 80 80 cleanup_proc 000732 constant entry internal dcl 118 ref 79 107 copy_entry 000753 constant entry internal dcl 126 ref 99 create_mail_table 000245 constant entry external dcl 19 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1624 1676 1353 1634 Length 2154 1353 52 241 250 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME create_mail_table 428 external procedure is an external procedure. on unit on line 79 64 on unit abort_cmt 64 internal procedure is assigned to an entry variable. cleanup_proc 68 internal procedure is called by several nonquick procedures. copy_entry internal procedure shares stack frame of external procedure create_mail_table. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME create_mail_table 000100 arg_count create_mail_table 000101 code create_mail_table 000102 mte create_mail_table 000304 pnt_idx create_mail_table 000305 pnt_mti create_mail_table 000324 pnte create_mail_table 000444 sci_ptr create_mail_table THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs call_ext_out_desc call_ext_out call_int_this call_int_other return tra_ext enable shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ ioa_ mail_table_priv_$add mail_table_priv_$add_alias mail_table_priv_$create pnt_manager_$get_abs_entry pnt_manager_$table_data ssu_$abort_line ssu_$arg_count ssu_$destroy_invocation ssu_$print_message ssu_$standalone_invocation THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_index error_table_$checksum_failure error_table_$id_already_exists error_table_$no_record error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 19 000244 77 000252 78 000253 79 000255 80 000277 81 000340 82 000342 83 000366 85 000367 86 000400 88 000427 89 000445 90 000473 93 000526 94 000541 95 000567 96 000607 97 000611 98 000614 99 000631 100 000635 101 000640 104 000672 105 000677 107 000713 109 000717 111 000720 114 000726 118 000731 121 000737 122 000752 126 000753 129 000754 130 000774 131 001002 132 001022 133 001023 134 001042 136 001047 137 001076 138 001077 139 001100 141 001127 142 001133 143 001212 145 001220 147 001273 148 001275 149 001276 151 001351 152 001352 ----------------------------------------------------------- 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