COMPILATION LISTING OF SEGMENT remote_driver_ Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 11/01/88 1239.9 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 /* format: style4 */ 13 14 /* format: off */ 15 16 /* Standard remote device driver control module for the I/O daemon. */ 17 18 /* Adapted from g115_driver_ by David Vinograd - March 1977 */ 19 /* Modified by J. C. Whitmore, 4/78, for new dprint_msg format and Daemon upgrade */ 20 /* Modified by J. C. Whitmore, 8/78, to defer requests over phys ll and for auto defer time init */ 21 /* Modified by J. C. Whitmore, 10/78, to extend the number of RJE stations */ 22 /* Modified by J. C. Whitmore, 3/79, for minor bug fixes */ 23 /* Modified by C. Hornig, 6/79, for multiple minor devices of the same generic type */ 24 /* Modified by J. C. Whitmore, 10/79, for binary punching and commands sep_cards, punch, pun_control */ 25 /* Modified: 2 April 1981 by G. Palter correct a bug which causes use of "logout", "new_device", etc. requests during the 26* processing of a request to cause a null pointer fault by iox_ followed by flushing the remaining requests 27* in the queue */ 28 /* Modified: October 1981 by C. Hornig to support attach_type 3 (dial_id) */ 29 /* Modified: 9 November 1981 by G. Palter to use read_password_ to get the station password if it is omitted from the 30* station command */ 31 /* Modified: 17 November 1981 by G. Palter to not consider inability to set hangup_proc as fatal */ 32 /* Modified: 11 December 1981 by G. Palter to support auto_go and force_ctl_char for printer minor devices */ 33 /* Modified: November 1983 by C. Marker Added support for force_nsep */ 34 /* Modified: January 1984 by C. Marker Added probe as a legal command in test mode. */ 35 /* Modified 1984-08-17 by E. Swenson for Version 2 PNTs. */ 36 /* Modified 14 Feb 1984 by Jim Homan for logout_on_hangup */ 37 /* Modified: February 23, 1985 by C. Marker to use version 5 message segments */ 38 39 40 /****^ HISTORY COMMENTS: 41* 1) change(84-02-14,Homan), approve(87-04-06,MCR7656), 42* audit(87-06-13,Beattie), install(87-08-06,MR12.1-1068): 43* Submit logout_on_hangup changes for installation. 44* 2) change(87-05-01,Gilcrease), approve(87-05-14,MCR7686), 45* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 46* Update to version 4 dprint_msg. 47* 3) change(88-02-18,Brunelle), approve(88-06-28,MCR7911), 48* audit(88-10-26,Parisek): 49* Add support for single/continuous paper type. 50* 4) change(88-08-29,Farley), approve(88-06-28,MCR7911), 51* audit(88-10-26,Parisek): 52* Updated for version 5 dprint_msg. 53* 5) change(88-10-31,Brunelle), approve(88-10-31,MCR7911), 54* audit(88-11-01,Wallman): 55* Correct problem of requiring a model name if single sheet mode defined. 56* END HISTORY COMMENTS */ 57 58 59 /* format: on */ 60 61 remote_driver_: 62 procedure (); 63 64 return; /* this is not a legal entry */ 65 66 /* Parameters */ 67 68 dcl a_argp ptr parameter; 69 dcl a_source fixed bin parameter; /* 1 = master console, 2 = slave */ 70 dcl a_state fixed bin parameter; /* 0 = not quite ready to handle a request */ 71 /* 1 = drivers are ready */ 72 /* 2 = command entered after a quit */ 73 dcl a_stream char (*) parameter; 74 dcl a_banner_type fixed bin parameter; /* type of banner to be written */ 75 /* 1 = heading banner */ 76 /* 2 = tail banner */ 77 /* 3 = error message */ 78 dcl a_data_ptr ptr parameter; /* pointer to output request data or */ 79 /* to char(256) varying string error msg */ 80 dcl a_code fixed bin (35) parameter; /* error code */ 81 82 /* Automatic */ 83 84 dcl age fixed bin; 85 dcl arg_string char (32); 86 dcl argp ptr; 87 dcl attach_desc char (256) var; 88 dcl banner_type fixed bin; 89 dcl code fixed bin (35); 90 dcl control bit (36) aligned; 91 dcl date_string char (24); 92 dcl device_type char (32); 93 dcl digit char (1); 94 dcl element_size fixed bin; 95 dcl err_msg char (200); 96 dcl format_code fixed bin; 97 dcl header_card2 char (80); 98 dcl (i, idx) fixed bin; /* general index variable */ 99 dcl ignore_code fixed bin (35); /* error code to be ignored */ 100 dcl input_line char (80); 101 dcl len fixed bin; 102 dcl iocbp ptr; 103 dcl major_args char (major_args_length) based (major_args_ptr); 104 dcl major_args_length fixed bin int static; 105 dcl major_args_name char (256) varying; 106 dcl major_comm_module char (32) var; 107 dcl major_desc char (256) var; 108 dcl major_terminal_module char (32) var; 109 dcl major_tty char (32) var; 110 dcl minor_args char (minor_args_length) based (minor_args_ptr); 111 dcl minor_args_length fixed bin int static; 112 dcl minor_args_name char (256) varying; 113 dcl model char (32) var; 114 dcl my_area area based (my_area_ptr); /* area to allocate in */ 115 dcl nchar fixed bin; 116 dcl need_station bit (1); 117 dcl new_ll fixed bin; /* temp for the new phys line length */ 118 dcl new_lpi fixed bin; /* and for the new lines per inch value */ 119 dcl new_pl fixed bin; /* temp for setting the phys page length */ 120 dcl not bit (1); 121 dcl omode char (256); 122 dcl opr_msg char (160); /* message to tell operator we are ready, etc. */ 123 dcl p ptr; 124 dcl p2 ptr; 125 dcl pos fixed bin; 126 dcl pool_dir char (168); /* dirname for the card pool root */ 127 dcl printer_count fixed bin; /* number of printer minor devices (during init) */ 128 dcl punch_count fixed bin; /* number of punch minor devices (during init) */ 129 dcl ready_device bit (1) aligned; /* ON => there's at least one minor device that's ready */ 130 dcl req_string char (12); /* place for the request number as characters */ 131 dcl rqt_string char (168) var; 132 dcl save_code fixed bin (35); 133 dcl source fixed bin; 134 dcl state fixed bin; 135 dcl station char (32); 136 dcl station_password char (8); 137 dcl status bit (72) aligned; /* status code for old ios_ calls */ 138 dcl stream char (32) aligned; 139 dcl temp_password char (8); 140 dcl 1 term_info aligned like terminal_info; 141 dcl tries fixed bin; 142 dcl value fixed bin; 143 144 145 dcl st_code fixed bin (35) based; /* first word of the ios_ status */ 146 147 148 dcl 1 form_info aligned, /* data from the form paging dim */ 149 2 page_length fixed bin, 150 2 line_length fixed bin, 151 2 line_no fixed bin, 152 2 carriage_position fixed bin, 153 2 aligned bit (1) unal, /* tells if the dim considers the forms aligned */ 154 2 pad bit (35) unal; 155 156 dcl 1 hangup_info aligned, /* structure used to set hangup_info proc */ 157 2 entry entry, 158 2 data_ptr ptr, 159 2 priority fixed bin; 160 161 dcl 1 read_info aligned, 162 2 read_ev_chan fixed bin (71), 163 2 input_ready bit (1) unal; 164 165 dcl 1 ev_chan_list aligned based, 166 2 number fixed bin, 167 2 channel (12) fixed bin (71); 168 169 170 dcl 1 cmd_list int static aligned, /* iodd_parse_$command structure for request command level */ 171 2 max fixed bin init (5), /* allow command and four args max */ 172 2 number_tokens_found fixed bin, 173 2 cmd char (64) var, /* the command part of the line */ 174 2 arg (4) char (64) var; /* the arguments */ 175 176 /* Based Variables */ 177 178 dcl sys_dir char (168) based; 179 180 dcl 1 arg_list aligned based (argp), /* iodd_parse_$command structure */ 181 2 max_tokens fixed bin, /* space allocated, do not change */ 182 2 n_tokens fixed bin, /* number of tokens from command line (including cmd) */ 183 2 command char (64) var, /* the first token is the command */ 184 2 arg (n_tokens - 1) char (64) var; /* the other tokens are args to the command */ 185 186 dcl pun_ctl_ptr ptr; 187 188 dcl 1 pun_ctl based (pun_ctl_ptr), /* punch control structure */ 189 2 sep_cards fixed bin, /* 0 = none, 1 = standard: what type of separators to punch */ 190 2 modes, 191 3 auto_punch bit (1) unal; /* FALSE if we should come to request command level */ 192 193 194 /* External Entries */ 195 196 dcl add_char_offset_ entry (ptr, fixed bin (21)) returns (ptr) reducible; 197 dcl continue_to_signal_ entry (fixed bin (35)); 198 dcl date_time_ entry (fixed bin (71), char (*)); 199 dcl debug entry (); 200 dcl do_prt_request_ entry (ptr, ptr, fixed bin (35)); 201 dcl do_prt_request_$error_during_request entry (char (*)); 202 dcl do_prt_request_$single_copy entry (); 203 dcl expand_pathname_$add_suffix entry (char (*), char (*), char (*), char (*), fixed bin (35)); 204 dcl expand_pathname_$component entry (char (*), char (*), char (*), char (*), fixed bin (35)); 205 dcl get_system_free_area_ entry () returns (ptr); 206 dcl initiate_file_$component entry (char (*), char (*), char (*), bit (*), ptr, fixed bin (24), fixed bin (35)); 207 dcl ioa_$rsnnl entry options (variable); 208 dcl iodd_command_processor_ entry (fixed bin, fixed bin, char (*) aligned, fixed bin (35)); 209 dcl iodd_get_cmd_ entry (ptr, fixed bin, fixed bin, bit (36) aligned, char (*), fixed bin, fixed bin (35)); 210 dcl iodd_hangup_$iodd_hangup_ entry; 211 dcl iodd_listen_ entry (ptr); 212 dcl iodd_msg_ entry options (variable); 213 dcl iodd_parse_$args entry (char (*) var, char (*)) returns (char (256) var); 214 dcl ios_$attach entry (char (*), char (*), char (*), char (*), bit (72) aligned); 215 dcl iox_$attach_ioname entry (char (*), ptr, char (*), fixed bin (35)); 216 dcl iox_$attach_ptr entry (ptr, char (*), ptr, fixed bin (35)); 217 dcl iox_$close entry (ptr, fixed bin (35)); 218 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 219 dcl iox_$detach_iocb entry (ptr, fixed bin (35)); 220 dcl iox_$get_line entry (ptr, ptr, fixed bin, fixed bin, fixed bin (35)); 221 dcl iox_$look_iocb entry (char (*) aligned, ptr, fixed bin (35)); 222 dcl iox_$modes entry (ptr, char (*), char (*), fixed bin (35)); 223 dcl iox_$open entry (ptr, fixed bin, bit (36), fixed bin (35)); 224 dcl iox_$put_chars entry (ptr, ptr, fixed bin, fixed bin (35)); 225 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 226 dcl ipc_$drain_chn entry (fixed bin (71), fixed bin (35)); 227 dcl output_request_ entry (char (*), fixed bin, ptr, entry, fixed bin (35)); 228 dcl output_request_$error_during_request entry (char (*)); 229 dcl output_request_$set_single_copy entry (); 230 dcl iod_info_$evaluate_forms_info entry (ptr, ptr, ptr, fixed bin (35)); 231 dcl iodd_parse_$command entry (char (*) aligned, ptr, fixed bin (35)); 232 dcl message_facility_$send_message_access_class entry (char (*), char (*), char (*), ptr, bit (72) aligned, fixed bin (35)); 233 dcl pool_manager_$clean_pool entry (char (*), fixed bin, fixed bin, fixed bin (35)); 234 dcl pool_manager_$init entry (char (*), fixed bin, bit (36) aligned, fixed bin (35)); 235 dcl probe entry (); 236 dcl read_cards_ entry (char (*), ptr, char (*), bit (1) aligned, fixed bin (35)); 237 dcl read_cards_$set_rqt entry (char (*), char (*), fixed bin (35)); 238 dcl read_cards_$set_station entry (char (*), fixed bin (35)); 239 dcl read_password_$switch entry (ptr, ptr, char (*), char (*), fixed bin (35)); 240 dcl scramble_ entry (char (8)) returns (char (8)); 241 dcl set_iod_val entry (char (*), char (*)); 242 dcl (system_privilege_$ipc_priv_off, 243 system_privilege_$ipc_priv_on, 244 system_privilege_$ring1_priv_off, 245 system_privilege_$ring1_priv_on) entry (fixed bin (35)); 246 dcl timer_manager_$alarm_wakeup entry (fixed bin(71), bit(2), fixed bin(71)); 247 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 248 dcl validate_card_input_$station entry (char (*), char (*), char (*), fixed bin (35)); 249 dcl write_control_form_ entry (char (*) aligned, char (*) aligned, ptr, fixed bin (35)); 250 dcl write_sample_form_ entry (char (*) aligned, char (*) aligned, fixed bin (35)); 251 dcl write_sample_prt_banner_ entry (char (*), ptr, ptr, fixed bin (35)); 252 253 254 /* Constants */ 255 256 dcl FALSE bit (1) int static options (constant) init ("0"b); 257 dcl TRUE bit (1) int static options (constant) init ("1"b); 258 dcl NL char (1) int static options (constant) init (" 259 "); /* the new-line character */ 260 261 dcl FF char (1) int static options (constant) init (" "); /* the form feed character */ 262 263 dcl STATION_PW_PROMPT char (23) static options (constant) init ("Enter station password:"); 264 dcl both fixed bin int static options (constant) init (0); /* master and slave for iodd_msg_ */ 265 dcl default_form_wait_time fixed bin int static options (constant) init (5); 266 dcl error fixed bin int static options (constant) init (2); 267 dcl error_message fixed bin int static options (constant) init (3); 268 dcl head_banner fixed bin int static options (constant) init (1); 269 dcl initial_print_rate fixed bin int static options (constant) init (3000); /* bits per second to the printer */ 270 dcl initial_punch_rate fixed bin int static options (constant) init (500); /* same for the punch */ 271 dcl line_length_default fixed bin int static options (constant) init (132); 272 dcl line_length_max fixed bin int static options (constant) init (200); 273 dcl line_length_min fixed bin int static options (constant) init (10); 274 dcl log fixed bin int static options (constant) init (0); 275 dcl lpi_default fixed bin int static options (constant) init (6); 276 dcl lpi_max fixed bin int static options (constant) init (8); 277 dcl lpi_min fixed bin int static options (constant) init (6); 278 dcl master fixed bin int static options (constant) init (1); 279 dcl minimum_quota fixed bin int static options (constant) init (10); 280 dcl myname char (15) int static init ("remote_driver_") options (constant); 281 dcl none fixed bin int static options (constant) init (0); 282 dcl normal fixed bin int static options (constant) init (1); 283 dcl page_length_default fixed bin int static options (constant) init (66); 284 dcl page_length_max fixed bin int static options (constant) init (127); 285 dcl page_length_min fixed bin int static options (constant) init (10); 286 dcl pause_time_default fixed bin int static options (constant) init (10); 287 dcl pause_time_max fixed bin int static options (constant) init (30); 288 dcl printer_mode fixed bin int static options (constant) init (1); 289 dcl printer_request fixed bin int static options (constant) init (1); 290 dcl punch_raw_mode fixed bin int static options (constant) init (4); 291 dcl punch_request fixed bin int static options (constant) init (2); 292 dcl punch_rmcc_mode fixed bin int static options (constant) init (3); 293 dcl request_command_level_state fixed bin int static options (constant) init (3); 294 dcl runout_spacing_max fixed bin int static options (constant) init (60); 295 dcl separator char (80) int static options (constant) init ((80)"<"); 296 dcl slave fixed bin int static options (constant) init (2); 297 dcl slave_login_tries fixed bin int static options (constant) init (10); 298 dcl space char (1) int static options (constant) init (" "); 299 dcl standard fixed bin int static options (constant) init (1); 300 dcl tail_banner fixed bin int static options (constant) init (2); 301 dcl wakeup_time_default fixed bin int static options (constant) init (30); 302 dcl zero fixed bin int static options (constant) init (0); 303 dcl zero_code fixed bin int static options (constant) init (0); 304 305 /* Internal Static */ 306 307 dcl alarm_channel fixed bin (71) int static; /* channel used for time out checks */ 308 dcl ctl_msg_sent bit (1) int static init (FALSE); /* flag set when msg sent ok */ 309 dcl default_printer pointer init (null ()) int static; /* default printer driver_status pointer for commands */ 310 dcl default_punch pointer init (null ()) int static; /* default punch driver_status pointer for commands */ 311 dcl hangup_proc_defined bit (1) int static; /* TRUE if the device hangup proc has been set */ 312 dcl major_args_ptr ptr int static init (null); 313 dcl minor_args_ptr ptr int static init (null); 314 dcl my_area_ptr ptr int static init (null); 315 dcl prt_rqt char (32) int static; 316 dcl pun_rqt char (32) int static; 317 dcl reader_attached bit (1) int static; /* TRUE if the read cards command can be used */ 318 dcl save_request_label label int static; /* for transfer on save command at request cmd level */ 319 dcl sys_priv bit (1) int static init ("1"b); /* ON means user can set privs */ 320 dcl teleprinter_iocbp pointer init (null ()) int static; 321 dcl terminal (2) char (32) int static; 322 dcl time fixed bin (71) int static init (10); 323 324 dcl 1 ctl_wait_list int static aligned, /* ipc wait list for the form terminal */ 325 2 number fixed bin, 326 2 channel fixed bin (71); 327 328 dcl 1 event_info int static aligned, /* info returned from ipc_$block */ 329 2 chan fixed bin (71), 330 2 message fixed bin (71), 331 2 sender bit (36), 332 2 origin fixed bin, 333 2 wait_list_index fixed bin; 334 335 336 dcl 1 card_info aligned int static like card_stream_info; /* card input stream data */ 337 338 dcl 1 smi aligned int static like send_mail_info; 339 340 /* Builtins */ 341 342 dcl (addr, after, before, char, character, clock, convert, copy, divide, index, length, ltrim, max, mod, null, rtrim, string, substr) builtin; 343 344 /* Conditions */ 345 346 dcl (any_other, card_command_level, cleanup, conversion, 347 daemon_logout, daemon_new_device, daemon_slave_logout, 348 linkage_error, no_coord, re_init, size) condition; 349 350 /* EXTERNAL STATIC -- ERROR TABLE ENTRIES */ 351 352 dcl error_table_$action_not_performed fixed bin (35) ext static; 353 dcl error_table_$fatal_error fixed bin (35) ext static; 354 dcl error_table_$io_no_permission fixed bin (35) ext static; 355 dcl error_table_$ionmat fixed bin (35) ext static; 356 dcl error_table_$no_operation fixed bin (35) ext static; 357 dcl error_table_$noarg fixed bin (35) ext static; 358 dcl error_table_$no_forms_table_defined fixed bin (35) ext static; 359 dcl error_table_$not_closed fixed bin (35) ext static; 360 dcl error_table_$not_detached fixed bin (35) ext static; 361 dcl error_table_$undefined_order_request fixed bin (35) ext static; 362 dcl iox_$error_output ext ptr; 363 364 365 /* This entrypoint is used to initialize the driver for the major and any 366* minor devices defined. It is called from iodd_. */ 367 init: entry (a_argp); 368 369 on daemon_logout call drop_device; 370 on daemon_slave_logout go to logout_slave; 371 on daemon_new_device call drop_device; 372 on no_coord call drop_device; 373 374 stat_p = a_argp; /* put the arg into static for easy reference */ 375 list_ptr = iodd_static.driver_list_ptr; /* find list of driver status segs */ 376 text_strings_ptr = iodd_static.text_strings_ptr; /* get ptr to i/o daemon table text area */ 377 378 if iodd_static.attach_type = ATTACH_TYPE_IOM then do; /* this driver expects a tty channel */ 379 call iodd_msg_ (error, master, error_table_$fatal_error, myname, 380 "The remote driver cannot attach to the IOM."); 381 return; /* quit now */ 382 end; 383 384 do i = 1 to iodd_static.assigned_devices; /* initialize pointers for cleanup handler */ 385 driver_ptr_list.stat_segp (i) -> driver_status.dev_out_iocbp = null (); 386 driver_ptr_list.stat_segp (i) -> driver_status.dev_ctl_ptr = null (); 387 end; 388 teleprinter_iocbp = null; 389 390 iodd_static.dev_io_stream, iodd_static.dev_in_stream = "Undefined_stream!"; 391 /* we don't use these in this proc */ 392 393 on cleanup call detach_device; 394 395 /* this is the Type I station case 396* "line: variable;" from iod_tables */ 397 if iodd_static.attach_type = ATTACH_TYPE_VARIABLE_LINE then do; 398 ltep = addr (iodd_static.ltp -> line_tab.entries (iodd_static.line_tab_idx)); 399 400 major_terminal_module, major_comm_module, major_tty = ""; 401 call ioa_$rsnnl (return_string (lte.att_desc), major_desc, len, lte.chan_id); 402 403 teleprinter_iocbp = iodd_static.slave_in; /* copy the iocbp set by iodd_ */ 404 405 station = iodd_static.major_device; /* these are the same for this case */ 406 407 do i = 1 to iodd_static.assigned_devices; 408 p = driver_ptr_list.stat_segp (i); 409 p -> driver_status.attached = TRUE; /* all will be used now */ 410 end; 411 hangup_proc_defined = TRUE; /* this was set by iodd_ for this type */ 412 end; 413 else do; /* this is the Type II station case */ 414 415 hangup_proc_defined = FALSE; /* be sure we set the hangup proc */ 416 417 /* see if user wants major args to be found in a segment */ 418 major_args_ptr = add_char_offset_ (addr (text_strings.chars), iodd_static.major_args.first_char - 1); 419 major_args_length = iodd_static.major_args.total_chars; 420 major_args_name = iodd_parse_$args ("indirect=", major_args); 421 if major_args_name ^= "" then do; /* yes, grab that segment */ 422 call initiate_the_file (major_args_name, major_args_ptr, major_args_length, "major_args", code); 423 if code ^= 0 then 424 go to clean_out; 425 end; 426 major_terminal_module, iodd_static.device_dim = iodd_parse_$args ("terminal=", major_args); 427 428 major_comm_module = iodd_parse_$args ("comm=", major_args); 429 430 major_tty = rtrim (iodd_static.attach_name); 431 432 model = iodd_parse_$args ("model=", major_args); 433 434 /* start building the attach description */ 435 if iodd_static.attach_type = ATTACH_TYPE_DIAL then 436 major_desc = "-tty ** -dial_id " || major_tty; 437 else major_desc = "-tty " || major_tty; 438 439 if major_terminal_module ^= "" then 440 major_desc = major_desc || " -terminal " || major_terminal_module; 441 442 if major_comm_module ^= "" then 443 major_desc = major_desc || " -comm " || major_comm_module; 444 445 major_desc = major_desc || space || iodd_parse_$args ("desc=", major_args); 446 447 call iodd_msg_ (normal, master, zero_code, "", "Attaching terminal."); 448 449 if iodd_parse_$args ("logout_on_hangup=", major_args) = "yes" then 450 iodd_static.logout_on_hangup = TRUE; 451 452 if iodd_parse_$args ("slave=", major_args) = "yes" then do; /* is device also the slave? */ 453 454 iodd_static.slave_output = get_switch_name ("teleprinter"); 455 iodd_static.slave_input = iodd_static.slave_output; 456 /* make them the same */ 457 458 attach_desc = "remote_teleprinter_ " || major_desc; 459 /* build the real attach description */ 460 461 opr_msg = "ATTACH"; 462 call iox_$attach_ioname ((iodd_static.slave_output), teleprinter_iocbp, (attach_desc), code); 463 if code ^= 0 & code ^= error_table_$ionmat & code ^= error_table_$not_detached then 464 go to tp_err; 465 466 opr_msg = "OPEN"; 467 call iox_$open (teleprinter_iocbp, Stream_input_output, ""b, code); 468 if code ^= 0 & code ^= error_table_$not_closed then do; 469 tp_err: 470 call iodd_msg_ (error, master, code, myname, "Unable to ""^a"" teleprinter for ^a.", opr_msg, 471 iodd_static.attach_name); 472 call iodd_msg_ (normal, master, zero_code, "", "Attach description: ^a", attach_desc); 473 go to clean_out; 474 end; 475 476 call set_hangup_proc (teleprinter_iocbp); 477 /* this will work or abort directly */ 478 479 call iox_$put_chars (teleprinter_iocbp, addr (FF), 1, ignore_code); 480 481 p2 = addr (status); /* set pointer so we can reference first word */ 482 call ios_$attach ("broadcast_errors", "broadcast_", (iodd_static.slave_output), "", status); 483 if p2 -> st_code = 0 then /* only switch error_output if this works */ 484 call iox_$attach_ptr (iox_$error_output, "syn_ broadcast_errors", null, ignore_code); 485 486 call iox_$control (teleprinter_iocbp, "read_status", addr (read_info), code); 487 if code ^= 0 then do; /* this is fatal...can't accept input. */ 488 call iodd_msg_ (error, master, code, myname, 489 "Fatal error. Unable to order read_status for teleprinter."); 490 go to clean_out; 491 end; 492 493 iodd_static.chan_list_ptr -> ev_chan_list.channel (slave) = read_info.read_ev_chan; 494 495 iodd_static.slave_ev_chan = read_info.read_ev_chan; 496 497 iodd_static.slave_out = teleprinter_iocbp; 498 /* set the slave iocbp ptrs */ 499 iodd_static.slave_in = teleprinter_iocbp; 500 iodd_static.slave.active = TRUE; /* slave terminal is now defined */ 501 end; 502 503 /* if a ctl terminal was defined, let it remain and inherit its slave status from iodd_ unless */ 504 /* it was changed above by slave= yes in the args */ 505 506 if iodd_static.ctl_term.attached then do; 507 ctl_wait_list.number = 1; 508 ctl_wait_list.channel = iodd_static.ctl_ev_chan; 509 alarm_channel = iodd_static.ctl_ev_chan; 510 call iox_$modes (iodd_static.slave_in, "^hndlquit", omode, ignore_code); 511 /* we reset read on quit */ 512 end; 513 else do; 514 ctl_wait_list.number = 0; /* otherwise clear to avoid errors */ 515 ctl_wait_list.channel = 0; 516 alarm_channel = 0; 517 end; 518 519 520 if iodd_static.slave.active then do; /* set up switches for slave control */ 521 iodd_static.slave.accept_input = TRUE; 522 iodd_static.slave.allow_quits = TRUE; 523 iodd_static.slave.print_errors = TRUE; 524 if iodd_static.slave_output = iodd_static.ctl_output then 525 iodd_static.slave.log_msg = FALSE; /* kill double messages */ 526 else iodd_static.slave.log_msg = TRUE; /* send log msg to slave if not ctl terminal */ 527 end; 528 else do; 529 iodd_static.slave.accept_input = FALSE; 530 iodd_static.slave.allow_quits = FALSE; 531 iodd_static.slave.print_errors = FALSE; 532 iodd_static.slave.log_msg = FALSE; 533 end; 534 535 call iox_$look_iocb (iodd_static.slave_output, iodd_static.slave_out, code); 536 if code ^= 0 then do; 537 if iodd_static.slave.active then 538 call iodd_msg_ (error, master, code, myname, "Slave functions terminated."); 539 iodd_static.slave.active = FALSE; /* cannot be active */ 540 iodd_static.slave.print_errors = FALSE; 541 iodd_static.slave.allow_quits = FALSE; 542 iodd_static.slave.accept_input = FALSE; 543 end; 544 545 /* get iocbp for station password */ 546 call iox_$look_iocb (iodd_static.slave_input, iodd_static.slave_in, code); 547 if code ^= 0 then do; /* no one home? */ 548 if iodd_static.slave.active then 549 call iodd_msg_ (normal, master, code, myname, "Slave input terminated."); 550 iodd_static.slave.accept_input = FALSE; /* like we said */ 551 end; 552 553 /* find the device station so we can determine which minor devices to use */ 554 555 station = iodd_parse_$args ("station=", major_args); /* station in major will over-ride */ 556 if station ^= "" then do; /* got one, all minor devices will be used */ 557 do i = 1 to iodd_static.assigned_devices; 558 p = driver_ptr_list.stat_segp (i); /* get ptr to driver status seg */ 559 p -> driver_status.attached = TRUE;/* mark it as attached */ 560 end; 561 need_station = FALSE; /* we don't need to look for station */ 562 end; 563 else do; 564 need_station = TRUE; /* look to the device for the station */ 565 if ^(iodd_static.slave.active & iodd_static.slave.accept_input) then do; 566 call iodd_msg_ (error, master, error_table_$fatal_error, myname, 567 "No slave device to request operator input from."); 568 go to clean_out; 569 end; 570 call iodd_msg_ (normal, master, zero_code, "", "Requesting station identifier."); 571 end; 572 573 opr_msg = "Enter station command:" || NL; /* ready to ask for device station */ 574 do tries = 1 to 10 while (need_station); /* try up to 10 times before giving up */ 575 call iox_$put_chars (iodd_static.slave_out, addr (opr_msg), length (rtrim (opr_msg)), code); 576 if code ^= 0 then do; 577 try_to_recover: 578 call iodd_msg_ (error, master, code, myname, 579 "Trouble initializing device. Starting reinitialization."); 580 call drop_device; 581 iodd_static.re_init_in_progress = TRUE; 582 go to iodd_static.re_init_label; 583 end; 584 585 call iox_$control (iodd_static.slave_out, "runout", null, ignore_code); 586 587 input_line = ""; /* clear any junk */ 588 call iox_$get_line (iodd_static.slave_in, addr (input_line), length (input_line), nchar, code); 589 if code ^= 0 then 590 go to try_to_recover; 591 592 station = before (iodd_parse_$args ("station", input_line), " "); 593 /* see if it is a good command */ 594 station_password = rtrim (ltrim (after (iodd_parse_$args ("station", input_line), " "))); 595 596 if station ^= "" then do; /* if defined, check it out */ 597 if station_password = "" then /* ... left off password: ask for it */ 598 call read_password_$switch (iodd_static.slave_out, iodd_static.slave_in, STATION_PW_PROMPT, 599 station_password, ignore_code); 600 if station_password = "*" then /* ... user really wants a blank password */ 601 station_password = ""; 602 603 if station_password ^= "" then do; 604 temp_password = station_password; 605 station_password = scramble_ (temp_password); 606 temp_password = ""; 607 end; 608 609 call validate_card_input_$station (station, station_password, err_msg, code); 610 if code ^= 0 then do; 611 call iodd_msg_ (normal, both, zero_code, "***", "^a: ^a", err_msg, station); 612 go to enter_again; /* ask the question once more */ 613 end; 614 else do i = 1 to iodd_static.assigned_devices; /* look at each minor device */ 615 p = driver_ptr_list.stat_segp (i); /* get ptr to driver status seg */ 616 617 /* see if user wants minor args to be found in a segment */ 618 minor_args_name = iodd_parse_$args ("indirect=", return_string (p -> driver_status.minor_args)); 619 if minor_args_name ^= "" then do; /* yes, grab that segment */ 620 call initiate_the_file (minor_args_name, minor_args_ptr, minor_args_length, 621 "minor_args", code); 622 if code ^= 0 then 623 go to clean_out; 624 end; 625 else do; 626 /* locate minor args for this minor device */ 627 /* in the i/o daemon tables text area */ 628 minor_args_ptr = add_char_offset_ (addr (text_strings.chars), p -> driver_status.minor_args.first_char - 1); 629 minor_args_length = p -> driver_status.minor_args.total_chars; 630 end; 631 if station = iodd_parse_$args ("station=", minor_args) then do; /* match? */ 632 need_station = FALSE; /* we found a good one */ 633 p -> driver_status.attached = TRUE; /* mark it as attached */ 634 end; 635 else p -> driver_status.attached = FALSE; /* this one is invalid */ 636 end; 637 638 if need_station then do; /* indicate an error to the operator */ 639 err_msg = "No minor device for station: " || station; 640 call iodd_msg_ (normal, both, zero_code, "***", err_msg); 641 end; 642 end; 643 else do; /* no valid "STATION" command card */ 644 call iodd_msg_ (normal, both, zero_code, "***", "No station command given."); 645 end; 646 enter_again: 647 end; 648 649 if tries > slave_login_tries then 650 go to logout_slave; /* after 10 times, give up */ 651 652 call iodd_msg_ (log, master, zero_code, "", "Driver initializing for station: ^a", station); 653 654 end; 655 656 /* This is where the two attach types are again handled the same */ 657 658 terminal (master) = "user_output"; /* master terminal output stream for read_cards command */ 659 terminal (slave) = iodd_static.slave_output; 660 661 /* For each minor device marked as attached, find the type of device it is */ 662 663 prt_rqt = "printer"; /* default the request type names to standard */ 664 pun_rqt = "punch"; 665 reader_attached = FALSE; /* reader not available yet */ 666 default_printer = null (); /* no driver status seg for printer yet */ 667 default_punch = null (); /* or for the punch */ 668 printer_count, punch_count = 0; /* but count them as they are found */ 669 rqt_string = ""; /* no request types defined for this station yet */ 670 671 term_info.version = terminal_info_version; /* set version number once for all possible calls */ 672 term_info.baud_rate = 0; /* initialize to no-op just in case */ 673 674 iodd_static.current_devices = 0; /* haven't found any good ones yet */ 675 ready_device = FALSE; /* none of them are ready yet either */ 676 677 do i = 1 to iodd_static.assigned_devices; 678 p = driver_ptr_list.stat_segp (i); 679 p -> driver_status.ready = FALSE; /* printer devices will honor auto_go */ 680 p -> driver_status.generic_type = ""; /* not defined yet */ 681 p -> driver_status.form_wait_time = default_form_wait_time; /* default wait time per ctl msg */ 682 p -> driver_status.bit_rate_est = 0; /* no output rate defined yet */ 683 p -> driver_status.defer_time_limit = 0; /* make operator specify */ 684 p -> driver_status.dev_out_stream = "null_stream"; 685 686 /* locate minor args for this minor device in the i/o daemon tables text area */ 687 minor_args_ptr = add_char_offset_ (addr (text_strings.chars), p -> driver_status.minor_args.first_char - 1); 688 minor_args_length = p -> driver_status.minor_args.total_chars; 689 690 /* see if user wants minor args to be found in a segment */ 691 minor_args_name = iodd_parse_$args ("indirect=", minor_args); 692 if minor_args_name ^= "" then do; /* yes, grab that segment */ 693 call initiate_the_file (minor_args_name, minor_args_ptr, minor_args_length, "minor_args", code); 694 if code ^= 0 then 695 go to clean_out; 696 end; 697 device_type = iodd_parse_$args ("dev=", minor_args); 698 /* copy for easy reference */ 699 if device_type = "printer" then do; /* check if defined */ 700 if p -> driver_status.attached then do; /* only use the attached one */ 701 if iodd_static.paper_type = PAPER_TYPE_SINGLE then do; 702 if model = "" then 703 model = iodd_parse_$args ("model=", minor_args); 704 if model ^= "" then 705 major_desc = major_desc || space || "-model " || model; 706 end; 707 call iodd_msg_ (normal, both, zero_code, "", "^/Initializing printer device: ^a", 708 p -> driver_status.device_id); 709 printer_count = printer_count + 1; 710 p -> driver_status.generic_type = "printer"; 711 /* only printer functions can be done */ 712 call minor_attach ("printer"); 713 if printer_count = 1 then 714 default_printer = p; 715 prt_rqt = p -> driver_status.req_type_label; 716 /* get the request type */ 717 if index (prt_rqt, ".") > 0 then 718 prt_rqt = before (prt_rqt, "."); 719 /* strip off device class */ 720 721 call set_iod_val ("request_type", rtrim (prt_rqt)); 722 if index (rqt_string, rtrim (prt_rqt)) = 0 then 723 rqt_string = rqt_string || " " || rtrim (prt_rqt); 724 p -> driver_status.elem_size = BITS_PER_CHAR; 725 p -> driver_status.message_type = printer_request; 726 /* expected dprint message type */ 727 728 call iox_$control (p -> driver_status.dev_out_iocbp, "terminal_info", addr (term_info), code); 729 if code = 0 then 730 p -> driver_status.bit_rate_est = term_info.baud_rate; 731 else p -> driver_status.bit_rate_est = initial_print_rate; 732 /* set starting estimate */ 733 734 allocate prt_ctl set (p -> driver_status.dev_ctl_ptr); 735 call get_prt_rqti_data (p); /* find the request type info data for printer */ 736 call iox_$control (p -> driver_status.dev_out_iocbp, "channel_stops", 737 addr (prt_ctl.channel_stops), code); 738 if code ^= 0 then do; 739 call iodd_msg_ (normal, both, code, myname, "Bad channel_stops order to printer."); 740 go to logout_slave; 741 end; 742 call set_paper_info (slave, code); 743 if code ^= 0 then 744 go to logout_slave; /* proc gave the message */ 745 end; 746 end; 747 else if device_type = "punch" then do; 748 if p -> driver_status.attached then do; /* only use the attached one */ 749 call iodd_msg_ (normal, both, zero_code, "", "^/Initializing punch device: ^a", 750 p -> driver_status.device_id); 751 punch_count = punch_count + 1; 752 p -> driver_status.generic_type = "punch"; 753 /* only punch functions for this one */ 754 755 call minor_attach ("punch"); 756 if punch_count = 1 then 757 default_punch = p; /* record the default status seg ptr */ 758 pun_rqt = p -> driver_status.req_type_label; 759 /* get the request type */ 760 if index (pun_rqt, ".") > 0 then 761 pun_rqt = before (pun_rqt, "."); 762 /* strip off device class */ 763 764 call set_iod_val ("pun_rqt", rtrim (pun_rqt)); 765 if index (rqt_string, rtrim (pun_rqt)) = 0 then 766 rqt_string = rqt_string || " " || rtrim (pun_rqt); 767 p -> driver_status.elem_size = BITS_PER_CHAR; /* in this driver, this is just a place holder */ 768 p -> driver_status.message_type = punch_request; 769 /* type of dprint msg expected */ 770 771 call iox_$control (p -> driver_status.dev_out_iocbp, "terminal_info", addr (term_info), code); 772 if code = 0 then 773 p -> driver_status.bit_rate_est = term_info.baud_rate; 774 else p -> driver_status.bit_rate_est = initial_punch_rate; 775 776 allocate pun_ctl set (p -> driver_status.dev_ctl_ptr); 777 pun_ctl_ptr = p -> driver_status.dev_ctl_ptr; 778 pun_ctl.sep_cards = standard; /* set the default control parms */ 779 pun_ctl.auto_punch = FALSE; /* make the operator switch to autopunch if desired */ 780 if p -> driver_status.rqti_ptr ^= null then 781 call iodd_msg_ (normal, master, zero_code, myname, "This driver cannot decode a punch rqti seg."); 782 end; 783 end; 784 else if device_type = "reader" then do; /* this is only a dummy minor device used */ 785 /* to get the attach desc for the reader */ 786 if p -> driver_status.attached then do; /* only use the attached one */ 787 788 p -> driver_status.attached = FALSE; /* it is never attached as far as */ 789 /* the coordinator is concerned */ 790 if reader_attached then do; 791 call iodd_msg_ (normal, master, zero_code, myname, 792 "Multiple reader devices specified. Device ^a ignored.", 793 p -> driver_status.device_id); 794 end; 795 else do; 796 call iodd_msg_ (normal, both, zero_code, "", "^/Initializing reader device: ^a", 797 p -> driver_status.device_id); 798 p -> driver_status.generic_type = "card_rdr"; 799 call minor_attach ("reader"); 800 reader_attached = TRUE; /* tell the read_cards command it can work */ 801 802 card_info.n_streams = 1; /* remote_driver only supports one format */ 803 card_info.format (1) = "rmcc";/* and that's like MCC */ 804 card_info.control_stream, card_info.name (1) = p -> driver_status.dev_out_stream; 805 /* use the same stream for data */ 806 card_info.el_size (1) = BITS_PER_CHAR; /* input is in characters of 9 bits each */ 807 end; 808 end; 809 end; 810 else do; /* someone slipped in a zinger */ 811 call iodd_msg_ (normal, master, zero_code, myname, "Invalid ""dev="" arg ""^a"" for minor device ^a.", 812 device_type, p -> driver_status.device_id); 813 p -> driver_status.attached = FALSE; /* can't be attached in this case */ 814 end; 815 end; 816 817 if iodd_static.current_devices = 0 then do; /* trouble */ 818 err_msg = "No minor devices found with ""dev="" arg which is known to this driver."; 819 call iodd_msg_ (error, master, zero_code, myname, err_msg); 820 code = 0; 821 go to logout_slave; /* drop this one */ 822 end; 823 824 if printer_count > 1 then do; 825 default_printer = null; /* no default if more than one */ 826 prt_rqt = "printer"; 827 call set_iod_val ("request_type", rtrim (prt_rqt)); 828 end; 829 if punch_count > 1 then do; 830 default_punch = null; /* no default if more than one */ 831 pun_rqt = "punch"; 832 call set_iod_val ("pun_rqt", rtrim (pun_rqt)); 833 end; 834 835 call set_iod_val ("rqt_string", (rqt_string)); 836 call set_iod_val ("station_id", rtrim (station)); 837 838 iodd_static.admin_ec_name = rtrim (station) || "_admin.ec"; 839 call read_cards_$set_station (station, ignore_code); 840 call read_cards_$set_rqt (prt_rqt, pun_rqt, ignore_code); /* pass default rqt's to card input proc */ 841 842 iodd_static.form_type = iodd_parse_$args ("form_type=", major_args); 843 /* set form type */ 844 if iodd_static.form_type = "" then 845 iodd_static.form_type = "std_ctl_msg"; /* if not found... */ 846 847 iodd_static.slave_hold = ^ready_device; /* issue a "go" if at least one device is ^ready */ 848 849 smi.version = -1; /* init to known state */ 850 851 call date_time_ (clock (), date_string); /* get set for ready message */ 852 call iodd_msg_ (normal, both, zero_code, "", "^/^a driver on channel ^a ready at ^16a^/", iodd_static.major_device, 853 iodd_static.attach_name, date_string); 854 855 call iodd_listen_ (stat_p); 856 857 858 /* This is only for error recovery during initialization. The listener will never return here. */ 859 clean_out: 860 call drop_device; 861 if iodd_static.attach_type = ATTACH_TYPE_VARIABLE_LINE then do; /* new style, detach and wait for dialup */ 862 iodd_static.re_init_in_progress = TRUE; 863 go to iodd_static.re_init_label; 864 end; 865 866 return; 867 868 logout_slave: /* logout the slave device but not the process */ 869 iodd_static.re_init_in_progress = TRUE; /* we do this by re-initializing the driver */ 870 871 call date_time_ (clock (), date_string); /* get set for message */ 872 iodd_static.slave.log_msg = TRUE; /* send to log and slave */ 873 call iodd_msg_ (log, both, zero_code, "", "Logout for station: ^a at ^a", station, date_string); 874 875 if iodd_static.slave_out ^= null () then do; 876 call iox_$control (iodd_static.slave_out, "runout", null, ignore_code); 877 call iox_$control (iodd_static.slave_out, "end_write_mode", null, ignore_code); 878 end; 879 880 call drop_device; 881 882 call iodd_msg_ (normal, master, zero_code, "", "Driver starting re-initialization."); 883 884 go to iodd_static.re_init_label; /* this will do everything */ 885 886 887 888 889 890 drop_device: procedure (); 891 892 dcl send_hangup bit (1); 893 894 /* internal proc to issue a hangup to the device before detaching */ 895 896 send_hangup = TRUE; /* tell close_and_detach proc to send hangup */ 897 go to device_common; 898 899 detach_device: entry (); 900 send_hangup = FALSE; /* no send hangup */ 901 902 device_common: 903 if iodd_static.ctl_term.attached then 904 if iodd_static.ctl_output ^= iodd_static.slave_output then 905 iodd_static.slave.active = FALSE; /* if ctl term is slave, leave it to iodd_ */ 906 else ; 907 else iodd_static.slave.active = FALSE; /* if no ctl terminal, no slave is left */ 908 call close_and_detach (teleprinter_iocbp, send_hangup); 909 910 list_ptr = iodd_static.driver_list_ptr; 911 do i = 1 to iodd_static.assigned_devices; 912 p = driver_ptr_list.stat_segp (i); 913 call close_and_detach (p -> driver_status.dev_out_iocbp, send_hangup); 914 if p -> driver_status.dev_ctl_ptr ^= null then 915 free p -> driver_status.dev_ctl_ptr -> prt_ctl; 916 /* free the prt_ctl or pun_ctl structures */ 917 /* Lucky free dosn't care about the structure name */ 918 end; 919 920 call continue_to_signal_ (ignore_code); /* in case this is called from a handler */ 921 922 return; 923 924 end drop_device; 925 926 927 request: 928 entry; 929 930 /* This entry is called by iodd_listen_ when a request has been received from 931* the coordinator for either of the logical drivers servicing the remote device. 932* Here we just check to be sure that we can understand the request format and the requested 933* print or punch data format. Then the request is passed on to the proc which can handle 934* that type of request. 935**/ 936 937 /* for cleanup handler */ 938 evaluate_forms_info_input_ptr, 939 evaluate_forms_info_output_ptr = null; 940 941 p = iodd_static.driver_ptr; /* find the current driver */ 942 p2 = addr (p -> driver_status.descriptor); /* find the request descriptor */ 943 dmp = addr (p -> driver_status.message); /* get ptr to message */ 944 945 if dmp -> queue_msg_hdr.hdr_version ^= queue_msg_hdr_version_1 then do; /* trouble */ 946 call iodd_msg_ (log, both, zero_code, "", "Invalid message header. Cannot read request ^d.^d.", 947 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q); 948 p2 -> request_descriptor.keep_in_queue = TRUE; 949 /* save for conversion later */ 950 go to be_nice; 951 end; 952 if dmp -> queue_msg_hdr.message_type ^= p -> driver_status.message_type then do; 953 call iodd_msg_ (log, both, zero_code, "", /* log the error */ 954 "Incorrect message type.^/Request ^d.^d for ^a (segment ^a) not processed.", 955 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 956 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 957 dmp -> queue_msg_hdr.ename); 958 p2 -> request_descriptor.cancelled = TRUE; /* we don't want this one again */ 959 be_nice: 960 p2 -> request_descriptor.dont_delete = TRUE; /* save the user's data */ 961 p2 -> request_descriptor.finished = TRUE; /* mark it done */ 962 return; /* it wasn't for us after all */ 963 end; 964 if dprint_msg.version ^= dprint_msg_version_3 /* Previous version */ 965 & dprint_msg.version ^= dprint_msg_version_4 /* Previous version */ 966 & dprint_msg.version ^= dprint_msg_version_5 /* Current version */ 967 then do; /* other trouble? */ 968 call iodd_msg_ (log, both, zero_code, "", 969 "Wrong message version found.^/Request ^d.^d for ^a (segment ^a) not processed", 970 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 971 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 972 dmp -> queue_msg_hdr.ename); 973 p2 -> request_descriptor.keep_in_queue = TRUE; 974 go to be_nice; 975 end; 976 if dprint_msg.version < dprint_msg_version_4 then /* Disallow -line_nbrs before version 4 */ 977 dprint_msg.control.line_nbrs = FALSE; 978 format_code = dprint_msg.output_module; /* get the user defined format */ 979 980 if format_code = printer_mode then do; /* if printer, check line length */ 981 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* find the control info for this printer */ 982 call evaluate_forms_options (code); /* validate forms data */ 983 if code ^= 0 then do; 984 call iodd_msg_ (log, both, zero_code, "", 985 "Request ^d.^d for ^a (segment ^a) deferred.^/Forms evaluation error '^a'", 986 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 987 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 988 dmp -> queue_msg_hdr.ename, 989 evaluate_forms_info_output.error_string); 990 p2 -> request_descriptor.keep_in_queue = TRUE; /* defer it */ 991 if evaluate_forms_info_output_ptr ^= null then 992 free evaluate_forms_info_output; 993 go to be_nice; 994 end; 995 996 /* adjust prt_ctl accordingly */ 997 if dprint_msg.line_lth > prt_ctl.phys_line_length then do; /* platten wide enough */ 998 call iodd_msg_ (log, both, zero_code, "", 999 "Request ^d.^d for ^a (segment ^a) deferred.^/Requires a device with line length of ^d.", 1000 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 1001 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 1002 dmp -> queue_msg_hdr.ename, dprint_msg.line_lth); 1003 p2 -> request_descriptor.keep_in_queue = TRUE; 1004 /* defer it */ 1005 go to be_nice; 1006 end; 1007 end; 1008 else if format_code = punch_raw_mode then do; /* for binary output */ 1009 element_size = 1; /* treat as 1 bit at a time */ 1010 end; 1011 else if format_code = punch_rmcc_mode then do; /* for character output */ 1012 element_size = BITS_PER_CHAR; /* for output_request_ */ 1013 end; 1014 else do; /* be sure it is defined */ 1015 call iodd_msg_ (log, both, zero_code, "", 1016 "Undefined output module in user request.^/Request ^d.^d for ^a (segment ^a) not processed", 1017 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 1018 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 1019 dmp -> queue_msg_hdr.ename); 1020 p2 -> request_descriptor.cancelled = TRUE; /* we don't want this one again */ 1021 go to be_nice; 1022 end; 1023 1024 iodd_static.quit_during_request = FALSE; /* start clean */ 1025 ctl_msg_sent = FALSE; /* initialize to no msg yet */ 1026 save_request_label = save_return; /* init for non-local transfer on save command */ 1027 1028 on cleanup begin; 1029 if p ^= null () then /* this one should never be null, but ... */ 1030 if p -> driver_status.dev_out_iocbp ^= null () then 1031 call iox_$control (p -> driver_status.dev_out_iocbp, "end_write_mode", null, ignore_code); 1032 1033 if evaluate_forms_info_input_ptr ^= null then 1034 free evaluate_forms_info_input; 1035 if evaluate_forms_info_output_ptr ^= null then 1036 free evaluate_forms_info_output; 1037 end; /* let the I/O Module send an EOF if needed */ 1038 1039 if dprint_msg.message_type = printer_request then do; 1040 call do_prt_request_ (p -> driver_status.dev_out_iocbp, stat_p, code); 1041 if evaluate_forms_info_output_ptr ^= null then 1042 free evaluate_forms_info_output; 1043 /* this one is for the printer only */ 1044 end; 1045 else do; 1046 call output_request_ ((p -> driver_status.dev_out_stream), element_size, stat_p, print_banner, code); 1047 end; 1048 if code ^= 0 then do; 1049 iodd_static.slave_hold = TRUE; /* on errors go to command level for guidance */ 1050 if code = error_table_$io_no_permission then do; /* in case of hangup... */ 1051 call iodd_msg_ (error, master, code, myname, 1052 "Device in inconsistent state or hungup. Must re-initialize."); 1053 signal re_init; 1054 end; 1055 end; 1056 save_return: /* return point for save command at request cmd level */ 1057 call iox_$control (p -> driver_status.dev_out_iocbp, "end_write_mode", null, code); 1058 if code = 0 then do; /* we were able to release the line */ 1059 call timer_manager_$sleep (time, RELATIVE_SECONDS); /* sleep a few seconds */ 1060 /* so remote device can send if needed */ 1061 end; 1062 else if code = error_table_$undefined_order_request then do; /* this is ok also */ 1063 if iodd_static.test_entry then /* be able to set a reasonable pace */ 1064 if time > 1 then /* simulate device */ 1065 call timer_manager_$sleep (time, RELATIVE_SECONDS); 1066 end; 1067 else do; /* this is a real error */ 1068 call iodd_msg_ (error, master, code, myname, "From ""end_write_mode"" control"); 1069 iodd_static.slave_hold = TRUE; 1070 end; 1071 1072 if iodd_static.slave.active then /* flush any messages */ 1073 call iox_$control (iodd_static.slave_out, "runout", null, ignore_code); 1074 1075 return; 1076 1077 1078 /* This entrypoint is used to output the head/tail banner cards for a punch 1079* request. It is referenced in the call to output_request_. */ 1080 1081 print_banner: entry (a_stream, a_banner_type, a_data_ptr, a_code); 1082 1083 stream = a_stream; 1084 banner_type = a_banner_type; 1085 ordatap = a_data_ptr; 1086 a_code, code = 0; 1087 1088 p = iodd_static.driver_ptr; /* save driver_ptr in short name variable */ 1089 p2 = addr (p -> driver_status.descriptor); /* get descriptor ptr just in case */ 1090 dmp = addr (p -> driver_status.message); /* get message ptr */ 1091 iocbp = p -> driver_status.dev_out_iocbp; /* get iocbp for control and writes */ 1092 1093 if dprint_msg.message_type ^= punch_request then do; /* this proc is for dpunch type message banner */ 1094 code = error_table_$action_not_performed; /* return an error */ 1095 go to banner_ret; 1096 end; 1097 1098 pun_ctl_ptr = p -> driver_status.dev_ctl_ptr; /* get ready for using pun_ctl structure */ 1099 1100 if banner_type = head_banner then do; /* this is for the header */ 1101 iodd_static.quit_during_request = FALSE; /* start watching now */ 1102 if iodd_static.ctl_term.attached then do; /* are we to inform the ctl terminal? */ 1103 call write_control_form_ (iodd_static.form_type, iodd_static.ctl_output, ordatap, code); 1104 if code ^= 0 then do; 1105 if code ^= error_table_$action_not_performed then do; /* this is normal */ 1106 call iodd_msg_ (error, master, code, myname, "Writing message to control terminal."); 1107 iodd_static.slave_hold = TRUE;/* go back to command level when done */ 1108 end; 1109 ctl_msg_sent = FALSE; /* don't wait now */ 1110 code = 0; /* we handled it */ 1111 end; 1112 else ctl_msg_sent = TRUE; /* all set */ 1113 if ctl_wait_list.number = 1 then 1114 call set_wait_timer; 1115 end; 1116 else ctl_msg_sent = FALSE; 1117 1118 format_code = dprint_msg.output_module; /* get the punch format code */ 1119 if format_code = punch_raw_mode then 1120 arg_string = "raw"; /* set name for messages */ 1121 else arg_string = "rmcc"; /* this is the default */ 1122 1123 if ^pun_ctl.auto_punch then do; /* are we to come to command level */ 1124 1125 on conversion 1126 begin; 1127 call iodd_msg_ (normal, source, zero_code, "", "Argument conversion error. Try again."); 1128 go to ask; 1129 end; 1130 1131 on size 1132 begin; 1133 call iodd_msg_ (normal, source, zero_code, "", "Argument numerical size error. Try again."); 1134 go to ask; 1135 end; 1136 1137 /* set to wait for input, no prompt master for command and to prompt slave for input */ 1138 control = "101"b; 1139 1140 call iodd_msg_ (log, slave, zero_code, "", " Deck punch format: ^a.", arg_string); 1141 1142 ask: 1143 call iodd_get_cmd_ (addr (input_line), length (input_line), len, control, "request", source, code); 1144 if code ^= 0 then do; /* this is bad news */ 1145 iodd_static.slave_hold = TRUE; /* go back to command level */ 1146 go to banner_ret; 1147 end; 1148 1149 call iodd_parse_$command (substr (input_line, 1, len), addr (cmd_list), code); 1150 if code ^= 0 then do; 1151 if code = error_table_$noarg then 1152 go to ask; 1153 call iodd_msg_ (normal, source, code, myname, "Unable to parse command line."); 1154 go to ask; 1155 end; 1156 1157 if cmd_list.cmd = "help" then do; /* check which command was given */ 1158 call iodd_msg_ (normal, source, zero_code, "", "Standard driver commands may be used, plus:^/"); 1159 call iodd_msg_ (normal, source, zero_code, "", " copy N -set the current copy number to N"); 1160 call iodd_msg_ (normal, source, zero_code, "", " req_status -get the copy and request numbers"); 1161 call iodd_msg_ (normal, source, zero_code, "", " punch -start data transfer"); 1162 go to ask; 1163 end; 1164 1165 if cmd_list.cmd = "copy" then do; 1166 if cmd_list.number_tokens_found ^= 2 then do; /* we must have 2 args which includes the N part */ 1167 1168 bad_copy_arg: 1169 call iodd_msg_ (normal, source, zero_code, "", 1170 "Invalid or missing argument. Use copy N to set current copy number."); 1171 go to ask; 1172 end; 1173 1174 value = convert (value, cmd_list.arg (1)); 1175 /* convert char to fixed bin */ 1176 if value < 1 | value > ordata.copies then 1177 go to bad_copy_arg; 1178 1179 ordata.copy_no = value; /* passed checks, so set the new current copy number */ 1180 go to ask; /* see what is next */ 1181 end; 1182 1183 if cmd_list.cmd = "req_status" | cmd_list.cmd = "reqstatus" then do; 1184 call iodd_msg_ (normal, source, zero_code, "", 1185 "Request ^d: ^a^/^3xCurrent copy no: ^d of ^d Punch format: ^a", ordata.request_no, 1186 ordata.full_path, ordata.copy_no, ordata.copies, arg_string); 1187 go to ask; 1188 end; 1189 1190 if cmd_list.cmd = "debug" & iodd_static.test_entry & source = master then do; 1191 call iodd_msg_ (normal, master, zero_code, "", "Calling debug"); 1192 call debug (); 1193 go to ask; 1194 end; 1195 if (cmd_list.cmd = "probe" | cmd_list.cmd = "pb") 1196 & iodd_static.test_entry 1197 & source = master then do; 1198 call iodd_msg_ (normal, master, zero_code, "", "Calling probe"); 1199 call probe (); 1200 go to ask; 1201 end; 1202 1203 if cmd_list.cmd ^= "punch" then do; /* all but the punch command go to std cp */ 1204 call iodd_command_processor_ (source, request_command_level_state, substr (input_line, 1, len), code); 1205 if code = 1 | code = 2 then do; /* wants to go or start */ 1206 if code = 2 & cmd_list.cmd = "save" then 1207 go to save_request_label; 1208 call iodd_msg_ (normal, source, zero_code, "", "Invalid command. Try again. - ^a", cmd_list.cmd); 1209 end; 1210 go to ask; 1211 end; 1212 end; 1213 1214 call iox_$control (iocbp, "reset", null, code); 1215 /* clear modes and counts for all requests */ 1216 if code ^= 0 then 1217 go to banner_ret; 1218 1219 1220 if dprint_msg.output_module = punch_raw_mode then do; /* binary punch request */ 1221 call iox_$control (iocbp, "binary_punch", null, code); 1222 /* set binary mode */ 1223 if code ^= 0 then do; /* OOPS, drop this request */ 1224 call iodd_msg_ (normal, slave, zero_code, myname, "Unable to set binary punch mode"); 1225 end; 1226 go to banner_ret; 1227 end; 1228 else if pun_ctl.sep_cards = standard then do;/* separator cards are for character punching only */ 1229 req_string = ltrim (char (ordata.request_no)); 1230 /* get number as characters */ 1231 header_card2 = ""; /* clear the second header card */ 1232 pos = 1; /* where the next output char position is */ 1233 1234 do idx = 1 to length (rtrim (req_string)); 1235 /* once for each digit */ 1236 digit = substr (req_string, idx, 1); 1237 /* pick it up */ 1238 substr (header_card2, pos, 5) = copy (digit, 5); 1239 /* repeat it 5 times */ 1240 pos = pos + 7; /* bump the counter, leaving 2 spaces */ 1241 end; 1242 1243 substr (header_card2, pos + 5) = ordata.requestor; 1244 /* add on the requestor name */ 1245 1246 call iox_$put_chars (iocbp, addr (separator), length (separator), code); 1247 if code ^= 0 then 1248 go to banner_ret; 1249 call iox_$put_chars (iocbp, addr (header_card2), length (header_card2), code); 1250 if code ^= 0 then 1251 go to banner_ret; 1252 call iox_$put_chars (iocbp, addr (separator), length (separator), code); 1253 if code ^= 0 then 1254 go to banner_ret; 1255 call iox_$control (iocbp, "runout", null, code); 1256 if code ^= 0 then 1257 go to banner_ret; 1258 call iox_$control (iocbp, "reset", null, code); 1259 end; 1260 end; 1261 else if banner_type = tail_banner then do; /* time for the tail banner */ 1262 if pun_ctl.sep_cards = standard & dprint_msg.output_module ^= punch_raw_mode then do; 1263 do i = 1 to 2; 1264 call iox_$put_chars (iocbp, addr (separator), length (separator), code); 1265 if code ^= 0 then 1266 go to banner_ret; 1267 end; 1268 end; 1269 1270 if ctl_wait_list.number = 1 then 1271 call wait_for_ctl_finish; 1272 end; 1273 else if banner_type = error_message then do; /* this is for an error message */ 1274 /* when we can punch in binary, we can write flip cards here */ 1275 end; 1276 1277 /* all other banners are undefined. */ 1278 1279 else code = error_table_$action_not_performed; 1280 1281 1282 banner_ret: 1283 a_code = code; 1284 if code ^= 0 then 1285 p2 -> request_descriptor.keep_in_queue = TRUE; 1286 /* defer the request */ 1287 return; 1288 1289 1290 /* This is the command processor for special commands recognized by the remote 1291* driver. Any unrecognized commands will be passed back to the general 1292* I/O daemon command processor for execution. */ 1293 command: entry (a_source, a_state, a_argp, a_code); 1294 1295 argp = a_argp; /* define the arg_list structure which contains "command" */ 1296 source = a_source; 1297 state = a_state; 1298 terminal (2) = iodd_static.slave_output; /* in case it has changed */ 1299 1300 on conversion 1301 begin; /* handler for conversion errors */ 1302 call iodd_msg_ (normal, source, zero_code, "", "Argument conversion error. Try again."); 1303 go to cmd_error; 1304 end; 1305 1306 save_code = a_code; /* save the called value */ 1307 a_code, code = 0; /* say we handled it for now */ 1308 1309 if command = "help" then do; 1310 call iodd_msg_ (normal, source, zero_code, "", "^/** Commands for the remote driver **^/"); 1311 call iodd_msg_ (normal, source, zero_code, "", "banner_bars [] [single | double | none]"); 1312 call iodd_msg_ (normal, source, zero_code, "", "banner_type [] [standard | brief | none]"); 1313 call iodd_msg_ (normal, source, zero_code, "", "clean_pool "); 1314 call iodd_msg_ (normal, source, zero_code, "", 1315 "paper_info [] [-ll ] [-pl ] [-lpi <6 or 8>]"); 1316 call iodd_msg_ (normal, source, zero_code, "", "pause_time []"); 1317 call iodd_msg_ (normal, source, zero_code, "", 1318 "prt_control [] [^]KEY ... (KEYs: force_nep, force_esc, force_ctl_char, force_nsep, autoprint)" 1319 ); 1320 call iodd_msg_ (normal, source, zero_code, "", "pun_control [] [^]autopunch)"); 1321 call iodd_msg_ (normal, source, zero_code, "", "read_cards"); 1322 call iodd_msg_ (normal, source, zero_code, "", "runout_spacing "); 1323 call iodd_msg_ (normal, source, zero_code, "", "sample_hs []"); 1324 call iodd_msg_ (normal, source, zero_code, "", "sample_form"); 1325 call iodd_msg_ (normal, source, zero_code, "", "sep_cards [] [standard | none]"); 1326 call iodd_msg_ (normal, source, zero_code, "", "single"); 1327 go to end_cmd; 1328 end; 1329 if command = "ctl_term" | command = "ctlterm" then do; /* this was passed on by iodd_command_processor_ */ 1330 /* to have us set the default form type */ 1331 iodd_static.form_type = "std_ctl_msg"; /* this is our default */ 1332 do i = 1 to iodd_static.assigned_devices; 1333 p = driver_ptr_list.stat_segp (i); /* get ptr to driver status seg */ 1334 p -> driver_status.form_wait_time = default_form_wait_time; /* set the default wait time */ 1335 end; 1336 go to end_cmd; 1337 end; 1338 1339 if command = "banner_bars" | command = "bannerbars" then do; 1340 if arg_list.n_tokens > 2 then do; 1341 p = find_driver_status_seg_ptr (arg_list.arg (1)); 1342 /* get driver status ptr for minor device given */ 1343 i = 2; /* arg 2 is the value argument */ 1344 end; 1345 else do; /* one arg - could be value for default or ... */ 1346 /* could be minor device name with no value */ 1347 p = default_printer; /* try for the default printer */ 1348 i = 1; /* assume first arg is the value */ 1349 end; 1350 value = -1; /* no value defined yet */ 1351 if arg_list.n_tokens > 1 then do; /* allow for no args at all */ 1352 if arg_list.arg (i) = "-print" then 1353 value = -1; 1354 else if arg_list.arg (i) = "double" then 1355 value = NORMAL_BANNER_BARS; 1356 else if arg_list.arg (i) = "single" then 1357 value = SINGLE_BANNER_BARS; 1358 else if arg_list.arg (i) = "none" then 1359 value = NO_BANNER_BARS; 1360 else p = find_driver_status_seg_ptr (arg_list.arg (i)); 1361 end; 1362 1363 if p = null () then do; 1364 no_printer: 1365 if arg_list.n_tokens = 1 then 1366 opr_msg = "not specified."; 1367 else opr_msg = "not found: " || arg_list.arg (i); 1368 call iodd_msg_ (normal, source, zero_code, "", "Printer minor device ^a", opr_msg); 1369 go to cmd_error; 1370 end; 1371 if p -> driver_status.generic_type ^= "printer" then do; /* printer functions are only for printers */ 1372 not_a_printer: 1373 call iodd_msg_ (normal, source, zero_code, "", "Minor device ""^a"" is not a printer.", 1374 p -> driver_status.device_id); 1375 go to cmd_error; 1376 end; 1377 1378 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* get the control structure pointer */ 1379 1380 if value = -1 then do; 1381 if prt_ctl.banner_bars = NORMAL_BANNER_BARS then 1382 opr_msg = "double"; 1383 else if prt_ctl.banner_bars = SINGLE_BANNER_BARS then 1384 opr_msg = "single"; 1385 else if prt_ctl.banner_bars = NO_BANNER_BARS then 1386 opr_msg = "none"; 1387 else opr_msg = "Undefined value"; 1388 call iodd_msg_ (normal, source, zero_code, "", "Current value is: ^a", opr_msg); 1389 end; 1390 1391 else prt_ctl.banner_bars = value; 1392 1393 go to end_cmd; 1394 end; 1395 1396 if command = "pause_time" | command = "pausetime" then do; 1397 if arg_list.n_tokens > 1 then do; 1398 value = convert (value, arg_list.arg (1)); 1399 if value < zero | value > pause_time_max then do; 1400 call iodd_msg_ (normal, source, zero_code, "", "pause_time range: ^d to ^d seconds ", zero, pause_time_max); 1401 go to cmd_error; 1402 end; 1403 time = value; 1404 go to end_cmd; 1405 end; 1406 else do; 1407 time = pause_time_default; /* return to the default */ 1408 go to end_cmd; 1409 end; 1410 end; 1411 1412 if command = "runout_spacing" | command = "runoutspacing" then do; 1413 if arg_list.n_tokens > 1 then do; 1414 value = convert (value, arg_list.arg (1)); 1415 if value < zero | value > runout_spacing_max then do; /* legal range? */ 1416 call iodd_msg_ (normal, source, zero_code, "", "runout_spacing range is ^d to ^d lines.", 1417 zero, runout_spacing_max); 1418 go to cmd_error; 1419 end; 1420 call iox_$control (teleprinter_iocbp, "runout_spacing", addr (value), code); 1421 if code ^= 0 then do; 1422 call iodd_msg_ (normal, source, zero_code, "", "Unable to set runout spacing for remote device."); 1423 go to cmd_error; 1424 end; 1425 go to end_cmd; 1426 end; 1427 else do; 1428 call iodd_msg_ (normal, source, zero_code, "", "The runout_spacing command must have an argument"); 1429 go to cmd_error; 1430 end; 1431 end; 1432 1433 if command = "paper_info" | command = "paperinfo" then do; 1434 if arg_list.n_tokens > 1 then 1435 p = find_driver_status_seg_ptr (arg_list.arg (1)); 1436 /* see if first arg matches a minor device */ 1437 else p = null; 1438 if mod (arg_list.n_tokens, 2) = 0 then /* odd number of args to cmd, first must be minor device */ 1439 i = 2; /* control args start with arg 2 */ 1440 else do; /* even number of args, wants default or made typing error */ 1441 if p ^= null then do; /* valid minor device name. operator typing error? */ 1442 if arg_list.arg (2) ^= "-print" then do; /* allow this exception */ 1443 call iodd_msg_ (normal, source, zero_code, myname, 1444 "Incorrect number of arguments. Pairs of arguments follow minor device."); 1445 go to cmd_error; 1446 end; 1447 i = 2; /* for the next arg test */ 1448 end; 1449 else do; 1450 p = default_printer; 1451 i = 1; 1452 end; 1453 end; 1454 if p = null () then 1455 go to no_printer; 1456 if p -> driver_status.generic_type ^= "printer" then 1457 go to not_a_printer; /* only allow printers */ 1458 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* get the control pointer for this driver */ 1459 1460 /* not enough args to change data, so print it */ 1461 if i >= arg_list.n_tokens | arg_list.arg (i) = "-print" then do; 1462 call iodd_msg_ (normal, source, zero_code, "", 1463 "Physical paper width: ^d characters.^/Physical paper length: ^d lines at ^d lines per inch.", 1464 prt_ctl.phys_line_length, prt_ctl.phys_page_length, prt_ctl.lines_per_inch); 1465 go to end_cmd; 1466 end; 1467 1468 new_ll = prt_ctl.phys_line_length; 1469 new_pl = prt_ctl.phys_page_length; 1470 new_lpi = prt_ctl.lines_per_inch; 1471 1472 do i = i to n_tokens - 1 by 2; /* check the arg pairs */ 1473 if arg_list.arg (i) = "-ll" then 1474 new_ll = convert (new_ll, arg_list.arg (i + 1)); 1475 else if arg_list.arg (i) = "-pl" then 1476 new_pl = convert (new_pl, arg_list.arg (i + 1)); 1477 else if arg_list.arg (i) = "-lpi" then 1478 new_lpi = convert (new_lpi, arg_list.arg (i + 1)); 1479 else do; /* bad control arg */ 1480 call iodd_msg_ (normal, source, zero_code, "", "Invalid control argument: ^a", arg_list.arg (i)); 1481 go to cmd_error; 1482 end; 1483 end; 1484 if new_ll < line_length_min | new_ll > line_length_max then do; /* check the range */ 1485 call iodd_msg_ (normal, source, zero_code, "", "Line length range is ^d to ^d.", 1486 line_length_min, line_length_max); 1487 go to cmd_error; 1488 end; 1489 1490 if ^(new_lpi = lpi_min | new_lpi = lpi_max) then do; 1491 call iodd_msg_ (normal, source, zero_code, "", "Lines per inch must be ^d or ^d.", 1492 lpi_min, lpi_max); 1493 go to cmd_error; 1494 end; 1495 if new_pl < page_length_min then do; 1496 call iodd_msg_ (normal, source, zero_code, "", "Minimum paper length is ^d lines.", 1497 page_length_min); 1498 go to cmd_error; 1499 end; 1500 if new_pl > page_length_max then do; 1501 call iodd_msg_ (normal, source, zero_code, "", "Maximum paper length is ^d lines.", 1502 page_length_max); 1503 go to cmd_error; 1504 end; 1505 1506 prt_ctl.phys_line_length = new_ll; 1507 prt_ctl.phys_page_length = new_pl; 1508 prt_ctl.lines_per_inch = new_lpi; 1509 1510 call iodd_msg_ (normal, source, zero_code, "", "Changing to: ll ^d, pl ^d at ^d lines per inch.", 1511 prt_ctl.phys_line_length, prt_ctl.phys_page_length, prt_ctl.lines_per_inch); 1512 1513 call set_paper_info (source, code); 1514 if code ^= 0 then 1515 go to cmd_error; 1516 1517 go to end_cmd; 1518 end; 1519 1520 if command = "prt_control" | command = "prtcontrol" then do; 1521 if arg_list.n_tokens > 1 then 1522 p = find_driver_status_seg_ptr (arg_list.arg (1)); 1523 /* see if first arg matches a minor device */ 1524 else p = null; 1525 if p ^= null then /* first arg was a valid minor device name */ 1526 i = 2; /* value args start with arg 2 */ 1527 else do; /* wants default or made typing error */ 1528 p = default_printer; /* try for the default printer device */ 1529 i = 1; /* arg one starts the value */ 1530 end; 1531 if p = null () then 1532 go to no_printer; 1533 if p -> driver_status.generic_type ^= "printer" then 1534 go to not_a_printer; /* only allow printers */ 1535 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* get the control pointer for this driver */ 1536 1537 if arg_list.n_tokens <= i | arg_list.arg (i) = "-print" then do; 1538 call iodd_msg_ (normal, source, zero_code, "", 1539 "Current values are: ^[^^^]force_nep, ^[^^^]force_esc, ^[^^^]force_ctl_char, ^[^^^]force_nsep, ^[^^^]auto_print", 1540 ^prt_ctl.force_nep, ^prt_ctl.force_esc, ^prt_ctl.force_ctl_char, ^prt_ctl.force_nsep, 1541 prt_ctl.no_auto_print); 1542 go to end_cmd; 1543 end; 1544 do i = i to n_tokens - 1; /* look at each argument */ 1545 not = (substr (arg_list.arg (i), 1, 1) = "^"); 1546 /* was first char a "^" */ 1547 if not then 1548 arg_string = substr (arg_list.arg (i), 2); 1549 else arg_string = arg_list.arg (i); 1550 if arg_string = "force_nep" | arg_string = "forcenep" then 1551 prt_ctl.force_nep = ^not; 1552 else if arg_string = "force_esc" | arg_string = "forceesc" then 1553 prt_ctl.force_esc = ^not; 1554 else if arg_string = "force_ctl_char" | arg_string = "forcectlchar" then 1555 prt_ctl.force_ctl_char = ^not; 1556 else if arg_string = "auto_print" | arg_string = "autoprint" then 1557 prt_ctl.no_auto_print = not; 1558 else if arg_string = "force_nsep" | arg_string = "forcensep" then 1559 prt_ctl.force_nsep = ^not; 1560 else call iodd_msg_ (normal, source, zero_code, "", "Undefined argument: ^a", arg_list.arg (i)); 1561 end; 1562 go to end_cmd; 1563 end; 1564 1565 if command = "banner_type" | command = "bannertype" then do; 1566 if arg_list.n_tokens > 2 then do; 1567 p = find_driver_status_seg_ptr (arg_list.arg (1)); 1568 /* get driver status ptr for minor device given */ 1569 i = 2; /* arg 2 is the value argument */ 1570 end; 1571 else do; /* one arg - could be value for default or ... */ 1572 /* could be minor device name with no value */ 1573 p = default_printer; /* try for the default printer */ 1574 i = 1; /* assume first arg is the value */ 1575 end; 1576 value = -1; /* no value defined yet */ 1577 if arg_list.n_tokens > 1 then do; /* allow for no args at all */ 1578 if arg_list.arg (i) = "-print" then 1579 value = -1; 1580 else if arg_list.arg (i) = "none" then 1581 value = NO_BANNERS; 1582 else if arg_list.arg (i) = "standard" then 1583 value = NORMAL_BANNERS; 1584 else if arg_list.arg (i) = "brief" then 1585 value = BRIEF_BANNERS; 1586 else p = find_driver_status_seg_ptr (arg_list.arg (i)); 1587 end; 1588 1589 if p = null () then 1590 go to no_printer; 1591 if p -> driver_status.generic_type ^= "printer" then 1592 go to not_a_printer; /* only allow printers */ 1593 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* get the control structure pointer */ 1594 1595 if value = -1 then do; /* print the current value */ 1596 if prt_ctl.banner_type = NO_BANNERS then 1597 opr_msg = "none"; 1598 else if prt_ctl.banner_type = NORMAL_BANNERS then 1599 opr_msg = "standard"; 1600 else if prt_ctl.banner_type = BRIEF_BANNERS then 1601 opr_msg = "brief"; 1602 else opr_msg = "Undefined value"; 1603 call iodd_msg_ (normal, source, zero_code, "", "Current value is: ^a", opr_msg); 1604 end; 1605 1606 else prt_ctl.banner_type = value; 1607 1608 go to end_cmd; 1609 end; 1610 1611 if command = "sample_hs" | command = "samplehs" then do; 1612 i = arg_list.n_tokens - 1; /* define this in case of error */ 1613 if arg_list.n_tokens = 1 then 1614 p = default_printer; 1615 else p = find_driver_status_seg_ptr (arg_list.arg (1)); 1616 if p = null () then 1617 go to no_printer; 1618 if p -> driver_status.generic_type ^= "printer" then 1619 go to not_a_printer; /* only allow printers */ 1620 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr; 1621 1622 call iox_$control (p -> driver_status.dev_out_iocbp, "reset", null, ignore_code); 1623 /* clear everything */ 1624 call iox_$control (p -> driver_status.dev_out_iocbp, "inside_page", null, ignore_code); 1625 1626 call write_sample_prt_banner_ ("head_sheet", p -> driver_status.dev_out_iocbp, prt_ctl_ptr, ignore_code); 1627 1628 call iox_$control (p -> driver_status.dev_out_iocbp, "end_of_page", null, ignore_code); 1629 call iox_$control (p -> driver_status.dev_out_iocbp, "runout", null, ignore_code); 1630 /* be sure it prints */ 1631 call iox_$control (p -> driver_status.dev_out_iocbp, "end_write_mode", null, ignore_code); 1632 call timer_manager_$sleep (time, RELATIVE_SECONDS); 1633 1634 go to end_cmd; 1635 end; 1636 1637 if command = "single" then do; /* single space FF and VT for current request */ 1638 if iodd_static.request_in_progress then do; 1639 p = iodd_static.driver_ptr -> driver_status.dev_out_iocbp; 1640 call iox_$modes (p, "single", omode, ignore_code); 1641 /* set single mode */ 1642 dmp = addr (iodd_static.driver_ptr -> driver_status.message); 1643 if dprint_msg.message_type = printer_request then 1644 call do_prt_request_$single_copy (); 1645 /* avoid same problem if another copy requested */ 1646 else call output_request_$set_single_copy (); 1647 end; 1648 else call iodd_msg_ (normal, source, zero_code, "", "No current request."); 1649 go to end_cmd; 1650 end; 1651 1652 if command = "pun_control" | command = "puncontrol" then do; 1653 if arg_list.n_tokens > 1 then 1654 p = find_driver_status_seg_ptr (arg_list.arg (1)); 1655 /* see if first arg matches a minor device */ 1656 else p = null; 1657 if p ^= null then /* first arg was a valid minor device name */ 1658 i = 2; /* value args start with arg 2 */ 1659 else do; /* wants default or made typing error */ 1660 p = default_punch; /* try for the default punch device */ 1661 i = 1; /* arg one starts the value */ 1662 end; 1663 if p = null () then do; 1664 no_punch: 1665 if arg_list.n_tokens = 1 then 1666 opr_msg = "not specified."; 1667 else opr_msg = "not found: " || arg_list.arg (i); 1668 call iodd_msg_ (normal, source, zero_code, "", "Punch minor device ^a", opr_msg); 1669 go to cmd_error; 1670 end; 1671 if p -> driver_status.generic_type ^= "punch" then do; /* punch functions are only for punches */ 1672 not_a_punch: 1673 call iodd_msg_ (normal, source, zero_code, "", "Minor device ""^a"" is not a punch.", 1674 p -> driver_status.device_id); 1675 go to cmd_error; 1676 end; 1677 1678 pun_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* get the control pointer for this driver */ 1679 1680 if arg_list.n_tokens <= i | arg_list.arg (i) = "-print" then do; 1681 call iodd_msg_ (normal, source, zero_code, "", "Current value is: ^[^^^]auto_punch", ^pun_ctl.auto_punch); 1682 go to end_cmd; 1683 end; 1684 do i = i to n_tokens - 1; /* look at each argument */ 1685 not = (substr (arg_list.arg (i), 1, 1) = "^"); 1686 /* was first char a "^" */ 1687 if not then 1688 arg_string = substr (arg_list.arg (i), 2); 1689 else arg_string = arg_list.arg (i); 1690 if arg_string = "auto_punch" | arg_string = "autopunch" then 1691 pun_ctl.auto_punch = ^not; 1692 else call iodd_msg_ (normal, source, zero_code, "", "Undefined argument: ^a", arg_list.arg (i)); 1693 end; 1694 go to end_cmd; 1695 end; 1696 1697 if command = "sep_cards" | command = "sepcards" then do; 1698 if arg_list.n_tokens > 2 then do; 1699 p = find_driver_status_seg_ptr (arg_list.arg (1)); 1700 /* get driver status ptr for minor device given */ 1701 i = 2; /* arg 2 is the value argument */ 1702 end; 1703 else do; /* one arg - could be value for default or ... */ 1704 /* could be minor device name with no value */ 1705 p = default_punch; /* try for the default punch */ 1706 i = 1; /* assume first arg is the value */ 1707 end; 1708 value = -1; /* no value defined yet */ 1709 if arg_list.n_tokens > 1 then do; /* allow for no args at all */ 1710 if arg_list.arg (i) = "-print" then 1711 value = -1; 1712 else if arg_list.arg (i) = "none" then 1713 value = none; 1714 else if arg_list.arg (i) = "standard" then 1715 value = standard; 1716 else p = find_driver_status_seg_ptr (arg_list.arg (i)); 1717 end; 1718 1719 if p = null () then 1720 go to no_punch; 1721 if p -> driver_status.generic_type ^= "punch" then 1722 go to not_a_punch; /* only allow punches */ 1723 pun_ctl_ptr = p -> driver_status.dev_ctl_ptr;/* get the control structure pointer */ 1724 1725 if value = -1 then do; /* print the current value */ 1726 if pun_ctl.sep_cards = none then 1727 opr_msg = "none"; 1728 else if pun_ctl.sep_cards = standard then 1729 opr_msg = "standard"; 1730 else opr_msg = "Undefined value"; 1731 call iodd_msg_ (normal, source, zero_code, "", "Current value is: ^a", opr_msg); 1732 end; 1733 1734 else pun_ctl.sep_cards = value; 1735 1736 go to end_cmd; 1737 end; 1738 1739 if command = "read_cards" | command = "readcards" then do; 1740 if reader_attached then do; 1741 if iodd_static.test_entry then /* use a dummy pool root under pool_dir for test */ 1742 pool_dir = rtrim (iodd_static.sys_dir_ptr -> sys_dir) || ">card_pool"; 1743 /* the test pool root */ 1744 else pool_dir = "System_Card_Pool"; /* otherwise use the one coded in */ 1745 1746 call pool_manager_$init (pool_dir, minimum_quota, "1000"b, code); 1747 /* use 10 pages of quota initially */ 1748 /* and set s *.*.* on initial acl of access class pool */ 1749 if code ^= 0 then do; /* oops! */ 1750 call iodd_msg_ (normal, source, code, myname, "Unable to initialize card pool."); 1751 go to cmd_error; 1752 end; 1753 call iodd_msg_ (normal, source, zero_code, "", "Card input started."); 1754 if source = slave then 1755 call iox_$control (iodd_static.slave_out, "runout", null, ignore_code); 1756 1757 on card_command_level go to abort_read; /* grab control after record quota overflow */ 1758 1759 call read_cards_ (pool_dir, addr (card_info), terminal (source), (iodd_static.test_entry), code); 1760 if code ^= 0 then do; 1761 call iodd_msg_ (normal, source, code, myname, "Check card deck format."); 1762 go to cmd_error; 1763 end; 1764 go to end_cmd; 1765 1766 abort_read: 1767 call iodd_msg_ (normal, source, zero_code, "", "Use the ""clean_pool"" command and retry card input."); 1768 go to cmd_error; 1769 end; 1770 else do; 1771 call iodd_msg_ (normal, source, zero_code, "", "The card reader is not attached."); 1772 go to end_cmd; 1773 end; 1774 end; 1775 1776 if command = "sample_form" | command = "sampleform" then do; 1777 if iodd_static.ctl_term.attached then do; /* be sure there is a place to write */ 1778 if iodd_static.forms then do; /* are we simulating FF? */ 1779 call iox_$control (iodd_static.slave_out, "form_status", addr (form_info), code); 1780 if code ^= 0 then do; /* OOPS.... */ 1781 iodd_static.forms = FALSE; 1782 iodd_static.slave_hold = TRUE;/* this is a problem for master terminal */ 1783 call iodd_msg_ (error, both, code, myname, 1784 "Bad form_status order call. Form feed simulation terminated."); 1785 go to cmd_error; 1786 end; 1787 if ^form_info.aligned then 1788 call iox_$control (iodd_static.slave_out, "form_aligned", null, ignore_code); 1789 /* this will work */ 1790 end; 1791 call write_sample_form_ (iodd_static.form_type, (iodd_static.ctl_output), code); 1792 if code ^= 0 then 1793 if code ^= error_table_$action_not_performed then 1794 call iodd_msg_ (normal, source, code, myname, "Error writing form."); 1795 else call iodd_msg_ (normal, source, zero_code, "", "No form type has been set."); 1796 go to end_cmd; 1797 end; 1798 call iodd_msg_ (normal, source, zero_code, "", "Control terminal is not attached."); 1799 go to end_cmd; 1800 end; 1801 1802 if command = "clean_pool" | command = "cleanpool" then do; /* garbage collect the card pool */ 1803 if source = slave then do; 1804 call iodd_msg_ (normal, source, zero_code, "", "The clean_pool command is restricted to the master terminal.") 1805 ; 1806 go to cmd_error; 1807 end; 1808 if arg_list.n_tokens < 2 then do; /* we must have an age arg */ 1809 call iodd_msg_ (normal, source, zero_code, "", "Argument missing: days allowed to remain in the pool."); 1810 go to cmd_error; 1811 end; 1812 age = convert (age, arg_list.arg (1)); /* convert to binary */ 1813 if age < 1 then do; /* be sure the value is right */ 1814 call iodd_msg_ (normal, source, zero_code, "", "Invalid argument: ^a", arg_list.arg (1)); 1815 go to cmd_error; 1816 end; 1817 if iodd_static.test_entry then /* use a dummy pool root under sys_dir for test */ 1818 pool_dir = rtrim (iodd_static.sys_dir_ptr -> sys_dir) || ">card_pool"; 1819 /* this is the test pool root */ 1820 else pool_dir = "System_Card_Pool"; /* otherwise use the one coded in */ 1821 call pool_manager_$clean_pool (pool_dir, age, minimum_quota, code); 1822 /* let pool_manager_ do the work */ 1823 if code ^= 0 then 1824 call iodd_msg_ (normal, source, code, myname, "Unable to clean the card pool."); 1825 go to end_cmd; 1826 end; 1827 1828 /* When control passes here, the command is unknown. So just return and let iodd_command_processor_ handle it. */ 1829 1830 a_code = save_code; 1831 return; 1832 1833 end_cmd: 1834 a_code = code; /* pass back any defined errors */ 1835 return; 1836 1837 cmd_error: 1838 a_code = error_table_$action_not_performed; /* cause a resetread */ 1839 return; 1840 1841 1842 /* default error handler for the remote driver */ 1843 default_handler: entry (condition_info_ptr); 1844 1845 dcl condition char (32); /* fixed string for the call */ 1846 1847 condition = condition_info.condition_name; /* this will indent funny */ 1848 1849 if iodd_static.request_in_progress then do; 1850 dmp = addr (iodd_static.driver_ptr -> driver_status.message); 1851 if dprint_msg.message_type = printer_request then /* had to know who to call */ 1852 call do_prt_request_$error_during_request (condition); 1853 else call output_request_$error_during_request (condition); 1854 /* take it away */ 1855 end; 1856 return; /* output_request_ should not return, but.... */ 1857 1858 problem_notification: entry (msg_to_send); 1859 1860 /* this entry sends an express message to the user (if allowed) explaining the 1861* problem with the device. If the user didn't get the message, try to send to 1862* an admin mailbox so someone can see there is a problem. We don't care if 1863* either of the recipients don't get the message. We tried. */ 1864 1865 dcl msg_to_send char (*); 1866 1867 dcl (user, project) char (32); 1868 dcl mbx_dirname char (168); 1869 dcl mbx_entname char (32); 1870 dcl mbx_access_class bit (72) aligned; 1871 1872 /* locate info on current request */ 1873 driver_status_ptr = iodd_static.driver_ptr; 1874 mseg_message_info_ptr = addr (driver_status.descriptor); 1875 1876 /* if we are allowed to notify the user of the problem, then isolate the user 1877* name and project from the ID in the request and build the path to the user's 1878* mailbox */ 1879 user = iodd_parse_$args ("notify_owner=", major_args); 1880 if user = "yes" then do; 1881 user = before (mseg_message_info.sender_id, "."); 1882 project = after (mseg_message_info.sender_id, "."); 1883 project = before (project, "."); 1884 mbx_dirname = ">udd>" || rtrim (project) || ">" || user; 1885 mbx_entname = rtrim (user) || ".mbx"; 1886 mbx_access_class = mseg_message_info.sender_authorization; 1887 call send_the_message; 1888 if code = 0 then return; /* got through OK */ 1889 end; 1890 1891 /* if we got here, either the user isn't supposed to received the problem 1892* message or we tried to send it and the user would't receive the message. In 1893* either case, we will see if there is an admin mailbox defined. If there is, 1894* we will send the message there. */ 1895 1896 mbx_dirname = iodd_parse_$args ("admin_mbx=", major_args); 1897 if mbx_dirname = "" then return; /* no admin address defined, forget it */ 1898 1899 call expand_pathname_$add_suffix (mbx_dirname, "mbx", mbx_dirname, mbx_entname, code); 1900 if code ^= 0 then return; 1901 1902 mbx_access_class = mseg_message_info.sender_authorization; 1903 call send_the_message; 1904 1905 return; 1906 1907 /* end problem_notification; */ 1908 1909 1910 send_the_message: proc; 1911 1912 /* internal entry used to send out the problem notification message */ 1913 1914 dcl (ipc_ind, r1_ind) fixed bin (35); 1915 1916 if smi.version = -1 then do; /* 1st call, must init */ 1917 smi.version = send_mail_info_version_2; 1918 smi.wakeup = TRUE; 1919 smi.mbz1 = ""b; 1920 smi.always_add = FALSE; 1921 smi.never_add = FALSE; 1922 smi.notify = FALSE; 1923 smi.acknowledge = FALSE; 1924 smi.mbz = ""b; 1925 end; 1926 smi.sent_from = driver_status.dev_name_label; 1927 1928 ipc_ind, r1_ind = -1; /* set to non-zero to test call */ 1929 1930 if ^sys_priv then /* tried once & failed */ 1931 go to send_it; /* so don't bother to try again */ 1932 1933 /* see if we can get our privileges turned on */ 1934 on linkage_error begin; 1935 sys_priv = "0"b; /* stop trying if fail */ 1936 go to revert_handler; /* send the message if possible */ 1937 end; 1938 1939 on any_other begin; 1940 if r1_ind = 0 then 1941 call system_privilege_$ring1_priv_off (r1_ind); 1942 if ipc_ind = 0 then 1943 call system_privilege_$ipc_priv_off (ipc_ind); 1944 r1_ind, ipc_ind = -1; 1945 call continue_to_signal_ (ignore_code); 1946 end; 1947 1948 call system_privilege_$ring1_priv_on (r1_ind); 1949 1950 call system_privilege_$ipc_priv_on (ipc_ind); 1951 1952 revert_handler: 1953 revert linkage_error; 1954 1955 send_it: call message_facility_$send_message_access_class (mbx_dirname, mbx_entname, 1956 msg_to_send, addr (smi), mbx_access_class, code); 1957 1958 if r1_ind = 0 then 1959 call system_privilege_$ring1_priv_off (r1_ind); 1960 1961 if ipc_ind = 0 then 1962 call system_privilege_$ipc_priv_off (ipc_ind); 1963 1964 end send_the_message; 1965 1966 1967 set_wait_timer: 1968 procedure (); 1969 1970 call ipc_$drain_chn (ctl_wait_list.channel, code); 1971 if code ^= 0 then do; /* avoid futher trouble, but not fatal */ 1972 ctl_wait_list.channel = 0; /* stop trying */ 1973 ctl_wait_list.number = 0; 1974 iodd_static.slave_hold = TRUE; /* go back to command level for guidance */ 1975 ctl_msg_sent = FALSE; /* and don't block */ 1976 call iodd_msg_ (error, master, zero_code, myname, "Bad call to ipc_$drain_chn. Form synchronization terminated."); 1977 end; 1978 if ctl_msg_sent then 1979 call timer_manager_$alarm_wakeup (p -> driver_status.form_wait_time, RELATIVE_SECONDS, alarm_channel); 1980 return; 1981 1982 end set_wait_timer; 1983 1984 1985 1986 wait_for_ctl_finish: 1987 procedure (); 1988 1989 if iodd_static.quit_during_request then do; /* wakeup was lost */ 1990 ctl_msg_sent = FALSE; /* cancel the flag */ 1991 return; 1992 end; 1993 if ctl_msg_sent then do; /* avoid premature block on non-event */ 1994 ctl_msg_sent = FALSE; /* ready for the next one */ 1995 call ipc_$block (addr (ctl_wait_list), addr (event_info), ignore_code); 1996 /* wait for form to finish */ 1997 end; 1998 return; 1999 2000 end wait_for_ctl_finish; 2001 2002 2003 2004 close_and_detach: 2005 procedure (a_iocbp, send_hangup); 2006 2007 dcl a_iocbp ptr; 2008 dcl send_hangup bit (1); 2009 2010 if a_iocbp = null then 2011 return; 2012 2013 if send_hangup then 2014 call iox_$control (a_iocbp, "hangup", null, ignore_code); 2015 2016 call iox_$close (a_iocbp, ignore_code); 2017 call iox_$detach_iocb (a_iocbp, ignore_code); 2018 2019 a_iocbp = null; 2020 2021 return; 2022 2023 end close_and_detach; 2024 2025 2026 minor_attach: 2027 procedure (Device); 2028 2029 declare Device char (*) parameter; 2030 declare desc char (256) varying; 2031 declare mode fixed bin; 2032 declare device_io_module char (32) var; 2033 2034 desc = major_desc || space || iodd_parse_$args ("desc=", minor_args); 2035 2036 if Device = "printer" then 2037 device_io_module = "remote_printer_"; 2038 else if Device = "punch" then 2039 device_io_module = "remote_punch_"; 2040 else if Device = "reader" then 2041 device_io_module = "remote_input_"; 2042 2043 attach_desc = device_io_module || " " || desc; 2044 p -> driver_status.dev_out_stream = get_switch_name (Device); 2045 2046 call iox_$attach_ioname ((p -> driver_status.dev_out_stream), p -> driver_status.dev_out_iocbp, (attach_desc), 2047 code); 2048 if code ^= 0 & code ^= error_table_$not_detached & code ^= error_table_$ionmat then 2049 go to attach_error; 2050 2051 if Device = "reader" then 2052 mode = Stream_input; 2053 else mode = Stream_output; 2054 2055 call iox_$open (p -> driver_status.dev_out_iocbp, mode, ""b, code); 2056 if code ^= 0 & code ^= error_table_$not_closed then do; 2057 attach_error: 2058 call iodd_msg_ (error, master, code, myname, "Attaching minor device: ^a^/Attach desc: ^a.", 2059 p -> driver_status.device_id, attach_desc); 2060 go to clean_out; 2061 end; 2062 2063 iodd_static.current_devices = iodd_static.current_devices + 1; 2064 2065 if ^hangup_proc_defined then 2066 call set_hangup_proc (p -> driver_status.dev_out_iocbp); 2067 2068 end minor_attach; 2069 2070 2071 2072 get_switch_name: 2073 procedure (Device) returns (character (32)); 2074 2075 declare index fixed bin internal static init (0); 2076 declare Device char (*); 2077 2078 index = index + 1; 2079 if index > 999 then 2080 index = 1; /* keep it reasonable */ 2081 return (Device || "_" || ltrim (character (index))); 2082 2083 end get_switch_name; 2084 2085 2086 find_driver_status_seg_ptr: 2087 procedure (minor_device_name) returns (pointer); 2088 2089 dcl minor_device_name varying character (*) aligned parameter; 2090 dcl i fixed bin; 2091 dcl stat_segp ptr; 2092 2093 list_ptr = iodd_static.driver_list_ptr; /* make reference easier to read */ 2094 do i = 1 to driver_ptr_list.number; 2095 stat_segp = driver_ptr_list.stat_segp (i); /* get next driver status seg ptr */ 2096 if minor_device_name = stat_segp -> driver_status.device_id then 2097 /* look for minor name match */ 2098 return (stat_segp); 2099 end; 2100 2101 return (null ()); /* no minor device found with the requested name */ 2102 2103 end find_driver_status_seg_ptr; 2104 2105 2106 2107 set_hangup_proc: 2108 procedure (iocbp); 2109 2110 dcl iocbp ptr; 2111 2112 /* this internal proc will set the device hangup procedure for the specified switch */ 2113 2114 hangup_info.entry = iodd_hangup_$iodd_hangup_; 2115 hangup_info.data_ptr = stat_p; 2116 hangup_info.priority = 1; 2117 call iox_$control (iocbp, "hangup_proc", addr (hangup_info), code); 2118 if code ^= 0 then 2119 call iodd_msg_ (error, master, code, myname, 2120 "Warning: Could not establish handler for hangups from the device."); 2121 2122 hangup_proc_defined = TRUE; /* once is enuf */ 2123 2124 return; 2125 2126 end set_hangup_proc; 2127 2128 2129 set_paper_info: 2130 procedure (source, code); 2131 2132 dcl code fixed bin (35); 2133 dcl source fixed bin; 2134 2135 code = 0; 2136 2137 call iox_$control (p -> driver_status.dev_out_iocbp, "paper_info", addr (prt_ctl.paper_info), code); 2138 if code ^= 0 then 2139 if code = error_table_$no_operation then do; /* if dim couldn't, tell the operator */ 2140 2141 call iodd_msg_ (normal, source, zero_code, "", 2142 "^/Mount VFU tape for ^d lines per page.^/Set printer for ^d lines/inch.", 2143 prt_ctl.phys_page_length, prt_ctl.lines_per_inch); 2144 2145 code = 0; /* this is really ok */ 2146 end; 2147 else do; 2148 call iodd_msg_ (normal, both, code, myname, "Unable to perform paper_info order."); 2149 /* a real error */ 2150 end; 2151 2152 return; 2153 2154 end set_paper_info; 2155 2156 2157 get_prt_rqti_data: 2158 procedure (p); 2159 2160 dcl p pointer; 2161 2162 /* internal procedure to get paper info and channel stops data from the rqt info segment 2163* or to establish some defaults if one is not being used */ 2164 2165 prt_ctl_ptr = p -> driver_status.dev_ctl_ptr; 2166 string (prt_ctl.flags) = ""b; 2167 2168 if p -> driver_status.rqti_ptr ^= null then do; /* if there is an rqti seg, use it */ 2169 2170 prt_rqtip = p -> driver_status.rqti_ptr; /* make the based references cleaner */ 2171 if prt_rqti.header.header_version ^= rqti_header_version_1 then do; 2172 call iodd_msg_ (error, both, error_table_$fatal_error, myname, 2173 "prt rqt info header version ^d found (expected ^d)", prt_rqti.header.header_version, 2174 rqti_header_version_1); 2175 go to clean_out; 2176 end; 2177 2178 prt_ctl.meter = prt_rqti.header.meter; /* do we take meter data? */ 2179 ready_device = ready_device | prt_rqti.header.auto_go; 2180 p -> driver_status.ready = prt_rqti.header.auto_go; 2181 /* set the initial hold state as requested */ 2182 iodd_static.wakeup_time = max (wakeup_time_default, prt_rqti.header.driver_wait_time); 2183 /* seconds to wait for a request */ 2184 if prt_rqti.header.type_code = 0 then 2185 go to set_defaults; /* this is only a header */ 2186 else if prt_rqti.header.type_code ^= 1 then do; 2187 call iodd_msg_ (error, both, error_table_$fatal_error, myname, "Wrong rqt info seg type for printer.") 2188 ; 2189 go to clean_out; 2190 end; 2191 2192 if prt_rqti.version ^= prt_rqti_version_1 then do; /* see if it is the right version */ 2193 call iodd_msg_ (error, both, error_table_$fatal_error, myname, 2194 "Wrong version of prt_rqti. Found ^d (expected ^d)", prt_rqti.version, prt_rqti_version_1); 2195 go to clean_out; 2196 end; 2197 2198 if prt_rqti.opr_msg ^= "" then 2199 call iodd_msg_ (normal, both, zero_code, "", "^/^a", prt_rqti.opr_msg); 2200 /* give operator instructions */ 2201 2202 prt_ctl.phys_page_length = prt_rqti.paper_length; 2203 /* get paper data for prtdim */ 2204 prt_ctl.phys_line_length = prt_rqti.paper_width; 2205 prt_ctl.lines_per_inch = prt_rqti.lines_per_inch; 2206 2207 prt_ctl.channel_stops = prt_rqti.channel_stops; 2208 /* get VFU stops for printer */ 2209 2210 prt_ctl.banner_type = prt_rqti.banner_type; /* copy control info to writable storage */ 2211 prt_ctl.force_nep = prt_rqti.force_nep; 2212 prt_ctl.force_esc = prt_rqti.force_esc; 2213 prt_ctl.force_ctl_char = prt_rqti.force_ctl_char; 2214 prt_ctl.no_auto_print = prt_rqti.no_auto_print; 2215 prt_ctl.force_nsep = prt_rqti.force_nsep; 2216 prt_ctl.banner_bars = prt_rqti.banner_bars; 2217 prt_ctl.banner_indent = prt_rqti.banner_indent; 2218 prt_ctl.banner_line = prt_rqti.banner_line; 2219 end; 2220 else do; /* no rqti seg, so set some defaults */ 2221 prt_ctl.meter = FALSE; /* no meters */ 2222 iodd_static.slave_hold = TRUE; /* be sure to ask for a start command */ 2223 iodd_static.wakeup_time = wakeup_time_default; /* check every 30 seconds */ 2224 set_defaults: /* set up the default paper data */ 2225 prt_ctl.phys_page_length = page_length_default; /* 11 inch paper at 6 lpi is 66 lines */ 2226 prt_ctl.phys_line_length = line_length_default; /* standard remote platten is 132 chars */ 2227 prt_ctl.lines_per_inch = lpi_default; /* normal for good readibility */ 2228 2229 string (prt_ctl.channel_stops) = FALSE; /* no slew stops are defined */ 2230 2231 prt_ctl.force_nep = FALSE; /* let user have his way */ 2232 prt_ctl.force_esc = FALSE; 2233 prt_ctl.force_ctl_char = FALSE; 2234 prt_ctl.no_auto_print = FALSE; /* print without requesting operator attn */ 2235 prt_ctl.force_nsep = FALSE; /* print inner head and tail sheets for multiple copies */ 2236 prt_ctl.banner_type = NORMAL_BANNERS; /* use normal head/tail sheets */ 2237 prt_ctl.banner_bars = NORMAL_BANNER_BARS; /* means nothing for now */ 2238 prt_ctl.banner_indent = 0; /* again */ 2239 prt_ctl.banner_line = 1; /* again */ 2240 end; 2241 2242 2243 return; 2244 2245 end get_prt_rqti_data; 2246 2247 2248 initiate_the_file: 2249 proc (pathname_string, args_ptr, args_length, message, code); 2250 2251 dcl pathname_string char (256) varying; 2252 dcl args_ptr ptr; 2253 dcl args_length fixed bin; 2254 dcl message char (*); 2255 dcl code fixed bin (35); 2256 2257 dcl dirname char (168); 2258 dcl entname char (32); 2259 dcl compname char (32); 2260 dcl args_bc fixed bin (24); 2261 2262 call expand_pathname_$component ((pathname_string), dirname, entname, compname, code); 2263 if code ^= 0 then 2264 return; 2265 call initiate_file_$component (dirname, entname, compname, R_ACCESS, args_ptr, args_bc, code); 2266 if code ^= 0 then 2267 return; 2268 args_length = divide (args_bc + 8, 9, 17, 0); 2269 2270 end initiate_the_file; 2271 2272 return_string: proc (target) returns (char (*)); 2273 2274 /* routine to return a string from the i/o daemon tables text strings area */ 2275 2276 dcl 1 target unaligned like text_offset; 2277 2278 if target.total_chars = 0 then 2279 return (""); 2280 else return (substr (text_strings.chars, target.first_char, target.total_chars)); 2281 end return_string; 2282 2283 evaluate_forms_options: proc (error_code); 2284 2285 /* this subroutine will evaluate the forms option supplied by the user and the 2286* defaults defined for the request type and/or device. 2287**/ 2288 2289 dcl error_code fixed bin (35); 2290 2291 /* set to global ptrs to main groups in io daemon tables we will need */ 2292 idtp = iodd_static.idtp; /* device tables */ 2293 mdtp = iodd_static.mdtp; /* minor device tables */ 2294 qgtp = iodd_static.qgtp; /* request_type tables */ 2295 dctp = iodd_static.dev_class_ptr; /* device_class tables */ 2296 text_strings_ptr = iodd_static.text_strings_ptr; /* common text strings */ 2297 2298 /* now set up ptrs to specific request type and device entries for this request */ 2299 idtep = addr (iod_device_tab.entries (p -> driver_status.maj_index)); /* major device entry */ 2300 mdtep = addr (minor_device_tab.entries (p -> driver_status.dev_index)); /* minor device entry */ 2301 dctep = addr (dev_class_tab.entries (p -> driver_status.dev_class_index)); /* device_class entry */ 2302 qgtep = addr (q_group_tab.entries (dcte.qgte_index)); /* request_type */ 2303 2304 if my_area_ptr = null then 2305 my_area_ptr = get_system_free_area_ (); 2306 2307 /* set up the structure to pass in */ 2308 if dprint_msg.version < dprint_msg_version_5 then 2309 system_input_forms_string_length = length (rtrim (dprint_msg.forms)); 2310 else system_input_forms_string_length = dprint_msg.forms_name_lth; 2311 evaluate_forms_info_input_ptr, 2312 evaluate_forms_info_output_ptr = null; 2313 2314 on cleanup begin; 2315 if evaluate_forms_info_input_ptr ^= null then 2316 free evaluate_forms_info_input; 2317 if evaluate_forms_info_output_ptr ^= null then 2318 free evaluate_forms_info_output; 2319 end; 2320 2321 allocate evaluate_forms_info_input in (my_area); 2322 2323 evaluate_forms_info_input.version = EVALUATE_FORMS_INFO_INPUT_VERSION_1; 2324 evaluate_forms_info_input.ithp = iodd_static.ithp; 2325 evaluate_forms_info_input.qgtep = qgtep; 2326 evaluate_forms_info_input.idtep = idtep; 2327 evaluate_forms_info_input.mdtep = mdtep; 2328 if dprint_msg.version < dprint_msg_version_5 then 2329 evaluate_forms_info_input.forms_string = rtrim (dprint_msg.forms); 2330 else evaluate_forms_info_input.forms_string = dprint_msg.forms_name; 2331 evaluate_forms_info_input.area_ptr = my_area_ptr; 2332 2333 /* call common routine which does all forms validation */ 2334 call iod_info_$evaluate_forms_info (p -> driver_status.rqti_ptr, 2335 evaluate_forms_info_input_ptr, evaluate_forms_info_output_ptr, 2336 error_code); 2337 if error_code = 0 | error_code = error_table_$no_forms_table_defined then do; 2338 prt_ctl.phys_line_length = evaluate_forms_info_output.chars_per_line; 2339 prt_ctl.phys_page_length = evaluate_forms_info_output.lines_per_page; 2340 prt_ctl.lines_per_inch = evaluate_forms_info_output.lines_per_inch; 2341 p -> driver_status.forms_validation_ptr = evaluate_forms_info_output_ptr; 2342 error_code = 0; 2343 end; 2344 2345 free evaluate_forms_info_input; 2346 2347 end evaluate_forms_options; 2348 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 2348 2349 /* BEGIN INCLUDE FILE ... card_stream_info.incl.pl1 */ 2 2 2 3 /* This is the info structure passed to read_cards_ which defines the data streams 2 4* used to interpret user card decks according to the Multics card input facility. */ 2 5 2 6 dcl stream_info_ptr ptr; 2 7 2 8 dcl 1 card_stream_info aligned based (stream_info_ptr), 2 9 2 control_stream char (32), /* stream used for control card reading */ 2 10 2 n_streams fixed bin, /* number of data streams active in the list */ 2 11 2 data_streams (5), /* array of streams for different card formats */ 2 12 3 format char (12), /* name of the stream format (e.g. mcc, raw) */ 2 13 3 name char (32), /* name of the stream as attached */ 2 14 3 el_size fixed bin; /* element size for the stream */ 2 15 2 16 /* END INCLUDE FILE ... card_stream_info.incl.pl1 */ 2349 2350 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 3 2 3 3 /* Structure for find_condition_info_. 3 4* 3 5* Written 1-Mar-79 by M. N. Davidoff. 3 6**/ 3 7 3 8 /* automatic */ 3 9 3 10 declare condition_info_ptr pointer; 3 11 3 12 /* based */ 3 13 3 14 declare 1 condition_info aligned based (condition_info_ptr), 3 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 3 16 2 version fixed binary, /* Must be 1 */ 3 17 2 condition_name char (32) varying, /* name of condition */ 3 18 2 info_ptr pointer, /* pointer to the condition data structure */ 3 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 3 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 3 21 2 flags unaligned, 3 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 3 23 3 pad1 bit (35), 3 24 2 pad2 bit (36), 3 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 3 26 2 pad3 (4) bit (36); 3 27 3 28 /* internal static */ 3 29 3 30 declare condition_info_version_1 3 31 fixed binary internal static options (constant) initial (1); 3 32 3 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 2350 2351 /* BEGIN INCLUDE FILE...device_class.incl.pl1 */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 4 7* Ancient History 4 8* Coded by R.S.Coren August 1973 4 9* Modified by J. Stern, 1/8/75 4 10* Modified by J. C. Whitmore, 5/78, to extent the size of the device list 4 11* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 4 12* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 4 13* Added comment field in dcte. 4 14* END HISTORY COMMENTS */ 4 15 4 16 4 17 /* format: style4 */ 4 18 4 19 dcl dctp ptr; /* ptr to device class table */ 4 20 dcl 1 dev_class_tab aligned based (dctp), /* the device class table */ 4 21 2 n_classes fixed bin, /* number of device classes */ 4 22 2 pad fixed bin, 4 23 2 entries (1 refer (dev_class_tab.n_classes)) like dcte; 4 24 4 25 dcl dctep ptr; /* device class table entry ptr */ 4 26 4 27 dcl 1 dcte aligned based (dctep), /* device class table entry */ 4 28 4 29 /* following items are initialized before daemon is run */ 4 30 4 31 2 id char (32), /* device class name for this entry */ 4 32 2 comment unaligned like text_offset, /* comment to apply to the device class */ 4 33 2 qgte_index fixed bin, /* index of queue group table entry */ 4 34 2 pad1 fixed bin, 4 35 2 max_access bit (72), /* max request access class */ 4 36 2 min_access bit (72), /* min request access class */ 4 37 2 min_banner bit (72), /* min access class to be placed on output banner */ 4 38 2 device_list bit (360), /* bit _i ON => minor device _i is valid for device class */ 4 39 4 40 /* remaining info is dynamic */ 4 41 4 42 2 pending_request fixed bin (18), /* descriptor offset for allocated but unassigned request */ 4 43 2 restart_req fixed bin (18), /* offset of next (or last) descriptor to be restarted */ 4 44 2 pad2 (3) fixed bin, 4 45 2 n_waiting fixed bin, /* number of waiting requests for device class */ 4 46 2 per_queue_info (4), /* one copy of this for each queue */ 4 47 3 first_waiting fixed bin, /* index of first waiting list entry */ 4 48 3 last_waiting fixed bin; /* index of last waiting list entry */ 4 49 4 50 4 51 /* END INCLUDE FILE...device_class.incl.pl1 */ 2351 2352 /* BEGIN INCLUDE FILE ... dprint_msg.incl.pl1 */ 5 2 /* Modified: November 1983 by C. Marker Added no_separator. */ 5 3 5 4 /****^ HISTORY COMMENTS: 5 5* 1) change(87-05-10,Gilcrease), approve(87-05-13,MCR7686), 5 6* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 5 7* Add line_nbrs bit for line-numbered printouts, version 4. 5 8* 2) change(88-02-05,Farley), approve(88-02-05,PBF7686), audit(88-02-05,GWMay), 5 9* install(88-02-05,MR12.2-1022): 5 10* Corrected alignment of line_nbrs, was aligned s/b unaligned.. 5 11* 3) change(88-08-23,Farley), approve(88-09-16,MCR7911), 5 12* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 5 13* Increased size of forms field to 64 characters (was only 24), which 5 14* updates the version to 5. 5 15* END HISTORY COMMENTS */ 5 16 5 17 5 18 dcl dmp ptr; /* ptr to message */ 5 19 5 20 dcl 1 dprint_msg based (dmp) aligned, /* structure of a IO daemon print or punch request */ 5 21 2 header like queue_msg_hdr, /* header for all standard queue messages */ 5 22 2 version fixed bin, /* version of the dprint_msg used */ 5 23 2 copies fixed bin, /* number of copies user requested */ 5 24 2 bit_count fixed bin (35), /* the bitcount of the segment at request time */ 5 25 2 output_module fixed bin, /* 1=print, 2=7punch, 3= mcc, 4=raw */ 5 26 2 control, /* control flags. */ 5 27 3 nep bit (1) unal, /* TRUE if printing over perforations */ 5 28 3 single bit (1) unal, /* TRUE if ignore FF and VT */ 5 29 3 non_edited bit (1) unal, /* TRUE if printing in non-edited mode */ 5 30 3 truncate bit (1) unal, /* TRUE if truncating lines at line length */ 5 31 3 esc bit (1) unal, /* TRUE if text escapes are to be processed */ 5 32 3 center_top_label bit (1) unal, /* TRUE if top label to be centered */ 5 33 3 center_bottom_label bit (1) unal, /* TRUE if bottom label to be centered */ 5 34 3 no_separator bit(1) unal, /* TRUE if the inner head a tail sheets of multiple copies are to be suppressed. */ 5 35 3 line_nbrs bit (1) unal, /* TRUE if line numbers wanted */ 5 36 3 padding bit (27) unal, 5 37 2 lmargin fixed bin, /* indent from the left */ 5 38 2 line_lth fixed bin, /* logical line length */ 5 39 2 page_lth fixed bin, /* logical page length */ 5 40 2 heading_lth fixed bin, /* number of chars in heading */ 5 41 2 top_label_lth fixed bin, /* number of chars in the top label */ 5 42 2 bottom_label_lth fixed bin, /* number of chars in bottom label */ 5 43 2 chan_stop_path_lth fixed bin, /* number of chars in channel stop pathname */ 5 44 2 forms_name_lth fixed bin, /* number of chars in forms name */ 5 45 2 future_fb_values (7) fixed bin, /* make future versions possible */ 5 46 2 forms char (24), /* name of special forms, or blank */ 5 47 2 destination char (24), /* routing for output */ 5 48 2 heading char (head_max_lth refer (dprint_msg.heading_lth)), /* heading on page 1 */ 5 49 2 top_label char (label_max_lth refer (dprint_msg.top_label_lth)), /* top page heading for each page */ 5 50 2 bottom_label char (label_max_lth refer (dprint_msg.bottom_label_lth)), /* bottom page heading */ 5 51 2 chan_stop_path char (path_max_lth refer (dprint_msg.chan_stop_path_lth)), /* path of rqti seg with channel stops */ 5 52 2 forms_name char (forms_max_lth refer (dprint_msg.forms_name_lth)); /* forms name string */ 5 53 5 54 5 55 dcl ( 5 56 head_max_lth init (64), /* allocation size for heading */ 5 57 label_max_lth init (136), /* allocation size for label fields */ 5 58 path_max_lth init (168), /* allocation size for pathname fields */ 5 59 forms_max_lth init (64) /* allocation size for forms name string */ 5 60 ) fixed bin int static options (constant); 5 61 5 62 dcl ( 5 63 dprint_msg_version_3 init (3), 5 64 dprint_msg_version_4 init (4), 5 65 dprint_msg_version_5 init (5) /* current version */ 5 66 ) fixed bin int static options (constant); 5 67 5 68 /* END INCLUDE FILE ... dprint_msg.incl.pl1 */ 2352 2353 /* BEGIN INCLUDE FILE ... driver_ptr_list.incl.pl1 */ 6 2 6 3 /* This is a list of pointers to the driver status segments used by this process */ 6 4 6 5 6 6 6 7 dcl list_ptr pointer; /* should be set to iodd_static.driver_list_ptr */ 6 8 6 9 dcl 1 driver_ptr_list based(list_ptr), 6 10 2 number fixed bin, /* number of pointer entries */ 6 11 2 list_pad fixed bin, /* pad to even word boundry */ 6 12 2 stat_seg(0 refer(driver_ptr_list.number)), 6 13 3 stat_segp ptr; /* pointer to driver status seg(i) */ 6 14 6 15 6 16 /* END INCLUDE FILE ... driver_ptr_list.incl.pl1 */ 2353 2354 /* BEGIN INCLUDE FILE...driver_status.incl.pl1 */ 7 2 7 3 7 4 7 5 /****^ HISTORY COMMENTS: 7 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 7 7* Ancient History 7 8* Coded by Robert S. Coren August 1973 7 9* Modified by J. Whitmore to structure data for the Access Isolation Mechanism 7 10* Modified by J. C. Whitmore, 5/78, for IO Daemon extensions 7 11* Modified by J. C. Whitmore, 8/79, to add the generic_type variable 7 12* 2) change(88-08-19,Brunelle), approve(88-08-19,MCR7911), 7 13* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 7 14* Upgraded for version 5 iod tables. Changed the minor_args ftom string to 7 15* text_offset. Changed acct_ptr to acct_entry. Added have_accounting bit 7 16* to denote accounting ^= nothing. 7 17* END HISTORY COMMENTS */ 7 18 7 19 7 20 /* status data for a logical device driver */ 7 21 7 22 /* format: style4 */ 7 23 7 24 dcl driver_status_ptr ptr; 7 25 dcl 1 driver_status aligned based (driver_status_ptr), 7 26 2 req_type_label char (32), /* string to describe the request type */ 7 27 2 dev_name_label char (32), /* string to describe the device */ 7 28 2 device_id char (32), /* minor device name used by this logical driver */ 7 29 2 device_class_id char (32), /* device class name used by this logical driver */ 7 30 2 coord_chan fixed bin (71), /* ipc event channel for signals to coord. */ 7 31 2 driver_chan fixed bin (71), /* ipc event channel for signals from coord. */ 7 32 2 last_wake_time fixed bin (71), /* time last wakeup sent to coord */ 7 33 2 request_pending bit (36), /* locking word for communication with coord */ 7 34 /* 0 = ready for a request */ 7 35 /* driver pid = don't bug me */ 7 36 /* coord pid = got a request */ 7 37 2 status_flags, 7 38 3 attached bit (1) unal, /* minor device is attached for i/o */ 7 39 3 busy bit (1) unal, /* driver doing request..tell coord when done */ 7 40 3 ready bit (1) unal, /* driver is ready to handle requests */ 7 41 3 acknowledge bit (1) unal, /* coordinator must reply to all wakeups */ 7 42 3 have_accounting bit (1) unal, /* ON if accounting ^= nothing */ 7 43 3 pad bit (31) unal, 7 44 2 list_index fixed bin, /* index of this driver in the driver ptr list */ 7 45 2 dev_index fixed bin, /* index in iod_device_tab of this minor device */ 7 46 2 maj_index fixed bin, /* index in iod_device_tab of the corresponding major device */ 7 47 2 dev_class_index fixed bin, /* index of device_class entry */ 7 48 2 minor_args unaligned like text_offset, /* descriptive string for this minor device */ 7 49 2 min_banner bit (72) aligned, /* min banner access class for marking output */ 7 50 2 acct_entry entry (char (*), char (*), ptr, fixed bin (35)) variable, /* entry variable to accounting procedure */ 7 51 /* for this logical driver */ 7 52 2 rqti_ptr ptr, /* pointer to the request type info seg */ 7 53 2 dev_out_iocbp ptr, /* iocb pointer for dev_out_stream */ 7 54 2 dev_in_iocbp ptr, /* iocb pointer for dev_in_stream */ 7 55 2 dev_out_stream char (32), /* output stream for minor device */ 7 56 2 dev_in_stream char (32), /* input stream for minor device */ 7 57 2 elem_size fixed bin, /* element size for the stream */ 7 58 2 message_type fixed bin, /* expected format of user request */ 7 59 2 form_wait_time fixed bin (71), /* average time needed to write ctl term msg */ 7 60 2 forms_validation_ptr ptr, /* forms validation data */ 7 61 2 dev_ptr1 ptr, /* another one */ 7 62 2 dev_fb1 fixed bin, /* a spare fixed bin variable for the driver */ 7 63 2 dev_fb2 fixed bin, /* and another */ 7 64 2 dev_fb3 fixed bin, /* and another */ 7 65 2 dev_fb4 fixed bin, /* and the last spare fixed bin */ 7 66 2 dev_fb71 fixed bin (71), /* a spare fixed bin 71 variable */ 7 67 2 dev_ctl_ptr ptr, /* pointer to control structure for this device */ 7 68 2 bit_rate_est fixed bin (35), /* output rate estimate - bits per second */ 7 69 2 defer_time_limit fixed bin (35), /* max time allowed for a request - in seconds (0 = no limit) */ 7 70 2 generic_type char (32), /* generic type of this minor device */ 7 71 2 status_pad (2) fixed bin (35), /* save some room for later */ 7 72 2 descriptor like request_descriptor, /* copy of request descriptor */ 7 73 2 desc_pad (13) fixed bin, 7 74 2 message fixed bin; /* place-holder for copy of request message */ 7 75 7 76 7 77 /* END INCLUDE FILE...driver_status.incl.pl1 */ 2354 2355 /* BEGIN INCLUDE FILE ... iod_constants.incl.pl1 */ 8 2 8 3 8 4 /****^ HISTORY COMMENTS: 8 5* 1) change(88-08-31,Brunelle), approve(88-08-31,MCR7911), 8 6* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 8 7* Created. 8 8* END HISTORY COMMENTS */ 8 9 8 10 /* This file contains constants used by the I/O Daemon software in various tables */ 8 11 8 12 /* format: style4 */ 8 13 8 14 /* literals for use with idte.attach_type & iodd_static.attach_type */ 8 15 dcl (ATTACH_TYPE_IOM init (1), 8 16 ATTACH_TYPE_TTY init (2), 8 17 ATTACH_TYPE_DIAL init (3), 8 18 ATTACH_TYPE_VARIABLE_LINE init (4)) fixed bin int static options (constant); 8 19 8 20 /* literals for use with idte.ctl_attach_type & iodd_static.ctl_attach_type */ 8 21 dcl (CTL_ATTACH_TYPE_TTY init (1), 8 22 CTL_ATTACH_TYPE_DIAL init (2), 8 23 CTL_ATTACH_TYPE_MC init (3)) fixed bin int static options (constant); 8 24 8 25 /* literals for use with idte.paper_type & iodd_static.paper_type */ 8 26 dcl (PAPER_TYPE_DEFAULT init (-1), 8 27 PAPER_TYPE_SINGLE init (1), 8 28 PAPER_TYPE_CONTINUOUS init (2)) fixed bin int static options (constant); 8 29 8 30 /* END INCLUDE FILE ... iod_constants.incl.pl1 */ 2355 2356 /* BEGIN INCLUDE FILE...iod_device_tab.incl.pl1 */ 9 2 9 3 9 4 9 5 /****^ HISTORY COMMENTS: 9 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 9 7* Ancient History 9 8* Created by J. Stern, January 1975 9 9* Modified by J. C. Whitmore April 1978 9 10* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 9 11* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 9 12* Added comment, head_sheet, tail_sheet, paper_type, forms_table, 9 13* forms_validation, font_dir variables to device entries in support of laser 9 14* printers. Changed driver_module, args to text_offset instead of strings. 9 15* Added comment, default_form to minor device entries. Changed args in 9 16* minor device entry to text_offset instead of string. 9 17* END HISTORY COMMENTS */ 9 18 9 19 9 20 /* format: style4 */ 9 21 9 22 dcl idtp ptr; /* ptr to device table */ 9 23 dcl 1 iod_device_tab aligned based (idtp), /* IO daemon device table */ 9 24 2 n_devices fixed bin, /* number of major devices */ 9 25 2 pad fixed bin, 9 26 2 entries (1 refer (iod_device_tab.n_devices)) like idte; /* entries for major devices */ 9 27 9 28 dcl idtep ptr; /* major device entry pointer */ 9 29 dcl 1 idte aligned based (idtep), /* major device entry */ 9 30 9 31 /* static info associated with device from the parms file */ 9 32 9 33 2 dev_id char (24), /* major device name */ 9 34 2 comment unaligned like text_offset, /* comment to apply to the major device */ 9 35 2 attach_name char (32), /* channel name or dial id for device attachment */ 9 36 2 attach_type fixed bin, /* indicates meaning of attach_name */ 9 37 /* see ATTACH_TYPE_XX in iod_constants.incl.pl1 */ 9 38 2 ctl_attach_name char (32), /* channel, dial id, or source for control terminal attachment */ 9 39 2 ctl_attach_type fixed bin, /* indicates meaning of ctl_attach_name */ 9 40 /* see CTL_ATTACH_TYPE_XX in iod_constants.incl.pl1 */ 9 41 2 driver_module unaligned like text_offset, /* offset to pathname of program to drive device */ 9 42 2 head_sheet unaligned like text_offset, /* offset to name of head_sheet program to use */ 9 43 2 tail_sheet unaligned like text_offset, /* offset to name of tail_sheet program to use */ 9 44 2 paper_type fixed bin, /* -1=default , 1=continuous form, 2=single sheet */ 9 45 2 forms_table unaligned like text_offset, /* offset to forms table to apply to this queue group */ 9 46 2 forms_validation unaligned like text_offset, /* offset to name of routine for forms validation */ 9 47 2 font_dir unaligned like text_offset, /* offset to location of downloadable fonts */ 9 48 2 args unaligned like text_offset, /* offset to arguments to driver program */ 9 49 2 first_minor fixed bin, /* index of first minor device for this major device */ 9 50 2 last_minor fixed bin, /* index of last minor device for this major device */ 9 51 9 52 /* dynamic info associated with driver of this device */ 9 53 9 54 2 lock bit (36), /* lock id of current driver */ 9 55 2 process_id bit (36); /* process id of current driver */ 9 56 9 57 dcl mdtp ptr; 9 58 dcl 1 minor_device_tab aligned based (mdtp), 9 59 2 n_minor fixed bin, /* number of minor devices */ 9 60 2 pad fixed bin, 9 61 2 entries (1 refer (minor_device_tab.n_minor)) like mdte; 9 62 9 63 dcl mdtep ptr; /* minor device entry pointer */ 9 64 dcl 1 mdte aligned based (mdtep), /* minor device entry */ 9 65 9 66 /* static info associated with device from the parms file */ 9 67 9 68 2 dev_id char (24), /* minor device name */ 9 69 2 comment unaligned like text_offset, /* comment to apply to the minor device */ 9 70 2 default_form unaligned like text_offset, /* offset to default -form string for minor device */ 9 71 2 default_dev_class fixed bin, /* default device class index */ 9 72 2 major_index fixed bin, /* subscript of corresponding major device entry */ 9 73 2 args unaligned like text_offset, /* offset to arguments to driver program */ 9 74 9 75 /* dynamic info associated with driver of this device */ 9 76 9 77 2 dev_class_index fixed bin, /* index of device class table entry */ 9 78 2 current_request fixed bin (18), /* offset of current request descriptor */ 9 79 2 driver_ptr ptr, /* ptr to driver status segment */ 9 80 2 active fixed bin, /* 1 if active, 0 if not active */ 9 81 2 seq_id fixed bin (35); /* sequence number of last request */ 9 82 9 83 /* named constants for attach_type, ctl_attach_type and paper_type are found 9 84* in iod_constants.incl.pl1 */ 9 85 9 86 /* END INCLUDE FILE...iod_device_tab.incl.pl1 */ 2356 2357 /* BEGIN INCLUDE FILE ... iod_tables_hdr.incl.pl1 */ 10 2 10 3 10 4 10 5 /****^ HISTORY COMMENTS: 10 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 10 7* Ancient History 10 8* Created by J. Stern, 1/20/75 10 9* Modified by J. C. Whitmore April 1978 for enhancements 10 10* Modified by J. C. Whitmore, 10/78, for version 3 iod_tables format. 10 11* Modified by E. N. Kittlitz, 6/81, for version 4 iod_tables with expanded 10 12* q_group_tab 10 13* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 10 14* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 10 15* Change version number to reflect changes in q_group_tab and 10 16* iod_device_tab for laser printer support. Added font tables. 10 17* END HISTORY COMMENTS */ 10 18 10 19 10 20 /* format: style4 */ 10 21 10 22 dcl ithp ptr; /* ptr to io daemon dables and it's header */ 10 23 dcl 1 iod_tables_hdr aligned based (ithp), /* header of data segment compiled by iod_table_compiler */ 10 24 2 version char (8), /* version of this structure */ 10 25 2 date_time_compiled fixed bin (71), 10 26 2 grace_time fixed bin (71), /* grace time before deleting finished segment */ 10 27 2 max_queues fixed bin (17), /* default number of priority queues per queue group */ 10 28 2 line_tab_offset fixed bin (18), /* offset of line id table */ 10 29 2 device_tab_offset fixed bin (18), /* offset of device table */ 10 30 2 minor_device_tab_offset fixed bin (18), /* offset of minor device table */ 10 31 2 dev_class_tab_offset fixed bin (18), /* offset of device class table */ 10 32 2 q_group_tab_offset fixed bin (18), /* offset of queue group table */ 10 33 2 forms_info_tab_offset fixed bin (18), /* offset of forms info tables */ 10 34 2 text_strings_offset fixed bin (18), 10 35 2 start_of_tables fixed bin; /* beginning of above tables, MUST start on even word boundry */ 10 36 10 37 /* Defines common text block to store virtually all text in the I/O daemon tables */ 10 38 dcl text_strings_ptr ptr; 10 39 dcl 1 text_strings aligned based (text_strings_ptr), 10 40 2 length fixed bin, 10 41 2 chars char (1 refer (text_strings.length)) unaligned; 10 42 10 43 /* this defines text offsets used to locate i/o daemon tables strings in 10 44* the text_strings structure */ 10 45 dcl 1 text_offset based, 10 46 2 first_char fixed bin (18) unsigned unaligned, 10 47 2 total_chars fixed bin (18) unsigned unaligned; 10 48 10 49 dcl IODT_VERSION_5 char (8) int static options (constant) init ("IODT0005"); /* current version number */ 10 50 10 51 10 52 /* END INCLUDE FILE ... iod_tables_hdr.incl.pl1 */ 2357 2358 /* BEGIN INCLUDE FILE iod_line_tab.incl.pl1 */ 11 2 11 3 11 4 11 5 /****^ HISTORY COMMENTS: 11 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 11 7* Ancient History 11 8* Created by J. C. Whitmore Oct 1978 11 9* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 11 10* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 11 11* Upgraded to version 5. Added comment field and changed att_desc from 11 12* string to text_offset. 11 13* END HISTORY COMMENTS */ 11 14 11 15 11 16 /* format: style4 */ 11 17 11 18 dcl ltp ptr; 11 19 dcl 1 line_tab aligned based (ltp), /* the line id table */ 11 20 2 n_lines fixed bin, /* number of line id entries */ 11 21 2 pad fixed bin, /* for the future */ 11 22 2 entries (1 refer (line_tab.n_lines)) like lte; 11 23 11 24 dcl ltep ptr; /* line table entry pointer */ 11 25 dcl 1 lte aligned based (ltep), /* line table entry */ 11 26 2 line_id char (24), /* logical id for a tty line */ 11 27 2 comment unaligned like text_offset, /* comment to apply to the line */ 11 28 2 chan_id char (32), /* the physical channel name for attachment */ 11 29 2 att_desc unaligned like text_offset, /* the attach description to use */ 11 30 2 maj_dev_list bit (360); /* bit i ON => major device i is valid for this line id */ 11 31 11 32 11 33 /* END INCLUDE FILE iod_line_tab.incl.pl1 */ 2358 2359 /* BEGIN INCLUDE FILE...iodd_static.incl.pl1 */ 12 2 12 3 12 4 /****^ HISTORY COMMENTS: 12 5* 1) change(85-02-14,Homan), approve(87-04-06,MCR7656), 12 6* audit(87-06-13,Beattie), install(87-08-06,MR12.1-1068): 12 7* Add support for logout_on_hangup option. 12 8* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 12 9* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 12 10* Add head/tail_sheet entry variables and paper_type variable. 12 11* END HISTORY COMMENTS */ 12 12 12 13 /* format: style4 */ 12 14 12 15 dcl stat_p int static ptr; 12 16 12 17 dcl 1 iodd_static based (stat_p) aligned, 12 18 12 19 /* The first part is set only once for a device driver */ 12 20 12 21 2 ithp ptr, /* pointer to iod tables header */ 12 22 2 ltp ptr, /* pointer to line table */ 12 23 2 idtp ptr, /* pointer to device tab */ 12 24 2 mdtp ptr, /* pointer to minor device table */ 12 25 2 qgtp ptr, /* pointer to q_group table */ 12 26 2 dev_class_ptr ptr, /* pointer to device class table */ 12 27 2 text_strings_ptr ptr, /* pointer to iod tables text strings */ 12 28 2 driver_list_ptr ptr, /* pointer to list of driver status seg pointers */ 12 29 2 chan_list_ptr ptr, /* pointer to list of event channels for blocking */ 12 30 2 sys_dir_ptr ptr, /* ptr to 168 char string defining sys_dir */ 12 31 2 coord_proc_id bit (36), /* process id of coordinator for wakeups */ 12 32 2 driver_proc_id bit (36), /* process id of driver for locking */ 12 33 2 re_init_label label, /* where to go after "re_init" or "slave_logout" */ 12 34 2 no_coord_label label, /* where to go for a no_coord condition */ 12 35 2 log_stream char (32), /* stream name used for log output */ 12 36 2 master_input char (32), /* master console input stream for commands */ 12 37 2 master_output char (32), /* master console output stream for messages */ 12 38 2 master_out ptr, /* master output iocbp */ 12 39 2 master_in ptr, /* master input iocbp */ 12 40 2 log_iocbp ptr, /* log output iocbp */ 12 41 2 error_io ptr, /* error i/o iocbp */ 12 42 2 dev_io_stream char (32), /* stream used to attach the major device */ 12 43 2 dev_in_stream char (32), /* input stream if different from dev_io_stream */ 12 44 2 dev_out_stream char (32), /* output stream if different from dev_io_stream */ 12 45 2 device_dim char (32), /* dim which drives the major device */ 12 46 2 attach_name char (32), /* channel or dial id for attaching major device */ 12 47 2 attach_type fixed bin, /* what previous is: 1 = iom, 2 = tty, 3 = dial, 4 = variable line */ 12 48 2 dev_dial_id char (8), /* non null if device is to be dialed to driver */ 12 49 2 line_tab_idx fixed bin, /* for attach type 4, this is the entry index, else 0 */ 12 50 2 dial_ev_chan fixed bin (71), /* IPC chan for dial control */ 12 51 2 major_device char (32), /* name of the major device */ 12 52 2 major_args unaligned like text_offset, /* descriptive string for the major device */ 12 53 2 coord_cmd_chan fixed bin (71), /* IPC chan to send commands to coord through coord_comm.ms */ 12 54 2 cmd_ack_chan fixed bin (71), /* IPC chan for coord to return command status code */ 12 55 2 timer_chan fixed bin (71), /* IPC chan for unblocking if nothing happens */ 12 56 2 io_daemon_version char (8), /* current version number of the io daemon driver */ 12 57 2 extra_static (8) fixed bin (35), /* unused space - non_dynamic */ 12 58 2 dummy_ptr ptr, /* a dummy pointer for the driver module */ 12 59 12 60 /* driver module entrypoints are defined by the following entry variables */ 12 61 12 62 2 driver_init entry variable options (variable), 12 63 2 driver_request entry variable options (variable), 12 64 2 driver_command entry variable options (variable), 12 65 2 driver_default_handler entry variable options (variable), 12 66 12 67 /* entrypoints for head/tail_sheet_ entries */ 12 68 2 print_head_sheet entry (ptr, ptr, ptr, fixed bin (35)) variable, 12 69 2 print_head_separator entry (ptr, ptr, char (*), fixed bin (35)) variable, 12 70 2 print_tail_sheet entry (ptr, ptr, ptr, fixed bin (35)) variable, 12 71 12 72 2 paper_type fixed bin, /* type of paper being used */ 12 73 /* 1 = single sheet */ 12 74 /* 2 = continuous forms */ 12 75 12 76 /* The remainder of the data may be dynamic during the device driver's existence */ 12 77 12 78 2 extra_dynamic (14) fixed bin (35), /* unused space - dynamic */ 12 79 2 auto_logout_interval fixed bin, /* minutes to wait for inactivity logout */ 12 80 2 requests_til_cmd fixed bin, /* number of requests to go before returning to cmd level */ 12 81 2 assigned_devices fixed bin, /* number of minor devices assigned to major device */ 12 82 2 current_devices fixed bin, /* number of devices currently active in process */ 12 83 2 output_device char (32), /* name of minor device currently in use */ 12 84 2 wakeup_time fixed bin (71), /* time interval between timer wakeups */ 12 85 2 auto_start_delay fixed bin (71), /* time to wait before performing an auto-start after quit */ 12 86 2 driver_ptr ptr, /* pointer to driver status seg currently in use */ 12 87 2 segptr ptr, /* ptr to current user segment being processed */ 12 88 2 flags, /* control flags */ 12 89 3 initialized bit (1) unal, /* all driver data bases are initialized */ 12 90 3 test_entry bit (1) unal, /* driver test entry was called */ 12 91 3 request_in_progress bit (1) unal, /* driver executing a request */ 12 92 3 recursion_flag bit (1) unal, /* recursive unclaimed signal */ 12 93 3 no_coord_flag bit (1) unal, /* process is ready to accept a no_coord signal */ 12 94 3 logout_pending bit (1) unal, /* logout after all pending requests are done */ 12 95 3 master_hold bit (1) unal, /* master_hold at command level */ 12 96 3 slave_hold bit (1) unal, /* slave hold at command level */ 12 97 3 step bit (1) unal, /* run in step mode */ 12 98 3 quit_during_request bit (1) unal, /* a quit occured, don't wait for wakeup */ 12 99 3 runout_requests bit (1) unal, /* hold after all pending requests are done */ 12 100 3 re_init_in_progress bit (1) unal, /* driver processing a re_init signal */ 12 101 3 quit_signaled bit (1) unal, /* set to "1"b by quit handler for anyone who is curious */ 12 102 3 auto_logout_pending bit (1) unal, /* inactivity limit exceeded, logout after next wakeup */ 12 103 3 logout_on_hangup bit (1) unal, /* logout instead of reinit if set */ 12 104 3 pad bit (21) unal, /* unused space */ 12 105 2 slave, /* slave control device data (ctl term or remote reader) */ 12 106 3 slave_input char (32), /* slave input stream name */ 12 107 3 slave_output char (32), /* slave output stream name */ 12 108 3 slave_pad fixed bin, /* allocation breakage */ 12 109 3 slave_in ptr, /* slave input iocbp */ 12 110 3 slave_out ptr, /* slave output iocbp */ 12 111 3 slave_ev_chan fixed bin (71), /* event channel the slave device blocks on */ 12 112 3 active bit (1) unal, /* on if there is a slave */ 12 113 3 accept_input bit (1) unal, /* on if commands may come from the slave */ 12 114 3 allow_quits bit (1) unal, /* on if we allow slave to send quits */ 12 115 3 print_errors bit (1) unal, /* on if errors will be sent to the slave */ 12 116 3 log_msg bit (1) unal, /* on if log messages are to be sent to the slave */ 12 117 3 priv1 bit (1) unal, /* driver_module defined slave privileges */ 12 118 3 priv2 bit (1) unal, 12 119 3 priv3 bit (1) unal, 12 120 3 echo_cmd bit (1) unal, /* on if each slave cmd should be written back */ 12 121 3 slave_bit_pad bit (27) unal, /* unused space */ 12 122 2 ctl_term, /* control terminal data */ 12 123 3 ctl_attach_name char (32), /* dial id, tty chan, or mrd_ device */ 12 124 3 ctl_attach_type fixed bin, /* attach name meaning: 1=line, 2=dial, 3=mrd_source */ 12 125 3 ctl_pad fixed bin, /* allocation breakage */ 12 126 3 ctl_dial_chan fixed bin (71), /* ipc event channel for dial comm */ 12 127 3 ctl_input char (32), /* ctl input stream name */ 12 128 3 ctl_output char (32), /* ctl output stream name */ 12 129 3 ctl_io char (32), /* ctl i/o stream name */ 12 130 3 ctl_dev_dim char (32), /* ctl_io attached with this dim */ 12 131 3 ctl_ev_chan fixed bin (71), /* IPC event chan ctl term blocks on */ 12 132 3 ctl_device char (32), /* ctl terminal device name */ 12 133 3 form_type char (16), /* format type if printing forms */ 12 134 3 attached bit (1) unal, /* ctl term attached to process */ 12 135 3 forms bit (1) unal, /* on if printing forms */ 12 136 3 pad bit (34) unal, 12 137 2 admin_ec_name char (32), /* name of the ec to use with the "x" command */ 12 138 2 expansion_space (100) fixed bin; /* reserved space...use at your own risk */ 12 139 12 140 /* END INCLUDE FILE ... iodd_static.incl.pl1 */ 2359 2360 /* Begin include file ..... iox_modes.incl.pl1 */ 13 2 13 3 /* Written by C. D. Tavares, 03/17/75 */ 13 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 13 5 13 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 13 7 ("stream_input", "stream_output", "stream_input_output", 13 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 13 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 13 10 "direct_input", "direct_output", "direct_update"); 13 11 13 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 13 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 13 14 13 15 dcl (Stream_input initial (1), 13 16 Stream_output initial (2), 13 17 Stream_input_output initial (3), 13 18 Sequential_input initial (4), 13 19 Sequential_output initial (5), 13 20 Sequential_input_output initial (6), 13 21 Sequential_update initial (7), 13 22 Keyed_sequential_input initial (8), 13 23 Keyed_sequential_output initial (9), 13 24 Keyed_sequential_update initial (10), 13 25 Direct_input initial (11), 13 26 Direct_output initial (12), 13 27 Direct_update initial (13)) fixed bin int static options (constant); 13 28 13 29 /* End include file ..... iox_modes.incl.pl1 */ 2360 2361 /* BEGIN INCLUDE FILE . . . mseg_message_info.incl.pl1 BIM 1984-10-10 */ 14 2 /* format: style3,idind30 */ 14 3 14 4 /* structure returned when message is read from a message segment */ 14 5 14 6 14 7 dcl mseg_message_info_ptr pointer; 14 8 14 9 dcl 1 mseg_message_info based (mseg_message_info_ptr) aligned, 14 10 2 version char (8) aligned, 14 11 2 message_code fixed bin, 14 12 2 control_flags unaligned, 14 13 3 own bit (1), 14 14 3 delete bit (1), 14 15 3 pad bit (34), 14 16 2 ms_ptr ptr, /* pointer to message */ 14 17 2 ms_len fixed bin (24), /* length of message in bits */ 14 18 2 ms_id bit (72), /* unique ID of message */ 14 19 /* input in some cases */ 14 20 2 ms_access_class bit (72), /* message access class */ 14 21 2 sender_id char (32) unaligned,/* process-group ID of sender */ 14 22 2 sender_process_id bit (36) aligned, /* if nonzero, process that sent */ 14 23 2 sender_level fixed bin, /* validation level of sender */ 14 24 2 sender_authorization bit (72), /* access authorization of message sender */ 14 25 2 sender_max_authorization bit (72), /* max authorization of sending process */ 14 26 2 sender_audit bit (36) aligned; /* audit flags */ 14 27 14 28 declare MSEG_MESSAGE_INFO_V1 char (8) aligned init ("msegmi01") int static options (constant); 14 29 14 30 declare ( 14 31 MSEG_READ_FIRST init (1), 14 32 MSEG_READ_LAST init (2), 14 33 MSEG_READ_SPECIFIED init (3), 14 34 MSEG_READ_BEFORE_SPECIFIED init (4), 14 35 MSEG_READ_AFTER_SPECIFIED init (5)) 14 36 fixed bin int static options (constant); 14 37 14 38 declare (MSEG_READ_OWN init ("1"b), 14 39 MSEG_READ_DELETE init ("01"b) 14 40 ) bit (36) aligned internal static options (constant); 14 41 14 42 /* END INCLUDE FILE . . . mseg_message_info.incl.pl1 */ 2361 2362 /* BEGIN INCLUDE FILE ... output_request_data.incl.pl1 */ 15 2 15 3 /* Modified by R. McDonald May 1980 to include page charges (UNCA) */ 15 4 /* Modified by C. Marker October 1983 added no_separator */ 15 5 15 6 15 7 /****^ HISTORY COMMENTS: 15 8* 1) change(87-05-10,Gilcrease), approve(87-05-13,MCR7686), 15 9* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 15 10* Add the line_nbrs bit for line-numbered output. 15 11* 2) change(88-08-19,Brunelle), approve(88-08-19,MCR7911), 15 12* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 15 13* Added single_sheet bit to denote if continuous paper. 15 14* END HISTORY COMMENTS */ 15 15 15 16 15 17 dcl 1 ordata based (ordatap) aligned, 15 18 2 dpmp ptr, /* Ptr to dprint_msg */ 15 19 2 requestor char (32), /* Person.Proj.tag requesting */ 15 20 2 full_path char (168), /* source of the output */ 15 21 2 queue fixed bin, /* Queue requested. */ 15 22 2 copies fixed bin, /* Copies requested. */ 15 23 2 copy_no fixed bin, /* Number this copy */ 15 24 2 request_no fixed bin (35), /* Number request assigned by coord */ 15 25 2 restart_no fixed bin (35), /* old number of restarted request (0 = not restarted) */ 15 26 2 request_type char (32), /* Name of device class wanted. */ 15 27 2 access_class_string char (280), /* Access class - size limit for two printer lines */ 15 28 2 punsw fixed bin, /* 0 = print, 1= punch */ 15 29 2 delete fixed bin, /* 1= delete, 0= don't */ 15 30 2 device_name char (32), /* Name of physical device used */ 15 31 2 output_mode char (128), /* user's mode string for ios_$changemode */ 15 32 2 time_start_request fixed bin (71), /* Clock time when picked request */ 15 33 2 date_time_start_request char (24), /* .. in chars too */ 15 34 2 line_count fixed bin (24), /* Line count returned by DIM */ 15 35 2 page_count fixed bin, /* Page count returned by DIM */ 15 36 2 cpu_time fixed bin (71), /* Total CPU usage while printing */ 15 37 2 real_time fixed bin (71), /* Total realtime while printing */ 15 38 2 page_waits fixed bin, /* Total page-waits while printing */ 15 39 2 pre_pages fixed bin, /* Total pre-pages (???) .. */ 15 40 2 bit_count fixed bin (24), /* Number of bits transmitted. */ 15 41 2 charge float bin, /* What the thing cost. */ 15 42 2 control_flags, 15 43 3 continued bit (1) unal, /* request started by one driver and given to another */ 15 44 3 restarted bit (1) unal, /* request is restarted */ 15 45 3 separator bit (1) unal, /* used to determine necessity of a separator page */ 15 46 3 notify bit (1) unal, /* if should confirm to user */ 15 47 3 saved bit (1) unal, /* request was suspended by operator, we'll save it */ 15 48 3 priority_request bit (1) unal, /* operator said run now!! */ 15 49 3 no_separator bit (1) unal, /* suppress inner head and tail sheets when printing multiple copies */ 15 50 3 line_nbrs bit (1) unal, /* if line-numbered output requested */ 15 51 3 single_sheet bit (1) unal, /* ON if single_sheet output */ 15 52 3 padding bit (27) unal, /* not used */ 15 53 2 contd_no fixed bin (35), /* old number of continued request (0 = not continued) */ 15 54 2 total_charge float bin, /* total charge for all copies */ 15 55 2 price_per_n_lines float bin, /* line price rate used to compute charge */ 15 56 2 n_lines_for_price fixed bin, /* number of lines price is based on */ 15 57 2 charge_queue fixed bin, /* base charge rate on this queue */ 15 58 2 price_per_n_pages float bin, /* page charge rate used to compute charge */ 15 59 2 n_pages_for_price fixed bin, /* number of pages price is based on */ 15 60 2 rs_number fixed bin (9) unsigned unaligned, /* rate_structure number used */ 15 61 2 rs_unavailable bit (1) unaligned, /* 1=>couldn't read SAT */ 15 62 2 no_accounting bit (1) unaligned, /* 1=>accounting:nothing in iod_tables */ 15 63 2 pad_bits bit (25) unaligned, 15 64 2 line_nbr fixed bin (35), /* current line number */ 15 65 2 pad_space (6) fixed bin (35); /* save some room to grow */ 15 66 15 67 dcl ordatap ptr; /* Ptr to above structure */ 15 68 15 69 dcl 1 REQUEST like ordata aligned; /* If wanted, a place to put the above thing */ 15 70 15 71 /* END INCLUDE FILE ... output_request_data.incl.pl1 */ 2362 2363 /* BEGIN INCLUDE FILE ... prt_ctl.incl.pl1 */ 16 2 16 3 16 4 /****^ HISTORY COMMENTS: 16 5* 1) change(88-02-23,Brunelle), approve(88-08-31,MCR7911), 16 6* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 16 7* Ancient History 16 8* Modified: 11 December 1981 by G. Palter to add force_ctl_char 16 9* Modified: November 1983 by C. Marker to add force_nsep 16 10* 2) change(88-02-23,Brunelle), approve(88-08-31,MCR7911), 16 11* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 16 12* Literals for banner type and banner bars type added. 16 13* END HISTORY COMMENTS */ 16 14 16 15 16 16 /* format: style4 */ 16 17 16 18 /* This structure is used by the IO Daemon to define the printer control functions */ 16 19 16 20 dcl prt_ctl_ptr ptr; 16 21 16 22 dcl 1 prt_ctl aligned based (prt_ctl_ptr), /* printer control values */ 16 23 2 flags, 16 24 3 force_nep bit (1) unal, /* set noskip for the user */ 16 25 3 force_esc bit (1) unal, /* set escape processing for the user */ 16 26 3 no_auto_print bit (1) unal, /* ask for a cmd before each request is printed */ 16 27 3 meter bit (1) unal, /* meter printer functions */ 16 28 3 force_ctl_char bit (1) unal, /* set ctl_char mode for the user */ 16 29 3 force_nsep bit (1) unal, /* supress printing of inner head and tail sheets for multiple copies */ 16 30 3 ctl_pad bit (30) unal, /* default for future values */ 16 31 2 banner_type fixed bin, /* 0 = no banners */ 16 32 /* 1 = normal head/tail sheets */ 16 33 /* 2 = brief head/tail sheets */ 16 34 /* 3 to 10 RESERVED */ 16 35 2 banner_bars fixed bin, /* 0 = normal overprinted separator bars */ 16 36 /* 1 = single print line bars (no overprint) */ 16 37 /* 2 = suppress the separator bars (no separator) */ 16 38 2 banner_indent fixed bin, /* how far to indent the banner (future) */ 16 39 2 banner_line fixed bin, /* what line to start the banner on (future) */ 16 40 16 41 2 paper_info, 16 42 3 phys_page_length fixed bin, 16 43 3 phys_line_length fixed bin, 16 44 3 lines_per_inch fixed bin, 16 45 2 channel_stops (256) bit (16) unal, /* logical stops for slew to channel */ 16 46 2 prt_ctl_pad (10) fixed bin; /* for future additions */ 16 47 16 48 /* constants for prt_ctl.banner_type */ 16 49 dcl (NO_BANNERS init (0), 16 50 NORMAL_BANNERS init (1), 16 51 BRIEF_BANNERS init (2)) fixed bin int static options (constant); 16 52 16 53 /* constants for prt_ctl.banner_bars */ 16 54 dcl (NORMAL_BANNER_BARS init (0), 16 55 SINGLE_BANNER_BARS init (1), 16 56 NO_BANNER_BARS init (2)) fixed bin int static options (constant); 16 57 16 58 /* END INCLUDE FILE ... prt_ctl.incl.pl1 */ 2363 2364 /* Begin include file ...... prt_order_info.incl.pl1 */ 17 2 /* Created 3/15/77 by Noel I. Morris */ 17 3 17 4 dcl orderp ptr; /* pointer to order info structure */ 17 5 17 6 dcl 1 counts based (orderp) aligned, /* structure used in "get_count" order */ 17 7 2 line fixed bin, /* line number */ 17 8 2 page_length fixed bin, /* length of page */ 17 9 2 lmarg fixed bin, /* left margin indentation */ 17 10 2 rmarg fixed bin, /* line length */ 17 11 2 line_count fixed bin, /* count of lines printed */ 17 12 2 page_count fixed bin; /* count of pages printed */ 17 13 17 14 dcl 1 position_data based (orderp) aligned, /* structure for "get_position" & "set_position" orders */ 17 15 2 line_number fixed bin (35), /* current line on the page */ 17 16 2 page_number fixed bin (35), /* current page number */ 17 17 2 total_lines fixed bin (35), /* lines printed since reset */ 17 18 2 total_chars fixed bin (35), /* chars processed since reset */ 17 19 2 pad(4) fixed bin; /* for the future */ 17 20 17 21 dcl 1 page_labels based (orderp) aligned, /* structure used in "page_labels" order */ 17 22 2 top_label char (136), /* label for top of page */ 17 23 2 bottom_label char (136); /* label for bottom of page */ 17 24 17 25 dcl channel_stops (256) bit (16) based (orderp) unal; /* structure used in "channel_stops" order */ 17 26 17 27 dcl 1 paper_info based (orderp) aligned, /* structure used in "paper_info" order */ 17 28 2 phys_page_length fixed bin, /* physical page length */ 17 29 2 phys_line_length fixed bin, /* physical line length */ 17 30 2 lines_per_inch fixed bin; /* lines per inch spacing */ 17 31 17 32 dcl ret_error_count fixed bin based (orderp); /* variable used for "get_error_count" order */ 17 33 17 34 /* End of include file ...... prt_order_info.incl.pl1 */ 2364 2365 /* BEGIN INCLUDE FILE ... prt_rqti.incl.pl1 */ 18 2 /* Modified: 30 November 1981 by G. Palter to add force_ctl_char mode */ 18 3 /* Modified: November 1983 by C. Marker to add force_nsep */ 18 4 19 1 /* BEGIN INCLUDE FILE ..... rqti_header.incl.pl1 ..... */ 19 2 19 3 19 4 dcl 1 rqti_header aligned based, /* header for a request type info seg */ 19 5 2 time_created fixed bin (71), /* clock time when table was translated */ 19 6 2 header_version fixed bin, /* version number of the header alone */ 19 7 2 type_code fixed bin, /* 0 = header only */ 19 8 /* 1 = printer generic type */ 19 9 /* 2 = punch generic type */ 19 10 /* 3 = tape generic type */ 19 11 2 rqti_switches, 19 12 (3 meter bit (1), /* meter this request type */ 19 13 3 auto_go bit (1), /* driver should not request a go command */ 19 14 3 rqti_sw_pad bit (34)) unal, /* room to grow */ 19 15 2 driver_wait_time fixed bin, /* seconds to wait, before asking coord for service */ 19 16 2 header_pad (10) fixed bin; /* leave 10 words for future generations */ 19 17 19 18 dcl rqti_header_version_1 fixed bin int static options (constant) init (1); 19 19 19 20 19 21 /* END INCLUDE FILE ..... rqti_header.incl.pl1 .... */ 18 5 18 6 18 7 dcl prt_rqtip ptr; 18 8 18 9 dcl 1 prt_rqti aligned based (prt_rqtip), 18 10 18 11 2 header like rqti_header, /* use a common header */ 18 12 18 13 2 version fixed bin, /* version of the prt_rqti portion */ 18 14 2 opr_msg char (256), /* operator message */ 18 15 2 banner_type fixed bin, /* 0 = no banners */ 18 16 /* 1 = normal head/tail sheets */ 18 17 /* 2 = RESERVED (brief banners) */ 18 18 2 banner_bars fixed bin, /* how separator bars should be printed */ 18 19 2 banner_indent fixed bin, /* how far to indent the banner */ 18 20 2 banner_line fixed bin, /* what line to start the banner on */ 18 21 2 prt_flags, 18 22 (3 no_auto_print bit (1), /* TRUE if we want commands for each request */ 18 23 3 force_nep bit (1), /* TRUE if we set noskip regardless */ 18 24 3 force_esc bit (1), /* TRUE if we assume escapes in text */ 18 25 3 force_ctl_char bit (1), /* TRUE if we pass control characters regardless */ 18 26 3 force_nsep bit (1), /* TRUE if inner head and tail sheets of multiple copies are to be supressed */ 18 27 3 prt_ctl_pad bit (31)) unal, 18 28 18 29 2 default_bit_modes, /* rqt defaults for dprint */ 18 30 (3 non_edited bit (1), /* TRUE if not removing control chars */ 18 31 3 esc bit (1), /* TRUE if slew escapes are to be processed */ 18 32 3 single bit (1), /* TRUE if VT and FF are to be ignored */ 18 33 3 truncate bit (1), /* TRUE if truncating lines at line length */ 18 34 3 center_top_label bit (1), /* TRUE if centering top label */ 18 35 3 center_bottom_label bit (1), /* TRUE if centering bottom label */ 18 36 3 no_endpage bit (1), /* TRUE if printing over perforations (one big page) */ 18 37 3 mode_bit_pad bit (29)) unal, /* room to grow */ 18 38 2 default_position_modes, /* these are the length modes */ 18 39 3 indent fixed bin, /* columns to indent from the left */ 18 40 3 line_length fixed bin, /* print positions starting from col 1 */ 18 41 3 page_length fixed bin, /* number of lines before auto skip to top */ 18 42 3 mode_pad (10) fixed bin, /* more room to grow */ 18 43 18 44 2 rqt_pad (28) fixed bin, /* pad to 128 words */ 18 45 18 46 2 lfi, 18 47 3 paper_info, /* physical paper info */ 18 48 4 paper_length fixed bin, /* max lines to perf */ 18 49 4 paper_width fixed bin, /* max print positions */ 18 50 4 lines_per_inch fixed bin, /* normally 6 or 8 */ 18 51 3 lfi_pad (5) fixed bin, /* pad to even */ 18 52 3 channel_stops (256) bit (16) unal; /* channel stops for slews */ 18 53 18 54 dcl prt_rqti_version_1 fixed bin int static options (constant) init (1); 18 55 18 56 18 57 /* END INCLUDE FILE .... prt_rqti.incl.pl1 */ 2365 2366 /* BEGIN INCLUDE FILE...q_group_tab.incl.pl1 */ 20 2 20 3 20 4 20 5 /****^ HISTORY COMMENTS: 20 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 20 7* Ancient History 20 8* Created by J. Stern, December 1974 20 9* Modified by J. Whitmore April 1978 20 10* Modified by R. McDonald May 1980 to include page charges (UNCA) 20 11* Modified by E. N. Kittlitz June 1981 for UNCA changes 20 12* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 20 13* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 20 14* Add forms_validation, default_form and font_dir variables for laser 20 15* printer support. 20 16* END HISTORY COMMENTS */ 20 17 20 18 20 19 /* format: style4 */ 20 20 20 21 dcl qgtp ptr; /* ptr to queue group table */ 20 22 dcl 1 q_group_tab aligned based (qgtp), 20 23 2 n_q_groups fixed bin, /* number of queue groups */ 20 24 2 pad fixed bin, 20 25 2 entries (1 refer (q_group_tab.n_q_groups)) like qgte; /* entries of queue group table */ 20 26 20 27 dcl qgtep ptr; /* queue group table entry pointer */ 20 28 dcl 1 qgte aligned based (qgtep), /* queue group table entry */ 20 29 20 30 /* static info from the parms file */ 20 31 20 32 2 name char (24), /* queue group name */ 20 33 2 comment unaligned like text_offset, /* comment to apply to the request_type */ 20 34 2 driver_id char (32), /* person.project name of drivers for this q group */ 20 35 2 accounting unaligned like text_offset, /* offset to accounting routine pathname, "system" => charge_user_ */ 20 36 2 generic_type char (32), /* generic type of requests in this queue */ 20 37 2 default_generic_queue fixed bin (1), /* 1 if this is default queue for above generic type, else 0 */ 20 38 2 rqti_seg_name char (32), /* name of rqti seg, if required, else blank */ 20 39 2 max_queues fixed bin, /* number of queues for this request type */ 20 40 2 default_queue fixed bin, /* number of the default queue */ 20 41 2 line_charge, /* price names for line charges */ 20 42 3 queue (4) char (32), /* one name for each queue */ 20 43 2 page_charge, /* price names for page charges */ 20 44 3 queue (4) char (32), /* one name for each queue */ 20 45 2 forms_table unaligned like text_offset, /* offset to forms table to apply to this queue group */ 20 46 2 forms_validation unaligned like text_offset, /* offset to name of routine for forms validation */ 20 47 2 default_form unaligned like text_offset, /* offset to default -form string if none given */ 20 48 2 font_dir unaligned like text_offset, /* offset to location of downloadable fonts */ 20 49 2 first_dev_class fixed bin, /* index of first device class entry of queue group */ 20 50 2 last_dev_class fixed bin, /* index of last device class entry of queue group */ 20 51 20 52 /* dynamic info reflecting current status of queues */ 20 53 20 54 2 open fixed bin, /* 1 if queues have been opened, else 0 */ 20 55 2 per_queue_info (4), 20 56 3 last_read bit (72), /* ID of last message read */ 20 57 3 mseg_index fixed bin, /* message segment index */ 20 58 3 pad fixed bin; /* pad to even word boundary */ 20 59 20 60 /* END INCLUDE FILE...q_group_tab.incl.pl1 */ 2366 2367 /* BEGIN INCLUDE FILE ... queue_msg_hdr.incl.pl1 */ 21 2 21 3 /* This is the message header used for standard system queue messages, namely: 21 4* IO daemon requests, absentee requests, retrieval requests. 21 5**/ 21 6 21 7 /* Written by Jerry Whitmore, Spring 1978. 21 8* Modified by T. Casey, November 1978, to add values for state. 21 9* Modified by R. Kovalcik, June 1982, defer_until_process_terminataion 21 10**/ 21 11 21 12 dcl 1 queue_msg_hdr based aligned, /* standard header for all system queue messages */ 21 13 2 msg_time fixed bin (71), /* date and time of request */ 21 14 2 hdr_version fixed bin, /* version of this declaration */ 21 15 2 dirname char (168), /* directory name */ 21 16 2 ename char (32), /* entry name of file requested */ 21 17 2 message_type fixed bin, /* message format descriptor */ 21 18 /* 0 = absentee request */ 21 19 /* 1 = print request */ 21 20 /* 2 = punch request */ 21 21 /* 3 = tape request */ 21 22 /* 4 = retrieval request */ 21 23 2 bit_flags, 21 24 3 delete_sw bit (1) unal, /* delete file when done */ 21 25 3 notify bit (1) unal, /* user wants to be notified */ 21 26 3 defer_until_process_termination bit (1) unal, /* don't process request until process terminates */ 21 27 3 padding bit (33) unal, 21 28 2 state fixed bin, /* stage of processing after being queued: 21 29* 0 = initial unprocessed state, 1 = deferred, 21 30* 2 = in state transition, 3 = eligible, 4 = running, 21 31* 5 = bumped, 6 = deferred_until_process_termination */ 21 32 2 orig_queue fixed bin, /* queue the request was submitted to */ 21 33 2 std_length fixed bin, /* length of std msg for this type */ 21 34 2 dupt_lock bit (36) aligned, /* lock word for defer until process termination */ 21 35 2 hdr_pad (3) fixed bin; 21 36 21 37 dcl queue_msg_hdr_version_1 fixed bin int static options (constant) init (1); /* current version of the header */ 21 38 21 39 /* Values for queue_msg_hdr.state */ 21 40 21 41 dcl STATE_UNPROCESSED fixed bin int static options (constant) init (0); 21 42 dcl STATE_DEFERRED fixed bin int static options (constant) init (1); 21 43 dcl STATE_TRANSITION fixed bin int static options (constant) init (2); 21 44 dcl STATE_ELIGIBLE fixed bin int static options (constant) init (3); 21 45 dcl STATE_RUNNING fixed bin int static options (constant) init (4); 21 46 dcl STATE_BUMPED fixed bin int static options (constant) init (5); 21 47 dcl STATE_DUPT fixed bin int static options (constant) init (6); 21 48 21 49 /* END INCLUDE FILE ... queue_msg_hdr.incl.pl1 */ 2367 2368 /* BEGIN INCLUDE FILE...request_descriptor.incl.pl1 */ 22 2 22 3 /* Descriptor associated with an I/O daemon request */ 22 4 /* Coded August 1973 by Robert S. Coren */ 22 5 /* Modified by J. C. Whitmore, 5/78, to extend driver_data to 7 words */ 22 6 /* Modified by C. Marker, 2/23/85, changed to use mseg_message_info */ 22 7 22 8 dcl 1 request_descriptor based aligned, 22 9 2 mseg_message_info_copy like mseg_message_info, 22 10 2 seq_id fixed bin(35), /* sequential number assigned by coordinator */ 22 11 2 q fixed bin, /* priority queue in which request was submitted */ 22 12 2 contd_seq_id fixed bin(35), /* if nonzero, this is previous seq_id of continued request */ 22 13 2 prev_seq_id fixed bin(35), /* if nonzero, this is previous seq_id of restarted request */ 22 14 2 dev_class_index fixed bin, /* index of device_class entry */ 22 15 2 spare_fb fixed bin (17) unal, /* save half a word for later */ 22 16 2 charge_q fixed bin (17) unal, /* priority to use for charging */ 22 17 2 time_done fixed bin(71), /* clock time when request was completed */ 22 18 2 prev_done fixed bin(18), /* descriptor threaded ahead of this one in saved list */ 22 19 2 next_done fixed bin(18), /* " " behind " " " */ 22 20 2 driver_data bit(252), /* driver maintained data */ 22 21 2 flags, 22 22 (3 continued, /* unfinished by one driver and given to another */ 22 23 3 finished, 22 24 3 restarted, 22 25 3 cancelled, 22 26 3 dont_delete, 22 27 3 saved, /* not to be freed */ 22 28 3 keep_in_queue, /* keep request in queue */ 22 29 3 series_restart, /* this request is part of restarted series */ 22 30 3 priority_request) bit (1) unal, /* this request was given extra priority */ 22 31 3 pad bit(27) unal, 22 32 2 next_pending fixed bin(18); /* thread to next pending descriptor */ 22 33 22 34 /* END INCLUDE FILE...request_descriptor.incl.pl1 */ 2368 2369 /* BEGIN send_mail_info include file */ 23 2 23 3 dcl send_mail_info_version_2 fixed bin init(2); 23 4 23 5 dcl 1 send_mail_info aligned, 23 6 2 version fixed bin, /* = 2 */ 23 7 2 sent_from char(32) aligned, 23 8 2 switches, 23 9 3 wakeup bit(1) unal, 23 10 3 mbz1 bit(1) unal, 23 11 3 always_add bit(1) unal, 23 12 3 never_add bit(1) unal, 23 13 3 notify bit(1) unal, 23 14 3 acknowledge bit(1) unal, 23 15 3 mbz bit(30) unal; 23 16 23 17 /* END send_mail_info include file */ 2369 2370 /* BEGIN INCLUDE FiLE ... terminal_info.incl.pl1 */ 24 2 24 3 /* Created 5/25/77 by J. Stern */ 24 4 24 5 24 6 dcl 1 terminal_info aligned based (terminal_info_ptr), /* info structure for terminal_info order */ 24 7 2 version fixed bin, /* version number of this sturcture */ 24 8 2 id char (4) unaligned, /* terminal id from answerback */ 24 9 2 term_type char (32) unaligned, /* terminal type name */ 24 10 2 line_type fixed bin, /* line type number */ 24 11 2 baud_rate fixed bin, 24 12 2 reserved (4) fixed bin; /* reserved for future use */ 24 13 24 14 24 15 dcl terminal_info_ptr ptr; 24 16 dcl terminal_info_version fixed bin int static options (constant) init (1); /* current version */ 24 17 24 18 24 19 /* END INCLUDE FILE ... terminal_info.incl.pl1 */ 2370 2371 /* BEGIN INCLUDE FILE ... system_constants.incl.pl1 */ 25 2 25 3 /****^ HISTORY COMMENTS: 25 4* 1) change(86-11-12,GWMay), approve(86-11-12,MCR7445), audit(86-11-19,GDixon), 25 5* install(86-11-21,MR12.0-1223): 25 6* created. 25 7* END HISTORY COMMENTS */ 25 8 25 9 /* format: off */ 25 10 25 11 /* ************************************************************************ */ 25 12 /* */ 25 13 /* Function: Provides constants for commonly used Multics system values. */ 25 14 /* */ 25 15 /* Usage: These values are available for use in place of "magic" numbers */ 25 16 /* (unexplained numbers) in programming applications. */ 25 17 /* */ 25 18 /* Definitions: */ 25 19 /* */ 25 20 /* PER bit character/byte word page segment */ 25 21 /* */ 25 22 /* bits 1 9 36 36864 9400320 */ 25 23 /* characters/bytes 1 4 4096 1044480 */ 25 24 /* words 1 1024 261120 */ 25 25 /* pages 1 255 */ 25 26 /* segments 1 */ 25 27 /* */ 25 28 /* The base values for a bit, char, word and page are determined by the */ 25 29 /* Multics hardware implementation. The other values are calculated from */ 25 30 /* their relation to one another as shown in the matrix above. */ 25 31 /* */ 25 32 /* BITS_PER_CHAR = 9 (defined by the hardware) */ 25 33 /* BITS_PER_WORD = BITS_PER_CHAR * CHARS_PER_WORD */ 25 34 /* = 9 * 4 */ 25 35 /* = 36 */ 25 36 /* BITS_PER_PAGE = BITS_PER_CHAR * CHARS_PER_WORD * CHARS_PER_PAGE */ 25 37 /* = 9 * 4 * 1024 */ 25 38 /* = 36864 */ 25 39 /* BITS_PER_SEGMENT = BITS_PER_CHAR * CHARS_PER_WORD * CHARS_PER_PAGE * */ 25 40 /* PAGES_PER_SEGMENT */ 25 41 /* = 9 * 4 * 1024 * 255 */ 25 42 /* = 9400320 */ 25 43 /* */ 25 44 /* CHARS_PER_WORD = 4 (defined by the hardware) */ 25 45 /* CHARS_PER_PAGE = CHARS_PER_WORD * WORDS_PER_PAGE */ 25 46 /* = 4 * 1024 */ 25 47 /* = 4096 */ 25 48 /* CHARS_PER_SEGMENT = CHARS_PER_WORD * WORDS_PER_PAGE * PAGES_PER_SEGMENT */ 25 49 /* = 4 * 1024 * 255 */ 25 50 /* = 1044480 */ 25 51 /* */ 25 52 /* WORDS_PER_PAGE = 1024 (defined by the hardware) */ 25 53 /* WORDS_PER_SEGMENT = WORDS_PER_PAGE * PAGES_PER_SEGMENT */ 25 54 /* = 1024 * 255 */ 25 55 /* = 261120 */ 25 56 /* */ 25 57 /* PAGES_PER_SEGMENT = 255 (defined by system standard) */ 25 58 /* */ 25 59 /* ************************************************************************ */ 25 60 25 61 declare BITS_PER_CHAR fixed bin (4) internal static 25 62 options (constant) initial (9); 25 63 25 64 declare BITS_PER_WORD fixed bin (6) internal static 25 65 options (constant) initial (36); 25 66 25 67 declare BITS_PER_PAGE fixed bin (16) internal static 25 68 options (constant) initial (36864); 25 69 25 70 declare BITS_PER_SEGMENT fixed bin (24) internal static 25 71 options (constant) initial (9400320); 25 72 25 73 declare CHARS_PER_WORD fixed bin (3) internal static 25 74 options (constant) initial (4); 25 75 25 76 declare CHARS_PER_PAGE fixed bin (13) internal static 25 77 options (constant) initial (4096); 25 78 25 79 declare CHARS_PER_SEGMENT fixed bin (21) internal static 25 80 options (constant) initial (1044480); 25 81 25 82 /* Note: WORDS_PER_PAGE should be equal to sys_info$max_page_size */ 25 83 25 84 declare WORDS_PER_PAGE fixed bin (11) internal static 25 85 options (constant) initial (1024); 25 86 25 87 /* Note: WORDS_PER_SEGMENT should be equal to sys_info$max_seg_size */ 25 88 25 89 declare WORDS_PER_SEGMENT fixed bin (21) internal static 25 90 options (constant) initial (261120); 25 91 25 92 declare PAGES_PER_SEGMENT fixed bin (8) internal static 25 93 options (constant) initial (255); 25 94 25 95 /* END INCLUDE FILE ... system_constants.incl.pl1 */ 25 96 2371 2372 /* BEGIN INCLUDE FILE ... system_forms_info.incl.pl1 */ 26 2 26 3 /****^ HISTORY COMMENTS: 26 4* 1) change(88-02-26,Brunelle), approve(88-06-08,MCR7911), 26 5* audit(88-10-12,Wallman), install(88-10-28,MR12.2-1199): 26 6* Created. 26 7* END HISTORY COMMENTS */ 26 8 26 9 /* format: style4 */ 26 10 26 11 /* input structure for call to iod_info_$evaluate_forms_info */ 26 12 26 13 dcl evaluate_forms_info_input_ptr ptr; 26 14 dcl 1 evaluate_forms_info_input aligned based (evaluate_forms_info_input_ptr), 26 15 2 version char (8), 26 16 2 ithp ptr, /* ptr to io daemon tables */ 26 17 2 qgtep ptr, /* request type entry ptr */ 26 18 2 idtep ptr, /* major device entry ptr */ 26 19 2 mdtep ptr, /* minor device entry ptr */ 26 20 2 max_forms_string_length fixed bin, /* max allowed size of forms string */ 26 21 2 forms_string_length fixed bin, /* # of chars in forms string */ 26 22 2 forms_string char (system_input_forms_string_length/* forms string to evaluate */ 26 23 refer (evaluate_forms_info_input.forms_string_length)), 26 24 2 area_ptr ptr; /* ptr to user area */ 26 25 dcl system_input_forms_string_length fixed bin; 26 26 dcl EVALUATE_FORMS_INFO_INPUT_VERSION_1 char (8) int static options (constant) init ("EFII0001"); 26 27 26 28 26 29 /* output structure for call to iod_info_$evaluate_forms_info */ 26 30 26 31 dcl evaluate_forms_info_output_ptr ptr; 26 32 dcl 1 evaluate_forms_info_output aligned based (evaluate_forms_info_output_ptr), 26 33 2 version char (8), 26 34 2 lines_per_page fixed bin, 26 35 2 chars_per_line fixed bin, 26 36 2 lines_per_inch fixed bin, 26 37 2 forms_length fixed bin, 26 38 2 error_length fixed bin, 26 39 2 escape_length fixed bin, 26 40 2 special_length fixed bin, 26 41 2 returned_forms char (system_returned_forms_length 26 42 refer (evaluate_forms_info_output.forms_length)), 26 43 2 error_string char (system_error_string_length 26 44 refer (evaluate_forms_info_output.error_length)), 26 45 2 escape_string char (system_escape_string_length 26 46 refer (evaluate_forms_info_output.escape_length)), 26 47 2 special_string char (system_special_string_length 26 48 refer (evaluate_forms_info_output.special_length)); 26 49 26 50 dcl (system_returned_forms_length, system_error_string_length, 26 51 system_escape_string_length, system_special_string_length) fixed bin; 26 52 26 53 dcl EVALUATE_FORMS_INFO_OUTPUT_VERSION_1 char (8) int static options (constant) init ("EFIO0001"); 26 54 26 55 /* END INCLUDE FILE ... system_forms_info.incl.pl1 */ 2372 2373 /* BEGIN INCLUDE FILE timer_manager_constants.incl.pl1 */ 27 2 27 3 /****^ HISTORY COMMENTS: 27 4* 1) change(85-03-05,Sibert), approve(87-05-25,MCR7678), 27 5* audit(87-04-02,GDixon), install(87-08-04,MR12.1-1056): 27 6* Initially written. 27 7* END HISTORY COMMENTS */ 27 8 27 9 /* Values for the flags arguments in timer_manager_ calls */ 27 10 27 11 dcl ABSOLUTE_MICROSECONDS bit (2) int static options (constant) init ("00"b); 27 12 dcl ABSOLUTE_SECONDS bit (2) int static options (constant) init ("01"b); 27 13 dcl RELATIVE_MICROSECONDS bit (2) int static options (constant) init ("10"b); 27 14 dcl RELATIVE_SECONDS bit (2) int static options (constant) init ("11"b); 27 15 27 16 /* END INCLUDE FILE timer_manager_constants.incl.pl1 */ 2373 2374 2375 end remote_driver_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/01/88 1237.7 remote_driver_.pl1 >spec>install>1199>remote_driver_.pl1 2348 1 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 2349 2 09/09/75 1333.7 card_stream_info.incl.pl1 >ldd>include>card_stream_info.incl.pl1 2350 3 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.incl.pl1 2351 4 10/28/88 1227.7 device_class.incl.pl1 >spec>install>1199>device_class.incl.pl1 2352 5 10/28/88 1227.6 dprint_msg.incl.pl1 >spec>install>1199>dprint_msg.incl.pl1 2353 6 08/29/75 1310.5 driver_ptr_list.incl.pl1 >ldd>include>driver_ptr_list.incl.pl1 2354 7 10/28/88 1226.9 driver_status.incl.pl1 >spec>install>1199>driver_status.incl.pl1 2355 8 10/28/88 1227.9 iod_constants.incl.pl1 >spec>install>1199>iod_constants.incl.pl1 2356 9 10/28/88 1227.3 iod_device_tab.incl.pl1 >spec>install>1199>iod_device_tab.incl.pl1 2357 10 10/28/88 1227.4 iod_tables_hdr.incl.pl1 >spec>install>1199>iod_tables_hdr.incl.pl1 2358 11 10/28/88 1227.0 iod_line_tab.incl.pl1 >spec>install>1199>iod_line_tab.incl.pl1 2359 12 10/28/88 1227.2 iodd_static.incl.pl1 >spec>install>1199>iodd_static.incl.pl1 2360 13 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 2361 14 01/10/85 2002.8 mseg_message_info.incl.pl1 >ldd>include>mseg_message_info.incl.pl1 2362 15 10/28/88 1226.4 output_request_data.incl.pl1 >spec>install>1199>output_request_data.incl.pl1 2363 16 10/28/88 1227.1 prt_ctl.incl.pl1 >spec>install>1199>prt_ctl.incl.pl1 2364 17 09/28/78 1359.8 prt_order_info.incl.pl1 >ldd>include>prt_order_info.incl.pl1 2365 18 07/27/84 2039.1 prt_rqti.incl.pl1 >ldd>include>prt_rqti.incl.pl1 18-5 19 02/23/78 1629.0 rqti_header.incl.pl1 >ldd>include>rqti_header.incl.pl1 2366 20 10/28/88 1227.2 q_group_tab.incl.pl1 >spec>install>1199>q_group_tab.incl.pl1 2367 21 08/31/82 1636.3 queue_msg_hdr.incl.pl1 >ldd>include>queue_msg_hdr.incl.pl1 2368 22 03/15/85 0953.1 request_descriptor.incl.pl1 >ldd>include>request_descriptor.incl.pl1 2369 23 04/27/78 1504.4 send_mail_info.incl.pl1 >ldd>include>send_mail_info.incl.pl1 2370 24 06/29/77 1624.0 terminal_info.incl.pl1 >ldd>include>terminal_info.incl.pl1 2371 25 11/24/86 1243.9 system_constants.incl.pl1 >ldd>include>system_constants.incl.pl1 2372 26 10/28/88 1225.9 system_forms_info.incl.pl1 >spec>install>1199>system_forms_info.incl.pl1 2373 27 08/06/87 0913.5 timer_manager_constants.incl.pl1 >ldd>include>timer_manager_constants.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. ATTACH_TYPE_DIAL constant fixed bin(17,0) initial dcl 8-15 ref 435 ATTACH_TYPE_IOM constant fixed bin(17,0) initial dcl 8-15 ref 378 ATTACH_TYPE_VARIABLE_LINE constant fixed bin(17,0) initial dcl 8-15 ref 397 861 BITS_PER_CHAR constant fixed bin(4,0) initial dcl 25-61 ref 724 767 806 1012 BRIEF_BANNERS constant fixed bin(17,0) initial dcl 16-49 ref 1584 1600 Device parameter char packed unaligned dcl 2029 in procedure "minor_attach" set ref 2026 2036 2038 2040 2044* 2051 Device parameter char packed unaligned dcl 2076 in procedure "get_switch_name" ref 2072 2081 EVALUATE_FORMS_INFO_INPUT_VERSION_1 000002 constant char(8) initial packed unaligned dcl 26-26 ref 2323 FALSE constant bit(1) initial packed unaligned dcl 256 ref 308 415 524 529 530 531 532 539 540 541 542 550 561 632 635 665 675 679 779 788 813 900 902 907 976 1024 1025 1101 1109 1116 1781 1920 1921 1922 1923 1975 1990 1994 2221 2229 2231 2232 2233 2234 2235 FF 000022 constant char(1) initial packed unaligned dcl 261 set ref 479 479 NL 027201 constant char(1) initial packed unaligned dcl 258 ref 573 NORMAL_BANNERS constant fixed bin(17,0) initial dcl 16-49 ref 1582 1598 2236 NORMAL_BANNER_BARS constant fixed bin(17,0) initial dcl 16-54 ref 1354 1381 2237 NO_BANNERS constant fixed bin(17,0) initial dcl 16-49 ref 1580 1596 NO_BANNER_BARS constant fixed bin(17,0) initial dcl 16-54 ref 1358 1385 PAPER_TYPE_SINGLE constant fixed bin(17,0) initial dcl 8-26 ref 701 RELATIVE_SECONDS 000000 constant bit(2) initial packed unaligned dcl 27-14 set ref 1059* 1063* 1632* 1978* R_ACCESS 000042 constant bit(3) initial packed unaligned dcl 1-11 set ref 2265* SINGLE_BANNER_BARS constant fixed bin(17,0) initial dcl 16-54 ref 1356 1383 STATION_PW_PROMPT 000014 constant char(23) initial packed unaligned dcl 263 set ref 597* Stream_input constant fixed bin(17,0) initial dcl 13-15 ref 2051 Stream_input_output 000211 constant fixed bin(17,0) initial dcl 13-15 set ref 467* Stream_output constant fixed bin(17,0) initial dcl 13-15 ref 2053 TRUE constant bit(1) initial packed unaligned dcl 257 ref 409 411 449 500 521 522 523 526 559 564 581 633 800 862 868 872 896 948 958 959 961 973 990 1003 1020 1049 1069 1107 1112 1145 1284 1782 1918 1974 2122 2222 a_argp parameter pointer dcl 68 ref 367 374 1293 1295 a_banner_type parameter fixed bin(17,0) dcl 74 ref 1081 1084 a_code parameter fixed bin(35,0) dcl 80 set ref 1081 1086* 1282* 1293 1306 1307* 1830* 1833* 1837* a_data_ptr parameter pointer dcl 78 ref 1081 1085 a_iocbp parameter pointer dcl 2007 set ref 2004 2010 2013* 2016* 2017* 2019* a_source parameter fixed bin(17,0) dcl 69 ref 1293 1296 a_state parameter fixed bin(17,0) dcl 70 ref 1293 1297 a_stream parameter char packed unaligned dcl 73 ref 1081 1083 accept_input 342(01) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 521* 529* 542* 550* 565 acknowledge 11(05) 000356 internal static bit(1) level 3 packed packed unaligned dcl 338 set ref 1923* active 342 based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 500* 520 537 539* 548 565 902* 907* 1072 add_char_offset_ 000374 constant entry external dcl 196 ref 418 628 687 addr builtin function dcl 342 ref 398 418 418 479 479 481 486 486 575 575 588 588 628 628 687 687 728 728 736 736 771 771 942 943 1089 1090 1142 1142 1149 1149 1246 1246 1249 1249 1252 1252 1264 1264 1420 1420 1642 1759 1759 1779 1779 1850 1874 1955 1955 1995 1995 1995 1995 2117 2117 2137 2137 2299 2300 2301 2302 admin_ec_name 437 based char(32) level 2 dcl 12-17 set ref 838* after builtin function dcl 342 ref 594 1882 age 000100 automatic fixed bin(17,0) dcl 84 set ref 1812* 1812 1813 1821* alarm_channel 000142 internal static fixed bin(71,0) dcl 307 set ref 509* 516* 1978* aligned 4 001344 automatic bit(1) level 2 packed packed unaligned dcl 148 set ref 1787 allow_quits 342(02) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 522* 530* 541* always_add 11(02) 000356 internal static bit(1) level 3 packed packed unaligned dcl 338 set ref 1920* any_other 000000 stack reference condition dcl 346 ref 1939 area_ptr based pointer level 2 dcl 26-14 set ref 2331* arg 23 000012 internal static varying char(64) array level 2 in structure "cmd_list" dcl 170 in procedure "remote_driver_" set ref 1174 arg 23 based varying char(64) array level 2 in structure "arg_list" dcl 180 in procedure "remote_driver_" set ref 1341* 1352 1354 1356 1358 1360* 1367 1398 1414 1434* 1442 1461 1473 1473 1475 1475 1477 1477 1480* 1521* 1537 1545 1547 1549 1560* 1567* 1578 1580 1582 1584 1586* 1615* 1653* 1667 1680 1685 1687 1689 1692* 1699* 1710 1712 1714 1716* 1812 1814* arg_list based structure level 1 dcl 180 arg_string 000101 automatic char(32) packed unaligned dcl 85 set ref 1119* 1121* 1140* 1184* 1547* 1549* 1550 1550 1552 1552 1554 1554 1556 1556 1558 1558 1687* 1689* 1690 1690 argp 000112 automatic pointer dcl 86 set ref 1295* 1309 1329 1329 1339 1339 1340 1341 1351 1352 1354 1356 1358 1360 1364 1367 1396 1396 1397 1398 1412 1412 1413 1414 1433 1433 1434 1434 1438 1442 1461 1461 1472 1473 1473 1475 1475 1477 1477 1480 1520 1520 1521 1521 1537 1537 1544 1545 1547 1549 1560 1565 1565 1566 1567 1577 1578 1580 1582 1584 1586 1611 1611 1612 1613 1615 1637 1652 1652 1653 1653 1664 1667 1680 1680 1684 1685 1687 1689 1692 1697 1697 1698 1699 1709 1710 1712 1714 1716 1739 1739 1776 1776 1802 1802 1808 1812 1814 args_bc 002174 automatic fixed bin(24,0) dcl 2260 set ref 2265* 2268 args_length parameter fixed bin(17,0) dcl 2253 set ref 2248 2268* args_ptr parameter pointer dcl 2252 set ref 2248 2265* assigned_devices 265 based fixed bin(17,0) level 2 dcl 12-17 ref 384 407 557 614 677 911 1332 att_desc 17 based structure level 2 packed packed unaligned dcl 11-25 set ref 401* attach_desc 000114 automatic varying char(256) dcl 87 set ref 458* 462 472* 2043* 2046 2057* attach_name 136 based char(32) level 2 dcl 12-17 set ref 430 469* 852* attach_type 146 based fixed bin(17,0) level 2 dcl 12-17 ref 378 397 435 861 attached 436 based bit(1) level 3 in structure "iodd_static" packed packed unaligned dcl 12-17 in procedure "remote_driver_" ref 506 902 1102 1777 attached 47 based bit(1) level 3 in structure "driver_status" packed packed unaligned dcl 7-25 in procedure "remote_driver_" set ref 409* 559* 633* 635* 700 748 786 788* 813* auto_go 4(01) based bit(1) level 4 packed packed unaligned dcl 18-9 ref 2179 2180 auto_punch 1 based bit(1) level 3 packed packed unaligned dcl 188 set ref 779* 1123 1681 1690* banner_bars 122 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" ref 2216 banner_bars 2 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 1381 1383 1385 1391* 2216* 2237* banner_indent 123 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" ref 2217 banner_indent 3 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 2217* 2238* banner_line 124 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" ref 2218 banner_line 4 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 2218* 2239* banner_type 000215 automatic fixed bin(17,0) dcl 88 in procedure "remote_driver_" set ref 1084* 1100 1261 1273 banner_type 121 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" ref 2210 banner_type 1 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 1596 1598 1600 1606* 2210* 2236* baud_rate 13 001322 automatic fixed bin(17,0) level 2 dcl 140 set ref 672* 729 772 before builtin function dcl 342 ref 592 717 760 1881 1883 bit_rate_est 132 based fixed bin(35,0) level 2 dcl 7-25 set ref 682* 729* 731* 772* 774* both 000310 constant fixed bin(17,0) initial dcl 264 set ref 611* 640* 644* 707* 739* 749* 796* 852* 873* 946* 953* 968* 984* 998* 1015* 1783* 2148* 2172* 2187* 2193* 2198* bottom_label_lth 110 based fixed bin(17,0) level 2 dcl 5-20 ref 2330 cancelled 53(03) based bit(1) level 3 packed packed unaligned dcl 22-8 set ref 958* 1020* card_command_level 001370 stack reference condition dcl 346 ref 1757 card_info 000251 internal static structure level 1 dcl 336 set ref 1759 1759 card_stream_info based structure level 1 dcl 2-8 chan_id 7 based char(32) level 2 dcl 11-25 set ref 401* chan_list_ptr 20 based pointer level 2 dcl 12-17 ref 493 chan_stop_path_lth 111 based fixed bin(17,0) level 2 dcl 5-20 ref 2330 channel 2 based fixed bin(71,0) array level 2 in structure "ev_chan_list" dcl 165 in procedure "remote_driver_" set ref 493* channel 2 000236 internal static fixed bin(71,0) level 2 in structure "ctl_wait_list" dcl 324 in procedure "remote_driver_" set ref 508* 515* 1970* 1972* channel_stops 210 based bit(16) array level 3 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2207 channel_stops 10 based bit(16) array level 2 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 736 736 2207* 2229* char builtin function dcl 342 ref 1229 character builtin function dcl 342 ref 2081 chars 1 based char level 2 packed packed unaligned dcl 10-39 set ref 418 418 628 628 687 687 2280 chars_per_line 3 based fixed bin(17,0) level 2 dcl 26-32 ref 2338 cleanup 001376 stack reference condition dcl 346 ref 393 1028 2314 clock builtin function dcl 342 ref 851 851 871 871 cmd 2 000012 internal static varying char(64) level 2 dcl 170 set ref 1157 1165 1183 1183 1190 1195 1195 1203 1206 1208* cmd_list 000012 internal static structure level 1 dcl 170 set ref 1149 1149 code parameter fixed bin(35,0) dcl 2132 in procedure "set_paper_info" set ref 2129 2135* 2137* 2138 2138 2145* 2148* code 000216 automatic fixed bin(35,0) dcl 89 in procedure "remote_driver_" set ref 422* 423 462* 463 463 463 467* 468 468 469* 486* 487 488* 535* 536 537* 546* 547 548* 575* 576 577* 588* 589 609* 610 620* 622 693* 694 728* 729 736* 738 739* 742* 743 771* 772 820* 982* 983 1040* 1046* 1048 1050 1051* 1056* 1058 1062 1068* 1086* 1094* 1103* 1104 1105 1106* 1110* 1142* 1144 1149* 1150 1151 1153* 1204* 1205 1205 1206 1214* 1216 1221* 1223 1246* 1247 1249* 1250 1252* 1253 1255* 1256 1258* 1264* 1265 1279* 1282 1284 1307* 1420* 1421 1513* 1514 1746* 1749 1750* 1759* 1760 1761* 1779* 1780 1783* 1791* 1792 1792 1792* 1821* 1823 1823* 1833 1888 1899* 1900 1955* 1970* 1971 2046* 2048 2048 2048 2055* 2056 2056 2057* 2117* 2118 2118* code parameter fixed bin(35,0) dcl 2255 in procedure "initiate_the_file" set ref 2248 2262* 2263 2265* 2266 command 2 based varying char(64) level 2 dcl 180 ref 1309 1329 1329 1339 1339 1396 1396 1412 1412 1433 1433 1520 1520 1565 1565 1611 1611 1637 1652 1652 1697 1697 1739 1739 1776 1776 1802 1802 compname 002164 automatic char(32) packed unaligned dcl 2259 set ref 2262* 2265* condition 001456 automatic char(32) packed unaligned dcl 1845 set ref 1847* 1851* 1853* condition_info based structure level 1 dcl 3-14 condition_info_ptr parameter pointer dcl 3-10 ref 1843 1847 condition_name 3 based varying char(32) level 2 dcl 3-14 ref 1847 continue_to_signal_ 000376 constant entry external dcl 197 ref 920 1945 control 102 based structure level 2 in structure "dprint_msg" dcl 5-20 in procedure "remote_driver_" control 000217 automatic bit(36) dcl 90 in procedure "remote_driver_" set ref 1138* 1142* control_stream 000251 internal static char(32) level 2 dcl 336 set ref 804* conversion 001404 stack reference condition dcl 346 ref 1125 1300 convert builtin function dcl 342 ref 1174 1398 1414 1473 1475 1477 1812 copies 65 based fixed bin(17,0) level 2 dcl 15-17 set ref 1176 1184* copy builtin function dcl 342 ref 1238 copy_no 66 based fixed bin(17,0) level 2 dcl 15-17 set ref 1179* 1184* ctl_ev_chan 420 based fixed bin(71,0) level 3 dcl 12-17 ref 508 509 ctl_msg_sent 000144 internal static bit(1) initial packed unaligned dcl 308 set ref 1025* 1109* 1112* 1116* 1975* 1978 1990* 1993 1994* ctl_output 370 based char(32) level 3 dcl 12-17 set ref 524 902 1103* 1791 ctl_term 344 based structure level 2 dcl 12-17 ctl_wait_list 000236 internal static structure level 1 dcl 324 set ref 1995 1995 current_devices 266 based fixed bin(17,0) level 2 dcl 12-17 set ref 674* 817 2063* 2063 daemon_logout 001412 stack reference condition dcl 346 ref 369 daemon_new_device 001420 stack reference condition dcl 346 ref 371 daemon_slave_logout 001426 stack reference condition dcl 346 ref 370 data_ptr 4 001352 automatic pointer level 2 dcl 156 set ref 2115* data_streams 11 000251 internal static structure array level 2 dcl 336 date_string 000220 automatic char(24) packed unaligned dcl 91 set ref 851* 852* 871* 873* date_time_ 000400 constant entry external dcl 198 ref 851 871 dcte based structure level 1 dcl 4-27 dctep 001574 automatic pointer dcl 4-25 set ref 2301* 2302 dctp 001572 automatic pointer dcl 4-19 set ref 2295* 2301 debug 000402 constant entry external dcl 199 ref 1192 default_form_wait_time constant fixed bin(17,0) initial dcl 265 ref 681 1334 default_printer 000146 internal static pointer initial dcl 309 set ref 666* 713* 825* 1347 1450 1528 1573 1613 default_punch 000150 internal static pointer initial dcl 310 set ref 667* 756* 830* 1660 1705 defer_time_limit 133 based fixed bin(35,0) level 2 dcl 7-25 set ref 683* desc 001714 automatic varying char(256) dcl 2030 set ref 2034* 2043 descriptor 146 based structure level 2 dcl 7-25 set ref 942 1089 1874 dev_class_index 53 based fixed bin(17,0) level 2 dcl 7-25 ref 2301 dev_class_ptr 12 based pointer level 2 dcl 12-17 ref 2295 dev_class_tab based structure level 1 dcl 4-20 dev_ctl_ptr 130 based pointer level 2 dcl 7-25 set ref 386* 734* 776* 777 914 914 981 1098 1378 1458 1535 1593 1620 1678 1723 2165 dev_in_stream 106 based char(32) level 2 dcl 12-17 set ref 390* dev_index 51 based fixed bin(17,0) level 2 dcl 7-25 ref 2300 dev_io_stream 76 based char(32) level 2 dcl 12-17 set ref 390* dev_name_label 10 based char(32) level 2 dcl 7-25 ref 1926 dev_out_iocbp 66 based pointer level 2 dcl 7-25 set ref 385* 728* 736* 771* 913* 1029 1029* 1040* 1056* 1091 1622* 1624* 1626* 1628* 1629* 1631* 1639 2046* 2055* 2065* 2137* dev_out_stream 72 based char(32) level 2 dcl 7-25 set ref 684* 804 1046 2044* 2046 device_dim 126 based char(32) level 2 dcl 12-17 set ref 426* device_id 20 based char(32) level 2 dcl 7-25 set ref 707* 749* 791* 796* 811* 1372* 1672* 2057* 2096 device_io_module 002016 automatic varying char(32) dcl 2032 set ref 2036* 2038* 2040* 2043 device_type 000226 automatic char(32) packed unaligned dcl 92 set ref 697* 699 747 784 811* digit 000236 automatic char(1) packed unaligned dcl 93 set ref 1236* 1238 dirname 002102 automatic char(168) packed unaligned dcl 2257 set ref 2262* 2265* divide builtin function dcl 342 ref 2268 dmp 001576 automatic pointer dcl 5-18 set ref 943* 945 952 953 964 964 964 968 976 976 978 984 997 998 998 1015 1039 1090* 1093 1118 1220 1262 1642* 1643 1850* 1851 2308 2308 2310 2328 2328 2330 do_prt_request_ 000404 constant entry external dcl 200 ref 1040 do_prt_request_$error_during_request 000406 constant entry external dcl 201 ref 1851 do_prt_request_$single_copy 000410 constant entry external dcl 202 ref 1643 dont_delete 53(04) based bit(1) level 3 packed packed unaligned dcl 22-8 set ref 959* dprint_msg based structure level 1 dcl 5-20 dprint_msg_version_3 constant fixed bin(17,0) initial dcl 5-62 ref 964 dprint_msg_version_4 constant fixed bin(17,0) initial dcl 5-62 ref 964 976 dprint_msg_version_5 constant fixed bin(17,0) initial dcl 5-62 ref 964 2308 2328 driver_list_ptr 16 based pointer level 2 dcl 12-17 ref 375 910 2093 driver_ptr 304 based pointer level 2 dcl 12-17 ref 941 1088 1639 1642 1850 1873 driver_ptr_list based structure level 1 unaligned dcl 6-9 driver_status based structure level 1 dcl 7-25 driver_status_ptr 001602 automatic pointer dcl 7-24 set ref 1873* 1874 1926 driver_wait_time 5 based fixed bin(17,0) level 3 dcl 18-9 ref 2182 el_size 24 000251 internal static fixed bin(17,0) array level 3 dcl 336 set ref 806* elem_size 112 based fixed bin(17,0) level 2 dcl 7-25 set ref 724* 767* element_size 000237 automatic fixed bin(17,0) dcl 94 set ref 1009* 1012* 1046* ename 55 based char(32) level 2 dcl 21-12 set ref 953* 968* 984* 998* 1015* entname 002154 automatic char(32) packed unaligned dcl 2258 set ref 2262* 2265* entries 2 based structure array level 2 in structure "q_group_tab" dcl 20-22 in procedure "remote_driver_" set ref 2302 entries 2 based structure array level 2 in structure "iod_device_tab" dcl 9-23 in procedure "remote_driver_" set ref 2299 entries 2 based structure array level 2 in structure "dev_class_tab" dcl 4-20 in procedure "remote_driver_" set ref 2301 entries 2 based structure array level 2 in structure "minor_device_tab" dcl 9-58 in procedure "remote_driver_" set ref 2300 entries 2 based structure array level 2 in structure "line_tab" dcl 11-19 in procedure "remote_driver_" set ref 398 entry 001352 automatic entry variable level 2 dcl 156 set ref 2114* err_msg 000240 automatic char(200) packed unaligned dcl 95 set ref 609* 611* 639* 640* 818* 819* error 000213 constant fixed bin(17,0) initial dcl 266 set ref 379* 469* 488* 537* 566* 577* 819* 1051* 1068* 1106* 1783* 1976* 2057* 2118* 2172* 2187* 2193* error_code parameter fixed bin(35,0) dcl 2289 set ref 2283 2334* 2337 2337 2342* error_length 6 based fixed bin(17,0) level 2 dcl 26-32 ref 984 984 991 1035 1041 2317 error_message constant fixed bin(17,0) initial dcl 267 ref 1273 error_string based char level 2 dcl 26-32 set ref 984* error_table_$action_not_performed 000554 external static fixed bin(35,0) dcl 352 ref 1094 1105 1279 1792 1837 error_table_$fatal_error 000556 external static fixed bin(35,0) dcl 353 set ref 379* 566* 2172* 2187* 2193* error_table_$io_no_permission 000560 external static fixed bin(35,0) dcl 354 ref 1050 error_table_$ionmat 000562 external static fixed bin(35,0) dcl 355 ref 463 2048 error_table_$no_forms_table_defined 000570 external static fixed bin(35,0) dcl 358 ref 2337 error_table_$no_operation 000564 external static fixed bin(35,0) dcl 356 ref 2138 error_table_$noarg 000566 external static fixed bin(35,0) dcl 357 ref 1151 error_table_$not_closed 000572 external static fixed bin(35,0) dcl 359 ref 468 2056 error_table_$not_detached 000574 external static fixed bin(35,0) dcl 360 ref 463 2048 error_table_$undefined_order_request 000576 external static fixed bin(35,0) dcl 361 ref 1062 escape_length 7 based fixed bin(17,0) level 2 dcl 26-32 ref 991 1035 1041 2317 ev_chan_list based structure level 1 dcl 165 evaluate_forms_info_input based structure level 1 dcl 26-14 set ref 1033 2315 2321 2345 evaluate_forms_info_input_ptr 001650 automatic pointer dcl 26-13 set ref 938* 1033 1033 2311* 2315 2315 2321* 2323 2324 2325 2326 2327 2328 2330 2331 2334* 2345 evaluate_forms_info_output based structure level 1 dcl 26-32 set ref 991 1035 1041 2317 evaluate_forms_info_output_ptr 001654 automatic pointer dcl 26-31 set ref 938* 984 991 991 1035 1035 1041 1041 2311* 2317 2317 2334* 2338 2339 2340 2341 event_info 000242 internal static structure level 1 dcl 328 set ref 1995 1995 expand_pathname_$add_suffix 000412 constant entry external dcl 203 ref 1899 expand_pathname_$component 000414 constant entry external dcl 204 ref 2262 finished 53(01) based bit(1) level 3 packed packed unaligned dcl 22-8 set ref 961* first_char 54 based fixed bin(18,0) level 3 in structure "driver_status" packed packed unsigned unaligned dcl 7-25 in procedure "remote_driver_" set ref 628 687 first_char parameter fixed bin(18,0) level 2 in structure "target" packed packed unsigned unaligned dcl 2276 in procedure "return_string" ref 2280 first_char 164 based fixed bin(18,0) level 3 in structure "iodd_static" packed packed unsigned unaligned dcl 12-17 in procedure "remote_driver_" ref 418 flags 53 based structure level 2 in structure "request_descriptor" dcl 22-8 in procedure "remote_driver_" flags based structure level 2 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 2166* flags 310 based structure level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" force_ctl_char 0(04) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 1538 1554* 2213* 2233* force_ctl_char 125(03) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2213 force_esc 0(01) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 1538 1552* 2212* 2232* force_esc 125(02) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2212 force_nep based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 1538 1550* 2211* 2231* force_nep 125(01) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2211 force_nsep 125(04) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2215 force_nsep 0(05) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 1538 1558* 2215* 2235* form_info 001344 automatic structure level 1 dcl 148 set ref 1779 1779 form_type 432 based char(16) level 3 dcl 12-17 set ref 842* 844 844* 1103* 1331* 1791* form_wait_time 114 based fixed bin(71,0) level 2 dcl 7-25 set ref 681* 1334* 1978* format 11 000251 internal static char(12) array level 3 dcl 336 set ref 803* format_code 000322 automatic fixed bin(17,0) dcl 96 set ref 978* 980 1008 1011 1118* 1119 forms 436(01) based bit(1) level 3 in structure "iodd_static" packed packed unaligned dcl 12-17 in procedure "remote_driver_" set ref 1778 1781* forms 122 based char(24) level 2 in structure "dprint_msg" dcl 5-20 in procedure "remote_driver_" ref 2308 2328 forms_length 5 based fixed bin(17,0) level 2 dcl 26-32 ref 984 991 1035 1041 2317 forms_name based char level 2 dcl 5-20 ref 2330 forms_name_lth 112 based fixed bin(17,0) level 2 dcl 5-20 ref 2310 2330 forms_string 14 based char level 2 dcl 26-14 set ref 2328* 2330* forms_string_length 13 based fixed bin(17,0) level 2 dcl 26-14 set ref 1033 2315 2321* 2328 2330 2331 2345 forms_validation_ptr 116 based pointer level 2 dcl 7-25 set ref 2341* full_path 12 based char(168) level 2 dcl 15-17 set ref 1184* generic_type 134 based char(32) level 2 dcl 7-25 set ref 680* 710* 752* 798* 1371 1456 1533 1591 1618 1671 1721 get_system_free_area_ 000416 constant entry external dcl 205 ref 2304 hangup_info 001352 automatic structure level 1 dcl 156 set ref 2117 2117 hangup_proc_defined 000152 internal static bit(1) packed unaligned dcl 311 set ref 411* 415* 2065 2122* hdr_version 2 based fixed bin(17,0) level 2 dcl 21-12 ref 945 head_banner constant fixed bin(17,0) initial dcl 268 ref 1100 header based structure level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" header based structure level 2 in structure "dprint_msg" dcl 5-20 in procedure "remote_driver_" header_card2 000323 automatic char(80) packed unaligned dcl 97 set ref 1231* 1238* 1243* 1249 1249 1249 1249 header_version 2 based fixed bin(17,0) level 3 dcl 18-9 set ref 2171 2172* heading_lth 106 based fixed bin(17,0) level 2 dcl 5-20 ref 2330 i 002044 automatic fixed bin(17,0) dcl 2090 in procedure "find_driver_status_seg_ptr" set ref 2094* 2095* i 000347 automatic fixed bin(17,0) dcl 98 in procedure "remote_driver_" set ref 384* 385 386* 407* 408* 557* 558* 614* 615* 677* 678* 911* 912* 1263* 1332* 1333* 1343* 1348* 1352 1354 1356 1358 1360 1367 1438* 1447* 1451* 1461 1461 1472* 1472* 1473 1473 1475 1475 1477 1477 1480* 1525* 1529* 1537 1537 1544* 1544* 1545 1547 1549 1560* 1569* 1574* 1578 1580 1582 1584 1586 1612* 1657* 1661* 1667 1680 1680 1684* 1684* 1685 1687 1689 1692* 1701* 1706* 1710 1712 1714 1716 idte based structure level 1 dcl 9-29 idtep 001606 automatic pointer dcl 9-28 in procedure "remote_driver_" set ref 2299* 2326 idtep 6 based pointer level 2 in structure "evaluate_forms_info_input" dcl 26-14 in procedure "remote_driver_" set ref 2326* idtp 001604 automatic pointer dcl 9-22 in procedure "remote_driver_" set ref 2292* 2299 idtp 4 based pointer level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" ref 2292 idx 000350 automatic fixed bin(17,0) dcl 98 set ref 1234* 1236* ignore_code 000351 automatic fixed bin(35,0) dcl 99 set ref 479* 483* 510* 585* 597* 839* 840* 876* 877* 920* 1029* 1072* 1622* 1624* 1626* 1628* 1629* 1631* 1640* 1754* 1787* 1945* 1995* 2013* 2016* 2017* index builtin function dcl 342 in procedure "remote_driver_" ref 717 722 760 765 index 000372 internal static fixed bin(17,0) initial dcl 2075 in procedure "get_switch_name" set ref 2078* 2078 2079 2079* 2081 initial_print_rate constant fixed bin(17,0) initial dcl 269 ref 731 initial_punch_rate constant fixed bin(17,0) initial dcl 270 ref 774 initiate_file_$component 000420 constant entry external dcl 206 ref 2265 input_line 000352 automatic char(80) packed unaligned dcl 100 set ref 587* 588 588 588 588 592* 594* 1142 1142 1142 1142 1149 1149 1204 1204 ioa_$rsnnl 000422 constant entry external dcl 207 ref 401 iocbp 000400 automatic pointer dcl 102 in procedure "remote_driver_" set ref 1091* 1214* 1221* 1246* 1249* 1252* 1255* 1258* 1264* iocbp parameter pointer dcl 2110 in procedure "set_hangup_proc" set ref 2107 2117* iod_device_tab based structure level 1 dcl 9-23 iod_info_$evaluate_forms_info 000500 constant entry external dcl 230 ref 2334 iodd_command_processor_ 000424 constant entry external dcl 208 ref 1204 iodd_get_cmd_ 000426 constant entry external dcl 209 ref 1142 iodd_hangup_$iodd_hangup_ 000430 constant entry external dcl 210 ref 2114 iodd_listen_ 000432 constant entry external dcl 211 ref 855 iodd_msg_ 000434 constant entry external dcl 212 ref 379 447 469 472 488 537 548 566 570 577 611 640 644 652 707 739 749 780 791 796 811 819 852 873 882 946 953 968 984 998 1015 1051 1068 1106 1127 1133 1140 1153 1158 1159 1160 1161 1168 1184 1191 1198 1208 1224 1302 1310 1311 1312 1313 1314 1316 1317 1320 1321 1322 1323 1324 1325 1326 1368 1372 1388 1400 1416 1422 1428 1443 1462 1480 1485 1491 1496 1501 1510 1538 1560 1603 1648 1668 1672 1681 1692 1731 1750 1753 1761 1766 1771 1783 1792 1795 1798 1804 1809 1814 1823 1976 2057 2118 2141 2148 2172 2187 2193 2198 iodd_parse_$args 000436 constant entry external dcl 213 ref 420 426 428 432 445 449 452 555 592 594 618 631 691 697 702 842 1879 1896 2034 iodd_parse_$command 000502 constant entry external dcl 231 ref 1149 iodd_static based structure level 1 dcl 12-17 ios_$attach 000440 constant entry external dcl 214 ref 482 iox_$attach_ioname 000442 constant entry external dcl 215 ref 462 2046 iox_$attach_ptr 000444 constant entry external dcl 216 ref 483 iox_$close 000446 constant entry external dcl 217 ref 2016 iox_$control 000450 constant entry external dcl 218 ref 486 585 728 736 771 876 877 1029 1056 1072 1214 1221 1255 1258 1420 1622 1624 1628 1629 1631 1754 1779 1787 2013 2117 2137 iox_$detach_iocb 000452 constant entry external dcl 219 ref 2017 iox_$error_output 000600 external static pointer dcl 362 set ref 483* iox_$get_line 000454 constant entry external dcl 220 ref 588 iox_$look_iocb 000456 constant entry external dcl 221 ref 535 546 iox_$modes 000460 constant entry external dcl 222 ref 510 1640 iox_$open 000462 constant entry external dcl 223 ref 467 2055 iox_$put_chars 000464 constant entry external dcl 224 ref 479 575 1246 1249 1252 1264 ipc_$block 000466 constant entry external dcl 225 ref 1995 ipc_$drain_chn 000470 constant entry external dcl 226 ref 1970 ipc_ind 000100 automatic fixed bin(35,0) dcl 1914 set ref 1928* 1942 1942* 1944* 1950* 1961 1961* ithp based pointer level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" ref 2324 ithp 2 based pointer level 2 in structure "evaluate_forms_info_input" dcl 26-14 in procedure "remote_driver_" set ref 2324* keep_in_queue 53(06) based bit(1) level 3 packed packed unaligned dcl 22-8 set ref 948* 973* 990* 1003* 1284* len 000376 automatic fixed bin(17,0) dcl 101 set ref 401* 1142* 1149 1149 1204 1204 length based fixed bin(17,0) level 2 in structure "text_strings" dcl 10-39 in procedure "remote_driver_" ref 418 418 628 628 687 687 2280 length builtin function dcl 342 in procedure "remote_driver_" ref 575 575 588 588 1142 1142 1234 1246 1246 1249 1249 1252 1252 1264 1264 2308 lfi 200 based structure level 2 dcl 18-9 line_length_default constant fixed bin(17,0) initial dcl 271 ref 2226 line_length_max 000013 constant fixed bin(17,0) initial dcl 272 set ref 1484 1485* line_length_min 000145 constant fixed bin(17,0) initial dcl 273 set ref 1484 1485* line_lth 104 based fixed bin(17,0) level 2 dcl 5-20 set ref 997 998* line_nbrs 102(08) based bit(1) level 3 packed packed unaligned dcl 5-20 set ref 976* line_tab based structure level 1 dcl 11-19 line_tab_idx 151 based fixed bin(17,0) level 2 dcl 12-17 ref 398 lines_per_inch 4 based fixed bin(17,0) level 2 in structure "evaluate_forms_info_output" dcl 26-32 in procedure "remote_driver_" ref 2340 lines_per_inch 7 based fixed bin(17,0) level 3 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 1462* 1470 1508* 1510* 2141* 2205* 2227* 2340* lines_per_inch 202 based fixed bin(17,0) level 4 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" ref 2205 lines_per_page 2 based fixed bin(17,0) level 2 dcl 26-32 ref 2339 linkage_error 000000 stack reference condition dcl 346 ref 1934 1952 list_ptr 001600 automatic pointer dcl 6-7 set ref 375* 385 386 408 558 615 678 910* 912 1333 2093* 2094 2095 log 000310 constant fixed bin(17,0) initial dcl 274 set ref 652* 873* 946* 953* 968* 984* 998* 1015* 1140* log_msg 342(04) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 524* 526* 532* 872* logout_on_hangup 310(14) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 449* lpi_default constant fixed bin(17,0) initial dcl 275 ref 2227 lpi_max 000205 constant fixed bin(17,0) initial dcl 276 set ref 1490 1491* lpi_min 000202 constant fixed bin(17,0) initial dcl 277 set ref 1490 1491* lte based structure level 1 dcl 11-25 ltep 001616 automatic pointer dcl 11-24 set ref 398* 401 401 ltp 2 based pointer level 2 dcl 12-17 ref 398 ltrim builtin function dcl 342 ref 594 1229 2081 maj_index 52 based fixed bin(17,0) level 2 dcl 7-25 ref 2299 major_args based char packed unaligned dcl 103 in procedure "remote_driver_" set ref 420* 426* 428* 432* 445* 449* 452* 555* 842* 1879* 1896* major_args 164 based structure level 2 in structure "iodd_static" packed packed unaligned dcl 12-17 in procedure "remote_driver_" major_args_length 000010 internal static fixed bin(17,0) dcl 104 set ref 419* 420 420 422* 426 426 428 428 432 432 445 445 449 449 452 452 555 555 842 842 1879 1879 1896 1896 major_args_name 000402 automatic varying char(256) dcl 105 set ref 420* 421 422* major_args_ptr 000154 internal static pointer initial dcl 312 set ref 418* 420 422* 426 428 432 445 449 452 555 842 1879 1896 major_comm_module 000503 automatic varying char(32) dcl 106 set ref 400* 428* 442 442 major_desc 000514 automatic varying char(256) dcl 107 set ref 401* 435* 437* 439* 439 442* 442 445* 445 458 704* 704 2034 major_device 154 based char(32) level 2 dcl 12-17 set ref 405 852* major_terminal_module 000615 automatic varying char(32) dcl 108 set ref 400* 426* 439 439 major_tty 000626 automatic varying char(32) dcl 109 set ref 400* 430* 435 437 master 000214 constant fixed bin(17,0) initial dcl 278 set ref 379* 447* 469* 472* 488* 537* 548* 566* 570* 577* 652* 658 780* 791* 811* 819* 882* 1051* 1068* 1106* 1190 1191* 1195 1198* 1976* 2057* 2118* max builtin function dcl 342 ref 2182 mbx_access_class 001570 automatic bit(72) dcl 1870 set ref 1886* 1902* 1955* mbx_dirname 001506 automatic char(168) packed unaligned dcl 1868 set ref 1884* 1896* 1897 1899* 1899* 1955* mbx_entname 001560 automatic char(32) packed unaligned dcl 1869 set ref 1885* 1899* 1955* mbz 11(06) 000356 internal static bit(30) level 3 packed packed unaligned dcl 338 set ref 1924* mbz1 11(01) 000356 internal static bit(1) level 3 packed packed unaligned dcl 338 set ref 1919* mdte based structure level 1 dcl 9-64 mdtep 001612 automatic pointer dcl 9-63 in procedure "remote_driver_" set ref 2300* 2327 mdtep 10 based pointer level 2 in structure "evaluate_forms_info_input" dcl 26-14 in procedure "remote_driver_" set ref 2327* mdtp 001610 automatic pointer dcl 9-57 in procedure "remote_driver_" set ref 2293* 2300 mdtp 6 based pointer level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" ref 2293 message parameter char packed unaligned dcl 2254 in procedure "initiate_the_file" ref 2248 message 240 based fixed bin(17,0) level 2 in structure "driver_status" dcl 7-25 in procedure "remote_driver_" set ref 943 1090 1642 1850 message_facility_$send_message_access_class 000504 constant entry external dcl 232 ref 1955 message_type 65 based fixed bin(17,0) level 3 in structure "dprint_msg" dcl 5-20 in procedure "remote_driver_" ref 1039 1093 1643 1851 message_type 113 based fixed bin(17,0) level 2 in structure "driver_status" dcl 7-25 in procedure "remote_driver_" set ref 725* 768* 952 message_type 65 based fixed bin(17,0) level 2 in structure "queue_msg_hdr" dcl 21-12 in procedure "remote_driver_" ref 952 meter 0(03) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 2178* 2221* meter 4 based bit(1) level 4 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2178 minimum_quota 000145 constant fixed bin(17,0) initial dcl 279 set ref 1746* 1821* minor_args based char packed unaligned dcl 110 in procedure "remote_driver_" set ref 631* 691* 697* 702* 2034* minor_args 54 based structure level 2 in structure "driver_status" packed packed unaligned dcl 7-25 in procedure "remote_driver_" set ref 618* minor_args_length 000011 internal static fixed bin(17,0) dcl 111 set ref 620* 629* 631 631 688* 691 691 693* 697 697 702 702 2034 2034 minor_args_name 000637 automatic varying char(256) dcl 112 set ref 618* 619 620* 691* 692 693* minor_args_ptr 000156 internal static pointer initial dcl 313 set ref 620* 628* 631 687* 691 693* 697 702 2034 minor_device_name parameter varying char dcl 2089 ref 2086 2096 minor_device_tab based structure level 1 dcl 9-58 mod builtin function dcl 342 ref 1438 mode 002015 automatic fixed bin(17,0) dcl 2031 set ref 2051* 2053* 2055* model 000740 automatic varying char(32) dcl 113 set ref 432* 702 702* 704 704 modes 1 based structure level 2 packed packed unaligned dcl 188 mseg_message_info based structure level 1 dcl 14-9 mseg_message_info_copy based structure level 2 dcl 22-8 mseg_message_info_ptr 001620 automatic pointer dcl 14-7 set ref 1874* 1881 1882 1886 1902 msg_to_send parameter char packed unaligned dcl 1865 set ref 1858 1955* my_area based area(1024) dcl 114 ref 2321 my_area_ptr 000160 internal static pointer initial dcl 314 set ref 2304 2304* 2321 2331 myname 000007 constant char(15) initial packed unaligned dcl 280 set ref 379* 469* 488* 537* 548* 566* 577* 739* 780* 791* 811* 819* 1051* 1068* 1106* 1153* 1224* 1443* 1750* 1761* 1783* 1792* 1823* 1976* 2057* 2118* 2148* 2172* 2187* 2193* n_streams 10 000251 internal static fixed bin(17,0) level 2 dcl 336 set ref 802* n_tokens 1 based fixed bin(17,0) level 2 dcl 180 ref 1340 1351 1364 1397 1413 1434 1438 1461 1472 1521 1537 1544 1566 1577 1612 1613 1653 1664 1680 1684 1698 1709 1808 name 14 000251 internal static char(32) array level 3 dcl 336 set ref 804* nchar 000751 automatic fixed bin(17,0) dcl 115 set ref 588* need_station 000752 automatic bit(1) packed unaligned dcl 116 set ref 561* 564* 574 632* 638 never_add 11(03) 000356 internal static bit(1) level 3 packed packed unaligned dcl 338 set ref 1921* new_ll 000753 automatic fixed bin(17,0) dcl 117 set ref 1468* 1473* 1473 1484 1484 1506 new_lpi 000754 automatic fixed bin(17,0) dcl 118 set ref 1470* 1477* 1477 1490 1490 1508 new_pl 000755 automatic fixed bin(17,0) dcl 119 set ref 1469* 1475* 1475 1495 1500 1507 no_auto_print 125 based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 18-9 in procedure "remote_driver_" ref 2214 no_auto_print 0(02) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 16-22 in procedure "remote_driver_" set ref 1538* 1556* 2214* 2234* no_coord 001434 stack reference condition dcl 346 ref 372 none constant fixed bin(17,0) initial dcl 281 ref 1712 1726 normal 000214 constant fixed bin(17,0) initial dcl 282 set ref 447* 472* 548* 570* 611* 640* 644* 707* 739* 749* 780* 791* 796* 811* 852* 882* 1127* 1133* 1153* 1158* 1159* 1160* 1161* 1168* 1184* 1191* 1198* 1208* 1224* 1302* 1310* 1311* 1312* 1313* 1314* 1316* 1317* 1320* 1321* 1322* 1323* 1324* 1325* 1326* 1368* 1372* 1388* 1400* 1416* 1422* 1428* 1443* 1462* 1480* 1485* 1491* 1496* 1501* 1510* 1538* 1560* 1603* 1648* 1668* 1672* 1681* 1692* 1731* 1750* 1753* 1761* 1766* 1771* 1792* 1795* 1798* 1804* 1809* 1814* 1823* 2141* 2148* 2198* not 000756 automatic bit(1) packed unaligned dcl 120 set ref 1545* 1547 1550 1552 1554 1556 1558 1685* 1687 1690 notify 11(04) 000356 internal static bit(1) level 3 packed packed unaligned dcl 338 set ref 1922* null builtin function dcl 342 ref 385 386 388 483 483 585 585 666 667 780 825 830 875 876 876 877 877 914 938 991 1029 1029 1029 1029 1033 1035 1041 1056 1056 1072 1072 1214 1214 1221 1221 1255 1255 1258 1258 1363 1437 1441 1454 1524 1525 1531 1589 1616 1622 1622 1624 1624 1628 1628 1629 1629 1631 1631 1656 1657 1663 1719 1754 1754 1787 1787 2010 2013 2013 2019 2101 2168 2304 2311 2315 2317 number based fixed bin(17,0) level 2 in structure "driver_ptr_list" dcl 6-9 in procedure "remote_driver_" ref 2094 number 000236 internal static fixed bin(17,0) level 2 in structure "ctl_wait_list" dcl 324 in procedure "remote_driver_" set ref 507* 514* 1113 1270 1973* number_tokens_found 1 000012 internal static fixed bin(17,0) level 2 dcl 170 set ref 1166 omode 000757 automatic char(256) packed unaligned dcl 121 set ref 510* 1640* opr_msg 21 based char(256) level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" set ref 2198 2198* opr_msg 001057 automatic char(160) packed unaligned dcl 122 in procedure "remote_driver_" set ref 461* 466* 469* 573* 575 575 575 575 1364* 1367* 1368* 1381* 1383* 1385* 1387* 1388* 1596* 1598* 1600* 1602* 1603* 1664* 1667* 1668* 1726* 1728* 1730* 1731* ordata based structure level 1 dcl 15-17 ordatap 001622 automatic pointer dcl 15-67 set ref 1085* 1103* 1176 1179 1184 1184 1184 1184 1229 1243 output_module 101 based fixed bin(17,0) level 2 dcl 5-20 ref 978 1118 1220 1262 output_request_ 000472 constant entry external dcl 227 ref 1046 output_request_$error_during_request 000474 constant entry external dcl 228 ref 1853 output_request_$set_single_copy 000476 constant entry external dcl 229 ref 1646 p parameter pointer dcl 2160 in procedure "get_prt_rqti_data" ref 2157 2165 2168 2170 2180 p 001130 automatic pointer dcl 123 in procedure "remote_driver_" set ref 408* 409 558* 559 615* 618 628 629 633 635 678* 679 680 681 682 683 684 687 688 700 707 710 713 715 724 725 728 729 731 734 735* 736 748 749 752 756 758 767 768 771 772 774 776 777 780 786 788 791 796 798 804 811 813 912* 913 914 914 941* 942 943 952 981 1029 1029 1029 1040 1046 1056 1088* 1089 1090 1091 1098 1333* 1334 1341* 1347* 1360* 1363 1371 1372 1378 1434* 1437* 1441 1450* 1454 1456 1458 1521* 1524* 1525 1528* 1531 1533 1535 1567* 1573* 1586* 1589 1591 1593 1613* 1615* 1616 1618 1620 1622 1624 1626 1628 1629 1631 1639* 1640* 1653* 1656* 1657 1660* 1663 1671 1672 1678 1699* 1705* 1716* 1719 1721 1723 1978 2044 2046 2046 2055 2057 2065 2137 2299 2300 2301 2334 2341 p2 001132 automatic pointer dcl 124 set ref 481* 483 942* 946 946 948 953 953 953 958 959 961 968 968 968 973 984 984 984 990 998 998 998 1003 1015 1015 1015 1020 1089* 1284 page_length_default constant fixed bin(17,0) initial dcl 283 ref 2224 page_length_max 000006 constant fixed bin(17,0) initial dcl 284 set ref 1500 1501* page_length_min 000145 constant fixed bin(17,0) initial dcl 285 set ref 1495 1496* paper_info 200 based structure level 3 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" paper_info 5 based structure level 2 in structure "prt_ctl" dcl 16-22 in procedure "remote_driver_" set ref 2137 2137 paper_length 200 based fixed bin(17,0) level 4 dcl 18-9 ref 2202 paper_type 244 based fixed bin(17,0) level 2 dcl 12-17 ref 701 paper_width 201 based fixed bin(17,0) level 4 dcl 18-9 ref 2204 pathname_string parameter varying char(256) dcl 2251 ref 2248 2262 pause_time_default constant fixed bin(17,0) initial dcl 286 ref 1407 pause_time_max 000005 constant fixed bin(17,0) initial dcl 287 set ref 1399 1400* phys_line_length 6 based fixed bin(17,0) level 3 dcl 16-22 set ref 997 1462* 1468 1506* 1510* 2204* 2226* 2338* phys_page_length 5 based fixed bin(17,0) level 3 dcl 16-22 set ref 1462* 1469 1507* 1510* 2141* 2202* 2224* 2339* pool_dir 001135 automatic char(168) packed unaligned dcl 126 set ref 1741* 1744* 1746* 1759* 1817* 1820* 1821* pool_manager_$clean_pool 000506 constant entry external dcl 233 ref 1821 pool_manager_$init 000510 constant entry external dcl 234 ref 1746 pos 001134 automatic fixed bin(17,0) dcl 125 set ref 1232* 1238 1240* 1240 1243 print_errors 342(03) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 523* 531* 540* printer_count 001207 automatic fixed bin(17,0) dcl 127 set ref 668* 709* 709 713 824 printer_mode constant fixed bin(17,0) initial dcl 288 ref 980 printer_request constant fixed bin(17,0) initial dcl 289 ref 725 1039 1643 1851 priority 6 001352 automatic fixed bin(17,0) level 2 dcl 156 set ref 2116* probe 000512 constant entry external dcl 235 ref 1199 project 001476 automatic char(32) packed unaligned dcl 1867 set ref 1882* 1883* 1883 1884 prt_ctl based structure level 1 dcl 16-22 set ref 734 914 prt_ctl_ptr 001624 automatic pointer dcl 16-20 set ref 736 736 981* 997 1378* 1381 1383 1385 1391 1458* 1462 1462 1462 1468 1469 1470 1506 1507 1508 1510 1510 1510 1535* 1538 1538 1538 1538 1538 1550 1552 1554 1556 1558 1593* 1596 1598 1600 1606 1620* 1626* 2137 2137 2141 2141 2165* 2166 2178 2202 2204 2205 2207 2210 2211 2212 2213 2214 2215 2216 2217 2218 2221 2224 2226 2227 2229 2231 2232 2233 2234 2235 2236 2237 2238 2239 2338 2339 2340 prt_flags 125 based structure level 2 dcl 18-9 prt_rqt 000162 internal static char(32) packed unaligned dcl 315 set ref 663* 715* 717 717* 717 721 721 722 722 826* 827 827 840* prt_rqti based structure level 1 dcl 18-9 prt_rqti_version_1 000214 constant fixed bin(17,0) initial dcl 18-54 set ref 2192 2193* prt_rqtip 001626 automatic pointer dcl 18-7 set ref 2170* 2171 2172 2178 2179 2180 2182 2184 2186 2192 2193 2198 2198 2202 2204 2205 2207 2210 2211 2212 2213 2214 2215 2216 2217 2218 pun_ctl based structure level 1 unaligned dcl 188 set ref 776 pun_ctl_ptr 001366 automatic pointer dcl 186 set ref 777* 778 779 1098* 1123 1228 1262 1678* 1681 1690 1723* 1726 1728 1734 pun_rqt 000172 internal static char(32) packed unaligned dcl 316 set ref 664* 758* 760 760* 760 764 764 765 765 831* 832 832 840* punch_count 001210 automatic fixed bin(17,0) dcl 128 set ref 668* 751* 751 756 829 punch_raw_mode constant fixed bin(17,0) initial dcl 290 ref 1008 1119 1220 1262 punch_request constant fixed bin(17,0) initial dcl 291 ref 768 1093 punch_rmcc_mode constant fixed bin(17,0) initial dcl 292 ref 1011 q 33 based fixed bin(17,0) level 2 dcl 22-8 set ref 946* 953* 968* 984* 998* 1015* q_group_tab based structure level 1 dcl 20-22 qgte based structure level 1 dcl 20-28 qgte_index 11 based fixed bin(17,0) level 2 dcl 4-27 ref 2302 qgtep 001632 automatic pointer dcl 20-27 in procedure "remote_driver_" set ref 2302* 2325 qgtep 4 based pointer level 2 in structure "evaluate_forms_info_input" dcl 26-14 in procedure "remote_driver_" set ref 2325* qgtp 001630 automatic pointer dcl 20-21 in procedure "remote_driver_" set ref 2294* 2302 qgtp 10 based pointer level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" ref 2294 queue_msg_hdr based structure level 1 dcl 21-12 queue_msg_hdr_version_1 constant fixed bin(17,0) initial dcl 21-37 ref 945 quit_during_request 310(09) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 1024* 1101* 1989 r1_ind 000101 automatic fixed bin(35,0) dcl 1914 set ref 1928* 1940 1940* 1944* 1948* 1958 1958* re_init 001442 stack reference condition dcl 346 ref 1053 re_init_in_progress 310(11) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 581* 862* 868* re_init_label 26 based label variable level 2 dcl 12-17 ref 582 863 884 read_cards_ 000514 constant entry external dcl 236 ref 1759 read_cards_$set_rqt 000516 constant entry external dcl 237 ref 840 read_cards_$set_station 000520 constant entry external dcl 238 ref 839 read_ev_chan 001362 automatic fixed bin(71,0) level 2 dcl 161 set ref 493 495 read_info 001362 automatic structure level 1 dcl 161 set ref 486 486 read_password_$switch 000522 constant entry external dcl 239 ref 597 reader_attached 000202 internal static bit(1) packed unaligned dcl 317 set ref 665* 790 800* 1740 ready 47(02) based bit(1) level 3 packed packed unaligned dcl 7-25 set ref 679* 2180* ready_device 001211 automatic bit(1) dcl 129 set ref 675* 847 2179* 2179 req_string 001212 automatic char(12) packed unaligned dcl 130 set ref 1229* 1234 1236 req_type_label based char(32) level 2 dcl 7-25 ref 715 758 request_command_level_state 000211 constant fixed bin(17,0) initial dcl 293 set ref 1204* request_descriptor based structure level 1 dcl 22-8 request_in_progress 310(02) based bit(1) level 3 packed packed unaligned dcl 12-17 ref 1638 1849 request_no 67 based fixed bin(35,0) level 2 dcl 15-17 set ref 1184* 1229 requestor 2 based char(32) level 2 dcl 15-17 ref 1243 rqt_string 001215 automatic varying char(168) dcl 131 set ref 669* 722 722* 722 765 765* 765 835 rqti_header based structure level 1 dcl 19-4 rqti_header_version_1 000214 constant fixed bin(17,0) initial dcl 19-18 set ref 2171 2172* rqti_ptr 64 based pointer level 2 dcl 7-25 set ref 780 2168 2170 2334* rqti_switches 4 based structure level 3 dcl 18-9 rtrim builtin function dcl 342 ref 430 575 575 594 721 721 722 722 764 764 765 765 827 827 832 832 836 836 838 1234 1741 1817 1884 1885 2308 2328 runout_spacing_max 000004 constant fixed bin(17,0) initial dcl 294 set ref 1415 1416* save_code 001270 automatic fixed bin(35,0) dcl 132 set ref 1306* 1830 save_request_label 000204 internal static label variable dcl 318 set ref 1026* 1206 scramble_ 000524 constant entry external dcl 240 ref 605 send_hangup 000100 automatic bit(1) packed unaligned dcl 892 in procedure "drop_device" set ref 896* 900* 908* 913* send_hangup parameter bit(1) packed unaligned dcl 2008 in procedure "close_and_detach" ref 2004 2013 send_mail_info 001635 automatic structure level 1 dcl 23-5 send_mail_info_version_2 001634 automatic fixed bin(17,0) initial dcl 23-3 set ref 23-3* 1917 sender_authorization 25 based bit(72) level 2 dcl 14-9 ref 1886 1902 sender_id 13 based char(32) level 2 in structure "mseg_message_info" packed packed unaligned dcl 14-9 in procedure "remote_driver_" ref 1881 1882 sender_id 13 based char(32) level 3 in structure "request_descriptor" packed packed unaligned dcl 22-8 in procedure "remote_driver_" set ref 953* 968* 984* 998* 1015* sent_from 1 000356 internal static char(32) level 2 dcl 338 set ref 1926* sep_cards based fixed bin(17,0) level 2 dcl 188 set ref 778* 1228 1262 1726 1728 1734* separator 027155 constant char(80) initial packed unaligned dcl 295 set ref 1246 1246 1246 1246 1252 1252 1252 1252 1264 1264 1264 1264 seq_id 32 based fixed bin(35,0) level 2 dcl 22-8 set ref 946* 953* 968* 984* 998* 1015* set_iod_val 000526 constant entry external dcl 241 ref 721 764 827 832 835 836 size 001450 stack reference condition dcl 346 ref 1131 slave 312 based structure level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" slave 000213 constant fixed bin(17,0) initial dcl 296 in procedure "remote_driver_" set ref 493 659 742* 1140* 1224* 1754 1803 slave_ev_chan 340 based fixed bin(71,0) level 3 dcl 12-17 set ref 495* slave_hold 310(07) based bit(1) level 3 packed packed unaligned dcl 12-17 set ref 847* 1049* 1069* 1107* 1145* 1782* 1974* 2222* slave_in 334 based pointer level 3 dcl 12-17 set ref 403 499* 510* 546* 588* 597* slave_input 312 based char(32) level 3 dcl 12-17 set ref 455* 546* slave_login_tries constant fixed bin(17,0) initial dcl 297 ref 649 slave_out 336 based pointer level 3 dcl 12-17 set ref 497* 535* 575* 585* 597* 875 876* 877* 1072* 1754* 1779* 1787* slave_output 322 based char(32) level 3 dcl 12-17 set ref 454* 455 462 482 524 535* 659 902 1298 smi 000356 internal static structure level 1 dcl 338 set ref 1955 1955 source parameter fixed bin(17,0) dcl 2133 in procedure "set_paper_info" set ref 2129 2141* source 001271 automatic fixed bin(17,0) dcl 133 in procedure "remote_driver_" set ref 1127* 1133* 1142* 1153* 1158* 1159* 1160* 1161* 1168* 1184* 1190 1195 1204* 1208* 1296* 1302* 1310* 1311* 1312* 1313* 1314* 1316* 1317* 1320* 1321* 1322* 1323* 1324* 1325* 1326* 1368* 1372* 1388* 1400* 1416* 1422* 1428* 1443* 1462* 1480* 1485* 1491* 1496* 1501* 1510* 1513* 1538* 1560* 1603* 1648* 1668* 1672* 1681* 1692* 1731* 1750* 1753* 1754 1759 1761* 1766* 1771* 1792* 1795* 1798* 1803 1804* 1809* 1814* 1823* space 027154 constant char(1) initial packed unaligned dcl 298 ref 445 704 2034 special_length 10 based fixed bin(17,0) level 2 dcl 26-32 ref 991 1035 1041 2317 st_code based fixed bin(35,0) dcl 145 ref 483 standard constant fixed bin(17,0) initial dcl 299 ref 778 1228 1262 1714 1728 stat_p 000370 internal static pointer dcl 12-15 set ref 374* 375 376 378 384 390 390 397 398 398 403 405 407 418 419 426 430 435 449 454 455 455 462 469 482 493 495 497 499 500 506 508 509 510 520 521 522 523 524 524 524 526 529 530 531 532 535 535 537 539 540 541 542 546 546 548 550 557 565 565 575 581 582 585 588 597 597 614 659 674 677 701 817 838 842 844 844 847 852 852 855* 861 862 863 868 872 875 876 877 884 902 902 902 902 907 910 911 941 1024 1040* 1046* 1049 1063 1069 1072 1072 1088 1101 1102 1103 1103 1107 1145 1190 1195 1298 1331 1332 1638 1639 1642 1741 1741 1754 1759 1777 1778 1779 1781 1782 1787 1791 1791 1817 1817 1849 1850 1873 1974 1989 2063 2063 2093 2115 2182 2222 2223 2292 2293 2294 2295 2296 2324 stat_seg 2 based structure array level 2 unaligned dcl 6-9 stat_segp 2 based pointer array level 3 in structure "driver_ptr_list" dcl 6-9 in procedure "remote_driver_" ref 385 386 408 558 615 678 912 1333 2095 stat_segp 002046 automatic pointer dcl 2091 in procedure "find_driver_status_seg_ptr" set ref 2095* 2096 2096 state 001272 automatic fixed bin(17,0) dcl 134 set ref 1297* station 001273 automatic char(32) packed unaligned dcl 135 set ref 405* 555* 556 592* 596 609* 611* 631 639 652* 836 836 838 839* 873* station_password 001304 automatic char(8) packed unaligned dcl 136 set ref 594* 597 597* 600 600* 603 604 605* 609* status 001306 automatic bit(72) dcl 137 set ref 481 482* status_flags 47 based structure level 2 dcl 7-25 stream 001310 automatic char(32) dcl 138 set ref 1083* string builtin function dcl 342 set ref 2166* 2229* substr builtin function dcl 342 set ref 1149 1149 1204 1204 1236 1238* 1243* 1545 1547 1685 1687 2280 switches 11 000356 internal static structure level 2 dcl 338 sys_dir based char(168) packed unaligned dcl 178 ref 1741 1817 sys_dir_ptr 22 based pointer level 2 dcl 12-17 ref 1741 1817 sys_priv 000210 internal static bit(1) initial packed unaligned dcl 319 set ref 1930 1935* system_input_forms_string_length 001652 automatic fixed bin(17,0) dcl 26-25 set ref 2308* 2310* 2321 2321 system_privilege_$ipc_priv_off 000530 constant entry external dcl 242 ref 1942 1961 system_privilege_$ipc_priv_on 000532 constant entry external dcl 242 ref 1950 system_privilege_$ring1_priv_off 000534 constant entry external dcl 242 ref 1940 1958 system_privilege_$ring1_priv_on 000536 constant entry external dcl 242 ref 1948 tail_banner constant fixed bin(17,0) initial dcl 300 ref 1261 target parameter structure level 1 packed packed unaligned dcl 2276 ref 2272 teleprinter_iocbp 000212 internal static pointer initial dcl 320 set ref 388* 403* 462* 467* 476* 479* 486* 497 499 908* 1420* temp_password 001320 automatic char(8) packed unaligned dcl 139 set ref 604* 605* 606* term_info 001322 automatic structure level 1 dcl 140 set ref 728 728 771 771 terminal 000214 internal static char(32) array packed unaligned dcl 321 set ref 658* 659* 1298* 1759* terminal_info based structure level 1 dcl 24-6 terminal_info_version constant fixed bin(17,0) initial dcl 24-16 ref 671 test_entry 310(01) based bit(1) level 3 packed packed unaligned dcl 12-17 ref 1063 1190 1195 1741 1759 1817 text_offset based structure level 1 packed packed unaligned dcl 10-45 text_strings based structure level 1 dcl 10-39 text_strings_ptr 14 based pointer level 2 in structure "iodd_static" dcl 12-17 in procedure "remote_driver_" ref 376 2296 text_strings_ptr 001614 automatic pointer dcl 10-38 in procedure "remote_driver_" set ref 376* 418 418 628 628 687 687 2280 2296* time 000234 internal static fixed bin(71,0) initial dcl 322 set ref 1059* 1063 1063* 1403* 1407* 1632* timer_manager_$alarm_wakeup 000540 constant entry external dcl 246 ref 1978 timer_manager_$sleep 000542 constant entry external dcl 247 ref 1059 1063 1632 top_label_lth 107 based fixed bin(17,0) level 2 dcl 5-20 ref 2330 total_chars 0(18) parameter fixed bin(18,0) level 2 in structure "target" packed packed unsigned unaligned dcl 2276 in procedure "return_string" ref 2278 2280 total_chars 164(18) based fixed bin(18,0) level 3 in structure "iodd_static" packed packed unsigned unaligned dcl 12-17 in procedure "remote_driver_" ref 419 total_chars 54(18) based fixed bin(18,0) level 3 in structure "driver_status" packed packed unsigned unaligned dcl 7-25 in procedure "remote_driver_" set ref 629 688 tries 001342 automatic fixed bin(17,0) dcl 141 set ref 574* 649 type_code 3 based fixed bin(17,0) level 3 dcl 18-9 ref 2184 2186 user 001466 automatic char(32) packed unaligned dcl 1867 set ref 1879* 1880 1881* 1884 1885 validate_card_input_$station 000544 constant entry external dcl 248 ref 609 value 001343 automatic fixed bin(17,0) dcl 142 set ref 1174* 1174 1176 1176 1179 1350* 1352* 1354* 1356* 1358* 1380 1391 1398* 1398 1399 1399 1403 1414* 1414 1415 1415 1420 1420 1576* 1578* 1580* 1582* 1584* 1595 1606 1708* 1710* 1712* 1714* 1725 1734 version based char(8) level 2 in structure "evaluate_forms_info_input" dcl 26-14 in procedure "remote_driver_" set ref 2323* version 20 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 18-9 in procedure "remote_driver_" set ref 2192 2193* version 76 based fixed bin(17,0) level 2 in structure "dprint_msg" dcl 5-20 in procedure "remote_driver_" ref 964 964 964 976 2308 2328 version 000356 internal static fixed bin(17,0) level 2 in structure "smi" dcl 338 in procedure "remote_driver_" set ref 849* 1916 1917* version 001322 automatic fixed bin(17,0) level 2 in structure "term_info" dcl 140 in procedure "remote_driver_" set ref 671* wakeup 11 000356 internal static bit(1) level 3 packed packed unaligned dcl 338 set ref 1918* wakeup_time 300 based fixed bin(71,0) level 2 dcl 12-17 set ref 2182* 2223* wakeup_time_default constant fixed bin(17,0) initial dcl 301 ref 2182 2223 write_control_form_ 000546 constant entry external dcl 249 ref 1103 write_sample_form_ 000550 constant entry external dcl 250 ref 1791 write_sample_prt_banner_ 000552 constant entry external dcl 251 ref 1626 zero 000310 constant fixed bin(17,0) initial dcl 302 set ref 1399 1400* 1415 1416* zero_code 000310 constant fixed bin(17,0) initial dcl 303 set ref 447* 472* 570* 611* 640* 644* 652* 707* 749* 780* 791* 796* 811* 819* 852* 873* 882* 946* 953* 968* 984* 998* 1015* 1127* 1133* 1140* 1158* 1159* 1160* 1161* 1168* 1184* 1191* 1198* 1208* 1224* 1302* 1310* 1311* 1312* 1313* 1314* 1316* 1317* 1320* 1321* 1322* 1323* 1324* 1325* 1326* 1368* 1372* 1388* 1400* 1416* 1422* 1428* 1443* 1462* 1480* 1485* 1491* 1496* 1501* 1510* 1538* 1560* 1603* 1648* 1668* 1672* 1681* 1692* 1731* 1753* 1766* 1771* 1795* 1798* 1804* 1809* 1814* 1976* 2141* 2198* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ABSOLUTE_MICROSECONDS internal static bit(2) initial packed unaligned dcl 27-11 ABSOLUTE_SECONDS internal static bit(2) initial packed unaligned dcl 27-12 ATTACH_TYPE_TTY internal static fixed bin(17,0) initial dcl 8-15 A_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 BITS_PER_PAGE internal static fixed bin(16,0) initial dcl 25-67 BITS_PER_SEGMENT internal static fixed bin(24,0) initial dcl 25-70 BITS_PER_WORD internal static fixed bin(6,0) initial dcl 25-64 CHARS_PER_PAGE internal static fixed bin(13,0) initial dcl 25-76 CHARS_PER_SEGMENT internal static fixed bin(21,0) initial dcl 25-79 CHARS_PER_WORD internal static fixed bin(3,0) initial dcl 25-73 CTL_ATTACH_TYPE_DIAL internal static fixed bin(17,0) initial dcl 8-21 CTL_ATTACH_TYPE_MC internal static fixed bin(17,0) initial dcl 8-21 CTL_ATTACH_TYPE_TTY internal static fixed bin(17,0) initial dcl 8-21 DIR_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 1-33 Direct_input internal static fixed bin(17,0) initial dcl 13-15 Direct_output internal static fixed bin(17,0) initial dcl 13-15 Direct_update internal static fixed bin(17,0) initial dcl 13-15 EVALUATE_FORMS_INFO_OUTPUT_VERSION_1 internal static char(8) initial packed unaligned dcl 26-53 E_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 IODT_VERSION_5 internal static char(8) initial packed unaligned dcl 10-49 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 13-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 13-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 13-15 MSEG_MESSAGE_INFO_V1 internal static char(8) initial dcl 14-28 MSEG_READ_AFTER_SPECIFIED internal static fixed bin(17,0) initial dcl 14-30 MSEG_READ_BEFORE_SPECIFIED internal static fixed bin(17,0) initial dcl 14-30 MSEG_READ_DELETE internal static bit(36) initial dcl 14-38 MSEG_READ_FIRST internal static fixed bin(17,0) initial dcl 14-30 MSEG_READ_LAST internal static fixed bin(17,0) initial dcl 14-30 MSEG_READ_OWN internal static bit(36) initial dcl 14-38 MSEG_READ_SPECIFIED internal static fixed bin(17,0) initial dcl 14-30 M_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 PAGES_PER_SEGMENT internal static fixed bin(8,0) initial dcl 25-92 PAPER_TYPE_CONTINUOUS internal static fixed bin(17,0) initial dcl 8-26 PAPER_TYPE_DEFAULT internal static fixed bin(17,0) initial dcl 8-26 RELATIVE_MICROSECONDS internal static bit(2) initial packed unaligned dcl 27-13 REQUEST automatic structure level 1 dcl 15-69 REW_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 STATE_BUMPED internal static fixed bin(17,0) initial dcl 21-46 STATE_DEFERRED internal static fixed bin(17,0) initial dcl 21-42 STATE_DUPT internal static fixed bin(17,0) initial dcl 21-47 STATE_ELIGIBLE internal static fixed bin(17,0) initial dcl 21-44 STATE_RUNNING internal static fixed bin(17,0) initial dcl 21-45 STATE_TRANSITION internal static fixed bin(17,0) initial dcl 21-43 STATE_UNPROCESSED internal static fixed bin(17,0) initial dcl 21-41 S_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 Sequential_input internal static fixed bin(17,0) initial dcl 13-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 13-15 Sequential_output internal static fixed bin(17,0) initial dcl 13-15 Sequential_update internal static fixed bin(17,0) initial dcl 13-15 WORDS_PER_PAGE internal static fixed bin(11,0) initial dcl 25-84 WORDS_PER_SEGMENT internal static fixed bin(21,0) initial dcl 25-89 W_ACCESS internal static bit(3) initial packed unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 channel_stops based bit(16) array packed unaligned dcl 17-25 condition_info_version_1 internal static fixed bin(17,0) initial dcl 3-30 counts based structure level 1 dcl 17-6 forms_max_lth internal static fixed bin(17,0) initial dcl 5-55 head_max_lth internal static fixed bin(17,0) initial dcl 5-55 iod_tables_hdr based structure level 1 dcl 10-23 iox_modes internal static char(24) initial array dcl 13-6 ithp automatic pointer dcl 10-22 label_max_lth internal static fixed bin(17,0) initial dcl 5-55 ltp automatic pointer dcl 11-18 orderp automatic pointer dcl 17-4 page_labels based structure level 1 dcl 17-21 paper_info based structure level 1 dcl 17-27 path_max_lth internal static fixed bin(17,0) initial dcl 5-55 position_data based structure level 1 dcl 17-14 ret_error_count based fixed bin(17,0) dcl 17-32 short_iox_modes internal static char(4) initial array dcl 13-12 stream_info_ptr automatic pointer dcl 2-6 system_error_string_length automatic fixed bin(17,0) dcl 26-50 system_escape_string_length automatic fixed bin(17,0) dcl 26-50 system_returned_forms_length automatic fixed bin(17,0) dcl 26-50 system_special_string_length automatic fixed bin(17,0) dcl 26-50 terminal_info_ptr automatic pointer dcl 24-15 NAMES DECLARED BY EXPLICIT CONTEXT. abort_read 022425 constant label dcl 1766 ref 1757 ask 013450 constant label dcl 1142 ref 1128 1134 1151 1154 1162 1171 1180 1187 1193 1200 1210 attach_error 025144 constant label dcl 2057 ref 2048 bad_copy_arg 014005 constant label dcl 1168 ref 1176 banner_ret 015125 constant label dcl 1282 ref 1095 1146 1216 1226 1247 1250 1253 1256 1265 be_nice 011721 constant label dcl 959 ref 950 974 993 1005 1021 clean_out 011310 constant label dcl 859 ref 423 473 490 568 622 694 2060 2175 2189 2195 close_and_detach 024517 constant entry internal dcl 2004 ref 908 913 cmd_error 023356 constant label dcl 1837 ref 1303 1369 1375 1401 1418 1423 1429 1445 1481 1487 1493 1498 1503 1514 1669 1675 1751 1762 1768 1785 1806 1810 1815 command 015142 constant entry external dcl 1293 default_handler 023365 constant entry external dcl 1843 detach_device 024013 constant entry internal dcl 899 ref 393 device_common 024022 constant label dcl 902 ref 897 drop_device 024002 constant entry internal dcl 890 ref 369 371 372 580 859 880 end_cmd 023352 constant label dcl 1833 set ref 1327 1336 1393 1404 1408 1425 1465 1517 1542 1562 1608 1634 1649 1682 1694 1736 1764 1772 1796 1799 1825 enter_again 006732 constant label dcl 646 ref 612 evaluate_forms_options 026454 constant entry internal dcl 2283 ref 982 find_driver_status_seg_ptr 025325 constant entry internal dcl 2086 ref 1341 1360 1434 1521 1567 1586 1615 1653 1699 1716 get_prt_rqti_data 025646 constant entry internal dcl 2157 ref 735 get_switch_name 025225 constant entry internal dcl 2072 ref 454 2044 init 003172 constant entry external dcl 367 initiate_the_file 026251 constant entry internal dcl 2248 ref 422 620 693 logout_slave 011326 constant label dcl 868 set ref 370 649 740 743 821 minor_attach 024616 constant entry internal dcl 2026 ref 712 755 799 no_printer 016231 constant label dcl 1364 ref 1454 1531 1589 1616 no_punch 021270 constant label dcl 1664 ref 1719 not_a_printer 016327 constant label dcl 1372 ref 1456 1533 1591 1618 not_a_punch 021366 constant label dcl 1672 ref 1721 print_banner 013057 constant entry external dcl 1081 ref 1046 1046 problem_notification 023442 constant entry external dcl 1858 remote_driver_ 003160 constant entry external dcl 61 request 011553 constant entry external dcl 927 return_string 026403 constant entry internal dcl 2272 ref 401 618 revert_handler 024303 constant label dcl 1952 ref 1936 save_return 012662 constant label dcl 1056 ref 1026 send_it 024304 constant label dcl 1955 ref 1930 send_the_message 024126 constant entry internal dcl 1910 ref 1887 1903 set_defaults 026215 constant label dcl 2224 ref 2184 set_hangup_proc 025374 constant entry internal dcl 2107 ref 476 2065 set_paper_info 025502 constant entry internal dcl 2129 ref 742 1513 set_wait_timer 024371 constant entry internal dcl 1967 ref 1113 tp_err 004630 constant label dcl 469 ref 463 try_to_recover 005727 constant label dcl 577 set ref 589 wait_for_ctl_finish 024465 constant entry internal dcl 1986 ref 1270 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 30442 31244 27206 30452 Length 32744 27206 602 1463 1234 364 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME remote_driver_ 1912 external procedure is an external procedure. on unit on line 369 64 on unit on unit on line 370 64 on unit on unit on line 371 64 on unit on unit on line 372 64 on unit on unit on line 393 64 on unit drop_device 102 internal procedure is called by several nonquick procedures. on unit on line 1028 91 on unit on unit on line 1125 98 on unit on unit on line 1131 100 on unit on unit on line 1300 98 on unit on unit on line 1757 64 on unit send_the_message 110 internal procedure enables or reverts conditions. on unit on line 1934 64 on unit on unit on line 1939 68 on unit set_wait_timer internal procedure shares stack frame of external procedure remote_driver_. wait_for_ctl_finish internal procedure shares stack frame of external procedure remote_driver_. close_and_detach internal procedure shares stack frame of internal procedure drop_device. minor_attach internal procedure shares stack frame of external procedure remote_driver_. get_switch_name internal procedure shares stack frame of external procedure remote_driver_. find_driver_status_seg_ptr internal procedure shares stack frame of external procedure remote_driver_. set_hangup_proc internal procedure shares stack frame of external procedure remote_driver_. set_paper_info internal procedure shares stack frame of external procedure remote_driver_. get_prt_rqti_data internal procedure shares stack frame of external procedure remote_driver_. initiate_the_file internal procedure shares stack frame of external procedure remote_driver_. return_string 66 internal procedure uses returns(char(*)) or returns(bit(*)). evaluate_forms_options 90 internal procedure enables or reverts conditions. on unit on line 2314 67 on unit STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 major_args_length remote_driver_ 000011 minor_args_length remote_driver_ 000012 cmd_list remote_driver_ 000142 alarm_channel remote_driver_ 000144 ctl_msg_sent remote_driver_ 000146 default_printer remote_driver_ 000150 default_punch remote_driver_ 000152 hangup_proc_defined remote_driver_ 000154 major_args_ptr remote_driver_ 000156 minor_args_ptr remote_driver_ 000160 my_area_ptr remote_driver_ 000162 prt_rqt remote_driver_ 000172 pun_rqt remote_driver_ 000202 reader_attached remote_driver_ 000204 save_request_label remote_driver_ 000210 sys_priv remote_driver_ 000212 teleprinter_iocbp remote_driver_ 000214 terminal remote_driver_ 000234 time remote_driver_ 000236 ctl_wait_list remote_driver_ 000242 event_info remote_driver_ 000251 card_info remote_driver_ 000356 smi remote_driver_ 000370 stat_p remote_driver_ 000372 index get_switch_name STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME drop_device 000100 send_hangup drop_device remote_driver_ 000100 age remote_driver_ 000101 arg_string remote_driver_ 000112 argp remote_driver_ 000114 attach_desc remote_driver_ 000215 banner_type remote_driver_ 000216 code remote_driver_ 000217 control remote_driver_ 000220 date_string remote_driver_ 000226 device_type remote_driver_ 000236 digit remote_driver_ 000237 element_size remote_driver_ 000240 err_msg remote_driver_ 000322 format_code remote_driver_ 000323 header_card2 remote_driver_ 000347 i remote_driver_ 000350 idx remote_driver_ 000351 ignore_code remote_driver_ 000352 input_line remote_driver_ 000376 len remote_driver_ 000400 iocbp remote_driver_ 000402 major_args_name remote_driver_ 000503 major_comm_module remote_driver_ 000514 major_desc remote_driver_ 000615 major_terminal_module remote_driver_ 000626 major_tty remote_driver_ 000637 minor_args_name remote_driver_ 000740 model remote_driver_ 000751 nchar remote_driver_ 000752 need_station remote_driver_ 000753 new_ll remote_driver_ 000754 new_lpi remote_driver_ 000755 new_pl remote_driver_ 000756 not remote_driver_ 000757 omode remote_driver_ 001057 opr_msg remote_driver_ 001130 p remote_driver_ 001132 p2 remote_driver_ 001134 pos remote_driver_ 001135 pool_dir remote_driver_ 001207 printer_count remote_driver_ 001210 punch_count remote_driver_ 001211 ready_device remote_driver_ 001212 req_string remote_driver_ 001215 rqt_string remote_driver_ 001270 save_code remote_driver_ 001271 source remote_driver_ 001272 state remote_driver_ 001273 station remote_driver_ 001304 station_password remote_driver_ 001306 status remote_driver_ 001310 stream remote_driver_ 001320 temp_password remote_driver_ 001322 term_info remote_driver_ 001342 tries remote_driver_ 001343 value remote_driver_ 001344 form_info remote_driver_ 001352 hangup_info remote_driver_ 001362 read_info remote_driver_ 001366 pun_ctl_ptr remote_driver_ 001456 condition remote_driver_ 001466 user remote_driver_ 001476 project remote_driver_ 001506 mbx_dirname remote_driver_ 001560 mbx_entname remote_driver_ 001570 mbx_access_class remote_driver_ 001572 dctp remote_driver_ 001574 dctep remote_driver_ 001576 dmp remote_driver_ 001600 list_ptr remote_driver_ 001602 driver_status_ptr remote_driver_ 001604 idtp remote_driver_ 001606 idtep remote_driver_ 001610 mdtp remote_driver_ 001612 mdtep remote_driver_ 001614 text_strings_ptr remote_driver_ 001616 ltep remote_driver_ 001620 mseg_message_info_ptr remote_driver_ 001622 ordatap remote_driver_ 001624 prt_ctl_ptr remote_driver_ 001626 prt_rqtip remote_driver_ 001630 qgtp remote_driver_ 001632 qgtep remote_driver_ 001634 send_mail_info_version_2 remote_driver_ 001635 send_mail_info remote_driver_ 001650 evaluate_forms_info_input_ptr remote_driver_ 001652 system_input_forms_string_length remote_driver_ 001654 evaluate_forms_info_output_ptr remote_driver_ 001714 desc minor_attach 002015 mode minor_attach 002016 device_io_module minor_attach 002044 i find_driver_status_seg_ptr 002046 stat_segp find_driver_status_seg_ptr 002102 dirname initiate_the_file 002154 entname initiate_the_file 002164 compname initiate_the_file 002174 args_bc initiate_the_file send_the_message 000100 ipc_ind send_the_message 000101 r1_ind send_the_message THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other return_mac tra_ext_1 tra_ext_2 mdfx1 signal_op enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc repeat set_chars_eis index_chars_eis return_chars_eis any_to_any_truncate_ fetch_chars_eis op_alloc_ alloc_storage op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. add_char_offset_ continue_to_signal_ date_time_ debug do_prt_request_ do_prt_request_$error_during_request do_prt_request_$single_copy expand_pathname_$add_suffix expand_pathname_$component get_system_free_area_ initiate_file_$component ioa_$rsnnl iod_info_$evaluate_forms_info iodd_command_processor_ iodd_get_cmd_ iodd_hangup_$iodd_hangup_ iodd_listen_ iodd_msg_ iodd_parse_$args iodd_parse_$command ios_$attach iox_$attach_ioname iox_$attach_ptr iox_$close iox_$control iox_$detach_iocb iox_$get_line iox_$look_iocb iox_$modes iox_$open iox_$put_chars ipc_$block ipc_$drain_chn message_facility_$send_message_access_class output_request_ output_request_$error_during_request output_request_$set_single_copy pool_manager_$clean_pool pool_manager_$init probe read_cards_ read_cards_$set_rqt read_cards_$set_station read_password_$switch scramble_ set_iod_val system_privilege_$ipc_priv_off system_privilege_$ipc_priv_on system_privilege_$ring1_priv_off system_privilege_$ring1_priv_on timer_manager_$alarm_wakeup timer_manager_$sleep validate_card_input_$station write_control_form_ write_sample_form_ write_sample_prt_banner_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$fatal_error error_table_$io_no_permission error_table_$ionmat error_table_$no_forms_table_defined error_table_$no_operation error_table_$noarg error_table_$not_closed error_table_$not_detached error_table_$undefined_order_request iox_$error_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 23 3 003153 61 003157 64 003166 367 003167 369 003203 370 003225 371 003244 372 003266 374 003310 375 003314 376 003316 378 003320 379 003323 381 003355 384 003356 385 003365 386 003373 387 003376 388 003400 390 003403 393 003412 397 003434 398 003441 400 003446 401 003451 403 003513 405 003520 407 003524 408 003533 409 003537 410 003541 411 003543 412 003546 415 003547 418 003550 419 003571 420 003576 421 003625 422 003632 423 003667 426 003671 428 003745 430 004006 432 004030 435 004070 437 004117 439 004141 442 004203 445 004245 447 004332 449 004365 452 004427 454 004465 455 004502 458 004505 461 004526 462 004532 463 004571 466 004601 467 004604 468 004623 469 004630 472 004673 473 004731 476 004732 479 004741 481 004762 482 004764 483 005033 486 005066 487 005121 488 005123 490 005156 493 005157 495 005165 497 005167 499 005171 500 005174 506 005177 507 005204 508 005206 509 005210 510 005212 512 005242 514 005243 515 005244 516 005246 520 005247 521 005254 522 005256 523 005260 524 005262 526 005271 527 005273 529 005274 530 005276 531 005300 532 005302 535 005304 536 005324 537 005326 539 005365 540 005371 541 005373 542 005375 546 005377 547 005421 548 005423 550 005462 555 005466 556 005523 557 005527 558 005541 559 005545 560 005547 561 005551 562 005552 564 005553 565 005555 566 005563 568 005615 570 005616 573 005647 574 005662 575 005673 576 005725 577 005727 580 005762 581 005766 582 005772 585 005774 587 006025 588 006030 589 006054 592 006056 594 006115 596 006213 597 006217 600 006254 603 006263 604 006267 605 006271 606 006302 609 006304 610 006331 611 006333 612 006376 614 006377 615 006411 618 006415 619 006457 620 006465 622 006523 624 006525 628 006526 629 006551 631 006556 632 006614 633 006615 634 006620 635 006621 636 006624 638 006626 639 006630 640 006643 642 006675 644 006676 646 006732 649 006734 652 006736 658 006774 659 007002 663 007010 664 007013 665 007016 666 007017 667 007021 668 007022 669 007024 671 007025 672 007027 674 007030 675 007031 677 007032 678 007041 679 007045 680 007047 681 007052 682 007055 683 007056 684 007057 687 007062 688 007104 691 007111 692 007140 693 007145 694 007203 697 007205 699 007241 700 007245 701 007251 702 007256 704 007323 706 007374 707 007375 709 007434 710 007435 712 007441 713 007446 715 007454 717 007461 721 007502 722 007542 724 007621 725 007625 728 007627 729 007662 731 007670 734 007673 735 007700 736 007702 738 007740 739 007742 740 007775 742 007776 743 010000 746 010002 747 010003 748 010007 749 010013 751 010051 752 010052 755 010056 756 010063 758 010071 760 010076 764 010117 765 010155 767 010234 768 010240 771 010242 772 010275 774 010303 776 010306 777 010313 778 010314 779 010316 780 010320 783 010356 784 010357 786 010363 788 010367 790 010371 791 010374 794 010431 796 010432 798 010466 799 010472 800 010477 802 010502 803 010504 804 010507 806 010521 809 010523 811 010524 813 010567 815 010572 817 010574 818 010600 819 010603 820 010631 821 010632 824 010633 825 010636 826 010640 827 010643 828 010703 829 010704 830 010707 831 010712 832 010715 833 010753 835 010754 836 011006 838 011050 839 011101 840 011116 842 011136 844 011175 847 011204 849 011212 851 011214 852 011233 855 011301 859 011310 861 011314 862 011321 863 011323 866 011325 868 011326 871 011332 872 011351 873 011355 875 011416 876 011424 877 011453 880 011510 882 011514 884 011546 927 011552 938 011561 941 011564 942 011570 943 011572 945 011574 946 011577 948 011637 950 011642 952 011643 953 011646 958 011716 959 011721 961 011724 962 011726 964 011727 968 011736 973 012006 974 012011 976 012012 978 012016 980 012020 981 012022 982 012024 983 012032 984 012034 990 012122 991 012125 993 012157 997 012160 998 012165 1003 012242 1005 012245 1007 012246 1008 012247 1009 012251 1010 012253 1011 012254 1012 012256 1013 012260 1015 012261 1020 012331 1021 012334 1024 012335 1025 012341 1026 012342 1028 012345 1029 012361 1033 012426 1035 012445 1037 012500 1039 012501 1040 012505 1041 012521 1044 012553 1046 012554 1048 012615 1049 012617 1050 012623 1051 012625 1053 012657 1056 012662 1058 012717 1059 012721 1061 012732 1062 012733 1063 012736 1066 012756 1068 012757 1069 013011 1072 013015 1075 013051 1081 013052 1083 013073 1084 013101 1085 013103 1086 013106 1088 013110 1089 013114 1090 013116 1091 013120 1093 013122 1094 013125 1095 013127 1098 013130 1100 013132 1101 013135 1102 013140 1103 013143 1104 013167 1105 013171 1106 013174 1107 013226 1109 013232 1110 013233 1111 013234 1112 013235 1113 013240 1115 013244 1116 013245 1118 013246 1119 013251 1121 013257 1123 013262 1125 013266 1127 013302 1128 013334 1131 013337 1133 013353 1134 013405 1138 013410 1140 013412 1142 013450 1144 013515 1145 013517 1146 013523 1149 013524 1150 013556 1151 013561 1153 013564 1154 013616 1157 013617 1158 013625 1159 013656 1160 013710 1161 013742 1162 013774 1165 013775 1166 014002 1168 014005 1171 014037 1174 014040 1176 014050 1179 014056 1180 014057 1183 014060 1184 014072 1187 014146 1190 014147 1191 014170 1192 014224 1193 014231 1195 014232 1198 014250 1199 014304 1200 014311 1203 014312 1204 014317 1205 014351 1206 014361 1208 014374 1210 014432 1214 014433 1216 014463 1220 014465 1221 014471 1223 014523 1224 014525 1226 014557 1228 014560 1229 014563 1231 014610 1232 014613 1234 014615 1236 014635 1238 014641 1240 014654 1241 014657 1243 014661 1246 014673 1247 014714 1249 014716 1250 014737 1252 014741 1253 014762 1255 014764 1256 015014 1258 015016 1260 015046 1261 015047 1262 015051 1263 015057 1264 015065 1265 015106 1267 015110 1270 015112 1272 015117 1273 015120 1275 015122 1279 015123 1282 015125 1284 015130 1287 015134 1293 015135 1295 015153 1296 015156 1297 015161 1298 015163 1300 015170 1302 015204 1303 015236 1306 015241 1307 015244 1309 015246 1310 015254 1311 015306 1312 015340 1313 015372 1314 015424 1316 015456 1317 015510 1320 015542 1321 015574 1322 015630 1323 015662 1324 015714 1325 015747 1326 016001 1327 016032 1329 016033 1331 016045 1332 016052 1333 016061 1334 016065 1335 016070 1336 016072 1339 016073 1340 016105 1341 016110 1343 016126 1344 016130 1347 016131 1348 016134 1350 016136 1351 016140 1352 016144 1354 016156 1356 016166 1358 016176 1360 016206 1363 016225 1364 016231 1367 016241 1368 016262 1369 016321 1371 016322 1372 016327 1375 016366 1378 016367 1380 016371 1381 016374 1383 016402 1385 016410 1387 016416 1388 016421 1389 016457 1391 016460 1393 016461 1396 016462 1397 016474 1398 016477 1399 016507 1400 016513 1401 016553 1403 016554 1404 016560 1407 016561 1408 016565 1412 016566 1413 016600 1414 016603 1415 016613 1416 016617 1418 016657 1420 016660 1421 016714 1422 016716 1423 016750 1425 016751 1428 016752 1429 017004 1433 017005 1434 017017 1437 017041 1438 017043 1441 017053 1442 017057 1443 017064 1445 017116 1447 017117 1448 017121 1450 017122 1451 017125 1454 017127 1456 017133 1458 017140 1461 017142 1462 017154 1465 017217 1468 017220 1469 017222 1470 017224 1472 017226 1473 017237 1475 017262 1477 017301 1480 017320 1481 017362 1483 017363 1484 017366 1485 017373 1487 017433 1490 017434 1491 017441 1493 017501 1495 017502 1496 017505 1498 017542 1500 017543 1501 017545 1503 017602 1506 017603 1507 017606 1508 017610 1510 017612 1513 017655 1514 017657 1517 017661 1520 017662 1521 017674 1524 017716 1525 017720 1528 017727 1529 017732 1531 017734 1533 017740 1535 017745 1537 017747 1538 017763 1542 020063 1544 020064 1545 020075 1547 020105 1549 020122 1550 020130 1552 020146 1554 020165 1556 020204 1558 020222 1560 020241 1561 020302 1562 020304 1565 020305 1566 020317 1567 020322 1569 020340 1570 020342 1573 020343 1574 020346 1576 020350 1577 020352 1578 020356 1580 020370 1582 020400 1584 020410 1586 020420 1589 020437 1591 020443 1593 020450 1595 020452 1596 020455 1598 020463 1600 020471 1602 020477 1603 020502 1604 020540 1606 020541 1608 020542 1611 020543 1612 020555 1613 020560 1615 020567 1616 020605 1618 020611 1620 020616 1622 020620 1624 020650 1626 020703 1628 020735 1629 020770 1631 021021 1632 021056 1634 021067 1637 021070 1638 021075 1639 021102 1640 021105 1642 021133 1643 021140 1646 021150 1647 021154 1648 021155 1649 021211 1652 021212 1653 021224 1656 021246 1657 021250 1660 021257 1661 021262 1663 021264 1664 021270 1667 021300 1668 021321 1669 021360 1671 021361 1672 021366 1675 021425 1678 021426 1680 021430 1681 021444 1682 021506 1684 021507 1685 021517 1687 021527 1689 021544 1690 021552 1692 021571 1693 021632 1694 021634 1697 021635 1698 021647 1699 021652 1701 021670 1702 021672 1705 021673 1706 021676 1708 021700 1709 021702 1710 021706 1712 021720 1714 021730 1716 021740 1719 021757 1721 021763 1723 021770 1725 021772 1726 021775 1728 022003 1730 022011 1731 022014 1732 022052 1734 022053 1736 022054 1739 022055 1740 022067 1741 022072 1744 022126 1746 022132 1749 022160 1750 022162 1751 022215 1753 022216 1754 022250 1757 022304 1759 022323 1760 022366 1761 022370 1762 022423 1764 022424 1766 022425 1768 022457 1771 022460 1772 022511 1776 022512 1777 022524 1778 022531 1779 022534 1780 022566 1781 022570 1782 022574 1783 022576 1785 022630 1787 022631 1791 022667 1792 022714 1795 022757 1796 023010 1798 023011 1799 023042 1802 023043 1803 023055 1804 023060 1806 023112 1808 023113 1809 023116 1810 023150 1812 023151 1813 023161 1814 023164 1815 023225 1817 023226 1820 023263 1821 023267 1823 023312 1825 023347 1830 023350 1831 023351 1833 023352 1835 023355 1837 023356 1839 023362 1843 023363 1847 023373 1849 023402 1850 023407 1851 023412 1853 023426 1856 023436 1858 023437 1873 023456 1874 023462 1879 023464 1880 023520 1881 023524 1882 023535 1883 023553 1884 023563 1885 023632 1886 023661 1887 023665 1888 023671 1896 023673 1897 023730 1899 023734 1900 023766 1902 023770 1903 023774 1905 024000 890 024001 896 024007 897 024011 899 024012 900 024020 902 024022 906 024035 907 024036 908 024040 910 024050 911 024055 912 024066 913 024072 914 024102 918 024112 920 024115 922 024124 1910 024125 1916 024133 1917 024136 1918 024141 1919 024143 1920 024145 1921 024147 1922 024151 1923 024153 1924 024155 1926 024157 1928 024164 1930 024167 1934 024171 1935 024205 1936 024206 1939 024211 1940 024225 1942 024236 1944 024250 1945 024254 1946 024264 1948 024265 1950 024274 1952 024303 1955 024304 1958 024346 1961 024357 1964 024370 1967 024371 1970 024372 1971 024403 1972 024405 1973 024410 1974 024411 1975 024414 1976 024415 1978 024446 1980 024464 1986 024465 1989 024466 1990 024473 1991 024474 1993 024475 1994 024477 1995 024500 1998 024516 2004 024517 2010 024521 2013 024526 2016 024564 2017 024577 2019 024612 2021 024615 2026 024616 2034 024627 2036 024714 2038 024732 2040 024744 2043 024755 2044 025011 2046 025033 2048 025073 2051 025103 2053 025115 2055 025117 2056 025137 2057 025144 2060 025207 2063 025210 2065 025213 2068 025224 2072 025225 2078 025236 2079 025240 2081 025245 2086 025325 2093 025336 2094 025342 2095 025351 2096 025355 2099 025366 2101 025370 2107 025374 2114 025376 2115 025403 2116 025405 2117 025407 2118 025441 2122 025476 2124 025501 2129 025502 2135 025504 2137 025505 2138 025542 2141 025550 2145 025610 2146 025612 2148 025613 2152 025645 2157 025646 2165 025650 2166 025654 2168 025655 2170 025663 2171 025665 2172 025670 2175 025731 2178 025732 2179 025737 2180 025743 2182 025747 2184 025760 2186 025762 2187 025764 2189 026016 2192 026017 2193 026022 2195 026062 2198 026063 2202 026123 2204 026127 2205 026131 2207 026133 2210 026142 2211 026144 2212 026151 2213 026156 2214 026163 2215 026170 2216 026175 2217 026177 2218 026201 2219 026203 2221 026204 2222 026206 2223 026212 2224 026215 2226 026217 2227 026221 2229 026223 2231 026227 2232 026231 2233 026233 2234 026235 2235 026237 2236 026241 2237 026243 2238 026245 2239 026246 2243 026250 2248 026251 2262 026262 2263 026324 2265 026331 2266 026371 2268 026375 2270 026401 2272 026402 2278 026410 2280 026431 2283 026453 2292 026461 2293 026465 2294 026470 2295 026473 2296 026476 2299 026501 2300 026507 2301 026514 2302 026521 2304 026526 2308 026540 2310 026560 2311 026562 2314 026565 2315 026601 2317 026621 2319 026655 2321 026656 2323 026676 2324 026701 2325 026705 2326 026710 2327 026713 2328 026716 2330 026741 2331 026773 2334 027004 2337 027022 2338 027030 2339 027035 2340 027037 2341 027041 2342 027043 2345 027044 2347 027057 ----------------------------------------------------------- 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