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 サブルーチンに安全に渡せる。
PIC X(n) データ項目で COMP-5 を使用して、英数字の値を割り当てた場合、結果は未定義となる。たとえば、次のコード フラグメントでは、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 項目では、そのデータ項目が物理的に保持できるよりも値が大きい場合にのみサイズ エラーが発生する。PIC(X) データ項目で COMP-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
-Dca 正 | x'0B' |
-Dcb/-Dci/-Dcm/-Dcn/-Dcr 正 | x'0C' |
-Dca/-Dcb/-Dci/-Dcm/-Dcn/-Dcr 負 | x'0D' |
USAGE COMP-3
-Dca 正 | x'0F' |
-Dcb/-Dci/-Dcm/-Dcr 正 | x'0C' |
-Dca/-Dcb/-Dci/-Dcm/-Dcr 負 | x'0D |
-Dca/-Dcb/-Dci/-Dcm/-Dcr 符号なし | x'0F' |
-Dcv 符号なし | x'0C' |
これらの USAGE 型は、(USAGE INDEX や POINTER と同様に) PICTURE 句なしで指定される。
型の名前は次のとおり。
SIGNED-SHORT | UNSIGNED-SHORT |
SIGNED-INT | UNSIGNED-INT |
SIGNED-LONG | UNSIGNED-LONG |
これらはそれぞれ、マシンに固有のバイト順で格納される 2 進値を表す。PICTURE 指定がないため、これらの項目のサイズ チェックは、バイト境界でのみ行われる。これらのデータ型は、自動的に同期される。
これらのデータ型の珍しい特性は、そのサイズが必ずしも翻訳時に設定されないことである。その代わりに、これらの項目のサイズは実行時に決定される。これにより、それらの項目をホスト マシンの作業特性に一致させることができる。たとえば、SIGNED-LONG データ項目は、DEC Alpha マシンで動作する場合には 64 ビットを含むが、Intel 80486 ベースのマシンで動作する場合には 32 ビットを含む。このため、対象の環境にかかわらず、別の言語 (C など) で書かれた外部ルーチンと効率的に通信できる単一のプログラムを記述できる。
メモリを配置するために、コンパイラはこれらの各データ型に最大サイズを割り当てる。これは項目が占めるバイト数である。これらの項目は、ホスト マシンの特性に合わせて実行時にサイズが縮小される場合がある。次に、残りのバイトは FILLER として処理される。「-Dw」コンパイル オプション (ユーザー ガイドのセクション 2.2.10「データ記憶オプション」を参照) は、これらの型の最大サイズを以下のとおり決定する。
USAGE | -Dw32 | -Dw64 |
---|---|---|
SIGNED-SHORT
UNSIGNED-SHORT |
2* | 2* |
SIGNED-INT
UNSIGNED-INT |
4 | 4 |
SIGNED-LONG
UNSIGNED-LONG |
4* | 8 |
アスタリスクが付いている表項目は、固定サイズの項目を示す。固定サイズの項目は、対象のマシンにかかわらず同じサイズである。アスタリスクのない項目は、サイズが不定である。これらの項目は、最大で、表にリストしたバイト数のスペースを占める。
実行環境では、これらの項目はあらゆる点で、適切なサイズの固定サイズのデータ項目であるものとして動作する。
たとえば、次のコード フラグメントでは、
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 進数または 1 つの一重引用符付き文字によって表される。各値はさまざまな形式で表示される。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 と同じである。