Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8335 | maxcodehac | 1 | /*============================================================================= |
2 | GNU UnRTF, a command-line program to convert RTF documents to other formats. |
||
3 | Copyright (C) 2000,2001 Zachary Thayer Smith |
||
4 | |||
5 | This program is free software; you can redistribute it and/or modify |
||
6 | it under the terms of the GNU General Public License as published by |
||
7 | the Free Software Foundation; either version 2 of the License, or |
||
8 | (at your option) any later version. |
||
9 | |||
10 | This program is distributed in the hope that it will be useful, |
||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
13 | GNU General Public License for more details. |
||
14 | |||
15 | You should have received a copy of the GNU General Public License |
||
16 | along with this program; if not, write to the Free Software |
||
17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||
18 | |||
19 | The author is reachable by electronic mail at tuorfa@yahoo.com. |
||
20 | =============================================================================*/ |
||
21 | |||
22 | |||
23 | /*---------------------------------------------------------------------- |
||
24 | * Module name: main.c |
||
25 | * Author name: Zach Smith |
||
26 | * Create date: 01 Sep 00 |
||
27 | * Purpose: main() routine with file open/close. |
||
28 | *---------------------------------------------------------------------- |
||
29 | * Changes: |
||
30 | * 14 Oct 00, tuorfa@yahoo.com: added -nopict option |
||
31 | * 15 Oct 00, tuorfa@yahoo.com: added verify_file_type() |
||
32 | * 08 Apr 01, tuorfa@yahoo.com: more GNU-like switches implemented |
||
33 | * 24 Jul 01, tuorfa@yahoo.com: removed verify_file_type() |
||
34 | * 03 Aug 01, tuorfa@yahoo.com: added --inline switch |
||
35 | * 08 Sep 01, tuorfa@yahoo.com: added use of PROGRAM_NAME |
||
36 | * 19 Sep 01, tuorfa@yahoo.com: addition of output personalities |
||
37 | * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks |
||
38 | * 23 Sep 01, tuorfa@yahoo.com: added wpml switch |
||
39 | *--------------------------------------------------------------------*/ |
||
40 | |||
41 | |||
42 | |||
43 | #include |
||
44 | #include |
||
45 | |||
46 | #include "defs.h" |
||
47 | #include "error.h" |
||
48 | #include "word.h" |
||
49 | #include "convert.h" |
||
50 | #include "parse.h" |
||
51 | #include "hash.h" |
||
52 | #include "malloc.h" |
||
53 | |||
54 | #include "output.h" |
||
55 | #include "html.h" |
||
56 | #include "text.h" |
||
57 | #include "vt.h" |
||
58 | #include "ps.h" |
||
59 | #include "latex.h" |
||
60 | #include "wpml.h" |
||
61 | |||
62 | |||
63 | |||
64 | int nopict_mode; /* TRUE => do not write \pict's to files */ |
||
65 | int dump_mode; /* TRUE => output a dump of the word tree */ |
||
66 | int debug_mode; /* TRUE => output comments within HTML */ |
||
67 | int lineno; /* used for error reporting */ |
||
68 | int simple_mode; /* TRUE => output HTML without SPAN/DIV tags */ |
||
69 | int inline_mode; /* TRUE => output HTML without HTML/BODY/HEAD */ |
||
70 | |||
71 | |||
72 | OutputPersonality *op; |
||
73 | enum { |
||
74 | OP_HTML, OP_TEXT, OP_LATEX, OP_PS, OP_VT, OP_WPML |
||
75 | }; |
||
76 | |||
77 | |||
78 | |||
79 | /*======================================================================== |
||
80 | * Name: main |
||
81 | * Purpose: Main control function. |
||
82 | * Args: Args. |
||
83 | * Returns: Exit code. |
||
84 | *=======================================================================*/ |
||
85 | |||
86 | int |
||
87 | main (int argc, char **argv) |
||
88 | { |
||
89 | FILE *f; |
||
90 | Word * word; |
||
91 | char *path=NULL; |
||
92 | int i; |
||
93 | int output_format = OP_HTML; |
||
94 | |||
95 | nopict_mode = debug_mode = dump_mode = inline_mode = FALSE; |
||
96 | |||
97 | if (argc<2 || argc>7) usage(); |
||
98 | |||
99 | for (i=1; i |
||
100 | if (!strcmp("--dump",argv[i])) dump_mode=TRUE; |
||
101 | else if (!strcmp("-d",argv[i])) dump_mode=TRUE; |
||
102 | else if (!strcmp("--debug",argv[i])) debug_mode=TRUE; |
||
103 | else if (!strcmp("--simple",argv[i])) simple_mode=TRUE; |
||
104 | else if (!strcmp("--html",argv[i])) output_format=OP_HTML; |
||
105 | else if (!strcmp("--text",argv[i])) output_format=OP_TEXT; |
||
106 | else if (!strcmp("--vt",argv[i])) output_format=OP_VT; |
||
107 | else if (!strcmp("--ps",argv[i])) output_format=OP_PS; |
||
108 | else if (!strcmp("--latex",argv[i])) output_format=OP_LATEX; |
||
109 | else if (!strcmp("--wpml",argv[i])) output_format=OP_WPML; |
||
110 | else if (!strcmp("-t",argv[i])) { |
||
111 | if ((i+1) |
||
112 | i++; |
||
113 | if (!strcmp ("html", argv[i])) |
||
114 | output_format=OP_HTML; |
||
115 | else if (!strcmp ("vt", argv[i])) |
||
116 | output_format=OP_VT; |
||
117 | else if (!strcmp ("text", argv[i])) |
||
118 | output_format=OP_TEXT; |
||
119 | else if (!strcmp ("ps", argv[i])) |
||
120 | output_format=OP_PS; |
||
121 | else if (!strcmp ("latex", argv[i])) |
||
122 | output_format=OP_LATEX; |
||
123 | else if (!strcmp ("wpml", argv[i])) |
||
124 | output_format=OP_WPML; |
||
125 | } |
||
126 | } |
||
127 | else if (!strcmp("--inline",argv[i])) inline_mode=TRUE; |
||
128 | else if (!strcmp("--help",argv[i])) { |
||
129 | usage(); |
||
130 | exit (0); |
||
131 | } |
||
132 | else if (!strcmp("--version",argv[i])) { |
||
133 | fprintf (stderr, "%s\n", PROGRAM_VERSION); |
||
134 | exit (0); |
||
135 | } |
||
136 | else if (!strcmp("--nopict",argv[i])) nopict_mode=TRUE; |
||
137 | else if (!strcmp("-n",argv[i])) nopict_mode=TRUE; |
||
138 | else { |
||
139 | if (*argv[i]=='-') usage(); |
||
140 | |||
141 | if(path) |
||
142 | usage(); |
||
143 | else |
||
144 | path=argv[i]; |
||
145 | } |
||
146 | } |
||
147 | |||
148 | if (!path) usage(); |
||
149 | |||
150 | switch (output_format) { |
||
151 | case OP_TEXT: |
||
152 | op = text_init(); |
||
153 | break; |
||
154 | case OP_VT: |
||
155 | op = vt_init(); |
||
156 | break; |
||
157 | case OP_HTML: |
||
158 | op = html_init(); |
||
159 | break; |
||
160 | case OP_PS: |
||
161 | op = ps_init(); |
||
162 | break; |
||
163 | case OP_LATEX: |
||
164 | op = latex_init(); |
||
165 | break; |
||
166 | case OP_WPML: |
||
167 | op = wpml_init(); |
||
168 | break; |
||
169 | default: |
||
170 | error_handler ("unknown output format"); |
||
171 | } |
||
172 | |||
173 | hash_init(); |
||
174 | |||
175 | fprintf (stderr, "This is %s, ", PROGRAM_NAME); |
||
176 | fprintf (stderr, "version %s\n", PROGRAM_VERSION); |
||
177 | fprintf (stderr, "By Zach T. Smith\n"); |
||
178 | |||
179 | if (debug_mode) fprintf (stderr, "Debug mode.\n"); |
||
180 | if (dump_mode) fprintf (stderr, "Dump mode.\n"); |
||
181 | |||
182 | f = fopen (path, "r"); |
||
183 | if (!f) { |
||
184 | char path2[200]; |
||
185 | strcpy(path2,path); strcat(path2,".rtf"); |
||
186 | f = fopen(path2, "r"); |
||
187 | if(!f) |
||
188 | error_handler ("cannot open input file"); |
||
189 | } |
||
190 | |||
191 | fprintf(stderr,"Processing %s...\n", path); |
||
192 | |||
193 | lineno=0; |
||
194 | |||
195 | word = word_read (f); |
||
196 | |||
197 | if (dump_mode) { |
||
198 | word_dump (word); |
||
199 | printf ("\n"); |
||
200 | } else { |
||
201 | word_print (word); |
||
202 | } |
||
203 | |||
204 | fclose(f); |
||
205 | |||
206 | fprintf(stderr,"Done.\n"); |
||
207 | |||
208 | hash_stats(); |
||
209 | |||
210 | if (debug_mode) { |
||
211 | fprintf (stderr, "Total memory allocated %ld bytes.\n", |
||
212 | total_malloced()); |
||
213 | } |
||
214 | |||
215 | /* May as well */ |
||
216 | word_free (word); |
||
217 | |||
218 | return 0; |
||
219 | }2> |
||
220 |