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
		
			
				
	
	
		
			566 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			566 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* d4data.c   (c)Copyright Sequiter Software Inc., 1990-1994.  All rights reserved. */
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
#ifndef S4UNIX
 | 
						|
#ifdef __TURBOC__
 | 
						|
#pragma hdrstop
 | 
						|
#endif  /* __TUROBC__ */
 | 
						|
#endif  /* S4UNIX */
 | 
						|
 | 
						|
char *S4FUNCTION d4alias( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4ALIAS ) )
 | 
						|
    return (char *) NULL;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4ALIAS ) ;
 | 
						|
#endif
 | 
						|
  return data->alias ;
 | 
						|
}
 | 
						|
 | 
						|
void S4FUNCTION d4alias_set( DATA4 *data, char *new_alias )
 | 
						|
{
 | 
						|
#ifdef S4UNIX
 | 
						|
  char temp_alias[11] ;
 | 
						|
#endif
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4ALIAS_SET ) )
 | 
						|
    return ;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 || new_alias == 0 )
 | 
						|
    e4severe( e4parm, E4_D4ALIAS_SET ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4UNIX
 | 
						|
  memcpy( temp_alias, new_alias, sizeof( temp_alias ) ) ;
 | 
						|
  u4ncpy( data->alias, temp_alias, sizeof( data->alias ) ) ;
 | 
						|
#else
 | 
						|
  c4upper( new_alias ) ;
 | 
						|
  u4ncpy( data->alias, new_alias, sizeof( data->alias ) ) ;
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
#ifndef S4OFF_WRITE
 | 
						|
void S4FUNCTION d4blank( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4BLANK ) )
 | 
						|
    return ;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4BLANK ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  memset( data->record, ' ', data->record_width ) ;
 | 
						|
  data->record_changed = 1 ;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
int S4FUNCTION d4bof( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4BOF ) )
 | 
						|
    return -1;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4BOF ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  return data->bof_flag ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4bottom( DATA4 *data )
 | 
						|
{
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  TAG4 *tag ;
 | 
						|
#endif
 | 
						|
  long rec, recno ;
 | 
						|
  int  rc ;
 | 
						|
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4BOTTOM ) )
 | 
						|
    return -1;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4BOTTOM ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  tag = d4tag_selected( data ) ;
 | 
						|
  if ( tag == 0 )
 | 
						|
  {
 | 
						|
#endif
 | 
						|
    rec = d4reccount( data ) ;  /* updates the record, returns -1 if code_base->error_code < 0 */
 | 
						|
    if ( rec > 0L )
 | 
						|
      return d4go( data, rec ) ;
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
#ifdef S4OFF_WRITE
 | 
						|
    if ( data->code_base->error_code < 0 )
 | 
						|
      return -1 ;
 | 
						|
#else
 | 
						|
    rc = d4update_record( data, 1 ) ;  /* updates the record, returns -1 if code_base->error_code < 0 */
 | 
						|
    if ( rc )
 | 
						|
      return rc ;
 | 
						|
#endif
 | 
						|
    t4version_check( tag, 0, 0 ) ;
 | 
						|
    rc = t4bottom( tag ) ;
 | 
						|
    if ( rc )
 | 
						|
      return rc ;
 | 
						|
    if ( !t4eof(tag) )
 | 
						|
    {
 | 
						|
      recno = t4recno( tag ) ;
 | 
						|
      if ( recno < 0 )
 | 
						|
        return recno ;
 | 
						|
#ifndef S4SINGLE
 | 
						|
      if ( recno > data->minCount )   /* ensure correct sequencing for multi-user */
 | 
						|
      {
 | 
						|
        if ( recno > d4reccount( data ) )
 | 
						|
        {
 | 
						|
          rc = t4skip( tag, -1L ) ;
 | 
						|
          if ( rc < 0 )
 | 
						|
            return rc ;
 | 
						|
          if ( rc == 0 )
 | 
						|
          {
 | 
						|
            data->bof_flag = 1 ;
 | 
						|
            return d4go_eof( data ) ;
 | 
						|
          }
 | 
						|
          recno = t4recno( tag ) ;
 | 
						|
          if ( recno <= 0 || recno > data->minCount )
 | 
						|
            return -1 ;
 | 
						|
        }
 | 
						|
      }
 | 
						|
#endif
 | 
						|
      return d4go( data, recno ) ;
 | 
						|
    }
 | 
						|
  }
 | 
						|
#endif
 | 
						|
 | 
						|
  data->bof_flag = 1 ;
 | 
						|
  return d4go_eof( data ) ;
 | 
						|
}
 | 
						|
 | 
						|
#ifndef S4OFF_WRITE
 | 
						|
void S4FUNCTION d4delete( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4DELETE ) )
 | 
						|
    return ;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4DELETE ) ;
 | 
						|
  if ( data->record[0] != ' ' && data->record[0] != '*' )
 | 
						|
    e4severe( e4info, E4_DATA_DEL ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data->record[0] != '*' )
 | 
						|
  {
 | 
						|
    data->record[0] = '*' ;
 | 
						|
    data->record_changed = 1 ;
 | 
						|
  }
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
int S4FUNCTION d4deleted( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4DELETED ) )
 | 
						|
    return -1;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4DELETED ) ;
 | 
						|
  if ( data->record[0] != ' ' && data->record[0] != '*' )
 | 
						|
    e4severe( e4info, E4_DATA_DEL ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  return *data->record != ' ' ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4eof( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4EOF ) )
 | 
						|
    return -1;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4EOF ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  return data->eof_flag ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4num_fields( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4NUM_FIELDS ) )
 | 
						|
    return -1;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4NUM_FIELDS ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  return data->n_fields ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4read( DATA4 *data, long rec_num, char *ptr )
 | 
						|
{
 | 
						|
  unsigned len ;
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 || rec_num <= 0 || ptr == 0 )
 | 
						|
    e4severe( e4parm, E4_D4READ ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  len = file4read( &data->file, d4record_position( data, rec_num ), ptr, data->record_width ) ;
 | 
						|
  if ( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  if ( len != data->record_width )
 | 
						|
    return r4entry ;
 | 
						|
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4read_old( DATA4 *data, long rec_num )
 | 
						|
{
 | 
						|
  int rc ;
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 || rec_num <= 0 )
 | 
						|
    e4severe( e4parm, E4_D4READ_OLD ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  if ( rec_num <= 0 )
 | 
						|
  {
 | 
						|
    data->rec_num_old = rec_num ;
 | 
						|
    memset( data->record_old, ' ', data->record_width ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  if ( data->rec_num_old == rec_num )
 | 
						|
    return 0 ;
 | 
						|
 | 
						|
  data->rec_num_old = -1 ;
 | 
						|
#ifndef S4OPTIMIZE_OFF
 | 
						|
  /* make sure read from disk unless file locked, etc. */
 | 
						|
  if ( data->file.do_buffer )
 | 
						|
    data->code_base->opt.force_current = 1 ;
 | 
						|
#endif
 | 
						|
  rc = d4read( data, rec_num, data->record_old) ;
 | 
						|
#ifndef S4OPTIMIZE_OFF
 | 
						|
  if ( data->file.do_buffer )
 | 
						|
    data->code_base->opt.force_current = 0 ;
 | 
						|
#endif
 | 
						|
  if ( rc < 0 )
 | 
						|
    return -1 ;
 | 
						|
  if ( rc > 0 )
 | 
						|
    memset( data->record_old, ' ', data->record_width ) ;
 | 
						|
  data->rec_num_old = rec_num ;
 | 
						|
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
#ifndef S4OFF_WRITE
 | 
						|
void S4FUNCTION d4recall( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4RECALL ) )
 | 
						|
    return ;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4RECALL ) ;
 | 
						|
  if ( data->record[0] != ' ' && data->record[0] != '*' )
 | 
						|
    e4severe( e4info, E4_DATA_RECALL ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( *data->record != ' ' )
 | 
						|
  {
 | 
						|
    *data->record = ' ' ;
 | 
						|
    data->record_changed = 1 ;
 | 
						|
  }
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
long S4FUNCTION d4reccount( DATA4 *data )
 | 
						|
{
 | 
						|
  long count ;
 | 
						|
#ifdef S464BIT
 | 
						|
  S4LONG tmp_count ;
 | 
						|
#endif
 | 
						|
#ifndef S4CLIPPER
 | 
						|
  unsigned len ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4RECCOUNT ) )
 | 
						|
    return -1L ;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4RECCOUNT ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( data->code_base->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
  if ( data->num_recs >= 0L )
 | 
						|
    return data->num_recs ;
 | 
						|
 | 
						|
#ifdef S4CLIPPER
 | 
						|
  count = file4len( &data->file ) ;
 | 
						|
  if ( count < 0L )
 | 
						|
    return -1L ;
 | 
						|
  count = ( count - data->header_len )/ data->record_width ;
 | 
						|
#else
 | 
						|
#ifdef S464BIT
 | 
						|
  len = file4read( &data->file, 4L, &tmp_count, sizeof(S4LONG) ) ;
 | 
						|
#ifdef S4BYTE_SWAP
 | 
						|
  tmp_count = x4reverse_long((void *)&tmp_count) ;
 | 
						|
#endif
 | 
						|
  count = tmp_count ;
 | 
						|
#else
 | 
						|
  len = file4read( &data->file, 4L, &count, sizeof( long ) ) ;
 | 
						|
#ifdef S4BYTE_SWAP
 | 
						|
  count = x4reverse_long((void *)&count) ;
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
  if ( count < 0L || len != 4 )
 | 
						|
    return -1L ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef S4SINGLE
 | 
						|
  if ( d4lock_test_append( data ) )
 | 
						|
#endif  /* S4SINGLE */
 | 
						|
    data->num_recs = count ;
 | 
						|
 | 
						|
#ifndef S4SINGLE
 | 
						|
  data->minCount = count ;    /* used for multi-user ensured sequencing */
 | 
						|
#endif
 | 
						|
  return count ;
 | 
						|
}
 | 
						|
 | 
						|
long S4FUNCTION d4recno( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4RECNO ) )
 | 
						|
    return -1L;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4RECNO ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  return data->rec_num ;
 | 
						|
}
 | 
						|
 | 
						|
char *S4FUNCTION d4record( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4RECORD ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  return data->record ;
 | 
						|
}
 | 
						|
 | 
						|
long S4FUNCTION d4record_position( DATA4 *data, long rec )
 | 
						|
{
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 || rec <= 0 )
 | 
						|
    e4severe( e4parm, E4_D4RECORD_POS ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  return data->header_len + data->record_width * ( rec - 1 ) ;
 | 
						|
}
 | 
						|
 | 
						|
long S4FUNCTION d4record_width( DATA4 *data )
 | 
						|
{
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4RECORD_WIDTH ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  return (long)data->record_width ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4top( DATA4 *data )
 | 
						|
{
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  TAG4 *tag ;
 | 
						|
#endif
 | 
						|
  int rc, save_flag ;
 | 
						|
  CODE4 *c4 ;
 | 
						|
  long recno ;
 | 
						|
 | 
						|
#ifdef S4VBASIC
 | 
						|
  if ( c4parm_check( data, 2, E4_D4TOP ) )
 | 
						|
    return -1;
 | 
						|
#endif  /* S4VBASIC */
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4TOP ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  c4 = data->code_base ;
 | 
						|
  if ( c4->error_code < 0 )
 | 
						|
    return -1 ;
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  tag = d4tag_selected( data ) ;
 | 
						|
 | 
						|
  if ( tag == 0 )
 | 
						|
  {
 | 
						|
#endif
 | 
						|
    save_flag = c4->go_error ;
 | 
						|
    c4->go_error = 0 ;
 | 
						|
    rc = d4go( data, 1L ) ;
 | 
						|
    c4->go_error = save_flag ;
 | 
						|
    if ( rc <= 0 )
 | 
						|
      return rc ;
 | 
						|
 | 
						|
    if ( d4reccount( data ) > 0L )
 | 
						|
      return d4go( data ,1L ) ;
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
#ifndef S4OFF_WRITE
 | 
						|
    rc = d4update_record( data, 1 ) ;
 | 
						|
    if ( rc )
 | 
						|
      return rc ;
 | 
						|
#endif
 | 
						|
    t4version_check( tag, 0, 0 ) ;
 | 
						|
    rc = t4top( tag ) ;
 | 
						|
    if ( rc )
 | 
						|
      return rc ;
 | 
						|
    if ( !t4eof( tag ) )
 | 
						|
    {
 | 
						|
      recno = t4recno( tag ) ;
 | 
						|
      if ( recno < 0 )
 | 
						|
        return recno ;
 | 
						|
#ifndef S4SINGLE
 | 
						|
      if ( recno > data->minCount )   /* ensure correct sequencing for multi-user */
 | 
						|
      {
 | 
						|
        if ( recno > d4reccount( data ) )
 | 
						|
        {
 | 
						|
          rc = t4skip( tag, 1L ) ;
 | 
						|
          if ( rc < 0 )
 | 
						|
            return rc ;
 | 
						|
          if ( rc == 0 )
 | 
						|
          {
 | 
						|
            data->bof_flag = 1 ;
 | 
						|
            return d4go_eof( data ) ;
 | 
						|
          }
 | 
						|
          recno = t4recno( tag ) ;
 | 
						|
          if ( recno <= 0 || recno > data->minCount )
 | 
						|
            return -1 ;
 | 
						|
        }
 | 
						|
      }
 | 
						|
#endif
 | 
						|
      return d4go( data, recno ) ;
 | 
						|
    }
 | 
						|
  }
 | 
						|
#endif
 | 
						|
 | 
						|
  data->bof_flag = 1 ;
 | 
						|
  return d4go_eof( data ) ;
 | 
						|
}
 | 
						|
 | 
						|
#ifndef S4OFF_WRITE
 | 
						|
int S4FUNCTION d4update_header( DATA4 *data, int do_time_stamp, int do_count )
 | 
						|
{
 | 
						|
  long pos ;
 | 
						|
  unsigned len ;
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if ( data == 0 )
 | 
						|
    e4severe( e4parm, E4_D4UPDATE_HDR ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  pos = 0L ;
 | 
						|
  len = 4 + ( sizeof(S4LONG) ) + ( sizeof( short ) ) ;
 | 
						|
  if ( do_time_stamp )
 | 
						|
    u4yymmdd( &data->yy ) ;
 | 
						|
  else
 | 
						|
  {
 | 
						|
    pos += 4 ;
 | 
						|
    len -= 4 ;
 | 
						|
  }
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  if  ( do_count && ( data->num_recs < 0 || d4lock_test_append( data ) == 0 ) )
 | 
						|
    e4severe( e4info, E4_DATA_UPDATE ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( !do_count )
 | 
						|
    len -= (sizeof( data->num_recs ) + sizeof( data->header_len ) ) ;
 | 
						|
 | 
						|
#ifdef S4BYTE_SWAP
 | 
						|
  data->num_recs = x4reverse_long( (void *)&data->num_recs ) ;
 | 
						|
  data->header_len = x4reverse_short( (void *)&data->header_len ) ;
 | 
						|
#endif
 | 
						|
  if ( file4write( &data->file, pos, (char *)&data->version + pos, len ) < 0 )
 | 
						|
    return -1 ;
 | 
						|
#ifdef S4BYTE_SWAP
 | 
						|
  data->num_recs = x4reverse_long( (void *)&data->num_recs ) ;
 | 
						|
  data->header_len = x4reverse_short( (void *)&data->header_len ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  data->file_changed = 0 ;
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
#endif  /* S4OFF_WRITE */
 | 
						|
 | 
						|
 | 
						|
#ifdef S4VB_DOS
 | 
						|
 | 
						|
char * d4alias_v( DATA4 *d4 )
 | 
						|
{
 | 
						|
  return v4str( d4alias(d4) ) ;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void d4aliasSet ( DATA4 *d4, char *alias )
 | 
						|
{
 | 
						|
  d4alias_set( d4, c4str(alias) ) ;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |