home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / rettig / source / maketime.c < prev    next >
C/C++ Source or Header  |  1990-10-21  |  2KB  |  70 lines

  1. /*********
  2. *  MAKETIME.C
  3. *
  4. *  by Tom Rettig
  5. *
  6. * Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  7. *
  8. *  Syntax: MAKETIME( <time string> )
  9. *  Return: <expC> valid time string from invalid <time string>.
  10. *********/
  11.  
  12. #include "trlib.h"
  13.  
  14. TRTYPE maketime()
  15. {
  16.    static char ret[9];
  17.    static char funcname[] = { "maketime" };
  18.    char *intime;
  19.    long insecs;
  20.    int i, hours, mins, secs;
  21.  
  22.    if ( PCOUNT == 1 && ISCHAR(1) )
  23.    {
  24.       intime = _parc(1);
  25.  
  26.       /* trap for time string format */
  27.       if ( ISTS(intime) )
  28.       {
  29.          /* convert to seconds */
  30.          insecs = (long) ( (ADTOI(intime[HOURS])*36000) +
  31.                            (ADTOI(intime[HOUR ])* 3600) +
  32.                            (ADTOI(intime[MINS ])*  600) +
  33.                            (ADTOI(intime[MIN  ])*   60) +
  34.                            (ADTOI(intime[SECS ])*   10) +
  35.                             ADTOI(intime[SEC  ])        );
  36.       
  37.          /* calculate time values and build time string */
  38.          if ( insecs <= 0 )
  39.          {
  40.             /* empty value */
  41.             for ( i = 0; i < 8; i++ )
  42.                ret[i] = ( i==TDELIM_1 || i==TDELIM_2 ) ? TIMEDELIM : ZEROC;
  43.          }
  44.          else
  45.          {
  46.             hours = (int)((insecs/3600)%24);
  47.             mins  = (int)((insecs/  60)%60);
  48.             secs  = (int)((insecs     )%60);
  49.             
  50.             ret[HOURS]   = DIGIT( hours/10 );
  51.             ret[HOUR ]   = DIGIT( hours%10 );
  52.             ret[TDELIM_1] = TIMEDELIM;
  53.             ret[MINS]    = DIGIT( mins/10 );
  54.             ret[MIN ]    = DIGIT( mins%10 );
  55.             ret[TDELIM_2] = TIMEDELIM;
  56.             ret[SECS]    = DIGIT( secs/10 );
  57.             ret[SEC ]    = DIGIT( secs%10 );
  58.          }
  59.          ret[TIMELEN] = NULLC;
  60.          
  61.          _retc( ret );
  62.       }
  63.       else
  64.          _retc( _tr_errmsgs(funcname,E_SYNTAX) );
  65.    }
  66.    else
  67.       _retc( _tr_errmsgs(funcname,E_SYNTAX) );
  68. }
  69.  
  70.