1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/*
* MultiMail offline mail reader
* conversion tables ISO 8859-1 <-> IBM codepage 437
Copyright 1997 Peter Krefting <peter@softwolves.pp.se>,
Toth Istvan <stoty@vma.bme.hu>
Copyright 1998-2017 William McBrine <wmcbrine@gmail.com>
Distributed under the GNU General Public License, version 3 or later. */
/* Original tables by Peter Krefting, modified by William McBrine after
DOSEmu's video/terminal.h, by Mark D. Rejhon. */
#include "interfac.h"
enum cdirtype {CC_ISOTO437, CC_437TOISO};
bool isoConsole;
const char *dos2isotab =
"\307\374\351\342\344\340\345\347\352\353\350\357\356\354\304\305"
"\311\346\306\364\366\362\373\371\377\326\334\242\243\245\120\146"
"\341\355\363\372\361\321\252\272\277\055\254\275\274\241\253\273"
":%&|{{{..{I.'''.``+}-+}}`.**}=**+*+``..**'.#_][~"
"a\337\254\266{\363\265t\330\364\326\363o\370En"
"=\261><()\367=\260\267\267%\140\262= ";
const char *iso2dostab =
"\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217"
"\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237 "
"\255\233\234$\235|\025\"c\246\256\252-r-\370\361\3753\'\346\024\371,1"
"\370\257\254\253/\250AAAA\216\217\222\200E\220EEIIIID\245OOOO\231x"
"\231UUU\232Y \341\205\240\203a\204\206\221\207\212\202\210\211\215\241"
"\214\213 \244\225\242\223o\224\366\224\227\243\226\201y \230";
char *charconv(char *buf, cdirtype cdir)
{
const char *ct = (cdir == CC_ISOTO437) ? iso2dostab : dos2isotab;
for (char *p = buf; *p; p++) {
unsigned char c = *p;
if (c & 0x80)
*p = ct[c & 0x7f];
}
return buf;
}
char *charconv_in(char *buf)
{
return (isoConsole ? charconv(buf, CC_437TOISO) : buf);
}
char *charconv_out(char *buf)
{
return (isoConsole ? charconv(buf, CC_ISOTO437) : buf);
}
char *letterconv_in(char *buf)
{
return (mm.letterList->isLatin() ^ isoConsole) ?
charconv(buf, isoConsole ? CC_437TOISO : CC_ISOTO437) : buf;
}
char *letterconv_out(char *buf)
{
return (mm.letterList->isLatin() ^ isoConsole) ?
charconv(buf, isoConsole ? CC_ISOTO437 : CC_437TOISO) : buf;
}
char *areaconv_in(char *buf)
{
return (mm.areaList->isLatin() ^ isoConsole) ?
charconv(buf, isoConsole ? CC_437TOISO : CC_ISOTO437) : buf;
}
char *areaconv_out(char *buf)
{
return (mm.areaList->isLatin() ^ isoConsole) ?
charconv(buf, isoConsole ? CC_ISOTO437 : CC_437TOISO) : buf;
}
|