;;bcursor.cpp
;;
;;  Changes and additions by //BR
;;
;;BCursor::BCursor(BDatabase *db,
;;                 const char *tableName,
;;                 int indexID,
;;                 BOOL saveEveryChange,
;;                 DBIOpenMode openMode,
;;                 DBIShareMode shareMode,
;;                 XLTMode xltMode)
;;
;;  Changes by //BR
;;    950503
;;      x Changed from using C-style 'malloc' to C++-style 'new'
;;
;;          This allows application to assume all KDBF far heap memory is allocated
;;          via operators new and delete, and to handle mem alloc errors more
;;          consistently (via catching xalloc exception or using
;;          set_new_handler() ).
;;
;;        (Changed all occurrences in bcursor.cpp)
;;
;;Retcode
;;BCursor::close()
;;
;;  Changes by //BR
;;    950503
;;      x Changed from using C-style 'free' to C++-style 'delete'
;;
;;bdatabas.h
;;
;;  Changes and additions by //BR
;;
;;bdatabas.cpp
;;
;;  Changes and additions by //BR
;;
;;BDatabase::BDatabase(BEngine *eng,
;;                     const char *BDDriver,
;;                     const char *BDAlias,
;;                     const char *BDPassword,
;;                     DBIOpenMode openMode,
;;                     DBIShareMode shareMode)
;;
;;  Additions by //BR
;;    950329
;;      x Driver type now defaults to Paradox if neither an alias nor a
;;          driver is specified
;;      x Either NULL or "" argument works for null BDDriver arg
;;      x isLocal is now set properly for cases other than when BDDriver is
;;          provided
;;    941031
;;        Get driver type from IDAPI.CFG if caller doesn't specify
;;        (Assumes PARADOX if STANDARD)
;;
;;        If a blank argument is passed for driver type, the constructor
;;        function calls DbiGetDatabaseDesc() to determine the driver
;;        type ("STANDARD" or some SQL type). If it is "STANDARD", the
;;        driver type is assumed to be "PARADOX" and is stored as such.
;;
;;        This was put in so that the BCursor::BCursor() constructor
;;        which specifies an index name would automatically deal with
;;        a primary index for either PARADOX or INTERBASE, where
;;        the INTERBASE primary (unique) index name is assumed to end with
;;        "XPRIM".
;;
;;BDatabase::BDatabase(BEngine *eng,
;;                     const char* BDDriver,
;;                     const char* BDAlias,
;;                     const char* BDPassword,
;;                     const char* BDUserName, //This is the new (SQL) parameter
;;                     DBIOpenMode openMode = dbiREADWRITE,
;;                     DBIShareMode shareMode = dbiOPENSHARED )
;;
;;  Additions by //BR
;;    950510
;;      x This constructor added to support explicitly passing the SQL username
;;          (overriding the one specified associated with alias BDAlias)
;;
;;          Other behavior is the same as the BR-modified constructor above, which supports
;;          automatically setting the driver type by reading the alias specification
;;
;;Retcode
;;BDatabase::forceWrite(void)
;;
;;  950329
;;    x Incorporated change from Stephen Birch (CIS:BDEVTOOL/04/BDAFIX.ZIP)
;;        Note this is different from Stephen's file since KDBF changed since
;;        then.
;;TReadCfgFileAliasInfo::TReadCfgFileAliasInfo( const char* alias )
;;
;;  DbiOpenCfgInfoList() helper function
;;
;;    Derived from snipit\config.c
;;
;;TReadCfgFileAliasInfo::~TReadCfgFileAliasInfo()
;;
;;protected:
;;void
;;TReadCfgFileAliasInfo::DeInit()
;;
;;BOOL
;;TReadCfgFileAliasInfo::GetParam( const char* prm, string& val )
;;
;;  Get named param
;;
;;  Returns TRUE if succeeded in getting named param
;;
;;BOOL
;;TReadCfgFileAliasInfo::PutParam( const char* prm, const char* val )
;;
;;  Put named param
;;
;;  Returns TRUE if succeeded in putting named param
;;
;;protected:
;;Retcode
;;TReadCfgFileAliasInfo::readCfgFile ( const string& CfgPath )
;;
;;brecord.cpp
;;
;;  Changes and additions by //BR
;;
;;Retcode
;;BRecord::getField(FIELDNUMBER fldnbr, void *buf,
;;                          int bufLen, BOOL& fNull)
;;
;;  950327
;;    x fNull was not set when field type was BLOB
;;
;;Retcode
;;BRecord::putField(FIELDNUMBER fldnbr, const char *buf)
;;
;;  950411
;;    x putField() to blob now works when existing blob is non-null
;;        (calls setNull() first)
;;
;;Retcode
;;BRecord::setNull(FIELDNUMBER fldnbr)
;;
;;  950414
;;    x openBlobWrite() called if necessary (if not previously called by
;;        app)
;;  950119
;;    Changes by //BR
;;      -dbiTruncateBlob() now called for BLOB fields
;;        For BLOB fields, openBlobWrite() must have been called prior
;;
;;Retcode
;;strToTime(const char *str,
;;          BTime *dt)
;;
;;  Additions by //BR
;;    941123
;;      -Blank string returns DBIERR_NONE, 00:00:00. Useful when
;;        converting 'date' types to 'timestamp' types
;;
;;Retcode
;;strToTimeStamp (const char *str, BTimeStamp *dt)
;;
;;  950119
;;    -Accepts alternative format: hh:mm:ss, mm/dd/yyyy
;;      (Orig. fmt. mm/dd/yyyy hh:mm:ss still works as well)
;;
;;      This allows a getField( , char*, )'s returned value
;;      to be used in a putField( , char* ) where the field types
;;      are each of type timestamp. Invalid date error occurred
;;      in call to putField() when the string was formatted
;;      with time first (as returned by getField).
;;  941123
;;    -Null time string converted to 00:00:00
;;
;;Retcode
;;strToDate(const char *str, BDate *dt)
;;
;;  950119
;;    -Leading space no longer causes invalid date error
;;
;;Retcode
;;timeToStr (const BTime *Time, pCHAR szTime)
;;
;;  950119
;;    Changes by //BR
;;      x If IDAPI specifies 24 hr. time format, always put leading 0 for hour
;;
;;envdef.h
;;
;;  Changes and additions by //BR
;;
