// Mijn versie van het UNIX 'date' commando
#include <super.h>
#include <stdio.h>
#include <string.h>
#include <dos.h>

#define OPTIONCHAR  '-'


/*
    '%' tjes zijn een beetje lullig onder DOS ik gebruik '-'

    %d  dag v.d. maand 01-31
    %j  dag v.h. jaar 001-366               // deze werkt niet
    %w  dag v.d. week nr 0(zondag)-6
    %a  afgekorte weekdag (sun-sat)
    %m  maandnummer 1-12
    %h  afgekorte maand   (jan-dec)
    %y  jaartal zonder eeuw 00-99
    %D  datum mm/dd/jj
    %H  uren          00-23
    %M  minuten       00-59
    %S  seconde       00-59
    %r  tijd AM/PM notatie
    %T  tijd als uu:mm:ss
    %n  newline
    %t  tab

    %f Mon 25 Jan 1994 0:34             // toegevoegd
    %f Mon  2 Jan 1994 0:34             // gewijzigd

*/

char *Dagen[] =
{  "Sun","Mon","Tue","Wed","Thu","Fri","Sat" };

char *Maanden[] =
{
 0, "Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

int main(int argc,char **argv)
{
  time t;
  dosdate_t d;
  _dos_getdate(&d);
  gettime(&t);
  if(argc==1)
  {
    printf("%s  %d-%2.2d-%d                    %2d:%02d:%02d\n",Dagen[d.dayofweek],d.day,d.month,d.year,t.ti_hour,t.ti_min,t.ti_sec);
    printf("-a|w -d -m|h -y (mm/dd/yy = -D)   -H -M -S (=-T|r) -n -t (date & time = -f)");
  } else
  for(byte tc=1; argc-->1 ; )
  {
    if( tc>1 )
      printf(" ");                      // split args with space
    char s[80];
    char *sp,*ss;
    strcpy(s,argv[tc++]);               // copy arg string
    sp = s;
    while( *sp )
    {
      if( (ss=strchr(sp,OPTIONCHAR)) == 0 ) // zoek %
      {
        printf("%s",sp);                // no % print string
        break;
      }
      *ss++ = 0;                        // end at %
      printf("%s",sp);                  // print until %
      switch( *ss )                     // check char after %
      {
        case 0: continue;
        case OPTIONCHAR: printf("%c",OPTIONCHAR); break;
        case 'd': printf("%d",d.day); break;        // day of the month
//        case 'j': printf("%d",); break;           // 00-366 day of the year
        case 'w': printf("%d",d.dayofweek); break;  // 0-6 day of the week
        case 'a': printf("%s",Dagen[d.dayofweek]); break; // sun - sat
        case 'm': printf("%d",d.month); break;          // month 1 - 12
        case 'h': printf("%s",Maanden[d.month]); break; // month Jan - Dec
        case 'y': printf("%d",d.year); break;           // Year nnnn
        case 'D': printf("%d/%2.2d/%d",d.month,d.day,d.year); break; // mm/dd/yyyy
        case 'H': printf("%d",t.ti_hour); break;        // hours 0 - 23
        case 'M': printf("%02d",t.ti_min); break;       // minutes 00 - 59
        case 'S': printf("%02d",t.ti_sec); break;       // seconds 00 - 59
        case 'r': printf("%2d:%02d %cM",t.ti_hour>12?t.ti_hour-12:t.ti_hour,
            t.ti_min,t.ti_hour>12?'P':'A'); break;      // h:mm AM/PM
        case 'T': printf("%2d:%02d:%02d",t.ti_hour,t.ti_min,
            t.ti_sec); break;                           // h:mm:ss 24H
        case 'n': printf("\n"); break;                  // newline
        case 't': printf("\t"); break;                  // TAB
        case 'f': printf("%s %2d %s %d %2d:%02d",Dagen[d.dayofweek],d.day,
            Maanden[d.month],d.year,t.ti_hour,t.ti_min); break;
      }
      sp = ++ss;
    }
  }
  return 0;
}

