![]() ![]() ![]() ![]() |
"#include <fml.h>"
"#include <fml32.h>"
FML は、フィールド化バッファと呼ばれる記録構造を定義、操作する一連の C 言語関数で、フィールド化バッファにはフィールドと呼ばれる属性と値の対が含まれます。属性はフィールドの識別子であり、対応する値はフィールドのデータ内容を表します。
フィールド化バッファを使用すると、関連したフィールドのセットを名前でアクセスできるので、協調動作するプロセス間でパラメータ化されたデータを受け渡す場合に便利です。他のプロセスとコミュニケートする必要のあるプログラムは、FML ソフトウェアを使用し、フィールドを含む構造体を意識せずにフィールドへのアクセスが可能です。
FML はまた、VIEW
と呼ばれる、フィールド化バッファを C 構造体にマップする (その逆も可能) 機能も提供します。VIEW
はフィールド化バッファではなく構造体間で、大量のデータのやり取りを行います。データを構造体に転送し操作すると、アプリケーションはより高速に実行します。VIEW
を使用すると、フィールド化バッファのデータ独立性と従来のレコード構造の効率性、簡便性を共に享受することができます。
FML には 2 つのサイズがあります。オリジナルの FML インタフェースは、フィールド長に 16 ビットの値を使用して、フィールドを識別する情報を格納します。このマニュアル ページでは、これらを FML16 と呼びます。FML16 では、ユニークなフィールド数は 8191、個々のフィールド長は最大 64K バイト、フィールド化バッファの総容量は 64K に制限されます。このインタフェースの定義、型、および関数のプロトタイプは fml.h
に定義され、FML16 インタフェースを使用するアプリケーション プログラムは、このファイルをインクルードする必要があります。各関数は、-lfml
にあります。FML32 は、フィールド長と識別子に 32 ビットの値を使用します。FML32 では、約 3000 万個のフィールドを含むことができ、フィールド長およびバッファ長は約 20 GB まで使用できます。FML32 の定義、型および関数プロトタイプは、fml32.h
に定義されます。各関数は -lfml32
にあります。FML32 のすべての定義、型、関数名には、接尾辞 "32" が付きます (MAXFBLEN32
、FLDID32
、Fchg32
など)。また、環境変数にも接頭辞 "32" が付きます (FLDTBLDIR32
、FIELDTBLS32
、VIEWFILES32
、VIEWDIR32
など)。
フィールド化バッファは、フィールド識別子とフィールド値の対 (long, short
など固定長フィールドの場合)、またはフィールド識別子、フィールド長、フィールド値の三揃い (可変長フィールドの場合) で構成されます。
フィールド識別子は、フィールド化バッファ内の個々のデータ項目に対するタグで、フィールド番号とフィールドのデータ型で構成されます。FML16 では、フィールド識別子は 1 から 8191 の範囲で、その型定義は FLDID
です。FML32 では、1 ~ 33,554,431 の範囲で、型定義は FLDID32
です。Oracle Tuxedo ATMI システムは、フィールドに関する以下の規則に従っています。
Oracle Tuxedo ATMI システムでは強制的に使用不可にはなっていませんが、アプリケーションが予約番号を使用しないようにしてください。
注意 : | FML または FML32 バッファ内のフィールドがルーティングに使用される場合は、フィールド番号は 8191 以下でなければなりません。 |
フィールドの型は、標準 C 言語の型のいずれでもかまいません (short
、long
、float
、double
、および char
)。ほかに、string
型 (NULL 文字で終了する文字列)、carray
型 (文字配列)、mbstring
型 (マルチバイト文字配列 - Tuxedo リリース 8.1 またはそれ以降で使用可能)、ptr
型 (バッファを指すポインタ)、FML32
型 (埋め込み型の FML32 バッファ)、および VIEW32
型 (埋め込み型の VIEW32 バッファ) がサポートされています (ptr
型、fml32
型、および view32
型は、FML32 インタフェースでのみサポート)。fml.h
では、サポートされているフィールド型は、FLD_SHORT
、FLD_LONG
、FLD_FLOAT
、FLD_DOUBLE
、FLD_CHAR
、FLD_STRING
、および FLD_CARRAY
として定義されています。fml32.h
では、サポートされているフィールド型は、FLD_SHORT
、FLD_LONG
、FLD_FLOAT
、FLD_DOUBLE
、FLD_CHAR
、FLD_STRING
、FLD_CARRAY
、FLD_MBSTRING
、FLD_PTR
、FLD_FML32
、および FLD_VIEW32
として定義されています。
FML16 では、フィールド化バッファのポインタは、FBFR *
型、フィールド長は FLDLEN
型、フィールドのオカレンス数は FLDOCC
型です。FML32 では、フィールド化バッファのポインタは FBFR32 *
型、フィールド長は FLDLEN32
型、フィールドのオカレンス数は FLDOCC32
型です。
フィールドは、FML インタフェースのフィールド識別子により参照されます。ただし通常は、アプリケーション プログラマにはフィールド名を覚える方が簡単です。フィールド名をフィールド識別子にマップするには、2 つの方法があります。
フィールド名と識別子のマッピングは、field_tables(5) に記述されるフィールド テーブル ファイルにより、実行時に FML プログラムで行うことができます。FML16 インタフェースでは、環境変数 FLDTBLDIR
を使用し、フィールド テーブルを検索するディレクトリのリストを指定します。また FIELDTBLS
により、使用するテーブル ディレクトリ内のファイルのリストを指定します。FML32 インタフェースでは、FLDTBLDIR32
と FIELDTBLS32
を使用します。アプリケーション プログラムでは、FML 関数 Fldid()
と Fldid32()
が、実行時にフィールド名をフィールド識別子に変換します。また Fname()
と Fname32()
は、フィールド識別子をフィールド名に変換します。
コンパイル時のフィールド名と識別子のマッピングは、フィールド名のマクロ定義を含むフィールド ヘッダ ファイルを使用して行われます。mkfldhdr()
と mkfldhdr32()
は、フィールド テーブル ファイルからヘッダ ファイルを作成するための関数です (「mkfldhdr、mkfldhdr32(1)」を参照)。これらのヘッダ ファイルは C プログラムの #include
で指定されるファイルで、コンパイル時にフィールド名をフィールド識別子にマップすることができます。
フィールド化バッファ内のフィールドは、複数回出現する場合があります。FML 関数の多くが、検索または変更の対象にするフィールド オカレンスを指定する引数を取ります。フィールドが複数回出現する場合、オカレンスは、最初のオカレンスを 0 として、順次番号付けされます。すべてのオカレンスが集まると、論理的なシーケンスを構成しますが、オカレンス番号に対応するオーバーヘッドはありません (つまり、オカレンス番号はフィールド化バッファに格納されません)。フィールド オカレンスを追加すると、そのオカレンスは、オカレンスの集まりの最後に追加され、一番高い番号より 1 つ高い番号のオカレンスとして参照されます。一番高い番号のオカレンス以外のオカレンスを削除すると、削除されたオカレンスより高い番号のオカレンスはすべて、1 つだけ下位にシフトします (たとえば、オカレンス 6 がオカレンス 5 になり、オカレンス 5 がオカレンス 4 になります)。
フィールド化バッファに多数のフィールドが含まれる場合、内部インデックスを使用すると、FML でのアクセスが促進されます。通常、ユーザはこのインデックスの存在を意識することはありません。フィールド化バッファをディスクに格納したり、プロセス間またはコンピュータ間で転送する場合は、まず Funindex()
または Funindex32()
を使用してこのインデックスを削除すると、ディスク領域や転送時間を節約できます。後でインデックスが必要になれば、Findex()
または Findex32()
を使用して再び作成します。
適切に書かれた既存の FML16 アプリケーションは、容易に FML32 インタフェースを使用するように変更できます。FML 関数の呼び出しに使用する変数は、すべて適切な typedef (FLDID
、FLDLEN
、および FLDOCC
) により定義されている必要があります。FML 型付きバッファのための tpalloc()
呼び出しには、FML ではなく FMLTYPE
定義を使用します。アプリケーションのソース コードに、fml.h
の代わりに fml32.h
を指定し、fml1632.h
を組み込むことで 32 ビットの関数を使用できるようになります。fml1632.h
には、すべての 16 ビットの型定義を 32 ビット版に変換したり、16 ビットの関数やマクロを 32 ビット版に変換するマクロが含まれています。
VIEWS
は、フィールド操作言語の一部です。この機能を使用すると、フィールドと C 構造体のメンバーとのマッピングの指定によって、フィールド化バッファと C 言語プログラムの C 構造体の間でデータを受け渡しすることができます。フィールド化バッファ情報を大量に操作する場合は、データを C 構造体内に転送するとパフォーマンスが向上します。VIEWS
関数でフィールド化バッファ内の情報をバッファ内のフィールドから抽出して C 構造体に入れ、C 構造体内でデータを操作した後、再度 VIEWS
関数を使用して、更新した値をフィールド化バッファに戻すことができます。
型付きバッファは、フィールド化バッファという FML の概念に基づいた ATMI 環境の機能の 1 つです。ATMI 環境と共に納入される 2 種類の標準バッファは、FML 型付きバッファと VIEW
型付きバッファです。このバッファがさらに異なる点は、VIEW
バッファは FML フィールド化バッファとの関連性がまったくなくてもよいということです。また FML32
と VIEW32
のバッファ型が使用される点でも異なります。
VIEW 記述は、「viewfile(5)」で解説されるようにソース viewfile に作成、格納されます。VIEW 記述は、フィールド化バッファ内のフィールドを C 構造体内のメンバーにマップします。ソース VIEW 記述は、viewc()
または viewc32()
でコンパイルされ、VIEW オブジェクト ファイルが生成されます。これは、フィールド化バッファと C プログラムの C 構造体の間で転送されるデータのマッピングに使用されます (詳細については、「viewc、viewc32(1)」を参照)。また、VIEW コンパイラはアプリケーション プログラムにインクルードする C 言語のヘッダ ファイルを作成し、VIEW 記述で記述される構造体を定義します。VIEW 逆アセンブラである viewdis()
または viewdis32()
は、オブジェクト VIEW 記述を読み取り可能な形式に変換する (つまり、ソース VIEW 記述に戻す) ためのものです。逆アセンブラの出力は、VIEW コンパイラに再入力できます (詳細については、「viewdis、viewdis32(1)」を参照)。
オブジェクト ファイルは実行時に使用され、VIEWFILES
と VIEWDIR
環境変数を用いて VIEW
構造体を操作します。VIEWFILES
には、アプリケーションのためのコンマで区切ったオブジェクト viewfile のリストが含まれている必要があります。絶対パス名で指定されたファイルはそのまま使用されます。相対パス名でリストされたファイルは VIEWDIR
変数により指定されたディレクトリのリストにあるかどうかが検索されます (下記参照)。VIEWDIR
は、相対ファイル名を持つ VIEW オブジェクト ファイルの検索に使用する、コンマで区切られたディレクトリ リストを指定します。VIEW32
構造では、VIEWFILES32
および VIEWDIR32
が使用されます。
大半の FML 関数によってサポートされているデータ型以外に、VIEWS
はソース VIEW 記述内で int
型を間接的にサポートします。VIEW 記述がコンパイルされると、VIEW コンパイラは、使用中のマシンの種類によって、すべての int
型を short 型か long 型に自動的に変換します。
VIEWS
は、10 進数データ型もサポートしています。これは dec_t
型のフィールドとして定義され、パック 10 進数の値は総バイト数と小数点以下のバイト数として表されます。このようなフィールドは、FML では直接サポートされていませんが、このフィールドと、FML でサポートされているほかのフィールドとの変換は自動的に行われます。パック 10 進数は、COBOL 環境では 2 桁の 10 進数が 1 バイトにパックされ、下位バイトに符号が格納されます。C 環境では、データ型は 10 進指数、符号、桁、およびパック 10 進数の値を含む dec_t
型定義で定義されます。
FML バッファは、Fvftos()
または Fvftos32()
を使用して、VIEW に変換できます。view は、Fvstof()
または Fvstof32()
を使用して、フィールド化バッファに変換できます。フィールド化バッファと構造体の間でデータ転送を行うと、ソース データは自動的に宛て先データの型に変換されます。フィールドの複数オカレンスがサポートされています。これは構造体中の配列として扱われます。NULL 値は構造体の空のメンバーを表すのに使用し、viewfile の構造体の各メンバーに対して指定できます。メンバーに NULL 値を指定しないと、省略時の NULL 値が使用されます。また C 構造体のメンバーとフィールド化バッファ内のフィールドの間にマッピングが存在していても、それらの間でのデータの転送を禁止することができます。
VIEW
は、目標レコード形式からの変換、または目標レコード形式への変換もできます。デフォルトの形式は、IBM System/370 の COBOL レコードです。Fvstot()
関数がバイトの位、浮動小数点や 10 進数形式、および文字セットの変換を処理し (ASCII から EBCDIC へ)、Fvttos()
が本来の形式に戻します。これらの関数には、32 ビット バージョンもあります。Fcodeset()
関数は、代替 ASCII/EBCDIC トランザクション テーブルの指定に使用できます。
ほとんどの FML 関数は、1 つまたは複数の戻り値を返します。エラーの条件は、エラーの他には考えられない戻り値で示されます。通常、エラーであれば -1、不正なフィールド識別子 (BADFLDID
) またはアドレスであれば 0 です。またエラー タイプが、外部整数 Ferror
(FML16 の場合)、あるいは Ferror32
(FML32 の場合) として得られます。Ferror
と Ferror32
は、正常呼び出しではクリアされないので、エラーが示された後でのみテストします。
F_error()
と F_error32()
関数は、標準エラー出力にメッセージを出力します。この関数は、パラメータを 1 つ (文字列) 取り、コロンと空白を付加してその引数文字列を出力します。次に、エラー メッセージとその後に続く改行文字を出力します。表示されるエラー メッセージは、エラー発生時に設定された Ferror
と Ferror32
内の現在のエラー番号に対して定義されているメッセージです。
メッセージ カタログからエラー メッセージのテキストを検索するには、Fstrerror(3fml)
を使用することができます。これらは、userlog(3c) への引数として使用できるポインタを返します。
エラー コードのうち、FML 機能で生成できるものについては、マニュアルの FML の項目で説明しています。
CFadd、CFadd32(3fml)
、CFchg、CFchg32(3fml)
、CFfind、CFfind32(3fml)
、CFfindocc、CFfindocc32(3fml)
、CFget、CFget32(3fml)
、CFgetalloc、CFgetalloc32(3fml)
、F_error、F_error32(3fml)
、Fadd、Fadd32(3fml)
、Fadds、Fadds32(3fml)
、Falloc、Falloc32(3fml)
、Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)
、Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)
、Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)
、Fchg、Fchg32(3fml)
、Fchgs、Fchgs32(3fml)
、Fchksum、Fchksum32(3fml)
、Fcmp、Fcmp32(3fml)
、Fconcat、Fconcat32(3fml)
、Fcpy、Fcpy32(3fml)
、Fdel、Fdel32(3fml)
、Fdelall、Fdelall32(3fml)
、Fdelete、Fdelete32(3fml)
、Fextread、Fextread32(3fml)
、Ffind、Ffind32(3fml)
、Ffindlast、Ffindlast32(3fml)
、Ffindocc、Ffindocc32(3fml)
、Ffinds、Ffinds32(3fml)
、Ffloatev、Ffloatev32、Fvfloatev、Fvfloatev32(3fml)
、Ffprint、Ffprint32(3fml)
、Ffree、Ffree32(3fml)
、Fget、Fget32(3fml)
、Fgetalloc、Fgetalloc32(3fml)
、Fgetlast、Fgetlast32(3fml)
、Fgets、Fgets32(3fml)
、Fgetsa、Fgetsa32(3fml)
、Fidnm_unload、Fidnm_unload32(3fml)
、Fidxused、Fidxused32(3fml)
、Fielded、Fielded32(3fml)
、Findex、Findex32(3fml)
、Finit、Finit32(3fml)
、Fjoin、Fjoin32(3fml)
、Fldid、Fldid32(3fml)
、Fldno、Fldno32(3fml)
、Fldtype、Fldtype32(3fml)
、Flen、Flen32(3fml)
、Fmkfldid、Fmkfldid32(3fml)
、Fmove、Fmove32(3fml)
、Fname、Fname32(3fml)
、Fneeded、Fneeded32(3fml)
、Fnext、Fnext32(3fml)
、Fnmid_unload、Fnmid_unload32(3fml)
、Fnum、Fnum32(3fml)
、Foccur、Foccur32(3fml)
、Fojoin、Fojoin32(3fml)
、Fpres、Fpres32(3fml)
、Fprint、Fprint32(3fml)
、Fproj、Fproj32(3fml)
、Fprojcpy、Fprojcpy32(3fml)
、Fread、Fread32(3fml)
、Frealloc、Frealloc32(3fml)
、Frstrindex、Frstrindex32(3fml)
、Fsizeof、Fsizeof32(3fml)
、Fstrerror、Fstrerror32(3fml)
、Ftypcvt、Ftypcvt32(3fml)
、Ftype、Ftype32(3fml)
、Funindex、Funindex32(3fml)
、Funused、Funused32(3fml)
、Fupdate、Fupdate32(3fml)
、Fused、Fused32(3fml)
、Fvall、Fvall32(3fml)
、Fvals、Fvals32(3fml)
、Fvftos、Fvftos32(3fml)
、Fneeded、Fneeded32(3fml)
、
Fvnull、Fvnull32(3fml)
、Fvopt、Fvopt32(3fml)
、Fvselinit、Fvselinit32(3fml)
、Fvsinit、Fvsinit32(3fml)
、Fvstof、Fvstof32(3fml)
、Fwrite、Fwrite32(3fml)
、field_tables(5)、viewfile(5)
『FML を使用した Oracle Tuxedo アプリケーションのプログラミング』
CFadd()
、CFadd32()
- フィールドの変換および追加
#include <stdio.h>
#include "fml.h"
int CFadd(FBFR *fbfr
, FLDIDfieldid
, char *value
, FLDLENlen
, inttype
)
#include fml32.h>
int
CFadd32(FBFR32 *fbfr
, FLDID32fieldid
, char *value
, FLDLEN32len
, inttype
)
CFadd()
は、Fadd()
に似た動きをしますが、CFadd は、フィールド化バッファにフィールドが追加される場合、value
をユーザ指定の型から fieldid
型に変換します。fbfr
は、フィールド化バッファを指すポインタです。fieldid
は、フィールド識別子です。value
は、追加される値を指すポインタです。len
は、追加される値の長さです。len は、FLD_CARRAY
型の場合のみ必要です。type
は、value
内のフィールドのデータ型です。
バッファにフィールドが追加される前に、データ項目の型は、ユーザが提供した型から fieldid
で指定された型に変換されます。ソース タイプが FLD_CARRAY
(任意の文字配列) である場合、len
引数は、配列の長さに設定される必要があります。その他の場合、長さは無視されます。C 言語が、12345L のような構成を許していないために、変換され、追加されるフィールドの値は、最初に、変数 value
に入れられる必要があります。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。CFadd()
または CFadd32()
が使用されているとき、これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
CFadd32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行している場合でも、CFadd()
または CFadd32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFadd()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FEINVAL
]
FNOSPACE
]
FBADFLD
]
FTYPERR
]
FEBADOP
]
CFchg()
、CFchg32()
- フィールドの変換および変更
#include <stdio.h>
#include "fml.h"
int CFchg(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, char *value
,
FLDLENlen
, inttype
)
#include "fml32.h"
int CFchg32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
,
char *value
,
FLDLEN32len
, inttype
)
CFchg()
は、Fchg()
に似た働きをしますが、フィールドがフィールド化バッファにおいて変更されるために、最初に、ユーザ指定の type
から fieldid
型に value
を変換します。
fbfr
は、フィールド化バッファを指すポインタです。fieldid
は、フィールド識別子です。oc
は、フィールドのオカレンス番号です。value
は、新しい値に対するポインタです。len
は、変更される値の長さです。len は、型が FLD_CARRAY
の場合のみ必要です。type は value のデータ型です。
存在しないフィールド オカレンスが指定された場合、必要とされる値が追加されるまで、存在しないオカレンスに NULL 値が追加されます (たとえば、バッファに存在しないフィールドのフィールド オカレンスを 4 に変更すると、3 個の NULL 値の後に指定されたフィールド値が追加されます)。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。CFchg()
または CFchg32()
が使用されている場合に、これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
CFchg32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、CFchg()
または CFchg32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFchg()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FEINVAL
]
FNOSPACE
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FEBADOP
]
「FML 関数の紹介」、CFadd、CFadd32(3fml)
、Fchg、Fchg32(3fml)
CFfind()
、CFfind32()
- 検索、変換してポインタを返す
#include <stdio.h>
#include "fml.h"
char * CFfind(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, FLDLEN *len
,
inttype
)
#include "fml32.h"
char *
CFfind32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, FLDLEN32 *len
,
inttype
)
CFfind()
は、バッファ内の指定されたフィールドを検索し、それを変換してからその変換した値を指すポインタを返します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。len は、出力時に使用されるもので変換された値の長さを指すポインタです。type は、ユーザが変換したいフィールドの変換後のデータ型です。
Ffind()
と同じように、関数が返すポインタは、読み取り専用です。変換された値は 1 つのプライベート バッファに保持されているので、CFfind()
が返すポインタの妥当性は、次のバッファ操作までしか保証されません (たとえその操作が非破壊的である場合でも)。これは、Ffins()
が返す値と違う点です。つまり、バッファを次に変更するまで保証されます。Ffind()
とは異なり、CFfind()
は、呼び出し側が直接使用できるように変換した値を整列させます。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。CFfind()
または CFfind32()
が使用されている場合に、これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
CFfind32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、CFfind()
または CFfind32()
を呼び出すことができます。
上記の「形式」の項では、CFfind()
の戻り値のデータ型は、char ポインタ (C の char **
) として記述されています。実際、返されるポインタは、格納済みのフィールドの型と同じ型を持つオブジェクトを指しています。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFfind()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FEBADOP
]
「FML 関数の紹介」、Ffind、Ffind32(3fml)
CFfindocc()
、CFfindocc32()
- 変換された値のオカレンスの検索
#include <stdio.h>
#include "fml.h"
FLDOCC
CFfindocc(FBFR *fbfr
, FLDIDfieldid
, char *value
, FLDLENlen
, int
type
)
#include "fml32.h"
FLDOCC32
CFfindocc32(FBFR32 *fbfr
, FLDID32fieldid
, char *value
, FLDLEN32
len
, inttype
)
CFfindocc()
は、Ffindocc()
に似た働きをしますが、最初に、ユーザ指定の型 value を fieldid 型に変換します。CFfindocc()
は、ユーザが提供する値、長さ、および型と一致するバッファにある指定されたフィールドのオカレンスを検索します。CFfindocc()
は、最初に一致したフィールドのオカレンス番号を返します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。value は、検索される値を指すポインタです。型が FLD_CARRAY
の場合、len は、入力値と比較する値の長さです。type は、value 内のフィールドのデータ型です。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。CFfindocc()
または CFfindocc32()
が使用されている場合に、これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
CFfindocc32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、CFfindocc()
または CFfindocc32()
を呼び出すことができます。
フィールド値が見つからない場合、または他のエラーが見つかった場合、-1 を返し、CFfindocc()
は Ferror
を設定してエラー条件を示します。
次の条件の場合、CFfindocc()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FEINVAL
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FEBADOP
]
「FML 関数の紹介」、Ffindocc、Ffindocc32(3fml)
CFget()
、CFget32()
- フィールドの取得および変換
#include <stdio.h>
#include "fml.h"
int
CFget(FBFR *fbfr
, FLDID
fieldid
, FLDOCC
oc
, char *
buf
, FLDLEN *
len
,
inttype
)
FBFR32
#include "fml32.h"
int
CFget32(*
fbfr
, FLDID32
fieldid
, FLDOCC32
oc
, char *
buf
,
FLDLEN32 *len
, int
type
)
CFget()
は、Fget()
に似た変換関数です。主な違いとして、CFget() は、ユーザが提供したバッファに変換した値を複写します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。buf は、プライベート データ領域を指すポインタです。入力時において len は、プライベート データ領域の長さを指すポインタです。戻り時において len は、返された値の長さを指すポインタです。入力時において len パラメータが NULL の場合は、フィールド値を入れるためのバッファが十分大きいために、値の長さが返されないものと想定されます。buf パラメータが NULL の場合、フィールド値は返されません。type は、ユーザが変換したい戻り値の変換後のデータ型です。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。CFget()
または CFget32()
が使用されているとき、これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
CFget32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、CFget()
または CFget32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFget()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FNOSPACE
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FEBADOP
]
CFgetalloc()
、CFgetalloc32()
- フィールドの取得、領域の割り当て、変換
#include <stdio.h>
#include "fml.h"
char *
CFgetalloc(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, inttype
, FLDLEN
*extralen
)
#include "fml32.h"
char *
CFgetalloc32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, inttype
,
FLDLEN32 *extralen
)
CFgetalloc()
は、バッファから指定されたフィールドを獲得し、領域を割り当てます。次に、そのフィールドをユーザ指定のタイプに変換し、その位置を指すポインタを返します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。type は、ユーザが変換したいフィールドの変換後のデータ型です。呼び出し時において extralen は、値を受け取るために割り当てられる追加領域の長さを指すポインタです。戻り時において extralen は、実際に使用された領域の大きさを指すポインタです。extralen が NULL の場合、割り当てる追加領域はなく、実際の長さは返されません。ユーザには、(変換された) 戻り値を解放する責任があります。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。CFgetalloc()
または CFgetalloc32()
が使用されている場合に、これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
CFgetalloc32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、CFgetalloc()
または CFgetalloc32()
を呼び出すことができます。
正常終了時には、CFgetalloc()
は、変換された値を指すポインタを返します。エラー時には、NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFgetalloc()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FEBADOP
]
「FML 関数の紹介」、Fgetalloc、Fgetalloc32(3fml)
F_error()
、F_error32()
- 最終エラーのエラー メッセージを出力
#include stdio.h>
#include "fml.h"
extern int Ferror;
void
F_error(char *msg
)
#include "fml32.h"
extern int Ferror32;
void
F_error32(char *msg
)
この関数 F_error()
} は、UNIX システム エラーを出力する perror()
に似た働きをします。つまり、標準エラー出力 (ファイル記述子 2) にエラー メッセージを作成し、システム コールあるいはライブラリ関数呼び出し時に発生した最後のエラーを記述します。文字列引数 msg は、最初に出力されます。次にコロン、空白が出力され、メッセージおよび改行が出力されます。msg が NULL ポインタあるいは NULL 文字列を指している場合、コロンは出力されません。さまざまな利用形態を考慮して、この引数文字列には、エラーを起こしたプログラム名を入れます。エラー番号は、外部変数 Ferror
から獲得されます。Ferror は、エラーが起こったときに設定されますが、エラーを起こさない呼び出しが行われた場合はクリアされません。MS-DOS および OS/2 環境では、Ferror
は、FMLerror
に再定義されます。
エラー メッセージをすばやく出力するために、F_error()
は、他の FML 関数がエラーを返すときに呼び出されます。エラー メッセージが FEUNIX
の場合、Uunix_err()
が呼び出されます。
F_error32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、F_error()
または F_error32()
を呼び出すことができます。
F_error()
は、void
宣言なので戻り値はありません。
UNIX システムのリファレンス マニュアルの perror
(3)、Uunix_err
(3)
F32to16()
、F16to32()
- 16 ビット FML バッファと 32 ビット FML バッファの間の変換
#include <stdio.h>
#include "fml.h"
#include "fml32.h"
int
F32to16(FBFR *dest
, FBFR32 *src
)
int
F16to32(FBFR32 *dest
, FBFR *src
)
F32to16()
は、32 ビットの FML バッファを 16 ビットの FML バッファに変換します。これは、フィールド対フィールドのバッファの変換を行い、フィールド化バッファのインデックスを作成することによって行ないます。FLDID32
から FLDID
を生成し、フィールド値 (文字列、carray、および mbstring フィールドの長さ) をコピーすることによって、フィールドを変換します。dest は、宛先バッファのポインタです。src は、もとのフィールド化バッファを指すポインタです。ソース バッファは変更されません。
これらの関数は、領域の不足のために異常終了する場合があります。処理を完了するために十分な追加のメモリを割り当てた後で、これらの関数を再び呼び出すことができます。
F16to32()
は、16 ビットの FML バッファを 32 ビットの FML バッファに変換します。この関数は、fml32
ライブラリまたは共有オブジェクトに格納されており、エラーが発生すると Ferror32
が設定されます。
F32to16()
は、FML ライブラリまたは共有オブジェクトの中にあり、エラー時には Ferror
を設定します。これらの関数を使用するためには、fml.h
および fml32.h
の両方をインクルードする必要があることに注意してください。同じファイルに、fml1632.h
をインクルードする必要はありません。
F32to16()
は、FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、FBADFLD
を設定して異常終了します。これらのフィールド タイプに対して F16to32()
を実行しても、何の影響もありません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、F32to16()
または F16to32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、F32to16()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FBADFLD
]
F32to16()
関数でのみ発生します。ソース バッファは、16 ビットの FML がサポートしている 8 つのフィールド タイプ以外のフィールド識別子を持っているか、フィールド番号が 8191 を超えています。
Fadd()
、Fadd32()
- 新しいフィールド オカレンスの追加
#include stdio.h>
#include "fml.h"
int Fadd(FBFR *fbfr
, FLDIDfieldid
, char *value
, FLDLENlen
)
#include "fml32.h"
int Fadd32(FBFR32 *fbfr
, FLDID32fieldid
, char *value
, FLDLEN32len
)
Fadd()
は、指定されたフィールド値を指定されたバッファに追加します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。value は、新しい値を指すポインタです。したがって、ポインタの型は、追加される値と同じフィールド識別子の型である必要があります。len は、追加される値の長さです。len は、FLD_CARRAY
型または FLD_MBSTRING
型の場合のみ必要です。
追加する値は、value パラメータで指される場所にあります。既に 1 つまたは複数のフィールド オカレンスがある場合、新しいフィールド オカレンスとして値が追加され、現在指定されているオカレンスの最大値より 1 つ大きいオカレンス番号が割り当てられます (指定されたオカレンスを追加するには、Fchg()
を使用する必要があります)。
上記の「形式」の項では、Fadd()
の引数 value のデータ型は、char のポインタ (C の char *
) として記述されています。技術的には、これは、単に、Fadd()
に渡せる値のある特定の型を記述しています。実際、引数 value の型は、追加されているフィールドのフィールド化バッファ表現と同じ型のオブジェクトへのポインタにします。たとえば、フィールドが、FLD_LONG 型でバッファに格納されている場合は、value の型は、long 型のポインタ (C の long *
) である必要があります。同様に、FLD_SHORT 型でバッファに格納される場合、value は、short 型のポインタ (C の short *
) である必要があります。大事なことは、Fadd()
は、value が指すオブジェクトが、追加される格納済みのフィールドの型と同じ型を持っていることを想定しているということです。
FLD_PTR
型の値の場合、Fadd32()
はポインタの値を格納します。FLD_PTR
フィールドが指すバッファを割り当てるには、tpalloc()
を呼び出します。FLD_FML32
型の値の場合、Fadd32()
はインデックスを除いた FLD_FML32
フィールド全体の値を格納します。FLD_VIEW32
型の値の場合、Fadd()
は FVIEWFLD
型の構造体へのポインタを格納します。これには、vflags
(現在未使用で 0 に設定された flags フィールド)、vname
(VIEW 名を含む文字配列)、および data
(C 構造体として格納される VIEW データへのポインタ) が含まれます。アプリケーションは、vname
と data
を Fadd32()
に提供します。
FLD_MBSTRING
型の値の場合、値は Fmbpack32()
関数のパッキングされた出力引数であり、引数 len
は Fmbpack32()
の出力引数 size
の値の長さです。
FLD_CARRAY
型の値の場合、引数 len
は値の長さです。FLD_CARRAY
または FLD_MBSTRING
以外のすべての型では、value
が参照するオブジェクトの長さは、その型から導かれ (たとえば、FLD_FLOAT の場合、長さは、sizeof(float)
になる)、len
の内容は無視されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fadd()
または Fadd32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror を設定してエラー条件を示します。
次の条件の場合、Fadd()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEINVAL
]
FNOSPACE
]
FBADFLD
]
「FML 関数の紹介」、CFadd、CFadd32(3fml)
、Fadds、Fadds32(3fml)
、Fchg、Fchg32(3fml)
Fadds()
、Fadds32()
- FLD_STRING 型の値を変換し、バッファに追加
#include <stdio.h>
#include "fml.h"
int
Fadds(FBFR *fbfr
, FLDIDfieldid
, char *value
)
#include "fml32.h"
int
Fadds32(FBFR32 *fbfr
, FLDID32fieldid
, char *value
)
Fadds()
は、ユーザ型 FLD_STRING
からフィールド型 (fieldid
) への変換を処理し、それをフィールド化バッファに追加するために提供されています。fbfr
は、フィールド化バッファを指すポインタです。fieldid
は、フィールド識別子です。value は、追加される値を指すポインタです。
この関数は、type
(FLD_STRING
) を提供し、len
が 0 である CFadd()
を呼び出します。
Fadds32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fadds()
または Fadds32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fadds()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FTYPERR
]
FEINVAL
]
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FBADFLD
]
「FML 関数の紹介」、CFchg、CFchg32(3fml)
、CFfind、CFfind32(3fml)
、CFget、CFget32(3fml)
、Falloc、Falloc32(3fml)
、Fchgs、Fchgs32(3fml)
、Ffinds、Ffinds32(3fml)
、Fgets、Fgets32(3fml)
、Fgetsa、Fgetsa32(3fml)
Falloc()
、Falloc32()
- フィールド化バッファの割り当ておよび初期化
#include <stdio.h>
#include "fml.h"
FBFR *
Falloc(FLDOCCF
, FLDLENV
)
#include "fml32.h"
FBFR32 *
Falloc32(FLDOCC32F
, FLDLEN32V
)
Falloc()
は、フィールド化バッファ用に、malloc()
を使用して領域を動的に割り当て、Finit()
を呼び出してそれを初期化します。パラメータには、バッファに格納されているすべてのフィールドについて、フィールド数 (F) および値の領域のバイト数 (V) があります。
Falloc32()
は、より多くのフィールドを持つ大きなバッファのために使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Falloc()
または Falloc32()
を呼び出すことができます。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Falloc()
は異常終了し、Ferror
を次の値に設定します。
FMALLOC
]
FEINVAL
]
「FML 関数の紹介」、Ffree、Ffree32(3fml)
、Fielded、Fielded32(3fml)
、Finit、Finit32(3fml)
、Fneeded、Fneeded32(3fml)
、Frealloc、Frealloc32(3fml)
、Fsizeof、Fsizeof32(3fml)
、Funused、Funused32(3fml)
UNIX システムのリファレンス マニュアルの malloc
(3)
Fappend()
、Fappend32()
- 新しいフィールド オカレンスの追加
#include <stdio.h>
#include "fml.h"
int
Fappend(FBFR *fbfr
, FLDIDfieldid
, char *value
, FLDLEN len)
#include "fml32.h"
int
Fappend32(FBFR32 *fbfr
, FLDID32fieldid
, char *value
, FLDLEN32len
)
Fappend()
は、指定されたフィールド値を指定されたバッファの終わりに追加します。Fappend()
は、汎用目的の FML アクセスに必要な内部構造体および順序付けを保持しない、大規模なバッファを作成する際に役に立ちます。この最適化の影響として、Fappend()
への呼び出しの後には、Fappend()
への追加の呼び出し、FML インデックス ルーチン Findex()
および Funindex()
への呼び出し、または Free()
、Fused()
、Funused()
、Fsizeof()
への呼び出ししか行なえません。Findex()
または Funindex()
を呼び出す前に他の FML ルーチンへの呼び出しを行うと、Ferror
が FNOTFLD
に設定されてエラーが発生します。
fbfr
は、フィールド化バッファを指すポインタです。fieldid
は、フィールド識別子です。value は、新しい値を指すポインタです。したがって、ポインタの型は、追加される値と同じフィールド識別子の型である必要があります。len は、追加される値の長さです。len は、FLD_CARRAY
型または FLD_MBSTRING
型の場合のみ必要です。
追加する値は、value パラメータで指される場所にあります。既に 1 つまたは複数のフィールド オカレンスがある場合、新しいフィールド オカレンスとして値が追加され、現在指定されているオカレンスの最大値より 1 つ大きいオカレンス番号が割り当てられます (指定されたオカレンスを追加するには、Fchg()
を使用する必要があります)。
上記の「形式」の項では、Fappend()
の引数 value のデータ型は、char のポインタ (C の char *
) として記述されています。技術的には、これは、単に、Fappend()
に渡せる値の 1 つの特定の型を記述しています。実際、引数 value の型は、追加されているフィールドのフィールド化バッファ表現と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG
型でバッファに格納されている場合は、value の型は、long 型のポインタ (C の long *
) である必要があります。同様に、FLD_SHORT
型でバッファに格納される場合、value は、short 型のポインタ (C の short *
) である必要があります。重要なことは、Fappend()
は、value が指すオブジェクトが、追加される格納済みのフィールドと同じ型を持っていると想定しているということです。
FLD_MBSTRING
型の値の場合、値は Fmbpack32()
関数のパッキングされた出力引数であり、引数 len
は Fmbpack32()
の出力引数 size
の値の長さです。
FLD_CARRAY
型の値の場合、引数 len
は値の長さです。FLD_CARRAY
または FLD_MBSTRING
以外のすべての型では、value
が参照するオブジェクトの長さは、その型から導かれ (たとえば、FLD_FLOAT の場合、長さは、sizeof(float)
になる)、len
の内容は無視されます。
Fappend32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fappend()
または Fappend32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fappend()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEINVAL
]
FNOSPACE
]
FBADFLD
]
「FML 関数の紹介」、Fadd、Fadd32(3fml)
、Ffree、Ffree32(3fml)
、Findex、Findex32(3fml)
、Fsizeof、Fsizeof32(3fml)
、Funindex、Funindex32(3fml)
、Funused、Funused32(3fml)
、Fused、Fused32(3fml)
Fboolco()
、Fboolco32()
、Fvboolco()
、Fvboolco32()
- 式をコンパイルし評価ツリーを返す
#include <stdio.h>
#include "fml.h"
char *
Fboolco(char *expression
)
char *
Fvboolco(char *expression
, char *viewname
)
#include "fml32.h"
char *
Fboolco32(char *expression
)
char *
Fvboolco32(char *expression
, char *viewname
)
Fboolco()
は、expression が指す論理表現をコンパイルし、評価ツリーのポインタを返します。認識される表現は、C で認識される表現に近いものです。文法の説明は、『FML を使用した Oracle Tuxedo アプリケーションのプログラミング』に記載されています。
Fboolco()
が作成する評価ツリーは、下記の「関連項目」の項でリストされている他の論理関数に使用されます。したがって、式を再びコンパイルする必要はありません。
Fboolco32()
は 32 ビット FML で使用されます。
Fvboolco()
および Fvboolco32()
は、同じ VIEW 機能を提供します。viewname パラメータは、フィールド オフセットを取り出す VIEW を示します。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると、この関数は異常終了します。これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
Workstation プラットフォームでは、これらの関数はサポートされていません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Fboolco()
、Fboolco32()
、Fvboolco()
、または Fvboolco32()
を呼び出すことができます。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fboolco()
は異常終了し、Ferror
を次の値に設定します。
FMALLOC
]
FSYNTAX
]
FBADNAME
]
FEINVAL
]
FBADVIEW
]
FVFOPEN
]
EUNIX
]
FVFSYNTAX
]
FMALLOC
]
FEBADOP
]
#include "stdio.h"
#include "fml.h"
extern char *Fboolco(\|);
char *tree;
...
if((tree=Fboolco("FIRSTNAME %% 'J.*n' & SEX = 'M'")) == NULL)
F_error("pgm_name");
この例では、'J' で始まり 'n' で終わる (たとえば、John、Jean、Jurgen など) FIRSTNAME
フィールドがバッファにあるか、SEX
フィールドが 'M'
に等しいかを検査する論理表現をコンパイルします。
tree 配列の最初の文字は、最下位バイトを形成します。次の文字は、最上位バイトを形成します。それぞれ、全体の配列の長さをバイト数で指定する符号なし型 (16 ビット) です。この値は、複写あるいは配列の操作に役立ちます。
Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)
、Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)
、Fldid、Fldid32(3fml)
Fboolev()
、Fboolev32()
、Fvboolev()
、Fvboolev32()
- 評価ツリーに対するバッファの評価
#include stdio.h>
#include "fml.h"
int
Fboolev(FBFR *fbfr
, char *tree
)
int
Fvboolev(char *cstruct
, char *tree
, char *viewname
)
#include "fml32.h"
int
Fboolev32(FBFR32 *fbfr
, char *tree
)
int
Fvboolev32(char *cstruct
, char *tree
, char *viewname
)
Fboolev()
は、フィールド化バッファを指すポインタ (fbfr)、Fboolco()
が返す評価ツリーのポインタ (tree) を利用して、フィールド化バッファが指定された論理条件と一致する場合は、true (1) を返し、そうでない場合は false (0) を返します。この関数は、フィールド化バッファあるいは評価ツリーのいずれも変更しません。評価ツリーは、Fboolco()
によって以前コンパイルされたものです。
Fboolev32()
は 32 ビット FML で使用されます。
Fvboolev()
および Fvboolev32()
は、同じ VIEW 機能を提供します。viewname パラメータは、フィールド オフセットを取り出す VIEW を示し、Fvboolco()
または Fvboolco32()
で指定された VIEW と同じにする必要があります。
Workstation プラットフォームでは、これらの関数はサポートされていません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Fboolev()
、Fboolev32()
、Fvboolev()
、または Fvboolev32()
を呼び出すことができます。
Fboolev()
は、バッファ内の表現と評価ツリーが一致している場合、1 を返します。表現が評価ツリーと不一致の場合、0 を返します。この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fboolev()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
FEINVAL
]
FSYNTAX
]
FBADVIEW
]
FVFOPEN
]
EUNIX
]
FVFSYNTAX
]
FMALLOC
]
Fboolco()
の使用例でコンパイルした評価ツリーを使用します。
#include stdio.h>
#include "fml.h"
#include "fld.tbl.h"
FBFR *fbfr;
...
Fchg(fbfr,FIRSTNAME,0,"John",0);
Fchg(fbfr,SEX,0,"M",0);
if(Fboolev(fbfr,tree) > 0)
fprintf(stderr,"Buffer selected\\\\n");
else
fprintf(stderr,"Buffer not selected\\\\n");
「FML 関数の紹介」、Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)
、Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)
Fboolpr()
、Fboolpr32()
、Fvboolpr()
、Fvboolpr32()
- パースされた論理式を出力
#include <stdio.h>
#include "fml.h"
void
Fboolpr(char *tree
, FILE *iop
)
int
Fvboolpr(char *tree
, FILE *iop
, char *viewname
)
#include "fml32.h"
void
Fboolpr32(char *tree
, FILE *iop
)
int
Fvboolpr32(char *tree
, FILE *iop
, char *viewname
)
Fboolpr()
は、コンパイル済みの表現を指定された出力ストリームに出力します。評価ツリー (tree) は、Fboolco()
で以前作成されたものです。iop は、出力ストリームを指す FILE
型のポインタです。出力内容のすべてがかっこ内に入れられ、評価ツリーで示されるように解析されます。この関数はデバッグに役立ちます。
Fboolpr32()
は 32 ビット FML で使用されます。
Fvboolpr()
および Fvboolpr32()
は、同じ VIEW 機能を提供します。viewname パラメータは、フィールド オフセットを取り出す VIEW を示し、Fvboolco()
または Fvboolco32()
で指定された VIEW と同じにする必要があります。
Workstation プラットフォームでは、これらの関数はサポートされていません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Fboolpr()
、Fboolpr32()
、Fvboolpr()
、または Fvboolpr32()
を呼び出すことができます。
Fboolpr()
は、void
を返すものとして宣言されているので、戻り値はありません。Fvboolpr()
は、VIEW 名が無効な場合は -1 を返します。
次の条件の場合、Fvboolpr()
は失敗し、Ferror
を次の値に設定します。
FBADVIEW
]
FVFOPEN
]
EUNIX
]
FVFSYNTAX
]
FMALLOC
]
この関数は、Windows 用の Oracle Tuxedo System Workstation DLL では使用できません。
「FML 関数の紹介」、Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)
Fchg()
、Fchg32()
- フィールド オカレンス値を変更
#include <stdio.h>
#include "fml.h"
int
Fchg(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, char *value
, FLDLENlen
)
#include "fml32.h"
int
Fchg32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, char *value
,
FLDLEN32len
)
Fchg()
は、バッファ内のフィールド値を変更します。fbfr
は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。value
は、新しい値を指すポインタです。したがって、その型は、変更される値と同じ型である必要があります (下記参照)。len は、変更される値の長さです。len は、FLD_CARRAY
型または FLD_MBSTRING
型の場合のみ必要です。
-1 のオカレンスが指定される場合、フィールド値は、新しいオカレンスとしてバッファに追加されます。指定されたフィールド オカレンスが見つかった場合、フィールド値は、指定された値に変更されます。存在しないフィールド オカレンスが指定された場合、必要とするオカレンスが追加されるまで、見つからないオカレンス用には NULL 値が追加されます (たとえば、バッファに存在しないフィールド用にフィールド オカレンスを 4 に変更すると、3 個の NULL 値の後に指定されたフィールド値が追加されます)。文字列および文字の値の NULL 値は、NULL 文字列 (長さは 1 バイト) で構成されています。long および short フィールド用の NULL 値は、0 で構成されています。float および double 値用の NULL 値は、0.0 で構成されています。文字配列用の NULL 値は、長さゼロの文字列で構成されています。新しい、または変更した値は、value に含まれます。文字配列の場合 (他の場合は考慮しない)、value の長さは len で指定されます。value が NULL の場合、フィールド オカレンスは削除されます。削除する値が見つからない場合、エラーと見なされます。
上記の「形式」の項では、Fchg()
の引数 value
のデータ型は、char のポインタ (C の char *) として記述されています。技術的には、Fchg()
に渡されるある 1 つの特別な種類の値のみ記述しています。実際、引数 value
の型は、変更するフィールドのフィールド化バッファの表現の型と同じ型のオブジェクトを指すポインタでなければなりません。たとえば、フィールドが、FLD_LONG
型でバッファに格納されている場合は、value
の型は、long 型のポインタ (C の long *
) である必要があります。同様に、FLD_SHORT 型でバッファに格納される場合、value は、short 型のポインタ (C の short *
) である必要があります。大事なことは、Fchg()
は、value が指すオブジェクトが、変更される格納済みのフィールドの型と同じ型を持っていると想定していることです。
FLD_PTR
型の値の場合、Fchg32()
はポインタの値を格納します。FLD_PTR
フィールドが指すバッファを割り当てるには、tpalloc()
を呼び出します。FLD_FML32
型の値の場合、Fchg32()
はインデックスを除いた FLD_FML32
フィールド全体の値を格納します。FLD_VIEW32
型の値の場合、Fchg()
は FVIEWFLD
型の構造体を指すポインタを格納します。これには、vflags
(現在未使用で 0 に設定された flags フィールド)、vname
(VIEW 名を含む文字配列)、および data
(C 構造体として格納される VIEW データを指すポインタ) が含まれます。アプリケーションは、vname
と data
を Fchg32()
に提供します。
FLD_MBSTRING
型の値の場合、値は Fmbpack32()
関数のパッキングされた出力引数であり、引数 len
は Fmbpack32()
の出力引数 size
の値の長さです。
FLD_CARRAY
型の値の場合、引数 len
は値の長さです。FLD_CARRAY
または FLD_MBSTRING
以外のすべての型では、value
が参照するオブジェクトの長さは、その型から導かれ (たとえば、FLD_FLOAT の場合、長さは、sizeof(float)
になる)、len
の内容は無視されます。
Fchg32() は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fchg()
または Fchg32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror を設定してエラー条件を示します。
次の条件の場合、Fchg()
は失敗し、Ferror を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FNOSPACE
]
FBADFLD
]
「FML 関数の紹介」、CFchg、CFchg32(3fml)
、Fadd、Fadd32(3fml)
、Fcmp、Fcmp32(3fml)
、Fdel、Fdel32(3fml)
Fchgs()
、Fchgs32()
- フィールド オカレンスの変更 - 呼び出し側は、文字列を提供
#include <stdio.h>
#include "fml.h"
int
Fchgs(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, char *value
)
#include "fml32.h"
int
Fchgs32(FBFR32 *fbfr
, FLDID32fieldid
, intoc
, char *value
)
Fchgs()
は、ユーザ型 FLD_STRING
の変換を処理のために提供されています。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。value は、追加される文字列を指すポインタです。この関数は、文字列を fieldid のフィールド タイプに変換するための FLD_STRING
型および len
(値が 0) を設定して非文字列関数 CFchg()
を呼び出します。
Fchgs32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fchgs()
または Fchgs32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fchgs()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FBADFLD
]
FTYPERR
]
「FML 関数の紹介」、CFchg、CFchg32(3fml)
、Fchg、Fchg32(3fml)
Fchksum()
、Fchksum32()
- フィールド化バッファのチェックサムの計算
#include <stdio.h>
#include "fml.h"
long
Fchksum(FBFR *fbfr
)
#include "fml32.h"
long
Fchksum32(FBFR32 *fbfr
)
高信頼性の I/O では、チェックサムは、Fchksum()
を使用して計算され、書き込まれているフィールド化バッファに格納されます。fbfr
は、フィールド化バッファを指すポインタです。格納されたチェックサムは、すべてのバッファを受信したことを確かめるために、受信プロセスによって検査されます。
FLD_PTR
型の値の場合、ポインタまたはポインタによって参照されるデータの代わりに、ポインタのフィールドの名前がチェックサム計算に含まれます。
Fchksum32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fchksum()
または Fchksum32()
を呼び出すことができます。
正常終了の場合、Fchksum()
はチェックサムを返します。この関数は、エラー発生時に -1 を返し、
Ferror
を設定してエラー条件を示します。
次の条件の場合、Fchksum()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Fread、Fread32(3fml)
、Fwrite、Fwrite32(3fml)
Fcmp()
、Fcmp32()
- 2 つのフィールド化バッファの比較
#include <stdio.h>
#include "fml.h"
int
Fcmp(FBFR *fbfr1
, FBFR *fbfr2
)
#include "fml32.h"
int
Fcmp32(FBFR32 *fbfr1
, FBFR32 *fbfr2
)
Fcmp()
は、フィールド識別子を比較してから、2 つの FML バッファのフィールド値を比較します。fbfr1 および fbfr2 は、比較するフィールド化バッファを指すポインタです。
FLD_PTR
型の値の場合、ポインタの値 (アドレス) が等しければ、2 つのポインタ フィールドは等しいと見なされます。FLD_FML32
型の値の場合、すべてのフィールド オカレンスおよび値が等しければ、2 つのフィールドは等しいと見なされます。FLD_VIEW32
型の値の場合、VIEW 名が同じとき、およびすべての構造体メンバーのオカレンスおよび値が等しいとき、2 つのフィールドは等しいと見なされます。
Fcmp32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fcmp()
または Fcmp32()
を呼び出すことができます。
この関数は、2 つのバッファが等しい場合には 0 を返します。次に示す条件の場合 -1 を返します。
Fcmp()
は、上記のいずれかの条件の逆が true であると、1 を返します。たとえば、fbfr1 フィールドのフィールド識別子が fbfr2 フィールドの対応するフィールド識別子より大きい場合です。この場合、バッファの実際の大きさ (つまり、Falloc()
に渡された大きさ) は認識されず、バッファのデータのみが認識されます。この関数は、エラー発生時に -2 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fcmp()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Fadd、Fadd32(3fml)
、Fchg、Fchg32(3fml)
Fconcat()
、Fconcat32()
- ソース バッファと宛先バッファの連結
#include <stdio.h>
#include "fml.h"
int
Fconcat(FBFR *dest
, FBFR *src
)
#include "fml32.h"
int
Fconcat32(FBFR32 *dest
, FBFR32 *src
)
Fconcat()
は、ソース バッファのフィールドを、すでにある宛先バッファにあるフィールドに追加します。dest は、宛先バッファのポインタです。src は、元のフィールド化バッファを指すポインタです。宛先バッファにあるオカレンスは維持され、ソース バッファの新しいオカレンスは、フィールドに対して比較的大きなオカレンス番号で追加されます。
Fconcat32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fconcat()
または Fconcat32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fconcat()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
「FML 関数の紹介」、Fjoin、Fjoin32(3fml)
、Fupdate、Fupdate32(3fml)
Fcpy()
、Fcpy32()
- ソース バッファを宛先バッファにコピー
#include <stdio.h>
#include "fml.h"
int
Fcpy(FBFR *dest
, FBFR *src
)
#include "fml32.h"
int
Fcpy32(FBFR32 *dest
, FBFR32 *src
)
Fcpy()
は、あるフィールド化バッファの内容を他のフィールド化バッファに複写するために使用されます。dest は、宛先バッファのポインタです。src は、元のフィールド化バッファを指すポインタです。Fcpy()
は、宛先がフィールド化バッファであることを想定しています。このようにすると、宛先バッファに、ソース バッファのデータを入れるための十分な大きさがあるかを検査できます。
FLD_PTR
型の値の場合、Fcpy32()
はバッファのポインタをコピーします。アプリケーション プログラマは、対応するポインタがコピーされたときのバッファの再割り当ておよび解放を管理する必要があります。
Fcpy32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fcpy()
または Fcpy32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fcpy()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
「FML 関数の紹介」、Fmove、Fmove32(3fml)
Fdel()
、Fdel32()
- バッファからフィールド オカレンスを削除
#include stdio.h>
#include "fml.h"
int
Fdel(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
)
#include "fml32.h"
int
Fdel32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
)
Fdel()
は、指定されたフィールド オカレンスをバッファから削除します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。
フィールド化バッファに、1 つのフィールドに対し複数のオカレンスがあり、最後のオカレンスでないフィールド オカレンスが削除された場合、バッファにある高位のオカレンスは、1 つずつ繰り下がります。すべてのオカレンスのオカレンス番号を同じままにするためには、Fchg()
を使用してフィールド オカレンス値を NULL に設定します。
FLD_PTR
型の値の場合、Fdel32()
によって FLD_PTR
フィールド オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ バッファは、なポインタとして扱われます。
Fdel32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fdel()
または Fdel32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fdel()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、Fadd、Fadd32(3fml)
、Fchg、Fchg32(3fml)
、Fdelall、Fdelall32(3fml)
、Fdelete、Fdelete32(3fml)
Fdelall()
、Fdelall32()
- バッファからすべてのフィールド オカレンスを削除
#include <stdio.h>
#include "fml.h"
int
Fdelall(FBFR *fbfr
, FLDIDfieldid
)
#include "fml32.h"
int
Fdelall32(FBFR32 *fbfr
, FLDID32fieldid
)
Fdelall()
は、バッファにある指定されたフィールドのすべてのオカレンスを削除します。fbfr
は、フィールド化バッファを指すポインタです。fieldid
は、フィールド識別子です。フィールドのオカレンスがない場合は、エラーと見なされます。
FLD_PTR
型の値の場合、Fdelall32()
によって FLD_PTR
フィールド オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ バッファは、非透過的なポインタとして扱われます。
Fdelall32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fdelall()
または Fdelall32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fdelall()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、Fdel、Fdel32(3fml)
、Fdelete、Fdelete32(3fml)
Fdelete()
、Fdelete32()
- バッファからフィールドのリストを削除
#include <stdio.h>
#include "fml.h"
int
Fdelete(FBFR *fbfr
, FLDID *fieldid
)
#include "fml32.h"
int
Fdelete32(FBFR32 *fbfr
, FLDID32 *fieldid
)
Fdelete()
は、フィールド識別子の配列 (fieldid[]
) にリストされているすべてのフィールドのすべてのオカレンスを削除します。配列の最後のエントリは、BADFLDID
である必要があります。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子の配列を指すポインタです。これは、バッファからいくつものフィールドを削除する場合、Fdelall()
を数回呼び出すより有効な方法です。更新は、その場所で行われます。フィールド識別子の配列は、Fdelete()
によって再配列されます (それらがソートされていない場合はソートされ、番号順になります)。
FLD_PTR
型の値の場合、Fdelete32()
によって FLD_PTR
フィールド オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ バッファは、非透過的なポインタとして扱われます。
Fdelete()
は、削除するフィールドがフィールド化バッファにない場合も正常終了で返ります。
Fdelete32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fdelete()
または Fdelete32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fdelete()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FBADFLD
]
「FML 関数の紹介」、Fdel、Fdel32(3fml)
、Fdelall、Fdelall32(3fml)
Fextread()
、Fextread32()
- フォーマットされた出力からフィールド化バッファを作成
#include <stdio.h>
#include "fml.h"
int
Fextread(FBFR *fbfr
, FILE *iop
)
#include "fml32.h"
int
Fextread32(FBFR32 *fbfr
, FILE *iop
)
Fextread()
は、フォーマットされた出力 (つまり、Fprint()
の出力) からフィールド化バッファを作成するために使用されます。パラメータは、フィールド化バッファを指すポインタ (fbfr) とファイル ストリームを指すポインタ (iop) です。入力のファイル形式は、基本的に Fprint()
の出力形式と同じです。次にそれを示します。
[flag] fldname or fldid tab> fldval (or fldname, if flag is ``='')
フラグが指定されない場合、値 (
fldval
) を持った fldname
で指定されているフィールドの新しいオカレンスが、フィールド化バッファに追加されます。後続の改行 (-
) は、入力が済んだ各バッファの後に置く必要があります。
FLD_FML32
および FLD_VIEW32
型の値の場合、Fextread32()
はそれぞれ、ネストされた FML32 バッファと VIEW32 フィールドを生成します。この関数は、FLD_PTR
フィールド タイプを無視します。関数にタイプ FLD_PTR
の値が与えられても、エラーは返されません。
Fextread32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fextread()
または Fextread32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fextread()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FBADFLD
]
FEUNIX
]
errno
は、システム コールによるエラーを示すために設定され、外部の整数型変数 Uunixerr
(Uunix.h
で定義されている値) は、エラーを返したシステム コールに設定されます。
FBADNAME
]
FSYNTAX
]
fieldid
または name tab > value
)、2 つの制御文字、1000 文字より大きいフィールド値、または無効な 16 進のエスケープ シーケンスなどです。
FNOTPRES
]
FMALLOC
]
FEINVAL
]
この関数は、Windows 用の Oracle Tuxedo System Workstation DLL では使用できません。
「FML 関数の紹介」、Fprint、Fprint32(3fml)
Ffind()
、Ffind32()
- バッファにあるフィールド オカレンスの検索
#include <stdio.h>
#include "fml.h"
char *
Ffind(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, FLDLEN *len
)
#include "fml32.h"
char *
Ffind32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, FLDLEN32 *len
)
Ffind()
は、バッファ内の指定されたフィールド オカレンスの値を検索します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。フィールドがある場合、その長さは、*len に設定され、その位置は、関数の値として返されます。len の値が NULL の場合は、フィールドの長さは返されません。Ffind()
は、フィールドへの読み取り専用アクセスを得る場合に役立ちます。どのような場合でも、Ffind()
が返す値は、バッファの変更に使用してはなりません。
一般に、FLD_LONG
、FLD_FLOAT
、FLD_DOUBLE
、FLD_PTR
、FLD_FML32
、および FLD_VIEW32
型の場合、それぞれの値がバッファ内で適切に配置されているとは限らないため、格納されているままの型を直接使用するのには向いていません。これらの値は、最初に、適宜に配列されたメモリ位置に複写される必要があります。変換関数 CFfind()
を使用してこのようなフィールドにアクセスする場合、検索される変換済みの値は正しく配列されることが保証されます。バッファの変更は、関数 Fadd()
または Fchg()
によってのみ行われる必要があります。Ffind()
および Ffindlast()
が返す値は、バッファが変更されない限り有効です。
Ffind32()
は、FLD_FML32
および FLD_VIEW32
フィールド タイプで提供される、埋め込み型のバッファ内の指定フィールドのオカレンスをチェックしません。
FLD_MBSTRING
型の指定されたフィールド識別子の場合、Ffind32()
の戻り値は Fmbunpack(32)
関数を使用して解析できます。
Ffind32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffind()
または Ffind32()
を呼び出すことができます。
上記の「形式」の項では、Ffind() の戻り値のデータ型は、char のポインタ (C の char *
) として記述されています。実際、返されるポインタは、格納済みのフィールドの型と同じ型を持つオブジェクトを指しています。
この関数は、エラー時には NULL のポインタを返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffind()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、Ffindlast、Ffindlast32(3fml)
、Ffindocc、Ffindocc32(3fml)
、Ffinds、Ffinds32(3fml)
Ffindlast()
、Ffindlast32()
- バッファにあるフィールドの最後のオカレンスの値を検索
#include <stdio.h>
#include "fml.h"
char *
Ffindlast(FBFR *fbfr
, FLDIDfieldid
, FLDOCC *oc
, FLDLEN *len
) #include "fml32.h"
char *
Ffindlast32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32 *oc
, FLDLEN32 *len
)
Ffindlast()
は、バッファにあるフィールドの最後のオカレンスの値を検索します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc は、フィールドのオカレンス番号を受け取るために使用する整数型のポインタです。len は、値の長さです。バッファにフィールドのオカレンスがない場合、NULL が返されます。一般に、Ffindlast()
は Ffind()
に似た動きをします。Ffindlast
を使用すると、ユーザは、フィールド オカレンスを提供しないという点が主な違いです。その代わり、フィールドの最後のオカレンスの値およびオカレンス番号の両方が返されます。最後のフィールドのオカレンス番号を返すために、Ffindlast()
のオカレンス引数 oc は、整数型のポインタであり、Ffind()
の場合のように整数ではありません。oc が NULL で指定されている場合、最後のオカレンスのオカレンス番号は返されません。len の値が NULL の場合は、フィールドの長さは返されません。
一般に、FLD_LONG
、FLD_FLOAT
、FLD_DOUBLE
、FLD_PTR
、FLD_FML32
、および FLD_VIEW32
型の場合、それぞれの値がバッファ内で適切に配置されているとは限らないため、格納されているままの型を直接使用するのには向いていません。これらの値は、最初に、適宜に配列されたメモリ位置に複写される必要があります。変換関数 CFfind()
を使用してこのようなフィールドにアクセスする場合、検索される変換済みの値は正しく配列されることが保証されます。バッファの変更は、関数 Fadd()
または Fchg()
によってのみ行われる必要があります。Ffind()
および Ffindlast()
が返す値は、バッファが変更されない限り有効です。
Ffindlast32()
は、FLD_FML32
および FLD_VIEW32
フィールド タイプで提供される、埋め込み型のバッファ内の指定フィールドのオカレンスをチェックしません。
FLD_MBSTRING
型の指定されたフィールド識別子の場合、Ffindlast32()
の戻り値は Fmbunpack(32)
関数を使用して解析できます。
Ffindlast32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffindlast()
または Ffindlast32()
を呼び出すことができます。
上記の「形式」の項では、Ffindlast()
の戻り値のデータ型は、char のポインタ (C の char *
) として記述されています。実際、返されるポインタは、格納済みのフィールドの型と同じ型を持つオブジェクトを指しています。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffindlast()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、CFfind、CFfind32(3fml)
、Fadd、Fadd32(3fml)
、Fchg、Fchg32(3fml)
、Ffind、Ffind32(3fml)
、Ffindocc、Ffindocc32(3fml)
、Ffinds、Ffinds32(3fml)
Ffindocc()
、Ffindocc32()
- フィールド値のオカレンスの検索
#include <stdio.h>
#include "fml.h"
FLDOCC
Ffindocc(FBFR *fbfr
, FLDIDfieldid
, char *value
, FLDLENlen
) #include "fml32.h"
FLDOCC32
Ffindocc32(FBFR32 *fbfr
, FLDID32fieldid
, char *value
, FLDLEN32len
)
Ffindocc()
は、バッファ内の指定されたフィールドのオカレンスを参照し、ユーザ指定のフィールド値と一致する最初のフィールド オカレンスのオカレンス番号を返します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。検索される値は、value パラメータが指す場所にあります。len は、その型が FLD_CARRAY
または FLD_MBSTRING
の場合、値の長さです。fieldid がフィールド型 FLD_STRING
で、len が 0 でない場合、文字列に対してパターン整合が行われます。サポートされているパターン整合は、regcmp
(3) (UNIX System V プログラマ リファレンス マニュアル) に記述されているパターンと同じです。さらに、正規表現の代替がサポートされています。たとえば、"A|B
" は、"A
" または "B
" と一致しています。パターンは、全体のフィールド値と一致する必要があります。つまり、パターン "value
" は、暗黙的に "^value$
" として扱われます。MS-DOS および OS/2 環境用に提供される Ffindocc()
のバージョンは、FLD_STRING
フィールドに対する regcmp()
のパターン整合機能をサポートしていませんので、strcmp()
(UNIX System V プログラマ リファレンス マニュアル) を使用します。
上記の「形式」の項では、Ffindocc()
の引数 value のデータ型は、char のポインタ (C の char *
) として記述されています。技術的には、これは、Ffindocc() に渡すことのできる値のある特定の値のみを記述しています。実際、value 引数の型は、検索されるフィールドのフィールド化バッファ表現の型と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG 型でバッファに格納されている場合は、value の型は、long 型のポインタ (C の long *
) である必要があります。同様に、FLD_SHORT 型でバッファに格納される場合、value は、short 型のポインタ (C の short *
) である必要があります。大事な点は、Ffindocc() は、value で指されるオブジェクトが、格納済みの検索されるフィールドの型と同じ型を持っていることを想定していることです。
FLD_PTR
型の値の場合、Ffindocc32()
は指定されたポインタ値と一致するフィールドのオカレンスを検索します。FLD_FML32
型の値の場合、すべてのフィールド オカレンスおよび値が等しければ、2 つのフィールドは等しいと見なされます。FLD_VIEW32
型の値の場合、VIEW 名が同じとき、およびすべての構造体メンバーのオカレンスおよび値が等しいとき、2 つのフィールドは等しいと見なされます。
FLD_MBSTRING
型の値の場合、値は Fmbpack32()
関数のパッキングされた出力引数であり、引数 len
は Fmbpack32()
の出力引数 size
の値の長さです。
Ffindocc32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffindocc()
または Ffindocc32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffindocc()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FEINVAL
]
Ffindocc()
に渡した、あるいは無効な文字列パターンを指定した)。
FBADFLD
]
「FML 関数の紹介」、Ffind、Ffind32(3fml)
、Ffindlast、Ffindlast32(3fml)
、Ffinds、Ffinds32(3fml)
、UNIX システムのリファレンス マニュアルの regcmp
(3)
Ffinds()
、Ffinds32()
- 文字列表現を指すポインタを返す
#include <stdio.h>
#include "fml.h"
char *
Ffinds(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
)
#include "fml32.h"
char *
Ffinds32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
)
Ffinds()
は、ユーザ型 FLD_STRING
に変換する処理のために提供されます。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。指定されたフィールド オカレンスは、検索されると、バッファにあるその型から NULL 終了の文字列に変換されます。基本的に、このマクロは変換関数 CFfind()
を呼び出します。CFfind() は、utype (FLD_STRING
) および ulen (値が 0) を提供します。Ffinds()
が返すポインタが妥当である期間は、CFfind()
で記述されているものと同じです。
Ffinds32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffinds()
または Ffinds32()
を呼び出すことができます。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffinds()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
「FML 関数の紹介」、CFfind、CFfind32(3fml)
、Ffind、Ffind32(3fml)
Ffloatev()
、Ffloatev32()
、Fvfloatev()
、Fvfloatev32()
- 式の値を double 型で返す
#include <stdio.h>
#include "fml.h"
double
Ffloatev(FBFR *fbfr
, char *tree
)
double
Fvfloatev(char *cstruct
, char *tree
, char *viewname
)
#include "fml32.h"
double
Ffloatev32(FBFR32 *fbfr
, char *tree
)
double
Fvfloatev32(char *cstruct
, char *tree
, char *viewname
)
Ffloatev()
は、フィールド化バッファのポインタ (fbfr) および Fboolco()
が返す評価ツリーのポインタ (tree) を利用して、算術式の値 (ツリーによって表される) を double 型で返します。この関数は、フィールド化バッファあるいは評価ツリーのいずれも変更しません。
Ffloatev32()
は 32 ビット FML で使用されます。
Fvfloatev()
および Fvfloatev32()
は、同じ VIEW 機能を提供します。viewname パラメータは、フィールド オフセットを取り出す VIEW を示し、Fvboolco()
または Fvboolco32()
で指定された VIEW と同じにする必要があります。
Workstation プラットフォームでは、これらの関数はサポートされていません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Ffloatev()
、Ffloatev32()
、Fvfloatev()
、または Fvfloatev32()
を呼び出すことができます。
正常終了時には、Ffloatev()
は、表現の値を double で返します。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffloatev()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
FSYNTAX
]
FBADVIEW
]
FVFOPEN
]
EUNIX
]
FVFSYNTAX
]
FMALLOC
]
「FML 関数の紹介」、Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)
、Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)
Ffprint()
、Ffprint32()
- フィールド化バッファを指定されたストリームに出力
#include <stdio.h>
#include "fml.h"
int
Ffprint(FBFR *fbfr
, FILE *iop
)
#include "fml32.h"
int
Ffprint32(FBFR32 *fbfr
, FILE *iop
)
Ffprint()
は、テキストが指定された出力ストリームに出力されることを除いて、Fprint()
に類似しています。fbfr は、フィールド化バッファを指すポインタです。iop は、出力ストリームを指す FILE
型のポインタです。
バッファの各フィールドでは、フィールド名およびタブ区切りのフィールド値を出力します。Fname()
が、フィールド名を決めるために使用されます。フィールド名を決めることができない場合は、フィールド識別子が出力されます。文字列内の出力できない文字および文字配列のフィールド値は、2 文字の 16 進数 (円マークの後) で表されます。改行は、出力されるバッファの後に出力されます。
FLD_PTR
型の値の場合、Ffprint32()
はフィールド名またはフィールド識別子、およびポインタ値を 16 進数で出力します。この関数はポインタ情報を出力しますが、Fextread32()
関数は FLD_PTR
フィールド タイプを無視します。
FLD_FML32
型の値の場合、Ffprint32()
は各ネスト レベルに先行タブを追加することにより、再帰的に FML32 バッファを出力します。FLD_VIEW32
型の値の場合、Ffprint32()
は VIEW32 フィールド名、および構造体メンバーの名前と値のペアを出力します。
Ffprint32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffprint()
または Ffprint32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffprint()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
この関数は、Windows 用の Oracle Tuxedo System Workstation DLL では使用できません。
「FML 関数の紹介」、Fprint、Fprint32(3fml)
Ffree()
、Ffree32()
- フィールド化バッファ用に割り当てられた領域の解放
#include <stdio.h>
#include "fml.h"
int
Ffree(FBFR *fbfr
)
#include "fml32.h"
int
Ffree32(FBFR32 *fbfr
)
Ffree()
は、その引数であるフィールド化バッファ用に割り当てられた領域を取り戻します。fbfr
は、フィールド化バッファを指すポインタです。フィールド化バッファは、無効になります。つまり、非フィールド化となり、解放されます。Ffree32()
は、FLD_PTR
フィールドのポインタによって参照されるメモリ領域を解放しません。
Ffree()
は、(UNIX システムのリファレンス マニュアルの) free()
よりも有効です。Ffree()
は、フィールド化バッファを無効にしますが、free()
は無効にしません。フィールド化バッファを無効にすることは重要です。それは、(UNIX システムのリファレンス マニュアルの) malloc()
が、解放されたメモリをクリアせずに再使用するためです。このため、free()
が使用されると、malloc()
は、有効なフィールド化バッファのようであるが実際はそうではないメモリを返す恐れがあります。
Ffree32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffree()
または Ffree32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffree()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Falloc、Falloc32(3fml)
、Frealloc、Frealloc32(3fml)
UNIX システムのリファレンス マニュアルの free
(3)、malloc
(3)
Fget()
、Fget32()
- フィールド オカレンスのコピーおよび長さの取得
#include <stdio.h>
#include "fml.h"
int
Fget(FBFR *fbfr, FLDIDfieldid
, FLDOCC oc, char *loc
, FLDLEN
*maxlen
)
#include "fml32.h"
int
Fget32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, char *loc
,
FLDLEN32 *maxlen
)
Fget()
は、値が変更されたときに、フィールド化バッファのフィールドを検索するために使用されます。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。呼び出し側は、プライベート データ領域を指すポインタ (loc)、データ領域の長さ (*maxlen) を Fget()
に渡します。フィールドの長さは、*maxlen に返されます。関数が呼び出された時に、maxlen が NULL の場合は、そのフィールドの値 (loc) のデータ領域がフィールド値を入れるのに十分大きいために、値が返されないと想定されます。loc が NULL の場合は、値は検索されません。このように、この関数を呼び出すことにより、フィールドが存在するかどうかを確かめることができます。
上記の「形式」の項では、Fget()
の引数 value のデータ型は、char のポインタ (C の char *
) として記述されています。技術的には、これは、Fget()
に渡すことのできる値のある特定の値のみを記述しています。実際、value 引数の型は、検索されるフィールドのフィールド化バッファ表現の型と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG 型でバッファに格納されている場合は、value の型は、long 型のポインタ (C の long *
) である必要があります。同様に、FLD_SHORT 型でバッファに格納される場合、value は、short 型のポインタ (C の short *
) である必要があります。大事なことは、Fget()
は value で指されるオブジェクトが、検索される格納済みのフィールドの型と同じ型を持っていることを想定していることです。
FLD_MBSTRING
型の指定されたフィールド識別子の場合、Fget32() の戻り値は Fmbunpack(32)
関数を使用して解析できます。
Fget32() は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fget()
または Fget32()
を呼び出すことができます。
Fget32()
が FLD_VIEW32
フィールド タイプで使用されると、FVIEWFLD
構造体を指すポインタが返されます。この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fget()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、CFget、CFget32(3fml)
、Fgetalloc、Fgetalloc32(3fml)
、Fgetlast、Fgetlast32(3fml)
、Fgets、Fgets32(3fml)
、Fgetsa、Fgetsa32(3fml)
Fgetalloc()
、Fgetalloc32()
- 領域の割り当て、およびフィールド オカレンスのコピーの取得
#include <stdio.h>
#include "fml.h"
char *
Fgetalloc(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, FLDLEN *extralen
)
#include "fml32.h"
char *
Fgetalloc32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, FLDLEN32
*extralen
)
Fget()
同様、Fgetalloc()
は、バッファ フィールドのコピーの検索および作成を行いますが、malloc()
(UNIX System V『プログラマ リファレンス マニュアル』) を介してフィールド用の領域を取得します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。Fgetalloc()
の最後の引数 extralen は、フィールド値の大きさに加えて取得される予備の領域の大きさを提供します。extralen は、検索される値が、フィールド化バッファに再挿入される前に拡張される場合に使用されます。extralen が NULL の場合、割り当てる追加領域はなく、実際の長さは返されません。Fgetalloc()
で取得した領域を free()
で解放するのは呼び出し側の責任です。バッファは、あらゆるフィールドの型に対して正しく並べられます。
FLD_MBSTRING
型の指定されたフィールド識別子の場合、Fgetalloc32()
の戻り値は Fmbunpack(32)
関数を使用して解析できます。
Fgetalloc32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fgetalloc()
または Fgetalloc32()
を呼び出すことができます。
上記の「形式」の項では、Fgetalloc()
の戻り値のデータ型は、char のポインタ (C の char *
) として記述されています。実際、返されるポインタは、格納済みのフィールドの型と同じ型を持つオブジェクトを指しています。Fgetalloc32()
が FLD_VIEW32
フィールド タイプで使用されると、FVIEWFLD
構造体を指すポインタが返されます。この関数は、エラー発生時に NULL を返し、Ferror を設定してエラー条件を示します。
次の条件の場合、Fgetalloc()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
FMALLOC
]
「FML 関数の紹介」、CFget、CFget32(3fml)
、Fget、Fget32(3fml)
、Fgetlast、Fgetlast32(3fml)
、Fgets、Fgets32(3fml)
、Fgetsa、Fgetsa32(3fml)
UNIX システムのリファレンス マニュアルの free
(3)、malloc
(3)
Fgetlast()
、Fgetlast32()
- 最後のオカレンスのコピーの取得
#include <stdio.h>
#include "fml.h"
int
Fgetlast(FBFR *fbfr
, FLDIDfieldid
, FLDOCC *oc
, char *value
, FLDLEN
*maxlen
)
#include "fml32.h"
int
Fgetlast32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32 *oc
, char
*value
, FLDLEN32 *maxlen
)
Fgetlast()
は、フィールド識別子 (fieldid) で識別される最後のオカレンスの値とオカレンス番号の両方を検索するために使用されます。fbfr は、フィールド化バッファを指すポインタです。最後のフィールドのオカレンス番号を返すため、オカレンスの引数 (oc) は、整数型を指すポインタであり、整数ではありません。
呼び出し側は、プライベート バッファを指すポインタ (loc)、バッファの長さ (*
maxlen) を Fgetlast()
に提供します。フィールドの長さは、*
maxlen に返されます。関数が呼び出された時に、maxlen が NULL の場合は、そのフィールド値のバッファがフィールド値を入れるのには十分に大きいために、値が返されないと想定されます。loc が NULL の場合、値は返されません。oc が NULL の場合は、オカレンスは、返されません。
上記の「形式」の項では、Fgetlast()
の引数 value のデータ型は、char のポインタ (C の char *
) として記述されています。技術的には、これは、Fgetlast()
に渡すある特別な値のみを記述します。実際、value 引数の型は、検索されるフィールドのフィールド化バッファ表現の型と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG 型でバッファに格納されている場合は、value の型は、long 型のポインタ (C の long *
) である必要があります。同様に、FLD_SHORT 型でバッファに格納される場合、value は、short 型のポインタ (C の short *
) である必要があります。Fgetlast()
は value で指されるオブジェクトが、検索される格納済みのフィールドの型と同じ型を持っていることを想定していることが重要です。
FLD_MBSTRING
型の指定されたフィールド識別子の場合、Fgetlast32()
の戻り値は Fmbunpack(32)
関数を使用して解析できます。
Fgetlast32() は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fgetlast()
または Fgetlast32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fgetlast()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、Fget、Fget32(3fml)
、Fgetalloc、Fgetalloc32(3fml)
、Fgets、Fgets32(3fml)
、Fgetsa、Fgetsa32(3fml)
#include <stdio.h>
#include "fml.h"
int
Fgets(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, char *buf
)
#include "fml32.h"
int
Fgets32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, char *buf
)
Fgets()
は、フィールド化バッファからフィールド オカレンスを検索し、値をユーザ型 FLD_STRING
に変換します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。Fgets()
の呼び出し側は、プライベート バッファを指すポインタ (buf) を提供します。プライベート バッファは、検索されるフィールド値のために使用されます。buf は、値を保持するために十分に大きいと想定されています。基本的に、Fgets()
は、想定されている utype (FLD_STRING
) および ulen (値が 0) を利用して CFget()
を呼び出します。
Fgets32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fgets()
または Fgets32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fgets()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FMALLOC
]
「FML 関数の紹介」、CFget、CFget32(3fml)
、Fget、Fget32(3fml)
、Fgetalloc、Fgetalloc32(3fml)
、Fgetlast、Fgetlast32(3fml)
、Fgetsa、Fgetsa32(3fml)
Fgetsa()
、Fgetsa32()
- malloc()
で領域を割り当て、変換された値を取得する
#include <stdio.h>
#include "fml.h"
char *
Fgetsa(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
, FLDLEN *extra
)
#include "fml32.h"
char *
Fgetsa32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
, FLDLEN32
*extra
)
Fgetsa()
は、CFgetalloc()
を呼び出すマクロです。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。この関数は、UNIX System V『プログラマ リファレンス マニュアル』の malloc()
を使用して、文字列に変換されている検索対象のフィールド値に領域を割り当てます。extra が NULL でない場合、extra には、フィールド値の大きさに加えて割り当てる余分な領域を指定します。全体の大きさは、extra に返ります。
malloc()
で割り当てた領域を (UNIX システムのリファレンス マニュアルの) free()
を使用して解放するのは、ユーザの責任です。
Fgetsa32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fgetsa()
または Fgetsa32()
を呼び出すことができます。
正常終了の場合、割り当てられたバッファを指すポインタを返します。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fgetsa()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FMALLOC
]
「FML 関数の紹介」、CFget、CFget32(3fml)
、Fget、Fget32(3fml)
、Fgetlast、Fgetlast32(3fml)
、Fgets、Fgets32(3fml)
UNIX システムのリファレンス マニュアルの free
(3)、malloc
(3)
Fidnm_unload()
、Fidnm_unload32()
- id->nm
マッピング テーブルから領域を取り戻す
#include <stdio.h>
#include "fml.h"
void
Fidnm_unload(void);
#include "fml32.h"
void
Fidnm_unload32(void);
Fidnm_unload()
は、Fname()
によってフィールド識別子用に割り当てられた領域を、フィールド名のマッピング テーブル用に取り戻します。
Fidnm_unload32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fidnm_unload()
または Fidnm_unload32()
を呼び出すことができます。
「FML 関数の紹介」、Fname、Fname32(3fml)
、Fnmid_unload、Fnmid_unload32(3fml)
Fidxused()
、Fidxused32()
- 使用されている領域の大きさを返す
#include <stdio.h>
#include "fml.h"
long
Fidxused(FBFR *fbfr
)
#include "fml32.h"
long
Fidxused32(FBFR32 *fbfr
)
Fidxused()
は、バッファのインデックスで使用している現在の領域の大きさを示します。fbfr は、フィールド化バッファを指すポインタです。
Fidxused32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fidxused()
または Fidxused32()
を呼び出すことができます。
正常終了の場合、インデックスで使用しているバッファ内の領域の大きさを返します。この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fidxused()
は、異常終了して Ferror
を次のように設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Findex、Findex32(3fml)
、Frstrindex、Frstrindex32(3fml)
、Funused、Funused32(3fml)
、Fused、Fused32(3fml)
Fielded()
、Fielded32()
- バッファがフィールド化されている場合は、true
を返す
#include stdio.h>
#include "fml.h"
int
Fielded(FBFR *fbfr
)
#include "fml32.h"
int
Fielded32(FBFR32 *fbfr
)
Fielded()
は、指定されたバッファがフィールド化されているかを調べるのに使用されます。fbfr は、フィールド化バッファを指すポインタです。
Fielded32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fielded()
または Fielded32()
を呼び出すことができます。
Fielded()
は、バッファがフィールド化されている場合には true
を返します。また、バッファがフィールド化されていない場合は、false
を返しますが、この場合は Ferror
を設定しません。
「FML 関数の紹介」、Finit、Finit32(3fml)
、Fneeded、Fneeded32(3fml)
、Fsizeof、Fsizeof32(3fml)
Findex()
、Findex32()
- フィールド化バッファのインデックスを行う
#include <stdio.h>
#include "fml.h"
int
Findex(FBFR *fbfr
, FLDOCCintvl
)
#include "fml32.h"
int
Findex32(FBFR32 *fbfr
, FLDOCC32intvl
)
Findex()
は、フィールド化バッファのインデックスを行うために明示的に呼び出されます。fbfr は、フィールド化バッファを指すポインタです。2 番目のパラメータ intvl には、インデックスの間隔を指定します。つまり、インデックスするフィールドを理想的に分離します。intvl の値が 0 の場合は、現在のバッファのインデックス値が使用されます。現在の値が 0 の場合は、FSTDXINTVL
(省略時値は 16) が使用されます。インデックス値に 1 を使用すると、必ず、バッファにあるすべてのフィールドがインデックスされます。インデックス間隔の大きさとバッファのインデックスに割り当てられる領域の大きさは、反比例します。したがって、間隔が小さいとより多くのフィールドがインデックスされ、より多くの領域が使用されます。
Findex32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Findex()
または Findex32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Findex()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
「FML 関数の紹介」、Fidxused、Fidxused32(3fml)
、Frstrindex、Frstrindex32(3fml)
、Funindex、Funindex32(3fml)
Finit()
、Finit32()
- フィールド化バッファを初期化
#include <stdio.h>
#include "fml.h"
int
Finit(FBFR *fbfr
, FLDLENbuflen
)
#include "fml32.h"
int
Finit32(FBFR32 *fbfr
, FLDLEN32buflen
)
Finit()
は、フィールド化バッファを静的に初期化するために呼び出されます。fbfr は、フィールド化バッファを指すポインタです。buflen は、バッファの長さです。Finit() は、バッファを指すポインタおよびバッファの長さを利用して、フィールドを持たないバッファ用に内部的な構造体を設定します。また、Finit()
は以前使用したバッファを再初期化する場合にも使用します。
Finit32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Finit()
または Finit32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Finit()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
フィールドを持たないようバッファを再初期化する正しい方法は、Finit(fbfr, (FLDLEN)Fsizeof(fbfr));
です。
「FML 関数の紹介」、Falloc、Falloc32(3fml)
、Fneeded、Fneeded32(3fml)
、Frealloc、Frealloc32(3fml)
Fjoin()
、Fjoin32()
- ソース バッファを宛先バッファに組み込む
#include stdio.h>
#include "fml.h"
int
Fjoin(FBFR *dest
, FBFR *src
)
#include "fml32.h"
int
Fjoin32(FBFR32 *dest
, FBFR32 *src
)
Fjoin()
は、2 つのバッファをフィールド識別子/オカレンスの整合に基づいて結合するために使用されます。dest は、宛先バッファを指すポインタです。src は、元のフィールド化バッファを指すポインタです。フィールド ID/オカレンスと一致するフィールドの場合は、フィールド値はソース バッファの値を使って宛先バッファで更新されます。宛先バッファのフィールドに、ソース バッファ内の対応するフィールド識別子/オカレンスがない場合、そのフィールドは削除されます。バッファを組み込むことにより FLD_PTR
フィールドが削除されても、ポインタによって参照されるメモリ領域は変更または解放されません。
この関数は、新しい値が古い値より大きい場合に領域不足によって異常終了します。この場合、宛先バッファは変更されます。しかし、これが発生した場合でも、宛先バッファは、Frealloc()
および Fjoin()
を繰り返し使用することによって再割り当てできます。宛先バッファのある一部分が更新されている場合でも、Fjoin()
関数を繰り返し使用することにより正しい結果になります。
Fjoin32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fjoin()
または Fjoin32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fjoin()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FBFR *src, *dest; ... if(Fjoin(dest,src) 0) F_error("pgm_name");
dest
がフィールド A、B および C オカレンスを 2 個持っており、src
が、フィールド A、C および D を持っている場合、結果的に、dest
は、元のフィールド値 A および元のフィールド値 C を持つことになります。
「FML 関数の紹介」、Fconcat、Fconcat32(3fml)
、Fojoin、Fojoin32(3fml)
、Fproj、Fproj32(3fml)
、Fprojcpy、Fprojcpy32(3fml)
、Frealloc、Frealloc32(3fml)
Fldid()
、Fldid32()
- フィールド名をフィールド識別子にマップする
#include <stdio.h>
#include "fml.h"
FLDID
Fldid(char *name
)
#include "fml32.h"
FLDID32
Fldid32(char *name
)
Fldid()
は、フィールド名からフィールド識別子を導くランタイムな変換機能を提供し、そのフィールドの name パラメータに対応した FLDID
を返します。最初の呼び出しでは、フィールド テーブル用の領域が動的に割り当てられ、テーブルがロードされます。Fldid()
でロードしたフィールド テーブルが占有しているデータ領域を回復するには、Fnmid_unload()
関数を呼び出してファイルをアンロードする必要があります。
Fldid32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fldid()
または Fldid32()
を呼び出すことができます。
この関数は、エラー時には BADFLDID
を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fldid()
は異常終了し、Ferror
を次の値に設定します。
FBADNAME
]
FMALLOC
]
「FML 関数の紹介」、Fldno、Fldno32(3fml)
、Fname、Fname32(3fml)
、Fnmid_unload、Fnmid_unload32(3fml)
UNIX システムのリファレンス マニュアルの malloc
(3)
Fldno()
、Fldno32()
- フィールド識別子をフィールド番号にマップする
#include <stdio.h>
#include "fml.h"
int
Fldno(FLDID fieldid)
#include "fml32.h"
long
Fldno32(FLDID32 fieldid)
Fldno()
は、パラメータとしてフィールド識別子 (fieldid) を受け取り、識別子にあるフィールド番号を返します。
Fldno32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fldno()
または Fldno32()
を呼び出すことができます。
「FML 関数の紹介」、Fldid、Fldid32(3fml)
、Fldtype、Fldtype32(3fml)
Fldtype()
、Fldtype32()
- フィールド識別子をフィールド タイプにマップする
#include <stdio.h>
#include "fml.h"
int
Fldtype(FLDIDfieldid
)
#include "fml32.h"
int
Fldtype32(FLDID32fieldid
)
Fldtype()
は、フィールド識別子 (fieldid) を受け取り、fml.h
で定義されているように、識別子 (整数) にあるフィールド タイプを返します。
Fldtype32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fldtype()
または Fldtype32()
を呼び出すことができます。
「FML 関数の紹介」、Fldid、Fldid32(3fml)
、Fldno、Fldno32(3fml)
Flen()
、Flen32()
- バッファ中のフィールド オカレンスの len
を返す。
#include <stdio.h>
#include "fml.h"
int
Flen(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
)
#include "fml32.h"
long
Flen32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
)
Flen()
は、バッファ中の指定したフィールド オカレンスの値を見つけ出し、そのフィールド長を返します。fbfr
は、フィールド化バッファを指すポインタです。fieldid
は、フィールド識別子です。oc
はフィールドのオカレンス番号です。
FLD_PTR
型の値の場合、Flen32()
は sizeof(char*)
に基づくポインタ フィールドの固定長を返します。FLD_FML32
型の値の場合、Flen32()
はネストされたバッファの長さに対する Fused32()
の値を返します。FLD_VIEW32
型の値の場合、Flen32()
は VIEW データの長さと VIEW 名の長さを返します。
FLD_MBSTRING
型の値の場合、Flen32()
は Fmbpack32()
で作成され、パッキングされた出力の長さを返します。
Flen32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Flen()
または Flen32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件が発生すると、Flen()
は異常終了し、Ferror
を次のように設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
「FML 関数の紹介」、Fnum、Fnum32(3fml)
、Fpres、Fpres32(3fml)
Fmbpack32()
- エンコーディング名およびマルチバイト データ情報を準備する
#include "fml32.h"
int
Fmbpack32 (char *enc
,void *ind
,FLDLEN32indlen
,void
*packed
,FLDLEN32 *size
,longflags
)
Fmbpack32()
は、FML32 型付きバッファに入力された FLD_MBSTRING
フィールドのエンコーディング名およびマルチバイト データ情報を準備します。Fmbpack32()
は、FLD_MBSTRING
フィールドが FML32 API で FML32 バッファに追加される前に使用します。
enc
は、NULL でない場合、コード セットのマルチバイト データ (ind
) に対するコード セットのエンコーディング名を保持する ASCII 文字列 (NULL で終了) です。enc
が NULL、引数 flags
が 0 の場合、出力 packed
に含められるエンコーディング名は、プロセス TPMBENC
環境変数から取得されます。引数 flags
が FBUFENC
の場合、enc
は無視されます。
packed
は、Fmbpack32()
の出力を指すポインタです。これは、FML32 バッファに FLD_MBSTRING
フィールドを含める FML32 API の入力値として使用されます。パック領域は、FLDLEN32(TM32U) バウンダリに配置する必要があります。
入力での size
は、packed
が指すメモリ サイズです。サイズが Fmbpack32()
の結果の処理には不十分な場合、FNOSPACE
が返され、size
は packed
のバイト数にリセットされます。Fmbpack32()
が正常に実行された後、size
は実際に使用されたバイト数にリセットされます。
flags
は、0 または FBUFENC
です。flags
を FBUFENC
に設定すると、Fmbpack32()
は引数 enc
を無視し、FBUFENC
を packed
の入力データと共に含めます。エンコーディング名を指定しない場合、出力 packed
は、FML32 API によって強制的に FLD_MBSTRING
フィールドでエンコーディング名を FML32 バッファから取得するよう処理します。したがって、FBUFENC
を使用する場合、FML32 バッファのエンコーディング名を設定するために、アプリケーション開発者は tpsetmbenc()
も使用する必要があります。
Fmbpack32()
は、正しく終了すると正の値を返します。Fmbpack32()
は、エラー発生時に -1 を返し、Ferror32
を設定してエラー条件を示します。
次の条件の場合、Fmbpack32()
は異常終了し、Ferror32
を次の値に設定します。
FEINVAL
]
FNOSPACE
]
Fmbunpack32(3fml)
、tpconvfmb32(3fml)
、tpsetmbenc(3c)、tuxgetmbenc(3c)、tuxsetmbenc(3c)
Fmbunpack32()
- エンコーディング名およびマルチバイト データ情報を抽出する
#include "fml32.h"
int
Fmbunpack32 (void *packed
,FLDLEN32ilen
,char *enc
,void
*outd
,FLDLEN32 *olen
,longflags
)
Fmbunpack32()
は、FML32 型付きバッファ内の FLD_MBSTRING
フィールドからエンコーディング名およびマルチバイト データ情報を抽出します。Fmbunpack32()
は、FLD_MBSTRING
フィールドが FML32 API (Ffind32()
、Fget32()
、など) で FML32 バッファから抽出された後に使用します。
packed
は、FML32 API で出力された FLD_MBSTRING
フィールドのデータを指すポインタです。
enc
は、FLD_MBSTRING
フィールドのコード セットのエンコーディング名が、パッキングされた情報 (packed
) の一部である場合に、エンコーディング名を保持する packed
内の ASCII 文字列 (NULL で終了) です。FBUFENC
フラグを設定して Fmbpack32()
で FLD_MBSTRING
フィールドを作成した場合、enc
は NULL に設定します。後者の場合、アプリケーション開発者は、FML32 バッファで tpgetmbenc()
を使用して、FLD_MBSTRING
フィールドのエンコーディング名を取得する必要があります。
outd
には、Fmbunpack32()
の正常終了時に packed
から抽出されるマルチバイト データが入ります。
入力での olen
は、outd
が指すメモリ サイズです。サイズが Fmbunpack32()
の結果の処理には不十分な場合、FNOSPACE
が返され、olen
は outd
のバイト数にリセットされます。Fmbunpack32()
が正常に実行された後、olen
は実際に使用されたバイト数にリセットされます。
Fmbunpack32()
は、正しく終了すると正の値を返します。Fmbunpack32()
は、エラー発生時に -1 を返し、Ferror32
を設定してエラー条件を示します。
次の条件の場合、Fmbunpack32()
は異常終了し、Ferror32
を次の値に設定します。
FEINVAL
]
FNOSPACE
]
Fmbpack32(3fml)
、tpconvfmb32(3fml)
、tpgetmbenc(3c)、tuxgetmbenc(3c)、tuxsetmbenc(3c)
Fmkfldid()
、Fmkfldid32()
- フィールド識別子を作成
#include <stdio.h>
#include "fml.h"
FLDID
Fmkfldid(inttype
, FLDIDnum
)
#include "fml.h"
FLDID32
Fmkfldid32(inttype
, FLDID32num
)
Fmkfldid()
によって、有効な型 (fml.h
で定義されている) から有効なフィールド識別子を作成できます。フィールド番号を順次選択するアプリケーション ジェネレータをコーディングする場合、あるいはフィールド識別子を再作成する場合に役立ちます。
type は、有効なフィールド タイプです (整数。「Fldtype、Fldtype32(3fml)
」を参照)。num は、フィールド番号です (現在あるフィールドとの混同をさけるために未使用のフィールド番号でなければならない)。
Fmkfldid32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fmkfldid()
または Fmkfldid32()
を呼び出すことができます。
この関数は、エラー時には BADFLDID
を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fmkfldid()
は異常終了し、Ferror
を次の値に設定します。
FBADFLD
]
FTYPERR
]
「FML 関数の紹介」、Fldtype、Fldtype32(3fml)
Fmove()
、Fmove32()
- フィールド化バッファを宛先バッファに移動
#include <stdio.h>
#include "fml.h"
int
Fmove(char *dest
, FBFR *src
)
#include "fml32.h"
int
Fmove32(char *dest
, FBFR32 *src
)
Fmove()
は、フィールド化バッファから任意の型のバッファに複写するときに使用されます。dest は、宛先バッファを指すポインタです。src は、元のフィールド化バッファを指すポインタです。
Fmove()
と Fcpy()
の違いとして、Fcpy()
は、宛先バッファをフィールド化バッファにする点です。これにより、フィールド化バッファが、元のバッファからのデータを入れるために十分な大きさになります。Fmove()
は、このような検査は行いません。何の検査もせずに、ソース フィールド化バッファの Fsizeof()
バイトのデータをターゲット バッファに移動します。宛先バッファは、short バウンダリで並んでいる必要があります。
FLD_PTR
型の値の場合、Fmove32()
はバッファ ポインタを渡します。アプリケーション プログラマは、対応するポインタの移動に応じてバッファの再割り当て、および解放を管理する必要があります。
Fmove32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fmove()
または Fmove32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fmove()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Fcpy、Fcpy32(3fml)
、Fsizeof、Fsizeof32(3fml)
Fname()
、Fname32()
- フィールド識別子をフィールド名にマップする
#include <stdio.h>
#include "fml.h"
char *
Fname(FLDIDfieldid
)
#include "fml32.h"
char *
Fname32(FLDID32fieldid
)
Fname()
は、フィールド識別子 (fieldid) からフィールド名を導くランタイムな変換機能を提供し、引数に対応した名前を持つ文字列を指すポインタを返します。最初の呼び出しでは、フィールド テーブル用の領域が動的に割り当てられ、テーブルがロードされます。Fname()
で作成したマッピング テーブルによって使用されているテーブル領域は、Fidnm_unload()
関数を呼び出して回復することができます。
Fname32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fname()
または Fname32()
を呼び出すことができます。
返されたポインタは内部 FML テーブルで保持されます。マルチスレッド アプリケーションが、返されたポインタへの参照を解除する場合は、アプリケーション コード自体でスレッドセーフにする必要があります。Fnmid_unload/Fidnm_unload
が発行された場合は、Fname
によって返されたポインタへの参照を解除しないでください。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fname()
は異常終了し、Ferror
を次の値に設定します。
FBADFLD
]
FMALLOC
]
「FML 関数の紹介」、Ffprint、Ffprint32(3fml)
、Fidnm_unload、Fidnm_unload32(3fml)
、Fldid、Fldid32(3fml)
、Fprint、Fprint32(3fml)
Fneeded()
、Fneeded32()
- バッファに必要な大きさの計算
#include <stdio.h>
#include "fml.h"
long
Fneeded(FLDOCCF
, FLDLENV
)
#include "fml32.h"
long
Fneeded32(FLDOCC32F
, FLDLEN32V
)
Fneeded()
は、フィールド化バッフアに割り当てなければならない領域を決める場合に使用されます。引数 F はフィールドの数、引数 V はすべてのフィールド値に必要な領域のバイト数です。
Fneeded32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fneeded()
または Fneeded32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fneeded()
は異常終了し、Ferror
を次の値に設定します。
FEINVAL
]
「FML 関数の紹介」、Falloc、Falloc32(3fml)
、Fielded、Fielded32(3fml)
、Finit、Finit32(3fml)
、Fsizeof、Fsizeof32(3fml)
、Funused、Funused32(3fml)
、Fused、Fused32(3fml)
Fnext()
、Fnext32()
- 次のフィールド オカレンスの取得
#include <stdio.h>
#include "fml.h"
int
Fnext(FBFR *fbfr
, FLDID *fieldid
, FLDOCC *oc
, char *value
, FLDLEN *len
)
#include "fml32.h"
int
Fnext32(FBFR32 *fbfr
, FLDID32 *fieldid
, FLDOCC32 *oc
, char *value
, FLDLEN32 *len
)
Fnext()
は、指定されたフィールド オカレンスの後、バッファ内の次のフィールドを検索します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子を指すポインタです。oc は、フィールドのオカレンス番号を指すポインタです。value は、次のフィールドの値を指すポインタです。len は、次の値の長さです。
フィールド識別子 FIRSTFLDID
は、バッファにある最初のフィールドを取得するために指定する必要があります (たとえば、Fnext()
の最初の呼び出しにおいて)。value が NULL でない場合、次のフィールド値は、value に複写されます。*
len は、値を入れるために割り当てられる十分な領域がバッファにあるかを判断するために使用されます。値の長さは、*
len に返されます。関数が呼び出されたときに len が NULL の場合は、十分な領域があるために、新しい値の長さが返されないと想定されます。value が NULL の場合、値は検索されず、fieldid および oc のみ更新されます。*
fieldid パラメータは、次に検索されるフィールドに設定されます。*
oc パラメータは、次のオカレンスに設定されます。検索するフィールドがこれ以上ない場合、0 (バッファの終わり) が返されます。*
fieldid、*
oc、および *
value は変更されません。フィールドは、フィールド識別子の順に返されます。
値の型は、char
*
ですが、返される値は、検索される次のフィールドと同じ型になります。
検索されるフィールドのタイプが FLD_VIEW32
である場合、value
パラメータは FVIEWFLD
構造体を指します。Fnext()
関数を使用して、構造体の vname
フィールドと data
フィールドを設定します。
Fnext32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fnext()
または Fnext32()
を呼び出すことができます。
Fnext()
は、次のオカレンスを正常に検索できた場合、1 を返します。バッファの終わりに達した場合は、0 を返します。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fnext()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FEINVAL
]
「FML 関数の紹介」、Fget、Fget32(3fml)
、Fnum、Fnum32(3fml)
名前
Fnmid_unload()
、Fnmid_unload32()
- nm->id
マッピング テーブルから領域を取り戻す
#include <stdio.h>
#include "fml.h"
void Fnmid_unload(void)
#include "fml32.h"
void Fnmid_unload32(void)
Fldid()
でロードしたフィールド テーブルが占有しているデータ領域を回復するには、Fnmid_unload()
関数を呼び出してファイルをアンロードする必要があります。
Fnmid_unload32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fnmid_unload()
または Fnmid_unload32()
を呼び出すことができます。
「FML 関数の紹介」、Fidnm_unload、Fidnm_unload32(3fml)
、Fldid、Fldid32(3fml)
Fnum()
、Fnum32()
- バッファにあるすべてのオカレンスの数を返す
#include <stdio.h>
#include "fml.h"
FLDOCC
Fnum(FBFR *fbfr
)
#include "fml32.h"
FLDOCC32
Fnum32(FBFR *fbfr
)
Fnum()
は、指定されたバッファにあるフィールドの数を返します。fbfr は、フィールド化バッファを指すポインタです。FLD_FML32
フィールドおよび FLD_VIEW32
フィールドは、含まれるフィールドの数に関係なく、単一のフィールドとしてカウントされます。
Fnum32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fnum()
または Fnum32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fnum()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Foccur、Foccur32(3fml)
、Fpres、Fpres32(3fml)
Foccur()
、Foccur32()
- バッファにあるフィールド オカレンスの数を返す
#include <stdio.h>
#include "fml.h"
FLDOCC
Foccur(FBFR *fbfr
, FLDIDfieldid
)
#include "fml32.h"
FLDOCC32 Foccur32(FBFR32 *fbfr
, FLDID32fieldid
)
Foccur()
は、fbfr
で参照されるバッファの fieldid
で指定されるフィールド オカレンスの数を決めるために使用されます。FLD_FML32
フィールド タイプであるため、埋め込み型の FML32 バッファ内のフィールドのオカレンスはカウントされません。
Foccur32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Foccur()
または Foccur32()
を呼び出すことができます。
正常終了の場合、Foccur()
は、オカレンスの数を返します。オカレンスがない場合は、0 を返します。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Foccur()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FBADFLD
]
「FML 関数の紹介」、Fnum、Fnum32(3fml)
、Fpres、Fpres32(3fml)
Fojoin()
、Fojoin32()
- ソース バッファを宛先バッファに組み込む
#include <stdio.h>
#include "fml.h"
int
Fojoin(FBFR *dest
, FBFR *src
)
#include "fml32.h"
int
Fojoin32(FBFR32 *dest
, FBFR32 *src
)
Fojoin()
は、Fjoin()
に似ていますが、宛先バッファ dest のフィールドに、ソース バッファ src に対応するフィールド識別子/オカレンスがない場合でも、そのフィールドは削除されません。対応するフィールド識別子/オカレンスを宛先バッファに持たないソース バッファにあるフィールドは、宛先バッファに追加されません。バッファを組み込むことにより FLD_PTR
フィールドが削除されても、ポインタによって参照されるメモリ領域は変更または解放されません。
Fjoin()
と同様、この関数は領域不足により異常終了し、さらに領域を割り当てた後、操作を完了するために再起動されます。
Fojoin32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fojoin()
または Fojoin32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fojoin()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
if(Fojoin(dest,src) 0)
F_error("pgm_name");
dest
が、フィールド A、B および C のオカレンスを 2 個持っており、src
が、フィールド A、C および D を持っている場合、結果的に、dest
は、ソース フィールド値 A、宛先フィールド値 B、ソース フィールド値 C、および 2 番目の宛先フィールド値 C を含んでいます。
「FML 関数の紹介」、Fconcat、Fconcat32(3fml)
、Fjoin、Fjoin32(3fml)
、Fproj、Fproj32(3fml)
Fpres()
、Fpres32()
- フィールド オカレンスがバッファにある場合は true
を返す
#include <stdio.h>
#include "fml.h"
int
Fpres(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
)
#include "fml32.h"
int
Fpres32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
)
Fpres()
は、指定されたフィールド (fieldid
) のオカレンス (oc
) が、fbfr
で参照されるバッファにあるかを検出するために使用されます。Fpres32()
は、指定されたフィールドのオカレンスが、埋め込み型のバッファにあるかチェックしません。埋め込み型のバッファ内のフィールドは FLD_FML32
フィールド タイプです。
Fpres32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fpres()
または Fpres32()
を呼び出すことができます。
Fpres()
は、指定されたオカレンスがある場合は true
を、そうでない場合は、false
を返します。
「FML 関数の紹介」、Ffind、Ffind32(3fml)
、Fnum、Fnum32(3fml)
、Foccur、Foccur32(3fml)
Fprint()
、Fprint32()
- 標準出力にバッファを出力する
#include <stdio.h>
#include "fml.h"
int
Fprint(FBFR *fbfr
)
#include "fml32.h"
int
Fprint32(FBFR32 *fbfr
)
Fprint()
は、標準出力に指定されたバッファを出力します。fbfr は、フィールド化バッファを指すポインタです。バッファの各フィールドでは、フィールド名およびタブ区切りのフィールド値を出力します。Fname()
が、フィールド名を決めるために使用されます。フィールド名を決めることができない場合は、フィールド識別子が出力されます。文字列内の出力できない文字および文字配列のフィールド値は、2 文字の 16 進数 (円マークの後) で表されます。改行は、出力されるバッファの後に出力されます。
FLD_PTR
型の値の場合、Fprint32()
はフィールド名またはフィールド識別子、およびポインタ値を 16 進数で出力します。この関数はポインタ情報を出力しますが、Fextread32()
関数は FLD_PTR
フィールド タイプを無視します。
FLD_FML32
型の値の場合、Fprint32()
は各ネスト レベルに先行タブを追加して、再帰的に FML32 バッファを出力します。FLD_VIEW32
型の値の場合、Fprint32()
は VIEW32 フィールド名、および構造体メンバーの名前と値のペアを出力します。
Fprint32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fprint()
または Fprint32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fprint()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
「FML 関数の紹介」、Fextread、Fextread32(3fml)
、Ffprint、Ffprint32(3fml)
、Fname、Fname32(3fml)
Fproj()
、Fproj32()
- バッファのプロジェクション
#include <stdio.h>
#include "fml.h"
int
Fproj(FBFR *fbfr
, FLDID *fieldid
)
#include "fml32.h"
int
Fproj32(FBFR32 *fbfr
, FLDID32 *fieldid
)
Fproj()
は、必要なフィールドのみを維持する目的から、バッファを更新するために使用されます。fbfr は、フィールド化バッファを指すポインタです。必要なフィールドは、fieldid で指されるフィールド識別子の配列で指定されます。配列の最後のエントリは、BADFLDID
でなければなりません。更新は、その場所で行われます。したがって、投影の結果にないフィールドは、フィールド化バッファから削除されます。フィールド識別子の配列は、再配列される場合があります。それらが番号順でない場合、ソートされます。バッファを更新することにより FLD_PTR
フィールドが削除されても、ポインタによって参照されるメモリ領域は変更または解放されません。
Fproj32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fproj()
または Fproj32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fproj()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
#include "fld.tbl.h"
FBFR *fbfr;
FLDID fieldid[20];
...
fieldid[0] = A; /* フィールド A のフィールド識別子 */
fieldid[1] = D; /* フィールド D のフィールド識別子 */
fieldid[2] = BADFLDID; /* 標識値 */
...
if(Fproj(fbfr, fieldid) 0)
F_error("pgm_name");
バッファが、フィールド A、B、C および D を持っている場合、使用例の結果、バッファは、フィールド A および D のオカレンスのみ持つようになります。フィールド識別子の配列のエントリは、特定の順番になっている必要はありませんが、フィールド識別子の配列の最後の値は、フィールド識別子 0 (BADFLDID
) である必要があります。
「FML 関数の紹介」、Fjoin、Fjoin32(3fml)
、Fojoin、Fojoin32(3fml)
、Fprojcpy、Fprojcpy32(3fml)
Fprojcpy()
、Fprojcpy32()
- バッファのプロジェクションおよびコピー
#include <stdio.h>
#include "fml.h"
int
Fprojcpy(FBFR *dest
, FBFR *src
, FLDID *fieldid
)
#include "fml32.h"
int
Fprojcpy32(FBFR32 *dest
, FBFR32 *src
, FLDID32 *fieldid
)
Fprojcpy()
は、Fproj()
と類似していますが、プロジェクションはその場所で行われず、宛先バッファで行われます。dest は宛先バッファのポインタです。src は、元のフィールド化バッファを指すポインタです。fieldid は、フィールド識別子の配列を指すポインタです。宛先バッファのすべてのフィールドは、最初に削除され、ソース バッファに投影した結果は宛先バッファに組み込まれます。ソース バッファは変更されません。フィールド識別子の配列は、再配列される場合があります。それらが番号順でない場合、ソートされます。バッファを更新することにより FLD_PTR
フィールドが削除されても、ポインタによって参照されるメモリ領域は変更または解放されません。
この関数は、領域が不足した場合に異常終了します。この関数は、操作を完了するために付加領域を十分に割り当てた後、再起動されます。
Fprojcpy32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fprojcpy()
または Fprojcpy32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fprojcpy()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
「FML 関数の紹介」、Fjoin、Fjoin32(3fml)
、Fojoin、Fojoin32(3fml)
、Fproj、Fproj32(3fml)
Fread()
、Fread32()
- フィールド化バッファの読み取り
#include <stdio.h>
#include "fml.h"
int
Fread(FBFR *fbfr
, FILE *iop
)
#include "fml32.h"
int
Fread32(FBFR32 *fbfr
, FILE32 *iop
)
フィールド化バッファは、Fread()
を使用して、ファイル ストリームから読み取られます。fbfr は、フィールド化バッファを指すポインタです。iop は、FILE
型の入力ストリームを指すポインタです (ストリームについては、UNIX System V『プログラマ リファレンス マニュアル』の stdio
(3S) を参照)。Fread()
は、フィールド化バッファをストリームから fbfr
に読み取り、以前に格納されているバッファのデータをクリアしてバッファのインデックスを再作成します。FLD_PTR
フィールド タイプは、Fread32()
では無視されます。関数にタイプ FLD_PTR
の値が与えられても、エラーは返されません。
Fread32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fread()
または Fread32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fread()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
Finit()
で初期化されていません。また、このエラーは、読み取られたデータがフィールド化バッファでない場合に返されます。
FNOSPACE
]
FEUNIX
]
read()
システム コールが異常終了しました。外部変数の整数型データ errno
は、システム コールによるエラーを示すために設定される必要があります。
この関数は、Windows 用の Oracle Tuxedo System Workstation DLL では使用できません。
「FML 関数の紹介」、Findex、Findex32(3fml)
、Fwrite、Fwrite32(3fml)
UNIX システムのリファレンス マニュアルの stdio
(3S)
Frealloc()
、Frealloc32()
- フィールド化バッファの再割り当て
#include <stdio.h>
#include "fml.h"
FBFR *
Frealloc(FBFR *fbfr
, FLDOCCnf
, FLDLENnv
)
#include "fml32.h"
FBFR32 *
Frealloc32(FBFR32 *fbfr
, FLDOCC32nf
, FLDLEN32nv
)
Frealloc()
は、フィールド化バッファを拡大するための領域の再割り当てに使用されます。fbfr は、フィールド化バッファを指すポインタです。2 番目のパラメータ nf は、新しいフィールドの数です。3 番目のパラメータ nv は、新しい値の領域のバイト数です。これらは、増分ではありません。
Frealloc32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Frealloc()
または Frealloc32()
を呼び出すことができます。
正常終了の場合、Frealloc()
は、再割り当てされた FBFR を指すポインタを返します。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Frealloc()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEINVAL
]
FMALLOC
]
「FML 関数の紹介」、Falloc、Falloc32(3fml)
、Ffree、Ffree32(3fml)
Frstrindex()
、Frstrindex32()
- バッファにあるインデックスをリストアする
#include <stdio.h>
#include "fml.h"
int
Frstrindex(FBFR *fbfr
, FLDOCCnumidx
)
#include "fml32.h"
int
Frstrindex32(FBFR32 *fbfr
, FLDOCC32numidx
)
インデックス解除されたフィールド化バッファは、Findex()
または Frstrindx()
を呼び出して再インデックスされます。fbfr は、フィールド化バッファを指すポインタです。Findex() は、バッファのすべてのインデックスを計算するため、かなり効率が悪くなります (バッファをすべてスキャンすることが必要になる)。この関数は、インデックスされていないバッファが変更された場合、またはバッファの前の状態がわからないとき (たとえば、バッファがあるプロセスから他のプロセスへインデックスなしで送られた場合) に使用する必要があります。Frstrindex()
は、非常に高速ですが、バッファが、前のインデックス解除操作以降、変更されていない場合のみ使用されます。Frstrindx()
の 2 番目の引数 numidx は、Funindex()
関数の戻り値です。
Frstrindex32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Frstrindex()
または Frstrindex32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Frstrindex()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
バッファをインデックスなしで送信するためには、次のような文が実行されます。
save = Funindex(fbfr);
num_to_send = Fused(fbfr);
transmit(fbfr,num_to_send); /* 仮定の関数 */ Frstrindx(fbfr,save);
1. - /* インデックスを解除し、Frstrindx を保存する */
2. - /* 送信するバイト数を決める */
3. - /* インデックスなしで fbfr を送信する */
4. - /* インデックスをリストアする */
この場合、transmit()
には、メモリ ポインタおよび長さが渡されます。送信されるデータは、メモリ ポインタで始まり、num_to_send
バイトです。いったんバッファが送信されると、そのインデックスは、Frstrindex()
を使用してリストアされます (どのような場合でも、transmit()
が、インデックスを変更しないことが前提となっている)。送信の終わりを受信すると、フィールド化バッファを受け取ったプロセスは、Findex()
を使用してそのバッファを次に示す方法でインデックスします。
receive(fbfr); /* 任意の場所から fbfr を取得する */
Findex(fbfr); /* fbfr をインデックスする */
受信プロセスは、次の理由により Frstrindx()
を呼び出すことができません。
解決策としては、Findex()
を明示的に呼び出すことです。もちろんユーザは、フィールド化バッファのインデックスのバージョンを自由に送信する (つまり、Fsizeof(*
fbfr
)
バイトを送信する) ことができ、受信側の Findex()
のコストを回避します。
「FML 関数の紹介」、Findex、Findex32(3fml)
、Fsizeof、Fsizeof32(3fml)
、Funindex、Funindex32(3fml)
Fsizeof()
、Fsizeof32()
- フィールド化バッファのサイズを返す
#include <stdio.h>
#include "fml.h"
long
Fsizeof(FBFR *fbfr
)
#include "fml32.h"
long
Fsizeof32(FBFR32 *fbfr
)
Fsizeof()
は、フィールド化バッファのサイズをバイト数で返します。fbfr は、フィールド化バッファを指すポインタです。
Fsizeof32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fsizeof()
または Fsizeof32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fsizeof()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Fidxused、Fidxused32(3fml)
、Fused、Fused32(3fml)
、Funused、Funused32(3fml)
Fstrerror()
、Fstrerror32()
- FML エラーのエラー メッセージ文字列の取得
#include <fml.h>
char *
Fstrerror(int err)
#include <fml32.h>
char *
Fstrerror32(int err)
Fstrerror()
は、LIBFML_CAT
からエラー メッセージのテキストを検索するために使用します。err は、FML 関数呼び出しが -1 またはその他のエラー値を返したときに F_error
に設定されるエラー コードです。
Fstrerror()
が返したポインタを、userlog()
または F_error
への引数として使用できます。
Fstrerror32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fstrerror()
または Fstrerror32()
を呼び出すことができます。
err が無効なエラー コードの場合、Fstrerror()
は、NULL を返します。正常終了した場合は、この関数は、エラー メッセージのテキストを持つ文字列を指すポインタを返します。
Fstrerror()
は、エラーが発生すると NULL を返します。この場合は、F_error
の設定をしません。
「FML 関数の紹介」、tpstrerror(3c)、userlog(3c)、F_error、F_error32(3fml)
Ftypcvt()
、Ftypcvt32()
- フィールド タイプを別のフィールド タイプに変換
#include <stdio.h>
#include "fml.h"
char *
Ftypcvt(FLDLEN *tolen
, inttotype
, char *fromval
, intfromtype
,
FLDLENfromlen
)
#include "fml32.h"
char *
Ftypcvt32(FLDLEN32 *tolen
, inttotype
, char *fromval
, intfromtype
,
FLDLEN32fromlen
)
Ftypcvt()
は、値 *
fromval
を型 totype
に変換します。値 *fromval は、型 fromtype
および長さ fromlen
を持ちます (fromtype
が FLD_CARRAY
の場合。それ以外の場合は fromlen
が fromtype
から推定される)。Ftypcvt()
は、正常終了時、変換した値にポインタを返し、*
tolen
を変換された長さに設定します。異常終了時は Ftypcvt()
は NULL を返します。
Ftypcvt32()
は、FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、または FLD_VIEW32
のフィールド タイプが使用されると異常終了します。これらのフィールド タイプの 1 つが指定されると、Ferror
に FEBADOP
が設定されます。
Ftypcvt32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ftypcvt()
または Ftypcvt32()
を呼び出すことができます。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ftypcvt()
は異常終了し、Ferror
を次の値に設定します。
FMALLOC
]
malloc()
を使用しての領域の動的な割り当てが失敗しました。
FEINVAL
]
FTYPERR
]
FTYPERR
]
「FML 関数の紹介」、CFadd、CFadd32(3fml)
、CFchg、CFchg32(3fml)
、CFfind、CFfind32(3fml)
、CFget、CFget32(3fml)
、CFgetalloc、CFgetalloc32(3fml)
Ftype()
、Ftype32()
- フィールド タイプを指すポインタを返す
#include <stdio.h>
#include "fml.h"
char *
Ftype(FLDIDfieldid
)
#include "fml32.h"
char *
Ftype32(FLDID32fieldid
)
Ftype()
は、フィールド識別子 fieldid を受け取り、フィールドの型名を持つ文字列を指すポインタを返します。たとえば、Ftype()
に short
型の FLDID
が与えられた場合は、文字列 "short." を指すポインタが返されます。このデータ領域は読み取り専用です。
Ftype32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Ftype()
または Ftype32()
を呼び出すことができます。
Ftype()
は、正常終了時にフィールド タイプを識別する文字列を指すポインタを返します。
この関数は、エラー発生時に NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ftype()
は異常終了し、Ferror
を次の値に設定します。
FTYPERR
]
「FML 関数の紹介」、Fldid、Fldid32(3fml)
、Fldno、Fldno32(3fml)
Funindex()
、Funindex32()
- フィールド化バッファのインデックスの破棄
#include <stdio.h>
#include "fml.h"
FLDOCC
Funindex(FBFR *fbfr
)
#include "fml32.h"
FLDOCC32
Funindex32(FBFR32 *fbfr
)
Funindex()
は、フィールド化バッファのインデックスを破棄します。fbfr はフィールド化バッファを指すポインタです。この関数が正常終了して戻る場合は、バッファはインデックスなしになります。結果として、インデックスにバッファ領域は割り当てられず、ユーザ フィールドとして利用可能な領域が増加します。ただし、アクセス時間が遅くなる可能性があります。ディスクに格納する場合、または別の場所に転送する場合は、バッファをインデックスなしにすることが有効です。ディスク格納の場合、ディスク領域が節約され、転送を行う場合、転送コストを減少させることができます。
バッファがインデックスなしになった後、バッファ開始からの上位バイトの数は関数呼び出し Fused(fbfr)
によって決定されます。
Funindex32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Funindex()
または Funindex32()
を呼び出すことができます。
Funindex()
は、インデックスが取り除かれる前にバッファが持つインデックスの要素数を返します。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Funindex()
は、異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Findex、Findex32(3fml)
、Frstrindex、Frstrindex32(3fml)
、Fsizeof、Fsizeof32(3fml)
、Funused、Funused32(3fml)
Funused()
、Funused32()
- フィールド化バッファの未使用分のバイト数を返す
#include <stdio.h>
#include "fml.h"
long
Funused(FBFR *fbfr
)
#include "fml32.h"
long
Funused32(FBFR32 *fbfr
)
Funused()
は、現在使用していないバッファ領域の量を返します。ユーザ データまたはヘッダやインデックスといった、オーバーヘッド データを含まない領域は使用されていません。
Funused32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Funused()
または Funused32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Funused()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Fidxused、Fidxused32(3fml)
、Fused、Fused32(3fml)
Fupdate()
、Fupdate32()
- ソース バッファで宛先バッファを更新する
#include <stdio.h>
#include "fml.h"
int
Fupdate(FBFR *dest
, FBFR *src
)
#include "fml32.h"
int
Fupdate32(FBFR32 *dest
, FBFR32 *src
)
Fupdate()
は、ソース バッファのフィールド値で宛先バッファを更新します。dest および src は、フィールド化バッファを指すポインタです。フィールド ID/オカレンスと一致するフィールドの場合は、フィールド値はソース バッファの値を使って宛先バッファで更新されます。ソース バッファに、一致するフィールドを持たない宛先バッファのフィールドはそのままです。宛先バッファに、一致するフィールドを持たないソース バッファのフィールドが、宛先バッファに追加されます。
FLD_PTR
型の値の場合、Fupdate32()
はポインタの値を格納します。FLD_PTR
フィールドが指すバッファを割り当てるには、tpalloc()
を呼び出します。FLD_FML32
型の値の場合、Fupdate32()
はインデックスを除いた FLD_FML32
フィールド全体の値を格納します。FLD_VIEW32
型の値の場合、Fupdate32()
は FVIEWFLD
型の構造体を指すポインタを格納します。これには、vflags
(現在未使用で 0 に設定された flags フィールド)、vname
(VIEW 名を含む文字配列)、および
data
(C 構造体として格納される VIEW データを指すポインタ) が含まれます。アプリケーションは、vname
と data
を Fupdate32()
に提供します。
Fupdate32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fupdate()
または Fupdate32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fupdate()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
「FML 関数の紹介」、Fjoin、Fjoin32(3fml)
、Fojoin、Fojoin32(3fml)
、Fproj、Fproj32(3fml)
、Fprojcpy、Fprojcpy32(3fml)
Fused()
、Fused32()
- フィールド化バッファで使用しているバイト数を返す
#include <stdio.h>
#include "fml.h"
long
Fused(FBFR *fbfr
)
#include "fml32.h"
long
Fused32(FBFR32 *fbfr
)
Fused()
は、ユーザ データとヘッダの両方を含む (インデックスは、いつでもドロップできるため含まない)、フィールド化バッファで使用している領域のサイズをバイト数で返します。fbfr は、フィールド化バッファを指すポインタです。
Fused32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fused()
または Fused32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fused()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
「FML 関数の紹介」、Fidxused、Fidxused32(3fml)
、Funused、Funused32(3fml)
Fvall()
、Fvall32()
- フィールド オカレンスを long 型で返す
#include <stdio.h>
#include "fml.h"
long
Fvall(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
)
#include "fml32.h"
long
Fvall32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
)
Fvall()
は、long 型および short 型の値の場合に Ffind()
と同様に動作しますが、値を指すポインタではなく、フィールドの実際の値を返します。fbfr は、フィールド化バッファを指すポインタです。fieldid はフィールド識別子です。oc はフィールドのオカレンス番号です。
指定したフィールド オカレンスが発見されない場合は、0 が返されます。この関数は、戻り値をチェックせずにフィールドの値を別の関数に渡すのに役立ちます。この関数は、型 FLD_LONG
または FLD_SHORT
のフィールドに対してのみ有効です。
Fvall32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvall()
または Fvall32()
を呼び出すことができます。
Fvall()
は、FLD_LONG
および FLD_SHORT
以外のフィールド タイプに対して 0 を返し、Ferror
を FTYPERR
に設定します。
この関数は、他のエラーが発生すると 0 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvall()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FBADFLD
]
FTYPERR
]
「FML 関数の紹介」、Ffind、Ffind32(3fml)
、Fvals、Fvals32(3fml)
Fvals()
、Fvals32()
- フィールド オカレンスの文字列の値を返す
#include <stdio.h>
#include "fml.h"
char *
Fvals(FBFR *fbfr
, FLDIDfieldid
, FLDOCCoc
)
#include "fml32.h"
char *
Fvals32(FBFR32 *fbfr
, FLDID32fieldid
, FLDOCC32oc
)
Fvals()
は、文字列の値の場合に Ffind()
と同様に動作しますが、値が返されることを保証します。fbfr は、フィールド化バッファを指すポインタです。fieldid は、フィールド識別子です。oc はフィールドのオカレンス番号です。
指定したフィールド オカレンスが見つからない場合は、NULL が返されます。この関数は、戻り値をチェックせずにフィールドの値を別の関数に渡すのに役立ちます。この関数は、型 FLD_STRING
のフィールドに対してのみ有効です。ほかのフィールド タイプの場合は、自動的に NULL 文字列を返します (つまり、変換は行われません)。
Fvals32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvals()
または Fvals32()
を呼び出すことができます。
この関数は、エラーが発生すると NULL を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvals()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FBADFLD
]
FTYPERR
]
「FML 関数の紹介」、CFfind、CFfind32(3fml)
、Ffind、Ffind32(3fml)
、Fvall、Fvall32(3fml)
Fvftos()
、Fvftos32()
- フィールド化バッファから C 構造体にコピー
#include <stdio.h>
#include "fml.h"
int
Fvftos(FBFR *fbfr
, char *cstruct
, char *view
)
#include "fml32.h"
int
Fvftos32(FBFR32 *fbfr
, char *cstruct
, char *view
)
Fvftos()
関数は、フィールド化バッファから C 構造体へデータを転送します。fbfr は、フィールド化バッファを指すポインタです。cstruct は、C 構造体を指すポインタです。view は、コンパイルした VIEW 記述子の名前を指すポインタです。
フィールドは、フィールド化バッファから view のメンバー記述子に基づく構造体に複写されます。フィールド化バッファのフィールドが、一致するバッファを C 構造体に持たない場合は、無視されます。C 構造体で指定されたメンバーがフィールド化バッファに一致するフィールドを持たない場合は、メンバーに NULL 値が複写されます。使用した NULL 値が VIEW 記述子の各メンバーに対して定義可能です。
C 構造体で複数のオカレンスを格納するには、構造体のメンバーは配列である必要があります (たとえば、int zip
[4] は zip
の 4 つのオカレンスを格納できます)。バッファに存在するオカレンスの数が、配列にある要素数よりも少ない場合は、余分の要素スロットには NULL 値が割り当てられます。一方、バッファの配列にある要素数よりもオカレンスの数の方が多い場合は、余分なオカレンスは無視されます。
フィールド識別子およびメンバーに対してマッピング エントリが存在する場合でも、マッピングを禁止する VIEW 記述子のオプションがあります。これらのオプションは、初めは VIEW ファイルで指定されていますが、実行時に Fvopt()
を使用して変更できます。
Fvftos32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvftos()
または Fvftos32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvftos()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEINVAL
]
FBADACM
]
FBADVIEW
]
VIEWDIR
または VIEWFILES
で指定されたファイルにこの記述子がありませんでした。
「FML 関数の紹介」、Fvopt、Fvopt32(3fml)
、viewfile(5)
Fvneeded()
、Fvneeded32()
- VIEW
バッファに必要な大きさの計算
#include <stdio.h>
#include "fml.h"
long
Fvneeded(char *subtype
)
#include "fml32.h"
long
Fvneeded32(char *subtype
)
Fvneeded()
は、VIEW
C 構造体の大きさを返します。subtype
は VIEW
の名前です。Fvneeded()
を呼び出すと、割り当てる VIEW
バッファの大きさを決定できます。Fvneeded32()
は 32 ビット VIEW
で使用されます。
Fvneeded()
は、VIEW
のサイズをバイト数で返します。この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvnull()
は異常終了し、Ferror
を次の値に設定します。
FEINVAL
]
Fvnull()
、Fvnull32()
- 構造体の要素が NULL かどうかのチェック
#include <stdio.h>
#include "fml.h"
int
Fvnull(char *cstruct
, char *cname
, FLDOCCoc
, char *view
)
#include "fml32.h"
int
Fvnull32(char *cstruct
, char *cname
, FLDOCC32oc
, char *view
)
Fvnull()
は、構造体要素のオカレンスが NULL であるかどうかを判断するのに使用します。cstruct は、C 構造体を指すポインタです。cname
は、cstruct 内の要素名を指すポインタです。oc は要素のオカレンス番号です。view は、コンパイルした VIEW 記述子の名前を指すポインタです。
Fvnull32()
は、viewc32
で定義されたビューや、フィールド数の多い大規模ビューのための VIEW32
型付きバッファに対して使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fvnull()
または Fvnull32()
を呼び出すことができます。
Fvnull()
は、C 構造体で指定した cname が NULL の場合は 1 を返し、NULL でない場合は 0 を返します。この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvnull()
は異常終了し、Ferror
を次の値に設定します。
FBADVIEW
]
FNOCNAME
]
「FML 関数の紹介」、Fvopt、Fvopt32(3fml)
、viewfile(5)
Fvopt()
、Fvopt32()
- マッピング エントリのフラグ オプションの変更
#include <stdio.h>
#include "fml.h"
int
Fvopt(char *cname
, intoption
, char *view
)
#include "fml32.h"
int
Fvopt32(char *cname
, intoption
, char *view
)
Fvopt()
は、実行時にバッファと構造体のマッピング オプションの指定を可能にします。cname は VIEW 記述子、view での要素名を指すポインタです。option は、マッピング オプションのために必要な設定を指定します。有効なオプションおよびその意味は次の通りです。
F_FTOS
F_STOF
F_OFF
F_BOTH
Fvopt32()
は、viewc32
で定義されたビューや、フィールド数の多い大規模ビューのための VIEW32
型付きバッファに対して使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvopt()
または Fvopt32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvopt()
は異常終了し、Ferror
を次の値に設定します。
FEINVAL
]
FBADVIEW
]
FNOCNAME
]
Fvrefresh()
、Fvrefresh32()
- C 構造体からフィールド化バッファにコピー
#include <stdio.h>
#include "fml.h"
void
Fvrefresh()
#include "fml32.h"
void
Fvrefresh32()
Fvrefresh()
は、ビュー構造マッピングの内部キャッシュ メモリをクリアし、初期化し直します。この操作が必要になるのは、頻繁に使用するビューが動的に更新される場合に限られます。
Fvrefresh32()
は、viewc32
で定義されたビューや、フィールド数の多い大規模ビューのための VIEW32
型付きバッファに対して使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvrefresh()
または Fvrefresh32()
を呼び出すことができます。
このルーチンは void 関数であり、エラー コードはセットされません。
Fvselinit()
、Fvselinit32()
- 構造体の要素を NULL 値で初期化する
#include <stdio.h>
#include "fml.h"
int
Fvselinit(char *cstruct
, char *cname
, char *view
)
#include "fml32.h"
int
Fvselinit32(char *cstruct
, char *cname
, char *view
)
Fvselinit()
は、C 構造体の個々の要素を、適切な NULL 値で初期化します。cstruct は、C 構造体を指すポインタです。cname は、cstruct の要素名を指すポインタです。view は、コンパイルした VIEW 記述子の名前を指すポインタです。
Fvselinit()
は、VIEW がコンパイルされたときに C
フラグが使用された場合は要素の関連するカウント メンバーを 0 に設定します。また、L
フラグが VIEW ファイルで使用された場合は、関連する長さのメンバーを関連する NULL 値の長さに設定します。
Fvselinit32()
は、viewc32
で定義されたビューや、フィールド数の多い大規模ビューのための VIEW32
型付きバッファに対して使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvselinit()
または Fvselinit32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvselinit()
は異常終了し、Ferror
を次の値に設定します。
FEINVAL
]
FBADVIEW
]
VIEWDIR
または VIEWFILES
で指定されたファイルにこの記述子がありませんでした。
FNOCNAME
]
「FML 関数の紹介」、Fvsinit、Fvsinit32(3fml)
、viewfile(5)
Fvsinit()
、Fvsinit32()
- C 構造体を NULL 値で初期化
#include <stdio.h>
#include "fml.h"
int
Fvsinit(char *cstruct
, char *view
)
#include "fml32.h"
int
Fvsinit32(char *cstruct
, char *view
)
Fvsinit()
は、C 構造体のすべてのメンバーを、VIEW 記述子、view で指定された NULL 値に初期化します。cstruct は、C 構造体を指すポインタです。view は、コンパイルされた VIEW 記述子を指すポインタです。
Fvsinit()
は、VIEW がコンパイルされたときに C
フラグが使用された場合は要素の関連するカウント メンバーを 0 に設定します。また、L
フラグが VIEW ファイルで使用された場合は、関連する長さのメンバーを関連する NULL 値の長さに設定します。
Fvsinit32()
は、viewc32
で定義されたビューや、フィールド数の多い大規模ビューのための VIEW32
型付きバッファに対して使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvsinit()
または Fvsinit32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvsinit()
は異常終了し、Ferror
を次の値に設定します。
FEINVAL
]
FBADVIEW
]
VIEWDIR
または VIEWFILES
で指定されたファイルにこの記述子がありませんでした。
「FML 関数の紹介」、Fvselinit、Fvselinit32(3fml)
、viewfile(5)
Fvstof()
、Fvstof32()
- C 構造体からフィールド化バッファにコピー
#include <stdio.h>
#include "fml.h"
int
Fvstof(FBFR *fbfr
, char *cstruct
, intmode
, char *view
)
#include "fml32.h"
int
Fvstof32(FBFR32 *fbfr
, char *cstruct
, intmode
, char *view
)
Fvstof()
は、C 構造体からフィールド化バッファへデータを転送します。fbfr は、フィールド化バッファを指すポインタです。cstruct は、C 構造体を指すポインタです。mode は、転送が行われる方法を指定します。view は、コンパイルされた VIEW 記述子を指すポインタです。mode は、次の 4 つのいずれかの値です。
これらのモードが行う動作は、Fupdate()
、Fojoin()
、Fjoin()
、および Fconcat()
で記述しているものと同じです。ソース バッファを指定する場所を除いて、Fvstof()
をこれらの関数と同じように考えることができます。Fvstof()
は C 構造体を指定します。FUPDATE
は、NULL 値を持つ構造体の要素を移動しないことに注意してください。
Fvstof32()
は、viewc32
で定義されたビューや、フィールド数の多い大規模ビューのための VIEW32
型付きバッファに対して使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvstof()
または Fvstof32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvstof()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEINVAL
]
FNOSPACE
]
FBADACM
]
FMALLOC
]
malloc()
を使用した領域の動的な割り当てが失敗しました。
「FML 関数の紹介」、Fconcat、Fconcat32(3fml)
、Fjoin、Fjoin32(3fml)
、Fojoin、Fojoin32(3fml)
、Fupdate、Fupdate32(3fml)
、Fvftos、Fvftos32(3fml)
Fvstot()
、Fvttos()
- C 構造体からターゲットのレコード タイプに変換、およびその逆の変換
#include <stdio.h>
#include "fml.h"
long
Fvstot(char *cstruct
, char *trecord
, longtreclen
, char *viewname
)
long
Fvttos(char *cstruct
, char *trecord
, char *viewname
)
#include "fml32.h"
int
Fvstot32(char *cstruct, char *trecord, long treclen, char *viewname)
int
Fvttos32(char *cstruct, char *trecord, char *viewname)
int Fcodeset(char *translation_table)
Fvstot()
は、C の構造体からターゲットのレコード タイプにデータを転送します。Fvttos()
は、ターゲットのレコードから C の構造体にデータを転送します。trecord は、ターゲットのレコードを指すポインタです。cstruct は、C 構造体を指すポインタです。viewname は、コンパイルされたビューの記述名を指すポインタです。コンパイルされたビュー記述のあるディレクトリとファイルを探すために、VIEWDIR
と VIEWFILES
が使用されます。
Fvttos32()
と Fvstot32()
は、32 ビットの VIEW に対して使用されます。
FML バッファからターゲット レコードに変換するには、まず Fvftos()
を呼び出して FML バッファから C 構造体に変換し、次に Fvstot()
を呼び出してターゲット レコードに変換します。ターゲット レコードから FML バッファに変換するには、まず Fvttos()
を呼び出して C 構造体に変換し、次に Fvstof()
を呼び出してそのデータ構造体を FML バッファに変換します。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvstot()
または Fvttos()
を呼び出すことができます。
下に示したデフォルト ターゲットは、IBM/370 の COBOL レコードです。デフォルトのデータ変換は、下の表に基づいて行われます。
IBM/370 のレコードでは、フィールド間のフィルタ バイトはありません。ビューに対応するデータ構造の一部をなすデータ アイテムに対しては、COBOL SYNC 節は指定することはできません。
整数フィールドは、変換を実行するマシン上の整数のサイズに応じて 4 バイトまたは 2 バイトの整数に変換されます。
IBM/370 フォーマットへの変換、あるいは IBM/370 フォーマットからの変換を行う場合は、ビューの文字列フィールドは NULL で終了している必要があります。
carray フィールドまたは mbstring フィールドのデータは変更されずに渡されます。データの変換は行われません。
パック 10 進数は、IBM/370 環境では 1 バイトにパッキングされた 2 桁の 10 進数として存在し、下位の 1/2 バイトは符号を格納するために使用されます。パッキングされた 10 進数の長さは 1 ~ 16 バイトで、1 ~ 31 桁の数字と 1 つの符号の格納領域があります。
パッキングされた 10 進数は、C の構造体では dec_t
というフィールド タイプを利用することによってサポートされます。dec_t
フィールドは、カンマで区切られた 2 つの数字で構成されたサイズに定義されています。コンマの左側の数字は、10 進数が占有するバイトのトータル長を示します。右側の数値は、小数点以下の桁数です。変換の公式を以下に示します。
dec_t(m, n) => S9(2*m-(n+1))V9(n)COMP-3
10 進数の値は、decimal()
で説明した関数を利用することにより、他のデータ型に変換したり、他のデータ型から変換することができます (int、long、string、double、float など)。
下の表は、ASCII (左側) と EBCDIC (右側) の間でのデフォルトの文字変換における対応関係を示したものです。
| 00 00 |01 01 |02 02 |03 03 |04 37 |05 2d |06 2e |07 2f |
| 08 16 |09 05 |0a 25 |0b 0b |0c 0c |0d 0d |0e 0e |0f 0f |
| 10 10 |11 11 |12 12 |13 13 |14 3c |15 3d |16 32 |17 26 |
| 18 18 |19 19 |1a 3f |1b 27 |1c 1c |1d 1d |1e 1e |1f 1f |
| 20 40 |21 5a |22 7f |23 7b |24 5b |25 6c |26 50 |27 7d |
| 28 4d |29 5d |2a 5c |2b 4e |2c 6b |2d 60 |2e 4b |2f 61 |
| 30 f0 |31 f1 |32 f2 |33 f3 |34 f4 |35 f5 |36 f6 |37 f7 |
| 38 f8 |39 f9 |3a 7a |3b 5e |3c 4c |3d 7e |3e 6e |3f 6f |
| 40 7c |41 c1 |42 c2 |43 c3 |44 c4 |45 c5 |46 c6 |47 c7 |
| 48 c8 |49 c9 |4a d1 |4b d2 |4c d3 |4d d4 |4e d5 |4f d6 |
| 50 d7 |51 d8 |52 d9 |53 e2 |54 e3 |55 e4 |56 e5 |57 e6 |
| 58 e7 |59 e8 |5a e9 |5b ad |5c e0 |5d bd |5e 5f |5f 6d |
| 60 79 |61 81 |62 82 |63 83 |64 84 |65 85 |66 86 |67 87 |
| 68 88 |69 89 |6a 91 |6b 92 |6c 93 |6d 94 |6e 95 |6f 96 |
| 70 97 |71 98 |72 99 |73 a2 |74 a3 |75 a4 |76 a5 |77 a6 |
| 78 a7 |79 a8 |7a a9 |7b c0 |7c 6a |7d d0 |7e a1 |7f 07 |
| 80 20 |81 21 |82 22 |83 23 |84 24 |85 15 |86 06 |87 17 |
| 88 28 |89 29 |8a 2a |8b 2b |8c 2c |8d 09 |8e 0a |8f 1b |
| 90 30 |91 31 |92 1a |93 33 |94 34 |95 35 |96 36 |97 08 |
| 98 38 |99 39 |9a 3a |9b 3b |9c 04 |9d 14 |9e 3e |9f e1 |
| a0 41 |a1 42 |a2 43 |a3 44 |a4 45 |a5 46 |a6 47 |a7 48 |
| a8 49 |a9 51 |aa 52 |ab 53 |ac 54 |ad 55 |ae 56 |af 57 |
| b0 58 |b1 59 |b2 62 |b3 63 |b4 64 |b5 65 |b6 66 |b7 67 |
| b8 68 |b9 69 |ba 70 |bb 71 |bc 72 |bd 73 |be 74 |bf 75 |
| c0 76 |c1 77 |c2 78 |c3 80 |c4 8a |c5 8b |c6 8c |c7 8d |
| c8 8e |c9 8f |ca 90 |cb 9a |cc 9b |cd 9c |ce 9d |cf 9e |
| d0 9f |d1 a0 |d2 aa |d3 ab |d4 ac |d5 4a |d6 ae |d7 af |
| d8 b0 |d9 b1 |da b2 |db b3 |dc b4 |dd b5 |de b6 |df b7 |
| e0 b8 |e1 b9 |e2 ba |e3 bb |e4 bc |e5 4f |e6 be |e7 bf |
| e8 ca |e9 cb |ea cc |eb cd |ec ce |ed cf |ee da |ef db |
| f0 dc |f1 dd |f2 de |f3 df |f4 ea |f5 eb |f6 ec |f7 ed |
| f8 ee |f9 ef |fa fa |fb fb |fc fc |fd fd |fe fe |ff ff |
実行時には、Fcodeset()
を呼び出すことにより、別の文字変換表を使用することができます。translation_table は、512 バイトのバイナリ データを指している必要があります。最初の 256 バイトのデータは、ASCII から EBCDIC への変換テーブルとして解釈されます。残りの 256 バイトのデータは EBCDIC から ASCII への変換テーブルとして解釈されます。512 バイトより後ろのデータは無視されます。ポインタが NULL のときは、デフォルトの変換テーブルが使用されます。
正常に終了すると、Fvstot()
はターゲット レコードのデータ長を返し、Fvttos()
は C 構造体のデータ長を返します。
これら 2 つの関数は、エラーが発生した場合は -1 という値を返し、Ferror
をエラー条件を示す値にセットします。
次の条件が発生すると、Fvttos()
は異常終了し、Ferror
を次のように設定します。
FEINVAL
]
Fvttos()
に対して NULL の trecord または cstruct パラメータを指定した場合)。また、このエラーは、変換元または変換先のターゲット レコードの値が範囲を超えている場合にも返されます。
FBADACM
]
FBADVIEW
]
FNOSPACE
]
FVFOPEN
]
FEUNIX
]
FVFSYNTAX
]
FMALLOC
]
VIEW test.v
VIEW test
#type cname fbname count flag size null
float float1 FLOAT1 1 - - 0.0
double double1 DOUBLE1 1 - - 0.0
long long1 LONG1 1 - - 0
short short1 SHORT1 1 - - 0
int int1 INT1 1 - - 0
dec_t dec1 DEC1 1 - 4,2 0
char char1 CHAR1 1 - - ''
string string1 STRING1 1 - 20 ''
carray carray1 CARRAY1 1 - 20 ''
END
同等の COBOL レコード
02 OUTPUT-REC.
05 FLOAT1 USAGE IS COMP-1.
05 DOUBLE1 USAGE IS COMP-2.
05 LONG1 PIC S9(9) USAGE IS COMP.
05 SHORT1 PIC S9(4) USAGE IS COMP.
05 INT1 PIC S9(9) USAGE IS COMP.
05 DEC1 PIC S9(5)V9(2) COMP-3.
05 CHAR1 PIC X(01).
05 STRING1 PIC X(20).
05 CARRAY1 PIC X(20).
C Program
#include "test.h"
#include "decimal.h"
main()
{
struct test s1;
char data[100];
s1.float1 = 1.0;
s1.double1 = 2.0;
s1.long1 = 3;
s1.short1 = 4;
s1.int1 = 5;
deccvdbl(6.0,s1.dec1);
s1.char1 = '7';
(void) strcpy(s1.string1, "eight");
(void) strcpy(s1.carray1, "nine");
if (Fvstot((char *)&s1, data, reclen, "test") == -1) {
printf("Fvstot failed: %sn", Fstrerror(Ferror));
exit(0);
}
/* ターゲット マシンに送信して応答を得る */
...
/* 逆方向に変換する */
if (Fvttos(data, (char *)&s1, "test") == -1) {
printf("Fvttos failed: %sn", Fstrerror(Ferror));
exit(0);
}
/* 構造体を使用する */
.....
exit(0);
}
「FML 関数の紹介」、Fvftos、Fvftos32(3fml)
、Fvstof、Fvstof32(3fml)
、viewfile(5)
UNIX システムのリファレンス マニュアルの decimal
(3)
Fwrite()
、Fwrite32()
- フィールド化バッファを書き込む
#include <stdio.h>
#include "fml.h"
int
Fwrite(FBFR *fbfr
, FILE *iop
)
#include "fml32.h"
int
Fwrite32(FBFR32 *fbfr
, FILE *iop
)
Fwrite()
は、フィールド化バッファをストリームに書き込みます (ストリームについては、UNIX System V『プログラマ リファレンス マニュアル』の stdio
(3S) を参照)。Fwrite()
は、バッファのインデックスを破棄します。
fbfr は、フィールド化バッファを指すポインタです。iop は、出力ストリームを指す FILE
型のポインタです。
FLD_PTR
フィールド タイプの場合、ポインタによって指示されているデータではなく、ポインタだけが出力ストリームに書き込まれます。FLD_VIEW32
フィールド タイプの場合、VIEW32 バッファ内のデータではなく、FVIEWFLD
構造体だけが出力ストリームに書き込まれます。
Fwrite32()
は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fwrite()
または Fwrite32()
を呼び出すことができます。
この関数は、エラー発生時に -1 を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fwrite()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEUNIX
]
write
システム コールが異常終了しました。外部の整数型変数 errno
は、システム コールによるエラーを示すために設定され、外部の整数型変数 Uunixerr
(Uunix.h
で定義されている値) は、エラーを返したシステム コールに設定されます。
この関数は、Windows 用の Oracle Tuxedo System Workstation DLL では使用できません。
「FML 関数の紹介」、Findex、Findex32(3fml)
、Fread、Fread32(3fml)
UNIX システムのリファレンス マニュアルの stdio
(3S)
tpconvfmb32()
- ソースのエンコーディングからターゲットのエンコーディングにマルチバイト文字を変換する
#include <atmi.h>
#include "fml32.h"
extern int tperrno;
int
tpconvfmb32 (FBFR32 **bufp
, FLDID32 *ids
, char *target_encoding
,
longflags
)
tpconvfmb32()
は、FML32 型付きバッファにある FLD_MBSTRING
フィールドのマルチバイト文字を、ターゲットの名前付きのエンコーディングに変換します。具体的には、tpconvfmb32()
は、FLD_MBSTRING
フィールドで指定されたソースのエンコーディング名と target_encoding
で定義されたターゲットのエンコーディング名を比較し、エンコーディング名が異なる場合に tpconvfmb32()
は、FLD_MBSTRING
フィールドのデータをターゲットのエンコーディングに変換します。
システムによるエンコーディング変換に代わる方法として、tpconvfmb32()
があります。プロセス TPMBACONV
環境変数を NULL 以外の値に設定した場合、システムによる FLD_MBSTRING
フィールド データのエンコーディング変換が自動的に行われます。
bufp
は、FML32 型付きバッファを指すポインタです。ポインタに関連付けられたサイズが FML32 バッファの変換済み出力データの処理に不十分な場合、bufp は内部的に再割り当てされます。bufp
は、Falloc()
関数ではなく tpalloc()
関数を使用して定義する必要があります。bufp
に FLD_FML32
フィールドを指定した場合、FLD_MBSTRING
フィールドに対して再帰的にチェックされます。bufp
に FLD_PTR
フィールドを指定した場合、これらのフィールドは省略されます。
ids
には、変換するフィールド識別子の配列を指すポインタが入ります。ids
が NULL の場合、bufp
にあるすべての FLD_MBSTRING
は、必要に応じてターゲットのエンコーディングに変換されます。配列を使用する場合は、0 (BADFLDID
) で終了する必要があります。
target_encoding
は、bufp
メッセージ内にある FLD_MBSTRING
フィールドの変換に使用する、ターゲットのコード セットのエンコーディング名です。target_encoding
が NULL の場合、tpconvfmb32()
は、プロセス TPMBENC
環境変数で定義されたエンコーディング名を使用します。
flags
は、tpconvfmb32()
では使用されません。これは、ユーザ定義の変換関数用のバッファ タイプ スイッチ関数に渡されます。
正常終了の場合、tpconvfmb32()
は 0 を返します。エラーが発生した場合、tpconvfmb32()
は -1 を返し、tperrno
を設定してエラー条件を示します。
次の条件の場合、tpconvfmb32()
は異常終了し、tperrno
を次の値に設定します。
TPEPROTO
]
TPESYSTEM
]
TPEINVAL
]
TPEOS
]
Fmbpack32(3fml)
、Fmbunpack32(3fml)
、tpalloc(3c)、tpsetmbenc(3c)、tuxgetmbaconv(3c)、tuxgetmbenc(3c)、tuxsetmbaconv(3c)、tuxsetmbenc(3c)
tpconvvmb32()
- VIEW32 型付きバッファにある MBSTRING フィールドのマルチバイト文字を、ターゲットの名前付きのエンコーディングに変換する
#include <atmi.h>
#include "fml32.h"
extern int tperrno;
int
tpconvvmb32 (char **bufp, FLDID32 *ids, char *target_encoding,
long flags)
具体的には、tpconvvmb32()
は、MBSTRING フィールドで指定されたソースのエンコーディング名と target_encoding
で定義されたターゲットのエンコーディング名を比較し、エンコーディング名が異なる場合に tpconvvmb32()
は、MBSTRING フィールドのデータをターゲットのエンコーディングに変換します。
システムによるエンコーディング変換に代わる方法として、tpconvvmb32()
があります。プロセス TPMBACONV
環境変数を NULL
以外の値に設定した場合、システムによる MBSTRING フィールド データのエンコーディング変換が自動的に行われます。
tpconvvmb32()
では、以下の引数を使用できます。
bufp
注意 : | bufp は、Falloc() ではなく tpalloc() 関数で定義しなければなりません。 |
ids
の配列を指すポインタが入ります。ids
が NULL
の場合、bufp
にあるすべての MBSTRING フィールドは、必要に応じてターゲットのエンコーディングに変換されます。配列を使用する場合は、0 (BADFLDID
) で終了する必要があります。
target_encoding
bufp
メッセージ内にある MBSTRING フィールドの変換に使用する、ターゲットのコード セットのエンコーディング名です。target_encoding
が NULL
の場合、tpconvvmb32()
は、プロセス TPMBENC
環境変数で定義されたエンコーディング名を使用します。
flags
成功した場合、tpconvvmb32()
は 0
を返します。エラーの場合、tpconvvmb32()
は -1
を返し、tperrno
を設定してエラー条件を示します。
次の条件の場合、tpconvvmb32()
は異常終了し、tperrno
を次の値に設定します。
TPEPROTO
]
TPESYSTEM
]
TPEINVAL
]
TPEOS
]
Fmbpack32(3fml)
、Fmbunpack32(3fml)
、tpalloc(3c)、tpsetmbenc(3c)、tuxgetmbaconv(3c)、tuxgetmbenc(3c)、tuxsetmbaconv(3c)、tuxsetmbenc(3c)
![]() ![]() ![]() |