alex af15e0698b Codebase
git-svn-id: svn://10.65.10.50/trunk@4679 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-16 13:01:08 +00:00

514 lines
10 KiB
C
Executable File

/* d4tag.c (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
#include "d4all.h"
#ifndef S4UNIX
#ifdef __TURBOC__
#pragma hdrstop
#endif
#endif
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4 *S4FUNCTION d4tag( DATA4 *d4, const char* const tagName )
{
#ifndef S4INDEX_OFF
char tagLookup[LEN4TAG_ALIAS+1] ;
TAG4 *tagOn ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E92401 ) )
return 0 ;
#endif
#ifdef E4PARM_HIGH
if ( d4 == 0 || tagName == 0 )
{
error4( 0, e4parm_null, E92401 ) ;
return 0 ;
}
#endif
u4ncpy( tagLookup, tagName, sizeof( tagLookup ) ) ;
c4upper( tagLookup ) ;
for( tagOn = 0 ;; )
{
tagOn = d4tagNext( d4, tagOn ) ;
if ( tagOn == 0 )
break ;
if ( strcmp( tagOn->tagFile->alias, tagLookup ) == 0 )
return tagOn ;
#ifdef S4CLIENT
if ( code4indexFormat( d4->codeBase ) == r4ntx ) /* also check index file access name */
if ( strcmp( tagOn->tagFile->indexFile->accessName, tagLookup ) == 0 )
return tagOn ;
#endif
}
if ( d4->codeBase->errTagName )
error4describe( d4->codeBase, e4tagName, E92401, tagName, 0, 0 ) ;
#endif
return 0 ;
}
#ifndef S4CLIENT
/* for N4OTHER should compare full name, adding extension if required */
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4FILE *dfile4tag( DATA4FILE *d4, const char * const tagName )
{
#ifndef S4INDEX_OFF
char tagLookup[LEN4TAG_ALIAS+1] ;
TAG4FILE *tagOn ;
#ifdef N4OTHER
#ifndef S4CLIENT
char tagLookup2[258] ;
#endif
#endif
#ifdef E4PARM_LOW
if ( d4 == 0 || tagName == 0 )
{
error4( 0, e4parm_null, E91102 ) ;
return 0 ;
}
#endif
#ifdef N4OTHER
#ifndef S4CLIENT
u4nameCurrent( tagLookup2, sizeof( tagLookup2 ), tagName ) ;
u4nameExt( tagLookup2, sizeof( tagLookup2 ), code4indexExtension( d4->c4 ), 0 ) ;
c4upper( tagLookup2 ) ;
#endif
#endif
u4namePiece( tagLookup, sizeof( tagLookup ), tagName, 0, 0 ) ;
c4upper( tagLookup ) ;
for( tagOn = 0 ;; )
{
tagOn = dfile4tagNext( d4, tagOn ) ;
if ( tagOn == 0 )
break ;
if ( strcmp( tagOn->alias, tagLookup ) == 0 )
return tagOn ;
#ifdef N4OTHER
#ifndef S4CLIENT
if ( strcmp( tagOn->file.name, tagLookup2 ) == 0 )
return tagOn ;
#endif
#endif
}
if ( d4->c4->errTagName )
error4describe( d4->c4, e4tagName, E91102, tagName, 0, 0 ) ;
#endif
return 0 ;
}
#endif
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4 *S4FUNCTION d4tagDefault( DATA4 *d4 )
{
#ifndef S4INDEX_OFF
TAG4 *tag ;
INDEX4 *index ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E92403 ) )
return 0 ;
#endif
#ifdef E4PARM_HIGH
if ( d4 == 0 )
{
error4( 0, e4parm_null, E92403 ) ;
return 0 ;
}
#endif
tag = d4->tagSelected ;
if ( tag )
return tag ;
index = (INDEX4 *)l4first( &d4->indexes ) ;
if ( index )
{
tag = (TAG4 *)l4first( &index->tags ) ;
if ( tag )
return tag ;
}
#endif
return 0 ;
}
#ifndef S4CLIENT
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4FILE *dfile4tagDefault( DATA4FILE *d4 )
{
#ifndef S4INDEX_OFF
TAG4FILE *tag ;
#ifdef E4PARM_LOW
if ( d4 == 0 )
{
error4( 0, e4parm_null, E91102 ) ;
return 0 ;
}
#endif
tag = dfile4tagSelected( d4 ) ;
if ( tag )
return tag ;
tag = dfile4tagNext( d4, 0 ) ;
return tag ;
#else
return 0 ;
#endif
}
#endif
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4 *S4FUNCTION d4tagNext( DATA4 *d4, TAG4 * tag )
{
#ifdef S4INDEX_OFF
return 0 ;
#else
INDEX4 *i4 ;
TAG4 * tagOn ;
tagOn = tag ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E92405 ) )
return 0 ;
#endif
#ifdef E4PARM_HIGH
if ( d4 == 0 )
{
error4( 0, e4parm_null, E92405 ) ;
return 0 ;
}
#endif
if ( tagOn == 0 )
{
i4 = (INDEX4 *)l4first( &d4->indexes ) ;
if ( i4 == 0 )
return 0 ;
}
else
{
for ( i4 = 0 ;; )
{
i4 = (INDEX4 *)l4next( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
if ( i4 == tagOn->index )
break ;
}
}
tagOn = (TAG4 *)l4next( &i4->tags, tagOn ) ;
if ( tagOn == 0 )
{
i4 = (INDEX4 *)l4next( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
return (TAG4 *)l4first( &i4->tags ) ;
}
return tagOn ;
#endif
}
#ifndef S4CLIENT
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4FILE *dfile4tagNext( DATA4FILE *d4, TAG4FILE *tagOn )
{
#ifdef S4INDEX_OFF
return 0 ;
#else
#ifndef N4OTHER
INDEX4FILE *i4 ;
#endif
#ifdef E4PARM_LOW
if ( d4 == 0 )
{
error4( 0, e4parm_null, E91102 ) ;
return 0 ;
}
#endif
#ifdef N4OTHER
return (TAG4FILE *)l4next( &d4->tagfiles, tagOn ) ;
#else
if ( tagOn == 0 )
{
i4 = (INDEX4FILE *)l4first( &d4->indexes ) ;
if ( i4 == 0 )
return 0 ;
}
else
i4 = tagOn->indexFile ;
tagOn = (TAG4FILE *)l4next( &i4->tags, tagOn ) ;
if ( tagOn )
return tagOn ;
i4 = (INDEX4FILE *)l4next( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
return (TAG4FILE *)l4first( &i4->tags ) ;
#endif /* N4OTHER */
#endif
}
#endif
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4 *S4FUNCTION d4tagPrev( DATA4 *d4, TAG4 *tag )
{
#ifdef S4INDEX_OFF
return 0 ;
#else
INDEX4 *i4 ;
TAG4 * tagOn ;
tagOn = tag ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E92407 ) )
return 0 ;
#endif
#ifdef E4PARM_HIGH
if ( d4 == 0 )
{
error4( 0, e4parm_null, E92407 ) ;
return 0 ;
}
#endif
if ( tagOn == 0 )
{
i4 = (INDEX4 *)l4last( &d4->indexes ) ;
if ( i4 == 0 )
return 0 ;
}
else
{
for ( i4 = 0 ;; )
{
i4 = (INDEX4 *)l4prev( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
if ( i4 == tagOn->index )
break ;
}
}
tagOn = (TAG4 *)l4prev( &i4->tags, tagOn ) ;
if ( tagOn == 0 )
{
i4 = (INDEX4 *)l4prev( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
return (TAG4 *)l4last( &i4->tags ) ;
}
return tagOn ;
#endif
}
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4FILE *dfile4tagPrev( DATA4FILE *d4, TAG4FILE *tagOn )
{
#ifdef S4INDEX_OFF
return 0 ;
#else
#ifndef N4OTHER
INDEX4FILE *i4 ;
#endif
#ifdef E4PARM_LOW
if ( d4 == 0 )
{
error4( 0, e4parm_null, E91102 ) ;
return 0 ;
}
#endif
#ifdef N4OTHER
return (TAG4FILE *)l4prev( &d4->tagfiles, tagOn ) ;
#else
if ( tagOn == 0 )
{
i4 = (INDEX4FILE *)l4last( &d4->indexes ) ;
if ( i4 == 0 )
return 0 ;
}
else
i4 = tagOn->indexFile ;
tagOn = (TAG4FILE *)l4prev( &i4->tags, tagOn ) ;
if ( tagOn )
return tagOn ;
i4 = (INDEX4FILE *)l4prev( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
return (TAG4FILE *)l4last( &i4->tags ) ;
#endif
#endif
}
#ifdef P4ARGS_USED
#pragma argsused
#endif
void S4FUNCTION d4tagSelect( DATA4 *d4, TAG4 *t4 )
{
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E92409 ) )
return ;
#endif
#ifdef E4PARM_HIGH
if ( d4 == 0 )
{
error4( 0, e4parm_null, E92409 ) ;
return ;
}
#endif
#ifdef S4INDEX_OFF
if ( t4 != 0 )
{
error4( d4->codeBase, e4notIndex, E92409 ) ;
return ;
}
#else
d4->tagSelected = t4 ;
#endif
return ;
}
#ifndef S4CLIENT
int dfile4tagSelect( DATA4FILE *d4, TAG4FILE *t4 )
{
#ifdef E4PARM_LOW
if ( d4 == 0 )
return error4( 0, e4parm_null, E91102 ) ;
#endif
#ifdef S4INDEX_OFF
if ( t4 != 0 )
error4( d4->c4, e4notIndex, E91102 ) ;
#else
#ifdef N4OTHER
d4->tagfiles.selected = (LINK4 *)t4 ;
#else
#ifdef E4ANALYZE
if ( t4 )
if ( t4->indexFile->dataFile != d4 )
return error4( t4->codeBase, e4struct, E91102 ) ;
#endif
if ( t4 == 0 )
d4->indexes.selected = 0 ;
else
{
d4->indexes.selected = (LINK4 *)t4->indexFile ;
t4->indexFile->tags.selected = (LINK4 *)t4 ;
}
#endif
#endif
return 0 ;
}
#endif
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4 *S4FUNCTION d4tagSelected( DATA4 *d4 )
{
#ifndef S4INDEX_OFF
#ifdef E4PARM_HIGH
if ( d4 == 0 )
{
error4( 0, e4parm_null, E92411 ) ;
return 0 ;
}
#endif
return d4->tagSelected ;
#else
return 0 ;
#endif
}
#ifndef S4CLIENT
#ifdef P4ARGS_USED
#pragma argsused
#endif
TAG4FILE *dfile4tagSelected( DATA4FILE *d4 )
{
#ifndef S4INDEX_OFF
#ifndef N4OTHER
INDEX4FILE *index ;
TAG4FILE *tag ;
#endif
#ifdef E4PARM_LOW
if ( d4 == 0 )
{
error4( 0, e4parm_null, E91102 ) ;
return 0 ;
}
#endif
#ifdef N4OTHER
return (TAG4FILE *)d4->tagfiles.selected ;
#else
index = (INDEX4FILE *)d4->indexes.selected ;
if ( index )
{
tag = (TAG4FILE *)index->tags.selected ;
if ( tag )
return tag ;
}
return (TAG4FILE *)0 ;
#endif
#else
return (TAG4FILE *)0 ;
#endif
}
#endif
#ifdef S4VB_DOS
TAG4 *d4tag_v( DATA4 *d4, char *name )
{
return d4tag( d4, c4str(name) ) ;
}
#endif