COMPILATION LISTING OF SEGMENT abs_io_expand_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Adv Computing Technology Centre Compiled on: 05/17/90 1510.3 mdt Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 10 11 12 /****^ HISTORY COMMENTS: 13* 1) change(86-03-13,Herbst), approve(86-04-17,MCR7376), 14* audit(86-04-17,Kissel), install(86-04-22,MR12.0-1041): 15* Fixed bug causing extra null arg for "&||[af_returning_null_string]". 16* 2) change(86-04-23,Herbst), approve(86-04-23,MCR7376), 17* audit(86-04-25,Kissel), install(86-04-29,MR12.0-1041): 18* Fixed to consider open and closed parens inside a quoted string as literal 19* characters unless a ")" closes a "&(" since variable references &(...) are 20* expanded even in quoted strings. Did the same for brackets and "&[". 21* 3) change(86-04-30,Herbst), approve(86-04-30,MCR7376), 22* audit(86-04-30,Kissel), install(86-05-01,MR12.0-1052): 23* Fixed ")" inside quoted string to close &q(1) as well as &(foo). 24* 4) change(86-05-22,Herbst), approve(86-05-22,MCR7376), 25* audit(86-05-16,Kissel), install(86-05-22,MR12.0-1058): 26* Backed out previous changes to () and [] handling recognizing that all 27* except &() and &[] should be ignored by exec_com itself. 28* 5) change(87-02-16,Parisek), approve(87-07-23,MCR7716), 29* audit(87-08-07,Fawcett), install(87-08-11,MR12.1-1080): 30* If abs_data.noabort is ON then update next statement data. 31* 6) change(87-08-18,Parisek), approve(87-08-18,PBF7716), 32* audit(87-09-03,Farley), install(87-09-10,MR12.1-1104): 33* Conditionally get next ec statement when noabort flag is on. 34* 7) change(89-12-04,LZimmerman), approve(89-12-04,MCR8145), 35* audit(89-12-08,Kallstrom), install(90-05-17,MR12.4-1009): 36* Add literal &CR. 37* END HISTORY COMMENTS */ 38 39 40 /* format: off */ 41 42 abs_io_expand_: proc (A_xd, A_code); 43 44 /* Written 09/05/80 by Steve Herbst */ 45 46 /* Fixed to return blank lines 10/07/81 S. Herbst */ 47 /* Changed &set to see quotes, added &r(var) etc., added &print_switch{_nnl} 10/20/81 S. Herbst */ 48 /* Fixed &q(1) bug, &then&quit bug 02/04/82 S. Herbst */ 49 /* Modified: 16 February 1982 by G. Palter to call ec_data.eval_string when appropriate */ 50 /* Fixed it to handle &ready_proc (as well as &ready), and reject &thenquit but not &then&quit 03/24/82 S. Herbst */ 51 /* Fixed &if-&then-&else to be impervious to recursive get_line 04/20/82 S. Herbst */ 52 /* Removed 1000-char limit on &[...] strings 06/01/82 S. Herbst */ 53 /* Fixed to ignore trailing white space 07/08/82 S. Herbst */ 54 /* Sped up the label search, changed to use addcharno 10/06/82 S. Herbst */ 55 /* Fixed &set foo "" and arg parsing with &+ 12/07/82 */ 56 /* Fixed &+ continuation interrupted by one or more comment lines 12/14/82 S. Herbst */ 57 /* Fixed fault taken parsing white space 01/03/83 S. Herbst */ 58 /* Fixed get_next_statement to skip leading white space on line after &-comment 02/07/83 S. Herbst */ 59 /* Fixed not to skip every other blank line 02/10/83 S. Herbst */ 60 /* Fixed to skip trailing white space before returning, to distinguish it from blank line 02/24/83 S. Herbst */ 61 /* Fixed to not rtrim variable values 03/01/83 S. Herbst */ 62 /* Fixed to handle &then || NL || &+ 03/07/83 S. Herbst */ 63 /* Added keywords &on, &begin, &revert, etc. 04/07/83 S. Herbst */ 64 /* Changed to look at abs_data.trim_whitespace_sw for input lines (&attach &trim off) 06/02/83 S. Herbst */ 65 /* Added &list_variables (&lsv) 06/07/83 S. Herbst */ 66 /* Fixed to recognize &"" as a null string arg, as in: &set a &"" b &"" 11/18/83 S. Herbst */ 67 /* Fixed bug making it possible to overflow allocated region for expansion 12/28/83 S. Herbst */ 68 /* Fixed expansion bug caused by freeing allocated buffer used by pushed state 01/24/84 S. Herbst */ 69 /* Fixed to allocate variables in abs_data.work_area, not system free area 05/16/84 S. Herbst */ 70 /* Fixed to preserve &"" and "" as null arguments 07/18/84 S. Herbst */ 71 /* Fixed to accept &end on same line as handler text 08/10/84 S. Herbst */ 72 /* Fixed to compute quotes for &r and &q correctly when nested inside parens 08/14/84 S. Herbst */ 73 /* Fixed to ignore mismatch of non-ec parentheses, as in (...) 08/20/84 S. Herbst */ 74 /* Fixed bug causing extra null arg parsing 'one &[string " two"]' 08/20/84 S. Herbst */ 75 76 77 dcl 1 state, 78 2 keyword, 79 3 name char (32) varying, 80 3 number fixed bin, 81 3 paren_sw bit (1) unaligned, 82 3 bracket_sw bit (1) unaligned, 83 3 af_type fixed bin, 84 3 name_switches unaligned, 85 4 control_word_sw bit (1), 86 4 allow_arg_sw bit (1), 87 4 require_arg_sw bit (1), 88 4 require_number_sw bit (1), 89 4 digit_arg_sw bit (1), 90 3 param_switches, 91 4 f_sw bit (1), 92 4 n_sw bit (1), 93 4 q_sw bit (1), 94 4 r_sw bit (1), 95 2 quote_factor fixed bin, /* 2**(quote depth up to state.qscan_start)-1 for doubling */ 96 2 qscan_start fixed bin (21), 97 2 iafter_pos fixed bin (21), /* for tracing */ 98 2 optr_len, 99 3 optr ptr, 100 3 omax_len fixed bin (21), 101 3 olen fixed bin (21), 102 3 opos fixed bin (21); 103 104 dcl 1 state_stack (100) like state; 105 106 107 dcl 1 alloc_info aligned, /* for allocating long lines */ 108 2 allocated_sw bit (1) aligned, 109 2 alloc_ptr ptr, 110 2 alloc_len fixed bin (21); 111 112 dcl 1 alloc_stack (100) aligned, 113 2 allocated_sw_stack bit (1) aligned, 114 2 alloc_ptr_stack ptr, 115 2 alloc_len_stack fixed bin (21); 116 117 dcl 1 PARAM_KEYWORD int static options (constant), 118 2 name char (32) varying init ("&"), 119 2 number fixed bin init (1), 120 2 paren_sw bit (1) unaligned init ("0"b), 121 2 bracket_sw bit (1) unaligned init ("0"b), 122 2 af_type fixed bin init (0), 123 2 name_switches unaligned, 124 3 control_word_sw bit (1) init ("0"b), 125 3 allow_arg_sw bit (1) init ("1"b), 126 3 require_arg_sw bit (1) init ("1"b), 127 3 require_number_sw bit (1) init ("1"b), 128 3 digit_arg_sw bit (1) init ("0"b), 129 2 param_switches unaligned, 130 3 f_sw bit (1) init ("0"b), 131 3 n_sw bit (1) init ("0"b), 132 3 q_sw bit (1) init ("0"b), 133 3 r_sw bit (1) init ("0"b); 134 135 136 dcl (A_pos, A_len) fixed bin (21); /* for $expand_label */ 137 dcl A_label_val_ptr ptr; /* for $expand_label */ 138 dcl A_label_val_len fixed bin (21); /* for $expand_label */ 139 dcl A_vars_ptr ptr; /* for $set */ 140 dcl (A_var, A_val) char (*); /* for $set */ 141 dcl A_code fixed bin (35); 142 143 dcl 1 A_xd aligned like expand_data; 144 145 /* Based */ 146 147 dcl xd_area area based (A_xd.area_ptr); 148 149 dcl 1 iptr_len, 150 2 iptr ptr, 151 2 ilen fixed bin (21), 152 2 ipos fixed bin (21); 153 154 dcl input_overlay char (overlay_len) based (overlay_ptr); 155 dcl input char (ilen) based (iptr); 156 dcl output char (state.olen) based (state.optr); 157 dcl saved_arg char (saved_arg_len) varying based (saved_arg_ptr); 158 159 160 dcl alloc_string char (alloc_len) based (alloc_ptr); 161 dcl allocated_buffer char (A_xd.allocated_buffer_len) based (A_xd.allocated_ptr); 162 dcl caller_buffer char (A_xd.caller_buffer_len) based (A_xd.caller_buffer_ptr); 163 164 165 dcl 1 command_args (command_args_count) based (command_args_ptr), 166 2 ptr ptr, 167 2 len fixed bin (21), 168 2 quote_count fixed bin (21); 169 dcl command_arg char (command_args (arg_index).len) based (command_args (arg_index).ptr); 170 171 dcl ec_name char (arg_info.ec_name_len) based (arg_info.ec_name_ptr); 172 dcl ec_path char (arg_info.ec_path_len) based (arg_info.ec_path_ptr); 173 174 dcl parsed_arg char (parsed_args.len (parsed_arg_index)) based (parsed_args.ptr (parsed_arg_index)); 175 176 177 /* Constants */ 178 179 dcl TF (0:1) char (8) varying int static options (constant) init ("false", "true"); 180 dcl DEFAULT_ARG char (1) int static options (constant) init (" 181 "); /* no arg specified to a keyword */ 182 dcl (CONTROL init ("1"b), NONCONTROL init ("0"b)) bit (1) int static options (constant); 183 dcl (QDOUBLE init ("0"b), REQUOTE init ("1"b)) bit (1) int static options (constant); 184 dcl UNDEFINED fixed bin int static options (constant) init (-1); 185 dcl (BK_TYPE init (1), BAR_BK_TYPE init (2), BAR_BAR_BK_TYPE init (3)) fixed bin int static options (constant); 186 dcl (PARAM_REF init (1), VAR_REF init (2), AF_REF init (3), MAX_KEY init (100)) fixed bin int static options (constant); 187 188 dcl DIGITS char (10) int static options (constant) init ("0123456789"); 189 dcl ALPHA char (27) int static options (constant) init ("abcdefghijklmnopqrstuvwxyz_"); 190 dcl DELIMS char (4) int static options (constant) init ("() "); 191 dcl SP char (1) int static options (constant) init (" "); 192 dcl HT char (1) int static options (constant) init (" "); 193 dcl BS char (1) int static options (constant) init (""); 194 dcl NL char (1) int static options (constant) init (" 195 "); 196 dcl VT char (1) int static options (constant) init (" "); 197 dcl FF char (1) int static options (constant) init (" "); 198 dcl CR char (1) int static options (constant) init (" 199 "); 200 201 /* The control statement keywords */ 202 /* NOTE: Do not change this array without changing the ACTION() and SKIP() labels in abs_io_v2_get_line */ 203 /* Also change abs_io_v2_get_line vars ELSE_ACTION, IF_ACTION, and THEN_ACTION */ 204 205 dcl STMTS_STRING char (STMTS_LEN) aligned based (addr (STMTS)); 206 dcl STMTS (39) char (32) aligned int static options (constant) init 207 ("&attach", "&begin", "&call", "&default", "&detach", 208 "&do", "&else", "&end", "&exit", "&entry", 209 "&function", "&goto", "&if", "&label", "&leave", 210 "&list_variables", "&lsv", "&on", "&print", "&print_nnl", 211 "&print_switch", "&print_switch_nnl","&procedure", "&proc", "&quit", 212 "&ready", "&ready_mode", "&ready_proc", "&repeat", ""/*"&resignal*/, 213 "&return", "&revert", "&set", "&signal", "&then", 214 "&trace", "&until", "&version", "&while"); 215 216 dcl STMT_SWITCHES (39) bit (3) int static options (constant) init 217 /* parse_args, no_args, then_else_allowed */ 218 ("100"b, "110"b, "100"b, "100"b, "100"b, 219 "110"b, "010"b, "110"b, "100"b, "100"b, 220 "100"b, "000"b, "001"b, "000"b, "100"b, 221 "100"b, "100"b, "100"b, "000"b, "000"b, 222 "000"b, "000"b, "100"b, "100"b, "010"b, 223 "100"b, "100"b, "100"b, "100"b, "100"b, 224 "000"b, "100"b, "100"b, "000"b, "011"b, 225 "100"b, "100"b, "100"b, "100"b); 226 227 dcl 1 STMT_SW_OVERLAY (39) based (addr (STMT_SWITCHES)), 228 2 (PARSE_ARGS_SW, NO_ARGS_SW, THEN_ELSE_ALLOWED_SW) bit (1) unaligned; 229 230 /* The expandable keywords */ 231 /* NOTE: Do not change this array without changing the labels in expand internal procedure */ 232 233 dcl NAMES_STRING char (NAMES_LEN) aligned based (addr (NAMES)); 234 dcl NAMES (38) char (32) aligned int static options (constant) init 235 ("&condition_info_ptr", "&cond_info_ptr", "&condition_name", "&cond_name", "&ec_dir", 236 "&ec_name", "&ec_path", "&ec_switch", "&handlers", "&in_handler", 237 "&is_absin", "&is_active_function", "&is_af", "&is_attached", "&is_defined", 238 "&is_input_line", "&n", ""/*"e*/, ""/*&requote*/, ""/*&unquote*/, 239 "&was_attached", "&", "&BS", "&CR", "&FF", 240 "&HT", "&LF", "&NL", "&NP", "&QT", 241 "&SP", "&VT", "&begin", "&do", "&else", 242 "&end", "&if", "&then"); 243 244 dcl NAME_SWITCHES (38) bit (5) int static options (constant) init 245 /* control_wd, allow_arg, require_arg, require_num, digit_ok (params) */ 246 ( "00000"b, "00000"b, "00000"b, "00000"b, "00000"b, 247 "00000"b, "00000"b, "00000"b, "00000"b, "00000"b, 248 "00000"b, "00000"b, "00000"b, "00000"b, "01100"b, 249 "00000"b, "00000"b, "01100"b, "01100"b, "01100"b, 250 "00000"b, "01010"b, "01010"b, "01010"b, "01010"b, 251 "01010"b, "01010"b, "01010"b, "01010"b, "01010"b, 252 "01010"b, "01010"b, "10000"b, "10000"b, "10000"b, 253 "10000"b, "10000"b, "10000"b); 254 255 /* The &words not to be expanded (stmt control-args) */ 256 257 dcl DONT_EXPAND_STRING char (DONT_EXPAND_LEN) aligned based (addr (DONT_EXPAND)); 258 dcl DONT_EXPAND (22) char (32) aligned int static options (constant) init 259 ("&all", "&both", "&command", "&comment", "&continue", "&control", "&ex", "&exclude", "&expanded", 260 "&input", "&match", "&osw", "&output_switch", "&prefix", "&trim", "&undef", "&undefined", 261 "&unexpanded", "&val", "&value", "&var", "&variable"); 262 263 /* The parameter prefixes */ 264 265 dcl PARAMS_STRING char (PARAMS_LEN) aligned based (addr (PARAMS)); 266 dcl PARAMS (10) char (8) aligned int static options (constant) init 267 ("&q", "&qf", "&q&n", "&qf&n", 268 "&r", "&rf", "&r&n", "&rf&n", 269 "&f", "&f&n"); 270 dcl PARAM_SWITCHES (10) bit (4) int static options (constant) init /* f, n, q, r */ 271 ("0010"b, "1010"b, "0110"b, "1110"b, 272 "0001"b, "1001"b, "0101"b, "1101"b, 273 "1000"b, "1100"b); 274 275 /* Static */ 276 277 dcl WHITE char (4) int static; /* to be initialized to SP || HT || VT || FF */ 278 dcl init_sw bit (1) int static init ("0"b); 279 dcl MAX_CHARS fixed bin (21) int static options (constant) init (261120 * 4); /* max chars in a seg */ 280 dcl (DONT_EXPAND_LEN, NAMES_LEN, PARAMS_LEN, STMTS_LEN) fixed bin int static; 281 dcl (ELSE_ACTION, IF_ACTION, SET_ACTION, THEN_ACTION) fixed bin int static; 282 283 284 /* Automatic */ 285 286 dcl 1 trace aligned like abs_data.command_line; 287 288 dcl (auto_saved_arg, trace_buffer) char (1000) varying; 289 dcl search_chars char (12) varying; 290 dcl tf_string char (8) varying; 291 292 dcl char5 char (5); 293 dcl char3 char (3); 294 dcl char2 char (2); 295 dcl (next_char, next_next_char, searched_char) char (1); 296 297 dcl (added_arg_inside_quotes_sw, control_line_sw, delete_sw, eof_sw, expand_label_sw, found_sw) bit (1); 298 dcl (got_next_stmt, inside_quotes_sw, label_search_sw, no_args_sw, null_arg_sw, parse_args_sw, saved_arg_allocated_sw) bit (1); 299 dcl (skip_sw, then_else_allowed_sw, trace_sw) bit (1); 300 301 dcl (command_args_ptr, overlay_ptr, saved_arg_ptr) ptr; 302 303 dcl (arg_index, arg_limit, arg_max, arg_start, command_args_count, nest_level, parsed_arg_index) fixed bin; 304 dcl (i, istart, j, no_args_ipos, overlay_len, saved_arg_len, saved_ilen, saved_ipos, skip_count) fixed (21); 305 dcl (temp_i, temp_istart, temp_white_len, white_len) fixed bin (21); 306 dcl ic (6) fixed bin (21); 307 dcl code fixed bin (35); 308 309 dcl error_table_$badsyntax fixed bin (35) ext; 310 dcl error_table_$command_line_overflow fixed bin (35) ext; 311 dcl error_table_$end_of_info fixed bin (35) ext; 312 dcl error_table_$oldnamerr fixed bin (35) ext; 313 314 dcl iox_$user_output ptr ext; 315 316 dcl cu_$evaluate_active_string entry (ptr, char (*), fixed bin, char (*) varying, fixed bin (35)); 317 dcl cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin); 318 dcl get_system_free_area_ entry returns (ptr); 319 dcl hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)); 320 dcl (ioa_$ioa_switch_nnl, ioa_$rsnnl) entry options (variable); 321 dcl requote_string_ entry (char(*)) returns(char(*)); 322 dcl unique_chars_ entry (bit (*)) returns (char (15)); 323 dcl value_$defined entry (ptr, bit (36), char (*), fixed bin (35)) returns (bit (1) aligned); 324 dcl value_$delete entry (ptr, bit (36), char (*), fixed bin (35)); 325 dcl value_$get_alloc entry (ptr, bit (36), char (*), ptr, ptr, fixed bin (21), fixed bin (35)); 326 dcl value_$init_seg entry (ptr, fixed bin, ptr, fixed bin (19), fixed bin (35)); 327 dcl value_$set entry options (variable); 328 329 dcl (addcharno, addr, codeptr, copy, divide, fixed, hbound, index, length) builtin; 330 dcl (max, maxlength, min, mod, null, rtrim, search, substr, unspec, verify) builtin; 331 332 dcl (area, bad_area_format, bad_area_initialization) condition; 333 334 trace_sw = "1"b; 335 expand_label_sw, got_next_stmt, label_search_sw, skip_sw = "0"b; 336 go to COMMON; 337 338 expand_label: entry (A_xd, A_pos, A_len, A_label_val_ptr, A_label_val_len, A_code); /* expands a &label for search */ 339 340 expand_label_sw = "1"b; 341 got_next_stmt, label_search_sw, skip_sw, trace_sw = "0"b; 342 A_code = 0; 343 abs_data_ptr = A_xd.abs_data_ptr; 344 overlay_ptr = input_string.ptr; 345 overlay_len = input_string.len; 346 iptr = addcharno (overlay_ptr, A_pos + length ("&label ") - 1); /* position to rest of line */ 347 ilen = A_len - length ("&label "); 348 ipos, istart, nest_level = 1; 349 no_args_sw, parse_args_sw = "0"b; 350 state.optr = A_xd.caller_buffer_ptr; 351 state.omax_len = A_xd.caller_buffer_len; 352 state.olen = 0; 353 go to START_EXPANDING; 354 355 label_search: entry (A_xd, A_code); 356 357 label_search_sw = "1"b; /* executing a &goto */ 358 expand_label_sw, got_next_stmt, skip_sw, trace_sw = "0"b; 359 go to COMMON; 360 361 skip: entry (A_xd, A_code); 362 363 skip_sw = "1"b; /* skipping &then or &else clause */ 364 expand_label_sw, label_search_sw, trace_sw = "0"b; 365 COMMON: 366 if ^init_sw then do; 367 init_sw = "1"b; 368 STMTS_LEN = length (STMTS (1)) * hbound (STMTS, 1); 369 NAMES_LEN = length (NAMES (1)) * hbound (NAMES, 1); 370 DONT_EXPAND_LEN = length (DONT_EXPAND (1)) * hbound (DONT_EXPAND, 1); 371 PARAMS_LEN= length (PARAMS (1)) * hbound (PARAMS, 1); 372 373 IF_ACTION = lookup_stmt ("&if"); 374 THEN_ACTION = lookup_stmt ("&then"); 375 ELSE_ACTION = lookup_stmt ("&else"); 376 SET_ACTION = lookup_stmt ("&set"); 377 378 WHITE = SP || HT || VT || FF; /* white space */ 379 end; 380 381 A_code = 0; 382 383 nest_level, state.quote_factor, state.qscan_start = 1; 384 added_arg_inside_quotes_sw, inside_quotes_sw, null_arg_sw, parse_args_sw = "0"b; 385 386 abs_data_ptr = A_xd.abs_data_ptr; 387 ec_data_ptr = abs_data.ec_data_ptr; 388 389 saved_arg_ptr = addr (auto_saved_arg); 390 saved_arg_len = maxlength (auto_saved_arg); 391 saved_arg_allocated_sw = "0"b; 392 393 overlay_ptr = input_string.ptr; 394 overlay_len = input_string.len; 395 SKIP_LOOP: /* label for $skip to ignore some keywords */ 396 iptr = addcharno (overlay_ptr, A_xd.input_pos - 1); 397 ilen = overlay_len - A_xd.input_pos + 1; 398 399 i = index (input, NL); /* skip prev line's trailing whitespace and NL */ 400 if i ^= 0 then do; 401 if i = 1 then skip_count = 0; /* just a blank line; don't skip it */ 402 else if verify (substr (input, 1, i - 1), WHITE) = 0 then skip_count = i; 403 else skip_count = 0; 404 A_xd.input_pos = A_xd.input_pos + skip_count; 405 iptr = addcharno (iptr, skip_count); 406 ilen = ilen - skip_count; 407 end; 408 409 if ilen = 0 then do; 410 A_code = error_table_$end_of_info; 411 return; 412 end; 413 414 if label_search_sw then do; 415 char3 = substr (input, 1, 3); 416 if char3 ^= "&be" & char3 ^= "&do" & char3 ^= "&en" & char3 ^= "&la" then do; 417 /* not at a &begin, &do, &end or &label stmt */ 418 call find_next_occurrence ("&begin", A_xd.next_begin_pos, ic (1)); 419 call find_next_occurrence ("&do", A_xd.next_do_pos, ic (2)); 420 call find_next_occurrence ("&end", A_xd.next_end_pos, ic (3)); 421 call find_next_occurrence ("&label", A_xd.next_label_pos, ic (4)); 422 call find_next_occurrence ("&""", A_xd.next_quote_pos, ic (5)); 423 call find_next_occurrence ("&-", A_xd.next_comment_pos, ic (6)); 424 i = MAX_CHARS; 425 do j = 1 to hbound (ic, 1); 426 if ic (j) ^= 0 then i = min (i, ic (j)); 427 end; 428 if i = 0 | i = MAX_CHARS then 429 NO_LABEL: if abs_data.in_handler_sw then do; 430 A_code = error_table_$end_of_info; 431 go to RETURN; 432 end; 433 else do; 434 A_xd.this_statement.pos = abs_data.goto_statement_pos; 435 A_xd.this_statement.len = abs_data.goto_statement_len; 436 call error ("Searching for label """ || rtrim (A_xd.searching_for) || """"); 437 end; 438 char3 = substr (input_overlay, i, 3); 439 if substr (char3, 1, 2) = "&""" then do; /* skip &"..." */ 440 inside_quotes_sw = "1"b; 441 i = i + 2; /* first skip the &" */ 442 do while (inside_quotes_sw); 443 j = index (substr (input_overlay, i), """"); 444 if j = 0 then call error ("Missing end quote for &"""); 445 if substr (input_overlay, i + j, 1) = """" then /* imbedded double quote */ 446 i = i + j + 1; /* skip over it and continue inside string */ 447 else inside_quotes_sw = "0"b; 448 end; 449 end; 450 else if substr (char3, 1, 2) = "&-" then do; /* skip comment */ 451 j = index (substr (input_overlay, i + 1), NL); /* skip past end of line */ 452 if j = 0 then go to NO_LABEL; 453 i = i + j; 454 end; 455 A_xd.input_pos = i; 456 go to SKIP_LOOP; 457 end; 458 end; 459 460 istart = 1; 461 462 A_xd.this_statement.pos = A_xd.input_pos; 463 abs_data.next_action = UNDEFINED; 464 465 NL_LOOP: i = index (substr (input, istart), NL); /* find end of this line */ 466 if i = 0 then 467 if abs_data.in_handler_sw then i = ilen; /* tolerate partial line in handler; must be followed by &end */ 468 else call error ("Last line does not end in newline; ignored."); 469 else if i = 1 then do; /* null line */ 470 A_xd.input_pos = A_xd.input_pos + 1; 471 A_xd.caller_actual_len, A_xd.this_statement.len = 0; 472 RETURN_NULL_LINE: 473 if trace_sw & command_line.on then call print_trace ("", command_line, NONCONTROL); 474 475 abs_data.this_action = 0; 476 go to GET_NEXT_STMT; 477 end; 478 else if i + istart + 1 < ilen then do; /* not the last line */ 479 if substr (input, i + istart - 1, 1) = NL then do; /* include continuation lines */ 480 white_len = verify (substr (input, i + istart), WHITE) - 1; 481 if white_len = -1 then white_len = 0; 482 char2 = substr (input, i + istart + white_len, 2); 483 if char2 = "&-" then do; /* might be continuation broken by comment line */ 484 temp_istart = istart; 485 temp_i = i; 486 temp_white_len = white_len; 487 do while (char2 = "&-"); /* or any number of comment lines */ 488 temp_istart = temp_istart + temp_i + temp_white_len; 489 temp_i = index (substr (input, temp_istart), NL); 490 temp_white_len = verify (substr (input, temp_i + temp_istart), WHITE) - 1; 491 if temp_white_len = -1 then temp_white_len = 0; 492 char2 = substr (input, temp_i + temp_istart + temp_white_len, 2); 493 end; 494 if char2 = "&+" then do; /* yes, it is part of a continuation */ 495 istart = temp_istart; 496 i = temp_i; 497 white_len = temp_white_len; 498 end; 499 end; 500 if char2 = "&+" then do; 501 istart = istart + i + white_len; /* skip to after the &+ */ 502 go to NL_LOOP; 503 end; 504 end; 505 end; 506 saved_ilen = ilen; 507 ilen = i + istart - 2; /* leave off last NL */ 508 if A_xd.is_input & ^abs_data.trim_whitespace_sw then ipos = 1; 509 else do; 510 ipos = verify (input, WHITE); /* skip leading whitespace */ 511 if ipos = 0 then do; /* all whitespace */ 512 A_xd.input_pos = A_xd.input_pos + ilen + 1; 513 A_xd.caller_actual_len, A_xd.this_statement.len = ilen; 514 substr (caller_buffer, 1, ilen) = substr (input, 1, ilen); 515 go to RETURN_NULL_LINE; 516 end; 517 end; 518 519 A_xd.this_statement.pos = A_xd.input_pos; 520 A_xd.this_statement.len = ilen; 521 522 state.optr = A_xd.caller_buffer_ptr; 523 state.omax_len = A_xd.caller_buffer_len; 524 state.olen = 0; 525 allocated_sw = "0"b; 526 527 /* Find out whether it's a control line */ 528 529 if substr (input, ipos, 1) = "&" then /* begins with & */ 530 if ilen = ipos then do; /* & on line by itself = error */ 531 state.keyword.name = "&"; 532 go to BAD_AMP_WORD; 533 end; 534 else if substr (input, ipos + 1, 1) = "&" then do; /* && = & */ 535 536 call add_output (state.optr_len, "&"); 537 538 ipos = ipos + 2; 539 abs_data.this_action = 0; 540 go to NOT_CONTROL; 541 end; 542 else if substr (input, ipos + 1, 1) = "-" then do; /* &- (comment) */ 543 if abs_data.comment_line.on & trace_sw & ipos + 1 < ilen then 544 545 call trace_comment (substr (input, ipos + 2)); 546 547 A_xd.input_pos = A_xd.input_pos + ilen + 1; 548 go to SKIP_LOOP; 549 end; 550 else do; 551 552 state.keyword.name = "&"; /* prepare to look up a stmt keyword */ 553 do i = ipos + 1 to ilen while (index (WHITE || "&", substr (input, i, 1)) = 0); 554 state.keyword.name = state.keyword.name || substr (input, i, 1); 555 556 abs_data.this_action = lookup_stmt ((state.keyword.name)); 557 558 if abs_data.this_action ^= 0 then go to CONTROL_STMT; /* yes, a statement keyword */ 559 end; 560 go to NOT_CONTROL; 561 562 /* A control statement */ 563 564 CONTROL_STMT: 565 566 /* So far we only know it STARTS with a valid control word; it might be the &ready of &ready_proc, or &thenfoo */ 567 568 state.keyword.name = "&"; /* make sure we get the whole keyword */ 569 do i = ipos + 1 to ilen while (index (ALPHA, substr (input, i, 1)) ^= 0); 570 state.keyword.name = state.keyword.name || substr (input, i, 1); 571 end; 572 573 abs_data.this_action = lookup_stmt ((state.keyword.name)); 574 575 if abs_data.this_action = 0 then /* could be "&thenfoo", for example */ 576 call error ("Invalid statement keyword " || state.keyword.name); 577 578 control_line_sw = CONTROL; 579 trace = abs_data.control_line; /* get trace info for control lines */ 580 581 ipos = ipos + length (state.keyword.name); /* skip the control statement keyword */ 582 i = verify (substr (input, ipos), WHITE); /* and the following whitespace */ 583 if i = 0 then do; /* done (no args) */ 584 ipos, no_args_ipos = ilen + 1; 585 586 CONTROL_NOARG: if trace_sw & trace.on & (trace.expand = UNEXPANDED | trace.expand = BOTH) then 587 588 call trace_unexpanded (input, trace); 589 590 go to RETURN_STRING; 591 end; 592 ipos = ipos + i - 1; /* skip the whitespace */ 593 if i = 1 then no_args_ipos = ipos - 1; /* no white space following control word */ 594 else no_args_ipos = ipos - 2; /* restore later if no_args_sw */ 595 596 no_args_sw = NO_ARGS_SW (abs_data.this_action); 597 /* whether no args is acceptable for this stmt */ 598 if no_args_sw & 599 (abs_data.this_action = THEN_ACTION | abs_data.this_action = ELSE_ACTION) then 600 go to CONTROL_NOARG; /* don't even look for a comment */ 601 602 then_else_allowed_sw = THEN_ELSE_ALLOWED_SW (abs_data.this_action); 603 /* whether this stmt can be followed by &then or &else */ 604 605 if trace_sw & abs_data.if_sw then do; /* test whether to trace */ 606 if (abs_data.this_action = THEN_ACTION & ^abs_data.true_sw) 607 /* don't trace &then after "&if false" */ 608 | (abs_data.this_action = ELSE_ACTION & abs_data.true_sw) then 609 /* don't trace &else after "&if true" */ 610 trace_sw = "0"b; 611 end; 612 613 parse_args_sw = ^skip_sw & PARSE_ARGS_SW (abs_data.this_action); 614 if parse_args_sw then do; /* parse args separated by whitespace */ 615 616 parsed_args_count = 20; /* grow later if necessary */ 617 if A_xd.area_ptr = null then A_xd.area_ptr = get_system_free_area_ (); 618 619 allocate parsed_args in (xd_area) set (parsed_args_ptr); 620 621 parsed_args.count = 0; 622 A_xd.parsed_args_ptr = parsed_args_ptr; 623 end; 624 625 else A_xd.parsed_args_ptr, A_xd.arg_ptr = null; /* take rest of line as single arg */ 626 end; 627 628 else do; 629 abs_data.this_action = 0; 630 NOT_CONTROL: /* either command line, input line, or comment */ 631 no_args_sw, parse_args_sw = "0"b; 632 A_xd.parsed_args_ptr, A_xd.arg_ptr = null; 633 634 trace = A_xd.trace_lines; 635 control_line_sw = NONCONTROL; 636 end; 637 638 if parse_args_sw | then_else_allowed_sw then search_chars = "&()[]" || NL || WHITE; 639 else search_chars = "&()[]" || NL; 640 641 inside_quotes_sw = "0"b; 642 if abs_data.this_action = SET_ACTION then search_chars = search_chars || """"; 643 /* see quotes only for &set statement */ 644 645 if trace_sw & trace.on then do; 646 if trace.iocb = null then trace.iocb = iox_$user_output; 647 if trace.expand = UNEXPANDED | trace.expand = BOTH then call trace_unexpanded (input, trace); 648 end; 649 650 START_EXPANDING: 651 A_xd.expanded_sw = "0"b; /* assume until var or param is expanded */ 652 653 eof_sw, null_arg_sw = "0"b; 654 655 do while (^eof_sw); 656 657 i = search (substr (input, ipos), search_chars); /* next & ) NL also WHITE if parsing args */ 658 if i = 0 then do; /* no more ampersands */ 659 if nest_level > 1 then /* see if any unclosed construct */ 660 do j = nest_level - 1 by -1 to 1; 661 if state_stack (j).keyword.number ^= 0 then 662 if state_stack (j).keyword.number = AF_REF then call error ("No closing bracket."); 663 else call error ("No closing parenthesis."); 664 end; 665 if ipos <= ilen then call add_output (state.optr_len, substr (input, ipos)); 666 667 ipos = ilen + 1; 668 go to RETURN_STRING; 669 end; 670 671 if i > 1 then call add_output (state.optr_len, substr (input, ipos, i - 1)); 672 673 ipos = ipos + i; 674 675 searched_char = substr (input, ipos - 1, 1); 676 677 if searched_char = NL then do; /* NL || &+ */ 678 CONTIN: ipos = ipos + verify (substr (input, ipos), WHITE) - 1; 679 /* skip white space on next line before &+ or &- */ 680 if substr (input, ipos, 2) = "&+" then ipos = ipos + 2; /* if it's &+, skip that too */ 681 end; 682 683 else if searched_char = """" then do; /* only for parsing &set args */ 684 685 if nest_level > 1 then call add_output (state.optr_len, """"); 686 /* only strip quotes from &set args */ 687 688 if ^inside_quotes_sw then do; 689 inside_quotes_sw = "1"b; 690 added_arg_inside_quotes_sw = "0"b; 691 end; 692 else if substr (input, ipos, 1) = """" then do; /* double quote is a " inside string */ 693 694 call add_output (state.optr_len, """"); 695 ipos = ipos + 1; 696 end; 697 else do; /* single quote ends it */ 698 if output = "" & parse_args_sw & ^added_arg_inside_quotes_sw then null_arg_sw = "1"b; 699 700 inside_quotes_sw, added_arg_inside_quotes_sw = "0"b; 701 end; 702 end; 703 704 else if searched_char = ")" then do; 705 706 if nest_level = 1 then call add_output (state.optr_len, ")"); 707 else do; 708 709 call save_arg; /* allocate bigger if necessary */ 710 711 call pop_state (nest_level, state); 712 713 if state.keyword.number = 0 then 714 call add_output (state.optr_len, saved_arg || ")"); /* just (...) */ 715 716 else if state.keyword.number = AF_REF then /* &[...) */ 717 call error ("Mismatched brackets."); 718 719 else do; /* &(...) or &keyword(...) */ 720 721 EXPAND_ONE: if trace.on then state.iafter_pos = ipos; 722 723 if ^skip_sw then call expand (state, saved_arg); /* add expansion to output */ 724 end; 725 end; 726 end; 727 728 else if searched_char = "]" then do; /* end of &[...] or [...] */ 729 730 if nest_level = 1 then call add_output (state.optr_len, "]"); 731 else do; 732 733 call save_arg; /* allocate bigger if necessary */ 734 735 call pop_state (nest_level, state); 736 737 if state.keyword.number = 0 then 738 call add_output (state.optr_len, saved_arg || "]"); /* just [...] */ 739 740 else if nest_level < 1 then call error ("Excess right bracket."); 741 742 else if state.keyword.number = AF_REF then go to EXPAND_ONE; /* &[...] */ 743 else call error ("Mismatched bracket."); 744 end; 745 end; 746 747 else if searched_char = "(" then do; /* just plain (...) */ 748 749 unspec (state.keyword) = "0"b; 750 state.keyword.number = 0; /* not an exec_com construct */ 751 /* but have to parse it because ) closes either it or &( */ 752 call push_state (nest_level, state); 753 754 call add_output (state.optr_len, "("); 755 end; 756 757 else if searched_char = "[" then do; /* just plain [...] */ 758 759 unspec (state.keyword) = "0"b; 760 state.keyword.number = 0; /* not an exec_com construct */ 761 /* but we have to parse it because ] closes either it or &[ */ 762 call push_state (nest_level, state); 763 764 call add_output (state.optr_len, "["); 765 end; 766 767 else if searched_char = "&" then do; /* start of a stmt or expandable construct */ 768 769 if i >= ilen then call error ("Invalid construct ""&"""); 770 771 state.keyword.paren_sw = "0"b; /* assume till ( encountered */ 772 if trace.on then do; 773 state.iafter_pos = ipos - 1; 774 end; 775 776 next_char = substr (input, ipos, 1); 777 778 if next_char = "-" then do; /* &- (comment) */ 779 780 if ipos > 2 & state.olen > 0 & (^A_xd.is_input | abs_data.trim_whitespace_sw) then 781 /* strip preceding whitespace from expanded line */ 782 state.olen = length (rtrim (output, WHITE)); 783 784 i = index (substr (input, ipos + 1), NL); /* end of line */ 785 786 if i = 0 then do; /* no continuation */ 787 if abs_data.comment_line.on & trace_sw then 788 789 call trace_comment (substr (input, ipos + 1)); 790 791 ipos = ilen + 1; /* skip over comment */ 792 go to RETURN_STRING; 793 end; 794 else do; /* continued on next line */ 795 if abs_data.comment_line.on & trace_sw then 796 797 call trace_comment (substr (input, ipos + 1, i - 1)); 798 799 ipos = ipos + i + 1; /* position of the &+ or &- */ 800 go to CONTIN; 801 end; 802 end; 803 804 /* Not a comment */ 805 806 if no_args_sw then go to RETURN_STRING; 807 808 else if next_char = """" then do; /* &"..." */ 809 ipos = ipos + 1; /* position to after first quote */ 810 811 if trace_sw & trace.on & trace.expand = ALL then do; /* trace before expanding quoted string */ 812 813 call trace_expanded (state, trace_buffer); 814 815 trace_buffer = trace_buffer || substr (input, state.iafter_pos); 816 817 call print_trace ((trace_buffer), trace, control_line_sw); 818 end; 819 820 call get_quoted_string (input, iptr_len.ipos, state, "0"b); 821 end; 822 823 else if next_char = "&" then do; /* && */ 824 825 if trace.on & trace.expand = ALL then do; /* trace before expanding && */ 826 if state.olen > 0 then /* not beginning of line */ 827 trace_buffer = output || substr (input, state.iafter_pos); 828 else trace_buffer = substr (input, state.iafter_pos); 829 830 call print_trace ((trace_buffer), trace, control_line_sw); 831 end; 832 833 call add_output (state.optr_len, "&"); /* translates to a single ; */ 834 835 ipos = ipos + 1; 836 end; 837 838 else if next_char = "!" then do; /* &! = unique name, same for every instance */ 839 if abs_data.unique_name = "" then 840 abs_data.unique_name = rtrim (unique_chars_ ("0"b)); 841 842 call add_output (state.optr_len, (abs_data.unique_name)); 843 844 ipos = ipos + 1; 845 end; 846 847 else do; /* &CONSTRUCT */ 848 if next_char = "(" then do; /* &(...) */ 849 unspec (state.keyword) = "0"b; 850 state.keyword.number = VAR_REF; 851 state.keyword.name = "&"; 852 OPEN_PAREN: ipos = ipos + 1; /* skip the ( */ 853 state.keyword.paren_sw = "1"b; 854 855 call push_state (nest_level, state); 856 end; 857 858 else if next_char = "[" then do; /* &[...] */ 859 ipos = ipos + 1; /* skip past it */ 860 unspec(state.keyword) = "0"b; 861 state.keyword.af_type = BK_TYPE; 862 OPEN_AF: state.keyword.number = AF_REF; 863 state.keyword.name = "&"; 864 state.keyword.bracket_sw = "1"b; 865 866 call push_state (nest_level, state); 867 end; 868 869 else if next_char = "|" then do; /* might be &|[ or &||[ */ 870 if ipos = ilen then go to BAD_AMP_WORD; /* just &| by itself */ 871 next_next_char = substr (input, ipos + 1, 1); 872 if next_next_char = "[" then do; /* &|[ */ 873 ipos = ipos + 2; /* skip past it */ 874 unspec (state.keyword) = "0"b; 875 state.keyword.af_type = BAR_BK_TYPE; 876 go to OPEN_AF; 877 end; 878 else if next_next_char = "|" then /* &||... */ 879 if ipos + 2 <= ilen then 880 if substr (input, ipos + 2, 1) = "[" then do; /* &||[ */ 881 ipos = ipos + 3; /* skip past it */ 882 unspec (state.keyword) = "0"b; 883 state.keyword.af_type = BAR_BAR_BK_TYPE; 884 go to OPEN_AF; 885 end; 886 887 go to BAD_AMP_WORD; /* some other &|string */ 888 end; 889 890 else do; 891 if index (DIGITS, next_char) ^= 0 then do; /* &1, &2, etc. */ 892 ipos, state.iafter_pos = ipos + 1; 893 state.keyword = PARAM_KEYWORD; 894 saved_arg = next_char; 895 go to EXPAND_ONE; 896 end; 897 898 else if index ("fqr", next_char) ^= 0 then do; /* &q1, &rf&n, etc. */ 899 i = search (substr (input, ipos), DIGITS || "( " || DELIMS || NL); 900 if i = 0 then do; 901 state.keyword.name = substr (input, ipos - 1); 902 i = ilen - ipos + 2; 903 end; 904 else state.keyword.name = substr (input, ipos - 1, i); 905 906 if known_param (state.keyword, (state.keyword.name)) then do; 907 908 ipos, state.iafter_pos = ipos + i - 1; 909 910 if state.n_sw then /* &q&n, &rf&n, etc. */ 911 go to EXPAND_ONE; /* no need to get numeric arg */ 912 913 next_char = substr (input, ipos, 1); 914 if index (DIGITS, next_char) ^= 0 then do; /* &qf1, etc. */ 915 saved_arg = next_char; 916 ipos, state.iafter_pos = ipos + 1; /* skip the digit */ 917 go to EXPAND_ONE; 918 end; 919 else go to KNOWN; 920 end; 921 end; 922 923 state.keyword.name = "&"; /* &keyword to look up a char at a time */ 924 saved_ipos = ipos - 2; /* to be restored if keyword is &then, &else, etc. */ 925 found_sw = "0"b; 926 927 do while (^found_sw); 928 929 state.keyword.name = state.keyword.name || next_char; 930 931 ipos = ipos + 1; 932 933 if known_dont_expand (state.keyword.name) then do; 934 /* an &word that's a stmt control-arg */ 935 936 call add_output (state.optr_len, (state.keyword.name)); 937 938 go to END_AMP_WORD; 939 end; 940 941 if known (state.keyword) then found_sw = "1"b; 942 943 else do; 944 if ipos > ilen then 945 BAD_AMP_WORD: if index (STMTS_STRING, state.keyword.name || " ") ^= 0 then call error 946 ("Misused statement keyword """ || state.keyword.name || """"); 947 else call error ("Unrecognized keyword """ || state.keyword.name || """"); 948 949 next_char = substr (input, ipos); 950 if index (DELIMS, next_char) ^= 0 then go to BAD_AMP_WORD; 951 end; 952 end; 953 954 if state.keyword.control_word_sw then do; /* another stmt on line: &then, &else, &do */ 955 956 if nest_level > 1 then 957 call error ("Nested control statement keyword """ || state.keyword.name || """"); 958 959 abs_data.next_action = lookup_stmt ((state.keyword.name)); 960 961 A_xd.next_statement.pos = saved_ipos + 1; 962 A_xd.next_statement.len, 963 A_xd.next_statement.keyword_len = length (state.keyword.name); 964 965 ipos = saved_ipos; /* save next stmt for next call to abs_io_expand_ */ 966 go to RETURN_STRING; 967 end; 968 969 KNOWN: if ^state.keyword.allow_arg_sw then do; /* don't look for an argument */ 970 NO_ARG: saved_arg = DEFAULT_ARG; 971 go to EXPAND_ONE; 972 end; 973 974 else if ipos > ilen then 975 if state.keyword.require_arg_sw then 976 MISSING_ARG: call error ("Missing argument for """ || state.keyword.name || """"); 977 else go to NO_ARG; 978 979 else if substr (input, ipos, 1) = "(" then go to OPEN_PAREN; /* argument in parens */ 980 981 else if state.keyword.digit_arg_sw then /* accepts a single digit arg: q1, f1, etc. */ 982 if index (DIGITS, next_char) ^= 0 then do; 983 saved_arg = next_char; 984 ipos = ipos + 1; 985 go to EXPAND_ONE; 986 end; 987 else go to MISSING_ARG; 988 else if ^state.keyword.require_arg_sw then go to NO_ARG; 989 else go to MISSING_ARG; 990 end; 991 END_AMP_WORD: end; 992 end; /* end of (searched_char = "&") case */ 993 994 else do; /* white space; we're parsing args or finding &then */ 995 996 if no_args_sw then go to RETURN_STRING; 997 998 i = verify (substr (input, ipos - 1), WHITE); 999 if i ^= 0 then 1000 if substr (input, ipos + i - 2, 1) = NL then do; /* end of line before &+ */ 1001 ipos = ipos + i - 2; /* just skip white space, don't end arg */ 1002 go to NEXT_DELIM; 1003 end; 1004 else if ilen > ipos + i then 1005 if substr (input, ipos + i - 2, 2) = "&-" & /* before comment */ 1006 index (substr (input, ipos + i), NL) ^= 0 then do; /* followed by &+ */ 1007 ipos = ipos + i - 2; /* same: skip white space and don't end arg */ 1008 go to NEXT_DELIM; 1009 end; 1010 1011 if nest_level = 1 & ^inside_quotes_sw then do; /* outside (), [], or "", this whitesp delimits an arg */ 1012 1013 if i = 0 then do; /* end of statement */ 1014 if ipos - 2 < ilen & A_xd.is_input & ^abs_data.trim_whitespace_sw then 1015 1016 call add_output (state.optr_len, substr (input, ipos - 1)); 1017 1018 ipos = ilen + 1; /* else just skip the trailing whitespace */ 1019 eof_sw = "1"b; 1020 end; 1021 1022 else do; 1023 1024 if then_else_allowed_sw & ipos + i + 1 < ilen then do; /* room for &then or &else */ 1025 char5 = substr (input, ipos + i - 2, 5); 1026 if (char5 = "&then" | char5 = "&else") & /* IS then or else followed by white */ 1027 (ipos + i + 2 = ilen | index (WHITE, substr (input, ipos + i + 3, 1)) ^= 0) then do; 1028 ipos = ipos + i - 3; /* skip whitespace before &then or &else */ 1029 if char5 = "&then" then abs_data.next_action = THEN_ACTION; 1030 else abs_data.next_action = ELSE_ACTION; 1031 1032 if nest_level > 1 then /* not valid inside () or [] */ 1033 if state.keyword.number = AF_REF then 1034 call error ("Missing right bracket."); 1035 else call error ("Missing right parenthesis."); 1036 if state.quote_factor > 1 then call error ("Unbalanced quotes."); 1037 go to RETURN_STRING; 1038 end; 1039 end; 1040 1041 if parse_args_sw then do; /* if separating args */ 1042 ipos = ipos + i - 2; /* skip white space */ 1043 1044 if nest_level = 1 & state.quote_factor = 1 /* outside () [] "" */ then do; 1045 1046 call add_arg (state); /* pick up the arg we have delimited */ 1047 1048 null_arg_sw = "0"b; 1049 end; 1050 end; 1051 else do; /* pick up whitespace */ 1052 1053 ADD_SPACE: call add_output (state.optr_len, substr (input, ipos - 1, i - 1)); 1054 1055 ipos = ipos + i - 2; 1056 end; 1057 end; 1058 end; 1059 1060 else if i > 0 then go to ADD_SPACE; /* leave white space intact inside () [] */ 1061 NEXT_DELIM: end; 1062 end; 1063 1064 RETURN_STRING: 1065 if inside_quotes_sw then call error ("Unbalanced quotes in &set statement."); 1066 1067 do while (nest_level > 1 & state.keyword.number = 0); /* still inside non-ec construct like ( or [ */ 1068 saved_arg = output; 1069 1070 call pop_state (nest_level, state); 1071 1072 call add_output (state.optr_len, (saved_arg)); 1073 end; 1074 if nest_level > 1 then 1075 do j = nest_level - 1 by -1 to 1; 1076 if state_stack (j).keyword.number ^= 0 then 1077 if state_stack (j).keyword.number = AF_REF then call error ("Missing right bracket."); 1078 else call error ("Missing right parenthesis."); 1079 end; 1080 1081 if expand_label_sw then do; 1082 A_label_val_ptr = state.optr; 1083 A_label_val_len = state.olen; 1084 end; 1085 1086 if no_args_sw then do; /* we were just looking for comments */ 1087 ipos = no_args_ipos; 1088 parse_args_sw = "0"b; 1089 state.olen = 0; 1090 state.quote_factor, state.qscan_start = 1; 1091 end; 1092 1093 if trace_sw & trace.on & trace.expand ^= UNEXPANDED 1094 & abs_data.this_action ^= THEN_ACTION & abs_data.this_action ^= ELSE_ACTION then 1095 if parse_args_sw then do; /* have to print already parsed args too */ 1096 trace_buffer = ""; 1097 if A_xd.parsed_args_ptr ^= null then 1098 do parsed_arg_index = 1 to A_xd.parsed_args_ptr -> parsed_args.count; 1099 trace_buffer = trace_buffer || parsed_arg || " "; 1100 end; 1101 1102 call print_trace (trace_buffer || output, trace, control_line_sw); 1103 end; 1104 1105 else call print_trace (output, trace, control_line_sw); 1106 1107 if parse_args_sw then do; 1108 if state.olen > 0 then call add_arg (state); /* there is a last unsaved arg in output buffer */ 1109 else if null_arg_sw then do; /* there is an unsaved null arg */ 1110 null_arg_sw = "0"b; 1111 call add_arg (state); 1112 end; 1113 end; 1114 else do; /* the one arg is all of output */ 1115 if abs_data.this_action = IF_ACTION & skip_sw & state.olen = 0 then 1116 /* didn't expand skipped &if clause, so fake it */ 1117 call add_output (state.optr_len, "false"); /* otherwise, caller will say "Malformed conditional" */ 1118 1119 A_xd.arg_ptr = state.optr; 1120 A_xd.arg_len = state.olen; 1121 end; 1122 1123 if allocated_sw then /* not using caller's buffer anymore */ 1124 if abs_data.this_action ^= 0 then do; /* have to preserve args */ 1125 A_xd.caller_actual_len = 0; /* return only allocated storage */ 1126 A_xd.allocated_ptr = alloc_ptr; 1127 A_xd.allocated_buffer_len = alloc_len; 1128 A_xd.allocated_len = state.olen; 1129 end; 1130 else do; /* command or input line; can copy back */ 1131 if state.olen <= A_xd.caller_buffer_len then do; /* will all fit in caller's buffer */ 1132 A_xd.caller_actual_len = state.olen; 1133 A_xd.allocated_ptr = null; 1134 A_xd.allocated_buffer_len, A_xd.allocated_len = 0; 1135 end; 1136 else do; /* part in caller's part in allocated */ 1137 A_xd.caller_actual_len = A_xd.caller_buffer_len; /* as much in caller's as fits */ 1138 A_xd.allocated_buffer_len, A_xd.allocated_len = state.olen - A_xd.caller_actual_len; 1139 1140 allocate allocated_buffer in (xd_area) set (A_xd.allocated_ptr); 1141 1142 allocated_buffer = substr (output, A_xd.caller_actual_len + 1); 1143 end; 1144 1145 substr (caller_buffer, 1, A_xd.caller_actual_len) = substr (alloc_string, 1, A_xd.caller_actual_len); 1146 1147 free alloc_string in (xd_area); /* done with our own copy */ 1148 end; 1149 1150 else A_xd.caller_actual_len = state.olen; /* no copying necessary */ 1151 1152 if ^expand_label_sw then do; 1153 A_xd.input_pos = A_xd.input_pos + ipos; 1154 1155 /* Skip trailing white space if any */ 1156 1157 if substr (input_overlay, A_xd.input_pos - 1, 1) ^= NL then /* not at end of line */ 1158 if ^A_xd.is_input | abs_data.trim_whitespace_sw then do; 1159 i = index (substr (input_overlay, A_xd.input_pos), NL); 1160 if i = 1 then A_xd.input_pos = A_xd.input_pos + 1; /* one char to skip, must be white space */ 1161 else if i ^= 0 then 1162 if verify (substr (input_overlay, A_xd.input_pos, i - 1), WHITE) = 0 then 1163 A_xd.input_pos = A_xd.input_pos + i; /* skip however much white space */ 1164 end; 1165 1166 /* Skip continuation sequence if any */ 1167 1168 i = verify (substr (input_overlay, A_xd.input_pos), WHITE); 1169 if i ^= 0 then 1170 if substr (input_overlay, A_xd.input_pos + i - 1, 1) = "&" then 1171 if substr (input_overlay, A_xd.input_pos + i, 1) = "+" then 1172 A_xd.input_pos = A_xd.input_pos + i + 1; 1173 1174 end; 1175 1176 GET_NEXT_STMT: 1177 if abs_data.next_action = UNDEFINED & A_xd.input_pos + 1 < input_string.len then do; 1178 /* look-ahead for abs_io_v2_get_line's sake */ 1179 call get_next_stmt (input_string.ptr, input_string.len, A_xd.input_pos, A_xd.next_statement); 1180 1181 abs_data.next_action = A_xd.next_statement.action; 1182 end; 1183 1184 RETURN: 1185 if saved_arg_allocated_sw then free saved_arg_ptr -> saved_arg in (xd_area); 1186 1187 if ^got_next_stmt & abs_data.noabort then do; 1188 call get_next_stmt (input_string.ptr, input_string.len, A_xd.input_pos, A_xd.next_statement); 1189 end; 1190 1191 return; 1192 1193 add_arg: proc (P_state); 1194 1195 /* Adds another parsed_arg to the structure */ 1196 1197 dcl 1 P_state like state; 1198 dcl temp_ptr ptr; 1199 1200 if parsed_args.count >= parsed_args_count then call grow_parsed_args; 1201 1202 parsed_args.count = parsed_args.count + 1; 1203 parsed_args.ptr (parsed_args.count) = P_state.optr; 1204 parsed_args.len (parsed_args.count) = P_state.olen; 1205 1206 temp_ptr = P_state.optr; /* avoids PL/1 addcharno bug involving parameters */ 1207 P_state.optr = addcharno (temp_ptr, P_state.olen); 1208 P_state.omax_len = P_state.omax_len - P_state.olen; /* stay within allocated range */ 1209 P_state.olen = 0; 1210 P_state.quote_factor, P_state.qscan_start = 1; 1211 if inside_quotes_sw then added_arg_inside_quotes_sw = "1"b; 1212 1213 end add_arg; 1214 1215 add_output: proc (P_ptr_len, P_str); 1216 1217 /* Appends another parsed part (P_str) to the output buffer */ 1218 1219 dcl 1 P_ptr_len like state.optr_len; 1220 dcl P_str char (*); 1221 dcl output char (P_ptr_len.olen) based (P_ptr_len.optr); 1222 dcl str_len fixed bin; 1223 1224 if skip_sw & abs_data.this_action ^= IF_ACTION then return; 1225 1226 str_len = length (P_str); 1227 1228 if P_ptr_len.olen + str_len > P_ptr_len.omax_len then do; /* need to allocate bigger buffer */ 1229 alloc_len = P_ptr_len.omax_len + str_len + 200; 1230 1231 allocate alloc_string in (xd_area) set (alloc_ptr); 1232 1233 substr (alloc_string, 1, P_ptr_len.olen) = substr (output, 1, P_ptr_len.olen); 1234 /* if allocated_sw then free P_ptr_len.optr -> alloc_string; */ /* might destroy pushed state */ 1235 allocated_sw = "1"b; 1236 P_ptr_len.optr = alloc_ptr; 1237 P_ptr_len.omax_len = alloc_len; 1238 end; 1239 1240 P_ptr_len.olen = P_ptr_len.olen + str_len; 1241 substr (output, P_ptr_len.olen - str_len + 1, str_len) = P_str; 1242 1243 end add_output; 1244 1245 add_quoted_output: proc (P_ptr_len, P_str, P_requote_sw); 1246 1247 /* Same as add_output but quotes or requotes P_str */ 1248 dcl 1 P_ptr_len like state.optr_len; 1249 dcl P_str char (*); 1250 dcl P_requote_sw bit (1); 1251 dcl (quote_len, quote_pos, scan_len) fixed bin (21); 1252 1253 if skip_sw then return; 1254 1255 /* Bring quote-level scan up to date first */ 1256 1257 if state.qscan_start <= state.olen then do; /* quote-level scan not up to date yet */ 1258 if state.qscan_start = 1 & nest_level > 1 then /* recurse to scan outer level */ 1259 state.quote_factor = compute_nested_quote_factor (nest_level - 1); 1260 call compute_quote_factor (state); /* now compute factor at current level */ 1261 end; 1262 1263 /* Now knowing the quote level at which P_str is to be inserted, modify P_str */ 1264 1265 if P_requote_sw = REQUOTE then do; 1266 /* insert right number of leading quotes */ 1267 call add_output (P_ptr_len, copy ("""", state.quote_factor)); 1268 1269 state.quote_factor = 2 * state.quote_factor; /* up one for open quote */ 1270 end; 1271 1272 scan_len = 0; 1273 DOUBLE_LOOP: /* perform quote doubling while appending P_str */ 1274 quote_pos = index (substr (P_str, scan_len + 1), """"); 1275 if quote_pos > 0 then do; 1276 1277 call add_output (P_ptr_len, substr (P_str, scan_len + 1, quote_pos - 1)); 1278 1279 scan_len = scan_len + quote_pos; 1280 /* repeat next quote the right number of times */ 1281 call add_output (P_ptr_len, copy ("""", state.quote_factor)); 1282 1283 if scan_len < length (P_str) then go to DOUBLE_LOOP; 1284 else go to CLOSE_REQUOTE; 1285 end; 1286 1287 quote_pos = length (P_str) - scan_len; /* length of string yet to be added */ 1288 if quote_pos > 0 then 1289 1290 call add_output (P_ptr_len, substr (P_str, scan_len + 1, quote_pos)); /* rest of string */ 1291 1292 CLOSE_REQUOTE: 1293 if P_requote_sw = REQUOTE then do; 1294 state.quote_factor = divide (state.quote_factor, 2, 17, 0); /* down one for close quote */ 1295 /* append right number of trailing quotes */ 1296 call add_output (P_ptr_len, copy ("""", state.quote_factor)); 1297 end; 1298 1299 state.qscan_start = state.olen + 1; /* scan is up to date */ 1300 1301 return; 1302 1303 1304 compute_nested_quote_factor: proc (P_level) returns (fixed bin); 1305 1306 /* This internal procedure completes the quote scan up through nest level P_level */ 1307 1308 dcl P_level fixed bin; 1309 1310 if P_level = 0 then return (1); /* should never happen */ 1311 1312 if state_stack (P_level).qscan_start <= state_stack (P_level).olen then do; /* not up to date */ 1313 if state_stack (P_level).qscan_start = 1 & P_level > 1 then /* recurse */ 1314 state_stack (P_level).quote_factor = compute_nested_quote_factor (P_level - 1); 1315 call compute_quote_factor (state_stack (P_level)); 1316 end; 1317 1318 return (state_stack (P_level).quote_factor); 1319 1320 end compute_nested_quote_factor; 1321 1322 1323 compute_quote_factor: proc (P_state); 1324 1325 /* This internal procedure does the actual scan for a given level */ 1326 1327 dcl 1 P_state like state; 1328 dcl local_output char (P_state.olen) based (P_state.optr); 1329 1330 COUNT_LOOP: 1331 quote_pos = index (substr (local_output, P_state.qscan_start), """"); 1332 if quote_pos > 0 then do; 1333 1334 P_state.qscan_start = P_state.qscan_start + quote_pos - 1; 1335 quote_len = verify (substr (local_output, P_state.qscan_start), """") - 1; /* number of consecutive quotes */ 1336 if quote_len < 0 then quote_len = P_state.olen - P_state.qscan_start + 1; 1337 P_state.qscan_start = P_state.qscan_start + quote_len; 1338 1339 if mod (quote_len, P_state.quote_factor) = 0 then /* if a multiple of the depth, then */ 1340 /* keep incrementing depth (doubling factor) */ 1341 do while (mod (quote_len, 2 * P_state.quote_factor) ^= 0); 1342 quote_len = quote_len - P_state.quote_factor; 1343 P_state.quote_factor = 2 * P_state.quote_factor; 1344 end; 1345 1346 else do while (quote_len ^= 0); /* else keep decrementing depth (undoubling) */ 1347 P_state.quote_factor = divide (P_state.quote_factor, 2, 17, 0); 1348 quote_len = mod (quote_len, P_state.quote_factor); 1349 end; 1350 1351 go to COUNT_LOOP; 1352 end; 1353 1354 else P_state.qscan_start = P_state.olen + 1; 1355 1356 end compute_quote_factor; 1357 1358 end add_quoted_output; 1359 1360 error: proc (P_string); 1361 1362 /* Causes abs_io_v2_get_line to print error message and abort ec */ 1363 dcl P_string char (*); 1364 1365 A_code = error_table_$badsyntax; 1366 A_xd.error_msg = P_string; 1367 go to RETURN; 1368 1369 end error; 1370 1371 expand: proc (P_state, P_arg); 1372 1373 dcl 1 P_state like state; 1374 dcl P_arg char (*) varying; 1375 dcl value_str char (value_len) based (value_ptr); 1376 dcl value_var_str char (value_len) varying based (value_ptr); 1377 dcl based_area area based (A_xd.area_ptr); 1378 dcl value_buffer char (1000) varying; 1379 dcl path_string char (168); 1380 dcl short_string char (32) varying; 1381 dcl switch_name char (32); 1382 dcl (alloc_err_sw, traced_sw) bit (1); 1383 dcl (p, value_ptr) ptr; 1384 dcl value_len fixed bin (21); 1385 dcl (i, numeric_arg) fixed bin; 1386 1387 if P_state.keyword.number > MAX_KEY then go to BAD_AMP_WORD; 1388 1389 traced_sw = "0"b; 1390 1391 START: if P_state.keyword.require_number_sw & ^P_state.keyword.n_sw then do; /* requires numeric arg */ 1392 if P_arg = DEFAULT_ARG then numeric_arg = 1; /* default for &, etc. */ 1393 else do; 1394 numeric_arg = cv_dec_check_ ((P_arg), code); 1395 if code ^= 0 then 1396 if P_state.keyword.number = PARAM_REF then 1397 if P_state.keyword.f_sw then 1398 call error ("Invalid parameter number """ || P_arg || """"); 1399 else go to VAR_REF; /* &r(var), &q(var) */ 1400 else call error ("Invalid numeric argument """ || P_arg || """ for " || P_state.keyword.name); 1401 end; 1402 end; 1403 1404 if trace_sw & trace.on & trace.expand = ALL & ^traced_sw then do; /* trace before each expansion */ 1405 1406 traced_sw = "1"b; 1407 1408 call trace_expanded (P_state, trace_buffer); /* start with what's already been expanded */ 1409 1410 trace_buffer = trace_buffer || P_state.keyword.name; 1411 if P_arg ^= DEFAULT_ARG then /* some arg was specified */ 1412 if P_state.keyword.paren_sw then /* arg is enclosed in parens */ 1413 trace_buffer = trace_buffer || "(" || P_arg || ")"; 1414 else if P_state.keyword.bracket_sw then do; /* arg is enclosed in brackets &[...] */ 1415 if P_state.keyword.af_type = BAR_BAR_BK_TYPE then short_string = "||["; 1416 else if P_state.keyword.af_type = BAR_BK_TYPE then short_string = "|["; 1417 else short_string = "["; 1418 trace_buffer = trace_buffer || short_string || P_arg || "]"; 1419 end; 1420 else trace_buffer = trace_buffer || P_arg; 1421 if P_state.iafter_pos <= ilen then /* not end of line */ 1422 trace_buffer = trace_buffer || substr (input, P_state.iafter_pos); 1423 1424 call print_trace ((trace_buffer), trace, control_line_sw); 1425 end; 1426 1427 go to EXPAND (P_state.keyword.number); 1428 1429 EXPAND (1): /* parameter reference */ 1430 A_xd.expanded_sw = "1"b; 1431 /* OBSOLETE 1432* if P_arg = "0" then do; (This is the V1 meaning) 1433* if P_state.q_sw | P_state.r_sw then 1434* 1435* call add_quoted_output (P_state.optr_len, ec_path, P_state.r_sw); 1436* 1437* else call add_output (P_state.optr_len, ec_path); 1438* 1439* return; 1440* end; 1441*END OF OBSOLETE */ 1442 if P_arg = "0" then /* &0 is invalid in Version 2 */ 1443 call error ("Invalid parameter &0"); 1444 1445 arg_max = max (abs_data.arg_count, abs_data.default_arg_count); 1446 1447 if P_state.n_sw then arg_start = arg_max; /* &n = last arg */ 1448 else do; 1449 arg_start = numeric_arg; 1450 if arg_start > arg_max then return; /* no arg => null string */ 1451 end; 1452 1453 if P_state.f_sw & ^P_state.n_sw then arg_limit = arg_max; 1454 else arg_limit = arg_start; 1455 1456 command_args_ptr = abs_data.arg_ptr; 1457 command_args_count = abs_data.arg_count; 1458 1459 do arg_index = arg_start to arg_limit; /* append each ec arg in range */ 1460 /* arg_limit = max (#args, #defaults) */ 1461 if arg_index > abs_data.arg_count then do; /* see if default is defined */ 1462 command_args_ptr = abs_data.default_arg_ptr; 1463 command_args_count = abs_data.default_arg_count; 1464 if command_args (arg_index).ptr = null then /* &undefined = no default value */ 1465 go to NEXT_ARG; 1466 end; 1467 1468 if P_state.r_sw then 1469 1470 call add_quoted_output (P_state.optr_len, command_arg, P_state.r_sw); 1471 1472 else call parse_value (P_state, command_arg); 1473 1474 if arg_index < arg_limit then call parse_value (P_state, " "); 1475 NEXT_ARG: end; 1476 1477 return; 1478 1479 EXPAND (2): /* variable reference */ 1480 VAR_REF: 1481 A_xd.expanded_sw = "1"b; 1482 if P_arg = "" then call error ("Invalid variable reference ""&()"""); 1483 if verify (P_arg, DIGITS) = 0 & P_arg ^= "" then do; /* &(3), etc. */ 1484 P_state.keyword = PARAM_KEYWORD; 1485 go to START; /* convert numeric arg and retry as parameter */ 1486 end; 1487 1488 if abs_data.variables_ptr = null then abs_data.variables_ptr = init_variables (); /* this ec's value seg */ 1489 1490 call value_$get_alloc (abs_data.variables_ptr, "01"b, /* call this entry because it allocates */ 1491 (P_arg), A_xd.area_ptr, value_ptr, value_len, code); 1492 if code ^= 0 then 1493 if code ^= error_table_$oldnamerr then do; 1494 A_code = code; 1495 A_xd.error_msg = "Error in local value assignments."; 1496 go to RETURN; 1497 end; 1498 else if P_arg = "" then call error ("No value for null string."); 1499 else call error ("No value for """ || P_arg || """"); 1500 1501 if P_state.q_sw | P_state.r_sw then 1502 call add_quoted_output (P_state.optr_len, value_str, P_state.r_sw); 1503 1504 else call add_output (P_state.optr_len, value_str); 1505 1506 if value_str = "" & parse_args_sw then null_arg_sw = "1"b; 1507 1508 free value_str in (xd_area); 1509 1510 return; 1511 1512 EXPAND (3): /* active function reference &[...] */ 1513 A_xd.expanded_sw = "1"b; 1514 value_ptr = addr (value_buffer); /* start with this and see if big enough */ 1515 value_len = maxlength (value_buffer); 1516 CALL_EVALUATE: 1517 1518 if ec_data_ptr ^= null () then 1519 if codeptr (ec_data.eval_string) ^= null () then do; /* an af evaluation routine was specified */ 1520 call ec_data.eval_string (null, (P_arg), P_state.keyword.af_type, value_var_str, code); 1521 go to EVALUATE_CALLED; 1522 end; 1523 call cu_$evaluate_active_string (null, (P_arg), P_state.keyword.af_type, value_var_str, code); 1524 EVALUATE_CALLED: 1525 if code ^= 0 then do; 1526 if code = error_table_$command_line_overflow then do; 1527 if value_len > maxlength (value_buffer) then free value_var_str in (based_area); 1528 1529 value_len = value_len * 2; 1530 alloc_err_sw = "0"b; 1531 on area alloc_err_sw = "1"b; 1532 on bad_area_format alloc_err_sw = "1"b; 1533 on bad_area_initialization alloc_err_sw = "1"b; 1534 1535 allocate value_var_str in (based_area) set (value_ptr); 1536 1537 revert area; 1538 revert bad_area_format; 1539 revert bad_area_initialization; 1540 1541 if ^alloc_err_sw then go to CALL_EVALUATE; 1542 end; 1543 A_code = code; 1544 A_xd.error_msg = "Evaluating active function."; 1545 go to RETURN; 1546 end; 1547 1548 if P_state.keyword.af_type = BAR_BAR_BK_TYPE then 1549 1550 if value_var_str = "" & nest_level = 1 then call add_arg (P_state); 1551 1552 else call add_output (P_state.optr_len, rtrim (value_var_str)); 1553 1554 else call parse_value (P_state, rtrim (value_var_str)); 1555 1556 if value_len > maxlength (value_buffer) then free value_var_str in (based_area); 1557 1558 return; 1559 1560 EXPAND (4): /* &condition_info_ptr */ 1561 go to COND_INFO_PTR; 1562 1563 EXPAND (5): /* &cond_info_ptr */ 1564 COND_INFO_PTR: 1565 call ioa_$rsnnl ("^p", switch_name, i, abs_data.condition_info.info_ptr); 1566 1567 call add_output (P_state.optr_len, substr (switch_name, 1, i)); 1568 1569 return; 1570 1571 EXPAND (6): /* &condition_name */ 1572 go to COND_NAME; 1573 1574 EXPAND (7): /* &cond_name */ 1575 COND_NAME: 1576 if abs_data.on_info.in_handler_sw then /* null string if not in &on unit */ 1577 call add_output (P_state.optr_len, rtrim (abs_data.on_info.condition_name)); 1578 1579 return; 1580 1581 EXPAND (8): /* &ec_dir */ 1582 call hcs_$fs_get_path_name (input_string.ptr, path_string, i, (""), code); 1583 1584 call add_quoted_output (P_state.optr_len, substr (path_string, 1, i), QDOUBLE); 1585 1586 return; 1587 1588 EXPAND (9): /* &ec_name */ 1589 call add_quoted_output (P_state.optr_len, ec_name, QDOUBLE); 1590 return; 1591 1592 EXPAND (10): /* &ec_path */ 1593 call add_quoted_output (P_state.optr_len, ec_path, QDOUBLE); 1594 return; 1595 1596 EXPAND (11): /* &ec_switch */ 1597 if ec_data.switch_ptr = null then switch_name = "user_i/o"; 1598 else switch_name = ec_data.switch_ptr -> iocb.name; 1599 1600 call add_quoted_output (P_state.optr_len, rtrim (switch_name), QDOUBLE); 1601 1602 return; 1603 1604 EXPAND (12): /* &handlers */ 1605 if abs_data.cleanup_handler_ptr ^= null then value_buffer = """cleanup"""; 1606 else value_buffer = ""; 1607 1608 do p = abs_data.first_handler_ptr repeat (p -> handler_node.next_ptr) while (p ^= null); 1609 if value_buffer ^= "" then value_buffer = value_buffer || " "; 1610 value_buffer = value_buffer || requote_string_ (rtrim (p -> handler_node.condition_name)); 1611 end; 1612 1613 call add_output (P_state.optr_len, (value_buffer)); 1614 1615 return; 1616 1617 EXPAND (13): /* &in_handler (NOT IMPLEMENTED) */ 1618 go to BAD_AMP_WORD; 1619 1620 EXPAND (14): /* &is_absin */ 1621 call add_output (P_state.optr_len, (TF (fixed (A_xd.is_absin)))); 1622 1623 return; 1624 1625 EXPAND (15): /* &is_active_function */ 1626 go to IS_AF; 1627 1628 EXPAND (16): /* &is_af */ 1629 IS_AF: 1630 call add_output (P_state.optr_len, (TF (fixed (A_xd.is_af)))); 1631 1632 return; 1633 1634 EXPAND (17): /* &is_attached */ 1635 call add_output (P_state.optr_len, (TF (fixed (abs_data.attach.victim_ptr ^= null)))); 1636 1637 return; 1638 1639 EXPAND (18): /* &is_defined */ 1640 if verify (P_arg, DIGITS) = 0 & P_arg ^= "" then do; /* for number: true if ec arg or defined by &default */ 1641 numeric_arg = cv_dec_check_ ((P_arg), code); 1642 if code ^= 0 then go to IS_VAR; 1643 if numeric_arg <= abs_data.arg_count then tf_string = "true"; 1644 else if numeric_arg > abs_data.default_arg_count then tf_string = "false"; 1645 else do; 1646 command_args_ptr = abs_data.default_arg_ptr; 1647 command_args_count = abs_data.default_arg_count; 1648 if command_args (numeric_arg).ptr = null then tf_string = "false"; 1649 else tf_string = "true"; 1650 end; 1651 1652 call add_output (P_state.optr_len, (tf_string)); 1653 1654 return; 1655 end; 1656 IS_VAR: /* for non-numeric: true if defined by &set */ 1657 if abs_data.variables_ptr = null then abs_data.variables_ptr = init_variables (); 1658 1659 call add_output (P_state.optr_len, 1660 (TF (fixed (value_$defined (abs_data.variables_ptr, "01"b, (P_arg), code))))); 1661 1662 if code ^= 0 then call error ("Format error in variables."); 1663 1664 return; 1665 1666 EXPAND (19): /* &is_input_line */ 1667 call add_output (P_state.optr_len, (TF (fixed (A_xd.is_input)))); 1668 1669 return; 1670 1671 EXPAND (20): /* &n */ 1672 call ioa_$rsnnl ("^d", short_string, 32, abs_data.arg_count); 1673 1674 call add_output (P_state.optr_len, (short_string)); 1675 1676 return; 1677 1678 EXPAND (21): /* "e (...) (NOT IMPLEMENTED) */ 1679 /* 1680* call add_quoted_output (P_state.optr_len, (P_arg), QDOUBLE); 1681**/ 1682 1683 go to BAD_AMP_WORD; 1684 1685 EXPAND (22): /* &requote (...) (NOT IMPLEMENTED) */ 1686 /* 1687* call add_quoted_output (P_state.optr_len, (P_arg), REQUOTE); 1688**/ 1689 1690 go to BAD_AMP_WORD; 1691 1692 EXPAND (23): /* &unquote (...) (NOT IMPLEMENTED) */ 1693 go to BAD_AMP_WORD; 1694 1695 EXPAND (24): /* &was_attached */ 1696 call add_output (P_state.optr_len, (TF (fixed (abs_data.in_handler_sw & abs_data.was_attached_sw)))); 1697 1698 return; 1699 1700 EXPAND (25): /* & */ 1701 call add_output (P_state.optr_len, copy ("&", numeric_arg)); 1702 return; 1703 1704 EXPAND (26): /* &BS */ 1705 call add_output (P_state.optr_len, copy (BS, numeric_arg)); 1706 return; 1707 1708 EXPAND (27): /* &CR */ 1709 call add_output (P_state.optr_len, copy (CR, numeric_arg)); 1710 return; 1711 1712 EXPAND (28): /* &FF, &NP */ 1713 call add_output (P_state.optr_len, copy (FF, numeric_arg)); 1714 return; 1715 1716 EXPAND (29): /* &HT */ 1717 call add_output (P_state.optr_len, copy (" ", numeric_arg)); 1718 return; 1719 1720 EXPAND (30): /* &LF */ 1721 call add_output (P_state.optr_len, copy (NL, numeric_arg)); 1722 return; 1723 1724 EXPAND (31): /* &NL */ 1725 call add_output (P_state.optr_len, copy (NL, numeric_arg)); 1726 return; 1727 1728 EXPAND (32): /* &NP = &FF */ 1729 call add_output (P_state.optr_len, copy (FF, numeric_arg)); 1730 return; 1731 1732 1733 EXPAND (33): /* &QT */ 1734 call add_output (P_state.optr_len, copy ("""", numeric_arg)); 1735 return; 1736 1737 EXPAND (34): /* &SP */ 1738 call add_output (P_state.optr_len, copy (" ", numeric_arg)); 1739 return; 1740 1741 EXPAND (35): /* &VT */ 1742 call add_output (P_state.optr_len, copy (VT, numeric_arg)); 1743 return; 1744 1745 end expand; 1746 1747 find_next_occurrence: proc (P_str, P_saved_pos, P_pos); 1748 1749 /* Find the next occurrence P_pos of the string P_str starting at A_xd.input_pos. 1750*P_saved_pos is one of the saved "next occurrence" values in A_xd, e.g. A_xd.next_do_pos. 1751*If the value of P_saved_pos is already beyond A_xd.input_pos, just set P_pos = P_saved_pos. 1752*Otherwise, compute P_pos and set P_saved_pos = P_pos. */ 1753 1754 dcl P_str char (*); 1755 dcl (P_pos, P_saved_pos, i) fixed bin (21); 1756 1757 if P_saved_pos >= A_xd.input_pos then P_pos = P_saved_pos; 1758 else do; 1759 i = index (input, P_str); 1760 if i = 0 then P_pos = MAX_CHARS; /* agreed meaning is "no more left" */ 1761 else P_pos = A_xd.input_pos + i - 1; 1762 P_saved_pos = P_pos; 1763 end; 1764 1765 end find_next_occurrence; 1766 1767 get_next_stmt: proc (A_ptr, A_len, A_pos, A_stmt); 1768 1769 /* For abs_io_v2_get_line's look-ahead: type, po & length of next stmt keyword */ 1770 dcl A_ptr ptr; 1771 dcl (A_len, A_pos) fixed bin (21); 1772 dcl 1 A_stmt aligned like expand_data.this_statement; 1773 dcl str char (A_len) based (A_ptr); 1774 dcl key_name char (32); 1775 dcl (i, j, k) fixed bin (21); 1776 1777 got_next_stmt = "1"b; 1778 if abs_data.noabort then do; 1779 i = index ( substr (str, A_pos), NL) + A_pos - 1; 1780 j = i + 1; 1781 abs_data.position = j; 1782 abs_data.limit = i; 1783 end; 1784 i = verify (substr (str, A_pos), WHITE || NL); 1785 if i = 0 then do; 1786 NO_NEXT: A_stmt.action = UNDEFINED; /* no next statement */ 1787 A_stmt.pos, A_stmt.len, A_stmt.keyword_len = 0; 1788 1789 return; 1790 end; 1791 1792 j = A_pos + i - 1; 1793 SEE_NEXT: if substr (str, j, 1) ^= "&" then do; /* a non-control line */ 1794 A_stmt.action, A_stmt.len, A_stmt.keyword_len = 0; 1795 return; 1796 end; 1797 1798 if substr (str, j + 1, 1) = "-" then do; /* skip &- comment line */ 1799 k = index (substr (str, j), NL); 1800 if k = 0 then go to NO_NEXT; 1801 j = j + k; 1802 j = j + verify (substr (str, j), WHITE) - 1; /* skip leading white space */ 1803 go to SEE_NEXT; 1804 end; 1805 1806 else do; 1807 k = search (substr (str, j), WHITE || NL || "("); /* find end of next token (stmt keyword?) */ 1808 if k = 0 then key_name = substr (str, j); 1809 else key_name = substr (str, j, k - 1); 1810 1811 A_stmt.action = lookup_stmt (key_name); 1812 1813 if A_stmt.action ^= 0 then 1814 A_stmt.len, A_stmt.keyword_len = length (rtrim (key_name)); 1815 else A_stmt.len, A_stmt.keyword_len = 0; /* non-control line */ 1816 end; 1817 1818 A_stmt.pos = j; 1819 1820 end get_next_stmt; 1821 1822 get_quoted_string: proc (P_str, P_ipos, P_state, P_q_sw); 1823 1824 /* Called at &", finds matching end quote and saves string */ 1825 1826 dcl P_str char (*); 1827 dcl P_ipos fixed bin (21); 1828 dcl 1 P_state like state; 1829 dcl P_q_sw bit (1); 1830 1831 dcl inside_quotes_sw bit (1); 1832 dcl (i, ipos) fixed bin (21); 1833 1834 inside_quotes_sw = "1"b; /* caller saw the &" */ 1835 ipos = P_ipos; 1836 1837 do while (inside_quotes_sw); 1838 1839 i = index (substr (P_str, ipos), """"); 1840 if i = 0 then call error ("Missing end quote for &"""); 1841 1842 if ipos + i <= length (P_str) & substr (P_str, ipos + i, 1) = """" then do; 1843 /* imbedded double quote (= 1 quote) */ 1844 1845 if P_q_sw then call add_quoted_output (P_state.optr_len, substr (P_str, ipos, i - 1) || """", "0"b); 1846 1847 else call add_output (P_state.optr_len, substr (P_str, ipos, i - 1) || """"); 1848 1849 ipos = ipos + i + 1; 1850 end; 1851 else do; /* single quote: closes string */ 1852 1853 if P_q_sw then call add_quoted_output (P_state.optr_len, substr (P_str, ipos, i - 1), "0"b); 1854 1855 else call add_output (P_state.optr_len, substr (P_str, ipos, i - 1)); 1856 1857 P_ipos = ipos + i; 1858 inside_quotes_sw = "0"b; 1859 end; 1860 end; 1861 1862 if output = "" & parse_args_sw then null_arg_sw = "1"b; 1863 1864 end get_quoted_string; 1865 1866 grow_parsed_args: proc; 1867 1868 /* Allocates more room for the parsed_args structure */ 1869 /* Implicit arguments are parsed_args_ptr and parsed_args_count */ 1870 1871 dcl old_parsed_args_ptr ptr; 1872 1873 old_parsed_args_ptr = parsed_args_ptr; 1874 parsed_args_count = parsed_args_count * 2; /* more room */ 1875 1876 allocate parsed_args in (xd_area) set (parsed_args_ptr); 1877 1878 parsed_args_ptr -> parsed_args.count = old_parsed_args_ptr -> parsed_args.count; 1879 parsed_args_ptr -> parsed_args = old_parsed_args_ptr -> parsed_args; 1880 A_xd.parsed_args_ptr = parsed_args_ptr; 1881 1882 free old_parsed_args_ptr -> parsed_args in (xd_area); 1883 1884 end grow_parsed_args; 1885 1886 init_variables: proc returns (ptr); 1887 1888 /* Gets ptr to this ec's private "value seg" */ 1889 1890 dcl value_header (72) fixed aligned based; 1891 dcl variables_ptr ptr; 1892 dcl code fixed bin (35); 1893 1894 allocate value_header in (abs_data.work_area) set (variables_ptr); 1895 1896 call value_$init_seg (variables_ptr, 1 /* non-shareable */, addr (abs_data.work_area), 0, code); 1897 if code ^= 0 then call error ("Unable to allocate variables."); 1898 1899 return (variables_ptr); 1900 1901 end init_variables; 1902 1903 known: proc (P_keyword) returns (bit (1)); 1904 1905 /* TRUE & fills in P_keyword if P_keyword.name is found in NAMES */ 1906 1907 dcl 1 P_keyword like state.keyword; 1908 dcl i fixed bin; 1909 1910 i = index (NAMES_STRING, P_keyword.name || " "); 1911 1912 if i = 0 then return ("0"b); 1913 i = divide (i + length (NAMES (1)), length (NAMES (1)), 17, 0); 1914 P_keyword.number = i + 3; /* 1 = PARAM; 3 = VAR; 3 = AF */ 1915 unspec (P_keyword.name_switches) = NAME_SWITCHES (i); 1916 unspec (P_keyword.param_switches) = "0"b; 1917 return ("1"b); 1918 1919 end known; 1920 1921 known_dont_expand: proc (P_name) returns (bit (1)); 1922 1923 /* TRUE if P_name is found in DONT_EXPAND (a &keyword that's a stmt control-arg) */ 1924 1925 dcl P_name char (32) varying; 1926 dcl i fixed bin; 1927 1928 i = index (DONT_EXPAND_STRING, P_name || " "); 1929 1930 return (i ^= 0); 1931 1932 end known_dont_expand; 1933 1934 known_param: proc (P_keyword, P_name) returns (bit (1)); 1935 1936 /* TRUE & fills in P_keyword for parameter prefixes &q, &r, etc. */ 1937 1938 dcl 1 P_keyword like state.keyword; 1939 dcl P_name char (32) varying; 1940 dcl i fixed bin; 1941 1942 i = index (PARAMS_STRING, P_keyword.name || " "); 1943 1944 if i = 0 then return ("0"b); 1945 i = divide (i + length (PARAMS (1)), length (PARAMS (1)), 17, 0); 1946 P_keyword = PARAM_KEYWORD; 1947 P_keyword.name = P_name; 1948 unspec (P_keyword.param_switches) = PARAM_SWITCHES (i); 1949 return ("1"b); 1950 1951 end known_param; 1952 1953 lookup_stmt: proc (A_key_name) returns (fixed bin); 1954 1955 /* Sees whether A_key_name is a beginning-of-stmt keyword */ 1956 1957 dcl A_key_name char (32); 1958 1959 return (divide (index (STMTS_STRING, A_key_name) + length (STMTS (1)) - 1, 1960 length (STMTS (1)), 17, 0)); 1961 1962 end lookup_stmt; 1963 1964 parse_value: proc (P_state, P_str); 1965 1966 /* Adds to the output string, meanwhile parsing into arguments */ 1967 1968 dcl 1 P_state like state; 1969 dcl P_str char (*); 1970 dcl (vbreak, vstart) fixed bin (21); 1971 1972 if parse_args_sw & nest_level < 2 & P_state.quote_factor = 1 & ^inside_quotes_sw then do; 1973 1974 1975 vstart = 1; 1976 PARSE_ARG: 1977 vbreak = search (substr (P_str, vstart), WHITE || "&"""); 1978 if vbreak ^= 0 then do; 1979 1980 call add (substr (P_str, vstart, vbreak - 1)); 1981 1982 if substr (P_str, vstart + vbreak - 1, 1) = "&" then 1983 if substr (P_str, vstart + vbreak, 1) = """" then do; /* &"..." */ 1984 vstart = vstart + vbreak + 1; 1985 1986 call get_quoted_string (P_str, vstart, P_state, P_state.q_sw); 1987 end; 1988 else vstart = vstart + vbreak; /* continue searching */ 1989 1990 else if substr (P_str, vstart + vbreak - 1, 1) = """" then do; /* handle regular "..." too */ 1991 vstart = vstart + vbreak; /* position past the first quote */ 1992 1993 call get_quoted_string (P_str, vstart, P_state, P_state.q_sw); 1994 end; 1995 1996 else do; 1997 if verify (output, WHITE) ^= 0 then call add_arg (P_state); 1998 1999 vbreak = vstart + vbreak - 1; /* actual position of the start of the white space */ 2000 vstart = verify (substr (P_str, vbreak), WHITE); 2001 if vstart ^= 0 then do; 2002 vstart = vbreak + vstart - 1; 2003 go to PARSE_ARG; 2004 end; 2005 end; 2006 end; 2007 2008 else call add (substr (P_str, vstart)); 2009 end; 2010 2011 else call add (P_str); 2012 2013 2014 add: proc (P_str); 2015 2016 /* Appends the string either quote_doubled or plain depending on P_state.q_sw */ 2017 2018 dcl P_str char (*); 2019 2020 if P_state.q_sw then call add_quoted_output (P_state.optr_len, P_str, "0"b); 2021 2022 else call add_output (P_state.optr_len, P_str); 2023 2024 end add; 2025 2026 end parse_value; 2027 2028 pop_state: proc (P_nest_level, P_state); 2029 2030 /* Process close paren */ 2031 2032 dcl P_nest_level fixed bin; 2033 dcl 1 P_state like state; 2034 2035 P_nest_level = max (P_nest_level - 1, 1); 2036 P_state = state_stack (P_nest_level); 2037 alloc_info = alloc_stack (P_nest_level); 2038 2039 end pop_state; 2040 2041 print_trace: proc (P_str, P_trace, P_control_sw); 2042 2043 dcl P_str char (*); 2044 dcl 1 P_trace aligned like abs_data.command_line; 2045 dcl P_control_sw bit (1); 2046 dcl control_word char (32) varying; 2047 2048 if ^trace_sw then return; 2049 2050 if P_control_sw = CONTROL then control_word = rtrim (STMTS (abs_data.this_action)) || " "; 2051 else control_word = ""; 2052 2053 if P_trace.iocb = null then P_trace.iocb = iox_$user_output; 2054 2055 call ioa_$ioa_switch_nnl (P_trace.iocb, P_trace.prefix || control_word || "^a^/", P_str); 2056 2057 end print_trace; 2058 2059 push_state: proc (P_nest_level, P_state); 2060 2061 /* Processes open paren */ 2062 2063 dcl P_nest_level fixed bin; 2064 dcl 1 P_state like state; 2065 2066 state_stack (P_nest_level) = P_state; 2067 alloc_stack (P_nest_level) = alloc_info; 2068 P_nest_level = P_nest_level + 1; 2069 state.optr = addcharno (state.optr, state.olen); 2070 state.omax_len = state.omax_len - state.olen; /* stay within allocated range */ 2071 state.olen = 0; 2072 state.quote_factor, state.qscan_start = 1; 2073 2074 end push_state; 2075 2076 save_arg: proc; 2077 2078 /* This procedure allocates a bigger saved_arg buffer if necessary to hold a long &[...] or other arg */ 2079 2080 if state.olen > saved_arg_len then do; 2081 2082 if saved_arg_allocated_sw then free saved_arg_ptr -> saved_arg in (xd_area); 2083 2084 saved_arg_len = state.olen; 2085 if A_xd.area_ptr = null then A_xd.area_ptr = get_system_free_area_ (); 2086 2087 allocate saved_arg in (xd_area) set (saved_arg_ptr); 2088 2089 saved_arg_allocated_sw = "1"b; 2090 end; 2091 2092 saved_arg = output; 2093 2094 end save_arg; 2095 2096 trace_comment: proc (P_str); 2097 2098 dcl P_str char (*); 2099 2100 if abs_data.comment_line.prefix = "" then 2101 2102 call print_trace ("&-" || P_str, abs_data.comment_line, NONCONTROL); 2103 2104 else call print_trace (P_str, abs_data.comment_line, NONCONTROL); 2105 2106 end trace_comment; 2107 2108 trace_expanded: proc (P_state, P_buffer); 2109 2110 dcl 1 P_state like state; 2111 dcl P_buffer char (*) varying; 2112 dcl open_char char (4) varying; 2113 dcl i fixed bin; 2114 2115 P_buffer = ""; 2116 2117 if parse_args_sw then do; /* have to print parsed args too */ 2118 if A_xd.parsed_args_ptr ^= null then 2119 do parsed_arg_index = 1 to A_xd.parsed_args_ptr -> parsed_args.count; 2120 /* traced &set line should show arg grouping */ 2121 if search (parsed_arg, """" || WHITE) ^= 0 & abs_data.this_action = SET_ACTION then 2122 P_buffer = P_buffer || requote_string_ (parsed_arg) || " "; 2123 else P_buffer = P_buffer || parsed_arg || " "; 2124 end; 2125 end; 2126 2127 do i = 1 to nest_level - 1; /* pick up expanded text of each nesting */ 2128 if state_stack (i).olen > 0 then 2129 P_buffer = P_buffer || 2130 substr (state_stack (i).optr -> output, 1, state_stack (i).olen); 2131 2132 if state_stack (i).keyword.number = 0 then open_char = ""; 2133 else if state_stack (i).keyword.number = AF_REF then 2134 if state_stack (i).keyword.af_type = BAR_BAR_BK_TYPE then open_char = "||["; 2135 else if state_stack (i).keyword.af_type = BAR_BK_TYPE then open_char = "|["; 2136 else open_char = "["; 2137 else open_char = "("; 2138 P_buffer = P_buffer || state_stack (i).keyword.name || open_char; 2139 end; 2140 if P_state.olen > 0 then P_buffer = P_buffer || output; 2141 2142 end trace_expanded; 2143 2144 trace_unexpanded: proc (P_str, P_trace); 2145 2146 dcl P_str char (*); 2147 dcl 1 P_trace aligned like abs_data.command_line; 2148 2149 if substr (P_str, 1, 5) = "&then" | substr (P_str, 1, 5) = "&else" | P_str = " &do" then return; 2150 2151 if P_trace.iocb = null then P_trace.iocb = iox_$user_output; 2152 2153 call ioa_$ioa_switch_nnl (P_trace.iocb, P_trace.prefix || "^a^/", P_str); 2154 2155 end trace_unexpanded; 2156 2157 /* OTHER EXTERNAL ENTRIES TO abs_io_expand_ */ 2158 2159 2160 set: entry (A_vars_ptr, A_var, A_val, A_code); 2161 2162 /* Called by abs_io_v2_get_line to perform &set using abs_data.variables_ptr */ 2163 2164 delete_sw = "0"b; 2165 SET: 2166 if verify (A_var, DIGITS) = 0 & A_var ^= "" then /* parameter reference */ 2167 call error ("Attempt to &set the value of an argument."); 2168 else do; 2169 2170 if A_vars_ptr = null then A_vars_ptr = init_variables (); 2171 2172 if delete_sw then call value_$delete (A_vars_ptr, "01"b, A_var, A_code); 2173 2174 else call value_$set (A_vars_ptr, "01"b, A_var, A_val, "", A_code); 2175 end; 2176 2177 return; 2178 2179 /* end of abs_io_expand_$set */ 2180 2181 2182 delete: entry (A_vars_ptr, A_var, A_val, A_code); 2183 2184 /* Called by abs_io_v2_get_line to implement "&set var_name &undefined" */ 2185 /* NOTE: calling sequence has to be the same as $set to use common code. */ 2186 2187 delete_sw = "1"b; 2188 go to SET; 2189 2190 /* end of abs_io_expand_$delete */ 2191 1 1 /* START OF: abs_io_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(87-02-20,Parisek), approve(87-07-23,MCR7716), 1 6* audit(87-07-30,Fawcett), install(87-08-11,MR12.1-1080): 1 7* Added the noabort flag for determining whether or not to abort after 1 8* exec_com error occurs. 1 9* END HISTORY COMMENTS */ 1 10 1 11 1 12 /* Initial coding: 25 June 79 by J. Spencer Love */ 1 13 /* login_channel option flag BIM 11/81 */ 1 14 /* Added this_action and next_action 04/20/82 S. Herbst */ 1 15 /* Added on_info, goto_statement_(pos len) 01/06/83 S. Herbst */ 1 16 /* Added output_file.turn_off_ssw 05/16/83 S. Herbst */ 1 17 /* Added attach.trim_whitespace_sw 06/02/83 S. Herbst */ 1 18 /* Added listener_pl1_label and get_line_pl1_label 11/17/83 S. Herbst */ 1 19 /* Added (command comment control input)_line.by_control_arg 03/20/84 S. Herbst */ 1 20 1 21 declare abs_data_ptr ptr; 1 22 1 23 declare 1 abs_data aligned based (abs_data_ptr), 1 24 2 version fixed bin, /* Version = 1 */ 1 25 2 io_module_name char (32) varying, /* either "abs_io_" or "ec_input_" */ 1 26 2 open_description char (24) varying, /* either "stream_input" or "stream_input_output" */ 1 27 2 unique_name char (15) varying, /* &! -- either blank or 15 char unique string */ 1 28 /* */ 1 29 2 ec_data_ptr ptr, /* -> communication area for exec_com */ 1 30 2 expand_data_ptr ptr, /* -> structure for abs_io_expand_ */ 1 31 /* */ 1 32 2 instance_chain, /* two way linked chain of abs_data blocks for debugging */ 1 33 3 prev_ptr ptr, /* -> next older abs_data instance */ 1 34 3 next_ptr ptr, /* -> next newer abs_data instance */ 1 35 3 level fixed bin, /* level of ec invocation in chain for debugging */ 1 36 3 pad bit (36), /* */ 1 37 /* */ 1 38 2 arg_info, /* */ 1 39 3 ec_path_ptr ptr, /* Ptr to allocated &ec_path string */ 1 40 3 ec_path_len fixed bin (21), /* Length of allocated &ec_path (&0) string */ 1 41 3 ec_path_quotes fixed bin (21), /* Number of quote chars in &ec_path, -1 if not yet counted */ 1 42 3 ec_name_ptr ptr, /* Ptr to allocated &ec_name string */ 1 43 3 ec_name_len fixed bin (21), /* Length of allocated &ec_name string */ 1 44 3 ec_name_quotes fixed bin (21), /* Number of quote chars in &ec_name, -1 if not yet counted */ 1 45 3 arg_ptr ptr, /* pointer to allocated structure containing args */ 1 46 3 arg_count fixed bin, /* number of arguments passed */ 1 47 3 args_copied bit (1), /* 1 indicates arguments were copied into work_area */ 1 48 3 default_arg_ptr ptr, /* pointer to allocated &default args */ 1 49 3 default_arg_count fixed bin, /* number of &default args */ 1 50 3 pad bit (36), /* */ 1 51 /* */ 1 52 2 input_string, /* data about input segment or archive component */ 1 53 3 ptr ptr, /* pointer to input file */ 1 54 3 len fixed bin (21), /* number of characters in input file */ 1 55 3 start fixed bin (21), /* initial value for input_pos, set beyond &version, if any */ 1 56 3 position fixed bin (21), /* current index into input file */ 1 57 3 limit fixed bin (21), /* farthest point yet reached...begin &label search here */ 1 58 /* */ 1 59 2 open_data, /* data saved at attach time for open time */ 1 60 3 output_dir char (168) unal, /* directory pathname of output file (if specified) */ 1 61 3 output_entry char (32) unal, /* entryname of output file (if specified) */ 1 62 3 parser_version fixed bin, /* indicates version of parser (get_line) for open */ 1 63 3 si bit (1) unal, /* 1 indicates opening for stream_input permitted */ 1 64 3 sio bit (1) unal, /* 1 indicates opening for stream_input_output permitted */ 1 65 3 ssf bit (1) unal, /* 1 indicates output file cannot be MSF */ 1 66 3 truncate bit (1) unal, /* 1 indicates output file truncated at open */ 1 67 3 no_set_bc bit (1) unal, /* 1 to set absout bitcount only at close */ 1 68 3 login_channel bit (1) unal, /* 1 to fish arguments from PIT */ 1 69 3 pad bit (30) unal, /* */ 1 70 /* */ 1 71 2 output_file, /* data for abs_io_put_chars */ 1 72 3 fcb_ptr ptr, /* -> File Control Block for msf_manager_, null if SSF */ 1 73 3 seg_ptr ptr, /* -> base of current component of output file */ 1 74 3 current_len fixed bin (21), /* number of characters in current component */ 1 75 3 max_len fixed bin (21), /* max number of characters in a component */ 1 76 3 MSF_seg_idx fixed bin, /* index of current MSF component. Used to get new ones */ 1 77 3 switches aligned, 1 78 4 may_be_MSF bit (1) unaligned, /* 1 indicates absout can become an MSF */ 1 79 4 turn_off_ssw bit (1) unaligned, /* 1 means safety switch of absout was off originally */ 1 80 4 mbz bit (34) unaligned, 1 81 /* */ 1 82 2 command_line, /* substructure dealing with tracing command lines */ 1 83 3 by_control_arg bit (1) unaligned, /* 1 if trace modes specified by ec control arg */ 1 84 3 on bit (1) unaligned, /* 1 to print tracing information */ 1 85 3 expand fixed bin (3) unal, /* 1 to print unexpanded, 2 expanded, 3 all, 4 both */ 1 86 3 pad1 bit (66) unaligned, /* pad to double word */ 1 87 3 iocb ptr, /* I/O switch to put trace out on */ 1 88 3 prefix char (32) varying, /* prefix for &trace tracing, eg. "COMMAND: " */ 1 89 3 pad2 bit (36), /* */ 1 90 2 (comment_line, /* for tracing comments..always unexpanded */ 1 91 control_line, /* for tracing control lines */ 1 92 input_line) /* for tracing input lines in &attach mode */ 1 93 like abs_data.command_line, 1 94 /* */ 1 95 2 attach, /* */ 1 96 3 victim_ptr ptr, /* -> IOCB affected by &attach (usually iox_$user_input */ 1 97 3 target_ptr ptr, /* -> IOCB &attached to (created by exec_com command) */ 1 98 3 save_ptr ptr, /* -> IOCB used to save previous victim_ptr -> IOCB */ 1 99 3 switches, 1 100 4 trim_whitespace_sw bit (1) unaligned, /* OFF for &attach &trim off, ON by default */ 1 101 4 noabort bit (1) unaligned, /* ON if continue after severity 1 error */ 1 102 4 pad bit (34) unaligned, 1 103 /* */ 1 104 2 allocated_chars_ptr ptr, /* -> allocated buffer for freeing */ 1 105 2 chars_ptr ptr, /* -> characters in buffer waiting to be returned */ 1 106 2 else_clause_ptr ptr, /* -> characters in deferred else clause */ 1 107 2 allocated_chars_len fixed bin (21), /* total length of allocated buffer */ 1 108 2 chars_len fixed bin (21), /* characters left in buffer to be returned */ 1 109 2 else_clause_len fixed bin (21), /* length of deferred else clause */ 1 110 /* */ 1 111 2 absentee bit (1), /* 1 indicates logout on &quit */ 1 112 2 quit bit (1), /* 1 indicates orderly exit, quit or return */ 1 113 /* */ 1 114 2 active bit (1), /* 1 indicates get_line is busy, for recursion check */ 1 115 2 eof bit (1), /* 1 indicates &quit found or no more input */ 1 116 2 last_input_line_sw bit (1), /* previous line returned was an input line */ 1 117 2 label_search_sw bit (1), /* ON when searching for target of &goto */ 1 118 2 nest_level fixed bin, /* V1: depth of &if-&then-&else nesting */ 1 119 2 expected_nest_level fixed bin, /* V1: depth that must be reached to resume execution */ 1 120 /* */ 1 121 2 goto_statement_pos fixed bin (21), /* position of last &goto stmt, for error msgs */ 1 122 2 goto_statement_len fixed bin (21), /* length of the &goto stmt */ 1 123 1 124 2 if_info aligned, /* &if-&then-&else nesting info */ 1 125 3 if_sw bit (1), /* ON if inside an &if-&then-&else construct */ 1 126 3 true_sw bit (1), /* ON after "&if true" */ 1 127 3 got_then_sw bit (1), /* ON after the &then has been seen */ 1 128 3 got_else_sw bit (1), /* ON after the &else has been seen */ 1 129 3 clause_type fixed bin, /* previous &then or &else */ 1 130 3 skip_sw bit (1), /* ON if skipping a &then or &else clause */ 1 131 3 skip_block_level fixed bin, /* how many levels of &do we are inside while skipping */ 1 132 3 prev_if_ptr ptr, /* ptr to if_info (saved) of &if we are nested inside */ 1 133 3 this_action fixed bin, /* copy of expand_data.this_statement.action */ 1 134 3 next_action fixed bin, /* copy of expand_data.next_statement.action */ 1 135 1 136 2 on_info aligned, /* info pertaining to &on units in the ec */ 1 137 3 cleanup_handler_ptr ptr, /* -> node for cleanup handler if any */ 1 138 3 first_handler_ptr ptr, /* -> top of chain of nodes for other handlers */ 1 139 3 switches aligned, 1 140 4 was_attached_sw bit (1) unal, /* 1 indicates parent ec was &attach'ed */ 1 141 4 in_handler_sw bit (1) unal, /* 1 indicates we are now executing some handler text */ 1 142 4 exit_sw bit (1) unal, /* 1 indicates ready to exit the handler via &exit or &goto */ 1 143 4 goto_sw bit (1) unal, /* 1 means this exit is accomplished by a nonlocal &goto */ 1 144 4 continue_to_signal_sw bit (1) unal, /* 1 means &continue_to_signal was executed */ 1 145 4 pad bit (31) unal, 1 146 3 handler_node_ptr ptr, /* -> parent's handler_node for this condition */ 1 147 3 parent_abs_data_ptr ptr, /* -> abs_data structure of parent ec */ 1 148 3 condition_info aligned, /* selected condition info if in_handler_sw is ON */ 1 149 4 condition_name char (32), /* name of condition signalled */ 1 150 4 mc_ptr ptr, /* machine conditions ptr for signal_ */ 1 151 4 info_ptr ptr, /* ptr to specific condition info, for signal_ */ 1 152 4 wc_ptr ptr, /* machine conditions for lower ring fault, for signal_ */ 1 153 3 goto_label_ptr ptr, /* -> &goto label if goto_sw is on */ 1 154 3 goto_label_len fixed bin (21), /* length of the &goto label */ 1 155 3 listener_pl1_label label variable, /* for nonlocal goto to parent ec's listener's stack frame */ 1 156 3 get_line_pl1_label label variable, /* for nonlocal goto to parent ec's get_line's stack frame */ 1 157 /* */ 1 158 2 saved_state_ptr ptr, /* -> top of parser stack */ 1 159 2 current_lex_block_ptr ptr, /* -> lex_block for current block position */ 1 160 2 current_proc_block_ptr ptr, /* -> proc block for current procedure */ 1 161 2 last_block_ptr ptr, /* -> last lex or proc block that has been allocated */ 1 162 2 current_loop_ptr ptr, /* -> loop_block for current active loop */ 1 163 2 last_loop_ptr ptr, /* -> last loop block that has been allocated */ 1 164 /* */ 1 165 2 labels_ptr ptr, /* hash table ptr for label hash table */ 1 166 2 first_xlabel_ptr ptr, /* first expandable label */ 1 167 2 last_xlabel_ptr ptr, /* last expandable label */ 1 168 2 variables_ptr ptr, /* hash table ptr for variable hash table */ 1 169 /* */ 1 170 2 timed_input bit (1), /* 1 indicates input requests may be delayed */ 1 171 2 low_sleep_time fixed bin (35), /* low sleep time for timed input */ 1 172 2 sleep_time_range fixed bin (35), /* high sleep time for timed input */ 1 173 2 seed fixed bin (35), /* seed for timed input random numbers */ 1 174 /* */ 1 175 2 work_area area (800); /* extensible area for args, etc. */ 1 176 1 177 declare abs_data_version_1 fixed bin static options (constant) initial (1), 1 178 Work_area_size fixed bin static options (constant) initial (800); 1 179 1 180 dcl (UNEXPANDED init (1), EXPANDED init (2), ALL init (3), BOTH init (4)) 1 181 fixed bin int static options (constant); 1 182 1 183 /* END OF: abs_io_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 2192 2193 2 1 /* BEGIN INCLUDE FILE -- abs_io_expand.incl.pl1 -- 07/07/80 S. Herbst */ 2 2 2 3 /* Added label_search_values 10/06/82 S. Herbst */ 2 4 /* Added next_begin_pos 04/29/83 S. Herbst */ 2 5 /* Added trace_lines.by_control_arg 03/20/84 S. Herbst */ 2 6 2 7 2 8 dcl expand_data_ptr ptr; 2 9 /* In comments, (Input), (Output) and (I/O) refer 2 10* to how abs_io_expand_ sees the item. */ 2 11 dcl 1 expand_data aligned based (expand_data_ptr), 2 12 2 version fixed bin, /* = 1 */ 2 13 2 abs_data_ptr ptr, /* ptr back to abs_data for this invocation of ec */ 2 14 2 expand_data_ptr ptr, /* ptr to data maintained by abs_io_expand_ */ 2 15 2 next_expand_data_ptr ptr, /* ptr to this structure for next &proc or &fcn */ 2 16 2 last_expand_data_ptr ptr, /* ptr to this structure for outer proc or fcn */ 2 17 2 area_ptr ptr, /* ptr to area in which to allocate args */ 2 18 2 19 2 input_pos fixed bin (21), /* current character position in input file (I/O) */ 2 20 2 caller_buffer_info, 2 21 3 caller_buffer_ptr ptr, /* caller's buffer for returned line (Input) */ 2 22 3 caller_buffer_len fixed bin (21), /* character size of buffer (Input) */ 2 23 3 caller_actual_len fixed bin (21), /* number of chars returned (Output) */ 2 24 2 allocated_buffer_info, 2 25 3 allocated_ptr ptr, /* ptr to expand_'s allocated rest-of-line (I/O) */ 2 26 3 allocated_len fixed bin (21), /* length of rest-of-line (I/O) */ 2 27 3 allocated_buffer_len fixed bin (21), /* original allocated size (Output) */ 2 28 2 29 2 trace_lines, /* tracing info for command or input lines */ 2 30 3 by_control_arg bit (1) unaligned, /* ON if trace mode was specified by ec control arg */ 2 31 3 on bit (1) unaligned, /* ON to trace at all */ 2 32 3 expand fixed bin (3) unaligned, /* 1=unexpanded, 2=expanded, 3=all, 4=both */ 2 33 3 pad1 bit (66) unaligned, /* pad to double word */ 2 34 3 iocb ptr, /* IOCB to put trace on */ 2 35 3 prefix char (32) varying, /* prefix for &trace tracing, eg. "COMMAND: " */ 2 36 3 pad2 bit (36), 2 37 2 38 2 predicate_values, 2 39 3 is_absin bit (1), /* &is_absin, ON if absentee (Input) */ 2 40 3 is_af bit (1), /* &is_af, ON if ec active function (Input) */ 2 41 3 is_input bit (1), /* &is_input_line, ON if input line */ 2 42 3 pad bit (33), 2 43 2 first_loop_ptr ptr, /* ptr to first iteration loop activation (I/O) */ 2 44 2 first_block_ptr ptr, /* ptr to first &do block (I/O) */ 2 45 2 46 2 label_search_values, 2 47 3 searching_for char (200), /* label being searched for ($skip) */ 2 48 3 (next_begin_pos, /* position of next &begin */ 2 49 next_do_pos, /* position of next &do */ 2 50 next_end_pos, /* position of next &end */ 2 51 next_label_pos, /* position of next &label */ 2 52 next_quote_pos, /* position of next &" */ 2 53 next_comment_pos) fixed bin (21), /* position of next &- */ 2 54 2 55 2 expander_output, /* returned by abs_io_expand_ after parsing */ 2 56 3 this_statement, 2 57 4 pos fixed bin (21), /* beginning of current (parsed) statement */ 2 58 4 len fixed bin (21), /* length of entire statement */ 2 59 4 keyword_len fixed bin (21), /* length of just the keyword portion */ 2 60 4 action fixed bin, /* semantic number of this keyword */ 2 61 3 semant_info, 2 62 4 semantics fixed bin, /* additional information for the code that implements */ 2 63 4 modifier fixed bin, /* and more info for certain ones */ 2 64 4 flag fixed bin, /* what can I say? */ 2 65 3 arg_info, 2 66 4 arg_ptr ptr, /* ptr to single arg if keyword takes only one (Output) */ 2 67 4 arg_len fixed bin (21), /* length of single arg (Output) */ 2 68 4 parsed_args_ptr ptr, /* points to parsed_args structure if >1 args (Output) */ 2 69 3 next_statement like expand_data.this_statement, /* next statement info (look-ahead) (Output) */ 2 70 3 expanded_sw bit (1), /* ON if expand_ had to expand label stmt (Output) */ 2 71 3 error_msg char (168) aligned; /* diagnosis if abs_io_expand returns code ^= 0 */ 2 72 2 73 2 74 dcl parsed_args_count fixed bin; 2 75 dcl parsed_args_ptr ptr; 2 76 2 77 dcl 1 parsed_args aligned based (parsed_args_ptr), 2 78 2 count fixed bin, /* number of arguments */ 2 79 2 array (parsed_args_count refer (parsed_args.count)), 2 80 3 ptr ptr unaligned, /* ptr to the argument */ 2 81 3 len fixed bin (21), /* length of the argument */ 2 82 3 quote_count fixed bin, /* number of internal quote chars (for allocating &r) */ 2 83 3 flags bit (36) aligned; /* reserved for specific types of args */ 2 84 2 85 dcl expand_data_version_2 fixed bin int static options (constant) init (2); 2 86 2 87 /* END INCLUDE FILE abs_io_expand.incl.pl1 */ 2194 2195 3 1 /* START OF: abs_io_handler_node.incl.pl1 */ 3 2 3 3 /* Contains info on one exec_com &on unit */ 3 4 /* Initially coded 01/06/83 S. Herbst */ 3 5 3 6 dcl handler_node_ptr ptr; 3 7 3 8 dcl 1 handler_node aligned based (handler_node_ptr), 3 9 2 ptr ptr, /* -> text of &on unit */ 3 10 2 len fixed bin (21), /* length of &on unit text */ 3 11 2 condition_name char (32), 3 12 2 next_ptr ptr; /* forward thread */ 3 13 3 14 /* END OF: abs_io_handler_node.incl.pl1 */ 2196 2197 4 1 /* START OF: ec_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 4 2 4 3 declare ec_data_ptr ptr; 4 4 4 5 declare 1 ec_data aligned based (ec_data_ptr), 4 6 2 version_id char (4), /* " ec " */ 4 7 2 version fixed bin, /* 1 */ 4 8 2 active_function bit (1), /* This affects &is_af and &return */ 4 9 2 return_len fixed bin (21), /* maximum length and pointer to varying character string */ 4 10 2 return_ptr ptr, /* for active function return value */ 4 11 2 execute_line entry (ptr, fixed bin (21), fixed bin (35)), 4 12 2 eval_string entry (ptr, char (*), fixed bin, char (*) var, fixed bin (35)), 4 13 2 set_ready_mode entry (1 aligned, 2 bit (1) unal, 2 bit (35) unal), 4 14 2 error entry () options (variable), 4 15 2 switch_ptr ptr, /* switch affected by &attach */ 4 16 2 id_string char (19), /* name string for &attach save switch should contain this */ 4 17 2 input_line bit (1), /* this makes the command_line/input_line distinction */ 4 18 2 call_ready_proc bit (1), /* this implements the &ready_proc keyword */ 4 19 2 who_am_i char (72) varying; /* for error messages. It's 72 chars for subsystem requests */ 4 20 4 21 declare ec_data_version_id char (4) aligned static options (constant) initial (" ec "), 4 22 ec_data_version_1 fixed bin static options (constant) initial (1); 4 23 4 24 /* END OF: ec_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 2198 2199 5 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 5 2 /* Modified 11/29/82 by S. Krupp to add new entries and to change 5 3* version number to IOX2. */ 5 4 /* format: style2 */ 5 5 5 6 dcl 1 iocb aligned based, /* I/O control block. */ 5 7 2 version character (4) aligned, /* IOX2 */ 5 8 2 name char (32), /* I/O name of this block. */ 5 9 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 5 10 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 5 11 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 5 12 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 5 13 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 5 14 2 reserved bit (72), /* Reserved for future use. */ 5 15 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 5 16 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 5 17 /* open(p,mode,not_used,s) */ 5 18 2 close entry (ptr, fixed (35)),/* close(p,s) */ 5 19 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 5 20 /* get_line(p,bufptr,buflen,actlen,s) */ 5 21 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 5 22 /* get_chars(p,bufptr,buflen,actlen,s) */ 5 23 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 5 24 /* put_chars(p,bufptr,buflen,s) */ 5 25 2 modes entry (ptr, char (*), char (*), fixed (35)), 5 26 /* modes(p,newmode,oldmode,s) */ 5 27 2 position entry (ptr, fixed, fixed (21), fixed (35)), 5 28 /* position(p,u1,u2,s) */ 5 29 2 control entry (ptr, char (*), ptr, fixed (35)), 5 30 /* control(p,order,infptr,s) */ 5 31 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 5 32 /* read_record(p,bufptr,buflen,actlen,s) */ 5 33 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 5 34 /* write_record(p,bufptr,buflen,s) */ 5 35 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 5 36 /* rewrite_record(p,bufptr,buflen,s) */ 5 37 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 5 38 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 5 39 /* seek_key(p,key,len,s) */ 5 40 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 5 41 /* read_key(p,key,len,s) */ 5 42 2 read_length entry (ptr, fixed (21), fixed (35)), 5 43 /* read_length(p,len,s) */ 5 44 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 5 45 /* open_file(p,mode,desc,not_used,s) */ 5 46 2 close_file entry (ptr, char (*), fixed bin (35)), 5 47 /* close_file(p,desc,s) */ 5 48 2 detach entry (ptr, char (*), fixed bin (35)); 5 49 /* detach(p,desc,s) */ 5 50 5 51 declare iox_$iocb_version_sentinel 5 52 character (4) aligned external static; 5 53 5 54 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 2200 2201 2202 2203 2204 end abs_io_expand_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/17/90 1510.3 abs_io_expand_.pl1 >spec>install>1009>abs_io_expand_.pl1 2192 1 08/11/87 2107.9 abs_io_data.incl.pl1 >ldd>include>abs_io_data.incl.pl1 2194 2 10/23/84 0948.6 abs_io_expand.incl.pl1 >ldd>include>abs_io_expand.incl.pl1 2196 3 08/01/83 1207.8 abs_io_handler_node.incl.pl1 >ldd>include>abs_io_handler_node.incl.pl1 2198 4 04/13/82 1720.2 ec_data.incl.pl1 >ldd>include>ec_data.incl.pl1 2200 5 05/20/83 1946.4 iocb.incl.pl1 >ldd>include>iocb.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. AF_REF constant fixed bin(17,0) initial dcl 186 ref 661 716 742 862 1032 1076 2133 ALL constant fixed bin(17,0) initial dcl 1-180 ref 811 825 1404 ALPHA 001553 constant char(27) initial packed unaligned dcl 189 ref 569 A_code parameter fixed bin(35,0) dcl 141 set ref 42 338 342* 355 361 381* 410* 430* 1365* 1494* 1543* 2160 2172* 2174* 2182 A_key_name parameter char(32) packed unaligned dcl 1957 ref 1953 1959 A_label_val_len parameter fixed bin(21,0) dcl 138 set ref 338 1083* A_label_val_ptr parameter pointer dcl 137 set ref 338 1082* A_len parameter fixed bin(21,0) dcl 1771 in procedure "get_next_stmt" ref 1767 1779 1784 1793 1798 1799 1802 1807 1808 1809 A_len parameter fixed bin(21,0) dcl 136 in procedure "abs_io_expand_" ref 338 347 A_pos parameter fixed bin(21,0) dcl 136 in procedure "abs_io_expand_" ref 338 346 A_pos parameter fixed bin(21,0) dcl 1771 in procedure "get_next_stmt" ref 1767 1779 1779 1784 1792 A_ptr parameter pointer dcl 1770 ref 1767 1779 1784 1793 1798 1799 1802 1807 1808 1809 A_stmt parameter structure level 1 dcl 1772 set ref 1767 A_val parameter char packed unaligned dcl 140 set ref 2160 2174* 2182 A_var parameter char packed unaligned dcl 140 set ref 2160 2165 2165 2172* 2174* 2182 A_vars_ptr parameter pointer dcl 139 set ref 2160 2170 2170* 2172* 2174* 2182 A_xd parameter structure level 1 dcl 143 set ref 42 338 355 361 BAR_BAR_BK_TYPE constant fixed bin(17,0) initial dcl 185 ref 883 1415 1548 2133 BAR_BK_TYPE constant fixed bin(17,0) initial dcl 185 ref 875 1416 2135 BK_TYPE constant fixed bin(17,0) initial dcl 185 ref 861 BOTH constant fixed bin(17,0) initial dcl 1-180 ref 586 647 BS constant char(1) initial packed unaligned dcl 193 ref 1704 1704 CONTROL 021545 constant bit(1) initial packed unaligned dcl 182 ref 578 2050 CR constant char(1) initial packed unaligned dcl 198 ref 1708 1708 DEFAULT_ARG 021543 constant char(1) initial packed unaligned dcl 180 ref 970 1392 1411 DELIMS 001552 constant char(4) initial packed unaligned dcl 190 ref 899 950 DIGITS 001562 constant char(10) initial packed unaligned dcl 188 ref 891 899 914 981 1483 1639 2165 DONT_EXPAND 000110 constant char(32) initial array dcl 258 set ref 370 370 1928 DONT_EXPAND_LEN 000012 internal static fixed bin(17,0) dcl 280 set ref 370* 1928 DONT_EXPAND_STRING based char dcl 257 ref 1928 ELSE_ACTION 000016 internal static fixed bin(17,0) dcl 281 set ref 375* 598 606 1030 1093 FF constant char(1) initial packed unaligned dcl 197 ref 378 1712 1712 1728 1728 HT constant char(1) initial packed unaligned dcl 192 ref 378 IF_ACTION 000017 internal static fixed bin(17,0) dcl 281 set ref 373* 1115 1224 MAX_CHARS 000060 constant fixed bin(21,0) initial dcl 279 ref 424 428 1760 MAX_KEY constant fixed bin(17,0) initial dcl 186 ref 1387 NAMES 000376 constant char(32) initial array dcl 234 set ref 369 369 1910 1913 1913 NAMES_LEN 000013 internal static fixed bin(17,0) dcl 280 set ref 369* 1910 NAMES_STRING based char dcl 233 ref 1910 NAME_SWITCHES 000370 constant bit(5) initial array packed unaligned dcl 244 ref 1915 NL 021543 constant char(1) initial packed unaligned dcl 194 ref 399 451 465 479 489 638 639 677 784 899 999 1004 1157 1159 1720 1720 1724 1724 1779 1784 1799 1807 NONCONTROL 001646 constant bit(1) initial packed unaligned dcl 182 set ref 472* 635 2100* 2104* NO_ARGS_SW 0(01) based bit(1) array level 2 packed packed unaligned dcl 227 ref 596 PARAMS 000064 constant char(8) initial array dcl 266 set ref 371 371 1942 1945 1945 PARAMS_LEN 000014 internal static fixed bin(17,0) dcl 280 set ref 371* 1942 PARAMS_STRING based char dcl 265 ref 1942 PARAM_KEYWORD 000000 constant structure level 1 unaligned dcl 117 ref 893 1484 1946 PARAM_REF constant fixed bin(17,0) initial dcl 186 ref 1395 PARAM_SWITCHES 000062 constant bit(4) initial array packed unaligned dcl 270 ref 1948 PARSE_ARGS_SW based bit(1) array level 2 packed packed unaligned dcl 227 ref 613 P_arg parameter varying char dcl 1374 ref 1371 1392 1394 1395 1400 1411 1411 1418 1420 1442 1482 1483 1483 1490 1498 1499 1520 1523 1639 1639 1641 1659 P_buffer parameter varying char dcl 2111 set ref 2108 2115* 2121* 2121 2123* 2123 2128* 2128 2138* 2138 2140* 2140 P_control_sw parameter bit(1) packed unaligned dcl 2045 ref 2041 2050 P_ipos parameter fixed bin(21,0) dcl 1827 set ref 1822 1835 1857* P_keyword parameter structure level 1 unaligned dcl 1938 in procedure "known_param" set ref 1934 1946* P_keyword parameter structure level 1 unaligned dcl 1907 in procedure "known" set ref 1903 P_level parameter fixed bin(17,0) dcl 1308 ref 1304 1310 1312 1312 1313 1313 1313 1313 1315 1318 P_name parameter varying char(32) dcl 1939 in procedure "known_param" ref 1934 1947 P_name parameter varying char(32) dcl 1925 in procedure "known_dont_expand" ref 1921 1928 P_nest_level parameter fixed bin(17,0) dcl 2063 in procedure "push_state" set ref 2059 2066 2067 2068* 2068 P_nest_level parameter fixed bin(17,0) dcl 2032 in procedure "pop_state" set ref 2028 2035* 2035 2036 2037 P_pos parameter fixed bin(21,0) dcl 1755 set ref 1747 1757* 1760* 1761* 1762 P_ptr_len parameter structure level 1 unaligned dcl 1248 in procedure "add_quoted_output" set ref 1245 1267* 1277* 1281* 1288* 1296* P_ptr_len parameter structure level 1 unaligned dcl 1219 in procedure "add_output" set ref 1215 P_q_sw parameter bit(1) packed unaligned dcl 1829 ref 1822 1845 1853 P_requote_sw parameter bit(1) packed unaligned dcl 1250 ref 1245 1265 1292 P_saved_pos parameter fixed bin(21,0) dcl 1755 set ref 1747 1757 1757 1762* P_state parameter structure level 1 unaligned dcl 2033 in procedure "pop_state" set ref 2028 2036* P_state parameter structure level 1 unaligned dcl 1968 in procedure "parse_value" set ref 1964 1986* 1993* 1997* P_state parameter structure level 1 unaligned dcl 1373 in procedure "expand" set ref 1371 1408* 1472* 1474* 1548* 1554* P_state parameter structure level 1 unaligned dcl 2110 in procedure "trace_expanded" ref 2108 P_state parameter structure level 1 unaligned dcl 1327 in procedure "compute_quote_factor" set ref 1323 P_state parameter structure level 1 unaligned dcl 1197 in procedure "add_arg" set ref 1193 P_state parameter structure level 1 unaligned dcl 1828 in procedure "get_quoted_string" set ref 1822 P_state parameter structure level 1 unaligned dcl 2064 in procedure "push_state" ref 2059 2066 P_str parameter char packed unaligned dcl 2098 in procedure "trace_comment" set ref 2096 2100 2104* P_str parameter char packed unaligned dcl 1249 in procedure "add_quoted_output" ref 1245 1273 1277 1277 1283 1287 1288 1288 P_str parameter char packed unaligned dcl 1826 in procedure "get_quoted_string" ref 1822 1839 1842 1842 1845 1847 1853 1853 1855 1855 P_str parameter char packed unaligned dcl 1220 in procedure "add_output" ref 1215 1226 1241 P_str parameter char packed unaligned dcl 1754 in procedure "find_next_occurrence" ref 1747 1759 P_str parameter char packed unaligned dcl 2043 in procedure "print_trace" set ref 2041 2055* P_str parameter char packed unaligned dcl 1969 in procedure "parse_value" set ref 1964 1976 1980 1980 1982 1982 1986* 1990 1993* 2000 2008 2008 2011* P_str parameter char packed unaligned dcl 2146 in procedure "trace_unexpanded" set ref 2144 2149 2149 2149 2153* P_str parameter char packed unaligned dcl 2018 in procedure "add" set ref 2014 2020* 2022* P_string parameter char packed unaligned dcl 1363 ref 1360 1366 P_trace parameter structure level 1 dcl 2044 in procedure "print_trace" set ref 2041 P_trace parameter structure level 1 dcl 2147 in procedure "trace_unexpanded" set ref 2144 QDOUBLE 001646 constant bit(1) initial packed unaligned dcl 183 set ref 1584* 1588* 1592* 1600* REQUOTE 021545 constant bit(1) initial packed unaligned dcl 183 ref 1265 1292 SET_ACTION 000020 internal static fixed bin(17,0) dcl 281 set ref 376* 642 2121 SP constant char(1) initial packed unaligned dcl 191 ref 378 STMTS 001062 constant char(32) initial array dcl 206 set ref 368 368 944 1959 1959 1959 2050 STMTS_LEN 000015 internal static fixed bin(17,0) dcl 280 set ref 368* 944 1959 STMTS_STRING based char dcl 205 ref 944 1959 STMT_SWITCHES 001056 constant bit(3) initial array packed unaligned dcl 216 set ref 596 602 613 STMT_SW_OVERLAY based structure array level 1 packed packed unaligned dcl 227 TF 001565 constant varying char(8) initial array dcl 179 ref 1620 1628 1634 1659 1666 1695 THEN_ACTION 000021 internal static fixed bin(17,0) dcl 281 set ref 374* 598 606 1029 1093 THEN_ELSE_ALLOWED_SW 0(02) based bit(1) array level 2 packed packed unaligned dcl 227 ref 602 UNDEFINED 021544 constant fixed bin(17,0) initial dcl 184 ref 463 1176 1786 UNEXPANDED constant fixed bin(17,0) initial dcl 1-180 ref 586 647 1093 VAR_REF constant fixed bin(17,0) initial dcl 186 ref 850 VT constant char(1) initial packed unaligned dcl 196 ref 378 1741 1741 WHITE 000010 internal static char(4) packed unaligned dcl 277 set ref 378* 402 480 490 510 553 582 638 678 780 998 1026 1161 1168 1784 1802 1807 1976 1997 2000 2121 abs_data based structure level 1 dcl 1-23 abs_data_ptr 2 parameter pointer level 2 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" ref 343 386 abs_data_ptr 006626 automatic pointer dcl 1-21 in procedure "abs_io_expand_" set ref 343* 344 345 386* 387 393 394 428 434 435 463 466 472 472 475 508 539 543 556 558 573 575 579 596 598 598 602 605 606 606 606 606 613 629 642 780 787 795 839 839 842 959 1014 1029 1030 1093 1093 1115 1123 1157 1176 1176 1179 1179 1181 1187 1188 1188 1224 1445 1445 1456 1457 1461 1462 1463 1488 1488 1490 1563 1574 1574 1574 1581 1588 1588 1588 1592 1592 1592 1604 1608 1634 1643 1644 1646 1647 1656 1656 1659 1671 1695 1695 1778 1781 1782 1894 1896 1896 2050 2100 2100 2104 2121 action 165 parameter fixed bin(17,0) level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 1181 action 3 parameter fixed bin(17,0) level 2 in structure "A_stmt" dcl 1772 in procedure "get_next_stmt" set ref 1786* 1794* 1811* 1813 addcharno builtin function dcl 329 ref 346 395 405 1207 2069 added_arg_inside_quotes_sw 006543 automatic bit(1) packed unaligned dcl 297 set ref 384* 690* 698 700* 1211* addr builtin function dcl 329 ref 389 596 602 613 944 1514 1896 1896 1910 1928 1942 1959 af_type 13 000126 automatic fixed bin(17,0) array level 3 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 2133 2135 af_type 13 parameter fixed bin(17,0) level 3 in structure "P_state" dcl 1373 in procedure "expand" set ref 1415 1416 1520* 1523* 1548 af_type 13 000100 automatic fixed bin(17,0) level 3 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 861* 875* 883* alloc_err_sw 000566 automatic bit(1) packed unaligned dcl 1382 set ref 1530* 1531* 1532* 1533* 1541 alloc_info 004356 automatic structure level 1 dcl 107 set ref 2037* 2067 alloc_len 4 004356 automatic fixed bin(21,0) level 2 dcl 107 set ref 1127 1145 1147 1147 1229* 1231 1231 1233 1237 alloc_ptr 2 004356 automatic pointer level 2 dcl 107 set ref 1126 1145 1147 1231* 1233 1236 alloc_stack 004364 automatic structure array level 1 dcl 112 set ref 2037 2067* alloc_string based char packed unaligned dcl 160 set ref 1145 1147 1231 1233* allocated_buffer based char packed unaligned dcl 161 set ref 1140 1142* allocated_buffer_info 22 parameter structure level 2 dcl 143 allocated_buffer_len 25 parameter fixed bin(21,0) level 3 dcl 143 set ref 1127* 1134* 1138* 1140 1140 1142 allocated_len 24 parameter fixed bin(21,0) level 3 dcl 143 set ref 1128* 1134* 1138* allocated_ptr 22 parameter pointer level 3 dcl 143 set ref 1126* 1133* 1140* 1142 allocated_sw 004356 automatic bit(1) level 2 dcl 107 set ref 525* 1123 1235* allow_arg_sw 14(01) 000100 automatic bit(1) level 4 packed packed unaligned dcl 77 set ref 969 area 000000 stack reference condition dcl 332 ref 1531 1537 area_ptr 12 parameter pointer level 2 dcl 143 set ref 617 617* 619 1140 1147 1184 1231 1490* 1508 1527 1535 1556 1876 1882 2082 2085 2085* 2087 arg_count 52 based fixed bin(17,0) level 3 dcl 1-23 set ref 1445 1457 1461 1643 1671* arg_index 006572 automatic fixed bin(17,0) dcl 303 set ref 1459* 1461 1464 1468 1468 1468 1472 1472 1472 1474* arg_info 154 parameter structure level 3 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" arg_info 40 based structure level 2 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" arg_len 156 parameter fixed bin(21,0) level 4 dcl 143 set ref 1120* arg_limit 006573 automatic fixed bin(17,0) dcl 303 set ref 1453* 1454* 1459 1474 arg_max 006574 automatic fixed bin(17,0) dcl 303 set ref 1445* 1447 1450 1453 arg_ptr 154 parameter pointer level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 625* 632* 1119* arg_ptr 50 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" ref 1456 arg_start 006575 automatic fixed bin(17,0) dcl 303 set ref 1447* 1449* 1450 1454 1459 array 1 based structure array level 2 dcl 2-77 attach 252 based structure level 2 dcl 1-23 auto_saved_arg 005536 automatic varying char(1000) dcl 288 set ref 389 390 bad_area_format 000000 stack reference condition dcl 332 ref 1532 1538 bad_area_initialization 000000 stack reference condition dcl 332 ref 1533 1539 based_area based area(1024) dcl 1377 ref 1527 1535 1556 bracket_sw 12(01) 000100 automatic bit(1) level 3 in structure "state" packed packed unaligned dcl 77 in procedure "abs_io_expand_" set ref 864* bracket_sw 12(01) parameter bit(1) level 3 in structure "P_state" packed packed unaligned dcl 1373 in procedure "expand" set ref 1414 caller_actual_len 21 parameter fixed bin(21,0) level 3 dcl 143 set ref 471* 513* 1125* 1132* 1137* 1138 1142 1145 1145 1150* caller_buffer based char packed unaligned dcl 162 set ref 514* 1145* caller_buffer_info 16 parameter structure level 2 dcl 143 caller_buffer_len 20 parameter fixed bin(21,0) level 3 dcl 143 ref 351 514 523 1131 1137 1145 caller_buffer_ptr 16 parameter pointer level 3 dcl 143 ref 350 514 522 1145 char2 006537 automatic char(2) packed unaligned dcl 294 set ref 482* 483 487 492* 494 500 char3 006536 automatic char(3) packed unaligned dcl 293 set ref 415* 416 416 416 416 438* 439 450 char5 006534 automatic char(5) packed unaligned dcl 292 set ref 1025* 1026 1026 1029 cleanup_handler_ptr 322 based pointer level 3 dcl 1-23 ref 1604 code 000102 automatic fixed bin(35,0) dcl 1892 in procedure "init_variables" set ref 1896* 1897 code 006624 automatic fixed bin(35,0) dcl 307 in procedure "abs_io_expand_" set ref 1394* 1395 1490* 1492 1492 1494 1520* 1523* 1524 1526 1543 1581* 1641* 1642 1659* 1662 codeptr builtin function dcl 329 ref 1516 command_arg based char packed unaligned dcl 169 set ref 1468* 1472* command_args based structure array level 1 unaligned dcl 165 command_args_count 006576 automatic fixed bin(17,0) dcl 303 set ref 1457* 1463* 1647* command_args_ptr 006564 automatic pointer dcl 301 set ref 1456* 1462* 1464 1468 1468 1468 1472 1472 1472 1646* 1648 command_line 162 based structure level 2 dcl 1-23 set ref 472* comment_line 200 based structure level 2 dcl 1-23 set ref 2100* 2104* condition_info 334 based structure level 3 dcl 1-23 condition_name 334 based char(32) level 4 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" ref 1574 1574 condition_name 3 based char(32) level 2 in structure "handler_node" dcl 3-8 in procedure "abs_io_expand_" ref 1610 1610 control_line 216 based structure level 2 dcl 1-23 ref 579 control_line_sw 006544 automatic bit(1) packed unaligned dcl 297 set ref 578* 635* 817* 830* 1102* 1105* 1424* control_word 000100 automatic varying char(32) dcl 2046 set ref 2050* 2051* 2055 control_word_sw 14 000100 automatic bit(1) level 4 packed packed unaligned dcl 77 set ref 954 copy builtin function dcl 329 ref 1267 1267 1281 1281 1296 1296 1700 1700 1704 1704 1708 1708 1712 1712 1716 1716 1720 1720 1724 1724 1728 1728 1733 1733 1737 1737 1741 1741 count based fixed bin(17,0) level 2 dcl 2-77 set ref 619* 621* 1097 1200 1202* 1202 1203 1204 1876* 1878* 1878 1879 1882 2118 cu_$evaluate_active_string 000034 constant entry external dcl 316 ref 1523 cv_dec_check_ 000036 constant entry external dcl 317 ref 1394 1641 default_arg_count 56 based fixed bin(17,0) level 3 dcl 1-23 ref 1445 1463 1644 1647 default_arg_ptr 54 based pointer level 3 dcl 1-23 ref 1462 1646 delete_sw 006545 automatic bit(1) packed unaligned dcl 297 set ref 2164* 2172 2187* digit_arg_sw 14(04) 000100 automatic bit(1) level 4 packed packed unaligned dcl 77 set ref 981 divide builtin function dcl 329 ref 1294 1347 1913 1945 1959 ec_data based structure level 1 dcl 4-5 ec_data_ptr 006634 automatic pointer dcl 4-3 in procedure "abs_io_expand_" set ref 387* 1516 1516 1520 1596 1598 ec_data_ptr 26 based pointer level 2 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" ref 387 ec_name based char packed unaligned dcl 171 set ref 1588* ec_name_len 46 based fixed bin(21,0) level 3 dcl 1-23 ref 1588 1588 ec_name_ptr 44 based pointer level 3 dcl 1-23 ref 1588 ec_path based char packed unaligned dcl 172 set ref 1592* ec_path_len 42 based fixed bin(21,0) level 3 dcl 1-23 ref 1592 1592 ec_path_ptr 40 based pointer level 3 dcl 1-23 ref 1592 eof_sw 006546 automatic bit(1) packed unaligned dcl 297 set ref 653* 655 1019* error_msg 167 parameter char(168) level 3 dcl 143 set ref 1366* 1495* 1544* error_table_$badsyntax 000022 external static fixed bin(35,0) dcl 309 ref 1365 error_table_$command_line_overflow 000024 external static fixed bin(35,0) dcl 310 ref 1526 error_table_$end_of_info 000026 external static fixed bin(35,0) dcl 311 ref 410 430 error_table_$oldnamerr 000030 external static fixed bin(35,0) dcl 312 ref 1492 eval_string 12 based entry variable level 2 dcl 4-5 ref 1516 1520 expand 0(02) 005520 automatic fixed bin(3,0) level 2 packed packed unaligned dcl 286 set ref 586 586 647 647 811 825 1093 1404 expand_data based structure level 1 dcl 2-11 expand_label_sw 006547 automatic bit(1) packed unaligned dcl 297 set ref 335* 340* 358* 364* 1081 1152 expanded_sw 166 parameter bit(1) level 3 dcl 143 set ref 650* 1429* 1479* 1512* expander_output 144 based structure level 2 in structure "expand_data" dcl 2-11 in procedure "abs_io_expand_" expander_output 144 parameter structure level 2 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" f_sw 14(05) parameter bit(1) level 4 packed packed unaligned dcl 1373 set ref 1395 1453 first_handler_ptr 324 based pointer level 3 dcl 1-23 ref 1608 fixed builtin function dcl 329 ref 1620 1628 1634 1659 1666 1695 found_sw 006550 automatic bit(1) packed unaligned dcl 297 set ref 925* 927 941* get_system_free_area_ 000040 constant entry external dcl 318 ref 617 2085 got_next_stmt 006551 automatic bit(1) packed unaligned dcl 298 set ref 335* 341* 358* 1187 1777* goto_statement_len 304 based fixed bin(21,0) level 2 dcl 1-23 ref 435 goto_statement_pos 303 based fixed bin(21,0) level 2 dcl 1-23 ref 434 handler_node based structure level 1 dcl 3-8 hbound builtin function dcl 329 ref 368 369 370 371 425 hcs_$fs_get_path_name 000042 constant entry external dcl 319 ref 1581 i 000575 automatic fixed bin(17,0) dcl 1385 in procedure "expand" set ref 1563* 1567 1567 1581* 1584 1584 i 006714 automatic fixed bin(17,0) dcl 1926 in procedure "known_dont_expand" set ref 1928* 1930 i 006704 automatic fixed bin(17,0) dcl 1908 in procedure "known" set ref 1910* 1912 1913* 1913 1914 1915 i 006672 automatic fixed bin(21,0) dcl 1775 in procedure "get_next_stmt" set ref 1779* 1780 1782 1784* 1785 1792 i 000102 automatic fixed bin(17,0) dcl 2113 in procedure "trace_expanded" set ref 2127* 2128 2128 2128 2132 2133 2133 2135 2138* i 006652 automatic fixed bin(21,0) dcl 1755 in procedure "find_next_occurrence" set ref 1759* 1760 1761 i 006724 automatic fixed bin(17,0) dcl 1940 in procedure "known_param" set ref 1942* 1944 1945* 1945 1948 i 000101 automatic fixed bin(21,0) dcl 1832 in procedure "get_quoted_string" set ref 1839* 1840 1842 1842 1845 1847 1849 1853 1853 1855 1855 1857 i 006601 automatic fixed bin(21,0) dcl 304 in procedure "abs_io_expand_" set ref 399* 400 401 402 402 424* 426* 426 428 428 438 441* 441 443 445 445* 445 451 453* 453 455 465* 466 466* 469 478 479 480 482 485 496* 501 507 553* 553* 554* 569* 569* 570* 582* 583 592 593 657* 658 671 671 671 673 769 784* 786 795 795 799 899* 900 902* 904 908 998* 999 999 1001 1004 1004 1004 1007 1013 1024 1025 1026 1026 1028 1042 1053 1053 1055 1060 1159* 1160 1161 1161 1161 1168* 1169 1169 1169 1169 iafter_pos 17 parameter fixed bin(21,0) level 2 in structure "P_state" dcl 1373 in procedure "expand" set ref 1421 1421 iafter_pos 17 000100 automatic fixed bin(21,0) level 2 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 721* 773* 815 826 828 892* 908* 916* ic 006616 automatic fixed bin(21,0) array dcl 306 set ref 418* 419* 420* 421* 422* 423* 425 426 426 if_info 306 based structure level 2 dcl 1-23 if_sw 306 based bit(1) level 3 dcl 1-23 ref 605 ilen 2 005514 automatic fixed bin(21,0) level 2 dcl 149 set ref 347* 397* 399 402 406* 406 409 415 465 466 478 479 480 482 489 490 492 506 507* 510 512 513 514 514 514 520 529 529 534 542 543 543 543 547 553 553 554 569 569 570 582 584 586 586 647 647 657 665 665 665 667 671 671 675 678 680 692 769 776 784 787 787 791 795 795 815 820 820 826 828 870 871 878 878 899 901 902 904 913 944 949 974 979 998 999 1004 1004 1004 1014 1014 1014 1018 1024 1025 1026 1026 1053 1053 1421 1421 1759 in_handler_sw 326(01) based bit(1) level 4 packed packed unaligned dcl 1-23 ref 428 466 1574 1695 index builtin function dcl 329 ref 399 443 451 465 489 553 569 784 891 898 914 944 950 981 1004 1026 1159 1273 1330 1759 1779 1799 1839 1910 1928 1942 1959 info_ptr 346 based pointer level 4 dcl 1-23 set ref 1563* init_sw 000011 internal static bit(1) initial packed unaligned dcl 278 set ref 365 367* input based char packed unaligned dcl 155 set ref 399 402 415 465 479 480 482 489 490 492 510 514 529 534 542 543 543 553 554 569 570 582 586* 647* 657 665 665 671 671 675 678 680 692 776 784 787 787 795 795 815 820* 826 828 871 878 899 901 904 913 949 979 998 999 1004 1004 1014 1014 1025 1026 1053 1053 1421 1759 input_overlay based char packed unaligned dcl 154 ref 438 443 445 451 1157 1159 1161 1168 1169 1169 input_pos 14 parameter fixed bin(21,0) level 2 dcl 143 set ref 395 397 404* 404 455* 462 470* 470 512* 512 519 547* 547 1153* 1153 1157 1159 1160* 1160 1161 1161* 1161 1168 1169 1169 1169* 1169 1176 1179* 1188* 1757 1761 input_string 60 based structure level 2 dcl 1-23 inside_quotes_sw 000100 automatic bit(1) packed unaligned dcl 1831 in procedure "get_quoted_string" set ref 1834* 1837 1858* inside_quotes_sw 006552 automatic bit(1) packed unaligned dcl 298 in procedure "abs_io_expand_" set ref 384* 440* 442 447* 641* 688 689* 700* 1011 1064 1211 1972 ioa_$ioa_switch_nnl 000044 constant entry external dcl 320 ref 2055 2153 ioa_$rsnnl 000046 constant entry external dcl 320 ref 1563 1671 iocb 2 005520 automatic pointer level 2 in structure "trace" dcl 286 in procedure "abs_io_expand_" set ref 646 646* iocb 2 parameter pointer level 2 in structure "P_trace" dcl 2147 in procedure "trace_unexpanded" set ref 2151 2151* 2153* iocb based structure level 1 dcl 5-6 in procedure "abs_io_expand_" iocb 2 parameter pointer level 2 in structure "P_trace" dcl 2044 in procedure "print_trace" set ref 2053 2053* 2055* iox_$user_output 000032 external static pointer dcl 314 ref 646 2053 2151 ipos 000102 automatic fixed bin(21,0) dcl 1832 in procedure "get_quoted_string" set ref 1835* 1839 1842 1842 1845 1847 1849* 1849 1853 1853 1855 1855 1857 ipos 3 005514 automatic fixed bin(21,0) level 2 in structure "iptr_len" dcl 149 in procedure "abs_io_expand_" set ref 348* 508* 510* 511 529 529 534 538* 538 542 543 543 543 553 569 581* 581 582 584* 592* 592 593 594 657 665 665 665 667* 671 671 673* 673 675 678* 678 678 680 680* 680 692 695* 695 721 773 776 780 784 787 787 791* 795 795 799* 799 809* 809 820* 835* 835 844* 844 852* 852 859* 859 870 871 873* 873 878 878 881* 881 892 892* 899 901 902 904 908 908* 913 916 916* 924 931* 931 944 949 965* 974 979 984* 984 998 999 1001* 1001 1004 1004 1004 1007* 1007 1014 1014 1014 1018* 1024 1025 1026 1026 1028* 1028 1042* 1042 1053 1053 1055* 1055 1087* 1153 iptr 005514 automatic pointer level 2 dcl 149 set ref 346* 395* 399 402 405* 405 415 465 479 480 482 489 490 492 510 514 529 534 542 543 543 553 554 569 570 582 586 647 657 665 665 671 671 675 678 680 692 776 784 787 787 795 795 815 820 826 828 871 878 899 901 904 913 949 979 998 999 1004 1004 1014 1014 1025 1026 1053 1053 1421 1759 iptr_len 005514 automatic structure level 1 unaligned dcl 149 is_absin 44 parameter bit(1) level 3 dcl 143 ref 1620 is_af 45 parameter bit(1) level 3 dcl 143 ref 1628 is_input 46 parameter bit(1) level 3 dcl 143 ref 508 780 1014 1157 1666 istart 006602 automatic fixed bin(21,0) dcl 304 set ref 348* 460* 465 478 479 480 482 484 495* 501* 501 507 j 006673 automatic fixed bin(21,0) dcl 1775 in procedure "get_next_stmt" set ref 1780* 1781 1792* 1793 1798 1799 1801* 1801 1802* 1802 1802 1807 1808 1809 1818 j 006603 automatic fixed bin(21,0) dcl 304 in procedure "abs_io_expand_" set ref 425* 426 426* 443* 444 445 445 451* 452 453 659* 661 661* 1074* 1076 1076* k 006674 automatic fixed bin(21,0) dcl 1775 set ref 1799* 1800 1801 1807* 1808 1809 key_name 006662 automatic char(32) packed unaligned dcl 1774 set ref 1808* 1809* 1811* 1813 keyword parameter structure level 2 in structure "P_state" unaligned dcl 1327 in procedure "compute_quote_factor" keyword parameter structure level 2 in structure "P_state" unaligned dcl 1197 in procedure "add_arg" keyword parameter structure level 2 in structure "P_state" unaligned dcl 1968 in procedure "parse_value" keyword parameter structure level 2 in structure "P_state" unaligned dcl 1373 in procedure "expand" set ref 1484* keyword 000100 automatic structure level 2 in structure "state" unaligned dcl 77 in procedure "abs_io_expand_" set ref 749* 759* 849* 860* 874* 882* 893* 906* 941* keyword parameter structure level 2 in structure "P_state" unaligned dcl 1828 in procedure "get_quoted_string" keyword parameter structure level 2 in structure "P_state" unaligned dcl 2064 in procedure "push_state" keyword parameter structure level 2 in structure "P_state" unaligned dcl 2110 in procedure "trace_expanded" keyword 000126 automatic structure array level 2 in structure "state_stack" unaligned dcl 104 in procedure "abs_io_expand_" keyword parameter structure level 2 in structure "P_state" unaligned dcl 2033 in procedure "pop_state" keyword_len 2 parameter fixed bin(21,0) level 2 in structure "A_stmt" dcl 1772 in procedure "get_next_stmt" set ref 1787* 1794* 1813* 1815* keyword_len 164 parameter fixed bin(21,0) level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 962* label_search_sw 006553 automatic bit(1) packed unaligned dcl 298 set ref 335* 341* 357* 364* 414 label_search_values 54 parameter structure level 2 dcl 143 len 163 parameter fixed bin(21,0) level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 962* len 2 based fixed bin(21,0) array level 3 in structure "parsed_args" dcl 2-77 in procedure "abs_io_expand_" set ref 1099 1204* 2121 2121 2121 2123 len 2 based fixed bin(21,0) array level 2 in structure "command_args" dcl 165 in procedure "abs_io_expand_" ref 1468 1468 1472 1472 len 145 parameter fixed bin(21,0) level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 435* 471* 513* 520* len 1 parameter fixed bin(21,0) level 2 in structure "A_stmt" dcl 1772 in procedure "get_next_stmt" set ref 1787* 1794* 1813* 1815* len 62 based fixed bin(21,0) level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" set ref 345 394 1176 1179* 1188* length builtin function dcl 329 ref 346 347 368 369 370 371 581 780 962 1226 1283 1287 1813 1842 1913 1913 1945 1945 1959 1959 limit 65 based fixed bin(21,0) level 3 dcl 1-23 set ref 1782* local_output based char packed unaligned dcl 1328 ref 1330 1335 max builtin function dcl 330 ref 1445 2035 maxlength builtin function dcl 330 ref 390 1515 1527 1556 min builtin function dcl 330 ref 426 mod builtin function dcl 330 ref 1339 1339 1348 n_sw 14(06) 000100 automatic bit(1) level 4 in structure "state" packed packed unaligned dcl 77 in procedure "abs_io_expand_" set ref 910 n_sw 14(06) parameter bit(1) level 4 in structure "P_state" packed packed unaligned dcl 1373 in procedure "expand" set ref 1391 1447 1453 name parameter varying char(32) level 3 in structure "P_state" dcl 1373 in procedure "expand" set ref 1400 1410 name 000100 automatic varying char(32) level 3 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 531* 552* 554* 554 556 564* 570* 570 573 575 581 851* 863* 901* 904* 906 923* 929* 929 933* 936 944 944 947 956 959 962 974 name parameter varying char(32) level 2 in structure "P_keyword" dcl 1907 in procedure "known" ref 1910 name 000126 automatic varying char(32) array level 3 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 2138 name parameter varying char(32) level 2 in structure "P_keyword" dcl 1938 in procedure "known_param" set ref 1942 1947* name 1 based char(32) level 2 in structure "iocb" dcl 5-6 in procedure "abs_io_expand_" ref 1598 name_switches 14 parameter structure level 2 in structure "P_keyword" packed packed unaligned dcl 1907 in procedure "known" set ref 1915* name_switches 14 parameter structure level 3 in structure "P_state" packed packed unaligned dcl 1373 in procedure "expand" name_switches 14 000100 automatic structure level 3 in structure "state" packed packed unaligned dcl 77 in procedure "abs_io_expand_" nest_level 006577 automatic fixed bin(17,0) dcl 303 set ref 348* 383* 659 659 685 706 711* 730 735* 740 752* 762* 855* 866* 956 1011 1032 1044 1067 1070* 1074 1074 1258 1258 1548 1972 2127 next_action 321 based fixed bin(17,0) level 3 dcl 1-23 set ref 463* 959* 1029* 1030* 1176 1181* next_begin_pos 136 parameter fixed bin(21,0) level 3 dcl 143 set ref 418* next_char 006540 automatic char(1) packed unaligned dcl 295 set ref 776* 778 808 823 838 848 858 869 891 894 898 913* 914 915 929 949* 950 981 983 next_comment_pos 143 parameter fixed bin(21,0) level 3 dcl 143 set ref 423* next_do_pos 137 parameter fixed bin(21,0) level 3 dcl 143 set ref 419* next_end_pos 140 parameter fixed bin(21,0) level 3 dcl 143 set ref 420* next_label_pos 141 parameter fixed bin(21,0) level 3 dcl 143 set ref 421* next_next_char 006541 automatic char(1) packed unaligned dcl 295 set ref 871* 872 878 next_ptr 14 based pointer level 2 dcl 3-8 ref 1611 next_quote_pos 142 parameter fixed bin(21,0) level 3 dcl 143 set ref 422* next_statement 162 parameter structure level 3 dcl 143 set ref 1179* 1188* no_args_ipos 006604 automatic fixed bin(21,0) dcl 304 set ref 584* 593* 594* 1087 no_args_sw 006554 automatic bit(1) packed unaligned dcl 298 set ref 349* 596* 598 630* 806 996 1086 noabort 260(01) based bit(1) level 4 packed packed unaligned dcl 1-23 ref 1187 1778 null builtin function dcl 330 ref 617 625 632 646 1097 1133 1464 1488 1516 1516 1520 1520 1523 1523 1596 1604 1608 1634 1648 1656 2053 2085 2118 2151 2170 null_arg_sw 006555 automatic bit(1) packed unaligned dcl 298 set ref 384* 653* 698* 1048* 1109 1110* 1506* 1862* number 11 parameter fixed bin(17,0) level 2 in structure "P_keyword" dcl 1907 in procedure "known" set ref 1914* number 11 000100 automatic fixed bin(17,0) level 3 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 713 716 737 742 750* 760* 850* 862* 1032 1067 number 11 parameter fixed bin(17,0) level 3 in structure "P_state" dcl 1373 in procedure "expand" set ref 1387 1395 1427 number 11 000126 automatic fixed bin(17,0) array level 3 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 661 661 1076 1076 2132 2133 numeric_arg 000576 automatic fixed bin(17,0) dcl 1385 set ref 1392* 1394* 1449 1641* 1643 1644 1648 1700 1700 1704 1704 1708 1708 1712 1712 1716 1716 1720 1720 1724 1724 1728 1728 1733 1733 1737 1737 1741 1741 old_parsed_args_ptr 000110 automatic pointer dcl 1871 set ref 1873* 1878 1879 1882 olen 23 parameter fixed bin(21,0) level 3 in structure "P_state" dcl 2110 in procedure "trace_expanded" ref 2140 olen 23 parameter fixed bin(21,0) level 3 in structure "P_state" dcl 1327 in procedure "compute_quote_factor" ref 1330 1335 1336 1354 olen 23 parameter fixed bin(21,0) level 3 in structure "P_state" dcl 1197 in procedure "add_arg" set ref 1204 1207 1208 1209* olen 23 000126 automatic fixed bin(21,0) array level 3 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 1312 2128 2128 olen 3 parameter fixed bin(21,0) level 2 in structure "P_ptr_len" dcl 1219 in procedure "add_output" set ref 1228 1233 1233 1233 1240* 1240 1241 1241 olen 23 000100 automatic fixed bin(21,0) level 3 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 352* 524* 698 780 780* 780 826 826 1068 1083 1089* 1102 1105 1105 1108 1115 1120 1128 1131 1132 1138 1142 1150 1257 1299 1862 1997 2069 2070 2071* 2080 2084 2092 2128 2140 omax_len 2 parameter fixed bin(21,0) level 2 in structure "P_ptr_len" dcl 1219 in procedure "add_output" set ref 1228 1229 1237* omax_len 22 000100 automatic fixed bin(21,0) level 3 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 351* 523* 2070* 2070 omax_len 22 parameter fixed bin(21,0) level 3 in structure "P_state" dcl 1197 in procedure "add_arg" set ref 1208* 1208 on 200(01) based bit(1) level 3 in structure "abs_data" packed packed unaligned dcl 1-23 in procedure "abs_io_expand_" set ref 543 787 795 on 162(01) based bit(1) level 3 in structure "abs_data" packed packed unaligned dcl 1-23 in procedure "abs_io_expand_" set ref 472 on 0(01) 005520 automatic bit(1) level 2 in structure "trace" packed packed unaligned dcl 286 in procedure "abs_io_expand_" set ref 586 645 721 772 811 825 1093 1404 on_info 322 based structure level 2 dcl 1-23 open_char 000100 automatic varying char(4) dcl 2112 set ref 2132* 2133* 2135* 2136* 2137* 2138 optr 20 parameter pointer level 3 in structure "P_state" dcl 1327 in procedure "compute_quote_factor" ref 1330 1335 optr 20 000126 automatic pointer array level 3 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 2128 optr 20 000100 automatic pointer level 3 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 350* 522* 698 780 826 1068 1082 1102 1105 1119 1142 1862 1997 2069* 2069 2092 2140 optr 20 parameter pointer level 3 in structure "P_state" dcl 1197 in procedure "add_arg" set ref 1203 1206 1207* optr parameter pointer level 2 in structure "P_ptr_len" dcl 1219 in procedure "add_output" set ref 1233 1236* 1241 optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 1327 in procedure "compute_quote_factor" optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 1828 in procedure "get_quoted_string" set ref 1845* 1847* 1853* 1855* optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 1373 in procedure "expand" set ref 1468* 1501* 1504* 1552* 1567* 1574* 1584* 1588* 1592* 1600* 1613* 1620* 1628* 1634* 1652* 1659* 1666* 1674* 1695* 1700* 1704* 1708* 1712* 1716* 1720* 1724* 1728* 1733* 1737* 1741* optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 2110 in procedure "trace_expanded" optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 2033 in procedure "pop_state" optr_len 20 000126 automatic structure array level 2 in structure "state_stack" unaligned dcl 104 in procedure "abs_io_expand_" optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 1197 in procedure "add_arg" optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 2064 in procedure "push_state" optr_len 20 000100 automatic structure level 2 in structure "state" unaligned dcl 77 in procedure "abs_io_expand_" set ref 536* 665* 671* 685* 694* 706* 713* 730* 737* 754* 764* 833* 842* 936* 1014* 1053* 1072* 1115* optr_len 20 parameter structure level 2 in structure "P_state" unaligned dcl 1968 in procedure "parse_value" set ref 2020* 2022* output based char packed unaligned dcl 156 in procedure "abs_io_expand_" set ref 698 780 826 1068 1102 1105* 1142 1862 1997 2092 2128 2140 output based char packed unaligned dcl 1221 in procedure "add_output" set ref 1233 1241* overlay_len 006605 automatic fixed bin(21,0) dcl 304 set ref 345* 394* 397 438 443 445 451 1157 1159 1161 1168 1169 1169 overlay_ptr 006566 automatic pointer dcl 301 set ref 344* 346 393* 395 438 443 445 451 1157 1159 1161 1168 1169 1169 p 000570 automatic pointer dcl 1383 set ref 1608* 1608* 1610 1610* 1611 param_switches 14(05) 000100 automatic structure level 3 in structure "state" packed packed unaligned dcl 77 in procedure "abs_io_expand_" param_switches 14(05) parameter structure level 3 in structure "P_state" packed packed unaligned dcl 1968 in procedure "parse_value" param_switches 14(05) parameter structure level 3 in structure "P_state" packed packed unaligned dcl 1373 in procedure "expand" param_switches 14(05) parameter structure level 2 in structure "P_keyword" packed packed unaligned dcl 1938 in procedure "known_param" set ref 1948* param_switches 14(05) parameter structure level 2 in structure "P_keyword" packed packed unaligned dcl 1907 in procedure "known" set ref 1916* paren_sw 12 parameter bit(1) level 3 in structure "P_state" packed packed unaligned dcl 1373 in procedure "expand" set ref 1411 paren_sw 12 000100 automatic bit(1) level 3 in structure "state" packed packed unaligned dcl 77 in procedure "abs_io_expand_" set ref 771* 853* parse_args_sw 006556 automatic bit(1) packed unaligned dcl 298 set ref 349* 384* 613* 614 630* 638 698 1041 1088* 1093 1107 1506 1862 1972 2117 parsed_arg based char packed unaligned dcl 174 set ref 1099 2121 2121* 2123 parsed_arg_index 006600 automatic fixed bin(17,0) dcl 303 set ref 1097* 1099 1099* 2118* 2121 2121 2121 2121 2121 2123 2123* parsed_args based structure level 1 dcl 2-77 set ref 619 1876 1879* 1879 1882 parsed_args_count 006630 automatic fixed bin(17,0) dcl 2-74 set ref 616* 619 619 1200 1874* 1874 1876 1876 parsed_args_ptr 160 parameter pointer level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 622* 625* 632* 1097 1097 1880* 2118 2118 parsed_args_ptr 006632 automatic pointer dcl 2-75 in procedure "abs_io_expand_" set ref 619* 621 622 1099 1099 1200 1202 1202 1203 1203 1204 1204 1873 1876* 1878 1879 1880 2121 2121 2121 2121 2121 2123 2123 path_string 000473 automatic char(168) packed unaligned dcl 1379 set ref 1581* 1584 1584 pos 144 parameter fixed bin(21,0) level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 434* 462* 519* pos 162 parameter fixed bin(21,0) level 4 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" set ref 961* pos parameter fixed bin(21,0) level 2 in structure "A_stmt" dcl 1772 in procedure "get_next_stmt" set ref 1787* 1818* position 64 based fixed bin(21,0) level 3 dcl 1-23 set ref 1781* predicate_values 44 parameter structure level 2 dcl 143 prefix 4 parameter varying char(32) level 2 in structure "P_trace" dcl 2044 in procedure "print_trace" ref 2055 prefix 4 parameter varying char(32) level 2 in structure "P_trace" dcl 2147 in procedure "trace_unexpanded" ref 2153 prefix 204 based varying char(32) level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" set ref 2100 ptr based pointer array level 2 in structure "command_args" dcl 165 in procedure "abs_io_expand_" ref 1464 1468 1472 1648 ptr 60 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" set ref 344 393 1179* 1188* 1581* ptr 1 based pointer array level 3 in structure "parsed_args" packed packed unaligned dcl 2-77 in procedure "abs_io_expand_" set ref 1099 1203* 2121 2121 2123 q_sw 14(07) parameter bit(1) level 4 in structure "P_state" packed packed unaligned dcl 1968 in procedure "parse_value" set ref 1986* 1993* 2020 q_sw 14(07) parameter bit(1) level 4 in structure "P_state" packed packed unaligned dcl 1373 in procedure "expand" set ref 1501 qscan_start 16 parameter fixed bin(21,0) level 2 in structure "P_state" dcl 1197 in procedure "add_arg" set ref 1210* qscan_start 16 parameter fixed bin(21,0) level 2 in structure "P_state" dcl 1327 in procedure "compute_quote_factor" set ref 1330 1334* 1334 1335 1336 1337* 1337 1354* qscan_start 16 000100 automatic fixed bin(21,0) level 2 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 383* 1090* 1257 1258 1299* 2072* qscan_start 16 000126 automatic fixed bin(21,0) array level 2 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 1312 1313 quote_factor 15 parameter fixed bin(17,0) level 2 in structure "P_state" dcl 1197 in procedure "add_arg" set ref 1210* quote_factor 15 parameter fixed bin(17,0) level 2 in structure "P_state" dcl 1968 in procedure "parse_value" set ref 1972 quote_factor 15 000126 automatic fixed bin(17,0) array level 2 in structure "state_stack" dcl 104 in procedure "abs_io_expand_" set ref 1313* 1318 quote_factor 15 parameter fixed bin(17,0) level 2 in structure "P_state" dcl 1327 in procedure "compute_quote_factor" set ref 1339 1339 1342 1343* 1343 1347* 1347 1348 quote_factor 15 000100 automatic fixed bin(17,0) level 2 in structure "state" dcl 77 in procedure "abs_io_expand_" set ref 383* 1036 1044 1090* 1258* 1267 1267 1269* 1269 1281 1281 1294* 1294 1296 1296 2072* quote_len 000100 automatic fixed bin(21,0) dcl 1251 set ref 1335* 1336 1336* 1337 1339 1339 1342* 1342 1346 1348* 1348 quote_pos 000101 automatic fixed bin(21,0) dcl 1251 set ref 1273* 1275 1277 1277 1279 1287* 1288 1288 1288 1330* 1332 1334 r_sw 14(08) parameter bit(1) level 4 packed packed unaligned dcl 1373 set ref 1468 1468* 1501 1501* require_arg_sw 14(02) 000100 automatic bit(1) level 4 packed packed unaligned dcl 77 set ref 974 988 require_number_sw 14(03) parameter bit(1) level 4 packed packed unaligned dcl 1373 set ref 1391 requote_string_ 000050 constant entry external dcl 321 ref 1610 2121 rtrim builtin function dcl 330 ref 436 780 839 1552 1552 1554 1554 1574 1574 1600 1600 1610 1610 1813 2050 saved_arg based varying char dcl 157 set ref 713 723* 737 894* 915* 970* 983* 1068* 1072 1184 2082 2087 2092* saved_arg_allocated_sw 006557 automatic bit(1) packed unaligned dcl 298 set ref 391* 1184 2082 2089* saved_arg_len 006606 automatic fixed bin(21,0) dcl 304 set ref 390* 723 894 915 970 983 1068 1184 2080 2082 2084* 2087 2092 saved_arg_ptr 006570 automatic pointer dcl 301 set ref 389* 713 723 737 894 915 970 983 1068 1072 1184 2082 2087* 2092 saved_ilen 006607 automatic fixed bin(21,0) dcl 304 set ref 506* saved_ipos 006610 automatic fixed bin(21,0) dcl 304 set ref 924* 961 965 scan_len 000102 automatic fixed bin(21,0) dcl 1251 set ref 1272* 1273 1277 1277 1279* 1279 1283 1287 1288 1288 search builtin function dcl 330 ref 657 899 1807 1976 2121 search_chars 006524 automatic varying char(12) dcl 289 set ref 638* 639* 642* 642 657 searched_char 006542 automatic char(1) packed unaligned dcl 295 set ref 675* 677 683 704 728 747 757 767 searching_for 54 parameter char(200) level 3 dcl 143 ref 436 short_string 000545 automatic varying char(32) dcl 1380 set ref 1415* 1416* 1417* 1418 1671* 1674 skip_count 006611 automatic fixed bin(21,0) dcl 304 set ref 401* 402* 403* 404 405 406 skip_sw 006560 automatic bit(1) packed unaligned dcl 299 set ref 335* 341* 358* 363* 613 723 1115 1224 1253 state 000100 automatic structure level 1 unaligned dcl 77 set ref 711* 723* 735* 752* 762* 813* 820* 855* 866* 1046* 1070* 1108* 1111* 1260* state_stack 000126 automatic structure array level 1 unaligned dcl 104 set ref 1315* 2036 2066* str based char packed unaligned dcl 1773 ref 1779 1784 1793 1798 1799 1802 1807 1808 1809 str_len 000100 automatic fixed bin(17,0) dcl 1222 set ref 1226* 1228 1229 1240 1241 1241 substr builtin function dcl 330 set ref 402 415 438 439 443 445 450 451 465 479 480 482 489 490 492 514* 514 529 534 542 543 543 553 554 569 570 582 657 665 665 671 671 675 678 680 692 776 784 787 787 795 795 815 826 828 871 878 899 901 904 913 949 979 998 999 1004 1004 1014 1014 1025 1026 1053 1053 1142 1145* 1145 1157 1159 1161 1168 1169 1169 1233* 1233 1241* 1273 1277 1277 1288 1288 1330 1335 1421 1567 1567 1584 1584 1779 1784 1793 1798 1799 1802 1807 1808 1809 1839 1842 1845 1847 1853 1853 1855 1855 1976 1980 1980 1982 1982 1990 2000 2008 2008 2128 2149 2149 switch_name 000556 automatic char(32) packed unaligned dcl 1381 set ref 1563* 1567 1567 1596* 1598* 1600 1600 switch_ptr 26 based pointer level 2 dcl 4-5 ref 1596 1598 switches 260 based structure level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" switches 326 based structure level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" temp_i 006612 automatic fixed bin(21,0) dcl 305 set ref 485* 488 489* 490 492 496 temp_istart 006613 automatic fixed bin(21,0) dcl 305 set ref 484* 488* 488 489 490 492 495 temp_ptr 000100 automatic pointer dcl 1198 set ref 1206* 1207 temp_white_len 006614 automatic fixed bin(21,0) dcl 305 set ref 486* 488 490* 491 491* 492 497 tf_string 006530 automatic varying char(8) dcl 290 set ref 1643* 1644* 1648* 1649* 1652 then_else_allowed_sw 006561 automatic bit(1) packed unaligned dcl 299 set ref 602* 638 1024 this_action 320 based fixed bin(17,0) level 3 dcl 1-23 set ref 475* 539* 556* 558 573* 575 596 598 598 602 606 606 613 629* 642 1093 1093 1115 1123 1224 2050 2121 this_statement 144 parameter structure level 3 in structure "A_xd" dcl 143 in procedure "abs_io_expand_" this_statement 144 based structure level 3 in structure "expand_data" dcl 2-11 in procedure "abs_io_expand_" trace 005520 automatic structure level 1 dcl 286 set ref 579* 586* 634* 647* 817* 830* 1102* 1105* 1424* trace_buffer 006131 automatic varying char(1000) dcl 288 set ref 813* 815* 815 817 826* 828* 830 1096* 1099* 1099 1102 1408* 1410* 1410 1411* 1411 1418* 1418 1420* 1420 1421* 1421 1424 trace_lines 26 parameter structure level 2 dcl 143 ref 634 trace_sw 006562 automatic bit(1) packed unaligned dcl 299 set ref 334* 341* 358* 364* 472 543 586 605 606* 645 787 795 811 1093 1404 2048 traced_sw 000567 automatic bit(1) packed unaligned dcl 1382 set ref 1389* 1404 1406* trim_whitespace_sw 260 based bit(1) level 4 packed packed unaligned dcl 1-23 ref 508 780 1014 1157 true_sw 307 based bit(1) level 3 dcl 1-23 ref 606 606 unique_chars_ 000052 constant entry external dcl 322 ref 839 unique_name 21 based varying char(15) level 2 dcl 1-23 set ref 839 839* 842 unspec builtin function dcl 330 set ref 749* 759* 849* 860* 874* 882* 1915* 1916* 1948* value_$defined 000054 constant entry external dcl 323 ref 1659 value_$delete 000056 constant entry external dcl 324 ref 2172 value_$get_alloc 000060 constant entry external dcl 325 ref 1490 value_$init_seg 000062 constant entry external dcl 326 ref 1896 value_$set 000064 constant entry external dcl 327 ref 2174 value_buffer 000100 automatic varying char(1000) dcl 1378 set ref 1514 1515 1527 1556 1604* 1606* 1609 1609* 1609 1610* 1610 1613 value_header based fixed bin(17,0) array dcl 1890 ref 1894 value_len 000574 automatic fixed bin(21,0) dcl 1384 set ref 1490* 1501 1501 1504 1504 1506 1508 1508 1515* 1520 1523 1527 1527 1529* 1529 1535 1556 1556 value_ptr 000572 automatic pointer dcl 1383 set ref 1490* 1501 1504 1506 1508 1514* 1520 1523 1527 1535* 1548 1552 1552 1554 1554 1556 value_str based char packed unaligned dcl 1375 set ref 1501* 1504* 1506 1508 value_var_str based varying char dcl 1376 set ref 1520* 1523* 1527 1535 1548 1552 1552 1554 1554 1556 variables_ptr 000100 automatic pointer dcl 1891 in procedure "init_variables" set ref 1894* 1896* 1899 variables_ptr 410 based pointer level 2 in structure "abs_data" dcl 1-23 in procedure "abs_io_expand_" set ref 1488 1488* 1490* 1656 1656* 1659* vbreak 000100 automatic fixed bin(21,0) dcl 1970 set ref 1976* 1978 1980 1980 1982 1982 1984 1988 1990 1991 1999* 1999 2000 2002 verify builtin function dcl 330 ref 402 480 490 510 582 678 998 1161 1168 1335 1483 1639 1784 1802 1997 2000 2165 victim_ptr 252 based pointer level 3 dcl 1-23 ref 1634 vstart 000101 automatic fixed bin(21,0) dcl 1970 set ref 1975* 1976 1980 1980 1982 1982 1984* 1984 1986* 1988* 1988 1990 1991* 1991 1993* 1999 2000* 2001 2002* 2002 2008 2008 was_attached_sw 326 based bit(1) level 4 packed packed unaligned dcl 1-23 ref 1695 white_len 006615 automatic fixed bin(21,0) dcl 305 set ref 480* 481 481* 482 486 497* 501 work_area 416 based area(800) level 2 dcl 1-23 set ref 1894 1896 1896 xd_area based area(1024) dcl 147 ref 619 1140 1147 1184 1231 1508 1876 1882 2082 2087 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. EXPANDED internal static fixed bin(17,0) initial dcl 1-180 Work_area_size internal static fixed bin(17,0) initial dcl 1-177 abs_data_version_1 internal static fixed bin(17,0) initial dcl 1-177 ec_data_version_1 internal static fixed bin(17,0) initial dcl 4-21 ec_data_version_id internal static char(4) initial dcl 4-21 expand_data_ptr automatic pointer dcl 2-8 expand_data_version_2 internal static fixed bin(17,0) initial dcl 2-85 handler_node_ptr automatic pointer dcl 3-6 iox_$iocb_version_sentinel external static char(4) dcl 5-51 NAMES DECLARED BY EXPLICIT CONTEXT. ADD_SPACE 007754 constant label dcl 1053 ref 1060 BAD_AMP_WORD 007042 constant label dcl 944 ref 532 870 887 950 1387 1617 1678 1685 1692 CALL_EVALUATE 013555 constant label dcl 1516 ref 1541 CLOSE_REQUOTE 011643 constant label dcl 1292 ref 1284 COMMON 002565 constant label dcl 365 ref 336 359 COND_INFO_PTR 014215 constant label dcl 1563 ref 1560 COND_NAME 014277 constant label dcl 1574 ref 1571 CONTIN 005122 constant label dcl 678 ref 800 CONTROL_NOARG 004363 constant label dcl 586 ref 598 CONTROL_STMT 004221 constant label dcl 564 ref 558 COUNT_LOOP 012005 constant label dcl 1330 ref 1351 DOUBLE_LOOP 011510 constant label dcl 1273 ref 1283 END_AMP_WORD 007427 constant label dcl 991 ref 938 EVALUATE_CALLED 013717 constant label dcl 1524 ref 1521 EXPAND 000015 constant label array(35) dcl 1429 ref 1427 EXPAND_ONE 005357 constant label dcl 721 ref 742 895 910 917 971 985 GET_NEXT_STMT 010702 constant label dcl 1176 ref 476 IS_AF 015016 constant label dcl 1628 ref 1625 IS_VAR 015306 constant label dcl 1656 ref 1642 KNOWN 007305 constant label dcl 969 ref 914 MISSING_ARG 007330 constant label dcl 974 ref 981 989 NEXT_ARG 013161 constant label dcl 1475 ref 1464 NEXT_DELIM 010013 constant label dcl 1061 ref 1002 1008 NL_LOOP 003455 constant label dcl 465 ref 502 NOT_CONTROL 004561 constant label dcl 630 ref 540 560 NO_ARG 007310 constant label dcl 970 ref 974 988 NO_LABEL 003235 constant label dcl 428 ref 452 NO_NEXT 016377 constant label dcl 1786 ref 1800 OPEN_AF 006447 constant label dcl 862 ref 876 884 OPEN_PAREN 006431 constant label dcl 852 ref 979 PARSE_ARG 017561 constant label dcl 1976 ref 2003 RETURN 010735 constant label dcl 1184 ref 431 1367 1496 1545 RETURN_NULL_LINE 003530 constant label dcl 472 ref 515 RETURN_STRING 010014 constant label dcl 1064 ref 590 668 792 806 966 996 1037 SEE_NEXT 016413 constant label dcl 1793 ref 1803 SET 011023 constant label dcl 2165 ref 2188 SKIP_LOOP 002724 constant label dcl 395 ref 456 548 START 012205 constant label dcl 1391 ref 1485 START_EXPANDING 004715 constant label dcl 650 ref 353 VAR_REF 013165 constant label dcl 1479 set ref 1395 abs_io_expand_ 002424 constant entry external dcl 42 add 020052 constant entry internal dcl 2014 ref 1980 2008 2011 add_arg 011221 constant entry internal dcl 1193 ref 1046 1108 1111 1548 1997 add_output 011274 constant entry internal dcl 1215 ref 536 665 671 685 694 706 713 730 737 754 764 833 842 936 1014 1053 1072 1115 1267 1277 1281 1288 1296 1504 1552 1567 1574 1613 1620 1628 1634 1652 1659 1666 1674 1695 1700 1704 1708 1712 1716 1720 1724 1728 1733 1737 1741 1847 1855 2022 add_quoted_output 011400 constant entry internal dcl 1245 ref 1468 1501 1584 1588 1592 1600 1845 1853 2020 compute_nested_quote_factor 011710 constant entry internal dcl 1304 ref 1258 1313 compute_quote_factor 012000 constant entry internal dcl 1323 ref 1260 1315 delete 011172 constant entry external dcl 2182 error 012127 constant entry internal dcl 1360 ref 436 444 468 575 661 663 716 740 743 769 944 947 956 974 1032 1035 1036 1064 1076 1078 1395 1400 1442 1482 1498 1499 1662 1840 1897 2165 expand 012161 constant entry internal dcl 1371 ref 723 expand_label 002451 constant entry external dcl 338 find_next_occurrence 016247 constant entry internal dcl 1747 ref 418 419 420 421 422 423 get_next_stmt 016311 constant entry internal dcl 1767 ref 1179 1188 get_quoted_string 016577 constant entry internal dcl 1822 ref 820 1986 1993 grow_parsed_args 017140 constant entry internal dcl 1866 ref 1200 init_variables 017211 constant entry internal dcl 1886 ref 1488 1656 2170 known 017275 constant entry internal dcl 1903 ref 941 known_dont_expand 017357 constant entry internal dcl 1921 ref 933 known_param 017421 constant entry internal dcl 1934 ref 906 label_search 002527 constant entry external dcl 355 lookup_stmt 017510 constant entry internal dcl 1953 ref 373 374 375 376 556 573 959 1811 parse_value 017527 constant entry internal dcl 1964 ref 1472 1474 1554 pop_state 020141 constant entry internal dcl 2028 ref 711 735 1070 print_trace 020172 constant entry internal dcl 2041 ref 472 817 830 1102 1105 1424 2100 2104 push_state 020346 constant entry internal dcl 2059 ref 752 762 855 866 save_arg 020405 constant entry internal dcl 2076 ref 709 733 set 010777 constant entry external dcl 2160 skip 002550 constant entry external dcl 361 trace_comment 020470 constant entry internal dcl 2096 ref 543 787 795 trace_expanded 020577 constant entry internal dcl 2108 ref 813 1408 trace_unexpanded 021202 constant entry internal dcl 2144 ref 586 647 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 22230 22316 21563 22240 Length 22726 21563 66 374 445 12 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME abs_io_expand_ 3708 external procedure is an external procedure. add_arg 75 internal procedure is called by several nonquick procedures. add_output 66 internal procedure is called during a stack extension. add_quoted_output 92 internal procedure is called during a stack extension. compute_nested_quote_factor 74 internal procedure calls itself recursively. compute_quote_factor 65 internal procedure is called by several nonquick procedures. error 65 internal procedure is called during a stack extension. expand 474 internal procedure enables or reverts conditions. on unit on line 1531 64 on unit on unit on line 1532 64 on unit on unit on line 1533 64 on unit find_next_occurrence internal procedure shares stack frame of external procedure abs_io_expand_. get_next_stmt internal procedure shares stack frame of external procedure abs_io_expand_. get_quoted_string 104 internal procedure is called by several nonquick procedures. grow_parsed_args internal procedure shares stack frame of internal procedure add_arg. init_variables 92 internal procedure is called by several nonquick procedures. known internal procedure shares stack frame of external procedure abs_io_expand_. known_dont_expand internal procedure shares stack frame of external procedure abs_io_expand_. known_param internal procedure shares stack frame of external procedure abs_io_expand_. lookup_stmt internal procedure shares stack frame of external procedure abs_io_expand_. parse_value 100 internal procedure is called during a stack extension. add 82 internal procedure is called during a stack extension. pop_state internal procedure shares stack frame of external procedure abs_io_expand_. print_trace 94 internal procedure is called during a stack extension. push_state internal procedure shares stack frame of external procedure abs_io_expand_. save_arg internal procedure shares stack frame of external procedure abs_io_expand_. trace_comment 86 internal procedure is called during a stack extension. trace_expanded 89 internal procedure is called by several nonquick procedures. trace_unexpanded internal procedure shares stack frame of external procedure abs_io_expand_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 WHITE abs_io_expand_ 000011 init_sw abs_io_expand_ 000012 DONT_EXPAND_LEN abs_io_expand_ 000013 NAMES_LEN abs_io_expand_ 000014 PARAMS_LEN abs_io_expand_ 000015 STMTS_LEN abs_io_expand_ 000016 ELSE_ACTION abs_io_expand_ 000017 IF_ACTION abs_io_expand_ 000020 SET_ACTION abs_io_expand_ 000021 THEN_ACTION abs_io_expand_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME abs_io_expand_ 000100 state abs_io_expand_ 000126 state_stack abs_io_expand_ 004356 alloc_info abs_io_expand_ 004364 alloc_stack abs_io_expand_ 005514 iptr_len abs_io_expand_ 005520 trace abs_io_expand_ 005536 auto_saved_arg abs_io_expand_ 006131 trace_buffer abs_io_expand_ 006524 search_chars abs_io_expand_ 006530 tf_string abs_io_expand_ 006534 char5 abs_io_expand_ 006536 char3 abs_io_expand_ 006537 char2 abs_io_expand_ 006540 next_char abs_io_expand_ 006541 next_next_char abs_io_expand_ 006542 searched_char abs_io_expand_ 006543 added_arg_inside_quotes_sw abs_io_expand_ 006544 control_line_sw abs_io_expand_ 006545 delete_sw abs_io_expand_ 006546 eof_sw abs_io_expand_ 006547 expand_label_sw abs_io_expand_ 006550 found_sw abs_io_expand_ 006551 got_next_stmt abs_io_expand_ 006552 inside_quotes_sw abs_io_expand_ 006553 label_search_sw abs_io_expand_ 006554 no_args_sw abs_io_expand_ 006555 null_arg_sw abs_io_expand_ 006556 parse_args_sw abs_io_expand_ 006557 saved_arg_allocated_sw abs_io_expand_ 006560 skip_sw abs_io_expand_ 006561 then_else_allowed_sw abs_io_expand_ 006562 trace_sw abs_io_expand_ 006564 command_args_ptr abs_io_expand_ 006566 overlay_ptr abs_io_expand_ 006570 saved_arg_ptr abs_io_expand_ 006572 arg_index abs_io_expand_ 006573 arg_limit abs_io_expand_ 006574 arg_max abs_io_expand_ 006575 arg_start abs_io_expand_ 006576 command_args_count abs_io_expand_ 006577 nest_level abs_io_expand_ 006600 parsed_arg_index abs_io_expand_ 006601 i abs_io_expand_ 006602 istart abs_io_expand_ 006603 j abs_io_expand_ 006604 no_args_ipos abs_io_expand_ 006605 overlay_len abs_io_expand_ 006606 saved_arg_len abs_io_expand_ 006607 saved_ilen abs_io_expand_ 006610 saved_ipos abs_io_expand_ 006611 skip_count abs_io_expand_ 006612 temp_i abs_io_expand_ 006613 temp_istart abs_io_expand_ 006614 temp_white_len abs_io_expand_ 006615 white_len abs_io_expand_ 006616 ic abs_io_expand_ 006624 code abs_io_expand_ 006626 abs_data_ptr abs_io_expand_ 006630 parsed_args_count abs_io_expand_ 006632 parsed_args_ptr abs_io_expand_ 006634 ec_data_ptr abs_io_expand_ 006652 i find_next_occurrence 006662 key_name get_next_stmt 006672 i get_next_stmt 006673 j get_next_stmt 006674 k get_next_stmt 006704 i known 006714 i known_dont_expand 006724 i known_param add_arg 000100 temp_ptr add_arg 000110 old_parsed_args_ptr grow_parsed_args add_output 000100 str_len add_output add_quoted_output 000100 quote_len add_quoted_output 000101 quote_pos add_quoted_output 000102 scan_len add_quoted_output expand 000100 value_buffer expand 000473 path_string expand 000545 short_string expand 000556 switch_name expand 000566 alloc_err_sw expand 000567 traced_sw expand 000570 p expand 000572 value_ptr expand 000574 value_len expand 000575 i expand 000576 numeric_arg expand get_quoted_string 000100 inside_quotes_sw get_quoted_string 000101 i get_quoted_string 000102 ipos get_quoted_string init_variables 000100 variables_ptr init_variables 000102 code init_variables parse_value 000100 vbreak parse_value 000101 vstart parse_value print_trace 000100 control_word print_trace trace_expanded 000100 open_char trace_expanded 000102 i trace_expanded THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as alloc_char_temp cat_realloc_chars call_ent_var_desc call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac tra_ext_1 mpfx2 mdfx1 enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc set_chars_eis index_chars_eis verify_eis search_eis op_alloc_ op_freen_ verify_for_rtrim THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$evaluate_active_string cv_dec_check_ get_system_free_area_ hcs_$fs_get_path_name ioa_$ioa_switch_nnl ioa_$rsnnl requote_string_ unique_chars_ value_$defined value_$delete value_$get_alloc value_$init_seg value_$set THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badsyntax error_table_$command_line_overflow error_table_$end_of_info error_table_$oldnamerr iox_$user_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 42 002420 334 002434 335 002436 336 002442 338 002443 340 002461 341 002463 342 002467 343 002470 344 002474 345 002476 346 002500 347 002505 348 002510 349 002515 350 002517 351 002521 352 002523 353 002524 355 002525 357 002537 358 002541 359 002545 361 002546 363 002560 364 002562 365 002565 367 002570 368 002572 369 002574 370 002576 371 002600 373 002602 374 002615 375 002631 376 002645 378 002661 381 002673 383 002674 384 002701 386 002705 387 002711 389 002713 390 002715 391 002717 393 002720 394 002722 395 002724 397 002733 399 002737 400 002750 401 002751 402 002755 403 002766 404 002767 405 002771 406 002774 409 002776 410 003000 411 003003 414 003004 415 003006 416 003012 418 003023 419 003045 420 003071 421 003115 422 003141 423 003165 424 003211 425 003213 426 003221 427 003227 428 003231 430 003241 431 003244 434 003245 435 003251 436 003253 437 003321 438 003322 439 003330 440 003335 441 003337 442 003341 443 003344 444 003364 445 003403 447 003416 448 003417 449 003420 450 003421 451 003423 452 003437 453 003440 455 003441 456 003445 460 003446 462 003450 463 003452 465 003455 466 003475 468 003505 469 003521 470 003523 471 003526 472 003530 475 003556 476 003560 478 003561 479 003566 480 003573 481 003611 482 003614 483 003622 484 003625 485 003627 486 003631 487 003633 488 003637 489 003643 490 003662 491 003702 492 003705 493 003713 494 003714 495 003716 496 003720 497 003722 500 003724 501 003726 502 003732 506 003733 507 003735 508 003741 510 003755 511 003763 512 003764 513 003770 514 003773 515 004000 519 004001 520 004003 522 004005 523 004007 524 004011 525 004012 529 004013 531 004024 532 004030 534 004031 536 004037 538 004055 539 004057 540 004061 542 004062 543 004064 547 004123 548 004132 552 004133 553 004137 554 004166 556 004176 558 004213 559 004216 560 004220 564 004221 569 004225 570 004247 571 004257 573 004261 575 004276 578 004326 579 004331 581 004335 582 004337 583 004356 584 004357 586 004363 590 004417 592 004420 593 004423 594 004432 596 004435 598 004443 602 004461 605 004466 606 004472 613 004503 614 004512 616 004513 617 004515 619 004531 621 004544 622 004545 623 004550 625 004551 626 004556 629 004557 630 004561 632 004563 634 004570 635 004573 638 004575 639 004624 641 004635 642 004636 645 004652 646 004657 647 004666 650 004715 653 004720 655 004722 657 004724 658 004742 659 004743 661 004753 663 004775 664 005013 665 005016 667 005052 668 005056 671 005057 673 005106 675 005111 677 005117 678 005122 680 005143 681 005151 683 005152 685 005154 688 005175 689 005177 690 005201 691 005202 692 005203 694 005211 695 005227 696 005230 698 005231 700 005245 702 005247 704 005250 706 005252 709 005274 711 005275 713 005277 716 005335 721 005357 723 005364 726 005406 728 005407 730 005411 733 005433 735 005434 737 005436 740 005474 742 005517 743 005522 745 005535 747 005536 749 005540 750 005543 752 005544 754 005546 755 005564 757 005565 759 005567 760 005572 762 005573 764 005575 765 005613 767 005614 769 005616 771 005636 772 005640 773 005645 776 005650 778 005656 780 005661 784 005707 786 005724 787 005725 791 005753 792 005757 795 005760 799 006007 800 006014 806 006015 808 006017 809 006022 811 006023 813 006034 815 006050 817 006072 818 006122 820 006123 821 006154 823 006155 825 006157 826 006166 828 006227 830 006245 831 006275 833 006276 835 006314 836 006315 838 006316 839 006320 842 006366 844 006413 845 006415 848 006416 849 006420 850 006423 851 006425 852 006431 853 006432 855 006434 856 006436 858 006437 859 006441 860 006442 861 006445 862 006447 863 006451 864 006455 866 006457 867 006461 869 006462 870 006464 871 006467 872 006473 873 006476 874 006500 875 006503 876 006505 878 006506 881 006520 882 006522 883 006525 884 006527 887 006530 891 006531 892 006542 893 006546 894 006551 895 006562 898 006563 899 006574 900 006636 901 006641 902 006656 903 006662 904 006663 906 006673 908 006705 910 006712 913 006715 914 006722 915 006733 916 006744 917 006750 923 006751 924 006755 925 006760 927 006761 929 006764 931 006773 933 006774 936 007001 938 007025 941 007027 944 007037 947 007125 949 007163 950 007177 952 007210 954 007211 956 007214 959 007254 961 007272 962 007277 965 007302 966 007304 969 007305 970 007310 971 007321 974 007322 979 007366 981 007374 983 007410 984 007421 985 007422 988 007423 989 007426 992 007427 996 007430 998 007432 999 007451 1001 007460 1002 007462 1004 007463 1007 007507 1008 007512 1011 007513 1013 007522 1014 007524 1018 007565 1019 007571 1020 007573 1024 007574 1025 007603 1026 007610 1028 007633 1029 007636 1030 007645 1032 007650 1035 007675 1036 007710 1037 007731 1041 007732 1042 007734 1044 007737 1046 007744 1048 007752 1050 007753 1053 007754 1055 010003 1058 010010 1060 010011 1062 010013 1064 010014 1067 010031 1068 010037 1070 010051 1072 010053 1073 010100 1074 010102 1076 010113 1078 010140 1079 010153 1081 010156 1082 010160 1083 010163 1086 010165 1087 010167 1088 010171 1089 010172 1090 010173 1093 010177 1096 010222 1097 010223 1099 010241 1100 010302 1102 010305 1103 010345 1105 010347 1107 010372 1108 010374 1109 010405 1110 010407 1111 010410 1113 010416 1115 010417 1119 010446 1120 010452 1123 010454 1125 010461 1126 010464 1127 010466 1128 010470 1129 010472 1131 010473 1132 010500 1133 010501 1134 010503 1135 010505 1137 010506 1138 010510 1140 010514 1142 010527 1145 010543 1147 010553 1148 010560 1150 010561 1152 010565 1153 010567 1157 010573 1159 010610 1160 010627 1161 010633 1168 010650 1169 010666 1176 010702 1179 010714 1181 010730 1184 010735 1187 010745 1188 010753 1191 010771 2160 010772 2164 011022 2165 011023 2170 011060 2172 011072 2174 011126 2177 011167 2182 011170 2187 011215 2188 011217 1193 011220 1200 011226 1202 011233 1203 011235 1204 011244 1206 011251 1207 011252 1208 011257 1209 011261 1210 011262 1211 011266 1213 011272 1215 011273 1224 011307 1226 011316 1228 011320 1229 011325 1231 011331 1233 011344 1235 011354 1236 011356 1237 011357 1240 011361 1241 011363 1243 011376 1245 011377 1253 011413 1257 011416 1258 011421 1260 011440 1265 011447 1267 011455 1269 011502 1272 011507 1273 011510 1275 011526 1277 011527 1279 011555 1281 011560 1283 011606 1284 011612 1287 011613 1288 011616 1292 011643 1294 011652 1296 011656 1297 011701 1299 011702 1301 011706 1304 011707 1310 011715 1312 011723 1313 011732 1315 011753 1318 011767 1323 011777 1330 012005 1332 012030 1334 012031 1335 012034 1336 012052 1337 012057 1339 012060 1342 012076 1343 012100 1344 012102 1346 012104 1347 012107 1348 012114 1349 012120 1351 012121 1354 012122 1356 012125 1360 012126 1365 012142 1366 012145 1367 012155 1371 012160 1387 012174 1389 012204 1391 012205 1392 012215 1394 012226 1395 012260 1400 012334 1401 012405 1404 012406 1406 012423 1408 012425 1410 012443 1411 012460 1414 012536 1415 012542 1416 012552 1417 012561 1418 012565 1419 012633 1420 012635 1421 012650 1424 012674 1425 012725 1427 012726 1429 012732 1442 012737 1445 012761 1447 012770 1449 013002 1450 013004 1453 013006 1454 013016 1456 013017 1457 013021 1459 013023 1461 013034 1462 013037 1463 013041 1464 013043 1468 013051 1472 013111 1474 013135 1475 013161 1477 013164 1479 013165 1482 013172 1483 013215 1484 013237 1485 013243 1488 013244 1490 013261 1492 013341 1494 013350 1495 013351 1496 013356 1498 013361 1499 013405 1501 013443 1504 013503 1506 013523 1508 013536 1510 013543 1512 013544 1514 013551 1515 013553 1516 013555 1520 013571 1521 013643 1523 013645 1524 013717 1526 013723 1527 013726 1529 013736 1530 013741 1531 013742 1532 013762 1533 014002 1535 014022 1537 014035 1538 014036 1539 014037 1541 014040 1543 014042 1544 014045 1545 014052 1548 014055 1552 014103 1554 014142 1556 014202 1558 014213 1560 014214 1563 014215 1567 014246 1569 014274 1571 014276 1574 014277 1579 014341 1581 014343 1584 014376 1586 014430 1588 014432 1590 014460 1592 014461 1594 014507 1596 014510 1598 014522 1600 014526 1602 014570 1604 014572 1606 014606 1608 014607 1609 014616 1610 014632 1611 014710 1613 014715 1615 014744 1617 014746 1620 014751 1623 015013 1625 015015 1628 015016 1632 015060 1634 015062 1637 015126 1639 015130 1641 015151 1642 015203 1643 015207 1644 015220 1646 015230 1647 015232 1648 015234 1649 015251 1652 015255 1654 015304 1656 015306 1659 015323 1662 015432 1664 015452 1666 015453 1669 015515 1671 015517 1674 015552 1676 015601 1678 015603 1685 015606 1692 015611 1695 015614 1698 015663 1700 015665 1702 015711 1704 015713 1706 015737 1708 015741 1710 015765 1712 015767 1714 016013 1716 016015 1718 016041 1720 016043 1722 016067 1724 016071 1726 016115 1728 016117 1730 016143 1733 016145 1735 016171 1737 016173 1739 016217 1741 016221 1743 016245 1747 016247 1757 016260 1759 016270 1760 016277 1761 016303 1762 016306 1765 016310 1767 016311 1777 016313 1778 016315 1779 016321 1780 016344 1781 016346 1782 016347 1784 016351 1785 016376 1786 016377 1787 016403 1789 016406 1792 016407 1793 016413 1794 016423 1795 016427 1798 016430 1799 016434 1800 016452 1801 016453 1802 016454 1803 016474 1807 016475 1808 016525 1809 016533 1811 016540 1813 016551 1815 016571 1818 016573 1820 016575 1822 016576 1834 016612 1835 016614 1837 016617 1839 016622 1840 016643 1842 016663 1845 016676 1847 016750 1849 017007 1850 017014 1853 017015 1855 017063 1857 017115 1858 017122 1860 017123 1862 017124 1864 017137 1866 017140 1873 017141 1874 017144 1876 017150 1878 017165 1879 017167 1880 017177 1882 017202 1884 017207 1886 017210 1894 017216 1896 017225 1897 017253 1899 017271 1903 017275 1910 017277 1912 017326 1913 017336 1914 017341 1915 017343 1916 017350 1917 017352 1921 017357 1928 017361 1930 017407 1934 017421 1942 017423 1944 017452 1945 017462 1946 017465 1947 017470 1948 017476 1949 017503 1953 017510 1959 017512 1964 017526 1972 017542 1975 017557 1976 017561 1978 017606 1980 017607 1982 017630 1984 017650 1986 017652 1987 017703 1988 017704 1990 017707 1991 017711 1993 017713 1994 017744 1997 017745 1999 017764 2000 017770 2001 020007 2002 020010 2003 020013 2006 020014 2008 020015 2009 020035 2011 020037 2026 020050 2014 020051 2020 020065 2022 020121 2024 020140 2028 020141 2035 020143 2036 020151 2037 020157 2039 020170 2041 020171 2048 020205 2050 020210 2051 020262 2053 020264 2055 020274 2057 020344 2059 020346 2066 020350 2067 020357 2068 020370 2069 020371 2070 020375 2071 020377 2072 020400 2074 020404 2076 020405 2080 020406 2082 020411 2084 020421 2085 020423 2087 020440 2089 020452 2092 020454 2094 020466 2096 020467 2100 020503 2104 020552 2106 020575 2108 020576 2115 020612 2117 020615 2118 020620 2121 020636 2123 020751 2124 021015 2127 021021 2128 021033 2132 021056 2133 021063 2135 021075 2136 021104 2137 021111 2138 021115 2139 021155 2140 021160 2142 021201 2144 021202 2149 021213 2151 021233 2153 021244 2155 021304 ----------------------------------------------------------- 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