#include <ctype.h>
#include <stdio.h>

#include <general.h>
#include <stringtools.h>
#include <charsettools.h>

int stringcasecmp(const std::string &a, const std::string &b)
 {
  return stricmp(a.c_str(), b.c_str());
 }

void ibm2ascii(std::string &s)
 {
  std::string new_s;

  new_s.reserve(s.size());

  for(unsigned i=0; i<s.size(); i++)
   {
    char ch=s[i];

    if(ch>=0 && ch<126)
     {
      if(ch>=' ') new_s+=ch;
     }
    else
     {
      switch(ch)
       {
       case '': new_s+="ae"; break;
       case '': new_s+="oe"; break;
       case '': new_s+="ue"; break;
       case '': new_s+="ss"; break;

       case '': 
        new_s+='A';
        new_s+=islower(s[i+1])?'e':'E';
        break;

       case '':
        new_s+='O';
        new_s+=islower(s[i+1])?'e':'E';
        break;

       case '':
        new_s+='U';
        new_s+=islower(s[i+1])?'e':'E';
        break;

       default:
        break;
       }
     }
   }

  s=new_s;
 }

void iso2ascii(std::string &s)
 {
  std::string new_s;

  new_s.reserve(s.size());

  for(unsigned i=0; i<s.size(); i++)
   {
    char ch=s[i];

    if(ch>=0 && ch<126)
     {
      if(ch>=' ') new_s+=ch;
     }
    else
     {
      switch(ch)
       {
       case '': new_s+="ae"; break;
       case '': new_s+="oe"; break;
       case '': new_s+="ue"; break;
       case '': new_s+="ss"; break;

       case '':
        new_s+='A';
        new_s+=islower(s[i+1])?'e':'E';
        break;

       case '':
        new_s+='O';
        new_s+=islower(s[i+1])?'e':'E';
        break;

       case '':
        new_s+='U';
        new_s+=islower(s[i+1])?'e':'E';
        break;

       default:
        break;
       }
     }
   }
 }

void ibm2iso(std::string &s)
 {
  for(unsigned i=0; i<s.size(); i++)
    ibm2iso(&s[i], 1);
 }

void iso2ibm(std::string &s)
 {
  for(unsigned i=0; i<s.size(); i++)
    iso2ibm(&s[i], 1);
 }

void upstring(std::string &s)
 {
  for(unsigned i=0; i<s.size(); i++)
   {
    register char ch=s[i];
    if(isascii(ch) && islower(ch))
      s[i]=toupper(ch);
   }
 }

std::string up_string(const std::string &_s)
 {
  std::string s=_s;
  upstring(s);
  return s;
 }

void dnstring(std::string &s)
 {
  for(unsigned i=0; i<s.size(); i++)
   {
    register char ch=s[i];
    if(isascii(ch) && isupper(ch))
      s[i]=tolower(ch);
   }
 }

std::string dn_string(const std::string &_s)
 {
  std::string s=_s;
  dnstring(s);
  return s;
 }

bool check_joker(const std::string &mask, const std::string &filename,
                 bool casei)
 {
  return checkjoker(mask.c_str(), filename.c_str(), casei);
 }

std::string i2string(unsigned i)
 {
  char tempstr[TEXTLEN];
  snprintf(tempstr, TEXTLEN, "%u", i);
  return std::string(tempstr);
 }

std::string i2string(dword i)
 {
  char tempstr[TEXTLEN];
  snprintf(tempstr, TEXTLEN, "%lu", i);
  return std::string(tempstr);
 }

std::string i2string(signed i)
 {
  char tempstr[TEXTLEN];
  snprintf(tempstr, TEXTLEN, "%d", i);
  return std::string(tempstr);
 }


syntax highlighted by Code2HTML, v. 0.9.1