COMPILATION LISTING OF SEGMENT load_doc_db_dbf Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 10/06/83 1339.1 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 /* format: style2,ind3 */ 7 load_doc_db_dbf: 8 proc; 9 10 /* 11*DESCRIPTION: 12* 13* This command takes the db file and stores it into the 14* online_doc database. Fields are extracted from an input file of 15* a special format, described below. 16**/ 17 18 /* 19*HISTORY: 20* 21*Written by Jim Paradise, 1979. 22*02/25/81 by M. Pierret: added cu_ calls, added get_array_of_lines-type 23* processing, and adjusted to new format of data base. 24*03/04/81 by M. Pierret: added end condition in get_array_of_lines. 25*06/04/81 by M. Pierret: canonical names ("-" & " " -> "_"); 26* fixing trailing order no bug. 27*09/30/83 by Matthew Pierret: Changed short_name_list from char (128) to (1024). 28**/ 29 30 /* DESCRIPTION of PARAMETERS: 31* 32*mrds_db_path - pathname to the online_doc.db database, of the form 33* described in online_doc.incl.pl1. 34* 35*input_file - ASSCII file containing data about manuals. The file is 36* assumed to be formatted as follows: 37* 38*Order No.: AANN-NNA 39*Manual Name: ____ 40*Short Name: ____ 41*Description: ____ 42* _____ 43*Audience: ____ 44* _____ 45*Table of Contents: ____ 46* _____ 47*New Features: ____ 48* _____ 49*Release Supported: ____ 50* _____ 51* 52**/ 53 /* ERRORS: 54* 55* Any of the errors possible from trying to read a input segment via vfile_ 56* unstructured read. 57* Any of the errors possible from trying to store data into a MRDS database. 58* 59**/ 60 61 /* START OF DECLARATIONS */ 62 63 dcl sysprint file; 64 65 /* Automatic */ 66 67 dcl line_buffer char (1024); 68 dcl input_file char (168); 69 dcl mrds_db_path char (168); 70 dcl short_name_list char (1024) varying; 71 dcl field_value char (1024) varying; 72 dcl temp_varying_string char (1024) varying; 73 74 dcl ( 75 input_file_is_open init ("0"b), 76 is_active_function, 77 all_lines_have_been_processed 78 ) bit (1) aligned; 79 80 dcl (arg_len, return_arg_len, current_input_line_length) 81 fixed bin (21); 82 dcl (code, dbi) fixed bin (35); 83 dcl (nargs, current_input_line_number, record_count) 84 fixed bin init (0); 85 86 dcl (iocb_ptr, arg_ptr, return_arg_ptr, input_line_ptr, field_value_ptr) 87 ptr; 88 89 /* Based */ 90 91 dcl arg char (arg_len) based (arg_ptr); 92 dcl input_line char (current_input_line_length) based (input_line_ptr); 93 94 /* Builtin */ 95 96 dcl (addr, after, min, substr, length, index, null) 97 builtin; 98 99 /* Constant */ 100 101 dcl myname char (15) init ("load_doc_db_dbf") int static options (constant); 102 dcl LIMIT_TO_STOP_INFINITE_LOOPING 103 init (99999) fixed bin int static options (constant); 104 dcl NL char (1) init (" 105 ") int static options (constant); 106 dcl LOWER_CASE_ALPHA char (26) int static options (constant) init ("abcdefghijklmnopqrstuvwxyz"); 107 dcl UPPER_CASE_ALPHA char (26) int static options (constant) init ("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 108 109 /* Entry */ 110 111 dcl absolute_pathname_ entry (char (*), char (*), fixed bin (35)); 112 dcl absolute_pathname_$add_suffix 113 entry (char (*), char (*), char (*), fixed bin (35)); 114 dcl com_err_ entry options (variable); 115 dcl cu_$arg_count entry (fixed bin); 116 dcl cu_$af_return_arg entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 117 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 118 dcl ioa_ entry options (variable); 119 dcl iox_$attach_ioname entry (char (*), ptr, char (*), ptr, fixed (35)); 120 dcl iox_$open entry (ptr, fixed, bit (1) aligned, fixed (35)); 121 dcl iox_$get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)); 122 dcl iox_$close entry (ptr, fixed (35)); 123 dcl iox_$detach_iocb entry (ptr, fixed (35)); 124 dcl dsl_$open entry options (variable); 125 dcl dsl_$store entry options (variable); 126 dcl dsl_$close entry options (variable); 127 128 /* External */ 129 130 dcl ( 131 mdbm_error_$dup_store, 132 error_table_$not_act_fnc 133 ) fixed bin (35) ext static; 134 135 /* END OF DECLARATIONS */ 136 137 /* Get the two arguments to this command: mrds_db_path and input_file. 138* Return if the arguments are not found or if they refer to objects that 139* do not exist. */ 140 141 call cu_$af_return_arg (nargs, return_arg_ptr, return_arg_len, code); 142 if code = 0 143 then is_active_function = "1"b; 144 else if code = error_table_$not_act_fnc 145 then is_active_function = "0"b; 146 else 147 do; 148 call com_err_ (code, myname); 149 return; 150 end; 151 152 if nargs ^= 2 | is_active_function 153 then 154 do; 155 call com_err_ (0, myname, "Usage: ^a ", myname); 156 return; 157 end; 158 159 call cu_$arg_ptr (1, arg_ptr, arg_len, code); 160 call absolute_pathname_$add_suffix (arg, "db", mrds_db_path, code); 161 if code ^= 0 162 then 163 do; 164 call com_err_ (code, myname, "^a", arg); 165 return; 166 end; 167 168 call cu_$arg_ptr (2, arg_ptr, arg_len, code); 169 call absolute_pathname_ (arg, input_file, code); 170 if code ^= 0 171 then 172 do; 173 call com_err_ (code, myname, "^a", arg); 174 return; 175 end; 176 177 178 179 /* open the MRDS database */ 180 181 182 call dsl_$open (mrds_db_path, dbi, 4, code); 183 if code ^= 0 184 then 185 do; 186 call com_err_ (code, myname, "Database path ^a.", mrds_db_path); 187 return; 188 end; 189 190 full_name_rel.manual_number = 0; /* start at zero and increment by one for each manual */ 191 192 /* Loop through the records in the input file, creating tuples out of 193* the data in the input file and storing that data in the database. */ 194 195 input_line_ptr = addr (line_buffer); 196 all_lines_have_been_processed = "0"b; 197 198 do record_count = 1 to LIMIT_TO_STOP_INFINITE_LOOPING while (^all_lines_have_been_processed); 199 200 field_value = ""; 201 call GET_NEXT_INPUT_LINE (code); 202 203 call GET_NEXT_FIELD (ORDER_NUMBER_FIELD_ID, MANUAL_NAME_FIELD_ID, field_value, code); 204 if code ^= 0 205 then call FILE_ERROR (code, ORDER_NUMBER_FIELD_ID); 206 207 if length (field_value) ^= 4 & length (field_value) ^= 7 & length (field_value) ^= 8 208 then call FORMAT_ERROR (ORDER_NUMBER_FIELD_ID); 209 else 210 do; 211 full_name_rel.order_number = substr (field_value, 1, 4); 212 field_value = field_value || " " /* spaces */; 213 full_name_rel.revision = substr (field_value, 6, 3); 214 end; 215 216 call GET_NEXT_FIELD (MANUAL_NAME_FIELD_ID, SHORT_NAME_FIELD_ID, field_value, code); 217 if code ^= 0 218 then call FILE_ERROR (code, MANUAL_NAME_FIELD_ID); 219 else 220 do; 221 full_name_rel.full_name = field_value; 222 name_rel.name = CANONICALIZE_NAME (field_value); 223 end; 224 225 226 call GET_NEXT_FIELD (SHORT_NAME_FIELD_ID, DESCRIPTION_FIELD_ID, field_value, code); 227 if code ^= 0 228 then call FILE_ERROR (code, SHORT_NAME_FIELD_ID); 229 else short_name_list = field_value; 230 231 call GET_NEXT_FIELD (DESCRIPTION_FIELD_ID, AUDIENCE_FIELD_ID, field_value, code); 232 if code ^= 0 233 then call FILE_ERROR (code, DESCRIPTION_FIELD_ID); 234 else info_rel.description = field_value; 235 236 call GET_NEXT_FIELD (AUDIENCE_FIELD_ID, TOC_FIELD_ID, field_value, code); 237 if code ^= 0 238 then call FILE_ERROR (code, AUDIENCE_FIELD_ID); 239 else info_rel.audience = field_value; 240 241 call GET_NEXT_FIELD (TOC_FIELD_ID, NEW_FEATURES_FIELD_ID, field_value, code); 242 if code ^= 0 243 then call FILE_ERROR (code, TOC_FIELD_ID); 244 else info_rel.table_of_contents = field_value; 245 246 call GET_NEXT_FIELD (NEW_FEATURES_FIELD_ID, RELEASE_SUPPORTED_FIELD_ID, field_value, code); 247 if code ^= 0 248 then call FILE_ERROR (code, NEW_FEATURES_FIELD_ID); 249 else info_rel.new_features = field_value; 250 251 call GET_NEXT_FIELD (RELEASE_SUPPORTED_FIELD_ID, ORDER_NUMBER_FIELD_ID, field_value, code); 252 if code ^= 0 253 then call FILE_ERROR (code, RELEASE_SUPPORTED_FIELD_ID); 254 else full_name_rel.release_supported = field_value; 255 256 257 call PUT_DATA_IN_DB (); 258 259 260 END_LOOP: 261 end; 262 263 call FINISH (); 264 RETURN: 265 return; 266 267 /* Finish and error handling */ 268 269 FINISH: 270 proc (); 271 272 273 call dsl_$close (dbi, code); 274 275 call iox_$close (iocb_ptr, code); 276 277 call iox_$detach_iocb (iocb_ptr, code); 278 279 goto RETURN; 280 281 end FINISH; 282 283 FORMAT_ERROR: 284 proc (p_field_idx); 285 dcl p_field_idx fixed bin; 286 287 call 288 com_err_ (0, myname, 289 "Unexpected format encountered scanning for ^a field.^/Current line (line ^d) is: ^a^/Skipping to next record.", 290 FIELD_NAME (p_field_idx), current_input_line_number, input_line); 291 goto END_LOOP; 292 293 end FORMAT_ERROR; 294 295 FILE_ERROR: 296 proc (p_code, p_field_idx); 297 298 dcl p_code fixed bin (35); 299 dcl p_field_idx fixed bin; 300 301 call 302 com_err_ (p_code, myname, "^/Error encountered scanning for ^a field.^/Current line (line ^d) is: ^a.", 303 FIELD_NAME (p_field_idx), current_input_line_number, input_line); 304 call FINISH (); 305 goto RETURN; 306 307 end FILE_ERROR; 308 309 310 STORE_ERROR: 311 proc (p_code, p_relation); 312 313 dcl p_code fixed bin (35); 314 dcl p_relation char (*); 315 316 call 317 com_err_ (p_code, myname, "^/Error encountered attempting to store ^a relation.^/Current line (line ^d) is: ^a.", 318 p_relation, current_input_line_number, input_line); 319 call FINISH (); 320 goto RETURN; 321 322 end STORE_ERROR; 323 324 325 ERROR: 326 proc (p_code, p_text); 327 328 dcl p_code fixed bin (35); 329 dcl p_text char (*); 330 331 call 332 com_err_ (p_code, myname, "^a.^/Current line (line ^d) is: ^a.", p_text, current_input_line_number, input_line); 333 call FINISH (); 334 goto RETURN; 335 336 end ERROR; 337 338 /* SUPPORT SUBROUTINES */ 339 340 341 CANONICALIZE_NAME: 342 proc (p_name_string) returns (char (64) var); 343 344 dcl p_name_string char (*) varying; 345 dcl p_canonical_name char (64) var; 346 dcl name_string char (128) var; 347 348 name_string = p_name_string; 349 350 name_string = translate (name_string, "__", "- "); 351 do while (index (name_string, "__") ^= 0); 352 name_string = before (name_string, "__") || "_" || after (name_string, "__"); 353 end; 354 355 p_canonical_name = translate (name_string, LOWER_CASE_ALPHA, UPPER_CASE_ALPHA); 356 357 return (p_canonical_name); 358 359 end CANONICALIZE_NAME; 360 361 362 STRIP: 363 proc (p_input_string) returns (char (*) var); 364 365 dcl p_input_string char (*); 366 dcl temp_varying_string char (1024) varying; 367 dcl position_of_first_interesting_character 368 fixed bin; 369 370 position_of_first_interesting_character = verify (p_input_string, " "); 371 if position_of_first_interesting_character > 0 372 then temp_varying_string = substr (p_input_string, position_of_first_interesting_character); 373 else temp_varying_string = p_input_string; 374 375 temp_varying_string = rtrim (ltrim (temp_varying_string)); 376 377 if temp_varying_string = "" 378 then return (" ") /* space */; 379 else return (temp_varying_string); 380 381 end STRIP; 382 383 GET_NEXT_FIELD: 384 proc (p_field_idx, p_terminating_field_idx, p_field_value, p_code); 385 386 dcl p_field_idx fixed bin; 387 dcl p_terminating_field_idx 388 fixed bin; 389 dcl p_field_value char (*) varying; 390 dcl p_code fixed bin (35); 391 dcl (counter, nf_indentation_level) 392 fixed bin; 393 dcl temp_varying_string char (1024) varying; 394 395 do counter = 1 to LIMIT_TO_STOP_INFINITE_LOOPING while (index (input_line, FIELD_INDICATOR (p_field_idx)) = 0); 396 call GET_NEXT_INPUT_LINE (p_code); 397 end; 398 399 if p_code ^= 0 400 then call ERROR (p_code, ""); 401 if counter >= LIMIT_TO_STOP_INFINITE_LOOPING 402 then call ERROR (0, "Was in an unbounded loop."); 403 404 goto FIELD (p_field_idx); 405 406 FIELD (1): /* order number */ 407 FIELD (2): /* manual name (full) */ 408 FIELD (8): /* release supported */ 409 temp_varying_string = STRIP (after (input_line, FIELD_INDICATOR (p_field_idx))); 410 p_field_value = temp_varying_string; 411 return; 412 413 FIELD (3): /* short name */ 414 temp_varying_string = STRIP (after (input_line, FIELD_INDICATOR (p_field_idx))); 415 p_field_value = temp_varying_string; 416 call GET_NEXT_INPUT_LINE (p_code); 417 do counter = 1 to LIMIT_TO_STOP_INFINITE_LOOPING 418 while (p_code = 0 & index (input_line, FIELD_INDICATOR (p_terminating_field_idx)) = 0); 419 temp_varying_string = STRIP (input_line); 420 p_field_value = p_field_value || temp_varying_string; 421 call GET_NEXT_INPUT_LINE (p_code); 422 end; 423 return; 424 425 FIELD (4): /* description */ 426 FIELD (5): /* audience */ 427 temp_varying_string = STRIP (after (input_line, FIELD_INDICATOR (p_field_idx))); 428 p_field_value = temp_varying_string; 429 call GET_NEXT_INPUT_LINE (p_code); 430 do counter = 1 to LIMIT_TO_STOP_INFINITE_LOOPING 431 while (p_code = 0 & index (input_line, FIELD_INDICATOR (p_terminating_field_idx)) = 0); 432 temp_varying_string = STRIP (input_line); 433 p_field_value = p_field_value || " " || temp_varying_string; 434 call GET_NEXT_INPUT_LINE (p_code); 435 end; 436 return; 437 438 FIELD (6): /* table of contents */ 439 temp_varying_string = STRIP (after (input_line, FIELD_INDICATOR (p_field_idx))); 440 p_field_value = temp_varying_string; 441 call GET_NEXT_INPUT_LINE (p_code); 442 do counter = 1 to LIMIT_TO_STOP_INFINITE_LOOPING 443 while (p_code = 0 & index (input_line, FIELD_INDICATOR (p_terminating_field_idx)) = 0); 444 temp_varying_string = STRIP (input_line); 445 p_field_value = p_field_value || NL || temp_varying_string; 446 call GET_NEXT_INPUT_LINE (p_code); 447 end; 448 temp_varying_string = ltrim (p_field_value, NL); 449 p_field_value = rtrim (temp_varying_string, NL); 450 return; 451 452 FIELD (7): /* new features */ 453 temp_varying_string = STRIP (after (input_line, FIELD_INDICATOR (p_field_idx))); 454 p_field_value = temp_varying_string; 455 nf_indentation_level = 0; 456 call GET_NEXT_INPUT_LINE (p_code); 457 do counter = 1 to LIMIT_TO_STOP_INFINITE_LOOPING 458 while (p_code = 0 & index (input_line, FIELD_INDICATOR (p_terminating_field_idx)) = 0); 459 if nf_indentation_level = 0 460 then nf_indentation_level = verify (input_line, " "); 461 temp_varying_string = substr (input_line, nf_indentation_level); 462 p_field_value = p_field_value || NL || temp_varying_string; 463 call GET_NEXT_INPUT_LINE (p_code); 464 end; 465 temp_varying_string = ltrim (p_field_value, NL); 466 p_field_value = rtrim (temp_varying_string, NL); 467 return; 468 469 end GET_NEXT_FIELD; 470 471 GET_NEXT_INPUT_LINE: 472 proc (p_code); 473 474 dcl p_code fixed bin (35); 475 476 if ^input_file_is_open 477 then 478 do; 479 call iox_$attach_ioname ("load_doc_db_dbf.f", iocb_ptr, "vfile_ " || input_file, null, p_code); 480 if p_code ^= 0 481 then call ERROR (p_code, "While attaching input file"); 482 call iox_$open (iocb_ptr, 1, "0"b, p_code); 483 if p_code ^= 0 484 then call ERROR (p_code, "While openning input file."); 485 current_input_line_number = 0; 486 input_file_is_open = "1"b; 487 end; 488 489 call iox_$get_line (iocb_ptr, input_line_ptr, length (line_buffer), current_input_line_length, p_code); 490 if p_code ^= 0 491 then call ERROR (p_code, ""); 492 if current_input_line_length > 1024 493 then call ERROR (0, "Line too long for buffer."); 494 495 current_input_line_number = current_input_line_number + 1; 496 if substr (input_line, current_input_line_length) = NL 497 then current_input_line_length = current_input_line_length - 1; 498 499 return; 500 501 end GET_NEXT_INPUT_LINE; 502 503 PUT_DATA_IN_DB: 504 proc (); 505 506 dcl temp_short_name char (128) varying; 507 508 info_rel.manual_number, full_name_rel.manual_number, short_name_rel.manual_number, entry_name_rel.manual_number, 509 name_rel.manual_number = full_name_rel.manual_number + 1; 510 511 call dsl_$store (dbi, "full_name_rel", full_name_rel, code); 512 if code ^= 0 513 then call STORE_ERROR (code, "full_name_rel"); 514 515 call dsl_$store (dbi, "name_rel", name_rel, code); 516 if code ^= 0 517 then call STORE_ERROR (code, "name_rel"); 518 519 call dsl_$store (dbi, "info_rel", info_rel, code); 520 if code ^= 0 521 then call STORE_ERROR (code, "info_rel"); 522 523 temp_short_name = ""; 524 do while (short_name_list ^= ""); 525 temp_short_name = ltrim (before (short_name_list, ",")); 526 if temp_short_name = "" 527 then 528 do; 529 temp_short_name = short_name_list; 530 short_name_list = ""; 531 end; 532 else short_name_list = after (short_name_list, ","); 533 534 short_name_rel.short_name = temp_short_name; 535 name_rel.name = CANONICALIZE_NAME (temp_short_name); 536 temp_short_name = ""; 537 538 call dsl_$store (dbi, "short_name_rel", short_name_rel, code); 539 if code ^= 0 540 then if code = mdbm_error_$dup_store 541 then code = 0; 542 else call STORE_ERROR (code, "short_name_rel"); 543 544 call dsl_$store (dbi, "name_rel", name_rel, code); 545 if code ^= 0 546 then if code = mdbm_error_$dup_store 547 then code = 0; 548 else call STORE_ERROR (code, "name_rel"); 549 550 end; 551 552 553 return; 554 end PUT_DATA_IN_DB; 555 1 1 /* *************************************************** 1 2* * * 1 3* * BEGIN online_doc.incl.pl1 * 1 4* * created: 09/28/83 0931.7 edt Wed * 1 5* * by: create_mrds_dm_include (3.0) * 1 6* * * 1 7* * Data model >udd>d>dbmt>ndb>mcp>od>online_doc.db * 1 8* * created: 09/28/83 0921.1 edt Wed * 1 9* * version: 4 * 1 10* * by: Pierret.Multics.a * 1 11* * * 1 12* *************************************************** */ 1 13 1 14 dcl 1 entry_name_rel aligned, 1 15 2 entry_name character (64) varying aligned, /* Key */ 1 16 2 manual_number real fixed binary (17,0) unaligned; /* Key, Index */ 1 17 1 18 dcl 1 full_name_rel aligned, 1 19 2 manual_number real fixed binary (17,0) unaligned, /* Key */ 1 20 2 full_name character (64) varying aligned, 1 21 2 order_number character (4) nonvarying unaligned, /* Index */ 1 22 2 revision character (3) nonvarying unaligned, 1 23 2 release_supported character (8) nonvarying unaligned; 1 24 1 25 dcl 1 info_rel aligned, 1 26 2 manual_number real fixed binary (17,0) unaligned, /* Key */ 1 27 2 description character (1024) varying aligned, 1 28 2 audience character (1024) varying aligned, 1 29 2 table_of_contents character (1024) varying aligned, 1 30 2 new_features character (1024) varying aligned; 1 31 1 32 dcl 1 name_rel aligned, 1 33 2 name character (64) varying aligned, /* Key */ 1 34 2 manual_number real fixed binary (17,0) unaligned; /* Key */ 1 35 1 36 dcl 1 short_name_rel aligned, 1 37 2 manual_number real fixed binary (17,0) unaligned, /* Key */ 1 38 2 short_name character (64) varying aligned; /* Key */ 1 39 1 40 /* END of online_doc.incl.pl1 ***************************************************************/ 556 557 2 1 /* BEGIN INCLUDE FILE online_doc_fields.incl.pl1 */ 2 2 2 3 /* format: style2,ind3 */ 2 4 2 5 dcl FIELD_INDICATOR (8) char (32) varying int static options (constant) 2 6 init ("Order No.:", "Manual Name:", "Short Name:", "Description:", "Audience:", 2 7 "Table of Contents:", "New Features:", "Release Supported:"); 2 8 2 9 dcl FIELD_NAME (8) char (32) varying int static options (constant) 2 10 init ("order number", "manual name", "short name", "description", "audience", 2 11 "table of contents", "new features", "release supported"); 2 12 2 13 dcl ( 2 14 ORDER_NUMBER_FIELD_ID init (1), 2 15 MANUAL_NAME_FIELD_ID init (2), 2 16 SHORT_NAME_FIELD_ID init (3), 2 17 DESCRIPTION_FIELD_ID init (4), 2 18 AUDIENCE_FIELD_ID init (5), 2 19 TOC_FIELD_ID init (6), 2 20 NEW_FEATURES_FIELD_ID init (7), 2 21 RELEASE_SUPPORTED_FIELD_ID 2 22 init (8) 2 23 ) fixed bin int static options (constant); 2 24 2 25 2 26 /* END INCLUDE FILE online_doc_fields.incl.pl1 */ 558 559 560 end load_doc_db_dbf; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/06/83 1330.2 load_doc_db_dbf.pl1 >spec>on>tut>load_doc_db_dbf.pl1 556 1 10/06/83 1333.0 online_doc.incl.pl1 >spec>on>tut>online_doc.incl.pl1 558 2 10/06/83 1333.0 online_doc_fields.incl.pl1 >spec>on>tut>online_doc_fields.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. AUDIENCE_FIELD_ID 000010 constant fixed bin(17,0) initial dcl 2-13 set ref 231* 236* 237* DESCRIPTION_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 226* 231* 232* FIELD_INDICATOR 000121 constant varying char(32) initial array dcl 2-5 ref 395 406 406 413 413 417 425 425 430 438 438 442 452 452 457 FIELD_NAME 000011 constant varying char(32) initial array dcl 2-9 set ref 287* 301* LIMIT_TO_STOP_INFINITE_LOOPING constant fixed bin(17,0) initial dcl 102 ref 198 395 401 417 430 442 457 LOWER_CASE_ALPHA 000240 constant char(26) initial unaligned dcl 106 ref 355 MANUAL_NAME_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 203* 216* 217* NEW_FEATURES_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 241* 246* 247* NL 005760 constant char(1) initial unaligned dcl 104 ref 445 448 449 462 465 466 496 ORDER_NUMBER_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 203* 204* 207* 251* RELEASE_SUPPORTED_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 246* 251* 252* SHORT_NAME_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 216* 226* 227* TOC_FIELD_ID constant fixed bin(17,0) initial dcl 2-13 set ref 236* 241* 242* UPPER_CASE_ALPHA 000231 constant char(26) initial unaligned dcl 107 ref 355 absolute_pathname_ 000014 constant entry external dcl 111 ref 169 absolute_pathname_$add_suffix 000016 constant entry external dcl 112 ref 160 addr builtin function dcl 96 ref 195 after builtin function dcl 96 ref 352 406 406 413 413 425 425 438 438 452 452 532 all_lines_have_been_processed 001630 automatic bit(1) dcl 74 set ref 196* 198 arg based char unaligned dcl 91 set ref 160* 164* 169* 173* arg_len 001631 automatic fixed bin(21,0) dcl 80 set ref 159* 160 160 164 164 168* 169 169 173 173 arg_ptr 001644 automatic pointer dcl 86 set ref 159* 160 164 168* 169 173 audience 402 001722 automatic varying char(1024) level 2 dcl 1-25 set ref 239* code 001634 automatic fixed bin(35,0) dcl 82 set ref 141* 142 144 148* 159* 160* 161 164* 168* 169* 170 173* 182* 183 186* 201* 203* 204 204* 216* 217 217* 226* 227 227* 231* 232 232* 236* 237 237* 241* 242 242* 246* 247 247* 251* 252 252* 273* 275* 277* 511* 512 512* 515* 516 516* 519* 520 520* 538* 539 539 539* 542* 544* 545 545 545* 548* com_err_ 000020 constant entry external dcl 114 ref 148 155 164 173 186 287 301 316 331 counter 004130 automatic fixed bin(17,0) dcl 391 set ref 395* 401 417* 430* 442* 457* cu_$af_return_arg 000022 constant entry external dcl 116 ref 141 cu_$arg_ptr 000024 constant entry external dcl 117 ref 159 168 current_input_line_length 001633 automatic fixed bin(21,0) dcl 80 set ref 287 287 301 301 316 316 331 331 395 406 406 413 413 417 419 419 425 425 430 432 432 438 438 442 444 444 452 452 457 459 461 489* 492 496 496 496* 496 current_input_line_number 001637 automatic fixed bin(17,0) initial dcl 83 set ref 83* 287* 301* 316* 331* 485* 495* 495 dbi 001635 automatic fixed bin(35,0) dcl 82 set ref 182* 273* 511* 515* 519* 538* 544* description 1 001722 automatic varying char(1024) level 2 dcl 1-25 set ref 234* dsl_$close 000044 constant entry external dcl 126 ref 273 dsl_$open 000040 constant entry external dcl 124 ref 182 dsl_$store 000042 constant entry external dcl 125 ref 511 515 519 538 544 entry_name_rel 001652 automatic structure level 1 dcl 1-14 error_table_$not_act_fnc 000050 external static fixed bin(35,0) dcl 130 ref 144 field_value 001225 automatic varying char(1024) dcl 71 set ref 200* 203* 207 207 207 211 212* 212 213 216* 221 222* 226* 229 231* 234 236* 239 241* 244 246* 249 251* 254 full_name 1 001674 automatic varying char(64) level 2 dcl 1-18 set ref 221* full_name_rel 001674 automatic structure level 1 dcl 1-18 set ref 511* index builtin function dcl 96 ref 351 395 417 430 442 457 info_rel 001722 automatic structure level 1 dcl 1-25 set ref 519* input_file 000500 automatic char(168) unaligned dcl 68 set ref 169* 479 input_file_is_open 001626 automatic bit(1) initial dcl 74 set ref 74* 476 486* input_line based char unaligned dcl 92 set ref 287* 301* 316* 331* 395 406 406 413 413 417 419* 425 425 430 432* 438 438 442 444* 452 452 457 459 461 496 input_line_ptr 001650 automatic pointer dcl 86 set ref 195* 287 301 316 331 395 406 406 413 413 417 419 425 425 430 432 438 438 442 444 452 452 457 459 461 489* 496 iocb_ptr 001642 automatic pointer dcl 86 set ref 275* 277* 479* 482* 489* iox_$attach_ioname 000026 constant entry external dcl 119 ref 479 iox_$close 000034 constant entry external dcl 122 ref 275 iox_$detach_iocb 000036 constant entry external dcl 123 ref 277 iox_$get_line 000032 constant entry external dcl 121 ref 489 iox_$open 000030 constant entry external dcl 120 ref 482 is_active_function 001627 automatic bit(1) dcl 74 set ref 142* 144* 152 length builtin function dcl 96 ref 207 207 207 489 489 line_buffer 000100 automatic char(1024) unaligned dcl 67 set ref 195 489 489 manual_number 001674 automatic fixed bin(17,0) level 2 in structure "full_name_rel" packed unaligned dcl 1-18 in procedure "load_doc_db_dbf" set ref 190* 508 508* manual_number 21 003727 automatic fixed bin(17,0) level 2 in structure "name_rel" packed unaligned dcl 1-32 in procedure "load_doc_db_dbf" set ref 508* manual_number 003751 automatic fixed bin(17,0) level 2 in structure "short_name_rel" packed unaligned dcl 1-36 in procedure "load_doc_db_dbf" set ref 508* manual_number 21 001652 automatic fixed bin(17,0) level 2 in structure "entry_name_rel" packed unaligned dcl 1-14 in procedure "load_doc_db_dbf" set ref 508* manual_number 001722 automatic fixed bin(17,0) level 2 in structure "info_rel" packed unaligned dcl 1-25 in procedure "load_doc_db_dbf" set ref 508* mdbm_error_$dup_store 000046 external static fixed bin(35,0) dcl 130 ref 539 545 mrds_db_path 000552 automatic char(168) unaligned dcl 69 set ref 160* 182* 186* myname 000247 constant char(15) initial unaligned dcl 101 set ref 148* 155* 155* 164* 173* 186* 287* 301* 316* 331* name 003727 automatic varying char(64) level 2 dcl 1-32 set ref 222* 535* name_rel 003727 automatic structure level 1 dcl 1-32 set ref 515* 544* name_string 004061 automatic varying char(128) dcl 346 set ref 348* 350* 350 351 352* 352 352 355 nargs 001636 automatic fixed bin(17,0) initial dcl 83 set ref 83* 141* 152 new_features 1404 001722 automatic varying char(1024) level 2 dcl 1-25 set ref 249* nf_indentation_level 004131 automatic fixed bin(17,0) dcl 391 set ref 455* 459 459* 461 null builtin function dcl 96 ref 479 479 order_number 22 001674 automatic char(4) level 2 packed unaligned dcl 1-18 set ref 211* p_canonical_name 004040 automatic varying char(64) dcl 345 set ref 355* 357 p_code parameter fixed bin(35,0) dcl 298 in procedure "FILE_ERROR" set ref 295 301* p_code parameter fixed bin(35,0) dcl 390 in procedure "GET_NEXT_FIELD" set ref 383 396* 399 399* 416* 417 421* 429* 430 434* 441* 442 446* 456* 457 463* p_code parameter fixed bin(35,0) dcl 313 in procedure "STORE_ERROR" set ref 310 316* p_code parameter fixed bin(35,0) dcl 328 in procedure "ERROR" set ref 325 331* p_code parameter fixed bin(35,0) dcl 474 in procedure "GET_NEXT_INPUT_LINE" set ref 471 479* 480 480* 482* 483 483* 489* 490 490* p_field_idx parameter fixed bin(17,0) dcl 299 in procedure "FILE_ERROR" ref 295 301 p_field_idx parameter fixed bin(17,0) dcl 285 in procedure "FORMAT_ERROR" ref 283 287 p_field_idx parameter fixed bin(17,0) dcl 386 in procedure "GET_NEXT_FIELD" ref 383 395 404 406 406 413 413 425 425 438 438 452 452 p_field_value parameter varying char dcl 389 set ref 383 410* 415* 420* 420 428* 433* 433 440* 445* 445 448 449* 454* 462* 462 465 466* p_input_string parameter char unaligned dcl 365 ref 362 370 371 373 p_name_string parameter varying char dcl 344 ref 341 348 p_relation parameter char unaligned dcl 314 set ref 310 316* p_terminating_field_idx parameter fixed bin(17,0) dcl 387 ref 383 417 430 442 457 p_text parameter char unaligned dcl 329 set ref 325 331* position_of_first_interesting_character 000501 automatic fixed bin(17,0) dcl 367 set ref 370* 371 371 record_count 001640 automatic fixed bin(17,0) initial dcl 83 set ref 83* 198* release_supported 23(27) 001674 automatic char(8) level 2 packed unaligned dcl 1-18 set ref 254* return_arg_len 001632 automatic fixed bin(21,0) dcl 80 set ref 141* return_arg_ptr 001646 automatic pointer dcl 86 set ref 141* revision 23 001674 automatic char(3) level 2 packed unaligned dcl 1-18 set ref 213* short_name 1 003751 automatic varying char(64) level 2 dcl 1-36 set ref 534* short_name_list 000624 automatic varying char(1024) dcl 70 set ref 229* 524 525 529 530* 532* 532 short_name_rel 003751 automatic structure level 1 dcl 1-36 set ref 538* substr builtin function dcl 96 ref 211 213 371 461 496 sysprint 000012 constant file dcl 63 table_of_contents 1003 001722 automatic varying char(1024) level 2 dcl 1-25 set ref 244* temp_short_name 004554 automatic varying char(128) dcl 506 set ref 523* 525* 526 529* 534 535* 536* temp_varying_string 000100 automatic varying char(1024) dcl 366 in procedure "STRIP" set ref 371* 373* 375* 375 377 379 temp_varying_string 004132 automatic varying char(1024) dcl 393 in procedure "GET_NEXT_FIELD" set ref 406* 410 413* 415 419* 420 425* 428 432* 433 438* 440 444* 445 448* 449 452* 454 461* 462 465* 466 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. cu_$arg_count 000000 constant entry external dcl 115 field_value_ptr automatic pointer dcl 86 ioa_ 000000 constant entry external dcl 118 min builtin function dcl 96 temp_varying_string automatic varying char(1024) dcl 72 NAMES DECLARED BY EXPLICIT CONTEXT. CANONICALIZE_NAME 001761 constant entry internal dcl 341 ref 222 535 END_LOOP 001433 constant label dcl 260 ref 291 ERROR 001701 constant entry internal dcl 325 ref 399 401 480 483 490 492 FIELD 000000 constant label array(8) dcl 406 ref 404 FILE_ERROR 001550 constant entry internal dcl 295 ref 204 217 227 232 237 242 247 252 FINISH 001437 constant entry internal dcl 269 ref 263 304 319 333 FORMAT_ERROR 001477 constant entry internal dcl 283 ref 207 GET_NEXT_FIELD 002307 constant entry internal dcl 383 ref 203 216 226 231 236 241 246 251 GET_NEXT_INPUT_LINE 003677 constant entry internal dcl 471 ref 201 396 416 421 429 434 441 446 456 463 PUT_DATA_IN_DB 004135 constant entry internal dcl 503 ref 257 RETURN 001436 constant label dcl 264 ref 279 305 320 334 STORE_ERROR 001621 constant entry internal dcl 310 ref 512 516 520 542 548 STRIP 002153 constant entry internal dcl 362 ref 406 413 419 425 432 438 444 452 load_doc_db_dbf 000574 constant entry external dcl 7 NAMES DECLARED BY CONTEXT OR IMPLICATION. before builtin function ref 352 525 ltrim builtin function ref 375 448 465 525 rtrim builtin function ref 375 449 466 translate builtin function ref 350 355 verify builtin function ref 370 459 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6176 6252 5763 6206 Length 6550 5763 54 261 213 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME load_doc_db_dbf 2815 external procedure is an external procedure. FINISH internal procedure shares stack frame of external procedure load_doc_db_dbf. FORMAT_ERROR internal procedure shares stack frame of external procedure load_doc_db_dbf. FILE_ERROR internal procedure shares stack frame of external procedure load_doc_db_dbf. STORE_ERROR internal procedure shares stack frame of external procedure load_doc_db_dbf. ERROR internal procedure shares stack frame of external procedure load_doc_db_dbf. CANONICALIZE_NAME internal procedure shares stack frame of external procedure load_doc_db_dbf. STRIP 326 internal procedure uses returns(char(*)) or returns(bit(*)), and is called during a stack extension. GET_NEXT_FIELD internal procedure shares stack frame of external procedure load_doc_db_dbf. GET_NEXT_INPUT_LINE internal procedure shares stack frame of external procedure load_doc_db_dbf. PUT_DATA_IN_DB internal procedure shares stack frame of external procedure load_doc_db_dbf. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME STRIP 000100 temp_varying_string STRIP 000501 position_of_first_interesting_character STRIP load_doc_db_dbf 000100 line_buffer load_doc_db_dbf 000500 input_file load_doc_db_dbf 000552 mrds_db_path load_doc_db_dbf 000624 short_name_list load_doc_db_dbf 001225 field_value load_doc_db_dbf 001626 input_file_is_open load_doc_db_dbf 001627 is_active_function load_doc_db_dbf 001630 all_lines_have_been_processed load_doc_db_dbf 001631 arg_len load_doc_db_dbf 001632 return_arg_len load_doc_db_dbf 001633 current_input_line_length load_doc_db_dbf 001634 code load_doc_db_dbf 001635 dbi load_doc_db_dbf 001636 nargs load_doc_db_dbf 001637 current_input_line_number load_doc_db_dbf 001640 record_count load_doc_db_dbf 001642 iocb_ptr load_doc_db_dbf 001644 arg_ptr load_doc_db_dbf 001646 return_arg_ptr load_doc_db_dbf 001650 input_line_ptr load_doc_db_dbf 001652 entry_name_rel load_doc_db_dbf 001674 full_name_rel load_doc_db_dbf 001722 info_rel load_doc_db_dbf 003727 name_rel load_doc_db_dbf 003751 short_name_rel load_doc_db_dbf 004040 p_canonical_name CANONICALIZE_NAME 004061 name_string CANONICALIZE_NAME 004130 counter GET_NEXT_FIELD 004131 nf_indentation_level GET_NEXT_FIELD 004132 temp_varying_string GET_NEXT_FIELD 004554 temp_short_name PUT_DATA_IN_DB 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 return shorten_stack ext_entry int_entry_desc set_cs_eis index_cs_eis return_chars_eis index_after_cs THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ absolute_pathname_$add_suffix com_err_ cu_$af_return_arg cu_$arg_ptr dsl_$close dsl_$open dsl_$store iox_$attach_ioname iox_$close iox_$detach_iocb iox_$get_line iox_$open THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$not_act_fnc mdbm_error_$dup_store sysprint sysprint.fsb LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 7 000573 63 000601 74 000615 83 000616 141 000621 142 000635 144 000642 148 000647 149 000663 152 000664 155 000671 156 000721 159 000722 160 000741 161 000773 164 000775 165 001027 168 001030 169 001047 170 001073 173 001075 174 001127 182 001130 183 001156 186 001160 187 001210 190 001211 195 001213 196 001215 198 001216 200 001227 201 001230 203 001232 204 001235 207 001241 211 001253 212 001255 213 001267 216 001272 217 001275 221 001302 222 001312 226 001315 227 001320 229 001325 231 001332 232 001335 234 001342 236 001347 237 001352 239 001357 241 001364 242 001367 244 001374 246 001401 247 001404 249 001411 251 001416 252 001421 254 001426 257 001432 260 001433 263 001435 264 001436 269 001437 273 001440 275 001454 277 001465 279 001476 283 001477 287 001501 291 001547 295 001550 301 001552 304 001617 305 001620 310 001621 316 001632 319 001677 320 001700 325 001701 331 001712 333 001757 334 001760 341 001761 348 001772 350 002004 351 002022 352 002036 353 002121 355 002123 357 002141 362 002152 370 002166 371 002202 373 002220 375 002230 377 002264 379 002300 383 002307 395 002320 396 002342 397 002350 399 002352 401 002371 404 002403 406 002406 410 002461 411 002474 413 002475 415 002550 416 002563 417 002571 419 002616 420 002647 421 002664 422 002672 423 002674 425 002675 428 002750 429 002763 430 002771 432 003016 433 003047 434 003106 435 003115 436 003117 438 003120 440 003173 441 003206 442 003214 444 003240 445 003271 446 003330 447 003337 448 003341 449 003365 450 003406 452 003407 454 003462 455 003475 456 003476 457 003504 459 003530 461 003546 462 003563 463 003620 464 003627 465 003631 466 003655 467 003676 471 003677 476 003701 479 003703 480 003752 482 003774 483 004016 485 004040 486 004041 489 004043 490 004065 492 004104 495 004116 496 004117 499 004134 503 004135 508 004136 511 004160 512 004210 515 004221 516 004247 519 004256 520 004304 523 004313 524 004314 525 004321 526 004351 529 004356 530 004366 531 004367 532 004370 534 004413 535 004423 536 004426 538 004427 539 004457 542 004466 544 004475 545 004523 548 004532 550 004537 553 004540 ----------------------------------------------------------- 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