dialtest.c++
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: dialtest.c++,v 1.4 2007/11/09 00:27:18 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1990-1996 Sam Leffler
  4.  * Copyright (c) 1991-1996 Silicon Graphics, Inc.
  5.  * HylaFAX is a trademark of Silicon Graphics
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26. /*
  27.  * Program for interactively using dial string rules.
  28.  *
  29.  * Usage: dialtest [-v] [-q] [-a areacode] [-c countrycode]
  30.  *    [-i internationalprefix] [-l longdistanceprefix] dial-rules-file
  31.  */
  32. #include <stdlib.h>
  33. #include <unistd.h>
  34. #include "DialRules.h"
  35. #include "Sys.h"
  36. extern void fxFatal(const char* va_alist ...);
  37. static const char* appName;
  38. static bool quiet = false;
  39. static void
  40. usage()
  41. {
  42.     fxFatal("usage: %s"
  43. " [-v]"
  44. " [-q]"
  45. " [-a area-code]"
  46. " [-c country-code]"
  47. " [-i international-prefix]"
  48. " [-l long-distance-prefix]"
  49. " dialrules"
  50. , appName
  51. );
  52. }
  53. static int
  54. prompt()
  55. {
  56.     if (! quiet)
  57.     printf("ready> "); fflush(stdout);
  58.     return (1);
  59. }
  60. int
  61. main(int argc, char* argv[])
  62. {
  63.     const char* areaCode = "415";
  64.     const char* countryCode = "1";
  65.     const char* internationalPrefix = "011";
  66.     const char* longDistancePrefix = "1";
  67.     bool verbose = false;
  68.     extern int optind;
  69.     extern char* optarg;
  70.     int c;
  71.     appName = argv[0];
  72.     while ((c = Sys::getopt(argc, argv, "a:c:i:l:qv")) != -1)
  73. switch (c) {
  74. case 'a':
  75.     areaCode = optarg;
  76.     break;
  77. case 'c':
  78.     countryCode = optarg;
  79.     break;
  80. case 'i':
  81.     internationalPrefix = optarg;
  82.     break;
  83. case 'l':
  84.     longDistancePrefix = optarg;
  85.     break;
  86. case 'q':
  87.     quiet = true;
  88.     break;
  89. case 'v':
  90.     verbose = true;
  91.     break;
  92. case '?':
  93.     usage();
  94.     /*NOTREACHED*/
  95. }
  96.     if (argc - optind != 1)
  97. usage();
  98.     DialStringRules rules(argv[optind]);
  99.     rules.setVerbose(!quiet);
  100.     rules.def("AreaCode", areaCode);
  101.     rules.def("CountryCode", countryCode);
  102.     rules.def("InternationalPrefix", internationalPrefix);
  103.     rules.def("LongDistancePrefix", longDistancePrefix);
  104.     if (!rules.parse())
  105. fxFatal("%s: Problem parsing rules in %s", appName, argv[optind]);
  106.     char line[1024];
  107.     while (prompt() && fgets(line, sizeof (line), stdin)) {
  108. char* cp = strchr(line, 'n');
  109. if (cp)
  110.     *cp = '';
  111. if (verbose)
  112.     printf("input = "%s"n", line);
  113. if ((cp = strchr(line, '('))) {
  114.     char* ep = strrchr(cp, ')');
  115.     if (ep)
  116. *ep = '';
  117.     fxStr set(line, cp-line);
  118.     fxStr result = rules.applyRules(set, cp+1);
  119.     if (quiet)
  120.     printf("%sn", (const char*) result);
  121.     else
  122.     printf("%s(%s) = "%s"n", (const char*) set, cp+1, (const char*) result);
  123. } else {
  124.     fxStr c = rules.canonicalNumber(line);
  125.     fxStr d = rules.dialString(line);
  126.     fxStr n = rules.displayNumber(line);
  127.     printf("canonical = "%s"n", (const char*) c);
  128.     printf("dial-string = "%s"n", (const char*) d);
  129.     printf("display = "%s"n", (const char *) n);
  130. }
  131.     }
  132.     return (0);
  133. }