COMPILATION LISTING OF SEGMENT linus_write_data_file Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 03/15/88 1554.0 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* *********************************************************** */ 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(88-01-27,Dupuis), approve(88-03-03,MCR7844), audit(88-03-14,Blair), 12* install(88-03-15,MR12.2-1036): 13* Implemented the -progress/-no_progress control arguments. 14* END HISTORY COMMENTS */ 15 16 17 /* format: off */ 18 19 /* This is the main level procedure called by ssu_ to implement the 20* linus write_data_file request. Description and usage follows. 21* 22* Description: 23* 24* This request retrieves the selected data from the data base and writes 25* it to a file which can later be input to the load_data_file request. 26* 27* Usage: "write_data_file pathname {-control_args}" 28* 29* pathname is the required file where the data will be written to. 30* 31* -control_args can be: 32* 33* -column_delimiter X -- the delimiter used to separate column values. 34* X can be any single ascii character (default is one blank). The old 35* control arg -delimiter is still accepted but not documented. 36* 37* -create_columns N {... N} -- new columns with null values are placed in 38* the specified column positions. 39* 40* -extend -- the file is extended rather than truncated. 41* 42* -progress {N} -- prints a progress report every N tuples, where N defaults 43* to linus_data_$trace_every_n_tuples if not specified. 44* 45* -row_delimiter X -- the delimiter used to separate rows. X can be any 46* single ascii character (default is newline character). 47* 48* -truncate -- the file is truncated rather than extended (default). 49* 50* Both parameters are passed to this request by ssu_. 51* 52* Known Bugs: 53* 54* Other Problems: 55* 56* History: 57* 58* Written - Al Dupuis - September 1983. 59* 60**/ 61 62 linus_write_data_file: proc ( 63 64 sci_ptr_parm, /* input: ptr to the subsystem control info structure */ 65 lcb_ptr_parm /* input: ptr to the linus control block info structure */ 66 ); 67 68 dcl sci_ptr_parm ptr parm; 69 dcl lcb_ptr_parm ptr parm; 70 71 /* 72* Mainline Processing Overview: 73* 74* (1) Process control arguments setting flags and collecting values. 75* 76* (2) Have the subroutine do all the work (it reports errors and calls 77* ssu_$abort_line if things don't go well). 78* 79**/ 80 81 call initialize; 82 on cleanup call terminate; 83 call process_args; 84 call linus_create_data_file (lcb_ptr, addr (data_file_info)); 85 call terminate; 86 87 return; 88 89 initialize: proc; 90 91 sci_ptr = sci_ptr_parm; 92 lcb_ptr = lcb_ptr_parm; 93 94 unspec (data_file_info) = OFF; 95 data_file_info.column_delimiter = TILDE; 96 data_file_info.row_delimiter = NEWLINE; 97 data_file_info.trace_every_n_tuples = linus_data_$trace_every_n_tuples; 98 99 data_file_info.flags.truncate_file = ON; 100 data_file_info.flags.check_values_for_delimiters = ON; 101 create_columns_map_has_been_allocated = OFF; 102 103 return; 104 105 end initialize; 106 107 process_args: proc; 108 109 call ssu_$arg_count (sci_ptr, number_of_args_supplied); 110 if number_of_args_supplied = 0 111 then call ssu_$abort_line (sci_ptr, error_table_$noarg, 112 "^/Usage: write_data_file pathname {-control_args}."); 113 114 call ssu_$arg_ptr (sci_ptr, 1, arg_ptr, arg_length); 115 data_file_info.output_file_pathname = arg; 116 if number_of_args_supplied = 1 117 then return; 118 119 current_arg_number = 2; 120 still_processing_args = ON; 121 122 do while (still_processing_args); 123 124 call ssu_$arg_ptr (sci_ptr, current_arg_number, arg_ptr, arg_length); 125 argument_type = lookup_arg_number (arg); 126 if argument_type = 0 127 then call ssu_$abort_line (sci_ptr, error_table_$badopt, 128 "^/Invalid control argument ^a.", arg); 129 else; 130 131 if argument_type ^> ARGUMENT_TYPE_1 132 then call process_args_type_1 (argument_type); 133 else if argument_type ^> ARGUMENT_TYPE_2 134 then call process_args_type_2 (argument_type); 135 else if argument_type ^> ARGUMENT_TYPE_3 136 then call process_args_type_3 (argument_type); 137 else call process_args_type_4 (argument_type); 138 139 current_arg_number = current_arg_number + 1; 140 if current_arg_number > number_of_args_supplied 141 then still_processing_args = OFF; 142 143 end; 144 145 return; 146 147 lookup_arg_number: proc ( 148 argument_parm /* input: name of control argument */ 149 ) returns (fixed bin); 150 151 dcl argument_parm char (*) parm; 152 153 if argument_parm = "-column_delimiter" | argument_parm = "-cdm" 154 then return (COLUMN_DELIMITER_INDEX); 155 else if argument_parm = "-row_delimiter" | argument_parm = "-rdm" 156 then return (ROW_DELIMITER_INDEX); 157 else if argument_parm = "-extend" 158 then return (EXTEND_INDEX); 159 else if argument_parm = "-truncate" | argument_parm = "-tc" 160 then return (TRUNCATE_INDEX); 161 else if argument_parm = "-create_columns" | argument_parm = "-crc" 162 then return (CREATE_COLUMNS_INDEX); 163 else if argument_parm = "-progress" | argument_parm = "-pg" 164 then return (TRACE_INDEX); 165 else if argument_parm = "-no_progress" | argument_parm = "-npg" 166 then return (NO_TRACE_INDEX); 167 else return (0); 168 169 end lookup_arg_number; 170 171 process_args_type_1: proc ( 172 173 argument_type_parm /* input: index for type of argument */ 174 ); 175 176 dcl argument_type_parm fixed bin parm; 177 178 current_arg_number = current_arg_number + 1; 179 if current_arg_number > number_of_args_supplied 180 then call ssu_$abort_line (sci_ptr, error_table_$inconsistent, 181 ERROR_MESSAGE_FOR_MISSING_MODIFIER (argument_type)); 182 183 call ssu_$arg_ptr (sci_ptr, current_arg_number, arg_ptr, arg_length); 184 if arg_length ^= 1 185 then call ssu_$abort_line (sci_ptr, error_table_$bad_arg, 186 ERROR_MESSAGE_FOR_MISSING_MODIFIER (argument_type) 187 || "^/The delimiter ""^a"" is invalid.", arg); 188 else; 189 if argument_type = COLUMN_DELIMITER_INDEX 190 then data_file_info.column_delimiter = arg; 191 else data_file_info.row_delimiter = arg; 192 193 return; 194 195 end process_args_type_1; 196 197 process_args_type_2: proc ( 198 199 pat2_argument_type_parm /* input: index for type of argument */ 200 ); 201 202 dcl pat2_argument_type_parm fixed bin parm; 203 dcl pat2_current_arg_number fixed bin; 204 dcl pat2_error_occured bit (1) aligned; 205 dcl pat2_loop fixed bin; 206 dcl pat2_still_processing_args bit (1) aligned; 207 208 current_arg_number = current_arg_number + 1; 209 pat2_error_occured = OFF; 210 if current_arg_number > number_of_args_supplied 211 then pat2_error_occured = ON; 212 else do; 213 call ssu_$arg_ptr (sci_ptr, current_arg_number, arg_ptr, arg_length); 214 if arg_length = 0 215 then pat2_error_occured = ON; 216 else if substr (arg, 1, 1) = "-" 217 then pat2_error_occured = ON; 218 else; 219 end; 220 if pat2_error_occured 221 then call ssu_$abort_line (sci_ptr, error_table_$inconsistent, 222 ERROR_MESSAGE_FOR_MISSING_MODIFIER (argument_type)); 223 else; 224 225 if create_columns_map_has_been_allocated 226 then do; 227 free create_columns_map in (lcb.static_area); 228 create_columns_map_has_been_allocated = OFF; 229 data_file_info.flags.create_new_columns = OFF; 230 end; 231 232 create_columns_map_init_number_of_columns = 0; 233 pat2_current_arg_number = current_arg_number; 234 pat2_still_processing_args = ON; 235 236 do while (pat2_still_processing_args); 237 call ssu_$arg_ptr (sci_ptr, pat2_current_arg_number, arg_ptr, arg_length); 238 if arg_length ^> 0 239 then pat2_still_processing_args = OFF; 240 else if substr (arg, 1, 1) = "-" 241 then pat2_still_processing_args = OFF; 242 else do; 243 create_columns_map_init_number_of_columns 244 = create_columns_map_init_number_of_columns + 1; 245 pat2_current_arg_number = pat2_current_arg_number + 1; 246 if pat2_current_arg_number > number_of_args_supplied 247 then pat2_still_processing_args = OFF; 248 else; 249 end; 250 end; 251 252 allocate create_columns_map in (lcb.static_area) 253 set (create_cm_ptr); 254 create_columns_map_has_been_allocated = ON; 255 create_columns_map.column_numbers (*) = 0; 256 257 do pat2_loop = 1 to create_columns_map_init_number_of_columns; 258 call ssu_$arg_ptr (sci_ptr, current_arg_number, arg_ptr, arg_length); 259 if verify (arg, DIGITS) ^= 0 260 then call ssu_$abort_line (sci_ptr, 0, 261 "The argument ""^a"" could not be converted to a column position.", arg); 262 create_columns_map.column_numbers (pat2_loop) 263 = convert (pat2_loop, arg); 264 if create_columns_map.column_numbers (pat2_loop) = 0 265 then call ssu_$abort_line (sci_ptr, 0, 266 "The argument ""^a"" cannot be used a column position.", arg); 267 current_arg_number = current_arg_number + 1; 268 end; 269 270 data_file_info.create_columns_map_ptr = create_cm_ptr; 271 data_file_info.flags.create_new_columns = ON; 272 273 return; 274 275 end process_args_type_2; 276 277 process_args_type_3: proc ( 278 279 argument_type_parm /* input: index for type of argument */ 280 ); 281 282 dcl argument_type_parm fixed bin parm; 283 284 if argument_type = EXTEND_INDEX 285 then data_file_info.flags.truncate_file = OFF; 286 else if argument_type = TRUNCATE_INDEX 287 then data_file_info.flags.truncate_file = ON; 288 else if argument_type = NO_TRACE_INDEX 289 then do; 290 data_file_info.tracing = OFF; 291 data_file_info.trace_every_n_tuples = linus_data_$trace_every_n_tuples; 292 end; 293 294 return; 295 296 end process_args_type_3; 297 298 process_args_type_4: proc ( 299 300 argument_type_parm /* input: index for type of argument */ 301 ); 302 303 dcl argument_type_parm fixed bin parm; 304 305 data_file_info.tracing = ON; 306 307 if current_arg_number + 1 > number_of_args_supplied 308 then return; 309 310 call ssu_$arg_ptr (sci_ptr, current_arg_number + 1, arg_ptr, arg_length); 311 if verify (arg, "01234546789") = 0 312 then do; 313 data_file_info.trace_every_n_tuples = convert (data_file_info.trace_every_n_tuples, arg); 314 current_arg_number = current_arg_number + 1; 315 end; 316 317 return; 318 319 end process_args_type_4; 320 321 end process_args; 322 323 terminate: proc; 324 325 if create_columns_map_has_been_allocated 326 then do; 327 free create_columns_map in (lcb.static_area); 328 create_columns_map_has_been_allocated = OFF; 329 end; 330 331 return; 332 333 end terminate; 334 335 dcl ARGUMENT_TYPE_1 fixed bin static internal options (constant) init (2); 336 dcl ARGUMENT_TYPE_2 fixed bin static internal options (constant) init (3); 337 dcl ARGUMENT_TYPE_3 fixed bin static internal options (constant) init (6); 338 339 dcl COLUMN_DELIMITER_INDEX fixed bin static internal options (constant) init (1); 340 dcl CREATE_COLUMNS_INDEX fixed bin static internal options (constant) init (3); 341 342 dcl DIGITS char (10) static internal options (constant) init ("0123456789"); 343 344 dcl ERROR_MESSAGE_FOR_MISSING_MODIFIER (ARGUMENT_TYPE_2) char (65) init ( 345 "^/-column_delimiter must be followed by a single ascii character.", 346 "^/-row_delimiter must be followed by a single ascii character.", 347 "^/-create_columns must be followed by column numbers." 348 ); 349 dcl EXTEND_INDEX fixed bin static internal options (constant) init (4); 350 351 dcl NEWLINE char (1) static internal options (constant) init (" 352 "); 353 dcl NO_TRACE_INDEX fixed bin static internal options (constant) init (6); 354 355 dcl OFF bit (1) aligned static internal options (constant) init ("0"b); 356 dcl ON bit (1) aligned static internal options (constant) init ("1"b); 357 358 dcl ROW_DELIMITER_INDEX fixed bin static internal options (constant) init (2); 359 360 dcl TILDE char (1) static internal options (constant) init ("~"); 361 dcl TRUNCATE_INDEX fixed bin static internal options (constant) init (5); 362 dcl TRACE_INDEX fixed bin static internal options (constant) init (7); 363 364 dcl addr builtin; 365 dcl arg char (arg_length) based (arg_ptr); 366 dcl arg_length fixed bin (21); 367 dcl arg_ptr ptr; 368 dcl argument_type fixed bin; 369 370 dcl cleanup condition; 371 dcl convert builtin; 372 dcl create_columns_map_has_been_allocated bit (1) aligned; 373 dcl current_arg_number fixed bin; 374 375 dcl error_table_$bad_arg fixed bin(35) ext static; 376 dcl error_table_$badopt fixed bin(35) ext static; 377 dcl error_table_$inconsistent fixed bin(35) ext static; 378 dcl error_table_$noarg fixed bin(35) ext static; 379 380 dcl fixed builtin; 381 382 dcl linus_create_data_file entry (ptr, ptr); 383 dcl linus_data_$trace_every_n_tuples fixed bin (35) external static; 384 385 dcl number_of_args_supplied fixed bin; 386 387 dcl rel builtin; 388 389 dcl sci_ptr ptr; 390 dcl ssu_$abort_line entry() options(variable); 391 dcl ssu_$arg_count entry (ptr, fixed bin); 392 dcl ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin(21)); 393 dcl still_processing_args bit (1) aligned; 394 dcl substr builtin; 395 dcl sys_info$max_seg_size fixed bin(35) ext static; 396 397 dcl unspec builtin; 398 399 dcl verify builtin; 400 1 1 /* BEGIN INCLUDE FILE linus_data_file_info.incl.pl1 1 2* 1 3* Written - Al Dupuis - September 1983 1 4**/ 1 5 1 6 /****^ HISTORY COMMENTS: 1 7* 1) change(88-01-27,Dupuis), approve(88-03-03,MCR7844), 1 8* audit(88-03-14,Blair), install(88-03-15,MR12.2-1036): 1 9* Added the trace_every_n_tuples field and the tracing flag. 1 10* END HISTORY COMMENTS */ 1 11 1 12 /* format: off */ 1 13 1 14 dcl 1 create_columns_map aligned based (create_cm_ptr), 1 15 2 number_of_columns fixed bin, 1 16 2 column_numbers (create_columns_map_init_number_of_columns refer (create_columns_map.number_of_columns)) fixed bin; 1 17 dcl create_columns_map_init_number_of_columns fixed bin; 1 18 dcl create_cm_ptr ptr; 1 19 1 20 dcl 1 data_file_info aligned, 1 21 2 flags, 1 22 3 truncate_file bit (1) unaligned, /* ON means truncate */ 1 23 3 check_values_for_delimiters bit (1) unaligned, /* ON means to check */ 1 24 3 process_quotes bit (1) unaligned, /* ON means process quotes */ 1 25 3 process_whitespace bit (1) unaligned, /* ON means treat all whitespace as one blank */ 1 26 3 last_column_delimiter_is_optional bit (1) unaligned, /* ON means last column delimiter is optional */ 1 27 3 create_new_columns bit (1) unaligned, /* ON means create new columns */ 1 28 3 file_is_opened bit (1) unaligned, /* ON means file is opened */ 1 29 3 file_is_attached bit (1) unaligned, /* ON means file is attached */ 1 30 3 end_of_file_has_been_hit bit (1) unaligned, /* ON means we've already hit EOF */ 1 31 3 tracing bit (1) unaligned, /* ON means we need to give progress reports */ 1 32 3 available bit (26) unaligned, 1 33 2 current_row_number fixed bin (35), /* current row number in table */ 1 34 2 current_line_number fixed bin (35), /* current line number of file */ 1 35 2 current_char_in_buffer fixed bin (35), /* index of where we're about to start */ 1 36 2 current_char_in_previous_buffer fixed bin (35), /* index of where we left off in previous buffer */ 1 37 2 file_buffer_length fixed bin (21), /* length of file buffer in chars */ 1 38 2 trace_every_n_tuples fixed bin (35), /* print a progress report every n */ 1 39 2 create_columns_map_ptr ptr, /* points to create_columns_map structure */ 1 40 2 file_iocb_ptr ptr, /* points to iocb for file */ 1 41 2 file_buffer_ptr ptr, /* points to buffer for file */ 1 42 2 column_delimiter char (1) unaligned, /* a single ascii character */ 1 43 2 row_delimiter char (1) unaligned, /* a single ascii character */ 1 44 2 output_file_pathname char (168) unaligned, /* path of output file */ 1 45 2 entry_name char (32) unaligned, /* dir name where file is located */ 1 46 2 directory_name char (168) unaligned; /* entry name of file */ 1 47 1 48 /* END INCLUDE FILE linus_data_file_info.incl.pl1 */ 401 402 2 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 2 2 2 3 2 4 2 5 /****^ HISTORY COMMENTS: 2 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 2 7* install(86-07-29,MR12.0-1106): 2 8* Added general_work_area_ptr and renamed sfr_ptr to 2 9* force_retrieve_scope_ptr. 2 10* END HISTORY COMMENTS */ 2 11 2 12 2 13 /* HISTORY: 2 14* 2 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 2 16* 2 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 2 18* a part of the attribute level control work. 2 19* 2 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 2 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 2 22* scope information. 2 23* 2 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 2 25* retaining various vcpu times to be collected when in timing mode. The 2 26* times to be collected are: LINUS parsing time, LINUS processing time, and 2 27* MRDS processing time. 2 28* 2 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 2 30* part of the line numbering implementation. This allows for possible later 2 31* LINUS control of the build defaults. 2 32* 2 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 2 34* information is now retained by ssu_. Removed parse_timer as no longer 2 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 2 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 2 37* 2 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 2 39* subsystem_invocation_level, and selection_expression_identifier. 2 40* 2 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 2 42* table_control_info_ptr. 2 43* 2 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 2 45* 2 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 2 47* 2 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 2 49* 2 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 2 51**/ 2 52 2 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 2 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 2 55 2 rb_len fixed bin (21), /* length of request buffer */ 2 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 2 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 2 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 2 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 2 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 2 61 2 test_flag bit (1) unal, /* on if in test mode */ 2 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 2 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 2 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 2 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 2 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 2 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 2 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 2 69 2 reserved bit (27) unal, 2 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 2 71 2 rb_ptr ptr, /* ptr to request buffer */ 2 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 2 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 2 74 2 ttn_ptr ptr, /* pointer to table info structure */ 2 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 2 76 2 lv_ptr ptr, /* pointer linus variables */ 2 77 2 si_ptr ptr, /* pointer to select_info structure */ 2 78 2 setfi_ptr ptr, /* pointer to set function information */ 2 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 2 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 2 81 2 lit_ptr ptr, /* pointer to literal pool */ 2 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 2 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 2 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 2 85* (MR7.0) */ 2 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 2 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 2 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 2 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 2 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 2 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 2 92* for current lila expression */ 2 93 2 unused_timer float bin (63), /* future expansion */ 2 94 2 request_time float bin (63), /* How much request time was spent 2 95* in LINUS. (-1 = user has just enabled 2 96* timing, do not report) */ 2 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 2 98 2 build_increment fixed bin, /* default increment for build mode */ 2 99 2 build_start fixed bin, /* default start count for build mode */ 2 100 2 linus_version char (4), /* current version of LINUS */ 2 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 2 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 2 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 2 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 2 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 2 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 2 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 2 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 2 109 2 word_pad (6) bit (36) unal, 2 110 /* procedures that will be optionally */ 2 111 /* replaced by the user. Saved so they */ 2 112 /* can be reinstated if desired. */ 2 113 2 ssu_abort_line entry options (variable), 2 114 2 ssu_post_request_line variable entry (ptr), 2 115 2 ssu_pre_request_line variable entry (ptr), 2 116 2 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 2 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 2 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 2 120 2 121 dcl lcb_ptr ptr; 2 122 2 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 403 404 405 end linus_write_data_file; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/15/88 1551.5 linus_write_data_file.pl1 >spec>install>MR12.2-1036>linus_write_data_file.pl1 401 1 03/15/88 1550.1 linus_data_file_info.incl.pl1 >spec>install>MR12.2-1036>linus_data_file_info.incl.pl1 403 2 07/29/86 1148.4 linus_lcb.incl.pl1 >ldd>include>linus_lcb.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. ARGUMENT_TYPE_1 constant fixed bin(17,0) initial dcl 335 ref 131 ARGUMENT_TYPE_2 constant fixed bin(17,0) initial dcl 336 ref 133 344 ARGUMENT_TYPE_3 constant fixed bin(17,0) initial dcl 337 ref 135 COLUMN_DELIMITER_INDEX constant fixed bin(17,0) initial dcl 339 ref 153 189 CREATE_COLUMNS_INDEX constant fixed bin(17,0) initial dcl 340 ref 161 DIGITS 000000 constant char(10) initial packed unaligned dcl 342 ref 259 ERROR_MESSAGE_FOR_MISSING_MODIFIER 000100 automatic char(65) initial array packed unaligned dcl 344 set ref 179* 184 220* 344* 344* 344* EXTEND_INDEX constant fixed bin(17,0) initial dcl 349 ref 157 284 NEWLINE constant char(1) initial packed unaligned dcl 351 ref 96 NO_TRACE_INDEX constant fixed bin(17,0) initial dcl 353 ref 165 288 OFF constant bit(1) initial dcl 355 ref 94 101 140 209 228 229 238 240 246 284 290 328 ON constant bit(1) initial dcl 356 ref 99 100 120 210 214 216 234 254 271 286 305 ROW_DELIMITER_INDEX constant fixed bin(17,0) initial dcl 358 ref 155 TILDE constant char(1) initial packed unaligned dcl 360 ref 95 TRACE_INDEX constant fixed bin(17,0) initial dcl 362 ref 163 TRUNCATE_INDEX constant fixed bin(17,0) initial dcl 361 ref 159 286 addr builtin function dcl 364 ref 84 84 arg based char packed unaligned dcl 365 set ref 115 125* 126* 184* 189 191 216 240 259 259* 262 264* 311 313 arg_length 000161 automatic fixed bin(21,0) dcl 366 set ref 114* 115 124* 125 125 126 126 183* 184 184 184 189 191 213* 214 216 237* 238 240 258* 259 259 259 262 264 264 310* 311 313 arg_ptr 000162 automatic pointer dcl 367 set ref 114* 115 124* 125 126 183* 184 189 191 213* 216 237* 240 258* 259 259 262 264 310* 311 313 argument_parm parameter char packed unaligned dcl 151 ref 147 153 153 155 155 157 159 159 161 161 163 163 165 165 argument_type 000164 automatic fixed bin(17,0) dcl 368 set ref 125* 126 131 131* 133 133* 135 135* 137* 179 184 189 220 284 286 288 argument_type_parm parameter fixed bin(17,0) dcl 176 in procedure "process_args_type_1" ref 171 argument_type_parm parameter fixed bin(17,0) dcl 303 in procedure "process_args_type_4" ref 298 argument_type_parm parameter fixed bin(17,0) dcl 282 in procedure "process_args_type_3" ref 277 check_values_for_delimiters 0(01) 000206 automatic bit(1) level 3 packed packed unaligned dcl 1-20 set ref 100* cleanup 000166 stack reference condition dcl 370 ref 82 column_delimiter 16 000206 automatic char(1) level 2 packed packed unaligned dcl 1-20 set ref 95* 189* column_numbers 1 based fixed bin(17,0) array level 2 dcl 1-14 set ref 255* 262* 264 convert builtin function dcl 371 ref 262 313 create_cm_ptr 000204 automatic pointer dcl 1-18 set ref 227 252* 255 262 264 270 327 create_columns_map based structure level 1 dcl 1-14 set ref 227 252 327 create_columns_map_has_been_allocated 000174 automatic bit(1) dcl 372 set ref 101* 225 228* 254* 325 328* create_columns_map_init_number_of_columns 000203 automatic fixed bin(17,0) dcl 1-17 set ref 232* 243* 243 252 252 257 create_columns_map_ptr 10 000206 automatic pointer level 2 dcl 1-20 set ref 270* create_new_columns 0(05) 000206 automatic bit(1) level 3 packed packed unaligned dcl 1-20 set ref 229* 271* current_arg_number 000175 automatic fixed bin(17,0) dcl 373 set ref 119* 124* 139* 139 140 178* 178 179 183* 208* 208 210 213* 233 258* 267* 267 307 310 314* 314 data_file_info 000206 automatic structure level 1 dcl 1-20 set ref 84 84 94* error_table_$bad_arg 000010 external static fixed bin(35,0) dcl 375 set ref 184* error_table_$badopt 000012 external static fixed bin(35,0) dcl 376 set ref 126* error_table_$inconsistent 000014 external static fixed bin(35,0) dcl 377 set ref 179* 220* error_table_$noarg 000016 external static fixed bin(35,0) dcl 378 set ref 110* flags 000206 automatic structure level 2 dcl 1-20 lcb based structure level 1 dcl 2-53 lcb_ptr 000362 automatic pointer dcl 2-121 set ref 84* 92* 227 252 327 lcb_ptr_parm parameter pointer dcl 69 ref 62 92 linus_create_data_file 000020 constant entry external dcl 382 ref 84 linus_data_$trace_every_n_tuples 000022 external static fixed bin(35,0) dcl 383 ref 97 291 number_of_args_supplied 000176 automatic fixed bin(17,0) dcl 385 set ref 109* 110 116 140 179 210 246 307 number_of_columns based fixed bin(17,0) level 2 dcl 1-14 set ref 227 252* 255 327 output_file_pathname 16(18) 000206 automatic char(168) level 2 packed packed unaligned dcl 1-20 set ref 115* pat2_argument_type_parm parameter fixed bin(17,0) dcl 202 ref 197 pat2_current_arg_number 000424 automatic fixed bin(17,0) dcl 203 set ref 233* 237* 245* 245 246 pat2_error_occured 000425 automatic bit(1) dcl 204 set ref 209* 210* 214* 216* 220 pat2_loop 000426 automatic fixed bin(17,0) dcl 205 set ref 257* 262 262 264* pat2_still_processing_args 000427 automatic bit(1) dcl 206 set ref 234* 236 238* 240* 246* row_delimiter 16(09) 000206 automatic char(1) level 2 packed packed unaligned dcl 1-20 set ref 96* 191* sci_ptr 000200 automatic pointer dcl 389 set ref 91* 109* 110* 114* 124* 126* 179* 183* 184* 213* 220* 237* 258* 259* 264* 310* sci_ptr_parm parameter pointer dcl 68 ref 62 91 ssu_$abort_line 000024 constant entry external dcl 390 ref 110 126 179 184 220 259 264 ssu_$arg_count 000026 constant entry external dcl 391 ref 109 ssu_$arg_ptr 000030 constant entry external dcl 392 ref 114 124 183 213 237 258 310 static_area 144 based area level 2 dcl 2-53 ref 227 252 327 still_processing_args 000202 automatic bit(1) dcl 393 set ref 120* 122 140* substr builtin function dcl 394 ref 216 240 trace_every_n_tuples 6 000206 automatic fixed bin(35,0) level 2 dcl 1-20 set ref 97* 291* 313* 313 tracing 0(09) 000206 automatic bit(1) level 3 packed packed unaligned dcl 1-20 set ref 290* 305* truncate_file 000206 automatic bit(1) level 3 packed packed unaligned dcl 1-20 set ref 99* 284* 286* unspec builtin function dcl 397 set ref 94* verify builtin function dcl 399 ref 259 311 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. fixed builtin function dcl 380 rel builtin function dcl 387 sys_info$max_seg_size external static fixed bin(35,0) dcl 395 NAMES DECLARED BY EXPLICIT CONTEXT. initialize 000334 constant entry internal dcl 89 ref 81 linus_write_data_file 000240 constant entry external dcl 62 lookup_arg_number 000604 constant entry internal dcl 147 ref 125 process_args 000364 constant entry internal dcl 107 ref 83 process_args_type_1 000732 constant entry internal dcl 171 ref 131 process_args_type_2 001063 constant entry internal dcl 197 ref 133 process_args_type_3 001434 constant entry internal dcl 277 ref 135 process_args_type_4 001461 constant entry internal dcl 298 ref 137 terminate 001541 constant entry internal dcl 323 ref 82 85 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2136 2170 1771 2146 Length 2426 1771 32 222 145 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_write_data_file 802 external procedure is an external procedure. on unit on line 82 64 on unit initialize internal procedure shares stack frame of external procedure linus_write_data_file. process_args internal procedure shares stack frame of external procedure linus_write_data_file. lookup_arg_number internal procedure shares stack frame of external procedure linus_write_data_file. process_args_type_1 internal procedure shares stack frame of external procedure linus_write_data_file. process_args_type_2 internal procedure shares stack frame of external procedure linus_write_data_file. process_args_type_3 internal procedure shares stack frame of external procedure linus_write_data_file. process_args_type_4 internal procedure shares stack frame of external procedure linus_write_data_file. terminate 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_write_data_file 000100 ERROR_MESSAGE_FOR_MISSING_MODIFIER linus_write_data_file 000161 arg_length linus_write_data_file 000162 arg_ptr linus_write_data_file 000164 argument_type linus_write_data_file 000174 create_columns_map_has_been_allocated linus_write_data_file 000175 current_arg_number linus_write_data_file 000176 number_of_args_supplied linus_write_data_file 000200 sci_ptr linus_write_data_file 000202 still_processing_args linus_write_data_file 000203 create_columns_map_init_number_of_columns linus_write_data_file 000204 create_cm_ptr linus_write_data_file 000206 data_file_info linus_write_data_file 000362 lcb_ptr linus_write_data_file 000424 pat2_current_arg_number process_args_type_2 000425 pat2_error_occured process_args_type_2 000426 pat2_loop process_args_type_2 000427 pat2_still_processing_args process_args_type_2 THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op ext_entry int_entry any_to_any_truncate_op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. linus_create_data_file ssu_$abort_line ssu_$arg_count ssu_$arg_ptr THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$badopt error_table_$inconsistent error_table_$noarg linus_data_$trace_every_n_tuples LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 62 000234 344 000245 81 000270 82 000271 83 000313 84 000314 85 000327 87 000333 89 000334 91 000335 92 000341 94 000344 95 000347 96 000351 97 000353 99 000356 100 000360 101 000362 103 000363 107 000364 109 000365 110 000376 114 000424 115 000443 116 000450 119 000454 120 000456 122 000460 124 000462 125 000477 126 000516 131 000553 133 000561 135 000566 137 000573 139 000575 140 000576 143 000602 145 000603 147 000604 153 000615 155 000632 157 000645 159 000654 161 000667 163 000702 165 000715 167 000730 171 000732 178 000734 179 000735 183 000765 184 001002 189 001044 191 001055 193 001062 197 001063 208 001065 209 001066 210 001067 213 001075 214 001112 216 001117 220 001126 225 001155 227 001157 228 001163 229 001164 232 001166 233 001167 234 001171 236 001173 237 001176 238 001213 240 001217 243 001226 245 001227 246 001230 250 001234 252 001235 254 001246 255 001250 257 001260 258 001267 259 001304 262 001354 264 001365 267 001424 268 001425 270 001427 271 001431 273 001433 277 001434 284 001436 286 001444 288 001451 290 001453 291 001455 294 001460 298 001461 305 001463 307 001465 310 001472 311 001512 313 001526 314 001536 317 001537 323 001540 325 001546 327 001551 328 001555 331 001557 ----------------------------------------------------------- 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