This document describes restrictions on the use of work file
attributes, the support of work file formats and the impact of
READ
loops.
Below are the restrictions that apply to the use of work file attributes:
Accessing PC work files is restricted to a fixed record length
of 1073741823 bytes or 32767 bytes when using the statement
WRITE WORK FILE
VARIABLE
. Depending on the Entire Connection version
installed on the PC, additional restrictions may apply as described below.
The maximum record length supported for file transfer depends on the version of Entire Connection installed on the PC.
For Entire Connection up to Version 4.2, the maximum record length is limited by the number of bytes that can be displayed on the appropriate 3270 model. For example, for a 3270 Model 2 device the record length is 24*80 = 1920 bytes. Since all data buffers are enclosed by a header and trailer, the resulting net record length is 1887 bytes.
For Entire Connection Version 4.3.1, the maximum record length is limited to 32 KB - 1 byte = 32767 bytes.
As of Entire Connection Version 4.3.2 Fix Level 1 and Entire Screen
Builder Version 5.2.1, the maximum record length is increased to 1 GB - 1 byte
= 1073741823 bytes. But writing work files in variable format (WRITE WORK
VARIABLE
) is still restricted to a maximum record length of 32 KB - 1
byte.
Entire Connection provides the option to transfer byte-streamed data
that are non-record-oriented. A byte-streamed data transfer is activated when a
READ WORK FILE
or
WRITE WORK FILE
statement is coded with only one single operand of binary format.
Binary data is usually object code or executable code that does not contain displayable or printable characters. To prevent standard character translations being performed during data transfer, Natural and Entire Connection use special methods for transferring binary data.
To download binary data
Define a binary variable.
If the last block of downloaded data contains less data than
the block size chosen, insert X'FF'
at the position that marks the
end of the binary data. (If you omit X'FF'
, the rest of the last
block will be filled with X00
.)
To upload binary data
Define a binary variable.
Remove X'FF
from the last block.
X'FF
marks the end of the binary data.
If you define a dynamic variable of the format binary or
alphanumeric as operand of a READ WORK
FILE
statement, when processing the corresponding
READ
loop, any resize operation on this variable will only be
valid until the next READ
is performed. While processing the
READ
, Natural resizes all dynamic variables to the size they had
when the work file was opened. This is required in the open process which
determines the record layout. The record layout is mandatory for processing the
corresponding work file. The record layout is valid until the next close of the
work file occurs.
Exception: An internal resize cannot be performed for inner loops if
nested READ
loops are processed on the same work file. See also
the programming recommendations about nested loops below. If a dynamic variable
of size 0 is used as the only operand of a READ WORK FILE
statement, Natural issues the error NAT1500.
Do not specify nested READ
loops on one work file. The
result of the inner loop(s) can be unpredictable if the operands of the inner
loop do not correspond to the operands of the outer loop. The reason is that
all records uploaded from the PC are processed in the format that was
determined when the work file was opened in the outermost loop.
Below are example programs that demonstrate the unpredictable
results the inner loop(s) of nested READ
loops can
have:
In the example program PCNESTED
, during
READ
processing, another READ
is performed:
/* PCNESTED /* DEFINE DATA LOCAL 1 #REC1 (A) DYNAMIC 1 #NUMBER (N10) END-DEFINE * MOVE ALL 'TEST RECORD 1' TO #REC1 UNTIL 100 READ WORK FILE 1 #REC1 READ WORK FILE 1 #NUMBER DISPLAY #NUMBER END-WORK END-WORK END
In the example program PCMAIN
and subprogram
PCRSUB01
, during READ
loop processing, an external
object is called:
/* PCMAIN /* DEFINE DATA LOCAL 1 RECL (A2000) 1 REDEFINE RECL 2 RECNR (N4) 1 CO (N4 END-DEFINE * WRITE WORK 1 COMMAND 'SET PCFILE 2 UP DATA C:/TSTPCAM/PCMAIN.TXT' READ WORK 2 RECL DISPLAY RECL (AL=72) CALLNAT 'PCRSUB01' RECL END-WORK END
Subprogram PCRSUB01
:
/*Subprogram PCRSUB01 /* DEFINE DATA PARAMETER 1 RECL (A2000) LOCAL 1 #CC1 (A20) 1 #CC2 (N4) * END-DEFINE READ WORK 2 RECL #CC1 #CC2 DISPLAY #CC1 #CC2 END-WORK END
If a READ
loop is terminated by a conditional
ESCAPE
, close the work file explicitly with the
CLOSE WORK FILE
statement so that the same work file can be processed in a subsequent
READ
in the same object.
Exception: You can omit the CLOSE WORK FILE
if you need
not read the file again from the beginning, and if the subsequent
READ
uses the same record layout as the preceding one.
Below is an example that demonstrates how to correctly code a
program with two READ
loops on one work
file.
In the example program PCESCAPE
, the work file is
explicitly closed after the first READ
loop has been terminated by
ESCAPE BOTTOM
so that the second READ
loop must
reopen the work file:
/*PCESCAPE /* DEFINE DATA LOCAL 1 #CC1 (A20) 1 #CC2 (A40) 1 #COUNTER (I2) * END-DEFINE READ WORK 2 #CC1 DISPLAY #CC2 ADD 1 TO #COUNTER IF #COUNTER GE 3 ESCAPE BOTTOM END-IF END-WORK CLOSE WORK FILE 2 * READ WORK 2 #CC2 DISPLAY #CC2 END-WORK END