home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / comm / ums / SUMSTools.lha / UMS / Tools / SUMSTools / Source / date.c next >
C/C++ Source or Header  |  1995-08-03  |  4KB  |  228 lines

  1.  
  2. #include <dos/datetime.h>
  3. #include <proto/dos.h>
  4.  
  5. #include <string.h>
  6. #include <stdlib.h>
  7.  
  8. extern struct DosLibrary *DOSBase;
  9.  
  10. /* SMAKE */
  11.  
  12.  
  13. // DateToSeconds:
  14. //
  15. // Wandelt beliebigen Datums-String in Sekunden seit 1.1.1978 um.
  16. // Kennt bisher die folgenden Formate:
  17. //
  18. //  0         1         2
  19. //  012345678901234567890
  20. //
  21. // "01 Jan 91  11:22:33"    Fido Standard                            DF_FIDO
  22. // "01 Jan 91  11:22"       Fido Standard ohne Sekunden
  23. // "Wed 13 Jan 86 02:34"    Fido SEAdog
  24. // "JJMMTThhmm"             Z-Netz                                   DF_ZNETZ
  25. // "01-Jan-78 10:11:12"     AmigaDOS                                 DF_ADOS
  26. // "01.01.78 10:11:12"      AmigaDOS, Style Guide German, leading 0s
  27. // "1.1.78 10:11:12"        AmigaDOS, Style Guide German
  28.  
  29.  
  30. LONG DateToSeconds(UBYTE *misc)
  31. {
  32.     #define space(x) (misc[x]==' ')
  33.     #define point(x) (misc[x]=='.')
  34.  
  35.     int len = misc ? strlen(misc) : 0;
  36.     UBYTE dbuf[10] = "01-Jan-78";
  37.     UBYTE tbuf[10] = "00:00:00";
  38.     struct DateTime dt = { {0,0,0},FORMAT_DOS,0,NULL,NULL,NULL };
  39.  
  40.     dt.dat_StrDate = dbuf;
  41.     dt.dat_StrTime = tbuf;
  42.  
  43.     if (len>=19 && space(2) && space(6) && space(9) && space(10))
  44.     {
  45.         // Standard Fido
  46.  
  47.         dbuf[0]=misc[0];
  48.         dbuf[1]=misc[1];
  49.         dbuf[3]=misc[3];
  50.         dbuf[4]=misc[4];
  51.         dbuf[5]=misc[5];
  52.         dbuf[7]=misc[7];
  53.         dbuf[8]=misc[8];
  54.  
  55.         tbuf[0]=misc[11+0];
  56.         tbuf[1]=misc[11+1];
  57.         tbuf[3]=misc[11+3];
  58.         tbuf[4]=misc[11+4];
  59.         tbuf[6]=misc[11+6];
  60.         tbuf[7]=misc[11+7];
  61.     }
  62.     else if (len>=16 && space(2) && space(6) && space(9) && space(10))
  63.     {
  64.         // Standard Fido ohne Sekunden
  65.  
  66.         dbuf[0]=misc[0];
  67.         dbuf[1]=misc[1];
  68.         dbuf[3]=misc[3];
  69.         dbuf[4]=misc[4];
  70.         dbuf[5]=misc[5];
  71.         dbuf[7]=misc[7];
  72.         dbuf[8]=misc[8];
  73.  
  74.         tbuf[0]=misc[11+0];
  75.         tbuf[1]=misc[11+1];
  76.         tbuf[3]=misc[11+3];
  77.         tbuf[4]=misc[11+4];
  78.     }
  79.     else if (len>=19 && space(3) && space(6) && space(10) && space(13))
  80.     {
  81.         // SEAdog
  82.  
  83.         dbuf[0]=misc[4+0];
  84.         dbuf[1]=misc[4+1];
  85.         dbuf[3]=misc[4+3];
  86.         dbuf[4]=misc[4+4];
  87.         dbuf[5]=misc[4+5];
  88.         dbuf[7]=misc[4+7];
  89.         dbuf[8]=misc[4+8];
  90.  
  91.         tbuf[0]=misc[14+0];
  92.         tbuf[1]=misc[14+1];
  93.         tbuf[3]=misc[14+3];
  94.         tbuf[4]=misc[14+4];
  95.     }
  96.     else if (len==10)
  97.     {
  98.         // Z-Netz
  99.  
  100.         dt.dat_Format = FORMAT_CDN; // (dd-mm-yy)
  101.  
  102.         dbuf[0]=misc[4];
  103.         dbuf[1]=misc[5];
  104.         dbuf[2]='-';
  105.         dbuf[3]=misc[2];
  106.         dbuf[4]=misc[3];
  107.         dbuf[5]='-';
  108.         dbuf[6]=misc[0];
  109.         dbuf[7]=misc[1];
  110.         dbuf[8]=0;
  111.  
  112.         tbuf[0]=misc[6];
  113.         tbuf[1]=misc[7];
  114.         tbuf[3]=misc[8];
  115.         tbuf[4]=misc[9];
  116.     }
  117.     else if (len>=8 && point(2) && point(5))
  118.     {
  119.         // AmigaDOS, Style Guide German, leading 0s [kmel]
  120.  
  121.         dt.dat_Format = FORMAT_CDN; // (dd-mm-yy)
  122.  
  123.         dbuf[0]=misc[0];
  124.         dbuf[1]=misc[1];
  125.         dbuf[2]='-';
  126.         dbuf[3]=misc[3];
  127.         dbuf[4]=misc[4];
  128.         dbuf[5]='-';
  129.         dbuf[6]=misc[6];
  130.         dbuf[7]=misc[7];
  131.         dbuf[8]=0;
  132.  
  133.         if (len >= 16)
  134.         {
  135.             tbuf[0]=misc[9+0];
  136.             tbuf[1]=misc[9+1];
  137.             tbuf[3]=misc[9+3];
  138.             tbuf[4]=misc[9+4];
  139.             tbuf[6]=misc[9+6];
  140.             tbuf[7]=misc[9+7];
  141.         }
  142.     }
  143.     else if (len>=6 && ((point(1) && point(3)) || (point(1) && point(4)) || (point(2) && point(4)) ))
  144.     {
  145.         // AmigaDOS, Style Guide German [kmel]
  146.  
  147.         WORD spos, dpos;
  148.  
  149.         dt.dat_Format = FORMAT_CDN; // (dd-mm-yy)
  150.  
  151.         spos = dpos = 0;
  152.  
  153.         if (point(spos+1))
  154.         {
  155.             dbuf[dpos++]='0';
  156.             dbuf[dpos++]=misc[spos++];
  157.         }
  158.         else
  159.         {
  160.             dbuf[dpos++]=misc[spos++];
  161.             dbuf[dpos++]=misc[spos++];
  162.         }
  163.         spos++;
  164.         dbuf[dpos++]='-';
  165.  
  166.         if (point(spos+1))
  167.         {
  168.             dbuf[dpos++]='0';
  169.             dbuf[dpos++]=misc[spos++];
  170.         }
  171.         else
  172.         {
  173.             dbuf[dpos++]=misc[spos++];
  174.             dbuf[dpos++]=misc[spos++];
  175.         }
  176.         spos++;
  177.         dbuf[dpos++]='-';
  178.  
  179.         dbuf[dpos++] = misc[spos++];
  180.         dbuf[dpos++] = misc[spos++];
  181.         dbuf[dpos] = 0;
  182.  
  183.         if (len > spos++)
  184.         {
  185.             tbuf[0]=misc[spos+0];
  186.             tbuf[1]=misc[spos+1];
  187.             tbuf[3]=misc[spos+3];
  188.             tbuf[4]=misc[spos+4];
  189.             tbuf[6]=misc[spos+6];
  190.             tbuf[7]=misc[spos+7];
  191.         }
  192.     }
  193.     else
  194.     {
  195.         // Unbekanntes Format, AmigaDOS soll sein Glück probieren
  196.  
  197.         char *x;
  198.  
  199.         if (x=strstr(misc,"day ")) misc=x+4;
  200.  
  201.         strncpy(dbuf,misc,9);    // Die ersten 9 Zeichen sind Datum
  202.  
  203.         if ((x=strchr(misc,':')) && (UBYTE *)x>=misc+2)
  204.         {
  205.             strncpy(tbuf,x-2,8);  // 2 Zeichen vor dem ersten : ist die Zeit
  206.         }
  207.     }
  208.  
  209. //    printf("Date: '%s'  Time: '%s'\n", dbuf, tbuf);
  210.  
  211.     if (StrToDate(&dt))
  212.         return((dt.dat_Stamp.ds_Days*24*60+dt.dat_Stamp.ds_Minute)*60+dt.dat_Stamp.ds_Tick/TICKS_PER_SECOND);
  213.     else
  214.         return(0);
  215. }
  216.  
  217.  
  218. LONG CurrentSeconds(VOID)
  219. {
  220.     struct DateStamp ds;
  221.  
  222.     if (DateStamp(&ds))
  223.     {
  224.         return((ds.ds_Days*24*60+ds.ds_Minute)*60+ds.ds_Tick/TICKS_PER_SECOND);
  225.     }
  226.     return(0);
  227. }
  228.