“#include <fml.h>”
“#include <fml32.h>”
FMLは、フィールド化バッファと呼ばれる記録構造を定義、操作する一連のC言語関数で、フィールド化バッファにはフィールドと呼ばれる属性と値の対が含まれます。属性はフィールドの識別子であり、対応する値はフィールドのデータ内容を表します。
フィールド化バッファを使用すると、関連したフィールドのセットを名前でアクセスできるので、協調動作するプロセス間でパラメータ化されたデータを受け渡す場合に便利です。他のプロセスとコミュニケートする必要のあるプログラムは、FMLソフトウェアを使用し、フィールドを含む構造体を意識せずにフィールドへのアクセスが可能です。
FMLはまた、VIEWS
と呼ばれる、フィールド化バッファをC構造体にマップする(その逆も可能)機能も提供します。VIEWS
では、フィールド化バッファではなく構造体において時間のかかるデータの処理を実行できます。データを処理するために構造体に転送すると、アプリケーションの実行速度が向上します。このように、VIEWS
を使用すると、フィールド化バッファのデータ独立性と従来のレコード構造の効率性、簡便性をともに享受することができます。
FMLには2つのサイズがあります。オリジナルのFMLインタフェースは、フィールド長に16ビットの値を使用して、フィールドを識別する情報を格納します。このマニュアル・ページでは、これらをFML16と呼びます。FML16では、一意のフィールド数は8191、個々のフィールド長は最大64Kバイト、フィールド化バッファの総容量は64Kに制限されます。このインタフェースの定義、型、および関数のプロトタイプはfml.h
に定義され、FML16インタフェースを使用するアプリケーション・プログラムは、このファイルをインクルードする必要があります。各関数は、-lfml
にあります。FML32は、フィールド長と識別子に32ビットの値を使用します。約3千万のフィールド、約20億バイトのフィールド長およびバッファ長が使用できます。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
型(マルチバイト文字配列 - Oracle 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つの方法があります。
実行時にFMLプログラムは、フィールド表ファイルを介してフィールド名と識別子のマッピング情報を取得できます(「field_tables(5)」を参照)。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
に、アプリケーションのオブジェクトVIEWファイルのカンマ区切りのリストを指定する必要があります。フルパス名で指定したファイルはそのまま使用され、相対パス名で指定したファイルは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()
を使用してビューに変換できます。ビューは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()
を使用することができます。これらは、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を使用した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
引数を配列の長さに設定する必要があります。これ以外の場合、長さは無視されます。変換および追加されるフィールドの値は、まず変数value
に設定します。C言語では12345Lのような構成が許可されないためです。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、またはFLD_VIEW32
のフィールド・タイプが使用されると、この関数は失敗します。CFadd()
またはCFadd32()
が使用されているとき、これらのフィールド・タイプの1つが指定されると、Ferror
にFEBADOP
が設定されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行している場合でも、CFadd()
またはCFadd32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFadd()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
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
が設定されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、CFchg()
またはCFchg32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFchg()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
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()
と同じく、この関数で返されるポインタは読取り専用とする必要があります。CFfind()
が返すポインタは、次のバッファ操作(破壊的でない場合でも)までしか有効ではありません。これは、変換後の値が1つのプライベート・バッファに保存されているためです。一方、Ffins()
の戻り値の場合は、次にバッファが変更されるまで有効です。Ffind()
とは異なり、CFfind()
は、変換済の値を呼出し側がすぐに使用できるようにします。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、またはFLD_VIEW32
のフィールド・タイプが使用されると、この関数は失敗します。CFfind()
またはCFfind32()
が使用されている場合に、これらのフィールド・タイプの1つが指定されると、Ferror
にFEBADOP
が設定されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、CFfind()
またはCFfind32()
を呼び出すことができます。
上記の「形式」の項では、CFfind()
の戻り値のデータ型は、charポインタ(Cのchar **
)として記述されています。実際、戻されるポインタは、格納済のフィールドの型と同じ型を持つオブジェクトを指しています。
この関数は、エラー発生時にNULLを返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFfind()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
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()
と似ていますが、値をユーザー指定の型から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
]
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()
と同様に変換を行います。変換済の値がユーザー指定バッファにコピーされるのが大きな違いです。fbfrはフィールド化バッファを指すポインタです。fieldidはフィールド識別子です。ocはフィールドのオカレンス番号です。bufはプライベート・データ領域を指すポインタです。入力時においてlenは、プライベート・データ領域の長さを指すポインタです。戻り時においてlenは、返された値の長さを指すポインタです。入力時においてlenパラメータがNULLの場合は、フィールド値を入れるためのバッファが十分大きいために、値の長さが返されないものと想定されます。bufパラメータがNULLの場合、フィールド値は返されません。typeは、ユーザーが変換しようとしている戻り値の変換先のデータ型です。
FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、またはFLD_VIEW32
のフィールド・タイプが使用されると、この関数は失敗します。CFget()
またはCFget32()
が使用されているとき、これらのフィールド・タイプの1つが指定されると、Ferror
にFEBADOP
が設定されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、CFget()
またはCFget32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、CFget()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FMALLOC
]
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
から取得されます。これはエラーが発生すると設定されますが、エラーではない呼出しが行われてもクリアされません。MS-DOSおよびOS/2環境ではFerror
はFMLerror
に再定義されます。
エラー・メッセージをすぐに出力するには、別のFML関数から返されたエラーに対してF_error()
を呼び出す必要があります。エラー・メッセージがFEUNIX
のとき、Uunix_err()
が呼び出されます。
マルチスレッドのアプリケーション内のスレッドは、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
型の構造体に対するポインタを格納します。FVIEWFLD型の構造体には、vflags
(現在未使用で0に設定されているフラグ・フィールド)、vname
(VIEW名を含む文字配列)、およびdata
(C構造体として格納されるVIEWデータに対するポインタ)が含まれています。アプリケーションは、Fadd32()
にvname
とdata
を提供します。
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()
を呼び出します。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fadds()
またはFadds32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fadds()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOSPACE
]
FTYPERR
]
FEINVAL
]
FMALLOC
]
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
の内容は無視されます。
マルチスレッドのアプリケーション内のスレッドは、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()
が作成する評価ツリーは、下記の「関連項目」の項でリストされている他の論理関数に使用されます。したがって、式を再びコンパイルする必要はありません。
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()
によって以前コンパイルされたものです。
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
型のポインタです。出力内容のすべてがかっこ内に入れられ、評価ツリーで示されるように解析されます。この関数はデバッグに役立ちます。
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型のフィールドの場合は0、float型とdouble型の値の場合は0.0、文字配列の場合は0長の文字列が使用されます。新しい値または変更された値が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
型の構造体に対するポインタを格納します。FVIEWFLD型の構造体には、vflags
(現在未使用で0に設定されているフラグ・フィールド)、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
の内容は無視されます。
マルチスレッドのアプリケーション内のスレッドは、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()
を呼び出します。
マルチスレッドのアプリケーション内のスレッドは、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
型の値の場合、ポインタまたはポインタによって参照されるデータのかわりに、ポインタのフィールドの名前がチェックサム計算に含まれます。
マルチスレッドのアプリケーション内のスレッドは、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つのフィールドは等しいとみなされます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fcmp()
またはFcmp32()
を呼び出すことができます。
この関数は、2つのバッファが等しい場合には0を戻します。次に示す条件の場合-1を戻します。
条件のいずれかに該当する場合(たとえば、fbfr1フィールドのfieldidが対応するフィールドfbfr2のfieldidより大きい場合)、Fcmp()
は1を返します。バッファの実際のサイズ(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は、元のフィールド化バッファを指すポインタです。宛先バッファにあるオカレンスは維持され、ソース・バッファの新しいオカレンスは、フィールドに対して比較的大きなオカレンス番号で追加されます。
マルチスレッドのアプリケーション内のスレッドは、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()
はバッファのポインタをコピーします。アプリケーション・プログラマは、対応するポインタがコピーされたときのバッファの再割り当ておよび解放を管理する必要があります。
マルチスレッドのアプリケーション内のスレッドは、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
フィールド・オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ・バッファは、非透過的なポインタとして扱われます。
マルチスレッドのアプリケーション内のスレッドは、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
フィールド・オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ・バッファは、非透過的なポインタとして扱われます。
マルチスレッドのアプリケーション内のスレッドは、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()
は、削除するフィールドがフィールド化バッファにない場合も正常終了で返ります。
マルチスレッドのアプリケーション内のスレッドは、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
の値が与えられても、エラーは戻されません。
マルチスレッドのアプリケーション内のスレッドは、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)
関数を使用して解析できます。
マルチスレッドのアプリケーション内のスレッドは、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のリファレンス・マニュアルを参照)。さらに、正規表現のalternationがサポートされます(たとえば、''A|B
''は''A
''または''B
''と一致します)。パターンはフィールド値全体と一致する必要があります(つまり、パターン''value
''は暗黙に''^value$
''として扱われます)。MS-DOSおよびOS/2環境で使用するために提供されるFfindocc()
では、FLD_STRING
フィールドのregcmp()
パターン照合はサポートされません。strcmp()
が使用されます(UNIXのリファレンス・マニュアルを参照)。
上記の「形式」の項では、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
の値の長さです。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffindocc()
またはFfindocc32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffindocc()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FEINVAL
]
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()
で記述されているものと同じです。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ffinds()
またはFfinds32()
を呼び出すことができます。
この関数は、エラー発生時にNULLを返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ffinds()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FNOTPRES
]
FBADFLD
]
FTYPERR
]
FMALLOC
]
「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型で返します。この関数は、フィールド化バッファあるいは評価ツリーのいずれも変更しません。
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フィールド名、および構造体メンバーの名前と値のペアを出力します。
マルチスレッドのアプリケーション内のスレッドは、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
フィールドのポインタによって参照されるメモリー領域を解放しません。
free()
よりFfree()
の使用をお薦めします(UNIXシステムのリファレンス・マニュアルを参照)。free()
ではフィールド化バッファを無効にできませんが、Ffree()
を使用するとフィールド化バッファを無効にできます。フィールド化バッファの無効化は重要です。malloc()
(UNIXシステムのリファレンス・マニュアルを参照)は、解放されたメモリーをクリアせずに再利用するためです。free()
を使用すると、malloc()
が、有効なフィルード化バッファのように見えるがそうではないメモリーを返す可能性があります。
マルチスレッドのアプリケーション内のスレッドは、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)
関数を使用して解析できます。
マルチスレッドのアプリケーション内のスレッドは、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システムのプログラマ・リファレンス・マニュアル)を介してフィールド用の領域を取得します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。Fgetalloc()
の最後の引数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の場合は、オカレンスは、返されません。
上記の「形式」の項では、Fget()
の引数valueのデータ型は、charのポインタ(Cのchar *
)として記述されています。技術的には、これは、Fget()
に渡すことのできる値のある特定の値のみを記述しています。実際、value引数の型は、検索されるフィールドのフィールド化バッファ表現の型と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG型でバッファに格納されている場合は、valueの型は、long型のポインタ(Cのlong *
)である必要があります。同様に、FLD_SHORT型でバッファに格納される場合、valueは、short型のポインタ(Cのshort *
)である必要があります。大事なことは、Fget()
はvalueで指されるオブジェクトが、検索される格納済のフィールドの型と同じ型を持っていることを想定していることです。
FLD_MBSTRING
型の指定されたフィールド識別子の場合、Fgetlast32()
の戻り値はFmbunpack(32)
関数を使用して解析できます。
マルチスレッドのアプリケーション内のスレッドは、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()
を呼び出します。
マルチスレッドのアプリケーション内のスレッドは、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はフィールドのオカレンス番号です。この関数はmalloc()
(UNIXシステムのプログラマ・リファレンス・マニュアル)を使用して、文字列に変換して取得したフィールド値のための領域を割り当てます。extraがNULLでない場合、extraには、フィールド値の大きさに加えて割り当てる余分な領域を指定します。全体の大きさは、extraに返ります。
malloc()
で割り当てた領域を(UNIXシステムのリファレンス・マニュアルの) free()
を使用して解放するのは、ユーザーの責任です。
マルチスレッドのアプリケーション内のスレッドは、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は、フィールド化バッファを指すポインタです。
マルチスレッドのアプリケーション内のスレッドは、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は、フィールド化バッファを指すポインタです。
マルチスレッドのアプリケーション内のスレッドは、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には、インデックスの間隔を指定します。つまり、インデックスするフィールドを理想的に分離します。この引数の値が0の場合、バッファの現在のインデックス値が使用されます。現在の値そのものが0の場合、値FSTDXINTVL
(デフォルトは16)が使用されます。インデックス値に1を使用すると、必ず、バッファにあるすべてのフィールドがインデックスされます。インデックス間隔の大きさとバッファのインデックスに割り当てられる領域の大きさは、反比例します。したがって、間隔が小さいとより多くのフィールドがインデックスされ、より多くの領域が使用されます。
マルチスレッドのアプリケーション内のスレッドは、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()
も使用できます。
マルチスレッドのアプリケーション内のスレッドは、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/オカレンスと一致するフィールドの場合は、フィールド値はソース・バッファの値を使って宛先バッファで更新されます。ソース・バッファ内に、対応するfieldidとオカレンスの組合せがない場合、宛先バッファのフィールドは削除されます。バッファを組み込むことによりFLD_PTR
フィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。
新しい値が古い値より大きい場合は、この関数は領域の不足のために失敗することがあります。その場合、宛先バッファは変更されます。ただし、その場合は、Frealloc()
を使用し、Fjoin()
関数を繰返し呼び出して、宛先バッファを再割り当てできます。宛先バッファが部分的に更新された場合でさえ、Fjoin()
関数を繰り返すことで正しい結果が取得されます。
マルチスレッドのアプリケーション内のスレッドは、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()
関数を呼び出してファイルをアンロードする必要があります。
マルチスレッドのアプリケーション内のスレッドは、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)を受け取り、識別子にあるフィールド番号を返します。
マルチスレッドのアプリケーション内のスレッドは、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
で定義されているように、識別子(整数)にあるフィールド・タイプを返します。
マルチスレッドのアプリケーション内のスレッドは、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()
で作成され、パッキングされた出力の長さを返します。
マルチスレッドのアプリケーション内のスレッドは、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は、フィールド番号です(現在あるフィールドとの混同をさけるために未使用のフィールド番号でなければなりません)。
マルチスレッドのアプリケーション内のスレッドは、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()
はバッファ・ポインタを渡します。アプリケーション・プログラマは、対応するポインタの移動に応じてバッファの再割り当て、および解放を管理する必要があります。
マルチスレッドのアプリケーション内のスレッドは、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()
関数を呼び出して回復することができます。
マルチスレッドのアプリケーション内のスレッドは、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はすべてのフィールド値に必要な領域のバイト数です。
マルチスレッドのアプリケーション内のスレッドは、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
フィールドを設定します。
マルチスレッドのアプリケーション内のスレッドは、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
フィールドは、格納するフィールド数に関係なく、単一フィールドとしてカウントされます。
マルチスレッドのアプリケーション内のスレッドは、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バッファ内のフィールドのオカレンスはカウントされません。
マルチスレッドのアプリケーション内のスレッドは、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()
と同様、この関数は領域不足により異常終了し、さらに領域を割り当てた後、操作を完了するために再起動されます。
マルチスレッドのアプリケーション内のスレッドは、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
フィールド・タイプの埋込み型バッファ内では、指定されたフィールドのオカレンスがあるかどうかをチェックしません。
マルチスレッドのアプリケーション内のスレッドは、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フィールド名、および構造体メンバーの名前と値のペアを出力します。
マルチスレッドのアプリケーション内のスレッドは、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
フィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fproj()
またはFproj32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fproj()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
#include "fld.tbl.h"
FBFR *fbfr;
FLDID fieldid[20];
...
fieldid[0] = A; /* field ID for field A */
fieldid[1] = D; /* field ID for field D */
fieldid[2] = BADFLDID; /* sentinel value */
...
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
フィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。
この関数は、領域が不足した場合に異常終了します。この関数は、操作を完了するために付加領域を十分に割り当てた後、再起動されます。
マルチスレッドのアプリケーション内のスレッドは、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システムのリファレンス・マニュアルでstdio
(3S)を参照してください)。Fread()
は、ストリームからフィールド化バッファをfbfr
に読み込み、バッファに格納されていたデータを消去し、バッファのインデックスを再作成します。Fread32()
は、FLD_PTR
型のフィールドを無視します。関数にタイプFLD_PTR
の値が与えられても、エラーは戻されません。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのコンテキスト状態で実行している場合でも、Fread()
またはFread32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fread()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
Finit()
で初期化されていません。また、このエラーは、読み取られたデータがフィールド化バッファでない場合に返されます。
FNOSPACE
]
FEUNIX
]
この関数は、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は、新しい値の領域のバイト数です。これらは、増分ではありません。
マルチスレッドのアプリケーション内のスレッドは、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は、フィールド化バッファを指すポインタです。前者は、バッファの合計インデックス計算を実行するため、非常にコストがかかります(バッファの完全スキャンが必要)。インデックス化されていなバッファが変更されたとき、またはバッファの前の状態が不明な場合に、使用する必要があります(たとえば、あるプロセスからインデックスなしの別のプロセスに送信された場合)。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); /* A hypothetical function */ Frstrindx(fbfr,save);
1. - /* unindex, saving for Frstrindx */
2. - /* determine number of bytes to send */
3. - /* send fbfr, without index */
4. - /* restore index */
この場合、transmit()
には、メモリー・ポインタおよび長さが渡されます。送信されるデータは、メモリー・ポインタで始まり、num_to_send
バイトです。いったんバッファが送信されると、その索引は、Frstrindex()
を使用してリストアされます(どのような場合でも、transmit()
が、索引を変更しないことが前提となっている)。送信の終わりを受信すると、フィールド化バッファを受け取ったプロセスは、Findex()
を使用してそのバッファを次に示す方法で索引します。
receive(fbfr); /* get fbfr from wherever .. into fbfr */
Findex(fbfr); /* index it */
受信プロセスは、次の理由により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は、フィールド化バッファを指すポインタです。
マルチスレッドのアプリケーション内のスレッドは、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()
は、fromlen
で指定された長さのfromtype
型の*
fromval
の値(fromtype
がFLD_CARRAY
の場合。それ以外の場合、fromlen
はfromtype
から算出)を、totype
型の値に変換します。Ftypcvt()
が成功すると、変換後の値に対するポインタが返され、*
tolen
に変換後の長さが設定されます。失敗すると、Ftypcvt()
からNULLが返されます。
Ftypcvt32()
は、FLD_PTR
、FLD_MBSTRING
、FLD_FML32
、またはFLD_VIEW32
のフィールド・タイプが使用されると失敗します。これらのフィールド・タイプの1つが指定されると、Ferror
にFEBADOP
が設定されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Ftypcvt()
またはFtypcvt32()
を呼び出すことができます。
この関数は、エラー発生時にNULLを返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Ftypcvt()
は異常終了し、Ferror
を次の値に設定します。
FMALLOC
]
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"を指すポインタが戻されます。このデータ領域は読取り専用です。
マルチスレッドのアプリケーション内のスレッドは、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)
によって決定されます。
マルチスレッドのアプリケーション内のスレッドは、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()
は、現在使用していないバッファ領域の量を返します。ユーザー・データまたはヘッダーや索引といった、オーバーヘッド・データを含まない領域は使用されていません。
マルチスレッドのアプリケーション内のスレッドは、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
型の構造体に対するポインタを格納します。FVIEWFLD型の構造体には、vflags
(現在未使用で0に設定されているフラグ・フィールド)、vname
(VIEW名を含む文字配列)、および
data
(C構造体として格納されるVIEWデータに対するポインタ)が含まれています。アプリケーションは、Fupdate32()
にvname
およびdata
を提供します。
マルチスレッドのアプリケーション内のスレッドは、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は、フィールド化バッファを指すポインタです。
マルチスレッドのアプリケーション内のスレッドは、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
のフィールドに対してのみ有効です。
マルチスレッドのアプリケーション内のスレッドは、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文字列を返します(つまり、変換は行われません)。
マルチスレッドのアプリケーション内のスレッドは、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()
を使用して変更できます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT
を含め、どのようなコンテキスト状態で実行していても、Fvftos()
またはFvftos32()
を呼び出すことができます。
この関数は、エラー発生時に -1を返し、Ferror
を設定してエラー条件を示します。
次の条件の場合、Fvftos()
は異常終了し、Ferror
を次の値に設定します。
FALIGNERR
]
FNOTFLD
]
FEINVAL
]
FBADACM
]
FBADVIEW
]
「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
]
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
]
「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()
ではC構造体を指定することを除けば、Fvstof()
はこれらの関数と同じものと考えることもできます。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は、コンパイルされたVIEW記述の名前へのポインタです。VIEWDIR
およびVIEWFILES
環境変数を使用してコンパイルされたVIEW記述があるディレクトリとファイルが検索されます。
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
Equivalent COBOL Record
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);
}
/* transfer to target machine and get response */
...
/* translate back */
if (Fvttos(data, (char *)&s1, "test") == -1) {
printf("Fvttos failed: %sn", Fstrerror(Ferror));
exit(0);
}
/* use the structure */
.....
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システムのリファレンス・マニュアルでstdio
(3S)を参照してください)。Fwrite()
はバッファのインデックスを破棄します。
fbfrは、フィールド化バッファを指すポインタです。iopは、出力ストリームを指すFILE
型のポインタです。
FLD_PTR
フィールド・タイプの場合、ポインタによって指示されているデータではなく、ポインタだけが出力ストリームに書き込まれます。FLD_VIEW32
フィールド・タイプの場合、VIEW32バッファ内のデータではなく、FVIEWFLD
構造体だけが出力ストリームに書き込まれます。
マルチスレッドのアプリケーション内のスレッドは、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
は、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フィールド・データのエンコーディング変換が自動的に行われます。
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)