ruoyunbai 2bb9621e30 1
2021-09-29 21:06:16 +08:00

219 lines
6.5 KiB
C

/*
* OpenPBS (Portable Batch System) v2.3 Software License
*
* Copyright (c) 1999-2000 Veridian Information Solutions, Inc.
* All rights reserved.
*
* ---------------------------------------------------------------------------
* For a license to use or redistribute the OpenPBS software under conditions
* other than those described below, or to purchase support for this software,
* please contact Veridian Systems, PBS Products Department ("Licensor") at:
*
* www.OpenPBS.org +1 650 967-4675 sales@OpenPBS.org
* 877 902-4PBS (US toll-free)
* ---------------------------------------------------------------------------
*
* This license covers use of the OpenPBS v2.3 software (the "Software") at
* your site or location, and, for certain users, redistribution of the
* Software to other sites and locations. Use and redistribution of
* OpenPBS v2.3 in source and binary forms, with or without modification,
* are permitted provided that all of the following conditions are met.
* After December 31, 2001, only conditions 3-6 must be met:
*
* 1. Commercial and/or non-commercial use of the Software is permitted
* provided a current software registration is on file at www.OpenPBS.org.
* If use of this software contributes to a publication, product, or
* service, proper attribution must be given; see www.OpenPBS.org/credit.html
*
* 2. Redistribution in any form is only permitted for non-commercial,
* non-profit purposes. There can be no charge for the Software or any
* software incorporating the Software. Further, there can be no
* expectation of revenue generated as a consequence of redistributing
* the Software.
*
* 3. Any Redistribution of source code must retain the above copyright notice
* and the acknowledgment contained in paragraph 6, this list of conditions
* and the disclaimer contained in paragraph 7.
*
* 4. Any Redistribution in binary form must reproduce the above copyright
* notice and the acknowledgment contained in paragraph 6, this list of
* conditions and the disclaimer contained in paragraph 7 in the
* documentation and/or other materials provided with the distribution.
*
* 5. Redistributions in any form must be accompanied by information on how to
* obtain complete source code for the OpenPBS software and any
* modifications and/or additions to the OpenPBS software. The source code
* must either be included in the distribution or be available for no more
* than the cost of distribution plus a nominal fee, and all modifications
* and additions to the Software must be freely redistributable by any party
* (including Licensor) without restriction.
*
* 6. All advertising materials mentioning features or use of the Software must
* display the following acknowledgment:
*
* "This product includes software developed by NASA Ames Research Center,
* Lawrence Livermore National Laboratory, and Veridian Information
* Solutions, Inc.
* Visit www.OpenPBS.org for OpenPBS software support,
* products, and information."
*
* 7. DISCLAIMER OF WARRANTY
*
* THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT
* ARE EXPRESSLY DISCLAIMED.
*
* IN NO EVENT SHALL VERIDIAN CORPORATION, ITS AFFILIATED COMPANIES, OR THE
* U.S. GOVERNMENT OR ANY OF ITS AGENCIES BE LIABLE FOR ANY DIRECT OR INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This license will be governed by the laws of the Commonwealth of Virginia,
* without reference to its choice of law rules.
*/
/*
* soelim - eliminate .so lines from troff documents
*
* This simple utility is provided to eliminate the .so lines
* from troff documents by merging in the text from the referenced
* source file. Some systems already come with soelim, others do not.
*
* Usage: soelim [-d include [-d include]...] inputfile
* The named input file is opened processed. Any .so line in the
* input is replace by the lines from the file.
*
* Output is written to standard out
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
char *sodir[] = { 0, 0, 0, 0, 0 };
int
main(int argc, char *argv[])
{
int dofile(FILE *);
int dirct = 0;
FILE *filein;
int i;
extern int optind;
extern char *optarg;
while ((i = getopt(argc, argv, "d:")) != -1)
switch (i)
{
case(int)'d':
sodir[dirct++] = optarg;
break;
default:
fprintf(stderr, "Usage: %s [-d include_dir] [filename ...]\n", argv[0]);
return 1;
}
if (optind < argc)
{
for (i = optind; i < argc; ++i)
{
filein = fopen(argv[i], "r");
if (filein == NULL)
{
fprintf(stderr, "soelim: unable to open %s\n", argv[i]);
return (1);
}
if (dofile(filein) != 0)
return (1);
}
}
else
{
return (dofile(stdin));
}
return (0);
}
int dofile(FILE *filein)
{
char buf[256];
int dirindex;
int found;
char newfile[1024];
FILE *newin;
char *pc;
char *pdir;
char *pso;
while (fgets(buf, 255, filein) != NULL)
{
if (strncmp(buf, ".so ", 4) == 0)
{
dirindex = 0;
found = 0;
pso = buf + 4;
while (*pso == ' ')
pso++;
pc = pso;
while (isspace((int)*pc) == 0)
pc++;
*pc = '\0';
while ((pdir = sodir[dirindex]) != NULL)
{
snprintf(newfile, sizeof(newfile), "%s/%s", pdir, pso);
if ((newin = fopen(newfile, "r")) != NULL)
{
found = 1;
dofile(newin);
break;
}
dirindex++;
}
if (found == 0)
{
/* try local directory */
snprintf(newfile, sizeof(newfile), "%s", pso);
if ((newin = fopen(newfile, "r")) != NULL)
{
dofile(newin);
}
else
{
fprintf(stderr, "Unable to find include file %s\n", pso);
exit(1);
}
}
}
else
{
fputs(buf, stdout);
}
}
fclose(filein);
return (0);
}