Код:
char* Decode_DOS_to_Win(char * str)
{
unsigned char *cstr=str; // "unsigned" - чтоб избежать предупреждений комп-ра
for(; *cstr; cstr++)
{
if(*cstr<128) continue; // не фиг топтаться дальше, если не нужно конвертить!
if(*cstr>=128 && *cstr<=175)
*cstr+=64;
else if(*cstr>=224 && *cstr<=239)
*cstr+=16;
else if(*cstr==252) // №
*cstr=185;
else if(*cstr==240) // Ё, Е с двумя точками - Йо
*cstr=168;
else if(*cstr==241) // Ё, е с двумя точками - йо
*cstr=184;
else if(*cstr==242) // Є, украинское Йе
*cstr=170;
else if(*cstr==243) // є, украинское йе
*cstr=186;
else if(*cstr==244) // Ї, украинское Йи
*cstr=175;
else if(*cstr==245) // ї, украинское йи
*cstr=191;
else if(*cstr==246) // Ў, беларусская У с хвостиком вверху - незнаю, как читается
*cstr=161;
else if(*cstr==247) // ў, беларусская У с хвостиком вверху - незнаю, как читается
*cstr=162;
else if(*cstr==248) // знак градуса
*cstr=176;
else if(*cstr==250) // маленькая центровая точка
*cstr=183;
else
*cstr='?'; // некий символ, которым заменять несуществующие в CP1251
}
return str;
}
//----------------------------------------------------
char* Decode_Win_to_DOS(char * str)
{
unsigned char *cstr=str;
for(;*cstr;cstr++)
{
if(*cstr<128) continue; // не фиг топтаться дальше, если не нужно конвертить!
if(*cstr>=240)
*cstr-=16;
else if(*cstr>=192)
*cstr-=64;
else if(*cstr==185) // №
*cstr=252;
else if(*cstr==168) // Ё, Е с двумя точками - Йо
*cstr=240;
else if(*cstr==184) // Ё, е с двумя точками - йо
*cstr=241;
else if(*cstr==170) // Є, украинское Йе
*cstr=242;
else if(*cstr==186) // є, украинское йе
*cstr=243;
else if(*cstr==175) // Ї, украинское Йи
*cstr=244;
else if(*cstr==191) // ї, украинское йи
*cstr=245;
else if(*cstr==178) // I, украинское И
*cstr=73; // в английскую, т.к. в ДОСе нет
else if(*cstr==179) // i, украинское и
*cstr=105; // в английскую, т.к. в ДОСе нет
else if(*cstr==161) // Ў, беларусская У с хвостиком вверху - незнаю, как читается
*cstr=246;
else if(*cstr==162) // ў, беларусская У с хвостиком вверху - незнаю, как читается
*cstr=247;
else if(*cstr==176) // знак градуса
*cstr=248;
else if(*cstr==183) // маленькая центровая точка
*cstr=250;
else
*cstr='?'; // некий символ, которым заменять несуществующие в CP1251
}
return str;
}