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 прилагаются :D

Posted: Thu Oct 12, 2006 7:41 pm
by mike.dld
А я лично за UTF8. По-моему, вполне достаточно будет для такой ОС как Колибри.

Posted: Thu Oct 12, 2006 10:21 pm
by camper
боюсь что в конечном итоге все наиболее распространенные кодировки кириллицы будут нужны