Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Nov 15, 2019 12:39 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 23 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Fri Aug 05, 2005 10:21 pm 
Offline

Joined: Sun Jun 19, 2005 7:08 pm
Posts: 41
Я попробовал написать функции для перевода строки из Win кодировки в Dos. Первая использует условные переходы, вторя таблицу. Какая лучше - не знаю. И первую и вторую надо хорошень потестить.

Входные данные: esi = указывает на строку, ecx = количество символов. Думаю функция будет полезной. Например, было бы неплохо прикрутить ее к ТиниПаду.
Code:
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


Top
   
 Post subject:
PostPosted: Fri Aug 05, 2005 10:29 pm 
Второй вариант
Code:
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
}

Если кому интересно, могу добавить подробные комментарии.


Top
   
 Post subject:
PostPosted: Sun Aug 07, 2005 5:51 pm 
ealex

перекодировка ДОС-ВИН есть (была) в хекс-редакторе, тока (хотя я и обещал посмотреть её и приделать к тинипаду) я её не смотрел...
ф-я очень нужная, будем надеяться mike.dld в скором времени обновит тинипад :)


Top
   
 Post subject:
PostPosted: Tue Aug 09, 2005 9:58 am 
Offline

Joined: Wed May 25, 2005 8:52 am
Posts: 147
Я реализовал перекодировку в своем RTF Reader и вполне ею доволен. Там конверсия путем вычитания кодов, и по таблице - для специальных символов. По возможности надо выложить исходники.


Top
   
 Post subject:
PostPosted: Tue Aug 09, 2005 4:44 pm 
как на счёт добавления макросов в ascl?


Top
   
 Post subject:
PostPosted: Tue Oct 11, 2005 12:40 pm 
Offline

Joined: Wed May 25, 2005 8:52 am
Posts: 147
Отрывок из RTF READER:
Code:
; 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


Top
   
 Post subject:
PostPosted: Wed Oct 12, 2005 7:33 pm 
Offline

Joined: Wed May 18, 2005 7:27 pm
Posts: 1001
Андрей, GameMaker - это хорошо, но RTF-редактор важнее ;)


Top
   
 Post subject:
PostPosted: Thu Oct 13, 2005 10:45 am 
Offline

Joined: Wed May 25, 2005 8:52 am
Posts: 147
Я так скажу. С точки зрения доступа к данным формат RTF очень неудобен по сравнению например с Word. RTF редактор или даже удобную читалку с возможностью навигации по тексту сделать не легче, чем браузер...


Top
   
 Post subject:
PostPosted: Thu Oct 13, 2005 7:57 pm 
Offline

Joined: Wed May 18, 2005 7:27 pm
Posts: 1001
Кстати, помнится ты около года назад писал карточную игру с искуственным интеллектом. Как её судьба?


Top
   
 Post subject:
PostPosted: Fri Oct 14, 2005 9:26 am 
Offline

Joined: Wed May 25, 2005 8:52 am
Posts: 147
Что-то не выходит. Запутался. Возможно, большую часть кода нужно будет пересмотреть и переписать


Top
   
 Post subject:
PostPosted: Sat Oct 15, 2005 8:08 am 
У меня тоже где-то валяется недописанный "Козел". Могу передать исходники, кто интересуется.


Top
   
 Post subject:
PostPosted: Mon Oct 17, 2005 9:43 am 
Offline

Joined: Wed May 25, 2005 8:52 am
Posts: 147
Почему нет? Кидай на wil[underline]low[at]hotbox[dot]ru


Top
   
 Post subject:
PostPosted: Thu Oct 12, 2006 5:57 pm 
ealex

ИМХО нужно внутренне представлять символы текста в UCS32.
Тогда можно обеспечить реальную многоязыковую поддержку.

Сам недавно прорабатывал вопрос с перекодированием здесь.
Исходники на Oberon прилагаются :D


Top
   
 Post subject:
PostPosted: Thu Oct 12, 2006 7:41 pm 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
А я лично за UTF8. По-моему, вполне достаточно будет для такой ОС как Колибри.


Top
   
 Post subject:
PostPosted: Thu Oct 12, 2006 10:21 pm 
Offline
User avatar

Joined: Thu Oct 13, 2005 12:00 pm
Posts: 299
боюсь что в конечном итоге все наиболее распространенные кодировки кириллицы будут нужны


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 23 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited