diff -r 59758314f811 -r d4524d6a4472 Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/main__u_8c_source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/main__u_8c_source.html Fri Jun 11 15:24:34 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,441 +0,0 @@ - - - - -TB9.2 Example Applications: examples/PIPS/antiword/src/main_u.c Source File - - - - - -

examples/PIPS/antiword/src/main_u.c

00001 /*
-00002  * main_u.c
-00003  *
-00004  * Released under GPL
-00005  *
-00006  * Copyright (C) 1998-2004 A.J. van Os
-00007  *
-00008  * This program is free software; you can redistribute it and/or
-00009  * modify it under the terms of the GNU General Public License
-00010  * as published by the Free Software Foundation; either version 2
-00011  * of the License, or (at your option) any later version.
-00012  *
-00013  * This program is distributed in the hope that it will be useful,
-00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-00016  * GNU General Public License for more details.
-00017  *
-00018  * You should have received a copy of the GNU General Public License
-00019  * along with this program; if not, write to the Free Software
-00020  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-00021  *
-00022  * Description:
-00023  * The main program of 'antiword' (Unix version)
-00024  */
-00025 #ifdef SYMBIAN
-00026 //GCCE header
-00027 //#include <staticlibinit_gcce.h>
-00028 #include <string.h>
-00029 #endif /*SYMBIAN*/
-00030 
-00031 #include <stdio.h>
-00032 #include <stdlib.h>
-00033 #if defined(__dos)
-00034 #include <fcntl.h>
-00035 #include <io.h>
-00036 #endif /* __dos */
-00037 #if defined(__CYGWIN__) || defined(__CYGMING__)
-00038 #  ifdef X_LOCALE
-00039 #    include <X11/Xlocale.h>
-00040 #  else
-00041 #    include <locale.h>
-00042 #  endif
-00043 #else
-00044 #include <locale.h>
-00045 #endif /* __CYGWIN__ || __CYGMING__ */
-00046 #if defined(N_PLAT_NLM)
-00047 #if !defined(_VA_LIST)
-00048 #include "NW-only/nw_os.h"
-00049 #endif /* !_VA_LIST */
-00050 #include "getopt.h"
-00051 #endif /* N_PLAT_NLM */
-00052 #include "version.h"
-00053 #include "antiword.h"
-00054 #include <unistd.h> 
-00055 
-00056 /* The name of this program */
-00057 static const char       *szTask = NULL;
-00058 
-00059 
-00060 static void
-00061 vUsage(void)
-00062 {
-00063         fprintf(stderr, "\tName: %s\n", szTask);
-00064         fprintf(stderr, "\tPurpose: "PURPOSESTRING"\n");
-00065         fprintf(stderr, "\tAuthor: "AUTHORSTRING"\n");
-00066         fprintf(stderr, "\tVersion: "VERSIONSTRING);
-00067 #if defined(__dos)
-00068         fprintf(stderr, VERSIONSTRING2);
-00069 #endif /* __dos */
-00070         fprintf(stderr, "\n");
-00071         fprintf(stderr, "\tStatus: "STATUSSTRING"\n");
-00072         fprintf(stderr,
-00073                 "\tUsage: %s [switches] wordfile1 [wordfile2 ...]\n", szTask);
-00074         fprintf(stderr,
-00075                 "\tSwitches: [-f|-t|-a papersize|-p papersize|-x dtd]"
-00076                 "[-m mapping][-w #][-i #][-Ls]\n");
-00077         fprintf(stderr, "\t-f formatted text output\n");
-00078         fprintf(stderr, "\t-t text output (default)\n");
-00079         fprintf(stderr, "\t-a <paper size name> Adobe PDF output\n");
-00080         fprintf(stderr, "\t-p <paper size name> PostScript output\n");
-00081         fprintf(stderr, "\t   paper size like: a4, letter or legal\n");
-00082         fprintf(stderr, "\t-x <dtd> XML output\n");
-00083         fprintf(stderr, "\t   like: db (DocBook)\n");
-00084         fprintf(stderr, "\t-m <mapping> character mapping file\n");
-00085         fprintf(stderr, "\t-w <width> in characters of text output\n");
-00086         fprintf(stderr, "\t-i <level> image level (PostScript only)\n");
-00087         fprintf(stderr, "\t-L use landscape mode (PostScript only)\n");
-00088         fprintf(stderr, "\t-r Show removed text\n");
-00089         fprintf(stderr, "\t-s Show hidden (by Word) text\n");
-00090 } /* end of vUsage */
-00091 
-00092 /*
-00093  * pStdin2TmpFile - save stdin in a temporary file
-00094  *
-00095  * returns: the pointer to the temporary file or NULL
-00096  */
-00097 static FILE *
-00098 pStdin2TmpFile(long *lFilesize)
-00099 {
-00100         FILE    *pTmpFile;
-00101         size_t  tSize;
-00102         BOOL    bFailure;
-00103         UCHAR   aucBytes[BUFSIZ];
-00104 
-00105         DBG_MSG("pStdin2TmpFile");
-00106 
-00107         fail(lFilesize == NULL);
-00108 
-00109         /* Open the temporary file */
-00110         pTmpFile = tmpfile();
-00111         if (pTmpFile == NULL) {
-00112                 return NULL;
-00113         }
-00114 
-00115 #if defined(__dos)
-00116         /* Stdin must be read as a binary stream */
-00117         setmode(fileno(stdin), O_BINARY);
-00118 #endif /* __dos */
-00119 
-00120         /* Copy stdin to the temporary file */
-00121         *lFilesize = 0;
-00122         bFailure = TRUE;
-00123         for (;;) {
-00124                 tSize = fread(aucBytes, 1, sizeof(aucBytes), stdin);
-00125                 if (tSize == 0) {
-00126                         bFailure = feof(stdin) == 0;
-00127                         break;
-00128                 }
-00129                 if (fwrite(aucBytes, 1, tSize, pTmpFile) != tSize) {
-00130                         bFailure = TRUE;
-00131                         break;
-00132                 }
-00133                 *lFilesize += (long)tSize;
-00134         }
-00135 
-00136 #if defined(__dos)
-00137         /* Switch stdin back to a text stream */
-00138         setmode(fileno(stdin), O_TEXT);
-00139 #endif /* __dos */
-00140 
-00141         /* Deal with the result of the copy action */
-00142         if (bFailure) {
-00143                 *lFilesize = 0;
-00144                 (void)fclose(pTmpFile);
-00145                 return NULL;
-00146         }
-00147         rewind(pTmpFile);
-00148         return pTmpFile;
-00149 } /* end of pStdin2TmpFile */
-00150 
-00151 /*
-00152  * bProcessFile - process a single file
-00153  *
-00154  * returns: TRUE when the given file is a supported Word file, otherwise FALSE
-00155  */
-00156 #ifndef SYMBIAN 
-00157 static BOOL
-00158 bProcessFile(const char *szFilename )
-00159 #else
-00160 static BOOL
-00161 bProcessFile(const char *szFilename, FILE *ofp)
-00162 #endif /*SYMBIAN*/
-00163 {
-00164         FILE            *pFile;
-00165         diagram_type    *pDiag;
-00166         long            lFilesize;
-00167         int             iWordVersion;
-00168         BOOL            bResult;
-00169 
-00170         fail(szFilename == NULL || szFilename[0] == '\0');
-00171 
-00172         DBG_MSG(szFilename);
-00173 
-00174         if (szFilename[0] == '-' && szFilename[1] == '\0') {
-00175                 pFile = pStdin2TmpFile(&lFilesize);
-00176                 if (pFile == NULL) {
-00177                         werr(0, "I can't save the standard input to a file");
-00178                         return FALSE;
-00179                 }
-00180         } else {
-00181                 pFile = fopen(szFilename, "rb");
-00182                 if (pFile == NULL) {
-00183                         werr(0, "I can't open '%s' for reading", szFilename);
-00184                         return FALSE;
-00185                 }
-00186 
-00187                 lFilesize = lGetFilesize(szFilename);
-00188                 if (lFilesize < 0) {
-00189                         (void)fclose(pFile);
-00190                         werr(0, "I can't get the size of '%s'", szFilename);
-00191                         return FALSE;
-00192                 }
-00193         }
-00194 
-00195         iWordVersion = iGuessVersionNumber(pFile, lFilesize);
-00196         if (iWordVersion < 0 || iWordVersion == 3) {
-00197                 if (bIsRtfFile(pFile)) {
-00198                         werr(0, "%s is not a Word Document."
-00199                                 " It is probably a Rich Text Format file",
-00200                                 szFilename);
-00201                 } if (bIsWordPerfectFile(pFile)) {
-00202                         werr(0, "%s is not a Word Document."
-00203                                 " It is probably a Word Perfect file",
-00204                                 szFilename);
-00205                 } else {
-00206 #if defined(__dos)
-00207                         werr(0, "%s is not a Word Document or the filename"
-00208                                 " is not in the 8+3 format.", szFilename);
-00209 #else
-00210                         werr(0, "%s is not a Word Document.", szFilename);
-00211 #endif /* __dos */
-00212                 }
-00213                 (void)fclose(pFile);
-00214                 return FALSE;
-00215         }
-00216         /* Reset any reading done during file testing */
-00217         rewind(pFile);
-00218         
-00219         #ifndef SYMBIAN
-00220         pDiag = pCreateDiagram(szTask, szFilename);
-00221         #else
-00222         pDiag = pCreateDiagram(szTask, szFilename, ofp );
-00223         #endif /*SYMBIAN*/
-00224         if (pDiag == NULL) {
-00225                 (void)fclose(pFile);
-00226                 return FALSE;
-00227         }
-00228 
-00229         bResult = bWordDecryptor(pFile, lFilesize, pDiag);
-00230         vDestroyDiagram(pDiag);
-00231 
-00232         (void)fclose(pFile);
-00233         return bResult;
-00234 } /* end of bProcessFile */
-00235 
-00236 
-00237 #ifdef SYMBIAN
-00238 int fillArg( char **argv, char *inpStr)
-00239 {
-00240         int count =0;
-00241         const char *search = " ";
-00242         
-00243         char *token = strtok( inpStr, search);
-00244         argv[0] = token;
-00245         count = 1;
-00246         while( token != NULL )
-00247         {
-00248                 token = strtok( NULL, search);
-00249                 argv[count++] = token;
-00250         }
-00251         return count-1;
-00252 }
-00253 #endif /*SYMBIAN*/
-00254 int
-00255 main(int argc, char **argv)
-00256 {
-00257         #ifdef SYMBIAN
-00258         FILE *ofp = NULL;
-00259         char *buf;
-00260         #endif /*SYMBIAN*/
-00261         
-00262         options_type    tOptions;
-00263         const char      *szWordfile;
-00264         int     iFirst, iIndex, iGoodCount;
-00265         BOOL    bUsage, bMultiple, bUseTXT, bUseXML;
-00266 
-00267         if (argc <= 0) {
-00268                 return EXIT_FAILURE;
-00269         }
-00270 
-00271         #ifdef SYMBIAN
-00272         //Adding HOME environment Variable explicitly
-00273         
-00274     buf = (char *)malloc(FILENAME_MAX);
-00275     // get path to the private folder
-00276     getcwd(buf, FILENAME_MAX);
-00277         #ifndef __WINS__
-00278         // acquire installation location and get the drive letter 
-00279         buf[0] = argv[0][0]; // argv[0] contains full path to exe including drive
-00280         #endif
-00281 
-00282     strcat(buf, "\\Resources\\");
-00283         if (setenv("HOME", buf, 1) != 0) {
-00284                 return EXIT_FAILURE;
-00285         }
-00286     free(buf);
-00287         #endif /*SYMBIAN*/
-00288 
-00289         szTask = szBasename(argv[0]);
-00290 
-00291         if (argc <= 1) {
-00292 #ifdef SYMBIAN
-00293                 char* inpStr = (char*) malloc(_POSIX_ARG_MAX);
-00294                 /*If there is no command-line input, Prompt for it!*/
-00295                 vUsage();
-00296                 
-00297                 fprintf(stdout, "\n\nEnter the input Command String:");
-00298                 fgets( inpStr, _POSIX_ARG_MAX, stdin );
-00299                 
-00300                 argc = fillArg( argv, inpStr);
-00301                 /* Check whether the first argument is valid or not */
-00302                 if ( strcasecmp ( "antiword", argv[0]))
-00303                 {
-00304                         fprintf(stdout, "\nInvalid command syntax, Please read the syntax properly\n\n\n");
-00305                         bUsage = TRUE;
-00306                         getchar();
-00307                 }
-00308                 else
-00309                 {
-00310                         iFirst = iReadOptions(argc, argv);
-00311                         bUsage = iFirst <= 0;
-00312                 }
-00313                 #else 
-00314                 bUsage = TRUE;
-00315                 iFirst = 1;
-00316                 free(inputStr);
-00317 #endif /*SYMBIAN*/
-00318         } else {
-00319                 iFirst = iReadOptions(argc, argv);
-00320                 bUsage = iFirst <= 0;
-00321         }
-00322         if (bUsage) {
-00323                 vUsage();
-00324                 #ifdef SYMBIAN
-00325                 getchar();
-00326                 #endif /*SYMBIAN*/
-00327                 return iFirst < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
-00328         }
-00329 
-00330 #if defined(N_PLAT_NLM) && !defined(_VA_LIST)
-00331         nwinit();
-00332 #endif /* N_PLAT_NLM && !_VA_LIST */
-00333 
-00334         vGetOptions(&tOptions);
-00335 
-00336 #if !defined(__dos)
-00337         if (is_locale_utf8()) {
-00338 #if defined(__STDC_ISO_10646__)
-00339                 /*
-00340                  * If the user wants UTF-8 and the envirionment variables
-00341                  * support UTF-8, than set the locale accordingly
-00342                  */
-00343                 if (tOptions.eEncoding == encoding_utf_8) {
-00344                         if (setlocale(LC_CTYPE, "") == NULL) {
-00345                                 werr(1, "Can't set the UTF-8 locale! "
-00346                                         "Check LANG, LC_CTYPE, LC_ALL.");
-00347                         }
-00348                         DBG_MSG("The UTF-8 locale has been set");
-00349                 } else {
-00350                         (void)setlocale(LC_CTYPE, "C");
-00351                 }
-00352 #endif /* __STDC_ISO_10646__ */
-00353         } else {
-00354                 if (setlocale(LC_CTYPE, "") == NULL) {
-00355                         werr(0, "Can't set the locale! Will use defaults");
-00356                         (void)setlocale(LC_CTYPE, "C");
-00357                 }
-00358                 DBG_MSG("The locale has been set");
-00359         }
-00360 #endif /* !__dos */
-00361 
-00362         bMultiple = argc - iFirst > 1;
-00363         bUseTXT = tOptions.eConversionType == conversion_text ||
-00364                 tOptions.eConversionType == conversion_fmt_text;
-00365         bUseXML = tOptions.eConversionType == conversion_xml;
-00366         iGoodCount = 0;
-00367 
-00368 #if defined(__dos)
-00369         if (tOptions.eConversionType == conversion_pdf) {
-00370                 /* PDF must be written as a binary stream */
-00371                 setmode(fileno(stdout), O_BINARY);
-00372         }
-00373 #endif /* __dos */
-00374 
-00375         if (bUseXML) {
-00376                 fprintf(stdout,
-00377         "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
-00378         "<!DOCTYPE %s PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\"\n"
-00379         "\t\"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">\n",
-00380                 bMultiple ? "set" : "book");
-00381                 if (bMultiple) {
-00382                         fprintf(stdout, "<set>\n");
-00383                 }
-00384         }
-00385 
-00386         //Output file
-00387         #ifdef SYMBIAN
-00388         ofp = fopen( argv[argc-1], "w");
-00389         if ( ofp == NULL)
-00390                 {
-00391                         printf("Unable to open the output file: %s\n",argv[argc-1]);
-00392                         exit(0);
-00393                 }
-00394         #endif /*SYMBIAN*/
-00395 
-00396         for (iIndex = iFirst; iIndex < argc-1; iIndex++) {
-00397                 if (bMultiple && bUseTXT) {
-00398                         szWordfile = szBasename(argv[iIndex]);
-00399                         fprintf(stdout, "::::::::::::::\n");
-00400                         fprintf(stdout, "%s\n", szWordfile);
-00401                         fprintf(stdout, "::::::::::::::\n");
-00402                 }
-00403                 #ifndef SYMBIAN
-00404                 if (bProcessFile(argv[iIndex])) {
-00405                 #else
-00406                 if (bProcessFile(argv[iIndex],ofp )) {
-00407                 #endif  /*SYMBIAN*/
-00408                 
-00409                         iGoodCount++;
-00410                 }
-00411         }
-00412 
-00413         if (bMultiple && bUseXML) {
-00414                 fprintf(stdout, "</set>\n");
-00415         }
-00416 
-00417         DBG_DEC(iGoodCount);
-00418         #ifdef SYMBIAN
-00419         fclose(ofp);
-00420         fprintf(stdout, "\n\nConversion is successful!!, check out this file : %s\n", argv[argc-1]);
-00421         getchar();
-00422         #endif /*SYMBIAN*/
-00423         
-00424         return iGoodCount <= 0 ? EXIT_FAILURE : EXIT_SUCCESS;
-00425 } /* end of main */
-
-
Generated by  - -doxygen 1.6.2
- -