Ignore:
Timestamp:
Jun 24, 1999, 10:47:40 AM (26 years ago)
Author:
sandervl
Message:

Edgar Buerkle changes to GetLocaleInfoA/W (actually an almost complete implementation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/lang.cpp

    r100 r176  
    1 /* $Id: lang.cpp,v 1.4 1999-06-10 20:47:52 phaller Exp $ */
    2 
    3 /*
    4  *
    5  * Project Odin Software License can be found in LICENSE.TXT
    6  *
    7  */
     1/* $Id: lang.cpp,v 1.5 1999-06-24 08:47:40 sandervl Exp $ */
     2
    83/*
    94 * Win32 language API functions for OS/2
     
    116 * Copyright 1998 Sander van Leeuwen
    127 * Copyright 1998 Patrick Haller
     8 *
     9 *
     10 * Project Odin Software License can be found in LICENSE.TXT
    1311 *
    1412 */
    1513#include <os2win.h>
    1614#include <winnls.h>
     15#include <stdlib.h>
     16#include <string.h>
     17#include <winos2def.h>
    1718#include "unicode.h"
    1819
     
    5455}
    5556//******************************************************************************
    56 //TODO: Not complete (far from actually)!!
    57 //******************************************************************************
    58 int WIN32API GetLocaleInfoA(LCID lcid, LCTYPE LCType, LPSTR lpLCData, int cchData)
    59 {
     57//******************************************************************************
     58int WIN32API GetLocaleInfoA(LCID lcid, LCTYPE LCType, LPSTR buf, int len)
     59{
     60  COUNTRYCODE  Country    = {0};
     61  COUNTRYINFO  CtryInfo   = {0};
     62  ULONG        ulInfoLen  = 0;
     63
    6064  dprintf(("KERNEL32:  OS2GetLocaleInfoA: Not complete!\n"));
    61   if(cchData == 0)
    62         return(1);
    63   *lpLCData = '1';
    64   return(1);
    65 }
    66 //******************************************************************************
    67 //******************************************************************************
    68 int WIN32API GetLocaleInfoW(LCID lcid, LCTYPE LCType, LPWSTR lpLCData, int cchData)
    69 {
    70   dprintf(("KERNEL32:  OS2GetLocaleInfoA: Not complete!\n"));
    71   if(cchData == 0)
    72         return(1*sizeof(USHORT));
    73   *lpLCData = (USHORT)'1';
    74   return(sizeof(USHORT));
     65  if (len && (! buf) )
     66  {
     67    SetLastError(ERROR_INSUFFICIENT_BUFFER);
     68    return 0;
     69  }
     70  // Only standard. TODO: Use os2.ini PM_National section
     71  DosQueryCtryInfo(sizeof(CtryInfo), &Country, &CtryInfo, &ulInfoLen);
     72
     73  LCType &= ~(LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP);
     74
     75  switch(LCType)
     76  {
     77    case LOCALE_SDECIMAL:
     78      *buf = CtryInfo.szDecimal[0];
     79      return 1;
     80    case LOCALE_SDATE:
     81      *buf = CtryInfo.szDateSeparator[0];
     82      return 1;
     83    case LOCALE_STIME:
     84      *buf = CtryInfo.szTimeSeparator[0];
     85      return 1;
     86    case LOCALE_STHOUSAND:
     87      *buf = CtryInfo.szThousandsSeparator[0];
     88      return 1;
     89    case LOCALE_SCURRENCY:
     90      if(len > strlen(CtryInfo.szCurrency))
     91      {
     92        strcpy(buf, CtryInfo.szCurrency);
     93        return (strlen(buf) + 1);
     94      }
     95      else
     96        break;
     97    case LOCALE_SSHORTDATE:
     98      if(CtryInfo.fsDateFmt == 0)
     99      {
     100        if(len > 8)
     101        {
     102          strcpy(buf, "MMXddXyy");
     103          buf[2] = buf[5] = CtryInfo.szDateSeparator[0];
     104          return 9;
     105        }
     106        else
     107          break;
     108      }
     109      else if(CtryInfo.fsDateFmt == 1)
     110      {
     111        if(len > 8)
     112        {
     113          strcpy(buf, "ddXMMXyy");
     114          buf[2] = buf[5] = CtryInfo.szDateSeparator[0];
     115          return 9;
     116        }
     117        else
     118          break;
     119      }
     120      else /* if(CtryInfo.fsDateFmt == 2) */
     121      {
     122        if(len > 8)
     123        {
     124          strcpy(buf, "yyXMMXdd");
     125          buf[2] = buf[5] = CtryInfo.szDateSeparator[0];
     126          return 9;
     127        }
     128        else
     129          break;
     130      }
     131    case LOCALE_STIMEFORMAT:
     132      if(CtryInfo.fsTimeFmt == 0)
     133      {
     134        if(len > 8)
     135        {
     136          strcpy(buf, "HHXmmXss");
     137          buf[2] = buf[5] = CtryInfo.szTimeSeparator[0];
     138          return 9;
     139        }
     140        else
     141          break;
     142      }
     143      else /* if(CtryInfo.fsTimeFmt == 1) */
     144      {
     145        if(len > 8)
     146        {
     147          strcpy(buf, "HHXmmXss");
     148          buf[2] = buf[5] = CtryInfo.szTimeSeparator[0];
     149          return 9;
     150        }
     151        else
     152          break;
     153      }
     154    case LOCALE_S1159:
     155      if(CtryInfo.fsTimeFmt == 0)
     156      {
     157        if(len > 2)
     158        {
     159          strcpy(buf, "AM");
     160          return 3;
     161        }
     162        else
     163          break;
     164      }
     165      *buf = 0;
     166      return 1;
     167    case LOCALE_S2359:
     168      if(CtryInfo.fsTimeFmt == 0)
     169      {
     170        if(len > 2)
     171        {
     172          strcpy(buf, "PM");
     173          return 3;
     174        }
     175        else
     176          break;
     177      }
     178      *buf = 0;
     179      return 1;
     180/***
     181    LOCALE_SABBREVMONTHNAME11:
     182    LOCALE_SABBREVMONTHNAME12:
     183    LOCALE_SABBREVMONTHNAME13:
     184    LOCALE_SPOSITIVESIGN:
     185    LOCALE_SNEGATIVESIGN:
     186    LOCALE_IPOSSIGNPOSN:
     187    LOCALE_INEGSIGNPOSN:
     188    LOCALE_IPOSSYMPRECEDES:
     189    LOCALE_IPOSSEPBYSPACE:
     190    LOCALE_INEGSYMPRECEDES:
     191    LOCALE_INEGSEPBYSPACE:
     192    LOCALE_FONTSIGNATURE:
     193    LOCALE_SISO639LANGNAME:
     194    LOCALE_SISO3166CTRYNAME:
     195***/
     196    default:
     197      dprintf(("KERNEL32:  OS2GetLocaleInfoA: LCType %d not yet supported\n", LCType));
     198      *buf = '1';
     199      return(1);
     200  }
     201
     202  // a 'break' in 'switch(LCType)': buffer too small
     203  SetLastError(ERROR_INSUFFICIENT_BUFFER);
     204  return 0;
     205
     206}
     207//******************************************************************************
     208//******************************************************************************
     209int WIN32API GetLocaleInfoW(LCID lcid, LCTYPE LCType, LPWSTR wbuf, int len)
     210{
     211  WORD wlen;
     212  char *abuf;
     213
     214  dprintf(("KERNEL32:  OS2GetLocaleInfoW\n"));
     215  if (len && (! wbuf) )
     216  {
     217    SetLastError(ERROR_INSUFFICIENT_BUFFER);
     218    return 0;
     219  }
     220  abuf = (char *) malloc(len);
     221  wlen = GetLocaleInfoA(lcid, LCType, abuf, len);
     222
     223  if (wlen && len)  // no check of wbuf length !!
     224    AsciiToUnicodeN(abuf, wbuf, wlen);
     225
     226  free(abuf);
     227  return wlen;
    75228}
    76229//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.