summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/dd_struc.h
blob: cd46c2dfbcecbd8fbc2d1f67a540b1ad1a56f945 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
** DosDate macros - access bitfield values from DOS file date & time
**  for Borland C and C++ compilers by: Wayne Hamilton
*/

#define dd_yr(d)      (((struct { unsigned day:5, mo:4, yr:7; } *) &d)->yr)
#define dd_mo(d)      (((struct { unsigned day:5, mo:4, yr:7; } *) &d)->mo)
#define dd_day(d)     (((struct { unsigned day:5, mo:4, yr:7; } *) &d)->day)
#define dd_hr(t)      (((struct { unsigned sec:5, mn:6, hr:5; } *) &t)->hr)
#define dd_mn(t)      (((struct { unsigned sec:5, mn:6, hr:5; } *) &t)->mn)
#define dd_sec(t)     (((struct { unsigned sec:5, mn:6, hr:5; } *) &t)->sec)

/* then: year = dd_yr(ffblk.ff_date); */

#ifdef TEST

#include <stdio.h>
#include <dir.h>

main(int argc, char *argv[])
{
      struct ffblk ff;

      findfirst(argv[0], &ff, 0xff);
      printf("%s was saved on %d-%d-%d at %d:%02d:%02d\n", argv[0],
            dd_mo(ff.ff_fdate), dd_day(ff.ff_fdate), dd_yr(ff.ff_fdate),
            dd_hr(ff.ff_ftime), dd_mn(ff.ff_ftime), 2 * dd_sec(ff.ff_ftime));
      return 0;
}

#endif