/* File PARSEDIR.C BDS-C Ver 1.1 04May85 */ /* v 1.1 fixed error check on mixed relative/real-time */ #include #include "make.h" /* * Get a file's creation date. */ int getdate(f) FILENODE *f; { if(f->fdate != NULL || filedate(f) != -1) return; if(f->fflag & ROOTP == 0) { printf("Can't get date for file '%s'\n", f->fname); f->fdate = endoftime; } else f->fdate = bigbang; return; } /* * filedate - return file's creation or modified date * (CP/M with DATSTAMP only.) * Returns -1 if file cannot be found, 0 if successful */ filedate(fnd) FILENODE *fnd; { DATE datetime; DATE *adate(); if(osdate(fnd->fname, &datetime) == -1) return -1; fnd->fdate = adate(&datetime); } /* * laterdt - compare two dates. * Return -1, 0 or 1 if date1 < date2, date1 == date2, or date1 > date2 */ laterdt(date1, date2) DATE *date1; DATE *date2; { int i; char hi1,hi2; unsigned *pu,datval1,datval2; /* This little kludgery is because DATSTAMP my have either real-time clock running or a counter clock running. */ hi1 = (date1->d_s[3]) & 0x80; hi2 = (date2->d_s[3]) & 0x80; if (hi1 ^ hi2) {/* Possible trouble, looks like two different type of dates. */ pu = &date1->d_s[3]; datval1 = *pu; pu = &date2->d_s[3]; datval2 = *pu; /* unless one date is 0000 (bigbang) or FFFF (endoftime) , its trouble */ if ( ( hi1 && !(datval1 == 0xffff || datval2 == 0x0000) ) || ( hi2 && !(datval2 == 0xffff || datval1 == 0x0000) ) ) { printf("\7\nTwo different type of clock readings detected...\Aborting.\n"); exit(); } } for (i=0; i<5; i++) { if(date1->d_s[i] > date2->d_s[i]) return 1; if(date1->d_s[i] < date2->d_s[i]) return -1; } return 0; /* Say they are equal. */ } /* * adate - allocate a date with the given time */ DATE *adate(time) DATE *time; { DATE *d; int i; if((d = /*(DATE)*/alloc(sizeof *d)) == NULL) allerr(); for (i=0; i<5; i++) d->d_s[i]=time->d_s[i]; return d; }