/*
  Simple DirectMedia Layer
  Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.
*/

#define INCL_DOSNLS
#define INCL_DOSERRORS
#include <os2.h>
#include <string.h>
#include <ctype.h>

#include "os2cp.h"

typedef struct _CP2NAME {
  ULONG		ulCode;
  PSZ		pszName;
} CP2NAME;

typedef struct _NAME2CP {
  PSZ		pszName;
  ULONG		ulCode;
} NAME2CP;

static CP2NAME		aCP2Name[] =
{
  {367, "ANSI_X3.4-1968"},
  {813, "ECMA-118"},
  {819, "CP819"},
  {850, "850"},
  {862, "862"},
  {866, "866"},
  {874, "ISO-IR-166"},
  {878, "KOI8-R"},
  {896, "JISX0201-1976"},
  {901, "ISO-8859-13"},
  {912, "ISO-8859-2"},
  {913, "ISO-8859-3"},
  {914, "ISO-8859-4"},
  {915, "CYRILLIC"},
  {920, "ISO-8859-9"},
  {923, "ISO-8859-15"},
  {943, "MS_KANJI"},
  {954, "EUC-JP"},
  {964, "EUC-TW"},
  {970, "EUC-KR"},
  {1051, "HP-ROMAN8"},
  {1089, "ARABIC"},
  {1129, "VISCII"},
  {1168, "KOI8-U"},
  {1200, "ISO-10646-UCS-2"},
  {1202, "UTF-16LE"},
  {1204, "UCS-2BE"},
  {1208, "UTF-8"},
  {1232, "UTF-32BE"},
  {1234, "UTF-32LE"},
  {1236, "ISO-10646-UCS-4"},
  {1250, "CP1250"},
  {1251, "CP1251"},
  {1252, "CP1252"},
  {1253, "CP1253"},
  {1254, "CP1254"},
  {1255, "CP1255"},
  {1256, "CP1256"},
  {1257, "CP1257"},
  {1275, "MAC"},
  {1383, "CN-GB"},
  {1386, "GBK"},
  {1392, "GB18030"},
  {62210, "HEBREW"}
};

static NAME2CP		aName2CP[] =
{
  {"850", 850},
  {"862", 862},
  {"866", 866},
  {"ANSI_X3.4-1968", 367},
  {"ANSI_X3.4-1986", 367},
  {"ARABIC", 1089},
  {"ASCII", 367},
  {"ASMO-708", 1089},
  {"CN-GB", 1383},
  {"CP1250", 1250},
  {"CP1251", 1251},
  {"CP1252", 1252},
  {"CP1253", 1253},
  {"CP1254", 1254},
  {"CP1255", 1255},
  {"CP1256", 1256},
  {"CP1257", 1257},
  {"CP367", 367},
  {"CP819", 819},
  {"CP850", 850},
  {"CP862", 862},
  {"CP866", 866},
  {"CP936", 1386},
  {"CSASCII", 367},
  {"CSEUCKR", 970},
  {"CSEUCPKDFMTJAPANESE", 954},
  {"CSEUCTW", 964},
  {"CSGB2312", 1383},
  {"CSHALFWIDTHKATAKANA", 896},
  {"CSHPROMAN8", 1051},
  {"CSIBM866", 866},
  {"CSISOLATIN1", 819},
  {"CSISOLATIN2", 912},
  {"CSISOLATIN3", 913},
  {"CSISOLATIN4", 914},
  {"CSISOLATIN5", 920},
  {"CSISOLATINARABIC", 1089},
  {"CSISOLATINCYRILLIC", 915},
  {"CSISOLATINGREEK", 813},
  {"CSISOLATINHEBREW", 62210},
  {"CSKOI8R", 878},
  {"CSKSC56011987", 970},
  {"CSMACINTOSH", 1275},
  {"CSPC850MULTILINGUAL", 850},
  {"CSPC862LATINHEBREW", 862},
  {"CSSHIFTJIS", 943},
  {"CSUCS4", 1236},
  {"CSUNICODE", 1200},
  {"CSUNICODE11", 1204},
  {"CSVISCII", 1129},
  {"CYRILLIC", 915},
  {"ECMA-114", 1089},
  {"ECMA-118", 813},
  {"ELOT_928", 813},
  {"EUC-CN", 1383},
  {"EUC-JP", 954},
  {"EUC-KR", 970},
  {"EUC-TW", 964},
  {"EUCCN", 1383},
  {"EUCJP", 954},
  {"EUCKR", 970},
  {"EUCTW", 964},
  {"EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", 954},
  {"GB18030", 1392},
  {"GB2312", 1383},
  {"GBK", 1386},
  {"GREEK", 813},
  {"GREEK8", 813},
  {"HEBREW", 62210},
  {"HP-ROMAN8", 1051},
  {"IBM367", 367},
  {"IBM819", 819},
  {"IBM850", 850},
  {"IBM862", 862},
  {"IBM866", 866},
  {"ISO-10646-UCS-2", 1200},
  {"ISO-10646-UCS-4", 1236},
  {"ISO-8859-1", 819},
  {"ISO-8859-13", 901},
  {"ISO-8859-15", 923},
  {"ISO-8859-2", 912},
  {"ISO-8859-3", 913},
  {"ISO-8859-4", 914},
  {"ISO-8859-5", 915},
  {"ISO-8859-6", 1089},
  {"ISO-8859-7", 813},
  {"ISO-8859-8", 62210},
  {"ISO-8859-9", 920},
  {"ISO-IR-100", 819},
  {"ISO-IR-101", 912},
  {"ISO-IR-109", 913},
  {"ISO-IR-110", 914},
  {"ISO-IR-126", 813},
  {"ISO-IR-127", 1089},
  {"ISO-IR-138", 62210},
  {"ISO-IR-144", 915},
  {"ISO-IR-148", 920},
  {"ISO-IR-149", 970},
  {"ISO-IR-166", 874},
  {"ISO-IR-179", 901},
  {"ISO-IR-203", 923},
  {"ISO-IR-6", 367},
  {"ISO646-US", 367},
  {"ISO8859-1", 819},
  {"ISO8859-13", 901},
  {"ISO8859-15", 923},
  {"ISO8859-2", 912},
  {"ISO8859-3", 913},
  {"ISO8859-4", 914},
  {"ISO8859-5", 915},
  {"ISO8859-6", 1089},
  {"ISO8859-7", 813},
  {"ISO8859-8", 62210},
  {"ISO8859-9", 920},
  {"ISO_646.IRV:1991", 367},
  {"ISO_8859-1", 819},
  {"ISO_8859-13", 901},
  {"ISO_8859-15", 923},
  {"ISO_8859-15:1998", 923},
  {"ISO_8859-1:1987", 819},
  {"ISO_8859-2", 912},
  {"ISO_8859-2:1987", 912},
  {"ISO_8859-3", 913},
  {"ISO_8859-3:1988", 913},
  {"ISO_8859-4", 914},
  {"ISO_8859-4:1988", 914},
  {"ISO_8859-5", 915},
  {"ISO_8859-5:1988", 915},
  {"ISO_8859-6", 1089},
  {"ISO_8859-6:1987", 1089},
  {"ISO_8859-7", 813},
  {"ISO_8859-7:1987", 813},
  {"ISO_8859-7:2003", 813},
  {"ISO_8859-8", 62210},
  {"ISO_8859-8:1988", 62210},
  {"ISO_8859-9", 920},
  {"ISO_8859-9:1989", 920},
  {"JISX0201-1976", 896},
  {"JIS_X0201", 896},
  {"KOI8-R", 878},
  {"KOI8-U", 1168},
  {"KOREAN", 970},
  {"KSC_5601", 970},
  {"KS_C_5601-1987", 970},
  {"KS_C_5601-1989", 970},
  {"L1", 819},
  {"L2", 912},
  {"L3", 913},
  {"L4", 914},
  {"L5", 920},
  {"L7", 901},
  {"LATIN-9", 923},
  {"LATIN1", 819},
  {"LATIN2", 912},
  {"LATIN3", 913},
  {"LATIN4", 914},
  {"LATIN5", 920},
  {"LATIN7", 901},
  {"MAC", 1275},
  {"MACINTOSH", 1275},
  {"MACROMAN", 1275},
  {"MS-ANSI", 1252},
  {"MS-ARAB", 1256},
  {"MS-CYRL", 1251},
  {"MS-EE", 1250},
  {"MS-GREEK", 1253},
  {"MS-HEBR", 1255},
  {"MS-TURK", 1254},
  {"MS936", 1386},
  {"MS_KANJI", 943},
  {"R8", 1051},
  {"ROMAN8", 1051},
  {"SHIFT-JIS", 943},
  {"SHIFT_JIS", 943},
  {"SJIS", 943},
  {"TIS-620", 874},
  {"TIS620", 874},
  {"TIS620-0", 874},
  {"TIS620.2529-1", 874},
  {"TIS620.2533-0", 874},
  {"TIS620.2533-1", 874},
  {"UCS-2", 1200},
  {"UCS-2BE", 1204},
  {"UCS-4", 1236},
  {"UNICODE-1-1", 1204},
  {"UNICODEBIG", 1204},
  {"US", 367},
  {"US-ASCII", 367},
  {"UTF-16", 1204},
  {"UTF-16BE", 1200},
  {"UTF-16LE", 1202},
  {"UTF-32", 1236},
  {"UTF-32BE", 1232},
  {"UTF-32LE", 1234},
  {"UTF-8", 1208},
  {"VISCII", 1129},
  {"VISCII1.1-1", 1129},
  {"WINBALTRIM", 1257},
  {"WINDOWS-1250", 1250},
  {"WINDOWS-1251", 1251},
  {"WINDOWS-1252", 1252},
  {"WINDOWS-1253", 1253},
  {"WINDOWS-1254", 1254},
  {"WINDOWS-1255", 1255},
  {"WINDOWS-1256", 1256},
  {"WINDOWS-1257", 1257},
  {"WINDOWS-936", 1386},
  {"X0201", 896}
};

char * os2cpToName(unsigned long cp)
{
  ULONG		ulLo = 0;
  ULONG		ulHi = ( sizeof(aCP2Name) / sizeof(struct _CP2NAME) ) - 1;
  ULONG		ulNext;
  LONG		lFound = -1;

  if ( cp == SYSTEM_CP )
  {
    ULONG	aulCP[3];
    ULONG	cCP;

    if ( DosQueryCp( sizeof(aulCP), aulCP, &cCP ) != NO_ERROR )
      return NULL;

    cp = aulCP[0];
  }

  if ( ( aCP2Name[0].ulCode > cp ) || ( aCP2Name[ulHi].ulCode < cp ) )
    return NULL;

  if ( aCP2Name[0].ulCode == cp )
    return aCP2Name[0].pszName;

  if ( aCP2Name[ulHi].ulCode == cp )
    return aCP2Name[ulHi].pszName;

  while( ( ulHi - ulLo ) > 1 )
  {
    ulNext = ( ulLo + ulHi ) / 2;

    if ( aCP2Name[ulNext].ulCode < cp )
      ulLo = ulNext;
    else if ( aCP2Name[ulNext].ulCode > cp )
      ulHi = ulNext;
    else
    {
      lFound = ulNext;
      break;
    }
  }

  return lFound == -1 ? NULL : aCP2Name[lFound].pszName;
}

unsigned long os2cpFromName(char *cp)
{
  ULONG		ulLo = 0;
  ULONG		ulHi = ( sizeof(aName2CP) / sizeof(struct _NAME2CP) ) - 1;
  ULONG		ulNext;
  LONG		lFound = -1;
  LONG		lCmp;
  PCHAR		pcEnd;
  CHAR		acBuf[64];

  if ( cp == NULL )
  {
    ULONG	aulCP[3];
    ULONG	cCP;

    return DosQueryCp( sizeof(aulCP), aulCP, &cCP ) != NO_ERROR ? 0 : aulCP[0];
  }

  while( isspace( *cp ) ) cp++;
  pcEnd = strchr( cp, ' ' );
  if ( pcEnd == NULL )
    pcEnd = strchr( cp, '\0' );

  ulNext = pcEnd - cp;
  if ( ulNext >= sizeof(acBuf) )
    return 0;
  
  memcpy( acBuf, cp, ulNext );
  acBuf[ulNext] = '\0';
  strupr( acBuf ); 

  lCmp = strcmp( aName2CP[0].pszName, acBuf );
  if ( lCmp > 0 )
    return 0;
  else if ( lCmp == 0 )
    return aName2CP[0].ulCode;

  lCmp = strcmp( aName2CP[ulHi].pszName, acBuf );
  if ( lCmp < 0 )
    return 0;
  else if ( lCmp == 0 )
    return aName2CP[ulHi].ulCode;

  while( ( ulHi - ulLo ) > 1 )
  {
    ulNext = ( ulLo + ulHi ) / 2;

    lCmp = strcmp( aName2CP[ulNext].pszName, acBuf );
    if ( lCmp < 0 )
      ulLo = ulNext;
    else if ( lCmp > 0 )
      ulHi = ulNext;
    else
    {
      lFound = ulNext;
      break;
    }
  }

  return lFound == -1 ? 0 : aName2CP[lFound].ulCode;
}
