home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / crt / src / dostypes.h < prev    next >
C/C++ Source or Header  |  1998-06-17  |  3KB  |  94 lines

  1. /***
  2. *dostypes.h - defines DOS packed date and time types
  3. *
  4. *       Copyright (c) 1987-1997, Microsoft Corporation. All rights reserved.
  5. *
  6. *Purpose:
  7. *       This file defines the DOS packed date and time types.
  8. *
  9. *       [Internal]
  10. *
  11. ****/
  12.  
  13. #if _MSC_VER > 1000
  14. #pragma once
  15. #endif  /* _MSC_VER > 1000 */
  16.  
  17. #ifndef _INC_DOSTYPES
  18. #define _INC_DOSTYPES
  19.  
  20. #ifndef _CRTBLD
  21. /*
  22.  * This is an internal C runtime header file. It is used when building
  23.  * the C runtimes only. It is not to be used as a public header file.
  24.  */
  25. #error ERROR: Use of C runtime library internal header file.
  26. #endif  /* _CRTBLD */
  27.  
  28. #define MASK4   0xf     /* 4 bit mask */
  29. #define MASK5   0x1f    /* 5 bit mask */
  30. #define MASK6   0x3f    /* 6 bit mask */
  31. #define MASK7   0x7f    /* 7 bit mask */
  32.  
  33. #define DAYLOC          0       /* day value starts in bit 0 */
  34. #define MONTHLOC        5       /* month value starts in bit 5 */
  35. #define YEARLOC         9       /* year value starts in bit 9 */
  36.  
  37. #define SECLOC          0       /* seconds value starts in bit 0 */
  38. #define MINLOC          5       /* minutes value starts in bit 5 */
  39. #define HOURLOC         11      /* hours value starts in bit 11 */
  40.  
  41. #define _DATECAST(fd)                   * (unsigned short *) &(fd)
  42. #define _TIMECAST(ft)                   * (unsigned short *) &(ft)
  43.  
  44. #ifdef _WIN32
  45.  
  46. #define SET_DOS_DAY(fd, xday)           fd.Day = (unsigned short)((xday) & MASK5)
  47. #define SET_DOS_MONTH(fd, xmon)         fd.Month = (unsigned short)((xmon) & MASK4)
  48. #define SET_DOS_YEAR(fd, xyr)           fd.Year = (unsigned short)((xyr) & MASK7)
  49.  
  50. #define SET_DOS_HOUR(ft, xhr)           ft.Hours = (unsigned short)((xhr) & MASK5)
  51. #define SET_DOS_MIN(ft, xmin)           ft.Minutes = (unsigned short)((xmin) & MASK6)
  52. #define SET_DOS_SEC(ft, xsec)           ft.DoubleSeconds = (unsigned short)((xsec) & MASK5)
  53.  
  54. #define DOS_DAY(fd)                     (fd.Day)
  55. #define DOS_MONTH(fd)                   (fd.Month)
  56. #define DOS_YEAR(fd)                    (fd.Year)
  57.  
  58. #define DOS_HOUR(ft)                    (ft.Hours)
  59. #define DOS_MIN(ft)                     (ft.Minutes)
  60. #define DOS_SEC(ft)                     (ft.DoubleSeconds)
  61.  
  62. #else  /* _WIN32 */
  63.  
  64. #ifdef _MAC
  65.  
  66. #define SET_DOS_DAY(fd, xday)           fd.day = (unsigned short)((xday) & MASK5)
  67. #define SET_DOS_MONTH(fd, xmon)         fd.month = (unsigned short)((xmon) & MASK4)
  68. #define SET_DOS_YEAR(fd, xyr)           fd.year = (unsigned short)((xyr) & MASK7)
  69.  
  70. #define SET_DOS_HOUR(ft, xhr)           ft.hours = (unsigned short)((xhr) & MASK5)
  71. #define SET_DOS_MIN(ft, xmin)           ft.minutes = (unsigned short)((xmin) & MASK6)
  72. #define SET_DOS_SEC(ft, xsec)           ft.twosecs = (unsigned short)((xsec) & MASK5)
  73.  
  74. #define DOS_DAY(fd)                     (fd.day)
  75. #define DOS_MONTH(fd)                   (fd.month)
  76. #define DOS_YEAR(fd)                    (fd.year)
  77.  
  78. #define DOS_HOUR(ft)                    (ft.hours)
  79. #define DOS_MIN(ft)                     (ft.minutes)
  80. #define DOS_SEC(ft)                     (ft.twosecs)
  81.  
  82. #else  /* _MAC */
  83.  
  84. #error ERROR - ONLY WIN32 OR MAC TARGET SUPPORTED!
  85.  
  86. #endif  /* _MAC */
  87.  
  88. #endif  /* _WIN32 */
  89.  
  90. #define XTIME(d,t) _dtoxtime(DOS_YEAR(d),DOS_MONTH(d),DOS_DAY(d),DOS_HOUR(t),\
  91.      DOS_MIN(t),DOS_SEC(t)*2)
  92.  
  93. #endif  /* _INC_DOSTYPES */
  94.