|
|
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 s
Length: 4070 (0xfe6)
Types: TextFile
Names: »soelim.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/euug-87hel/sec1/soelim/soelim.c«
#include <stdio.h>
#include <string.h>
/* Renamed soelim and .PS support added - Bill Stewart
AT&T Bell Labs 2G-218, Holmdel NJ 1-201-949-0705 ihnp4!ho95c!wcs*/
/* Catso will cat the standard input to the standard output, inserting
* all files referenced by the nroff commands '.so' or '.nx'.
* J. Leth, IH 55414 6B-326, x6133.
* (original program from: D. A. Spicer)
*/
#define SPACE " \t\n"
#define MAXLINE 511
char buff[MAXLINE];
char *MyName;
int verbose=0;
main(argc, argv)
int argc;
char *argv[];
{
FILE *inp;
int i;
void exit(); /* Make lint quiet */
#ifdef CTRACE
ctroff();
#endif
if (isatty(0) && argc == 1) {
/* If input is from the terminal, and there are no args,
* print usage instructions and exit.
*/
fprintf(stderr, "Usage:\t%s [ file or '-' ] ...\nX Cats the files (standard input, default) together, inserting\nX files referenced by the nroff commands '.so' and '.nx' in their\nX proper positions. File name '-' means standard input\n", *argv[0]);
exit(1);
};
MyName = argv[0];
if (strcmp(argv[1],"-v")==0) {verbose++; argc--; argv++; printf("Verbose!\n");}
if (argc == 1) {
fetch(stdin);
} else {
for (i=1; i < argc; ++i) {
if (strcmp(argv[i], "-") == 0) {
fetch(stdin);
} else {
inp = fopen(argv[i], "r");
if (inp == NULL) {
fprintf(stderr,
"%s: can't open file '%s'.\n",
MyName,argv[i]);
} else {
fetch(inp);
}
}
}
}
return (0); /* If you get here, you're OK */
}
fetch(fdes)
FILE *fdes;
{
FILE *newdes;
char *fname, *ptr;
void exit();
while(fgets(buff,sizeof(buff),fdes) != NULL ) {
/* strncpy(line, buff, sizeof(line)); */
if (buff[0]=='.' &&
(buff[3]==' '||buff[3]=='\t' || buff[3]=='<')) {
if (strncmp(buff, ".so", 3) == 0) {
fname = strtok(buff+3, SPACE);
if((newdes = fopen(fname,"r")) != NULL) {
fetch(newdes);
fclose(newdes);
} else {
fprintf(stderr, "%s: can't open .so file '%s'.\n",
MyName, fname);
exit(1);
}
} else if (strncmp(buff, ".nx", 3) == 0) {
fname = strtok(buff+3, SPACE);
if((newdes = fopen(fname,"r")) != NULL) {
fclose(fdes);
fetch(newdes);
fclose(newdes);
} else {
fprintf(stderr, "%s: can't open .nx file '%s'.\n",
MyName, fname);
exit(1);
}
exit(0);
} else if (strncmp(buff, ".PS", 3) == 0) {
#ifdef CTRACE
ctron();
buff;
#endif
fname=NULL;
for (ptr=buff+3; *ptr; ptr++){
if (*ptr=='<') {
for (ptr++; *ptr==' '||*ptr=='\t'; ptr++) ;
fname=ptr;
while (*ptr++) {
if (*ptr=='\n'||*ptr==' ')
{*ptr='\0'; break;}
}
break;/*for loop*/
}
}
if (*fname) {
if((newdes = fopen(fname,"r")) != NULL) {
fetch(newdes);
fclose(newdes);
} else {
fprintf(stderr, "%s: can't open .PS file '%s'.\n",
MyName, fname);
exit(1);
#ifdef CTRACE
ctroff();
#endif
}
} else fputs(buff,stdout); /* regular .PS */
} else {
fputs(buff, stdout); } /* Starts with "." */
} else fputs(buff, stdout); /* Doesn't start with "." */
}
}