Files
harbour-core/harbour/extras/hbapollo/sde.c
Viktor Szakats 5f686f7ed1 2012-07-22 16:09 UTC+0200 Viktor Szakats (vszakats syenar.net)
* contrib/hbtip/tests/dnldftp.prg
  * contrib/hbtip/tests/upld_ftp.prg
    ! translated output to English. At the same time removed
      non-ASCII (accented) chars.

  ; TOFIX: extras/hbxlsxml which contains high 8-bit chars with
           unspecified codepage, which got corrupted in recent
           changes.
  ; NOTE: Please use 7-bit ASCII chars only in sources and files,
          or, use UTF-8 while setting in SVN:
             svn propset svn:mime-type "text/plain; charset=UTF-8"
          Other codepages are not allowed in SVN, and if you need
          certain high 8-bit bytes or chars, always use Chr() or
          hb_BChar() to create them.

  * extras/hbapollo/global.c
  * extras/hbapollo/hbapollo.hbp
  * extras/hbapollo/sde.c
  * extras/hbapollo/sxapi.h
    ! deleted copied sections from sde7.h 3rd party header
    ! replaced _sx_SysProp() with sx_SysProp() calls. It's
      most probably not valid, but couldn't find the nature
      of the hack in original implementation
    + generate implibs
    ! added hack to make it possible to link statically to
      Apollo libs
    ! disabled C warnings to silence formal warnings resulting
      from above hack

  * extras/hbapollo/tests/hbmk.hbm
    ! minor fix to find .hbc find no in regular location

  * contrib/hbhpdf/core.c
    * formatting
2012-07-22 16:08:19 +00:00

220 lines
9.1 KiB
C

/*
* $Id$
*/
/*
* SixAPI Project source code:
*
* Copyright 2010 Andi Jahja <xharbour@telkom.net.id>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*/
#define __SXAPI_INIT
#include "sxapi.h"
static void __sx_CreateINITFile( const char * pIniFile )
{
FILE * FIniHandle = hb_fopen( pIniFile, "w" );
fprintf( FIniHandle, ";==========================\n" );
fprintf( FIniHandle, ";SIXAPI initialization file\n" );
fprintf( FIniHandle, ";==========================\n" );
/* Notes */
fprintf( FIniHandle, ";DateFormat AMERICAN 0 /* MM/DD/YY */\n" );
fprintf( FIniHandle, ";DateFormat ANSI 1 /* YY.MM.DD */\n" );
fprintf( FIniHandle, ";DateFormat BRITISH 2 /* DD/MM/YY */\n" );
fprintf( FIniHandle, ";DateFormat FRENCH 3 /* DD/MM/YY */\n" );
fprintf( FIniHandle, ";DateFormat GERMAN 4 /* DD.MM.YY */\n" );
fprintf( FIniHandle, ";DateFormat ITALIAN 5 /* DD-MM-YY */\n" );
fprintf( FIniHandle, ";DateFormat SPANISH 6 /* DD-MM-YY */\n\n" );
fprintf( FIniHandle, ";RDEType SDENTX 1\n" );
fprintf( FIniHandle, ";RDEType SDEFOX 2\n" );
fprintf( FIniHandle, ";RDEType SDENSX 3\n" );
fprintf( FIniHandle, ";RDEType SDENSXDBT 4\n\n" );
fprintf( FIniHandle, ";RDEType DBFNTX 1\n" );
fprintf( FIniHandle, ";RDEType DBFFOX 2\n" );
fprintf( FIniHandle, ";RDEType DBFNSX 3\n" );
fprintf( FIniHandle, ";RDEType DBFNSXDBT 4\n\n" );
fprintf( FIniHandle, ";Commit Level\n" );
fprintf( FIniHandle, ";0. Full commit. Always write data to disk. Do not use SDE buffers and force\n" );
fprintf( FIniHandle, ";Windows to write any cached data. This offers the slowest performance\n" );
fprintf( FIniHandle, ";(100x slower than level = 2 in some cases) but the data is guaranteed to\n" );
fprintf( FIniHandle, ";always be saved upon each write.\n" );
fprintf( FIniHandle, ";1. Normal commit. Do not use the SDE buffers, but do not force Windows to\n" );
fprintf( FIniHandle, ";write the cached data. This offers very good performance and allows Windows\n" );
fprintf( FIniHandle, ";to manage the data caching. (Usually 50-100%s slower than level = 2)\n", "%" );
fprintf( FIniHandle, ";2. None. Let the SDE use its buffering mechanisms and do not force Windows\n" );
fprintf( FIniHandle, ";to write the cached data. This offers the best performance\n" );
fprintf( FIniHandle, ";(100x faster than level = 0 in some cases).\n\n" );
fprintf( FIniHandle, ";ErrorLevel\n" );
fprintf( FIniHandle, ";0 No error message at all.\n" );
fprintf( FIniHandle, ";1 Only report Fatal errors (Default).\n" );
fprintf( FIniHandle, ";2 Report all errors.\n\n" );
fprintf( FIniHandle, ";MemoBlock Size\n" );
fprintf( FIniHandle, ";This does not apply to CA-Clipper .DBT memo files, which use\n" );
fprintf( FIniHandle, ";fixed 512 byte blocks.\n" );
fprintf( FIniHandle, ";The default .FPT memo block size is 32 bytes. The default .SMT memo block size\n" );
fprintf( FIniHandle, ";is 1. This function sets a new default block size that will be used when creating\n" );
fprintf( FIniHandle, ";any new table that has memos and will also change the block size in memo files\n" );
fprintf( FIniHandle, ";when the DBF is packed. It does not affect existing memo files except when the\n" );
fprintf( FIniHandle, ";corresponding DBF is packed.\n" );
fprintf( FIniHandle, ";The size must be a value from 1 through 1024.\n\n" );
/* Preset Defaults */
fprintf( FIniHandle, "\n[Setup]\n" );
fprintf( FIniHandle, "SetErrorLevel=1\n" );
fprintf( FIniHandle, "SetCommitLevel=2\n" );
fprintf( FIniHandle, "SetDateFormat=2\n" );
fprintf( FIniHandle, "SetCentury=1\n" );
fprintf( FIniHandle, "SetDeleted=1\n" );
fprintf( FIniHandle, "SetRDDDefault=3\n" );
fprintf( FIniHandle, "SetMemoBlockSize=1\n" );
fprintf( FIniHandle, "AutoOpenIndexIsDisabled=1\n" );
fclose( FIniHandle );
}
static void hb_sixapiRddInit( void * cargo )
{
BYTE bBufferEXE[ 250 ];
char pIniFile[ 256 ];
int iDateFormat,
iCentury,
iDeleted,
iAutoOpenDisabled,
iCommitLevel;
PHB_FNAME pFileName;
HB_SYMBOL_UNUSED( cargo );
GetModuleFileName( NULL, ( char * ) bBufferEXE, 249 );
pFileName = hb_fsFNameSplit( ( const char * ) bBufferEXE );
/* Modifiable SET-UP in SDE.INI */
hb_snprintf( pIniFile, sizeof( pIniFile ), "%s/%s", pFileName->szPath, "sde.ini" );
hb_xfree( pFileName );
if( ! hb_fsFileExists( ( const char * ) pIniFile ) )
__sx_CreateINITFile( ( const char * ) pIniFile );
i_sxApi_Error_Level = GetPrivateProfileInt( "Setup", "SetErrorLevel", 1, pIniFile );
i_sxApi_RDD_Default = GetPrivateProfileInt( "Setup", "SetRDDDefault", 3, pIniFile );
iDateFormat = GetPrivateProfileInt( "Setup", "SetDateFormat", 2, pIniFile );
iDeleted = GetPrivateProfileInt( "Setup", "SetDeleted", 1, pIniFile );
iCentury = GetPrivateProfileInt( "Setup", "SetCentury", 1, pIniFile );
iCommitLevel = GetPrivateProfileInt( "Setup", "SetCommitLevel", 2, pIniFile );
iAutoOpenDisabled = GetPrivateProfileInt( "Setup", "AutoOpenIndexIsDisabled", 1, pIniFile );
i_sxApi_MemoBlock_Size = GetPrivateProfileInt( "Setup", "SetMemoBlockSize", 32, pIniFile );
/* Disable AutoOpen Index File */
if( iAutoOpenDisabled == 1 )
sx_SysProp( SDE_SP_SETDISABLEAUTO, ( PVOID ) 1 );
sx_ErrorLevel( ( WORD ) i_sxApi_Error_Level );
sx_CommitLevel( ( WORD ) iCommitLevel );
sx_SetMemoBlockSize( ( WORD ) i_sxApi_MemoBlock_Size );
/*
C Declaration
INT SDEAPI WINAPI sx_CommitLevel (INT nNewLevel);
Description
Set how and the SDE and Windows writes data to disk.
Parameters
nNewLevel: Value to set the commit level to. Possible values are 0,1 or 2.
0. Full commit. Always write data to disk. Do not use SDE buffers and force
Windows to write any cached data. This offers the slowest performance
(100x slower than level = 2 in some cases) but the data is guaranteed to
always be saved upon each write.
1. Normal commit. Do not use the SDE buffers, but do not force Windows to
write the cached data. This offers very good performance and allows Windows
to manage the data caching. (Usually 50-100% slower than level = 2)
2. None. Let the SDE use its buffering mechanisms and do not force Windows
to write the cached data. This offers the best performance
(100x faster than level = 0 in some cases).
Return Value
Current commit level value.
*/
/* Global Set Ups */
sx_SetStringType( 1 ); /* C strings */
sx_SetCentury( ( WORD ) iCentury ); /* dates to display century */
sx_SetDateFormat( ( WORD ) iDateFormat ); /* date format DD/MM/CCYY */
sx_SetDeleted( ( WORD ) iDeleted ); /* filter deleted records */
/*
Both dBase and Clipper UPPER() and LOWER() case conversion functions
limit the characters eligible for case conversion. With UPPER(), only
characters a-z are converted to upper case. With LOWER(), only
characters A-Z are converted. Characters with diacritical marks ARE NOT
CONVERTED when this switch is HB_TRUE if sx_SetTranslate is also set to HB_TRUE.
To limit case conversion using this switch, set sx_SetTranslate to HB_TRUE
and set the sx_SysProp value on as well.
sx_SetTranslate( HB_TRUE );
sx_SysProp( SDE_SP_SETLIMITCASECONV, (VOIDP)1 );
*/
/* required database to be opened */
#if 0
sx_SetTranslate( HB_TRUE );
sx_SysProp( SDE_SP_SETLIMITCASECONV, (PVOID)1 );
#endif
/* Init PHB_ITEM To Hold Opened DBF */
if( Opened_DBF_Property == NULL )
{
Opened_DBF_Property = hb_itemNew( NULL );
hb_arrayNew( Opened_DBF_Property, 0 );
}
}
static void hb_sixapiRddExit( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
sx_CloseAll();
sx_FinalizeSession();
if( Opened_DBF_Property )
{
hb_itemRelease( Opened_DBF_Property );
Opened_DBF_Property = NULL;
}
}
HB_CALL_ON_STARTUP_BEGIN( _hb_sixapi_rdd_init_ )
hb_vmAtInit( hb_sixapiRddInit, NULL );
hb_vmAtExit( hb_sixapiRddExit, NULL );
HB_CALL_ON_STARTUP_END( _hb_sixapi_rdd_init_ )
#if defined( HB_PRAGMA_STARTUP )
# pragma startup _hb_sixapi_rdd_init_
#elif defined( HB_DATASEG_STARTUP )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( _hb_sixapi_rdd_init_ )
#include "hbiniseg.h"
#endif