COMPILATION LISTING OF SEGMENT mrds_dsl_get_version Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 03/08/88 1533.9 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /****^ HISTORY COMMENTS: 14* 1) change(88-01-11,Blair), approve(88-02-26,MCR7840), 15* audit(88-03-03,Dupuis), install(88-03-08,MR12.2-1034): 16* Get the list of mrds search_paths and loop through them to find the 17* pathname of the database. 18* 2) change(88-02-26,Blair), approve(88-02-26,MCR7840), 19* audit(88-03-03,Dupuis), install(88-03-08,MR12.2-1034): 20* Create a local area in which to put the 'mrds' search_list infos. 21* END HISTORY COMMENTS */ 22 23 /* HISTORY: 24* 25* Originally written by Jim Gray - - February 1980 26* 27* Modified by Jim Gray - - April 1980, to work with submodels. 28* 29* Modified by Jim Gray - - 21-June-80, to return 30* mrds_error_$no_model_submodel instead of $no_database. 31* 32* 80-12-24 Jim Gray : changed error returned when null access to 33* db_model or a submodel msf, to new mrds_error_$no_model_access, 34* instead of no database model/submodel found. 35* 36* 81-01-22 Jim Gray : changed $header entry into get_path_info, 37* with a new structure for the interface, that contains additional 38* info, in order to make an isolated (from mrds structures) user 39* interface. 40* 41* 81-02-11 Jim Gray : changed calls to external dsmd_, into the 42* internal interface rmds_dsm_dsmd. 43* 44* 81-04-22 Jim Gray : modified logic to work with mrds_dm_open that 45* now used mrds_dm_check_path, and may automatically add the .db 46* suffix on it's own, and returns mrds_error_$no_model_access 47* rather than error_table_$moderr. 48* 49* 81-06-02 Davids: changed from mrds_dsm_header_str.incl.pl1 which 50* dcld dsm_header_record to mrds_dsm_header.incl.pl1 which 51* declares mrds_dsm_header. Also changed from calls to 52* mrds_dsm_dsmd$ to calls to various mrds_dsm_* routines (changes 53* are from the user view to the internal mrds view). 54* 55* 82-01-19 R. Lackey : modified to to look for a database foo.db if a 56* directory foo was found that was not a database. 57* 58* 82-06-23 R. Lackey : changed returned pathname to not have two "db" 59* suffixes if error not_database was returned. 60* 61* 82-06-28 D. Woodka : changed return pathname to not have "dsm.db" 62* suffix if the path was a submodel. 63* 64* 82-12-21 Roger Lackey : Fixed subscript range error for checking for 65* .dsm suffix. 66* 67* 82-12-21 Roger Lackey : Added length, rtrim and substr declarations. 68* 69* 83-01-07 Roger Lackey : Added code to return mrds_error_$no_model_access 70* for the case where a submodel was found but no 71* use did not have access to it. 72* 73* 83-01-17 Roger Lackey : Added call to mrds_dm_check_path which now handles 74* the adding of db suffix. 75* 76* 83-03-08 Mike Kubicar : Added the entry point $get_path_info_and_view_name 77* which does the same thing as $get_path_info plus returns the path 78* expansion of in_path with the proper suffix added. This is needed by the 79* dsl_$open routine when this expansion differs from the absolute pathname. 80* 81* 83-06-16 Davids: Modified to return the error mrds_error_$version_3_db 82* if its a version 3 database or mrds_error_$version_1_dsm if its a 83* version 1 submodel (this error code is actually returned by mrds_dsm_open). 84**/ 85 86 mrds_dsl_get_version: get_db_version: procedure (in_path_A, out_path, version, code_a); 87 88 /* BEGIN DESCRIPTION: 89* 90* given a pathname, this routine will determine what version 91* database that pathname refers to, and return it, along with the 92* "true" pathname of the database, having the ".db" suffix added to 93* the input path, if it was not given, and this database was a 94* version that has this suffix. The $get_path_info entry will 95* return the complete header inforamtion, rather than just the 96* version number. The $get_path_info_and_view_name will also 97* contain the expanded pathname of the relative pathname supplied 98* by the user with suffixes added as necessary. 99* 100* END DESCRIPTION 101**/ 102 103 /* PARAMETERS: 104* 105* in_path - - (input) char(168) for the get_version entry, else 106* char(*), the relative pathname of the database, with or without 107* the ".db" suffix, if the database has that suffix. 108* 109* out_path - - (output) char(168), for the get_version entry only, 110* the absolute pathname of the database with the ".db" suffix, if 111* the database has that suffix. 112* 113* version - - (output) fixed bin, for the get_version entry only, 114* the version number of the database, currently between 1 and 4. 115* this is the output from the normal entry. 116* 117* area_ptr - - (input) pointer, for the get_path_info entries only, 118* pointer to a freeing area supplied by the user, where the 119* structure can be allocated. 120* 121* structure_version - - (input) fixed bin, for the get_path_info 122* entries only, the desired version of the structure, normaly set 123* to the version in the include file. 124* 125* mrds_path_info_ptr - - (output) pointer, for the get_path_info 126* entries only, points to the allocated copy of the structure 127* defined in mrds_path_info.incl.pl1, which will be filled in with 128* the data model information. this filled in structure is the 129* output from the $get_path_info entry. 130* 131* view_dir - - (output) char (*), for the 132* get_path_info_and_view_name entry only, the directory name of the 133* relative pathname in_path. 134* 135* view_entry - - (output) char (*), for the 136* get_path_info_and_view_name entry only, the entry name, possibly 137* with suffix added, of in_path. 138* 139* error_code - - (output) fixed bin(35), the error status encoding, 140* 0 unless an error occured in expanding a pathname, or getting the 141* version of a database(such as path does not refer to a database). 142* 143**/ 144 145 /* normal entry to get version number */ 146 147 entry_name = "get_db_version"; 148 if length (rtrim (in_path_A)) > length (in_path) then do; 149 code_a = error_table_$dirlong; 150 return; 151 end; 152 in_path = rtrim (in_path_A); 153 version = 0; 154 155 call common (); 156 157 code_a = error_code; 158 159 return; 160 161 /* entry to get complete header information plus the path expansion 162* of in_path */ 163 164 get_path_info_and_view_name: 165 entry (in_path_B, area_ptr, structure_version, mrds_path_info_ptr, 166 view_dir, view_entry, code_b); 167 entry_name = "get_path_info_and_view_name"; 168 go to GET_PATH_INFO_COMMON; 169 170 /* entry to get complete header information */ 171 172 get_path_info: entry (in_path_B, area_ptr, structure_version, mrds_path_info_ptr, code_b); 173 174 entry_name = "get_path_info"; 175 176 GET_PATH_INFO_COMMON: 177 if length (rtrim (in_path_B)) > length (in_path) then do; 178 code_b = error_table_$dirlong; 179 return; 180 end; 181 in_path = rtrim (in_path_B); 182 183 /* initialize */ 184 185 abs_path = " "; 186 code_b, error_code = 0; 187 188 mrds_path_info_ptr = null (); 189 190 /* check the caller's arguments */ 191 192 193 if area_ptr = null () then 194 error_code = error_table_$badcall; 195 else do; 196 unspec (my_area_info) = "0"b; 197 my_area_info.version = 1; 198 my_area_info.areap = area_ptr; 199 200 call area_info_ (addr (my_area_info), error_code); 201 if error_code = 0 then 202 if my_area_info.no_freeing then 203 error_code = mrds_error_$not_freeing_area; 204 else do; 205 206 if structure_version ^= mrds_path_info_structure_version then 207 error_code = error_table_$unimplemented_version; 208 else do; 209 210 /* set of the path info structure in the users area */ 211 212 on area begin; 213 error_code = error_table_$area_too_small; 214 goto skip_allocate; 215 end; 216 217 on cleanup begin; 218 if mrds_path_info_ptr ^= null () then do; 219 free mrds_path_info in (work_area); 220 mrds_path_info_ptr = null (); 221 end; 222 end; 223 224 allocate mrds_path_info set (mrds_path_info_ptr) in (work_area); 225 revert area; 226 227 unspec (mrds_path_info) = "0"b; 228 mrds_path_info.version = mrds_path_info_structure_version; 229 end; 230 end; 231 end; 232 233 skip_allocate: 234 235 236 /* put the rest of the details of the path 237* into the users structure */ 238 239 if error_code = 0 then 240 call common (); /* get the path information */ 241 242 code_b = error_code; 243 244 return; 245 246 common: procedure (); 247 248 /* routine common to both entry points */ 249 250 /* try the path as a model path first, with or without suffix */ 251 252 suffix_tried = ""; 253 use_search_paths = "0"b; 254 if search (in_path,"<>") = 0 then do; 255 use_search_paths = "1"b; 256 call search_paths_$get (MRDS_SEARCHLIST, sl_control_default, "", null (), addr(local_area), sl_info_version_1, mrds_search_list_ptr, error_code); 257 loop_idx = mrds_search_list_ptr -> sl_info.num_paths; 258 end; 259 else do; 260 call absolute_pathname_ (in_path, abs_path, error_code); 261 loop_idx = 1; 262 end; 263 264 if error_code = 0 then do; 265 error_code = 1; 266 do idx = 1 to loop_idx while (error_code ^= 0); 267 if use_search_paths then abs_path = pathname_ (mrds_search_list_ptr -> sl_info.paths(idx).pathname, in_path); 268 call get_version (abs_path); 269 270 if error_code = mrds_error_$no_database then do; /* if the database was not found */ 271 272 saved_code = error_code; /* save the error_code and path, in case submodels fail */ 273 saved_path = abs_path; 274 275 /* unable to get version as a database model, 276* now try it as a submodel, adding the ".dsm" suffix */ 277 278 279 suffix_tried = "dsm"; 280 call absolute_pathname_$add_suffix (abs_path, "dsm", abs_path, error_code); 281 if error_code = 0 then do; 282 283 call get_dsm_version (); 284 285 if error_code ^= 0 then do; /* if it was not a submodel */ 286 if error_code ^= error_table_$moderr & 287 error_code ^= mrds_error_$version_1_dsm then do; /* Got a dsm but no access or old version */ 288 error_code = saved_code; 289 abs_path = saved_path; /* restore the original name */ 290 291 end; 292 end; 293 end; 294 end; 295 296 if error_code ^= 0 then do; 297 298 if error_code = mrds_error_$no_database then do; 299 mrds_path_info_ptr -> mrds_path_info.type.not_mrds = "1"b; 300 suffix_tried = "db"; 301 call absolute_pathname_$add_suffix (in_path, "db", 302 abs_path, dummy_code); 303 end; 304 305 else if error_code = mrds_error_$no_model_access | error_code = error_table_$no_info then 306 error_code = mrds_error_$no_model_access; 307 else do; 308 if error_code = error_table_$moderr then do; 309 mrds_path_info_ptr -> mrds_path_info.type.not_mrds = "0"b; 310 error_code = mrds_error_$no_model_access; 311 end; 312 else do; 313 mrds_path_info_ptr -> mrds_path_info.type.not_mrds = "1"b; 314 if error_code ^= mrds_error_$version_3_db & 315 error_code ^= mrds_error_$version_1_dsm 316 then error_code = mrds_error_$no_model_submodel; 317 end; 318 end; 319 end; 320 end; 321 end; 322 323 324 if entry_name = "get_db_version" then 325 out_path = abs_path; 326 else mrds_path_info_ptr -> mrds_path_info.absolute_path = abs_path; 327 if entry_name = "get_path_info_and_view_name" then 328 if suffix_tried = "dsm" then do; 329 call expand_pathname_$add_suffix (abs_path, suffix_tried, 330 view_dir, view_entry, saved_code); 331 if error_code = 0 332 then saved_code = error_code; 333 end; 334 else call mrds_dm_check_path (abs_path, view_dir, view_entry, 335 view_new_db, saved_code); 336 337 end; 338 339 get_version: procedure (get_version_abs_path); 340 341 /* try opening the database model at this pathname */ 342 343 dcl get_version_abs_path char (168) parameter; 344 345 call mrds_dm_check_path (get_version_abs_path, containing_dir, db_dir, new_found, error_code); 346 if error_code = 0 347 then do; 348 if ^new_found 349 then error_code = mrds_error_$version_3_db; 350 else do; 351 get_version_abs_path = rtrim (containing_dir) || ">"; 352 get_version_abs_path = rtrim (get_version_abs_path) || db_dir; 353 354 call mrds_dm_open (get_version_abs_path, 2 /* retrieval */, data_model_ptr, error_code); 355 end; 356 end; 357 if error_code = mrds_error_$no_model_access then do; 358 saved_code = error_code; /* remember access problem */ 359 get_version_abs_path = rtrim (containing_dir) || ">"; 360 get_version_abs_path = rtrim (get_version_abs_path) || db_dir; 361 362 if entry_name = "get_db_version" then ; 363 else mrds_path_info_ptr -> mrds_path_info.type.model = "1"b; 364 end; 365 366 else if error_code = 0 then do; 367 368 /* get the path from the model pointer, in case a suffix was added to the supplied path */ 369 370 call hcs_$fs_get_path_name (data_model_ptr, db_path, ldn, model_name, error_code); 371 if error_code = 0 then do; 372 373 if index (model_name, ".area.linker") ^= 0 then ; /* old version db */ 374 else get_version_abs_path = db_path; /* new version db, possiblily with suffix */ 375 376 377 /* good database path, get the header information */ 378 379 local_area_ptr = addr (header_space); 380 call mrds_dm_get_header (data_model_ptr, local_area_ptr, dmh_ptr, error_code); 381 if error_code = 0 then do; 382 383 if entry_name = "get_db_version" then 384 version = dmh_ptr -> dm_header.dmd_version; 385 else do; 386 mrds_path_info_ptr -> mrds_path_info.type.model = "1"b; 387 mrds_path_info_ptr -> mrds_path_info.mrds_version = dmh_ptr -> dm_header.dmd_version; 388 mrds_path_info_ptr -> mrds_path_info.creator_id = dmh_ptr -> dm_header.creator_id; 389 mrds_path_info_ptr -> mrds_path_info.creation_time = dmh_ptr -> dm_header.create_time; 390 end; 391 392 end; 393 394 end; 395 396 /* close the opened model */ 397 398 call mrds_dm_close (data_model_ptr, discard_code); 399 400 end; 401 402 end; 403 404 get_dsm_version: procedure (); 405 406 /* try opening a submodel using the path with ".dsm" suffix */ 407 408 call mrds_dsm_open$read (abs_path, submodel_iocb_ptr, error_code); 409 if error_code = error_table_$no_info then do; 410 saved_code = error_code; /* remember access problem */ 411 if entry_name = "get_db_version" then ; 412 else mrds_path_info_ptr -> mrds_path_info.type.submodel = "1"b; 413 end; 414 else if error_code = 0 then do; 415 416 /* good submodel pathname, get the header information */ 417 418 local_area_ptr = addr (header_space); 419 call mrds_dsm_read_header (local_area_ptr, hd_ptr, submodel_iocb_ptr, error_code); 420 if error_code = 0 421 then do; 422 if entry_name = "get_db_version" then 423 version = hd_ptr -> mrds_dsm_header.dsm_generator_version; 424 else do; 425 mrds_path_info_ptr -> mrds_path_info.type.submodel = "1"b; 426 mrds_path_info_ptr -> mrds_path_info.mrds_version = 427 hd_ptr -> mrds_dsm_header.dsm_generator_version; 428 mrds_path_info_ptr -> mrds_path_info.creator_id = 429 hd_ptr -> mrds_dsm_header.creator_id; 430 mrds_path_info_ptr -> mrds_path_info.creation_time = 431 hd_ptr -> mrds_dsm_header.date_time_generated; 432 end; 433 end; 434 435 /* close the open submodel */ 436 437 end; 438 439 call mrds_dsm_close$force (submodel_iocb_ptr); 440 441 442 end; 443 444 dcl MRDS_SEARCHLIST char (4) int static options (constant) init ("mrds"); 445 dcl abs_path char (168); /* working version of path */ 446 dcl absolute_pathname_ entry (char (*), char (*), fixed bin (35)); /* gets absolute from relative path */ 447 dcl absolute_pathname_$add_suffix entry (char (*), char (*), char (*), fixed bin (35)); /* gets abs path with suffix */ 448 dcl area condition; 449 dcl area_info_ entry (ptr, fixed bin (35)); /* gets details about area */ 450 dcl area_ptr ptr; /* pointer to users supplied area */ 451 dcl cleanup condition; /* signaled upon quit/release */ 452 dcl code_a fixed bin (35); /* temp for mrds_dsl_get_version entry */ 453 dcl code_b fixed bin (35); /* temp for get_path_info entry */ 454 dcl containing_dir char (168); 455 dcl data_model_ptr ptr; /* points to the database model */ 456 dcl db_dir char (32); 457 dcl db_path char (168); /* real path of database */ 458 dcl discard_code fixed bin (35); /* unused */ 459 dcl dummy_code fixed bin (35); 460 dcl entry_name char (32); /* Entry point used */ 461 dcl error_code fixed bin (35); /* error status encoding */ 462 dcl error_table_$area_too_small fixed bin (35) ext; /* allocate failed */ 463 dcl error_table_$badcall fixed bin (35) ext;/* null area ptr */ 464 dcl error_table_$dirlong fixed bin (35) ext static; 465 dcl error_table_$moderr fixed bin (35) ext static; 466 dcl error_table_$no_info fixed bin (35) ext;/* insufficient access to return any info */ 467 dcl error_table_$unimplemented_version fixed bin (35) ext; /* bad structure_version */ 468 dcl expand_pathname_$add_suffix entry (char (*), char (*), char (*), char (*), fixed bin (35)); 469 dcl hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)); /* gets path from ptr */ 470 dcl hd_ptr ptr; /* points to submodel header info */ 471 dcl header_space area (1000); /* area to hold dm_header structure */ 472 dcl idx fixed bin; /* idx for search path loop */ 473 dcl in_path char (168); /* the input relative path */ 474 dcl in_path_A char (168); /* parameter for get version entry */ 475 dcl in_path_B char (*); /* parameter for get path entry */ 476 dcl ldn fixed bin; /* char length of db_path */ 477 dcl local_area area (2048); 478 dcl local_area_ptr ptr; /* points to header_space area */ 479 dcl loop_idx fixed bin; /* idx for list of search path infos */ 480 dcl model_name char (32); /* name of model segment */ 481 dcl mrds_dm_close entry (ptr, fixed bin (35)); /* closes data model */ 482 dcl mrds_dm_get_header entry (ptr, ptr, ptr, fixed bin (35)); /* gets header inbfo from model */ 483 dcl mrds_dm_open entry (char (168), fixed bin, ptr, fixed bin (35)); /* opens data base model */ 484 dcl mrds_dm_check_path entry (char (*), char (*), char (*), bit (1), fixed bin (35)); 485 dcl mrds_dsm_open$read entry (char (*), ptr, fixed bin (35)); /* opens a submodel for reading */ 486 dcl mrds_dsm_read_header entry (ptr, ptr, ptr, fixed bin (35)); /* reads a submodel header record */ 487 dcl mrds_dsm_close$force entry (ptr); /* closes a submodel without returning an error code */ 488 dcl mrds_error_$no_model_access fixed bin (35) ext; /* no r access on db_model */ 489 dcl mrds_error_$no_model_submodel fixed bin (35) ext; /* nothing found */ 490 dcl mrds_error_$not_freeing_area fixed bin (35) ext; /* no freeing attr to area */ 491 dcl out_path char (168); /* path returned to user */ 492 dcl mrds_error_$no_database fixed bin (35) ext static; 493 dcl mrds_error_$version_3_db fixed bin (35) external static; 494 dcl mrds_error_$version_1_dsm fixed bin (35) external static; 495 dcl mrds_search_list_ptr ptr; /* pointer to list of search_path infos */ 496 dcl new_found bit (1); 497 dcl pathname_ entry (char(*), char(*)) returns(char(168)); 498 dcl saved_code fixed bin (35); /* temp for error error_code */ 499 dcl saved_path char (168); /* temp for remembering path */ 500 dcl search builtin; 501 dcl search_paths_$get entry (char(*), bit(36), char(*), ptr, ptr, fixed bin, ptr, fixed bin(35)); 502 dcl structure_version fixed bin; /* desired version of returned structure */ 503 dcl submodel_iocb_ptr ptr; /* pointer to the submodel's iocb */ 504 dcl suffix_tried char (3); /* Last suffixed tried in db match */ 505 dcl sys_info$max_seg_size fixed bin (35) ext;/* largest segment */ 506 dcl use_search_paths bit (1); 507 dcl version fixed bin; /* the version number of the database */ 508 dcl view_dir char (*); /* directory of in_path after expansion */ 509 dcl view_entry char (*); /* entry name of in_path, maybe with suffix */ 510 dcl view_new_db bit (1); /* scratch bit for mrds_dm_check_path */ 511 dcl work_area area (sys_info$max_seg_size) based (area_ptr); /* overlay for users area */ 512 dcl (addr, empty, index, length, null, rtrim, unspec) builtin; 513 dcl 1 my_area_info like area_info; /* local copy */ 514 1 1 /* BEGIN INCLUDE FILE mrds_path_info.incl.pl1 - - Jim Gray 81-01-22 */ 1 2 1 3 /* HISTORY: 1 4* 1 5* 81-01-22 Jim Gray : originaly created for the dsl_$get_path_info interface, 1 6* a slight extension to the undocumented mrds_dsl_get_version$header. 1 7* 1 8**/ 1 9 1 10 /* DESCRIPTION: 1 11* 1 12* This structure returns information about a relative pathname, given 1 13* to a pathname accepting mrds interface. The information returned 1 14* is the absolute pathname, plus in the case that 1 15* the relative path points to a mrds database or submodel 1 16* whether it is a model or a submodel, the mrds version of 1 17* the model or submodel, it's creator, and the time of creation. 1 18* 1 19**/ 1 20 1 21 1 22 declare 1 mrds_path_info aligned based (mrds_path_info_ptr), 1 23 2 version fixed bin, /* version number for this structure */ 1 24 2 absolute_path char (168), /* the absolute path from the input relative path */ 1 25 2 type, 1 26 3 not_mrds bit (1) unal, /* on => path not to model or submodel */ 1 27 3 model bit (1) unal, /* on => path to database model, thus possible .db suffix */ 1 28 3 submodel bit (1) unal, /* on => path to submodel, thus possible .dsm suffix */ 1 29 3 mbz1 bit (33) unal, 1 30 2 mrds_version fixed bin, /* the mrds version number of the model or submodel */ 1 31 2 creator_id char (32), /* the person.project.tag of the creator */ 1 32 2 creation_time fixed bin (71), /* convert date to binary form of time model/submodel created */ 1 33 2 mbz2 bit (36) unal ; 1 34 1 35 1 36 declare mrds_path_info_ptr ptr ; 1 37 1 38 declare mrds_path_info_structure_version fixed bin init (1) int static options (constant) ; 1 39 1 40 /* END INCLUDE FILE mrds_path_info.incl.pl1 */ 515 516 2 1 /* BEGIN INCLUDE FILE mrds_dm_header.incl.pl1 2 2* 2 3* Created October, 1975 for release in MR 4.0 2 4* Modified December, 1975 to provide more info. */ 2 5 2 6 dcl 1 dm_header based (dmh_ptr), /* data model header */ 2 7 2 dm_header_id char (8), /* identification as data model header */ 2 8 2 dmd_version fixed bin, /* version number of dmd_ creating this model */ 2 9 2 creator_id char (32), /* group id of creator */ 2 10 2 create_time fixed bin (71); /* time of creation */ 2 11 2 12 dcl dmh_ptr ptr; 2 13 2 14 /* END INCLUDE FILE mrds_dm_header.incl.pl1 */ 2 15 517 518 3 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 3 2 3 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 3 4 3 5 dcl area_infop ptr; 3 6 3 7 dcl 1 area_info aligned based (area_infop), 3 8 2 version fixed bin, /* version number for this structure is 1 */ 3 9 2 control aligned like area_control, /* control bits for the area */ 3 10 2 owner char (32) unal, /* creator of the area */ 3 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 3 12 2 size fixed bin (18), /* size of the area in words */ 3 13 2 version_of_area fixed bin, /* version of area (returned only) */ 3 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 3 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 3 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 3 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 3 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 3 19 3 20 dcl 1 area_control aligned based, 3 21 2 extend bit (1) unal, /* says area is extensible */ 3 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 3 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 3 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 3 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 3 26 2 system bit (1) unal, /* says area is managed by system */ 3 27 2 pad bit (30) unal; 3 28 3 29 /* END INCLUDE FILE area_info.incl.pl1 */ 519 520 4 1 /* BEGIN INCLUDE FILE mrds_dsm_header.incl.pl1 4 2* 4 3*This include file is for internal MRDS use only - it is not to be 4 4*documented in any user manual. 4 5* 4 6*81-06-01 Davids: This is a copy of the mrds_dsm_header_str 4 7*include file, it is to be used by all mrds routines. The 4 8*structure name has been changed from dsm_header_record to 4 9*mrds_dsm_header to avoid conflicts when both this include file 4 10*and mrds_dsm_header_str are included (mrds_dsm_dsmd). 4 11**/ 4 12 4 13 dcl 1 mrds_dsm_header based, /* header structure for a MRDS submodel */ 4 14 2 dsm_generator_version fixed bin init (0), /* version number of submodel created by CMDSM */ 4 15 2 date_time_generated fixed bin (71) init (0), /* convert data to binary form of creation time */ 4 16 2 database_pn char (168) init (""), /* pathname of database this submodel is valid for */ 4 17 2 name char (32) init (""), /* identifying name for this header structure */ 4 18 2 num_of_relations fixed bin (35) init (0), /* number of relations in submodel view of database */ 4 19 2 creator_id char (32) init ("") ; /* the person.project.tag of the submodel creator */ 4 20 4 21 /* END INCLUDE FILE mrds_dsm_header.incl.pl1 */ 521 522 5 1 /* BEGIN INCLUDE FILE . . . sl_info.incl.pl1 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(87-11-16,Lippard), approve(87-12-21,MCR7822), 5 7* audit(88-02-09,Blair), install(88-02-16,MR12.2-1023): 5 8* Modified to add INITIATED_SEGS type. 5 9* 2) change(87-11-19,Lippard), approve(87-12-21,MCR7822), 5 10* audit(88-02-09,Blair), install(88-02-16,MR12.2-1023): 5 11* Added uid to sl_info structure. 5 12* END HISTORY COMMENTS */ 5 13 5 14 5 15 declare 1 sl_info aligned based (sl_info_p), 5 16 2 version fixed binary, /* Must be 1 */ 5 17 2 num_paths fixed binary, /* Number of search paths */ 5 18 2 change_index_p pointer, /* Pointer to search list's update count */ 5 19 2 change_index fixed binary (71), /* This search list's update count */ 5 20 2 pad1 (6) bit (36), /* Must be zero */ 5 21 2 paths (sl_info_num_paths refer (sl_info.num_paths)), 5 22 3 type fixed binary, /* Type of search path */ 5 23 3 code fixed binary (35), /* Standard status code of search path */ 5 24 3 uid bit (36), /* Unique ID */ 5 25 3 pathname char (168) unaligned; /* Search pathname */ 5 26 5 27 declare sl_info_num_paths fixed binary; 5 28 declare sl_info_p pointer; 5 29 declare sl_info_version_1 fixed binary internal static options (constant) initial (1); 5 30 5 31 /* Keyword Types */ 5 32 5 33 declare ABSOLUTE_PATH fixed binary internal static options (constant) initial (0); 5 34 declare UNEXPANDED_PATH fixed binary internal static options (constant) initial (1); 5 35 declare REFERENCING_DIR fixed binary internal static options (constant) initial (3); 5 36 declare WORKING_DIR fixed binary internal static options (constant) initial (4); 5 37 declare PROCESS_DIR fixed binary internal static options (constant) initial (5); 5 38 declare HOME_DIR fixed binary internal static options (constant) initial (6); 5 39 declare INITIATED_SEGS fixed binary internal static options (constant) initial (7); 5 40 5 41 /* END INCLUDE FILE . . . sl_info.incl.pl1 */ 523 524 6 1 /* BEGIN INCLUDE FILE . . . sl_control_s.incl.pl1 */ 6 2 6 3 declare 1 sl_control_s unaligned based (addr (sl_control)), 6 4 2 af_pathname bit (1), /* "1"b => expand active functions */ 6 5 2 pad1 bit (1), /* Must be zero */ 6 6 2 key_ref_dir bit (1), /* "1"b => expand -referencing_dir keyword */ 6 7 2 key_work_dir bit (1), /* "1"b => expand -working_dir keyword */ 6 8 2 key_proc_dir bit (1), /* "1"b => expand -process_dir keyword */ 6 9 2 key_home_dir bit (1), /* "1"b => expand -home_dir keyword */ 6 10 2 pad2 bit (30); /* Must be zero */ 6 11 6 12 declare sl_control bit (36); 6 13 declare sl_control_default bit (36) internal static options (constant) initial ("101111"b); 6 14 6 15 /* END INCLUDE FILE . . . sl_control_s.incl.pl1 */ 525 526 527 528 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/08/88 1528.4 mrds_dsl_get_version.pl1 >spec>install>1034>mrds_dsl_get_version.pl1 515 1 10/14/83 1608.8 mrds_path_info.incl.pl1 >ldd>include>mrds_path_info.incl.pl1 517 2 10/14/83 1608.6 mrds_dm_header.incl.pl1 >ldd>include>mrds_dm_header.incl.pl1 519 3 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 521 4 10/14/83 1608.9 mrds_dsm_header.incl.pl1 >ldd>include>mrds_dsm_header.incl.pl1 523 5 02/18/88 2023.8 sl_info.incl.pl1 >ldd>include>sl_info.incl.pl1 525 6 01/09/79 1617.9 sl_control_s.incl.pl1 >ldd>include>sl_control_s.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. MRDS_SEARCHLIST 000001 constant char(4) initial packed unaligned dcl 444 set ref 256* abs_path 000100 automatic char(168) packed unaligned dcl 445 set ref 185* 260* 267* 268* 273 280* 280* 289* 301* 324 326 329* 334* 408* absolute_path 1 based char(168) level 2 dcl 1-22 set ref 326* absolute_pathname_ 000010 constant entry external dcl 446 ref 260 absolute_pathname_$add_suffix 000012 constant entry external dcl 447 ref 280 301 addr builtin function dcl 512 ref 200 200 256 256 379 418 area 000152 stack reference condition dcl 448 ref 212 225 area_control based structure level 1 dcl 3-20 area_info based structure level 1 dcl 3-7 area_info_ 000014 constant entry external dcl 449 ref 200 area_ptr parameter pointer dcl 450 ref 164 172 193 198 219 224 areap 16 006466 automatic pointer level 2 dcl 513 set ref 198* cleanup 000160 stack reference condition dcl 451 ref 217 code_a parameter fixed bin(35,0) dcl 452 set ref 86 86 149* 157* code_b parameter fixed bin(35,0) dcl 453 set ref 164 172 178* 186* 242* containing_dir 000166 automatic char(168) packed unaligned dcl 454 set ref 345* 351 359 control 1 006466 automatic structure level 2 dcl 513 create_time 14 based fixed bin(71,0) level 2 dcl 2-6 ref 389 creation_time 66 based fixed bin(71,0) level 2 dcl 1-22 set ref 389* 430* creator_id 3 based char(32) level 2 in structure "dm_header" packed packed unaligned dcl 2-6 in procedure "get_db_version" ref 388 creator_id 55 based char(32) level 2 in structure "mrds_path_info" dcl 1-22 in procedure "get_db_version" set ref 388* 428* creator_id 67 based char(32) initial level 2 in structure "mrds_dsm_header" packed packed unaligned dcl 4-13 in procedure "get_db_version" ref 428 data_model_ptr 000240 automatic pointer dcl 455 set ref 354* 370* 380* 398* date_time_generated 2 based fixed bin(71,0) initial level 2 dcl 4-13 ref 430 db_dir 000242 automatic char(32) packed unaligned dcl 456 set ref 345* 352 360 db_path 000252 automatic char(168) packed unaligned dcl 457 set ref 370* 374 discard_code 000324 automatic fixed bin(35,0) dcl 458 set ref 398* dm_header based structure level 1 unaligned dcl 2-6 dmd_version 2 based fixed bin(17,0) level 2 dcl 2-6 ref 383 387 dmh_ptr 006512 automatic pointer dcl 2-12 set ref 380* 383 387 388 389 dsm_generator_version based fixed bin(17,0) initial level 2 dcl 4-13 ref 422 426 dummy_code 000325 automatic fixed bin(35,0) dcl 459 set ref 301* empty builtin function dcl 512 ref 471 477 entry_name 000326 automatic char(32) packed unaligned dcl 460 set ref 147* 167* 174* 324 327 362 383 411 422 error_code 000336 automatic fixed bin(35,0) dcl 461 set ref 157 186* 193* 200* 201 201* 206* 213* 233 242 256* 260* 264 265* 266 270 272 280* 281 285 286 286 288* 296 298 305 305 305* 308 310* 314 314 314* 331 331 345* 346 348* 354* 357 358 366 370* 371 380* 381 408* 409 410 414 419* 420 error_table_$area_too_small 000016 external static fixed bin(35,0) dcl 462 ref 213 error_table_$badcall 000020 external static fixed bin(35,0) dcl 463 ref 193 error_table_$dirlong 000022 external static fixed bin(35,0) dcl 464 ref 149 178 error_table_$moderr 000024 external static fixed bin(35,0) dcl 465 ref 286 308 error_table_$no_info 000026 external static fixed bin(35,0) dcl 466 ref 305 409 error_table_$unimplemented_version 000030 external static fixed bin(35,0) dcl 467 ref 206 expand_pathname_$add_suffix 000032 constant entry external dcl 468 ref 329 get_version_abs_path parameter char(168) packed unaligned dcl 343 set ref 339 345* 351* 352* 352 354* 359* 360* 360 374* hcs_$fs_get_path_name 000034 constant entry external dcl 469 ref 370 hd_ptr 000340 automatic pointer dcl 470 set ref 419* 422 426 428 430 header_space 000342 automatic area(1000) dcl 471 set ref 379 418 471* idx 002312 automatic fixed bin(17,0) dcl 472 set ref 266* 267* in_path 002313 automatic char(168) packed unaligned dcl 473 set ref 148 152* 176 181* 254 260* 267* 301* in_path_A parameter char(168) packed unaligned dcl 474 ref 86 86 148 152 in_path_B parameter char packed unaligned dcl 475 ref 164 172 176 181 index builtin function dcl 512 ref 373 ldn 002365 automatic fixed bin(17,0) dcl 476 set ref 370* length builtin function dcl 512 ref 148 148 176 176 local_area 002366 automatic area(2048) dcl 477 set ref 256 256 477* local_area_ptr 006366 automatic pointer dcl 478 set ref 379* 380* 418* 419* loop_idx 006370 automatic fixed bin(17,0) dcl 479 set ref 257* 261* 266 model 53(01) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 363* 386* model_name 006371 automatic char(32) packed unaligned dcl 480 set ref 370* 373 mrds_dm_check_path 000044 constant entry external dcl 484 ref 334 345 mrds_dm_close 000036 constant entry external dcl 481 ref 398 mrds_dm_get_header 000040 constant entry external dcl 482 ref 380 mrds_dm_open 000042 constant entry external dcl 483 ref 354 mrds_dsm_close$force 000052 constant entry external dcl 487 ref 439 mrds_dsm_header based structure level 1 unaligned dcl 4-13 mrds_dsm_open$read 000046 constant entry external dcl 485 ref 408 mrds_dsm_read_header 000050 constant entry external dcl 486 ref 419 mrds_error_$no_database 000062 external static fixed bin(35,0) dcl 492 ref 270 298 mrds_error_$no_model_access 000054 external static fixed bin(35,0) dcl 488 ref 305 305 310 357 mrds_error_$no_model_submodel 000056 external static fixed bin(35,0) dcl 489 ref 314 mrds_error_$not_freeing_area 000060 external static fixed bin(35,0) dcl 490 ref 201 mrds_error_$version_1_dsm 000066 external static fixed bin(35,0) dcl 494 ref 286 314 mrds_error_$version_3_db 000064 external static fixed bin(35,0) dcl 493 ref 314 348 mrds_path_info based structure level 1 dcl 1-22 set ref 219 224 227* mrds_path_info_ptr parameter pointer dcl 1-36 set ref 164 172 188* 218 219 220* 224* 227 228 299 309 313 326 363 386 387 388 389 412 425 426 428 430 mrds_path_info_structure_version constant fixed bin(17,0) initial dcl 1-38 ref 206 228 mrds_search_list_ptr 006402 automatic pointer dcl 495 set ref 256* 257 267 mrds_version 54 based fixed bin(17,0) level 2 dcl 1-22 set ref 387* 426* my_area_info 006466 automatic structure level 1 unaligned dcl 513 set ref 196* 200 200 new_found 006404 automatic bit(1) packed unaligned dcl 496 set ref 345* 348 no_freeing 1(04) 006466 automatic bit(1) level 3 packed packed unaligned dcl 513 set ref 201 not_mrds 53 based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 299* 309* 313* null builtin function dcl 512 ref 188 193 218 220 256 256 num_paths 1 based fixed bin(17,0) level 2 dcl 5-15 ref 257 out_path parameter char(168) packed unaligned dcl 491 set ref 86 86 324* pathname 17 based char(168) array level 3 packed packed unaligned dcl 5-15 set ref 267* pathname_ 000070 constant entry external dcl 497 ref 267 paths 14 based structure array level 2 dcl 5-15 rtrim builtin function dcl 512 ref 148 152 176 181 351 352 359 360 saved_code 006405 automatic fixed bin(35,0) dcl 498 set ref 272* 288 329* 331* 334* 358* 410* saved_path 006406 automatic char(168) packed unaligned dcl 499 set ref 273* 289 search builtin function dcl 500 ref 254 search_paths_$get 000072 constant entry external dcl 501 ref 256 sl_control_default 000000 constant bit(36) initial packed unaligned dcl 6-13 set ref 256* sl_info based structure level 1 dcl 5-15 sl_info_version_1 000020 constant fixed bin(17,0) initial dcl 5-29 set ref 256* structure_version parameter fixed bin(17,0) dcl 502 ref 164 172 206 submodel 53(02) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 412* 425* submodel_iocb_ptr 006460 automatic pointer dcl 503 set ref 408* 419* 439* suffix_tried 006462 automatic char(3) packed unaligned dcl 504 set ref 252* 279* 300* 327 329* type 53 based structure level 2 dcl 1-22 unspec builtin function dcl 512 set ref 196* 227* use_search_paths 006463 automatic bit(1) packed unaligned dcl 506 set ref 253* 255* 267 version 006466 automatic fixed bin(17,0) level 2 in structure "my_area_info" dcl 513 in procedure "get_db_version" set ref 197* version based fixed bin(17,0) level 2 in structure "mrds_path_info" dcl 1-22 in procedure "get_db_version" set ref 228* version parameter fixed bin(17,0) dcl 507 in procedure "get_db_version" set ref 86 86 153* 383* 422* view_dir parameter char packed unaligned dcl 508 set ref 164 329* 334* view_entry parameter char packed unaligned dcl 509 set ref 164 329* 334* view_new_db 006464 automatic bit(1) packed unaligned dcl 510 set ref 334* work_area based area dcl 511 ref 219 224 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ABSOLUTE_PATH internal static fixed bin(17,0) initial dcl 5-33 HOME_DIR internal static fixed bin(17,0) initial dcl 5-38 INITIATED_SEGS internal static fixed bin(17,0) initial dcl 5-39 PROCESS_DIR internal static fixed bin(17,0) initial dcl 5-37 REFERENCING_DIR internal static fixed bin(17,0) initial dcl 5-35 UNEXPANDED_PATH internal static fixed bin(17,0) initial dcl 5-34 WORKING_DIR internal static fixed bin(17,0) initial dcl 5-36 area_info_version_1 internal static fixed bin(17,0) initial dcl 3-3 area_infop automatic pointer dcl 3-5 sl_control automatic bit(36) packed unaligned dcl 6-12 sl_control_s based structure level 1 packed packed unaligned dcl 6-3 sl_info_num_paths automatic fixed bin(17,0) dcl 5-27 sl_info_p automatic pointer dcl 5-28 sys_info$max_seg_size external static fixed bin(35,0) dcl 505 NAMES DECLARED BY EXPLICIT CONTEXT. GET_PATH_INFO_COMMON 000237 constant label dcl 176 ref 168 common 000446 constant entry internal dcl 246 ref 155 233 get_db_version 000070 constant entry external dcl 86 get_dsm_version 001525 constant entry internal dcl 404 ref 283 get_path_info 000215 constant entry external dcl 172 get_path_info_and_view_name 000153 constant entry external dcl 164 get_version 001131 constant entry internal dcl 339 ref 268 mrds_dsl_get_version 000101 constant entry external dcl 86 skip_allocate 000440 constant label dcl 233 ref 214 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2454 2550 2057 2464 Length 3120 2057 74 334 375 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME get_db_version 3518 external procedure is an external procedure. on unit on line 212 64 on unit on unit on line 217 64 on unit common internal procedure shares stack frame of external procedure get_db_version. get_version internal procedure shares stack frame of external procedure get_db_version. get_dsm_version internal procedure shares stack frame of external procedure get_db_version. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME get_db_version 000100 abs_path get_db_version 000166 containing_dir get_db_version 000240 data_model_ptr get_db_version 000242 db_dir get_db_version 000252 db_path get_db_version 000324 discard_code get_db_version 000325 dummy_code get_db_version 000326 entry_name get_db_version 000336 error_code get_db_version 000340 hd_ptr get_db_version 000342 header_space get_db_version 002312 idx get_db_version 002313 in_path get_db_version 002365 ldn get_db_version 002366 local_area get_db_version 006366 local_area_ptr get_db_version 006370 loop_idx get_db_version 006371 model_name get_db_version 006402 mrds_search_list_ptr get_db_version 006404 new_found get_db_version 006405 saved_code get_db_version 006406 saved_path get_db_version 006460 submodel_iocb_ptr get_db_version 006462 suffix_tried get_db_version 006463 use_search_paths get_db_version 006464 view_new_db get_db_version 006466 my_area_info get_db_version 006512 dmh_ptr get_db_version THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op shorten_stack ext_entry ext_entry_desc int_entry set_chars_eis index_chars_eis op_alloc_ op_freen_ op_empty_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ absolute_pathname_$add_suffix area_info_ expand_pathname_$add_suffix hcs_$fs_get_path_name mrds_dm_check_path mrds_dm_close mrds_dm_get_header mrds_dm_open mrds_dsm_close$force mrds_dsm_open$read mrds_dsm_read_header pathname_ search_paths_$get THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$area_too_small error_table_$badcall error_table_$dirlong error_table_$moderr error_table_$no_info error_table_$unimplemented_version mrds_error_$no_database mrds_error_$no_model_access mrds_error_$no_model_submodel mrds_error_$not_freeing_area mrds_error_$version_1_dsm mrds_error_$version_3_db LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 471 000053 477 000056 86 000063 147 000107 148 000112 149 000130 150 000133 152 000134 153 000137 155 000140 157 000141 159 000144 164 000145 167 000204 168 000207 172 000210 174 000234 176 000237 178 000256 179 000261 181 000262 185 000265 186 000270 188 000272 193 000274 196 000303 197 000306 198 000310 200 000313 201 000326 206 000337 212 000347 213 000363 214 000366 217 000371 218 000405 219 000413 220 000415 222 000421 224 000422 225 000432 227 000433 228 000436 233 000440 242 000443 244 000445 246 000446 252 000447 253 000451 254 000452 255 000464 256 000466 257 000535 258 000540 260 000541 261 000561 264 000563 265 000565 266 000567 267 000601 268 000630 270 000632 272 000636 273 000637 279 000642 280 000644 281 000671 283 000673 285 000674 286 000676 288 000703 289 000705 296 000710 298 000712 299 000715 300 000722 301 000724 303 000751 305 000752 308 000761 309 000763 310 000770 311 000772 313 000773 314 001000 320 001006 324 001010 326 001022 327 001030 329 001040 331 001072 333 001075 334 001076 337 001130 339 001131 345 001133 346 001163 348 001165 351 001174 352 001224 354 001253 357 001273 358 001277 359 001300 360 001330 362 001357 363 001365 364 001372 366 001373 370 001375 371 001425 373 001427 374 001437 379 001444 380 001446 381 001463 383 001465 386 001476 387 001503 388 001506 389 001511 398 001513 402 001524 404 001525 408 001526 409 001547 410 001553 411 001554 412 001561 413 001566 414 001567 418 001571 419 001573 420 001607 422 001611 425 001621 426 001626 428 001630 430 001634 439 001636 442 001645 ----------------------------------------------------------- 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