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
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
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