home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
f
/
finfo16.zip
/
FINFO.C
next >
Wrap
C/C++ Source or Header
|
1989-01-03
|
3KB
|
158 lines
/*
* finfo - dos filter update file size/date info in a file
* directory listing.
*
* 26-feb-87 s.h.smith
*
*/
#define VERSION "Finfo v1.6 01-03-89 S.H.Smith"
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>
#define ft_day (finfo->date & 31)
#define ft_month ((finfo->date >> 5) & 15)
#define ft_year ((finfo->date >> 9) & 127)
struct FIND *finfo;
void clean(char *dir,
char *source,
char *dest)
/* clean up a text line that might contain a filename.
if there is a legal filename, copy it to dest. otherwise
dest will contain an empty string */
{
char *s,*d;
int ifd;
char temp[255];
/* make sure source name is legal; this makes pipes from 'dir' and other
similar utilities work better */
strcpy(temp,source);
strcat(temp," ");
temp[12] = 0;
for (s=temp; (*s) && (*s != '.'); s++)
;
if ((temp[8] == ' ') && (*s != '.'))
temp[8] = '.';
s = temp;
d = dest;
while (*s)
{ /* copy everything but spaces */
if (*s != ' ')
*d++ = *s;
s++;
}
*d = 0;
strcpy(temp,dir);
strcat(temp,dest);
/* check the source file; if it is not valid then skip over it */
finfo = findfirst(temp,0x21);
if (finfo == NULL) {
dest[0] = 0;
return;
}
}
char *getline(char *buf)
{
char *bufstart = buf;
int i;
int c;
i = 0;
for (;;) {
c = getchar();
if ((c == EOF) || (c == 26))
return NULL;
if ((c == '\n') || (i >= 255)) {
*buf = 0;
return bufstart;
}
if ((c != 0) && (c != '\r') && (c != 0xFF)) {
*buf++ = c;
i++;
}
}
}
putln(char *s)
{
while (*s)
putchar(*s++);
putchar('\n');
}
main(int argc, char *argv[])
{
char line[255];
char name[255];
char *rest;
char buf[BUFSIZ];
char dir[255];
setbuf(stdout,buf);
if (argc == 2) {
strcpy(dir,argv[1]);
if (dir[strlen(dir)-1] != '\\')
strcat(dir,"\\");
}
else {
printf("%s\n",VERSION);
printf("Usage: finfo DIRECTORY <filelist >newlist\n");
printf("Example: finfo C:\\DL1 <C:\\PCB\\GEN\\DIR3 >DIR3.NEW\n");
exit(1);
}
/* process all standard input lines */
while (getline(line) != NULL) {
clean(dir,line,name);
if (finfo == NULL)
putln(line);
else
if ((finfo->size <= 0) ||
(ft_month < 1) || (ft_month > 12) ||
(ft_day < 1) || (ft_day > 31) ||
(ft_year < 1) || (ft_year > 30))
{
putln(line);
}
else
{
if (strlen(line) > 33)
rest = line+33;
else
rest = "";
printf("%-12s%9ld %02d-%02d-%02d ",
name,
finfo->size,
ft_month,
ft_day,
ft_year+80);
putln(rest);
}
}
fflush(stdout);
}