|
|
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 m
Length: 2428 (0x97c)
Types: TextFile
Names: »mkdomext.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦bfebc70e2⟧ »EurOpenD3/mail/sendmail-5.65b+IDA-1.4.3.tar.Z«
└─⟦f9e35cd84⟧
└─⟦this⟧ »sendmail/ida/aux/mkdomext.c«
/*
** MKDOMEXT -- Extend domain names
** Copyright (c) 1987 Lennart Lovstrand
** CIS Dept, Univ of Linkoping, Sweden
**
** Use it, abuse it, but don't sell it.
*/
#include "useful.h"
#include <stdio.h>
#include <ctype.h>
#ifndef lint
static char SccsId[] = "@(#)mkdomext.c 1.5 (lel@ida.liu.se) 4/24/87";
#endif /* !lint */
#ifdef __STDC__
int instring(const char *, const char *);
int ispart(const char *, const char *, int);
#else /* !__STDC__ */
# define const
int instring();
int ispart();
#endif /* __STDC__ */
char * index();
char *Progname;
main(argc, argv)
int argc;
char **argv;
{
char buf[BUFSIZ];
char domains[BUFSIZ];
char *tab, *p, *index();
Progname = argv[0];
if (argc == 1) {
fprintf(stderr, "%s: no domains?\n", Progname);
exit(1);
}
/* collect the argument domain names */
domains[0] = '\0';
for (argc--, argv++; argc > 0; argc--, argv++) {
if (strlen(*argv) + 3 > sizeof(domains)) {
fprintf(stderr, "%s: too many domain arguments--\n %s %s %s\n",
Progname,
"chain two instances of", Progname,
"together or recompile with larger ``domains'' array");
exit(1);
}
(void) strcat(domains, " .");
(void) strcat(domains, *argv);
}
while (gets(buf) != NULL) {
tab = index(buf, '\t');
if (tab != NULL)
*tab = '\0';
for (p = index(buf, '.'); p != NULL; p = index(p + 1, '.')) {
if (instring(domains, p)) {
for (; p != NULL; p = index(p + 1, '.')) {
*p = '\0';
if (tab != NULL)
printf("%s\t%s\n", buf, tab + 1);
else
printf("%s\n", buf);
*p = '.';
}
break;
}
}
if (tab != NULL)
*tab = '\t';
puts(buf);
}
}
/*
** INSTRING -- Returns TRUE if the source string ``s'' can be found
** as a substring in target string ``t''.
*/
instring(t, s)
const char *t, *s;
{
register const char *p;
register int len = strlen(s);
for (p = index(t, *s); p != NULL; p = index(p + 1, *s))
if (ispart(p, s, len))
return TRUE;
return FALSE;
}
/*
** ISPART -- Compare at most the first n chars of two strings
** without respect to upper/lower case.
*/
ispart(s, t, n)
register const char *s, *t;
register int n;
{
for (; n > 0 && *s != '\0' && *t != '\0'; s++, t++, n--)
if ((isupper(*s) ? tolower(*s) : *s) !=
(isupper(*t) ? tolower(*t) : *t))
break;
return (n == 0 || *s == *t); /* really *s == 0 && *t == 0 */
}