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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: textfmt.c++,v 1.3 2009/09/29 11:46:02 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1993-1996 Sam Leffler
  4.  * Copyright (c) 1993-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.  * A sort of enscript clone...
  28.  */
  29. #include "TextFormat.h"
  30. #include "Sys.h"
  31. #include "config.h"
  32. #if HAS_LOCALE
  33. extern "C" {
  34. #include <locale.h>
  35. }
  36. #endif
  37. static const char* prog;
  38. static void
  39. usage()
  40. {
  41.     fprintf(stderr, "Usage: %s"
  42. " [-1]"
  43. " [-2]"
  44. " [-B]"
  45. " [-c]"
  46. " [-D]"
  47. " [-f fontname]"
  48. " [-F fontdir(s)]"
  49. " [-m N]"
  50. " [-o #]"
  51. " [-p #]"
  52. " [-r]"
  53. " [-U]"
  54. " [-Ml=#,r=#,t=#,b=#]"
  55. " [-V #]"
  56. " files... >out.psn", prog);
  57.     fprintf(stderr,"Default options:"
  58. " -f Courier"
  59. " -1"
  60. " -p 11bp"
  61. " -o 0"
  62. "n");
  63.     exit(1);
  64. }
  65. int
  66. main(int argc, char* argv[])
  67. {
  68.     extern int optind;
  69.     extern char* optarg;
  70.     int c;
  71. #ifdef LC_CTYPE
  72.     setlocale(LC_CTYPE, ""); // for <ctype.h> calls
  73. #endif
  74. #ifdef LC_TIME
  75.     setlocale(LC_TIME, ""); // for strftime calls
  76. #endif
  77.     TextFormat fmt;
  78.     fmt.resetConfig();
  79.     fmt.readConfig(FAX_SYSCONF);
  80.     fmt.readConfig(FAX_USERCONF);
  81.     prog = argv[0];
  82.     while ((c = Sys::getopt(argc, argv, "f:F:m:M:o:O:p:s:V:12BcDGrRU")) != -1)
  83. switch(c) {
  84. case '1': // 1-column output
  85. case '2': // 2-column output
  86.     fmt.setNumberOfColumns(c - '0');
  87.     break;
  88. case 'B':
  89.     fmt.setPageHeaders(false);
  90.     break;
  91. case 'c': // clip/cut instead of wrapping lines
  92.     fmt.setLineWrapping(false);
  93.     break;
  94. case 'D': // don't use ISO 8859-1 encoding
  95.     fmt.setISO8859(false);
  96.     break;
  97. case 'f': // body font
  98.     if (!fmt.setTextFont(optarg)) {
  99. fprintf(stderr,
  100.     "%s: No font metric information found for "%s".n",
  101.     prog, optarg);
  102. usage();
  103.     }
  104.     break;
  105. case 'F': // set Font path
  106.     fmt.setFontPath(optarg);
  107.     break;
  108. case 'G': // gaudy mode
  109.     fmt.setGaudyHeaders(true);
  110.     break;
  111. case 'm': // multi-column output
  112.     fmt.setNumberOfColumns(atoi(optarg));
  113.     break;
  114. case 'M': // margin(s)
  115.     if (!fmt.setPageMargins(optarg)) {
  116. fprintf(stderr, "Bad margin syntax.n");
  117. usage();
  118.     }
  119.     break;
  120. case 'o': // outline columns
  121.     fmt.setOutlineMargin(TextFormat::inch(optarg));
  122.     break;
  123. case 'O':
  124.     fmt.readConfigItem(optarg);
  125.     break;
  126. case 'p': // text point size
  127.     fmt.setTextPointSize(TextFormat::inch(optarg));
  128.     break;
  129. case 'r': // rotate page (landscape)
  130.     fmt.setPageOrientation(TextFormat::LANDSCAPE);
  131.     break;
  132. case 'R': // don't rotate page (portrait)
  133.     fmt.setPageOrientation(TextFormat::PORTRAIT);
  134.     break;
  135. case 's': // page size
  136.     if (!fmt.setPageSize(optarg)) {
  137. fprintf(stderr, "Unknown page size %s.n", optarg);
  138. usage();
  139.     }
  140.     break;
  141. case 'U': // reverse page collation
  142.     fmt.setPageCollation(TextFormat::REVERSE);
  143.     break;
  144. case 'V': // vertical line height+spacing
  145.     fmt.setTextLineHeight(TextFormat::inch(optarg));
  146.     break;
  147. default:
  148.     fprintf(stderr,"Unrecognized option "%c".n", c);
  149.     usage();
  150. }
  151. #ifdef notdef
  152.     fmt.setTitle();
  153. #endif
  154.     fmt.beginFormatting(stdout);
  155.     if (optind < argc) {
  156. for (; optind < argc; optind++) {
  157.     struct stat sb;
  158.     if (Sys::stat(argv[optind], sb) >= 0)
  159. fmt.setModTimeAndDate((time_t) sb.st_mtime);
  160.     fmt.formatFile(argv[optind]);
  161. }
  162.     } else {
  163. fmt.setFilename("<stdin>");
  164. fmt.setModTimeAndDate(Sys::now());
  165. fmt.formatFile(stdin);
  166.     }
  167.     fmt.endFormatting();
  168.     return (0);
  169. }