|
|
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 の場合のみ必要です。
-1 のオカレンスが指定される場合、フィールド値は、新しいオカレンスとしてバッファに追加されます。指定されたフィールド・オカレンスが見つかった場合、フィールド値は、指定された値に変更されます。存在しないフィールド・オカレンスが指定された場合、必要とするオカレンスが追加されるまで、見つからないオカレンス用には NULL 値が追加されます (たとえば、バッファに存在しないフィールド用にフィールド・オカレンスを 4 に変更すると、3 個の NULL 値のあとに指定されたフィールド値が追加されます)。文字列および文字の値の NULL 値は、NULL 文字列 (長さは 1 バイト) で構成されています。long および short フィールド用の NULL 値は、0 で構成されています。float および double 値用の NULL 値は、0.0 で構成されています。文字配列用の NULL 値は、長さゼロの文字列で構成されています。新しい、もしくは変更した値は、value に含まれます。文字配列の場合 (他の場合は考慮しない)、value の長さは len で与えられます。value が NULL の場合、フィールド・オカレンスは削除されます。削除する値が見つからない場合、エラーと見なされます。
上記の「形式」の項では、Fchg() の引数 value のデータ型は、char のポインタ (C の char *) として記述されています。技術的には、Fchg() に渡されるある 1 つの特別な種類の値のみ記述しています。実際、引数 value の型は、変更するフィールドのフィールド化バッファの表現の型と同じ型のオブジェクトを指すポインタであるべきです。たとえば、フィールドが、FLD_LONG 型でバッファに格納されている場合は、value の型は、long のポインタ (C の long *) である必要があります。同様に、FLD_SHORT 型でバッファに格納される場合、value は、short 型のポインタ (C の short *) である必要があります。大事なことは、Fchg() は、value が指すオブジェクトが、変更される格納済みのフィールドの型と同じ型を持っているものと想定しています。
FLD_PTR 型の値の場合、Fchg32() はポインタの値を格納します。FLD_PTR フィールドが指すバッファを割り当てるには、tpalloc() を呼び出します。FLD_FML32 型の値の場合、Fchg32() はインデックスを除いたFLD_FML32 フィールド全体の値を格納します。FLD_VIEW32 型の値の場合、Fchg() は FVIEWFLD 型の構造体を指すポインタを格納します。これには、vflags (現在未使用で 0 に設定されたflags フィールド)、vname (VIEW 名を含む文字配列)、および data (C 構造体として格納される VIEW データを指すポインタ) が含まれます。アプリケーションは、vname と data を Fchg32() に提供します。
Fchg32() は 32 ビット FML で使用されます。
マルチスレッドのアプリケーション内のスレッドは、TPINVALIDCONTEXT を含め、どのようなコンテキスト状態で実行している場合でも、Fchg() または Fchg32() を呼び出すことができます。
戻り値
この関数は、エラー発生時に -1 を返し、Ferror を設定してエラー条件を示します。
エラー
次の条件の場合、Fchg() は失敗し、Ferror を次の値に設定します。
バッファが適切なバウンダリで開始していません。
バッファがフィールド化されていないか、または Finit() で初期化されていません。
フィールド・オカレンスの削除が必要ですが、指定されたフィールドおよびオカレンスは、フィールド化バッファにありませんでした。
フィールド値は、フィールド化バッファで追加または変更されますが、バッファに十分な領域が残っていません。
指定されたフィールド識別子は無効です。
関連項目
「FML 関数の紹介」、CFchg、CFchg32(3fml)、Fadd、Fadd32(3fml)、Fcmp、Fcmp32(3fml)、Fdel、Fdel32(3fml)
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|