home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / access / diverses / fattr / fattr.c next >
C/C++ Source or Header  |  1994-03-19  |  3KB  |  113 lines

  1. #include <windows.h>
  2. #include <dos.h>
  3. #include <time.h>
  4. #include <errno.h>
  5.  
  6. double FAR PASCAL __export GetFileDateTime(LPSTR lpszFileName);
  7. double FAR PASCAL __export ConvertDosTime(struct _find_t *ff);
  8. LONG FAR PASCAL __export GetFileSize(LPSTR lpszFileName);
  9. LONG FAR PASCAL __export GetDiskFree(int drive);
  10. WORD FAR PASCAL __export DosFindFirst(LPSTR lpszFileName, WORD nAttrib, struct _find_t *ff);
  11. WORD FAR PASCAL __export DosFindNext(struct _find_t *ff);
  12.  
  13. WORD FAR PASCAL __export SetFAttr(LPSTR lpFileName, int attr);
  14. WORD FAR PASCAL __export GetFAttr(LPSTR lpFileName);
  15.    
  16. double FAR PASCAL __export ConvertDosTime(struct _find_t *ff)
  17. {
  18.     struct tm tm;
  19.     time_t mtime;
  20.  
  21.     // convert from DOS date/time format to time_t format                 
  22.     tm.tm_year = (ff->wr_date >> 9) + 80;
  23.     tm.tm_mon =    ((ff->wr_date >> 5) & 15) - 1;
  24.     tm.tm_mday = (ff->wr_date & 31);
  25.     tm.tm_hour = (ff->wr_time >> 11);
  26.     tm.tm_min = ((ff->wr_time >> 5) & 63);
  27.     tm.tm_sec = (ff->wr_time & 31) * 2;
  28.     mtime = mktime(&tm);
  29.  
  30.     // convert from time_t format to Access format
  31.     return((((double) mtime - (double) (7.0 * 60.0 * 60.0)) / (double) 86400.0) + (double) 25569.0);
  32. }
  33.  
  34. WORD FAR PASCAL __export DosFindFirst(LPSTR lpszFileName, WORD nAttrib, struct _find_t *ff)
  35. {
  36.     return(_dos_findfirst(lpszFileName, nAttrib, ff));
  37. }
  38.  
  39. WORD FAR PASCAL __export DosFindNext(struct _find_t *ff)
  40. {
  41.     return(_dos_findnext(ff));
  42. }
  43.  
  44. LONG FAR PASCAL __export GetDiskFree(int drive)
  45. {
  46.     int ret;
  47.     struct _diskfree_t df;
  48.     
  49.     ret = _dos_getdiskfree(drive, &df);
  50.     return(ret == 0 ? (LONG) df.avail_clusters * (LONG) df.sectors_per_cluster * (LONG) df.bytes_per_sector : 0L);
  51. }
  52.  
  53. double FAR PASCAL __export GetFileDateTime(LPSTR lpszFileName)
  54. {
  55.     int ret;
  56.     struct _find_t ff;
  57.     
  58.     ret = _dos_findfirst(lpszFileName, 0, &ff);
  59.     return(ret == 0 ? ConvertDosTime(&ff) : (double) 0);
  60. }
  61.  
  62. LONG FAR PASCAL __export GetFileSize(LPSTR lpszFileName)
  63. {
  64.     int ret;
  65.     struct _find_t ff;
  66.     
  67.     ret = _dos_findfirst(lpszFileName, 0, &ff);
  68.     return(ret == 0 ? ff.size : 0L);
  69. }
  70.  
  71.  
  72. WORD convertErr(unsigned err)
  73. {
  74.     int retval;
  75.  
  76.     switch (errno)
  77.         {
  78.         case ENOENT:
  79.             retval = -2;
  80.             break;
  81.         case EACCES:
  82.             retval = -5;
  83.             break;
  84.         default:
  85.             retval = -1 * err;
  86.             break;
  87.         }
  88.     return retval;
  89. }
  90.  
  91. WORD FAR PASCAL __export GetFAttr(LPSTR lpFileName)
  92. {
  93.     int retval;
  94.     unsigned attrib;
  95.     retval = _dos_getfileattr(lpFileName, &attrib);
  96.     if (errno != 0) 
  97.         retval = convertErr(errno);
  98.     else retval = attrib;
  99.     return retval;
  100. }
  101.  
  102. WORD FAR PASCAL __export SetFAttr(LPSTR lpFileName, int attr)
  103. {
  104.     int retval;
  105.  
  106.     retval = _dos_setfileattr(lpFileName, attr);
  107.     if (errno != 0) 
  108.         retval = convertErr(errno);
  109.     else retval = 0;
  110.     return retval;
  111. }
  112.  
  113.