COMPILATION LISTING OF SEGMENT fm_combos_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/08/85 1135.8 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* 9* This module contains the create and delete operations, each of 10* which is a number of calls to entries in fm_create_open_ and 11* fm_delete_close_ to do the actual work. 12**/ 13 14 /* HISTORY: 15* 16*Designed by Andre' Bensoussan, 01/01/82. 17*Written by Jeffrey D. Ives, 10/01/82. 18*Modified: 19*05/31/83 by Lindsey L. Spratt: Fixed the $delete entry to force the access if 20* possible, when necessary. 21*01/06/84 by Matthew Pierret: Changed $delete to force "rw" access to the file 22* by calling file_manager_$add_acl_entries. Forcing access should 23* really be moved to fm_open_ some day. 24*06/07/84 by Lee Baldwin: Renamed dm_error_$fm_sys_pn_tbl_ver_bad to 25* $fm_bad_sys_pn_tbl_ver. 26*08/02/84 by Matthew Pierret: Changed name of fm_open_ to fm_create_open_ 27* and fm_delete_close, as appropriate. 28*11/12/84 by Matthew Pierret: Moved open_by_uid, open_by_uid_after_crash 29* find_old_uid_pn_table and end_of_crash_recovery entries to 30* fm_open_by_uid_. Renamed several variables. Moved include files 31* and external declarations out of internal procedures. 32*12/26/84 by Matthew Pierret: Changed to use modern calling sequence of 33* file_manager_$add_acl_entries, which only accepts a general_acl. 34**/ 35 36 37 /* format: style2,ind3,ll79,^indnoniterdo,indnoniterend */ 38 fm_combos_$create: 39 proc (p_dir_path, p_entry_name, p_file_create_info_ptr, p_code); 40 41 /* START OF DECLARATIONS */ 42 43 /* Parameters */ 44 45 dcl p_code fixed bin (35) parm; 46 dcl p_dir_path char (*) parm; 47 dcl p_entry_name char (*) parm; 48 dcl p_file_create_info_ptr ptr parm; 49 50 /* Automatic */ 51 52 dcl code fixed bin (35); 53 dcl dir_path char (168); 54 dcl entry_name char (32); 55 dcl file_create_info_ptr ptr; 56 dcl my_oid bit (36) aligned; 57 58 /* Static */ 59 60 /* Conditions */ 61 62 dcl cleanup condition; 63 64 /* Based */ 65 66 /* Builtin */ 67 68 dcl addr builtin; 69 70 /* External Variables */ 71 72 dcl dm_error_$file_already_exists 73 fixed bin (35) ext; 74 dcl dm_error_$file_already_open 75 fixed bin (35) ext; 76 77 /* External Entries */ 78 79 dcl file_manager_$add_acl_entries 80 entry (char (*), char (*), ptr, 81 fixed bin (35)); 82 dcl get_group_id_$tag_star entry () returns (char (32)); 83 dcl fm_create_open_$create_open 84 entry (char (*), char (*), ptr, 85 bit (36) aligned, fixed bin (35)); 86 dcl fm_delete_close_$delete_close 87 entry (bit (36) aligned, fixed bin (35)); 88 dcl fm_create_open_$open entry (char (*), char (*), 89 bit (36) aligned, fixed bin (35)); 90 dcl fm_delete_close_$close entry (bit (36) aligned, fixed bin (35)); 91 92 /* END OF DECLARATIONS */ 93 94 /* The actual entry is the main procedure statement. It is repeated here for 95* clarity. 96* 97*create: 98* entry (p_dir_path, p_entry_name, p_file_create_info_ptr, p_code); 99**/ 100 101 dir_path = p_dir_path; 102 entry_name = p_entry_name; 103 file_create_info_ptr = p_file_create_info_ptr; 104 p_code, code = 0; 105 my_oid = ""b; 106 107 on cleanup call FINISH (); 108 109 call fm_create_open_$create_open (dir_path, entry_name, 110 file_create_info_ptr, my_oid, code); 111 if my_oid = ""b 112 then call ERROR_RETURN (code); 113 else if code ^= 0 114 then if code = dm_error_$file_already_open 115 then call ERROR_RETURN (dm_error_$file_already_exists); 116 else call ERROR_RETURN (code); 117 118 call fm_delete_close_$close (my_oid, code); 119 if code ^= 0 120 then call ERROR_RETURN (code); 121 122 MAIN_RETURN: 123 return; 124 125 126 127 delete: 128 entry (p_dir_path, p_entry_name, p_code); 129 130 dir_path = p_dir_path; 131 entry_name = p_entry_name; 132 p_code, code = 0; 133 my_oid = ""b; 134 135 call SET_RW_ACCESS (dir_path, entry_name); 136 137 on cleanup call FINISH; 138 139 call fm_create_open_$open (dir_path, entry_name, my_oid, code); 140 if my_oid = ""b 141 then call ERROR_RETURN (code); 142 else code = 0; 143 144 call fm_delete_close_$delete_close (my_oid, code); 145 if code ^= 0 146 then call ERROR_RETURN (code); 147 else go to MAIN_RETURN; 148 149 ERROR_RETURN: 150 proc (er_p_code); 151 152 dcl er_p_code fixed bin (35) parameter; 153 154 p_code = er_p_code; 155 call FINISH (); 156 go to MAIN_RETURN; 157 158 end ERROR_RETURN; 159 160 FINISH: 161 proc (); 162 163 if my_oid ^= ""b 164 then call fm_delete_close_$close (my_oid, (0)); 165 166 end FINISH; 167 168 SET_RW_ACCESS: 169 proc (sra_p_dir_name, sra_p_entry_name); 170 171 /* This routine sets "read" and "write" access to the components of 172* the file to ensure no access problems while opening or deleting 173* the file. */ 174 175 dcl (sra_p_dir_name, sra_p_entry_name) 176 char (*); 177 dcl sra_code fixed bin (35); 178 dcl 1 sra_general_acl aligned, 179 2 version char (8) aligned 180 init (GENERAL_ACL_VERSION_1), 181 2 count fixed bin init (1), 182 2 entries (1) like general_acl_entry; 183 184 sra_code = 0; 185 sra_general_acl.entries (1).access_name = get_group_id_$tag_star (); 186 sra_general_acl.entries (1).mode = RW_ACCESS; 187 sra_general_acl.entries (1).status_code = 0; 188 189 call file_manager_$add_acl_entries (sra_p_dir_name, sra_p_entry_name, 190 addr (sra_general_acl), sra_code); 191 if sra_code ^= 0 192 then call ERROR_RETURN (sra_code); 193 194 end SET_RW_ACCESS; 195 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 196 197 2 1 /* Begin include file -- acl_structures.incl.pl1 BIM 3/82 */ 2 2 /* format: style3,indcomtxt,idind30 */ 2 3 2 4 declare acl_ptr pointer; 2 5 declare acl_count fixed bin; 2 6 2 7 declare 1 general_acl aligned based (acl_ptr), /* for fs_util_ */ 2 8 2 version char (8) aligned, 2 9 2 count fixed bin, 2 10 2 entries (acl_count refer (general_acl.count)) aligned like general_acl_entry; 2 11 2 12 declare 1 general_acl_entry based, 2 13 2 access_name character (32) unaligned, 2 14 2 mode bit (36) aligned, 2 15 2 status_code fixed bin (35); 2 16 2 17 2 18 declare 1 general_extended_acl aligned based (acl_ptr), /* for fs_util_ */ 2 19 2 version char (8) aligned, 2 20 2 count fixed bin, 2 21 2 entries (acl_count refer (general_extended_acl.count)) aligned like general_extended_acl_entry; 2 22 2 23 declare 1 general_extended_acl_entry aligned based, 2 24 2 access_name character (32) unaligned, 2 25 2 mode bit (36) aligned, 2 26 2 extended_mode bit (36) aligned, 2 27 2 status_code fixed bin (35); 2 28 2 29 2 30 declare 1 general_delete_acl aligned based (acl_ptr), /* for file_system_ */ 2 31 2 version char (8) aligned, 2 32 2 count fixed bin, 2 33 2 entries (acl_count refer (general_delete_acl.count)) aligned like delete_acl_entry; 2 34 2 35 declare 1 general_delete_acl_entry aligned based, 2 36 2 access_name character (32) unaligned, 2 37 2 status_code fixed bin (35); 2 38 2 39 2 40 declare 1 segment_acl aligned based (acl_ptr), 2 41 2 version fixed bin, 2 42 2 count fixed bin, 2 43 2 entries (acl_count refer (segment_acl.count)) aligned like segment_acl_entry; 2 44 2 45 declare 1 segment_acl_entry like general_extended_acl_entry aligned based; 2 46 declare 1 segment_acl_array (acl_count) aligned like segment_acl_entry based (acl_ptr); 2 47 2 48 2 49 declare 1 directory_acl aligned based (acl_ptr), 2 50 2 version fixed bin, 2 51 2 count fixed bin, 2 52 2 entries (acl_count refer (directory_acl.count)) aligned like directory_acl_entry; 2 53 2 54 declare 1 directory_acl_entry like general_acl_entry aligned based; 2 55 declare 1 directory_acl_array (acl_count) aligned like directory_acl_entry based (acl_ptr); 2 56 2 57 2 58 declare 1 delete_acl based (acl_ptr) aligned, 2 59 2 version fixed bin, 2 60 2 count fixed bin, 2 61 2 entries (acl_count refer (delete_acl.count)) aligned like delete_acl_entry; 2 62 2 63 declare 1 delete_acl_entry like general_delete_acl_entry aligned based; 2 64 declare 1 delete_acl_array (acl_count) aligned like delete_acl_entry based (acl_ptr); 2 65 2 66 2 67 declare (SEG_ACL_VERSION_1 init ("sga1"), 2 68 DIR_ACL_VERSION_1 init ("dra1"), 2 69 DELETE_ACL_VERSION_1 init ("dla1")) 2 70 char (4) int static options (constant); 2 71 2 72 declare (GENERAL_ACL_VERSION_1 init ("gacl001"), 2 73 GENERAL_EXTENDED_ACL_VERSION_1 init ("gxacl001"), 2 74 GENERAL_DELETE_ACL_VERSION_1 init ("gdacl001")) 2 75 char (8) internal static options (constant); 2 76 2 77 declare ACL_VERSION_1 fixed bin init (1) int static options (constant); 2 78 2 79 /* End include file acl_structures.incl.pl1 */ 198 199 200 end fm_combos_$create; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1127.9 fm_combos_.pl1 >spec>on>41-15>fm_combos_.pl1 196 1 04/08/85 1113.3 access_mode_values.incl.pl1 >spec>on>41-15>access_mode_values.incl.pl1 198 2 10/14/83 1606.6 acl_structures.incl.pl1 >ldd>include>acl_structures.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. GENERAL_ACL_VERSION_1 000000 constant char(8) initial unaligned dcl 2-72 ref 178 RW_ACCESS constant bit(3) initial unaligned dcl 1-11 ref 186 access_name 3 000215 automatic char(32) array level 3 packed unaligned dcl 178 set ref 185* addr builtin function dcl 68 ref 189 189 cleanup 000170 stack reference condition dcl 62 ref 107 137 code 000100 automatic fixed bin(35,0) dcl 52 set ref 104* 109* 111* 113 113 116* 118* 119 119* 132* 139* 140* 142* 144* 145 145* count 2 000215 automatic fixed bin(17,0) initial level 2 dcl 178 set ref 178* delete_acl_entry based structure level 1 dcl 2-63 dir_path 000101 automatic char(168) unaligned dcl 53 set ref 101* 109* 130* 135* 139* directory_acl_entry based structure level 1 dcl 2-54 dm_error_$file_already_exists 000010 external static fixed bin(35,0) dcl 72 set ref 113* dm_error_$file_already_open 000012 external static fixed bin(35,0) dcl 74 ref 113 entries 3 000215 automatic structure array level 2 dcl 178 entry_name 000153 automatic char(32) unaligned dcl 54 set ref 102* 109* 131* 135* 139* er_p_code parameter fixed bin(35,0) dcl 152 ref 149 154 file_create_info_ptr 000164 automatic pointer dcl 55 set ref 103* 109* file_manager_$add_acl_entries 000014 constant entry external dcl 79 ref 189 fm_create_open_$create_open 000020 constant entry external dcl 83 ref 109 fm_create_open_$open 000024 constant entry external dcl 88 ref 139 fm_delete_close_$close 000026 constant entry external dcl 90 ref 118 163 fm_delete_close_$delete_close 000022 constant entry external dcl 86 ref 144 general_acl_entry based structure level 1 unaligned dcl 2-12 general_delete_acl_entry based structure level 1 dcl 2-35 general_extended_acl_entry based structure level 1 dcl 2-23 get_group_id_$tag_star 000016 constant entry external dcl 82 ref 185 mode 13 000215 automatic bit(36) array level 3 dcl 178 set ref 186* my_oid 000166 automatic bit(36) dcl 56 set ref 105* 109* 111 118* 133* 139* 140 144* 163 163* p_code parameter fixed bin(35,0) dcl 45 set ref 38 104* 127 132* 154* p_dir_path parameter char unaligned dcl 46 ref 38 101 127 130 p_entry_name parameter char unaligned dcl 47 ref 38 102 127 131 p_file_create_info_ptr parameter pointer dcl 48 ref 38 103 segment_acl_entry based structure level 1 dcl 2-45 sra_code 000214 automatic fixed bin(35,0) dcl 177 set ref 184* 189* 191 191* sra_general_acl 000215 automatic structure level 1 dcl 178 set ref 189 189 sra_p_dir_name parameter char unaligned dcl 175 set ref 168 189* sra_p_entry_name parameter char unaligned dcl 175 set ref 168 189* status_code 14 000215 automatic fixed bin(35,0) array level 3 dcl 178 set ref 187* version 000215 automatic char(8) initial level 2 dcl 178 set ref 178* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACL_VERSION_1 internal static fixed bin(17,0) initial dcl 2-77 A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DELETE_ACL_VERSION_1 internal static char(4) initial unaligned dcl 2-67 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 DIR_ACL_VERSION_1 internal static char(4) initial unaligned dcl 2-67 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 GENERAL_DELETE_ACL_VERSION_1 internal static char(8) initial unaligned dcl 2-72 GENERAL_EXTENDED_ACL_VERSION_1 internal static char(8) initial unaligned dcl 2-72 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS internal static bit(3) initial unaligned dcl 1-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SEG_ACL_VERSION_1 internal static char(4) initial unaligned dcl 2-67 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 acl_count automatic fixed bin(17,0) dcl 2-5 acl_ptr automatic pointer dcl 2-4 delete_acl based structure level 1 dcl 2-58 delete_acl_array based structure array level 1 dcl 2-64 directory_acl based structure level 1 dcl 2-49 directory_acl_array based structure array level 1 dcl 2-55 general_acl based structure level 1 dcl 2-7 general_delete_acl based structure level 1 dcl 2-30 general_extended_acl based structure level 1 dcl 2-18 segment_acl based structure level 1 dcl 2-40 segment_acl_array based structure array level 1 dcl 2-46 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 000340 constant entry internal dcl 149 ref 111 113 116 119 140 145 191 FINISH 000352 constant entry internal dcl 160 ref 107 137 155 MAIN_RETURN 000174 constant label dcl 122 ref 145 156 SET_RW_ACCESS 000374 constant entry internal dcl 168 ref 135 delete 000201 constant entry external dcl 127 fm_combos_$create 000017 constant entry external dcl 38 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 706 736 512 716 Length 1156 512 30 204 174 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fm_combos_$create 204 external procedure is an external procedure. on unit on line 107 64 on unit on unit on line 137 64 on unit ERROR_RETURN internal procedure shares stack frame of external procedure fm_combos_$create. FINISH 72 internal procedure is called by several nonquick procedures. SET_RW_ACCESS internal procedure shares stack frame of external procedure fm_combos_$create. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME fm_combos_$create 000100 code fm_combos_$create 000101 dir_path fm_combos_$create 000153 entry_name fm_combos_$create 000164 file_create_info_ptr fm_combos_$create 000166 my_oid fm_combos_$create 000214 sra_code SET_RW_ACCESS 000215 sra_general_acl SET_RW_ACCESS THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return enable ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. file_manager_$add_acl_entries fm_create_open_$create_open fm_create_open_$open fm_delete_close_$close fm_delete_close_$delete_close get_group_id_$tag_star THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$file_already_exists dm_error_$file_already_open LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 38 000012 101 000042 102 000047 103 000053 104 000056 105 000060 107 000061 109 000103 111 000134 113 000141 116 000155 118 000157 119 000170 122 000174 127 000175 130 000224 131 000232 132 000237 133 000241 135 000242 137 000245 139 000267 140 000314 142 000321 144 000322 145 000333 200 000337 149 000340 154 000342 155 000344 156 000350 160 000351 163 000357 166 000373 168 000374 178 000412 184 000417 185 000420 186 000427 187 000431 189 000432 191 000463 194 000467 ----------------------------------------------------------- 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