campo-sirio/cb/source/d4data.c
alex 3d6c8b3e2d Patch level : 2.0 464
Files correlati     : cb6.dll
Ricompilazione Demo : [ ]
Commento            :
Modifiche per la compilazione Linux


git-svn-id: svn://10.65.10.50/trunk@11080 c028cbd2-c16b-5b4b-a496-9718f37d4682
2003-05-01 15:14:58 +00:00

591 lines
12 KiB
C
Executable File

/* d4data.c (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
#include "d4all.h"
#ifdef __TURBOC__
#pragma hdrstop
#endif /* __TUROBC__ */
#ifndef S4INLINE
#ifdef S4STAND_ALONE
unsigned long S4FUNCTION data4serverId( DATA4 *d4 )
{
return d4->clientId ;
}
unsigned long data4clientId( DATA4 *d4 )
{
return d4->clientId ;
}
#endif
#ifdef S4SERVER
unsigned long S4FUNCTION data4serverId( DATA4 *d4 )
{
return d4->serverId ;
}
unsigned long data4clientId( DATA4 *d4 )
{
return d4->clientId ;
}
#endif
#ifdef S4CLIENT
unsigned long S4FUNCTION data4serverId( DATA4 *d4 )
{
return d4->dataFile->serverId ;
}
unsigned long data4clientId( DATA4 *d4 )
{
return d4->clientId ;
}
#endif
#endif /* S4INLINE */
S4CONST char *S4FUNCTION d4alias( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93301 ) )
return (char *) NULL;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93301 ) ;
return 0 ;
}
#endif
return data->alias ;
}
#ifndef S4SERVER
void S4FUNCTION d4aliasSet( DATA4 *data, const char * newAlias )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93302 ) )
return ;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 || newAlias == 0 )
{
error4( 0, e4parm_null, E93302 ) ;
return ;
}
#endif
u4ncpy( data->alias, newAlias, sizeof( data->alias ) ) ;
#ifndef S4CASE_SEN
c4upper( data->alias ) ;
#endif
return ;
}
#endif /* S4SERVER */
void S4FUNCTION d4blank( DATA4 *data )
{
#ifdef S4CLIENT_OR_FOX
short int loop ;
#endif
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93303 ) )
return ;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93303 ) ;
return ;
}
#endif
#ifndef S4SERVER
#ifndef S4OFF_ENFORCE_LOCK
if ( data->codeBase->lockEnforce && data->recNum > 0L )
if ( d4lockTest( data, data->recNum ) != 1 )
{
error4( data->codeBase, e4lock, E93303 ) ;
return ;
}
#endif
#endif
#ifdef S4CLIENT_OR_FOX
if ( d4version( data ) == 0x30 )
{
/* because some field types record blanks as 0, must do field by field */
data->record[0] = ' ' ; /* reset the deleted flag */
for ( loop = d4numFields( data ) ; loop > 0 ; loop-- )
f4blank( d4fieldJ( data, loop ) ) ;
}
else
memset( data->record, ' ', (unsigned int)dfile4recWidth( data->dataFile ) ) ;
#else
memset( data->record, ' ', (unsigned int)dfile4recWidth( data->dataFile ) ) ;
#endif
data->recordChanged = 1 ;
return ;
}
int S4FUNCTION d4bof( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93304 ) )
return -1;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93304 ) ;
#endif
if ( error4code( data->codeBase ) < 0 )
return e4codeBase ;
return data->bofFlag ;
}
#ifndef S4OFF_WRITE
void S4FUNCTION d4delete( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93305 ) )
return ;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93305 ) ;
return ;
}
#endif
#ifdef E4MISC
if ( data->record[0] != ' ' && data->record[0] != '*' )
{
error4( data->codeBase, e4info, E83301 ) ;
return ;
}
#endif
if ( data->record[0] != '*' )
{
#ifndef S4SERVER
#ifndef S4OFF_ENFORCE_LOCK
if ( data->codeBase->lockEnforce && data->recNum > 0L )
if ( d4lockTest( data, data->recNum ) != 1 )
{
error4( data->codeBase, e4lock, E93305 ) ;
return ;
}
#endif
#endif
data->record[0] = '*' ;
data->recordChanged = 1 ;
}
return ;
}
#endif
#ifndef S4SERVER
int S4FUNCTION d4deleted( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93306 ) )
return -1;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93306 ) ;
#endif
#ifdef E4MISC
if ( data->record[0] != ' ' && data->record[0] != '*' )
return error4( data->codeBase, e4info, E83301 ) ;
#endif
return *data->record != ' ' ;
}
#endif /* S4SERVER */
int S4FUNCTION d4eof( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93307 ) )
return -1;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93307 ) ;
#endif
if ( error4code( data->codeBase ) < 0 )
return e4codeBase ;
return data->eofFlag ;
}
const char *S4FUNCTION d4fileName( DATA4 *data )
{
#ifdef S4CLIENT
CONNECTION4 *connection ;
int rc ;
#endif
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93205 ) ;
return 0 ;
}
#endif
#ifdef S4CLIENT
if ( error4code( data->codeBase ) < 0 )
return 0 ;
connection = data->dataFile->connection ;
connection4assign( connection, CON4DATA_FNAME, data4clientId( data ), data4serverId( data ) ) ;
connection4addData( connection, data->dataFile->accessName, strlen( data->dataFile->accessName ) + 1, 0 ) ;
connection4send( connection ) ;
rc = connection4receive( connection ) ;
if ( rc < 0 )
{
#ifdef E4STACK
error4stack( data->codeBase, rc, E95501 ) ;
#endif
return 0 ;
}
rc = connection4status( connection ) ;
if ( rc < 0 )
{
connection4error( connection, data->codeBase, rc, E95501 ) ;
return 0 ;
}
return connection4data( connection ) ;
#else
return data->dataFile->file.name ;
#endif
}
#ifndef S4OFF_TRAN
#ifdef S4STAND_ALONE
#ifndef S4OFF_WRITE
/* can change LOG4ON-->LOG4TRANS or LOG4TRANS-->LOG4ON */
int S4FUNCTION d4log( DATA4 *data, const int logging )
{
int oldVal ;
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93319 ) ;
#endif
if ( code4transEnabled( data->codeBase ) == 0 )
{
if ( logging == -1 )
return r4logOff ;
else
return error4( data->codeBase, e4trans, E83807 ) ;
}
if ( data->logVal == LOG4ALWAYS )
return r4logOn ;
oldVal = ( data->logVal == 0 ) ? 0 : 1 ;
if ( logging != -1 )
{
if ( logging )
{
if ( data->logVal == LOG4TRANS )
data->logVal = LOG4ON ;
}
else
if ( data->logVal == LOG4ON )
data->logVal = LOG4TRANS ;
}
return oldVal ;
}
#endif /* S4OFF_WRITE */
#endif /* S4STAND_ALONE */
#endif /* S4OFF_TRAN */
short int S4FUNCTION d4numFields( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93308 ) )
return -1;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93308 ) ;
#endif
#ifdef S4CLIENT_OR_FOX
if ( data->fields[data->dataFile->nFields-1].type == '0' ) /* null flags field */
return data->dataFile->nFields - 1 ;
#endif
return data->dataFile->nFields ;
}
#ifndef S4CLIENT
/* currently this function is not used...
int d4read( DATA4 *data, const long recNum, char *ptr )
{
#ifdef E4PARM_LOW
if ( data == 0 || recNum <= 0 || ptr == 0 )
return error4( 0, e4parm, E93309 ) ;
#endif
return dfile4read( data->dataFile, recNum, ptr, 0 ) ;
}
*/
int d4readOld( DATA4 *data, const long recNum )
{
int rc ;
#ifdef E4PARM_LOW
if ( data == 0 || recNum <= 0 )
return error4( 0, e4parm, E93310 ) ;
#endif
if ( error4code( data->codeBase ) < 0 )
return e4codeBase ;
if ( recNum <= 0 )
{
data->recNumOld = recNum ;
memset( data->recordOld, ' ', (unsigned int)dfile4recWidth( data->dataFile ) ) ;
}
if ( data->recNumOld == recNum )
return 0 ;
data->recNumOld = -1 ;
rc = dfile4read( data->dataFile, recNum, data->recordOld, 1 ) ;
if ( rc < 0 )
return -1 ;
if ( rc > 0 )
memset( data->recordOld, ' ', (unsigned int)dfile4recWidth( data->dataFile ) ) ;
data->recNumOld = recNum ;
return 0 ;
}
#endif
#ifndef S4SERVER
#ifndef S4OFF_WRITE
void S4FUNCTION d4recall( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93311 ) )
return ;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93311 ) ;
return ;
}
#endif
#ifdef E4MISC
if ( data->record[0] != ' ' && data->record[0] != '*' )
{
error4( data->codeBase, e4info, E83301 ) ;
return ;
}
#endif
if ( *data->record != ' ' )
{
#ifndef S4SERVER
#ifndef S4OFF_ENFORCE_LOCK
if ( data->codeBase->lockEnforce && data->recNum > 0L )
if ( d4lockTest( data, data->recNum ) != 1 )
{
error4( data->codeBase, e4lock, E93311 ) ;
return ;
}
#endif
#endif
*data->record = ' ' ;
data->recordChanged = 1 ;
}
return ;
}
#endif
#endif
/* returns true if the input count is <= record count */
int d4recCountLessEq( DATA4 *data, long count )
{
long count2 ;
count2 = data->count ;
if ( count2 > data->dataFile->minCount ) /* transaction rollback possibility */
count2 = data->dataFile->minCount ;
if ( count <= count2 )
return 1 ;
data->count = d4recCount( data ) ;
if ( data->count < 0 )
return error4( data->codeBase, (short int)data->count, E93318 ) ;
if ( count <= data->count )
return 1 ;
return 0 ;
}
#ifndef S4OFF_MULTI
/* note that S4OFF_MULTI version just calls dfile4recCount since checking of
locks and serverId are not required */
long S4FUNCTION d4recCountDo( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93312 ) )
return -1L ;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93312 ) ;
#endif
if ( data->dataFile->numRecs >= 0L )
{
#ifndef S4OFF_MULTI
if ( d4lockTestAppend( data ) != 1 )
return data->dataFile->minCount ;
else
#endif
return data->dataFile->numRecs ;
}
return dfile4recCount( data->dataFile, data4serverId( data ) ) ;
}
#endif
long S4FUNCTION d4recNo( DATA4 *data )
{
#ifdef S4VBASIC
if ( c4parm_check( data, 2, E93313 ) )
return -1L;
#endif /* S4VBASIC */
#ifdef E4PARM_HIGH
if ( data == 0 )
return error4( 0, e4parm_null, E93313 ) ;
#endif
return data->recNum ;
}
char *S4FUNCTION d4record( DATA4 *data )
{
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93314 ) ;
return 0 ;
}
#endif
return data->record ;
}
#ifndef S4SERVER
long S4FUNCTION d4recPosition( DATA4 *data, const long rec )
{
#ifdef E4PARM_HIGH
if ( data == 0 || rec <= 0 )
return error4( 0, e4parm, E93315 ) ;
#endif
return dfile4recordPosition( data->dataFile, rec ) ;
}
#endif /* S4SERVER */
unsigned int S4FUNCTION d4recWidth( DATA4 *data )
{
#ifdef E4PARM_HIGH
if ( data == 0 )
{
error4( 0, e4parm_null, E93316 ) ;
return 0 ;
}
#endif
return dfile4recWidth( data->dataFile ) ;
}
#ifdef P4ARGS_USED
#pragma argsused
#endif
int d4verify( DATA4 *d4, const int subs )
{
#ifndef S4OFF_WRITE
#ifdef E4ANALYZE
int rc ;
#endif
#endif
if ( d4 == 0 )
return error4( d4->codeBase, e4parm_null, E93317 ) ;
if ( d4->trans == 0 )
return error4( 0, e4struct, E93317 ) ;
#ifndef S4OFF_WRITE
#ifdef E4ANALYZE
if ( subs == 1 )
if ( ( rc = tran4verify( d4->trans, 1 ) ) < 0 )
return rc ;
#endif
#endif
if ( d4->link.n == 0 || d4->link.p == 0 )
return error4( d4->codeBase, e4struct, E93317 ) ;
#ifndef S4CLIENT
if ( d4->dataFile == 0 )
return error4( d4->codeBase, e4struct, E93317 ) ;
#ifdef E4ANALYZE
if ( subs == 1 )
return dfile4verify( d4->dataFile, 0 ) ;
#endif
#endif
return 0 ;
}
#ifdef S4VB_DOS
char * d4alias_v( DATA4 *d4 )
{
return v4str( d4alias(d4) ) ;
}
void d4aliasSet( DATA4 *d4, const char *alias )
{
d4aliasSet( d4, c4str(alias) ) ;
}
#endif