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

examples/PIPS/antiword/src/options.c

00001 /*
-00002  * options.c
-00003  * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
-00004  *
-00005  * Description:
-00006  * Read and write the options
-00007  */
-00008 
-00009 #include <stdio.h>
-00010 #include <stdlib.h>
-00011 #include <string.h>
-00012 #if defined(__riscos)
-00013 #include "DeskLib:Error.h"
-00014 #include "DeskLib:Wimp.h"
-00015 #else
-00016 #include <stdlib.h>
-00017 #if defined(__dos) || defined(N_PLAT_NLM)
-00018 extern int getopt(int, char **, const char *);
-00019 #else
-00020 #include <unistd.h>
-00021 #endif /* __dos */
-00022 #endif /* __riscos */
-00023 #include "antiword.h"
-00024 
-00025 #if defined(__riscos)
-00026 #define PARAGRAPH_BREAK         "set paragraph_break=%d"
-00027 #define AUTOFILETYPE            "set autofiletype_allowed=%d"
-00028 #define USE_OUTLINEFONTS        "set use_outlinefonts=%d"
-00029 #define SHOW_IMAGES             "set show_images=%d"
-00030 #define HIDE_HIDDEN_TEXT        "set hide_hidden_text=%d"
-00031 #define SCALE_FACTOR_START      "set scale_factor_start=%d"
-00032 #else
-00033 #define LEAFNAME_SIZE           (32+1)
-00034 #endif /* __riscos */
-00035 
-00036 /* Current values for options */
-00037 static options_type     tOptionsCurr;
-00038 #if defined(__riscos)
-00039 /* Temporary values for options */
-00040 static options_type     tOptionsTemp;
-00041 #else
-00042 typedef struct papersize_tag {
-00043         char    szName[16];     /* Papersize name */
-00044         USHORT  usWidth;        /* In points */
-00045         USHORT  usHeight;       /* In points */
-00046 } papersize_type;
-00047 
-00048 static const papersize_type atPaperSizes[] = {
-00049         {       "10x14",         720,   1008    },
-00050         {       "a3",            842,   1191    },
-00051         {       "a4",            595,    842    },
-00052         {       "a5",            420,    595    },
-00053         {       "b4",            729,   1032    },
-00054         {       "b5",            516,    729    },
-00055         {       "executive",     540,    720    },
-00056         {       "folio",         612,    936    },
-00057         {       "legal",         612,   1008    },
-00058         {       "letter",        612,    792    },
-00059         {       "note",          540,    720    },
-00060         {       "quarto",        610,    780    },
-00061         {       "statement",     396,    612    },
-00062         {       "tabloid",       792,   1224    },
-00063         {       "",                0,      0    },
-00064 };
-00065 #endif /* __riscos */
-00066 /* Default values for options */
-00067 static const options_type       tOptionsDefault = {
-00068         DEFAULT_SCREEN_WIDTH,
-00069 #if defined(__riscos)
-00070         conversion_draw,
-00071 #else
-00072         conversion_text,
-00073 #endif /* __riscos */
-00074         TRUE,
-00075         TRUE,
-00076         FALSE,
-00077         encoding_latin_1,
-00078         INT_MAX,
-00079         INT_MAX,
-00080         level_default,
-00081 #if defined(__riscos)
-00082         TRUE,
-00083         DEFAULT_SCALE_FACTOR,
-00084 #endif /* __riscos */
-00085 };
-00086 
-00087 
-00088 #if !defined(__riscos)
-00089 /*
-00090  * bCorrectPapersize - see if the papersize is correct
-00091  *
-00092  * TRUE if the papersize is correct, otherwise FALSE
-00093  */
-00094 static BOOL
-00095 bCorrectPapersize(const char *szName, conversion_type eConversionType)
-00096 {
-00097         const papersize_type    *pPaperSize;
-00098 
-00099         for (pPaperSize = atPaperSizes;
-00100              pPaperSize->szName[0] != '\0';
-00101              pPaperSize++) {
-00102                 if (!STRCEQ(pPaperSize->szName,  szName)) {
-00103                         continue;
-00104                 }
-00105                 DBG_DEC(pPaperSize->usWidth);
-00106                 DBG_DEC(pPaperSize->usHeight);
-00107                 tOptionsCurr.eConversionType = eConversionType;
-00108                 tOptionsCurr.iPageHeight = (int)pPaperSize->usHeight;
-00109                 tOptionsCurr.iPageWidth = (int)pPaperSize->usWidth;
-00110                 return TRUE;
-00111         }
-00112         return FALSE;
-00113 } /* end of bCorrectPapersize */
-00114 
-00115 /*
-00116  * szCreateSuffix - create a suffix for the file
-00117  *
-00118  * Returns the suffix
-00119  */
-00120 static const char *
-00121 szCreateSuffix(const char *szLeafname)
-00122 {
-00123         const char      *pcDot;
-00124 
-00125         pcDot = strrchr(szLeafname, '.');
-00126         if (pcDot != NULL && STRCEQ(pcDot, ".txt")) {
-00127                 /* There is already a .txt suffix, no need for another one */
-00128                 return "";
-00129         }
-00130         return ".txt";
-00131 } /* end of szCreateSuffix */
-00132 
-00133 /*
-00134  * eMappingFile2Encoding - convert the mapping file to an encoding
-00135  */
-00136 static encoding_type
-00137 eMappingFile2Encoding(const char *szLeafname)
-00138 {
-00139         char    szMappingFile[LEAFNAME_SIZE+4];
-00140 
-00141         fail(szLeafname == NULL);
-00142 
-00143         if (strlen(szLeafname) + 4 >= sizeof(szMappingFile)) {
-00144                 DBG_MSG(szLeafname);
-00145                 return encoding_latin_1;
-00146         }
-00147 
-00148         sprintf(szMappingFile, "%s%s", szLeafname, szCreateSuffix(szLeafname));
-00149 
-00150         DBG_MSG(szMappingFile);
-00151 
-00152         if (STRCEQ(szMappingFile, MAPPING_FILE_UTF_8)) {
-00153                 return encoding_utf_8;
-00154         }
-00155         if (STRCEQ(szMappingFile, MAPPING_FILE_CP852) ||
-00156             STRCEQ(szMappingFile, MAPPING_FILE_CP1250) ||
-00157             STRCEQ(szMappingFile, MAPPING_FILE_8859_2)) {
-00158                 return encoding_latin_2;
-00159         }
-00160         if (STRCEQ(szMappingFile, MAPPING_FILE_KOI8_R) ||
-00161             STRCEQ(szMappingFile, MAPPING_FILE_KOI8_U) ||
-00162             STRCEQ(szMappingFile, MAPPING_FILE_CP866) ||
-00163             STRCEQ(szMappingFile, MAPPING_FILE_CP1251) ||
-00164             STRCEQ(szMappingFile, MAPPING_FILE_8859_5)) {
-00165                 return encoding_cyrillic;
-00166         }
-00167         return encoding_latin_1;
-00168 } /* end of eMappingFile2Encoding */
-00169 #endif /* !__riscos */
-00170 
-00171 /*
-00172  * pOpenCharacterMappingFile - open the mapping file
-00173  *
-00174  * Returns the file pointer or NULL
-00175  */
-00176 static FILE *
-00177 pOpenCharacterMappingFile(const char *szLeafname)
-00178 {
-00179 #if !defined(__riscos)
-00180         FILE    *pFile;
-00181         const char      *szHome, *szAntiword, *szSuffix;
-00182         size_t  tFilenameLen;
-00183         char    szMappingFile[PATH_MAX+1];
-00184 #endif /* !__riscos */
-00185 
-00186         if (szLeafname == NULL || szLeafname[0] == '\0') {
-00187                 return NULL;
-00188         }
-00189 
-00190         DBG_MSG(szLeafname);
-00191 
-00192 #if defined(__riscos)
-00193         return fopen(szLeafname, "r");
-00194 #else
-00195         /* Set the suffix */
-00196         szSuffix = szCreateSuffix(szLeafname);
-00197 
-00198         /* Set length */
-00199         tFilenameLen = strlen(szLeafname) + strlen(szSuffix);
-00200 
-00201         /* Try the environment version of the mapping file */
-00202         szAntiword = szGetAntiwordDirectory();
-00203         if (szAntiword != NULL && szAntiword[0] != '\0') {
-00204             if (strlen(szAntiword) + tFilenameLen <
-00205                 sizeof(szMappingFile) -
-00206                 sizeof(FILE_SEPARATOR)) {
-00207                         sprintf(szMappingFile,
-00208                                 "%s" FILE_SEPARATOR "%s%s",
-00209                                 szAntiword, szLeafname, szSuffix);
-00210                         DBG_MSG(szMappingFile);
-00211                         pFile = fopen(szMappingFile, "r");
-00212                         if (pFile != NULL) {
-00213                                 return pFile;
-00214                         }
-00215                 } else {
-00216                         werr(0, "Environment mappingfilename ignored");
-00217                 }
-00218         }
-00219 
-00220         /* Try the local version of the mapping file */
-00221         szHome = szGetHomeDirectory();
-00222         if (strlen(szHome) + tFilenameLen <
-00223             sizeof(szMappingFile) -
-00224             sizeof(ANTIWORD_DIR) -
-00225             2 * sizeof(FILE_SEPARATOR)) {
-00226                 #ifndef SYMBIAN
-00227                 sprintf(szMappingFile,
-00228                         "%s%s%s",
-00229                         szHome, szLeafname, szSuffix);
-00230                 #else   
-00231                 sprintf(szMappingFile,
-00232                         "%s%s%s",
-00233                         szHome, szLeafname, szSuffix);
-00234                 #endif /*SYMBIAN*/      
-00235                 DBG_MSG(szMappingFile);
-00236                 pFile = fopen(szMappingFile, "r");
-00237                 if (pFile != NULL) {
-00238                         return pFile;
-00239                 }
-00240         } else {
-00241                 werr(0, "Local mappingfilename too long, ignored");
-00242         }
-00243 
-00244         /* Try the global version of the mapping file */
-00245         if (tFilenameLen <
-00246             sizeof(szMappingFile) -
-00247             sizeof(GLOBAL_ANTIWORD_DIR) -
-00248             sizeof(FILE_SEPARATOR)) {
-00249                 sprintf(szMappingFile,
-00250                         GLOBAL_ANTIWORD_DIR FILE_SEPARATOR "%s%s",
-00251                         szLeafname, szSuffix);
-00252                 DBG_MSG(szMappingFile);
-00253                 pFile = fopen(szMappingFile, "r");
-00254                 if (pFile != NULL) {
-00255                         return pFile;
-00256                 }
-00257         } else {
-00258                 werr(0, "Global mappingfilename too long, ignored");
-00259         }
-00260         werr(0, "I can't open your mapping file (%s%s)\n"
-00261                 "It is not in '%s" FILE_SEPARATOR ANTIWORD_DIR "' nor in '"
-00262                 GLOBAL_ANTIWORD_DIR "'.", szLeafname, szSuffix, szHome);
-00263         return NULL;
-00264 #endif /* __riscos */
-00265 } /* end of pOpenCharacterMappingFile */
-00266 
-00267 /*
-00268  * vCloseCharacterMappingFile - close the mapping file
-00269  */
-00270 static void
-00271 vCloseCharacterMappingFile(FILE *pFile)
-00272 {
-00273         (void)fclose(pFile);
-00274 } /* end of pCloseCharacterMappingFile */
-00275 
-00276 
-00277 /*
-00278  * iReadOptions - read options
-00279  *
-00280  * returns:     -1: error
-00281  *               0: help
-00282  *              >0: index first file argument
-00283  */
-00284 int
-00285 iReadOptions(int argc, char **argv)
-00286 {
-00287 #if defined(__riscos)
-00288         FILE    *pFile;
-00289         const char      *szAlphabet;
-00290         int     iAlphabet;
-00291         char    szLine[81];
-00292 #else
-00293         extern  char    *optarg;
-00294         extern int      optind;
-00295         char    *pcChar, *szTmp;
-00296         int     iChar;
-00297         char    szLeafname[LEAFNAME_SIZE];
-00298 #endif /* __riscos */
-00299         FILE    *pCharacterMappingFile;
-00300         int     iTmp;
-00301         BOOL    bSuccess;
-00302 
-00303         DBG_MSG("iReadOptions");
-00304 
-00305 /* Defaults */
-00306         tOptionsCurr = tOptionsDefault;
-00307 
-00308 #if defined(__riscos)
-00309 /* Choices file */
-00310         pFile = fopen("<AntiWord$ChoicesFile>", "r");
-00311         DBG_MSG_C(pFile == NULL, "Choices file not found");
-00312         DBG_HEX_C(pFile != NULL, pFile);
-00313         if (pFile != NULL) {
-00314                 while (fgets(szLine, (int)sizeof(szLine), pFile) != NULL) {
-00315                         DBG_MSG(szLine);
-00316                         if (szLine[0] == '#' ||
-00317                             szLine[0] == '\r' ||
-00318                             szLine[0] == '\n') {
-00319                                 continue;
-00320                         }
-00321                         if (sscanf(szLine, PARAGRAPH_BREAK, &iTmp) == 1 &&
-00322                             (iTmp == 0 ||
-00323                             (iTmp >= MIN_SCREEN_WIDTH &&
-00324                              iTmp <= MAX_SCREEN_WIDTH))) {
-00325                                 tOptionsCurr.iParagraphBreak = iTmp;
-00326                                 DBG_DEC(tOptionsCurr.iParagraphBreak);
-00327                         } else if (sscanf(szLine, AUTOFILETYPE, &iTmp)
-00328                                                                 == 1) {
-00329                                 tOptionsCurr.bAutofiletypeAllowed =
-00330                                                                 iTmp != 0;
-00331                                 DBG_DEC(tOptionsCurr.bAutofiletypeAllowed);
-00332                         } else if (sscanf(szLine, USE_OUTLINEFONTS, &iTmp)
-00333                                                                 == 1) {
-00334                                 tOptionsCurr.eConversionType =
-00335                                         iTmp == 0 ?
-00336                                         conversion_text : conversion_draw;
-00337                                 DBG_DEC(tOptionsCurr.eConversionType);
-00338                         } else if (sscanf(szLine, SHOW_IMAGES, &iTmp)
-00339                                                                 == 1) {
-00340                                 tOptionsCurr.eImageLevel = iTmp != 0 ?
-00341                                         level_default : level_no_images;
-00342                         } else if (sscanf(szLine, HIDE_HIDDEN_TEXT, &iTmp)
-00343                                                                 == 1) {
-00344                                 tOptionsCurr.bHideHiddenText = iTmp != 0;
-00345                                 DBG_DEC(tOptionsCurr.bHideHiddenText);
-00346                         } else if (sscanf(szLine, SCALE_FACTOR_START, &iTmp)
-00347                                                                 == 1) {
-00348                                 if (iTmp >= MIN_SCALE_FACTOR &&
-00349                                     iTmp <= MAX_SCALE_FACTOR) {
-00350                                         tOptionsCurr.iScaleFactor = iTmp;
-00351                                         DBG_DEC(tOptionsCurr.iScaleFactor);
-00352                                 }
-00353                         }
-00354                 }
-00355                 (void)fclose(pFile);
-00356         }
-00357         iAlphabet = iReadCurrentAlphabetNumber();
-00358         switch (iAlphabet) {
-00359         case 101:       /* ISO-8859-1 aka Latin1 */
-00360                 szAlphabet = "<AntiWord$Latin1>";
-00361                 break;
-00362         case 112:       /* ISO-8859-15 aka Latin9 */
-00363                 szAlphabet = "<AntiWord$Latin9>";
-00364                 break;
-00365         default:
-00366                 werr(0, "Alphabet '%d' is not supported", iAlphabet);
-00367                 return -1;
-00368         }
-00369         pCharacterMappingFile = pOpenCharacterMappingFile(szAlphabet);
-00370         if (pCharacterMappingFile != NULL) {
-00371                 bSuccess = bReadCharacterMappingTable(pCharacterMappingFile);
-00372                 vCloseCharacterMappingFile(pCharacterMappingFile);
-00373         } else {
-00374                 bSuccess = FALSE;
-00375         }
-00376         return bSuccess ? 1 : -1;
-00377 #else
-00378 /* Environment */
-00379         
-00380         #ifdef SYMBIAN
-00381         //Adding Some environment Variable explicitly
-00382         if ( setenv("COLUMNS", "80", 1) == 0)
-00383         #endif /*SYMBIAN*/
-00384         szTmp = getenv("COLUMNS");
-00385         
-00386         if (szTmp != NULL) {
-00387                 DBG_MSG(szTmp);
-00388                 iTmp = (int)strtol(szTmp, &pcChar, 10);
-00389                 if (*pcChar == '\0') {
-00390                         iTmp -= 4;      /* This is for the edge */
-00391                         if (iTmp < MIN_SCREEN_WIDTH) {
-00392                                 iTmp = MIN_SCREEN_WIDTH;
-00393                         } else if (iTmp > MAX_SCREEN_WIDTH) {
-00394                                 iTmp = MAX_SCREEN_WIDTH;
-00395                         }
-00396                         tOptionsCurr.iParagraphBreak = iTmp;
-00397                         DBG_DEC(tOptionsCurr.iParagraphBreak);
-00398                 }
-00399         }
-00400         strncpy(szLeafname, szGetDefaultMappingFile(), sizeof(szLeafname) - 1);
-00401         szLeafname[sizeof(szLeafname) - 1] = '\0';
-00402 /* Command line */
-00403         while ((iChar = getopt(argc, argv, "La:fhi:m:p:rstw:x:")) != -1) {
-00404                 switch (iChar) {
-00405                 case 'L':
-00406                         tOptionsCurr.bUseLandscape = TRUE;
-00407                         break;
-00408                 case 'a':
-00409                         if (!bCorrectPapersize(optarg, conversion_pdf)) {
-00410                                 werr(0, "-a without a valid papersize");
-00411                                 return -1;
-00412                         }
-00413                         break;
-00414                 case 'f':
-00415                         tOptionsCurr.eConversionType = conversion_fmt_text;
-00416                         break;
-00417                 case 'h':
-00418                         return 0;
-00419                 case 'i':
-00420                         iTmp = (int)strtol(optarg, &pcChar, 10);
-00421                         if (*pcChar != '\0') {
-00422                                 break;
-00423                         }
-00424                         switch (iTmp) {
-00425                         case 0:
-00426                                 tOptionsCurr.eImageLevel = level_gs_special;
-00427                                 break;
-00428                         case 1:
-00429                                 tOptionsCurr.eImageLevel = level_no_images;
-00430                                 break;
-00431                         case 2:
-00432                                 tOptionsCurr.eImageLevel = level_ps_2;
-00433                                 break;
-00434                         case 3:
-00435                                 tOptionsCurr.eImageLevel = level_ps_3;
-00436                                 break;
-00437                         default:
-00438                                 tOptionsCurr.eImageLevel = level_default;
-00439                                 break;
-00440                         }
-00441                         DBG_DEC(tOptionsCurr.eImageLevel);
-00442                         break;
-00443                 case 'm':
-00444                         if (tOptionsCurr.eConversionType == conversion_xml) {
-00445                                 werr(0, "XML doesn't need a mapping file");
-00446                                 break;
-00447                         }
-00448                         strncpy(szLeafname, optarg, sizeof(szLeafname) - 1);
-00449                         szLeafname[sizeof(szLeafname) - 1] = '\0';
-00450                         DBG_MSG(szLeafname);
-00451                         break;
-00452                 case 'p':
-00453                         if (!bCorrectPapersize(optarg, conversion_ps)) {
-00454                                 werr(0, "-p without a valid papersize");
-00455                                 return -1;
-00456                         }
-00457                         break;
-00458                 case 'r':
-00459                         tOptionsCurr.bRemoveRemovedText = FALSE;
-00460                         break;
-00461                 case 's':
-00462                         tOptionsCurr.bHideHiddenText = FALSE;
-00463                         break;
-00464                 case 't':
-00465                         tOptionsCurr.eConversionType = conversion_text;
-00466                         break;
-00467                 case 'w':
-00468                         iTmp = (int)strtol(optarg, &pcChar, 10);
-00469                         if (*pcChar == '\0') {
-00470                                 if (iTmp != 0 && iTmp < MIN_SCREEN_WIDTH) {
-00471                                         iTmp = MIN_SCREEN_WIDTH;
-00472                                 } else if (iTmp > MAX_SCREEN_WIDTH) {
-00473                                         iTmp = MAX_SCREEN_WIDTH;
-00474                                 }
-00475                                 tOptionsCurr.iParagraphBreak = iTmp;
-00476                                 DBG_DEC(tOptionsCurr.iParagraphBreak);
-00477                         }
-00478                         break;
-00479                 case 'x':
-00480                         if (STREQ(optarg, "db")) {
-00481                                 tOptionsCurr.iParagraphBreak = 0;
-00482                                 tOptionsCurr.eConversionType = conversion_xml;
-00483                                 strcpy(szLeafname, MAPPING_FILE_UTF_8);
-00484                         } else {
-00485                                 werr(0, "-x %s is not supported", optarg);
-00486                                 return -1;
-00487                         }
-00488                         break;
-00489                 default:
-00490                         return -1;
-00491                 }
-00492         }
-00493 
-00494         tOptionsCurr.eEncoding = eMappingFile2Encoding(szLeafname);
-00495         DBG_DEC(tOptionsCurr.eEncoding);
-00496 
-00497         if (tOptionsCurr.eConversionType == conversion_ps &&
-00498             tOptionsCurr.eEncoding == encoding_utf_8) {
-00499                 werr(0,
-00500                 "The combination PostScript and UTF-8 is not supported");
-00501                 return -1;
-00502         }
-00503 
-00504         if (tOptionsCurr.eConversionType == conversion_pdf &&
-00505             tOptionsCurr.eEncoding == encoding_utf_8) {
-00506                 werr(0,
-00507                 "The combination PDF and UTF-8 is not supported");
-00508                 return -1;
-00509         }
-00510 
-00511         if (tOptionsCurr.eConversionType == conversion_pdf &&
-00512             tOptionsCurr.eEncoding == encoding_cyrillic) {
-00513                 werr(0,
-00514                 "The combination PDF and Cyrillic is not supported");
-00515                 return -1;
-00516         }
-00517 
-00518         if (tOptionsCurr.eConversionType == conversion_ps ||
-00519             tOptionsCurr.eConversionType == conversion_pdf) {
-00520                 /* PostScript or PDF mode */
-00521                 if (tOptionsCurr.bUseLandscape) {
-00522                         /* Swap the page height and width */
-00523                         iTmp = tOptionsCurr.iPageHeight;
-00524                         tOptionsCurr.iPageHeight = tOptionsCurr.iPageWidth;
-00525                         tOptionsCurr.iPageWidth = iTmp;
-00526                 }
-00527                 /* The paragraph break depends on the width of the paper */
-00528                 tOptionsCurr.iParagraphBreak = iMilliPoints2Char(
-00529                         (long)tOptionsCurr.iPageWidth * 1000 -
-00530                         lDrawUnits2MilliPoints(
-00531                                 PS_LEFT_MARGIN + PS_RIGHT_MARGIN));
-00532                 DBG_DEC(tOptionsCurr.iParagraphBreak);
-00533         }
-00534 
-00535         pCharacterMappingFile = pOpenCharacterMappingFile(szLeafname);
-00536         if (pCharacterMappingFile != NULL) {
-00537                 bSuccess = bReadCharacterMappingTable(pCharacterMappingFile);
-00538                 vCloseCharacterMappingFile(pCharacterMappingFile);
-00539         } else {
-00540                 bSuccess = FALSE;
-00541         }
-00542         return bSuccess ? optind : -1;
-00543 #endif /* __riscos */
-00544 } /* end of iReadOptions */
-00545 
-00546 /*
-00547  * vGetOptions - get a copy of the current option values
-00548  */
-00549 void
-00550 vGetOptions(options_type *pOptions)
-00551 {
-00552         fail(pOptions == NULL);
-00553 
-00554         *pOptions = tOptionsCurr;
-00555 } /* end of vGetOptions */
-00556 
-00557 #if defined(__riscos)
-00558 /*
-00559  * vWriteOptions - write the current options to the Options file
-00560  */
-00561 static void
-00562 vWriteOptions(void)
-00563 {
-00564         FILE    *pFile;
-00565         char    *szOptionsFile;
-00566 
-00567         TRACE_MSG("vWriteOptions");
-00568 
-00569         szOptionsFile = getenv("AntiWord$ChoicesSave");
-00570         if (szOptionsFile == NULL) {
-00571                 werr(0, "Warning: Name of the Choices file not found");
-00572                 return;
-00573         }
-00574         if (!bMakeDirectory(szOptionsFile)) {
-00575                 werr(0,
-00576                 "Warning: I can't make a directory for the Choices file");
-00577                 return;
-00578         }
-00579         pFile = fopen(szOptionsFile, "w");
-00580         if (pFile == NULL) {
-00581                 werr(0, "Warning: I can't write the Choices file");
-00582                 return;
-00583         }
-00584         (void)fprintf(pFile, PARAGRAPH_BREAK"\n",
-00585                 tOptionsCurr.iParagraphBreak);
-00586         (void)fprintf(pFile, AUTOFILETYPE"\n",
-00587                 tOptionsCurr.bAutofiletypeAllowed);
-00588         (void)fprintf(pFile, USE_OUTLINEFONTS"\n",
-00589                 tOptionsCurr.eConversionType == conversion_text ? 0 : 1);
-00590         (void)fprintf(pFile, SHOW_IMAGES"\n",
-00591                 tOptionsCurr.eImageLevel == level_no_images ? 0 : 1);
-00592         (void)fprintf(pFile, HIDE_HIDDEN_TEXT"\n",
-00593                 tOptionsCurr.bHideHiddenText);
-00594         (void)fprintf(pFile, SCALE_FACTOR_START"\n",
-00595                 tOptionsCurr.iScaleFactor);
-00596         (void)fclose(pFile);
-00597 } /* end of vWriteOptions */
-00598 
-00599 /*
-00600  * vChoicesOpenAction - action to be taken when the Choices window opens
-00601  */
-00602 void
-00603 vChoicesOpenAction(window_handle tWindow)
-00604 {
-00605         TRACE_MSG("vChoicesOpenAction");
-00606 
-00607         tOptionsTemp = tOptionsCurr;
-00608         if (tOptionsTemp.iParagraphBreak == 0) {
-00609                 vUpdateRadioButton(tWindow, CHOICES_BREAK_BUTTON, FALSE);
-00610                 vUpdateRadioButton(tWindow, CHOICES_NO_BREAK_BUTTON, TRUE);
-00611                 vUpdateWriteableNumber(tWindow, CHOICES_BREAK_WRITEABLE,
-00612                                         DEFAULT_SCREEN_WIDTH);
-00613         } else {
-00614                 vUpdateRadioButton(tWindow, CHOICES_BREAK_BUTTON, TRUE);
-00615                 vUpdateRadioButton(tWindow, CHOICES_NO_BREAK_BUTTON, FALSE);
-00616                 vUpdateWriteableNumber(tWindow,
-00617                         CHOICES_BREAK_WRITEABLE,
-00618                         tOptionsTemp.iParagraphBreak);
-00619         }
-00620         vUpdateRadioButton(tWindow, CHOICES_AUTOFILETYPE_BUTTON,
-00621                                         tOptionsTemp.bAutofiletypeAllowed);
-00622         vUpdateRadioButton(tWindow, CHOICES_HIDDEN_TEXT_BUTTON,
-00623                                         tOptionsTemp.bHideHiddenText);
-00624         if (tOptionsTemp.eConversionType == conversion_draw) {
-00625                 vUpdateRadioButton(tWindow,
-00626                         CHOICES_WITH_IMAGES_BUTTON,
-00627                         tOptionsTemp.eImageLevel != level_no_images);
-00628                 vUpdateRadioButton(tWindow,
-00629                         CHOICES_NO_IMAGES_BUTTON,
-00630                         tOptionsTemp.eImageLevel == level_no_images);
-00631                 vUpdateRadioButton(tWindow,
-00632                         CHOICES_TEXTONLY_BUTTON, FALSE);
-00633         } else {
-00634                 vUpdateRadioButton(tWindow,
-00635                         CHOICES_WITH_IMAGES_BUTTON, FALSE);
-00636                 vUpdateRadioButton(tWindow,
-00637                         CHOICES_NO_IMAGES_BUTTON, FALSE);
-00638                 vUpdateRadioButton(tWindow,
-00639                         CHOICES_TEXTONLY_BUTTON, TRUE);
-00640         }
-00641         vUpdateWriteableNumber(tWindow,
-00642                 CHOICES_SCALE_WRITEABLE, tOptionsTemp.iScaleFactor);
-00643         TRACE_MSG("end of vChoicesOpenAction");
-00644 } /* end of vChoicesOpenAction */
-00645 
-00646 /*
-00647  * vDefaultButtonAction - action when the default button is clicked
-00648  */
-00649 static void
-00650 vDefaultButtonAction(window_handle tWindow)
-00651 {
-00652         TRACE_MSG("vDefaultButtonAction");
-00653 
-00654         tOptionsTemp = tOptionsDefault;
-00655         vUpdateRadioButton(tWindow, CHOICES_BREAK_BUTTON, TRUE);
-00656         vUpdateRadioButton(tWindow, CHOICES_NO_BREAK_BUTTON, FALSE);
-00657         vUpdateWriteableNumber(tWindow, CHOICES_BREAK_WRITEABLE,
-00658                         tOptionsTemp.iParagraphBreak);
-00659         vUpdateRadioButton(tWindow, CHOICES_AUTOFILETYPE_BUTTON,
-00660                         tOptionsTemp.bAutofiletypeAllowed);
-00661         vUpdateRadioButton(tWindow, CHOICES_HIDDEN_TEXT_BUTTON,
-00662                         tOptionsTemp.bHideHiddenText);
-00663         vUpdateRadioButton(tWindow, CHOICES_WITH_IMAGES_BUTTON,
-00664                         tOptionsTemp.eConversionType == conversion_draw &&
-00665                         tOptionsTemp.eImageLevel != level_no_images);
-00666         vUpdateRadioButton(tWindow, CHOICES_NO_IMAGES_BUTTON,
-00667                         tOptionsTemp.eConversionType == conversion_draw &&
-00668                         tOptionsTemp.eImageLevel == level_no_images);
-00669         vUpdateRadioButton(tWindow, CHOICES_TEXTONLY_BUTTON,
-00670                         tOptionsTemp.eConversionType == conversion_text);
-00671         vUpdateWriteableNumber(tWindow, CHOICES_SCALE_WRITEABLE,
-00672                         tOptionsTemp.iScaleFactor);
-00673 } /* end of vDefaultButtonAction */
-00674 
-00675 /*
-00676  * vApplyButtonAction - action to be taken when the OK button is clicked
-00677  */
-00678 static void
-00679 vApplyButtonAction(void)
-00680 {
-00681         TRACE_MSG("vApplyButtonAction");
-00682 
-00683         tOptionsCurr = tOptionsTemp;
-00684 } /* end of vApplyButtonAction */
-00685 
-00686 /*
-00687  * vSaveButtonAction - action to be taken when the save button is clicked
-00688  */
-00689 static void
-00690 vSaveButtonAction(void)
-00691 {
-00692         TRACE_MSG("vSaveButtonAction");
-00693 
-00694         vApplyButtonAction();
-00695         vWriteOptions();
-00696 } /* end of vSaveButtonAction */
-00697 
-00698 /*
-00699  * vSetParagraphBreak - set the paragraph break to the given number
-00700  */
-00701 static void
-00702 vSetParagraphBreak(window_handle tWindow, int iNumber)
-00703 {
-00704         tOptionsTemp.iParagraphBreak = iNumber;
-00705         if (tOptionsTemp.iParagraphBreak == 0) {
-00706                 return;
-00707         }
-00708         vUpdateWriteableNumber(tWindow,
-00709                         CHOICES_BREAK_WRITEABLE,
-00710                         tOptionsTemp.iParagraphBreak);
-00711 } /* end of vSetParagraphBreak */
-00712 
-00713 /*
-00714  * vChangeParagraphBreak - change the paragraph break with the given number
-00715  */
-00716 static void
-00717 vChangeParagraphBreak(window_handle tWindow, int iNumber)
-00718 {
-00719         int     iTmp;
-00720 
-00721         iTmp = tOptionsTemp.iParagraphBreak + iNumber;
-00722         if (iTmp < MIN_SCREEN_WIDTH || iTmp > MAX_SCREEN_WIDTH) {
-00723                 /* Ignore */
-00724                 return;
-00725         }
-00726         tOptionsTemp.iParagraphBreak = iTmp;
-00727         vUpdateWriteableNumber(tWindow,
-00728                         CHOICES_BREAK_WRITEABLE,
-00729                         tOptionsTemp.iParagraphBreak);
-00730 } /* end of vChangeParagraphBreak */
-00731 
-00732 /*
-00733  * vChangeAutofiletype - invert the permission to autofiletype
-00734  */
-00735 static void
-00736 vChangeAutofiletype(window_handle tWindow)
-00737 {
-00738         tOptionsTemp.bAutofiletypeAllowed =
-00739                                 !tOptionsTemp.bAutofiletypeAllowed;
-00740         vUpdateRadioButton(tWindow,
-00741                         CHOICES_AUTOFILETYPE_BUTTON,
-00742                         tOptionsTemp.bAutofiletypeAllowed);
-00743 } /* end of vChangeAutofiletype */
-00744 
-00745 /*
-00746  * vChangeHiddenText - invert the hide/show hidden text
-00747  */
-00748 static void
-00749 vChangeHiddenText(window_handle tWindow)
-00750 {
-00751         tOptionsTemp.bHideHiddenText = !tOptionsTemp.bHideHiddenText;
-00752         vUpdateRadioButton(tWindow,
-00753                         CHOICES_HIDDEN_TEXT_BUTTON,
-00754                         tOptionsTemp.bHideHiddenText);
-00755 } /* end of vChangeHiddenText */
-00756 
-00757 /*
-00758  * vUseFontsImages - use outline fonts, show images
-00759  */
-00760 static void
-00761 vUseFontsImages(BOOL bUseOutlineFonts, BOOL bShowImages)
-00762 {
-00763         tOptionsTemp.eConversionType =
-00764                 bUseOutlineFonts ? conversion_draw : conversion_text;
-00765         tOptionsTemp.eImageLevel =
-00766                 bUseOutlineFonts && bShowImages ?
-00767                 level_default : level_no_images;
-00768 } /* end of vUseFontsImages */
-00769 
-00770 /*
-00771  * vSetScaleFactor - set the scale factor to the given number
-00772  */
-00773 static void
-00774 vSetScaleFactor(window_handle tWindow, int iNumber)
-00775 {
-00776         tOptionsTemp.iScaleFactor = iNumber;
-00777         vUpdateWriteableNumber(tWindow,
-00778                         CHOICES_SCALE_WRITEABLE,
-00779                         tOptionsTemp.iScaleFactor);
-00780 } /* end of vSetScaleFactor */
-00781 
-00782 /*
-00783  * vChangeScaleFactor - change the scale factor with the given number
-00784  */
-00785 static void
-00786 vChangeScaleFactor(window_handle tWindow, int iNumber)
-00787 {
-00788         int     iTmp;
-00789 
-00790         iTmp = tOptionsTemp.iScaleFactor + iNumber;
-00791         if (iTmp < MIN_SCALE_FACTOR || iTmp > MAX_SCALE_FACTOR) {
-00792                 /* Ignore */
-00793                 return;
-00794         }
-00795         tOptionsTemp.iScaleFactor = iTmp;
-00796         vUpdateWriteableNumber(tWindow,
-00797                         CHOICES_SCALE_WRITEABLE,
-00798                         tOptionsTemp.iScaleFactor);
-00799 } /* end of vChangeScaleFactor */
-00800 
-00801 /*
-00802  * bChoicesMouseClick - handle a mouse click in the Choices window
-00803  */
-00804 BOOL
-00805 bChoicesMouseClick(event_pollblock *pEvent, void *pvReference)
-00806 {
-00807         icon_handle     tAction;
-00808         mouse_block     *pMouse;
-00809         BOOL            bCloseWindow;
-00810 
-00811         TRACE_MSG("bChoicesMouseClick");
-00812 
-00813         fail(pEvent == NULL);
-00814         fail(pEvent->type != event_CLICK);
-00815 
-00816         pMouse = &pEvent->data.mouse;
-00817         if (!pMouse->button.data.select && !pMouse->button.data.adjust) {
-00818                 /* Not handled here */
-00819                 DBG_HEX(pMouse->button.value);
-00820                 return FALSE;
-00821         }
-00822 
-00823         /* Which action should be taken */
-00824         tAction = pMouse->icon;
-00825         if (pMouse->button.data.adjust) {
-00826                 /* The adjust button reverses the direction */
-00827                 switch (pMouse->icon) {
-00828                 case CHOICES_BREAK_UP_BUTTON:
-00829                         tAction = CHOICES_BREAK_DOWN_BUTTON;
-00830                         break;
-00831                 case CHOICES_BREAK_DOWN_BUTTON:
-00832                         tAction = CHOICES_BREAK_UP_BUTTON;
-00833                         break;
-00834                 case CHOICES_SCALE_UP_BUTTON:
-00835                         tAction = CHOICES_SCALE_DOWN_BUTTON;
-00836                         break;
-00837                 case CHOICES_SCALE_DOWN_BUTTON:
-00838                         tAction = CHOICES_SCALE_UP_BUTTON;
-00839                         break;
-00840                 default:
-00841                         break;
-00842                 }
-00843         }
-00844 
-00845         /* Actions */
-00846         bCloseWindow = FALSE;
-00847         switch (tAction) {
-00848         case CHOICES_DEFAULT_BUTTON:
-00849                 vDefaultButtonAction(pMouse->window);
-00850                 break;
-00851         case CHOICES_SAVE_BUTTON:
-00852                 vSaveButtonAction();
-00853                 break;
-00854         case CHOICES_CANCEL_BUTTON:
-00855                 bCloseWindow = TRUE;
-00856                 break;
-00857         case CHOICES_APPLY_BUTTON:
-00858                 vApplyButtonAction();
-00859                 bCloseWindow = TRUE;
-00860                 break;
-00861         case CHOICES_BREAK_BUTTON:
-00862                 vSetParagraphBreak(pMouse->window, DEFAULT_SCREEN_WIDTH);
-00863                 break;
-00864         case CHOICES_BREAK_UP_BUTTON:
-00865                 vChangeParagraphBreak(pMouse->window, 1);
-00866                 break;
-00867         case CHOICES_BREAK_DOWN_BUTTON:
-00868                 vChangeParagraphBreak(pMouse->window, -1);
-00869                 break;
-00870         case CHOICES_NO_BREAK_BUTTON:
-00871                 vSetParagraphBreak(pMouse->window, 0);
-00872                 break;
-00873         case CHOICES_AUTOFILETYPE_BUTTON:
-00874                 vChangeAutofiletype(pMouse->window);
-00875                 break;
-00876         case CHOICES_HIDDEN_TEXT_BUTTON:
-00877                 vChangeHiddenText(pMouse->window);
-00878                 break;
-00879         case CHOICES_WITH_IMAGES_BUTTON:
-00880                 vUseFontsImages(TRUE, TRUE);
-00881                 break;
-00882         case CHOICES_NO_IMAGES_BUTTON:
-00883                 vUseFontsImages(TRUE, FALSE);
-00884                 break;
-00885         case CHOICES_TEXTONLY_BUTTON:
-00886                 vUseFontsImages(FALSE, FALSE);
-00887                 break;
-00888         case CHOICES_SCALE_UP_BUTTON:
-00889                 vChangeScaleFactor(pMouse->window, 5);
-00890                 break;
-00891         case CHOICES_SCALE_DOWN_BUTTON:
-00892                 vChangeScaleFactor(pMouse->window, -5);
-00893                 break;
-00894         default:
-00895                 DBG_DEC(pMouse->icon);
-00896                 break;
-00897         }
-00898         if (bCloseWindow) {
-00899                 Error_CheckFatal(Wimp_CloseWindow(pMouse->window));
-00900         }
-00901         return TRUE;
-00902 } /* end of bChoicesMouseClick */
-00903 
-00904 /*
-00905  * bChoicesKeyPressed - handle a key in the Choices window
-00906  */
-00907 BOOL
-00908 bChoicesKeyPressed(event_pollblock *pEvent, void *pvReference)
-00909 {
-00910         icon_block      tIcon;
-00911         caret_block     *pCaret;
-00912         char            *pcChar;
-00913         int             iNumber;
-00914 
-00915         DBG_MSG("bChoicesKeyPressed");
-00916 
-00917         fail(pEvent == NULL);
-00918         fail(pEvent->type != event_KEY);
-00919 
-00920         if (pEvent->data.key.code != '\r') {
-00921                 Error_CheckFatal(Wimp_ProcessKey(pEvent->data.key.code));
-00922                 return TRUE;
-00923         }
-00924 
-00925         pCaret = &pEvent->data.key.caret;
-00926 
-00927         Error_CheckFatal(Wimp_GetIconState(pCaret->window, pCaret->icon, &tIcon));
-00928         if (!tIcon.flags.data.text || !tIcon.flags.data.indirected) {
-00929                 werr(1, "Icon %d must be indirected text", (int)pCaret->icon);
-00930         }
-00931         iNumber = (int)strtol(tIcon.data.indirecttext.buffer, &pcChar, 10);
-00932 
-00933         switch(pCaret->icon) {
-00934         case CHOICES_BREAK_WRITEABLE:
-00935                 if (*pcChar != '\0' && *pcChar != '\r') {
-00936                         DBG_DEC(*pcChar);
-00937                         iNumber = DEFAULT_SCREEN_WIDTH;
-00938                 } else if (iNumber < MIN_SCREEN_WIDTH) {
-00939                         iNumber = MIN_SCREEN_WIDTH;
-00940                 } else if (iNumber > MAX_SCREEN_WIDTH) {
-00941                         iNumber = MAX_SCREEN_WIDTH;
-00942                 }
-00943                 vSetParagraphBreak(pCaret->window, iNumber);
-00944                 break;
-00945         case CHOICES_SCALE_WRITEABLE:
-00946                 if (*pcChar != '\0' && *pcChar != '\r') {
-00947                         DBG_DEC(*pcChar);
-00948                         iNumber = DEFAULT_SCALE_FACTOR;
-00949                 } else if (iNumber < MIN_SCALE_FACTOR) {
-00950                         iNumber = MIN_SCALE_FACTOR;
-00951                 } else if (iNumber > MAX_SCALE_FACTOR) {
-00952                         iNumber = MAX_SCALE_FACTOR;
-00953                 }
-00954                 vSetScaleFactor(pCaret->window, iNumber);
-00955                 break;
-00956         default:
-00957                 DBG_DEC(pCaret->icon);
-00958                 break;
-00959         }
-00960         return TRUE;
-00961 } /* end of bChoicesKeyPressed */
-00962 #endif /* __riscos */
-
-
Generated by  - -doxygen 1.6.2
- -