home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 11 / cdate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-08-26  |  1.7 KB  |  86 lines

  1. /*------------------------------------------------------------*/
  2. /*          CDATE.C --- Test der Funktion getdate             */
  3.  
  4. #include <stdio.h>
  5.  
  6. main () {
  7.     char datum[21];
  8.     getdate(datum);
  9.     puts(datum);
  10. }
  11.  
  12. int monate[13] ={0,31,59,90,120,151,181,
  13.                  212,243,273,304,334,365};
  14. char wochentage[] ="MoDiMiDoFrSaSo";
  15. #define GETDATIME 105   /* BDOS-Call Nr. in CP/M Plus */
  16.  
  17.  
  18. getdate(string)
  19.   char *string; {
  20.     
  21.   char sec;
  22.   int i, wt;
  23.   int n,j,jahr,lftag, schalt, tag, monat;
  24.   char bcd[4];
  25.  
  26.   sec = Ubdos (GETDATIME, bcd);
  27.   n=ctoi(bcd[1])*256+ctoi(bcd[0]);
  28.   wt=((n+5)%7)*2;
  29.   string[0] = wochentage[wt];
  30.   string[1] = wochentage[wt+1];
  31.   string[2] = string[11] = ' ';
  32.   j=(n+364)%1461; /*lfd. Tag in Olympiade */
  33.   if (j>1095)
  34.     schalt=1;    
  35.   else
  36.     schalt=0;
  37.   jahr=((n+364)/1461)*4 + (j-schalt)/365 + 77;
  38.   if (j==1460)
  39.     {tag = 31; monat = 12;}
  40.   else {
  41.     lftag = j%365;
  42.     if (schalt && lftag==59)
  43.       {tag=29; monat=2;}
  44.     else {
  45.       for (monat=0; monat<12; ){
  46.     if (schalt && monat>1) i=1; else i=0;
  47.     if (lftag < (monate[(++monat)]+i)) break;
  48.       }
  49.       tag = lftag - monate[monat-1] - i + 1;
  50.     }
  51.   }
  52.   ito2a(tag,&string[3]);
  53.   string[5]=string[8]='.';
  54.   ito2a(monat,&string[6]);
  55.   ito2a(jahr,&string[9]);
  56.   bcdsplit(&bcd[2], &string[12]);
  57.   string[14] = string[17] =':';
  58.   bcdsplit(&bcd[3], &string[15]);
  59.   bcdsplit(&sec,&string[18]);
  60.   string[20]=0;
  61. }
  62.  
  63. bcdsplit(cpin,cpout)
  64.   char *cpin, *cpout; {
  65.  
  66.   *cpout=(*cpin>>4) + '0';
  67.   cpout++;
  68.   *cpout=(*cpin&15) + '0';
  69. }
  70.  
  71.  
  72. ctoi(ch)
  73.   char ch; {
  74.     
  75.   if (ch<0) return (ch+256); else return (ch);
  76. }
  77.  
  78.  
  79. ito2a(i,a2)
  80.   int i; char *a2; {
  81.  
  82.   *a2 = i/10 + '0';
  83.   a2++;
  84.   *a2 = i%10 + '0';
  85. }
  86.