0,0 → 1,440 |
|
txt_zv db '*',0 |
txt_sp db ' ',0 |
txt_buf db '1234',0 |
rd 1 |
|
buf_param rb 80 |
|
macro cStr dest,txt |
{ |
local .end_t |
local .m_txt |
jmp .end_t |
align 4 |
.m_txt db txt,0 |
align 4 |
.end_t: |
if dest eq |
mov eax,.m_txt |
else |
mov dest,.m_txt |
end if |
} |
|
;for debug |
tz1 db 'next_in',13,10,0 |
tz2 db 'avail_in',13,10,0 |
tz3 db 'total_in',13,10,0 |
tz4 db 'next_out',13,10,0 |
tz5 db 'avail_out',13,10,0 |
tz6 db 'total_out',13,10,0 |
tz7 db 'msg',13,10,0 |
tz8 db 'state',13,10,0 |
tz9 db 'zalloc',13,10,0 |
tz10 db 'zfree',13,10,0 |
tz11 db 'opaque',13,10,0 |
tz12 db 'data_type',13,10,0 |
tz13 db 'adler',13,10,0 |
tz14 db 'reserved',13,10,0 |
|
sv_2: |
dd z_stream.next_in,4,tz1 |
dd z_stream.avail_in,2,tz2 |
dd z_stream.total_in,4,tz3 |
dd z_stream.next_out,4,tz4 |
dd z_stream.avail_out,2,tz5 |
dd z_stream.total_out,4,tz6 |
dd z_stream.msg,4,tz7 |
dd z_stream.state,4,tz8 |
dd z_stream.zalloc,4,tz9 |
dd z_stream.zfree,4,tz10 |
dd z_stream.opaque,4,tz11 |
dd z_stream.data_type,2,tz12 |
dd z_stream.adler,4,tz13 |
dd z_stream.reserved,4,tz14 |
dd 0,0 |
|
ta1 db 'strm',13,10,0 |
ta2 db 'status',13,10,0 |
ta3 db 'pending_buf',13,10,0 |
ta4 db 'pending_buf_size',13,10,0 |
ta5 db 'pending_out',13,10,0 |
ta6 db 'pending',13,10,0 |
ta7 db 'wrap',13,10,0 |
ta8 db 'gzhead',13,10,0 |
ta9 db 'gzindex',13,10,0 |
ta10 db 'method',13,10,0 |
ta11 db 'last_flush',13,10,0 |
ta12 db 'w_size',13,10,0 |
ta13 db 'w_bits',13,10,0 |
ta14 db 'w_mask',13,10,0 |
ta15 db 'window',13,10,0 |
ta16 db 'window_size',13,10,0 |
ta17 db 'prev',13,10,0 |
ta18 db 'head',13,10,0 |
ta19 db 'ins_h',13,10,0 |
ta20 db 'hash_size',13,10,0 |
ta21 db 'hash_bits',13,10,0 |
ta22 db 'hash_mask',13,10,0 |
ta23 db 'hash_shift',13,10,0 |
ta24 db 'block_start',13,10,0 |
ta25 db 'match_length',13,10,0 |
ta26 db 'prev_match',13,10,0 |
ta27 db 'match_available',13,10,0 |
ta28 db 'strstart',13,10,0 |
ta29 db 'match_start',13,10,0 |
ta30 db 'lookahead',13,10,0 |
ta31 db 'prev_length',13,10,0 |
ta32 db 'max_chain_length',13,10,0 |
ta33 db 'max_lazy_match',13,10,0 |
ta34 db 'level',13,10,0 |
ta35 db 'strategy',13,10,0 |
ta36 db 'good_match',13,10,0 |
ta37 db 'nice_match',13,10,0 |
ta38 db 'dyn_ltree',13,10,0 |
ta39 db 'dyn_dtree',13,10,0 |
ta40 db 'bl_tree',13,10,0 |
ta41 db 'l_desc',13,10,0 |
ta42 db 'd_desc',13,10,0 |
ta43 db 'bl_desc',13,10,0 |
ta44 db 'bl_count',13,10,0 |
ta45 db 'heap',13,10,0 |
ta46 db 'heap_len',13,10,0 |
ta47 db 'heap_max',13,10,0 |
ta48 db 'depth',13,10,0 |
ta49 db 'l_buf',13,10,0 |
ta50 db 'lit_bufsize',13,10,0 |
ta51 db 'last_lit',13,10,0 |
ta52 db 'd_buf',13,10,0 |
ta53 db 'opt_len',13,10,0 |
ta54 db 'static_len',13,10,0 |
ta55 db 'matches',13,10,0 |
ta56 db 'insert',13,10,0 |
; db 'compressed_len',13,10,0 |
; db 'bits_sent',13,10,0 |
ta59 db 'bi_buf',13,10,0 |
ta60 db 'bi_valid',13,10,0 |
ta61 db 'high_water',13,10,0 |
|
sv_3: |
dd deflate_state.strm,4,ta1 |
dd deflate_state.status,4,ta2 |
dd deflate_state.pending_buf,4,ta3 |
dd deflate_state.pending_buf_size,4,ta4 |
dd deflate_state.pending_out,4,ta5 |
dd deflate_state.pending,2,ta6 |
dd deflate_state.wrap,4,ta7 |
dd deflate_state.gzhead,4,ta8 |
dd deflate_state.gzindex,4,ta9 |
dd deflate_state.method,1,ta10 |
dd deflate_state.last_flush,4,ta11 |
dd deflate_state.w_size,4,ta12 |
dd deflate_state.w_bits,4,ta13 |
dd deflate_state.w_mask,4,ta14 |
dd deflate_state.window,4,ta15 |
dd deflate_state.window_size,4,ta16 |
dd deflate_state.prev,4,ta17 |
dd deflate_state.head,4,ta18 |
dd deflate_state.ins_h,4,ta19 |
dd deflate_state.hash_size,4,ta20 |
dd deflate_state.hash_bits,4,ta21 |
dd deflate_state.hash_mask,4,ta22 |
dd deflate_state.hash_shift,4,ta23 |
dd deflate_state.block_start,4,ta24 |
dd deflate_state.match_length,4,ta25 |
dd deflate_state.prev_match,4,ta26 |
dd deflate_state.match_available,4,ta27 |
dd deflate_state.strstart,4,ta28 |
dd deflate_state.match_start,4,ta29 |
dd deflate_state.lookahead,4,ta30 |
dd deflate_state.prev_length,4,ta31 |
dd deflate_state.max_chain_length,4,ta32 |
dd deflate_state.max_lazy_match,4,ta33 |
dd deflate_state.level,2,ta34 |
dd deflate_state.strategy,2,ta35 |
dd deflate_state.good_match,4,ta36 |
dd deflate_state.nice_match,4,ta37 |
dd deflate_state.dyn_ltree,((2*HEAP_SIZE) shl 16)+2,ta38 |
dd deflate_state.dyn_dtree,((2*(2*D_CODES+1)) shl 16)+2,ta39 |
dd deflate_state.bl_tree,((2*(2*BL_CODES+1)) shl 16)+2,ta40 |
dd deflate_state.l_desc,(3 shl 16)+4,ta41 |
dd deflate_state.d_desc,(3 shl 16)+4,ta42 |
dd deflate_state.bl_desc,(3 shl 16)+4,ta43 |
dd deflate_state.bl_count,((MAX_BITS+1) shl 16)+2,ta44 |
dd deflate_state.heap,((2*L_CODES+1) shl 16)+2,ta45 |
dd deflate_state.heap_len,4,ta46 |
dd deflate_state.heap_max,4,ta47 |
dd deflate_state.depth,((2*L_CODES+1) shl 16)+1,ta48 |
dd deflate_state.l_buf,4,ta49 |
dd deflate_state.lit_bufsize,4,ta50 |
dd deflate_state.last_lit,4,ta51 |
dd deflate_state.d_buf,4,ta52 |
dd deflate_state.opt_len,4,ta53 |
dd deflate_state.static_len,4,ta54 |
dd deflate_state.matches,4,ta55 |
dd deflate_state.insert,4,ta56 |
;if DEBUG eq 1 |
;dd deflate_state.compressed_len |
;dd deflate_state.bits_sent |
;end if |
dd deflate_state.bi_buf,2,ta59 |
dd deflate_state.bi_valid,4,ta60 |
dd deflate_state.high_water,4,ta61 |
dd 0,0 |
|
align 4 |
proc dbg_print, fun:dword, mes:dword |
pushad |
mov eax,SF_BOARD |
mov ebx,SSF_DEBUG_WRITE |
|
mov esi,[fun] |
cmp esi,0 |
je .end0 |
@@: |
mov cl,byte[esi] |
int 0x40 |
inc esi |
cmp byte[esi],0 |
jne @b |
mov cl,':' |
int 0x40 |
mov cl,' ' |
int 0x40 |
.end0: |
mov esi,[mes] |
cmp esi,0 |
je .end_f |
@@: |
mov cl,byte[esi] |
cmp cl,0 |
je .end_f |
int 0x40 |
inc esi |
jmp @b |
.end_f: |
popad |
ret |
endp |
|
;input: |
; zif - 1...8 |
align 4 |
proc hex_in_str, buf:dword,val:dword,zif:dword |
pushad |
mov edi,dword[buf] |
mov ecx,dword[zif] |
add edi,ecx |
dec edi |
mov ebx,dword[val] |
|
.cycle: |
mov al,bl |
and al,0xf |
cmp al,10 |
jl @f |
add al,'a'-'0'-10 |
@@: |
add al,'0' |
mov byte[edi],al |
dec edi |
shr ebx,4 |
loop .cycle |
popad |
ret |
endp |
|
;output: |
; eax = strlen |
align 4 |
proc strlen, str1:dword |
mov eax,[str1] |
@@: |
cmp byte[eax],0 |
je @f |
inc eax |
jmp @b |
@@: |
sub eax,[str1] |
ret |
endp |
|
align 4 |
proc str_format_dbg, buf:dword, fmt:dword, p1:dword |
pushad |
mov esi,[fmt] |
mov edi,[buf] |
mov ecx,80-1 |
.cycle0: |
lodsb |
cmp al,'%' |
jne .no_param |
lodsb |
dec ecx |
cmp al,0 |
je .cycle0end |
cmp al,'d' |
je @f |
cmp al,'u' |
je @f |
cmp al,'l' |
je .end1 |
jmp .end0 |
.end1: ;%lu %lx |
lodsb |
dec ecx |
cmp al,'u' |
jne .end0 |
@@: |
mov eax,[p1] |
stdcall convert_int_to_str,ecx |
xor al,al |
repne scasb |
dec edi |
.end0: |
loop .cycle0 |
.no_param: |
stosb |
cmp al,0 |
je .cycle0end |
loop .cycle0 |
.cycle0end: |
xor al,al |
stosb |
stdcall dbg_print,txt_sp,[buf] |
popad |
ret |
endp |
|
align 4 |
proc debug_fields, saddr:dword, form:dword |
locals |
nl_array dd ? |
endl |
pushad |
mov edi,[saddr] |
cmp edi,0 |
je .end_f |
mcall SF_BOARD,SSF_DEBUG_WRITE,13 |
mcall ,,10 |
mov eax,[form] |
align 4 |
.cycle0: |
mov ebx,[eax+4] |
mov ecx,ebx |
and ebx,0xffff |
cmp ebx,0 |
je .end_f |
mov esi,ebx |
shl ebx,1 |
shr ecx,16 |
cmp ecx,0 |
je .end0 |
;if array |
stdcall dbg_print,0,[eax+8] |
mov edx,61 ;size text line |
mov dword[nl_array],0 |
.cycle2: |
inc dword[nl_array] |
sub edx,ebx |
sub edx,2 ;': ' |
cmp edx,3 |
jg .cycle2 |
mov edx,edi |
add edx,[eax] |
push eax |
.nl_i: |
mov eax,[nl_array] |
mov byte[ebx+txt_buf],0 ;конец числа |
.cycle1: |
stdcall hex_in_str,txt_buf,[edx],ebx |
add edx,esi ;move next value |
|
push edi |
mov edi,txt_buf |
cmp byte[edi],'0' |
jne @f |
inc edi |
cmp byte[edi],'0' |
jne @f |
inc edi |
cmp byte[edi],'0' |
jne @f |
inc edi |
cmp byte[edi],'0' |
jne @f |
inc edi |
@@: |
cmp byte[edi],0 |
jne @f |
dec edi |
@@: |
stdcall dbg_print,edi,0 |
pop edi |
|
;stdcall dbg_print,txt_buf,0 |
dec eax |
jz .nl |
loop .cycle1 |
.nl: |
push ebx ecx |
mcall SF_BOARD,SSF_DEBUG_WRITE,13 |
mcall ,,10 |
pop ecx ebx |
dec ecx |
cmp ecx,0 |
jg .nl_i |
pop eax |
add eax,12 |
jmp .cycle0 |
.end0: |
mov edx,edi |
add edx,[eax] |
stdcall hex_in_str,txt_buf,[edx],ebx |
mov byte[ebx+txt_buf],0 ;конец числа |
stdcall dbg_print,txt_buf,[eax+8] |
add eax,12 |
jmp .cycle0 |
.end_f: |
mcall SF_BOARD,SSF_DEBUG_WRITE,13 |
mcall ,,10 |
popad |
ret |
endp |
|
;input: |
; eax - число |
; edi - буфер для строки |
; len - длинна буфера |
;output: |
align 4 |
proc convert_int_to_str, len:dword |
pushad |
mov esi,[len] |
add esi,edi |
dec esi |
call .str |
popad |
ret |
endp |
|
align 4 |
.str: |
mov ecx,0x0a |
cmp eax,ecx |
jb @f |
xor edx,edx |
div ecx |
push edx |
call .str |
pop eax |
@@: |
cmp edi,esi |
jge @f |
or al,0x30 |
stosb |
mov byte[edi],0 |
@@: |
ret |
|