COMPILATION LISTING OF SEGMENT create_data_segment Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Adv Computing Technology Centre Compiled on: 05/18/90 1154.7 mdt Fri Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1990 * 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 16 /****^ HISTORY COMMENTS: 17* 1) change(90-04-23,Huen), approve(90-04-23,MCR8156), audit(90-04-27,Gray), 18* install(90-05-17,MR12.4-1009): 19* lang_11: Use cv_entry to find the segment so that cds will work even when 20* the working dir is not in the search rules. 21* 2) change(90-05-18,Huen), approve(90-05-18,MCR8156), audit(90-05-18,Gray), 22* install(90-05-18,MR12.4-1010): 23* Post bug fix (lang_11) : to avoid passing an entryname to pathname_ that 24* exceeds 32 characters. 25* END HISTORY COMMENTS */ 26 27 28 29 /* This program is a command interface to the create_data_segment_ subroutine. 30* It creates a link in the process directory named .pl1 to the 31* segment .cds in the working directory and calls the PL/I 32* compiler to compile the program. The compiler is invoked with the -table 33* control argument. If the -list create_data_segment control argument is 34* specified, the name .list (same as above) is 35* added to the entry .list so the listing segment is created 36* appropriately, and the compiler is invoked with the -map control argument. 37* 38* The format of a CDS source segment is a PL/I program with a call to the 39* create_data_segment_ subroutine. The name given to the create_data_segment 40* command is the entry point used to call the program. The argument passed 41* to create_data_segment_ internally as the name of the segment to be created 42* should be this same name to preserve Multics conventions on names of 43* created object segments. 44* 45* Initial coding: 11/20/75 by S. Webber 46* Bug with ".cds" names fixed 07/30/76 by B. Greenberg 47* MCR 3343 -- Error message bug fixed 19 July 1978 by M. Davidoff. 48* Modified 27 February 1981 by M. N. Davidoff to fix bug in which random 49* names are added to the working directory if -list is not specified. 50**/ 51 /* format: style2 */ 52 create_data_segment: 53 cds: 54 procedure options (variable); 55 56 /* automatic */ 57 58 dcl arg_count fixed bin; 59 dcl argument_no fixed bin; 60 dcl 1 ca aligned, 61 2 list bit (1); 62 dcl code fixed bin (35); 63 dcl i fixed bin; 64 dcl list_ca char (8); 65 dcl listp ptr; 66 dcl pdir char (168); 67 dcl seg_ptr ptr; 68 dcl source char (32); 69 dcl source_cds char (32); 70 dcl source_dir char (168); 71 dcl source_list char (32); 72 dcl tc fixed bin (21); 73 dcl tp ptr; 74 dcl unique char (15); 75 dcl unique_list char (32); 76 dcl unique_pl1 char (32); 77 dcl wdir char (168); 78 79 /* based */ 80 81 dcl targ char (tc) based (tp); 82 83 /* builtin */ 84 85 dcl (addr, after, divide, index, null, reverse, rtrim, substr) 86 builtin; 87 88 /* condition */ 89 90 dcl cleanup condition; 91 92 /* internal static */ 93 94 dcl command char (19) internal static options (constant) initial ("create_data_segment"); 95 dcl NP char (1) internal static options (constant) initial (" "); 96 97 /* external static */ 98 99 dcl error_table_$badopt fixed bin (35) external static; 100 dcl pl1_severity_ fixed bin (35) external static; 101 102 /* entry */ 103 104 dcl com_err_ entry options (variable); 105 dcl com_err_$suppress_name entry options (variable); 106 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 107 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 108 dcl cv_entry_ entry (char (*), ptr, fixed bin (35)) returns (entry); 109 dcl expand_pathname_$add_suffix 110 entry (char (*), char (*), char (*), char (*), fixed bin (35)); 111 dcl form_link_info_ entry (ptr, fixed bin (35)); 112 dcl get_pdir_ entry returns (char (168)); 113 dcl get_wdir_ entry returns (char (168)); 114 dcl hcs_$append_link entry (char (*), char (*), char (*), fixed bin (35)); 115 dcl hcs_$chname_file entry (char (*), char (*), char (*), char (*), fixed bin (35)); 116 dcl hcs_$delentry_file entry (char (*), char (*), fixed bin (35)); 117 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, 118 fixed bin (35)); 119 dcl hcs_$initiate_count entry (char (*), char (*), char (*), fixed bin (24), fixed bin (2), ptr, 120 fixed bin (35)); 121 dcl ioa_$nnl entry options (variable); 122 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 123 dcl pl1 entry options (variable); 124 dcl terminate_file_ entry (ptr, fixed bin (24), bit (*), fixed bin (35)); 125 dcl unique_chars_ entry (bit (*)) returns (char (15)); 126 1 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 1 2 /* format: style2,^inddcls,idind32 */ 1 3 1 4 declare 1 terminate_file_switches based, 1 5 2 truncate bit (1) unaligned, 1 6 2 set_bc bit (1) unaligned, 1 7 2 terminate bit (1) unaligned, 1 8 2 force_write bit (1) unaligned, 1 9 2 delete bit (1) unaligned; 1 10 1 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 1 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 1 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 1 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 1 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 1 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 1 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 1 18 1 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 127 128 129 /* program */ 130 131 call cu_$arg_count (arg_count, code); 132 if code ^= 0 133 then do; 134 call com_err_ (code, command); 135 return; 136 end; 137 138 argument_no = 0; 139 ca = ""b; 140 do i = 1 to arg_count; 141 call cu_$arg_ptr (i, tp, tc, code); 142 if code ^= 0 143 then do; 144 call com_err_ (code, command, "Argument ^d.", i); 145 return; 146 end; 147 148 if targ = "-list" | targ = "-ls" 149 then ca.list = "1"b; 150 151 else if index (targ, "-") = 1 152 then do; 153 call com_err_ (error_table_$badopt, command, "^a", targ); 154 return; 155 end; 156 157 else do; 158 argument_no = argument_no + 1; 159 160 if argument_no = 1 161 then do; 162 call expand_pathname_$add_suffix (targ, "cds", source_dir, source_cds, code); 163 if code ^= 0 164 then do; 165 call com_err_ (code, command, "^a", targ); 166 return; 167 end; 168 end; 169 end; 170 end; 171 172 if argument_no ^= 1 173 then do; 174 call com_err_$suppress_name (0, command, "Usage: ^a path {-control_args}", command); 175 return; 176 end; 177 178 source = reverse (after (reverse (source_cds), reverse (".cds"))); 179 source_list = rtrim (source) || ".list"; 180 181 unique = unique_chars_ (""b); 182 unique_pl1 = unique || ".pl1"; 183 unique_list = unique || ".list"; 184 185 listp, seg_ptr = null; 186 wdir = get_wdir_ (); 187 pdir = get_pdir_ (); 188 189 on cleanup call clean_up_segs; 190 191 /* Make sure the source segment is there. */ 192 193 call hcs_$initiate (source_dir, source_cds, "", 0, 1, seg_ptr, code); 194 if seg_ptr = null 195 then do; 196 call com_err_ (code, command, "^a^[>^]^a", source_dir, source_dir ^= ">", source_cds); 197 return; 198 end; 199 200 call terminate_file_ (seg_ptr, 0, TERM_FILE_TERM, code); 201 202 call translate_cds_source_segment; 203 call clean_up_segs; 204 205 return; 206 207 translate_cds_source_segment: 208 procedure; 209 210 /* Link to source program */ 211 212 call hcs_$append_link (pdir, unique_pl1, rtrim (source_dir) || ">" || source_cds, code); 213 if code ^= 0 214 then do; 215 call com_err_ (code, command, "Appending link ^a^[>^]^a to ^a^[>^]^a.", pdir, pdir ^= ">", unique_pl1, 216 source_dir, source_dir ^= ">", source_cds); 217 return; 218 end; 219 220 if ca.list 221 then do; 222 call hcs_$chname_file (wdir, source_list, "", unique_list, code); 223 list_ca = "-map"; 224 end; 225 else list_ca = "-table"; 226 227 call ioa_$nnl ("CDS - "); 228 call pl1 (rtrim (pdir) || ">" || unique, "-table", list_ca); 229 230 if pl1_severity_ > 2 231 then call com_err_ (0, command, "PL/I errors occured."); 232 233 else begin; 234 dcl entry_var entry variable; 235 entry_var = cv_entry_ ((pathname_ (wdir, unique) || "$" || source), null, code); 236 if code ^= 0 237 then do; 238 call com_err_ (code, command, "^a$^a", unique, source); 239 return; 240 end; 241 242 call entry_var; 243 end; 244 245 if ca.list 246 then begin; 247 dcl bc fixed bin (24); 248 dcl 1 fli_args aligned, 249 2 obj_ptr ptr, 250 2 list_ptr ptr, 251 2 list_bc fixed bin (24), 252 2 hd_sw bit (1) unaligned, 253 2 ln_sw bit (1) unaligned, 254 2 et_sw bit (1) unaligned, 255 2 lk_sw bit (1) unaligned, 256 2 lg_sw bit (1) unaligned; 257 258 dcl listing_file char (divide (bc, 9, 21)) based (listp); 259 260 call hcs_$initiate_count (wdir, unique_list, "", bc, 1, listp, code); 261 if listp = null 262 then do; 263 call com_err_ (code, command, "^a^[>^]^a", wdir, wdir ^= ">", unique_list); 264 return; 265 end; 266 267 bc = bc + 9; 268 substr (listing_file, divide (bc, 9, 21), 1) = NP; 269 270 call hcs_$initiate (wdir, source, "", 0, 1, seg_ptr, code); 271 if seg_ptr = null 272 then do; 273 call com_err_ (code, command, "^a^[>^]^a", wdir, wdir ^= ">", source); 274 call com_err_ (0, command, "Check arguments to the call of create_data_segment_ in ^a.", 275 source_cds); 276 return; 277 end; 278 279 fli_args.obj_ptr = seg_ptr; 280 fli_args.list_ptr = listp; 281 fli_args.list_bc = bc; 282 fli_args.hd_sw = "1"b; 283 fli_args.ln_sw = "1"b; 284 fli_args.et_sw = "1"b; 285 fli_args.lk_sw = "1"b; 286 fli_args.lg_sw = "0"b; 287 288 call form_link_info_ (addr (fli_args), code); 289 if code ^= 0 290 then do; 291 call com_err_ (code, command, "Getting link information for ^a^[>^]^a.", wdir, wdir ^= ">", 292 source); 293 return; 294 end; 295 296 call terminate_file_ (listp, fli_args.list_bc, TERM_FILE_TRUNC_BC_TERM, code); 297 end; 298 end translate_cds_source_segment; 299 300 clean_up_segs: 301 procedure; 302 303 call hcs_$delentry_file (pdir, unique_pl1, code); 304 call hcs_$delentry_file (wdir, unique, code); 305 306 call hcs_$chname_file (wdir, unique_list, unique_list, source_list, code); 307 if code ^= 0 308 then call hcs_$chname_file (wdir, unique_list, unique_list, "", code); 309 310 call terminate_file_ (listp, 0, TERM_FILE_TERM, code); 311 call terminate_file_ (seg_ptr, 0, TERM_FILE_TERM, code); 312 end clean_up_segs; 313 314 end create_data_segment; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/18/90 1154.7 create_data_segment.pl1 >spec>install>1010>create_data_segment.pl1 127 1 04/06/83 1339.4 terminate_file.incl.pl1 >ldd>include>terminate_file.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. NP constant char(1) initial packed unaligned dcl 95 ref 268 TERM_FILE_TERM 000001 constant bit(3) initial packed unaligned dcl 1-14 set ref 200* 310* 311* TERM_FILE_TRUNC_BC_TERM 000000 constant bit(3) initial packed unaligned dcl 1-15 set ref 296* addr builtin function dcl 85 ref 288 288 after builtin function dcl 85 ref 178 arg_count 000100 automatic fixed bin(17,0) dcl 58 set ref 131* 140 argument_no 000101 automatic fixed bin(17,0) dcl 59 set ref 138* 158* 158 160 172 bc 000414 automatic fixed bin(24,0) dcl 247 set ref 260* 267* 267 268 268 281 ca 000102 automatic structure level 1 dcl 60 set ref 139* cleanup 000372 stack reference condition dcl 90 ref 189 code 000103 automatic fixed bin(35,0) dcl 62 set ref 131* 132 134* 141* 142 144* 162* 163 165* 193* 196* 200* 212* 213 215* 222* 235* 236 238* 260* 263* 270* 273* 288* 289 291* 296* 303* 304* 306* 307 307* 310* 311* com_err_ 000014 constant entry external dcl 104 ref 134 144 153 165 196 215 230 238 263 273 274 291 com_err_$suppress_name 000016 constant entry external dcl 105 ref 174 command 000002 constant char(19) initial packed unaligned dcl 94 set ref 134* 144* 153* 165* 174* 174* 196* 215* 230* 238* 263* 273* 274* 291* cu_$arg_count 000020 constant entry external dcl 106 ref 131 cu_$arg_ptr 000022 constant entry external dcl 107 ref 141 cv_entry_ 000024 constant entry external dcl 108 ref 235 divide builtin function dcl 85 ref 268 268 entry_var 000410 automatic entry variable dcl 234 set ref 235* 242 error_table_$badopt 000010 external static fixed bin(35,0) dcl 99 set ref 153* et_sw 5(02) 000416 automatic bit(1) level 2 packed packed unaligned dcl 248 set ref 284* expand_pathname_$add_suffix 000026 constant entry external dcl 109 ref 162 fli_args 000416 automatic structure level 1 dcl 248 set ref 288 288 form_link_info_ 000030 constant entry external dcl 111 ref 288 get_pdir_ 000032 constant entry external dcl 112 ref 187 get_wdir_ 000034 constant entry external dcl 113 ref 186 hcs_$append_link 000036 constant entry external dcl 114 ref 212 hcs_$chname_file 000040 constant entry external dcl 115 ref 222 306 307 hcs_$delentry_file 000042 constant entry external dcl 116 ref 303 304 hcs_$initiate 000044 constant entry external dcl 117 ref 193 270 hcs_$initiate_count 000046 constant entry external dcl 119 ref 260 hd_sw 5 000416 automatic bit(1) level 2 packed packed unaligned dcl 248 set ref 282* i 000104 automatic fixed bin(17,0) dcl 63 set ref 140* 141* 144* index builtin function dcl 85 ref 151 ioa_$nnl 000050 constant entry external dcl 121 ref 227 lg_sw 5(04) 000416 automatic bit(1) level 2 packed packed unaligned dcl 248 set ref 286* list 000102 automatic bit(1) level 2 dcl 60 set ref 148* 220 245 list_bc 4 000416 automatic fixed bin(24,0) level 2 dcl 248 set ref 281* 296* list_ca 000106 automatic char(8) packed unaligned dcl 64 set ref 223* 225* 228* list_ptr 2 000416 automatic pointer level 2 dcl 248 set ref 280* listing_file based char packed unaligned dcl 258 set ref 268* listp 000110 automatic pointer dcl 65 set ref 185* 260* 261 268 280 296* 310* lk_sw 5(03) 000416 automatic bit(1) level 2 packed packed unaligned dcl 248 set ref 285* ln_sw 5(01) 000416 automatic bit(1) level 2 packed packed unaligned dcl 248 set ref 283* null builtin function dcl 85 ref 185 194 235 235 261 271 obj_ptr 000416 automatic pointer level 2 dcl 248 set ref 279* pathname_ 000052 constant entry external dcl 122 ref 235 pdir 000112 automatic char(168) packed unaligned dcl 66 set ref 187* 212* 215* 215 228 303* pl1 000054 constant entry external dcl 123 ref 228 pl1_severity_ 000012 external static fixed bin(35,0) dcl 100 ref 230 reverse builtin function dcl 85 ref 178 178 178 rtrim builtin function dcl 85 ref 179 212 228 seg_ptr 000164 automatic pointer dcl 67 set ref 185* 193* 194 200* 270* 271 279 311* source 000166 automatic char(32) packed unaligned dcl 68 set ref 178* 179 235 238* 270* 273* 291* source_cds 000176 automatic char(32) packed unaligned dcl 69 set ref 162* 178 193* 196* 212 215* 274* source_dir 000206 automatic char(168) packed unaligned dcl 70 set ref 162* 193* 196* 196 212 215* 215 source_list 000260 automatic char(32) packed unaligned dcl 71 set ref 179* 222* 306* substr builtin function dcl 85 set ref 268* targ based char packed unaligned dcl 81 set ref 148 148 151 153* 162* 165* tc 000270 automatic fixed bin(21,0) dcl 72 set ref 141* 148 148 151 153 153 162 162 165 165 terminate_file_ 000056 constant entry external dcl 124 ref 200 296 310 311 tp 000272 automatic pointer dcl 73 set ref 141* 148 148 151 153 162 165 unique 000274 automatic char(15) packed unaligned dcl 74 set ref 181* 182 183 228 235* 238* 304* unique_chars_ 000060 constant entry external dcl 125 ref 181 unique_list 000300 automatic char(32) packed unaligned dcl 75 set ref 183* 222* 260* 263* 306* 306* 307* 307* unique_pl1 000310 automatic char(32) packed unaligned dcl 76 set ref 182* 212* 215* 303* wdir 000320 automatic char(168) packed unaligned dcl 77 set ref 186* 222* 235* 260* 263* 263 270* 273* 273 291* 291 304* 306* 307* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. TERM_FILE_BC internal static bit(2) initial packed unaligned dcl 1-12 TERM_FILE_DELETE internal static bit(5) initial packed unaligned dcl 1-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial packed unaligned dcl 1-16 TERM_FILE_TRUNC internal static bit(1) initial packed unaligned dcl 1-11 TERM_FILE_TRUNC_BC internal static bit(2) initial packed unaligned dcl 1-13 terminate_file_switches based structure level 1 packed packed unaligned dcl 1-4 NAMES DECLARED BY EXPLICIT CONTEXT. cds 000163 constant entry external dcl 52 clean_up_segs 002225 constant entry internal dcl 300 ref 189 203 create_data_segment 000172 constant entry external dcl 52 translate_cds_source_segment 001100 constant entry internal dcl 207 ref 202 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2726 3010 2440 2736 Length 3250 2440 62 223 266 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME cds 604 external procedure is an external procedure. on unit on line 189 64 on unit translate_cds_source_segment internal procedure shares stack frame of external procedure cds. begin block on line 233 begin block shares stack frame of external procedure cds. begin block on line 245 begin block shares stack frame of external procedure cds. clean_up_segs 101 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cds 000100 arg_count cds 000101 argument_no cds 000102 ca cds 000103 code cds 000104 i cds 000106 list_ca cds 000110 listp cds 000112 pdir cds 000164 seg_ptr cds 000166 source cds 000176 source_cds cds 000206 source_dir cds 000260 source_list cds 000270 tc cds 000272 tp cds 000274 unique cds 000300 unique_list cds 000310 unique_pl1 cds 000320 wdir cds 000410 entry_var begin block on line 233 000414 bc begin block on line 245 000416 fli_args begin block on line 245 THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp cat_realloc_chars call_ent_var call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op shorten_stack ext_entry int_entry reverse_cs set_chars_eis index_after_cs THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ com_err_$suppress_name cu_$arg_count cu_$arg_ptr cv_entry_ expand_pathname_$add_suffix form_link_info_ get_pdir_ get_wdir_ hcs_$append_link hcs_$chname_file hcs_$delentry_file hcs_$initiate hcs_$initiate_count ioa_$nnl pathname_ pl1 terminate_file_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt pl1_severity_ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 52 000162 131 000177 132 000207 134 000211 135 000226 138 000227 139 000230 140 000231 141 000241 142 000256 144 000260 145 000312 148 000313 151 000330 153 000342 154 000374 158 000375 160 000376 162 000401 163 000437 165 000441 166 000473 170 000474 172 000476 174 000501 175 000531 178 000532 179 000565 181 000614 182 000632 183 000645 185 000661 186 000665 187 000674 189 000703 193 000725 194 000771 196 000775 197 001043 200 001044 202 001072 203 001073 205 001077 207 001100 212 001101 213 001164 215 001167 217 001252 220 001253 222 001255 223 001305 224 001307 225 001310 227 001312 228 001325 230 001406 235 001443 236 001530 238 001533 239 001566 242 001567 245 001573 260 001575 261 001640 263 001644 264 001712 267 001713 268 001715 270 001723 271 001767 273 001773 274 002041 276 002072 279 002073 280 002075 281 002077 282 002101 283 002103 284 002105 285 002107 286 002111 288 002113 289 002126 291 002130 293 002175 296 002176 298 002223 300 002224 303 002232 304 002253 306 002275 307 002324 310 002356 311 002405 312 002434 ----------------------------------------------------------- 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