COMPILATION LISTING OF SEGMENT enter_abs_request Compiled by: Multics PL/I Compiler, Release 33a, of May 30, 1990 Compiled at: ACTC Technologies Inc. Compiled on: 07/17/90 1522.6 mdt Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1990 * 4* * * 5* * Copyright, (C) Honeywell Bull Inc., 1987 * 6* * * 7* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 8* * * 9* * Copyright (c) 1972 by Massachusetts Institute of * 10* * Technology and Honeywell Information Systems, Inc. * 11* * * 12* *********************************************************** */ 13 14 15 16 /* format: style4 */ 17 enter_abs_request: ear: procedure options (separate_static, variable); 18 19 /* A command which places in a ring-1 message segment data that is interpreted as 20* a request for an absentee process. The user of the command must provide 21* a minumum of one argument - the pathname of the absentee input segment. In 22* addition, the following options are allowed: 23* 24* -restart (-rt) . to indicate that the absentee computation may be started over 25* . from the beginning if interupted 26* 27* -output_file (-of) 28* . . to change the pathname of the absentee output file 29* . whose default is identical to the input segment except for a suffix of .absout 30* 31* -limit (-li) . to indicate a cpu limit in seconds 32* 33* -arguments (-ag) . to provide a string containing arguments to the input segment (ala exec_com) 34* 35* -brief (-bf) . to indicate that the command is not to type anything if all goes well 36* 37* -long_id . to indicate that the long form of the request ID is to be typed 38* 39* -queue (-q) . to indicate in which queue request is to be placed - default is 3 40* 41* -time (-tm) . to provide a time before which this request will not be run 42* 43* -resource (-rsc) STRING 44* . . resource (like tape drives) needed by job 45* 46* -sender STRING . RJE station name or ID of other sender 47* 48* -comment (-com) STRING 49* . . instructions to operator or anything else user puts in it 50* 51* -notify (-nt) . send user message on deferral, login, and logout of job 52* 53* -defer_indefinitely, -dfi 54* . . defer job indefinitely; run when operator says to. 55* 56* -proxy USER . enter request on behalf of USER 57* 58* -foreground, -fg . log in as foreground user (i.e., like primary interactive user) 59* 60* -secondary, -sec . ok to log in foreground job as secondary user 61* 62* -truncate, -tc truncate the .absout file when the job runs 63* 64* -authorization STR, -auth STR 65* . . sets the authorization of the process to that specified 66* . . by STR; STR is a character string composed of level and 67* . . category names for the desired authorization, separated 68* . . by commas. STR cannot contain any embedded blank or tab 69* . . characters. (The short names for each level and category 70* . . always contain no blanks or tabs, and can be used 71* . . whenever the corresponding long names contain blanks or 72* . . tabs.) STR must represent an authorization that is less 73* . . than or equal to the maximum authorization of Person_id 74* . . on the Project_id. If -authorization is omitted, your 75* . . current login authorization is used. (See the 76* . . Programmer's Reference Manual for more information about 77* . . process authorizations.) 78* -home_dir PATH, -hd PATH 79* . . sets your home directory to the path specified if your 80* . . project administrator allows it. 81* -no_start_up, -ns. instructs the standard process overseer not to execute 82* . . your start_up.ec segment if the project administrator 83* . . allows it. 84* -process_overseer PATH, -po PATH 85* . . sets your process overseer to the procedure given by path 86* . . if your project administrator allows it. If path ends in 87* . . the characters ",direct", the specified procedure is 88* . . called directly during process initialization rather than 89* . . by the standard system-provided procedure. This means 90* . . that the program used by path must perform the tasks that 91* . . would have been performed by the standard procedure. The 92* . . length of the -po character strings must be less than 64 93* . . characters. 94* -ring N, -rg N . sets your initial ring to N if this ring number is 95* . . greater than or equal to your registered minimum ring and 96* . . less than your registered maximum ring. 97* start_up . instructs the standard process overseer to execute your 98* . . start_up.ec segment 99* 100* If any error occurs, a request for an absentee process will not be made. 101* 102**/ 103 104 105 /****^ HISTORY COMMENTS: 106* 1) change(86-03-01,Gilcrease), approve(86-03-27,MCR7370), 107* audit(86-06-25,Lippard), install(86-06-30,MR12.0-1082): 108* comment for hcom. 109* coded by E. Stone 5/71 as submit_abs_request 110* modified by E. Stone 10/06/71 111* modified to be ear by Dennis Capps Feb 18, 1972 112* modified by Dennis Capps Feb 18, 1973 113* Modified 6/1/76 by Steve Herbst to check absin and absout seg access 114* Modified 01/25/77 by C. D. Tavares to check -limit against site-defined max limit, not just "20 minutes" 115* Modified April 1978 by T. Casey to use version 4 absentee request structure and store new argument info in it, 116* and to clean up and modernize the code. 117* Modified November 1978 by T. Casey for MR7.0 absentee enhancements. 118* Modified June 1979 by C. Hornig to not insist on checking access. 119* Modified November 1979 by T. Casey to print 8 digits of request ID by default. 120* Modified 22 September 1980 by G. Palter to use site_settable default absentee queue and not look at installation_parms 121* or whotab. 122* Modified July 1984 by C. Marker changed the call to cu_$arg_count to 123* include a code variable so that we can return the right error message 124* when there is an attempt to use this as an active function. 125* 2) change(86-03-27,Gilcrease), approve(86-03-27,MCR7370), 126* audit(86-06-25,Lippard), install(86-06-30,MR12.0-1082): 127* Add -truncate,-tc, and -extend arguments for truncating absout files. 128* SCP6297. 129* 3) change(86-04-01,Gilcrease), approve(86-04-01,MCR7372), 130* audit(86-06-25,Lippard), install(86-06-30,MR12.0-1082): 131* Remove restriction that .absin must be first argument. Allow the absout 132* file to be a msf. Add "argument" to compare for "-ag" and "-arguments". 133* 4) change(86-04-01,Lippard), approve(85-12-30,MCR7326), 134* audit(86-10-27,GDixon), install(86-10-28,MR12.0-1200): 135* Modified 13 December 1985 (above date to satisfy picky hcom) 136* by Jim Lippard to use send_as_request_ instead of hcs_$wakeup. 137* 5) change(87-07-07,GDixon), approve(87-07-07,MCR7741), 138* audit(87-07-07,Hartogs), install(87-08-04,MR12.1-1055): 139* Include user_abs_attributes.incl.pl1 as part of splitting 140* abs_message_format.incl.pl1. 141* 6) change(87-11-10,Parisek), approve(88-02-11,MCR7849), 142* audit(88-05-03,Lippard), install(88-07-13,MR12.2-1047): 143* A. Added more standard login control arguments; -authorization, 144* -home_dir, -no_start_up, -process_overseer, -ring and 145* -start_up. SCP 6367. 146* B. Implemented use of exec_com search paths for locating the absin. 147* SCP 6331. 148* C. Removed all references to request, & local_asraci structures, and 149* added references to abs_request_info data to be passed to 150* enter_abs_request_ subroutine which will define the request structure 151* data and establish the message segment. SCP 6367. 152* 7) change(88-04-29,Parisek), approve(88-04-29,MCR7878), 153* audit(88-05-03,Lippard), install(88-07-13,MR12.2-1047): 154* Move input pathname parsing to the enter_abs_request_ subroutine. 155* The subroutine now checks if ec search paths will be used. 156* 8) change(88-08-16,Parisek), approve(88-09-22,MCR7991), 157* audit(88-09-26,Fawcett), install(88-09-30,MR12.2-1124): 158* Inhibit printing of messages if -brief given. 159* 9) change(90-06-06,Vu), approve(90-06-06,MCR8177), audit(90-06-20,Schroth), 160* install(90-07-17,MR12.4-1020): 161* Users with minimum authorization greater than system_low are unable to 162* submit absentee requests unless they state the authorization level. 163* END HISTORY COMMENTS */ 164 165 166 dcl aim_check_$in_range entry (bit (72) aligned, (2) bit (72) aligned) returns (bit (1) aligned); 167 dcl com_err_ entry options (variable); 168 dcl convert_authorization_$from_string entry (bit (72) aligned, char (*), fixed bin (35)); 169 dcl convert_date_to_binary_ entry (char (*), fixed bin (71), fixed bin (35)); 170 dcl cu_$arg_count ext entry (fixed bin, fixed bin (35)); 171 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 172 dcl cu_$level_get entry (fixed bin); 173 dcl cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin (35)); 174 dcl enter_abs_request_ entry (ptr, ptr, fixed bin (35)); 175 dcl expand_pathname_$add_suffix entry (char(*), char(*), char(*), char(*), fixed bin(35)); 176 dcl get_authorization_ entry returns (bit (72) aligned); 177 dcl get_group_id_$tag_star entry returns (char (32)); 178 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 179 dcl ioa_ entry options (variable); 180 dcl ioa_$rsnnl entry options (variable); 181 dcl ioa_$ioa_switch entry options (variable); 182 dcl parse_resource_desc_$check entry (char (*), ptr, ptr, ptr, char (*) varying, fixed bin (35)); 183 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 184 dcl system_info_$abs_limits entry ((4) fixed bin (35), fixed bin (35), (0:7, 4) fixed bin (35)); 185 dcl system_info_$default_absentee_queue entry (fixed bin); 186 dcl user_info_$attributes entry (char (*) varying); 187 dcl user_info_$authorization_range entry ((2) bit (72) aligned); 188 dcl user_info_$ring_range entry ((2) fixed bin); 189 190 dcl iox_$error_output ext pointer; 191 192 dcl as_error_table_$illegal_hd_arg ext fixed bin (35); 193 dcl as_error_table_$illegal_ip_arg ext fixed bin (35); 194 dcl as_error_table_$ring_too_high ext fixed bin (35); 195 dcl as_error_table_$ring_too_low ext fixed bin (35); 196 dcl error_table_$ai_out_range ext fixed bin (35); 197 dcl error_table_$badopt ext fixed bin (35); 198 dcl error_table_$noarg fixed bin (35) ext static; 199 dcl error_table_$not_abs_path ext fixed bin (35); 200 dcl error_table_$pathlong ext fixed bin (35); 201 dcl error_table_$root ext fixed bin (35); 202 203 204 dcl (addr, after, before, index, length, max, null, rtrim, substr, unspec) builtin; 205 206 dcl cleanup condition; 207 208 dcl argp ptr; /* pointer to argument */ 209 210 dcl id char (17) int static init ("enter_abs_request") options (constant); /* name of command - for error messages */ 211 dcl my_attributes char (128) varying; /* user's attributes */ 212 dcl rsc_msg char (100) varying; /* place for error message about resource description */ 213 dcl abs_user char (32); /* group id of absentee user */ 214 dcl rqid char (19); /* to hold the request id for printing */ 215 dcl option char (32) aligned init (""); /* copy of argument if an option */ 216 dcl proxy_name char (32); /* personid of proxy user */ 217 dcl string char (8) aligned; /* used for error message */ 218 /* name of system directory in which absentee */ 219 /* message segment & who table are located */ 220 dcl sysdir char (168) aligned internal static init (">system_control_1"); 221 222 dcl arglen fixed bin; /* length of argument string */ 223 dcl code fixed bin (35); /* error code */ 224 dcl queue fixed bin; /* queue number */ 225 dcl ms_count fixed bin; /* number of previous absentee requests */ 226 dcl n_arg fixed bin; /* argument number */ 227 dcl i fixed bin; /* temp */ 228 dcl ring fixed bin; /* user's validation level */ 229 dcl min_ring fixed bin; /* minimum user ring */ 230 dcl max_ring fixed bin; /* maximum user ring */ 231 dcl ringrng (2) fixed bin; /* authorized login ring range */ 232 233 dcl 1 local_ari aligned like abs_return_info; 234 235 dcl attr_sw bit (1) aligned; /* indicates whether an attribute dependent control arg was given */ 236 dcl input_sw bit (1) aligned; /* indicates whether input seg has been given twice */ 237 dcl output_sw bit (1) aligned; /* indicates whether output seg has been given twice */ 238 dcl arg_sw bit (1) aligned; /* indicates whether argument string has been given twice */ 239 dcl limit_sw bit (1) aligned; /* indicates whether cpu limit has been given twice */ 240 dcl proxy_sw bit (1) aligned; /* indicates if proxy request given twice */ 241 dcl brief_sw bit (1) aligned; /* indicates whether brief option is wanted */ 242 dcl long_id_sw bit (1) aligned; /* indicates whether long ID is wanted */ 243 dcl queue_sw bit (1) aligned; /* indicates whether queue specified */ 244 dcl foreground_sw bit (1) aligned; /* indicates whether foreground queue specified */ 245 dcl aok bit (1) aligned; /* ON if user has requested attribute */ 246 247 dcl number_of_arguments fixed bin; 248 dcl length_of_arguments fixed bin; 249 250 dcl (resource_argno, sender_argno, comment_argno) fixed bin init (0); 251 252 dcl arg char (arglen) based (argp); 253 dcl authorization bit (72) aligned; 254 dcl authrng (2) bit (72) aligned; 255 dcl max_authorization bit (72) aligned; 256 dcl min_authorization bit (72) aligned; 257 258 dcl default_cpu_limits (4) fixed bin (35); 259 dcl default_foreground_cpu_limit fixed bin (35); 260 dcl max_cpu_limits (0:7, 4) fixed bin (35); 261 dcl maxlim fixed bin (35); 262 263 1 1 /* Begin include file abs_request_dcls.incl.pl1 */ 1 2 1 3 /****^ HISTORY COMMENTS: 1 4* 1) change(86-02-19,Cox), approve(86-05-12,MCR7390), audit(86-05-12,Newcomb), 1 5* install(86-06-30,MR12.0-1082): 1 6* Initially written. 1 7* 2) change(86-06-20,Gilcrease), approve(86-06-20,MCR7390), 1 8* audit(86-06-25,Lippard), install(86-06-30,MR12.0-1082): 1 9* Make abs_request_info.attributes.truncate_absout known, 1 10* for version 2 of the include file, 1 11* to indicate -truncate .absout is implemented SCR6297. 1 12* 3) change(86-10-14,Lippard), approve(85-12-30,MCR7326), 1 13* audit(86-10-27,GDixon), install(86-10-28,MR12.0-1200): 1 14* Add comments describing each field. 1 15* 4) change(87-11-11,Parisek), approve(88-02-11,MCR7849), 1 16* audit(88-05-04,Lippard), install(88-07-13,MR12.2-1047): 1 17* Added the request_info version 3 elements init_proc, subsystem_name, 1 18* home_dir, initial_ring, no_start_up. Added the return_info version 1 19* 3 elements: error_msg, and abs_pathname. SCP6367. 1 20* 5) change(88-04-29,Parisek), approve(88-04-29,MCR7878), 1 21* audit(88-05-04,Lippard), install(88-07-13,MR12.2-1047): 1 22* A. Remove the must_use_search bit element. 1 23* B. Replace the input_segment_entryname element with an unused pad 1 24* field, as the input entryname will be located by enter_abs_request_ 1 25* and placed into the request header as request.request_header.ename. 1 26* END HISTORY COMMENTS */ 1 27 1 28 /* format: style2,^inddcls,ifthenstmt,ifthendo,^indnoniterdo,^inditerdo,ind3,idind32 */ 1 29 1 30 dcl 1 abs_request_info structure aligned based (abs_request_info_ptr), 1 31 2 version char (8) aligned, /* version number of this structure */ 1 32 2 resource_length fixed bin, /* length of resource string */ 1 33 2 comment_length fixed bin, /* length of comment string */ 1 34 2 max_arg_length fixed bin, /* length of longest arg */ 1 35 2 arg_count fixed bin, /* number of args */ 1 36 2 proxy_personid char (22) aligned, /* person ID of proxy user */ 1 37 2 proxy_projectid char (9) aligned, /* project ID of proxy user */ 1 38 2 queue char (4) aligned, /* absentee queue */ 1 39 2 deferred_time fixed bin (71), /* time at which absentee is to run */ 1 40 2 max_cpu_time fixed bin (35), /* max CPU time for absentee process */ 1 41 2 requested_authorization bit (72), /* authorization at which absentee is to be logged in */ 1 42 2 input_segment_dirname char (168) unaligned,/* pathname of absin segment */ 1 43 2 pad (8) fixed bin, /* reserved */ 1 44 2 output_segment_dirname char (168) unaligned,/* pathname of absout segment */ 1 45 2 output_segment_entryname char (32) unaligned, 1 46 2 attributes aligned, 1 47 3 restartable bit (1) unaligned, /* True if this absentee may be restarted */ 1 48 3 user_deferred_indefinitely 1 49 bit (1) unaligned, /* True if this absentee is to be deferred indefinitely */ 1 50 3 secondary_ok bit (1) unaligned, /* True if it's OK for foreground job to be logged in without 1 51* primary status */ 1 52 3 truncate_absout bit (1) unaligned, /* True if absout is to be truncated before absentee runs */ 1 53 3 notify bit (1) unaligned, /* True if submitter is to be notified when job starts and ends */ 1 54 3 no_start_up bit (1) unaligned, 1 55 3 attributes_mbz bit (30) unaligned, /* must be zero */ 1 56 2 sender char (32), /* submitter of absentee */ 1 57 2 initial_ring fixed bin, /* initial ring requested */ 1 58 2 home_dir char (64), /* user's home dir */ 1 59 2 init_proc char (64), /* login responder name */ 1 60 1 61 2 resource char (arqi_resource_length refer (abs_request_info.resource_length)), 1 62 /* any RCP resources required by the job */ 1 63 2 comment char (arqi_comment_length refer (abs_request_info.comment_length)), 1 64 /* comment field */ 1 65 2 arguments dimension (arqi_arg_count refer (abs_request_info.arg_count)) 1 66 char (arqi_max_arg_length refer (abs_request_info.max_arg_length)) varying; 1 67 /* additional arguments to absentee process */ 1 68 1 69 1 70 dcl 1 abs_return_info structure aligned based (abs_return_info_ptr), 1 71 2 version char (8) aligned, /* version of this structure */ 1 72 2 request_id fixed bin (71), /* request ID of the absentee job: 1 73* 0 if not entered, 1 74* > 0 if entered */ 1 75 2 queue char (4) aligned, /* queue the job is entered in */ 1 76 2 queue_requests_count fixed bin (17), /* total number of requests in the queue */ 1 77 2 error_msg char (256), /* Additional error message info */ 1 78 2 abs_pathname char (168); /* Absolute absin pathname found via ec search paths */ 1 79 1 80 dcl (abs_request_info_ptr, abs_return_info_ptr) 1 81 ptr automatic; 1 82 1 83 dcl ( 1 84 ABSENTEE_REQUEST_INFO_VERSION_3 initial ("arqi_003"), 1 85 ABSENTEE_RETURN_INFO_VERSION_3 initial ("arti_003") 1 86 ) char (8) internal static options (constant); 1 87 1 88 /**** The following fields should be set before abs_request_info is allocated */ 1 89 dcl arqi_resource_length fixed bin; 1 90 dcl arqi_comment_length fixed bin; 1 91 dcl arqi_max_arg_length fixed bin; 1 92 dcl arqi_arg_count fixed bin; 1 93 1 94 dcl ( 1 95 BACKGROUND_QUEUE dimension (0:4) init ("0", "1", "2", "3", "4"), 1 96 FOREGROUND_QUEUE init ("fg"), 1 97 DEFAULT_QUEUE init ("dft") 1 98 ) char (4) aligned internal static options (constant); 1 99 1 100 /* End include file abs_request_dcls.incl.pl1 */ 264 265 266 267 abs_request_info_ptr = null; 268 269 on cleanup call cleanup_proc; 270 271 call user_info_$ring_range (ringrng); /* Get user's low and high ring limits */ 272 min_ring = ringrng (1); 273 max_ring = ringrng (2); 274 275 call user_info_$authorization_range (authrng); /* Get user's low and high auth limits */ 276 min_authorization = authrng (1); 277 max_authorization = authrng (2); 278 279 arqi_resource_length = 0; /* Initialize variable extents for structure data */ 280 arqi_comment_length = 0; 281 arqi_arg_count = 0; 282 arqi_max_arg_length = 0; 283 284 call get_temp_segment_ (id, abs_request_info_ptr, code); 285 if code ^= 0 then do; 286 call com_err_ (code, id, "temporary segment"); 287 goto RETURN; 288 end; 289 290 unspec (abs_request_info) = "0"b; 291 292 abs_request_info.version = ABSENTEE_REQUEST_INFO_VERSION_3; 293 /* set version number of absentee request */ 294 local_ari.version = ABSENTEE_RETURN_INFO_VERSION_3; 295 /* set return version */ 296 call system_info_$default_absentee_queue (queue); /* get default */ 297 if queue = 0 then queue = 3; /* must use default default */ 298 abs_request_info.queue = DEFAULT_QUEUE; /* queue's name */ 299 300 /* The absentee request structure that this program builds ends with a number of character 301* strings (and one array) of variable extents. Their extents are declared using the refer option, 302* and the values of the extents are stored in fixed binary variables near the beginning of the structure. 303* The code that fills in the structure must be careful not to store into any of the variable extent 304* elements until the values of all the extents have been computed and stored in the structure 305* (since the offset of each of these elements is, of course, a function of the lengths of all those 306* that precede it). There are comments in those places where it becomes known that all the refer extents have 307* been set, noting that it is now ok to store into the variable extent elements. */ 308 309 /* initialize structure elements */ 310 311 abs_request_info.output_segment_dirname = ""; 312 abs_request_info.output_segment_entryname = ""; 313 abs_request_info.input_segment_dirname = ""; 314 abs_request_info.pad = 0; 315 abs_request_info.proxy_personid = ""; 316 abs_request_info.proxy_projectid = ""; 317 abs_request_info.sender = ""; 318 abs_request_info.initial_ring = -1; /* If this value doesn't change we'll use default */ 319 abs_request_info.home_dir = ""; 320 abs_request_info.init_proc = ""; 321 abs_request_info.resource = ""; 322 abs_request_info.comment = ""; 323 abs_request_info.arguments (*) = ""; 324 abs_request_info.requested_authorization = get_authorization_ (); 325 326 input_sw, /* initialize several variables */ 327 output_sw, 328 arg_sw, 329 limit_sw, 330 brief_sw, 331 long_id_sw, 332 proxy_sw, 333 foreground_sw, 334 queue_sw, 335 attr_sw = "0"b; 336 337 call cu_$level_get (ring); 338 abs_user = get_group_id_$tag_star (); 339 /* Change Person.Project.* to Person.Project.m */ 340 substr (abs_user, length (rtrim (abs_user)), 1) = "m"; 341 342 call cu_$arg_count (number_of_arguments, code); 343 if code ^= 0 then do; 344 call com_err_ (code, id); 345 goto RETURN; 346 end; 347 348 if number_of_arguments = 0 then code = error_table_$noarg; 349 n_arg = 1; 350 351 do while (n_arg ^> number_of_arguments); 352 353 call cu_$arg_ptr (n_arg, argp, arglen, code); 354 if code ^= 0 then go to arg_err; 355 356 if index (arg, "-") ^= 1 then do; 357 /* convert argument to directory name & entry name */ 358 if ^input_sw then do; 359 abs_request_info.input_segment_dirname = arg; 360 input_sw = "1"b; /* Note absin segment is supplied */ 361 end; 362 end; 363 364 365 /* Now go thru all the rest of the arguments (if there are any ) */ 366 367 else do; 368 369 option = arg; /* make a copy for efficiency + for */ 370 string = "After"; /* nice error message if arg missing after option */ 371 372 if option = "-rt" | option = "-restart" then 373 abs_request_info.restartable = "1"b; 374 /* turn on appropriate bit in absentee request if restartable */ 375 376 else if option = "-nt" | option = "-notify" then 377 abs_request_info.notify = "1"b; /* notify user when request has logged in */ 378 379 else if option = "-dfi" | option = "-defer" | option = "-defer_indefinitely" then 380 abs_request_info.user_deferred_indefinitely = "1"b; 381 /* operator must start absentee process */ 382 383 else if option = "-of" | option = "-output_file" then do; 384 if output_sw then do; /* check whether option given before */ 385 dup_arg: call com_err_ (0, id, "Option ^a duplicated.", arg); 386 goto RETURN; 387 end; 388 output_sw = "1"b; /* indicate that output option given */ 389 call get_next_arg; 390 391 /* convert from relative to full pathname */ 392 call expand_pathname_$add_suffix (arg, "absout", abs_request_info.output_segment_dirname, abs_request_info.output_segment_entryname, code); 393 394 if code ^= 0 then do; 395 arg_err: call com_err_ (code, id, "^a", arg); 396 goto RETURN; 397 end; 398 399 if abs_request_info.output_segment_entryname = "" then do; 400 call com_err_ (error_table_$root, id, "^a", arg); 401 goto RETURN; 402 end; 403 end; 404 405 else if option = "-proxy" then do; /* submit on behalf of another user */ 406 if proxy_sw then goto dup_arg; 407 proxy_sw = "1"b; 408 call get_next_arg; 409 proxy_name = arg; 410 abs_user = arg || ".p"; /* Proxy users are Person.Project.p */ 411 end; 412 413 else if option = "-rsc" | option = "-resource" | option = "-resources" then do; 414 if resource_argno ^= 0 then goto dup_arg; /* already given once */ 415 call get_next_arg; 416 417 call parse_resource_desc_$check /* see if resource description is ok */ 418 (arg, null (), null (), null (), rsc_msg, code); 419 if code ^= 0 then do; /* parse_ ... returned us a message */ 420 call com_err_ (0, id, "-resource error: ^a", rsc_msg); 421 goto RETURN; 422 end; 423 else if rsc_msg ^= "" then /* warning about obsolete resource description */ 424 call ioa_ ("^a: ^a", id, rsc_msg); /* print it and continue */ 425 426 abs_request_info.resource_length = arglen; 427 /* remember how long it is */ 428 resource_argno = n_arg; /* and where it is */ 429 end; 430 431 else if option = "-sender" then do; /* logic is identical to that for -resource, above */ 432 /* user optional string */ 433 if sender_argno ^= 0 then goto dup_arg; 434 call get_next_arg; 435 sender_argno = n_arg; 436 end; 437 438 else if option = "-com" | option = "-cm" | option = "-comment" then do; 439 if comment_argno ^= 0 then goto dup_arg; 440 call get_next_arg; 441 abs_request_info.comment_length = arglen; 442 comment_argno = n_arg; 443 end; 444 445 else if option = "-li" | option = "-limit" then do; 446 if limit_sw then go to dup_arg; /* check whether option given before */ 447 limit_sw = "1"b; /* indicate that limit option given */ 448 call get_next_arg; 449 /* convert argument from character string to fixed bin */ 450 /* and set max cpu time in request */ 451 abs_request_info.max_cpu_time = cv_dec_check_ (arg, code); 452 if code ^= 0 then goto num_err; 453 454 if abs_request_info.max_cpu_time < 0 then do; 455 /* check number for reasonable value */ 456 num_err: call com_err_ (0, id, "Invalid cpu limit ^a", arg); 457 goto RETURN; 458 end; 459 end; 460 461 else if option = "-ag" | option = "-argument" | option = "-arguments" then do; 462 463 /* Everything after this is assumed to be arguments to the absentee job. */ 464 465 abs_request_info.arg_count = number_of_arguments - n_arg; 466 /* remember how many there are */ 467 468 /* Make one pass to get the argument lengths that arguments are dependent 469* on in their dcls, then make a second pass to fill in the arguments 470* themselves. */ 471 length_of_arguments = 1; 472 do i = 1 to abs_request_info.arg_count; 473 call get_next_arg; 474 length_of_arguments = length_of_arguments + arglen; 475 end; 476 abs_request_info.max_arg_length = length_of_arguments - 1; 477 478 length_of_arguments = 1; 479 n_arg = n_arg - abs_request_info.arg_count; 480 do i = 1 to abs_request_info.arg_count; 481 call get_next_arg; 482 abs_request_info.arguments (i) = substr (arg, 1, arglen); 483 end; 484 end; 485 486 else if option = "-bf" | option = "-brief" then 487 brief_sw = "1"b; /* indicate that brief option is in force */ 488 489 else if option = "-lgid" | option = "-long_id" then 490 long_id_sw = "1"b; /* long request identifier */ 491 492 else if option = "-q" | option = "-queue" then do; 493 if queue_sw then go to dup_arg; /* check whether option given before */ 494 queue_sw = "1"b; /* indicate that queue specified */ 495 call get_next_arg; 496 begin; /* rowr-bazzle PL/1 */ 497 dcl queue35 fixed bin (35); 498 queue35 = cv_dec_check_ (arg, code); /* see if valid number */ 499 queue = queue35; /* harrumph */ 500 end; 501 if code ^= 0 then do; 502 if arg = "fg" | arg = "foreground" | arg = "-fg" | arg = "-foreground" then do; 503 foreground_sw = "1"b; 504 queue_sw = ""b; /* a numbered queue not really given */ 505 queue = 0; /* 0 means "interactive" to some programs */ 506 end; 507 else do; 508 bad_queue: call com_err_ (0, id, "Illegal queue number ^a", arg); 509 goto RETURN; 510 end; 511 end; 512 /* construct entry name of absentee message segment */ 513 else do; 514 if queue < 0 | queue > 4 then goto bad_queue; 515 abs_request_info.queue = BACKGROUND_QUEUE (queue); 516 if queue = 0 then queue = 1; /* queue zero is really the front end of queue 1 */ 517 end; 518 519 end; 520 521 else if option = "-fg" | option = "-foreground" then do; 522 /* login as primary user (like interactive for load_control info) */ 523 foreground_sw = "1"b; 524 queue = 0; 525 end; 526 527 else if option = "-tm" | option = "-time" then do; 528 if abs_request_info.deferred_time > 0 then 529 go to dup_arg; /* check whether option given before */ 530 call get_next_arg; 531 call convert_date_to_binary_ (arg, abs_request_info.deferred_time, code); 532 533 if code ^= 0 then go to arg_err; 534 535 end; 536 537 else if option = "-sec" | option = "-secondary" | option = "-standby" then 538 abs_request_info.secondary_ok = "1"b; 539 /* not primary, but background user status */ 540 541 else if option = "-truncate" | option = "-tc" then abs_request_info.truncate_absout = "1"b; 542 543 else if option = "-extend" then abs_request_info.truncate_absout = "0"b; 544 545 else if option = "-authorization" | option = "-auth" then do; 546 call get_next_arg; 547 if substr (arg, 1, 1) = "-" then do; 548 code = error_table_$noarg; 549 go to arg_err; /* missing operand */ 550 end; 551 call convert_authorization_$from_string (authorization, (arg), code); 552 if code ^= 0 then goto arg_err; 553 if aim_check_$in_range (authorization, authrng) then 554 abs_request_info.requested_authorization = authorization; 555 /* check if range is within limits found earlier */ 556 else do; 557 code = error_table_$ai_out_range; 558 /* not in range */ 559 goto arg_err; 560 end; 561 attr_sw = "1"b; /* used if submitted by proxy */ 562 /* so warning message will be printed */ 563 end; 564 else if option = "-home_dir" | option = "-hd" then do; 565 call get_attributes ("vhomedir", aok); 566 /* does user have this attribute? */ 567 if aok then do; /* yes */ 568 call get_next_arg; 569 if substr (arg, 1, 1) = "-" then do; 570 /* not a control arg */ 571 code = error_table_$noarg; 572 goto arg_err; 573 end; 574 if substr (arg, 1, 1) ^= ">" then do; 575 code = error_table_$not_abs_path; 576 goto arg_err; 577 end; 578 if arglen > length (abs_request_info.home_dir) then do; 579 code = error_table_$pathlong; 580 goto arg_err; 581 end; 582 abs_request_info.home_dir = substr (arg, 1, arglen); 583 end; 584 else do; /* no */ 585 code = as_error_table_$illegal_hd_arg; 586 go to arg_err; 587 end; 588 attr_sw = "1"b; /* for proxy warning */ 589 end; 590 else if option = "-no_start_up" | option = "-ns" then do; 591 abs_request_info.no_start_up = "1"b; 592 /* do not execute start_up.ec during login */ 593 attr_sw = "1"b; /* for proxy warning */ 594 end; 595 else if option = "-process_overseer" | option = "-po" then do; 596 call get_next_arg; 597 if substr (arg, 1, 1) = "-" then do; 598 /* not a control arg */ 599 code = error_table_$noarg; 600 goto arg_err; 601 end; 602 if arglen > length (abs_request_info.init_proc) then do; 603 code = error_table_$pathlong; 604 goto arg_err; 605 end; 606 call get_attributes ("vinitproc", aok); 607 /* does user have this attribute */ 608 if aok then abs_request_info.init_proc = substr (arg, 1, arglen); 609 /* yes */ 610 else do; /* no */ 611 code = as_error_table_$illegal_ip_arg; 612 go to arg_err; 613 end; 614 attr_sw = "1"b; /* for proxy warning */ 615 end; 616 else if option = "-ring" | option = "-rg" then do; 617 call get_next_arg; 618 abs_request_info.initial_ring = cv_dec_check_ (arg, code); 619 /* requesting ring */ 620 if code ^= 0 then go to arg_err; 621 if abs_request_info.initial_ring < min_ring then do; 622 code = as_error_table_$ring_too_low; 623 /* lower than lowest ring noted earlier */ 624 goto arg_err; 625 end; 626 else if abs_request_info.initial_ring > max_ring then do; 627 /* higher than highest ring noted earlier */ 628 code = as_error_table_$ring_too_high; 629 goto arg_err; 630 end; 631 attr_sw = "1"b; /* for proxy warning */ 632 end; 633 else if option = "-start_up" then do; /* inverse of -no_startup */ 634 abs_request_info.no_start_up = "0"b; 635 end; 636 else do; 637 code = error_table_$badopt; 638 go to arg_err; 639 end; 640 end; 641 n_arg = n_arg + 1; 642 end; /* end loop over al2nd thru last arguments */ 643 644 /* All done processing arguments. Now make some validity checks, and finish filling in the request structure. */ 645 646 /* Check consistency of -queue, -foreground, and -secondary */ 647 648 if queue_sw & foreground_sw then do; 649 call com_err_ (0, id, "The -foreground and -queue arguments are inconsistent."); 650 goto RETURN; 651 end; 652 if abs_request_info.secondary_ok & ^foreground_sw then do; 653 call com_err_ (0, id, "The -secondary argument is only valid if the -foreground argument is also given."); 654 goto RETURN; 655 end; 656 657 /* Either fill in default cpu time limit, or check specified limit for reasonableness. */ 658 659 call system_info_$abs_limits (default_cpu_limits, default_foreground_cpu_limit, max_cpu_limits); 660 /* get defaults */ 661 if ^limit_sw then do; /* if -limit not given */ 662 if foreground_sw then /* fill in the appropriate default limit */ 663 abs_request_info.max_cpu_time = default_foreground_cpu_limit; 664 else abs_request_info.max_cpu_time = default_cpu_limits (queue); 665 end; 666 667 if ^foreground_sw then do; /* if background job, check limit against per-shift max */ 668 maxlim = 0; 669 do i = 0 to 7; 670 if maxlim < max_cpu_limits (i, queue) then 671 maxlim = max_cpu_limits (i, queue); 672 end; 673 674 if abs_request_info.max_cpu_time > maxlim then do; 675 call com_err_ (0, id, "Warning: the ^[specified^;default^] cpu time limit of ^d sec. is greater than 676 the highest time limit for any shift (^d sec.). Request entered, 677 but operator intervention will be required to log it in.", 678 limit_sw, abs_request_info.max_cpu_time, maxlim); 679 end; 680 end; 681 682 /* All of the refer extents have definitely been set by now, so we can store into the variable extent elements. */ 683 684 if resource_argno ^= 0 then do; 685 call cu_$arg_ptr (resource_argno, argp, arglen, code); 686 abs_request_info.resource = arg; /* fill in requested resource */ 687 end; 688 689 if sender_argno ^= 0 then do; 690 call cu_$arg_ptr (sender_argno, argp, arglen, code); 691 abs_request_info.sender = arg; /* fill in requested sender string */ 692 end; 693 694 if comment_argno ^= 0 then do; 695 call cu_$arg_ptr (comment_argno, argp, arglen, code); 696 abs_request_info.comment = arg; /* fill in requested comment string */ 697 end; 698 699 /* set proxy name */ 700 if proxy_sw then do; 701 abs_request_info.proxy_personid = before (proxy_name, "."); 702 abs_request_info.proxy_projectid = after (proxy_name, "."); 703 if attr_sw then do; /* Print warning but continue to submit */ 704 call ioa_$ioa_switch (iox_$error_output, "^a: Warning: Cannot check attribute information for user ^a. 705 Job may not run successfully.", id, proxy_name); 706 end; 707 end; 708 709 /* place request in message segment */ 710 711 if foreground_sw then 712 abs_request_info.queue = FOREGROUND_QUEUE; 713 714 call enter_abs_request_ (abs_request_info_ptr, addr(local_ari), code); 715 /* this subroutine actually queues the request */ 716 if code ^= 0 then do; 717 call com_err_ (code, id, local_ari.error_msg); 718 goto RETURN; 719 end; 720 721 if ^brief_sw then do; 722 ms_count = max (0, local_ari.queue_requests_count - 1); 723 call ioa_$rsnnl ("^d", rqid, (0), local_ari.request_id); 724 /* display successful request info */ 725 if ^long_id_sw then rqid = substr (rqid, 7, 8); 726 call ioa_ ("ID: ^a^[;^x^d already requested.^]", rqid, (code = 0), ms_count); 727 call ioa_ ("^a in queue ^a", local_ari.abs_pathname, local_ari.queue); 728 end; 729 730 RETURN: call cleanup_proc; 731 return; 732 733 734 735 /* INTERNAL PROCEDURES */ 736 737 738 cleanup_proc: proc; 739 740 if abs_request_info_ptr ^= null then 741 call release_temp_segment_ (id, abs_request_info_ptr, code); 742 return; 743 744 end cleanup_proc; 745 746 747 /* -------------------- */ 748 749 get_next_arg: proc; 750 751 n_arg = n_arg + 1; 752 call cu_$arg_ptr (n_arg, argp, arglen, code); 753 if code ^= 0 then do; 754 call com_err_ (code, id, "^a ^a", string, option); 755 goto RETURN; 756 end; 757 return; 758 759 end get_next_arg; 760 761 /* -------------------- */ 762 763 get_attributes: 764 proc (pattr, paok); 765 /* check various user attributes */ 766 dcl pattr char (24) parameter; 767 dcl paok bit (1) aligned parameter; 768 769 call user_info_$attributes (my_attributes); 770 if index (my_attributes, rtrim(pattr)) > 0 then paok = "1"b; 771 /* have attribute */ 772 else paok = "0"b; /* not have attribute */ 773 end get_attributes; 774 775 /* -------------------- */ 776 777 test_ear: entry (test_sysdir); /* entry used for testing ear command */ 778 779 dcl test_sysdir char (*); 780 781 sysdir = test_sysdir; /* copy name of test system directory */ 782 783 end enter_abs_request; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/17/90 1522.6 enter_abs_request.pl1 >spec>install>1020>enter_abs_request.pl1 264 1 07/14/88 2115.0 abs_request_dcls.incl.pl1 >ldd>include>abs_request_dcls.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. ABSENTEE_REQUEST_INFO_VERSION_3 000012 constant char(8) initial packed unaligned dcl 1-83 ref 292 ABSENTEE_RETURN_INFO_VERSION_3 000010 constant char(8) initial packed unaligned dcl 1-83 ref 294 BACKGROUND_QUEUE 000002 constant char(4) initial array dcl 1-94 ref 515 DEFAULT_QUEUE 000000 constant char(4) initial dcl 1-94 ref 298 FOREGROUND_QUEUE 000001 constant char(4) initial dcl 1-94 ref 711 abs_pathname 106 000256 automatic char(168) level 2 dcl 233 set ref 727* abs_request_info based structure level 1 dcl 1-30 set ref 290* abs_request_info_ptr 000536 automatic pointer dcl 1-80 set ref 267* 284* 290 292 298 311 312 313 314 315 316 317 318 319 320 321 322 323 324 359 372 376 379 392 392 399 426 441 451 454 465 472 476 479 480 482 515 528 531 537 541 543 553 578 582 591 602 608 618 621 626 634 652 662 664 674 675 686 691 696 701 702 711 714* 740 740* abs_return_info based structure level 1 dcl 1-70 abs_user 000203 automatic char(32) packed unaligned dcl 213 set ref 338* 340 340* 410* addr builtin function dcl 204 ref 714 714 after builtin function dcl 204 ref 702 aim_check_$in_range 000010 constant entry external dcl 166 ref 553 aok 000450 automatic bit(1) dcl 245 set ref 565* 567 606* 608 arg based char packed unaligned dcl 252 set ref 356 359 369 385* 392* 395* 400* 409 410 417* 451* 456* 482 498* 502 502 502 502 508* 531* 547 551 569 574 582 597 608 618* 686 691 696 arg_count 5 based fixed bin(17,0) level 2 dcl 1-30 set ref 290 323 465* 472 479 480 arg_sw 000441 automatic bit(1) dcl 238 set ref 326* arglen 000242 automatic fixed bin(17,0) dcl 222 set ref 353* 356 359 369 385 385 392 392 395 395 400 400 409 410 417 417 426 441 451 451 456 456 474 482 482 498 498 502 502 502 502 508 508 531 531 547 551 569 574 578 582 582 597 602 608 608 618 618 685* 686 690* 691 695* 696 752* argp 000106 automatic pointer dcl 208 set ref 353* 356 359 369 385 392 395 400 409 410 417 451 456 482 498 502 502 502 502 508 531 547 551 569 574 582 597 608 618 685* 686 690* 691 695* 696 752* arguments based varying char array level 2 dcl 1-30 set ref 323* 482* arqi_arg_count 000543 automatic fixed bin(17,0) dcl 1-92 set ref 281* arqi_comment_length 000541 automatic fixed bin(17,0) dcl 1-90 set ref 280* arqi_max_arg_length 000542 automatic fixed bin(17,0) dcl 1-91 set ref 282* arqi_resource_length 000540 automatic fixed bin(17,0) dcl 1-89 set ref 279* as_error_table_$illegal_hd_arg 000070 external static fixed bin(35,0) dcl 192 ref 585 as_error_table_$illegal_ip_arg 000072 external static fixed bin(35,0) dcl 193 ref 611 as_error_table_$ring_too_high 000074 external static fixed bin(35,0) dcl 194 ref 628 as_error_table_$ring_too_low 000076 external static fixed bin(35,0) dcl 195 ref 622 attr_sw 000436 automatic bit(1) dcl 235 set ref 326* 561* 588* 593* 614* 631* 703 attributes 171 based structure level 2 dcl 1-30 authorization 000456 automatic bit(72) dcl 253 set ref 551* 553* 553 authrng 000460 automatic bit(72) array dcl 254 set ref 275* 276 277 553* before builtin function dcl 204 ref 701 brief_sw 000444 automatic bit(1) dcl 241 set ref 326* 486* 721 cleanup 000100 stack reference condition dcl 206 ref 269 code 000243 automatic fixed bin(35,0) dcl 223 set ref 284* 285 286* 342* 343 344* 348* 353* 354 392* 394 395* 417* 419 451* 452 498* 501 531* 533 548* 551* 552 557* 571* 575* 579* 585* 599* 603* 611* 618* 620 622* 628* 637* 685* 690* 695* 714* 716 717* 726 740* 752* 753 754* com_err_ 000012 constant entry external dcl 167 ref 286 344 385 395 400 420 456 508 649 653 675 717 754 comment based char level 2 dcl 1-30 set ref 322* 696* comment_argno 000455 automatic fixed bin(17,0) initial dcl 250 set ref 250* 439 442* 694 695* comment_length 3 based fixed bin(17,0) level 2 dcl 1-30 set ref 290 322 323 441* 482 696 convert_authorization_$from_string 000014 constant entry external dcl 168 ref 551 convert_date_to_binary_ 000016 constant entry external dcl 169 ref 531 cu_$arg_count 000020 constant entry external dcl 170 ref 342 cu_$arg_ptr 000022 constant entry external dcl 171 ref 353 685 690 695 752 cu_$level_get 000024 constant entry external dcl 172 ref 337 cv_dec_check_ 000026 constant entry external dcl 173 ref 451 498 618 default_cpu_limits 000470 automatic fixed bin(35,0) array dcl 258 set ref 659* 664 default_foreground_cpu_limit 000474 automatic fixed bin(35,0) dcl 259 set ref 659* 662 deferred_time 20 based fixed bin(71,0) level 2 dcl 1-30 set ref 528 531* enter_abs_request_ 000030 constant entry external dcl 174 ref 714 error_msg 6 000256 automatic char(256) level 2 dcl 233 set ref 717* error_table_$ai_out_range 000100 external static fixed bin(35,0) dcl 196 ref 557 error_table_$badopt 000102 external static fixed bin(35,0) dcl 197 ref 637 error_table_$noarg 000104 external static fixed bin(35,0) dcl 198 ref 348 548 571 599 error_table_$not_abs_path 000106 external static fixed bin(35,0) dcl 199 ref 575 error_table_$pathlong 000110 external static fixed bin(35,0) dcl 200 ref 579 603 error_table_$root 000112 external static fixed bin(35,0) dcl 201 set ref 400* expand_pathname_$add_suffix 000032 constant entry external dcl 175 ref 392 foreground_sw 000447 automatic bit(1) dcl 244 set ref 326* 503* 523* 648 652 662 667 711 get_authorization_ 000034 constant entry external dcl 176 ref 324 get_group_id_$tag_star 000036 constant entry external dcl 177 ref 338 get_temp_segment_ 000040 constant entry external dcl 178 ref 284 home_dir 203 based char(64) level 2 dcl 1-30 set ref 319* 578 582* i 000247 automatic fixed bin(17,0) dcl 227 set ref 472* 480* 482* 669* 670 670* id 000014 constant char(17) initial packed unaligned dcl 210 set ref 284* 286* 344* 385* 395* 400* 420* 423* 456* 508* 649* 653* 675* 704* 717* 740* 754* index builtin function dcl 204 ref 356 770 init_proc 223 based char(64) level 2 dcl 1-30 set ref 320* 602 608* initial_ring 202 based fixed bin(17,0) level 2 dcl 1-30 set ref 318* 618* 621 626 input_segment_dirname 25 based char(168) level 2 packed packed unaligned dcl 1-30 set ref 313* 359* input_sw 000437 automatic bit(1) dcl 236 set ref 326* 358 360* ioa_ 000042 constant entry external dcl 179 ref 423 726 727 ioa_$ioa_switch 000046 constant entry external dcl 181 ref 704 ioa_$rsnnl 000044 constant entry external dcl 180 ref 723 iox_$error_output 000066 external static pointer dcl 190 set ref 704* length builtin function dcl 204 ref 340 578 602 length_of_arguments 000452 automatic fixed bin(17,0) dcl 248 set ref 471* 474* 474 476 478* limit_sw 000442 automatic bit(1) dcl 239 set ref 326* 446 447* 661 675* local_ari 000256 automatic structure level 1 dcl 233 set ref 714 714 long_id_sw 000445 automatic bit(1) dcl 242 set ref 326* 489* 725 max builtin function dcl 204 ref 722 max_arg_length 4 based fixed bin(17,0) level 2 dcl 1-30 set ref 290 323 323 323 476* 482 482 482 max_authorization 000464 automatic bit(72) dcl 255 set ref 277* max_cpu_limits 000475 automatic fixed bin(35,0) array dcl 260 set ref 659* 670 670 max_cpu_time 22 based fixed bin(35,0) level 2 dcl 1-30 set ref 451* 454 662* 664* 674 675* max_ring 000252 automatic fixed bin(17,0) dcl 230 set ref 273* 626 maxlim 000535 automatic fixed bin(35,0) dcl 261 set ref 668* 670 670* 674 675* min_authorization 000466 automatic bit(72) dcl 256 set ref 276* min_ring 000251 automatic fixed bin(17,0) dcl 229 set ref 272* 621 ms_count 000245 automatic fixed bin(17,0) dcl 225 set ref 722* 726* my_attributes 000110 automatic varying char(128) dcl 211 set ref 769* 770 n_arg 000246 automatic fixed bin(17,0) dcl 226 set ref 349* 351 353* 428 435 442 465 479* 479 641* 641 751* 751 752* no_start_up 171(05) based bit(1) level 3 packed packed unaligned dcl 1-30 set ref 591* 634* notify 171(04) based bit(1) level 3 packed packed unaligned dcl 1-30 set ref 376* null builtin function dcl 204 ref 267 417 417 417 417 417 417 740 number_of_arguments 000451 automatic fixed bin(17,0) dcl 247 set ref 342* 348 351 465 option 000220 automatic char(32) initial dcl 215 set ref 215* 369* 372 372 376 376 379 379 379 383 383 405 413 413 413 431 438 438 438 445 445 461 461 461 486 486 489 489 492 492 521 521 527 527 537 537 537 541 541 543 545 545 564 564 590 590 595 595 616 616 633 754* output_segment_dirname 107 based char(168) level 2 packed packed unaligned dcl 1-30 set ref 311* 392* output_segment_entryname 161 based char(32) level 2 packed packed unaligned dcl 1-30 set ref 312* 392* 399 output_sw 000440 automatic bit(1) dcl 237 set ref 326* 384 388* pad 77 based fixed bin(17,0) array level 2 dcl 1-30 set ref 314* paok parameter bit(1) dcl 767 set ref 763 770* 772* parse_resource_desc_$check 000050 constant entry external dcl 182 ref 417 pattr parameter char(24) packed unaligned dcl 766 ref 763 770 proxy_name 000230 automatic char(32) packed unaligned dcl 216 set ref 409* 701 702 704* proxy_personid 6 based char(22) level 2 dcl 1-30 set ref 315* 701* proxy_projectid 14 based char(9) level 2 dcl 1-30 set ref 316* 702* proxy_sw 000443 automatic bit(1) dcl 240 set ref 326* 406 407* 700 queue 000244 automatic fixed bin(17,0) dcl 224 in procedure "ear" set ref 296* 297 297* 499* 505* 514 514 515 516 516* 524* 664 670 670 queue 4 000256 automatic char(4) level 2 in structure "local_ari" dcl 233 in procedure "ear" set ref 727* queue 17 based char(4) level 2 in structure "abs_request_info" dcl 1-30 in procedure "ear" set ref 298* 515* 711* queue35 000547 automatic fixed bin(35,0) dcl 497 set ref 498* 499 queue_requests_count 5 000256 automatic fixed bin(17,0) level 2 dcl 233 set ref 722 queue_sw 000446 automatic bit(1) dcl 243 set ref 326* 493 494* 504* 648 release_temp_segment_ 000052 constant entry external dcl 183 ref 740 request_id 2 000256 automatic fixed bin(71,0) level 2 dcl 233 set ref 723* requested_authorization 23 based bit(72) level 2 dcl 1-30 set ref 324* 553* resource 243 based char level 2 dcl 1-30 set ref 321* 686* resource_argno 000453 automatic fixed bin(17,0) initial dcl 250 set ref 250* 414 428* 684 685* resource_length 2 based fixed bin(17,0) level 2 dcl 1-30 set ref 290 321 322 323 426* 482 686 696 restartable 171 based bit(1) level 3 packed packed unaligned dcl 1-30 set ref 372* ring 000250 automatic fixed bin(17,0) dcl 228 set ref 337* ringrng 000254 automatic fixed bin(17,0) array dcl 231 set ref 271* 272 273 rqid 000213 automatic char(19) packed unaligned dcl 214 set ref 723* 725* 725 726* rsc_msg 000151 automatic varying char(100) dcl 212 set ref 417* 420* 423 423* rtrim builtin function dcl 204 ref 340 770 secondary_ok 171(02) based bit(1) level 3 packed packed unaligned dcl 1-30 set ref 537* 652 sender 172 based char(32) level 2 dcl 1-30 set ref 317* 691* sender_argno 000454 automatic fixed bin(17,0) initial dcl 250 set ref 250* 433 435* 689 690* string 000240 automatic char(8) dcl 217 set ref 370* 754* substr builtin function dcl 204 set ref 340* 482 547 569 574 582 597 608 725 sysdir 000000 internal static char(168) initial dcl 220 set ref 781* system_info_$abs_limits 000054 constant entry external dcl 184 ref 659 system_info_$default_absentee_queue 000056 constant entry external dcl 185 ref 296 test_sysdir parameter char packed unaligned dcl 779 ref 777 781 truncate_absout 171(03) based bit(1) level 3 packed packed unaligned dcl 1-30 set ref 541* 543* unspec builtin function dcl 204 set ref 290* user_deferred_indefinitely 171(01) based bit(1) level 3 packed packed unaligned dcl 1-30 set ref 379* user_info_$attributes 000060 constant entry external dcl 186 ref 769 user_info_$authorization_range 000062 constant entry external dcl 187 ref 275 user_info_$ring_range 000064 constant entry external dcl 188 ref 271 version 000256 automatic char(8) level 2 in structure "local_ari" dcl 233 in procedure "ear" set ref 294* version based char(8) level 2 in structure "abs_request_info" dcl 1-30 in procedure "ear" set ref 292* NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. abs_return_info_ptr automatic pointer dcl 1-80 NAMES DECLARED BY EXPLICIT CONTEXT. RETURN 003713 constant label dcl 730 ref 287 345 386 396 401 421 457 509 650 654 718 755 arg_err 001416 constant label dcl 395 ref 354 533 549 552 559 572 576 580 586 600 604 612 620 624 629 638 bad_queue 002330 constant label dcl 508 ref 514 cleanup_proc 003750 constant entry internal dcl 738 ref 269 730 dup_arg 001312 constant label dcl 385 ref 406 414 433 439 446 493 528 ear 000510 constant entry external dcl 17 enter_abs_request 000520 constant entry external dcl 17 get_attributes 004061 constant entry internal dcl 763 ref 565 606 get_next_arg 004003 constant entry internal dcl 749 ref 389 408 415 434 440 448 473 481 495 530 546 568 596 617 num_err 002027 constant label dcl 456 ref 452 test_ear 003723 constant entry external dcl 777 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4634 5022 4147 4750 Length 5312 4147 114 254 465 52 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ear 589 external procedure is an external procedure. on unit on line 269 64 on unit begin block on line 496 begin block shares stack frame of external procedure ear. cleanup_proc 78 internal procedure is called by several nonquick procedures. get_next_arg internal procedure shares stack frame of external procedure ear. get_attributes internal procedure shares stack frame of external procedure ear. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000000 sysdir ear STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ear 000106 argp ear 000110 my_attributes ear 000151 rsc_msg ear 000203 abs_user ear 000213 rqid ear 000220 option ear 000230 proxy_name ear 000240 string ear 000242 arglen ear 000243 code ear 000244 queue ear 000245 ms_count ear 000246 n_arg ear 000247 i ear 000250 ring ear 000251 min_ring ear 000252 max_ring ear 000254 ringrng ear 000256 local_ari ear 000436 attr_sw ear 000437 input_sw ear 000440 output_sw ear 000441 arg_sw ear 000442 limit_sw ear 000443 proxy_sw ear 000444 brief_sw ear 000445 long_id_sw ear 000446 queue_sw ear 000447 foreground_sw ear 000450 aok ear 000451 number_of_arguments ear 000452 length_of_arguments ear 000453 resource_argno ear 000454 sender_argno ear 000455 comment_argno ear 000456 authorization ear 000460 authrng ear 000464 max_authorization ear 000466 min_authorization ear 000470 default_cpu_limits ear 000474 default_foreground_cpu_limit ear 000475 max_cpu_limits ear 000535 maxlim ear 000536 abs_request_info_ptr ear 000540 arqi_resource_length ear 000541 arqi_comment_length ear 000542 arqi_max_arg_length ear 000543 arqi_arg_count ear 000547 queue35 begin block on line 496 THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op shorten_stack set_chars_eis index_chars_eis ss_ext_entry ss_ext_entry_desc ss_int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. aim_check_$in_range com_err_ convert_authorization_$from_string convert_date_to_binary_ cu_$arg_count cu_$arg_ptr cu_$level_get cv_dec_check_ enter_abs_request_ expand_pathname_$add_suffix get_authorization_ get_group_id_$tag_star get_temp_segment_ ioa_ ioa_$ioa_switch ioa_$rsnnl parse_resource_desc_$check release_temp_segment_ system_info_$abs_limits system_info_$default_absentee_queue user_info_$attributes user_info_$authorization_range user_info_$ring_range THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. as_error_table_$illegal_hd_arg as_error_table_$illegal_ip_arg as_error_table_$ring_too_high as_error_table_$ring_too_low error_table_$ai_out_range error_table_$badopt error_table_$noarg error_table_$not_abs_path error_table_$pathlong error_table_$root iox_$error_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 215 000477 250 000502 17 000507 267 000526 269 000530 271 000552 272 000561 273 000563 275 000565 276 000574 277 000576 279 000600 280 000601 281 000602 282 000603 284 000604 285 000625 286 000627 287 000653 290 000654 292 000703 294 000706 296 000710 297 000717 298 000723 311 000726 312 000731 313 000734 314 000737 315 000751 316 000754 317 000757 318 000762 319 000764 320 000767 321 000772 322 000776 323 001006 324 001040 326 001047 337 001061 338 001070 340 001077 342 001113 343 001124 344 001126 345 001143 348 001144 349 001151 351 001153 353 001157 354 001174 356 001176 358 001212 359 001214 360 001220 362 001222 369 001223 370 001226 372 001230 376 001244 379 001260 383 001300 384 001310 385 001312 386 001351 388 001352 389 001354 392 001355 394 001414 395 001416 396 001450 399 001451 400 001456 401 001510 403 001511 405 001512 406 001516 407 001520 408 001522 409 001523 410 001530 411 001544 413 001546 414 001562 415 001564 417 001565 419 001627 420 001631 421 001662 423 001663 426 001713 428 001716 429 001720 431 001721 433 001725 434 001727 435 001730 436 001732 438 001733 439 001747 440 001751 441 001752 442 001755 443 001757 445 001760 446 001770 447 001773 448 001775 451 001776 452 002022 454 002024 456 002027 457 002066 459 002067 461 002070 465 002104 471 002110 472 002112 473 002121 474 002122 475 002124 476 002126 478 002132 479 002134 480 002136 481 002145 482 002146 483 002204 484 002206 486 002207 489 002222 492 002235 493 002245 494 002247 495 002251 498 002252 499 002275 501 002277 502 002301 503 002323 504 002325 505 002326 506 002327 508 002330 509 002367 511 002370 514 002371 515 002375 516 002400 519 002404 521 002405 523 002415 524 002417 525 002420 527 002421 528 002431 530 002434 531 002435 533 002462 535 002464 537 002465 541 002505 543 002521 545 002531 546 002541 547 002542 548 002547 549 002552 551 002553 552 002603 553 002606 557 002631 559 002634 561 002635 563 002637 564 002640 565 002650 567 002655 568 002660 569 002661 571 002670 572 002673 574 002674 575 002676 576 002701 578 002702 579 002705 580 002710 582 002711 583 002715 585 002716 586 002721 588 002722 589 002724 590 002725 591 002735 593 002740 594 002742 595 002743 596 002753 597 002754 599 002761 600 002764 602 002765 603 002770 604 002773 606 002774 608 003001 611 003013 612 003016 614 003017 615 003021 616 003022 617 003032 618 003033 620 003061 621 003063 622 003066 624 003071 626 003072 628 003074 629 003077 631 003100 632 003102 633 003103 634 003107 635 003112 637 003113 638 003116 641 003117 642 003120 648 003121 649 003125 650 003152 652 003153 653 003161 654 003206 659 003207 661 003222 662 003225 664 003233 667 003237 668 003241 669 003242 670 003247 672 003260 674 003262 675 003266 684 003326 685 003330 686 003345 689 003354 690 003356 691 003373 694 003401 695 003403 696 003420 700 003433 701 003435 702 003446 703 003464 704 003466 711 003516 714 003523 716 003540 717 003542 718 003563 721 003564 722 003566 723 003574 725 003624 726 003631 727 003664 730 003713 731 003717 777 003720 781 003737 783 003746 738 003747 740 003755 742 004002 749 004003 751 004004 752 004005 753 004022 754 004024 755 004057 757 004060 763 004061 769 004063 770 004074 772 004122 773 004123 ----------------------------------------------------------- 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