home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv4.zip / VACPP / IBMCPP / HELP / EVF3PMST.HLP (.txt) < prev    next >
OS/2 Help File  |  1995-05-11  |  535KB  |  23,192 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. PL/I Product Help ΓòÉΓòÉΓòÉ
  3.  
  4. PL/I is a programming language you can use to develop structured applications 
  5. and systems programs. 
  6.  
  7. PL/I has a number of features. For details, select from the following list: 
  8.  
  9.  Program organization and control transfer 
  10.  Built-ins 
  11.  Data items 
  12.  Expressions and references 
  13.  Variable storage 
  14.  Statements 
  15.  Input/output (I/O) 
  16.  Condition handling 
  17.  Compiler options 
  18.  
  19. If you are unfamiliar with the conventions followed for PL/I syntax notation, 
  20. you may want to select the following: 
  21.  
  22.  Reading PL/I syntax diagrams 
  23.  
  24. Note:   This PL/I product online help is intended to be used as a quick 
  25.         reference and backup to the IBM SAA AD/Cycle PL/I MVS and VM 
  26.         publications. It offers a subset of the information in those 
  27.         publications, and is not intended to replace them. 
  28.  
  29.  
  30. ΓòÉΓòÉΓòÉ 1.1. PL/I Input/Output (I/O) ΓòÉΓòÉΓòÉ
  31.  
  32. Description 
  33.   PL/I input and output statements (such as READ, OPEN, GET, and PUT) let you 
  34.   transmit data between the main and auxiliary storage of a computer. 
  35.  
  36.   Collections of data external to a program are called data sets. If you are 
  37.   using a terminal, "data set" can also mean your terminal. 
  38.  
  39.   Transmission of data from a data set to a program is called input. 
  40.   Transmission of data from a program to a data set is called output. 
  41.  
  42.   PL/I input and output statements are concerned with the logical organization 
  43.   of a data set and not with its physical characteristics.  Therefore, a 
  44.   program can be designed without specific knowledge of the input/output 
  45.   devices that will be used when the program is executed. 
  46.  
  47.   To allow a source program to deal primarily with the logical aspects of data 
  48.   rather than with its physical organization in a data set, PL/I employs models 
  49.   of data sets, called files. A file can be associated with different data sets 
  50.   at different times during the execution of a program. 
  51.  
  52.   Two types of data transmission can be used by a PL/I program: stream and 
  53.   record.  It is possible for the same data set to be processed at different 
  54.   times by either stream data transmission or record data transmission. 
  55.   However, all items in the data set must be in character form. 
  56.  
  57.     In stream-oriented data transmission, the organization of the data in the 
  58.      data set is ignored within the program, and the data is treated as though 
  59.      it were a continuous stream of individual data values in character form. 
  60.      Data is converted from character form to internal form on input, and from 
  61.      internal form to character form on output.  DBCS data is processed 
  62.      unchanged. 
  63.  
  64.      Stream-oriented data transmission can be used for processing input data 
  65.      prepared in character form and for producing readable output, where 
  66.      editing is required.  Stream-oriented data transmission allows 
  67.      synchronized communication with the program at run time from a terminal, 
  68.      if the program is running under an interactive system. 
  69.  
  70.     In record-oriented data transmission, the data set is a collection of 
  71.      discrete records. The record on the external medium is generally an exact 
  72.      copy of the record as it exists in internal storage.  No data conversion 
  73.      takes place during record-oriented data transmission. 
  74.  
  75.      Record-oriented data transmission can be used for processing files that 
  76.      contain data in any representation, such as binary, decimal, or character. 
  77.  
  78. Related Information 
  79.  
  80.     Declaring files 
  81.     Opening and closing files 
  82.     Using record-oriented data transmission 
  83.     Using stream-oriented data transmission 
  84.     Using the SYSPRINT file 
  85.  
  86.  
  87. ΓòÉΓòÉΓòÉ <hidden> Data Sets ΓòÉΓòÉΓòÉ
  88.  
  89. Data sets are stored on a variety of auxiliary storage media, such as magnetic 
  90. tape and direct-access storage devices, (as well as being input from or output 
  91. to your terminal). Despite their variety, these media have characteristics that 
  92. allow common methods of collecting, storing, and transmitting data. 
  93.  
  94. The organization of a data set determines how data is recorded in a data set 
  95. and how the data is subsequently retrieved so that it can be transmitted to the 
  96. program.  Records are stored in and retrieved from a data set either 
  97. sequentially on the basis of successive physical or logical positions, or 
  98. directly by the use of keys specified in data transmission statements. 
  99.  
  100. These storage and retrieval methods provide PL/I with five sets of data set 
  101. organizations. These five types of data sets differ in the way data is stored 
  102. in them and in the allowable means of access to the data.  The five data set 
  103. organizations are the following: 
  104.  
  105.  Consecutive 
  106.  
  107.  Indexed 
  108.  
  109.  Regional 
  110.  
  111. The compiler recognizes a fourth type of data set called "teleprocessing" by 
  112. the file attribute TRANSIENT. 
  113.  
  114. A fifth type, called "partitioned", has no corresponding  PL/I organization. 
  115.  
  116. PL/I also provides support for three types of VSAM data organization: ESDS, 
  117. KSDS, and RSDS. 
  118.  
  119. If the data set organization is not specified in the ENVIRONMENT option, the 
  120. following default is obtained when the file is opened: 
  121.  
  122.  If the merged attributes from the DECLARE statement and OPEN statement do not 
  123.   include TRANSIENT, the default is CONSECUTIVE. 
  124.  
  125.  If the attributes include TRANSIENT, the default is TP(M). 
  126.  
  127. Following are descriptions of the five types of data set organizations: 
  128.  
  129. Consecutive 
  130.           In a consecutive data set, records are organized solely on the basis 
  131.           of their successive physical positions. When the data set is created, 
  132.           records are written consecutively in the order in which they are 
  133.           presented.  In general, the records can be retrieved only in the 
  134.           order in which they were written. 
  135.  
  136. Indexed 
  137.           In an indexed data set, records are placed in the logical sequence 
  138.           based on the key of each record. An indexed data set must reside on a 
  139.           direct-access device. A character string key identifies the record 
  140.           and allows direct retrieval, replacement, addition, and deletion of 
  141.           records. Sequential processing is also allowed. 
  142.  
  143. Regional 
  144.           In a regional data set, records are placed in their relative position 
  145.           to each other. A regional data set must reside on a direct-access 
  146.           device. A key that specifies the record number identifies the record 
  147.           and allows direct retrieval, replacement, addition, and deletion of 
  148.           records. Sequential processing is also allowed. 
  149.  
  150. Teleprocessing 
  151.           A teleprocessing data set (associated with a TRANSIENT file in a PL/I 
  152.           program) must reside in storage.  Records are placed in physical 
  153.           sequence. 
  154.  
  155. Partitioned 
  156.           In a partitioned data set, independent groups of sequentially 
  157.           organized data, each called a member, reside in a direct-access data 
  158.           set. The data set includes a directory that lists the location of 
  159.           each member. Partitioned data sets are often called libraries.  The 
  160.           compiler includes no special facilities for creating and accessing 
  161.           partitioned data sets. Each member can be processed as a CONSECUTIVE 
  162.           data set by a PL/I program. 
  163.  
  164.  
  165. ΓòÉΓòÉΓòÉ <hidden> Declaring Files ΓòÉΓòÉΓòÉ
  166.  
  167. Description 
  168.   To allow a source program to deal primarily with the logical aspects of data 
  169.   rather than with its physical organization in a data set, PL/I employs models 
  170.   of data sets, called files. These models determine how input and output 
  171.   statements access and process the associated data set. 
  172.  
  173.   Unlike a data set, a file has significance only within the source program and 
  174.   does not exist as a physical entity external to the program. 
  175.  
  176.   You can declare file data items as constants and variables, and use the file 
  177.   names as references. 
  178.  
  179.   Use the FILE attribute to specify that the data item is a file type. A 
  180.   constant, variable, or file reference name that represents a file has the 
  181.   FILE attribute.  The FILE attribute is explicitly or implicitly part of the 
  182.   file name declaration. 
  183.  
  184. Related Information 
  185.  
  186.     Declaring file constants 
  187.     Declaring file variables 
  188.     Using file references 
  189.  
  190. Syntax 
  191.  
  192. ΓöÇΓöÇΓöÇΓöÇΓöÇFILEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  193.  
  194.  
  195. ΓòÉΓòÉΓòÉ <hidden> Declaring File Constants ΓòÉΓòÉΓòÉ
  196.  
  197. Description 
  198.   Each data set processed by a PL/I program must be associated with a file 
  199.   constant. The FILE attribute can be implied for a file constant by file 
  200.   description attributes. 
  201.  
  202.   You can contextually declare a name as a file constant through its appearance 
  203.   in the FILE option of any input or output statement, or in an ON statement 
  204.   for any input/output condition. 
  205.  
  206.   You describe the individual characteristics of each file constant with file 
  207.   description attributes. These attributes are either alternative attributes or 
  208.   additive attributes. 
  209.  
  210.     An alternative attribute is one that is chosen from a group of attributes. 
  211.      If no explicit or implied attribute is given for one of the alternatives 
  212.      in a group and if one of the attributes is required, a default attribute 
  213.      is used. The alternative attributes are: 
  214.  
  215.       BUFFERED/UNBUFFERED attributes 
  216.       INTERNAL/EXTERNAL attributes 
  217.       INPUT/OUTPUT/UPDATE attributes 
  218.       SEQUENTIAL/DIRECT/TRANSIENT attributes 
  219.       STREAM/RECORD attributes 
  220.  
  221.     An additive attribute must be stated explicitly or implied by another 
  222.      explicitly stated attribute. The additive attributes are: 
  223.  
  224.       BACKWARDS attribute 
  225.       ENVIRONMENT attribute 
  226.       EXCLUSIVE attribute 
  227.       KEYED attribute 
  228.       PRINT attribute 
  229.  
  230. Example 
  231.   In the following example, the name MASTER is declared as a file constant: 
  232.  
  233.     DECLARE MASTER FILE;
  234.  
  235.  
  236. ΓòÉΓòÉΓòÉ <hidden> Declaring File Variables ΓòÉΓòÉΓòÉ
  237.  
  238. Description 
  239.   A file variable has the attributes FILE and VARIABLE. It cannot have any of 
  240.   the attributes used for declaring file constants. You can assign file 
  241.   constants to file variables. After assignment, a reference to the file 
  242.   variable has the same significance as a reference to the assigned file 
  243.   constant. 
  244.  
  245.   The VARIABLE attribute is implied for a name with the FILE attribute if the 
  246.   name is an element of an array or structure, or if any of the following 
  247.   attributes is specified: 
  248.  
  249.     Storage class attribute 
  250.     Parameter 
  251.     Alignment attribute 
  252.     DEFINED 
  253.     INITIAL 
  254.  
  255. Example 
  256.   In the following statement, the name ACCOUNT is declared a file variable. 
  257.   ACCT1 and ACCT2 are declared as file constants. 
  258.  
  259.     DECLARE ACCOUNT FILE VARIABLE,
  260.             ACCT1 FILE,
  261.             ACCT2 FILE;
  262.  
  263.   ACCT1 and ACCT2 can subsequently be assigned to ACCOUNT. 
  264.  
  265.   Syntax 
  266.  
  267. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇVARIABLEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  268.  
  269.  
  270. ΓòÉΓòÉΓòÉ <hidden> Using File References ΓòÉΓòÉΓòÉ
  271.  
  272. Description 
  273.   You can use a file reference as a file constant, a file variable, or a 
  274.   function reference which returns a value with the FILE attribute. You can use 
  275.   file references: 
  276.  
  277.     In the FILE and COPY options 
  278.     As an argument to be passed to a function or subroutine 
  279.     To qualify an input/output condition for ON, SIGNAL, and REVERT statements 
  280.     As the expression in a RETURN statement. 
  281.  
  282. Example 
  283.   In the following example, the statements labelled L1 and L2 both specify null 
  284.   ON-units for the same file: 
  285.  
  286.     DCL F FILE,
  287.         G FILE VARIABLE;
  288.         G=F;
  289.     L1:  ON ENDFILE(G);
  290.     L2:  ON ENDFILE(F);
  291.  
  292.  
  293. ΓòÉΓòÉΓòÉ <hidden> STREAM/RECORD Attributes ΓòÉΓòÉΓòÉ
  294.  
  295. Description 
  296.   Use the STREAM and RECORD attributes to specify the kind of data transmission 
  297.   for your files. The default is STREAM. 
  298.  
  299.     STREAM indicates that the data of the file is a continuous stream of data 
  300.      items, in character form, assigned from the stream to variables, or from 
  301.      expressions into the stream. You can specify a file with the STREAM 
  302.      attribute only in the FILE option of the OPEN, CLOSE, GET, and PUT 
  303.      input/output statements. 
  304.  
  305.     RECORD indicates that the file consists of a collection of physically 
  306.      separate records, each of which consists of one or more data items in any 
  307.      form. Each record is transmitted as an entity to or from a variable. You 
  308.      can specify a file with the RECORD attribute only in the FILE option of 
  309.      the OPEN, CLOSE, READ, WRITE, REWRITE, LOCATE, and DELETE input/output 
  310.      statements. 
  311.  
  312. Syntax 
  313.  
  314.        ΓöîΓöÇSTREAMΓöÇΓöÉ
  315. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇRECORDΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  316.  
  317.  
  318. ΓòÉΓòÉΓòÉ <hidden> INPUT/OUTPUT/UPDATE Attributes ΓòÉΓòÉΓòÉ
  319.  
  320. Description 
  321.   Use the INPUT, OUTPUT, and UPDATE attributes to specify the direction of data 
  322.   transmission for a file. The default is INPUT. 
  323.  
  324.     INPUT specifies that data is transmitted from auxiliary storage to the 
  325.      program. 
  326.  
  327.     OUTPUT specifies that data is transmitted from the program to auxiliary 
  328.      storage, either to create a new data set or to extend an existing one. 
  329.  
  330.     UPDATE, which applies to RECORD files only, specifies that the data can be 
  331.      transmitted in either direction. A declaration of UPDATE for a SEQUENTIAL 
  332.      file indicates the update-in-place mode. 
  333.  
  334. Syntax 
  335.  
  336.  
  337.      ΓöîΓöÇΓöÇINPUTΓöÇΓöÇΓöÇΓöÉ
  338. ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇOUTPUTΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  339.      ΓööΓöÇΓöÇUPDATEΓöÇΓöÇΓöÿ
  340.  
  341.  
  342. ΓòÉΓòÉΓòÉ <hidden> SEQUENTIAL/DIRECT/TRANSIENT Attributes ΓòÉΓòÉΓòÉ
  343.  
  344. Description 
  345.   These access attributes apply only to RECORD files.  Use SEQUENTIAL, DIRECT 
  346.   and TRANSIENT to specify how the records in the file are accessed. 
  347.  
  348.   The default is SEQUENTIAL. 
  349.  
  350.     The SEQUENTIAL (abbreviation SEQL) attribute specifies that records in a 
  351.      CONSECUTIVE or REGIONAL data set are accessed in physical sequence and 
  352.      that records in an indexed data set are accessed in key sequence order. 
  353.      For certain data set organizations, a file with the SEQUENTIAL attribute 
  354.      can also be used for random access or for a mixture of random and 
  355.      sequential access. In this case, the file must have the additive attribute 
  356.      KEYED. Existing records of a data set in a SEQUENTIAL UPDATE file can be 
  357.      modified, ignored, or, if the data set is indexed, deleted. 
  358.  
  359.     The DIRECT attribute specifies that records in a data set can be accessed 
  360.      in any order. The location of the record in the data set is determined by 
  361.      a character-string key. Therefore, the DIRECT attribute implies the KEYED 
  362.      attribute. The associated data set must be on a direct-access storage 
  363.      device. 
  364.  
  365.     The TRANSIENT attribute applies to files used for teleprocessing 
  366.      applications.  A TRANSIENT file is associated with a data set that 
  367.      consists of a queue of messages.  The message queue data set contains 
  368.      messages originating from and destined for remote terminals while in 
  369.      transit between a message control program and the  PL/I message processing 
  370.      program.  The action of reading a record removes that record from the data 
  371.      set.  Access is sequential, but the file must have the KEYED attribute 
  372.      since a key is used to identify the terminal concerned.  A buffer is 
  373.      always used, and so the file must also have the BUFFERED attribute. 
  374.  
  375. Syntax 
  376.  
  377. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇDIRECTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  378.       Γö£ΓöÇΓöÇSEQUENTIALΓöÇΓöÇΓöñ
  379.       ΓööΓöÇΓöÇTRANSIENTΓöÇΓöÇΓöÇΓöÿ
  380.  
  381.  
  382. ΓòÉΓòÉΓòÉ <hidden> BUFFERED/UNBUFFERED Attributes ΓòÉΓòÉΓòÉ
  383.  
  384. Description 
  385.   The BUFFERED (abbreviation BUF) and UNBUFFERED (abbreviation UNBUF) 
  386.   attributes apply only to RECORD files. 
  387.  
  388.   BUFFERED is the default for SEQUENTIAL and TRANSIENT files. UNBUFFERED is the 
  389.   default for DIRECT files. 
  390.  
  391. BUFFERED 
  392.   specifies that during transmission to and from auxiliary storage, each record 
  393.   of a RECORD file must pass through intermediate storage buffers. If BUFFERED 
  394.   is specified, data transmission (in most cases) is overlapped with 
  395.   processing. 
  396.  
  397. UNBUFFERED 
  398.   indicates that a record in a data set need not pass through a buffer but can 
  399.   be transmitted directly to and from the main storage associated with a 
  400.   variable. It does not, however, specify that records cannot be buffered. 
  401.  
  402.   Buffers will, in fact, be used if you specify INDEXED, REGIONAL(2) or 
  403.   REGIONAL(3) is specified in the ENVIRONMENT attribute or if the records are 
  404.   variable-length. 
  405.  
  406.   A file with the UNBUFFERED attribute must not be blocked. When you specify 
  407.   UNBUFFERED, data transmission is not overlapped with processing.  You must 
  408.   use the EVENT option to achieve such overlapping. 
  409.  
  410.   Note:   ABEND OCX  may occur when a PL/I program using a QSAM LOCATE mode 
  411.           attempts to reference data in the I/O buffer after the buffer is 
  412.           freed by DFP during CLOSE FILE processing.  DFP  frees buffers after 
  413.           CLOSE FILE processing. 
  414.  
  415.   Do not attempt to access based variables in the buffers after you have closed 
  416.   the file and  MVS/XA DFP has released the buffer.  A protection exception 
  417.   might result. 
  418.  
  419.  
  420. Syntax 
  421.  
  422. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇBUFFEREDΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  423.       ΓööΓöÇΓöÇUNBUFFEREDΓöÇΓöÇΓöÿ
  424.  
  425.  
  426. ΓòÉΓòÉΓòÉ <hidden> BACKWARDS Attribute ΓòÉΓòÉΓòÉ
  427.  
  428. Description 
  429.   The BACKWARDS attribute specifies that the records of a SEQUENTIAL RECORD 
  430.   INPUT file associated with a data set on magnetic tape are to be accessed in 
  431.   reverse order;  that is, from the last record to the first record. 
  432.  
  433. Syntax 
  434.  
  435. ΓöÇΓöÇΓöÇBACKWARDSΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  436.  
  437. Note:   The BACKWARDS attribute is for MVS only.
  438.  
  439.  
  440. ΓòÉΓòÉΓòÉ <hidden> ENVIRONMENT Attribute ΓòÉΓòÉΓòÉ
  441.  
  442. Description 
  443.   Use the ENVIRONMENT (abbreviation ENV) attribute to specify various data set 
  444.   characteristics that are not part of the PL/I language. 
  445.  
  446.   You provide these characteristics in a characteristic-list following the 
  447.   ENVIRONMENT attribute.  Options in the characteristic list are separated by 
  448.   blanks or commas. 
  449.  
  450.   The characteristic-list options are: 
  451.  
  452.     F|FB|FS|FBS         BUFN(n)         INDEXAREA(n)        REREAD
  453.     V|VB|VS|VBS         BUFSP(n)        KEYLENGTH(n)        REUSE
  454.     U|D|DB              COBOL           KEYLOC(n)           SCALARVARYING
  455.     ADDBUFF             CONSECUTIVE     LEAVE               SIS
  456.     ASCII               CTLASA          NCP(n)              SKIP
  457.     BKWD                CTL360          NOWRITE             TOTAL
  458.     BLKSIZE(n)          GENKEY          PASSWORD            TP(M|R)
  459.     BUFFERS(n)          GRAPHIC         RECSIZE(n)          TRKOFL
  460.     BUFFOFF(n)          INDEXED         REGIONAL(1|2|3)     VSAM
  461.     BUFND(n)
  462.  
  463.   Note:   MVS and CMS each support a different subset of the set of all 
  464.           possible ENVIRONMENT options. 
  465.  
  466. Syntax 
  467.  
  468. ΓöÇΓöÇΓöÇΓöÇENVIRONMENTΓöÇΓöÇ(characteristic-list)ΓöÇΓöÇΓöÇΓöÇ
  469.  
  470.  
  471. ΓòÉΓòÉΓòÉ <hidden> EXCLUSIVE Attribute ΓòÉΓòÉΓòÉ
  472.  
  473. Description 
  474.   The EXCLUSIVE attribute specifies that records in a file can be locked by an 
  475.   accessing task to prevent other tasks from interfering with an operation. 
  476.   When protecting a data set by means of the EXCLUSIVE attribute, all files 
  477.   accessing the data set must have that attribute. 
  478.  
  479.   Abbreviation:  EXCL 
  480.  
  481.   When access to a record is restricted to one task, the record is "locked" by 
  482.   that task.  The EXCLUSIVE attribute provides a temporary locking mechanism to 
  483.   prevent one task from interfering with an operation by another task.  Locking 
  484.   can be suppressed by the NOLOCK option on the READ statement. 
  485.  
  486.   No other task operating upon the same data set can access a locked record 
  487.   until it is unlocked by the locking task.  The record is protected from 
  488.   access by tasks in other jobs, as well as by those within the same job as the 
  489.   locking task.  Any task referring to a locked record will wait at that point 
  490.   until the record is unlocked. 
  491.  
  492.   Any READ statement referring to an EXCLUSIVE file locks the record unless the 
  493.   NOLOCK option is specified.  Subsequent unlocking can be accomplished by the 
  494.   locking task through execution of an UNLOCK statement, a REWRITE statement, 
  495.   or a DELETE statement that specifies the same key, by a CLOSE statement, or 
  496.   by completion of the program. 
  497.  
  498.   The EXCLUSIVE attribute applies to the data set and not to the file. 
  499.   Consequently, record protection is provided even when all tasks refer to the 
  500.   data set through the use of different files. 
  501.  
  502.   The EXCLUSIVE attribute, the UNLOCK statement, and the NOLOCK option of the 
  503.   READ statement can be used for DIRECT UPDATE of INDEXED data sets, and can be 
  504.   used for DIRECT INPUT and DIRECT UPDATE of REGIONAL data sets.  They have no 
  505.   effect for a file associated with a VSAM data set. 
  506.  
  507.   Syntax 
  508.  
  509.     ΓöÇΓöÇΓöÇΓöÇEXCLUSIVEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  510.  
  511.   Note:   The EXCLUSIVE attribute is for MVS only.
  512.  
  513.  
  514. ΓòÉΓòÉΓòÉ <hidden> KEYED Attribute ΓòÉΓòÉΓòÉ
  515.  
  516. Description 
  517.   The KEYED attribute applies only to RECORD files, and must be associated with 
  518.   direct access devices or with a file with the TRANSIENT attribute. Use the 
  519.   KEYED attribute to specify that records in the file can be accessed using one 
  520.   of the key options of the record I/O statements: KEY, KEYTO, or KEYFROM. 
  521.  
  522.   You need not specify the KEYED attribute unless one of the key options is 
  523.   used. 
  524.  
  525.   KEYED is implied by use of the DIRECT attribute. 
  526.  
  527. Syntax 
  528.  
  529. ΓöÇΓöÇΓöÇΓöÇKEYEDΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  530.  
  531.  
  532. ΓòÉΓòÉΓòÉ <hidden> PRINT Attribute ΓòÉΓòÉΓòÉ
  533.  
  534. Description 
  535.   The PRINT attribute applies to files with the STREAM and OUTPUT attributes. 
  536.   Use the PRINT attribute to indicate that a file is intended to be printed. In 
  537.   other words, the data associated with the file is to appear on printed pages. 
  538.  
  539. Usage Rules 
  540.   Consider the following rules when using the PRINT attribute: 
  541.  
  542.     PRINT applies only to files with the STREAM and OUTPUT attributes. 
  543.  
  544.     The additive attribute PRINT can be implied by the output file name 
  545.      SYSPRINT. 
  546.  
  547.     When PRINT is specified, the first data byte of each record of a PRINT 
  548.      file is reserved for an American National Standard (ANS) printer control 
  549.      character. The control characters are inserted by the compiler. 
  550.  
  551.     Data values transmitted by list- and data-directed data transmission are 
  552.      automatically aligned on the left margin and on implementation-defined 
  553.      preset tab positions.  These tab positions are 25, 49, 73, 97, and 121, 
  554.      but provision is made for you to alter these values. 
  555.  
  556. Related Information 
  557.   PRINT file options and format items 
  558.  
  559. Example 
  560.   Using PRINT file options and format items 
  561.  
  562. Syntax 
  563.  
  564. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇPRINTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  565.  
  566.  
  567. ΓòÉΓòÉΓòÉ <hidden> PRINT File Options and Format Items ΓòÉΓòÉΓòÉ
  568.  
  569. You can control the layout of a PRINT file by the use of options and format 
  570. items listed below: 
  571.  
  572. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  573. Γöé          Γöé  Statement  Γöé Edit-Directed Γöé                                      Γöé
  574. ΓöéStatement Γöé  Option     Γöé Format Item   Γöé Effect                               Γöé
  575. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  576. ΓöéOPEN      Γöé LINESIZE(n) Γöé    -          Γöé Establishes line width (n)           Γöé
  577. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  578. ΓöéOPEN      Γöé PAGESIZE(n) Γöé    -          Γöé Establishes page length (n)          Γöé
  579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  580. ΓöéPUT       Γöé PAGE        Γöé PAGE          Γöé Skip to new page                     Γöé
  581. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  582. ΓöéPUT       Γöé LINE(n)     Γöé LINE(n)       Γöé Skip to specified line (n)           Γöé
  583. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  584. ΓöéPUT       Γöé SKIP[(n)]   Γöé SKIP[(n)]     Γöé Skip specified number of lines (n)   Γöé
  585. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  586. ΓöéPUT       Γöé    -        Γöé COLUMN(n)     Γöé Skip to specified character position Γöé
  587. Γöé          Γöé             Γöé               Γöé in line (n)                          Γöé
  588. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  589. ΓöéPUT       Γöé    -        Γöé X(n)          Γöé Places blank characters (n) in line  Γöé
  590. Γöé          Γöé             Γöé               Γöé to establish position                Γöé
  591. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  592.  
  593. Note:   LINESIZE and PAGESIZE establish the dimensions of the printed area of 
  594.         the page, excluding footings. The LINESIZE option specifies the maximum 
  595.         number of characters included in each printed line. If it is not 
  596.         specified for a PRINT file, a default value of 120 characters is used. 
  597.         There is no default for a non-PRINT file. 
  598.  
  599. The PAGESIZE option specifies the maximum number of lines in each printed page; 
  600. if it is not specified, a default value of 60 lines is used. 
  601.  
  602.  
  603. ΓòÉΓòÉΓòÉ <hidden> Example- PRINT File Options and Format Items ΓòÉΓòÉΓòÉ
  604.  
  605. The following example illustrates the use of PRINT file options and format 
  606. items: 
  607.  
  608. OPEN FILE(REPORT) OUTPUT STREAM PRINT PAGESIZE(55) LINESIZE(110);
  609. ON ENDPAGE(REPORT) BEGIN;
  610.      PUT FILE(REPORT) SKIP LIST (FOOTING);
  611.      PAGENO = PAGENO + 1;
  612.      PUT FILE(REPORT) PAGE LIST ('PAGE '||PAGENO);
  613.      PUT FILE(REPORT) SKIP (3);
  614. END;
  615.  
  616. The OPEN statement opens the file REPORT as a PRINT file. The specification 
  617. PAGESIZE(55) indicates that each page contains a maximum of 55 lines. An 
  618. attempt to write on a page after 55 lines have already been written (or 
  619. skipped) raises the ENDPAGE condition. The implicit action for the ENDPAGE 
  620. condition is to skip to a new page, but you can establish your own action 
  621. through use of the ON statement, as shown in the example. 
  622.  
  623. LINESIZE(110) indicates that each line on the page can contain a maximum of 110 
  624. characters. An attempt to write a line greater than 110 characters places the 
  625. excess characters on the next line. 
  626.  
  627. When an attempt is made to write on line 56 (or to skip beyond line 55), the 
  628. ENDPAGE condition is raised, and the begin block shown here is executed. The 
  629. ENDPAGE condition is raised only once per page. Consequently, printing can be 
  630. continued beyond the specified PAGESIZE after the ENDPAGE condition has been 
  631. raised. This can be useful, for example, if you want to write a footing at the 
  632. bottom of each page. 
  633.  
  634. The first PUT statement specifies that a line is skipped, and the value of 
  635. FOOTING, presumably a character string, is printed on line 57 (when ENDPAGE is 
  636. raised, the current line is always PAGESIZE+1). The page number, PAGENO, is 
  637. incremented, the file REPORT is set to the next page, and the character 
  638. constant "PAGE" is concatenated with the new page number and printed. 
  639.  
  640. The final PUT statement skips three lines, so that the next printing will be on 
  641. line 4. Control returns from the begin block to the PUT statement that raised 
  642. the ENDPAGE condition. However, any SKIP or LINE option specified in that 
  643. statement has no further effect. 
  644.  
  645.  
  646. ΓòÉΓòÉΓòÉ <hidden> GRAPHIC Option ΓòÉΓòÉΓòÉ
  647.  
  648. Description 
  649.   You specify the GRAPHIC option of the ENVIRONMENT attribute if you use DBCS 
  650.   variables or DBCS constants in GET and PUT statements for list- and 
  651.   data-directed I/O. The GRAPHIC option of the ENVIRONMENT attribute must be 
  652.   specified if any variable has a DBCS name, even if no DBCS data is present. 
  653.   You can also specify the GRAPHIC option for edit-directed I/O. 
  654.  
  655.   The ERROR condition is raised for list- and data-directed I/O if you have 
  656.   graphics in input or output data and do not specify the GRAPHIC option. 
  657.  
  658.   For edit-directed I/O, the GRAPHIC option specifies that left and right 
  659.   delimiters are added to DBCS variables and constants on output, and that 
  660.   input graphics will have left and right delimiters. If you do not specify the 
  661.   GRAPHIC option, left and right delimiters are not added to output data, and 
  662.   input graphics do not require left and right delimiters. When the GRAPHIC 
  663.   option is specified, the ERROR condition is raised if left and right 
  664.   delimiters are missing from the input data. 
  665.  
  666.   Syntax 
  667.  
  668.     ΓöÇΓöÇΓöÇΓöÇΓöÇGRAPHICΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  669.  
  670.  
  671. ΓòÉΓòÉΓòÉ <hidden> SCALARVARYING Option ΓòÉΓòÉΓòÉ
  672.  
  673. Description 
  674.   Use the SCALARVARYING option in the input/output of varying-length strings. 
  675.  
  676.   When storage is allocated for a varying-length string, a 2-byte prefix that 
  677.   specifies the current length of the string is included. For an element 
  678.   varying-length string, the prefix is included on output, or recognized on 
  679.   input, only if SCALARVARYING is specified for the file. 
  680.  
  681.   When locate-mode statements (LOCATE and READ SET) are used to create and read 
  682.   a data set with element varying-length strings, you must specify 
  683.   SCALARVARYING to indicate that a length prefix is present, since the pointer 
  684.   that locates the storage area that contains the string is always assumed to 
  685.   point to the start of the length prefix. 
  686.  
  687.   When you specify SCALARVARYING and element varying-length strings are 
  688.   transmitted, you must allow two bytes in the record length to include the 
  689.   length prefix. 
  690.  
  691.   A data set created using SCALARVARYING should be accessed only by a file that 
  692.   also specifies SCALARVARYING. 
  693.  
  694.   You must not specify SCALARVARYING and CTLASA/CTL360 for the same file, as 
  695.   this causes the first data byte to be ambiguous. 
  696.  
  697.   Syntax 
  698.  
  699.     ΓöÇΓöÇΓöÇΓöÇSCALARVARYINGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  700.  
  701.  
  702. ΓòÉΓòÉΓòÉ <hidden> Opening and Closing Files ΓòÉΓòÉΓòÉ
  703.  
  704. Description 
  705.   Before a file can be used for data transmission, by input or output 
  706.   statements, it must be associated with a data set. 
  707.  
  708.   Opening a file associates a file with a data set and involves checking for 
  709.   the availability of external storage media, positioning the media, and 
  710.   allocating appropriate operating system support. When processing is 
  711.   completed, the file must be closed. 
  712.  
  713.   Closing a file dissociates the file from the data set. 
  714.  
  715.   PL/I provides two statements, OPEN and CLOSE, to perform these functions. 
  716.   However, these statements are optional. Implicit opening and closing may 
  717.   occur. 
  718.  
  719. Related Information 
  720.  
  721.     OPEN statement 
  722.     CLOSE statement 
  723.  
  724.  
  725. ΓòÉΓòÉΓòÉ <hidden> OPEN Statement ΓòÉΓòÉΓòÉ
  726.  
  727. Description 
  728.   Use the OPEN statement to associate a file with a data set or terminal. The 
  729.   OPEN statement merges its own attributes with those specified on the DECLARE 
  730.   statement. 
  731.  
  732.   OPEN also completes the specification of attributes for the file, if a 
  733.   complete set of attributes has not been declared for the file being opened. 
  734.  
  735.   When a STREAM file is opened, if the first GET or PUT specifies, by means of 
  736.   a statement option or format item, that n lines are to be skipped before the 
  737.   first record is accessed, the file is then positioned at the start of the nth 
  738.   record. Otherwise, it is positioned at the start of the first line or record. 
  739.   If the file has the PRINT attribute, it is physically positioned at column 1 
  740.   of that line. 
  741.  
  742.   If you open an already-open file, it does not affect the file. 
  743.  
  744. Related Information 
  745.  
  746.     Attribute merging for explicit opening 
  747.     Implicit opening of files 
  748.     OPEN statement Options 
  749.  
  750. Syntax 
  751.  
  752.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  753.                              Γöé
  754. ΓöÇΓöÇΓöÇΓöÇOPENΓöÇΓöÇΓöÇΓöÇΓöÇoptions-groupΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  755.  
  756. where options-group is:
  757.                                        ΓöîΓöÇSTREAMΓöÇΓöÉ
  758. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  759.                                        ΓööΓöÇRECORDΓöÇΓöÿ
  760.       ΓöîΓöÇΓöÇINPUTΓöÇΓöÇΓöÇΓöÉ
  761. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  762.       Γö£ΓöÇΓöÇOUTPUTΓöÇΓöÇΓöñ   Γö£ΓöÇΓöÇDIRECTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ   Γö£ΓöÇΓöÇBUFFEREDΓöÇΓöÇΓöÇΓöÇΓöñ
  763.       ΓööΓöÇΓöÇUPDATEΓöÇΓöÇΓöÿ   Γö£ΓöÇΓöÇSEQUENTIALΓöÇΓöÇΓöñ   ΓööΓöÇΓöÇUNBUFFEREDΓöÇΓöÇΓöÿ
  764.                      ΓööΓöÇΓöÇTRANSIENTΓöÇΓöÇΓöÇΓöÿ
  765.  
  766.  
  767. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  768.       ΓööΓöÇBACKWARDSΓöÇΓöÿ      ΓööΓöÇEXCLUSIVEΓöÇΓöÿ
  769.  
  770.  
  771. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  772.       ΓööΓöÇΓöÇKEYEDΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇPRINTΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇTITLEΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  773.  
  774. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  775.       ΓööΓöÇΓöÇLINESIZEΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  776.  
  777. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  778.       ΓööΓöÇΓöÇPAGESIZEΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  779.  
  780.  
  781. ΓòÉΓòÉΓòÉ <hidden> PAGESIZE Option ΓòÉΓòÉΓòÉ
  782.  
  783. PAGESIZE (expression) 
  784.   is evaluated and converted to an integer value, and specifies the number of 
  785.   lines per page. The first attempt to exceed this limit raises the ENDPAGE 
  786.   condition. During subsequent transmission to the PRINT file, a new page can 
  787.   be started by use of the PAGE format item or by the PAGE option in the PUT 
  788.   statement. The default page size is 60. 
  789.  
  790.   You can specify the PAGESIZE option only for a file with the STREAM and PRINT 
  791.   attributes. 
  792.  
  793. Syntax 
  794.  
  795. ΓöÇΓöÇΓöÇΓöÇΓöÇPAGESIZEΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  796.  
  797.  
  798. ΓòÉΓòÉΓòÉ <hidden> OPEN Statement Options ΓòÉΓòÉΓòÉ
  799.  
  800. Description 
  801.   The STREAM, RECORD, INPUT, OUTPUT, UPDATE, DIRECT, SEQUENTIAL, TRANSIENT, 
  802.   BUFFERED, UNBUFFERED, BACKWARDS , EXCLUSIVE, KEYED, and PRINT options specify 
  803.   attributes that augment the attributes specified in the file declaration. 
  804.   You need not list the same attributes for both OPEN and DECLARE statements 
  805.   for the same file, and there must be no conflict of attributes. 
  806.  
  807.  
  808. ΓòÉΓòÉΓòÉ <hidden> TITLE Specification ΓòÉΓòÉΓòÉ
  809.  
  810. TITLE 
  811.   is converted to a character string, if necessary.  The first 8 characters of 
  812.   the character string identify the data set associated with the file.  If the 
  813.   TITLE option does not appear, the default uses the first 8 characters of the 
  814.   file name (padded or truncated).  This is not the same truncation as that for 
  815.   external names. 
  816.  
  817. Syntax 
  818.  
  819. ΓöÇΓöÇΓöÇΓöÇΓöÇTITLEΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  820.  
  821.  
  822. ΓòÉΓòÉΓòÉ <hidden> LINESIZE Option ΓòÉΓòÉΓòÉ
  823.  
  824. Description 
  825.   LINESIZE is converted to an integer value, and specifies the length (in 
  826.   bytes) of a line during subsequent operations on the file. 
  827.  
  828.   You start new lines by use of the printing and control format items or by 
  829.   options in a GET or PUT statement. If an attempt is made to position a file 
  830.   past the end of a line before explicit action to start a new line is taken, a 
  831.   new line is started, and the file is positioned to the start of this new 
  832.   line. The default line size for PRINT file is 120. 
  833.  
  834. Usage Rules 
  835.   You can specify the LINESIZE option only for a STREAM OUTPUT file. 
  836.  
  837.   Whenever you use a SKIP option in a GET statement, the line size taken into 
  838.   consideration is the line size that was used to create the data set. 
  839.   Otherwise, the line size is taken as the current length of the logical record 
  840.   minus any control bytes. 
  841.  
  842. Syntax 
  843.  
  844. ΓöÇΓöÇΓöÇΓöÇΓöÇLINESIZEΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  845.  
  846.  
  847. ΓòÉΓòÉΓòÉ <hidden> Implicit Opening of Files ΓòÉΓòÉΓòÉ
  848.  
  849. Description 
  850.   An implicit opening of a file occurs when a GET, PUT, READ, WRITE, LOCATE, 
  851.   REWRITE, DELETE, or UNLOCK statement is executed for a file for which an OPEN 
  852.   statement has not already been executed. 
  853.  
  854.   If a GET statement contains a COPY option, execution of the GET statement can 
  855.   cause implicit opening of either the file specified in the COPY option or, if 
  856.   no file was specified, of the output file SYSPRINT. 
  857.  
  858.   Implicit opening of the file specified in the COPY option implies the STREAM 
  859.   and OUTPUT attributes. 
  860.  
  861. Related Information 
  862.   Implied attributes 
  863.  
  864. Examples 
  865.  
  866.     Declaring and opening files 
  867.     Implicit opening 
  868.  
  869.  
  870. ΓòÉΓòÉΓòÉ <hidden> Implied Attributes ΓòÉΓòÉΓòÉ
  871.  
  872. The following list shows the attributes that are implied when an implicit 
  873. opening is caused by the statement in the left-hand column: 
  874.  
  875. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  876. ΓöéStatement Γöé     Implied Attributes                   Γöé
  877. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  878. ΓöéGET       Γöé     STREAM, INPUT                        Γöé
  879. ΓöéPUT       Γöé     STREAM, OUTPUT                       Γöé
  880. ΓöéREAD      Γöé     RECORD, INPUT (see below)            Γöé
  881. ΓöéWRITE     Γöé     RECORD, OUTPUT (see below)           Γöé
  882. ΓöéLOCATE    Γöé     RECORD, OUTPUT, BUFFERED, SEQUENTIAL Γöé
  883. ΓöéREWRITE   Γöé     RECORD, UPDATE                       Γöé
  884. ΓöéDELETE    Γöé     RECORD, UPDATE                       Γöé
  885. ΓöéUNLOCK    Γöé     RECORD, DIRECT, UPDATE, EXCLUSIVE    Γöé
  886. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  887.  
  888. Note:   INPUT and OUTPUT are default attributes for READ and WRITE statements 
  889.         only if UPDATE has not been explicitly declared. 
  890.  
  891. An implicit opening by one of the above statements is equivalent to preceding 
  892. the statement with an OPEN statement that specifies the same attributes. 
  893.  
  894. There must be no conflict between the attributes specified in a file 
  895. declaration and the attributes implied as the result of opening the file. 
  896.  
  897. The attribute implications listed below are applied prior to the application of 
  898. the default attributes discussed earlier.  Implied attributes can also cause a 
  899. conflict. If a conflict in attributes exists after the application of default 
  900. attributes, the UNDEFINEDFILE condition is raised. 
  901.  
  902. Following is a list of merged attributes and attributes that each implies after 
  903. merging: 
  904.  
  905. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  906. ΓöéMerged Attributes ΓöéImplied Attributes         Γöé
  907. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  908. ΓöéUPDATE            ΓöéRECORD                     Γöé
  909. ΓöéSEQUENTIAL        ΓöéRECORD                     Γöé
  910. ΓöéDIRECT            ΓöéRECORD, KEYED              Γöé
  911. ΓöéBUFFERED          ΓöéRECORD                     Γöé
  912. ΓöéUNBUFFERED        ΓöéRECORD                     Γöé
  913. ΓöéPRINT             ΓöéOUTPUT, STREAM             Γöé
  914. ΓöéBACKWARDS         ΓöéRECORD, SEQUENTIAL, INPUT  Γöé
  915. ΓöéKEYED             ΓöéRECORD                     Γöé
  916. ΓöéEXCLUSIVE         ΓöéRECORD                     Γöé
  917. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  918.  
  919.  
  920. ΓòÉΓòÉΓòÉ <hidden> Attribute Merging for Explicit Opening ΓòÉΓòÉΓòÉ
  921.  
  922. The following two examples illustrate attribute merging for an explicit opening 
  923. using a file constant and a file variable. 
  924.  
  925.  Example of a file constant: 
  926.  
  927.     DECLARE LISTING FILE STREAM;
  928.     OPEN FILE(LISTING) PRINT;
  929.  
  930.   Attributes after merge caused by execution of the OPEN statement are STREAM 
  931.   and PRINT. Attributes after implication are STREAM, PRINT, and OUTPUT. 
  932.   Attributes after default application are STREAM, PRINT, OUTPUT, and EXTERNAL. 
  933.  
  934.  Example of a file variable: 
  935.  
  936.     DECLARE ACCOUNT FILE VARIABLE,
  937.             (ACCT1,ACCT2,...)  FILE
  938.             OUTPUT;
  939.  
  940.     ACCOUNT = ACCT1;
  941.     OPEN FILE(ACCOUNT) PRINT;
  942.  
  943.     ACCOUNT = ACCT2;
  944.     OPEN FILE(ACCOUNT) RECORD;
  945.  
  946.   The file ACCT1 is opened with attributes (explicit and implied) STREAM, 
  947.   EXTERNAL, PRINT, and OUTPUT. The file ACCT2 is opened with attributes RECORD, 
  948.   EXTERNAL, OUTPUT and SEQUENTIAL. 
  949.  
  950.  
  951. ΓòÉΓòÉΓòÉ <hidden> Declaring and Opening Files ΓòÉΓòÉΓòÉ
  952.  
  953. The following are examples of declarations of file constants including the 
  954. ENVIRONMENT attribute: 
  955.  
  956. DECLARE FILE#3 INPUT DIRECT
  957.      ENVIRONMENT(V BLKSIZE(328)
  958.      REGIONAL(3));
  959.  
  960. This declaration specifies three file attributes:  INPUT, DIRECT, and 
  961. ENVIRONMENT.  Other implied attributes are FILE (implied by any of the 
  962. attributes) and RECORD and KEYED (implied by DIRECT).  Scope is EXTERNAL, by 
  963. default.  The ENVIRONMENT attribute specifies that the data set is of the 
  964. REGIONAL(3) organization and contains unblocked varying-length records with a 
  965. maximum length of 328 bytes. A maximum length record will contain only 320 
  966. bytes of data used by the program, because 8 bytes are required for control 
  967. information in V-format records.  The KEY option must be specified in each READ 
  968. statement that refers to this file. 
  969.  
  970. DECLARE INVNTRY UPDATE BUFFERED
  971.      ENVIRONMENT (F RECSIZE(100)
  972.      INDEXED BUFFERS(4));
  973.  
  974. This declaration also specifies three file attributes:  UPDATE, BUFFERED, and 
  975. ENVIRONMENT.  Other implied attributes are FILE (implied by any of the 
  976. attributes) and RECORD and KEYED (implied by DIRECT).  Scope is EXTERNAL, by 
  977. default.  The data set is of INDEXED organization, and contains fixed-length 
  978. records of 100 bytes each.  Four buffers are allocated for use in accessing the 
  979. data set.  Note that, although the data set actually contains recorded keys, 
  980. the KEYTO option cannot be specified in a READ statement, since the KEYED 
  981. attribute has not been specified. 
  982.  
  983. For both of the above declarations, all necessary attributes are either stated 
  984. or implied in the DECLARE statement. None of the attributes can be changed in 
  985. an OPEN statement or in a DD statement. The second declaration might also be 
  986. written: 
  987.  
  988. DECLARE INVNTRY
  989.      ENVIRONMENT(F RECSIZE(100) INDEXED);
  990.  
  991. With such a declaration, INVNTRY can be opened for different purposes. For 
  992. example: 
  993.  
  994. OPEN FILE (INVNTRY)
  995.      UPDATE SEQUENTIAL BUFFERED;
  996.  
  997. With this OPEN statement, the file attributes are the same as those specified 
  998. (or implied) in the DECLARE statement in the second example above (the number 
  999. of buffers would have to be stated in the associated DD statement). The file 
  1000. might be opened in this way, then closed, and then later opened with a 
  1001. different set of attributes. For example: 
  1002.  
  1003. OPEN FILE (INVNTRY)
  1004.      INPUT SEQUENTIAL KEYED;
  1005.  
  1006. This OPEN statement allows records to be read with either the KEYTO or the KEY 
  1007. option. Because the file is SEQUENTIAL, and the data set is INDEXED, the data 
  1008. set can be accessed in a purely sequential manner. It can also be accessed 
  1009. randomly by means of a READ statement with a KEY option. A READ statement with 
  1010. a KEY option for a file of this description obtains a specified record. 
  1011. Subsequent READ statements without a KEY option access records sequentially, 
  1012. beginning with the next record. 
  1013.  
  1014.  
  1015. ΓòÉΓòÉΓòÉ <hidden> CLOSE Statement ΓòÉΓòÉΓòÉ
  1016.  
  1017. Description 
  1018.   Use the CLOSE statement to dissociate the file from its data set. 
  1019.  
  1020.   The CLOSE statement also dissociates from the file all attributes established 
  1021.   for it by the implicit or explicit opening process. You can specify new 
  1022.   attributes for the file constant in a subsequent OPEN statement. However, all 
  1023.   attributes explicitly given to the file constant in a DECLARE statement 
  1024.   remain in effect. 
  1025.  
  1026. Usage Rules 
  1027.   Consider the following rules when closing files with CLOSE: 
  1028.  
  1029.     Closing an already-closed file has no effect. 
  1030.  
  1031.     A closed file can be reopened. 
  1032.  
  1033.     If a file is not closed by a CLOSE statement, it is closed at the 
  1034.      completion of the main program. 
  1035.  
  1036.     All input/output events associated with the file that have a status value 
  1037.      of zero when the file is closed are set to complete, with a status value 
  1038.      of 1. 
  1039.  
  1040. Syntax 
  1041.  
  1042.  
  1043.              ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1044.                                                                                 Γöé
  1045. ΓöÇΓöÇΓöÇCLOSEΓöÇΓöÇΓöÇΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇ
  1046.                                             ΓööΓöÇENVIRONMENTΓöÇ(ΓöÇΓöÇΓö¼ΓöÇLEAVEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÿ
  1047.                                                              ΓööΓöÇREREADΓöÇΓöÿ
  1048.  
  1049.  
  1050. ΓòÉΓòÉΓòÉ <hidden> Using the SYSPRINT File ΓòÉΓòÉΓòÉ
  1051.  
  1052. Description 
  1053.   The file SYSPRINT, unless it is declared explicitly, is given the attribute 
  1054.   PRINT. A new page is initiated automatically when the file is opened.  If the 
  1055.   first PUT statement that refers to the file has the PAGE option, or if the 
  1056.   first PUT statement includes a format list with the PAGE as the first item, a 
  1057.   blank page appears. 
  1058.  
  1059. Example 
  1060.   If the following statement is executed: 
  1061.  
  1062.     PUT SKIP LIST('Hello out there!');
  1063.  
  1064.   the "Hello out there!" string gets put to SYSPRINT. Assuming an association 
  1065.   between SYSPRINT and the user's terminal, the user would see the "Hello out 
  1066.   there!" string displayed on the terminal. 
  1067.  
  1068.   Because SYSPRINT serves as a default stream output file, the following 
  1069.   statement is functionally equivalent to the preceding one: 
  1070.  
  1071.     PUT FILE(SYSPRINT) LIST('Hello out there!);
  1072.  
  1073.  
  1074. ΓòÉΓòÉΓòÉ <hidden> Using Record-Oriented Data Transmission ΓòÉΓòÉΓòÉ
  1075.  
  1076. Description 
  1077.   In record-oriented data transmission, data in a data set is a collection of 
  1078.   records recorded in any format acceptable to the operating system. No data 
  1079.   conversion is performed during record-oriented data transmission. 
  1080.  
  1081.   Use data transmission statements to transmit records to or from auxiliary 
  1082.   storage. 
  1083.  
  1084.   On input, the READ statement either transmits a single record to a program 
  1085.   variable exactly as it is recorded in the data set, or sets a pointer to the 
  1086.   record. 
  1087.  
  1088.   On output, the WRITE, REWRITE, or LOCATE statement transmits a single record 
  1089.   from a program variable exactly as it is recorded internally. 
  1090.  
  1091.   Most variables can be transmitted by record-oriented data transmission. 
  1092.   However, there are restrictions placed on certain data types. 
  1093.  
  1094.   Record-oriented data transmission has two modes of handling data: 
  1095.  
  1096.     Move mode: you can process data by having the data moved into or out of 
  1097.      the variable 
  1098.  
  1099.     Locate mode: you can process data by locating a record. The execution of a 
  1100.      data transmission statement assigns to a pointer variable the location of 
  1101.      the storage allocated to a record in the buffer. LOCATE mode is applicable 
  1102.      only to BUFFERED files. The file must be either a SEQUENTIAL file or an 
  1103.      INPUT or UPDATE file associated with a VSAM data set. 
  1104.  
  1105. Related Information 
  1106.  
  1107.     Rules for data types 
  1108.     MOVE mode for record-oriented data transmission 
  1109.     LOCATE mode for record-oriented data transmission 
  1110.     Data transmission statements 
  1111.     Options of data transmission statements 
  1112.  
  1113.  
  1114. ΓòÉΓòÉΓòÉ <hidden> Rules for Data Types ΓòÉΓòÉΓòÉ
  1115.  
  1116. Description 
  1117.   Most variables, including parameters and DEFINED variables, can be 
  1118.   transmitted by record-oriented data transmission statements. There are 
  1119.   special considerations for several types of data, and these are given below. 
  1120.  
  1121. Data Aggregates 
  1122.   An aggregate must be in connected storage. 
  1123.  
  1124. Unaligned Bit Strings 
  1125.   The following cannot be transmitted: 
  1126.  
  1127.     BASED, DEFINED, parameter, subscripted, or structure-base-element 
  1128.      variables that are unaligned fixed-length bit strings 
  1129.  
  1130.     Minor structures whose first or last base elements are unaligned 
  1131.      fixed-length bit strings (except where they are also the first or last 
  1132.      elements of the containing major structure) 
  1133.  
  1134.     Major structures that have the DEFINED attribute or are parameters, and 
  1135.      that have unaligned fixed-length bit strings as their first or last 
  1136.      elements. 
  1137.  
  1138. Varying-Length Strings 
  1139.   A locate mode output statement specifying a varying-length string transmits a 
  1140.   field having a length equal to the maximum length of the string, plus a 
  1141.   2-byte prefix denoting the current length of the string. You must specify the 
  1142.   SCALARVARYING option of the ENVIRONMENT attribute for the file. 
  1143.  
  1144.   A move mode output statement specifying a varying-length string variable 
  1145.   transmits only the current length of the string. A 2-byte prefix is included 
  1146.   only if the SCALARVARYING option of the ENVIRONMENT attribute is specified 
  1147.   for the file. 
  1148.  
  1149. Graphic Strings 
  1150.   If you specify a graphic string for input or output, you must specify the 
  1151.   SCALARVARYING option for the file. 
  1152.  
  1153. Area Variables 
  1154.   A locate mode output statement specifying an area variable transmits a field 
  1155.   whose length is the declared size of the area, plus a 16-byte prefix 
  1156.   containing control information. 
  1157.  
  1158.   A move mode statement specifying an element area variable or a structure 
  1159.   whose last element is an area variable transmits only the current extent of 
  1160.   the area plus a 16-byte prefix. 
  1161.  
  1162.  
  1163. ΓòÉΓòÉΓòÉ <hidden> Move Mode for Record-Oriented Data Transmission ΓòÉΓòÉΓòÉ
  1164.  
  1165. Description 
  1166.   In move mode, use a READ statement to transfer a record from external storage 
  1167.   to the variable named in the INTO option. 
  1168.  
  1169.   Use a WRITE or REWRITE statement to transfer a record from the variable named 
  1170.   in the FROM option to external storage. 
  1171.  
  1172.   The variables you name in the INTO and FROM options can be of any storage 
  1173.   class. 
  1174.  
  1175. Example 
  1176.   The following is an example of move mode input: 
  1177.  
  1178.     EOF_IN = '0'B;
  1179.     ON ENFILE(IN) EOF_IN = '1'B;
  1180.     READ FILE(IN) INTO(DATA);
  1181.     DO WHILE (╨║EOF_IN);
  1182.      .
  1183.      .      /* process record  */
  1184.      .
  1185.     READ FILE(IN) INTO(DATA);
  1186.     END;
  1187.  
  1188.  
  1189. ΓòÉΓòÉΓòÉ <hidden> Locate Mode for Record-Oriented Data Transmission ΓòÉΓòÉΓòÉ
  1190.  
  1191. Description 
  1192.   You use locate mode to assign the location of the next record to a pointer 
  1193.   variable. A based variable describes the record. The same data can be 
  1194.   interpreted in different ways by using different based variables. 
  1195.  
  1196.   You can also use locate mode to read self-defining records, in which 
  1197.   information in one part of the record is used to indicate the structure of 
  1198.   the rest of the record. For example, this information could be an array bound 
  1199.   or a code identifying which based structure should be used for the attributes 
  1200.   of the data. 
  1201.  
  1202.   Use a READ statement with a SET option to set the pointer variable in the SET 
  1203.   option to point to the next record. The data in the record can then be 
  1204.   referenced by a based variable qualified with the pointer variable. The 
  1205.   pointer value is valid only until the execution of the next READ or CLOSE 
  1206.   statement that refers to the same file. 
  1207.  
  1208.   The LOCATE statement is used for output from a buffer for SEQUENTIAL files. 
  1209.   A LOCATE statement allocated storage, within an output buffer for a based 
  1210.   variable, and does the following: 
  1211.  
  1212.     1. Transfers a block of data to the data set from an output buffer, if the 
  1213.        current block is complete. 
  1214.  
  1215.     2. Sets a pointer variable to the location in the buffer of the next output 
  1216.        record.  The pointer variable specified in the SET option, or if SET was 
  1217.        omitted, the pointer variable specified in the declaration of the based 
  1218.        variable, is used. The pointer value is valid only until the execution 
  1219.        of the next LOCATE, WRITE, or CLOSE statement that refers to the same 
  1220.        file. 
  1221.  
  1222.     3. Initializes components of the based variable that have been specified in 
  1223.        REFER options. 
  1224.  
  1225.   After execution of the LOCATE statement, values can be assigned directly into 
  1226.   the output buffer by referencing based variables qualified by the pointer 
  1227.   variable set by the LOCATE statement.  If the current block is complete, the 
  1228.   next LOCATE, WRITE, or CLOSE statement for the same file transmits the data 
  1229.   in the output buffer to the data set. 
  1230.  
  1231.   Care is necessary when using the LOCATE statement with device-associated 
  1232.   files, where a number of files are grouped together.  No data transmission 
  1233.   can take place after any one of the group has been closed. 
  1234.  
  1235. Examples 
  1236.   Locate mode input/output 
  1237.  
  1238.  
  1239. ΓòÉΓòÉΓòÉ <hidden> Examples- Locate Mode Input/Output ΓòÉΓòÉΓòÉ
  1240.  
  1241.  The following example shows locate mode input: 
  1242.  
  1243.     DCL 1 DATA BASED(P),
  1244.           2 ...
  1245.             ;
  1246.  
  1247.     EOF_IN = '0'B;
  1248.     ON ENDFILE(IN) EOF_IN = '1'B;
  1249.     READ FILE(IN) SET(P);
  1250.     DO WHILE (╨║EOF_IN);
  1251.        .
  1252.        .    /* process record */
  1253.        .
  1254.       READ FILE(IN) SET(P);
  1255.     END;
  1256.  
  1257.  The following example shows locate mode output: 
  1258.  
  1259.     DCL 1 DATA BASED(P);
  1260.           2 ...
  1261.             ;
  1262.  
  1263.     DO WHILE (MORE_RECORDS_TO_WRITE);
  1264.       LOCATE DATA FILE(OUT);
  1265.         .
  1266.         .     /* build record */
  1267.         .
  1268.     END;
  1269.  
  1270.  
  1271. ΓòÉΓòÉΓòÉ <hidden> Data Transmission Statements ΓòÉΓòÉΓòÉ
  1272.  
  1273. Description 
  1274.   The data transmission statements that you use to transmit records to or from 
  1275.   auxiliary storage are READ, WRITE, LOCATE, and REWRITE. Use the DELETE 
  1276.   statement to delete records from an UPDATE file. 
  1277.  
  1278.   The attributes of the file determine which data transmission statements can 
  1279.   be used. 
  1280.  
  1281. Related Information 
  1282.  
  1283.     DELETE statement 
  1284.     LOCATE statement 
  1285.     READ statement 
  1286.     REWRITE statement 
  1287.     WRITE statement 
  1288.  
  1289.  
  1290. ΓòÉΓòÉΓòÉ <hidden> READ Statement ΓòÉΓòÉΓòÉ
  1291.  
  1292. Description 
  1293.   The READ statement can be used with any INPUT or UPDATE file. It either 
  1294.   transmits a record from the data set to the program variable or sets a 
  1295.   pointer to the record in storage. 
  1296.  
  1297. Syntax 
  1298.  
  1299. ΓöÇΓöÇΓöÇΓöÇREAD FILEΓöÇΓöÇ(ΓöÇΓöÇfileΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1300.  
  1301. ΓöÇΓöÇΓöÇΓö¼ΓöÇINTOΓöÇ(ref)ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1302.     Γöé            Γö£ΓöÇKEYΓöÇΓöÇ(ΓöÇexpressionΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ    Γöé
  1303.     Γöé            Γöé                      ΓööΓöÇNOLOCKΓöÇΓöÿ  Γöé    Γöé
  1304.     Γöé            Γöé                                  Γöé    Γöé
  1305.     Γöé            ΓööΓöÇKEYTOΓöÇΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé
  1306.     Γö£ΓöÇΓöÇSETΓöÇ(pointerΓöÇref)ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1307.     Γöé                    Γö£ΓöÇKEYΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöñ     Γöé
  1308.     Γöé                    ΓööΓöÇKEYTOΓöÇΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ     Γöé
  1309.     Γöé                                                    Γöé                                 Γöé
  1310.     ΓööΓöÇΓöÇIGNOREΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1311. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1312.      ΓööΓöÇEVENTΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1313.  
  1314. Note:   The keywords can appear in any order. A READ statement without an INTO, 
  1315. SET, or IGNORE option is equivalent to a READ with an IGNORE(1).  The option 
  1316. NOLOCK is MVS only. 
  1317.  
  1318.  
  1319. ΓòÉΓòÉΓòÉ <hidden> WRITE Statement ΓòÉΓòÉΓòÉ
  1320.  
  1321. Description 
  1322.   The WRITE statement can be used with any OUTPUT file or DIRECT UPDATE file, 
  1323.   and also with SEQUENTIAL UPDATE files associated with VSAM data sets. Use the 
  1324.   WRITE statement to transmit a record from the program and add it to the data 
  1325.   set.  For unblocked records, transmission can be directly from a variable or 
  1326.   from a buffer.  For blocked records, the WRITE statement places a logical 
  1327.   record into a buffer; only when the blocking of records is complete is there 
  1328.   actual transmission of data to an output device. 
  1329.  
  1330. Syntax 
  1331.  
  1332. ΓöÇΓöÇWRITEΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfileΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇFROMΓöÇΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇ
  1333.  
  1334. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1335.     Γö£ΓöÇΓöÇKEYFROMΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöñ
  1336.     ΓööΓöÇΓöÇKEYTOΓöÇΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1337.  
  1338. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1339.     ΓööΓöÇEVENTΓöÇ(ΓöÇΓöÇevent-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÿ
  1340.  
  1341. Note:   The keywords can appear in any order. 
  1342.  
  1343.  
  1344. ΓòÉΓòÉΓòÉ <hidden> REWRITE Statement ΓòÉΓòÉΓòÉ
  1345.  
  1346. Description 
  1347.   Use the REWRITE statement to replace a record in an UPDATE file. 
  1348.  
  1349.   For SEQUENTIAL UPDATE files, the REWRITE statement specifies that the last 
  1350.   record read from the file is to be rewritten; consequently a record must be 
  1351.   read before it can be rewritten. 
  1352.  
  1353.   For DIRECT UPDATE files, and for KEYED SEQUENTIAL UPDATE files associated 
  1354.   with VSAM data sets, any record can be rewritten whether or not it has first 
  1355.   been read. 
  1356.  
  1357.   You must specify the FROM option for UPDATE files having either the DIRECT 
  1358.   attribute or both the SEQUENTIAL and UNBUFFERED attributes. 
  1359.  
  1360.   A REWRITE statement that does not specify the FROM option has the following 
  1361.   effect: 
  1362.  
  1363.     If the last record was read by a READ statement with the INTO option, 
  1364.      REWRITE without FROM has no effect on the record in the data set. 
  1365.  
  1366.     If the last record was read by a READ statement with the SET option, the 
  1367.      record is updated by whatever assignments were made to the variable 
  1368.      identified by the pointer variable in the SET option. 
  1369.  
  1370. Syntax 
  1371.  
  1372. ΓöÇΓöÇΓöÇΓöÇREWRITEΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfileΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  1373.                                            ΓööΓöÇΓöÇFROMΓöÇΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1374.  
  1375. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1376.       ΓööΓöÇΓöÇKEYΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÿ
  1377.  
  1378. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1379.       ΓööΓöÇEVENTΓöÇΓöÇ(event-reference)ΓöÇΓöÿ
  1380.  
  1381. Note:   The keywords can appear in any order. 
  1382.  
  1383.  
  1384. ΓòÉΓòÉΓòÉ <hidden> LOCATE Statement ΓòÉΓòÉΓòÉ
  1385.  
  1386. Description 
  1387.   Use the LOCATE statement only with an OUTPUT SEQUENTIAL BUFFERED file for 
  1388.   locate mode processing. LOCATE sets a pointer to the location of the next 
  1389.   record. 
  1390.  
  1391. Syntax 
  1392.  
  1393. ΓöÇΓöÇΓöÇΓöÇLOCATEΓöÇΓöÇbased-variableΓöÇΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1394.  
  1395. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1396.       ΓööΓöÇSETΓöÇΓöÇ(ΓöÇΓöÇpointer-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1397.  
  1398. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1399.       ΓööΓöÇKEYFROMΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1400.  
  1401. Note:   The keywords can appear in any order. 
  1402.  
  1403.  
  1404. ΓòÉΓòÉΓòÉ <hidden> DELETE Statement ΓòÉΓòÉΓòÉ
  1405.  
  1406. Description 
  1407.   Use the DELETE statement to delete a record from an UPDATE file. Under MVS, 
  1408.   for a SEQUENTIAL UPDATE file for an INDEXED data set or a VSAM KSDS or RRDS, 
  1409.   if the KEY option is omitted, the record to be deleted is the last record 
  1410.   that was read. Under CMS, for a SEQUENTIAL UPDATE file for a VSAM KSDS, if 
  1411.   the KEY option is omitted, the record to be deleted is the last record that 
  1412.   was read. 
  1413.  
  1414. Syntax 
  1415.  
  1416. ΓöÇΓöÇΓöÇΓöÇDELETEΓöÇΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  1417.  
  1418. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1419.       ΓööΓöÇKEYΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1420.  
  1421. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  1422.       ΓööΓöÇEVENTΓöÇΓöÇ(ΓöÇevent-referenceΓöÇ)ΓöÇΓöÿ
  1423.  
  1424. Note:   The keywords can appear in any order.
  1425.  
  1426.  
  1427. ΓòÉΓòÉΓòÉ <hidden> Options of Data Transmission Statements ΓòÉΓòÉΓòÉ
  1428.  
  1429. Description 
  1430.   Options that are allowed for record-oriented data transmission statements 
  1431.   differ according to the attributes of the file and the characteristics of the 
  1432.   associated data set.  Following is a list of the options for data 
  1433.   transmission statements: 
  1434.  
  1435.     FILE option 
  1436.     INTO option 
  1437.     FROM option 
  1438.     SET option 
  1439.     IGNORE option 
  1440.     KEY option 
  1441.     KEYFROM option 
  1442.     KEYTO option 
  1443.     EVENT option 
  1444.     NOLOCK option 
  1445.  
  1446.  
  1447. ΓòÉΓòÉΓòÉ <hidden> FILE Option ΓòÉΓòÉΓòÉ
  1448.  
  1449. Description 
  1450.   You must use the FILE option in every record-oriented data transmission 
  1451.   statement. 
  1452.  
  1453.   The FILE option specifies the file upon which the operation takes place. 
  1454.   Implicit opening of files will occur if the file specified is not open. 
  1455.  
  1456. Syntax 
  1457.  
  1458. ΓöÇΓöÇΓöÇΓöÇΓöÇFILEΓöÇ(file-reference)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1459.  
  1460.  
  1461. ΓòÉΓòÉΓòÉ <hidden> FROM Option ΓòÉΓòÉΓòÉ
  1462.  
  1463. Description 
  1464.   Use the FROM option to specify the element or aggregate variable from which 
  1465.   the record is written. 
  1466.  
  1467.   You must use the FROM option in the WRITE statement for any OUTPUT or DIRECT 
  1468.   UPDATE file. It can also be used in the REWRITE statement for any UPDATE 
  1469.   file. 
  1470.  
  1471.   If the variable is an aggregate, it must be in connected storage. Certain 
  1472.   uses of unaligned fixed-length bit strings are disallowed.  You must follow 
  1473.   rules for data types. 
  1474.  
  1475.   The FROM variable can be an element string variable of varying length. When 
  1476.   using a WRITE statement with the FROM option, only the current length of a 
  1477.   varying-length string is transmitted to a data set, and a 2-byte prefix 
  1478.   specifying the length can be attached. It is attached only if the 
  1479.   SCALARVARYING option of the ENVIRONMENT attribute is specified for the file. 
  1480.  
  1481.   Records are transmitted as an integral number of bytes. Therefore, if a bit 
  1482.   string (or a structure that starts or ends with a bit string) that is not 
  1483.   aligned on a byte boundary is transmitted, the record will contain bits at 
  1484.   the start or at the end that are not part of the string. 
  1485.  
  1486.   The FROM option can be omitted from a REWRITE statement for SEQUENTIAL 
  1487.   BUFFERED UPDATE files. If the last record was read by a READ statement with 
  1488.   the INTO option, REWRITE without FROM has no effect on the record in the data 
  1489.   set. If the last record was read by a READ statement with the SET option, the 
  1490.   record (updated by whatever assignments were made) is copied back onto the 
  1491.   data set. 
  1492.  
  1493. Examples 
  1494.   Using the FROM option 
  1495.  
  1496. Syntax 
  1497.  
  1498. ΓöÇΓöÇΓöÇΓöÇΓöÇFROMΓöÇ(reference)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1499.  
  1500.  
  1501. ΓòÉΓòÉΓòÉ <hidden> Examples- Using the FROM Option ΓòÉΓòÉΓòÉ
  1502.  
  1503. In the following examples, the statements specify that the value of the 
  1504. variable MAS_REC is written into the file MASTER. 
  1505.  
  1506.  The following WRITE statement specifies a new record in a SEQUENTIAL OUTPUT 
  1507.   file: 
  1508.  
  1509.     WRITE FILE (MASTER) FROM (MAS_REC);
  1510.  
  1511.  The following REWRITE statement specifies that MAS_REC replaces the last 
  1512.   record read from a SEQUENTIAL UPDATE file: 
  1513.  
  1514.     REWRITE FILE (MASTER) FROM (MAS_REC);
  1515.  
  1516.  
  1517. ΓòÉΓòÉΓòÉ <hidden> IGNORE Option ΓòÉΓòÉΓòÉ
  1518.  
  1519. Description 
  1520.   You can use the IGNORE option in a READ statement for any SEQUENTIAL INPUT or 
  1521.   SEQUENTIAL UPDATE file. 
  1522.  
  1523.   The expression in the IGNORE option is evaluated and converted to an integer 
  1524.   value n. If n is greater than zero, n records are ignored. 
  1525.  
  1526.   A subsequent READ statement for the file will access the (n+1)th record. If n 
  1527.   is less than 1, the READ statement has no effect. 
  1528.  
  1529.   The IGNORE option cannot be used with a TRANSIENT file. 
  1530.  
  1531. Example 
  1532.   The following example specifies that the next three records in the file are 
  1533.   to be ignored: 
  1534.  
  1535.     READ FILE (IN) IGNORE (3);
  1536.  
  1537. Syntax 
  1538.  
  1539. ΓöÇΓöÇΓöÇΓöÇΓöÇIGNOREΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1540.  
  1541.  
  1542. ΓòÉΓòÉΓòÉ <hidden> INTO Option ΓòÉΓòÉΓòÉ
  1543.  
  1544. Description 
  1545.   Use the INTO option to specify an element or aggregate variable into which 
  1546.   the logical record is read. You can use the INTO option in the READ statement 
  1547.   for any INPUT or UPDATE file. 
  1548.  
  1549.   If the variable is an aggregate, it must be in connected storage. You must 
  1550.   follow rules for data types. 
  1551.  
  1552.   The INTO variable can be an element string variable of varying length. If the 
  1553.   SCALARVARYING option of the ENVIRONMENT attribute was specified for the file, 
  1554.   each record contains a 2-byte prefix that specifies the length of the string 
  1555.   data. 
  1556.  
  1557.   If SCALARVARYING was not declared then, on input, the string length is 
  1558.   calculated from the record length and attached as a 2-byte prefix. For 
  1559.   varying-length bit strings, this calculation rounds up the length to a 
  1560.   multiple of 8 and therefore the calculated length might be greater than the 
  1561.   maximum declared length. 
  1562.  
  1563. Example 
  1564.   The following example specifies that the next sequential record is read into 
  1565.   the variable RECORD_1: 
  1566.  
  1567.     READ FILE (DETAIL) INTO (RECORD_1);
  1568.  
  1569. Syntax 
  1570.  
  1571. ΓöÇΓöÇΓöÇΓöÇΓöÇINTOΓöÇ(reference)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1572.  
  1573.  
  1574. ΓòÉΓòÉΓòÉ <hidden> KEY Option ΓòÉΓòÉΓòÉ
  1575.  
  1576. Description 
  1577.   Use the KEY option to specify a character or graphic key that identifies a 
  1578.   record. You can use the KEY option in a READ statement for an INPUT or UPDATE 
  1579.   file, or in a REWRITE statement for a DIRECT UPDATE file. 
  1580.  
  1581.   The KEY option applies only to KEYED files associated with data sets of 
  1582.   INDEXED, REGIONAL, or VSAM organization. The KEY option is required if the 
  1583.   file has the DIRECT attribute.  The KEY option can also appear for a file 
  1584.   having INDEXED or VSAM organization and the SEQUENTIAL and KEYED attributes. 
  1585.  
  1586.   The expression in the KEY option is evaluated and, if not character or 
  1587.   graphic, is converted to a character value that represents a key. It is this 
  1588.   character or graphic value that determines which record is read. 
  1589.  
  1590. Example 
  1591.   The following example specifies that the record identified by the character 
  1592.   value of the variable STKEY is read into the variable ITEM: 
  1593.  
  1594.     READ FILE (STOCK) INTO (ITEM) KEY (STKEY);
  1595.  
  1596. Syntax 
  1597.  
  1598. ΓöÇΓöÇΓöÇΓöÇΓöÇKEYΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1599.  
  1600.  
  1601. ΓòÉΓòÉΓòÉ <hidden> KEYFROM Option ΓòÉΓòÉΓòÉ
  1602.  
  1603. Description 
  1604.   The KEYFROM option specifies a character or graphic key that identifies the 
  1605.   record on the data set, or (for TRANSIENT files) the terminal to which the 
  1606.   message or the record is transmitted.  It can be used in a WRITE statement 
  1607.   for a SEQUENTIAL OUPUT or DIRECT UPDATE file or a DIRECT OUTPUT file that has 
  1608.   REGIONAL organization, or in a LOCATE statement.  It can also be used in a 
  1609.   WRITE statement for a KEYED SEQUENTIAL UPDATE file associated with a VSAM 
  1610.   data set. 
  1611.  
  1612.   The KEYFROM option applies only to KEYED files associated with data sets of 
  1613.   INDEXED, REGIONAL, or VSAM organization, or to TRANSIENT files. The 
  1614.   expression is evaluated and, if not character or graphic, is converted to a 
  1615.   character string and is used as the key of the record when it is written. 
  1616.  
  1617.   REGIONAL(1) data sets can be created using the KEYFROM option.  The region 
  1618.   number is specified as the key. 
  1619.  
  1620.   For REGIONAL(2), REGIONAL(3),and INDEXED data sets,  KEYFROM specifies a 
  1621.   recorded key whose length is determined by the KEYLEN subparameter or the 
  1622.   KEYLENGTH option. 
  1623.  
  1624. Example 
  1625.   The following example specifies that the value of LOANREC is written as a 
  1626.   record in the file LOANS, and that the character string value of LOANNO is 
  1627.   used as the key with which it can be retrieved: 
  1628.  
  1629.     WRITE FILE (LOANS) FROM (LOANREC) KEYFROM (LOANNO);
  1630.  
  1631. Syntax 
  1632.  
  1633. ΓöÇΓöÇΓöÇΓöÇΓöÇKEYFROMΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1634.  
  1635.  
  1636. ΓòÉΓòÉΓòÉ <hidden> KEYTO Option ΓòÉΓòÉΓòÉ
  1637.  
  1638. Description 
  1639.   The KEYTO option specifies a character or graphic key that identifies the 
  1640.   record on the data set, or (for TRANSIENT files) the terminal to which the 
  1641.   message or record is transmitted.  The KEYTO option can specify any string 
  1642.   pseudovarible other than STRING.  It cannot specify a variable declared with 
  1643.   a numeric picture specification.  The KEYTO option can be used in a READ 
  1644.   statement for a SEQUENTIAL INPUT, SEQUENTIAL UPDATE, or TRANSIENT INPUT file. 
  1645.  
  1646.   The KEYTO option applies only to KEYED files associated with data sets of 
  1647.   INDEXED, REGIONAL, or VSAM organization, or to TRANSIENT files. 
  1648.  
  1649.   Assignment to the KEYTO variable always follows assignment to the INTO 
  1650.   variable. If an incorrect key specification is detected, the KEY condition is 
  1651.   raised.  For this implementation, the value assigned is as follows: 
  1652.  
  1653.     For REGIONAL(1), the 8-character region number, padded or truncated on the 
  1654.      left to the declared length of the character variable.  If the character 
  1655.      variable is of varying length, any leading zeros in the region number are 
  1656.      truncated and the string length is set to the number of significant 
  1657.      digits.  An all-zero region number is truncated to a single zero. 
  1658.  
  1659.     For REGIONAL(2) and REGIONAL(3), the recorded key without the region 
  1660.      number, padded or truncated on the right to the declared length of the 
  1661.      character variable. 
  1662.  
  1663.     For INDEXED and for key-sequenced VSAM, the recorded key, padded or 
  1664.      truncated on the right to the declared length of the character variable. 
  1665.  
  1666.     For entry-sequenced VSAM data sets (ESDS), a 4-character relative-byte 
  1667.      address (RBA), padded or truncated on the right to the declared length of 
  1668.      the character variable. 
  1669.  
  1670.     For relative-record VSAM data sets (RRDS), an 8-character relative-record 
  1671.      number with leading zeros suppressed, truncated or padded on the left to 
  1672.      the declared length of the character variable. 
  1673.  
  1674.   The KEY condition is not raised for this type of padding or truncation. 
  1675.  
  1676.   The KEYTO option can also be used in a WRITE statement for a SEQUENTIAL 
  1677.   OUTPUT or SEQUENTIAL UPDATE file associated with  a VSAM entry-sequenced or 
  1678.   relative- record data set. 
  1679.  
  1680. Example 
  1681.   The following example specifies that the next record in the file DETAIL is 
  1682.   read into the variable INVTRY, and that the key of the record is read into 
  1683.   the variable KEYFLD: 
  1684.  
  1685.     READ FILE (DETAIL) INTO (INVTRY) KEYTO (KEYFLD);
  1686.  
  1687. Syntax 
  1688.  
  1689. ΓöÇΓöÇΓöÇΓöÇΓöÇKEYTOΓöÇ(reference)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1690.  
  1691.  
  1692. ΓòÉΓòÉΓòÉ <hidden> SET Option ΓòÉΓòÉΓòÉ
  1693.  
  1694. Description 
  1695.   You can use the SET option with a READ statement or a LOCATE statement. For 
  1696.   the READ statement, it specifies a pointer variable that is set to point to 
  1697.   the record read. For the LOCATE statement, it specifies a pointer variable 
  1698.   that is set to point to the next record for output. 
  1699.  
  1700.   If the SET option is omitted for the LOCATE statement, the pointer declared 
  1701.   with the record variable is set. 
  1702.  
  1703.   If an element string variable of varying-length is transmitted, the 
  1704.   SCALARVARYING option must be specified for the file. 
  1705.  
  1706. Example 
  1707.   The following example specifies that the value of the pointer variable P is 
  1708.   set to the location of the next sequential record: 
  1709.  
  1710.     READ FILE (X) SET (P);
  1711.  
  1712. Syntax 
  1713.  
  1714. ΓöÇΓöÇΓöÇΓöÇΓöÇSETΓöÇ(pointer-reference)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1715.  
  1716.  
  1717. ΓòÉΓòÉΓòÉ <hidden> EVENT Option ΓòÉΓòÉΓòÉ
  1718.  
  1719. Description 
  1720.   The EVENT option specifies that the input or output operation takes place 
  1721.   asynchronously (that is, while other processing continues) and that no I/O 
  1722.   conditions (except for UNDEFINEDFILE) are raised until a WAIT statement, 
  1723.   specifying the same event variable is executed. 
  1724.  
  1725.   The EVENT option can appear in any READ, WRITE, REWRITE, or DELETE statement 
  1726.   for an UNBUFFERED file with CONSECUTIVE or REGIONAL organization or for any 
  1727.   DIRECT file.  The EVENT option cannot be used with a TRANSIENT file. 
  1728.  
  1729.   A name declared implicitly that appears in an EVENT option is given the EVENT 
  1730.   attribute. 
  1731.  
  1732.   When any expressions in the options of the statement have been evaluated, the 
  1733.   input operation is started, and the event variable is made active (that is, 
  1734.   the variable cannot be associated with another event) and is given the 
  1735.   completion value '0'B and zero status value, provided that the UNDEFINEDFILE 
  1736.   condition is not raised by an implicit file opening.  The sequence of these 
  1737.   two assignments is uninterruptible and is completed before any transmission 
  1738.   is initiated but after any action associated with an implicit opening is 
  1739.   completed. 
  1740.  
  1741.   As soon as this has happened, the statements following are executed.  Any 
  1742.   RECORD, TRANSMIT, KEY, or ENDFILE condition is not raised until control 
  1743.   reaches the WAIT statement. The event variable remains active and retains its 
  1744.   '0'B completion value until control reaches a WAIT statement specifying that 
  1745.   event variable, or until termination of the application program. 
  1746.  
  1747.   When the WAIT statement is executed, any of the following can occur: 
  1748.  
  1749.     If the input/output operation is not complete, and if none of the four 
  1750.      conditions is raised, execution of further statements is suspended until 
  1751.      the operation is complete. 
  1752.  
  1753.     If the input/output operation is executed successfully and none of the 
  1754.      conditions ENDFILE, TRANSMIT, KEY, or RECORD is raised as a result of the 
  1755.      operation, the event variable is made inactive (that is, it can be 
  1756.      associated with another event). 
  1757.  
  1758.     Any ENDFILE, TRANSMIT, KEY, or RECORD conditions for the input/output 
  1759.      operation are raised when the WAIT is encountered.  At such a time, the 
  1760.      event variable is set to have a status value of 1 and the corresponding 
  1761.      ON-units (if any) are entered in the order in which the conditions were 
  1762.      raised.  After a return from the final ON-unit, or if one of the ON-units 
  1763.      is terminated by a GO TO statement (abnormal return), the event variable 
  1764.      is given the completion value '1'B and is made inactive. 
  1765.  
  1766.   If some of the event variables in the WAIT list are associated with 
  1767.   input/output operations and have not been set complete before the WAIT is 
  1768.   terminated (either because enough events have been completed or due to an 
  1769.   abnormal return), these incomplete events are not set complete until the 
  1770.   execution of another WAIT referring to these events. 
  1771.  
  1772.   Note:   If the statement causes an implicit file opening that results in the 
  1773.           raising of the UNDEFINEDFILE condition, the ON-unit associated with 
  1774.           this condition is entered immediately and the event variable remains 
  1775.           inactive and retains the same value it had when the statement was 
  1776.           encountered.  If the ON-unit does not correct the condition, then, 
  1777.           upon normal return from the ON-unit the ERROR condition is raised. 
  1778.           If the condition is corrected in the ON-unit, that is, if the file is 
  1779.           opened successfully, upon normal return from the ON-unit, the event 
  1780.           variable is set to '0'B, it is made active, and execution of the 
  1781.           statement continues.
  1782.  
  1783.   Upon normal return from any ON-units entered, processing continues with the 
  1784.   next statement following the WAIT statement. 
  1785.  
  1786.   For consecutive and regional sequential files, only one outstanding 
  1787.   input/output operation is allowed for a file unless a higher number is 
  1788.   specified in the NCP option of the ENVIRONMENT attribute or DCB subparameter. 
  1789.   The ERROR condition is raised if an attempt is made to initiate an 
  1790.   input/output operation on a file in excess of the number allowed, while a 
  1791.   previous input/output operation has not been waited for. 
  1792.  
  1793.   Under CMS, the EVENT option can be used only if the NCP parameter is included 
  1794.   in the ENVIRONMENT option of the file. 
  1795.  
  1796. Example 
  1797.   The following example shows how to use the EVENT option: 
  1798.  
  1799.     READ FILE (MASTER) INTO (REC_VAR)
  1800.          EVENT (RECORD_1);
  1801.             .
  1802.             .
  1803.             .
  1804.     WAIT (RECORD_1);
  1805.  
  1806.  
  1807. ΓòÉΓòÉΓòÉ <hidden> NOLOCK Option ΓòÉΓòÉΓòÉ
  1808.  
  1809. Decsription 
  1810.   The NOLOCK option can be used in a READ statement that refers to an EXCLUSIVE 
  1811.   file.  It specifies that the record accessed by the READ statement will not 
  1812.   be locked between completion of a READ statement and commencement of the 
  1813.   corresponding REWRITE. The record will continue to be available to other MVS 
  1814.   tasks, in addition to that which issued the READ statement. 
  1815.  
  1816.   Note:   The NOLOCK option is for MVS only.
  1817.  
  1818.  
  1819. ΓòÉΓòÉΓòÉ <hidden> Using Stream-Oriented Data Transmission ΓòÉΓòÉΓòÉ
  1820.  
  1821. Description 
  1822.   Stream-oriented data transmission treats a data set as a continuous stream of 
  1823.   data values in character, graphic, or mixed data form. Within a program, 
  1824.   block and record boundaries are ignored. However, a data set consists of a 
  1825.   series of lines of data, and each data set created or accessed by 
  1826.   stream-oriented data transmission has a line size associated with it. In 
  1827.   general, a line is equivalent to a record in the data set; however, the line 
  1828.   size does not necessarily equal the record size. 
  1829.  
  1830.   Stream-oriented data transmission uses only one input statement (GET) and one 
  1831.   output statement (PUT). 
  1832.  
  1833.   Stream-oriented data transmission can be list-directed, data-directed, or 
  1834.   edit-directed: 
  1835.  
  1836.    List-directed data transmission 
  1837.      transmits the values of data list items without your having to specify the 
  1838.      format of the values in the stream. The values are recorded externally as 
  1839.      a list of constants, separated by blanks or commas. 
  1840.  
  1841.    Data-directed data transmission 
  1842.      transmits the names of the data list items, as well as their values, 
  1843.      without your having to specify the format of the values in the stream. 
  1844.  
  1845.    Edit-directed data transmission 
  1846.      transmits the values of data list items and requires that you specify the 
  1847.      format of the values in the stream. The values are recorded externally as 
  1848.      a string of characters or graphics to be treated character by character 
  1849.      (or graphic by graphic) according to a format list. 
  1850.  
  1851. Related Information 
  1852.  
  1853.     Data transmission statements 
  1854.     Data-directed data specification 
  1855.     Edit-directed data specification 
  1856.     List-directed data specification 
  1857.  
  1858.  
  1859. ΓòÉΓòÉΓòÉ <hidden> Data Transmission Statements ΓòÉΓòÉΓòÉ
  1860.  
  1861. Description 
  1862.   Stream-oriented data transmission uses only one input statement (GET) and one 
  1863.   output statement (PUT).  The FORMAT statement specifies the format of data 
  1864.   values being transmitted and is used only for edit-directed data 
  1865.   transmission. You can use the COPY option to copy data into the output 
  1866.   stream. 
  1867.  
  1868.   The variables or pseudovariables to which data values are assigned, and the 
  1869.   expressions from which they are transmitted, are generally specified with a 
  1870.   data-specification options with each GET or PUT statement. The statements can 
  1871.   also include options that specify the origin or destination of the data 
  1872.   values or indicate where they appear in the stream relative to the preceding 
  1873.   data values. 
  1874.  
  1875.   Only sequential files can be processed with the GET and PUT statements. 
  1876.  
  1877. Options of data transmission statements 
  1878.   Options that you can specify on stream-oriented data transmission statements 
  1879.   (GET and PUT statements) are the following: 
  1880.  
  1881.     FILE Option 
  1882.     COPY Option 
  1883.     SKIP Option 
  1884.     PAGE Option 
  1885.     LINE Option 
  1886.     STRING Option 
  1887.  
  1888. Related Information 
  1889.  
  1890.     GET statement 
  1891.     PUT statement 
  1892.  
  1893.  
  1894. ΓòÉΓòÉΓòÉ <hidden> GET Statement ΓòÉΓòÉΓòÉ
  1895.  
  1896. Description 
  1897.   The GET statement is a STREAM input data transmission statement that can: 
  1898.  
  1899.     Assign data values from a data set to one or more variables. 
  1900.     Assign data values from a string to one or more variables. 
  1901.  
  1902. Syntax 
  1903.  
  1904.   Note:   The keywords can appear in any order. The data specification must 
  1905.   appear unless the SKIP option is specified. 
  1906.  
  1907.     The syntax of the GET statement for a stream input file is: 
  1908.  
  1909.           ΓöÇΓöÇΓöÇΓöÇGETΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  1910.                      ΓööΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfileΓöÇreferenceΓöÇ)ΓöÇΓöÇΓöÿ   ΓööΓöÇdataΓöÇspecificationΓöÇΓöÇΓöÿ
  1911.  
  1912.           ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1913.                 ΓööΓöÇCOPYΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1914.  
  1915.           ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1916.                 ΓööΓöÇSKIPΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  1917.                         ΓööΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1918.  
  1919.     The syntax of the GET statement for transmission from a string is: 
  1920.  
  1921.           ΓöÇΓöÇΓöÇΓöÇGETΓöÇSTRINGΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇdata-specificationΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  1922.  
  1923.   If neither the FILE nor the STRING option appears in a GET statement, the 
  1924.   input file SYSIN is the default. 
  1925.  
  1926.  
  1927. ΓòÉΓòÉΓòÉ <hidden> PUT Statement ΓòÉΓòÉΓòÉ
  1928.  
  1929. Description 
  1930.   The PUT statement is a STREAM output data transmission statement that you use 
  1931.   to transmit values to a stream output file, or to assign values to a 
  1932.   character variable. 
  1933.  
  1934. Syntax 
  1935.  
  1936.     The syntax of the PUT statement for a stream output file is: 
  1937.  
  1938.  
  1939.           ΓöÇΓöÇΓöÇΓöÇPUTΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  1940.                      ΓööΓöÇFILEΓöÇΓöÇ(ΓöÇΓöÇfileΓöÇreferenceΓöÇ)ΓöÇΓöÇΓöÿ   ΓööΓöÇdataΓöÇspecificationΓöÇΓöÇΓöÿ
  1941.  
  1942.           ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1943.                 Γö£ΓöÇPAGEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ
  1944.                 Γöé       ΓööΓöÇLINEΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  1945.                 Γö£ΓöÇSKIPΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1946.                 Γöé       ΓööΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÿ        Γöé
  1947.                 ΓööΓöÇLINEΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1948.  
  1949.     The syntax of the PUT statement for transmission to a character string is: 
  1950.  
  1951.  
  1952.           ΓöÇΓöÇΓöÇΓöÇPUT STRINGΓöÇΓöÇ(ΓöÇΓöÇcharacter-referenceΓöÇΓöÇ)ΓöÇΓöÇdata-specificationΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇ
  1953.  
  1954.   Note:   The keywords can appear in any order. The data specification can be 
  1955.   omitted only if one of the control options (PAGE, SKIP, or LINE) appears. If 
  1956.   neither the FILE option nor the STRING option appears in a PUT statement, the 
  1957.   output file SYSPRINT is the default. 
  1958.  
  1959.  
  1960. ΓòÉΓòÉΓòÉ <hidden> Data Specification Options ΓòÉΓòÉΓòÉ
  1961.  
  1962. Description 
  1963.   Use data specifications in GET and PUT statements to specify the data to be 
  1964.   transmitted. 
  1965.  
  1966.   If a GET or PUT statement includes a data list that is not preceded by one of 
  1967.   the keywords LIST, DATA, or EDIT, LIST is the default. In such a statement, 
  1968.   the data list must immediately follow the GET or PUT keyword; any options 
  1969.   required must be specified after the data list. 
  1970.  
  1971. Syntax 
  1972.  
  1973. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ(ΓöÇΓöÇdataΓöÇlistΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  1974.       Γö£ΓöÇΓöÇLISTΓöÇΓöÇΓöÿ                                           Γöé
  1975.       Γö£ΓöÇΓöÇDATAΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1976.       Γöé        Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé            Γöé
  1977.       Γöé        Γöé                       Γöé     Γöé            Γöé
  1978.       Γöé        ΓööΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöÇdataΓöÇlistΓöÇitemΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ            Γöé
  1979.       Γöé        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  1980.       Γöé                                                Γöé  Γöé
  1981.       ΓööΓöÇΓöÇEDITΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇdataΓöÇlistΓöÇΓöÇ)ΓöÇΓöÇ(ΓöÇΓöÇformatΓöÇlistΓöÇΓöÇ)ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  1982.  
  1983. where data-list is:
  1984.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1985.                            Γöé
  1986. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇdataΓöÇlistΓöÇitemΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1987.       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  1988.       Γöé                                    Γöé  Γöé
  1989.       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇdataΓöÇlistΓöÇitem TypeΓöÇ3ΓöÇDOΓöÇΓöÇ)ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  1990.  
  1991. where format-list is:
  1992.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1993.                                 Γöé
  1994. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇformat-item ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1995.        Γö£ΓöÇn-format-item ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1996.        ΓööΓöÇnΓöÇ(ΓöÇΓöÇformat-listΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  1997.  
  1998.  
  1999. ΓòÉΓòÉΓòÉ <hidden> data-list-item ΓòÉΓòÉΓòÉ
  2000.  
  2001. data-list-item 
  2002.   On input, a data-list-item for edit-directed and list-directed transmission 
  2003.   can be one of the following: an element, array, or structure variable or a 
  2004.   pseudovariable other than STRING. For a data-directed data specification, a 
  2005.   data-list-item can be an element, array, or structure variable. None of the 
  2006.   names in a data-directed data list can be subscripted, or locator-qualified 
  2007.   or ISUB-defined. However, qualified (that is, structure-member) or 
  2008.   simple-defined, or string-overlay-defined names are allowed. 
  2009.  
  2010.   On output, a data-list-item for edit-directed and list-directed data 
  2011.   specifications can be an element expression, an array expression or a 
  2012.   structure expression. For a data-directed data specification, a 
  2013.   data-list-item can be an element, array, or structure variable. It must not 
  2014.   be locator-qualified or ISUB-defined. It can be qualified (that is, a member 
  2015.   of a structure) or simple-defined, or string-overlay-defined. 
  2016.  
  2017.   The data types of a data-list-item can be any problem data. 
  2018.  
  2019.   For list- and data-directed transmission of DBCS data or mixed data, the 
  2020.   GRAPHIC option of the ENVIRONMENT attribute must be specified at 
  2021.   compile-time. 
  2022.  
  2023.   A data-list that specifies program-control data can only be used in PUT DATA 
  2024.   statements that are processed at compile-time.  In this case, the name of the 
  2025.   variable is transmitted, but not its value. 
  2026.  
  2027.   An array or structure variable in a data list is equivalent to n items in the 
  2028.   data list, where n is the number of element items in the array or structure. 
  2029.   For edit-directed transmission, each element item is associated with a 
  2030.   separate use of a data format item. 
  2031.  
  2032. Related Information 
  2033.  
  2034.     Transmission of Data-List-Items 
  2035.  
  2036.  
  2037. ΓòÉΓòÉΓòÉ <hidden> Data-List-Item Type-3-Do ΓòÉΓòÉΓòÉ
  2038.  
  2039. Description 
  2040.   When the last repetitive-specification is completed, processing continues 
  2041.   with the next data list item. 
  2042.  
  2043.   Each repetitive-specification must be enclosed in parentheses, as shown in 
  2044.   the syntax diagram. If a data specification contains only a 
  2045.   repetitive-specification, two sets of outer parentheses are required, since 
  2046.   the data list is enclosed in parentheses and the repetitive-specification 
  2047.   must have a separate set. 
  2048.  
  2049. Examples 
  2050.   When repetitive-specifications are nested, the rightmost DO is at the outer 
  2051.   level of nesting. For example: 
  2052.  
  2053.     GET LIST (((A(I,J)
  2054.          DO I = 1 TO 2)
  2055.          DO J = 3 TO 4));
  2056.  
  2057.   There are three sets of parentheses, in addition to the set used to delimit 
  2058.   the subscripts. The outermost set is the set required by the data 
  2059.   specification. The next set is that required by the outer 
  2060.   repetitive-specification. The third set of parentheses is required by the 
  2061.   inner repetitive-specification. 
  2062.  
  2063.   This statement is equivalent in function to the following nested do-groups: 
  2064.  
  2065.     DO J = 3 TO 4;
  2066.          DO I = 1 TO 2;
  2067.          GET LIST (A (I,J));
  2068.          END;
  2069.     END;
  2070.  
  2071.   It assigns values to the elements of the array A in the following order: 
  2072.  
  2073.     A(1,3), A(2,3), A(1,4), A(2,4)
  2074.  
  2075.  
  2076. ΓòÉΓòÉΓòÉ <hidden> Transmission of Data-List-Items ΓòÉΓòÉΓòÉ
  2077.  
  2078. Description 
  2079.   If a data-list-item is of complex mode, the real part is transmitted before 
  2080.   the imaginary part. 
  2081.  
  2082.   If a data-list-item is an array expression, the elements of the array are 
  2083.   transmitted in row-major order; that is, with the rightmost subscript of the 
  2084.   array varying most frequently. 
  2085.  
  2086.   If a data-list-item is a structure expression, the elements of the structure 
  2087.   are transmitted in the order specified in the structure declaration. 
  2088.  
  2089. Examples 
  2090.   How data-list-items are transmitted 
  2091.  
  2092.  
  2093. ΓòÉΓòÉΓòÉ <hidden> Examples- How Data-List-Items Are Transmitted ΓòÉΓòÉΓòÉ
  2094.  
  2095. The statements: 
  2096.  
  2097. DECLARE 1 A (10), 2 B, 2 C;
  2098. PUT FILE(X) LIST(A);
  2099. result in the output being ordered as follows: 
  2100.  
  2101. A.B(1) A.C(1) A.B(2) A.C(2) A.B(3)
  2102.     A.C(3)...etc.
  2103.  
  2104. If, however, the declaration is: 
  2105.  
  2106. DECLARE 1 A, 2 B(10), 2 C(10);
  2107. the same PUT statement results in the output ordered as follows: 
  2108.  
  2109. A.B(1) A.B(2) A.B(3)...A.B(10)
  2110. A.C(1) A.C(2) A.C(3)...A.C(10)
  2111.  
  2112. If, within a data list used in an input statement for list-directed or 
  2113. edit-directed transmission, a variable is assigned a value, this new value is 
  2114. used if the variable appears in a later reference in the data list. For 
  2115. example: 
  2116.  
  2117. GET LIST (N,(X(I) DO I=1 TO N),J,K,
  2118.      SUBSTR (NAME, J,K));
  2119.  
  2120. When this statement is executed, values are transmitted and assigned in the 
  2121. following order: 
  2122.  
  2123.  1. A new value is assigned to N. 
  2124.  
  2125.  2. Elements are assigned to the array X as specified in the 
  2126.     repetitive-specification in the order X(1),X(2),...X(N), with the new value 
  2127.     of N specifying the number of assigned items. 
  2128.  
  2129.  3. A new value is assigned to J. 
  2130.  
  2131.  4. A new value is assigned to K. 
  2132.  
  2133.  5. A substring of length K is assigned to the string variable NAME, beginning 
  2134.     at the Jth character. 
  2135.  
  2136.  
  2137. ΓòÉΓòÉΓòÉ <hidden> COPY Option ΓòÉΓòÉΓòÉ
  2138.  
  2139. Description 
  2140.   Use the COPY option to specify that the source data stream will be written on 
  2141.   the specified STREAM OUTPUT file without alteration. If you do not provide a 
  2142.   file reference the default is the output file SYSPRINT. Each new record in 
  2143.   the input stream starts a new record on the COPY file. 
  2144.  
  2145.   If a condition is raised during the execution of a GET statement with a COPY 
  2146.   option and an ON-unit is entered in which another GET statement is executed 
  2147.   for the same file, and if control is returned from the ON-unit to the first 
  2148.   GET statement, that statement executes as if no COPY option was specified. 
  2149.  
  2150.   If, in the ON-unit, a PUT statement is executed for the file associated with 
  2151.   the COPY option, the position of the data transmitted might not immediately 
  2152.   follow the most recently-transmitted COPY data item. 
  2153.  
  2154.   Note:   If the COPY option file is not open, the file is implicitly opened 
  2155.           for stream output transmission.
  2156.  
  2157. Example 
  2158.   The following statement: 
  2159.  
  2160.     GET FILE(SYSIN) DATA(A,B,C) COPY(DPL);
  2161.  
  2162.   only transmits the values assigned to A, B, and C in the input stream to the 
  2163.   variables with these names, but also writes them exactly as they appear in 
  2164.   the input stream, on the file DPL. If they are written by default on the 
  2165.   SYSPRINT file, they appear in data-directed format. Data values that are 
  2166.   skipped on input, and not transmitted to internal variables, copy intact into 
  2167.   the output stream. 
  2168.  
  2169.   Syntax 
  2170.  
  2171.     ΓöÇΓöÇΓöÇΓöÇΓöÇCOPYΓöÇ(file-reference)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2172.  
  2173.  
  2174. ΓòÉΓòÉΓòÉ <hidden> FILE Option ΓòÉΓòÉΓòÉ
  2175.  
  2176. Description 
  2177.   Use the FILE option to specify the file upon which an operation will take 
  2178.   place. It must be a STREAM file. 
  2179.  
  2180.   If neither the FILE option nor the STRING option appears in a GET statement, 
  2181.   the input file SYSIN is the default; if neither option appears in a PUT 
  2182.   statement, the output file SYSPRINT is the default. 
  2183.  
  2184. Related Information 
  2185.   Declaring files 
  2186.  
  2187.  
  2188. ΓòÉΓòÉΓòÉ <hidden> LINE Option ΓòÉΓòÉΓòÉ
  2189.  
  2190. Description 
  2191.   You can only specify the LINE option for output PRINT files. The LINE option 
  2192.   defines a new current line for the data set. 
  2193.  
  2194.   The expression is evaluated and converted to an integer value, n. The new 
  2195.   current line is the nth line of the current page. If at least n lines have 
  2196.   already been written on the current page or if n exceeds the limits set by 
  2197.   the PAGESIZE option of the OPEN statement, the ENDPAGE condition is raised. 
  2198.  
  2199.   If n is less than or equal to zero, a value of 1 is used. If n specifies the 
  2200.   current line, ENDPAGE is raised except when the file is positioned on column 
  2201.   1. In this case, the effect is as for a SKIP(0) option. 
  2202.  
  2203.   For displays at a terminal in interactive mode, the LINE option skips three 
  2204.   lines. 
  2205.  
  2206. Example 
  2207.   The LINE option takes effect before the transmission of any values defined by 
  2208.   the data specification (if any). If both the PAGE option and the LINE option 
  2209.   appear in the same statement, the PAGE option is applied first. For example: 
  2210.  
  2211.     PUT FILE(LIST) DATA(P,Q,R) LINE(34) PAGE;
  2212.  
  2213.   prints the values of the variables P, Q, and R in data-directed format on a 
  2214.   new page, commencing at line 34 
  2215.  
  2216.   Syntax 
  2217.  
  2218.     ΓöÇΓöÇΓöÇΓöÇLINEΓöÇΓöÇΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2219.  
  2220.  
  2221. ΓòÉΓòÉΓòÉ <hidden> PAGE Option ΓòÉΓòÉΓòÉ
  2222.  
  2223. Description 
  2224.   You can specify the PAGE option only for output PRINT files. The PAGE option 
  2225.   defines a new current page within the data set. If PAGE and LINE appear in 
  2226.   the same PUT statement, the PAGE option is applied first. The PAGE option 
  2227.   takes effect before the transmission of any values defined by the data 
  2228.   specification (if any). 
  2229.  
  2230.   The page remains current until the execution of a PUT statement with the PAGE 
  2231.   option, until a PAGE format item is encountered, or until the ENDPAGE 
  2232.   condition is raised, resulting in the definition of a new page. A new current 
  2233.   page implies line one. 
  2234.  
  2235.   For displays at a terminal in interactive mode, the PAGE option skips three 
  2236.   lines. 
  2237.  
  2238.   Syntax 
  2239.  
  2240.     ΓöÇΓöÇΓöÇPAGEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2241.  
  2242.  
  2243. ΓòÉΓòÉΓòÉ <hidden> SKIP Option ΓòÉΓòÉΓòÉ
  2244.  
  2245. Description 
  2246.   The SKIP option specifies a new current line (or record) within the data set. 
  2247.   The expression is evaluated and converted to an integer value, n. The data 
  2248.   set is positioned to the start of the nth line (record) relative to the 
  2249.   current line (record). If an expression is not specified, the default is 
  2250.   SKIP(1). 
  2251.  
  2252.   For output non-PRINT files and input files, if the expression in the SKIP 
  2253.   option is less than or equal to zero, a value of 1 is used. For output PRINT 
  2254.   files, if n is less than or equal to zero, the positioning is to the start of 
  2255.   the current line. 
  2256.  
  2257.   If fewer than n lines remain on the current page when a SKIP(n) is issued, 
  2258.   ENDPAGE is raised. 
  2259.  
  2260.   When printing at a terminal in conversational mode, SKIP(n) with n greater 
  2261.   than 3 is equivalent to SKIP(3). No more than three lines can be skipped. 
  2262.  
  2263. Example 
  2264.   The SKIP option takes effect before the transmission of values defined by the 
  2265.   data specification (if any). For example: 
  2266.  
  2267.     PUT LIST(X,Y,Z) SKIP(3);
  2268.  
  2269.   prints the values of the variables X, Y, and Z on the output file SYSPRINT, 
  2270.   commencing on the third line after the current line. 
  2271.  
  2272. Syntax 
  2273.  
  2274. ΓöÇΓöÇΓöÇΓöÇΓöÇSKIP-(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2275.  
  2276.  
  2277. ΓòÉΓòÉΓòÉ <hidden> STRING Option ΓòÉΓòÉΓòÉ
  2278.  
  2279. Description 
  2280.   Use the STRING option in GET and PUT statements to transmit data between main 
  2281.   storage locations rather than between the main and auxiliary storage 
  2282.   facilities. DBCS data items cannot be used with the STRING option. 
  2283.  
  2284.   The GET statement with the STRING option specifies that data values assigned 
  2285.   to the data list items are obtained from the expression, after conversion to 
  2286.   character string. Each GET operation using this option always begins at the 
  2287.   leftmost character position of the string. If the number of characters in 
  2288.   this string is less than the total number of characters specified by the data 
  2289.   specification, the ERROR condition is raised. 
  2290.  
  2291.   In the STRING option of a PUT statement, the character-reference cannot be 
  2292.   the STRING pseudovariable. 
  2293.  
  2294.   The PUT statement with the STRING option specifies that values of the data 
  2295.   list items are to be assigned to the specified character variable or 
  2296.   pseudovariable. The PUT operation begins assigning values at the leftmost 
  2297.   character position of the string, after appropriate conversions are 
  2298.   performed. Blanks and delimiters are inserted as usual. If the string is not 
  2299.   long enough to accommodate the data, the ERROR condition is raised. 
  2300.  
  2301.   The NAME condition is not raised for a GET DATA statement with the STRING 
  2302.   option. Instead, the ERROR condition is raised for situations that raise the 
  2303.   NAME condition for a GET DATA statement with the FILE option. 
  2304.  
  2305.   The STRING option is most useful with edit-directed transmission. The COLUMN 
  2306.   control format option cannot be used with the STRING option. 
  2307.  
  2308. Examples 
  2309.   Using the STRING option 
  2310.  
  2311. Syntax 
  2312.  
  2313.  The syntax for GET with the STRING option is: 
  2314.  
  2315.     ΓöÇΓöÇΓöÇΓöÇΓöÇGETΓöÇSTRINGΓöÇ(expression)ΓöÇΓöÇdata-specificationΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2316.  
  2317.  The syntax for PUT with the STRING option is: 
  2318.  
  2319.     ΓöÇΓöÇΓöÇΓöÇΓöÇPUTΓöÇSTRINGΓöÇ(character-reference)ΓöÇΓöÇdata-specificationΓöÇΓöÇΓöÇΓöÇΓöÇ
  2320.  
  2321.  
  2322. ΓòÉΓòÉΓòÉ <hidden> Examples- Using the STRING Option ΓòÉΓòÉΓòÉ
  2323.  
  2324. The STRING option allows you to perform data gathering or scattering operations 
  2325. with a single statement, and it allows stream-oriented processing of character 
  2326. strings that are transmitted by record-oriented statements. For example: 
  2327.  
  2328. READ FILE (INPUTR) INTO (TEMP);
  2329. GET STRING(TEMP) EDIT (CODE) (F(1));
  2330. IF CODE = 1 THEN
  2331.    GET STRING (TEMP) EDIT (X,Y,Z)
  2332.       (X(1), 3 F(10,4));
  2333.  
  2334. The READ statement reads a record from the input file INPUTR. The first GET 
  2335. statement uses the STRING option to extract the code from the first byte of the 
  2336. record and assigns it to CODE. If the code is 1, the second GET statement uses 
  2337. the STRING option to assign the values in the record to X,Y, and Z. The second 
  2338. GET statement specifies that the first character in the string TEMP is ignored 
  2339. (the X(1) format item in the format list). The character that is ignored in the 
  2340. second GET statement is the same character that is assigned to CODE by the 
  2341. first GET statement. For example: 
  2342.  
  2343. PUT STRING (RECORD) EDIT
  2344.    (NAME)    (X(1), A(12))
  2345.    (PAY#)    (X(10), A(7))
  2346.    (HOURS*RATE) (X(10), P'$999V.99');
  2347.  
  2348. WRITE FILE (OUTPRT) FROM (RECORD);
  2349.  
  2350. The PUT statement specifies, by the X(1) spacing format item, that the first 
  2351. character assigned to the character variable is to be a single blank, which is 
  2352. the ANS vertical carriage positioning character that specifies a single space 
  2353. before printing. Following that, the values of the variables NAME and PAY# and 
  2354. of the expression HOURS*RATE are assigned. The WRITE statement specifies that 
  2355. record transmission is used to write the record into the file OUTPRT. 
  2356.  
  2357. The variable referenced in the STRING option should not be referenced by name 
  2358. or by alias in the data list. For example: 
  2359.  
  2360. DECLARE S CHAR(8) INIT('YYMMDD');
  2361. PUT STRING (S) EDIT
  2362.     (SUBSTR (S, 3, 2), '/',
  2363.     SUBSTR (S, 5, 2), '/',
  2364.     SUBSTR (S, 1, 2))
  2365.     (A);
  2366.  
  2367. The value of S after the PUT statement is 'MM/bb/MM' and not 'MM/DD/YY' because 
  2368. S is blanked after the first data item is transmitted. The same effect would 
  2369. also be obtained if the data list contained a variable based or defined on the 
  2370. variable specified in the STRING option. 
  2371.  
  2372.  
  2373. ΓòÉΓòÉΓòÉ <hidden> Data-Directed Data Specification ΓòÉΓòÉΓòÉ
  2374.  
  2375. Description 
  2376.    The syntax for a data-directed data specification (in a GET or a PUT 
  2377.   statement) is the following: 
  2378.  
  2379. Description 
  2380.   Data-directed data transmission transmits the names of the data list items, 
  2381.   as well as their values, without your having to specify the format of the 
  2382.   values in the stream. 
  2383.  
  2384. Usage Rules 
  2385.   Consider the following rules when using data-directed data specification: 
  2386.  
  2387.     Names of structure elements in the data-list-item need only have enough 
  2388.      qualification to resolve any ambiguity. Full qualification is not 
  2389.      required. 
  2390.  
  2391.     Omission of the data-list results in a default data-list that contains all 
  2392.      variables, except for ISUB-defined variables, that are known to the block 
  2393.      and any containing blocks. 
  2394.  
  2395.     On output, all items in the data-list are transmitted. If two or more 
  2396.      blocks containing the PUT statement each have declarations of items that 
  2397.      have the same name, all the items are transmitted. The item in the 
  2398.      innermost block appears first. 
  2399.  
  2400.     References to based variables in a data-list for data-directed 
  2401.      input/output cannot be explicitly locator qualified. For example: 
  2402.  
  2403.                 DCL Y BASED(Q), Z BASED;
  2404.                 PUT DATA(Y);
  2405.  
  2406.     The variable Z cannot be transmitted since it must be explicitly qualified 
  2407.      by a locator. 
  2408.  
  2409.   The following restrictions apply to based variables in the data-list: 
  2410.  
  2411.     The variable must not be based on an OFFSET variable. 
  2412.  
  2413.     The variable must not be a member of a structure declared with the REFER 
  2414.      option. 
  2415.  
  2416.     The pointer on which the variable is based must not be based, defined, or 
  2417.      a parameter, and it must not be a member of an array or structure. 
  2418.  
  2419.   Defined variables in the data-list must not be defined: 
  2420.  
  2421.     On a controlled variable 
  2422.  
  2423.     On an array with one or more adjustable bounds 
  2424.  
  2425.     With a POSITION attribute that specifies other than a constant 
  2426.  
  2427. Related Information 
  2428.  
  2429.     Data specification options 
  2430.     Specifying data-directed element assignments 
  2431.     GET data-directed 
  2432.     PUT data-directed 
  2433.  
  2434. Syntax 
  2435.  
  2436. ΓöÇΓöÇΓöÇDATAΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2437.            ΓööΓöÇ(ΓöÇdata-listΓöÇ)ΓöÇΓöÿ
  2438.  
  2439.  
  2440. ΓòÉΓòÉΓòÉ <hidden> Specifying Data-Directed Element Assignments ΓòÉΓòÉΓòÉ
  2441.  
  2442. Description 
  2443.   The stream associated with data-directed data transmission is in the form of 
  2444.   a list of element assignments. For problem data, the element assignments have 
  2445.   optionally signed constants, like the variable names and the equal signs, are 
  2446.   in character or graphic form. 
  2447.  
  2448.   The element-variable can be a subscripted name. Subscripts must be 
  2449.   optionally-signed integers. 
  2450.  
  2451.   On input, the element assignments can be separated by either a blank or a 
  2452.   comma. Blanks can surround periods in qualified names, subscripts, subscript 
  2453.   parentheses, and the assignment symbols. On output, the assignments are 
  2454.   separated by a blank. (For PRINT files, items are separated according to 
  2455.   program tab settings.) 
  2456.  
  2457.   Each list-directed data value in the stream has one of the syntaxes described 
  2458.   for list-directed transmission. 
  2459.  
  2460.   The length of the data value in the stream is a function of the attributes 
  2461.   declared for the variable and, since the name is also included, the length of 
  2462.   the fully qualified subscripted name. The length for output items converted 
  2463.   from coded arithmetic data, numeric character data, and bit-string data is 
  2464.   the same as that for list-directed output data, and is governed by the rules 
  2465.   for data conversion to character type. 
  2466.  
  2467.   Qualified names in the input stream must be fully qualified. The name must 
  2468.   not contain more than 256 characters. 
  2469.  
  2470.   Locator qualifiers cannot appear in the stream. The locator qualifier 
  2471.   declared with the based variable is used to establish the generation. Based 
  2472.   variables that are not declared with a locator qualifier cannot be 
  2473.   transmitted. 
  2474.  
  2475.   Interleaved subscripts cannot appear in qualified names in the stream. 
  2476.  
  2477. Examples 
  2478.   Specifying element assignments 
  2479.  
  2480. Syntax 
  2481.  
  2482.       ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2483.       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  2484.                                            Γöé  Γöé
  2485. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇelement-variableΓöÇΓöÇ=ΓöÇΓöÇdata-valueΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  2486.  
  2487.  
  2488. ΓòÉΓòÉΓòÉ <hidden> GET Data-Directed ΓòÉΓòÉΓòÉ
  2489.  
  2490. Description 
  2491.   If you use a data-list, each data-list-item must be an element, array, or 
  2492.   structure variable. Names cannot be subscripted, but qualified names are 
  2493.   allowed in the data-list. All names in the stream should appear in the 
  2494.   data-list; however, the order of the names need not be the same, and the 
  2495.   data-list can include names that do not appear in the stream. 
  2496.  
  2497.   If the data-list contains a name that is not included in the stream, the 
  2498.   value of the named variable remains unchanged. 
  2499.  
  2500.   If the stream contains an unrecognizable element-variable or a name that does 
  2501.   not have a counterpart in the data-list, the NAME condition is raised. 
  2502.  
  2503.   Recognition of a semicolon (not enclosed in quotation marks) or an 
  2504.   end-of-file causes transmission to cease, and thereby determines the number 
  2505.   of element assignments that are actually transmitted by a particular 
  2506.   statement, whether or not a data-list is specified. 
  2507.  
  2508. Examples 
  2509.  
  2510.     Consider the following data-list, where A, B, C, and D are names of 
  2511.      element variables: 
  2512.  
  2513.           DATA (B, A, C, D)
  2514.  
  2515.      This data-list can be associated with the following input data stream: 
  2516.  
  2517.           A= 2.5, B= .0047, D= 125, Z= 'ABC';
  2518.  
  2519.      C appears in the data-list but not in the stream; its value remains 
  2520.      unaltered. Z, which is not in the data-list, raises the NAME condition. 
  2521.  
  2522.     General examples- data-directed transmission 
  2523.  
  2524. Related Information 
  2525.  
  2526.     GET statement syntax 
  2527.     GET data-directed with arrays 
  2528.     GET data-directed with structures 
  2529.  
  2530.  
  2531. ΓòÉΓòÉΓòÉ <hidden> GET Data-Directed with Arrays ΓòÉΓòÉΓòÉ
  2532.  
  2533. Description 
  2534.   If you include the name of an array in the data-list, subscripted references 
  2535.   to that array can appear in the stream although subscripted names cannot 
  2536.   appear in the data-list. The entire array need not appear in the stream; only 
  2537.   those elements that actually appear in the stream will be assigned. If a 
  2538.   subscript is out of range, or is missing, the NAME condition is raised. 
  2539.  
  2540. Example 
  2541.   Consider the following array declaration: 
  2542.  
  2543.     DECLARE X (2,3);
  2544.  
  2545.   Now, consider the following data list and input data stream: 
  2546.  
  2547.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2548.     ΓöéData Specification Γöé Input Data Stream Γöé
  2549.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2550.     ΓöéDATA (X)           Γöé   X(1,1)= 7.95,   Γöé
  2551.     Γöé                   Γöé   X(1,2)= 8085,   Γöé
  2552.     Γöé                   Γöé   X(1,3)= 73;     Γöé
  2553.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2554.  
  2555.   Although the data-list has only the name of the array, the input stream can 
  2556.   contain values for individual elements of the array. In this case, only three 
  2557.   elements are assigned; the remainder of the array is unchanged. 
  2558.  
  2559.  
  2560. ΓòÉΓòÉΓòÉ <hidden> GET Data-Directed with Structures ΓòÉΓòÉΓòÉ
  2561.  
  2562. Description 
  2563.   If you include the names of structures, minor structures, or structure 
  2564.   elements in the data list, fully qualified names must appear in the stream, 
  2565.   although full qualification is not required in the data-list. 
  2566.  
  2567. Example 
  2568.   Consider the following declaration: 
  2569.  
  2570.     DCL 1 IN, 2 PARTNO, 2 DESCRP,
  2571.         2 PRICE, 3 RETAIL, 3 WHSL;
  2572.  
  2573.   If you would like to read a value for IN.PRICE.RETAIL, the input data stream 
  2574.   must have the following form: 
  2575.  
  2576.     IN.PRICE.RETAIL=1.23;
  2577.  
  2578.   The data specification can be any of: 
  2579.  
  2580.     DATA(IN)
  2581.     DATA(PRICE)
  2582.     DATA(IN.PRICE)
  2583.     DATA(RETAIL)
  2584.     DATA(PRICE.RETAIL)
  2585.     DATA(IN.RETAIL)
  2586.     DATA(IN.PRICE.RETAIL)
  2587.  
  2588.  
  2589. ΓòÉΓòÉΓòÉ <hidden> General Examples- Data-Directed Transmission ΓòÉΓòÉΓòÉ
  2590.  
  2591. Consider the following examples of data-directed transmission. 
  2592.  
  2593.  The following example shows data-directed transmission (both input and 
  2594.   output): 
  2595.  
  2596.     DECLARE (A(6), B(7)) FIXED;
  2597.     GET FILE (X) DATA (B);
  2598.     DO I  = 1 TO 6;
  2599.          A (I) = B (I+1) + B (I);
  2600.     END;
  2601.     PUT FILE (Y) DATA (A);
  2602.  
  2603.   Input Stream: 
  2604.  
  2605.     B(1)=1, B(2)=2, B(3)=3,
  2606.     B(4)=1, B(5)=2, B(6)=3, B(7)=4;
  2607.  
  2608.   Output Stream: 
  2609.  
  2610.     A(1)= 3 A(2)= 5 A(3)= 4 A(4)= 3
  2611.     A(5)= 5 A(6)= 7;
  2612.  
  2613.  In the following example: 
  2614.  
  2615.     DCL 1 A, 2 B FIXED, 2 C, 3 D FIXED;
  2616.     A.B = 2;
  2617.     A.D = 17;
  2618.     PUT DATA (A);
  2619.  
  2620.   the data fields in the output stream would be as follows: 
  2621.  
  2622.     A.B= 2 A.C.D= 17;
  2623.  
  2624.  
  2625. ΓòÉΓòÉΓòÉ <hidden> PUT Data-Directed ΓòÉΓòÉΓòÉ
  2626.  
  2627. Description 
  2628.   Your data-list-items can be elements, arrays, structure variables, or 
  2629.   repetitive specifications.  For problem data, the names appearing in the 
  2630.   data-list, together with their values, are transmitted in the form of a list 
  2631.   of element assignments separated by blanks and terminated by a semicolon. For 
  2632.   PRINT files, items are separated according to program tab settings. 
  2633.  
  2634.   A semicolon is written into the stream after the last data item transmitted 
  2635.   by each PUT statement. 
  2636.  
  2637.   Subscript expressions that appear in a data-list are evaluated and replaced 
  2638.   by their values. 
  2639.  
  2640.   Items that are part of a structure appearing in the data-list are transmitted 
  2641.   with the full qualification. Subscripts follow the qualified names rather 
  2642.   than being interleaved. 
  2643.  
  2644.   Data-directed output is not valid for subsequent data-directed input: 
  2645.  
  2646.     When the character-string value of a numeric character variable does not 
  2647.      represent a valid optionally signed arithmetic constant, or a complex 
  2648.      expression. 
  2649.  
  2650.     When a program control variable is transmitted, the variable must not be 
  2651.      specified in an input data list. 
  2652.  
  2653.   For character data, the contents of the character string are written out 
  2654.   enclosed in quotation marks. Each quotation mark contained within the 
  2655.   character string is represented by two successive quotation marks. 
  2656.  
  2657.   Names are transmitted as all SBCS or all DBCS, regardless of how they are 
  2658.   specified in the data-list. If a name contains a non EBCDIC DBCS character, 
  2659.   it is transmitted as all DBCS. Each name in a qualified reference is handled 
  2660.   independently. 
  2661.  
  2662. Examples 
  2663.   Consider the following examples of data-directed PUT. If a data-list-item is 
  2664.   specified for a structure element as follows: 
  2665.  
  2666.     DATA (Y(1,-3).Q)
  2667.  
  2668.   the output stream written is: 
  2669.  
  2670.     Y.Q(1,-3)= 3.756;
  2671.  
  2672.   Each name in a qualified reference is handled independently: 
  2673.  
  2674.     PUT DATA (<.A.B.C>.S<kk>);
  2675.   would be transmitted as: 
  2676.  
  2677.     ABC.<.Skk>=...
  2678.  
  2679. Related Information 
  2680.  
  2681.     PRINT attribute 
  2682.     PUT statement 
  2683.  
  2684.  
  2685. ΓòÉΓòÉΓòÉ <hidden> Edit-Directed Data Specification ΓòÉΓòÉΓòÉ
  2686.  
  2687. Description 
  2688.   Use edit-directed data transmission to transmit the values of data list 
  2689.   items. Edit-directed transmission requires that you specify the format of the 
  2690.   values in the stream. The values are recorded externally as a string of 
  2691.   characters or graphics to be treated character by character (or graphic by 
  2692.   graphic) according to a format list. 
  2693.  
  2694. Related Information 
  2695.  
  2696.     Data specification options 
  2697.     GET edit-directed 
  2698.     PUT edit-directed 
  2699.     FORMAT statement 
  2700.  
  2701. The syntax for an edit-directed data specification (in a GET or a PUT 
  2702. statement) is the following: 
  2703.  
  2704. Syntax 
  2705.  
  2706.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2707.                                                        Γöé
  2708. ΓöÇΓöÇΓöÇΓöÇEDITΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇΓöÇdata-listΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÇ(ΓöÇΓöÇΓöñ format-list Γö£ΓöÇΓöÇ)ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2709.  
  2710. Where format-list is:
  2711.  
  2712.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2713.                                Γöé
  2714. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇformat-itemΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇ
  2715.         Γö£ΓöÇnΓöÇformat-itemΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2716.         ΓööΓöÇnΓöÇ(ΓöÇΓöÇformat-listΓöÇΓöÇ)ΓöÇΓöÿ
  2717.  
  2718.  
  2719. ΓòÉΓòÉΓòÉ <hidden> Iteration Factor (n) ΓòÉΓòÉΓòÉ
  2720.  
  2721.   specifies an iteration factor, which is either an expression enclosed in 
  2722.   parentheses or an integer. If it is an integer, a blank must separate the 
  2723.   integer and the following format-item. 
  2724.  
  2725.   The iteration factor specifies that the associated format-item or format-list 
  2726.   is used n successive times. A zero or negative iteration factor specifies 
  2727.   that the associated format-item or format-list is skipped and not used (the 
  2728.   data-list item is associated with the next data format-item). 
  2729.  
  2730.   If an expression is used to represent the iteration factor, it is evaluated 
  2731.   and converted to an integer, once for each set of iterations. 
  2732.  
  2733.   The associated format-item or format-list is that item or list of items 
  2734.   immediately to the right of the iteration factor. 
  2735.  
  2736.  
  2737. ΓòÉΓòÉΓòÉ <hidden> Format Items ΓòÉΓòÉΓòÉ
  2738.  
  2739. Description 
  2740.   Format items may be either data format items, control format items, or the 
  2741.   remote format item. 
  2742.  
  2743.     Data format items describe the character or graphic representation of a 
  2744.      single data item. 
  2745.  
  2746.      The first data format item is associated with the first data list item, 
  2747.      the second data format item with the second data list item, and so on. If 
  2748.      a format list contains fewer data format items than there are items in the 
  2749.      associated data list, the format list is reused. If there are excessive 
  2750.      format items, they are ignored. 
  2751.  
  2752.      The data format items are: 
  2753.  
  2754.       A (character) format item 
  2755.       B (bit) format item 
  2756.       C (complex) format item 
  2757.       E (floating-point) format item 
  2758.       F (fixed-point) format item 
  2759.       G (graphic) format item 
  2760.       P (picture) format item 
  2761.  
  2762.     Control format items specify the layout of the data set associated with a 
  2763.      file. If a control format item is encountered, the control action is 
  2764.      executed. There are rules for using control format items. The control 
  2765.      format items are: 
  2766.  
  2767.       COLUMN format item 
  2768.       LINE format item 
  2769.       PAGE format item 
  2770.       SKIP format item 
  2771.       X format item 
  2772.  
  2773.     The remote or R format item specifies a label reference whose value is the 
  2774.      label constant of the FORMAT statement located elsewhere. The FORMAT 
  2775.      statement contains the remotely situated format items. 
  2776.  
  2777.  
  2778. ΓòÉΓòÉΓòÉ <hidden> A (Character) Format Item ΓòÉΓòÉΓòÉ
  2779.  
  2780. Description 
  2781.   Use the character (A) format item to describe the representation of a 
  2782.   character value. 
  2783.  
  2784.     On input, the specified number of characters is obtained from the data 
  2785.      stream and assigned, with any necessary conversion, truncation, or 
  2786.      padding, to the data list item. The field width is always required on 
  2787.      input and, if it is zero, a null string is obtained. If quotation marks 
  2788.      appear in the stream, they are treated as characters in the string. 
  2789.  
  2790.     On output, the data list item is converted, if necessary, to a character 
  2791.      string and is truncated or extended with blanks on the right to the 
  2792.      specified field-width before being placed into the data stream. If the 
  2793.      field-width is zero, no characters are placed into the data stream. 
  2794.      Enclosing quotation marks are never inserted, nor are contained quotation 
  2795.      marks doubled. If the field width is not specified, the default is equal 
  2796.      to the character-string length of the data list item (after conversion, if 
  2797.      necessary). 
  2798.  
  2799. Example 
  2800.   Consider the following statement that uses the A format item: 
  2801.  
  2802.     GET FILE (INFILE)
  2803.     EDIT (ITEM) (A(20));
  2804.  
  2805.   This statement assigns the next 20 characters in the file called INFILE to 
  2806.   ITEM. The value is converted from its character representation specified by 
  2807.   the format item A(20), to the representation specified by the attributes 
  2808.   declared for ITEM. 
  2809.  
  2810. Syntax 
  2811.  
  2812. ΓöÇΓöÇΓöÇΓöÇAΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2813.          ΓööΓöÇΓöÇ(ΓöÇΓöÇfield-widthΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  2814.  
  2815.  
  2816. ΓòÉΓòÉΓòÉ <hidden> B (Bit) Format Item ΓòÉΓòÉΓòÉ
  2817.  
  2818. Description 
  2819.   Use the bit (or B) format item to describe the character representation of a 
  2820.   bit value. Each bit is represented by the character zero or one. 
  2821.  
  2822.     On input, the character representation of the bit string can occur 
  2823.      anywhere within the specified field. Blanks, which may appear before and 
  2824.      after the bit string in the field, are ignored. Any necessary conversion 
  2825.      occurs when the bit string is assigned to the data list item. The field 
  2826.      width is always required on input, and if it is zero, a null string is 
  2827.      obtained. Any character other than 0 or 1 in the string, including 
  2828.      embedded blanks, quotation marks, or the letter B, raises the CONVERSION 
  2829.      condition. 
  2830.  
  2831.     On output, the character representation of the bit string is left-adjusted 
  2832.      in the specified field, and necessary truncation or extension with blanks 
  2833.      occurs on the right. Any necessary conversion to bit-string is performed. 
  2834.      No quotation marks are inserted, nor is the identifying letter B. If the 
  2835.      field width is zero, no characters are placed into the data stream. If the 
  2836.      field width is not specified, the default is equal to the bit-string 
  2837.      length of the data list item (after conversion, if necessary). 
  2838.  
  2839. Example 
  2840.   In the example: 
  2841.  
  2842.     DECLARE MASK BIT(25);
  2843.     PUT FILE(MASKFLE) EDIT (MASK) (B);
  2844.  
  2845.   The PUT statement writes the value of MASK in the file called MASKFLE as a 
  2846.   string of 25 characters consisting of 0's and 1's. 
  2847.  
  2848. Syntax 
  2849.  
  2850. ΓöÇΓöÇΓöÇΓöÇBΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  2851.          ΓööΓöÇΓöÇ(ΓöÇΓöÇfield-widthΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  2852.  
  2853.  
  2854. ΓòÉΓòÉΓòÉ <hidden> C (Complex) Format Item ΓòÉΓòÉΓòÉ
  2855.  
  2856. Description 
  2857.   Use the complex (or C) format item to describe the character representation 
  2858.   of a complex data value. You use one real-format-item to describe both the 
  2859.   real and imaginary parts of the complex data value in the data stream. 
  2860.  
  2861.   On input, the letter I in the input raises the CONVERSION condition. 
  2862.  
  2863.   On output, the letter I is never appended to the imaginary part. If the 
  2864.   second real format item (or the first, if only one appears) is an F or E 
  2865.   item, the sign is transmitted only if the value of the imaginary part is less 
  2866.   than zero. If the real format item is a P item, the sign is transmitted only 
  2867.   if the S or - or + picture character is specified. 
  2868.  
  2869.   If you require an I to be appended, it must be specified as a separate data 
  2870.   item in the data list, immediately following the variable that specifies the 
  2871.   complex item. The I, then, must have a corresponding format item (either A or 
  2872.   P). 
  2873.  
  2874. Syntax 
  2875.  
  2876.            ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2877.                              Γöé
  2878. ΓöÇΓöÇΓöÇΓöÇCΓöÇΓöÇ(ΓöÇΓöÇΓöÇreal-format-itemΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2879.  
  2880.  
  2881. ΓòÉΓòÉΓòÉ <hidden> E (floating-point) Format Item ΓòÉΓòÉΓòÉ
  2882.  
  2883. Description 
  2884.   The floating-point (or E) format item describes the character representation 
  2885.   of a real floating-point decimal arithmetic data value. 
  2886.  
  2887.   The following must be true: 
  2888.  
  2889.     (field-width) >= (significant-digits) >= (fractional-digits)
  2890.  
  2891.   or 
  2892.  
  2893.     field-width = 0
  2894.  
  2895.   and, when field-width ╨║= 0 
  2896.  
  2897.     (significant digits) > 0, (fractional digits) >= 0
  2898.  
  2899.     On input, either the data value in the data stream is an optionally signed 
  2900.      real decimal floating-point or fixed-point constant located anywhere 
  2901.      within the specified field or the CONVERSION condition is raised. (For 
  2902.      convenience, the "E" preceding a signed exponent can be omitted.) 
  2903.  
  2904.      The field-width includes leading and trailing blanks, the exponent 
  2905.      position, the positions for the optional plus or minus signs, the position 
  2906.      for the optional letter E, and the position for the optional decimal point 
  2907.      in the mantissa. 
  2908.  
  2909.      The data value can appear anywhere within the specified field; blanks can 
  2910.      appear before and after the data value in the field and are ignored. If 
  2911.      the entire field is blank, the CONVERSION condition is raised. When no 
  2912.      decimal point appears, fractional-digits specifies the number of character 
  2913.      positions in the mantissa to the right of the assumed decimal point. If a 
  2914.      decimal point does appear in the number, it overrides the specification of 
  2915.      fractional-digits. 
  2916.  
  2917.      Significant-digits, if it appears, is evaluated and ignored. 
  2918.  
  2919.      If field-width is 0, there is no assignment to the data list item. 
  2920.  
  2921.     On output, the data list item is converted to floating-point and rounded 
  2922.      if necessary. The rounding of data is as follows:  if truncation causes a 
  2923.      digit to be lost from the right, and this digit is greater than or equal 
  2924.      to 5, 1 is added to the digit to the left of the truncated digit. This 
  2925.      addition might cause adjustment of the exponent. 
  2926.  
  2927.      If significant-digits is not specified, it defaults to 1 plus 
  2928.      fractional-digits. 
  2929.  
  2930. Related Information 
  2931.   Character string syntax for output 
  2932.  
  2933. Example 
  2934.   Consider the following example of input using the E format item: 
  2935.  
  2936.     GET FILE(A) EDIT (COST) (E(10,6));
  2937.  
  2938.   This statement obtains the next 10 characters from the file called A and 
  2939.   interprets them as a floating-point decimal number. A decimal point is 
  2940.   assumed before the rightmost 6 digits of the mantissa. The value of the 
  2941.   number is converted to the attributes of COST and assigned to this variable. 
  2942.  
  2943. Syntax 
  2944.  
  2945. ΓöÇΓöÇΓöÇΓöÇEΓöÇΓöÇ(ΓöÇΓöÇfield-widthΓöÇ,ΓöÇfractional-digitsΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2946.  
  2947. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2948.       ΓööΓöÇΓöÇ,ΓöÇsignificant-digitsΓöÇΓöÇΓöÿ
  2949.  
  2950.  
  2951. ΓòÉΓòÉΓòÉ <hidden> Character String Syntax for Output (for E-Format Item) ΓòÉΓòÉΓòÉ
  2952.  
  2953. The character string written in the stream for output has one of the following 
  2954. syntaxes: 
  2955.  
  2956. Note the following abbreviations: 
  2957.  
  2958. w = field-width
  2959. d = fractional digits
  2960. s = significant-digits
  2961.  
  2962.  For d = 0 
  2963.  
  2964.     [-] {s digits}E{╤æ}exponent
  2965.  
  2966.   w must be >= s+4 for positive values, or >= s+5 for negative values. 
  2967.  
  2968.   When the value is nonzero, the exponent is adjusted so that the leading digit 
  2969.   of the mantissa is nonzero. When the value is zero, zero suppression is 
  2970.   applied to all digit positions (except the rightmost) of the mantissa. 
  2971.  
  2972.  For 0 < d < s 
  2973.  
  2974.     [-]{s-d digits}.{d digits}
  2975.         E{╤æ}exponent
  2976.  
  2977.   w must be >= s+5 for positive values, or >= s+6 for negative values. 
  2978.  
  2979.   When the value is nonzero, the exponent is adjusted so that the leading digit 
  2980.   of the mantissa is nonzero. When the value is zero, zero suppression is 
  2981.   applied to all digit positions (except the first) to the left of the decimal 
  2982.   point. All other digit positions contain zero. 
  2983.  
  2984.  For d = s 
  2985.  
  2986.     [-]0.{d digits}E{╤æ}exponent
  2987.  
  2988.   w must be >= d+6 for positive values, or >= d+7 for negative values. 
  2989.  
  2990.   When the value is nonzero, the exponent is adjusted so that the first 
  2991.   fractional digit is nonzero. When the value is zero, each digit position 
  2992.   contains zero. 
  2993.  
  2994. The exponent is a 2-digit integer, which can be two zeros. 
  2995.  
  2996. If the field width is such that significant digits or the sign are lost, the 
  2997. SIZE condition is raised. If the character string does not fill the specified 
  2998. field on output, the character string is right-adjusted and extended on the 
  2999. left with blanks. 
  3000.  
  3001.  
  3002. ΓòÉΓòÉΓòÉ <hidden> F (fixed-point) Format Item ΓòÉΓòÉΓòÉ
  3003.  
  3004. Description 
  3005.  
  3006. Use the fixed-point (or F) format item to describe the character representation 
  3007. of a real fixed-point decimal arithmetic value. 
  3008.  
  3009. Related Information 
  3010.  
  3011.     F format item on input 
  3012.     F format item on output 
  3013.  
  3014. Syntax 
  3015.  
  3016. ΓöÇΓöÇΓöÇΓöÇFΓöÇΓöÇ(ΓöÇΓöÇfield-widthΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3017.  
  3018. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇ
  3019.     ΓööΓöÇ,ΓöÇfractional-digitsΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  3020.                            ΓööΓöÇΓöÇ,ΓöÇscaling-factorΓöÇΓöÇΓöÿ
  3021.  
  3022.  
  3023. ΓòÉΓòÉΓòÉ <hidden> Using the F Format Item on Input ΓòÉΓòÉΓòÉ
  3024.  
  3025. On input, either the data value in the data stream is an optionally signed real 
  3026. decimal fixed-point constant located anywhere within the specified field or the 
  3027. CONVERSION condition is raised. Blanks can appear before and after the data 
  3028. value in the field and are ignored. If the entire field is blank, it is 
  3029. interpreted as zero. (This is different from CHAR to ARITH conversion and from 
  3030. E-format items.) 
  3031.  
  3032. Fractional-digits, if not specified, defaults to 0. 
  3033.  
  3034. If no scaling-factor is specified and no decimal point appears in the field, 
  3035. the expression for fractional-digits specifies the number of digits in the data 
  3036. value to the right of the assumed decimal point. If a decimal point does appear 
  3037. in the data value, it overrides the expression for fractional-digits. 
  3038.  
  3039. If a scaling-factor is specified, it effectively multiplies the data value in 
  3040. the data stream by 10 raised to the integer value (p) of the scaling-factor. 
  3041. Thus, if p is positive, the data value is treated as though the decimal point 
  3042. appeared p places to the right of its given position. If p is negative, the 
  3043. data value is treated as though the decimal point appeared p places to the left 
  3044. of its given position. The given position of the decimal point is that 
  3045. indicated either by an actual point, if it appears, or by the expression for 
  3046. fractional-digits, in the absence of an actual point. 
  3047.  
  3048. If the field-width is 0, there is no assignment to the data list item. 
  3049.  
  3050.  
  3051. ΓòÉΓòÉΓòÉ <hidden> G (Graphic) Format Item ΓòÉΓòÉΓòÉ
  3052.  
  3053. Description 
  3054.   Use the graphic (or G) format item to describe the representation of a 
  3055.   graphic string. 
  3056.  
  3057. Example 
  3058.   In the example: 
  3059.  
  3060.     DECLARE A GRAPHIC(3);
  3061.     PUT FILE(OUT) EDIT (A) (G(3));
  3062.  
  3063.   If OUT does not have the GRAPHIC option, 6 bytes are transmitted; otherwise, 
  3064.   8 bytes (6 bytes and the left and right delimiters) are transmitted. 
  3065.  
  3066. Related Information 
  3067.  
  3068.     G on input 
  3069.     G on output 
  3070.  
  3071. Syntax 
  3072.  
  3073. ΓöÇΓöÇΓöÇΓöÇGΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  3074.          ΓööΓöÇΓöÇ(ΓöÇΓöÇfield-widthΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  3075.  
  3076.  
  3077. ΓòÉΓòÉΓòÉ <hidden> P (Picture) Format Item ΓòÉΓòÉΓòÉ
  3078.  
  3079. Description 
  3080.   Use the picture (or P) format item to describe the character representation 
  3081.   of real numeric character values and of character values. 
  3082.  
  3083.   The picture specification of the P-format item, on input, describes the form 
  3084.   of the data item expected in the data stream and, in the case of a numeric 
  3085.   character specification, how the item's arithmetic value is to be 
  3086.   interpreted. If the indicated character does not appear in the stream, the 
  3087.   CONVERSION condition is raised. 
  3088.  
  3089.   On output, the value of the associated element in the data list is converted 
  3090.   to the form specified by the picture specification before it is written into 
  3091.   the data stream. 
  3092.  
  3093. Example 
  3094.   Consider the following statement: 
  3095.  
  3096.     GET EDIT (NAME, TOTAL) (P'AAAAA',P'9999');
  3097.  
  3098.   When this statement is executed, the input file SYSIN is the default. The 
  3099.   next five characters input from SYSIN must be alphabetic or blank and they 
  3100.   are assigned to NAME. The next four characters must be digits and they are 
  3101.   assigned to TOTAL. 
  3102.  
  3103. Syntax 
  3104.  
  3105. ΓöÇΓöÇΓöÇΓöÇPΓöÇΓöÇ'ΓöÇΓöÇpicture-specificationΓöÇΓöÇ'ΓöÇΓöÇΓöÇΓöÇΓöÇ
  3106.  
  3107.  
  3108. ΓòÉΓòÉΓòÉ <hidden> COLUMN Format Item ΓòÉΓòÉΓòÉ
  3109.  
  3110. Description 
  3111.   Use the COLUMN format item to position the file to a specified character 
  3112.   position within the current or following line. 
  3113.  
  3114.   The file is positioned to the specified character position in the current 
  3115.   line, provided it has not already passed this position. If the file is 
  3116.   already positioned after the specified character position, the current line 
  3117.   is completed and a new line is started; the format item is then applied to 
  3118.   the following line. 
  3119.  
  3120.   If the specified character position lies beyond the rightmost character 
  3121.   position of the current line, or if the value of the expression for the 
  3122.   character position is less than one, the default character position is one. 
  3123.  
  3124.   The rightmost character position is determined as follows: 
  3125.  
  3126.     For output files, it is determined by the line size. 
  3127.  
  3128.     For input files, it is determined using the length of the current logical 
  3129.      record to determine the line size and, hence, the rightmost character 
  3130.      position. In the case of V-format records, this line size is equal to the 
  3131.      logical record length minus the number of bytes containing control 
  3132.      information. 
  3133.  
  3134.   COLUMN must not be used in a GET STRING or PUT STRING statement. COLUMN 
  3135.   cannot be used with input or output lines that contain graphics. 
  3136.  
  3137.   On input, intervening character positions are ignored. 
  3138.  
  3139.   On output, intervening character positions are filled with blanks. 
  3140.  
  3141. Syntax 
  3142.  
  3143. ΓöÇΓöÇΓöÇCOLUMNΓöÇΓöÇ(ΓöÇΓöÇcharacter-positionΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  3144.  
  3145.  
  3146. ΓòÉΓòÉΓòÉ <hidden> LINE Format Item ΓòÉΓòÉΓòÉ
  3147.  
  3148. Description 
  3149.   Use the LINE format item to specify the line on the current page of a PRINT 
  3150.   file upon which the next data list item will be printed, or it raises the 
  3151.   ENDPAGE condition. Blank lines are inserted, if necessary. 
  3152.  
  3153.   If the specified line-number is less than or equal to the current line 
  3154.   number, or if the specified line is beyond the limits set by the PAGESIZE 
  3155.   option of the OPEN statement (or by default), the ENDPAGE condition is 
  3156.   raised. An exception is that if the specified line-number is equal to the 
  3157.   current line number, and the column 1 character has not yet been transmitted, 
  3158.   the effect is as for a SKIP(0) item, that is, a carriage return with no line 
  3159.   spacing. 
  3160.  
  3161.   If line-number is zero, it defaults to one (1). 
  3162.  
  3163. Syntax 
  3164.  
  3165. ΓöÇΓöÇΓöÇΓöÇLINEΓöÇΓöÇ(ΓöÇΓöÇline-numberΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  3166.  
  3167.  
  3168. ΓòÉΓòÉΓòÉ <hidden> PAGE Format Item ΓòÉΓòÉΓòÉ
  3169.  
  3170. Description 
  3171.   Use the PAGE format item to specify that a new page is established. PAGE can 
  3172.   be used only with PRINT files. 
  3173.  
  3174.   The establishment of a new page positions the file to line one of the next 
  3175.   page. 
  3176.  
  3177. Syntax 
  3178.  
  3179. ΓöÇΓöÇΓöÇΓöÇPAGEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3180.  
  3181.  
  3182. ΓòÉΓòÉΓòÉ <hidden> SKIP Format Item ΓòÉΓòÉΓòÉ
  3183.  
  3184. Description 
  3185.   Use the SKIP format item to specify that a new line is to be defined as the 
  3186.   current line. With SKIP, you specify an expression which is converted to an 
  3187.   integral number, n. The new line is the nth line after the present line. 
  3188.  
  3189.   If n is greater than one, one or more lines are ignored on input; on output, 
  3190.   one or more blank lines are inserted. Only PRINT files can have n equal to 
  3191.   zero, in which case the positioning is at the start of the current line. 
  3192.   Characters previously written can be overprinted. 
  3193.  
  3194.   For PRINT files, if the specified relative-line n is beyond the limit set by 
  3195.   the PAGESIZE option of the OPEN statement (or the default), the ENDPAGE 
  3196.   condition is raised. 
  3197.  
  3198.   If the SKIP format item is the first item to be executed after a file has 
  3199.   been opened, output commences on the nth line of the first page. If n is zero 
  3200.   or 1, it commences on the first line of the first page. 
  3201.  
  3202. Example 
  3203.   Consider the following statement: 
  3204.  
  3205.     GET FILE(IN) EDIT(MAN,OVERTIME)
  3206.          (SKIP(1), A(6), COL(60), F(4,2));
  3207.  
  3208.   This statement positions the data set associated with file IN to a new line. 
  3209.   The first 6 characters on the line are assigned to MAN, and the 4 characters 
  3210.   beginning at character position 60 are assigned to OVERTIME. 
  3211.  
  3212. Syntax 
  3213.  
  3214. ΓöÇΓöÇΓöÇΓöÇSKIPΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3215.             ΓööΓöÇΓöÇ(ΓöÇΓöÇrelative-lineΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  3216.  
  3217.  
  3218. ΓòÉΓòÉΓòÉ <hidden> X Format Item ΓòÉΓòÉΓòÉ
  3219.  
  3220. Description 
  3221.   Use the spacing (or X) format item to specify the relative spacing of data 
  3222.   values in the data stream. 
  3223.  
  3224.   On input, the specified number of characters are spaced over in the data 
  3225.   stream and not transmitted to the program. 
  3226.  
  3227.   On output, the specified number of blank characters are inserted into the 
  3228.   stream. 
  3229.  
  3230. Examples 
  3231.  
  3232.     In the example: 
  3233.  
  3234.           GET EDIT (NUMBER, REBATE)
  3235.                  (A(5), X(5), A(5));
  3236.  
  3237.      The next 15 characters from the input file, SYSIN, are treated as follows: 
  3238.      the first five characters are assigned to NUMBER, the next five characters 
  3239.      are spaced over and ignored, and the remaining five characters are 
  3240.      assigned to REBATE. 
  3241.  
  3242.     In the example: 
  3243.  
  3244.           PUT FILE(OUT) EDIT (PART, COUNT) (A(4), X(2), F(5));
  3245.  
  3246.      Four characters that represent the value of PART, then two blank 
  3247.      characters, and finally five characters that represent the fixed-point 
  3248.      value of COUNT, are placed in the file named OUT. 
  3249.  
  3250. Syntax 
  3251.  
  3252. ΓöÇΓöÇΓöÇΓöÇXΓöÇΓöÇ(ΓöÇΓöÇfield-widthΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3253.  
  3254.  
  3255. ΓòÉΓòÉΓòÉ <hidden> R Format Item ΓòÉΓòÉΓòÉ
  3256.  
  3257. Description 
  3258.   Use the remote (or R) format item to specify that the format list in a FORMAT 
  3259.   statement is to be used. The R-format item and the specified FORMAT statement 
  3260.   must be internal to the same block, and they must be in the same invocation 
  3261.   of that block. 
  3262.  
  3263.   A remote FORMAT statement cannot contain an R-format item that references 
  3264.   itself as a label-reference, nor can it reference another remote FORMAT 
  3265.   statement that will lead to the referencing of the original FORMAT statement. 
  3266.  
  3267.   Conditions enabled for the GET or PUT statement must also be enabled for the 
  3268.   remote FORMAT statement(s) that are referred to. 
  3269.  
  3270.   If the GET or PUT statement is the single statement of an ON-unit, that 
  3271.   statement is a block, and it cannot contain a remote format item. 
  3272.  
  3273. Related Information 
  3274.   FORMAT statement 
  3275.  
  3276. Syntax 
  3277.  
  3278. ΓöÇΓöÇΓöÇΓöÇRΓöÇΓöÇ(ΓöÇΓöÇlabel-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3279.  
  3280.  
  3281. ΓòÉΓòÉΓòÉ <hidden> Rules for Using Control Format Items ΓòÉΓòÉΓòÉ
  3282.  
  3283. Be aware of certain rules for the use of control format items. These rules are: 
  3284.  
  3285.  The PAGE and LINE format items can be used only with PRINT files and, 
  3286.   consequently, can appear only in PUT statements. The SKIP, COLUMN, and 
  3287.   X-format items apply to both input and output, however. 
  3288.  
  3289.  The PAGE, SKIP, and LINE format items have the same effect as the 
  3290.   corresponding options of the PUT statement (and of the GET statement, in the 
  3291.   case of SKIP), except that the format items take effect when they are 
  3292.   encountered in the format list, while the options take effect before any data 
  3293.   is transmitted. 
  3294.  
  3295.  The COLUMN format item cannot be used in a GET STRING or PUT STRING 
  3296.   statement. 
  3297.  
  3298.  
  3299. ΓòÉΓòÉΓòÉ <hidden> GET Edit-Directed ΓòÉΓòÉΓòÉ
  3300.  
  3301. Description 
  3302.   Data in the stream is a continuous string of characters and graphics without 
  3303.   any delimiters between successive values. For files with the GRAPHIC 
  3304.   attribute, graphic data must be enclosed in shift codes. 
  3305.  
  3306.   The number of characters for each data value is specified by a format item in 
  3307.   the format list. The characters are interpreted according to the associated 
  3308.   format item. When the data-list has been processed, execution of the GET 
  3309.   statement stops and any remaining format items are not processed. 
  3310.  
  3311.   Each data format item specifies the number of characters or graphics to be 
  3312.   associated with the data list item and how to interpret the data value. The 
  3313.   data value is assigned to the associated data list item, with any necessary 
  3314.   conversion. 
  3315.  
  3316.   Fixed-point binary and floating-point binary data values must always be 
  3317.   represented in the input stream with their values expressed in decimal 
  3318.   digits. The F-, P-, and E-format items can then be used to access them, and 
  3319.   the values are converted to binary representation upon assignment. 
  3320.  
  3321.   All blanks and quotation marks are treated as characters in the stream. 
  3322.   Strings should not be enclosed in quotation marks. Quotation marks (character 
  3323.   or graphic) should not be doubled. The letter B should not be used to 
  3324.   identify bit strings or G to identify graphic strings. If characters in the 
  3325.   stream cannot be interpreted in the manner specified, the CONVERSION 
  3326.   condition is raised. 
  3327.  
  3328. Example 
  3329.   Using edit-directed GET 
  3330.  
  3331. Related Information 
  3332.   GET statement 
  3333.  
  3334.  
  3335. ΓòÉΓòÉΓòÉ <hidden> PUT Edit-Directed ΓòÉΓòÉΓòÉ
  3336.  
  3337. Description 
  3338.   The value of each data list item is converted to the character or graphic 
  3339.   representation specified by the associated format item and placed in the 
  3340.   stream in a field whose width also is specified by the format item. When the 
  3341.   data-list has been processed, execution of the PUT statement stops and any 
  3342.   remaining format items are not processed. 
  3343.  
  3344.   On output, binary items are converted to decimal values and the associated F- 
  3345.   or E-format items must state the field width and point placement in terms of 
  3346.   the converted decimal number. For the P-format these are specified by the 
  3347.   picture specification. 
  3348.  
  3349.   On output, blanks are not inserted to separate data values in the output 
  3350.   stream. String data is left-adjusted in the field to the width specified. 
  3351.   Arithmetic data is right-adjusted. Because of the rules for conversion of 
  3352.   arithmetic data to character type which can cause up to 3 leading blanks to 
  3353.   be inserted (in addition to any blanks that replace leading zeros), generally 
  3354.   there is at least 1 blank preceding an arithmetic item in the converted 
  3355.   field. 
  3356.  
  3357.   Leading blanks do not appear in the stream, however, unless the specified 
  3358.   field width allows for them. Truncation, due to inadequate field-width 
  3359.   specification, is on the left for arithmetic items, and on the right for 
  3360.   string items. SIZE or STRINGSIZE is raised if truncation occurs. 
  3361.  
  3362. Examples 
  3363.  
  3364.     PUT with data format items 
  3365.     PUT with data and control format items 
  3366.  
  3367. Related Information 
  3368.   PUT statement 
  3369.  
  3370.  
  3371. ΓòÉΓòÉΓòÉ <hidden> Put with Data and Control Format Items (Examples) ΓòÉΓòÉΓòÉ
  3372.  
  3373. The following examples show the use of the COLUMN, LINE, PAGE, and SKIP format 
  3374. items in combination with one another. 
  3375.  
  3376.  Consider the following: 
  3377.  
  3378.     PUT EDIT ('QUARTERLY STATEMENT')
  3379.         (PAGE, LINE(2), A(19))(ACCT#, BOUGHT, SOLD, PAYMENT, BALANCE)
  3380.         (SKIP(3), A(6), COLUMN(14), F(7,2), COLUMN(30), F(7,2),
  3381.         COLUMN(45), F(7,2), COLUMN(60), F(7,2));
  3382.  
  3383.   This PUT statement specifies that the heading QUARTERLY STATEMENT is written 
  3384.   on line two of a new page in the output file SYSPRINT, two lines are skipped 
  3385.   (that is, "skip to the third following line") and the value of ACCT# is 
  3386.   written, beginning at the first character of the fifth line; the value of 
  3387.   BOUGHT, beginning at character position 14; the value of SOLD, beginning at 
  3388.   character position 30; the value of PAYMENT, beginning at character position 
  3389.   45; and the value of BALANCE at character position 60. 
  3390.  
  3391.  Consider the following: 
  3392.  
  3393.     PUT EDIT (NAME,NUMBER,CITY) (A(N),A(N-4),A(10));
  3394.  
  3395.   In this example, the value of NAME is inserted in the stream as a character 
  3396.   string left-adjusted in a field of N characters; NUMBER is left-adjusted in a 
  3397.   field of N-4 characters; and CITY is left-adjusted in a field of 10 
  3398.   characters. 
  3399.  
  3400.  
  3401. ΓòÉΓòÉΓòÉ <hidden> FORMAT Statement ΓòÉΓòÉΓòÉ
  3402.  
  3403. Description 
  3404.   Use the FORMAT statement to specify a format list that can be used by 
  3405.   edit-directed data transmission statements to control the format of the data 
  3406.   being transmitted. 
  3407.  
  3408.   A GET or PUT EDIT statement can include a remote format item, R, in its 
  3409.   format-list. That portion of the format-list represented by the R format item 
  3410.   is supplied by the identified FORMAT statement. The remote format item and 
  3411.   the FORMAT statement must be internal to the same invocation of the same 
  3412.   block. 
  3413.  
  3414.   If a condition prefix is associated with a FORMAT statement, it must be 
  3415.   identical to the condition prefix associated with the GET or PUT statement 
  3416.   referring to that FORMAT statement. 
  3417.  
  3418.   When a FORMAT statement is encountered in normal sequential flow, control 
  3419.   passes around it. 
  3420.  
  3421. Syntax 
  3422.  
  3423.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3424.                 Γöé
  3425. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇlabel:ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇFORMATΓöÇΓöÇ(ΓöÇΓöÇformat-listΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  3426.  
  3427.  
  3428. ΓòÉΓòÉΓòÉ <hidden> Using the F Format Item on Output ΓòÉΓòÉΓòÉ
  3429.  
  3430. Description 
  3431.   On output, the data list item is converted, if necessary, to fixed-point; 
  3432.   floating-point data converts to FIXED DECIMAL (15,q) where q is the 
  3433.   fractional-digits specified. The data value in the stream is the character 
  3434.   representation of a real decimal fixed-point number, rounded if necessary, 
  3435.   and right-adjusted in the specified field. 
  3436.  
  3437.   The conversion from decimal fixed-point type to character type is performed 
  3438.   according to the normal rules for conversion. Extra characters may appear as 
  3439.   blanks preceding the number in the converted string. And, since leading zeros 
  3440.   are converted to blanks (except for a 0 immediately to the left of the 
  3441.   point), additional blanks may precede the number. If a decimal point or a 
  3442.   minus sign appears, either will cause one leading blank to be replaced. 
  3443.  
  3444.   If only the field-width is specified, only the integer portion of the number 
  3445.   is written; no decimal point appears. 
  3446.  
  3447.   If both the field-width and fractional-digits are specified, but 
  3448.   scaling-factor is not, both the integer and fractional portions of the number 
  3449.   are written. If the value of fractional-digits (d) is greater than 0, a 
  3450.   decimal point is inserted before the rightmost d digits. Trailing zeros are 
  3451.   supplied when fractional-digits is less than d (the value d must be less than 
  3452.   field-width). If the absolute value of the item is less than 1, a 0 precedes 
  3453.   the decimal point. Suppression of leading zeros is applied to all digit 
  3454.   positions (except the first) to the left of the decimal point. 
  3455.  
  3456.   The rounding of the data value is as follows: if truncation causes a digit to 
  3457.   be lost from the right, and this digit is greater than or equal to 5, 1 is 
  3458.   added to the digit to the left of the truncated digit. 
  3459.  
  3460.   The integer value (p) of the scaling-factor multiplies the value of the data 
  3461.   list item, after any conversion to FIXED DECIMAL by 10 raised to the power of 
  3462.   p, before it is edited into its character representation.  When 
  3463.   fractional-digits is 0, only the integer portion of the data list item is 
  3464.   used in the multiplication. 
  3465.  
  3466.   On output, if the data list item is less than 0, a minus sign is prefixed to 
  3467.   the character representation; if it is greater than or equal to 0, no sign 
  3468.   appears. Therefore, for negative values, the field-width might need to 
  3469.   include provision for the sign, a decimal point, and a 0 before the point. 
  3470.  
  3471.   If the field-width is such that any character is lost, the SIZE condition is 
  3472.   raised. 
  3473.  
  3474. Example 
  3475.   Using F-format item on output 
  3476.  
  3477.  
  3478. ΓòÉΓòÉΓòÉ <hidden> List-Directed Data Specification ΓòÉΓòÉΓòÉ
  3479.  
  3480. Description 
  3481.   List-directed data transmission transmits the values of data list items 
  3482.   without your having to specify the format of the values in the stream. The 
  3483.   list-directed data values are recorded externally as a list of constants, 
  3484.   separated by blanks or commas. 
  3485.  
  3486. Examples 
  3487.   Examples of list-directed data specifications are: 
  3488.  
  3489.     LIST (CARD_RATE, DYNAMIC_FLOW)
  3490.  
  3491.     LIST ((THICKNESS(DISTANCE)
  3492.          DO DISTANCE = 1 TO 1000))
  3493.  
  3494.     LIST (P, Z, M, R)
  3495.  
  3496.     LIST (A*B/C, (X+Y)**2)
  3497.  
  3498.   Note:   The specification in the last example can be used only for output, 
  3499.   since it contains expressions. These expressions are evaluated when the 
  3500.   statement is executed, and the result is placed in the stream. 
  3501.  
  3502. Related Information 
  3503.  
  3504.     Data specification options 
  3505.     GET list-directed 
  3506.     PUT list-directed 
  3507.  
  3508. Syntax 
  3509.  
  3510. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ(ΓöÇdata-listΓöÇ)ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3511.         ΓööΓöÇLISTΓöÇΓöÿ
  3512.  
  3513.  
  3514. ΓòÉΓòÉΓòÉ <hidden> List-Directed Data Values ΓòÉΓòÉΓòÉ
  3515.  
  3516. Description 
  3517.   List-directed data values in the stream, either input or output, are 
  3518.   character or graphic representations as demonstrated in the syntax diagram 
  3519.   below. 
  3520.  
  3521.   String repetition factors are not allowed. A blank must not follow a sign 
  3522.   preceding a real constant, and must not precede or follow the central + or - 
  3523.   in complex expressions. 
  3524.  
  3525.   The length of the data value in the stream is a function of the attributes of 
  3526.   the data value, including precision and length. 
  3527.  
  3528. Syntax 
  3529.  
  3530. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇarithmetic-constantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  3531.       Γöé Γö£ΓöÇΓöÇ+ΓöÇΓöÇΓöñ                                              Γöé
  3532.       Γöé ΓööΓöÇΓöÇ-ΓöÇΓöÇΓöÿ                                              Γöé
  3533.       Γö£ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇreal-constantΓöÇΓöÇΓö¼ΓöÇ + ΓöÇΓö¼ΓöÇΓöÇimaginary-constantΓöÇΓöÇΓöñ
  3534.       Γöé Γö£ΓöÇΓöÇ+ΓöÇΓöÇΓöñ                 ΓööΓöÇ - ΓöÇΓöÿ                      Γöé
  3535.       Γöé ΓööΓöÇΓöÇ-ΓöÇΓöÇΓöÿ                                              Γöé
  3536.       Γö£ΓöÇΓöÇΓöÇcharacter-constantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3537.       Γö£ΓöÇΓöÇΓöÇbit-constantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3538.       ΓööΓöÇΓöÇΓöÇgraphic-constantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3539.  
  3540.  
  3541. ΓòÉΓòÉΓòÉ <hidden> GET List-Directed ΓòÉΓòÉΓòÉ
  3542.  
  3543. Description 
  3544.   On input, data values in the stream must be separated either by a blank or by 
  3545.   a comma. This separator can be surrounded by an arbitrary number of blanks. A 
  3546.   null field in the stream is indicated either by the first nonblank character 
  3547.   in the data stream being a comma, or by two commas separated by an arbitrary 
  3548.   number of blanks. A null field specifies that the value of the associated 
  3549.   data list item remains unchanged. 
  3550.  
  3551.   Transmission of the list of constants or complex expressions on input is 
  3552.   terminated by expiration of the list or at the end of the file. For 
  3553.   transmission of constants, the file is positioned in the stream ready for the 
  3554.   next GET statement. 
  3555.  
  3556.   How data items are handled on input depends on the data type: 
  3557.  
  3558.     If the data is a character constant, the surrounding quotation marks are 
  3559.      removed, and the enclosed characters are interpreted as a character 
  3560.      string. A double quotation mark is treated as a single quotation mark. 
  3561.  
  3562.     If the data is a bit constant, the enclosing quotation marks and the 
  3563.      trailing character B are removed, and the enclosed characters are 
  3564.      interpreted as a bit string. 
  3565.  
  3566.     If the data is a hexadecimal constant (X, BX, B4, GX), the enclosing 
  3567.      quotation marks and the suffix are removed, and the enclosed characters 
  3568.      are interpreted as a hexadecimal representation of a character, bit, or 
  3569.      graphic string. 
  3570.  
  3571.     If the data is a mixed constant, the enclosing quotation marks and the 
  3572.      suffix M are removed, and the data is adjusted so that the DBCS portions 
  3573.      are enclosed in shift codes. 
  3574.  
  3575.     If the data is a graphic constant, the enclosing shift codes, quotation 
  3576.      marks, and the 'G' are removed, and the enclosed graphics are interpreted 
  3577.      as a graphic string. 
  3578.  
  3579.      If the data is an arithmetic constant or complex expression, it is 
  3580.      interpreted as coded arithmetic data with the base, scale, mode, and 
  3581.      precision implied by the constant or by the rules for expression 
  3582.      evaluation. 
  3583.  
  3584. Related Information 
  3585.  
  3586.     GET statement syntax 
  3587.     GET-ting items separated by blanks 
  3588.     GET-ting items separated by commas 
  3589.     GET-ting DBCS data 
  3590.  
  3591.  
  3592. ΓòÉΓòÉΓòÉ <hidden> PUT List-Directed ΓòÉΓòÉΓòÉ
  3593.  
  3594. Description 
  3595.   The values of the data-list-items are converted to character representations 
  3596.   (except for graphics) and transmitted to the data stream. 
  3597.  
  3598.   A blank separates successive data values transmitted. PRINT file data items 
  3599.   are separated according to program tab settings. 
  3600.  
  3601.   On output, a number of conversions may occur, depending on data type: 
  3602.  
  3603.     Arithmetic values are converted to character. 
  3604.  
  3605.     Binary data values are converted to decimal notation before being placed 
  3606.      in the stream. 
  3607.  
  3608.     For numeric character values, the character value is transmitted. 
  3609.  
  3610.     Bit strings are converted to character strings. The character string is 
  3611.      enclosed in quotation marks and followed by the letter B. 
  3612.  
  3613.   How the data-list is written out depends upon the type of data. Select one of 
  3614.   the following data types for additional information on how the data-list is 
  3615.   written out by data type: 
  3616.  
  3617. Related Information 
  3618.  
  3619.     PRINT attribute 
  3620.     Character string output 
  3621.     Graphic string output 
  3622.     Mixed string output 
  3623.     PUT statement 
  3624.  
  3625.  
  3626. ΓòÉΓòÉΓòÉ 1.2. PL/I Data Items ΓòÉΓòÉΓòÉ
  3627.  
  3628. Description 
  3629.   You can use PL/I in a wide variety of applications because it has many 
  3630.   different data types that can be represented and manipulated. These data 
  3631.   types may be used to represent values processed by your program or may 
  3632.   control the execution of your program.  PL/I data items are the values of 
  3633.   constants or variables. 
  3634.  
  3635.   A constant has a value that cannot change. Depending on its usage, a constant 
  3636.   may be referred to either by its name or by stating the value of the 
  3637.   constant. 
  3638.  
  3639.   A variable has a value or values that can change during the execution of a 
  3640.   program. A variable is introduced by a declaration, which declares the name 
  3641.   and certain attributes of the variable. A variable is referred to by its name 
  3642.   or by a reference derived from its declared name (for example, a structure 
  3643.   qualification). 
  3644.  
  3645. Related Information 
  3646.  
  3647.     Data types and attributes 
  3648.     Data aggregates 
  3649.     Declaring data items 
  3650.  
  3651.  
  3652. ΓòÉΓòÉΓòÉ <hidden> Data Types and Attributes ΓòÉΓòÉΓòÉ
  3653.  
  3654. Description 
  3655.   You can access and manipulate a wide variety of data items in PL/I. The data 
  3656.   items you use may represent values processed by the program or data that 
  3657.   controls the execution of the program. 
  3658.  
  3659.   Data items are the values of constants and variables. 
  3660.  
  3661.   Data used in a PL/I program is either: 
  3662.  
  3663.     Problem data, which is used to represent values to be processed by a 
  3664.      program.  It consists of the coded arithmetic and string data types. 
  3665.  
  3666.     Program control data, which is used to control the execution of your 
  3667.      program.  It consists of the data types: area, entry, event, file, label, 
  3668.      offset, and pointer. 
  3669.  
  3670. Related Information 
  3671.  
  3672.     Arithmetic data items 
  3673.     Area data items 
  3674.     Entry data items 
  3675.     Event data items 
  3676.     File data items 
  3677.     Label data items 
  3678.     Offset data items 
  3679.     Pointer data items 
  3680.     String data items 
  3681.  
  3682.  
  3683. ΓòÉΓòÉΓòÉ <hidden> Event Data Items ΓòÉΓòÉΓòÉ
  3684.  
  3685. Description 
  3686.   Event variables are used to allow a degree of overlap between a 
  3687.   record-oriented input/output operation (or the execution of a DISPLAY 
  3688.   statement) and the execution of other statements in the procedure that 
  3689.   initiated the operation. 
  3690.  
  3691.   A variable is given the EVENT attribute by its appearance in an EVENT option 
  3692.   or a WAIT statement, or by an explicit declaration. 
  3693.  
  3694. An event variable has two separate values: 
  3695.  
  3696.  A single bit which reflects the completion value of the variable.  '1'B 
  3697.   indicates complete, and '0'B indicates incomplete. 
  3698.  
  3699.  A real fixed-point binary value of precision (15,0) which reflects the status 
  3700.   value of the variable. A zero value indicates normal status, and a nonzero 
  3701.   value indicates abnormal status. 
  3702.  
  3703. On allocation of an event variable, its completion value is'0'B (incomplete). 
  3704. The status value is undefined. 
  3705.  
  3706. An event variable can be associated with an event, that is, an input/output 
  3707. operation (or DISPLAY), by means of the EVENT option of a statement.  The 
  3708. variable remains associated with the event until the event is completed.  For 
  3709. an input/output (or DISPLAY) event, the event is completed during the execution 
  3710. of the WAIT for the associated event which initiated the operation.  During 
  3711. this period, the event variable is active. 
  3712.  
  3713. Related Information 
  3714.  
  3715.     Event variable values 
  3716.     Event variable errors 
  3717.     DISPLAY statement 
  3718.     WAIT statement 
  3719.     COMPLETION built-in subroutine 
  3720.     STATUS built-in subroutine 
  3721.  
  3722. Syntax 
  3723.  
  3724. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇEVENTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3725.  
  3726.  
  3727. ΓòÉΓòÉΓòÉ <hidden> Arithmetic Data Items ΓòÉΓòÉΓòÉ
  3728.  
  3729. Description 
  3730.   You can use arithmetic data items in your programs as variables and 
  3731.   constants. 
  3732.  
  3733.   Coded arithmetic data items are rational numbers. They have the attributes of 
  3734.   base, scale, precision, and mode. 
  3735.  
  3736.   Numeric character data is a string data type with arithmetic attributes. This 
  3737.   type of data is stored as a character string but can be used in arithmetic 
  3738.   computations. These variables must be declared with the PICTURE attribute. 
  3739.  
  3740. Related Information 
  3741.  
  3742.     Numeric character data 
  3743.     Precision attribute 
  3744.  
  3745. Syntax 
  3746.  
  3747. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3748.             Γö£ΓöÇBINARYΓöÇΓöÇΓöñ  Γö£ΓöÇFIXEDΓöÇΓöÇΓöñ   Γö£ΓöÇREALΓöÇΓöÇΓöÇΓöÇΓöñ
  3749.             ΓööΓöÇDECIMALΓöÇΓöÿ  ΓööΓöÇFLOATΓöÇΓöÇΓöÿ   ΓööΓöÇCOMPLEXΓöÇΓöÿ
  3750.  
  3751.  
  3752. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3753.         Γöö(number-of-digitsΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼)ΓöÇΓöÇΓöÿ
  3754.                             Γöö,scaling factorΓöÇΓöÿ
  3755.                                    1
  3756.  
  3757. 1 - Scaling factor applies to fixed-point data items only. 
  3758.  
  3759.  
  3760. ΓòÉΓòÉΓòÉ <hidden> BINARY Attribute ΓòÉΓòÉΓòÉ
  3761.  
  3762. Description 
  3763.   The base of a coded arithmetic data item may be binary or decimal. You 
  3764.   specify a data item with a binary base by using the BINARY attribute 
  3765.   (abbreviation BIN). 
  3766.  
  3767.   Binary data items may have either a fixed or floating binary point. 
  3768.  
  3769. Related Information 
  3770.  
  3771.     Binary fixed-point data 
  3772.     Binary floating-point data 
  3773.  
  3774. Syntax 
  3775.  
  3776.       ΓöîΓöÇDECIMALΓöÇΓöÉ
  3777. ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇBINARYΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3778.  
  3779.  
  3780. ΓòÉΓòÉΓòÉ <hidden> DECIMAL Attribute ΓòÉΓòÉΓòÉ
  3781.  
  3782. Description 
  3783.   The base of a coded arithmetic data item may be either binary or decimal. You 
  3784.   specify a data item with a decimal base with the DECIMAL attribute 
  3785.   (abbreviation DEC). 
  3786.  
  3787.   Decimal data items may have either a fixed or floating decimal point. 
  3788.  
  3789.   Syntax 
  3790.  
  3791.  
  3792.           ΓöîΓöÇDECIMALΓöÇΓöÉ
  3793.     ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇBINARYΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3794.  
  3795. Related Information 
  3796.  
  3797.     Decimal fixed-point data 
  3798.     Decimal floating-point data 
  3799.  
  3800.  
  3801. ΓòÉΓòÉΓòÉ <hidden> FIXED Attribute ΓòÉΓòÉΓòÉ
  3802.  
  3803. Description 
  3804.   The scale of a coded arithmetic data item is either fixed-point or 
  3805.   floating-point. You specify a data item with a fixed decimal point or binary 
  3806.   point by using the FIXED attribute. 
  3807.  
  3808.   A fixed-point data item is a rational number in which the position of the 
  3809.   decimal or binary point is specified, either by its appearance in a constant 
  3810.   or by a scaling factor declared for a variable. 
  3811.  
  3812.   Fixed-point data items may have either a binary or a decimal base. 
  3813.  
  3814.   Syntax 
  3815.  
  3816.         ΓöîΓöÇFLOATΓöÇΓöÇΓöÉ
  3817.     ΓöÇΓöÇΓö┤ΓöÇFIXEDΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3818.  
  3819. Related Information 
  3820.  
  3821.     Binary fixed-point data 
  3822.     Decimal fixed-point data 
  3823.  
  3824.  
  3825. ΓòÉΓòÉΓòÉ <hidden> FLOAT Attribute ΓòÉΓòÉΓòÉ
  3826.  
  3827. Description 
  3828.   The scale of a coded arithmetic data item is either fixed-point or 
  3829.   floating-point. You specify a data item with a floating decimal or binary 
  3830.   point with the FLOAT attribute. 
  3831.  
  3832.   A floating-point data item is a rational number in the form of a fractional 
  3833.   part and an exponent part. 
  3834.  
  3835.   Floating-point data items may have either a binary or a decimal base. 
  3836.  
  3837.   Syntax 
  3838.  
  3839.  
  3840.          ΓöîΓöÇFLOATΓöÇΓöÉ
  3841.     ΓöÇΓöÇΓöÇΓö┤ΓöÇFIXEDΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3842.  
  3843. Related Information 
  3844.  
  3845.     Binary floating-point data 
  3846.     Decimal floating-point data 
  3847.  
  3848.  
  3849. ΓòÉΓòÉΓòÉ <hidden> REAL Attribute ΓòÉΓòÉΓòÉ
  3850.  
  3851. Description 
  3852.   The mode of an arithmetic data item is either real or complex. Both coded 
  3853.   arithmetic data and numeric character data can be real values. 
  3854.  
  3855.   You specify a data item representing a real value with the REAL attribute. 
  3856.  
  3857.   Arithmetic data items default to the REAL attribute. 
  3858.  
  3859. Syntax 
  3860.  
  3861.      ΓöîΓöÇREALΓöÇΓöÇΓöÇΓöÇΓöÉ
  3862. ΓöÇΓöÇΓöÇΓö┤ΓöÇCOMPLEXΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3863.  
  3864.  
  3865. ΓòÉΓòÉΓòÉ <hidden> COMPLEX Attribute ΓòÉΓòÉΓòÉ
  3866.  
  3867. Description 
  3868.   The mode of an arithmetic data item is either real or complex. A real data 
  3869.   item is a number that expresses a real value.  A complex data item consists 
  3870.   of the following 2 parts: 
  3871.  
  3872.     the first, a real part 
  3873.     the second, an imaginary part. 
  3874.  
  3875.   For a variable representing complex data items, the base, scale, and 
  3876.   precision of the 2 parts are identical. Both coded arithmetic data and 
  3877.   numeric character data can be complex values. 
  3878.  
  3879.   You specify a data item representing a complex value with the COMPLEX 
  3880.   (abbreviation CPLX) attribute. 
  3881.  
  3882.   Arithmetic variables default to REAL. Therefore, complex arithmetic variables 
  3883.   must be explicitly declared with the COMPLEX attribute. 
  3884.  
  3885. Example 
  3886.   Using complex data items 
  3887.  
  3888. Syntax 
  3889.  
  3890.      ΓöîΓöÇREALΓöÇΓöÇΓöÇΓöÇΓöÉ
  3891. ΓöÇΓöÇΓöÇΓö┤ΓöÇCOMPLEXΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3892.  
  3893.  
  3894. ΓòÉΓòÉΓòÉ <hidden> Precision Attribute ΓòÉΓòÉΓòÉ
  3895.  
  3896. Description 
  3897.   The precision of a coded arithmetic data item is: 
  3898.  
  3899.     For fixed-point, the number of digits the data item contains. For 
  3900.      fixed-point data, the precision attribute can also specify the scaling 
  3901.      factor. 
  3902.  
  3903.     For floating-point, the number of significant digits to be maintained 
  3904.      (excluding the exponent). 
  3905.  
  3906.   The precision attribute must follow, with no intervening attribute 
  3907.   specifications, the scale (FIXED or FLOAT), base (DECIMAL or BINARY), or mode 
  3908.   (REAL or COMPLEX) at the same factoring level. 
  3909.  
  3910. Syntax 
  3911.  
  3912. ΓöÇΓöÇ(ΓöÇnumber-of-digitsΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3913.                         ΓööΓöÇ,ΓöÇΓöÇscaling-factorΓöÇΓöÿ
  3914.  
  3915.  
  3916. ΓòÉΓòÉΓòÉ <hidden> Number of Digits ΓòÉΓòÉΓòÉ
  3917.  
  3918. Description 
  3919.   The precision of an arithmetic data item consists of the number of digits in 
  3920.   the value followed by an optional scaling factor designating the location of 
  3921.   the decimal or binary point in the value. These two precision attributes are 
  3922.   enclosed in a single set of parentheses (and separated by a comma if both are 
  3923.   present). 
  3924.  
  3925.   The number of digits is an integer that specifies how many digits the 
  3926.   arithmetic value can have. For fixed-point items, the integer is the number 
  3927.   of significant digits.  For floating-point items, the integer is the number 
  3928.   of significant digits to be maintained, excluding the exponent. 
  3929.  
  3930. Example 
  3931.   In the following, X is declared as a fixed-point decimal value with five 
  3932.   digits: 
  3933.  
  3934.     DECLARE X DECIMAL FIXED(5);
  3935.  
  3936.  
  3937. ΓòÉΓòÉΓòÉ <hidden> Scaling Factor ΓòÉΓòÉΓòÉ
  3938.  
  3939. The precision of an arithmetic data item consists of the number of digits in 
  3940. the value followed by an optional scaling factor designating the position of 
  3941. the decimal or binary point in the value. These two precision attributes are 
  3942. enclosed in a single set of parentheses (and separated by a comma if both are 
  3943. present). 
  3944.  
  3945. The scaling factor applies to binary fixed-point or decimal fixed-point values 
  3946. only. The scaling factor is an optionally-signed integer. If no scaling factor 
  3947. is specified, the default is 0. 
  3948.  
  3949. The scaling factor is the assumed position of the decimal or binary point 
  3950. relative to the rightmost digit of the value. 
  3951.  
  3952. The precision attribute specification is often represented as (p,q), where "p" 
  3953. represents the number of digits, and "q" represents the scaling factor. 
  3954.  
  3955. A negative scaling factor (-q) specifies an integer, with the point assumed to 
  3956. be located q places to the right of the rightmost actual digit. A positive 
  3957. scaling factor (q) that is larger than the number of digits specifies a 
  3958. fraction, with the point assumed to be located q places to the left of the 
  3959. rightmost actual digit. In either of the above cases, intervening zeros are 
  3960. assumed, but they are not stored.  Only the specified number of digits are 
  3961. actually stored. 
  3962.  
  3963.  
  3964. ΓòÉΓòÉΓòÉ <hidden> Binary Fixed-Point Data ΓòÉΓòÉΓòÉ
  3965.  
  3966. Description 
  3967.   A binary fixed-point constant consists of one or more binary digits with an 
  3968.   optional binary point, followed immediately by the letter "B".  Binary 
  3969.   fixed-point constants have precision (p,q) where p is the total number of 
  3970.   binary digits in the value and q is the number of binary digits specified to 
  3971.   the right of the binary point. 
  3972.  
  3973.   The data attributes for declaring binary fixed-point data variables are 
  3974.   BINARY and FIXED.  The default precision is (15,0). 
  3975.  
  3976.   A binary fixed-point data item with 15 digits or less is stored as a 
  3977.   fixed-point binary halfword. A binary fixed-point data item with 16-31 digits 
  3978.   is stored as a fullword. (A halfword is 15 bits plus a sign bit, and a 
  3979.   fullword is 31 bits plus a sign bit.) 
  3980.  
  3981.   The declared number of digits is in the low-order positions, but the extra 
  3982.   high-order digits participate in any operations performed upon the data item. 
  3983.   Any arithmetic overflow into such extra high-order positions can be detected 
  3984.   only if the SIZE condition is enabled. 
  3985.  
  3986. Example 
  3987.   Using binary fixed-point data 
  3988.  
  3989.  
  3990. ΓòÉΓòÉΓòÉ <hidden> Binary Floating-Point Data ΓòÉΓòÉΓòÉ
  3991.  
  3992. Description 
  3993.   A binary floating-point constant is a mantissa followed by an exponent and 
  3994.   the letter "B". The mantissa is a binary fixed-point value. The exponent is 
  3995.   the letter "E", followed by an optionally-signed decimal integer, which 
  3996.   specifies a power of two. The exponent cannot exceed three decimal digits. 
  3997.  
  3998.   Binary floating-point data items have a precision (p) where p is the number 
  3999.   of binary digits of the mantissa. 
  4000.  
  4001.   Use the BINARY and FLOAT data attributes for declaring binary floating-point 
  4002.   variables. 
  4003.  
  4004.   The default precision is (21). 
  4005.  
  4006.   Binary floating-point data is stored as normalized hexadecimal floating 
  4007.   point. If the declared precision is less than or equal to (21), short 
  4008.   floating-point form is used.  If the declared precision is greater than (21) 
  4009.   and less than or equal to (53), long floating-point form is used. If the 
  4010.   declared precision is greater than (53), extended floating-point form is 
  4011.   used. 
  4012.  
  4013.   Note:   You should avoid coding the internal representation of extended 
  4014.           precision floating-point values.  Under some circumstances, these 
  4015.           values will not compare properly with other extended precision 
  4016.           floating-point values.  To avoid this problem, use binary 
  4017.           floating-point constants to specify extended precision floating-point 
  4018.           values. 
  4019.  
  4020. Example 
  4021.   Using binary floating-point data 
  4022.  
  4023.  
  4024. ΓòÉΓòÉΓòÉ <hidden> Decimal Fixed-Point Data ΓòÉΓòÉΓòÉ
  4025.  
  4026. Description 
  4027.   A decimal fixed-point constant consists of one or more decimal digits with an 
  4028.   optional decimal point. If no decimal point appears, the point is assumed to 
  4029.   be immediately to the right of the rightmost digit. 
  4030.  
  4031.   Decimal fixed-point data items have the precision (p,q) where p is the total 
  4032.   number of digits in the value and q is the number of digits specified to the 
  4033.   right of the decimal point. 
  4034.  
  4035.   Use the DECIMAL and FIXED attributes for declaring decimal fixed-point 
  4036.   variables. 
  4037.  
  4038.   The default precision is (5,0). 
  4039.  
  4040.   Decimal fixed-point data is stored as two digits per byte, with a sign 
  4041.   indication in the rightmost 4 bits of the rightmost byte. Consequently, a 
  4042.   decimal fixed-point data item is always stored as an odd number of digits, 
  4043.   even though the declaration of the variable may specify the number of digits, 
  4044.   p, as an even number. 
  4045.  
  4046.   When the declaration specifies an even number of digits, the extra digit 
  4047.   place is in the high-order position, and it participates in any operations 
  4048.   performed upon the data item, such as in a comparison operation. Any 
  4049.   arithmetic overflow or assignment into an extra high-order digit place can be 
  4050.   detected only if the SIZE condition is enabled. 
  4051.  
  4052. Example 
  4053.   Using decimal fixed-point data 
  4054.  
  4055.  
  4056. ΓòÉΓòÉΓòÉ <hidden> Decimal Floating-Point Data ΓòÉΓòÉΓòÉ
  4057.  
  4058. Description 
  4059.   A decimal floating-point constant is a mantissa followed by an exponent. The 
  4060.   mantissa is a decimal fixed-point value. The exponent is the letter "E" 
  4061.   followed by an optionally-signed integer, which specifies a power of ten. 
  4062.  
  4063.   Decimal floating-point data items have a precision (p) where p is the number 
  4064.   of digits in the mantissa. 
  4065.  
  4066.   Use the data attributes DECIMAL and FLOAT for declaring decimal 
  4067.   floating-point variables. 
  4068.  
  4069.   The default precision is (6). 
  4070.  
  4071.   Decimal floating-point data is stored as normalized hexadecimal 
  4072.   floating-point, with the hexadecimal point assumed to the left of the first 
  4073.   hexadecimal digit. If the declared precision is less than or equal to (6), 
  4074.   short floating-point form is used. If the declared precision is greater than 
  4075.   (6) and less than or equal to (16), long floating-point form is used.  If the 
  4076.   declared precision is greater than (16), extended floating-point form is 
  4077.   used. 
  4078.  
  4079.   Note:   You should avoid coding the internal representation of extended 
  4080.           precision floating-point values.  Under some circumstances, these 
  4081.           values will not compare properly with other extended precision 
  4082.           floating-point values.  To avoid this problem, use decimal 
  4083.           floating-point constants to specify extended precision floating-point 
  4084.           values. 
  4085.  
  4086. Example 
  4087.   Using decimal floating-point data 
  4088.  
  4089.  
  4090. ΓòÉΓòÉΓòÉ <hidden> String Data Items ΓòÉΓòÉΓòÉ
  4091.  
  4092. Description 
  4093.   A string data item is used to represent a sequence of characters, binary 
  4094.   digits, or graphics.  The length of the string is the number of characters, 
  4095.   binary digits, or graphics it contains.  String data items may be used in 
  4096.   your programs as constants and variables. 
  4097.  
  4098. Related Information 
  4099.  
  4100.     Numeric character data 
  4101.     Bit string data 
  4102.     Character string data 
  4103.     Graphic string data 
  4104.     Mixed string data 
  4105.  
  4106.  
  4107. ΓòÉΓòÉΓòÉ <hidden> Numeric Character Data (PICTURE Specification) ΓòÉΓòÉΓòÉ
  4108.  
  4109. Description 
  4110.   A numeric character data item is the value of a variable that has been 
  4111.   declared with the PICTURE attribute and a numeric picture specification. 
  4112.  
  4113.   Numeric picture specification describes a character string that can be 
  4114.   assigned only data that can be converted to an arithmetic value.  For 
  4115.   example: 
  4116.  
  4117.     DECLARE PRICE PICTURE '999V99';
  4118.  
  4119.   specifies that any value assigned to PRICE is maintained as a character 
  4120.   string of 5 decimal digits, with an assumed decimal point preceding the 
  4121.   rightmost 2 digits.  Data assigned to PRICE is aligned on the assumed point 
  4122.   in the same way that point alignment is maintained for fixed-point decimal 
  4123.   data. 
  4124.  
  4125.   Numeric character data has arithmetic attributes, but it is not stored in 
  4126.   coded arithmetic form. Numeric character data is stored as a character 
  4127.   string. Before it can be used in arithmetic computations, it must be 
  4128.   converted into either the decimal fixed-point or decimal floating-point data 
  4129.   type.  These conversions are carried out automatically, but they require 
  4130.   extra execution time. 
  4131.  
  4132.   Although numeric character data is in character form and it is aligned on a 
  4133.   decimal point like arithmetic data, it is processed differently from either 
  4134.   character or arithmetic data. 
  4135.  
  4136.   Editing characters can be specified for insertion into a numeric character 
  4137.   data item, and such characters are actually stored within the data item. 
  4138.   Consequently, when the item is printed or treated as a character string, the 
  4139.   editing characters are included in the assignment. 
  4140.  
  4141.   When a numeric character data item is assigned to another numeric character 
  4142.   data item or an arithmetic variable, the editing characters are not included 
  4143.   in the assignment. Only the actual digits, signs, and the location of the 
  4144.   assumed decimal place is included in the assignment. 
  4145.  
  4146. Example 
  4147.   Using numeric character data 
  4148.  
  4149. Syntax 
  4150.  
  4151.  
  4152. ΓöÇΓöÇΓöÇΓöÇΓöÇPICTUREΓöÇΓöÇΓöÇΓöÇ'picture specification'ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4153.  
  4154. The base of a numeric character data item is decimal.  Its scale is either 
  4155. fixed-point or floating point (the K or E picture character denotes a 
  4156. floating-point scale).  The precision of a numeric character data item is the 
  4157. number of significant digits (excluding the exponent in the case of 
  4158. floating-point).  Significant digits are specified by the picture characters 
  4159. for digit positions and conditional digit positions.  The scaling factor of a 
  4160. numeric character data item is derived from the V or the F picture character or 
  4161. the combination of V and F. 
  4162.  
  4163. Only decimal data can be represented by picture characters.  Complex data can 
  4164. be declared by specifying the COMPLEX attribute along with a single picture 
  4165. specification that describes either a fixed-point or a floating-point data 
  4166. item. 
  4167.  
  4168.  
  4169. ΓòÉΓòÉΓòÉ <hidden> Example- Using Numeric Character Data ΓòÉΓòÉΓòÉ
  4170.  
  4171. If a numeric character item is assigned to another numeric character data item 
  4172. or an arithmetic variable, the editing characters are not included in the 
  4173. assignment. Only the actual digits, signs, and location of the assumed decimal 
  4174. place are assigned. For example: 
  4175.  
  4176. DECLARE PRICE PICTURE '$99V.99',
  4177.         COST CHARACTER (6),
  4178.         VALUE FIXED DECIMAL (6,2);
  4179. PRICE = 12.28
  4180. COST = '$12.28'
  4181.  
  4182. Above, in the picture specification for PRICE, the currency symbol ($) and the 
  4183. decimal point (.) are editing characters. They are stored as characters in the 
  4184. data item, but are not a part of its arithmetic value.  After the two 
  4185. assignments are made, the internal character representation of PRICE and COST 
  4186. are identical. However, they will not always function the same way. For 
  4187. example: 
  4188.  
  4189. VALUE = PRICE;
  4190. COST = PRICE;
  4191. VALUE = COST;
  4192. PRICE = COST;
  4193.  
  4194. After the first two assignments are made, the value of VALUE is 0012.28 and the 
  4195. value of COST is '$12.28'. In the assignment of PRICE to VALUE, the currency 
  4196. symbol ($) and the decimal symbol (.) are not part of the assignment. The 
  4197. arithmetic value of PRICE is converted to internal coded arithmetic form. 
  4198.  
  4199. In the assignment of PRICE to COST, however, the assignment is to character 
  4200. string, and the editing characters of a numeric picture specification always 
  4201. participate in such assignments. No conversion is necessary in this assignment. 
  4202. No conversion is necessary because PRICE is stored in character form. 
  4203.  
  4204. The third and fourth statements would raise the CONVERSION condition. The value 
  4205. of COST cannot be assigned to VALUE because the currency symbol in the string 
  4206. makes it invalid as an arithmetic constant. The value of COST cannot be 
  4207. assigned to PRICE for the same reason. Only values that are of arithmetic type, 
  4208. or can be converted to arithmetic type, can be assigned to a variable declared 
  4209. with a numeric picture specification. 
  4210.  
  4211. Although the decimal point can be an editing character or an actual character 
  4212. in a character string, it will not raise CONVERSION in converting to arithmetic 
  4213. form, since its appearance is valid in an arithmetic constant.  The same is 
  4214. true for a valid plus or minus sign, since converting to arithmetic form 
  4215. provides for a sign preceding an arithmetic constant. 
  4216.  
  4217. Other editing characters, including zero suppression characters, drifting 
  4218. characters, and insertion characters, can be used in numeric picture 
  4219. specifications. 
  4220.  
  4221.  
  4222. ΓòÉΓòÉΓòÉ <hidden> Picture Specification Characters ΓòÉΓòÉΓòÉ
  4223.  
  4224. Description 
  4225.   A picture specification consists of a sequence of picture characters 
  4226.   (enclosed in quotation marks) which is part of the PICTURE attribute. The 
  4227.   picture specification describes a character data item or a numeric character 
  4228.   data item. 
  4229.  
  4230.   A character pictured item can consist of alphabetic characters, decimal 
  4231.   digits, blanks, and any other EBCDIC codes. 
  4232.  
  4233.   A numeric character pictured item can consist only of decimal digits, an 
  4234.   optional decimal point, an optional letter "E", and optionally, one or two 
  4235.   plus or minus signs. Other characters generally associated with arithmetic 
  4236.   data, such as currency symbols, can also be specified, but they are not a 
  4237.   part of the arithmetic value of the numeric character variable, although the 
  4238.   characters are stored with the digits and are part of the character value of 
  4239.   the variable. 
  4240.  
  4241.   A picture repetition factor can be used to specify a number of repetitions of 
  4242.   a picture character immediately following the repetition factor. 
  4243.  
  4244. Related Information 
  4245.  
  4246.     Picture characters for character data 
  4247.     Picture characters for numeric character data 
  4248.     P-format item 
  4249.  
  4250.  
  4251. ΓòÉΓòÉΓòÉ <hidden> Picture Characters for Character Data ΓòÉΓòÉΓòÉ
  4252.  
  4253. Description 
  4254.   A character picture specification describes a fixed-length character data 
  4255.   item, with the additional facility of indicating that any position in the 
  4256.   data item can only contain characters from certain subsets of the complete 
  4257.   set of available characters. 
  4258.  
  4259.   A character picture specification is recognized by the occurrence of an 'A' 
  4260.   or 'X' picture specification character. The only valid characters in a 
  4261.   character picture specification are 'X', 'A', and '9': 
  4262.  
  4263.    X 
  4264.      Any character of the 256 possible bit combinations represented by the 
  4265.      8-bit byte. 
  4266.  
  4267.    A 
  4268.      Any alphabetic character, #, @, $, or blank. 
  4269.  
  4270.    9 
  4271.      Any digit or blank.  (Note that the 9 picture specification character in 
  4272.      numeric character specifications is different in that the corresponding 
  4273.      character can only be digit.) 
  4274.  
  4275.   When a character value is assigned, or transferred, to a pictured character 
  4276.   data item, the particular character in each position is checked for validity, 
  4277.   as specified by the corresponding picture specification character, and the 
  4278.   CONVERSION condition is raised for an invalid character. 
  4279.  
  4280. Examples 
  4281.   Examples of picture characters 
  4282.  
  4283.  
  4284. ΓòÉΓòÉΓòÉ <hidden> Picture Characters for Numeric Character Data ΓòÉΓòÉΓòÉ
  4285.  
  4286. Numeric character data represents numeric values; therefore, the associated 
  4287. picture specification cannot contain the characters "X" or "A" (reserved for 
  4288. character data items). The picture characters for numeric data can specify 
  4289. editing of the data. 
  4290.  
  4291. A numeric character variable can be thought of as having two different kinds of 
  4292. value, depending on its use. They are: 
  4293.  
  4294. Arithmetic value 
  4295.    The arithmetic value is the value expressed by the decimal digits of the 
  4296.    data item, the assumed location of a decimal point, possibly a sign, and an 
  4297.    optionally signed exponent or scaling factor.  The arithmetic value of a 
  4298.    numeric character variable is used: 
  4299.  
  4300.     Whenever the variable appears in an expression that results in a coded 
  4301.      arithmetic value or bit value 
  4302.     Whenever the variable is assigned to a coded arithmetic, numeric 
  4303.      character, or bit variable 
  4304.     When used with the C, E, F, B, and P (numeric) format items in 
  4305.      edit-directed I/O 
  4306.  
  4307.    In such cases, the arithmetic value of the numeric character variable is 
  4308.    converted to internal coded arithmetic representation. 
  4309.  
  4310. Character value 
  4311.    The character value is the value expressed by the decimal digits of the data 
  4312.    item as well as all of the editing and insertion characters appearing in the 
  4313.    picture specification. The character value does not include the assumed 
  4314.    location of a decimal point. The character value of a numeric character 
  4315.    variable is used: 
  4316.  
  4317.     Whenever the variable appears in a character expression 
  4318.     In an assignment to a character variable 
  4319.     Whenever the data is printed using list-directed or data-directed output 
  4320.     Whenever a reference is made to a character variable that is defined or 
  4321.      based on the numeric character variable 
  4322.     Whenever the variable is printed using edit-directed output with the "A" 
  4323.      or "P" character format items 
  4324.  
  4325.    The picture characters for numeric character specifications can be grouped 
  4326.    into the following categories: 
  4327.  
  4328.     Credit, debit, overpunched, and zero replacement characters 
  4329.     Digit and decimal point characters 
  4330.     Exponent identifier characters 
  4331.     Insertion characters 
  4332.     Scaling factor character 
  4333.     Signs and currency characters 
  4334.     Zero suppression characters. 
  4335.  
  4336.    All characters except for K, V, and F specify the occurrence of a character 
  4337.    in the character representation. 
  4338.  
  4339.    A numeric character specification consists of one or more "fields", each 
  4340.    field describing a fixed-point number.  A floating-point specification has 
  4341.    two fields---one for the mantissa and one for the exponent.  The first field 
  4342.    can be divided into "subfields" by inserting a V picture specification 
  4343.    character; the portion preceding the V (if any) and that following it (if 
  4344.    any) are subfields of the specification. 
  4345.  
  4346.    A requirement of the picture specification for numeric character data is 
  4347.    that each field must contain at least one picture character that specifies a 
  4348.    digit position.  This picture character, however, need not be the digit 
  4349.    character 9.  Other picture characters, such as the zero suppression 
  4350.    characters (Z or *), also specify digit positions. 
  4351.  
  4352.  
  4353. ΓòÉΓòÉΓòÉ <hidden> Digit and Decimal Point Characters ΓòÉΓòÉΓòÉ
  4354.  
  4355. The picture characters "9" and "V" are used in numeric character specifications 
  4356. that represent fixed-point decimal values: 
  4357.  
  4358.   specifies that the associated position in the data item contains a decimal 
  4359.   digit.  (The definition of 9 in a character picture is different in that the 
  4360.   corresponding character can be blank or a digit.) 
  4361.  
  4362.   specifies that a decimal point is assumed at this position in the associated 
  4363.   data item. However, it does not specify that an actual decimal point or 
  4364.   decimal comma is inserted. 
  4365.  
  4366.   If no V character appears in the picture specification of a fixed-point 
  4367.   decimal value (or in the first field of a floating- point decimal value), a V 
  4368.   is assumed at the right end of the field specification.  This can cause the 
  4369.   assigned value to be truncated, if necessary, to an integer. 
  4370.  
  4371.   The V character cannot appear more than once in a picture specification.  For 
  4372.   example: 
  4373.  
  4374.     DCL VALUE PICTURE 'Z9V999';
  4375.     VALUE = 12.345;
  4376.     DCL CVALUE CHAR(5);
  4377.     CVALUE = VALUE;
  4378.  
  4379.   CVALUE, after assignment of VALUE, contains '12345'. 
  4380.  
  4381.  
  4382. ΓòÉΓòÉΓòÉ <hidden> Zero Suppression Characters ΓòÉΓòÉΓòÉ
  4383.  
  4384. The picture characters "Z" and "*" (asterisk) specify conditional digit 
  4385. positions in the character value and can cause leading zeros to be replaced by 
  4386. asterisks or blanks. 
  4387.  
  4388.   specifies a conditional digit position and causes a leading zero in the 
  4389.   associated data position to be replaced by a blank character. Otherwise the 
  4390.   digit in the position is left unchanged. The picture character Z cannot 
  4391.   appear in the same field as the picture character *, or a drifting character, 
  4392.   nor can it appear to the right of any of the picture characters  9, T, I, R, 
  4393.   or Y in a field. 
  4394.  
  4395.   specifies a conditional digit position. It is used the way the picture 
  4396.   character Z is used, except that leading zeros are replaced by asterisks 
  4397.   instead of blank characters. The * picture character faces the same 
  4398.   restrictions listed above for the Z picture character. 
  4399.  
  4400. If one of the picture characters Z or * appears to the right of the picture 
  4401. character V, all fractional digit positions in the specification, as well as 
  4402. all integer digit positions, must employ the Z or * picture character, 
  4403. respectively. 
  4404.  
  4405. When all digit positions to the right of the picture character V contain zero 
  4406. suppression picture characters, fractional zeros of the value are suppressed 
  4407. only if all positions in the fractional part contain zeros and all integer 
  4408. positions have been suppressed.  The character value of the data item will then 
  4409. consist of blanks or asterisks. No digits in the fractional part are replaced 
  4410. by blanks or asterisks if the fractional part contains any significant digit. 
  4411.  
  4412.  
  4413. ΓòÉΓòÉΓòÉ <hidden> Insertion Characters ΓòÉΓòÉΓòÉ
  4414.  
  4415. Description 
  4416.   The picture characters  "," (comma), "." (point), "/" (slash), and "B" 
  4417.   (blank) cause the specified character to be inserted into the associated 
  4418.   position of the numeric character data. They do not indicate digit or 
  4419.   character positions, but are inserted between digits or characters.  Each 
  4420.   does, however, actually represent a character position in the character 
  4421.   value, whether or not the character is suppressed.  The comma, point, and 
  4422.   slash are conditional insertion characters and can be suppressed within a 
  4423.   sequence of zero suppression characters.  The blank (B) is an unconditional 
  4424.   insertion character; it always specifies that a blank appears in the 
  4425.   associated position. 
  4426.  
  4427.   Insertion characters are applicable only to the character value.  They 
  4428.   specify nothing about the arithmetic value of the data item.  They never 
  4429.   cause decimal point or decimal comma alignment in the picture specifications 
  4430.   of a fixed-point decimal number and are not part of the arithmetic value of 
  4431.   the data item.  Decimal alignment is controlled by the picture characters V 
  4432.   and F. 
  4433.  
  4434.    , 
  4435.      inserts a comma into the associated position of the numeric character data 
  4436.      when no suppression occurs. If zero suppression does occur, the comma is 
  4437.      inserted only: 
  4438.  
  4439.        When an unsuppressed digit appears to the left of the comma position 
  4440.        When a V (decimal point character) appears immediately to the left of 
  4441.         the comma and the fractional part contains any significant digits 
  4442.        When the comma is at the start of the picture specification 
  4443.        When the comma is preceded only by characters not specifying digit 
  4444.         positions 
  4445.  
  4446.      Note:   In all other cases where zero suppression occurs, the comma 
  4447.              insertion character is treated as though it were a zero 
  4448.              suppression character identical to the one immediately preceding 
  4449.              it. 
  4450.  
  4451.    . 
  4452.      is used the same way the comma picture character is used, except that a 
  4453.      point "." is assigned to the associated position. 
  4454.  
  4455.    / 
  4456.      is used the same way as the comma picture character is used, except that a 
  4457.      slash "/" is inserted in the associated position. 
  4458.  
  4459.    B 
  4460.      specifies that a blank character always be inserted into the associated 
  4461.      position of the character value of the numeric character data. 
  4462.  
  4463. Related Information 
  4464.   Using insertion characters with the "V" decimal point character 
  4465.  
  4466.  
  4467. ΓòÉΓòÉΓòÉ <hidden> Signs and Currency Characters ΓòÉΓòÉΓòÉ
  4468.  
  4469. The picture characters "S", "+" and "-" specify signs in numeric character 
  4470. data. The picture character '$' specifies a currency symbol in the character 
  4471. value of numeric character data. Only one type of sign character can be used in 
  4472. each field. These picture characters are available for either static usage or 
  4473. drifting usage. 
  4474.  
  4475.   specifies the currency symbol. The static character must appear either to the 
  4476.   left or right of all digit positions in a field of specification. 
  4477.  
  4478.   specifies the plus sign character (+) if the data value is >=0.  Otherwise, 
  4479.   it specifies the minus sign character (-). The rules are identical to those 
  4480.   for the currency symbol above. 
  4481.  
  4482.   specifies the plus sign character (+) if the data value is >=0. Otherwise, it 
  4483.   specifies a blank.  The rules are identical to those for the currency symbol 
  4484.   above. 
  4485.  
  4486.   specifies the minus sign character (-) if the data value is <0. Otherwise, it 
  4487.   specifies a blank. The rules are identical to those for the currency symbol 
  4488.   above. 
  4489.  
  4490. If, during, or before assignment to a picture, the fractional digits of a 
  4491. decimal number are truncated so that the resulting value is zero, the sign 
  4492. inserted in the picture corresponds to the value of the decimal number prior to 
  4493. its truncation.  Therefore, the sign in the picture depends on how the decimal 
  4494. value was calculated. 
  4495.  
  4496.  
  4497. ΓòÉΓòÉΓòÉ <hidden> Credit, Debit, Overpunched, and Zero Replacement Characters ΓòÉΓòÉΓòÉ
  4498.  
  4499. The picture characters "CR", "DB", "T", "I", and "R" cannot be used with any 
  4500. other sign characters in the same field. 
  4501.  
  4502.  The CR and DB (credit and debit) sign characters specify the signs of real 
  4503.   numeric character data items. 
  4504.  
  4505.  Any of the picture characters T, I, or R (overpunched identifiers). specifies 
  4506.   that an EBCDIC character represents the corresponding digit and the sign of 
  4507.   the data item. 
  4508.  
  4509.  The Y picture character specifies that zero is replaced by the blank 
  4510.   character. The replacement is unconditional. 
  4511.  
  4512.  
  4513. ΓòÉΓòÉΓòÉ <hidden> Exponent Identifier Characters ΓòÉΓòÉΓòÉ
  4514.  
  4515. Description 
  4516.   The picture characters K and E delimit the exponent field of a numeric 
  4517.   character specification that describes floating-point decimal numbers. The 
  4518.   exponent field is the last field of a numeric character floating-point 
  4519.   picture specification.  The picture characters K and E cannot appear in the 
  4520.   same specification. 
  4521.  
  4522.    K 
  4523.       specifies that the exponent field appears to the right of the associated 
  4524.       position. It does not specify a character in the numeric data item. 
  4525.  
  4526.    E 
  4527.       specifies that the associated position contains the letter E, which 
  4528.       indicates the start of the exponent field. 
  4529.  
  4530.       The value of the exponent is adjusted in the character value so that the 
  4531.       first significant digit of the first field (the mantissa) appears in the 
  4532.       position associated with the first digit specifier of the specification. 
  4533.  
  4534. Examples 
  4535.   Exponent picture specifications 
  4536.  
  4537.  
  4538. ΓòÉΓòÉΓòÉ <hidden> Exponent Picture Specifications ΓòÉΓòÉΓòÉ
  4539.  
  4540. Following are some examples of exponent characters in picture specification: 
  4541.  
  4542. SOURCE ATTRIBUTES   SOURCE DATA      PICTURE SPECIFICATION    CHARACTER VALUE
  4543. _____________________________________________________________________________
  4544. FLOAT(5)            .12345E06        V.99999E99               .12345E06
  4545. FLOAT(5)            .12345E-06       V.99999E99               .12345E-06
  4546. FLOAT(5)            .12345E+06       V.99999KS99              .12345+06
  4547. _____________________________________________________________________________
  4548. FLOAT(5)             -123.45E+12     S999V.99ES99             -123.45E+12
  4549. FLOAT(5)             001.23E-01      SSS9.V99ESS9             +123.00Eb-3
  4550. FLOAT(5)             001.23E+04      ZZZV.99KS99              123.00+02
  4551. _____________________________________________________________________________
  4552. FLOAT(5)             001.23E+04      SZ99V.99ES99             +123.00E+02
  4553. FLOAT(5)             001.23E+04      SSSSV.99E-99             +123.00Eb02
  4554.  
  4555.  
  4556. ΓòÉΓòÉΓòÉ <hidden> Scaling Factor Character ΓòÉΓòÉΓòÉ
  4557.  
  4558. Description 
  4559.   The picture character "F" specifies a picture scaling factor for fixed-point 
  4560.   decimal numbers.  It can only appear once at the right end of the picture 
  4561.   specification. 
  4562.  
  4563.   specifies that the decimal point in the arithmetic value of the variable is 
  4564.   that number of places (F) to the right (if F>0) or to the left (if F<0) of 
  4565.   its assumed position in the character value. 
  4566.  
  4567.   The number of digits following the "V" (decimal point) picture character 
  4568.   minus the integer specified with F must be between -128 and 127. 
  4569.  
  4570. Example 
  4571.   Using picture scaling factors 
  4572.  
  4573. Syntax 
  4574.  
  4575.  
  4576. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇFΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇintegerΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4577.                Γö£ΓöÇΓöÇ+ΓöÇΓöÇΓöÇΓöñ
  4578.                ΓööΓöÇΓöÇ-ΓöÇΓöÇΓöÇΓöÿ
  4579.  
  4580.  
  4581. ΓòÉΓòÉΓòÉ <hidden> Using Picture Scaling Factors ΓòÉΓòÉΓòÉ
  4582.  
  4583. Following are some examples of scaling factor characters: 
  4584.  
  4585.  
  4586. SOURCE ATTRIBUTES     SOURCE DATA    PICTURE SPECIFICATION    CHARACTER VALUE
  4587. _____________________________________________________________________________
  4588. FIXED(4,0)            1200           99F(2)                   12
  4589. FIXED(7,0)            -1234500       S999V99F(4)              -12345
  4590. FIXED(5,5)            .00012         99F(-5)                  12
  4591. _____________________________________________________________________________
  4592. FIXED(6,6)            .012345        999V99F(-4)              12345
  4593. _____________________________________________________________________________
  4594.  
  4595.  
  4596. ΓòÉΓòÉΓòÉ <hidden> Using Drifting Strings ΓòÉΓòÉΓòÉ
  4597.  
  4598. Description 
  4599.   The drifting use specifies that leading zeros are to be suppressed. In this 
  4600.   case, the rightmost suppressed position associated with the picture character 
  4601.   will contain a sign, a blank, or a currency symbol (except that where all 
  4602.   digit positions are occupied by drifting characters and the value of the data 
  4603.   item is zero, the drifting character is not inserted). 
  4604.  
  4605.   A drifting character is specified by multiple use of that character in a 
  4606.   picture field. 
  4607.  
  4608. Usage Rules 
  4609.  
  4610.     The drifting character must be specified in each digit position through 
  4611.      which it can drift. 
  4612.  
  4613.     Any of the insertion characters slash, comma, or point within or 
  4614.      immediately following the string is part of the drifting string. 
  4615.  
  4616.     A field of a picture specification can contain only one drifting string. 
  4617.  
  4618.     A drifting string cannot be preceded by a digit position, nor can it occur 
  4619.      in the same field as the picture characters * and Z. 
  4620.  
  4621.     The position in the data associated with the characters slash, comma, and 
  4622.      point appearing in a string of drifting characters will contain one of the 
  4623.      following: 
  4624.  
  4625.       - Slash, comma or point if a significant digit appears to the left 
  4626.       - The drifting symbol, if the next position to the right contains the 
  4627.         leftmost significant digit of the field 
  4628.       - Blank, if the leftmost significant digit of the field is more than one 
  4629.         position to the right. 
  4630.  
  4631.     If a drifting string contains the drifting character n times, the string 
  4632.      is associated with n-1 conditional digit positions.  The position 
  4633.      associated with the leftmost drifting character can contain only the 
  4634.      drifting character or blank, never a digit. Two different picture 
  4635.      characters cannot be used in a drifting manner in the same field. 
  4636.  
  4637.     If a drifting string contains a "V" within it, the V delimits the 
  4638.      preceding portion as a subfield, and all digit positions of the subfield 
  4639.      following the V must also be part of the drifting string that commences 
  4640.      the second subfield. 
  4641.  
  4642.     In the case in which all digit positions after the "V" contain drifting 
  4643.      characters, suppression in the subfield occurs only if all of the integer 
  4644.      and fractional digits are zero. The resulting edited data item is then all 
  4645.      blanks (except for any insertion characters at the start of the field). If 
  4646.      there are any nonzero fractional digits, the entire fractional portion 
  4647.      appears, unsuppressed. 
  4648.  
  4649.     Drifting characters must appear in a sequence of the same drifting 
  4650.      character, optionally containing a "V" and one of the insertion 
  4651.      characters; "," (comma), "." (point), "/" (slash), or "B". 
  4652.  
  4653.     A "V" terminates the drifting string unless the arithmetic value of the 
  4654.      string is zero, in which case the V is ignored. 
  4655.  
  4656.     The character "B" always causes insertion of a blank, wherever it appears. 
  4657.  
  4658.  
  4659. ΓòÉΓòÉΓòÉ <hidden> Overpunched Identifiers ΓòÉΓòÉΓòÉ
  4660.  
  4661. Any of the picture characters "T", "I", or "R" (known as overpunched 
  4662. characters) specifies that an EBCDIC character represents the corresponding 
  4663. digit and sign of the data item. 
  4664.  
  4665. This representation has arisen from the custom of indicating signs in numeric 
  4666. data held on punched cards, by overpunching a 12-punch (to represent +) or an 
  4667. 11-punch (to represent -) near the top of a card column containing a digit 
  4668. (usually the last column in a field).  The rsulting EBCDIC card-code is, in 
  4669. most cases, the same as that for an alphabetic character.  The 12-0 and 11-0 
  4670. combinations are not characters in the PL/I set but are within the set of the 
  4671. 256 characters of the EBCDIC code. 
  4672.  
  4673. Only one overpunched sign can appear in a specification for a fixed-point 
  4674. number. A floating-point specification can contain two overpunched characters: 
  4675. one in the mantissa field and one in the exponent field.  The overpunch 
  4676. character can be specified for any digit position within a field. 
  4677.  
  4678.   On input, T specifies that the EBCDIC characters { through I and the digits 0 
  4679.   through 9 represent positive values, and the EBCIDIC characters } through R 
  4680.   represent negative values. 
  4681.  
  4682.   On output, T specifies that the associated position contains one of the 
  4683.   EBCDIC characters { through I if the input data represents positive values 
  4684.   and one of the EBCDIC characters } through R if the input data represents 
  4685.   negative values. The T can appear anywhere a "9" (digit character) picture 
  4686.   specification character occurs.  For example: 
  4687.  
  4688.     DCL CREDIT PICTURE 'ZZV9T';
  4689.  
  4690.   The character representation of CREDIT is 4 characters.  +21.05 is held as 
  4691.   '210E'. -0.07 is held as 'bb0P'. 
  4692.  
  4693.   On input, I specifies that the EBCIDIC characters { through I and the digits 
  4694.   0 through 9 represent positive values. 
  4695.  
  4696.   On output, I specifies that the associated position contains one of the 
  4697.   EBCIDIC characters { through I if the input data represents positive values; 
  4698.   otherwise it contains one of the digits 0 through 9. 
  4699.  
  4700.   On input, R specifies that the EBCDIC characters } through R represent 
  4701.   negative values and the digits 0 through 9 represent positive values. 
  4702.  
  4703.   On output, R specifies that the associated position contains one of the 
  4704.   EBCIDIC characters } through R if the input data represents negative values; 
  4705.   otherwise, it contains one of the digits 0 through 9. 
  4706.  
  4707. The following table shows the interpretation of the T, I and R picture 
  4708. characters: 
  4709.  
  4710. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4711. Γöé                        T                        Γöé       Γöé
  4712. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ       Γöé
  4713. Γöé           I            Γöé            R           Γöé       Γöé
  4714. Γöé      Digit with +      Γöé       Digit with -     Γöé       Γöé
  4715. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Digit Γöé
  4716. Γöé                        Γöé                        Γöé       Γöé
  4717. Γöé  EBCDIC      EBCDIC    Γöé   EBCDIC      EBCDIC   Γöé       Γöé
  4718. Γöé character   card code  Γöé  character   card code Γöé       Γöé
  4719. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4720. Γöé                        Γöé                        Γöé       Γöé
  4721. Γöé    {          12-0     Γöé      }         11-0    Γöé   0   Γöé
  4722. Γöé    A          12-1     Γöé      J         11-1    Γöé   1   Γöé
  4723. Γöé    B          12-2     Γöé      K         11-2    Γöé   2   Γöé
  4724. Γöé    C          12-3     Γöé      L         11-3    Γöé   3   Γöé
  4725. Γöé    D          12-4     Γöé      M         11-4    Γöé   4   Γöé
  4726. Γöé    E          12-5     Γöé      N         11-5    Γöé   5   Γöé
  4727. Γöé    F          12-6     Γöé      O         11-6    Γöé   6   Γöé
  4728. Γöé    G          12-7     Γöé      P         11-7    Γöé   7   Γöé
  4729. Γöé    H          12-8     Γöé      Q         11-8    Γöé   8   Γöé
  4730. Γöé    I          12-9     Γöé      R         11-9    Γöé   9   Γöé
  4731. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4732.  
  4733.  
  4734. ΓòÉΓòÉΓòÉ <hidden> Bit Data ΓòÉΓòÉΓòÉ
  4735.  
  4736. Description 
  4737.   A bit value can only contain bits 0 and 1. A collection of 8 or less 
  4738.   unaligned bits occupies 1 byte of storage. 
  4739.  
  4740.   You can use bit strings in your programs as constants and variables. Bit 
  4741.   strings may also be represented in hexadecimal notation. 
  4742.  
  4743. Related Information 
  4744.  
  4745.     Bit string constants 
  4746.     B4 (Bit Hex) bit string constants 
  4747.     Bit string variables 
  4748.  
  4749.  
  4750. ΓòÉΓòÉΓòÉ <hidden> Bit String Constants ΓòÉΓòÉΓòÉ
  4751.  
  4752. Description 
  4753.   A bit constant is represented by a series of the digits 0 and 1, enclosed in 
  4754.   single quotation marks and followed immediately by the letter "B". 
  4755.  
  4756.   A null bit constant is written as two quotation marks with no intervening 
  4757.   blank, followed immediately by the letter "B". 
  4758.  
  4759. Examples 
  4760.   Examples of some bit string constants are: 
  4761.  
  4762.     CONSTANT                   LENGTH
  4763.     _________________________________
  4764.     '1'B                       1
  4765.     '11111010110001'B          14
  4766.     (64)'0'B                   64
  4767.     ''B                        0
  4768.  
  4769.   The parenthesized number in the third constant above is a string repetition 
  4770.   factor which specifies that the following series of digits be repeated the 
  4771.   specified number of times. The example shown would result in a string of 64 
  4772.   binary zeros. 
  4773.  
  4774. Syntax 
  4775.  
  4776. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ'BΓöÇΓöÇΓöÇΓöÇ
  4777.              Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  4778.              Γöé                          Γöé Γöé
  4779.              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ0ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÿ
  4780.                     ΓööΓöÇΓöÇ1ΓöÇΓöÇΓöÿ
  4781.  
  4782.  
  4783. ΓòÉΓòÉΓòÉ <hidden> B4 (Bit Hexadecimal) Bit String Constants ΓòÉΓòÉΓòÉ
  4784.  
  4785. Description 
  4786.   The B4 string constant describes a bit string constant in hexadecimal 
  4787.   notation.  You can use it in the same places where you use a bit string 
  4788.   constant.  The B4 constant is a convenient way to represent long bit strings. 
  4789.  
  4790.   Note:   The term BX is a synonym for B4.
  4791.  
  4792. Examples 
  4793.   Some examples of B4 string constants and their bit equivalents are: 
  4794.  
  4795.     'CA'B4    is the same as    '11001010'B
  4796.     '80'B4    is the same as    '10000000'B
  4797.     '1'B4     is the same as    '0001'B
  4798.     (2)'F'B4  is the same as    '11111111'B
  4799.     ''B4      is the same as    ''B
  4800.  
  4801. Syntax 
  4802.  
  4803. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ'B4ΓöÇΓöÇΓöÇΓöÇΓöÇ
  4804.              Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  4805.              Γöé                          Γöé Γöé
  4806.              ΓööΓöÇΓöÇΓöÇΓöÇhex-digitΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÿ
  4807.  
  4808.  
  4809. ΓòÉΓòÉΓòÉ <hidden> Bit String Variables ΓòÉΓòÉΓòÉ
  4810.  
  4811. Description 
  4812.   The BIT data attribute specifies a bit variable. 
  4813.  
  4814.   A bit variable can only contain bits 0 and 1. A collection of 8 or less 
  4815.   unaligned bits occupies 1 byte of storage. 
  4816.  
  4817. Syntax 
  4818.  
  4819. ΓöÇΓöÇΓöÇΓöÇΓöÇBITΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4820.             ΓööΓöÇΓöÇ(ΓöÇlengthΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  4821.                          ΓööΓöÇREFERΓöÇ(ΓöÇvariableΓöÇ)ΓöÇΓöÇΓöÿ
  4822.  
  4823.  
  4824. ΓòÉΓòÉΓòÉ <hidden> Length Specification ΓòÉΓòÉΓòÉ
  4825.  
  4826. Description 
  4827.   length specifies the length of a fixed-length string or the maximum length of 
  4828.   a varying-length string. If length is not specified, the default is 1. The 
  4829.   length is in: 
  4830.  
  4831.     bits for bit string 
  4832.     characters for character string 
  4833.     graphics (DBCS characters) for graphic strings. 
  4834.  
  4835. Usage Restrictions 
  4836.   Consider the following rules when specifying string lengths: 
  4837.  
  4838.     You can specify length by an expression or an asterisk, but certain 
  4839.      restrictions apply when specifying the length specifications of the 
  4840.      elements of data aggregates in parameter descriptors. Expressions can be 
  4841.      used only for controlled parameters, and asterisks must not be used if a 
  4842.      dummy is created in the corresponding argument. 
  4843.  
  4844.     If the length specification is an expression, it is evaluated and 
  4845.      converted to FIXED BINARY, which must be positive, when storage is 
  4846.      allocated for the variable. 
  4847.  
  4848.     The asterisk notation can be used for parameters or controlled variables. 
  4849.      For controlled variables, the length can be taken from a previous 
  4850.      allocation or it can be specified in a subsequent ALLOCATE statement. 
  4851.  
  4852.     If the string has the STATIC attribute, length must be an integer. 
  4853.  
  4854.     If the string has the BASED attribute, length must be an integer unless 
  4855.      the string is a member of a based structure and the REFER option is used. 
  4856.  
  4857. Related Information 
  4858.   VARYING attribute 
  4859.  
  4860.  
  4861. ΓòÉΓòÉΓòÉ <hidden> REFER Option ΓòÉΓòÉΓòÉ
  4862.  
  4863. Description 
  4864.   REFER is used in the declaration of a based structure to specify that, on 
  4865.   allocation of the structure, the value of an expression is assigned to a 
  4866.   variable in the structure and represents the length, bound, or size of 
  4867.   another variable in the structure. 
  4868.  
  4869.   String lengths can be defined by variables declared within a based structure. 
  4870.  
  4871. Syntax 
  4872.  
  4873. ΓöÇΓöÇΓöÇΓöÇexpressionΓöÇΓöÇREFERΓöÇΓöÇ(ΓöÇvariableΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4874.  
  4875.  
  4876. ΓòÉΓòÉΓòÉ <hidden> VARYING Attribute ΓòÉΓòÉΓòÉ
  4877.  
  4878. Description 
  4879.   VARYING specifies that the variable is to represent varying-length strings, 
  4880.   in which case length (in the BIT, CHARACTER, or GRAPHIC attribute) specifies 
  4881.   the maximum length. 
  4882.  
  4883.   The length at any time is the length of the current value. The storage 
  4884.   allocated for varying-length strings is 2 bytes longer that the declared 
  4885.   maximum length. The leftmost 2 bytes hold the string's current length in: 
  4886.  
  4887.     Bytes for a character variable. 
  4888.     Bits for a bit variable. 
  4889.     Graphics for a graphic variable. 
  4890.  
  4891. Example 
  4892.   The following declaration specifies that the variable USER represents 
  4893.   varying-length character data items with a maximum length of 15: 
  4894.  
  4895.     DECLARE USER CHARACTER (15) VARYING;
  4896.  
  4897.   The length for USER at any time is the length of the data item assigned to it 
  4898.   at that time. You can determine the length at any given time by use of the 
  4899.   LENGTH built-in function. 
  4900.  
  4901. Syntax 
  4902.  
  4903. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇVARYINGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4904.  
  4905.  
  4906. ΓòÉΓòÉΓòÉ <hidden> Character String Data ΓòÉΓòÉΓòÉ
  4907.  
  4908. Description 
  4909.   When declared with the CHARACTER attribute, a character value can include any 
  4910.   digit, letter, special character, blank, or any other of the 256 bit 
  4911.   combinations in a byte. 
  4912.  
  4913.   Each character of a character value occupies 1 byte of storage. 
  4914.  
  4915.   When declared with the PICTURE attribute, the character value assigned must 
  4916.   match the picture specification. 
  4917.  
  4918.   You can use character data items as constants and variables in your programs. 
  4919.  
  4920. Related Information 
  4921.  
  4922.     Character string constants 
  4923.     X (Hex) character string constants 
  4924.     Character string variables 
  4925.  
  4926.  
  4927. ΓòÉΓòÉΓòÉ <hidden> Character String Constants ΓòÉΓòÉΓòÉ
  4928.  
  4929. Description 
  4930.   A character constant is a contiguous sequence of characters enclosed in 
  4931.   single quotation marks. If a single quotation mark is a character in a 
  4932.   string, it must be written as two single quotation marks with no intervening 
  4933.   blanks. 
  4934.  
  4935.   The length of a character constant is the number of characters between the 
  4936.   enclosing quotation marks. However, if two single quotation marks are used 
  4937.   within a string to represent a single quotation mark, they are counted as a 
  4938.   single character. 
  4939.  
  4940.   A null character constant is written as two quotation marks with no 
  4941.   intervening blanks. 
  4942.  
  4943. Examples 
  4944.   Examples of character constants are: 
  4945.  
  4946.     CONSTANT                        LENGTH
  4947.     ______________________________________
  4948.     'logarithm table'               15
  4949.     'page 5'                        6
  4950.     'Shakespeare''s ''Hamlet'''     25
  4951.     'AC438-19'                      8
  4952.     '/* THIS IS NOT A COMMENT */'   27
  4953.     ''                              0
  4954.     (2)'WALLA '                      12
  4955.  
  4956.   In the last example, the parenthesized number is a string repetition factor 
  4957.   which indicates repetition of the characters that follow. In this case, the 
  4958.   result is "WALLA WALLA ". 
  4959.  
  4960.   The string repetition factor must be an integer, enclosed in parentheses. 
  4961.  
  4962. Syntax 
  4963.  
  4964. ΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ'ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4965.          Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  4966.          Γöé                Γöé  Γöé
  4967.          ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇcharacterΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÿ
  4968.              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇ"ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4969.  
  4970.  
  4971. ΓòÉΓòÉΓòÉ <hidden> X (Hex) Character String Constants ΓòÉΓòÉΓòÉ
  4972.  
  4973. Description 
  4974.   The X string constant describes a character string constant in hexadecimal 
  4975.   notation. You can use the X constant to manipulate non-printable character 
  4976.   strings.  You can also use the X string constant in preprocessor statements. 
  4977.  
  4978.   A null hex character string constant is two single quotes followed by an "X". 
  4979.  
  4980.   An even number of hexadecimal digits must be specified. 
  4981.  
  4982.   The use of X (hex) character string constants may limit the portability of 
  4983.   your program. 
  4984.  
  4985. Syntax 
  4986.  
  4987. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ'XΓöÇΓöÇΓöÇΓöÇΓöÇ
  4988.              Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  4989.              Γöé                                    Γöé Γöé
  4990.              ΓööΓöÇΓöÇΓöÇΓöÇhex-digit hex-digitΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÿ
  4991.  
  4992.  
  4993. ΓòÉΓòÉΓòÉ <hidden> Character String Variables ΓòÉΓòÉΓòÉ
  4994.  
  4995. Description 
  4996.   The CHARACTER (abbreviation CHAR) attribute specifies a character variable. 
  4997.   Character variables can contain any digit, letter, special character, blank, 
  4998.   or any of the other 256 bit combinations in a byte. 
  4999.  
  5000. Syntax 
  5001.  
  5002.  
  5003. ΓöÇΓöÇΓöÇΓöÇΓöÇCHARACTERΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5004.                   ΓööΓöÇΓöÇ(ΓöÇlengthΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  5005.                                ΓööΓöÇREFERΓöÇ(ΓöÇvariableΓöÇ)ΓöÇΓöÇΓöÿ
  5006.  
  5007.  
  5008. ΓòÉΓòÉΓòÉ <hidden> Graphic String Data ΓòÉΓòÉΓòÉ
  5009.  
  5010. Description 
  5011.   When declared with the GRAPHIC attribute, a graphic value can contain any 
  5012.   graphic, each occupying 2 bytes of storage. 
  5013.  
  5014.   You can use graphic string data items in your programs as constants and 
  5015.   variables. A graphic string may also be represented with hexadecimal 
  5016.   notation. 
  5017.  
  5018. Related Information 
  5019.  
  5020.     Graphic string constants 
  5021.     GX (Graphic Hex) graphic string constants 
  5022.     Graphic string variables 
  5023.  
  5024.  
  5025. ΓòÉΓòÉΓòÉ <hidden> Graphic String Constants ΓòÉΓòÉΓòÉ
  5026.  
  5027. Description 
  5028.   A graphic constant can contain values in the range X'00' through X'FF' in 
  5029.   both bytes.  However, you cannot use X'0E' and X'0F'. The constant must 
  5030.   contain an even number of bytes, including zero (a null graphic constant). 
  5031.  
  5032.   The GRAPHIC compile-time option must be in effect for graphic constants to be 
  5033.   accepted. If the GRAPHIC ENVIRONMENT option is not specified for STREAM I/O 
  5034.   files having graphic constants, the conversion condition is raised. 
  5035.  
  5036.   Enclose the graphic values in quotes and use the G suffix after them. The 
  5037.   quotes can be either single byte (outside the shift-out shift-in pair, <>) or 
  5038.   double byte (inside the shift-out shift-in pair).  However, the beginning and 
  5039.   the ending quote must match.  The G suffix can also be single or double byte. 
  5040.  
  5041.   The preferred form for a graphic constant is : 
  5042.  
  5043.     '<GGGG>'G
  5044.     where GG is a valid two-byte graphic.
  5045.  
  5046.   Other allowable forms are: 
  5047.  
  5048.     <.'GGGG.'>G
  5049.     <.'GGGG.'.G>
  5050.  
  5051.   Some of the ways to represent the null graphic constant are : 
  5052.  
  5053.     '<>'G
  5054.     <.'.'>G
  5055.     <.'.'.G>
  5056.       or
  5057.     ''G
  5058.  
  5059.   If you include a DBCS quotation mark within a graphic constant, and DBCS 
  5060.   quotes enclose the GRAPHIC constant, you must double the included quote.  The 
  5061.   following examples show graphic constants that contain one DBCS quote: 
  5062.  
  5063.     <.'.'.'.'>G                  /* contained quote doubled */
  5064.     '<.'>'G                      /* single contained quote  */
  5065.  
  5066. Syntax 
  5067.  
  5068. ΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ'GΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5069.          Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5070.          Γöé                       Γöé  Γöé
  5071.          ΓööΓöÇΓöÇ<ΓöÇΓöÇgraphic symbolΓöÇΓöÇ>ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  5072.  
  5073.  
  5074. ΓòÉΓòÉΓòÉ <hidden> GX (Graphic Hex) Graphic String Constants ΓòÉΓòÉΓòÉ
  5075.  
  5076. Description 
  5077.   The GX string constant describes a GRAPHIC constant using hexadecimal 
  5078.   notation. The data type remains GRAPHIC. 
  5079.  
  5080.   You can use GX string constants wherever you use character string constants. 
  5081.  
  5082.   You do not need the GRAPHIC compile-time option or the GRAPHIC ENVIRONMENT 
  5083.   option to use the GX string constant. 
  5084.  
  5085.   Four hexadecimal digits (two bytes) represent each graphic element. 
  5086.   Therefore, you must specify a number of digits that are a multiple of four. 
  5087.   Enclose the digits in quotes and use the "GX" suffix after them. 
  5088.  
  5089.   The use of GX might limit the portability of your program. 
  5090.  
  5091. Examples 
  5092.  
  5093.     '42C142C242C3'GX  is the same as '<.A.B.C>'G
  5094.     ''GX              is the same as ''G
  5095.  
  5096. Syntax 
  5097.  
  5098. ΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ'GXΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5099.          Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  5100.          Γöé                     Γöé  Γöé
  5101.          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇhex-digit groupΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  5102.  
  5103.  
  5104. ΓòÉΓòÉΓòÉ <hidden> Graphic String Variables ΓòÉΓòÉΓòÉ
  5105.  
  5106. Description 
  5107.   The GRAPHIC (abbreviation G) attribute specifies a graphic variable. Graphic 
  5108.   variables can contain any DBCS characters. The variable must contain an even 
  5109.   number of bytes. 
  5110.  
  5111. Syntax 
  5112.  
  5113.  
  5114. ΓöÇΓöÇΓöÇΓöÇΓöÇGRAPHICΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5115.                   ΓööΓöÇΓöÇ(ΓöÇlengthΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  5116.                                ΓööΓöÇREFERΓöÇ(ΓöÇvariableΓöÇ)ΓöÇΓöÇΓöÿ
  5117.  
  5118.  
  5119. ΓòÉΓòÉΓòÉ <hidden> Mixed String Data ΓòÉΓòÉΓòÉ
  5120.  
  5121. Description 
  5122.   Mixed data can contain SBCS and DBCS data.  Mixed data is represented by the 
  5123.   CHARACTER data type, and follows the processing rules for character data. The 
  5124.   GRAPHIC compile-time option must be in effect for mixed string constants to 
  5125.   be accepted. If the GRAPHIC ENVIRONMENT option is not specified for STREAM 
  5126.   I/O files having mixed constants, the CONVERSION condition is raised. 
  5127.  
  5128.   Quotes must enclose a mixed character string constant (either SBCS or DBCS) 
  5129.   and the M suffix must follow it. The data always begins and ends in SBCS, and 
  5130.   shift codes enclose the DBCS portions. 
  5131.  
  5132.   The following rules apply: 
  5133.  
  5134.     Shift-out/shift-in pairs must match; you cannot nest pairs. 
  5135.     The DBCS portion cannot contain '0E'X or 'OF'X in either byte. 
  5136.     The characters portion cannot contain the values '0E'X or '0F'X, unless 
  5137.      specifically intended as shift codes. 
  5138.  
  5139. Examples 
  5140.   Using mixed string constants 
  5141.  
  5142. Syntax 
  5143.  
  5144. ΓöÇΓöÇΓöÇΓöÇ'ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ'MΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5145.          Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  5146.          Γöé                             Γöé   Γöé
  5147.          ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇcharacterΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  5148.             Γö£ΓöÇΓöÇ"ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5149.             Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  5150.             Γöé                    Γöé   Γöé
  5151.             ΓööΓöÇΓöÇ<ΓöÇΓöÇgraphic-symbolΓöÇΓöÇΓö┤ΓöÇ>ΓöÇΓöÿ
  5152.  
  5153.  
  5154. ΓòÉΓòÉΓòÉ <hidden> Area Data Items ΓòÉΓòÉΓòÉ
  5155.  
  5156. Description 
  5157.   Area variables describe the areas of storage that are reserved for the 
  5158.   allocation of based variables. This reserved storage can be allocated to, and 
  5159.   freed from, based variables by the ALLOCATE and FREE statements. Area 
  5160.   variables can have any storage class and must be aligned. 
  5161.  
  5162.   When a based variable is allocated and an area is not specified, storage is 
  5163.   obtained from wherever it is available. Consequently, allocated based 
  5164.   variables can be scattered widely throughout main storage.  This is not 
  5165.   significant for internal operations because items are readily accessed using 
  5166.   the pointers. 
  5167.  
  5168.   However, if these allocations are transmitted to a data set, the items have 
  5169.   to be collected together. Items allocated within an area variable are already 
  5170.   collected and can be transmitted or assigned as a unit while retaining their 
  5171.   separate identities. 
  5172.  
  5173.   Review the following rules regarding the use of area variables: 
  5174.  
  5175.     Offset variables can be used to identify the locations of based variables 
  5176.      within area variables. 
  5177.  
  5178.     An area can be assigned or transmitted complete with its contained 
  5179.      allocations. Therefore, a set of based allocations can be treated as one 
  5180.      unit for assignment and input/output while each allocation retains its 
  5181.      original identity. 
  5182.  
  5183.     The size of an area is adjustable in the same way as string length or an 
  5184.      array bound, and therefore can be specified by an expression or by a REFER 
  5185.      option for a based area. 
  5186.  
  5187.     A variable is given the AREA attribute contextually by its appearance in 
  5188.      the OFFSET attribute or an IN option, or by explicit declaration. 
  5189.  
  5190.     No operators, including comparison, can be applied to area variables. 
  5191.  
  5192. Examples 
  5193.   Examples of AREA declarations are: 
  5194.  
  5195.     DECLARE AREA1 AREA(2000),
  5196.             AREA2 AREA;
  5197.  
  5198. Related Information 
  5199.   Additional area variable storage considerations 
  5200.  
  5201. Syntax 
  5202.  
  5203. ΓöÇΓöÇΓöÇAREAΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  5204.            Γö£ΓöÇ(*)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5205.            ΓööΓöÇ(expressionΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÿ
  5206.                           ΓööΓöÇREFER(variable)ΓöÇΓöÿ
  5207.  
  5208.  
  5209. ΓòÉΓòÉΓòÉ <hidden> Area Variable Storage ΓòÉΓòÉΓòÉ
  5210.  
  5211. Review the following rules regarding storage considerations for area variables: 
  5212.  
  5213.  The area size for areas that have the storage classes AUTOMATIC or CONTROLLED 
  5214.   is given by an expression whose integer value specifies the number of 
  5215.   reserved bytes. 
  5216.  
  5217.  If an area has the BASED attribute, the area size must be an integer unless 
  5218.   the area is a member of a based structure and the REFER option is used. 
  5219.  
  5220.  The size for areas of static storage class must be specified as an integer. 
  5221.  
  5222.  In addition to the declared size, an extra 16 bytes of control information 
  5223.   precedes the reserved size of an area. It contains details such as the amount 
  5224.   of storage in use. 
  5225.  
  5226.  The amount of reserved storage that is actually in use is known as the extent 
  5227.   of the area. When an area variable is allocated, it is empty (the area extent 
  5228.   is zero).  The maximum extent is represented by the area size. Based 
  5229.   variables can be allocated and freed within an area at any time during 
  5230.   execution, thus varying the extent of the area. 
  5231.  
  5232.  When a based variable is freed, the storage it occupied is available for 
  5233.   other allocations.  A chain of available storage within an area is 
  5234.   maintained; the head of the chain is held within the control information. 
  5235.  
  5236.  Inevitably, as based variables with different storage requirements are 
  5237.   allocated and freed, gaps will occur in the area when allocations do not fit 
  5238.   available spaces. These gaps are included in the extent of the area. 
  5239.  
  5240.  
  5241. ΓòÉΓòÉΓòÉ <hidden> Label Data Items ΓòÉΓòÉΓòÉ
  5242.  
  5243. Description 
  5244.   A label data item is a label constant or the value of a label variable. 
  5245.  
  5246.   Use labels to identify parts of your programs.  The LABEL attribute specifies 
  5247.   that the name being declared is a label variable and has label constants as 
  5248.   values.  To aid in optimization of the object program, the attribute 
  5249.   specification can also include the values that the name can have during 
  5250.   execution of the program. 
  5251.  
  5252.   If a list of label-constants is given, the variable must have as its value a 
  5253.   member of the list when used in a GO TO statement or R-format item.  The 
  5254.   label-constants in the list must be known in the block containing the 
  5255.   declaration.  The maximum allowable number of label-constants in the list is 
  5256.   125. 
  5257.  
  5258.   The parenthesized list of label-constants can be used in a LABEL attribute 
  5259.   specification for a label array. 
  5260.  
  5261.   A label variable can have another label variable or a label constant assigned 
  5262.   to it. When such an assignment is made, the environment of the source label 
  5263.   is assigned to the target. 
  5264.  
  5265. Examples 
  5266.   Using label data items 
  5267.  
  5268. Syntax 
  5269.  
  5270.  
  5271. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇLABELΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5272.                 Γöé  ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  5273.                 ΓööΓöÇ(Γö┤ΓöÇlabel-constantΓöÇΓöÿΓöÇ)ΓöÇΓöÿ
  5274.  
  5275.  
  5276. ΓòÉΓòÉΓòÉ <hidden> Examples- Using Label Data Items ΓòÉΓòÉΓòÉ
  5277.  
  5278. You can use label data items as constants and variables in your programs. For 
  5279. example: 
  5280.  
  5281.  In the following example, ABCDE is a label constant. The statement can be 
  5282.   executed either by normal sequential execution of instructions or by 
  5283.   transferring control to this statement from some other point in the program 
  5284.   by means of a GO TO statement. 
  5285.  
  5286.     ABCDE:  MILES = SPEED*HOURS
  5287.  
  5288.  In the following example, transfer is made to a particular element of the 
  5289.   array Z by giving I a value of 1, 2, or 3. If I=2, omitting Z(2) would cause 
  5290.   an error. 
  5291.  
  5292.     DECLARE Z(3) LABEL;
  5293.     GO TO Z(I);
  5294.        .
  5295.        .
  5296.     Z(1):  IF X = Y THEN RETURN;
  5297.        .
  5298.        .
  5299.     Z(2):  A = A + B + C * D;
  5300.        .
  5301.        .
  5302.     Z(3):  A = A + 10;
  5303.  
  5304.  
  5305. ΓòÉΓòÉΓòÉ <hidden> Data Aggregates ΓòÉΓòÉΓòÉ
  5306.  
  5307. Description 
  5308.   Data items can be single data elements, or they can be grouped together to 
  5309.   form data aggregates. 
  5310.  
  5311.   Data aggregates are groups of data items that can be referred to either 
  5312.   collectively or individually and can either be arrays or structures. 
  5313.  
  5314.   Any type of data can be grouped into arrays or structures. Both arrays and 
  5315.   structures use a name to refer to aggregate of data. Unlike arrays, however, 
  5316.   each data element in a structure also has a name. 
  5317.  
  5318. Related Information 
  5319.  
  5320.     Array declarations 
  5321.     Structure declarations 
  5322.  
  5323.  
  5324. ΓòÉΓòÉΓòÉ <hidden> Declaring Data Items ΓòÉΓòÉΓòÉ
  5325.  
  5326. Description 
  5327.   When a PL/I program is executed, it manipulates many different data items. 
  5328.   Each data item, except an arithmetic or string constant, is referred to in 
  5329.   the program by a name. You give attributes and meaning to a data name by 
  5330.   using an explicit or implicit declaration. 
  5331.  
  5332.   Most attributes of data items are known at the time the program is compiled. 
  5333.   For non-STATIC items, attribute values (the bounds of the dimensions of 
  5334.   arrays, the lengths of strings, area sizes, initial values) and some file 
  5335.   attributes may not be determined until execution of the program. 
  5336.  
  5337. Related Information 
  5338.  
  5339.     Explicit declarations 
  5340.     Implicit declarations 
  5341.     Array declarations 
  5342.     Structure declarations 
  5343.     Alignment and attributes 
  5344.     Scope of declarations 
  5345.     Defaults for attributes 
  5346.  
  5347.  
  5348. ΓòÉΓòÉΓòÉ <hidden> Explicit Declarations ΓòÉΓòÉΓòÉ
  5349.  
  5350. Description 
  5351.   A name is explicitly declared if it appears: 
  5352.  
  5353.     In a DECLARE statement. The DECLARE statement explicitly declares 
  5354.      attributes of names. 
  5355.  
  5356.     In a parameter list.  When a name appears in a parameter list, it is that 
  5357.      same as if a DECLARE statement for that name appeared immediately 
  5358.      following the PROCEDURE or ENTRY statement in which the parameter list 
  5359.      occurs (though that same name can also appear in a DECLARE statement 
  5360.      internal to the same block). 
  5361.  
  5362.     As an entry constant. Labels of PROCEDURE and ENTRY statements constitute 
  5363.      declarations of the entry constants within the containing procedure. 
  5364.  
  5365.     As a label constant. A label constant may be non-executable statement that 
  5366.      constitutes an explicit declaration of the label constant within the 
  5367.      containing procedure. 
  5368.  
  5369. Example 
  5370.   Using explicit declarations 
  5371.  
  5372. Related Information 
  5373.   Scope of declarations 
  5374.  
  5375.  
  5376. ΓòÉΓòÉΓòÉ <hidden> Using Explicit Declarations ΓòÉΓòÉΓòÉ
  5377.  
  5378. You can explicitly declare variables in your PL/I programs. 
  5379.  
  5380. The scope of an explicit declaration of a name is the block containing the 
  5381. declaration. This includes all contained blocks, except those blocks (and any 
  5382. blocks contained within them) to which another explicit declaration of the same 
  5383. name is internal. 
  5384.  
  5385. Consider the following example: 
  5386.  
  5387.  
  5388.  P  A  B  B'                   C  C' D  Q  R
  5389. ΓöîΓöÇ ΓöîΓöÇ ΓöîΓöÇ                                ΓöÇΓöÉ
  5390. Γöé  Γöé  Γöé       P: PROC;                   Γöé
  5391. Γöé  Γöé  Γöé                                  Γöé
  5392. Γöé  Γöé  Γöé          DCL A, B;               Γöé
  5393. Γöé  Γöé  ΓööΓöÇ ΓöîΓöÇ                    ΓöÇΓöÉ        Γöé ΓöÇΓöÉ
  5394. Γöé  Γöé     Γöé       Q: PROC;       Γöé        Γöé  Γöé
  5395. Γöé  Γöé     Γöé                      Γöé        Γöé  Γöé
  5396. Γöé  Γöé     Γöé         DCL B, C;    Γöé        Γöé  Γöé
  5397. Γöé  Γöé     Γöé                     ΓöÇΓöÿ ΓöÇΓöÉ ΓöÇΓöÉ  Γöé  Γöé
  5398. Γöé  Γöé     Γöé         R: PROC;        Γöé  Γöé  Γöé  Γöé
  5399. Γöé  Γöé     Γöé                         Γöé  Γöé  Γöé  Γöé
  5400. Γöé  Γöé     Γöé            DCL C,D;     Γöé  Γöé  Γöé  Γöé
  5401. Γöé  Γöé     Γöé                         Γöé  Γöé  Γöé  Γöé
  5402. Γöé  Γöé     Γöé            END R;       Γöé  Γöé  Γöé  Γöé
  5403. Γöé  Γöé     Γöé                     ΓöÇΓöÉ ΓöÇΓöÿ ΓöÇΓöÿ  Γöé  Γöé
  5404. Γöé  Γöé     ΓööΓöÇ        END Q;       Γöé        Γöé  Γöé
  5405. Γöé  Γöé  ΓöîΓöÇ                       ΓöÇΓöÿ        Γöé ΓöÇΓöÿ
  5406. Γöé  Γöé  Γöé          END P;                  Γöé
  5407. ΓööΓöÇ ΓööΓöÇ ΓööΓöÇ                                ΓöÇΓöÿ
  5408.  
  5409. The lines indicate the scope of the declaration of the names. B and B' indicate 
  5410. the two distinct uses of the name B; C and C' indicate the two distinct uses of 
  5411. the name C. 
  5412.  
  5413.  
  5414. ΓòÉΓòÉΓòÉ <hidden> DECLARE Statement ΓòÉΓòÉΓòÉ
  5415.  
  5416. Description 
  5417.   The DECLARE statement (abbreviation DCL) specifies some or all of the 
  5418.   attributes of a name. Certain attributes are often determined by context. If 
  5419.   the attributes are not explicitly declared and cannot be determined by 
  5420.   context, default attributes are applied. 
  5421.  
  5422.   In some cases, the combination of defaults and context determination make it 
  5423.   unnecessary to use a DECLARE statement. 
  5424.  
  5425.   DECLARE statements can be an important part of the documentation of a 
  5426.   program. Consequently, you can make liberal use of declarations, even when 
  5427.   default attributes suffice or when an implicit declaration is possible. 
  5428.  
  5429.   Condition prefixes cannot be attached to a DECLARE statement. 
  5430.  
  5431. Related Information 
  5432.  
  5433.     Attribute specification 
  5434.     Factoring of attributes 
  5435.  
  5436. Syntax 
  5437.  
  5438.                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5439.                                                                  Γöé
  5440. ΓöÇΓöÇΓöÇΓöÇDECLAREΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇnameΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇ;ΓöÇΓöÇ
  5441.                  ΓööΓöÇΓöÇlevelΓöÇΓöÇΓöÿ        Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé  ΓööΓöÇSYSTEMΓöÇΓöÿ
  5442.                                     Γöé            Γöé Γöé
  5443.                                     ΓööΓöÇΓöÇΓöÇattributeΓöÇΓö┤ΓöÇΓöÿ
  5444.  
  5445. where attribute is:
  5446.  
  5447.      ΓöîΓöÇΓöÇALIGNEDΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5448.      Γö£ΓöÇΓöÇAREAΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5449.      Γö£ΓöÇΓöÇAUTOMATICΓöÇΓöÇΓöÇΓöñ
  5450.      Γö£ΓöÇΓöÇBASEDΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5451.      Γö£ΓöÇΓöÇBINARYΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5452.      Γö£ΓöÇΓöÇBITΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5453.      Γö£ΓöÇΓöÇBUILTINΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5454.      Γö£ΓöÇΓöÇCHARACTERΓöÇΓöÇΓöÇΓöñ
  5455.      Γö£ΓöÇΓöÇCOMPLEXΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5456.      Γö£ΓöÇΓöÇCONDITIONΓöÇΓöÇΓöÇΓöñ
  5457.      Γö£ΓöÇΓöÇCONNECTEDΓöÇΓöÇΓöÇΓöñ
  5458.      Γö£ΓöÇΓöÇCONTROLLEDΓöÇΓöÇΓöñ
  5459.      Γö£ΓöÇΓöÇDECIMALΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5460.      Γö£ΓöÇΓöÇDEFINEDΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5461.      Γö£ΓöÇΓöÇENTRYΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5462.      Γö£ΓöÇΓöÇEXTERNALΓöÇΓöÇΓöÇΓöÇΓöñ
  5463.      Γö£ΓöÇΓöÇEVENTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5464.      Γö£ΓöÇΓöÇFILEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5465.      Γö£ΓöÇΓöÇFIXEDΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5466.      Γö£ΓöÇΓöÇFLOATΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5467.      Γö£ΓöÇΓöÇGRAPHICΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5468.      Γö£ΓöÇΓöÇINITIALΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5469.      Γö£ΓöÇΓöÇINTERNALΓöÇΓöÇΓöÇΓöÇΓöñ
  5470.      Γö£ΓöÇΓöÇLABELΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5471.      Γö£ΓöÇΓöÇOFFSETΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5472.      Γö£ΓöÇΓöÇOPTIONSΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5473.      Γö£ΓöÇΓöÇPICTUREΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5474.      Γö£ΓöÇΓöÇPOINTERΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5475.      Γö£ΓöÇΓöÇPOSITIONΓöÇΓöÇΓöÇΓöÇΓöñ
  5476.      Γö£ΓöÇΓöÇREALΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5477.      Γö£ΓöÇΓöÇRETURNSΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5478.      Γö£ΓöÇΓöÇSTATICΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5479.      Γö£ΓöÇΓöÇUNALIGNEDΓöÇΓöÇΓöÇΓöñ
  5480.      Γö£ΓöÇΓöÇVARIABLEΓöÇΓöÇΓöÇΓöÇΓöñ
  5481.      ΓööΓöÇΓöÇVARYINGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5482.  
  5483. Aggregate Variables: 
  5484.  
  5485. Arrays 
  5486.   (dimension) may be added to the declaration of any variable. 
  5487.  
  5488. Structures 
  5489.  
  5490.     For a major structure; scope, storage (except INITIAL), and alignment, and 
  5491.      the LIKE attribute may be specified. 
  5492.  
  5493.     For a minor structure; alignment and the LIKE attribute may be specified. 
  5494.  
  5495.     Members of structure have the INTERNAL attribute. 
  5496. _____________________________________________________________________________________________ 
  5497.  
  5498. Notes 
  5499.  
  5500.     1. Undeclared names, or names declared without a data type, default to 
  5501.        coded arithmetic variables. 
  5502.  
  5503.     2. Arrays of nonstatic label variables may be initialized by subscripted 
  5504.        label prefixes. 
  5505.  
  5506.     3. STATIC ENTRY and STATIC LABEL conflict with INITIAL. 
  5507.  
  5508.     4. INITIAL CALL conflicts with STATIC. 
  5509.  
  5510.     5. POSITION can be used only with string overlay defining. 
  5511.  
  5512.     6. FILE constant attributes are described in Declaring File Constants. 
  5513.  
  5514.  
  5515. ΓòÉΓòÉΓòÉ <hidden> Attribute Specification ΓòÉΓòÉΓòÉ
  5516.  
  5517. In an explicit declaration, the attributes can appear in any order, except for 
  5518. the dimension and the precision attributes. 
  5519.  
  5520. All attributes given explicitly for a name must be declared together in a 
  5521. DECLARE statement, except that: 
  5522.  
  5523.  Names having the FILE attribute can also be given attributes in an OPEN 
  5524.   statement (or have attributes implied by an implicit opening) as well. 
  5525.  
  5526.  The parameter attribute is explicitly declared by the appearance of the name 
  5527.   in a parameter list. A DECLARE statement internal to the block can specify 
  5528.   additional attributes. 
  5529.  
  5530. Attributes of external names, in separate blocks and compilations, must be 
  5531. consistent (except that an INITIAL attribute given in one declaration in a 
  5532. compiled procedure need not be repeated). 
  5533.  
  5534. The use of the OPTIONS attribute does not imply ENTRY. 
  5535.  
  5536.  
  5537. ΓòÉΓòÉΓòÉ <hidden> Factoring of Attributes ΓòÉΓòÉΓòÉ
  5538.  
  5539. Description 
  5540.   Attributes common to several names can be factored to eliminate repeated 
  5541.   specification of the same attribute. 
  5542.  
  5543.   Factoring is achieved by enclosing the names in parentheses followed by the 
  5544.   set of attributes which apply to all of the names. The dimension attribute 
  5545.   can be factored. The precision attribute can be factored only in conjunction 
  5546.   with an associated keyword attribute. 
  5547.  
  5548.   Factoring can also be used on elementary names within structures. A factored 
  5549.   level number must precede the parenthesized list. 
  5550.  
  5551.   Declarations within the parenthesized list are separated by commas. No 
  5552.   factored attribute can be overridden for any of the names, but any name 
  5553.   within the list can be given other attributes as long as there is no conflict 
  5554.   with the factored attributes. 
  5555.  
  5556. Examples 
  5557.   The following examples show factoring. 
  5558.  
  5559.     DECLARE (A,B,C,D) BINARY FIXED (31);
  5560.     DECLARE (E DECIMAL(6,5), F CHARACTER(10)) STATIC;
  5561.     DECLARE 1 A, 2(B,C,D) (3,2) BINARY FIXED (15);
  5562.  
  5563.   Factoring can also be nested: 
  5564.  
  5565.     DECLARE ((A,B) FIXED(10),C FLOAT(5)) EXTERNAL;
  5566.  
  5567.  
  5568. ΓòÉΓòÉΓòÉ <hidden> Implicit Declarations ΓòÉΓòÉΓòÉ
  5569.  
  5570. Description 
  5571.   If a name appears in a program and is not explicitly declared, it is 
  5572.   implicitly declared. The scope of an implicit declaration is determined as if 
  5573.   the name were declared in a DECLARE statement immediately following the 
  5574.   PROCEDURE statement of the external procedure in which the name is used. 
  5575.  
  5576.   Implicit declaration has the same effect as if the name were declared in the 
  5577.   external procedure, even when all the occurrences of the name are internal to 
  5578.   a block (called B, for example) that is contained in the external procedure. 
  5579.   Consequently, the name is known throughout the entire external procedure, 
  5580.   except for any blocks in which the name is explicitly declared. It is as if 
  5581.   block B inherits the declaration from the external procedure that contains 
  5582.   it. 
  5583.  
  5584. Related Information 
  5585.   Contextual declaration 
  5586.  
  5587.  
  5588. ΓòÉΓòÉΓòÉ <hidden> Contextual Declarations ΓòÉΓòÉΓòÉ
  5589.  
  5590. Description 
  5591.   Some attributes for a name declared implicitly can be determined from the 
  5592.   context in which the name appears. These cases, called contextual 
  5593.   declarations, are: 
  5594.  
  5595.     A name that appears in a CALL statement, in a CALL option, or that is 
  5596.      followed by an argument list, is given the BUILTIN and INTERNAL 
  5597.      attributes. 
  5598.  
  5599.     A name that appears in a FILE or COPY option, or a name that appears in an 
  5600.      ON, SIGNAL, or REVERT statement for a condition that requires a file name, 
  5601.      is given the FILE attribute. 
  5602.  
  5603.     A name that appears in an ON CONDITION, SIGNAL CONDITION, or REVERT 
  5604.      CONDITION statement is given the CONDITION attribute. 
  5605.  
  5606.     A name that appears in an EVENT option or in a WAIT statement is given the 
  5607.      EVENT attribute. 
  5608.  
  5609.     A name that appears in the BASED attribute, in a SET option, or on the 
  5610.      left-hand side of a locator qualification symbol is given the POINTER 
  5611.      attribute. 
  5612.  
  5613.     A name that appears in an IN option, or in the OFFSET attribute, is given 
  5614.      the AREA attribute. 
  5615.  
  5616. Examples 
  5617.   Using contextual declarations 
  5618.  
  5619.  
  5620. ΓòÉΓòÉΓòÉ <hidden> Using Contextual Declarations ΓòÉΓòÉΓòÉ
  5621.  
  5622. Examples of contextual declaration are: 
  5623.  
  5624. READ FILE (PREQ) INTO (Q);
  5625. ALLOCATE X IN (S);
  5626.  
  5627. In these statements, PREQ is given the FILE attribute, and S is given the AREA 
  5628. attribute. 
  5629.  
  5630. Implicit declarations that are not contextual declarations acquire all 
  5631. attributes by default. 
  5632.  
  5633. Since a contextual declaration cannot exist within the scope of an explicit 
  5634. declaration, it is impossible for the context of a name to add to the 
  5635. attributes established for that name in an explicit declaration. For example, 
  5636. the following procedure is invalid: 
  5637.  
  5638. P:  PROC (F);
  5639.     READ FILE(F) INTO(X);
  5640.     END P;
  5641.  
  5642. The name F is in a parameter list and is, therefore, explicitly declared. The 
  5643. language-specified defaults REAL DECIMAL FLOAT conflict with the attributes 
  5644. that would normally be given to F by its appearance in the FILE option. 
  5645.  
  5646.  
  5647. ΓòÉΓòÉΓòÉ <hidden> Array Declaration ΓòÉΓòÉΓòÉ
  5648.  
  5649. Description 
  5650.   An array is an n-dimensional collection of elements that have identical 
  5651.   attributes. Only the array itself is given a name. An individual item of an 
  5652.   array is referred to by giving its position within the array. 
  5653.  
  5654.   The parenthesized number or numbers following the array name in a DECLARE 
  5655.   statement is the dimension attribute specification. 
  5656.  
  5657. Related Information 
  5658.   Dimension attribute 
  5659.  
  5660.  
  5661. ΓòÉΓòÉΓòÉ <hidden> Dimension attribute ΓòÉΓòÉΓòÉ
  5662.  
  5663. Description 
  5664.   The dimension attribute specifies the number of dimensions of an array. This 
  5665.   attribute also specifies either the bounds of each dimension or indicates 
  5666.   that the upper bound is taken from an associated argument. 
  5667.  
  5668.   Bounds that are expressions are evaluated and converted to FIXED BINARY 
  5669.   (31,0) when storage is allocated for the array beginning and end of that 
  5670.   dimension. 
  5671.  
  5672.   The extent is the number of integers between, and including, the lower and 
  5673.   upper bounds. 
  5674.  
  5675. Examples 
  5676.   Using arrays 
  5677.  
  5678. Related Information 
  5679.  
  5680.     Array subscripts 
  5681.     Cross sections of arrays 
  5682.  
  5683. Syntax 
  5684.  
  5685.          ΓöîΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5686.                    Γöé
  5687. ΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöÇboundΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5688.  
  5689. where bound is
  5690. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇupper-boundΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5691.       Γöé  ΓööΓöÇΓöÇlower-boundΓöÇ:ΓöÇΓöÇΓöÿ                Γöé
  5692.       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5693.  
  5694. where upper-bound and lower-bound are
  5695. ΓöÇΓöÇΓöÇΓöÇexpressionΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  5696.                   ΓööΓöÇΓöÇREFERΓöÇΓöÇ(ΓöÇΓöÇvariableΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  5697.  
  5698. The bounds must be the first attribute after the name (or the parenthesized 
  5699. list of names) in the declaration. 
  5700.  
  5701.  
  5702. ΓòÉΓòÉΓòÉ <hidden> Using Arrays ΓòÉΓòÉΓòÉ
  5703.  
  5704. Review the following examples for help with using arrays of arithmetic data: 
  5705.  
  5706.  Consider the following declaration: 
  5707.  
  5708.     DECLARE LIST (8) FIXED DECIMAL (3);
  5709.  
  5710.   LIST is declared as a one-dimensional array of eight elements, each one a 
  5711.   fixed-point decimal element of three digits. The one dimension of LIST has 
  5712.   bounds of 1 and 8; its extent is 8. 
  5713.  
  5714.  In the example: 
  5715.  
  5716.     DECLARE TABLE (4,2) FIXED DEC (3);
  5717.  
  5718.   TABLE is declared as a two-dimensional array of eight fixed-point decimal 
  5719.   elements. The two dimensions of TABLE have bounds of 1 and 4 and 1 and 2; the 
  5720.   extents are 4 and 2. 
  5721.  
  5722.  Other examples are: 
  5723.  
  5724.     DECLARE LIST_A (4:11);
  5725.     DECLARE LIST_B (-4:3);
  5726.  
  5727.   In the first example, the bounds are 4 and 11; in the second they are -4 and 
  5728.   3. The extents are the same; in each case, there are 8 integers from the 
  5729.   lower bound through the upper bound. 
  5730.  
  5731. In the manipulation of array data involving more than one array, the bounds 
  5732. (not merely the extents) must be identical. Although LIST, LIST_A, and LIST_B 
  5733. all have the same extent, the bounds are not identical. 
  5734.  
  5735.  
  5736. ΓòÉΓòÉΓòÉ <hidden> Array Subscripts ΓòÉΓòÉΓòÉ
  5737.  
  5738. Description 
  5739.   The bounds of an array determine the way in which you refer to elements of 
  5740.   the array. 
  5741.  
  5742.   A subscripted reference to an array must contain as many subscripts as there 
  5743.   are dimensions in the array. 
  5744.  
  5745.   Any expression that yields a valid arithmetic value can be used for a 
  5746.   subscript. If necessary, the value is converted to FIXED BINARY(31,0). 
  5747.  
  5748. Examples 
  5749.  
  5750.     Using one-dimensional arrays 
  5751.     Using multi-dimensional arrays 
  5752.     Using arrays and bounds 
  5753.  
  5754.  
  5755. ΓòÉΓòÉΓòÉ <hidden> Using One-Dimensional Arrays ΓòÉΓòÉΓòÉ
  5756.  
  5757. Consider the following declaration: 
  5758.  
  5759. DECLARE LIST (8) FIXED DECIMAL (3);
  5760.  
  5761. where the following data items are assigned to the one-dimensional array LIST: 
  5762.  
  5763. 20 5 10 30 630 150 310 70
  5764.  
  5765. The different elements are referred to as follows: 
  5766.  
  5767.  
  5768. REFERENCE      ELEMENT
  5769. ______________________
  5770. LIST (1)         20
  5771. LIST (2)         5
  5772. LIST (3)         10
  5773. LIST (4)         30
  5774. LIST (5)         630
  5775. LIST (6)         150
  5776. LIST (7)         310
  5777. LIST (8)         70
  5778.  
  5779. Each of the parenthesized numbers following LIST is a subscript. A 
  5780. parenthesized subscript following an array name reference identifies a 
  5781. particular data item within the array. 
  5782.  
  5783. A reference to a subscripted name, such as LIST(4), refers to a single element 
  5784. and is an element variable. The entire array can be referred to by the 
  5785. unsubscripted name of the array- for example, LIST. 
  5786.  
  5787.  
  5788. ΓòÉΓòÉΓòÉ <hidden> Using Multi-Dimensional Arrays ΓòÉΓòÉΓòÉ
  5789.  
  5790. Consider the following declaration: 
  5791.  
  5792. DECLARE TABLE (4,2) FIXED DEC (3);
  5793.  
  5794. where the following data items are assigned to the two-dimensional array TABLE: 
  5795.  
  5796. 20 5 10 30 630 150 310 70
  5797.  
  5798. TABLE can be illustrated as a matrix of four rows and two columns: 
  5799.  
  5800.  
  5801. TABLE(m,n)    (m,1)     (m,2)
  5802. ______________________________
  5803. (1,n)           20         5
  5804. (2,n)           10        30
  5805. (3,n)          630       150
  5806. (4,n)          310        70
  5807.  
  5808. Note:   The use of a matrix to illustrate TABLE is purely conceptual. It has no 
  5809. relationship to the way the items are actually organized in storage. 
  5810.  
  5811. An element of TABLE is referred to by a subscripted name with two parenthesized 
  5812. subscripts, separated by a comma. For example, TABLE(2,1) would specify the 
  5813. first item in the second row, namely the data item 10. 
  5814.  
  5815. Data items are assigned to an array in row major order. This means that the 
  5816. rightmost subscript (representing rows) varies most rapidly. For example, 
  5817. assignment to TABLE would be to TABLE(1,1), TABLE(1,2), TABLE(2,1), TABLE(2,2), 
  5818. and so forth. 
  5819.  
  5820.  
  5821. ΓòÉΓòÉΓòÉ <hidden> Using Arrays and Bounds ΓòÉΓòÉΓòÉ
  5822.  
  5823. Consider the following declarations: 
  5824.  
  5825. DECLARE LIST_A (4:11);
  5826. DECLARE LIST_B (-4:3);
  5827.  
  5828. where the following data items are assigned to the arrays LIST_A and LIST_B: 
  5829.  
  5830. 20 5 10 30 630 150 310 70
  5831.  
  5832. In this case, it is referenced as follows: 
  5833.  
  5834.  
  5835. Reference      Element      Reference
  5836.  
  5837. LIST_A (4)       20         LIST_B (-4)
  5838. LIST_A (5)        5         LIST_B (-3)
  5839. LIST_A (6)       10         LIST_B (-2)
  5840. LIST_A (7)       30         LIST_B (-1)
  5841. LIST_A (8)      630         LIST_B (0)
  5842. LIST_A (9)      150         LIST_B (1)
  5843. LIST_A (10)     310         LIST_B (2)
  5844. LIST_A (11)      70         LIST_B (3)
  5845.  
  5846.  
  5847. ΓòÉΓòÉΓòÉ <hidden> Cross Sections of Arrays ΓòÉΓòÉΓòÉ
  5848.  
  5849. Description 
  5850.   Cross sections of arrays can be referred to by using an asterisk for a 
  5851.   subscript. The asterisk specifies that the entire extent is used. 
  5852.  
  5853.   A subscripted name containing asterisk subscripts represents not a single 
  5854.   data element, but an array with as many dimensions as there are asterisks. 
  5855.   Consequently, such a name is not an element expression, but an array 
  5856.   expression. 
  5857.  
  5858.   A reference to a cross section of an array can refer to two or more elements 
  5859.   that are not adjacent in storage. The storage represented by such a cross 
  5860.   section is known as unconnected storage. 
  5861.  
  5862.   The rule is as follows: if a nonasterisk bound appears to the right of the 
  5863.   leftmost asterisk bound, the array cross section is in unconnected storage. 
  5864.   Thus, A(4,*,*) is in connected storage, but A(*,2,*) is not. 
  5865.  
  5866. Related Information 
  5867.   (NON)CONNECTED attribute 
  5868.  
  5869. Example 
  5870.  
  5871.  
  5872.     TABLE(m,n)    (m,1)     (m,2)
  5873.     ______________________________
  5874.     (1,n)           20         5
  5875.     (2,n)           10        30
  5876.     (3,n)          630       150
  5877.     (4,n)          310        70
  5878.  
  5879.   TABLE(*,1) refers to all of the elements in the first column of TABLE. It 
  5880.   specifies the cross section consisting of TABLE(1,1), TABLE(2,1), TABLE(3,1), 
  5881.   and TABLE(4,1). The subscripted name TABLE(2,*) refers to all of the data 
  5882.   items in the second row of TABLE. TABLE(*,*) refers to the entire array, as 
  5883.   does TABLE. A matrix of four rows and two columns is illustrated by TABLE 
  5884.   above. 
  5885.  
  5886.  
  5887. ΓòÉΓòÉΓòÉ <hidden> Structure Declarations ΓòÉΓòÉΓòÉ
  5888.  
  5889. Description 
  5890.   A structure is a data aggregate whose elements need not have identical 
  5891.   attributes. Like an array, the entire structure is given a name that can be 
  5892.   used to refer to the entire aggregate of data. Unlike an array, however, each 
  5893.   element of a structure also has a name. 
  5894.  
  5895.   A structure has different levels: 
  5896.  
  5897.     At the first level is the structure name called a major structure. 
  5898.  
  5899.     At a deeper level are the names of substructures called minor structures. 
  5900.  
  5901.     At the deepest are the element names called elementary names. An 
  5902.      elementary name in a structure can represent an array, in which case it is 
  5903.      not an element variable, but an array variable. 
  5904.  
  5905. Usage Rules 
  5906.   The organization of a structure is specified in a DECLARE statement through 
  5907.   the use of level numbers preceding the associated names. Level numbers must 
  5908.   be integers. 
  5909.  
  5910.   A major structure name is declared with the level number 1. Minor structures 
  5911.   and elementary names are declared with level numbers greater than 1. A 
  5912.   delimiter (usually a blank) must separate the level number and its associated 
  5913.   name. 
  5914.  
  5915. Examples 
  5916.   Declaring structures 
  5917.  
  5918. Related Information 
  5919.  
  5920.     Arrays of structures 
  5921.     LIKE attribute 
  5922.     Structure mapping 
  5923.     Structure qualification 
  5924.  
  5925.  
  5926. ΓòÉΓòÉΓòÉ <hidden> Declaring Structures ΓòÉΓòÉΓòÉ
  5927.  
  5928. Description 
  5929.   The organization of a structure is specified in a DECLARE statement through 
  5930.   the use of level numbers preceding the associated names; level numbers must 
  5931.   be integers. A major structure name is declared with level number 1. Minor 
  5932.   structures and elementary names are declared with numbers greater than 1. A 
  5933.   delimiter (usually a blank) must separate the level number and its associated 
  5934.   name.  For example, the items of a payroll can be declared as follows: 
  5935.  
  5936. Examples 
  5937.   Review the following declarations of structures. 
  5938.  
  5939.     The items of a payroll can be declared as follows: 
  5940.  
  5941.           DECLARE 1 PAYROLL,                     /*  major structure name */
  5942.                     2 NAME,                      /*  minor structure name */
  5943.                       3 LAST CHAR(20),           /*  elementary name      */
  5944.                       3 FIRST CHAR(15),
  5945.                     2 HOURS,
  5946.                       3 REGULAR FIXED DEC(5,2),
  5947.                       3 OVERTIME FIXED DEC(5,2),
  5948.                     2 RATE,
  5949.                       3 REGULAR FIXED DEC(3,2),
  5950.                       3 OVERTIME FIXED DEC(3,2);
  5951.  
  5952.      Indentation is only for readability. 
  5953.  
  5954.      The statement could be written in a continuous string as: DECLARE 1 
  5955.      PAYROLL, 2 NAME, 3 LAST CHAR(20), etc... 
  5956.  
  5957.      PAYROLL is declared as a major structure containing the minor structures: 
  5958.      NAME, HOURS, and RATE. Each minor structure contains two elementary names. 
  5959.      You can refer to the entire structure by the name PAYROLL, or to portions 
  5960.      of the structure by the minor structure names. You can refer to an element 
  5961.      by referring to an elementary name. 
  5962.  
  5963.      The level numbers you choose for successively deeper levels need not be 
  5964.      consecutive. A minor structure at level n contains all the names with 
  5965.      level numbers greater than n that lie between that minor structure name 
  5966.      and the next name with a level number less than or equal to n. 
  5967.  
  5968.     PAYROLL might have been declared as follows: 
  5969.  
  5970.           DECLARE 1 PAYROLL,
  5971.                     4 NAME,
  5972.                       5 LAST CHAR(20),
  5973.                       5 FIRST CHAR(15),
  5974.                     2 HOURS,
  5975.                       6 REGULAR FIXED DEC(5,2),
  5976.                       5 OVERTIME FIXED DEC(5,2),
  5977.                     2 RATE,
  5978.                       3 REGULAR FIXED DEC(3,2),
  5979.                       3 OVERTIME FIXED DEC(3,2);
  5980.  
  5981.      This declaration results in exactly the same structuring as the previous 
  5982.      declaration. 
  5983.  
  5984.      The description of a major structure name is terminated by one of the 
  5985.      following: 
  5986.  
  5987.       - the declaration of another item with a level number 1 
  5988.  
  5989.       - the declaration of another item with no level number 
  5990.  
  5991.       - a semicolon terminating the DECLARE statement. 
  5992.  
  5993.  
  5994. ΓòÉΓòÉΓòÉ <hidden> LIKE Attribute ΓòÉΓòÉΓòÉ
  5995.  
  5996. Description 
  5997.   The LIKE attribute specifies that the variable being declared is a structure 
  5998.   variable with the same structuring as the variable following the attribute 
  5999.   keyword LIKE. Substructure names, elementary names, and their attributes are 
  6000.   identical. 
  6001.  
  6002.   Additional substructures or elementary names cannot be added to the created 
  6003.   structure. Any level number that immediately follows the structure-variable 
  6004.   in the LIKE attribute specification in a DECLARE statement must be equal to 
  6005.   or less than the level number of the name declared with the LIKE attribute. 
  6006.  
  6007.   Attributes of the structure-variable itself do not carry over to the created 
  6008.   structure. For example, storage class attributes do not carry over. 
  6009.  
  6010.   If the structure-variable following the keyword LIKE represents an array of 
  6011.   structures, its dimension attribute is not carried over. However, attributes 
  6012.   of substructure names and elementary names are carried over; contained 
  6013.   dimension and length attributes are recomputed. 
  6014.  
  6015.   If a direct application of the description to the structure declared LIKE 
  6016.   causes an incorrect continuity of level numbers (for example, if a minor 
  6017.   structure at level 3 were declared LIKE a major structure at level 1) the 
  6018.   level numbers are modified by a constant before application. 
  6019.  
  6020.   The LIKE attribute is expanded before the defaults are applied and before the 
  6021.   ALIGNED and UNALIGNED attributes are applied to the contained elements of the 
  6022.   LIKE structure-variable. The only ALIGNED and UNALIGNED attributes that are 
  6023.   carried over from the structure-variable are those explicitly specified for 
  6024.   its substructures and elements. 
  6025.  
  6026. Examples 
  6027.   Using the LIKE attribute 
  6028.  
  6029. Syntax 
  6030.  
  6031.  
  6032. ΓöÇΓöÇΓöÇΓöÇLIKEΓöÇΓöÇΓöÇΓöÇstructure-variableΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  6033.  
  6034.  
  6035. ΓòÉΓòÉΓòÉ <hidden> structure-variable ΓòÉΓòÉΓòÉ
  6036.  
  6037. structure-variable 
  6038.   can be a major structure or a minor structure. It can be qualified, but it 
  6039.   cannot be subscripted. It must not contain a REFER variable. 
  6040.  
  6041.   Additional usage rules for structure-variables are: 
  6042.  
  6043.     The structure-variable must be known in the block containing the LIKE 
  6044.      attribute specification. The structure names in all LIKE attributes are 
  6045.      associated with declared structures before any LIKE attributes are 
  6046.      expanded. 
  6047.  
  6048.     Neither the structure-variable nor any of its substructures can be 
  6049.      declared with the LIKE attribute. 
  6050.  
  6051.     The structure-variable must not be a substructure of a structure declared 
  6052.      with the LIKE attribute. 
  6053.  
  6054.     No substructure of the major structure containing the structure-variable 
  6055.      can have the LIKE attribute. 
  6056.  
  6057.  
  6058. ΓòÉΓòÉΓòÉ <hidden> Using the LIKE Attribute ΓòÉΓòÉΓòÉ
  6059.  
  6060.  For example: 
  6061.  
  6062.     DECLARE 1 A, 2 C, 3 E, 3 F,
  6063.             1 D(10), 2 C, 3 G, 3 H;
  6064.     BEGIN;
  6065.     DECLARE 1 A LIKE D;
  6066.     DECLARE 1 B(2) LIKE A.C;
  6067.     END;
  6068.  
  6069.   These declarations result in the following: 
  6070.  
  6071.     1 A LIKE D is expanded to give:
  6072.  
  6073.         1 A, 2 C, 3 G, 3 H
  6074.  
  6075.     1 B(2) LIKE A.C is expanded to give:
  6076.  
  6077.         1 B(2), 3 E, 3 F
  6078.  
  6079.  The following declaration is invalid because references to the REFER object X 
  6080.   would be ambiguous. 
  6081.  
  6082.     DECLARE 1 A BASED,
  6083.               2 X FIXED BINARY,
  6084.               2 Y(Z REFER(X)),
  6085.             1 B BASED LIKE A;
  6086.  
  6087.  The following example is invalid because the LIKE attribute of A specifies a 
  6088.   structure, C, that contains an identifier, E, that has the LIKE attribute. 
  6089.  
  6090.     DECLARE 1 A LIKE C,
  6091.             1 B,
  6092.               2 C,
  6093.                 3 D,
  6094.                 3 E LIKE X,
  6095.               2 F,
  6096.             1 X,
  6097.               2 Y,
  6098.               2 Z;
  6099.  
  6100.  The following example is invalid because the LIKE attribute of A specifies a 
  6101.   substructure, G.C, of a structure, G, declared with the LIKE attribute. 
  6102.  
  6103.     DECLARE 1 A LIKE G.C,
  6104.             1 B,
  6105.               2 C,
  6106.                 3 D,
  6107.                 3 E,
  6108.               2 F,
  6109.             1 G LIKE B;
  6110.  
  6111.  The following example is invalid because the LIKE attribute of A specifies a 
  6112.   structure, C, within a structure, B, that contains a substructure, F, having 
  6113.   the LIKE attribute. 
  6114.  
  6115.     DECLARE 1 A LIKE C,
  6116.             1 B,
  6117.               2 C,
  6118.                 3 D,
  6119.                 3 E,
  6120.               2 F LIKE X,
  6121.             1 X,
  6122.               2 Y,
  6123.               2 Z;
  6124.  
  6125.  
  6126. ΓòÉΓòÉΓòÉ <hidden> Structure Qualification ΓòÉΓòÉΓòÉ
  6127.  
  6128. Description 
  6129.   A minor structure or a structure element can be referred to by the minor 
  6130.   structure name or the elementary name alone if there is no ambiguity. 
  6131.  
  6132.   A qualified reference is an elementary name or a minor structure name that is 
  6133.   qualified with one or more names at a higher level, connected by periods. 
  6134.  
  6135.   Structure qualification is in the order of levels. That is, the name at the 
  6136.   highest level must appear first, with the name at the deepest level appearing 
  6137.   last. 
  6138.  
  6139.   Names within a structure, except the major structure name itself, need not be 
  6140.   unique within the procedure in which it is declared. Qualifying names must be 
  6141.   used only so far as necessary to make the reference unique. 
  6142.  
  6143.   An ambiguous reference is a reference with insufficient qualification to make 
  6144.   the reference unique. A reference is always taken to apply to the declared 
  6145.   name in the innermost block containing the reference. 
  6146.  
  6147. Examples 
  6148.   Using ambiguous and unambiguous references 
  6149.  
  6150.  
  6151. ΓòÉΓòÉΓòÉ <hidden> Using Ambiguous and Unambiguous References ΓòÉΓòÉΓòÉ
  6152.  
  6153. An ambiguous reference is an elementary name or a minor structure name that is 
  6154. qualified with one or more names at a higher level, connected by periods. 
  6155. Blanks may appear surrounding the period. The following examples illustrate 
  6156. both ambiguous and unambiguous references. 
  6157.  
  6158.  In the following example, A.C refers to C in the inner block; D.E refers to E 
  6159.   in the outer block: 
  6160.  
  6161.     DECLARE 1 A, 2 C, 2 D, 3 E;
  6162.        BEGIN;
  6163.        DECLARE 1 A, 2 B, 3 C, 3 E;
  6164.        A.C = D.E;
  6165.  
  6166.  In the following example, D has been declared twice: 
  6167.  
  6168.     DECLARE 1 A, 2 B, 2 C, 3 D, 2 D;
  6169.  
  6170.   A reference to A.D refers to the second D, since A.D is a complete 
  6171.   qualification of only the second D; the first D would have to be referred to 
  6172.   as A.C.D. 
  6173.  
  6174.  In the following example, a reference to A.C is ambiguous because neither C 
  6175.   is uniquely qualified by this reference: 
  6176.  
  6177.     DECLARE 1 A, 2 B, 3 C, 2 D, 3 C;
  6178.  
  6179.  In the following example, a reference to A refers to the first A, A.A to the 
  6180.   second A, and A.A.A to the third A: 
  6181.  
  6182.     DECLARE 1 A, 2 A, 3 A;
  6183.  
  6184.  In the following example, a reference to X refers to the first DECLARE 
  6185.   statement: 
  6186.  
  6187.     DECLARE X;
  6188.     DECLARE 1 Y, 2 X, 3 Z, 3 A,
  6189.                  2 Y, 3 Z, 3 A;
  6190.  
  6191.   A reference to Y.Z is ambiguous; Y.Y.Z refers to the second Z; and Y.X.Z 
  6192.   refers to the first Z. 
  6193.  
  6194.  
  6195. ΓòÉΓòÉΓòÉ <hidden> Structure Mapping ΓòÉΓòÉΓòÉ
  6196.  
  6197. Description 
  6198.   For any major or minor structure, the length, alignment requirement, and 
  6199.   position relative to a doubleword boundary depend on the lengths, alignment 
  6200.   requirements, and relative positions of its members. The process of 
  6201.   determining these requirements for each level and for the complete structure 
  6202.   is known as structure mapping. 
  6203.  
  6204.   During the structure mapping process, the compiler minimizes the amount of 
  6205.   unused storage (padding) between members of the structure. It completes the 
  6206.   entire process before the structure is allocated, according (in effect) to 
  6207.   the rules discussed in the following paragraphs. 
  6208.  
  6209.   Structure mapping is not a physical process. Terms such as shifted and offset 
  6210.   are used purely for ease of discussion, and do not imply actual movement in 
  6211.   storage. When the structure is allocated, the relative locations are already 
  6212.   known as a result of the mapping process. 
  6213.  
  6214.   The mapping for a complete structure reduces to successively combining pairs 
  6215.   of items (elements, or minor structures whose individual mappings have 
  6216.   already been determined). Once a pair has been combined, it becomes a unit to 
  6217.   be paired with another unit, and so on until the complete structure is 
  6218.   mapped. The rules for the process are categorized as: 
  6219.  
  6220.     Rules for determining the order of pairing 
  6221.     Rules for mapping one pair. 
  6222.  
  6223.   The lower line shows the logical level for each item in the declaration. 
  6224.  
  6225.   To better understand the process of structure mapping, select from the 
  6226.   following topics: 
  6227.  
  6228.     Determining logical levels of items 
  6229.     Rules for order of pairing 
  6230.     Rules for mapping one pair 
  6231.     Uses for structure mapping 
  6232.  
  6233. Related Information 
  6234.   Effect of UNALIGNED attribute 
  6235.  
  6236.  
  6237. ΓòÉΓòÉΓòÉ <hidden> Rules for Order of Pairing ΓòÉΓòÉΓòÉ
  6238.  
  6239. The steps in determining the order of pairing are as follows: 
  6240.  
  6241.  1. Find the minor structure at the deepest logical level (which we will call 
  6242.     logical level n). 
  6243.  
  6244.  2. If more than one minor structure has the logical level n, take the first 
  6245.     one that appears in the declaration. 
  6246.  
  6247.  3. Pair the first two elements appearing in this minor structure, thus forming 
  6248.     a unit. Use the rules for mapping one pair. 
  6249.  
  6250.  4. Pair this unit with the next element (if any) declared in the minor 
  6251.     structure, thus forming a larger unit. 
  6252.  
  6253.  5. Repeat step 4 until all the elements in the minor structure have been 
  6254.     combined into one unit. This completes the mapping for this minor 
  6255.     structure; its alignment requirement and length, including any padding, are 
  6256.     now determined and will not change (unless you change the structure 
  6257.     declaration). Its offset from a doubleword boundary is also now determined; 
  6258.     note that this offset will be significant during mapping of any containing 
  6259.     structure, and it may change as a result of such mapping. 
  6260.  
  6261.  6. Repeat steps 3 through 5 for the next minor structure (if any) appearing at 
  6262.     logical level n in the declaration. 
  6263.  
  6264.  7. Repeat step 6 until all minor structures at logical level n have been 
  6265.     mapped. Each of these minor structures can now be thought of as an element 
  6266.     for structure mapping purposes. 
  6267.  
  6268.  8. Repeat the pairing process for minor structures at the next higher logical 
  6269.     level; that is, make n equal to (n-1) and repeat steps 2 through 7. 
  6270.  
  6271.  9. Repeat step 8 until n = 1; then repeat steps 3 through 5 for the major 
  6272.     structure. 
  6273.  
  6274.  
  6275. ΓòÉΓòÉΓòÉ <hidden> Rules for Mapping One Pair ΓòÉΓòÉΓòÉ
  6276.  
  6277. For purposes of this explanation, think of storage as contiguous doublewords, 
  6278. each having 8 bytes, numbered 0 through 7, which indicate the offset from a 
  6279. doubleword boundary. Think of the bytes as numbered continuously from 0 
  6280. onwards, starting at any byte, so that lengths and offsets from the start of 
  6281. the structure can be calculated. 
  6282.  
  6283.  1. Begin the first element of the pair on a doubleword boundary; or, if the 
  6284.     element is a minor structure that has already been mapped, offset it from 
  6285.     the doubleword boundary by the amount indicated. 
  6286.  
  6287.  2. Begin the second element of the pair at the first valid position following 
  6288.     the end of the first element. This position will depend on the alignment 
  6289.     requirement of the second element. If the second element is a minor 
  6290.     structure, its alignment requirement will have been determined already. 
  6291.  
  6292.  3. Shift the first element towards the second element as far as the alignment 
  6293.     requirement of the first allows. The amount of shift determines the offset 
  6294.     of this pair from a doubleword boundary. 
  6295.  
  6296. After this process has been completed, any padding between the two elements has 
  6297. been minimized and will not change throughout the rest of the operation. The 
  6298. pair is now a unit of fixed length and alignment requirement; its length is the 
  6299. sum of the two lengths plus padding, and its alignment requirement is the 
  6300. higher of the two alignment requirements (if they differ). 
  6301.  
  6302.  
  6303. ΓòÉΓòÉΓòÉ <hidden> Effect of UNALIGNED Attribute ΓòÉΓòÉΓòÉ
  6304.  
  6305. Description 
  6306.   The example of structure mapping given below shows the rules that are applied 
  6307.   to a structure declared ALIGNED.  Mapping of aligned structures is more 
  6308.   complex because of the number of alignment requirements. The effect of the 
  6309.   UNALIGNED attribute is to reduce to 1 byte the alignment requirements for 
  6310.   halfwords, fullwords, and doublewords, and to reduce to 1 bit the alignment 
  6311.   requirement for bit strings. The same structure mapping rules apply, but the 
  6312.   reduced alignment requirements are used. The only unused storage will be bit 
  6313.   padding within a byte when the structure contains bit strings. 
  6314.  
  6315.   EVENT and AREA data cannot be unaligned. If a structure has the UNALIGNED 
  6316.   attribute and it contains an element that cannot be unaligned, UNALIGNED is 
  6317.   ignored for that element; the element is aligned and an error message is put 
  6318.   out. For example, in a program with the declaration: 
  6319.  
  6320.     DECLARE 1 A UNALIGNED,
  6321.               2 B,
  6322.               2 C AREA(100);
  6323.  
  6324.   C is given the attribute ALIGNED, as the inherited attribute UNALIGNED 
  6325.   conflicts with AREA. 
  6326.  
  6327.  
  6328. ΓòÉΓòÉΓòÉ <hidden> Arrays of Structures ΓòÉΓòÉΓòÉ
  6329.  
  6330. Description 
  6331.   A structure name, either major or minor, can be given a dimension attribute 
  6332.   in a DECLARE statement to declare an array of structures- an array whose 
  6333.   elements are structures having identical names, levels, and elements. An item 
  6334.   declared within an array of structures inherits dimensions declared in the 
  6335.   containing structure.  This applies to elements that are either base elements 
  6336.   or minor structures. 
  6337.  
  6338.   A reference to a cross section of an array of structures is not allowed- that 
  6339.   is, the asterisk notation cannot be used in a reference. 
  6340.  
  6341. Examples 
  6342.   Using arrays of structures and subscript-qualified references 
  6343.  
  6344.  
  6345. ΓòÉΓòÉΓòÉ <hidden> Using Arrays of Structures and Subscript-Qualified References ΓòÉΓòÉΓòÉ
  6346.  
  6347.  If a structure, WEATHER, is used to process meteorological information for 
  6348.   each month of a year, it might be declared as follows: 
  6349.  
  6350.     DECLARE 1 WEATHER(12),
  6351.               2 TEMPERATURE,
  6352.                 3 HIGH DECIMAL FIXED(4,1),
  6353.                 3 LOW DECIMAL FIXED(3,1),
  6354.               2 WIND_VELOCITY,
  6355.                 3 HIGH DECIMAL FIXED(3),
  6356.                 3 LOW DECIMAL FIXED(2),
  6357.               2 PRECIPITATION,
  6358.                 3 TOTAL DECIMAL FIXED(3,1),
  6359.                 3 AVERAGE DECIMAL FIXED(3,1);
  6360.  
  6361.   Thus, you could refer to the weather data for the month of July by specifying 
  6362.   WEATHER(7). Portions of the July weather could be referred to by 
  6363.   TEMPERATURE(7) and WIND_VELOCITY(7). TOTAL(7) would refer to the total 
  6364.   precipitation during the month of July. 
  6365.  
  6366.   TEMPERATURE.HIGH(3), which would refer to the high temperature in March, is a 
  6367.   subscripted qualified reference. 
  6368.  
  6369.  The need for subscripted qualified references becomes apparent when an array 
  6370.   of structures contains minor structures that are arrays. For example, 
  6371.   consider the following array of structures: 
  6372.  
  6373.     DECLARE 1 A (2,2),
  6374.                2 B (2),
  6375.                  3 C,
  6376.                  3 D,
  6377.                2 E;
  6378.  
  6379.   Both A and B are arrays of structures. To refer to a data item, it may be 
  6380.   necessary to use as many as three names and three subscripts. For example: 
  6381.  
  6382.     A(1,1).B        refers to an array of structures.
  6383.     A(1,1)          refers to a structure.
  6384.     A(1,1).B(1)     refers to a structure.
  6385.     A(1,1).B(2).C   refers to an element.
  6386.  
  6387.   As long as the order of subscripts remains unchanged, subscripts in such 
  6388.   references can be moved to the right or left and attached to names at a lower 
  6389.   or higher level. For example, A.B.C(1,1,2) and A(1,1,2).B.C have the same 
  6390.   meaning as A(1,1).B(2).C for the above array of structures. 
  6391.  
  6392.   Unless all of the subscripts are moved to the lowest level, the reference is 
  6393.   said to have interleaved subscripts; thus, A.B(1,1,2).C has interleaved 
  6394.   subscripts. 
  6395.  
  6396.   Any item declared within an array of structures inherits dimensions declared 
  6397.   in the containing structure. For example, in the above declaration for the 
  6398.   array of structures A, the array B is a three-dimensional structure, because 
  6399.   it inherits the two dimensions declared for A. 
  6400.  
  6401.   If B is unique and requires no qualification, any reference to a particular B 
  6402.   would require three subscripts, two to identify the specific A and one to 
  6403.   identify the specific B within that A. 
  6404.  
  6405.  
  6406. ΓòÉΓòÉΓòÉ <hidden> Alignment and Attributes ΓòÉΓòÉΓòÉ
  6407.  
  6408. Description 
  6409.   The computer holds information in multiples of units of 8 bits. Each 8-bit 
  6410.   unit of information is called a byte. 
  6411.  
  6412.   The computer accesses bytes singly or as halfwords, words, or doublewords. A 
  6413.   halfword is 2 consecutive bytes. A fullword is 4 consecutive bytes. A 
  6414.   doubleword is 8 consecutive bytes. 
  6415.  
  6416.   Byte locations in storage are consecutively numbered starting with 0; each 
  6417.   number is the address of the corresponding byte. Halfwords, words, and 
  6418.   doublewords are addressed by the address of their leftmost byte. 
  6419.  
  6420.   Your programs can execute faster if halfwords, words, and doublewords are 
  6421.   located in main storage on an integral boundary for that unit of information. 
  6422.   That is, the unit of information's address is a multiple of the number of 
  6423.   bytes in the unit. 
  6424.  
  6425.   It is possible in PL/I to align data on integral boundaries. This is not 
  6426.   always desirable, however, since there may be unused bytes between successive 
  6427.   data elements, which increases use of storage. 
  6428.  
  6429.   This increase is particularly important when the data items are members of 
  6430.   aggregates used to create a data set; the unused bytes increase the amount of 
  6431.   auxiliary storage required. 
  6432.  
  6433.   The ALIGNED and UNALIGNED attributes allow you to choose whether or not to 
  6434.   align data on the appropriate integral boundary. 
  6435.  
  6436. Related Information 
  6437.  
  6438.     Aligning bytes on integral boundaries 
  6439.     ALIGNED and UNALIGNED attributes 
  6440.  
  6441.  
  6442. ΓòÉΓòÉΓòÉ <hidden> Aligning Bytes on Integral Boundaries ΓòÉΓòÉΓòÉ
  6443.  
  6444. The computer accesses bytes singly or as halfwords, words, or doublewords.  A 
  6445. halfword is 2 consecutive bytes.  A fullword is 4 consecutive bytes.  A 
  6446. doubleword is 8 consecutive bytes.  Byte locations in storage are consecutively 
  6447. numbered starting with 0; each number is the address of the corresponding byte. 
  6448. Halfwords, words, and doublewords are addressed by the address of their 
  6449. leftmost byte. 
  6450.  
  6451. Your programs can execute faster if halfwords, words, and doublewords are 
  6452. located in main storage on an integral boundary for that unit of information. 
  6453. That is, the unit of information's address is a multiple of the number of bytes 
  6454. in the unit. 
  6455.  
  6456. As an example, this information is summarized in the following table: 
  6457.  
  6458. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6459. Γöé          ADDRESSES IN A SECTION OF STORAGE            Γöé
  6460. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6461. Γöé 5000 Γöé 5001 Γöé 5002 Γöé 5003 Γöé 5004 Γöé 5005 Γöé 5006 Γöé 5007 Γöé
  6462. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6463. Γöé byte Γöé byte Γöé byte Γöé byte Γöé byte Γöé byte Γöé byte Γöé byte Γöé
  6464. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6465. Γöé halfword    Γöé halfword    Γöé halfword    Γöé halfword    Γöé
  6466. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6467. Γöé fullword                  Γöé fullword                  Γöé
  6468. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6469. Γöé doubleword                                            Γöé
  6470. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6471.  
  6472. In PL/I, it is possible to align data on integral boundaries.  This is not 
  6473. always desirable, however, since there may be unused bytes between successive 
  6474. data elements, which increases use of storage.  This increase is particularly 
  6475. important when the data items are members of aggregates used to create a data 
  6476. set; the unused bytes increase the amount of auxiliary storage required.  The 
  6477. ALIGNED and the UNALIGNED attributes allow you to choose whether or not to 
  6478. align data on the appropriate integral boundary. 
  6479.  
  6480.  
  6481. ΓòÉΓòÉΓòÉ <hidden> ALIGNED and UNALIGNED Attributes ΓòÉΓòÉΓòÉ
  6482.  
  6483. Description 
  6484.  
  6485.     ALIGNED specifies that the data element is aligned on the storage boundary 
  6486.      corresponding to its data-type requirement. 
  6487.  
  6488.     UNALIGNED specifies that each data element is mapped on the next byte 
  6489.      boundary, except for fixed-length bit strings, which are mapped on the 
  6490.      next bit. 
  6491.  
  6492. Usage Notes 
  6493.  
  6494.     Complex data requires twice as much storage as its real counterparts, but 
  6495.      the alignment requirements are the same. 
  6496.  
  6497.     Defaults are applied at element level. UNALIGNED is the default for bit 
  6498.      data, character data, graphic data, and numeric character data. ALIGNED is 
  6499.      the default for all other types of data. 
  6500.  
  6501.     For all operators and user-defined (and built-in) functions, the default 
  6502.      for ALIGNED or UNALIGNED is applicable to the elements of the result. 
  6503.  
  6504.     Constants take the default for ALIGNED or UNALIGNED. 
  6505.  
  6506.     ALIGNED or UNALIGNED can be specified for element, array, or structure 
  6507.      variables. The application of either attribute to a structure is 
  6508.      equivalent to applying the attribute to all contained elements that are 
  6509.      not explicitly declared ALIGNED or UNALIGNED. 
  6510.  
  6511. Examples 
  6512.   ALIGNED and UNALIGNED declarations 
  6513.  
  6514. Syntax 
  6515.  
  6516. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇALIGNEDΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  6517.       ΓööΓöÇΓöÇUNALIGNEDΓöÇΓöÇΓöÿ
  6518.  
  6519.  
  6520. ΓòÉΓòÉΓòÉ <hidden> ALIGNED and UNALIGNED Declarations ΓòÉΓòÉΓòÉ
  6521.  
  6522. The following example illustrates the effect of ALIGNED and UNALIGNED 
  6523. declarations for a structure and its elements: 
  6524.  
  6525. DECLARE 1 S,
  6526.           2 X BIT(2),       /* UNALIGNED BY DEFAULT  */
  6527.           2 A ALIGNED,      /* ALIGNED EXPLICITLY    */
  6528.             3 B,            /* ALIGNED FROM A        */
  6529.             3 C UNALIGNED,  /* UNALIGNED EXPLICITLY  */
  6530.               4 D,          /* UNALIGNED FROM C      */
  6531.               4 E ALIGNED,  /* ALIGNED EXPLICITLY    */
  6532.               4 F,          /* UNALIGNED FROM C      */
  6533.             3 G,            /* ALIGNED FROM A        */
  6534.           2 H;              /* ALIGNED BY DEFAULT    */
  6535.  
  6536.  
  6537. ΓòÉΓòÉΓòÉ <hidden> Scope of Declarations ΓòÉΓòÉΓòÉ
  6538.  
  6539. Description 
  6540.   The part of the program to which a name applies is called the scope of the 
  6541.   declaration of that name. In most cases, the scope of the declaration of a 
  6542.   name is determined entirely by the position where the name is declared within 
  6543.   the program. Implicit declarations are treated as if the name were declared 
  6544.   in a DECLARE statement immediately following the PROCEDURE statement of the 
  6545.   external procedure. 
  6546.  
  6547.   It is not necessary for a name to have the same meaning throughout a program. 
  6548.   A name explicitly declared within a block has a meaning only within that 
  6549.   block. Outside the block, the name is unknown unless the same name has also 
  6550.   been declared in the outer block. Each declaration of the name establishes a 
  6551.   scope and in this case, the name in the outer block refers to a different 
  6552.   data item. This enables you to specify local definitions and, hence, to write 
  6553.   procedures or begin-blocks without knowing all the names used in other parts 
  6554.   of the program. 
  6555.  
  6556.   The INTERNAL and EXTERNAL attributes can be used to define a name. 
  6557.  
  6558. Examples 
  6559.  
  6560.     Determining the scope of data declarations (general) 
  6561.     Determining the scope of ENTRY and LABEL declarations 
  6562.  
  6563. Related Information 
  6564.   INTERNAL/EXTERNAL attributes 
  6565.  
  6566.  
  6567. ΓòÉΓòÉΓòÉ <hidden> Determining the Scope of Data Declarations ΓòÉΓòÉΓòÉ
  6568.  
  6569. The following figure illustrates the scope of declarations. The brackets to the 
  6570. left indicate the block structure. The brackets to the right show the scope of 
  6571. each declaration of a name. 
  6572.  
  6573. The scopes of the two declarations of Q and R are shown as Q and Q' and R and 
  6574. R'. 
  6575.  
  6576.  
  6577.                                            P   Q   Q'  R   R'  S   I
  6578.          ΓöîΓöÇ  A:  procedure;                ΓöÇΓöÉ  ΓöÇΓöÉ      ΓöÇΓöÉ          ΓöÇΓöÉ
  6579. 1,2      Γöé       declare P, Q;              Γöé  ΓöÇΓöÿ       Γöé           Γöé
  6580.          Γöé ΓöîΓöÇ    B:  Procedure;             Γöé      ΓöÇΓöÉ   Γöé           Γöé
  6581. 2        Γöé Γöé         declare Q;             Γöé       Γöé   Γöé           Γöé
  6582. 3        Γöé Γöé         R = Q;                 Γöé       Γöé  ΓöÇΓöÿ           Γöé
  6583.          Γöé Γöé     ΓöîΓöÇ  C:  begin;             Γöé       Γöé      ΓöÇΓöÉ       Γöé
  6584. 3        Γöé Γöé     Γöé       declare R;         Γöé       Γöé       Γöé       Γöé
  6585. 4        Γöé Γöé     Γöé       do I = 1 to 10;    Γöé       Γöé       Γöé       Γöé
  6586.          Γöé Γöé     Γöé       end;               Γöé       Γöé       Γöé       Γöé
  6587.          Γöé Γöé     ΓööΓöÇ      end C;             Γöé       Γöé      ΓöÇΓöÿ       Γöé
  6588.          Γöé ΓööΓöÇ        end B;                 Γöé      ΓöÇΓöÿ               Γöé
  6589.          Γöé ΓöîΓöÇ    D:  procedure;             Γöé  ΓöÇΓöÉ      ΓöÇΓöÉ      ΓöÇΓöÉ   Γöé
  6590. 5        Γöé Γöé         declare S;             Γöé   Γöé       Γöé       Γöé   Γöé
  6591.          Γöé ΓööΓöÇ        end D;                 Γöé   Γöé       Γöé      ΓöÇΓöÿ   Γöé
  6592.          ΓööΓöÇ      end A;                    ΓöÇΓöÿ  ΓöÇΓöÿ      ΓöÇΓöÿ          ΓöÇΓöÿ
  6593.  
  6594.   P is declared in the block A and known throughout A since it is not 
  6595.   redeclared. 
  6596.  
  6597.   Q is declared in block A, and redeclared in block B. The scope of the first 
  6598.   declaration of Q is all of A except B; the scope of the second declaration of 
  6599.   Q is block B only. 
  6600.  
  6601.   R is declared in block C, but a reference to R is also made in block B. The 
  6602.   reference to R in block B results in an implicit declaration of R in A, the 
  6603.   external procedure. Therefore, two separate names (R and R') with different 
  6604.   scopes exist. The scope of the explicitly declared R is block C; the scope of 
  6605.   the implicitly declared R in block B is all of A except block C. 
  6606.  
  6607.   I is referred to in block C. This results in an implicit declaration in the 
  6608.   external procedure A. As a result, this declaration applies to all of A, 
  6609.   including the contained procedures B, C, and D. 
  6610.  
  6611.   S is explicitly declared in procedure D and is known only within D. 
  6612.  
  6613.  
  6614. ΓòÉΓòÉΓòÉ <hidden> Determining the Scope of Entry and Label Declarations ΓòÉΓòÉΓòÉ
  6615.  
  6616. The following figure illustrates the scopes of entry constant and statement 
  6617. label declarations. 
  6618.  
  6619.                                     L1   L1'  L2  A   B   C   D   E
  6620. 1      ΓöîΓöÇA:  PROCEDURE;             ΓöÇΓöÉ            ΓöÇΓöÉ  ΓöÇΓöÉ      ΓöÇΓöÉ  ΓöÇΓöÉ
  6621. 2      Γöé     DECLARE E ENTRY;        Γöé             Γöé   Γöé       Γöé   Γöé
  6622. 3      Γöé     L1:  P = Q;             Γöé             Γöé   Γöé       Γöé   Γöé
  6623. 4      Γöé  ΓöîΓöÇ B:  PROCEDURE;          Γöé        ΓöÇΓöÉ   Γöé   Γöé  ΓöÇΓöÉ   Γöé   Γöé
  6624. 6      Γöé  Γöé      L2:   CALL C;      ΓöÇΓöÿ         Γöé   Γöé   Γöé   Γöé   Γöé   Γöé
  6625. 5      Γöé  Γöé   ΓöîΓöÇ C:  PROCEDURE;          ΓöÇΓöÉ    Γöé   Γöé   Γöé   Γöé   Γöé   Γöé
  6626. 3      Γöé  Γöé   Γöé  L1:  X = Y;              Γöé    Γöé   Γöé   Γöé   Γöé   Γöé   Γöé
  6627.        Γöé  Γöé   Γöé       CALL E;             Γöé    Γöé   Γöé   Γöé   Γöé   Γöé   Γöé
  6628.        Γöé  Γöé   ΓööΓöÇ      END C;             ΓöÇΓöÿ    Γöé   Γöé   Γöé   Γöé   Γöé   Γöé
  6629. 3      Γöé  Γöé        GO TO L1;        ΓöÇΓöÉ         Γöé   Γöé   Γöé   Γöé   Γöé   Γöé
  6630.        Γöé  ΓööΓöÇ       END B;            Γöé        ΓöÇΓöÿ   Γöé   Γöé  ΓöÇΓöÿ   Γöé   Γöé
  6631. 4      Γöé  ΓöîΓöÇ   D:  PROCEDURE;        Γöé             Γöé   Γöé       Γöé   Γöé
  6632.        Γöé  ΓööΓöÇ       END D;            Γöé             Γöé   Γöé       Γöé   Γöé
  6633.        Γöé       CALL B;               Γöé             Γöé   Γöé       Γöé   Γöé
  6634.        ΓööΓöÇ      END A;               ΓöÇΓöÿ            ΓöÇΓöÿ  ΓöÇΓöÿ      ΓöÇΓöÿ  ΓöÇΓöÿ
  6635.  
  6636.    * PROCESS;
  6637. 2      ΓöîΓöÇE:  PROCEDURE;                                            ΓöÇΓöÉ                                        L1   L1'  L2   A   B   C   D
  6638.        ΓööΓöÇ    END E;                                                ΓöÇΓöÿ
  6639.  
  6640.   The scope of the declaration of the name A is only all of the block A, and 
  6641.   not E. 
  6642.  
  6643.   E is explicitly declared in A as an external entry constant. The explicit 
  6644.   declaration of E applies throughout block A. It is not linked to the explicit 
  6645.   declaration of E that applies throughout block E. The scope of the 
  6646.   declaration of the name E is all of block A and all of block E. 
  6647.  
  6648.   The label L1 appears with statements internal to A and to C. Two separate 
  6649.   declarations are therefore established; the first applies to all of block A 
  6650.   except block C, the second applies to block C only. Therefore, when the GO TO 
  6651.   statement in block B executes, control transfers to L1 in block A, and block 
  6652.   B terminates. 
  6653.  
  6654.   D and B are explicitly declared in block A and can be referred to anywhere 
  6655.   within A; but since they are INTERNAL, they cannot be referred to in block E. 
  6656.  
  6657.   C is explicitly declared in B and can be referred to from within B, but not 
  6658.   from outside B. 
  6659.  
  6660.   L2 is declared in B and can be referred to in block B, including C, which is 
  6661.   contained in B, but not from outside B. 
  6662.  
  6663.  
  6664. ΓòÉΓòÉΓòÉ <hidden> Blocks ΓòÉΓòÉΓòÉ
  6665.  
  6666. All of the text of a block, from the PROCEDURE or BEGIN statement through the 
  6667. corresponding END statement (including condition prefixes of BEGIN and 
  6668. PROCEDURE statements), is said to be contained in that block. 
  6669.  
  6670. However, the labels of the BEGIN or PROCEDURE statement heading the block, as 
  6671. well as the labels of any ENTRY statements that apply to the block, are not 
  6672. contained in that block. Nested blocks are contained in the block in which they 
  6673. appear. 
  6674.  
  6675. Text that is contained in a block, but not contained in any other block nested 
  6676. within it, is said to be internal to that block. Entry names of a procedure 
  6677. (and labels of a BEGIN statement) are not contained in that block. 
  6678. Consequently, they are internal to the containing block. 
  6679.  
  6680. Entry names of an external procedure are treated as if they were external to 
  6681. the external procedure. 
  6682.  
  6683.  
  6684. ΓòÉΓòÉΓòÉ <hidden> INTERNAL/EXTERNAL Attributes ΓòÉΓòÉΓòÉ
  6685.  
  6686. Description 
  6687.   The INTERNAL and EXTERNAL attributes define the scope of a name. 
  6688.  
  6689.   INTERNAL (abbreviation INT) specifies that the name can be known only in the 
  6690.   declaring block. Any other explicit declaration of that name refers to a new 
  6691.   object with a different, non-overlapping scope. 
  6692.  
  6693.   A name with the EXTERNAL (abbreviation EXT) attribute can be declared more 
  6694.   than once, either in different external procedures or within blocks contained 
  6695.   in external procedures. 
  6696.  
  6697.   All declarations of the same name with the EXTERNAL attribute refer to the 
  6698.   same data. The scope of each declaration of the name (with the EXTERNAL 
  6699.   attribute) includes the scopes of all the declarations of that name (with 
  6700.   EXTERNAL) within the program. 
  6701.  
  6702.   Because external declarations for the same name all refer to the same data, 
  6703.   they must all result in the same set of attributes. It might be impossible 
  6704.   for the compiler to check all declarations, particularly, if the names are 
  6705.   declared in different external procedures, so care should be taken to ensure 
  6706.   that different declarations of the same name with the EXTERNAL attribute have 
  6707.   matching attributes. 
  6708.  
  6709. Example 
  6710.   Using the EXTERNAL attribute 
  6711.  
  6712. Related Information 
  6713.   Default INTERNAL and EXTERNAL attributes 
  6714.  
  6715. Syntax 
  6716.  
  6717.  
  6718.       ΓöîΓöÇINTERNALΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6719. ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇEXTERNALΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  6720.                   ΓööΓöÇ(ΓöÇΓöÇenvironment-nameΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  6721.  
  6722.  
  6723. ΓòÉΓòÉΓòÉ <hidden> Example - Using the EXTERNAL Attribute ΓòÉΓòÉΓòÉ
  6724.  
  6725. When a major structure name is declared EXTERNAL in more than one block, the 
  6726. attributes of the structure members must be the same in each case, although the 
  6727. corresponding member names need not be identical.  For example: 
  6728.  
  6729. PROCA: PROCEDURE;
  6730.        DECLARE 1 A EXTERNAL,
  6731.                  2 B,
  6732.                  2 C;
  6733.        .
  6734.        .
  6735. END PROCA;
  6736.  
  6737. *PROCESS;
  6738. PROCB: PROCEDURE;
  6739.        DECLARE 1 A EXTERNAL,
  6740.                  2 B,
  6741.                  2 D;
  6742.        .
  6743.        .
  6744. END PROCB;
  6745.  
  6746. If A.B is changed in PROCA, it is also changed for PROCB, and vice versa; if 
  6747. A.C is changed in PROCA, A.D is changed for PROCB, and vice versa. 
  6748.  
  6749.  
  6750. ΓòÉΓòÉΓòÉ <hidden> Defaults for Attributes ΓòÉΓòÉΓòÉ
  6751.  
  6752. Description 
  6753.   Every name in a PL/I source program requires a complete set of attributes. 
  6754.   Arguments passed to a procedure must have attributes matching the procedure's 
  6755.   parameters. 
  6756.  
  6757.   Values returned by functions must have the attributes expected. However, the 
  6758.   attributes that you specify need rarely include the complete set of 
  6759.   attributes. 
  6760.  
  6761.   The set of attributes for the following: 
  6762.  
  6763.     Explicitly declared names 
  6764.     Implicitly (including contextually) declared names 
  6765.     Attributes to be included in parameter descriptors 
  6766.     Values returned from function procedures 
  6767.  
  6768.   can be completed by using the language-specified defaults, or by defaults 
  6769.   that you can define (using the DEFAULT statement) either to modify the 
  6770.   language-specified defaults or to develop a completely new set of defaults. 
  6771.  
  6772.   Attributes applied by default cannot override attributes applied to a name by 
  6773.   explicit or contextual declaration. 
  6774.  
  6775. Related Information 
  6776.  
  6777.     Language-specified defaults 
  6778.     DEFAULT statement 
  6779.  
  6780.  
  6781. ΓòÉΓòÉΓòÉ <hidden> Language-Specified Defaults ΓòÉΓòÉΓòÉ
  6782.  
  6783. Description 
  6784.  
  6785.   Review the following rules regarding the use of language-specified defaults: 
  6786.  
  6787.     When a problem-data name has not been declared with a data type, or when 
  6788.      the RETURNS option is omitted from a function procedure, the default is 
  6789.      coded arithmetic data. 
  6790.  
  6791.     If mode, scale, and base are not specified by a DECLARE or DEFAULT 
  6792.      statement, or by a RETURNS option, variables with names beginning with any 
  6793.      of the letters I through N are given the attributes REAL FIXED BINARY 
  6794.      (15,0). Those with names beginning with any other alphabetic character or 
  6795.      with a non-EBCDIC DBCS character are given the attributes REAL FLOAT 
  6796.      DECIMAL (6). 
  6797.  
  6798.     A scaling factor in the precision attribute constitutes an explicit 
  6799.      declaration of FIXED. 
  6800.  
  6801.   If mode, string, or base is specified by a DECLARE or DEFAULT statement, or 
  6802.   by a RETURNS option, the remaining attributes are completed from the 
  6803.   following list of defaults: 
  6804.  
  6805.     The default base is DECIMAL 
  6806.     The default scale is FLOAT 
  6807.     The default mode is REAL. 
  6808.  
  6809.   Default precisions are then completed from the following list: 
  6810.  
  6811.     (5,0) for DECIMAL FIXED 
  6812.     (15,0) for BINARY FIXED 
  6813.     (6) for DECIMAL FLOAT 
  6814.     (21) for BINARY FLOAT. 
  6815.  
  6816.   If no parameter descriptor list is given, the default is that the argument 
  6817.   attributes match the parameter attributes. 
  6818.  
  6819. Examples 
  6820.   Using language-specified defaults 
  6821.  
  6822. Related Information 
  6823.   Restoring language-specified defaults 
  6824.  
  6825.  
  6826. ΓòÉΓòÉΓòÉ <hidden> DEFAULT Statement ΓòÉΓòÉΓòÉ
  6827.  
  6828. Description 
  6829.   The DEFAULT statement (abbreviation DFT) specifies data-attribute defaults 
  6830.   when attribute sets are not complete. Any attributes not applied by the 
  6831.   DEFAULT statement for any partially-complete explicit or contextual 
  6832.   declarations, and for implicit declarations, are supplied by 
  6833.   language-specified defaults. 
  6834.  
  6835.   Structure elements are given default attributes according to the name of the 
  6836.   element, not the qualified structure element name. The DEFAULT statement 
  6837.   cannot be used to create a structure. 
  6838.  
  6839.   Syntax 
  6840.  
  6841.                    ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6842.                                                          Γöé
  6843.     ΓöÇΓöÇΓöÇΓöÇDEFAULTΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ simple-specification Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  6844.                       ΓööΓöÇΓöÇΓöñ factored-specification Γö£ΓöÇΓöÇΓöÇΓöÿ
  6845.  
  6846.  
  6847.     where simple-specification is:
  6848.  
  6849.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6850.                   Γöé                        Γöé
  6851.                   Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé
  6852.                                   Γöé      Γöé
  6853.     Γö£ΓöÇΓöÇΓö¼ΓöÇRANGEΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇletterΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6854.        Γöé                ΓööΓöÇletter:letterΓöÇΓöÿ          ΓööΓöÇΓöñ attribute-list Γö£ΓöÇΓöÿ   Γöé
  6855.        Γö£ΓöÇRANGEΓöÇ(ΓöÇΓöÇ*ΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6856.        Γöé                    ΓööΓöÇΓöñ attribute-list Γö£ΓöÇΓöÿ                          Γöé
  6857.        ΓööΓöÇDESCRIPTORSΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6858.                       ΓööΓöÇΓöñ attribute-list Γö£ΓöÇΓöÿ
  6859.  
  6860.     where factored-list is:
  6861.            ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6862.                                              Γöé
  6863.     Γö£ΓöÇΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöñ simple-specification Γö£ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6864.               ΓööΓöÇΓöñ factored-specification Γö£ΓöÇΓöÿ           ΓööΓöÇΓöñ attribute-list Γö£ΓöÇΓöÿ
  6865.  
  6866.  
  6867.  
  6868.     where attribute-list is:
  6869.  
  6870.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6871.                       Γöé
  6872.     Γö£ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6873.         Γöé                 Γöé        ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé  Γöé
  6874.         Γöé                 Γöé                                  Γöé    Γöé  Γöé
  6875.         Γöé                 ΓööΓöÇVALUE(ΓöÇΓöÇΓöÇΓöñ value-specification Γö£ΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÿ  Γöé
  6876.         Γöé       ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                          Γöé
  6877.         Γöé                                 Γöé                          Γöé
  6878.         ΓööΓöÇVALUE(ΓöÇΓöÇΓöñ value-specification Γö£ΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6879.  
  6880.  
  6881.     where value-specification is:
  6882.  
  6883.  
  6884.     Γö£ΓöÇΓöÇΓöÇΓö¼ΓöÇAREA(size)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6885.         Γö£ΓöÇBIT(length)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6886.         Γö£ΓöÇCHARACTER(length)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6887.         Γö£ΓöÇGRAPHIC(length)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6888.         ΓööΓöÇΓöñ additional-options Γö£ΓöÇΓöÇΓöÿ
  6889.  
  6890.     where additional-options is:
  6891.  
  6892.     Γö£ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  6893.         Γö£ΓöÇREALΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γö£ΓöÇFIXEDΓöÇΓöñ  Γö£ΓöÇBINARYΓöÇΓöÇΓöñ
  6894.         ΓööΓöÇCOMPLEXΓöÇΓöÇΓöÿ  ΓööΓöÇFLOATΓöÇΓöÿ  ΓööΓöÇDECIMALΓöÇΓöÿ
  6895.  
  6896.  
  6897.     ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6898.         ΓööΓöÇ(ΓöÇprecisionΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  6899.                        ΓööΓöÇ,ΓöÇscaling-factorΓöÇΓöÇΓöÿ
  6900.  
  6901.  
  6902.  
  6903.   There can be more than one DEFAULT statement within a block.  The scope of a 
  6904.   DEFAULT statement is the block in which it occurs, and all blocks within that 
  6905.   block which neither include another DEFAULT statement with the same range, 
  6906.   nor are contained in a block having a DEFAULT statement with the same range. 
  6907.  
  6908.   A DEFAULT statement in an internal block affects only explicitly declared 
  6909.   names. This is because the scope of an implicit declaration is determined as 
  6910.   if the names were declared in a DECLARE statement immediately following the 
  6911.   PROCEDURE statement of the external procedure in which the name appears. 
  6912.  
  6913.   It is possible for a containing block to have a DEFAULT statement with a 
  6914.   range that is partly covered by the range of a DEFAULT statement that is in a 
  6915.   contained block. In such a case, the range of the DEFAULT statement in the 
  6916.   containing block is reduced by the range of the DEFAULT statement in the 
  6917.   contained block.  For example: 
  6918.  
  6919.      P:   PROCEDURE
  6920.     L1:   DEFAULT RANGE (XY) FIXED;
  6921.      Q:   BEGIN;
  6922.     L2:   DEFAULT RANGE (XYZ) FLOAT;
  6923.           END P;
  6924.  
  6925.   The scope of DEFAULT statement L1 is procedure P and the contained block Q. 
  6926.   The range of DEFAULT statement L1 is all names in procedures P beginning with 
  6927.   the characters XY, together with all names in begin block Q beginning with 
  6928.   the characters XY, except for those beginning with the characters XYZ. 
  6929.  
  6930.   Labels can be prefixed to DEFAULT statement.  A branch to such a label is 
  6931.   treated as a branch to a null statement.  Condition prefixes cannot be 
  6932.   attached to a DEFAULT statement. 
  6933.  
  6934. Related Information 
  6935.  
  6936.     Programmer-defined default for the returns option 
  6937.     Restoring language-specified defaults 
  6938.  
  6939.  
  6940. ΓòÉΓòÉΓòÉ <hidden> Programmer-Defined Default for the RETURNS Option ΓòÉΓòÉΓòÉ
  6941.  
  6942. Description 
  6943.   The default attributes of values returned from function procedures are 
  6944.   dependent on the entry name used to invoke the procedure.  The DEFAULT 
  6945.   statement can be used to specify these attributes when the entry name, or the 
  6946.   initial letter of the entry name, is specified in the DEFAULT statement. For 
  6947.   example: 
  6948.  
  6949.     DEFAULT RANGE (X) FIXED BINARY;
  6950.     X :  PROC(Y);
  6951.  
  6952.   would be interpreted as: 
  6953.  
  6954.     X :  PROC(Y) RETURNS (FIXED BINARY);
  6955.  
  6956.  
  6957. ΓòÉΓòÉΓòÉ <hidden> Restoring Language-Specified Defaults ΓòÉΓòÉΓòÉ
  6958.  
  6959. Description 
  6960.   The following statement: 
  6961.  
  6962.     DEFAULT RANGE(*), DESCRIPTORS;
  6963.  
  6964.   overrides, for all names, any programmer-defined default rules established in 
  6965.   a containing block.  It can be used to restore language-specified defaults 
  6966.   for contained blocks. 
  6967.  
  6968.  
  6969. ΓòÉΓòÉΓòÉ 1.3. PL/I Expressions and References ΓòÉΓòÉΓòÉ
  6970.  
  6971. Description 
  6972.   In PL/I, an expression is the representation of a value. The expression may 
  6973.   consist of constants, variables, and function references alone or in 
  6974.   combination using parentheses and/or operators. 
  6975.  
  6976.   PL/I statements often contain more than one expression or reference. Except 
  6977.   as described for specific instances (for example, the ASSIGNMENT statement) 
  6978.   expression evaluation order may vary. 
  6979.  
  6980.   The results of an expression evaluation or of a conversion are assigned to 
  6981.   targets of expression evaluations. 
  6982.  
  6983. Related Information 
  6984.   Select one of the following for additional help with using a specific kind of 
  6985.   expression: 
  6986.  
  6987.     Using operational expressions 
  6988.     Using array expressions 
  6989.  
  6990. Syntax 
  6991.  
  6992. ΓöÇΓöÇΓöÇΓöÇunary-expressionΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ
  6993.                           Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  6994.                           Γöé                                       Γöé Γöé
  6995.                           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇinfix-operatorΓöÇΓöÇΓöÇunary-expressionΓöÇΓöÇΓö┤ΓöÇΓöÿ
  6996.  
  6997. where unary-expression is:
  6998. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇelementary-expressionΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  6999.       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  7000.       Γöé                     Γöé   Γöé
  7001.       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇprefix-operatorΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  7002.  
  7003. where elementary-expression is:
  7004. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ(ΓöÇΓöÇexpressionΓöÇΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7005.       Γö£ΓöÇΓöÇreferenceΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7006.       Γö£ΓöÇΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7007.       ΓööΓöÇΓöÇiSUBΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7008.  
  7009. where reference is:
  7010. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇbasic-referenceΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7011.       ΓööΓöÇΓöÇlocator-qualifierΓöÇΓöÇΓöÿ
  7012.  
  7013. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7014.       ΓööΓöÇΓöÇ(subscript-list)ΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  7015.                                      ΓööΓöÇΓöÇargument-listΓöÇΓöÇΓöÿ
  7016.  
  7017. where locator-qualifier is:
  7018. ΓöÇΓöÇΓöÇΓöÇreference->ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7019.  
  7020. where subscript-list is:
  7021.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7022.                           Γöé
  7023. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇexpressionΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7024.          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7025.  
  7026. where argument-list is:
  7027.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7028.                     Γöé
  7029. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇexpressionΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7030.  
  7031. where basic-reference is:
  7032. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇnameΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7033.       ΓööΓöÇΓöÇstructure-qualificationΓöÇΓöÇΓöÿ
  7034.  
  7035. where structure-qualification is:
  7036. ΓöÇΓöÇΓöÇΓöÇbasic-referenceΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  7037.                          ΓööΓöÇΓöÇ(ΓöÇΓöÇsubscript-listΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  7038.  
  7039.  
  7040. ΓòÉΓòÉΓòÉ <hidden> Expression Evaluation Order ΓòÉΓòÉΓòÉ
  7041.  
  7042. Description 
  7043.   Evaluation of PL/I expressions and references can be done in any order. 
  7044.  
  7045. Examples 
  7046.  
  7047.     DCL (X,Y,Z) ENTRY RETURNS(FLOAT), (F,G,H) FLOAT;
  7048.     F = X( Y(G,H), Z(G,H) );
  7049.  
  7050.   In the above example, the functions Y and Z may change the value of the 
  7051.   arguments passed to them. Therefore, the value returned by function X may 
  7052.   depend upon whether function Y or Z is invoked first. Do not assume that the 
  7053.   first parameter is evaluated first, since optimization may involve processing 
  7054.   in a sequence that is not first to last. 
  7055.  
  7056.   Consider another example where operations may be evaluated in any order: 
  7057.  
  7058.     DCL B(2,2);
  7059.     I=0;
  7060.     PUT LIST ( B( INC(I), INC(I) ) );
  7061.  
  7062.   In the above example, the function INC increments the value of the number 
  7063.   passed to it and returns the updated value. However, either occurrence of the 
  7064.   INC function can be evaluated first. If the first occurrence of INC is 
  7065.   evaluated first, the element referenced will be B(1,2). If the second 
  7066.   occurrence of INC is evaluated first, the element referenced will be B(2,1). 
  7067.  
  7068.  
  7069. ΓòÉΓòÉΓòÉ <hidden> Targets of Expression Evaluations ΓòÉΓòÉΓòÉ
  7070.  
  7071. The results of an expression evaluation (or of an expression conversion) are 
  7072. assigned to a target. You may choose from three possible targets: 
  7073.  
  7074.  Variable targets 
  7075.  Pseudovariable targets 
  7076.  Intermediate result targets 
  7077.  
  7078.  
  7079. ΓòÉΓòÉΓòÉ <hidden> Pseudovariable Targets ΓòÉΓòÉΓòÉ
  7080.  
  7081. Description 
  7082.   You may assign the results of the evaluation of an expression to a 
  7083.   pseudovariable.  A pseudovariable represents a target field. 
  7084.  
  7085. Example 
  7086.  
  7087.     DECLARE A CHARACTER(10);
  7088.             B CHARACTER(30);
  7089.     SUBSTR(A,6,5) = SUBSTR(B,20,5);
  7090.  
  7091.   In this assignment statement, the SUBSTR function extracts a substring of 
  7092.   length 5 from the string B, beginning with the 20th character. The SUBSTR 
  7093.   pseudovariable indicates the location within string A that is the target. 
  7094.   Thus the last 5 characters of A are replaced by characters 20 through 24 of 
  7095.   B. The first five characters of A remain unchanged. 
  7096.  
  7097.  
  7098. ΓòÉΓòÉΓòÉ <hidden> Intermediate Result Targets ΓòÉΓòÉΓòÉ
  7099.  
  7100. Description 
  7101.   When an expression is evaluated, the result is assigned to a target. The 
  7102.   attributes of the target are derived partially from the source, partially 
  7103.   from the operation being performed, and partially from the attributes of a 
  7104.   second operand. 
  7105.  
  7106.   Some default target attributes may be used.  Also, some implementation 
  7107.   restrictions (for example, maximum precision) and other conventions play a 
  7108.   role in determining the target's attributes. 
  7109.  
  7110.   An intermediate result may undergo data type conversion if a further 
  7111.   operation is to be performed. After an expression is evaluated, the result 
  7112.   may be further converted for assignment to a variable or pseudovariable. 
  7113.  
  7114. Example 
  7115.   Using intermediate result targets 
  7116.  
  7117.  
  7118. ΓòÉΓòÉΓòÉ <hidden> Example- Using Intermediate Result Targets ΓòÉΓòÉΓòÉ
  7119.  
  7120. After an expression is evaluated, you may convert the result for assignment to 
  7121. a variable or pseudovariable. These conversions follow the same rules as the 
  7122. conversion of programmer-defined data. For example: 
  7123.  
  7124. DECLARE A CHARACTER(8),
  7125.         B FIXED DECIMAL(3,2),
  7126.         C FIXED BINARY(10);
  7127. A = B + C;
  7128.  
  7129. During the evaluation of the expression B+C and during the assignment of that 
  7130. result, there are four different results: 
  7131.  
  7132.  1. The intermediate result to which the converted binary equivalent of B is 
  7133.     assigned. 
  7134.  2. The intermediate result to which the binary result of the addition is 
  7135.     assigned. 
  7136.  3. The intermediate result to which the converted decimal fixed-point 
  7137.     equivalent of the binary is assigned. 
  7138.  4. A, the final destination of the result, to which the converted character 
  7139.     equivalent of the decimal fixed-point representation of the value is 
  7140.     assigned. 
  7141.  
  7142. The attributes of result 1 are determined from the attributes of the source B, 
  7143. from the operator and from the attributes of the other operand. If one operand 
  7144. of an arithmetic infix operator is binary, the other is converted to binary 
  7145. before evaluation. 
  7146.  
  7147. The attributes of result 2 are determined from the attributes of the source (C 
  7148. and the converted representation of B) 
  7149.  
  7150. The attributes of the third result are determined in part from the source 
  7151. (result 2) and in part from the attributes of the eventual target A. The only 
  7152. attribute determined from the eventual target is DECIMAL. 
  7153.  
  7154. The attributes of A are known from the DECLARE statement. 
  7155.  
  7156.  
  7157. ΓòÉΓòÉΓòÉ <hidden> Using Operational Expressions ΓòÉΓòÉΓòÉ
  7158.  
  7159. Description 
  7160.   An operational expression consists of one or more single operations. A single 
  7161.   operation may be either a prefix operation (an operator preceding a single 
  7162.   operand) or an infix operation (an operator between two operands). 
  7163.  
  7164.   The operands of an operation in a PL/I expression must be of the same data 
  7165.   type before the operation is performed. PL/I follows a fixed set of rules for 
  7166.   data conversions. 
  7167.  
  7168. Related Information 
  7169.   There are five classes of operations in PL/I. Choose one of the following for 
  7170.   help with using a particular type of operation in an expression: 
  7171.  
  7172.     Using arithmetic operations 
  7173.     Using bit operations 
  7174.     Using comparison operations 
  7175.     Using concatenation operations 
  7176.     Using combinations of operations 
  7177.  
  7178.  
  7179. ΓòÉΓòÉΓòÉ <hidden> Using Arithmetic Operations ΓòÉΓòÉΓòÉ
  7180.  
  7181. You specify an arithmetic operation by combining operands with arithmetic 
  7182. operators. Arithmetic operations can also be specified using the ADD, SUBTRACT, 
  7183. MULTIPLY, and DIVIDE built-in functions. 
  7184.  
  7185. The two operands of an arithmetic operation may differ in type, base, mode, 
  7186. precision, and scale. When they differ, conversion must take place for the 
  7187. expression to be evaluated. 
  7188.  
  7189. After the necessary conversion of the operands in an expression has been 
  7190. carried out, the arithmetic operation is performed and a result is obtained. 
  7191. This result can be the value of the expression, or it can be an intermediate 
  7192. result target upon which further operations are to be performed, or a condition 
  7193. to be raised. 
  7194.  
  7195.  
  7196. ΓòÉΓòÉΓòÉ <hidden> Arithmetic Operators ΓòÉΓòÉΓòÉ
  7197.  
  7198. Description 
  7199.   The arithmetic operators consist of: 
  7200.  
  7201.         +  -  *  /  **
  7202.  
  7203.   You may use the plus and minus signs as prefix operators (an operator 
  7204.   preceding a single operand) or as infix operators (an operator between two 
  7205.   operands). All other arithmetic operators can appear only as infix operators. 
  7206.  
  7207. Example 
  7208.   Prefix operators can precede and be associated with any of the operands of an 
  7209.   infix operation. For example, in the expression: 
  7210.  
  7211.         A*-B
  7212.  
  7213.   the minus sign indicates that the value of A is to be to be multiplied by -1 
  7214.   times the value of B. 
  7215.  
  7216.   More than one prefix operator can precede and be associated with a single 
  7217.   variable. More than one positive prefix operator has no cumulative effect, 
  7218.   but two negative prefix operators have the same effect as a single positive 
  7219.   prefix operator. 
  7220.  
  7221.  
  7222. ΓòÉΓòÉΓòÉ <hidden> Using Bit Operations ΓòÉΓòÉΓòÉ
  7223.  
  7224. Description 
  7225.   You specify a bit operation by combining operands with a logical operator. 
  7226.  
  7227.   Operands of a bit operation are converted, if necessary, to bit strings 
  7228.   before the operation is performed. If the operands of an infix operation (an 
  7229.   operator between two operands) do not have the same length, the shorter 
  7230.   operand is padded on the right with '0'B. 
  7231.  
  7232.   The result of a bit operation is a bit string equal in length to the length 
  7233.   of the operands. Because bit operations are performed on a bit-by-bit basis, 
  7234.   there will be a result for each bit position for each of the operators. 
  7235.  
  7236.   In addition to performing the NOT, XOR, AND, and OR operations using logical 
  7237.   operators, you can perform Boolean operations using the BOOL built-in 
  7238.   function. 
  7239.  
  7240. Example 
  7241.   Using bit operations 
  7242.  
  7243.  
  7244. ΓòÉΓòÉΓòÉ <hidden> Examples- Using Bit Operations ΓòÉΓòÉΓòÉ
  7245.  
  7246. In the following examples: 
  7247.  
  7248.  The value of operand A is '010111'B 
  7249.  The value of operand B is '111111'B 
  7250.  The value of operand C is '110'B 
  7251.  The value of operand D is 5 
  7252.  
  7253. Based on these values: 
  7254.  
  7255. ╨║ A yields '101000'B
  7256. ╨║ C yields '001'B
  7257. C & B yields '110000'B
  7258. A | B yields '111111'B
  7259. C | B yields '111111'B
  7260. A | (╨║C) yields '011111'B
  7261. ╨║((╨║C)|(╨║B)) yields '110111'B
  7262. SUBSTR (A,1,1)|(D=5) yields '1'B
  7263.  
  7264.  
  7265. ΓòÉΓòÉΓòÉ <hidden> Bit Operations - Results (Bit-by-Bit) ΓòÉΓòÉΓòÉ
  7266.  
  7267. The following table illustrates the result for each bit position for each of 
  7268. the operators: 
  7269.  
  7270. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7271. Γöé   A   Γöé  B    Γöé  ╨║A   Γöé  ╨║B   Γöé  A&B  Γöé  A|B  Γöé  A╨║B  Γöé
  7272. ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7273. Γöé   1   Γöé  1    Γöé   0   Γöé   1   Γöé  1    Γöé   1   Γöé   0   Γöé
  7274. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7275. Γöé   1   Γöé  0    Γöé   0   Γöé   1   Γöé  0    Γöé   1   Γöé   1   Γöé
  7276. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7277. Γöé   0   Γöé  1    Γöé   1   Γöé   0   Γöé  0    Γöé   1   Γöé   1   Γöé
  7278. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7279. Γöé   0   Γöé  0    Γöé   1   Γöé   1   Γöé  0    Γöé   0   Γöé   0   Γöé
  7280. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7281.  
  7282.  
  7283. ΓòÉΓòÉΓòÉ <hidden> Using Comparison Operations ΓòÉΓòÉΓòÉ
  7284.  
  7285. Description 
  7286.   You specify a comparison operation by combining operands with one of the 
  7287.   comparison operators. 
  7288.  
  7289.   The result of a comparison operation is always a bit string of length 1. The 
  7290.   value is '1'B if the relationship is true, or '0'B if the relationship is 
  7291.   false. 
  7292.  
  7293. Related Information 
  7294.   You can use several different types of comparisons. Select one of the 
  7295.   following for additional help on a particular type of comparison operation: 
  7296.  
  7297.     Algebraic comparisons 
  7298.     Character comparisons 
  7299.     Bit comparisons 
  7300.     Graphic comparisons 
  7301.     Locator data comparisons 
  7302.     Program control data comparisons 
  7303.  
  7304. Example 
  7305.   Using comparison operations 
  7306.  
  7307.  
  7308. ΓòÉΓòÉΓòÉ <hidden> Locator Data Comparisons ΓòÉΓòÉΓòÉ
  7309.  
  7310. Both pointers and offset variables can be compared using infix comparison 
  7311. operators. 
  7312.  
  7313. The following is a list of the infix operators which can be used in a 
  7314. comparison of locator data operands: 
  7315.  
  7316.  Less than         < 
  7317.  Not less than       ╨║< 
  7318.  Less than or equal to   <= 
  7319.  Equal to          = 
  7320.  Not equal to        ╨║= 
  7321.  Greater than or equal to  >= 
  7322.  Greater than        > 
  7323.  Not greater than      ╨║> 
  7324.  
  7325. The only data type conversion that can take place is offset to pointer, and 
  7326. this only occurs if the comparison is = or ╨║=. 
  7327.  
  7328.  
  7329. ΓòÉΓòÉΓòÉ <hidden> Program Control Data Comparisons ΓòÉΓòÉΓòÉ
  7330.  
  7331. Use only the comparison operators = and ╨║= in comparing program control data. 
  7332. Also, be aware that no data type conversions can take place in program control 
  7333. data comparisons. Any data type differences between operands for program 
  7334. control data comparisons are in error. 
  7335.  
  7336. Comparisons are equal for the following types of program control data operands 
  7337. under the following conditions: 
  7338.  
  7339. Entry 
  7340.   In a comparison operation, it is not an error to specify an entry variable 
  7341.   whose value is an entry point of an inactive block. These variables will 
  7342.   compare equal. However, entry names on the same PROCEDURE statement do not 
  7343.   compare equal. 
  7344.  
  7345. File 
  7346.   If the operands represent file values, all of whose parts are equal, the file 
  7347.   variables will compare equal. 
  7348.  
  7349. Format 
  7350.   Format labels on the same statement compare equal. 
  7351.  
  7352. Label 
  7353.   Labels on the same statement compare equal. In a comparison operation, it is 
  7354.   not an error to specify a label variable whose value is a label constant used 
  7355.   in a block that is no longer active. 
  7356.  
  7357.   The label on a compound statement does not compare equal with that on any 
  7358.   label contained in the body of the compound statement. 
  7359.  
  7360.  
  7361. ΓòÉΓòÉΓòÉ <hidden> Examples of Comparison Operations ΓòÉΓòÉΓòÉ
  7362.  
  7363. Following are some examples of comparison operations used in several different 
  7364. ways. 
  7365.  
  7366.  The following example shows a comparison operation in an IF statement: 
  7367.  
  7368.     IF A = B
  7369.         THEN action-if-true;
  7370.         ELSE action-if-false;
  7371.  
  7372.   The evaluation of the expression A = B yields either '1'B for true, or '0'B 
  7373.   for false. 
  7374.  
  7375.  
  7376.  In the following assignment statement, the value '1'B is assigned to X if A 
  7377.   is less than B. Otherwise, the  value '0'B is assigned. 
  7378.  
  7379.     X = A <= B;
  7380.  
  7381.  In the following assignment statement: 
  7382.  
  7383.     X = A = B;
  7384.  
  7385.   the first = symbol is the assignment symbol. The second = symbol is the 
  7386.   comparison operator. The value '1'B is assigned to X if A is equal to B. 
  7387.   Otherwise, the value '0'B is assigned. 
  7388.  
  7389.  
  7390.  An example of comparisons in an arithmetic expression is: 
  7391.  
  7392.     (X<0)*A + (0<=X & X<=100)*B + (100<X)*C
  7393.  
  7394.   Here, the value of the expression is A,B, or C and is determined by the value 
  7395.   of X. Multiple comparisons using & and/or | operators may be evaluated in any 
  7396.   order. 
  7397.  
  7398.  
  7399. ΓòÉΓòÉΓòÉ <hidden> Using Concatenation Operations ΓòÉΓòÉΓòÉ
  7400.  
  7401. You specify a concatenation operation by combining operands with the 
  7402. concatenation operator, Γòæ. This operator is an infix operator, so you must 
  7403. place it between two operands. 
  7404.  
  7405. Concatenation signifies that the operands are to be joined in such a way that 
  7406. the last character, bit, or graphic of the operand to the left immediately 
  7407. precedes the first character, bit, or graphic of the operand to the right (with 
  7408. nothing intervening). 
  7409.  
  7410. Concatenation can be performed only on strings- either character, bit, or 
  7411. graphic. String conversions in concatenation will occur if you mix string 
  7412. types. 
  7413.  
  7414.  
  7415. ΓòÉΓòÉΓòÉ <hidden> String Conversions in Concatenation ΓòÉΓòÉΓòÉ
  7416.  
  7417. The concatenation operator, Γòæ, can cause conversion to a string type because 
  7418. concatenation can be performed only on strings (character, bit, or graphic). 
  7419.  
  7420. Note the following conversion rules: 
  7421.  
  7422.  If either operand is graphic, the result is graphic; otherwise, 
  7423.  
  7424.  If both operands are bit, the result is bit; otherwise, 
  7425.  
  7426.  Implicit conversion is to the character string type. 
  7427.  
  7428.  
  7429. ΓòÉΓòÉΓòÉ <hidden> Using Combinations of Operations ΓòÉΓòÉΓòÉ
  7430.  
  7431. Description 
  7432.   An expression can contain multiple operations. You can use any combination of 
  7433.   operations. 
  7434.  
  7435.   If you use multiple operators in an expression, the expression will be 
  7436.   evaluated based on a priority of operations. 
  7437.  
  7438.   Each operation within an expression is evaluated according to the rules for 
  7439.   that kind of operation, with necessary data conversions taking place before 
  7440.   the operation is performed. 
  7441.  
  7442. Example 
  7443.   Combining operations 
  7444.  
  7445.  
  7446. ΓòÉΓòÉΓòÉ <hidden> Example - Combining Operations ΓòÉΓòÉΓòÉ
  7447.  
  7448. Different types of combinations can be combined in a single operational 
  7449. expression. For example: 
  7450.  
  7451. DECLARE RESULT BIT(3),
  7452.   A FIXED DECIMAL(1),
  7453.   B FIXED BINARY(3),
  7454.   C CHARACTER(2), D BIT(4);
  7455. RESULT = A + B < C & D;
  7456.  
  7457. The final expression in the example is evaluated as follows: 
  7458.  
  7459.  The decimal value of A is converted to binary base. 
  7460.  The binary addition is performed, adding A and B. 
  7461.  The binary result is compared with the converted binary value of C. 
  7462.  The bit result of the comparison is extended to the length of the bit 
  7463.   variable D, and the "and" operation is performed. 
  7464.  The result of the "and" operation, a bit string of length 4, is assigned to 
  7465.   RESULT without conversion, but with truncation on the right. 
  7466.  
  7467. The expression in this example is evaluated operation-by-operation, from left 
  7468. to right.  Such is the case for this particular expression. The order of 
  7469. evaluation, however, depends upon the priority of the operators appearing in 
  7470. the expression. 
  7471.  
  7472.  
  7473. ΓòÉΓòÉΓòÉ <hidden> Using Array Expressions ΓòÉΓòÉΓòÉ
  7474.  
  7475. Description 
  7476.   Evaluation of an array expression yields an array result. 
  7477.  
  7478.   All operations performed on arrays are performed element-by-element, in 
  7479.   row-major order. Therefore, when you refer to arrays in an array expression, 
  7480.   be sure that all of the arrays have the same number of dimensions. 
  7481.   Furthermore, each dimension must be of identical bounds. 
  7482.  
  7483.   Your array expressions can include variables and constants. You may combine 
  7484.   operations, subject to necessary data type conversions. 
  7485.  
  7486. Related Information 
  7487.  
  7488.     Prefix operators and arrays 
  7489.     Infix operators and arrays 
  7490.  
  7491.  
  7492. ΓòÉΓòÉΓòÉ <hidden> Prefix Operators and Arrays ΓòÉΓòÉΓòÉ
  7493.  
  7494. Description 
  7495.   The operation of a prefix operator (an operator preceding a single operand) 
  7496.   on an array produces an array of identical bounds. Each element of this array 
  7497.   is the result of the operation performed on each element of the original 
  7498.   array. 
  7499.  
  7500. Example 
  7501.   Using a prefix operator on an array 
  7502.  
  7503.  
  7504. ΓòÉΓòÉΓòÉ <hidden> Infix Operators and Arrays ΓòÉΓòÉΓòÉ
  7505.  
  7506. Description 
  7507.   Array expressions can include infix operators (an operator between two 
  7508.   operands). 
  7509.  
  7510.   Infix operations that include an array variable as one operand can have a 
  7511.   variable, constant, or another array as the other operand. 
  7512.  
  7513.   If the two operands of an infix operator are arrays, the arrays must have the 
  7514.   same number of dimensions. The corresponding dimensions must also have 
  7515.   identical lower and upper bounds. The result is an array with bounds 
  7516.   identical to those of the original arrays. 
  7517.  
  7518. Example 
  7519.   Array and array infix operations 
  7520.  
  7521.  
  7522. ΓòÉΓòÉΓòÉ <hidden> Examples - Array and Array Infix Operations ΓòÉΓòÉΓòÉ
  7523.  
  7524. You may use infix operators between arrays of identical dimensions and bounds. 
  7525. For example: 
  7526.  
  7527. If A is the array          2   4   3
  7528.                            6   1   7
  7529.                            4   8   2
  7530.  
  7531. and if B is the array      1   5   7
  7532.                            8   3   4
  7533.                            6   3   1
  7534.  
  7535. then A + B is the array    3   9   10
  7536.                            14  4   11
  7537.                            10  11  3
  7538.  
  7539. and A*B is the array       2   20  21
  7540.                            48  3   28
  7541.                            24  24  2
  7542.  
  7543. and 9>A is the array       1   0   0
  7544. of length 1 bit strings    0   0   1
  7545.                            0   1   1
  7546.  
  7547.  
  7548. ΓòÉΓòÉΓòÉ 1.4. PL/I Condition Handling ΓòÉΓòÉΓòÉ
  7549.  
  7550. Description 
  7551.   While a PL/I program is executed, a number of conditions are detected if they 
  7552.   are raised.  These conditions can be errors (such as overflow or an 
  7553.   input/output transmission error) or they can be conditions that are expected 
  7554.   (such as the end of an input file or the end of a page when output is being 
  7555.   printed).  A condition is also raised when a SIGNAL statement for that 
  7556.   condition is executed. 
  7557.  
  7558.   A condition is enabled when raising it executes an action.  An action 
  7559.   specified to be executed when an enabled condition is raised is established. 
  7560.   You use the enabling of conditions and specifying of the action required when 
  7561.   a condition is raised to control the handling of conditions. 
  7562.  
  7563.   The established action can be an ON-unit or the implicit action defined for 
  7564.   the condition. 
  7565.  
  7566.   When an ON-unit is invoked, it is treated as a procedure without parameters. 
  7567.   To assist you in making use of ON-units, built-in functions and 
  7568.   pseudovariables are provided so that you can find out about the cause of a 
  7569.   condition. 
  7570.  
  7571.   The implicit action for many conditions is raising the ERROR condition.  This 
  7572.   provides a common condition that can be used to check for a number of 
  7573.   different conditions, rather than checking each condition separately. 
  7574.  
  7575.   The condition handling built-in functions provide information, such as the 
  7576.   name of the entry point of the procedure in which the condition was raised, 
  7577.   the character or character string that raised a CONVERSION condition, the 
  7578.   value of the key used in the last record transmitted, and so on.  Some can be 
  7579.   used as pseudovariables for error correction. 
  7580.  
  7581.   The ONCODE built-in function provides a fixed-point binary value of precision 
  7582.   (15,0) whose value depends on the cause of the last condition.  ONCODE can be 
  7583.   used to distinguish between the various circumstances that raise a particular 
  7584.   condition (for instance, the ERROR condition). 
  7585.  
  7586. Related Information 
  7587.  
  7588.     Conditions 
  7589.     Condition enabling/disabling 
  7590.     ON-units 
  7591.     CONDITION attribute 
  7592.     Multiple conditions 
  7593.  
  7594.  
  7595. ΓòÉΓòÉΓòÉ <hidden> CONDITION Attribute ΓòÉΓòÉΓòÉ
  7596.  
  7597. Description 
  7598.   The CONDITION attribute specifies that the declared name identifies a 
  7599.   programmer-defined condition. 
  7600.  
  7601.   A name that appears with the CONDITION condition in an ON, SIGNAL, or REVERT 
  7602.   statement is contextually declared to be a condition name. 
  7603.  
  7604.   The default scope is EXTERNAL. 
  7605.  
  7606. Syntax 
  7607.  
  7608. ΓöÇΓöÇΓöÇΓöÇCONDITIONΓöÇΓöÇΓöÇΓöÇ
  7609.  
  7610.  
  7611. ΓòÉΓòÉΓòÉ <hidden> Condition Enabling/Disabling ΓòÉΓòÉΓòÉ
  7612.  
  7613. Description 
  7614.   Some conditions are always enabled; they cannot be disabled. Some are enabled 
  7615.   unless you disable them. And some are disabled unless you enable them. 
  7616.  
  7617.   Conditions are either enabled or disabled when the name of the condition 
  7618.   appears in a condition-prefix on a statement. A condition prefix can be 
  7619.   attached to any statement except a DECLARE statement, DEFAULT statement, or % 
  7620.   statement. It indicates that the corresponding condition is enabled (or 
  7621.   disabled) within the scope of the prefix. 
  7622.  
  7623.   When an enabled condition is raised, it causes the established action to 
  7624.   happen. The action performed can be the implicit action defined by the 
  7625.   condition, or an action that you specify in an ON-unit. 
  7626.  
  7627.   When a condition is disabled, the raising of the condition does not execute 
  7628.   an action. 
  7629.  
  7630. Example 
  7631.   Consider the following use of condition prefixes: 
  7632.  
  7633.     (SIZE):  L1:  X=(I**N) / (M+L);
  7634.  
  7635.   (SIZE): is the condition prefix; L1 is the label prefix. 
  7636.  
  7637. Related Information 
  7638.  
  7639.     Classes and statuses of conditions 
  7640.     Scope of the condition prefix 
  7641.  
  7642. Syntax 
  7643.  
  7644.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7645.      Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé
  7646.                                Γöé      Γöé
  7647. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇconditionΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇ):ΓöÇΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  7648.               ΓööΓöÇΓöÇNO-conditionΓöÇΓöÿ           ΓööΓöÇΓöÇstatementΓöÇΓöÇΓöÿ
  7649.  
  7650.  
  7651. ΓòÉΓòÉΓòÉ <hidden> Classes and Statuses of Conditions ΓòÉΓòÉΓòÉ
  7652.  
  7653. Key 
  7654.   The following defines the classes and the statuses of conditions in the table 
  7655.   below: 
  7656.  
  7657.    Always enabled 
  7658.         These conditions cannot be disabled. 
  7659.  
  7660.    Default disabled 
  7661.         These conditions are disabled until you enable them. 
  7662.  
  7663.    Default enabled 
  7664.         These conditions are enabled until you disable them. 
  7665.  
  7666. _____________________________________________________________________________
  7667.  
  7668. Class and conditions  Status     To enable/disable, use:
  7669. _____________________________________________________________________________
  7670.  
  7671. Computational (for data handling, expression evaluation, and computation)
  7672.  
  7673. CONVERSION              Default enabled         CONVERSION/NOCONVERSION
  7674. FIXEDOVERFLOW           Default enabled         FIXEDOVERFLOW/NOFIXEDOVERFLOW
  7675. OVERFLOW                Default enabled         OVERFLOW/NOOVERFLOW
  7676. UNDERFLOW               Default enabled         UNDERFLOW/NOUNDERFLOW
  7677. ZERODIVIDE              Default enabled         ZERODIVIDE/NOZERODIVIDE
  7678. _____________________________________________________________________________
  7679.  
  7680. Input/Output
  7681.  
  7682. ENDFILE                 Always enabled
  7683. ENDPAGE                 Always enabled
  7684. KEY                     Always enabled
  7685. NAME                    Always enabled
  7686. PENDING 1               Always enabled
  7687. RECORD                  Always enabled
  7688. TRANSMIT                Always enabled
  7689. UNDEFINEDFILE           Always enabled
  7690. _____________________________________________________________________________
  7691.  
  7692. Program Checkout (for debugging a program)
  7693.  
  7694. SIZE                    Default disabled         SIZE/NOSIZE
  7695. STRINGRANGE             Default disabled         STRINGRANGE/NOSTRINGRANGE
  7696. STRINGSIZE              Default disabled         STRINGSIZE/NOSTRINGSIZE
  7697. SUBSCRIPTRANGE          Default disabled         SUBSCRIPTRANGE/NOSUBSCRIPTRANGE
  7698. _____________________________________________________________________________
  7699.  
  7700. Miscellaneous
  7701.  
  7702. AREA                    Always enabled
  7703. ATTENTION               Always enabled
  7704. CONDITION               Always enabled
  7705. ERROR                   Always enabled
  7706. FINISH                  Always enabled
  7707.  
  7708. Note:    1  PENDING is for MVS only.
  7709.  
  7710.  
  7711. _____________________________________________________________________________
  7712.  
  7713.  
  7714. ΓòÉΓòÉΓòÉ <hidden> Scope of the Condition Prefix ΓòÉΓòÉΓòÉ
  7715.  
  7716. The scope of a condition prefix (the part of the program throughout which it 
  7717. applies) is the statement or block to which the prefix is attached. The prefix 
  7718. does not necessarily apply to any procedures or ON-units that can be invoked in 
  7719. the execution of the statement. 
  7720.  
  7721. A condition prefix attached to a PROCEDURE or BEGIN statement applies to all 
  7722. the statements up to and including the corresponding END statement. This 
  7723. includes other PROCEDURE or BEGIN statements nested within that block. 
  7724.  
  7725. The enabling or disabling of a condition can be redefined within a block by 
  7726. attaching a prefix to statements within the block, including PROCEDURE and 
  7727. BEGIN statements (thus redefining the enabling or disabling of the condition 
  7728. within nested blocks). Such a redefinition applies only to the execution of the 
  7729. statement to which the prefix is attached. In the case of a nested PROCEDURE or 
  7730. BEGIN statement, it applies only to the block the statement defines, as well as 
  7731. any blocks contained within that block. 
  7732.  
  7733.  
  7734. ΓòÉΓòÉΓòÉ <hidden> ON-Units ΓòÉΓòÉΓòÉ
  7735.  
  7736. Description 
  7737.   An implicit action exists for every language-defined condition. When an 
  7738.   enabled condition is raised, this implicit action is executed unless an 
  7739.   ON-unit for that condition is in effect. 
  7740.  
  7741.   When an ON-unit is invoked, it is treated as a procedure without parameters. 
  7742.   To assist you in making use of ON-units, you can use the condition handling 
  7743.   built-in functions to inquire about the cause of the condition. They extract 
  7744.   information such as the name of the entry point of the procedure in which the 
  7745.   condition was raised, the character or character string that raised a 
  7746.   CONVERSION condition, the value of the key used in the last record 
  7747.   transmitted, and so on. 
  7748.  
  7749.   You can use the ONSOURCE pseudovariable and the ONCHAR pseudovariable in 
  7750.   CONVERSION ON-units to correct conversion errors. 
  7751.  
  7752. Related Information 
  7753.  
  7754.     ON statement 
  7755.     REVERT statement 
  7756.     SIGNAL statement 
  7757.     Null ON-unit 
  7758.     Scope of the ON-unit 
  7759.     Dynamically descendant ON-units 
  7760.     ON-units for file variables 
  7761.  
  7762.  
  7763. ΓòÉΓòÉΓòÉ <hidden> ON Statement ΓòÉΓòÉΓòÉ
  7764.  
  7765. Description 
  7766.   The ON statement establishes the action to be executed for any subsequent 
  7767.   raising of an enabled condition in the scope of the established action. 
  7768.  
  7769. Syntax 
  7770.  
  7771. ΓöÇΓöÇΓöÇΓöÇONΓöÇΓöÇΓöÇΓöÇΓöÇconditionΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇSYSTEM;ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  7772.                             ΓööΓöÇΓöÇSNAPΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇON-unitΓöÇΓöÇΓöÇΓöÿ
  7773.  
  7774.  
  7775. ΓòÉΓòÉΓòÉ <hidden> ON-Unit Specification ΓòÉΓòÉΓòÉ
  7776.  
  7777. ON-unit 
  7778.           specifies the action to be executed when the condition is raised and 
  7779.           enabled. The action is defined by the statement or statements in the 
  7780.           ON-unit itself. The ON-unit is not executed at the time the ON 
  7781.           statement is executed; it is executed only when the specified enabled 
  7782.           condition is raised. 
  7783.  
  7784.           The ON-unit can be either a single unlabeled simple statement or an 
  7785.           unlabeled begin block. If it is an unlabeled simple statement, it can 
  7786.           be any simple statement except BEGIN, DECLARE, DEFAULT, DO, END, 
  7787.           ENTRY, FORMAT, LEAVE, OTHERWISE, PROCEDURE, RETURN, SELECT, WHEN, or 
  7788.           % statements. If the ON-unit is an unlabeled begin block, a RETURN 
  7789.           statement can appear only within a procedure nested within the begin 
  7790.           block; a LEAVE statement can appear only within a do-group nested 
  7791.           within the begin block. 
  7792.  
  7793.           An ON-unit is treated as a procedure (without parameters) that is 
  7794.           internal to the block in which it appears. Any names referenced in an 
  7795.           ON-unit are those known in the environment in which the ON statement 
  7796.           for that ON-unit was executed, rather than the environment in which 
  7797.           the condition was raised. 
  7798.  
  7799.           When execution of the ON-unit is complete, control generally returns 
  7800.           to the block from which the ON-unit was entered. Just as with a 
  7801.           procedure, control can be transferred out of an ON-unit by a GO TO 
  7802.           statement. In this case, control is transferred to the point 
  7803.           specified in the GO TO, and a normal return does not occur. 
  7804.  
  7805.           The specific point to which control returns from an ON-unit varies 
  7806.           for different conditions. 
  7807.  
  7808.           ON-units, except certain single-statement ON-units, are treated as 
  7809.           separate program blocks. They are separated from the ON statement and 
  7810.           compiled with prologue and epilogue code. In order to save the 
  7811.           overhead of executing prologue and epilogue code, certain 
  7812.           single-statement ON-units are not compiled. Instead, the action 
  7813.           required is carried out under the control of the error handling 
  7814.           routine.  The types of ON-units involved are: 
  7815.  
  7816.     Null ON-units 
  7817.  
  7818.     ON-units containing only the SNAP option, the SNAP SYSTEM option, or the 
  7819.      SYSTEM option 
  7820.  
  7821.     ON-units containing only a GO TO statement. 
  7822.  
  7823.  
  7824. ΓòÉΓòÉΓòÉ <hidden> REVERT Statement ΓòÉΓòÉΓòÉ
  7825.  
  7826. Description 
  7827.   Execution of the REVERT statement in a given block cancels the action 
  7828.   specification of any ON statement for the condition that executed in that 
  7829.   block. Execution then re-establishes the action specification that was in 
  7830.   force at the time of the activation of the block.  It can affect only ON 
  7831.   statements that are internal to the block in which the REVERT statement 
  7832.   occurs and which have been executed in the same invocation of that block. 
  7833.  
  7834.   The execution of a REVERT statement has the effect described above only if 
  7835.   both of the following are true: 
  7836.  
  7837.     1. An ON statement, specifying the same condition and internal to the same 
  7838.        invocation of the same block, was executed after the block was activated 
  7839.  
  7840.     2. The execution of no other similar REVERT statement has intervened. If 
  7841.        either of these two conditions is not met, the REVERT statement is 
  7842.        treated as a null statement. 
  7843.  
  7844. Syntax 
  7845.  
  7846.  
  7847.  
  7848. ΓöÇΓöÇΓöÇΓöÇREVERTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇconditionΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  7849.  
  7850.  
  7851. ΓòÉΓòÉΓòÉ <hidden> SIGNAL Statement ΓòÉΓòÉΓòÉ
  7852.  
  7853. Description 
  7854.   You can raise a condition by means of the SIGNAL statement. This statement 
  7855.   can be used in program testing to verify the action of an ON-unit and to 
  7856.   determine whether the correct action is associated with the condition. The 
  7857.   established action is taken unless the condition is disabled. 
  7858.  
  7859.   If the specified condition is disabled, the SIGNAL statement becomes 
  7860.   equivalent to a null statement. 
  7861.  
  7862. Syntax 
  7863.  
  7864. ΓöÇΓöÇΓöÇΓöÇSIGNALΓöÇΓöÇΓöÇΓöÇconditionΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  7865.  
  7866.  
  7867. ΓòÉΓòÉΓòÉ <hidden> Scope of the ON-Unit ΓòÉΓòÉΓòÉ
  7868.  
  7869. The execution of an ON statement establishes an action specification for a 
  7870. condition. Once this action is established, it remains established throughout 
  7871. that block and throughout all dynamically-descendent blocks until it is 
  7872. overridden by the execution of another ON statement or a REVERT statement or 
  7873. until termination of the block in which the ON statement is executed. 
  7874.  
  7875. When another ON statement specifies the same conditions: 
  7876.  
  7877.  If a later ON statement specifies the same condition as a prior ON statement 
  7878.   and this later ON statement is executed in a block which is a dynamic 
  7879.   descendent of the block containing the prior ON statement, the action 
  7880.   specification of the prior ON statement is temporarily suspended, or stacked. 
  7881.   It can be restored either by the execution of a REVERT statement, or by the 
  7882.   termination of the block containing the later ON statement. 
  7883.  
  7884.   When control returns from a block, all established actions that existed at 
  7885.   the time of its activation are re-established. This makes it impossible for a 
  7886.   subroutine to alter the action established for the block that invoked the 
  7887.   subroutine. 
  7888.  
  7889.  If the later ON statement and the prior ON statement are internal to the same 
  7890.   invocation of the same block, the effect of the prior ON statement is 
  7891.   logically nullified. No re-establishment is possible, except through 
  7892.   execution of another ON statement (or re-execution of an overridden ON 
  7893.   statement). 
  7894.  
  7895.  
  7896. ΓòÉΓòÉΓòÉ <hidden> Multiple Conditions ΓòÉΓòÉΓòÉ
  7897.  
  7898. A multiple condition is the simultaneous raising of two or more conditions. 
  7899.  
  7900. The conditions for which a multiple condition can occur are: 
  7901.  
  7902.  RECORD 
  7903.  TRANSMIT 
  7904.  
  7905. The TRANSMIT condition is always processed first. The RECORD condition is 
  7906. ignored unless there is a normal return from the TRANSMIT ON-unit. 
  7907.  
  7908. Multiple conditions are processed successively. When one of the following 
  7909. occurs, no subsequent conditions are processed: 
  7910.  
  7911.  The processing of a condition terminates the program, through either implicit 
  7912.   action for the condition, normal return from an ON-unit, or abnormal 
  7913.   termination in the ON-unit. 
  7914.  
  7915.  Control is transferred out of an ON-unit by means of a GO TO statement, so 
  7916.   that a normal return is not allowed. 
  7917.  
  7918.  
  7919. ΓòÉΓòÉΓòÉ <hidden> Conditions ΓòÉΓòÉΓòÉ
  7920.  
  7921. Description 
  7922.   In general, the following information is given for each condition: 
  7923.  
  7924.     A discussion of the condition, including its syntax and the circumstances 
  7925.      under which the condition can be raised.  A condition can always be raised 
  7926.      by a SIGNAL statement; this fact is not included in the descriptions. 
  7927.  
  7928.     Result - the result of the operation that raised the condition. This 
  7929.      applies when the condition is disabled as well as when it is enabled. In 
  7930.      some cases, the result is undefined. 
  7931.  
  7932.     Implicit action - the action taken when an enabled condition is raised and 
  7933.      no ON-unit is currently established for the condition. 
  7934.  
  7935.     Status - an indication of the enabled/disabled status of the condition at 
  7936.      the start of the program, and how the condition can be disabled (if 
  7937.      possible) or enabled. 
  7938.  
  7939.     Normal return - the point to which control is returned as a result of the 
  7940.      normal termination of the ON-unit. A GO TO statement that transfers 
  7941.      control out of an ON-unit is an abnormal ON-unit termination. If a 
  7942.      condition (except the ERROR condition) has been raised by the SIGNAL 
  7943.      statement, the normal return is always to the statement immediately 
  7944.      following SIGNAL. 
  7945.  
  7946.     Condition codes - the codes corresponding to the conditions and errors for 
  7947.      which the program is checked. For an explanation of each code, see 
  7948.      "Related Information" below. 
  7949.  
  7950. Conditions 
  7951.   The following are the PL/I conditions: 
  7952.  
  7953.    AREA condition                    OVERFLOW condition 
  7954.  
  7955.    ATTENTION condition               PENDING condition 
  7956.  
  7957.    CONDITION condition               RECORD condition 
  7958.  
  7959.    CONVERSION condition              SIZE condition 
  7960.  
  7961.    ENDFILE condition                 STRINGRANGE condition 
  7962.  
  7963.    ENDPAGE condition                 STRINGSIZE condition 
  7964.  
  7965.    ERROR condition                   SUBSCRIPTRANGE condition 
  7966.  
  7967.    FINISH condition                  TRANSMIT condition 
  7968.  
  7969.    FIXEDOVERFLOW condition           UNDEFINEDFILE condition 
  7970.  
  7971.    KEY condition                     UNDERFLOW condition 
  7972.  
  7973.    NAME condition                    ZERODIVIDE condition 
  7974.  
  7975. Related Information 
  7976.   Condition codes 
  7977.  
  7978.  
  7979. ΓòÉΓòÉΓòÉ <hidden> AREA Condition ΓòÉΓòÉΓòÉ
  7980.  
  7981. The AREA condition is raised in either of the following circumstances: 
  7982.  
  7983.  When an attempt is made to allocate a based variable within an area that 
  7984.   contains insufficient free storage for the allocation to be made. 
  7985.  
  7986.  When an attempt is made to perform an area assignment, and the target area 
  7987.   contains insufficient storage to accommodate the allocations in the source 
  7988.   area. 
  7989.  
  7990. The syntax for AREA is: 
  7991.  
  7992. ΓöÇΓöÇΓöÇΓöÇAREAΓöÇΓöÇΓöÇΓöÇ
  7993.  
  7994. Result:  In both cases the attempted allocation or assignment has no effect. 
  7995.  
  7996. Implicit Action:  A message is printed and the ERROR condition is raised. 
  7997.  
  7998. Status:  AREA is always enabled. 
  7999.  
  8000. Normal return:  On normal return from the ON-unit, the action is as follows: 
  8001.  
  8002.  If the condition was raised by an allocation and the ON-unit is a null 
  8003.   ON-unit, the allocation is not re-attempted. 
  8004.  
  8005.  If the condition was raised by an allocation, the allocation is re-attempted. 
  8006.   Before the attempt is made, the area reference is re-evaluated. Thus, if the 
  8007.   ON-unit has changed the value of a pointer qualifying the reference to the 
  8008.   inadequate area so that it points to another area, the allocation is 
  8009.   re-attempted within the new area. 
  8010.  
  8011.  If the condition was raised by an area assignment, or by a SIGNAL statement, 
  8012.   execution continues from the point at which the condition was raised. 
  8013.  
  8014. Condition Codes:  360, 361, 362 
  8015.  
  8016.  
  8017. ΓòÉΓòÉΓòÉ <hidden> ATTENTION Condition ΓòÉΓòÉΓòÉ
  8018.  
  8019. The ATTENTION condition is raised when the user signals attention at the 
  8020. terminal during interactive processing. Raising the condition causes an 
  8021. ATTENTION ON-unit to be entered. 
  8022.  
  8023. The condition can also be raised by a SIGNAL ATTENTION statement in batch or 
  8024. conversational processing. 
  8025.  
  8026. The syntax for ATTENTION is: 
  8027.  
  8028. ΓöÇΓöÇΓöÇΓöÇATTENTIONΓöÇΓöÇΓöÇΓöÇ
  8029.  
  8030. Abbreviation: ATTN 
  8031.  
  8032. An ATTENTION ON-unit is entered when: 
  8033.  
  8034.  The environment passes an interrupt request to the program and the program 
  8035.   was compiled using the INTERRUPT option. 
  8036.  
  8037.  A SIGNAL ATTENTION statement is executed. In this case, the compile time 
  8038.   INTERRUPT option is not required. 
  8039.  
  8040. A SIGNAL ATTENTION statement causes an ON-unit to be entered. If there is no 
  8041. ATTENTION ON-unit, the condition is effectively ignored, and there is no change 
  8042. in the flow of control. 
  8043.  
  8044. Implicit action:  The attention is effectively ignored. 
  8045.  
  8046. Status:  ATTENTION is always enabled. 
  8047.  
  8048. Normal Return:  On return from an ATTENTION ON-unit, processing is resumed at a 
  8049. point in the program immediately following the point at which the condition was 
  8050. raised. 
  8051.  
  8052. Condition Code:  400 
  8053.  
  8054.  
  8055. ΓòÉΓòÉΓòÉ <hidden> CONDITION Condition ΓòÉΓòÉΓòÉ
  8056.  
  8057. The CONDITION condition is raised by a SIGNAL statement that specifies the 
  8058. appropriate name. The name specified in the SIGNAL statement determines which 
  8059. CONDITION condition is to be raised. 
  8060.  
  8061. The syntax for CONDITION is: 
  8062.  
  8063. ΓöÇΓöÇΓöÇΓöÇCONDITIONΓöÇΓöÇ(ΓöÇΓöÇnameΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8064.  
  8065. Abbreviation: COND 
  8066.  
  8067. The CONDITION condition allows you to establish an ON-unit that will be 
  8068. executed whenever a SIGNAL statement is executed specifying CONDITION and that 
  8069. name. 
  8070.  
  8071. As a debugging aid, this condition can be used to establish an ON-unit whose 
  8072. execution results in printing information that shows the current status of the 
  8073. program. The ON-unit can be executed from any point in the program through 
  8074. placement of a SIGNAL statement. Normal rules of name scope apply; a condition 
  8075. name is external by default, but can be declared INTERNAL. 
  8076.  
  8077. Example:  Including the CONDITION condition in a program 
  8078.  
  8079. Implicit action:  A message is printed and execution continues with the 
  8080. statement following SIGNAL. 
  8081.  
  8082. Status:  CONDITION is always enabled. 
  8083.  
  8084. Normal Return:  Execution continues with the statement following the SIGNAL 
  8085. statement. 
  8086.  
  8087. Condition Code: 500 
  8088.  
  8089.  
  8090. ΓòÉΓòÉΓòÉ <hidden> CONVERSION Condition ΓòÉΓòÉΓòÉ
  8091.  
  8092. The CONVERSION computational condition is raised whenever an invalid conversion 
  8093. is attempted on character data. This attempt can be made internally or during 
  8094. an input/output operation. 
  8095.  
  8096. The syntax for CONVERSION is: 
  8097.  
  8098. ΓöÇΓöÇΓöÇΓöÇCONVERSIONΓöÇΓöÇΓöÇΓöÇ
  8099.  
  8100. Abbreviation: CONV 
  8101.  
  8102. All conversions of character data are carried out character-by-character in a 
  8103. left-to-right sequence. The condition is raised for each invalid character. The 
  8104. condition is also raised if all the characters are blank, with the following 
  8105. exceptions: 
  8106.  
  8107.  For input with the F-format item, a value of zero is assumed. 
  8108.  
  8109.  For input with the E-format item, be aware that sometimes the ON-unit will be 
  8110.   repeatedly entered. 
  8111.  
  8112. When an invalid character is encountered, the current action specification for 
  8113. the condition is executed (provided, of course, that CONVERSION is not 
  8114. disabled). If the action specification is an ON-unit, the invalid character can 
  8115. be replaced within the ON-unit by using the ONSOURCE or ONCHAR pseudovariables. 
  8116.  
  8117. If the CONVERSION condition is raised and it is disabled, the program is in 
  8118. error. 
  8119.  
  8120. If the CONVERSION condition is raised under graphic conditions (that is, 
  8121. GRAPHIC built-in), the ONCHAR and ONSOURCE built-in functions do not contain 
  8122. valid source data.  If the program attempts a normal return under these 
  8123. conditions, the ERROR condition is raised. 
  8124.  
  8125. Loop Handling:  An infinite loop can occur from either of the the following two 
  8126. situations: 
  8127.  
  8128.  1. If you are converting from a character string to a numeric, and you use a 
  8129.     character string containing an 'E' or an 'F', the system can interpret the 
  8130.     'E' as part of a legitimate number in an exponential notation, or the 'F' 
  8131.     as a scaling factor.  The combination of the 'E' or the 'F' with other 
  8132.     non-numeric characters can result in an infinite loop in the error handler. 
  8133.  
  8134.  2. If you are converting from a character string to a numeric, and the 
  8135.     character string ends with the letter 'B', the conversion routine assumes 
  8136.     that the field is fixed binary.  This can also result in an infinite loop. 
  8137.  
  8138. Examples:  When CONVERSION is raised 
  8139.  
  8140. Result:  When CONVERSION is raised, the contents of the entire result field are 
  8141. undefined. 
  8142.  
  8143. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8144.  
  8145. Status:  CONVERSION is enabled throughout the program, except within the scope 
  8146. of a condition prefix specifying NOCONVERSION. 
  8147.  
  8148. Normal Return:  If CONVERSION was raised on a character string source (not 
  8149. graphic source) and either ONSOURCE or ONCHAR pseudovariables are used in the 
  8150. ON-unit, the program retries the conversion on return from the ON-unit. 
  8151.  
  8152. If the conversion error is not corrected using these pseudovariables, the 
  8153. program will loop. If these pseudovariables are not used, the ERROR condition 
  8154. is raised. 
  8155.  
  8156. Condition Codes: 600-642 
  8157.  
  8158.  
  8159. ΓòÉΓòÉΓòÉ <hidden> ENDFILE Condition ΓòÉΓòÉΓòÉ
  8160.  
  8161. The ENDFILE input/output condition can be raised during an operation by an 
  8162. attempt to read past the end of the file specified in the GET statement or READ 
  8163. statement. It applies only to SEQUENTIAL INPUT, SEQUENTIAL UPDATE, and STREAM 
  8164. INPUT files. 
  8165.  
  8166. The syntax for ENDFILE is: 
  8167.  
  8168. ΓöÇΓöÇΓöÇΓöÇENDFILEΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8169.  
  8170. In record-oriented data transmission, ENDFILE is raised whenever an end of file 
  8171. is encountered during the execution of a READ statement. 
  8172.  
  8173. In stream-oriented data transmission, ENDFILE is raised during the execution of 
  8174. a GET statement if an end of file is encountered either before any items in the 
  8175. GET statement data list have been transmitted or between transmission of two of 
  8176. the data items. If an end of file is encountered while a data item is being 
  8177. processed, or if it is encountered while an X-format item is being processed, 
  8178. the ERROR condition is raised. 
  8179.  
  8180. If the file is not closed after ENDFILE is raised, any subsequent GET or READ 
  8181. statement for that file immediately raises the ENDFILE condition again. The 
  8182. ENDFILE condition for a data transmission statement using the EVENT option is 
  8183. raised when the WAIT statement for that event is encountered. 
  8184.  
  8185. Implicit action:  A message is printed and the ERROR condition is raised. 
  8186.  
  8187. Status:  The ENDFILE condition is always enabled. 
  8188.  
  8189. Normal Return:  Execution continues with the statement immediately following 
  8190. the GET or READ statement that raised the ENDFILE. 
  8191.  
  8192. If a file is closed in an ON-unit for this condition, the results of normal 
  8193. return are undefined. Exit from such an ON-unit must be by means of a GO TO 
  8194. statement. 
  8195.  
  8196. Condition Code 70 
  8197.  
  8198.  
  8199. ΓòÉΓòÉΓòÉ <hidden> ENDPAGE Condition ΓòÉΓòÉΓòÉ
  8200.  
  8201. The ENDPAGE input/output condition is raised when a PUT statement results in an 
  8202. attempt to start a new line beyond the limit specified for the current page. 
  8203. This limit can be specified by the PAGESIZE option in an OPEN statement; if 
  8204. PAGESIZE has not been specified, a default limit of 60 is applied. The attempt 
  8205. to exceed the limit can be made during data transmission (including associated 
  8206. format items, if the PUT statement is edit-directed), by the LINE option, or by 
  8207. the SKIP option. ENDPAGE can also be raised by a LINE option or LINE format 
  8208. item that specified a line number less than the current line number. 
  8209.  
  8210. The syntax for ENDPAGE is: 
  8211.  
  8212. ΓöÇΓöÇΓöÇΓöÇENDPAGEΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8213.  
  8214. ENDPAGE is raised only once per page, except when it is raised by the SIGNAL 
  8215. statement. 
  8216.  
  8217. When ENDPAGE is raised, the current line number is one greater than that 
  8218. specified by the PAGESIZE option (default is 61) so that it is possible to 
  8219. continue writing on the same page. The ON-unit can start a new page by 
  8220. execution of a PAGE option or a PAGE format item, which sets the current line 
  8221. to one. 
  8222.  
  8223. If the ON-unit does not start a new page, the current line number can increase 
  8224. indefinitely. If a subsequent LINE option or LINE format item specifies a line 
  8225. number that is less than or equal to the current line number, ENDPAGE is not 
  8226. raised, but a new page is started with the current line set to one. An 
  8227. exception is that if the current line number is equal to the specified line 
  8228. number, and the file is positioned on column one of the line, ENDPAGE is not 
  8229. raised. 
  8230.  
  8231. If ENDPAGE is raised during data transmission, on return from the ON-unit the 
  8232. data is written on the current line, which might have been changed by the 
  8233. ON-unit. If ENDPAGE results from a LINE or SKIP option, on return from the 
  8234. ON-unit the action specified by LINE or SKIP is ignored. 
  8235.  
  8236. Implicit Action:  A new page is started. If the condition is signaled, 
  8237. execution is unaffected and continues with the statement following the SIGNAL 
  8238. statement. 
  8239.  
  8240. Status:  ENDPAGE is always enabled. 
  8241.  
  8242. Normal Return:  Execution of the PUT statement continues in the manner 
  8243. described above. 
  8244.  
  8245. Condition Code:  90 
  8246.  
  8247.  
  8248. ΓòÉΓòÉΓòÉ <hidden> ERROR Condition ΓòÉΓòÉΓòÉ
  8249.  
  8250. The ERROR condition is the implicit action for many conditions. This provides a 
  8251. common condition that can be used to check for a number of different 
  8252. conditions, rather than checking each condition separately. 
  8253.  
  8254. The ERROR condition is raised under the following circumstances: 
  8255.  
  8256.  As a result of the implicit action for a condition, which is to raise the 
  8257.   ERROR condition. 
  8258.  
  8259.  As a result of an error (for which there is no other PL/I-defined condition) 
  8260.   during program execution. 
  8261.  
  8262.  As a result of an abend. 
  8263.  
  8264.  As a result of a SIGNAL ERROR statement. 
  8265.  
  8266. An error message is issued if no ON-unit is active when the ERROR condition 
  8267. arises or if the ON-unit does not use a GO TO (to exit the block) to recover 
  8268. from the condition. 
  8269.  
  8270. The syntax for ERROR is: 
  8271.  
  8272. ΓöÇΓöÇΓöÇΓöÇERRORΓöÇΓöÇΓöÇΓöÇ
  8273.  
  8274. Implicit Action:  If a message has not already been printed as a result of an 
  8275. implicit action for some other condition, then a message is printed describing 
  8276. the error.  In all cases, the FINISH condition is raised and the program 
  8277. terminates. 
  8278.  
  8279. Status:  ERROR is always enabled. 
  8280.  
  8281. Normal Return:  The implicit action is taken. 
  8282.  
  8283. Condition Codes: 
  8284.  
  8285.  Codes 3,9 
  8286.  All codes 1000 and above 
  8287.  
  8288.  
  8289. ΓòÉΓòÉΓòÉ <hidden> FINISH Condition ΓòÉΓòÉΓòÉ
  8290.  
  8291. The FINISH condition is raised during execution of a statement that would 
  8292. terminate the PL/I program. That is, by a STOP statement or an EXIT statement 
  8293. in any procedure, or a RETURN statement or an END statement in the MAIN 
  8294. procedure of the program.  The condition is also raised by SIGNAL FINISH and as 
  8295. part of the implicit action for the ERROR condition.  An abnormal return from 
  8296. the ON-unit avoids program termination and allows the program to continue. 
  8297.  
  8298. When a program is made up of PL/I and non-PL/I procedures, the following 
  8299. actions take place: 
  8300.  
  8301.  If the termination is normal: 
  8302.  
  8303.    - The FINISH ON-Unit, if established, is given control only if the main 
  8304.      procedure is PL/I. 
  8305.  
  8306.  If the termination is abnormal: 
  8307.  
  8308.    - The FINISH ON-Unit, if established in an active block, is given control. 
  8309.  
  8310. The syntax for FINISH is: 
  8311.  
  8312. ΓöÇΓöÇΓöÇΓöÇFINISHΓöÇΓöÇΓöÇΓöÇ
  8313.  
  8314. Implicit action:  No action is taken and processing continues from the point 
  8315. where the condition was raised. 
  8316.  
  8317. Status:  FINISH is always enabled. 
  8318.  
  8319. Normal return:  Execution of the statement is resumed. 
  8320.  
  8321. Condition Code:  4 
  8322.  
  8323.  
  8324. ΓòÉΓòÉΓòÉ <hidden> FIXEDOVERFLOW Condition ΓòÉΓòÉΓòÉ
  8325.  
  8326. The FIXEDOVERFLOW computational condition is raised when the length of the 
  8327. result of a fixed-point arithmetic operation exceeds the maximum length allowed 
  8328. by the implementation. 
  8329.  
  8330. The FIXEDOVERFLOW condition differs from the SIZE condition in that SIZE is 
  8331. raised when a result exceeds the declared size of a variable, while 
  8332. FIXEDOVERFLOW is raised when a result exceeds the maximum allowed by the 
  8333. computer. 
  8334.  
  8335. The syntax for FIXEDOVERFLOW is: 
  8336.  
  8337. ΓöÇΓöÇΓöÇΓöÇFIXEDOVERFLOWΓöÇΓöÇΓöÇΓöÇ
  8338.  
  8339. Abbreviation: FOFL 
  8340.  
  8341. If the FIXEDOVERFLOW condition is raised and it is disabled, the program is in 
  8342. error. 
  8343.  
  8344. Result:  The result of the invalid fixed-point operation is undefined. 
  8345.  
  8346. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8347.  
  8348. Status:  FIXEDOVERFLOW is enabled throughout the program, except within the 
  8349. scope of a condition prefix that specifies NOFIXEDOVERFLOW. 
  8350.  
  8351. Normal Return:  Control returns to the point immediately following the point at 
  8352. which the condition was raised. 
  8353.  
  8354. Condition Code: 310 
  8355.  
  8356. Note:   If the SIZE condition is disabled, an attempt to assign an oversize 
  8357.         number to a fixed decimal variable can raise the FIXEDOVERFLOW 
  8358.         condition. Because this checking involves a substantial overhead in 
  8359.         both storage space and at run-time, it usually is used only in program 
  8360.         testing. You should consider removing it for production programs. 
  8361.  
  8362.  
  8363. ΓòÉΓòÉΓòÉ <hidden> KEY Condition ΓòÉΓòÉΓòÉ
  8364.  
  8365. The KEY input/output condition can be raised only during operations on keyed 
  8366. records. It is raised in the cases mentioned in the list of condition codes, 
  8367. below. 
  8368.  
  8369. The syntax for KEY is: 
  8370.  
  8371. ΓöÇΓöÇΓöÇΓöÇKEYΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8372.  
  8373. When a LOCATE statement is used for VSAM key-sequenced data set, the KEY 
  8374. condition for this LOCATE statement is not raised until transmission of the 
  8375. record is attempted; that is, at the next WRITE statement or LOCATE statement 
  8376. for the file, or when the file is closed. 
  8377.  
  8378. The KEY condition for a data transmission statement using the EVENT option is 
  8379. raised when the WAIT statement for that event is encountered. 
  8380.  
  8381. When a LOCATE statement is used for REGIONAL(3) data set with V-format or 
  8382. U-format records, and there is not enough room in the specified region, the KEY 
  8383. condition is not raised until transmission of the record is attempted. Neither 
  8384. the record for which the condition is raised nor the current record is 
  8385. transmitted. 
  8386.  
  8387. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8388.  
  8389. Status:  KEY is always enabled. 
  8390.  
  8391. Normal Return:  Control passes to the statement immediately following the 
  8392. statement that raised KEY. 
  8393.  
  8394. If a file is closed in an ON-unit for this condition, the results of normal 
  8395. return are undefined. Exit from such an ON-unit should be by means of a GO TO 
  8396. statement. 
  8397.  
  8398. Condition Codes:  50-58 
  8399.  
  8400.  
  8401. ΓòÉΓòÉΓòÉ <hidden> NAME Condition ΓòÉΓòÉΓòÉ
  8402.  
  8403. The NAME input/output condition can be raised only during execution of a 
  8404. data-directed GET statement with the FILE option. It is raised in any of the 
  8405. following situations: 
  8406.  
  8407.  The syntax is not correct. 
  8408.  
  8409.  The name is missing or invalid: 
  8410.  
  8411.    - No counterpart is found in the data list. 
  8412.    - If there is no data list, the name is not known in the block. 
  8413.    - A qualified name is not fully qualified. 
  8414.    - More than 256 characters have been specified for a fully qualified name. 
  8415.    - The name is ISUB-defined 
  8416.    - DBCS contains a byte outside the valid range of X'41' to X'FE'. 
  8417.  
  8418.  A subscript list is missing or invalid: 
  8419.  
  8420.    - A subscript is missing. 
  8421.    - The number of subscripts is incorrect. 
  8422.    - More than 10 digits are in a subscript (leading zeros ignored). 
  8423.    - A subscript is outside the allowed range of the current allocation of the 
  8424.      variable. 
  8425.  
  8426. You can retrieve the incorrect data field by using the built-in function 
  8427. DATAFIELD in the ON-unit. 
  8428.  
  8429. The syntax for NAME is: 
  8430.  
  8431. ΓöÇΓöÇΓöÇΓöÇNAMEΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8432.  
  8433. Implicit Action:  The incorrect data field is ignored, a message is printed, 
  8434. and execution of the GET statement continues. 
  8435.  
  8436. Status:  NAME is always enabled. 
  8437.  
  8438. Normal Return:  The execution of the GET statement continues with the next name 
  8439. in the stream. 
  8440.  
  8441. Condition Code:  10 
  8442.  
  8443.  
  8444. ΓòÉΓòÉΓòÉ <hidden> OVERFLOW Condition ΓòÉΓòÉΓòÉ
  8445.  
  8446. The OVERFLOW computational condition is raised when the magnitude of a 
  8447. floating-point number exceeds the maximum allowed. 
  8448.  
  8449. The OVERFLOW condition differs from the SIZE condition in that SIZE is raised 
  8450. when a result exceeds the declared size of a variable, while OVERFLOW is raised 
  8451. when a result exceeds the maximum allowed by the computer. 
  8452.  
  8453. The syntax for OVERFLOW is: 
  8454.  
  8455. ΓöÇΓöÇΓöÇΓöÇOVERFLOWΓöÇΓöÇΓöÇΓöÇ
  8456.  
  8457. Abbreviation:  OFL 
  8458.  
  8459. If the OVERFLOW condition is raised and it is disabled, the program is in 
  8460. error. 
  8461.  
  8462. Result:  The value of such an invalid floating-point number is undefined. 
  8463.  
  8464. Implicit action:  A message is printed and the ERROR condition is raised. 
  8465.  
  8466. Status:  OVERFLOW is enabled throughout the program, except within the scope of 
  8467. a condition prefix specifying NOOVERFLOW. 
  8468.  
  8469. Normal Return:  Control returns to the point immediately following the point at 
  8470. which the condition was raised. 
  8471.  
  8472. Condition Code:  300 
  8473.  
  8474.  
  8475. ΓòÉΓòÉΓòÉ <hidden> PENDING Condition ΓòÉΓòÉΓòÉ
  8476.  
  8477. Except when signaled, the PENDING input/output condition can be raised only 
  8478. during execution of a READ statement for a TRANSIENT INPUT file.  It is raised 
  8479. when an attempt is made to read a record that is temporarily unavailable (that 
  8480. is, when the message queue associated with the file contains no messages at the 
  8481. time the READ statement is executed). 
  8482.  
  8483. The syntax for the PENDING condition is: 
  8484.  
  8485. ΓöÇΓöÇΓöÇΓöÇΓöÇPENDINGΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  8486.  
  8487. The value of the ONKEY built-in function when the PENDING condition is raised 
  8488. is a null string. 
  8489.  
  8490. Implicit Action:  The action is described for normal return. 
  8491.  
  8492. Status:  PENDING is always enabled. 
  8493.  
  8494. Normal Return:  Control returns to the point at which the condition was raised 
  8495. (unless the condition was signaled), where execution is suspended until an 
  8496. appropriate record becomes available.  If the condition was signaled, execution 
  8497. continues with the statement immediately following the SIGNAL statement. 
  8498.  
  8499. Condition Code:  100 
  8500.  
  8501. Note:   PENDING is for MVS only.
  8502.  
  8503.  
  8504. ΓòÉΓòÉΓòÉ <hidden> RECORD Condition ΓòÉΓòÉΓòÉ
  8505.  
  8506. The RECORD input/output condition can be raised only during a READ, WRITE, 
  8507. LOCATE, or REWRITE operation. It is raised in the cases mentioned in "Condition 
  8508. Codes" below. 
  8509.  
  8510. The syntax for the RECORD condition is: 
  8511.  
  8512. ΓöÇΓöÇΓöÇΓöÇRECORDΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8513.  
  8514. If the SCALARVARYING option is applied to the file (it must be applied to a 
  8515. file using locate mode to transmit varying-length strings), a 2-byte length 
  8516. prefix is transmitted with an element varying-length string. The length prefix 
  8517. is not reset if the RECORD condition is raised. If the SCALARVARYING option is 
  8518. not applied to the file, the length prefix is not transmitted; on input, the 
  8519. current length of a varying-length string is set to the shorter of the record 
  8520. length and the maximum length of the string. 
  8521.  
  8522. The RECORD condition for a data transmission statement using the EVENT option 
  8523. is raised when the WAIT statement for that event is encountered. 
  8524.  
  8525. The RECORD condition is not raised for undefined-length records read from: 
  8526.  
  8527.  A CONSECUTIVE data set through a SEQUENTIAL UNBUFFERED file. 
  8528.  
  8529.  A REGIONAL(3) data set through a direct file. 
  8530.  
  8531. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8532.  
  8533. Status:  RECORD is always enabled. 
  8534.  
  8535. Normal Return:  Execution continues with the statement immediately following 
  8536. the one for which RECORD was raised. 
  8537.  
  8538. If a file is closed in an ON-unit for this condition, the results of normal 
  8539. return are undefined. Exit from such an ON-unit should be by means of a GO TO 
  8540. statement. 
  8541.  
  8542. Condition Codes:  20-24 
  8543.  
  8544.  
  8545. ΓòÉΓòÉΓòÉ <hidden> SIZE Condition ΓòÉΓòÉΓòÉ
  8546.  
  8547. The SIZE computational condition is raised only when high-order (that is, 
  8548. leftmost) significant binary or decimal digits are lost in an attempted 
  8549. assignment to a variable or an intermediate result or in an input/output 
  8550. operation. This loss can result from a conversion involving different data 
  8551. types, different bases, different scales, or different precisions. The size 
  8552. condition is not enabled unless it appears in a condition prefix. 
  8553.  
  8554. The syntax for SIZE is: 
  8555.  
  8556. ΓöÇΓöÇΓöÇΓöÇSIZEΓöÇΓöÇΓöÇΓöÇ
  8557.  
  8558. The SIZE condition differs from the FIXEDOVERFLOW condition in that, whereas 
  8559. FIXEDOVERFLOW is raised when the size of a calculated fixed-point value exceeds 
  8560. the maximum allowed by the implementation, SIZE is raised when the size of the 
  8561. value being assigned to a data item exceeds the declared (or default) size of 
  8562. the data item. SIZE can be raised on assignment of a value regardless of 
  8563. whether or not FIXEDOVERFLOW was raised in the calculation of that value. 
  8564.  
  8565. The declared size is not necessarily the actual precision with which the item 
  8566. is held in storage; however, the limit for SIZE is the declared or default 
  8567. size, not the actual size in storage. For example, a fixed binary item of 
  8568. precision (20) will occupy a fullword in storage, but SIZE is raised if a value 
  8569. whose size exceeds FIXED BINARY(20) is assigned to it. 
  8570.  
  8571. Because this checking involves a substantial overhead in both storage space and 
  8572. run time, it usually is used only in program testing. You should consider 
  8573. removing it for production programs. 
  8574.  
  8575. If the SIZE condition is raised and it is disabled, the program is in error. 
  8576.  
  8577. Result:  The result of the assignment is undefined. 
  8578.  
  8579. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8580.  
  8581. Status:  SIZE is disabled within the scope of a NOSIZE condition prefix and 
  8582. elsewhere throughout the program, except within the scope of a condition prefix 
  8583. specifying SIZE. 
  8584.  
  8585. Normal Return:  Control returns to the point immediately following the point at 
  8586. which the condition was raised. 
  8587.  
  8588. Condition Codes:  340, 341 
  8589.  
  8590.  
  8591. ΓòÉΓòÉΓòÉ <hidden> STRINGRANGE Condition ΓòÉΓòÉΓòÉ
  8592.  
  8593. The STRINGRANGE program-checkout condition is raised whenever the values of the 
  8594. arguments to a SUBSTR reference fail to comply with the rules described for the 
  8595. SUBSTR built-in function. It is raised for each such reference. 
  8596.  
  8597. The syntax for STRINGRANGE is: 
  8598.  
  8599. ΓöÇΓöÇΓöÇΓöÇSTRINGRANGEΓöÇΓöÇΓöÇΓöÇ
  8600.  
  8601. Abbreviation:  STRG 
  8602.  
  8603. Implicit Action:  A message is printed and processing continues as described 
  8604. for normal return. 
  8605.  
  8606. Status:  STRINGRANGE is disabled by default and within the scope of a 
  8607. NOSTRINGRANGE condition prefix. It is enabled only within the scope of a 
  8608. STRINGRANGE condition prefix. 
  8609.  
  8610. Normal Return:  Execution continues with a revised SUBSTR reference whose value 
  8611. is defined as follows: 
  8612.  
  8613. Assuming that the length of the source string (after execution of the ON-unit, 
  8614. if specified) is k, the starting point is i, and the length of the substring is 
  8615. j; 
  8616.  
  8617.  If i is greater than k, the value is the null string. 
  8618.  
  8619.  If i is less than or equal to k, the value is that substring beginning at the 
  8620.   mth character, bit, or graphic of the source string and extending n 
  8621.   characters, bits, or graphics, where m and n are defined by: 
  8622.  
  8623.     m = MAX( i,1 )
  8624.  
  8625.     n = MAX( 0,MIN( j + MIN(i,1) - 1,k - m + 1 ))
  8626.            -if j is specified-
  8627.  
  8628.     n = k - m + 1
  8629.               -if j is not specified-
  8630.  
  8631. This means that the new arguments are forced within the limits. 
  8632.  
  8633. The values of i and j are established before entry to the ON-unit. They are not 
  8634. re-evaluated on return from the ON-unit. 
  8635.  
  8636. The value of k might change in the ON-unit if the first argument of SUBSTR is a 
  8637. varying-length string. The value n is computed on return from the ON-unit using 
  8638. any new value of k. 
  8639.  
  8640. Condition Code:  350 
  8641.  
  8642.  
  8643. ΓòÉΓòÉΓòÉ <hidden> STRINGSIZE Condition ΓòÉΓòÉΓòÉ
  8644.  
  8645. The STRINGSIZE program-checkout condition is raised when you attempt to assign 
  8646. a string to a target with a shorter maximum length. 
  8647.  
  8648. The syntax for STRINGSIZE is: 
  8649.  
  8650. ΓöÇΓöÇΓöÇΓöÇΓöÇSTRINGSIZEΓöÇΓöÇΓöÇΓöÇ
  8651.  
  8652. Abbreviation: STRZ 
  8653.  
  8654. Result:  After the condition action, the truncated string is assigned to its 
  8655. target string. The right-hand characters, bits, or graphics of the source 
  8656. string are truncated so that the target string can accommodate the source 
  8657. string. 
  8658.  
  8659. Implicit Action:  A message is printed and processing continues. However, if 
  8660. error messages and program output are using the same output stream, the output 
  8661. is unpredictable because no synchronization between them is provided. 
  8662.  
  8663. Status:  STRINGSIZE is disabled by default and within the scope of a 
  8664. NOSTRINGSIZE condition prefix. It is enabled only within the range of a 
  8665. STRINGSIZE condition prefix. 
  8666.  
  8667. Normal Return:  Execution continues from the point at which the condition was 
  8668. raised. 
  8669.  
  8670. Condition Codes:  150, 151 
  8671.  
  8672.  
  8673. ΓòÉΓòÉΓòÉ <hidden> SUBSCRIPTRANGE Condition ΓòÉΓòÉΓòÉ
  8674.  
  8675. The SUBSCRIPTRANGE program-checkout condition is raised whenever a subscript is 
  8676. evaluated and found to lie outside its specified bounds. The condition is also 
  8677. raised when an iSUB subscript is outside the range given in the declaration of 
  8678. the iSUB defined array. The order of raising SUBSCRIPTRANGE relative to 
  8679. evaluation of other subscripts is undefined. 
  8680.  
  8681. The syntax for SUBSCRIPTRANGE is: 
  8682.  
  8683. ΓöÇΓöÇΓöÇΓöÇSUBSCRIPTRANGEΓöÇΓöÇΓöÇΓöÇ
  8684.  
  8685. Abbreviation: SUBRG 
  8686.  
  8687. Result:  When SUBSCRIPTRANGE has been raised, the value of the invalid 
  8688. subscript is undefined, and, hence, the reference is also undefined. 
  8689.  
  8690. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8691.  
  8692. Status:  SUBSCRIPTRANGE is disabled by default and within the scope of a 
  8693. NOSUBSCRIPTRANGE condition prefix. It is enabled only within the scope of a 
  8694. SUBSCRIPTRANGE condition prefix. 
  8695.  
  8696. Normal Return:  Normal return from a SUBSCRIPTRANGE ON-unit raises the ERROR 
  8697. condition. 
  8698.  
  8699. Condition Codes:  520, 521 
  8700.  
  8701.  
  8702. ΓòÉΓòÉΓòÉ <hidden> TRANSMIT Condition ΓòÉΓòÉΓòÉ
  8703.  
  8704. The TRANSMIT input/output condition can be raised during any input/output 
  8705. operation. It is raised by an uncorrectable transmission error of a record (or 
  8706. of a block, if records are blocked) and, therefore, signifies that any data 
  8707. transmitted is potentially incorrect. 
  8708.  
  8709. "Uncorrectable transmission error" means an input/output error that could not 
  8710. be corrected during this execution. It can be caused by a damaged recording 
  8711. medium, or by incorrect specification or setup. 
  8712.  
  8713. The syntax for TRANSMIT is: 
  8714.  
  8715. ΓöÇΓöÇΓöÇΓöÇTRANSMITΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8716.  
  8717. During input, TRANSMIT is raised after transmission of the potentially 
  8718. incorrect record. If records are blocked, TRANSMIT is raised for each 
  8719. subsequent record in the block. 
  8720.  
  8721. During output, TRANSMIT is raised after transmission. If records are blocked, 
  8722. transmission will occur when the block is complete rather than after each 
  8723. output statement. 
  8724.  
  8725. When a spanned record is being updated, the TRANSMIT condition is raised on the 
  8726. last segment of a record only. It is not raised for any subsequent records in 
  8727. the same block, although the integrity of these records cannot be assumed. 
  8728.  
  8729. The TRANSMIT condition for a data transmission statement using the EVENT option 
  8730. is raised when the WAIT statement for that event is encountered in the same 
  8731. process. 
  8732.  
  8733. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8734.  
  8735. Status:  TRANSMIT is always enabled. 
  8736.  
  8737. Normal Return:  Processing continues as though no error had occurred, allowing 
  8738. another condition (for example, RECORD) to be raised by the statement or data 
  8739. item that raised the TRANSMIT condition. 
  8740.  
  8741. If a file is closed in an ON-unit for this condition, the results of normal 
  8742. return are undefined. Exit from such an ON-unit should be by means of a GO TO 
  8743. statement. 
  8744.  
  8745. Condition Codes:  40-46 
  8746.  
  8747.  
  8748. ΓòÉΓòÉΓòÉ <hidden> UNDEFINEDFILE Condition ΓòÉΓòÉΓòÉ
  8749.  
  8750. The UNDEFINEDFILE input/output condition is raised whenever a nonzero return 
  8751. code is received from the OPEN SVC. If the attempt is made by means of an OPEN 
  8752. statement that specifies more than one file, the condition is raised after 
  8753. attempts to open all files specified. 
  8754.  
  8755. The syntax for UNDEFINEDFILE is: 
  8756.  
  8757. ΓöÇΓöÇΓöÇΓöÇUNDEFINEDFILEΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇfile-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  8758.  
  8759. Abbreviation: UNDF 
  8760.  
  8761. If UNDEFINEDFILE is raised for more than one file in the same OPEN statement, 
  8762. ON-units are executed according to the order of appearance (taken from left to 
  8763. right) of the file names in that OPEN statement. 
  8764.  
  8765. The UNDEFINEDFILE condition is raised not only by conflicting attributes (such 
  8766. as DIRECT with PRINT), but also by: 
  8767.  
  8768.  Block size smaller than record size (except when records are spanned) 
  8769.  
  8770.  LINESIZE exceeding the maximum allowed 
  8771.  
  8772.  KEYLENGTH zero or not specified for creation of INDEXED, REGIONAL(2), or 
  8773.   REGIONAL(3) data sets 
  8774.  
  8775.  Specifying a KEYLOC option, for an INDEXED data set, with a value resulting 
  8776.   in KEYLENGTH + KEYLOC exceeding the record length 
  8777.  
  8778.  Specifying a V-format logical record length of less than 18 bytes for STREAM 
  8779.   data sets 
  8780.  
  8781.  Specifying, for FB-format records, a block size that is not an integral 
  8782.   multiple of the record size 
  8783.  
  8784.  Specifying, for VB-format records, a logical record length that is not at 
  8785.   least 4 bytes smaller than the specified block size. 
  8786.  
  8787. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8788.  
  8789. Status:  UNDEFINEDFILE is always enabled. 
  8790.  
  8791. Normal Return:  Upon the normal completion of the final ON-unit, control is 
  8792. given to the statement immediately following the statement that raised the 
  8793. condition. 
  8794.  
  8795. Condition Codes:  80-89, 91-95 
  8796.  
  8797.  
  8798. ΓòÉΓòÉΓòÉ <hidden> UNDERFLOW Condition ΓòÉΓòÉΓòÉ
  8799.  
  8800. The UNDERFLOW computational condition is raised when the magnitude of a 
  8801. floating-point number is smaller than the minimum allowed. 
  8802.  
  8803. The syntax for UNDERFLOW is : 
  8804.  
  8805. ΓöÇΓöÇΓöÇΓöÇUNDERFLOWΓöÇΓöÇΓöÇΓöÇ
  8806.  
  8807. Abbreviation: UFL 
  8808.  
  8809. UNDERFLOW is not raised when equal numbers are subtracted (often called 
  8810. "significance error"). 
  8811.  
  8812. The expression "X**(-Y)" (where Y>0) can be evaluated by taking the reciprocal 
  8813. of "X**Y"; hence, the OVERFLOW condition might be raised instead of the 
  8814. UNDERFLOW condition. 
  8815.  
  8816. Result:  The invalid floating-point value is set to 0. 
  8817.  
  8818. Implicit Action:  A message is printed, and execution continues from the point 
  8819. at which the condition was raised. 
  8820.  
  8821. Status:  UNDERFLOW is enabled throughout the program, except within the scope 
  8822. of a condition prefix specifying NOUNDERFLOW. 
  8823.  
  8824. Normal Return:  Control returns to the point immediately following the point at 
  8825. which the condition was raised. 
  8826.  
  8827. Condition Code:  330 
  8828.  
  8829.  
  8830. ΓòÉΓòÉΓòÉ <hidden> ZERODIVIDE Condition ΓòÉΓòÉΓòÉ
  8831.  
  8832. The ZERODIVIDE computational condition is raised when an attempt is made to 
  8833. divide by zero. This condition is raised for fixed-point and floating-point 
  8834. division. ZERODIVIDE condition is also raised instead of FIXEDOVERFLOW, when: 
  8835.  
  8836.  The results of a conversion from decimal to binary exceeds the maximum length 
  8837.   allowed by the implementation. 
  8838.  
  8839.  A fixed, floating-point, or decimal divide exception is detected by the 
  8840.   hardware, as, for example, when using the DIVIDE built-in function and the 
  8841.   quotient exceeds the size specified for the result. 
  8842.  
  8843. The syntax for ZERODIVIDE is: 
  8844.  
  8845. ΓöÇΓöÇΓöÇΓöÇZERODIVIDEΓöÇΓöÇΓöÇΓöÇ
  8846.  
  8847. Abbreviation: ZDIV 
  8848.  
  8849. If the ZERODIVIDE condition is raised and it is disabled, the program is in 
  8850. error. 
  8851.  
  8852. Result:  The result of a division by zero is undefined. 
  8853.  
  8854. Implicit Action:  A message is printed and the ERROR condition is raised. 
  8855.  
  8856. Status:  ZERODIVIDE is enabled throughout the program, except within the scope 
  8857. of a condition prefix specifying NOZERODIVIDE. 
  8858.  
  8859. Normal Return:  Control returns to the point immediately following the point at 
  8860. which the condition was raised. 
  8861.  
  8862. Condition Code:  320 
  8863.  
  8864.  
  8865. ΓòÉΓòÉΓòÉ <hidden> Condition Codes ΓòÉΓòÉΓòÉ
  8866.  
  8867. Description 
  8868.   Condition codes listed here reflect an aggregate of condition codes generated 
  8869.   by all implementations. Some might not be generated for a particular 
  8870.   platform. 
  8871.  
  8872. Condition Codes 
  8873.   The following is a summary of all condition codes in numerical sequence. 
  8874.  
  8875.     Condition codes 3 - 46 
  8876.     Condition codes 50 - 100 
  8877.     Condition codes 150 - 521 
  8878.     Condition codes 600 - 642 
  8879.     Condition codes 1002 - 1040 
  8880.     Condition codes 1500 - 1522 
  8881.     Condition codes 1550 - 2050 
  8882.     Condition codes 3000 - 3810 
  8883.     Condition codes 3901 - 9999 
  8884.  
  8885.  
  8886. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 3 - 46 ΓòÉΓòÉΓòÉ
  8887.  
  8888. 3      This condition is raised if, in a SELECT group, no WHEN clause is 
  8889.        selected and no OTHERWISE clause is present. 
  8890.  
  8891. 4      SIGNAL FINISH, or STOP statement executed. 
  8892.  
  8893. 9      SIGNAL ERROR statement executed. 
  8894.  
  8895. 10     SIGNAL NAME statement executed or NAME condition occurred. 
  8896.  
  8897. 20     SIGNAL RECORD statement executed. 
  8898.  
  8899. 21     Record variable smaller than record size. Either: 
  8900.  
  8901.     The record is larger than the variable in a READ INTO statement; the 
  8902.      remainder of the record is lost. 
  8903.     The record length specified for a file with fixed-length records is larger 
  8904.      than the variable in a WRITE, REWRITE, or LOCATE statement; the remainder 
  8905.      of the record is undefined. If the variable is a varying-length string, 
  8906.      RECORD is not raised if the SCALARVARYING option is applied to the file. 
  8907.  
  8908. 22     Record variable larger than record size. Either: 
  8909.  
  8910.     The record length specified for a file with fixed-length records is 
  8911.      smaller than the variable in a READ INTO statement; the remainder of the 
  8912.      variable is undefined. If the variable is a varying-length string, RECORD 
  8913.      is not raised if the SCALARVARYING option is applied to the file. 
  8914.  
  8915.     The maximum record length is smaller than the variable in a WRITE, 
  8916.      REWRITE, or LOCATE statement. For WRITE or REWRITE, the remainder of the 
  8917.      variable is lost; for LOCATE, the variable is not transmitted. 
  8918.  
  8919.     The variable in a WRITE or REWRITE statement indicates a zero length; no 
  8920.      transmission occurs. If the variable is a varying-length string, RECORD is 
  8921.      not raised if the SCALARVARYING option is applied to the file. 
  8922.  
  8923. 23     Record variable length is either zero or too short to contain the 
  8924.        embedded key. 
  8925.  
  8926.        The variable in a WRITE or REWRITE statement is too short to contain the 
  8927.        data set embedded key; no transmission occurs. (This case currently 
  8928.        applies only to VSAM key-sequenced data sets.) 
  8929.  
  8930. 24     Zero length record was read from a REGIONAL data set. 
  8931.  
  8932. 40     SIGNAL TRANSMIT statement executed. 
  8933.  
  8934. 41     Uncorrectable transmission error in output data set. 
  8935.  
  8936. 42     Uncorrectable transmission error in input data set. 
  8937.  
  8938. 43     Uncorrectable transmission error on output to index set (VSAM). 
  8939.  
  8940. 44     Uncorrectable transmission error on input from index set (VSAM). 
  8941.  
  8942. 45     Uncorrectable transmission error on output to sequence set (VSAM). 
  8943.  
  8944. 46     Uncorrectable transmission error on input from sequence set (VSAM). 
  8945.  
  8946.  
  8947. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 50 - 100 ΓòÉΓòÉΓòÉ
  8948.  
  8949. 50     SIGNAL KEY statement executed. 
  8950.  
  8951. 51     Key specified cannot be found. 
  8952.  
  8953. 52     Attempt to add keyed record that has same key as a record already 
  8954.        present in data set; or, in a REGIONAL(1) data set, attempt to write 
  8955.        into a region already containing a record. 
  8956.  
  8957. 53     Value of expression specified in KEYFROM option during sequential 
  8958.        creation of INDEXED or REGIONAL data set is less than value of 
  8959.        previously specified key or region number. 
  8960.  
  8961. 54     Key conversion error, possibly due to region number not being numeric 
  8962.        character. 
  8963.  
  8964. 55     Key specification is null string or begins (8)'1'B; or a change of 
  8965.        embedded key has occurred on a sequential REWRITE[FROM] for an INDEXED 
  8966.        or key-sequenced VSAM data set. 
  8967.  
  8968. 56     Attempt to access a record using a key that is outside the data set 
  8969.        limits. 
  8970.  
  8971. 57     No space available to add a keyed record on ISAM insert. 
  8972.  
  8973. 58     Key of record to be added lies outside the range(s) specified for the 
  8974.        data set. 
  8975.  
  8976. 70     SIGNAL ENDFILE statement executed or ENDFILE condition occurred. 
  8977.  
  8978. 80     SIGNAL UNDEFINEABLE statement executed. 
  8979.  
  8980. 81     Conflict in file attributes exists at open time between attributes in 
  8981.        DECLARE statement and those in explicit or implicit OPEN statement. 
  8982.  
  8983. 82     Conflict between file attributes and physical organization of data set 
  8984.        (for example, between file organization and device type), or VSAM data 
  8985.        set has not been loaded. 
  8986.  
  8987. 83     After merging ENVIRONMENT options with DD statement and data set label, 
  8988.        data set specification is incomplete; for example, block size or record 
  8989.        format has not been specified. 
  8990.  
  8991. 84     No DD statement associating file with a data set. 
  8992.  
  8993. 85     During initialization of a DIRECT OUTPUT file associated with a REGIONAL 
  8994.        data set, an input/output error occurred. 
  8995.  
  8996. 86     LINESIZE greater than implementation-defined maximum, or invalid value 
  8997.        in an ENVIRONMENT option. 
  8998.  
  8999. 87     After merging ENVIRONMENT options with DD statement and data set label, 
  9000.        conflicts exist in data set specification; the values of LRECL, BLKSIZE 
  9001.        or RECSIZE are incompatible with one another or the DCB FUNCTION 
  9002.        specified. 
  9003.  
  9004. 88     After merging ENVIRONMENT options with DD statement and data set label, 
  9005.        conflicts exist in data set specification; the resulting combination of 
  9006.        MODE/FUNCTION and record format are invalid. 
  9007.  
  9008. 89     Password invalid or not specified. 
  9009.  
  9010. 90     SIGNAL ENDPAGE statement executed or ENDPAGE condition occurred. 
  9011.  
  9012. 91     ENVIRONMENT option invalid for file accessing VSAM data set. 
  9013.  
  9014. 92     Error detected by VSAM while opening a VSAM data set; or during opening 
  9015.        of a VSAM data set with the BKWD option, the attempt to position the 
  9016.        data set at the last record failed. 
  9017.  
  9018. 93     Unidentified error detected by the operating system while opening a data 
  9019.        set. 
  9020.  
  9021. 94     REUSE specified for a nonreusable data set. 
  9022.  
  9023. 95     Alternate index specified for a VSAM data set is empty. 
  9024.  
  9025. 100    SIGNAL PENDING statement executed or PENDING condition occurred. 
  9026.  
  9027.  
  9028. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 150 - 521 ΓòÉΓòÉΓòÉ
  9029.  
  9030. 150     SIGNAL STRINGSIZE statement executed or STRINGSIZE condition occurred. 
  9031.  
  9032. 151     Truncation occurred during assignment of a mixed character string. 
  9033.  
  9034. 300     SIGNAL FIXEDOVERFLOW statement executed or FIXEDOVERFLOW condition 
  9035.         occurred. 
  9036.  
  9037. 310     SIGNAL OVERFLOW statement executed or OVERFLOW condition occurred. 
  9038.  
  9039. 320     SIGNAL ZERODIVIDE statement executed or ZERODIVIDE condition occurred. 
  9040.  
  9041. 330     SIGNAL UNDERFLOW statement executed or UNDERFLOW condition occurred. 
  9042.  
  9043. 340     SIGNAL SIZE statement executed; or high-order nonzero digits have been 
  9044.         lost in an assignment to a variable or temporary; or significant digits 
  9045.         have been lost in an input/output operation. 
  9046.  
  9047. 341     High order nonzero digits have been lost in an input/output operation. 
  9048.  
  9049. 350     SIGNAL STRINGRANGE statement executed or STRINGRANGE condition 
  9050.         occurred. 
  9051.  
  9052. 360     Attempt to allocate a based variable within an area that contains 
  9053.         insufficient free storage for allocation to be made. 
  9054.  
  9055. 361     Insufficient space in target area for assignment of source area. 
  9056.  
  9057. 362     SIGNAL AREA statement executed. 
  9058.  
  9059. 400     SIGNAL ATTENTION statement executed or ATTENTION condition occurred. 
  9060.  
  9061. 500     SIGNAL CONDITION (name) statement executed. 
  9062.  
  9063. 510     SIGNAL CHECK statement executed. 
  9064.  
  9065. 520     SIGNAL SUBSCRIPTRANGE statement executed, or subscript has been 
  9066.         evaluated and found to lie outside its specified bounds. 
  9067.  
  9068. 521     Subscript of iSUB-defined variable lies outside bounds of corresponding 
  9069.         dimension of base variable. 
  9070.  
  9071.  
  9072. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 600 - 642 ΓòÉΓòÉΓòÉ
  9073.  
  9074. 600    SIGNAL CONVERSION statement executed. 
  9075.  
  9076. 601    Invalid conversion attempted during input/output of a character string. 
  9077.  
  9078. 602    CONVERSION condition raised following TRANSMIT condition. 
  9079.  
  9080. 603    Error during processing of an F-format item for a GET STRING statement. 
  9081.  
  9082. 604    Error during processing of an F-format item for a GET FILE statement. 
  9083.  
  9084. 605    Error during processing of an F-format item for a GET FILE statement 
  9085.        following a TRANSMIT condition. 
  9086.  
  9087. 606    Error during processing of an E-format item for a GET STRING statement. 
  9088.  
  9089. 607    Error during processing of an E-format item for a GET FILE statement. 
  9090.  
  9091. 608    Error during processing of an E-format item for a GET FILE statement 
  9092.        following a TRANSMIT condition. 
  9093.  
  9094. 609    Error during processing of a B-format item for a GET STRING statement. 
  9095.  
  9096. 610    Error during processing of a B-format item for a GET FILE statement. 
  9097.  
  9098. 611    Error during processing of a B-format item for a GET FILE statement 
  9099.        following a TRANSMIT condition. 
  9100.  
  9101. 612    Error during character value to arithmetic conversion. 
  9102.  
  9103. 613    Error during character value to arithmetic conversion for a GET or PUT 
  9104.        FILE statement. 
  9105.  
  9106. 614    Error during character value to arithmetic conversion for a GET or PUT 
  9107.        FILE statement following a TRANSMIT condition. 
  9108.  
  9109. 615    Error during character value to bit value conversion. 
  9110.  
  9111. 616    Error during character value to bit value conversion for a GET or PUT 
  9112.        FILE statement. 
  9113.  
  9114. 617    Error during character value to bit value conversion for a GET or PUT 
  9115.        FILE statement following a TRANSMIT condition. 
  9116.  
  9117. 618    Error during character value to picture conversion. 
  9118.  
  9119. 619    Error during character value to picture conversion for a GET or PUT FILE 
  9120.        statement. 
  9121.  
  9122. 620    Error during character value to picture conversion for a GET or PUT FILE 
  9123.        statement following a TRANSMIT condition. 
  9124.  
  9125. 621    Error in decimal P-format item for a GET STRING statement. 
  9126.  
  9127. 622    Error in decimal P-format input for a GET FILE statement. 
  9128.  
  9129. 623    Error in decimal P-format input for a GET FILE statement following a 
  9130.        TRANSMIT condition. 
  9131.  
  9132. 624    Error in character P-format input for a GET FILE statement. 
  9133.  
  9134. 625    Error in character P-format input for a GET FILE statement. 
  9135.  
  9136. 626    Error in character P-format input for a GET FILE statement following a 
  9137.        TRANSMIT condition. 
  9138.  
  9139. 627    A graphic or mixed character string encountered in a nongraphic 
  9140.        environment. 
  9141.  
  9142. 628    A graphic or mixed character string encountered in a nongraphic 
  9143.        environment on input. 
  9144.  
  9145. 629    A graphic or mixed character string encountered in a nongraphic 
  9146.        environment on input after TRANSMIT was detected. 
  9147.  
  9148. 633    An invalid character detected in a X, BX, or GX string constant. 
  9149.  
  9150. 634    An invalid character detected in a X, BX, or GX string constant on 
  9151.        input. 
  9152.  
  9153. 635    An invalid character detected in a X, BX, or GX string constant on input 
  9154.        after TRANSMIT was detected. 
  9155.  
  9156. 636    A shift character detected in a graphic string. 
  9157.  
  9158. 639    During processing of a mixed character string, one of the following 
  9159.        occurred: 
  9160.  
  9161.     A shift-in present in the SBCS portion. 
  9162.     A shift-out present in the graphic (double-byte) portion. (A shift-out 
  9163.      cannot appear in either byte of a graphic character.) 
  9164.     A shift-in present in the second byte of a graphic character. 
  9165.  
  9166. 640    Conversion from picture contained an invalid character. 
  9167.  
  9168. 641    Conversion from picture contained an invalid character on input or 
  9169.        output. 
  9170.  
  9171. 642    Conversion from picture contained an invalid character on input after 
  9172.        TRANSMIT was detected. 
  9173.  
  9174.  
  9175. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 1002 - 1040 ΓòÉΓòÉΓòÉ
  9176.  
  9177. 1002   GET or PUT STRING specifies data exceeding size of string. 
  9178.  
  9179. 1003   Further output prevented by TRANSMIT or KEY conditions previously raised 
  9180.        for the data set. 
  9181.  
  9182. 1004   Attempt to use PAGE, LINE, or SKIP <= 0 for non-print file. 
  9183.  
  9184. 1005   In a DISPLAY(expression) REPLY (character-reference) statement, 
  9185.        expression or character-reference is zero length. 
  9186.  
  9187. 1007   A REWRITE or a DELETE statement not preceded by a READ. 
  9188.  
  9189. 1008   Unrecognized field preceding the assignment symbol in a string specified 
  9190.        in a GET STRING DATA statement. 
  9191.  
  9192. 1009   An input/output statement specifies an operation or an option which 
  9193.        conflicts with the file attributes. 
  9194.  
  9195. 1011   Data management detected an input/output error but is unable to provide 
  9196.        any information about its cause. 
  9197.  
  9198. 1012   A READ SET or READ INTO statement not preceded by a REWRITE. 
  9199.  
  9200. 1013   Previous input operation incomplete; REWRITE or DELETE statement 
  9201.        specifies data which has been previously read in by a READ statement 
  9202.        with an EVENT option, and no corresponding WAIT has been executed. 
  9203.  
  9204. 1014   Attempt to initiate further input/output operation when number of 
  9205.        incomplete operations equals number specified by ENVIRONMENT option 
  9206.        NCP(n) or by default. 
  9207.  
  9208. 1015   Event variable specified for an input/output operation when already in 
  9209.        use. 
  9210.  
  9211. 1016   After UNDEFINEDFILE condition raised as a result of an unsuccessful 
  9212.        attempt to implicitly open a file, the file was found unopened on normal 
  9213.        return from the ON-unit. 
  9214.  
  9215. 1018   End of file or string encountered in data before end of data-list or (in 
  9216.        edit-directed transmission) format list. 
  9217.  
  9218. 1019   Attempt to close file not opened in current process. 
  9219.  
  9220. 1020   Further input/output attempted before WAIT statement executed to ensure 
  9221.        completion of previous READ. 
  9222.  
  9223. 1021   Attempt to access a record locked by another file in this process. 
  9224.  
  9225. 1022   Unable to extend VSAM data set. 
  9226.  
  9227. 1023   Exclusive file closed while records still locked in a subtask. 
  9228.  
  9229. 1024   Incorrect sequence of I/O operations on device-associated file. 
  9230.  
  9231. 1025   Insufficient virtual storage available for VSAM to complete request. 
  9232.  
  9233. 1026   No position established in VSAM data set. 
  9234.  
  9235. 1027   Record or VSAM control interval already held in exclusive control. 
  9236.  
  9237. 1028   Requested record lies on non-mounted volume. 
  9238.  
  9239. 1029   Attempt to reposition in VSAM data set failed. 
  9240.  
  9241. 1030   An error occurred during index upgrade on a index data set. 
  9242.  
  9243. 1031   Invalid sequential write attempted on index data set. 
  9244.  
  9245. 1040   A data set open for output used all available space. 
  9246.  
  9247.  
  9248. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 1500 - 1522 ΓòÉΓòÉΓòÉ
  9249.  
  9250. 1500   Computational error; short floating point argument of SQRT built-in 
  9251.        function is negative. 
  9252.  
  9253. 1501   Computational error; long floating point argument of SQRT built-in 
  9254.        function is < 0. 
  9255.  
  9256. 1502   Computational error; extended floating point argument of SQRT built-in 
  9257.        function is negative. 
  9258.  
  9259. 1503   Computational error in LOG, LOG2, or LOG10 built-in function; extended 
  9260.        floating point argument is <= 0. 
  9261.  
  9262. 1504   Computational error in LOG, LOG2, or LOG10 built-in function; short 
  9263.        floating point argument is <= 0. 
  9264.  
  9265. 1505   Computational error in LOG, LOG2 or LOG10 built-in function; long 
  9266.        floating point argument is <= 0. 
  9267.  
  9268. 1506   Computational error in SIN, COS, SIND, or COSD built-in function; 
  9269.        absolute value of short floating point argument exceeds (2**18)*pi (SIN 
  9270.        and COS) or (2**18)*180 (SIND and COSD). 
  9271.  
  9272. 1507   Computational error in SIN, COS, SIND, or COSD built-in function; 
  9273.        absolute value of long floating point argument exceeds (2**50)*pi (SIN 
  9274.        and COS) or (2**50)*180 (SIND and COSD). 
  9275.  
  9276. 1508   Computational error; absolute value of short floating point argument of 
  9277.        TAN or TAND built-in function exceeds, respectively, (2**18)*pi or 
  9278.        (2**18)*180. 
  9279.  
  9280. 1509   Computational error; absolute value of long floating point argument of 
  9281.        TAN or TAND built-in function exceeds, respectively, (2**50)*pi or 
  9282.        (2**50)*180. 
  9283.  
  9284. 1510   Computational error; short floating point arguments of ATAN or ATAND 
  9285.        built-in function both zero. 
  9286.  
  9287. 1511   Computational error; long floating point arguments of ATAN or ATAND 
  9288.        built-in function both zero. 
  9289.  
  9290. 1514   Computational error; absolute value of short floating point argument of 
  9291.        ATANH built-in function >= 1. 
  9292.  
  9293. 1515   Computational error; absolute value of long floating point argument of 
  9294.        ATANH built-in function >= 1. 
  9295.  
  9296. 1516   Computational error; absolute value of extended floating point argument 
  9297.        of ATANH built-in function >= 1. 
  9298.  
  9299. 1517   Computational error in SIN, COS, SIND, or COSD built-in function; 
  9300.        absolute value of extended floating point argument exceeds (2**106)*pi 
  9301.        (SIN and COS) or (2**106)*180 (SIND and COSD). 
  9302.  
  9303. 1518   Computational error; absolute value of short floating point argument of 
  9304.        ASIN or ACOS built-in function exceeds 1. 
  9305.  
  9306. 1519   Computational error; absolute value of long floating point argument of 
  9307.        ASIN or ACOS built-in function exceeds 1. 
  9308.  
  9309. 1520   Computational error; absolute value of extended floating point argument 
  9310.        of ASIN or ACOS built-in function exceeds 1. 
  9311.  
  9312. 1521   Computational error; extended floating point arguments of ATAN or ATAND 
  9313.        built-in function both zero. 
  9314.  
  9315. 1522   Computational error; absolute value of extended floating point argument 
  9316.        of TAN or TAND built-in function >= (2**106)*pi or (2**106)*180, 
  9317.        respectively. 
  9318.  
  9319.  
  9320. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 1550 - 2050 ΓòÉΓòÉΓòÉ
  9321.  
  9322. 1550   Computational error; during exponentiation, real short floating-point 
  9323.        base is zero and integer value exponent is not positive. 
  9324.  
  9325. 1551   Computational error; during exponentiation, real long floating-point 
  9326.        base is zero and integer value exponent is not positive. 
  9327.  
  9328. 1552   Computational error; during exponentiation, real short floating-point 
  9329.        base is zero and the floating-point or non-integer exponent is not 
  9330.        positive. 
  9331.  
  9332. 1553   Computational error; during exponentiation, real long floating-point 
  9333.        base is zero and the floating-point or non-integer exponent is not 
  9334.        positive. 
  9335.  
  9336. 1554   Computational error; during exponentiation, complex short floating-point 
  9337.        base is zero and integer value exponent is not positive. 
  9338.  
  9339. 1555   Computational error; during exponentiation, complex long floating-point 
  9340.        base is zero and integer value exponent is not positive. 
  9341.  
  9342. 1556   Computational error; during exponentiation, complex short floating-point 
  9343.        base is zero and floating-point or non-integer exponent is not positive 
  9344.        and real. 
  9345.  
  9346. 1557   Computational error; during exponentiation, complex long floating- point 
  9347.        base is zero and floating-point or non-integer exponent is not positive 
  9348.        and real. 
  9349.  
  9350. 1558   Computational error; complex short floating-point argument of ATAN or 
  9351.        ATANH built-in function has value, respectively, of ╤æ1I or ╤æ1. 
  9352.  
  9353. 1559   Computational error; complex long floating-point argument of ATAN or 
  9354.        ATANH built-in function has value, respectively, of ╤æ1I or ╤æ1. 
  9355.  
  9356. 1560   Computational error; during exponentiation, real extended floating-point 
  9357.        base is zero and integer value exponent is not positive. 
  9358.  
  9359. 1561   Computational error; during exponentiation, real extended floating-point 
  9360.        base is zero and floating-point or non-integer exponent is not positive. 
  9361.  
  9362. 1562   Computational error; during exponentiation, complex extended 
  9363.        floating-point base is zero and integer value exponent is not positive. 
  9364.  
  9365. 1563   Computational error; complex extended floating-point base is zero and 
  9366.        floating-point or non-integral exponent is not positive. 
  9367.  
  9368. 1564   Computational error; complex extended floating-point argument of ATAN or 
  9369.        ATANH built-in function has value, respectively, of ╤æ1I or ╤æ1. 
  9370.  
  9371. 2002   WAIT statement cannot be executed because of restricted system facility. 
  9372.  
  9373. 2050   WAIT statement would cause a permanent wait. 
  9374.  
  9375.  
  9376. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 3000 - 3810 ΓòÉΓòÉΓòÉ
  9377.  
  9378. 3000   Field width, number of fractional digits, and number of significant 
  9379.        digits (w, d, and s) specified for E-format item in edit-directed 
  9380.        input/output statement do not allow transmission without loss of 
  9381.        significant digits or sign. 
  9382.  
  9383. 3001   Value of W field in F-format specification too small. 
  9384.  
  9385. 3006   Picture description of target does not match non-character string 
  9386.        source. 
  9387.  
  9388. 3009   A mixed character string contained a shift-out, then ended before a 
  9389.        shift-in was found. 
  9390.  
  9391. 3010   During processing of a mixed character constant, one of the following 
  9392.        occurred: 
  9393.  
  9394.     A shift-in present in the SBCS portion. 
  9395.  
  9396.     A shift-out present in the graphic (double-byte) portion. (A shift-out 
  9397.      cannot appear in either byte of a graphic character.) 
  9398.  
  9399.     A shift-in present in the second byte of a graphic character. 
  9400.  
  9401. 3011   MPSTR built-in function contains an invalid character (or a null 
  9402.        function string, or only blanks) in the expression that specifies 
  9403.        processing rules. (Only V, v, S, s, and blank are valid characters). 
  9404.  
  9405. 3012   Retry for graphic conversion error not allowed. 
  9406.  
  9407. 3013   An assignment attempted to a graphic target with a length greater than 
  9408.        16,383 characters (32,766 bytes). 
  9409.  
  9410. 3014   A graphic or mixed string did not conform to the continuation rules. 
  9411.  
  9412. 3015   A X or GX constant has an invalid number of digits. 
  9413.  
  9414. 3016   Improper use of graphic data in Stream I/O. Graphic data can only be 
  9415.        used as part of a variable name or string. 
  9416.  
  9417. 3017   Invalid graphic, mixed, or DBCS continuation when writing Stream I/O to 
  9418.        a file containing fixed-length records. 
  9419.  
  9420. 3797   Attempt to convert to or from graphic data. 
  9421.  
  9422. 3798   ONCHAR or ONSOURCE pseudovariable used out of context. 
  9423.  
  9424. 3799   In an ON-unit entered as a result of the CONVERSION condition being 
  9425.        raised by an invalid character in the string being converted, the 
  9426.        character has not been corrected by use of the ONSOURCE or ONCHAR 
  9427.        pseudovariables. 
  9428.  
  9429. 3800   Length of data aggregate exceeds system limit of 2**24 bytes. 
  9430.  
  9431. 3801   Array structure element not mapped. 
  9432.  
  9433. 3808   Aggregate cannot be mapped in COBOL or FORTRAN. 
  9434.  
  9435. 3809   A data aggregate exceeded the maximum length. 
  9436.  
  9437. 3810   An array has an extent that exceeds the allowable maximum. 
  9438.  
  9439.  
  9440. ΓòÉΓòÉΓòÉ <hidden> Condition Codes 3901 - 9999 ΓòÉΓòÉΓòÉ
  9441.  
  9442. 3901   Attempt to invoke task using a task variable that is already associated 
  9443.        with an active task. 
  9444.  
  9445. 3904   Event variable referenced as argument to COMPLETION pseudovariable while 
  9446.        already in use for a DISPLAY statement. 
  9447.  
  9448. 3906   Assignment to an event variable that is already active. 
  9449.  
  9450. 3907   Attempt to associate an event variable that is already associated with 
  9451.        an active task. 
  9452.  
  9453. 3909   Attempt to create a subtask (using CALL statement) when insufficient 
  9454.        main storage is available. 
  9455.  
  9456. 3910   Attempt to attach a task (using CALL statement) when number of active 
  9457.        tasks was already at limit defined by ISASIZE parameter of EXEC 
  9458.        statement. 
  9459.  
  9460. 3911   WAIT statement in ON-unit references an event variable already being 
  9461.        waited for in task from which ON-unit was entered. 
  9462.  
  9463. 3912   Attempt to execute CALL with TASK option in block invoked while 
  9464.        executing PUT FILE(SYSPRINT) statement. 
  9465.  
  9466. 3913   CALL statement with TASK option specifies an unknown entry point. 
  9467.  
  9468. 3914   Attempt to call FORTRAN or COBOL routines in two processes 
  9469.        simultaneously. 
  9470.  
  9471. 3915   Attempt to call a task when the multitasking library was not selected in 
  9472.        the link-edit step. 
  9473.  
  9474. 3920   An out-of-storage abend occurred. 
  9475.  
  9476. 4001   Attempt to assign data to an unallocated CONTROLLED variable during GET 
  9477.        DATA. 
  9478.  
  9479. 8091   Operation exception. 
  9480.  
  9481. 8092   Privileged operation exception. 
  9482.  
  9483. 8093   EXECUTE exception. 
  9484.  
  9485. 8094   Protection exception. 
  9486.  
  9487. 8095   Addressing exception. 
  9488.  
  9489. 8096   Specification exception. 
  9490.  
  9491. 8097   Data exception. 
  9492.  
  9493. 9002   Attempt to execute GO TO statement referencing label in an inactive 
  9494.        block. 
  9495.  
  9496. 9050   Program terminated by an abend. 
  9497.  
  9498. 9200   Program check in SORT/MERGE program. 
  9499.  
  9500. 9201   SORT not supported in CMS. 
  9501.  
  9502. 9250   Procedure to be fetched cannot be found. 
  9503.  
  9504. 9251   Permanent transmission error when fetching a procedure. 
  9505.  
  9506. 9252   FETCH/RELEASE not supported in CMS. 
  9507.  
  9508. 9253   Debugging tool unavailable. 
  9509.  
  9510. 9254   Attempt under CICS to FETCH a MAIN procedure from a PL/I routine. 
  9511.  
  9512. 9255   Attempt to release load module containing non-PL/I high-level language 
  9513.        programs. 
  9514.  
  9515. 9999   A failure occurred during an invocation of an LE/370 service. 
  9516.  
  9517.  
  9518. ΓòÉΓòÉΓòÉ 1.5. PL/I Variable Storage ΓòÉΓòÉΓòÉ
  9519.  
  9520. Description 
  9521.   All variables require storage. The attributes specified for a variable 
  9522.   describe the amount of storage required and how it is interpreted. 
  9523.  
  9524. Example 
  9525.   In the following: 
  9526.  
  9527.     DCL X FIXED BINARY(31,0) AUTOMATIC;
  9528.  
  9529.   A reference to X is a reference to a fullword that contains a value to be 
  9530.   interpreted as fixed-point binary. X is allocated storage when its declaring 
  9531.   block is activated and remains allocated until deactivated. 
  9532.  
  9533. Storage Control Tasks 
  9534.   Consult the following table for a list of storage control tasks and the help 
  9535.   that is available for them. 
  9536.  
  9537.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9538.     Γöé  IF YOU WANT TO UNDERSTAND...          YOU WILL WANT ADDITIONAL           Γöé
  9539.     Γöé                                        INFORMATION ABOUT...               Γöé
  9540.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9541.     Γöé  How and when a variable is            o Storage allocation and classes   Γöé
  9542.     Γöé  allocated and freed                                                      Γöé
  9543.     Γöé                                        o Static storage and attribute     Γöé
  9544.     Γöé                                                                           Γöé
  9545.     Γöé                                        o Automatic storage and attribute  Γöé
  9546.     Γöé                                                                           Γöé
  9547.     Γöé                                        o Controlled storage and attribute Γöé
  9548.     Γöé                                                                           Γöé
  9549.     Γöé                                        o Based storage                    Γöé
  9550.     Γöé                                                                           Γöé
  9551.     Γöé                                        o ALLOCATE statement               Γöé
  9552.     Γöé                                                                           Γöé
  9553.     Γöé                                        o FREE statement                   Γöé
  9554.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9555.     Γöé   Parameter storage                    o CONNECTED attribute              Γöé
  9556.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9557.     Γöé   How storage for one variable         o DEFINED attribute                Γöé
  9558.     Γöé   is associated with another                                              Γöé
  9559.     Γöé                                        o POSITION attribute               Γöé
  9560.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9561.     Γöé   How to give a variable an initial    o INITIAL attribute                Γöé
  9562.     Γöé   value when storage is allocated                                         Γöé
  9563.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9564.     Γöé   The establishment of a name as       o VARIABLE attribute               Γöé
  9565.     Γöé   entry of file variable                                                  Γöé
  9566.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9567.  
  9568.  
  9569. ΓòÉΓòÉΓòÉ <hidden> Storage Allocation and Classes ΓòÉΓòÉΓòÉ
  9570.  
  9571. Description 
  9572.   Storage allocation is the process of associating an area of storage with a 
  9573.   variable so that the data item(s) represented by the variable can be recorded 
  9574.   internally. When storage is associated with a variable, the variable is 
  9575.   "allocated". Allocation for a given variable can take place statically, 
  9576.   (before the execution of the program) or dynamically (during execution). A 
  9577.   variable that is allocated statically remains allocated for the duration of 
  9578.   the program. A variable that is allocated dynamically relinquishes its 
  9579.   storage either upon the termination of the block containing that variable or 
  9580.   at your request, depending upon its storage class. 
  9581.  
  9582.   The degree of storage control and the manner in which storage is allocated 
  9583.   for a variable are determined by the storage class of that variable. There 
  9584.   are four storage classes: static, automatic, controlled, and based. You 
  9585.   assign the storage class using its corresponding attribute in an explicit, 
  9586.   implicit, or contextual declaration: 
  9587.  
  9588.     STATIC specifies that storage is allocated when the program is loaded. The 
  9589.      storage is not freed until program execution is completed.  For fetched 
  9590.      procedures, the storage is not freed until the procedure is released. 
  9591.  
  9592.     AUTOMATIC specifies that storage is allocated upon each entry to the block 
  9593.      that contains the storage declaration. The storage is released when the 
  9594.      block is exited. If the block is a procedure that is invoked recursively, 
  9595.      the previously allocated storage is "pushed down" upon entry; the latest 
  9596.      allocation of storage is "popped up" in a recursive procedure when each 
  9597.      generation terminates. 
  9598.  
  9599.     CONTROLLED specifies that you use the ALLOCATE statement and FREE 
  9600.      statement to control the allocation and freeing of storage. Multiple 
  9601.      allocations of the same controlled variable in the same program, without 
  9602.      intervening freeing, will stack generations of the variable. 
  9603.  
  9604.     BASED, like CONTROLLED, specifies that you control storage allocation and 
  9605.      freeing. One difference is that multiple allocations are not stacked but 
  9606.      are available at any time. Each allocation can be identified by the value 
  9607.      of a pointer variable. Another difference is that based variables can be 
  9608.      associated with an area of storage and identified by the value of an 
  9609.      offset variable. 
  9610.  
  9611. Usage Rules 
  9612.   Storage class attributes can be declared explicitly for element, array, and 
  9613.   major structure variables. For array and major structure variables, the 
  9614.   storage class declared for the variable applies to all of the elements in the 
  9615.   array or structure. Storage class attributes cannot be specified for entry 
  9616.   constants, file constants, members of structures, or defined data items. 
  9617.  
  9618.   The scope of a variable depends on its storage class. The allocation of 
  9619.   storage for variables is managed by PL/I. You do not specify where in storage 
  9620.   the allocation is to be made. You can, however, specify where it is to be 
  9621.   allocated relative to storage already allocated- for instance, by allocating 
  9622.   based variables in an area variable. 
  9623.  
  9624.  
  9625. ΓòÉΓòÉΓòÉ <hidden> Static Storage and Attribute ΓòÉΓòÉΓòÉ
  9626.  
  9627. Description 
  9628.   Use static storage when the variable is local to the procedure and the value 
  9629.   it contains must be saved between successive invocations. Variables declared 
  9630.   with the STATIC attribute are allocated  prior to running a program.  They 
  9631.   remain allocated until the program terminates (STATIC storage in fetched 
  9632.   procedures is an exception). The program has no control on the allocation of 
  9633.   static variables during execution. 
  9634.  
  9635. Example 
  9636.   Static variables follow the normal scope rules for the validity of references 
  9637.   to them. For example: 
  9638.  
  9639.     A: PROC OPTIONS(MAIN);
  9640.        .
  9641.        .
  9642.        B: PROC;
  9643.           DECLARE X STATIC INTERNAL;
  9644.           .
  9645.           .
  9646.           END B;
  9647.     END A;
  9648.  
  9649.   Although the variable X is allocated throughout the program, it can be 
  9650.   referenced only within procedure B or any block contained in B. 
  9651.  
  9652.   If static variables are initialized using the INITIAL attribute, the initial 
  9653.   values must be specified as constants (arithmetic constants can be optionally 
  9654.   signed) with the exception of locator variables.  Any specification of 
  9655.   lengths, sizes, or bounds must be integers. 
  9656.  
  9657.   A STATIC pointer or offset variable can be initialized only by using the NULL 
  9658.   built-in function or the SYSNULL built-in function. 
  9659.  
  9660. Syntax 
  9661.  
  9662. ΓöÇΓöÇΓöÇΓöÇSTATICΓöÇΓöÇΓöÇΓöÇ
  9663.  
  9664.  
  9665. ΓòÉΓòÉΓòÉ <hidden> Automatic Storage and Attribute ΓòÉΓòÉΓòÉ
  9666.  
  9667. Description 
  9668.   Automatic variables are allocated on entry to the block in which they are 
  9669.   declared. They can be reallocated many times during the execution of a 
  9670.   program. You control their allocation by your design of the block structure. 
  9671.   AUTOMATIC is the default for internal variables. 
  9672.  
  9673.   Whenever a block (procedure or begin) is active, storage is allocated for all 
  9674.   variables declared automatic within that block. Whenever a block is inactive, 
  9675.   no storage is allocated for the automatic variables in that block. 
  9676.  
  9677. Usage Rules 
  9678.  
  9679.     Only one allocation of a particular automatic variable can exist, except 
  9680.      for those procedures that are called recursively or by more than one 
  9681.      program. 
  9682.  
  9683.     Array bounds, string lengths, and area sizes for automatic variables can 
  9684.      be specified as expressions. This means that you can allocate a specific 
  9685.      amount of storage when you need it. 
  9686.  
  9687. Examples 
  9688.  
  9689.     In the following example: 
  9690.  
  9691.           A:PROC;
  9692.             .
  9693.             .
  9694.             CALL B;
  9695.             B:PROC;
  9696.               DECLARE X,Y AUTO;
  9697.               .
  9698.               .
  9699.               END B;
  9700.             .
  9701.             .
  9702.             CALL B;
  9703.  
  9704.      Each time procedure B is invoked, the variables X and Y are allocated 
  9705.      storage.  When B terminates, the storage is released, and the values they 
  9706.      contain are lost. The storage that is freed is available for allocation to 
  9707.      other variables. 
  9708.  
  9709.     In the following example: 
  9710.  
  9711.           A:PROC;
  9712.             DECLARE N FIXED BIN;
  9713.             .
  9714.             .
  9715.             B:PROC;
  9716.               DECLARE STR CHAR(N);
  9717.  
  9718.      The character string STR has a length defined by the value of the variable 
  9719.      N that existed when procedure B was invoked. If the declare statements are 
  9720.      located in the same procedure, PL/I requires that the variable N be 
  9721.      initialized either to a constant or to an initialized static variable. 
  9722.  
  9723.     In the following example: 
  9724.  
  9725.           DCL N FIXED BIN (15) INIT(10),
  9726.               M FIXED BIN (15) INIT(N),
  9727.               STR1 CHAR(N),
  9728.               STR2 CHAR(M);
  9729.  
  9730.      The length allocated is correct for STR1, but not for STR2. PL/I does not 
  9731.      resolve this type of declaration dependency. 
  9732.  
  9733. Syntax 
  9734.  
  9735. ΓöÇΓöÇΓöÇΓöÇAUTOMATICΓöÇΓöÇΓöÇΓöÇ
  9736.  
  9737. Abbreviation: AUTO 
  9738.  
  9739.  
  9740. ΓòÉΓòÉΓòÉ <hidden> Controlled Storage and Attribute ΓòÉΓòÉΓòÉ
  9741.  
  9742. Description 
  9743.   Variables declared as CONTROLLED are allocated only when you specify them in 
  9744.   an ALLOCATE statement for controlled variables.. A controlled variable 
  9745.   remains allocated until a FREE statement for controlled variables that names 
  9746.   the variable is encountered or until the end of the program. 
  9747.  
  9748.   Effectively, controlled variables are independent of the program block 
  9749.   structure, but not completely. The scope of a controlled variable, when it is 
  9750.   declared internal, is the block in which it is declared and any contained 
  9751.   blocks. Any reference to a controlled variable that is not allocated produces 
  9752.   undefined results. 
  9753.  
  9754.   Generally, controlled variables are useful when a program requires large data 
  9755.   aggregates with adjustable extents. 
  9756.  
  9757. Examples 
  9758.  
  9759.     In the following example: 
  9760.  
  9761.           A:PROC;
  9762.             DCL X CONTROLLED;
  9763.             CALL B;
  9764.             .
  9765.             .
  9766.             B:PROC;
  9767.             ALLOCATE X;
  9768.             .
  9769.             .
  9770.             END B;
  9771.           END A;
  9772.  
  9773.      The variable X can be validly referred to within procedure B and that part 
  9774.      of procedure A that follows execution of the CALL statement. 
  9775.  
  9776.     In the following example: 
  9777.  
  9778.           DCL A(M,N) CTL;
  9779.           GET LIST(M,N);
  9780.           ALLOCATE A;
  9781.           GET LIST(A);
  9782.             .
  9783.             .
  9784.           FREE A;
  9785.  
  9786.      These statements allocate the exact storage required depending on the 
  9787.      input data and free the storage when no longer required. This method is 
  9788.      more efficient than the alternative of setting up a begin block, because 
  9789.      block activation and termination are not required. 
  9790.  
  9791. Related Information 
  9792.  
  9793.     Built-in functions for controlled variables 
  9794.     Controlled structures 
  9795.     Multiple generations of controlled variables 
  9796.  
  9797. Syntax 
  9798.  
  9799. ΓöÇΓöÇΓöÇΓöÇCONTROLLEDΓöÇΓöÇΓöÇΓöÇ
  9800.  
  9801. Abbreviation: CTL 
  9802.  
  9803.  
  9804. ΓòÉΓòÉΓòÉ <hidden> ALLOCATE Statement for Controlled Variables ΓòÉΓòÉΓòÉ
  9805.  
  9806. Description 
  9807.   The ALLOCATE statement allocates storage for controlled variables, 
  9808.   independent of procedure block boundaries. 
  9809.  
  9810.   Initial values are assigned to a variable upon allocation if it has an 
  9811.   INITIAL attribute in either the ALLOCATE statement or the DECLARE statement. 
  9812.   Expressions in the INITIAL attribute are evaluated at the point of 
  9813.   allocation, using the conditions enabled at the ALLOCATE statement, although 
  9814.   the names are interpreted in the environment of the declaration. If an 
  9815.   INITIAL attribute appears in both DECLARE and ALLOCATE statements, the 
  9816.   INITIAL attribute in the ALLOCATE statement is used. If initialization 
  9817.   involves reference to the variable being allocated, the reference is to the 
  9818.   new generation of the variable. 
  9819.  
  9820.   Any evaluations performed at the time the ALLOCATE statement is executed (for 
  9821.   example, evaluation of expressions in an INITIAL attribute) must not be 
  9822.   interdependent. 
  9823.  
  9824. Usage Rules 
  9825.  
  9826.     Both controlled and based variables can be allocated in the same statement 
  9827.      by separating them with commas. 
  9828.  
  9829.      Bounds for arrays, lengths of strings, and sizes of areas are fixed at the 
  9830.      execution of an ALLOCATE statement: 
  9831.  
  9832.       - If a bound, length, or size is explicitly specified in an ALLOCATE 
  9833.         statement, it overrides that given in the DECLARE statement. 
  9834.  
  9835.       - If a bound, length, or size is specified by an asterisk in an ALLOCATE 
  9836.         statement, the bound, length, or size is taken from the current 
  9837.         generation.  If no generation of the variable exists, the bound, 
  9838.         length, or size is undefined and the program is in error. 
  9839.  
  9840.       - Either the ALLOCATE statement or a DECLARE or DEFAULT statement must 
  9841.         specify any necessary dimension, size, or length attributes for a 
  9842.         variable.  Any expression taken from a DECLARE or DEFAULT statement is 
  9843.         evaluated at the point of allocation using the conditions enabled at 
  9844.         the ALLOCATE statement.  However, names in the expression refer to 
  9845.         variables whose scope includes the DECLARE or DEFAULT statement. 
  9846.  
  9847.       - If, in either an ALLOCATE or a DECLARE statement, the bounds, lengths, 
  9848.         or sizes are specified by expressions that contain references to the 
  9849.         variable being allocated, the expressions are evaluated using the value 
  9850.         of the most recent generation of the variable.  For example: 
  9851.  
  9852.                 DCL X(20) FIXED BIN CTL;
  9853.                 ALLOCATE X;
  9854.                 ALLOCATE X(X(1));
  9855.  
  9856.         In the first allocation of X, the upper bound is specified by the 
  9857.         DECLARE statement, that is, 20.  In the second allocation, the upper 
  9858.         bound is specified by the value of the first element of the first 
  9859.         generation of X. 
  9860.  
  9861. Related Information 
  9862.  
  9863.     Asterisk notation 
  9864.  
  9865.     Multiple generations of controlled variables 
  9866.  
  9867. Syntax 
  9868.  
  9869.               ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9870.                                                                  Γöé
  9871. ΓöÇΓöÇΓöÇALLOCATEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇcontrolled-variableΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇ
  9872.                  ΓööΓöÇlevelΓöÇΓöÿ                      ΓööΓöÇΓöñ attribute Γö£ΓöÇΓöÿ
  9873.  
  9874. where attribute is:
  9875.  
  9876. Γö£ΓöÇΓöÇΓö¼ΓöÇdimensionΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9877.    Γö£ΓöÇCHARACTER(length)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9878.    Γö£ΓöÇBIT(length)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9879.    Γö£ΓöÇGRAPHIC(length)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9880.    Γö£ΓöÇAREA(size)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9881.    Γöé          ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                                Γöé
  9882.    Γöé                 Γöé                                Γöé
  9883.    Γö£ΓöÇINITIAL(ΓöÇΓöÇΓöÇitemΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9884.    ΓööΓöÇINITIALΓöÇCALLΓöÇΓöÇentry-referenceΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  9885.                                     Γöé  ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  9886.                                     Γöé            Γöé   Γöé
  9887.                                     ΓööΓöÇ(ΓöÇΓöÇargumentΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ
  9888.  
  9889. Abbreviation: ALLOC 
  9890.  
  9891.  
  9892. ΓòÉΓòÉΓòÉ <hidden> FREE Statement for Controlled Variables ΓòÉΓòÉΓòÉ
  9893.  
  9894. Description 
  9895.   The FREE statement frees the storage allocated for controlled variables. The 
  9896.   storage can then be used for other allocations. For controlled variables, the 
  9897.   next most recent allocation is made available, and subsequent references 
  9898.   refer to that allocation. 
  9899.  
  9900. Usage Rules 
  9901.  
  9902.     Both controlled and based variables can be freed in the same statement by 
  9903.      separating them with commas. 
  9904.  
  9905.     If a controlled variable has no allocated storage at the time the FREE 
  9906.      statement is executed, no action is taken. 
  9907.  
  9908. Related Information 
  9909.   Implicit freeing 
  9910.  
  9911. Syntax 
  9912.  
  9913.               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9914.                                      Γöé
  9915. ΓöÇΓöÇΓöÇΓöÇFREEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇcontrolled-variableΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  9916.  
  9917.  
  9918. ΓòÉΓòÉΓòÉ <hidden> Multiple Generations of Controlled Variables ΓòÉΓòÉΓòÉ
  9919.  
  9920. Description 
  9921.   ALLOCATE statements for controlled variables for which storage was previously 
  9922.   allocated and not freed "pushes down" or stacks storage for the variables. 
  9923.   This stacking creates a new generation of data for the variable. The new 
  9924.   generation becomes the current generation; the previous generation cannot be 
  9925.   directly accessed until the current generation has been freed. 
  9926.  
  9927.   When storage for this variable is freed, using the FREE statement for 
  9928.   controlled variables or at termination of the program in which the storage 
  9929.   was allocated, storage is "popped up" or removed from the stack. This is 
  9930.   similar to the process described for automatic variables in a recursive 
  9931.   procedure. 
  9932.  
  9933.   For controlled variables, however, the stacking and unstacking of variables 
  9934.   occur at ALLOCATE statement and FREE statement rather than at block 
  9935.   boundaries and are independent of procedure invocations. 
  9936.  
  9937. Related Information 
  9938.   Asterisk Notation 
  9939.  
  9940.  
  9941. ΓòÉΓòÉΓòÉ <hidden> Asterisk Notation ΓòÉΓòÉΓòÉ
  9942.  
  9943. Description 
  9944.   In an ALLOCATE statement, values are inherited from the most recent previous 
  9945.   generation when dimensions, lengths, or sizes are indicated by asterisks. 
  9946.   For arrays, the asterisk must be used for every dimension of the array, not 
  9947.   just one of them.  For example: 
  9948.  
  9949.     DCL X(10,20) CHAR(5) CTL;
  9950.  
  9951.     ALLOCATE X;
  9952.     ALLOCATE X(10,10);
  9953.     ALLOCATE X(*,*);
  9954.  
  9955.   The first generation of X has bounds (10,20); the second and third 
  9956.   generations have bounds (10,10).  The elements of each generation of X are 
  9957.   all character strings of length 5. 
  9958.  
  9959.   The asterisk notation can also be used in a DECLARE statement, but has a 
  9960.   different meaning.  For example: 
  9961.  
  9962.     DCL Y CHAR(*) CTL,
  9963.           N FIXED BIN;
  9964.  
  9965.     N=20;
  9966.     ALLOCATE Y CHAR(N);
  9967.     ALLOCATE Y;
  9968.  
  9969.   The length of the character string Y is taken from the previous generation 
  9970.   unless it is specified in an ALLOCATE statement, in which case Y is given the 
  9971.   specified length.  This allows you to defer the specification of the string 
  9972.   length until the actual allocation of storage. 
  9973.  
  9974.  
  9975. ΓòÉΓòÉΓòÉ <hidden> Controlled Structures ΓòÉΓòÉΓòÉ
  9976.  
  9977. Description 
  9978.   When a structure is controlled, any arrays, strings, or areas it contains can 
  9979.   be adjustable. 
  9980.  
  9981. Example 
  9982.   Consider the following use of a controlled structure: 
  9983.  
  9984.     DCL 1 A CTL,
  9985.           2 B(N,M),
  9986.           2 C CHAR(L) VARYING;
  9987.     N = -10;
  9988.     M = 10;
  9989.     L = 5;
  9990.     ALLOC A;
  9991.     FREE A;
  9992.  
  9993.   When the structure is allocated, A.B has the extent -10 to +10 and A.C is a 
  9994.   VARYING character string with maximum length 5. When the structure is freed, 
  9995.   only the major structure name is given. All of a controlled structure must be 
  9996.   freed or allocated. An attempt to obtain storage for part of a structure is 
  9997.   an error. 
  9998.  
  9999.  
  10000. ΓòÉΓòÉΓòÉ <hidden> Built-In Functions for Controlled Variables ΓòÉΓòÉΓòÉ
  10001.  
  10002. ALLOCATION Built-In Function 
  10003.   When the allocation and freeing of a variable depend on flow of control, you 
  10004.   can determine if a variable is allocated. The ALLOCATION built-in function 
  10005.   returns a fixed binary value of precision (31,0) indicating the number of 
  10006.   generations that you can access for a given controlled variable. If the 
  10007.   variable is not allocated, the function returns the value zero. 
  10008.  
  10009. Additional Built-in Functions 
  10010.   Consult the following task chart for additional help with the built-in 
  10011.   functions available for controlled variables. 
  10012.  
  10013.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10014.     Γöé  WHEN YOU WANT TO...                        USE THIS BUILT-IN  Γöé
  10015.     Γöé                                             FUNCTION...        Γöé
  10016.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10017.     Γöé  Determine the extent of a specific        o DIM               Γöé
  10018.     Γöé  dimension of an array                                         Γöé
  10019.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10020.     Γöé  Determine the lower or upper bound of     o LBOUND            Γöé
  10021.     Γöé  a specified dimension of an array         o HBOUND            Γöé
  10022.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10023.     Γöé  Determine the amount of storage           o CURRENTSTORAGE    Γöé
  10024.     Γöé  required by a specific variable           o STORAGE           Γöé
  10025.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10026.     Γöé  Determine the current length of           o LENGTH            Γöé
  10027.     Γöé  a string                                                      Γöé
  10028.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10029.  
  10030.  
  10031. ΓòÉΓòÉΓòÉ <hidden> Based Storage and Attribute ΓòÉΓòÉΓòÉ
  10032.  
  10033. Description 
  10034.   You use the based storage class to store, access, and manipulate one or more 
  10035.   generations of one or more variables. A generation is an amount of storage 
  10036.   for a variable and the attributes of the data it contains. 
  10037.  
  10038.   Based storage is especially useful when you generate or manipulate data sets 
  10039.   of varying sizes of computational data at run time. It can also be useful for 
  10040.   easily and efficiently storing and accessing the generations as a data set. 
  10041.   How you store the generations determines how you can locate the one you want. 
  10042.   Your choices are: 
  10043.  
  10044.     Allow PL/I to assign storage for a variable wherever storage is available. 
  10045.      You use a pointer variable to locate the generation of the variable you 
  10046.      need. 
  10047.  
  10048.     Define an area variable for an amount of contiguous storage to contain all 
  10049.      generations of all related based variables. In addition to using a pointer 
  10050.      variable, you can use an offset variable to locate the generation of the 
  10051.      variable you need relative to the start of the area. 
  10052.  
  10053. Related Information 
  10054.  
  10055.     BASED attribute 
  10056.     ALLOCATE statement for based variables 
  10057.     FREE statement for based variables 
  10058.     Area data and attribute 
  10059.     Locator variables (pointers and offsets) 
  10060.     REFER option (self-defining data) 
  10061.  
  10062.  
  10063. ΓòÉΓòÉΓòÉ <hidden> BASED Attribute ΓòÉΓòÉΓòÉ
  10064.  
  10065. Description 
  10066.   You use the BASED attribute to declare a variable as having the based storage 
  10067.   class.  A declaration of a based variable is a description of the generation; 
  10068.   that is, the amount of storage required and its attributes.  (A based 
  10069.   variable does not identify the location of a generation in main storage.) A 
  10070.   locator value identifies the location of the generation.  Any reference to 
  10071.   the value of a based variable that is not allocated produces undefined 
  10072.   results. 
  10073.  
  10074. Examples 
  10075.  
  10076.     For example: 
  10077.  
  10078.           DCL X FIXED BIN BASED(P);
  10079.  
  10080.      This declares that references to X, unless explicitly qualified by some 
  10081.      other locator-variable, use the variable P to locate the storage for X. 
  10082.  
  10083.     A BASED VARYING string must have a maximum length equal to the maximum 
  10084.      length of any string upon which it is defined. For example: 
  10085.  
  10086.           DECLARE A CHAR(50) VARYING BASED(Q),
  10087.                   B CHAR(50) VARYING;
  10088.                   Q=ADDR(B);
  10089.  
  10090. Usage Rules 
  10091.  
  10092.     A based variable can be used to describe existing data, to obtain storage 
  10093.      by means of the ALLOCATE statement, or to access data in a record by means 
  10094.      of the LOCATE statement or READ (with SET option) statement. 
  10095.  
  10096.     If no locator-variable is given, one must be given on allocation. 
  10097.  
  10098.     While the scope of a based variable is internal, the locator-variable can 
  10099.      be external. 
  10100.  
  10101.     A based structure can be declared to contain adjustable area-sizes, 
  10102.      array-bounds, and string-length specifications by using the REFER option. 
  10103.  
  10104.     If the INITIAL attribute is specified for a based variable, the initial 
  10105.      values are assigned only upon explicit allocation of the based variable 
  10106.      with an ALLOCATE statement or LOCATE statement. 
  10107.  
  10108. Syntax 
  10109.  
  10110. ΓöÇΓöÇΓöÇΓöÇBASEDΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  10111.                ΓööΓöÇΓöÇ(ΓöÇΓöÇΓöÇlocator-referenceΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  10112.  
  10113.  
  10114. ΓòÉΓòÉΓòÉ <hidden> ALLOCATE Statement for Based Variables ΓòÉΓòÉΓòÉ
  10115.  
  10116. Description 
  10117.   The ALLOCATE statement allocates storage for based variables and sets a 
  10118.   locator variable that can be used to identify the location, independent of 
  10119.   procedure block boundaries. When an area is not used, the allocation is in 
  10120.   storage associated with the program that executes the ALLOCATE statement. The 
  10121.   locator variable must be a pointer variable. 
  10122.  
  10123.   The amount of storage allocated for a based variable depends on its 
  10124.   attributes, and on its dimensions, length, or size specifications if these 
  10125.   are applicable at the time of allocation. These attributes are determined 
  10126.   from the declaration of the based variable. When reference is made to a based 
  10127.   variable, the data and alignment attributes used are those declared for it, 
  10128.   while the qualifying locator variable identifies only the location of data. 
  10129.  
  10130.   Storage is allocated in an area when the IN option is specified or the SET 
  10131.   option specifies an offset variable. These options can appear in any order. 
  10132.   For allocations in areas: 
  10133.  
  10134.     If sufficient storage for the based variable does not exist within the 
  10135.      area, the AREA condition is raised. 
  10136.  
  10137.     If the IN option is not used when using an offset variable, the 
  10138.      declaration of the offset variable must specify the AREA attribute. 
  10139.  
  10140.     If the IN option is used and the declaration of the offset variable 
  10141.      specifies the AREA attribute, the areas must be the same or one must 
  10142.      contain the other. 
  10143.  
  10144. Usage Rules 
  10145.  
  10146.     The ALLOCATE statement for controlled variables can be used in the same 
  10147.      statement as the ALLOCATE statement for based variables by separating them 
  10148.      with commas. 
  10149.  
  10150.     Any reference to the value of a based variable that is not allocated 
  10151.      produces undefined results. 
  10152.  
  10153. Related Information 
  10154.  
  10155.     Area data and attribute 
  10156.  
  10157.     FREE statement for based variables 
  10158.  
  10159. Syntax 
  10160.  
  10161.                  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10162.                                                          Γöé
  10163. ΓöÇΓöÇΓöÇΓöÇALLOCATEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇbasedΓöÇvariableΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇ
  10164.                                      Γöé               Γöé
  10165.                                      ΓööΓöÇΓöñ reference Γö£ΓöÇΓöÿ
  10166.  
  10167. where reference is:
  10168.  
  10169. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10170.       ΓööΓöÇΓöÇIN(areaΓöÇreference)ΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇSET(locatorΓöÇreference)ΓöÇΓöÇΓöÿ
  10171.  
  10172. Abbreviation: ALLOC 
  10173.  
  10174.  
  10175. ΓòÉΓòÉΓòÉ <hidden> FREE Statement for Based Variables ΓòÉΓòÉΓòÉ
  10176.  
  10177. Description 
  10178.   The FREE statement frees the storage allocated for both based variables and 
  10179.   controlled variables. The amount of storage freed depends upon the attributes 
  10180.   of the based variable, including bounds and/or lengths at the time the 
  10181.   storage is freed. The user is responsible for determining that this amount 
  10182.   coincides with the amount allocated. If the variable has not been allocated, 
  10183.   the results are unpredictable. 
  10184.  
  10185. Usage Rules 
  10186.  
  10187.     A FREE statement for based variables and a FREE statement for controlled 
  10188.      variables can be used in the same statement by separating them with 
  10189.      commas. 
  10190.  
  10191.     A based variable can be used to free storage only if that storage has been 
  10192.      allocated for a based variable having identical data attributes. 
  10193.  
  10194.     A FREE statement cannot be used to free a locate-mode I/O record. 
  10195.  
  10196. Related Information 
  10197.  
  10198.     Implicit freeing of based variables 
  10199.  
  10200.     ALLOCATE statement for based variables 
  10201.  
  10202. Syntax 
  10203.  
  10204.               ΓöîΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10205.                         Γöé
  10206. ΓöÇΓöÇΓöÇΓöÇFREEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñoptionΓö£ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10207.  
  10208. where option is:
  10209.  
  10210. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇbased-variableΓöÇΓöÇΓöÇ
  10211.       ΓööΓöÇΓöÇlocator-qualifier ΓöÇ> ΓöÇΓöÿ
  10212.  
  10213. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10214.       ΓööΓöÇΓöÇINΓöÇΓöÇ(ΓöÇΓöÇarea-referenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  10215.  
  10216. Note:   A particular generation of a based variable is freed by specifying a 
  10217. locator qualifier in the statement. If the based variable is not explicitly 
  10218. locator-qualified, the locator variable declared in the BASED attribute is used 
  10219. to identify the generation of data to be freed. If no locator has been 
  10220. declared, the statement is in error. 
  10221.  
  10222.  
  10223. ΓòÉΓòÉΓòÉ <hidden> Area Data and Attribute ΓòÉΓòÉΓòÉ
  10224.  
  10225. Description 
  10226.   Area variables describe contiguous blocks of storage that are reserved for 
  10227.   the allocation of based variables. Area variables can have any storage class 
  10228.   and must be aligned. 
  10229.  
  10230.   When a based variable is allocated and an area is not specified, the storage 
  10231.   is obtained from wherever it is available. Consequently, allocated based 
  10232.   variables can be scattered widely throughout main storage. This is not 
  10233.   significant for internal operations because items are readily accessed using 
  10234.   the pointers. However, if these allocations are transmitted to a data set, 
  10235.   the items have to be collected together. Items allocated within an area 
  10236.   variable are already collected and can be transmitted or assigned as a unit 
  10237.   while still retaining their separate identities. 
  10238.  
  10239.   You might want to identify the locations of based variables within an area 
  10240.   variable relative to the start of the area variable. Offset variables are 
  10241.   provided for this purpose. 
  10242.  
  10243.   An area can be assigned or transmitted complete with its contained 
  10244.   allocations; thus, a set of based allocations can be treated as one unit for 
  10245.   assignment and input/output while each allocation retains its individual 
  10246.   identity. 
  10247.  
  10248.   The size of an area is adjustable in a similar way as a string length or an 
  10249.   array bound. It can be specified by an expression, an asterisk (for a 
  10250.   controlled area or parameter), or by a REFER option (for self-defining data). 
  10251.   The size for areas of static storage class must be specified as an integer. 
  10252.   In addition to the declared size, an extra 16 bytes of control information 
  10253.   precedes the reserved size of an area.  The 16 bytes contain such details as 
  10254.   the amount of storage in use.. 
  10255.  
  10256.   The amount of reserved storage that is actually in use is known as the extent 
  10257.   of the area. When an area variable is allocated, it is empty, that is, the 
  10258.   area extent is zero. The maximum extent is represented by the area size. 
  10259.   Based variables can be allocated and freed within an area at any time during 
  10260.   execution, thus varying the extent of an area. 
  10261.  
  10262.   When a based variable is freed, the storage it occupied is available for 
  10263.   other allocations. A chain of available storage within an area is maintained; 
  10264.   the head of the chain is held within the control information. Inevitably, as 
  10265.   based variables with different storage requirements are allocated and freed, 
  10266.   gaps will occur in the area when allocations do not fit available spaces. 
  10267.   These gaps are included in the extent of the area. 
  10268.  
  10269.   A variable is given the AREA attribute contextually by its appearance in the 
  10270.   following places: 
  10271.  
  10272.     The OFFSET variable and attribute 
  10273.     The IN option of an ALLOCATE statement for based variables or FREE 
  10274.      statement for based variables 
  10275.     Explicit declaration. 
  10276.  
  10277. Examples 
  10278.   Examples of AREA declarations are: 
  10279.  
  10280.     DECLARE AREA1 AREA(2000),
  10281.             AREA2 AREA;
  10282.  
  10283. Usage Rule 
  10284.   No operators, including comparison, can be applied to area variables. 
  10285.  
  10286. Related Information 
  10287.  
  10288.     Area assignment 
  10289.     Input/output of areas 
  10290.  
  10291. Syntax 
  10292.  
  10293. ΓöÇΓöÇΓöÇΓöÇAREAΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  10294.             Γö£ΓöÇΓöÇ(*)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10295.             ΓööΓöÇΓöÇ(expressionΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  10296.                             ΓööΓöÇΓöÇREFER(variable)ΓöÇΓöÇΓöÿ
  10297.  
  10298.  
  10299. ΓòÉΓòÉΓòÉ <hidden> Area Assignment ΓòÉΓòÉΓòÉ
  10300.  
  10301. Description 
  10302.   The value of an area reference can be assigned to one or more area variables 
  10303.   by an assignment statement. Area-to-area assignment has the effect of freeing 
  10304.   all allocations in the target area and then assigning the extent of the 
  10305.   source area to the target area, so that all offsets for the source area are 
  10306.   valid for the target area. 
  10307.  
  10308.   Area assignment can be used to expand a list of based variables beyond the 
  10309.   bounds of its original area. If you attempt to allocate a based variable 
  10310.   within an area that contains insufficient free storage to accommodate it, the 
  10311.   AREA condition is raised. The ON-unit for this condition could be coded to 
  10312.   change the value of a pointer qualifying the reference to the inadequate 
  10313.   area, so that it points to a different area; on return from the ON-unit, the 
  10314.   allocation is attempted again, within the new area. Alternatively, the 
  10315.   ON-unit can write out the area and reset it to EMPTY. 
  10316.  
  10317.   If an area containing no allocations is assigned to a target area, the effect 
  10318.   is to free all allocations in the target area. 
  10319.  
  10320. Example 
  10321.   In the following example: 
  10322.  
  10323.     DECLARE X BASED (O(1)),
  10324.             O(2) OFFSET (A),
  10325.             (A,B) AREA;
  10326.  
  10327.             ALLOC X IN (A);
  10328.             X = 1;
  10329.             ALLOC X IN (A) SET (O(2));
  10330.             O(2) -> X = 2;
  10331.             B = A;
  10332.  
  10333.   Using the POINTER storage control built-in function, the references POINTER 
  10334.   (O(2),B) -> X and O(2) -> X represent the same value allocated in areas B and 
  10335.   A respectively. 
  10336.  
  10337.  
  10338. ΓòÉΓòÉΓòÉ <hidden> Locator Variables (Pointers and Offsets) ΓòÉΓòÉΓòÉ
  10339.  
  10340. Description 
  10341.   The mechanism for identifying a particular generation of a based variable is 
  10342.   the locator variable. PL/I provides two types of locator variables to 
  10343.   identify storage locations: pointer and offset. 
  10344.  
  10345.   - A pointer variable can be used to qualify a reference to a variable with 
  10346.   allocated storage in several different locations. 
  10347.  
  10348.   - An offset variable specifies a location relative to the start of an area 
  10349.   variable and remains valid when the area is assigned to a different part of 
  10350.   storage. 
  10351.  
  10352.   Because an independent locator variable identifies the location of any 
  10353.   generation, you can refer at any point in a program to any generation of a 
  10354.   based variable by using an appropriate locator value. The association of a 
  10355.   locator-variable with a based variable is not a special relationship. 
  10356.  
  10357.   When a based variable is declared without a locator-variable, any reference 
  10358.   to the based variable must always be explicitly locator-qualified. 
  10359.  
  10360. Usage Rules 
  10361.  
  10362.     A locator value can be assigned only to a locator variable. When an offset 
  10363.      value is assigned to an offset variable, the area variables named in the 
  10364.      OFFSET attributes  are ignored. 
  10365.  
  10366.     A locator reference is a pointer or offset variable, which can be 
  10367.      qualified or subscripted, or a function reference that returns a locator 
  10368.      value. It can be used in the following ways: 
  10369.  
  10370.       - As a locator qualifier, in association with a declaration or reference 
  10371.         for a based variable 
  10372.  
  10373.       - In a comparison operation, as in an IF statement (locator values can be 
  10374.         compared whether equal or not equal) 
  10375.  
  10376.       - As an argument in a procedure reference. 
  10377.  
  10378.       - PL/I implicitly converts an offset to a pointer value. Thus, offset 
  10379.         references can be used interchangeably with pointer references. 
  10380.  
  10381. Related Information 
  10382.  
  10383.     Locator qualification 
  10384.     Levels of locator qualification 
  10385.     Locator conversion 
  10386.     Pointer variable and attribute 
  10387.     Offset variable and attribute 
  10388.     Overlaying storage 
  10389.  
  10390.  
  10391. ΓòÉΓòÉΓòÉ <hidden> Locator Qualification ΓòÉΓòÉΓòÉ
  10392.  
  10393. Description 
  10394.   Locator qualification is the association of one or more locator references 
  10395.   with a based references to identify a particular generation of a based 
  10396.   variable This is called a locator-qualified reference. The composite symbol 
  10397.   -> represents "qualified by" or "points to". 
  10398.  
  10399.   Reference to a based variable can be explicitly qualified as shown in the 
  10400.   following syntax: 
  10401.  
  10402.   Syntax 
  10403.  
  10404.     ΓöÇΓöÇlocator-reference -> ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  10405.                                Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  10406.                                Γöé                                Γöé  Γöé
  10407.                                ΓööΓöÇΓöÇΓöÇΓöÇΓöÇbased-locator-reference -> ΓöÇΓö┤ΓöÇΓöÇΓöÿ
  10408.  
  10409.     ΓöÇΓöÇΓöÇbased-referenceΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10410.  
  10411.   In the following example: 
  10412.  
  10413.     P -> X
  10414.  
  10415.   X is a based variable and P is a locator variable. The reference means:  that 
  10416.   generation of X identified by the value of the locator P. X is said to be 
  10417.   "explicitly locator-qualified". 
  10418.  
  10419.   When more than one locator qualifier is used in a reference, they are 
  10420.   evaluated from left to right. In these cases, only the first, or leftmost, 
  10421.   can be a function reference. All other locator qualifiers must be based 
  10422.   references. However, an entry variable can be based, and can represent a 
  10423.   function that returns a locator value. 
  10424.  
  10425.   Reference to a based variable can also be implicitly qualified. The locator 
  10426.   reference used to determine the generation of a based variable that is 
  10427.   implicitly qualified is the one declared with the based variable. 
  10428.  
  10429. Examples 
  10430.   Locator qualification 
  10431.  
  10432.  
  10433. ΓòÉΓòÉΓòÉ <hidden> Examples - Locator Qualification ΓòÉΓòÉΓòÉ
  10434.  
  10435. Consider the following examples of locator qualification. 
  10436.  
  10437.  Reference to a based variable can be implicitly qualified. The locator 
  10438.   reference used to determine the generation of a based variable that is 
  10439.   implicitly qualified is the one declared with the based variable. In the 
  10440.   following example: 
  10441.  
  10442.     DCL X FIXED BIN BASED(P);
  10443.     ALLOCATE X;
  10444.     X = X + 1;
  10445.  
  10446.   The ALLOCATE statement sets a value in the pointer variable P so that the 
  10447.   reference X applies to allocated storage. The references to X in the 
  10448.   assignment statement are "implicitly locator-qualified" by P. References to X 
  10449.   can also be explicitly locator-qualified as follows: 
  10450.  
  10451.     P->X = P->X + 1;
  10452.     Q = P;
  10453.     Q->X = Q->X + 1;
  10454.  
  10455.   These assignment statements have the same effect as the previous example. 
  10456.  
  10457.  Because the locator declared with a based variable can also be based, a chain 
  10458.   of locator qualifiers can be implied. In the following example: 
  10459.  
  10460.     DECLARE (P(10),Q) POINTER,
  10461.              R POINTER BASED (Q),
  10462.              V BASED (P(3)),
  10463.              W BASED (R),
  10464.              Y BASED;
  10465.     ALLOCATE R,V,W;
  10466.  
  10467.   Given this declaration and allocation, the following are valid references: 
  10468.  
  10469.     P(3) -> V
  10470.  
  10471.     V
  10472.  
  10473.     Q -> R -> W
  10474.  
  10475.     R -> W
  10476.  
  10477.     W
  10478.  
  10479.   The first two references are equivalent, as are the last three. Any reference 
  10480.   to Y must include a qualifying locator variable. 
  10481.  
  10482.  
  10483. ΓòÉΓòÉΓòÉ <hidden> Levels of Locator Qualification ΓòÉΓòÉΓòÉ
  10484.  
  10485. Description 
  10486.   A pointer that qualifies a based variable represents one level of locator 
  10487.   qualification. An offset represents two levels because it is implicitly 
  10488.   qualified within an area. The number of levels is not affected by a locator 
  10489.   being subscripted and/or an element of a structure. The maximum number of 
  10490.   levels of locator qualification allowed in a reference depends on the 
  10491.   available storage, but it will never be less than ten. 
  10492.  
  10493. Example 
  10494.   In the following example: 
  10495.  
  10496.     DECLARE X BASED (P),
  10497.             P POINTER BASED (Q),
  10498.             Q OFFSET (A);
  10499.  
  10500.   The references:  X, P -> X, and Q -> P -> X all represent three levels of 
  10501.   locator qualification. 
  10502.  
  10503.  
  10504. ΓòÉΓòÉΓòÉ <hidden> Locator Conversion ΓòÉΓòÉΓòÉ
  10505.  
  10506. Description 
  10507.   Locator data cannot be converted to any other data type, but pointer can be 
  10508.   converted to offset, and vice versa. When an offset variable is used in a 
  10509.   reference, its value is implicitly converted to a pointer value. The address 
  10510.   value of the area variable designated in the OFFSET attribute is added to the 
  10511.   offset value. Explicit conversion of an offset to a pointer value is 
  10512.   accomplished using the POINTER built-in function. 
  10513.  
  10514.   The OFFSET built-in function complements the POINTER built-in function and 
  10515.   returns an offset value derived from a given pointer and area. The given 
  10516.   pointer value must identify the location of a based variable in the given 
  10517.   area. 
  10518.  
  10519. Usage Rules 
  10520.  
  10521.     In conversion of offset data to pointer, the offset value is added to the 
  10522.      pointer value of the start of the area named in the OFFSET attribute. It 
  10523.      is an error to attempt to convert an offset variable that is not 
  10524.      associated with an area. 
  10525.  
  10526.     In any conversion of locator data, if the offset variable is a member of a 
  10527.      structure, or if it appears in a do-specification or a multiple assignment 
  10528.      statement, the area associated with that offset variable must be an 
  10529.      unsubscripted, nondefined, element variable. 
  10530.  
  10531.     The area can be based, but if so, its qualifier must be an unsubscripted, 
  10532.      nonbased, nondefined pointer; this pointer must not be used to explicitly 
  10533.      qualify the area in declaration of the offset variable. 
  10534.  
  10535.     A pointer value is converted to offset by effectively deducting the 
  10536.      pointer value for the start of the area from the pointer value to be 
  10537.      converted. This conversion is limited to pointer values that relate to 
  10538.      addresses within the area named in the OFFSET attribute. Except when 
  10539.      assigning the NULL built-in function value, it is an error to attempt to 
  10540.      convert to an offset variable that is not associated with an area. 
  10541.  
  10542. Example 
  10543.   Consider the following: 
  10544.  
  10545.     DCL P POINTER, O OFFSET(A),B AREA;
  10546.     P = POINTER(O,B);
  10547.  
  10548.   This statement assigns a pointer value to P, giving the location of a based 
  10549.   variable, identified by offset O in area B. Because the area variable is 
  10550.   different from that associated with the offset variable, you must ensure that 
  10551.   the offset value is valid for the different area. It is valid, for example, 
  10552.   if area A is assigned to area B prior to the invocation of the function. 
  10553.  
  10554.  
  10555. ΓòÉΓòÉΓòÉ <hidden> Pointer Variable and Attribute ΓòÉΓòÉΓòÉ
  10556.  
  10557. Description 
  10558.   A pointer variable is a kind of locator variable. The value of a pointer 
  10559.   variable that no longer identifies a generation of a based variable is 
  10560.   undefined (for example, when a based variable has been freed). 
  10561.  
  10562.   A pointer variable is declared contextually if it appears in one of the 
  10563.   following places: 
  10564.  
  10565.     The BASED attribute 
  10566.     The SET option of an ALLOCATE, LOCATE, or READ statement. 
  10567.  
  10568.   A pointer variable can also be declared explicitly. 
  10569.  
  10570. Related Information 
  10571.   Setting pointer variables 
  10572.  
  10573. Syntax 
  10574.  
  10575. ΓöÇΓöÇΓöÇΓöÇPOINTERΓöÇΓöÇΓöÇΓöÇ
  10576.  
  10577. Abbreviation: PTR 
  10578.  
  10579.  
  10580. ΓòÉΓòÉΓòÉ <hidden> Setting Pointer Variables ΓòÉΓòÉΓòÉ
  10581.  
  10582. Description 
  10583.   Before a reference is made to a pointer-qualified variable, the pointer must 
  10584.   have a value. 
  10585.  
  10586.   Pointer values are obtained from one of the following methods: 
  10587.  
  10588.     The NULL, SYSNULL, ADDR, ENTRYADDR, POINTERADD, POINTERVALUE or POINTER 
  10589.      built-in functions 
  10590.  
  10591.     A READ statement with the SET option 
  10592.  
  10593.     An ALLOCATE statement or LOCATE statement 
  10594.  
  10595.     By assignment of the value of another locator variable, or a locator value 
  10596.      returned by a user-defined function. 
  10597.  
  10598.   Pointer values can be manipulated by the following: 
  10599.  
  10600.     An assignment that copies a pointer value to a pointer variable 
  10601.  
  10602.     A locator conversion that converts an offset value to a pointer value, or 
  10603.      vice versa 
  10604.  
  10605.     Passing the pointer value as an argument in a procedure reference 
  10606.  
  10607.     Returning a pointer value from a function procedure. 
  10608.  
  10609.   PL/I requires that all pointers declared in PL/I source be clean (that is, 
  10610.   that the non-address bits in a fullword pointer are zero).  Dirty pointers 
  10611.   can result in unpredictable results, including program checks, incorrect 
  10612.   pointer comparisons, and incorrect last argument flagging.  In addition, 
  10613.   dirty pointers can also cause you to mistake a pointer for the NULL pointer. 
  10614.  
  10615.  
  10616. ΓòÉΓòÉΓòÉ <hidden> Offset Variable and Attribute ΓòÉΓòÉΓòÉ
  10617.  
  10618. Description 
  10619.   An offset variable is a kind of locator variable. The value of an offset 
  10620.   variable specifies the location of a based variable within an area variable 
  10621.   relative to the start of the area. Because the based variables are located 
  10622.   relatively, if the area variable is assigned to a different part of main 
  10623.   storage, the offset values remain valid. 
  10624.  
  10625.   When an offset value is assigned to an offset variable, the area variable 
  10626.   named in the OFFSET attribute is ignored because only the offset value is 
  10627.   important. 
  10628.  
  10629. Usage Rules 
  10630.  
  10631.     Offset variables do not preclude the use of pointer variables within an 
  10632.      area. 
  10633.  
  10634.     The association of an area variable with an offset variable is not a 
  10635.      special relationship. An offset variable can be associated with any area 
  10636.      variable by means of the POINTER built-in function. The advantage of 
  10637.      making such an association in a declaration is that a reference to the 
  10638.      offset variable implies reference to the associated area variable. If no 
  10639.      area variable is specified, the offset can be used as a locator qualifier 
  10640.      only through use of the POINTER built-in function. 
  10641.  
  10642. Examples 
  10643.   Using offset variables 
  10644.  
  10645. Related Information 
  10646.   Setting offset variables 
  10647.  
  10648. Syntax 
  10649.  
  10650. ΓöÇΓöÇΓöÇΓöÇOFFSETΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  10651.                 ΓööΓöÇΓöÇ(ΓöÇΓöÇarea-variableΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  10652.  
  10653.  
  10654. ΓòÉΓòÉΓòÉ <hidden> Examples- Offset Variables ΓòÉΓòÉΓòÉ
  10655.  
  10656.  Consider the following example: 
  10657.  
  10658.     DCL X BASED(O),
  10659.         Y BASED(P),
  10660.         A AREA,
  10661.         O OFFSET(A);
  10662.  
  10663.         ALLOCATE X;
  10664.         ALLOCATE Y IN(A);
  10665.  
  10666.   The storage class of area A and offset O is AUTOMATIC by default. The first 
  10667.   ALLOCATE statement is equivalent to: 
  10668.  
  10669.     ALLOCATE X IN(A) SET(O);
  10670.  
  10671.   The second ALLOCATE statement is equivalent to: 
  10672.  
  10673.     ALLOCATE Y IN(A) SET(P);
  10674.  
  10675.  The following example shows how a list can be built in an area variable using 
  10676.   offset variables: 
  10677.  
  10678.     DCL A AREA,
  10679.         (T,H) OFFSET(A),
  10680.         1 STR BASED(H),
  10681.           2 P OFFSET(A),
  10682.           2 DATA;
  10683.  
  10684.         ALLOCATE STR IN(A);
  10685.         T=H;
  10686.  
  10687.     NEXT: ALLOCATE STR SET(T->P);
  10688.         T=T->P;
  10689.         .
  10690.         .
  10691.         GO TO NEXT;
  10692.  
  10693.  
  10694. ΓòÉΓòÉΓòÉ <hidden> Overlaying Storage ΓòÉΓòÉΓòÉ
  10695.  
  10696. In the following example, the arrays A and C refer to the same storage. The 
  10697. elements B and C(2,1) also refer to the same storage. 
  10698.  
  10699. DCL A(3,2) CHARACTER(5) BASED(P),
  10700.     B CHAR(5) BASED(Q),
  10701.     C(3,2) CHARACTER(5);
  10702. P = ADDR(C);
  10703. Q = ADDR(A(2,1));
  10704.  
  10705. Usage note:  When a based variable is overlaid in this way (above), no new 
  10706. storage is allocated.  The based variable uses the same storage as the variable 
  10707. on which it is overlaid (A(3,2) in the example). This overlay technique can be 
  10708. achieved by use of the DEFINED attribute, but an important difference is that 
  10709. the overlay is permanent. When based variables are overlaid, the association 
  10710. can be changed at any time in the program by assigning a new value to the 
  10711. locator variable. 
  10712.  
  10713.  
  10714. ΓòÉΓòÉΓòÉ <hidden> ALLOCATE Statement ΓòÉΓòÉΓòÉ
  10715.  
  10716. Use the ALLOCATE statement to allocate storage for variables, independent of 
  10717. procedure block boundaries. ALLOCATE can be used for both controlled and based 
  10718. variables, but the syntax and usage rules are not the same for both types of 
  10719. variables. Select one of the following for additional information about the 
  10720. ALLOCATE statement: 
  10721.  
  10722.  ALLOCATE statement for controlled variables 
  10723.  
  10724.  ALLOCATE statement for based variables 
  10725.  
  10726.  
  10727. ΓòÉΓòÉΓòÉ <hidden> REFER option (self-defining data) ΓòÉΓòÉΓòÉ
  10728.  
  10729. Description 
  10730.   A self-defining structure contains information about its own fields, such as 
  10731.   the length of a string.  A based structure can be declared to manipulate this 
  10732.   data. String lengths, array bounds, and area sizes can all be defined by 
  10733.   variables declared within the structure.  When the structure is allocated (by 
  10734.   either an ALLOCATE statement or a LOCATE statement), the value of an 
  10735.   expression is assigned to a variable that defines a length, bound, or a size. 
  10736.   For any other reference to the structure, the value of the defining variable 
  10737.   is used. 
  10738.  
  10739.   Use the REFER option in the declaration of a based structure to specify that, 
  10740.   on allocation of the structure, the value of an expression is assigned to a 
  10741.   variable in the structure and represents the length, bound, or the size of 
  10742.   another variable in the structure. 
  10743.  
  10744.   When the value of a refer object is changed, the next reference to the 
  10745.   structure causes remapping. 
  10746.  
  10747. Examples 
  10748.   Using the REFER option 
  10749.  
  10750. Usage Rules 
  10751.   Any number of REFER options can be used in the declaration of a structure, 
  10752.   provided that at least one of the following restrictions is satisfied: 
  10753.  
  10754.     All objects of REFER options are at logical level two, that is, not 
  10755.      declared within a minor structure. 
  10756.  
  10757.     The structure is declared so that no padding between members of the 
  10758.      structure can occur. 
  10759.  
  10760.     If the REFER option is used only once in a structure declaration, the two 
  10761.      preceding restrictions can be ignored, provided that: 
  10762.  
  10763.       - For a string length or area size, the option is applied to the last 
  10764.         element of the structure. 
  10765.  
  10766.       - For an array bound, the option is applied either to the last element of 
  10767.         the structure or to a minor structure that contains the last element. 
  10768.         The array bound must be the upper bound of the leading dimension. 
  10769.  
  10770.   If the value of the object of a REFER option varies during the program, then: 
  10771.  
  10772.     The structure must not be freed until the object is restored to the value 
  10773.      it had when allocated. 
  10774.  
  10775.     The structure must not be written out while the object has a value greater 
  10776.      than the value it was allocated. 
  10777.  
  10778.     The structure can be written out when the object has a value equal to or 
  10779.      less than the value it had when allocated. The number of elements, the 
  10780.      string length, or area size actually written will be that indicated by the 
  10781.      current value of the object. 
  10782.  
  10783. Syntax 
  10784.  
  10785. ΓöÇΓöÇΓöÇΓöÇexpressionΓöÇΓöÇΓöÇΓöÇREFERΓöÇΓöÇΓöÇΓöÇ(ΓöÇΓöÇvariableΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  10786.  
  10787.  
  10788. ΓòÉΓòÉΓòÉ <hidden> Examples- Using the REFER Option ΓòÉΓòÉΓòÉ
  10789.  
  10790.  Consider the following example: 
  10791.  
  10792.     DECLARE 1 STR BASED(P),
  10793.               2 X FIXED BINARY(31,0),
  10794.               2 Y (L REFER (X)),
  10795.             L FIXED BINARY(31,0) INIT(1000);
  10796.  
  10797.   This declaration specifies that the based structure STR consists of an array 
  10798.   Y and an element X. When STR is allocated, the upper bound of Y is set to the 
  10799.   value of L (initialized to be 1000). As the REFER object, X also obtains this 
  10800.   initialized value. For any other reference to Y, such as a READ statement 
  10801.   that sets P, the bound value is taken from the current value of X. 
  10802.  
  10803.  If the value of the object of a REFER option varies during the program, then 
  10804.   the structure can be written out when the object has a value equal to or less 
  10805.   than the value it had when allocated. The number of elements, the string 
  10806.   length, or area size actually written will be that indicated by the current 
  10807.   value of the object. In the following example: 
  10808.  
  10809.     DCL 1 REC BASED (P),
  10810.           2 N FIXED BINARY(31),
  10811.           2 A (M REFER(N)),
  10812.         M FIXED BINARY(31) INITIAL (100);
  10813.     ALLOCATE REC;
  10814.     N = 86;
  10815.     WRITE FILE (X) FROM (REC);
  10816.  
  10817.   86 elements of REC are written. It would be an error to attempt to free REC 
  10818.   at this point, since N must be restored to the value it had when allocated 
  10819.   (that is, 100). If N is assigned a value greater than 100, an error occurs 
  10820.   when the WRITE statement is encountered. 
  10821.  
  10822.  When the value of a refer object is changed, the next reference to the 
  10823.   structure causes remapping. In the following example: 
  10824.  
  10825.     DCL 1 A BASED(P),
  10826.           2 B FIXED BINARY(31),
  10827.           2 C (I REFER(B)),
  10828.           2 D,
  10829.     I FIXED BINARY(31) INIT(10);
  10830.  
  10831.     ALLOCATE A;
  10832.     B = 5;
  10833.  
  10834.   The next reference to A after the assignment to B remaps the structure to 
  10835.   reduce the upper bound of C from 10 to 5, and to allocate to D storage 
  10836.   immediately following the new last element of C. Although the structure is 
  10837.   remapped, no data is reassigned-the contents of the part of storage 
  10838.   originally occupied by the structure A are unchanged. If you do not consider 
  10839.   remapping, errors can occur. 
  10840.  
  10841.  Consider the following example, in which there are two REFER options in the 
  10842.   one structure: 
  10843.  
  10844.     DCL 1 A BASED (P),
  10845.           2 B FIXED BINARY (15,0),
  10846.           2 C CHAR (I1 REFER (B)),
  10847.           2 D FIXED BINARY (15,0),
  10848.           2 E CHAR (I2 REFER (D)),
  10849.     (I1,I2) INIT (10);
  10850.  
  10851.     ALLOCATE A;
  10852.     B = 5;
  10853.  
  10854.  
  10855. ΓòÉΓòÉΓòÉ <hidden> CONNECTED Attribute ΓòÉΓòÉΓòÉ
  10856.  
  10857. Description 
  10858.   Elements, arrays, and major structures are always allocated in connected 
  10859.   storage. References to unconnected storage arise only when you refer to cross 
  10860.   sections of arrays.. For example, in the structure: 
  10861.  
  10862.     1 A(10),
  10863.       2 B,
  10864.       2 C;
  10865.  
  10866.   the interleaved arrays A.B and A.C are both in unconnected storage. 
  10867.  
  10868. Usage Rules 
  10869.  
  10870.     Certain restrictions apply to the use of unconnected storage. For example, 
  10871.      a record variable (that is, a variable to or from which data is 
  10872.      transmitted by a record-oriented transmission statement) must represent 
  10873.      data in connected storage. 
  10874.  
  10875.     The CONNECTED attribute can be applied only to parameters. It specifies 
  10876.      that the parameter is a reference to connected storage only and, hence, 
  10877.      allows the parameter to be used as a target or source in record-oriented 
  10878.      I/O or as a base in string overlay defining. When the parameter is 
  10879.      connected and the CONNECTED attribute is used, the compiler may be able to 
  10880.      generate significantly superior code when accessing aggregates. 
  10881.  
  10882.     CONNECTED can be specified for noncontrolled aggregate parameters and can 
  10883.      be associated only with level-one names. 
  10884.  
  10885. Syntax 
  10886.  
  10887. ΓöÇΓöÇΓöÇΓöÇCONNECTEDΓöÇΓöÇΓöÇΓöÇΓöÇ
  10888.  
  10889. Abbreviations: CONN 
  10890.  
  10891.  
  10892. ΓòÉΓòÉΓòÉ <hidden> DEFINED Attribute ΓòÉΓòÉΓòÉ
  10893.  
  10894. Description 
  10895.   The DEFINED attribute specifies that the declared variable is associated with 
  10896.   some or all of the storage associated with the designated base variable. 
  10897.  
  10898.   There are three types of defining: simple, iSUB, and string overlay. 
  10899.  
  10900.   If the POSITION attribute is specified, string overlay defining is in effect. 
  10901.   In this case, the base variable must not contain iSUB references. If the 
  10902.   subscripts specified in the base variable contain references to iSUB 
  10903.   variables, iSUB defining is in effect.  If neither iSUB nor the POSITION 
  10904.   attribute is present, simple defining is in effect if the base variable and 
  10905.   the defined variable match according the criteria below. Otherwise string 
  10906.   overlay defining is in effect. 
  10907.  
  10908. Base and Defined Matching Criteria 
  10909.  
  10910.     A base variable and a defined variable match if the base variable, when 
  10911.      passed as an argument, matches a parameter which has the attributes of the 
  10912.      defined variable (except for the DEFINED attribute). For this purpose, the 
  10913.      parameter is assumed to have all array bounds, string lengths, and area 
  10914.      sizes specified by asterisks. 
  10915.  
  10916.     For simple and iSUB defining, a PICTURE attribute can only be matched by a 
  10917.      PICTURE attribute that is identical except for repetition factors.  For a 
  10918.      reference to specify a valid base variable in string overlay defining, the 
  10919.      reference must be in connected storage.  You can override the matching 
  10920.      rule completely, but this can cause unwarranted side effects within your 
  10921.      program. 
  10922.  
  10923.     The values specified or derived for any array bounds, string lengths, and 
  10924.      area sizes in a defined variable do not always have to match those of the 
  10925.      base variable.  However, the defined variable must be able to fit into the 
  10926.      corresponding base array, string, or area. 
  10927.  
  10928.   The determination of values and the interpretation of names occurs in the 
  10929.   following sequence: 
  10930.  
  10931.     1. The array bounds, string lengths, and area sizes of a defined variable 
  10932.        are evaluated on entry to the block that declares the variable. 
  10933.  
  10934.     2. A reference to a defined variable is a reference to the current 
  10935.        generation of the base variable. When a defined variable is passed as an 
  10936.        argument without creation of a dummy, the corresponding parameter refers 
  10937.        to the generation of the base variable that is current when the argument 
  10938.        is passed. This remains true even if the base variable is reallocated 
  10939.        within the invoked procedure. 
  10940.  
  10941.     3. When a reference is made to the defined variable, the order of 
  10942.        evaluation of the subscripts of the base and defined variable is 
  10943.        undefined. 
  10944.  
  10945.   If the defined variable has the BIT attribute, unpredictable results can 
  10946.   occur under the following conditions: 
  10947.  
  10948.     If the base variable is not on a byte boundary 
  10949.  
  10950.     If the defined variable is not defined on the first position of the base 
  10951.      variable and the defined variable is used as: 
  10952.  
  10953.       - A parameter in a subroutine call (that is, referenced as internally 
  10954.         stored data) 
  10955.  
  10956.       - An argument in a PUT statement 
  10957.  
  10958.       - An argument in a built-in function (library call) 
  10959.  
  10960.       - If the base variable is controlled, and the defined variable is 
  10961.         dimensioned and is declared with variable array bounds. 
  10962.  
  10963. Usage Rules 
  10964.  
  10965.     If the base variable is a data aggregate, a defined variable can comprise 
  10966.      all the data or only a specified part of it. 
  10967.  
  10968.     The defined variable does not inherit any attributes from the base 
  10969.      variable. The defined variable must be INTERNAL and a level-1 identifier. 
  10970.      It can have the dimension attribute. It cannot be INITIAL, AUTOMATIC, 
  10971.      BASED, CONTROLLED, STATIC, or a parameter. 
  10972.  
  10973.     In references to defined data, the STRINGRANGE, SUBSCRIPTRANGE, and 
  10974.      STRINGSIZE conditions are raised for the array bounds and string lengths 
  10975.      of the defined variable, not the base variable. 
  10976.  
  10977. Related Information 
  10978.  
  10979.     Simple defining 
  10980.     iSUB defining 
  10981.     String overlay defining 
  10982.     Unconnected storage 
  10983.     POSITION attribute 
  10984.  
  10985. Syntax 
  10986.  
  10987. ΓöÇΓöÇΓöÇDEFINEDΓöÇΓöÇΓö¼ΓöÇΓöÇreferenceΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10988.               ΓööΓöÇΓöÇ(ΓöÇΓöÇreferenceΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  10989.  
  10990. Abbreviations: DEF for DEFINED 
  10991.  
  10992.  
  10993. ΓòÉΓòÉΓòÉ <hidden> Unconnected Storage ΓòÉΓòÉΓòÉ
  10994.  
  10995. Description 
  10996.   The DEFINED attribute can overlay arrays.  This allows array expressions to 
  10997.   refer to array elements in unconnected storage (array elements that are not 
  10998.   adjacent in storage).  It is possible for an array expression involving 
  10999.   consecutive elements to refer to unconnected storage in the two following 
  11000.   cases: 
  11001.  
  11002.     Where an array is declared with iSUB defining.  An array expression that 
  11003.      refers to adjacent elements in an array declared with iSUB defining can be 
  11004.      a reference to unconnected storage (that is, a reference to elements of an 
  11005.      overlaid array that are not adjacent in storage). 
  11006.  
  11007.     Where a string array is defined on a string array that has elements of 
  11008.      greater length.  Consecutive elements in the defined array are separated 
  11009.      by the difference between the lengths of the elements of the base and 
  11010.      defined arrays, and are held in unconnected storage. 
  11011.  
  11012.   An array overlay defined on another array is always assumed to be in 
  11013.   unconnected storage. 
  11014.  
  11015. Related Information 
  11016.  
  11017.     CONNECTED attribute 
  11018.  
  11019.  
  11020. ΓòÉΓòÉΓòÉ <hidden> Simple Defining ΓòÉΓòÉΓòÉ
  11021.  
  11022. Description 
  11023.   Simple defining allows you to refer to an element, array, or structure 
  11024.   variable by another name. 
  11025.  
  11026.   The defined and the base variables can comprise any data type, but they must 
  11027.   match. The ALIGNED attribute and the UNALIGNED attribute must match for each 
  11028.   element in the defined variable and the corresponding element in the base 
  11029.   variable. 
  11030.  
  11031.   The defined variable can have the dimension attribute. 
  11032.  
  11033. Usage Rules 
  11034.  
  11035.   In simple defining of an array: 
  11036.  
  11037.     The base variable can be a cross-section of an array. 
  11038.  
  11039.     The number of dimensions specified for the defined variable must be equal 
  11040.      to the number of dimensions specified for the base variable. 
  11041.  
  11042.     The range specified by a bound pair of the defined array must equal or be 
  11043.      contained within the range specified by the corresponding bound pair of 
  11044.      the base array. 
  11045.  
  11046.   In simple defining of a string, the length of the defined string must be less 
  11047.   than or equal to the length of the base string. 
  11048.  
  11049.   In simple defining of an area, the size of the defined area must be equal to 
  11050.   the size of the base area. 
  11051.  
  11052.   A base variable can be, or can contain, a varying string, provided that the 
  11053.   corresponding part of the defined variable is a varying string of the same 
  11054.   maximum length. 
  11055.  
  11056. Examples 
  11057.  
  11058.     DCL A(10,10,10,10),
  11059.         X1(2,2,2) DEF A,
  11060.         X2(10,10) DEF A(*,*,5),
  11061.         X3 DEF A(L,M,N);
  11062.  
  11063.   X1 is a three-dimensional array that consists of the first two elements of 
  11064.   each row, column and plane of A.  X2 is a two-dimensional array that consists 
  11065.   of the fifth plane of A.  X3 is an element that consists of the element 
  11066.   identified by the subscript expressions L, M, and N. 
  11067.  
  11068.     DCL B CHAR(10),
  11069.         Y CHAR(5) DEF B;
  11070.  
  11071.   Y is a character string that consists of the first 5 characters of B. 
  11072.  
  11073.     DCL C AREA(500),
  11074.         Z AREA(500) DEF C;
  11075.  
  11076.   Z is an area defined on C. 
  11077.  
  11078.     DCL 1 D UNALIGNED,
  11079.              2 E,
  11080.              2 F,
  11081.                   3 G CHAR(10) VAR,
  11082.                   3 H,
  11083.         1 S UNALIGNED DEF D,
  11084.              2 T,
  11085.              2 U,
  11086.                   3 V CHAR(10) VAR,
  11087.                   3 W;
  11088.  
  11089.   S is a structure defined on D.  For simple defining, the organization of the 
  11090.   two structures must be identical.  A reference to T is a reference to E, V to 
  11091.   G, and so on. 
  11092.  
  11093.  
  11094. ΓòÉΓòÉΓòÉ <hidden> iSUB Defining ΓòÉΓòÉΓòÉ
  11095.  
  11096. Description 
  11097.   By defining an iSUB, you can create a defined array that consists of 
  11098.   designated elements from a base array.  The defined and base arrays can be 
  11099.   arrays of structures, can comprise any data types, and must have identical 
  11100.   attributes (not including the dimension attribute). 
  11101.  
  11102.   The defined variable must have the dimension attribute.  In the declaration 
  11103.   of the defined array, the base array must be subscripted.  The subscript 
  11104.   positions cannot be specified as asterisks. 
  11105.  
  11106.   An iSUB variable is a reference, in the subscript list for the base array to 
  11107.   the "ith" dimension of the defined array. At least one subscript in the 
  11108.   base-array subscript-list must be an iSUB expression which, on evaluation, 
  11109.   gives the required subscript in the base array.  The value of "i" ranges from 
  11110.   1 to n, where n is the number of dimensions in the defined array.  The number 
  11111.   of subscripts for the base array must be equal to the number of dimensions 
  11112.   for the base array. 
  11113.  
  11114.   If a reference to a defined array does not specify a subscript expression, 
  11115.   subscript evaluation occurs during the evaluation of the expression or 
  11116.   assignment in which the reference occurs. 
  11117.  
  11118.   The value of "i" is specified as an integer.  Within an iSUB expression, and 
  11119.   iSUB variable is treated as a REAL FIXED BINARY variable, with precision 
  11120.   (31,0). 
  11121.  
  11122.   A subscript in a reference to a defined variable is evaluated even if there 
  11123.   is no corresponding iSUB in the base-variable subscript list. 
  11124.  
  11125.   An iSUB-defined variable cannot appear in the explicit data-list of a 
  11126.   data-directed transmission statement. 
  11127.  
  11128. Examples 
  11129.  
  11130.     DCL A(10,10)
  11131.         X(10) DEFINED (A(1SUB, 1SUB));
  11132.  
  11133.   X is a one-dimensional array that consists of a diagonal of A. 
  11134.  
  11135.     DCL B(2,5)
  11136.         Y(10) DEFINED (A(ZSUB,1SUB));
  11137.  
  11138.   Y is a two-dimensional array that consists of the elements of B with the 
  11139.   bounds transposed. 
  11140.  
  11141.     DCL A(10,10) , B(5,5) DEF
  11142.         A(1+1SUB/5,1+2SUB/5);
  11143.  
  11144.   In this case, there is a many-to-one mapping of certain elements of B to a 
  11145.   single element of A.  B(I,J) is defined on: 
  11146.  
  11147.     A(1,1) for I<5 and J<5
  11148.     A(1,2) for I<5 and J=5
  11149.     A(2,1) for I=5 and J<5
  11150.     A(2,2) for I=5 and J=5
  11151.  
  11152.   Since all the elements B(I,J) are defined on the single element A(1,1) when 
  11153.   I<5 and J<5, assignment of a value to one of these elements causes the same 
  11154.   value to be assigned to all of them. 
  11155.  
  11156.  
  11157. ΓòÉΓòÉΓòÉ <hidden> String Overlay Defining ΓòÉΓòÉΓòÉ
  11158.  
  11159. Description 
  11160.   String overlay defining allows you to associate a defined variable with the 
  11161.   storage for a base variable.  Both the defined and the base variable must be 
  11162.   string or picture data. 
  11163.  
  11164.   Neither the defined nor the base variable can have the ALIGNED attribute or 
  11165.   the VARYING attribute. 
  11166.  
  11167.   Both the defined and the based variables must belong to: 
  11168.  
  11169.     The bit class, consisting of: 
  11170.  
  11171.       Fixed-length bit variables 
  11172.       Aggregates of fixed-length bit variables 
  11173.  
  11174.     The character class, consisting of: 
  11175.  
  11176.       Fixed-length character variables 
  11177.       Character pictured and numeric pictured variables 
  11178.       Aggregates of the two above 
  11179.  
  11180.     The graphic class, consisting of: 
  11181.  
  11182.       Fixed-length graphic variables 
  11183.       Aggregates of fixed-length graphic variables 
  11184.  
  11185. Examples 
  11186.  
  11187.     DCL A CHAR(100),
  11188.         V(10,10) CHAR(1) DEF A;
  11189.  
  11190.   V is a two-dimensional array that consists of all of the elements in the 
  11191.   character string A. 
  11192.  
  11193.     DCL B(10) CHAR(1),
  11194.         W CHAR(10) DEF B;
  11195.  
  11196.   W is a character string that consists of all of the elements in the array B. 
  11197.  
  11198.  
  11199. ΓòÉΓòÉΓòÉ <hidden> POSITION Attribute ΓòÉΓòÉΓòÉ
  11200.  
  11201. Description 
  11202.   The POSITION attribute, which can be used only with string-overlay defining, 
  11203.   specifies the bit, character, or graphic within the base variable at which 
  11204.   the defined variable is to begin. 
  11205.  
  11206.   When the defined variable is a bit class aggregate: 
  11207.  
  11208.     The POSITION attribute can contain only an integer. 
  11209.  
  11210.     The base variable must not be subscripted. 
  11211.  
  11212.   The base variable must refer to data in connected storage. 
  11213.  
  11214. Examples 
  11215.  
  11216.     DCL C(10,10) BIT (1),
  11217.         X BIT(40) DEF C POS(20);
  11218.  
  11219.   X is a bit string that consists of 40 elements of C, starting at the 20th 
  11220.   element. 
  11221.  
  11222.     DCL E PIC'99V.999',
  11223.         Z1(6) CHAR(1) DEF (E),
  11224.         Z2 CHAR(3) DEF (E) POS(4),
  11225.         Z3(4) CHAR(1) DEF (E) POS(2);
  11226.  
  11227.   Z1 is a character string array that consists of all the elements of the 
  11228.   decimal numeric picture E.  Z2 is a character string that consists of the 
  11229.   elements '999' of the picture E.  Z3 is a character string array that 
  11230.   consists of the elements '9.99' of the picture E. 
  11231.  
  11232.     DCL A(20) CHAR(10),
  11233.         B(10) CHAR(5) DEF (A) POSITION(1);
  11234.  
  11235.   The first 50 characters of B consist of the first 50 characters of A. 
  11236.   POSITION(1) must be explicitly specified.  Otherwise, simple defining is used 
  11237.   and gives different results. 
  11238.  
  11239. Related Information 
  11240.  
  11241.     Unconnected storage 
  11242.  
  11243.     Simple defining 
  11244.  
  11245.     iSUB defining 
  11246.  
  11247.     String overlay defining 
  11248.  
  11249.   Syntax 
  11250.  
  11251.     ΓöÇΓöÇΓöÇPOSITIONΓöÇΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11252.  
  11253.  
  11254. ΓòÉΓòÉΓòÉ <hidden> INITIAL Attribute ΓòÉΓòÉΓòÉ
  11255.  
  11256. Description 
  11257.   The INITIAL attribute specifies an initial value or values assigned to a 
  11258.   variable at the time storage is allocated for it. Only one initial value can 
  11259.   be specified for an element variable; more than one can be specified for an 
  11260.   array variable. A structure variable can be initialized only by separate 
  11261.   initialization of its elementary names, whether they are element or array 
  11262.   variables. 
  11263.  
  11264.   The INITIAL attribute has two forms.  The first specifies an initial 
  11265.   constant, expression, or function reference, whose value is assigned to a 
  11266.   variable when storage is allocated to it. The second form specifies that, 
  11267.   through the CALL option, a procedure is invoked to perform initialization at 
  11268.   allocation. The variable is initialized by assignment during the execution of 
  11269.   the called routine (rather than by this routine being invoked as a function 
  11270.   that returns a value to the point of invocation). 
  11271.  
  11272.   Initial values specified for an array are assigned to successive elements of 
  11273.   the array in row-major order (final subscript varying most rapidly). If too 
  11274.   many initial values are specified, the excess values are ignored; if not 
  11275.   enough are specified, the remainder of the array is not initialized. 
  11276.  
  11277.   If the attributes of an item in the INITIAL attribute differ from those of 
  11278.   the data item itself, conversion is performed, provided the attributes are 
  11279.   compatible. 
  11280.  
  11281. Examples 
  11282.   INITIAL attribute examples 
  11283.  
  11284. Usage Rules 
  11285.   Using the INITIAL attribute 
  11286.  
  11287. Related Information 
  11288.  
  11289.     INITIAL on STATIC variables 
  11290.     INITIAL on AUTOMATIC variables 
  11291.  
  11292. Syntax 
  11293.  
  11294.                  ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11295.                             Γöé
  11296. ΓöÇΓöÇΓöÇΓöÇINITIALΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöñitem Γö£ΓöÇΓöÇΓö┤ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11297.  
  11298. where item is:
  11299. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11300.       Γö£Γöñ initialΓöÇconstant Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11301.       Γö£ΓöÇΓöÇreferenceΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11302.       Γö£ΓöÇΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11303.       ΓööΓöñ iterationΓöÇspecification Γö£Γöÿ
  11304.  
  11305. where iterationΓöÇspecification is:
  11306. ΓöÇΓöÇΓöÇΓöÇ(iterationΓöÇfactor)ΓöÇΓöÇΓöÇΓöñ iterationΓöÇitem Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11307.  
  11308. where iterationΓöÇitem is:
  11309. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11310.       Γö£Γöñ initialΓöÇconstant Γö£ΓöÇΓöÇΓöñ
  11311.       Γö£ΓöÇΓöÇreferenceΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11312.       Γöé   ΓöîΓöÇ,ΓöÇΓöÇΓöÉ             Γöé
  11313.       Γöé       Γöé             Γöé
  11314.       ΓööΓöÇ(ΓöÇΓöÇitemΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11315.  
  11316. where initial-constant is:
  11317. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇarithmeticΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  11318.       Γöé  Γö£ΓöÇ + ΓöÇΓöñ                                              Γöé
  11319.       Γöé  ΓööΓöÇ - ΓöÇΓöÿ                                              Γöé
  11320.       Γö£ΓöÇΓöÇbitΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11321.       Γö£ΓöÇΓöÇcharacterΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11322.       Γö£ΓöÇΓöÇgraphicΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11323.       Γö£ΓöÇΓöÇentryΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11324.       Γö£ΓöÇΓöÇfileΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11325.       Γö£ΓöÇΓöÇlabelΓöÇconstantΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11326.       ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇrealΓöÇconstantΓöÇΓöÇΓö¼ΓöÇ + ΓöÇΓö¼ΓöÇΓöÇimaginaryΓöÇconstantΓöÇΓöÇΓöÿ
  11327.          Γö£ΓöÇ + ΓöÇΓöñ                 ΓööΓöÇ - ΓöÇΓöÿ
  11328.          ΓööΓöÇ - ΓöÇΓöÿ
  11329.  
  11330. OR
  11331.  
  11332. ΓöÇΓöÇΓöÇINITIAL CALLΓöÇΓöÇentry-referenceΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11333.                                     Γöé   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  11334.                                     Γöé             Γöé   Γöé
  11335.                                     ΓööΓöÇ(ΓöÇΓöÇΓöÇargumentΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ
  11336.  
  11337. Abbreviation: INIT 
  11338.  
  11339.  
  11340. ΓòÉΓòÉΓòÉ <hidden> Usage Rules- INITIAL Attribute ΓòÉΓòÉΓòÉ
  11341.  
  11342. Consider the following when using the INITIAL attribute: 
  11343.  
  11344.  The INITIAL attribute cannot be given for constants, defined data, parameters 
  11345.   (except controlled parameters), or static entry variables. 
  11346.  
  11347.  The initialization of an array of strings can include both string repetition 
  11348.   and iteration factors. Where only one of these is given, it is taken to be a 
  11349.   string repetition factor unless the string constant is placed in parentheses. 
  11350.  
  11351.   In the following examples: 
  11352.  
  11353.     ((2)'A')     is equivalent to ('AA')
  11354.  
  11355.     ((2)('A'))   is equivalent to ('A','A')
  11356.  
  11357.     ((2)(1)'A')  is equivalent to ('A','A')
  11358.  
  11359.  An area variable is initialized with the value of the EMPTY built-in 
  11360.   function, on allocation, after which any specified INITIAL is applied. An 
  11361.   area can be initialized by assignment of another area, using the INITIAL 
  11362.   attribute with or without the CALL option. 
  11363.  
  11364.  If the variable has the REFER option and the item involves a base element or 
  11365.   a substructure of the current generation of the variable, the result of the 
  11366.   INITIAL attribute is undefined. 
  11367.  
  11368.   Therefore, in the following: 
  11369.  
  11370.     DCL 1 A,
  11371.           2 B,
  11372.           2 C CHAR(N REFER(B))
  11373.                   INIT('AAB'),
  11374.           2 D CHAR(5) INIT(C);
  11375.     ALLOCATE A;
  11376.  
  11377.   the result of initializing D is undefined. 
  11378.  
  11379.   Note:   If both the REFER option and the INITIAL attribute are used for the 
  11380.           same member, initialization is done after the object of the REFER has 
  11381.           been assigned its value. 
  11382.  
  11383.  
  11384. ΓòÉΓòÉΓòÉ <hidden> INITIAL on STATIC Variables ΓòÉΓòÉΓòÉ
  11385.  
  11386. Description 
  11387.   For a variable that is allocated when the program is loaded, that is, a 
  11388.   static variable, which remains allocated throughout execution of the program, 
  11389.   any value specified in an INITIAL attribute is assigned only once.  However, 
  11390.   static storage for fetched procedures is allocated and initialized each time 
  11391.   the procedure is loaded. 
  11392.  
  11393.   If static variables are initialized using the INITIAL attribute, the initial 
  11394.   values must be specified as constants (arithmetic constants can be optionally 
  11395.   signed) with the exception of locator variables. Any specification of 
  11396.   lengths, sizes, or bounds must be integers. 
  11397.  
  11398.   A STATIC pointer or offset variable can be initialized only by using the NULL 
  11399.   built-in function or SYSNULL built-in function. 
  11400.  
  11401. Usage Restrictions 
  11402.  
  11403.     Static label variables cannot have the INTIAL attribute except when using 
  11404.      the compiler to compile procedures containing STATIC LABEL arrays. In this 
  11405.      case, improved performance can be obtained by specifying the INITIAL 
  11406.      attribute. 
  11407.  
  11408.     If a STATIC EXTERNAL item is given the INITIAL attribute in more than one 
  11409.      declaration, the value specified must be the same in every case. 
  11410.  
  11411.  
  11412. ΓòÉΓòÉΓòÉ <hidden> INITIAL Attribute Examples ΓòÉΓòÉΓòÉ
  11413.  
  11414. Description 
  11415.   For based and controlled variables, which are allocated at the execution of 
  11416.   ALLOCATE statement (also LOCATE statements for based variables), any 
  11417.   specified initial value is assigned with each allocation.  However, this 
  11418.   initialization of controlled variables can be overridden in the ALLOCATE 
  11419.   statement. 
  11420.  
  11421. Examples 
  11422.  
  11423.     In the following example, when storage is allocated for NAME, the 
  11424.      character constant 'JOHN DOE' (padded on the right to 10 characters) is 
  11425.      assigned to it: 
  11426.  
  11427.           DCL NAME CHAR(10) INIT('JOHN DOE');
  11428.  
  11429.     In the following example, when PI is allocated, it is initialized to the 
  11430.      value 3.1416: 
  11431.  
  11432.           DCL PI FIXED DEC(5,4) INIT(3.1416);
  11433.  
  11434.     The following example specifies that A is to be initialized with the value 
  11435.      of the expression B*C: 
  11436.  
  11437.           DECLARE A INIT((B*C));
  11438.  
  11439.     The following example results in each of the first 920 elements of A being 
  11440.      set to 0; the next 80 elements consist of 20 repetitions of the sequence 
  11441.      5,5,5,9: 
  11442.  
  11443.           DECLARE A (100,10) INITIAL
  11444.                   ((920)0, (20) ((3)5,9));
  11445.  
  11446.     In the following example, only the first, third, and fourth elements of A 
  11447.      are initialized; the rest of the array is uninitialized. The array B is 
  11448.      fully initialized, with the first 25 elements initialized to 0, the next 
  11449.      25 to 1, and the last 50 to 0. In the structure C, where the dimension (8) 
  11450.      has been inherited by D and E, only the first element of D is initialized; 
  11451.      all the elements of E are initialized. 
  11452.  
  11453.           DECLARE A(15) CHARACTER(13) INITIAL
  11454.                     ('JOHN DOE',
  11455.                      *,
  11456.                      'RICHARD ROW',
  11457.                      'MARY SMITH'),
  11458.  
  11459.                   B (10,10) DECIMAL FIXED(5)
  11460.                     INIT((25)0,(25)1,(50)0),
  11461.  
  11462.                   1 C(8),
  11463.                     2 D INITIAL (0),
  11464.                     2 E INITIAL((8)0);
  11465.  
  11466.     When an array of structures is declared with the LIKE attribute to obtain 
  11467.      the same structuring as a structure whose elements have been initialized, 
  11468.      only the first structure is initialized. In the following example: 
  11469.  
  11470.           DECLARE 1 G,
  11471.                     2 H INITIAL(0),
  11472.                     2 I INITIAL(0),
  11473.                   1 J(8) LIKE G;
  11474.  
  11475.      Only J(1).H and J(1).I are initialized in the array of structures. 
  11476.  
  11477.  
  11478. ΓòÉΓòÉΓòÉ <hidden> VARIABLE Attribute ΓòÉΓòÉΓòÉ
  11479.  
  11480. Description 
  11481.   The VARIABLE attribute can be specified only with the ENTRY or the FILE 
  11482.   attributes. It establishes the name as an entry-variable or as a 
  11483.   file-variable. The VARIABLE attribute is implied if the name is an element of 
  11484.   an array or structure, or if any of the following attributes are specified: 
  11485.  
  11486.     ALIGNED/UNALIGNED attribute 
  11487.     DEFINED attribute 
  11488.     INITIAL attribute 
  11489.     Parameter attribute 
  11490.     Storage class attribute 
  11491.  
  11492. Syntax 
  11493.  
  11494. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇVARIABLEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11495.  
  11496.  
  11497. ΓòÉΓòÉΓòÉ 1.6. PL/I Built-In Functions, Subroutines, and Pseudovariables ΓòÉΓòÉΓòÉ
  11498.  
  11499. Description 
  11500.   Built-ins are frequently used for tedious programming tasks that are part of 
  11501.   the PL/I language library. Using them lets you write less code more quickly 
  11502.   with less errors. 
  11503.  
  11504.   The built-in functions, subroutines, and pseudovariables are listed in 
  11505.   alphabetic order under their appropriate classes in the help (see "Classes of 
  11506.   Built-Ins" below). 
  11507.  
  11508. Abbreviations 
  11509.  
  11510.     The abbreviations for built-in functions and pseudovariables have separate 
  11511.      declarations (explicit or contextual) and name scopes. 
  11512.  
  11513.     Example- using built-in abbreviations 
  11514.  
  11515. Individual Built-In Descriptions 
  11516.   In general, each built-in description has the following: 
  11517.  
  11518.     A description of the value returned, or for a pseudovariable, the value 
  11519.      set 
  11520.  
  11521.     A description of any arguments 
  11522.  
  11523.     The syntax of the reference (the leading keyword CALL and trailing 
  11524.      semicolon are omitted in the case of subroutines) 
  11525.  
  11526.     Any other qualifications on the use of the built-in. 
  11527.  
  11528.   Arguments, which can be expressions, are evaluated and converted to a data 
  11529.   type suitable for the built-in subroutine according to the rules for data 
  11530.   conversion. 
  11531.  
  11532. Classes of Built-Ins 
  11533.   To aid in their description, built-ins are grouped into the following 
  11534.   classes. Select a class for a list of the individual built-ins in that class: 
  11535.  
  11536.     Arithmetic 
  11537.     Array-handling 
  11538.     Condition-handling 
  11539.     Event 
  11540.     Input/Output 
  11541.     Mathematical 
  11542.     Miscellaneous 
  11543.     Preprocessor 
  11544.     Storage control 
  11545.     String-handling 
  11546.     Built-In pseudovariables 
  11547.     Built-In subroutines 
  11548.  
  11549. Examples 
  11550.   Declaring built-in names 
  11551.  
  11552. Related Information 
  11553.   Arguments for built-ins 
  11554.  
  11555. Syntax 
  11556.   The syntax for invoking a built-in function or pseudovariable reference is: 
  11557.  
  11558.     ΓöÇΓöÇΓöÇΓöÇnameΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11559.                 ΓööΓöÇ(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  11560.                     ΓöéΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11561.                     Γöé               Γöé
  11562.                     ΓööΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓöÇΓöÇΓöÿ
  11563.  
  11564.   The syntax for calling a built-in subroutine is: 
  11565.  
  11566.     ΓöÇΓöÇΓöÇCALLΓöÇΓöÇΓöÇnameΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  11567.                        ΓööΓöÇ(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  11568.                            Γöé ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11569.                            Γöé              Γöé
  11570.                            ΓööΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓöÇΓöÇΓöÿ
  11571.  
  11572.   The syntax for declaring a built-in name is: 
  11573.  
  11574.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇDECLAREΓöÇΓö¼ΓöÇΓöÇΓöÇnameΓöÇΓöÇΓöÇBUILTINΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  11575.            ΓööΓöÇDCLΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11576.  
  11577.   Specific syntax is provided in the description for each built-in. 
  11578.  
  11579.  
  11580. ΓòÉΓòÉΓòÉ <hidden> Arithmetic Built-In Functions ΓòÉΓòÉΓòÉ
  11581.  
  11582. The arithmetic built-in functions allow you to: 
  11583.  
  11584.  Control conversion of base, scale, mode, and precision both directly and 
  11585.   during basic arithmetic operations. 
  11586.  
  11587.  Determine properties of arithmetic values. For example, the SIGN built-in 
  11588.   function indicates the sign of an arithmetic value. 
  11589.  
  11590. Some of these functions derive the data type of their results from one or more 
  11591. arguments. When the data types of the arguments differ, they are converted. 
  11592. When a data attribute of the result cannot agree with that of the argument (for 
  11593. example, the FLOOR built-in function), the rules are given in the individual 
  11594. function descriptions which you can select below. 
  11595.  
  11596. The arithmetic built-in functions are: 
  11597.  
  11598.  ABS 
  11599.  ADD 
  11600.  BINARY 
  11601.  CEIL 
  11602.  COMPLEX 
  11603.  CONJG 
  11604.  DECIMAL 
  11605.  DIVIDE 
  11606.  FIXED 
  11607.  FLOAT 
  11608.  FLOOR 
  11609.  IMAG 
  11610.  MAX 
  11611.  MIN 
  11612.  MOD 
  11613.  MULTIPLY 
  11614.  PRECISION 
  11615.  REAL 
  11616.  ROUND 
  11617.  SIGN 
  11618.  TRUNC 
  11619.  
  11620.  
  11621. ΓòÉΓòÉΓòÉ <hidden> Array-Handling Built-In Functions ΓòÉΓòÉΓòÉ
  11622.  
  11623. The array-handling built-in functions operate on array arguments and return an 
  11624. element value. Any conversion of arguments required for these functions is 
  11625. noted in the individual function descriptions which you can select below. 
  11626.  
  11627. The array-handling built-in functions are: 
  11628.  
  11629.  ALL 
  11630.  ANY 
  11631.  DIM 
  11632.  HBOUND 
  11633.  LBOUND 
  11634.  POLY 
  11635.  PROD 
  11636.  SUM 
  11637.  
  11638.  
  11639. ΓòÉΓòÉΓòÉ <hidden> Condition-Handling Built-In Functions ΓòÉΓòÉΓòÉ
  11640.  
  11641. The condition-handling built-in functions allow you to investigate the causes 
  11642. of enabled conditions. 
  11643.  
  11644. Use of these functions is "in context" when within the scope of an ON-unit 
  11645. entered for the condition specific to the built-in function, or within an 
  11646. ON-unit for the ERROR or FINISH condition when raised as an implicit action. 
  11647. All other uses are "out of context". 
  11648.  
  11649. The condition-handling built-in functions are: 
  11650.  
  11651.  DATAFIELD 
  11652.  ONCHAR 
  11653.  ONCODE 
  11654.  ONCOUNT 
  11655.  ONFILE 
  11656.  ONKEY 
  11657.  ONLOC 
  11658.  ONSOURCE 
  11659.  
  11660.  
  11661. ΓòÉΓòÉΓòÉ <hidden> Event Built-In Functions ΓòÉΓòÉΓòÉ
  11662.  
  11663. The event built-in functions allow you to determine the current state of an 
  11664. event.  They are: 
  11665.  
  11666.  COMPLETION 
  11667.  STATUS 
  11668.  
  11669.  
  11670. ΓòÉΓòÉΓòÉ <hidden> Input/Output Built-In Functions ΓòÉΓòÉΓòÉ
  11671.  
  11672. The input/output built-in functions allow you to determine the current state of 
  11673. a file. They are: 
  11674.  
  11675.  COUNT 
  11676.  LINENO 
  11677.  SAMEKEY 
  11678.  
  11679.  
  11680. ΓòÉΓòÉΓòÉ <hidden> Mathematical Built-In Functions ΓòÉΓòÉΓòÉ
  11681.  
  11682. Description 
  11683.   The mathematical built-in functions provide the capability for a wide variety 
  11684.   of mathematical operations. All of these functions operate on floating-point 
  11685.   values to produce a floating-point result. Any argument that is not 
  11686.   floating-point is converted. 
  11687.  
  11688. Accuracy of Results 
  11689.   The accuracy of a result is influenced by two factors: 
  11690.  
  11691.     1. The accuracy of the argument- most arguments contain errors 
  11692.  
  11693.     2. The accuracy of the algorithm used in the operation 
  11694.  
  11695.   An error in a given argument might have accumulated over several steps prior 
  11696.   to the evaluation of a function. Even data fresh from input conversion can 
  11697.   contain slight errors. The effect of argument error on the accuracy of a 
  11698.   result depends solely on the nature of the mathematical function and not on 
  11699.   the algorithm that computes the result. 
  11700.  
  11701. Available Functions 
  11702.  
  11703.    ACOS           LOG 
  11704.  
  11705.    ASIN           LOG2 
  11706.  
  11707.    ATAN           LOG10 
  11708.  
  11709.    ATAND          SIN 
  11710.  
  11711.    ATANH          SIND 
  11712.  
  11713.    COS            SINH 
  11714.  
  11715.    COSD           SQRT 
  11716.  
  11717.    COSH           TAN 
  11718.  
  11719.    ERF            TAND 
  11720.  
  11721.    ERFC           TANH 
  11722.  
  11723.    EXP 
  11724.  
  11725.  
  11726. ΓòÉΓòÉΓòÉ <hidden> Miscellaneous Built-In Functions ΓòÉΓòÉΓòÉ
  11727.  
  11728. The miscellaneous built-in functions do not fit into any of the classes of 
  11729. built-ins. They are: 
  11730.  
  11731.  DATE 
  11732.  DATETIME 
  11733.  PLIRETV 
  11734.  TIME 
  11735.  
  11736.  
  11737. ΓòÉΓòÉΓòÉ <hidden> Preprocessor Built-In Functions ΓòÉΓòÉΓòÉ
  11738.  
  11739. A functions reference can invoke one of a set of predefined functions called 
  11740. "preprocessor built-in functions".  These built-in functions are invoked in the 
  11741. same way that programmer-defined functions are invoked, except that they must 
  11742. be invoked with the correct number of arguments.  They are: 
  11743.  
  11744.  COMPILETIME 
  11745.  COUNTER 
  11746.  INDEX 
  11747.  LENGTH 
  11748.  PARMSET 
  11749.  SUBSTR 
  11750.  
  11751. The preprocessor executes a reference to a preprocessor built-in function in 
  11752. input text only if the built-in function name is active.  The built-in 
  11753. functions can be activated by a %DECLARE statement or a %ACTIVATE statement. 
  11754.  
  11755. In preprocessor statement, the preprocessor built-in function names are always 
  11756. active as built-in functions unless they are declared with some other meaning. 
  11757.  
  11758. If a preprocessor built-in function name is used as the name of a user-defined 
  11759. preprocessor procedure, references to the name are references to the procedure, 
  11760. not to the built-in function.  In such cases, the identifiers must be declared 
  11761. with the BUILTIN attribute when the built-in function is to be used within a 
  11762. preprocessor procedure. 
  11763.  
  11764. The preprocessor built-in functions COUNTER and COMPILETIME do not require 
  11765. arguments and must not be given a null argument list. 
  11766.  
  11767.  
  11768. ΓòÉΓòÉΓòÉ <hidden> String-Handling Built-In Functions ΓòÉΓòÉΓòÉ
  11769.  
  11770. The string-handling built-in functions simplify the processing of bit, 
  11771. character, and DBCS strings. 
  11772.  
  11773. The character-string and bit-string arguments can be represented by an 
  11774. arithmetic expression that will be converted to string either according to data 
  11775. conversion rules or according to the rules given in the individual function 
  11776. descriptions. 
  11777.  
  11778. The string-handling built-in functions are: 
  11779.  
  11780.  BIT 
  11781.  BOOL 
  11782.  CHAR 
  11783.  GRAPHIC 
  11784.  HIGH 
  11785.  INDEX 
  11786.  LENGTH 
  11787.  LOW 
  11788.  MPSTR 
  11789.  REPEAT 
  11790.  STRING 
  11791.  SUBSTR 
  11792.  TRANSLATE 
  11793.  UNSPEC 
  11794.  VERIFY 
  11795.  
  11796. Note:   The functions REPEAT, TRANSLATE, and VERIFY do not support GRAPHIC 
  11797. data. 
  11798.  
  11799.  
  11800. ΓòÉΓòÉΓòÉ <hidden> Storage Control Built-In Functions ΓòÉΓòÉΓòÉ
  11801.  
  11802. The storage control built-in functions allow you to: 
  11803.  
  11804.  determine the storage requirements and location of variables 
  11805.  
  11806.  to assign special values to area and locator variables 
  11807.  
  11808.  to perform conversion between offset and pointer values 
  11809.  
  11810.  to obtain the number of generations of a controlled variable. 
  11811.  
  11812. The storage control built-in functions are: 
  11813.  
  11814.  ADDR 
  11815.  ALLOCATION 
  11816.  BINARYVALUE 
  11817.  CURRENTSTORAGE 
  11818.  EMPTY 
  11819.  ENTRYADDR 
  11820.  NULL 
  11821.  OFFSET 
  11822.  POINTER 
  11823.  POINTERADD 
  11824.  POINTERVALUE 
  11825.  STORAGE 
  11826.  SYSNULL 
  11827.  
  11828.  
  11829. ΓòÉΓòÉΓòÉ <hidden> Built-In Subroutines ΓòÉΓòÉΓòÉ
  11830.  
  11831. Built-in subroutines have entry names that are defined at compile time and are 
  11832. invoked by a CALL statement. The entry names are known as 'built-in names' and 
  11833. can be explicitly or contextually declared to have the BUILTIN attribute. 
  11834.  
  11835. You can use built-in subroutines to provide ready-made programming tasks. Their 
  11836. built-in names can be explicitly declared with the BUILTIN attribute. 
  11837.  
  11838. The PL/I built-in subroutines are the following: 
  11839.  
  11840.  PLICANC 
  11841.  PLICKPT 
  11842.  PLIDUMP 
  11843.  PLIREST 
  11844.  PLIRETC 
  11845.  PLISRTA 
  11846.  PLISRTB 
  11847.  PLISRTC 
  11848.  PLISRTD 
  11849.  PLITEST 
  11850.  
  11851. Syntax 
  11852.  
  11853. ΓöÇΓöÇΓöÇΓöÇCALL-nameΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  11854.                  ΓööΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  11855.                        Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  11856.                        Γöé              Γöé  Γöé
  11857.                        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  11858.  
  11859.  
  11860. ΓòÉΓòÉΓòÉ <hidden> Built-In Pseudovariables ΓòÉΓòÉΓòÉ
  11861.  
  11862. Description 
  11863.   Pseudovariables represent receiving fields. Except when noted in the 
  11864.   description, the pseudovariable: 
  11865.  
  11866.     Can appear on the left of the assignment symbol in an assignment or a 
  11867.      do-specification 
  11868.  
  11869.     Can appear in a data list of a GET statement or in the STRING option of a 
  11870.      PUT statement 
  11871.  
  11872.     Can appear as the string name in a KEYTO or REPLY option. Pseudovariables 
  11873.   cannot be nested. 
  11874.  
  11875. Example 
  11876.   Because pseudovariables cannot be nested, the following is invalid: 
  11877.  
  11878.     UNSPEC(SUBSTR(A,1,2)) = '00'B;
  11879.  
  11880. Pseudovariables Available 
  11881.  
  11882.     COMPLEX 
  11883.     COMPLETION 
  11884.     ENTRYADDR 
  11885.     IMAG 
  11886.     ONCHAR 
  11887.     ONSOURCE 
  11888.     REAL 
  11889.     STATUS 
  11890.     STRING 
  11891.     SUBSTR 
  11892.     UNSPEC 
  11893.  
  11894.  
  11895. ΓòÉΓòÉΓòÉ <hidden> Examples- Declaring Built-In Names ΓòÉΓòÉΓòÉ
  11896.  
  11897. Consider the following declarations of built-in names. Descriptions follow the 
  11898. examples. 
  11899.  
  11900.  EXAMPLE 1 
  11901.  
  11902.     1   A: PROCEDURE;
  11903.              DECLARE SQRT FLOAT BINARY;
  11904.     2        X = SQRT;
  11905.  
  11906.     3     B:  BEGIN;
  11907.                 DECLARE SQRT BUILTIN;
  11908.                 Z = SQRT(P);
  11909.               END B;
  11910.  
  11911.            END A;
  11912.  
  11913.  EXAMPLE 2 
  11914.  
  11915.         A:  PROCEDURE;
  11916.     1   SQRT: PROC(PARAM) RETURNS(FIXED(6,2));
  11917.               DECLARE PARAM FIXED (12);
  11918.               END SQRT;
  11919.  
  11920.     2       X = SQRT(Y);
  11921.  
  11922.     3       B:  BEGIN;
  11923.                  DECLARE SQRT BUILTIN;
  11924.                  Z = SQRT (P);
  11925.                  END B;
  11926.  
  11927.         END A;
  11928.  
  11929. The following descriptions apply to both of the above examples: 
  11930.  
  11931. 1    SQRT is a programmer-defined name. 
  11932.  
  11933. 2    The assignment to the variable X is a reference to the programmer-defined 
  11934.      name SQRT. 
  11935.  
  11936. 3    SQRT is declared with the BUILTIN attribute so that any reference to SQRT 
  11937.      within B is recognized as a reference to the built-in function and not to 
  11938.      the programmer-defined name SQRT declared in 1. 
  11939.  
  11940. In Example 2, if the procedure SQRT were an external procedure, procedure A 
  11941. would need to declare SQRT explicitly as an entry name, and to specify the 
  11942. attributes of the values passed to and returned from this programmer-written 
  11943. function procedure. The declaration for Example 2 would be: 
  11944.  
  11945. DCL SQRT ENTRY (FIXED (12))
  11946.          RETURNS (FIXED(6,2));
  11947.  
  11948.  
  11949. ΓòÉΓòÉΓòÉ <hidden> Arguments for Built-Ins ΓòÉΓòÉΓòÉ
  11950.  
  11951. Description 
  11952.   Arguments, which can be expressions, are evaluated and converted to a data 
  11953.   type suitable for the built-in function or pseudovariable according to the 
  11954.   rules for data conversion. 
  11955.  
  11956. Null and Optional Arguments 
  11957.   Some built-in functions and pseudovariables do not require arguments. You 
  11958.   must either explicitly declare these with the BUILTIN attribute or 
  11959.   contextually declare them by including a null argument list in the reference- 
  11960.   for example, ONCHAR(). Otherwise, the name cannot be recognized by the 
  11961.   compiler as a built-in function or pseudovariable name. 
  11962.  
  11963.   The built-in functions or pseudovariables that have no arguments or have a 
  11964.   single optional argument are: 
  11965.  
  11966.     DATAFIELD      ONCODE        ONSOURCE
  11967.     DATE           ONCOUNT       PLIRETV
  11968.     DATETIME       ONFILE        STATUS
  11969.     EMPTY          ONKEY         SYSYNULL
  11970.     NULL           ONLOC         TIME
  11971.     ONCHAR
  11972.  
  11973. Aggregate Arguments 
  11974.   All built-in functions and pseudovariables that can have arguments can have 
  11975.   array arguments (if more than one is an array, the bounds must be identical). 
  11976.   ADDR, ALLOCATION, CURRENTSTORAGE, STORAGE, STRING, and the array-handling 
  11977.   functions return an element value. All other functions return an array of 
  11978.   values. Specifying an array argument is equivalent to placing the function 
  11979.   reference or pseudovariable in a do-group where one or more arguments is a 
  11980.   subscripted array reference that is modified by the control variable. 
  11981.  
  11982.   The built-in functions and pseudovariables that can accept structure 
  11983.   arguments are: 
  11984.  
  11985.     ADDR               STORAGE
  11986.     ALLOCATION         STRING
  11987.     CURRENTSTORAGE
  11988.  
  11989. Example 
  11990.   Specifying aggregate arguments 
  11991.  
  11992.  
  11993. ΓòÉΓòÉΓòÉ <hidden> COMPLETION Event Built-In Function ΓòÉΓòÉΓòÉ
  11994.  
  11995. COMPLETION returns a bit string of length 1, specifying the completion value of 
  11996. x; the event can be active or inactive. If the completion value of event is 
  11997. incomplete, '0'B is returned; if complete, '1'B is returned. 
  11998.  
  11999. Abbreviation:  CPLN 
  12000.  
  12001. Syntax 
  12002.  
  12003. ΓöÇΓöÇΓöÇCOMPLETION(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12004.  
  12005.    is an event reference. 
  12006.  
  12007.  
  12008. ΓòÉΓòÉΓòÉ <hidden> STATUS Event Built-In Function ΓòÉΓòÉΓòÉ
  12009.  
  12010. STATUS returns a FIXED BINARY (15,0) value specifying the status value of an 
  12011. event-reference x.  If the event-variable is normal, zero is returned; if 
  12012. abnormal, nonzero is returned. 
  12013.  
  12014. Syntax 
  12015.  
  12016. ΓöÇΓöÇΓöÇSTATUS(x)ΓöÇΓöÇΓöÇΓöÇ
  12017.  
  12018.    is an event-reference. 
  12019.  
  12020.  
  12021. ΓòÉΓòÉΓòÉ <hidden> COMPILETIME Preprocessor Built-In Function ΓòÉΓòÉΓòÉ
  12022.  
  12023. COMPILETIME returns a character string, length 18, in the format of 
  12024. DDbMMMbYYmHH.MM.SS.  The character string contains the date and the time of the 
  12025. compilation. 
  12026.  
  12027. Syntax 
  12028.  
  12029. ΓöÇΓöÇΓöÇCOMPILETIMEΓöÇΓöÇΓöÇΓöÇ
  12030.  
  12031. The returned character string represents: 
  12032.  
  12033. b       blank 
  12034.  
  12035. DD      day of the month 
  12036.  
  12037. MMM     month in the form JAN, FEB, MAR, etc. 
  12038.  
  12039. YY      year 
  12040.  
  12041. HH      hour 
  12042.  
  12043. MM      minute 
  12044.  
  12045. SS      second 
  12046.  
  12047. A leading zero in the day of the month field is replaced by a blank; no other 
  12048. leading zeros are suppressed. 
  12049.  
  12050. If not timing facility is available, the last 8 characters of the returned 
  12051. string are set to 00.00.00. 
  12052.  
  12053. The following example shows how to print the string returned by COMPILETIME 
  12054. when your program is executed: 
  12055.  
  12056. %DECLARE COMP_TIME CHAR;
  12057. %COMP_TIME=''''||COMPLIETIME||'''';
  12058. PUT EDIT (COMP_TIME) (A);
  12059.  
  12060.  
  12061. ΓòÉΓòÉΓòÉ <hidden> COUNTER Preprocessor Built-In Function ΓòÉΓòÉΓòÉ
  12062.  
  12063. COUNTER returns a character string, length 5, containing a decimal number.  The 
  12064. returned number is 00001 for the first invocation, and is incremented by one on 
  12065. each successive invocation. 
  12066.  
  12067. If COUNTER is invoked more than 99999 times, a diagnostic message is issued and 
  12068. 00000 is returned.  The next invocation is treated as the first. 
  12069.  
  12070. The COUNTER built-in function can be used to generate unique names, or for 
  12071. counting purposes. 
  12072.  
  12073. Syntax 
  12074.  
  12075. ΓöÇΓöÇΓöÇΓöÇCOUNTERΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12076.  
  12077.  
  12078. ΓòÉΓòÉΓòÉ <hidden> INDEX Preprocessor Built-In Function ΓòÉΓòÉΓòÉ
  12079.  
  12080. INDEX returns a FIXED value indicating the starting position within the 
  12081. character expression x of a substring identical to character expression y. 
  12082.  
  12083. Syntax 
  12084.  
  12085. ΓöÇΓöÇΓöÇINDEXΓöÇ(x,y)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12086.  
  12087. x     character expression to be searched for 
  12088.  
  12089. y     character expression to be searched for 
  12090.  
  12091. If y does not occur in x, of if either string is null, the value 0 is returned. 
  12092.  
  12093. If y occurs more than once in x, the starting position of the leftmost 
  12094. occurrence is returned. 
  12095.  
  12096. The arguments of INDEX are converted to character, if necessary. 
  12097.  
  12098.  
  12099. ΓòÉΓòÉΓòÉ <hidden> LENGTH Preprocessor Built-In Function ΓòÉΓòÉΓòÉ
  12100.  
  12101. LENGTH returns a FIXED value specifying the current length of a given character 
  12102. expression x. 
  12103.  
  12104. Syntax 
  12105.  
  12106. ΓöÇΓöÇΓöÇLENGTH(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12107.  
  12108.    character expression; x is converted to character, if necessary. 
  12109.  
  12110.  
  12111. ΓòÉΓòÉΓòÉ <hidden> PARMSET Preprocessor Built-In Function ΓòÉΓòÉΓòÉ
  12112.  
  12113. The PARMSET built-in function can be used only within a preprocessor procedure. 
  12114. It is used to determine whether a specified parameter is set on invocation of 
  12115. the procedure. 
  12116.  
  12117. PARMSET returns a bit value of '1'B if the parameter x was explicitly set by 
  12118. the function reference which invoked the procedure, and a bit value of '0'B if 
  12119. it was not---that is, if the corresponding argument was omitted from the 
  12120. function reference in a preprocessor expression, or was the null string in a 
  12121. function reference from input text. 
  12122.  
  12123. PARMSET can return '0'B, even if a matching argument does appear in the 
  12124. reference, but the reference is in another preprocessor procedure, as follows: 
  12125.  
  12126.  If the argument is not itself a parameter of the invoking procedure, PARMSET 
  12127.   returns the value'1'B. 
  12128.  
  12129.  If the argument is a parameter of the invoking procedure, PARMSET returns the 
  12130.   value for the specified parameter when the invoking procedure was itself 
  12131.   invoked. 
  12132.  
  12133. Syntax 
  12134.  
  12135. ΓöÇΓöÇΓöÇPARMSET(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12136.  
  12137.    must be a parameter of the preprocessor procedure. 
  12138.  
  12139.  
  12140. ΓòÉΓòÉΓòÉ <hidden> SUBSTR Preprocessor Built-In Function ΓòÉΓòÉΓòÉ
  12141.  
  12142. SUBSTR returns a substring of the character expression x. 
  12143.  
  12144. Syntax 
  12145.  
  12146. ΓöÇΓöÇΓöÇSUBSTR(x,yΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12147.                 ΓööΓöÇ,zΓöÇΓöÿ
  12148.  
  12149.    character expression from which the substring is extracted.  X converts to 
  12150.    character, if necessary. 
  12151.  
  12152.    expression that can be converted to FIXED, specifying the starting position 
  12153.    of the substring in x. 
  12154.  
  12155.    expression that can be converted to FIXED, specifying the length of the 
  12156.    substring in x.  If z is zero, a null string is returned.  If z is omitted, 
  12157.    the substring returned is position y in x to the end of x. 
  12158.  
  12159. If z is negative, or if the values of y and z are such that the substring does 
  12160. not lie entirely within x, the result is undefined. 
  12161.  
  12162.  
  12163. ΓòÉΓòÉΓòÉ <hidden> ABS Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12164.  
  12165. Description 
  12166.   ABS returns the absolute value of x. It is the positive value of x. 
  12167.  
  12168.   The mode of the result is REAL. The result has the base, scale, and precision 
  12169.   of x. 
  12170.  
  12171. Syntax 
  12172.  
  12173. ΓöÇΓöÇΓöÇΓöÇABS(x)ΓöÇΓöÇΓöÇΓöÇ
  12174.  
  12175.    is an expression. 
  12176.  
  12177.  
  12178. ΓòÉΓòÉΓòÉ <hidden> ACOS Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12179.  
  12180. Description 
  12181.   ACOS returns a real floating-point value that is an approximation of the 
  12182.   inverse (arc) cosine in radians of x. 
  12183.  
  12184.   The result is in the range: 
  12185.  
  12186.     0 <= ACOS(x) <= pi
  12187.  
  12188.   and has the base and precision of x. 
  12189.  
  12190. Syntax 
  12191.  
  12192. ΓöÇΓöÇΓöÇΓöÇACOS(x)ΓöÇΓöÇΓöÇΓöÇ
  12193.  
  12194.    real expression, where ABS(x) <= 1. 
  12195.  
  12196.  
  12197. ΓòÉΓòÉΓòÉ <hidden> ADD Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12198.  
  12199. Description 
  12200.   ADD returns the sum of x and y with a precision specified by p and q. The 
  12201.   base, scale, and mode of the result are determined by the rules for 
  12202.   expression evaluation. 
  12203.  
  12204.   ADD can be used for subtraction by prefixing a minus sign to the operand to 
  12205.   be subtracted. 
  12206.  
  12207. Syntax 
  12208.  
  12209. ΓöÇΓöÇΓöÇΓöÇADD(x,y,pΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12210.                  ΓööΓöÇ,qΓöÇΓöÿ
  12211.  
  12212. x and y 
  12213.    expressions. 
  12214.  
  12215.    integer. It specifies the number of digits to be maintained throughout the 
  12216.    operation. It must not exceed the implementation limit for the result base 
  12217.    and scale. 
  12218.  
  12219.    optionally-signed integer specifying the scaling factor of the result. For a 
  12220.    fixed-point result, if q is omitted, a scaling factor of zero is the 
  12221.    default. For a floating-point result, q must be omitted. 
  12222.  
  12223.  
  12224. ΓòÉΓòÉΓòÉ <hidden> ADDR Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  12225.  
  12226. Description 
  12227.   ADDR returns the pointer value that identifies the generation of x. 
  12228.  
  12229. Usage Rules 
  12230.   If x is a reference to: 
  12231.  
  12232.     An aggregate parameter, it must have the CONNECTED attribute 
  12233.  
  12234.     An aggregate, the returned value identifies the first element 
  12235.  
  12236.     A component or cross section of an aggregate, the returned value takes 
  12237.      into account subscripting and structure qualification 
  12238.  
  12239.     A varying string, the returned value identifies the 2-byte prefix 
  12240.  
  12241.     An area, the returned value identifies the control information 
  12242.  
  12243.     A controlled variable that is not allocated in the current program, the 
  12244.      null pointer value is returned 
  12245.  
  12246.     A based variable, the result is the value of the pointer explicitly 
  12247.      qualifying x (if it appears), or associated with x in its declaration (if 
  12248.      it exists), or a null pointer 
  12249.  
  12250.     A parameter, and a dummy argument has been created, the returned value 
  12251.      identifies the dummy argument. 
  12252.  
  12253. Syntax 
  12254.  
  12255. ΓöÇΓöÇΓöÇΓöÇADDR(x)ΓöÇΓöÇΓöÇΓöÇ
  12256.  
  12257.    is a reference. It refers to a variable of any data type, data organization, 
  12258.    alignment, and storage class except: 
  12259.  
  12260.     A subscripted reference to a variable that is an unaligned fixed-length 
  12261.      bit string 
  12262.  
  12263.     A reference to a DEFINED or BASED variable or simple parameter, which is 
  12264.      an unaligned fixed-length bit string 
  12265.  
  12266.     A minor structure whose first base element is an unaligned fixed-length 
  12267.      bit string (except where it is also the first element of the containing 
  12268.      major structure) 
  12269.  
  12270.     A major structure that has the DEFINED attribute or is a parameter, and 
  12271.      that has an unaligned fixed-length bit string as its first element 
  12272.  
  12273.     A reference that is not to connected storage. 
  12274.  
  12275.  
  12276. ΓòÉΓòÉΓòÉ <hidden> ALL Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  12277.  
  12278. Description 
  12279.   ALL returns a bit string in which each bit is 1 if the corresponding bit in 
  12280.   each element of x exists and is 1. The length of the result is equal to that 
  12281.   of the longest element. 
  12282.  
  12283.   If x is not a bit string array, it is converted to bit string. 
  12284.  
  12285. Syntax 
  12286.  
  12287. ΓöÇΓöÇΓöÇΓöÇALL(x)ΓöÇΓöÇΓöÇΓöÇ
  12288.  
  12289.    array reference. 
  12290.  
  12291.  
  12292. ΓòÉΓòÉΓòÉ <hidden> ALLOCATION Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  12293.  
  12294. Description 
  12295.   ALLOCATION returns a FIXED BINARY (31,0) value specifying the number of 
  12296.   generations that can be accessed in the current program for x. 
  12297.  
  12298.   If x is not allocated in the current program, the result is zero. 
  12299.  
  12300. Syntax 
  12301.  
  12302. ΓöÇΓöÇΓöÇΓöÇALLOCATION(x)ΓöÇΓöÇΓöÇΓöÇ
  12303.  
  12304. Abbreviation:  ALLOCN 
  12305.  
  12306.    level-one unsubscripted controlled variable. 
  12307.  
  12308.  
  12309. ΓòÉΓòÉΓòÉ <hidden> ANY Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  12310.  
  12311. Description 
  12312.   ANY returns a bit string in which each bit is 1 if the corresponding bit in 
  12313.   any element of x exists and is 1. The length of the result is equal to that 
  12314.   of the longest element. If x is not a bit string array, it is converted to 
  12315.   bit string. X must not be iSUB-defined. 
  12316.  
  12317. Syntax 
  12318.  
  12319. ΓöÇΓöÇΓöÇΓöÇANY(x)ΓöÇΓöÇΓöÇΓöÇ
  12320.  
  12321.    array reference. 
  12322.  
  12323.  
  12324. ΓòÉΓòÉΓòÉ <hidden> ASIN Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12325.  
  12326. Description 
  12327.   ASIN returns a real floating-point value that is an approximation of the 
  12328.   inverse (arc) sine in radians of x. 
  12329.  
  12330.   The result is in the range: 
  12331.  
  12332.     -pi/2 <= ASIN(x) <= pi/2
  12333.  
  12334.   and has the base and precision of x. 
  12335.  
  12336. Syntax 
  12337.  
  12338. ΓöÇΓöÇΓöÇΓöÇASIN(x)ΓöÇΓöÇΓöÇΓöÇ
  12339.  
  12340.    real expression, where ABS(x) <= 1. 
  12341.  
  12342.  
  12343. ΓòÉΓòÉΓòÉ <hidden> ATAN Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12344.  
  12345. Description 
  12346.   ATAN returns a floating-point value that is an approximation of the inverse 
  12347.   (arc) tangent in radians of x or of a ratio x/y. 
  12348.  
  12349. Syntax 
  12350.  
  12351. ΓöÇΓöÇΓöÇΓöÇATAN(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12352.               ΓööΓöÇ,yΓöÇΓöÿ
  12353.  
  12354. x and y 
  12355.    expressions. If x alone is specified and is real, the result is real, has 
  12356.    the base and precision of x, and is in the range: 
  12357.  
  12358.       -pi/2 < ATAN(x) < pi/2
  12359.  
  12360.    If x alone is specified and is complex, it must not +1I or -1I.  The result 
  12361.    is complex, has the base and the precision of x, and a value given by: 
  12362.  
  12363.       -1I*ATANH(1I*x)
  12364.  
  12365.    If x and y are specified, each must be real.  It is an error if x and y are 
  12366.    both zero. The result for all other values of x and y is real, and has the 
  12367.    precision of the longer argument, a base determined by the rules for 
  12368.    expressions, and a value given by: 
  12369.  
  12370.       ATAN(x/y)       for y>0
  12371.       pi/2            for y=0 and x>0
  12372.       -pi/2           for y=0 and x<0
  12373.       pi+ATAN(x/y)    for y<0 and x>=0
  12374.       -pi+ATAN(x/y)   for y<0 and x<0
  12375.  
  12376.  
  12377. ΓòÉΓòÉΓòÉ <hidden> ATAND Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12378.  
  12379. Description 
  12380.   ATAND returns a real floating-point value that is an approximation of the 
  12381.   inverse (arc) tangent in degrees of x or of a ratio x/y. 
  12382.  
  12383. Syntax 
  12384.  
  12385. ΓöÇΓöÇΓöÇΓöÇATAND(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12386.                ΓööΓöÇ,yΓöÇΓöÿ
  12387.  
  12388. x and y 
  12389.    expressions. 
  12390.  
  12391.    If x alone is specified it must be real. The result has the base and 
  12392.    precision of x, and is in the range: 
  12393.  
  12394.       -90<ATAND(x) < 90
  12395.  
  12396.    If x and y are specified, each must be real. The value of the result is 
  12397.    given by: 
  12398.  
  12399.       (180/pi)*ATAN(x,y)
  12400.  
  12401.  
  12402. ΓòÉΓòÉΓòÉ <hidden> ATANH Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12403.  
  12404. Description 
  12405.   ATANH returns a floating-point value that has the base, mode, and precision 
  12406.   of x, and is an approximation of the inverse (arc) hyperbolic tangent of x. 
  12407.  
  12408.   The result has a value given by: 
  12409.  
  12410.     LOG((1+x)/(1-x))/2
  12411.  
  12412. Syntax 
  12413.  
  12414. ΓöÇΓöÇΓöÇΓöÇATANH(x)ΓöÇΓöÇΓöÇΓöÇ
  12415.  
  12416.   is an expression.  ABS(x) < 1. 
  12417.  
  12418.  
  12419. ΓòÉΓòÉΓòÉ <hidden> BINARY Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12420.  
  12421. Description 
  12422.   BINARY returns the binary value of x, with a precision specified by p and q. 
  12423.   The result has the mode and scale of x. 
  12424.  
  12425.   If both p and q are omitted, the precision of the result is determined from 
  12426.   the rules for base conversion. 
  12427.  
  12428. Syntax 
  12429.  
  12430. ΓöÇΓöÇΓöÇΓöÇBINARY(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12431.                 ΓööΓöÇ,pΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  12432.                      ΓööΓöÇ,qΓöÇΓöÿ
  12433.  
  12434. Abbreviation:  BIN 
  12435.  
  12436.    expression. 
  12437.  
  12438.    integer. Specifies the number of digits to be maintained throughout the 
  12439.    operation; it must not exceed the implementation limit. 
  12440.  
  12441.    optionally-signed integer. It specifies the scaling factor of the result. 
  12442.    For a fixed-point result, if p is given and q is omitted, a scaling factor 
  12443.    of zero is the default. For a floating-point result, q must be omitted. 
  12444.  
  12445.  
  12446. ΓòÉΓòÉΓòÉ <hidden> BINARYVALUE Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  12447.  
  12448. Description 
  12449.   BINARYVALUE returns a REAL FIXED BIN(31,0) value that is the converted value 
  12450.   of its pointer expression, x. 
  12451.  
  12452. Syntax 
  12453.  
  12454. ΓöÇΓöÇΓöÇΓöÇBINARYVALUE(x)ΓöÇΓöÇΓöÇΓöÇ
  12455.  
  12456. Abbreviation:  BINVALUE 
  12457.  
  12458.    expression. 
  12459.  
  12460.  
  12461. ΓòÉΓòÉΓòÉ <hidden> CURRENTSTORAGE Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  12462.  
  12463. Description 
  12464.   CURRENTSTORAGE returns a FIXED BINARY (31,0) value giving the 
  12465.   implementation-defined storage, in bytes, required by x. 
  12466.  
  12467. Syntax 
  12468.  
  12469. ΓöÇΓöÇΓöÇΓöÇCURRENTSTORAGE(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12470.  
  12471. Abbreviation:  CSTG 
  12472.  
  12473.    a variable of any data type, data organization, and storage class except: 
  12474.  
  12475.     A BASED, DEFINED, parameter, subscripted, or structure-base-element 
  12476.      variable that is an unaligned fixed-length bit string. 
  12477.  
  12478.     A minor structure whose first or last base element is an unaligned 
  12479.      fixed-length bit string (except where it is also the first or the last 
  12480.      element of the containing major structure). 
  12481.  
  12482.     A major structure that has the BASED, DEFINED, or parameter attribute and 
  12483.      which has an unaligned fixed-length bit string as its first or last 
  12484.      element. 
  12485.  
  12486.     A variable not in connected storage. 
  12487.  
  12488. The value returned by CURRENTSTORAGE(x) is defined as the number of bytes that 
  12489. would be transmitted in the following circumstances: 
  12490.  
  12491. DECLARE F FILE RECORD OUTPUT
  12492.         ENVIRONMENT(SCALARVARYING);
  12493. WRITE FILE(F) FROM(X);
  12494.  
  12495. If x is a scalar-varying-length string, the returned value includes the 
  12496. length-prefix of the string and the number of currently-used bytes; it does not 
  12497. include any unused bytes in the string. 
  12498.  
  12499. If x is a scalar area, the returned value includes the area control bytes and 
  12500. the current extent of the area; it does not include any unused at the end of 
  12501. the area. 
  12502.  
  12503. If x is an aggregate containing areas or varying-length strings, the returned 
  12504. value includes the area control bytes, the maximum sizes of the areas, the 
  12505. length prefixes of the strings, and the number of bytes in the maximum lengths 
  12506. of the strings.  There is one exception to this rule, however: 
  12507.  
  12508. If x is a structure whose last element is a nondimensional area, the returned 
  12509. value includes that area's control bytes and the current extent of that area; 
  12510. it does not include any unused bytes at the end of the area. 
  12511.  
  12512. Note:   CURRENTSTORAGE cannot be used to obtain the storage requirements of a 
  12513.         structure mapped according to the COBOL mapping algorithm.
  12514.  
  12515.  
  12516. ΓòÉΓòÉΓòÉ <hidden> BIT String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  12517.  
  12518. Description 
  12519.   BIT returns the bit value of x, with a length specified by y. 
  12520.  
  12521. Syntax 
  12522.  
  12523. ΓöÇΓöÇΓöÇΓöÇBIT(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12524.              ΓööΓöÇ,yΓöÇΓöÿ
  12525.  
  12526.    expression. 
  12527.  
  12528.    expression. If necessary, y is converted to a real fixed-point binary value 
  12529.    (15,0). If y is omitted, the length is determined by the rules for type 
  12530.    conversion. If y = 0, the result is the null bit string. y must not be 
  12531.    negative. 
  12532.  
  12533.  
  12534. ΓòÉΓòÉΓòÉ <hidden> BOOL String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  12535.  
  12536. Description 
  12537.   BOOL returns a bit string that is the result of the Boolean operation z, on x 
  12538.   and y. The length of the result is equal to that of the longer operand, x or 
  12539.   y. 
  12540.  
  12541. Syntax 
  12542.  
  12543. ΓöÇΓöÇΓöÇΓöÇBOOL(x,y,z)ΓöÇΓöÇΓöÇΓöÇ
  12544.  
  12545. x and y 
  12546.    expressions. x and y are converted to bit strings, if necessary. If x and y 
  12547.    are of different lengths, the shorter is padded on the right with zeros to 
  12548.    match the longer. 
  12549.  
  12550.    expression. z is converted to a bit string of length 4, if necessary. When a 
  12551.    bit from x is matched with a bit from y, the corresponding bit of the result 
  12552.    is specified by a selected bit of z, as follows: 
  12553.  
  12554.        ΓöîΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12555.        Γöéx Γöéy ΓöéResult     Γöé
  12556.        Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12557.        Γöé0 Γöé0 Γöébit 1 of z Γöé
  12558.        Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12559.        Γöé0 Γöé1 Γöébit 2 of z Γöé
  12560.        Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12561.        Γöé1 Γöé0 Γöébit 3 of z Γöé
  12562.        Γö£ΓöÇΓöÇΓö╝ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12563.        Γöé1 Γöé1 Γöébit 4 of z Γöé
  12564.        ΓööΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12565.  
  12566.  
  12567. ΓòÉΓòÉΓòÉ <hidden> CEIL Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12568.  
  12569. Description 
  12570.   CEIL determines the smallest integer value greater than or equal to x, and 
  12571.   assigns this value to the result. 
  12572.  
  12573.   The result has the mode, base, scale, and precision of x, except when x is 
  12574.   fixed-point with precision (p,q). The precision of the result is then given 
  12575.   by: 
  12576.  
  12577.     (MIN(N,MAX(p-q+1,1)),0)
  12578.  
  12579.   where N is the maximum number of digits allowed. 
  12580.  
  12581. Syntax 
  12582.  
  12583. ΓöÇΓöÇΓöÇΓöÇCEIL(x)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  12584.  
  12585.    real expression. 
  12586.  
  12587.  
  12588. ΓòÉΓòÉΓòÉ <hidden> CHAR String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  12589.  
  12590. Description 
  12591.   CHAR returns the character value of x, with a length specified by y. It also 
  12592.   supports conversion from graphic to character type. 
  12593.  
  12594. Examples 
  12595.   Using the CHAR built-in function 
  12596.  
  12597. Syntax 
  12598.  
  12599. ΓöÇΓöÇΓöÇCHAR(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12600.              ΓööΓöÇ,yΓöÇΓöÿ
  12601.  
  12602.    expression. When x is non-GRAPHIC, CHAR  returns x converted to character. 
  12603.    When x is GRAPHIC, CHAR returns x converted to mixed character with the 
  12604.    GRAPHIC data enclosed in shift-out/shift-in codes. 
  12605.  
  12606.    The values of x are not checked. 
  12607.  
  12608.    expression. If necessary, y is converted to a real fixed-point binary value. 
  12609.    If y is omitted, the length is determined by the rules for type conversion. 
  12610.    y cannot be negative. If y=0, the result is the null character string. 
  12611.  
  12612.    The following apply only when x is GRAPHIC: 
  12613.  
  12614.     If y = 1, the result is a character string of 1 blank. 
  12615.  
  12616.     If y = 2, the result is a character string of 2 blanks. 
  12617.  
  12618.     If y = 3, the result is a character string of 3 blanks. 
  12619.  
  12620.     If y is greater than the length needed to contain the character string, 
  12621.      the result is padded with SBCS blanks. 
  12622.  
  12623.     If y is less than the length needed to contain the character string, the 
  12624.      result is truncated. The integrity is preserved by truncating after a 
  12625.      graphic, allowing space for and appending a shift-in code, and SBCS blank 
  12626.      if necessary, to complete the length of the string. 
  12627.  
  12628.  
  12629. ΓòÉΓòÉΓòÉ <hidden> Examples- Using the CHAR Built-In Function ΓòÉΓòÉΓòÉ
  12630.  
  12631.  EXAMPLE 1 
  12632.  
  12633.   Conversion from graphic to character, where "y" is long enough to contain the 
  12634.   result: 
  12635.  
  12636.     DCL X GRAPHIC(6);
  12637.     DCL A CHAR (14);
  12638.     A = CHAR(X);
  12639.  
  12640.       For X with value       Intermediate Result       A is assigned
  12641.       ----------------       -------------------       -------------
  12642.       .A.B.C.D.E.F           <.A.B.C.D.E.F>            <.A.B.C.D.E.F>
  12643.  
  12644.  EXAMPLE 2 
  12645.  
  12646.   Conversion from graphic to character, where "y" is too short: 
  12647.  
  12648.     DCL X GRAPHIC(6);
  12649.     DCL A CHAR (11);
  12650.     A = CHAR(X);
  12651.  
  12652.  
  12653.       For X with values       Intermediate Result       A is assigned
  12654.       -----------------       -------------------       -------------
  12655.       .A.B.C.D.E.F            <.A.B.C.D.E.F>            <.A.B.C.D>
  12656.  
  12657.  
  12658. ΓòÉΓòÉΓòÉ <hidden> COMPLEX Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12659.  
  12660. Description 
  12661.   COMPLEX returns the complex value x + yI. 
  12662.  
  12663.   The precision of the result, if fixed-point, is given by: 
  12664.  
  12665.     (MIN(N,MAX(p1-q1,p2-q2)+MAX(q1,q2)),MAX(q1,q2))
  12666.  
  12667.   where (p1,q1) and (p2,q2) are the precisions of x and y, respectively, and N 
  12668.   is the maximum number of digits allowed. 
  12669.  
  12670.   If the arguments, after any necessary conversions have been performed, are 
  12671.   floating-point, the result has the precision of the longer argument. 
  12672.  
  12673. Syntax 
  12674.  
  12675. ΓöÇΓöÇΓöÇΓöÇCOMPLEX(x,y)ΓöÇΓöÇΓöÇΓöÇ
  12676.  
  12677. Abbreviation:  CPLX 
  12678.  
  12679. x and y 
  12680.    real expressions. If x and y differ in base, the decimal argument is 
  12681.    converted to binary. If they differ in scale, the fixed-point argument is 
  12682.    converted to floating-point. The result has the common base and scale. 
  12683.  
  12684.  
  12685. ΓòÉΓòÉΓòÉ <hidden> COMPLEX Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  12686.  
  12687. Description 
  12688.   The COMPLEX pseudovariable assigns the real part of a complex value to x, and 
  12689.   the real coefficient of the imaginary part to y. The attributes of x and y 
  12690.   need not match, but if both are arrays they must have identical bounds. Only 
  12691.   a complex value can be assigned to the pseudovariable. The COMPLEX 
  12692.   pseudovariable cannot be used as the control variable in a do-specification. 
  12693.  
  12694. Syntax 
  12695.  
  12696. ΓöÇΓöÇΓöÇΓöÇCOMPLEX(x,y)ΓöÇΓöÇΓöÇΓöÇ
  12697.  
  12698. Abbreviation:  CPLX 
  12699.  
  12700. x and y 
  12701.    real references. 
  12702.  
  12703.  
  12704. ΓòÉΓòÉΓòÉ <hidden> COMPLETION Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  12705.  
  12706. Description 
  12707.   The pseudovariable sets the completion value of x.  No interrupt can occur 
  12708.   during each assignment of the pseudovariable.  For the compiler, the 
  12709.   COMPLETION pseudovariable cannot be used as the control variable in a 
  12710.   do-specification. 
  12711.  
  12712. Syntax 
  12713.  
  12714. ΓöÇΓöÇΓöÇΓöÇCOMPLETION(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12715.  
  12716. Abbreviation: CPLN 
  12717.  
  12718.    specifies the event reference.  x must be inactive. 
  12719.  
  12720.  
  12721. ΓòÉΓòÉΓòÉ <hidden> ENTRYADDR Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  12722.  
  12723. Description 
  12724.   The ENTRYADDR pseudovariable initializes an entry variable, x, with the 
  12725.   address of the entry to be invoked. 
  12726.  
  12727. Syntax 
  12728.  
  12729. ΓöÇΓöÇΓöÇΓöÇENTRYADDR(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12730.  
  12731.    is an entry reference. 
  12732.  
  12733.    The ENTRYADDR pseudovariable cannot be used as the control variable in a DO 
  12734.    loop. 
  12735.  
  12736. Note:   If the address supplied to the ENTRYADDR variable is the address of an 
  12737.         internal procedure, unpredictable results might occur.
  12738.  
  12739.  
  12740. ΓòÉΓòÉΓòÉ <hidden> CONJG Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12741.  
  12742. Description 
  12743.   CONJG returns the conjugate of x; that is, the value of the expression with 
  12744.   the sign of the imaginary part reversed. 
  12745.  
  12746.   If x is real, it is converted to complex. The result has the base, scale, 
  12747.   mode, and precision of x. 
  12748.  
  12749. Syntax 
  12750.  
  12751. ΓöÇΓöÇΓöÇΓöÇCONJG(x)ΓöÇΓöÇΓöÇΓöÇ
  12752.  
  12753.    expression. 
  12754.  
  12755.  
  12756. ΓòÉΓòÉΓòÉ <hidden> COS Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12757.  
  12758. Description 
  12759.   COS returns a floating-point value that has the base, precision, and mode of 
  12760.   x, and is an approximation of the cosine of x. 
  12761.  
  12762. Syntax 
  12763.  
  12764. ΓöÇΓöÇΓöÇΓöÇCOS(x)ΓöÇΓöÇΓöÇΓöÇ
  12765.  
  12766.    expression whose value is in radians. 
  12767.  
  12768.    If x = COMPLEX(a,b), the value of the result is given by: 
  12769.  
  12770.       COMPLEX(COS(a)*COSH(b),-SIN(a)*SINH(b))
  12771.  
  12772.  
  12773. ΓòÉΓòÉΓòÉ <hidden> COSD Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12774.  
  12775. Description 
  12776.   COSD returns a real floating-point value that has the base and precision of 
  12777.   x, and is an approximation of the cosine of x. 
  12778.  
  12779. Syntax 
  12780.  
  12781. ΓöÇΓöÇΓöÇΓöÇCOSD(x)ΓöÇΓöÇΓöÇΓöÇ
  12782.  
  12783.    real expression whose value is in degrees. 
  12784.  
  12785.  
  12786. ΓòÉΓòÉΓòÉ <hidden> COSH Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  12787.  
  12788. Description 
  12789.   COSH returns a floating-point value that has the base, precision, and mode of 
  12790.   x, and is an approximation of the hyperbolic cosine of x. 
  12791.  
  12792. Syntax 
  12793.  
  12794. ΓöÇΓöÇΓöÇΓöÇCOSH(x)ΓöÇΓöÇΓöÇΓöÇ
  12795.  
  12796.    expression. 
  12797.  
  12798.    If x = COMPLEX(a,b), the value of the result is given by: 
  12799.  
  12800.       COMPLEX(COSH(a)*COS(b),SINH(a)*SIN(b))
  12801.  
  12802.  
  12803. ΓòÉΓòÉΓòÉ <hidden> COUNT Input/Output Built-In Function ΓòÉΓòÉΓòÉ
  12804.  
  12805. Description 
  12806.   COUNT returns a real binary fixed-point value (15,0) specifying the number of 
  12807.   data items transmitted during the last GET or PUT operation on x. 
  12808.  
  12809.   The count of transmitted items for a GET or PUT operation on x is initialized 
  12810.   to zero before the first data item is transmitted, and is incremented by one 
  12811.   after the transmission of each data item in the list. If x is not open in the 
  12812.   current program, a value of zero is returned. 
  12813.  
  12814.   If an ON-unit or procedure is entered during a GET or PUT operation, and 
  12815.   within that ON-unit or procedure, a GET or PUT operation is executed for x, 
  12816.   the value of COUNT is reset for the new operation. It is restored when the 
  12817.   original GET or PUT is continued. 
  12818.  
  12819. Syntax 
  12820.  
  12821. ΓöÇΓöÇΓöÇΓöÇCOUNT(x)ΓöÇΓöÇΓöÇΓöÇ
  12822.  
  12823.    file-reference. The file must be open and have the STREAM attribute. 
  12824.  
  12825.  
  12826. ΓòÉΓòÉΓòÉ <hidden> DATAFIELD Condition Handling Built-In Function ΓòÉΓòÉΓòÉ
  12827.  
  12828. Description 
  12829.   DATAFIELD is in context in a NAME condition ON-unit (or any of its dynamic 
  12830.   descendants). It returns a character string whose value is the contents of 
  12831.   the field that raised the condition. It is also in context in an ON-unit (or 
  12832.   any of its dynamic descendants) for an ERROR or FINISH condition raised as 
  12833.   part of the implicit action for the NAME condition. 
  12834.  
  12835.   If the string that raised the condition contains DBCS identifiers, GRAPHIC 
  12836.   data, or mixed character data, DATAFIELD returns a MIXED character string 
  12837.   adjusted, if necessary, so the DBCS portions are enclosed in shift codes. 
  12838.  
  12839.   Note:   If DATAFIELD is used out of context, a null string is returned. 
  12840.  
  12841. Syntax 
  12842.  
  12843. ΓöÇΓöÇΓöÇΓöÇDATAFIELDΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  12844.                   ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  12845.  
  12846.  
  12847. ΓòÉΓòÉΓòÉ <hidden> DATE Miscellaneous Built-In Function ΓòÉΓòÉΓòÉ
  12848.  
  12849. Description 
  12850.   DATE returns a character string, length 6, in the format of yymmdd. The time 
  12851.   zone and accuracy are system dependent. 
  12852.  
  12853. Syntax 
  12854.  
  12855. ΓöÇΓöÇΓöÇΓöÇDATEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  12856.              ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  12857.  
  12858. The returned character string yymmdd represents the following: 
  12859.  
  12860. yy      represents the last two digits of the current year 
  12861. mm      represents the current month 
  12862. dd      represents the current day 
  12863.  
  12864.  
  12865. ΓòÉΓòÉΓòÉ <hidden> DATETIME Miscellaneous Built-In Function ΓòÉΓòÉΓòÉ
  12866.  
  12867. Description 
  12868.   DATETIME returns a character string, length 17, in the format of 
  12869.   yyyymmddhhmmsstt. 
  12870.  
  12871. Syntax 
  12872.  
  12873. ΓöÇΓöÇΓöÇΓöÇDATETIMEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  12874.                 ΓööΓöÇ()ΓöÇΓöÿ
  12875.  
  12876. yyyy    is the current year 
  12877.  
  12878. mmm     is the current month 
  12879.  
  12880. dd      is the current day 
  12881.  
  12882. hh      is the current hour 
  12883.  
  12884. mm      is the current minute 
  12885.  
  12886. ss      is the current second 
  12887.  
  12888.  
  12889. ΓòÉΓòÉΓòÉ <hidden> DECIMAL Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12890.  
  12891. Description 
  12892.   DECIMAL returns the decimal value of x, with a precision specified by p and 
  12893.   q. The result has the mode and scale of x. 
  12894.  
  12895.   If both p and q are omitted, the precision of the result is determined from 
  12896.   the rules for base conversion. 
  12897.  
  12898. Syntax 
  12899.  
  12900. ΓöÇΓöÇΓöÇΓöÇDECIMAL(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12901.                  ΓööΓöÇ,pΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  12902.                       ΓööΓöÇ,qΓöÇΓöÿ
  12903.  
  12904. Abbreviation:  DEC 
  12905.  
  12906.    expression. 
  12907.  
  12908.    integer specifying the number of digits to be maintained throughout the 
  12909.    operation. It must not exceed the implementation limit. 
  12910.  
  12911.    optionally-signed integer specifying the scaling factor of the result. For a 
  12912.    fixed-point result, if p is given and q is omitted, a scaling factor of zero 
  12913.    is assumed. For a floating-point result, q must be omitted. 
  12914.  
  12915.  
  12916. ΓòÉΓòÉΓòÉ <hidden> DIM Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  12917.  
  12918. Description 
  12919.   DIM returns a FIXED BINARY (31,0) value specifying the current extent of 
  12920.   dimension y of x. 
  12921.  
  12922.   If the extent of an array dimension exceeds the allowable number for the 
  12923.   implementation, the DIM function returns an undefined value. 
  12924.  
  12925. Syntax 
  12926.  
  12927. ΓöÇΓöÇΓöÇΓöÇDIM(x,y)ΓöÇΓöÇΓöÇΓöÇ
  12928.  
  12929.    an array expression. x must not have less than y dimensions. Also, x must 
  12930.    not be an array of structures. 
  12931.  
  12932.    expression specifying a particular dimension of x. If necessary, y is 
  12933.    converted to a FIXED BINARY(31,0) value. Y must be greater than or equal to 
  12934.    1. 
  12935.  
  12936.  
  12937. ΓòÉΓòÉΓòÉ <hidden> DIVIDE Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  12938.  
  12939. Description 
  12940.   DIVIDE returns the quotient of x/y with a precision specified by p and q. The 
  12941.   base, scale, and mode of the result follow the rules for expression 
  12942.   evaluation. 
  12943.  
  12944. Syntax 
  12945.  
  12946. ΓöÇΓöÇΓöÇΓöÇDIVIDE(x,y,pΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  12947.                     ΓööΓöÇ,qΓöÇΓöÿ
  12948.  
  12949.    expression. 
  12950.  
  12951.    expression. If y=0, the ZERODIVIDE condition is raised. 
  12952.  
  12953.    integer specifying the number of digits to be maintained throughout the 
  12954.    operation. 
  12955.  
  12956.    optionally-signed integer specifying the scaling factor of the result. For a 
  12957.    fixed-point result, if q is omitted, a scaling factor of zero is the 
  12958.    default. For a floating-point result, q must be omitted. 
  12959.  
  12960.  
  12961. ΓòÉΓòÉΓòÉ <hidden> EMPTY Storage Control Function ΓòÉΓòÉΓòÉ
  12962.  
  12963. Description 
  12964.   EMPTY returns an area of zero extent. It can be used to free all allocations 
  12965.   in an area. The value of this function is assigned to an area variable when 
  12966.   the variable is allocated. 
  12967.  
  12968. Example 
  12969.   Consider the following use of EMPTY: 
  12970.  
  12971.      DECLARE A AREA,
  12972.              I BASED (P),
  12973.              J BASED (Q);
  12974.  
  12975.      ALLOCATE I IN(A), J IN (A);
  12976.      A = EMPTY();
  12977.  
  12978.      /*EQUIVALENT TO:  FREE I IN (A), J IN (A); */
  12979.  
  12980. Syntax 
  12981.  
  12982. ΓöÇΓöÇΓöÇΓöÇEMPTYΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  12983.               ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  12984.  
  12985.  
  12986. ΓòÉΓòÉΓòÉ <hidden> ENTRYADDR Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  12987.  
  12988. Description 
  12989.   ENTRYADDR returns a pointer value that is the address of the first executed 
  12990.   instruction if the entry x is invoked. The entry x must be an external entry. 
  12991.  
  12992.   If x is a fetchable entry constant that has not been fetched or has been 
  12993.   released, the NULL() value is returned. 
  12994.  
  12995. Syntax 
  12996.  
  12997. ΓöÇΓöÇΓöÇΓöÇENTRYADDR(x)ΓöÇΓöÇΓöÇΓöÇ
  12998.  
  12999.    is an entry reference. 
  13000.  
  13001.  
  13002. ΓòÉΓòÉΓòÉ <hidden> ERF Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  13003.  
  13004. Description 
  13005.   ERF returns a real floating-point value that is an approximation of the error 
  13006.   function of x. 
  13007.  
  13008.   The result has the base and precision of x, and a value given by: 
  13009.  
  13010.     (2/SQRT(pi))
  13011.  
  13012.   times the integral over the range 0 to x of: 
  13013.  
  13014.     EXP (-(t**2))dt
  13015.  
  13016. Syntax 
  13017.  
  13018. ΓöÇΓöÇΓöÇΓöÇERF(x)ΓöÇΓöÇΓöÇΓöÇ
  13019.  
  13020.    real expression. 
  13021.  
  13022.  
  13023. ΓòÉΓòÉΓòÉ <hidden> ERFC Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  13024.  
  13025. Description 
  13026.   ERFC returns a real floating-point value that is an approximation of the 
  13027.   complement of the error function of x. 
  13028.  
  13029.   The result has the base and precision of x, and a value given by: 
  13030.  
  13031.     1-ERF(x)
  13032.  
  13033. Related Information 
  13034.   ERF built-in function 
  13035.  
  13036. Syntax 
  13037.  
  13038. ΓöÇΓöÇΓöÇΓöÇERFC(x)ΓöÇΓöÇΓöÇΓöÇ
  13039.  
  13040.    real expression. 
  13041.  
  13042.  
  13043. ΓòÉΓòÉΓòÉ <hidden> EXP Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  13044.  
  13045. Description 
  13046.   EXP returns a floating-point value that is an approximation of the base, e, 
  13047.   of the natural logarithm system raised to the power x. 
  13048.  
  13049.   The result has the base, mode, and precision of x. 
  13050.  
  13051. Syntax 
  13052.  
  13053. ΓöÇΓöÇΓöÇΓöÇEXP(x)ΓöÇΓöÇΓöÇΓöÇ
  13054.  
  13055.    expression. 
  13056.  
  13057.    The result has the base, mode, and precision of x.  If x = COMPLEX(a,b), the 
  13058.    value of the result is given by: 
  13059.  
  13060.       (e**a)*COMPLEX(COS(b),SIN(b))
  13061.  
  13062.  
  13063. ΓòÉΓòÉΓòÉ <hidden> FIXED Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13064.  
  13065. Description 
  13066.   FIXED returns the fixed-point value of x, with a precision specified by p and 
  13067.   q. The result has the base and mode of x. 
  13068.  
  13069. Syntax 
  13070.  
  13071. ΓöÇΓöÇΓöÇΓöÇFIXED(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13072.                ΓööΓöÇ,pΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöñ
  13073.                     ΓööΓöÇ,qΓöÇΓöÿ
  13074.  
  13075.    expression. 
  13076.  
  13077.    integer. It specifies the total number of digits in the result; it must not 
  13078.    exceed the implementation limit. 
  13079.  
  13080.    optionally-signed integer. It specifies the scaling factor of the result. If 
  13081.    q is omitted, a scaling factor of zero is assumed. 
  13082.  
  13083. Note:   If both p and q are omitted, the precision of the result is determined 
  13084. from the rules for base conversion. 
  13085.  
  13086.  
  13087. ΓòÉΓòÉΓòÉ <hidden> FLOAT Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13088.  
  13089. Description 
  13090.   FLOAT returns the approximate floating-point value of x, with a precision 
  13091.   specified by p. The result has the base and mode of x. 
  13092.  
  13093. Syntax 
  13094.  
  13095. ΓöÇΓöÇΓöÇΓöÇFLOAT(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13096.                ΓööΓöÇ,pΓöÇΓöÿ
  13097.  
  13098.    expression. 
  13099.  
  13100.    integer. It specifies the minimum number of digits in the result. It must 
  13101.    not exceed the implementation limit. If p is omitted, the default value 21 
  13102.    is used for a binary result, or the value 6 is used for a decimal result. 
  13103.  
  13104.  
  13105. ΓòÉΓòÉΓòÉ <hidden> FLOOR Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13106.  
  13107. Description 
  13108.   FLOOR determines the largest integer value less than or equal to x, and 
  13109.   assigns this value to the result. 
  13110.  
  13111.   The mode, base, scale and precision of the result match the argument. Except 
  13112.   when x is fixed-point with precision (p,q), the precision of the result is 
  13113.   given by: 
  13114.  
  13115.     (MIN(N,MAX(p-q+1,1)),0)
  13116.  
  13117.   where N is the maximum number of digits allowed. 
  13118.  
  13119. Syntax 
  13120.  
  13121. ΓöÇΓöÇΓöÇΓöÇΓöÇFLOOR(x)ΓöÇΓöÇΓöÇΓöÇ
  13122.  
  13123.    real expression. 
  13124.  
  13125.  
  13126. ΓòÉΓòÉΓòÉ <hidden> GRAPHIC String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13127.  
  13128. Description 
  13129.   GRAPHIC can be used to explicitly convert character (or mixed character) data 
  13130.   to GRAPHIC data. All other data first converts to character, and then to the 
  13131.   GRAPHIC data type. 
  13132.  
  13133.   GRAPHIC returns the graphic value of x, with a length in graphic characters 
  13134.   specified by y. 
  13135.  
  13136.   Characters convert to graphics, and shift codes, if any, are removed. The 
  13137.   content of x is checked for validity during conversion, using the same rules 
  13138.   as for checking graphic and mixed character constants. 
  13139.  
  13140. Examples 
  13141.   Using the GRAPHIC built-in function 
  13142.  
  13143. Syntax 
  13144.  
  13145. ΓöÇΓöÇΓöÇΓöÇGRAPHIC(xΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13146.                  ΓööΓöÇ,yΓöÇΓöÿ
  13147.  
  13148.    expression. When x is GRAPHIC, it is subject to a length change, with 
  13149.    applicable padding or truncation. The CONVERSION condition is raised if 
  13150.    either half of the graphic character in the string contains a shift code. 
  13151.  
  13152.    When x is non-GRAPHIC, it is converted to character, if necessary. SBCS 
  13153.    characters are converted to equivalent DBCS characters. SBCS '40'X is 
  13154.    converted to '4040'X, while other SBCS characters are converted by inserting 
  13155.    '42'X in the first byte. Shift codes (if any) are discarded; DBCS data is 
  13156.    copied. 
  13157.  
  13158.    The CONVERSION condition is raised for any invalid use of shift codes, with 
  13159.    the exception that the ERROR condition is raised for data ending with half 
  13160.    of a graphic character or for data with a missing shift-in code. 
  13161.  
  13162.    expression. If necessary, y is converted to a real fixed-point binary value. 
  13163.  
  13164.    If y is omitted, the length is determined by the rules for type conversion. 
  13165.  
  13166.    y must not be negative. 
  13167.  
  13168.    If y = 0, the result is the null graphic string. 
  13169.  
  13170.    If y is greater than the length needed to contain the graphic string, the 
  13171.    result is padded with graphic blanks. 
  13172.  
  13173.    If y is less than the length needed to contain the graphic string, the 
  13174.    result is truncated. 
  13175.  
  13176.  
  13177. ΓòÉΓòÉΓòÉ <hidden> Examples- Using the GRAPHIC Built-In Function ΓòÉΓòÉΓòÉ
  13178.  
  13179.  EXAMPLE 1 
  13180.  
  13181.   Conversion from CHARACTER to GRAPHIC, where the target is long enough to 
  13182.   contain the result: 
  13183.  
  13184.     DCL X CHAR (11) VARYING;
  13185.     DCL A GRAPHIC (11);
  13186.     A = GRAPHIC(X,8);
  13187.  
  13188.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13189.     Γöé For X with values Γöé   Intermediate Result  Γöé  A is assigned          Γöé
  13190.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13191.     Γöé ABCDEFGHIJ        Γöé   .A.B.C.D.E.G.H.I.J   Γöé  .A.B.C.D.E.F.G.H.b.b.b Γöé
  13192.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13193.     Γöé 123               Γöé   .1.2.3               Γöé  .1.2.3.b.b.b.b.b.b.b.b Γöé
  13194.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13195.     Γöé 123<.A.B.C>       Γöé   .1.2.3.A.B.C         Γöé  .1.2.3.A.B.C.b.b.b.b.b Γöé
  13196.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13197.  
  13198.     Where .b is a DBCS blank
  13199.  
  13200.  EXAMPLE 2 
  13201.  
  13202.   Conversion from CHARACTER to GRAPHIC, where the target is too short to 
  13203.   contain the result: 
  13204.  
  13205.     DCL X CHAR (10) VARYING;
  13206.     DCL A GRAPHIC (8);
  13207.     A = GRAPHIC(X);
  13208.  
  13209.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13210.     Γöé For X with values Γöé   Intermediate Result  Γöé  A is assigned          Γöé
  13211.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13212.     Γöé ABCDEFGHIJ        Γöé   .A.B.C.D.E.G.H.I.J   Γöé  .A.B.C.D.E.F.G.H       Γöé
  13213.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13214.  
  13215.  
  13216. ΓòÉΓòÉΓòÉ <hidden> HBOUND Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13217.  
  13218. Description 
  13219.   HBOUND returns a FIXED BINARY (31,0) value specifying the current upper bound 
  13220.   of dimension y of x. 
  13221.  
  13222. Syntax 
  13223.  
  13224. ΓöÇΓöÇΓöÇΓöÇHBOUND(x,y)ΓöÇΓöÇΓöÇΓöÇ
  13225.  
  13226.    array expression. X must not have less than y dimensions, and must not be an 
  13227.    array of structures. 
  13228.  
  13229.    expression. It specifies a particular dimension of x. If necessary, y is 
  13230.    converted to a real fixed-point binary value. Y must be greater than or 
  13231.    equal to 1. 
  13232.  
  13233.  
  13234. ΓòÉΓòÉΓòÉ <hidden> HIGH String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13235.  
  13236. Description 
  13237.   HIGH returns a character string of length x, where each character is the 
  13238.   highest character in the collating sequence (hexadecimal FF). 
  13239.  
  13240. Syntax 
  13241.  
  13242. ΓöÇΓöÇΓöÇΓöÇHIGH(x)ΓöÇΓöÇΓöÇΓöÇ
  13243.  
  13244.    expression. If necessary, x is converted to a positive real fixed-point 
  13245.    binary value. If x=0, the result is the null character string. 
  13246.  
  13247.  
  13248. ΓòÉΓòÉΓòÉ <hidden> IMAG Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13249.  
  13250. Description 
  13251.   IMAG returns the coefficient of the imaginary part of x. The mode of the 
  13252.   result is real and has the base, scale, and precision of x. 
  13253.  
  13254. Syntax 
  13255.  
  13256. ΓöÇΓöÇΓöÇΓöÇIMAG(x)ΓöÇΓöÇΓöÇΓöÇ
  13257.  
  13258.    expression. If x is real, it is converted to complex. 
  13259.  
  13260.  
  13261. ΓòÉΓòÉΓòÉ <hidden> IMAG Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  13262.  
  13263. Description 
  13264.   The IMAG pseudovariable assigns a real value or the real part of a complex 
  13265.   value to the coefficient of the imaginary part of x. 
  13266.  
  13267. Syntax 
  13268.  
  13269. ΓöÇΓöÇΓöÇΓöÇIMAG(x)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  13270.  
  13271.    complex reference. 
  13272.  
  13273.  
  13274. ΓòÉΓòÉΓòÉ <hidden> INDEX String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13275.  
  13276. Description 
  13277.   INDEX returns a real fixed-point binary value (15,0) indicating the starting 
  13278.   position within x of a substring identical to y. You can also specify the 
  13279.   location within x at which to begin processing. 
  13280.  
  13281. Syntax 
  13282.  
  13283. ΓöÇΓöÇΓöÇΓöÇINDEX(x,y)ΓöÇΓöÇΓöÇΓöÇ
  13284.  
  13285.    string-expression to be searched. 
  13286.  
  13287.    string-expression to be searched for. 
  13288.  
  13289. If y does not occur in x, or if either x or y have zero length, the value zero 
  13290. is returned. 
  13291.  
  13292. If the first argument is GRAPHIC, the second must be GRAPHIC. If either 
  13293. argument is decimal, conversions are performed to produce character strings. 
  13294. Otherwise the arguments are bit and binary, or both binary, and conversions are 
  13295. performed to produce bit strings. 
  13296.  
  13297.  
  13298. ΓòÉΓòÉΓòÉ <hidden> LBOUND Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13299.  
  13300. Description 
  13301.   LBOUND returns a FIXED BINARY (31,0) value specifying the current lower bound 
  13302.   of dimension y of x. 
  13303.  
  13304. Syntax 
  13305.  
  13306. ΓöÇΓöÇΓöÇΓöÇLBOUND(x,y)ΓöÇΓöÇΓöÇΓöÇ
  13307.  
  13308.    array expression. x must not have less than y dimensions, and must not be an 
  13309.    array of structures. 
  13310.  
  13311.    expression. It specifies the particular dimension of x. If necessary, y is 
  13312.    converted to a real fixed-point binary value. y must be greater than or 
  13313.    equal to 1. 
  13314.  
  13315.  
  13316. ΓòÉΓòÉΓòÉ <hidden> POLY Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13317.  
  13318. Description 
  13319.   POLY returns a floating-point value that is an approximation of a polynomial 
  13320.   formed from two one-dimensional array expressions x and y. The returned value 
  13321.   has a mode and base given by the rules for expression evaluation, and the 
  13322.   precision of the longest argument. 
  13323.  
  13324. Syntax 
  13325.  
  13326. ΓöÇΓöÇΓöÇΓöÇPOLY(x,y)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13327.  
  13328.    x is an array expression defined as x (m:n), where (m:n) represents the 
  13329.    lower and the upper bounds.  If x is a reference to a defined variable, x 
  13330.    must not be iSUB-defined. 
  13331.  
  13332.    y is an array expression defined as y(a:b), where (a:b) represents the lower 
  13333.    and the upper bounds; or, y is an element-expression.  If y is a reference 
  13334.    to a defined variable, y must not be iSUB-defined. 
  13335.  
  13336. Note:   If the arguments are not floating-point, they are converted to floating-point.
  13337.  
  13338.  
  13339. ΓòÉΓòÉΓòÉ <hidden> LENGTH String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13340.  
  13341. Description 
  13342.   LENGTH returns a real fixed-point binary value specifying the current length 
  13343.   of x. 
  13344.  
  13345. Example 
  13346.   Consider the following declaration: 
  13347.  
  13348.     DECLARE A GRAPHIC(3);
  13349.  
  13350.   The DECLARE statement defines 6 bytes of storage for A. Specifying LENGTH(A) 
  13351.   returns the value 3. 
  13352.  
  13353. Syntax 
  13354.  
  13355. ΓöÇΓöÇΓöÇΓöÇLENGTH(x)ΓöÇΓöÇΓöÇΓöÇ
  13356.  
  13357.    string-expression. If x is binary, it is converted to bit string; otherwise, 
  13358.    any other conversion required is to character string. 
  13359.  
  13360.  
  13361. ΓòÉΓòÉΓòÉ <hidden> LINENO Input/Output Built-In Function ΓòÉΓòÉΓòÉ
  13362.  
  13363. Description 
  13364.   LINENO returns a real fixed-point binary value (15,0) specifying the current 
  13365.   line number of x. The file must be open and have the PRINT attribute. 
  13366.  
  13367. Syntax 
  13368.  
  13369. ΓöÇΓöÇΓöÇΓöÇLINENO(x)ΓöÇΓöÇΓöÇΓöÇ
  13370.  
  13371.    file-reference. 
  13372.  
  13373.  
  13374. ΓòÉΓòÉΓòÉ <hidden> LOG Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  13375.  
  13376. Description 
  13377.   LOG returns a floating-point value that is an approximation of the natural 
  13378.   logarithm (that is, the logarithm to the base e) of x. It has the base, mode, 
  13379.   and precision of x. 
  13380.  
  13381. Syntax 
  13382.  
  13383. ΓöÇΓöÇΓöÇΓöÇLOG(x)ΓöÇΓöÇΓöÇΓöÇ
  13384.  
  13385.    expression. If x is real, it must be greater than zero.  If x is complex, it 
  13386.    must not be equal to 0 + 0I. 
  13387.  
  13388.    The function is multiple-valued if x is complex; hence only the principal 
  13389.    value can be returned.  The principal value has the form: 
  13390.  
  13391.       COMPLEX(a,b)
  13392.    where a is nonnegative, and b is with in the range: 
  13393.  
  13394.       -pi<b<=pi
  13395.  
  13396.  
  13397. ΓòÉΓòÉΓòÉ <hidden> LOG2 Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  13398.  
  13399. Description 
  13400.   LOG2 returns a real floating-point value that is an approximation of the 
  13401.   binary logarithm (that is, the logarithm to the base 2) of x. It has the base 
  13402.   and precision of x. 
  13403.  
  13404. Syntax 
  13405.  
  13406. ΓöÇΓöÇΓöÇΓöÇLOG2(x)ΓöÇΓöÇΓöÇΓöÇ
  13407.  
  13408.    real expression. It must be greater than zero. 
  13409.  
  13410.  
  13411. ΓòÉΓòÉΓòÉ <hidden> LOG10 Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  13412.  
  13413. Description 
  13414.   LOG10 returns a real floating-point value that is an approximation of the 
  13415.   common logarithm (that is, the logarithm to the base 10) of x. It has the 
  13416.   base and precision of x. 
  13417.  
  13418. Syntax 
  13419.  
  13420. ΓöÇΓöÇΓöÇΓöÇLOG10(x)ΓöÇΓöÇΓöÇΓöÇ
  13421.  
  13422.    real expression. It must be greater than zero. 
  13423.  
  13424.  
  13425. ΓòÉΓòÉΓòÉ <hidden> LOW String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13426.  
  13427. Description 
  13428.   LOW returns a character string of length x, where each character is the 
  13429.   lowest character in the collating sequence (hexadecimal 00). 
  13430.  
  13431. Syntax 
  13432.  
  13433. ΓöÇΓöÇΓöÇΓöÇLOW(x)ΓöÇΓöÇΓöÇΓöÇ
  13434.  
  13435.    expression. If necessary, x is converted to a positive real fixed-point 
  13436.    binary value. If x=0, the result is the null character string. 
  13437.  
  13438.  
  13439. ΓòÉΓòÉΓòÉ <hidden> MAX Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13440.  
  13441. Description 
  13442.   MAX returns the largest value from a set of one or more expressions. All the 
  13443.   arguments must be real. The result is real, with the common base and scale of 
  13444.   the arguments. 
  13445.  
  13446. Precision of Results 
  13447.   The precision of the results depends upon the precisions of the arguments. 
  13448.  
  13449.     If the arguments are fixed-point with precisions: 
  13450.  
  13451.           (p1,q1),(p2,q2),...,(pn,qn)
  13452.  
  13453.      the precision of the result is given by: 
  13454.  
  13455.           (MIN(N,MAX(p1-q1,p2-q2,...,pn-qn) + MAX(q1,q2,...,qn)),MAX(q1,q2,...,qn))
  13456.  
  13457.      where N is the maximum number of digits allowed. 
  13458.  
  13459.     If the arguments are floating-point with precisions: 
  13460.  
  13461.           p1,p2,p3,...pn
  13462.  
  13463.      then the precision of the result is given by: 
  13464.  
  13465.           MAX(p1,p2,p3,...pn)
  13466.  
  13467. Syntax 
  13468.  
  13469.             ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÉ
  13470.                  Γöé
  13471. ΓöÇΓöÇΓöÇΓöÇMAX(ΓöÇΓöÇΓöÇΓöÇΓöÇxΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13472.  
  13473.    expression. 
  13474.  
  13475.  
  13476. ΓòÉΓòÉΓòÉ <hidden> MIN Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13477.  
  13478. Description 
  13479.   MIN returns the smallest value from a set of one or more expressions. All the 
  13480.   arguments must be real. The result is real with the common base and scale of 
  13481.   the arguments. 
  13482.  
  13483. Precision of Results 
  13484.   The precision of the results depends upon the precision of the arguments. 
  13485.  
  13486.     If the arguments are fixed-point with precisions: 
  13487.  
  13488.           (p1,q1),(p2,q2),...,(pn,qn)
  13489.  
  13490.      the precision of the result is given by: 
  13491.  
  13492.           (MIN(N,MAX(p1-q1,p2-q2,...,pn-qn) + MAX(q1,q2,...,qn)),MAX(q1,q2,...,qn))
  13493.  
  13494.      where N is the maximum number of digits allowed. 
  13495.  
  13496.     If the arguments are floating-point with precisions: 
  13497.  
  13498.           p1,p2,p3,...pn
  13499.  
  13500.      then the precision of the result is given by: 
  13501.  
  13502.           MAX(p1,p2,p3,...pn)
  13503.  
  13504. Syntax 
  13505.  
  13506.             ΓöîΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÉ
  13507.                   Γöé
  13508. ΓöÇΓöÇΓöÇΓöÇMIN(ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇxΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13509.  
  13510.    expression. 
  13511.  
  13512.  
  13513. ΓòÉΓòÉΓòÉ <hidden> MOD Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13514.  
  13515. Description 
  13516.   MOD returns the smallest nonnegative value, R, such that: 
  13517.  
  13518.     (x - R)/y = n
  13519.  
  13520.   where n is an integer value. That is, R is the smallest nonnegative value 
  13521.   that must be subtracted from x to make it divisible by y. 
  13522.  
  13523.   The result, R, is real with the common base and scale of the arguments. 
  13524.  
  13525. Precision of Results 
  13526.  
  13527.     If the result is floating-point, the precision is the greater of those of 
  13528.      x and y. 
  13529.  
  13530.     If the result is fixed-point, the precision is given by: 
  13531.  
  13532.           (MIN(N,p2-q2+MAX(q1,q2)),MAX(q1,q2))
  13533.  
  13534.      where (p1,q1) and (p2,q2) are the precisions of x and y, respectively, and 
  13535.      N is the maximum number of digits allowed. 
  13536.  
  13537. Example 
  13538.   If x and y are fixed-point with different scaling factors, R might be 
  13539.   truncated on the left. This will cause the SIZE condition to be raised, as in 
  13540.   the following example: 
  13541.  
  13542.     MOD(10,8)           /*  is 2  */
  13543.     MOD(-10,8)          /*  is 6  */
  13544.  
  13545. Syntax 
  13546.  
  13547. ΓöÇΓöÇΓöÇΓöÇMOD(x,y)ΓöÇΓöÇΓöÇΓöÇ
  13548.  
  13549.    real expression. 
  13550.  
  13551.    real expression. If y=0, the ZERODIVIDE condition is raised. 
  13552.  
  13553.  
  13554. ΓòÉΓòÉΓòÉ <hidden> MPSTR String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13555.  
  13556. Description 
  13557.   MPSTR returns a mixed character string. The processing of the string is 
  13558.   determined by the rules selected by the expression r, as described below. The 
  13559.   length of the returned string is equal to the length of the expression x, or 
  13560.   to the value specified by y. 
  13561.  
  13562. Syntax 
  13563.  
  13564. ΓöÇΓöÇΓöÇΓöÇMPSTR(x,rΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13565.                  ΓööΓöÇ,yΓöÇΓöÿ
  13566.  
  13567.    expression that yields the character string result. x cannot be GRAPHIC. x 
  13568.    is converted to character if necessary. 
  13569.  
  13570.    expression that yields a character result; r specifies the rules to be used 
  13571.    for processing the string. It is valid only in an EBCDIC environment and it 
  13572.    is ignored in an ASCII environment. R cannot be GRAPHIC, and is converted to 
  13573.    character if necessary. 
  13574.  
  13575.    The characters that can be used in r and their usage rules are as follows: 
  13576.  
  13577.    V or v 
  13578.       Validates the mixed string x for balanced, unnested so/si pairs and 
  13579.       returns a mixed string that has balanced pairs. V does not remove 
  13580.       adjacent so/si pairs. If x contains unbalanced or nested so/si pairs, 
  13581.       ERROR condition is raised. 
  13582.  
  13583.    S or s 
  13584.       Removes adjacent so/si pairs and any null DBCS strings and creates a new 
  13585.       string. Returns a mixed string with balanced so/si pairs. 
  13586.  
  13587.    If both V and S are specified, V takes precedence over S, regardless of the 
  13588.    order in which they were specified. 
  13589.  
  13590.    If S is specified without V, the string x is assumed to be a valid string. 
  13591.    If the string is not valid, undefined results occur. 
  13592.  
  13593.    expression. If necessary, y is converted to a FIXED BINARY (15,0) value. If 
  13594.    y is omitted, the length is determined by the rules for type conversion. 
  13595.  
  13596.    y cannot be negative. If y = 0, the result is the null character string. If 
  13597.    y is greater than the length needed to contain x, the result is padded with 
  13598.    blanks. 
  13599.  
  13600.    If y is less than the length needed to contain x, the result is truncated 
  13601.    by: 
  13602.  
  13603.     Discarding excess characters from the right (if they are SBCS characters) 
  13604.  
  13605.      or 
  13606.  
  13607.     Discarding as many DBCS characters (2-byte pairs) as needed. A shift-in is 
  13608.      inserted to make the DBCS data valid in an EBCDIC environment. 
  13609.  
  13610.  
  13611. ΓòÉΓòÉΓòÉ <hidden> MULTIPLY Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  13612.  
  13613. Description 
  13614.   MULTIPLY returns the product of x and y, with a precision specified by p and 
  13615.   q. The base, scale, and mode of the result are determined by the rules for 
  13616.   expression evaluation. 
  13617.  
  13618. Syntax 
  13619.  
  13620. ΓöÇΓöÇΓöÇΓöÇMULTIPLY(x,y,pΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13621.                       ΓööΓöÇ,qΓöÇΓöÿ
  13622.  
  13623. x and y 
  13624.    expressions. 
  13625.  
  13626.    integer. Specifies the number of digits to be maintained throughout the 
  13627.    operation. It must not exceed the implementation limit for the base and 
  13628.    scale of the result. 
  13629.  
  13630.    optionally-signed integer. It specifies the scaling factor of the result. 
  13631.    For a fixed-point result, if q is omitted, a scaling factor of zero is 
  13632.    assumed. For a floating-point result, q must be omitted. 
  13633.  
  13634.  
  13635. ΓòÉΓòÉΓòÉ <hidden> NULL Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  13636.  
  13637. Description 
  13638.   NULL returns the null pointer value. The null pointer value does not identify 
  13639.   any generation of a variable. The null pointer value can be converted to 
  13640.   OFFSET by assignment of the built-in function value to an offset variable. 
  13641.  
  13642. Syntax 
  13643.  
  13644. ΓöÇΓöÇΓöÇΓöÇNULLΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13645.              ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13646.  
  13647.  
  13648. ΓòÉΓòÉΓòÉ <hidden> OFFSET Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  13649.  
  13650. Description 
  13651.   OFFSET returns an offset value derived from a pointer reference x and 
  13652.   relative to an area y. If x is the null pointer value, the null offset value 
  13653.   is returned. 
  13654.  
  13655. Syntax 
  13656.  
  13657. ΓöÇΓöÇΓöÇΓöÇOFFSET(x,y)ΓöÇΓöÇΓöÇΓöÇ
  13658.  
  13659.    pointer reference. It must identify a generation of a based variable within 
  13660.    the area y, or be the null pointer value. 
  13661.  
  13662.    area reference. 
  13663.  
  13664. Note:   If x is an element reference, y must be an element variable. 
  13665.  
  13666.  
  13667. ΓòÉΓòÉΓòÉ <hidden> ONCHAR Condition-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13668.  
  13669. Description 
  13670.   ONCHAR returns a 1-character string containing the character that caused the 
  13671.   CONVERSION condition to be raised. It is in context in an ON-unit (or any of 
  13672.   its dynamic descendants) for the CONVERSION condition or for the ERROR or 
  13673.   FINISH condition raised as the implicit action for the CONVERSION condition. 
  13674.  
  13675.   Note:   If the ONCHAR built-in function is used out of context, a blank is 
  13676.   returned, unless ONCHAR has a value given to it by an assignment to the 
  13677.   pseudovariable out of context. In this case, the character assigned to the 
  13678.   pseudovariable is returned by the built-in function. 
  13679.  
  13680. Syntax 
  13681.  
  13682. ΓöÇΓöÇΓöÇΓöÇONCHARΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13683.                ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13684.  
  13685.  
  13686. ΓòÉΓòÉΓòÉ <hidden> ONCHAR Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  13687.  
  13688. Description 
  13689.   The ONCHAR pseudovariable sets the current value of the ONCHAR built-in 
  13690.   function. The element value assigned to the pseudovariable is converted to a 
  13691.   character value of length 1. The new character is used when the conversion is 
  13692.   re-attempted. 
  13693.  
  13694.   Note:   If the pseudovariable is used out of context, and the next reference 
  13695.   to the built-in function is also out of context, the character assigned to 
  13696.   the pseudovariable is returned. The out-of-context assignment is otherwise 
  13697.   ignored. 
  13698.  
  13699. Related Information 
  13700.   ONCHAR built-in function 
  13701.  
  13702. Syntax 
  13703.  
  13704. ΓöÇΓöÇΓöÇΓöÇONCHARΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13705.                ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13706.  
  13707.  
  13708. ΓòÉΓòÉΓòÉ <hidden> ONCODE Condition-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13709.  
  13710. Description 
  13711.   The ONCODE built-in function provides a fixed-point binary value (15,0) that 
  13712.   depends on the cause of the last condition. ONCODE can be used to distinguish 
  13713.   between the various circumstances that raise a particular condition (for 
  13714.   instance, the ERROR condition). 
  13715.  
  13716.   ONCODE returns a real fixed-point binary value that is the condition code. It 
  13717.   is in context in any ON-unit or its dynamic descendant. 
  13718.  
  13719.   Note:   If ONCODE is used out of context, zero is returned. 
  13720.  
  13721. Syntax 
  13722.  
  13723. ΓöÇΓöÇΓöÇΓöÇONCODEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13724.                ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13725.  
  13726.  
  13727. ΓòÉΓòÉΓòÉ <hidden> ONCOUNT Condition-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13728.  
  13729. Description 
  13730.   ONCOUNT returns a real fixed-point binary FIXED BINARY (15,0) value 
  13731.   specifying the number of conditions that remain to be handled when an ON-unit 
  13732.   is entered. It is in context in any ON-unit, or any dynamic descendant of an 
  13733.   ON-unit. 
  13734.  
  13735.   Note:   If ONCOUNT is used out of context, zero is returned. 
  13736.  
  13737. Syntax 
  13738.  
  13739. ΓöÇΓöÇΓöÇΓöÇONCOUNTΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13740.                 ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13741.  
  13742.  
  13743. ΓòÉΓòÉΓòÉ <hidden> ONFILE Condition-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13744.  
  13745. Description 
  13746.   ONFILE returns a character string whose value is the name of the file for 
  13747.   which an input/output or CONVERSION condition is raised. If the name is a 
  13748.   DBCS name, it will be returned as a mixed character string. It is in context 
  13749.   in the following circumstances: 
  13750.  
  13751.     In an ON-unit, or any of its dynamic descendants 
  13752.  
  13753.     For any input/output or CONVERSION condition 
  13754.  
  13755.     For the ERROR or FINISH condition raised as implicit action for an 
  13756.      input/output or the CONVERSION condition. 
  13757.  
  13758. Syntax 
  13759.  
  13760. ΓöÇΓöÇΓöÇΓöÇONFILEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13761.                ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13762.  
  13763.  
  13764. ΓòÉΓòÉΓòÉ <hidden> ONKEY Condition Handling Built-In Function ΓòÉΓòÉΓòÉ
  13765.  
  13766. Description 
  13767.   ONKEY returns a character string whose value is the key of the record that 
  13768.   raised an input/output condition. ONKEY is always set for operations on a 
  13769.   KEYED file, even if the statement that raised the condition has not specified 
  13770.   the KEY, KEYTO, or KEYFROM options. For indexed files, if the key is GRAPHIC, 
  13771.   the string is returned as a mixed character string. It is in context in the 
  13772.   following circumstances: 
  13773.  
  13774.     An ON-unit, or any of its dynamic descendants 
  13775.  
  13776.     For any input/output condition, except ENDFILE 
  13777.  
  13778.     For the ERROR or FINISH condition raised as implicit action for an 
  13779.      input/output condition. 
  13780.  
  13781.      Note:   If ONKEY is used out of context, a null string is returned. 
  13782.  
  13783. Results 
  13784.   The results of specifying ONKEY in context are: 
  13785.  
  13786.     For any input/output condition (other than ENDFILE), or for the ERROR or 
  13787.      FINISH condition raised as implicit action for these conditions, the 
  13788.      result is the value of the recorded key from the I/O statement causing the 
  13789.      error. 
  13790.  
  13791.     For relative data sets, the result is a character string representation of 
  13792.      the relative record number. If the key was incorrectly specified, the 
  13793.      result is the last 8 characters of the source key. If the source key is 
  13794.      less than 8 characters, it is padded on the right with blanks to make it 8 
  13795.      characters. If the key was correctly specified, the character string 
  13796.      consists of the relative record number in character form padded on the 
  13797.      left with blanks, if necessary. 
  13798.  
  13799.     For a REWRITE statement that attempts to write an updated record on to an 
  13800.      indexed data set when the key of the updated record differs from that of 
  13801.      the input record, the result is the value of the embedded key of the input 
  13802.      record. 
  13803.  
  13804. Syntax 
  13805.  
  13806. ΓöÇΓöÇΓöÇΓöÇONKEYΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13807.               ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13808.  
  13809.  
  13810. ΓòÉΓòÉΓòÉ <hidden> ONLOC Condition-Handling Built-In Function ΓòÉΓòÉΓòÉ
  13811.  
  13812. Description 
  13813.   ONLOC returns a character string whose value is the name of the entry-point 
  13814.   used for the current invocation of the procedure in which a condition was 
  13815.   raised. If the name is a DBCS name, it is returned as a mixed character 
  13816.   string. It is in context in any ON-unit, or in any of its dynamic 
  13817.   descendants. 
  13818.  
  13819.   Note:   If ONLOC is used out of context, a null string is returned. 
  13820.  
  13821. Syntax 
  13822.  
  13823. ΓöÇΓöÇΓöÇΓöÇONLOCΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13824.               ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13825.  
  13826.  
  13827. ΓòÉΓòÉΓòÉ <hidden> ONSOURCE Condition Handling Built-In Function ΓòÉΓòÉΓòÉ
  13828.  
  13829. Description 
  13830.   ONSOURCE returns a character string whose value is the contents of the field 
  13831.   that was being processed when the CONVERSION condition was raised. It is in 
  13832.   context in an ON-unit, or any of its dynamic descendants, for the CONVERSION 
  13833.   condition or for the ERROR or FINISH condition raised as the implicit action 
  13834.   for the CONVERSION condition. 
  13835.  
  13836.   Note:   If ONSOURCE is used out of context, a null string is returned. 
  13837.  
  13838. Syntax 
  13839.  
  13840. ΓöÇΓöÇΓöÇΓöÇONSOURCEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13841.                  ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13842.  
  13843.  
  13844. ΓòÉΓòÉΓòÉ <hidden> ONSOURCE Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  13845.  
  13846. Description 
  13847.   The pseudovariable sets the current value of the ONSOURCE built-in function. 
  13848.   The element value assigned to the pseudovariable is converted to a character 
  13849.   string and, if necessary, is padded on the right with blanks or truncated to 
  13850.   match the length of the field that raised the CONVERSION condition. The new 
  13851.   string is used when the conversion is re-attempted. 
  13852.  
  13853.   When conversion is re-attempted, the string assigned to the pseudovariable is 
  13854.   processed as a single data item. For this reason, the error correction 
  13855.   process should not assign a string containing more than one data item when 
  13856.   the conversion occurs during the execution of a GET LIST or GET DATA 
  13857.   statement. The presence of blanks or commas in the string could raise 
  13858.   CONVERSION again. 
  13859.  
  13860. Syntax 
  13861.  
  13862. ΓöÇΓöÇΓöÇΓöÇONSOURCEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13863.                  ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13864.  
  13865.  
  13866. ΓòÉΓòÉΓòÉ <hidden> PLICANC Built-In Subroutine ΓòÉΓòÉΓòÉ
  13867.  
  13868. Description 
  13869.   This built-in subroutine allows you to cancel automatic restart activity. 
  13870.  
  13871. Syntax 
  13872.  
  13873. ΓöÇΓöÇΓöÇΓöÇΓöÇPLICANCΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13874.  
  13875.  
  13876. ΓòÉΓòÉΓòÉ <hidden> PLICKPT Built-In Subroutine ΓòÉΓòÉΓòÉ
  13877.  
  13878. Description 
  13879.   This built-in subroutine allows you to take a checkpoint for later restart. 
  13880.   It also allows you to request, at suitable points in your program, that a 
  13881.   checkpoint record is written. 
  13882.  
  13883. Syntax 
  13884.  
  13885.                 ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13886.                             Γöé
  13887. ΓöÇΓöÇΓöÇΓöÇΓöÇPLICKPT(ΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13888.  
  13889.  
  13890. ΓòÉΓòÉΓòÉ <hidden> PLIDUMP Built-In Subroutine ΓòÉΓòÉΓòÉ
  13891.  
  13892. Description 
  13893.   The PLIDUMP built-in subroutine allows you to obtain a formatted dump of 
  13894.   selected parts of storage used by your program. 
  13895.  
  13896. Syntax 
  13897.  
  13898.                  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13899.                              Γöé
  13900. ΓöÇΓöÇΓöÇΓöÇPLIDUMP(ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  13901.  
  13902.  
  13903. ΓòÉΓòÉΓòÉ <hidden> PLIREST Built-In Subroutine ΓòÉΓòÉΓòÉ
  13904.  
  13905. Description 
  13906.   This built-in subroutine allows you to restart program execution. 
  13907.  
  13908. Syntax 
  13909.  
  13910. ΓöÇΓöÇΓöÇΓöÇPLIRESTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13911.  
  13912.  
  13913. ΓòÉΓòÉΓòÉ <hidden> PLIRETC Built-In Subroutine ΓòÉΓòÉΓòÉ
  13914.  
  13915. Description 
  13916.   The PLIRETC built-in subroutine allows you to set a return code that can be 
  13917.   examined by the program or (sub)system that invoked this PL/I program or by 
  13918.   another PL/I procedure via the PLIRETV built-in function. 
  13919.  
  13920. Related Information 
  13921.   PLIRETV built-in function 
  13922.  
  13923. Syntax 
  13924.  
  13925. ΓöÇΓöÇΓöÇΓöÇPLIRETC(return-code)ΓöÇΓöÇΓöÇΓöÇ
  13926.  
  13927.  
  13928. ΓòÉΓòÉΓòÉ <hidden> PLIRETV Miscellaneous Built-In Function ΓòÉΓòÉΓòÉ
  13929.  
  13930. Description 
  13931.   PLIRETV returns a FIXED BINARY (31,0) value that is the PL/I return code. 
  13932.  
  13933.   The value of the PL/I return code is any one of the following: 
  13934.  
  13935.     The most recent value specified by a CALL PLIRETC statement 
  13936.  
  13937.     The value returned by an Assembler routine whose entry-point is declared 
  13938.      with the option OPTIONS(RETCODE) 
  13939.  
  13940.     Zero. 
  13941.  
  13942. Syntax 
  13943.  
  13944. ΓöÇΓöÇΓöÇΓöÇPLIRETVΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  13945.                 ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  13946.  
  13947.  
  13948. ΓòÉΓòÉΓòÉ <hidden> PLISRTA Built-In Subroutine ΓòÉΓòÉΓòÉ
  13949.  
  13950. Description 
  13951.   This built-in subroutine allows you to use DFSORT to sort an input file to 
  13952.   produce a sorted output file. 
  13953.  
  13954. Syntax 
  13955.  
  13956.                   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13957.                               Γöé
  13958. ΓöÇΓöÇΓöÇΓöÇΓöÇPLISRTA(ΓöÇΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13959.  
  13960.  
  13961. ΓòÉΓòÉΓòÉ <hidden> PLISRTB Built-In Subroutine ΓòÉΓòÉΓòÉ
  13962.  
  13963. Description 
  13964.   This built-in subroutine allows you to use DFSORT to sort input records 
  13965.   provided by an E15 PL/I exit procedure to produce a sorted output file. 
  13966.  
  13967. Syntax 
  13968.  
  13969.                   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13970.                              Γöé
  13971. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇPLISRTB(ΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13972.  
  13973.  
  13974. ΓòÉΓòÉΓòÉ <hidden> PLISRTC Built-In Subroutine ΓòÉΓòÉΓòÉ
  13975.  
  13976. Description 
  13977.   This built-in subroutine allows you to use DFSORT to sort an input file to 
  13978.   produce sorted records that are processed by an E35 PL/I exit routine. 
  13979.  
  13980. Syntax 
  13981.  
  13982.                   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13983.                              Γöé
  13984. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇPLISRTC(ΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓö┤ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13985.  
  13986.  
  13987. ΓòÉΓòÉΓòÉ <hidden> PLISRTD Built-In Subroutine ΓòÉΓòÉΓòÉ
  13988.  
  13989. Description 
  13990.   This built-in subroutine allows you to use DFSORT to sort input records 
  13991.   provided by an E15 PL/I exit procedure to produce sorted records that are 
  13992.   processed by an E35 PL/I exit procedure. 
  13993.  
  13994. Syntax 
  13995.  
  13996.                   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13997.                              Γöé
  13998. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇPLISRTD(ΓöÇΓöÇΓöÇΓöÇargumentΓöÇΓöÇΓö┤ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  13999.  
  14000.  
  14001. ΓòÉΓòÉΓòÉ <hidden> PLITEST Built-In Subroutine ΓòÉΓòÉΓòÉ
  14002.  
  14003. Description 
  14004.   The PLITEST built-in subroutine allows you to invoke the interactive test 
  14005.   facility. 
  14006.  
  14007. Syntax 
  14008.  
  14009. ΓöÇΓöÇΓöÇΓöÇΓöÇPLITESTΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  14010.                ΓööΓöÇ(command-list)ΓöÇΓöÿ
  14011.  
  14012.  
  14013. ΓòÉΓòÉΓòÉ <hidden> POINTER Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  14014.  
  14015. Description 
  14016.   POINTER returns a pointer value that identifies the generation specified by 
  14017.   an offset reference x, in an area specified by y. If x is the null offset 
  14018.   value, the null pointer value is returned. 
  14019.  
  14020.   Generations of based variables in different areas are equivalent if, up to 
  14021.   the allocation of the latest generation, the variables have been allocated 
  14022.   and freed the same number of times as each other. 
  14023.  
  14024. Syntax 
  14025.  
  14026. ΓöÇΓöÇΓöÇΓöÇPOINTER(x,y)ΓöÇΓöÇΓöÇΓöÇ
  14027.  
  14028. Abbreviation:  PTR 
  14029.  
  14030.    offset reference. It can be the null offset value. If it is not, x must 
  14031.    identify a generation of a based variable, but not necessarily in y. If it 
  14032.    is not in y, the generation must be equivalent to a generation in y. 
  14033.  
  14034.    area reference. 
  14035.  
  14036.  
  14037. ΓòÉΓòÉΓòÉ <hidden> POINTERADD Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  14038.  
  14039. Description 
  14040.   POINTERADD returns a pointer value that is the sum of its arguments. 
  14041.  
  14042.   POINTERADD can be used as a locator for a based variable. POINTERADD can also 
  14043.   be used for subtraction by prefixing the operand to be subtracted with a 
  14044.   minus sign. 
  14045.  
  14046. Syntax 
  14047.  
  14048. ΓöÇΓöÇΓöÇΓöÇPOINTERADD(x,y)ΓöÇΓöÇΓöÇΓöÇ
  14049.  
  14050. Abbreviation:  PTRADD 
  14051.  
  14052.    pointer expression. 
  14053.  
  14054.    expression. Y must have a computational type and should be declared REAL 
  14055.    FIXED with a scale factor of 0. If not, it is converted to REAL FIXED 
  14056.    BIN(31,0). 
  14057.  
  14058.  
  14059. ΓòÉΓòÉΓòÉ <hidden> POINTERVALUE Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  14060.  
  14061. Description 
  14062.   POINTERVALUE returns a pointer value that is the value of x converted from 
  14063.   OFFSET. 
  14064.  
  14065.   POINTERVALUE(x) can be used to initialize static pointer variables if x is a 
  14066.   constant. 
  14067.  
  14068. Syntax 
  14069.  
  14070. ΓöÇΓöÇΓöÇΓöÇPOINTERVALUE(x)ΓöÇΓöÇΓöÇΓöÇ
  14071.  
  14072. Abbreviation:  PTRVALUE 
  14073.  
  14074.    expression. X must have a computational type and should be declared REAL 
  14075.    FIXED with a scale factor of 0. If not, it is converted to REAL FIXED 
  14076.    BIN(31,0). 
  14077.  
  14078.  
  14079. ΓòÉΓòÉΓòÉ <hidden> STORAGE Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  14080.  
  14081. Description 
  14082.   STORAGE returns a FIXED BINARY (31,0) value giving the implementation defined 
  14083.   storage, in bytes, allocated to a variable x. 
  14084.  
  14085. Usage Rules 
  14086.  
  14087.     STORAGE cannot be used to obtain the storage requirements of a structure 
  14088.      mapped according to the COBOL mapping algorithm. 
  14089.  
  14090.     x cannot be: 
  14091.  
  14092.       - A BASED, DEFINED, parameter, subscripted, or structure-base element 
  14093.         variable that is an unaligned fixed-length bit string. 
  14094.  
  14095.       - A minor structure whose first or last base element is an unaligned 
  14096.         fixed-length bit string (except where it is also the first or the last 
  14097.         element of the containing major structure). 
  14098.  
  14099.       - A major structure that has the BASED, DEFINED, or parameter attribute 
  14100.         and which has an unaligned fixed-length bit string as its first or its 
  14101.         last element. 
  14102.  
  14103.       - A variable that is not in connected storage. 
  14104.  
  14105.     The value returned by STORAGE(x) is the maximum number of bytes that could 
  14106.      be transmitted in the following circumstances: 
  14107.  
  14108.           DECLARE F FILE RECORD INPUT
  14109.                   ENVIRONMENT(SCALARVARYING)
  14110.           READ FILE(F) INTO(x);
  14111.  
  14112.     If x is: 
  14113.  
  14114.       - A varying length string, the returned value includes the length-prefix 
  14115.         of the string and the number of bytes in the maximum length of the 
  14116.         string. 
  14117.  
  14118.       - An area, the returned value includes the area control bytes and the 
  14119.         maximum size of the area. 
  14120.  
  14121.       - An aggregate containing areas or varying-length strings, the returned 
  14122.         value includes the area control bytes, the maximum sizes of the areas, 
  14123.         length prefixes of the strings, and the number of bytes in the maximum 
  14124.         lengths of the strings. 
  14125.  
  14126. Syntax 
  14127.  
  14128. ΓöÇΓöÇΓöÇΓöÇSTORAGE(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  14129.  
  14130. Abbreviation:  STG 
  14131.  
  14132.    a variable of any data type, data organization, alignment, and storage 
  14133.    class, except for those listed above (see "Usage Rules"). 
  14134.  
  14135.  
  14136. ΓòÉΓòÉΓòÉ <hidden> PRECISION Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  14137.  
  14138. Description 
  14139.   PRECISION returns the value of x, with a precision specified by p and q. The 
  14140.   base, mode, and scale of the returned value are the same as that of x. 
  14141.  
  14142. Syntax 
  14143.  
  14144. ΓöÇΓöÇΓöÇΓöÇPRECISION(x,pΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  14145.                      ΓööΓöÇ,qΓöÇΓöÿ
  14146.  
  14147. Abbreviation:  PREC 
  14148.  
  14149.    expression. 
  14150.  
  14151.    integer. P specifies the number of digits that the value of the expression x 
  14152.    is to have after conversion. It must not exceed the implementation limit for 
  14153.    the base and scale. 
  14154.  
  14155.    optionally-signed integer. It specifies the scaling factor of the result. 
  14156.    For a fixed-point result, if q is omitted, a scaling factor of zero is 
  14157.    assumed. For a floating-point result, q must be omitted. 
  14158.  
  14159.  
  14160. ΓòÉΓòÉΓòÉ <hidden> PROD Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14161.  
  14162. Description 
  14163.   PROD returns the product of all the elements in x. 
  14164.  
  14165.   The result has the precision of x, except that the result for fixed-point 
  14166.   integer values and strings is fixed-point with precision (n,0), where n is 
  14167.   the maximum number of digits allowed. 
  14168.  
  14169.   The base and mode match the converted argument x. 
  14170.  
  14171. Syntax 
  14172.  
  14173. ΓöÇΓöÇΓöÇΓöÇPROD(x)ΓöÇΓöÇΓöÇΓöÇ
  14174.  
  14175.    array reference. If the elements of x are strings, they are converted to 
  14176.    fixed-point integer values. 
  14177.  
  14178.    If the elements of x are not fixed-point integer values or strings, they are 
  14179.    converted to floating-point and the result is floating-point. 
  14180.  
  14181.  
  14182. ΓòÉΓòÉΓòÉ <hidden> REAL Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  14183.  
  14184. Description 
  14185.   REAL returns the real part of x. The result has the base, scale, and 
  14186.   precision of x. 
  14187.  
  14188. Syntax 
  14189.  
  14190. ΓöÇΓöÇΓöÇΓöÇREAL(x)ΓöÇΓöÇΓöÇΓöÇ
  14191.  
  14192.    expression. If x is real, it is converted to complex. 
  14193.  
  14194.  
  14195. ΓòÉΓòÉΓòÉ <hidden> REAL Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  14196.  
  14197. Description 
  14198.   The REAL pseudovariable assigns a real value or the real part of a complex 
  14199.   value to the real part of x. 
  14200.  
  14201. Syntax 
  14202.  
  14203. ΓöÇΓöÇΓöÇΓöÇREAL(x)ΓöÇΓöÇΓöÇΓöÇ
  14204.  
  14205.    complex reference. 
  14206.  
  14207.  
  14208. ΓòÉΓòÉΓòÉ <hidden> STATUS Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  14209.  
  14210. Description 
  14211.   The pseudovariable sets the status value of an event-reference x. The 
  14212.   variable can be active or inactive, and complete or incomplete. The value 
  14213.   assigned to the pseudovariable is converted to FIXED BINARY (15,0), if 
  14214.   necessary.  No interrupt can occur during each assignment to the 
  14215.   pseudovariable. 
  14216.  
  14217. Syntax 
  14218.  
  14219. ΓöÇΓöÇΓöÇΓöÇΓöÇSTATUS(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  14220.  
  14221.    specifies an event-reference. 
  14222.  
  14223.  
  14224. ΓòÉΓòÉΓòÉ <hidden> REPEAT String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14225.  
  14226. Description 
  14227.   REPEAT returns a bit or character string consisting of x concatenated to 
  14228.   itself the number of times specified by y. That is, there will be (y+1) 
  14229.   occurrences of x. 
  14230.  
  14231.   If y is zero or negative, the string x is returned. 
  14232.  
  14233.   REPEAT does not support GRAPHIC data. 
  14234.  
  14235. Syntax 
  14236.  
  14237. ΓöÇΓöÇΓöÇΓöÇREPEAT(x,y)ΓöÇΓöÇΓöÇΓöÇ
  14238.  
  14239.    bit- or character-expression to be repeated. If x is arithmetic and binary, 
  14240.    it is converted to bit string If x is arithmetic and decimal, it is 
  14241.    converted to character string. 
  14242.  
  14243.    expression. If necessary, y is converted to a real fixed-point binary value 
  14244.    (15,0). 
  14245.  
  14246.  
  14247. ΓòÉΓòÉΓòÉ <hidden> ROUND Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  14248.  
  14249. Description 
  14250.   ROUND is used to round the value of x at a digit specified by n. The result 
  14251.   has the mode, base, and scale of x. 
  14252.  
  14253.   The precision of a fixed-point result is given by: 
  14254.  
  14255.     (MAX(1,MIN(p-q+1+n,N)),n)
  14256.  
  14257.   where (p,q) is the precision of x, and N is the maximum number of digits 
  14258.   allowed. Thus, n specifies the scaling factor of the result. 
  14259.  
  14260. Example 
  14261.   Consider the following example: 
  14262.  
  14263.     DCL X FIXED DEC(5,4) INIT(6.6666);
  14264.     PUT (ROUND(X,2));
  14265.  
  14266.   The value 6.67 is returned by ROUND. 
  14267.  
  14268. Syntax 
  14269.  
  14270. ΓöÇΓöÇΓöÇΓöÇROUND(x,y)ΓöÇΓöÇΓöÇΓöÇ
  14271.  
  14272.    real expression. If x is negative, the absolute value is rounded and the 
  14273.    sign is restored. 
  14274.  
  14275.    optionally-signed integer. It specifies the digit at which rounding is to 
  14276.    occur. Y must conform to the limits of scaling-factors for FIXED data. If y 
  14277.    is greater than 0, rounding occurs at the (y)th digit to the right of the 
  14278.    point. If y is zero or negative, rounding occurs at the (1-y)th digit to the 
  14279.    left of the point.  The valid range of y is: 127is greater than or equal to 
  14280.    y, and y is greater than or equal to -128. 
  14281.  
  14282. If x is floating-point, y must be specified but is ignored; the rightmost bit 
  14283. of the machine representation of the mantissa is set to 1, and the result has 
  14284. the precision of x. 
  14285.  
  14286. If x is negative, the absolute value is rounded and the sign is restored. 
  14287.  
  14288.  
  14289. ΓòÉΓòÉΓòÉ <hidden> SAMEKEY Input/Output Built-In Function ΓòÉΓòÉΓòÉ
  14290.  
  14291. Description 
  14292.   SAMEKEY returns a bit string of length 1 indicating whether a record that has 
  14293.   been accessed is followed by another with the same key. 
  14294.  
  14295.   Upon successful completion of an input/output operation on file x, or 
  14296.   immediately before the RECORD condition is raised, the value accessed by 
  14297.   SAMEKEY is set to '1'B if the record processed is followed by another record 
  14298.   with the same key, and set to '0'B if it is not. 
  14299.  
  14300.   The value accessed by SAMEKEY is also set to '0'B if: 
  14301.  
  14302.     An input/output operation that raises a condition other than RECORD also 
  14303.      causes file positioning to be changed or lost. 
  14304.  
  14305.     The file is not open. 
  14306.  
  14307.     The file is not associated with a VSAM path assessing a data set through 
  14308.      an alternate index. 
  14309.  
  14310.     The record processed is not followed by another record with the same key. 
  14311.  
  14312. Syntax 
  14313.  
  14314. ΓöÇΓöÇΓöÇΓöÇSAMEKEY(x)ΓöÇΓöÇΓöÇΓöÇ
  14315.  
  14316.    file reference. The file must have the RECORD attribute. 
  14317.  
  14318.  
  14319. ΓòÉΓòÉΓòÉ <hidden> SIGN Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  14320.  
  14321. Description 
  14322.   SIGN returns a FIXED BINARY (15,0) value that indicates whether x is 
  14323.   positive, zero, or negative. 
  14324.  
  14325.   The returned value is given by: 
  14326.  
  14327.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14328.      Γöé Value of x  Γöé  Value Returned Γöé
  14329.      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14330.      Γöé   x > 0     Γöé      +1         Γöé
  14331.      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14332.      Γöé   x = 0     Γöé       0         Γöé
  14333.      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14334.      Γöé   X < 0     Γöé      -1         Γöé
  14335.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14336.  
  14337. Syntax 
  14338.  
  14339. ΓöÇΓöÇΓöÇΓöÇSIGN(x)ΓöÇΓöÇΓöÇΓöÇ
  14340.  
  14341.    real expression. 
  14342.  
  14343.  
  14344. ΓòÉΓòÉΓòÉ <hidden> SIN Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14345.  
  14346. Description 
  14347.   SIN returns a floating-point value that is an approximation of the sine of x. 
  14348.   It has the base, mode, and precision of x. 
  14349.  
  14350. Syntax 
  14351.  
  14352. ΓöÇΓöÇΓöÇΓöÇSIN(x)ΓöÇΓöÇΓöÇΓöÇ
  14353.  
  14354.    expression whose value is in radians. 
  14355.  
  14356.    If X = COMPLEX(a,b), the value of the result is given by : 
  14357.  
  14358.       COMPLEX(SIN(a)*COSH(b),COS(a)*SINH(b))
  14359.  
  14360.  
  14361. ΓòÉΓòÉΓòÉ <hidden> SIND Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14362.  
  14363. Description 
  14364.   SIND returns a real floating-point value that is an approximation of the sine 
  14365.   of x. It has the base and precision of x. 
  14366.  
  14367. Syntax 
  14368.  
  14369. ΓöÇΓöÇΓöÇΓöÇSIND(x)ΓöÇΓöÇΓöÇΓöÇ
  14370.  
  14371.    real expression whose value is in degrees. 
  14372.  
  14373.  
  14374. ΓòÉΓòÉΓòÉ <hidden> SINH Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14375.  
  14376. Description 
  14377.   SINH returns a floating-point value that represents an approximation of the 
  14378.   hyperbolic sine of x. It has the base, mode, and precision of x. 
  14379.  
  14380. Syntax 
  14381.  
  14382. ΓöÇΓöÇΓöÇΓöÇSINH(x)ΓöÇΓöÇΓöÇΓöÇ
  14383.  
  14384.    expression whose value is in radians. 
  14385.  
  14386.    If x = COMPLEX(a,b), the value of the result is given by: 
  14387.  
  14388.       COMPLEX(SINH(a)*COS(b),COSH(a)*SIN(b))
  14389.  
  14390.  
  14391. ΓòÉΓòÉΓòÉ <hidden> SQRT Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14392.  
  14393. Description 
  14394.   SQRT returns a floating-point value that is an approximation of the positive 
  14395.   square root of x. It has the base, mode, and precision of x. 
  14396.  
  14397. Syntax 
  14398.  
  14399. ΓöÇΓöÇΓöÇΓöÇSQRT(x)ΓöÇΓöÇΓöÇΓöÇ
  14400.  
  14401.    expression. If x is real, it must not be less than zero. 
  14402.  
  14403.    If x = COMPLEX(a,b), the value of the result is given by: If x is complex, 
  14404.    the function is multiple-valued; hence, only the principal value can be 
  14405.    returned.  The principal value has the form COMPLEX(a,b). 
  14406.  
  14407.  
  14408. ΓòÉΓòÉΓòÉ <hidden> STRING Miscellaneous Built-In Function ΓòÉΓòÉΓòÉ
  14409.  
  14410. Description 
  14411.   STRING returns an element bit or character string that is the concatenation 
  14412.   of all the elements of x. 
  14413.  
  14414. Syntax 
  14415.  
  14416. ΓöÇΓöÇΓöÇΓöÇSTRING(x)ΓöÇΓöÇΓöÇΓöÇ
  14417.  
  14418.    aggregate or element reference. Each base element of x must be either all 
  14419.    bit-string, or all character-string and/or numeric character, in any 
  14420.    combination. 
  14421.  
  14422.    If x is a structure that has padding caused by ALIGNED elements, the padding 
  14423.    is not included in the result. 
  14424.  
  14425.    If any of the strings in the aggregate x are of varying length, only the 
  14426.    current length, not including the 2-byte length prefix, is concatenated. 
  14427.  
  14428.    If x is an element variable, the rules for aggregates apply except that 
  14429.    there is no concatenation. 
  14430.  
  14431.  
  14432. ΓòÉΓòÉΓòÉ <hidden> STRING Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  14433.  
  14434. Description 
  14435.   The STRING pseudovariable assigns a bit or character expression, piece by 
  14436.   piece, to x, until either all of the elements are filled or no piece of the 
  14437.   assigned string remains. Any remaining strings in x are filled with blanks or 
  14438.   zero bits, or, if varying-length, are given zero length. 
  14439.  
  14440.   A varying-length string is filled to its maximum length, if possible. 
  14441.  
  14442. Restrictions 
  14443.   The STRING pseudovariable must not be used in the data specification of a GET 
  14444.   statement, in an INTO or KEYTO option of a READ statement, in the REPLY 
  14445.   option of the DISPLAY statement, nor the KEYTO option of a WRITE statement. 
  14446.  
  14447.   The pseudovariable cannot be used as the control variable in a 
  14448.   do-specification. 
  14449.  
  14450. Syntax 
  14451.  
  14452. ΓöÇΓöÇΓöÇΓöÇSTRING(x)ΓöÇΓöÇΓöÇΓöÇ
  14453.  
  14454.    aggregate or element reference. Each base element of x must be either all 
  14455.    bit-string or all character-string. 
  14456.  
  14457.  
  14458. ΓòÉΓòÉΓòÉ <hidden> SUBSTR Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  14459.  
  14460. Description 
  14461.   The SUBSTR pseudovariable assigns a string value to a substring, specified by 
  14462.   y and z, of x. The remainder of x is unchanged. Assignments to a varying 
  14463.   string do not change the length of the string. 
  14464.  
  14465. Syntax 
  14466.  
  14467. ΓöÇΓöÇΓöÇΓöÇSUBSTR(x,yΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  14468.                   ΓööΓöÇ,zΓöÇΓöÿ
  14469.  
  14470.    string-reference. x must not be a numeric character. 
  14471.  
  14472.    expression. y specifies the starting position of the substring in x. It will 
  14473.    be converted to a FIXED BINARY (15,0) value. 
  14474.  
  14475.    expression. z specifies the length of the substring in x. It will be 
  14476.    converted to a FIXED BINARY (15,0) value. If z is zero, a null string is 
  14477.    returned. If z is omitted, the substring returned is position y in x to the 
  14478.    end of x. 
  14479.  
  14480. Note:   y and z can be arrays only if x is an array.
  14481.  
  14482.  
  14483. ΓòÉΓòÉΓòÉ <hidden> STRING String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14484.  
  14485. Description 
  14486.   STRING returns an element bit or character string that is the concatenation 
  14487.   of all of the elements of x. 
  14488.  
  14489.   If x is a structure that has padding caused by ALIGNED elements, the padding 
  14490.   is not included in the results. 
  14491.  
  14492.   If any of the strings in the aggregate x are of varying length, only the 
  14493.   current length, not including the 2-byte length prefix, is concatenated. 
  14494.  
  14495.   If x is an element variable, the rules for aggregates apply except that there 
  14496.   is no concatenation. 
  14497.  
  14498. Syntax 
  14499.  
  14500. ΓöÇΓöÇΓöÇΓöÇSTRING(x)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  14501.  
  14502.    X is an aggregate or an element reference.  If x is a reference to a defined 
  14503.    variable, x must not be iSUB-defined.  Each base element of x must be either 
  14504.    all bit-string, or all character-string and/or numeric character, in any 
  14505.    combination. 
  14506.  
  14507.  
  14508. ΓòÉΓòÉΓòÉ <hidden> SUBSTR String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14509.  
  14510. Description 
  14511.   SUBSTR returns a substring, specified by y and z, of x. 
  14512.  
  14513. Syntax 
  14514.  
  14515. ΓöÇΓöÇΓöÇΓöÇSUBSTR(x,yΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  14516.                   ΓööΓöÇ,zΓöÇΓöÿ
  14517.  
  14518.    string expression. It must not be a numeric character. 
  14519.  
  14520.    expression. y specifies the length of the substring in x. It can be 
  14521.    converted to a real fixed-point binary value. 
  14522.  
  14523.    expression. Z specifies the length of the substring in x. It can be 
  14524.    converted to a real fixed-point binary value. If z is zero, a null string is 
  14525.    returned. If z is omitted, the substring returned is position y in x to the 
  14526.    end of x. 
  14527.  
  14528. Note:   The STRINGRANGE condition is raised if z is negative or if the values 
  14529. of y and z are such that the substring does not lie entirely within the current 
  14530. length of x. It is not raised when y=LENGTH(x)+1 and z=0. 
  14531.  
  14532.  
  14533. ΓòÉΓòÉΓòÉ <hidden> SUM Array-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14534.  
  14535. Description 
  14536.   SUM returns the sum of all the elements in x. The base, mode, and scale of 
  14537.   the result match those of x. 
  14538.  
  14539. Syntax 
  14540.  
  14541. ΓöÇΓöÇΓöÇΓöÇSUM(x)ΓöÇΓöÇΓöÇΓöÇ
  14542.  
  14543.    array expression. If the elements of x are strings, they are converted to 
  14544.    fixed-point integer values. 
  14545.  
  14546.    If the elements of x are fixed-point, the precision of the result is (n,q), 
  14547.    where n is the maximum number of digits allowed, and q is the scaling factor 
  14548.    of x. 
  14549.  
  14550.    If the elements of x are floating-point, the precision of the result matches 
  14551.    x.  x must not be iSUB-defined. 
  14552.  
  14553.  
  14554. ΓòÉΓòÉΓòÉ <hidden> SYSNULL Storage Control Built-In Function ΓòÉΓòÉΓòÉ
  14555.  
  14556. Description 
  14557.   SYSNULL returns the system null pointer value. It can be used to initialize 
  14558.   static pointer and offset variables. It also can be assigned or converted to 
  14559.   offset variables (like NULL). 
  14560.  
  14561.   SYSNULL is valid without the LANGLVL(SPROG) option. In the following example: 
  14562.  
  14563.     BINVALUE(SYSNULL())
  14564.  
  14565.   the returned value is zero. 
  14566.  
  14567.   Note:   NULL and SYSNULL do not compare equal. However, you should not write 
  14568.           code that depends on them being unequal. 
  14569.  
  14570.  
  14571. Syntax 
  14572.  
  14573. ΓöÇΓöÇΓöÇΓöÇSYSNULLΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  14574.                 ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  14575.  
  14576.  
  14577. ΓòÉΓòÉΓòÉ <hidden> TAN Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14578.  
  14579. Description 
  14580.   TAN returns a floating-point value that is an approximation of the tangent of 
  14581.   x. It has the base, mode, and precision of x. 
  14582.  
  14583. Syntax 
  14584.  
  14585. ΓöÇΓöÇΓöÇΓöÇTAN(x)ΓöÇΓöÇΓöÇΓöÇ
  14586.  
  14587.    expression whose value is in radians. 
  14588.  
  14589.    If x = COMPLEX(a,b), the value of the result is given by : 
  14590.  
  14591.       REAL(TAN(x)) = SIN(2*a)/
  14592.                      (COS(2*a)+COSH(2*b))
  14593.  
  14594.       IMAG(TAN(x)) = SINH(2*b)/
  14595.                      (COS(2*a)+COSH(2*b))
  14596.  
  14597.  
  14598. ΓòÉΓòÉΓòÉ <hidden> TAND Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14599.  
  14600. Description 
  14601.   TAND returns a real floating-point value that is an approximation of the 
  14602.   tangent of x. It has the base and precision of x. 
  14603.  
  14604. Syntax 
  14605.  
  14606. ΓöÇΓöÇΓöÇΓöÇTAND(x)ΓöÇΓöÇΓöÇΓöÇ
  14607.  
  14608.    real expression whose value is in degrees. 
  14609.  
  14610.  
  14611. ΓòÉΓòÉΓòÉ <hidden> TANH Mathematical Built-In Function ΓòÉΓòÉΓòÉ
  14612.  
  14613. Description 
  14614.   TANH returns a floating-point value that is an approximation of the 
  14615.   hyperbolic tangent of x. It has the base, mode, and precision of x. 
  14616.  
  14617. Syntax 
  14618.  
  14619. ΓöÇΓöÇΓöÇΓöÇTANH(x)ΓöÇΓöÇΓöÇΓöÇ
  14620.  
  14621.    expression whose value is in radians. 
  14622.  
  14623.    If x = COMPLEX, the result is given by: 
  14624.  
  14625.       -1I*TAN(1I*x)
  14626.  
  14627.  
  14628. ΓòÉΓòÉΓòÉ <hidden> TIME Miscellaneous Built-In Function ΓòÉΓòÉΓòÉ
  14629.  
  14630. Description 
  14631.   TIME returns a character string, length 9, in the format of hhmmssttt. The 
  14632.   time zone and accuracy are system dependent. 
  14633.  
  14634. Syntax 
  14635.  
  14636. ΓöÇΓöÇΓöÇΓöÇTIMEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  14637.              ΓööΓöÇΓöÇ()ΓöÇΓöÇΓöÿ
  14638.  
  14639. The returned character string hhmmssttt represents: 
  14640.  
  14641. hh    the current hour 
  14642.  
  14643. mm    the current minute 
  14644.  
  14645. ss    the current second 
  14646.  
  14647. ttt   the current millisecond 
  14648.  
  14649.  
  14650. ΓòÉΓòÉΓòÉ <hidden> TRANSLATE String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14651.  
  14652. Description 
  14653.   TRANSLATE returns a character string of the same length as x. TRANSLATE does 
  14654.   not support GRAPHIC data. 
  14655.  
  14656.   TRANSLATE operates on each character of x as follows: 
  14657.  
  14658.     1. If a character in x is found in z, the character in y that corresponds 
  14659.        (by position) to that in z is copied to the result; otherwise, the 
  14660.        character in x is copied directly to the result. If z contains 
  14661.        duplicates, the leftmost occurrence is used. 
  14662.  
  14663.     2. Y is padded with blanks, or truncated, on the right to match the length 
  14664.        of z. 
  14665.  
  14666.     3. Any arithmetic or bit arguments are converted to character. 
  14667.  
  14668. Example 
  14669.   Consider the following use of the TRANSLATE built-in function: 
  14670.  
  14671.      DECLARE (W, X) CHAR (3);
  14672.      X='ABC';
  14673.      W = TRANSLATE (X, 'TAR', 'DAB');
  14674.  
  14675.      /* W = 'ARC' */
  14676.  
  14677. Syntax 
  14678.  
  14679. ΓöÇΓöÇΓöÇΓöÇTRANSLATE(x,yΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  14680.                      ΓööΓöÇ,zΓöÇΓöÿ
  14681.  
  14682.    character expression to be searched for possible translation of its 
  14683.    characters. 
  14684.  
  14685.    character expression containing the translation values of characters. 
  14686.  
  14687.    character expression containing the characters that are to be translated. If 
  14688.    z is omitted, a string of 256 characters is assumed. It contains one 
  14689.    instance of each EBCDIC code arranged in ascending collating sequence 
  14690.    (hexadecimal 00 through FF). 
  14691.  
  14692.  
  14693. ΓòÉΓòÉΓòÉ <hidden> UNSPEC String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14694.  
  14695. Description 
  14696.   UNSPEC returns a bit string that is the internal coded form of x. 
  14697.  
  14698. Syntax 
  14699.  
  14700.     ΓöÇΓöÇΓöÇΓöÇΓöÇUNSPEC(x)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  14701.  
  14702.    x 
  14703.       is an expression. 
  14704.  
  14705.   Note:   If you intend to migrate the program to OS/2, be aware that in PL/I 
  14706.           Package 2, the UNSPEC of an array yields a result of BIT(*) scalar. 
  14707.           If you need an array of returned values from UNSPEC, use a loop to 
  14708.           obtain the result for each array element, and store each result in 
  14709.           the array. 
  14710.  
  14711.   The length of the returned bit string depends on the attributes of x. 
  14712.  
  14713. Related Information 
  14714.  
  14715.     Lengths of bit strings returned by UNSPEC. 
  14716.  
  14717.     If x is a varying-length string, its 2-byte prefix is included in the 
  14718.      returned bit string.  If x is an area, the returned value includes the 
  14719.      control information.  If x is complex, the length of the returned string 
  14720.      is twice the value shown above. 
  14721.  
  14722.      For example: 
  14723.  
  14724.           R = ARRAY(UNSPEC('A'));
  14725.  
  14726.      In this statement, the internal representation of the character 'A' (a bit 
  14727.      string 8 bytes in length) is converted to a fixed binary arithmetic value, 
  14728.      and used as a subscript for the array.  (The decimal value of this 
  14729.      particular subscript is 193). 
  14730.  
  14731.  
  14732. ΓòÉΓòÉΓòÉ <hidden> TRUNC Arithmetic Built-In Function ΓòÉΓòÉΓòÉ
  14733.  
  14734. Description 
  14735.   TRUNC returns an integer value that is the truncated value of x. If x is 
  14736.   positive or 0, this is the largest integer value less than or equal to x. If 
  14737.   x is negative, this is the smallest integer value greater than or equal to x. 
  14738.   This value is assigned to the result. 
  14739.  
  14740.   The base, mode, scale, and precision of the result match those of x. Except 
  14741.   when x is fixed-point with precision (p,q), the precision of the result is 
  14742.   given by: 
  14743.  
  14744.     (MIN(N,MAX(p-q+1,1)),0)
  14745.  
  14746.   where N is the maximum number of digits allowed. 
  14747.  
  14748. Syntax 
  14749.  
  14750. ΓöÇΓöÇΓöÇΓöÇTRUNC(x)ΓöÇΓöÇΓöÇΓöÇ
  14751.  
  14752.    real expression. 
  14753.  
  14754.  
  14755. ΓòÉΓòÉΓòÉ <hidden> Lengths of Bit Strings Returned by UNSPEC ΓòÉΓòÉΓòÉ
  14756.  
  14757. The length of the returned bit string depends on the attributes of x, as shown 
  14758. in the following table. The maximum length allowed for a bit or elementary 
  14759. variable can vary across supported systems. 
  14760.  
  14761. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14762. Γöé Bit String Length  Γöé  Attribute of x                                       Γöé
  14763. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14764. Γöé 16                 Γöé  FIXED BINARY (p,q), p <= 15                          Γöé
  14765. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14766. Γöé 32                 Γöé  FIXED BINARY (p,q) p >= 16                           Γöé
  14767. Γöé                    Γöé  FLOAT BINARY (p), p > 21                             Γöé
  14768. Γöé                    Γöé  FLOAT DECIMAL (p), p <= 6                            Γöé
  14769. Γöé                    Γöé  OFFSET (based on 4-byte pointers)                    Γöé
  14770. Γöé                    Γöé  FILE constant or variable (based on 4-byte pointers) Γöé
  14771. Γöé                    Γöé  POINTER (based on 4-byte pointers)                   Γöé
  14772. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14773. Γöé 64                 Γöé  FLOAT BINARY (p), 22 <= p <= 53                      Γöé
  14774. Γöé                    Γöé  FLOAT DECIMAL (p), 7 <= p <= 16                      Γöé
  14775. Γöé                    Γöé  LABEL constant or variable (based on 4-byte pointers)Γöé
  14776. Γöé                    Γöé  ENTRY constant or variable (based on 4-byte pointers)Γöé
  14777. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14778. Γöé OS/2 ONLY -        Γöé  FLOAT BINARY (p), 22 <= p <= 52                      Γöé
  14779. Γöé 64                 Γöé  FLOAT DECIMAL (p), 7 <= p <= 15                      Γöé
  14780. Γöé                    Γöé  LABEL constant or variable                           Γöé
  14781. Γöé                    Γöé  ENTRY constant or variable                           Γöé
  14782. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14783. Γöé 128                Γöé  FLOAT BINARY (p), 54 <= p <= 109                     Γöé
  14784. Γöé                    Γöé  FLOAT DECIMAL (p) 17 <= p <= 33                      Γöé
  14785. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14786. Γöé n                  Γöé  BIT (n)                                              Γöé
  14787. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14788. Γöé 8*n or 32767       Γöé  CHARACTER (n)                                        Γöé
  14789. Γöé                    Γöé  PICTURE (with character string length of n)          Γöé
  14790. Γöé                    Γöé  (when n>4096, a length of 32767 is returned)         Γöé
  14791. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14792. Γöé 16*n               Γöé  GRAPHIC (n)                                          Γöé
  14793. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14794. Γöé 16 + n             Γöé  BIT VARYING where n is the maximum length of x.      Γöé
  14795. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14796. Γöé 16 + (8*n)         Γöé  CHARACTER VARYING where n is the maximum length of x.Γöé
  14797. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14798. Γöé 16 + (16*n)        Γöé  GRAPHIC VARYING where n is the maximum length of x.  Γöé
  14799. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14800. Γöé 8*(n+16)           Γöé  AREA (n) - (based on 4-byte pointers)                Γöé
  14801. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14802. Γöé 8*FLOOR(n)         Γöé  FIXED DECIMAL (p,q) where n = (p+2) / 2              Γöé
  14803. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14804.  
  14805. Note:   The bit string lengths listed above are system dependent.  The lengths 
  14806.         listed are for the 370 system.  Lengths are equal to 8 times the value 
  14807.         given by the STORAGE built-in function.
  14808.  
  14809.  
  14810. ΓòÉΓòÉΓòÉ <hidden> UNSPEC Built-In Pseudovariable ΓòÉΓòÉΓòÉ
  14811.  
  14812. Description 
  14813.   The UNSPEC pseudovariable assigns a bit value directly to x; that is, without 
  14814.   conversion. The bit value is padded, if necessary, on the right with '0'B to 
  14815.   match the length of x. See "Related Information" below. 
  14816.  
  14817.   If x is a varying length string, its 2-byte prefix is included in the field 
  14818.   to which the bit value is assigned. If x is an area, its control information 
  14819.   is included in the receiving field. 
  14820.  
  14821. Related Information 
  14822.   UNSPEC built-in function 
  14823.  
  14824. Syntax 
  14825.  
  14826. ΓöÇΓöÇΓöÇΓöÇUNSPEC(x)ΓöÇΓöÇΓöÇΓöÇ
  14827.  
  14828.    reference. 
  14829.  
  14830.  
  14831. ΓòÉΓòÉΓòÉ <hidden> VERIFY String-Handling Built-In Function ΓòÉΓòÉΓòÉ
  14832.  
  14833. Description 
  14834.   VERIFY returns a real fixed-point binary value indicating the position in x 
  14835.   of the leftmost character or bit that is not in y. If all the characters or 
  14836.   bits in x do appear in y, a value of zero is returned. If x is the null 
  14837.   string, a value of zero is returned. If x is not the null string and y is the 
  14838.   null string, a value of one is returned. 
  14839.  
  14840.   If either argument is character or decimal, conversions are performed to 
  14841.   produce character strings. Otherwise, the arguments are bit and binary or 
  14842.   both binary, and conversions are performed to produce bit strings. 
  14843.  
  14844.   VERIFY does not support GRAPHIC data. 
  14845.  
  14846. Syntax 
  14847.  
  14848. ΓöÇΓöÇΓöÇΓöÇVERIFY(x,y)ΓöÇΓöÇΓöÇΓöÇ
  14849.  
  14850.    string-expression. 
  14851.  
  14852.    string-expression. 
  14853.  
  14854.  
  14855. ΓòÉΓòÉΓòÉ 1.7. PL/I Program Organization and Control Transfer ΓòÉΓòÉΓòÉ
  14856.  
  14857. Description 
  14858.   PL/I is a block-oriented language, consisting of procedures, BEGIN blocks, 
  14859.   statements, expressions, and built-in functions that allow program logic, I/O 
  14860.   operations, and commentary to be expressed in concise but meaningful 
  14861.   self-documenting terms. Unlike many other languages, PL/I is totally 
  14862.   free-form and has no reserved keywords. 
  14863.  
  14864.   A PL/I application consists of one of more separately loadable entities, 
  14865.   known as load modules. Each of these may consist of one or more separately 
  14866.   compiled entities, known as compilation units (CU). Unless otherwise stated, 
  14867.   a program refers to a PL/I application or a compilation unit. 
  14868.  
  14869.   A compilation unit is an external PROCEDURE. A PL/I external or internal 
  14870.   procedure contains zero or more blocks. A PL/I block is either a PROCEDURE or 
  14871.   a BEGIN block, which contains zero or more statements and/or zero or more 
  14872.   blocks. 
  14873.  
  14874.   A PROCEDURE block nested within other blocks is called an internal procedure. 
  14875.   A PROCEDURE block that is not nested within other blocks is called an 
  14876.   external procedure. 
  14877.  
  14878.   A procedure is either a subroutine or a function. Subroutines are always 
  14879.   called using the CALL statement and may have many (or zero) arguments, some 
  14880.   of which may be input only, output only, or both input and output. Functions, 
  14881.   however, are invoked by their appearance in an expression and may pass many 
  14882.   (or zero) arguments but always return one result value that participates in 
  14883.   expression evaluation at the point of function reference. 
  14884.  
  14885.   The names of programmer-defined subroutines and functions are established by 
  14886.   entry declaration and referenced by entry invocation. 
  14887.  
  14888. Usage Notes 
  14889.   Proper division of a program into blocks simplifies the writing and testing 
  14890.   of the program, particularly when many programmers are writing it. Proper 
  14891.   division can also result in more efficient use of storage, since automatic 
  14892.   storage is allocated on entry to the block in which it is declared and 
  14893.   released when the block is terminated. 
  14894.  
  14895.   A PL/I block allows you to produce highly-modular applications, because 
  14896.   blocks can contain declarations that define variable names and storage class. 
  14897.   Thus, programmers can restrict the scope of a variable to a single block or a 
  14898.   group of blocks, or can cause it to be known throughout a compilation unit or 
  14899.   a load module. 
  14900.  
  14901.   By giving programmers freedom to determine the degree to which a block is 
  14902.   self-contained, PL/I makes it possible to produce blocks that many 
  14903.   compilation units and applications can share, leading to code reuse. 
  14904.  
  14905. Related Information 
  14906.  
  14907.     Blocks 
  14908.     FETCH statement 
  14909.     RELEASE statement 
  14910.     GENERIC attribute 
  14911.     Program activation 
  14912.     Program termination 
  14913.  
  14914.  
  14915. ΓòÉΓòÉΓòÉ <hidden> Blocks ΓòÉΓòÉΓòÉ
  14916.  
  14917. Description 
  14918.   A block is a delimited sequence of statements that does the following: 
  14919.  
  14920.     Determines the scope of the declaration of names declared within it; 
  14921.  
  14922.     Limits the allocation of automatic variables; 
  14923.  
  14924.     Determines the scope of DEFAULT statements. 
  14925.  
  14926. Kinds of Blocks 
  14927.  
  14928.     Procedures 
  14929.     Begin-blocks 
  14930.  
  14931. Scope of Blocks 
  14932.   Blocks can contain declarations that are treated as local definitions of 
  14933.   names. This is done to establish the scope of the names and to limit the 
  14934.   allocation of automatic variables. These declarations are not known outside 
  14935.   their own block, and the names cannot be referred to in the containing block. 
  14936.  
  14937.   Automatic storage is allocated upon entry to the block where the storage is 
  14938.   declared. The storage is freed upon exit from the block. 
  14939.  
  14940. Related Information 
  14941.  
  14942.     Block activation 
  14943.     Block termination 
  14944.     Internal and external blocks 
  14945.  
  14946.  
  14947. ΓòÉΓòÉΓòÉ <hidden> Block Activation ΓòÉΓòÉΓòÉ
  14948.  
  14949. Description 
  14950.   Although the begin block and the procedure play the same role in the 
  14951.   allocation and freeing of storage and in delimiting the scope of names, they 
  14952.   differ in the way they are activated and executed: 
  14953.  
  14954.     Except for the main procedure, external and internal procedures contained 
  14955.      in a program are activated only when they are invoked by a procedure 
  14956.      reference. 
  14957.  
  14958.     Begin blocks are activated through sequential flow or as ON-units. 
  14959.  
  14960.   Each block plays the same role in the allocation and freeing of storage and 
  14961.   in delimiting the scope of names. During block activation, the following are 
  14962.   performed: 
  14963.  
  14964.     Expressions for automatic and defined variables are evaluated for 
  14965.      dimension bounds, area sizes, string lengths, and initial values 
  14966.      (including iteration factors). 
  14967.  
  14968.     Currently active blocks known to the procedure are identified, so that the 
  14969.      correct generations of automatic storage are accessible, and the correct 
  14970.      ON-units may be entered. 
  14971.  
  14972.     Storage is allocated for automatic variables and initial values, if 
  14973.      specified. 
  14974.  
  14975.     Storage is allocated for dummy arguments that might be created in this 
  14976.      block. 
  14977.  
  14978. Errors 
  14979.   Errors can occur during block activation, and the ERROR condition (or other 
  14980.   condition) can be raised. If so, the environment of the block might be 
  14981.   incomplete. In particular, some automatic variables might not have been 
  14982.   allocated. Statements referencing automatic variables executed after the 
  14983.   ERROR condition has been raised may reference unallocated storage. The 
  14984.   results of referring to unallocated storage are undefined. 
  14985.  
  14986. Examples 
  14987.   The compiler assigns values in the following order for each block in the 
  14988.   program. 
  14989.  
  14990.     1. Values that are independent of other declarations in the block.  (Values 
  14991.        may be inherited from an outer block.) 
  14992.  
  14993.     2. Values that are dependent on other declarations in the block. If a value 
  14994.        depends on more than one other declaration in the block, correct 
  14995.        initialization is not guaranteed.  In the following example: 
  14996.  
  14997.               DCL I INIT(10),J INIT(K),K INIT(I);
  14998.  
  14999.        Correct initialization of K is not guaranteed. 
  15000.  
  15001.   Declarations of data items must not be mutually interdependent. For example, 
  15002.   the following declarations are invalid: 
  15003.  
  15004.     DCL A(B(1)), B(A(1));
  15005.  
  15006.     DCL D(E(1)), E(F(1)), F(D(1));
  15007.  
  15008.  
  15009. ΓòÉΓòÉΓòÉ <hidden> Internal and External Blocks ΓòÉΓòÉΓòÉ
  15010.  
  15011. Description 
  15012.   Blocks can contain other blocks. The outermost block is called an external 
  15013.   block. A block within a block is called an internal block. An internal block 
  15014.   must be totally encompassed by another internal block or by an external 
  15015.   block. 
  15016.  
  15017.   Begin-blocks are always internal; they must always be contained within 
  15018.   another block. 
  15019.  
  15020.   Internal procedures and begin-blocks can be nested.  Nested blocks, in turn, 
  15021.   can have blocks nested within them, and so on.  The outermost block must be a 
  15022.   procedure. 
  15023.  
  15024. Example 
  15025.   The following example helps illustrate internal and external blocks. An 
  15026.   explanation follows the example. 
  15027.  
  15028.         1   A:  PROCEDURE;
  15029.                 .
  15030.         2     B: BEGIN;
  15031.                 .
  15032.         3     END B;
  15033.                 .
  15034.         4     C: PROCEDURE;
  15035.                 .
  15036.         5      D: BEGIN;
  15037.                  .
  15038.                             E: PROCEDURE;
  15039.                    .
  15040.                    END E;
  15041.                  .
  15042.         6      END D;
  15043.         7    END C;
  15044.                 .
  15045.         8   END A;
  15046.  
  15047.   Explanation- 
  15048.  
  15049.    1,8  Procedure A is an external procedure because it is not contained in any 
  15050.         other block. 
  15051.  
  15052.    2,3  Begin-block B is contained in A. It contains no other blocks. 
  15053.  
  15054.    4,7  Internal procedure C contains begin-block D. 
  15055.  
  15056.    5,6  Begin-block D contains internal procedure E. This example shows a depth 
  15057.   of nesting of three levels relative to A. B and C are at a depth of one, D is 
  15058.   at a depth of two, and E is at a depth of three. 
  15059.  
  15060.  
  15061. ΓòÉΓòÉΓòÉ <hidden> Procedures ΓòÉΓòÉΓòÉ
  15062.  
  15063. Description 
  15064.   A procedure is a main procedure, a subroutine, or a function. It is a labeled 
  15065.   block of statements delimited by an ENTRY statement, or by a PROCEDURE 
  15066.   statement and its END statement. It is the basic building block of a PL/I 
  15067.   program. 
  15068.  
  15069.   Entry points are exclusive to procedures. They indicate the locations to 
  15070.   which control can be transferred. The leftmost label of the PROCEDURE 
  15071.   statement represents the primary entry point of the procedure.  Optionally, 
  15072.   additional labels define secondary entry points. The ENTRY statement also 
  15073.   defines secondary entry points.  For example: 
  15074.  
  15075.     B: ENTRY;
  15076.  
  15077.   A procedure block nested within a procedure or BEGIN block is called an 
  15078.   internal procedure. A procedure block not nested within procedure or begin 
  15079.   blocks is called an external procedure. 
  15080.  
  15081.   Procedures or begin blocks can invoke other procedures. 
  15082.  
  15083.   A recursive procedure, can be reactivated from within itself or from within 
  15084.   another active procedure while it is already active. 
  15085.  
  15086.   Subroutines and functions are procedure blocks to which you can temporarily 
  15087.   transfer control of a program to perform some frequently used task or run a 
  15088.   frequently used sequence of statements. They can be internal or external to 
  15089.   the invoking block. 
  15090.  
  15091. Usage Notes 
  15092.   You use arguments in the invoking block to pass data to the parameters in the 
  15093.   invoked subroutine or function procedure. 
  15094.  
  15095.   A parameter has no storage associated with it.  It is merely a means of 
  15096.   allowing the invoked procedure to access storage allocated in the invoking 
  15097.   procedure.  A reference to a parameter in a procedure is a reference to the 
  15098.   corresponding argument.  Any change to the value of the parameter is made to 
  15099.   the value of the argument. 
  15100.  
  15101.   However, in certain circumstances, a dummy argument is created and the value 
  15102.   of the original argument is not changed.  In these cases, a reference to the 
  15103.   parameter is a reference to the dummy argument.  The dummy argument initially 
  15104.   has the same value as the original argument, but subsequent changes to the 
  15105.   parameter do not affect the original argument's value. 
  15106.  
  15107.   Both internal and external procedures are normally loaded into main storage 
  15108.   at the same time as the invoking procedure.  However, an external procedure 
  15109.   can be compiled separately from the invoking procedure and loaded when needed 
  15110.   by the use of the FETCH statement and the RELEASE statement . 
  15111.  
  15112. Example 
  15113.   Consider the following procedure, NAME: 
  15114.  
  15115.     NAME:  A:
  15116.        PROCEDURE;
  15117.         .
  15118.         .
  15119.        END NAME;
  15120.  
  15121.   The leftmost label of the PROCEDURE statement represents the primary entry 
  15122.   point of the procedure.  Optionally, additional labels define secondary entry 
  15123.   points. 
  15124.  
  15125. Related Information 
  15126.  
  15127.     Procedure activation 
  15128.     Procedure termination 
  15129.     Passing an argument to the main procedure 
  15130.     Passing arguments between procedures 
  15131.  
  15132.  
  15133. ΓòÉΓòÉΓòÉ <hidden> PROCEDURE Statement ΓòÉΓòÉΓòÉ
  15134.  
  15135. Description 
  15136.   The PROCEDURE statement: 
  15137.  
  15138.     And the corresponding END statement delimit a procedure. 
  15139.  
  15140.     Defines the primary entry point to the procedure (and optionally, 
  15141.      secondary entry points). 
  15142.  
  15143.     Specifies the parameters, if any, for the primary entry point. 
  15144.  
  15145.     Can specify options that a procedure can have. 
  15146.  
  15147.     Can specify the attributes of the value returned by the procedure if it is 
  15148.      invoked as a function. 
  15149.  
  15150. Syntax 
  15151.  
  15152.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15153.                     Γöé
  15154. ΓöÇΓöÇΓöÇentry-constant:ΓöÇΓö┤ΓöÇPROCEDUREΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  15155.                                   Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  15156.                                   Γöé              Γöé    Γöé
  15157.                                   ΓööΓöÇ(ΓöÇΓöÇΓöÇparameterΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÿ
  15158.  
  15159. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  15160.       Γöé             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  15161.       Γöé                          Γöé    Γöé
  15162.       ΓööΓöÇRETURNSΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÿ
  15163.  
  15164. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  15165.       ΓööΓöÇΓöÇΓöÇΓöÇOPTIONS(characteristic list)ΓöÇΓöÇΓöÇΓöÇΓöÿ
  15166.  
  15167.     ΓöîΓöÇIRREDUCIBLEΓöÇΓöÉ                   ΓöîΓöÇORDERΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓöÇNOCHARGRAPHICΓöÇΓöÉ
  15168. ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇ;ΓöÇΓöÇ
  15169.     ΓööΓöÇREDUCIBLEΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇRECURSIVEΓöÇΓöÇΓöÿ   ΓööΓöÇREORDERΓöÇΓöÇΓöÿ   ΓööΓöÇCHARGRAPHICΓöÇΓöÇΓöÇΓöÿ
  15170.  
  15171.  
  15172.  
  15173.  
  15174. Abbreviations: CHARG for CHARGRAPHIC
  15175.                NOCHARG for NOCHARGRAPHIC
  15176.                PROC for PROCEDURE
  15177.  
  15178.  
  15179. ΓòÉΓòÉΓòÉ <hidden> Parameter Attributes ΓòÉΓòÉΓòÉ
  15180.  
  15181. Description 
  15182.   The parameter attribute specifies that a name in an invoked procedure 
  15183.   represents an argument passed to that procedure. A name is explicitly 
  15184.   declared with the parameter attribute by its appearance in the parameter list 
  15185.   of a PROCEDURE or an ENTRY statement. Attributes other than parameter can be 
  15186.   supplied by a DECLARE statement internal to the procedure. If attributes are 
  15187.   not supplied in a DECLARE statement, default attributes are applied. 
  15188.  
  15189.   A parameter always has the attribute INTERNAL. It must be a level-one name, 
  15190.   and must not be subscripted or qualified. 
  15191.  
  15192.   If an argument is an array, a string, or an area, the bounds of the array, 
  15193.   the length of the string, or the size of the area must be declared for the 
  15194.   corresponding parameter. The number of dimensions and the bounds of an array 
  15195.   parameter, or the length and size of an area or string parameter, must be the 
  15196.   same as the current generation of the corresponding argument. 
  15197.  
  15198. Parameter Storage 
  15199.   Because a parameter has no associated storage within the invoked procedure, 
  15200.   it cannot be declared to have any of the storage attributes STATIC, 
  15201.   AUTOMATIC, BASED, or DEFINED. However, it can be declared to have the 
  15202.   CONTROLLED attribute. Thus, there are two classes of parameters, as far as 
  15203.   storage allocation is concerned: those that have no storage class (simple 
  15204.   parameters) and those that have the CONTROLLED attribute (controlled 
  15205.   parameters). Only controlled parameters can have the INITIAL attribute. 
  15206.  
  15207.   Parameters used in record-oriented input/output, or as the base variable for 
  15208.   DEFINED terms, must be in connected storage.  If such a parameter is an 
  15209.   aggregate, it must have the CONNECTED attribute, both in its declaration in 
  15210.   the procedure, and, where applicable, in the descriptor list of the procedure 
  15211.   entry declaration. 
  15212.  
  15213. Simple Parameter Bounds, Lengths, and Sizes 
  15214.   Bounds, lengths, and sizes of simple parameters must be specified either by 
  15215.   asterisks or by constants. When the actual length, bounds, or size may be 
  15216.   different for different invocations, each can be specified in a DECLARE 
  15217.   statement by an asterisk. When an asterisk is used, the length, bounds, or 
  15218.   size are taken from the current generation of the associated argument. 
  15219.  
  15220.   An asterisk is not allowed as the length specification of a string that is an 
  15221.   element of an aggregate, if the associated argument creates a dummy. The 
  15222.   string length must be specified as an integer. 
  15223.  
  15224. Controlled Parameter Bounds, Lengths, and Sizes 
  15225.   The bounds, length, or size of a controlled parameter can be specified in a 
  15226.   DECLARE statement either by asterisks or by element expressions. 
  15227.  
  15228.   Asterisk Notation: When asterisks are used, length, bounds, or size of the 
  15229.   controlled parameter are taken from the current generation of the associated 
  15230.   argument. Any subsequent allocation of the controlled parameter uses these 
  15231.   same bounds, length, or size, unless they are overridden by a different 
  15232.   length, bounds, or size specification in the ALLOCATE statement.  If no 
  15233.   current generation of the argument exists, the asterisks determine only the 
  15234.   dimensionality of the parameter, and an ALLOCATE statement in the invoked 
  15235.   procedure must specify bounds, length, or size for the controlled parameter 
  15236.   before other references to the parameter can be made. 
  15237.  
  15238.   Expression Notation: Each time the parameter is allocated, the expressions 
  15239.   are evaluated to give current bounds, lengths, or sizes for the new 
  15240.   allocation. However, such expressions in a DECLARE statement can be 
  15241.   overridden by a bounds, length, or size specification in the ALLOCATE 
  15242.   statement itself. 
  15243.  
  15244.  
  15245. ΓòÉΓòÉΓòÉ <hidden> Procedure Activation ΓòÉΓòÉΓòÉ
  15246.  
  15247. Description 
  15248.   A procedure can be invoked at any point at which an entry name of the 
  15249.   procedure is known.  Execution of the invoked procedure can be only 
  15250.   synchronous. The execution of the invoking procedure is suspended until the 
  15251.   invoked procedure returns control to it. 
  15252.  
  15253.   Sequential program flow passes around a procedure, from the statement before 
  15254.   the PROCEDURE statement to the statement after the END statement of that 
  15255.   procedure. The only way that a procedure can be activated is by a procedure 
  15256.   reference. 
  15257.  
  15258.   When a procedure reference is executed, the procedure containing the 
  15259.   specified entry point is said to be "invoked". The point at which the 
  15260.   procedure reference appears is called the "point of invocation" and the block 
  15261.   in which the reference is made is called the "invoking block". An invoking 
  15262.   block remains active even though control is transferred from it to the 
  15263.   procedure it invokes. 
  15264.  
  15265.   When a procedure is invoked, arguments and parameters are associated and 
  15266.   execution begins with the statement following the PROCEDURE or the ENTRY 
  15267.   statement in the invoked procedure. 
  15268.  
  15269.   A procedure reference is the appearance of an entry expression in one of the 
  15270.   following contexts: 
  15271.  
  15272.     Using a CALL statement to invoke a subroutine or function. 
  15273.  
  15274.     After the keyword CALL in the CALL option of the INITIAL attribute. 
  15275.  
  15276.     Invoking functions. 
  15277.  
  15278. Examples 
  15279.   Consider the following examples of procedure activation. This procedure: 
  15280.  
  15281.         READIN:  PROCEDURE;
  15282.                  statement-1
  15283.                  statement-2
  15284.                  statement-3
  15285.                  ...
  15286.                  END READIN;
  15287.  
  15288.   can be activated by this entry reference: 
  15289.  
  15290.         CALL READIN;
  15291.  
  15292.   The entry-constant (such as READIN) can also assigned to an entry variable 
  15293.   that is used in a procedure reference: 
  15294.  
  15295.         DECLARE READIN ENTRY,
  15296.                 ENT1 ENTRY VARIABLE;
  15297.                 ENT1 = READIN;
  15298.         CALL ENT1;
  15299.         CALL READIN;
  15300.  
  15301.   These two CALL statements have the same effect. 
  15302.  
  15303. Related Information 
  15304.   Program activation 
  15305.  
  15306.  
  15307. ΓòÉΓòÉΓòÉ <hidden> Procedure Termination ΓòÉΓòÉΓòÉ
  15308.  
  15309. Description 
  15310.   A procedure is terminated when, by some means other than a procedure 
  15311.   reference, control passes back to the invoking program, block, or to some 
  15312.   other active block. 
  15313.  
  15314.    Normal procedure termination occurs when: 
  15315.  
  15316.        Control reaches a RETURN statement within the procedure. The execution 
  15317.         of a RETURN statement returns control to the point of invocation in the 
  15318.         invoking procedure. If the point of invocation is a CALL statement, 
  15319.         execution in the invoking procedure resumes with the statement 
  15320.         following the CALL. If the point of invocation is a function reference, 
  15321.         execution of the statement containing the reference is resumed. 
  15322.  
  15323.        Control reaches the END statement of the procedure. Effectively, this 
  15324.         is equivalent to the execution of a RETURN statement. 
  15325.  
  15326.    Abnormal procedure termination occurs when: 
  15327.  
  15328.        Control reaches a GO TO statement that transfers control out of the 
  15329.         procedure. The GO TO statement can specify a label in a containing 
  15330.         block (the label must be known within the procedure), or it can specify 
  15331.         a parameter that has been associated with a label argument passed to 
  15332.         the procedure. 
  15333.  
  15334.        A STOP statement is executed. 
  15335.  
  15336.        An EXIT statement is executed. 
  15337.  
  15338.        The ERROR condition is raised and there is no established ON-unit for 
  15339.         ERROR or FINISH. Also, if one or both of the conditions has an 
  15340.         established ON-unit, ON-unit exit is by normal return, rather than by a 
  15341.         GO TO statement. 
  15342.  
  15343. Usage Notes 
  15344.   Transferring control out of a procedure using a GO TO statement can sometimes 
  15345.   result in the termination of several procedures and/or begin-blocks. 
  15346.   Specifically, if the transfer point specified by the GO TO statement is 
  15347.   contained in a block that did not directly activate the block being 
  15348.   terminated, all intervening blocks in the activation sequence are terminated. 
  15349.  
  15350. Example 
  15351.   Procedure termination 
  15352.  
  15353.  
  15354. ΓòÉΓòÉΓòÉ <hidden> Example- Procedure Termination ΓòÉΓòÉΓòÉ
  15355.  
  15356. In the following example: 
  15357.  
  15358. A: PROCEDURE OPTIONS(MAIN);
  15359.    statement-1
  15360.    statement-2
  15361.    B: BEGIN;
  15362.       statement-b1
  15363.       statement-b2
  15364.       CALL C;
  15365.       statement-b3
  15366.       END B;
  15367.    statement-3
  15368.    statement-4
  15369.    C: PROCEDURE;
  15370.       statement-c1
  15371.       statement-c2
  15372.       statement-c3
  15373.       D: BEGIN;
  15374.          statement-d1
  15375.          statement-d2
  15376.          GO TO LAB;
  15377.          statement-d3
  15378.          END D;
  15379.       statement-c4
  15380.       END C;
  15381.    statement-5
  15382. LAB: statement-6
  15383.    statement-7
  15384. END A;
  15385.  
  15386. A activates B, which activates C, which activates D. In D, the statement GO TO 
  15387. LAB transfers control to statement-6 in A. Since this statement is not 
  15388. contained in D, C, or B, all three blocks are terminated; A remains active. 
  15389.  
  15390. Thus, the transfer of control out of D results in the termination of 
  15391. intervening blocks B and C as well as the termination of block D. 
  15392.  
  15393.  
  15394. ΓòÉΓòÉΓòÉ <hidden> Recursive Procedures ΓòÉΓòÉΓòÉ
  15395.  
  15396. Description 
  15397.   An active procedure that is invoked from within itself or from within another 
  15398.   active procedure is a "recursive" procedure. Such an invocation is called 
  15399.   "recursion". 
  15400.  
  15401.   A procedure that is invoked recursively must have the RECURSIVE option 
  15402.   specified in its PROCEDURE statement. 
  15403.  
  15404.   The environment (that is, values of automatic variables, etc.) of every 
  15405.   invocation of a recursive procedure is preserved in a manner analogous to the 
  15406.   stacking of allocations of a controlled variable. Think of an environment as 
  15407.   being "pushed down" at a recursive invocation, and "popped up" at the 
  15408.   termination of that invocation. A label constant in the current block is 
  15409.   always a reference to the current invocation of the block that contains the 
  15410.   label. 
  15411.  
  15412.   If a label constant is assigned to a label variable in a particular 
  15413.   invocation, a GO TO statement naming that variable in another invocation 
  15414.   restores the environment that existed when the assignment was performed. 
  15415.  
  15416. Example 
  15417.   Using the RECURSIVE option 
  15418.  
  15419. Related Information 
  15420.   Effect of recursion on automatic variables 
  15421.  
  15422. Syntax 
  15423.  
  15424. ΓöÇΓöÇΓöÇΓöÇΓöÇRECURSIVEΓöÇΓöÇΓöÇΓöÇΓöÇ
  15425.  
  15426.  
  15427. ΓòÉΓòÉΓòÉ <hidden> Example- Using the RECURSIVE Option ΓòÉΓòÉΓòÉ
  15428.  
  15429. The environment of a procedure that was invoked from within a recursive 
  15430. procedure by means of an entry variable is the one that was current when the 
  15431. entry-constant was assigned to the variable. Consider the following example: 
  15432.  
  15433. I=1;
  15434. CALL A;   /* FIRST INVOCATION OF A */
  15435.  
  15436. A: PROC RECURSIVE;
  15437.    DECLARE EV ENTRY VARIABLE STATIC;
  15438.    IF I=1 THEN
  15439.       DO;
  15440.       I=2;
  15441.       EV=B;
  15442.       CALL A;       /* 2ND INVOCATION OF A */
  15443.       END;
  15444.    ELSE CALL EV;    /* INVOKES B WITH ENVIRONMENT */
  15445.                     /* OF FIRST INVOCATION OF A   */
  15446. B: PROC;
  15447.    GO TO OUT;
  15448.    END B;
  15449. OUT: END A;
  15450.  
  15451. The GO TO statement in the procedure B transfers control to the END A statement 
  15452. in the first invocation of A, and terminates B and both invocations of A. 
  15453.  
  15454.  
  15455. ΓòÉΓòÉΓòÉ <hidden> Effect of Recursion on Automatic Variables ΓòÉΓòÉΓòÉ
  15456.  
  15457. Description 
  15458.   The values of variables allocated in one activation of a recursive procedure 
  15459.   must be protected from change by other activations. This is arranged by 
  15460.   "stacking" the variables. 
  15461.  
  15462.   A stack operates on a last-in first-out basis: the most recent generation of 
  15463.   an automatic variable is the only one that can be referenced. 
  15464.  
  15465. Usage Notes 
  15466.   Static variables are not affected by recursion. Thus, they are useful for 
  15467.   communication across recursive invocations. This also applies to: 
  15468.  
  15469.     Automatic variables that are declared in a procedure that contains a 
  15470.      recursive procedure 
  15471.  
  15472.     Controlled and based variables. 
  15473.  
  15474. Example 
  15475.   In the following example: 
  15476.  
  15477.     A: PROC;
  15478.        DCL X;
  15479.        .
  15480.        .
  15481.        B: PROC RECURSIVE;
  15482.           DCL Z,
  15483.               Y STATIC;
  15484.           CALL B;
  15485.           .
  15486.           .
  15487.           END B;
  15488.     END A;
  15489.  
  15490.   A single generation of the variable X exists throughout invocations of 
  15491.   procedure B. The variable Z has a different generation for each invocation of 
  15492.   procedure B. The variable Y can be referred to only in procedure B and will 
  15493.   not be reallocated at each invocation. 
  15494.  
  15495.  
  15496. ΓòÉΓòÉΓòÉ <hidden> FETCH Statement ΓòÉΓòÉΓòÉ
  15497.  
  15498. Description 
  15499.   The FETCH statement checks main storage for the named procedures.  The named 
  15500.   procedures must not be internal procedures.  Procedures not already in main 
  15501.   storage are loaded from auxiliary storage. 
  15502.  
  15503. FETCH and RELEASE Restrictions 
  15504.   When using dynamically-loaded procedures: 
  15505.  
  15506.     1. Only external procedures can be fetched. 
  15507.  
  15508.     2. Variables with the EXTERNAL attribute are not allowed in a fetched 
  15509.        procedure. 
  15510.  
  15511.     3. Variables with the CONTROLLED attribute are not allowed in a fetched 
  15512.        procedure unless they are parameters. 
  15513.  
  15514.     4. With the exception of the file SYSPRINT, variables with the FILE 
  15515.        attribute are not allowed in a fetched procedure unless they are 
  15516.        parameters.  This means that any other file used in the fetched 
  15517.        procedure, including the file SYSIN, must be passed from the calling 
  15518.        procedure. 
  15519.  
  15520.        A file that is explicitly opened in a fetched procedure must be 
  15521.        explicitly closed in that procedure before that procedure ends. 
  15522.  
  15523.        A file that is implicitly opened in a fetched procedure must be closed 
  15524.        only in the fetching procedure.  The close must be prior to releasing 
  15525.        the fetched procedure. 
  15526.  
  15527.        A file that is open when it is passed to a fetched procedure must not be 
  15528.        closed in the fetched procedure. 
  15529.  
  15530.     5. Storage for STATIC variables in the fetched procedures is allocated when 
  15531.        the FETCH statement is executed, and is freed when a corresponding 
  15532.        RELEASE statement is executed.  Each time a procedure is fetched into 
  15533.        main storage, a STATIC variable either is given the value specified in 
  15534.        an INITIAL attribute, or if there is no INITIAL attribute, is not 
  15535.        initialized. 
  15536.  
  15537.     6. The FETCH, RELEASE, and CALL statements must specify entry-constants. An 
  15538.        entry-constant for a fetched procedure cannot be assigned to an entry 
  15539.        variable. 
  15540.  
  15541.     7. Fetched procedures cannot fetch further procedures. 
  15542.  
  15543. Related Information 
  15544.  
  15545.     RELEASE statement 
  15546.  
  15547. Syntax 
  15548.  
  15549.             ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15550.                              Γöé
  15551. ΓöÇΓöÇΓöÇFETCHΓöÇΓöÇΓöÇΓöÇΓöÇentry-constantΓöÇΓö┤ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  15552.  
  15553.  
  15554. ΓòÉΓòÉΓòÉ <hidden> RELEASE Statement ΓòÉΓòÉΓòÉ
  15555.  
  15556. Description 
  15557.   The RELEASE statement frees the main storage occupied by procedures 
  15558.   identified by its specified entry-constants. 
  15559.  
  15560. Usage Notes 
  15561.   The fetched procedure is compiled and link-edited separately from the calling 
  15562.   procedure. You must ensure that the entry-constant specified in; FETCH 
  15563.   statements, RELEASE statements, and CALL statements, options, and in function 
  15564.   references is the name known in auxiliary storage. 
  15565.  
  15566. Example 
  15567.   Consider the following example in which PROGA and PROGB are entry names of 
  15568.   procedures resident on auxiliary storage: 
  15569.  
  15570.            PROG:  PROCEDURE;
  15571.  
  15572.     1       FETCH PROGA;
  15573.     2       CALL PROGA;
  15574.     3       RELEASE PROGA;
  15575.  
  15576.     4       CALL PROGB;
  15577.               GO TO FIN;
  15578.  
  15579.               FETCH PROGB;
  15580.            FIN:  END PROG;
  15581.  
  15582.   1:PROGA is loaded into main storage by the first FETCH statement 
  15583.  
  15584.   2: PROGA executes when the first CALL statement is reached. 
  15585.  
  15586.   3: Storage for PROGA is released when the RELEASE statement is executed. 
  15587.  
  15588.   4: PROGB is loaded and executed when the second CALL statement is reached, 
  15589.   even though the FETCH statement referring to this procedure is never 
  15590.   executed. 
  15591.  
  15592.   The same results would be achieved if the statement FETCH PROGA was omitted. 
  15593.   The appearance of PROGA in a RELEASE statement causes the statement CALL 
  15594.   PROGA to load the procedure, as well as invoke it. 
  15595.  
  15596. Syntax 
  15597.  
  15598.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15599.                                  Γöé
  15600. ΓöÇΓöÇΓöÇΓöÇRELEASEΓöÇΓöÇΓöÇΓöÇΓöÇentry-constantΓöÇΓöÇΓö┤ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  15601.  
  15602.  
  15603. ΓòÉΓòÉΓòÉ <hidden> Passing an Argument to the Main Procedure ΓòÉΓòÉΓòÉ
  15604.  
  15605. Description 
  15606.   The PROCEDURE statement for the main procedure can have a parameter list. 
  15607.   Such parameters require no special considerations in PL/I. However, you must 
  15608.   be aware of any requirements of the invoking program (for example, not to use 
  15609.   a parameter as the target of an assignment). 
  15610.  
  15611.   When the invoking program is the operating system, a single argument is 
  15612.   passed to the program. If this facility is used, the parameter must be 
  15613.   declared as a VARYING character string within the procedure. The current 
  15614.   length is set equal to the argument length at run time. 
  15615.  
  15616. Restrictions 
  15617.   When the MAIN and NOEXECOPS attributes are specified, the main procedure can 
  15618.   have one of the following as parameters: 
  15619.  
  15620.     A single parameter that is a VARYING CHARACTER string. The parameter 
  15621.      passes as is, and a descriptor is set up. ("/", if contained in the 
  15622.      string, is treated as part of the string). For example: 
  15623.  
  15624.           MAIN:PROC(PARM) OPTIONS(MAIN NOEXECOPS);
  15625.                DCL PARM CHAR(100) VARYING;
  15626.  
  15627.     Other parameters (such as, more than one parameter or a single parameter 
  15628.      that is not a VARYING CHARACTER string). The parameter list passes as is, 
  15629.      and no descriptors are set up. The caller of the PL/I MAIN procedure must 
  15630.      know what is expected by the procedure, including any required 
  15631.      descriptors. 
  15632.  
  15633.  
  15634. ΓòÉΓòÉΓòÉ <hidden> Begin Blocks ΓòÉΓòÉΓòÉ
  15635.  
  15636. Description 
  15637.   A begin-block is a sequence of statements delimited by a BEGIN statement and 
  15638.   a corresponding END statement. 
  15639.  
  15640.   Begin blocks are always internal. They must be contained within another block 
  15641.   and can be nested. One of the containing blocks must be a procedure. 
  15642.  
  15643. Example 
  15644.   For example: 
  15645.  
  15646.     B:  BEGIN;
  15647.       statement-1
  15648.       statement-2
  15649.          .
  15650.          .
  15651.       statement-n
  15652.     END B;
  15653.  
  15654.   Unlike a procedure, a label is optional for a begin block.  If one or more 
  15655.   labels are prefixed to a BEGIN statement, they serve only to identify the 
  15656.   starting point of the block.  The label following END is optional. 
  15657.  
  15658. Related Information 
  15659.  
  15660.     BEGIN statement 
  15661.     Begin-block activation 
  15662.     Begin-block termination 
  15663.  
  15664.  
  15665. ΓòÉΓòÉΓòÉ <hidden> BEGIN Statement ΓòÉΓòÉΓòÉ
  15666.  
  15667. Description 
  15668.   The BEGIN statement and a corresponding END statement delimit a begin-block. 
  15669.   The options of the BEGIN statement can appear in any order. 
  15670.  
  15671. Syntax 
  15672.  
  15673.  
  15674.               ΓöîΓöÇΓöÇORDERΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇNOCHARGRAPHICΓöÇΓöÇΓöÉ
  15675. ΓöÇΓöÇΓöÇΓöÇBEGINΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  15676.               ΓööΓöÇΓöÇREORDERΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇCHARGRAPHICΓöÇΓöÇΓöÇΓöÇΓöÿ
  15677.  
  15678.  
  15679. ΓòÉΓòÉΓòÉ <hidden> Subroutines ΓòÉΓòÉΓòÉ
  15680.  
  15681. Description 
  15682.   A subroutine is an internal or external procedure that is invoked by a CALL 
  15683.   statement. It obtains temporary control of the program. 
  15684.  
  15685.   The arguments of the CALL statement are associated with the parameters of the 
  15686.   invoked procedure. The subroutine is activated, and execution begins. The 
  15687.   arguments (zero or more) may be input only, output only, or both. 
  15688.  
  15689.   A subroutine is normally terminated by the RETURN or END statements. Control 
  15690.   is then returned to the invoking block. Like any procedure, a subroutine can 
  15691.   be abnormally terminated. 
  15692.  
  15693. Examples 
  15694.   Invoking subroutines 
  15695.  
  15696. Related Information 
  15697.  
  15698.     Built-in subroutines 
  15699.     PROCEDURE statement 
  15700.     Procedure termination 
  15701.  
  15702.  
  15703. ΓòÉΓòÉΓòÉ <hidden> Examples- Invoking Subroutines ΓòÉΓòÉΓòÉ
  15704.  
  15705. The following examples illustrate the invocation of subroutines that are 
  15706. internal to and external to the invoking block. 
  15707.  
  15708.  Example 1: 
  15709.  
  15710.        PRMAIN:  PROCEDURE;
  15711.              DECLARE NAME CHARACTER (20),
  15712.                      ITEM BIT(5),
  15713.       4              OUTSUB ENTRY;
  15714.       1      CALL OUTSUB (NAME, ITEM);
  15715.              END PRMAIN;
  15716.  
  15717.             *PROCESS;
  15718.  
  15719.       2      OUTSUB:  PROCEDURE (A,B);
  15720.                 DECLARE A CHARACTER (20),
  15721.                         B BIT(5);
  15722.       3         PUT LIST (A,B);
  15723.                 END OUTSUB;
  15724.  
  15725.   Explanation- 
  15726.  
  15727.    1    The CALL statement in PRMAIN invokes the procedure OUTSUB in 2 with the 
  15728.         arguments NAME and ITEM. 
  15729.  
  15730.    2    OUTSUB associates NAME and ITEM passed from PRMAIN with its parameters, 
  15731.         A and B. When OUTSUB is executed, each reference to A is treated as a 
  15732.         reference to NAME. Each reference to B is treated as a reference to 
  15733.         ITEM. 
  15734.  
  15735.    3    The PUT LIST (A,B) statement transmits the values of NAME and ITEM to 
  15736.         the default output file, SYSPRINT. 
  15737.  
  15738.    4    In the declaration of OUTSUB as an entry-constant, no parameter 
  15739.         descriptor has to be given with the ENTRY attribute, because the 
  15740.         attributes of the arguments and parameters match. 
  15741.  
  15742.  Example 2: 
  15743.  
  15744.        A:  PROCEDURE;
  15745.            DECLARE RATE FLOAT (10),
  15746.                    TIME FLOAT(5),
  15747.                    DISTANCE FLOAT(15),
  15748.                    MASTER FILE;
  15749.       1    CALL READCM (RATE, TIME, DISTANCE, MASTER);
  15750.  
  15751.       3    READCM:
  15752.       2         PROCEDURE (W,X,Y,Z);
  15753.                   DECLARE W FLOAT (10),
  15754.                           X FLOAT(5),
  15755.                           Y FLOAT(15), Z FILE;
  15756.                   GET FILE (Z) LIST (W,X,Y);
  15757.                   Y = W*X;
  15758.                   IF Y > 0 THEN
  15759.                     RETURN;
  15760.                    ELSE
  15761.                      PUT LIST('ERROR READCM');
  15762.                   END READCM;
  15763.                   END A;
  15764.  
  15765.   Explanation- 
  15766.  
  15767.    1    The arguments RATE, TIME, DISTANCE, and MASTER are passed to the 
  15768.         procedure READCM in 3 and associated with the parameters W, X, Y, and 
  15769.         Z. 
  15770.  
  15771.    2    A reference to W is the same as a reference to RATE, X the same as 
  15772.         TIME, Y the same as DISTANCE, and Z the same as MASTER. 
  15773.  
  15774.    3    Note that READCM is not explicitly declared in A. It is implicitly 
  15775.         declared with the ENTRY attribute by its specification on the PROCEDURE 
  15776.         statement. 
  15777.  
  15778.  
  15779. ΓòÉΓòÉΓòÉ <hidden> Functions ΓòÉΓòÉΓòÉ
  15780.  
  15781. Description 
  15782.   A function is a procedure that has zero or more arguments and is invoked by a 
  15783.   function reference in an expression. The function reference transfers control 
  15784.   to a function procedure, and returns a value, and control, to replace the 
  15785.   function reference in the evaluation of the expression. This single value can 
  15786.   be of any data type except entry. The evaluation of the expression then 
  15787.   continues. 
  15788.  
  15789.   The function is distinguished from a subroutine by the RETURNS attribute on 
  15790.   the PROCEDURE statement. 
  15791.  
  15792.   Whenever a function is invoked, the arguments in the invoking expression are 
  15793.   associated with the parameters of the entry point. Control is then passed to 
  15794.   that entry point. The function is activated and execution begins. 
  15795.  
  15796.   The RETURN statement terminates a function and returns the value specified in 
  15797.   its expression to the invoking expression. 
  15798.  
  15799. Usage Notes 
  15800.   A function can be abnormally terminated. If this method is used, evaluation 
  15801.   of the expression that invoked the function is not completed, and control 
  15802.   goes to the designated statement. 
  15803.  
  15804.   In some instances, a function can be defined so that it does not require an 
  15805.   argument list. In such cases, the appearance of an external function name 
  15806.   within an expression is recognized as a function reference only if the 
  15807.   function name has been explicitly declared as an entry name. 
  15808.  
  15809. Examples 
  15810.   Invoking functions 
  15811.  
  15812. Related Information 
  15813.  
  15814.     Entry invocation 
  15815.     Built-in functions 
  15816.     BUILTIN attribute 
  15817.     PROCEDURE statement 
  15818.     Procedure termination 
  15819.  
  15820.  
  15821. ΓòÉΓòÉΓòÉ <hidden> Examples- Invoking Functions ΓòÉΓòÉΓòÉ
  15822.  
  15823. The following examples illustrate the invocation of functions that are internal 
  15824. to and external to the invoking block. 
  15825.  
  15826.  In the following example, the assignment statement contains a reference to 
  15827.   the SPROD function: 
  15828.  
  15829.           MAINP: PROCEDURE;
  15830.                  GET LIST (A, B, C, Y);
  15831.          1       X = Y**3+SPROD(A,B,C);
  15832.  
  15833.          2       SPROD: PROCEDURE (U,V,W)
  15834.                         RETURNS (BIN FLOAT(21));
  15835.                         DCL (U,V,W) BIN FLOAT(53);
  15836.                         IF U > V + W THEN
  15837.          3                   RETURN (0);
  15838.                         ELSE
  15839.          3                   RETURN (U*V*W);
  15840.                         END SPROD;
  15841.  
  15842.   Explanation- 
  15843.  
  15844.    1    When SPROD is invoked, the arguments A, B, and C are associated with 
  15845.         the parameters U, V, and W in 2, respectively. 
  15846.  
  15847.    2    SPROD is an internal function. If SPROD were external, MAINP would 
  15848.         contain an entry declaration with RETURNS specified. 
  15849.  
  15850.    3    SPROD returns either 0 or the value represented by U*V*W, along with 
  15851.         control to the expression in MAINP. The returned value is taken as the 
  15852.         value of the function reference, and evaluation of the expression 
  15853.         continues. 
  15854.  
  15855.  Consider the following: 
  15856.  
  15857.         MAINP:  PROCEDURE;
  15858.                 DCL TPROD ENTRY (BIN FLOAT(53),
  15859.                                  BIN FLOAT(53),
  15860.                                  BIN FLOAT(53),
  15861.                                  LABEL) EXTERNAL
  15862.                 RETURNS (BIN FLOAT(21));
  15863.                 GET LIST (A,B,C,Y);
  15864.          1      X = Y**3+TPROD(A,B,C,LAB1);
  15865.                 LAB1:  CALL ERRT;
  15866.                 END MAINP;
  15867.  
  15868.          *PROCESS
  15869.          1      TPROD:  PROCEDURE (U,V,W,Z)
  15870.                   RETURNS (BIN FLOAT(21));
  15871.                   DCL (U,V,W) BIN FLOAT(53);
  15872.                   DECLARE Z LABEL;
  15873.  
  15874.          2        IF U > V + W THEN
  15875.                        GO TO Z;
  15876.          3             ELSE RETURN (U*V*W);
  15877.                   END TPROD;
  15878.  
  15879.   Explanation- 
  15880.  
  15881.    1    When TPROD is invoked, LAB1 is associated with parameter Z. 
  15882.  
  15883.    2    If U is greater than V + W, control returns to MAINP at the statement 
  15884.         labeled LAB1. Evaluation of the assignment in 1 is discontinued. 
  15885.  
  15886.    3    If U is not greater than V + W, U*V*W is calculated and returned to 
  15887.         MAINP in the normal fashion. Evaluation of the assignment in 1 
  15888.         continues. 
  15889.  
  15890.   Notice that TPROD is an external procedure. It has an explicit entry 
  15891.   declaration in MAINP. 
  15892.  
  15893.  
  15894. ΓòÉΓòÉΓòÉ <hidden> RETURNS Attribute ΓòÉΓòÉΓòÉ
  15895.  
  15896. Description 
  15897.   The RETURNS attribute specifies (within the invoking procedure) that the 
  15898.   value returned from an external function procedure is treated as though it 
  15899.   had the attributes given in the attribute list.  The word "treated" is used 
  15900.   because no conversion is performed in an invoking block upon any value 
  15901.   returned to it.  It further specifies, by implication, the ENTRY attribute 
  15902.   for the name.  Unless attributes for the returned value can be determined 
  15903.   correctly by default, any invocation of an external function must appear 
  15904.   within the scope of a declaration with the RETURNS attribute for the entry 
  15905.   name. 
  15906.  
  15907.   If more than one attribute is specified, they must be separated by blanks 
  15908.   (except for attributes such as precision, that are enclosed in parentheses). 
  15909.  
  15910.   The attributes that can be specified are any of the data attributes and 
  15911.   alignment attributes for variables (except those for ENTRY variables). The 
  15912.   OFFSET attribute can include an area reference. 
  15913.  
  15914.   String lengths and area sizes must be specified by integers.  The returned 
  15915.   value has the specified length or size. 
  15916.  
  15917.   The RETURNS attribute must agree with the attributes specified in (defaults 
  15918.   for) the RETURNS option of the PROCEDURE statement or the ENTRY statement to 
  15919.   which the entry name is prefixed.  The value returned will have attributes 
  15920.   determined from the RETURNS option. If they do not agree, there is an error, 
  15921.   since no conversion is performed. 
  15922.  
  15923.   If the RETURNS attribute is not specified for an external entry-constant, or 
  15924.   an entry variable, the attributes for the value returned are set by default. 
  15925.  
  15926. Related Information 
  15927.  
  15928.     ENTRY attribute 
  15929.  
  15930.     RETURN statement 
  15931.  
  15932.     CALL statement 
  15933.  
  15934.   Syntax 
  15935.  
  15936.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15937.                                  Γöé
  15938.      ΓöÇΓöÇΓöÇΓöÇRETURNSΓöÇΓöÇ(ΓöÇΓöÇΓöÇattributeΓöÇΓö┤ΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  15939.  
  15940.  
  15941. ΓòÉΓòÉΓòÉ <hidden> CALL Statement ΓòÉΓòÉΓòÉ
  15942.  
  15943. Description 
  15944.   Use the CALL statement to invoke a procedure and transfer control to it. 
  15945.  
  15946.   References and expressions in the CALL statement are evaluated in the block 
  15947.   in which the call is executed. This includes execution of any ON-units 
  15948.   entered as the result of the evaluations. 
  15949.  
  15950.   The environment of the invoked procedure is established after evaluation of 
  15951.   any expressions and before the procedure is invoked. 
  15952.  
  15953.   A CALL statement must not be used to invoke a procedure if control is to be 
  15954.   returned to the invoking procedure by means of a RETURN(expression) 
  15955.   statement. 
  15956.  
  15957.   If the procedure invoked by the CALL statement has been specified in a FETCH 
  15958.   statement or a RELEASE statement, and if it is not present in main storage, 
  15959.   the CALL statement initiates dynamic loading of the procedure from auxiliary 
  15960.   storage. 
  15961.  
  15962. Syntax 
  15963.  
  15964. ΓöÇΓöÇΓöÇΓöÇCALLΓöÇΓöÇΓö¼ΓöÇentry-referenceΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  15965.             Γö£ΓöÇgeneric-nameΓöÇΓöÇΓöÇΓöÇΓöñ   ΓööΓöÇ(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÿ
  15966.             ΓööΓöÇbuilt-in-nameΓöÇΓöÇΓöÇΓöÿ       Γöé ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  15967.                                       Γöé               Γöé Γöé
  15968.                                       ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇargumentΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÿ
  15969.                                           ΓööΓöÇ*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15970.  
  15971.  
  15972. ΓòÉΓòÉΓòÉ <hidden> BUILTIN Attribute ΓòÉΓòÉΓòÉ
  15973.  
  15974. Description 
  15975.   The BUILTIN attribute specifies that a name is a built-in function name, 
  15976.   pseudovariable name, or built-in subroutine name. 
  15977.  
  15978. Usage Notes 
  15979.   Built-in names can be used as programmer-defined names, defined by explicit 
  15980.   or implicit declaration. The BUILTIN attribute can be declared for a built-in 
  15981.   name in any block that has inherited, from a containing block, some other 
  15982.   declaration of the name. 
  15983.  
  15984.   Note:   PLITDLI and ASMTDLI cannot be declared with the BUILTIN attribute but 
  15985.           are treated as special subroutines.
  15986.  
  15987. Related Information 
  15988.   PL/I Built-in subroutines, functions, and pseudovariables 
  15989.  
  15990. Syntax 
  15991.  
  15992. ΓöÇΓöÇΓöÇΓöÇBUILTINΓöÇΓöÇΓöÇΓöÇ
  15993.  
  15994.  
  15995. ΓòÉΓòÉΓòÉ <hidden> Passing Arguments between Procedures ΓòÉΓòÉΓòÉ
  15996.  
  15997. Description 
  15998.   Passing arguments from one procedure to another happens in the following 
  15999.   ways: 
  16000.  
  16001.   - By means of arguments passed from an invoking procedure to the parameters 
  16002.   of an invoked procedure 
  16003.  
  16004.   - By a value returned from an invoked procedure 
  16005.  
  16006.   - By names known within both procedures. 
  16007.  
  16008.   Therefore, a procedure can operate upon different data when it is invoked 
  16009.   from different points. The use of arguments and parameters provides the means 
  16010.   for generalizing procedures so that data whose names are not known within the 
  16011.   invoking procedure can be operated on by the invoked procedure. 
  16012.  
  16013.   When a subroutine or function is invoked, the arguments of the invoking 
  16014.   reference are associated, from left to right, with the parameters in the 
  16015.   parameter list of the procedure. The number of arguments and parameters must 
  16016.   be the same. 
  16017.  
  16018.   Expressions in the argument list are evaluated in the invoking block before 
  16019.   the subroutine or function is invoked. 
  16020.  
  16021.   A parameter has no storage associated with it. It is merely a means of 
  16022.   allowing the invoked procedure to access storage allocated in the invoking 
  16023.   procedure. A reference to a parameter in a procedure is a reference to the 
  16024.   corresponding argument. Any change to the value of the parameter is made to 
  16025.   the value of the argument. 
  16026.  
  16027.   A reference to an argument, not its value, is generally passed to a 
  16028.   subroutine or function.  This is known as passing arguments by reference. 
  16029.   However, this is not always possible or desirable.  Constants, for example, 
  16030.   should not be altered by an invoked procedure.  Therefore, the compiler 
  16031.   allocates storage (in storage belonging to the invoking procedure) for some 
  16032.   arguments using attributes that agree with the parameter, converts, and 
  16033.   assigns to the allocated storage, and then passes a reference to the 
  16034.   allocated storage.  These storage locations are called dummy arguments.  Any 
  16035.   change to a parameter for which a dummy argument has been created is 
  16036.   reflected only in the value of the dummy argument and not in the value of the 
  16037.   original argument from which it was constructed. 
  16038.  
  16039.   Argument attributes are derived for internal entry constants using the 
  16040.   declarations of the parameters. But for entry variables and external 
  16041.   entry-constants, a parameter-descriptor list must be given in an appropriate 
  16042.   entry declaration, if conversion is required. 
  16043.  
  16044. Usage Rules 
  16045.   Rules for passing arguments to procedures 
  16046.  
  16047. Related Information 
  16048.  
  16049.     Parameter attributes 
  16050.     Passing an argument to the main procedure 
  16051.     Dummy argument attributes 
  16052.  
  16053.  
  16054. ΓòÉΓòÉΓòÉ <hidden> Rules for Passing Arguments to Procedures ΓòÉΓòÉΓòÉ
  16055.  
  16056. In general: 
  16057.  
  16058.     Problem data arguments can be passed to parameters of any problem data 
  16059.      type, except that graphic values can only be passed to graphic parameters, 
  16060.      and graphic parameters must have graphic arguments. 
  16061.  
  16062.     Program control data arguments must be passed to parameters of the same 
  16063.      type. 
  16064.  
  16065.     Aggregate parameters can have aggregate or element arguments. 
  16066.  
  16067. In addition, the following argument passing rules apply: 
  16068.  
  16069.     If a parameter is an element (that is, a variable that is neither a 
  16070.      structure nor an array) the argument must be an element expression. 
  16071.  
  16072.     If a parameter is an array, the argument can be an array expression or an 
  16073.      element expression.  If the argument is an element expression, the 
  16074.      corresponding parameter descriptor or declaration must specify the bounds 
  16075.      of the array parameter as integers.  This causes the construction of a 
  16076.      dummy array argument, whose bounds are those of the array parameter. The 
  16077.      value of the element expression is then assigned to the value of each 
  16078.      element of the dummy array argument. 
  16079.  
  16080.     If the argument is an array expression, the number of dimensions must be 
  16081.      the same, and the bounds must either be the same or must, for the 
  16082.      parameter, be declared with asterisks. 
  16083.  
  16084.     If a parameter is a structure, the argument must be a structure expression 
  16085.      or an element expression.  If the argument is an element expression, the 
  16086.      corresponding parameter descriptor for an external entry point must 
  16087.      specify the structure description of the structure parameter.  This causes 
  16088.      the construction of a dummy structure argument, whose description matches 
  16089.      that of the structure parameter.  The value of the element expression then 
  16090.      becomes the value of each element of the dummy structure argument.  The 
  16091.      relative structuring of the argument and the parameter must be the same; 
  16092.      the level numbers need not be identical.  The element value must be one 
  16093.      that can be converted to conform with the attributes of all the elementary 
  16094.      names of the structure. 
  16095.  
  16096.     If the parameter is an array of structures, the argument can be an element 
  16097.      expression, an array expression, a structure expression, or an array of 
  16098.      structures expression. 
  16099.  
  16100.     Whenever a varying-length element string argument is passed to a 
  16101.      nonvarying element string parameter whose length is undefined (that is, 
  16102.      specified by an asterisk), a dummy argument whose length is the current 
  16103.      length of the original argument is passed to the invoked procedure. 
  16104.  
  16105.     When the argument is a varying-length string array passed to a nonvarying 
  16106.      undefined-length array parameter, a dummy argument whose element length is 
  16107.      the maximum length is passed. 
  16108.  
  16109.     If the parameter has one of the program control data (except locator) 
  16110.      attributes, the argument must be a reference of the same data type. 
  16111.  
  16112.     If a parameter is a locator of either pointer or offset type, the argument 
  16113.      must be a locator reference of either type. If the types differ, a dummy 
  16114.      argument is created. The parameter descriptor of an offset parameter must 
  16115.      not specify an associated area. 
  16116.  
  16117.     Entry variables passed as arguments are assumed to be aligned, so that no 
  16118.      dummy argument is created when only the alignments of argument and 
  16119.      parameter differ. 
  16120.  
  16121.     A simple parameter can be associated with an argument of any storage 
  16122.      class.  However, if more than one generation of the argument exists, the 
  16123.      parameter is associated only with that generation existing at the time of 
  16124.      invocation. 
  16125.  
  16126.     A controlled parameter must always have a corresponding controlled 
  16127.      argument that cannot be subscripted, cannot be an element of a structure, 
  16128.      and cannot cause a dummy to be created.  If more than one generation of 
  16129.      the argument exists at the time of invocation, the parameter corresponds 
  16130.      to the entire stack of these generations.  Thus, at the time of the 
  16131.      invocation, a controlled parameter represents the current generation of 
  16132.      the corresponding argument.  A controlled parameter can be allocated and 
  16133.      freed in the invoked procedure, thus allowing the manipulation of the 
  16134.      allocation stack of the associated argument. 
  16135.  
  16136.     When no parameter descriptor is given, the entire stack is passed. In this 
  16137.      case, the parameter can be simple or controlled and can be correspondingly 
  16138.      associated with either the latest generation or the entire stack. 
  16139.  
  16140.     In addition, a dummy argument is created when the original argument is any 
  16141.      of the following: 
  16142.  
  16143.       - A constant. 
  16144.  
  16145.       - An expression with operators, parentheses, or function references. 
  16146.  
  16147.       - A variable whose data attributes or alignment attributes or connected 
  16148.         attribute are different from the attributes declared for the parameter. 
  16149.  
  16150.         This does not apply to simple parameters when only bounds, lengths, or 
  16151.         size differ and, for the parameter, these are declared with asterisks. 
  16152.  
  16153.         This does not apply when an expression other than an integer is used to 
  16154.         define the bounds, length or size of a controlled parameter. The 
  16155.         compiler assumes that the argument and parameter bounds, length or size 
  16156.         match. 
  16157.  
  16158.         In the case of arguments and parameters with the PICTURE attribute, a 
  16159.         dummy argument is created unless the picture specifications match 
  16160.         exactly, after any repetition factors are applied. The only exception 
  16161.         is that an argument or parameter with a + sign in a scaling factor 
  16162.         matches a parameter or argument without the + sign. 
  16163.  
  16164.       - A controlled string or area (because an ALLOCATE statement could change 
  16165.         the length or extent). 
  16166.  
  16167.       - A string or area with an adjustable length or size, associated with a 
  16168.         noncontrolled parameter whose length or size is a constant. 
  16169.  
  16170.       - An iSUB-defined array 
  16171.  
  16172.  
  16173. ΓòÉΓòÉΓòÉ <hidden> Entry Declaration ΓòÉΓòÉΓòÉ
  16174.  
  16175. Description 
  16176.   Entry declaration means declaring the names of programmer-defined subroutines 
  16177.   and functions. The entry data can be an entry-constant or the value of an 
  16178.   entry variable. 
  16179.  
  16180.   An entry-constant is a name written as a label prefix to a PROCEDURE 
  16181.   statement, or an ENTRY statement or a name declared with the ENTRY attribute 
  16182.   and not the VARIABLE attribute, or the name of a mathematical built-in 
  16183.   function. It can be assigned to an entry variable. 
  16184.  
  16185.   When an entry-constant that is an entry point of an internal procedure is 
  16186.   assigned to an entry variable, the assigned value remains valid only for as 
  16187.   long as the block that the entry-constant was internal to remains active 
  16188.   (and, for recursive procedures, remains current). 
  16189.  
  16190. Examples 
  16191.  
  16192.     Consider the following example of entry declaration:. 
  16193.  
  16194.           P:  PROCEDURE;
  16195.               DECLARE EV ENTRY VARIABLE,
  16196.                (E1,E2) ENTRY;
  16197.  
  16198.           EV = E1;
  16199.           CALL EV;
  16200.           EV = E2;
  16201.           CALL EV;
  16202.  
  16203.      P, E1, and E2 are entry-constants. EV is an entry variable. The first CALL 
  16204.      statement invokes the entry point E1. The second CALL invokes the entry 
  16205.      point E2. 
  16206.  
  16207.     The following example declares F(5), a subscripted entry variable: 
  16208.  
  16209.           DECLARE (A,B,C,D,E) ENTRY,
  16210.           DECLARE F(5) ENTRY VARIABLE INITIAL (A,B,C,D,E);
  16211.           DO I = 1 TO 5;
  16212.           CALL F(I) (X,Y,Z);
  16213.  
  16214.      The five entries A, B, C, D, and E are each invoked with the parameters X, 
  16215.      Y, and Z. 
  16216.  
  16217. Related Information 
  16218.  
  16219.     Entry-constants 
  16220.     Entry variables 
  16221.     GENERIC attribute 
  16222.     ENTRYADDR built-in function 
  16223.  
  16224.  
  16225. ΓòÉΓòÉΓòÉ <hidden> Entry Constants ΓòÉΓòÉΓòÉ
  16226.  
  16227. Description 
  16228.   Entry constants may be internal or external. 
  16229.  
  16230.   Internal entry-constants are explicitly declared by the appearance of a label 
  16231.   prefix to a PROCEDURE statement. or an ENTRY statement. A 
  16232.   parameter-descriptor list is obtained from the parameter declarations, if 
  16233.   any, and by defaults. 
  16234.  
  16235.   External entry-constants must be explicitly declared. This declaration: 
  16236.  
  16237.     Defines an entry point to an external procedure. 
  16238.  
  16239.     Optionally specifies a parameter-descriptor list (the number of parameters 
  16240.      and their attributes), if any, for the entry point. 
  16241.  
  16242.     Optionally specifies the attributes of the value that is returned by the 
  16243.      procedure if the entry is invoked as a function. 
  16244.  
  16245. External Entry Constant Syntax 
  16246.  
  16247.  
  16248. ΓöÇΓöÇΓöÇΓöÇΓöÇENTRYΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16249.                ΓööΓöÇ(ΓöÇΓöÇΓöñ parameter-descriptor-list Γö£ΓöÇΓöÇ)ΓöÇΓöÿ
  16250.  
  16251.  
  16252. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  16253.     ΓööΓöÇRETURNSΓöÇ(ΓöÇΓöÇattribute-listΓöÇΓöÇ)ΓöÇΓöÇΓöÿ   ΓööΓöÇOPTIONSΓöÇ(ΓöÇΓöÇcharacteristic-listΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  16254.  
  16255.                    ΓöîΓöÇIRREDUCIBLEΓöÇΓöÉ
  16256. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16257.     ΓööΓöÇEXTERNALΓöÇΓöÿ   ΓööΓöÇREDUCIBLEΓöÇΓöÇΓöÇΓöÿ
  16258.  
  16259.  
  16260. where parameter-descriptor-list is:
  16261.     ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16262.                                  Γöé
  16263. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ parameter-descriptor Γö£ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16264.  
  16265.  
  16266. where parameter-descriptor is:
  16267.  
  16268. Γö£ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16269.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                          Γöé
  16270.    Γöé          Γöé                          Γöé
  16271.    Γö£ΓöÇΓöÇattributeΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16272.    Γö£ΓöÇ*ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16273.    Γöé   ΓööΓöÇOPTIONALΓöÇΓöÿ                       Γöé
  16274.    Γöé                                      Γöé
  16275.    ΓööΓöÇΓöÇΓöñ structure-parameter-descriptor Γö£ΓöÇΓöÇΓöÿ
  16276.  
  16277.  
  16278. where structure-parameter-descriptor is:
  16279.                             ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16280.                                                           Γöé
  16281. Γö£ΓöÇΓöÇ1ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇΓöÇΓöÇlevelΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16282.      Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé             Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  16283.      Γöé              Γöé Γöé             Γöé             Γöé  Γöé
  16284.      ΓööΓöÇΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÿ             ΓööΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  16285.  
  16286.  
  16287. ΓòÉΓòÉΓòÉ <hidden> Entry Variables ΓòÉΓòÉΓòÉ
  16288.  
  16289. Description 
  16290.   The possible attributes of the declaration of an entry variable (which can 
  16291.   contain both internal and external entry values) are listed below. The 
  16292.   variable can be part of an aggregate, although structuring and dimension 
  16293.   attributes are not shown. 
  16294.  
  16295.   VARIABLE must be specified or implied to establish the name as an entry 
  16296.   variable. 
  16297.  
  16298.   An ENTRY can be BASED, but a based ENTRY cannot be used as (or as part of) an 
  16299.   argument of a CALL statement. 
  16300.  
  16301.   The ENTRYADDR built-in function and ENTRYADDR built-in pseudovariable can be 
  16302.   used to manipulate entry point addresses of procedures. 
  16303.  
  16304. Entry Variable Syntax 
  16305.  
  16306. ΓöÇΓöÇΓöÇENTRYΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ
  16307.            ΓööΓöÇ(ΓöÇΓöñparameterΓöÇdescriptorΓöÇlistΓö£ΓöÇ)ΓöÇΓöÿ   ΓööΓöÇVARIABLEΓöÇΓöÿ
  16308.  
  16309. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16310.       ΓööΓöÇRETURNSΓöÇΓöÇ(ΓöÇΓöÇattributeΓöÇlistΓöÇΓöÇ)ΓöÇΓöÿ
  16311.  
  16312. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16313.       ΓööΓöÇOPTIONSΓöÇΓöÇ(ΓöÇΓöÇcharacteristicΓöÇlistΓöÇΓöÇ)ΓöÇΓöÿ
  16314.  
  16315.                   ΓöîΓöÇIRREDUCIBLEΓöÇΓöÉ
  16316. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16317.                   ΓööΓöÇREDUCIBLEΓöÇΓöÇΓöÇΓöÿ
  16318. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16319.       ΓööΓöÇscope-attributeΓöÇΓöÿ      ΓööΓöÇstorage-attributeΓöÇΓöÿ
  16320.  
  16321. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16322.     ΓööΓöÇalignment-attributeΓöÇΓöÇΓöÿ   ΓööΓöÇparameterΓöÇΓöÿ
  16323. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16324.       ΓööΓöÇDEFINEDΓöÇΓöÿ      ΓööΓöÇINITIALΓöÇΓöÿ
  16325.  
  16326. where parameter-descriptor-list is:
  16327.     ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16328.                                  Γöé
  16329. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ parameter-descriptor Γö£ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16330.  
  16331.  
  16332. where parameter-descriptor is:
  16333.  
  16334. Γö£ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16335.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                          Γöé
  16336.    Γöé          Γöé                          Γöé
  16337.    Γö£ΓöÇΓöÇattributeΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16338.    Γö£ΓöÇ*ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16339.    Γöé   ΓööΓöÇOPTIONALΓöÇΓöÿ                       Γöé
  16340.    Γöé                                      Γöé
  16341.    ΓööΓöÇΓöÇΓöñ structure-parameter-descriptor Γö£ΓöÇΓöÇΓöÿ
  16342.  
  16343.  
  16344. where structure-parameter-descriptor is:
  16345.                             ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16346.                                                           Γöé
  16347. Γö£ΓöÇΓöÇ1ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ,ΓöÇΓöÇΓöÇΓöÇlevelΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16348.      Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé             Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  16349.      Γöé              Γöé Γöé             Γöé             Γöé  Γöé
  16350.      ΓööΓöÇΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÿ             ΓööΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  16351.  
  16352.  
  16353. Note:   The attributes can appear in any order. 
  16354.  
  16355.  
  16356. ΓòÉΓòÉΓòÉ <hidden> ENTRY Attribute ΓòÉΓòÉΓòÉ
  16357.  
  16358. Description 
  16359.   The ENTRY attribute specifies that the name being declared is either an 
  16360.   external entry-constant or an entry variable. It also describes the 
  16361.   attributes of the parameters of the entry point. 
  16362.  
  16363. Usage Rules 
  16364.  
  16365.     Defaults are not applied to a parameter-descriptor unless attributes or 
  16366.      level numbers are specified in the descriptor. If a level number and/or 
  16367.      the dimension attribute only is specified in the descriptor, FLOAT 
  16368.      DECIMAL(6) REAL are the defaults. 
  16369.  
  16370.     Defaults are not applied if an asterisk is specified.  For example, in the 
  16371.      following declaration, defaults are applied only to the third parameter: 
  16372.  
  16373.           DCL X ENTRY(*, * OPTIONAL, ALIGNED);/* DEFAULTS APPLIED TO 3RD PARM */
  16374.  
  16375.     Extents (lengths, sizes, and bounds) in parameter-descriptors must be 
  16376.      specified by integers or by asterisks. Extents in descriptors for 
  16377.      controlled parameters must be specified by asterisks. 
  16378.  
  16379. Syntax 
  16380.  
  16381. ΓöÇΓöÇΓöÇΓöÇENTRYΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16382.              Γöö(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÿ
  16383.                  ΓööΓöñparameter-descriptor-listΓö£Γöÿ
  16384.  
  16385. where parameter-descriptor-list is:
  16386.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16387.                             Γöé
  16388. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñparameter-descriptorΓö£Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16389.  
  16390. where parameter-descriptor is:
  16391. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16392.       Γöé         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ        Γöé
  16393.       Γöé                      Γöé        Γöé
  16394.       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16395.       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ
  16396.       Γöé                  ΓööΓöÇOPTIONALΓöÇΓöÿ  Γöé
  16397.       Γöé                                Γöé
  16398.       ΓööΓöñstructure-parameter-descriptorΓö£Γöÿ
  16399.  
  16400. where structure-parameter-descriptor is:
  16401.                                 ΓöîΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16402.                                                            Γöé
  16403. ΓöÇΓöÇΓöÇΓöÇ1ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ,ΓöÇΓöÇlevelΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇ
  16404.          Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé            Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  16405.          Γöé              Γöé Γöé            Γöé              Γöé Γöé
  16406.          ΓööΓöÇΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÿ            ΓööΓöÇΓöÇΓöÇΓöÇattributeΓöÇΓöÇΓö┤ΓöÇΓöÿ
  16407.  
  16408.  
  16409. ΓòÉΓòÉΓòÉ <hidden> OPTIONAL attribute ΓòÉΓòÉΓòÉ
  16410.  
  16411. Description 
  16412.   The OPTIONAL attribute can be specified in the parameter-descriptor-list of 
  16413.   the ENTRY attribute.  The ENTRY must have the OPTIONS(ASSEMBLER) attribute. 
  16414.  
  16415.   OPTIONAL arguments can be omitted in calls by specifying an asterisk for the 
  16416.   argument.  The parameter descriptor corresponding to the omitted argument 
  16417.   must have the OPTIONAL attribute.  An omitted item can be anywhere in the 
  16418.   argument list, including at the end. 
  16419.  
  16420.   You cannot specify OPTIONAL in the declaration of a parameter, in the DEFAULT 
  16421.   statement, or as a generic-descriptor attribute.  You also cannot: 
  16422.  
  16423.     Apply OPTIONAL and BYVALUE to the same parameter 
  16424.  
  16425.     Omit arguments of generic names or built-in names. 
  16426.  
  16427.   Syntax 
  16428.  
  16429.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇOPTIONALΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16430.  
  16431. Example 
  16432.   Consider the following example: 
  16433.  
  16434.     DCL X ENTRY  (FLOAT OPTIONAL,
  16435.                   FLOAT OPTIONAL)
  16436.                   EXTERNAL OPTIONS (ASM);
  16437.     DCL F FLOAT;
  16438.  
  16439.     CALL X (*, *);             /* BOTH ARGUMENTS ARE OMITTED*/
  16440.     CALL X (*, F);             /* FIRST ARGUMENT IS OMITTED */
  16441.     CALL X (F, *);             /* LAST ARGUMENT IS OMITTED  */
  16442.  
  16443.   Note:   An omitted argument is indicated by a word of zeros in the argument 
  16444.           list. If the omitted argument is also the last argument, the high 
  16445.           order bit of the zero word is set to '1'B. 
  16446.  
  16447.  
  16448. ΓòÉΓòÉΓòÉ <hidden> IRREDUCIBLE and REDUCIBLE Attributes ΓòÉΓòÉΓòÉ
  16449.  
  16450. Description 
  16451.   If the REDUCIBLE or the IRREDUCIBLE attributes are specified in your program, 
  16452.   they are checked for syntax errors, and the implied attribute ENTRY is 
  16453.   applied; otherwise, they are ignored. 
  16454.  
  16455. Syntax 
  16456.  
  16457.       ΓöîΓöÇIRREDUCIBLEΓöÇΓöÉ
  16458. ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇREDUCIBLEΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16459.  
  16460.  
  16461. ΓòÉΓòÉΓòÉ <hidden> GENERIC Attribute ΓòÉΓòÉΓòÉ
  16462.  
  16463. Description 
  16464.   A generic name is declared with the GENERIC attribute, and specifies a set of 
  16465.   entry references.  During compilation, other occurrences of the generic name 
  16466.   are replaced by one of the set of entry references.  Compilation then 
  16467.   continues, using the entry reference. (Thus, generic declarations are a kind 
  16468.   of macro.) Replacement is determined according to generic selection. When a 
  16469.   generic name is encountered, the number of arguments and their attributes are 
  16470.   compared with each generic-descriptor list. The entry reference that replaces 
  16471.   the generic name is the first one whose generic-descriptor list matches the 
  16472.   arguments both in number and attributes. 
  16473.  
  16474. Usage Notes 
  16475.  
  16476.     If all of the descriptors are omitted or consist of an asterisk, the first 
  16477.      entry reference with the correct number of descriptors is selected. 
  16478.  
  16479.     An entry expression used as an argument in a reference to a generic value 
  16480.      only matches a descriptor of type ENTRY. If there is no such description, 
  16481.      the program is in error. 
  16482.  
  16483.     The program is in error if no generic-descriptor list is found to match 
  16484.      the attributes of the arguments to a particular generic name. 
  16485.  
  16486. Examples 
  16487.   Using generic names 
  16488.  
  16489. Syntax for Declaring Generic Entry Data 
  16490.  
  16491. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇDECLAREΓöÇΓöÇΓöÇΓöÇgeneric-nameΓöÇΓöÇGENERICΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16492.  
  16493.        ΓöîΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16494.        Γöé                           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  16495.                                                          Γöé    Γöé
  16496. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇentry-referenceΓöÇΓöÇWHENΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γö┤ΓöÇΓöÇ)ΓöÇΓö┤ΓöÇ)ΓöÇΓöÇ
  16497.                                      ΓööΓöÇgeneric-descriptorΓöÇΓöÿ
  16498.  
  16499.  
  16500. ΓòÉΓòÉΓòÉ <hidden> Examples- Using Generic Names ΓòÉΓòÉΓòÉ
  16501.  
  16502. If a generic data declaration is: 
  16503.  
  16504. DECLARE CALC GENERIC
  16505.              (FXDCAL WHEN (FIXED,FIXED),
  16506.              FLOCAL WHEN (FLOAT,FLOAT),
  16507.              MIXED WHEN (FLOAT,FIXED)),
  16508.         X DECIMAL FLOAT (6),
  16509.         Y BINARY FIXED (15,0);
  16510.  
  16511. and the invoking statement is: 
  16512.  
  16513.         Z = X+CALC(X,Y);
  16514.  
  16515. The compiler looks in CALC for an entry reference with one comma, whose 
  16516. descriptors are DECIMAL or FLOAT, and BINARY or FIXED. It selects MIXED as the 
  16517. replacement. 
  16518.  
  16519. In a similar manner, an entry point to a procedure can be selected by means of 
  16520. dimensionality: 
  16521.  
  16522. DCL  D GENERIC (D1 WHEN((*)),
  16523.                 D2 WHEN((*,*))),
  16524.      A(2),
  16525.      B(3,5);
  16526. CALL D(A);
  16527. CALL D(B);
  16528.  
  16529. The generic name D in the first CALL statement is replaced by the entry 
  16530. expression D1. This is because A and D1 have one dimension. The generic name D 
  16531. in the second CALL statement is replaced by the entry expression D2. 
  16532.  
  16533.  
  16534. ΓòÉΓòÉΓòÉ <hidden> Entry Invocation ΓòÉΓòÉΓòÉ
  16535.  
  16536. Description 
  16537.   There are times when it may not be apparent whether an entry value itself is 
  16538.   used, or if the value returned by the invocation is used. 
  16539.  
  16540.   First, if the entry reference has an argument list, even if null, it is 
  16541.   always invoked.  For example, 'E(1)'. 
  16542.  
  16543.   All of the following are for the no-argument cases: 
  16544.  
  16545.   If the entry reference is used as an argument to a function that will not 
  16546.   accept an argument of type ENTRY, the entry is invoked.  For example: 
  16547.  
  16548.     DCL DATE BUILTIN
  16549.     Z = SUBSTR (DATE,5,2);
  16550.  
  16551.   Date is invoked. 
  16552.  
  16553.   The function is not invoked when the entry reference is any of the following: 
  16554.  
  16555.     Used as an argument to a function that will accept an ENTRY argument. 
  16556.  
  16557.     The right-hand side of an assignment to an entry variable. 
  16558.  
  16559.     In comparison to another entry reference (this comparison can be implied 
  16560.      by a SELECT statement). 
  16561.  
  16562.     An argument passed to an entry parameter. 
  16563.  
  16564.     Used in a context that requires an entry variable. 
  16565.  
  16566.     Used as an argument to a generic name. 
  16567.  
  16568.     An argument enclosed in parentheses.  In the following example, the value 
  16569.      of the entry B is passed as the argument to A: 
  16570.  
  16571.           CALL A((B));
  16572.  
  16573.   In all remaining cases, the entry is invoked. 
  16574.  
  16575.  
  16576. ΓòÉΓòÉΓòÉ <hidden> RETURN Statement ΓòÉΓòÉΓòÉ
  16577.  
  16578. Description 
  16579.   The RETURN statement terminates execution of the subroutine or function 
  16580.   procedure and returns control to the invoking procedure. 
  16581.  
  16582.   Syntax for terminating a procedure 
  16583.  
  16584.     ΓöÇΓöÇRETURNΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16585.                  ΓööΓöÇ(ΓöÇexpressionΓöÇ)ΓöÇΓöÿ
  16586.  
  16587.   The RETURN statement with "expression" is used to terminate a procedure 
  16588.   invoked by a function reference. The value returned to the function reference 
  16589.   is the value of the expression specified, converted to conform to the 
  16590.   attributes specified in the RETURNS option of the invoked procedure. Control 
  16591.   is returned to the function reference. 
  16592.  
  16593.   The RETURN statement without "expression" is used to terminate procedures 
  16594.   invoked as subroutines; control is returned to the point following the CALL 
  16595.   statement. If the RETURN statement terminates the main procedure, the FINISH 
  16596.   condition is raised prior to block termination. 
  16597.  
  16598.  
  16599. ΓòÉΓòÉΓòÉ <hidden> OPTIONS Attribute ΓòÉΓòÉΓòÉ
  16600.  
  16601. Description 
  16602.   The OPTIONS attribute specifies options that an entry point can have, similar 
  16603.   to the OPTIONS option of the PROCEDURE statement and the ENTRY statement. The 
  16604.   keywords can appear in any order. 
  16605.  
  16606.   The OPTIONS attribute is required if the entry point is for a routine that is 
  16607.   written in COBOL or assembler language. 
  16608.  
  16609. Example 
  16610.   An example using the OPTIONS attribute is: 
  16611.  
  16612.     DCL ASSEM OPTIONS(ASM RETCODE)
  16613.         ENTRY(FIXED DEC,*,*,FLOAT);
  16614.  
  16615.     CALL ASSEM(A,B,C,D);    /* VALID   */
  16616.  
  16617.     CALL ASSEM(A,B);        /* VALID   */
  16618.  
  16619.     CALL ASSEM;             /* VALID   */
  16620.  
  16621.     CALL ASSEM(A,,,D);      /* INVALID */
  16622.  
  16623. Syntax 
  16624.  
  16625. ΓöÇΓöÇΓöÇΓöÇOPTIONSΓöÇ(ΓöÇΓöÇΓöñ characteristic-list Γö£ΓöÇΓöÇ)ΓöÇΓöÇΓöÇ
  16626.  
  16627. where characteristic-list is:
  16628.  
  16629. ΓöéΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇBYADDRΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16630.     Γö£ΓöÇΓöÇBYVALUEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16631.     Γöé            ΓöîΓöÇBYADDRΓöÇΓöÇΓöÉ                       Γöé
  16632.     Γö£ΓöÇΓöÇASSEMBLERΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöñ
  16633.     Γöé            ΓööΓöÇBYVALUEΓöÇΓöÿ ΓööΓöÇINTERΓöÇΓöÿ ΓööΓöÇRETCODEΓöÇΓöÿ Γöé
  16634.     Γöé                                              Γöé
  16635.     ΓööΓöÇΓöÇCOBOLΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  16636.               ΓööΓöÇΓöñ additional options Γö£ΓöÇΓöÿ
  16637.  
  16638.  
  16639. where additional-options is:
  16640.  
  16641.  
  16642. Γö£ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16643.     ΓööΓöÇNOMAPΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇNOMAPINΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  16644.             Γöé   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé                   Γöé   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  16645.             Γöé          Γöé   Γöé                   Γöé          Γöé   Γöé
  16646.             ΓööΓöÇ(ΓöÇΓöÇΓöÇARGiΓöÇΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ                   ΓööΓöÇ(ΓöÇΓöÇARGiΓöÇΓöÇΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ
  16647.  
  16648.  
  16649. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöñ
  16650.       ΓööΓöÇNOMAPOUTΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇINTERΓöÇΓöÿ   ΓööΓöÇRETCODEΓöÇΓöÇΓöÿ
  16651.                   Γöé  ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  16652.                   Γöé         Γöé   Γöé
  16653.                   ΓööΓöÇ(ΓöÇΓöÇΓöÇARGiΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ
  16654.  
  16655. where i is an integer.
  16656.  
  16657.  
  16658. ΓòÉΓòÉΓòÉ 1.8. PL/I Statements ΓòÉΓòÉΓòÉ
  16659.  
  16660. Description 
  16661.   You use identifiers, delimiters, operators, and constants to construct PL/I 
  16662.   statements. 
  16663.  
  16664.   Although your source program consists of a series of records or lines, the 
  16665.   PL/I compiler and macro processor view the program as a continuous stream of 
  16666.   characters. There are few restrictions on the format of PL/I statements, and 
  16667.   programs can be written without considering special coding rules or checking 
  16668.   to see that each statement begins in a specific column. A statement can begin 
  16669.   in the next position after the previous statement, or it can be separated by 
  16670.   blanks. 
  16671.  
  16672.   Some statements begin with a percent symbol. These statements are either 
  16673.   %directives that direct preprocessor and compiler operations (controlling 
  16674.   listings) or are PL/I Macro Facility % statements. A % statement must appear 
  16675.   on a line by itself. 
  16676.  
  16677. Usage Tips 
  16678.   To improve readability and maintainability and to avoid unexpected results 
  16679.   caused by loss of trailing blanks in source lines: 
  16680.  
  16681.     Do not split a language element across lines. If a string constant must be 
  16682.      written on multiple lines, use the concatenation operator. 
  16683.  
  16684.     Do not write more than one statement on a line. 
  16685.  
  16686.     Do not split % directives across lines. 
  16687.  
  16688. List of Statements 
  16689.   Please choose among the following PL/I statements and % statements. 
  16690.  
  16691.    %ACTIVATE         LOCATE 
  16692.    ALLOCATE          %NOPRINT 
  16693.    BEGIN             %NOTE 
  16694.    CALL              null 
  16695.    CLOSE             %null 
  16696.    %DEACTIVATE       ON 
  16697.    DECLARE           OPEN 
  16698.    %DECLARE          OTHERWISE (SELECT option) 
  16699.    DEFAULT           %PAGE 
  16700.    DELAY             %PRINT 
  16701.    DELETE            PROCEDURE 
  16702.    DISPLAY           %PROCEDURE 
  16703.    DO                %PROCESS 
  16704.    %DO               *PROCESS 
  16705.    END               PUT 
  16706.    %END              READ 
  16707.    ENTRY             RELEASE 
  16708.    EXIT              RETURN 
  16709.    FETCH             REVERT 
  16710.    FORMAT            REWRITE 
  16711.    FREE              SELECT 
  16712.    GET               SIGNAL 
  16713.    GO TO             %SKIP 
  16714.    %GO TO            STOP 
  16715.    IF                UNLOCK 
  16716.    %IF               WAIT 
  16717.    %INCLUDE          WHEN 
  16718.    LEAVE             WRITE 
  16719.  
  16720.  
  16721. ΓòÉΓòÉΓòÉ <hidden> %ACTIVATE Statement ΓòÉΓòÉΓòÉ
  16722.  
  16723. Description 
  16724.   A %ACTIVATE preprocessor statement makes an identifier active and eligible 
  16725.   for replacement. Any subsequent encounter of that identifier in the input 
  16726.   text while the identifier is active will initiate replacement activity. 
  16727.  
  16728.   The execution of a %ACTIVATE statement for an identifier that is already 
  16729.   activated has no effect, except to change from RESCAN to NORESCAN, or vice 
  16730.   versa. 
  16731.  
  16732.   Abbreviation: %ACT 
  16733.  
  16734. Syntax 
  16735.  
  16736.                                  ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16737.                                               ΓöîΓöÇRESCANΓöÇΓöÇΓöÇΓöÉ Γöé
  16738. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇACTIVATEΓöÇΓöÇΓöÇidentifierΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö┤ΓöÇ;ΓöÇΓöÇΓöÇ
  16739.         Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé                         ΓööΓöÇNORESCANΓöÇΓöÿ
  16740.         Γöé         Γöé Γöé
  16741.         ΓööΓöÇΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  16742.  
  16743.  
  16744. ΓòÉΓòÉΓòÉ <hidden> ALLOCATE Statement ΓòÉΓòÉΓòÉ
  16745.  
  16746. Description 
  16747.   The ALLOCATE statement allocates storage for either controlled or based 
  16748.   variables. The syntax specification for ALLOCATE depends upon the variable 
  16749.   type. 
  16750.  
  16751. Related Information 
  16752.  
  16753.     ALLOCATE statement for based variables 
  16754.     ALLOCATE statement for controlled variables 
  16755.  
  16756.  
  16757. ΓòÉΓòÉΓòÉ <hidden> BEGIN Statement ΓòÉΓòÉΓòÉ
  16758.  
  16759. Description 
  16760.   The BEGIN statement, and corresponding END statement delimit a begin-block. 
  16761.  
  16762. Syntax 
  16763.  
  16764.              ΓöîΓöÇORDERΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇNOCHARGRAPHICΓöÇΓöÉ
  16765. ΓöÇΓöÇΓöÇΓöÇBEGINΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  16766.              ΓööΓöÇREORDERΓöÇΓöÇΓöÿ  ΓööΓöÇCHARGRAPHICΓöÇΓöÇΓöÇΓöÿ
  16767.  
  16768.  
  16769. ΓòÉΓòÉΓòÉ <hidden> CALL Statement ΓòÉΓòÉΓòÉ
  16770.  
  16771. Description 
  16772.   The CALL statement invokes a procedure and transfers control to a specified 
  16773.   entry point of the procedure. 
  16774.  
  16775.     The environment of the invoked procedure is established after evaluation 
  16776.      of any expressions and before the procedure is invoked. 
  16777.  
  16778.     A CALL statement must not be used to invoke a procedure if control is to 
  16779.      be returned to the invoking procedure by means of a RETURN(expression) 
  16780.      statement. 
  16781.  
  16782.     If the procedure invoked by the CALL statement has been specified in a 
  16783.      FETCH or RELEASE statement, and if it is not present in main storage, the 
  16784.      CALL statement initiates dynamic loading of the procedure from auxiliary 
  16785.      storage. 
  16786.  
  16787. Syntax 
  16788.  
  16789. ΓöÇΓöÇΓöÇΓöÇCALLΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇentry-referenceΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16790.               Γö£ΓöÇΓöÇgeneric-nameΓöÇΓöÇΓöÇΓöÇΓöñ   ΓööΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  16791.               ΓööΓöÇΓöÇbuilt-in-nameΓöÇΓöÇΓöÇΓöÿ        Γöé ΓöîΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  16792.                                           Γöé            Γöé Γöé
  16793.                                           ΓööΓöÇΓö¼ΓöÇargumentΓöÇΓö¼Γö┤ΓöÇΓöÿ
  16794.                                             ΓööΓöÇ*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  16795.  
  16796.  
  16797. ΓòÉΓòÉΓòÉ <hidden> %DEACTIVATE Statement ΓòÉΓòÉΓòÉ
  16798.  
  16799. Description 
  16800.   The %DEACTIVATE statement makes an identifier inactive. 
  16801.  
  16802.   The deactivation of an identifier causes loss of its replacement capability 
  16803.   but not its value. Hence, the reactivation of such an identifier need not be 
  16804.   accompanied by the assignment of a replacement value. 
  16805.  
  16806.   The deactivation of an identifier does not prevent it from receiving new 
  16807.   values in subsequent preprocessor statements. 
  16808.  
  16809.   Deactivation of a deactivated identifier has no effect. 
  16810.  
  16811.   Abbreviation: %DEACT 
  16812.  
  16813. Syntax 
  16814.  
  16815.                                    ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16816.                                                Γöé
  16817. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇDEACTIVATEΓöÇΓöÇΓöÇidentifierΓöÇΓö┤ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  16818.         Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  16819.         Γöé        Γöé Γöé
  16820.         ΓööΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  16821.  
  16822.  
  16823. ΓòÉΓòÉΓòÉ <hidden> %DECLARE Statement ΓòÉΓòÉΓòÉ
  16824.  
  16825. Description 
  16826.   The %DECLARE preprocessor statement establishes an identifier as a 
  16827.   preprocessor name, specifies attributes of the name, and establishes the 
  16828.   scope of the name. 
  16829.  
  16830.   Factoring of attributes is allowed. 
  16831.  
  16832.   Abbreviation: %DCL 
  16833.  
  16834. Related Information 
  16835.   A %DECLARE statement behaves as a %ACTIVATE statement when it is encountered 
  16836.   outside a preprocessor procedure, and activates, with the RESCAN option, all 
  16837.   identifiers declared in the %DECLARE statement. 
  16838.  
  16839. Syntax 
  16840.  
  16841.                                 ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16842.                                                            Γöé
  16843. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇDECLAREΓöÇΓöÇΓöÇΓöÇidentifierΓöÇΓöÇΓö¼ΓöÇFIXEDΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  16844.         Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé                         Γö£ΓöÇCHARACTERΓöÇΓöñ
  16845.         Γöé        Γöé Γöé                         Γö£ΓöÇENTRYΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  16846.         ΓööΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ                         ΓööΓöÇBUILTINΓöÇΓöÇΓöÇΓöÿ
  16847.  
  16848.  
  16849. ΓòÉΓòÉΓòÉ <hidden> DELAY Statement ΓòÉΓòÉΓòÉ
  16850.  
  16851. Description 
  16852.   The DELAY statement suspends the execution of your program for at least the 
  16853.   specified period of time. The maximum wait time is 23 hours and 59 minutes. 
  16854.  
  16855.   Under CMS, the value rounds to the nearest whole second. 
  16856.  
  16857. Examples 
  16858.   Consider the following uses of DELAY: 
  16859.  
  16860.     This statement suspends execution for 20 milliseconds (0.02 seconds) under 
  16861.      MVS but has no effect under CMS: 
  16862.  
  16863.           DELAY (20);
  16864.  
  16865.     This statement suspends execution for one second under both MVS and CMS: 
  16866.  
  16867.           DELAY (10**3);
  16868.  
  16869.     This statement suspends execution for ten seconds under both MVS and CMS: 
  16870.  
  16871.           DELAY (10*10**3);
  16872.  
  16873. Syntax 
  16874.  
  16875. ΓöÇΓöÇΓöÇDELAYΓöÇΓöÇΓöÇ(expression)ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  16876.  
  16877.  
  16878. ΓòÉΓòÉΓòÉ <hidden> DISPLAY Statement ΓòÉΓòÉΓòÉ
  16879.  
  16880. Description 
  16881.   The DISPLAY statement displays a message on the user's terminal or on the 
  16882.   system console. A response might be requested from the operator. 
  16883.  
  16884.   DISPLAY can also be used with the REPLY option to allow operator 
  16885.   communication with the program by typing in a code or message.  The REPLY 
  16886.   option will suspend program execution until the operator acknowledges the 
  16887.   message. The character data for DISPLAY or REPLY can contain mixed character 
  16888.   data. 
  16889.  
  16890.   To display graphic data, you must use the CHAR built-in function to convert 
  16891.   the graphic data to mixed-character data. 
  16892.  
  16893.   If graphic data was entered in the REPLY, it is received as character data 
  16894.   that contains mixed data.  This can then be converted to graphic data using 
  16895.   the GRAPHIC built-in function. 
  16896.  
  16897. Example 
  16898.  
  16899.     DISPLAY ('END OF JOB');
  16900.  
  16901.   displays the message: 
  16902.  
  16903.     END OF JOB
  16904.  
  16905. Syntax 
  16906.  
  16907. Type 1
  16908. ΓöÇΓöÇΓöÇDISPLAYΓöÇΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16909.  
  16910. Type 2
  16911. ΓöÇΓöÇΓöÇDISPLAYΓöÇΓöÇ(expression)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16912.  
  16913. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇREPLYΓöÇ(character-reference)ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇ;ΓöÇ
  16914.      Γöé                             ΓööΓöÇEVENTΓöÇ(event-reference)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  16915.      Γöé                                                             Γöé
  16916.      ΓööΓöÇΓöÇEVENTΓöÇ(event-reference)ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  16917.                                 ΓööΓöÇREPLYΓöÇ(character-reference)ΓöÇΓöÇΓöÇΓöÿ
  16918.  
  16919.  
  16920. ΓòÉΓòÉΓòÉ <hidden> DO Statement ΓòÉΓòÉΓòÉ
  16921.  
  16922. Description 
  16923.   The DO statement and its corresponding END statement, delimit a group of 
  16924.   statements collectively called a do-group. 
  16925.  
  16926.   Type 1- The Type 1 do-group specifies that the statements in the group are 
  16927.   executed. It does not provide for the repetitive execution of the statements 
  16928.   within the group. 
  16929.  
  16930.   Types 2 and 3- Types 2 and 3 provide for the repetitive execution of the 
  16931.   statements within the do-group. 
  16932.  
  16933. Related Information 
  16934.   Select one of the following for more information about using Type 2 and Type 
  16935.   3 DO groups: 
  16936.  
  16937.     Using Type 2 with WHILE and UNTIL 
  16938.     Using Type 3 with one specification 
  16939.     Using Type 3 with two or more specifications 
  16940.     Using Type 3 with TO, BY, REPEAT 
  16941.  
  16942. Examples 
  16943.   Using Type 2 and Type 3 DO groups 
  16944.  
  16945. Syntax 
  16946.  
  16947. Type 1:
  16948. ΓöÇΓöÇΓöÇΓöÇDOΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16949.  
  16950. Type 2:
  16951. ΓöÇΓöÇΓöÇΓöÇDOΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇWHILEΓöÇΓöÇ(ΓöÇΓöÇexp4ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  16952.             Γöé                       ΓööΓöÇΓöÇUNTILΓöÇΓöÇ(ΓöÇΓöÇexp5ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  16953.             ΓööΓöÇΓöÇUNTILΓöÇΓöÇ(ΓöÇΓöÇexp5ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  16954.                                     ΓööΓöÇΓöÇWHILEΓöÇΓöÇ(ΓöÇΓöÇexp4ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  16955.  
  16956. Type 3:
  16957.                           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  16958.                                            Γöé
  16959. ΓöÇΓöÇΓöÇΓöÇDOΓöÇΓöÇΓöÇΓöÇreferenceΓöÇΓöÇ=ΓöÇΓöÇΓöÇΓöÇΓöÇspecificationΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16960.  
  16961.  
  16962. where specification is:
  16963. ΓöÇΓöÇΓöÇΓöÇexp1ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16964.              Γö£ΓöÇΓöÇTOΓöÇΓöÇexp2ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ
  16965.              Γöé            ΓööΓöÇΓöÇBYΓöÇΓöÇexp3ΓöÇΓöÇΓöÿ  Γöé
  16966.              Γö£ΓöÇΓöÇBYΓöÇΓöÇexp3ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ
  16967.              Γöé            ΓööΓöÇΓöÇTOΓöÇΓöÇexp2ΓöÇΓöÇΓöÿ  Γöé
  16968.              ΓööΓöÇΓöÇREPEATΓöÇΓöÇexp6ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  16969.  
  16970. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  16971.       Γö£ΓöÇΓöÇWHILEΓöÇΓöÇ(ΓöÇΓöÇexp4ΓöÇΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ
  16972.       Γöé                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇUNTILΓöÇΓöÇ(ΓöÇΓöÇexp5ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  16973.       ΓööΓöÇΓöÇUNTILΓöÇΓöÇ(ΓöÇΓöÇexp5ΓöÇΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  16974.                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇWHILEΓöÇΓöÇ(ΓöÇΓöÇexp4ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  16975.  
  16976. Note: 
  16977.  
  16978.  1. expn is an abbreviation for expression n. 
  16979.  
  16980.  2. Condition prefixes are invalid on DO statements. 
  16981.  
  16982.  
  16983. ΓòÉΓòÉΓòÉ <hidden> Using Type 2 with WHILE and UNTIL ΓòÉΓòÉΓòÉ
  16984.  
  16985. If a Type 2 DO specification includes both the WHILE and UNTIL option, the DO 
  16986. statement provides for repetitive execution as defined by the following: 
  16987.  
  16988. LABEL:  DO WHILE (exp4)
  16989.            UNTIL (exp5)
  16990.         statement-1
  16991.         .
  16992.         .
  16993.         .
  16994.         statement-n
  16995.         END;
  16996. NEXT:   statement /* STATEMENT FOLLOWING THE DO GROUP */
  16997.  
  16998. The above is equivalent to the following expansion: 
  16999.  
  17000. LABEL:  IF (exp4) THEN;
  17001.         ELSE
  17002.           GO TO NEXT;
  17003.         statement-1
  17004.         .
  17005.         .
  17006.         .
  17007.         statement-n
  17008. LABEL2: IF (exp5) THEN;
  17009.         ELSE
  17010.           GO TO LABEL;
  17011. NEXT:   statement /* STATEMENT FOLLOWING THE DO GROUP */
  17012.  
  17013. If the WHILE option is omitted, the IF statement at label LABEL is replaced by 
  17014. a NULL statement. Note that if the WHILE option is omitted, statements 1 
  17015. through n are executed at least once. 
  17016.  
  17017. If the UNTIL option is omitted, the IF statement at label LABEL2 in the 
  17018. expansion is replaced by the statement GO TO LABEL. 
  17019.  
  17020.  
  17021. ΓòÉΓòÉΓòÉ <hidden> Using Type 3 with One Specification ΓòÉΓòÉΓòÉ
  17022.  
  17023. The following sequence of events summarizes the effect of executing a do-group 
  17024. with one specification: 
  17025.  
  17026.  1. If reference is specified and BY and TO options are also specified, exp1, 
  17027.     exp2, and exp3 will be evaluated prior to the assignment of exp1 to the 
  17028.     reference. Then the initial value is assigned to reference. For example: 
  17029.  
  17030.         DO reference = exp1 TO exp2 BY exp3;
  17031.  
  17032.     For a variable that is not a pseudovariable, the above action of the 
  17033.     do-group definition is equivalent to the following expansion: 
  17034.  
  17035.         p=ADDR(variable);
  17036.         e1=exp1;
  17037.         e2=exp2;
  17038.         e3=exp3;
  17039.         v=e1;
  17040.  
  17041.     where v is a compiler-created based variable based on p, a compiler-created 
  17042.     pointer. e1, e2, and e3 are compiler-created variables. 
  17043.  
  17044.  2. If the TO option is present, test the value of the control variable against 
  17045.     the previously-evaluated expression (e2) in the TO option. 
  17046.  
  17047.  3. If the WHILE option is specified, evaluate the expression in the WHILE 
  17048.     option. If it is false, leave the do-group. 
  17049.  
  17050.  4. Execute the statements in the do-group. 
  17051.  
  17052.  5. If the UNTIL option is specified, evaluate the expression in the UNTIL 
  17053.     option. If it is true, leave the do-group. 
  17054.  
  17055.  6. If there is a reference: 
  17056.  
  17057.     a) If the TO or BY option is specified, add the previously-evaluated exp3 
  17058.        (e3) to the reference. 
  17059.  
  17060.     b) If the REPEAT option is specified, evaluate the exp6 and assign it to 
  17061.        the reference. 
  17062.  
  17063.     c) If the TO, BY, and REPEAT options are all absent, leave the do-group. 
  17064.  
  17065.     d) Begin again with Step 2, above. 
  17066.  
  17067.  
  17068. ΓòÉΓòÉΓòÉ <hidden> Using Type 3 with Two or More Specifica          tions ΓòÉΓòÉΓòÉ
  17069.  
  17070. If the DO statement contains more than one specification, the second expansion 
  17071. is analogous to the first expansion in every respect. However, the statements 
  17072. in the do-group are not actually duplicated in the program. A succeeding 
  17073. specification is executed only after the preceding specification has been 
  17074. terminated. 
  17075.  
  17076. Control can transfer into a do-group from outside the do-group only if the 
  17077. do-group is delimited by the DO statement in Type 1. Control can also return to 
  17078. a do-group from a procedure or ON-unit invoked from within that do-group. 
  17079.  
  17080.  
  17081. ΓòÉΓòÉΓòÉ <hidden> Using Type 3 with TO, BY, REPEAT ΓòÉΓòÉΓòÉ
  17082.  
  17083. The TO and BY options let you vary the reference in fixed positive or negative 
  17084. increments. In contrast, the REPEAT option, which is an alternative to the TO 
  17085. and BY options, lets you vary the control variable nonlinearly. The REPEAT 
  17086. option can also be used for nonarithmetic control variables (such as pointer). 
  17087.  
  17088. If the Type 3 DO specification includes the TO and BY options, the action of 
  17089. the do-group is defined by the following: 
  17090.  
  17091. LABEL:  DO variable=
  17092.             exp1
  17093.             TO exp2
  17094.             BY exp3
  17095.             WHILE (exp4)
  17096.             UNTIL(exp5);
  17097.             statement-1
  17098.             .
  17099.             .
  17100.             .
  17101.             statement-m
  17102. LABEL1:  END;
  17103. NEXT:    statement
  17104.  
  17105. For a variable that is not a pseudovariable, the above action of the do-group 
  17106. definition is equivalent to the following expansion. In this expansion, v is a 
  17107. compiler-created based variable based on p with the same attributes as 
  17108. variable; and e1, e2, and e3 are compiler-created variables: 
  17109.  
  17110. LABEL:  e1=exp1;
  17111.         e2=exp2;
  17112.         e3=exp3;
  17113.         v=e1;
  17114. LABEL2: IF (e3>=0)&(v>e2)Γöé(e3<0)&(v<e2) THEN
  17115.           GO TO NEXT;
  17116.         IF (exp4) THEN;
  17117.         ELSE
  17118.           GO TO NEXT;
  17119.         statement-1
  17120.         .
  17121.         .
  17122.         .
  17123.         statement-m
  17124. LABEL1: IF (exp5) THEN
  17125.           GO TO NEXT;
  17126. LABEL3: v=v+e3;
  17127.         GO TO LABEL2;
  17128. NEXT:   statement
  17129.  
  17130. If the specification includes the REPEAT option, the action of the do-group is 
  17131. defined by the following: 
  17132.  
  17133. LABEL:  DO variable=
  17134.             exp1
  17135.             REPEAT exp6
  17136.             WHILE (exp4)
  17137.             UNTIL(exp5);
  17138.             statement-1
  17139.             .
  17140.             .
  17141.             .
  17142.             statement-m
  17143. LABEL1:  END;
  17144. NEXT:    statement
  17145.  
  17146. For a variable that is not a pseudovariable, the above action of the do-group 
  17147. definition is equivalent to the following expansion: 
  17148.  
  17149. LABEL: p=ADDR(variable);
  17150.         e1=exp1;
  17151.         v=e1;
  17152. LABEL2: ;
  17153.         IF (exp4) THEN;
  17154.         ELSE
  17155.           GO TO NEXT;
  17156.         statement-1
  17157.         .
  17158.         .
  17159.         .
  17160.         statement-m
  17161. LABEL1: IF (exp5) THEN
  17162.           GO TO NEXT;
  17163. LABEL3: v=exp6;
  17164.         GO TO LABEL2;
  17165. NEXT:   statement
  17166.  
  17167. Additional rules for the above expansions follow: 
  17168.  
  17169.  1. The above expansion only shows the result of one specification.  If the DO 
  17170.     statement contains more than one specification, the statement labeled NEXT 
  17171.     is the first statement in the expansion for the next specification.  The 
  17172.     second expansion is analogous to the first expansion in every respect. 
  17173.     Note, however, that statements 1 through m are not actually duplicated in 
  17174.     the program. 
  17175.  
  17176.  2. If the WHILE clause is omitted, the IF statement immediately preceding 
  17177.     statement-1 in each of the expansions is also omitted. 
  17178.  
  17179.  3. If the UNTIL clause is omitted, the IF statement immediately following 
  17180.     statement-m in each of the expansions is also omitted. 
  17181.  
  17182.  
  17183. ΓòÉΓòÉΓòÉ <hidden> Examples ΓòÉΓòÉΓòÉ
  17184.  
  17185. The DO statement can specify a group of statements to be executed in the THEN 
  17186. or ELSE clauses of an IF statement, or in the WHEN or OTHERWISE statements in a 
  17187. select-group. 
  17188.  
  17189. Select among the following DO statement examples: 
  17190.  
  17191.  IF..THEN..ELSE 
  17192.  Basic repetitions 
  17193.  Repetition using the reference as a subscript 
  17194.  Repetition with TO..BY 
  17195.  DO with WHILE, UNTIL 
  17196.  DO with REPEAT 
  17197.  
  17198.  
  17199. ΓòÉΓòÉΓòÉ <hidden> %DO Statement ΓòÉΓòÉΓòÉ
  17200.  
  17201. Description 
  17202.   The %DO preprocessor statement, and its corresponding %END statement, delimit 
  17203.   a preprocessor do-group, and can also specify repetitive execution of the 
  17204.   do-group. 
  17205.  
  17206. Usage Rules 
  17207.  
  17208.     Preprocessor do-groups can be nested. 
  17209.  
  17210.     Control cannot transfer to a Type 3 preprocessor do-group, except by 
  17211.      return from a preprocessor procedure invoked within the do-group. 
  17212.  
  17213.     Preprocessor statements, input text, and listing control statements can 
  17214.      appear within a preprocessor do-group. The preprocessor statements are 
  17215.      executed; input text is scanned for possible replacement activity. 
  17216.  
  17217. Syntax 
  17218.  
  17219. Type 1:
  17220. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇDOΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17221.         Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  17222.         Γöé        Γöé Γöé
  17223.         ΓööΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  17224.  
  17225. Type 3:
  17226. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇDOΓöÇΓöÇΓöé preprocessor do-specification ΓöéΓöÇΓöÇ;ΓöÇΓöÇ
  17227.         Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  17228.         Γöé        Γöé Γöé
  17229.         ΓööΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  17230.  
  17231. preprocessor do-specification:
  17232. ΓöéΓöÇΓöÇpreprocessor-variable = preprocessor-exp1ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17233. ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé
  17234.    Γö£ΓöÇTOΓöÇpreprocessor-exp2ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöñ
  17235.    Γöé                      ΓööΓöÇBYΓöÇpreprocessor-exp3ΓöÇΓöÿ Γöé
  17236.    ΓööΓöÇBYΓöÇpreprocessor-exp3ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  17237.                           ΓööΓöÇTOΓöÇpreprocessor-exp2ΓöÇΓöÇΓöÇΓöÿ
  17238.  
  17239.  
  17240. ΓòÉΓòÉΓòÉ <hidden> END Statement ΓòÉΓòÉΓòÉ
  17241.  
  17242. Description 
  17243.   The END statement ends one or more blocks and groups. Every block or group 
  17244.   must have an END statement. 
  17245.  
  17246. Usage Notes 
  17247.  
  17248.     Execution of a block terminates when control reaches the END statement for 
  17249.      the block. Although every block must have an END statement, this is not 
  17250.      the only means of block termination. 
  17251.  
  17252.     If control reaches an END statement for a procedure, it is treated as a 
  17253.      RETURN statement. 
  17254.  
  17255.     Normal termination of a program occurs when control reaches the END 
  17256.      statement of the main procedure. 
  17257.  
  17258. Syntax 
  17259.  
  17260. ΓöÇΓöÇΓöÇΓöÇENDΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17261.              ΓööΓöÇΓöÇstatement-labelΓöÇΓöÇΓöÿ
  17262.  
  17263.  
  17264. ΓòÉΓòÉΓòÉ <hidden> %END Statement ΓòÉΓòÉΓòÉ
  17265.  
  17266. Description 
  17267.   The %END preprocessor statement is used in conjunction with %DO or %PROCEDURE 
  17268.   statements to delimit preprocessor do-groups or preprocessor procedures. 
  17269.  
  17270. Syntax 
  17271.  
  17272. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇENDΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  17273.          Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé         ΓööΓöÇlabelΓöÇΓöÿ
  17274.          Γöé         Γöé Γöé
  17275.          ΓööΓöÇΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  17276.  
  17277.  
  17278. ΓòÉΓòÉΓòÉ <hidden> ENTRY Statement ΓòÉΓòÉΓòÉ
  17279.  
  17280. Description 
  17281.   The ENTRY statement specifies a secondary entry point of a procedure. When an 
  17282.   ENTRY statement is encountered in sequential program flow, control passes 
  17283.   around it. 
  17284.  
  17285. Usage Rules 
  17286.   The ENTRY statement: 
  17287.  
  17288.     Must be internal to the procedure for which it defines a secondary entry 
  17289.      point. 
  17290.  
  17291.     Cannot be used within a do-group that specifies repetitive execution or 
  17292.      within an ON-unit. 
  17293.  
  17294. Syntax 
  17295.  
  17296.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  17297.                      Γöé
  17298. ΓöÇΓöÇΓöÇΓöÇentry constant:ΓöÇΓö┤ΓöÇΓöÇΓöÇENTRYΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17299.                                  Γöé   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé
  17300.                                  Γöé              Γöé   Γöé
  17301.                                  ΓööΓöÇ(ΓöÇΓöÇΓöÇparameterΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ
  17302.  
  17303. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  17304.     Γöé           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé ΓööΓöÇOPTIONSΓöÇ(ΓöÇcharacteristic-listΓöÇ)ΓöÇΓöÇΓöÿ
  17305.     Γöé                      Γöé    Γöé
  17306.     ΓööΓöÇRETURNSΓöÇ(ΓöÇΓöÇΓöÇattributeΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÿ
  17307.  
  17308.     ΓöîΓöÇIRREDUCIBLEΓöÇΓöÉ
  17309. ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17310.     ΓööΓöÇREDUCIBLEΓöÇΓöÇΓöÇΓöÿ
  17311.  
  17312.  
  17313. ΓòÉΓòÉΓòÉ <hidden> EXIT Statement ΓòÉΓòÉΓòÉ
  17314.  
  17315. Description 
  17316.   The EXIT statement immediately terminates the program. 
  17317.  
  17318.   Prior to termination, the FINISH condition is raised. On normal return from 
  17319.   the FINISH ON-unit, the program terminates. 
  17320.  
  17321. Syntax 
  17322.  
  17323. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇEXITΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17324.  
  17325.  
  17326. ΓòÉΓòÉΓòÉ <hidden> FREE Statement ΓòÉΓòÉΓòÉ
  17327.  
  17328. Description 
  17329.   Use the FREE statement to free storage allocated for variables. FREE 
  17330.   statement syntax specification is different for controlled and based 
  17331.   variables. 
  17332.  
  17333. Related information 
  17334.   Please select one of the following for detailed information on the FREE 
  17335.   statement: 
  17336.  
  17337.     FREE statement for controlled variables 
  17338.  
  17339.     FREE statement for based variables 
  17340.  
  17341.  
  17342. ΓòÉΓòÉΓòÉ <hidden> GO TO Statement ΓòÉΓòÉΓòÉ
  17343.  
  17344. Description 
  17345.   The GO TO statement transfers control to the statement identified by the 
  17346.   specified label reference.  The GO TO statement is an unconditional branch. 
  17347.  
  17348.   If a GO TO statement transfers control from within a block to a point not 
  17349.   contained within that block, the block is terminated.  If the transfer point 
  17350.   is contained in a block that did not directly activate the block being 
  17351.   terminated, all intervening blocks in the activation sequence are also 
  17352.   terminated. 
  17353.  
  17354.   When a GO TO statement specifies a label constant contained in a block that 
  17355.   has more than one activation, control is transferred to the activation 
  17356.   current when the GO TO is executed. 
  17357.  
  17358.   If the destination of the GO TO is specified by a label variable, it can then 
  17359.   be used as a switch by assigning label constants to the label variable.  If 
  17360.   the label variable is subscripted, then the switch can be controlled by 
  17361.   varying the subscript.  By using label variables or function references, 
  17362.   quite complex switching can be effected.  It is usually true, however, that 
  17363.   simple control statements are the most efficient. 
  17364.  
  17365. Usage Rules 
  17366.   A GO TO statement cannot transfer control: 
  17367.  
  17368.     To an inactive block or to another program.  Detection of such an error is 
  17369.      not guaranteed. 
  17370.  
  17371.     From outside a do-group to a statement inside a Type2 or a Type3 do-group, 
  17372.      unless the GO TO terminates a procedure or ON-unit invoked from within the 
  17373.      do-group. 
  17374.  
  17375.     To a FORMAT statement. 
  17376.  
  17377. Syntax 
  17378.  
  17379. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇGO TOΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇlabelΓöÇreferenceΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17380.       ΓööΓöÇΓöÇGOTOΓöÇΓöÇΓöÿ
  17381.  
  17382.  
  17383. ΓòÉΓòÉΓòÉ <hidden> %GO TO Statement ΓòÉΓòÉΓòÉ
  17384.  
  17385. Description 
  17386.   The %GO TO preprocessor statement causes the preprocessor to continue its 
  17387.   scan at the specified label. 
  17388.  
  17389.   The label following the GO TO specifies the point to which the scan is 
  17390.   transferred. It must be a label of a preprocessor statement, although it 
  17391.   cannot be the label of a preprocessor procedure. 
  17392.  
  17393.   A preprocessor GO TO statement appearing within a preprocessor procedure 
  17394.   cannot transfer control to a point outside of that procedure. In other words, 
  17395.   the label following GO TO must be contained within the procedure. 
  17396.  
  17397. Related Information 
  17398.   The %INCLUDE preprocessor statement has certain restrictions regarding the 
  17399.   use of %GO TO with included strings. 
  17400.  
  17401. Syntax 
  17402.  
  17403. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇGOΓöÇΓöÇTOΓöÇΓöÇlabelΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  17404.         Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  17405.         Γöé         Γöé Γöé
  17406.         ΓööΓöÇΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  17407.  
  17408.  
  17409. ΓòÉΓòÉΓòÉ <hidden> IF Statement (IF, THEN, ELSE) ΓòÉΓòÉΓòÉ
  17410.  
  17411. Description 
  17412.   The IF statement evaluates an expression and controls the flow of execution 
  17413.   according to the result of that evaluation. The IF statement thus provides a 
  17414.   conditional branch. 
  17415.  
  17416.   IF is a compound statement.  The semicolon terminating the last unit also 
  17417.   terminates the IF statement 
  17418.  
  17419.   IF statements can be nested.  That is, either unit can itself be an IF 
  17420.   statement, or both can be.  Since each ELSE is always associated with the 
  17421.   innermost unmatched IF in the same block or do-group, an ELSE with a null 
  17422.   statement might be required to specify a desired sequence of control. 
  17423.  
  17424. Usage Rules 
  17425.   The following refers to the syntax below. 
  17426.  
  17427.   If any bit in the string expression has the value '1'B, unit1 is executed and 
  17428.   unit2, if present, is ignored. If all bits are '0'B, or the string is null, 
  17429.   unit1 is ignored and unit2, if present, is executed. 
  17430.  
  17431. Examples 
  17432.  
  17433.     In the following example, if the comparison is true (if A is equal to B), 
  17434.      the value of D is assigned to C, and the ELSE unit is not executed. If the 
  17435.      comparison is false (A is not equal to B), the THEN unit is not executed, 
  17436.      and the value of E is assigned to C. 
  17437.  
  17438.           IF A = B THEN
  17439.              C = D;
  17440.           ELSE
  17441.              C = E;
  17442.  
  17443.     Either the THEN unit or the ELSE unit can contain a statement that 
  17444.      transfers control, either conditionally or unconditionally. If the THEN 
  17445.      unit ends with a GO TO statement there is no need to specify an ELSE unit. 
  17446.      For example: 
  17447.  
  17448.           IF ALL(ARRAY1 = ARRAY2) THEN
  17449.              GO TO LABEL_1;
  17450.           next-statement
  17451.  
  17452.      If the expression is true, the GO TO statement of the THEN unit transfers 
  17453.      control to LABEL_1. If the expression is false, the THEN unit is not 
  17454.      executed and control passes to the next statement. 
  17455.  
  17456. Syntax 
  17457.  
  17458. ΓöÇΓöÇΓöÇΓöÇIFΓöÇΓöÇexpressionΓöÇΓöÇΓöÇTHENΓöÇΓöÇΓöÇunit1ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  17459.                                       ΓööΓöÇΓöÇELSEΓöÇΓöÇunit2ΓöÇΓöÇΓöÿ
  17460.  
  17461.  
  17462. ΓòÉΓòÉΓòÉ <hidden> %IF Statement ΓòÉΓòÉΓòÉ
  17463.  
  17464. Description 
  17465.   The %IF preprocessor statement controls the flow of the scan according to the 
  17466.   bit value of a preprocessor expression. 
  17467.  
  17468.   If any bit in preprocessor-expression has the value '1'B, then 
  17469.   preprocessor-unit1 is executed and preprocessor-unit2, if present, is 
  17470.   ignored. 
  17471.  
  17472.   If all bits in preprocessor-expression are '0'B, then preprocessor-unit1 is 
  17473.   ignored and preprocessor-unit2, if present, is executed. 
  17474.  
  17475.   Scanning resumes immediately following the %IF statement, unless a %GO TO or 
  17476.   preprocessor RETURN statement in one of the units causes the scan to resume 
  17477.   elsewhere. 
  17478.  
  17479. Related Information 
  17480.   %IF statements can be nested in the same manner used for nesting IF 
  17481.   statements. 
  17482.  
  17483. Syntax 
  17484.  
  17485. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇIFΓöÇΓöÇpreprocessor-expressionΓöÇΓöÇ%ΓöÇΓöÇTHENΓöÇΓöÇpreprocessor-unit1ΓöÇΓöÇΓöÇ
  17486.          Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  17487.          Γöé          Γöé Γöé
  17488.          ΓööΓöÇΓöÇΓöÇlabel:ΓöÇΓöÇΓö┤ΓöÇΓöÿ
  17489. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17490.          ΓööΓöÇ%ΓöÇΓöÇELSEΓöÇpreprocessor-unit2ΓöÇΓöÿ
  17491.  
  17492.  
  17493. ΓòÉΓòÉΓòÉ <hidden> %INCLUDE Statement ΓòÉΓòÉΓòÉ
  17494.  
  17495. Description 
  17496.   The %INCLUDE statement is used to incorporate source code from an external 
  17497.   library into the source program. 
  17498.  
  17499.   %INCLUDE statements can be nested.  In other words, %INCLUDEd text can 
  17500.   contain %INCLUDE statements. 
  17501.  
  17502. Usage Rules 
  17503.   Do not put other statements on the same line as the %INCLUDE statement. 
  17504.  
  17505. Example 
  17506.   For example, if the source program contains the following statement: 
  17507.  
  17508.     % INCLUDE PAYRL;
  17509.  
  17510.   the following example is generated: 
  17511.  
  17512.     /* BEGIN %INCLUDE SYSLIB (PAYRL   ) ***********/
  17513.     Declare 1 payroll
  17514.               2 Name,
  17515.                 3 Last character (30) varying,
  17516.                 3 First character (15) varying,
  17517.                 3 Middle character (3) varying,
  17518.               2 Hours,
  17519.                 3 Regular fixed decimal (8,2),
  17520.                 3 Overtime fixed decimal (8,2)
  17521.               2 Rate like hours;
  17522.     /* END    %INCLUDE SYSLIB (PAYRL   ) **********/
  17523.  
  17524.   the structure declaration for PAYROLL is inserted into the source program. 
  17525.   In this way, a central library of declarations can be used., 
  17526.  
  17527. Syntax 
  17528.  
  17529. ΓöÇΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓöÇINCLUDEΓöÇΓöÇΓöÇΓö¼ΓöÇmemberΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  17530.                     ΓööΓöÇdatasetΓöÇ(ΓöÇmemberΓöÇ)ΓöÇΓöÿ
  17531.  
  17532.  
  17533. ΓòÉΓòÉΓòÉ <hidden> LEAVE Statement ΓòÉΓòÉΓòÉ
  17534.  
  17535. Description 
  17536.   The LEAVE statement transfers control from within a do-group to the statement 
  17537.   following the END statement that delimits the group and terminates the 
  17538.   do-group. 
  17539.  
  17540. Usage Rules 
  17541.  
  17542.     The LEAVE statement and the referenced or implied DO statement must not be 
  17543.      in different blocks. 
  17544.  
  17545.     If the LEAVE statement is contained within a complex statement, control is 
  17546.      transferred to the first statement following the termination of the 
  17547.      complex statement. 
  17548.  
  17549.     LEAVE is valid only within a do-group. 
  17550.  
  17551. Examples 
  17552.  
  17553.     In the following example, the LEAVE statement transfers control to the 
  17554.      next statement: 
  17555.  
  17556.           DO . . . ;
  17557.            .
  17558.            .
  17559.           LEAVE;
  17560.            .
  17561.            .
  17562.           END;
  17563.           next statement;
  17564.  
  17565.     In the following example, the statement LEAVE A transfers control to 
  17566.      statement after group A: 
  17567.  
  17568.           A:  DO I = 1 TO 10;
  17569.               B: DO J = 1 TO 5;
  17570.                  IF X(I,J)=0 THEN LEAVE;
  17571.                  ELSE . . . ;
  17572.               END A;
  17573.               statement after group A;
  17574.  
  17575.      The LEAVE statement causes control to leave group B.  If there is another 
  17576.      iteration of group A, then it begins after control leaves group B. 
  17577.  
  17578. Syntax 
  17579.  
  17580. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇLEAVEΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  17581.                    Γöé                  Γöé
  17582.                    ΓööΓöÇΓöÇlabel-constantΓöÇΓöÇΓöÿ
  17583.  
  17584.  
  17585. ΓòÉΓòÉΓòÉ <hidden> %NOPRINT Statement ΓòÉΓòÉΓòÉ
  17586.  
  17587. Description 
  17588.   The %NOPRINT preprocessor statement causes printing of the source and 
  17589.   insource listings to be suspended until a %PRINT statement is encountered. 
  17590.  
  17591. Usage Rules 
  17592.   The %NOPRINT statement must be on a line with no other statements. It must 
  17593.   not appear within another statement. 
  17594.  
  17595. Syntax 
  17596.  
  17597. ΓöÇΓöÇΓöÇΓöÇ%NOPRINTΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17598.  
  17599.  
  17600. ΓòÉΓòÉΓòÉ <hidden> %NOTE Statement ΓòÉΓòÉΓòÉ
  17601.  
  17602. Description 
  17603.   The %NOTE preprocessor statement generates a preprocessor diagnostic message 
  17604.   of specified text and severity. 
  17605.  
  17606. Related Information 
  17607.  
  17608.     Generated messages are placed together with other preprocessor messages. 
  17609.      Whether or not a particular message is subsequently printed depends upon 
  17610.      its severity level and the setting of the FLAG compiler option. 
  17611.  
  17612.     Generated messages of severity U cause immediate termination of 
  17613.      preprocessing and compilation. Generated messages of severity S, E, or W 
  17614.      might cause termination of compilation, depending upon the setting of the 
  17615.      NOSYNTAX, and NOCOMPILE compiler options. 
  17616.  
  17617.     DBCS messages can be generated by using mixed data when the GRAPHIC 
  17618.      compiler option is in effect. 
  17619.  
  17620. Syntax 
  17621.  
  17622. ΓöÇΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇNOTEΓöÇΓöÇ(messageΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  17623.           Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé                 ΓööΓöÇ,ΓöÇΓöÇcodeΓöÇΓöÿ
  17624.           Γöé         Γöé Γöé
  17625.           ΓööΓöÇΓöÇΓöÇlabel:ΓöÇΓö┤ΓöÇΓöÿ
  17626.  
  17627.  
  17628. ΓòÉΓòÉΓòÉ <hidden> null Statement ΓòÉΓòÉΓòÉ
  17629.  
  17630. Description 
  17631.   The null statement does nothing and does not modify sequential statement 
  17632.   execution. It is often used to denote null action for THEN and ELSE clauses 
  17633.   and WHEN and OTHERWISE statements. 
  17634.  
  17635. Syntax 
  17636.  
  17637. ΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17638.  
  17639.  
  17640. ΓòÉΓòÉΓòÉ <hidden> %null Statement ΓòÉΓòÉΓòÉ
  17641.  
  17642. Description 
  17643.   The %null statement does nothing and does not modify sequential statement 
  17644.   execution. 
  17645.  
  17646. Syntax 
  17647.  
  17648. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  17649.  
  17650.  
  17651. ΓòÉΓòÉΓòÉ <hidden> %PAGE Statement ΓòÉΓòÉΓòÉ
  17652.  
  17653. Description 
  17654.   The statement following a %PAGE preprocessor statement in the program listing 
  17655.   is printed on the first line (after the page heading) of the next page. 
  17656.  
  17657.   This statement controls both the insource and the source listing. 
  17658.  
  17659.   When paging takes place, %PAGE does not appear in the formatted listing. 
  17660.  
  17661. Usage Rules 
  17662.   For paging to take place, the %PAGE statement must be on a line with no other 
  17663.   statements. 
  17664.  
  17665. Syntax 
  17666.  
  17667. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇPAGEΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  17668.  
  17669.  
  17670. ΓòÉΓòÉΓòÉ <hidden> %PRINT Statement ΓòÉΓòÉΓòÉ
  17671.  
  17672. Description 
  17673.   The %PRINT preprocessor statement causes printing of the source and insource 
  17674.   listings to be resumed. 
  17675.  
  17676.   %PRINT is in effect at the onset of both the insource and the source 
  17677.   listings, provided that the relevant compile-time options are specified. 
  17678.  
  17679. Usage Rules 
  17680.   The %PRINT statement must be on a line with no other statements. It must not 
  17681.   appear within another statement. 
  17682.  
  17683. Syntax 
  17684.  
  17685. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇPRINTΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  17686.  
  17687.  
  17688. ΓòÉΓòÉΓòÉ <hidden> %PROCEDURE Statement ΓòÉΓòÉΓòÉ
  17689.  
  17690. Description 
  17691.   The %PROCEDURE preprocessor statement is used in conjunction with a %END 
  17692.   statement to delimit a preprocessor procedure. 
  17693.  
  17694.   Abbreviation: %PROC 
  17695.  
  17696. Syntax 
  17697.  
  17698.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  17699.                      Γöé
  17700. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇΓöÇΓöÇentry-name:ΓöÇΓö┤ΓöÇΓöÇPROCEDUREΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  17701.                                      Γöé   ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé  ΓööΓöÇSTATEMENTΓöÇΓöÿ
  17702.                                      Γöé              Γöé   Γöé
  17703.                                      ΓööΓöÇ(ΓöÇΓöÇΓöÇparameterΓöÇΓö┤ΓöÇ)ΓöÇΓöÿ
  17704. ΓöÇΓöÇΓöÇΓöÇRETURNSΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇCHARACTERΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17705.                  ΓööΓöÇFIXEDΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  17706.  
  17707.  
  17708. ΓòÉΓòÉΓòÉ <hidden> %PROCESS, *PROCESS Statements ΓòÉΓòÉΓòÉ
  17709.  
  17710. Description 
  17711.   The %PROCESS statement is used to override compiler options. 
  17712.  
  17713.   The *PROCESS statement is a synonym for %PROCESS. 
  17714.  
  17715. Usage Rules 
  17716.  
  17717.     The % must be the first data position of a source record. 
  17718.  
  17719.     Any number of %PROCESS statements can be specified, but they all must 
  17720.      appear before the first language element appears. 
  17721.  
  17722. Syntax 
  17723.  
  17724.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  17725.                                       Γöé
  17726. ΓöÇΓöÇΓöÇ%ΓöÇΓöÇPROCESSΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇ
  17727.                   ΓööΓöÇcompiler optionΓöÇΓöÇΓöÿ
  17728.  
  17729.  
  17730. ΓòÉΓòÉΓòÉ <hidden> SELECT Group (SELECT, WHEN, OTHERWISE) ΓòÉΓòÉΓòÉ
  17731.  
  17732. Description 
  17733.   A select-group provides a multi-way conditional branch.  A select-group 
  17734.   contains: 
  17735.  
  17736.     a SELECT statement, 
  17737.  
  17738.     one or more WHEN statements (optional), 
  17739.  
  17740.     an OTHERWISE statement (optional), 
  17741.  
  17742.     and an END statement. 
  17743.  
  17744.   SELECT and its corresponding END statement delimit a group of statements 
  17745.   collectively called a select-group. The expression in the SELECT statement is 
  17746.   evaluated and its value is saved for later comparison. 
  17747.  
  17748. Usage Rules 
  17749.  
  17750.     If exp1 is omitted, each exp2 is evaluated and converted, if necessary, to 
  17751.      a bit string.  If any bit in the resulting string is '1'B, the unit of the 
  17752.      associated WHEN statement is executed.  If all bits are 0 or the string is 
  17753.      null, the unit of the OTHERWISE statement is executed. 
  17754.  
  17755.     After the execution of a unit of a WHEN or OTHERWISE statement, control 
  17756.      passes to the statement following the select-group, unless the normal flow 
  17757.      of control is altered within the unit. 
  17758.  
  17759.     If exp1 is specified, each exp2 must be such that the comparison 
  17760.      expression 
  17761.  
  17762.           (exp1) = (exp2)
  17763.  
  17764.      has a scalar bit value. 
  17765.  
  17766.     Array operands cannot be used in exp1 nor exp2. 
  17767.  
  17768. Examples 
  17769.   Using SELECT groups 
  17770.  
  17771. Syntax 
  17772.  
  17773. ΓöÇΓöÇSELECTΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  17774.            ΓööΓöÇ(ΓöÇΓöÇexp1ΓöÇΓöÇ)ΓöÇΓöÿ     Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  17775.                               Γöé          ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé Γöé
  17776.                               Γöé                  Γöé          Γöé Γöé
  17777.                               ΓööΓöÇΓöÇΓöÇWHENΓöÇΓöÇ(ΓöÇΓöÇΓöÇexp2ΓöÇΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓöÇunitΓöÇΓö┤ΓöÇΓöÿ
  17778.  
  17779. ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇENDΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17780.   ΓööΓöÇOTHERWISEΓöÇunitΓöÇΓöÿ
  17781.  
  17782.  
  17783. ΓòÉΓòÉΓòÉ <hidden> Using SELECT groups ΓòÉΓòÉΓòÉ
  17784.  
  17785. In the following examples, E, E1, etc., are expressions. When control reaches 
  17786. the SELECT statement, the expression E is evaluated and its value is saved. The 
  17787. expressions in the WHEN statement are then evaluated in turn (in the order in 
  17788. which they appear), and each value is compared to the value of E 
  17789.  
  17790. If a value is found that is equal to the value of E, the action following the 
  17791. corresponding WHEN statement is performed; no further WHEN statement 
  17792. expressions are evaluated. 
  17793.  
  17794. If none of the expressions in the WHEN statements are equal to the expression 
  17795. in the SELECT statement, the action specified after the OTHERWISE statement is 
  17796. executed. For example: 
  17797.  
  17798.     SELECT (E);
  17799.         WHEN (E1,E2,E3) action-1;
  17800.         WHEN (E4,E5) action-2;
  17801.         OTHERWISE action-n;
  17802.     END;
  17803. NL: next statement;
  17804.  
  17805. An example of the omission of exp1 is: 
  17806.  
  17807.     SELECT;
  17808.         WHEN (A>B) CALL BIGGER;
  17809.         WHEN (A=B) CALL SAME;
  17810.         OTHERWISE CALL SMALLER;
  17811.     END;
  17812.  
  17813. If a select-group contains no WHEN statements, the action in the OTHERWISE 
  17814. statement is executed unconditionally. If the OTHERWISE statement is omitted, 
  17815. and the execution of the select-group does not result in the selection of a 
  17816. WHEN statement, the ERROR condition is raised. 
  17817.  
  17818.  
  17819. ΓòÉΓòÉΓòÉ <hidden> %SKIP Statement ΓòÉΓòÉΓòÉ
  17820.  
  17821. Description 
  17822.   The specified number of lines following a %SKIP statement in the program 
  17823.   listing are left blank. This statement controls both the insource and the 
  17824.   source listing. When skipping takes place, %SKIP does not appear in the 
  17825.   format listing. 
  17826.  
  17827.   For skipping to take place, the %SKIP statement must be on a line with no 
  17828.   other statements. 
  17829.  
  17830. Syntax 
  17831.  
  17832.  
  17833. ΓöÇΓöÇΓöÇ%SKIPΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇ
  17834.              Γöé           Γöé
  17835.              ΓööΓöÇΓöÇ(ΓöÇΓöÇnΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  17836.  
  17837.  
  17838. ΓòÉΓòÉΓòÉ <hidden> UNLOCK Statement (MVS) ΓòÉΓòÉΓòÉ
  17839.  
  17840. Description 
  17841.   This is an MVS-only statement. 
  17842.  
  17843.   The UNLOCK statement makes the specified locked record available to other MVS 
  17844.   tasks. 
  17845.  
  17846. Syntax 
  17847.  
  17848. ΓöÇΓöÇΓöÇUNLOCKΓöÇΓöÇFILEΓöÇΓöÇ(ΓöÇfile-referenceΓöÇ)ΓöÇΓöÇΓöÇKEYΓöÇΓöÇ(ΓöÇexpressionΓöÇ)ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  17849.  
  17850.  
  17851. ΓòÉΓòÉΓòÉ <hidden> WAIT Statement ΓòÉΓòÉΓòÉ
  17852.  
  17853. Description 
  17854.   The execution of a WAIT statement within an activation of a block retains 
  17855.   control for that activation of that block within the WAIT statement until 
  17856.   specified events have completed. 
  17857.  
  17858. Usage Rules 
  17859.  
  17860.     Control for a given block activation remains within the statement until, 
  17861.      at possibly separate times during the execution of the statement, the 
  17862.      completion value has been set complete for some or all of the 
  17863.      event-variables on the list. 
  17864.  
  17865.     If an ON-unit entered due to the WAIT is terminated abnormally, control 
  17866.      might not pass to the statement following the WAIT. 
  17867.  
  17868.     If an abnormal return is made from any ON-unit entered  from a WAIT, the 
  17869.      associated event-variable is set complete, the execution of the WAIT is 
  17870.      terminated, and control passes to the point specified by the abnormal 
  17871.      return. 
  17872.  
  17873. Syntax 
  17874.  
  17875.               ΓöîΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  17876.                                Γöé
  17877. ΓöÇΓöÇΓöÇWAITΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓöÇevent-referenceΓöÇΓö┤ΓöÇΓöÇ)ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17878.                                      ΓööΓöÇ(ΓöÇexpressionΓöÇ)ΓöÇΓöÇΓöÿ
  17879.  
  17880.  
  17881. ΓòÉΓòÉΓòÉ <hidden> OPTIONS Option ΓòÉΓòÉΓòÉ
  17882.  
  17883. Description 
  17884.   The OPTIONS option of the ENTRY statement and PROCEDURE statement specifies 
  17885.   one or more processing characteristics. 
  17886.  
  17887. Usage Rules 
  17888.  
  17889.     OPTIONS can be specified only for an external procedure. 
  17890.  
  17891.     Only one procedure must have the OPTIONS(MAIN) designation. 
  17892.  
  17893. Syntax for OPTIONS with PROCEDURE Statement 
  17894.  
  17895. ΓöÇΓöÇΓöÇOPTIONSΓöÇ(ΓöÇΓöé characteristic-list ΓöéΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17896.  
  17897. characteristic-list:
  17898.                               ΓöîΓöÇBYADDRΓöÇΓöÇΓöÉ
  17899. ΓöéΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöé
  17900.     Γöé Γö£ΓöÇFETCHABLEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  ΓööΓöÇBYVALUEΓöÇΓöÿ         Γöé ΓööΓöÇREENTRANTΓöÇΓöÇΓöÿ
  17901.     Γöé ΓööΓöÇMAINΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ                      Γöé
  17902.     Γöé        ΓööΓöÇNOEXECOPSΓöÇΓöÿ                        Γöé
  17903.     Γöé                                             Γöé
  17904.     ΓööΓöÇCOBOLΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  17905.              ΓööΓöÇFETCHABLEΓöÇΓöÿ ΓööΓöÇΓöé nomap-options ΓöéΓöÇΓöÿ
  17906.  
  17907. nomap-options:
  17908. ΓöéΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ
  17909.     ΓööΓöÇNOMAPΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ ΓööΓöÇNOMAPINΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  17910.              ΓööΓöÇ(parameter-list)ΓöÇΓöÿ             ΓööΓöÇ(parameter-list)ΓöÇΓöÇΓöÿ
  17911. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé
  17912.     ΓööΓöÇNOMAPOUTΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  17913.                ΓööΓöÇ(parameter-list)ΓöÇΓöÿ
  17914.  
  17915. Syntax for OPTIONS with ENTRY Statement
  17916. ΓöÇΓöÇΓöÇOPTIONSΓöÇ(ΓöÇΓöé characteristic-list ΓöéΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  17917.  
  17918. characteristic-list:
  17919. ΓöéΓöÇΓöÇΓöÇCOBOLΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé
  17920.           ΓööΓöÇΓöé nomap-options ΓöéΓöÇΓöÿ
  17921.  
  17922. nomap-options:
  17923. ΓöéΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöé
  17924.     ΓööΓöÇNOMAPΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ ΓööΓöÇNOMAPINΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  17925.              ΓööΓöÇ(parameter-list)ΓöÇΓöÿ             ΓööΓöÇ(parameter-list)ΓöÇΓöÇΓöÿ
  17926. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé
  17927.     ΓööΓöÇNOMAPOUTΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  17928.                ΓööΓöÇ(parameter-list)ΓöÇΓöÿ
  17929.  
  17930.  
  17931. ΓòÉΓòÉΓòÉ <hidden> STOP Statement ΓòÉΓòÉΓòÉ
  17932.  
  17933. Description 
  17934.   The STOP statement immediately terminates the program. Prior to any 
  17935.   termination activity, the FINISH condition is raised. On normal return from 
  17936.   the FINISH ON-unit, the program terminates. 
  17937.  
  17938. Syntax 
  17939.  
  17940. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇSTOPΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  17941.  
  17942.  
  17943. ΓòÉΓòÉΓòÉ 1.9. PL/I Compiler Options ΓòÉΓòÉΓòÉ
  17944.  
  17945. Description 
  17946.   Most compiler options have a positive and a negative form. The negative form 
  17947.   is the positive form with 'NO' added at the beginning (as in TEST and 
  17948.   NOTEST).  Some options have only a positive form (as in SYSTEM). 
  17949.  
  17950.   You can change the IBM-supplied defaults when this product is installed. 
  17951.   Therefore, the defaults listed for these options might not be the same as 
  17952.   those chosen by your installation. You can override most defaults when you 
  17953.   compile your PL/I program. 
  17954.  
  17955.   There are three types of compiler options: 
  17956.  
  17957.     1. Simple pairs of keywords: a positive form that requests a facility, and 
  17958.        an alternative negative form that inhibits that facility (for example, 
  17959.        NEST and NONEST). 
  17960.  
  17961.     2. Keywords that allow you to provide a value-list that qualifies the 
  17962.        option (for example, FLAG(W)). 
  17963.  
  17964.     3. A combination of 1 and 2 above (for example, NOCOMPILE(E)). 
  17965.  
  17966.   Note:   Under CMS, use only the abbreviated form of the compiler option if 
  17967.           the option name is longer than eight characters. 
  17968.  
  17969. List of Compiler Options 
  17970.   For detailed information about specific PL/I compiler options, select from 
  17971.   the following list: 
  17972.  
  17973.    AGGREGATE           NOLIST 
  17974.    ATTRIBUTES          NOMACRO 
  17975.    CMPAT               NOMAP 
  17976.    COMPILE             NOMARGINI 
  17977.    CONTROL             NOMDECK 
  17978.    DECK                NONEST 
  17979.    ESD                 NONUMBER 
  17980.    FLAG                NOOBJECT 
  17981.    GONUMBER            NOOFFSET 
  17982.    GOSTMT              NOOPTIMIZE 
  17983.    GRAPHIC             NOOPTIONS 
  17984.    IMPRECISE           NOSEQUENCE 
  17985.    INCLUDE             NOSOURCE 
  17986.    INSOURCE            NOSTMT 
  17987.    INTERRUPT           NOSTORAGE 
  17988.    LANGLVL             NOSYNTAX 
  17989.    LINECOUNT           NOT 
  17990.    LIST                NOTERMINAL 
  17991.    LMESSAGE            NOTEST 
  17992.    MACRO               NOXREF 
  17993.    MAP                 NUMBER 
  17994.    MARGINI             OBJECT 
  17995.    MARGINS             OFFSET 
  17996.    MDECK               OPTIMIZE 
  17997.    NAME                OPTIONS 
  17998.    NEST                OR 
  17999.    NOAGGREGATE         SEQUENCE 
  18000.    NOATTRIBUTES        SIZE 
  18001.    NOCOMPILE           SMESSAGE 
  18002.    NODECK              SOURCE 
  18003.    NOESD               STMT 
  18004.    NOGONUMBER          STORAGE 
  18005.    NOGOSTMT            SYNTAX 
  18006.    NOGRAPHIC           SYSTEM 
  18007.    NOIMPRECISE         TERMINAL 
  18008.    NOINCLUDE           TEST 
  18009.    NOINSOURCE          XREF 
  18010.    NOINTERRUPT 
  18011.  
  18012. Related Information 
  18013.  
  18014.     PLI command (TSO only) 
  18015.     PLIOPT command (CMS only) 
  18016.  
  18017.  
  18018. ΓòÉΓòÉΓòÉ <hidden> AGGREGATE/NOAGGGREGATE Compiler Options ΓòÉΓòÉΓòÉ
  18019.  
  18020. Description 
  18021.   The AGGREGATE option specifies that the compiler will include a table in the 
  18022.   compiler listing that gives the lengths of all arrays and major structures in 
  18023.   the source program. 
  18024.  
  18025.   NOAGGREGATE is the default. 
  18026.  
  18027.   Abbreviations: AGΓöéNAG 
  18028.  
  18029. Syntax 
  18030.  
  18031.       ΓöîΓöÇNOAGGREGATEΓöÇΓöÉ
  18032. ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇAGGREGATEΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18033.  
  18034.  
  18035. ΓòÉΓòÉΓòÉ <hidden> ATTRIBUTES/NOATTRIBUTES Compiler Options ΓòÉΓòÉΓòÉ
  18036.  
  18037. Description 
  18038.   The ATTRIBUTES option specifies that the compiler will include in the 
  18039.   compiler listing a table of source-program identifiers and their attributes. 
  18040.  
  18041.   NOATTRIBUTES is the default. 
  18042.  
  18043.   Abbreviations:  A[(FΓöéS)]ΓöéNA 
  18044.  
  18045. Related Information 
  18046.   If you include both ATTRIBUTES and XREF, the two tables are combined. 
  18047.   However, if the SHORT and FULL suboptions are in conflict, the last option 
  18048.   specified will be used.  For example, ATTRIBUTES(SHORT) XREF(FULL) results in 
  18049.   FULL applying to the combined listing. 
  18050.  
  18051. Syntax 
  18052.  
  18053.  
  18054. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇATTRIBUTESΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  18055.       Γöé              ΓööΓöÇΓöÇ(ΓöÇΓö¼ΓöÇΓöÇFULLΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  18056.       Γöé                   ΓööΓöÇΓöÇSHORTΓöÇΓöÇΓöÿ       Γöé
  18057.       ΓööΓöÇΓöÇNOATTRIBUTESΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18058.  
  18059.  
  18060. ΓòÉΓòÉΓòÉ <hidden> CMPAT Compiler Option ΓòÉΓòÉΓòÉ
  18061.  
  18062. Description 
  18063.   The CMPAT option specifies whether object compatibility with OS PL/I Version 
  18064.   1 will be maintained for those programs sharing arrays, AREAs, and/or 
  18065.   aggregates. 
  18066.  
  18067.   CMPAT(V2) is the default. 
  18068.  
  18069.   Abbreviation: CMP(V1ΓöéV2) 
  18070.  
  18071. Syntax 
  18072.  
  18073. ΓöÇΓöÇΓöÇΓöÇCMPATΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇV1ΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18074.                 ΓööΓöÇΓöÇV2ΓöÇΓöÇΓöÿ
  18075.  
  18076.  
  18077. ΓòÉΓòÉΓòÉ <hidden> COMPILE/NOCOMPILE Compiler Options ΓòÉΓòÉΓòÉ
  18078.  
  18079. Description 
  18080.   The COMPILE option specifies that the compiler will compile the source 
  18081.   program unless it detects an unrecoverable error during preprocessing or 
  18082.   syntax checking. Whether the compiler continues or not depends on the 
  18083.   severity of the error detected, as specified by the NOCOMPILE option in the 
  18084.   list below. 
  18085.  
  18086.   NOCOMPILE(S) is the default. 
  18087.  
  18088.   Abbreviations: CΓöéNC[(WΓöéEΓöéS)] 
  18089.  
  18090. Syntax 
  18091.  
  18092. ΓöÇΓö¼ΓöÇΓöÇCOMPILEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  18093.    ΓööΓöÇΓöÇNOCOMPILEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  18094.                  ΓööΓöÇΓöÇ(ΓöÇΓö¼ΓöÇΓöÇWΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÿ
  18095.                       Γö£ΓöÇΓöÇEΓöÇΓöÇΓöñ
  18096.                       ΓööΓöÇΓöÇSΓöÇΓöÇΓöÿ
  18097.  
  18098.  
  18099. ΓòÉΓòÉΓòÉ <hidden> CONTROL Compiler Option ΓòÉΓòÉΓòÉ
  18100.  
  18101. Description 
  18102.   The CONTROL option specifies that any compile-time options for your 
  18103.   installation are available for this compilation.  However, you still need to 
  18104.   specify the appropriate keywords to use the options. 
  18105.  
  18106.   The CONTROL option must be specified with a password that is established for 
  18107.   each installation.  If you use an incorrect password, processing will be 
  18108.   terminated. If you use the CONTROL option, it must be specified first in the 
  18109.   list of options. 
  18110.  
  18111.   Abbreviation: None 
  18112.  
  18113. Syntax 
  18114.  
  18115. ΓöÇΓöÇΓöÇΓöÇCONTROLΓöÇΓöÇ(ΓöÇΓöÇ'ΓöÇΓöÇpasswordΓöÇΓöÇ'ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18116.  
  18117.  
  18118. ΓòÉΓòÉΓòÉ <hidden> DECK/NODECK Compiler Options ΓòÉΓòÉΓòÉ
  18119.  
  18120. Description 
  18121.   The DECK option specifies that the compiler will produce an object module in 
  18122.   the form of 80-character records and store it in the data set defined by the 
  18123.   SYSPUNCH DD statement.  Columns 73-76 of each record contain a code to 
  18124.   identify the object module.  This code comprises the first 4 characters of 
  18125.   the first label in the external procedure represented by the object module. 
  18126.   Columns 77-80 contain a 4-digit decimal number: the first record is numbered 
  18127.   0001, the second 0002, and so on. 
  18128.  
  18129.   NODECK is the default. 
  18130.  
  18131.   Abbreviations: DΓöéND 
  18132.  
  18133. Syntax 
  18134.  
  18135. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇDECKΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18136.       ΓööΓöÇΓöÇNODECKΓöÇΓöÇΓöÿ
  18137.  
  18138.  
  18139. ΓòÉΓòÉΓòÉ <hidden> ESD/NOESD  Compiler Options ΓòÉΓòÉΓòÉ
  18140.  
  18141. Description 
  18142.   The ESD option specifies that the external symbol dictionary (ESD) will be 
  18143.   listed in the compiler listing. 
  18144.  
  18145.   NOESD is the default. 
  18146.  
  18147.   Abbreviations: None 
  18148.  
  18149. Syntax 
  18150.  
  18151. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇESDΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  18152.       ΓööΓöÇΓöÇNOESDΓöÇΓöÇΓöÿ
  18153.  
  18154.  
  18155. ΓòÉΓòÉΓòÉ <hidden> FLAG Compiler Option ΓòÉΓòÉΓòÉ
  18156.  
  18157. Description 
  18158.   The FLAG option specifies the minimum severity of error that requires a 
  18159.   message listed in the compiler listing. 
  18160.  
  18161.   For MVS, the default is FLAG(I). For TSO and CMS, the default is FLAG(W). 
  18162.  
  18163.   Abbreviation: F[(IΓöéWΓöéEΓöéS)] 
  18164.  
  18165. Syntax 
  18166.  
  18167. ΓöÇΓöÇΓöÇΓöÇFLAGΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18168.              ΓööΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇIΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  18169.                    Γö£ΓöÇΓöÇWΓöÇΓöÇΓöñ
  18170.                    Γö£ΓöÇΓöÇEΓöÇΓöÇΓöñ
  18171.                    ΓööΓöÇΓöÇSΓöÇΓöÇΓöÿ
  18172.  
  18173.  
  18174. ΓòÉΓòÉΓòÉ <hidden> GONUMBER/NOGONUMBER Compiler Options ΓòÉΓòÉΓòÉ
  18175.  
  18176. Description 
  18177.   The GONUMBER option specifies that the compiler will produce additional 
  18178.   information that allows line numbers from the source program to be included 
  18179.   in run-time messages. 
  18180.  
  18181.   Alternatively, these line numbers can be derived by using: 
  18182.  
  18183.     The offset address, which is always included in run-time messages, and 
  18184.  
  18185.     The table produced by the OFFSET option (the NUMBER option must also 
  18186.      apply). 
  18187.  
  18188.   If you specify the GONUMBER option, it implies NUMBER, NOSTMT, and NOGOSTMT. 
  18189.  
  18190.   If NUMBER applies, GONUMBER is forced by the ALL, STMT, and PATH suboptions 
  18191.   of the TEST option. The OFFSET option is separate from these numbering 
  18192.   options and must be specified if required. 
  18193.  
  18194.   NOGONUMBER is the default. 
  18195.  
  18196.   Abbreviations: GNΓöéNGN 
  18197.  
  18198. Syntax 
  18199.  
  18200.  
  18201. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇGONUMBERΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18202.       ΓööΓöÇΓöÇNOGONUMBERΓöÇΓöÇΓöÿ
  18203.  
  18204.  
  18205. ΓòÉΓòÉΓòÉ <hidden> GOSTMT/NOGOSTMT Compiler Options ΓòÉΓòÉΓòÉ
  18206.  
  18207. Description 
  18208.   The GOSTMT option specifies that the compiler will produce additional 
  18209.   information that allows statement numbers from the source program to be 
  18210.   included in run-time messages. 
  18211.  
  18212.   If you specify the GOSTMT option, it implies STMT, NONUMBER, and NOGONUMBER. 
  18213.  
  18214.   If STMT applies, GOSTMT is forced by the ALL, STMT, and PATH suboptions of 
  18215.   the TEST option. The OFFSET option is separate from these numbering options 
  18216.   and must be specified if required. 
  18217.  
  18218.   NOGOSTMT is the default. 
  18219.  
  18220.   Abbreviations: GSΓöéNGS 
  18221.  
  18222. Related Information 
  18223.   These statement numbers can also be derived by using the offset address, 
  18224.   which is always included in run-time messages and the table produced by the 
  18225.   OFFSET option. 
  18226.  
  18227. Syntax 
  18228.  
  18229.  
  18230. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇGOSTMTΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18231.       ΓööΓöÇΓöÇNOGOSTMTΓöÇΓöÇΓöÿ
  18232.  
  18233.  
  18234. ΓòÉΓòÉΓòÉ <hidden> GRAPHIC/NOGRAPHIC Compiler Options ΓòÉΓòÉΓòÉ
  18235.  
  18236. Description 
  18237.   The GRAPHIC option specifies that the source program can contain double-byte 
  18238.   characters.  The hexadecimal codes 'OE' and 'OF' are treated as the shift-out 
  18239.   and shift-in control codes, respectively, wherever they appear in the source 
  18240.   program.  This includes occurrences in comments and string constants. 
  18241.  
  18242.   The GRAPHIC compiler option must be specified if the source program uses any 
  18243.   of the following: 
  18244.  
  18245.     DBCS identifiers 
  18246.  
  18247.     Graphic string constants 
  18248.  
  18249.     Mixed string constants 
  18250.  
  18251.     Shift codes anywhere else in the source. 
  18252.  
  18253.   NOGRAPHIC is the default. 
  18254.  
  18255.   Abbreviations:  GRΓöéNGR 
  18256.  
  18257. Syntax 
  18258.  
  18259. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇGRAPHICΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18260.       ΓööΓöÇΓöÇNOGRAPHICΓöÇΓöÇΓöÿ
  18261.  
  18262.  
  18263. ΓòÉΓòÉΓòÉ <hidden> IMPRECISE/NOIMPRECISE Compiler Options ΓòÉΓòÉΓòÉ
  18264.  
  18265. Description 
  18266.   The IMPRECISE option specifies that the compiler will include extra text in 
  18267.   the object module to localize imprecise interrupts when executing the program 
  18268.   with an IBM System/370 Model 165 or 195.  This extra text is generated for ON 
  18269.   statements (to ensure that, if interrupts occur, the correct ON-units will be 
  18270.   entered), for null statements, and for ENTRY statements.  The correct line or 
  18271.   statement numbers will not necessarily appear in run-time messages.  If you 
  18272.   need more accurate identification of the statement in error, insert null 
  18273.   statements at suitable points in your program. 
  18274.  
  18275.   NOIMPRECISE is the default. 
  18276.  
  18277.   Abbreviations: IMPΓöéNIMP 
  18278.  
  18279. Syntax 
  18280.  
  18281. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇIMPRECISEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18282.       ΓööΓöÇΓöÇNOIMPRECISEΓöÇΓöÇΓöÿ
  18283.  
  18284.  
  18285. ΓòÉΓòÉΓòÉ <hidden> INCLUDE/NOINCLUDE Compiler Options ΓòÉΓòÉΓòÉ
  18286.  
  18287. Description 
  18288.   The INCLUDE compiler option specifies that the %INCLUDE statements are 
  18289.   handled without using the full preprocessor facilities and incurring more 
  18290.   overhead.  This method is faster than using the preprocessor for programs 
  18291.   that use the %INCLUDE statement but no other PL/I preprocessor statements. 
  18292.   The INCLUDE option has no effect if preprocessor statements other than 
  18293.   %INCLUDE are used in the program.  In these cases, the MACRO option must be 
  18294.   used. 
  18295.  
  18296.   If you specify the MACRO option, it overrides the INCLUDE option. 
  18297.  
  18298.   NOINCLUDE is the default. 
  18299.  
  18300.   Abbreviations: INCΓöéNINC 
  18301.  
  18302. Syntax 
  18303.  
  18304. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇINCLUDEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18305.       ΓööΓöÇΓöÇNOINCLUDEΓöÇΓöÇΓöÿ
  18306.  
  18307.  
  18308. ΓòÉΓòÉΓòÉ <hidden> INSOURCE/NOINSOURCE Compiler Options ΓòÉΓòÉΓòÉ
  18309.  
  18310. Description 
  18311.   The INSOURCE option specifies that the compiler will include a listing of the 
  18312.   source program before the PL/I macro preprocessor translates it. Thus, the 
  18313.   INSOURCE listing contains preprocessor statements that do not appear in the 
  18314.   SOURCE listing. 
  18315.  
  18316.   This option is applicable only when the preprocessor is used; therefore, the 
  18317.   MACRO option must also be specified. 
  18318.  
  18319.   For MVS, the default is INSOURCE. For TSO and CMS, the default is NOINSOURCE. 
  18320.  
  18321.   Abbreviations: ISΓöéNIS 
  18322.  
  18323. Syntax 
  18324.  
  18325. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇINSOURCEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18326.       ΓööΓöÇΓöÇNOINSOURCEΓöÇΓöÇΓöÿ
  18327.  
  18328.  
  18329. ΓòÉΓòÉΓòÉ <hidden> INTERRUPT/NOINTERRUPT Compiler Options ΓòÉΓòÉΓòÉ
  18330.  
  18331. Description 
  18332.   The INTERRUPT option determines the effect of attention interrupts when the 
  18333.   compiled PL/I program runs under an interactive system. If specified on a 
  18334.   batch system, INTERRUPT can cause an abend. 
  18335.  
  18336.   NOINTERRUPT is the default. 
  18337.  
  18338.   Abbreviations: INTΓöéNINT 
  18339.  
  18340. Related Information 
  18341.   If you require the attention interrupt capability purely for testing 
  18342.   purposes, you do not need to use the INTERRUPT option.  The TEST option 
  18343.   provides this capability. 
  18344.  
  18345. Syntax 
  18346.  
  18347.  
  18348. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇINTERRUPTΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18349.       ΓööΓöÇΓöÇNOINTERRUPTΓöÇΓöÇΓöÿ
  18350.  
  18351.  
  18352. ΓòÉΓòÉΓòÉ <hidden> LANGLVL Compiler Option ΓòÉΓòÉΓòÉ
  18353.  
  18354. Description 
  18355.   The LANGLVL option specifies the level of the PL/I language supported, 
  18356.   including whether pointers in expressions are to be supported. 
  18357.  
  18358.   The default is LANGLVL(OS,NOSPROG). 
  18359.  
  18360.   Abbreviation: None 
  18361.  
  18362. Syntax 
  18363.  
  18364. ΓöÇΓöÇΓöÇΓöÇLANGLVLΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇOSΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18365.                   Γöé      Γö£ΓöÇΓöÇ,NOSPROGΓöÇΓöÇΓöñ  Γöé
  18366.                   Γöé      ΓööΓöÇΓöÇ,SPROGΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  18367.                   Γö£ΓöÇΓöÇNOSPROGΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöñ
  18368.                   Γöé           ΓööΓöÇΓöÇ,OSΓöÇΓöÇΓöÿ  Γöé
  18369.                   ΓööΓöÇΓöÇSPROGΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  18370.                               ΓööΓöÇΓöÇ,OSΓöÇΓöÇΓöÿ
  18371.  
  18372.  
  18373. ΓòÉΓòÉΓòÉ <hidden> LINECOUNT Compiler Option ΓòÉΓòÉΓòÉ
  18374.  
  18375. Description 
  18376.   The LINECOUNT option specifies the number of lines included in each page of 
  18377.   the compiler listing, including heading lines and blank lines. 
  18378.  
  18379.   The default is LINECOUNT(55). 
  18380.  
  18381.   Abbreviation: LC(n) 
  18382.  
  18383. Syntax 
  18384.  
  18385. ΓöÇΓöÇΓöÇΓöÇLINECOUNTΓöÇΓöÇ(ΓöÇΓöÇnΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18386.  
  18387.  
  18388. ΓòÉΓòÉΓòÉ <hidden> LIST/NOLIST Compiler Options ΓòÉΓòÉΓòÉ
  18389.  
  18390. Description 
  18391.   The LIST option specifies that the compiler will include a listing of the 
  18392.   object module (in a syntax similar to assembler language instructions) in the 
  18393.   compiler listing. 
  18394.  
  18395.   NOLIST is the default. 
  18396.  
  18397.   Abbreviations: None 
  18398.  
  18399. Usage Rules 
  18400.  
  18401.     If both m and n are omitted, the compiler produces a listing of the whole 
  18402.      program. 
  18403.  
  18404.     If the NUMBER option applies, m and n must be specified as line numbers. 
  18405.  
  18406.     If the STMT option applies, m and n must be statement numbers. 
  18407.  
  18408.     If you use LIST in conjunction with MAP, it increases the information 
  18409.      generated by MAP. 
  18410.  
  18411. Related Information 
  18412.   Under TSO, use the option LIST(m[n]) to direct a listing of particular 
  18413.   statements to the terminal in either of the following ways: 
  18414.  
  18415.     Use the LIST option, with no statement numbers, within the TERMINAL 
  18416.      option. 
  18417.  
  18418.     Use the PRINT(*) operand in the PLI command. 
  18419.  
  18420. Syntax 
  18421.  
  18422.        ΓöîΓöÇNOLISTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  18423. ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇLISTΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18424.                 ΓööΓöÇΓöÇ(ΓöÇΓöÇmΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18425.                         ΓööΓöÇΓöÇ,ΓöÇnΓöÇΓöÇΓöÿ
  18426.  
  18427.  
  18428. ΓòÉΓòÉΓòÉ <hidden> LMESSAGE Compiler Option ΓòÉΓòÉΓòÉ
  18429.  
  18430. Description 
  18431.   The LMESSAGE option produces messages in a long form. 
  18432.  
  18433.   LMESSAGE is the default. 
  18434.  
  18435.   Abbreviation:  LMSG 
  18436.  
  18437. Related Information 
  18438.   Use the SMESSAGE option to specify messages in a short form. 
  18439.  
  18440. Syntax 
  18441.  
  18442. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇLMESSAGEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  18443.       ΓööΓöÇΓöÇSMESSAGEΓöÇΓöÇΓöÿ
  18444.  
  18445.  
  18446. ΓòÉΓòÉΓòÉ <hidden> MACRO/NOMACRO Compiler Options ΓòÉΓòÉΓòÉ
  18447.  
  18448. Description 
  18449.   The MACRO option specifies that the source program will be processed by the 
  18450.   macro preprocessor. MACRO overrides INCLUDE if you specify both. 
  18451.  
  18452.   NOMACRO is the default. 
  18453.  
  18454.   Abbreviations: MΓöéNM 
  18455.  
  18456. Syntax 
  18457.  
  18458. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇMACROΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18459.       ΓööΓöÇΓöÇNOMACROΓöÇΓöÇΓöÿ
  18460.  
  18461.  
  18462. ΓòÉΓòÉΓòÉ <hidden> MAP/NOMAP Compiler Options ΓòÉΓòÉΓòÉ
  18463.  
  18464. Description 
  18465.   The MAP option specifies that the compiler produces tables showing the 
  18466.   organization of the static storage for the object module.  These tables show 
  18467.   how variables are mapped in the static internal control section and in DSA's, 
  18468.   thus enabling STATIC INTERNAL and AUTOMATIC variables to be found in PLIDUMP. 
  18469.  
  18470.   NOMAP is the default. 
  18471.  
  18472.   Abbreviations: None 
  18473.  
  18474. Related Information 
  18475.   If LIST is also specified, the MAP option produces tables showing constants, 
  18476.   control blocks, and INITIAL variable values.  LIST generates a listing of the 
  18477.   object code in pseudo-assembler language format. 
  18478.  
  18479. Example 
  18480.   If you want a complete MAP, but not a complete LIST, you can specify a single 
  18481.   statement as an argument for LIST to minimize the size of the LIST. For 
  18482.   example: 
  18483.  
  18484.     %PROCESS MAP LIST(1);
  18485.  
  18486. Syntax 
  18487.  
  18488. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇMAPΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18489.       ΓööΓöÇΓöÇNOMAPΓöÇΓöÇΓöÿ
  18490.  
  18491.  
  18492. ΓòÉΓòÉΓòÉ <hidden> MARGINI/NOMARGINI Compiler Options ΓòÉΓòÉΓòÉ
  18493.  
  18494. Description 
  18495.   The MARGINI compiler option specifies that the compiler includes a specified 
  18496.   character in the column preceding the left-hand margin, and also in the 
  18497.   column following the right-hand margin of the compiler listings resulting 
  18498.   from the INSOURCE and the SOURCE options. 
  18499.  
  18500.   Any text in the source input which precedes the left-hand margin will be 
  18501.   shifted left one column, and any text that follows the right-hand margin will 
  18502.   be shifted right one column.  Thus, text outside of the source margins can be 
  18503.   easily detected. 
  18504.  
  18505.   NOMARGINI is the default. 
  18506.  
  18507.   Abbreviations: MI('c')ΓöéNMI 
  18508.  
  18509. Syntax 
  18510.  
  18511. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇMARGINIΓöÇΓöÇ(ΓöÇΓöÇ'ΓöÇΓöÇcΓöÇΓöÇ'ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18512.       ΓööΓöÇΓöÇNOMARGINIΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18513.  
  18514.  
  18515. ΓòÉΓòÉΓòÉ <hidden> MARGINS Compiler Option ΓòÉΓòÉΓòÉ
  18516.  
  18517. Description 
  18518.   The MARGINS option specifies which part of each compiler input record 
  18519.   contains PL/I statements, and the position of the ANS control character that 
  18520.   formats the listing, if the SOURCE and/or INSOURCE options apply.  The 
  18521.   compiler will not process data that is outside these limits (but it will 
  18522.   include it in the source listings). 
  18523.  
  18524.   The IBM-supplied default for fixed-length records is MARGINS(2,72).  For 
  18525.   variable-length and undefined-length records, the IBM-supplied default is 
  18526.   MARGINS(10,100).  This specifies that there is no printer control character. 
  18527.  
  18528.   Abbreviation: MAR(m,n[,c]) 
  18529.  
  18530. Usage Rules 
  18531.  
  18532.     The PL/I source is extracted from the source input records so that the 
  18533.      first data byte of a record immediately follows the last data byte of the 
  18534.      previous record. For variable records, you must ensure that when you need 
  18535.      a blank you explicitly insert it between the margins of records. 
  18536.  
  18537.     The MARGINS option allows you to override the default for the primary 
  18538.      input in a program.  The secondary input must have either the same margins 
  18539.      as the primary input if it is the same type of record, or default margins 
  18540.      if it is a different type. 
  18541.  
  18542. Syntax 
  18543.  
  18544. ΓöÇΓöÇΓöÇΓöÇMARGINSΓöÇΓöÇ(ΓöÇΓöÇmΓöÇ,ΓöÇnΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18545.                          ΓööΓöÇΓöÇ,ΓöÇcΓöÇΓöÇΓöÿ
  18546.  
  18547.  
  18548. ΓòÉΓòÉΓòÉ <hidden> MDECK/NOMDECK Compiler Options ΓòÉΓòÉΓòÉ
  18549.  
  18550. Description 
  18551.   The MDECK option specifies that the preprocessor produces a copy of its 
  18552.   output on the file defined by the SYSPUNCH DD statement.  The MDECK option 
  18553.   allows you to retain the output from the preprocessor as a file of 80-column 
  18554.   records. 
  18555.  
  18556.   MDECK is ignored if NOMACRO is in effect. 
  18557.  
  18558.   NOMDECK is the default. 
  18559.  
  18560.   Abbreviations: MDΓöéNMD 
  18561.  
  18562. Syntax 
  18563.  
  18564. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇMDECKΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18565.       ΓööΓöÇΓöÇNOMDECKΓöÇΓöÇΓöÿ
  18566.  
  18567.  
  18568. ΓòÉΓòÉΓòÉ <hidden> NAME Compiler Option ΓòÉΓòÉΓòÉ
  18569.  
  18570. Description 
  18571.   The NAME option specifies that the TEXT file created by the compiler will be 
  18572.   given a specified external name.  This allows you to create more than one 
  18573.   TEXT file while doing batched compilation.  It also allows you to produce 
  18574.   TEXT files that can be included in a text library. 
  18575.  
  18576.   You can also use the NAME option to cause the linkage editor to substitute a 
  18577.   new load module for an existing load module with the same name in the 
  18578.   library. 
  18579.  
  18580.   NAME has no default. 
  18581.  
  18582.   Abbreviation: N('name') 
  18583.  
  18584. Syntax 
  18585.  
  18586. ΓöÇΓöÇΓöÇΓöÇNAMEΓöÇΓöÇ(ΓöÇΓöÇ'ΓöÇΓöÇnameΓöÇΓöÇ'ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18587.  
  18588.  
  18589. ΓòÉΓòÉΓòÉ <hidden> NEST/NONEST Compiler Options ΓòÉΓòÉΓòÉ
  18590.  
  18591. Description 
  18592.   The NEST option specifies that the listing resulting from the SOURCE option 
  18593.   indicates, for each statement, the block level and the do-group level. 
  18594.  
  18595.   NONEST is the default. 
  18596.  
  18597.   Abbreviations: None 
  18598.  
  18599. Syntax 
  18600.  
  18601. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇNESTΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18602.       ΓööΓöÇΓöÇNONESTΓöÇΓöÇΓöÿ
  18603.  
  18604.  
  18605. ΓòÉΓòÉΓòÉ <hidden> NUMBER/NONUMBER Compiler Options ΓòÉΓòÉΓòÉ
  18606.  
  18607. Description 
  18608.   The NUMBER option specifies that the numbers in the sequence fields in the 
  18609.   source input records are used to derive the statement numbers in the listings 
  18610.   resulting from the AGGREGATE, ATTRIBUTES, LIST, OFFSET, SOURCE, and XREF 
  18611.   options. 
  18612.  
  18613.   For MVS, NONUMBER is the default. For TSO and CMS, NUMBER is the default. 
  18614.  
  18615.   Abbreviations: NUMΓöéNNUM 
  18616.  
  18617. Related Information 
  18618.   The position of the sequence field can be specified in the SEQUENCE option. 
  18619.   Otherwise, the following default positions are assumed: 
  18620.  
  18621.     First eight columns for undefined-length or variable-length source input 
  18622.      records. 
  18623.  
  18624.     Last eight columns for fixed-length source input records. 
  18625.  
  18626.   If NONUMBER is specified, STMT and NOGONUMBER are implied. NUMBER is implied 
  18627.   by NOSTMT or GONUMBER. 
  18628.  
  18629. Syntax 
  18630.  
  18631. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇNUMBERΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18632.       ΓööΓöÇΓöÇNONUMBERΓöÇΓöÇΓöÿ
  18633.  
  18634.  
  18635. ΓòÉΓòÉΓòÉ <hidden> OBJECT/NOOBJECT Compiler Options ΓòÉΓòÉΓòÉ
  18636.  
  18637. Description 
  18638.   The OBJECT option specifies that the compiler will create an object module 
  18639.   and store it in a TEXT file (CMS) or in a data set defined by the DD 
  18640.   statement with the name SYSLIN (MVS). 
  18641.  
  18642.   OBJECT is the default. 
  18643.  
  18644.   Abbreviations: OBJΓöéNOBJ 
  18645.  
  18646. Syntax 
  18647.  
  18648. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇOBJECTΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18649.       ΓööΓöÇΓöÇNOOBJECTΓöÇΓöÇΓöÿ
  18650.  
  18651.  
  18652. ΓòÉΓòÉΓòÉ <hidden> NOT Compiler Option ΓòÉΓòÉΓòÉ
  18653.  
  18654. Description 
  18655.   The NOT option specifies up to seven alternate symbols, any of which you can 
  18656.   use as the logical NOT operator (╨║). 
  18657.  
  18658.   The IBM-supplied default code point for the NOT symbol is X'5F'. This logical 
  18659.   NOT sign might be recognized as a logical NOT symbol (╨║) or a caret symbol 
  18660.   (^) on your keyboard. 
  18661.  
  18662.   Abbreviation: None 
  18663.  
  18664. Examples 
  18665.  
  18666.     NOT('~') means that the tilde character, X'A1', will be recognized as the 
  18667.      logical NOT operator, and the standard NOT symbol (╨║) X'5F', will not be 
  18668.      recognized. 
  18669.  
  18670.     NOT('~╨║') means that either the tilde or the standard NOT symbol will be 
  18671.      recognized as the logical NOT operator. 
  18672.  
  18673. Syntax 
  18674.  
  18675.                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  18676.                     Γöé
  18677. ΓöÇΓöÇΓöÇNOTΓöÇΓöÇ(ΓöÇΓöÇ'ΓöÇΓöÇcharΓöÇΓö┤ΓöÇ'ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  18678.  
  18679.  
  18680. ΓòÉΓòÉΓòÉ <hidden> OFFSET/NOOFFSET Compiler Options ΓòÉΓòÉΓòÉ
  18681.  
  18682. Description 
  18683.   The OFFSET option specifies that the compiler prints a table of statement or 
  18684.   line numbers for each procedure with their offset addresses relative to the 
  18685.   primary entry point of the procedure.  You can use this table to identify a 
  18686.   statement from a run-time error message if the GONUMBER or GOSTMT options are 
  18687.   not in effect. 
  18688.  
  18689.   NOOFFSET is the default. 
  18690.  
  18691.   Abbreviations: OFΓöéNOF 
  18692.  
  18693. Related Information 
  18694.   If GOSTMT applies, statement numbers, as well as offset addresses, will be 
  18695.   included in run-time messages.  If GONUMBER applies, line numbers, as well as 
  18696.   offset addresses, will be included in run-time messages. 
  18697.  
  18698. Syntax 
  18699.  
  18700. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇOFFSETΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18701.       ΓööΓöÇΓöÇNOOFFSETΓöÇΓöÇΓöÿ
  18702.  
  18703.  
  18704. ΓòÉΓòÉΓòÉ <hidden> OPTIMIZE/NOOPTIMIZE Compiler Options ΓòÉΓòÉΓòÉ
  18705.  
  18706. Description 
  18707.   The OPTIMIZE option specifies the type of optimization required. 
  18708.  
  18709.   NOOPTIMIZE is the default. 
  18710.  
  18711.   Abbreviations: OPT(TIMEΓöé0Γöé2)ΓöéNOPT 
  18712.  
  18713. Syntax 
  18714.  
  18715. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇOPTIMIZEΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇTIMEΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18716.       Γöé               Γö£ΓöÇΓöÇ0ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  18717.       Γöé               ΓööΓöÇΓöÇ2ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé
  18718.       ΓööΓöÇΓöÇNOOPTIMIZEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18719.  
  18720.  
  18721. ΓòÉΓòÉΓòÉ <hidden> OPTIONS/NOOPTIONS Compiler Options ΓòÉΓòÉΓòÉ
  18722.  
  18723. Description 
  18724.   The OPTIONS option specifies that the compiler listing will include a list 
  18725.   showing the compile-time options to be used during this compilation.  This 
  18726.   list includes all those applied by default, those specified in the PARM 
  18727.   parameter of an EXEC statement or in the invoking command (PLI or PLIOPT), 
  18728.   and those specified in a %PROCESS statement. 
  18729.  
  18730.   Under MVS, OPTIONS is the default. Under TSO and CMS, NOOPTIONS is the 
  18731.   default. 
  18732.  
  18733.   Abbreviations: OPΓöéNOP 
  18734.  
  18735.   Note:   Under TSO, if the PRINT(*) operand of the PL/I command applies, the 
  18736.           list of options prints at the terminal. 
  18737.  
  18738.  
  18739. Syntax 
  18740.  
  18741. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇOPTIONSΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18742.       ΓööΓöÇΓöÇNOOPTIONSΓöÇΓöÇΓöÿ
  18743.  
  18744.  
  18745. ΓòÉΓòÉΓòÉ <hidden> OR Compiler Option ΓòÉΓòÉΓòÉ
  18746.  
  18747. Description 
  18748.   The OR option specifies up to seven alternate symbols, any of which is 
  18749.   interpreted as the logical OR operator (Γöé). These symbols are also used as 
  18750.   the concatenation operator, which is defined as two consecutive logical OR 
  18751.   symbols. 
  18752.  
  18753.   The default is OR('Γöé'). 
  18754.  
  18755.   Abbreviation: None 
  18756.  
  18757. Examples 
  18758.  
  18759.     OR('\') means that the backslash character, X'E0', will be recognized as 
  18760.      the logical OR operator, and two consecutive backslashes will be 
  18761.      recognized as the concatenation operator. The standard OR symbol X'4F' (Γöé) 
  18762.      will not be recognized as either operator. 
  18763.  
  18764.     OR('\Γöé') means that either the backslash or the standard OR symbol will be 
  18765.      recognized as the logical OR operator, and either symbol or both symbols 
  18766.      may be used to form the concatenation operator. 
  18767.  
  18768. Syntax 
  18769.  
  18770.                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  18771.                     Γöé
  18772. ΓöÇΓöÇΓöÇΓöÇORΓöÇΓöÇ(ΓöÇΓöÇ'ΓöÇΓöÇcharΓöÇΓö┤ΓöÇ'ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  18773.  
  18774.  
  18775. ΓòÉΓòÉΓòÉ <hidden> SEQUENCE/NOSEQUENCE Compiler Options ΓòÉΓòÉΓòÉ
  18776.  
  18777. Description 
  18778.   The SEQUENCE option defines the section of the input record from which the 
  18779.   compiler takes the sequence numbers.  These numbers are included in the 
  18780.   source listings produced by the INSOURCE and SOURCE options. 
  18781.  
  18782.   The IBM-supplied default for fixed-length records is SEQUENCE (73,80). For 
  18783.   variable-length and undefined-length records, the default is SEQUENCE (1,8). 
  18784.  
  18785.   Abbreviations: SEQ(m,n)ΓöéNSEQ 
  18786.  
  18787. Related Information 
  18788.   Sequence numbers are used to calculate statement numbers if the NUMBER option 
  18789.   is in effect.  No attempt is made to sort the input lines or records into the 
  18790.   specified sequence. 
  18791.  
  18792.   The extent specified should not overlap with the source program (as specified 
  18793.   by the MARGINS option). 
  18794.  
  18795. Syntax 
  18796.  
  18797. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇSEQUENCEΓöÇΓöÇ(ΓöÇΓöÇmΓöÇ,ΓöÇnΓöÇΓöÇ)ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18798.       ΓööΓöÇΓöÇNOSEQUENCEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18799.  
  18800.  
  18801. ΓòÉΓòÉΓòÉ <hidden> SIZE Compiler Option ΓòÉΓòÉΓòÉ
  18802.  
  18803. Description 
  18804.   The SIZE option can be used to limit the amount of main storage used by the 
  18805.   compiler.  This may be valuable, for example, when you invoke the compiler 
  18806.   dynamically to ensure that space is left for other purposes.  The 
  18807.   IBM-supplied default is SIZE(MAX), which allows the compiler to use as much 
  18808.   main storage in the region as it can. 
  18809.  
  18810.   The negative forms of SIZE can be useful when a certain amount of space must 
  18811.   be left free and the maximum size is unknown, or can vary because the job is 
  18812.   run in regions of different sizes. 
  18813.  
  18814.   Abbreviation: SZ([-]yyyyyyyyΓöé[-]yyyyyKΓöéMAX) 
  18815.  
  18816. Usage Rules 
  18817.  
  18818.     Under MVS: If you use the DBCSOS Ordering Product under MVS (a utility to 
  18819.      sort DBCS characters), storage must be reserved for the operating system 
  18820.      to load it.  Specify SIZE(-n) to reserve sufficient storage, where n is at 
  18821.      least 128K. 
  18822.  
  18823.     Under TSO: An additional 10K to 30K bytes must be allowed. The actual size 
  18824.      required for TSO depends on which routines are placed in the link pack 
  18825.      area (a common main storage pool available to all regions). 
  18826.  
  18827.     Under CMS: SIZE(MAX) should always be used in CMS unless it is essential 
  18828.      to limit the space used.  If a limit is set in the SIZE option, the value 
  18829.      used will exceed that which is specified. 
  18830.  
  18831. Syntax 
  18832.  
  18833.              ΓöîΓöÇMAXΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  18834. ΓöÇΓöÇSIZEΓöÇΓöÇ(ΓöÇΓöÇΓö╝ΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇyyyyyyyyΓöÇΓö╝ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  18835.              Γöé ΓööΓöÇ-ΓöÇΓöÿ           Γöé
  18836.              ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇyyyyyKΓöÇΓöÇΓöÇΓöÿ
  18837.                ΓööΓöÇ-ΓöÇΓöÿ
  18838.  
  18839.  
  18840. ΓòÉΓòÉΓòÉ <hidden> SMESSAGE Compiler Option ΓòÉΓòÉΓòÉ
  18841.  
  18842. Description 
  18843.   The SMESSAGE option produces messages in shortened form. 
  18844.  
  18845.   Abbreviation: SMSG 
  18846.  
  18847. Related Information 
  18848.   Use LMESSAGE to produce messages in long form. LMESSAGE is the default. 
  18849.  
  18850. Syntax 
  18851.  
  18852. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇLMESSAGEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18853.       ΓööΓöÇΓöÇSMESSAGEΓöÇΓöÇΓöÿ
  18854.  
  18855.  
  18856. ΓòÉΓòÉΓòÉ <hidden> SOURCE/NOSOURCE Compiler Options ΓòÉΓòÉΓòÉ
  18857.  
  18858. Description 
  18859.   The SOURCE option specifies that the compiler listing includes a listing of 
  18860.   the source program. The source program listed is either the original source 
  18861.   input or, if the MACRO option applies, the output from the preprocessor. 
  18862.  
  18863.   For MVS, the default is SOURCE. For TSO and CMS, the default is NOSOURCE. 
  18864.  
  18865.   Abbreviations: SΓöéNS 
  18866.  
  18867. Syntax 
  18868.  
  18869. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇSOURCEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18870.       ΓööΓöÇΓöÇNOSOURCEΓöÇΓöÇΓöÿ
  18871.  
  18872.  
  18873. ΓòÉΓòÉΓòÉ <hidden> STMT/NOSTMT Compiler Options ΓòÉΓòÉΓòÉ
  18874.  
  18875. Description 
  18876.   The STMT option specifies that statements in the source program are counted, 
  18877.   and this statement number is used to identify statements in the compiler 
  18878.   listings resulting from the AGGREGATE, ATTRIBUTES, LIST, OFFSET, SOURCE, and 
  18879.   XREF options. STMT is implied by NONUMBER or GOSTMT. 
  18880.  
  18881.   If NOSTMT is specified, NUMBER and NOGOSTMT are implied. 
  18882.  
  18883.   For MVS, the default is STMT. For TSO and CMS, the default is NOSTMT. 
  18884.  
  18885.   Abbreviations: None 
  18886.  
  18887. Syntax 
  18888.  
  18889. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇSTMTΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18890.       ΓööΓöÇΓöÇNOSTMTΓöÇΓöÇΓöÿ
  18891.  
  18892.  
  18893. ΓòÉΓòÉΓòÉ <hidden> STORAGE/NOSTORAGE Compiler Options ΓòÉΓòÉΓòÉ
  18894.  
  18895. Description 
  18896.   The STORAGE option specifies that the compiler listing includes a table 
  18897.   giving the main storage requirements for the object module. 
  18898.  
  18899.   NOSTORAGE is the default. 
  18900.  
  18901.   Abbreviations: STGΓöéNSTG 
  18902.  
  18903. Syntax 
  18904.  
  18905. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇSTORAGEΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18906.       ΓööΓöÇΓöÇNOSTORAGEΓöÇΓöÿ
  18907.  
  18908.  
  18909. ΓòÉΓòÉΓòÉ <hidden> SYNTAX/NOSYNTAX Compiler Options ΓòÉΓòÉΓòÉ
  18910.  
  18911. Description 
  18912.   The SYNTAX option specifies that the compiler continues into syntax checking 
  18913.   after preprocessing when the MACRO option is specified, unless it detects an 
  18914.   unrecoverable error.  Continuation depends on the severity of the error, as 
  18915.   specified by the NOSYNTAX option. 
  18916.  
  18917.   You can use this option to prevent wasted runs when debugging a PL/I program 
  18918.   that uses the preprocessor. 
  18919.  
  18920.   The default is NOSYNTAX(S). 
  18921.  
  18922.   Abbreviations: SYNΓöéNSYN[(WΓöéEΓöéS)] 
  18923.  
  18924. Related Information 
  18925.   If the SOURCE option applies, the compiler will generate a source listing 
  18926.   even if syntax checking is not performed. 
  18927.  
  18928. Syntax 
  18929.  
  18930.  
  18931. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇSYNTAXΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18932.       ΓööΓöÇΓöÇNOSYNTAXΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  18933.                    ΓööΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇWΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ
  18934.                          Γö£ΓöÇΓöÇEΓöÇΓöÇΓöñ
  18935.                          ΓööΓöÇΓöÇSΓöÇΓöÇΓöÿ
  18936.  
  18937.  
  18938. ΓòÉΓòÉΓòÉ <hidden> SYSTEM Compiler Option ΓòÉΓòÉΓòÉ
  18939.  
  18940. Description 
  18941.   The SYSTEM option specifies the format used to pass parameters to the MAIN 
  18942.   PL/I procedure, and indicates the host system under which the program will 
  18943.   run. MVS, CMS, CMSTPL, CICS, IMS, and TSO are the subparameters recognized. 
  18944.   This option allows a program compiled under one system to run under another. 
  18945.   For example, a program compiled under CMS can run under MVS, and parameters 
  18946.   are passed according to MVS conventions. 
  18947.  
  18948.   For MVS and TSO, the default is SYSTEM(MVS). For CMS, the default is 
  18949.   SYSTEM(CMS). 
  18950.  
  18951.   Abbreviation: None 
  18952.  
  18953. Syntax 
  18954.  
  18955. ΓöÇΓöÇΓöÇΓöÇSYSTEMΓöÇΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇCMSΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18956.                   Γö£ΓöÇΓöÇCMSTPLΓöÇΓöÇΓöñ
  18957.                   Γö£ΓöÇΓöÇMVSΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  18958.                   Γö£ΓöÇΓöÇTSOΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  18959.                   Γö£ΓöÇΓöÇCICSΓöÇΓöÇΓöÇΓöÇΓöñ
  18960.                   ΓööΓöÇΓöÇIMSΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18961.  
  18962.  
  18963. ΓòÉΓòÉΓòÉ <hidden> TERMINAL/NOTERMINAL Compiler Option ΓòÉΓòÉΓòÉ
  18964.  
  18965. Description 
  18966.   The TERMINAL option is applicable only in a conversational environment.  It 
  18967.   specifies that a subset of, or all of, the compiler listing produced during 
  18968.   compilation prints at the terminal. If you specify TERMINAL without an 
  18969.   argument, diagnostic and information messages are printed at the terminal. 
  18970.   You can add an argument, which takes the form of an option list, to specify 
  18971.   other parts of the compiler listing that are printed at the terminal. 
  18972.  
  18973.   NOTERMINAL specifies that no portion of the compiler listing is output to the 
  18974.   terminal. 
  18975.  
  18976.   For MVS, the default is NOTERMINAL. For TSO and CMS, the default is TERMINAL. 
  18977.  
  18978.   Abbreviations: TERM[(opt-list)]ΓöéNTERM 
  18979.  
  18980. Syntax 
  18981.  
  18982. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇTERMINALΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  18983.       Γöé            ΓööΓöÇΓöÇ(ΓöÇΓöÇoptΓöÇlistΓöÇΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  18984.       ΓööΓöÇΓöÇNOTERMINALΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  18985.  
  18986.  
  18987. ΓòÉΓòÉΓòÉ <hidden> TEST/NOTEST Compiler Options ΓòÉΓòÉΓòÉ
  18988.  
  18989. Description 
  18990.   Use the TEST option to specify the level of testing capability that the 
  18991.   compiler generates as part of the object code.  It allows you to control the 
  18992.   location of test hooks and to control whether or not the symbol table will be 
  18993.   generated. 
  18994.  
  18995.   Because the TEST option can increase the size of the object code and can 
  18996.   affect performance, you might want to limit the number and placement of 
  18997.   hooks. 
  18998.  
  18999.   Any TEST option other than NOTEST and TEST(NONE,NOSYM) will automatically 
  19000.   provide the attention interrupt capability for program testing purposes. 
  19001.  
  19002.   NOTEST(NONE,SYM) is the default. 
  19003.  
  19004.   Abbreviations: None 
  19005.  
  19006. Related Information 
  19007.  
  19008.     The TEST option can imply GONUMBER or GOSTMT, depending on whether NUMBER 
  19009.      or STMT is in effect. 
  19010.  
  19011.     If the program has an ATTENTION ON-unit that you want invoked, you must 
  19012.      compile the program with either of the following: 
  19013.  
  19014.       - The INTERRUPT option, or 
  19015.       - A TEST option other than NOTEST or TEST(NONE,NOSYM). 
  19016.  
  19017. Syntax 
  19018.  
  19019. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇTESTΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  19020.       Γöé        ΓööΓöÇΓöÇ(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇBLOCKΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  19021.       Γöé              Γöé  Γö£ΓöÇΓöÇSTMTΓöÇΓöÇΓöÇΓöñ  ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇSYMΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé        Γöé
  19022.       Γöé              Γöé  Γö£ΓöÇΓöÇPATHΓöÇΓöÇΓöÇΓöñ      ΓööΓöÇΓöÇNOSYMΓöÇΓöÇΓöÿ  Γöé        Γöé
  19023.       Γöé              Γöé  Γö£ΓöÇΓöÇALLΓöÇΓöÇΓöÇΓöÇΓöñ                   Γöé        Γöé
  19024.       Γöé              Γöé  ΓööΓöÇΓöÇNONEΓöÇΓöÇΓöÇΓöÿ                   Γöé        Γöé
  19025.       Γöé              Γöé                                Γöé        Γöé
  19026.       Γöé              ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇSYMΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ        Γöé
  19027.       Γöé                 ΓööΓöÇΓöÇNOSYMΓöÇΓöÇΓöÿ  ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇBLOCKΓöÇΓöÇΓöñ           Γöé
  19028.       Γöé                                  Γö£ΓöÇΓöÇSTMTΓöÇΓöÇΓöÇΓöñ           Γöé
  19029.       Γöé                                  Γö£ΓöÇΓöÇPATHΓöÇΓöÇΓöÇΓöñ           Γöé
  19030.       Γöé                                  Γö£ΓöÇΓöÇALLΓöÇΓöÇΓöÇΓöÇΓöñ           Γöé
  19031.       Γöé                                  ΓööΓöÇΓöÇNONEΓöÇΓöÇΓöÇΓöÿ           Γöé
  19032.       ΓööΓöÇΓöÇNOTESTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  19033.  
  19034.  
  19035. ΓòÉΓòÉΓòÉ <hidden> XREF/NOXREF Compiler Options ΓòÉΓòÉΓòÉ
  19036.  
  19037. Description 
  19038.   The XREF option specifies that the compiler will include in the compiler 
  19039.   listing a cross-reference table of names used in the program together with 
  19040.   the numbers of the statements in which they are declared or referenced. 
  19041.  
  19042.   The only exception is that label references on END statements are not 
  19043.   included.  For example, assume that statement number 20 in the procedure 
  19044.   PROC1 is END PROC1;. In this situation, statement number 20 will not appear 
  19045.   in the cross-reference listing for PROC1. 
  19046.  
  19047.   NOXREF is the default. 
  19048.  
  19049.   Abbreviations: X[(FΓöéS)]ΓöéNX 
  19050.  
  19051. Related Information 
  19052.   If both XREF and ATTRIBUTES are specified, the two listings are combined.  If 
  19053.   there is a conflict between SHORT and FULL, the usage is determined by the 
  19054.   last option specified.  For example, ATTRIBUTES(SHORT) XREF(FULL) results in 
  19055.   FULL applying to the combined listing. 
  19056.  
  19057. Syntax 
  19058.  
  19059. ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇXREFΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ
  19060.       Γöé        ΓööΓöÇΓöÇ(ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇFULLΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ)ΓöÇΓöÇΓöÿ  Γöé
  19061.       Γöé               ΓööΓöÇΓöÇSHORTΓöÇΓöÇΓöÿ        Γöé
  19062.       ΓööΓöÇΓöÇNOXREFΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  19063.  
  19064.  
  19065. ΓòÉΓòÉΓòÉ <hidden> PLI Command (TSO Only) ΓòÉΓòÉΓòÉ
  19066.  
  19067. Description 
  19068.   Use the PLI command to invoke the compiler under TSO. 
  19069.  
  19070.   The command processor for the PLI command is known as the PL/I prompter. When 
  19071.   you enter the PLI command, the prompter checks the operands and allocates the 
  19072.   data sets required by the compiler. Then, it passes control to the compiler 
  19073.   and displays a confirmation message. 
  19074.  
  19075. Usage Rules 
  19076.   If you use an unqualified data set name (for example, CALTROP) the system 
  19077.   generates a name for the object module data set. It takes the unqualified 
  19078.   name of the source data set and adds your user-identification and the 
  19079.   descriptive qualifier "OBJ". 
  19080.  
  19081.   For example, if a user with the identification WSMITH entered the following 
  19082.   command: 
  19083.  
  19084.     PLI MYSOURCE
  19085.  
  19086.   the object module would be written onto the data set named 
  19087.   WSMITH.MYSOURCE.OBJ. 
  19088.  
  19089. Examples 
  19090.   Select one of the following examples of the PLI command: 
  19091.  
  19092.     Simplest form of PLI 
  19093.  
  19094.     PLI when source has unconventional name 
  19095.  
  19096.     Choosing your own object module name 
  19097.  
  19098. Related Information 
  19099.   Allocating data sets for compilation 
  19100.  
  19101. Syntax 
  19102.  
  19103. ΓöÇΓöÇΓöÇPLIΓöÇΓöÇdata-set-nameΓöÇΓöÇoption-listΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  19104.                                        Γö£ΓöÇPRINTΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19105.                                        Γöé       Γö£ΓöÇ(*)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ          Γöé
  19106.                                        Γöé       ΓööΓöÇ(dsnameΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)Γöÿ          Γöé
  19107.                                        Γöé                 Γöö,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ             Γöé
  19108.                                        Γöé                    Γö£ΓöÇnΓöÇΓöÇΓöñ              Γöé
  19109.                                        Γöé                    ΓööΓöÇ,mΓöÇΓöÿ              Γöé
  19110.                                        Γö£ΓöÇSYSPRINTΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöñ
  19111.                                        Γöé          ΓööΓöÇ(sysout-classΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÿΓöé
  19112.                                        Γöé                          Γöö,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ    Γöé
  19113.                                        Γöé                             Γö£ΓöÇnΓöÇΓöÇΓöñ     Γöé
  19114.                                        Γöé                             ΓööΓöÇ,m Γöÿ     Γöé
  19115.                                        Γö£ΓöÇNOPRINTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19116.                                        ΓööΓöÇLIB(dslist)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  19117.  
  19118.  
  19119. ΓòÉΓòÉΓòÉ <hidden> Allocating Data Sets for Compilation ΓòÉΓòÉΓòÉ
  19120.  
  19121. Description 
  19122.   The compiler requires the use of a number of data sets in order to process a 
  19123.   PL/I program. The following data sets are always required by the compiler: 
  19124.  
  19125.     The data set holding the PL/I program 
  19126.     A data set for the compiler listing. 
  19127.  
  19128.   Up to six more data sets can be required, depending on which compiler options 
  19129.   have been specified. 
  19130.  
  19131.   These data sets must be allocated before the compiler can use them. If you 
  19132.   use the PLI command, you invoke the compiler via the prompter, and the 
  19133.   prompter allocates the necessary data sets. If you invoke the compiler 
  19134.   without the prompter, you must allocate the necessary data sets yourself. 
  19135.  
  19136. Usage Rules 
  19137.   When the prompter allocates compiler data sets, it uses ddnames generated by 
  19138.   TSO rather than the ddnames that are used in batch mode. If the compiler is 
  19139.   invoked via the prompter, you cannot refer to the data sets by these names. 
  19140.   To control the allocation of compiler data sets, you need to use the 
  19141.   appropriate operand of the PLI command. For example, to allocate the standard 
  19142.   output file (ddname SYSPRINT in batch mode) to the terminal, you should use 
  19143.   the PRINT(*) operand of the PLI command. You cannot make the allocation by 
  19144.   using the ALLOCATE command with FILE(SYSPRINT) and DATASET(*) operands. 
  19145.  
  19146.   When the prompter is not invoked, the batch-mode ddnames are recognized as 
  19147.   referring to the compiler data sets. 
  19148.  
  19149. Related Information 
  19150.   Compiler data sets 
  19151.  
  19152.  
  19153. ΓòÉΓòÉΓòÉ <hidden> Compiler Data Sets ΓòÉΓòÉΓòÉ
  19154.  
  19155. Description 
  19156.   The following table summarizes compiler usage of data sets. Notes are 
  19157.   designated by numbers in paretheses and are explained following the table. 
  19158.  
  19159.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  19160.     Γöé DATA SET (AND      Γöé      WHEN REQUIRED     Γöé  WHERE TO         Γöé  DESCRIPTIVE Γöé   ALLOCATED     Γöé  PARAMETERS      Γöé   PARAMETERS       Γöé
  19161.     Γöé BATCH-MODE         Γöé                        Γöé  SPECIFY DATA     Γöé  QUALIFIER   Γöé   BY            Γöé  USED BY         Γöé   USED BY          Γöé
  19162.     Γöé DDNAME)            Γöé                        Γöé  SET IN PLI       Γöé              Γöé                 Γöé  PROMPTER        Γöé   PROMPTER         Γöé
  19163.     Γöé                    Γöé                        Γöé  COMMAND          Γöé              Γöé                 Γöé  SPACE= (1,2)    Γöé   DISP= (1,3)      Γöé
  19164.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19165.     Γöé Primary input      Γöé      ALWAYS            Γöé  1st operand      Γöé  PLI         Γöé    Prompter     Γöé   --- (4)        Γöé   SHR              Γöé
  19166.     Γöé (SYSCIN or         Γöé                        Γöé                   Γöé              Γöé                 Γöé                  Γöé                    Γöé
  19167.     Γöé SYSIN)             Γöé                        Γöé                   Γöé              Γöé                 Γöé                  Γöé                    Γöé
  19168.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19169.     Γöé Temporary work     Γöé      When insufficient Γöé   Cannot          Γöé   ---        Γöé    Prompter     Γöé   (1024,(60,60)) Γöé   (NEW, DELETE)    Γöé
  19170.     Γöé data set (SYSUT1)  Γöé      main storage      Γöé   specify         Γöé              Γöé                 Γöé                  Γöé                    Γöé
  19171.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19172.     Γöé Compiler listing   Γöé      Always            Γöé   Argument of     Γöé   LIST       Γöé    Prompter     Γöé   (629,(n,m))    Γöé   (OLD, KEEP) or   Γöé
  19173.     Γöé (SYSPRINT)         Γöé                        Γöé   PRINT           Γöé              Γöé                 Γöé                  Γöé   (NEW, CATLG) (5) Γöé
  19174.     Γöé                    Γöé                        Γöé   operand         Γöé              Γöé                 Γöé                  Γöé                    Γöé
  19175.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19176.     Γöé Object module      Γöé      When OBJECT       Γöé   1st argument of Γöé   OBJ        Γöé    Prompter,    Γöé   (400,(50,50))  Γöé   (OLD, KEEP) or   Γöé
  19177.     Γöé (SYSLIN)           Γöé      option applies    Γöé   OBJECT          Γöé              Γöé    when         Γöé                  Γöé   (NEW, CATLG)     Γöé
  19178.     Γöé                    Γöé                        Γöé   operand         Γöé              Γöé    required (6) Γöé                  Γöé                    Γöé
  19179.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19180.     Γöé Object module or   Γöé      When MACRO        Γöé   Argument of     Γöé   DECK       Γöé    Prompter,    Γöé   (400,(50,50))  Γöé   (OLD, KEEP) or   Γöé
  19181.     Γöé preprocessor       Γöé      and MDECK         Γöé   MDECK,          Γöé              Γöé    when         Γöé                  Γöé   (NEW, CATLG)     Γöé
  19182.     Γöé output in card     Γöé      options apply     Γöé   DECK            Γöé              Γöé    required (6) Γöé                  Γöé                    Γöé
  19183.     Γöé format             Γöé                        Γöé   operands        Γöé              Γöé                 Γöé                  Γöé                    Γöé
  19184.     Γöé (SYSPUNCH)         Γöé                        Γöé                   Γöé              Γöé                 Γöé                  Γöé                    Γöé
  19185.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19186.     Γöé Secondary input to Γöé      When LIB          Γöé   Arguments       Γöé   ---        Γöé    Prompter,    Γöé   --- (7)        Γöé   SHR              Γöé
  19187.     Γöé preprocessor       Γöé      operand is        Γöé   of LIB          Γöé              Γöé    when         Γöé                  Γöé                    Γöé
  19188.     Γöé (SYSLIB) (7)       Γöé      used              Γöé   operand         Γöé              Γöé    required     Γöé                  Γöé                    Γöé
  19189.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  19190.  
  19191.   Notes: 
  19192.  
  19193.   (1) - Unit is determined by entry in User Attribute Data Set. 
  19194.  
  19195.   (2) - These space allocations apply only if the data set is new. The first 
  19196.   argument of the SPACE parameter established the block size. For the SYSUT1, 
  19197.   SYSPRINT, SYSLIN, and SYSPUNCH data sets, the record format, record length, 
  19198.   and number of buffers are established by the compiler when it opens the data 
  19199.   sets. 
  19200.  
  19201.   (3) - The prompter first tries to allocate the SYSPRINT, SYSLIN, and SYSPUNCH 
  19202.   data sets with DISP=(OLD, KEEP). This will cause any existing data set (or 
  19203.   partitioned data set member) with the same name to be replaced with the new 
  19204.   one. If the data set name cannot be found in the system catalog, the data set 
  19205.   is allocated with DISP=(NEW,CATLG). 
  19206.  
  19207.   (4) - The data set already exists; therefore, SPACE (and also UNIT) are 
  19208.   already established. 
  19209.  
  19210.   (5) - DISP parameter used only if PRINT(dsname) operand applies. Otherwise, 
  19211.   prompter supplies the following parameters: 
  19212.  
  19213.     TERM=TS if PRINT(*) operand applies 
  19214.     DUMMY if NOPRINT operand applies 
  19215.     SYSOUT if SYSPRINT operand applies 
  19216.  
  19217.   (6) - Except when the associated option has been specified by means of a 
  19218.   %PROCESS statement. In this case, the data set(s) must be allocated by the 
  19219.   user. 
  19220.  
  19221.   (7) - If any ddnames are specified in %INCLUDE statements, allocate the data 
  19222.   sets with the ALLOCATE statement. 
  19223.  
  19224.  
  19225. ΓòÉΓòÉΓòÉ <hidden> PLIOPT Command (CMS Only) ΓòÉΓòÉΓòÉ
  19226.  
  19227. Description 
  19228.   The PLIOPT command compiles a PL/I program or a series of PL/I programs into 
  19229.   machine language object code. If the file type is missing, the file type 
  19230.   defaults to PLIOPT or PLI. 
  19231.  
  19232. Syntax 
  19233.  
  19234. ΓöÇΓöÇΓöÇPLIOPTΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇ
  19235.                Γö£ΓöÇPRINTΓöÇΓöÇΓöÇΓöñ
  19236.                Γö£ΓöÇDISKΓöÇΓöÇΓöÇΓöÇΓöñ
  19237.                Γö£ΓöÇTYPEΓöÇΓöÇΓöÇΓöÇΓöñ
  19238.                Γö£ΓöÇNOPRINTΓöÇΓöñ
  19239.                ΓööΓöÇOBJECTΓöÇΓöÇΓöÿ
  19240.  
  19241.  
  19242. ΓòÉΓòÉΓòÉ 1.10. Reading PL/I Syntax Diagrams ΓòÉΓòÉΓòÉ
  19243.  
  19244. Throughout the online help, syntax is described using the structure defined 
  19245. below. 
  19246.  
  19247.  Read the syntax diagrams from left to right, from top to bottom, following 
  19248.   the path of the line. 
  19249.  
  19250.   The ΓöÇΓöÇΓöÇ symbol indicates the beginning of a statement. 
  19251.  
  19252.   The ΓöÇΓöÇΓöÇ symbol indicates that the statement syntax is continued on the next 
  19253.   line. 
  19254.  
  19255.   The ΓöÇΓöÇΓöÇ symbol indicates that a statement is continued from the previous 
  19256.   line. 
  19257.  
  19258.   The ΓöÇΓöÇΓöÇ symbol indicates the end of a statement. 
  19259.  
  19260.   Diagrams of syntactical units other than complete statements start with the 
  19261.   ΓöÇΓöÇΓöÇ symbol and end with the ΓöÇΓöÇΓöÇ symbol. 
  19262.  
  19263.  Required items appear on the horizontal line (the main path). 
  19264.  
  19265.     ΓöÇΓöÇΓöÇSTATEMENTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇrequired_itemΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  19266.  
  19267.  Optional items appear below the main path. 
  19268.  
  19269.     ΓöÇΓöÇΓöÇSTATEMENTΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  19270.                        ΓööΓöÇoptional_itemΓöÇΓöÿ
  19271.  
  19272.  If you can choose from two or more items, they appear vertically, in a stack. 
  19273.  
  19274.   If you must choose one of the items, one item of the stack appears on the 
  19275.   main path. 
  19276.  
  19277.     ΓöÇΓöÇΓöÇSTATEMENTΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇrequired_choice1ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  19278.                      ΓööΓöÇΓöÇrequired_choice2ΓöÇΓöÇΓöÿ
  19279.  
  19280.   If choosing one of the items is optional, the entire stack appears below the 
  19281.   main path. 
  19282.  
  19283.     ΓöÇΓöÇΓöÇSTATEMENTΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  19284.                      Γö£ΓöÇΓöÇoptional_choice1ΓöÇΓöÇΓöñ
  19285.                      ΓööΓöÇΓöÇoptional_choice2ΓöÇΓöÇΓöÿ
  19286.  
  19287.  An arrow returning to the left above the main line indicates an item that can 
  19288.   be repeated. 
  19289.  
  19290.                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  19291.                                        Γöé
  19292.     ΓöÇΓöÇΓöÇSTATEMENTΓöÇΓöÇΓöÇΓöÇΓöÇrepeatable_itemΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  19293.  
  19294.   A repeat arrow above a stack indicates that you can repeat the items in the 
  19295.   stack. 
  19296.  
  19297.  Keywords appear in uppercase (for example, "PARM1"). They must be spelled 
  19298.   exactly as shown. Variables appear in all lowercase letters (for example, 
  19299.   "parmx").  They represent user-supplied names or values. 
  19300.  
  19301.  If punctuation marks, parentheses, arithmetic operators, or such symbols are 
  19302.   shown, you must enter them as part of the syntax. 
  19303.  
  19304.  Defaults appear above the main path unless otherwise noted in the description 
  19305.   of the item. 
  19306.  
  19307.  
  19308. ΓòÉΓòÉΓòÉ <hidden> Help Is Not Available ΓòÉΓòÉΓòÉ
  19309.  
  19310. Online help is not available for this OS/2 keyword.  Help for OS/2 language is 
  19311. not a part of the CODE/370 product. 
  19312.  
  19313.  
  19314. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19315.  
  19316. To allow a source program to deal primarily with the logical aspects of data 
  19317. rather than with its physical organization in a data set, PL/I employs models 
  19318. of data sets, called files. 
  19319.  
  19320. A file can be associated with different data sets at different times during the 
  19321. execution of a program. 
  19322.  
  19323.  
  19324. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19325.  
  19326. If an OPEN statement is not executed for a file, the file is opened implicitly 
  19327. before the first data transmission statement for that file is executed.  In 
  19328. this case, the file opening uses information about the file as specified in a 
  19329. DECLARE statement (or defaults derived from the transmission statement). 
  19330.  
  19331. Similarly, if a file has not been closed before a program ends, the file is 
  19332. closed during program termination. 
  19333.  
  19334. When a file for stream input, sequential input, or sequential update is opened, 
  19335. the associated data set is positioned at the first record. When a BACKWARDS 
  19336. file is opened, the associated data set is positioned at the last record. 
  19337.  
  19338.  
  19339. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19340.  
  19341. FILE (file reference) 
  19342.   specifies the name of the file that is associated with a data set. 
  19343.  
  19344.  
  19345. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19346.  
  19347. The following example illustrates implicit opening: 
  19348.  
  19349. DECLARE MASTER FILE KEYED INTERNAL;
  19350. READ FILE (MASTER)
  19351.      INTO (MASTER_RECORD)
  19352.      KEYTO(MASTER_KEY);
  19353.  
  19354. Attributes after merge (due to the implicit opening caused by execution of the 
  19355. READ statement) are KEYED, INTERNAL, RECORD, and INPUT. No additional 
  19356. attributes are implied. Attributes after default application are KEYED, 
  19357. INTERNAL, RECORD, INPUT, and SEQUENTIAL. 
  19358.  
  19359.  
  19360. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19361.  
  19362. FILE (file-reference) 
  19363.   specifies the name of the file that is to be dissociated from the data set. 
  19364.  
  19365.  
  19366. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19367.  
  19368. ENVIRONMENT 
  19369.   can be used to control the disposition of magnetic tapes. 
  19370.  
  19371.  
  19372. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19373.  
  19374. based-variable 
  19375.   must be an unsubscripted level-1 based variable. 
  19376.  
  19377.  
  19378. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19379.  
  19380. data-list 
  19381.   identifies a list of data items to be transmitted. 
  19382.  
  19383.  
  19384. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19385.  
  19386. format-list 
  19387.   consists of either data format items, control format items, or the remote 
  19388.   format item. 
  19389.  
  19390.  
  19391. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19392.  
  19393. Interleaved subscripts cannot appear in qualified names in the stream. For 
  19394. example, assume that Y is declared as follows: 
  19395.  
  19396. DECLARE 1 Y(5,5),2 A(10),3 B, 3 C, 3 D;
  19397.  
  19398. An element name has to appear in the stream as follows: 
  19399.  
  19400. Y.A.B(2,3,8)= 8.72
  19401.  
  19402.  
  19403. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19404.  
  19405. format-list 
  19406.   is the list of format items and is associated with a data list. 
  19407.  
  19408.  
  19409. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19410.  
  19411. field-width 
  19412.   specifies the number of character positions in the data stream that contain 
  19413.   (or will contain) the string. It is an expression that is evaluated and 
  19414.   converted to an integer value, which must be nonnegative, each time the 
  19415.   format item is used. 
  19416.  
  19417.  
  19418. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19419.  
  19420. field-width 
  19421.   specifies the number of data-stream character positions that contain (or will 
  19422.   contain) the bit string. It is an expression that is evaluated and converted 
  19423.   to an integer value, which must be nonnegative, each time the format item is 
  19424.   used. 
  19425.  
  19426.  
  19427. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19428.  
  19429. real-format-item 
  19430.   is specified by one of the F-, E-, or P-format items. The P-format item must 
  19431.   describe numeric character data. 
  19432.  
  19433.  
  19434. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19435.  
  19436. field-width, fractional-digits, significant-digits 
  19437.   expressions, which are evaluated and converted to integer values each time 
  19438.   the format item is used. 
  19439.  
  19440.   Field-width: specifies the total number of characters in the field. 
  19441.  
  19442.   Fractional-digits: specifies the number of digits in the mantissa that follow 
  19443.   the decimal point. 
  19444.  
  19445.   Significant-digits: specifies the number of digits that must appear in the 
  19446.   mantissa. 
  19447.  
  19448.  
  19449. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19450.  
  19451. field-width, fractional-digits, scaling-factor 
  19452.   expressions are evaluated and converted to integer values each time the 
  19453.   format item is used. The evaluated field-width and fractional-digits must 
  19454.   both be nonnegative. 
  19455.  
  19456.  
  19457. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19458.  
  19459. field-width 
  19460.   specifies the number of 2-byte positions in the data stream that contain (or 
  19461.   will contain) the graphic string. It is an expression that is evaluated and 
  19462.   converted to an integer value, which must be nonnegative, each time the 
  19463.   format item is used. End of record must not occur between the 2 bytes of a 
  19464.   graphic. 
  19465.  
  19466.  
  19467. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19468.  
  19469. On input, the specified number of graphics is obtained from the data stream and 
  19470. assigned, with any necessary truncation or padding, to the data list item. If 
  19471. the input file has the GRAPHIC option of the ENVIRONMENT attribute, the 
  19472. specified number of graphics must be enclosed in shift codes. The field-width 
  19473. is always required on input, and if it is zero, a null string is obtained. 
  19474.  
  19475.  
  19476. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19477.  
  19478. On output, the data list item is truncated or extended (with the padding 
  19479. graphic) on the right to the specified field-width before being placed into the 
  19480. data stream. No enclosing graphic quotation marks are inserted, nor is the 
  19481. identifying graphic G inserted. If the field-width is zero, no graphics are 
  19482. placed into the data stream. If the field-width is not specified, it defaults 
  19483. to be equal to the graphic-string length of the data list item. 
  19484.  
  19485. If the output file has the GRAPHIC option of the ENVIRONMENT attribute, the 
  19486. specified number of graphics is enclosed in shift codes. 
  19487.  
  19488.  
  19489. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19490.  
  19491. character-position 
  19492.   specifies an expression which is evaluated and converted to an integer value, 
  19493.   which must be nonnegative, each time the format item is used. 
  19494.  
  19495.  
  19496. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19497.  
  19498. line-number 
  19499.   can be represented by an expression, which is evaluated and converted to an 
  19500.   integer value, which must be nonnegative, each time the format item is used. 
  19501.  
  19502.  
  19503. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19504.  
  19505. relative-line 
  19506.   specifies an expression, which is evaluated and converted to an integer 
  19507.   value, "n", which must be nonnegative and less than 32,768, each time the 
  19508.   format item is used. It must be greater than zero for non-PRINT files. If it 
  19509.   is zero, or if it is omitted, the default is 1. 
  19510.  
  19511.  
  19512. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19513.  
  19514. field-width 
  19515.   is an expression that is evaluated and converted to an integer value, which 
  19516.   must be nonnegative, each time the format item is used. The integer value 
  19517.   specifies the number of characters before the next field of the data stream, 
  19518.   relative to the current position in the stream. 
  19519.  
  19520.  
  19521. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19522.  
  19523. label-reference 
  19524.   has as its value the name written as the label prefix of a FORMAT statement. 
  19525.  
  19526.  
  19527. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19528.  
  19529. Consider the following statement that uses edit-directed GET: 
  19530.  
  19531. GET EDIT (NAME, DATA, SALARY)(A(N), X(2), A(6), F(6,2));
  19532.  
  19533. This example specifies that the first N characters in the stream are treated as 
  19534. a character string and assigned to NAME. The next 2 characters are skipped. The 
  19535. next 6 are assigned to DATA in character format. The next 6 characters are 
  19536. considered an optionally signed decimal fixed-point constant and assigned to 
  19537. SALARY. 
  19538.  
  19539.  
  19540. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19541.  
  19542. Consider the following: 
  19543.  
  19544. PUT EDIT('INVENTORY='ΓòæINUM,INVCODE)(A,F(5));
  19545.  
  19546. This example specifies that the character string 'INVENTORY=' is concatenated 
  19547. with the value of INUM and placed in the stream in a field whose width is the 
  19548. length of the resultant string. Then the value of INVCODE is converted to 
  19549. character, as described by the F-format item, and placed in the stream 
  19550. right-adjusted in a field with a width of 5 characters (leading characters can 
  19551. be blanks). 
  19552.  
  19553.  
  19554. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19555.  
  19556. label 
  19557.   has as its value the name written as the label prefix of a statement. 
  19558.  
  19559.  
  19560. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19561.  
  19562. In the example: 
  19563.  
  19564. DECLARE TOTAL FIXED(4,2);
  19565. PUT EDIT (TOTAL) (F(6,2));
  19566.  
  19567. The PUT statement specifies that the value of TOTAL is converted to the 
  19568. character representation of a fixed-point number and written into the output 
  19569. file SYSPRINT. A decimal point is inserted before the last two numeric 
  19570. characters, and the number is right-adjusted in a field of six characters. 
  19571. Leading zeros are changed to blanks (except for a zero immediately to the left 
  19572. of the point), and, if necessary, a minus sign is placed to the left of the 
  19573. first numeric character. 
  19574.  
  19575.  
  19576. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19577.  
  19578. If the items are separated by a comma, the first character scanned when the 
  19579. next GET statement is executed is the one immediately following the comma: 
  19580.  
  19581. Xbb,bbbXX
  19582.     
  19583.  
  19584. If the record terminates with a comma, the succeeding record is not read in 
  19585. until the next GET statement requires it. 
  19586.  
  19587.  
  19588. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19589.  
  19590. DBCS note:  Double quotation marks (a pair of SBCS or a pair of DBCS) are 
  19591. treated as single quotation marks only if the enclosing quotation marks are 
  19592. from the same character set. Single quotation marks are treated as single when 
  19593. the enclosing quotes are not from the same character set. 
  19594.  
  19595.  
  19596. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19597.  
  19598. If the items are separated by blanks only, the first item scanned is the next 
  19599. nonblank character: 
  19600.  
  19601. XbbbbXXX
  19602.      
  19603.  
  19604. unless the end of the record is encountered, in which case the file is 
  19605. positioned at the end of the record: 
  19606.  
  19607. Xbb-bbXXX
  19608.    
  19609.  
  19610. However, if the end of the record immediately follows a nonblank character 
  19611. (other than a comma), and the following record begins with blanks, the file is 
  19612. positioned at the first nonblank character in the following record: 
  19613.  
  19614. X-bbbXXX
  19615.      
  19616.  
  19617.  
  19618. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19619.  
  19620. Character strings are written out as follows: 
  19621.  
  19622.  If the file does not have the attribute PRINT, enclosing quotation marks are 
  19623.   supplied, and contained single quotation marks or apostrophes are replaced by 
  19624.   two quotation marks. The field width is the current length of the string plus 
  19625.   the number of added quotation marks. 
  19626.  
  19627.  If the file has the attribute PRINT, enclosing quotation marks are not 
  19628.   supplied, and contained single quotation marks or apostrophes are unmodified. 
  19629.   The field width is the current length of the string. 
  19630.  
  19631.  
  19632. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19633.  
  19634. Mixed strings are enclosed in SBCS quotation marks and followed by the letter 
  19635. M.  Contained SBCS quotes are replaced by two quotes. 
  19636.  
  19637.  
  19638. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19639.  
  19640. Graphic strings are written out as follows: 
  19641.  
  19642.  If the file does not have the attribute PRINT, enclosing shift codes, SBCS 
  19643.   quotation marks, and the letter G are supplied.  Since the enclosing 
  19644.   quotation marks are SBCS, contained graphic quotation marks are represented 
  19645.   by a single graphic quotation mark (unmodified). 
  19646.  
  19647.  If the file has the attribute PRINT, only enclosing shift codes are supplied. 
  19648.   Graphic quotation marks are represented by a single graphic quotation mark 
  19649.   (unmodified). 
  19650.  
  19651.  
  19652. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19653.  
  19654. It is an error to: 
  19655.  
  19656.  Associate an active event variable with another event 
  19657.  
  19658.  Modify the completion value of an active event variable by event variable 
  19659.   assignment or by use of the COMPLETION pseudovariable 
  19660.  
  19661.  Assign a value to an active event variable (including an event variable in an 
  19662.   array, structure, or area) by means of an input/output statement. 
  19663.  
  19664.  
  19665. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19666.  
  19667. The values of the event variable can be set by one of the following means: 
  19668.  
  19669.  By using the COMPLETION pseudovariable to set the completion value 
  19670.  
  19671.  By using the STATUS pseudovariable to set the status value 
  19672.  
  19673.  By an event variable assignment 
  19674.  
  19675.  By a statement with the EVENT option 
  19676.  
  19677.  By a WAIT statement for an event variable associated with an input/output 
  19678.   event or a DISPLAY statement 
  19679.  
  19680.  By closing a file on which an input/output operation with an event option is 
  19681.   in progress 
  19682.  
  19683.  
  19684. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19685.  
  19686. An imaginary value is written as a real constant of any type followed by the 
  19687. letter "I". Examples are: 
  19688.  
  19689. 27I
  19690. 3.968E10I
  19691. 11011.01BI
  19692.  
  19693. Each of the above has a real part of zero. A complex value with a non-zero real 
  19694. part is represented as the signed sum/difference of a real constant and an 
  19695. imaginary constant. For example: 
  19696.  
  19697. 38 + 27I
  19698.  
  19699. Given two complex numbers, y and z: 
  19700.  
  19701. y = COMPLEX(a,b)
  19702. z = COMPLEX(c,d)
  19703.  
  19704. x = y/z is calculated by: 
  19705.  
  19706. REAL(x) = (a*c + b*d)/(c**2 + d**2)
  19707. IMAG(x) = (b*c - a*d)/(c**2 + d**2)
  19708.  
  19709. x = y*z is calculated by: 
  19710.  
  19711. REAL(x) = a*c - b*d
  19712. IMAG(x) = b*c + a*d
  19713.  
  19714. Computational conditions can be raised during these conditions. 
  19715.  
  19716.  
  19717. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19718.  
  19719. number-of-digits 
  19720.   is an integer that specifies how many digits the value can have.  For 
  19721.   fixed-point items, the integer is the number of significant digits.  For 
  19722.   floating-point items, the integer is the number of significant digits to be 
  19723.   maintained, excluding the exponent. 
  19724.  
  19725.  
  19726. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19727.  
  19728. scaling-factor 
  19729.   (fixed-point only) specifies an optionally-signed integer.  If no scaling 
  19730.   factor is specified, the default is 0. 
  19731.  
  19732.   The precision attribute specification is often represented as (p,q), where 
  19733.   "p" represents the "number-of-digits" and "q" represents the 
  19734.   "scaling-factor". 
  19735.  
  19736.   A negative scaling factor (-q) specifies an integer, with the point assumed 
  19737.   to be located q places to the right of the rightmost actual digit. A positive 
  19738.   scaling factor (q) that is larger than the number of digits specifies a 
  19739.   fraction, with the point assumed to be located q places to the left of the 
  19740.   rightmost actual digit.  In either case, intervening zeroes are assumed, but 
  19741.   they are not stored; only the specified number of digits is actually stored. 
  19742.  
  19743.  
  19744. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19745.  
  19746. Binary fixed-point data items have precision (p,q) where p is the total number 
  19747. of digits, and q is the number of binary digits to the right of the binary 
  19748. point. Examples are: 
  19749.  
  19750. CONSTANT      PRECISION
  19751. 10110B        (5,0)
  19752. 11111B        (5,0)
  19753. 101B          (3,0)
  19754. 1011.111B     (7,3)
  19755.  
  19756. Use the BINARY and FIXED attributes in declaring binary fixed-point variables. 
  19757. To declare a binary fixed-point variable X of 20 digits, 2 of which are 
  19758. fractional, you could use the declaration: 
  19759.  
  19760. DECLARE X FACTOR BINARY FIXED (20,2);
  19761.  
  19762. FACTOR is declared a variable that can represent binary fixed-point data items 
  19763. of 20 digits, two of which are fractional. 
  19764.  
  19765.  
  19766. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19767.  
  19768. Binary floating-point data items have precision (p) where p is the number of 
  19769. binary digits of the mantissa. Examples are: 
  19770.  
  19771. CONSTANT      PRECISION
  19772. 101101E5B     (6)
  19773. 101.101E2B    (6)
  19774. 11101E-28B    (5)
  19775. 11.01E+42B    (4)
  19776.  
  19777. Use the BINARY and FLOAT attributes in declaring binary floating-point data 
  19778. items. To declare a floating-point binary variable X with a precision of 16 
  19779. binary digits, you might use the declaration: 
  19780.  
  19781. DECLARE X BINARY FLOAT (16);
  19782.  
  19783. S represents binary floating-point data items with a precision of 16 binary 
  19784. digits. 
  19785.  
  19786.  
  19787. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19788.  
  19789. Decimal fixed-point data items have the precision (p,q) where p is the total 
  19790. number of digits in the value and q is the number of digits specified to the 
  19791. right of the decimal point.  Examples are: 
  19792.  
  19793. CONSTANT     PRECISION
  19794. 3.1416       (5,4)
  19795. 455.3        (4,1)
  19796. 732          (3,0)
  19797. 003          (3,0)
  19798. 5280         (4,0)
  19799. .0012        (4,4)
  19800.  
  19801. Use the DECIMAL and FIXED data attributes for declaring decimal fixed-point 
  19802. variables. For example: 
  19803.  
  19804. DECLARE X FIXED DECIMAL (5,4);
  19805.  
  19806. specifies that X represents a decimal fixed-point item of 5 digits, in the 
  19807. range from -9.9999 to 9.9999. 
  19808.  
  19809.  
  19810. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19811.  
  19812. Decimal floating-point constants have a precision (p) where p is the number of 
  19813. digits in the mantissa. Examples are: 
  19814.  
  19815. CONSTANT      PRECISION
  19816. 15E-23        (2)
  19817. 15E23         (2)
  19818. 4E-3          (1)
  19819. 1.96E+07      (3)
  19820. 438E0         (3)
  19821. 3141593E-6    (7)
  19822. .003141593E3  (9)
  19823.  
  19824. Use the DECIMAL and FLOAT attributes to declare decimal floating-point data. 
  19825. For example, to declare X a floating-point decimal with at least 5 decimal 
  19826. digits, you could use the declaration: 
  19827.  
  19828. DECLARE X DECIMAL FLOAT (5);
  19829.  
  19830.  
  19831. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19832.  
  19833. A picture repetition factor specifies the number of repetitions of the picture 
  19834. character immediately following the repetition factor. 
  19835.  
  19836. A picture repetition factor is an integer, n, enclosed in parentheses. No 
  19837. blanks are allowed in the parentheses. If n is 0, the picture character is 
  19838. ignored.  For example, the following two picture specifications have the same 
  19839. result: 
  19840.  
  19841. '999V99'
  19842. '(3)9V(2)9'
  19843.  
  19844.  
  19845. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19846.  
  19847. Examples of picture characters are the following: 
  19848.  
  19849. DECLARE PART# PICTURE 'AAA99X';
  19850. PUT EDIT (PART#) (P'AAA99X');
  19851.  
  19852. The following values are valid for PART#: 
  19853.  
  19854. 'ABC12M'
  19855. 'bbb09/'
  19856. 'XYZb13'
  19857.  
  19858.  
  19859. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19860.  
  19861. The point, comma or slash can be used in conjunction with the V to cause 
  19862. insertion of the point (or comma or slash) in the position that delimits the 
  19863. end of the integer portion in and the beginning of the fractional portion of a 
  19864. fixed-point or floating-point number, as might be desired in printing, since 
  19865. the V does not cause printing of a point. 
  19866.  
  19867. The point must immediately precede or immediately follow the V. If the point 
  19868. precedes the V, it is inserted only if an unsuppressed digit appears to the 
  19869. left of the V, even if all fractional digits are significant. 
  19870.  
  19871. If the point immediately follows the V, it is suppressed if all digits to the 
  19872. right of the V are suppressed, but it appears if there are any unsuppressed 
  19873. fractional digits (along with any intervening zeros). 
  19874.  
  19875.  
  19876. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19877.  
  19878. The static use specifies that a sign, currency symbol, or blank appears in the 
  19879. associated position. An "S", "+" or "-" used as a static character can appear: 
  19880.  
  19881.  to the right or left of all digits in the mantissa and exponent fields of a 
  19882.   floating-point specification. 
  19883.  
  19884.  to the right or left of all digit positions of a fixed-point specification. 
  19885.  
  19886.  
  19887. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19888.  
  19889. The character pairs "CR" (credit) and "DB" (debit) specify the signs of real 
  19890. numeric character data items. 
  19891.  
  19892. CR 
  19893.   specifies that the associated positions will contain the letters '"CR"' if 
  19894.   the value of the data is <0. Otherwise, the positions will contain two 
  19895.   blanks. The characters CR can only appear to the right of all digit positions 
  19896.   of a field. 
  19897.  
  19898. DB 
  19899.   is used in the same way that CR is used (above) except that the letters "DB" 
  19900.   appear in the associated positions. 
  19901.  
  19902.  
  19903. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19904.  
  19905.    specifies the picture scaling factor.  The picture scaling factor specifies 
  19906.    that the decimal point in the arithmetic value of the variable is that 
  19907.    number of places (F) to the right (if F>0) or to the left (if F<0) of its 
  19908.    assumed position in the character value. 
  19909.  
  19910.    The number of digits following the V picture character minus the integer 
  19911.    specified with F must be between -128 and 127. 
  19912.  
  19913.  
  19914. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19915.  
  19916. expression 
  19917.   When the based structure is allocated, the expression is evaluated and 
  19918.   converted to FIXED BINARY (31,0). Any variables used as operands in the 
  19919.   expression must not belong to the structure containing the REFER option. 
  19920.  
  19921.  
  19922. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19923.  
  19924. variable 
  19925.   The variable, known as the object of the REFER option, must be a member of 
  19926.   the declared structure. 
  19927.  
  19928.   The REFER object must conform to the following rules: 
  19929.  
  19930.     It must be REAL FIXED BINARY(P,0). 
  19931.  
  19932.     It must precede the first level-2 element that has the REFER option or 
  19933.      contains an element that has the REFE7R option. 
  19934.  
  19935.     It must not be locator-qualified or subscripted. 
  19936.  
  19937.     It must not be part of any array. 
  19938.  
  19939.  
  19940. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19941.  
  19942. character 
  19943.    can be any digit, letter, special character, blank, or any other of the 256 
  19944.    bit combinations in a byte. 
  19945.  
  19946.  
  19947. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19948.  
  19949. hex-digit hex-digit 
  19950.   represents a pair of hexadecimal numbers. Each hex-digit may be 0, 1, 2, 3, 
  19951.   4, 5, 6, 7, 8, 9, A, B, C, D, E, or F. 
  19952.  
  19953.  
  19954. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19955.  
  19956. Specify hex-digit group using: 
  19957.  
  19958. hex-digit hex-digit hex-digit hex-digit
  19959.  
  19960. where each hex-digit is 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, or F. 
  19961.  
  19962.  
  19963. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19964.  
  19965. The preferred form for mixed character string is: 
  19966.  
  19967. 'cc<kkkk>'M
  19968.  
  19969. Other allowable forms are: 
  19970.  
  19971. <'.kkkk>cc<.'.M>
  19972. <'.>cc<kkkk.'.M>
  19973. where:
  19974.       cc = CHARACTER data
  19975.       kk = DBCS character
  19976.  
  19977. Other examples include: 
  19978.  
  19979. 'IBM'M            is the same as  'IBM'
  19980. '<.I.B.M>'M       is stored as    <.I.B.M>
  19981. <'.kkkk.'>.M  is stored as    <kkkk>(6 bytes)
  19982. ''M               is the same as  ''
  19983.  
  19984.  
  19985. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19986.  
  19987.   An asterisk can be used to specify the size if the area variable declared is 
  19988.   controlled or is a parameter. If a controlled area variable is declared with 
  19989.   an asterisk, the size must be specified in the ALLOCATE statement used to 
  19990.   allocate the area.  If a parameter is declared with an asterisk, the size is 
  19991.   inherited from the argument. 
  19992.  
  19993.  
  19994. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  19995.  
  19996. expression 
  19997.   specifies the size of the area. If expression, or asterisk (*), is not 
  19998.   specified, the default is 1000. 
  19999.  
  20000.  
  20001. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20002.  
  20003. A label constant is a name written as the label prefix of a statement (other 
  20004. than PROCEDURE or ENTRY) so that, during execution, program control can be 
  20005. transferred to that statement through a reference to its label prefix. 
  20006.  
  20007.  
  20008. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20009.  
  20010. A data item may be a constant or a variable. 
  20011.  
  20012. A constant has a value that cannot change. A constant may be referred to by 
  20013. stating its value (for example, arithmetic constants) or by its name (for 
  20014. example, of label constants). 
  20015.  
  20016. A variable has a value or values that can change during the execution of a 
  20017. program. A variable is introduced by a declaration. 
  20018.  
  20019.  
  20020. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20021.  
  20022. SYSTEM 
  20023.   Specifies that the language-specified default attributes are to be applied to 
  20024.   the name rather than taken from DEFAULT statements. 
  20025.  
  20026.   SYSTEM can appear before, after, or between other attributes, but cannot 
  20027.   immediately precede the dimension or precision attributes. 
  20028.  
  20029.  
  20030. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20031.  
  20032. level 
  20033.   A nonzero integer. If a level number is not specified, level 1 is the default 
  20034.   for element and array variables. 
  20035.  
  20036.   Level 1 must be specified for major structure names. 
  20037.  
  20038.  
  20039. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20040.  
  20041. name 
  20042.   Each level 1 name must be unique within a particular block. 
  20043.  
  20044.  
  20045. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20046.  
  20047. The number of bounds specifications indicates the number of dimensions in the 
  20048. array, unless the declared variable is in an array of structures. In this case 
  20049. it inherits dimensions from the containing structure. 
  20050.  
  20051. The bounds specification indicates the bounds as follows: 
  20052.  
  20053.  If only the upper bound is given, the lower bound defaults to 1. 
  20054.  
  20055.  The lower bound must be less than or equal to the upper bound. 
  20056.  
  20057.  An asterisk (*) specifies that the actual bounds are specified in an ALLOCATE 
  20058.   statement, if the variable is CONTROLLED, or in a declaration of an 
  20059.   associated argument, if the variable is a simple parameter. 
  20060.  
  20061. Additional rules for specifying array bounds are: 
  20062.  
  20063.  The bounds of arrays declared STATIC must be optionally-signed integers. The 
  20064.   bounds of arrays declared BASED must be optionally-signed integers unless the 
  20065.   array is part of a based structure and the REFER option is used. 
  20066.  
  20067.  The dimension attribute must follow, with no intervening attribute 
  20068.   specifications, the array name (or the parenthesized list of names, if it is 
  20069.   being factored). 
  20070.  
  20071.  
  20072. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20073.  
  20074. You can use structure mapping for determining the record length required for a 
  20075. structure when record-oriented input/output is used, and determining the amount 
  20076. of padding or rearrangement required for correct alignment of a structure for 
  20077. locate-mode input/output. 
  20078.  
  20079.  
  20080. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20081.  
  20082. Description 
  20083.   It is necessary to understand the difference between the logical level and 
  20084.   the level number of structure elements. 
  20085.  
  20086.   The logical levels are immediately apparent if the structure declaration is 
  20087.   written with consistent level numbers or suitable indentation (as in the 
  20088.   detailed example given after the rules). 
  20089.  
  20090.   In any case, you can determine the logical level of each item in the 
  20091.   structure by applying the following rule to each item in turn, starting at 
  20092.   the beginning of the structure declaration: 
  20093.  
  20094.   Note:   The logical level of a given item is always one unit deeper than that 
  20095.   of its immediate containing structure. 
  20096.  
  20097. Example 
  20098.   The following declaration illustrates logical level assignment: 
  20099.  
  20100.     DCL 1 A, 4 B, 5 C, 5 D, 3 E, 8 F, 7 G;
  20101.         1    2    3    3    2    3    3
  20102.  
  20103.  
  20104. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20105.  
  20106.  INTERNAL is the default for entry names of internal procedures and for 
  20107.   automatic, static, and based variables. 
  20108.  
  20109.  EXTERNAL is the default for controlled variables, file constants, entry 
  20110.   constants, and programmer-defined conditions. 
  20111.  
  20112.  
  20113. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20114.  
  20115. environment-name 
  20116.   specifies the name by which an assembler entry is known outside of the 
  20117.   compilation unit. 
  20118.  
  20119.   When so specified, the name being declared effectively becomes internal and 
  20120.   is not known outside of the compilation unit.  The environment name is known 
  20121.   instead. 
  20122.  
  20123.   You can only specify the environment name for OPTIONS(ASSEMBLER) entry 
  20124.   constants.  You cannot specify the environment name in the DEFAULT statement. 
  20125.   PL/I does not monocase the name that you specify.  The name must: 
  20126.  
  20127.     Be up to 8 characters in length. 
  20128.  
  20129.     Be a character constant that does not contain a repetition factor, hex 
  20130.      character constants, or mixed character constants. 
  20131.  
  20132.     Differ from names internally generated by the compiler.  Using 7-character 
  20133.      names or shorter names ensures this. 
  20134.  
  20135.  
  20136. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20137.  
  20138. A set of attributes can be completed by language-specified defaults. For 
  20139. example, consider the declaration: 
  20140.  
  20141. DCL A BINARY(5,2)    /* scale specified    */
  20142.  
  20143. In this declaration, A gets the attributes REAL FIXED BINARY(5,2). Whereas, in 
  20144. the following declaration: 
  20145.  
  20146. DCL B BINARY(5)      /* no scale specified */
  20147.  
  20148. B gets the attributes REAL FLOAT BINARY(5). 
  20149.  
  20150.  
  20151. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20152.  
  20153. The following statement: 
  20154.  
  20155. DEFAULT RANGE(*), DESCRIPTORS;
  20156.  
  20157. overrides, for all names, any programmer-defined default rules established in a 
  20158. containing block. It can be used to restore language-specified defaults for 
  20159. contained blocks. 
  20160.  
  20161.  
  20162. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20163.  
  20164. RANGE(letter) 
  20165.   specifies that the defaults apply to names that begin with the name(s) 
  20166.   specified.  Letter can be any letter in the English alphabet. For example: 
  20167.  
  20168.     RANGE (ABC)
  20169.  
  20170.   applies to the following names: 
  20171.  
  20172.     ABC
  20173.     ABCD
  20174.     ABCDE
  20175.  
  20176.   But not to: 
  20177.  
  20178.     ABD
  20179.     ACB
  20180.     AB
  20181.     A
  20182.  
  20183.   Hence, a single letter in the range-specification applies to all names that 
  20184.   start with that letter. The RANGE can also be a non-EBCDIC DBCS character. 
  20185.  
  20186.  
  20187. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20188.  
  20189. RANGE(*) 
  20190.   specifies all names in the scope of the DEFAULT statement. For example: 
  20191.  
  20192.     DFT RANGE (*) PIC '99999';
  20193.  
  20194.   This statement specifies default attributes REAL PICTURE '99999' for all 
  20195.   names. 
  20196.  
  20197.  
  20198. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20199.  
  20200. attribute-list 
  20201.   specifies a list of attributes from which selected attributes are applied to 
  20202.   names in the specified range. Attributes in the list can appear in any order 
  20203.   and must be separated by blanks. 
  20204.  
  20205.   Only those attributes that are necessary to complete the declaration of a 
  20206.   data item are taken from the list of attributes. 
  20207.  
  20208.   The file description attributes, and the attributes ENTRY, RETURNS, LIKE, and 
  20209.   VARIABLE cannot be used in an attribute-list.  If FILE is used, it implies 
  20210.   the attributes VARIABLE and INTERNAL. 
  20211.  
  20212.   Although the DEFAULT statement can specify the dimension attribute for names 
  20213.   that have not been declared explicitly, a subscripted name is contextually 
  20214.   declared with the BUILTIN attribute.  Therefore, the dimension attribute can 
  20215.   be applied by default only to explicitly declared names. 
  20216.  
  20217.   Attributes that conflict, when applied to a data item, do not necessarily 
  20218.   conflict when they appear in an attribute specification. For example: 
  20219.  
  20220.     DEFAULT RANGE(S) BINARY VARYING;
  20221.  
  20222.   This means that any name that begins with the letter "S" and is declared 
  20223.   explicitly with the BIT, CHARACTER, or GRAPHIC attribute will receive the 
  20224.   VARYING attribute; all others that are not declared explicitly or 
  20225.   contextually as other than arithmetic data will receive the BINARY attribute. 
  20226.  
  20227.  
  20228. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20229.  
  20230. RANGE(letter:letter) 
  20231.   specifies that the defaults apply to names with initial letters that either 
  20232.   correspond to the two letters specified, or to any letters between the two in 
  20233.   alphabetic sequence.  The letters cannot be DBCS.  The letters given in the 
  20234.   specification must be in increasing alphabetic order. For example: 
  20235.  
  20236.     RANGE(A:G,I:M,T:Z)
  20237.  
  20238.  
  20239. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20240.  
  20241. DESCRIPTORS 
  20242.   specifies that the attributes are included in any parameter descriptors in a 
  20243.   parameter descriptor list of an explicit entry declaration, provided that: 
  20244.  
  20245.     The inclusion of any such attributes is not prohibited by the presence of 
  20246.      alternative attributes of the same class. 
  20247.  
  20248.     At least one attribute is already present.  (The DESCRIPTORS default 
  20249.      attributes are not applied to null descriptors.) 
  20250.  
  20251.   For example: 
  20252.  
  20253.     DEFAULT DESCRIPTORS BINARY;
  20254.     DCL X ENTRY (FIXED, FLOAT);
  20255.  
  20256.   The attribute BINARY is added to each parameter descriptor in the list, 
  20257.   producing the equivalent list: 
  20258.  
  20259.     (FIXED BINARY, FLOAT BINARY)
  20260.  
  20261.  
  20262. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20263.  
  20264. VALUE 
  20265.   can appear anywhere within an attribute-specification except before a 
  20266.   dimension attribute. 
  20267.  
  20268.   VALUE establishes any default rules for area size, string length, and 
  20269.   precision. 
  20270.  
  20271.   The size of AREA data, or length of BIT, CHARACTER, or GRAPHIC data, can be 
  20272.   an expression or an integer and can include the REFER option, or can be 
  20273.   specified as an asterisk.  For example: 
  20274.  
  20275.     DEFAULT RANGE(A:C)
  20276.             VALUE (FIXED DEC(10),
  20277.                   FLOAT DEC(14)
  20278.                   AREA(2000));
  20279.     DECLARE B FIXED DECIMAL,
  20280.             C FLOAT DECIMAL,
  20281.             A AREA;
  20282.  
  20283.   These statements are equivalent to: 
  20284.  
  20285.     DECLARE B FIXED DECIMAL(10),
  20286.             C FLOAT DECIMAL(14),
  20287.             A AREA(2000);
  20288.  
  20289.   The only attributes that the VALUE option can influence are area size, string 
  20290.   length, and precision.  Other attributes in the option, such as CHARACTER and 
  20291.   FIXED BINARY in the above examples, merely indicate which attributes the 
  20292.   value is to be associated with. 
  20293.  
  20294.  
  20295. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20296.  
  20297. value-specification 
  20298.   The base and scale attributes in value-specification must be present to 
  20299.   identify a precision specification with a particular attribute.  The base and 
  20300.   scale attributes can be factored. 
  20301.  
  20302.  
  20303. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20304.  
  20305. factored-specification 
  20306.   An example of factored-specification with the range options is: 
  20307.  
  20308.     DEFAULT (RANGE(A)FIXED, RANGE(B)
  20309.             FLOAT)BINARY;
  20310.  
  20311.   This statement specifies default attributes FIXED BINARY for names with the 
  20312.   initial letter "A", and FLOAT BINARY for those with the initial letter "B". 
  20313.  
  20314.  
  20315. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20316.  
  20317. Following is a list of attributes and their restrictions: 
  20318.  
  20319. AREA 
  20320.   without a size specification 
  20321.  
  20322. BIT, CHARACTER, or GRAPHIC 
  20323.   without a string length specification 
  20324.  
  20325. LABEL 
  20326.   without a label list 
  20327.  
  20328.   Arithmetic base, mode, and scale attributes without precision specifications 
  20329.  
  20330. CONTROLLED 
  20331.   For a parameter name, a specification of CONTROLLED as a default attribute is 
  20332.   ignored.  The CONTROLLED attribute is also ignored if it appears in a 
  20333.   DESCRIPTORS attribute specification. 
  20334.  
  20335. dimension 
  20336.   The dimension attribute is allowed, but only as the first item in an 
  20337.   attribute specification.  The bounds can be specified as an arithmetic 
  20338.   constant or an expression and can include the REFER option. 
  20339.  
  20340.  
  20341. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20342.  
  20343. A function reference is an entry reference that represents an entry name (a 
  20344. particular entry point of a procedure) invoked as a function. A function 
  20345. returns a value, and control, to replace the function reference in the 
  20346. evaluation of the expression in which the function reference appears. 
  20347.  
  20348.  
  20349. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20350.  
  20351. An infix operator is an operator between two operands. 
  20352.  
  20353.  
  20354. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20355.  
  20356. A prefix operator is an operator preceding a single operand. 
  20357.  
  20358.  
  20359. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20360.  
  20361. Description 
  20362.   You may assign the results of the evaluation of an expression to a variable. 
  20363.  
  20364. Example 
  20365.   In the following expression: 
  20366.  
  20367.     A = B;
  20368.  
  20369.   the target A is the variable on the left of the assignment symbol (=). 
  20370.  
  20371.  
  20372. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20373.  
  20374. There are few restrictions on the use of different types of data in an 
  20375. expression. However, mixing data types implies that a conversion must take 
  20376. place. If conversions take place at run time, the program takes longer to run. 
  20377. Also, conversion can result in loss of precision. When using expressions that 
  20378. mix data types, you should understand the relevant conversion rules. 
  20379.  
  20380.  
  20381. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20382.  
  20383. In a bit operation, use one of the following as a logical operator: 
  20384.  
  20385.  Logical NOT/XOR   ╨║ 
  20386.  Logical AND     & 
  20387.  Logical OR     Γöé 
  20388.  
  20389. The first operator, the NOT/XOR symbol, can be used as a prefix operator (an 
  20390. operator preceding a single operand) or as an infix operator (an operator 
  20391. between two operands). The logical AND and OR operators can be used as infix 
  20392. operators only. 
  20393.  
  20394. The operators have the same function as in Boolean algebra. 
  20395.  
  20396.  
  20397. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20398.  
  20399. A comparison operation is specified by using one of the following as an infix 
  20400. operator (an operator between two operands): 
  20401.  
  20402.  Less than         < 
  20403.  Not less than       ╨║< 
  20404.  Less than or equal to   <= 
  20405.  Equal to          = 
  20406.  Not equal to        ╨║= 
  20407.  Greater than or equal to  >= 
  20408.  Greater than        > 
  20409.  Not greater than      ╨║> 
  20410.  
  20411.  
  20412. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20413.  
  20414. Algebraic comparison operations involve the comparison of signed arithmetic 
  20415. values. If operands differ in base, scale, precision, or mode, they are 
  20416. converted. Numeric character data is converted to arithmetic data before 
  20417. comparison. 
  20418.  
  20419. Only the operators = and ╨║= are valid for comparison of complex operands. 
  20420.  
  20421.  
  20422. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20423.  
  20424. Character comparison operations involve left-to-right, character-by-character 
  20425. comparison according to the binary value of the bytes. 
  20426.  
  20427. If you compare strings of unequal lengths, the shorter string is padded on the 
  20428. right. The padding consists of blanks. 
  20429.  
  20430.  
  20431. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20432.  
  20433. Bit comparison involves left-to-right, bit-by-bit comparison of binary digits. 
  20434.  
  20435. If you compare bit strings of unequal lengths, the shorter string is padded on 
  20436. the right. The padding consists of '0'B. 
  20437.  
  20438.  
  20439. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20440.  
  20441. Graphic comparison involves left-to-right, symbol-by-symbol comparison of DBCS 
  20442. (Double-Byte-Character Set) characters. The comparison is based on the binary 
  20443. value of the DBCS characters. 
  20444.  
  20445. If you compare strings of unequal lengths, the shorter string will be padded on 
  20446. the right with the padding graphic. 
  20447.  
  20448.  
  20449. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20450.  
  20451. You may include prefix operators in your array expressions. For example: 
  20452.  
  20453. If A is the array    5    3   -9
  20454.                      1    2    7
  20455.                      6    3   -4
  20456. then the expression  -A
  20457. is the array        -5    3    9
  20458.                     -1   -2   -7
  20459.                     -6   -3    4
  20460.  
  20461.  
  20462. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20463.  
  20464. condition/NO-condition 
  20465.           You can select any condition that is not always disabled. You can add 
  20466.           NO to the condition name so that it is disabled. 
  20467.  
  20468.  
  20469. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20470.  
  20471. statement 
  20472.           Any statement except DECLARE, DEFAULT, or % statements is valid. 
  20473.  
  20474.           Condition prefixes attached to a compound statement do not apply to 
  20475.           the statement or statements contained in the statement body of the 
  20476.           compound statement. 
  20477.  
  20478.  
  20479. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20480.  
  20481. The effect of a null statement ON-unit is to execute normal return from the 
  20482. condition. 
  20483.  
  20484. Use of the null ON-unit is different from disabling a condition, for two 
  20485. reasons: 
  20486.  
  20487.  A null ON-unit can be specified for any condition, but not all conditions can 
  20488.   be disabled. 
  20489.  
  20490.  Disabling a condition, if possible, can save time by avoiding any checking 
  20491.   for this condition. (If a null ON-unit is specified, the system must still 
  20492.   check for the raising of the condition.) 
  20493.  
  20494.  
  20495. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20496.  
  20497. It is possible to raise a condition during execution of an ON-unit and enter a 
  20498. further ON-unit. An ON-unit entered due to a condition either raised or 
  20499. signalled in another ON-unit is a dynamically-descendant ON-unit. A normal 
  20500. return from a dynamically-descendant ON-unit reestablishes the environment of 
  20501. the ON-unit in which the condition was raised. 
  20502.  
  20503. To prevent an ERROR condition raised in an ERROR ON-unit from executing the 
  20504. same ERROR ON-unit, thus raising the ERROR condition again and causing a loop, 
  20505. the following technique can be used: 
  20506.  
  20507. ON ERROR BEGIN;
  20508.    ON ERROR SYSTEM;
  20509.     .
  20510.     .
  20511.     .
  20512.    END;
  20513.  
  20514.  
  20515. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20516.  
  20517. An ON statement that specifies a file variable refers to the file constant that 
  20518. is the current value of the variable when the ON-unit is established. 
  20519.  
  20520.  Example 1 
  20521.  
  20522.     DCL  F FILE,
  20523.          G FILE VARIABLE;
  20524.          G = F;
  20525.     L1:  ON ENDFILE(G);
  20526.     L2:  ON ENDFILE(F);
  20527.  
  20528.   The statements labeled L1 and L2 are equivalent. 
  20529.  
  20530.  Example 2 
  20531.  
  20532.     DECLARE FV FILE VARIABLE,
  20533.             FC1 FILE,
  20534.             FC2 FILE;
  20535.     FV = FC1;
  20536.     ON ENDFILE(FV) GO TO FIN;
  20537.        .
  20538.        .
  20539.        .
  20540.     FV = FC2;
  20541.     READ FILE(FC1) INTO (X1);
  20542.     READ FILE(FV) INTO (X2);
  20543.  
  20544.   An ENDFILE condition raised during the first READ statement causes the 
  20545.   ON-unit to be entered, since the ON-unit refers to file FC1. If the condition 
  20546.   is raised in the second READ statement, however, the ON-unit is not entered, 
  20547.   since this READ refers to file FC2. 
  20548.  
  20549.  
  20550. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20551.  
  20552. SNAP 
  20553.    specifies that when the enabled condition is raised, a list is printed of 
  20554.    all the blocks and ON-units active at the time the condition is raised. The 
  20555.    action of the SNAP option precedes the action of the ON-unit. 
  20556.  
  20557.    If SNAP and SYSTEM are specified, the implicit action is followed 
  20558.    immediately by the list of active blocks. 
  20559.  
  20560.  
  20561. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20562.  
  20563. SYSTEM 
  20564.    specifies that the implicit action is taken. The implicit action is not the 
  20565.    same for every condition, although for most conditions a message is printed 
  20566.    and the ERROR condition is raised. 
  20567.  
  20568.  
  20569. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20570.  
  20571. dcl Test condition;
  20572. on condition (Test)
  20573.   begin;
  20574.   .
  20575.   .
  20576.   .
  20577.   end;
  20578.  
  20579. The begin block is executed whenever the following statement is executed: 
  20580.  
  20581. SIGNAL CONDITION (TEST);
  20582.  
  20583.  
  20584. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20585.  
  20586. For example, the CONVERSION condition is raised when: 
  20587.  
  20588.  A character other than 0 or 1 exists in character data being converted to bit 
  20589.   data. 
  20590.  
  20591.  A character value being converted to a numeric character field, or to coded 
  20592.   arithmetic, contains characters which are not the representation of an 
  20593.   optionally signed arithmetic constant, or an expression to represent a 
  20594.   complex constant. 
  20595.  
  20596.  A value being converted to a character pictured item contains characters not 
  20597.   allowed by the picture specification. 
  20598.  
  20599.  
  20600. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20601.  
  20602. controlled variable 
  20603.      a controlled variable or an element of a controlled major structure.  A 
  20604.      structure element, other than the major structure, can appear only if the 
  20605.      relative structuring of the entire major structure containing the element 
  20606.      appears as in the DECLARE statement for that structure.  In this case, 
  20607.      dimension attributes must be specified for all names that are declared 
  20608.      with the dimension attribute. 
  20609.  
  20610.  
  20611. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20612.  
  20613. level 
  20614.      indicates a level number.  The first name appearing after the keyword 
  20615.      ALLOCATE must be a level-1 variable. 
  20616.  
  20617.  
  20618. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20619.  
  20620. BIT, CHARACTER, GRAPHIC, and AREA 
  20621.      can appear only for variables having the same attributes, respectively. 
  20622.  
  20623.  
  20624. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20625.  
  20626. dimension 
  20627.      The dimension attribute must specify the same number of dimensions as 
  20628.      declared.  The dimension attribute can appear with any of the other 
  20629.      attributes and must be the first attribute specified.  For example: 
  20630.  
  20631.           DCL X(20) CHAR(5) CONTROLLED;
  20632.           ALLOCATE X(25) CHAR(6);
  20633.  
  20634.  
  20635. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20636.  
  20637. INITIAL, INITIAL CALL 
  20638.      Initial values are assigned to a variable upon allocation, if it has an 
  20639.      INITIAL attribute in either the ALLOCATE statement or DECLARE statement. 
  20640.      Expressions or a CALL option in the INITIAL attribute are executed at the 
  20641.      point of allocation, using the conditions enabled at the ALLOCATE 
  20642.      statement, although the names are interpreted in the environment of the 
  20643.      declaration.  If an INITIAL attribute appears in both DECLARE and ALLOCATE 
  20644.      statements, the INITIAL attribute in the ALLOCATE statement is used.  If 
  20645.      initialization involves reference to the variable being allocated, the 
  20646.      reference is to the new generation of the variable. 
  20647.  
  20648.  
  20649. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20650.  
  20651. controlled-variable 
  20652.      is a level-1, unsubscripted variable. 
  20653.  
  20654.  
  20655. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20656.  
  20657. A controlled variable need not be explicitly freed by a FREE statement. 
  20658. However, it is a good practice to explicitly FREE controlled variables. 
  20659.  
  20660. All controlled storage is freed at the termination of the program. 
  20661.  
  20662.  
  20663. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20664.  
  20665. based-variable 
  20666.      can be any data type.  It can be an element variable, an array, or a major 
  20667.      structure.  When it is a major structure, only the major structure name is 
  20668.      specified. 
  20669.  
  20670.  
  20671. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20672.  
  20673. IN 
  20674.      specifies the area variable in which the storage is allocated. 
  20675.  
  20676.  
  20677. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20678.  
  20679. SET 
  20680.      specifies a locator variable that is set to the location of the storage 
  20681.      allocated. If the SET option is not specified, the declaration of the 
  20682.      based variable must specify a locator variable. 
  20683.  
  20684.  
  20685. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20686.  
  20687. based-variable 
  20688.      must be a level-1 unsubscripted based variable. 
  20689.  
  20690.  
  20691. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20692.  
  20693. IN (area-reference) 
  20694.      must be specified or the based variable must be qualified by an offset 
  20695.      declared with an associated area, if the storage to be freed was allocated 
  20696.      in an area. The IN option cannot appear if the based variable was not 
  20697.      allocated in an area. Area assignment allocates based storage in the 
  20698.      target area. These allocations can be freed by the IN option naming the 
  20699.      target area. 
  20700.  
  20701.  
  20702. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20703.  
  20704. A based variable need not be explicitly freed by a FREE statement, but it is a 
  20705. good practice to do so. 
  20706.  
  20707. All based storage is freed at the termination of the program. 
  20708.  
  20709.  
  20710. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20711.  
  20712. expression 
  20713.      specifies the size of the area. If expression, or *, is not specified, the 
  20714.      default is 1000. 
  20715.  
  20716.  
  20717. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20718.  
  20719.      An asterisk can be used to specify the size if the area variable declared 
  20720.      is controlled or is a parameter. If a controlled area variable is declared 
  20721.      with an asterisk the size must be specified in the ALLOCATE statement used 
  20722.      to allocate the area.  If a parameter is declared with an asterisk, the 
  20723.      size is inherited from the argument. 
  20724.  
  20725.  
  20726. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20727.  
  20728. The area facility allows input and output of complete lists of based variables 
  20729. as one unit, to and from RECORD files. On output, the area extent, together 
  20730. with the 16 bytes of control information, is transmitted, except when the area 
  20731. is in a structure and is not the last item in it-then, the declared size is 
  20732. transmitted. Thus the unused part of an area does not take up space on the data 
  20733. set. 
  20734.  
  20735. Because the extents of areas can vary, the maximum record length required is 
  20736. governed by the area length (area size + control information size). 
  20737.  
  20738.  
  20739. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20740.  
  20741. The value of an offset variable can be set in any one of the following ways: 
  20742.  
  20743.  By an ALLOCATE statement 
  20744.  
  20745.  By assignment of the value of another locator variable, or a locator value 
  20746.   returned by a user-defined function 
  20747.  
  20748.  By assignment of the NULL built-in function value. 
  20749.  
  20750. Note:   If no area variable is specified, the offset can be used only as a 
  20751. locator qualifier through use of the POINTER built-in function. 
  20752.  
  20753.  
  20754. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20755.  
  20756. expression 
  20757.           The value of this expression defines the length, bound, or size of 
  20758.           the member when the structure is allocated (using ALLOCATE or 
  20759.           LOCATE). The expression is evaluated and converted to FIXED BINARY 
  20760.           (31,0). Any variables used as operands in the expression must not 
  20761.           belong to the structure containing the REFER option. 
  20762.  
  20763.           Subsequent references to the structure obtain this member's length, 
  20764.           bound, or size from the current value of "variable". 
  20765.  
  20766.  
  20767. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20768.  
  20769. variable 
  20770.           The variable, known as the "object" of the REFER option must be a 
  20771.           member of the declared structure. The REFER object must conform to 
  20772.           the following rules: 
  20773.  
  20774.     It must be REAL FIXED BINARY (p,0). 
  20775.  
  20776.     It must precede the first level-2 element that has the REFER option or 
  20777.      contains an element that has the REFER option. 
  20778.  
  20779.     It must not be locator-qualified or subscripted. 
  20780.  
  20781.     It must not be part of an array. 
  20782.  
  20783.  
  20784. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20785.  
  20786. reference 
  20787.         to the variable (the base variable) whose storage is associated with 
  20788.         the declared variable; the latter is the defined variable. The base 
  20789.         variable can be EXTERNAL or INTERNAL. It can be a parameter (in string 
  20790.         overlay defining, the parameter must refer to connected storage). It 
  20791.         cannot be BASED or DEFINED. A change to the base variable's value is a 
  20792.         corresponding change to the value of the defined variable, and vice 
  20793.         versa. 
  20794.  
  20795.  
  20796. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20797.  
  20798. expression 
  20799.         specifies the position relative to the start of the base variable. If 
  20800.         the POSITION attribute is omitted, POSITION(1) is the default. The 
  20801.         value specified in the expression can range from l to n, where n is 
  20802.         defined as: 
  20803.  
  20804.                 n = N(b) - N(d) + 1
  20805.  
  20806.         where N(b) is the number of bits, characters, or graphics in the base 
  20807.         variable, and N(d) is the number of bits, characters, or graphics in 
  20808.         the defined variable. 
  20809.  
  20810.         The expression is evaluated and converted to an integer value at each 
  20811.         reference to the defined item. 
  20812.  
  20813.  
  20814. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20815.  
  20816. iteration-factor 
  20817.      specifies the number of times the iteration-item is to be repeated in the 
  20818.      initialization of elements of an array. 
  20819.  
  20820.      The iteration-factor can be an expression, except for static data, in 
  20821.      which case it must be an integer. When storage is allocated for the array, 
  20822.      the expression is evaluated to give an integer that specifies the number 
  20823.      of iterations. 
  20824.  
  20825.      A negative or zero iteration-factor specifies no initialization. 
  20826.  
  20827.  
  20828. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20829.  
  20830. constant 
  20831.  
  20832. reference 
  20833.  
  20834. expression 
  20835.         specifies an initial value to be assigned to the initialized variable. 
  20836.  
  20837.  
  20838. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20839.  
  20840.         specifies that the element is to be left uninitialized. 
  20841.  
  20842.  
  20843. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20844.  
  20845. For automatic variables, which are allocated at each activation of the 
  20846. declaring block, any specified initial value is assigned with each allocation. 
  20847.  
  20848.  
  20849. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20850.  
  20851. In the following example: 
  20852.  
  20853. DCL (STG, STORAGE) BUILTIN;
  20854.  
  20855. is not a multiple declaration, and 
  20856.  
  20857. DCL BINARY FILE;
  20858. X = BIN(VAR, 6,3);
  20859.  
  20860. is valid. 
  20861.  
  20862.  
  20863. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20864.  
  20865. Specifying an aggregate argument is equivalent to placing the function 
  20866. reference or pseudovariable in a DO-group where one or more arguments is a 
  20867. subscripted array reference that is modified by the control variable. For 
  20868. example: 
  20869.  
  20870. DCL A(2)CHAR(2)VARYING;
  20871. DCL B(2)CHAR(2)
  20872.    INIT('AB','CD');
  20873. DCL C(2)FIXED BIN
  20874.    INIT(1,2);
  20875. A=SUBSTR(B,1,C);
  20876.  
  20877. results in A(1) having the value "A" and A(2) having the value "CD". 
  20878.  
  20879.  
  20880. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20881.  
  20882. command-list 
  20883.    specifies a list of commands to be processed. 
  20884.  
  20885.  
  20886. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20887.  
  20888. A PL/I application program becomes active when a calling program invokes the 
  20889. main procedure. This calling program usually is the operating system, although 
  20890. it could be another program. The main procedure must be an external procedure 
  20891. whose PROCEDURE statement has the OPTIONS(MAIN) specification. For example: 
  20892.  
  20893. CONTRL: PROCEDURE OPTIONS(MAIN);
  20894.         CALL A;
  20895.         CALL B;
  20896.         CALL C;
  20897.         END CONTRL;
  20898.  
  20899. In this example, CONTRL is the main procedure and it invokes other procedures 
  20900. in the program. 
  20901.  
  20902. The main procedure remains active for the duration of the program. 
  20903.  
  20904.  
  20905. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20906.  
  20907. A PL/I application program is terminated when the main procedure is terminated. 
  20908. Whether termination is normal or abnormal, control returns to the calling 
  20909. program. 
  20910.  
  20911. In the following example, when control transfers from the C procedure back to 
  20912. the CONTRL procedure, CONTRL terminates. 
  20913.  
  20914. CONTRL: PROCEDURE OPTIONS(MAIN);
  20915.         CALL A;
  20916.         CALL B;
  20917.         CALL C;
  20918.         END CONTRL;
  20919.  
  20920.  
  20921. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20922.  
  20923. A procedure is terminated when control passes back to the invoking block or to 
  20924. some other active block, by means other than a procedure reference.  Similarly, 
  20925. a begin-block is terminated when control passes to another block, by means 
  20926. other than a procedure reference. There are a number of ways that control can 
  20927. be transferred, and their implementations differ according to the type of block 
  20928. being terminated. 
  20929.  
  20930. During block termination: 
  20931.  
  20932.  The ON-unit environment is re-established as it existed before the block was 
  20933.   activated. 
  20934.  
  20935.  Storage for all automatic variables allocated in the block is released. 
  20936.  
  20937.  
  20938. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20939.  
  20940. RECURSIVE 
  20941.   must be specified if the procedure might be invoked recursively. 
  20942.  
  20943.  
  20944. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20945.  
  20946. ORDER, REORDER 
  20947.   ORDER and REORDER are optimization options that are specified for a procedure 
  20948.   or begin block. If neither option is specified for the external procedure, 
  20949.   ORDER is the default. The default for internal blocks is to inherit ORDER or 
  20950.   REORDER from the containing block. 
  20951.  
  20952.   The ORDER option indicates that only the most recently assigned values of 
  20953.   variables modified in the block are available for ON-units that are entered 
  20954.   because of computational conditions raised during statement execution and 
  20955.   expressions in the block. 
  20956.  
  20957.   The REORDER option allows the compiler to generate optimized code to produce 
  20958.   the result specified by the source program when error-free execution takes 
  20959.   place. 
  20960.  
  20961.  
  20962. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20963.  
  20964. CHARGRAPHIC, NOCHARGRAPHIC 
  20965.   The default for an external procedure is NOCHARG. Internal procedures and 
  20966.   begin blocks inherit their defaults from the containing procedure. 
  20967.  
  20968.   When NOCHARG is in effect, no semantic changes occur. 
  20969.  
  20970.   When CHARG is in effect, the following semantic changes occur: 
  20971.  
  20972.     All character string assignments are mixed character assignments. 
  20973.  
  20974.     STRINGSIZE condition causes MPSTR to be called. STRINGSIZE must be enabled 
  20975.      for character assignment that can cause truncation. 
  20976.  
  20977.      For example, based on: 
  20978.  
  20979.           NAME: PROCEDURE CHARGRAPHIC;
  20980.                 DCL A CHAR(5);
  20981.                 DCL B CHAR(8);
  20982.  
  20983.      the following statement: 
  20984.  
  20985.                 (STRINGSIZE): A=B;
  20986.  
  20987.      is logically transformed into: 
  20988.  
  20989.                 A=MPSTR(B,'VS',LENGTH(A));
  20990.  
  20991.  
  20992. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  20993.  
  20994. IRREDUCIBLE, REDUCIBLE 
  20995.   If REDUCIBLE or IRREDUCIBLE is specified, it is checked for syntax errors and 
  20996.   ignored. 
  20997.  
  20998.  
  20999. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21000.  
  21001. entry-constant 
  21002.   specifies the name by which the procedure to be fetched is known to the 
  21003.   operating system. The entry-constant must be the same as the one that you use 
  21004.   in the corresponding CALL statement, CALL option, or function reference. 
  21005.  
  21006.  
  21007. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21008.  
  21009. entry-constant 
  21010.   must be the same as the one used in the corresponding CALL statement, CALL 
  21011.   option, function reference, and/or FETCH statements. 
  21012.  
  21013.  
  21014. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21015.  
  21016. Begin-blocks are activated through sequential flow or as a unit in an IF, ON, 
  21017. WHEN, or OTHERWISE statement. 
  21018.  
  21019. You can transfer control to a labeled BEGIN statement by issuing the GO TO 
  21020. statement. 
  21021.  
  21022.  
  21023. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21024.  
  21025. A begin-block is terminated when control passes to another active block by some 
  21026. means other than a procedure reference. Begin-block termination occurs when: 
  21027.  
  21028.  The END statement for the begin-block is executed. Control continues with the 
  21029.   statement physically following the END, except when the block is an ON-unit. 
  21030.  
  21031.  A GO TO statement within the begin-block (or within any block internal to it) 
  21032.   is executed where control transfers to a point outside the block. 
  21033.  
  21034.  A STOP or EXIT statement is executed. 
  21035.  
  21036.  Control reaches a RETURN statement that transfers control out of the 
  21037.   begin-block (and out of its containing procedure as well). 
  21038.  
  21039. Note:   A GO TO statement can also terminate other blocks if the transfer point 
  21040. is contained in a block that did not directly activate the block being 
  21041. terminated. In this case, all intervening blocks in the activation sequence are 
  21042. terminated. 
  21043.  
  21044.  
  21045. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21046.  
  21047. entry-reference, generic-name, or built-in name 
  21048.   specifies the name of the subroutine to be invoked. Entry-reference is a 
  21049.   function or subroutine name declared with the ENTRY attribute. Generic-name 
  21050.   is a name declared with the GENERIC attribute. Built-in name is a name 
  21051.   declared with the BUILTIN attribute. 
  21052.  
  21053.  
  21054. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21055.  
  21056. argument 
  21057.   is an element, an aggregate expression, or an asterisk (*) to be passed to 
  21058.   the invoked procedure.  PL/I has a limit of 64 arguments in a single CALL 
  21059.   statement. 
  21060.  
  21061.  
  21062. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21063.  
  21064. The attributes of a dummy argument are derived as follows: 
  21065.  
  21066.  From the attributes declared for the associated parameter in an internal 
  21067.   procedure. 
  21068.  
  21069.  From the attributes specified in the parameter descriptor for the associated 
  21070.   parameter in the declaration of the external entry. If there was not a 
  21071.   descriptor for this parameter, the attributes of the constant or expression 
  21072.   are used. 
  21073.  
  21074.  For the bounds of an array, the length of a string, or the size of an area, 
  21075.   if specified by asterisk notation in the parameter declaration, from the 
  21076.   bound, length or size of the argument itself. 
  21077.  
  21078.  
  21079. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21080.  
  21081. parameter-descriptor-list 
  21082.   specifies the attributes of the parameters, if any, for the entry point. 
  21083.  
  21084.  
  21085. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21086.  
  21087. ENTRY 
  21088.   The ENTRY attribute without a parameter-descriptor-list is implied by the 
  21089.   OPTIONS or the RETURN attribute. 
  21090.  
  21091.  
  21092. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21093.  
  21094. parameter-descriptor 
  21095.   A parameter-descriptor list can be given to describe the attributes of the 
  21096.   parameters of the associated external entry constant or entry variable. It is 
  21097.   used for argument and parameter attribute matching and the creation of dummy 
  21098.   arguments. 
  21099.  
  21100.   If no parameter-descriptor list is given, the default is for the argument 
  21101.   attributes to match the parameter attributes. Thus, the parameter-descriptor 
  21102.   list must be supplied if argument attributes do not match the parameter 
  21103.   attributes. 
  21104.  
  21105.   Each parameter-descriptor corresponds to one parameter of the entry point 
  21106.   invoked and, if given, specifies the attributes of that parameter. 
  21107.  
  21108.   The parameter-descriptors must appear in the same order as the parameters 
  21109.   they describe. If a descriptor is absent, the default is for the argument to 
  21110.   match the parameter. 
  21111.  
  21112.   If a descriptor is not required for a parameter, the absence of the 
  21113.   descriptor must be indicated by a comma, by an asterisk followed by a comma, 
  21114.   or followed by the closing parenthesis of the parameter-descriptor list. For 
  21115.   example: 
  21116.  
  21117.     ENTRY(CHARACTER(10),*,*,FIXED DEC)  /* Indicates four arguments */
  21118.     ENTRY(*)               /* Indicates one argument */
  21119.     ENTRY(FLOAT BINARY,*)  /* Indicates two arguments */
  21120.     ENTRY( )               /* Specifies that the entry name */
  21121.                            /* must never have any arguments */
  21122.     ENTRY                  /* Specifies that it can have any */
  21123.                            /* number of arguments            */
  21124.  
  21125.  
  21126. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21127.  
  21128. attribute 
  21129.   The attributes can appear in any order in a parameter-descriptor. For an 
  21130.   array parameter-descriptor, the dimension attribute must be the first 
  21131.   specified. 
  21132.  
  21133.  
  21134. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21135.  
  21136.   An asterisk specifies that, for that parameter, any data type is allowed. No 
  21137.   conversion will be done. 
  21138.  
  21139.  
  21140. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21141.  
  21142. structure-parameter-descriptor 
  21143.   For a structure-parameter-descriptor, the descriptor level numbers need not 
  21144.   be the same as those of the parameter, but the structuring must be identical. 
  21145.   The attributes for a particular level can appear in any order. 
  21146.  
  21147.  
  21148. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21149.  
  21150. entry-reference 
  21151.   must not be based, subscripted, or defined. The same entry-reference can 
  21152.   appear more than once within a single GENERIC declaration with different 
  21153.   lists of descriptors. 
  21154.  
  21155.  
  21156. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21157.  
  21158. generic-descriptor 
  21159.   correspond to a single argument. It specifies the attributes that the 
  21160.   corresponding argument must have in order that the associated entry reference 
  21161.   can be selected for replacement. 
  21162.  
  21163.   Level numbers must not be specified. 
  21164.  
  21165.   Where no descriptor is required, it can be either omitted or indicated by an 
  21166.   asterisk. 
  21167.  
  21168.  
  21169. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21170.  
  21171.   The asterisk form is required if the missing descriptor is the only 
  21172.   descriptor. For example, whereas (,) represents two descriptors, (*) 
  21173.   represents one. 
  21174.  
  21175.  
  21176. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21177.  
  21178. ASSEMBLER 
  21179.   ASSEMBLER specifies that the designated entry point is an assembler 
  21180.   subroutine. PL/I will pass arguments  directly to the subroutine, rather than 
  21181.   via PL/I control blocks.  Entries with the ASSEMBLER option are subject to 
  21182.   the following rules: 
  21183.  
  21184.     They cannot be used as a function reference. 
  21185.  
  21186.     Any number of arguments can be passed in the CALL statement invoking the 
  21187.      entry, from zero up to the number specified by the entry declaration. 
  21188.  
  21189.   Abbreviation:  ASM 
  21190.  
  21191.  
  21192. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21193.  
  21194. RETCODE 
  21195.   specifies that, on return from the non-PL/I routine, the fullword value in 
  21196.   register 15 is to be saved as the PL/I return code.  This option enables 
  21197.   non-PL/I routines to pass return codes to PL/I. The value of the return code 
  21198.   can be determined by means of the PLIRETV built-in function. 
  21199.  
  21200.  
  21201. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21202.  
  21203. BYADDR or BYVALUE options 
  21204.   specify how all arguments defined for this entry are passed.  If you specify 
  21205.   BYADDR, parameters are received by address.  If you specify BYVALUE, 
  21206.   parameters are received by value.  Any change to a parameter that is being 
  21207.   passed by value is not reflected in the argument passed by the caller. 
  21208.  
  21209.   BYADDR is the default. 
  21210.  
  21211.   BYVALUE entry points can only have scalar arguments and return values that 
  21212.   are either POINTER or REAL FIXED BINARY(31,0). 
  21213.  
  21214.  
  21215. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21216.  
  21217. COBOL 
  21218.   specifies that the designated entry point is in a COBOL subprogram. 
  21219.  
  21220.  
  21221. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21222.  
  21223. NOMAP, NOMAPIN, NOMAPOUT 
  21224.   The mapping of a data aggregate passed by PL/I to COBOL might not match the 
  21225.   mapping used by COBOL. If PL/I detects a possible mapping discrepancy, PL/I 
  21226.   creates a dummy argument for the data aggregate, assigns data aggregate 
  21227.   values to the dummy argument, and passes the dummy argument to the COBOL 
  21228.   routine. The dummy argument uses the COBOL mapping algorithm.  On return to 
  21229.   the PL/I routine, the values in the dummy argument are remapped to the 
  21230.   original data argument. 
  21231.  
  21232.   You can use the NOMAP, NOMAPIN, and NOMAPOUT options to prevent this 
  21233.   automatic mapping of values: 
  21234.  
  21235.    NOMAP Specifies no mapping of values either at invocation of the COBOL 
  21236.      routine or on return to PL/I.  When you specify this option, PL/I does not 
  21237.      create a dummy argument. 
  21238.  
  21239.    NOMAPIN Specifies no mapping of values at invocation of the COBOL routine. 
  21240.      When you specify this option, PL/I creates a dummy argument. 
  21241.  
  21242.    NOMAPOUT Specifies no mapping of values on return to PL/I.  When you specify 
  21243.      this option, PL/I creates a dummy argument. 
  21244.  
  21245.   The NOMAP, NOMAPIN, and NOMAPOUT options are effective only for structure 
  21246.   arguments that are passed to COBOL.  The options do not apply to scalars. 
  21247.  
  21248.   Use these options when program efficiency is important.  These options help 
  21249.   you to avoid unnecessary mapping code. 
  21250.  
  21251.   Note:   NOMAP, NOMAPIN, and NOMAPOUT can be specified on the same OPTIONS specification.
  21252.  
  21253.  
  21254. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21255.  
  21256. ARGi 
  21257.   ARGi refers to items in the argument list to which the NOMAP, NOMAPIN, and 
  21258.   NOMAPOUT options are to be applied.  When you use ARGi, ARG1 specifies that 
  21259.   the option refers to the first argument. ARG2 specifies that the option 
  21260.   refers to the second argument, and so on.  If you do not specify ARGi, the 
  21261.   option is applied to all the data aggregates being passed. 
  21262.  
  21263.  
  21264. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21265.  
  21266. INTER 
  21267.   INTER is syntax checked and ignored. 
  21268.  
  21269.  
  21270. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21271.  
  21272. label: is the optional statement label prefix. 
  21273.  
  21274.  
  21275. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21276.  
  21277. identifier specifies the name of a preprocessor variable, a preprocessor 
  21278. procedure, or a preprocessor built-in function. 
  21279.  
  21280.  
  21281. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21282.  
  21283. RESCAN specifies that when the identifier is scanned by the preprocessor, 
  21284. replacement and rescanning takes place. 
  21285.  
  21286.  
  21287. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21288.  
  21289. NORESCAN specifies that when the identifier is scanned by the preprocessor, it 
  21290. is replaced in the preprocessor output by that text which is either the current 
  21291. value of the variable whose name matches the identifier, or the result of 
  21292. invoking the function whose name matches the identifier. This text is not 
  21293. rescanned for further replacement. 
  21294.  
  21295.  
  21296. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21297.  
  21298. The ORDER and REORDER options are optimization options that are specified for a 
  21299. procedure or a begin block.  If neither option is specified for the external 
  21300. procedure, ORDER is the default.  The default for internal blocks is to inherit 
  21301. ORDER or REORDER from the containing block. 
  21302.  
  21303. ORDER 
  21304.   indicates that only the most recently assigned values of variables modified 
  21305.   in the block are available for ON-units that are entered because of 
  21306.   computational conditions raised during statement execution and expressions in 
  21307.   the block. 
  21308.  
  21309. REORDER 
  21310.   allows the compiler to generate optimized code to produce the result 
  21311.   specified by the source program when error-free execution takes place. 
  21312.  
  21313.  
  21314. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21315.  
  21316. The default for an external procedure is NOCHARGRAPHIC. Internal procedures and 
  21317. begin blocks inherit their defaults from the containing procedure. 
  21318.  
  21319. When CHARGRAPHIC is in effect, the following semantic changes occur: 
  21320.  
  21321.  All character string assignments are mixed character assignments. 
  21322.  
  21323.  STRINGSIZE condition causes MPSTR to be called. STRINGSIZE must be enabled 
  21324.   for character assignment that can cause truncation.  For example: 
  21325.  
  21326.     NAME: PROCEDURE CHARGRAPHIC;
  21327.               DCL A CHAR(5);
  21328.               DCL B CHAR(8);
  21329.     /* the following statement... */
  21330.           (STRINGSIZE): A=B;
  21331.     /*...is logically transformed into... */
  21332.          A=MPSTR(B,'VS',LENGTH(A));
  21333.  
  21334. When NOCHARGRAPHIC is in effect, no semantic changes occur. 
  21335.  
  21336.  
  21337. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21338.  
  21339. entry-reference, generic-name, or built-in name specify the entry point of the 
  21340. subroutine to be invoked, whether it is an entry name, generic name, or 
  21341. built-in name. 
  21342.  
  21343.  
  21344. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21345.  
  21346. argument is an element, aggregate expression, or asterisk (*) to be passed on 
  21347. to the invoked subroutine. PL/I has a limit of 64 arguments in a single CALL 
  21348. statement. 
  21349.  
  21350.  
  21351. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21352.  
  21353. label: is the optional statement label prefix. 
  21354.  
  21355.  
  21356. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21357.  
  21358. identifier specifies the name of either a preprocessor variable, a preprocessor 
  21359. procedure, or a preprocessor built-in function. 
  21360.  
  21361.  
  21362. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21363.  
  21364. label: is the optional statement label prefix. 
  21365.  
  21366.  
  21367. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21368.  
  21369. identifier specifies the name of either a preprocessor variable, a preprocessor 
  21370. procedure, or a preprocessor built-in function. 
  21371.  
  21372.  
  21373. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21374.  
  21375. FIXED 
  21376.   A preprocessor variable declared with the attribute FIXED is also given the 
  21377.   attributes DECIMAL(5,0). 
  21378.  
  21379.  
  21380. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21381.  
  21382. CHARACTER 
  21383.   specifies that the identifier represents a varying-length string that has no 
  21384.   maximum length. 
  21385.  
  21386.  
  21387. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21388.  
  21389. ENTRY 
  21390.   An entry declaration can be specified for each preprocessor entry name in the 
  21391.   source program. The declaration activates the entry name. 
  21392.  
  21393.   The declaration of a preprocessor procedure entry name can be performed 
  21394.   explicitly by its appearance as the label of a %PROCEDURE statement. This 
  21395.   explicit declaration, however, does not activate the preprocessor procedure 
  21396.   name. 
  21397.  
  21398.  
  21399. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21400.  
  21401. BUILTIN 
  21402.   specifies that the identifier is the preprocessor built-in function of the 
  21403.   same name. 
  21404.  
  21405.  
  21406. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21407.  
  21408. expression 
  21409.   specifies an expression that is evaluated and converted to a fixed-point 
  21410.   binary value of precision (31,0).  Execution is suspended for the number of 
  21411.   milliseconds specified by the expression. 
  21412.  
  21413.  
  21414. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21415.  
  21416. expression 
  21417.   converted, where necessary, to a varying character string. This character 
  21418.   string is the message displayed. It can contain mixed character data. 
  21419.  
  21420.  
  21421. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21422.  
  21423. REPLY(character-reference) 
  21424.   receives a string that is an operator-supplied message. The STRING 
  21425.   pseudovariable must not be used. The reply message can contain character, 
  21426.   graphic, or mixed data. If the reply contains graphic data it is assigned, 
  21427.   along with the shift codes, to the character string reference. The content of 
  21428.   the reply is not checked for matched pairs of shift codes. 
  21429.  
  21430.  
  21431. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21432.  
  21433. EVENT(event-reference) 
  21434.   If the EVENT option is not specified, execution is suspended until the 
  21435.   operator's message is received. 
  21436.  
  21437.   If the EVENT option is given, execution does not wait for the reply to be 
  21438.   completed before continuing with subsequent statements. The status of the 
  21439.   event-variable is set to 0, and the completion part of the event variable is 
  21440.   given the value '0'B until the reply is completed, at which point it is given 
  21441.   the value '1'B. 
  21442.  
  21443.   The reply is complete only after the execution of a WAIT statement naming the 
  21444.   event. Another DISPLAY statement must not be executed until the previous 
  21445.   reply is complete. 
  21446.  
  21447.   REPLY and EVENT can appear in any order. 
  21448.  
  21449.  
  21450. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21451.  
  21452. WHILE (exp4) specifies that, before each repetition of do-group execution, exp4 
  21453. is evaluated and, if necessary, converted to a bit string. If any bit in the 
  21454. resulting string is 1, the do-group is executed. If all bits are 0, or the 
  21455. string is null, execution of the Type 2 do-group is terminated; while for Type 
  21456. 3, only the execution associated with the specification containing the WHILE 
  21457. option is terminated.  Execution for the next specification, if one exists, 
  21458. then begins. 
  21459.  
  21460.  
  21461. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21462.  
  21463. UNTIL (exp5) specifies that, after each repetition of do-group execution, exp5 
  21464. is evaluated, and, if necessary, converted to a bit string. If all the bits in 
  21465. the resulting string are 0, or the string is null, the statements of the 
  21466. do-group are executed. If any bit is 1, execution of the Type 2 do-group is 
  21467. terminated; while for Type 3, only the execution associated with the 
  21468. specification containing the UNTIL option is terminated. Execution for the next 
  21469. specification, if one exists, then begins. 
  21470.  
  21471.  
  21472. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21473.  
  21474. Reference: The pseudovariables COMPLETION, COMPLEX, and STRING cannot be used 
  21475. as a reference variable. All data types are allowed. 
  21476.  
  21477. The generation, g, of a reference is established once at the beginning of the 
  21478. do-group, immediately before the initial value expression (exp1) is evaluated. 
  21479. If the reference generation is changed to h in the do-group, the do-group 
  21480. continues to execute with the reference derived from the generation g. However, 
  21481. any reference to the reference inside the do-group is a reference to generation 
  21482. h. It is an error to free generation g in the do-group. 
  21483.  
  21484. If a reference is made to a reference after the last iteration is completed, 
  21485. the value of the variable is the value that was out of range of the limit set 
  21486. in the specification. Leave the do-group if the reference is out of range. That 
  21487. is, if: 
  21488.  
  21489.  The BY value is positive and the reference is > the TO value 
  21490.  The BY value is negative and the reference is < the TO value 
  21491. of the limit set in the specification. 
  21492.  
  21493. If reference is a program-control variable, the BY and TO options cannot be 
  21494. used in specification. 
  21495.  
  21496.  
  21497. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21498.  
  21499. exp1 specifies the initial value of the reference. 
  21500.  
  21501. If TO exp2, BY exp3, and REPEAT exp6 are all omitted from a specification, 
  21502. there is a single execution of the do-group, with the reference having the 
  21503. value of exp1. If WHILE(exp4) is included, the single execution does not take 
  21504. place unless exp4 is true. 
  21505.  
  21506.  
  21507. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21508.  
  21509. TO exp2: exp2 is evaluated at entry to the specification and saved. This saved 
  21510. value specifies the terminating value of the reference. Execution of the 
  21511. statements in a do-group terminates for a specification as soon as the value of 
  21512. the reference, when tested at the end of the do-group, is out of range. 
  21513. Execution of the next specification, if one exists, then begins. 
  21514.  
  21515. When execution of the last specification terminates, control passes to the 
  21516. statement following the do-group. 
  21517.  
  21518. If TO exp2 is omitted from a specification, and if BY exp3 is specified, 
  21519. repetitive execution continues until it is terminated by the WHILE or UNTIL 
  21520. option, or until some statement transfers control out of the do-group. 
  21521.  
  21522.  
  21523. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21524.  
  21525. BY exp3: exp3 is evaluated at entry to the specification and saved. This saved 
  21526. value specifies the increment to be added to the reference after each execution 
  21527. of the do-group. 
  21528.  
  21529. If BY exp3 is omitted from a specification, and if TO exp2 is specified, exp3 
  21530. defaults to 1. 
  21531.  
  21532. If BY 0 is specified, the execution of the do-group continues indefinitely 
  21533. unless it is halted by a WHILE or UNTIL option, or control is transferred to a 
  21534. point outside the do-group. 
  21535.  
  21536.  
  21537. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21538.  
  21539. REPEAT exp6: exp6 is evaluated and assigned to the reference after each 
  21540. execution of the do-group. Repetitive execution continues until it is 
  21541. terminated by the WHILE or UNTIL option, or some statement transfers control 
  21542. out of the do-group. 
  21543.  
  21544.  
  21545. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21546.  
  21547. IF . . . THEN . . . ELSE 
  21548.  
  21549. IF A=B
  21550.    THEN DO;
  21551.         .
  21552.         .
  21553.         .
  21554.         END;
  21555.    ELSE DO I=1 TO 2;
  21556.         .
  21557.         .
  21558.         .
  21559.         END;
  21560.  
  21561.  
  21562. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21563.  
  21564. Basic repetitions 
  21565.  
  21566. In the following example, the do-group is executed ten times, while the value 
  21567. of the reference I progresses from 1 through 10. 
  21568.  
  21569. DO I = 1 TO 10;
  21570.   .
  21571.   .
  21572.   .
  21573. END;
  21574.  
  21575. The effect of this DO and END statement is equivalent to: 
  21576.  
  21577.    I = 1;
  21578. A: IF I > 10 THEN GO TO B;
  21579.      .
  21580.      .
  21581.      .
  21582.    I = I +1;
  21583.    GO TO A;
  21584. B: next statement
  21585.  
  21586. The following DO statement executes the do-group three times: once for each 
  21587. assignment of 'TOM', 'DICK', and 'HARRY' to NAME: 
  21588.  
  21589. DO NAME = 'TOM','DICK','HARRY';
  21590.  
  21591. The following statement specifies that the do-group executes thirteen times: 
  21592. ten times with the value of I equal to 1 through 10, and three times with the 
  21593. value of I equal to 13 through 15: 
  21594.  
  21595. DO I = 1 TO 10, 13 TO 15;
  21596.  
  21597.  
  21598. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21599.  
  21600. Repetition using the reference as a subscript 
  21601.  
  21602. The reference of a DO statement can be used as a subscript in statements within 
  21603. the do-group, so that each execution deals with successive elements of a table 
  21604. or array. 
  21605.  
  21606. In the following example, the first ten elements of A are set to 1,2,...,10, 
  21607. respectively: 
  21608.  
  21609. DO I = 1 TO 10;
  21610.    A(I) = I;
  21611.    END;
  21612.  
  21613.  
  21614. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21615.  
  21616. Repetition with TO . . . BY 
  21617.  
  21618. The following example specifies that the do-group is executed five times, with 
  21619. the value of I equal to 2, 4, 6, 8, and 10: 
  21620.  
  21621. DO I = 2 TO 10 BY 2;
  21622.  
  21623. If negative increments of the reference are required, the BY option must be 
  21624. used. For example, the following is executed with I equal to 10, 8, 6, 4, 2, 0, 
  21625. and -2: 
  21626.  
  21627. DO I = 10 TO -2 BY -2;
  21628.  
  21629. In the following example, the do-group is executed with I equal to 1, 3, 5: 
  21630.  
  21631. I=2;
  21632. DO I=1 TO I+3 BY I;
  21633.   .
  21634.   .
  21635.   .
  21636. END;
  21637.  
  21638. It is equivalent to the following: 
  21639.  
  21640. DO I=1 TO 5 BY 2;
  21641.   .
  21642.   .
  21643.   .
  21644. END;
  21645.  
  21646.  
  21647. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21648.  
  21649. DO with WHILE, UNTIL 
  21650.  
  21651. The WHILE and UNTIL options make successive executions of the do-group 
  21652. dependent upon a specified condition. For example: 
  21653.  
  21654. DO WHILE (A=B);
  21655.     .
  21656.     .
  21657.     .
  21658. END;
  21659.  
  21660. is equivalent to the following: 
  21661.  
  21662. S:  IF A=B THEN;
  21663.         ELSE GOTO R;
  21664.     .
  21665.     .
  21666.     .
  21667.     GOTO S;
  21668. R:  next statement
  21669.  
  21670. The example: 
  21671.  
  21672. DO UNTIL (A=B);
  21673.     .
  21674.     .
  21675.     .
  21676. END;
  21677.  
  21678. is equivalent to the following: 
  21679.  
  21680. S:  .
  21681.     .
  21682.     .
  21683.    IF (A=B) THEN GOTO R;
  21684.    GOTO S;
  21685. R:  next statement
  21686.  
  21687. In the absence of other options, a do-group headed by a DO UNTIL statement is 
  21688. executed at least once, but a do-group headed by a DO WHILE statement might not 
  21689. be executed at all. That is, the statements DO WHILE (A=B) and DO UNTIL (A╨║=B) 
  21690. are not equivalent. 
  21691.  
  21692. In the following example, if A ╨║=B when the DO statement is first encountered, 
  21693. the do-group is not executed at all. 
  21694.  
  21695. DO WHILE(A=B) UNTIL(X=10);
  21696.  
  21697. However, if A=B, the do-group is executed. If X=10 after an execution of the 
  21698. do-group, no further executions are performed. Otherwise, a further execution 
  21699. is performed provided that A is still equal to B. 
  21700.  
  21701. In the following example, the do-group is executed at least once, with I equal 
  21702. to 1: 
  21703.  
  21704. DO I=1 TO 10 UNTIL(Y=1);
  21705.  
  21706. If Y=1 after an execution of the do-group, no further executions are performed. 
  21707. Otherwise, the default increment (BY 1) is added to I, and the new value of I 
  21708. is compared with 10. If I is greater than 10, no further executions are 
  21709. performed. Otherwise, a new execution commences. 
  21710.  
  21711. The following statement specifies that the do-group executes ten times while 
  21712. C(I) is less than zero, and then (provided that A is equal to B) once more: 
  21713.  
  21714. DO I = 1 TO 10 WHILE (C(I)<0),
  21715.        11 WHILE (A = B);
  21716.  
  21717.  
  21718. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21719.  
  21720. REPEAT 
  21721.  
  21722. In the following example, the do-group is executed with I equal to 1, 2, 4, 8, 
  21723. 16, and so on: 
  21724.  
  21725. DO I = 1 REPEAT 2*I;
  21726.   .
  21727.   .
  21728.   .
  21729. END;
  21730.  
  21731. This is equivalent to the following: 
  21732.  
  21733.     I=1;
  21734. A:  .
  21735.     .
  21736.     .
  21737.     I=2*I;
  21738.     GOTO A;
  21739.  
  21740. In the following example, the first execution of the do-group is performed with 
  21741. I=1. 
  21742.  
  21743. DO I=1 REPEAT 2*I UNTIL(I=256);
  21744.  
  21745. After this and each subsequent execution of the do-group, the UNTIL expression 
  21746. is tested. If I=256, no further executions are performed. Otherwise, the REPEAT 
  21747. expression is evaluated and assigned to I, and a new execution commences. 
  21748.  
  21749. The following example shows a DO statement used to step along a chained list: 
  21750.  
  21751. DO P=PHEAD REPEAT P -> FWD
  21752.       WHILE(P╨║=NULL());
  21753.  
  21754. The value PHEAD is assigned to P for the first execution of the do-group. 
  21755. Before each subsequent execution, the value P -> FWD is assigned to P. The 
  21756. value of P is tested before the first and each subsequent execution of the 
  21757. do-group. If it is NULL, no further executions are performed. 
  21758.  
  21759. The following statement specifies that the do-group is to be executed nine 
  21760. times, with the value of I equal to 1 through 9; then successively with the 
  21761. value of I equal to 10, 20, 40, and so on. Execution ceases when the do-group 
  21762. has been executed with a value of I greater than 10000. 
  21763.  
  21764. DO I = 1 TO 9, 10 REPEAT 2*I
  21765.                UNTIL (I>10000);
  21766.  
  21767.  
  21768. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21769.  
  21770. label: is the optional statement label prefix. 
  21771.  
  21772.  
  21773. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21774.  
  21775. preprocessor-variable 
  21776.   is the control variable. All data types except the COMPLETION, COMPLEX, and 
  21777.   STRING pseudovariables can be used. 
  21778.  
  21779.   The generation, g, of a control variable is established once at the beginning 
  21780.   of the do-group, immediately before the initial value expression 
  21781.   (preprocessor-exp1) is evaluated. If the control variable generation is 
  21782.   changed, to h, in the do-group, the do-group continues to execute with the 
  21783.   control variable derived from the generation g. However, any reference to the 
  21784.   control variable inside the do-group is a reference to generation h. It is an 
  21785.   error to free generation g in the do-group. 
  21786.  
  21787.   If the reference is made to a control variable after the last iteration is 
  21788.   completed, the value of the variable is the value that was out of range of 
  21789.   the limit set in the specification. Leave the do-group if the control 
  21790.   variable is out of range. That is, if: 
  21791.  
  21792.     The BY value is positive and the control variable is > the TO value. 
  21793.  
  21794.     The BY value is negative and the control variable is < the TO value. 
  21795.  
  21796.   If the preprocessor-variable is a program-control variable, the BY and TO 
  21797.   options cannot be used in the specification. 
  21798.  
  21799.  
  21800. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21801.  
  21802. preprocessor-exp1 
  21803.   specifies the initial value of the control variable, preprocessor-variable. 
  21804.  
  21805.  
  21806. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21807.  
  21808. preprocessor-exp2 
  21809.   is evaluated at entry to the specification and saved. This saved value 
  21810.   specifies the terminating value of the control variable, 
  21811.   preprocessor-variable. Execution of the statements in a do-group terminates 
  21812.   for a specification as soon as the value of the control variable, when tested 
  21813.   at the end of the do-group, is out of range. Execution of the next 
  21814.   specification, if one exists, then begins. 
  21815.  
  21816.   When execution of the last specification terminates, control passes to the 
  21817.   statement following the do-group. 
  21818.  
  21819.  
  21820. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21821.  
  21822. preprocessor-exp3 
  21823.   is evaluated at entry to the specification and saved. This saved value 
  21824.   specifies the increment to be added to the control variable after each 
  21825.   execution of the do-group. 
  21826.  
  21827.   If BY preprocessor-exp3 is omitted from a specification, and if TO 
  21828.   preprocessor-exp2 is specified, preprocessor-exp3 defaults to 1. 
  21829.  
  21830.   If BY 0 is specified, the execution of the do-group continues indefinitely 
  21831.   unless control is transferred to a point outside the do-group. 
  21832.  
  21833.  
  21834. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21835.  
  21836. statement-label 
  21837.   cannot be subscripted.  If a statement-label follows END, the END statement 
  21838.   closes the unclosed group or block headed by the nearest preceding DO, 
  21839.   SELECT, BEGIN, or PROCEDURE statement having that statement-label. It also 
  21840.   closes any unclosed groups or blocks physically within that group or block; 
  21841.   this is known as multiple closure. 
  21842.  
  21843.   If a statement-label does not follow END, the END statement closes the one 
  21844.   group or block headed by the nearest preceding DO, SELECT, BEGIN, or 
  21845.   PROCEDURE statement for which there is no corresponding END statement. 
  21846.  
  21847.  
  21848. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21849.  
  21850. The label following %END must be a label of a %PROCEDURE or %DO statement. 
  21851. Multiple closure is allowed. 
  21852.  
  21853.  
  21854. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21855.  
  21856. parameter 
  21857.   is a name in an invoked procedure represents an argument passed to that 
  21858.   procedure. A name is explicitly declared with the parameter attribute by its 
  21859.   appearance in a parameter list of the ENTRY statement. The name must not be 
  21860.   subscripted or qualified. Keywords following the procedure can appear in any 
  21861.   order. 
  21862.  
  21863.  
  21864. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21865.  
  21866. RETURNS(attribute list) 
  21867.   specifies, for a function procedure, the attributes of the value returned by 
  21868.   the function. 
  21869.  
  21870.   If more than one attribute is specified, they must be separated by blanks 
  21871.   (except for attributes, such as precision, that are enclosed in parentheses). 
  21872.  
  21873.   Any data and alignment attributes can be specified except those for ENTRY 
  21874.   variables. 
  21875.  
  21876.   String lengths and sizes must be specified by integers. The returned value 
  21877.   has the specified length or size. 
  21878.  
  21879.   The RETURNS attribute must agree with the attributes specified in (or 
  21880.   defaults for) the RETURNS option of the PROCEDURE or ENTRY statement to which 
  21881.   the entry name is prefixed. If they do not agree there is an error, since no 
  21882.   conversion is performed. 
  21883.  
  21884.   If RETURNS option is left unspecified, the attributes of the returned value 
  21885.   are determined by default. 
  21886.  
  21887.  
  21888. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21889.  
  21890. IRREDUCIBLE, REDUCIBLE 
  21891.   If you specify either IRREDUCIBLE or REDUCIBLE, the statement is syntax 
  21892.   checked and ignored. 
  21893.  
  21894.  
  21895. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21896.  
  21897. label-reference 
  21898.   specifies a label constant, a label variable, or a function reference that 
  21899.   returns a label value.  Since a label variable can have different values at 
  21900.   each execution of the GO TO statement, control might not always transfer to 
  21901.   the same statement. 
  21902.  
  21903.  
  21904. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21905.  
  21906. The label: preceding the GO TO is the preprocessor statement label, not the 
  21907. labelled point to which the scan is to be transferred. 
  21908.  
  21909.  
  21910. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21911.  
  21912. The label: following the GO TO indicates the statement label of a preprocessor 
  21913. statement to which the scan is to be transferred. 
  21914.  
  21915.  
  21916. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21917.  
  21918. expression 
  21919.   is evaluated, and, if necessary, converted to a bit string. 
  21920.  
  21921.  
  21922. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21923.  
  21924. unit1, unit2 
  21925.   is either a valid single statement, a group, or a begin block. All single 
  21926.   statements are considered valid and executable except DECLARE, DEFAULT, END, 
  21927.   ENTRY, FORMAT, PROCEDURE, or  % statement. If a nonexecutable statement is 
  21928.   used, the result can be unpredictable. Each unit can contain statements that 
  21929.   specify a transfer of control (for example, GO TO).  Hence, the normal 
  21930.   sequence of the IF statement can be overridden. 
  21931.  
  21932.   Each unit can be labeled and can have condition prefixes. 
  21933.  
  21934.   If any bit in the string expression has the value '1'B, unit1 is executed and 
  21935.   unit2, if present, is ignored.  If all bits are '0'B, or the string is null, 
  21936.   unit1 is ignored and unit2, if present, is executed. 
  21937.  
  21938.  
  21939. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21940.  
  21941. preprocessor-expression 
  21942.   is evaluated and converted to a bit string. If the conversion cannot be made, 
  21943.   the expression is in error. 
  21944.  
  21945.  
  21946. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21947.  
  21948. preprocessor unit 
  21949.   is any single preprocessor statement (other than %DECLARE, %PROCEDURE, %END, 
  21950.   or %DO) or a preprocessor do-group. 
  21951.  
  21952.  
  21953. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21954.  
  21955. label 
  21956.   is the preprocessor statement label. 
  21957.  
  21958.  
  21959. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21960.  
  21961. member 
  21962.   specifies the name of the library member to be incorporated in VM or the name 
  21963.   of the data set member to be incorporated in MVS. 
  21964.  
  21965.  
  21966. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21967.  
  21968. dataset 
  21969.   is optional; dataset specifies the ddname used in the FILEDEF command for the 
  21970.   CMS library, or in the ddname of the appropriate DD statement for MVS. The 
  21971.   default ddname is SYSLIB. The ddname must refer to a partitioned data set. 
  21972.  
  21973.  
  21974. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21975.  
  21976. label-constant 
  21977.   must be a label of a containing do-group.  The do-group that is left is the 
  21978.   do-group that has the specified label.  If label-constant is omitted, the 
  21979.   do-group that is left is the group that contains the LEAVE statement. 
  21980.  
  21981.  
  21982. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21983.  
  21984. message 
  21985.   a character expression whose value is the required diagnostic. 
  21986.  
  21987.  
  21988. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  21989.  
  21990. code 
  21991.   a fixed expression whose value indicates the severity of the message as 
  21992.   follows: 
  21993.  
  21994.      Code     Severity
  21995.       0           I
  21996.       4           W
  21997.       8           E
  21998.       12          S
  21999.       16          U
  22000.  
  22001.   If code is omitted, the default is 0. 
  22002.  
  22003.   If code has a value other than those listed above, a diagnostic message is 
  22004.   produced and a default value is taken. If the value is less than 0 or greater 
  22005.   than 16, severity U is the default. Otherwise, the next lower severity is the 
  22006.   default. 
  22007.  
  22008.  
  22009. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22010.  
  22011. label: is the optional statement label prefix. 
  22012.  
  22013.  
  22014. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22015.  
  22016. parameter 
  22017.   specifies a parameter of the function procedure. 
  22018.  
  22019.  
  22020. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22021.  
  22022. STATEMENT 
  22023.   If the reference occurs in input text and the STATEMENT option is present: 
  22024.  
  22025.     The arguments can be specified either in the positional argument list or 
  22026.      by keyword reference. 
  22027.  
  22028.     The end of the reference must be indicated by a semicolon. The semicolon 
  22029.      is not retained when the replacement takes place. 
  22030.  
  22031.  
  22032. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22033.  
  22034. RETURNS 
  22035.   The attribute CHARACTER or FIXED must be specified in the RETURNS attribute 
  22036.   list to specify the attribute of the value returned by the function 
  22037.   procedure. 
  22038.  
  22039.  
  22040. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22041.  
  22042. entry-name: 
  22043.   name written as the label prefix to the %PROCEDURE statement. 
  22044.  
  22045.  
  22046. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22047.  
  22048. WHEN(exp2, exp3,...) 
  22049.   specifies an expression or expressions that are evaluated and compared with 
  22050.   the saved value from the SELECT statement. If an expression is found that is 
  22051.   equal to the saved value, the evaluation of expressions in WHEN statements is 
  22052.   terminated, and the unit of the associated THEN statement is executed.  If no 
  22053.   such expression is found, the  unit of the OTHERWISE statement is executed. 
  22054.  
  22055.   The WHEN statement must not have a label prefix. 
  22056.  
  22057.  
  22058. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22059.  
  22060. OTHERWISE 
  22061.   specifies the unit to be executed when every test of the preceding WHEN 
  22062.   statement fails. 
  22063.  
  22064.   If the OTHERWISE statement is omitted and execution of the select-group does 
  22065.   not result in the selection of a unit, the ERROR condition is raised. 
  22066.  
  22067.   The OTHERWISE statement must not have a label prefix. 
  22068.  
  22069.  
  22070. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22071.  
  22072. unit 
  22073.   is either a valid single statement, a group, or a begin block. All single 
  22074.   statements are considered valid and executable except DECLARE, DEFAULT, END, 
  22075.   ENTRY, FORMAT, PROCEDURE, or a % statement. If a non-executable statement is 
  22076.   used, the result can be unpredictable. 
  22077.  
  22078.   Each unit can contain statements that specify a transfer of control (for 
  22079.   example GO TO).  Hence, the normal sequence of the SELECT statement can be 
  22080.   overridden. 
  22081.  
  22082.  
  22083. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22084.  
  22085. n specifies the number of lines to be skipped.  It must be an integer in the 
  22086. range 1 through 999.  If n is omitted, the default is 1.  If n is greater than 
  22087. the number of lines remaining on the page, the equivalent of a %PAGE statement 
  22088. is executed in place of the %SKIP statement. 
  22089.  
  22090.  
  22091. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22092.  
  22093. FILE(file-reference) specifies the name of the file. 
  22094.  
  22095.  
  22096. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22097.  
  22098. KEY(expression) specifies the key of the locked record. 
  22099.  
  22100.  
  22101. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22102.  
  22103. event-reference 
  22104.   specifies an element, or an array. 
  22105.  
  22106.  
  22107. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22108.  
  22109. expression 
  22110.   is evaluated and converted to FIXED BINARY (31,0) when the WAIT statement is 
  22111.   executed. This value specifies the number of events in the list that must be 
  22112.   set complete before control for the block passes to the statement following 
  22113.   the WAIT. 
  22114.  
  22115.   If the value is zero or negative, the WAIT statement is treated as a null 
  22116.   statement. If the value is greater than the number, n, of event names in the 
  22117.   list, the value is n. If the statement refers to an aggregate event-variable, 
  22118.   each of the elements contributes to the count. 
  22119.  
  22120.   If the expression does not appear, all the event-variables in the list must 
  22121.   be set complete before control is passed to the next statement in the block 
  22122.   following the WAIT. 
  22123.  
  22124.  
  22125. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22126.  
  22127. BYADDR, BYVALUE 
  22128.   Specify how all parameters defined for this procedure entry are passed. If 
  22129.   you specify BYADDR, parameters are received by address. If you specify 
  22130.   BYVALUE, parameters are received by value. Any change to a parameter that is 
  22131.   being passed by value is not reflected in the argument passed by the caller. 
  22132.  
  22133.   BYADDR is the default unless the procedure is MAIN and is being compiled with 
  22134.   the SYSTEM(CICS) or SYSTEM(IMS) compiler options. In these cases, BYVALUE is 
  22135.   implied and BYADDR is invalid. 
  22136.  
  22137.    BYADDR 
  22138.  
  22139.        Can be specified for EXTERNAL PROCEDURE statements. 
  22140.  
  22141.    BYVALUE 
  22142.  
  22143.        May be specified for EXTERNAL PROCEDURE statements. 
  22144.  
  22145.        Cannot be specified for ENTRY statements and internal procedures. 
  22146.  
  22147.        When specified for a MAIN procedure, implies the specification of 
  22148.         NOEXECOPS. 
  22149.  
  22150.        Procedures can only have scalar parameters and return values that are 
  22151.         either POINTER or REAL FIXED BINARY(31,0). If all parameters are 
  22152.         POINTER, the last parameter must not have the NULL pointer value. 
  22153.  
  22154.        Should not be used with SYSTEM(CMS), SYSTEM(CMSTPL), SYSTEM(MVS), or 
  22155.         SYSTEM(TSO). 
  22156.  
  22157.  
  22158. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22159.  
  22160. MAIN 
  22161.   Specifies the procedure that is the initial procedure of a PL/I program. The 
  22162.   operating system invokes it as the first step in the execution of the 
  22163.   program. 
  22164.  
  22165.  
  22166. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22167.  
  22168. COBOL 
  22169.   The PL/I procedure is invoked at this entry point by only a COBOL subprogram. 
  22170.  
  22171.  
  22172. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22173.  
  22174. NOEXECOPS 
  22175.   Is valid only with the MAIN option. It indicates that the character string is 
  22176.   passed to the main procedure without evaluating the run-time options for the 
  22177.   SYSTEM(MVS), SYSTEM(CMS), and SYSTEM(CMSTPL) compiler options. 
  22178.  
  22179.  
  22180. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22181.  
  22182. FETCHABLE 
  22183.   Specifies that an external procedure can be fetched and is entered through 
  22184.   this entry point. If the procedure has multiple labels, the FETCHABLE option 
  22185.   is applied to the primary entry point. When a load module containing a 
  22186.   FETCHABLE procedure is fetched, control passes to the procedure, except when 
  22187.   the load module also has a MAIN procedure. In that case, control passes to 
  22188.   the MAIN procedure. 
  22189.  
  22190.   If the load module has multiple FETCHABLE procedures, then the linkage editor 
  22191.   may choose any of those procedures as the one that gets control. 
  22192.  
  22193.   The FETCHABLE option is valid only on external procedures. 
  22194.  
  22195.  
  22196. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22197.  
  22198. NOMAP, NOMAPIN, NOMAPOUT 
  22199.   Are used to prevent the automatic mapping of values: 
  22200.  
  22201.    NOMAP 
  22202.      Specifies no mapping of values either at entry to PL/I or on return to 
  22203.      COBOL. When you specify this option, PL/I does not create a dummy 
  22204.      argument. 
  22205.  
  22206.    NOMAPIN 
  22207.      Specifies no mapping of values at entry to PL/I. When you specify this 
  22208.      option, PL/I creates a dummy argument. 
  22209.  
  22210.    NOMAPOUT 
  22211.      Specifies no mapping of values on return to COBOL. When you specify this 
  22212.      option, PL/I creates a dummy argument. 
  22213.  
  22214.  
  22215. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22216.  
  22217. parameter-list 
  22218.   Specifies the name of the parameters, already specified in the PROCEDURE or 
  22219.   ENTRY statement, to which the NOMAP, NOMAPIN, or NOMAPOUT option is to be 
  22220.   applied. If you do not specify a list, the option is applied to all 
  22221.   parameters. Parameters can appear in any order, and are separated by commas 
  22222.   or blanks. 
  22223.  
  22224.  
  22225. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22226.  
  22227. REENTRANT 
  22228.   Allows a program to be reentrant. You must not do anything that alters static 
  22229.   storage during execution. 
  22230.  
  22231.  
  22232. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22233.  
  22234. If you specify ATTRIBUTES, identifiers and attributes are included in the 
  22235. compiler listing. 
  22236.  
  22237.  
  22238. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22239.  
  22240. If you specify FULL, all identifiers and attributes are included in the 
  22241. compiler listing.  FULL is the default. 
  22242.  
  22243.  
  22244. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22245.  
  22246. If you specify SHORT, unreferenced identifiers are omitted, making the listing 
  22247. more manageable. 
  22248.  
  22249.  
  22250. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22251.  
  22252. If you specify NOATTRIBUTE, neither identifiers nor attributes are included in 
  22253. the compiler listing. 
  22254.  
  22255.  
  22256. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22257.  
  22258. If you use CMPAT(V1), you can use arrays, AREAS, and aggregates in exactly the 
  22259. same way that they were used in OS PL/I Version 1 as long as other external 
  22260. procedures sharing them are not compiled with CMPAT(V2). 
  22261.  
  22262. If any procedures in an application load module (MAIN or FETCHed) are 
  22263. recompiled (and therefore relink-edited), object code compatibility with OS 
  22264. PL/I Version 1 Release 5.1 is provided under the following guidelines: 
  22265.  
  22266.  If arrays, aggregates, or AREAs are to be shared between OS PL/I Version 1 
  22267.   Release 5.1, object code and PL/I MVS and VM object code, PL/I MVS and VM 
  22268.   compilations must use CMPAT(V1). 
  22269.  
  22270.  If arrays, aggregates, or AREAs are to be shared between PL/I MVS and VM 
  22271.   object code only, PL/I MVS and VM compilations must use either CMPAT(V1) or 
  22272.   CMPAT(V2), but not both. 
  22273.  
  22274.  Using CMPAT(V2) is required for larger arrays, aggregates, or AREAs and is 
  22275.   recommended even if you do not use larger arrays, aggregates, or AREAs. 
  22276.  
  22277.  If arrays, aggregates, or AREAs are to be shared between OS PL/I Version 1 
  22278.   Release 5.1 object code only, no precautions need to be taken. 
  22279.  
  22280.  
  22281. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22282.  
  22283. If you use CMPAT(V2), it does not provide object compatibility with OS PL/I 
  22284. Version 1. You need to make code changes if: 
  22285.  
  22286.  You want to use fullword subscripts. 
  22287.  
  22288.  You have any expressions that rely on precision and scale returned from the 
  22289.   BUILTIN functions HBOUND, LBOUND, DIM, or ALLOCATION. 
  22290.  
  22291. If you do not have either of the above situations, you do not need to make code 
  22292. changes to use CMPAT(V2) as long as all external procedures sharing the same 
  22293. array or aggregate are also compiled with CMPAT(V2). 
  22294.  
  22295.  
  22296. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22297.  
  22298. Continuation depends on the severity detected, as specified by the NOCOMPILE 
  22299. option.  The NOCOMPILE option specifies that processing stops unconditionally 
  22300. after syntax checking. 
  22301.  
  22302. If the compilation is terminated by the NOCOMPILE option, the cross-reference 
  22303. listing and attribute listing can be produced; the other listings that follow 
  22304. the source program will not be produced. 
  22305.  
  22306.  
  22307. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22308.  
  22309. If you specify NOCOMPILE(W), there will be no compilation if a warning, error, 
  22310. severe error, or unrecoverable error is detected. 
  22311.  
  22312.  
  22313. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22314.  
  22315. If you specify NOCOMPILE(E), there will be no compilation if an error, severe 
  22316. error, or unrecoverable error is detected. 
  22317.  
  22318.  
  22319. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22320.  
  22321. If you specify NOCOMPILE(S), there will be no compilation if a severe error or 
  22322. unrecoverable error is detected. 
  22323.  
  22324.  
  22325. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22326.  
  22327. If you specify COMPILE, the program will be compiled. 
  22328.  
  22329.  
  22330. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22331.  
  22332. password is a character string not exceeding eight characters. 
  22333.  
  22334. Note:   Under CMS, if you use CONTROL in the PLIOPT command, the password 
  22335.         cannot have a right or left parenthesis or lower case characters. 
  22336.  
  22337.  
  22338. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22339.  
  22340. DECK specifies that the compiler will produce an object module in the form of 
  22341. 80-character records and store it in the data set defined by the SYSPUNCH DD 
  22342. statement. 
  22343.  
  22344.  
  22345. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22346.  
  22347. NODECK specifies that the compiler will not produce an object module in the 
  22348. form of 80-character records. 
  22349.  
  22350.  
  22351. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22352.  
  22353. If you specify FLAG(I), you will get a list of all messages. 
  22354.  
  22355.  
  22356. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22357.  
  22358. If you specify FLAG(W), you will get a list of all messages except for 
  22359. information messages. 
  22360.  
  22361.  
  22362. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22363.  
  22364. If you specify FLAG(E), you will get a list of all messages except for warning 
  22365. and information messages. 
  22366.  
  22367.  
  22368. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22369.  
  22370. If you specify FLAG(S), you will get a listing of only severe error and 
  22371. unrecoverable error messages. 
  22372.  
  22373.  
  22374. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22375.  
  22376. The INTERRUPT option causes the compiled program to respond to attention 
  22377. requests (interrupts).  If you have written a program that relies on raising 
  22378. the ATTENTION condition, it must be compiled with the INTERRUPT option. 
  22379.  
  22380. If you specify the INTERRUPT option, an established ATTENTION ON-unit will gain 
  22381. control when an attention interrupt occurs.  When the execution of an ATTENTION 
  22382. ON-unit is complete, control returns to the point of interrupt unless directed 
  22383. elsewhere by means of a GOTO statement.  If an ATTENTION ON-unit is not 
  22384. established, the attention interrupt is effectively ignored. 
  22385.  
  22386.  
  22387. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22388.  
  22389. If you specify NOINTERRUPT, an attention interrupt during a program run will 
  22390. not give control to any ATTENTION ON-units. 
  22391.  
  22392.  
  22393. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22394.  
  22395. OS specifies the level of PL/I language that the compiler is to support. OS is 
  22396. the only level currently supported. 
  22397.  
  22398.  
  22399. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22400.  
  22401. NOSPROG specifies that the compiler is not to allow the additional support for 
  22402. pointers allowed under SPROG. 
  22403.  
  22404.  
  22405. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22406.  
  22407. SPROG specifies that the compiler is to allow extended operations on pointers, 
  22408. including arithmetic and use of the POINTERADD, BINARYVALUE, and POINTERVALUE 
  22409. built-in functions. 
  22410.  
  22411.  
  22412. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22413.  
  22414. n is the number of lines.  It must be in the range 1 through 32,767, but only 
  22415. headings are generated if you specify less than 7.  When you specify less than 
  22416. 100, the static internal storage map and the object listing are printed in 
  22417. double column format.  Otherwise, they are printed in single column format. 
  22418.  
  22419.  
  22420. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22421.  
  22422. m is the number of the first, or only, source statement for which an object 
  22423. listing is required. 
  22424.  
  22425.  
  22426. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22427.  
  22428. n is the number of the last source statement for which an object listing is 
  22429. required.  If n is omitted, only statement m is listed. 
  22430.  
  22431.  
  22432. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22433.  
  22434. c is the character to be printed as the margin indicator. 
  22435.  
  22436.  
  22437. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22438.  
  22439. m is the column number of the leftmost character (first data byte) that will be 
  22440. processed by the computer.  It should not exceed 100. 
  22441.  
  22442.  
  22443. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22444.  
  22445. n is the column number of the rightmost character (last data byte) that will be 
  22446. processed by the compiler.  It should be greater than m, but not greater than 
  22447. 100. 
  22448.  
  22449. For variable-length records, n is interpreted as the rightmost column, or the 
  22450. last data byte if the record has less than n data bytes. Thus, the last 
  22451. character of a variable-length record is usually a non-blank character and is 
  22452. immediately followed (without an intervening blank) by the first data byte (m) 
  22453. of the next record. If you do not intend to have continuation, be sure that at 
  22454. least one blank occurs at the beginning (m) of the next record. 
  22455.  
  22456.  
  22457. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22458.  
  22459. c is the column number of the ANS printer control character.  It should not 
  22460. exceed 100 and should be outside the values specified for m and n.  A value of 
  22461. 0 for c indicates that no ANS control character is present.  Only the following 
  22462. control characters can be used: 
  22463.  
  22464. (blank)  Skip one line before printing. 
  22465.  
  22466. 0        Skip two lines before printing. 
  22467.  
  22468. -        Skip three lines before printing. 
  22469.  
  22470. +        No skip before printing. 
  22471.  
  22472. 1        Start a new page. 
  22473.  
  22474. Any other character is an error and is assumed to be a blank. 
  22475.  
  22476. Specifying MARGINS(,,c) is an alternative to using %PAGE and %SKIP statements. 
  22477.  
  22478.  
  22479. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22480.  
  22481. name has from one through eight characters, and begins with an alphabetic 
  22482. character. 
  22483.  
  22484. name has no default. 
  22485.  
  22486.  
  22487. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22488.  
  22489. char is a single SBCS character. 
  22490.  
  22491. You cannot specify any of the alphabetic characters, digits, and special 
  22492. characters defined in the "PL/I MVS and VM Language Reference" except for the 
  22493. logical NOT symbol (╨║). 
  22494.  
  22495. If you specify the NOT option, the standard NOT symbol is no longer recognized 
  22496. unless you specify it as one of the characters in the character string. 
  22497.  
  22498.  
  22499. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22500.  
  22501. OPTIMIZE(TIME) specifies that the compiler will optimize the machine 
  22502. instructions generated to produce a more efficient object program.  The use of 
  22503. OPTIMIZE(TIME) could result in a substantial increase in compile time over 
  22504. NOOPTIMIZE. 
  22505.  
  22506.  
  22507. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22508.  
  22509. OPTIMIZE(O) is the equivalent of NOOPTIMIZE. 
  22510.  
  22511.  
  22512. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22513.  
  22514. OPTIMIZE(2) is the equivalent of OPTIMIZE(TIME). 
  22515.  
  22516.  
  22517. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22518.  
  22519. NOOPTIMIZE specifies fast compilation speed but inhibits optimization. 
  22520.  
  22521.  
  22522. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22523.  
  22524. char is a single SBCS character. 
  22525.  
  22526. You cannot specify any of the alphabetic characters, digits, and special 
  22527. characters defined in the "PL/I MVS and VM Language Reference", except for the 
  22528. logical OR symbol (Γöé). 
  22529.  
  22530. If you specify the OR option, the standard OR symbol is no longer recognized 
  22531. unless you specify it as one of the characters in the character string. 
  22532.  
  22533.  
  22534. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22535.  
  22536. m specifies the column number of the left-hand margin. 
  22537.  
  22538.  
  22539. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22540.  
  22541. n specifies the column number of the right-hand margin. 
  22542.  
  22543.  
  22544. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22545.  
  22546. If the SEQUENCE option is in effect, an external procedure cannot contain more 
  22547. than 32,767 lines. 
  22548.  
  22549. The SEQUENCE option is used to override the default margin positions that are 
  22550. set up during compiler installation by the FSEQUENCE and VSEQUENCE options. 
  22551.  
  22552. Because NUMBER and GONUMBER imply SEQUENCE, the NOSEQUENCE option should not be 
  22553. specified. 
  22554.  
  22555.  
  22556. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22557.  
  22558. The NOSEQUENCE option must be specified to be able to compile an external 
  22559. procedure containing more than 32,767 lines. 
  22560.  
  22561.  
  22562. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22563.  
  22564. SIZE(yyyyyyyy) specifies that yyyyyyyy bytes of main storage are requested. 
  22565. Leading zeros are not required. 
  22566.  
  22567.  
  22568. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22569.  
  22570. SIZE(yyyyyK) specifies that yyyyyK bytes of main storage are requested 
  22571. (1K=1024).  Leading zeros are not required. 
  22572.  
  22573.  
  22574. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22575.  
  22576. SIZE(MAX) specifies that the compiler will obtain as much main storage as it 
  22577. can. 
  22578.  
  22579.  
  22580. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22581.  
  22582. SIZE(-yyyyyyyy) specifies that the compiler obtains as much main storage as it 
  22583. can, and then releases yyyyyyyy bytes to the operating system. Leading zeros 
  22584. are not required. 
  22585.  
  22586.  
  22587. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22588.  
  22589. SIZE(-yyyyyK) specifies that the compiler obtains as much main storage as it 
  22590. can, and then releases yyyyyK bytes to the operating system (1K=1024). Leading 
  22591. zeros are not required. 
  22592.  
  22593.  
  22594. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22595.  
  22596. If you specify NOSYNTAX, processing will be stopped unconditionally after 
  22597. preprocessing.  Thus, the cross-reference listing, attribute listing, and other 
  22598. listings that follow the source program are not produced. 
  22599.  
  22600.  
  22601. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22602.  
  22603. If you specify NOSYNTAX(W), there will be no syntax checking if a warning, 
  22604. error, severe error, or unrecoverable error is detected. 
  22605.  
  22606.  
  22607. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22608.  
  22609. If you specify NOSYNTAX(E), there will be no syntax checking if an error, 
  22610. severe error, or unrecoverable error is detected. 
  22611.  
  22612.  
  22613. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22614.  
  22615. If you specify NOSYNTAX(S), there will be no syntax checking if a severe error 
  22616. or unrecoverable error is detected. 
  22617.  
  22618.  
  22619. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22620.  
  22621. If you specify SYSTEM(MVS), the program will run as an MVS application program. 
  22622.  
  22623.  
  22624. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22625.  
  22626. If you specify SYSTEM(CMS), the program will run as a CMS application program. 
  22627.  
  22628.  
  22629. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22630.  
  22631. If you specify SYSTEM(CMSTPL), the program will run as a CMS application 
  22632. program. 
  22633.  
  22634.  
  22635. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22636.  
  22637. If you specify SYSTEM(CICS), the program will run as a CICS transaction. 
  22638.  
  22639.  
  22640. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22641.  
  22642. If you specify SYSTEM(IMS), the program will run as an IMS application program. 
  22643.  
  22644.  
  22645. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22646.  
  22647. If you specify SYSTEM(TSO), the program will run as a TSO command processor. 
  22648.  
  22649.  
  22650. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22651.  
  22652. opt-list is specified with the following option keywords, their negative forms, 
  22653. or their abbreviated forms, in the option list: 
  22654.  
  22655. AGGREGATE       ATTRIBUTES 
  22656. ESD             INSOURCE 
  22657. LIST            MAP 
  22658. OFFSET          OPTIONS 
  22659. SOURCE          STORAGE 
  22660. XREF 
  22661.  
  22662. The other options that relate to the listing (FLAG, GONUMBER, GOSTMT, 
  22663. LINECOUNT, LMESSAGE/SMESSAGE, MARGINI, NEST, NUMBER, and the SHORT and FULL 
  22664. suboptions of ATTRIBUTES and XREF) are the same as for the SYSPRINT listing. 
  22665.  
  22666.  
  22667. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22668.  
  22669. BLOCK tells the compiler to insert hooks at block boundaries (block entry and 
  22670. block exit). 
  22671.  
  22672.  
  22673. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22674.  
  22675. STMT tells the compiler to insert hooks at statement boundaries and block 
  22676. boundaries.  STMT causes a statement table to be generated. 
  22677.  
  22678.  
  22679. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22680.  
  22681. PATH tells the compiler to insert hooks: 
  22682.  
  22683.  Before the first statement enclosed by an iterative DO statement 
  22684.  
  22685.  Before the first statement of the true part of an IF statement 
  22686.  
  22687.  Before the first statement of the false part of an IF statement 
  22688.  
  22689.  Before the first statement of a true WHEN or OTHERWISE statement of a SELECT. 
  22690.   group 
  22691.  
  22692.  Before the statement following a user label 
  22693.  
  22694.  At CALLs or function references, both before and after control is passed to 
  22695.   the routine 
  22696.  
  22697.  At block boundaries. 
  22698.  
  22699. When PATH is specified, the compiler generates a statement table. 
  22700.  
  22701.  
  22702. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22703.  
  22704. ALL tells the compiler to insert hooks at all possible locations and to 
  22705. generate a statement table. 
  22706.  
  22707.  
  22708. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22709.  
  22710. NONE tells the compiler not to put hooks in the program. 
  22711.  
  22712.  
  22713. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22714.  
  22715. SYM tells the compiler to create a symbol table that will allow you to examine 
  22716. variables by name. 
  22717.  
  22718.  
  22719. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22720.  
  22721. NOSYM tells the compiler not to generate a symbol table. 
  22722.  
  22723.  
  22724. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22725.  
  22726. NOTEST suppresses the generation of all testing information. 
  22727.  
  22728.  
  22729. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22730.  
  22731. FULL is the default suboption.  All identifiers and attributes are included in 
  22732. the compiler listing. FULL applies by default if the XREF option is specified 
  22733. with no suboption. 
  22734.  
  22735.  
  22736. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22737.  
  22738. SHORT specifies that unreferenced identifiers are to be omitted from the 
  22739. compiler listing. 
  22740.  
  22741. If the suboption SHORT is specified, unreferenced identifiers are omitted. 
  22742.  
  22743.  
  22744. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22745.  
  22746. In its simplest form, the PLI command consists of the keyword and the 
  22747. conventional name of the TSO data set holding the PL/I source program. For 
  22748. example: 
  22749.  
  22750. PLI CALTROP
  22751.  
  22752.  
  22753. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22754.  
  22755. If the source program does not have a conventional data set name, you need to 
  22756. specify the full name and enclose it in single quotation marks: 
  22757.  
  22758. PLI 'JJONES.SAMPLE.PLI'
  22759.  
  22760.  
  22761. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22762.  
  22763.  You can make your own choice of name for the object module data set by 
  22764.   including the OBJECT compile-time option as an operand of the PLI command. 
  22765.   For example, if you issue the command: 
  22766.  
  22767.     PLI CALTROP OBJECT(TRAPA)
  22768.  
  22769.   the system adds the same qualifiers to this name as it does to the source 
  22770.   data set simple name, so the object module is written onto a data set. In 
  22771.   this example, if the user identification was WSMITH, the object module data 
  22772.   set would be named WSMITH.TRAPA.OBJ. 
  22773.  
  22774.  You can specify the full name of the object module data set by enclosing it 
  22775.   in quotation marks. For example, if you issue the command: 
  22776.  
  22777.     PLI CALTROP OBJECT('NATANS')
  22778.  
  22779.   the system in this case adds no qualifiers, so the object module is stored on 
  22780.   a data set called NATANS. 
  22781.  
  22782.  You can specify a full name to store the object module with another user's 
  22783.   user-identification. For example, the following command would store the 
  22784.   object module using the user-identification JJONES: 
  22785.  
  22786.     PLI CALTROP OBJECT('JJONES.CALTROP.OBJ')
  22787.  
  22788.  
  22789. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22790.  
  22791. data-set-name 
  22792.   specifies the name of the primary input data set for the compiler. This can 
  22793.   be either a fully qualified name (enclosed in single quotation marks) or a 
  22794.   simple name (for which the prompter adds the identification qualifier, and 
  22795.   the descriptive qualifier PLI). This must be the first operand specified when 
  22796.   you use the PLI command. 
  22797.  
  22798.  
  22799. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22800.  
  22801. option-list 
  22802.   specifies one or more compiler options that apply for this compilation. 
  22803.  
  22804.   Programmers familiar with batch processing should note that defaults are 
  22805.   altered for TSO, and that the DECK, MDECK, and OBJECT options are extended to 
  22806.   allow specific names of data sets onto which the output is written. 
  22807.  
  22808.   Separate the options by at least one blank or comma. The order of the options 
  22809.   is unimportant. If two contradictory options are specified, the last is 
  22810.   accepted and the first ignored. 
  22811.  
  22812.   Options specified in the PLI command can be overridden by options specified 
  22813.   by %PROCESS compiler control statements in the primary input. If the DECK, 
  22814.   MDECK, and OBJECT options are required for any program in a batched 
  22815.   compilation, the options should be specified with the PLI command so that the 
  22816.   prompter allocates the required data sets. 
  22817.  
  22818.   The negative forms can then be used on the %PROCESS statements for the 
  22819.   programs that do not require the options. The options are described below. 
  22820.  
  22821.     DECK[(dsname)]: This can be a full-qualified name (enclosed in single 
  22822.      quotation marks) or a simple name (to which the user identification and 
  22823.      descriptive qualifier DECK is added). If dsname is not specified, the 
  22824.      user-supplied name is taken from the first operand of the PLI command, and 
  22825.      the user-identification and descriptive qualifier DECK is added. If dsname 
  22826.      is not specified and the first operand of the PL/I command specifies a 
  22827.      member of a partitioned data set, the member name is ignored- the 
  22828.      generated data set name is based on the name of the partitioned data set. 
  22829.  
  22830.     MDECK[(dsname)]: This can be a fully-qualified name (enclosed in single 
  22831.      quotation marks) or a simple name (to which the user identification and 
  22832.      descriptive qualifier MDECK is added). If dsname is not specified, the 
  22833.      user-supplied name is taken from the first operand of the PLI command, and 
  22834.      the user-identification and descriptive qualifier MDECK is added. If 
  22835.      dsname is not specified and the first operand of the PL/I command 
  22836.      specifies a member of a partitioned data set, the member name is ignored- 
  22837.      the generated data set name is based on the name of the partitioned data 
  22838.      set. 
  22839.  
  22840.     OBJECT[(dsname)]: This can be a fully-qualified name (enclosed in single 
  22841.      quotation marks) or a simple name (to which the user identification and 
  22842.      descriptive qualifier OBJ is added). If dsname is not specified, the 
  22843.      user-supplied name is taken from the first operand of the PLI command, and 
  22844.      the user-identification and descriptive qualifier OBJ is added. If dsname 
  22845.      is not specified and the first operand of the PL/I command specifies a 
  22846.      member of a partitioned data set, the member name is ignored- the 
  22847.      generated data set name is based on the name of the partitioned data set. 
  22848.  
  22849.  
  22850. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22851.  
  22852. PRINT 
  22853.   specifies that the compiler listing will be written, either to the terminal 
  22854.   or to a file (depending upon which PRINT arguments are used). 
  22855.  
  22856.   If you specify PRINT with no arguments the compiler listing, on the SYSPRINT 
  22857.   file, is written at the terminal. 
  22858.  
  22859.  
  22860. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22861.  
  22862. PRINT(*) 
  22863.   specifies that the compiler listing, on the SYSPRINT file, is written at the 
  22864.   terminal. No other copy will be available. The PRINT(*) operand is 
  22865.   implemented by generating a TERMINAL option with a list of options which 
  22866.   correspond to the listings printed at the terminal. If you specify the 
  22867.   TERMINAL option after the PRINT(*) operand, this overrides the TERMINAL 
  22868.   option generated by the PRINT(*) operand. 
  22869.  
  22870.  
  22871. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22872.  
  22873. dsname 
  22874.   specifies the name of the data set to which the compiler listing is written. 
  22875.   This can be either a full-qualified name (enclosed in single quotation marks) 
  22876.   or a simple name (for which the prompter adds the identification qualifier, 
  22877.   and the description qualifier LIST). 
  22878.  
  22879.   If you do not specify a dsname argument for the PRINT operand, the prompter 
  22880.   adds the identification and descriptive qualifiers to the data set name 
  22881.   specified in the first operand, producing a data set name of the form: 
  22882.  
  22883.     user-identification.user-supplied-name.LIST
  22884.  
  22885.   If dsname is not specified and the first operand of PLI specifies a member of 
  22886.   a partitioned data set, the member name is ignored- the generated data set 
  22887.   name is based on the name of the partitioned data set. 
  22888.  
  22889.  
  22890. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22891.  
  22892.   If n is omitted, the preceding comma must be included. For example, to enter 
  22893.   only the size of the secondary allocation and accept the default for the 
  22894.   primary you would enter: 
  22895.  
  22896.     PRINT(printds,,500)
  22897.  
  22898.   The space allocation used if n and m are not specified is the allocation 
  22899.   specified during compiler installation. 
  22900.  
  22901.  
  22902. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22903.  
  22904.   and m specify the space allocation in lines for the listing data set. They 
  22905.   should be used when the size of the listing has caused a B37 abend during 
  22906.   compilation. 
  22907.  
  22908.   n specifies the number of lines in the primary allocation. 
  22909.  
  22910.   If n is omitted, the preceding comma must be included. For example, to enter 
  22911.   only the size of the secondary allocation and accept the default for the 
  22912.   primary you would enter: 
  22913.  
  22914.     PRINT(printds,,500)
  22915.  
  22916.   The space allocation used if n and m are not specified is the allocation 
  22917.   specified during compiler installation. 
  22918.  
  22919.  
  22920. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22921.  
  22922.   and n specify the space allocation in lines for the listing data set. They 
  22923.   should be used when the size of the listing has caused a B37 abend during 
  22924.   compilation. 
  22925.  
  22926.   m specifies the number of lines in the secondary allocation. 
  22927.  
  22928.   The space allocation used if n and m are not specified is the allocation 
  22929.   specified during compiler installation. 
  22930.  
  22931.  
  22932. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22933.  
  22934. SYSPRINT 
  22935.   specifies that the compiler listing, on the SYSPRINT file, is to be written 
  22936.   to the sysout class named in parentheses. If no class is specified, the 
  22937.   output is written to a default sysout class. The IBM-supplied default is 
  22938.   class A. 
  22939.  
  22940.  
  22941. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22942.  
  22943. sysout-class 
  22944.   specifies the sysout class to which the compiler listing, on the SYSPRINT 
  22945.   file, is to be written. If no class is specified, the output is written to a 
  22946.   default sysout class. The IBM-supplied default is class A. 
  22947.  
  22948.  
  22949. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22950.  
  22951. NOPRINT 
  22952.   specifies that the compiler listing is not produced on the SYSPRINT file. You 
  22953.   can still get most of the listing written at the terminal by using the 
  22954.   TERMINAL compiler option. 
  22955.  
  22956.  
  22957. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22958.  
  22959. LIB(dslist) 
  22960.   specifies one or more data sets that are used as the secondary input to the 
  22961.   preprocessor. These data sets are concatenated in the order specified and 
  22962.   then associated with the ddname in the %INCLUDE statement in the PL/I 
  22963.   program. You must allocate the data sets associated with that ddname 
  22964.   yourself. 
  22965.  
  22966.   The data sets can be either fully qualified (each enclosed in single 
  22967.   quotation marks) or simple names (for which the prompter adds the 
  22968.   identification qualifier, but no descriptive qualifier). 
  22969.  
  22970.   Separate the data set names by at least one blank or one comma; you can add 
  22971.   any number of extra blanks. 
  22972.  
  22973.   If you use the LIB operand, either the INCLUDE or the MACRO compiler option 
  22974.   must also apply. 
  22975.  
  22976.  
  22977. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22978.  
  22979. PRINT 
  22980.   specifies that the listing file is directed to the PRINTER and is not placed 
  22981.   on a disk. 
  22982.  
  22983.  
  22984. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22985.  
  22986. DISK 
  22987.   specifies that the listing file is placed on a disk. 
  22988.  
  22989.  
  22990. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22991.  
  22992. TYPE 
  22993.   specifies that the listing file is displayed on your terminal and is not 
  22994.   placed on a disk. 
  22995.  
  22996.  
  22997. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  22998.  
  22999. NOPRINT 
  23000.   specifies that the listing file is not produced. 
  23001.  
  23002.  
  23003. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  23004.  
  23005. OBJECT 
  23006.   An additional facility, OBJECT[(file name)] allows you to specify a different 
  23007.   name for your file. 
  23008.  
  23009.   In the OBJECT option specification, "file name" is the name that will be 
  23010.   given to the text file. If it is omitted, the text file will be given the 
  23011.   same name as the file specified in the PLIOPT command. The text file will be 
  23012.   placed on one of your disks in accordance with the following rules: 
  23013.  
  23014.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  23015.     Γöé IF THE DISK THAT CONTAINS THE   Γöé  THEN THE DISK THAT CONTAINS THE     Γöé
  23016.     Γöé PL/I SOURCE FILE IS ACCESSED... Γöé  OUTPUT FILES (TEXT, LISTING) IS:    Γöé
  23017.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  23018.     Γöé Read/Write...                   Γöé  the disk that holds the PL/I source.Γöé
  23019.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  23020.     Γöé as an extension of a            Γöé  the Read/Write disk.                Γöé
  23021.     Γöé READ/WRITE disk...              Γöé                                      Γöé
  23022.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  23023.     Γöé as an extension of a Read-only  Γöé  the A-disk.                         Γöé
  23024.     Γöé Disk and the A-disk is accessed Γöé                                      Γöé
  23025.     Γöé Read/Write...                   Γöé                                      Γöé
  23026.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  23027.     Γöé as an extension of a Read-only  Γöé  ERROR  DMSPLI006E- program          Γöé
  23028.     Γöé Disk and the A-disk is accessed Γöé  terminates.                         Γöé
  23029.     Γöé Read Only...                    Γöé                                      Γöé
  23030.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  23031.  
  23032.