home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / asmutl / make-ds.lbr / PARSEDIR.CQ / PARSEDIR.C
Encoding:
C/C++ Source or Header  |  1986-09-04  |  2.1 KB  |  95 lines

  1. /* File PARSEDIR.C BDS-C Ver 1.1 04May85 */
  2. /* v 1.1 fixed error check on mixed relative/real-time */
  3. #include <bdscio.h>
  4. #include "make.h"
  5.  
  6. /*
  7.  * Get a file's creation date.
  8.  */
  9. int getdate(f)
  10. FILENODE *f;
  11. {
  12.     if(f->fdate != NULL || filedate(f) != -1) return;
  13.  
  14.     if(f->fflag & ROOTP == 0)
  15.     {
  16.         printf("Can't get date for file '%s'\n", f->fname);
  17.         f->fdate = endoftime;
  18.     } else f->fdate = bigbang;
  19.     return;
  20. }
  21.  
  22. /*
  23.  * filedate - return file's creation or modified date
  24.  *  (CP/M with DATSTAMP only.)
  25.  * Returns -1 if file cannot be found, 0 if successful
  26.  */
  27. filedate(fnd)
  28. FILENODE *fnd;
  29. {
  30.     DATE datetime;
  31.     DATE *adate();
  32.  
  33.     if(osdate(fnd->fname, &datetime) == -1) return -1;
  34.     fnd->fdate = adate(&datetime);
  35. }
  36.  
  37.  
  38. /*
  39.  * laterdt - compare two dates.
  40.  * Return -1, 0 or 1 if date1 < date2, date1 == date2, or date1 > date2
  41.  */
  42. laterdt(date1, date2)
  43. DATE *date1;
  44. DATE *date2;
  45. {
  46.     int i;
  47.     char hi1,hi2;
  48.     unsigned *pu,datval1,datval2;
  49.     /* This little kludgery is because DATSTAMP my have either real-time
  50.        clock running or a counter clock running.
  51.     */
  52.     hi1 = (date1->d_s[3]) & 0x80;
  53.     hi2 = (date2->d_s[3]) & 0x80;
  54.     if (hi1 ^ hi2) {/* Possible trouble, looks like two
  55.                    different type of dates. */
  56.         pu = &date1->d_s[3];
  57.         datval1 = *pu;
  58.         pu = &date2->d_s[3];
  59.         datval2 = *pu;
  60.  
  61.         /* unless one date is 0000 (bigbang) or FFFF (endoftime)
  62.             , its trouble */
  63.         if  (  ( hi1 && !(datval1 == 0xffff || datval2 == 0x0000) )
  64.             || ( hi2 && !(datval2 == 0xffff || datval1 == 0x0000) ) ) {          printf("\7\nTwo different type of clock readings detected...\Aborting.\n");
  65.           exit();
  66.         }
  67.     }
  68.  
  69.     for (i=0; i<5; i++) {
  70.         if(date1->d_s[i] > date2->d_s[i]) return 1;
  71.         if(date1->d_s[i] < date2->d_s[i]) return -1;
  72.     }
  73.     return 0;    /* Say they are equal. */
  74. }
  75.  
  76.  
  77. /*
  78.  * adate - allocate a date with the given time
  79.  */
  80. DATE *adate(time)
  81. DATE *time;
  82. {
  83.     DATE *d;
  84.     int i;
  85.  
  86.     if((d = /*(DATE)*/alloc(sizeof *d)) == NULL) allerr();
  87.     for (i=0; i<5; i++) d->d_s[i]=time->d_s[i];
  88.     return d;
  89.  
  90. }
  91. real-time
  92.        clock running or a counter clock running.
  93.     */
  94.     hi1 = (date1->d_s[3]) & 0x80;
  95.     hi2 = (date2->d_s[3]