home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
TELECOM
/
OSKBox.lzh
/
MAILBOX
/
CC
/
latest.c
< prev
next >
Wrap
Text File
|
1990-01-01
|
3KB
|
113 lines
/* */
/* latest - list files modified since some date */
/* */
/* Questions and comments can be addressed to: */
/* */
/* Eric Williams */
/* 5712 San Diego */
/* El Cerrito, CA 94530 */
/* 415-526-1575 evenings/weekends */
#include <stdio.h>
#include <direct.h>
#include <dir.h>
#include <errno.h>
int disk;
struct direct *entry;
struct {
unsigned char year, month, day, hour, min;
} limit;
main (argc, argv)
int argc;
char *argv[];
{
int dir;
int time, date, tick;
short day;
int i, y, m, d, h, mn;
if (argc < 2) {
printf ("form: latest directory [MM/DD[/YY]] [HH:MM]\n");
exit (0);
}
if ((dir = open (argv[1], 0x81)) <= 0) exit (errno);
if ((disk = opendisk (dir)) <= 0) exit (errno);
close (dir);
_sysdate (0, &time, &date, &day, &tick);
y = (date >> 16) % 100; m = (date >> 8) & 0xff; d = date & 0xff;
limit.year = y; limit.month = m; limit.day = d;
limit.hour = h = 0; limit.min = mn = 0;
for (i = 2; i < argc; i++) {
if (index (argv[i], '/')) {
sscanf (argv[2], "%d/%d/%d", &m, &d, &y);
limit.year = y; limit.month = m; limit.day = d;
}
if (index (argv[i], ':')) {
sscanf (argv[3], "%d:%d", &h, &mn);
limit.hour = h; limit.min = mn;
}
}
scan (argv[1]);
close (disk);
}
opendisk(path)
int path;
{
char dname[33];
*dname = '/';
_gs_devn (path, dname+1);
strcat (dname, "@");
return (open (dname, 0x01));
}
scan (node)
char *node;
{
DIR *path, *tpath;
char file[80];
path = opendir (node);
while (entry = readdir (path))
if (entry->d_name[0] != '.') {
sprintf (file, "%s/%s", node, entry->d_name);
if (checkdate (entry, file) == -1)
if ((tpath = opendir (file)) == NULL)
exit (errno);
else {
closedir (tpath);
scan (file);
}
}
closedir (path);
return (0);
}
checkdate (entry, filename)
struct direct *entry;
char *filename;
{
struct fildes info;
long diskpos;
lseek (disk, 256 * entry->d_addr, 0);
read (disk, &info, sizeof(info));
if (info.fd_att & 0x80) return (-1);
if (datecmp (&limit, info.fd_date) < 0)
printf ("%s\n", filename);
return (0);
}
datecmp (a, b)
unsigned char *a, *b;
{
int i, c;
for (i = 0; i < 5; i++)
if (c = *a++ - *b++) return (c);
return (0);
}