campo-sirio/cb5/d4tag.c
alex a0f5e0898b This commit was generated by cvs2svn to compensate for changes in r975,
which included commits to RCS files with non-trunk default branches.

git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
1995-02-06 15:33:45 +00:00

225 lines
3.7 KiB
C
Executable File

/* d4tag.c (c)Copyright Sequiter Software Inc., 1990-1994. All rights reserved. */
#include "d4all.h"
#ifndef S4UNIX
#ifdef __TURBOC__
#pragma hdrstop
#endif
#endif
TAG4 *S4FUNCTION d4tag( DATA4 *d4, char *tag_name )
{
#ifndef S4INDEX_OFF
char tag_lookup[11] ;
TAG4 *tag_on ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E4_D4TAG ) )
return 0 ;
#endif
if ( d4 == 0 || tag_name == 0 )
#ifdef S4DEBUG
e4severe( e4parm, E4_D4TAG ) ;
#else
return 0 ;
#endif
u4ncpy( tag_lookup, tag_name, sizeof( tag_lookup ) ) ;
c4upper( tag_lookup ) ;
for( tag_on = 0 ;; )
{
tag_on = d4tag_next( d4, tag_on ) ;
if ( tag_on == 0 )
break ;
if ( strcmp( tag_on->alias, tag_lookup ) == 0 )
return tag_on ;
}
if ( d4->code_base->tag_name_error )
e4( d4->code_base, e4tag_name, tag_name ) ;
#endif
return 0 ;
}
TAG4 *S4FUNCTION d4tag_default( DATA4 *d4 )
{
#ifndef S4INDEX_OFF
TAG4 *tag ;
INDEX4 *index ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E4_D4TAG_DEF ) )
return 0 ;
#endif
if ( d4 == 0 )
#ifdef S4DEBUG
e4severe( e4parm, E4_D4TAG_DEF ) ;
#else
return 0 ;
#endif
tag = d4tag_selected( d4 ) ;
if ( tag )
return tag ;
index = (INDEX4 *) l4first( &d4->indexes ) ;
if ( index )
{
tag = (TAG4 *) l4first( &index->tags ) ;
if ( tag )
return tag ;
}
#endif
return 0 ;
}
TAG4 *S4FUNCTION d4tag_next( DATA4 *d4, TAG4 *tag_on )
{
#ifdef S4INDEX_OFF
return 0 ;
#else
INDEX4 *i4 ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E4_D4TAG_NEXT ) )
return 0 ;
#endif
if ( d4 == 0 )
#ifdef S4DEBUG
e4severe( e4parm, E4_D4TAG_NEXT ) ;
#else
return 0 ;
#endif
if ( tag_on == 0 )
{
i4 = (INDEX4 *)l4first( &d4->indexes ) ;
if ( i4 == 0 )
return 0 ;
}
else
i4 = tag_on->index ;
tag_on = (TAG4 *)l4next( &i4->tags, tag_on ) ;
if ( tag_on )
return tag_on ;
i4 = (INDEX4 *)l4next( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
return (TAG4 *)l4first( &i4->tags ) ;
#endif
}
TAG4 *S4FUNCTION d4tag_prev( DATA4 *d4, TAG4 *tag_on )
{
#ifdef S4INDEX_OFF
return 0 ;
#else
INDEX4 *i4 ;
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E4_D4TAG_PREV ) )
return 0 ;
#endif
if ( d4 == 0 )
#ifdef S4DEBUG
e4severe( e4parm, E4_D4TAG_PREV ) ;
#else
return 0 ;
#endif
if ( tag_on == 0 )
{
i4 = (INDEX4 *)l4last( &d4->indexes ) ;
if ( i4 == 0 )
return 0 ;
}
else
i4 = tag_on->index ;
tag_on = (TAG4 *)l4prev( &i4->tags, tag_on ) ;
if ( tag_on )
return tag_on ;
i4 = (INDEX4 *)l4prev( &d4->indexes, i4 ) ;
if ( i4 == 0 )
return 0 ;
return (TAG4 *)l4last( &i4->tags ) ;
#endif
}
void S4FUNCTION d4tag_select( DATA4 *d4, TAG4 *t4 )
{
#ifdef S4VBASIC
if ( c4parm_check( d4, 2, E4_D4TAG_SELECT ) )
return ;
#endif
if ( d4 == 0 )
#ifdef S4DEBUG
e4severe( e4parm, E4_D4TAG_SELECT ) ;
#else
return ;
#endif
#ifdef S4INDEX_OFF
if ( t4 != 0 )
e4( d4->code_base, e4not_index, E4_D4TAG_SELECT ) ;
#else
#ifdef S4DEBUG
if ( t4 )
if ( t4->index->data != d4 )
e4severe( e4parm, E4_D4TAG_SELECT ) ;
#endif
if ( t4 == 0 )
d4->indexes.selected = 0 ;
else
{
d4->indexes.selected = (void *) t4->index ;
t4->index->tags.selected = (void *)t4 ;
}
#endif
}
TAG4 *S4FUNCTION d4tag_selected( DATA4 *d4 )
{
#ifndef S4INDEX_OFF
INDEX4 *index ;
TAG4 *tag ;
if ( d4 == 0 )
#ifdef S4DEBUG
e4severe( e4parm, E4_D4TAG_SELECTED ) ;
#else
return 0 ;
#endif
index = (INDEX4 *)d4->indexes.selected ;
if ( index )
{
tag = (TAG4 *)index->tags.selected ;
if ( tag )
return tag ;
}
#endif
return 0 ;
}
#ifdef S4VB_DOS
TAG4 *d4tag_v( DATA4 *d4, char *name )
{
return d4tag( d4, c4str(name) ) ;
}
#endif