476{
477 const char *opLetters = ":hl:rv";
478 struct option opVec[] =
479 {
483 {
OPT_TYPE "refresh", 0, 0, (int)
'r'},
484 {
OPT_TYPE "verify", 0, 0, (int)
'v'},
485 {0, 0, 0, 0}
486 };
487 extern int optind, opterr;
488 extern char *optarg;
490 clMap *baseNode, *clNow;
492 char opC;
493 int i;
494 bool doRefresh = false;
495
496
497
498 opterr = 0;
500 while((opC = getopt_long(argc, argv, opLetters, opVec, &i)) != (char)-1)
501 switch(opC)
503 break;
504 case 'l': if (!strcmp("all",optarg))
505 {listMan = true; listSrv = true;}
506 else if (!strcmp("m", optarg))
507 {listMan = true; listSrv = false;}
508 else if (!strcmp("s", optarg))
509 {listMan = false; listSrv = true;}
510 else Usage(
"Invalid list argument.");
511 break;
512 case 'q': doHush = true;
513 break;
514 case 'r': doRefresh = true;
515 break;
516 case 'v': doVerify = true;
517 break;
518 case ':':
EMSG(
"'" <<OpName(argv) <<
"' argument missing.");
519 exit(2); break;
520 case '?':
EMSG(
"Invalid option, '" <<OpName(argv) <<
"'.");
521 exit(2); break;
522 default:
EMSG(
"Internal error processing '" <<OpName(argv) <<
"'.");
523 exit(2); break;
524 }
525
526
527
528 if (
optind >= argc)
Usage(
"Initial node not specified.");
529
530
531
533 {
EMSG(
"Unable to validate initial node; " <<
eMsg);
534 exit(2);
535 }
536
537
538
541 exit(2);
542 }
543
544
545
546 baseNode =
new clMap(argv[
optind]);
547
548
549
551 else doVerify = false;
552
553
554
555 SetEnv();
556
557
558
559 MapCluster(baseNode, baseNode);
560
561
562
564 {MapPath(baseNode,
Path, doRefresh);
565 eMsg = (doVerify ?
"0*rv* " :
"0*r** ");
566 }
else eMsg =
"0**** ";
567
568
569
570 std::cout <<
eMsg <<baseNode->name <<baseNode->state <<std::endl;
571 PrintMap(baseNode, 1);
572
573
574
576 {std::cerr <<"Warning! " <<baseNode->name
577 <<" referred to the following unconnected node:" <<std::endl;
578 clNow = clLost;
579 while(clNow)
580 {std::cerr <<"????? " <<clNow->name <<std::endl;
581 clNow = clNow->nextSrv;
582 }
583 }
584
585
586
587 exit(0);
588}
void Usage(const char *msg)
const char * Name(const char *eName=0, const char **eText=0)
const char * Set(const char *hSpec, int pNum=PortInSpec)