COMPILATION LISTING OF SEGMENT plio2_open_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/05/86 1034.7 mst Wed Options: optimize map 1 /* ****************************************************** 2* * * 3* * * 4* * Copyright (c) 1972 by Massachusetts Institute of * 5* * Technology and Honeywell Information Systems, Inc. * 6* * * 7* * * 8* ****************************************************** */ 9 10 plio2_open_: proc options (support); 11 12 /* Modified 790710 by PCK to fix bug 1845 */ 13 /* Modified 790327 by RAB to use stackframeptr builtin */ 14 /* Modified 780706 by PG to fix close_in_this_static to unthread multiple fsb's properly */ 15 /* Modified 780309 by PG to fix 1706 (sysprint didn't get print attribute if opened explicitly) */ 16 /* Modified 78.01.31 by RAB for close_in_this_static */ 17 /* Modified 77.09.19 by RAB to fix 1674 in which get_chars was attempted for I/O modules that didn't support it */ 18 /* Modified 770823 by PG to permit read & write statements on stream files */ 19 /* 77-03-04: changed to support quick pl1 io by adding the "console" bit to the fsb */ 20 /* 76-09-08: changed to use iox_$foo call forwarder */ 21 /* 76-03-12: changed to get right referencing_dir for search rules in call to iox_$attach */ 22 /* 75-05-27: changed to fix bug 1363 */ 23 /* 74-12-17: modified for bit_string in job_bits,lock checking removed */ 24 /* 74-12-2: modified for env(stringvalue) */ 25 /* 74.09.12: fixed for add_finish_handler */ 26 /* 73-12-3: updated for new io (iox). */ 27 28 /* parameters */ 29 30 dcl (pspp ptr, 31 xname char (*) 32 ) parameter; 33 34 /* based */ 35 36 dcl bch168 char (168) aligned based; 37 dcl based_label label based; 38 dcl 1 fab aligned based, 39 2 switch bit (36) aligned, 40 2 name char (32) aligned, 41 2 (line_size, page_size, buffer_size) fixed bin (17), 42 2 ch168p ptr; 43 44 /* builtins */ 45 46 dcl (addr, baseno, bit, fixed, min, null, rel, stackframeptr, string, substr) builtin; 47 48 /* entries */ 49 50 dcl hcs_$make_ptr entry (ptr, char (*), char (*), ptr, fixed bin (35)); 51 dcl ioa_ options (variable); 52 dcl plio2_recio_$recio_close_ ext entry (ptr); 53 dcl plio2_signal_$s_ ext entry (ptr, char (*), char (*), fixed bin (15)); 54 dcl plio2_signal_$s_r_ ext entry (ptr, char (*), char (*), fixed bin (15)); 55 dcl com_err_ entry options (variable); 56 dcl get_line_length_$switch entry (ptr, fixed bin (35)) returns (fixed bin); 57 dcl add_epilogue_handler_ entry (entry, fixed bin (35)); 58 dcl iox_$find_iocb entry (char (*), ptr, fixed bin (35)); 59 dcl iox_$open entry (ptr, fixed bin, bit (1) aligned, fixed bin (35)); 60 dcl iox_$position entry (ptr, fixed bin, fixed bin(21), fixed bin(35)); 61 dcl iox_$close entry (ptr, fixed bin (35)); 62 dcl iox_$detach_iocb entry (ptr, fixed bin (35)); 63 dcl unique_bits_ entry returns (bit (70)); 64 dcl unique_chars_ entry (bit (*)) returns (char (15)); 65 dcl iox_$attach_ptr entry (ptr, char (*), ptr, fixed bin (35)); 66 dcl iox_$err_no_operation entry; 67 68 /* external static */ 69 70 dcl plio2_data_$max_page_size fixed bin (35) external; 71 72 /* internal static */ 73 74 dcl begining_of_file fixed bin int static options(constant) initial(-1); 75 dcl debug_sw fixed bin (15) static internal init (0); 76 77 /* automatic */ 78 79 dcl evx entry variable; 80 dcl code fixed bin (35); 81 dcl (psp, fsbp, fabp, fab2p) ptr; 82 dcl (i, iroute, erno) fixed bin (15); 83 dcl title_option bit (1) aligned; 84 dcl lnzc_set bit (1) aligned init ("0"b); 85 dcl condition char (13) init ("ERROR"); 86 dcl fab2px ptr; 87 dcl (default_ps, default_ls) fixed bin (35); 88 dcl (A18, B18) bit (18) aligned; 89 dcl nono_18 bit (18) aligned; 90 dcl iocb_name char (32); 91 dcl iocb_status fixed bin (35) init (0); 92 dcl iocb_p ptr; 93 dcl iocb_title char (200); 94 dcl iocb_attach_type fixed bin; 95 dcl 1 temp_file aligned like file_value; 96 dcl 1 temp_ps aligned like ps; 97 dcl fabprime bit (36) aligned; 98 99 /* include files */ 100 1 1 /* BEGIN INCLUDE FILE ... stack_frame.incl.pl1 ... */ 1 2 1 3 /* format: off */ 1 4 1 5 /* Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr and pl1_ps_ptr */ 1 6 /* Modified: 3 Feb 1978, P. Krupp - to add run_unit_manager bit & main_proc bit */ 1 7 /* Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr */ 1 8 /* Modified: 03/01/84, S. Herbst - Added RETURN_PTR_MASK */ 1 9 1 10 1 11 /****^ HISTORY COMMENTS: 1 12* 1) change(86-09-15,Kissel), approve(86-09-15,MCR7473), 1 13* audit(86-10-01,Fawcett), install(86-11-03,MR12.0-1206): 1 14* Modified to add constants for the translator_id field in the stack_frame 1 15* structure. 1 16* END HISTORY COMMENTS */ 1 17 1 18 1 19 dcl RETURN_PTR_MASK bit (72) int static options (constant) /* mask to be AND'd with stack_frame.return_ptr */ 1 20 init ("777777777777777777000000"b3); /* when copying, to ignore bits that a call fills */ 1 21 /* with indicators (nonzero for Fortran hexfp caller) */ 1 22 /* say: unspec(ptr) = unspec(stack_frame.return_ptr) & RETURN_PTR_MASK; */ 1 23 1 24 dcl TRANSLATOR_ID_PL1V2 bit (18) internal static options (constant) init ("000000"b3); 1 25 dcl TRANSLATOR_ID_ALM bit (18) internal static options (constant) init ("000001"b3); 1 26 dcl TRANSLATOR_ID_PL1V1 bit (18) internal static options (constant) init ("000002"b3); 1 27 dcl TRANSLATOR_ID_SIGNAL_CALLER bit (18) internal static options (constant) init ("000003"b3); 1 28 dcl TRANSLATOR_ID_SIGNALLER bit (18) internal static options (constant) init ("000004"b3); 1 29 1 30 1 31 dcl sp pointer; /* pointer to beginning of stack frame */ 1 32 1 33 dcl stack_frame_min_length fixed bin static init(48); 1 34 1 35 1 36 dcl 1 stack_frame based(sp) aligned, 1 37 2 pointer_registers(0 : 7) ptr, 1 38 2 prev_sp pointer, 1 39 2 next_sp pointer, 1 40 2 return_ptr pointer, 1 41 2 entry_ptr pointer, 1 42 2 operator_and_lp_ptr ptr, /* serves as both */ 1 43 2 arg_ptr pointer, 1 44 2 static_ptr ptr unaligned, 1 45 2 support_ptr ptr unal, /* only used by fortran I/O */ 1 46 2 on_unit_relp1 bit(18) unaligned, 1 47 2 on_unit_relp2 bit(18) unaligned, 1 48 2 translator_id bit(18) unaligned, /* Translator ID (see constants above) 1 49* 0 => PL/I version II 1 50* 1 => ALM 1 51* 2 => PL/I version I 1 52* 3 => signal caller frame 1 53* 4 => signaller frame */ 1 54 2 operator_return_offset bit(18) unaligned, 1 55 2 x(0: 7) bit(18) unaligned, /* index registers */ 1 56 2 a bit(36), /* accumulator */ 1 57 2 q bit(36), /* q-register */ 1 58 2 e bit(36), /* exponent */ 1 59 2 timer bit(27) unaligned, /* timer */ 1 60 2 pad bit(6) unaligned, 1 61 2 ring_alarm_reg bit(3) unaligned; 1 62 1 63 1 64 dcl 1 stack_frame_flags based(sp) aligned, 1 65 2 pad(0 : 7) bit(72), /* skip over prs */ 1 66 2 xx0 bit(22) unal, 1 67 2 main_proc bit(1) unal, /* on if frame belongs to a main procedure */ 1 68 2 run_unit_manager bit(1) unal, /* on if frame belongs to run unit manager */ 1 69 2 signal bit(1) unal, /* on if frame belongs to logical signal_ */ 1 70 2 crawl_out bit(1) unal, /* on if this is a signal caller frame */ 1 71 2 signaller bit(1) unal, /* on if next frame is signaller's */ 1 72 2 link_trap bit(1) unal, /* on if this frame was made by the linker */ 1 73 2 support bit(1) unal, /* on if frame belongs to a support proc */ 1 74 2 condition bit(1) unal, /* on if condition established in this frame */ 1 75 2 xx0a bit(6) unal, 1 76 2 xx1 fixed bin, 1 77 2 xx2 fixed bin, 1 78 2 xx3 bit(25) unal, 1 79 2 old_crawl_out bit (1) unal, /* on if this is a signal caller frame */ 1 80 2 old_signaller bit(1) unal, /* on if next frame is signaller's */ 1 81 2 xx3a bit(9) unaligned, 1 82 2 xx4(9) bit(72) aligned, 1 83 2 v2_pl1_op_ret_base ptr, /* When a V2 PL/I program calls an operator the 1 84* * operator puts a pointer to the base of 1 85* * the calling procedure here. (text base ptr) */ 1 86 2 xx5 bit(72) aligned, 1 87 2 pl1_ps_ptr ptr; /* ptr to ps for this frame; also used by fio. */ 1 88 1 89 /* format: on */ 1 90 1 91 /* END INCLUDE FILE ... stack_frame.incl.pl1 */ 101 2 1 /* BEGIN INCLUDE FILE ... pl1_file_value.incl.pl1 */ 2 2 2 3 dcl 1 file_value aligned based, 2 4 2 fab_ptr ptr, /* ptr to file attribute block (fab) */ 2 5 2 fsb_ptr ptr; /* ptr to file state block (fsb) */ 2 6 2 7 /* END INCLUDE FILE ... pl1_file_value.incl.pl1 */ 102 3 1 /* BEGIN INCLUDE FILE ... plio2_fsb.incl.pl1 */ 3 2 /* format: style3,idind30 */ 3 3 3 4 declare 1 fsb aligned based (fsbp), 3 5 2 switch aligned, 3 6 3 zot (2) bit (1) unaligned, 3 7 3 version_2 bit (1) unaligned, 3 8 3 open bit (1) unaligned, 3 9 3 print bit (1) unaligned, 3 10 3 input bit (1) unaligned, 3 11 3 output bit (1) unaligned, 3 12 3 update bit (1) unaligned, 3 13 3 stream bit (1) unaligned, 3 14 3 notkeyed bit (1) unaligned, 3 15 3 record bit (1) unaligned, 3 16 3 sequential bit (1) unaligned, 3 17 3 direct bit (1) unaligned, 3 18 3 interactive bit (1) unaligned, 3 19 3 not_used_1 bit (1) unaligned, 3 20 3 not_used_2 bit (1) unaligned, 3 21 3 stringvalue bit (1) unaligned, 3 22 3 keyed bit (1) unaligned, 3 23 3 namelist bit (1) unaligned, 3 24 3 implementation bit (1) unaligned, 3 25 3 not_used_4 bit (1) unaligned, /* old get-input eof flag */ 3 26 3 transmit_error bit (1) unaligned, 3 27 3 buffer_in_use bit (1) unaligned, 3 28 3 copy bit (1) unaligned, 3 29 3 detach bit (1) unaligned, 3 30 3 te_hold bit (1) unaligned, 3 31 3 not_used_5 bit (1) unaligned, 3 32 3 internal bit (1) unaligned, 3 33 3 threaded bit (1) unaligned, 3 34 3 fsb_in_use bit (1) unaligned, 3 35 3 console bit (1) unaligned, 3 36 3 emptyline bit (1) unaligned, 3 37 3 iox_close bit (1) unaligned, 3 38 3 xxx4 bit (1) unaligned, 3 39 3 xxx5 bit (1) unaligned, 3 40 3 xxx6 bit (1) unaligned, 3 41 2 nono aligned, 3 42 3 bit_string bit (1) unaligned, 3 43 3 not_used_3 bit (1) unaligned, 3 44 3 read bit (1) unaligned, 3 45 3 write bit (1) unaligned, 3 46 3 rewrite bit (1) unaligned, 3 47 3 delete bit (1) unaligned, 3 48 3 locate bit (1) unaligned, 3 49 3 key bit (1) unaligned, 3 50 3 keyto bit (1) unaligned, 3 51 3 keyfrom bit (1) unaligned, 3 52 3 set bit (1) unaligned, 3 53 3 into bit (1) unaligned, 3 54 3 ignore bit (1) unaligned, 3 55 3 from bit (1) unaligned, 3 56 3 nofrom bit (1) unaligned, 3 57 3 nokey bit (1) unaligned, 3 58 3 nokeyfrom bit (1) unaligned, 3 59 3 nolock bit (1) unaligned, 3 60 2 lsep fixed bin (15), /* (1,COMMA)(2,BL)(3,TAB)(4,NL)(5,SEMI) */ 3 61 2 iocb_p ptr unaligned, /* identifies data_set to iox_ */ 3 62 2 blc fixed bin (21), /* buffer's last character (input) */ 3 63 2 bsize fixed bin (21), /* size of buffer */ 3 64 2 bptr ptr, /* address of buffer */ 3 65 2 bnc fixed bin (15), /* next character in buffer */ 3 66 2 kol fixed bin (15), /* last column read from or written into */ 3 67 2 lsize fixed bin (15), /* line size (output) */ 3 68 2 lineno fixed bin (15), /* current line (output) - starts at 1 on each new page */ 3 69 2 psize fixed bin (35), /* page size (output) */ 3 70 2 pageno fixed bin (15), /* current page number, starts at 1 */ 3 71 2 limit fixed bin (15), 3 72 2 lnzc fixed bin (35), 3 73 2 filename char (32) aligned, /* declared file name */ 3 74 2 title char (32) unaligned,/* Multics I/O switch */ 3 75 2 fsb_thread ptr, 3 76 2 buffer (212) fixed bin (15), 3 77 2 path_name char (168) unal, /* title option */ 3 78 2 declared_attributes (2) bit (36) aligned; 3 79 3 80 declare xbuf char (1000) unaligned based (fsb.bptr); 3 81 3 82 /* END INCLUDE FILE ... plio2_fsb.incl.pl1 */ 103 4 1 /* BEGIN INCLUDE FILE ... plio2_fsbr.incl.pl1 */ 4 2 /* format: style3,idind30 */ 4 3 4 4 /* This declaration is used by record I/O runtime programs */ 4 5 4 6 declare 1 fsbr aligned based (fsbp), 4 7 2 switch aligned, 4 8 3 zot (2) bit (1) unaligned, 4 9 3 version_2 bit (1) unaligned, 4 10 3 open bit (1) unaligned, 4 11 3 print bit (1) unaligned, 4 12 3 input bit (1) unaligned, 4 13 3 output bit (1) unaligned, 4 14 3 update bit (1) unaligned, 4 15 3 stream bit (1) unaligned, 4 16 3 notkeyed bit (1) unaligned, 4 17 3 record bit (1) unaligned, 4 18 3 sequential bit (1) unaligned, 4 19 3 direct bit (1) unaligned, 4 20 3 interactive bit (1) unaligned, 4 21 3 not_used_1 bit (1) unaligned, 4 22 3 not_used_2 bit (1) unaligned, 4 23 3 stringvalue bit (1) unaligned, 4 24 3 keyed bit (1) unaligned, 4 25 3 namelist bit (1) unaligned, 4 26 3 implementation bit (1) unaligned, 4 27 3 not_used_4 bit (1) unaligned, 4 28 3 transmit_error bit (1) unaligned, 4 29 3 buffer_in_use bit (1) unaligned, 4 30 3 copy bit (1) unaligned, 4 31 3 detach bit (1) unaligned, 4 32 3 te_hold bit (1) unaligned, 4 33 3 not_used_5 bit (1) unaligned, 4 34 3 internal bit (1) unaligned, 4 35 3 threaded bit (1) unaligned, 4 36 3 fsb_in_use bit (1) unaligned, 4 37 3 console bit (1) unaligned, 4 38 3 emptyline bit (1) unaligned, 4 39 3 iox_close bit (1) unaligned, 4 40 3 pad4 bit (1) unaligned, 4 41 3 pad5 bit (1) unaligned, 4 42 3 pad6 bit (1) unaligned, 4 43 2 nono aligned, 4 44 3 bit_string bit (1) unaligned, 4 45 3 not_used_3 bit (1) unaligned, 4 46 3 read bit (1) unaligned, 4 47 3 write bit (1) unaligned, 4 48 3 rewrite bit (1) unaligned, 4 49 3 delete bit (1) unaligned, 4 50 3 locate bit (1) unaligned, 4 51 3 key bit (1) unaligned, 4 52 3 keyto bit (1) unaligned, 4 53 3 keyfrom bit (1) unaligned, 4 54 3 set bit (1) unaligned, 4 55 3 into bit (1) unaligned, 4 56 3 ignore bit (1) unaligned, 4 57 3 from bit (1) unaligned, 4 58 3 nofrom bit (1) unaligned, 4 59 3 nokey bit (1) unaligned, 4 60 3 nokeyfrom bit (1) unaligned, 4 61 3 nolock bit (1) unaligned, 4 62 2 recio aligned, 4 63 3 rec_exists bit (1) unal, 4 64 3 rec_valid bit (1) unal, 4 65 3 buffer_used bit (1) unal, 4 66 2 iocb_p ptr unal, 4 67 2 inbuf_curlen fixed bin (15), 4 68 2 inbuf_maxlen fixed bin (15), 4 69 2 inbuf_ptr ptr, 4 70 2 inbuf_sw aligned, 4 71 3 exists bit (1) unal, 4 72 3 free bit (1) unal, 4 73 3 use bit (1) unal, 4 74 2 pad7 bit (36) aligned, 4 75 2 outbuf_curlen fixed bin (15), 4 76 2 outbuf_maxlen fixed bin (15), 4 77 2 outbuf_ptr ptr, 4 78 2 outbuf_sw aligned, 4 79 3 exists bit (1) unal, 4 80 3 free bit (1) unal, 4 81 3 use bit (1) unal, 4 82 3 keyed bit (1) unal, 4 83 2 lnzc fixed bin (35), /* last nonzero code from iox_ */ 4 84 2 filename char (32) aligned, /* declared file name */ 4 85 2 title char (32) unaligned,/* Multics I/O switch */ 4 86 2 fsb_thread ptr, 4 87 2 outbuf_key char (256) varying, /* if file is keyed & output_sw.use then key is here */ 4 88 2 key_saved char (256) varying, /* if file is keyed & recio.rec_valid then its key is here */ 4 89 2 buffer (82) bit (36) aligned, 4 90 2 path_name char (168) unal, /* title option */ 4 91 2 declared_attributes (2) bit (36) aligned; 4 92 4 93 /* END INCLUDE FILE ... plio2_fsbr.incl.pl1 */ 104 5 1 /* BEGIN INCLUDE FILE ... plio2_ps.incl.pl1 */ 5 2 /* Stream I/O data block used by PL/I I/O runtime routines. 5 3* 5 4* Modified: 31 January 1978 by RAB to change plio2_data_$fsb_thread to plio2_data_fsb_thread_ 5 5**/ 5 6 /* format: style3,idind30 */ 5 7 5 8 /* based */ 5 9 5 10 declare 1 ps aligned based (psp),/* items set NORMALLY by compiled procedures */ 5 11 2 stack_frame_p ptr, /* items set in block prologue */ 5 12 2 ST_top_p ptr, 5 13 2 ST_block_p ptr, 5 14 2 format_area_p ptr, 5 15 2 ss_list_p ptr, 5 16 2 ab_return, /* items set in prep call */ 5 17 3 abret (3) ptr, 5 18 2 source_p ptr, /* addr(fakefsb) for string option, 5 19* addr(file) for explicit file option */ 5 20 2 special_list_p ptr, /* addr(OKlist) for get data, addr(format_list) for edit */ 5 21 2 copy_file_p ptr, 5 22 2 job aligned, 5 23 3 explicit_file bit (1) unal, 5 24 3 string bit (1) unal, 5 25 3 varying_string bit (1) unal, 5 26 3 data bit (1) unal, 5 27 3 edit bit (1) unal, 5 28 3 list bit (1) unal, 5 29 3 get bit (1) unal, 5 30 3 put bit (1) unal, 5 31 3 page bit (1) unal, 5 32 3 line bit (1) unal, 5 33 3 skip bit (1) unal, 5 34 3 copy bit (1) unal, 5 35 3 p1p2 bit (1) unal, 5 36 3 bit_string bit (1) unal, /* for environment(stringvalue) */ 5 37 3 char_string bit (1) unal, 5 38 3 read bit (1) unal, 5 39 3 write bit (1) unal, 5 40 3 rewrite bit (1) unal, 5 41 3 delete bit (1) unal, 5 42 3 locate bit (1) unal, 5 43 3 key bit (1) unal, 5 44 3 keyto bit (1) unal, 5 45 3 keyfrom bit (1) unal, 5 46 3 set bit (1) unal, 5 47 3 into bit (1) unal, 5 48 3 ignore bit (1) unal, 5 49 3 from bit (1) unal, 5 50 3 version bit (6) unal, 5 51 3 not_byte_buffer bit (1) unal, 5 52 3 pad1 bit (1) unal, 5 53 3 packed_ptr bit (1) unal, 5 54 2 number fixed bin (15), 5 55 2 value_p ptr, /* items set NORMALLY by compiled procedures per transmission */ 5 56 2 descriptor bit (36) aligned, 5 57 2 length fixed bin (15), /* may be swallowed into descriptor */ 5 58 2 top_half bit (18) unal, 5 59 2 offset bit (18) unal, 5 60 2 prep fixed bin (15), /* items treated ABNORMALLY, written by user and PLIO */ 5 61 2 new_format fixed bin (15), 5 62 2 switch aligned, /* items used by PLIO and not touched by compiled procedures */ 5 63 3 first_field bit (1) unal, 5 64 3 file bit (1) unal, 5 65 3 transmit_error bit (1) unal, 5 66 3 semi_sep bit (1) unal, 5 67 3 pad2 bit (32) unal, 5 68 2 file_p ptr, 5 69 2 fsbp ptr, 5 70 2 auxp ptr, /* used as addr(ldidata) for GETs */ 5 71 2 fabp ptr, 5 72 2 fab2p ptr, 5 73 2 vp ptr, 5 74 2 descr bit (36) aligned, 5 75 2 start_copy fixed bin (15), 5 76 2 quick_stream_storage, 5 77 3 a_stored fixed bin (35), 5 78 3 q_stored fixed bin (35); 5 79 5 80 /* external static */ 5 81 5 82 declare ( 5 83 plio2_data_$pspstat, 5 84 plio2_data_$fsbpstat, 5 85 plio2_data_$badfsbp, 5 86 plio2_data_$fabpstat, 5 87 plio2_data_$fab2pstat, 5 88 plio2_data_$pliostringfsbp 5 89 ) ptr external static; 5 90 5 91 dcl plio2_data_fsb_thread_ ptr ext static initial (null); 5 92 /* *system var */ 5 93 5 94 declare ( 5 95 plio2_data_$badjob bit (36) aligned, 5 96 plio2_data_$undef_file_sw bit (1) aligned 5 97 ) external static; 5 98 5 99 /* END INCLUDE FILE ... plio2_ps.incl.pl1 */ 105 6 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 6 2 /* Modified 11/29/82 by S. Krupp to add new entries and to change 6 3* version number to IOX2. */ 6 4 /* format: style2 */ 6 5 6 6 dcl 1 iocb aligned based, /* I/O control block. */ 6 7 2 version character (4) aligned, /* IOX2 */ 6 8 2 name char (32), /* I/O name of this block. */ 6 9 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 6 10 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 6 11 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 6 12 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 6 13 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 6 14 2 reserved bit (72), /* Reserved for future use. */ 6 15 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 6 16 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 6 17 /* open(p,mode,not_used,s) */ 6 18 2 close entry (ptr, fixed (35)),/* close(p,s) */ 6 19 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 20 /* get_line(p,bufptr,buflen,actlen,s) */ 6 21 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 22 /* get_chars(p,bufptr,buflen,actlen,s) */ 6 23 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 6 24 /* put_chars(p,bufptr,buflen,s) */ 6 25 2 modes entry (ptr, char (*), char (*), fixed (35)), 6 26 /* modes(p,newmode,oldmode,s) */ 6 27 2 position entry (ptr, fixed, fixed (21), fixed (35)), 6 28 /* position(p,u1,u2,s) */ 6 29 2 control entry (ptr, char (*), ptr, fixed (35)), 6 30 /* control(p,order,infptr,s) */ 6 31 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 32 /* read_record(p,bufptr,buflen,actlen,s) */ 6 33 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 6 34 /* write_record(p,bufptr,buflen,s) */ 6 35 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 6 36 /* rewrite_record(p,bufptr,buflen,s) */ 6 37 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 6 38 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 6 39 /* seek_key(p,key,len,s) */ 6 40 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 6 41 /* read_key(p,key,len,s) */ 6 42 2 read_length entry (ptr, fixed (21), fixed (35)), 6 43 /* read_length(p,len,s) */ 6 44 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 6 45 /* open_file(p,mode,desc,not_used,s) */ 6 46 2 close_file entry (ptr, char (*), fixed bin (35)), 6 47 /* close_file(p,desc,s) */ 6 48 2 detach entry (ptr, char (*), fixed bin (35)); 6 49 /* detach(p,desc,s) */ 6 50 6 51 declare iox_$iocb_version_sentinel 6 52 character (4) aligned external static; 6 53 6 54 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 106 107 108 /* program */ 109 110 /* OPEN ENTRIES */ 111 112 open_implicit_: entry (pspp); 113 psp = pspp; 114 fsbp = ps.fsbp; 115 fab2p = ps.fab2p; 116 iroute = 4; 117 go to open_question; 118 119 open_explicit_: entry (pspp); 120 121 iroute = 1; 122 plio2_data_$pspstat, psp = pspp; 123 124 plio2_data_$fsbpstat, ps.fsbp, fsbp = ps.source_p -> file_value.fsb_ptr; 125 plio2_data_$fab2pstat, ps.fab2p, fab2p = ps.special_list_p; 126 ps.file_p = ps.source_p; 127 128 addr (ps.ab_return) -> based_label = EXIT; 129 130 open_question: 131 if fsb.switch.open then go to check; 132 133 /* thread on first opening and at the 134* same time store the declared attributes 135* and filename in the FSB. 136* 137* To get new declared attributes (for debugging) 138* RENEW by unthreading, zeroing FSB-attributes */ 139 140 if fsb.switch.threaded 141 then fsb.declared_attributes (1) = fsb.declared_attributes (1) | ps.source_p -> file_value.fab_ptr -> fab.switch; 142 else do; 143 fsb.fsb_thread = plio2_data_fsb_thread_; 144 145 if fsb.fsb_thread = null then 146 do; 147 evx = close_all_; 148 call add_epilogue_handler_ (evx, code); 149 if code ^= 0 150 then call com_err_ (code, "plio2_$open", "Unable to add epilogue handler."); 151 end; 152 fabp = ps.source_p -> file_value.fab_ptr; 153 fsb.declared_attributes (1) = fabp -> fab.switch; 154 fsb.filename = fabp -> fab.name; 155 156 /* avoid a LOOP in the THREAD as surely as easily 157* possible by setting the "threaded" bit here. */ 158 159 plio2_data_fsb_thread_ = fsbp; 160 fsb.switch.threaded = "1"b; 161 end; 162 163 title_option = "0"b; /* but we will look to see if there is one */ 164 if fab2p -> fab.name ^= "" then 165 do; 166 title_option = "1"b; 167 fsb.title = fab2p -> fab.name; 168 end; 169 else fsb.title = fsb.filename; 170 171 if iroute = 4 then goto no_title168; /* no title with implicit opening */ 172 if substr (fab2p -> fab.switch, 3, 1) = "0"b then goto no_title168; /* compiled with version 1 of PL1 */ 173 if fab2p -> fab.buffer_size = -111111111111011101b then goto no_title168; /* corrects for bug in 174* early version 2 PL1 compilers */ 175 if fab2p -> fab.ch168p = null then goto no_title168; /* no title option */ 176 fsb.path_name = fab2p -> fab.ch168p -> bch168; /* title168 is correctly present - use it */ 177 title_option = "1"b; 178 goto title_is_set; 179 no_title168: 180 if ^title_option then fsb.path_name = "vfile_ " || fsb.filename; 181 else fsb.path_name = fsb.title; 182 title_is_set: 183 184 if substr (fsb.declared_attributes (1), 28, 1) /* internal */ then fsb.title = unique_chars_ (unique_bits_ ()); 185 else fsb.title = fsb.filename; 186 iocb_name = fsb.title; 187 188 /* COMMENT ON ALL OF THESE NAMES: 189* 190* at this point we have: 191* 192* fsb.filename = declared file name 193* fsb.title = (a) fsb.filename if external 194* = (b) uniquename if internal 195* and is to be used as iocb_name (for find_iocb) 196* fsb.path_name= (a) "vfile_ "||fsb.filename if no title option 197* = (b) TITLE if title option is specified 198* and is to be used as iocb_title (for iox_$attach_iocb) 199* 200* later, for the canonical sysin and sysprint, fsb.path_name will 201* be changed to "syn_ user_input" or "syn_ user_output". 202* */ 203 204 if iroute = 1 205 then fab2px = fab2p; /* explicit open - use all attributes */ 206 else do; 207 fabprime = fab2p -> fab.switch; 208 fab2px = addr (fabprime); 209 210 if substr (fsb.declared_attributes (1), 8, 1) /* update */ 211 then if substr (string (ps.job), 16, 2) /* read,write */ 212 then substr (fabprime, 6, 3) = "000"b; /* in,out,up */ 213 end; 214 string (fsb.switch) = (fsb.declared_attributes (1)| 215 fab2px -> fab.switch|"000000000000000000000000000010010000"b) 216 &"111111111111111111110001000111110111"b; 217 218 /* zero out: eof,prelim_eof,transmit_error,detach,iox_close,te_hold,buffer_in_use */ 219 /* set to one: threaded,emptyline */ 220 221 /* TABLES for IMPLICATIONS,DEFAULTS,CONFLICTS, "NONOS" */ 222 223 dcl 1 open_bits (27) aligned static internal, 224 2 ( 225 b18 init ( 226 /* [1-15] IMPLICATIONS */ 227 "1"b, "01"b, "1010000000"b, "0001"b, "1000100000"b, "0"b, 228 "000100111011011"b, "0000000100010"b, "000000001"b, 229 "0000000001"b, "00000000001"b, "000000000001"b, "0000000000001"b, 230 "00000000100001"b, "000000000000001"b, 231 232 /* [16-20] DEFAULTS */ 233 "0111"b, /* 16 - input, output, update */ 234 "0000101"b, /* 17 - stream, record */ 235 "000010011"b, /* 18 - stream(!?), sequential, direct */ 236 "0000000000011"b, /* 19 - not_used_2, stringvalue */ 237 "00000100000001"b, /* 20 - notkeyed, keyed */ 238 239 /* [21-27] NONOs */ 240 "01"b, /* 21 - input */ 241 "001"b, /* 22 - output */ 242 "000000001"b, /* 23 - interactive */ 243 "000001"b, /* 24 - notkeyed */ 244 "000000000001"b, /* 25 - not_used_2 */ 245 "00000000000001"b, /* 26 - keyed */ 246 "00001"b), /* 27 - stream */ 247 248 c18 init ( 249 250 /* [1-6] [7-15] CONFLICTS */ 251 "011"b, "0101"b, "0011"b, "0000101"b, "000000011"b, 252 (10) (1)"0"b, 253 254 /* [16-20] DEFAULTS */ 255 "01"b, /* 16 - input */ 256 "00001"b, /* 17 - stream */ 257 "00000001"b, /* 18 - sequential */ 258 "00000000001"b, /* 19 - not_used_1 */ 259 "000001"b, /* 20 - notkeyed */ 260 261 /* [21-27] NONOs */ 262 "0001111"b, /* 21 - write, rewrite, delete, locate */ 263 "001011"b, /* 22 - read, rewrite, delete */ 264 "00000000000010011"b, /* 23 - ignore, nokey, nokeyfrom */ 265 "0000000111"b, /* 24 - key, keyto, keyfrom */ 266 "000000000010001"b, /* 25 - set, nofrom */ 267 "00000000000000001"b, /* 26 - nokeyfrom */ 268 "0000111"b) /* 27 - rewrite, delete, locate */ 269 ) bit (18) unaligned; 270 271 A18 = substr (string (fsb.switch), 5, 15); /* NOTE: begins on bit number 5 */ 272 B18 = "0"b; 273 274 /* Open step 2. Supply implied attributes */ 275 276 do i = 1 to 15; 277 if A18 & open_bits.b18 (i) then substr (B18, i, 1) = "1"b; 278 end; 279 280 /* Open step 3. Supply default attributes */ 281 282 do i = 16 to 20; 283 if (B18 & open_bits.b18 (i)) = "0"b then B18 = (B18 | open_bits.c18 (i)); 284 end; 285 286 /* Open step 4. Supply print attribute. */ 287 288 if (fsb.filename = "sysprint") & substr (B18, 5, 1) /* stream */ & substr (B18, 3, 1) /* output */ 289 & ^fsb.switch.internal 290 then substr (B18, 1, 1) = "1"b; /* PRINT */ 291 292 /* Open step 5. Check for a consistent file description. */ 293 294 do i = 1 to 5; 295 if (B18 & open_bits.c18 (i)) = open_bits.c18 (i) then 296 do; 297 erno = 109+i; 298 299 /* 110: input and output conflict 300* 111: input and update conflict 301* 112: output and update conflict 302* 113: record and stream conflict 303* 114: sequential and direct conflict 304* 115: forwards and backwards conflict - NOT USED ANY MORE 305* */ 306 go to check; 307 end; 308 end; 309 310 if ((B18 & "0000001001"b) = "0000001001"b) /* record and interactive */ 311 | ((B18 & "0100000001"b) = "0100000001"b) /* input and interactive */ 312 | ((B18 & "000010000000100"b) = "000010000000100"b) /* stream and stringvalue */ 313 then do; 314 erno = 108; 315 /* file cannot be opened: interactive may apply to stream output only, 316* stringvalue may apply to record i/o only */ 317 goto check; 318 end; 319 320 nono_18 = "0"b; 321 322 do i = 21 to 27; 323 if (B18 & open_bits.b18 (i)) then nono_18 = (nono_18 | open_bits.c18 (i)); 324 end; 325 if ((B18 & "000101"b) = "000101"b) then nono_18 = (nono_18 | "0001001"b); 326 /* notkeyed and update --> no write or locate */ 327 328 substr (string (fsb.switch), 5, 15) = substr (B18, 1, 15); 329 substr (string (fsb.nono), 1, 18) = substr (nono_18, 1, 18); 330 331 if fsb.filename = "sysprint" 332 then if fsb.switch.print 333 then if ^title_option 334 then if ^fsb.switch.internal 335 then fsb.path_name = "syn_ user_output"; 336 337 if fsb.filename = "sysin" 338 then if fsb.switch.input 339 then if fsb.switch.stream 340 then if ^title_option 341 then if ^fsb.switch.internal 342 then fsb.path_name = "syn_ user_input"; 343 344 call iox_$find_iocb (iocb_name, iocb_p, iocb_status); 345 if iocb_status ^= 0 then 346 do; 347 erno = 104; /* call to iox_$find_iocb fails */ 348 goto attach_fails; 349 end; 350 351 fsb.iocb_p = iocb_p; 352 353 if iocb_p -> iocb.attach_descrip_ptr = null then 354 do; 355 iocb_title = fsb.path_name; 356 357 do sp = stackframeptr() 358 repeat (sp -> stack_frame.prev_sp) 359 while (sp -> stack_frame_flags.support); 360 end; 361 call iox_$attach_ptr (iocb_p, iocb_title, sp -> stack_frame.entry_ptr, iocb_status); 362 363 if iocb_status ^= 0 then 364 do; 365 erno = 105; /* call to attach_iocb fails */ 366 goto attach_fails; 367 end; 368 else fsb.switch.detach = "1"b; 369 370 end; 371 372 if iocb_p -> iocb.open_descrip_ptr = null then 373 do; 374 if fsb.switch.input then iocb_attach_type = 1; else 375 if fsb.switch.output then iocb_attach_type = 2; else 376 iocb_attach_type = 3; 377 if fsb.switch.record then 378 if fsb.switch.direct then iocb_attach_type = iocb_attach_type+10; 379 else if fsb.switch.keyed then iocb_attach_type = iocb_attach_type+7; 380 else iocb_attach_type = iocb_attach_type+3; 381 if iocb_attach_type = 6 then iocb_attach_type = 7; 382 /* iox_ has 4 io types: in,out,up, and in-out */ 383 384 call iox_$open (iocb_p, iocb_attach_type, "0"b, iocb_status); 385 if iocb_status ^= 0 then 386 do; 387 erno = 106; /* call to iocb.open fails */ 388 goto attach_fails; 389 end; 390 fsb.switch.iox_close = "1"b; 391 goto is_iox_opened; 392 end; 393 394 /* Here we may test compatibility for data-sets already opened. 395* Not implemented 73-12-3 */ 396 397 /* AG94 requires that files with the input stream or record sequential (input | update) attributes be 398* positioned to the beginning of the file. If iox_$open has been called this was already done, otherwise 399* iox_$position must be called. */ 400 401 402 if (fsb.stream & fsb.input) | (fsb.record & fsb.sequential & (fsb.input | fsb.update)) 403 then call iox_$position (iocb_p, begining_of_file, 0, iocb_status); 404 405 is_iox_opened: 406 if fsb.switch.record then 407 do; 408 string (fsbr.recio) = "000"b; 409 string (fsbr.inbuf_sw) = "0"b; 410 string (fsbr.outbuf_sw) = "0"b; 411 fsbr.lnzc = 0; 412 fsbr.outbuf_key = ""; 413 fsbr.key_saved = ""; 414 end; 415 416 else do; 417 418 i = get_line_length_$switch (iocb_p, iocb_status); 419 if iocb_status = 0 420 then do; 421 default_ls = i; 422 default_ps = plio2_data_$max_page_size; 423 fsb.console = "1"b; /* if there was a meaningful line len, we will want to use get_line, not get_chars */ 424 end; 425 else do; 426 default_ls = 132; 427 default_ps = 60; 428 if iocb_p -> iocb.get_chars = iox_$err_no_operation 429 then fsb.console = "1"b; /* use get_line for input */ 430 else fsb.console = "0"b; /* use get_chars for input */ 431 end; 432 433 434 if fab2p -> fab.line_size>0 then fsb.lsize = fab2p -> fab.line_size; 435 else fsb.lsize = default_ls; 436 437 if fsb.switch.print then 438 do; 439 if fab2p -> fab.page_size>0 then fsb.psize = fab2p -> fab.page_size; 440 else fsb.psize = default_ps; 441 end; 442 else fsb.psize = 0; /* 0 for 'not a print file' */ 443 444 /* AG94 specifies that if a linesize is given then 445* the file _m_u_s_t have the output attribute; 446* and that if a pagesize is given then it _m_u_s_t have 447* the print attribute. The punishment is unspecified 448* and none is supplied here. */ 449 450 fsb.blc, 451 fsb.kol = 0; 452 fsb.lineno, 453 fsb.pageno, 454 fsb.bnc = 1; 455 if fsb.print then fsb.lsep = 4; /* set up for initial PAGE option */ 456 else fsb.lsep = 1; /* set up for GET LIST initial comma */ 457 458 459 fsb.bptr = addr (fsb.buffer); 460 fsb.bsize = 848; 461 462 if fsb.stream 463 then if fsb.output 464 then fsb.limit = min (fsb.bsize, fsb.lsize); 465 end; 466 /* C A U T I O N : 467* 468* check this value against 469* fsb.incl.pl1 at fsb.buffer. 470* 471* Size is in bytes. */ 472 473 fsb.switch.open = "1"b; 474 goto check; 475 476 attach_fails: 477 if debug_sw = 1 then call ioa_ ("iocb_status=^d", iocb_status); 478 fsb.lnzc = iocb_status; 479 lnzc_set = "1"b; 480 481 check: 482 if ^fsb.switch.open then 483 do; 484 if fsb.switch.iox_close then call iox_$close (iocb_p, iocb_status); 485 if iocb_status ^= 0 486 then do; 487 fsb.lnzc = iocb_status; 488 lnzc_set = "1"b; 489 end; 490 491 if fsb.switch.detach then call iox_$detach_iocb (iocb_p, iocb_status); 492 if iocb_status ^= 0 493 then do; 494 fsb.lnzc = iocb_status; 495 lnzc_set = "1"b; 496 end; 497 if ^lnzc_set then fsb.lnzc = 0; 498 call plio2_signal_$s_ (psp, "UNDEFINEDFILE", "plio2_open_", erno); 499 end; 500 if iroute = 1 then return; 501 502 if ^fsb.switch.open then 503 do; 504 condition = "ERROR"; 505 erno = 102; 506 /* file not open after return from handler of undefinedfile */ 507 call plio2_signal_$s_r_ (psp, condition, "plio2_open_", erno); 508 end; 509 return; 510 511 debug_open: entry; 512 debug_sw = 1-debug_sw; 513 return; 514 515 516 clear_sysprint_: entry; 517 518 call hcs_$make_ptr (null, "stat_", "sysprint.fsb", fsbp, code); 519 if fsbp = null then return; 520 521 if fsb.switch.open 522 then if ^fsb.switch.internal 523 then if fsb.switch.stream 524 then if fsb.switch.output 525 then do; 526 fsb.bnc = 1; 527 fsb.lineno = 1; 528 fsb.pageno = 1; 529 fsb.kol = 0; 530 return; 531 end; 532 return; 533 534 set_pageno: entry (isfile, page_num); 535 dcl isfile (2) ptr; 536 dcl page_num fixed bin (15); 537 dcl pnln fixed bin (15); 538 pnln = 1; 539 goto pnlnjoin; 540 541 get_pageno: entry (isfile) returns (fixed bin (15)); 542 pnln = 2; 543 goto pnlnjoin; 544 545 get_lineno: entry (isfile) returns (fixed bin (15)); 546 pnln = 3; 547 548 pnlnjoin: 549 fsbp = isfile (2); 550 if ^fsb.switch.open then 551 do; 552 erno = 141; 553 get_lineno_sig: 554 call plio2_signal_$s_ (null, "ERROR", "get_lineno", erno); 555 if pnln = 1 then return; 556 else return (0); 557 end; 558 if ^fsb.switch.print then 559 do; 560 erno = 142; 561 goto get_lineno_sig; 562 end; 563 if pnln = 1 then 564 do; 565 fsb.pageno = page_num; 566 return; 567 end; 568 if pnln = 2 then return (fsb.pageno); 569 else return (fsb.lineno); 570 /* CLOSE ENTRIES */ 571 572 close_: entry (pspp); 573 psp = pspp; 574 plio2_data_$pspstat = psp; 575 fsbp = ps.source_p -> file_value.fsb_ptr; 576 iroute = 10; 577 go to close10; 578 579 closebyname_: 580 close_by_name_: entry (xname); 581 dcl msg_sw bit (1) ; 582 dcl found_name bit (1); 583 msg_sw = "0"b; 584 by_name_join: 585 found_name = "0"b; 586 587 psp = null; 588 dcl name32 char (32) aligned; 589 name32 = xname; 590 iroute = 12; 591 fsbp = plio2_data_fsb_thread_; 592 do while (fsbp ^= null); 593 if name32 = fsb.filename then 594 do; 595 go to close10; 596 by_name_rejoin: found_name = "1"b; 597 end; 598 fsbp = fsb.fsb_thread; 599 end; 600 601 if found_name then return; 602 if ^msg_sw then call ioa_ ("filename ^a not found", xname); 603 else by_name_code = /* error_table_$no_file */ 1 ; 604 return; 605 close_by_name_sys_: entry (xname, by_name_code); 606 dcl by_name_code fixed bin (35); 607 by_name_code = 0; 608 msg_sw = "1"b; 609 go to by_name_join; 610 611 closeall_: 612 closeall: 613 close_all: 614 close_all_: entry; 615 psp = null; 616 iroute = 11; 617 fsbp = plio2_data_fsb_thread_; 618 do while (fsbp ^= null); 619 close10: 620 plio2_data_$fsbpstat = fsbp; 621 if fsb.switch.open then 622 do; 623 if fsb.switch.record 624 then do; 625 temp_file.fab_ptr = null; 626 temp_file.fsb_ptr = fsbp; 627 temp_ps.source_p = addr (temp_file); 628 call plio2_recio_$recio_close_ (addr (temp_ps)); 629 end; 630 iocb_p = fsb.iocb_p; 631 if fsb.switch.iox_close then call iox_$close (iocb_p, iocb_status); 632 if iocb_status ^= 0 633 then do; 634 fsb.lnzc = iocb_status; 635 lnzc_set = "1"b; 636 end; 637 if fsb.switch.detach then call iox_$detach_iocb (iocb_p, iocb_status); 638 if iocb_status ^= 0 639 then do; 640 fsb.lnzc = iocb_status; 641 lnzc_set = "1"b; 642 end; 643 644 fsb.switch.open = "0"b; 645 end; 646 if iroute = 10 then return; 647 if iroute = 12 then go to by_name_rejoin; 648 fsbp = fsb.fsb_thread; 649 end; 650 return; 651 652 listfiles: 653 entry (); 654 655 fsbp = plio2_data_fsb_thread_; 656 call ioa_ ("thread:^p", fsbp); 657 do while (fsbp ^= null); 658 call ioa_ (" fsbp=^p,name=^a", fsbp, fsbp -> fsb.filename); 659 fsbp = fsbp -> fsb.fsb_thread; 660 end; 661 662 EXIT: return; 663 664 get_fsb_thread: entry (pspp); 665 pspp = plio2_data_fsb_thread_; 666 return; 667 668 set_fsb_thread: entry (pspp); 669 plio2_data_fsb_thread_ = pspp; 670 return; 671 672 /* This procedure closes and unthreads all fsb's contained in a specified static section. */ 673 674 close_in_this_static: entry (start_thread, static_ptr, static_len); 675 676 dcl start_thread ptr, /* start of fsb thread (Input/Output) */ 677 static_ptr ptr, /* start of static section (Input) */ 678 static_len fixed bin (18); /* length of static section in words (Input) */ 679 680 dcl (static_seg_no, static_start, static_end) bit (18) aligned; 681 dcl last ptr; 682 683 static_seg_no = baseno (static_ptr); 684 static_start = rel (static_ptr); 685 static_end = bit (fixed (fixed (static_start, 18) + static_len, 18), 18); 686 687 psp = null; 688 last = null; 689 690 do fsbp = start_thread repeat fsbp -> fsb.fsb_thread while (fsbp ^= null); 691 if baseno (fsbp) = static_seg_no 692 & rel (fsbp) >= static_start & rel (fsbp) < static_end 693 then do; 694 if fsbp -> fsb.switch.open 695 then do; 696 temp_file.fab_ptr = null; 697 temp_file.fsb_ptr = fsbp; 698 temp_ps.source_p = addr (temp_file); 699 call close_ (addr (temp_ps)); 700 end; 701 702 if last ^= null 703 then last -> fsb.fsb_thread = fsbp -> fsb.fsb_thread; 704 else start_thread = fsbp -> fsb.fsb_thread; 705 end; 706 else last = fsbp; 707 end; 708 709 return; 710 711 end /* plio2_open_ */; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/04/86 1042.0 plio2_open_.pl1 >special_ldd>install>MR12.0-1206>plio2_open_.pl1 101 1 11/03/86 1114.7 stack_frame.incl.pl1 >special_ldd>install>MR12.0-1206>stack_frame.incl.pl1 102 2 10/04/77 1919.3 pl1_file_value.incl.pl1 >ldd>include>pl1_file_value.incl.pl1 103 3 08/13/81 2043.5 plio2_fsb.incl.pl1 >ldd>include>plio2_fsb.incl.pl1 104 4 08/13/81 2043.5 plio2_fsbr.incl.pl1 >ldd>include>plio2_fsbr.incl.pl1 105 5 08/13/81 2043.5 plio2_ps.incl.pl1 >ldd>include>plio2_ps.incl.pl1 106 6 05/20/83 1846.4 iocb.incl.pl1 >ldd>include>iocb.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. A18 000134 automatic bit(18) dcl 88 set ref 271* 277 B18 000135 automatic bit(18) dcl 88 set ref 272* 277* 283 283* 283 288 288 288* 295 310 310 310 323 325 328 ab_return 12 based structure level 2 dcl 5-10 set ref 128 add_epilogue_handler_ 000030 constant entry external dcl 57 ref 148 addr builtin function dcl 46 ref 128 208 459 627 628 628 698 699 699 attach_descrip_ptr 14 based pointer level 2 dcl 6-6 ref 353 b18 000000 constant bit(18) initial array level 2 packed unaligned dcl 223 ref 277 283 323 based_label based label variable dcl 37 set ref 128* baseno builtin function dcl 46 ref 683 691 bch168 based char(168) dcl 36 ref 176 begining_of_file 000047 constant fixed bin(17,0) initial dcl 74 set ref 402* bit builtin function dcl 46 ref 685 blc 4 based fixed bin(21,0) level 2 dcl 3-4 set ref 450* bnc 10 based fixed bin(15,0) level 2 dcl 3-4 set ref 452* 526* bptr 6 based pointer level 2 dcl 3-4 set ref 459* bsize 5 based fixed bin(21,0) level 2 dcl 3-4 set ref 460* 462 buffer 42 based fixed bin(15,0) array level 2 dcl 3-4 set ref 459 buffer_size 13 based fixed bin(17,0) level 2 dcl 38 ref 173 by_name_code parameter fixed bin(35,0) dcl 606 set ref 603* 605 607* c18 0(18) 000000 constant bit(18) initial array level 2 packed unaligned dcl 223 ref 283 295 295 323 ch168p 14 based pointer level 2 dcl 38 ref 175 176 code 000104 automatic fixed bin(35,0) dcl 80 set ref 148* 149 149* 518* com_err_ 000024 constant entry external dcl 55 ref 149 condition 000123 automatic char(13) initial unaligned dcl 85 set ref 85* 504* 507* console 0(30) based bit(1) level 3 packed unaligned dcl 3-4 set ref 423* 428* 430* debug_sw 000010 internal static fixed bin(15,0) initial dcl 75 set ref 476 512* 512 declared_attributes 440 based bit(36) array level 2 dcl 3-4 set ref 140* 140 153* 182 210 214 default_ls 000133 automatic fixed bin(35,0) dcl 87 set ref 421* 426* 435 default_ps 000132 automatic fixed bin(35,0) dcl 87 set ref 422* 427* 440 detach 0(24) based bit(1) level 3 packed unaligned dcl 3-4 set ref 368* 491 637 direct 0(12) based bit(1) level 3 packed unaligned dcl 3-4 set ref 377 entry_ptr 26 based pointer level 2 dcl 1-36 set ref 361* erno 000120 automatic fixed bin(15,0) dcl 82 set ref 297* 314* 347* 365* 387* 498* 505* 507* 552* 553* 560* evx 000100 automatic entry variable dcl 79 set ref 147* 148* fab based structure level 1 dcl 38 fab2p 50 based pointer level 2 in structure "ps" dcl 5-10 in procedure "plio2_open_" set ref 115 125* fab2p 000114 automatic pointer dcl 81 in procedure "plio2_open_" set ref 115* 125* 164 167 172 173 175 176 204 207 434 434 439 439 fab2px 000130 automatic pointer dcl 86 set ref 204* 208* 214 fab_ptr based pointer level 2 in structure "file_value" dcl 2-3 in procedure "plio2_open_" ref 140 152 fab_ptr 000236 automatic pointer level 2 in structure "temp_file" dcl 95 in procedure "plio2_open_" set ref 625* 696* fabp 000112 automatic pointer dcl 81 set ref 152* 153 154 fabprime 000322 automatic bit(36) dcl 97 set ref 207* 208 210* file_p 40 based pointer level 2 dcl 5-10 set ref 126* file_value based structure level 1 dcl 2-3 filename 20 based char(32) level 2 dcl 3-4 set ref 154* 169 179 185 288 331 337 593 658* fixed builtin function dcl 46 ref 685 685 found_name 000330 automatic bit(1) unaligned dcl 582 set ref 584* 596* 601 fsb based structure level 1 dcl 3-4 fsb_ptr 2 000236 automatic pointer level 2 in structure "temp_file" dcl 95 in procedure "plio2_open_" set ref 626* 697* fsb_ptr 2 based pointer level 2 in structure "file_value" dcl 2-3 in procedure "plio2_open_" ref 124 575 fsb_thread 40 based pointer level 2 dcl 3-4 set ref 143* 145 598 648 659 702* 702 704 707 fsbp 42 based pointer level 2 in structure "ps" dcl 5-10 in procedure "plio2_open_" set ref 114 124* fsbp 000110 automatic pointer dcl 81 in procedure "plio2_open_" set ref 114* 124* 130 140 140 140 143 145 153 154 159 160 167 169 169 176 179 179 181 181 182 182 185 185 186 210 214 214 271 288 288 328 329 331 331 331 331 337 337 337 337 337 351 355 368 374 374 377 377 379 390 402 402 402 402 402 402 405 408 409 410 411 412 413 423 428 430 434 435 437 439 440 442 450 450 452 452 452 455 455 456 459 459 460 462 462 462 462 462 473 478 481 484 487 491 494 497 502 518* 519 521 521 521 521 526 527 528 529 548* 550 558 565 568 569 575* 591* 592 593 598* 598 617* 618 619 621 623 626 630 631 634 637 640 644 648* 648 655* 656* 657 658* 658 659* 659 690* 690* 691 691 691 694 697 702 704 706* 707 fsbr based structure level 1 dcl 4-6 get_chars 46 based entry variable level 2 dcl 6-6 ref 428 get_line_length_$switch 000026 constant entry external dcl 56 ref 418 hcs_$make_ptr 000012 constant entry external dcl 50 ref 518 i 000116 automatic fixed bin(15,0) dcl 82 set ref 276* 277 277* 282* 283 283* 294* 295 295 297* 322* 323 323* 418* 421 inbuf_sw 10 based structure level 2 dcl 4-6 set ref 409* input 0(05) based bit(1) level 3 packed unaligned dcl 3-4 set ref 337 374 402 402 internal 0(27) based bit(1) level 3 packed unaligned dcl 3-4 set ref 288 331 337 521 ioa_ 000014 constant entry external dcl 51 ref 476 602 656 658 iocb based structure level 1 dcl 6-6 iocb_attach_type 000234 automatic fixed bin(17,0) dcl 94 set ref 374* 374* 375* 377* 377 379* 379 380* 380 381 381* 384* iocb_name 000137 automatic char(32) unaligned dcl 90 set ref 186* 344* iocb_p 000150 automatic pointer dcl 92 in procedure "plio2_open_" set ref 344* 351 353 361* 372 384* 402* 418* 428 484* 491* 630* 631* 637* iocb_p 3 based pointer level 2 in structure "fsb" packed unaligned dcl 3-4 in procedure "plio2_open_" set ref 351* 630 iocb_status 000147 automatic fixed bin(35,0) initial dcl 91 set ref 91* 344* 345 361* 363 384* 385 402* 418* 419 476* 478 484* 485 487 491* 492 494 631* 632 634 637* 638 640 iocb_title 000152 automatic char(200) unaligned dcl 93 set ref 355* 361* iox_$attach_ptr 000050 constant entry external dcl 65 ref 361 iox_$close 000040 constant entry external dcl 61 ref 484 631 iox_$detach_iocb 000042 constant entry external dcl 62 ref 491 637 iox_$err_no_operation 000052 constant entry external dcl 66 ref 428 iox_$find_iocb 000032 constant entry external dcl 58 ref 344 iox_$open 000034 constant entry external dcl 59 ref 384 iox_$position 000036 constant entry external dcl 60 ref 402 iox_close 0(32) based bit(1) level 3 packed unaligned dcl 3-4 set ref 390* 484 631 iroute 000117 automatic fixed bin(15,0) dcl 82 set ref 116* 121* 171 204 500 576* 590* 616* 646 647 isfile parameter pointer array dcl 535 ref 534 541 545 548 job 26 based structure level 2 dcl 5-10 ref 210 key_saved 143 based varying char(256) level 2 dcl 4-6 set ref 413* keyed 0(17) based bit(1) level 3 packed unaligned dcl 3-4 set ref 379 kol 11 based fixed bin(15,0) level 2 dcl 3-4 set ref 450* 529* last 000344 automatic pointer dcl 681 set ref 688* 702 702 706* limit 16 based fixed bin(15,0) level 2 dcl 3-4 set ref 462* line_size 11 based fixed bin(17,0) level 2 dcl 38 ref 434 434 lineno 13 based fixed bin(15,0) level 2 dcl 3-4 set ref 452* 527* 569 lnzc 17 based fixed bin(35,0) level 2 in structure "fsb" dcl 3-4 in procedure "plio2_open_" set ref 478* 487* 494* 497* 634* 640* lnzc 17 based fixed bin(35,0) level 2 in structure "fsbr" dcl 4-6 in procedure "plio2_open_" set ref 411* lnzc_set 000122 automatic bit(1) initial dcl 84 set ref 84* 479* 488* 495* 497 635* 641* lsep 2 based fixed bin(15,0) level 2 dcl 3-4 set ref 455* 456* lsize 12 based fixed bin(15,0) level 2 dcl 3-4 set ref 434* 435* 462 min builtin function dcl 46 ref 462 msg_sw 000327 automatic bit(1) unaligned dcl 581 set ref 583* 602 608* name 1 based char(32) level 2 dcl 38 ref 154 164 167 name32 000331 automatic char(32) dcl 588 set ref 589* 593 nono 1 based structure level 2 dcl 3-4 ref 329 nono_18 000136 automatic bit(18) dcl 89 set ref 320* 323* 323 325* 325 329 null builtin function dcl 46 ref 145 175 353 372 518 518 519 553 553 587 592 615 618 625 657 687 688 690 696 702 open 0(03) based bit(1) level 3 packed unaligned dcl 3-4 set ref 130 473* 481 502 521 550 621 644* 694 open_bits 000000 constant structure array level 1 dcl 223 open_descrip_ptr 20 based pointer level 2 dcl 6-6 ref 372 outbuf_key 42 based varying char(256) level 2 dcl 4-6 set ref 412* outbuf_sw 16 based structure level 2 dcl 4-6 set ref 410* output 0(06) based bit(1) level 3 packed unaligned dcl 3-4 set ref 374 462 521 page_num parameter fixed bin(15,0) dcl 536 ref 534 565 page_size 12 based fixed bin(17,0) level 2 dcl 38 ref 439 439 pageno 15 based fixed bin(15,0) level 2 dcl 3-4 set ref 452* 528* 565* 568 path_name 366 based char(168) level 2 packed unaligned dcl 3-4 set ref 176* 179* 181* 331* 337* 355 plio2_data_$fab2pstat 000062 external static pointer dcl 5-82 set ref 125* plio2_data_$fsbpstat 000060 external static pointer dcl 5-82 set ref 124* 619* plio2_data_$max_page_size 000054 external static fixed bin(35,0) dcl 70 ref 422 plio2_data_$pspstat 000056 external static pointer dcl 5-82 set ref 122* 574* plio2_data_fsb_thread_ 000064 external static pointer initial dcl 5-91 set ref 143 159* 591 617 655 665 669* plio2_recio_$recio_close_ 000016 constant entry external dcl 52 ref 628 plio2_signal_$s_ 000020 constant entry external dcl 53 ref 498 553 plio2_signal_$s_r_ 000022 constant entry external dcl 54 ref 507 pnln 000326 automatic fixed bin(15,0) dcl 537 set ref 538* 542* 546* 555 563 568 prev_sp 20 based pointer level 2 dcl 1-36 ref 360 print 0(04) based bit(1) level 3 packed unaligned dcl 3-4 set ref 331 437 455 558 ps based structure level 1 dcl 5-10 psize 14 based fixed bin(35,0) level 2 dcl 3-4 set ref 439* 440* 442* psp 000106 automatic pointer dcl 81 set ref 113* 114 115 122* 124 124 125 125 126 126 128 140 152 210 498* 507* 573* 574 575 587* 615* 687* pspp parameter pointer dcl 30 set ref 112 113 119 122 572 573 664 665* 668 669 recio 2 based structure level 2 dcl 4-6 set ref 408* record 0(10) based bit(1) level 3 packed unaligned dcl 3-4 set ref 377 402 405 623 rel builtin function dcl 46 ref 684 691 691 sequential 0(11) based bit(1) level 3 packed unaligned dcl 3-4 set ref 402 source_p 20 based pointer level 2 in structure "ps" dcl 5-10 in procedure "plio2_open_" ref 124 126 140 152 575 source_p 20 000242 automatic pointer level 2 in structure "temp_ps" dcl 96 in procedure "plio2_open_" set ref 627* 698* sp 000324 automatic pointer dcl 1-31 set ref 357* 357* 360 361 special_list_p 22 based pointer level 2 dcl 5-10 ref 125 stack_frame based structure level 1 dcl 1-36 stack_frame_flags based structure level 1 dcl 1-64 stackframeptr builtin function dcl 46 ref 357 start_thread parameter pointer dcl 676 set ref 674 690 704* static_end 000343 automatic bit(18) dcl 680 set ref 685* 691 static_len parameter fixed bin(18,0) dcl 676 ref 674 685 static_ptr parameter pointer dcl 676 ref 674 683 684 static_seg_no 000341 automatic bit(18) dcl 680 set ref 683* 691 static_start 000342 automatic bit(18) dcl 680 set ref 684* 685 691 stream 0(08) based bit(1) level 3 packed unaligned dcl 3-4 set ref 337 402 462 521 string builtin function dcl 46 set ref 210 214* 271 328 329 408* 409* 410* substr builtin function dcl 46 set ref 172 182 210 210 210* 271 277* 288 288 288* 328* 328 329* 329 support 20(28) based bit(1) level 2 packed unaligned dcl 1-64 ref 357 switch based structure level 2 in structure "fsb" dcl 3-4 in procedure "plio2_open_" set ref 214* 271 328 switch based bit(36) level 2 in structure "fab" dcl 38 in procedure "plio2_open_" ref 140 153 172 207 214 temp_file 000236 automatic structure level 1 dcl 95 set ref 627 698 temp_ps 000242 automatic structure level 1 dcl 96 set ref 628 628 699 699 threaded 0(28) based bit(1) level 3 packed unaligned dcl 3-4 set ref 140 160* title 30 based char(32) level 2 packed unaligned dcl 3-4 set ref 167* 169* 181 182* 185* 186 title_option 000121 automatic bit(1) dcl 83 set ref 163* 166* 177* 179 331 337 unique_bits_ 000044 constant entry external dcl 63 ref 182 182 unique_chars_ 000046 constant entry external dcl 64 ref 182 update 0(07) based bit(1) level 3 packed unaligned dcl 3-4 set ref 402 xname parameter char unaligned dcl 30 set ref 579 579 589 602* 605 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. RETURN_PTR_MASK internal static bit(72) initial unaligned dcl 1-19 TRANSLATOR_ID_ALM internal static bit(18) initial unaligned dcl 1-25 TRANSLATOR_ID_PL1V1 internal static bit(18) initial unaligned dcl 1-26 TRANSLATOR_ID_PL1V2 internal static bit(18) initial unaligned dcl 1-24 TRANSLATOR_ID_SIGNALLER internal static bit(18) initial unaligned dcl 1-28 TRANSLATOR_ID_SIGNAL_CALLER internal static bit(18) initial unaligned dcl 1-27 iox_$iocb_version_sentinel external static char(4) dcl 6-51 plio2_data_$badfsbp external static pointer dcl 5-82 plio2_data_$badjob external static bit(36) dcl 5-94 plio2_data_$fabpstat external static pointer dcl 5-82 plio2_data_$pliostringfsbp external static pointer dcl 5-82 plio2_data_$undef_file_sw external static bit(1) dcl 5-94 stack_frame_min_length internal static fixed bin(17,0) initial dcl 1-33 xbuf based char(1000) unaligned dcl 3-80 NAMES DECLARED BY EXPLICIT CONTEXT. EXIT 003037 constant label dcl 662 ref 128 attach_fails 001457 constant label dcl 476 ref 348 366 388 by_name_join 002365 constant label dcl 584 ref 609 by_name_rejoin 002416 constant label dcl 596 ref 647 check 001512 constant label dcl 481 ref 130 306 317 474 clear_sysprint_ 001735 constant entry external dcl 516 close10 002616 constant label dcl 619 ref 577 595 close_ 002273 constant entry external dcl 572 ref 699 close_all 002543 constant entry external dcl 611 close_all_ 002530 constant entry external dcl 611 ref 147 close_by_name_ 002323 constant entry external dcl 579 close_by_name_sys_ 002503 constant entry external dcl 605 close_in_this_static 003130 constant entry external dcl 674 closeall 002556 constant entry external dcl 611 closeall_ 002571 constant entry external dcl 611 closebyname_ 002345 constant entry external dcl 579 debug_open 001711 constant entry external dcl 511 get_fsb_thread 003050 constant entry external dcl 664 get_lineno 002120 constant entry external dcl 545 get_lineno_sig 002143 constant label dcl 553 ref 561 get_pageno 002103 constant entry external dcl 541 is_iox_opened 001303 constant label dcl 405 ref 391 listfiles 002745 constant entry external dcl 652 no_title168 000464 constant label dcl 179 ref 171 172 173 175 open_explicit_ 000250 constant entry external dcl 119 open_implicit_ 000222 constant entry external dcl 112 open_question 000307 constant label dcl 130 ref 117 plio2_open_ 000205 constant entry external dcl 10 pnlnjoin 002132 constant label dcl 548 ref 539 543 set_fsb_thread 003077 constant entry external dcl 668 set_pageno 002065 constant entry external dcl 534 title_is_set 000506 constant label dcl 182 ref 178 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3754 4042 3272 3764 Length 4440 3272 66 362 462 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME plio2_open_ 307 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 debug_sw plio2_open_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME plio2_open_ 000100 evx plio2_open_ 000104 code plio2_open_ 000106 psp plio2_open_ 000110 fsbp plio2_open_ 000112 fabp plio2_open_ 000114 fab2p plio2_open_ 000116 i plio2_open_ 000117 iroute plio2_open_ 000120 erno plio2_open_ 000121 title_option plio2_open_ 000122 lnzc_set plio2_open_ 000123 condition plio2_open_ 000130 fab2px plio2_open_ 000132 default_ps plio2_open_ 000133 default_ls plio2_open_ 000134 A18 plio2_open_ 000135 B18 plio2_open_ 000136 nono_18 plio2_open_ 000137 iocb_name plio2_open_ 000147 iocb_status plio2_open_ 000150 iocb_p plio2_open_ 000152 iocb_title plio2_open_ 000234 iocb_attach_type plio2_open_ 000236 temp_file plio2_open_ 000242 temp_ps plio2_open_ 000322 fabprime plio2_open_ 000324 sp plio2_open_ 000326 pnln plio2_open_ 000327 msg_sw plio2_open_ 000330 found_name plio2_open_ 000331 name32 plio2_open_ 000341 static_seg_no plio2_open_ 000342 static_start plio2_open_ 000343 static_end plio2_open_ 000344 last plio2_open_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_in call_ext_out_desc call_ext_out return_mac signal_op shorten_stack ext_entry ext_entry_desc set_support THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. add_epilogue_handler_ com_err_ get_line_length_$switch hcs_$make_ptr ioa_ iox_$attach_ptr iox_$close iox_$detach_iocb iox_$err_no_operation iox_$find_iocb iox_$open iox_$position plio2_recio_$recio_close_ plio2_signal_$s_ plio2_signal_$s_r_ unique_bits_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. plio2_data_$fab2pstat plio2_data_$fsbpstat plio2_data_$max_page_size plio2_data_$pspstat plio2_data_fsb_thread_ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 84 000175 85 000176 91 000201 10 000204 112 000216 113 000233 114 000237 115 000241 116 000243 117 000245 119 000246 121 000261 122 000263 124 000271 125 000276 126 000302 128 000304 130 000307 140 000312 143 000322 145 000327 147 000333 148 000337 149 000347 152 000401 153 000405 154 000410 159 000413 160 000415 163 000417 164 000420 166 000425 167 000427 168 000433 169 000434 171 000440 172 000443 173 000446 175 000451 176 000455 177 000461 178 000463 179 000464 181 000502 182 000506 185 000542 186 000545 204 000551 207 000557 208 000561 210 000563 214 000574 271 000601 272 000605 276 000606 277 000613 278 000623 282 000625 283 000633 284 000646 288 000650 294 000670 295 000675 297 000705 306 000710 308 000711 310 000713 314 000732 317 000734 320 000735 322 000736 323 000743 324 000756 325 000760 328 000767 329 000774 331 000777 337 001016 344 001040 345 001061 347 001063 348 001065 351 001066 353 001071 355 001075 357 001100 360 001106 361 001111 363 001135 365 001137 366 001141 368 001142 372 001144 374 001151 374 001157 375 001165 377 001167 379 001200 380 001206 381 001210 384 001215 385 001234 387 001236 388 001240 390 001241 391 001243 402 001244 405 001303 408 001306 409 001310 410 001311 411 001312 412 001313 413 001314 414 001315 418 001316 419 001333 421 001335 422 001337 423 001342 424 001344 426 001345 427 001347 428 001351 430 001372 434 001374 435 001402 437 001405 439 001412 440 001416 441 001420 442 001421 450 001422 452 001424 455 001430 456 001435 459 001436 460 001440 462 001442 473 001454 474 001456 476 001457 478 001505 479 001510 481 001512 484 001515 485 001531 487 001533 488 001535 491 001537 492 001553 494 001555 495 001557 497 001561 498 001565 500 001625 502 001637 504 001642 505 001645 507 001647 509 001701 511 001710 512 001722 513 001725 516 001734 518 001746 519 002006 521 002021 526 002035 527 002040 528 002041 529 002042 530 002043 532 002052 534 002061 538 002076 539 002100 541 002101 542 002113 543 002115 545 002116 546 002130 548 002132 550 002136 552 002141 553 002143 555 002201 556 002213 558 002224 560 002227 561 002231 563 002232 565 002234 566 002236 568 002245 569 002260 572 002271 573 002304 574 002310 575 002312 576 002315 577 002317 579 002320 583 002364 584 002365 587 002366 589 002370 590 002376 591 002400 592 002404 593 002410 595 002415 596 002416 598 002420 599 002423 601 002424 602 002435 603 002465 604 002470 605 002477 607 002522 608 002524 609 002526 611 002527 615 002602 616 002604 617 002606 618 002612 619 002616 621 002621 623 002624 625 002627 626 002631 627 002632 628 002634 630 002644 631 002647 632 002663 634 002665 635 002667 637 002671 638 002705 640 002707 641 002711 644 002713 646 002715 647 002727 648 002731 649 002734 650 002735 652 002744 655 002756 656 002762 657 003002 658 003006 659 003033 660 003036 662 003037 664 003046 665 003061 666 003066 668 003075 669 003110 670 003115 674 003124 683 003141 684 003147 685 003151 687 003160 688 003162 690 003163 691 003172 694 003205 696 003210 697 003212 698 003214 699 003216 702 003226 704 003237 705 003243 706 003244 707 003246 709 003252 ----------------------------------------------------------- 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