Page 1 of 2
Разные кодировки
Posted: Fri Aug 05, 2005 10:21 pm
by ealex
Я попробовал написать функции для перевода строки из Win кодировки в Dos. Первая использует условные переходы, вторя таблицу. Какая лучше - не знаю. И первую и вторую надо хорошень потестить.
Входные данные: esi = указывает на строку, ecx = количество символов. Думаю функция будет полезной. Например, было бы неплохо прикрутить ее к ТиниПаду.
Code: Select all
Win2Dos1:
jcxz .no_chars
push esi
push edi
push ecx
mov edi, esi
.next_char:
lodsb
cmp al, 0xC0
jae .rus
cmp al, 0xA8
jnz @f
mov al, 0xF0
@@:
cmp al, 0xB8
jnz @f
mov al, 0xF1
@@:
jmp .char_ready
.rus:
cmp al, 0xF0
jae @f
sub al, 48
@@:
sub al, 16
.char_ready:
stosb
dec ecx
jnz .next_char
pop ecx
pop edi
pop esi
.no_chars:
ret
Posted: Fri Aug 05, 2005 10:29 pm
by Guest
Второй вариант
Code: Select all
Win2Dos2:
jcxz .no_chars
push ebx
push edi
push ecx
mov edi, esi
mov ebx, Win2Dos_table
.next_char:
lodsb
xlatb
stosb
dec ecx
jnz .next_char
pop ecx
pop edi
pop ebx
.no_chars:
ret
Win2Dos_table:
rept 168 counter
{ db counter - 1
}
db 0xF0
rept 15 counter
{ db counter + 168
}
db 0xF1
rept 7 counter
{ db counter + 184
}
rept 48 counter
{ db counter + 127
}
rept 16 counter
{ db counter + 223
}
Если кому интересно, могу добавить подробные комментарии.
Posted: Sun Aug 07, 2005 5:51 pm
by DoomEd Archangel
ealex
перекодировка ДОС-ВИН есть (была) в хекс-редакторе, тока (хотя я и обещал посмотреть её и приделать к тинипаду) я её не смотрел...
ф-я очень нужная, будем надеяться mike.dld в скором времени обновит тинипад
Posted: Tue Aug 09, 2005 9:58 am
by willow
Я реализовал перекодировку в своем RTF Reader и вполне ею доволен. Там конверсия путем вычитания кодов, и по таблице - для специальных символов. По возможности надо выложить исходники.
Posted: Tue Aug 09, 2005 4:44 pm
by DoomEd Archangel
как на счёт добавления макросов в ascl?
Posted: Tue Oct 11, 2005 12:40 pm
by willow
Отрывок из RTF READER:
Code: Select all
; in - al/ax; out - al
macro uc2oem
{
local .ex1
push edi
mov ecx,(oemutbl-uctbl)/2+1
mov edi,uctbl
repne scasw
jne .ex1
sub edi,uctbl
shr edi,1
dec edi
mov al,[oemutbl+edi]
.ex1:
pop edi
}
macro ansi2oem
{
local .ex2,.notintbl
push edi ecx
mov ecx,oematbl-ansitbl
mov edi,ansitbl
repne scasb
jne .notintbl
dec edi
mov al,[oematbl-ansitbl+edi]
jmp .ex2
.notintbl:
cmp al,0xc0
jb .ex2
sub al,0x40
cmp al,0xb0
jb .ex2
add al,0x30
.ex2:
pop ecx edi
}
ansitbl:
db 0xaa,0xba,0xbf,0xaf
db 0xa7,0xa8,0xa1,0xab,0xb0,0xb2,0xb3,0xb6,0xb7,0xb8,0xb9
db 0xa2,0xbb,0x93,0x94,0x85
oematbl:
db 0xf2,0xf3,0xf5,0xf4
db 0x15,0xf0,0xf6,0x22,0x1d,0x49,0x69,0x14,0x1c,0xf1,0x23
db 0xf7,0x22,0x22,0x22,0x16
uctbl:
dw 0x451
oemutbl:
db 0xb8
Posted: Wed Oct 12, 2005 7:33 pm
by Wildwest
Андрей, GameMaker - это хорошо, но RTF-редактор важнее
Posted: Thu Oct 13, 2005 10:45 am
by willow
Я так скажу. С точки зрения доступа к данным формат RTF очень неудобен по сравнению например с Word. RTF редактор или даже удобную читалку с возможностью навигации по тексту сделать не легче, чем браузер...
Posted: Thu Oct 13, 2005 7:57 pm
by Wildwest
Кстати, помнится ты около года назад писал карточную игру с искуственным интеллектом. Как её судьба?
Posted: Fri Oct 14, 2005 9:26 am
by willow
Что-то не выходит. Запутался. Возможно, большую часть кода нужно будет пересмотреть и переписать
Posted: Sat Oct 15, 2005 8:08 am
by Михаил
У меня тоже где-то валяется недописанный "Козел". Могу передать исходники, кто интересуется.
Posted: Mon Oct 17, 2005 9:43 am
by willow
Почему нет? Кидай на wil[underline]low[at]hotbox[dot]ru
Posted: Thu Oct 12, 2006 5:57 pm
by tobject
ealex
ИМХО нужно внутренне представлять символы текста в
UCS32.
Тогда можно обеспечить реальную многоязыковую поддержку.
Сам недавно прорабатывал вопрос с перекодированием
здесь.
Исходники на Oberon прилагаются
Posted: Thu Oct 12, 2006 7:41 pm
by mike.dld
А я лично за UTF8. По-моему, вполне достаточно будет для такой ОС как Колибри.
Posted: Thu Oct 12, 2006 10:21 pm
by camper
боюсь что в конечном итоге все наиболее распространенные кодировки кириллицы будут нужны