diff --git a/programs/develop/libraries/charset/charset.asm b/programs/develop/libraries/charset/charset.asm new file mode 100644 index 0000000000..9583801333 --- /dev/null +++ b/programs/develop/libraries/charset/charset.asm @@ -0,0 +1,170 @@ + +format MS COFF + +public EXPORTS + +section '.flat' code readable align 16 + +; int version() +version: + mov eax, 1 + ret + + +; void __stdcall dos2win (const char text_in[], char text_out[]) +dos2win: + push ecx + push edx + + mov ecx, [esp+12] + mov edx, [esp+16] + + pushad + + mov ebx, d2w + mov [charset], ebx + call translate8 + + popad + + pop edx + pop ecx + ret 8 + +; void __stdcall win2dos (const char text_in[], char text_out[]) +win2dos: + push ecx + push edx + + mov ecx, [esp+12] + mov edx, [esp+16] + + pushad + + mov ebx, w2d + mov [charset], ebx + call translate8 + + popad + + pop edx + pop ecx + ret 8 + +; void __stdcall koi2dos (const char text_in[], char text_out[]) +koi2dos: + push ecx + push edx + + mov ecx, [esp+12] + mov edx, [esp+16] + + pushad + + mov ebx, k2d + mov [charset], ebx + call translate8 + + popad + + pop edx + pop ecx + ret 8 + +translate8: + mov byte al, [ecx] + + cmp al, 0 + je _translate8_end + + cmp al, 127 + jb _translate8_copy + + and eax, 127 + mov ebx, [charset] + add ebx, eax + + mov byte al, [ebx] + + _translate8_copy: + mov byte [edx], al + + inc edx + inc ecx + + jmp translate8 + + _translate8_end: + mov byte [edx], 0 + ret + + +align 16 +EXPORTS: + dd szVersion, version + dd szDos2win, dos2win + dd szWin2dos, win2dos + dd szKoi2dos, koi2dos + dd 0, 0 + +szVersion db 'version',0 +szDos2win db 'dos2win',0 +szWin2dos db 'win2dos',0 +szKoi2dos db 'koi2dos',0 + +d2w db 192, 193, 194, 195, 196, 197, 198, 199 + db 200, 201, 202, 203, 204, 205, 206, 207 + db 208, 209, 210, 211, 212, 213, 214, 215 + db 216, 217, 218, 219, 220, 221, 222, 223 + db 224, 225, 226, 227, 228, 229, 230, 231 + db 232, 233, 234, 235, 236, 237, 238, 239 + db 32, 32, 32, 32, 32, 32, 32, 32 + db 32, 32, 32, 32, 32, 32, 32, 32 + db 32, 32, 32, 32, 32, 32, 32, 32 + db 32, 32, 32, 32, 32, 32, 32, 32 + db 32, 32, 32, 32, 32, 32, 32, 32 + db 32, 32, 32, 32, 32, 32, 32, 32 + db 240, 241, 242, 243, 244, 245, 246, 247 + db 248, 249, 250, 251, 252, 253, 254, 255 + db 168, 184, 170, 186, 175, 191, 161, 162 + db 176, 32, 32, 32, 185, 164, 32, 32 + + +w2d db 32, 32, 44, 32, 34, 32, 32, 32 + db 94, 32, 32, 60, 32, 32, 32, 32 + db 32, 39, 39, 34, 34, 32, 45, 45 + db 126, 32, 32, 62, 32, 32, 32, 32 + db 32, 246, 247, 74, 253, 131, 32, 32 + db 240, 32, 242, 34, 32, 32, 32, 244 + db 248, 32, 73, 105, 163, 32, 32, 250 + db 241, 252, 243, 34, 106, 83, 115, 245 + db 128, 129, 130, 131, 132, 133, 134, 135 + db 136, 137, 138, 139, 140, 141, 142, 143 + db 144, 145, 146, 147, 148, 149, 150, 151 + db 152, 153, 154, 155, 156, 157, 158, 159 + db 160, 161, 162, 163, 164, 165, 166, 167 + db 168, 169, 170, 171, 172, 173, 174, 175 + db 224, 225, 226, 227, 228, 229, 230, 231 + db 232, 233, 234, 235, 236, 237, 238, 239 + + +k2d db 196, 179, 218, 191, 192, 217, 195, 180 + db 194, 193, 197, 223, 220, 219, 221, 222 + db 176, 177, 178, 32, 254, 249, 251, 32 + db 32, 32, 32, 32, 248, 32, 250, 32 + db 205, 186, 184, 241, 214, 201, 184, 183 + db 187, 212, 211, 200, 190, 189, 188, 198 + db 199, 204, 181, 240, 182, 185, 209, 210 + db 203, 207, 208, 202, 216, 215, 206, 32 + db 238, 160, 161, 230, 164, 165, 228, 163 + db 229, 168, 169, 170, 171, 172, 173, 174 + db 175, 239, 224, 225, 226, 227, 166, 162 + db 236, 235, 167, 232, 237, 233, 231, 234 + db 158, 128, 129, 150, 132, 133, 148, 131 + db 149, 136, 137, 138, 139, 140, 141, 142 + db 143, 159, 144, 145, 146, 147, 134, 130 + db 156, 155, 135, 152, 157, 153, 151, 154 + +section '.data' data readable writable align 16 + +charset rd 1 \ No newline at end of file diff --git a/programs/develop/libraries/charset/charset.h b/programs/develop/libraries/charset/charset.h new file mode 100644 index 0000000000..a74eede7ba --- /dev/null +++ b/programs/develop/libraries/charset/charset.h @@ -0,0 +1,11 @@ + +int version(); + +// 866 -> 1251 +void __stdcall dos2win (const char text_in[], char text_out[]); + +// 1251 -> 866 +void __stdcall win2dos (const char text_in[], char text_out[]); + +// koi8-r -> 866 +void __stdcall koi2dos (const char text_in[], char text_out[]); diff --git a/programs/develop/libraries/charset/compile.bat b/programs/develop/libraries/charset/compile.bat new file mode 100644 index 0000000000..ff52f884d1 --- /dev/null +++ b/programs/develop/libraries/charset/compile.bat @@ -0,0 +1,4 @@ +del charset.obj +fasm charset.asm +kpack charset.obj +pause \ No newline at end of file diff --git a/programs/develop/libraries/charset/readme.txt b/programs/develop/libraries/charset/readme.txt new file mode 100644 index 0000000000..7d2d990d16 --- /dev/null +++ b/programs/develop/libraries/charset/readme.txt @@ -0,0 +1,11 @@ + + charset.obj + ============== + + Библиотека для преобразования русского текста в разных кодировках. + Параметры функций преобразования - Си-строки. + + ============== + Александр Богомаз aka Albom + albom85@yandex.ru + http://albom85.narod.ru