COMPILATION LISTING OF SEGMENT xmail_validate_ Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 09/02/88 0753.1 mst Fri Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(88-06-29,Blair), approve(88-07-27,MCR7931), 17* audit(88-08-30,RBarstad), install(88-09-02,MR12.2-1098): 18* Call mail_system_$create_mailing_list_address to generate the address 19* rather than generating it ourselves with the "{list ...}" construct. This 20* will allow names with embedded blanks. 21* END HISTORY COMMENTS */ 22 23 24 xmail_validate_: proc (); 25 26 /* Author unknown 27* 28* 83-07-27 DJ Schimke: Modified to use new mail_system_ interfaces and 29* version 2 mailboxes. 30* 31* 83-09-14 DJ Schimke: Modified the call to hcs_$status_minf so a link to a 32* mailing list is considered a valid mailing list. TR12078 33**/ 34 35 /* Parameter */ 36 37 dcl P_addr_str char (*); 38 dcl P_code fixed bin (35); 39 dcl P_curr_msgsp ptr; 40 dcl P_mailbox_ptr ptr; 41 42 /* Automatic */ 43 44 dcl address_ptr ptr; 45 dcl addr_str char (200); 46 dcl bit_count fixed bin (24); 47 dcl code fixed bin (35); 48 dcl mailing_list bit (1) aligned; 49 dcl mlist_name char (32); 50 dcl type fixed bin (2); 51 52 /* Entries */ 53 54 dcl hcs_$status_minf entry (char (*), char (*), fixed bin (1), fixed bin (2), fixed bin (24), fixed bin (35)); 55 dcl mlsys_utils_$parse_address_text entry (char (*), ptr, fixed bin (35)); 56 dcl mail_system_$create_mailing_list_address entry (char (*), char (*), char (*), char (*) varying, char (*) varying, ptr, fixed bin (35)); 57 dcl mail_system_$free_address entry (ptr, fixed bin (35)); 58 dcl mail_system_$validate_address entry entry (ptr, bit (1) aligned, fixed bin (35)); 59 60 /* Constant */ 61 62 dcl CHASE fixed bin (1) init (1) int static options (constant); 63 dcl MLIST_SUFFIX char (4) init (".mls") int static options (constant); 64 dcl SEG fixed bin (2) init (1) int static options (constant); 65 dcl VALIDATE_LIST bit (1) aligned init ("1"b) int static options (constant); 66 67 /* External Static */ 68 69 dcl (error_table_$badcall, 70 error_table_$unimplemented_version, 71 error_table_$noaccess, 72 mlsys_et_$message_queued, 73 mlsys_et_$no_mailbox, 74 xmail_err_$bad_mailing_list, 75 xmail_err_$mailing_list) fixed bin (35) ext; 76 77 /* Builtin */ 78 79 dcl (ltrim, null, rtrim) builtin; 80 81 mbx: entry (P_mailbox_ptr, P_code); 82 83 P_code = 0; 84 85 if P_mailbox_ptr = null 86 then do; 87 P_code = error_table_$badcall; 88 return; 89 end; 90 91 mailbox_ptr = P_mailbox_ptr; 92 93 if mailbox.version ^= MAILBOX_VERSION_2 94 then do; 95 P_code = error_table_$unimplemented_version; 96 return; 97 end; 98 99 return; /* mbx entry */ 100 101 curr_msgs: entry (P_curr_msgsp, P_code); 102 103 P_code = 0; 104 105 if P_curr_msgsp = null 106 then do; 107 P_code = error_table_$badcall; 108 return; 109 end; 110 111 curr_msgsp = P_curr_msgsp; 112 113 if curr_msgs.version ^= MSG_STRUCT_VERSION_1 114 then do; 115 P_code = error_table_$unimplemented_version; 116 return; 117 end; 118 119 return; /* curr_msgs entry */ 120 121 addr: entry (P_addr_str, P_code); 122 123 /* Important codes returned by this entry: 124* 125* 126* 0 -- P_addr_str is an address with 127* good syntax and is deliverable 128* xmail_err_$mailing_list -- P_addr_str specifies a valid 129* mailing list 130* mlsys_et_$invalid_address_syntax -- P_addr_str is an address with 131* invalid syntax 132* mlsys_et_$no_mailbox -- P_addr_str is an address with 133* good syntax, but is undeliverable 134* mlsys_et_$no_a_permission -- P_addr_str is an address with 135* good syntax but, is undeliverable 136* mlsys_et_$mte_not_found -- P_addr_str is good syntax for a 137* mail_table address, but no such 138* mail_table entry exists 139* */ 140 141 /* Is it a mailing list name? */ 142 143 mlist_name = ltrim (rtrim (P_addr_str)) || MLIST_SUFFIX; 144 call hcs_$status_minf ((xmail_data.mail_dir), mlist_name, CHASE, type, bit_count, code); 145 if code = 0 & type = SEG then do; 146 mailing_list = "1"b; 147 call mail_system_$create_mailing_list_address ((xmail_data.mail_dir), 148 mlist_name, "", "", "", address_ptr, code); 149 if code ^= 0 then do; 150 P_code = code; 151 goto EXIT; 152 end; 153 end; 154 else do; 155 mailing_list = "0"b; /* if code ^= 0 ignore and assume it's not a mailing_list */ 156 addr_str = P_addr_str; 157 call mlsys_utils_$parse_address_text (addr_str, address_ptr, code); 158 if code ^= 0 159 then do; 160 P_code = code; 161 goto EXIT; 162 end; 163 end; 164 165 /* If the syntax is ok, is there a corresponding mailbox? */ 166 /* For mailing_lists, are all addresses valid? */ 167 168 call mail_system_$validate_address (address_ptr, VALIDATE_LIST, code); 169 if code = 0 | code = mlsys_et_$message_queued 170 then P_code = 0; 171 else if code = error_table_$noaccess then P_code = mlsys_et_$no_mailbox; 172 else P_code = code; 173 174 EXIT: call mail_system_$free_address (address_ptr, (0));/* ignore error */ 175 176 if mailing_list then do; 177 if P_code = 0 then P_code = xmail_err_$mailing_list; 178 else P_code = xmail_err_$bad_mailing_list; 179 end; 180 return; /* addr entry */ 181 182 1 1 /* BEGIN INCLUDE FILE ... mlsys_mailbox.incl.pl1 */ 1 2 /* Created: April 1983 by G. Palter */ 1 3 1 4 /* Definition of a mailbox as used by the Multics Mail System */ 1 5 1 6 dcl 1 mailbox aligned based (mailbox_ptr), 1 7 2 version character (8) unaligned, 1 8 2 reserved bit (144), /* for exclusive use of the mail system */ 1 9 2 mailbox_address pointer, /* mail system address of this mailbox */ 1 10 2 mailbox_dirname character (168) unaligned, /* directory containing this mailbox */ 1 11 2 mailbox_ename character (32) unaligned, /* entry name of this mailbox (includes ".mbx") */ 1 12 2 mailbox_type fixed binary, /* type of mailbox (see below) */ 1 13 2 mode bit (36), /* user's effective extended access to this mailbox */ 1 14 2 flags, 1 15 3 salvaged bit (1) unaligned, /* ON => this mailbox has been salvaged since last open */ 1 16 3 reserved bit (35) unaligned, /* for exclusive use of the mail system */ 1 17 2 message_selection_mode fixed binary, /* types of messages read: all/ordinary/interactive */ 1 18 2 sender_selection_mode fixed binary, /* whose messages were read: all/own/not-own */ 1 19 2 message_reading_level fixed binary, /* how much of each message read: keys/messages */ 1 20 2 n_messages fixed binary, /* total # of messages in this mailbox structure */ 1 21 2 n_ordinary_messages fixed binary, /* ... # of ordinary messages here */ 1 22 2 n_interactive_messages fixed binary, /* ... # of interactive messages here */ 1 23 2 n_deleted_messages fixed binary, /* ... # of messages here marked for later deletion */ 1 24 2 messages (mailbox_n_messages refer (mailbox.n_messages)), 1 25 3 key bit (72), /* unique key to read this message if not already read */ 1 26 3 message_ptr pointer; /* -> the message structure */ 1 27 1 28 dcl MAILBOX_VERSION_2 character (8) static options (constant) initial ("mlsmbx02"); 1 29 1 30 dcl mailbox_ptr pointer; 1 31 1 32 dcl mailbox_n_messages fixed binary; /* for exclusive use of the mail system */ 1 33 1 34 1 35 /* Types of mailboxes distinguished by the mail system */ 1 36 1 37 dcl (USER_DEFAULT_MAILBOX initial (1), /* the user's default mailbox for receiving mail */ 1 38 USER_LOGBOX initial (2), /* the user's logbox */ 1 39 SAVEBOX initial (3), /* a savebox */ 1 40 OTHER_MAILBOX initial (4)) /* any other type of mailbox */ 1 41 fixed binary static options (constant); 1 42 1 43 /* END INCLUDE FILE ... mlsys_mailbox.incl.pl1 */ 183 184 2 1 /* Created 06/17/81 by Suzanne Krupp */ 2 2 2 3 dcl n_messages fixed bin; 2 4 dcl MSG_STRUCT_VERSION_1 fixed bin int static options(constant) init(1); 2 5 2 6 dcl curr_msgsp ptr; 2 7 2 8 dcl 1 curr_msgs based(curr_msgsp), 2 9 2 version fixed bin, 2 10 2 count fixed bin, 2 11 2 numbers (n_messages refer(curr_msgs.count)) fixed bin; 2 12 2 13 dcl nonexist_msgsp ptr; 2 14 2 15 dcl 1 nonexist_msgs based(nonexist_msgsp), 2 16 2 version fixed bin, 2 17 2 count fixed bin, 2 18 2 numbers (n_messages refer(nonexist_msgs.count)) fixed bin; 2 19 2 20 dcl msg_structp ptr; 2 21 2 22 dcl 1 msg_struct based(msg_structp), 2 23 2 version fixed bin, 2 24 2 count fixed bin, 2 25 2 numbers(n_messages refer(msg_struct.count)) fixed bin; 186 3 1 /* BEGIN INCLUDE FILE: xmail_data.incl.pl1 */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(85-12-20,Blair), approve(86-03-06,MCR7358), 3 6* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 3 7* Modified 03/15/85 by Joanne Backs adding confirm_print flag. 3 8* 2) change(85-12-20,LJAdams), approve(86-03-06,MCR7358), 3 9* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 3 10* Adding switch to indicate request for menu display came from general help. 3 11* This is so general help menu will be displayed in top screen. 3 12* 3) change(86-01-10,Blair), approve(86-03-06,MCR7358), 3 13* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 3 14* Add switch to indicate whether or not it is permissible to process mail 3 15* in other users' mailboxes (foreign_mailbox). 3 16* 4) change(86-01-13,Blair), approve(86-03-06,MCR7358), 3 17* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 3 18* Add bit to indicate whether or not this is a true cleanup condition. 3 19* 5) change(86-02-06,Blair), approve(86-03-06,MCR7358), 3 20* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 3 21* Rearrange to group all the bit flags together in one word with a pad. 3 22* 6) change(86-03-05,Blair), approve(86-03-05,MCR7358), 3 23* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 3 24* Change value_seg ptr to value_seg_pathname to avoid the situation where 3 25* you keep around a pointer to a structure which no longer exists. 3 26* 7) change(87-01-16,Blair), approve(87-02-05,MCR7618), 3 27* audit(87-04-15,RBarstad), install(87-04-26,MR12.1-1025): 3 28* Add a field to indicate whether or not we should process interactive msgs. 3 29* Increment version to 4.1 so default value will get set. 3 30* 8) change(87-02-13,Blair), approve(87-02-13,MCR7618), 3 31* audit(87-04-15,RBarstad), install(87-04-26,MR12.1-1025): 3 32* Add a field to indicate whether or not we're processing a reply so that we 3 33* will be able to rebuild the screens properly after a disconnect occurs. 3 34* Error_list #114. 3 35* 9) change(88-07-26,Blair), approve(88-07-26,MCR7959), 3 36* audit(88-08-25,RBarstad), install(88-09-02,MR12.2-1098): 3 37* Add a bit to indicate whether or not the error segment had to be created 3 38* in the pdir (because we didn't have sma access to the mlsys_dir). 3 39* END HISTORY COMMENTS */ 3 40 3 41 3 42 /* Written 5/13/81 by Paul H. Kyzivat */ 3 43 /* Modified 12/16/81 by S. Krupp to delete unused parts of structure 3 44* and to add n_fkeys_used */ 3 45 /* Modified 12/14/82 by Dave Schimke to make the xmail version a 10 character 3 46* varying string. */ 3 47 /* Modified 09/12/83 by Dave Schimke adding interactive_msgs flag */ 3 48 /* Modified 09/14/83 by Dave Schimke adding moved_user_io */ 3 49 /* Modified 09/06/84 by Joanne Backs adding lists_as_menus flag */ 3 50 /* Modified 09/21/84 by Joanne Backs adding remove_menus flag */ 3 51 3 52 dcl xmail_data_ptr external static ptr init (null); 3 53 3 54 dcl 1 xmail_data aligned based (xmail_data_ptr), 3 55 2 mail_dir char (168) varying, 3 56 2 first_label label, 3 57 2 quit_label label, 3 58 2 value_seg_pathname char (168) varying, 3 59 2 moved_user_io ptr, 3 60 2 normal_usage char (80) unal, 3 61 2 function_key_info, 3 62 3 function_key_data_ptr ptr, 3 63 3 n_fkeys_used fixed bin, 3 64 2 actee, 3 65 3 person char(32) varying, 3 66 3 project char(32) varying, 3 67 2 flags aligned, 3 68 3 mail_in_incoming bit (1) unal, 3 69 3 lists_as_menus bit (1) unal, /* personalization */ 3 70 3 remove_menus bit (1) unal, /* personalization */ 3 71 3 confirm_print bit (1) unal, /* personalization */ 3 72 3 multics_mode bit (1) unal, /* personalization */ 3 73 3 interactive_msgs bit (1) unal, /* personalization */ 3 74 3 foreign_mailbox bit (1) unal, /* read others' mailboxes */ 3 75 3 general_help bit (1) unal, /* indicated requesting gen help*/ 3 76 3 cleanup_signalled bit (1) unal, /* on when true cleanup condition */ 3 77 3 msgs_as_mail bit (1) unal, /* on for include_msgs */ 3 78 3 reply_request bit (1) unal, /* on if we're doing a reply */ 3 79 3 error_seg_in_pdir bit (1) unal, /* on if the error_seg is in the pdir */ 3 80 3 pad bit (24) unal; 3 81 3 82 3 83 3 84 dcl xmail_version char(10) var static options(constant) init("4.1"); 3 85 3 86 /* END INCLUDE FILE: xmail_data.incl.pl1 */ 187 188 189 end xmail_validate_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/02/88 0736.1 xmail_validate_.pl1 >spec>install>MR12.2-1098>xmail_validate_.pl1 183 1 10/27/83 2104.2 mlsys_mailbox.incl.pl1 >ldd>include>mlsys_mailbox.incl.pl1 185 2 06/08/82 1329.4 xmail_curr_msg_info.incl.pl1 >ldd>include>xmail_curr_msg_info.incl.pl1 187 3 09/02/88 0743.4 xmail_data.incl.pl1 >spec>install>MR12.2-1098>xmail_data.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. CHASE 000016 constant fixed bin(1,0) initial dcl 62 set ref 144* MAILBOX_VERSION_2 000000 constant char(8) initial packed unaligned dcl 1-28 ref 93 MLIST_SUFFIX 000002 constant char(4) initial packed unaligned dcl 63 ref 143 MSG_STRUCT_VERSION_1 constant fixed bin(17,0) initial dcl 2-4 ref 113 P_addr_str parameter char packed unaligned dcl 37 ref 121 143 156 P_code parameter fixed bin(35,0) dcl 38 set ref 81 83* 87* 95* 101 103* 107* 115* 121 150* 160* 169* 171* 172* 177 177* 178* P_curr_msgsp parameter pointer dcl 39 ref 101 105 111 P_mailbox_ptr parameter pointer dcl 40 ref 81 85 91 SEG constant fixed bin(2,0) initial dcl 64 ref 145 VALIDATE_LIST 000005 constant bit(1) initial dcl 65 set ref 168* addr_str 000102 automatic char(200) packed unaligned dcl 45 set ref 156* 157* address_ptr 000100 automatic pointer dcl 44 set ref 147* 157* 168* 174* bit_count 000164 automatic fixed bin(24,0) dcl 46 set ref 144* code 000165 automatic fixed bin(35,0) dcl 47 set ref 144* 145 147* 149 150 157* 158 160 168* 169 169 171 172 curr_msgs based structure level 1 unaligned dcl 2-8 curr_msgsp 000202 automatic pointer dcl 2-6 set ref 111* 113 error_table_$badcall 000022 external static fixed bin(35,0) dcl 69 ref 87 107 error_table_$noaccess 000026 external static fixed bin(35,0) dcl 69 ref 171 error_table_$unimplemented_version 000024 external static fixed bin(35,0) dcl 69 ref 95 115 hcs_$status_minf 000010 constant entry external dcl 54 ref 144 ltrim builtin function dcl 79 ref 143 mail_dir based varying char(168) level 2 dcl 3-54 ref 144 147 mail_system_$create_mailing_list_address 000014 constant entry external dcl 56 ref 147 mail_system_$free_address 000016 constant entry external dcl 57 ref 174 mail_system_$validate_address 000020 constant entry external dcl 58 ref 168 mailbox based structure level 1 dcl 1-6 mailbox_ptr 000200 automatic pointer dcl 1-30 set ref 91* 93 mailing_list 000166 automatic bit(1) dcl 48 set ref 146* 155* 176 mlist_name 000167 automatic char(32) packed unaligned dcl 49 set ref 143* 144* 147* mlsys_et_$message_queued 000030 external static fixed bin(35,0) dcl 69 ref 169 mlsys_et_$no_mailbox 000032 external static fixed bin(35,0) dcl 69 ref 171 mlsys_utils_$parse_address_text 000012 constant entry external dcl 55 ref 157 null builtin function dcl 79 ref 85 105 rtrim builtin function dcl 79 ref 143 type 000177 automatic fixed bin(2,0) dcl 50 set ref 144* 145 version based fixed bin(17,0) level 2 in structure "curr_msgs" dcl 2-8 in procedure "xmail_validate_" ref 113 version based char(8) level 2 in structure "mailbox" packed packed unaligned dcl 1-6 in procedure "xmail_validate_" ref 93 xmail_data based structure level 1 dcl 3-54 xmail_data_ptr 000040 external static pointer initial dcl 3-52 ref 144 147 xmail_err_$bad_mailing_list 000034 external static fixed bin(35,0) dcl 69 ref 178 xmail_err_$mailing_list 000036 external static fixed bin(35,0) dcl 69 ref 177 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. OTHER_MAILBOX internal static fixed bin(17,0) initial dcl 1-37 SAVEBOX internal static fixed bin(17,0) initial dcl 1-37 USER_DEFAULT_MAILBOX internal static fixed bin(17,0) initial dcl 1-37 USER_LOGBOX internal static fixed bin(17,0) initial dcl 1-37 mailbox_n_messages automatic fixed bin(17,0) dcl 1-32 msg_struct based structure level 1 unaligned dcl 2-22 msg_structp automatic pointer dcl 2-20 n_messages automatic fixed bin(17,0) dcl 2-3 nonexist_msgs based structure level 1 unaligned dcl 2-15 nonexist_msgsp automatic pointer dcl 2-13 xmail_version internal static varying char(10) initial dcl 3-84 NAMES DECLARED BY EXPLICIT CONTEXT. EXIT 000442 constant label dcl 174 ref 151 161 addr 000126 constant entry external dcl 121 curr_msgs 000070 constant entry external dcl 101 mbx 000035 constant entry external dcl 81 xmail_validate_ 000023 constant entry external dcl 24 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 724 766 471 734 Length 1240 471 42 236 232 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME xmail_validate_ 196 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME xmail_validate_ 000100 address_ptr xmail_validate_ 000102 addr_str xmail_validate_ 000164 bit_count xmail_validate_ 000165 code xmail_validate_ 000166 mailing_list xmail_validate_ 000167 mlist_name xmail_validate_ 000177 type xmail_validate_ 000200 mailbox_ptr xmail_validate_ 000202 curr_msgsp xmail_validate_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out return_mac shorten_stack ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. hcs_$status_minf mail_system_$create_mailing_list_address mail_system_$free_address mail_system_$validate_address mlsys_utils_$parse_address_text THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badcall error_table_$noaccess error_table_$unimplemented_version mlsys_et_$message_queued mlsys_et_$no_mailbox xmail_data_ptr xmail_err_$bad_mailing_list xmail_err_$mailing_list LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 24 000022 81 000030 83 000042 85 000044 87 000050 88 000052 91 000053 93 000056 95 000062 96 000064 99 000065 101 000066 103 000075 105 000077 107 000103 108 000106 111 000107 113 000112 115 000115 116 000120 119 000121 121 000122 143 000141 144 000207 145 000257 146 000265 147 000267 149 000343 150 000346 151 000350 153 000351 155 000352 156 000353 157 000361 158 000402 160 000404 161 000406 168 000407 169 000422 171 000432 172 000440 174 000442 176 000454 177 000456 178 000465 180 000470 ----------------------------------------------------------- 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