COMPILATION LISTING OF SEGMENT ibm2780_ Compiled by: Multics PL/I Compiler, Release 33a, of May 30, 1990 Compiled at: ACTC Technologies Inc. Compiled on: 08/08/90 1038.5 mdt Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1990 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(90-06-13,Vu), approve(90-06-13,MCR8178), audit(90-07-13,Bubric), 17* install(90-08-08,MR12.4-1023): 18* ibm2780_ gets "size" condition after 99 attaches. 19* END HISTORY COMMENTS */ 20 21 22 /* ibm2780_: An I/O module for communicating with an IBM 2780 or its equivilent. */ 23 24 /* Coded March 1977 by David Vinograd */ 25 26 ibm2780_: proc; 27 28 /* Parameters */ 29 30 dcl a_iocbp ptr; 31 dcl a_option (*) char (*) var; /* Options for attach */ 32 dcl a_sw bit (1); /* com_err_ switch for attach */ 33 dcl a_code fixed bin (35); 34 dcl a_mode fixed bin; /* The open mode */ 35 dcl a_buf_ptr ptr; 36 dcl a_data_ptr ptr; 37 dcl a_buf_chars fixed bin (21); 38 dcl a_data_chars fixed bin (21); 39 dcl a_pos_type fixed bin; 40 dcl a_pos_value fixed bin (21); 41 dcl a_order char (*); 42 dcl a_infop ptr; 43 dcl a_new_modes char (*); 44 dcl a_old_modes char (*); 45 46 /* Automatic */ 47 48 dcl com_err_sw bit (1); /* Set if com_err_ sould be called on attach error */ 49 dcl charp ptr; 50 dcl attach_tag picture "99"; 51 dcl input_chars fixed bin; /* number of characters to transmitted */ 52 dcl num_chars_rec fixed bin; /* number of characters recieved */ 53 dcl code fixed bin (35); 54 dcl iocbp ptr; 55 dcl mask bit (36) aligned; /* For setting ips mask */ 56 dcl i fixed bin (21); 57 dcl j fixed bin; 58 dcl k fixed bin; 59 dcl open_mode fixed bin; 60 dcl device char (32); 61 dcl remaining_chars fixed bin (21); 62 dcl data_chars fixed bin (21); 63 dcl order char (32); 64 dcl infop ptr; 65 dcl prefix char (2) var; 66 dcl input char (400) var; 67 dcl output char (400) var; 68 dcl ctl_string char (256) var; 69 dcl card_image char (80) var; 70 dcl comm_attach_name char (32) var; 71 dcl terminal_attach_options char (256) var; 72 dcl comm_attach_options char (256) var; 73 dcl comm_attach_desc char (256) var; 74 dcl comm char (32) var; 75 dcl tty char (32) var; 76 dcl dummy_arg char (32); 77 dcl carriage_ctl_string char (8) ; 78 dcl slew_ctl_string char (6) ; 79 dcl temp_iocbp ptr; 80 dcl char_mode_set bit (1); 81 dcl multi_record_cnt fixed bin; 82 dcl trans_mode_set bit (1); 83 84 dcl 1 send_nontransparent aligned, 85 2 len fixed bin, 86 2 char_string char (256); 87 88 dcl 1 local_bsc_modes like set_bsc_modes aligned; 89 90 dcl 1 set_bsc_modes aligned based (infop), 91 2 transparent bit (1) unal, 92 2 char_mode bit (1) unal, 93 2 pad bit (34) unal; 94 95 /* Internal static */ 96 97 /* ..... the next six variables should be per comm attachment rather than int static */ 98 99 dcl last_select char (32) int static; /* last device selected */ 100 dcl comm_iocbp ptr int static init (null); 101 dcl quit_mode bit (1) int static init ("0"b); 102 dcl EM char (1) int static init (""); 103 dcl attach_count fixed bin init (0) int static; 104 dcl comm_open bit (1) int static init ("0"b); 105 106 107 dcl default_carriage_ctl_table (4) char (4) aligned static init ("/", "/", "S", "T"); 108 dcl carriage_ctl_table (4) char (4) aligned static init ((4) (4)" "); 109 dcl default_slew_ctl_table (6) char (4) aligned static init ("", "A", " ", 110 "A", " ", "A"); 111 dcl slew_ctl_table (6) char (4) aligned static init ((6) (4)" "); 112 dcl printer_select char (2) int static init ("/"); 113 dcl punch_select char (2) int static init ("4"); 114 115 /* Constants */ 116 117 dcl terminal_device_name char (8) int static options (constant) init ("ibm2780_"); 118 dcl space char (1) static int init (" ") options (constant); 119 dcl carriage_control_char fixed bin int static init (1) options (constant); 120 121 /* External stuff */ 122 123 dcl convert_string_$input entry (char (*) var, ptr, char (*) var, fixed bin (35)); 124 dcl convert_string_$output entry (char (*) var, ptr, char (*) var, fixed bin (35)); 125 dcl get_ttt_info_ entry (ptr, fixed bin (35)); 126 dcl continue_to_signal_ entry (fixed bin (35)); 127 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 128 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 129 dcl hcs_$reset_ips_mask entry (bit (36) aligned, bit (36) aligned); 130 dcl hcs_$set_ips_mask entry (bit (36) aligned, bit (36) aligned); 131 dcl iox_$propagate entry (ptr); 132 dcl iox_$position entry (ptr, fixed bin, fixed bin (21), fixed bin (35)); 133 dcl com_err_ entry options (variable); 134 dcl iox_$attach_ioname entry (char (*), ptr, char (*), fixed bin (35)); 135 dcl iox_$detach_iocb entry (ptr, fixed bin (35)); 136 dcl iox_$close entry (ptr, fixed bin (35)); 137 dcl iox_$open entry (ptr, fixed bin, bit (36), fixed bin (35)); 138 dcl iox_$get_chars entry (ptr, ptr, fixed bin, fixed bin, fixed bin (35)); 139 dcl iox_$put_chars entry (ptr, ptr, fixed bin, fixed bin (35)); 140 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 141 dcl iox_$err_no_operation entry; 142 143 dcl (addr, addrel, bin, char, convert, copy, hbound, length, ltrim) builtin; 144 dcl (min, mod, null, rtrim, substr) builtin; 145 146 dcl ibm2780_conv_$slew_ctl_table_ptr ptr ext; 147 dcl ibm2780_conv_$carriage_ctl_table_ptr ptr ext; 148 dcl sys_info$max_seg_size fixed bin ext; 149 dcl error_table_$bad_conversion fixed bin (35) ext; 150 dcl error_table_$bisync_bid_fail ext fixed bin (35); 151 dcl error_table_$no_operation fixed bin (35) ext; 152 dcl error_table_$bad_arg ext fixed bin (35); 153 dcl error_table_$bad_mode ext fixed bin (35); 154 dcl error_table_$not_detached ext fixed bin (35); 155 dcl error_table_$wrong_no_of_args ext fixed bin (35); 156 dcl error_table_$noarg ext fixed bin (35); 157 dcl error_table_$badopt ext fixed bin (35); 158 159 dcl conversion condition; 160 dcl cleanup condition; 161 dcl quit condition; 162 dcl any_other condition; 163 164 dcl info_fixed fixed bin based (infop); 165 dcl info_string char (32) based (infop); 166 dcl char_string char (80) based (charp); 167 1 1 char_string = card_image; 1 2 /* BEGIN INCLUDE FILE ... ibm2780_data.incl.pl1 ... 3/77 */ 1 3 1 4 dcl adp ptr; /* local copy of pointer to attach data */ 1 5 1 6 dcl 1 ad aligned based (adp), 1 7 2 remote_ttt_info like remote_ttt_info, 1 8 2 fixed, 1 9 3 phys_line_length fixed, 1 10 3 char_mode fixed bin, /* translation mode ascii or ebcdic */ 1 11 3 record_len fixed bin, /* length of output record in characters */ 1 12 3 line_length fixed bin, /* length of printer line */ 1 13 2 bits, 1 14 3 ht bit (1), /* on if terminal has tab option */ 1 15 3 multi_record bit (1), /* enable multi record mode if on */ 1 16 3 auto_turnaround bit (1), /* enable auto turnaround if on */ 1 17 3 transparent bit (1), /* Set if in transparent mode */ 1 18 2 ptrs, 1 19 3 comm_iocbp ptr, /* iocb ptr to comm_ dim */ 1 20 2 chars, 1 21 3 printer_select char(2), 1 22 3 punch_select char(2), 1 23 3 terminal_id char (2), /* terminal id string of terminal */ 1 24 3 device_type char (32), /* device selection character */ 1 25 3 attach_desc char (256) var, 1 26 3 open_description char (24) var; 1 27 1 28 dcl ascii fixed bin int static init (1) options (constant); 1 29 dcl ebcdic fixed bin int static init (2) options (constant); 1 30 1 31 dcl reader char (32) static init ("reader") options (constant); /* device name */ 1 32 dcl punch char (32) static init ("punch") options (constant); /* device name */ 1 33 dcl special char (32) static init ("special") options (constant); /* device name */ 1 34 dcl printer char (32) static init ("printer") options (constant); /* device name */ 1 35 dcl teleprinter char (32) static init ("teleprinter") options (constant); /* device name */ 1 36 1 37 dcl HT char (1) int static options (constant) init (" "); 1 38 dcl ENQ char (1) int static options (constant) init (""); 1 39 dcl ESC char (1) int static options (constant) init (""); 1 40 1 41 /* END INCLUDE FILE ... ibm2780_data.incl.pl1 */ 168 2 1 /* BEGIN... remote_ttt_info.incl.pl1 ... 5/78 */ 2 2 2 3 dcl rttp ptr; /* ptr to data structure */ 2 4 2 5 2 6 dcl 1 remote_ttt_info based (rttp) aligned, /* data */ 2 7 2 ttt_bits, /* control bits */ 2 8 (3 escape_output bit (1), /* if on enables output escape processing */ 2 9 3 translate_output bit (1), /* if on enables output translation */ 2 10 3 translate_input bit (1), /* if on enables input translation */ 2 11 3 escape_input bit (1), /* if on enables input escape processing */ 2 12 3 erase_input bit (1), /* if on enables input erase processing */ 2 13 3 canonicalize_input bit (1), /* if on enables input canonicalization */ 2 14 3 edited bit (1)) unal, /* if on enables edited escape processing */ 2 15 2 terminal_type char (32), /* terminal type in TTT */ 2 16 2 kill_char char (1), /* specified kil character */ 2 17 2 erase_char char (1), /* and erase character */ 2 18 2 ttt_ptrs, /* ptr to various ttt tables */ 2 19 3 input_mvtp ptr, /* input translation table */ 2 20 3 output_mvtp ptr, /* output translation table */ 2 21 3 input_tctp ptr, /* input escape table */ 2 22 3 output_tctp ptr, /* output escape table */ 2 23 3 specp ptr; /* special table */ 2 24 2 25 /* END remote_ttt_info.incl.pl1 */ 169 3 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 3 2 /* Modified 11/29/82 by S. Krupp to add new entries and to change 3 3* version number to IOX2. */ 3 4 /* format: style2 */ 3 5 3 6 dcl 1 iocb aligned based, /* I/O control block. */ 3 7 2 version character (4) aligned, /* IOX2 */ 3 8 2 name char (32), /* I/O name of this block. */ 3 9 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 3 10 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 3 11 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 3 12 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 3 13 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 3 14 2 reserved bit (72), /* Reserved for future use. */ 3 15 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 3 16 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 3 17 /* open(p,mode,not_used,s) */ 3 18 2 close entry (ptr, fixed (35)),/* close(p,s) */ 3 19 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 3 20 /* get_line(p,bufptr,buflen,actlen,s) */ 3 21 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 3 22 /* get_chars(p,bufptr,buflen,actlen,s) */ 3 23 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 3 24 /* put_chars(p,bufptr,buflen,s) */ 3 25 2 modes entry (ptr, char (*), char (*), fixed (35)), 3 26 /* modes(p,newmode,oldmode,s) */ 3 27 2 position entry (ptr, fixed, fixed (21), fixed (35)), 3 28 /* position(p,u1,u2,s) */ 3 29 2 control entry (ptr, char (*), ptr, fixed (35)), 3 30 /* control(p,order,infptr,s) */ 3 31 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 3 32 /* read_record(p,bufptr,buflen,actlen,s) */ 3 33 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 3 34 /* write_record(p,bufptr,buflen,s) */ 3 35 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 3 36 /* rewrite_record(p,bufptr,buflen,s) */ 3 37 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 3 38 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 3 39 /* seek_key(p,key,len,s) */ 3 40 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 3 41 /* read_key(p,key,len,s) */ 3 42 2 read_length entry (ptr, fixed (21), fixed (35)), 3 43 /* read_length(p,len,s) */ 3 44 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 3 45 /* open_file(p,mode,desc,not_used,s) */ 3 46 2 close_file entry (ptr, char (*), fixed bin (35)), 3 47 /* close_file(p,desc,s) */ 3 48 2 detach entry (ptr, char (*), fixed bin (35)); 3 49 /* detach(p,desc,s) */ 3 50 3 51 declare iox_$iocb_version_sentinel 3 52 character (4) aligned external static; 3 53 3 54 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 170 4 1 /* Begin include file ..... iox_modes.incl.pl1 */ 4 2 4 3 /* Written by C. D. Tavares, 03/17/75 */ 4 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 4 5 4 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 4 7 ("stream_input", "stream_output", "stream_input_output", 4 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 4 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 4 10 "direct_input", "direct_output", "direct_update"); 4 11 4 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 4 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 4 14 4 15 dcl (Stream_input initial (1), 4 16 Stream_output initial (2), 4 17 Stream_input_output initial (3), 4 18 Sequential_input initial (4), 4 19 Sequential_output initial (5), 4 20 Sequential_input_output initial (6), 4 21 Sequential_update initial (7), 4 22 Keyed_sequential_input initial (8), 4 23 Keyed_sequential_output initial (9), 4 24 Keyed_sequential_update initial (10), 4 25 Direct_input initial (11), 4 26 Direct_output initial (12), 4 27 Direct_update initial (13)) fixed bin int static options (constant); 4 28 4 29 /* End include file ..... iox_modes.incl.pl1 */ 171 5 1 /* Begin include file ..... io_call_info.incl.pl1 */ 5 2 5 3 /* This include file defines the info_structure used by an I/O module to perform an "io_call" order 5 4* on behalf of the io_call command. */ 5 5 /* Coded April 1976 by Larry Johnson */ 5 6 /* Changed June 1977 by Larry Johnson for "io_call_af" order */ 5 7 5 8 dcl io_call_infop ptr; 5 9 5 10 dcl 1 io_call_info aligned based (io_call_infop), 5 11 2 version fixed bin, 5 12 2 caller_name char (32), /* Caller name for error messages */ 5 13 2 order_name char (32), /* Actual name of the order to be performed */ 5 14 2 report entry variable options (variable), 5 15 /* Entry to ioa_ like procedure to report results */ 5 16 2 error entry variable options (variable), 5 17 /* Entry to com_err_ like procedure to report results */ 5 18 2 af_returnp ptr, /* Pointer to return string if "io_call_af" order */ 5 19 2 af_returnl fixed bin, /* Length of string */ 5 20 2 fill (5) bit (36) aligned, 5 21 2 nargs fixed bin, /* Number of additional command arguments provided */ 5 22 2 max_arglen fixed bin, /* Length of longest argument (used to define array) */ 5 23 2 args (0 refer (io_call_info.nargs)) char (0 refer (io_call_info.max_arglen)) varying; 5 24 5 25 dcl io_call_af_ret char (io_call_info.af_returnl) based (io_call_info.af_returnp) varying; 5 26 /* Return string for active function */ 5 27 5 28 /* End include file ..... io_call_info.incl.pl1 */ 172 173 174 /* Attach entry point */ 175 176 ibm2780_attach: entry (a_iocbp, a_option, a_sw, a_code); 177 178 iocbp = a_iocbp; 179 com_err_sw = a_sw; 180 code, a_code = 0; 181 182 adp = null; 183 if iocbp -> iocb.attach_descrip_ptr ^= null then do; 184 code = error_table_$not_detached; 185 call abort_attach ("^a", iocbp -> iocb.name); 186 end; 187 188 call get_temp_segment_ (terminal_device_name, adp, code); /* Temp segment for attach data */ 189 if code ^= 0 then call abort_attach ("Unable to allocate temp segment.", ""); 190 191 /* Initialize IOCB variables */ 192 193 ad.bits = "0"b; 194 ad.fixed = 0; 195 ad.ptrs = null; 196 ad.chars = ""; 197 ad.printer_select = printer_select; 198 ad.punch_select = punch_select; 199 ad.char_mode = ebcdic; 200 ad.record_len = 80; 201 ad.phys_line_length = 80; 202 203 ad.kill_char = "@"; 204 ad.erase_char = "#"; 205 ad.ttt_ptrs = null; 206 ad.ttt_bits = "1"b; 207 208 if comm_iocbp = null then do; 209 carriage_ctl_table (*) = default_carriage_ctl_table (*); 210 ibm2780_conv_$carriage_ctl_table_ptr = addr (carriage_ctl_table); 211 slew_ctl_table (*) = default_slew_ctl_table (*); 212 ibm2780_conv_$slew_ctl_table_ptr = addr (slew_ctl_table); 213 end; 214 215 /* Process options */ 216 217 if hbound (a_option, 1) < 1 then do; /* Must be at least one */ 218 code = error_table_$wrong_no_of_args; 219 call abort_attach ("Bad attach description.", ""); 220 end; 221 trans_mode_set, char_mode_set = "0"b; 222 comm_attach_desc, comm_attach_options = ""; 223 tty, comm = ""; 224 terminal_attach_options = ""; 225 comm_attach_name = ""; 226 do i = 1 to hbound (a_option, 1); 227 if a_option (i) = "-size" then do; 228 code = error_table_$badopt; 229 call abort_attach ("bad option", ((a_option (i)))); 230 end; 231 if a_option (i) ^= "-comm" then 232 terminal_attach_options = terminal_attach_options || space || a_option (i); 233 if a_option (i) = "-transparent" then do; 234 ad.transparent = "1"b; 235 trans_mode_set = "1"b; 236 comm_attach_options = comm_attach_options || space || a_option (i); 237 end; 238 else if a_option (i) = "-terminal_type" | a_option (i) = "-ttp" then do; 239 ad.terminal_type = get_arg (); 240 call get_ttt_info_ (addr (ad.remote_ttt_info), code); 241 if code ^= 0 then call abort_attach ("Unable to set terminal type tables", ""); 242 end; 243 else if a_option (i) = "-carriage_ctl" then do; 244 carriage_ctl_string = get_arg (); 245 do j = 1 to 4; 246 carriage_ctl_table (j) = substr (carriage_ctl_string, (j * 2) - 1, 2); 247 end; 248 end; 249 else if a_option (i) = "-slew_ctl" then do; 250 slew_ctl_string = get_arg (); 251 do j = 1 to 3; 252 slew_ctl_table (j*2) = substr (slew_ctl_string, (j * 2) -1, 2); 253 end; 254 end; 255 else if a_option (i) = "-nontransparent" then do; 256 trans_mode_set = "1"b; 257 ad.transparent = "0"b; 258 comm_attach_options = comm_attach_options || space || a_option (i); 259 end; 260 else if a_option (i) = "-ascii" then do; 261 char_mode_set = "1"b; 262 ad.char_mode = ascii; 263 comm_attach_options = comm_attach_options || space || a_option (i); 264 end; 265 else if a_option (i) = "-ebcdic" then do; 266 char_mode_set = "1"b; 267 ad.char_mode = ebcdic; 268 comm_attach_options = comm_attach_options || space || a_option (i); 269 end; 270 else if a_option (i) = "-multi_record" then ad.multi_record = "1"b; 271 else if a_option (i) = "-physical_line_length" | a_option (i) = "-pll" then 272 ad.phys_line_length = cv_dec_arg (); 273 else if a_option (i) = "-horizontal_tab" | a_option (i) = "-htab" then ad.ht = "1"b; 274 else if a_option (i) = "-multi_point" then 275 ad.terminal_id = get_arg (); 276 else if a_option (i) = "-printer_select" then 277 ad.printer_select = get_arg (); 278 else if a_option (i) = "-punch_select" then 279 ad.punch_select = get_arg (); 280 else if a_option (i) = "-device" then dummy_arg = get_arg (); /* skip this one, but record we got it */ 281 else if a_option (i) = "-tty" then 282 tty = get_arg (); 283 else if a_option (i) = "-comm" then do; 284 i = i + 1; 285 if i > hbound (a_option, 1) then goto no_arg; 286 comm = a_option (i); 287 end; 288 else comm_attach_options = comm_attach_options || space || a_option (i); 289 end; 290 291 if tty = "" then do; 292 code = error_table_$badopt; 293 call abort_attach ("No ""-tty"" option given.", ""); 294 end; 295 296 if comm = "" then do; 297 code = error_table_$badopt; 298 call abort_attach ("No ""-comm"" option given.", ""); 299 end; 300 301 /* cross check attach descriptions */ 302 303 if ^char_mode_set then comm_attach_options = comm_attach_options || " -ebcdic"; 304 if ^trans_mode_set then comm_attach_options = comm_attach_options || " -nontransparent"; 305 306 if ad.multi_record then do; 307 ad.record_len = 400; 308 comm_attach_options = comm_attach_options || " -size 400 -multi_record 7"; 309 end; 310 else comm_attach_options = comm_attach_options || " -size 80"; 311 312 if ad.char_mode = ascii & ad.transparent then do; 313 code = error_table_$badopt; 314 call abort_attach ("Unsupported attachment mode", ""); 315 end; 316 317 /* Compare attach description with on-line description of device */ 318 319 call check_attach_description; 320 if code ^= 0 then call abort_attach ("Attach mismatch on option ^a", ((a_option (i)))); 321 322 /* Attach through comm dim */ 323 324 /* use attach_count as comm_tag, use at least two digits */ 325 if attach_count < 100 then do; 326 attach_tag = attach_count; 327 comm_attach_name = terminal_device_name || attach_tag; 328 end; 329 else comm_attach_name = terminal_device_name || ltrim(char(attach_count)); 330 attach_count = attach_count + 1; 331 last_select = ""; 332 comm_attach_desc = comm || space || tty || space || comm_attach_options; 333 if comm_iocbp = null then do; 334 call iox_$attach_ioname ((comm_attach_name), temp_iocbp, (comm_attach_desc), code); 335 if code ^= 0 then call abort_attach ("Unable to attach to comm channel", ""); 336 comm_iocbp = temp_iocbp; 337 end; 338 339 ad.attach_desc = terminal_device_name || space || comm || space || terminal_attach_options; 340 341 /* Mask and complete the iocb */ 342 343 mask = "0"b; 344 on any_other call handler; 345 call hcs_$set_ips_mask ("0"b, mask); 346 iocbp -> iocb.attach_descrip_ptr = addr (ad.attach_desc); 347 iocbp -> iocb.attach_data_ptr = adp; 348 iocbp -> iocb.open = ibm2780_open; 349 iocbp -> iocb.detach_iocb = ibm2780_detach; 350 call iox_$propagate (iocbp); 351 call hcs_$reset_ips_mask (mask, mask); 352 revert any_other; 353 354 attach_return: 355 return; 356 no_arg: 357 code = error_table_$noarg; 358 call abort_attach ("No argument after ^a.", (a_option (i-1))); 359 360 361 /* Detach entry point */ 362 363 ibm2780_detach: entry (a_iocbp, a_code); 364 365 iocbp = a_iocbp; 366 code, a_code = 0; 367 adp = iocbp -> iocb.attach_data_ptr; 368 369 if comm_iocbp ^= null then do; 370 call iox_$detach_iocb (comm_iocbp, a_code); 371 comm_iocbp = null; 372 end; 373 374 mask = "0"b; 375 on any_other call handler; 376 call hcs_$set_ips_mask ("0"b, mask); 377 iocbp -> iocb.attach_descrip_ptr = null; 378 call iox_$propagate (iocbp); 379 call hcs_$reset_ips_mask (mask, mask); 380 revert any_other; 381 382 call release_temp_segment_ (terminal_device_name, adp, (0)); 383 return; 384 385 /* Open entry point */ 386 387 ibm2780_open: entry (a_iocbp, a_mode, a_sw, a_code); 388 389 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 390 code, a_code = 0; 391 adp = iocbp -> iocb.attach_data_ptr; 392 393 open_mode = a_mode; 394 if ^((open_mode = Stream_input) | (open_mode = Stream_output) | (open_mode = Stream_input_output)) then do; 395 bad_mode: a_code = error_table_$bad_mode; 396 return; 397 end; 398 399 ad.open_description = rtrim (iox_modes (open_mode), space); 400 401 if ^comm_open & comm_iocbp ^= null then do; 402 call iox_$open (comm_iocbp, a_mode, "0"b, a_code); 403 if a_code ^= 0 then return; 404 comm_open = "1"b; 405 end; 406 407 mask = "0"b; 408 on any_other call handler; 409 call hcs_$set_ips_mask ("0"b, mask); 410 if ((open_mode = Stream_input) | (open_mode = Stream_input_output)) then do; 411 iocbp -> iocb.get_chars = ibm2780_get_chars; 412 end; 413 if ((open_mode = Stream_output) | (open_mode = Stream_input_output)) then do; 414 iocbp -> iocb.put_chars = ibm2780_put_chars; 415 end; 416 iocbp -> iocb.control = ibm2780_control; 417 iocbp -> iocb.position = ibm2780_position; 418 iocbp -> iocb.modes = ibm2780_modes; 419 iocbp -> iocb.close = ibm2780_close; 420 iocbp -> iocb.open_descrip_ptr = addr (ad.open_description); 421 call iox_$propagate (iocbp); 422 call hcs_$reset_ips_mask (mask, mask); 423 revert any_other; 424 return; 425 426 /* Close entry point */ 427 428 ibm2780_close: entry (a_iocbp, a_code); 429 430 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 431 code, a_code = 0; 432 adp = iocbp -> iocb.attach_data_ptr; 433 434 if comm_iocbp ^= null then do; 435 call iox_$close (comm_iocbp, a_code); 436 comm_open = "0"b; 437 end; 438 439 mask = "0"b; 440 on any_other call handler; 441 call hcs_$set_ips_mask ("0"b, mask); 442 iocbp -> iocb.open_descrip_ptr = null; 443 iocbp -> iocb.open = ibm2780_open; 444 iocbp -> iocb.detach_iocb = ibm2780_detach; 445 iocbp -> iocb.control = iox_$err_no_operation; 446 iocbp -> iocb.position = iox_$err_no_operation; 447 iocbp -> iocb.modes = iox_$err_no_operation; 448 call iox_$propagate (iocbp); 449 call hcs_$reset_ips_mask (mask, mask); 450 revert any_other; 451 return; 452 453 /* Put_chars entry point */ 454 455 ibm2780_put_chars: entry (a_iocbp, a_data_ptr, a_data_chars, a_code); 456 457 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 458 code, a_code = 0; 459 if comm_iocbp = null then do; 460 a_code = error_table_$no_operation; 461 return; 462 end; 463 adp = iocbp -> iocb.attach_data_ptr; 464 465 if a_data_chars < 0 | a_data_chars > sys_info$max_seg_size * 4 then do; 466 a_code = error_table_$bad_arg; 467 return; 468 end; 469 remaining_chars = a_data_chars; /* This is decremented as data is sent */ 470 charp = a_data_ptr; 471 do while (remaining_chars > 0); 472 call put_string; 473 if code ^= 0 then goto put_chars_ret; 474 end; 475 put_chars_ret: 476 a_code = code; 477 return; 478 479 /* Get_chars entry point */ 480 481 ibm2780_get_chars: entry (a_iocbp, a_buf_ptr, a_buf_chars, a_data_chars, a_code); 482 483 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 484 adp = iocbp -> iocb.attach_data_ptr; 485 code, a_code = 0; 486 if comm_iocbp = null then do; 487 a_code = error_table_$no_operation; 488 return; 489 end; 490 a_data_chars, data_chars = 0; 491 remaining_chars = a_buf_chars; 492 charp = a_buf_ptr; 493 494 call get_string; 495 get_chars_ret: 496 a_code = code; 497 a_data_chars = data_chars; 498 return; 499 500 /* Control entry point */ 501 502 ibm2780_control: entry (a_iocbp, a_order, a_infop, a_code); 503 504 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 505 adp = iocbp -> iocb.attach_data_ptr; 506 infop = a_infop; 507 order = a_order; 508 code, a_code = 0; 509 if comm_iocbp = null then goto nop; 510 if order = "set_bsc_modes" then do; 511 ad.transparent = set_bsc_modes.transparent; 512 if set_bsc_modes.char_mode then ad.char_mode = ebcdic; 513 else ad.char_mode = ascii; 514 call iox_$control (comm_iocbp, order, infop, code); 515 if code ^= 0 then goto control_ret; 516 if ad.multi_record then multi_record_cnt = 7; 517 else multi_record_cnt = 1; 518 if ad.multi_record then 519 call iox_$control (comm_iocbp, "set_multi_record_mode", addr (multi_record_cnt), code); 520 end; 521 else if order = "select_device" then do; 522 if info_string = last_select then go to control_ret; /* already there */ 523 last_select = info_string; 524 if info_string = teleprinter then 525 ad.device_type = printer; 526 else if info_string = printer | info_string = punch then 527 ad.device_type = info_string; 528 else do; 529 nop: code = error_table_$no_operation; 530 goto control_ret; 531 end; 532 call select_device; 533 if ad.device_type = printer then call init_printer; 534 end; 535 else if order = "set_multi_record_mode" then do; 536 ad.multi_record = "1"b; 537 if info_fixed > 7 | info_fixed < 1 then do; 538 code = error_table_$no_operation; 539 goto control_ret; 540 end; 541 goto do_control; 542 end; 543 else if order = "io_call" then call ibm2780_io_call; 544 else if order = "reset" then ad.edited = "1"b; 545 else 546 do_control: 547 call iox_$control (comm_iocbp, order, infop, code); 548 control_ret: 549 a_code = code; 550 return; 551 552 /* Position entry point */ 553 554 ibm2780_position: entry (a_iocbp, a_pos_type, a_pos_value, a_code); 555 556 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 557 adp = iocbp -> iocb.attach_data_ptr; 558 code, a_code = 0; 559 if comm_iocbp = null then do; 560 a_code = error_table_$no_operation; 561 return; 562 end; 563 call iox_$position (comm_iocbp, a_pos_type, a_pos_value, a_code); 564 return; 565 566 ibm2780_modes: entry (a_iocbp, a_new_modes, a_old_modes, a_code); 567 568 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 569 adp = iocbp -> iocb.attach_data_ptr; 570 code, a_code = 0; 571 if a_new_modes = "non_edited" then 572 ad.edited = "0"b; 573 else if a_new_modes = "default" then 574 ad.edited = "1"b; 575 else code = error_table_$bad_mode; 576 return; 577 578 check_attach_description: proc; 579 580 /* This proc compares the input attach description with the one on line and returns an error 581* if there is a mismatch. */ 582 583 end check_attach_description; 584 585 cv_dec_arg: proc returns (fixed bin); 586 587 i = i + 1; /* Advance to next arg */ 588 if i > hbound (a_option, 1) then goto no_arg; 589 terminal_attach_options = terminal_attach_options || space || a_option (i); 590 on conversion go to bad_dec_arg; 591 return (bin ((a_option (i)))); 592 bad_dec_arg: 593 code = error_table_$bad_conversion; 594 call abort_attach ("Invalid decimal number. ^a", ((a_option (i)))); 595 596 end cv_dec_arg; 597 598 get_arg: proc returns (char (*) var); 599 600 /* This proc picks up the next arg in the option array */ 601 i = i + 1; 602 if i > hbound (a_option, 1) then goto no_arg; 603 terminal_attach_options = terminal_attach_options || space || a_option (i); 604 return ((a_option (i))); 605 606 end get_arg; 607 608 609 abort_attach: proc (str1, str2); 610 dcl (str1, str2) char (*) aligned; 611 612 /* This proc handles attach errors */ 613 614 if com_err_sw then call com_err_ (code, terminal_device_name, str1, str2); 615 a_code = code; 616 if comm_iocbp ^= null then do; 617 call iox_$detach_iocb (comm_iocbp, (0)); 618 comm_iocbp = null; 619 end; 620 if adp ^= null then 621 call release_temp_segment_ (terminal_device_name, adp, code); 622 go to attach_return; 623 624 end abort_attach; 625 626 select_device: proc; 627 628 /* This proc selects the device and the terminal */ 629 630 if ad.terminal_id ^= "" then do; 631 if ad.device_type = printer then 632 ctl_string = ad.terminal_id || ad.printer_select || ENQ; 633 else if ad.device_type = punch then 634 ctl_string = ad.terminal_id || ad.punch_select || ENQ; 635 else return; 636 end; 637 else do; 638 if ad.device_type = punch then ctl_string = ad.punch_select; 639 else if ad.device_type = printer then ctl_string = ad.printer_select; 640 else return; 641 end; 642 call write_nontransparent; 643 return; 644 645 end select_device; 646 647 set_tabs: proc; 648 649 /* This proc sets the tabs of the selected terminal. */ 650 651 ctl_string = ESC || HT; /* control prefix */ 652 do i = 1 to ad.phys_line_length; 653 if mod (i, 10) = 0 then substr (ctl_string, i, 1) = HT; 654 end; 655 call write_nontransparent; 656 return; 657 658 end set_tabs; 659 660 put_string: proc; 661 662 /* This proc writes the data contained in input. */ 663 664 input_chars = min (remaining_chars, ad.record_len); 665 input = substr (char_string, 1, input_chars); 666 remaining_chars = remaining_chars - input_chars; 667 charp = addr (substr (char_string, input_chars + 1, 1)); 668 if ^quit_mode then do; 669 if ad.transparent then do; 670 if ad.device_type = punch then input = input || copy (" ", 80-length (input)); 671 else if ad.device_type = printer then 672 input = input || copy (" ", ad.phys_line_length + carriage_control_char - length (input)); 673 end; 674 prefix = ""; 675 k = 1; 676 if ad.device_type ^= punch then do; 677 k = 3; 678 ad.escape_output = "0"b; 679 call convert_string_$output (substr (input, 1, 2), addr (ad.remote_ttt_info), prefix, code); 680 ad.escape_output = "1"b; 681 if code ^= 0 then return; 682 end; 683 call convert_string_$output (substr (input, k), addr (ad.remote_ttt_info), output, code); 684 if code ^= 0 then return; 685 output = prefix || output; 686 retry: call iox_$put_chars (comm_iocbp, addrel (addr (output), 1), length (output), code); 687 if code = error_table_$bisync_bid_fail then do; 688 on cleanup begin; 689 quit_mode = "0"b; 690 end; 691 quit_mode = "1"b; 692 signal quit; 693 quit_mode = "0"b; 694 goto retry; 695 end; 696 end; 697 return; 698 699 end put_string; 700 701 get_string: proc; 702 703 /* This proc reads data into the variable card_image up to the preset length */ 704 705 call iox_$get_chars (comm_iocbp, addrel (addr (card_image), 1), 80, num_chars_rec, code); 706 if code ^= 0 then return; 707 card_image = substr (card_image, 1, num_chars_rec); 708 call convert_string_$input (card_image, addr (ad.remote_ttt_info), card_image, code); 709 if code ^= 0 then return; 710 if substr (card_image, num_chars_rec, 1) = EM then 711 card_image = substr (card_image, 1, num_chars_rec -1); 712 char_string = card_image; 713 data_chars = data_chars + length (card_image); 714 charp = addr (substr (char_string, length (card_image) + 1, 1)); 715 remaining_chars = remaining_chars - length (card_image); 716 return; 717 718 end get_string; 719 720 721 ibm2780_io_call: proc; 722 723 /* This proc handles the io_call orders by mapping then into control order calls to this dim */ 724 725 io_call_infop = infop; 726 order = io_call_info.order_name; 727 if order = "set_bsc_modes" then do; 728 local_bsc_modes.char_mode = (ad.char_mode = ebcdic); 729 local_bsc_modes.transparent = ad.transparent; 730 do i = 1 to hbound (io_call_info.args, 1); 731 if io_call_info.args (i) = "ascii" then local_bsc_modes.char_mode = "0"b; 732 else if io_call_info.args (i) = "ebcdic" then local_bsc_modes.char_mode = "1"b; 733 else if io_call_info.args (i) = "transparent" then local_bsc_modes.transparent = "1"b; 734 else if io_call_info.args (i) = "nontransparent" then local_bsc_modes.transparent = "0"b; 735 end; 736 call iox_$control (iocbp, order, addr (local_bsc_modes), code); 737 if code ^= 0 then return; 738 end; 739 else if order = "select_device" then do; 740 device = io_call_info.args (1); 741 call iox_$control (iocbp, order, addr (device), code); 742 end; 743 else if order = "set_multi_record_mode" then do; 744 multi_record_cnt = convert (multi_record_cnt, io_call_info.args (1)); 745 call iox_$control (iocbp, order, addr (multi_record_cnt), code); 746 end; 747 else call iox_$control (comm_iocbp, "io_call", infop, code); 748 return; 749 750 end ibm2780_io_call; 751 752 init_printer: proc; 753 754 /* This proc initializes the printer, setting tabs if required */ 755 756 if ad.ht then call set_tabs; 757 return; 758 759 end init_printer; 760 761 handler: proc; 762 763 /* This proc handles faults that occur while masked */ 764 765 call continue_to_signal_ (code); 766 return; 767 768 end handler; 769 write_nontransparent: proc; 770 771 /* This proc sends the data in ctl_string in a nontransparent mode */ 772 773 774 ad.escape_output = "0"b; 775 call convert_string_$output (ctl_string, addr (ad.remote_ttt_info), ctl_string, code); 776 ad.escape_output = "1"b; 777 if code ^= 0 then return; 778 send_nontransparent.char_string = ctl_string; 779 send_nontransparent.len = length (ctl_string); 780 call iox_$control (comm_iocbp, "send_nontransparent_msg", addr (send_nontransparent), code); 781 782 return; 783 784 end write_nontransparent; 785 end ibm2780_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/08/90 1038.5 ibm2780_.pl1 >spec>install>1023>ibm2780_.pl1 168 1 08/03/78 2121.0 ibm2780_data.incl.pl1 >ldd>include>ibm2780_data.incl.pl1 169 2 08/03/78 2121.0 remote_ttt_info.incl.pl1 >ldd>include>remote_ttt_info.incl.pl1 170 3 05/20/83 1946.4 iocb.incl.pl1 >ldd>include>iocb.incl.pl1 171 4 02/02/78 1329.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 172 5 07/19/79 1647.1 io_call_info.incl.pl1 >ldd>include>io_call_info.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. EM 006462 constant char(1) initial packed unaligned dcl 102 ref 710 ENQ constant char(1) initial packed unaligned dcl 1-38 ref 631 633 ESC constant char(1) initial packed unaligned dcl 1-39 ref 651 HT constant char(1) initial packed unaligned dcl 1-37 ref 651 653 Stream_input constant fixed bin(17,0) initial dcl 4-15 ref 394 410 Stream_input_output constant fixed bin(17,0) initial dcl 4-15 ref 394 410 413 Stream_output constant fixed bin(17,0) initial dcl 4-15 ref 394 413 a_buf_chars parameter fixed bin(21,0) dcl 37 ref 481 491 a_buf_ptr parameter pointer dcl 35 ref 481 492 a_code parameter fixed bin(35,0) dcl 33 set ref 176 180* 363 366* 370* 387 390* 395* 402* 403 428 431* 435* 455 458* 460* 466* 475* 481 485* 487* 495* 502 508* 548* 554 558* 560* 563* 566 570* 615* a_data_chars parameter fixed bin(21,0) dcl 38 set ref 455 465 465 469 481 490* 497* a_data_ptr parameter pointer dcl 36 ref 455 470 a_infop parameter pointer dcl 42 ref 502 506 a_iocbp parameter pointer dcl 30 ref 176 178 363 365 387 389 428 430 455 457 481 483 502 504 554 556 566 568 a_mode parameter fixed bin(17,0) dcl 34 set ref 387 393 402* a_new_modes parameter char packed unaligned dcl 43 ref 566 571 573 a_old_modes parameter char packed unaligned dcl 44 ref 566 a_option parameter varying char array dcl 31 ref 176 217 226 227 229 231 231 233 236 238 238 243 249 255 258 260 263 265 268 270 271 271 273 273 274 276 278 280 281 283 285 286 288 320 358 588 589 591 594 602 603 604 a_order parameter char packed unaligned dcl 41 ref 502 507 a_pos_type parameter fixed bin(17,0) dcl 39 set ref 554 563* a_pos_value parameter fixed bin(21,0) dcl 40 set ref 554 563* a_sw parameter bit(1) packed unaligned dcl 32 ref 176 179 387 actual_iocb_ptr 12 based pointer level 2 dcl 3-6 ref 389 430 457 483 504 556 568 ad based structure level 1 dcl 1-6 addr builtin function dcl 143 ref 210 212 240 240 346 420 518 518 667 679 679 683 683 686 686 705 705 708 708 714 736 736 741 741 745 745 775 775 780 780 addrel builtin function dcl 143 ref 686 686 705 705 adp 001276 automatic pointer dcl 1-4 set ref 182* 188* 193 194 195 196 197 198 199 200 201 203 204 205 206 234 239 240 240 257 262 267 270 271 273 274 276 278 306 307 312 312 339 346 347 367* 382* 391* 399 420 432* 463* 484* 505* 511 512 513 516 518 524 526 533 536 544 557* 569* 571 573 620 620* 630 631 631 631 633 633 633 638 638 639 639 652 664 669 670 671 671 676 678 679 679 680 683 683 708 708 728 729 756 774 775 775 776 any_other 001270 stack reference condition dcl 162 ref 344 352 375 380 408 423 440 450 args 44 based varying char array level 2 dcl 5-10 ref 730 731 732 733 734 740 744 ascii constant fixed bin(17,0) initial dcl 1-28 ref 262 312 513 attach_count 000023 internal static fixed bin(17,0) initial dcl 103 set ref 325 326 329 330* 330 attach_data_ptr 16 based pointer level 2 dcl 3-6 set ref 347* 367 391 432 463 484 505 557 569 attach_desc 53 based varying char(256) level 3 dcl 1-6 set ref 339* 346 attach_descrip_ptr 14 based pointer level 2 dcl 3-6 set ref 183 346* 377* attach_tag 000104 automatic picture(2) packed unaligned dcl 50 set ref 326* 327 bin builtin function dcl 143 ref 591 bits 32 based structure level 2 dcl 1-6 set ref 193* card_image 000561 automatic varying char(80) dcl 69 set ref 1-1 705 705 707* 707 708* 708* 710 710* 710 712 713 714 715 carriage_control_char constant fixed bin(17,0) initial dcl 119 ref 671 carriage_ctl_string 001154 automatic char(8) packed unaligned dcl 77 set ref 244* 246 carriage_ctl_table 000025 internal static char(4) initial array dcl 108 set ref 209* 210 246* char builtin function dcl 143 ref 329 char_mode 0(01) based bit(1) level 2 in structure "set_bsc_modes" packed packed unaligned dcl 90 in procedure "ibm2780_" ref 512 char_mode 27 based fixed bin(17,0) level 3 in structure "ad" dcl 1-6 in procedure "ibm2780_" set ref 199* 262* 267* 312 512* 513* 728 char_mode 0(01) 001266 automatic bit(1) level 2 in structure "local_bsc_modes" packed packed unaligned dcl 88 in procedure "ibm2780_" set ref 728* 731* 732* char_mode_set 001162 automatic bit(1) packed unaligned dcl 80 set ref 221* 261* 266* 303 char_string based char(80) packed unaligned dcl 166 in procedure "ibm2780_" set ref 1-1* 665 667 712* 714 char_string 1 001165 automatic char(256) level 2 in structure "send_nontransparent" dcl 84 in procedure "ibm2780_" set ref 778* charp 000102 automatic pointer dcl 49 set ref 1-1 470* 492* 665 667* 667 712 714* 714 chars 40 based structure level 2 dcl 1-6 set ref 196* cleanup 000000 stack reference condition dcl 160 ref 688 close 36 based entry variable level 2 dcl 3-6 set ref 419* code 000107 automatic fixed bin(35,0) dcl 53 set ref 180* 184* 188* 189 218* 228* 240* 241 292* 297* 313* 320 334* 335 356* 366* 390* 431* 458* 473 475 485* 495 508* 514* 515 518* 529* 538* 545* 548 558* 570* 575* 592* 614* 615 620* 679* 681 683* 684 686* 687 705* 706 708* 709 736* 737 741* 745* 747* 765* 775* 777 780* com_err_ 000064 constant entry external dcl 133 ref 614 com_err_sw 000100 automatic bit(1) packed unaligned dcl 48 set ref 179* 614 comm 001122 automatic varying char(32) dcl 74 set ref 223* 286* 296 332 339 comm_attach_desc 001021 automatic varying char(256) dcl 73 set ref 222* 332* 334 comm_attach_name 000606 automatic varying char(32) dcl 70 set ref 225* 327* 329* 334 comm_attach_options 000720 automatic varying char(256) dcl 72 set ref 222* 236* 236 258* 258 263* 263 268* 268 288* 288 303* 303 304* 304 308* 308 310* 310 332 comm_iocbp 000020 internal static pointer initial dcl 100 set ref 208 333 336* 369 370* 371* 401 402* 434 435* 459 486 509 514* 518* 545* 559 563* 616 617* 618* 686* 705* 747* 780* comm_open 000024 internal static bit(1) initial packed unaligned dcl 104 set ref 401 404* 436* continue_to_signal_ 000046 constant entry external dcl 126 ref 765 control 66 based entry variable level 2 dcl 3-6 set ref 416* 445* conversion 000000 stack reference condition dcl 159 ref 590 convert builtin function dcl 143 ref 744 convert_string_$input 000040 constant entry external dcl 123 ref 708 convert_string_$output 000042 constant entry external dcl 124 ref 679 683 775 copy builtin function dcl 143 ref 670 671 ctl_string 000460 automatic varying char(256) dcl 68 set ref 631* 633* 638* 639* 651* 653* 775* 775* 778 779 data_chars 000130 automatic fixed bin(21,0) dcl 62 set ref 490* 497 713* 713 default_carriage_ctl_table 000156 constant char(4) initial array dcl 107 ref 209 default_slew_ctl_table 000150 constant char(4) initial array dcl 109 ref 211 detach_iocb 26 based entry variable level 2 dcl 3-6 set ref 349* 444* device 000117 automatic char(32) packed unaligned dcl 60 set ref 740* 741 741 device_type 43 based char(32) level 3 dcl 1-6 set ref 524* 526* 533 631 633 638 639 670 671 676 dummy_arg 001144 automatic char(32) packed unaligned dcl 76 set ref 280* ebcdic constant fixed bin(17,0) initial dcl 1-29 ref 199 267 512 728 edited 0(06) based bit(1) level 4 packed packed unaligned dcl 1-6 set ref 544* 571* 573* erase_char 12 based char(1) level 3 dcl 1-6 set ref 204* error_table_$bad_arg 000122 external static fixed bin(35,0) dcl 152 ref 466 error_table_$bad_conversion 000114 external static fixed bin(35,0) dcl 149 ref 592 error_table_$bad_mode 000124 external static fixed bin(35,0) dcl 153 ref 395 575 error_table_$badopt 000134 external static fixed bin(35,0) dcl 157 ref 228 292 297 313 error_table_$bisync_bid_fail 000116 external static fixed bin(35,0) dcl 150 ref 687 error_table_$no_operation 000120 external static fixed bin(35,0) dcl 151 ref 460 487 529 538 560 error_table_$noarg 000132 external static fixed bin(35,0) dcl 156 ref 356 error_table_$not_detached 000126 external static fixed bin(35,0) dcl 154 ref 184 error_table_$wrong_no_of_args 000130 external static fixed bin(35,0) dcl 155 ref 218 escape_output based bit(1) level 4 packed packed unaligned dcl 1-6 set ref 678* 680* 774* 776* fixed 26 based structure level 2 dcl 1-6 set ref 194* get_chars 46 based entry variable level 2 dcl 3-6 set ref 411* get_temp_segment_ 000050 constant entry external dcl 127 ref 188 get_ttt_info_ 000044 constant entry external dcl 125 ref 240 hbound builtin function dcl 143 ref 217 226 285 588 602 730 hcs_$reset_ips_mask 000054 constant entry external dcl 129 ref 351 379 422 449 hcs_$set_ips_mask 000056 constant entry external dcl 130 ref 345 376 409 441 ht 32 based bit(1) level 3 dcl 1-6 set ref 273* 756 i 000113 automatic fixed bin(21,0) dcl 56 set ref 226* 227 229 231 231 233 236 238 238 243 249 255 258 260 263 265 268 270 271 271 273 273 274 276 278 280 281 283 284* 284 285 286 288* 320 358 587* 587 588 589 591 594 601* 601 602 603 604 652* 653 653* 730* 731 732 733 734* ibm2780_conv_$carriage_ctl_table_ptr 000110 external static pointer dcl 147 set ref 210* ibm2780_conv_$slew_ctl_table_ptr 000106 external static pointer dcl 146 set ref 212* info_fixed based fixed bin(17,0) dcl 164 ref 537 537 info_string based char(32) packed unaligned dcl 165 ref 522 523 524 526 526 526 infop 000142 automatic pointer dcl 64 set ref 506* 511 512 514* 522 523 524 526 526 526 537 537 545* 725 747* input 000146 automatic varying char(400) dcl 66 set ref 665* 670* 670 670 671* 671 671 679 679 683 683 input_chars 000105 automatic fixed bin(17,0) dcl 51 set ref 664* 665 666 667 io_call_info based structure level 1 dcl 5-10 io_call_infop 001300 automatic pointer dcl 5-8 set ref 725* 726 730 731 732 733 734 740 744 iocb based structure level 1 dcl 3-6 iocbp 000110 automatic pointer dcl 54 set ref 178* 183 185 346 347 348 349 350* 365* 367 377 378* 389* 391 411 414 416 417 418 419 420 421* 430* 432 442 443 444 445 446 447 448* 457* 463 483* 484 504* 505 556* 557 568* 569 736* 741* 745* iox_$attach_ioname 000066 constant entry external dcl 134 ref 334 iox_$close 000072 constant entry external dcl 136 ref 435 iox_$control 000102 constant entry external dcl 140 ref 514 518 545 736 741 745 747 780 iox_$detach_iocb 000070 constant entry external dcl 135 ref 370 617 iox_$err_no_operation 000104 constant entry external dcl 141 ref 445 446 447 iox_$get_chars 000076 constant entry external dcl 138 ref 705 iox_$open 000074 constant entry external dcl 137 ref 402 iox_$position 000062 constant entry external dcl 132 ref 563 iox_$propagate 000060 constant entry external dcl 131 ref 350 378 421 448 iox_$put_chars 000100 constant entry external dcl 139 ref 686 iox_modes 000000 constant char(24) initial array dcl 4-6 ref 399 j 000114 automatic fixed bin(17,0) dcl 57 set ref 245* 246 246* 251* 252 252* k 000115 automatic fixed bin(17,0) dcl 58 set ref 675* 677* 683 683 kill_char 11 based char(1) level 3 dcl 1-6 set ref 203* last_select 000010 internal static char(32) packed unaligned dcl 99 set ref 331* 522 523* len 001165 automatic fixed bin(17,0) level 2 dcl 84 set ref 779* length builtin function dcl 143 ref 670 671 686 686 713 714 715 779 local_bsc_modes 001266 automatic structure level 1 dcl 88 set ref 736 736 ltrim builtin function dcl 143 ref 329 mask 000112 automatic bit(36) dcl 55 set ref 343* 345* 351* 351* 374* 376* 379* 379* 407* 409* 422* 422* 439* 441* 449* 449* max_arglen 43 based fixed bin(17,0) level 2 dcl 5-10 ref 731 731 732 732 733 733 734 734 740 740 744 744 min builtin function dcl 144 ref 664 mod builtin function dcl 144 ref 653 modes 56 based entry variable level 2 dcl 3-6 set ref 418* 447* multi_record 33 based bit(1) level 3 dcl 1-6 set ref 270* 306 516 518 536* multi_record_cnt 001163 automatic fixed bin(17,0) dcl 81 set ref 516* 517* 518 518 744* 744 745 745 name 1 based char(32) level 2 dcl 3-6 set ref 185* nargs 42 based fixed bin(17,0) level 2 dcl 5-10 ref 730 null builtin function dcl 144 ref 182 183 195 205 208 333 369 371 377 401 434 442 459 486 509 559 616 618 620 num_chars_rec 000106 automatic fixed bin(17,0) dcl 52 set ref 705* 707 710 710 open 32 based entry variable level 2 dcl 3-6 set ref 348* 443* open_descrip_ptr 20 based pointer level 2 dcl 3-6 set ref 420* 442* open_description 154 based varying char(24) level 3 dcl 1-6 set ref 399* 420 open_mode 000116 automatic fixed bin(17,0) dcl 59 set ref 393* 394 394 394 399 410 410 413 413 order 000131 automatic char(32) packed unaligned dcl 63 set ref 507* 510 514* 521 535 543 544 545* 726* 727 736* 739 741* 743 745* order_name 11 based char(32) level 2 dcl 5-10 ref 726 output 000313 automatic varying char(400) dcl 67 set ref 683* 685* 685 686 686 686 686 phys_line_length 26 based fixed bin(17,0) level 3 dcl 1-6 set ref 201* 271* 652 671 position 62 based entry variable level 2 dcl 3-6 set ref 417* 446* prefix 000144 automatic varying char(2) dcl 65 set ref 674* 679* 685 printer 000126 constant char(32) initial packed unaligned dcl 1-34 ref 524 526 533 631 639 671 printer_select 40 based char(2) level 3 in structure "ad" dcl 1-6 in procedure "ibm2780_" set ref 197* 276* 631 639 printer_select constant char(2) initial packed unaligned dcl 112 in procedure "ibm2780_" ref 197 ptrs 36 based structure level 2 dcl 1-6 set ref 195* punch 000136 constant char(32) initial packed unaligned dcl 1-32 ref 526 633 638 670 676 punch_select 41 based char(2) level 3 in structure "ad" dcl 1-6 in procedure "ibm2780_" set ref 198* 278* 633 638 punch_select constant char(2) initial packed unaligned dcl 113 in procedure "ibm2780_" ref 198 put_chars 52 based entry variable level 2 dcl 3-6 set ref 414* quit 000000 stack reference condition dcl 161 ref 692 quit_mode 000022 internal static bit(1) initial packed unaligned dcl 101 set ref 668 689* 691* 693* record_len 30 based fixed bin(17,0) level 3 dcl 1-6 set ref 200* 307* 664 release_temp_segment_ 000052 constant entry external dcl 128 ref 382 620 remaining_chars 000127 automatic fixed bin(21,0) dcl 61 set ref 469* 471 491* 664 666* 666 715* 715 remote_ttt_info based structure level 2 in structure "ad" dcl 1-6 in procedure "ibm2780_" set ref 240 240 679 679 683 683 708 708 775 775 remote_ttt_info based structure level 1 dcl 2-6 in procedure "ibm2780_" rtrim builtin function dcl 144 ref 399 send_nontransparent 001165 automatic structure level 1 dcl 84 set ref 780 780 set_bsc_modes based structure level 1 dcl 90 slew_ctl_string 001156 automatic char(6) packed unaligned dcl 78 set ref 250* 252 slew_ctl_table 000031 internal static char(4) initial array dcl 111 set ref 211* 212 252* space 006461 constant char(1) initial packed unaligned dcl 118 ref 231 236 258 263 268 288 332 332 339 339 399 589 603 str1 parameter char dcl 610 set ref 609 614* str2 parameter char dcl 610 set ref 609 614* substr builtin function dcl 144 set ref 246 252 653* 665 667 679 679 683 683 707 710 710 714 sys_info$max_seg_size 000112 external static fixed bin(17,0) dcl 148 ref 465 teleprinter 000116 constant char(32) initial packed unaligned dcl 1-35 ref 524 temp_iocbp 001160 automatic pointer dcl 79 set ref 334* 336 terminal_attach_options 000617 automatic varying char(256) dcl 71 set ref 224* 231* 231 339 589* 589 603* 603 terminal_device_name 000146 constant char(8) initial packed unaligned dcl 117 set ref 188* 327 329 339 382* 614* 620* terminal_id 42 based char(2) level 3 dcl 1-6 set ref 274* 630 631 633 terminal_type 1 based char(32) level 3 dcl 1-6 set ref 239* trans_mode_set 001164 automatic bit(1) packed unaligned dcl 82 set ref 221* 235* 256* 304 transparent 35 based bit(1) level 3 in structure "ad" dcl 1-6 in procedure "ibm2780_" set ref 234* 257* 312 511* 669 729 transparent based bit(1) level 2 in structure "set_bsc_modes" packed packed unaligned dcl 90 in procedure "ibm2780_" ref 511 transparent 001266 automatic bit(1) level 2 in structure "local_bsc_modes" packed packed unaligned dcl 88 in procedure "ibm2780_" set ref 729* 733* 734* ttt_bits based structure level 3 dcl 1-6 set ref 206* ttt_ptrs 14 based structure level 3 dcl 1-6 set ref 205* tty 001133 automatic varying char(32) dcl 75 set ref 223* 281* 291 332 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 4-15 Direct_output internal static fixed bin(17,0) initial dcl 4-15 Direct_update internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 4-15 Sequential_input internal static fixed bin(17,0) initial dcl 4-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 4-15 Sequential_output internal static fixed bin(17,0) initial dcl 4-15 Sequential_update internal static fixed bin(17,0) initial dcl 4-15 io_call_af_ret based varying char dcl 5-25 iox_$iocb_version_sentinel external static char(4) dcl 3-51 reader internal static char(32) initial packed unaligned dcl 1-31 rttp automatic pointer dcl 2-3 short_iox_modes internal static char(4) initial array dcl 4-12 special internal static char(32) initial packed unaligned dcl 1-33 NAMES DECLARED BY EXPLICIT CONTEXT. abort_attach 005075 constant entry internal dcl 609 ref 185 189 219 229 241 293 298 314 320 335 358 594 attach_return 003053 constant label dcl 354 set ref 622 bad_dec_arg 004713 constant label dcl 592 set ref 590 bad_mode 003333 constant label dcl 395 check_attach_description 004537 constant entry internal dcl 578 ref 319 control_ret 004374 constant label dcl 548 ref 515 522 530 539 cv_dec_arg 004542 constant entry internal dcl 585 ref 271 do_control 004350 constant label dcl 545 ref 541 get_arg 004772 constant entry internal dcl 598 ref 239 244 250 274 276 278 280 281 get_chars_ret 004054 constant label dcl 495 get_string 005710 constant entry internal dcl 701 ref 494 handler 006335 constant entry internal dcl 761 ref 344 375 408 440 ibm2780_ 000540 constant entry external dcl 26 ibm2780_attach 000560 constant entry external dcl 176 ibm2780_close 003551 constant entry external dcl 428 ref 419 ibm2780_control 004066 constant entry external dcl 502 ref 416 ibm2780_detach 003131 constant entry external dcl 363 ref 349 444 ibm2780_get_chars 004011 constant entry external dcl 481 ref 411 ibm2780_io_call 006030 constant entry internal dcl 721 ref 543 ibm2780_modes 004457 constant entry external dcl 566 ref 418 ibm2780_open 003302 constant entry external dcl 387 ref 348 443 ibm2780_position 004404 constant entry external dcl 554 ref 417 ibm2780_put_chars 003716 constant entry external dcl 455 ref 414 init_printer 006326 constant entry internal dcl 752 ref 533 no_arg 003054 constant label dcl 356 ref 285 588 602 nop 004301 constant label dcl 529 ref 509 put_chars_ret 004001 constant label dcl 475 ref 473 put_string 005343 constant entry internal dcl 660 ref 472 retry 005624 constant label dcl 686 ref 694 select_device 005221 constant entry internal dcl 626 ref 532 set_tabs 005311 constant entry internal dcl 647 ref 756 write_nontransparent 006352 constant entry internal dcl 769 ref 642 655 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7252 7410 6464 7262 Length 10030 6464 136 404 566 30 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ibm2780_ 1066 external procedure is an external procedure. on unit on line 344 64 on unit on unit on line 375 64 on unit on unit on line 408 64 on unit on unit on line 440 64 on unit check_attach_description internal procedure shares stack frame of external procedure ibm2780_. cv_dec_arg 248 internal procedure enables or reverts conditions. on unit on line 590 64 on unit get_arg 67 internal procedure uses returns(char(*)) or returns(bit(*)). abort_attach 85 internal procedure is called during a stack extension. select_device internal procedure shares stack frame of external procedure ibm2780_. set_tabs internal procedure shares stack frame of external procedure ibm2780_. put_string 100 internal procedure enables or reverts conditions. on unit on line 688 64 on unit get_string internal procedure shares stack frame of external procedure ibm2780_. ibm2780_io_call internal procedure shares stack frame of external procedure ibm2780_. init_printer internal procedure shares stack frame of external procedure ibm2780_. handler 68 internal procedure is called by several nonquick procedures. write_nontransparent internal procedure shares stack frame of external procedure ibm2780_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 last_select ibm2780_ 000020 comm_iocbp ibm2780_ 000022 quit_mode ibm2780_ 000023 attach_count ibm2780_ 000024 comm_open ibm2780_ 000025 carriage_ctl_table ibm2780_ 000031 slew_ctl_table ibm2780_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ibm2780_ 000100 com_err_sw ibm2780_ 000102 charp ibm2780_ 000104 attach_tag ibm2780_ 000105 input_chars ibm2780_ 000106 num_chars_rec ibm2780_ 000107 code ibm2780_ 000110 iocbp ibm2780_ 000112 mask ibm2780_ 000113 i ibm2780_ 000114 j ibm2780_ 000115 k ibm2780_ 000116 open_mode ibm2780_ 000117 device ibm2780_ 000127 remaining_chars ibm2780_ 000130 data_chars ibm2780_ 000131 order ibm2780_ 000142 infop ibm2780_ 000144 prefix ibm2780_ 000146 input ibm2780_ 000313 output ibm2780_ 000460 ctl_string ibm2780_ 000561 card_image ibm2780_ 000606 comm_attach_name ibm2780_ 000617 terminal_attach_options ibm2780_ 000720 comm_attach_options ibm2780_ 001021 comm_attach_desc ibm2780_ 001122 comm ibm2780_ 001133 tty ibm2780_ 001144 dummy_arg ibm2780_ 001154 carriage_ctl_string ibm2780_ 001156 slew_ctl_string ibm2780_ 001160 temp_iocbp ibm2780_ 001162 char_mode_set ibm2780_ 001163 multi_record_cnt ibm2780_ 001164 trans_mode_set ibm2780_ 001165 send_nontransparent ibm2780_ 001266 local_bsc_modes ibm2780_ 001276 adp ibm2780_ 001300 io_call_infop ibm2780_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac tra_ext_1 mdfx1 signal_op enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc return_chars_eis any_to_any_truncate_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ continue_to_signal_ convert_string_$input convert_string_$output get_temp_segment_ get_ttt_info_ hcs_$reset_ips_mask hcs_$set_ips_mask iox_$attach_ioname iox_$close iox_$control iox_$detach_iocb iox_$err_no_operation iox_$get_chars iox_$open iox_$position iox_$propagate iox_$put_chars release_temp_segment_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$bad_conversion error_table_$bad_mode error_table_$badopt error_table_$bisync_bid_fail error_table_$no_operation error_table_$noarg error_table_$not_detached error_table_$wrong_no_of_args ibm2780_conv_$carriage_ctl_table_ptr ibm2780_conv_$slew_ctl_table_ptr sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 26 000537 1 1 000545 176 000552 178 000576 179 000602 180 000607 182 000611 183 000613 184 000616 185 000620 188 000636 189 000657 193 000700 194 000705 195 000711 196 000713 197 000724 198 000726 199 000730 200 000732 201 000734 203 000735 204 000737 205 000741 206 000747 208 000765 209 000772 210 001000 211 001002 212 001005 217 001007 218 001014 219 001016 221 001035 222 001037 223 001041 224 001043 225 001044 226 001045 227 001057 228 001076 229 001102 230 001133 231 001134 233 001212 234 001222 235 001225 236 001226 237 001263 238 001265 239 001277 240 001315 241 001331 242 001352 243 001353 244 001360 245 001375 246 001403 247 001412 248 001414 249 001415 250 001422 251 001440 252 001447 253 001455 254 001457 255 001460 256 001465 257 001467 258 001471 259 001526 260 001530 261 001535 262 001537 263 001542 264 001577 265 001601 266 001606 267 001610 268 001613 269 001650 270 001652 271 001663 273 001705 274 001723 276 001750 278 001776 280 002024 281 002050 283 002101 284 002107 285 002110 286 002114 287 002131 288 002132 289 002167 291 002172 292 002177 293 002202 296 002221 297 002226 298 002231 303 002250 304 002264 306 002300 307 002303 308 002305 309 002317 310 002320 312 002332 313 002337 314 002342 319 002361 320 002362 325 002427 326 002434 327 002444 328 002460 329 002462 330 002526 331 002530 332 002533 333 002610 334 002615 335 002661 336 002703 339 002706 343 002757 344 002761 345 003003 346 003016 347 003022 348 003024 349 003030 350 003033 351 003042 352 003052 354 003053 356 003054 358 003057 363 003123 365 003141 366 003145 367 003147 369 003151 370 003156 371 003166 374 003171 375 003172 376 003214 377 003227 378 003232 379 003241 380 003251 382 003252 383 003274 387 003275 389 003312 390 003317 391 003321 393 003323 394 003325 395 003333 396 003336 399 003337 401 003367 402 003376 403 003414 404 003416 407 003421 408 003422 409 003444 410 003457 411 003466 413 003473 414 003500 416 003505 417 003512 418 003515 419 003520 420 003523 421 003526 422 003535 423 003545 424 003546 428 003547 430 003561 431 003566 432 003570 434 003572 435 003577 436 003607 439 003611 440 003612 441 003634 442 003647 443 003652 444 003656 445 003661 446 003665 447 003667 448 003671 449 003677 450 003707 451 003710 455 003711 457 003730 458 003735 459 003737 460 003744 461 003746 463 003747 465 003751 466 003757 467 003761 469 003762 470 003764 471 003767 472 003772 473 003776 474 004000 475 004001 477 004003 481 004004 483 004023 484 004030 485 004032 486 004034 487 004041 488 004043 490 004044 491 004046 492 004050 494 004053 495 004054 497 004056 498 004060 502 004061 504 004104 505 004111 506 004113 507 004116 508 004123 509 004125 510 004132 511 004136 512 004141 513 004147 514 004151 515 004174 516 004176 517 004204 518 004206 520 004241 521 004242 522 004246 523 004252 524 004255 526 004265 529 004301 530 004303 532 004304 533 004305 534 004313 535 004314 536 004320 537 004322 538 004327 539 004331 541 004332 543 004333 544 004341 545 004350 548 004374 550 004376 554 004377 556 004414 557 004421 558 004423 559 004425 560 004432 561 004434 563 004435 564 004451 566 004452 568 004502 569 004507 570 004511 571 004513 573 004524 575 004533 576 004536 578 004537 583 004540 585 004541 587 004547 588 004551 589 004561 590 004633 591 004653 592 004713 594 004717 596 004764 598 004771 601 004777 602 005001 603 005011 604 005063 609 005074 614 005115 615 005145 616 005150 617 005155 618 005166 620 005171 622 005216 626 005221 630 005222 631 005230 633 005245 635 005262 636 005263 638 005264 639 005275 640 005306 642 005307 643 005310 647 005311 651 005312 652 005317 653 005327 654 005336 655 005340 656 005341 660 005342 664 005350 665 005357 666 005367 667 005371 668 005375 669 005377 670 005401 671 005427 673 005456 674 005457 675 005460 676 005462 677 005466 678 005470 679 005472 680 005524 681 005527 683 005531 684 005575 685 005601 686 005624 687 005653 688 005660 689 005674 690 005675 691 005676 692 005701 693 005704 694 005706 697 005707 701 005710 705 005711 706 005737 707 005742 708 005747 709 005775 710 006000 712 006013 713 006020 714 006022 715 006025 716 006027 721 006030 725 006031 726 006033 727 006037 728 006043 729 006053 730 006057 731 006067 732 006112 733 006122 734 006132 735 006141 736 006143 737 006171 738 006174 739 006175 740 006201 741 006205 742 006233 743 006234 744 006240 745 006250 746 006276 747 006277 748 006325 752 006326 756 006327 757 006333 761 006334 765 006342 766 006351 769 006352 774 006353 775 006355 776 006403 777 006405 778 006410 779 006414 780 006416 782 006447 ----------------------------------------------------------- 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