23,250 → 23,232 |
purge newline |
MAXSTRINGS = 16 |
TMP = 80*(MAXSTRINGS+1) |
|
;------------------------------------------------------------------------------ |
START: ; start of execution |
mov edi, filename |
cmp byte [edi], 0 |
mov edi,filename |
cmp [edi],byte 0 |
jnz param |
mov esi, default_filename |
mov esi,default_filename |
@@: |
lodsb |
stosb |
test al, al |
test al,al |
jnz @b |
param: |
|
; allow user to see messages written before start |
; mov ecx,4096 |
; flush: |
; mov eax,63 |
; mov ebx,2 |
; mcall |
; loop flush |
; mov ecx,4096 |
;flush: |
; mcall 63,2 |
; loop flush |
|
mov ecx,TMP |
xor eax,eax |
mov edi,[targ] |
rep stosb |
|
mov ecx, TMP |
xor eax, eax |
mov edi, [targ] |
rep stosb |
|
mov [tmp1],'x' |
mov [tmp2],'x' |
|
mov eax,14 |
mcall |
and eax,0xffff0000 |
sub eax,399 shl 16 |
add eax,399 |
mov [xstart],eax |
|
mov eax,48 |
mov ebx,3 |
mov ecx,sc |
mov edx,sizeof.system_colors |
mcall |
if WRITE_LOG |
mov esi, filename |
call CreateFile |
end if |
|
red: |
call draw_window |
|
mov [tmp1],'x' |
mov [tmp2],'x' |
|
mcall 14 |
and eax,0xffff0000 |
sub eax,399 shl 16 |
add eax,399 |
mov [xstart],eax |
mcall 48,3,sc,sizeof.system_colors |
if WRITE_LOG |
mov esi,filename |
call CreateFile |
end if |
;------------------------------------------------------------------------------ |
red: |
call draw_window |
;------------------------------------------------------------------------------ |
still: |
mcall 23,1 ; wait here for event |
cmp eax,1 ; redraw request ? |
je red |
|
mov eax,23 ; wait here for event |
mov ebx,1 |
mcall |
cmp eax,2 ; key in buffer ? |
je key |
|
cmp eax,1 ; redraw request ? |
je red |
cmp eax,2 ; key in buffer ? |
je key |
cmp eax,3 ; button in buffer ? |
je button |
cmp eax,3 ; button in buffer ? |
je button |
|
mov eax,63 |
mov ebx,2 |
mcall |
mcall 63,2 |
cmp ebx,1 |
jne still |
|
cmp ebx,1 |
jne still |
new_data: |
if WRITE_LOG |
pusha |
mov [tmp],al |
mov edx,tmp |
mov ecx,1 |
mov esi,filename |
.write_to_logfile: |
call WriteToFile |
cmp eax,5 |
jne @f |
mov esi,filename |
mov [filepos],0 |
call CreateFile |
jnc .write_to_logfile |
@@: |
inc [filepos] |
popa |
end if |
mov ebp,[targ] |
.no4: |
cmp al,13 |
jne no13 |
and [ebp-8],dword 0 |
jmp new_check |
;------------------------------------------ |
no13: |
cmp al,10 |
jne no10 |
and [ebp-8],dword 0 |
inc dword [ebp-4] |
cmp [ebp-4],dword MAXSTRINGS |
jbe .noypos |
mov [ebp-4],dword MAXSTRINGS |
lea esi,[ebp+80] |
mov edi,ebp |
mov ecx,80*(MAXSTRINGS) |
cld |
rep movsb |
|
new_data: |
if WRITE_LOG |
pusha |
mov [tmp], al |
mov edx, tmp |
mov ecx, 1 |
mov esi, filename |
.write_to_logfile: |
call WriteToFile |
cmp eax, 5 |
jne @f |
mov esi, filename |
mov [filepos], 0 |
call CreateFile |
jnc .write_to_logfile |
@@: |
inc [filepos] |
popa |
end if |
mov esi,[ebp-4] |
imul esi,80 |
add esi,[ebp-8] |
add esi,ebp |
mov ecx,80 |
xor al,al |
rep stosb |
.noypos: |
mov [targ],text2 |
and [krnl_cnt],0 |
jmp new_check |
;------------------------------------------ |
no10: |
cmp ebp,text1 |
je add2 |
mov ecx,[krnl_cnt] |
cmp al,[krnl_msg+ecx] |
jne .noknl |
inc [krnl_cnt] |
cmp [krnl_cnt],4 |
jne new_check |
mov [targ],text1 |
.noknl: |
mov ebp,[targ] |
jecxz .add |
push eax |
mov esi,krnl_msg |
.l1: |
lodsb |
call add_char |
loop .l1 |
pop eax |
.add: |
and [krnl_cnt],0 |
add2: |
call add_char |
|
mov ebp,[targ] |
.no4: |
cmp al,13 |
jne no13 |
and dword[ebp-8],0 |
jmp new_check |
no13: |
cmp al,10 |
jne no10 |
and dword[ebp-8],0 |
inc dword[ebp-4] |
cmp dword[ebp-4],MAXSTRINGS |
jbe .noypos |
mov dword[ebp-4],MAXSTRINGS |
lea esi,[ebp+80] |
mov edi,ebp |
mov ecx,80*(MAXSTRINGS) |
cld |
rep movsb |
|
mov esi,[ebp-4] |
imul esi,80 |
add esi,[ebp-8] |
add esi,ebp |
mov ecx,80 |
xor al,al |
rep stosb |
.noypos: |
mov [targ],text2 |
and [krnl_cnt],0 |
jmp new_check |
no10: |
cmp ebp,text1 |
je add2 |
mov ecx,[krnl_cnt] |
cmp al,[krnl_msg+ecx] |
jne .noknl |
inc [krnl_cnt] |
cmp [krnl_cnt],4 |
jne new_check |
mov [targ],text1 |
.noknl: |
mov ebp,[targ] |
jecxz .add |
push eax |
mov esi,krnl_msg |
.l1: |
lodsb |
call add_char |
loop .l1 |
pop eax |
.add: |
and [krnl_cnt],0 |
add2: |
call add_char |
|
new_check: |
|
mov eax,63 |
mov ebx,2 |
mcall |
|
cmp ebx,1 |
je new_data |
|
call draw_window |
|
jmp still |
|
key: ; key |
mov al,2 ; just read it and ignore |
mcall |
cmp ah,' ' |
je button.noclose |
jmp still |
|
button: ; button |
mov al,17 ; get id |
mcall |
|
cmp ah,1 ; button id=1 ? |
jne .noclose |
|
or eax,-1 ; close this program |
mcall |
.noclose: |
xor [vmode],1 |
jmp red |
|
new_check: |
mcall 63,2 |
cmp ebx,1 |
je new_data |
call draw_text |
jmp still |
;------------------------------------------------------------------------------ |
key: |
mcall 2 |
cmp ah,' ' |
je button.noclose |
jmp still |
;------------------------------------------------------------------------------ |
button: |
mcall 17 ; get id |
cmp ah,1 ; button id=1 ? |
jne .noclose |
or eax,-1 ; close this program |
mcall |
.noclose: |
xor [vmode],1 |
jmp red |
;------------------------------------------------------------------------------ |
add_char: |
push esi |
mov esi,[ebp-4] |
imul esi,80 |
add esi,[ebp-8] |
mov [ebp+esi],al |
inc dword[ebp-8] |
cmp dword[ebp-8],80 |
jb .ok |
mov dword[ebp-8],79 |
.ok: |
pop esi |
ret |
|
push esi |
mov esi,[ebp-4] |
imul esi,80 |
add esi,[ebp-8] |
mov [ebp+esi],al |
inc dword[ebp-8] |
cmp dword[ebp-8],80 |
jb .ok |
mov dword[ebp-8],79 |
.ok: |
pop esi |
ret |
;------------------------------------------------------------------------------ |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
|
|
draw_window: |
|
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
mcall |
|
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
; mov ebx,50*65536+400 ; [x start] *65536 + [x size] |
mov ebx,[xstart] |
mov ecx,MAXSTRINGS*10+45 ; [y start] *65536 + [y size] |
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl |
or edx,0x13000000 |
mov edi,title ; WINDOW LABEL |
mcall |
|
mov ecx,4 |
mov esi,[sc.work] |
mov ebx,296 shl 16+5*6 |
mov edx,3;+1 shl 30 |
mcall 8,,<5,12> |
mov edx,[vmode] |
lea edx,[edx*4+duk] |
mcall 4,<300,8>,,,4 |
|
mov ebx,15*65536+33 ; draw info text with function 4 |
mov ecx,[sc.work_text] |
mov edx,text1 |
cmp [vmode],0 |
je .kern |
mov edx,text2 |
.kern: |
mov esi,80 |
mov eax,4 |
newline: |
mcall |
add ebx,10 |
add edx,80 |
cmp [edx],byte 'x' |
jne newline |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
mcall |
|
ret |
|
|
mcall 12,1 ; 1, start of draw |
xor eax,eax ; function 0 : define and draw window |
mov ecx,MAXSTRINGS*10+45 ; [y start] *65536 + [y size] |
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl |
or edx,0x13000000 |
xor esi,esi |
mcall ,[xstart],,,,title |
mov ebx,296 shl 16+5*6 |
mcall 8,,<5,12>,3,[sc.work] |
mov edx,[vmode] |
lea edx,[edx*4+duk] |
mcall 4,<300,8>,,,4 |
call draw_text |
mcall 12,2 ; 2, end of draw |
ret |
;------------------------------------------------------------------------------ |
draw_text: |
mov ebx,15*65536+30 ; draw info text with function 4 |
mov ecx,[sc.work_text] |
or ecx,0x40000000 |
mov edi,[sc.work] |
mov edx,text1 |
cmp [vmode],0 |
je .kern |
mov edx,text2 |
.kern: |
push ebx ecx edx |
mcall 9,procinfo,-1 |
mov eax,[ebx+42] |
xor edx,edx |
mov ebx,6 |
div ebx |
pop edx ecx ebx |
mov esi,80 |
cmp eax,esi |
ja @f |
mov esi,eax |
@@: |
cmp esi,5 |
ja @f |
mov esi,5 |
@@: |
sub esi,4 |
mov eax,4 |
newline: |
mcall |
add ebx,10 |
add edx,80 |
cmp [edx],byte 'x' |
jne newline |
ret |
;------------------------------------------------------------------------------ |
if WRITE_LOG |
;******************************************** |
;* input: esi = pointer to the file name * |
273,22 → 255,22 |
;******************************************** |
|
CreateFile: |
pusha |
mov dword [InfoStructure], 2 ; create file |
mov dword [InfoStructure+4], 0 ; reserved |
mov dword [InfoStructure+8], 0 ; reserved |
mov dword [InfoStructure+12], 0 ; 0 bytes to write (just create) |
mov dword [InfoStructure+16], 0 ; NULL data pointer (no data) |
mov dword [InfoStructure+20], 0 ; reserved |
mov dword [InfoStructure+21], esi ; pointer to the file name |
mcall 70, InfoStructure |
test eax, eax |
jz .out |
stc |
.out: |
popa |
ret |
|
pusha |
mov dword [InfoStructure],2 ; create file |
mov dword [InfoStructure+4],0 ; reserved |
mov dword [InfoStructure+8],0 ; reserved |
mov dword [InfoStructure+12],0 ; 0 bytes to write (just create) |
mov dword [InfoStructure+16],0 ; NULL data pointer (no data) |
mov dword [InfoStructure+20],0 ; reserved |
mov dword [InfoStructure+21],esi ; pointer to the file name |
mcall 70, InfoStructure |
test eax,eax |
jz .out |
stc |
.out: |
popa |
ret |
;------------------------------------------------ |
;******************************************** |
;* input: esi = pointer to the file name * |
;* edx = pointer to data buffer * |
296,42 → 278,38 |
;******************************************** |
|
WriteToFile: |
push ebx |
mov dword [InfoStructure], 3 ; write to file |
mov eax, [filepos] |
mov dword [InfoStructure+4], eax ; lower position addr |
mov dword [InfoStructure+8], 0 ; upper position addr (0 for FAT) |
mov dword [InfoStructure+12], ecx ; number of bytes to write |
mov dword [InfoStructure+16], edx ; pointer to data buffer |
mov dword [InfoStructure+20], 0 ; reserved |
mov dword [InfoStructure+21], esi ; pointer to the file name |
mcall 70, InfoStructure |
clc |
test eax, eax |
jz .out |
stc |
.out: |
pop ebx |
ret |
|
|
push ebx |
mov dword [InfoStructure],3 ; write to file |
mov eax, [filepos] |
mov dword [InfoStructure+4],eax ; lower position addr |
mov dword [InfoStructure+8],0 ; upper position addr (0 for FAT) |
mov dword [InfoStructure+12],ecx ; number of bytes to write |
mov dword [InfoStructure+16],edx ; pointer to data buffer |
mov dword [InfoStructure+20],0 ; reserved |
mov dword [InfoStructure+21],esi ; pointer to the file name |
mcall 70, InfoStructure |
clc |
test eax,eax |
jz .out |
stc |
.out: |
pop ebx |
ret |
;-------------------------------------------------- |
InfoStructure: |
dd 0x0 ; subfunction number |
dd 0x0 ; position in the file in bytes |
dd 0x0 ; upper part of the position address |
dd 0x0 ; number of bytes to read |
dd 0x0 ; pointer to the buffer to write data |
db 0 |
dd 0 ; pointer to the filename |
dd 0x0 ; subfunction number |
dd 0x0 ; position in the file in bytes |
dd 0x0 ; upper part of the position address |
dd 0x0 ; number of bytes to read |
dd 0x0 ; pointer to the buffer to write data |
db 0 |
dd 0 ; pointer to the filename |
|
filepos dd 0 |
filepos dd 0 |
default_filename db '/sys/boardlog.txt',0 |
tmp db 0 |
tmp db 0 |
end if |
|
|
|
|
;------------------------------------------------------------------------------ |
krnl_msg db 'K : ' |
duk db 'KernUser' |
|
340,33 → 318,43 |
; 11,11 > 0,-1 |
; 5,11 > 0,-1 |
if lang eq ru |
title db '®áª ®â« ¤ª¨ ¨ á®®¡é¥¨©',0 |
title db '®áª ®â« ¤ª¨ ¨ á®®¡é¥¨©',0 |
else if lang eq en |
title db 'General debug & message board',0 |
title db 'General debug & message board',0 |
else |
title db 'Allgemeines debug- & nachrichtenboard',0 |
title db 'Allgemeines debug- & nachrichtenboard',0 |
end if |
krnl_cnt dd 0 |
vmode dd 1 |
targ dd text2 |
krnl_cnt dd 0 |
vmode dd 1 |
targ dd text2 |
;------------------------------------------------------------------------------ |
I_END: |
offs dd ? |
flag rb 1 |
rd 2 |
; x1pos dd ? |
; y1pos dd ? |
text1 rb 80*(MAXSTRINGS+1) |
tmp1 db ? |
rd 2 |
; x2pos dd ? |
; y2pos dd ? |
text2 rb 80*(MAXSTRINGS+1) |
tmp2 db ? |
xstart dd ? |
sc system_colors |
;------------------------------------------------------------------------------ |
offs dd ? |
flag rb 1 |
rd 2 |
;x1pos dd ? |
;y1pos dd ? |
text1 rb 80*(MAXSTRINGS+1) |
tmp1 db ? |
rd 2 |
;x2pos dd ? |
;y2pos dd ? |
text2 rb 80*(MAXSTRINGS+1) |
tmp2 db ? |
xstart dd ? |
|
sc system_colors |
|
i_end: |
|
filename rb 256 |
filename rb 256 |
;------------------------------------------------------------------------------ |
align 4 |
stackbuf rb 2000h |
procinfo: |
rb 1024 |
;------------------------------------------------------------------------------ |
align 4 |
stackbuf rb 2000h |
;------------------------------------------------------------------------------ |
mem: |