home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.wwiv.com
/
ftp.wwiv.com.zip
/
ftp.wwiv.com
/
pub
/
MISC
/
EXTR_NET.ZIP
/
extr_net.c
< prev
next >
Wrap
C/C++ Source or Header
|
2003-03-07
|
25KB
|
817 lines
#define TITLE "EXTR_NET" /* Program Name */
#define DATES "1988-2003" /* Copyright Date */
#define VERSION "2.30" /* Version Number */
/****************************************************************************
This program is designed to read an input nodelist file and extract
selected Networks, Regions and/or Zones. The extracted portions of
the nodelist are stored in a file specified on the command line.
The format for using this program is as follows:
EXTR_NET [-q] [-i] -s "srcfile" -d "destfile" <net1> [<net2>...<net20>]
where "srcfile" is the name of the nodelist file to be read
"destfile" is the name of the output file created
-q operate in "quiet" mode (suppress screen output)
-i optionally include all Zone entries
<net..> are the numbers of the Net/Region/Zones to be extracted
and may include zone specifiers for Nets and Regions
(the program is presently set to handle 20 numbers).
These numbers may be preceded by a N, R or Z in order
to extract the entire Net, Region or Zone. Examples
are: 123 N342 n2:201 r17 Z1
The source and destination files may be specified with a full drive and
path. If there are spaces in the name or path, the entry must be enclosed
in quotes ("").
The inclusion of Zone lines is controlled in two ways and they operate
differently. The first way is to use the optional '-i' parameter, which
will include all Zone lines in the nodelist. The other way is to use a
zone-specifier with the search criteria. This will only include those
Zone lines which are specified in the search criteria. For example, if
your command line looks like this:
extr_net -s nodelist.123 -d net-342.123 -i n342
the output would include all Zone listings as well as all of the entries
in Net 342 in every zone where Net 342 appears. If the command line is
modified as:
extr_net -s nodelist.123 -d net-342.123 n342
the output would not include any Zone listings but would include all of
the entries in Net 342 in every zone where Net 342 appears. If the
command line is further modified as:
extr_net -s nodelist.123 -d net-342.123 n1:342
the output would not include any Zone listings except Zone 1, and would
include all of the entries for Net 342 in Zone 1. Note that use of the
'-i' parameter will always result in the inclusion of all Zone lines.
The program will display a VERY brief set of instructions if it is called
without any arguments or if it encounters an error. The following is a
list of the error codes returned by the program:
0 - No errors. Normal termination.
1 - Bad or missing command line argument.
2 - Unable to open the input file.
3 - Unable to open the output file.
4 - Problem writing to output file.
5 - Problem closing input file.
6 - Problem closing output file.
7 - No extraction criteria specified.
-1 - Help screen (called with -?)
When an error is encountered, the program will exit immediately and will
attempt to properly close all files.
Although I have chosen to retain all rights to this program, you are free
to use it under the following conditions:
- You realize that there is NO Warrantee of any sort.
It was tested pretty thoroughly here before release
but who knows what bugs may be lurking within.
- You will not modify the code and release a new version
of the program. I welcome suggestions for improvement
(especially when accompanied by code) but I make no
guarantee of future releases.
- If you find the program useful, I ask that you do
something to brighten somebody else's day. Just
exactly what, I will leave up to you.
You may freely distribute this program provided that you distribute only
the complete archive.
Bob Swift
FidoNet: 1:342/5
Internet: bswift@shaw.ca
****************************************************************************/
#ifdef OS2
#define OPSYSTEM "OS/2"
#endif
#ifdef DOS
#define OPSYSTEM "DOS"
#endif
#ifdef WIN
#define OPSYSTEM "Windows"
#endif
#ifdef LINUX
#define OPSYSTEM "Linux"
#endif
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#ifdef LINUX
#include <unistd.h>
#else
#include <mem.h>
#endif
/****************************************************************************
The CRC polynomial. This is used by XMODEM (almost CCITT). If you
change P, you must change crctab[]'s initial value to what is
printed by initcrctab()
****************************************************************************/
#define P 0x1021
/* number of bits in CRC: don't change it. */
#define W 16
/* this the number of bits per char: don't change it. */
#define B 8
/* calculated by initcrctab() */
static unsigned short crctab[1 << B] = {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
};
int cfputs(char *s, FILE * stream);
unsigned short updcrc(unsigned short icrc, char *icp, unsigned int icnt);
void helpscrn(int ernum);
void lf_to_crlf(char s[]);
int min(int, int);
int myfputs(char *s, FILE * stream);
int linetest(char *linetst1, char *inputline);
char version[] = { VERSION };
char title[] = { TITLE };
char dates[] = { DATES };
char opsystem[] = { OPSYSTEM };
unsigned short crc;
#define CR 13
#define LF 10
/*******************************************************************/
int main(int argc, char *argv[])
{
FILE *infile, *outfile;
char sfilename[255];
char dfilename[255];
char inputline[358];
char lintest[21][20];
char zontest[21][10];
char linshow[21][40];
int lineflag[21];
char semi[20];
char temp[1024];
char spaces[80];
char curzone[10];
time_t t;
#ifdef LINUX
long filepos;
#else
fpos_t filepos;
#endif
int i, j, k;
int sub1;
int count;
int flag;
int zoneflag;
int quiet;
memset(spaces, ' ', 79);
spaces[79] = '\0';
strcpy(curzone, "0");
zoneflag = 0;
t = time(NULL);
strcpy(sfilename, ""); /* Input File */
strcpy(dfilename, ""); /* Output File */
quiet = 0;
sub1 = 0;
if (argc < 2)
helpscrn(-1);
for (k = 1; k < argc; k++) {
if (argv[k][0] == '-' && tolower(argv[k][1]) == 's') {
k++;
k = min(k, argc - 1);
strcpy(sfilename, argv[k]);
}
else if (argv[k][0] == '-' && tolower(argv[k][1]) == 'd') {
k++;
k = min(k, argc - 1);
strcpy(dfilename, argv[k]);
}
else if (argv[k][0] == '-' && tolower(argv[k][1]) == 'i') {
sub1++;
strcpy(lintest[sub1], "I,");
strcpy(zontest[sub1], "0");
strcpy(linshow[sub1], "Include all ZONE entries.");
lineflag[sub1] = 'I';
zoneflag = 1;
}
else if (argv[k][0] == '-' && tolower(argv[k][1]) == 'q') {
quiet = 1;
}
else if (argv[k][0] == '-' && argv[k][1] == '-'
&& tolower(argv[k][2]) == 'h') {
helpscrn(-1);
}
else if (argv[k][0] == '-' && tolower(argv[k][1]) == '?') {
helpscrn(-1);
}
else {
strcpy(semi, argv[k]);
switch (semi[0]) {
case 'n':;
case 'N':
sub1++;
strcpy(lintest[sub1], "Host,");
strcpy(zontest[sub1], "0");
strcpy(linshow[sub1], "Net ");
lineflag[sub1] = 'N';
i = 0;
j = 1;
strcpy(temp, "0");
while (semi[j] != '\0') {
temp[i] = semi[j];
i++;
j++;
temp[i] = '\0';
if (semi[j] == ':') {
j++;
strcpy(zontest[sub1], temp);
i = 0;
strcpy(temp, "0");
}
}
strcat(lintest[sub1], temp);
strcat(lintest[sub1], ",");
strcat(linshow[sub1], temp);
if (zontest[sub1][0] != '0') {
strcat(linshow[sub1], " (Zone ");
strcat(linshow[sub1], zontest[sub1]);
strcat(linshow[sub1], ")");
}
break;
case 'r':;
case 'R':
sub1++;
strcpy(lintest[sub1], "Region,");
strcpy(zontest[sub1], "0");
strcpy(linshow[sub1], "Region ");
lineflag[sub1] = 'R';
i = 0;
j = 1;
strcpy(temp, "0");
while (semi[j] != '\0') {
temp[i] = semi[j];
i++;
j++;
temp[i] = '\0';
if (semi[j] == ':') {
j++;
strcpy(zontest[sub1], temp);
i = 0;
strcpy(temp, "0");
}
}
strcat(lintest[sub1], temp);
strcat(lintest[sub1], ",");
strcat(linshow[sub1], temp);
if (zontest[sub1][0] != '0') {
strcat(linshow[sub1], " (Zone ");
strcat(linshow[sub1], zontest[sub1]);
strcat(linshow[sub1], ")");
}
break;
case 'z':;
case 'Z':
sub1++;
strcpy(lintest[sub1], "Zone,");
strcpy(zontest[sub1], "0");
strcpy(linshow[sub1], "Zone ");
lineflag[sub1] = 'Z';
i = 5;
j = 1;
strcpy(temp, "0");
while (semi[j] != '\0') {
lintest[sub1][i] = semi[j];
linshow[sub1][i] = semi[j];
i++;
j++;
}
lintest[sub1][i] = '\0';
linshow[sub1][i] = '\0';
strcat(lintest[sub1], ",");
break;
default:
{
sub1++;
lineflag[sub1] = 'A';
strcpy(lintest[sub1], "Zone,");
strcpy(zontest[sub1], "0");
strcpy(linshow[sub1], "Zone ");
i = 0;
j = 0;
strcpy(temp, "0");
while (semi[j] != '\0') {
temp[i] = semi[j];
i++;
j++;
temp[i] = '\0';
if (semi[j] == ':') {
j++;
strcpy(zontest[sub1], temp);
i = 0;
strcpy(temp, "0");
}
}
strcat(lintest[sub1], temp);
strcat(lintest[sub1], ",");
strcat(linshow[sub1], temp);
sub1++;
lineflag[sub1] = 'A';
strcpy(lintest[sub1], "Region,");
strcpy(zontest[sub1], zontest[sub1 - 1]);
strcpy(zontest[sub1 - 1], "0");
strcpy(linshow[sub1], "Region ");
strcat(lintest[sub1], temp);
strcat(lintest[sub1], ",");
strcat(linshow[sub1], temp);
if (zontest[sub1][0] != '0') {
strcat(linshow[sub1], " (Zone ");
strcat(linshow[sub1], zontest[sub1]);
strcat(linshow[sub1], ")");
}
sub1++;
lineflag[sub1] = 'A';
strcpy(lintest[sub1], "Host,");
strcpy(zontest[sub1], zontest[sub1 - 1]);
strcpy(linshow[sub1], "Net ");
strcat(lintest[sub1], temp);
strcat(lintest[sub1], ",");
strcat(linshow[sub1], temp);
if (zontest[sub1][0] != '0') {
strcat(linshow[sub1], " (Zone ");
strcat(linshow[sub1], zontest[sub1]);
strcat(linshow[sub1], ")");
}
}
}
}
}
if (sub1 < 1)
helpscrn(7);
infile = fopen(sfilename, "rt");
if (infile == NULL)
helpscrn(2);
if ((outfile = fopen(dfilename, "w+t")) == NULL)
helpscrn(3);
if (quiet == 0)
printf("\n%s Version %s for %s\n", title, version, opsystem);
if (quiet == 0)
printf("Copyright (c) Bob Swift, %s. All Rights Reserved.\n", dates);
if (quiet == 0)
printf("Extracting: "); /* Echo Input To User */
for (count = 1; count <= sub1; count++) {
if (quiet == 0)
printf("%s\n ", linshow[count]);
}
if (quiet == 0)
printf("\n");
if (fgets(inputline, 256, infile) == NULL) {
strcpy(temp, ";A Extracted Nodelist Segment : 00000\n");
}
else {
strcpy(temp, ";A Extracted ");
strcat(temp, inputline + 3);
}
lf_to_crlf(temp);
if (myfputs(temp, outfile) == EOF)
helpscrn(4);
crc = 0;
#ifdef LINUX
filepos = ftell(outfile) - 7L;
#else
if (fgetpos(outfile, &filepos) != 0)
helpscrn(4);
filepos = filepos - 7L;
#endif
if (cfputs(";A \n;A Extracted with ", outfile) == EOF)
helpscrn(4);
if (cfputs(title, outfile) == EOF)
helpscrn(4);
if (cfputs(" Version ", outfile) == EOF)
helpscrn(4);
if (cfputs(version, outfile) == EOF)
helpscrn(4);
if (cfputs(" for ", outfile) == EOF)
helpscrn(4);
if (cfputs(opsystem, outfile) == EOF)
helpscrn(4);
if (cfputs("\n;A ", outfile) == EOF)
helpscrn(4);
if (cfputs("Copyright (c) Bob Swift, ", outfile) == EOF)
helpscrn(4);
if (cfputs(dates, outfile) == EOF)
helpscrn(4);
if (cfputs(". All Rights Reserved.", outfile) == EOF)
helpscrn(4);
if (cfputs("\n;A \n;A Extracted from ", outfile) == EOF)
helpscrn(4);
i = 0;
j = 0;
while (sfilename[i] != '\0') {
if (sfilename[i] == '/') {
j = 0;
}
else {
temp[j] = toupper(sfilename[i]);
j++;
}
temp[j] = '\0';
i++;
}
/****************************************************************************
if (cfputs(sfilename,outfile) == EOF) helpscrn(4);
if (cfputs(" on ",outfile) == EOF) helpscrn(4);
if (cfputs(ctime(&t),outfile) == EOF) helpscrn(4);
****************************************************************************/
if (cfputs(temp, outfile) == EOF)
helpscrn(4);
if (cfputs("\n;A \n;A Extracting: ", outfile) == EOF)
helpscrn(4);
if (cfputs(linshow[1], outfile) == EOF)
helpscrn(4);
for (count = 2; count <= sub1; count++) {
if (cfputs("\n;A ", outfile) == EOF)
helpscrn(4);
if (cfputs(linshow[count], outfile) == EOF)
helpscrn(4);
}
if (cfputs("\n;A \n;\n", outfile) == EOF)
helpscrn(4);
count = sub1;
flag = 1;
j = 0;
while (fgets(inputline, 256, infile) != NULL) {
if (inputline[0] == 'Z') {
i = 0;
for (sub1 = 5;
(inputline[sub1] != ',') && (sub1 < strlen(inputline)); sub1++) {
curzone[i] = inputline[sub1];
i++;
curzone[i] = '\0';
}
}
strcpy(semi, ";");
i = linetest(semi, inputline);
strcpy(semi, ";\n");
if ((linetest(semi, inputline) == 1 && flag == 0) || i == 0) {
if (flag == 0) {
strcpy(semi, "Host");
i = linetest(semi, inputline);
if (i == 1 && (j == 'N' || j == 'A'))
flag = 1;
if (flag == 1)
if (cfputs(";\n", outfile) == EOF)
helpscrn(4);
}
if (flag == 0) {
strcpy(semi, "Region");
i = linetest(semi, inputline);
if (i == 1 && (j == 'N' || j == 'R' || j == 'A'))
flag = 1;
if (flag == 1)
if (cfputs(";\n", outfile) == EOF)
helpscrn(4);
}
if (flag == 0) {
strcpy(semi, "Zone");
flag = linetest(semi, inputline);
if (flag == 1)
if (cfputs(";\n", outfile) == EOF)
helpscrn(4);
}
if (flag == 0) {
if (cfputs(inputline, outfile) == EOF)
helpscrn(4);
}
if (flag == 1) {
/* Cycle through the search patterns */
for (sub1 = 1;
sub1 <= count
&& linetest(lintest[sub1], inputline) == 0; sub1++) {
}
if (sub1 <= count)
i = linetest(curzone, zontest[sub1]);
if ((sub1 <= count)
&& ((zontest[sub1][0] == '0') || (i == 1))) {
if (cfputs(inputline, outfile) == EOF)
helpscrn(4);
flag = 0;
j = lineflag[sub1];
}
}
if (flag == 1) {
strcpy(semi, "Zone");
if (linetest(semi, inputline) == 1) {
i = 0;
for (sub1 = 1; sub1 <= count; sub1++) {
if (linetest(zontest[sub1], curzone) == 1)
i = 1;
}
if ((i == 1) || (zoneflag == 1)) {
if (cfputs(inputline, outfile) == EOF)
helpscrn(4);
if (cfputs(";\n", outfile) == EOF)
helpscrn(4);
}
}
}
}
if (inputline[0] == 'Z' || inputline[0] == 'R'
|| (inputline[0] == 'H' && inputline[2] == 's')) {
inputline[strlen(inputline) - 1] = '\0';
i = 0;
for (sub1 = 0; sub1 <= strlen(inputline) && i < 3; sub1++) {
if (inputline[sub1] == ',') {
i++;
if (i >= 3)
inputline[sub1] = '\0';
if (i == 1)
inputline[sub1] = ' ';
}
if (inputline[sub1] == '_')
inputline[sub1] = ' ';
}
strcat(inputline, spaces);
inputline[79] = '\0';
if (quiet == 0)
printf("%s", inputline);
if (inputline[0] == 'Z') {
if (quiet == 0)
printf("\n");
}
else {
if (quiet == 0)
printf("\r");
}
}
}
if (cfputs(";S End of extracted file.\n;S \n", outfile) == EOF)
helpscrn(4);
if (fclose(infile) != 0)
helpscrn(5);
#ifdef LINUX
if (fseek(outfile, filepos, SEEK_SET) != 0)
helpscrn(4);
#else
if (fsetpos(outfile, &filepos) != 0)
helpscrn(4);
#endif
fprintf(outfile, "%05u", crc);
if (quiet == 0)
printf("%s", spaces);
if (quiet == 0)
printf("\nCRC: %u\n", crc);
if (fclose(outfile) != 0)
helpscrn(6);
if (quiet == 0)
printf("%s", spaces);
if (quiet == 0)
printf("\nExtraction complete. Thank-you for using %s.\n\n", title);
exit(0);
}
/*******************************************************************/
int cfputs(char *s, FILE * stream)
{
char string[1024];
int i;
strcpy(string, s);
lf_to_crlf(string);
i = 0;
while (string[i] != '\0') {
i++;
}
crc = updcrc(crc, string, i);
return (myfputs(string, stream));
}
/*******************************************************************/
int myfputs(char *s, FILE * stream)
{
char string[1024];
int i, j, k;
strcpy(string, s);
i = 0;
j = 0;
k = 0;
while (string[j] != '\0') {
i = fputc(string[j], stream);
j++;
if (k != EOF) {
k = i;
}
}
return k;
}
/*******************************************************************/
int min(one, two)
int one, two;
{
int three;
three = one;
if (two < one)
three = two;
return (three);
}
/*******************************************************************/
unsigned short updcrc(unsigned short icrc, char *icp, unsigned int icnt)
{
register unsigned short crc1 = icrc;
register char *cp = icp;
register unsigned int cnt = icnt;
while (cnt--)
crc1 = (crc1 << B) ^ crctab[(crc1 >> (W - B)) ^ *cp++];
return (crc1);
}
/*******************************************************************/
void lf_to_crlf(char s[])
{
char string[1024];
int i, j;
i = 0;
j = 0;
string[0] = '\0';
while (s[j] != '\0') {
if (s[j] == CR || s[j] == LF) {
string[i] = CR;
i++;
string[i] = LF;
i++;
string[i] = '\0';
j++;
while (s[j] == CR || s[j] == LF) {
j++;
}
}
else {
string[i] = s[j];
i++;
string[i] = '\0';
j++;
}
}
strcpy(s, string);
}
/*******************************************************************/
int linetest(char *linetst1, char *inputline)
{
int j;
for (j = 0; linetst1[j] == inputline[j]; j++)
if (linetst1[j + 1] == '\0')
return (1);
return (0);
}
/*******************************************************************/
void helpscrn(int ernum)
{
printf("\n");
switch (ernum) {
case 1:
printf(" ** Bad or missing command line argument **\n\n");
break;
case 2:
printf(" ** Unable to open input file **\n\n");
break;
case 3:
printf(" ** Unable to open output file **\n\n");
break;
case 4:
printf(" ** Problem writing to output file **\n\n");
break;
case 5:
printf(" ** Problem closing input file **\n\n");
break;
case 6:
printf(" ** Problem closing output file **\n\n");
break;
case 7:
printf(" ** No extraction criteria specified **\n\n");
break;
default:
printf("%s Version %s for %s\nCopyright ", title, version, opsystem);
printf("(c) Bob Swift, %s. All Rights Reserved.\n\n", dates);
printf("This program is designed to read an input nodelist ");
printf("file and extract\nselected Networks, Regions and/or ");
printf("Zones. The extracted portions of\nthe nodelist are ");
printf("stored in a file specified on the command line.\n\n");
printf("Usage: EXTR_NET [-q] [-i] -s \"srcfile\" -d \"destfi");
printf("le\" <net1> [<net2>...<net20>]\n\n where \"srcfile");
printf("\" is the name of the nodelist file to be read\n");
printf(" \"destfile\" is the name of the output ");
printf("file created\n -q operate in \"quiet");
printf("\" mode (suppress screen output)\n -i ");
printf(" optionally include all Zone entries\n <n");
printf("et..> are the numbers of the Net/Region/Zones to ");
printf("be extracted\n and may include ");
printf("zone specifiers for Nets and Regions\n ");
printf(" (the program is presently set to handle 20 n");
printf("umbers).\n These numbers may be ");
printf("preceded by a N, R or Z in order\n ");
printf(" to extract the entire Net, Region or Zone. Exam");
printf("ples\n are: 123 N342 n2:201 r17 Z1\n");
}
exit(ernum);
}