Subversion Repositories Kolibri OS

Rev

Rev 6741 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. txt_zv db '*',0
  3. txt_sp db ' ',0
  4. txt_buf db '1234',0
  5.         rd 1
  6.  
  7. buf_param rb 80
  8.  
  9. macro cStr dest,txt
  10. {
  11. local .end_t
  12. local .m_txt
  13. jmp .end_t
  14. align 4
  15.         .m_txt db txt,0
  16. align 4
  17. .end_t:
  18. if dest eq
  19.         mov eax,.m_txt
  20. else
  21.         mov dest,.m_txt
  22. end if
  23. }
  24.  
  25. ;for debug
  26. tz1 db 'next_in',13,10,0
  27. tz2 db 'avail_in',13,10,0
  28. tz3 db 'total_in',13,10,0
  29. tz4 db 'next_out',13,10,0
  30. tz5 db 'avail_out',13,10,0
  31. tz6 db 'total_out',13,10,0
  32. tz7 db 'msg',13,10,0
  33. tz8 db 'state',13,10,0
  34. tz9 db 'zalloc',13,10,0
  35. tz10 db 'zfree',13,10,0
  36. tz11 db 'opaque',13,10,0
  37. tz12 db 'data_type',13,10,0
  38. tz13 db 'adler',13,10,0
  39. tz14 db 'reserved',13,10,0
  40.  
  41. sv_2:
  42. dd z_stream.next_in,4,tz1
  43. dd z_stream.avail_in,4,tz2
  44. dd z_stream.total_in,4,tz3
  45. dd z_stream.next_out,4,tz4
  46. dd z_stream.avail_out,4,tz5
  47. dd z_stream.total_out,4,tz6
  48. dd z_stream.msg,4,tz7
  49. dd z_stream.state,4,tz8
  50. dd z_stream.zalloc,4,tz9
  51. dd z_stream.zfree,4,tz10
  52. dd z_stream.opaque,4,tz11
  53. dd z_stream.data_type,4,tz12
  54. dd z_stream.adler,4,tz13
  55. dd z_stream.reserved,4,tz14
  56. dd 0,0
  57.  
  58. ta1 db 'strm',13,10,0
  59. ta2 db 'status',13,10,0
  60. ta3 db 'pending_buf',13,10,0
  61. ta4 db 'pending_buf_size',13,10,0
  62. ta5 db 'pending_out',13,10,0
  63. ta6 db 'pending',13,10,0
  64. ta7 db 'wrap',13,10,0
  65. ta8 db 'gzhead',13,10,0
  66. ta9 db 'gzindex',13,10,0
  67. ta10 db 'method',13,10,0
  68. ta11 db 'last_flush',13,10,0
  69. ta12 db 'w_size',13,10,0
  70. ta13 db 'w_bits',13,10,0
  71. ta14 db 'w_mask',13,10,0
  72. ta15 db 'window',13,10,0
  73. ta16 db 'window_size',13,10,0
  74. ta17 db 'prev',13,10,0
  75. ta18 db 'head',13,10,0
  76. ta19 db 'ins_h',13,10,0
  77. ta20 db 'hash_size',13,10,0
  78. ta21 db 'hash_bits',13,10,0
  79. ta22 db 'hash_mask',13,10,0
  80. ta23 db 'hash_shift',13,10,0
  81. ta24 db 'block_start',13,10,0
  82. ta25 db 'match_length',13,10,0
  83. ta26 db 'prev_match',13,10,0
  84. ta27 db 'match_available',13,10,0
  85. ta28 db 'strstart',13,10,0
  86. ta29 db 'match_start',13,10,0
  87. ta30 db 'lookahead',13,10,0
  88. ta31 db 'prev_length',13,10,0
  89. ta32 db 'max_chain_length',13,10,0
  90. ta33 db 'max_lazy_match',13,10,0
  91. ta34 db 'level',13,10,0
  92. ta35 db 'strategy',13,10,0
  93. ta36 db 'good_match',13,10,0
  94. ta37 db 'nice_match',13,10,0
  95. ta38 db 'dyn_ltree',13,10,0
  96. ta39 db 'dyn_dtree',13,10,0
  97. ta40 db 'bl_tree',13,10,0
  98. ta41 db 'l_desc',13,10,0
  99. ta42 db 'd_desc',13,10,0
  100. ta43 db 'bl_desc',13,10,0
  101. ta44 db 'bl_count',13,10,0
  102. ta45 db 'heap',13,10,0
  103. ta46 db 'heap_len',13,10,0
  104. ta47 db 'heap_max',13,10,0
  105. ta48 db 'depth',13,10,0
  106. ta49 db 'l_buf',13,10,0
  107. ta50 db 'lit_bufsize',13,10,0
  108. ta51 db 'last_lit',13,10,0
  109. ta52 db 'd_buf',13,10,0
  110. ta53 db 'opt_len',13,10,0
  111. ta54 db 'static_len',13,10,0
  112. ta55 db 'matches',13,10,0
  113. ta56 db 'insert',13,10,0
  114. ; db 'compressed_len',13,10,0
  115. ; db 'bits_sent',13,10,0
  116. ta59 db 'bi_buf',13,10,0
  117. ta60 db 'bi_valid',13,10,0
  118. ta61 db 'high_water',13,10,0
  119.  
  120. sv_3:
  121. dd deflate_state.strm,4,ta1
  122. dd deflate_state.status,4,ta2
  123. dd deflate_state.pending_buf,4,ta3
  124. dd deflate_state.pending_buf_size,4,ta4
  125. dd deflate_state.pending_out,4,ta5
  126. dd deflate_state.pending,4,ta6
  127. dd deflate_state.wrap,4,ta7
  128. dd deflate_state.gzhead,4,ta8
  129. dd deflate_state.gzindex,4,ta9
  130. dd deflate_state.method,1,ta10
  131. dd deflate_state.last_flush,4,ta11
  132. dd deflate_state.w_size,4,ta12
  133. dd deflate_state.w_bits,4,ta13
  134. dd deflate_state.w_mask,4,ta14
  135. dd deflate_state.window,4,ta15
  136. dd deflate_state.window_size,4,ta16
  137. dd deflate_state.prev,4,ta17
  138. dd deflate_state.head,4,ta18
  139. dd deflate_state.ins_h,4,ta19
  140. dd deflate_state.hash_size,4,ta20
  141. dd deflate_state.hash_bits,4,ta21
  142. dd deflate_state.hash_mask,4,ta22
  143. dd deflate_state.hash_shift,4,ta23
  144. dd deflate_state.block_start,4,ta24
  145. dd deflate_state.match_length,4,ta25
  146. dd deflate_state.prev_match,4,ta26
  147. dd deflate_state.match_available,4,ta27
  148. dd deflate_state.strstart,4,ta28
  149. dd deflate_state.match_start,4,ta29
  150. dd deflate_state.lookahead,4,ta30
  151. dd deflate_state.prev_length,4,ta31
  152. dd deflate_state.max_chain_length,4,ta32
  153. dd deflate_state.max_lazy_match,4,ta33
  154. dd deflate_state.level,2,ta34
  155. dd deflate_state.strategy,2,ta35
  156. dd deflate_state.good_match,4,ta36
  157. dd deflate_state.nice_match,4,ta37
  158. dd deflate_state.dyn_ltree,((2*HEAP_SIZE) shl 16)+2,ta38
  159. dd deflate_state.dyn_dtree,((2*(2*D_CODES+1)) shl 16)+2,ta39
  160. dd deflate_state.bl_tree,((2*(2*BL_CODES+1)) shl 16)+2,ta40
  161. dd deflate_state.l_desc,(3 shl 16)+4,ta41
  162. dd deflate_state.d_desc,(3 shl 16)+4,ta42
  163. dd deflate_state.bl_desc,(3 shl 16)+4,ta43
  164. dd deflate_state.bl_count,((MAX_BITS+1) shl 16)+2,ta44
  165. dd deflate_state.heap,((2*L_CODES+1) shl 16)+2,ta45
  166. dd deflate_state.heap_len,4,ta46
  167. dd deflate_state.heap_max,4,ta47
  168. dd deflate_state.depth,((2*L_CODES+1) shl 16)+1,ta48
  169. dd deflate_state.l_buf,4,ta49
  170. dd deflate_state.lit_bufsize,4,ta50
  171. dd deflate_state.last_lit,4,ta51
  172. dd deflate_state.d_buf,4,ta52
  173. dd deflate_state.opt_len,4,ta53
  174. dd deflate_state.static_len,4,ta54
  175. dd deflate_state.matches,4,ta55
  176. dd deflate_state.insert,4,ta56
  177. ;if DEBUG eq 1
  178. ;dd deflate_state.compressed_len
  179. ;dd deflate_state.bits_sent
  180. ;end if
  181. dd deflate_state.bi_buf,2,ta59
  182. dd deflate_state.bi_valid,4,ta60
  183. dd deflate_state.high_water,4,ta61
  184. dd 0,0
  185.  
  186. align 4
  187. proc dbg_print, fun:dword, mes:dword
  188. pushad
  189.         mov eax,SF_BOARD
  190.         mov ebx,SSF_DEBUG_WRITE
  191.  
  192.         mov esi,[fun]
  193.         cmp esi,0
  194.         je .end0
  195.         @@:
  196.                 mov cl,byte[esi]
  197.                 int 0x40
  198.                 inc esi
  199.                 cmp byte[esi],0
  200.                 jne @b
  201.         mov cl,':'
  202.         int 0x40
  203.         mov cl,' '
  204.         int 0x40
  205.         .end0:
  206.         mov esi,[mes]
  207.         cmp esi,0
  208.         je .end_f
  209.         @@:
  210.                 mov cl,byte[esi]
  211.                 cmp cl,0
  212.                 je .end_f
  213.                 int 0x40
  214.                 inc esi
  215.                 jmp @b
  216.         .end_f:
  217. popad
  218.         ret
  219. endp
  220.  
  221. ;input:
  222. ; zif - 1...8
  223. align 4
  224. proc hex_in_str, buf:dword,val:dword,zif:dword
  225. pushad
  226.         mov edi,dword[buf]
  227.         mov ecx,dword[zif]
  228.         add edi,ecx
  229.         dec edi
  230.         mov ebx,dword[val]
  231.  
  232.         .cycle:
  233.                 mov al,bl
  234.                 and al,0xf
  235.                 cmp al,10
  236.                 jl @f
  237.                         add al,'a'-'0'-10
  238.                 @@:
  239.                 add al,'0'
  240.                 mov byte[edi],al
  241.                 dec edi
  242.                 shr ebx,4
  243.         loop .cycle
  244. popad
  245.         ret
  246. endp
  247.  
  248. ;output:
  249. ; eax = strlen
  250. align 4
  251. proc strlen, str1:dword
  252.         mov eax,[str1]
  253.         @@:
  254.                 cmp byte[eax],0
  255.                 je @f
  256.                 inc eax
  257.                 jmp @b
  258.         @@:
  259.         sub eax,[str1]
  260.         ret
  261. endp
  262.  
  263. align 4
  264. proc str_format_dbg, buf:dword, fmt:dword, p1:dword
  265. pushad
  266.         mov esi,[fmt]
  267.         mov edi,[buf]
  268.         mov ecx,80-1
  269.         .cycle0:
  270.                 lodsb
  271.                 cmp al,'%'
  272.                 jne .no_param
  273.                         lodsb
  274.                         dec ecx
  275.                         cmp al,0
  276.                         je .cycle0end
  277.                         cmp al,'d'
  278.                         je @f
  279.                         cmp al,'u'
  280.                         je @f
  281.                         cmp al,'l'
  282.                         je .end1
  283.                                 jmp .end0
  284.                         .end1: ;%lu %lx
  285.                                 lodsb
  286.                                 dec ecx
  287.                                 cmp al,'u'
  288.                                 jne .end0
  289.                         @@:
  290.                                 mov eax,[p1]
  291.                                 stdcall convert_int_to_str,ecx
  292.                                 xor al,al
  293.                                 repne scasb
  294.                                 dec edi
  295.                         .end0:
  296.                         loop .cycle0
  297.                 .no_param:
  298.                 stosb
  299.                 cmp al,0
  300.                 je .cycle0end
  301.                 loop .cycle0
  302.         .cycle0end:
  303.         xor al,al
  304.         stosb
  305.         stdcall dbg_print,txt_sp,[buf]
  306. popad
  307.         ret
  308. endp
  309.  
  310. align 4
  311. proc debug_fields, saddr:dword, form:dword
  312. locals
  313.         nl_array dd ?
  314. endl
  315. pushad
  316.         mov edi,[saddr]
  317.         cmp edi,0
  318.         je .end_f
  319.         mcall SF_BOARD,SSF_DEBUG_WRITE,13
  320.         mcall ,,10
  321.         mov eax,[form]
  322. align 4
  323.         .cycle0:
  324.                 mov ebx,[eax+4]
  325.                 mov ecx,ebx
  326.                 and ebx,0xffff
  327.                 cmp ebx,0
  328.                 je .end_f
  329.                 mov esi,ebx
  330.                 shl ebx,1
  331.                 shr ecx,16
  332.                 cmp ecx,0
  333.                 je .end0
  334.                         ;if array
  335.                         stdcall dbg_print,0,[eax+8]
  336.                         mov edx,61 ;size text line
  337.                         mov dword[nl_array],0
  338.                         .cycle2:
  339.                                 inc dword[nl_array]
  340.                                 sub edx,ebx
  341.                                 sub edx,2 ;': '
  342.                                 cmp edx,3
  343.                                 jg .cycle2
  344.                         mov edx,edi
  345.                         add edx,[eax]
  346.                         push eax
  347.                         .nl_i:
  348.                         mov eax,[nl_array]
  349.                         mov byte[ebx+txt_buf],0 ;конец числа
  350.                         .cycle1:
  351.                                 stdcall hex_in_str,txt_buf,[edx],ebx
  352.                                 add edx,esi ;move next value
  353.                                
  354.                                 push edi
  355.                                 mov edi,txt_buf
  356.                                 cmp byte[edi],'0'
  357.                                 jne @f
  358.                                         inc edi
  359.                                 cmp byte[edi],'0'
  360.                                 jne @f
  361.                                         inc edi
  362.                                 cmp byte[edi],'0'
  363.                                 jne @f
  364.                                         inc edi
  365.                                 cmp byte[edi],'0'
  366.                                 jne @f
  367.                                         inc edi
  368.                                 @@:
  369.                                 cmp byte[edi],0
  370.                                 jne @f
  371.                                         dec edi
  372.                                 @@:
  373.                                 stdcall dbg_print,edi,0
  374.                                 pop edi
  375.                                
  376.                                 ;stdcall dbg_print,txt_buf,0
  377.                                 dec eax
  378.                                 jz .nl
  379.                                 loop .cycle1
  380.                         .nl:
  381.                         push ebx ecx
  382.                         mcall SF_BOARD,SSF_DEBUG_WRITE,13
  383.                         mcall ,,10
  384.                         pop ecx ebx
  385.                         dec ecx
  386.                         cmp ecx,0
  387.                         jg .nl_i
  388.                         pop eax
  389.                         add eax,12
  390.                         jmp .cycle0
  391.                 .end0:
  392.                 mov edx,edi
  393.                 add edx,[eax]
  394.                 stdcall hex_in_str,txt_buf,[edx],ebx
  395.                 mov byte[ebx+txt_buf],0 ;конец числа
  396.                 stdcall dbg_print,txt_buf,[eax+8]
  397.                 add eax,12
  398.                 jmp .cycle0
  399. .end_f:
  400.         mcall SF_BOARD,SSF_DEBUG_WRITE,13
  401.         mcall ,,10
  402. popad
  403.         ret
  404. endp
  405.  
  406. ;input:
  407. ; eax - число
  408. ; edi - буфер для строки
  409. ; len - длинна буфера
  410. ;output:
  411. align 4
  412. proc convert_int_to_str, len:dword
  413. pushad
  414.         mov esi,[len]
  415.         add esi,edi
  416.         dec esi
  417.         call .str
  418. popad
  419.         ret
  420. endp
  421.  
  422. align 4
  423. .str:
  424.         mov ecx,0x0a
  425.         cmp eax,ecx
  426.         jb @f
  427.                 xor edx,edx
  428.                 div ecx
  429.                 push edx
  430.                 call .str
  431.                 pop eax
  432.         @@:
  433.         cmp edi,esi
  434.         jge @f
  435.                 or al,0x30
  436.                 stosb
  437.                 mov byte[edi],0
  438.         @@:
  439.         ret
  440.  
  441.