COMPILATION LISTING OF SEGMENT quiesce_mrds_db Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/18/85 1014.3 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ******************************************************* 10* * * 11* * * 12* * Copyright (c) 1972 by Massachusetts Institute of * 13* * Technology and Honeywell Information Systems, Inc. * 14* * * 15* * * 16* ****************************************************** */ 17 18 /* HISTORY: 19* 20* Originally written by Jim Gray - - May 1980 21* 22* 80-12-14 Jim Gray : improved "unable to quiesce" error message. 23* 24* 81-01-27 Jim Gray : added use of dsl_$get_path_info to replace 25* deficiencies of dsl_$get_version. Also added usage of 26* dmd_$get_user_class as part of the DBA proposal implementation. 27* 28* 81-04-29 Jim Gray : changed declaration of work_area size to 29* depend on the current value of mrds_data_$max_dbs for 30* extensibility. 31* 32* 82-05-19 Mike Kubicar : Changed to permit only one database to be 33* quiesced per command invocation. Also removed all traces of 34* quiesing files. 35* 36* 82-06-24 Mike Kubicar : Changed conversion of -wait_time arguments 37* so that it is compatible with the way it's done in 38* rmdb_rq_ready_db. This raises the maximum legal wait time and 39* makes the error messages a little more friendly. 40* 41* 84-10-19 Paul Benjamin : Added quiesce_db and unquiesce_db which are mmi_ 42* entrypoints. 43* 44* 84-10-23 Paul Benjamin : Enabled size checking for one statment so that the 45* change of 82-06-24 actually works. 46* 47**/ 48 49 quiesce_mrds_db: qmdb: procedure (); 50 51 /* DESCRIPTION: 52* 53* BEGIN_DESCRIPTION 54* 55* this routine is a command and subroutine interface to 56* mu_quiesce$quiesce_quiet/free. It's purpose is to quiesce 57* databases, for such activities as database backup, that is to grab 58* control of the database so that non-passive users can not access 59* the database, or hamper it's integrity. It has two options, the 60* quiesce option with optional wait time argument, and the free 61* option which must be called when the quiescer is finished. Both 62* take database path names as their primary arguments, with the 63* default option for the command being quiesce. 64* 65* END_DESCRIPTION 66* 67**/ 68 69 /* PARAMETERS: 70* 71* database_path - - (input) the relative pathname of the database(s) to be quiesced, 72* there may be up to mrds_data_$max_dbs paths given. 73* However, currently the quiescing module mu_quiesce$mu_quiesce called thru mdbm_util_ 74* only accepts one database quiescing per process in one or multiple calls. 75* 76* -quiet - - (input) the quiesce option to this command, 77* it need not be given, as it is the default. 78* 79* -free - - (input) the free option to this command, it must be given after a call 80* to quiesce a database, -quiesce and -free are mutually exclussive. 81* 82* -wait_time,-wt time - - (input) the wait time in seconds that the caller 83* wishes to wait to obtain a quiescing of all databases given. 84* This control argument may not be given with the -free option. 85* The time must be convertible to fixed bin(35). 86* If this control arg is not given, it defaults to 0 seconds. 87* (see mdbm_data_$quiesce_wait) 88* 89**/ 90 91 /* start up */ 92 93 code = 0; 94 command = ON; 95 96 /* check for the minimum number of arguments */ 97 call cu_$arg_list_ptr (main_proc_arg_ptr); 98 call cu_$arg_count (nargs); 99 if nargs < 1 then do; 100 code = error_table_$wrong_no_of_args; 101 call com_err_ (code, caller_name, "^/^a^/", 102 "Usage: quiesce_mrds_db database_pathname {-quiet {-wait_time xx} | -free}"); 103 end; 104 else do; 105 106 /* initialize */ 107 108 quiet_seen, free_seen, wait_time_seen = OFF; 109 quiesce_control = ON; /* the default is to quiesce */ 110 quiesce_wait_time = mdbm_data_$quiesce_wait; /* set default wait time */ 111 number_of_paths = 0; /* none seen yet */ 112 113 /* gather all the database pathnames given */ 114 115 arg_count = 1; 116 args_finished = OFF; 117 do while (^args_finished); 118 119 /* get the relative pathname */ 120 121 call cu_$arg_ptr (arg_count, arg_ptr, arg_len, code); 122 if code ^= 0 then do; 123 args_finished = ON; 124 call com_err_ (code, caller_name, "^/^a ^d", 125 "Unable to get argument number", arg_count); 126 end; 127 else do; 128 129 if arg_len < 1 then do; 130 args_finished = ON; 131 code = error_table_$bad_arg; 132 call com_err_ (code, caller_name, "^/^a ^d", 133 "A null character string argument was detected for argument number", arg_count); 134 end; 135 else if substr (arg, 1, 1) = "-" then /* control arg */ 136 137 /* control argument */ 138 139 call process_control_arg (); 140 else do; 141 142 /* database pathname argument */ 143 144 supplied_db_path = arg; 145 call process_db_path_arg (); 146 147 end; 148 149 /* go on to the next argument */ 150 151 if arg_count < nargs then 152 arg_count = arg_count + 1; 153 else args_finished = ON; 154 155 end; 156 157 end; 158 159 if code ^= 0 then ; 160 else do; 161 162 /* save count of pathnames seen */ 163 164 if number_of_paths = 0 then do; 165 code = error_table_$wrong_no_of_args; 166 call com_err_ (code, caller_name, "^/^a", 167 "No database pathname was given."); 168 end; 169 else do; 170 171 /* call quiet or free according to control args seen, with the quiesce structure */ 172 173 if quiesce_control then 174 call mu_quiesce$quiesce_quiet (db_path, quiesce_wait_time, code); 175 else call mu_quiesce$quiesce_free (db_path, code); 176 177 if code = 0 then ; 178 else call com_err_ (code, caller_name, "^/^a ^a^a^a", 179 "Unable to complete the quiescing process on the control segment", 180 "using the database path """, 181 db_path, """."); 182 183 end; 184 185 end; 186 187 end; 188 189 return; 190 191 process_db_path_arg: procedure (); 192 193 /* BEGIN CHANGE 81-01-27 ************************************************ */ 194 /* get the version of the database at the given path */ 195 196 code = 0; 197 198 call mrds_dsl_get_version$get_path_info (supplied_db_path, addr (local_area), 199 mrds_path_info_structure_version, mrds_path_info_ptr, code); 200 201 if mrds_path_info_ptr = null () then 202 db_path = supplied_db_path; 203 else db_path = mrds_path_info.absolute_path; 204 205 if code ^= 0 then do; 206 args_finished = ON; 207 if code = mrds_error_$no_model_submodel then 208 code = mrds_error_$no_database; 209 if command 210 then call com_err_ (code, caller_name, "^/^a^a^a", 211 "The path """, db_path, """ does not refer to a mrds database."); 212 end; 213 else do; 214 215 /* make sure it isn't a submodel */ 216 217 if mrds_path_info.type.submodel then do; 218 if command then do; 219 args_finished = ON; 220 code = error_table_$badcall; 221 call com_err_ (code, caller_name, "^/^a ^a", 222 "Data submodels are not supported by this command. ", db_path); 223 end; 224 else code = mrds_error_$bad_model; 225 end; 226 else do; 227 228 /* check for old version databases */ 229 230 if mrds_path_info.mrds_version <= 3 then do; 231 args_finished = ON; 232 code = mrds_error_$version_not_supported; 233 if command 234 then call com_err_ (code, caller_name, "^/^a^a^a ^d ^a", 235 "The database path """, db_path, """ refers to an older version", 236 mrds_path_info.mrds_version, 237 "database which this command does not support."); 238 end; 239 240 else do; 241 242 /* make sure the caller is a DBA */ 243 244 call mrds_dm_authorization$get_user_class (db_path, addr (local_area), 245 mrds_authorization_structure_version, mrds_authorization_ptr, code); 246 if code ^= 0 then do; 247 args_finished = ON; 248 if command 249 then call com_err_ (code, caller_name, "^/^a^a^a", 250 "Unable to get user class for database """, db_path, """."); 251 end; 252 else if ^mrds_authorization.administrator then do; 253 args_finished = ON; 254 code = error_table_$insufficient_access; 255 if command 256 then call com_err_ (code, caller_name, "^/^a^a^a", 257 "The user must be a database adminstrator to perform this operation on database """, 258 db_path, """."); 259 end; 260 261 /* END CHANGE 81-01-27 ************************************************** */ 262 263 else if command 264 then do; 265 266 /* good new version database path found, save it */ 267 268 number_of_paths = number_of_paths + 1; 269 if number_of_paths > 1 then do; 270 args_finished = ON; 271 code = error_table_$too_many_args; 272 call com_err_ (code, caller_name, 273 "^/^a", 274 "Only one database pathname can be specified in this command."); 275 end; 276 end; 277 end; 278 end; 279 end; 280 end; 281 282 process_control_arg: procedure (); 283 284 /* check for the control arg options of -quiet, -wait_time or -free */ 285 286 /* QUIET */ 287 if arg = "-quiet" then do; 288 if free_seen then do; 289 quiet_seen = ON; 290 args_finished = ON; 291 code = error_table_$inconsistent; 292 call com_err_ (code, caller_name, "^/^a", 293 "The -quiet and -free control arguments are mutually exclusive."); 294 end; 295 else if ^quiet_seen then do; 296 quiet_seen = ON; 297 quiesce_control = ON; 298 end; 299 else do; 300 args_finished = ON; 301 code = mrds_error_$duplicate_opt; 302 call com_err_ (code, caller_name, "^/^a", 303 "The -quiet control argument was given more than once."); 304 end; 305 end; 306 307 /* FREE */ 308 else if arg = "-free" then do; 309 if quiet_seen then do; 310 free_seen = ON; 311 args_finished = ON; 312 code = error_table_$inconsistent; 313 call com_err_ (code, caller_name, "^/^a", 314 "The -free and -quiet control arguments are mutually exclusive."); 315 end; 316 else if ^free_seen then do; 317 free_seen = ON; 318 quiesce_control = OFF; 319 end; 320 else do; 321 args_finished = ON; 322 code = mrds_error_$duplicate_opt; 323 call com_err_ (code, caller_name, "^/^a", 324 "The -free control argument was given more than once."); 325 end; 326 end; 327 328 /* WAIT_TIME */ 329 else if arg = "-wait_time" | arg = "-wt" then do; 330 if free_seen then do; 331 wait_time_seen = ON; 332 code = error_table_$inconsistent; 333 args_finished = ON; 334 call com_err_ (code, caller_name, "^/^a", 335 "The -wait_time and -free control arguments are mutually exclusive."); 336 end; 337 else if wait_time_seen then do; 338 code = mrds_error_$duplicate_opt; 339 args_finished = ON; 340 call com_err_ (code, caller_name, "^/^a", 341 "The -wait_time control argument was given more than once."); 342 end; 343 else do; /* get the wait time in seconds */ 344 wait_time_seen = ON; 345 if arg_count >= nargs then do; 346 args_finished = ON; 347 code = error_table_$bad_arg; 348 call com_err_ (code, caller_name, "^/^a", 349 "No time in seconds was given for the -wait_time control argument."); 350 end; 351 else do; 352 arg_count = arg_count + 1; 353 call cu_$arg_ptr_rel (arg_count, arg_ptr, arg_len, code, main_proc_arg_ptr); 354 if code ^= 0 then do; 355 args_finished = ON; 356 call com_err_ (code, caller_name, "^/^a", 357 "Unable to get the wait_time seconds argument."); 358 end; 359 else if substr (arg, 1, 1) = "-" & 360 (verify (arg, "+-.0123456789") ^= 0) then do; 361 args_finished = ON; 362 code = error_table_$badopt; 363 call com_err_ (code, caller_name, 364 "^/No time in seconds was given for the -wait_time control argument."); 365 end; 366 else do; 367 on size begin; 368 code = error_table_$item_too_big; 369 call com_err_ (code, caller_name, 370 "^/The quiesce wait time must be no greater than 131071 seconds."); 371 go to couldnt_convert; 372 end; 373 (size): quiesce_wait_time = cv_dec_check_ (arg, 374 code); 375 if code ^= 0 then do; 376 args_finished = ON; 377 code = error_table_$badopt; 378 call com_err_ (code, caller_name, 379 "^/""^a"" following the -wait_time argument is not a positive integer.", arg); 380 end; 381 if quiesce_wait_time < 0 then do; 382 args_finished = ON; 383 code = error_table_$badopt; 384 call com_err_ (code, caller_name, 385 "^/The quiesce wait time must not be negative; it was ^a.", arg); 386 end; 387 388 couldnt_convert: 389 revert size; 390 end; 391 end; 392 end; 393 end; 394 395 /* UNKNOWN */ 396 else do; 397 args_finished = ON; 398 code = error_table_$bad_arg; 399 call com_err_ (code, caller_name, "^/^a^a^a", 400 "The control argument """, arg, """, is not supported by this command."); 401 end; 402 end; 403 404 quiesce_db: 405 entry (sq_path, sq_wait, sq_code); 406 407 /* External subroutine interface for quiescing databases. Expands and 408* validates the input database pathname and calls mu_$quiesce_quiet. */ 409 410 dcl sq_path char (168) parameter; /* (input) database pathname */ 411 dcl sq_wait fixed bin (17) parameter; /* (input) quiesce wait time */ 412 dcl sq_code fixed bin (35) parameter; /* (output) status code */ 413 414 supplied_db_path = sq_path; 415 quiesce_wait_time = sq_wait; 416 command = OFF; 417 call process_db_path_arg; 418 if code ^= 0 419 then do; 420 sq_code = code; 421 return; 422 end; 423 call mu_quiesce$quiesce_quiet (db_path, quiesce_wait_time, code); 424 sq_code = code; 425 return; 426 427 unquiesce_db: 428 entry (sf_path, sf_code); 429 430 /* External subroutine interface for freeing quiesced databases. Expands and 431* validates the input database pathname and calls mu_$quiesce_free. */ 432 433 dcl sf_path char (168) parameter; /* (input) database pathname */ 434 dcl sf_code fixed bin (35) parameter; /* (output) status code */ 435 436 supplied_db_path = sf_path; 437 command = OFF; 438 call process_db_path_arg; 439 if code ^= 0 440 then do; 441 sf_code = code; 442 return; 443 end; 444 call mu_quiesce$quiesce_free (db_path, code); 445 sf_code = code; 446 return; 447 448 declare (addr, empty, null, substr, verify) builtin; 449 declare error_table_$badopt fixed bin (35) ext;/* unknown options */ 450 declare (free_seen, quiet_seen, wait_time_seen) bit (1); /* duplicate control arg flags */ 451 declare error_table_$inconsistent fixed bin (35) ext; /* incompatible control args */ 452 declare mrds_error_$duplicate_opt fixed bin (35) ext; /* control arg given > 1 times */ 453 declare mrds_error_$no_database fixed bin (35) ext; /* no db model */ 454 declare error_table_$bad_arg fixed bin (35) ext;/* illegal argument */ 455 declare error_table_$too_many_args fixed bin (35) ext; /* more args than quiesce structure can handle */ 456 declare args_finished bit (1); /* on => arg processing done */ 457 declare code fixed bin (35); /* error status encoding */ 458 declare main_proc_arg_ptr ptr; /* Pointer to argument list of main procedure */ 459 declare ON bit (1) int static options (constant) init ("1"b); /* true value */ 460 declare OFF bit (1) int static options (constant) init ("0"b); /* false value */ 461 declare error_table_$wrong_no_of_args fixed bin (35) ext; /* bad arg count */ 462 declare cu_$arg_list_ptr entry (ptr); 463 declare cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 464 declare cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin (35)); 465 declare cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); /* gets arg N */ 466 declare size condition; 467 declare arg_count fixed bin; /* current argument being looked at */ 468 declare arg char (arg_len) based (arg_ptr); /* current argument */ 469 declare arg_len fixed bin (21); /* length of char string arg */ 470 declare arg_ptr ptr; /* pointer to current arg */ 471 declare cu_$arg_count entry (fixed bin); /* gets argument count */ 472 declare nargs fixed bin; /* total arg count */ 473 declare mu_quiesce$quiesce_quiet entry (char (168), fixed bin (17), fixed bin (35)); /* quiesces db */ 474 declare mu_quiesce$quiesce_free entry (char (168), fixed bin (35)); /* frees quiesced db */ 475 declare com_err_ entry options (variable); /* reports errors */ 476 declare command bit (1); /* ON = called as a command */ 477 /* OFF = called as a subroutine */ 478 declare db_path char (168); /* absolute database pathname */ 479 declare supplied_db_path char (168); /* path supplied by caller */ 480 declare mdbm_data_$quiesce_wait fixed bin (35) ext; /* default wait time */ 481 declare error_table_$item_too_big fixed bin (35) ext static; /* The item in question is larger than the largest legal value */ 482 declare error_table_$badcall fixed bin (35) ext;/* bad pathname syntax, submodel path given */ 483 declare quiesce_control bit (1); /* on => call quiesce_quiet, the default */ 484 declare quiesce_wait_time fixed bin (17); /* Time to wait on database */ 485 declare mrds_error_$version_not_supported fixed bin (35) ext; /* can't work with old versions */ 486 declare caller_name char (15) init ("quiesce_mrds_db"); /* name of calling routine */ 487 declare number_of_paths fixed bin; /* db pathnames given in arg list */ 488 declare local_area area (1024); /* space for path info and authorization structures */ 489 declare mrds_dsl_get_version$get_path_info entry (char (*), ptr, fixed bin, ptr, fixed bin (35)); /* gets db version */ 490 declare mrds_dm_authorization$get_user_class entry (char (*), ptr, fixed bin, ptr, fixed bin (35)); /* tells if user a DBA */ 491 declare error_table_$insufficient_access fixed bin (35) ext; /* process lacks access */ 492 declare mrds_error_$no_model_submodel fixed bin (35) ext; /* not a mrds path */ 493 declare mrds_error_$bad_model fixed bin(35) ext static; /* not a model */ 494 1 1 /* BEGIN INCLUDE FILE mrds_authorization.incl.pl1 - - 81-01-20 Jim Gray */ 1 2 1 3 /* HISTORY: 1 4* 1 5* 81-01-20 Jim Gray : original created for the mmi_$get_authorization interface 1 6* 1 7**/ 1 8 1 9 /* DESCRIPTION: 1 10* 1 11* this structure returns the callers user_class 1 12* either database administrator or normal user. 1 13* Note that these separate classes were used to allow 1 14* future expansion to the user classes, rather than 1 15* make them logical "not"'s of one another. 1 16* NOTE: a DBA is always also a normal user, thus if the caller 1 17* is a DBA, his normal_user bit will be on also. 1 18* 1 19**/ 1 20 1 21 1 22 declare 1 mrds_authorization aligned based (mrds_authorization_ptr), 1 23 2 version fixed bin, /* version number of this structure */ 1 24 2 administrator bit (1) unal, /* caller is a DBA */ 1 25 2 normal_user bit (1) unal, /* caller has no special priviledges */ 1 26 2 mbz bit (34) unal ; 1 27 1 28 1 29 declare mrds_authorization_ptr ptr ; /* pointer for referring to the structure */ 1 30 1 31 declare mrds_authorization_structure_version fixed bin init (1) int static options (constant) ; 1 32 1 33 /* END INCLUDE FILE mrds_authorization.incl.pl1 */ 495 496 2 1 /* BEGIN INCLUDE FILE mrds_path_info.incl.pl1 - - Jim Gray 81-01-22 */ 2 2 2 3 /* HISTORY: 2 4* 2 5* 81-01-22 Jim Gray : originaly created for the dsl_$get_path_info interface, 2 6* a slight extension to the undocumented mrds_dsl_get_version$header. 2 7* 2 8**/ 2 9 2 10 /* DESCRIPTION: 2 11* 2 12* This structure returns information about a relative pathname, given 2 13* to a pathname accepting mrds interface. The information returned 2 14* is the absolute pathname, plus in the case that 2 15* the relative path points to a mrds database or submodel 2 16* whether it is a model or a submodel, the mrds version of 2 17* the model or submodel, it's creator, and the time of creation. 2 18* 2 19**/ 2 20 2 21 2 22 declare 1 mrds_path_info aligned based (mrds_path_info_ptr), 2 23 2 version fixed bin, /* version number for this structure */ 2 24 2 absolute_path char (168), /* the absolute path from the input relative path */ 2 25 2 type, 2 26 3 not_mrds bit (1) unal, /* on => path not to model or submodel */ 2 27 3 model bit (1) unal, /* on => path to database model, thus possible .db suffix */ 2 28 3 submodel bit (1) unal, /* on => path to submodel, thus possible .dsm suffix */ 2 29 3 mbz1 bit (33) unal, 2 30 2 mrds_version fixed bin, /* the mrds version number of the model or submodel */ 2 31 2 creator_id char (32), /* the person.project.tag of the creator */ 2 32 2 creation_time fixed bin (71), /* convert date to binary form of time model/submodel created */ 2 33 2 mbz2 bit (36) unal ; 2 34 2 35 2 36 declare mrds_path_info_ptr ptr ; 2 37 2 38 declare mrds_path_info_structure_version fixed bin init (1) int static options (constant) ; 2 39 2 40 /* END INCLUDE FILE mrds_path_info.incl.pl1 */ 497 498 499 500 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/18/85 0906.3 quiesce_mrds_db.pl1 >special_ldd>online>mrds.pbf-04/18/85>quiesce_mrds_db.pl1 495 1 10/14/83 1608.8 mrds_authorization.incl.pl1 >ldd>include>mrds_authorization.incl.pl1 497 2 10/14/83 1608.8 mrds_path_info.incl.pl1 >ldd>include>mrds_path_info.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. OFF constant bit(1) initial unaligned dcl 460 ref 108 116 318 416 437 ON constant bit(1) initial unaligned dcl 459 ref 94 109 123 130 153 206 219 231 247 253 270 289 290 296 297 300 310 311 317 321 331 333 339 344 346 355 361 376 382 397 absolute_path 1 based char(168) level 2 dcl 2-22 ref 203 addr builtin function dcl 448 ref 198 198 244 244 administrator 1 based bit(1) level 2 packed unaligned dcl 1-22 ref 252 arg based char unaligned dcl 468 set ref 135 144 287 308 329 329 359 359 373* 378* 384* 399* arg_count 000110 automatic fixed bin(17,0) dcl 467 set ref 115* 121* 124* 132* 151 151* 151 345 352* 352 353* arg_len 000111 automatic fixed bin(21,0) dcl 469 set ref 121* 129 135 144 287 308 329 329 353* 359 359 373 373 378 378 384 384 399 399 arg_ptr 000112 automatic pointer dcl 470 set ref 121* 135 144 287 308 329 329 353* 359 359 373 378 384 399 args_finished 000103 automatic bit(1) unaligned dcl 456 set ref 116* 117 123* 130* 153* 206* 219* 231* 247* 253* 270* 290* 300* 311* 321* 333* 339* 346* 355* 361* 376* 382* 397* caller_name 000244 automatic char(15) initial unaligned dcl 486 set ref 101* 124* 132* 166* 178* 209* 221* 233* 248* 255* 272* 292* 302* 313* 323* 334* 340* 348* 356* 363* 369* 378* 384* 399* 486* code 000104 automatic fixed bin(35,0) dcl 457 set ref 93* 100* 101* 121* 122 124* 131* 132* 159 165* 166* 173* 175* 177 178* 196* 198* 205 207 207* 209* 220* 221* 224* 232* 233* 244* 246 248* 254* 255* 271* 272* 291* 292* 301* 302* 312* 313* 322* 323* 332* 334* 338* 340* 347* 348* 353* 354 356* 362* 363* 368* 369* 373* 375 377* 378* 383* 384* 398* 399* 418 420 423* 424 439 441 444* 445 com_err_ 000044 constant entry external dcl 475 ref 101 124 132 166 178 209 221 233 248 255 272 292 302 313 323 334 340 348 356 363 369 378 384 399 command 000115 automatic bit(1) unaligned dcl 476 set ref 94* 209 218 233 248 255 263 416* 437* cu_$arg_count 000036 constant entry external dcl 471 ref 98 cu_$arg_list_ptr 000026 constant entry external dcl 462 ref 97 cu_$arg_ptr 000034 constant entry external dcl 465 ref 121 cu_$arg_ptr_rel 000030 constant entry external dcl 463 ref 353 cv_dec_check_ 000032 constant entry external dcl 464 ref 373 db_path 000116 automatic char(168) unaligned dcl 478 set ref 173* 175* 178* 201* 203* 209* 221* 233* 244* 248* 255* 423* 444* empty builtin function dcl 448 ref 488 error_table_$bad_arg 000020 external static fixed bin(35,0) dcl 454 ref 131 347 398 error_table_$badcall 000052 external static fixed bin(35,0) dcl 482 ref 220 error_table_$badopt 000010 external static fixed bin(35,0) dcl 449 ref 362 377 383 error_table_$inconsistent 000012 external static fixed bin(35,0) dcl 451 ref 291 312 332 error_table_$insufficient_access 000062 external static fixed bin(35,0) dcl 491 ref 254 error_table_$item_too_big 000050 external static fixed bin(35,0) dcl 481 ref 368 error_table_$too_many_args 000022 external static fixed bin(35,0) dcl 455 ref 271 error_table_$wrong_no_of_args 000024 external static fixed bin(35,0) dcl 461 ref 100 165 free_seen 000100 automatic bit(1) unaligned dcl 450 set ref 108* 288 310* 316 317* 330 local_area 000252 automatic area(1024) dcl 488 set ref 198 198 244 244 488* main_proc_arg_ptr 000106 automatic pointer dcl 458 set ref 97* 353* mdbm_data_$quiesce_wait 000046 external static fixed bin(35,0) dcl 480 ref 110 mrds_authorization based structure level 1 dcl 1-22 mrds_authorization_ptr 002252 automatic pointer dcl 1-29 set ref 244* 252 mrds_authorization_structure_version 000044 constant fixed bin(17,0) initial dcl 1-31 set ref 244* mrds_dm_authorization$get_user_class 000060 constant entry external dcl 490 ref 244 mrds_dsl_get_version$get_path_info 000056 constant entry external dcl 489 ref 198 mrds_error_$bad_model 000066 external static fixed bin(35,0) dcl 493 ref 224 mrds_error_$duplicate_opt 000014 external static fixed bin(35,0) dcl 452 ref 301 322 338 mrds_error_$no_database 000016 external static fixed bin(35,0) dcl 453 ref 207 mrds_error_$no_model_submodel 000064 external static fixed bin(35,0) dcl 492 ref 207 mrds_error_$version_not_supported 000054 external static fixed bin(35,0) dcl 485 ref 232 mrds_path_info based structure level 1 dcl 2-22 mrds_path_info_ptr 002254 automatic pointer dcl 2-36 set ref 198* 201 203 217 230 233 mrds_path_info_structure_version 000044 constant fixed bin(17,0) initial dcl 2-38 set ref 198* mrds_version 54 based fixed bin(17,0) level 2 dcl 2-22 set ref 230 233* mu_quiesce$quiesce_free 000042 constant entry external dcl 474 ref 175 444 mu_quiesce$quiesce_quiet 000040 constant entry external dcl 473 ref 173 423 nargs 000114 automatic fixed bin(17,0) dcl 472 set ref 98* 99 151 345 null builtin function dcl 448 ref 201 number_of_paths 000250 automatic fixed bin(17,0) dcl 487 set ref 111* 164 268* 268 269 quiesce_control 000242 automatic bit(1) unaligned dcl 483 set ref 109* 173 297* 318* quiesce_wait_time 000243 automatic fixed bin(17,0) dcl 484 set ref 110* 173* 373* 381 415* 423* quiet_seen 000101 automatic bit(1) unaligned dcl 450 set ref 108* 289* 295 296* 309 sf_code parameter fixed bin(35,0) dcl 434 set ref 427 441* 445* sf_path parameter char(168) unaligned dcl 433 ref 427 436 size 000000 stack reference condition dcl 466 ref 367 388 sq_code parameter fixed bin(35,0) dcl 412 set ref 404 420* 424* sq_path parameter char(168) unaligned dcl 410 ref 404 414 sq_wait parameter fixed bin(17,0) dcl 411 ref 404 415 submodel 53(02) based bit(1) level 3 packed unaligned dcl 2-22 ref 217 substr builtin function dcl 448 ref 135 359 supplied_db_path 000170 automatic char(168) unaligned dcl 479 set ref 144* 198* 201 414* 436* type 53 based structure level 2 dcl 2-22 verify builtin function dcl 448 ref 359 wait_time_seen 000102 automatic bit(1) unaligned dcl 450 set ref 108* 331* 337 344* NAMES DECLARED BY EXPLICIT CONTEXT. couldnt_convert 003160 constant label dcl 388 ref 371 process_control_arg 002221 constant entry internal dcl 282 ref 135 process_db_path_arg 001462 constant entry internal dcl 191 ref 145 417 438 qmdb 000704 constant entry external dcl 49 quiesce_db 001354 constant entry external dcl 404 quiesce_mrds_db 000714 constant entry external dcl 49 unquiesce_db 001423 constant entry external dcl 427 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4020 4110 3442 4030 Length 4412 3442 70 266 356 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME qmdb 1408 external procedure is an external procedure. process_db_path_arg internal procedure shares stack frame of external procedure qmdb. process_control_arg 152 internal procedure enables or reverts conditions. on unit on line 367 94 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME qmdb 000100 free_seen qmdb 000101 quiet_seen qmdb 000102 wait_time_seen qmdb 000103 args_finished qmdb 000104 code qmdb 000106 main_proc_arg_ptr qmdb 000110 arg_count qmdb 000111 arg_len qmdb 000112 arg_ptr qmdb 000114 nargs qmdb 000115 command qmdb 000116 db_path qmdb 000170 supplied_db_path qmdb 000242 quiesce_control qmdb 000243 quiesce_wait_time qmdb 000244 caller_name qmdb 000250 number_of_paths qmdb 000252 local_area qmdb 002252 mrds_authorization_ptr qmdb 002254 mrds_path_info_ptr qmdb THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this return tra_ext enable ext_entry int_entry size_check_fx1 empty THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr cu_$arg_ptr_rel cv_dec_check_ mrds_dm_authorization$get_user_class mrds_dsl_get_version$get_path_info mu_quiesce$quiesce_free mu_quiesce$quiesce_quiet THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$badcall error_table_$badopt error_table_$inconsistent error_table_$insufficient_access error_table_$item_too_big error_table_$too_many_args error_table_$wrong_no_of_args mdbm_data_$quiesce_wait mrds_error_$bad_model mrds_error_$duplicate_opt mrds_error_$no_database mrds_error_$no_model_submodel mrds_error_$version_not_supported LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 486 000670 488 000676 49 000703 93 000722 94 000723 97 000725 98 000734 99 000743 100 000746 101 000751 103 001002 108 001003 109 001007 110 001011 111 001014 115 001015 116 001017 117 001020 121 001022 122 001037 123 001041 124 001043 126 001101 129 001102 130 001105 131 001107 132 001112 134 001147 135 001150 144 001162 145 001165 151 001166 153 001173 157 001175 159 001176 164 001201 165 001203 166 001206 168 001237 173 001240 175 001256 177 001267 178 001272 189 001347 404 001350 414 001362 415 001367 416 001371 417 001372 418 001373 420 001375 421 001377 423 001400 424 001413 425 001416 427 001417 436 001431 437 001436 438 001437 439 001440 441 001442 442 001444 444 001445 445 001456 446 001461 191 001462 196 001463 198 001464 201 001516 203 001526 205 001532 206 001534 207 001536 209 001543 212 001613 217 001614 218 001620 219 001622 220 001624 221 001627 223 001664 224 001665 225 001670 230 001671 231 001674 232 001676 233 001701 238 001766 244 001767 246 002021 247 002023 248 002025 251 002073 252 002074 253 002100 254 002102 255 002105 259 002152 263 002153 268 002155 269 002156 270 002161 271 002163 272 002166 280 002217 282 002220 287 002226 288 002235 289 002237 290 002241 291 002242 292 002244 294 002275 295 002276 296 002300 297 002302 298 002303 300 002304 301 002306 302 002310 305 002341 308 002342 309 002346 310 002350 311 002352 312 002353 313 002355 315 002406 316 002407 317 002411 318 002413 319 002414 321 002415 322 002417 323 002421 326 002452 329 002453 330 002463 331 002465 332 002467 333 002471 334 002472 336 002523 337 002524 338 002526 339 002530 340 002532 342 002563 344 002564 345 002566 346 002571 347 002572 348 002574 350 002625 352 002626 353 002627 354 002645 355 002650 356 002652 358 002704 359 002705 361 002725 362 002727 363 002732 365 002755 367 002756 368 002772 369 002776 371 003021 373 003024 375 003055 376 003057 377 003061 378 003064 381 003116 382 003121 383 003123 384 003126 388 003160 393 003161 397 003162 398 003164 399 003166 402 003240 ----------------------------------------------------------- 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