COMPILATION LISTING OF SEGMENT l6_tran_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/09/85 1157.1 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 /******************************************************************************/ 7 /* */ 8 /* DESCRIPTION: */ 9 /* */ 10 /* This subroutine is the NASP (see MTB 538) which implements file */ 11 /* transfer to the Level 6 over an X.25 channel. */ 12 /* */ 13 /* */ 14 /* JOURNALIZATION: */ 15 /* */ 16 /* 1) Written 3/82 by R.J.C Kissel */ 17 /* 2) Modified 7/83 by R.J.C. Kissel to handle passwords for Mod 400 */ 18 /* Release 21. and 3.0, and also fix an error message to the L6. */ 19 /* 3) Modified 9/83 by R.J.C. Kissel to fix a bug in handling L6 pathnames. */ 20 /* */ 21 /******************************************************************************/ 22 23 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 24 25 l6_tran_: 26 proc (); 27 RETURN: /* Label for error returns. */ 28 return; 29 30 /* Parameters */ 31 32 dcl P_arg_list_ptr ptr parameter; 33 dcl P_area_ptr ptr parameter; /* Null means use the system free area. */ 34 dcl P_caller_name char (*) parameter; 35 dcl P_code fixed bin (35) parameter; 36 dcl P_complete bit (1) parameter; /* "1"b -- request is complete, "0"b -- not complete */ 37 dcl P_error_message char (*) varying parameter; 38 dcl P_first_arg fixed bin parameter; 39 dcl P_in_iocbp ptr parameter; 40 dcl P_list_flag bit (1) parameter; /* "1"b -- list this request, "0"b -- don't list it */ 41 dcl P_nasp_info_ptr ptr parameter; 42 dcl P_output_lines char (*) varying parameter; 43 dcl P_out_iocbp ptr parameter; 44 dcl P_queued_flag bit (1) parameter; /* "1"b -- request from queue, "0"b -- interactive request */ 45 dcl P_structure_len fixed bin (24) parameter; 46 /* In bits */ 47 dcl P_structure_ptr ptr parameter; 48 dcl P_unhold bit (1) parameter; /* "1"b -- update held requests, "0"b -- don't update them */ 49 50 /* Automatic */ 51 52 dcl 1 auto_status_branch aligned like status_branch; 53 dcl 1 auto_transfer_input_args aligned like transfer_input_args; 54 dcl 1 auto_transfer_output_args aligned like transfer_output_args; 55 56 dcl arg char (arg_len) based (arg_ptr); 57 dcl arg_idx fixed bin; 58 dcl arg_len fixed bin (21); 59 dcl arg_ptr ptr; 60 dcl arg_list_ptr ptr; 61 62 dcl based_area area (sys_info$max_seg_size) based (area_ptr); 63 dcl area_ptr ptr; 64 65 dcl caller_name char (32); 66 dcl Cleanup_Handler entry () variable; 67 dcl code fixed bin (35); 68 69 dcl comm_buffer char (comm_buffer_len) based (comm_buffer_ptr); 70 dcl comm_buffer_len fixed bin (21); 71 dcl comm_buffer_ptr ptr defined (temp_seg_ptrs (1)); 72 73 dcl complete_flag bit (1); 74 75 dcl file_buffer char (file_buffer_len) based (file_buffer_ptr); 76 dcl file_buffer_len fixed bin (21); 77 dcl file_buffer_ptr ptr defined (temp_seg_ptrs (2)); 78 79 dcl first_arg fixed bin; 80 dcl i fixed bin; 81 dcl ignored_len fixed bin (21); /* Used in calls to ioa_$rsnnl. */ 82 dcl in_iocbp ptr; 83 dcl last_file bit (1); 84 85 dcl level_6_attach_desc char (128) varying; 86 dcl level_6_chars_read fixed bin (21); 87 dcl level_6_chars_to_write fixed bin (21); 88 dcl level_6_data_type fixed bin; 89 dcl level_6_dir char (168); 90 dcl level_6_entry char (32); 91 dcl level_6_file_type fixed bin; 92 dcl level_6_iocbp ptr; 93 dcl level_6_max_record_size fixed bin; 94 dcl level_6_pathname char (168); 95 dcl level_6_response_pathname char (168); 96 97 dcl list_flag bit (1); 98 99 dcl multics_chars_read fixed bin (21); 100 dcl multics_chars_to_write fixed bin (21); 101 dcl multics_dir char (168); 102 dcl multics_entry char (32); 103 104 dcl multics_file_attach_desc char (256) varying; 105 dcl multics_file_block_size fixed bin (21); 106 dcl multics_file_iocbp ptr; 107 dcl multics_file_l6_type fixed bin; 108 dcl multics_file_type fixed bin; 109 dcl multics_file_open_mode fixed bin; 110 dcl multics_file_size fixed bin (34); 111 112 dcl multics_is_sender bit (1); 113 dcl multics_pathname char (168); 114 115 dcl number_of_args fixed bin; 116 dcl output_lines char (256) varying; 117 dcl out_iocbp ptr; 118 dcl queued_flag bit (1); 119 dcl saved_attributes char (256) varying; 120 dcl saved_level_6_entry char (32); 121 dcl saved_multics_entry char (32); 122 dcl star_area_ptr ptr; 123 dcl star_entries_index fixed bin; 124 dcl star_names_generated bit (1); 125 dcl suffix char (32); 126 dcl temp_seg_ptrs (2) ptr; 127 dcl total_time fixed bin (71); 128 dcl unhold_flag bit (1); 129 130 dcl 1 info aligned like indx_info;/* Use the biggest structure. */ 131 132 /* The l6_tran_ shared structure */ 133 134 dcl l6tip ptr; 135 dcl l6_tran_info_v1 fixed bin (35) internal static options (constant) init (1); 136 137 dcl 1 l6_tran_info aligned based (l6tip), 138 2 version fixed bin (35), 139 2 sender_info aligned, 140 3 pathname char (168) unaligned, 141 3 host_name char (32) unaligned, 142 2 receiver_info aligned, 143 3 pathname char (168) unaligned, 144 3 host_name char (32) unaligned, 145 2 net_name char (32) unaligned, /* Really the channel name. */ 146 2 net_address char (32) unaligned, /* The call data for an x.25 channel. */ 147 2 multics_data_type fixed bin, /* 1--ascii, 2--binary, 3--bcd */ 148 2 user_name char (32) unaligned, 149 2 password char (12) unaligned, 150 2 flags aligned, 151 3 long bit (1) unaligned, /* "1"b--print a transfer message, "0"b--don't print it */ 152 3 l6_attended bit (1) unaligned, /* "1"b--no login needed, "0"b--login needed */ 153 3 pad bit (34) unaligned; 154 155 /* Internal Static */ 156 157 dcl debug_flag bit (1) internal static init ("0"b); 158 159 /* Internal Constants */ 160 1 1 /*----------BEGIN l6_tran_constants.incl.pl1---------------------------------*/ 1 2 1 3 dcl SEND_TU_SIZE fixed bin (21) internal static options (constant) init (119); 1 4 dcl RECV_TU_SIZE fixed bin (21) internal static options (constant) init (1000); 1 5 1 6 dcl CR char (1) internal static options (constant) init (" "); 1 7 /* A carrige return. */ 1 8 dcl SP char (1) internal static options (constant) init (" "); 1 9 /* A space. */ 1 10 dcl HT char (1) internal static options (constant) init (" "); 1 11 /* A horizontal tab. */ 1 12 1 13 dcl ASCII fixed bin internal static options (constant) init (1); 1 14 dcl BINARY fixed bin internal static options (constant) init (2); 1 15 dcl BCD fixed bin internal static options (constant) init (3); 1 16 1 17 dcl CHASE fixed bin (1) internal static options (constant) init (1); 1 18 1 19 dcl UNSTRUCTURED_FILE_TYPE fixed bin internal static options (constant) init (1); 1 20 dcl SEQUENTIAL_FILE_TYPE fixed bin internal static options (constant) init (2); 1 21 dcl BLOCKED_FILE_TYPE fixed bin internal static options (constant) init (3); 1 22 dcl INDEXED_FILE_TYPE fixed bin internal static options (constant) init (4); 1 23 dcl VARIABLE_FILE_TYPE fixed bin internal static options (constant) init (5); 1 24 1 25 dcl L6_S_FILE_TYPE fixed bin internal static options (constant) init (1); 1 26 dcl L6_D_FILE_TYPE fixed bin internal static options (constant) init (2); 1 27 dcl L6_R_FILE_TYPE fixed bin internal static options (constant) init (3); 1 28 dcl L6_F_FILE_TYPE fixed bin internal static options (constant) init (4); 1 29 1 30 dcl L6_FILE_TYPE (4) char (1) internal static options (constant) init ("S", "D", "R", "F"); 1 31 dcl L6_DATA_TYPE (3) char (1) internal static options (constant) init ("A", "8", "B"); 1 32 1 33 dcl FILE_TYPE_TO_PNAME (5) char (12) internal static options (constant) 1 34 init ("unstructured", "sequential", "blocked", "indexed", "variable"); 1 35 1 36 dcl MULTICS_L6_FILE_SUFFIX (4) char (3) internal static options (constant) init ("", "l6d", "l6r", "l6f"); 1 37 1 38 dcl USAGE char (256) internal static options (constant) 1 39 init ( 1 40 "Usage: nr l6_ftf {}, where <*_file> is: {-nm} {-at
}" 1 41 ); 1 42 1 43 /*----------END l6_tran_constants.incl.pl1-----------------------------------*/ 161 162 163 /* External Constants */ 164 165 dcl error_table_$area_too_small fixed bin (35) ext static; 166 dcl error_table_$bad_arg fixed bin (35) ext static; 167 dcl error_table_$bad_file fixed bin (35) ext static; 168 dcl error_table_$badopt fixed bin (35) ext static; 169 dcl error_table_$badpath fixed bin (35) ext static; 170 dcl error_table_$badstar fixed bin (35) ext static; 171 dcl error_table_$dirseg fixed bin (35) ext static; 172 dcl error_table_$fatal_error fixed bin (35) ext static; 173 dcl error_table_$incompatible_file_attribute 174 fixed bin (35) ext static; 175 dcl error_table_$noarg fixed bin (35) ext static; 176 dcl error_table_$not_closed fixed bin (35) ext static; 177 dcl error_table_$not_detached fixed bin (35) ext static; 178 dcl error_table_$too_many_args fixed bin (35) ext static; 179 dcl error_table_$unimplemented_version 180 fixed bin (35) ext static; 181 182 dcl sys_info$max_seg_size fixed bin (19) ext static; 183 184 /* External Entries */ 185 186 dcl add_char_offset_ entry (ptr, fixed bin (21)) returns (ptr) reducible; 187 dcl check_star_name_$entry entry (char (*), fixed bin (35)); 188 dcl cu_$arg_list_ptr entry (ptr); 189 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 190 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 191 dcl cu_$arg_count_rel entry (fixed bin, ptr, fixed bin (35)); 192 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 193 dcl expand_pathname_ entry (char (*), char (*), char (*), fixed bin (35)); 194 dcl get_equal_name_ entry (char (*), char (*), char (32), fixed bin (35)); 195 dcl get_user_free_area_ entry returns (ptr); 196 dcl get_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)); 197 dcl hcs_$append_branch entry (char (*), char (*), fixed bin (5), fixed bin (35)); 198 dcl hcs_$star_ entry (char (*), char (*), fixed bin (2), ptr, fixed bin, ptr, ptr, fixed bin (35)); 199 dcl hcs_$status_ entry (char (*), char (*), fixed bin (1), ptr, ptr, fixed bin (35)); 200 dcl ioa_$ioa_switch entry () options (variable); 201 dcl ioa_$general_rs entry (ptr, fixed bin, fixed bin, char (*), fixed bin (21), bit (1) aligned, 202 bit (1) aligned); 203 dcl ioa_$rsnnl entry () options (variable); 204 dcl ioa_$rsnpnnl entry options (variable); 205 dcl l6_tran_util_$get_chars entry (ptr, ptr, fixed bin (21), fixed bin (21), fixed bin (35)); 206 dcl l6_tran_util_$get_line entry (ptr, ptr, fixed bin (21), fixed bin (21), fixed bin (35)); 207 dcl l6_tran_util_$put_chars entry (ptr, ptr, fixed bin (21), fixed bin (35)); 208 dcl l6_tran_receive_file_ entry (ptr, ptr, char (*) var, fixed bin (35)); 209 dcl l6_tran_send_file_ entry (ptr, ptr, char (*) var, fixed bin (35)); 210 dcl match_star_name_ entry (char (*), char (*), fixed bin (35)); 211 dcl net_info_table_$get_host_address 212 entry (char (*), char (*), char (*), fixed bin (35)); 213 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 214 dcl read_password_$switch entry (ptr, ptr, char (*), char (*), fixed bin (35)); 215 dcl release_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)); 216 dcl suffixed_name_$make entry (char (*), char (*), char (32), fixed bin (35)); 217 dcl vfile_status_ entry (char (*), char (*), ptr, fixed bin (35)); 218 dcl user_info_$whoami entry (char (*), char (*), char (*)); 219 220 /* Builtin Functions and Conditions */ 221 222 dcl addr builtin; 223 dcl before builtin; 224 dcl clock builtin; 225 dcl float builtin; 226 dcl hbound builtin; 227 dcl index builtin; 228 dcl lbound builtin; 229 dcl length builtin; 230 dcl min builtin; 231 dcl null builtin; 232 dcl pointer builtin; 233 dcl reverse builtin; 234 dcl rtrim builtin; 235 dcl string builtin; 236 dcl substr builtin; 237 dcl sum builtin; 238 dcl unspec builtin; 239 240 dcl area condition; 241 dcl cleanup condition; 242 243 /* Include Files */ 244 2 1 /*----------BEGIN nasp_info.incl.pl1-----------------------------------------*/ 2 2 2 3 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 2 4 2 5 dcl naspip ptr; 2 6 dcl nasp_info_v1 fixed bin (35) internal static options (constant) init (1); 2 7 2 8 dcl 1 nasp_info aligned based (naspip), 2 9 2 version fixed bin (35), 2 10 2 host_name char (32) unaligned, 2 11 2 net_name char (32) unaligned; 2 12 2 13 /*----------END nasp_info.incl.pl1-------------------------------------------*/ 245 246 3 1 /*----------BEGIN l6_tran_transfer_args.incl.pl1-----------------------------*/ 3 2 3 3 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 3 4 3 5 /* Written 9/82 by R.J.C. Kissel */ 3 6 3 7 /* Input arguments for l6_tran_send/receive_file_. */ 3 8 3 9 dcl tiap ptr; 3 10 dcl transfer_input_args_version_1 char (8) unaligned internal static options (constant) init ("version1"); 3 11 3 12 dcl 1 transfer_input_args aligned based (tiap), 3 13 2 version char (8) unaligned, 3 14 2 comm_iocbp ptr, 3 15 2 comm_buffer_ptr ptr, 3 16 2 comm_buffer_len fixed bin (21), 3 17 2 file_iocbp ptr, 3 18 2 file_buffer_ptr ptr, 3 19 2 file_buffer_len fixed bin (21), 3 20 2 file_type fixed bin, 3 21 2 data_type fixed bin, 3 22 2 tu_size fixed bin (21), 3 23 2 flags aligned, 3 24 3 last_file bit (1) unaligned, /* Input for sending, not used for receiving. */ 3 25 3 prompt_read bit (1) unaligned, /* Input for sending, not used for receiving. */ 3 26 3 pad bit (34) unaligned; 3 27 3 28 /* Output arguments for l6_tran_send/receive_file_. */ 3 29 3 30 dcl toap ptr; 3 31 dcl transfer_output_args_version_1 char (8) unaligned internal static options (constant) init ("version1"); 3 32 3 33 dcl 1 transfer_output_args aligned based (toap), 3 34 2 version char (8) unaligned, 3 35 2 record_number fixed bin, 3 36 2 total_bytes fixed bin (35), 3 37 2 flags aligned, 3 38 3 last_file bit (1) unaligned, /* Output from receive, not used by send. */ 3 39 3 pad bit (35) unaligned; 3 40 3 41 /*----------END l6_tran_transfer_args.incl.pl1-------------------------------*/ 247 248 249 /* vfs_info.incl.pl1 */ 250 4 1 dcl 1 uns_info based (addr (info)), /* info structure for unstructured files */ 4 2 2 info_version fixed, /* (Input) must =1--only one version 4 3* currently supported */ 4 4 2 type fixed, /* =1 */ 4 5 2 end_pos fixed (34), /* length (bytes) not including header */ 4 6 2 flags aligned, 4 7 3 pad1 bit (2) unal, /* used for lock_status in other files */ 4 8 3 header_present bit (1) unal, /* on if file code is set */ 4 9 3 pad2 bit (33) unal, 4 10 2 header_id fixed (35); /* meaning is user defined */ 4 11 dcl 1 seq_info based (addr (info)), /* info structure for sequential files */ 4 12 2 info_version fixed, 4 13 2 type fixed, /* =2 */ 4 14 2 end_pos fixed (34), /* record count */ 4 15 2 flags aligned, 4 16 3 lock_status bit (2) unal, /* 0,1,2, or 3 to indicate not locked, 4 17* locked by (other,this,dead) process */ 4 18 3 pad bit (34) unal, 4 19 2 version fixed, /* end_pos valid only in latest version */ 4 20 2 action fixed; /* indicates if adjustment or rollback is needed */ 4 21 dcl 1 blk_info based (addr (info)), /* info structure for blocked files */ 4 22 2 info_version fixed, 4 23 2 type fixed, /* =3 */ 4 24 2 end_pos fixed (34), /* record count */ 4 25 2 flags aligned, 4 26 3 lock_status bit (2) unal, /* same as seq_info.= */ 4 27 3 pad bit (34) unal, 4 28 2 version fixed, /* only one currently supported */ 4 29 2 action fixed, /* non-zero if truncation in progress, else =0 */ 4 30 2 max_rec_len fixed (21), /* bytes--determines characteristiWc block size */ 4 31 2 pad fixed, /* not used at this time */ 4 32 2 time_last_modified fixed (71); /* time stamp for synchronization */ 4 33 dcl 1 indx_info based (addr (info)), /* info structure for indexed files */ 4 34 2 info_version fixed, 4 35 2 type fixed, /* =4 */ 4 36 2 records fixed (34), /* record count */ 4 37 2 flags aligned, 4 38 3 lock_status bit (2) unal, /* same as seq_info.= */ 4 39 3 pad bit (34) unal, 4 40 2 version_info aligned, 4 41 3 file_version fixed (17) unal, /* headers differ */ 4 42 3 program_version fixed (17) unal, /* may indicate bugs */ 4 43 2 action fixed, /* non-zero code indicates update in progress */ 4 44 2 non_null_recs fixed (34), /* count of allocated recs */ 4 45 2 record_bytes fixed (34), /* total record length */ 4 46 2 free_blocks fixed, /* available record blocks */ 4 47 2 index_height fixed, /* height of index tree (0 if empty) */ 4 48 2 nodes fixed, /* nodes being used in the index */ 4 49 2 key_bytes fixed (34), /* total length of keys */ 4 50 2 change_count fixed (35), /* bumped on each file modification */ 4 51 2 num_keys fixed (34), /* number of index entries */ 4 52 2 dup_keys fixed (34), /* 0 if all keys are distinct, else 1 for each dup */ 4 53 2 dup_key_bytes fixed (34), /* total bytes of duplicate keys */ 4 54 2 word (1) fixed; /* reserved for future use */ 4 55 dcl 1 vbl_info based (addr (info)), /* info structure for variable files */ 4 56 2 info_version fixed, 4 57 2 type fixed, /* =5 */ 4 58 2 end_pos fixed (34), /* logical end of file--not necessarily allocation count */ 4 59 2 flags aligned, 4 60 3 lock_status bit (2) unal, /* same as seq_info.= */ 4 61 3 pad bit (34) unal, 4 62 2 version fixed, /* only one currently supported */ 4 63 2 action fixed, /* same as in indexed files */ 4 64 2 first_nz fixed (34), /* position (numeric key) for first allocated record */ 4 65 2 last_nz fixed (34), /* last allocated record position */ 4 66 2 change_count fixed (35); /* used for synchronization */ 4 67 dcl vfs_version_1 static internal fixed init (1); 4 68 /* should be used in 4 69* assignments to info_version */ 251 252 5 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 5 2* 5 3* Values for the "access mode" argument so often used in hardcore 5 4* James R. Davis 26 Jan 81 MCR 4844 5 5* Added constants for SM access 4/28/82 Jay Pattin 5 6* Added text strings 03/19/85 Chris Jones 5 7**/ 5 8 5 9 5 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 5 11 dcl ( 5 12 N_ACCESS init ("000"b), 5 13 R_ACCESS init ("100"b), 5 14 E_ACCESS init ("010"b), 5 15 W_ACCESS init ("001"b), 5 16 RE_ACCESS init ("110"b), 5 17 REW_ACCESS init ("111"b), 5 18 RW_ACCESS init ("101"b), 5 19 S_ACCESS init ("100"b), 5 20 M_ACCESS init ("010"b), 5 21 A_ACCESS init ("001"b), 5 22 SA_ACCESS init ("101"b), 5 23 SM_ACCESS init ("110"b), 5 24 SMA_ACCESS init ("111"b) 5 25 ) bit (3) internal static options (constant); 5 26 5 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 5 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 5 29 5 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 5 31 static options (constant); 5 32 5 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 5 34 static options (constant); 5 35 5 36 dcl ( 5 37 N_ACCESS_BIN init (00000b), 5 38 R_ACCESS_BIN init (01000b), 5 39 E_ACCESS_BIN init (00100b), 5 40 W_ACCESS_BIN init (00010b), 5 41 RW_ACCESS_BIN init (01010b), 5 42 RE_ACCESS_BIN init (01100b), 5 43 REW_ACCESS_BIN init (01110b), 5 44 S_ACCESS_BIN init (01000b), 5 45 M_ACCESS_BIN init (00010b), 5 46 A_ACCESS_BIN init (00001b), 5 47 SA_ACCESS_BIN init (01001b), 5 48 SM_ACCESS_BIN init (01010b), 5 49 SMA_ACCESS_BIN init (01011b) 5 50 ) fixed bin (5) internal static options (constant); 5 51 5 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 253 254 6 1 /* --------------- BEGIN include file status_structures.incl.pl1 --------------- */ 6 2 6 3 /* Revised from existing include files 09/26/78 by C. D. Tavares */ 6 4 6 5 /* This include file contains branch and link structures returned by 6 6* hcs_$status_ and hcs_$status_long. */ 6 7 6 8 dcl 1 status_branch aligned based (status_ptr), 6 9 2 short aligned, 6 10 3 type fixed bin (2) unaligned unsigned, /* seg, dir, or link */ 6 11 3 nnames fixed bin (16) unaligned unsigned, /* number of names */ 6 12 3 names_relp bit (18) unaligned, /* see entry_names dcl */ 6 13 3 dtcm bit (36) unaligned, /* date/time contents last modified */ 6 14 3 dtu bit (36) unaligned, /* date/time last used */ 6 15 3 mode bit (5) unaligned, /* caller's effective access */ 6 16 3 raw_mode bit (5) unaligned, /* caller's raw "rew" modes */ 6 17 3 pad1 bit (8) unaligned, 6 18 3 records_used fixed bin (18) unaligned unsigned, /* number of NONZERO pages used */ 6 19 6 20 /* Limit of information returned by hcs_$status_ */ 6 21 6 22 2 long aligned, 6 23 3 dtd bit (36) unaligned, /* date/time last dumped */ 6 24 3 dtem bit (36) unaligned, /* date/time branch last modified */ 6 25 3 lvid bit (36) unaligned, /* logical volume ID */ 6 26 3 current_length fixed bin (12) unaligned unsigned, /* number of last page used */ 6 27 3 bit_count fixed bin (24) unaligned unsigned, /* reported length in bits */ 6 28 3 pad2 bit (8) unaligned, 6 29 3 copy_switch bit (1) unaligned, /* copy switch */ 6 30 3 tpd_switch bit (1) unaligned, /* transparent to paging device switch */ 6 31 3 mdir_switch bit (1) unaligned, /* is a master dir */ 6 32 3 damaged_switch bit (1) unaligned, /* salvager warned of possible damage */ 6 33 3 synchronized_switch bit (1) unaligned, /* DM synchronized file */ 6 34 3 pad3 bit (5) unaligned, 6 35 3 ring_brackets (0:2) fixed bin (6) unaligned unsigned, 6 36 3 uid bit (36) unaligned; /* unique ID */ 6 37 6 38 dcl 1 status_link aligned based (status_ptr), 6 39 2 type fixed bin (2) unaligned unsigned, /* as above */ 6 40 2 nnames fixed bin (16) unaligned unsigned, 6 41 2 names_relp bit (18) unaligned, 6 42 2 dtem bit (36) unaligned, 6 43 2 dtd bit (36) unaligned, 6 44 2 pathname_length fixed bin (17) unaligned, /* see pathname */ 6 45 2 pathname_relp bit (18) unaligned; /* see pathname */ 6 46 6 47 dcl status_entry_names (status_branch.nnames) character (32) aligned 6 48 based (pointer (status_area_ptr, status_branch.names_relp)), 6 49 /* array of names returned */ 6 50 status_pathname character (status_link.pathname_length) aligned 6 51 based (pointer (status_area_ptr, status_link.pathname_relp)), 6 52 /* link target path */ 6 53 status_area_ptr pointer, 6 54 status_ptr pointer; 6 55 6 56 dcl (Link initial (0), 6 57 Segment initial (1), 6 58 Directory initial (2)) fixed bin internal static options (constant); 6 59 /* values for type fields declared above */ 6 60 6 61 /* ---------------- END include file status_structures.incl.pl1 ---------------- */ 255 256 7 1 /* --------------- BEGIN include file iox_dcls.incl.pl1 --------------- */ 7 2 7 3 /* Written 05/04/78 by C. D. Tavares */ 7 4 /* Fixed declaration of iox_$find_iocb_n 05/07/80 by R. Holmstedt */ 7 5 /* Modified 5/83 by S. Krupp to add declarations for: iox_$open_file, 7 6* iox_$close_file, iox_$detach and iox_$attach_loud entries. */ 7 7 7 8 dcl iox_$attach_name entry (char (*), pointer, char (*), pointer, fixed bin (35)), 7 9 iox_$attach_ptr entry (pointer, char (*), pointer, fixed bin (35)), 7 10 iox_$close entry (pointer, fixed bin (35)), 7 11 iox_$control entry (pointer, char (*), pointer, fixed bin (35)), 7 12 iox_$delete_record entry (pointer, fixed bin (35)), 7 13 iox_$destroy_iocb entry (pointer, fixed bin (35)), 7 14 iox_$detach_iocb entry (pointer, fixed bin (35)), 7 15 iox_$err_not_attached entry options (variable), 7 16 iox_$err_not_closed entry options (variable), 7 17 iox_$err_no_operation entry options (variable), 7 18 iox_$err_not_open entry options (variable), 7 19 iox_$find_iocb entry (char (*), pointer, fixed bin (35)), 7 20 iox_$find_iocb_n entry (fixed bin, ptr, fixed bin(35)), 7 21 iox_$get_chars entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 7 22 iox_$get_line entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 7 23 iox_$look_iocb entry (char (*), pointer, fixed bin (35)), 7 24 iox_$modes entry (pointer, char (*), char (*), fixed bin (35)), 7 25 iox_$move_attach entry (pointer, pointer, fixed bin (35)), 7 26 iox_$open entry (pointer, fixed bin, bit (1) aligned, fixed bin (35)), 7 27 iox_$position entry (pointer, fixed bin, fixed bin (21), fixed bin (35)), 7 28 iox_$propagate entry (pointer), 7 29 iox_$put_chars entry (pointer, pointer, fixed bin (21), fixed bin (35)), 7 30 iox_$read_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 7 31 iox_$read_length entry (pointer, fixed bin (21), fixed bin (35)), 7 32 iox_$read_record entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 7 33 iox_$rewrite_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 7 34 iox_$seek_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 7 35 iox_$write_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 7 36 iox_$open_file entry(ptr, fixed bin, char(*), bit(1) aligned, fixed bin(35)), 7 37 iox_$close_file entry(ptr, char(*), fixed bin(35)), 7 38 iox_$detach entry(ptr, char(*), fixed bin(35)), 7 39 iox_$attach_loud entry(ptr, char(*), ptr, fixed bin(35)); 7 40 7 41 dcl (iox_$user_output, 7 42 iox_$user_input, 7 43 iox_$user_io, 7 44 iox_$error_output) external static pointer; 7 45 7 46 /* ---------------- END include file iox_dcls.incl.pl1 ---------------- */ 257 258 8 1 /* Begin include file ..... iox_modes.incl.pl1 */ 8 2 8 3 /* Written by C. D. Tavares, 03/17/75 */ 8 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 8 5 8 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 8 7 ("stream_input", "stream_output", "stream_input_output", 8 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 8 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 8 10 "direct_input", "direct_output", "direct_update"); 8 11 8 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 8 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 8 14 8 15 dcl (Stream_input initial (1), 8 16 Stream_output initial (2), 8 17 Stream_input_output initial (3), 8 18 Sequential_input initial (4), 8 19 Sequential_output initial (5), 8 20 Sequential_input_output initial (6), 8 21 Sequential_update initial (7), 8 22 Keyed_sequential_input initial (8), 8 23 Keyed_sequential_output initial (9), 8 24 Keyed_sequential_update initial (10), 8 25 Direct_input initial (11), 8 26 Direct_output initial (12), 8 27 Direct_update initial (13)) fixed bin int static options (constant); 8 28 8 29 /* End include file ..... iox_modes.incl.pl1 */ 259 260 9 1 /* BEGIN INCLUDE FILE . . . star_structures.incl.pl1 */ 9 2 9 3 /* This include file contains structures for the hcs_$star_, 9 4* hcs_$star_list_ and hcs_$star_dir_list_ entry points. 9 5* 9 6* Written 23 October 1978 by Monte Davidoff. 9 7* Modified January 1979 by Michael R. Jordan to use unsigned and different pointers for different structures. 9 8* Modified June 1981 by C. Hornig to count link pathnames more efficiently. 9 9**/ 9 10 9 11 /* automatic */ 9 12 9 13 declare star_branch_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching branch count */ 9 14 declare star_entry_count fixed binary; /* hcs_$star_: number of matching entries */ 9 15 declare star_entry_ptr pointer; /* hcs_$star_: pointer to array of entry information */ 9 16 declare star_list_branch_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to array of info */ 9 17 declare star_link_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching link count */ 9 18 declare star_linkx fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: index into star_links */ 9 19 declare star_names_ptr pointer; /* hcs_$star_: pointer to array of entry names */ 9 20 declare star_list_names_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to entry names */ 9 21 declare star_select_sw fixed binary (3); /* hcs_$star_list_, hcs_$star_dir_list_: what info to return */ 9 22 9 23 /* based */ 9 24 9 25 /* hcs_$star_ entry structure */ 9 26 9 27 declare 1 star_entries (star_entry_count) aligned based (star_entry_ptr), 9 28 2 type fixed binary (2) unsigned unaligned, 9 29 /* storage system type */ 9 30 2 nnames fixed binary (16) unsigned unaligned, 9 31 /* number of names of entry that match star_name */ 9 32 2 nindex fixed binary (18) unsigned unaligned; 9 33 /* index of first name in star_names */ 9 34 9 35 /* hcs_$star_ name structure */ 9 36 9 37 declare star_names (sum (star_entries (*).nnames)) char (32) based (star_names_ptr); 9 38 9 39 /* hcs_$star_list_ branch structure */ 9 40 9 41 declare 1 star_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 9 42 2 type fixed binary (2) unsigned unaligned, 9 43 /* storage system type */ 9 44 2 nnames fixed binary (16) unsigned unaligned, 9 45 /* number of names of entry that match star_name */ 9 46 2 nindex fixed binary (18) unsigned unaligned, 9 47 /* index of first name in star_list_names */ 9 48 2 dtcm bit (36) unaligned, /* date-time contents of branch were last modified */ 9 49 2 dtu bit (36) unaligned, /* date-time branch was last used */ 9 50 2 mode bit (5) unaligned, /* user's access mode to the branch */ 9 51 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 9 52 2 master_dir bit (1) unaligned, /* is branch a master directory */ 9 53 2 pad bit (7) unaligned, 9 54 2 records fixed binary (18) unsigned unaligned; 9 55 /* records used by branch */ 9 56 9 57 /* hcs_$star_dir_list_ branch structure */ 9 58 9 59 declare 1 star_dir_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 9 60 2 type fixed binary (2) unsigned unaligned, 9 61 /* storage system type */ 9 62 2 nnames fixed binary (16) unsigned unaligned, 9 63 /* number of names of entry that match star_name */ 9 64 2 nindex fixed binary (18) unsigned unaligned, 9 65 /* index of first name in star_list_names */ 9 66 2 dtem bit (36) unaligned, /* date-time directory entry of branch was last modified */ 9 67 2 pad bit (36) unaligned, 9 68 2 mode bit (5) unaligned, /* user's access mode to the branch */ 9 69 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 9 70 2 master_dir bit (1) unaligned, /* is branch a master directory */ 9 71 2 bit_count fixed binary (24) unaligned; 9 72 /* bit count of the branch */ 9 73 9 74 /* hcs_$star_list_ and hcs_$star_dir_list_ link structure */ 9 75 9 76 declare 1 star_links (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 9 77 2 type fixed binary (2) unsigned unaligned, 9 78 /* storage system type */ 9 79 2 nnames fixed binary (16) unsigned unaligned, 9 80 /* number of names of entry that match star_name */ 9 81 2 nindex fixed binary (18) unsigned unaligned, 9 82 /* index of first name in star_list_names */ 9 83 2 dtem bit (36) unaligned, /* date-time link was last modified */ 9 84 2 dtd bit (36) unaligned, /* date-time the link was last dumped */ 9 85 2 pathname_len fixed binary (18) unsigned unaligned, 9 86 /* length of the pathname of the link */ 9 87 2 pathname_index fixed binary (18) unsigned unaligned; 9 88 /* index of start of pathname in star_list_names */ 9 89 9 90 /* hcs_$star_list_ and hcs_$star_dir_list_ name array */ 9 91 9 92 declare star_list_names char (32) based (star_list_names_ptr) 9 93 dimension (star_links (star_branch_count + star_link_count).nindex 9 94 + star_links (star_branch_count + star_link_count).nnames 9 95 + divide (star_links (star_branch_count + star_link_count).pathname_len + 31, 32, 17, 0) 9 96 * binary ( 9 97 (star_links (star_branch_count + star_link_count).type = star_LINK) 9 98 & (star_select_sw >= star_LINKS_ONLY_WITH_LINK_PATHS), 1)); 9 99 9 100 /* hcs_$star_list_ and hcs_$star_dir_list_ link pathname */ 9 101 9 102 declare star_link_pathname char (star_links (star_linkx).pathname_len) 9 103 based (addr (star_list_names (star_links (star_linkx).pathname_index))); 9 104 9 105 /* internal static */ 9 106 9 107 /* star_select_sw values */ 9 108 9 109 declare star_LINKS_ONLY fixed binary (2) internal static options (constant) initial (1); 9 110 declare star_BRANCHES_ONLY fixed binary (2) internal static options (constant) initial (2); 9 111 declare star_ALL_ENTRIES fixed binary (2) internal static options (constant) initial (3); 9 112 declare star_LINKS_ONLY_WITH_LINK_PATHS 9 113 fixed binary (3) internal static options (constant) initial (5); 9 114 declare star_ALL_ENTRIES_WITH_LINK_PATHS 9 115 fixed binary (3) internal static options (constant) initial (7); 9 116 9 117 /* storage system types */ 9 118 9 119 declare star_LINK fixed binary (2) unsigned internal static options (constant) initial (0); 9 120 declare star_SEGMENT fixed binary (2) unsigned internal static options (constant) initial (1); 9 121 declare star_DIRECTORY fixed binary (2) unsigned internal static options (constant) initial (2); 9 122 9 123 /* END INCLUDE FILE . . . star_structures.incl.pl1 */ 261 262 263 /******************************************************************************/ 264 /* */ 265 /* ENTRY: parser */ 266 /* */ 267 /* This entry is in charge of taking the user's command line arguments */ 268 /* and building a structure that describes the work to be done. This */ 269 /* structure is used by the other entries so they know what to do. This */ 270 /* entry may ask the user questions if it needs more information. */ 271 /* */ 272 /******************************************************************************/ 273 274 parser: 275 entry (P_in_iocbp, P_out_iocbp, P_caller_name, P_arg_list_ptr, P_first_arg, P_queued_flag, P_area_ptr, 276 P_structure_ptr, P_structure_len, P_error_message, P_code); 277 278 in_iocbp = P_in_iocbp; 279 out_iocbp = P_out_iocbp; 280 caller_name = P_caller_name; 281 arg_list_ptr = P_arg_list_ptr; 282 first_arg = P_first_arg; 283 queued_flag = P_queued_flag; 284 area_ptr = P_area_ptr; 285 286 Cleanup_Handler = Parser_Cleanup; 287 l6tip = null (); 288 level_6_iocbp = null (); /* No messages for the L6 from parser. */ 289 290 on cleanup call Cleanup_Handler (); 291 292 /* Make a quick check, since we currently only support interactive request. */ 293 294 if queued_flag 295 then call ERROR (error_table_$unimplemented_version, "Only interactive requests are currently supported."); 296 297 if area_ptr = null () then call ERROR (error_table_$bad_arg, "An area pointer must be specified."); 298 299 /* Allocate the shared structure and parse the command line arguments. */ 300 301 on area call ERROR (error_table_$area_too_small, "Attempting to allocate the l6_tran_info structure."); 302 303 allocate l6_tran_info in (based_area); 304 305 revert area; 306 307 l6_tran_info.version = l6_tran_info_v1; 308 l6_tran_info.sender_info = ""; 309 l6_tran_info.receiver_info = ""; 310 l6_tran_info.net_name = ""; /* Default */ 311 l6_tran_info.multics_data_type = ASCII; /* Default */ 312 313 call user_info_$whoami (l6_tran_info.user_name, "", ""); 314 /* Set the default. */ 315 316 l6_tran_info.password = ""; 317 l6_tran_info.flags = "0"b; /* Reset all of them. */ 318 l6_tran_info.flags.long = "1"b; /* Default */ 319 320 call cu_$arg_count_rel (number_of_args, arg_list_ptr, code); 321 if code ^= 0 then call ERROR (code); 322 323 if number_of_args - first_arg + 1 < 4 then call ERROR (error_table_$noarg, "^/^a.", USAGE); 324 325 if number_of_args - first_arg + 1 > 11 then call ERROR (error_table_$too_many_args, "^/^a.", USAGE); 326 327 do arg_idx = first_arg to number_of_args; /* Process the arguments. */ 328 329 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 330 if code ^= 0 then call ERROR (code, "Trying to get argument: ^d.", arg_idx); 331 332 if index (arg, "-") ^= 1 333 then call Process_File_Name (); 334 335 else do; /* Process a control arg. */ 336 337 if arg = "-name" | arg = "-nm" 338 then do; 339 arg_idx = arg_idx + 1; 340 341 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 342 if code ^= 0 then call ERROR (code, "Trying to get the name after a -name argument."); 343 344 call Process_File_Name (); 345 end; 346 347 else if arg = "-data_type" 348 then do; 349 arg_idx = arg_idx + 1; 350 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 351 if code ^= 0 then call ERROR (code, "Trying to get the data type."); 352 353 if arg = "ascii" | arg = "ASCII" then l6_tran_info.multics_data_type = ASCII; 354 else if arg = "binary" | arg = "BINARY" then l6_tran_info.multics_data_type = BINARY; 355 else if arg = "bcd" | arg = "BCD" then l6_tran_info.multics_data_type = BCD; 356 else call ERROR (error_table_$bad_arg, "Unrecognized data type: ^a.", arg); 357 end; 358 359 else if arg = "-long" | arg = "-lg" then l6_tran_info.flags.long = "1"b; 360 361 else if arg = "-brief" | arg = "-bf" then l6_tran_info.flags.long = "0"b; 362 363 else if arg = "-attended" | arg = "-att" then l6_tran_info.flags.l6_attended = "1"b; 364 365 else if arg = "-not_attended" | arg = "-natt" then l6_tran_info.flags.l6_attended = "0"b; 366 367 else if arg = "-user" 368 then do; 369 arg_idx = arg_idx + 1; 370 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 371 if code ^= 0 then call ERROR (code, "Trying to get the user argument."); 372 373 l6_tran_info.user_name = arg; 374 end; 375 376 else if arg = "-password" | arg = "-pw" 377 then do; 378 arg_idx = arg_idx + 1; 379 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 380 if code ^= 0 then call ERROR (code, "Trying to get the password argument."); 381 382 l6_tran_info.password = arg; 383 end; 384 385 else if arg = "-network" | arg = "-net" 386 then do; 387 arg_idx = arg_idx + 1; 388 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 389 if code ^= 0 then call ERROR (code, "Trying to get the network (channel) argument."); 390 391 l6_tran_info.net_name = arg; 392 end; 393 394 else call ERROR (error_table_$badopt, "Argument: ^a.", arg); 395 end; /* Process a control arg. */ 396 397 end; /* Process the arguments. */ 398 399 /* Make some checks to make sure we have everything we need. */ 400 401 if l6_tran_info.sender_info.pathname = "" 402 then call ERROR (error_table_$noarg, "A source pathname must be specified."); 403 404 if l6_tran_info.receiver_info.pathname = "" 405 then call ERROR (error_table_$noarg, "A destination pathname must be specified."); 406 407 if l6_tran_info.sender_info.host_name ^= "" & l6_tran_info.receiver_info.host_name ^= "" 408 then call ERROR (error_table_$too_many_args, 409 "Only one file name may have a host specified with the ""-at"" argument."); 410 411 if l6_tran_info.net_name = "" 412 then call ERROR (error_table_$noarg, "A network name (X.25 channel name) must be specified."); 413 414 if l6_tran_info.sender_info.host_name ^= "" 415 then call net_info_table_$get_host_address (l6_tran_info.sender_info.host_name, l6_tran_info.net_name, 416 l6_tran_info.net_address, code); 417 else call net_info_table_$get_host_address (l6_tran_info.receiver_info.host_name, l6_tran_info.net_name, 418 l6_tran_info.net_address, code); 419 420 if code ^= 0 421 then call ERROR (code, "Unrecognized host: ^[^a^;^a^].", l6_tran_info.sender_info.host_name ^= "", 422 l6_tran_info.sender_info.host_name, l6_tran_info.receiver_info.host_name); 423 424 if l6_tran_info.net_address = "" 425 then call ERROR (error_table_$noarg, 426 "Either the source or destination file must specify the ""-at"" argument with a host name (address)." 427 ); 428 429 430 P_structure_ptr = l6tip; 431 P_structure_len = length (unspec (l6_tran_info)); /* Length in bits. */ 432 P_error_message = ""; 433 P_code = 0; 434 435 return; 436 437 /******************************************************************************/ 438 /* */ 439 /* ENTRY: execute */ 440 /* */ 441 /* This entry is in charge of doing the actual work for a L6 file */ 442 /* transfer. It uses the structure built by the parser entry to find out */ 443 /* what to do. It may communicate with the user or operator to clarify */ 444 /* operations in some cases. */ 445 /* */ 446 /******************************************************************************/ 447 448 execute: 449 entry (P_in_iocbp, P_out_iocbp, P_caller_name, P_queued_flag, P_structure_ptr, P_structure_len, P_complete, P_unhold, 450 P_error_message, P_code); 451 452 in_iocbp = P_in_iocbp; 453 out_iocbp = P_out_iocbp; 454 caller_name = P_caller_name; 455 queued_flag = P_queued_flag; 456 l6tip = P_structure_ptr; 457 458 /* Set things up for the cleanup handler. */ 459 460 Cleanup_Handler = Execute_Cleanup; 461 status_area_ptr = null (); 462 status_ptr = null (); 463 auto_status_branch.nnames = 0; 464 auto_status_branch.names_relp = "0"b; 465 multics_file_iocbp = null (); 466 level_6_iocbp = null (); 467 file_buffer_ptr = null (); 468 comm_buffer_ptr = null (); 469 470 star_names_generated = "0"b; 471 star_entry_ptr = null (); 472 star_names_ptr = null (); 473 star_area_ptr = null (); 474 star_entry_count = 0; 475 star_entries_index = 0; 476 477 on cleanup call Cleanup_Handler (); 478 479 /* Find out who is sending, and get pathnames. */ 480 481 if l6_tran_info.sender_info.host_name = "" /* A host name means the Level 6. */ 482 then do; 483 multics_is_sender = "1"b; 484 multics_pathname = l6_tran_info.sender_info.pathname; 485 level_6_pathname = l6_tran_info.receiver_info.pathname; 486 end; 487 488 else do; 489 multics_is_sender = "0"b; 490 multics_pathname = l6_tran_info.receiver_info.pathname; 491 level_6_pathname = l6_tran_info.sender_info.pathname; 492 end; 493 494 call expand_pathname_ (multics_pathname, multics_dir, saved_multics_entry, code); 495 if code ^= 0 then call ERROR (code, "Trying to expand multics pathname: ^a.", multics_pathname); 496 497 multics_pathname = pathname_ (multics_dir, saved_multics_entry); 498 /* "Canonicalize" the pathname for vfile_. */ 499 multics_entry = saved_multics_entry; 500 501 saved_level_6_entry = reverse (before (reverse (level_6_pathname), ">")); 502 level_6_dir = 503 substr (level_6_pathname, 1, length (rtrim (level_6_pathname)) - length (rtrim (saved_level_6_entry))); 504 level_6_entry = saved_level_6_entry; 505 506 /* Make some minimal syntax checks on the L6 pathname. */ 507 508 if multics_is_sender & (level_6_entry = "**" | index (substr (level_6_pathname, 2), "^") ^= 0) 509 then call ERROR (error_table_$badpath, "Invalid L6 pathname: ^a.", level_6_pathname); 510 511 /* Get temp segments for buffers for file IO and Level 6 IO. */ 512 513 call get_temp_segments_ ("l6_tran_", temp_seg_ptrs, code); 514 if code ^= 0 then call ERROR (code, "Trying to get temp segs for I/O buffers."); 515 516 comm_buffer_len = sys_info$max_seg_size * 4; 517 file_buffer_len = sys_info$max_seg_size * 4; 518 519 /* Now do the real work. We are always the initiator and the Level 6 is the acceptor. */ 520 521 if multics_is_sender 522 then do; /* We are sending, and the file must exist. */ 523 call Open_L6_Connection (); 524 525 if ^l6_tran_info.flags.l6_attended then call Login_Dialogue (); 526 527 call OK_Dialogue (); 528 529 last_file = "0"b; /* Do the loop at least once. */ 530 do while (^last_file); 531 532 call Get_Next_Path (last_file); 533 534 info.info_version = vfs_version_1; 535 call vfile_status_ (multics_dir, multics_entry, addr (info), code); 536 if code ^= 0 537 then call ERROR (code, "Trying to get vfile_status_ on: ^a, for sending.", multics_pathname) 538 ; 539 540 call Check_Multics_File (); 541 542 call Open_Multics_File (); 543 544 call Get_Saved_Attributes (); 545 546 call File_Definition_Dialogue (); 547 548 if l6_tran_info.flags.long 549 then do; 550 total_time = clock (); 551 call ioa_$ioa_switch (out_iocbp, 552 "Starting transfer of Multics file: ^a to Level 6 file: ^a.", multics_pathname, 553 level_6_pathname); 554 end; 555 556 auto_transfer_input_args.version = transfer_input_args_version_1; 557 auto_transfer_input_args.comm_iocbp = level_6_iocbp; 558 auto_transfer_input_args.comm_buffer_ptr = comm_buffer_ptr; 559 auto_transfer_input_args.comm_buffer_len = comm_buffer_len; 560 auto_transfer_input_args.file_iocbp = multics_file_iocbp; 561 auto_transfer_input_args.file_buffer_ptr = file_buffer_ptr; 562 auto_transfer_input_args.file_buffer_len = file_buffer_len; 563 auto_transfer_input_args.file_type = multics_file_type; 564 auto_transfer_input_args.data_type = multics_data_type; 565 auto_transfer_input_args.tu_size = SEND_TU_SIZE; 566 auto_transfer_input_args.last_file = last_file; 567 568 auto_transfer_input_args.prompt_read = (level_6_chars_read ^= 0); 569 /* Set in File_Definition_Dialogue. */ 570 571 auto_transfer_output_args.version = transfer_output_args_version_1; 572 573 call l6_tran_send_file_ (addr (auto_transfer_input_args), addr (auto_transfer_output_args), 574 P_error_message, P_code); 575 if P_code ^= 0 576 then do; 577 call Cleanup_Handler (); 578 return; 579 end; 580 581 if l6_tran_info.flags.long 582 then do; 583 total_time = clock () - total_time; 584 call ioa_$ioa_switch (out_iocbp, 585 "Completed transfer of ^d records (^d bytes) in ^.3f seconds (^.3f bytes/sec).", 586 auto_transfer_output_args.record_number + 1, 587 auto_transfer_output_args.total_bytes, float (total_time) / 1e6, 588 float (auto_transfer_output_args.total_bytes) / (float (total_time) / 1e6)); 589 end; 590 591 call iox_$close (multics_file_iocbp, code); 592 call iox_$detach_iocb (multics_file_iocbp, code); 593 call iox_$destroy_iocb (multics_file_iocbp, code); 594 595 end; /* The last_file loop. */ 596 597 /* "E" is not enough for the L6, send this too. */ 598 599 level_6_chars_to_write = length (" 005&"); 600 substr (comm_buffer, 1, level_6_chars_to_write) = " 005&"; 601 602 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, code); 603 /* Ignore the code. */ 604 end; /* We are sending, and the file must exist. */ 605 606 else do; /* We are receiving, and the file may or may not exist. */ 607 call Open_L6_Connection (); 608 609 if ^l6_tran_info.flags.l6_attended then call Login_Dialogue (); 610 611 call OK_Dialogue (); 612 613 last_file = "0"b; /* Loop at least once. */ 614 do while (^last_file); 615 616 level_6_response_pathname = ""; /* The L6 may tell us differently. */ 617 call File_Definition_Dialogue (); 618 619 call Generate_Multics_Path (); 620 621 info.info_version = vfs_version_1; 622 call vfile_status_ (multics_dir, multics_entry, addr (info), code); 623 624 if code = 0 625 then do; 626 call Check_Multics_File (); 627 call Verify_File_Attributes (); 628 end; 629 630 else call Create_Multics_File (); 631 632 call Open_Multics_File (); 633 634 call Set_Saved_Attributes (); 635 636 if l6_tran_info.flags.long 637 then do; 638 total_time = clock (); 639 call ioa_$ioa_switch (out_iocbp, 640 "Starting transfer of Level 6 file: ^[^a^s^;^s^a^] to Multics file: ^a.", 641 level_6_response_pathname ^= "", level_6_response_pathname, level_6_pathname, 642 multics_pathname); 643 end; 644 645 auto_transfer_input_args.version = transfer_input_args_version_1; 646 auto_transfer_input_args.comm_iocbp = level_6_iocbp; 647 auto_transfer_input_args.comm_buffer_ptr = comm_buffer_ptr; 648 auto_transfer_input_args.comm_buffer_len = comm_buffer_len; 649 auto_transfer_input_args.file_iocbp = multics_file_iocbp; 650 auto_transfer_input_args.file_buffer_ptr = file_buffer_ptr; 651 auto_transfer_input_args.file_buffer_len = file_buffer_len; 652 auto_transfer_input_args.file_type = multics_file_type; 653 auto_transfer_input_args.data_type = multics_data_type; 654 auto_transfer_input_args.tu_size = RECV_TU_SIZE; 655 656 auto_transfer_output_args.version = transfer_output_args_version_1; 657 658 call l6_tran_receive_file_ (addr (auto_transfer_input_args), addr (auto_transfer_output_args), 659 P_error_message, P_code); 660 if P_code ^= 0 661 then do; 662 call Cleanup_Handler (); 663 return; 664 end; 665 666 last_file = auto_transfer_output_args.last_file; 667 668 if l6_tran_info.flags.long 669 then do; 670 total_time = clock () - total_time; 671 call ioa_$ioa_switch (out_iocbp, 672 "Completed transfer of ^d records (^d bytes) in ^.3f seconds (^.3f bytes/sec).", 673 auto_transfer_output_args.record_number + 1, 674 auto_transfer_output_args.total_bytes, float (total_time) / 1e6, 675 float (auto_transfer_output_args.total_bytes) / (float (total_time) / 1e6)); 676 end; 677 678 call iox_$close (multics_file_iocbp, code); 679 call iox_$detach_iocb (multics_file_iocbp, code); 680 call iox_$destroy_iocb (multics_file_iocbp, code); 681 682 end; /* The last_file loop. */ 683 end; /* We are receiving, and the file may or may not exist. */ 684 685 call Cleanup_Handler (); 686 687 P_complete = "1"b; 688 P_unhold = "1"b; 689 P_error_message = ""; 690 P_code = 0; 691 692 return; 693 694 /******************************************************************************/ 695 /* */ 696 /* These entries are not yet implemented. We just want to document their */ 697 /* calling sequences. */ 698 /* */ 699 /******************************************************************************/ 700 701 cancel: 702 entry (P_structure_ptr, P_structure_len, P_error_message, P_code); 703 704 P_code = error_table_$unimplemented_version; 705 return; 706 707 modify: 708 entry (P_in_iocbp, P_out_iocbp, P_caller_name, P_arg_list_ptr, P_first_arg, P_structure_ptr, P_structure_len, 709 P_error_message, P_code); 710 711 P_code = error_table_$unimplemented_version; 712 return; 713 714 list: 715 entry (P_arg_list_ptr, P_first_arg, P_structure_ptr, P_structure_len, P_list_flag, P_output_lines, P_error_message, 716 P_code); 717 718 P_code = error_table_$unimplemented_version; 719 return; 720 721 info: 722 entry (P_structure_ptr, P_structure_len, P_nasp_info_ptr, P_error_message, P_code); 723 724 P_code = error_table_$unimplemented_version; 725 return; 726 727 Check_Multics_File: 728 proc (); 729 730 multics_file_type = info.type; 731 732 if multics_file_type > BLOCKED_FILE_TYPE 733 then call ERROR (error_table_$bad_file, 734 "The Multics file must be unstructured, sequential, or blocked. File ^a is ^a.", 735 multics_pathname, FILE_TYPE_TO_PNAME (multics_file_type)); 736 737 if multics_file_type = BLOCKED_FILE_TYPE 738 then do; 739 multics_file_block_size = blk_info.max_rec_len; 740 multics_file_size = blk_info.end_pos; 741 end; 742 743 else do; 744 multics_file_block_size = 0; 745 multics_file_size = 0; 746 end; 747 748 multics_file_l6_type = L6_S_FILE_TYPE; /* This is the default. */ 749 750 /* Now find out if the file is special by looking for the suffix we put on it. */ 751 752 status_area_ptr = get_user_free_area_ (); 753 status_ptr = addr (auto_status_branch); 754 755 call hcs_$status_ (multics_dir, multics_entry, CHASE, status_ptr, status_area_ptr, code); 756 if code ^= 0 then call ERROR (code, "Trying to get status for: ^a.", multics_pathname); 757 758 if status_branch.short.type = Directory then call ERROR (error_table_$dirseg, "^a.", multics_pathname); 759 760 code = 1; /* Go through the loop at least once. */ 761 do i = lbound (status_entry_names, 1) to hbound (status_entry_names, 1) while (code ^= 0); 762 call match_star_name_ ((status_entry_names (i)), "**.*.l6*", code); 763 if code = 0 764 then do; 765 suffix = reverse (before (reverse (rtrim (status_entry_names (i))), ".")); 766 767 do i = lbound (MULTICS_L6_FILE_SUFFIX, 1) to hbound (MULTICS_L6_FILE_SUFFIX, 1) 768 while (suffix ^= MULTICS_L6_FILE_SUFFIX (i)); 769 end; 770 771 if i > hbound (MULTICS_L6_FILE_SUFFIX, 1) 772 then code = 1; /* Keep looking. */ 773 else multics_file_l6_type = i; 774 end; 775 end; 776 777 if status_branch.nnames > 0 & status_branch.names_relp ^= "0"b 778 then free status_entry_names in (status_area_ptr -> based_area); 779 /* Cleanup after ourselves. */ 780 781 if l6_tran_info.multics_data_type = BINARY & multics_file_type = UNSTRUCTURED_FILE_TYPE 782 then call ERROR (error_table_$incompatible_file_attribute, 783 "A binary file must be a sequential or blocked file: ^a.", multics_pathname); 784 785 return; 786 787 end Check_Multics_File; 788 789 Create_Multics_File: 790 proc (); 791 792 multics_file_l6_type = level_6_file_type; 793 794 if level_6_file_type = L6_S_FILE_TYPE & level_6_data_type = ASCII 795 then multics_file_type = UNSTRUCTURED_FILE_TYPE; 796 797 else if level_6_file_type = L6_S_FILE_TYPE then multics_file_type = SEQUENTIAL_FILE_TYPE; 798 799 else multics_file_type = BLOCKED_FILE_TYPE; 800 801 if multics_file_type = BLOCKED_FILE_TYPE 802 then do; 803 if level_6_max_record_size = 0 804 then multics_file_block_size = 256;/* Set default. */ 805 else multics_file_block_size = level_6_max_record_size; 806 end; 807 808 else multics_file_block_size = 0; 809 810 multics_file_size = 0; 811 812 if MULTICS_L6_FILE_SUFFIX (multics_file_l6_type) ^= "" 813 then do; 814 call suffixed_name_$make (multics_entry, MULTICS_L6_FILE_SUFFIX (multics_file_l6_type), multics_entry, 815 code); 816 if code ^= 0 817 then call ERROR (code, "Trying to add the suffix ""^a"" to ^a", 818 MULTICS_L6_FILE_SUFFIX (multics_file_l6_type), multics_pathname); 819 820 multics_pathname = pathname_ (multics_dir, multics_entry); 821 end; 822 823 call hcs_$append_branch (multics_dir, multics_entry, RW_ACCESS_BIN, code); 824 if code ^= 0 then call ERROR (code, "Trying to create: ^a.", multics_pathname); 825 826 return; 827 828 end Create_Multics_File; 829 830 File_Definition_Dialogue: 831 proc (); 832 833 dcl acceptor_file_count pic "99"; 834 dcl chars_read fixed bin (21); 835 dcl ci_size pic "99999"; 836 dcl char_position fixed bin; 837 dcl data_type char (1); 838 dcl file_access char (1); 839 dcl file_name_len pic "99"; 840 dcl file_size pic "99999"; 841 dcl file_type char (1); 842 dcl fixed_response_len fixed bin (21); 843 dcl indicator char (1); 844 dcl initiator_file_count pic "99"; 845 dcl key_length pic "999"; 846 dcl key_offset pic "9999"; 847 dcl key_type char (1); 848 849 dcl 1 l6_response unaligned based (comm_buffer_ptr), 850 2 header, 851 3 first_char char (1), /* Should be "8". */ 852 3 response_len pic "999", 853 3 ack_indicator char (1), /* "$"--yes, "&"--no. */ 854 2 rest_of_response char (rest_of_response_len); 855 856 dcl l6_response_path_len pic "99"; 857 dcl output_message_len pic "999"; 858 dcl percent_fill pic "99"; 859 dcl record_size pic "9999"; 860 dcl rest_of_response_len fixed bin; 861 dcl starting_record pic "99999"; 862 863 if multics_is_sender 864 then do; /* We must describe the file to the Level 6. */ 865 file_name_len = length (rtrim (level_6_pathname)) + 1; 866 /* The L6 requires a trailing space in the name. */ 867 record_size = multics_file_block_size; 868 starting_record = 0; 869 file_size = multics_file_size; 870 initiator_file_count = 1; 871 acceptor_file_count = 1; 872 873 call ioa_$rsnpnnl (" 000 O!^2a^a ^[#^a^;^s#P^aQ^a^[R^a^;^s^]S^a^[Z^a^;^s^][^a\^a^]", comm_buffer, 874 level_6_chars_to_write, file_name_len, rtrim (level_6_pathname), saved_attributes ^= "", 875 saved_attributes, L6_FILE_TYPE (multics_file_l6_type), 876 L6_DATA_TYPE (l6_tran_info.multics_data_type), multics_file_block_size > 0, record_size, 877 starting_record, multics_file_size > 0, file_size, initiator_file_count, acceptor_file_count); 878 879 output_message_len = level_6_chars_to_write; 880 /* Set the message length. */ 881 substr (comm_buffer, 2, 3) = output_message_len; 882 883 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, code); 884 if code ^= 0 then call ERROR (code, "Trying to send the output file definition to the Level 6."); 885 end; /* We must describe the file to the Level 6. */ 886 887 else do; /* The Level 6 will tell us about the file. */ 888 file_name_len = length (rtrim (level_6_pathname)) + 1; 889 /* The L6 requires a trailing space in the name. */ 890 891 call ioa_$rsnpnnl (" 000 I!^2a^a ", comm_buffer, level_6_chars_to_write, file_name_len, 892 rtrim (level_6_pathname)); 893 894 output_message_len = level_6_chars_to_write; 895 /* Set the message length. */ 896 substr (comm_buffer, 2, 3) = output_message_len; 897 898 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, code); 899 if code ^= 0 then call ERROR (code, "Trying to send the input file definition to the Level 6."); 900 end; /* The Level 6 will tell us about the file. */ 901 902 /* Get the Level 6 response to our request. This involves a loop to get everything he says he sent. */ 903 904 call l6_tran_util_$get_chars (level_6_iocbp, comm_buffer_ptr, comm_buffer_len, level_6_chars_read, code); 905 if code ^= 0 then call ERROR (code, "Trying to read the output file definition ack from the Level 6."); 906 907 fixed_response_len = l6_response.response_len; 908 rest_of_response_len = fixed_response_len - length (string (l6_response.header)); 909 910 do chars_read = level_6_chars_read repeat chars_read + level_6_chars_read 911 while (chars_read < fixed_response_len); 912 call l6_tran_util_$get_chars (level_6_iocbp, add_char_offset_ (comm_buffer_ptr, chars_read), 913 comm_buffer_len - chars_read, level_6_chars_read, code); 914 if code ^= 0 then call ERROR (code, "Trying to read the output file definition ack from the Level 6."); 915 end; 916 917 918 /*****************************************************************************/ 919 /* */ 920 /* Do the following strange thing in case the first prompt sent by the L6 */ 921 /* was combined with the file definition response when we called */ 922 /* get_chars. The variable level_6_chars_read is declared in our caller, */ 923 /* so set it to be any extra characters after the response. We will */ 924 /* assume that this is the prompt and will not try to get the prompt in */ 925 /* l6_tran_send_file_. We have to do a similar thing in */ 926 /* l6_tran_overseer_, but there we use a write_status to guarantee that */ 927 /* our response is not combined with our prompt. This stuff is all a */ 928 /* kludge because there is no way to use the "more_data" bit in an X.25 */ 929 /* packet on Multics. */ 930 /* */ 931 /*****************************************************************************/ 932 933 level_6_chars_read = level_6_chars_read - fixed_response_len; 934 935 /*****************************************************************************/ 936 937 if l6_response.ack_indicator ^= "$" 938 then do; 939 if l6_response.rest_of_response = "'82FF" 940 then call ERROR (0b, "The last file has been received."); 941 /* Not really an error. */ 942 else call ERROR (error_table_$fatal_error, 943 "The Level 6 rejected the file transfer. From L6: ^a.", l6_response.rest_of_response); 944 end; 945 946 /* Set default level 6 file attributes, and then get the real ones, if any. */ 947 948 level_6_data_type = ASCII; 949 level_6_file_type = L6_S_FILE_TYPE; 950 level_6_max_record_size = 0; 951 952 if l6_response.rest_of_response ^= "" 953 then do; /* Process the file attributes. */ 954 char_position = 1; 955 do while (char_position <= length (l6_response.rest_of_response)); 956 /* Loop through the file attributes. */ 957 indicator = substr (l6_response.rest_of_response, char_position, length (indicator)); 958 char_position = char_position + length (indicator); 959 960 if indicator = "!" 961 then do; /* He is sending us his pathname. */ 962 string (l6_response_path_len) = 963 substr (l6_response.rest_of_response, char_position, 964 length (l6_response_path_len)); 965 966 char_position = char_position + length (l6_response_path_len); 967 968 level_6_response_pathname = 969 substr (l6_response.rest_of_response, char_position, l6_response_path_len); 970 971 char_position = char_position + l6_response_path_len; 972 end; /* He is sending us his pathname. */ 973 974 else if indicator = "#" 975 then saved_attributes = substr (l6_response.rest_of_response, char_position); 976 977 else if indicator = "P" 978 then do; /* File type */ 979 file_type = substr (l6_response.rest_of_response, char_position, length (file_type)); 980 char_position = char_position + length (file_type); 981 982 level_6_file_type = index (string (L6_FILE_TYPE), file_type); 983 984 if level_6_file_type = 0 985 then call ERROR (error_table_$bad_file, 986 "The Level 6 file type: ""^a"", is not supported.", file_type); 987 end; 988 989 else if indicator = "Q" 990 then do; /* Data type */ 991 data_type = substr (l6_response.rest_of_response, char_position, length (data_type)); 992 char_position = char_position + length (data_type); 993 994 level_6_data_type = index (string (L6_DATA_TYPE), data_type); 995 996 if level_6_data_type = 0 997 then call ERROR (error_table_$bad_file, 998 "The Level 6 data type: ""^a"", is not supported.", data_type); 999 end; 1000 1001 else if indicator = "R" 1002 then do; /* Record size */ 1003 string (record_size) = 1004 substr (l6_response.rest_of_response, char_position, length (record_size)); 1005 char_position = char_position + length (record_size); 1006 1007 level_6_max_record_size = record_size; 1008 end; 1009 1010 else if indicator = "S" 1011 then do; /* Starting record */ 1012 string (starting_record) = 1013 substr (l6_response.rest_of_response, char_position, length (starting_record)); 1014 char_position = char_position + length (starting_record); 1015 end; 1016 1017 else if indicator = "T" 1018 then do; /* File access code */ 1019 file_access = 1020 substr (l6_response.rest_of_response, char_position, length (file_access)); 1021 char_position = char_position + length (file_access); 1022 end; 1023 1024 else if indicator = "U" 1025 then do; /* Key length */ 1026 string (key_length) = 1027 substr (l6_response.rest_of_response, char_position, length (key_length)); 1028 char_position = char_position + length (key_length); 1029 end; 1030 1031 else if indicator = "V" 1032 then do; /* Key offset */ 1033 string (key_offset) = 1034 substr (l6_response.rest_of_response, char_position, length (key_offset)); 1035 char_position = char_position + length (key_offset); 1036 end; 1037 1038 else if indicator = "W" 1039 then do; /* Percent fill */ 1040 string (percent_fill) = 1041 substr (l6_response.rest_of_response, char_position, length (percent_fill)); 1042 char_position = char_position + length (percent_fill); 1043 end; 1044 1045 else if indicator = "X" 1046 then do; /* Key type */ 1047 key_type = substr (l6_response.rest_of_response, char_position, length (key_type)); 1048 char_position = char_position + length (key_type); 1049 end; 1050 1051 else if indicator = "Y" 1052 then do; /* CI size */ 1053 string (ci_size) = 1054 substr (l6_response.rest_of_response, char_position, length (ci_size)); 1055 char_position = char_position + length (ci_size); 1056 end; 1057 1058 else if indicator = "Z" 1059 then do; /* File size (in CI units) */ 1060 string (file_size) = 1061 substr (l6_response.rest_of_response, char_position, length (file_size)); 1062 char_position = char_position + length (file_size); 1063 end; 1064 1065 else if indicator = "[" 1066 then do; /* Initiator's file count */ 1067 string (initiator_file_count) = 1068 substr (l6_response.rest_of_response, char_position, 1069 length (initiator_file_count)); 1070 char_position = char_position + length (initiator_file_count); 1071 end; 1072 1073 else if indicator = "\" 1074 then do; /* Acceptor's file count */ 1075 string (acceptor_file_count) = 1076 substr (l6_response.rest_of_response, char_position, length (acceptor_file_count)) 1077 ; 1078 char_position = char_position + length (acceptor_file_count); 1079 end; 1080 1081 else ; /* Not recognized, skip it */ 1082 1083 end; /* Loop through the attributes. */ 1084 end; /* Process the file attributes. */ 1085 1086 return; 1087 1088 end File_Definition_Dialogue; 1089 1090 Generate_Multics_Path: 1091 proc (); 1092 1093 dcl code fixed bin (35); 1094 dcl l6_entryname char (32); 1095 1096 if level_6_response_pathname ^= "" 1097 then do; /* We must generate the Multics name. */ 1098 l6_entryname = reverse (before (reverse (level_6_response_pathname), ">")); 1099 1100 call get_equal_name_ (l6_entryname, saved_multics_entry, multics_entry, code); 1101 if code ^= 0 1102 then call ERROR (code, "Trying to do equal name processing on: ^a, matching: ^a.", 1103 saved_multics_entry, l6_entryname); 1104 1105 multics_pathname = pathname_ (multics_dir, multics_entry); 1106 end; /* We must generate the Multics name. */ 1107 1108 return; 1109 1110 end Generate_Multics_Path; 1111 1112 Get_Next_Path: 1113 proc (P_last_file); 1114 1115 dcl P_last_file bit (1) parameter; 1116 1117 dcl code fixed bin (35); 1118 1119 call check_star_name_$entry (saved_multics_entry, code); 1120 1121 if code = 0 then P_last_file = "1"b; /* Not a star name, nothing to do. */ 1122 1123 else if code = error_table_$badstar then call ERROR (code, "Multics file name: ^a.", saved_multics_entry); 1124 1125 else do; /* We have a star name. */ 1126 if ^star_names_generated 1127 then do; /* Get the star list once. */ 1128 star_area_ptr = get_user_free_area_ (); 1129 1130 call hcs_$star_ (multics_dir, saved_multics_entry, star_ALL_ENTRIES, star_area_ptr, 1131 star_entry_count, star_entry_ptr, star_names_ptr, code); 1132 if code ^= 0 1133 then call ERROR (code, "Trying to match starname ^a in directory ^a.", saved_multics_entry, 1134 multics_dir); 1135 1136 /* Set the index to the first non-directory entry. */ 1137 1138 do star_entries_index = 1 to hbound (star_entries, 1) 1139 while (star_entries (star_entries_index).type = star_DIRECTORY); 1140 end; 1141 1142 if star_entries_index > hbound (star_entries, 1) 1143 then call ERROR (error_table_$dirseg, "Only directories match ^a.", multics_pathname); 1144 1145 star_names_generated = "1"b; 1146 end; /* Get the star list once. */ 1147 1148 /* Just use the first matching name on an entry. */ 1149 1150 multics_entry = star_names (star_entries (star_entries_index).nindex); 1151 multics_pathname = pathname_ (multics_dir, multics_entry); 1152 1153 /* Now update the star_entries_index and set P_last_file. */ 1154 1155 do star_entries_index = star_entries_index + 1 to hbound (star_entries, 1) 1156 while (star_entries (star_entries_index).type = star_DIRECTORY); 1157 end; 1158 1159 if star_entries_index > hbound (star_entries, 1) 1160 then P_last_file = "1"b; 1161 else P_last_file = "0"b; 1162 end; /* We have a star name. */ 1163 1164 /* Now generate the L6 pathname. */ 1165 1166 call get_equal_name_ (multics_entry, saved_level_6_entry, level_6_entry, code); 1167 if code ^= 0 1168 then call ERROR (code, "Trying to do equalname matching on L6 name: ^a, against Multics name: ^a.", 1169 saved_level_6_entry, multics_entry); 1170 1171 level_6_pathname = rtrim (level_6_dir) || level_6_entry; 1172 1173 return; 1174 1175 end Get_Next_Path; 1176 1177 Get_Saved_Attributes: 1178 proc (); 1179 1180 if multics_file_l6_type ^= L6_S_FILE_TYPE 1181 then do; 1182 call iox_$read_record (multics_file_iocbp, file_buffer_ptr, file_buffer_len, multics_chars_read, code) 1183 ; 1184 if code ^= 0 1185 then call ERROR (code, "Trying to get the file attributes from the multics file: ^a.", 1186 multics_pathname); 1187 1188 saved_attributes = substr (file_buffer, 1, multics_chars_read); 1189 end; 1190 1191 else saved_attributes = ""; 1192 1193 return; 1194 1195 end Get_Saved_Attributes; 1196 1197 Login_Dialogue: 1198 proc (); 1199 1200 dcl chars_read fixed bin (21); 1201 dcl greeting_message_found bit (1); 1202 1203 call l6_tran_util_$get_chars (level_6_iocbp, comm_buffer_ptr, comm_buffer_len, level_6_chars_read, code); 1204 if code ^= 0 then call ERROR (code, "Trying to read the Level 6 greeting message."); 1205 1206 greeting_message_found = "0"b; 1207 do chars_read = level_6_chars_read repeat chars_read + level_6_chars_read while (^greeting_message_found); 1208 /* Discard extraneous lines. */ 1209 1210 if index (substr (comm_buffer, 1, chars_read), "LOAD = ") ^= 0 1211 | index (substr (comm_buffer, 1, chars_read), "Load = ") ^= 0 1212 | index (substr (comm_buffer, 1, chars_read), "LOGIN") ^= 0 1213 then do; /* We have found a greeting message. */ 1214 greeting_message_found = "1"b; 1215 1216 if debug_flag 1217 then call ioa_$rsnpnnl ("l ^a -bf -create -nw -pf -nosave -po l6_tran_overseer_^/", 1218 comm_buffer, level_6_chars_to_write, l6_tran_info.user_name); 1219 1220 else call ioa_$rsnpnnl ("L ^a -PO TRANX -ARG ^[R^;S^]DAU^a", comm_buffer, 1221 level_6_chars_to_write, l6_tran_info.user_name, multics_is_sender, CR); 1222 1223 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, code); 1224 if code ^= 0 then call ERROR (code, "Trying to send the login line to the Level 6."); 1225 1226 /* Read characters until we find "HI" or "PASSWORD" as a substring, then assume we got everything since there is no delimiter. */ 1227 1228 call l6_tran_util_$get_chars (level_6_iocbp, comm_buffer_ptr, comm_buffer_len, 1229 level_6_chars_read, code); 1230 if code ^= 0 then call ERROR (code, "Trying to read ""HI"" or ""PASSWORD"" after login."); 1231 1232 do chars_read = level_6_chars_read repeat chars_read + level_6_chars_read 1233 while ((index (substr (comm_buffer, 1, chars_read), "HI") = 0) 1234 & (index (substr (comm_buffer, 1, chars_read), "PASSWORD") = 0)); 1235 call l6_tran_util_$get_chars (level_6_iocbp, add_char_offset_ (comm_buffer_ptr, chars_read), 1236 comm_buffer_len - chars_read, level_6_chars_read, code); 1237 if code ^= 0 then call ERROR (code, "Trying to read ""HI"" or ""PASSWORD"" after login."); 1238 end; 1239 1240 if index (substr (comm_buffer, 1, chars_read), "PASSWORD") ^= 0 1241 then do; /* L6 wants a password. */ 1242 if l6_tran_info.password = "" 1243 then do; /* Get the password from the user. */ 1244 call read_password_$switch (out_iocbp, in_iocbp, 1245 "Level 6 has requested password:", l6_tran_info.password, code); 1246 /* Forget the code, we won't use it anyway. */ 1247 end; /* Get the password from the user. */ 1248 1249 level_6_chars_to_write = length (rtrim (l6_tran_info.password)); 1250 1251 if debug_flag 1252 then substr (comm_buffer, 1, level_6_chars_to_write) = 1253 rtrim (l6_tran_info.password) || " 1254 "; 1255 else substr (comm_buffer, 1, level_6_chars_to_write) = 1256 rtrim (l6_tran_info.password); 1257 1258 l6_tran_info.password = ""; 1259 /* Erase the password now. */ 1260 1261 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, 1262 code); 1263 if code ^= 0 then call ERROR (code, "Trying to send the password to the Level 6."); 1264 1265 /* Read characters until we find "HI" as a substring, then assume we got everything since there is no delimiter. */ 1266 1267 call l6_tran_util_$get_chars (level_6_iocbp, comm_buffer_ptr, comm_buffer_len, 1268 level_6_chars_read, code); 1269 if code ^= 0 then call ERROR (code, "Trying to read ""HI"" after login."); 1270 1271 do chars_read = level_6_chars_read repeat chars_read + level_6_chars_read 1272 while (index (substr (comm_buffer, 1, chars_read), "HI") = 0); 1273 call l6_tran_util_$get_chars (level_6_iocbp, 1274 add_char_offset_ (comm_buffer_ptr, chars_read), comm_buffer_len - chars_read, 1275 level_6_chars_read, code); 1276 if code ^= 0 then call ERROR (code, "Trying to read ""HI"" after login."); 1277 end; 1278 1279 end; /* L6 wants a password. */ 1280 1281 else ; /* We found the "HI", and that's it. */ 1282 1283 end; /* We have found a greeting message. */ 1284 1285 else do; /* Get some more characters and look again. */ 1286 greeting_message_found = "0"b; 1287 1288 call l6_tran_util_$get_chars (level_6_iocbp, add_char_offset_ (comm_buffer_ptr, chars_read), 1289 comm_buffer_len - chars_read, level_6_chars_read, code); 1290 if code ^= 0 then call ERROR (code, "Trying to read the Level 6 greeting message."); 1291 end; 1292 1293 end; /* Discard extraneous lines. */ 1294 1295 return; 1296 1297 end Login_Dialogue; 1298 1299 OK_Dialogue: 1300 proc (); 1301 1302 level_6_chars_to_write = length ("OK?"); 1303 substr (comm_buffer, 1, level_6_chars_to_write) = "OK?"; 1304 1305 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, code); 1306 if code ^= 0 then call ERROR (code, "Trying to send ""OK?"" to the Level 6."); 1307 1308 call l6_tran_util_$get_chars (level_6_iocbp, comm_buffer_ptr, comm_buffer_len, level_6_chars_read, code); 1309 if code ^= 0 then call ERROR (code, "Trying to read ""OK"" from the Level 6."); 1310 1311 if substr (comm_buffer, 1, level_6_chars_read) ^= "OK" then ; 1312 /* Something wrong, but keep going anyway. */ 1313 1314 return; 1315 1316 end OK_Dialogue; 1317 1318 Open_L6_Connection: 1319 proc (); 1320 1321 call ioa_$rsnnl ("tty_ ^a -destination ^a", level_6_attach_desc, ignored_len, l6_tran_info.net_name, 1322 l6_tran_info.net_address); 1323 1324 call iox_$attach_name (l6_tran_info.net_name, level_6_iocbp, (level_6_attach_desc), null (), code); 1325 if code ^= 0 & code ^= error_table_$not_detached 1326 then call ERROR (code, "Trying to attach the Level 6 on channel: ^a.", l6_tran_info.net_name); 1327 1328 call iox_$open (level_6_iocbp, Stream_input_output, "0"b, code); 1329 if code ^= 0 & code ^= error_table_$not_closed 1330 then call ERROR (code, "Trying to open the Level 6 channel: ^a.", l6_tran_info.net_name); 1331 1332 call iox_$modes (level_6_iocbp, "8bit,rawi,rawo", "", code); 1333 if code ^= 0 1334 then call ERROR (code, "Trying to set modes on switch: ^a to ""8bit,rawi,rawo"".", l6_tran_info.net_name); 1335 1336 return; 1337 1338 end Open_L6_Connection; 1339 1340 Open_Multics_File: 1341 proc (); 1342 1343 call ioa_$rsnnl ("^[record_stream_ -target ^]vfile_ ^a^[ -blocked ^d^;^s^]", multics_file_attach_desc, 1344 ignored_len, multics_file_type = UNSTRUCTURED_FILE_TYPE, multics_pathname, 1345 multics_file_type = BLOCKED_FILE_TYPE, multics_file_block_size); 1346 1347 call iox_$attach_name (multics_entry, multics_file_iocbp, (multics_file_attach_desc), null (), code); 1348 if code ^= 0 & code ^= error_table_$not_detached 1349 then call ERROR (code, "Trying to attach file: ^a through switch: ^a.", multics_pathname, multics_entry); 1350 1351 if multics_is_sender 1352 then multics_file_open_mode = Sequential_input; 1353 else multics_file_open_mode = Sequential_output; 1354 1355 call iox_$open (multics_file_iocbp, multics_file_open_mode, "0"b, code); 1356 if code ^= 0 & code ^= error_table_$not_closed 1357 then call ERROR (code, "Trying to open file: ^a through switch: ^a.", multics_pathname, multics_entry); 1358 1359 return; 1360 1361 end Open_Multics_File; 1362 1363 Process_File_Name: 1364 proc (); 1365 1366 dcl code fixed bin (35); 1367 dcl sender_file_flag bit (1); 1368 1369 if l6_tran_info.sender_info.pathname = "" 1370 then do; /* From file first. */ 1371 l6_tran_info.sender_info.pathname = arg; 1372 sender_file_flag = "1"b; 1373 end; 1374 1375 else do; /* To file second. */ 1376 l6_tran_info.receiver_info.pathname = arg; 1377 sender_file_flag = "0"b; 1378 end; 1379 1380 /* Now peek ahead in the arg list to see if there is a host specified for this file. */ 1381 1382 call cu_$arg_ptr_rel (arg_idx + 1, arg_ptr, arg_len, code, arg_list_ptr); 1383 1384 if code = 0 1385 then do; /* There is a next arg. */ 1386 if arg = "-at" 1387 then do; /* Pick up the host name. */ 1388 arg_idx = arg_idx + 2; /* Set to host arg number. */ 1389 1390 call cu_$arg_ptr_rel (arg_idx, arg_ptr, arg_len, code, arg_list_ptr); 1391 if code ^= 0 1392 then call ERROR (code, "Trying to get the host name after the ""-at"" argument."); 1393 1394 if sender_file_flag 1395 then l6_tran_info.sender_info.host_name = arg; 1396 else l6_tran_info.receiver_info.host_name = arg; 1397 1398 end; /* Pick up the host name. */ 1399 end; /* There is a next arg. */ 1400 1401 return; 1402 1403 end Process_File_Name; 1404 1405 Set_Saved_Attributes: 1406 proc (); 1407 1408 if multics_file_l6_type ^= L6_S_FILE_TYPE 1409 then do; 1410 multics_chars_to_write = length (saved_attributes); 1411 substr (file_buffer, 1, multics_chars_to_write) = saved_attributes; 1412 1413 call iox_$write_record (multics_file_iocbp, file_buffer_ptr, multics_chars_to_write, code); 1414 if code ^= 0 then call ERROR (code, "Trying to save the file attributes in: ^a.", multics_pathname); 1415 end; 1416 1417 return; 1418 1419 end Set_Saved_Attributes; 1420 1421 Verify_File_Attributes: 1422 proc (); 1423 1424 if multics_file_l6_type ^= level_6_file_type 1425 then call ERROR (error_table_$bad_file, 1426 "The Level 6 file type does not match the existing Multics file type. (M = ^a, L6 = ^a).", 1427 L6_FILE_TYPE (multics_file_l6_type), L6_FILE_TYPE (level_6_file_type)); 1428 1429 if multics_file_type = BLOCKED_FILE_TYPE & multics_file_block_size < level_6_max_record_size 1430 then call ERROR (error_table_$bad_file, 1431 "The Multics file block size is less than the Level 6 record size. (M = ^d, L6 = ^d).", 1432 multics_file_block_size, level_6_max_record_size); 1433 1434 if multics_file_type = UNSTRUCTURED_FILE_TYPE 1435 & ^(level_6_file_type = L6_S_FILE_TYPE & level_6_data_type = ASCII) 1436 then call ERROR (error_table_$bad_file, 1437 "Only a sequential ascii Level 6 file may be transferred to an unstructured Multics file."); 1438 1439 return; 1440 1441 end Verify_File_Attributes; 1442 1443 /*****************************************************************************/ 1444 /* */ 1445 /* PROCEDURE: ERROR */ 1446 /* */ 1447 /* This subroutine expects arguments as follows: */ 1448 /* */ 1449 /* call ERROR (code, ioa_control_string, ioa_arguments, ...) */ 1450 /* */ 1451 /* where: code is fixed bin (35), and ioa_control_string and ioa_arguments */ 1452 /* are optional character strings as defined for ioa_. */ 1453 /* */ 1454 /* Some global variables are used: */ 1455 /* */ 1456 /* Cleanup_Handler (a procedure that does cleanup) */ 1457 /* */ 1458 /* For commands: */ 1459 /* report_error (an entry variable set to com_err_ or active_fnc_err_)*/ 1460 /* command_name (the character string name of the command) */ 1461 /* return_arg_ptr (used to return "false" for active functions) */ 1462 /* */ 1463 /* For subroutines: */ 1464 /* depends on the error reporting strategy chosen. */ 1465 /* */ 1466 /* At completion a non-local goto is done to the label RETURN. */ 1467 /* */ 1468 /* Declarations are expected for: */ 1469 /* */ 1470 /* cu_$arg_list_ptr */ 1471 /* cu_$arg_ptr */ 1472 /* cu_$arg_count */ 1473 /* error_table_$fatal_error */ 1474 /* ioa_$general_rs */ 1475 /* */ 1476 /*****************************************************************************/ 1477 1478 ERROR: 1479 proc () options (variable, non_quick); 1480 1481 dcl arg_list_ptr ptr; 1482 dcl arg_len fixed bin (21); 1483 dcl arg_ptr ptr; 1484 dcl based_code fixed bin (35) based; 1485 dcl caller_code fixed bin (35); 1486 dcl code fixed bin (35); 1487 dcl err_msg char (256); 1488 dcl err_msg_len fixed bin (21); 1489 dcl nargs fixed bin; 1490 1491 call cu_$arg_count (nargs, code); /* IGNORE CODE */ 1492 1493 if nargs >= 1 1494 then do; /* We were called correctly. */ 1495 arg_ptr = null (); /* Set this so we know if cu_$arg_ptr worked. */ 1496 call cu_$arg_ptr (1, arg_ptr, arg_len, code); 1497 1498 if arg_ptr ^= null () 1499 then caller_code = arg_ptr -> based_code; 1500 /* The normal case. */ 1501 else caller_code = error_table_$fatal_error; 1502 /* Some problem with our arg list. */ 1503 1504 if nargs > 1 1505 then do; /* There is a message. */ 1506 call cu_$arg_list_ptr (arg_list_ptr); 1507 call ioa_$general_rs (arg_list_ptr, 2, 3, err_msg, err_msg_len, "1"b, "0"b); 1508 end; 1509 1510 else do; /* No message. */ 1511 err_msg = ""; 1512 err_msg_len = 0; 1513 end; 1514 end; /* We were called correctly. */ 1515 1516 else do; /* We were called with no arguments. */ 1517 caller_code = error_table_$fatal_error; /* The best we can do. */ 1518 err_msg = ""; 1519 err_msg_len = 0; 1520 end; /* We were called with no arguments. */ 1521 1522 /* The following lines must be modified depending on the error reporting strategy used. */ 1523 1524 if level_6_iocbp ^= null () & comm_buffer_ptr ^= null () 1525 then do; /* Tell the Level 6. */ 1526 1527 dcl pic_err_msg_len pic "99"; 1528 1529 pic_err_msg_len = min (99, err_msg_len); 1530 1531 call ioa_$rsnpnnl ("CU^a^aR", comm_buffer, level_6_chars_to_write, pic_err_msg_len, 1532 substr (err_msg, 1, pic_err_msg_len)); 1533 1534 call l6_tran_util_$put_chars (level_6_iocbp, comm_buffer_ptr, level_6_chars_to_write, code); 1535 end; 1536 1537 P_error_message = substr (err_msg, 1, err_msg_len); 1538 P_code = caller_code; 1539 1540 /* Clean up and do a non-local goto back to the outermost block. */ 1541 1542 call Cleanup_Handler (); 1543 goto RETURN; 1544 1545 end ERROR; 1546 1547 Parser_Cleanup: 1548 proc (); 1549 1550 if l6tip ^= null () then free l6_tran_info in (based_area); 1551 1552 return; 1553 1554 end Parser_Cleanup; 1555 1556 Execute_Cleanup: 1557 proc (); 1558 1559 dcl code fixed bin (35); 1560 1561 if status_area_ptr ^= null () & status_ptr ^= null () 1562 then do; 1563 if status_branch.nnames > 1 & status_branch.names_relp ^= "0"b 1564 then free status_entry_names in (status_area_ptr -> based_area); 1565 end; 1566 1567 if star_area_ptr ^= null () 1568 then do; /* Order is important here. */ 1569 if star_names_ptr ^= null () & star_entry_ptr ^= null () 1570 then free star_names in (star_area_ptr -> based_area); 1571 1572 if star_entry_ptr ^= null () then free star_entries in (star_area_ptr -> based_area); 1573 end; 1574 1575 if multics_file_iocbp ^= null () 1576 then do; 1577 call iox_$close (multics_file_iocbp, code); 1578 call iox_$detach_iocb (multics_file_iocbp, code); 1579 call iox_$destroy_iocb (multics_file_iocbp, code); 1580 end; 1581 1582 if level_6_iocbp ^= null () 1583 then do; 1584 call iox_$close (level_6_iocbp, code); 1585 call iox_$detach_iocb (level_6_iocbp, code); 1586 call iox_$destroy_iocb (level_6_iocbp, code); 1587 end; 1588 1589 if file_buffer_ptr ^= null () | comm_buffer_ptr ^= null () 1590 then call release_temp_segments_ ("l6_tran_", temp_seg_ptrs, code); 1591 1592 return; 1593 1594 end Execute_Cleanup; 1595 1596 debug_on: 1597 entry (); 1598 debug_flag = "1"b; 1599 return; 1600 1601 debug_off: 1602 entry (); 1603 debug_flag = "0"b; 1604 return; 1605 1606 end l6_tran_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1129.1 l6_tran_.pl1 >spec>on>41-15>l6_tran_.pl1 161 1 11/12/82 1624.7 l6_tran_constants.incl.pl1 >ldd>include>l6_tran_constants.incl.pl1 245 2 11/12/82 1624.7 nasp_info.incl.pl1 >ldd>include>nasp_info.incl.pl1 247 3 11/12/82 1624.7 l6_tran_transfer_args.incl.pl1 >ldd>include>l6_tran_transfer_args.incl.pl1 251 4 07/19/79 1547.0 vfs_info.incl.pl1 >ldd>include>vfs_info.incl.pl1 253 5 04/09/85 1109.7 access_mode_values.incl.pl1 >spec>on>41-15>access_mode_values.incl.pl1 255 6 11/22/82 0955.7 status_structures.incl.pl1 >ldd>include>status_structures.incl.pl1 257 7 05/23/83 0916.6 iox_entries.incl.pl1 >ldd>include>iox_dcls.incl.pl1 259 8 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 261 9 06/10/82 1045.5 star_structures.incl.pl1 >ldd>include>star_structures.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. ASCII constant fixed bin(17,0) initial dcl 1-13 ref 311 353 794 948 1434 BCD constant fixed bin(17,0) initial dcl 1-15 ref 355 BINARY constant fixed bin(17,0) initial dcl 1-14 ref 354 781 BLOCKED_FILE_TYPE constant fixed bin(17,0) initial dcl 1-21 ref 732 737 799 801 1343 1429 CHASE 000263 constant fixed bin(1,0) initial dcl 1-17 set ref 755* CR 000130 constant char(1) initial unaligned dcl 1-6 set ref 1220* Cleanup_Handler 000160 automatic entry variable dcl 66 set ref 286* 290 460* 477 577 662 685 1542 Directory constant fixed bin(17,0) initial dcl 6-56 ref 758 FILE_TYPE_TO_PNAME 000107 constant char(12) initial array unaligned dcl 1-33 set ref 732* L6_DATA_TYPE 000126 constant char(1) initial array unaligned dcl 1-31 set ref 873* 994 L6_FILE_TYPE 000127 constant char(1) initial array unaligned dcl 1-30 set ref 873* 982 1424* 1424* L6_S_FILE_TYPE constant fixed bin(17,0) initial dcl 1-25 ref 748 794 797 949 1180 1408 1434 MULTICS_L6_FILE_SUFFIX 000104 constant char(3) initial array unaligned dcl 1-36 set ref 767 767 767 771 812 814* 816* P_area_ptr parameter pointer dcl 33 ref 274 284 P_arg_list_ptr parameter pointer dcl 32 ref 274 281 707 714 P_caller_name parameter char unaligned dcl 34 ref 274 280 448 454 707 P_code parameter fixed bin(35,0) dcl 35 set ref 274 433* 448 573* 575 658* 660 690* 701 704* 707 711* 714 718* 721 724* 1538* P_complete parameter bit(1) unaligned dcl 36 set ref 448 687* P_error_message parameter varying char dcl 37 set ref 274 432* 448 573* 658* 689* 701 707 714 721 1537* P_first_arg parameter fixed bin(17,0) dcl 38 ref 274 282 707 714 P_in_iocbp parameter pointer dcl 39 ref 274 278 448 452 707 P_last_file parameter bit(1) unaligned dcl 1115 set ref 1112 1121* 1159* 1161* P_list_flag parameter bit(1) unaligned dcl 40 ref 714 P_nasp_info_ptr parameter pointer dcl 41 ref 721 P_out_iocbp parameter pointer dcl 43 ref 274 279 448 453 707 P_output_lines parameter varying char dcl 42 ref 714 P_queued_flag parameter bit(1) unaligned dcl 44 ref 274 283 448 455 P_structure_len parameter fixed bin(24,0) dcl 45 set ref 274 431* 448 701 707 714 721 P_structure_ptr parameter pointer dcl 47 set ref 274 430* 448 456 701 707 714 721 P_unhold parameter bit(1) unaligned dcl 48 set ref 448 688* RECV_TU_SIZE constant fixed bin(21,0) initial dcl 1-4 ref 654 RW_ACCESS_BIN 000250 constant fixed bin(5,0) initial dcl 5-36 set ref 823* SEND_TU_SIZE constant fixed bin(21,0) initial dcl 1-3 ref 565 SEQUENTIAL_FILE_TYPE constant fixed bin(17,0) initial dcl 1-20 ref 797 Sequential_input constant fixed bin(17,0) initial dcl 8-15 ref 1351 Sequential_output constant fixed bin(17,0) initial dcl 8-15 ref 1353 Stream_input_output 000261 constant fixed bin(17,0) initial dcl 8-15 set ref 1328* UNSTRUCTURED_FILE_TYPE constant fixed bin(17,0) initial dcl 1-19 ref 781 794 1343 1434 USAGE 000004 constant char(256) initial unaligned dcl 1-38 set ref 323* 325* acceptor_file_count 001214 automatic picture(2) unaligned dcl 833 set ref 871* 873* 1075* 1075 1078 ack_indicator 1 based char(1) level 3 packed unaligned dcl 849 ref 937 add_char_offset_ 000050 constant entry external dcl 186 ref 912 912 1235 1235 1273 1273 1288 1288 addr builtin function dcl 222 ref 535 535 573 573 573 573 622 622 658 658 658 658 739 740 753 area 001116 stack reference condition dcl 240 ref 301 305 area_ptr 000146 automatic pointer dcl 63 set ref 284* 297 303 1550 arg based char unaligned dcl 56 set ref 332 337 337 347 353 353 354 354 355 355 356* 359 359 361 361 363 363 365 365 367 373 376 376 382 385 385 391 394* 1371 1376 1386 1394 1396 arg_idx 000140 automatic fixed bin(17,0) dcl 57 set ref 327* 329* 330* 339* 339 341* 349* 349 350* 369* 369 370* 378* 378 379* 387* 387 388* 1382 1388* 1388 1390* arg_len 000102 automatic fixed bin(21,0) dcl 1482 in procedure "ERROR" set ref 1496* arg_len 000141 automatic fixed bin(21,0) dcl 58 in procedure "l6_tran_" set ref 329* 332 337 337 341* 347 350* 353 353 354 354 355 355 356 356 359 359 361 361 363 363 365 365 367 370* 373 376 376 379* 382 385 385 388* 391 394 394 1371 1376 1382* 1386 1390* 1394 1396 arg_list_ptr 000144 automatic pointer dcl 60 in procedure "l6_tran_" set ref 281* 320* 329* 341* 350* 370* 379* 388* 1382* 1390* arg_list_ptr 000100 automatic pointer dcl 1481 in procedure "ERROR" set ref 1506* 1507* arg_ptr 000104 automatic pointer dcl 1483 in procedure "ERROR" set ref 1495* 1496* 1498 1498 arg_ptr 000142 automatic pointer dcl 59 in procedure "l6_tran_" set ref 329* 332 337 337 341* 347 350* 353 353 354 354 355 355 356 359 359 361 361 363 363 365 365 367 370* 373 376 376 379* 382 385 385 388* 391 394 1371 1376 1382* 1386 1390* 1394 1396 auto_status_branch 000100 automatic structure level 1 dcl 52 set ref 753 auto_transfer_input_args 000112 automatic structure level 1 dcl 53 set ref 573 573 658 658 auto_transfer_output_args 000133 automatic structure level 1 dcl 54 set ref 573 573 658 658 based_area based area dcl 62 ref 303 777 1550 1563 1569 1572 based_code based fixed bin(35,0) dcl 1484 ref 1498 before builtin function dcl 223 ref 501 765 1098 blk_info based structure level 1 unaligned dcl 4-21 caller_code 000106 automatic fixed bin(35,0) dcl 1485 set ref 1498* 1501* 1517* 1538 caller_name 000150 automatic char(32) unaligned dcl 65 set ref 280* 454* char_position 001220 automatic fixed bin(17,0) dcl 836 set ref 954* 955 957 958* 958 962 966* 966 968 971* 971 974 979 980* 980 991 992* 992 1003 1005* 1005 1012 1014* 1014 1019 1021* 1021 1026 1028* 1028 1033 1035* 1035 1040 1042* 1042 1047 1048* 1048 1053 1055* 1055 1060 1062* 1062 1067 1070* 1070 1075 1078* 1078 chars_read 001215 automatic fixed bin(21,0) dcl 834 in procedure "File_Definition_Dialogue" set ref 910* 910* 912* 912* 912* 915 chars_read 001312 automatic fixed bin(21,0) dcl 1200 in procedure "Login_Dialogue" set ref 1207* 1210 1210 1210 1232* 1232 1232* 1235* 1235* 1235* 1238 1240 1271* 1271* 1273* 1273* 1273* 1277 1288* 1288* 1288* 1293* check_star_name_$entry 000052 constant entry external dcl 187 ref 1119 ci_size 001216 automatic picture(5) unaligned dcl 835 set ref 1053* 1053 1055 cleanup 001124 stack reference condition dcl 241 ref 290 477 clock builtin function dcl 224 ref 550 583 638 670 code 000107 automatic fixed bin(35,0) dcl 1486 in procedure "ERROR" set ref 1491* 1496* 1534* code 000164 automatic fixed bin(35,0) dcl 67 in procedure "l6_tran_" set ref 320* 321 321* 329* 330 330* 341* 342 342* 350* 351 351* 370* 371 371* 379* 380 380* 388* 389 389* 414* 417* 420 420* 494* 495 495* 513* 514 514* 535* 536 536* 591* 592* 593* 602* 622* 624 678* 679* 680* 755* 756 756* 760* 761 762* 763 771* 814* 816 816* 823* 824 824* 883* 884 884* 898* 899 899* 904* 905 905* 912* 914 914* 1182* 1184 1184* 1203* 1204 1204* 1223* 1224 1224* 1228* 1230 1230* 1235* 1237 1237* 1244* 1261* 1263 1263* 1267* 1269 1269* 1273* 1276 1276* 1288* 1290 1290* 1305* 1306 1306* 1308* 1309 1309* 1324* 1325 1325 1325* 1328* 1329 1329 1329* 1332* 1333 1333* 1347* 1348 1348 1348* 1355* 1356 1356 1356* 1413* 1414 1414* code 001344 automatic fixed bin(35,0) dcl 1366 in procedure "Process_File_Name" set ref 1382* 1384 1390* 1391 1391* code 001272 automatic fixed bin(35,0) dcl 1117 in procedure "Get_Next_Path" set ref 1119* 1121 1123 1123* 1130* 1132 1132* 1166* 1167 1167* code 001252 automatic fixed bin(35,0) dcl 1093 in procedure "Generate_Multics_Path" set ref 1100* 1101 1101* code 000100 automatic fixed bin(35,0) dcl 1559 in procedure "Execute_Cleanup" set ref 1577* 1578* 1579* 1584* 1585* 1586* 1589* comm_buffer based char unaligned dcl 69 set ref 600* 873* 881* 891* 896* 1210 1210 1210 1216* 1220* 1232 1232 1240 1251* 1255* 1271 1303* 1311 1531* comm_buffer_len 6 000112 automatic fixed bin(21,0) level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" set ref 559* 648* comm_buffer_len 000165 automatic fixed bin(21,0) dcl 70 in procedure "l6_tran_" set ref 516* 559 600 648 873 873 881 891 891 896 904* 912 1203* 1210 1210 1210 1216 1216 1220 1220 1228* 1232 1232 1235 1240 1251 1255 1267* 1271 1273 1288 1303 1308* 1311 1531 1531 comm_buffer_ptr 4 000112 automatic pointer level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" set ref 558* 647* comm_buffer_ptr defined pointer dcl 71 in procedure "l6_tran_" set ref 468* 558 600 602* 647 873 881 883* 891 896 898* 904* 907 908 912* 912* 937 939 942 952 955 957 962 968 974 979 991 1003 1012 1019 1026 1033 1040 1047 1053 1060 1067 1075 1203* 1210 1210 1210 1216 1220 1223* 1228* 1232 1232 1235* 1235* 1240 1251 1255 1261* 1267* 1271 1273* 1273* 1288* 1288* 1303 1305* 1308* 1311 1524 1531 1534* 1589 comm_iocbp 2 000112 automatic pointer level 2 dcl 53 set ref 557* 646* cu_$arg_count 000060 constant entry external dcl 190 ref 1491 cu_$arg_count_rel 000062 constant entry external dcl 191 ref 320 cu_$arg_list_ptr 000054 constant entry external dcl 188 ref 1506 cu_$arg_ptr 000056 constant entry external dcl 189 ref 1496 cu_$arg_ptr_rel 000064 constant entry external dcl 192 ref 329 341 350 370 379 388 1382 1390 data_type 001221 automatic char(1) unaligned dcl 837 in procedure "File_Definition_Dialogue" set ref 991* 991 992 994 996* data_type 16 000112 automatic fixed bin(17,0) level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" set ref 564* 653* debug_flag 000010 internal static bit(1) initial unaligned dcl 157 set ref 1216 1251 1598* 1603* end_pos 2 based fixed bin(34,0) level 2 dcl 4-21 ref 740 err_msg 000110 automatic char(256) unaligned dcl 1487 set ref 1507* 1511* 1518* 1531 1531 1537 err_msg_len 000210 automatic fixed bin(21,0) dcl 1488 set ref 1507* 1512* 1519* 1529 1537 error_table_$area_too_small 000012 external static fixed bin(35,0) dcl 165 set ref 301* error_table_$bad_arg 000014 external static fixed bin(35,0) dcl 166 set ref 297* 356* error_table_$bad_file 000016 external static fixed bin(35,0) dcl 167 set ref 732* 984* 996* 1424* 1429* 1434* error_table_$badopt 000020 external static fixed bin(35,0) dcl 168 set ref 394* error_table_$badpath 000022 external static fixed bin(35,0) dcl 169 set ref 508* error_table_$badstar 000024 external static fixed bin(35,0) dcl 170 ref 1123 error_table_$dirseg 000026 external static fixed bin(35,0) dcl 171 set ref 758* 1142* error_table_$fatal_error 000030 external static fixed bin(35,0) dcl 172 set ref 942* 1501 1517 error_table_$incompatible_file_attribute 000032 external static fixed bin(35,0) dcl 173 set ref 781* error_table_$noarg 000034 external static fixed bin(35,0) dcl 175 set ref 323* 401* 404* 411* 424* error_table_$not_closed 000036 external static fixed bin(35,0) dcl 176 ref 1329 1356 error_table_$not_detached 000040 external static fixed bin(35,0) dcl 177 ref 1325 1348 error_table_$too_many_args 000042 external static fixed bin(35,0) dcl 178 set ref 325* 407* error_table_$unimplemented_version 000044 external static fixed bin(35,0) dcl 179 set ref 294* 704 711 718 724 expand_pathname_ 000066 constant entry external dcl 193 ref 494 file_access 001222 automatic char(1) unaligned dcl 838 set ref 1019* 1019 1021 file_buffer based char unaligned dcl 75 set ref 1188 1411* file_buffer_len 000166 automatic fixed bin(21,0) dcl 76 in procedure "l6_tran_" set ref 517* 562 651 1182* 1188 1411 file_buffer_len 14 000112 automatic fixed bin(21,0) level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" set ref 562* 651* file_buffer_ptr defined pointer dcl 77 in procedure "l6_tran_" set ref 467* 561 650 1182* 1188 1411 1413* 1589 file_buffer_ptr 12 000112 automatic pointer level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" set ref 561* 650* file_iocbp 10 000112 automatic pointer level 2 dcl 53 set ref 560* 649* file_name_len 001223 automatic picture(2) unaligned dcl 839 set ref 865* 873* 888* 891* file_size 001224 automatic picture(5) unaligned dcl 840 set ref 869* 873* 1060* 1060 1062 file_type 15 000112 automatic fixed bin(17,0) level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" set ref 563* 652* file_type 001226 automatic char(1) unaligned dcl 841 in procedure "File_Definition_Dialogue" set ref 979* 979 980 982 984* first_arg 000167 automatic fixed bin(17,0) dcl 79 set ref 282* 323 325 327 fixed_response_len 001227 automatic fixed bin(21,0) dcl 842 set ref 907* 908 910 933 flags 201 based structure level 2 in structure "l6_tran_info" dcl 137 in procedure "l6_tran_" set ref 317* flags 4 000133 automatic structure level 2 in structure "auto_transfer_output_args" dcl 54 in procedure "l6_tran_" flags 20 000112 automatic structure level 2 in structure "auto_transfer_input_args" dcl 53 in procedure "l6_tran_" float builtin function dcl 225 ref 584 584 584 671 671 671 get_equal_name_ 000070 constant entry external dcl 194 ref 1100 1166 get_temp_segments_ 000074 constant entry external dcl 196 ref 513 get_user_free_area_ 000072 constant entry external dcl 195 ref 752 1128 greeting_message_found 001313 automatic bit(1) unaligned dcl 1201 set ref 1206* 1207 1214* 1286* hbound builtin function dcl 226 ref 761 767 771 1138 1142 1155 1159 hcs_$append_branch 000076 constant entry external dcl 197 ref 823 hcs_$star_ 000100 constant entry external dcl 198 ref 1130 hcs_$status_ 000102 constant entry external dcl 199 ref 755 header based structure level 2 packed unaligned dcl 849 ref 908 host_name 53 based char(32) level 3 in structure "l6_tran_info" packed unaligned dcl 137 in procedure "l6_tran_" set ref 407 414 414* 420 420* 481 1394* host_name 135 based char(32) level 3 in structure "l6_tran_info" packed unaligned dcl 137 in procedure "l6_tran_" set ref 407 417* 420* 1396* i 000170 automatic fixed bin(17,0) dcl 80 set ref 761* 762 765 767* 767* 771 773* ignored_len 000171 automatic fixed bin(21,0) dcl 81 set ref 1321* 1343* in_iocbp 000172 automatic pointer dcl 82 set ref 278* 452* 1244* index builtin function dcl 227 ref 332 508 982 994 1210 1210 1210 1232 1232 1240 1271 indicator 001230 automatic char(1) unaligned dcl 843 set ref 957* 957 958 960 974 977 989 1001 1010 1017 1024 1031 1038 1045 1051 1058 1065 1073 indx_info based structure level 1 unaligned dcl 4-33 info 001072 automatic structure level 1 dcl 130 set ref 535 535 622 622 739 740 info_version 001072 automatic fixed bin(17,0) level 2 dcl 130 set ref 534* 621* initiator_file_count 001231 automatic picture(2) unaligned dcl 844 set ref 870* 873* 1067* 1067 1070 ioa_$general_rs 000106 constant entry external dcl 201 ref 1507 ioa_$ioa_switch 000104 constant entry external dcl 200 ref 551 584 639 671 ioa_$rsnnl 000110 constant entry external dcl 203 ref 1321 1343 ioa_$rsnpnnl 000112 constant entry external dcl 204 ref 873 891 1216 1220 1531 iox_$attach_name 000144 constant entry external dcl 7-8 ref 1324 1347 iox_$close 000146 constant entry external dcl 7-8 ref 591 678 1577 1584 iox_$destroy_iocb 000150 constant entry external dcl 7-8 ref 593 680 1579 1586 iox_$detach_iocb 000152 constant entry external dcl 7-8 ref 592 679 1578 1585 iox_$modes 000154 constant entry external dcl 7-8 ref 1332 iox_$open 000156 constant entry external dcl 7-8 ref 1328 1355 iox_$read_record 000160 constant entry external dcl 7-8 ref 1182 iox_$write_record 000162 constant entry external dcl 7-8 ref 1413 key_length 001232 automatic picture(3) unaligned dcl 845 set ref 1026* 1026 1028 key_offset 001233 automatic picture(4) unaligned dcl 846 set ref 1033* 1033 1035 key_type 001234 automatic char(1) unaligned dcl 847 set ref 1047* 1047 1048 l6_attended 201(01) based bit(1) level 3 packed unaligned dcl 137 set ref 363* 365* 525 609 l6_entryname 001253 automatic char(32) unaligned dcl 1094 set ref 1098* 1100* 1101* l6_response based structure level 1 packed unaligned dcl 849 l6_response_path_len 001235 automatic picture(2) unaligned dcl 856 set ref 962* 962 966 968 971 l6_tran_info based structure level 1 dcl 137 set ref 303 431 1550 l6_tran_info_v1 constant fixed bin(35,0) initial dcl 135 ref 307 l6_tran_receive_file_ 000120 constant entry external dcl 208 ref 658 l6_tran_send_file_ 000122 constant entry external dcl 209 ref 573 l6_tran_util_$get_chars 000114 constant entry external dcl 205 ref 904 912 1203 1228 1235 1267 1273 1288 1308 l6_tran_util_$put_chars 000116 constant entry external dcl 207 ref 602 883 898 1223 1261 1305 1534 l6tip 001114 automatic pointer dcl 134 set ref 287* 303* 307 308 309 310 311 313 316 317 318 353 354 355 359 361 363 365 373 382 391 401 404 407 407 411 414 414 414 414 417 417 417 420 420 420 424 430 431 456* 481 484 485 490 491 525 548 564 581 609 636 653 668 781 873 1216 1220 1242 1244 1249 1251 1255 1258 1321 1321 1324 1325 1329 1333 1369 1371 1376 1394 1396 1550 1550 last_file 000174 automatic bit(1) unaligned dcl 83 in procedure "l6_tran_" set ref 529* 530 532* 566 613* 614 666* last_file 20 000112 automatic bit(1) level 3 in structure "auto_transfer_input_args" packed unaligned dcl 53 in procedure "l6_tran_" set ref 566* last_file 4 000133 automatic bit(1) level 3 in structure "auto_transfer_output_args" packed unaligned dcl 54 in procedure "l6_tran_" set ref 666 lbound builtin function dcl 228 ref 761 767 length builtin function dcl 229 ref 431 502 502 599 865 888 908 955 957 958 962 966 979 980 991 992 1003 1005 1012 1014 1019 1021 1026 1028 1033 1035 1040 1042 1047 1048 1053 1055 1060 1062 1067 1070 1075 1078 1249 1302 1410 level_6_attach_desc 000175 automatic varying char(128) dcl 85 set ref 1321* 1324 level_6_chars_read 000236 automatic fixed bin(21,0) dcl 86 set ref 568 904* 910 912* 915 933* 933 1203* 1207 1228* 1232 1235* 1238 1267* 1271 1273* 1277 1288* 1293 1308* 1311 level_6_chars_to_write 000237 automatic fixed bin(21,0) dcl 87 set ref 599* 600 602* 873* 879 883* 891* 894 898* 1216* 1220* 1223* 1249* 1251 1255 1261* 1302* 1303 1305* 1531* 1534* level_6_data_type 000240 automatic fixed bin(17,0) dcl 88 set ref 794 948* 994* 996 1434 level_6_dir 000241 automatic char(168) unaligned dcl 89 set ref 502* 1171 level_6_entry 000313 automatic char(32) unaligned dcl 90 set ref 504* 508 1166* 1171 level_6_file_type 000323 automatic fixed bin(17,0) dcl 91 set ref 792 794 797 949* 982* 984 1424 1424 1434 level_6_iocbp 000324 automatic pointer dcl 92 set ref 288* 466* 557 602* 646 883* 898* 904* 912* 1203* 1223* 1228* 1235* 1261* 1267* 1273* 1288* 1305* 1308* 1324* 1328* 1332* 1524 1534* 1582 1584* 1585* 1586* level_6_max_record_size 000326 automatic fixed bin(17,0) dcl 93 set ref 803 805 950* 1007* 1429 1429* level_6_pathname 000327 automatic char(168) unaligned dcl 94 set ref 485* 491* 501 502 502 508 508* 551* 639* 865 873 873 888 891 891 1171* level_6_response_pathname 000401 automatic char(168) unaligned dcl 95 set ref 616* 639 639* 968* 1096 1098 long 201 based bit(1) level 3 packed unaligned dcl 137 set ref 318* 359* 361* 548 581 636 668 match_star_name_ 000124 constant entry external dcl 210 ref 762 max_rec_len 6 based fixed bin(21,0) level 2 dcl 4-21 ref 739 min builtin function dcl 230 ref 1529 multics_chars_read 000453 automatic fixed bin(21,0) dcl 99 set ref 1182* 1188 multics_chars_to_write 000454 automatic fixed bin(21,0) dcl 100 set ref 1410* 1411 1413* multics_data_type 165 based fixed bin(17,0) level 2 dcl 137 set ref 311* 353* 354* 355* 564 653 781 873 multics_dir 000455 automatic char(168) unaligned dcl 101 set ref 494* 497* 535* 622* 755* 820* 823* 1105* 1130* 1132* 1151* multics_entry 000527 automatic char(32) unaligned dcl 102 set ref 499* 535* 622* 755* 814* 814* 820* 823* 1100* 1105* 1150* 1151* 1166* 1167* 1347* 1348* 1356* multics_file_attach_desc 000537 automatic varying char(256) dcl 104 set ref 1343* 1347 multics_file_block_size 000640 automatic fixed bin(21,0) dcl 105 set ref 739* 744* 803* 805* 808* 867 873 1343* 1429 1429* multics_file_iocbp 000642 automatic pointer dcl 106 set ref 465* 560 591* 592* 593* 649 678* 679* 680* 1182* 1347* 1355* 1413* 1575 1577* 1578* 1579* multics_file_l6_type 000644 automatic fixed bin(17,0) dcl 107 set ref 748* 773* 792* 812 814 816 873 1180 1408 1424 1424 multics_file_open_mode 000646 automatic fixed bin(17,0) dcl 109 set ref 1351* 1353* 1355* multics_file_size 000647 automatic fixed bin(34,0) dcl 110 set ref 740* 745* 810* 869 873 multics_file_type 000645 automatic fixed bin(17,0) dcl 108 set ref 563 652 730* 732 732 737 781 794* 797* 799* 801 1343 1343 1429 1434 multics_is_sender 000650 automatic bit(1) unaligned dcl 112 set ref 483* 489* 508 521 863 1220* 1351 multics_pathname 000651 automatic char(168) unaligned dcl 113 set ref 484* 490* 494* 495* 497* 536* 551* 639* 732* 756* 758* 781* 816* 820* 824* 1105* 1142* 1151* 1184* 1343* 1348* 1356* 1414* names_relp 0(18) based bit(18) level 3 in structure "status_branch" packed unaligned dcl 6-8 in procedure "l6_tran_" ref 761 761 762 765 777 777 1563 1563 names_relp 0(18) 000100 automatic bit(18) level 3 in structure "auto_status_branch" packed unaligned dcl 52 in procedure "l6_tran_" set ref 464* nargs 000211 automatic fixed bin(17,0) dcl 1489 set ref 1491* 1493 1504 net_address 155 based char(32) level 2 packed unaligned dcl 137 set ref 414* 417* 424 1321* net_info_table_$get_host_address 000126 constant entry external dcl 211 ref 414 417 net_name 145 based char(32) level 2 packed unaligned dcl 137 set ref 310* 391* 411 414* 417* 1321* 1324* 1325* 1329* 1333* nindex 0(18) based fixed bin(18,0) array level 2 packed unsigned unaligned dcl 9-27 ref 1150 nnames 0(02) 000100 automatic fixed bin(16,0) level 3 in structure "auto_status_branch" packed unsigned unaligned dcl 52 in procedure "l6_tran_" set ref 463* nnames 0(02) based fixed bin(16,0) level 3 in structure "status_branch" packed unsigned unaligned dcl 6-8 in procedure "l6_tran_" ref 761 777 777 1563 1563 nnames 0(02) based fixed bin(16,0) array level 2 in structure "star_entries" packed unsigned unaligned dcl 9-27 in procedure "l6_tran_" ref 1569 null builtin function dcl 231 ref 287 288 297 461 462 465 466 467 468 471 472 473 1324 1324 1347 1347 1495 1498 1524 1524 1550 1561 1561 1567 1569 1569 1572 1575 1582 1589 1589 number_of_args 000723 automatic fixed bin(17,0) dcl 115 set ref 320* 323 325 327 out_iocbp 000724 automatic pointer dcl 117 set ref 279* 453* 551* 584* 639* 671* 1244* output_message_len 001236 automatic picture(3) unaligned dcl 857 set ref 879* 881 894* 896 password 176 based char(12) level 2 packed unaligned dcl 137 set ref 316* 382* 1242 1244* 1249 1251 1255 1258* pathname 1 based char(168) level 3 in structure "l6_tran_info" packed unaligned dcl 137 in procedure "l6_tran_" set ref 401 484 491 1369 1371* pathname 63 based char(168) level 3 in structure "l6_tran_info" packed unaligned dcl 137 in procedure "l6_tran_" set ref 404 485 490 1376* pathname_ 000130 constant entry external dcl 213 ref 497 820 1105 1151 percent_fill 001237 automatic picture(2) unaligned dcl 858 set ref 1040* 1040 1042 pic_err_msg_len 000212 automatic picture(2) unaligned dcl 1527 set ref 1529* 1531* 1531 1531 pointer builtin function dcl 232 ref 761 761 762 765 777 1563 prompt_read 20(01) 000112 automatic bit(1) level 3 packed unaligned dcl 53 set ref 568* queued_flag 000726 automatic bit(1) unaligned dcl 118 set ref 283* 294 455* read_password_$switch 000132 constant entry external dcl 214 ref 1244 receiver_info 63 based structure level 2 dcl 137 set ref 309* record_number 2 000133 automatic fixed bin(17,0) level 2 dcl 54 set ref 584 671 record_size 001240 automatic picture(4) unaligned dcl 859 set ref 867* 873* 1003* 1003 1005 1007 release_temp_segments_ 000134 constant entry external dcl 215 ref 1589 response_len 0(09) based picture(3) level 3 packed unaligned dcl 849 ref 907 rest_of_response 1(09) based char level 2 packed unaligned dcl 849 set ref 939 942* 952 955 957 962 968 974 979 991 1003 1012 1019 1026 1033 1040 1047 1053 1060 1067 1075 rest_of_response_len 001241 automatic fixed bin(17,0) dcl 860 set ref 908* 939 942 942 952 955 957 962 968 974 979 991 1003 1012 1019 1026 1033 1040 1047 1053 1060 1067 1075 reverse builtin function dcl 233 ref 501 501 765 765 1098 1098 rtrim builtin function dcl 234 ref 502 502 765 865 873 873 888 891 891 1171 1249 1251 1255 saved_attributes 000727 automatic varying char(256) dcl 119 set ref 873 873* 974* 1188* 1191* 1410 1411 saved_level_6_entry 001030 automatic char(32) unaligned dcl 120 set ref 501* 502 504 1166* 1167* saved_multics_entry 001040 automatic char(32) unaligned dcl 121 set ref 494* 497* 499 1100* 1101* 1119* 1123* 1130* 1132* sender_file_flag 001345 automatic bit(1) unaligned dcl 1367 set ref 1372* 1377* 1394 sender_info 1 based structure level 2 dcl 137 set ref 308* short based structure level 2 in structure "status_branch" dcl 6-8 in procedure "l6_tran_" short 000100 automatic structure level 2 in structure "auto_status_branch" dcl 52 in procedure "l6_tran_" star_ALL_ENTRIES 000261 constant fixed bin(2,0) initial dcl 9-111 set ref 1130* star_DIRECTORY constant fixed bin(2,0) initial unsigned dcl 9-121 ref 1138 1155 star_area_ptr 001050 automatic pointer dcl 122 set ref 473* 1128* 1130* 1567 1569 1572 star_entries based structure array level 1 dcl 9-27 ref 1138 1142 1155 1159 1572 star_entries_index 001052 automatic fixed bin(17,0) dcl 123 set ref 475* 1138* 1138* 1142 1150 1155* 1155 1155* 1159 star_entry_count 001136 automatic fixed bin(17,0) dcl 9-14 set ref 474* 1130* 1138 1142 1155 1159 1569 1572 star_entry_ptr 001140 automatic pointer dcl 9-15 set ref 471* 1130* 1138 1138 1142 1150 1155 1155 1159 1569 1569 1572 1572 star_names based char(32) array unaligned dcl 9-37 ref 1150 1569 star_names_generated 001053 automatic bit(1) unaligned dcl 124 set ref 470* 1126 1145* star_names_ptr 001142 automatic pointer dcl 9-19 set ref 472* 1130* 1150 1569 1569 starting_record 001242 automatic picture(5) unaligned dcl 861 set ref 868* 873* 1012* 1012 1014 status_area_ptr 001132 automatic pointer dcl 6-47 set ref 461* 752* 755* 761 761 762 765 777 777 1561 1563 1563 status_branch based structure level 1 dcl 6-8 status_entry_names based char(32) array dcl 6-47 ref 761 761 762 765 777 1563 status_ptr 001134 automatic pointer dcl 6-47 set ref 462* 753* 755* 758 761 761 761 762 765 777 777 777 777 1561 1563 1563 1563 1563 string builtin function dcl 235 set ref 908 962* 982 994 1003* 1012* 1026* 1033* 1040* 1053* 1060* 1067* 1075* substr builtin function dcl 236 set ref 502 508 600* 881* 896* 957 962 968 974 979 991 1003 1012 1019 1026 1033 1040 1047 1053 1060 1067 1075 1188 1210 1210 1210 1232 1232 1240 1251* 1255* 1271 1303* 1311 1411* 1531 1531 1537 suffix 001054 automatic char(32) unaligned dcl 125 set ref 765* 767 suffixed_name_$make 000136 constant entry external dcl 216 ref 814 sum builtin function dcl 237 ref 1569 sys_info$max_seg_size 000046 external static fixed bin(19,0) dcl 182 ref 516 517 temp_seg_ptrs 001064 automatic pointer array dcl 126 set ref 467* 467 468* 468 513* 558 558 561 561 600 600 602 602 647 647 650 650 873 873 881 881 883 883 891 891 896 896 898 898 904 904 907 907 908 908 912 912 912 912 937 937 939 939 942 942 952 952 955 955 957 957 962 962 968 968 974 974 979 979 991 991 1003 1003 1012 1012 1019 1019 1026 1026 1033 1033 1040 1040 1047 1047 1053 1053 1060 1060 1067 1067 1075 1075 1182 1182 1188 1188 1203 1203 1210 1210 1210 1210 1210 1210 1216 1216 1220 1220 1223 1223 1228 1228 1232 1232 1232 1232 1235 1235 1235 1235 1240 1240 1251 1251 1255 1255 1261 1261 1267 1267 1271 1271 1273 1273 1273 1273 1288 1288 1288 1288 1303 1303 1305 1305 1308 1308 1311 1311 1411 1411 1413 1413 1524 1524 1531 1531 1534 1534 1589 1589 1589 1589 1589* total_bytes 3 000133 automatic fixed bin(35,0) level 2 dcl 54 set ref 584* 584 671* 671 total_time 001070 automatic fixed bin(71,0) dcl 127 set ref 550* 583* 583 584 584 638* 670* 670 671 671 transfer_input_args based structure level 1 dcl 3-12 transfer_input_args_version_1 000002 constant char(8) initial unaligned dcl 3-10 ref 556 645 transfer_output_args based structure level 1 dcl 3-33 transfer_output_args_version_1 000000 constant char(8) initial unaligned dcl 3-31 ref 571 656 tu_size 17 000112 automatic fixed bin(21,0) level 2 dcl 53 set ref 565* 654* type based fixed bin(2,0) array level 2 in structure "star_entries" packed unsigned unaligned dcl 9-27 in procedure "l6_tran_" ref 1138 1155 type 1 001072 automatic fixed bin(17,0) level 2 in structure "info" dcl 130 in procedure "l6_tran_" set ref 730 type based fixed bin(2,0) level 3 in structure "status_branch" packed unsigned unaligned dcl 6-8 in procedure "l6_tran_" ref 758 unspec builtin function dcl 238 ref 431 user_info_$whoami 000142 constant entry external dcl 218 ref 313 user_name 166 based char(32) level 2 packed unaligned dcl 137 set ref 313* 373* 1216* 1220* version 000112 automatic char(8) level 2 in structure "auto_transfer_input_args" packed unaligned dcl 53 in procedure "l6_tran_" set ref 556* 645* version 000133 automatic char(8) level 2 in structure "auto_transfer_output_args" packed unaligned dcl 54 in procedure "l6_tran_" set ref 571* 656* version based fixed bin(35,0) level 2 in structure "l6_tran_info" dcl 137 in procedure "l6_tran_" set ref 307* vfile_status_ 000140 constant entry external dcl 217 ref 535 622 vfs_version_1 constant fixed bin(17,0) initial dcl 4-67 ref 534 621 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 5-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 5-33 Direct_input internal static fixed bin(17,0) initial dcl 8-15 Direct_output internal static fixed bin(17,0) initial dcl 8-15 Direct_update internal static fixed bin(17,0) initial dcl 8-15 E_ACCESS internal static bit(3) initial unaligned dcl 5-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 HT internal static char(1) initial unaligned dcl 1-10 INDEXED_FILE_TYPE internal static fixed bin(17,0) initial dcl 1-22 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 8-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 8-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 8-15 L6_D_FILE_TYPE internal static fixed bin(17,0) initial dcl 1-26 L6_F_FILE_TYPE internal static fixed bin(17,0) initial dcl 1-28 L6_R_FILE_TYPE internal static fixed bin(17,0) initial dcl 1-27 Link internal static fixed bin(17,0) initial dcl 6-56 M_ACCESS internal static bit(3) initial unaligned dcl 5-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 N_ACCESS internal static bit(3) initial unaligned dcl 5-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 REW_ACCESS internal static bit(3) initial unaligned dcl 5-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 RE_ACCESS internal static bit(3) initial unaligned dcl 5-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 RW_ACCESS internal static bit(3) initial unaligned dcl 5-11 R_ACCESS internal static bit(3) initial unaligned dcl 5-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SA_ACCESS internal static bit(3) initial unaligned dcl 5-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 5-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 5-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SM_ACCESS internal static bit(3) initial unaligned dcl 5-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 SP internal static char(1) initial unaligned dcl 1-8 S_ACCESS internal static bit(3) initial unaligned dcl 5-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 Segment internal static fixed bin(17,0) initial dcl 6-56 Sequential_input_output internal static fixed bin(17,0) initial dcl 8-15 Sequential_update internal static fixed bin(17,0) initial dcl 8-15 Stream_input internal static fixed bin(17,0) initial dcl 8-15 Stream_output internal static fixed bin(17,0) initial dcl 8-15 VARIABLE_FILE_TYPE internal static fixed bin(17,0) initial dcl 1-23 W_ACCESS internal static bit(3) initial unaligned dcl 5-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 5-36 complete_flag automatic bit(1) unaligned dcl 73 iox_$attach_loud 000000 constant entry external dcl 7-8 iox_$attach_ptr 000000 constant entry external dcl 7-8 iox_$close_file 000000 constant entry external dcl 7-8 iox_$control 000000 constant entry external dcl 7-8 iox_$delete_record 000000 constant entry external dcl 7-8 iox_$detach 000000 constant entry external dcl 7-8 iox_$err_no_operation 000000 constant entry external dcl 7-8 iox_$err_not_attached 000000 constant entry external dcl 7-8 iox_$err_not_closed 000000 constant entry external dcl 7-8 iox_$err_not_open 000000 constant entry external dcl 7-8 iox_$error_output external static pointer dcl 7-41 iox_$find_iocb 000000 constant entry external dcl 7-8 iox_$find_iocb_n 000000 constant entry external dcl 7-8 iox_$get_chars 000000 constant entry external dcl 7-8 iox_$get_line 000000 constant entry external dcl 7-8 iox_$look_iocb 000000 constant entry external dcl 7-8 iox_$move_attach 000000 constant entry external dcl 7-8 iox_$open_file 000000 constant entry external dcl 7-8 iox_$position 000000 constant entry external dcl 7-8 iox_$propagate 000000 constant entry external dcl 7-8 iox_$put_chars 000000 constant entry external dcl 7-8 iox_$read_key 000000 constant entry external dcl 7-8 iox_$read_length 000000 constant entry external dcl 7-8 iox_$rewrite_record 000000 constant entry external dcl 7-8 iox_$seek_key 000000 constant entry external dcl 7-8 iox_$user_input external static pointer dcl 7-41 iox_$user_io external static pointer dcl 7-41 iox_$user_output external static pointer dcl 7-41 iox_modes internal static char(24) initial array dcl 8-6 l6_tran_util_$get_line 000000 constant entry external dcl 206 list_flag automatic bit(1) unaligned dcl 97 nasp_info based structure level 1 dcl 2-8 nasp_info_v1 internal static fixed bin(35,0) initial dcl 2-6 naspip automatic pointer dcl 2-5 output_lines automatic varying char(256) dcl 116 seq_info based structure level 1 unaligned dcl 4-11 short_iox_modes internal static char(4) initial array dcl 8-12 star_ALL_ENTRIES_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 9-114 star_BRANCHES_ONLY internal static fixed bin(2,0) initial dcl 9-110 star_LINK internal static fixed bin(2,0) initial unsigned dcl 9-119 star_LINKS_ONLY internal static fixed bin(2,0) initial dcl 9-109 star_LINKS_ONLY_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 9-112 star_SEGMENT internal static fixed bin(2,0) initial unsigned dcl 9-120 star_branch_count automatic fixed bin(17,0) dcl 9-13 star_dir_list_branch based structure array level 1 dcl 9-59 star_link_count automatic fixed bin(17,0) dcl 9-17 star_link_pathname based char unaligned dcl 9-102 star_links based structure array level 1 dcl 9-76 star_linkx automatic fixed bin(17,0) dcl 9-18 star_list_branch based structure array level 1 dcl 9-41 star_list_branch_ptr automatic pointer dcl 9-16 star_list_names based char(32) array unaligned dcl 9-92 star_list_names_ptr automatic pointer dcl 9-20 star_select_sw automatic fixed bin(3,0) dcl 9-21 status_link based structure level 1 dcl 6-38 status_pathname based char dcl 6-47 tiap automatic pointer dcl 3-9 toap automatic pointer dcl 3-30 unhold_flag automatic bit(1) unaligned dcl 128 uns_info based structure level 1 unaligned dcl 4-1 vbl_info based structure level 1 unaligned dcl 4-55 NAMES DECLARED BY EXPLICIT CONTEXT. Check_Multics_File 005527 constant entry internal dcl 727 ref 540 626 Create_Multics_File 006155 constant entry internal dcl 789 ref 630 ERROR 012734 constant entry internal dcl 1478 ref 294 297 301 321 323 325 330 342 351 356 371 380 389 394 401 404 407 411 420 424 495 508 514 536 732 756 758 781 816 824 884 899 905 914 939 942 984 996 1101 1123 1132 1142 1167 1184 1204 1224 1230 1237 1263 1269 1276 1290 1306 1309 1325 1329 1333 1348 1356 1391 1414 1424 1429 1434 Execute_Cleanup 013276 constant entry internal dcl 1556 ref 460 File_Definition_Dialogue 006377 constant entry internal dcl 830 ref 546 617 Generate_Multics_Path 007670 constant entry internal dcl 1090 ref 619 Get_Next_Path 010017 constant entry internal dcl 1112 ref 532 Get_Saved_Attributes 010441 constant entry internal dcl 1177 ref 544 Login_Dialogue 010525 constant entry internal dcl 1197 ref 525 609 OK_Dialogue 011530 constant entry internal dcl 1299 ref 527 611 Open_L6_Connection 011644 constant entry internal dcl 1318 ref 523 607 Open_Multics_File 012130 constant entry internal dcl 1340 ref 542 632 Parser_Cleanup 013260 constant entry internal dcl 1547 ref 286 Process_File_Name 012365 constant entry internal dcl 1363 ref 332 344 RETURN 002025 constant label dcl 27 ref 1543 Set_Saved_Attributes 012525 constant entry internal dcl 1405 ref 634 Verify_File_Attributes 012603 constant entry internal dcl 1421 ref 627 cancel 005311 constant entry external dcl 701 debug_off 005517 constant entry external dcl 1601 debug_on 005505 constant entry external dcl 1596 execute 003630 constant entry external dcl 448 info 005457 constant entry external dcl 721 l6_tran_ 002020 constant entry external dcl 25 list 005413 constant entry external dcl 714 modify 005345 constant entry external dcl 707 parser 002036 constant entry external dcl 274 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 14536 14722 13603 14546 Length 15504 13603 164 546 732 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME l6_tran_ 1632 external procedure is an external procedure. on unit on line 290 64 on unit on unit on line 301 90 on unit on unit on line 477 64 on unit Check_Multics_File internal procedure shares stack frame of external procedure l6_tran_. Create_Multics_File internal procedure shares stack frame of external procedure l6_tran_. File_Definition_Dialogue internal procedure shares stack frame of external procedure l6_tran_. Generate_Multics_Path internal procedure shares stack frame of external procedure l6_tran_. Get_Next_Path internal procedure shares stack frame of external procedure l6_tran_. Get_Saved_Attributes internal procedure shares stack frame of external procedure l6_tran_. Login_Dialogue internal procedure shares stack frame of external procedure l6_tran_. OK_Dialogue internal procedure shares stack frame of external procedure l6_tran_. Open_L6_Connection internal procedure shares stack frame of external procedure l6_tran_. Open_Multics_File internal procedure shares stack frame of external procedure l6_tran_. Process_File_Name internal procedure shares stack frame of external procedure l6_tran_. Set_Saved_Attributes internal procedure shares stack frame of external procedure l6_tran_. Verify_File_Attributes internal procedure shares stack frame of external procedure l6_tran_. ERROR 194 internal procedure is declared options(non_quick), and is declared options(variable). Parser_Cleanup 64 internal procedure is assigned to an entry variable. Execute_Cleanup 90 internal procedure is assigned to an entry variable. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 debug_flag l6_tran_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ERROR 000100 arg_list_ptr ERROR 000102 arg_len ERROR 000104 arg_ptr ERROR 000106 caller_code ERROR 000107 code ERROR 000110 err_msg ERROR 000210 err_msg_len ERROR 000211 nargs ERROR 000212 pic_err_msg_len ERROR Execute_Cleanup 000100 code Execute_Cleanup l6_tran_ 000100 auto_status_branch l6_tran_ 000112 auto_transfer_input_args l6_tran_ 000133 auto_transfer_output_args l6_tran_ 000140 arg_idx l6_tran_ 000141 arg_len l6_tran_ 000142 arg_ptr l6_tran_ 000144 arg_list_ptr l6_tran_ 000146 area_ptr l6_tran_ 000150 caller_name l6_tran_ 000160 Cleanup_Handler l6_tran_ 000164 code l6_tran_ 000165 comm_buffer_len l6_tran_ 000166 file_buffer_len l6_tran_ 000167 first_arg l6_tran_ 000170 i l6_tran_ 000171 ignored_len l6_tran_ 000172 in_iocbp l6_tran_ 000174 last_file l6_tran_ 000175 level_6_attach_desc l6_tran_ 000236 level_6_chars_read l6_tran_ 000237 level_6_chars_to_write l6_tran_ 000240 level_6_data_type l6_tran_ 000241 level_6_dir l6_tran_ 000313 level_6_entry l6_tran_ 000323 level_6_file_type l6_tran_ 000324 level_6_iocbp l6_tran_ 000326 level_6_max_record_size l6_tran_ 000327 level_6_pathname l6_tran_ 000401 level_6_response_pathname l6_tran_ 000453 multics_chars_read l6_tran_ 000454 multics_chars_to_write l6_tran_ 000455 multics_dir l6_tran_ 000527 multics_entry l6_tran_ 000537 multics_file_attach_desc l6_tran_ 000640 multics_file_block_size l6_tran_ 000642 multics_file_iocbp l6_tran_ 000644 multics_file_l6_type l6_tran_ 000645 multics_file_type l6_tran_ 000646 multics_file_open_mode l6_tran_ 000647 multics_file_size l6_tran_ 000650 multics_is_sender l6_tran_ 000651 multics_pathname l6_tran_ 000723 number_of_args l6_tran_ 000724 out_iocbp l6_tran_ 000726 queued_flag l6_tran_ 000727 saved_attributes l6_tran_ 001030 saved_level_6_entry l6_tran_ 001040 saved_multics_entry l6_tran_ 001050 star_area_ptr l6_tran_ 001052 star_entries_index l6_tran_ 001053 star_names_generated l6_tran_ 001054 suffix l6_tran_ 001064 temp_seg_ptrs l6_tran_ 001070 total_time l6_tran_ 001072 info l6_tran_ 001114 l6tip l6_tran_ 001132 status_area_ptr l6_tran_ 001134 status_ptr l6_tran_ 001136 star_entry_count l6_tran_ 001140 star_entry_ptr l6_tran_ 001142 star_names_ptr l6_tran_ 001214 acceptor_file_count File_Definition_Dialogue 001215 chars_read File_Definition_Dialogue 001216 ci_size File_Definition_Dialogue 001220 char_position File_Definition_Dialogue 001221 data_type File_Definition_Dialogue 001222 file_access File_Definition_Dialogue 001223 file_name_len File_Definition_Dialogue 001224 file_size File_Definition_Dialogue 001226 file_type File_Definition_Dialogue 001227 fixed_response_len File_Definition_Dialogue 001230 indicator File_Definition_Dialogue 001231 initiator_file_count File_Definition_Dialogue 001232 key_length File_Definition_Dialogue 001233 key_offset File_Definition_Dialogue 001234 key_type File_Definition_Dialogue 001235 l6_response_path_len File_Definition_Dialogue 001236 output_message_len File_Definition_Dialogue 001237 percent_fill File_Definition_Dialogue 001240 record_size File_Definition_Dialogue 001241 rest_of_response_len File_Definition_Dialogue 001242 starting_record File_Definition_Dialogue 001252 code Generate_Multics_Path 001253 l6_entryname Generate_Multics_Path 001272 code Get_Next_Path 001312 chars_read Login_Dialogue 001313 greeting_message_found Login_Dialogue 001344 code Process_File_Name 001345 sender_file_flag Process_File_Name THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_g_a r_e_as r_ne_as alloc_cs call_var call_ext_out_desc call_ext_out call_int_this_desc call_int_other_desc return tra_ext mpfx2 enable shorten_stack ext_entry ext_entry_desc int_entry reverse_cs set_cs_eis index_cs_eis unpack_pic alloc_based free_based clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. add_char_offset_ check_star_name_$entry cu_$arg_count cu_$arg_count_rel cu_$arg_list_ptr cu_$arg_ptr cu_$arg_ptr_rel expand_pathname_ get_equal_name_ get_temp_segments_ get_user_free_area_ hcs_$append_branch hcs_$star_ hcs_$status_ ioa_$general_rs ioa_$ioa_switch ioa_$rsnnl ioa_$rsnpnnl iox_$attach_name iox_$close iox_$destroy_iocb iox_$detach_iocb iox_$modes iox_$open iox_$read_record iox_$write_record l6_tran_receive_file_ l6_tran_send_file_ l6_tran_util_$get_chars l6_tran_util_$put_chars match_star_name_ net_info_table_$get_host_address pathname_ read_password_$switch release_temp_segments_ suffixed_name_$make user_info_$whoami vfile_status_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$area_too_small error_table_$bad_arg error_table_$bad_file error_table_$badopt error_table_$badpath error_table_$badstar error_table_$dirseg error_table_$fatal_error error_table_$incompatible_file_attribute error_table_$noarg error_table_$not_closed error_table_$not_detached error_table_$too_many_args error_table_$unimplemented_version sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 25 002017 27 002025 274 002026 278 002073 279 002077 280 002102 281 002107 282 002112 283 002114 284 002121 286 002124 287 002127 288 002131 290 002132 294 002154 297 002176 301 002222 303 002257 305 002264 307 002265 308 002267 309 002275 310 002303 311 002306 313 002310 316 002330 317 002334 318 002342 320 002344 321 002357 323 002371 325 002421 327 002451 329 002461 330 002500 332 002525 337 002543 339 002553 341 002554 342 002573 344 002614 345 002615 347 002616 349 002622 350 002623 351 002642 353 002663 354 002701 355 002715 356 002731 357 002760 359 002761 361 002775 363 003011 365 003025 367 003041 369 003045 370 003046 371 003065 373 003106 374 003114 376 003115 378 003125 379 003126 380 003145 382 003166 383 003174 385 003175 387 003205 388 003206 389 003225 391 003246 392 003254 394 003255 397 003307 401 003311 404 003336 407 003363 411 003414 414 003441 417 003472 420 003515 424 003557 430 003604 431 003606 432 003610 433 003616 435 003617 448 003620 452 003661 453 003665 454 003670 455 003675 456 003702 460 003705 461 003710 462 003712 463 003713 464 003717 465 003721 466 003723 467 003724 468 003725 470 003726 471 003727 472 003730 473 003731 474 003732 475 003733 477 003734 481 003756 483 003763 484 003765 485 003770 486 003773 489 003774 490 003776 491 004001 494 004004 495 004030 497 004055 499 004075 501 004100 502 004125 504 004155 508 004160 513 004224 514 004247 516 004270 517 004274 521 004275 523 004300 525 004301 527 004306 529 004307 530 004310 532 004313 534 004315 535 004317 536 004346 540 004373 542 004374 544 004375 546 004376 548 004377 550 004403 551 004405 556 004434 557 004436 558 004440 559 004442 560 004444 561 004446 562 004450 563 004452 564 004454 565 004457 566 004461 568 004465 571 004473 573 004476 575 004526 577 004530 578 004534 581 004535 583 004541 584 004544 591 004625 592 004636 593 004647 595 004660 599 004661 600 004663 602 004667 604 004704 607 004705 609 004706 611 004713 613 004714 614 004716 616 004721 617 004724 619 004725 621 004726 622 004730 624 004757 626 004761 627 004762 628 004763 630 004764 632 004765 634 004766 636 004767 638 004773 639 004775 645 005040 646 005042 647 005044 648 005046 649 005050 650 005052 651 005054 652 005056 653 005060 654 005063 656 005065 658 005070 660 005120 662 005122 663 005126 666 005127 668 005133 670 005137 671 005142 678 005223 679 005234 680 005245 682 005256 685 005257 687 005263 688 005270 689 005274 690 005302 692 005303 701 005304 704 005332 705 005335 707 005336 711 005400 712 005403 714 005404 718 005446 719 005451 721 005452 724 005500 725 005503 1596 005504 1598 005512 1599 005515 1601 005516 1603 005524 1604 005526 727 005527 730 005530 732 005532 737 005565 739 005570 740 005572 741 005574 744 005575 745 005576 748 005577 752 005601 753 005610 755 005612 756 005646 758 005673 760 005722 761 005724 762 005737 763 005774 765 005776 767 006051 769 006064 771 006066 773 006074 775 006075 777 006077 781 006121 785 006154 789 006155 792 006156 794 006160 797 006170 799 006176 801 006200 803 006202 805 006207 806 006210 808 006211 810 006212 812 006213 814 006221 816 006247 820 006304 823 006324 824 006351 826 006376 830 006377 863 006400 865 006403 867 006427 868 006436 869 006443 870 006453 871 006460 873 006465 879 006624 881 006635 883 006641 884 006656 885 006677 888 006700 891 006723 894 006774 896 007005 898 007011 899 007026 904 007047 905 007066 907 007107 908 007120 910 007123 912 007131 914 007166 915 007207 933 007212 937 007214 939 007221 942 007247 948 007300 949 007302 950 007304 952 007305 954 007313 955 007315 957 007321 958 007326 960 007327 962 007332 966 007336 968 007340 971 007355 972 007356 974 007357 977 007377 979 007401 980 007406 982 007407 984 007420 987 007445 989 007446 991 007450 992 007455 994 007456 996 007467 999 007514 1001 007515 1003 007517 1005 007523 1007 007525 1008 007534 1010 007535 1012 007537 1014 007543 1015 007545 1017 007546 1019 007550 1021 007555 1022 007556 1024 007557 1026 007561 1028 007565 1029 007567 1031 007570 1033 007572 1035 007576 1036 007600 1038 007601 1040 007603 1042 007607 1043 007611 1045 007612 1047 007614 1048 007621 1049 007622 1051 007623 1053 007625 1055 007631 1056 007633 1058 007634 1060 007636 1062 007642 1063 007644 1065 007645 1067 007647 1070 007653 1071 007655 1073 007656 1075 007660 1078 007664 1083 007666 1086 007667 1090 007670 1096 007671 1098 007675 1100 007722 1101 007746 1105 007776 1108 010016 1112 010017 1119 010021 1121 010036 1123 010046 1126 010075 1128 010077 1130 010105 1132 010150 1138 010201 1140 010216 1142 010220 1145 010247 1150 010251 1151 010263 1155 010303 1157 010316 1159 010320 1161 010331 1166 010336 1167 010361 1171 010411 1173 010437 1177 010441 1180 010442 1182 010445 1184 010464 1188 010511 1189 010522 1191 010523 1193 010524 1197 010525 1203 010526 1204 010545 1206 010566 1207 010567 1210 010574 1214 010621 1216 010623 1220 010662 1223 010725 1224 010742 1228 010763 1230 011002 1232 011023 1235 011052 1237 011107 1238 011130 1240 011133 1242 011135 1244 011142 1249 011175 1251 011210 1255 011235 1258 011245 1261 011250 1263 011264 1267 011305 1269 011324 1271 011345 1273 011363 1276 011420 1277 011441 1283 011444 1286 011445 1288 011446 1290 011503 1293 011524 1295 011527 1299 011530 1302 011531 1303 011533 1305 011537 1306 011554 1308 011575 1309 011614 1311 011635 1314 011643 1318 011644 1321 011645 1324 011701 1325 011744 1328 011776 1329 012015 1332 012046 1333 012101 1336 012127 1340 012130 1343 012131 1347 012202 1348 012244 1351 012301 1353 012307 1355 012311 1356 012330 1359 012364 1363 012365 1369 012366 1371 012373 1372 012400 1373 012402 1376 012403 1377 012410 1382 012411 1384 012433 1386 012435 1388 012443 1390 012445 1391 012464 1394 012505 1396 012516 1401 012524 1405 012525 1408 012526 1410 012531 1411 012533 1413 012540 1414 012555 1417 012602 1421 012603 1424 012604 1429 012643 1434 012701 1439 012732 1478 012733 1491 012741 1493 012751 1495 012754 1496 012756 1498 012775 1501 013004 1504 013007 1506 013012 1507 013021 1508 013070 1511 013071 1512 013074 1514 013075 1517 013076 1518 013101 1519 013104 1524 013105 1529 013116 1531 013133 1534 013210 1537 013227 1538 013246 1542 013250 1543 013254 1547 013257 1550 013265 1552 013274 1556 013275 1561 013303 1563 013314 1567 013336 1569 013343 1572 013403 1575 013412 1577 013417 1578 013430 1579 013442 1582 013454 1584 013461 1585 013472 1586 013504 1589 013516 1592 013552 ----------------------------------------------------------- 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