Back to home page

Enduro/X

 
 

    


0001 /**
0002  * @brief UBF API library
0003  *
0004  * @file ubf.h
0005  */
0006 /* -----------------------------------------------------------------------------
0007  * Enduro/X Middleware Platform for Distributed Transaction Processing
0008  * Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0009  * Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0010  * This software is released under one of the following licenses:
0011  * AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0012  * See LICENSE file for full text.
0013  * -----------------------------------------------------------------------------
0014  * AGPL license:
0015  *
0016  * This program is free software; you can redistribute it and/or modify it under
0017  * the terms of the GNU Affero General Public License, version 3 as published
0018  * by the Free Software Foundation;
0019  *
0020  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0021  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0022  * PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0023  * for more details.
0024  *
0025  * You should have received a copy of the GNU Affero General Public License along 
0026  * with this program; if not, write to the Free Software Foundation, Inc.,
0027  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0028  *
0029  * -----------------------------------------------------------------------------
0030  * A commercial use license is available from Mavimax, Ltd
0031  * contact@mavimax.com
0032  * -----------------------------------------------------------------------------
0033  */
0034 #ifndef UBF_H
0035 #define UBF_H
0036 
0037 #if defined(__cplusplus)
0038 extern "C" {
0039 #endif
0040 
0041 /*---------------------------Includes-----------------------------------*/
0042 #include <stdio.h>
0043 #include <ndrx_config.h>
0044 #include <exdb.h>
0045 #include <expluginbase.h>   /**<for log printing hooking  */
0046 /*---------------------------Externs------------------------------------*/
0047 /*---------------------------Macros-------------------------------------*/
0048 
0049 #define UBF_VERSION     1
0050 #define UBF_EXTENDED
0051 #define MAXUBFLEN   0xffffffff       /**< Maximum UBFH length               */
0052 
0053 #define UBFFLDMAX   64               /**< Max UBF buffer field len          */
0054 /* UFB field types, suggest the c data types */
0055     
0056 /** Minimum data type code                                                  */
0057 #define BFLD_MIN        0
0058 /** 'short' C data type for UBF buffer                                      */
0059 #define BFLD_SHORT  0
0060 /** 'long' C data type for UBF buffer                                       */
0061 #define BFLD_LONG   1
0062 /** 'char' C data type for UBF field                                        */
0063 #define BFLD_CHAR   2
0064 /** 'float' C data type for UBF field                                       */
0065 #define BFLD_FLOAT  3
0066 /** 'double' C data type for UBF field                                      */
0067 #define BFLD_DOUBLE 4
0068 /** 'char *' C data type for UBF field (zero terminated string)             */
0069 #define BFLD_STRING 5
0070 /** byte array data type                                                    */
0071 #define BFLD_CARRAY 6
0072     
0073 #define BFLD_INT        7   /**< Used for view access                       */
0074 #define BFLD_RFU0       8   /**< Reserved for future use                    */
0075 #define BFLD_PTR        9   /**< pointer to a buffer                        */
0076 #define BFLD_UBF        10  /**< embedded FML32 buffer                      */
0077 #define BFLD_VIEW       11  /**< embedded VIEW32 buffer                     */
0078 
0079 #define BFLD_MAX    11
0080 
0081 /** invalid field id - returned from functions where field id not found     */
0082 #define BBADFLDID (BFLDID)0
0083 /** define an invalid field id used for first call to Bnext                 */
0084 #define BFIRSTFLDID (BFLDID)0
0085 /** Indicates the termination of FLDID,OCC,..,FLDID,OCC,BBADFLDOCC list     */
0086 #define BBADFLDOCC (BFLDID)-1
0087 /** Max number of FLD,OCC pairs for recursive lookup */
0088 #define BFLDOCCMAX (BFLDID)128  
0089 
0090 #define BMINVAL             0  /**< min error */
0091 #define BERFU0              1  /**< Reserved for future use */
0092 #define BALIGNERR           2  /**< Buffer not aligned to platform address or corrupted */
0093 #define BNOTFLD             3  /**< Buffer not fielded / TLV formatted          */
0094 #define BNOSPACE            4  /**< No space in buffer */
0095 #define BNOTPRES            5  /**< Field not present */
0096 #define BBADFLD             6  /**< Bad field ID */
0097 #define BTYPERR             7  /**< Bad field type */
0098 #define BEUNIX              8  /**< System error occurred */
0099 #define BBADNAME            9  /**< Bad field name */
0100 #define BMALLOC             10 /**< Malloc failed, out of mem? */
0101 #define BSYNTAX             11 /**< UBF Boolean expression error or UBF bad text format */
0102 #define BFTOPEN             12 /**< Failed to open field tables */
0103 #define BFTSYNTAX           13 /**< Field table syntax error */
0104 #define BEINVAL             14 /**< Invalid value */
0105 #define BERFU1              15 /**< Reserved for future use */
0106 #define BBADTBL             16 /**< Reserved for future use */
0107 #define BBADVIEW            17 /**< Invalid compiled VIEW file */
0108 #define BVFSYNTAX           18 /**< Source VIEW file syntax error */
0109 #define BVFOPEN             19 /**< Failed to open VIEW file */
0110 #define BBADACM             20 /**< Reserved for future use */
0111 #define BNOCNAME            21 /**< Structure field not found for VIEW */
0112 #define BEBADOP             22 /**< Buffer operation not supported (complex type) */
0113 #define BMAXVAL             22 /**< max error */
0114     
0115 /* Bvopt options: */
0116 #define B_FTOS              1 /**< flag S, one way UBF->Struct          */
0117 #define B_STOF              2 /**< flag F, one way Struct->UBF          */
0118 #define B_OFF               3 /**< Zero way mapping, N                  */
0119 #define B_BOTH              4 /**< both F & S                           */
0120 #define BF_LENGTH       UBFFLDMAX /**< Left for older API compatilbity  */
0121     
0122 #define BUPDATE             1   /**< Update buffer */
0123 #define BOJOIN              2   /**< outer joing buffers, RFU */
0124 #define BJOIN               3   /**< join buffers, RFU */
0125 #define BCONCAT             4   /**< contact buffers */
0126     
0127 /* Configuration: */
0128 #define CONF_NDRX_UBFMAXFLDS     "NDRX_UBFMAXFLDS"
0129 
0130 #define Berror  (*ndrx_Bget_Ferror_addr())
0131 #define BFLDID32 BFLDID
0132     
0133 #define BVACCESS_NOTNULL    0x00000001  /* return value only if not NULL */
0134 
0135 /* View settings: */    
0136 #define NDRX_VIEW_CNAME_LEN             256  /* Max c field len in struct   */
0137 #define NDRX_VIEW_FLAGS_LEN             16   /* Max flags                   */
0138 #define NDRX_VIEW_NULL_LEN              2660 /* Max len of the null value   */
0139 /*XATMI_SUBTYPE_LEN  from atmi*/
0140 /* Same as XATMI_SUBTYPE_LEN */
0141 #define NDRX_VIEW_NAME_LEN              33   /* Max len of view name        */
0142 #define NDRX_VIEW_COMPFLAGS_LEN         128  /* Compiled flags len          */
0143 /*---------------------------Enums--------------------------------------*/
0144 /*---------------------------Typedefs-----------------------------------*/
0145     
0146 typedef int BFLDID;
0147 typedef int BFLDLEN;
0148 typedef int BFLDOCC;
0149 typedef struct Ubfh UBFH;
0150 
0151 
0152 /**
0153  * Handler for adding view to UBF buffer
0154  */
0155 typedef struct
0156 { 
0157     unsigned int vflags;                /**< RFU flags                  */
0158     char vname[NDRX_VIEW_NAME_LEN+1];   /**< View field name            */ 
0159     char *data;                         /**< pointer to view structure  */ 
0160 } BVIEWFLD;
0161 
0162 /**
0163  * Temporary store for returned UBF value
0164  * thread related...
0165  */
0166 typedef struct
0167 {
0168     BVIEWFLD vdata;
0169 } ndrx_ubf_tls_bufval_t;
0170 
0171 /**
0172  *  Bnext state struct 
0173  */
0174 struct Bnext_state
0175 {
0176     BFLDID *p_cur_bfldid;
0177     BFLDOCC cur_occ;
0178     UBFH *p_ub;
0179     size_t size;
0180     /** view data returned by Bnext */
0181     ndrx_ubf_tls_bufval_t vstorage;
0182 };
0183 typedef struct Bnext_state Bnext_state_t;
0184 
0185 /**
0186  * Next state for view iteration...
0187  */
0188 struct Bvnext_state
0189 {
0190     void *v;
0191     void *vel;
0192 };
0193 typedef struct Bvnext_state Bvnext_state_t;
0194 
0195 /* get_loc state info */
0196 typedef struct
0197 {
0198     BFLDID *last_checked;
0199     BFLDID last_Baddfast; /** last field used by Baddfast */
0200 } Bfld_loc_info_t;
0201 
0202 /*---------------------------Globals------------------------------------*/
0203 /*---------------------------Statics------------------------------------*/
0204 /*---------------------------Prototypes---------------------------------*/
0205 extern NDRX_API int * ndrx_Bget_Ferror_addr (void);
0206 extern NDRX_API int * _Bget_Ferror_addr (void); /* for backwards compatibility */
0207 extern NDRX_API int Blen (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ);
0208 extern NDRX_API int CBadd (UBFH *p_ub, BFLDID bfldid, char * buf, BFLDLEN len, int usrtype);
0209 extern NDRX_API int CBchg (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, char * buf, BFLDLEN len, int usrtype);
0210 extern NDRX_API int CBget (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, char *buf, BFLDLEN *len, int usrtype);
0211 extern NDRX_API int Bdel (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ);
0212 extern NDRX_API int Bpres (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ);
0213 extern NDRX_API int Bproj (UBFH * p_ub, BFLDID * fldlist);
0214 extern NDRX_API int Bprojcpy (UBFH * p_ub_dst, UBFH * p_ub_src, BFLDID * fldlist);
0215 extern NDRX_API BFLDID Bfldid (char *fldnm);
0216 extern NDRX_API char * Bfname (BFLDID bfldid);
0217 extern NDRX_API int Bcpy (UBFH * p_ub_dst, UBFH * p_ub_src);
0218 extern NDRX_API int Bchg (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, char * buf, BFLDLEN len);
0219 extern NDRX_API int Binit (UBFH * p_ub, BFLDLEN len);
0220 extern NDRX_API int Bnext (UBFH *p_ub, BFLDID *bfldid, BFLDOCC *occ, char *buf, BFLDLEN *len);
0221 extern NDRX_API int Bnext2(Bnext_state_t *bnext_state, UBFH *p_ub, BFLDID *bfldid, BFLDOCC *occ, char *buf, BFLDLEN *len, char **d_ptr);
0222 extern NDRX_API int Bget (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ, char * buf, BFLDLEN * buflen);
0223 extern NDRX_API char * Bboolco (char * expr);
0224 extern NDRX_API char * Bfind (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ, BFLDLEN * p_len);
0225 extern NDRX_API int Bboolev (UBFH * p_ub, char *tree);
0226 extern NDRX_API double Bfloatev (UBFH * p_ub, char *tree);
0227 extern NDRX_API int Badd (UBFH *p_ub, BFLDID bfldid, char *buf, BFLDLEN len);
0228 extern NDRX_API int Baddfast (UBFH *p_ub, BFLDID bfldid, char *buf, BFLDLEN len, Bfld_loc_info_t *next_fld);
0229 extern NDRX_API int CBaddfast (UBFH *p_ub, BFLDID bfldid, char *buf, BFLDLEN len,
0230         int usrtype, Bfld_loc_info_t *next_fld);
0231 extern NDRX_API char * Becodestr(int err);
0232 extern NDRX_API void B_error (char *str);
0233 extern NDRX_API char * Bstrerror (int err);
0234 extern NDRX_API BFLDID Bmkfldid (int fldtype, BFLDID bfldid);
0235 extern NDRX_API BFLDOCC Boccur (UBFH * p_ub, BFLDID bfldid);
0236 extern NDRX_API long Bused (UBFH *p_ub);
0237 extern NDRX_API int Bfldtype (BFLDID bfldid);
0238 extern NDRX_API int Bdelall (UBFH *p_ub, BFLDID bfldid);
0239 extern NDRX_API int Bdelete (UBFH *p_ub, BFLDID *fldlist);
0240 extern NDRX_API BFLDOCC Bfldno (BFLDID bfldid);
0241 extern NDRX_API long Bunused (UBFH *p_ub);
0242 extern NDRX_API long Bsizeof (UBFH *p_ub);
0243 extern NDRX_API char * Btype (BFLDID bfldid);
0244 extern NDRX_API int Bfree (UBFH *p_ub);
0245 extern NDRX_API UBFH * Balloc (BFLDOCC f, BFLDLEN v);
0246 extern NDRX_API UBFH * Brealloc (UBFH *p_ub, BFLDOCC f, BFLDLEN v);
0247 extern NDRX_API int Bupdate (UBFH *p_ub_dst, UBFH *p_ub_src);
0248 extern NDRX_API int Bconcat (UBFH *p_ub_dst, UBFH *p_ub_src);
0249 extern NDRX_API char * CBfind (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ, BFLDLEN * len, int usrtype);
0250 extern NDRX_API char * CBgetalloc (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ, int usrtype, BFLDLEN *extralen);
0251 extern NDRX_API BFLDOCC CBfindocc (UBFH *p_ub, BFLDID bfldid,
0252                                         char * buf, BFLDLEN len, int usrtype);
0253 extern NDRX_API BFLDOCC Bfindocc (UBFH *p_ub, BFLDID bfldid,
0254                                         char * buf, BFLDLEN len);
0255 extern NDRX_API char * Bgetalloc (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ, BFLDLEN *extralen);
0256 extern NDRX_API char * Bfindlast (UBFH * p_ub, BFLDID bfldid,
0257                                     BFLDOCC *occ, BFLDLEN *len);
0258 extern NDRX_API int Bgetlast (UBFH *p_ub, BFLDID bfldid,
0259                         BFLDOCC *occ, char *buf, BFLDLEN *len);
0260 extern NDRX_API int Bprint (UBFH *p_ub);
0261 extern NDRX_API int Bfprint (UBFH *p_ub, FILE * outf);
0262 extern NDRX_API int Bfprintcb (UBFH *p_ub, ndrx_plugin_tplogprintubf_hook_t p_writef, void *dataptr1);
0263 extern NDRX_API char * Btypcvt (BFLDLEN * to_len, int to_type,
0264                     char *from_buf, int from_type, BFLDLEN from_len);
0265 extern NDRX_API int Bextread (UBFH * p_ub, FILE *inf);
0266 extern NDRX_API int Bextreadcb (UBFH * p_ub, 
0267         long (*p_readf)(char *buffer, long bufsz, void *dataptr1), void *dataptr1);
0268 extern NDRX_API void Bboolpr (char * tree, FILE *outf);
0269 extern NDRX_API void Bboolprcb (char * tree, 
0270         int (*p_writef)(char *buffer, long datalen, void *dataptr1), void *dataptr1);
0271 extern NDRX_API int Bread (UBFH * p_ub, FILE * inf);
0272 extern int Breadcb (UBFH * p_ub, 
0273         long (*p_readf)(char *buffer, long bufsz, void *dataptr1), void *dataptr1);
0274 extern NDRX_API int Bwrite (UBFH *p_ub, FILE * outf);
0275 extern NDRX_API int Bwritecb (UBFH *p_ub, 
0276         long (*p_writef)(char *buffer, long bufsz, void *dataptr1), void *dataptr1);
0277 extern NDRX_API void Btreefree (char *tree);
0278 /* Callback function that can be used from expressions */
0279 extern NDRX_API int Bboolsetcbf (char *funcname, long (*functionPtr)(UBFH *p_ub, char *funcname));
0280 extern NDRX_API int Bboolsetcbf2 (char *funcname, long (*functionPtr)(UBFH *p_ub, char *funcname, char *arg1));
0281 extern NDRX_API int Badds (UBFH *p_ub, BFLDID bfldid, char *buf);
0282 extern NDRX_API int Bchgs (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, char *buf);
0283 extern NDRX_API int Bgets (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, char *buf);
0284 extern NDRX_API char * Bgetsa (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, BFLDLEN *extralen);
0285 extern NDRX_API char * Bfinds (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ);
0286 extern NDRX_API int Bisubf (UBFH *p_ub);
0287 extern NDRX_API int Bindex (UBFH * p_ub, BFLDOCC occ);
0288 extern NDRX_API BFLDOCC Bunindex (UBFH * p_ub);
0289 extern NDRX_API long Bidxused (UBFH * p_ub);
0290 extern NDRX_API int Brstrindex (UBFH * p_ub, BFLDOCC occ);
0291 
0292 extern NDRX_API int Bjoin(UBFH *dest, UBFH *src);
0293 extern NDRX_API int Bojoin(UBFH *dest, UBFH *src);
0294 
0295 extern NDRX_API int Bcmp(UBFH *p_ubf1, UBFH *p_ubf2);
0296 extern NDRX_API int Bsubset(UBFH *p_ubf1, UBFH *p_ubf2);
0297 extern NDRX_API BFLDOCC Bnum (UBFH * p_ub);
0298 extern NDRX_API long Bneeded(BFLDOCC nrfields, BFLDLEN totsize);
0299 
0300 /* VIEW related */
0301 extern NDRX_API int Bvnull(char *cstruct, char *cname, BFLDOCC occ, char *view);
0302 extern NDRX_API int Bvselinit(char *cstruct, char *cname, char *view);
0303 extern NDRX_API int Bvsinit(char *cstruct, char *view);
0304 extern NDRX_API void Bvrefresh(void);
0305 extern NDRX_API int Bvopt(char *cname, int option, char *view);
0306 extern NDRX_API int Bvftos(UBFH *p_ub, char *cstruct, char *view);
0307 extern NDRX_API int Bvstof(UBFH *p_ub, char *cstruct, int mode, char *view);
0308 
0309 extern NDRX_API int CBvget(char *cstruct, char *view, char *cname, BFLDOCC occ, 
0310              char *buf, BFLDLEN *len, int usrtype, long flags);
0311 extern NDRX_API char *CBvgetalloc(char *cstruct, char *view, char *cname, BFLDOCC occ, 
0312             int usrtype, long flags, BFLDLEN *extralen);
0313 extern NDRX_API int CBvchg(char *cstruct, char *view, char *cname, BFLDOCC occ, 
0314              char *buf, BFLDLEN len, int usrtype);
0315 extern NDRX_API long Bvsizeof(char *view);
0316 extern NDRX_API long Bvcpy(char *cstruct_dst, char *cstruct_src, char *view);
0317 extern NDRX_API BFLDOCC Bvoccur(char *cstruct, char *view, char *cname, 
0318         BFLDOCC *maxocc, BFLDOCC *realocc, long *dim_size, int* fldtype);
0319 extern NDRX_API int Bvsetoccur(char *cstruct, char *view, char *cname, BFLDOCC occ);
0320 extern NDRX_API int Bvnext (Bvnext_state_t *state, char *view, char *cname, 
0321                 int *fldtype, BFLDOCC *maxocc, long *dim_size);
0322 extern NDRX_API int Bvcmp(char *cstruct1, char *view1, char *cstruct2, char *view2);
0323 
0324 extern NDRX_API int Bvprint (char *cstruct, char *view);
0325 extern NDRX_API int Bvfprint (char *cstruct, char *view, FILE * outf);
0326 
0327 extern NDRX_API int Bvfprintcb (char *cstruct, char *view,
0328         ndrx_plugin_tplogprintubf_hook_t p_writef, void *dataptr1);
0329 extern NDRX_API int Bvextread(char *cstruct, char *view, FILE *inf);
0330 extern NDRX_API int Bvextreadcb(char *cstruct, char *view, 
0331         long (*p_readf)(char *buffer, long bufsz, void *dataptr1), void *dataptr1);
0332 
0333 /* VIEW related, END */
0334 
0335 /* ATMI library TLS: */
0336 extern NDRX_API void * ndrx_ubf_tls_get(void);
0337 extern NDRX_API int ndrx_ubf_tls_set(void *data);
0338 extern NDRX_API void ndrx_ubf_tls_free(void *data);
0339 extern NDRX_API void * ndrx_ubf_tls_new(int auto_destroy, int auto_set);
0340 
0341 
0342 /* Custom field database API: */
0343 
0344 extern NDRX_API EDB_env * Bfldddbgetenv (EDB_dbi **dbi_id, EDB_dbi **dbi_nm);
0345 extern NDRX_API int Bflddbload(void);
0346 extern NDRX_API BFLDID Bflddbid (char *fldname);
0347 extern NDRX_API char * Bflddbname (BFLDID bfldid);
0348 extern NDRX_API int Bflddbget(EDB_val *data, short *p_fldtype,
0349         BFLDID *p_bfldno, BFLDID *p_bfldid, char *fldname, int fldname_bufsz);
0350 extern NDRX_API int Bflddbunlink(void);
0351 extern NDRX_API void Bflddbunload(void);
0352 extern NDRX_API int Bflddbdrop(EDB_txn *txn);
0353 extern NDRX_API int Bflddbdel(EDB_txn *txn, BFLDID bfldid);
0354 extern NDRX_API int Bflddbadd(EDB_txn *txn, short fldtype, BFLDID bfldno, 
0355         char *fldname);
0356 
0357 extern NDRX_API int B32to16(UBFH *dest, UBFH *src);
0358 extern NDRX_API int B16to32(UBFH *dest, UBFH *src);
0359 
0360 
0361 /* Recursive API: */
0362 
0363 extern NDRX_API int Bgetr (UBFH * p_ub, BFLDID *fldidocc, char * buf, BFLDLEN * buflen);
0364 extern NDRX_API int Bgetrv (UBFH * p_ub, char * buf, BFLDLEN * buflen, ...);
0365 
0366 extern NDRX_API int CBgetr (UBFH * p_ub, BFLDID *fldidocc,
0367                             char * buf, BFLDLEN * buflen, int usrtype);
0368 extern NDRX_API int CBgetrv (UBFH * p_ub, char * buf, BFLDLEN * buflen, int usrtype, ...);
0369 
0370 extern NDRX_API char * CBgetallocr (UBFH *p_ub, BFLDID *fldidocc, int usrtype, BFLDLEN *extralen);
0371 extern NDRX_API char * CBgetallocrv (UBFH *p_ub, int usrtype, BFLDLEN *extralen, ...);
0372 
0373 extern NDRX_API char* Bfindr (UBFH *p_ub, BFLDID *fldidocc, BFLDLEN *p_len);
0374 extern NDRX_API char* Bfindrv (UBFH *p_ub, BFLDLEN *p_len, ...);
0375 
0376 extern NDRX_API char *CBfindr (UBFH *p_ub, BFLDID *fldidocc, BFLDLEN *len, int usrtype);
0377 extern NDRX_API char *CBfindrv (UBFH *p_ub, BFLDLEN *len, int usrtype, ...);
0378 
0379 extern NDRX_API int Bpresr (UBFH *p_ub, BFLDID *fldidocc);
0380 extern NDRX_API int Bpresrv (UBFH *p_ub, ...);
0381 
0382 extern NDRX_API int CBvgetr(UBFH *p_ub, BFLDID *fldidocc, char *cname, BFLDOCC occ, 
0383              char *buf, BFLDLEN *len, int usrtype, long flags);
0384 extern NDRX_API int CBvgetrv(UBFH *p_ub, char *cname, BFLDOCC occ,
0385             char *buf, BFLDLEN *len, int usrtype, long flags, ...);
0386 
0387 extern NDRX_API int Bvnullr(UBFH *p_ub, BFLDID *fldidocc, char *cname, BFLDOCC occ);
0388 extern NDRX_API int Bvnullrv(UBFH *p_ub, char *cname, BFLDOCC occ, ...);
0389 
0390 extern NDRX_API char * CBvgetallocr(UBFH *p_ub, BFLDID *fldidocc, char *cname, BFLDOCC occ, 
0391             int usrtype, long flags, BFLDLEN *extralen);
0392 
0393 extern NDRX_API char* CBvgetallocrv(UBFH *p_ub, char *cname, BFLDOCC occ,
0394             int usrtype, long flags, BFLDLEN *extralen, ...);
0395 
0396 
0397 /* FML Specifics: */
0398 extern NDRX_API int ndrx_Fchg (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, char * buf, BFLDLEN len);
0399 extern NDRX_API int ndrx_Fadd (UBFH *p_ub, BFLDID bfldid, char *buf, BFLDLEN len);
0400 
0401 #if defined(__cplusplus)
0402 }
0403 #endif
0404 
0405 #endif
0406 /* vim: set ts=4 sw=4 et smartindent: */