Ignore:
Timestamp:
Jul 5, 2002, 9:13:36 AM (23 years ago)
Author:
umoeller
Message:

Second round of fixes for 0.9.19.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/helpers/nls.c

    r174 r184  
    8585
    8686BOOL        G_afLeadByte[MAX_LEADBYTE] = {0};
    87 ULONG       G_fDBCS = -1;       // not queried yet
     87ULONG       G_fDBCS = 2;       // not queried yet
    8888COUNTRYCODE G_cc = { 0, 0 };
    8989DBCSVECTOR  G_aDBCSVector[8];
     
    9494 *
    9595 *@@added V0.9.19 (2002-06-13) [umoeller]
     96 *@@changed V0.9.20 (2002-07-03) [umoeller]: fixed, this never worked
    9697 */
    9798
    9899BOOL nlsDBCS(VOID)
    99100{
    100     int i;
    101 
    102     if (G_fDBCS != -1)
     101    APIRET arc;
     102
     103    if (G_fDBCS != 2)
    103104        // already queried:
    104105        return G_fDBCS;
    105106
    106     if (DosQueryDBCSEnv(8 * sizeof(DBCSVECTOR),
    107                         &G_cc,
    108                         (PCHAR)G_aDBCSVector))
     107    // V0.9.20 (2002-07-03) [umoeller]
     108    // assume a non-DBCS system UNLESS the below
     109    // loop gives us something meaningful; even
     110    // on non-DBCS systems like mine, DosQueryDBCSEnv
     111    // does not return an error
     112    G_fDBCS = FALSE;
     113
     114    if (arc = DosQueryDBCSEnv(8 * sizeof(DBCSVECTOR),
     115                              &G_cc,
     116                              (PCHAR)G_aDBCSVector))
     117    {
    109118        // not DBCS:
    110         return (G_fDBCS = FALSE);
    111 
    112     for (i = 0;
    113          i < 8;
    114          ++i)
    115     {
    116         if (    (G_aDBCSVector[i].bLow)
    117              && (G_aDBCSVector[i].bHigh)
    118            )
     119        _PmpfF(("DosQueryDBCSEnv returned arc %d", arc));
     120    }
     121    else
     122    {
     123        int i;
     124        for (i = 0;
     125             i < 8;
     126             ++i)
    119127        {
    120             int n;
    121             for (n = G_aDBCSVector[i].bLow;
    122                  n <= G_aDBCSVector[i].bHigh;
    123                  ++n)
    124                 G_afLeadByte[n] = TRUE;
    125             G_fDBCS = TRUE;
     128            if (    (G_aDBCSVector[i].bLow)
     129                 && (G_aDBCSVector[i].bHigh)
     130               )
     131            {
     132                int n;
     133                for (n = G_aDBCSVector[i].bLow;
     134                     n <= G_aDBCSVector[i].bHigh;
     135                     ++n)
     136                    G_afLeadByte[n] = TRUE;
     137                G_fDBCS = TRUE;
     138            }
     139            else
     140                break;
    126141        }
    127         else
    128             break;
    129142    }
    130143
     
    342355 *
    343356 *      Use nlsThousandsDouble for "double" values.
     357 *
     358 *@@changed V0.9.20 (2002-07-03) [umoeller]: optimized
    344359 */
    345360
     
    350365    USHORT ust, uss, usc;
    351366    CHAR   szTemp[40];
    352     sprintf(szTemp, "%lu", ul);
     367    usc = sprintf(szTemp, "%lu", ul);  // V0.9.20 (2002-07-03) [umoeller]
    353368
    354369    ust = 0;
    355     usc = strlen(szTemp);
     370    // usc = strlen(szTemp);
    356371    for (uss = 0; uss < usc; uss++)
    357372    {
     
    367382    pszTarget[ust] = '\0';
    368383
    369     return (pszTarget);
     384    return pszTarget;
    370385}
    371386
     
    382397                                CHAR cThousands)     // in: separator char (e.g. '.')
    383398{
    384     return (nlsThousandsULong(pszTarget, ul, cThousands));
     399    return nlsThousandsULong(pszTarget, ul, cThousands);
    385400}
    386401
     
    389404 *      like nlsThousandsULong, but for a "double"
    390405 *      value. Note that after-comma values are truncated.
     406 *
     407 *@@changed V0.9.20 (2002-07-03) [umoeller]: optimized
    391408 */
    392409
     
    397414    USHORT ust, uss, usc;
    398415    CHAR   szTemp[40];
    399     sprintf(szTemp, "%.0f", floor(dbl));
     416    usc = sprintf(szTemp, "%.0f", floor(dbl)); // V0.9.20 (2002-07-03) [umoeller]
    400417
    401418    ust = 0;
    402     usc = strlen(szTemp);
     419    // usc = strlen(szTemp);
    403420    for (uss = 0; uss < usc; uss++)
    404421    {
     
    414431    pszTarget[ust] = '\0';
    415432
    416     return (pszTarget);
     433    return pszTarget;
    417434}
    418435
     
    424441 *
    425442 *@@added V0.9.6 (2000-11-12) [pr]
     443 *@@changed V0.9.20 (2002-07-03) [umoeller]: now using PCSZ pcszUnits
    426444 */
    427445
    428446PSZ nlsVariableDouble(PSZ pszTarget,
    429447                      double dbl,
    430                       PSZ pszUnits,
     448                      PCSZ pcszUnits,
    431449                      CHAR cThousands)
    432450{
    433451    if (dbl < 100.0)
    434         sprintf(pszTarget, "%.2f%s", dbl, pszUnits);
     452        sprintf(pszTarget, "%.2f%s", dbl, pcszUnits);
    435453    else
    436454        if (dbl < 1000.0)
    437             sprintf(pszTarget, "%.1f%s", dbl, pszUnits);
     455            sprintf(pszTarget, "%.1f%s", dbl, pcszUnits);
    438456        else
    439457            strcat(nlsThousandsDouble(pszTarget, dbl, cThousands),
    440                    pszUnits);
    441 
    442     return(pszTarget);
     458                   pcszUnits);
     459
     460    return pszTarget;
    443461}
    444462
     
    700718            cc.country = 0;         // use system country code
    701719            cc.codepage = 0;        // use process default codepage
    702             return (DosMapCase(ulLength,
    703                                &cc,
    704                                psz));
     720            return DosMapCase(ulLength,
     721                              &cc,
     722                              psz);
    705723        }
    706724    }
    707725
    708     return (ERROR_INVALID_PARAMETER);
    709 }
    710 
    711 
     726    return ERROR_INVALID_PARAMETER;
     727}
     728
     729
Note: See TracChangeset for help on using the changeset viewer.