forked from KolibriOS/kolibrios
0968bb5e8a
git-svn-id: svn://kolibrios.org@2224 a494cfbc-eb01-0410-851d-a64ba20cac60
146 lines
2.2 KiB
NASM
146 lines
2.2 KiB
NASM
use16
|
|
org $100
|
|
|
|
;==============================================================================
|
|
|
|
macro fopen { ; DX = filename
|
|
mov ax,$3D00
|
|
int $21
|
|
}
|
|
|
|
macro fclose { ; BX = file handle
|
|
mov ah,$3E
|
|
int $21
|
|
}
|
|
|
|
macro fread { ; BX = file handle, CX = count, DX = buffer
|
|
mov ah,$3F
|
|
int $21
|
|
}
|
|
|
|
macro fwrite { ; BX = file handle, CX = count, DX = buffer
|
|
mov ah,$40
|
|
int $21
|
|
}
|
|
|
|
;==============================================================================
|
|
|
|
; /////////////// char.mt ///////////////
|
|
|
|
mov dx,_font1_in
|
|
fopen
|
|
jc exit
|
|
xchg ax,bx
|
|
mov cx,$5000
|
|
mov dx,_buf
|
|
fread
|
|
jc exit
|
|
fclose
|
|
;---------------------------------------
|
|
mov bx,_buf+8
|
|
xor si,si
|
|
mov di,_buf
|
|
mov cl,1
|
|
xor al,al
|
|
cld
|
|
@@:
|
|
cmp byte[bx+si],$20
|
|
je .sp
|
|
or al,cl
|
|
.sp:
|
|
inc si
|
|
shl cl,1
|
|
cmp cl,00100000b
|
|
jne @b
|
|
mov cl,1
|
|
stosb
|
|
xor al,al
|
|
add si,3
|
|
cmp si,8*9
|
|
jb @b
|
|
xor si,si
|
|
add bx,8*10
|
|
cmp di,_buf+$900
|
|
jb @b
|
|
;---------------------------------------
|
|
mov dx,_font1_out
|
|
xor cx,cx
|
|
mov ah,$3C ; create
|
|
int $21
|
|
jc exit
|
|
xchg ax,bx
|
|
mov cx,$900
|
|
mov dx,_buf
|
|
fwrite
|
|
jc exit
|
|
fclose
|
|
|
|
; /////////////// char2.mt ///////////////
|
|
|
|
mov dx,_font2_in
|
|
fopen
|
|
jc exit
|
|
xchg ax,bx
|
|
mov cx,$6500
|
|
mov dx,_buf
|
|
fread
|
|
jc exit
|
|
fclose
|
|
;---------------------------------------
|
|
mov bx,_buf+10
|
|
mov di,_buf
|
|
cld
|
|
newchar:
|
|
; width of character
|
|
mov al, 8
|
|
cmp byte [bx-4], ' '
|
|
jz @f
|
|
mov al, [bx-4]
|
|
sub al, '0'-1
|
|
@@:
|
|
stosb
|
|
; character itself
|
|
xor si, si
|
|
charloop:
|
|
xor al, al
|
|
mov cl, 1
|
|
@@:
|
|
cmp byte[bx+si],$20
|
|
je .sp2
|
|
or al,cl
|
|
.sp2:
|
|
inc si
|
|
shl cl,1
|
|
cmp cl,10000000b
|
|
jne @b
|
|
stosb
|
|
add si,3
|
|
cmp si,10*9
|
|
jb charloop
|
|
add bx,10*10
|
|
cmp di,_buf+$A00
|
|
jb newchar
|
|
;---------------------------------------
|
|
mov dx,_font2_out
|
|
xor cx,cx
|
|
mov ah,$3C ; create
|
|
int $21
|
|
jc exit
|
|
xchg ax,bx
|
|
mov cx,$A00
|
|
mov dx,_buf
|
|
fwrite
|
|
jc exit
|
|
fclose
|
|
|
|
exit:
|
|
ret
|
|
|
|
;==============================================================================
|
|
|
|
_font1_in db 'char.txt',0
|
|
_font1_out db 'char.mt',0
|
|
_font2_in db 'char2.txt',0
|
|
_font2_out db 'char2.mt',0
|
|
|
|
_buf: rb $6500 |