USAGE 句は、コンピューター メモリまたはファイル レコード内のデータ項目のフォーマットを指定します。
一部の環境では、データ項目のファイル レコード フォーマットは、USAGE 句によって指定されたコンピューター メモリ フォーマットと異なる場合があります。この状況は、異なるデータ保存フォーマットをもつ COBOL 以外のファイル システムに、インターフェイスを通してアクセスしている場合に発生する可能性があります。例えば、Acu4GL は SQL を使用して COBOL 以外のファイル システムにアクセスし、そのプロセスでは、データの変換が発生します。
一般的なフォーマット
[ USAGE IS ] {COMPUTATIONAL } {COMP } {COMPUTATIONAL-1 } {COMP-1 } {COMPUTATIONAL-2 } {COMP-2 } {COMPUTATIONAL-3 } {COMP-3 } {COMPUTATIONAL-4 } {COMP-4 } {COMPUTATIONAL-5 } {COMP-5 } {COMPUTATIONAL-6 } {COMP-6 } {COMPUTATIONAL-X } {COMP-X } {COMPUTATIONAL-N } {COMP-N } {BINARY } {PACKED-DECIMAL } {DISPLAY } {INDEX } {POINTER } {FLOAT } {DOUBLE } {SIGNED-SHORT } {UNSIGNED-SHORT } {SIGNED-INT } {UNSIGNED-INT } {SIGNED-LONG } {UNSIGNED-LONG } {HANDLE [ OF {WINDOW } ] } {SUBWINDOW } {FONT [font-name] } {control-type } {THREAD } {MENU } {VARIANT } {LAYOUT-MANAGER [layout-name] }
構文規則
COMP COMPUTATIONAL COMP-1 COMPUTATIONAL-1 COMP-2 COMPUTATIONAL-2 COMP-3 COMPUTATIONAL-3 COMP-4 COMPUTATIONAL-4 COMP-5 COMPUTATIONAL-5 COMP-6 COMPUTATIONAL-6 COMP-X COMPUTATIONAL-X COMP-N COMPUTATIONAL-N
01 F-DATA-1 USAGE IS FLOAT VALUE IS 3.97E+24.
C 型データ タイプのデータ記述項には、BLANK WHEN ZERO、JUSTIFIED、または PICTURE の句を含めることができません。
一般規則
「9」の数 | デフォルト | -D1 | -Dm | -D7 |
---|---|---|---|---|
1-2 | 2 | 1 | 1 | 1 |
3-4 | 2 | 2 | 2 | 2 |
5-6 | 4 | 4 | 3 | 3 |
7 | 4 | 4 | 4 | 3 |
8-9 | 4 | 4 | 4 | 4 |
10-11 | 8 | 8 | 5 | 5 |
12 | 8 | 8 | 6 | 5 |
13-14 | 8 | 8 | 6 | 6 |
15-16 | 8 | 8 | 7 | 7 |
17-18 | 8 | 8 | 8 | 8 |
19 | 12 | 12 | 9 | 8,9 |
20 | 12 | 12 | 9 | 9 |
21 | 12 | 12 | 9 | 9 |
22 | 12 | 12 | 10 | 10 |
23 | 12 | 12 | 10 | 10 |
24 | 12 | 12 | 11 | 10,11 |
25 | 12 | 12 | 11 | 11 |
26 | 12 | 12 | 11 | 11 |
27 | 12 | 12 | 12 | 12 |
28 | 12 | 12 | 12 | 12 |
29 | 16 | 16 | 13 | 13 |
30 | 16 | 16 | 13 | 13 |
31 | 16 | 16 | 13 | 13 |
COMP-5 データ項目のフォーマットは、データが機種依存性のあるフォーマットで保存されることを除いて、COMP-4 データ項目と同じです。データはホスト マシン固有の順序で保存されます。例えば、PIC S9(9) COMP-5 データ項目はホスト マシン上の 32 ビットの 2 進ワードに相当し、PIC S9(20) COMP-5 項目は 64 ビットのワードに相当します。
COMP-5 データ項目の VALUE 句は、機種依存性のないフォーマットで保存され、データ項目にロードされるときに調整されます。これによって、マシンが異なる場合でも、値は同じであることが保証されます。
COMP-5 項目への算術的および非算術的保存において切り捨てが必要な場合、ACUCOBOL-GT は、デフォルトで PICTURE 句で与えられた桁数に 10 進数で切り捨てます。「--TruncANSI」コンパイラ オプションを使用して、COMP-5 項目の割り当てられた保存領域の容量にまで 2 進数での切り捨てを強制的に行うことができます。「-Dz」および「--noTrunc」オプションも切り捨てを行います。詳細については、Book 1 の項 2.1.9 『データ記憶オプション』を参照してください。
COMP-5 であるレベル 01 およびレベル 77 データ項目は、コンパイル時の設定にかかわらず、適切なマシン境界に自動的に同期化されます。これによって、整列を考慮しなくても、これらの項目を C サブルーチンに安全に渡すことができるようになります。
COMP-5 が PIC X(n) データ項目とともに使用され、英数字の値が割り当てられた場合、結果は不定です。例えば、次のコード フラグメントでは、NUMは不定の数を持ち、その結果、最後の行の値は「100」になります。
NUM PIC X(5) COMP-5. ALPHANUM PIC X(9). MOVE "ABC" TO NUM. MOVE "1,000" TO NUM. MOVE ALPHANUM TO NUM. MOVE "100" TO NUM.
COMP-5 とともに使用される PIC X(n) データ項目には、符号を付けることができません。
項目のピクチャ文字列での「9」シンボルの数にかかわらず、COMP-X 項目に保存できる最大値は、それに割り当てられたバイト数で決定されます (最大 18 桁、または 31 桁のサポートがある場合には最大 31 桁)。例えば、1 バイトで構成される COMP-X 項目は、0 ~ 255 の範囲の数を保持できます。2 バイトの COMP-X の数字は、0 ~ 65535 を保持できます。サイズ エラーは、データ項目が物理的に保持できないほど値が大きい場合にのみ、COMP-X 項目で発生します。COMP-X が PIC(X) データ項目とともに使用される場合、最大値は PIC X(8) です(この最大値は、31 桁のサポートがある場合には PIC X(16) に引き上げられます)。
ポインター データ項目は 8 バイトを占めます。これは 64 ビットのマシン上でアドレスを保持するための十分なスペースを提供します。より小さいマシンでは、ランタイムはポインター データ項目の最初の 4 バイトのみを使用します (後続の 4 バイトは未使用のままメモリ内に残る)。「-Dw」コンパイル時間オプションを使用して、ポインター データ項目に割り当てられたスペースを調整できます。64 ビットのマシンを使用しないことがわかっている場合には、この方法で記憶容量を節約することができます。
ポインターは条件式で使用できます。条件式では、ポインターは相互に、または値 NULL と比較できます。ポインターに関連する比較は、「等しい」または「等しくない」のいずれかである必要があります(「大きい」および「小さい」という比較は許可されていない)。
POINTER 項目であるレベル 01 およびレベル 77 データ項目は、コンパイル時の設定にかかわらず、適切なマシン境界に自動的に同期化されます。これによって、整列を考慮しなくても、これらの項目を C サブルーチンに安全に渡すことができるようになります。
自動同期化を除いて、USAGE POINTER データ項目は、すべての点において、USAGE UNSIGNED-LONG データ項目と同様に処理されます。これで、現在のすべてのマシンが正しく処理されます。この動作は、将来のマシンの要件を満たすために変更される可能性があります。
USAGE FLOAT または DOUBLE であるレベル 01 およびレベル 77 データ項目は、コンパイル時の設定にかかわらず、適切なマシン境界に自動的に同期化されます。これによって、整列を考慮しなくても、これらの項目を C サブルーチンに安全に渡すことができるようになります。
保存規則は、USAGE DISPLAY、COMP-2、および COMP-3 データ タイプでのデータの表示方法に影響を与えます。標準の ASCII 保存である USAGE DISPLAY では、符号が桁位置に組み込まれている場合、その桁は次の表に従って符号化されます。
USAGE DISPLAY
桁の値 | -Dca、
-Dcb、 -Dcm、 -Dcr 正 |
-Dci、
-Dcn 正 |
-Dca、
-Dci、 -Dcn 負 |
-Dcb
負 |
-Dcm
負 |
-Dcr
負 |
---|---|---|---|---|---|---|
0 | '0' | '{' | '}' | '@' | 'p' | ' ' (スペース) |
1 | '1' | 'A' | 'J' | 'A' | 'q' | '!' |
2 | '2' | 'B' | 'K' | 'B' | 'r' | '"' (二重引用符) |
3 | '3' | 'C' | 'L' | 'C' | 's' | '#' |
4 | '4' | 'D' | 'M' | 'D' | 't' | '$' |
5 | '5' | 'E' | 'N' | 'E' | 'u' | '%' |
6 | '6' | 'F' | 'O' | 'F' | 'v' | '&' |
7 | '7' | 'G' | 'P' | 'G' | 'w' | ''' (一重
引用符) |
8 | '8' | 'H' | 'Q' | 'H' | 'x' | '(' |
9 | '9' | 'I' | 'R' | 'I' | 'y' | ')' |
シンボル「{」および「}」がないシステムとのインポートの互換性のために、USAGE DISPLAY を使用する項目を読み取る場合、シンボル「[」および「?」は「{」に相当するとみなされ、シンボル「]」、「:」、および「!」は、「}」に相当するとみなされます。
次の 2 つの表は、「-Dca」、「-Dcb」、「-Dci」、「-Dcm」、「-Dcn」、「-Dcr」、および「-Dcv」の保存規則を使用している場合の COMP-2 および COMP-3 項目の符号表示を示します。COMP-2 では、末尾バイトが符号に確保されます。COMP-3 では、末尾ハーフバイトが符号に確保されます。
USAGE COMP-2
USAGE COMP-3
これらの USAGE タイプは、(USAGE INDEX や POINTER と同様に) PICTURE 句なしで指定されます。
タイプの名前は次のとおりです。
これらはそれぞれマシンに固有のバイト順を使用して保存される 2 進値を表します。PICTURE 句がないため、これらの項目のサイズ チェックは、バイト境界でのみ行われます。これらのデータ タイプは、自動的に同期化されます。
これらのデータ タイプの珍しい特性は、そのサイズが必ずしもコンパイル時に設定されないことです。その代わりに、これらの項目のサイズは実行時に決定されます。これによって、これらの項目をホスト マシンの作業特性に一致させることができます。例えば、SIGNED-LONG データ項目は、DEC Alpha マシンで動作する場合には 64 ビットを含みますが、Intel 80486 ベースのマシンで動作する場合には 32 ビットを含みます。このため、対象の環境にかかわらず、別の言語 (C など) で書かれた外部ルーチンと有効に通信できる 1 つのプログラムを書くことができます。
メモリを配置するために、コンパイラはこれらの各データ タイプに最大サイズを割り当てます。これは項目が占めるバイト数です。ランタイムでは、これらの項目は、ホスト マシンの特性に合わせてサイズが縮小される場合があります。次に、残りのバイトは FILLER として処理されます。「-Dw」コンパイル オプション(『ユーザーズガイド』の 2.1.9『データ記憶オプション』を参照)は、これらのタイプの最大サイズを決定します。
アスタリスクが付いている表項目は、固定サイズの項目を示します。固定サイズの項目は、対象のマシンにかかわらず同じサイズです。アスタリスクのない項目は、サイズが不定です。これらの項目は、最大で表に示したバイト数のスペースを占めます。
実行環境では、これらの項目は、すべての点で、適切なサイズをもつ固定サイズのデータ項目であるかのように動作します。
例えば、次のコード フラグメント:
77 LONG-1 SIGNED-LONG. 77 SIZE-1 PIC 9. SET SIZE-1 TO SIZE OF LONG-1. DISPLAY SIZE-1.
は、32 ビットのマシンで動作する場合には「4」を印刷しますが、64 ビットのマシンで動作する場合には「8」を印刷します。
例
次の例では、各バイトは 2 つの 16 進数字または一重引用符付き文字によって表されます。各値はさまざまなフォーマットで表示されます。USAGE DISPLAY も、さまざまな SIGN オプションを使用して表示されます。次の例では、デフォルトの ACUCOBOL-GT 符号保存規則を使用します。
PIC 9(3) VALUE 123. TRAILING '1' '2' '3' TRAILING SEPARATE '1' '2' '3' LEADING '1' '2' '3' LEADING SEPARATE '1' '2' '3' COMP-1 00 7B COMP-2 01 02 03 COMP-3 12 3F COMP-4 00 7B COMP-5(68000) 00 7B COMP-5(8086) 7B 00 COMP-6 01 23 PIC S9(3) VALUE -123. TRAILING '1' '2' 'L' TRAILING SEPARATE '1' '2' '3' '-' LEADING 'J' '2' '3' LEADING SEPARATE '-' '1' '2' '3' COMP-1 FF 85 COMP-2 01 02 03 0D COMP-3 12 3D COMP-4 FF 85 COMP-5(68000) FF 85 COMP-5(8086) 85 FF COMP-6 illegal PIC 9(5)V9 VALUE 12345.6. TRAILING '1' '2' '3' '4' '5' '6' TRAILING SEPARATE '1' '2' '3' '4' '5' '6' LEADING '1' '2' '3' '4' '5' '6' LEADING SEPARATE '1' '2' '3' '4' '5' '6' COMP-1 illegal COMP-2 01 02 03 04 05 06 COMP-3 01 23 45 6F COMP-4 00 01 E2 40 COMP-5(68000) 00 01 E2 40 COMP-5(8086) 40 E2 01 00 COMP-6 12 34 56 PIC S9(5)V9 VALUE -12345.6. TRAILING '1' '2' '3' '4' '5' '0' TRAILING SEPARATE '1' '2' '3' '4' '5' '6' '-' LEADING 'J' '2' '3' '4' '5' '6' LEADING SEPARATE '-' '1' '2' '3' '4' '5' '6' COMP-1 illegal COMP-2 01 02 03 04 05 06 0D COMP-3 01 23 45 6D COMP-4 FF FE 1D C0 COMP-5(68000) FF FE 1D C0 COMP-5(8086) C0 1D FE FF COMP-6 illegal
HANDLE データ項目には、型付きと汎用の 2 つの形式があります。OF 句を除外すると、汎用ハンドルを作成します。OF 句を含めると、型付きハンドルを作成します。
ACCEPT data-item FROM STANDARD OBJECT "font-name"
この場合、data-item は USAGE 句によって記述されたデータ項目で、font-name は USAGE 句内の font-name と同じです。