-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathencodings.koi8.c
43 lines (38 loc) · 1.87 KB
/
encodings.koi8.c
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
#include "stdafx.h"
#include "encodings.h"
WCHAR EasyFetchKoi8(CHAR ch);
WCHAR koi8[128] = {0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, 0x2264, 0x2265, 0xA0, 0x2321, 0xB0, 0xB2, 0xB7, 0xF7, 0x2550, 0x2551, 0x2552, 0x451, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F, 0x2560, 0x2561, 0x401, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0xA9, 0x44E, 0x430, 0x431, 0x446, 0x434, 0x435, 0x444, 0x433, 0x445, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, 0x43F, 0x44F, 0x440, 0x441, 0x442, 0x443, 0x436, 0x432, 0x44C, 0x44B, 0x437, 0x448, 0x44D, 0x449, 0x447, 0x44A, 0x42E, 0x410, 0x411, 0x426, 0x414, 0x415, 0x424, 0x413, 0x425, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, 0x42F, 0x420, 0x421, 0x422, 0x423, 0x416, 0x412, 0x42C, 0x42B, 0x417, 0x428, 0x42D, 0x429, 0x427, 0x42A};
// fetch char from koi-8 byte sequence
// buf - sequence
// ch - resulting symbol (!)
// bytes - maximum ammount of available bytes
BOOL FetchKoi8Char(CHAR* buf, WCHAR* wch, int bytes) {
if(bytes == 0)
return FALSE;
*wch = EasyFetchKoi8(buf[BUFLEN-1]);
return TRUE;
}
WCHAR EasyFetchKoi8(CHAR ch) {
unsigned char uch = ch;
if(uch < 0x80) {
return (WCHAR)uch;
}
else {
return koi8[uch-0x80];
}
}
// Decodes null-terminated Koi-8 string
LPWSTR DecodeSzFromKoi8(LPSTR lpStr) {
int len = 0;
for(char* lpc = lpStr; *lpc; lpc++) len++;
return DecodeFromKoi8(lpStr, len);
}
// Decodes not null-terminated Koi-8 string
LPWSTR DecodeFromKoi8(LPSTR lpStr, int len) {
WCHAR* ans = malloc(sizeof(WCHAR)*(len+1));
for(int i = 0; i < len; i++) {
ans[i] = EasyFetchKoi8(lpStr[i]);
}
ans[len] = L'\0';
return ans;
}