|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T n
Length: 2685 (0xa7d)
Types: TextFile
Names: »newgroups.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦cfd40dc56⟧ »EurOpenD3/news/nntp/nntp.1.5.8.tar.Z«
└─⟦2ec98eca6⟧
└─⟦this⟧ »server/newgroups.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦5cced586a⟧ »EurOpenD3/news/nntp/nntp.1.5.7.tar.Z«
└─⟦7340f105e⟧
└─⟦this⟧ »./server/newgroups.c«
#ifndef lint
static char *sccsid = "@(#)newgroups.c 1.13 (Berkeley) 2/6/88";
#endif
#include "common.h"
#include "time.h"
/*
* NEWGROUPS date time ["GMT"] [<distributions>]
*
* Display new newsgroups since a given date and time, but only
* for those in <distributions>.
*/
newgroups(argc, argv)
int argc;
char *argv[];
{
char line[NNTP_STRLEN];
register char *cp, *temp;
static char **dist_list = (char **) NULL;
int distcount = 0;
int i;
long date;
register FILE *date_fp;
if (argc < 3) {
printf("%d Usage: NEWGROUPS yymmdd hhmmss [\"GMT\"] [<distributions>].\r\n",
ERR_CMDSYN);
(void) fflush(stdout);
return;
}
date_fp = fopen(ngdatefile, "r");
if (date_fp == NULL) {
#ifdef SYSLOG
syslog(LOG_ERR, "newgroups: fopen %s: %m", ngdatefile);
#endif
printf("%d Cannot open newsgroup date file.\r\n", ERR_FAULT);
(void) fflush(stdout);
return;
}
/* YYMMDD HHMMSS */
if (strlen(argv[1]) != 6 || strlen(argv[2]) != 6) {
printf("%d Date/time must be in form YYMMDD HHMMSS.\r\n",
ERR_CMDSYN);
(void) fflush(stdout);
(void) fclose(date_fp);
return;
}
(void) strcpy(line, argv[1]); /* yymmdd */
(void) strcat(line, argv[2]); /* hhmmss */
date = dtol(line);
if (date < 0) {
printf("%d Invalid date specification.\r\n", ERR_CMDSYN);
(void) fflush(stdout);
(void) fclose(date_fp);
return;
}
argc -= 3;
argv += 3;
if (argc > 0 && !strcasecmp(*argv, "GMT")) { /* We store stuff in GMT */
++argv; /* anyway, so this is */
--argc; /* a "noop" */
} else /* But that means not GMT */
date = local_to_gmt(date); /* is a definite "op" */
if (argc > 0) {
distcount = get_distlist(&dist_list, *argv);
if (distcount < 0) {
printf("%d Bad distribution list %s:\r\n", *argv);
(void) fflush(stdout);
(void) fclose(date_fp);
return;
}
}
printf("%d New newsgroups since %s follow.\r\n", OK_NEWGROUPS, line);
while (fgets(line, sizeof(line), date_fp) != NULL) {
if ((cp = index(line, '\n')) != NULL)
*cp = '\0';
if ((cp = index(line, ' ')) != NULL)
*cp = '\0';
#ifdef ACTIVE_TIMES_FILE
if (atoi(cp + 1) < date)
continue;
#else
if (atoi(line) < date)
break;
#endif
if (distcount == 0) {
#ifdef ACTIVE_TIMES_FILE
putline(line);
#else
putline(cp + 1);
#endif
} else {
#ifdef ACTIVE_TIMES_FILE
temp = line;
#else
temp = cp + 1;
#endif
cp = index(temp, '.');
if (cp == NULL)
continue;
*cp = '\0';
for (i = 0; i < distcount; ++i)
if (strcmp(temp, dist_list[i]) == 0) {
*cp = '.';
putline(temp);
break;
}
}
}
putchar('.');
putchar('\r');
putchar('\n');
(void) fflush(stdout);
(void) fclose(date_fp);
}