自由形式の演算ステートメント

自由形式演算は、8-80 桁目にコーディングされます。6-7 桁目はブランクでなければなりません。

自由形式ステートメントでは、命令コードは 8 から 80 桁内の特定の桁で始まる必要はありません。 すべての拡張は、同一行上の命令コードの直後に、括弧で囲む必要があります。 命令コードおよび拡張の間には、ブランクを入れないでください。 命令コードおよび拡張の次に、演算項目 1、演算項目 2、結果フィールド・オペランドをブランクで分離して指定します。 これらのいずれかのオペランドが命令に必要ない場合、空白のままにしておきます。 ステートメントの残りの部分は、ブランクおよび継続行を自由に使用できます。 それぞれのステートメントは、セミコロンで終了する必要があります。 セミコロンの後ろのレコードの残り部分は、ブランクになっているか、ま たは行末コメントを含んでいる必要があります。

命令コード EVAL または CALLP において、拡張が不要で、変数またはプロトタイプの名前が命令コードの名前と異なる場合には、命令コードを省略できます。 例えば、以下の 2 つのステートメントは同等です。
 eval pos = %scan (',': name);
 pos = %scan (',': name);

自由形式演算ブロック内のすべてのレコードは、6 から 7 桁目をブランクにしておく必要があります。

コンパイラー指示は、以下の制約事項に沿って、自由形式演算ブロック内に指定できます。
自由形式のオペランドは、14 文字よりも長くすることができます。 以下はサポートされていません。

変更の始まり 合計演算の開始を示すには、7 から 8 桁目に指定されている制御レベルを使用して、 固定形式演算仕様書をコード化します。合計演算は、自由形式演算構文を使用して指定することができます。 自由形式演算仕様書には、制御レベルの記入項目が含まれていないため、 特定のレベルの中断で実行される演算は、「IF *INLx;」ステートメントを使用して条件付けを行う必要があります。 変更の終わり

  1. 明細演算
  2. 合計演算の開始
  3. 特定の制御レベル標識による演算の条件付け
    items += 1;                  1 
CL0   Total         TAG          2 
    IF *INL1;                    3 
       EXCEPT orderTotal;
       orders += 1;
       totalItems += items;
       items = 0;
    ENDIF;
図 1. 自由形式演算仕様書の例
 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....

         read  file;              // Get next record
         dow not %eof(file);      // Keep looping while we have
                                  // a record
             if %error;
                 dsply 'The read failed';
                 leave;
             else;
                 chain(n) name database data;
                 time = hours * num_employees
                          + overtime_saved;
                 pos = %scan (',': name);
                 name = %xlate(upper:lower:name);
                 exsr handle_record;
                 read file;
             endif;
         enddo;

      begsr handle_record;
         eval(h) time = time + total_hours_array (empno);
         temp_hours = total_hours - excess_hours;
         record_transaction();
      endsr;

次のように、同一のプログラム内に自由形式の演算仕様書および従来型の演算仕様書を結合できます。

図 2. 従来型演算仕様書および自由形式演算仕様書を結合する例
C                   testb     OPEN_ALL      flags                    10
           if *in10;
            openAllFiles();
           endif;