#include <dos.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
  struct dosdate_t d;
  int f, t, m, j, w;
  char *we, *wd, *me, *md;

  if(argc == 0 || strcmp(argv[1], "") == 0)
  {
    puts("Usage: getdate [form value]");
    puts("Prints the current date to stdout");
    puts("form value: ");
    puts(" 0: Sun 12/31/2000");
    puts(" 1: 0 12/31/2000");
    puts(" 2: 12/31/2000");
    puts(" 3: So 31.12.2000");
    puts(" 4: 0 31.12.2000");
    puts(" 5: 2000-12-31");
    puts(" 6: 20001231");
    puts(" 7: 001231");
    puts(" 8: 2000");
    puts(" 9: 00");
    puts("10: 12");
    puts("11: 31");
    puts("12: Sun");
    puts("13: So");
    puts("14: 0");
    puts("15: Dec");
    puts("16: Dez");
    return 1;
  }
  else
  {
    _dos_getdate(&d);
    t = d.day;
    m = d.month;
    j = d.year;
    w = d.dayofweek;
    switch(w)
    {
      case 0: we = "Sun"; wd = "So"; break;
      case 1: we = "Mon"; wd = "Mo"; break;
      case 2: we = "Tue"; wd = "Di"; break;
      case 3: we = "Wed"; wd = "Mi"; break;
      case 4: we = "Thu"; wd = "Do"; break;
      case 5: we = "Fri"; wd = "Fr"; break;
      case 6: we = "Sat"; wd = "Sa"; break;
    }
    switch(m)
    {
      case  1: me = "Jan"; md = "Jan"; break;
      case  2: me = "Feb"; md = "Feb"; break;
      case  3: me = "Mar"; md = "M„r"; break;
      case  4: me = "Apr"; md = "Apr"; break;
      case  5: me = "May"; md = "Mai"; break;
      case  6: me = "Jun"; md = "Jun"; break;
      case  7: me = "Jul"; md = "Jul"; break;
      case  8: me = "Aug"; md = "Aug"; break;
      case  9: me = "Sep"; md = "Sep"; break;
      case  0: me = "Oct"; md = "Okt"; break;
      case 11: me = "Nov"; md = "Nov"; break;
      case 12: me = "Dec"; md = "Dez"; break;
    }

    sscanf(argv[1], "%d", &f);
    switch(f)
    {
      case  0: printf("%s %02d/%02d/%d", we, m, t, j); break; //Sun 12/31/2000");
      case  1: printf("%d %02d/%02d/%d", w, m, t, j); break; //0 12/31/2000");
      case  2: printf("%02d/%02d/%02d", m, t, j); break; //12/31/2000");
      case  3: printf("%s %02d.%02d.%d", wd, t, m, j); break; //So 31.12.2000");
      case  4: printf("%d %02d.%02d.%d", w, t, m, j); break; //0 31.12.2000");
      case  5: printf("%d-%02d-%02d", j, m, t); break; //2000-12-31");
      case  6: printf("%d%02d%02d", j, m, t); break; //20001231");
      case  7: printf("%02d%02d%02d", j%100, m, t); break; //001231");
      case  8: printf("%d", j); break; //2000");
      case  9: printf("%02d", j%100); break; //00");
      case 10: printf("%02d", m); break; //12");
      case 11: printf("%02d", t); break; //31");
      case 12: printf("%s", we); break; //Sun");
      case 13: printf("%s", wd); break; //So");
      case 14: printf("%d", w); break; //0");
      case 15: printf("%s", me); break; //Dec");
      case 16: printf("%s", md); break; //Dez");
    }
  }

  return 0;
}
