665 lines
14 KiB
C
665 lines
14 KiB
C
|
/* d4date.c (c)Copyright Sequiter Software Inc., 1990-1994. All rights reserved. */
|
|||
|
|
|||
|
#include "d4all.h"
|
|||
|
#ifndef S4UNIX
|
|||
|
#ifdef __TURBOC__
|
|||
|
#pragma hdrstop
|
|||
|
#endif /* __TUROBC__ */
|
|||
|
#endif /* S4UNIX */
|
|||
|
|
|||
|
#include <time.h>
|
|||
|
|
|||
|
#define JULIAN_ADJUSTMENT 1721425L
|
|||
|
#define S4NULL_DATE 1.0E100 /* may not compile on some Op.Sys. */
|
|||
|
/* Set to MAXDOUBLE ? */
|
|||
|
static int month_tot[]=
|
|||
|
{ 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 } ;
|
|||
|
/* Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
|
|||
|
31 28 31 30 31 30 31 31 30 31 30 31
|
|||
|
*/
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
char cdow[12] ;
|
|||
|
} DOW ;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
char cmonth[10] ;
|
|||
|
} MONTH ;
|
|||
|
|
|||
|
static DOW day_of_week[] =
|
|||
|
#ifndef S4LANGUAGE
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Sunday\0 " },
|
|||
|
{ "Monday\0 " },
|
|||
|
{ "Tuesday\0 " },
|
|||
|
{ "Wednesday\0 " },
|
|||
|
{ "Thursday\0 " },
|
|||
|
{ "Friday\0 " },
|
|||
|
{ "Saturday\0 " },
|
|||
|
} ;
|
|||
|
#else
|
|||
|
#ifdef S4GERMAN
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Sonntag\0 " },
|
|||
|
{ "Montag\0 " },
|
|||
|
{ "Dienstag\0 " },
|
|||
|
{ "Mittwoch\0 " },
|
|||
|
{ "Donnerstag\0" },
|
|||
|
{ "Freitag\0 " },
|
|||
|
{ "Samstag\0 " },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4FRENCH
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Dimanche\0 " },
|
|||
|
{ "Lundi\0 " },
|
|||
|
{ "Mardi\0 " },
|
|||
|
{ "Mercredi\0 " },
|
|||
|
{ "Jeudi\0 " },
|
|||
|
{ "Vendredi\0 " },
|
|||
|
{ "Samedi\0 " },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4SWEDISH
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "M<EFBFBD>ndag\0 " },
|
|||
|
{ "Tisdag\0 " },
|
|||
|
{ "Onsdag\0 " },
|
|||
|
{ "Torsdag\0 " },
|
|||
|
{ "Fredag\0 " },
|
|||
|
{ "L<EFBFBD>rdag\0 " },
|
|||
|
{ "S<EFBFBD>ndag\0 " },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4FINNISH
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Maanantai\0 " },
|
|||
|
{ "Tiistai\0 " },
|
|||
|
{ "Keskiviikko " },
|
|||
|
{ "Torstai\0 " },
|
|||
|
{ "Perjantai\0 " },
|
|||
|
{ "Lauantai\0 " },
|
|||
|
{ "Suununtai\0 " },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4NORWEGIAN
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Mandag\0 " },
|
|||
|
{ "Tirsdag\0 " },
|
|||
|
{ "Onsdag\0 " },
|
|||
|
{ "Torsdag\0 " },
|
|||
|
{ "Fredag\0 " },
|
|||
|
{ "L<EFBFBD>rdag\0 " },
|
|||
|
{ "S<EFBFBD>ndag\0 " },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
|
|||
|
static MONTH month_of_year[] =
|
|||
|
#ifndef S4LANGUAGE
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "January\0 " },
|
|||
|
{ "February\0" },
|
|||
|
{ "March\0 " },
|
|||
|
{ "April\0 " },
|
|||
|
{ "May\0 " },
|
|||
|
{ "June\0 " },
|
|||
|
{ "July\0 " },
|
|||
|
{ "August\0 " },
|
|||
|
{ "September" },
|
|||
|
{ "October\0 " },
|
|||
|
{ "November\0" },
|
|||
|
{ "December\0" },
|
|||
|
} ;
|
|||
|
#else
|
|||
|
#ifdef S4GERMAN
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Januar\0 " },
|
|||
|
{ "Februar\0 " },
|
|||
|
{ "M<EFBFBD>rz\0 " },
|
|||
|
{ "April\0 " },
|
|||
|
{ "Mai\0 " },
|
|||
|
{ "Juni\0 " },
|
|||
|
{ "Juli\0 " },
|
|||
|
{ "August\0 " },
|
|||
|
{ "September" },
|
|||
|
{ "Oktober\0 " },
|
|||
|
{ "November\0" },
|
|||
|
{ "Dezember\0" },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4FRENCH
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Janvier\0 " },
|
|||
|
{ "F<EFBFBD>vrier\0 " },
|
|||
|
{ "Mars\0 " },
|
|||
|
{ "Avril\0 " },
|
|||
|
{ "Mai\0 " },
|
|||
|
{ "Juin\0 " },
|
|||
|
{ "Juillet\0 " },
|
|||
|
{ "Ao<EFBFBD>t\0 " },
|
|||
|
{ "Septembre" },
|
|||
|
{ "Octobre\0 " },
|
|||
|
{ "Novembre\0" },
|
|||
|
{ "D<EFBFBD>cembre\0" },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4SWEDISH
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Januari\0 " },
|
|||
|
{ "Februari\0" },
|
|||
|
{ "Mars\0 " },
|
|||
|
{ "April\0 " },
|
|||
|
{ "Maj\0 " },
|
|||
|
{ "Juni\0 " },
|
|||
|
{ "Juli\0 " },
|
|||
|
{ "Augusti\0 " },
|
|||
|
{ "September" },
|
|||
|
{ "Oktober\0 " },
|
|||
|
{ "November\0" },
|
|||
|
{ "December\0" },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4FINNISH
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Tammikuu\0" },
|
|||
|
{ "Helmikuu\0" },
|
|||
|
{ "Maaliskuu" },
|
|||
|
{ "Huhtikuu\0" },
|
|||
|
{ "Toukokuu\0" },
|
|||
|
{ "Kes<EFBFBD>kuu\0 " },
|
|||
|
{ "Hein<EFBFBD>kuu\0" },
|
|||
|
{ "Elokuu\0 " },
|
|||
|
{ "Syyskuu\0 " },
|
|||
|
{ "Lokakuu\0 " },
|
|||
|
{ "Marraskuu" },
|
|||
|
{ "Joulukuu\0" },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#ifdef S4NORWEGIAN
|
|||
|
{
|
|||
|
{ "\0 " },
|
|||
|
{ "Januar\0 " },
|
|||
|
{ "Februar\0 " },
|
|||
|
{ "Mars\0 " },
|
|||
|
{ "April\0 " },
|
|||
|
{ "Mai\0 " },
|
|||
|
{ "Juni\0 " },
|
|||
|
{ "Juli\0 " },
|
|||
|
{ "August \0 " },
|
|||
|
{ "September" },
|
|||
|
{ "Oktober\0 " },
|
|||
|
{ "November\0" },
|
|||
|
{ "Desember\0" },
|
|||
|
} ;
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
|
|||
|
static int c4Julian( int year, int month, int day )
|
|||
|
{
|
|||
|
/* Returns */
|
|||
|
/* >0 The day of the year starting from 1 */
|
|||
|
/* Ex. Jan 1, returns 1 */
|
|||
|
/* -1 Illegal Date */
|
|||
|
int is_leap, month_days ;
|
|||
|
|
|||
|
is_leap = ( year%4 == 0 && year%100 != 0 || year%400 == 0 ) ? 1 : 0 ;
|
|||
|
|
|||
|
month_days = month_tot[ month+1 ] - month_tot[ month] ;
|
|||
|
if ( month == 2 ) month_days += is_leap ;
|
|||
|
|
|||
|
if ( year < 0 ||
|
|||
|
month < 1 || month > 12 ||
|
|||
|
day < 1 || day > month_days )
|
|||
|
return( -1 ) ; /* Illegal Date */
|
|||
|
|
|||
|
if ( month <= 2 ) is_leap = 0 ;
|
|||
|
|
|||
|
return( month_tot[month] + day + is_leap ) ;
|
|||
|
}
|
|||
|
|
|||
|
static int c4mon_dy( int year, int days, int *month_ptr, int *day_ptr )
|
|||
|
{
|
|||
|
/* Given the year and the day of the year, returns the month and day of month. */
|
|||
|
int is_leap, i ;
|
|||
|
|
|||
|
is_leap = ( year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ) ? 1 : 0 ;
|
|||
|
if ( days <= 59 )
|
|||
|
is_leap = 0 ;
|
|||
|
|
|||
|
for( i = 2; i <= 13; i++)
|
|||
|
{
|
|||
|
if ( days <= month_tot[i] + is_leap )
|
|||
|
{
|
|||
|
*month_ptr = --i ;
|
|||
|
if ( i <= 2)
|
|||
|
is_leap = 0 ;
|
|||
|
|
|||
|
*day_ptr = days - month_tot[ i] - is_leap ;
|
|||
|
return 0 ;
|
|||
|
}
|
|||
|
}
|
|||
|
*day_ptr = 0 ;
|
|||
|
*month_ptr = 0 ;
|
|||
|
|
|||
|
return -1 ;
|
|||
|
}
|
|||
|
|
|||
|
static long c4ytoj( int yr )
|
|||
|
{
|
|||
|
/* Calculates the number of days to the year */
|
|||
|
/* This calculation takes into account the fact that */
|
|||
|
/* 1) Years divisible by 400 are always leap years. */
|
|||
|
/* 2) Years divisible by 100 but not 400 are not leap years. */
|
|||
|
/* 3) Otherwise, years divisible by four are leap years. */
|
|||
|
/* Since we do not want to consider the current year, we will */
|
|||
|
/* subtract the year by 1 before doing the calculation. */
|
|||
|
yr-- ;
|
|||
|
return( yr*365L + yr/4L - yr/100L + yr/400L ) ;
|
|||
|
}
|
|||
|
|
|||
|
void S4FUNCTION date4assign( char *date_ptr, long ldate )
|
|||
|
{
|
|||
|
/* Converts from a Julian day to the dbf file date format. */
|
|||
|
long tot_days ;
|
|||
|
int i_temp, year, n_days, max_days, month, day ;
|
|||
|
|
|||
|
if ( ldate <= 0 )
|
|||
|
{
|
|||
|
memset( date_ptr, ' ', 8 ) ;
|
|||
|
return ;
|
|||
|
}
|
|||
|
|
|||
|
tot_days = ldate - JULIAN_ADJUSTMENT ;
|
|||
|
i_temp = (int)( (double)tot_days / 365.2425 ) ;
|
|||
|
year = i_temp + 1 ;
|
|||
|
n_days = (int)( tot_days - c4ytoj( year ) ) ;
|
|||
|
if ( n_days <= 0 )
|
|||
|
{
|
|||
|
year-- ;
|
|||
|
n_days = (int)( tot_days - c4ytoj( year ) ) ;
|
|||
|
}
|
|||
|
|
|||
|
if ( ( year % 4 == 0 ) && ( year % 100 ) || ( year % 400 == 0 ) )
|
|||
|
max_days = 366 ;
|
|||
|
else
|
|||
|
max_days = 365 ;
|
|||
|
|
|||
|
if ( n_days > max_days )
|
|||
|
{
|
|||
|
year++ ;
|
|||
|
n_days -= max_days ;
|
|||
|
}
|
|||
|
|
|||
|
#ifdef S4DEBUG
|
|||
|
if ( c4mon_dy( year, n_days, &month, &day ) < 0 )
|
|||
|
e4severe( e4result, E4_DATE4ASSIGN ) ;
|
|||
|
#else
|
|||
|
c4mon_dy( year, n_days, &month, &day ) ;
|
|||
|
#endif
|
|||
|
|
|||
|
c4ltoa45( (long)year, date_ptr, -4 ) ;
|
|||
|
c4ltoa45( (long)month, date_ptr + 4, -2 ) ;
|
|||
|
c4ltoa45( (long)day, date_ptr + 6, -2 ) ;
|
|||
|
}
|
|||
|
|
|||
|
char *S4FUNCTION date4cdow( char *date_ptr )
|
|||
|
{
|
|||
|
return day_of_week[date4dow(date_ptr)].cdow ;
|
|||
|
}
|
|||
|
|
|||
|
char *S4FUNCTION date4cmonth( char *date_ptr )
|
|||
|
{
|
|||
|
return month_of_year[date4month( date_ptr )].cmonth ;
|
|||
|
}
|
|||
|
|
|||
|
int S4FUNCTION date4day( char *date_ptr )
|
|||
|
{
|
|||
|
return (int)c4atol( date_ptr + 6, 2 ) ;
|
|||
|
}
|
|||
|
|
|||
|
int S4FUNCTION date4dow( char *date_ptr )
|
|||
|
{
|
|||
|
long date ;
|
|||
|
date = date4long(date_ptr) ;
|
|||
|
if ( date < 0 )
|
|||
|
return 0 ;
|
|||
|
return (int)( ( date + 1 ) % 7 ) + 1 ;
|
|||
|
}
|
|||
|
|
|||
|
void S4FUNCTION date4format( char *date_ptr, char *result, char *picture )
|
|||
|
{
|
|||
|
int result_len, rest, m_num, length ;
|
|||
|
char *ptr_end, *month_ptr, t_char ;
|
|||
|
|
|||
|
result_len = strlen(picture) ;
|
|||
|
memset( result, ' ', result_len ) ;
|
|||
|
|
|||
|
c4upper( picture ) ;
|
|||
|
c4encode( result, date_ptr, picture, "CCYYMMDD") ;
|
|||
|
|
|||
|
ptr_end = strchr( picture, 'M' ) ;
|
|||
|
if ( ptr_end )
|
|||
|
{
|
|||
|
month_ptr = result+ (int)(ptr_end-picture) ;
|
|||
|
length = 0 ;
|
|||
|
while ( *(ptr_end++) == 'M' )
|
|||
|
length++ ;
|
|||
|
|
|||
|
if ( length > 2)
|
|||
|
{
|
|||
|
/* Convert from a numeric form to character format for month */
|
|||
|
if (!memcmp( date_ptr+4, " ", 2 )) /* if blank month */
|
|||
|
{
|
|||
|
memset( month_ptr, ' ', length ) ;
|
|||
|
return ;
|
|||
|
}
|
|||
|
|
|||
|
m_num = c4atoi( date_ptr+4, 2) ;
|
|||
|
|
|||
|
if ( m_num < 1)
|
|||
|
m_num = 1 ;
|
|||
|
if ( m_num > 12)
|
|||
|
m_num = 12 ;
|
|||
|
|
|||
|
rest = length - 9 ;
|
|||
|
if (length > 9)
|
|||
|
length = 9 ;
|
|||
|
|
|||
|
memcpy( month_ptr, month_of_year[m_num].cmonth, (size_t) length ) ;
|
|||
|
if (rest > 0)
|
|||
|
memset( month_ptr+length, (int) ' ', (size_t) rest ) ;
|
|||
|
|
|||
|
t_char = month_of_year[m_num].cmonth[length] ;
|
|||
|
if( t_char == '\0' || t_char == ' ' )
|
|||
|
{
|
|||
|
m_num = strlen(month_of_year[m_num].cmonth) ;
|
|||
|
if ( m_num != length )
|
|||
|
month_ptr[m_num] = ' ' ;
|
|||
|
}
|
|||
|
#ifdef S4WINDOWS
|
|||
|
OemToAnsi( result, result );
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
double S4FUNCTION date4format_mdx( char *date_ptr )
|
|||
|
{
|
|||
|
long ldate ;
|
|||
|
ldate = date4long(date_ptr) ;
|
|||
|
if ( ldate == 0 )
|
|||
|
return (double) S4NULL_DATE ; /* Blank or Null date */
|
|||
|
return (double)ldate ;
|
|||
|
}
|
|||
|
|
|||
|
int S4FUNCTION date4format_mdx2( char *date_ptr, double *doub_ptr )
|
|||
|
{
|
|||
|
long ldate ;
|
|||
|
|
|||
|
ldate = date4long(date_ptr) ;
|
|||
|
if ( ldate == 0 )
|
|||
|
*doub_ptr = (double)S4NULL_DATE ; /* Blank or Null date */
|
|||
|
else
|
|||
|
*doub_ptr = (double)ldate ;
|
|||
|
return 0 ;
|
|||
|
}
|
|||
|
|
|||
|
void S4FUNCTION date4init( char *date_ptr, char *date_data, char *picture )
|
|||
|
{
|
|||
|
char *month_start, month_data[10], buf[2] ;
|
|||
|
int year_count, month_count, day_count, century_count, i, length ;
|
|||
|
|
|||
|
day_count = 5 ;
|
|||
|
month_count = 3 ;
|
|||
|
year_count = 1 ;
|
|||
|
century_count= -1 ;
|
|||
|
|
|||
|
memset( date_ptr, ' ', 8 ) ;
|
|||
|
|
|||
|
c4upper( picture ) ;
|
|||
|
for ( i=0; picture[i] != '\0'; i++ )
|
|||
|
{
|
|||
|
switch( picture[i] )
|
|||
|
{
|
|||
|
case 'D':
|
|||
|
if ( ++day_count >= 8 )
|
|||
|
break ;
|
|||
|
date_ptr[day_count] = date_data[i] ;
|
|||
|
break ;
|
|||
|
case 'M':
|
|||
|
if ( ++month_count >=6 )
|
|||
|
break ;
|
|||
|
date_ptr[month_count] = date_data[i] ;
|
|||
|
break ;
|
|||
|
case 'Y':
|
|||
|
if ( ++year_count >= 4 )
|
|||
|
break ;
|
|||
|
date_ptr[year_count] = date_data[i] ;
|
|||
|
break ;
|
|||
|
case 'C':
|
|||
|
if ( ++century_count >= 2 )
|
|||
|
break ;
|
|||
|
date_ptr[century_count] = date_data[i] ;
|
|||
|
break ;
|
|||
|
default:
|
|||
|
break ;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if ( strcmp( date_ptr, " " ) == 0 )
|
|||
|
return ;
|
|||
|
|
|||
|
if ( century_count == -1 )
|
|||
|
memcpy( date_ptr, "19", (size_t)2 ) ;
|
|||
|
if ( year_count == 1 )
|
|||
|
memcpy( date_ptr + 2, "01", (size_t)2 ) ;
|
|||
|
if ( month_count == 3 )
|
|||
|
memcpy( date_ptr + 4, "01", (size_t)2 ) ;
|
|||
|
if ( day_count == 5 )
|
|||
|
memcpy( date_ptr + 6, "01", (size_t)2 ) ;
|
|||
|
|
|||
|
if ( month_count >= 6 )
|
|||
|
{
|
|||
|
/* Convert the Month from Character Form to Date Format */
|
|||
|
month_start = strchr( picture, 'M' ) ;
|
|||
|
|
|||
|
length = month_count - 3 ; /* Number of 'M' characters in picture */
|
|||
|
|
|||
|
memcpy( date_ptr+4, " ", (size_t)2 ) ;
|
|||
|
|
|||
|
if ( length > 3 )
|
|||
|
length = 3 ;
|
|||
|
memcpy( month_data, date_data + (int)( month_start - picture ), (size_t)length) ;
|
|||
|
while ( length > 0 )
|
|||
|
if ( month_data[length-1] == ' ' )
|
|||
|
length-- ;
|
|||
|
else
|
|||
|
break ;
|
|||
|
|
|||
|
month_data[length] = '\0' ;
|
|||
|
|
|||
|
c4lower( month_data ) ;
|
|||
|
buf[0] = month_data[0] ;
|
|||
|
buf[1] = 0 ;
|
|||
|
c4upper(buf) ;
|
|||
|
month_data[0] = buf[0] ;
|
|||
|
|
|||
|
if ( length > 0 )
|
|||
|
for( i = 1 ; i <= 12; i++ )
|
|||
|
{
|
|||
|
if ( memcmp( month_of_year[i].cmonth, month_data, (size_t) length) == 0 )
|
|||
|
{
|
|||
|
c4ltoa45( (long) i, date_ptr+4, 2 ) ; /* Found Month Match */
|
|||
|
break ;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for ( i = 0 ; i < 8 ; i++ )
|
|||
|
if ( date_ptr[i] == ' ' )
|
|||
|
date_ptr[i] = '0' ;
|
|||
|
}
|
|||
|
|
|||
|
long S4FUNCTION date4long( char *date_ptr )
|
|||
|
{
|
|||
|
/* Returns: */
|
|||
|
/* >0 - Julian day */
|
|||
|
/* That is the number of days since the date Jan 1, 4713 BC */
|
|||
|
/* Ex. Jan 1, 1981 is 2444606 */
|
|||
|
/* 0 - NULL Date (dbf_date is all blank) */
|
|||
|
/* -1 - Illegal Date */
|
|||
|
int year, month, day, day_year ;
|
|||
|
|
|||
|
year = c4atoi( date_ptr, 4 ) ;
|
|||
|
if ( year == 0)
|
|||
|
if ( memcmp( date_ptr, " ", 8 ) == 0)
|
|||
|
return 0 ;
|
|||
|
|
|||
|
month = c4atoi( date_ptr + 4, 2 ) ;
|
|||
|
day = c4atoi( date_ptr + 6, 2 ) ;
|
|||
|
day_year = c4Julian( year, month, day ) ;
|
|||
|
if ( day_year < 1 ) /* Illegal Date */
|
|||
|
return -1L ;
|
|||
|
|
|||
|
return ( c4ytoj( year ) + day_year + JULIAN_ADJUSTMENT ) ;
|
|||
|
}
|
|||
|
|
|||
|
int S4FUNCTION date4month( char *date_ptr )
|
|||
|
{
|
|||
|
return (int)c4atol( date_ptr + 4, 2 ) ;
|
|||
|
}
|
|||
|
|
|||
|
void S4FUNCTION date4time_now( char *time_data )
|
|||
|
{
|
|||
|
long time_val ;
|
|||
|
struct tm *tm_ptr ;
|
|||
|
|
|||
|
time( (time_t *)&time_val) ;
|
|||
|
tm_ptr = localtime( (time_t *)&time_val) ;
|
|||
|
|
|||
|
c4ltoa45( (long)tm_ptr->tm_hour, time_data, -2) ;
|
|||
|
time_data[2] = ':' ;
|
|||
|
c4ltoa45( (long)tm_ptr->tm_min, time_data + 3, -2) ;
|
|||
|
time_data[5] = ':' ;
|
|||
|
c4ltoa45( (long)tm_ptr->tm_sec, time_data + 6, -2) ;
|
|||
|
}
|
|||
|
|
|||
|
void S4FUNCTION date4today( char *date_ptr )
|
|||
|
{
|
|||
|
long time_val ;
|
|||
|
struct tm *tm_ptr ;
|
|||
|
|
|||
|
time( (time_t *)&time_val ) ;
|
|||
|
tm_ptr = localtime( (time_t *)&time_val ) ;
|
|||
|
|
|||
|
c4ltoa45( 1900L + tm_ptr->tm_year, date_ptr, -4 ) ;
|
|||
|
c4ltoa45( (long)tm_ptr->tm_mon + 1, date_ptr + 4, -2 ) ;
|
|||
|
c4ltoa45( (long)tm_ptr->tm_mday, date_ptr + 6, -2 ) ;
|
|||
|
}
|
|||
|
|
|||
|
int S4FUNCTION date4year( char *year_ptr )
|
|||
|
{
|
|||
|
return (int)c4atol( year_ptr, 4 ) ;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#ifdef S4VB_DOS
|
|||
|
|
|||
|
|
|||
|
/* DATE Functions */
|
|||
|
|
|||
|
void date4assign_v( char *date, long julian_day )
|
|||
|
{
|
|||
|
date4assign( c4buf, julian_day ) ;
|
|||
|
c4buf[8] = '\0' ;
|
|||
|
u4ctov( date, c4buf );
|
|||
|
}
|
|||
|
|
|||
|
char * date4cdow_v( char *date )
|
|||
|
{
|
|||
|
return v4str( date4cdow( c4str(date) ) );
|
|||
|
}
|
|||
|
|
|||
|
char * date4cmonth_v( char *date )
|
|||
|
{
|
|||
|
return v4str( date4cmonth( c4str(date) ) ) ;
|
|||
|
}
|
|||
|
|
|||
|
int date4day_v( char *date )
|
|||
|
{
|
|||
|
return date4day( c4str(date) ) ;
|
|||
|
}
|
|||
|
|
|||
|
int date4dow_v( char *date )
|
|||
|
{
|
|||
|
return date4dow( c4str(date) ) ;
|
|||
|
}
|
|||
|
|
|||
|
void date4format_v( char *v_date, char *v_res, char *v_pic )
|
|||
|
{
|
|||
|
char c_date[9],c_res[255],c_pic[255];
|
|||
|
|
|||
|
u4vtoc( c_date, sizeof(c_date), v_date );
|
|||
|
u4vtoc( c_pic, sizeof(c_pic), v_pic );
|
|||
|
|
|||
|
date4format( c_date, c_res, c_pic ) ;
|
|||
|
u4ctov( v_res, c_res );
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
double date4formatMdx ( char *date )
|
|||
|
{
|
|||
|
return date4format_mdx( c4str(date) ) ;
|
|||
|
}
|
|||
|
|
|||
|
void date4init_v( char *v_res, char *v_date, char *v_pic )
|
|||
|
{
|
|||
|
char c_res[9],c_date[255],c_pic[255];
|
|||
|
|
|||
|
u4vtoc( c_date, sizeof(c_date), v_date );
|
|||
|
u4vtoc( c_pic, sizeof(c_pic), v_pic );
|
|||
|
|
|||
|
date4init( c_res, c_date, c_pic ) ;
|
|||
|
|
|||
|
c_res[8] = '\0' ;
|
|||
|
|
|||
|
u4ctov( v_res, c_res ) ;
|
|||
|
}
|
|||
|
|
|||
|
long date4long_v( char *date )
|
|||
|
{
|
|||
|
return date4long( c4str(date) ) ;
|
|||
|
}
|
|||
|
|
|||
|
int date4month_v( char *date )
|
|||
|
{
|
|||
|
return date4month( c4str(date) ) ;
|
|||
|
}
|
|||
|
|
|||
|
void date4today_v( char *v_date )
|
|||
|
{
|
|||
|
date4today( c4buf ) ;
|
|||
|
u4ctov( v_date, c4buf ) ;
|
|||
|
}
|
|||
|
|
|||
|
int date4year_v( char *date )
|
|||
|
{
|
|||
|
return date4year( c4str(date) ) ;
|
|||
|
}
|
|||
|
|
|||
|
#endif /* S4VB_DOS */
|