COMPILATION LISTING OF SEGMENT printer_driver_ Compiled by: Multics PL/I Compiler, Release 32e, of September 22, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 10/03/89 0953.5 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 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 13 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 14 15 /* format: off */ 16 17 /* I/O Daemon driver module for the printer with settable paper characteristics and logical channel stops */ 18 19 /* Created: September 1977 by J. C. Whitmore from the original version of printer_driver_ */ 20 /* Modified: March 1978 by J. C. Whitmore for new dprint message format */ 21 /* Modified: June 1979 by C. Hornig to initialize driver_status.dev_ctl_ptr */ 22 /* Modified: 25 December 1981 by G. Palter to initialize prt_ctl.flags so that any unimplemented features will not be 23* accidently left on (eg: force_ctl_char) */ 24 /* Modified: November 1983 by C. Marker added support for force_nsep */ 25 /* Modified: February 23, 1985 by C. Marker to use version 5 message segments */ 26 27 28 /****^ HISTORY COMMENTS: 29* 1) change(87-05-10,Gilcrease), approve(87-05-13,MCR7686), 30* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 31* Update for version 4 dprint_msg and allow previos version(s). 32* 2) change(88-06-03,Brunelle), approve(88-06-03,MCR7911), 33* audit(88-10-19,Wallman), install(88-10-28,MR12.2-1199): 34* Upgraded to version 5 I/O daemon tables. 35* 3) change(88-08-29,Farley), approve(88-08-19,MCR7911), 36* audit(88-10-19,Wallman), install(88-10-28,MR12.2-1199): 37* Updated for version 5 dprint_msg. 38* 4) change(89-06-15,Brunelle), approve(89-09-18,MCR8129), 39* audit(89-09-29,Beattie), install(89-10-03,MR12.3-1083): 40* Correct generation of major/minor_args_ptr when using offset into the I/O 41* daemon tables string area. 42* END HISTORY COMMENTS */ 43 44 45 /* format: on */ 46 47 48 printer_driver_: 49 procedure (); 50 51 return; /* this is not a legal entry */ 52 53 54 /* Automatic variables */ 55 56 dcl date_string char (24); 57 dcl ec fixed bin (35); /* standard error code for calls */ 58 dcl ignore fixed bin (35); /* error code to be ignored */ 59 dcl i fixed bin; /* index variable */ 60 dcl major_args char (major_args_length) based (major_args_ptr); 61 dcl major_args_ptr ptr; /* ptr to major_args string */ 62 dcl major_args_length fixed bin; 63 dcl omode char (256) aligned; 64 dcl opr_msg char (160); /* string for operator messages */ 65 dcl value char (32); /* temporary char string */ 66 dcl p2 ptr; 67 68 dcl io_stat bit (72) aligned; /* ios_ status code */ 69 70 dcl 1 st aligned based (addr (io_stat)), /* breakdown of status code */ 71 2 code fixed bin (35), 72 2 flags bit (36); 73 74 75 dcl 1 form_info aligned, 76 2 page_length fixed bin, 77 2 line_length fixed bin, 78 2 line_no fixed bin, 79 2 carriage_position fixed bin, 80 2 aligned bit (1) unal, 81 2 pad bit (35) unal; 82 83 84 /* External entries */ 85 86 dcl add_char_offset_ entry (ptr, fixed bin(21)) returns(ptr) reducible; 87 dcl clock_ entry () returns (fixed bin (71)); 88 dcl com_err_ entry options (variable); 89 dcl date_time_ entry (fixed bin (71), char (*)); 90 dcl iodd_listen_ entry (ptr); 91 dcl iodd_msg_ entry options (variable); 92 dcl iodd_parse_$args entry (char(*) var, char(*)) returns(char(256) var); 93 dcl ios_$attach entry (char (*) aligned, char (*) aligned, char (*) aligned, char (*) aligned, bit (72) aligned); 94 dcl ios_$changemode entry (char (*) aligned, char (*) aligned, char (*) aligned, bit (72) aligned); 95 dcl ios_$detach entry (char (*) aligned, char (*) aligned, char (*) aligned, bit (72) aligned); 96 dcl ios_$order entry (char (*) aligned, char (*) aligned, ptr, bit (72) aligned); 97 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 98 dcl iox_$find_iocb entry (char (*) aligned, ptr, fixed bin (35)); 99 dcl do_prt_request_ entry (ptr, ptr, fixed bin (35)); 100 dcl do_prt_request_$error_during_request entry (char (*)); 101 dcl do_prt_request_$single_copy entry (); 102 dcl timer_manager_$sleep entry (fixed bin (71), bit (2) aligned); 103 dcl write_sample_form_ entry (char (*) aligned, char (*) aligned, fixed bin (35)); 104 dcl write_sample_prt_banner_ entry (char (*) aligned, ptr, ptr, fixed bin (35)); 105 106 107 /* Internal static */ 108 109 dcl whoami char (24) int static options (constant) init ("printer_driver_"); 110 dcl master fixed bin int static options (constant) init (1); 111 dcl slave fixed bin int static options (constant) init (2); 112 dcl both fixed bin int static options (constant) init (0); 113 dcl log fixed bin int static options (constant) init (0); 114 dcl normal fixed bin int static options (constant) init (1); 115 dcl error fixed bin int static options (constant) init (2); 116 dcl initial_bit_rate fixed bin int static options (constant) init (7000); 117 /* this is a starting value which is betweeen */ 118 /* the rates for the PRU-1200 and the PRT-301 */ 119 120 dcl stream (2) char (32) aligned int static; /* streams for writing to terminals */ 121 dcl time fixed bin (71) int static init (1); 122 123 dcl 1 ctl aligned int static like prt_ctl; /* here we hold the defaults used by do_prt_request_ */ 124 125 /* Builtins */ 126 127 dcl (addr, null, substr, length, convert, max, string, mod) builtin; 128 129 130 /* Conditions */ 131 132 dcl (cleanup, conversion) condition; 133 134 135 /* External static -- error table entries */ 136 137 dcl error_table_$no_operation fixed bin (35) ext static; 138 dcl error_table_$action_not_performed fixed bin (35) ext static; 139 dcl error_table_$fatal_error fixed bin (35) ext static; 140 141 142 init: 143 entry (arg_p); 144 145 dcl arg_p ptr; 146 147 stat_p = arg_p; /* put the arg into static for easy reference */ 148 driver_status_ptr = iodd_static.driver_ptr; /* get pointer to driver_status seg */ 149 driver_status.dev_ctl_ptr, prt_ctl_ptr = addr (ctl); 150 text_strings_ptr = iodd_static.text_strings_ptr; /* get ptr to i/o daemon table text area */ 151 /* use static device control parameters */ 152 stream (1) = "user_output"; /* output stream for master terminal */ 153 stream (2) = iodd_static.slave_output; /* check for active before use */ 154 155 if iodd_static.attach_type ^= ATTACH_TYPE_IOM then do; /* this driver expects an IOM channel */ 156 call iodd_msg_ (error, master, error_table_$fatal_error, whoami, 157 "This driver requires a printer attached through the IOM."); 158 return; /* quit now */ 159 end; 160 161 if iodd_static.assigned_devices > 1 then do; /* be sure all is correct */ 162 call iodd_msg_ (error, master, error_table_$fatal_error, whoami, 163 "Multiple minor devices are not supported by the printer driver."); 164 return; 165 end; 166 167 if iodd_static.form_type = "undefined_form" then do; 168 iodd_static.form_type = "std_ctl_msg"; /* if set, keep over a re-init */ 169 driver_status.form_wait_time = 5; /* set this as a reasonable default */ 170 end; 171 172 /* locate the major args for the device in the iod_tables */ 173 major_args_ptr = add_char_offset_ (addr (text_strings.chars), iodd_static.major_args.first_char - 1); 174 major_args_length = iodd_static.major_args.total_chars; 175 176 iodd_static.device_dim = iodd_parse_$args ("dim=", major_args); 177 /* see if there was a dim given */ 178 if iodd_static.device_dim = "" then /* otherwise use our default */ 179 iodd_static.device_dim = "prtdim_"; /* this is the default */ 180 181 iodd_static.dev_io_stream = "dev_i/o"; /* record the stream name */ 182 call ios_$attach (iodd_static.dev_io_stream, iodd_static.device_dim, iodd_static.attach_name, "save_vfc", 183 io_stat); 184 if st.code ^= 0 then do; 185 call iodd_msg_ (error, master, st.code, whoami, "Fatal error: Unable to attach channel ^a", 186 iodd_static.attach_name); 187 return; 188 end; 189 190 on cleanup 191 begin; /* they will try to transfer back to iodd_ by go to */ 192 call ios_$detach (iodd_static.dev_io_stream, "", "", io_stat); 193 end; 194 195 iodd_static.dev_in_stream = "Daemon_null_stream"; /* just to avoid un-initialized variables */ 196 driver_status.dev_out_stream = "printer_output"; /* define the stream name for all time */ 197 198 call ios_$attach (driver_status.dev_out_stream, "syn", "dev_i/o", "", io_stat); 199 /* stick to convention */ 200 if st.code ^= 0 then do; 201 call iodd_msg_ (error, master, st.code, whoami, "Fatal error: Unable to attach syn to dev_i/o."); 202 go to clean_out; 203 end; 204 205 call iox_$find_iocb (driver_status.dev_out_stream, driver_status.dev_out_iocbp, ec); 206 if ec ^= 0 then do; 207 call iodd_msg_ (error, master, ec, whoami, "Fatal error: Unable to get iocbp for device stream."); 208 go to clean_out; /* that's all we can do... */ 209 end; 210 211 212 string (prt_ctl.flags) = ""b; 213 if driver_status.rqti_ptr ^= null then do; /* if there is an rqti seg, use it */ 214 215 prt_rqtip = driver_status.rqti_ptr; /* make the based references cleaner */ 216 if prt_rqti.header.header_version ^= rqti_header_version_1 then do; 217 call iodd_msg_ (error, master, error_table_$fatal_error, whoami, 218 "prt rqt info version ^d found (expected ^d)", prt_rqti.header.header_version, 219 rqti_header_version_1); 220 go to clean_out; 221 end; 222 223 prt_ctl.meter = prt_rqti.header.meter; /* do we save meters for this rqt? */ 224 iodd_static.slave_hold = ^(prt_rqti.header.auto_go); 225 /* set the initial hold state as requested */ 226 iodd_static.wakeup_time = max (30, prt_rqti.header.driver_wait_time); 227 /* seconds to wait for a request */ 228 if prt_rqti.header.type_code = 0 then go to set_defaults; 229 /* this is only a header */ 230 else if prt_rqti.header.type_code ^= 1 then do; 231 call iodd_msg_ (error, master, error_table_$fatal_error, whoami, 232 "Wrong rqt info seg type for printer."); 233 go to clean_out; 234 end; 235 236 if prt_rqti.version ^= prt_rqti_version_1 then do; 237 /* see if it is the right version */ 238 call iodd_msg_ (error, master, error_table_$fatal_error, whoami, 239 "Wrong version of prt_rqti. Found ^d (expected ^d)", prt_rqti.version, prt_rqti_version_1); 240 go to clean_out; 241 end; 242 243 if prt_rqti.opr_msg ^= "" then call iodd_msg_ (normal, both, 0, "", "^/^a", prt_rqti.opr_msg); 244 /* give operator instructions */ 245 246 prt_ctl.phys_page_length = prt_rqti.paper_length; 247 /* get paper data for prtdim */ 248 prt_ctl.phys_line_length = prt_rqti.paper_width; 249 prt_ctl.lines_per_inch = prt_rqti.lines_per_inch; 250 251 prt_ctl.channel_stops (*) = prt_rqti.channel_stops (*); 252 /* get VFU stops for prtdim */ 253 254 prt_ctl.banner_type = prt_rqti.banner_type; /* copy control info to writable storage */ 255 prt_ctl.force_nep = prt_rqti.force_nep; 256 prt_ctl.force_esc = prt_rqti.force_esc; 257 prt_ctl.force_nsep = prt_rqti.force_nsep; 258 prt_ctl.no_auto_print = prt_rqti.no_auto_print; 259 prt_ctl.banner_bars = prt_rqti.banner_bars; 260 prt_ctl.banner_indent = prt_rqti.banner_indent; 261 prt_ctl.banner_line = prt_rqti.banner_line; 262 end; 263 else do; /* no rqti seg, so set some defaults */ 264 prt_ctl.meter = "0"b; /* don't keep any meters */ 265 iodd_static.slave_hold = "1"b; /* be sure to ask for a start command */ 266 iodd_static.wakeup_time = 30; /* check every 30 seconds */ 267 set_defaults: /* set up the default paper data */ 268 prt_ctl.phys_page_length = 66; /* 11 inch paper at 6 lpi is 66 lines */ 269 prt_ctl.phys_line_length = 136; /* assume the standard printer paper */ 270 prt_ctl.lines_per_inch = 6; /* normal for good readibility */ 271 272 string (prt_ctl.channel_stops) = "0"b; /* no slew stops are defined */ 273 274 prt_ctl.force_nep = "0"b; /* let user have his way */ 275 prt_ctl.force_esc = "0"b; 276 prt_ctl.force_nsep = "0"b; /* allow printing of inner head and tail sheets */ 277 prt_ctl.no_auto_print = "0"b; /* print without requesting operator attn */ 278 prt_ctl.banner_type = NORMAL_BANNERS; /* use normal head/tail sheets */ 279 prt_ctl.banner_bars = NORMAL_BANNER_BARS; /* set for overprinting */ 280 prt_ctl.banner_indent = 0; /* again */ 281 prt_ctl.banner_line = 1; /* again */ 282 end; 283 284 285 /* Now set up the dim with the paper and channel stop data */ 286 287 call set_paper_info (slave, ec); 288 if ec ^= 0 then go to clean_out; /* message was printed by proc */ 289 290 call iox_$control (driver_status.dev_out_iocbp, "channel_stops", addr (prt_ctl.channel_stops), ec); 291 if ec ^= 0 then do; 292 call iodd_msg_ (error, master, ec, whoami, "Fatal error: Unable to perform channel_stops order."); 293 go to clean_out; /* fatal error */ 294 end; 295 296 driver_status.generic_type = "printer"; /* this is the type of device we use */ 297 driver_status.attached = "1"b; 298 driver_status.ready = "1"b; 299 driver_status.busy = "0"b; 300 driver_status.request_pending = (36)"0"b; 301 driver_status.elem_size = 9; /* printer output is in characters - 9 bits each */ 302 driver_status.message_type = 1; /* we only want print requests */ 303 driver_status.bit_rate_est = initial_bit_rate; /* no history on output rate yet */ 304 driver_status.defer_time_limit = 0; /* make operator specify reject time_limit */ 305 306 iodd_static.current_devices = iodd_static.assigned_devices; 307 /* make them equal */ 308 309 if iodd_static.ctl_term.attached then 310 call ios_$changemode (iodd_static.ctl_output, "^hndlquit", omode, io_stat); 311 /* we reset read on quit */ 312 313 value = iodd_parse_$args ("form_type=", major_args); 314 /* check on a ctl term form type */ 315 if value ^= "" then iodd_static.form_type = substr (value, 1, length (iodd_static.form_type)); 316 317 call date_time_ (clock_ (), date_string); /* get set for ready message */ 318 319 call iodd_msg_ (normal, both, 0, "", /* let the subr do the work */ 320 "^/^a driver ready at ^16a^/", driver_status.dev_name_label, date_string); 321 322 call iodd_listen_ (stat_p); 323 324 clean_out: 325 call ios_$detach (iodd_static.dev_io_stream, "", "", io_stat); 326 327 return; 328 329 330 request: 331 entry (); 332 333 /* This is the entry which is called by the iodd_listen_ procedure when a request 334* for this driver has been received from the coordinator. 335* 336* The purpose of the code for this entry of the printer driver is to validate 337* that the request is one that we expect and can correctly interpret. 338* Then we call do_prt_request_ to do all the work of access checking etc. 339**/ 340 341 driver_status_ptr = iodd_static.driver_ptr; /* make it general although it will always be the same */ 342 p2 = addr (driver_status.descriptor); /* find request descriptor */ 343 dmp = addr (driver_status.message); /* get ptr to message */ 344 prt_ctl_ptr = driver_status.dev_ctl_ptr; /* only one for this driver */ 345 346 if dprint_msg.header.hdr_version ^= queue_msg_hdr_version_1 then do; 347 /* trouble */ 348 call iodd_msg_ (log, both, 0, "", "Invalid message header. Cannot read request ^d.^d.", 349 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q); 350 p2 -> request_descriptor.keep_in_queue = "1"b; 351 /* save for conversion later */ 352 go to be_nice; 353 end; 354 if dprint_msg.header.message_type ^= driver_status.message_type then do; 355 call iodd_msg_ (log, both, 0, "", /* log the error */ 356 "Incorrect message type for printer.^/Request ^d.^d for ^a (segment ^a) not processed.", 357 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 358 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 359 dprint_msg.header.ename); 360 p2 -> request_descriptor.cancelled = "1"b; /* we don't want this one back */ 361 be_nice: 362 p2 -> request_descriptor.dont_delete = "1"b; /* save the user's data */ 363 p2 -> request_descriptor.finished = "1"b; /* mark it done */ 364 return; /* it wasn't for us after all */ 365 end; 366 if dprint_msg.version ^= dprint_msg_version_5 /* Current version */ 367 & dprint_msg.version ^= dprint_msg_version_4 /* Previous version */ 368 & dprint_msg.version ^= dprint_msg_version_3 /* Previous version */ 369 then do; /* other trouble? */ 370 call iodd_msg_ (log, both, 0, "", 371 "Wrong dprint message version found.^/Request ^d.^d for ^a (segment ^a) not processed", 372 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 373 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 374 dprint_msg.header.ename); 375 p2 -> request_descriptor.keep_in_queue = "1"b; 376 go to be_nice; 377 end; 378 if dprint_msg.version < dprint_msg_version_4 then /* Disallow line numbers before version 4 */ 379 dprint_msg.control.line_nbrs = "0"b; 380 if dprint_msg.line_lth > prt_ctl.phys_line_length then do; 381 /* platten wide enough */ 382 call iodd_msg_ (log, both, 0, "", 383 "Request ^d.^d for ^a (segment ^a) deferred.^/Requires a device with line length of ^d.", 384 p2 -> request_descriptor.seq_id, p2 -> request_descriptor.q, 385 p2 -> request_descriptor.mseg_message_info_copy.sender_id, 386 dprint_msg.header.ename, dprint_msg.line_lth); 387 p2 -> request_descriptor.keep_in_queue = "1"b; 388 /* defer it */ 389 go to be_nice; 390 end; 391 392 iodd_static.quit_during_request = "0"b; /* start clean */ 393 394 call do_prt_request_ (driver_status.dev_out_iocbp, stat_p, ec); 395 396 if ec ^= 0 then iodd_static.slave_hold = "1"b; /* on errors go to command level */ 397 398 if iodd_static.test_entry then 399 if time > 1 then call timer_manager_$sleep (time, "11"b); 400 /* pause if testing */ 401 402 return; 403 404 405 command: 406 entry (source, state, arg_list_p, c_code); 407 408 dcl source fixed bin; /* 1 = master console, 2 = slave */ 409 dcl state fixed bin; /* 0 = not quite ready to handle a request */ 410 /* 1 = drivers are ready */ 411 /* 2 = command entered after a quit */ 412 dcl arg_list_p ptr; /* ptr to structure returned by parse_command_ */ 413 dcl c_code fixed bin (35); /* error code: zero if command handled correctly */ 414 dcl save_code fixed bin (35); /* saved value of c_code when called */ 415 /* error_table_ code for bad syntax or unknown command */ 416 417 dcl 1 arg_list aligned based (arg_list_p), /* parse_command_ structure */ 418 2 max_tokens fixed bin, /* space allocated, do not change */ 419 2 n_tokens fixed bin, /* number of tokens from command line (including cmd) */ 420 2 command char (64) var, /* the first token is the command */ 421 2 arg (n_tokens - 1) char (64) var; /* the other tokens are args to the command */ 422 423 dcl new_pl fixed bin; /* temp for setting the phys page length */ 424 dcl new_ll fixed bin; /* temp for the new phys line length */ 425 dcl new_lpi fixed bin; /* and for the new lines per inch value */ 426 dcl not bit (1); 427 428 429 stream (2) = iodd_static.slave_output; /* in case it has changed */ 430 431 on conversion 432 begin; /* handler for conversion errors */ 433 call iodd_msg_ (normal, source, 0, "", "Argument conversion error. Try again."); 434 go to cmd_error; 435 end; 436 437 save_code = c_code; /* save the called value */ 438 driver_status_ptr = iodd_static.driver_ptr; /* make this ready for command use */ 439 prt_ctl_ptr = driver_status.dev_ctl_ptr; /* this is the only one for this driver */ 440 c_code, ec = 0; /* say we handled it for now */ 441 442 443 if command = "help" then do; 444 call iodd_msg_ (normal, source, 0, "", "^/** Commands for the printer driver **^/"); 445 call iodd_msg_ (normal, source, 0, "", "banner_bars [] single | double | none"); 446 call iodd_msg_ (normal, source, 0, "", "banner_type [] standard | brief | none"); 447 call iodd_msg_ (normal, source, 0, "", 448 "paper_info [] [-ll ] [-pl ] [-lpi <6 or 8>]"); 449 call iodd_msg_ (normal, source, 0, "", 450 "prt_control [] [^]KEY ... (KEYs: force_nep, force_esc, force_nsep, autoprint)"); 451 call iodd_msg_ (normal, source, 0, "", "sample_hs []"); 452 call iodd_msg_ (normal, source, 0, "", "sample_form"); 453 call iodd_msg_ (normal, source, 0, "", "single"); 454 if test_entry then call iodd_msg_ (normal, source, 0, "", "time []"); 455 go to end_cmd; 456 end; 457 458 if command = "ctl_term" | command = "ctlterm" then do; 459 /* this was passed on by iodd_command_processor_ */ 460 /* to have us set the default form type */ 461 iodd_static.form_type = "std_ctl_msg"; /* this is our default */ 462 go to end_cmd; /* the request entry will set the wait time */ 463 end; 464 465 if command = "time" then 466 if ^iodd_static.test_entry then do; /* refuse to recognize if not testing */ 467 ec = save_code; 468 go to end_cmd; 469 end; 470 else do; 471 if n_tokens > 1 then 472 time = convert (time, arg (1)); 473 else time = 1; /* return to the default..full speed */ 474 go to end_cmd; 475 end; 476 477 if command = "banner_bars" | command = "bannerbars" then do; 478 if arg_list.n_tokens > 1 then /* some arg given */ 479 if driver_status.device_id = arg (1) then 480 i = 2; /* minor device, args can start at number 2 */ 481 else i = 1; /* first arg was a value */ 482 else i = 1; /* no args at all */ 483 if arg_list.n_tokens = i | arg (i) = "-print" then do; 484 /* give value */ 485 if prt_ctl.banner_bars = NORMAL_BANNER_BARS then opr_msg = "double"; 486 else if prt_ctl.banner_bars = SINGLE_BANNER_BARS then opr_msg = "single"; 487 else if prt_ctl.banner_bars = NO_BANNER_BARS then opr_msg = "none"; 488 else opr_msg = "Undefined value"; 489 call iodd_msg_ (normal, source, 0, "", "Current value is: ^a", opr_msg); 490 go to end_cmd; 491 end; 492 if arg (i) = "double" then prt_ctl.banner_bars = NORMAL_BANNER_BARS; 493 else if arg (i) = "single" then prt_ctl.banner_bars = SINGLE_BANNER_BARS; 494 else if arg (i) = "none" then prt_ctl.banner_bars = NO_BANNER_BARS; 495 else do; 496 call iodd_msg_ (normal, source, 0, "", "Undefined argument ^a. Use single, double or none.", arg (1)) 497 ; 498 go to cmd_error; 499 end; 500 501 go to end_cmd; 502 end; 503 504 if command = "single" then do; /* operator wants to single space FF and VT */ 505 if iodd_static.request_in_progress then do; 506 call ios_$changemode (driver_status.dev_out_stream, "single.", omode, io_stat); 507 /* set mode */ 508 call do_prt_request_$single_copy (); /* avoid same problem if another copy requested */ 509 end; 510 else call iodd_msg_ (normal, source, 0, "", "No current request."); 511 go to end_cmd; 512 end; 513 514 if command = "paper_info" | command = "paperinfo" then do; 515 if arg_list.n_tokens > 1 then /* some arg given */ 516 if driver_status.device_id = arg (1) then 517 i = 2; /* minor device, args can start at number 2 */ 518 else i = 1; /* possibly first arg was a value */ 519 else i = 1; /* no args at all */ 520 if n_tokens = i | arg (i) = "-print" then do; 521 call iodd_msg_ (normal, source, 0, "", 522 "Physical paper width: ^d characters ^/Physical paper length: ^d lines (at ^d lines per inch)", 523 prt_ctl.phys_line_length, prt_ctl.phys_page_length, prt_ctl.lines_per_inch); 524 go to end_cmd; 525 end; 526 if mod ((n_tokens - i), 2) = 1 then do; 527 call iodd_msg_ (normal, source, 0, "", 528 "The paper_info command must have an even number of arguments."); 529 go to cmd_error; /* make him do it right */ 530 end; 531 new_ll = prt_ctl.phys_line_length; /* record the old values as the default */ 532 new_pl = prt_ctl.phys_page_length; 533 new_lpi = prt_ctl.lines_per_inch; 534 535 do i = i to n_tokens - 1 by 2; /* check the arg pairs */ 536 if arg (i) = "-ll" then new_ll = convert (new_ll, arg (i + 1)); 537 else if arg (i) = "-pl" then new_pl = convert (new_pl, arg (i + 1)); 538 else if arg (i) = "-lpi" then new_lpi = convert (new_lpi, arg (i + 1)); 539 else do; /* bad control arg */ 540 call iodd_msg_ (normal, source, 0, "", "Invalid control argument: ^a", arg (i)); 541 go to cmd_error; 542 end; 543 end; 544 if new_ll < 10 | new_ll > 200 then do; /* check the range */ 545 call iodd_msg_ (normal, source, 0, "", "Line length range is 10 to 200."); 546 go to cmd_error; 547 end; 548 549 if ^(new_lpi = 6 | new_lpi = 8) then do; 550 call iodd_msg_ (normal, source, 0, "", "Lines per inch must be 6 or 8."); 551 go to cmd_error; 552 end; 553 if new_pl < 10 then do; 554 call iodd_msg_ (normal, source, 0, "", "Minimum paper length is 10 lines."); 555 go to cmd_error; 556 end; 557 if new_pl > 127 then do; 558 call iodd_msg_ (normal, source, 0, "", "Maximum paper length is 127 lines."); 559 go to cmd_error; 560 end; 561 562 prt_ctl.phys_line_length = new_ll; 563 prt_ctl.phys_page_length = new_pl; 564 prt_ctl.lines_per_inch = new_lpi; 565 566 call iodd_msg_ (normal, source, 0, "", "Changing to: ll ^d, pl ^d at ^d lines per inch.", 567 prt_ctl.phys_line_length, prt_ctl.phys_page_length, prt_ctl.lines_per_inch); 568 569 call set_paper_info (source, ec); 570 571 go to end_cmd; 572 end; 573 574 575 if command = "sample_form" | command = "sampleform" then do; 576 if iodd_static.ctl_term.attached then do; /* be sure there is a place to write */ 577 if iodd_static.forms then do; /* are we simulating FF? */ 578 call ios_$order (iodd_static.ctl_output, "form_status", addr (form_info), io_stat); 579 if st.code ^= 0 then do; /* OOPS.... */ 580 iodd_static.master_hold = "1"b; 581 /* this is a problem for master terminal */ 582 call com_err_ (st.code, whoami, 583 "^/form_status order call. Master terminal action required to continue."); 584 go to cmd_error; 585 end; 586 if ^form_info.aligned then 587 call ios_$order (iodd_static.ctl_output, "form_aligned", null, io_stat); 588 /* this will work */ 589 end; 590 call write_sample_form_ (iodd_static.form_type, iodd_static.ctl_output, ec); 591 end; 592 else call iodd_msg_ (normal, source, 0, "", "Control terminal is not attached."); 593 594 go to end_cmd; 595 end; 596 597 if command = "prt_control" | command = "prtcontrol" then do; 598 if arg_list.n_tokens > 1 then /* some arg given */ 599 if driver_status.device_id = arg (1) then 600 i = 2; /* minor device, args can start at number 2 */ 601 else i = 1; /* possibly first arg was a value */ 602 else i = 1; /* no args at all */ 603 if n_tokens = i | arg (i) = "-print" then do;/* give the values */ 604 call iodd_msg_ (normal, source, 0, "", 605 "Values are: ^[^^^]force_nep, ^[^^^]force_esc, ^[^^^]auto_print, ^[^^^]force_nsep", 606 ^prt_ctl.force_nep, ^prt_ctl.force_esc, prt_ctl.no_auto_print, prt_ctl.force_nsep); 607 end; 608 else do; 609 do i = i to n_tokens - 1; /* look at each argument */ 610 not = (substr (arg (i), 1, 1) = "^"); 611 /* was first char a "^" */ 612 if not then 613 value = substr (arg (i), 2); 614 else value = arg (i); 615 if value = "force_nep" | value = "forcenep" then prt_ctl.force_nep = ^not; 616 else if value = "force_esc" | value = "forceesc" then prt_ctl.force_esc = ^not; 617 else if value = "force_nsep" | value = "forcensep" then prt_ctl.force_nsep = ^not; 618 else if value = "auto_print" | value = "autoprint" then prt_ctl.no_auto_print = not; 619 else call iodd_msg_ (normal, source, 0, "", "Undefined argument: ^a", arg (i)); 620 end; 621 end; 622 go to end_cmd; 623 end; 624 625 if command = "banner_type" | command = "bannertype" then do; 626 if arg_list.n_tokens > 1 then /* some arg given */ 627 if driver_status.device_id = arg (1) then 628 i = 2; /* minor device, args can start at number 2 */ 629 else i = 1; /* possibly first arg was a value */ 630 else i = 1; /* no args at all */ 631 if n_tokens = i | arg (i) = "-print" then do;/* give the values */ 632 if prt_ctl.banner_type = NO_BANNERS then opr_msg = "none"; 633 else if prt_ctl.banner_type = NORMAL_BANNERS then opr_msg = "standard"; 634 else if prt_ctl.banner_type = BRIEF_BANNERS then opr_msg = "brief"; 635 else opr_msg = "Undefined value"; 636 call iodd_msg_ (normal, source, 0, "", "Current value is: ^a", opr_msg); 637 go to end_cmd; 638 end; 639 640 if arg (i) = "standard" then prt_ctl.banner_type = NORMAL_BANNERS; 641 else if arg (i) = "none" then prt_ctl.banner_type = NO_BANNERS; 642 else if arg (i) = "brief" then prt_ctl.banner_type = BRIEF_BANNERS; 643 else do; 644 call iodd_msg_ (normal, source, 0, "", "Banner type ^a is not defined.", arg (i)); 645 go to cmd_error; 646 end; 647 648 go to end_cmd; 649 end; 650 651 if command = "sample_hs" | command = "samplehs" then do; 652 if arg_list.n_tokens > 1 then /* some arg given */ 653 if driver_status.device_id = arg (1) then 654 i = 2; /* minor device, args can start at number 2 */ 655 else i = 1; /* possibly first arg was a value */ 656 else i = 1; /* no args at all */ 657 658 call iox_$control (driver_status.dev_out_iocbp, "reset", null, ignore); 659 /* clear everything */ 660 call iox_$control (driver_status.dev_out_iocbp, "inside_page", null, ignore); 661 662 call write_sample_prt_banner_ ("head_sheet", driver_status.dev_out_iocbp, prt_ctl_ptr, ec); 663 664 call iox_$control (driver_status.dev_out_iocbp, "end_of_page", null, ignore); 665 call iox_$control (driver_status.dev_out_iocbp, "runout", null, ignore); 666 /* be sure it prints */ 667 668 go to end_cmd; 669 end; 670 671 /* If we come past here, this command is illegal. So make a clean return without changing anything. */ 672 673 c_code = save_code; /* restore the original value */ 674 return; 675 676 end_cmd: 677 c_code = ec; /* pass back any defined errors */ 678 return; 679 680 cmd_error: 681 c_code = error_table_$action_not_performed; /* cause a resetread */ 682 return; 683 684 685 default_handler: 686 entry (condition_info_ptr); 687 688 dcl condition char (32); /* fixed string for the call */ 689 690 condition = condition_info.condition_name; /* this will indent funny */ 691 692 if iodd_static.request_in_progress then /* try to avoid mistakes */ 693 call do_prt_request_$error_during_request (condition); 694 /* take it away */ 695 696 return; /* do_prt_request_ should not return, but.... */ 697 698 699 set_paper_info: 700 procedure (source, code); 701 702 dcl code fixed bin (35); 703 dcl source fixed bin; 704 705 code = 0; 706 707 call iox_$control (driver_status.dev_out_iocbp, "paper_info", addr (prt_ctl.paper_info), code); 708 if code ^= 0 then 709 if code = error_table_$no_operation then do; /* if dim couldn't, tell the operator */ 710 711 call iodd_msg_ (normal, source, 0, "", 712 "Mount VFU tape for ^d lines per page. ^/Set printer for ^d lines/inch.", 713 prt_ctl.phys_page_length, prt_ctl.lines_per_inch); 714 715 iodd_static.slave_hold = "1"b; /* be sure we let the op load VFU */ 716 code = 0; 717 718 end; 719 else do; /* a real error */ 720 call iodd_msg_ (normal, source, code, whoami, "Unable to perform paper_info order."); 721 return; 722 end; 723 724 return; 725 726 end set_paper_info; 727 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 1 2 1 3 /* Structure for find_condition_info_. 1 4* 1 5* Written 1-Mar-79 by M. N. Davidoff. 1 6**/ 1 7 1 8 /* automatic */ 1 9 1 10 declare condition_info_ptr pointer; 1 11 1 12 /* based */ 1 13 1 14 declare 1 condition_info aligned based (condition_info_ptr), 1 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 1 16 2 version fixed binary, /* Must be 1 */ 1 17 2 condition_name char (32) varying, /* name of condition */ 1 18 2 info_ptr pointer, /* pointer to the condition data structure */ 1 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 1 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 1 21 2 flags unaligned, 1 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 1 23 3 pad1 bit (35), 1 24 2 pad2 bit (36), 1 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 1 26 2 pad3 (4) bit (36); 1 27 1 28 /* internal static */ 1 29 1 30 declare condition_info_version_1 1 31 fixed binary internal static options (constant) initial (1); 1 32 1 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 727 728 /* BEGIN INCLUDE FILE ... dprint_msg.incl.pl1 */ 2 2 /* Modified: November 1983 by C. Marker Added no_separator. */ 2 3 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(87-05-10,Gilcrease), approve(87-05-13,MCR7686), 2 6* audit(88-02-01,Farley), install(88-02-02,MR12.2-1019): 2 7* Add line_nbrs bit for line-numbered printouts, version 4. 2 8* 2) change(88-02-05,Farley), approve(88-02-05,PBF7686), audit(88-02-05,GWMay), 2 9* install(88-02-05,MR12.2-1022): 2 10* Corrected alignment of line_nbrs, was aligned s/b unaligned.. 2 11* 3) change(88-08-23,Farley), approve(88-09-16,MCR7911), 2 12* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 2 13* Increased size of forms field to 64 characters (was only 24), which 2 14* updates the version to 5. 2 15* END HISTORY COMMENTS */ 2 16 2 17 2 18 dcl dmp ptr; /* ptr to message */ 2 19 2 20 dcl 1 dprint_msg based (dmp) aligned, /* structure of a IO daemon print or punch request */ 2 21 2 header like queue_msg_hdr, /* header for all standard queue messages */ 2 22 2 version fixed bin, /* version of the dprint_msg used */ 2 23 2 copies fixed bin, /* number of copies user requested */ 2 24 2 bit_count fixed bin (35), /* the bitcount of the segment at request time */ 2 25 2 output_module fixed bin, /* 1=print, 2=7punch, 3= mcc, 4=raw */ 2 26 2 control, /* control flags. */ 2 27 3 nep bit (1) unal, /* TRUE if printing over perforations */ 2 28 3 single bit (1) unal, /* TRUE if ignore FF and VT */ 2 29 3 non_edited bit (1) unal, /* TRUE if printing in non-edited mode */ 2 30 3 truncate bit (1) unal, /* TRUE if truncating lines at line length */ 2 31 3 esc bit (1) unal, /* TRUE if text escapes are to be processed */ 2 32 3 center_top_label bit (1) unal, /* TRUE if top label to be centered */ 2 33 3 center_bottom_label bit (1) unal, /* TRUE if bottom label to be centered */ 2 34 3 no_separator bit(1) unal, /* TRUE if the inner head a tail sheets of multiple copies are to be suppressed. */ 2 35 3 line_nbrs bit (1) unal, /* TRUE if line numbers wanted */ 2 36 3 padding bit (27) unal, 2 37 2 lmargin fixed bin, /* indent from the left */ 2 38 2 line_lth fixed bin, /* logical line length */ 2 39 2 page_lth fixed bin, /* logical page length */ 2 40 2 heading_lth fixed bin, /* number of chars in heading */ 2 41 2 top_label_lth fixed bin, /* number of chars in the top label */ 2 42 2 bottom_label_lth fixed bin, /* number of chars in bottom label */ 2 43 2 chan_stop_path_lth fixed bin, /* number of chars in channel stop pathname */ 2 44 2 forms_name_lth fixed bin, /* number of chars in forms name */ 2 45 2 future_fb_values (7) fixed bin, /* make future versions possible */ 2 46 2 forms char (24), /* name of special forms, or blank */ 2 47 2 destination char (24), /* routing for output */ 2 48 2 heading char (head_max_lth refer (dprint_msg.heading_lth)), /* heading on page 1 */ 2 49 2 top_label char (label_max_lth refer (dprint_msg.top_label_lth)), /* top page heading for each page */ 2 50 2 bottom_label char (label_max_lth refer (dprint_msg.bottom_label_lth)), /* bottom page heading */ 2 51 2 chan_stop_path char (path_max_lth refer (dprint_msg.chan_stop_path_lth)), /* path of rqti seg with channel stops */ 2 52 2 forms_name char (forms_max_lth refer (dprint_msg.forms_name_lth)); /* forms name string */ 2 53 2 54 2 55 dcl ( 2 56 head_max_lth init (64), /* allocation size for heading */ 2 57 label_max_lth init (136), /* allocation size for label fields */ 2 58 path_max_lth init (168), /* allocation size for pathname fields */ 2 59 forms_max_lth init (64) /* allocation size for forms name string */ 2 60 ) fixed bin int static options (constant); 2 61 2 62 dcl ( 2 63 dprint_msg_version_3 init (3), 2 64 dprint_msg_version_4 init (4), 2 65 dprint_msg_version_5 init (5) /* current version */ 2 66 ) fixed bin int static options (constant); 2 67 2 68 /* END INCLUDE FILE ... dprint_msg.incl.pl1 */ 728 729 /* BEGIN INCLUDE FILE...driver_status.incl.pl1 */ 3 2 3 3 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 3 7* Ancient History 3 8* Coded by Robert S. Coren August 1973 3 9* Modified by J. Whitmore to structure data for the Access Isolation Mechanism 3 10* Modified by J. C. Whitmore, 5/78, for IO Daemon extensions 3 11* Modified by J. C. Whitmore, 8/79, to add the generic_type variable 3 12* 2) change(88-08-19,Brunelle), approve(88-08-19,MCR7911), 3 13* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 3 14* Upgraded for version 5 iod tables. Changed the minor_args ftom string to 3 15* text_offset. Changed acct_ptr to acct_entry. Added have_accounting bit 3 16* to denote accounting ^= nothing. 3 17* END HISTORY COMMENTS */ 3 18 3 19 3 20 /* status data for a logical device driver */ 3 21 3 22 /* format: style4 */ 3 23 3 24 dcl driver_status_ptr ptr; 3 25 dcl 1 driver_status aligned based (driver_status_ptr), 3 26 2 req_type_label char (32), /* string to describe the request type */ 3 27 2 dev_name_label char (32), /* string to describe the device */ 3 28 2 device_id char (32), /* minor device name used by this logical driver */ 3 29 2 device_class_id char (32), /* device class name used by this logical driver */ 3 30 2 coord_chan fixed bin (71), /* ipc event channel for signals to coord. */ 3 31 2 driver_chan fixed bin (71), /* ipc event channel for signals from coord. */ 3 32 2 last_wake_time fixed bin (71), /* time last wakeup sent to coord */ 3 33 2 request_pending bit (36), /* locking word for communication with coord */ 3 34 /* 0 = ready for a request */ 3 35 /* driver pid = don't bug me */ 3 36 /* coord pid = got a request */ 3 37 2 status_flags, 3 38 3 attached bit (1) unal, /* minor device is attached for i/o */ 3 39 3 busy bit (1) unal, /* driver doing request..tell coord when done */ 3 40 3 ready bit (1) unal, /* driver is ready to handle requests */ 3 41 3 acknowledge bit (1) unal, /* coordinator must reply to all wakeups */ 3 42 3 have_accounting bit (1) unal, /* ON if accounting ^= nothing */ 3 43 3 pad bit (31) unal, 3 44 2 list_index fixed bin, /* index of this driver in the driver ptr list */ 3 45 2 dev_index fixed bin, /* index in iod_device_tab of this minor device */ 3 46 2 maj_index fixed bin, /* index in iod_device_tab of the corresponding major device */ 3 47 2 dev_class_index fixed bin, /* index of device_class entry */ 3 48 2 minor_args unaligned like text_offset, /* descriptive string for this minor device */ 3 49 2 min_banner bit (72) aligned, /* min banner access class for marking output */ 3 50 2 acct_entry entry (char (*), char (*), ptr, fixed bin (35)) variable, /* entry variable to accounting procedure */ 3 51 /* for this logical driver */ 3 52 2 rqti_ptr ptr, /* pointer to the request type info seg */ 3 53 2 dev_out_iocbp ptr, /* iocb pointer for dev_out_stream */ 3 54 2 dev_in_iocbp ptr, /* iocb pointer for dev_in_stream */ 3 55 2 dev_out_stream char (32), /* output stream for minor device */ 3 56 2 dev_in_stream char (32), /* input stream for minor device */ 3 57 2 elem_size fixed bin, /* element size for the stream */ 3 58 2 message_type fixed bin, /* expected format of user request */ 3 59 2 form_wait_time fixed bin (71), /* average time needed to write ctl term msg */ 3 60 2 forms_validation_ptr ptr, /* forms validation data */ 3 61 2 dev_ptr1 ptr, /* another one */ 3 62 2 dev_fb1 fixed bin, /* a spare fixed bin variable for the driver */ 3 63 2 dev_fb2 fixed bin, /* and another */ 3 64 2 dev_fb3 fixed bin, /* and another */ 3 65 2 dev_fb4 fixed bin, /* and the last spare fixed bin */ 3 66 2 dev_fb71 fixed bin (71), /* a spare fixed bin 71 variable */ 3 67 2 dev_ctl_ptr ptr, /* pointer to control structure for this device */ 3 68 2 bit_rate_est fixed bin (35), /* output rate estimate - bits per second */ 3 69 2 defer_time_limit fixed bin (35), /* max time allowed for a request - in seconds (0 = no limit) */ 3 70 2 generic_type char (32), /* generic type of this minor device */ 3 71 2 status_pad (2) fixed bin (35), /* save some room for later */ 3 72 2 descriptor like request_descriptor, /* copy of request descriptor */ 3 73 2 desc_pad (13) fixed bin, 3 74 2 message fixed bin; /* place-holder for copy of request message */ 3 75 3 76 3 77 /* END INCLUDE FILE...driver_status.incl.pl1 */ 729 730 /* BEGIN INCLUDE FILE ... iod_constants.incl.pl1 */ 4 2 4 3 4 4 /****^ HISTORY COMMENTS: 4 5* 1) change(88-08-31,Brunelle), approve(88-08-31,MCR7911), 4 6* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 4 7* Created. 4 8* END HISTORY COMMENTS */ 4 9 4 10 /* This file contains constants used by the I/O Daemon software in various tables */ 4 11 4 12 /* format: style4 */ 4 13 4 14 /* literals for use with idte.attach_type & iodd_static.attach_type */ 4 15 dcl (ATTACH_TYPE_IOM init (1), 4 16 ATTACH_TYPE_TTY init (2), 4 17 ATTACH_TYPE_DIAL init (3), 4 18 ATTACH_TYPE_VARIABLE_LINE init (4)) fixed bin int static options (constant); 4 19 4 20 /* literals for use with idte.ctl_attach_type & iodd_static.ctl_attach_type */ 4 21 dcl (CTL_ATTACH_TYPE_TTY init (1), 4 22 CTL_ATTACH_TYPE_DIAL init (2), 4 23 CTL_ATTACH_TYPE_MC init (3)) fixed bin int static options (constant); 4 24 4 25 /* literals for use with idte.paper_type & iodd_static.paper_type */ 4 26 dcl (PAPER_TYPE_DEFAULT init (-1), 4 27 PAPER_TYPE_SINGLE init (1), 4 28 PAPER_TYPE_CONTINUOUS init (2)) fixed bin int static options (constant); 4 29 4 30 /* END INCLUDE FILE ... iod_constants.incl.pl1 */ 730 731 /* BEGIN INCLUDE FILE ... iod_tables_hdr.incl.pl1 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(88-01-27,Brunelle), approve(), audit(), install(): 5 7* Ancient History 5 8* Created by J. Stern, 1/20/75 5 9* Modified by J. C. Whitmore April 1978 for enhancements 5 10* Modified by J. C. Whitmore, 10/78, for version 3 iod_tables format. 5 11* Modified by E. N. Kittlitz, 6/81, for version 4 iod_tables with expanded 5 12* q_group_tab 5 13* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 5 14* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 5 15* Change version number to reflect changes in q_group_tab and 5 16* iod_device_tab for laser printer support. Added font tables. 5 17* END HISTORY COMMENTS */ 5 18 5 19 5 20 /* format: style4 */ 5 21 5 22 dcl ithp ptr; /* ptr to io daemon dables and it's header */ 5 23 dcl 1 iod_tables_hdr aligned based (ithp), /* header of data segment compiled by iod_table_compiler */ 5 24 2 version char (8), /* version of this structure */ 5 25 2 date_time_compiled fixed bin (71), 5 26 2 grace_time fixed bin (71), /* grace time before deleting finished segment */ 5 27 2 max_queues fixed bin (17), /* default number of priority queues per queue group */ 5 28 2 line_tab_offset fixed bin (18), /* offset of line id table */ 5 29 2 device_tab_offset fixed bin (18), /* offset of device table */ 5 30 2 minor_device_tab_offset fixed bin (18), /* offset of minor device table */ 5 31 2 dev_class_tab_offset fixed bin (18), /* offset of device class table */ 5 32 2 q_group_tab_offset fixed bin (18), /* offset of queue group table */ 5 33 2 forms_info_tab_offset fixed bin (18), /* offset of forms info tables */ 5 34 2 text_strings_offset fixed bin (18), 5 35 2 start_of_tables fixed bin; /* beginning of above tables, MUST start on even word boundry */ 5 36 5 37 /* Defines common text block to store virtually all text in the I/O daemon tables */ 5 38 dcl text_strings_ptr ptr; 5 39 dcl 1 text_strings aligned based (text_strings_ptr), 5 40 2 length fixed bin, 5 41 2 chars char (1 refer (text_strings.length)) unaligned; 5 42 5 43 /* this defines text offsets used to locate i/o daemon tables strings in 5 44* the text_strings structure */ 5 45 dcl 1 text_offset based, 5 46 2 first_char fixed bin (18) unsigned unaligned, 5 47 2 total_chars fixed bin (18) unsigned unaligned; 5 48 5 49 dcl IODT_VERSION_5 char (8) int static options (constant) init ("IODT0005"); /* current version number */ 5 50 5 51 5 52 /* END INCLUDE FILE ... iod_tables_hdr.incl.pl1 */ 731 732 /* BEGIN INCLUDE FILE...iodd_static.incl.pl1 */ 6 2 6 3 6 4 /****^ HISTORY COMMENTS: 6 5* 1) change(85-02-14,Homan), approve(87-04-06,MCR7656), 6 6* audit(87-06-13,Beattie), install(87-08-06,MR12.1-1068): 6 7* Add support for logout_on_hangup option. 6 8* 2) change(88-02-18,Brunelle), approve(88-08-31,MCR7911), 6 9* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 6 10* Add head/tail_sheet entry variables and paper_type variable. 6 11* END HISTORY COMMENTS */ 6 12 6 13 /* format: style4 */ 6 14 6 15 dcl stat_p int static ptr; 6 16 6 17 dcl 1 iodd_static based (stat_p) aligned, 6 18 6 19 /* The first part is set only once for a device driver */ 6 20 6 21 2 ithp ptr, /* pointer to iod tables header */ 6 22 2 ltp ptr, /* pointer to line table */ 6 23 2 idtp ptr, /* pointer to device tab */ 6 24 2 mdtp ptr, /* pointer to minor device table */ 6 25 2 qgtp ptr, /* pointer to q_group table */ 6 26 2 dev_class_ptr ptr, /* pointer to device class table */ 6 27 2 text_strings_ptr ptr, /* pointer to iod tables text strings */ 6 28 2 driver_list_ptr ptr, /* pointer to list of driver status seg pointers */ 6 29 2 chan_list_ptr ptr, /* pointer to list of event channels for blocking */ 6 30 2 sys_dir_ptr ptr, /* ptr to 168 char string defining sys_dir */ 6 31 2 coord_proc_id bit (36), /* process id of coordinator for wakeups */ 6 32 2 driver_proc_id bit (36), /* process id of driver for locking */ 6 33 2 re_init_label label, /* where to go after "re_init" or "slave_logout" */ 6 34 2 no_coord_label label, /* where to go for a no_coord condition */ 6 35 2 log_stream char (32), /* stream name used for log output */ 6 36 2 master_input char (32), /* master console input stream for commands */ 6 37 2 master_output char (32), /* master console output stream for messages */ 6 38 2 master_out ptr, /* master output iocbp */ 6 39 2 master_in ptr, /* master input iocbp */ 6 40 2 log_iocbp ptr, /* log output iocbp */ 6 41 2 error_io ptr, /* error i/o iocbp */ 6 42 2 dev_io_stream char (32), /* stream used to attach the major device */ 6 43 2 dev_in_stream char (32), /* input stream if different from dev_io_stream */ 6 44 2 dev_out_stream char (32), /* output stream if different from dev_io_stream */ 6 45 2 device_dim char (32), /* dim which drives the major device */ 6 46 2 attach_name char (32), /* channel or dial id for attaching major device */ 6 47 2 attach_type fixed bin, /* what previous is: 1 = iom, 2 = tty, 3 = dial, 4 = variable line */ 6 48 2 dev_dial_id char (8), /* non null if device is to be dialed to driver */ 6 49 2 line_tab_idx fixed bin, /* for attach type 4, this is the entry index, else 0 */ 6 50 2 dial_ev_chan fixed bin (71), /* IPC chan for dial control */ 6 51 2 major_device char (32), /* name of the major device */ 6 52 2 major_args unaligned like text_offset, /* descriptive string for the major device */ 6 53 2 coord_cmd_chan fixed bin (71), /* IPC chan to send commands to coord through coord_comm.ms */ 6 54 2 cmd_ack_chan fixed bin (71), /* IPC chan for coord to return command status code */ 6 55 2 timer_chan fixed bin (71), /* IPC chan for unblocking if nothing happens */ 6 56 2 io_daemon_version char (8), /* current version number of the io daemon driver */ 6 57 2 extra_static (8) fixed bin (35), /* unused space - non_dynamic */ 6 58 2 dummy_ptr ptr, /* a dummy pointer for the driver module */ 6 59 6 60 /* driver module entrypoints are defined by the following entry variables */ 6 61 6 62 2 driver_init entry variable options (variable), 6 63 2 driver_request entry variable options (variable), 6 64 2 driver_command entry variable options (variable), 6 65 2 driver_default_handler entry variable options (variable), 6 66 6 67 /* entrypoints for head/tail_sheet_ entries */ 6 68 2 print_head_sheet entry (ptr, ptr, ptr, fixed bin (35)) variable, 6 69 2 print_head_separator entry (ptr, ptr, char (*), fixed bin (35)) variable, 6 70 2 print_tail_sheet entry (ptr, ptr, ptr, fixed bin (35)) variable, 6 71 6 72 2 paper_type fixed bin, /* type of paper being used */ 6 73 /* 1 = single sheet */ 6 74 /* 2 = continuous forms */ 6 75 6 76 /* The remainder of the data may be dynamic during the device driver's existence */ 6 77 6 78 2 extra_dynamic (14) fixed bin (35), /* unused space - dynamic */ 6 79 2 auto_logout_interval fixed bin, /* minutes to wait for inactivity logout */ 6 80 2 requests_til_cmd fixed bin, /* number of requests to go before returning to cmd level */ 6 81 2 assigned_devices fixed bin, /* number of minor devices assigned to major device */ 6 82 2 current_devices fixed bin, /* number of devices currently active in process */ 6 83 2 output_device char (32), /* name of minor device currently in use */ 6 84 2 wakeup_time fixed bin (71), /* time interval between timer wakeups */ 6 85 2 auto_start_delay fixed bin (71), /* time to wait before performing an auto-start after quit */ 6 86 2 driver_ptr ptr, /* pointer to driver status seg currently in use */ 6 87 2 segptr ptr, /* ptr to current user segment being processed */ 6 88 2 flags, /* control flags */ 6 89 3 initialized bit (1) unal, /* all driver data bases are initialized */ 6 90 3 test_entry bit (1) unal, /* driver test entry was called */ 6 91 3 request_in_progress bit (1) unal, /* driver executing a request */ 6 92 3 recursion_flag bit (1) unal, /* recursive unclaimed signal */ 6 93 3 no_coord_flag bit (1) unal, /* process is ready to accept a no_coord signal */ 6 94 3 logout_pending bit (1) unal, /* logout after all pending requests are done */ 6 95 3 master_hold bit (1) unal, /* master_hold at command level */ 6 96 3 slave_hold bit (1) unal, /* slave hold at command level */ 6 97 3 step bit (1) unal, /* run in step mode */ 6 98 3 quit_during_request bit (1) unal, /* a quit occured, don't wait for wakeup */ 6 99 3 runout_requests bit (1) unal, /* hold after all pending requests are done */ 6 100 3 re_init_in_progress bit (1) unal, /* driver processing a re_init signal */ 6 101 3 quit_signaled bit (1) unal, /* set to "1"b by quit handler for anyone who is curious */ 6 102 3 auto_logout_pending bit (1) unal, /* inactivity limit exceeded, logout after next wakeup */ 6 103 3 logout_on_hangup bit (1) unal, /* logout instead of reinit if set */ 6 104 3 pad bit (21) unal, /* unused space */ 6 105 2 slave, /* slave control device data (ctl term or remote reader) */ 6 106 3 slave_input char (32), /* slave input stream name */ 6 107 3 slave_output char (32), /* slave output stream name */ 6 108 3 slave_pad fixed bin, /* allocation breakage */ 6 109 3 slave_in ptr, /* slave input iocbp */ 6 110 3 slave_out ptr, /* slave output iocbp */ 6 111 3 slave_ev_chan fixed bin (71), /* event channel the slave device blocks on */ 6 112 3 active bit (1) unal, /* on if there is a slave */ 6 113 3 accept_input bit (1) unal, /* on if commands may come from the slave */ 6 114 3 allow_quits bit (1) unal, /* on if we allow slave to send quits */ 6 115 3 print_errors bit (1) unal, /* on if errors will be sent to the slave */ 6 116 3 log_msg bit (1) unal, /* on if log messages are to be sent to the slave */ 6 117 3 priv1 bit (1) unal, /* driver_module defined slave privileges */ 6 118 3 priv2 bit (1) unal, 6 119 3 priv3 bit (1) unal, 6 120 3 echo_cmd bit (1) unal, /* on if each slave cmd should be written back */ 6 121 3 slave_bit_pad bit (27) unal, /* unused space */ 6 122 2 ctl_term, /* control terminal data */ 6 123 3 ctl_attach_name char (32), /* dial id, tty chan, or mrd_ device */ 6 124 3 ctl_attach_type fixed bin, /* attach name meaning: 1=line, 2=dial, 3=mrd_source */ 6 125 3 ctl_pad fixed bin, /* allocation breakage */ 6 126 3 ctl_dial_chan fixed bin (71), /* ipc event channel for dial comm */ 6 127 3 ctl_input char (32), /* ctl input stream name */ 6 128 3 ctl_output char (32), /* ctl output stream name */ 6 129 3 ctl_io char (32), /* ctl i/o stream name */ 6 130 3 ctl_dev_dim char (32), /* ctl_io attached with this dim */ 6 131 3 ctl_ev_chan fixed bin (71), /* IPC event chan ctl term blocks on */ 6 132 3 ctl_device char (32), /* ctl terminal device name */ 6 133 3 form_type char (16), /* format type if printing forms */ 6 134 3 attached bit (1) unal, /* ctl term attached to process */ 6 135 3 forms bit (1) unal, /* on if printing forms */ 6 136 3 pad bit (34) unal, 6 137 2 admin_ec_name char (32), /* name of the ec to use with the "x" command */ 6 138 2 expansion_space (100) fixed bin; /* reserved space...use at your own risk */ 6 139 6 140 /* END INCLUDE FILE ... iodd_static.incl.pl1 */ 732 733 /* BEGIN INCLUDE FILE . . . mseg_message_info.incl.pl1 BIM 1984-10-10 */ 7 2 /* format: style3,idind30 */ 7 3 7 4 /* structure returned when message is read from a message segment */ 7 5 7 6 7 7 dcl mseg_message_info_ptr pointer; 7 8 7 9 dcl 1 mseg_message_info based (mseg_message_info_ptr) aligned, 7 10 2 version char (8) aligned, 7 11 2 message_code fixed bin, 7 12 2 control_flags unaligned, 7 13 3 own bit (1), 7 14 3 delete bit (1), 7 15 3 pad bit (34), 7 16 2 ms_ptr ptr, /* pointer to message */ 7 17 2 ms_len fixed bin (24), /* length of message in bits */ 7 18 2 ms_id bit (72), /* unique ID of message */ 7 19 /* input in some cases */ 7 20 2 ms_access_class bit (72), /* message access class */ 7 21 2 sender_id char (32) unaligned,/* process-group ID of sender */ 7 22 2 sender_process_id bit (36) aligned, /* if nonzero, process that sent */ 7 23 2 sender_level fixed bin, /* validation level of sender */ 7 24 2 sender_authorization bit (72), /* access authorization of message sender */ 7 25 2 sender_max_authorization bit (72), /* max authorization of sending process */ 7 26 2 sender_audit bit (36) aligned; /* audit flags */ 7 27 7 28 declare MSEG_MESSAGE_INFO_V1 char (8) aligned init ("msegmi01") int static options (constant); 7 29 7 30 declare ( 7 31 MSEG_READ_FIRST init (1), 7 32 MSEG_READ_LAST init (2), 7 33 MSEG_READ_SPECIFIED init (3), 7 34 MSEG_READ_BEFORE_SPECIFIED init (4), 7 35 MSEG_READ_AFTER_SPECIFIED init (5)) 7 36 fixed bin int static options (constant); 7 37 7 38 declare (MSEG_READ_OWN init ("1"b), 7 39 MSEG_READ_DELETE init ("01"b) 7 40 ) bit (36) aligned internal static options (constant); 7 41 7 42 /* END INCLUDE FILE . . . mseg_message_info.incl.pl1 */ 733 734 /* BEGIN INCLUDE FILE ... prt_ctl.incl.pl1 */ 8 2 8 3 8 4 /****^ HISTORY COMMENTS: 8 5* 1) change(88-02-23,Brunelle), approve(88-08-31,MCR7911), 8 6* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 8 7* Ancient History 8 8* Modified: 11 December 1981 by G. Palter to add force_ctl_char 8 9* Modified: November 1983 by C. Marker to add force_nsep 8 10* 2) change(88-02-23,Brunelle), approve(88-08-31,MCR7911), 8 11* audit(88-09-29,Wallman), install(88-10-28,MR12.2-1199): 8 12* Literals for banner type and banner bars type added. 8 13* END HISTORY COMMENTS */ 8 14 8 15 8 16 /* format: style4 */ 8 17 8 18 /* This structure is used by the IO Daemon to define the printer control functions */ 8 19 8 20 dcl prt_ctl_ptr ptr; 8 21 8 22 dcl 1 prt_ctl aligned based (prt_ctl_ptr), /* printer control values */ 8 23 2 flags, 8 24 3 force_nep bit (1) unal, /* set noskip for the user */ 8 25 3 force_esc bit (1) unal, /* set escape processing for the user */ 8 26 3 no_auto_print bit (1) unal, /* ask for a cmd before each request is printed */ 8 27 3 meter bit (1) unal, /* meter printer functions */ 8 28 3 force_ctl_char bit (1) unal, /* set ctl_char mode for the user */ 8 29 3 force_nsep bit (1) unal, /* supress printing of inner head and tail sheets for multiple copies */ 8 30 3 ctl_pad bit (30) unal, /* default for future values */ 8 31 2 banner_type fixed bin, /* 0 = no banners */ 8 32 /* 1 = normal head/tail sheets */ 8 33 /* 2 = brief head/tail sheets */ 8 34 /* 3 to 10 RESERVED */ 8 35 2 banner_bars fixed bin, /* 0 = normal overprinted separator bars */ 8 36 /* 1 = single print line bars (no overprint) */ 8 37 /* 2 = suppress the separator bars (no separator) */ 8 38 2 banner_indent fixed bin, /* how far to indent the banner (future) */ 8 39 2 banner_line fixed bin, /* what line to start the banner on (future) */ 8 40 8 41 2 paper_info, 8 42 3 phys_page_length fixed bin, 8 43 3 phys_line_length fixed bin, 8 44 3 lines_per_inch fixed bin, 8 45 2 channel_stops (256) bit (16) unal, /* logical stops for slew to channel */ 8 46 2 prt_ctl_pad (10) fixed bin; /* for future additions */ 8 47 8 48 /* constants for prt_ctl.banner_type */ 8 49 dcl (NO_BANNERS init (0), 8 50 NORMAL_BANNERS init (1), 8 51 BRIEF_BANNERS init (2)) fixed bin int static options (constant); 8 52 8 53 /* constants for prt_ctl.banner_bars */ 8 54 dcl (NORMAL_BANNER_BARS init (0), 8 55 SINGLE_BANNER_BARS init (1), 8 56 NO_BANNER_BARS init (2)) fixed bin int static options (constant); 8 57 8 58 /* END INCLUDE FILE ... prt_ctl.incl.pl1 */ 734 735 /* Begin include file ...... prt_order_info.incl.pl1 */ 9 2 /* Created 3/15/77 by Noel I. Morris */ 9 3 9 4 dcl orderp ptr; /* pointer to order info structure */ 9 5 9 6 dcl 1 counts based (orderp) aligned, /* structure used in "get_count" order */ 9 7 2 line fixed bin, /* line number */ 9 8 2 page_length fixed bin, /* length of page */ 9 9 2 lmarg fixed bin, /* left margin indentation */ 9 10 2 rmarg fixed bin, /* line length */ 9 11 2 line_count fixed bin, /* count of lines printed */ 9 12 2 page_count fixed bin; /* count of pages printed */ 9 13 9 14 dcl 1 position_data based (orderp) aligned, /* structure for "get_position" & "set_position" orders */ 9 15 2 line_number fixed bin (35), /* current line on the page */ 9 16 2 page_number fixed bin (35), /* current page number */ 9 17 2 total_lines fixed bin (35), /* lines printed since reset */ 9 18 2 total_chars fixed bin (35), /* chars processed since reset */ 9 19 2 pad(4) fixed bin; /* for the future */ 9 20 9 21 dcl 1 page_labels based (orderp) aligned, /* structure used in "page_labels" order */ 9 22 2 top_label char (136), /* label for top of page */ 9 23 2 bottom_label char (136); /* label for bottom of page */ 9 24 9 25 dcl channel_stops (256) bit (16) based (orderp) unal; /* structure used in "channel_stops" order */ 9 26 9 27 dcl 1 paper_info based (orderp) aligned, /* structure used in "paper_info" order */ 9 28 2 phys_page_length fixed bin, /* physical page length */ 9 29 2 phys_line_length fixed bin, /* physical line length */ 9 30 2 lines_per_inch fixed bin; /* lines per inch spacing */ 9 31 9 32 dcl ret_error_count fixed bin based (orderp); /* variable used for "get_error_count" order */ 9 33 9 34 /* End of include file ...... prt_order_info.incl.pl1 */ 735 736 /* BEGIN INCLUDE FILE ... prt_rqti.incl.pl1 */ 10 2 /* Modified: 30 November 1981 by G. Palter to add force_ctl_char mode */ 10 3 /* Modified: November 1983 by C. Marker to add force_nsep */ 10 4 11 1 /* BEGIN INCLUDE FILE ..... rqti_header.incl.pl1 ..... */ 11 2 11 3 11 4 dcl 1 rqti_header aligned based, /* header for a request type info seg */ 11 5 2 time_created fixed bin (71), /* clock time when table was translated */ 11 6 2 header_version fixed bin, /* version number of the header alone */ 11 7 2 type_code fixed bin, /* 0 = header only */ 11 8 /* 1 = printer generic type */ 11 9 /* 2 = punch generic type */ 11 10 /* 3 = tape generic type */ 11 11 2 rqti_switches, 11 12 (3 meter bit (1), /* meter this request type */ 11 13 3 auto_go bit (1), /* driver should not request a go command */ 11 14 3 rqti_sw_pad bit (34)) unal, /* room to grow */ 11 15 2 driver_wait_time fixed bin, /* seconds to wait, before asking coord for service */ 11 16 2 header_pad (10) fixed bin; /* leave 10 words for future generations */ 11 17 11 18 dcl rqti_header_version_1 fixed bin int static options (constant) init (1); 11 19 11 20 11 21 /* END INCLUDE FILE ..... rqti_header.incl.pl1 .... */ 10 5 10 6 10 7 dcl prt_rqtip ptr; 10 8 10 9 dcl 1 prt_rqti aligned based (prt_rqtip), 10 10 10 11 2 header like rqti_header, /* use a common header */ 10 12 10 13 2 version fixed bin, /* version of the prt_rqti portion */ 10 14 2 opr_msg char (256), /* operator message */ 10 15 2 banner_type fixed bin, /* 0 = no banners */ 10 16 /* 1 = normal head/tail sheets */ 10 17 /* 2 = RESERVED (brief banners) */ 10 18 2 banner_bars fixed bin, /* how separator bars should be printed */ 10 19 2 banner_indent fixed bin, /* how far to indent the banner */ 10 20 2 banner_line fixed bin, /* what line to start the banner on */ 10 21 2 prt_flags, 10 22 (3 no_auto_print bit (1), /* TRUE if we want commands for each request */ 10 23 3 force_nep bit (1), /* TRUE if we set noskip regardless */ 10 24 3 force_esc bit (1), /* TRUE if we assume escapes in text */ 10 25 3 force_ctl_char bit (1), /* TRUE if we pass control characters regardless */ 10 26 3 force_nsep bit (1), /* TRUE if inner head and tail sheets of multiple copies are to be supressed */ 10 27 3 prt_ctl_pad bit (31)) unal, 10 28 10 29 2 default_bit_modes, /* rqt defaults for dprint */ 10 30 (3 non_edited bit (1), /* TRUE if not removing control chars */ 10 31 3 esc bit (1), /* TRUE if slew escapes are to be processed */ 10 32 3 single bit (1), /* TRUE if VT and FF are to be ignored */ 10 33 3 truncate bit (1), /* TRUE if truncating lines at line length */ 10 34 3 center_top_label bit (1), /* TRUE if centering top label */ 10 35 3 center_bottom_label bit (1), /* TRUE if centering bottom label */ 10 36 3 no_endpage bit (1), /* TRUE if printing over perforations (one big page) */ 10 37 3 mode_bit_pad bit (29)) unal, /* room to grow */ 10 38 2 default_position_modes, /* these are the length modes */ 10 39 3 indent fixed bin, /* columns to indent from the left */ 10 40 3 line_length fixed bin, /* print positions starting from col 1 */ 10 41 3 page_length fixed bin, /* number of lines before auto skip to top */ 10 42 3 mode_pad (10) fixed bin, /* more room to grow */ 10 43 10 44 2 rqt_pad (28) fixed bin, /* pad to 128 words */ 10 45 10 46 2 lfi, 10 47 3 paper_info, /* physical paper info */ 10 48 4 paper_length fixed bin, /* max lines to perf */ 10 49 4 paper_width fixed bin, /* max print positions */ 10 50 4 lines_per_inch fixed bin, /* normally 6 or 8 */ 10 51 3 lfi_pad (5) fixed bin, /* pad to even */ 10 52 3 channel_stops (256) bit (16) unal; /* channel stops for slews */ 10 53 10 54 dcl prt_rqti_version_1 fixed bin int static options (constant) init (1); 10 55 10 56 10 57 /* END INCLUDE FILE .... prt_rqti.incl.pl1 */ 736 737 /* BEGIN INCLUDE FILE ... queue_msg_hdr.incl.pl1 */ 12 2 12 3 /* This is the message header used for standard system queue messages, namely: 12 4* IO daemon requests, absentee requests, retrieval requests. 12 5**/ 12 6 12 7 /* Written by Jerry Whitmore, Spring 1978. 12 8* Modified by T. Casey, November 1978, to add values for state. 12 9* Modified by R. Kovalcik, June 1982, defer_until_process_terminataion 12 10**/ 12 11 12 12 dcl 1 queue_msg_hdr based aligned, /* standard header for all system queue messages */ 12 13 2 msg_time fixed bin (71), /* date and time of request */ 12 14 2 hdr_version fixed bin, /* version of this declaration */ 12 15 2 dirname char (168), /* directory name */ 12 16 2 ename char (32), /* entry name of file requested */ 12 17 2 message_type fixed bin, /* message format descriptor */ 12 18 /* 0 = absentee request */ 12 19 /* 1 = print request */ 12 20 /* 2 = punch request */ 12 21 /* 3 = tape request */ 12 22 /* 4 = retrieval request */ 12 23 2 bit_flags, 12 24 3 delete_sw bit (1) unal, /* delete file when done */ 12 25 3 notify bit (1) unal, /* user wants to be notified */ 12 26 3 defer_until_process_termination bit (1) unal, /* don't process request until process terminates */ 12 27 3 padding bit (33) unal, 12 28 2 state fixed bin, /* stage of processing after being queued: 12 29* 0 = initial unprocessed state, 1 = deferred, 12 30* 2 = in state transition, 3 = eligible, 4 = running, 12 31* 5 = bumped, 6 = deferred_until_process_termination */ 12 32 2 orig_queue fixed bin, /* queue the request was submitted to */ 12 33 2 std_length fixed bin, /* length of std msg for this type */ 12 34 2 dupt_lock bit (36) aligned, /* lock word for defer until process termination */ 12 35 2 hdr_pad (3) fixed bin; 12 36 12 37 dcl queue_msg_hdr_version_1 fixed bin int static options (constant) init (1); /* current version of the header */ 12 38 12 39 /* Values for queue_msg_hdr.state */ 12 40 12 41 dcl STATE_UNPROCESSED fixed bin int static options (constant) init (0); 12 42 dcl STATE_DEFERRED fixed bin int static options (constant) init (1); 12 43 dcl STATE_TRANSITION fixed bin int static options (constant) init (2); 12 44 dcl STATE_ELIGIBLE fixed bin int static options (constant) init (3); 12 45 dcl STATE_RUNNING fixed bin int static options (constant) init (4); 12 46 dcl STATE_BUMPED fixed bin int static options (constant) init (5); 12 47 dcl STATE_DUPT fixed bin int static options (constant) init (6); 12 48 12 49 /* END INCLUDE FILE ... queue_msg_hdr.incl.pl1 */ 737 738 /* BEGIN INCLUDE FILE...request_descriptor.incl.pl1 */ 13 2 13 3 /* Descriptor associated with an I/O daemon request */ 13 4 /* Coded August 1973 by Robert S. Coren */ 13 5 /* Modified by J. C. Whitmore, 5/78, to extend driver_data to 7 words */ 13 6 /* Modified by C. Marker, 2/23/85, changed to use mseg_message_info */ 13 7 13 8 dcl 1 request_descriptor based aligned, 13 9 2 mseg_message_info_copy like mseg_message_info, 13 10 2 seq_id fixed bin(35), /* sequential number assigned by coordinator */ 13 11 2 q fixed bin, /* priority queue in which request was submitted */ 13 12 2 contd_seq_id fixed bin(35), /* if nonzero, this is previous seq_id of continued request */ 13 13 2 prev_seq_id fixed bin(35), /* if nonzero, this is previous seq_id of restarted request */ 13 14 2 dev_class_index fixed bin, /* index of device_class entry */ 13 15 2 spare_fb fixed bin (17) unal, /* save half a word for later */ 13 16 2 charge_q fixed bin (17) unal, /* priority to use for charging */ 13 17 2 time_done fixed bin(71), /* clock time when request was completed */ 13 18 2 prev_done fixed bin(18), /* descriptor threaded ahead of this one in saved list */ 13 19 2 next_done fixed bin(18), /* " " behind " " " */ 13 20 2 driver_data bit(252), /* driver maintained data */ 13 21 2 flags, 13 22 (3 continued, /* unfinished by one driver and given to another */ 13 23 3 finished, 13 24 3 restarted, 13 25 3 cancelled, 13 26 3 dont_delete, 13 27 3 saved, /* not to be freed */ 13 28 3 keep_in_queue, /* keep request in queue */ 13 29 3 series_restart, /* this request is part of restarted series */ 13 30 3 priority_request) bit (1) unal, /* this request was given extra priority */ 13 31 3 pad bit(27) unal, 13 32 2 next_pending fixed bin(18); /* thread to next pending descriptor */ 13 33 13 34 /* END INCLUDE FILE...request_descriptor.incl.pl1 */ 738 739 740 end printer_driver_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/03/89 0953.5 printer_driver_.pl1 >spec>install>1083>printer_driver_.pl1 727 1 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.incl.pl1 728 2 11/09/88 0759.7 dprint_msg.incl.pl1 >ldd>include>dprint_msg.incl.pl1 729 3 11/09/88 0759.7 driver_status.incl.pl1 >ldd>include>driver_status.incl.pl1 730 4 11/09/88 0759.7 iod_constants.incl.pl1 >ldd>include>iod_constants.incl.pl1 731 5 11/09/88 0759.7 iod_tables_hdr.incl.pl1 >ldd>include>iod_tables_hdr.incl.pl1 732 6 11/09/88 0759.7 iodd_static.incl.pl1 >ldd>include>iodd_static.incl.pl1 733 7 01/10/85 2002.8 mseg_message_info.incl.pl1 >ldd>include>mseg_message_info.incl.pl1 734 8 11/09/88 0759.7 prt_ctl.incl.pl1 >ldd>include>prt_ctl.incl.pl1 735 9 09/28/78 1359.8 prt_order_info.incl.pl1 >ldd>include>prt_order_info.incl.pl1 736 10 07/27/84 2039.1 prt_rqti.incl.pl1 >ldd>include>prt_rqti.incl.pl1 10-5 11 02/23/78 1629.0 rqti_header.incl.pl1 >ldd>include>rqti_header.incl.pl1 737 12 08/31/82 1636.3 queue_msg_hdr.incl.pl1 >ldd>include>queue_msg_hdr.incl.pl1 738 13 03/15/85 0953.1 request_descriptor.incl.pl1 >ldd>include>request_descriptor.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_IOM constant fixed bin(17,0) initial dcl 4-15 ref 155 BRIEF_BANNERS constant fixed bin(17,0) initial dcl 8-49 ref 634 642 NORMAL_BANNERS constant fixed bin(17,0) initial dcl 8-49 ref 278 633 640 NORMAL_BANNER_BARS constant fixed bin(17,0) initial dcl 8-54 ref 279 485 492 NO_BANNERS constant fixed bin(17,0) initial dcl 8-49 ref 632 641 NO_BANNER_BARS constant fixed bin(17,0) initial dcl 8-54 ref 487 494 SINGLE_BANNER_BARS constant fixed bin(17,0) initial dcl 8-54 ref 486 493 add_char_offset_ 000240 constant entry external dcl 86 ref 173 addr builtin function dcl 127 ref 149 173 173 184 185 200 201 290 290 342 343 578 578 579 582 707 707 aligned 4 000302 automatic bit(1) level 2 packed packed unaligned dcl 75 set ref 586 arg 23 based varying char(64) array level 2 dcl 417 set ref 471 478 483 492 493 494 496* 515 520 536 536 537 537 538 538 540* 598 603 610 612 614 619* 626 631 640 641 642 644* 652 arg_list based structure level 1 dcl 417 arg_list_p parameter pointer dcl 412 ref 405 443 458 458 465 471 471 477 477 478 478 483 483 492 493 494 496 504 514 514 515 515 520 520 526 535 536 536 537 537 538 538 540 575 575 597 597 598 598 603 603 609 610 612 614 619 625 625 626 626 631 631 640 641 642 644 651 651 652 652 arg_p parameter pointer dcl 145 ref 142 147 assigned_devices 265 based fixed bin(17,0) level 2 dcl 6-17 ref 161 306 attach_name 136 based char(32) level 2 dcl 6-17 set ref 182* 185* attach_type 146 based fixed bin(17,0) level 2 dcl 6-17 ref 155 attached 47 based bit(1) level 3 in structure "driver_status" packed packed unaligned dcl 3-25 in procedure "printer_driver_" set ref 297* attached 436 based bit(1) level 3 in structure "iodd_static" packed packed unaligned dcl 6-17 in procedure "printer_driver_" ref 309 576 auto_go 4(01) based bit(1) level 4 packed packed unaligned dcl 10-9 ref 224 banner_bars 122 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" ref 259 banner_bars 2 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 259* 279* 485 486 487 492* 493* 494* banner_indent 3 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 260* 280* banner_indent 123 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" ref 260 banner_line 124 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" ref 261 banner_line 4 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 261* 281* banner_type 121 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" ref 254 banner_type 1 based fixed bin(17,0) level 2 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 254* 278* 632 633 634 640* 641* 642* bit_rate_est 132 based fixed bin(35,0) level 2 dcl 3-25 set ref 303* both 000170 constant fixed bin(17,0) initial dcl 112 set ref 243* 319* 348* 355* 370* 382* busy 47(01) based bit(1) level 3 packed packed unaligned dcl 3-25 set ref 299* c_code parameter fixed bin(35,0) dcl 413 set ref 405 437 440* 673* 676* 680* cancelled 53(03) based bit(1) level 3 packed packed unaligned dcl 13-8 set ref 360* channel_stops 10 based bit(16) array level 2 in structure "prt_ctl" packed packed unaligned dcl 8-22 in procedure "printer_driver_" set ref 251* 272* 290 290 channel_stops 210 based bit(16) array level 3 in structure "prt_rqti" packed packed unaligned dcl 10-9 in procedure "printer_driver_" ref 251 chars 1 based char level 2 packed packed unaligned dcl 5-39 set ref 173 173 cleanup 000310 stack reference condition dcl 132 ref 190 clock_ 000242 constant entry external dcl 87 ref 317 317 code based fixed bin(35,0) level 2 in structure "st" dcl 70 in procedure "printer_driver_" set ref 184 185* 200 201* 579 582* code parameter fixed bin(35,0) dcl 702 in procedure "set_paper_info" set ref 699 705* 707* 708 708 716* 720* com_err_ 000244 constant entry external dcl 88 ref 582 command 2 based varying char(64) level 2 dcl 417 ref 443 458 458 465 477 477 504 514 514 575 575 597 597 625 625 651 651 condition 000331 automatic char(32) packed unaligned dcl 688 set ref 690* 692* condition_info based structure level 1 dcl 1-14 condition_info_ptr parameter pointer dcl 1-10 ref 685 690 condition_name 3 based varying char(32) level 2 dcl 1-14 ref 690 control 102 based structure level 2 dcl 2-20 conversion 000316 stack reference condition dcl 132 ref 431 convert builtin function dcl 127 ref 471 536 537 538 ctl 000032 internal static structure level 1 dcl 123 set ref 149 ctl_output 370 based char(32) level 3 dcl 6-17 set ref 309* 578* 586* 590* ctl_term 344 based structure level 2 dcl 6-17 current_devices 266 based fixed bin(17,0) level 2 dcl 6-17 set ref 306* date_string 000100 automatic char(24) packed unaligned dcl 56 set ref 317* 319* date_time_ 000246 constant entry external dcl 89 ref 317 defer_time_limit 133 based fixed bin(35,0) level 2 dcl 3-25 set ref 304* descriptor 146 based structure level 2 dcl 3-25 set ref 342 dev_ctl_ptr 130 based pointer level 2 dcl 3-25 set ref 149* 344 439 dev_in_stream 106 based char(32) level 2 dcl 6-17 set ref 195* dev_io_stream 76 based char(32) level 2 dcl 6-17 set ref 181* 182* 192* 324* dev_name_label 10 based char(32) level 2 dcl 3-25 set ref 319* dev_out_iocbp 66 based pointer level 2 dcl 3-25 set ref 205* 290* 394* 658* 660* 662* 664* 665* 707* dev_out_stream 72 based char(32) level 2 dcl 3-25 set ref 196* 198* 205* 506* device_dim 126 based char(32) level 2 dcl 6-17 set ref 176* 178 178* 182* device_id 20 based char(32) level 2 dcl 3-25 ref 478 515 598 626 652 dmp 000342 automatic pointer dcl 2-18 set ref 343* 346 354 355 366 366 366 370 378 378 380 382 382 do_prt_request_ 000272 constant entry external dcl 99 ref 394 do_prt_request_$error_during_request 000274 constant entry external dcl 100 ref 692 do_prt_request_$single_copy 000276 constant entry external dcl 101 ref 508 dont_delete 53(04) based bit(1) level 3 packed packed unaligned dcl 13-8 set ref 361* dprint_msg based structure level 1 dcl 2-20 dprint_msg_version_3 constant fixed bin(17,0) initial dcl 2-62 ref 366 dprint_msg_version_4 constant fixed bin(17,0) initial dcl 2-62 ref 366 378 dprint_msg_version_5 constant fixed bin(17,0) initial dcl 2-62 ref 366 driver_ptr 304 based pointer level 2 dcl 6-17 ref 148 341 438 driver_status based structure level 1 dcl 3-25 driver_status_ptr 000344 automatic pointer dcl 3-24 set ref 148* 149 169 196 198 205 205 213 215 290 296 297 298 299 300 301 302 303 304 319 341* 342 343 344 354 394 438* 439 478 506 515 598 626 652 658 660 662 664 665 707 driver_wait_time 5 based fixed bin(17,0) level 3 dcl 10-9 ref 226 ec 000106 automatic fixed bin(35,0) dcl 57 set ref 205* 206 207* 287* 288 290* 291 292* 394* 396 440* 467* 569* 590* 662* 676 elem_size 112 based fixed bin(17,0) level 2 dcl 3-25 set ref 301* ename 55 based char(32) level 3 dcl 2-20 set ref 355* 370* 382* error 000112 constant fixed bin(17,0) initial dcl 115 set ref 156* 162* 185* 201* 207* 217* 231* 238* 292* error_table_$action_not_performed 000310 external static fixed bin(35,0) dcl 138 ref 680 error_table_$fatal_error 000312 external static fixed bin(35,0) dcl 139 set ref 156* 162* 217* 231* 238* error_table_$no_operation 000306 external static fixed bin(35,0) dcl 137 ref 708 finished 53(01) based bit(1) level 3 packed packed unaligned dcl 13-8 set ref 363* first_char 164 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 6-17 ref 173 flags 53 based structure level 2 in structure "request_descriptor" dcl 13-8 in procedure "printer_driver_" flags based structure level 2 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 212* flags 310 based structure level 2 in structure "iodd_static" dcl 6-17 in procedure "printer_driver_" force_esc 0(01) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 8-22 in procedure "printer_driver_" set ref 256* 275* 604 616* force_esc 125(02) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 10-9 in procedure "printer_driver_" ref 256 force_nep 125(01) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 10-9 in procedure "printer_driver_" ref 255 force_nep based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 8-22 in procedure "printer_driver_" set ref 255* 274* 604 615* force_nsep 125(04) based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 10-9 in procedure "printer_driver_" ref 257 force_nsep 0(05) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 8-22 in procedure "printer_driver_" set ref 257* 276* 604* 617* form_info 000302 automatic structure level 1 dcl 75 set ref 578 578 form_type 432 based char(16) level 3 dcl 6-17 set ref 167 168* 315* 315 461* 590* form_wait_time 114 based fixed bin(71,0) level 2 dcl 3-25 set ref 169* forms 436(01) based bit(1) level 3 packed packed unaligned dcl 6-17 ref 577 generic_type 134 based char(32) level 2 dcl 3-25 set ref 296* hdr_version 2 based fixed bin(17,0) level 3 dcl 2-20 ref 346 header based structure level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" header based structure level 2 in structure "dprint_msg" dcl 2-20 in procedure "printer_driver_" header_version 2 based fixed bin(17,0) level 3 dcl 10-9 set ref 216 217* i 000110 automatic fixed bin(17,0) dcl 59 set ref 478* 481* 482* 483 483 492 493 494 515* 518* 519* 520 520 526 535* 535* 536 536 537 537 538 538 540* 598* 601* 602* 603 603 609* 609* 610 612 614 619* 626* 629* 630* 631 631 640 641 642 644 652* 655* 656* ignore 000107 automatic fixed bin(35,0) dcl 58 set ref 658* 660* 664* 665* initial_bit_rate constant fixed bin(17,0) initial dcl 116 ref 303 io_stat 000300 automatic bit(72) dcl 68 set ref 182* 184 185 192* 198* 200 201 309* 324* 506* 578* 579 582 586* iodd_listen_ 000250 constant entry external dcl 90 ref 322 iodd_msg_ 000252 constant entry external dcl 91 ref 156 162 185 201 207 217 231 238 243 292 319 348 355 370 382 433 444 445 446 447 449 451 452 453 454 489 496 510 521 527 540 545 550 554 558 566 592 604 619 636 644 711 720 iodd_parse_$args 000254 constant entry external dcl 92 ref 176 313 iodd_static based structure level 1 dcl 6-17 ios_$attach 000256 constant entry external dcl 93 ref 182 198 ios_$changemode 000260 constant entry external dcl 94 ref 309 506 ios_$detach 000262 constant entry external dcl 95 ref 192 324 ios_$order 000264 constant entry external dcl 96 ref 578 586 iox_$control 000266 constant entry external dcl 97 ref 290 658 660 664 665 707 iox_$find_iocb 000270 constant entry external dcl 98 ref 205 keep_in_queue 53(06) based bit(1) level 3 packed packed unaligned dcl 13-8 set ref 350* 375* 387* length based fixed bin(17,0) level 2 in structure "text_strings" dcl 5-39 in procedure "printer_driver_" ref 173 173 length builtin function dcl 127 in procedure "printer_driver_" ref 315 lfi 200 based structure level 2 dcl 10-9 line_lth 104 based fixed bin(17,0) level 2 dcl 2-20 set ref 380 382* line_nbrs 102(08) based bit(1) level 3 packed packed unaligned dcl 2-20 set ref 378* lines_per_inch 7 based fixed bin(17,0) level 3 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 249* 270* 521* 533 564* 566* 711* lines_per_inch 202 based fixed bin(17,0) level 4 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" ref 249 log 000170 constant fixed bin(17,0) initial dcl 113 set ref 348* 355* 370* 382* major_args 164 based structure level 2 in structure "iodd_static" packed packed unaligned dcl 6-17 in procedure "printer_driver_" major_args based char packed unaligned dcl 60 in procedure "printer_driver_" set ref 176* 313* major_args_length 000114 automatic fixed bin(17,0) dcl 62 set ref 174* 176 176 313 313 major_args_ptr 000112 automatic pointer dcl 61 set ref 173* 176 313 master 000114 constant fixed bin(17,0) initial dcl 110 set ref 156* 162* 185* 201* 207* 217* 231* 238* 292* master_hold 310(06) based bit(1) level 3 packed packed unaligned dcl 6-17 set ref 580* max builtin function dcl 127 ref 226 message 240 based fixed bin(17,0) level 2 dcl 3-25 set ref 343 message_type 113 based fixed bin(17,0) level 2 in structure "driver_status" dcl 3-25 in procedure "printer_driver_" set ref 302* 354 message_type 65 based fixed bin(17,0) level 3 in structure "dprint_msg" dcl 2-20 in procedure "printer_driver_" ref 354 meter 4 based bit(1) level 4 in structure "prt_rqti" packed packed unaligned dcl 10-9 in procedure "printer_driver_" ref 223 meter 0(03) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 8-22 in procedure "printer_driver_" set ref 223* 264* mod builtin function dcl 127 ref 526 mseg_message_info based structure level 1 dcl 7-9 mseg_message_info_copy based structure level 2 dcl 13-8 n_tokens 1 based fixed bin(17,0) level 2 dcl 417 ref 471 478 483 515 520 526 535 598 603 609 626 631 652 new_ll 000326 automatic fixed bin(17,0) dcl 424 set ref 531* 536* 536 544 544 562 new_lpi 000327 automatic fixed bin(17,0) dcl 425 set ref 533* 538* 538 549 549 564 new_pl 000325 automatic fixed bin(17,0) dcl 423 set ref 532* 537* 537 553 557 563 no_auto_print 125 based bit(1) level 3 in structure "prt_rqti" packed packed unaligned dcl 10-9 in procedure "printer_driver_" ref 258 no_auto_print 0(02) based bit(1) level 3 in structure "prt_ctl" packed packed unaligned dcl 8-22 in procedure "printer_driver_" set ref 258* 277* 604* 618* normal 000114 constant fixed bin(17,0) initial dcl 114 set ref 243* 319* 433* 444* 445* 446* 447* 449* 451* 452* 453* 454* 489* 496* 510* 521* 527* 540* 545* 550* 554* 558* 566* 592* 604* 619* 636* 644* 711* 720* not 000330 automatic bit(1) packed unaligned dcl 426 set ref 610* 612 615 616 617 618 null builtin function dcl 127 ref 213 586 586 658 658 660 660 664 664 665 665 omode 000115 automatic char(256) dcl 63 set ref 309* 506* opr_msg 21 based char(256) level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" set ref 243 243* opr_msg 000215 automatic char(160) packed unaligned dcl 64 in procedure "printer_driver_" set ref 485* 486* 487* 488* 489* 632* 633* 634* 635* 636* p2 000276 automatic pointer dcl 66 set ref 342* 348 348 350 355 355 355 360 361 363 370 370 370 375 382 382 382 387 paper_info 5 based structure level 2 in structure "prt_ctl" dcl 8-22 in procedure "printer_driver_" set ref 707 707 paper_info 200 based structure level 3 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" paper_length 200 based fixed bin(17,0) level 4 dcl 10-9 ref 246 paper_width 201 based fixed bin(17,0) level 4 dcl 10-9 ref 248 phys_line_length 6 based fixed bin(17,0) level 3 dcl 8-22 set ref 248* 269* 380 521* 531 562* 566* phys_page_length 5 based fixed bin(17,0) level 3 dcl 8-22 set ref 246* 267* 521* 532 563* 566* 711* prt_ctl based structure level 1 dcl 8-22 prt_ctl_ptr 000350 automatic pointer dcl 8-20 set ref 149* 212 223 246 248 249 251 254 255 256 257 258 259 260 261 264 267 269 270 272 274 275 276 277 278 279 280 281 290 290 344* 380 439* 485 486 487 492 493 494 521 521 521 531 532 533 562 563 564 566 566 566 604 604 604 604 615 616 617 618 632 633 634 640 641 642 662* 707 707 711 711 prt_flags 125 based structure level 2 dcl 10-9 prt_rqti based structure level 1 dcl 10-9 prt_rqti_version_1 000114 constant fixed bin(17,0) initial dcl 10-54 set ref 236 238* prt_rqtip 000352 automatic pointer dcl 10-7 set ref 215* 216 217 223 224 226 228 230 236 238 243 243 246 248 249 251 254 255 256 257 258 259 260 261 q 33 based fixed bin(17,0) level 2 dcl 13-8 set ref 348* 355* 370* 382* queue_msg_hdr based structure level 1 dcl 12-12 queue_msg_hdr_version_1 constant fixed bin(17,0) initial dcl 12-37 ref 346 quit_during_request 310(09) based bit(1) level 3 packed packed unaligned dcl 6-17 set ref 392* ready 47(02) based bit(1) level 3 packed packed unaligned dcl 3-25 set ref 298* request_descriptor based structure level 1 dcl 13-8 request_in_progress 310(02) based bit(1) level 3 packed packed unaligned dcl 6-17 ref 505 692 request_pending 46 based bit(36) level 2 dcl 3-25 set ref 300* rqti_header based structure level 1 dcl 11-4 rqti_header_version_1 000114 constant fixed bin(17,0) initial dcl 11-18 set ref 216 217* rqti_ptr 64 based pointer level 2 dcl 3-25 ref 213 215 rqti_switches 4 based structure level 3 dcl 10-9 save_code 000324 automatic fixed bin(35,0) dcl 414 set ref 437* 467 673 sender_id 13 based char(32) level 3 packed packed unaligned dcl 13-8 set ref 355* 370* 382* seq_id 32 based fixed bin(35,0) level 2 dcl 13-8 set ref 348* 355* 370* 382* slave constant fixed bin(17,0) initial dcl 111 in procedure "printer_driver_" set ref 287* slave 312 based structure level 2 in structure "iodd_static" dcl 6-17 in procedure "printer_driver_" slave_hold 310(07) based bit(1) level 3 packed packed unaligned dcl 6-17 set ref 224* 265* 396* 715* slave_output 322 based char(32) level 3 dcl 6-17 ref 153 429 source parameter fixed bin(17,0) dcl 703 in procedure "set_paper_info" set ref 699 711* 720* source parameter fixed bin(17,0) dcl 408 in procedure "printer_driver_" set ref 405 433* 444* 445* 446* 447* 449* 451* 452* 453* 454* 489* 496* 510* 521* 527* 540* 545* 550* 554* 558* 566* 569* 592* 604* 619* 636* 644* st based structure level 1 dcl 70 stat_p 000236 internal static pointer dcl 6-15 set ref 147* 148 150 153 155 161 167 168 173 174 176 178 178 181 182 182 182 185 192 195 224 226 265 266 306 306 309 309 315 315 322* 324 341 392 394* 396 398 429 438 454 461 465 505 576 577 578 580 586 590 590 692 715 state parameter fixed bin(17,0) dcl 409 ref 405 status_flags 47 based structure level 2 dcl 3-25 stream 000010 internal static char(32) array dcl 120 set ref 152* 153* 429* string builtin function dcl 127 set ref 212* 272* substr builtin function dcl 127 ref 315 610 612 test_entry 310(01) based bit(1) level 3 packed packed unaligned dcl 6-17 ref 398 454 465 text_offset based structure level 1 packed packed unaligned dcl 5-45 text_strings based structure level 1 dcl 5-39 text_strings_ptr 14 based pointer level 2 in structure "iodd_static" dcl 6-17 in procedure "printer_driver_" ref 150 text_strings_ptr 000346 automatic pointer dcl 5-38 in procedure "printer_driver_" set ref 150* 173 173 time 000030 internal static fixed bin(71,0) initial dcl 121 set ref 398 398* 471* 471 473* timer_manager_$sleep 000300 constant entry external dcl 102 ref 398 total_chars 164(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 6-17 ref 174 type_code 3 based fixed bin(17,0) level 3 dcl 10-9 ref 228 230 value 000265 automatic char(32) packed unaligned dcl 65 set ref 313* 315 315 612* 614* 615 615 616 616 617 617 618 618 version 20 based fixed bin(17,0) level 2 in structure "prt_rqti" dcl 10-9 in procedure "printer_driver_" set ref 236 238* version 76 based fixed bin(17,0) level 2 in structure "dprint_msg" dcl 2-20 in procedure "printer_driver_" ref 366 366 366 378 wakeup_time 300 based fixed bin(71,0) level 2 dcl 6-17 set ref 226* 266* whoami 000000 constant char(24) initial packed unaligned dcl 109 set ref 156* 162* 185* 201* 207* 217* 231* 238* 292* 582* 720* write_sample_form_ 000302 constant entry external dcl 103 ref 590 write_sample_prt_banner_ 000304 constant entry external dcl 104 ref 662 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ATTACH_TYPE_DIAL internal static fixed bin(17,0) initial dcl 4-15 ATTACH_TYPE_TTY internal static fixed bin(17,0) initial dcl 4-15 ATTACH_TYPE_VARIABLE_LINE internal static fixed bin(17,0) initial dcl 4-15 CTL_ATTACH_TYPE_DIAL internal static fixed bin(17,0) initial dcl 4-21 CTL_ATTACH_TYPE_MC internal static fixed bin(17,0) initial dcl 4-21 CTL_ATTACH_TYPE_TTY internal static fixed bin(17,0) initial dcl 4-21 IODT_VERSION_5 internal static char(8) initial packed unaligned dcl 5-49 MSEG_MESSAGE_INFO_V1 internal static char(8) initial dcl 7-28 MSEG_READ_AFTER_SPECIFIED internal static fixed bin(17,0) initial dcl 7-30 MSEG_READ_BEFORE_SPECIFIED internal static fixed bin(17,0) initial dcl 7-30 MSEG_READ_DELETE internal static bit(36) initial dcl 7-38 MSEG_READ_FIRST internal static fixed bin(17,0) initial dcl 7-30 MSEG_READ_LAST internal static fixed bin(17,0) initial dcl 7-30 MSEG_READ_OWN internal static bit(36) initial dcl 7-38 MSEG_READ_SPECIFIED internal static fixed bin(17,0) initial dcl 7-30 PAPER_TYPE_CONTINUOUS internal static fixed bin(17,0) initial dcl 4-26 PAPER_TYPE_DEFAULT internal static fixed bin(17,0) initial dcl 4-26 PAPER_TYPE_SINGLE internal static fixed bin(17,0) initial dcl 4-26 STATE_BUMPED internal static fixed bin(17,0) initial dcl 12-46 STATE_DEFERRED internal static fixed bin(17,0) initial dcl 12-42 STATE_DUPT internal static fixed bin(17,0) initial dcl 12-47 STATE_ELIGIBLE internal static fixed bin(17,0) initial dcl 12-44 STATE_RUNNING internal static fixed bin(17,0) initial dcl 12-45 STATE_TRANSITION internal static fixed bin(17,0) initial dcl 12-43 STATE_UNPROCESSED internal static fixed bin(17,0) initial dcl 12-41 channel_stops based bit(16) array packed unaligned dcl 9-25 condition_info_version_1 internal static fixed bin(17,0) initial dcl 1-30 counts based structure level 1 dcl 9-6 forms_max_lth internal static fixed bin(17,0) initial dcl 2-55 head_max_lth internal static fixed bin(17,0) initial dcl 2-55 iod_tables_hdr based structure level 1 dcl 5-23 ithp automatic pointer dcl 5-22 label_max_lth internal static fixed bin(17,0) initial dcl 2-55 mseg_message_info_ptr automatic pointer dcl 7-7 orderp automatic pointer dcl 9-4 page_labels based structure level 1 dcl 9-21 paper_info based structure level 1 dcl 9-27 path_max_lth internal static fixed bin(17,0) initial dcl 2-55 position_data based structure level 1 dcl 9-14 ret_error_count based fixed bin(17,0) dcl 9-32 NAMES DECLARED BY EXPLICIT CONTEXT. be_nice 003235 constant label dcl 361 ref 352 376 389 clean_out 003036 constant label dcl 324 ref 202 208 220 233 240 288 293 cmd_error 006731 constant label dcl 680 ref 434 498 529 541 546 551 555 559 584 645 command 003474 constant entry external dcl 405 default_handler 006740 constant entry external dcl 685 end_cmd 006725 constant label dcl 676 set ref 455 462 468 474 490 501 511 524 571 594 622 637 648 668 init 001341 constant entry external dcl 142 printer_driver_ 001330 constant entry external dcl 48 request 003065 constant entry external dcl 330 set_defaults 002454 constant label dcl 267 ref 228 set_paper_info 006772 constant entry internal dcl 699 ref 287 569 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7510 10024 7163 7520 Length 10574 7163 314 533 325 230 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME printer_driver_ 704 external procedure is an external procedure. on unit on line 190 84 on unit on unit on line 431 98 on unit set_paper_info internal procedure shares stack frame of external procedure printer_driver_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 stream printer_driver_ 000030 time printer_driver_ 000032 ctl printer_driver_ 000236 stat_p printer_driver_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME printer_driver_ 000100 date_string printer_driver_ 000106 ec printer_driver_ 000107 ignore printer_driver_ 000110 i printer_driver_ 000112 major_args_ptr printer_driver_ 000114 major_args_length printer_driver_ 000115 omode printer_driver_ 000215 opr_msg printer_driver_ 000265 value printer_driver_ 000276 p2 printer_driver_ 000300 io_stat printer_driver_ 000302 form_info printer_driver_ 000324 save_code printer_driver_ 000325 new_pl printer_driver_ 000326 new_ll printer_driver_ 000327 new_lpi printer_driver_ 000330 not printer_driver_ 000331 condition printer_driver_ 000342 dmp printer_driver_ 000344 driver_status_ptr printer_driver_ 000346 text_strings_ptr printer_driver_ 000350 prt_ctl_ptr printer_driver_ 000352 prt_rqtip printer_driver_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out return_mac tra_ext_1 mdfx1 enable_op ext_entry int_entry any_to_any_truncate_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. add_char_offset_ clock_ com_err_ date_time_ do_prt_request_ do_prt_request_$error_during_request do_prt_request_$single_copy iodd_listen_ iodd_msg_ iodd_parse_$args ios_$attach ios_$changemode ios_$detach ios_$order iox_$control iox_$find_iocb timer_manager_$sleep 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_$no_operation LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 48 001327 51 001335 142 001336 147 001346 148 001353 149 001355 150 001361 152 001364 153 001367 155 001373 156 001376 158 001430 161 001431 162 001434 164 001466 167 001467 168 001473 169 001476 173 001501 174 001521 176 001526 178 001562 181 001571 182 001574 184 001624 185 001630 187 001670 190 001671 192 001705 193 001732 195 001733 196 001740 198 001744 200 002000 201 002004 202 002037 205 002040 206 002062 207 002064 208 002117 212 002120 213 002121 215 002126 216 002130 217 002133 220 002174 223 002175 224 002202 226 002214 228 002223 230 002225 231 002227 233 002261 236 002262 238 002265 240 002325 243 002326 246 002370 248 002374 249 002376 251 002400 254 002407 255 002411 256 002416 257 002423 258 002430 259 002435 260 002437 261 002441 262 002443 264 002444 265 002446 266 002452 267 002454 269 002457 270 002461 272 002463 274 002467 275 002471 276 002473 277 002475 278 002477 279 002501 280 002503 281 002504 287 002506 288 002510 290 002512 291 002550 292 002552 293 002605 296 002606 297 002612 298 002614 299 002616 300 002620 301 002621 302 002623 303 002625 304 002627 306 002630 309 002634 313 002670 315 002725 317 002736 319 002762 322 003027 324 003036 327 003063 330 003064 341 003072 342 003076 343 003100 344 003102 346 003104 348 003107 350 003151 352 003154 354 003155 355 003160 360 003232 361 003235 363 003240 364 003242 366 003243 370 003252 375 003324 376 003327 378 003330 380 003334 382 003337 387 003414 389 003417 392 003420 394 003423 396 003435 398 003443 402 003466 405 003467 429 003501 431 003506 433 003522 434 003557 437 003562 438 003565 439 003571 440 003573 443 003575 444 003604 445 003637 446 003674 447 003731 449 003766 451 004023 452 004063 453 004122 454 004156 455 004222 458 004223 461 004235 462 004241 465 004242 467 004253 468 004254 471 004255 473 004271 474 004273 477 004274 478 004306 481 004321 482 004324 483 004326 485 004342 486 004350 487 004356 488 004364 489 004367 490 004431 492 004432 493 004442 494 004452 496 004462 498 004523 501 004524 504 004525 505 004532 506 004536 508 004565 509 004572 510 004573 511 004626 514 004627 515 004641 518 004654 519 004657 520 004661 521 004673 524 004737 526 004740 527 004746 529 005001 531 005002 532 005004 533 005006 535 005010 536 005021 537 005045 538 005063 540 005101 541 005144 543 005145 544 005150 545 005155 546 005212 549 005213 550 005220 551 005255 553 005256 554 005261 555 005316 557 005317 558 005321 559 005356 562 005357 563 005362 564 005364 566 005366 569 005434 571 005445 575 005446 576 005460 577 005464 578 005467 579 005522 580 005526 582 005532 584 005555 586 005556 590 005615 591 005637 592 005640 594 005673 597 005674 598 005706 601 005721 602 005724 603 005726 604 005740 607 006026 609 006027 610 006037 612 006051 614 006066 615 006074 616 006112 617 006131 618 006150 619 006166 620 006234 622 006236 625 006237 626 006251 629 006264 630 006267 631 006271 632 006305 633 006313 634 006321 635 006327 636 006332 637 006374 640 006375 641 006405 642 006415 644 006425 645 006466 648 006467 651 006470 652 006502 655 006515 656 006520 658 006522 660 006551 662 006604 664 006636 665 006671 668 006722 673 006723 674 006724 676 006725 678 006730 680 006731 682 006735 685 006736 690 006745 692 006754 696 006771 699 006772 705 006774 707 006775 708 007032 711 007040 715 007102 716 007106 718 007110 720 007111 721 007143 724 007144 ----------------------------------------------------------- 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