ATMI FML関数リファレンス

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

セクション3fml - FML関数

表1 Oracle Tuxedo FML関数
名前
説明
FML関数について紹介する
フィールドの変換および追加
フィールドの変換および変更
検索、変換してポインタを返す
変換された値のオカレンスの検索
フィールドの取得および変換
フィールドの取得、領域の割り当て、および変換
最終エラーのエラー・メッセージを出力
16ビットFMLバッファと32ビットFMLバッファの間の変換
新しいフィールド・オカレンスの追加
FLD_STRING型の値を変換し、バッファに追加
フィールド化バッファの割り当ておよび初期化
新しいフィールド・オカレンスの追加
式をコンパイルし評価ツリーを返す
評価ツリーからバッファ内容を評価
解析された論理式を出力
フィールド・オカレンス値を変更
フィールド・オカレンスの変更 - 呼出し側は、文字列を提供
フィールド化バッファのチェックサムの計算
2つのフィールド化バッファの比較
ソース・バッファと宛先バッファの連結
ソース・バッファを宛先バッファにコピー
バッファからフィールド・オカレンスを削除
バッファからすべてのフィールド・オカレンスを削除
バッファからフィールドのリストを削除
フォーマットされた出力からフィールド化バッファを作成
バッファにあるフィールド・オカレンスの検索
バッファにあるフィールドの最後のオカレンスの値を検索
フィールド値のオカレンスの検索
文字列表現を指すポインタを返す
式の値をdouble型で返す
フィールド化バッファを指定されたストリームに出力
フィールド化バッファ用に割り当てられた領域の解放
フィールド・オカレンスのコピーおよび長さの取得
領域の割り当て、およびフィールド・オカレンスのコピーの取得
最後のオカレンスのコピーの取得
値を文字列に変換
malloc()で領域を割り当て、変換された値を取得する
id->nmマッピング表から領域を取り戻す
使用されている領域の大きさを返す
バッファがフィールド化されている場合は、trueを返す
フィールド化バッファの索引を行う
フィールド化バッファを初期化
ソース・バッファを宛先バッファに組み込む
フィールド名をフィールド識別子にマップする
フィールド識別子をフィールド番号にマップする
フィールド識別子をフィールド・タイプにマップする
バッファ中のフィールド・オカレンスのlenを返す
エンコーディング名およびマルチバイト・データ情報を準備する
エンコーディング名およびマルチバイト・データ情報を抽出する
フィールド識別子を作成
フィールド化バッファを宛先バッファに移動
フィールド識別子をフィールド名にマップする
バッファに必要な大きさの計算
次のフィールド・オカレンスの取得
nm->idマッピング表から領域を取り戻す
バッファにあるすべてのオカレンスの数を返す
バッファにあるフィールド・オカレンスの数を返す
ソース・バッファを宛先バッファに組み込む
フィールド・オカレンスがバッファにある場合はtrueを返す
標準出力にバッファを出力する
バッファのプロジェクションを提供
バッファのプロジェクションおよびコピーを提供
フィールド化バッファの読取り
フィールド化バッファを再割当て
バッファにある索引をリストアする
フィールド化バッファのサイズを返す
FMLエラーのエラー・メッセージ文字列の獲得
フィールド・タイプを別のフィールド・タイプに変換
フィールド・タイプを指すポインタを返す
フィールド化バッファの索引の破棄
フィールド化バッファの未使用分のバイト数を返す
ソースを持つ宛先バッファの更新
フィールド化バッファで使用しているバイト数を返す
フィールド・オカレンスをlong型で返す
フィールド・オカレンスの文字列の値を返す
フィールド化バッファからC構造体にコピー
VIEWバッファに必要な大きさの計算
構造体の要素がNULLかどうかのチェック
マッピング・エントリのフラグ・オプションの変更
C構造体からフィールド化バッファにコピーする
構造体の要素をNULL値で初期化する
C構造体をNULL値で初期化する
C構造体からフィールド化バッファにコピーする
C構造体からターゲットのレコード・タイプに変換、およびその逆の変換
フィールド化バッファを書き込む
FML32型付きバッファにあるFLD_MBSTRINGフィールドのマルチバイト文字を、ターゲットの名前付きのエンコーディングに変換する
VIEW32型付きバッファにあるMBSTRINGフィールドのマルチバイト文字を、ターゲットの名前付きのエンコーディングに変換する

 


FML関数の紹介

形式

“#include <fml.h>”
“#include <fml32.h>”

説明

FMLは、フィールド化バッファと呼ばれる記録構造を定義、操作する一連のC言語関数で、フィールド化バッファにはフィールドと呼ばれる属性と値の対が含まれます。属性はフィールドの識別子であり、対応する値はフィールドのデータ内容を表します。

フィールド化バッファを使用すると、関連したフィールドのセットを名前でアクセスできるので、協調動作するプロセス間でパラメータ化されたデータを受け渡す場合に便利です。他のプロセスとコミュニケートする必要のあるプログラムは、FMLソフトウェアを使用し、フィールドを含む構造体を意識せずにフィールドへのアクセスが可能です。

FMLはまた、VIEWSと呼ばれる、フィールド化バッファをC構造体にマップする(その逆も可能)機能も提供します。VIEWSでは、フィールド化バッファではなく構造体において時間のかかるデータの処理を実行できます。データを処理するために構造体に転送すると、アプリケーションの実行速度が向上します。このように、VIEWSを使用すると、フィールド化バッファのデータ独立性と従来のレコード構造の効率性、簡便性をともに享受することができます。

FML16とFML32

FMLには2つのサイズがあります。オリジナルのFMLインタフェースは、フィールド長に16ビットの値を使用して、フィールドを識別する情報を格納します。このマニュアル・ページでは、これらをFML16と呼びます。FML16では、一意のフィールド数は8191、個々のフィールド長は最大64Kバイト、フィールド化バッファの総容量は64Kに制限されます。このインタフェースの定義、型、および関数のプロトタイプはfml.hに定義され、FML16インタフェースを使用するアプリケーション・プログラムは、このファイルをインクルードする必要があります。各関数は、-lfmlにあります。FML32は、フィールド長と識別子に32ビットの値を使用します。約3千万のフィールド、約20億バイトのフィールド長およびバッファ長が使用できます。FML32の定義、型、および関数のプロトタイプは、fml32.h内にあります。各関数は、-lfml32にあります。FML32のすべての定義、型、および関数名には「32」という接尾辞が付きます(たとえば、MAXFBLEN32FLDID32Fchg32)。また、環境変数にも接頭辞 “32"が付きます(FLDTBLDIR32FIELDTBLS32VIEWFILES32VIEWDIR32など)。

FMLバッファ

フィールド化バッファは、フィールド識別子とフィールド値の対(long, shortなど固定長フィールドの場合)、またはフィールド識別子、フィールド長、フィールド値の三揃い(可変長フィールドの場合)で構成されます。

フィールド識別子は、フィールド化バッファ内の個別のデータに付加されるタグです。フィールド識別子は、フィールド番号の名前およびフィールド内のデータの型で構成されます。フィールド番号はFML16では1 - 8191の範囲内、フィールド識別子の型定義はFLDIDです。フィールド番号はFML32では1 - 33,554,431の範囲内、フィールド識別子の型定義はFLDID32です。Oracle Tuxedo ATMIシステムは、フィールドに関する以下の規則に従っています。

FML16のフィールド番号
FML32のフィールド番号
予約済
使用可能
予約済
使用可能
1-100
101-8191
1-10,000,
30,000,001-33,554,431
10,001-30,000,000

Oracle Tuxedo ATMIシステムでは強制的に使用不可にはなっていませんが、アプリケーションが予約番号を使用しないようにしてください。

注意: FMLまたはFML32バッファ内のフィールドがルーティングに使用される場合は、フィールド番号は8191以下でなければなりません。

フィールドの型は、標準C言語の型のいずれでもかまいません(shortlongfloatdouble、およびchar)。他に、string型(NULL文字で終了する文字列)、carray型(文字配列)、mbstring型(マルチバイト文字配列 - Oracle Tuxedoリリース8.1またはそれ以降で使用可能)、ptr型(バッファを指すポインタ)、FML32型(埋込み型のFML32バッファ)、およびVIEW32型(埋込み型のVIEW32バッファ)がサポートされています。ptr型、fml32型、およびview32型は、FML32インタフェースでのみサポートされています。fml.hでは、サポートされるフィールド型はFLD_SHORTFLD_LONGFLD_FLOATFLD_DOUBLEFLD_CHARFLD_STRING、およびFLD_CARRAYとして定義されます。fml32.hでは、サポートされるフィールド型はFLD_SHORTFLD_LONGFLD_FLOATFLD_DOUBLEFLD_CHARFLD_STRINGFLD_CARRAYFLD_MBSTRINGFLD_PTRFLD_FML32、およびFLD_VIEW32として定義されます。

FML16では、フィールド化バッファのポインタは、FBFR *型、フィールド長はFLDLEN型、フィールドのオカレンス数はFLDOCC型です。FML32では、フィールド化バッファのポインタはFBFR32 *型、フィールド長はFLDLEN32型、フィールドのオカレンス数はFLDOCC32型です。

フィールドは、FMLインタフェースのフィールド識別子により参照されます。ただし通常は、アプリケーション・プログラマにはフィールド名を覚える方が簡単です。フィールド名をフィールド識別子にマップするには、2つの方法があります。

実行時にFMLプログラムは、フィールド表ファイルを介してフィールド名と識別子のマッピング情報を取得できます(「field_tables(5)」を参照)。FML16インタフェースは、環境変数FLDTBLDIRを使用して、フィールド表が含まれるディレクトリのリストを指定し、FIELDTBLSを使用して、使用される表ディレクトリのファイルのリストを指定します。FML32インタフェースはFLDTBLDIR32FIELDTBLS32を使用します。アプリケーション・プログラム内では、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への変換

適切に書かれた既存のFML16アプリケーションは、容易にFML32インタフェースを使用するように変更できます。FML関数の呼出しに使用する変数は、すべて適切なtypedef (FLDIDFLDLEN、およびFLDOCC)により定義されている必要があります。FML型付きバッファのためのtpalloc()呼出しには、FMLではなくFMLTYPE定義を使用します。アプリケーションのソース・コードに、fml.hのかわりにfml32.hを指定し、fml1632.hを組み込むことで32ビットの関数を使用できるようになります。fml1632.hには、すべての16ビットの型定義を32ビット版に変換したり、16ビットの関数やマクロを32ビット版に変換するマクロが含まれています。

VIEWS

VIEWSは、フィールド操作言語の一部です。この機能を使用すると、フィールドとC構造体のメンバーとのマッピングの指定によって、フィールド化バッファとC言語プログラムのC構造体の間でデータを受け渡しすることができます。フィールド化バッファの情報を大量に操作する場合は、データをC構造体内に転送するとパフォーマンスが向上します。VIEWS関数を使用して、フィールド化バッファ内の情報をバッファ内のフィールドから抽出してC構造体に置き、C構造体内でデータを操作した後、再度VIEWS関数を使用して、更新した値をフィールド化バッファに戻すことができます。

型付きバッファは、フィールド化バッファというFMLの概念に基づいたATMI環境の機能の1つです。ATMI環境と共に納入される2種類の標準バッファは、FML型付きバッファとVIEW型付きバッファです。このバッファがさらに異なる点は、VIEWバッファはFMLフィールド化バッファとの関連性がまったくなくてもよいということです。またFML32VIEW32のバッファ型が使用される点でも異なります。

VIEW記述は、「viewfile(5)」で解説されるようにソースviewfileに作成、格納されます。VIEW記述は、フィールド化バッファ内のフィールドをC構造体内のメンバーにマップします。ソースVIEW記述は、viewc()またはviewc32()でコンパイルされ、VIEWオブジェクト・ファイルが生成されます。これは、フィールド化バッファとCプログラムのC構造体の間で転送されるデータのマッピングに使用されます(詳細については、「viewc、viewc32(1)」を参照)。また、VIEWコンパイラはアプリケーション・プログラムにインクルードするC言語のヘッダー・ファイルを作成し、VIEW記述で記述される構造体を定義します。VIEW逆アセンブラであるviewdis()またはviewdis32()は、オブジェクトVIEW記述を読取り可能な形式に変換する(つまり、ソースVIEW記述に戻す)ためのものです。逆アセンブラの出力は、VIEWコンパイラに再入力できます(詳細については、「viewdis、viewdis32(1)」を参照)。

VIEWFILESおよびVIEWDIR環境変数を使用してVIEW構造体を処理するために、実行時にオブジェクト・ファイルが使用されます。VIEWFILESに、アプリケーションのオブジェクトVIEWファイルのカンマ区切りのリストを指定する必要があります。フルパス名で指定したファイルはそのまま使用され、相対パス名で指定したファイルはVIEWDIR変数(下記参照)で指定したディレクトリのリストから検索されます。VIEWDIRには、相対ファイル名を指定したVIEWオブジェクト・ファイルを検索するために使用する、コロンで区切ったディレクトリのリストを指定します。VIEW32構造体ではVIEWFILES32およびVIEWDIR32が使用されます。

大半のFML関数によってサポートされているデータ型以外に、VIEWSはソースVIEW記述内でint型を間接的にサポートします。VIEW記述がコンパイルされると、VIEWコンパイラは、使用中のマシンの種類によって、すべてのint型をshort型かlong型に自動的に変換します。

VIEWSは、10進数データ型もサポートしています。これはdec_t型のフィールドとして定義され、パック10進数の値は総バイト数と小数点以下のバイト数として表されます。このようなフィールドは、FMLでは直接サポートされていませんが、このフィールドと、FMLでサポートされているほかのフィールドとの変換は自動的に行われます。パック10進数は、COBOL環境では2桁の10進数が1バイトにパックされ、下位バイトに符号が格納されます。C環境では、データ型は10進指数、符号、桁、およびパック10進数の値を含むdec_t型定義で定義されます。

FMLバッファはFvftos()またはFvftos32()を使用してビューに変換できます。ビューはFvstof()またはFvstof32()を使用してフィールド化バッファに変換できます。フィールド化バッファと構造体の間でデータ転送を行うと、ソース・データは自動的に宛て先データの型に変換されます。フィールドの複数オカレンスがサポートされています。これは構造体中の配列として扱われます。NULL値は構造体の空のメンバーを表すのに使用し、viewfileの構造体の各メンバーに対して指定できます。メンバーにNULL値を指定しないと、省略時のNULL値が使用されます。またC構造体のメンバーとフィールド化バッファ内のフィールドの間にマッピングが存在していても、それらの間でのデータの転送を禁止することができます。

VIEWは、目標レコード形式からの変換、または目標レコード形式への変換もできます。デフォルトの目標形式はIBM System/370 COBOLレコードです。Fvstot()関数によって、バイト・オーダー、浮動小数点、10進数形式、文字セット(ASCIIからEBCDIC)の変換が行われ、Fvttos()によって元の形式に戻されます。32ビット版の関数もあります。Fcodeset()関数を使用すると、別のASCII/EBCDIC変換表を指定できます。

エラー処理

ほとんどのFML関数は、1つまたは複数の戻り値を戻します。エラーの条件は、エラーの他には考えられない戻り値で示されます。通常、エラーであれば-1、不正なフィールド識別子(BADFLDID)またはアドレスであれば0です。またエラー・タイプが、外部整数Ferror (FML16の場合)、あるいはFerror32 (FML32の場合)として得られます。FerrorFerror32は、正常呼出しではクリアされないので、エラーが示された後でのみテストします。

F_error()F_error32()関数は、標準エラー出力にメッセージを出力します。これらは1つのパラメータ(文字列)を取り、引数の文字列にコロンと空白を付けて出力し、改行文字の後にエラー・メッセージを出力します。表示されるエラー・メッセージは、エラー発生時に設定されたFerrorまたはFerror32内の現在のエラー番号に対して定義されているメッセージです。

メッセージ・カタログからエラー・メッセージのテキストを検索するには、Fstrerror()を使用することができます。これらは、userlog(3c)への引数として使用できるポインタを返します。

エラー・コードのうち、FML機能で生成できるものについては、マニュアルのFMLの項目で説明しています。

関連項目

CFadd、CFadd32(3fml)CFchg、CFchg32(3fml)CFfind、CFfind32(3fml)CFfindocc、CFfindocc32(3fml)CFget、CFget32(3fml)CFgetalloc、CFgetalloc32(3fml)F_error、F_error32(3fml)Fadd、Fadd32(3fml)Fadds、Fadds32(3fml)Falloc、Falloc32(3fml)Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)Fchg、Fchg32(3fml)Fchgs、Fchgs32(3fml)Fchksum、Fchksum32(3fml)Fcmp、Fcmp32(3fml)Fconcat、Fconcat32(3fml)Fcpy、Fcpy32(3fml)Fdel、Fdel32(3fml)Fdelall、Fdelall32(3fml)Fdelete、Fdelete32(3fml)Fextread、Fextread32(3fml)Ffind、Ffind32(3fml)Ffindlast、Ffindlast32(3fml)Ffindocc、Ffindocc32(3fml)Ffinds、Ffinds32(3fml)Ffloatev、Ffloatev32、Fvfloatev、Fvfloatev32(3fml)Ffprint、Ffprint32(3fml)Ffree、Ffree32(3fml)Fget、Fget32(3fml)Fgetalloc、Fgetalloc32(3fml)Fgetlast、Fgetlast32(3fml)Fgets、Fgets32(3fml)Fgetsa、Fgetsa32(3fml)Fidnm_unload、Fidnm_unload32(3fml)Fidxused、Fidxused32(3fml)Fielded、Fielded32(3fml)Findex、Findex32(3fml)Finit、Finit32(3fml)Fjoin、Fjoin32(3fml)Fldid、Fldid32(3fml)Fldno、Fldno32(3fml)Fldtype、Fldtype32(3fml)Flen、Flen32(3fml)Fmkfldid、Fmkfldid32(3fml)Fmove、Fmove32(3fml)Fname、Fname32(3fml)Fneeded、Fneeded32(3fml)Fnext、Fnext32(3fml)Fnmid_unload、Fnmid_unload32(3fml)Fnum、Fnum32(3fml)Foccur、Foccur32(3fml)Fojoin、Fojoin32(3fml)Fpres、Fpres32(3fml)Fprint、Fprint32(3fml)Fproj、Fproj32(3fml)Fprojcpy、Fprojcpy32(3fml)Fread、Fread32(3fml)Frealloc、Frealloc32(3fml)Frstrindex、Frstrindex32(3fml)Fsizeof、Fsizeof32(3fml)Fstrerror、Fstrerror32(3fml)Ftypcvt、Ftypcvt32(3fml)Ftype、Ftype32(3fml)Funindex、Funindex32(3fml)Funused、Funused32(3fml)Fupdate、Fupdate32(3fml)Fused、Fused32(3fml)Fvall、Fvall32(3fml)Fvals、Fvals32(3fml)Fvftos、Fvftos32(3fml)Fneeded、Fneeded32(3fml)Fvnull、Fvnull32(3fml)Fvopt、Fvopt32(3fml)Fvselinit、Fvselinit32(3fml)Fvsinit、Fvsinit32(3fml)Fvstof、Fvstof32(3fml)Fwrite、Fwrite32(3fml)field_tables(5)viewfile(5)

『FMLを使用したTuxedoアプリケーションのプログラミング』

 


CFadd、CFadd32(3fml)

名前

CFadd()CFadd32() - フィールドの変換および追加

形式

#include <stdio.h>
#include "fml.h"
int CFadd(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len, int type)
#include fml32.h>
int
CFadd32(FBFR32 *fbfr, FLDID32 fieldid, char *value, FLDLEN32 len, int type)

説明

CFadd()は、Fadd()に似た動きをしますが、CFaddは、フィールド化バッファにフィールドが追加される場合、valueをユーザー指定の型からfieldid型に変換します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。valueは、追加される値を指すポインタです。lenは、追加される値の長さです。lenは、FLD_CARRAY型の場合のみ必要です。typeは、value内のフィールドのデータ型です。

フィールドがバッファに追加される前に、データ項目の型が、ユーザー指定の型からfieldidに指定された型に変換されます。ソースがFLD_CARRAY型(任意の文字配列)である場合は、len引数を配列の長さに設定する必要があります。これ以外の場合、長さは無視されます。変換および追加されるフィールドの値は、まず変数valueに設定します。C言語では12345Lのような構成が許可されないためです。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。CFadd()またはCFadd32()が使用されているとき、これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

CFadd32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行している場合でも、CFadd()またはCFadd32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、CFadd()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、valueパラメータにNULLが指定された場合)。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファで追加あるいは変更されますが、バッファには、十分な領域が残っていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

関連項目

「FML関数の紹介」Fadd、Fadd32(3fml)

 


CFchg、CFchg32(3fml)

名前

CFchg()CFchg32() - フィールドの変換および変更

形式

#include <stdio.h> 
#include "fml.h"
int CFchg(FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *value,
FLDLEN len, int type)
#include "fml32.h"
int CFchg32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc,
char *value,
FLDLEN32 len, int type)

説明

CFchg()は、Fchg()に似た働きをしますが、フィールドがフィールド化バッファにおいて変更されるために、最初に、ユーザー指定のtypeからfieldid型にvalueを変換します。 fbfrは、フィールド化バッファを指すポインタです。 fieldidは、フィールド識別子です。 ocは、フィールドのオカレンス番号です。 valueは、新しい値に対するポインタです。 lenは、変更される値の長さです。lenは、型がFLD_CARRAYの場合のみ必要です。typeはvalueのデータ型です。

存在しないフィールド・オカレンスが指定された場合、必要とされる値が追加されるまで、存在しないオカレンスにNULL値が追加されます(たとえば、バッファに存在しないフィールドのフィールド・オカレンスを4に変更すると、3個のNULL値の後に指定されたフィールド値が追加されます)。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。CFchg()またはCFchg32()が使用されている場合に、これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

CFchg32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、CFchg()またはCFchg32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、CFchg()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、valueパラメータにNULLが指定された場合)。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファで追加あるいは変更されますが、バッファには、十分な領域が残っていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

関連項目

「FML関数の紹介」CFadd、CFadd32(3fml)Fchg、Fchg32(3fml)

 


CFfind、CFfind32(3fml)

名前

CFfind()CFfind32() - 検索、変換してポインタを返す

形式

#include <stdio.h> 
#include "fml.h"
char * CFfind(FBFR *fbfr, FLDID fieldid, FLDOCC oc, FLDLEN *len,
int type)
#include "fml32.h"
char *
CFfind32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, FLDLEN32 *len,
  int type)

説明

CFfind()は、バッファ内の指定されたフィールドを検索し、それを変換してからその変換した値を指すポインタを返します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。lenは、出力時に使用されるもので変換された値の長さを指すポインタです。typeは、ユーザーが変換したいフィールドの変換後のデータ型です。

Ffind()と同じく、この関数で返されるポインタは読取り専用とする必要があります。CFfind()が返すポインタは、次のバッファ操作(破壊的でない場合でも)までしか有効ではありません。これは、変換後の値が1つのプライベート・バッファに保存されているためです。一方、Ffins()の戻り値の場合は、次にバッファが変更されるまで有効です。Ffind()とは異なり、CFfind()は、変換済の値を呼出し側がすぐに使用できるようにします。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。CFfind()またはCFfind32()が使用されている場合に、これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

CFfind32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、CFfind()またはCFfind32()を呼び出すことができます。

戻り値

上記の「形式」の項では、CFfind()の戻り値のデータ型は、charポインタ(Cのchar **)として記述されています。実際、戻されるポインタは、格納済のフィールドの型と同じ型を持つオブジェクトを指しています。

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、CFfind()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

関連項目

「FML関数の紹介」Ffind、Ffind32(3fml)

 


CFfindocc、CFfindocc32(3fml)

名前

CFfindocc()CFfindocc32() - 変換された値のオカレンスの検索

形式

#include <stdio.h> 
#include "fml.h"
FLDOCC
CFfindocc(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len, int
type)
#include "fml32.h"
FLDOCC32
CFfindocc32(FBFR32 *fbfr, FLDID32 fieldid, char *value, FLDLEN32
len, int type)

説明

CFfindocc()の処理はFfindocc()と似ていますが、値をユーザー指定の型からfieldidの型に最初に変換します。CFfindocc()は、ユーザー指定の値、長さおよび型と一致する、指定フィールドをバッファで検索します。CFfindocc()は、最初に一致したフィールドのオカレンス番号を返します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。valueは、検索される値を指すポインタです。型がFLD_CARRAYの場合、lenは、入力値と比較する値の長さです。typeは、value内のフィールドのデータ型です。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。CFfindocc()またはCFfindocc32()が使用されている場合に、これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

CFfindocc32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、CFfindocc()またはCFfindocc32()を呼び出すことができます。

戻り値

フィールド値が見つからない場合、または他のエラーが見つかった場合、-1を返し、CFfindocc()Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、CFfindocc()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、valueパラメータにNULLが指定された場合)。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

関連項目

「FML関数の紹介」Ffindocc、Ffindocc32(3fml)

 


CFget、CFget32(3fml)

名前

CFget()CFget32() - フィールドの取得および変換

形式

#include <stdio.h> 
#include "fml.h"
int
CFget(FBFR *
fbfr, FLDID fieldid, FLDOCC oc, char *buf, FLDLEN *len,
int
type)
#include "fml32.h"
int
CFget32(
FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, char *buf,
FLDLEN32 *
len, int type)

説明

CFget()は、Fget()と同様に変換を行います。変換済の値がユーザー指定バッファにコピーされるのが大きな違いです。fbfrはフィールド化バッファを指すポインタです。fieldidはフィールド識別子です。ocはフィールドのオカレンス番号です。bufはプライベート・データ領域を指すポインタです。入力時においてlenは、プライベート・データ領域の長さを指すポインタです。戻り時においてlenは、返された値の長さを指すポインタです。入力時においてlenパラメータがNULLの場合は、フィールド値を入れるためのバッファが十分大きいために、値の長さが返されないものと想定されます。bufパラメータがNULLの場合、フィールド値は返されません。typeは、ユーザーが変換しようとしている戻り値の変換先のデータ型です。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。CFget()またはCFget32()が使用されているとき、これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

CFget32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、CFget()またはCFget32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、CFget()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
lenで指定されたデータ領域の大きさは、フィールド値を保持できるほど大きくありません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

関連項目

「FML関数の紹介」Fget、Fget32(3fml)

 


CFgetalloc、CFgetalloc32(3fml)

名前

CFgetalloc()CFgetalloc32() - フィールドの取得、領域の割り当て、変換

形式

#include <stdio.h> 
#include "fml.h"
char *
CFgetalloc(FBFR *fbfr, FLDID fieldid, FLDOCC oc, int type, FLDLEN
*extralen)
#include "fml32.h"
char *
CFgetalloc32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, int type,
FLDLEN32 *extralen)

説明

CFgetalloc()は、バッファから指定フィールドを取得し、領域を割り当て、ユーザーが指定した型にフィールドを変換し、その場所を指すポインタを返します。fbfrは、フィールド化バッファを指すポインタです。fieldidはフィールド識別子です。ocはフィールドのオカレンス番号です。typeは、ユーザーが変換しようとしているフィールドの変換先のデータ型です。呼出し時においてextralenは、値を受け取るために割り当てられる追加領域の長さを指すポインタです。戻り時には、extralenは、実際に使用された領域の大きさを指すポインタです。extralenがNULLの場合、割り当てる追加領域はなく、実際の長さは返されません。ユーザーには、(変換された)戻り値を解放する責任があります。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。CFgetalloc()またはCFgetalloc32()が使用されているとき、これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

CFgetalloc32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、CFgetalloc()またはCFgetalloc32()を呼び出すことができます。

戻り値

正常終了時には、CFgetalloc()は、変換された値を指すポインタを戻します。エラー時には、NULLを戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、CFgetalloc()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「mallocを使用して、メモリーを割り当てられませんでした。」
malloc()を使用しての領域の動的な割当てが失敗しました。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

関連項目

「FML関数の紹介」Fgetalloc、Fgetalloc32(3fml)

 


F_error、F_error32(3fml)

名前

F_error()F_error32() - 最終エラーのエラー・メッセージを出力

形式

#include stdio.h> 
#include "fml.h"
extern int Ferror;
void
F_error(char *msg)
#include "fml32.h"
extern int Ferror32;
void
F_error32(char *msg)

説明

この関数F_error()は、UNIXシステム・エラーを出力するperror()に似た働きをします。つまり、標準エラー出力(ファイル記述子2)にエラー・メッセージを作成し、システム・コールあるいはライブラリ関数呼出し時に発生した最後のエラーを記述します。文字列引数msgは、最初に出力されます。次にコロン、空白が出力され、メッセージおよび改行が出力されます。msgがNULLポインタあるいはNULL文字列を指している場合、コロンは出力されません。様々な利用形態を考慮して、この引数文字列には、エラーを起こしたプログラム名を入れます。エラー番号は外部変数Ferrorから取得されます。これはエラーが発生すると設定されますが、エラーではない呼出しが行われてもクリアされません。MS-DOSおよびOS/2環境ではFerrorFMLerrorに再定義されます。

エラー・メッセージをすぐに出力するには、別のFML関数から返されたエラーに対してF_error()を呼び出す必要があります。エラー・メッセージがFEUNIXのとき、Uunix_err()が呼び出されます。

F_error32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、F_error()またはF_error32()を呼び出すことができます。

戻り値

F_error()は、void宣言なので戻り値はありません。

関連項目

FML関数の紹介

UNIXシステムのリファレンス・マニュアルのperror(3)、Uunix_err(3)

 


F32to16、F16to32(3fml)

名前

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_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、FBADFLDを設定して異常終了します。これらのフィールド・タイプに対してF16to32()を実行しても、何の影響もありません。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、F32to16()またはF16to32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、F32to16()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファのどちらかがフィールド化バッファでないか、またはFinit()によって初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、変換先のフィールド化バッファにコピーされますが、バッファには十分な領域が残っていません。このエラーは、32ビットのFMLフィールドが長すぎて、16ビットのFMLフィールドに収まらない場合にも返されます。このエラーが返された場合は、変換先のバッファにフィールドはできません。

[FBADFLD]

「無効なフィールド番号またはフィールド・タイプです。」
このエラーは、F32to16()関数でのみ発生します。ソース・バッファは、16ビットのFMLがサポートしている8つのフィールド・タイプ以外のフィールド識別子を持っているか、フィールド番号が8191を超えています。

関連項目

FML関数の紹介

 


Fadd、Fadd32(3fml)

名前

Fadd()Fadd32() - 新しいフィールド・オカレンスの追加

形式

#include stdio.h> 
#include "fml.h"
int Fadd(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len)
#include "fml32.h"
int Fadd32(FBFR32 *fbfr, FLDID32 fieldid, char *value, FLDLEN32 len)

説明

Fadd()は、指定されたフィールド値を指定されたバッファに追加します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。valueは、新しい値を指すポインタです。したがって、ポインタの型は、追加される値と同じフィールド識別子の型である必要があります。lenは、追加される値の長さです。lenは、FLD_CARRAY型またはFLD_MBSTRING型の場合のみ必要です。

追加する値は、valueパラメータで指される場所にあります。すでに1つまたは複数のフィールド・オカレンスがある場合、新しいフィールド・オカレンスとして値が追加され、現在指定されているオカレンスの最大値より1つ大きいオカレンス番号が割り当てられます(指定されたオカレンスを追加するには、Fchg()を使用する必要があります)。

上記の「形式」の項では、Fadd()の引数valueのデータ型は、charのポインタ(Cのchar *)として記述されています。技術的には、これは、単に、Fadd()に渡せる値のある特定の型を記述しています。実際、引数valueの型は、追加されているフィールドのフィールド化バッファ表現と同じ型のオブジェクトへのポインタにします。たとえば、フィールドが、FLD_LONG型でバッファに格納されている場合は、valueの型は、long型のポインタ(Cのlong *)である必要があります。同様に、FLD_SHORT型でバッファに格納される場合、valueは、short型のポインタ(Cのshort *)である必要があります。大事なことは、Fadd()は、valueが指すオブジェクトが、追加される格納済のフィールドの型と同じ型を持っていることを想定しているということです。

FLD_PTR型の値では、Fadd32()はポインタ値を格納します。FLD_PTRフィールドが指すバッファは、tpalloc()を呼び出して割り当てます。FLD_FML32型の値の場合、Fadd32()は、索引を除くすべてのFLD_FML32フィールドの値を格納します。FLD_VIEW32型の値の場合、Fadd()FVIEWFLD型の構造体に対するポインタを格納します。FVIEWFLD型の構造体には、vflags (現在未使用で0に設定されているフラグ・フィールド)、vname (VIEW名を含む文字配列)、およびdata (C構造体として格納されるVIEWデータに対するポインタ)が含まれています。アプリケーションは、Fadd32()vnamedataを提供します。

FLD_MBSTRING型の値の場合、値はFmbpack32()関数のパッキングされた出力引数であり、引数lenFmbpack32()の出力引数sizeの値の長さです。

FLD_CARRAY型の値の場合、引数lenは値の長さです。FLD_CARRAYまたはFLD_MBSTRING以外のすべての型では、valueが参照するオブジェクトの長さは、その型から導かれ(たとえば、FLD_FLOATの場合、長さは、sizeof(float)になる)、lenの内容は無視されます。

Fadd32は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fadd()またはFadd32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fadd()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FEINVAL]

関数の引数が無効です
呼び出された関数の引数の1つが無効です。(たとえば、Fadd()のvalueパラメータにNULLを指定した場合)。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファに追加されますが、バッファには十分な領域が残っていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド番号は無効です。

関連項目

「FML関数の紹介」CFadd、CFadd32(3fml)Fadds、Fadds32(3fml)Fchg、Fchg32(3fml)

 


Fadds、Fadds32(3fml)

名前

Fadds()Fadds32() - FLD_STRING型の値を変換し、バッファに追加

形式

#include <stdio.h> 
#include "fml.h"
int
Fadds(FBFR *fbfr, FLDID fieldid, char *value)
#include "fml32.h"
int
Fadds32(FBFR32 *fbfr, FLDID32 fieldid, char *value)

説明

Fadds()は、ユーザー型FLD_STRINGからフィールド型(fieldid)への変換を処理し、それをフィールド化バッファに追加するために提供されています。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。valueは、追加される値を指すポインタです。

この関数は、type (FLD_STRING)を提供し、lenが0であるCFadd()を呼び出します。

Fadds32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fadds()またはFadds32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fadds()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファに追加されますが、バッファには十分な領域が残っていません。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド型は無効です。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、Fadds()のvalueパラメータにNULLを指定した場合)。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」CFchg、CFchg32(3fml)CFfind、CFfind32(3fml)CFget、CFget32(3fml)Falloc、Falloc32(3fml)Fchgs、Fchgs32(3fml)Ffinds、Ffinds32(3fml)Fgets、Fgets32(3fml)Fgetsa、Fgetsa32(3fml)

 


Falloc、Falloc32(3fml)

名前

Falloc()Falloc32() - フィールド化バッファの割り当ておよび初期化

形式

#include <stdio.h> 
#include "fml.h"
FBFR *
Falloc(FLDOCC F, FLDLEN V)
#include "fml32.h"
FBFR32 *
Falloc32(FLDOCC32 F, FLDLEN32 V)

説明

Falloc()は、フィールド化バッファ用に、malloc()を使用して領域を動的に割り当て、Finit()を呼び出してそれを初期化します。パラメータには、バッファに格納されているすべてのフィールドについて、フィールド数(F)および値の領域のバイト数(V)があります。

Falloc32()は、より多くのフィールドを持つ大きなバッファのために使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Falloc()またはFalloc32()を呼び出すことができます。

戻り値

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Falloc()は異常終了し、Ferrorを次の値に設定します。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、フィールド数が0より小さい、Vが0、または合計の大きさが65534より大きい)。

関連項目

「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(3fml)

名前

Fappend()Fappend32() - 新しいフィールド・オカレンスの追加

形式

#include <stdio.h>
#include "fml.h"
int
Fappend(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len)
#include "fml32.h"
int
Fappend32(FBFR32 *fbfr, FLDID32 fieldid, char *value, FLDLEN32 len)

説明

Fappend()は、指定されたフィールド値を指定されたバッファの終わりに追加します。Fappend()は、汎用目的のFMLアクセスに必要な内部構造体および順序付けを保持しない、大規模なバッファを作成する際に役に立ちます。この最適化の影響として、Fappend()への呼出しの後には、Fappend()への追加の呼び出し、FML索引ルーチンFindex()およびFunindex()への呼び出し、またはFree()Fused()Funused()Fsizeof()への呼び出ししか行なえません。Findex()またはFunindex()を呼び出す前に他のFMLルーチンへの呼出しを行うと、FerrorFNOTFLDに設定されてエラーが発生します。

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()関数のパッキングされた出力引数であり、引数lenFmbpack32()の出力引数sizeの値の長さです。

FLD_CARRAY型の値の場合、引数lenは値の長さです。FLD_CARRAYまたはFLD_MBSTRING以外のすべての型では、valueが参照するオブジェクトの長さは、その型から導かれ(たとえば、FLD_FLOATの場合、長さは、sizeof(float)になる)、lenの内容は無視されます。

Fappend32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fappend()またはFappend32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fappend()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、Fappend()のvalueパラメータにNULLを指定した場合)。

[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(3fml)

名前

Fboolco()Fboolco32()Fvboolco()Fvboolco32() - 式をコンパイルし評価ツリーを返す

形式

#include <stdio.h> 
#include "fml.h"
char *
Fboolco(char *expression)
char *
Fvboolco(char *expression, char *viewname)
#include "fml32.h"
char *
Fboolco32(char *expression)
char *
Fvboolco32(char *expression, char *viewname)

説明

Fboolco()は、expressionが指す論理表現をコンパイルし、評価ツリーのポインタを返します。認識される表現は、Cで認識される表現に近いものです。文法の説明は、『FMLを使用したOracle Tuxedoアプリケーションのプログラミング』に記載されています。

Fboolco()が作成する評価ツリーは、下記の「関連項目」の項でリストされている他の論理関数に使用されます。したがって、式を再びコンパイルする必要はありません。

Fboolco32()は32ビットFMLで使用されます。

Fvboolco()およびFvboolco32()は、同じVIEW機能を提供します。viewnameパラメータは、フィールド・オフセットを取り出すVIEWを示します。

FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると、この関数は失敗します。これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

Workstationプラットフォームでは、これらの関数はサポートされていません。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Fboolco()Fboolco32()Fvboolco()、またはFvboolco32()を呼び出すことができます。

戻り値

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fboolco()は異常終了し、Ferrorを次の値に設定します。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

[FSYNTAX]

「ブール式の文法が正しくありません。」
Fboolco()は、認識できないフィールド名以外に、論理表現に文法エラーを見つけました。

[FBADNAME]

「未知のフィールド名が指定されました。」
フィールド表またはビュー・ファイルにないフィールド名が指定されました。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効でした(たとえば、expressionがNULL)。

[FBADVIEW]

「ビューが見つからないか、取得できません」
VIEWDIRまたはVIEWFILESで指定したファイルにビュー名が見つかりません。

[FVFOPEN]

「VIEWファイルが見つからないか、オープンできません」
ビュー名の検索中に、VIEWDIRまたはVIEWFILESで指定したファイルの1つをプログラムが見つけられませんでした。

[EUNIX]

「オペレーティング・システム・エラー」
viewname検索中にプログラムはVIEWDIRまたはVIEWFILESで指定したファイルの1つを読込み用に開けませんでした。

[FVFSYNTAX]

「VIEWファイルが正しくありません」
ビュー名の検索中、VIEWDIRまたはVIEWFILESで指定したファイルの1つが壊れていたか、VIEWファイルではありませんでした。

[FMALLOC]

「mallocが失敗しました」
ビュー名の検索中、malloc()がビュー情報を格納するための領域の割当てに失敗しました。

[FEBADOP]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、およびFLD_VIEW32など)。

#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(3fml)

名前

Fboolev()Fboolev32()Fvboolev()Fvboolev32() - 評価ツリーに対するバッファの評価

形式

#include stdio.h> 
#include "fml.h"
int
Fboolev(FBFR *fbfr, char *tree)
int
Fvboolev(char *cstruct, char *tree, char *viewname)
#include "fml32.h"
int
Fboolev32(FBFR32 *fbfr, char *tree)
int
Fvboolev32(char *cstruct, char *tree, char *viewname)

説明

Fboolev()は、フィールド化バッファを指すポインタ(fbfr)、Fboolco()が戻す評価ツリーのポインタ(tree)を利用して、フィールド化バッファが指定された論理条件と一致する場合は、true (1)を戻し、そうでない場合はfalse (0)を戻します。この関数は、フィールド化バッファあるいは評価ツリーのいずれも変更しません。評価ツリーは、Fboolco()によって以前コンパイルされたものです。

Fboolev32()は32ビットFMLで使用されます。

Fvboolev()およびFvboolev32()は、同じVIEW機能を提供します。viewnameパラメータは、フィールド・オフセットを取り出すVIEWを示し、Fvboolco()またはFvboolco32()で指定されたVIEWと同じにする必要があります。

Workstationプラットフォームでは、これらの関数はサポートされていません。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Fboolev()Fboolev32()Fvboolev()、またはFvboolev32()を呼び出すことができます。

戻り値

Fboolev()は、バッファ内の表現と評価ツリーが一致している場合、1を戻します。表現が評価ツリーと不一致の場合、0を戻します。この関数は、エラー発生時に-1を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fboolev()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません」
fbfrバッファが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません」
fbfrバッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

[FEINVAL]

「関数の引数が無効です」
呼び出された関数の引数の1つが無効でした(たとえば、treeパラメータにNULLが指定されている場合)。

[FSYNTAX]

「ブール式の構文が正しくありません」
認識できないフィールド名以外の構文エラーがブール式に見つかりました。

[FBADVIEW]

「ビューが見つからないか、取得できません」
VIEWDIRまたはVIEWFILESで指定したファイルにビュー名が見つかりません。

[FVFOPEN]

「VIEWファイルが見つからないか、オープンできません」
ビュー名の検索中に、VIEWDIRまたはVIEWFILESで指定したファイルの1つをプログラムが見つけられませんでした。

[EUNIX]

「オペレーティング・システム・エラー」
viewname検索中にプログラムはVIEWDIRまたはVIEWFILESで指定したファイルの1つを読込み用に開けませんでした。

[FVFSYNTAX]

「VIEWファイルが正しくありません」
ビュー名の検索中、VIEWDIRまたはVIEWFILESで指定したファイルの1つが壊れていたか、VIEWファイルではありませんでした。

[FMALLOC]

「mallocが失敗しました」
ビュー名の検索中、malloc()がビュー情報を格納するための領域の割当てに失敗しました。

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");

Buffer selectedを出力します。

関連項目

「FML関数の紹介」Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)

 


Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)

名前

Fboolpr()Fboolpr32()Fvboolpr()Fvboolpr32() - パースされた論理式を出力

形式

#include <stdio.h> 
#include "fml.h"
void
Fboolpr(char *tree, FILE *iop)
int
Fvboolpr(char *tree, FILE *iop, char *viewname)
#include "fml32.h"
void
Fboolpr32(char *tree, FILE *iop)
int
Fvboolpr32(char *tree, FILE *iop, char *viewname)

説明

Fboolpr()は、コンパイル済の表現を指定された出力ストリームに出力します。評価ツリー(tree)は、Fboolco()で以前作成されたものです。iopは、出力ストリームを指すFILE型のポインタです。出力内容のすべてがかっこ内に入れられ、評価ツリーで示されるように解析されます。この関数はデバッグに役立ちます。

Fboolpr32()は32ビットFMLで使用されます。

Fvboolpr()およびFvboolpr32()は、同じVIEW機能を提供します。viewnameパラメータは、フィールド・オフセットを取り出すVIEWを示し、Fvboolco()またはFvboolco32()で指定されたVIEWと同じにする必要があります。

Workstationプラットフォームでは、これらの関数はサポートされていません。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Fboolpr()Fboolpr32()Fvboolpr()、またはFvboolpr32()を呼び出すことができます。

戻り値

Fboolpr()は、voidを戻すものとして宣言されているので、戻り値はありません。Fvboolpr()は、VIEW名が無効な場合は-1を戻します。

エラー

次の条件の場合、Fvboolpr()は失敗し、Ferrorを次の値に設定します。

[FBADVIEW]

「ビューが見つからないか、取得できません」
VIEWDIRまたはVIEWFILESで指定したファイルにビュー名が見つかりません。

[FVFOPEN]

「VIEWファイルが見つからないか、オープンできません」
ビュー名の検索中に、VIEWDIRまたはVIEWFILESで指定したファイルの1つをプログラムが見つけられませんでした。

[EUNIX]

「オペレーティング・システム・エラー」
viewname検索中にプログラムはVIEWDIRまたはVIEWFILESで指定したファイルの1つを読込み用に開けませんでした。

[FVFSYNTAX]

「VIEWファイルが正しくありません」
ビュー名の検索中、VIEWDIRまたはVIEWFILESで指定したファイルの1つが壊れていたか、VIEWファイルではありませんでした。

[FMALLOC]

「mallocが失敗しました」
ビュー名の検索中、malloc()がビュー情報を格納するための領域の割当てに失敗しました。

移植性

この関数は、Windows用のOracle Tuxedo System Workstation DLLでは使用できません。

関連項目

「FML関数の紹介」Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)

 


Fchg、Fchg32(3fml)

名前

Fchg()Fchg32() - フィールド・オカレンス値を変更

形式

#include <stdio.h> 
#include "fml.h"
int
Fchg(FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *value, FLDLEN len)
#include "fml32.h"
int
Fchg32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, char *value,
FLDLEN32 len)

説明

Fchg()は、バッファ内のフィールド値を変更します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。valueは、新しい値を指すポインタです。したがって、その型は、変更される値と同じ型である必要があります(下記参照)。lenは、変更される値の長さです。lenは、FLD_CARRAY型またはFLD_MBSTRING型の場合のみ必要です。

オカレンスが-1と指定された場合、フィールド値が新しいオカレンスとしてバッファに追加されます。指定されたフィールド・オカレンスが見つかった場合、フィールド値は、指定された値に変更されます。存在しないフィールド・オカレンスが指定された場合、必要とするオカレンスが追加されるまで、見つからないオカレンス用にはNULL値が追加されます(たとえば、バッファに存在しないフィールド用にフィールド・オカレンスを4に変更すると、3個のNULL値の後に指定されたフィールド値が追加されます)。NULL値については、文字列型と文字型の値の場合はNULL文字列(長さ1バイト)、long型とshort型のフィールドの場合は0、float型とdouble型の値の場合は0.0、文字配列の場合は0長の文字列が使用されます。新しい値または変更された値がvalueに含まれ、文字配列の場合、その長さをlenに指定します(それ以外の場合は無視されます)。valueがNULLの場合、フィールド・オカレンスは削除されます。削除する値が見つからない場合、エラーと見なされます。

上記の「形式」の項では、Fchg()の引数valueのデータ型は、charのポインタ(Cのchar *)として記述されています。技術的には、Fchg()に渡されるある1つの特別な種類の値のみ記述しています。実際、引数valueの型は、変更するフィールドのフィールド化バッファの表現の型と同じ型のオブジェクトを指すポインタでなければなりません。たとえば、フィールドが、FLD_LONG型でバッファに格納されている場合は、valueの型は、long型のポインタ(Cのlong *)である必要があります。同様に、FLD_SHORT型でバッファに格納される場合、valueは、short型のポインタ(Cのshort *)である必要があります。大事なことは、Fchg()は、valueが指すオブジェクトが、変更される格納済のフィールドの型と同じ型を持っていると想定していることです。

FLD_PTR型の値では、Fchg32()はポインタ値を格納します。FLD_PTRフィールドが指すバッファは、tpalloc()を呼び出して割り当てます。FLD_FML32型の値の場合、Fchg32()は、索引を除くすべてのFLD_FML32フィールドの値を格納します。FLD_VIEW32型の値の場合、Fchg()FVIEWFLD型の構造体に対するポインタを格納します。FVIEWFLD型の構造体には、vflags (現在未使用で0に設定されているフラグ・フィールド)、vname (VIEW名を含む文字配列)、およびdata (C構造体として格納されるVIEWデータに対するポインタ)が含まれています。アプリケーションは、vnamedataFchg32()に提供します。

FLD_MBSTRING型の値の場合、値はFmbpack32()関数のパッキングされた出力引数であり、引数lenFmbpack32()の出力引数sizeの値の長さです。

FLD_CARRAY型の値の場合、引数lenは値の長さです。FLD_CARRAYまたはFLD_MBSTRING以外のすべての型では、valueが参照するオブジェクトの長さは、その型から導かれ(たとえば、FLD_FLOATの場合、長さは、sizeof(float)になる)、lenの内容は無視されます。

Fchg32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fchg()またはFchg32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fchg()は失敗し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスの削除がリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファで追加あるいは変更されますが、バッファには、十分な領域が残っていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」CFchg、CFchg32(3fml)Fadd、Fadd32(3fml)Fcmp、Fcmp32(3fml)Fdel、Fdel32(3fml)

 


Fchgs、Fchgs32(3fml)

名前

Fchgs()Fchgs32() - フィールド・オカレンスの変更 - 呼出し側は、文字列を提供

形式

#include <stdio.h> 
#include "fml.h"
int
Fchgs(FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *value)
#include "fml32.h"
int
Fchgs32(FBFR32 *fbfr, FLDID32 fieldid, int oc, char *value)

説明

Fchgs()は、ユーザー型FLD_STRINGの変換を処理のために提供されています。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。valueは、追加される文字列を指すポインタです。この関数は、文字列をfieldidのフィールド・タイプに変換するためのFLD_STRING型およびlen (値が0)を設定して非文字列関数CFchg()を呼び出します。

Fchgs32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fchgs()またはFchgs32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fchgs()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファで追加あるいは変更されますが、バッファには、十分な領域が残っていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」CFchg、CFchg32(3fml)Fchg、Fchg32(3fml)

 


Fchksum、Fchksum32(3fml)

名前

Fchksum()Fchksum32() - フィールド化バッファのチェックサムの計算

形式

#include <stdio.h> 
#include "fml.h"
long
Fchksum(FBFR *fbfr)
#include "fml32.h"
long
Fchksum32(FBFR32 *fbfr)

説明

高信頼性のI/Oでは、チェックサムは、Fchksum()を使用して計算され、書き込まれているフィールド化バッファに格納されます。fbfrは、フィールド化バッファを指すポインタです。格納されたチェックサムは、すべてのバッファを受信したことを確かめるために、受信プロセスによって検査されます。

FLD_PTR型の値の場合、ポインタまたはポインタによって参照されるデータのかわりに、ポインタのフィールドの名前がチェックサム計算に含まれます。

Fchksum32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fchksum()またはFchksum32()を呼び出すことができます。

戻り値

正常終了の場合、Fchksum()チェックサムを戻します。この関数は、エラー発生時に-1を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fchksum()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Fread、Fread32(3fml)Fwrite、Fwrite32(3fml)

 


Fcmp、Fcmp32(3fml)

名前

Fcmp()Fcmp32() - 2つのフィールド化バッファの比較

形式

#include <stdio.h> 
#include "fml.h"
int
Fcmp(FBFR *fbfr1, FBFR *fbfr2)
#include "fml32.h"
int
Fcmp32(FBFR32 *fbfr1, FBFR32 *fbfr2)

説明

Fcmp()は、フィールド識別子を比較してから、2つのFMLバッファのフィールド値を比較します。fbfr1およびfbfr2は、比較するフィールド化バッファを指すポインタです。

FLD_PTR型の値の場合、ポインタの値(アドレス)が等しければ、2つのポインタ・フィールドは等しいとみなされます。FLD_FML32型の値の場合、すべてのフィールド・オカレンスおよび値が等しければ、2つのフィールドは等しいとみなされます。FLD_VIEW32型の値の場合、VIEW名が同じとき、およびすべての構造体メンバーのオカレンスおよび値が等しいとき、2つのフィールドは等しいとみなされます。

Fcmp32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fcmp()またはFcmp32()を呼び出すことができます。

戻り値

この関数は、2つのバッファが等しい場合には0を戻します。次に示す条件の場合-1を戻します。

条件のいずれかに該当する場合(たとえば、fbfr1フィールドのfieldidが対応するフィールドfbfr2のfieldidより大きい場合)、Fcmp()は1を返します。バッファの実際のサイズ(Falloc()に渡されるサイズ)は考慮されません。バッファのデータのみです。この関数は、エラー発生時に-2を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fcmp()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Fadd、Fadd32(3fml)Fchg、Fchg32(3fml)

 


Fconcat、Fconcat32(3fml)

名前

Fconcat()Fconcat32() - ソース・バッファと宛先バッファの連結

形式

#include <stdio.h> 
#include "fml.h"
int
Fconcat(FBFR *dest, FBFR *src)
#include "fml32.h"
int
Fconcat32(FBFR32 *dest, FBFR32 *src)

説明

Fconcat()は、ソース・バッファのフィールドを、すでにある宛先バッファにあるフィールドに追加します。destは、宛先バッファのポインタです。srcは、元のフィールド化バッファを指すポインタです。宛先バッファにあるオカレンスは維持され、ソース・バッファの新しいオカレンスは、フィールドに対して比較的大きなオカレンス番号で追加されます。

Fconcat32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fconcat()またはFconcat32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fconcat()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファのどちらかがフィールド化バッファでないか、またはFinit()によって初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファに追加されますが、バッファには十分な領域が残っていません。

関連項目

「FML関数の紹介」Fjoin、Fjoin32(3fml)Fupdate、Fupdate32(3fml)

 


Fcpy、Fcpy32(3fml)

名前

Fcpy()Fcpy32() - ソース・バッファを宛先バッファにコピー

形式

#include <stdio.h> 
#include "fml.h"
int
Fcpy(FBFR *dest, FBFR *src)
#include "fml32.h"
int
Fcpy32(FBFR32 *dest, FBFR32 *src)

説明

Fcpy()は、フィールド化バッファの内容を別のフィールド化バッファにコピーするために使用されます。destおよびsrcは、それぞれコピー先とコピー元のフィールド化バッファに対するポインタです。Fcpy()は、コピー先がフィールド化バッファであると想定して、コピー元バッファのデータを収容できる十分な大きさがあるかをチェックします。

FLD_PTR型の値の場合、Fcpy32()はバッファのポインタをコピーします。アプリケーション・プログラマは、対応するポインタがコピーされたときのバッファの再割り当ておよび解放を管理する必要があります。

Fcpy32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fcpy()またはFcpy32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fcpy()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファのどちらかがフィールド化バッファでないか、またはFinit()によって初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
宛先バッファは、ソース・バッファを保持できる十分な大きさではありません。

関連項目

「FML関数の紹介」Fmove、Fmove32(3fml)

 


Fdel、Fdel32(3fml)

名前

Fdel()Fdel32() - バッファからフィールド・オカレンスを削除

形式

#include stdio.h> 
#include "fml.h"
int
Fdel(FBFR *fbfr, FLDID fieldid, FLDOCC oc)
#include "fml32.h"
int
Fdel32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc)

説明

Fdel()は、指定されたフィールド・オカレンスをバッファから削除します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。

フィールド化バッファに、1つのフィールドに対し複数のオカレンスがあり、最後のオカレンスでないフィールド・オカレンスが削除された場合、バッファにある高位のオカレンスは、1つずつ繰り下がります。すべてのオカレンスのオカレンス番号を同じままにするためには、Fchg()を使用してフィールド・オカレンス値をNULLに設定します。

FLD_PTR型の値の場合、Fdel32()によってFLD_PTRフィールド・オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ・バッファは、非透過的なポインタとして扱われます。

Fdel32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fdel()またはFdel32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fdel()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fadd、Fadd32(3fml)Fchg、Fchg32(3fml)Fdelall、Fdelall32(3fml)Fdelete、Fdelete32(3fml)

 


Fdelall、Fdelall32(3fml)

名前

Fdelall()Fdelall32() - バッファからすべてのフィールド・オカレンスを削除

形式

#include <stdio.h> 
#include "fml.h"
int
Fdelall(FBFR *fbfr, FLDID fieldid)
#include "fml32.h"
int
Fdelall32(FBFR32 *fbfr, FLDID32 fieldid)

説明

Fdelall()は、バッファにある指定されたフィールドのすべてのオカレンスを削除します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。フィールドのオカレンスがない場合は、エラーと見なされます。

FLD_PTR型の値の場合、Fdelall32()によってFLD_PTRフィールド・オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ・バッファは、非透過的なポインタとして扱われます。

Fdelall32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fdelall()またはFdelall32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fdelall()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールドがリクエストされましたが、指定されたフィールドは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fdel、Fdel32(3fml)Fdelete、Fdelete32(3fml)

 


Fdelete、Fdelete32(3fml)

名前

Fdelete()Fdelete32() - バッファからフィールドのリストを削除

形式

#include <stdio.h>  
#include "fml.h"
int
Fdelete(FBFR *fbfr, FLDID *fieldid)
#include "fml32.h"
int
Fdelete32(FBFR32 *fbfr, FLDID32 *fieldid)

説明

Fdelete()は、フィールド識別子の配列(fieldid[])にリストされているすべてのフィールドのすべてのオカレンスを削除します。配列の最後のエントリはBADFLDIDであることが必要です。fbfrはフィールド化バッファを指すポインタです。fieldidはフィールド識別子の配列を指すポインタです。これは、Fdelall()の呼出しを繰り返すよりも、バッファから複数のフィールドを削除する効率のよい方法です。更新はその場で実行されます。フィールド識別子の配列は、Fdelete()によって再配列されます(ソートされていない場合はソートされ、番号順になります)。

FLD_PTR型の値の場合、Fdelete32()によってFLD_PTRフィールド・オカレンスが削除されても、参照されるバッファは変更されないか、またはポインタは解放されません。データ・バッファは、非透過的なポインタとして扱われます。

Fdelete()は、削除するフィールドがフィールド化バッファにない場合も正常終了で返ります。

Fdelete32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fdelete()またはFdelete32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fdelete()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fdel、Fdel32(3fml)Fdelall、Fdelall32(3fml)

 


Fextread、Fextread32(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 ``='')

選択フラグおよびそれらの意味を次に示します。

+

フィールド化バッファにあるフィールドのオカレンス0は、指定された値に変更されます。

-

指定されたフィールドのオカレンス0は、フィールド化バッファから削除されます。タブ文字が必要です。すべてのフィールド値は、無視されます。

=

この場合、入力行の最後のフィールドは、フィールド化バッファ内のフィールド名です。そのフィールドのオカレンス0の値は、入力行の最初のフィールドで指定されたオカレンス0に割り当てられます。

#

この行はコメントとして扱われ、無視されます。

フラグが指定されない場合、値(fldval)を持ったfldnameで指定されているフィールドの新しいオカレンスが、フィールド化バッファに追加されます。後続の改行(-)は、完了済の各入力バッファの後に置く必要があります。

FLD_FML32およびFLD_VIEW32型の値の場合、Fextread32()はそれぞれ、ネストされたFML32バッファとVIEW32フィールドを生成します。この関数は、FLD_PTRフィールド・タイプを無視します。関数にタイプFLD_PTRの値が与えられても、エラーは戻されません。

Fextread32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fextread()またはFextread32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fextread()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファで追加あるいは変更されますが、バッファには、十分な領域が残っていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド番号は無効です。

[FEUNIX]

UNIXシステム・コールでエラーが発生しました
UNIXシステム・コールでエラーが発生しました。外部の整数型変数errnoは、システム・コールによるエラーを示すために設定され、外部の整数型変数Uunixerr (Uunix.hで定義されている値)は、エラーを返したシステム・コールに設定されます。

[FBADNAME]

「未知のフィールド名が指定されました。」
フィールド表にないフィールド名が指定されました。

[FSYNTAX]

形式の文法が正しくありません。
外部バッファの形式に文法エラーがありました。考えられるエラーは、不正なend-of-fileインジケータ、次の形式にない入力行(fieldidまたはname tab > value)、2つの制御文字、1000文字より大きいフィールド値、または無効な16進のエスケープ・シーケンスなどです。

[FNOTPRES]

「該当するフィールドがありません。」
削除するフィールドが、フィールド化バッファにありません。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

[FEINVAL]

「無効なパラメータ」
iopの値がNULLです。

移植性

この関数は、Windows用のOracle Tuxedo System Workstation DLLでは使用できません。

関連項目

「FML関数の紹介」Fprint、Fprint32(3fml)

 


Ffind、Ffind32(3fml)

名前

Ffind()Ffind32() - バッファにあるフィールド・オカレンスの検索

形式

#include <stdio.h>  
#include "fml.h"
char *
Ffind(FBFR *fbfr, FLDID fieldid, FLDOCC oc, FLDLEN *len)
#include "fml32.h"
char *
Ffind32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, FLDLEN32 *len)

説明

Ffind()は、バッファ内の指定されたフィールド・オカレンスの値を検索します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。フィールドがある場合、その長さは、*lenに設定され、その位置は、関数の値として返されます。lenの値がNULLの場合は、フィールドの長さは返されません。Ffind()は、フィールドの読取り専用アクセス権を取得する場合に使用できます。Ffind()によって返された値を使用してバッファを変更することはできません。

一般に、FLD_LONGFLD_FLOATFLD_DOUBLEFLD_PTRFLD_FML32、およびFLD_VIEW32型の場合、それぞれの値がバッファ内で適切に配置されているとは限らないため、格納されているままの型を直接使用するのには向いていません。これらの値は、最初に、適宜に配列されたメモリー位置に複写される必要があります。変換関数CFfind()を使用してこのようなフィールドにアクセスする場合、検索される変換済の値は正しく配列されることが保証されます。バッファの変更は、関数Fadd()またはFchg()によってのみ行われる必要があります。Ffind()およびFfindlast()が戻す値は、バッファが変更されないかぎり有効です。

Ffind32()は、FLD_FML32およびFLD_VIEW32フィールド・タイプで提供される、埋め込み型のバッファ内の指定フィールドのオカレンスをチェックしません。

FLD_MBSTRING型の指定されたフィールド識別子の場合、Ffind32()の戻り値はFmbunpack(32)関数を使用して解析できます。

Ffind32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Ffind()またはFfind32()を呼び出すことができます。

戻り値

上記の「形式」の項では、Ffind()の戻り値のデータ型は、charのポインタ(Cのchar *)として記述されています。実際、戻されるポインタは、格納済のフィールドの型と同じ型を持つオブジェクトを指しています。

この関数は、エラー時にはNULLのポインタを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ffind()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Ffindlast、Ffindlast32(3fml)Ffindocc、Ffindocc32(3fml)Ffinds、Ffinds32(3fml)

 


Ffindlast、Ffindlast32(3fml)

名前

Ffindlast()Ffindlast32() - バッファにあるフィールドの最後のオカレンスの値を検索

形式

#include <stdio.h>  
#include "fml.h"
char *
Ffindlast(FBFR *fbfr, FLDID fieldid, FLDOCC *oc, FLDLEN *len) #include "fml32.h"
char *
Ffindlast32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 *oc, FLDLEN32 *len)

説明

Ffindlast()は、バッファ内でフィールドの最後のオカレンスを検索します。fbfrはフィールド化バッファを指すポインタです。fieldidはフィールド識別子です。ocはフィールドのオカレンス番号を受け取るために使用される整数型を指すポインタです。lenは値の長さです。バッファにフィールドのオカレンスがない場合は、NULLが返されます。通常、Ffindlast()の処理はFfind()に似ています。Ffindlastではユーザーがフィールド・オカレンスを指定しないのが大きな違いです。その代わり、フィールドの最後のオカレンスの値およびオカレンス番号の両方が返されます。最後のフィールドのオカレンス番号を返すために、Ffindlast()のオカレンス引数ocは、整数型のポインタであり、Ffind()の場合のように整数ではありません。ocがNULLで指定されている場合、最後のオカレンスのオカレンス番号は返されません。lenの値がNULLの場合は、フィールドの長さは返されません。

一般に、FLD_LONGFLD_FLOATFLD_DOUBLEFLD_PTRFLD_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]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールドがリクエストされましたが、指定されたフィールドは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」CFfind、CFfind32(3fml)Fadd、Fadd32(3fml)Fchg、Fchg32(3fml)Ffind、Ffind32(3fml)Ffindocc、Ffindocc32(3fml)Ffinds、Ffinds32(3fml)

 


Ffindocc、Ffindocc32(3fml)

名前

Ffindocc()Ffindocc32() - フィールド値のオカレンスの検索

形式

#include <stdio.h>  
#include "fml.h"
FLDOCC
Ffindocc(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len) #include "fml32.h"
FLDOCC32
Ffindocc32(FBFR32 *fbfr, FLDID32 fieldid, char *value, FLDLEN32 len)

説明

Ffindocc()は、バッファ内の指定したフィールドのオカレンスを調べ、ユーザー指定のフィールド値と一致する最初のフィールド・オカレンスのオカレンス番号を返します。fbfrはフィールド化バッファを指すポインタです。fieldidはフィールド識別子です。検索される値は、valueパラメータが指す場所に含まれています。lenは値の長さです(FLD_CARRAY型またはFLD_MBSTRING型の場合)。fieldidのフィールド型がFLD_STRINGで、lenが0でない場合、パターン照合は文字列に対して実行されます。サポートされるパターン照合は、regcmp(3)で説明されるパターンと同じです(UNIXのリファレンス・マニュアルを参照)。さらに、正規表現のalternationがサポートされます(たとえば、''A|B''は''A''または''B''と一致します)。パターンはフィールド値全体と一致する必要があります(つまり、パターン''value''は暗黙に''^value$''として扱われます)。MS-DOSおよびOS/2環境で使用するために提供されるFfindocc()では、FLD_STRINGフィールドのregcmp()パターン照合はサポートされません。strcmp()が使用されます(UNIXのリファレンス・マニュアルを参照)。

上記の「形式」の項では、Ffindocc()の引数valueのデータ型は、charのポインタ(Cのchar *)として記述されています。技術的には、これは、Ffindocc()に渡すことのできる値のある特定の値のみを記述しています。実際、value引数の型は、検索されるフィールドのフィールド化バッファ表現の型と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG型でバッファに格納されている場合は、valueの型は、long型のポインタ(Cのlong *)である必要があります。同様に、FLD_SHORT型でバッファに格納される場合、valueは、short型のポインタ(Cのshort *)である必要があります。大事な点は、Ffindocc()は、valueで指されるオブジェクトが、格納済の検索されるフィールドの型と同じ型を持っていることを想定していることです。

FLD_PTR型の値の場合、Ffindocc32()は指定されたポインタ値と一致するフィールドのオカレンスを検索します。FLD_FML32型の値の場合、すべてのフィールド・オカレンスおよび値が等しければ、2つのフィールドは等しいとみなされます。FLD_VIEW32型の値の場合、VIEW名が同じとき、およびすべての構造体メンバーのオカレンスおよび値が等しいとき、2つのフィールドは等しいとみなされます。

FLD_MBSTRING型の値の場合、値はFmbpack32()関数のパッキングされた出力引数であり、引数lenFmbpack32()の出力引数sizeの値の長さです。

Ffindocc32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Ffindocc()またはFfindocc32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ffindocc()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド値がリクエストされましたが、指定されたフィールドおよび値は、フィールド化バッファにありませんでした。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが、無効でした(たとえば、NULLのvalueパラメータをFfindocc()に渡した、あるいは無効な文字列パターンを指定した)。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Ffind、Ffind32(3fml)Ffindlast、Ffindlast32(3fml)Ffinds、Ffinds32(3fml)、UNIXシステムのリファレンス・マニュアルのregcmp(3)

 


Ffinds、Ffinds32(3fml)

名前

Ffinds()Ffinds32() - 文字列表現を指すポインタを返す

形式

#include <stdio.h>  
#include "fml.h"
char *
Ffinds(FBFR *fbfr, FLDID fieldid, FLDOCC oc)
#include "fml32.h"
char *
Ffinds32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc)

説明

Ffinds()は、ユーザー型FLD_STRINGに変換する処理のために提供されます。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。指定されたフィールド・オカレンスは、検索されると、バッファにあるその型からNULL終了の文字列に変換されます。基本的に、このマクロは変換関数CFfind()を呼び出します。CFfind()は、utype (FLD_STRING)およびulen (値が0)を提供します。Ffinds()が返すポインタが妥当である期間は、CFfind()で記述されているものと同じです。

Ffinds32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Ffinds()またはFfinds32()を呼び出すことができます。

戻り値

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ffinds()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド型は無効です。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」CFfind、CFfind32(3fml)Ffind、Ffind32(3fml)

 


Ffloatev、Ffloatev32、Fvfloatev、Fvfloatev32(3fml)

名前

Ffloatev()Ffloatev32()Fvfloatev()Fvfloatev32() - 式の値をdouble型で返す

形式

#include <stdio.h> 
#include "fml.h"
double
Ffloatev(FBFR *fbfr, char *tree)
double
Fvfloatev(char *cstruct, char *tree, char *viewname)
#include "fml32.h"
double
Ffloatev32(FBFR32 *fbfr, char *tree)
double
Fvfloatev32(char *cstruct, char *tree, char *viewname)

説明

Ffloatev()は、フィールド化バッファのポインタ(fbfr)およびFboolco()が返す評価ツリーのポインタ(tree)を利用して、算術式の値(ツリーによって表される)をdouble型で返します。この関数は、フィールド化バッファあるいは評価ツリーのいずれも変更しません。

Ffloatev32()は32ビットFMLで使用されます。

Fvfloatev()およびFvfloatev32()は、同じVIEW機能を提供します。viewnameパラメータは、フィールド・オフセットを取り出すVIEWを示し、Fvboolco()またはFvboolco32()で指定されたVIEWと同じにする必要があります。

Workstationプラットフォームでは、これらの関数はサポートされていません。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、ここで記述する関数、Ffloatev()Ffloatev32()Fvfloatev()、またはFvfloatev32()を呼び出すことができます。

戻り値

正常終了時には、Ffloatev()は、表現の値をdoubleで返します。

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ffloatev()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

[FSYNTAX]

「ブール式の文法が正しくありません。」
論理表現のtreeに文法エラーがありました。

[FBADVIEW]

「ビューが見つからないか、取得できません」
VIEWDIRまたはVIEWFILESで指定したファイルにビュー名が見つかりません。

[FVFOPEN]

「VIEWファイルが見つからないか、オープンできません」
ビュー名の検索中に、VIEWDIRまたはVIEWFILESで指定したファイルの1つをプログラムが見つけられませんでした。

[EUNIX]

「オペレーティング・システム・エラー」
viewname検索中にプログラムはVIEWDIRまたはVIEWFILESで指定したファイルの1つを読込み用に開けませんでした。

[FVFSYNTAX]

「VIEWファイルが正しくありません」
ビュー名の検索中、VIEWDIRまたはVIEWFILESで指定したファイルの1つが壊れていたか、VIEWファイルではありませんでした。

[FMALLOC]

「mallocが失敗しました」
ビュー名の検索中、malloc()がビュー情報を格納するための領域の割当てに失敗しました。

関連項目

「FML関数の紹介」Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)

 


Ffprint、Ffprint32(3fml)

名前

Ffprint()Ffprint32() - フィールド化バッファを指定されたストリームに出力

形式

#include <stdio.h> 
#include "fml.h"
int
Ffprint(FBFR *fbfr, FILE *iop)
#include "fml32.h"
int
Ffprint32(FBFR32 *fbfr, FILE *iop)

説明

Ffprint()は、テキストが指定された出力ストリームに出力されることを除いて、Fprint()に類似しています。fbfrは、フィールド化バッファを指すポインタです。iopは、出力ストリームを指すFILE型のポインタです。

バッファの各フィールドについて、フィールド名とフィールド値がタブで区切って出力されます。Fname()はフィールド名を決定するために使用されます。フィールド名が決定できない場合、フィールド識別子が出力されます。文字列または文字配列のフィールド値内の表示不能な文字は、バックスラッシュとその後に続く2文字の16進値で表現されます。バッファの出力が完了すると改行が出力されます。

FLD_PTR型の値の場合、Ffprint32()はフィールド名またはフィールド識別子、およびポインタ値を16進数で出力します。この関数はポインタ情報を出力しますが、Fextread32()関数はFLD_PTRフィールド・タイプを無視します。

FLD_FML32型の値の場合、Ffprint32()は各ネスト・レベルに先行タブを追加することにより、再帰的にFML32バッファを出力します。FLD_VIEW32型の値の場合、Ffprint32()はVIEW32フィールド名、および構造体メンバーの名前と値のペアを出力します。

Ffprint32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Ffprint()またはFfprint32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ffprint()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

移植性

この関数は、Windows用のOracle Tuxedo System Workstation DLLでは使用できません。

関連項目

「FML関数の紹介」Fprint、Fprint32(3fml)

 


Ffree、Ffree32(3fml)

名前

Ffree()Ffree32() - フィールド化バッファ用に割り当てられた領域の解放

形式

#include <stdio.h> 
#include "fml.h"
int
Ffree(FBFR *fbfr)
#include "fml32.h"
int
Ffree32(FBFR32 *fbfr)

説明

Ffree()は、その引数であるフィールド化バッファ用に割り当てられた領域を取り戻します。fbfrは、フィールド化バッファを指すポインタです。フィールド化バッファは無効化されます。つまり、フィールド化を解除して解放します。Ffree32()は、FLD_PTRフィールドのポインタによって参照されるメモリー領域を解放しません。

free()よりFfree()の使用をお薦めします(UNIXシステムのリファレンス・マニュアルを参照)。free()ではフィールド化バッファを無効にできませんが、Ffree()を使用するとフィールド化バッファを無効にできます。フィールド化バッファの無効化は重要です。malloc() (UNIXシステムのリファレンス・マニュアルを参照)は、解放されたメモリーをクリアせずに再利用するためです。free()を使用すると、malloc()が、有効なフィルード化バッファのように見えるがそうではないメモリーを返す可能性があります。

Ffree32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Ffree()またはFfree32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ffree()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Falloc、Falloc32(3fml)Frealloc、Frealloc32(3fml)

UNIXシステムのリファレンス・マニュアルのfree(3)、malloc(3)

 


Fget、Fget32(3fml)

名前

Fget()Fget32() - フィールド・オカレンスのコピーおよび長さの取得

形式

#include <stdio.h> 
#include "fml.h"
int
Fget(FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *loc, FLDLEN
*maxlen)
#include "fml32.h"
int
Fget32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, char *loc,
FLDLEN32 *maxlen)

説明

Fget()は、値が変更されたときに、フィールド化バッファのフィールドを検索するために使用されます。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。呼出し側は、プライベート・データ領域を指すポインタ(loc)、データ領域の長さ(*maxlen)をFget()に渡します。フィールドの長さは、*maxlenに返されます。関数が呼び出された時に、maxlenがNULLの場合は、そのフィールドの値(loc)のデータ領域がフィールド値を入れるのに十分大きいために、値が返されないと想定されます。locがNULLの場合は、値は検索されません。このように、この関数を呼び出すことにより、フィールドが存在するかどうかを確かめることができます。

上記の「形式」の項では、Fget()の引数valueのデータ型は、charのポインタ(Cのchar *)として記述されています。技術的には、これは、Fget()に渡すことのできる値のある特定の値のみを記述しています。実際、value引数の型は、検索されるフィールドのフィールド化バッファ表現の型と同じ型のオブジェクトのポインタである必要があります。たとえば、フィールドが、FLD_LONG型でバッファに格納されている場合は、valueの型は、long型のポインタ(Cのlong *)である必要があります。同様に、FLD_SHORT型でバッファに格納される場合、valueは、short型のポインタ(Cのshort *)である必要があります。大事なことは、Fget()はvalueで指されるオブジェクトが、検索される格納済のフィールドの型と同じ型を持っていることを想定していることです。

FLD_MBSTRING型の指定されたフィールド識別子の場合、Fget32()の戻り値はFmbunpack(32)関数を使用して解析できます。

Fget32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fget()またはFget32()を呼び出すことができます。

戻り値

Fget32()FLD_VIEW32フィールド・タイプで使用されると、FVIEWFLD構造体を指すポインタが戻されます。この関数は、エラー発生時に-1を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fget()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「空き領域なし」
maxlenに指定されているデータ領域の大きさは、フィールド値を保持するのに十分な大きさではありません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」CFget、CFget32(3fml)Fgetalloc、Fgetalloc32(3fml)Fgetlast、Fgetlast32(3fml)Fgets、Fgets32(3fml)Fgetsa、Fgetsa32(3fml)

 


Fgetalloc、Fgetalloc32(3fml)

名前

Fgetalloc()Fgetalloc32() - 領域の割り当て、およびフィールド・オカレンスのコピーの取得

形式

#include <stdio.h> 
#include "fml.h"
char *
Fgetalloc(FBFR *fbfr, FLDID fieldid, FLDOCC oc, FLDLEN *extralen)
#include "fml32.h"
char *
Fgetalloc32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, FLDLEN32
*extralen)

説明

Fget()同様、Fgetalloc()は、バッファ・フィールドのコピーの検索および作成を行いますが、malloc() (UNIXシステムのプログラマ・リファレンス・マニュアル)を介してフィールド用の領域を取得します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。Fgetalloc()の最後の引数extralenは、フィールド値の大きさに加えて取得される予備の領域の大きさを提供します。それは、取得される値が、フィールド化バッファに再挿入される前に拡張される場合に使用されます。extralenがNULLの場合、割り当てる追加領域はなく、実際の長さは返されません。Fgetalloc()で取得した領域をfree()で解放する処理は、呼出し側プログラムの役割です。バッファは、あらゆるフィールドの型に対して正しく並べられます。

FLD_MBSTRING型の指定されたフィールド識別子の場合、Fgetalloc32()の戻り値はFmbunpack(32)関数を使用して解析できます。

Fgetalloc32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fgetalloc()またはFgetalloc32()を呼び出すことができます。

戻り値

上記の「形式」の項では、Fgetalloc()の戻り値のデータ型は、charのポインタ(Cのchar *)として記述されています。実際、戻されるポインタは、格納済のフィールドの型と同じ型を持つオブジェクトを指しています。Fgetalloc32()FLD_VIEW32フィールド・タイプで使用されると、FVIEWFLD構造体を指すポインタが戻されます。この関数は、エラー発生時にNULLを戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fgetalloc()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
malloc()を使用しての領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」CFget、CFget32(3fml)Fget、Fget32(3fml)Fgetlast、Fgetlast32(3fml)Fgets、Fgets32(3fml)Fgetsa、Fgetsa32(3fml)

UNIXシステムのリファレンス・マニュアルのfree(3)、malloc(3)

 


Fgetlast、Fgetlast32(3fml)

名前

Fgetlast()Fgetlast32() - 最後のオカレンスのコピーの取得

形式

#include <stdio.h> 
#include "fml.h"
int
Fgetlast(FBFR *fbfr, FLDID fieldid, FLDOCC *oc, char *value, FLDLEN
*maxlen)
#include "fml32.h"
int
Fgetlast32(FBFR32 *fbfr, FLDID32 fieldid, 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)関数を使用して解析できます。

Fgetlast32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fgetlast()またはFgetlast32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fgetlast()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「空き領域なし」
maxlenに指定されているデータ領域の大きさは、フィールド値を保持するのに十分な大きさではありません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fget、Fget32(3fml)Fgetalloc、Fgetalloc32(3fml)Fgets、Fgets32(3fml)Fgetsa、Fgetsa32(3fml)

 


Fgets、Fgets32(3fml)

名前

Fgets()Fgets32() - 値を文字列に変換

形式

#include <stdio.h> 
#include "fml.h"
int
Fgets(FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *buf)
#include "fml32.h"
int
Fgets32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, char *buf)

説明

Fgets()は、フィールド化バッファからフィールド・オカレンスを検索し、値をユーザー型FLD_STRINGに変換します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。Fgets()の呼出し側は、プライベート・バッファを指すポインタ(buf)を提供します。プライベート・バッファは、検索されるフィールド値のために使用されます。bufは、値を保持するために十分に大きいと想定されています。基本的に、Fgets()は、想定されているutype (FLD_STRING)およびulen (値が0)を利用してCFget()を呼び出します。

Fgets32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fgets()またはFgets32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fgets()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
malloc()を使用しての領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」CFget、CFget32(3fml)Fget、Fget32(3fml)Fgetalloc、Fgetalloc32(3fml)Fgetlast、Fgetlast32(3fml)Fgetsa、Fgetsa32(3fml)

 


Fgetsa、Fgetsa32(3fml)

名前

Fgetsa()Fgetsa32() - malloc()で領域を割り当て、変換された値を取得する

形式

#include <stdio.h> 
#include "fml.h"
char *
Fgetsa(FBFR *fbfr, FLDID fieldid, FLDOCC oc, FLDLEN *extra)
#include "fml32.h"
char *
Fgetsa32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc, FLDLEN32
*extra)

説明

Fgetsa()CFgetalloc()を呼び出すマクロです。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。この関数はmalloc() (UNIXシステムのプログラマ・リファレンス・マニュアル)を使用して、文字列に変換して取得したフィールド値のための領域を割り当てます。extraがNULLでない場合、extraには、フィールド値の大きさに加えて割り当てる余分な領域を指定します。全体の大きさは、extraに返ります。

malloc()で割り当てた領域を(UNIXシステムのリファレンス・マニュアルの) free()を使用して解放するのは、ユーザーの責任です。

Fgetsa32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fgetsa()またはFgetsa32()を呼び出すことができます。

戻り値

正常終了の場合、割り当てられたバッファを指すポインタを返します。

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fgetsa()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」CFget、CFget32(3fml)Fget、Fget32(3fml)Fgetlast、Fgetlast32(3fml)Fgets、Fgets32(3fml)

UNIXシステムのリファレンス・マニュアルのfree(3)、malloc(3)

 


Fidnm_unload、Fidnm_unload32(3fml)

名前

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()を呼び出すことができます。

戻り値

この関数は、void宣言のため何も返しません。

関連項目

「FML関数の紹介」Fname、Fname32(3fml)Fnmid_unload、Fnmid_unload32(3fml)

 


Fidxused、Fidxused32(3fml)

名前

Fidxused()Fidxused32() - 使用されている領域の大きさを返す

形式

#include <stdio.h> 
#include "fml.h"
long
Fidxused(FBFR *fbfr)
#include "fml32.h"
long
Fidxused32(FBFR32 *fbfr)

説明

Fidxused()は、バッファの索引で使用している現在の領域の大きさを示します。fbfrは、フィールド化バッファを指すポインタです。

Fidxused32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fidxused()またはFidxused32()を呼び出すことができます。

戻り値

正常終了の場合、索引で使用しているバッファ内の領域の大きさを戻します。この関数は、エラー発生時に-1を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fidxused()は、異常終了してFerrorを次のように設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Findex、Findex32(3fml)Frstrindex、Frstrindex32(3fml)Funused、Funused32(3fml)Fused、Fused32(3fml)

 


Fielded、Fielded32(3fml)

名前

Fielded()Fielded32() - バッファがフィールド化されている場合は、trueを返す

形式

#include stdio.h> 
#include "fml.h"
int
Fielded(FBFR *fbfr)
#include "fml32.h"
int
Fielded32(FBFR32 *fbfr)

説明

Fielded()は、指定されたバッファがフィールド化されているかを調べるのに使用されます。fbfrは、フィールド化バッファを指すポインタです。

Fielded32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fielded()またはFielded32()を呼び出すことができます。

戻り値

Fielded()は、バッファがフィールド化されている場合にはtrueを戻します。また、バッファがフィールド化されていない場合は、falseを戻しますが、この場合はFerrorを設定しません。

関連項目

「FML関数の紹介」Finit、Finit32(3fml)Fneeded、Fneeded32(3fml)Fsizeof、Fsizeof32(3fml)

 


Findex、Findex32(3fml)

名前

Findex()Findex32() - フィールド化バッファの索引を行う

形式

#include <stdio.h> 
#include "fml.h"
int
Findex(FBFR *fbfr, FLDOCC intvl)
#include "fml32.h"
int
Findex32(FBFR32 *fbfr, FLDOCC32 intvl)

説明

Findex()は、フィールド化バッファのインデックスを行うために明示的に呼び出されます。fbfrは、フィールド化バッファを指すポインタです。2番目のパラメータintvlには、インデックスの間隔を指定します。つまり、インデックスするフィールドを理想的に分離します。この引数の値が0の場合、バッファの現在のインデックス値が使用されます。現在の値そのものが0の場合、値FSTDXINTVL (デフォルトは16)が使用されます。インデックス値に1を使用すると、必ず、バッファにあるすべてのフィールドがインデックスされます。インデックス間隔の大きさとバッファのインデックスに割り当てられる領域の大きさは、反比例します。したがって、間隔が小さいとより多くのフィールドがインデックスされ、より多くの領域が使用されます。

Findex32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Findex()またはFindex32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Findex()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
エントリは、索引に追加されますが、バッファには十分な領域が残っていません。

関連項目

「FML関数の紹介」Fidxused、Fidxused32(3fml)Frstrindex、Frstrindex32(3fml)Funindex、Funindex32(3fml)

 


Finit、Finit32(3fml)

名前

Finit()Finit32() - フィールド化バッファを初期化

形式

#include <stdio.h> 
#include "fml.h"
int
Finit(FBFR *fbfr, FLDLEN buflen)
#include "fml32.h"
int
Finit32(FBFR32 *fbfr, FLDLEN32 buflen)

説明

Finit()は、フィールド化バッファを静的に初期化するために呼び出されます。fbfrは、フィールド化バッファを指すポインタです。buflenは、バッファの長さです。この関数はバッファ・ポインタとバッファの長さを取り、フィールドのないバッファのために内部構造体を設定します。前に使用されたバッファを再初期化するにはFinit()も使用できます。

Finit32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Finit()またはFinit32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Finit()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファのポインタがNULLです。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド化バッファ用に指定されたバッファの大きさが小さすぎます。

フィールドを持たないようバッファを再初期化する正しい方法は、Finit(fbfr, (FLDLEN)Fsizeof(fbfr));です。

関連項目

「FML関数の紹介」Falloc、Falloc32(3fml)Fneeded、Fneeded32(3fml)Frealloc、Frealloc32(3fml)

 


Fjoin、Fjoin32(3fml)

名前

Fjoin()Fjoin32() - ソース・バッファを宛先バッファに組み込む

形式

#include stdio.h> 
#include "fml.h"
int
Fjoin(FBFR *dest, FBFR *src)
#include "fml32.h"
int
Fjoin32(FBFR32 *dest, FBFR32 *src)

説明

Fjoin()は、2つのバッファをフィールド識別子/オカレンスの整合に基づいて結合するために使用されます。destは、宛先バッファを指すポインタです。srcは、元のフィールド化バッファを指すポインタです。フィールドID/オカレンスと一致するフィールドの場合は、フィールド値はソース・バッファの値を使って宛先バッファで更新されます。ソース・バッファ内に、対応するfieldidとオカレンスの組合せがない場合、宛先バッファのフィールドは削除されます。バッファを組み込むことによりFLD_PTRフィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。

新しい値が古い値より大きい場合は、この関数は領域の不足のために失敗することがあります。その場合、宛先バッファは変更されます。ただし、その場合は、Frealloc()を使用し、Fjoin()関数を繰返し呼び出して、宛先バッファを再割り当てできます。宛先バッファが部分的に更新された場合でさえ、Fjoin()関数を繰り返すことで正しい結果が取得されます。

Fjoin32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fjoin()またはFjoin32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fjoin()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファのどちらかがフィールド化バッファでないか、またはFinit()によって初期化されていません。

[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(3fml)

名前

Fldid()Fldid32() - フィールド名をフィールド識別子にマップする

形式

#include <stdio.h> 
#include "fml.h"

FLDID
Fldid(char *name)

#include "fml32.h"

FLDID32
Fldid32(char *name)

説明

Fldid()は、フィールド名からフィールド識別子を導くランタイムな変換機能を提供し、そのフィールドのnameパラメータに対応したFLDIDを戻します。最初の呼出しでは、フィールド表用の領域が動的に割り当てられ、表がロードされます。Fldid()でロードしたフィールド表が占有しているデータ領域を回復するには、Fnmid_unload()関数を呼び出してファイルをアンロードする必要があります。

Fldid32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fldid()またはFldid32()を呼び出すことができます。

戻り値

この関数は、エラー時にはBADFLDIDを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fldid()は異常終了し、Ferrorを次の値に設定します。

[FBADNAME]

「未知のフィールド名が指定されました。」
フィールド表にないフィールド名が指定されました。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」Fldno、Fldno32(3fml)Fname、Fname32(3fml)Fnmid_unload、Fnmid_unload32(3fml)

UNIXシステムのリファレンス・マニュアルのmalloc(3)

 


Fldno、Fldno32(3fml)

名前

Fldno()Fldno32() - フィールド識別子をフィールド番号にマップする

#include <stdio.h> 
#include "fml.h"

int
Fldno(FLDID fieldid)

#include "fml32.h"

long
Fldno32(FLDID32 fieldid)

説明

Fldno()は、パラメータとしてフィールド識別子(fieldid)を受け取り、識別子にあるフィールド番号を返します。

Fldno32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fldno()またはFldno32()を呼び出すことができます。

戻り値

この関数は、フィールド番号を返します。エラーは返しません。

関連項目

「FML関数の紹介」Fldid、Fldid32(3fml)Fldtype、Fldtype32(3fml)

 


Fldtype、Fldtype32(3fml)

名前

Fldtype()Fldtype32() - フィールド識別子をフィールド・タイプにマップする

形式

#include <stdio.h> 
#include "fml.h"

int
Fldtype(FLDID fieldid)

#include "fml32.h"

int
Fldtype32(FLDID32 fieldid)

説明

Fldtype()は、フィールド識別子(fieldid)を受け取り、fml.hで定義されているように、識別子(整数)にあるフィールド・タイプを返します。

Fldtype32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fldtype()またはFldtype32()を呼び出すことができます。

戻り値

この関数は、フィールド・タイプを返します。

関連項目

「FML関数の紹介」Fldid、Fldid32(3fml)Fldno、Fldno32(3fml)

 


Flen、Flen32(3fml)

名前

Flen()Flen32() - バッファ中のフィールド・オカレンスのlenを返します。

形式

#include <stdio.h> 
#include "fml.h"

int
Flen(FBFR *fbfr, FLDID fieldid, FLDOCC oc)

#include "fml32.h"

long
Flen32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc)

説明

Flen()は、バッファ中の指定したフィールド・オカレンスの値を見つけ出し、そのフィールド長を返します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。

FLD_PTR型の値の場合、Flen32()sizeof(char*)に基づくポインタ・フィールドの固定長を戻します。FLD_FML32型の値の場合、Flen32()はネストされたバッファの長さに対するFused32()の値を戻します。FLD_VIEW32型の値の場合、Flen32()はVIEWデータの長さとVIEW名の長さを戻します。

FLD_MBSTRING型の値の場合、Flen32()Fmbpack32()で作成され、パッキングされた出力の長さを返します。

Flen32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Flen()またはFlen32()を呼び出すことができます。

戻り値

Flen()は、正しく終了するとフィールド長を返します。

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件が発生すると、Flen()は異常終了し、Ferrorを次のように設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOTPRES]

「該当するフィールドがありません。」
フィールド・オカレンスがリクエストされましたが、指定されたフィールドとオカレンスの両方、あるいはどちらかは、フィールド化バッファにありませんでした。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fnum、Fnum32(3fml)Fpres、Fpres32(3fml)

 


Fmbpack32(3fml)

名前

Fmbpack32() - エンコーディング名およびマルチバイト・データ情報を準備する

形式

#include "fml32.h"
int
Fmbpack32 (char *enc,void *ind,FLDLEN32 indlen,void
*packed,FLDLEN32 *size,long flags)

説明

Fmbpack32()は、FML32型付きバッファに入力されたFLD_MBSTRINGフィールドのエンコーディング名およびマルチバイト・データ情報を準備します。Fmbpack32()は、FLD_MBSTRINGフィールドがFML32 APIでFML32バッファに追加される前に使用します。

encは、NULLでない場合、コード・セットのマルチバイト・データ(ind)に対するコード・セットのエンコーディング名を保持するASCII文字列(NULLで終了)です。encがNULL、引数flagsが0の場合、出力packedに含められるエンコーディング名は、プロセスTPMBENC環境変数から取得されます。引数flagsFBUFENCの場合、encは無視されます。

indは、コード・セットのマルチバイト・データです。

indlenは、indのバイト数です。

packedは、Fmbpack32()の出力を指すポインタです。これは、FML32バッファにFLD_MBSTRINGフィールドを含めるFML32 APIの入力値として使用されます。パック領域は、FLDLEN32(TM32U)バウンダリに配置する必要があります。

入力でのsizeは、packedが指すメモリー・サイズです。サイズがFmbpack32()の結果の処理には不十分な場合、FNOSPACEが戻され、sizepackedのバイト数にリセットされます。Fmbpack32()が正常に実行された後、sizeは実際に使用されたバイト数にリセットされます。

flagsは、0またはFBUFENCです。flagsFBUFENCに設定すると、Fmbpack32()は引数encを無視し、FBUFENCpackedの入力データと共に含めます。エンコーディング名を指定しない場合、出力packedは、FML32 APIによって強制的にFLD_MBSTRINGフィールドでエンコーディング名をFML32バッファから取得するよう処理します。したがって、FBUFENCを使用する場合、FML32バッファのエンコーディング名を設定するために、アプリケーション開発者はtpsetmbenc()も使用する必要があります。

戻り値

Fmbpack32()は、正しく終了すると正の値を戻します。Fmbpack32()は、エラー発生時に-1を戻し、Ferror32を設定してエラー条件を示します。

エラー

次の条件の場合、Fmbpack32()は異常終了し、Ferror32を次の値に設定します。

[FEINVAL]

indpacked、またはsizeがNULLです。encまたはindlenが無効です。

[FNOSPACE]

packedのサイズが、Fmbpack32()の結果を処理するには不十分です。

関連項目

Fmbunpack32(3fml)tpconvfmb32(3fml)tpsetmbenc(3c)tuxgetmbenc(3c)tuxsetmbenc(3c)

 


Fmbunpack32(3fml)

名前

Fmbunpack32() - エンコーディング名およびマルチバイト・データ情報を抽出する

形式

#include "fml32.h"
int
Fmbunpack32 (void *packed,FLDLEN32 ilen,char *enc,void
*outd,FLDLEN32 *olen,long flags)

説明

Fmbunpack32()は、FML32型付きバッファ内のFLD_MBSTRINGフィールドからエンコーディング名およびマルチバイト・データ情報を抽出します。Fmbunpack32()は、FLD_MBSTRINGフィールドがFML32 API (Ffind32()Fget32()、など)でFML32バッファから抽出された後に使用します。

packedは、FML32 APIで出力されたFLD_MBSTRINGフィールドのデータを指すポインタです。

ilenは、packedのバイト数です。

encは、FLD_MBSTRINGフィールドのコード・セットのエンコーディング名が、パッキングされた情報(packed)の一部である場合に、エンコーディング名を保持するpacked内のASCII文字列(NULLで終了)です。FBUFENCフラグを設定してFmbpack32()FLD_MBSTRINGフィールドを作成した場合、encはNULLに設定します。後者の場合、アプリケーション開発者は、FML32バッファでtpgetmbenc()を使用して、FLD_MBSTRINGフィールドのエンコーディング名を取得する必要があります。

outdには、Fmbunpack32()の正常終了時にpackedから抽出されるマルチバイト・データが入ります。

入力でのolenは、outdが指すメモリー・サイズです。サイズがFmbunpack32()の結果の処理には不十分な場合、FNOSPACEが戻され、olenoutdのバイト数にリセットされます。Fmbunpack32()が正常に実行された後、olenは実際に使用されたバイト数にリセットされます。

flagsは現在使用されていないので、0に設定します。

戻り値

Fmbunpack32()は、正しく終了すると正の値を戻します。Fmbunpack32()は、エラー発生時に-1を戻し、Ferror32を設定してエラー条件を示します。

エラー

次の条件の場合、Fmbunpack32()は異常終了し、Ferror32を次の値に設定します。

[FEINVAL]

outdolen、またはpackedがNULLです。packedまたはilenが無効です。

[FNOSPACE]

outdのサイズが、Fmbunpack32()の結果を処理するには不十分です。

関連項目

Fmbpack32(3fml)tpconvfmb32(3fml)tpgetmbenc(3c)tuxgetmbenc(3c)tuxsetmbenc(3c)

 


Fmkfldid、Fmkfldid32(3fml)

名前

Fmkfldid()Fmkfldid32() - フィールド識別子を作成

#include <stdio.h> 
#include "fml.h"

FLDID
Fmkfldid(int type, FLDID num)

#include "fml.h"

FLDID32
Fmkfldid32(int type, FLDID32 num)

説明

Fmkfldid()によって、有効な型(fml.hで定義されている)から有効なフィールド識別子を作成できます。フィールド番号を順次選択するアプリケーション・ジェネレータをコーディングする場合、あるいはフィールド識別子を再作成する場合に役立ちます。

typeは、有効なフィールド・タイプです(整数。「Fldtype、Fldtype32(3fml)」を参照)。numは、フィールド番号です(現在あるフィールドとの混同をさけるために未使用のフィールド番号でなければなりません)。

Fmkfldid32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fmkfldid()またはFmkfldid32()を呼び出すことができます。

戻り値

この関数は、エラー時にはBADFLDIDを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fmkfldid()は異常終了し、Ferrorを次の値に設定します。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド番号は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは、無効です(fml.hで定義されている)。

関連項目

「FML関数の紹介」Fldtype、Fldtype32(3fml)

 


Fmove、Fmove32(3fml)

名前

Fmove()Fmove32() - フィールド化バッファを宛先バッファに移動

形式

#include <stdio.h> 
#include "fml.h"

int
Fmove(char *dest, FBFR *src)

#include "fml32.h"

int
Fmove32(char *dest, FBFR32 *src)

説明

Fmove()は、フィールド化バッファから任意の型のバッファに複写するときに使用されます。destは、宛先バッファを指すポインタです。srcは、元のフィールド化バッファを指すポインタです。

Fmove()Fcpy()の違いは、Fcpy()は宛先がフィールド化バッファであることを想定し、ソース・バッファのデータを収容できる十分なサイズがあることを確認できることです。Fmove()ではそのようなチェックは行われません。Fsizeof()のバイト数のデータを、ソースのフィールド化バッファからターゲットのバッファに移動するだけです。宛先バッファは、shortバウンダリで並んでいる必要があります。

FLD_PTR型の値の場合、Fmove32()はバッファ・ポインタを渡します。アプリケーション・プログラマは、対応するポインタの移動に応じてバッファの再割り当て、および解放を管理する必要があります。

Fmove32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fmove()またはFmove32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fmove()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファがフィールド化バッファでないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Fcpy、Fcpy32(3fml)Fsizeof、Fsizeof32(3fml)

 


Fname、Fname32(3fml)

名前

Fname()Fname32() - フィールド識別子をフィールド名にマップする

形式

#include <stdio.h> 
#include "fml.h"

char *
Fname(FLDID fieldid)

#include "fml32.h"

char *
Fname32(FLDID32 fieldid)

説明

Fname()は、フィールド識別子(fieldid)からフィールド名を導くランタイムな変換機能を提供し、引数に対応した名前を持つ文字列を指すポインタを戻します。最初の呼出しでは、フィールド表用の領域が動的に割り当てられ、表がロードされます。Fname()で作成したマッピング表によって使用されている表領域は、Fidnm_unload()関数を呼び出して回復することができます。

Fname32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fname()またはFname32()を呼び出すことができます。

戻されたポインタは内部FML表で保持されます。マルチスレッド・アプリケーションが、戻されたポインタへの参照を解除する場合は、アプリケーション・コード自体でスレッド・セーフにする必要があります。Fnmid_unload/Fidnm_unloadが発行された場合は、Fnameによって戻されたポインタへの参照を解除しないでください。

戻り値

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fname()は異常終了し、Ferrorを次の値に設定します。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
フィールド名が不明または無効な場合、フィールド番号が指定されます。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」Ffprint、Ffprint32(3fml)Fidnm_unload、Fidnm_unload32(3fml)Fldid、Fldid32(3fml)Fprint、Fprint32(3fml)

 


Fneeded、Fneeded32(3fml)

名前

Fneeded()Fneeded32() - バッファに必要な大きさの計算

形式

#include <stdio.h> 
#include "fml.h"

long
Fneeded(FLDOCC F, FLDLEN V)

#include "fml32.h"

long
Fneeded32(FLDOCC32 F, FLDLEN32 V)

説明

Fneeded()は、フィールド化バッファに割り当てなければならない領域を決める場合に使用されます。引数Fはフィールドの数、引数Vはすべてのフィールド値に必要な領域のバイト数です。

Fneeded32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fneeded()またはFneeded32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fneeded()は異常終了し、Ferrorを次の値に設定します。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、フィールド数が0より小さい、Vが0、または合計の大きさが65534より大きい)。

関連項目

「FML関数の紹介」Falloc、Falloc32(3fml)Fielded、Fielded32(3fml)Finit、Finit32(3fml)Fsizeof、Fsizeof32(3fml)Funused、Funused32(3fml)Fused、Fused32(3fml)

 


Fnext、Fnext32(3fml)

名前

Fnext()Fnext32() - 次のフィールド・オカレンスの取得

形式

#include <stdio.h> 
#include "fml.h"

int
Fnext(FBFR *fbfr, FLDID *fieldid, FLDOCC *oc, char *value, FLDLEN *len)

#include "fml32.h"

int
Fnext32(FBFR32 *fbfr, FLDID32 *fieldid, FLDOCC32 *oc, char *value, FLDLEN32 *len)

説明

Fnext()は、指定されたフィールド・オカレンスの後、バッファ内の次のフィールドを検索します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子を指すポインタです。ocは、フィールドのオカレンス番号を指すポインタです。valueは、次のフィールドの値を指すポインタです。lenは、次の値の長さです。

フィールド識別子FIRSTFLDIDを指定して、バッファの最初のフィールドを取得する必要があります(たとえば、Fnext()を最初に呼び出すとき)。valueがNULLでない場合、次のフィールド値がvalueにコピーされます。*lenを使用して、値を格納するために十分な領域がバッファに割り当てられているかどうかを判別します。値の長さが*lenに返されます。関数が呼び出されたときにlenがNULLの場合は、十分な領域があるために、新しい値の長さが返されないと想定されます。valueがNULLの場合、値は取得されず、fieldidとocのみが更新されます。*fieldidおよび*ocパラメータはぞれぞれ、次に検出されたフィールドとオカレンスに設定されます。フィールドがそれ以上見つからない場合は、0が返されます(バッファの終わり)。*fieldid*ocおよび*valueは変更されません。フィールドは、フィールド識別子の順に返されます。

値の型は、char *ですが、返される値は、検索される次のフィールドと同じ型になります。

検索されるフィールドのタイプがFLD_VIEW32である場合、valueパラメータはFVIEWFLD構造体を指します。Fnext()関数を使用して、構造体のvnameフィールドとdataフィールドを設定します。

Fnext32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fnext()またはFnext32()を呼び出すことができます。

戻り値

Fnext()は、次のオカレンスを正常に検索できた場合、1を返します。バッファの終わりに達した場合は、0を返します。

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fnext()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FNOSPACE]

「空き領域なし」
lenで指定されている値の大きさは、フィールド値を保持する十分な大きさではありません。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、fieldidまたはocにNULLを指定している)。

関連項目

「FML関数の紹介」Fget、Fget32(3fml)Fnum、Fnum32(3fml)

 


Fnmid_unload、Fnmid_unload32(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()を呼び出すことができます。

戻り値

この関数は、void宣言のため何も返しません。

関連項目

「FML関数の紹介」Fidnm_unload、Fidnm_unload32(3fml)Fldid、Fldid32(3fml)

 


Fnum、Fnum32(3fml)

名前

Fnum()Fnum32() - バッファにあるすべてのオカレンスの数を返す

形式

#include <stdio.h> 
#include "fml.h"

FLDOCC
Fnum(FBFR *fbfr)

#include "fml32.h"

FLDOCC32
Fnum32(FBFR *fbfr)

説明

Fnum()は、指定されたバッファに含まれているフィールド数を返します。fbfrはフィールド化バッファを指すポインタです。FLD_FML32およびFLD_VIEW32フィールドは、格納するフィールド数に関係なく、単一フィールドとしてカウントされます。

Fnum32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fnum()またはFnum32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fnum()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Foccur、Foccur32(3fml)Fpres、Fpres32(3fml)

 


Foccur、Foccur32(3fml)

名前

Foccur()Foccur32() - バッファにあるフィールド・オカレンスの数を返す

形式

#include <stdio.h> 
#include "fml.h"

FLDOCC
Foccur(FBFR *fbfr, FLDID fieldid)

#include "fml32.h"

FLDOCC32 Foccur32(FBFR32 *fbfr, FLDID32 fieldid)

説明

Foccur()は、fbfrで参照されるバッファのfieldidで指定されるフィールド・オカレンスの数を決めるために使用されます。FLD_FML32フィールド・タイプであるため、埋め込み型のFML32バッファ内のフィールドのオカレンスはカウントされません。

Foccur32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Foccur()またはFoccur32()を呼び出すことができます。

戻り値

正常終了の場合、Foccur()は、オカレンスの数を返します。オカレンスがない場合は、0を返します。

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Foccur()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fnum、Fnum32(3fml)Fpres、Fpres32(3fml)

 


Fojoin、Fojoin32(3fml)

名前

Fojoin()Fojoin32() - ソース・バッファを宛先バッファに組み込む

#include <stdio.h> 
#include "fml.h"

int
Fojoin(FBFR *dest, FBFR *src)

#include "fml32.h"

int
Fojoin32(FBFR32 *dest, FBFR32 *src)

説明

Fojoin()は、Fjoin()に似ていますが、宛先バッファdestのフィールドに、ソース・バッファsrcに対応するフィールド識別子/オカレンスがない場合でも、そのフィールドは削除されません。対応するフィールド識別子/オカレンスを宛先バッファに持たないソース・バッファにあるフィールドは、宛先バッファに追加されません。バッファを組み込むことによりFLD_PTRフィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。

Fjoin()と同様、この関数は領域不足により異常終了し、さらに領域を割り当てた後、操作を完了するために再起動されます。

Fojoin32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fojoin()またはFojoin32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fojoin()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファのどちらかがフィールド化バッファでないか、またはFinit()によって初期化されていません。

[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(3fml)

名前

Fpres()Fpres32() - フィールド・オカレンスがバッファにある場合はtrueを返す

#include <stdio.h> 

#include "fml.h"

int
Fpres(FBFR *fbfr, FLDID fieldid, FLDOCC oc)

#include "fml32.h"

int
Fpres32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc)

説明

Fpres()は、指定されたフィールド(fieldid)の指定されたオカレンス(oc)が、fbfrで参照されるバッファに存在するかどうかを調べるために使用されます。Fpres32()は、FLD_FML32フィールド・タイプの埋込み型バッファ内では、指定されたフィールドのオカレンスがあるかどうかをチェックしません。

Fpres32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fpres()またはFpres32()を呼び出すことができます。

戻り値

Fpres()は、指定されたオカレンスがある場合はtrueを、そうでない場合は、falseを返します。

関連項目

「FML関数の紹介」Ffind、Ffind32(3fml)Fnum、Fnum32(3fml)Foccur、Foccur32(3fml)

 


Fprint、Fprint32(3fml)

名前

Fprint()Fprint32() - 標準出力にバッファを出力する

形式

#include <stdio.h> 
#include "fml.h"

int
Fprint(FBFR *fbfr)

#include "fml32.h"

int
Fprint32(FBFR32 *fbfr)

説明

Fprint()は、標準出力に指定されたバッファを出力します。fbfrは、フィールド化バッファを指すポインタです。バッファの各フィールドについて、フィールド名とフィールド値がタブで区切って出力されます。Fname()はフィールド名を決定するために使用されます。フィールド名が決定できない場合、フィールド識別子が出力されます。文字列または文字配列のフィールド値内の表示不能な文字は、バックスラッシュとその後に続く2文字の16進値で表現されます。バッファの出力が完了すると改行が出力されます。

FLD_PTR型の値の場合、Fprint32()はフィールド名またはフィールド識別子、およびポインタ値を16進数で出力します。この関数はポインタ情報を出力しますが、Fextread32()関数はFLD_PTRフィールド・タイプを無視します。

FLD_FML32型の値の場合、Fprint32()は各ネスト・レベルに先行タブを追加して、再帰的にFML32バッファを出力します。FLD_VIEW32型の値の場合、Fprint32()はVIEW32フィールド名、および構造体メンバーの名前と値のペアを出力します。

Fprint32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fprint()またはFprint32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fprint()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FMALLOC]

「mallocが失敗しました」
malloc()による領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」Fextread、Fextread32(3fml)Ffprint、Ffprint32(3fml)Fname、Fname32(3fml)

 


Fproj、Fproj32(3fml)

名前

Fproj()Fproj32() - バッファのプロジェクション

形式

#include <stdio.h> 
#include "fml.h"

int
Fproj(FBFR *fbfr, FLDID *fieldid)

#include "fml32.h"

int
Fproj32(FBFR32 *fbfr, FLDID32 *fieldid)

説明

Fproj()は、必要なフィールドのみを維持する目的から、バッファを更新するために使用されます。fbfrは、フィールド化バッファを指すポインタです。必要なフィールドは、fieldidが指すフィールド識別子の配列に指定されます。配列の最後のエントリはBADFLDIDであることが必要です。更新は、その場所で行われます。したがって、投影の結果にないフィールドは、フィールド化バッファから削除されます。フィールド識別子の配列は、再配列される場合があります。(まだ番号順でない場合は、ソートされます。)バッファを更新することによりFLD_PTRフィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。

Fproj32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fproj()またはFproj32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fproj()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

#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(3fml)

名前

Fprojcpy()Fprojcpy32() - バッファのプロジェクションおよびコピー

形式

#include <stdio.h> 
#include "fml.h"

int
Fprojcpy(FBFR *dest, FBFR *src, FLDID *fieldid)

#include "fml32.h"

int
Fprojcpy32(FBFR32 *dest, FBFR32 *src, FLDID32 *fieldid)

説明

Fprojcpy()は、Fproj()と類似していますが、プロジェクションはその場所で行われず、宛先バッファで行われます。destは宛先バッファのポインタです。srcは、元のフィールド化バッファを指すポインタです。fieldidは、フィールド識別子の配列を指すポインタです。宛先バッファのすべてのフィールドは、最初に削除され、ソース・バッファに投影した結果は宛先バッファに組み込まれます。ソース・バッファは変更されません。フィールド識別子の配列は、再配列される場合があります。(まだ番号順でない場合は、ソートされます。)バッファを更新することによりFLD_PTRフィールドが削除されても、ポインタによって参照されるメモリー領域は変更または解放されません。

この関数は、領域が不足した場合に異常終了します。この関数は、操作を完了するために付加領域を十分に割り当てた後、再起動されます。

Fprojcpy32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fprojcpy()またはFprojcpy32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fprojcpy()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファのどちらかがフィールド化バッファでないか、またはFinit()によって初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、変換先のフィールド化バッファにコピーされますが、バッファには十分な領域が残っていません。

関連項目

「FML関数の紹介」Fjoin、Fjoin32(3fml)Fojoin、Fojoin32(3fml)Fproj、Fproj32(3fml)

 


Fread、Fread32(3fml)

名前

Fread()Fread32() - フィールド化バッファの読取り

形式

#include <stdio.h> 
#include "fml.h"

int
Fread(FBFR *fbfr, FILE *iop)

#include "fml32.h"

int
Fread32(FBFR32 *fbfr, FILE32 *iop)

説明

フィールド化バッファは、Fread()を使用して、ファイル・ストリームから読み取られます。fbfrは、フィールド化バッファを指すポインタです。iopは、FILE型の入力ストリームを指すポインタです(ストリームの詳細は、UNIXシステムのリファレンス・マニュアルでstdio(3S)を参照してください)。Fread()は、ストリームからフィールド化バッファをfbfrに読み込み、バッファに格納されていたデータを消去し、バッファのインデックスを再作成します。Fread32()は、FLD_PTR型のフィールドを無視します。関数にタイプFLD_PTRの値が与えられても、エラーは戻されません。

Fread32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fread()またはFread32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fread()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。また、このエラーは、読み取られたデータがフィールド化バッファでない場合に返されます。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
ストリームから読み取られるフィールド化バッファを保持するための十分な領域が、バッファにありません。

[FEUNIX]

UNIXシステム・コールでエラーが発生しました
read()システム・コールが異常終了しました。外部の整数型変数errnoは、システム・コールによるエラーを示すように設定しておく必要があります。

移植性

この関数は、Windows用のOracle Tuxedo System Workstation DLLでは使用できません。

関連項目

「FML関数の紹介」Findex、Findex32(3fml)Fwrite、Fwrite32(3fml)

UNIXシステムのリファレンス・マニュアルのstdio(3S)

 


Frealloc、Frealloc32(3fml)

名前

Frealloc()Frealloc32() - フィールド化バッファの再割当て

形式

#include <stdio.h> 
#include "fml.h"

FBFR *
Frealloc(FBFR *fbfr, FLDOCC nf, FLDLEN nv)

#include "fml32.h"

FBFR32 *
Frealloc32(FBFR32 *fbfr, FLDOCC32 nf, FLDLEN32 nv)

説明

Frealloc()は、フィールド化バッファを拡大するための領域の再割当てに使用されます。fbfrは、フィールド化バッファを指すポインタです。2番目のパラメータnfは、新しいフィールドの数です。3番目のパラメータnvは、新しい値の領域のバイト数です。これらは、増分ではありません。

Frealloc32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Frealloc()またはFrealloc32()を呼び出すことができます。

戻り値

正常終了の場合、Frealloc()は、再割り当てされたFBFRを指すポインタを返します。

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Frealloc()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、フィールド数が0より小さい、Vが0、または合計の大きさが65534より大きい)。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
新しい大きさが、現在バッファにあるものより小さいか、またはrealloc()を使用しての領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」Falloc、Falloc32(3fml)Ffree、Ffree32(3fml)

 


Frstrindex、Frstrindex32(3fml)

名前

Frstrindex()Frstrindex32() - バッファにある索引をリストアする

形式

#include <stdio.h> 
#include "fml.h"

int
Frstrindex(FBFR *fbfr, FLDOCC numidx)

#include "fml32.h"

int
Frstrindex32(FBFR32 *fbfr, FLDOCC32 numidx)

説明

インデックス解除されたフィールド化バッファは、Findex()またはFrstrindx()を呼び出して再インデックスされます。fbfrは、フィールド化バッファを指すポインタです。前者は、バッファの合計インデックス計算を実行するため、非常にコストがかかります(バッファの完全スキャンが必要)。インデックス化されていなバッファが変更されたとき、またはバッファの前の状態が不明な場合に、使用する必要があります(たとえば、あるプロセスからインデックスなしの別のプロセスに送信された場合)。Frstrindex()は時間がかかりませんが、使用できるのは、前のインデックス解除操作の後でバッファが変更されていない場合のみです。Frstrindx()の2番目の引数numidxは、Funindex()関数の戻り値です。

Frstrindex32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Frstrindex()またはFrstrindex32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Frstrindex()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

バッファを索引なしで送信するためには、次のような文が実行されます。

save = Funindex(fbfr); 
num_to_send = Fused(fbfr);
transmit(fbfr,num_to_send); /* A hypothetical function */ Frstrindx(fbfr,save);

これら4つの文は、次のことを実行します。

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()を呼び出すことができません。

  1. 受信プロセスは、Funindex()を呼び出していません。したがって、Frstrindex()の引数numidxの値がわかりません。
  2. 索引自体、送信されないため利用できません。

解決策としては、Findex()を明示的に呼び出すことです。もちろんユーザーは、フィールド化バッファの索引のバージョンを自由に送信する(つまり、Fsizeof(*fbfr)バイトを送信する)ことができ、受信側のFindex()のコストを回避します。

関連項目

「FML関数の紹介」Findex、Findex32(3fml)Fsizeof、Fsizeof32(3fml)Funindex、Funindex32(3fml)

 


Fsizeof、Fsizeof32(3fml)

名前

Fsizeof()Fsizeof32() - フィールド化バッファのサイズを返す

形式

#include <stdio.h> 
#include "fml.h"

long
Fsizeof(FBFR *fbfr)

#include "fml32.h"

long
Fsizeof32(FBFR32 *fbfr)

説明

Fsizeof()は、フィールド化バッファのサイズをバイト数で返します。fbfrは、フィールド化バッファを指すポインタです。

Fsizeof32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fsizeof()またはFsizeof32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fsizeof()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Fidxused、Fidxused32(3fml)Fused、Fused32(3fml)Funused、Funused32(3fml)

 


Fstrerror、Fstrerror32(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(3fml)

名前

Ftypcvt()Ftypcvt32() - フィールド・タイプを別のフィールド・タイプに変換

形式

#include <stdio.h> 
#include "fml.h"

char *
Ftypcvt(FLDLEN *tolen, int totype, char *fromval, int fromtype,
FLDLEN fromlen)

#include "fml32.h"

char *
Ftypcvt32(FLDLEN32 *tolen, int totype, char *fromval, int fromtype,
FLDLEN32 fromlen)

説明

Ftypcvt()は、fromlenで指定された長さのfromtype型の*fromvalの値(fromtypeFLD_CARRAYの場合。それ以外の場合、fromlenfromtypeから算出)を、totype型の値に変換します。Ftypcvt()が成功すると、変換後の値に対するポインタが返され、*tolenに変換後の長さが設定されます。失敗すると、Ftypcvt()からNULLが返されます。

Ftypcvt32()は、FLD_PTRFLD_MBSTRINGFLD_FML32、またはFLD_VIEW32のフィールド・タイプが使用されると失敗します。これらのフィールド・タイプの1つが指定されると、FerrorFEBADOPが設定されます。

Ftypcvt32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Ftypcvt()またはFtypcvt32()を呼び出すことができます。

戻り値

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ftypcvt()は異常終了し、Ferrorを次の値に設定します。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)から文字列に変換するときに、malloc()を使用しての領域の動的な割当てが失敗しました。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、tolenまたはfromvalパラメータにNULLが指定された場合)。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド・タイプは無効です(FLD_PTRFLD_FML32、またはFLD_VIEW32など)。

関連項目

「FML関数の紹介」CFadd、CFadd32(3fml)CFchg、CFchg32(3fml)CFfind、CFfind32(3fml)CFget、CFget32(3fml)CFgetalloc、CFgetalloc32(3fml)

 


Ftype、Ftype32(3fml)

名前

Ftype()Ftype32() - フィールド・タイプを指すポインタを返す

形式

#include <stdio.h> 
#include "fml.h"

char *
Ftype(FLDID fieldid)

#include "fml32.h"

char *
Ftype32(FLDID32 fieldid)

説明

Ftype()は、フィールド識別子fieldidを受け取り、フィールドの型名を持つ文字列を指すポインタを戻します。たとえば、Ftype()short型のFLDIDが与えられた場合は、文字列"short"を指すポインタが戻されます。このデータ領域は読取り専用です。

Ftype32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Ftype()またはFtype32()を呼び出すことができます。

戻り値

Ftype()は、正常終了時にフィールド・タイプを識別する文字列を指すポインタを返します。

この関数は、エラー発生時にNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Ftype()は異常終了し、Ferrorを次の値に設定します。

[FTYPERR]

「フィールド型が正しくありません。」
指定されたフィールド識別子は無効です。

関連項目

「FML関数の紹介」Fldid、Fldid32(3fml)Fldno、Fldno32(3fml)

 


Funindex、Funindex32(3fml)

名前

Funindex()Funindex32() - フィールド化バッファの索引の破棄

形式

#include <stdio.h> 
#include "fml.h"

FLDOCC
Funindex(FBFR *fbfr)

#include "fml32.h"

FLDOCC32
Funindex32(FBFR32 *fbfr)

説明

Funindex()は、フィールド化バッファのインデックスを破棄します。fbfrはフィールド化バッファを指すポインタです。この関数が正常終了して戻る場合は、バッファはインデックスなしになります。結果として、インデックスにバッファ領域は割り当てられず、ユーザー・フィールドとして利用可能な領域が増加します。ただし、アクセス時間が遅くなる可能性があります。ディスクに格納する場合、または別の場所に転送する場合は、バッファをインデックスなしにすることが有効です。ディスク格納の場合、ディスク領域が節約され、転送を行う場合、転送コストを減少させることができます。

バッファが索引なしになった後、バッファ開始からの上位バイトの数は関数呼出しFused(fbfr)によって決定されます。

Funindex32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Funindex()またはFunindex32()を呼び出すことができます。

戻り値

Funindex()は、索引が取り除かれる前にバッファが持つ索引の要素数を返します。

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Funindex()は、異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Findex、Findex32(3fml)Frstrindex、Frstrindex32(3fml)Fsizeof、Fsizeof32(3fml)Funused、Funused32(3fml)

 


Funused、Funused32(3fml)

名前

Funused()Funused32() - フィールド化バッファの未使用分のバイト数を返す

形式

#include <stdio.h> 
#include "fml.h"

long
Funused(FBFR *fbfr)

#include "fml32.h"

long
Funused32(FBFR32 *fbfr)

説明

Funused()は、現在使用していないバッファ領域の量を返します。ユーザー・データまたはヘッダーや索引といった、オーバーヘッド・データを含まない領域は使用されていません。

fbfrは、フィールド化バッファに対するポインタです。

Funused32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Funused()またはFunused32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Funused()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Fidxused、Fidxused32(3fml)Fused、Fused32(3fml)

 


Fupdate、Fupdate32(3fml)

名前

Fupdate()Fupdate32() - ソース・バッファで宛先バッファを更新する

形式

#include <stdio.h> 
#include "fml.h"

int
Fupdate(FBFR *dest, FBFR *src)

#include "fml32.h"

int
Fupdate32(FBFR32 *dest, FBFR32 *src)

説明

Fupdate()は、ソース・バッファのフィールド値で宛先バッファを更新します。destおよびsrcは、フィールド化バッファを指すポインタです。フィールドID/オカレンスと一致するフィールドの場合は、フィールド値はソース・バッファの値を使って宛先バッファで更新されます。ソース・バッファに、一致するフィールドを持たない宛先バッファのフィールドはそのままです。宛先バッファに、一致するフィールドを持たないソース・バッファのフィールドが、宛先バッファに追加されます。

FLD_PTR型の値では、Fupdate32()はポインタ値を格納します。FLD_PTRフィールドが指すバッファは、tpalloc()を呼び出して割り当てます。FLD_FML32型の値の場合、Fupdate32()は、索引を除くすべてのFLD_FML32フィールドの値を格納します。FLD_VIEW32型の値の場合、Fupdate32()FVIEWFLD型の構造体に対するポインタを格納します。FVIEWFLD型の構造体には、vflags (現在未使用で0に設定されているフラグ・フィールド)、vname (VIEW名を含む文字配列)、およびdata (C構造体として格納されるVIEWデータに対するポインタ)が含まれています。アプリケーションは、Fupdate32()vnameおよびdataを提供します。

Fupdate32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fupdate()またはFupdate32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fupdate()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
ソース・バッファまたは宛先バッファのどちらかが適切なバウンダリで開始していません。

[FNOTFLD]

「バッファがフィールド化されていません。」
ソース・バッファまたは宛先バッファがフィールド化バッファでないか、またはFinit()で初期化されていません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、宛先バッファで追加または変更されますが、バッファ領域の残りが十分ではありません。

関連項目

「FML関数の紹介」Fjoin、Fjoin32(3fml)Fojoin、Fojoin32(3fml)Fproj、Fproj32(3fml)Fprojcpy、Fprojcpy32(3fml)

 


Fused、Fused32(3fml)

名前

Fused()Fused32() - フィールド化バッファで使用しているバイト数を返す

形式

#include <stdio.h> 
#include "fml.h"

long
Fused(FBFR *fbfr)

#include "fml32.h"

long
Fused32(FBFR32 *fbfr)

説明

Fused()は、ユーザー・データとヘッダーの両方を含む(索引は、いつでもドロップできるため含まない)、フィールド化バッファで使用している領域のサイズをバイト数で返します。fbfrは、フィールド化バッファを指すポインタです。

Fused32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fused()またはFused32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fused()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

関連項目

「FML関数の紹介」Fidxused、Fidxused32(3fml)Funused、Funused32(3fml)

 


Fvall、Fvall32(3fml)

名前

Fvall()Fvall32() - フィールド・オカレンスをlong型で返す

#include <stdio.h> 
#include "fml.h"

long
Fvall(FBFR *fbfr, FLDID fieldid, FLDOCC oc)

#include "fml32.h"

long
Fvall32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc)

説明

Fvall()は、long型およびshort型の値の場合にFfind()と同様に動作しますが、値を指すポインタではなく、フィールドの実際の値を返します。fbfrは、フィールド化バッファを指すポインタです。fieldidはフィールド識別子です。ocはフィールドのオカレンス番号です。

指定したフィールド・オカレンスが発見されない場合は、0が戻されます。この関数は、戻り値をチェックせずにフィールドの値を別の関数に渡すのに役立ちます。この関数は、型FLD_LONGまたはFLD_SHORTのフィールドに対してのみ有効です。

Fvall32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvall()またはFvall32()を呼び出すことができます。

戻り値

Fvall()は、FLD_LONGおよびFLD_SHORT以外のフィールド・タイプに対して0を返し、FerrorFTYPERRに設定します。

この関数は、他のエラーが発生すると0を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvall()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
fieldidが誤っている、またはフィールド・タイプがFLD_SHORTでもFLD_LONGでもありません。

関連項目

「FML関数の紹介」Ffind、Ffind32(3fml)Fvals、Fvals32(3fml)

 


Fvals、Fvals32(3fml)

名前

Fvals()Fvals32() - フィールド・オカレンスの文字列の値を返す

形式

#include <stdio.h> 
#include "fml.h"

char *
Fvals(FBFR *fbfr, FLDID fieldid, FLDOCC oc)

#include "fml32.h"

char *
Fvals32(FBFR32 *fbfr, FLDID32 fieldid, FLDOCC32 oc)

説明

Fvals()は、文字列の値の場合にFfind()と同様に動作しますが、値が返されることを保証します。fbfrは、フィールド化バッファを指すポインタです。fieldidは、フィールド識別子です。ocはフィールドのオカレンス番号です。

指定したフィールド・オカレンスが見つからない場合は、NULLが返されます。この関数は、戻り値をチェックせずにフィールドの値を別の関数に渡すのに役立ちます。ただし、この関数は、FLD_STRING型のフィールドの場合のみ有効であり、他のフィールド型の場合は、自動的にNULL文字列を返します(つまり、変換は行われません)。

Fvals32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvals()またはFvals32()を呼び出すことができます。

戻り値

この関数は、エラーが発生するとNULLを返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvals()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FBADFLD]

「未知のフィールド番号か、未知のフィールド型が指定されました。」
指定されたフィールド識別子は無効です。

[FTYPERR]

「フィールド型が正しくありません。」
fieldidが誤っている、またはフィールド・タイプがFLD_STRINGではありません。

関連項目

「FML関数の紹介」CFfind、CFfind32(3fml)Ffind、Ffind32(3fml)Fvall、Fvall32(3fml)

 


Fvftos、Fvftos32(3fml)

名前

Fvftos()Fvftos32() - フィールド化バッファからC構造体にコピー

形式

#include <stdio.h> 
#include "fml.h"

int
Fvftos(FBFR *fbfr, char *cstruct, char *view)

#include "fml32.h"

int
Fvftos32(FBFR32 *fbfr, char *cstruct, char *view)

説明

Fvftos()関数は、フィールド化バッファからC構造体へデータを転送します。fbfrは、フィールド化バッファを指すポインタです。cstructは、C構造体を指すポインタです。viewは、コンパイルしたVIEW記述子の名前を指すポインタです。

フィールドは、フィールド化バッファからviewのメンバー記述子に基づく構造体に複写されます。フィールド化バッファのフィールドが、一致するバッファをC構造体に持たない場合は、無視されます。C構造体で指定されたメンバーがフィールド化バッファに一致するフィールドを持たない場合は、メンバーにNULL値が複写されます。使用したNULL値がVIEW記述子の各メンバーに対して定義可能です。

C構造体で複数のオカレンスを格納するには、構造体のメンバーは配列である必要があります(たとえば、int zip[4]はzipの4つのオカレンスを格納できます)。バッファに存在するオカレンスの数が、配列にある要素数よりも少ない場合は、余分の要素スロットにはNULL値が割り当てられます。一方、バッファの配列にある要素数よりもオカレンスの数の方が多い場合は、余分なオカレンスは無視されます。

フィールド識別子およびメンバーに対してマッピング・エントリが存在する場合でも、マッピングを禁止するVIEW記述子のオプションがあります。これらのオプションは、初めはVIEWファイルで指定されていますが、実行時にFvopt()を使用して変更できます。

Fvftos32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvftos()またはFvftos32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvftos()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FEINVAL]

「関数の引数が無効です」
呼び出された関数への引数の1つが無効です(たとえば、FvftoscstructパラメータにNULLを指定)。

[FBADACM]

「ACMに負の値が含まれています」
構造体からフィールド化バッファにデータを移動するときには、連想カウント・メンバー(ACM)は負の値であってはなりません。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません」
指定したVIEW記述子がNULLであるか、あるいはVIEWDIRまたはVIEWFILESで指定されたファイルにこの記述子がありませんでした。

関連項目

「FML関数の紹介」Fvopt、Fvopt32(3fml)viewfile(5)

 


Fvneeded、Fvneeded32(3fml)

名前

Fvneeded()Fvneeded32() - VIEWバッファに必要な大きさの計算

形式

#include <stdio.h> 
#include "fml.h"

long
Fvneeded(char *subtype)

#include "fml32.h"

long
Fvneeded32(char *subtype)

説明

Fvneeded()は、VIEW C構造体のサイズを返します。subtypeVIEWの名前です。Fvneeded()を呼び出して、割り当てるVIEWバッファのサイズを判別できます。Fvneeded32()は32ビットのVIEWで使用します。

戻り値

Fvneeded()は、VIEWのサイズをバイト数で戻します。この関数は、エラー発生時に-1を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvnull()は異常終了し、Ferrorを次の値に設定します。

[FEINVAL]

「関数の引数が無効です。」
VIEWDIR環境変数およびVIEWFILES環境変数で指定されたVIEWファイルで、リクエストされたVIEWが見つかりませんでした。

関連項目

「FML関数の紹介」viewfile(5)

 


Fvnull、Fvnull32(3fml)

名前

Fvnull()Fvnull32() - 構造体の要素がNULLかどうかのチェック

形式

#include <stdio.h> 
#include "fml.h"

int
Fvnull(char *cstruct, char *cname, FLDOCC oc, char *view)

#include "fml32.h"

int
Fvnull32(char *cstruct, char *cname, FLDOCC32 oc, char *view)

説明

Fvnull()は、構造体要素のオカレンスがNULLであるかどうかを判断するのに使用します。cstructは、C構造体を指すポインタです。cnameは、cstruct内の要素名を指すポインタです。ocは要素のオカレンス番号です。viewは、コンパイルしたVIEW記述子の名前を指すポインタです。

Fvopt()のオプションは、この関数に影響しません。

Fvnull32()は、viewc32で定義されたビューや、フィールド数の多い大規模ビューのためのVIEW32型付きバッファに対して使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのコンテキスト状態で実行している場合でも、Fvnull()またはFvnull32()を呼び出すことができます。

戻り値

Fvnull()は、C構造体で指定したcnameがNULLの場合は1を戻し、NULLでない場合は0を戻します。この関数は、エラー発生時に-1を戻し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvnull()は異常終了し、Ferrorを次の値に設定します。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません。」
指定したVIEW記述子がVIEWDIRまたはVIEWFILESで指定されたファイル内にありませんでした。

[FNOCNAME]

「cnameが見つかりません。」
C構造体フィールド名が、VIEW記述子で見つかりません。

関連項目

「FML関数の紹介」Fvopt、Fvopt32(3fml)viewfile(5)

 


Fvopt、Fvopt32(3fml)

名前

Fvopt()Fvopt32() - マッピング・エントリのフラグ・オプションの変更

形式

#include <stdio.h> 
#include "fml.h"

int
Fvopt(char *cname, int option, char *view)

#include "fml32.h"

int
Fvopt32(char *cname, int option, char *view)

説明

Fvopt()は、実行時にバッファと構造体のマッピング・オプションの指定を可能にします。cnameはVIEW記述子、viewでの要素名を指すポインタです。optionは、マッピング・オプションのために必要な設定を指定します。有効なオプションとその意味は次に説明します。

F_FTOS

フィールド化バッファから構造体への一方向のマッピング、VIEW記述子内のフラグS

F_STOF

構造体からフィールド化バッファへの一方向のマッピング、VIEW記述子内のフラグF

F_OFF

フィールド化バッファと構造体の間でのマッピングを行わない、VIEW記述子内のフラグN

F_BOTH

フィールド化バッファと構造体の間の双方向のマッピング、VIEW記述子内のフラグSおよびF

Fvopt32()は、viewc32で定義されたビューや、フィールド数の多い大規模ビューのためのVIEW32型付きバッファに対して使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvopt()またはFvopt32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvopt()は異常終了し、Ferrorを次の値に設定します。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数への引数の1つが無効でした(たとえば、cnameパラメータまたはviewパラメータにNULLを指定、あるいは無効なオプションを指定)。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません。」
VIEWDIRまたはVIEWFILESで指定したファイルにVIEWが見つかりませんでした。

[FNOCNAME]

「cnameが見つかりません。」
C構造体フィールド名が、VIEW記述子で見つかりません。

関連項目

「FML関数の紹介」viewfile(5)

 


Fvrefresh、Fvrefresh32(3fml)

名前

Fvrefresh()Fvrefresh32() - C構造体からフィールド化バッファにコピー

形式

#include <stdio.h> 
#include "fml.h"

void
Fvrefresh()

#include "fml32.h"

void
Fvrefresh32()

説明

Fvrefresh()は、ビュー構造マッピングの内部キャッシュ・メモリーをクリアし、初期化し直します。この操作が必要になるのは、頻繁に使用するビューが動的に更新される場合に限られます。

Fvrefresh32()は、viewc32で定義されたビューや、フィールド数の多い大規模ビューのためのVIEW32型付きバッファに対して使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvrefresh()またはFvrefresh32()を呼び出すことができます。

戻り値

このルーチンはvoid関数であり、値を返しません。

エラー

このルーチンはvoid関数であり、エラー・コードはセットされません。

関連項目

FML関数の紹介

 


Fvselinit、Fvselinit32(3fml)

名前

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]

「関数の引数が無効です。」
呼び出された関数への引数の1つが無効です(たとえば、Fvselinitに無効なNULL cstructパラメータを指定)。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません」
指定したVIEW記述子がNULLであるか、あるいはVIEWDIRまたはVIEWFILESで指定されたファイルにこの記述子がありませんでした。

[FNOCNAME]

「cnameが見つかりません。」
C構造体フィールド名が、VIEW記述子で見つかりません。

関連項目

「FML関数の紹介」Fvsinit、Fvsinit32(3fml)viewfile(5)

 


Fvsinit、Fvsinit32(3fml)

名前

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]

「関数の引数が無効です。」
呼び出された関数への引数の1つが無効です(たとえば、Fvsinit()に無効なNULL cstructパラメータを指定)。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません」
指定したVIEW記述子がNULLであるか、あるいはVIEWDIRまたはVIEWFILESで指定されたファイルにこの記述子がありませんでした。

関連項目

「FML関数の紹介」Fvselinit、Fvselinit32(3fml)viewfile(5)

 


Fvstof、Fvstof32(3fml)

名前

Fvstof()Fvstof32() - C構造体からフィールド化バッファにコピー

形式

#include <stdio.h> 
#include "fml.h"

int
Fvstof(FBFR *fbfr, char *cstruct, int mode, char *view)

#include "fml32.h"

int
Fvstof32(FBFR32 *fbfr, char *cstruct, int mode, char *view)

説明

Fvstof()は、C構造体からフィールド化バッファへデータを転送します。fbfrは、フィールド化バッファを指すポインタです。cstructは、C構造体を指すポインタです。modeは、転送が行われる方法を指定します。viewは、コンパイルされたVIEW記述子を指すポインタです。modeは、次の4つのいずれかの値です。

これらのモードの処理は、Fupdate()Fojoin()Fjoin()およびFconcat()の説明と同じです。これらの関数ではソース・バッファを指定するのに対して、Fvstof()ではC構造体を指定することを除けば、Fvstof()はこれらの関数と同じものと考えることもできます。FUPDATEはNULLの値を持つ構造体の要素を移動しないことを憶えていてください。

Fvstof32()は、viewc32で定義されたビューや、フィールド数の多い大規模ビューのためのVIEW32型付きバッファに対して使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvstof()またはFvstof32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fvstof()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効でした(たとえば、Fvstof()にNULL cstructパラメータまたは無効なmodeが指定されている場合)。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド値は、フィールド化バッファで追加あるいは変更されますが、バッファには、十分な領域が残っていません。

[FBADACM]

「ACMに負の値が含まれています」
構造体からフィールド化バッファにデータを移動するときには、連想カウント・メンバー(ACM)は負の値であってはなりません。

[FMALLOC]

「malloc()を使用して、メモリーを割り当てられませんでした。」
CARRAY (またはMBSTRING)あるいは文字列の値から変換するときに、malloc()を使用した領域の動的な割当てが失敗しました。

関連項目

「FML関数の紹介」Fconcat、Fconcat32(3fml)Fjoin、Fjoin32(3fml)Fojoin、Fojoin32(3fml)Fupdate、Fupdate32(3fml)Fvftos、Fvftos32(3fml)

 


Fvstot、Fvttos(3fml)

名前

Fvstot()Fvttos() - C構造体からターゲットのレコード・タイプに変換、およびその逆の変換

形式

#include <stdio.h> 
#include "fml.h"

long
Fvstot(char *cstruct, char *trecord, long treclen, char *viewname)

long
Fvttos(char *cstruct, char *trecord, char *viewname)

#include "fml32.h"

int
Fvstot32(char *cstruct, char *trecord, long treclen, char *viewname)

int
Fvttos32(char *cstruct, char *trecord, char *viewname)

int Fcodeset(char *translation_table)

説明

Fvstot()は、Cの構造体からターゲットのレコード・タイプにデータを転送します。Fvttos()関数は、データをターゲット・レコードからC構造体に転送します。trecordはターゲット・レコードへのポインタです。cstructはC構造体へのポインタです。viewnameは、コンパイルされたVIEW記述の名前へのポインタです。VIEWDIRおよびVIEWFILES環境変数を使用してコンパイルされたVIEW記述があるディレクトリとファイルが検索されます。

Fvttos32()Fvstot32()は、32ビットのVIEWに対して使用されます。

FMLバッファからターゲット・レコードに変換するには、まずFvftos()を呼び出してFMLバッファからC構造体に変換し、次にFvstot()を呼び出してターゲット・レコードに変換します。ターゲット・レコードからFMLバッファに変換するには、まずFvttos()を呼び出してC構造体に変換し、次にFvstof()を呼び出してそのデータ構造体をFMLバッファに変換します。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fvstot()またはFvttos()を呼び出すことができます。

デフォルト変換 - IBM/370

下に示したデフォルト・ターゲットは、IBM/370のCOBOLレコードです。デフォルトのデータ変換は、下の表に基づいて行われます。

表2 デフォルトのデータ変換
データ構造
レコード
float
COMP-1
double
COMP-2
long
S9(9) COMP
short
S9(4) COMP
int
S9(9) COMPまたはS9(4) COMP
dec_t(m, n)
S9(2*m-(n+1))V9(n)COMP-3
ASCII文字
EBCDIC文字
ASCII文字列
EBCDIC文字列
carray
文字配列
mbstring
マルチバイト文字配列

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]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です(たとえば、Fvttos()に対してNULLのtrecordまたはcstructパラメータを指定した場合)。また、このエラーは、変換元または変換先のターゲット・レコードの値が範囲を超えている場合にも返されます。

[FBADACM]

「ACMに負の値が含まれています。」
連想カウント・メンバー(Associated Count Member)は負の値にセットできません。

[FBADVIEW]

「ビューが見つからないか、取得できません」
VIEWDIRまたはVIEWFILESで指定したファイルにビュー名が見つかりません。

[FNOSPACE]

「バッファにスペースがありません。」
変換したデータ構造のサイズがターゲット・レコードのサイズを上回っています。

[FVFOPEN]

「VIEWファイルが見つからないか、オープンできません」
ビュー名の検索中に、VIEWDIRまたはVIEWFILESで指定したファイルの1つをプログラムが見つけられませんでした。

[FEUNIX]

「オペレーティング・システム・エラー」
viewname検索中にプログラムはVIEWDIRまたはVIEWFILESで指定したファイルの1つを読込み用に開けませんでした。

[FVFSYNTAX]

「VIEWファイルが正しくありません」
ビュー名の検索中、VIEWDIRまたはVIEWFILESで指定したファイルの1つが壊れていたか、VIEWファイルではありませんでした。

[FMALLOC]

「mallocが失敗しました」
ビュー名の検索中、malloc()がビュー情報を格納するための領域の割当てに失敗しました。

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(3fml)

名前

Fwrite()Fwrite32() - フィールド化バッファを書き込む

形式

#include <stdio.h> 
#include "fml.h"

int
Fwrite(FBFR *fbfr, FILE *iop)

#include "fml32.h"

int
Fwrite32(FBFR32 *fbfr, FILE *iop)

説明

Fwrite()は、フィールド化バッファをストリームに書き込みます。(ストリームの詳細は、UNIXシステムのリファレンス・マニュアルでstdio(3S)を参照してください)。Fwrite()はバッファのインデックスを破棄します。

fbfrは、フィールド化バッファを指すポインタです。iopは、出力ストリームを指すFILE型のポインタです。

FLD_PTRフィールド・タイプの場合、ポインタによって指示されているデータではなく、ポインタだけが出力ストリームに書き込まれます。FLD_VIEW32フィールド・タイプの場合、VIEW32バッファ内のデータではなく、FVIEWFLD構造体だけが出力ストリームに書き込まれます。

Fwrite32()は32ビットFMLで使用されます。

マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXTを含め、どのようなコンテキスト状態で実行していても、Fwrite()またはFwrite32()を呼び出すことができます。

戻り値

この関数は、エラー発生時に -1を返し、Ferrorを設定してエラー条件を示します。

エラー

次の条件の場合、Fwrite()は異常終了し、Ferrorを次の値に設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません」
バッファがフィールド化されていないか、またはFinit()で初期化されていません。

[FEUNIX]

UNIXシステム・コールでエラーが発生しました
writeシステム・コールが異常終了しました。外部の整数型変数errnoは、システム・コールによるエラーを示すために設定され、外部の整数型変数Uunixerr (Uunix.hで定義されている値)は、エラーを返したシステム・コールに設定されます。

移植性

この関数は、Windows用のOracle Tuxedo System Workstation DLLでは使用できません。

関連項目

「FML関数の紹介」Findex、Findex32(3fml)Fread、Fread32(3fml)

UNIXシステムのリファレンス・マニュアルのstdio(3S)

 


tpconvfmb32(3fml)

名前

tpconvfmb32() - ソースのエンコーディングからターゲットのエンコーディングにマルチバイト文字を変換する

形式

#include <atmi.h>
#include "fml32.h"
extern int tperrno;
int
tpconvfmb32 (FBFR32 **bufp, FLDID32 *ids, char *target_encoding,
long flags)

説明

tpconvfmb32()は、FML32型付きバッファにあるFLD_MBSTRINGフィールドのマルチバイト文字を、ターゲットの名前付きのエンコーディングに変換します。具体的には、tpconvfmb32()は、FLD_MBSTRINGフィールドで指定されたソースのエンコーディング名とtarget_encodingで定義されたターゲットのエンコーディング名を比較し、エンコーディング名が異なる場合にtpconvfmb32()は、FLD_MBSTRINGフィールドのデータをターゲットのエンコーディングに変換します。

システムによるエンコーディング変換にかわる方法として、tpconvfmb32()があります。プロセスTPMBACONV環境変数をNULL以外の値に設定した場合、システムによるFLD_MBSTRINGフィールド・データのエンコーディング変換が自動的に行われます。

bufpはFML32型付きバッファを指すポインタです。ポインタに関連付けられたサイズがFML32バッファの変換済の出力データの処理に不十分な場合、このポインタは内部的に再割り当てされます。bufpは、Falloc()関数ではなくtpalloc()関数を使用して定義する必要があります。bufpFLD_FML32フィールドが含まれる場合、FLD_MBSTRINGフィールドについて再帰的にチェックされます。bufpFLD_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]

bufpは、バッファ・タイプ・スイッチ変換関数がないTuxedoバッファに変換します。

[TPESYSTEM]

Tuxedoシステムのエラーが発生しました(bufpが有効なTuxedoバッファに対応していない場合など)。

[TPEINVAL]

target_encodingまたはbufpがNULLです。

[TPEOS]

オペレーティング・システムのエラーが発生しました。外部整数Uunixerr (Uunix.hで定義されている値)が、そのエラーを戻したシステム・コールに設定されます。

関連項目

Fmbpack32(3fml)Fmbunpack32(3fml)tpalloc(3c)tpsetmbenc(3c)tuxgetmbaconv(3c)tuxgetmbenc(3c)tuxsetmbaconv(3c)tuxsetmbenc(3c)

 


tpconvvmb32(3fml)

名前

tpconvvmb32() - VIEW32型付きバッファにあるMBSTRINGフィールドのマルチバイト文字を、ターゲットの名前付きのエンコーディングに変換する

形式

#include <atmi.h>
#include "fml32.h"
extern int tperrno;

int
tpconvvmb32 (char **bufp, FLDID32 *ids, char *target_encoding,
long flags)

説明

具体的には、tpconvvmb32()は、MBSTRINGフィールドで指定されたソースのエンコーディング名とtarget_encodingで定義されたターゲットのエンコーディング名を比較し、エンコーディング名が異なる場合にtpconvvmb32()は、MBSTRINGフィールドのデータをターゲットのエンコーディングに変換します。

システムによるエンコーディング変換にかわる方法として、tpconvvmb32()があります。プロセスTPMBACONV環境変数をNULL以外の値に設定した場合、システムによるMBSTRINGフィールド・データのエンコーディング変換が自動的に行われます。

tpconvvmb32()では、以下の引数を使用できます。

bufp

VIEW32型付きバッファを指すポインタです。ポインタに関連付けられたサイズがVIEW32バッファの変換済の出力データの処理に不十分な場合、このポインタは内部的に再割り当てされます。
注意: bufpは、Falloc()ではなくtpalloc()関数で定義しなければなりません。

ids

変換するフィールド識別子の配列を指すポインタが入ります。idsNULLの場合、bufpにあるすべてのMBSTRINGフィールドは、必要に応じてターゲットのエンコーディングに変換されます。配列を使用する場合は、0 (BADFLDID)で終了する必要があります。

target_encoding

bufpメッセージ内にあるMBSTRINGフィールドの変換に使用する、ターゲットのコード・セットのエンコーディング名です。target_encodingNULLの場合、tpconvvmb32()は、プロセスTPMBENC環境変数で定義されたエンコーディング名を使用します。

flags

tpconvvmb32()では使用されません。これは、ユーザー定義の変換関数用のバッファ・タイプ・スイッチ関数に渡されます。

戻り値

成功した場合、tpconvvmb32()0を戻します。エラーの場合、tpconvvmb32()-1を戻し、tperrnoを設定してエラー条件を示します。

エラー

次の条件の場合、tpconvvmb32()は異常終了し、tperrnoを次の値に設定します。

[TPEPROTO]

bufpは、バッファ・タイプ・スイッチ変換関数がないTuxedoバッファに変換します。

[TPESYSTEM]

Tuxedoシステムのエラーが発生しました(bufpが有効なTuxedoバッファに対応していない場合など)。

[TPEINVAL]

target_encodingまたはbufpがNULLです。

[TPEOS]

オペレーティング・システムのエラーが発生しました。外部整数Uunixerr (Uunix.hで定義されている値)が、そのエラーを返したシステム・コールに設定されます。

関連項目

Fmbpack32(3fml)Fmbunpack32(3fml)tpalloc(3c)tpsetmbenc(3c)tuxgetmbaconv(3c)tuxgetmbenc(3c)tuxsetmbaconv(3c)tuxsetmbenc(3c)


  先頭に戻る       前  次