COMPILATION LISTING OF SEGMENT linus_declare Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 07/29/86 1000.1 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ****************************************************** 10* * * 11* * * 12* * Copyright (c) 1972 by Massachusetts Institute of * 13* * Technology and Honeywell Information Systems, Inc. * 14* * * 15* * * 16* ****************************************************** */ 17 18 linus_declare: 19 proc (sci_ptr, lcb_ptr); 20 21 /* DESCRIPTION: 22* 23* This procedure implements the LINUS declare request. There must be exactly 24* two arguments supplied, namely function name and function type. Set 25* functions are threaded into the set function list, and scalar functions are 26* declared to MRDS and their names are threaded into a scalar function list. 27* 28* 29* 30* HISTORY: 31* 32* 77-06-01 J. A. Weeldreyer: Initially written. 33* 34* 80-10-17 Rickie E. Brinegar: changed hcs_$make_ptr for a combination of 35* expand_pathname_ and cv_ptr_ inorder to allow for absolute pathnames in set 36* functions. A similar change was made to mrds_dsl_declare to handle scalar 37* functions. 38* 39* 80-11-03 Rickie E. Brinegar: cv_ptr_ changed to cv_entry_. 40* 41* 81-11-13 Rickie E. Brinegar: Added timing of dsl_$declare. 42* 43* 82-02-10 Paul W. Benjamin: ssu_ conversion 44* 45* 82-06-21 Al Dupuis: Following changes resulting from audit of ssu_ 46* conversion. Remove kill/nokill comment from code 47* as it was no longer meaningfull. Remove NO_KILL 48* usage as it no longer had meaning either. 49**/ 50 1 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 1 7* install(86-07-29,MR12.0-1106): 1 8* Added general_work_area_ptr and renamed sfr_ptr to 1 9* force_retrieve_scope_ptr. 1 10* END HISTORY COMMENTS */ 1 11 1 12 1 13 /* HISTORY: 1 14* 1 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 1 16* 1 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 1 18* a part of the attribute level control work. 1 19* 1 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 1 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 1 22* scope information. 1 23* 1 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 1 25* retaining various vcpu times to be collected when in timing mode. The 1 26* times to be collected are: LINUS parsing time, LINUS processing time, and 1 27* MRDS processing time. 1 28* 1 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 1 30* part of the line numbering implementation. This allows for possible later 1 31* LINUS control of the build defaults. 1 32* 1 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 1 34* information is now retained by ssu_. Removed parse_timer as no longer 1 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 1 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 1 37* 1 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 1 39* subsystem_invocation_level, and selection_expression_identifier. 1 40* 1 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 1 42* table_control_info_ptr. 1 43* 1 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 1 45* 1 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 1 47* 1 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 1 49* 1 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 1 51**/ 1 52 1 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 1 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 1 55 2 rb_len fixed bin (21), /* length of request buffer */ 1 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 1 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 1 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 1 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 1 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 1 61 2 test_flag bit (1) unal, /* on if in test mode */ 1 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 1 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 1 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 1 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 1 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 1 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 1 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 1 69 2 reserved bit (27) unal, 1 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 1 71 2 rb_ptr ptr, /* ptr to request buffer */ 1 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 1 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 1 74 2 ttn_ptr ptr, /* pointer to table info structure */ 1 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 1 76 2 lv_ptr ptr, /* pointer linus variables */ 1 77 2 si_ptr ptr, /* pointer to select_info structure */ 1 78 2 setfi_ptr ptr, /* pointer to set function information */ 1 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 1 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 1 81 2 lit_ptr ptr, /* pointer to literal pool */ 1 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 1 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 1 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 1 85* (MR7.0) */ 1 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 1 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 1 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 1 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 1 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 1 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 1 92* for current lila expression */ 1 93 2 unused_timer float bin (63), /* future expansion */ 1 94 2 request_time float bin (63), /* How much request time was spent 1 95* in LINUS. (-1 = user has just enabled 1 96* timing, do not report) */ 1 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 1 98 2 build_increment fixed bin, /* default increment for build mode */ 1 99 2 build_start fixed bin, /* default start count for build mode */ 1 100 2 linus_version char (4), /* current version of LINUS */ 1 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 1 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 1 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 1 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 1 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 1 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 1 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 1 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 1 109 2 word_pad (6) bit (36) unal, 1 110 /* procedures that will be optionally */ 1 111 /* replaced by the user. Saved so they */ 1 112 /* can be reinstated if desired. */ 1 113 2 ssu_abort_line entry options (variable), 1 114 2 ssu_post_request_line variable entry (ptr), 1 115 2 ssu_pre_request_line variable entry (ptr), 1 116 1 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 1 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 1 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 1 120 1 121 dcl lcb_ptr ptr; 1 122 1 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 51 52 2 1 /* BEGIN INCLUDE FILE linus_char_argl.incl.pl1 -- jaw 2/11/77 */ 2 2 2 3 /* HISTORY: 2 4* 2 5* 82-02-05 Paul W. Benjamin: Changed arg_len to fixed bin (21). 2 6* 2 7**/ 2 8 2 9 dcl 1 char_argl aligned based (ca_ptr), /* structure for general char. arg. list */ 2 10 2 nargs fixed bin, /* number of args */ 2 11 2 arg (nargs_init refer (char_argl.nargs)), 2 12 3 arg_ptr ptr, /* ptr to first char. of arg */ 2 13 3 arg_len fixed bin (21); /* no. of chars. in arg */ 2 14 2 15 dcl ca_ptr ptr; 2 16 dcl nargs_init fixed bin; 2 17 2 18 /* END INCLUDE FILE linus_char_argl.incl.pl1 */ 53 54 3 1 /* BEGIN INCLUDE FILE linus_scal_fn_info.incl.pl1 -- jaw 6/23/77 */ 3 2 3 3 dcl 1 scal_fn_info aligned based (sclfi_ptr), /* names of user-dcl scalar functions */ 3 4 2 fwd_ptr ptr, /* pointer tonext name in list */ 3 5 2 name char (32); /* function name */ 3 6 3 7 dcl sclfi_ptr ptr; 3 8 3 9 /* END INCLUDE FILE linus_scal_fn_info.incl.pl1 */ 55 56 57 dcl sci_ptr ptr; /* for ssu_ */ 58 59 dcl ( 60 code, 61 icode 62 ) fixed bin (35); /* internal status code */ 63 64 dcl initial_mrds_vclock float bin (63); 65 66 dcl name char (char_argl.arg.arg_len (1)) based (char_argl.arg.arg_ptr (1)); 67 /* function name */ 68 dcl type char (char_argl.arg.arg_len (2)) based (char_argl.arg.arg_ptr (2)); 69 /* function type */ 70 dcl file_name char (168) varying; 71 72 dcl (directory, entry_name) char (168); 73 74 dcl ( 75 linus_data_$dcl_id, 76 linus_error_$bad_num_args, 77 linus_error_$inv_fn_type, 78 linus_error_$no_db, 79 sys_info$max_seg_size 80 ) fixed bin (35) ext; 81 82 dcl cleanup condition; 83 84 dcl (addr, fixed, null, rel, rtrim, vclock) builtin; 85 86 dcl calc_entry entry variable; /* virtual entry to set function calc. entry */ 87 88 dcl cv_entry_ entry (char (*), ptr, fixed bin (35)) returns (entry); 89 dcl expand_pathname_ entry (char (*), char (*), char (*), fixed bin (35)); 90 dcl dsl_$declare entry (fixed bin (35), char (*), fixed bin (35)); 91 dcl linus_convert_code entry (fixed bin (35), fixed bin (35), fixed bin (35)); 92 dcl linus_thread_fn_list 93 entry (ptr, entry, char (168) varying, char (32) varying, 94 fixed bin (35)); 95 dcl ssu_$abort_line entry options (variable); 96 dcl ssu_$arg_count entry (ptr, fixed bin); 97 dcl ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin (21)); 98 99 sclfi_ptr, ca_ptr = null; /* initiallize */ 100 on cleanup call tidy_up; 101 102 if lcb.db_index = 0 then 103 call error (linus_error_$no_db, ""); 104 call ssu_$arg_count (sci_ptr, nargs_init); 105 if nargs_init = 0 then 106 call error (linus_error_$bad_num_args, ""); 107 if nargs_init ^= 2 then /* must have correct no. args */ 108 call error (linus_error_$bad_num_args, ""); 109 allocate char_argl in (lcb.static_area); 110 call ssu_$arg_ptr (sci_ptr, 1, char_argl.arg.arg_ptr (1), char_argl.arg.arg_len (1)); 111 call ssu_$arg_ptr (sci_ptr, 2, char_argl.arg.arg_ptr (2), char_argl.arg.arg_len (2)); 112 file_name = rtrim (name); 113 114 if type = "set" then do; /* set function */ 115 call expand_pathname_ (name, directory, entry_name, icode); 116 if icode ^= 0 then 117 call error (icode, name); 118 calc_entry = 119 cv_entry_ (rtrim (directory) || ">" || rtrim (entry_name) || "$" 120 || rtrim (entry_name) || "_calc", null, icode); 121 if icode ^= 0 then 122 call error (icode, file_name || " calc. entry."); 123 call 124 linus_thread_fn_list (lcb_ptr, calc_entry, file_name, 125 rtrim (entry_name), icode); /* put into fn. list */ 126 if icode ^= 0 then 127 call error (icode, name); 128 end; /* if set function */ 129 130 else if type = "scalar" then do; /* if scalar function */ 131 if lcb.timing_mode then 132 initial_mrds_vclock = vclock; 133 call dsl_$declare (lcb.db_index, name, icode); /* let MRDS know about it */ 134 if lcb.timing_mode then 135 lcb.mrds_time = lcb.mrds_time + vclock - initial_mrds_vclock; 136 if icode ^= 0 then 137 call error (icode, name); 138 allocate scal_fn_info in (lcb.static_area); 139 scal_fn_info.name = rtrim (entry_name); /* fill in scal_fn_info block */ 140 scal_fn_info.fwd_ptr = lcb.sclfi_ptr; /* put at head of list */ 141 lcb.sclfi_ptr = sclfi_ptr; 142 end; /* if scalar function */ 143 else call error (linus_error_$inv_fn_type, type); 144 145 if ca_ptr ^= null 146 then free char_argl; 147 return; 148 149 error: 150 proc (cd, msg); 151 152 /* error procedure */ 153 154 dcl (cd, ucd) fixed bin (35); 155 156 dcl msg char (*); 157 158 call tidy_up; 159 call linus_convert_code (cd, ucd, linus_data_$dcl_id); /* so LINUS user can understand */ 160 call ssu_$abort_line (sci_ptr, ucd, msg); 161 162 end error; 163 164 tidy_up: 165 proc; 166 167 /* procedure to clean up allocated structures */ 168 169 if sclfi_ptr ^= null then 170 if sclfi_ptr ^= lcb.sclfi_ptr then 171 free scal_fn_info; 172 if ca_ptr ^= null 173 then free char_argl; 174 175 end tidy_up; 176 177 end linus_declare; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/29/86 0939.8 linus_declare.pl1 >special_ldd>install>MR12.0-1106>linus_declare.pl1 51 1 07/29/86 0937.8 linus_lcb.incl.pl1 >special_ldd>install>MR12.0-1106>linus_lcb.incl.pl1 53 2 11/23/82 1327.3 linus_char_argl.incl.pl1 >ldd>include>linus_char_argl.incl.pl1 55 3 03/27/82 0434.5 linus_scal_fn_info.incl.pl1 >ldd>include>linus_scal_fn_info.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. arg 2 based structure array level 2 dcl 2-9 arg_len 4 based fixed bin(21,0) array level 3 dcl 2-9 set ref 110* 111* 112 114 115 115 116 116 126 126 130 133 133 136 136 143 143 arg_ptr 2 based pointer array level 3 dcl 2-9 set ref 110* 111* 112 114 115 116 126 130 133 136 143 ca_ptr 000100 automatic pointer dcl 2-15 set ref 99* 109* 110 110 111 111 112 112 114 114 115 115 115 116 116 116 126 126 126 130 130 133 133 133 136 136 136 143 143 143 145 145 172 172 calc_entry 000320 automatic entry variable dcl 86 set ref 118* 123* cd parameter fixed bin(35,0) dcl 154 set ref 149 159* char_argl based structure level 1 dcl 2-9 set ref 109 145 172 cleanup 000312 stack reference condition dcl 82 ref 100 cv_entry_ 000020 constant entry external dcl 88 ref 118 db_index based fixed bin(35,0) level 2 dcl 1-53 set ref 102 133* directory 000165 automatic char(168) unaligned dcl 72 set ref 115* 118 dsl_$declare 000024 constant entry external dcl 90 ref 133 entry_name 000237 automatic char(168) unaligned dcl 72 set ref 115* 118 118 123 123 139 expand_pathname_ 000022 constant entry external dcl 89 ref 115 file_name 000112 automatic varying char(168) dcl 70 set ref 112* 121 123* fwd_ptr based pointer level 2 dcl 3-3 set ref 140* icode 000106 automatic fixed bin(35,0) dcl 59 set ref 115* 116 116* 118* 121 121* 123* 126 126* 133* 136 136* initial_mrds_vclock 000110 automatic float bin(63) dcl 64 set ref 131* 134 lcb based structure level 1 dcl 1-53 lcb_ptr parameter pointer dcl 1-121 set ref 18 102 109 123* 131 133 134 134 134 138 140 141 169 linus_convert_code 000026 constant entry external dcl 91 ref 159 linus_data_$dcl_id 000010 external static fixed bin(35,0) dcl 74 set ref 159* linus_error_$bad_num_args 000012 external static fixed bin(35,0) dcl 74 set ref 105* 107* linus_error_$inv_fn_type 000014 external static fixed bin(35,0) dcl 74 set ref 143* linus_error_$no_db 000016 external static fixed bin(35,0) dcl 74 set ref 102* linus_thread_fn_list 000030 constant entry external dcl 92 ref 123 mrds_time 74 based float bin(63) level 2 dcl 1-53 set ref 134* 134 msg parameter char unaligned dcl 156 set ref 149 160* name based char unaligned dcl 66 in procedure "linus_declare" set ref 112 115* 116* 126* 133* 136* name 2 based char(32) level 2 in structure "scal_fn_info" dcl 3-3 in procedure "linus_declare" set ref 139* nargs based fixed bin(17,0) level 2 dcl 2-9 set ref 109* 145 172 nargs_init 000102 automatic fixed bin(17,0) dcl 2-16 set ref 104* 105 107 109 109 null builtin function dcl 84 ref 99 118 118 145 169 172 rtrim builtin function dcl 84 ref 112 118 118 118 123 123 139 scal_fn_info based structure level 1 dcl 3-3 set ref 138 169 sci_ptr parameter pointer dcl 57 set ref 18 104* 110* 111* 160* sclfi_ptr 000104 automatic pointer dcl 3-7 in procedure "linus_declare" set ref 99* 138* 139 140 141 169 169 169 sclfi_ptr 40 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_declare" set ref 140 141* 169 ssu_$abort_line 000032 constant entry external dcl 95 ref 160 ssu_$arg_count 000034 constant entry external dcl 96 ref 104 ssu_$arg_ptr 000036 constant entry external dcl 97 ref 110 111 static_area 144 based area level 2 dcl 1-53 ref 109 138 timing_mode 15(05) based bit(1) level 2 packed unaligned dcl 1-53 ref 131 134 type based char unaligned dcl 68 set ref 114 130 143* ucd 000100 automatic fixed bin(35,0) dcl 154 set ref 159* 160* vclock builtin function dcl 84 ref 131 134 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. addr builtin function dcl 84 code automatic fixed bin(35,0) dcl 59 fixed builtin function dcl 84 rel builtin function dcl 84 sys_info$max_seg_size external static fixed bin(35,0) dcl 74 NAMES DECLARED BY EXPLICIT CONTEXT. error 000776 constant entry internal dcl 149 ref 102 105 107 116 121 126 136 143 linus_declare 000030 constant entry external dcl 18 tidy_up 001061 constant entry internal dcl 164 ref 100 158 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1316 1356 1121 1326 Length 1630 1121 40 236 174 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_declare 254 external procedure is an external procedure. on unit on line 100 64 on unit error 88 internal procedure is called during a stack extension. tidy_up 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME error 000100 ucd error linus_declare 000100 ca_ptr linus_declare 000102 nargs_init linus_declare 000104 sclfi_ptr linus_declare 000106 icode linus_declare 000110 initial_mrds_vclock linus_declare 000112 file_name linus_declare 000165 directory linus_declare 000237 entry_name linus_declare 000320 calc_entry linus_declare THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this_desc call_int_other return enable shorten_stack ext_entry int_entry int_entry_desc alloc_based free_based vclock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cv_entry_ dsl_$declare expand_pathname_ linus_convert_code linus_thread_fn_list ssu_$abort_line ssu_$arg_count ssu_$arg_ptr THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. linus_data_$dcl_id linus_error_$bad_num_args linus_error_$inv_fn_type linus_error_$no_db LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 18 000024 99 000035 100 000040 102 000062 104 000103 105 000115 107 000134 109 000154 110 000170 111 000211 112 000232 114 000255 115 000263 116 000312 118 000334 121 000465 123 000522 126 000563 128 000605 130 000606 131 000612 133 000624 134 000651 136 000665 138 000707 139 000717 140 000733 141 000740 142 000743 143 000744 145 000763 147 000774 149 000775 158 001011 159 001016 160 001032 162 001057 164 001060 169 001066 172 001104 175 001116 ----------------------------------------------------------- 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