home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / ARCHIVERS / lhasrc.lzh / osk.c < prev    next >
Text File  |  1992-05-20  |  2KB  |  101 lines

  1. /*  Stat.c - Unix-like stat call to return file descriptor info
  2.  *  functions as follows:
  3.  *    stat(fname,stbuf)
  4.  *    char *fname;               pointer to filename string
  5.  *  struct fildes *stbuf;      pointer to file descriptor buffer
  6.  *
  7.  *  returns -1 if file does not exist or cannot be opened
  8.  *
  9.  */ 
  10.  
  11. #include <modes.h> 
  12. #include <direct.h>  /* for struct fildes */
  13. #include <time.h>
  14.  
  15. extern int errno;
  16.  
  17. int stat(fname,stbuf)
  18. char *fname;
  19. struct fildes *stbuf;
  20. {
  21.     int fpath, status;
  22.     
  23.     if ((fpath = open(fname,S_IREAD)) == -1)
  24.            if ((fpath = open(fname,S_IFDIR)) == -1)
  25.                return(-1);
  26.  
  27.     status = _gs_gfd(fpath,stbuf,sizeof(struct fildes));
  28.  
  29.        close(fpath);
  30.  
  31.     if (status != -1)
  32.         return(0);
  33.         
  34.     return (-1);
  35. }
  36.  
  37. /* Unix-like utime() function to update last modified and creation date */
  38. int utime(fname,t,att)
  39. char *fname;
  40. time_t *t;
  41. short att;
  42. {
  43.     struct fildes sp ,*stbuf;
  44.     struct tm *tp;
  45.     int fpath, flag = 0;
  46.     
  47.     tp = localtime(&t[0]);
  48.     if ((fpath = open(fname,S_IREAD | S_IWRITE)) == -1)
  49.         if ((fpath = open(fname,S_IFDIR | S_IREAD | S_IWRITE)) == -1)
  50.             return (-1);
  51.          
  52.     if (_gs_gfd(fpath,&sp,sizeof(struct fildes)) != -1) {
  53.         stbuf = &sp;
  54.         stbuf->fd_date[0] = tp->tm_year & 0xff;
  55.         stbuf->fd_date[1] = (tp->tm_mon  & 0xff) + 1;
  56.         stbuf->fd_date[2] = tp->tm_mday & 0xff;
  57.         stbuf->fd_date[3] = tp->tm_hour & 0xff;
  58.         stbuf->fd_date[4] = tp->tm_min  & 0xff;
  59.         tp = localtime(&t[1]);
  60.         stbuf->fd_dcr[0]  = tp->tm_year & 0xff;
  61.         stbuf->fd_dcr[1]  = (tp->tm_mon  & 0xff) + 1;
  62.         stbuf->fd_dcr[2]  = tp->tm_mday & 0xff;
  63.         if (_ss_pfd(fpath,stbuf) == -1)
  64.             flag = -1;
  65.         _ss_attr(fpath,att);
  66.         close(fpath);
  67.         return(flag);
  68.     } else
  69.         close(fpath);
  70.         
  71.     return (-1);
  72. }
  73.                
  74. long makelong(s)
  75. register unsigned char *s;
  76. {
  77.     register int i = 4;
  78.     long rsize = 0;
  79.   
  80.     while (i--)  
  81.          rsize = (rsize << 8) + *s++;
  82.     return (rsize);
  83. }            
  84.     
  85. time_t lm_to_time_t(lm)
  86. char *lm;
  87. {
  88.     struct tm tq;
  89.     
  90.     tq.tm_sec   =  0;
  91.     tq.tm_min   =  lm[4] & 0xFF;
  92.     tq.tm_hour  =  lm[3] & 0xFF;
  93.     tq.tm_mday  =  lm[2] & 0xFF;
  94.     tq.tm_mon   = (lm[1] & 0xFF) - 1;
  95.     tq.tm_year  =  lm[0] & 0xFF;
  96.     tq.tm_isdst =  -1;
  97.     
  98.     return(mktime(&tq));
  99. }
  100.     
  101.