home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / ARCHIVERS / lha208src.lzh / LHA / SRC / osk.c < prev    next >
Text File  |  1994-02-14  |  3KB  |  120 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. #include <sgstat.h>
  15.  
  16. extern int errno;
  17.  
  18. struct sgbuf orig, new;
  19. fix_term()
  20. {
  21.     _gs_opt(1,&orig);
  22.     _gs_opt(1,&new);
  23.     
  24.     if (new.sg_class == 0)
  25.     {
  26.         new.sg_pause = 0;
  27.         _ss_opt(1,&new);
  28.     }
  29. }
  30.  
  31. reset_term()
  32. {
  33.     _ss_opt(1,&orig);
  34. }
  35.  
  36. int stat(fname,stbuf)
  37. char *fname;
  38. struct fildes *stbuf;
  39. {
  40.     int fpath, status;
  41.     
  42.     if ((fpath = open(fname,S_IREAD)) == -1)
  43.            if ((fpath = open(fname,S_IFDIR)) == -1)
  44.                return(-1);
  45.  
  46.     status = _gs_gfd(fpath,stbuf,sizeof(struct fildes));
  47.  
  48.        close(fpath);
  49.  
  50.     if (status != -1)
  51.         return(0);
  52.         
  53.     return (-1);
  54. }
  55.  
  56. /* Unix-like utime() function to update last modified and creation date */
  57. int utime(fname,t,att)
  58. char *fname;
  59. time_t *t;
  60. short att;
  61. {
  62.     struct fildes sp ,*stbuf;
  63.     struct tm *tp;
  64.     int fpath, flag = 0;
  65.     
  66.     tp = localtime(&t[0]);
  67.     if ((fpath = open(fname,S_IREAD | S_IWRITE)) == -1)
  68.         if ((fpath = open(fname,S_IFDIR | S_IREAD | S_IWRITE)) == -1)
  69.             return (-1);
  70.          
  71.     if (_gs_gfd(fpath,&sp,sizeof(struct fildes)) != -1) {
  72.         stbuf = &sp;
  73.         stbuf->fd_date[0] = tp->tm_year & 0xff;
  74.         stbuf->fd_date[1] = (tp->tm_mon  & 0xff) + 1;
  75.         stbuf->fd_date[2] = tp->tm_mday & 0xff;
  76.         stbuf->fd_date[3] = tp->tm_hour & 0xff;
  77.         stbuf->fd_date[4] = tp->tm_min  & 0xff;
  78.         tp = localtime(&t[1]);
  79.         stbuf->fd_dcr[0]  = tp->tm_year & 0xff;
  80.         stbuf->fd_dcr[1]  = (tp->tm_mon  & 0xff) + 1;
  81.         stbuf->fd_dcr[2]  = tp->tm_mday & 0xff;
  82.         if (_ss_pfd(fpath,stbuf) == -1)
  83.             flag = -1;
  84.         _ss_attr(fpath,att);
  85.         close(fpath);
  86.         return(flag);
  87.     } else
  88.         close(fpath);
  89.         
  90.     return (-1);
  91. }
  92.                
  93. long makelong(s)
  94. register unsigned char *s;
  95. {
  96.     register int i = 4;
  97.     long rsize = 0;
  98.   
  99.     while (i--)  
  100.          rsize = (rsize << 8) + *s++;
  101.     return (rsize);
  102. }            
  103.     
  104. time_t lm_to_time_t(lm)
  105. char *lm;
  106. {
  107.     struct tm tq;
  108.     
  109.     tq.tm_sec   =  0;
  110.     tq.tm_min   =  lm[4] & 0xFF;
  111.     tq.tm_hour  =  lm[3] & 0xFF;
  112.     tq.tm_mday  =  lm[2] & 0xFF;
  113.     tq.tm_mon   = (lm[1] & 0xFF) - 1;
  114.     tq.tm_year  =  lm[0] & 0xFF;
  115.     tq.tm_isdst =  -1;
  116.     
  117.     return(mktime(&tq));
  118. }
  119.     
  120.