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 >
Wrap
Text File
|
1994-02-14
|
3KB
|
120 lines
/* Stat.c - Unix-like stat call to return file descriptor info
* functions as follows:
* stat(fname,stbuf)
* char *fname; pointer to filename string
* struct fildes *stbuf; pointer to file descriptor buffer
*
* returns -1 if file does not exist or cannot be opened
*
*/
#include <modes.h>
#include <direct.h> /* for struct fildes */
#include <time.h>
#include <sgstat.h>
extern int errno;
struct sgbuf orig, new;
fix_term()
{
_gs_opt(1,&orig);
_gs_opt(1,&new);
if (new.sg_class == 0)
{
new.sg_pause = 0;
_ss_opt(1,&new);
}
}
reset_term()
{
_ss_opt(1,&orig);
}
int stat(fname,stbuf)
char *fname;
struct fildes *stbuf;
{
int fpath, status;
if ((fpath = open(fname,S_IREAD)) == -1)
if ((fpath = open(fname,S_IFDIR)) == -1)
return(-1);
status = _gs_gfd(fpath,stbuf,sizeof(struct fildes));
close(fpath);
if (status != -1)
return(0);
return (-1);
}
/* Unix-like utime() function to update last modified and creation date */
int utime(fname,t,att)
char *fname;
time_t *t;
short att;
{
struct fildes sp ,*stbuf;
struct tm *tp;
int fpath, flag = 0;
tp = localtime(&t[0]);
if ((fpath = open(fname,S_IREAD | S_IWRITE)) == -1)
if ((fpath = open(fname,S_IFDIR | S_IREAD | S_IWRITE)) == -1)
return (-1);
if (_gs_gfd(fpath,&sp,sizeof(struct fildes)) != -1) {
stbuf = &sp;
stbuf->fd_date[0] = tp->tm_year & 0xff;
stbuf->fd_date[1] = (tp->tm_mon & 0xff) + 1;
stbuf->fd_date[2] = tp->tm_mday & 0xff;
stbuf->fd_date[3] = tp->tm_hour & 0xff;
stbuf->fd_date[4] = tp->tm_min & 0xff;
tp = localtime(&t[1]);
stbuf->fd_dcr[0] = tp->tm_year & 0xff;
stbuf->fd_dcr[1] = (tp->tm_mon & 0xff) + 1;
stbuf->fd_dcr[2] = tp->tm_mday & 0xff;
if (_ss_pfd(fpath,stbuf) == -1)
flag = -1;
_ss_attr(fpath,att);
close(fpath);
return(flag);
} else
close(fpath);
return (-1);
}
long makelong(s)
register unsigned char *s;
{
register int i = 4;
long rsize = 0;
while (i--)
rsize = (rsize << 8) + *s++;
return (rsize);
}
time_t lm_to_time_t(lm)
char *lm;
{
struct tm tq;
tq.tm_sec = 0;
tq.tm_min = lm[4] & 0xFF;
tq.tm_hour = lm[3] & 0xFF;
tq.tm_mday = lm[2] & 0xFF;
tq.tm_mon = (lm[1] & 0xFF) - 1;
tq.tm_year = lm[0] & 0xFF;
tq.tm_isdst = -1;
return(mktime(&tq));
}