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