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

変更の始まり自由形式ステートメントで使用可能な桁については、自由形式ステートメントを参照してください。変更の終わり

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

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

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

コンパイラー指示は、以下の制約事項に沿って、自由形式演算ブロック内に指定できます。
  • 変更の始まりコンパイラー指示は、行の最初の項目でなければなりません。 次の行に継続することはできません。変更の終わり
  • 変更の始まり桁制約付きコードでは、指示は 7 桁目以降の任意の位置で開始することができます。変更の終わり
  • コンパイラー指示は、ステートメントでは許可されていません。 指示は、1 つのステートメントの終了後、次のステートメントが始まる前の新規行に表示する必要があります。
自由形式のオペランドは、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;