自由形式演算は、8-80 桁目にコーディングされます。6-7 桁目はブランクでなければなりません。
自由形式ステートメントでは、命令コードは 8 から 80 桁内の特定の桁で始まる必要はありません。 すべての拡張は、同一行上の命令コードの直後に、括弧で囲む必要があります。 命令コードおよび拡張の間には、ブランクを入れないでください。 命令コードおよび拡張の次に、演算項目 1、演算項目 2、結果フィールド・オペランドをブランクで分離して指定します。 これらのいずれかのオペランドが命令に必要ない場合、空白のままにしておきます。 ステートメントの残りの部分は、ブランクおよび継続行を自由に使用できます。 それぞれのステートメントは、セミコロンで終了する必要があります。 セミコロンの後ろのレコードの残り部分は、ブランクになっているか、ま たは行末コメントを含んでいる必要があります。
eval pos = %scan (',': name);
pos = %scan (',': name);
自由形式演算ブロック内のすべてのレコードは、6 から 7 桁目をブランクにしておく必要があります。
合計演算の開始を示すには、7 から 8 桁目に指定されている制御レベルを使用して、
固定形式演算仕様書をコード化します。合計演算は、自由形式演算構文を使用して指定することができます。
自由形式演算仕様書には、制御レベルの記入項目が含まれていないため、
特定のレベルの中断で実行される演算は、「IF *INLx;」ステートメントを使用して条件付けを行う必要があります。 
items += 1; 1
CL0 Total TAG 2
IF *INL1; 3
EXCEPT orderTotal;
orders += 1;
totalItems += items;
items = 0;
ENDIF;
*..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;
次のように、同一のプログラム内に自由形式の演算仕様書および従来型の演算仕様書を結合できます。
C testb OPEN_ALL flags 10
if *in10;
openAllFiles();
endif;