V10/cmd/weather/weather_save.c

Compare this file to the similar file:
Show the results in this format:

# include "stdio.h"
# include "assert.h"
# include "ctype.h"
# include "time.h"
# include "sys/types.h"
# include "sys/stat.h"
FILE *fo, *ft;
char code[10];
int pass=0;
char passes[200][8];
int np=0;

main(argc,argv)
	char *argv[];
/* distributes weather.  codes to pass through are on file in argv[1] */
{
char lbuff[200], *line, *trim();
if (argc>1) passlist(argv[1]);
while (gets(lbuff))
	{
	line = trim(lbuff);
	if (strlen(line)==8 && alldigs(line) && strncmp(line+3, "00",2)==0)
		newcode(line+3);
	if (pass)
		puts(line);
	if (fo)
		fprintf(fo, "%s\n", line);
	}
}
char *
trim(s)
	char *s;
{
char *p;
while (*s &&iscntrl(*s)) s++;
for(p=s; *p; p++)
	if (iscntrl(*p)) *p = ' ';
while (*--p == ' ') *p=0;
return(s);
}
newcode(s)
	char *s;
{
long t, time();
char fn[10], otherf[10];
int i, k1, k2;
struct tm *localtime(), *tp;
struct stat thisbuf, otherbuf;
if (strcmp(s, code)==0) return;
if (fo!=NULL) fclose(fo);
strcpy(code, s);
t = time(0);
tp = localtime(&t);
sprintf(fn, "W%s%c", code, tp->tm_hour>=12 ? 'P' : 'A');
sprintf(otherf, "W%s%c", code, tp->tm_hour<12 ? 'P' : 'A');
k1=stat (fn, &thisbuf);
k2=stat (otherf, &otherbuf);
if (k1==0 && k2==0 && otherbuf.st_mtime > thisbuf.st_mtime)
	unlink(fn);
fo = fopen(fn, "a");
pass=0;
for(i=0; i<np; i++)
	if (strcmp(passes[i], code)==0)
		pass=1;
}
passlist(s)
	char *s;
{
ft = fopen(s, "r");
if (ft==NULL) return;
while (fgets(passes[np], 8, ft))
	passes[np++][5]=0;
}
alldigs(s)
	char *s;
{
while (*s)
	if (!isdigit(*s++))
		return(0);
return(1);
}