Подскажите способ получить по номеру символа в таблице ASCII (DOS) номер символа для Windows.
CharToOem, OemToChar — это не то.
Грубо говоря, если написать программу под DOS, которая выводит символы с кодами с 0 до 255, и аналогичную программу под Windows, то расположение символов в этих таблицах будет отличаться.
В частности, в DOS-таблице после буквы "п" идет псевдографика, и только потом остальные буквы.
В Windows-таблице же все русские буквы идут без перерывов.
Зачем это надо
Я сопровождаю legacy программу для DOS (на clipper'е

)
Надо перевести на С декодирование паролей доступа.
А там с отдельными символами производятся арифметические действия — т.е. выполняется (N-<код символа>).
Здравствуйте, Mathew, Вы писали:
M>Подскажите способ получить по номеру символа в таблице ASCII (DOS) номер символа для Windows.
M>CharToOem, OemToChar — это не то.
M>Грубо говоря, если написать программу под DOS, которая выводит символы с кодами с 0 до 255, и аналогичную программу под Windows, то расположение символов в этих таблицах будет отличаться.
M>В частности, в DOS-таблице после буквы "п" идет псевдографика, и только потом остальные буквы.
M>В Windows-таблице же все русские буквы идут без перерывов.
M>Зачем это надо
M>Я сопровождаю legacy программу для DOS (на clipper'е
)
M>Надо перевести на С декодирование паролей доступа.
M>А там с отдельными символами производятся арифметические действия — т.е. выполняется (N-<код символа>).
Я не понал, чем OemToCharA не устраивает?
Под досом пишешь? Сам когда-то извращался

, дарю:
void DOStoWIN(unsigned char * ptr, int count)
{
for(int i=0; i<count; i++)
if( ptr[i]>=0x80 && ptr[i]<0xB0 )
ptr[i] += 0x40;
else
if( (ptr[i]&0xF0) == 0xE0 )
ptr[i] += 0x10;
else
if(ptr[i]==0xF0)
ptr[i] = 0xA8;
else
if(ptr[i]==0xF1)
ptr[i] = 0xB8;
}