wenlin_db_scanner 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,38 @@
1
+ # Wenlin Reverse Engineering Log
2
+
3
+ I documented my reverse engineering efforts, so that I wouldn't have to keep
4
+ everything in my head. My notes are shared here, in the hope that they will be
5
+ helpful to others attempting similar things.
6
+
7
+ ## Inventory
8
+
9
+ The files in this directory are as follows.
10
+
11
+ * `notes.txt` - describes the .db file format
12
+ * `magic.txt` - the magic constants used to decode .db record data
13
+ * `code.asm` - annotated disassembly of the .db record extracting procedures
14
+
15
+ ## Method
16
+
17
+ I used the Mac build of Wenlin Dictionary, version 4.02. It should be fairly
18
+ easy to obtain.
19
+
20
+ The code was disassembled with the evaluation version of
21
+ [IDA Pro](http://www.hex-rays.com/products/ida/), which can be downloaded for
22
+ free. I made extensive use of the graph view, and of the variable naming
23
+ feature.
24
+
25
+ Fairly late (too late) in the process, I also used
26
+ [Affinic Debugger GUI](http://www.affinic.com/?page_id=109), which is a `gdb`
27
+ front-end. It can also be downloaded for free. I would have preferred to use
28
+ IDA's debugging features, but I couldn't figure out how to set a gdb server
29
+ on OSX 10.8 fast enough. I used the live debugger to prove or disprove the
30
+ hypotheses produced by the disassembly.
31
+
32
+ I also used the [Hex Fiend](http://ridiculousfish.com/hexfiend/) OSX hex editor
33
+ to take a look at the .db files.
34
+
35
+ At the end of the process, I learned about
36
+ [iosnoop](http://www.brendangregg.com/DTrace/iosnoop_example.html), which is
37
+ a DTrace script that traces filesystem operations. It is built into OSX, and it
38
+ might have been very useful, had I known about it.
@@ -0,0 +1,1616 @@
1
+ __text:0002B95E ; =============== S U B R O U T I N E =======================================
2
+ __text:0002B95E
3
+ __text:0002B95E ; Attributes: bp-based frame
4
+ __text:0002B95E
5
+ __text:0002B95E _FunnyMask proc near ; CODE XREF: _DecompressDBRec+49p
6
+ __text:0002B95E ; _CompressDBRec+43p
7
+ __text:0002B95E
8
+ __text:0002B95E returnValue = dword ptr -14h
9
+ __text:0002B95E recordTagCopy = byte ptr -10h
10
+ __text:0002B95E recordLengthCopy= word ptr -0Ch
11
+ __text:0002B95E recordLength = dword ptr 8
12
+ __text:0002B95E recordTag = dword ptr 0Ch
13
+ __text:0002B95E
14
+ __text:0002B95E push ebp
15
+ __text:0002B95F mov ebp, esp
16
+ __text:0002B961 sub esp, 18h
17
+ __text:0002B964 mov eax, [ebp+recordLength]
18
+ __text:0002B967 mov edx, [ebp+recordTag]
19
+ __text:0002B96A mov [ebp+recordLengthCopy], ax
20
+ __text:0002B96E mov [ebp+recordTagCopy], dl
21
+ __text:0002B971 movzx eax, ds:_versionOneDB
22
+ __text:0002B978 test al, al
23
+ __text:0002B97A jz short loc_2B990
24
+ __text:0002B97C movzx eax, [ebp+recordLengthCopy]
25
+ __text:0002B980 and eax, 7
26
+ __text:0002B983 shl eax, 3
27
+ __text:0002B986 add eax, offset _versionOneFunnyMasks
28
+ __text:0002B98B mov [ebp+returnValue], eax
29
+ __text:0002B98E jmp short loc_2B9CB
30
+ __text:0002B990 ; ---------------------------------------------------------------------------
31
+ __text:0002B990
32
+ __text:0002B990 loc_2B990: ; CODE XREF: _FunnyMask+1Cj
33
+ __text:0002B990 movzx eax, ds:_archiveDifferent
34
+ __text:0002B997 test al, al
35
+ __text:0002B999 jz short loc_2B9B9
36
+ __text:0002B99B movzx edx, [ebp+recordLengthCopy]
37
+ __text:0002B99F movzx eax, [ebp+recordTagCopy]
38
+ __text:0002B9A3 and eax, 1
39
+ __text:0002B9A6 lea eax, [edx+eax]
40
+ __text:0002B9A9 and eax, 7
41
+ __text:0002B9AC shl eax, 3
42
+ __text:0002B9AF add eax, offset _versionTwoFunnyMasks
43
+ __text:0002B9B4 mov [ebp+returnValue], eax
44
+ __text:0002B9B7 jmp short loc_2B9CB
45
+ __text:0002B9B9 ; ---------------------------------------------------------------------------
46
+ __text:0002B9B9
47
+ __text:0002B9B9 loc_2B9B9: ; CODE XREF: _FunnyMask+3Bj
48
+ __text:0002B9B9 movzx eax, [ebp+recordLengthCopy]
49
+ __text:0002B9BD and eax, 7
50
+ __text:0002B9C0 shl eax, 3
51
+ __text:0002B9C3 add eax, offset _versionTwoFunnyMasks
52
+ __text:0002B9C8 mov [ebp+returnValue], eax
53
+ __text:0002B9CB
54
+ __text:0002B9CB loc_2B9CB: ; CODE XREF: _FunnyMask+30j
55
+ __text:0002B9CB ; _FunnyMask+59j
56
+ __text:0002B9CB mov eax, [ebp+returnValue]
57
+ __text:0002B9CE leave
58
+ __text:0002B9CF retn
59
+ __text:0002B9CF _FunnyMask endp
60
+
61
+ __text:0002B901 ; =============== S U B R O U T I N E =======================================
62
+ __text:0002B901
63
+ __text:0002B901 ; Attributes: bp-based frame
64
+ __text:0002B901
65
+ __text:0002B901 _CrypOfs proc near ; CODE XREF: _DecompressDBRec+62p
66
+ __text:0002B901 ; _CompressDBRec+5Cp
67
+ __text:0002B901
68
+ __text:0002B901 returnValue = dword ptr -14h
69
+ __text:0002B901 recordTagCopy = byte ptr -10h
70
+ __text:0002B901 recordLengthCopy= word ptr -0Ch
71
+ __text:0002B901 recordLength = dword ptr 8
72
+ __text:0002B901 recordTag = dword ptr 0Ch
73
+ __text:0002B901
74
+ __text:0002B901 push ebp
75
+ __text:0002B902 mov ebp, esp
76
+ __text:0002B904 sub esp, 18h
77
+ __text:0002B907 mov eax, [ebp+recordLength]
78
+ __text:0002B90A mov edx, [ebp+recordTag]
79
+ __text:0002B90D mov [ebp+recordLengthCopy], ax
80
+ __text:0002B911 mov [ebp+recordTagCopy], dl
81
+ __text:0002B914 movzx eax, ds:_archiveDifferent
82
+ __text:0002B91B test al, al
83
+ __text:0002B91D jz short loc_2B94A
84
+ __text:0002B91F movzx eax, ds:_versionOneDB
85
+ __text:0002B926 test al, al
86
+ __text:0002B928 jnz short loc_2B94A
87
+ __text:0002B92A movzx eax, [ebp+recordLengthCopy]
88
+ __text:0002B92E mov edx, eax
89
+ __text:0002B930 movzx eax, [ebp+recordTagCopy]
90
+ __text:0002B934 and eax, 1
91
+ __text:0002B937 shl eax, 3
92
+ __text:0002B93A lea eax, [edx+eax]
93
+ __text:0002B93D movzx eax, al
94
+ __text:0002B940 mov edx, eax
95
+ __text:0002B942 and edx, 3Fh
96
+ __text:0002B945 mov [ebp+returnValue], edx
97
+ __text:0002B948 jmp short loc_2B959
98
+ __text:0002B94A ; ---------------------------------------------------------------------------
99
+ __text:0002B94A
100
+ __text:0002B94A loc_2B94A: ; CODE XREF: _CrypOfs+1Cj
101
+ __text:0002B94A ; _CrypOfs+27j
102
+ __text:0002B94A movzx eax, [ebp+recordLengthCopy]
103
+ __text:0002B94E movzx eax, al
104
+ __text:0002B951 mov edx, eax
105
+ __text:0002B953 and edx, 3Fh
106
+ __text:0002B956 mov [ebp+returnValue], edx
107
+ __text:0002B959
108
+ __text:0002B959 loc_2B959: ; CODE XREF: _CrypOfs+47j
109
+ __text:0002B959 mov eax, [ebp+returnValue]
110
+ __text:0002B95C leave
111
+ __text:0002B95D retn
112
+ __text:0002B95D _CrypOfs endp
113
+ __text:0002B95D
114
+ __text:0002B95E
115
+
116
+ __text:0002B8DB ; =============== S U B R O U T I N E =======================================
117
+ __text:0002B8DB
118
+ __text:0002B8DB ; Attributes: bp-based frame
119
+ __text:0002B8DB
120
+ __text:0002B8DB _CrypMask proc near ; CODE XREF: _DecompressDBRec+6Ap
121
+ __text:0002B8DB ; _CompressDBRec+64p
122
+ __text:0002B8DB
123
+ __text:0002B8DB cryptOffset = dword ptr -0Ch
124
+ __text:0002B8DB
125
+ __text:0002B8DB push ebp
126
+ __text:0002B8DC mov ebp, esp
127
+ __text:0002B8DE sub esp, 18h
128
+ __text:0002B8E1 movzx eax, ds:_versionOneDB
129
+ __text:0002B8E8 test al, al
130
+ __text:0002B8EA jz short loc_2B8F5
131
+ __text:0002B8EC mov [ebp+cryptOffset], offset _versionOneCrypMask
132
+ __text:0002B8F3 jmp short loc_2B8FC
133
+ __text:0002B8F5 ; ---------------------------------------------------------------------------
134
+ __text:0002B8F5
135
+ __text:0002B8F5 loc_2B8F5: ; CODE XREF: _CrypMask+Fj
136
+ __text:0002B8F5 mov [ebp+cryptOffset], offset _versionTwoCrypMask
137
+ __text:0002B8FC
138
+ __text:0002B8FC loc_2B8FC: ; CODE XREF: _CrypMask+18j
139
+ __text:0002B8FC mov eax, [ebp+cryptOffset]
140
+ __text:0002B8FF leave
141
+ __text:0002B900 retn
142
+ __text:0002B900 _CrypMask endp
143
+
144
+ __text:0002AB8C ; =============== S U B R O U T I N E =======================================
145
+ __text:0002AB8C
146
+ __text:0002AB8C ; Attributes: bp-based frame
147
+ __text:0002AB8C
148
+ __text:0002AB8C _DecompressDBRec proc near ; CODE XREF: _DBRecordReadIntoTextBuf+B3p
149
+ __text:0002AB8C
150
+ __text:0002AB8C returnValue = dword ptr -60h
151
+ __text:0002AB8C recordTagCopy = byte ptr -5Ch
152
+ __text:0002AB8C ziNumberLenBuffer= dword ptr -4Ch
153
+ __text:0002AB8C decompressedChar= byte ptr -45h
154
+ __text:0002AB8C fpCopy = dword ptr -40h
155
+ __text:0002AB8C recordLengthInBits2= dword ptr -38h
156
+ __text:0002AB8C recordLengthInBits= dword ptr -34h
157
+ __text:0002AB8C lineOffset = byte ptr -27h
158
+ __text:0002AB8C funnyMaskValue = dword ptr -24h
159
+ __text:0002AB8C cryptOffset = byte ptr -20h
160
+ __text:0002AB8C cryptMask = dword ptr -1Ch
161
+ __text:0002AB8C decompressedByte= word ptr -18h
162
+ __text:0002AB8C easyBufferAppendStat= word ptr -16h
163
+ __text:0002AB8C charOffset = dword ptr -14h
164
+ __text:0002AB8C mbCharLen = dword ptr -10h
165
+ __text:0002AB8C bufferAppendStat= word ptr -0Ah
166
+ __text:0002AB8C buffer = dword ptr 8
167
+ __text:0002AB8C fp = dword ptr 0Ch
168
+ __text:0002AB8C recordLength = dword ptr 10h
169
+ __text:0002AB8C recordTag = dword ptr 14h
170
+ __text:0002AB8C
171
+ __text:0002AB8C push ebp
172
+ __text:0002AB8D mov ebp, esp
173
+ __text:0002AB8F push edi
174
+ __text:0002AB90 sub esp, 74h
175
+ __text:0002AB93 mov eax, [ebp+recordTag]
176
+ __text:0002AB96 mov [ebp+recordTagCopy], al
177
+ __text:0002AB99 lea eax, [ebp+fpCopy]
178
+ __text:0002AB9C mov edi, eax
179
+ __text:0002AB9E cld
180
+ __text:0002AB9F mov edx, 0
181
+ __text:0002ABA4 mov eax, 0Ah
182
+ __text:0002ABA9 mov ecx, eax
183
+ __text:0002ABAB mov eax, edx
184
+ __text:0002ABAD rep stosd
185
+ __text:0002ABAF mov eax, [ebp+fp]
186
+ __text:0002ABB2 mov [ebp+fpCopy], eax
187
+ __text:0002ABB5 mov eax, [ebp+recordLength]
188
+ __text:0002ABB8 shl eax, 3
189
+ __text:0002ABBB mov [ebp+recordLengthInBits], eax
190
+ __text:0002ABBE mov eax, [ebp+recordLengthInBits]
191
+ __text:0002ABC1 mov [ebp+recordLengthInBits2], eax
192
+ __text:0002ABC4 movzx edx, [ebp+recordTagCopy]
193
+ __text:0002ABC8 mov eax, [ebp+recordLength]
194
+ __text:0002ABCB movzx eax, ax
195
+ __text:0002ABCE mov [esp+4], edx
196
+ __text:0002ABD2 mov [esp], eax
197
+ __text:0002ABD5 call _FunnyMask
198
+ __text:0002ABDA mov [ebp+funnyMaskValue], eax
199
+ __text:0002ABDD movzx edx, [ebp+recordTagCopy]
200
+ __text:0002ABE1 mov eax, [ebp+recordLength]
201
+ __text:0002ABE4 movzx eax, ax
202
+ __text:0002ABE7 mov [esp+4], edx
203
+ __text:0002ABEB mov [esp], eax
204
+ __text:0002ABEE call _CrypOfs
205
+ __text:0002ABF3 mov [ebp+cryptOffset], al
206
+ __text:0002ABF6 call _CrypMask
207
+ __text:0002ABFB mov [ebp+cryptMask], eax
208
+ __text:0002ABFE cmp [ebp+recordLength], 8
209
+ __text:0002AC02 jbe short loc_2AC0F
210
+ __text:0002AC04 movzx eax, ds:_versionOneDB
211
+ __text:0002AC0B test al, al
212
+ __text:0002AC0D jz short loc_2AC17
213
+ __text:0002AC0F
214
+ __text:0002AC0F loc_2AC0F: ; CODE XREF: _DecompressDBRec+76j
215
+ __text:0002AC0F mov [ebp+lineOffset], 9
216
+ __text:0002AC13 jmp short loc_2AC17
217
+ __text:0002AC15 ; ---------------------------------------------------------------------------
218
+ __text:0002AC15
219
+ __text:0002AC15 loc_2AC15: ; CODE XREF: _DecompressDBRec+F0j
220
+ __text:0002AC15 ; _DecompressDBRec+1D0j
221
+ __text:0002AC15 jmp short $+2
222
+ __text:0002AC17 ; ---------------------------------------------------------------------------
223
+ __text:0002AC17
224
+ __text:0002AC17 loc_2AC17: ; CODE XREF: _DecompressDBRec+81j
225
+ __text:0002AC17 ; _DecompressDBRec+87j ...
226
+ __text:0002AC17 lea eax, [ebp+fpCopy]
227
+ __text:0002AC1A mov [esp], eax
228
+ __text:0002AC1D call _DecompressByte
229
+ __text:0002AC22 mov [ebp+decompressedByte], ax
230
+ __text:0002AC26 cmp [ebp+decompressedByte], 0
231
+ __text:0002AC2B jg short loc_2AC4C
232
+ __text:0002AC2D cmp [ebp+decompressedByte], 0FFFFh
233
+ __text:0002AC32 jnz short loc_2AC40
234
+ __text:0002AC34 mov [ebp+returnValue], 0FFFFFFEDh
235
+ __text:0002AC3B jmp loc_2AD61
236
+ __text:0002AC40 ; ---------------------------------------------------------------------------
237
+ __text:0002AC40
238
+ __text:0002AC40 loc_2AC40: ; CODE XREF: _DecompressDBRec+A6j
239
+ __text:0002AC40 mov [ebp+returnValue], 0
240
+ __text:0002AC47 jmp loc_2AD61
241
+ __text:0002AC4C ; ---------------------------------------------------------------------------
242
+ __text:0002AC4C
243
+ __text:0002AC4C loc_2AC4C: ; CODE XREF: _DecompressDBRec+9Fj
244
+ __text:0002AC4C movsx eax, [ebp+decompressedByte]
245
+ __text:0002AC50 shr eax, 7
246
+ __text:0002AC53 xor eax, 1
247
+ __text:0002AC56 and eax, 1
248
+ __text:0002AC59 test al, al
249
+ __text:0002AC5B jz short loc_2AC8A
250
+ __text:0002AC5D movzx eax, [ebp+decompressedByte]
251
+ __text:0002AC61 movsx eax, al
252
+ __text:0002AC64 mov [esp+4], eax
253
+ __text:0002AC68 mov eax, [ebp+buffer]
254
+ __text:0002AC6B mov [esp], eax
255
+ __text:0002AC6E call _TBPutC
256
+ __text:0002AC73 mov [ebp+easyBufferAppendStat], ax
257
+ __text:0002AC77 cmp [ebp+easyBufferAppendStat], 0
258
+ __text:0002AC7C jz short loc_2AC15
259
+ __text:0002AC7E movsx eax, [ebp+easyBufferAppendStat]
260
+ __text:0002AC82 mov [ebp+returnValue], eax
261
+ __text:0002AC85 jmp loc_2AD61
262
+ __text:0002AC8A ; ---------------------------------------------------------------------------
263
+ __text:0002AC8A
264
+ __text:0002AC8A loc_2AC8A: ; CODE XREF: _DecompressDBRec+CFj
265
+ __text:0002AC8A movzx eax, [ebp+decompressedByte]
266
+ __text:0002AC8E mov [ebp+decompressedChar], al
267
+ __text:0002AC91 movzx eax, [ebp+decompressedByte]
268
+ __text:0002AC95 movsx eax, al
269
+ __text:0002AC98 mov [esp], eax
270
+ __text:0002AC9B call _MBCLenFromFirstByte
271
+ __text:0002ACA0 mov [ebp+mbCharLen], eax
272
+ __text:0002ACA3 mov [ebp+charOffset], 1
273
+ __text:0002ACAA jmp short loc_2ACDE
274
+ __text:0002ACAC ; ---------------------------------------------------------------------------
275
+ __text:0002ACAC
276
+ __text:0002ACAC loc_2ACAC: ; CODE XREF: _DecompressDBRec+158j
277
+ __text:0002ACAC lea eax, [ebp+fpCopy]
278
+ __text:0002ACAF mov [esp], eax
279
+ __text:0002ACB2 call _DecompressSixBits
280
+ __text:0002ACB7 mov [ebp+decompressedByte], ax
281
+ __text:0002ACBB cmp [ebp+decompressedByte], 0
282
+ __text:0002ACC0 jg short loc_2ACCE
283
+ __text:0002ACC2 mov [ebp+returnValue], 0FFFFDFFFh
284
+ __text:0002ACC9 jmp loc_2AD61
285
+ __text:0002ACCE ; ---------------------------------------------------------------------------
286
+ __text:0002ACCE
287
+ __text:0002ACCE loc_2ACCE: ; CODE XREF: _DecompressDBRec+134j
288
+ __text:0002ACCE mov edx, [ebp+charOffset]
289
+ __text:0002ACD1 movzx eax, [ebp+decompressedByte]
290
+ __text:0002ACD5 mov [ebp+edx+decompressedChar], al
291
+ __text:0002ACD9 lea eax, [ebp+charOffset]
292
+ __text:0002ACDC inc dword ptr [eax]
293
+ __text:0002ACDE
294
+ __text:0002ACDE loc_2ACDE: ; CODE XREF: _DecompressDBRec+11Ej
295
+ __text:0002ACDE mov eax, [ebp+charOffset]
296
+ __text:0002ACE1 cmp eax, [ebp+mbCharLen]
297
+ __text:0002ACE4 jb short loc_2ACAC
298
+ __text:0002ACE6 mov eax, [ebp+mbCharLen]
299
+ __text:0002ACE9 mov [ebp+eax+decompressedChar], 0
300
+ __text:0002ACEE lea eax, [ebp+ziNumberLenBuffer]
301
+ __text:0002ACF1 mov [esp+4], eax
302
+ __text:0002ACF5 lea eax, [ebp+decompressedChar]
303
+ __text:0002ACF8 mov [esp], eax
304
+ __text:0002ACFB call _ZiNumberLen
305
+ __text:0002AD00 cmp eax, 0FFFEh
306
+ __text:0002AD05 jz short loc_2AD0F
307
+ __text:0002AD07 mov eax, [ebp+ziNumberLenBuffer]
308
+ __text:0002AD0A cmp eax, [ebp+mbCharLen]
309
+ __text:0002AD0D jz short loc_2AD18
310
+ __text:0002AD0F
311
+ __text:0002AD0F loc_2AD0F: ; CODE XREF: _DecompressDBRec+179j
312
+ __text:0002AD0F mov [ebp+returnValue], 0FFFFDFFFh
313
+ __text:0002AD16 jmp short loc_2AD61
314
+ __text:0002AD18 ; ---------------------------------------------------------------------------
315
+ __text:0002AD18
316
+ __text:0002AD18 loc_2AD18: ; CODE XREF: _DecompressDBRec+181j
317
+ __text:0002AD18 mov [ebp+charOffset], 0
318
+ __text:0002AD1F jmp short loc_2AD54
319
+ __text:0002AD21 ; ---------------------------------------------------------------------------
320
+ __text:0002AD21
321
+ __text:0002AD21 loc_2AD21: ; CODE XREF: _DecompressDBRec+1CEj
322
+ __text:0002AD21 mov eax, [ebp+charOffset]
323
+ __text:0002AD24 movzx eax, [ebp+eax+decompressedChar]
324
+ __text:0002AD29 movsx eax, al
325
+ __text:0002AD2C mov [esp+4], eax
326
+ __text:0002AD30 mov eax, [ebp+buffer]
327
+ __text:0002AD33 mov [esp], eax
328
+ __text:0002AD36 call _TBPutC
329
+ __text:0002AD3B mov [ebp+bufferAppendStat], ax
330
+ __text:0002AD3F cmp [ebp+bufferAppendStat], 0
331
+ __text:0002AD44 jz short loc_2AD4F
332
+ __text:0002AD46 movsx eax, [ebp+bufferAppendStat]
333
+ __text:0002AD4A
334
+ __text:0002AD4A loc_2AD4A: ; DATA XREF: _KXRadicalFromZin+F7o
335
+ __text:0002AD4A mov [ebp+returnValue], eax
336
+ __text:0002AD4D jmp short loc_2AD61
337
+ __text:0002AD4F ; ---------------------------------------------------------------------------
338
+ __text:0002AD4F
339
+ __text:0002AD4F loc_2AD4F: ; CODE XREF: _DecompressDBRec+1B8j
340
+ __text:0002AD4F lea eax, [ebp+charOffset]
341
+ __text:0002AD52 inc dword ptr [eax]
342
+ __text:0002AD54
343
+ __text:0002AD54 loc_2AD54: ; CODE XREF: _DecompressDBRec+193j
344
+ __text:0002AD54 mov eax, [ebp+charOffset]
345
+ __text:0002AD57 cmp eax, [ebp+mbCharLen]
346
+ __text:0002AD5A jb short loc_2AD21
347
+ __text:0002AD5C jmp loc_2AC15
348
+ __text:0002AD61 ; ---------------------------------------------------------------------------
349
+ __text:0002AD61
350
+ __text:0002AD61 loc_2AD61: ; CODE XREF: _DecompressDBRec+AFj
351
+ __text:0002AD61 ; _DecompressDBRec+BBj ...
352
+ __text:0002AD61 mov eax, [ebp+returnValue]
353
+ __text:0002AD64 add esp, 74h
354
+ __text:0002AD67 pop edi
355
+ __text:0002AD68 leave
356
+ __text:0002AD69 retn
357
+ __text:0002AD69 _DecompressDBRec endp
358
+
359
+ __text:0002AD6A ; =============== S U B R O U T I N E =======================================
360
+ __text:0002AD6A
361
+ __text:0002AD6A ; Attributes: bp-based frame
362
+ __text:0002AD6A
363
+ __text:0002AD6A _DecompressByte proc near ; CODE XREF: _DecompressDBRec+91p
364
+ __text:0002AD6A
365
+ __text:0002AD6A currentBit = word ptr -1Eh
366
+ __text:0002AD6A returnValue = dword ptr -1Ch
367
+ __text:0002AD6A node = word ptr -0Ch
368
+ __text:0002AD6A currentBitCopy = word ptr -0Ah
369
+ __text:0002AD6A pStruct = dword ptr 8
370
+ __text:0002AD6A
371
+ __text:0002AD6A push ebp
372
+ __text:0002AD6B mov ebp, esp
373
+ __text:0002AD6D push ebx
374
+ __text:0002AD6E sub esp, 34h
375
+ __text:0002AD71 mov [ebp+node], 0FEh
376
+ __text:0002AD77
377
+ __text:0002AD77 loc_2AD77: ; CODE XREF: _DecompressByte+AAj
378
+ __text:0002AD77 mov eax, [ebp+pStruct]
379
+ __text:0002AD7A mov eax, [eax+4]
380
+ __text:0002AD7D and eax, 7
381
+ __text:0002AD80 test eax, eax
382
+ __text:0002AD82 jnz short loc_2AD95
383
+ __text:0002AD84 mov eax, [ebp+pStruct]
384
+ __text:0002AD87 mov [esp], eax
385
+ __text:0002AD8A call _GetBitX
386
+ __text:0002AD8F mov [ebp+currentBit], ax
387
+ __text:0002AD93 jmp short loc_2ADCD
388
+ __text:0002AD95 ; ---------------------------------------------------------------------------
389
+ __text:0002AD95
390
+ __text:0002AD95 loc_2AD95: ; CODE XREF: _DecompressByte+18j
391
+ __text:0002AD95 mov eax, [ebp+pStruct]
392
+ __text:0002AD98 movzx ebx, byte ptr [eax+1Ah]
393
+ __text:0002AD9C mov eax, [ebp+pStruct]
394
+ __text:0002AD9F mov edx, [eax+1Ch]
395
+ __text:0002ADA2 mov eax, [ebp+pStruct]
396
+ __text:0002ADA5 mov ecx, [eax+4]
397
+ __text:0002ADA8 mov eax, ecx
398
+ __text:0002ADAA movzx eax, ax
399
+ __text:0002ADAD and eax, 7
400
+ __text:0002ADB0 lea eax, [edx+eax]
401
+ __text:0002ADB3 movzx eax, byte ptr [eax]
402
+ __text:0002ADB6 and eax, ebx
403
+ __text:0002ADB8 test al, al
404
+ __text:0002ADBA setnz al
405
+ __text:0002ADBD movzx eax, al
406
+ __text:0002ADC0 mov [ebp+currentBit], ax
407
+ __text:0002ADC4 lea edx, [ecx+1]
408
+ __text:0002ADC7 mov eax, [ebp+pStruct]
409
+ __text:0002ADCA mov [eax+4], edx
410
+ __text:0002ADCD
411
+ __text:0002ADCD loc_2ADCD: ; CODE XREF: _DecompressByte+29j
412
+ __text:0002ADCD movzx eax, [ebp+currentBit]
413
+ __text:0002ADD1 mov [ebp+currentBitCopy], ax
414
+ __text:0002ADD5 cmp [ebp+currentBitCopy], 0
415
+ __text:0002ADDA jz short loc_2ADFE
416
+ __text:0002ADDC cmp [ebp+currentBitCopy], 0
417
+ __text:0002ADE1 jns short loc_2ADEC
418
+ __text:0002ADE3 movsx eax, [ebp+currentBitCopy]
419
+ __text:0002ADE7 mov [ebp+returnValue], eax
420
+ __text:0002ADEA jmp short loc_2AE26
421
+ __text:0002ADEC ; ---------------------------------------------------------------------------
422
+ __text:0002ADEC
423
+ __text:0002ADEC loc_2ADEC: ; CODE XREF: _DecompressByte+77j
424
+ __text:0002ADEC movsx eax, [ebp+node]
425
+ __text:0002ADF0 movzx eax, ds:_rightNode[eax+eax]
426
+ __text:0002ADF8 mov [ebp+node], ax
427
+ __text:0002ADFC jmp short loc_2AE0E
428
+ __text:0002ADFE ; ---------------------------------------------------------------------------
429
+ __text:0002ADFE
430
+ __text:0002ADFE loc_2ADFE: ; CODE XREF: _DecompressByte+70j
431
+ __text:0002ADFE movsx eax, [ebp+node]
432
+ __text:0002AE02 movzx eax, ds:_leftNode[eax+eax]
433
+ __text:0002AE0A mov [ebp+node], ax
434
+ __text:0002AE0E
435
+ __text:0002AE0E loc_2AE0E: ; CODE XREF: _DecompressByte+92j
436
+ __text:0002AE0E cmp [ebp+node], 0FFh
437
+ __text:0002AE14 jle loc_2AD77
438
+ __text:0002AE1A movzx eax, [ebp+node]
439
+ __text:0002AE1E sub ax, 100h
440
+ __text:0002AE22 cwde
441
+ __text:0002AE23 mov [ebp+returnValue], eax
442
+ __text:0002AE26
443
+ __text:0002AE26 loc_2AE26: ; CODE XREF: _DecompressByte+80j
444
+ __text:0002AE26 mov eax, [ebp+returnValue]
445
+ __text:0002AE29 add esp, 34h
446
+ __text:0002AE2C pop ebx
447
+ __text:0002AE2D leave
448
+ __text:0002AE2E retn
449
+ __text:0002AE2E _DecompressByte end
450
+
451
+ __text:0002AE2F _DecompressSixBits proc near ; CODE XREF: _DecompressDBRec+126p
452
+ __text:0002AE2F
453
+ __text:0002AE2F firstBit = word ptr -2Ch
454
+ __text:0002AE2F secondBit = word ptr -2Ah
455
+ __text:0002AE2F thirdBit = word ptr -28h
456
+ __text:0002AE2F fourthBit = word ptr -26h
457
+ __text:0002AE2F fifthBit = word ptr -24h
458
+ __text:0002AE2F sixthBit = word ptr -22h
459
+ __text:0002AE2F returnValue = dword ptr -20h
460
+ __text:0002AE2F currentBit = word ptr -1Ah
461
+ __text:0002AE2F decompressedByte= byte ptr -9
462
+ __text:0002AE2F pStruct = dword ptr 8
463
+ __text:0002AE2F
464
+ __text:0002AE2F push ebp
465
+ __text:0002AE30 mov ebp, esp
466
+ __text:0002AE32 push ebx
467
+ __text:0002AE33 sub esp, 44h
468
+ __text:0002AE36 mov [ebp+decompressedByte], 80h
469
+ __text:0002AE3A mov eax, [ebp+pStruct]
470
+ __text:0002AE3D mov eax, [eax+4]
471
+ __text:0002AE40 and eax, 7
472
+ __text:0002AE43 test eax, eax
473
+ __text:0002AE45 jnz short loc_2AE58
474
+ __text:0002AE47 mov eax, [ebp+pStruct]
475
+ __text:0002AE4A mov [esp], eax
476
+ __text:0002AE4D call _GetBitX
477
+ __text:0002AE52 mov [ebp+firstBit], ax
478
+ __text:0002AE56 jmp short loc_2AE90
479
+ __text:0002AE58 ; ---------------------------------------------------------------------------
480
+ __text:0002AE58
481
+ __text:0002AE58 loc_2AE58: ; CODE XREF: _DecompressSixBits+16j
482
+ __text:0002AE58 mov eax, [ebp+pStruct]
483
+ __text:0002AE5B movzx ebx, byte ptr [eax+1Ah]
484
+ __text:0002AE5F mov eax, [ebp+pStruct]
485
+ __text:0002AE62 mov edx, [eax+1Ch]
486
+ __text:0002AE65 mov eax, [ebp+pStruct]
487
+ __text:0002AE68 mov ecx, [eax+4]
488
+ __text:0002AE6B mov eax, ecx
489
+ __text:0002AE6D movzx eax, ax
490
+ __text:0002AE70 and eax, 7
491
+ __text:0002AE73 lea eax, [edx+eax]
492
+ __text:0002AE76 movzx eax, byte ptr [eax]
493
+ __text:0002AE79 and eax, ebx
494
+ __text:0002AE7B test al, al
495
+ __text:0002AE7D setnz al
496
+ __text:0002AE80 movzx eax, al
497
+ __text:0002AE83 mov [ebp+firstBit], ax
498
+ __text:0002AE87 lea edx, [ecx+1]
499
+ __text:0002AE8A mov eax, [ebp+pStruct]
500
+ __text:0002AE8D mov [eax+4], edx
501
+ __text:0002AE90
502
+ __text:0002AE90 loc_2AE90: ; CODE XREF: _DecompressSixBits+27j
503
+ __text:0002AE90 movzx eax, [ebp+firstBit]
504
+ __text:0002AE94 mov [ebp+currentBit], ax
505
+ __text:0002AE98 cmp [ebp+currentBit], 0
506
+ __text:0002AE9D jz short loc_2AEB0
507
+ __text:0002AE9F cmp [ebp+currentBit], 0
508
+ __text:0002AEA4 js loc_2B103
509
+ __text:0002AEAA lea eax, [ebp+decompressedByte]
510
+ __text:0002AEAD or byte ptr [eax], 20h
511
+ __text:0002AEB0
512
+ __text:0002AEB0 loc_2AEB0: ; CODE XREF: _DecompressSixBits+6Ej
513
+ __text:0002AEB0 mov eax, [ebp+pStruct]
514
+ __text:0002AEB3 mov eax, [eax+4]
515
+ __text:0002AEB6 and eax, 7
516
+ __text:0002AEB9 test eax, eax
517
+ __text:0002AEBB jnz short loc_2AECE
518
+ __text:0002AEBD mov eax, [ebp+pStruct]
519
+ __text:0002AEC0 mov [esp], eax
520
+ __text:0002AEC3 call _GetBitX
521
+ __text:0002AEC8 mov [ebp+secondBit], ax
522
+ __text:0002AECC jmp short loc_2AF06
523
+ __text:0002AECE ; ---------------------------------------------------------------------------
524
+ __text:0002AECE
525
+ __text:0002AECE loc_2AECE: ; CODE XREF: _DecompressSixBits+8Cj
526
+ __text:0002AECE mov eax, [ebp+pStruct]
527
+ __text:0002AED1 movzx ebx, byte ptr [eax+1Ah]
528
+ __text:0002AED5 mov eax, [ebp+pStruct]
529
+ __text:0002AED8 mov edx, [eax+1Ch]
530
+ __text:0002AEDB mov eax, [ebp+pStruct]
531
+ __text:0002AEDE mov ecx, [eax+4]
532
+ __text:0002AEE1 mov eax, ecx
533
+ __text:0002AEE3 movzx eax, ax
534
+ __text:0002AEE6 and eax, 7
535
+ __text:0002AEE9 lea eax, [edx+eax]
536
+ __text:0002AEEC movzx eax, byte ptr [eax]
537
+ __text:0002AEEF and eax, ebx
538
+ __text:0002AEF1 test al, al
539
+ __text:0002AEF3 setnz al
540
+ __text:0002AEF6 movzx eax, al
541
+ __text:0002AEF9 mov [ebp+secondBit], ax
542
+ __text:0002AEFD lea edx, [ecx+1]
543
+ __text:0002AF00 mov eax, [ebp+pStruct]
544
+ __text:0002AF03 mov [eax+4], edx
545
+ __text:0002AF06
546
+ __text:0002AF06 loc_2AF06: ; CODE XREF: _DecompressSixBits+9Dj
547
+ __text:0002AF06 movzx eax, [ebp+secondBit]
548
+ __text:0002AF0A mov [ebp+currentBit], ax
549
+ __text:0002AF0E cmp [ebp+currentBit], 0
550
+ __text:0002AF13 jz short loc_2AF26
551
+ __text:0002AF15 cmp [ebp+currentBit], 0
552
+ __text:0002AF1A js loc_2B103
553
+ __text:0002AF20 lea eax, [ebp+decompressedByte]
554
+ __text:0002AF23 or byte ptr [eax], 10h
555
+ __text:0002AF26
556
+ __text:0002AF26 loc_2AF26: ; CODE XREF: _DecompressSixBits+E4j
557
+ __text:0002AF26 mov eax, [ebp+pStruct]
558
+ __text:0002AF29 mov eax, [eax+4]
559
+ __text:0002AF2C and eax, 7
560
+ __text:0002AF2F test eax, eax
561
+ __text:0002AF31 jnz short loc_2AF44
562
+ __text:0002AF33 mov eax, [ebp+pStruct]
563
+ __text:0002AF36 mov [esp], eax
564
+ __text:0002AF39 call _GetBitX
565
+ __text:0002AF3E mov [ebp+thirdBit], ax
566
+ __text:0002AF42 jmp short loc_2AF7C
567
+ __text:0002AF44 ; ---------------------------------------------------------------------------
568
+ __text:0002AF44
569
+ __text:0002AF44 loc_2AF44: ; CODE XREF: _DecompressSixBits+102j
570
+ __text:0002AF44 mov eax, [ebp+pStruct]
571
+ __text:0002AF47 movzx ebx, byte ptr [eax+1Ah]
572
+ __text:0002AF4B mov eax, [ebp+pStruct]
573
+ __text:0002AF4E mov edx, [eax+1Ch]
574
+ __text:0002AF51 mov eax, [ebp+pStruct]
575
+ __text:0002AF54 mov ecx, [eax+4]
576
+ __text:0002AF57 mov eax, ecx
577
+ __text:0002AF59 movzx eax, ax
578
+ __text:0002AF5C and eax, 7
579
+ __text:0002AF5F lea eax, [edx+eax]
580
+ __text:0002AF62 movzx eax, byte ptr [eax]
581
+ __text:0002AF65 and eax, ebx
582
+ __text:0002AF67 test al, al
583
+ __text:0002AF69 setnz al
584
+ __text:0002AF6C movzx eax, al
585
+ __text:0002AF6F mov [ebp+thirdBit], ax
586
+ __text:0002AF73 lea edx, [ecx+1]
587
+ __text:0002AF76 mov eax, [ebp+pStruct]
588
+ __text:0002AF79 mov [eax+4], edx
589
+ __text:0002AF7C
590
+ __text:0002AF7C loc_2AF7C: ; CODE XREF: _DecompressSixBits+113j
591
+ __text:0002AF7C movzx eax, [ebp+thirdBit]
592
+ __text:0002AF80 mov [ebp+currentBit], ax
593
+ __text:0002AF84 cmp [ebp+currentBit], 0
594
+ __text:0002AF89 jz short loc_2AF9C
595
+ __text:0002AF8B cmp [ebp+currentBit], 0
596
+ __text:0002AF90 js loc_2B103
597
+ __text:0002AF96 lea eax, [ebp+decompressedByte]
598
+ __text:0002AF99 or byte ptr [eax], 8
599
+ __text:0002AF9C
600
+ __text:0002AF9C loc_2AF9C: ; CODE XREF: _DecompressSixBits+15Aj
601
+ __text:0002AF9C mov eax, [ebp+pStruct]
602
+ __text:0002AF9F mov eax, [eax+4]
603
+ __text:0002AFA2 and eax, 7
604
+ __text:0002AFA5 test eax, eax
605
+ __text:0002AFA7 jnz short loc_2AFBA
606
+ __text:0002AFA9 mov eax, [ebp+pStruct]
607
+ __text:0002AFAC mov [esp], eax
608
+ __text:0002AFAF call _GetBitX
609
+ __text:0002AFB4 mov [ebp+fourthBit], ax
610
+ __text:0002AFB8 jmp short loc_2AFF2
611
+ __text:0002AFBA ; ---------------------------------------------------------------------------
612
+ __text:0002AFBA
613
+ __text:0002AFBA loc_2AFBA: ; CODE XREF: _DecompressSixBits+178j
614
+ __text:0002AFBA mov eax, [ebp+pStruct]
615
+ __text:0002AFBD movzx ebx, byte ptr [eax+1Ah]
616
+ __text:0002AFC1 mov eax, [ebp+pStruct]
617
+ __text:0002AFC4 mov edx, [eax+1Ch]
618
+ __text:0002AFC7 mov eax, [ebp+pStruct]
619
+ __text:0002AFCA mov ecx, [eax+4]
620
+ __text:0002AFCD mov eax, ecx
621
+ __text:0002AFCF movzx eax, ax
622
+ __text:0002AFD2 and eax, 7
623
+ __text:0002AFD5 lea eax, [edx+eax]
624
+ __text:0002AFD8 movzx eax, byte ptr [eax]
625
+ __text:0002AFDB and eax, ebx
626
+ __text:0002AFDD test al, al
627
+ __text:0002AFDF
628
+ __text:0002AFDF loc_2AFDF: ; DATA XREF: _FT_MulDiv+77o
629
+ __text:0002AFDF setnz al
630
+ __text:0002AFE2 movzx eax, al
631
+ __text:0002AFE5 mov [ebp+fourthBit], ax
632
+ __text:0002AFE9 lea edx, [ecx+1]
633
+ __text:0002AFEC mov eax, [ebp+pStruct]
634
+ __text:0002AFEF mov [eax+4], edx
635
+ __text:0002AFF2
636
+ __text:0002AFF2 loc_2AFF2: ; CODE XREF: _DecompressSixBits+189j
637
+ __text:0002AFF2 movzx eax, [ebp+fourthBit]
638
+ __text:0002AFF6 mov [ebp+currentBit], ax
639
+ __text:0002AFFA cmp [ebp+currentBit], 0
640
+ __text:0002AFFF jz short loc_2B012
641
+ __text:0002B001 cmp [ebp+currentBit], 0
642
+ __text:0002B006 js loc_2B103
643
+ __text:0002B00C lea eax, [ebp+decompressedByte]
644
+ __text:0002B00F or byte ptr [eax], 4
645
+ __text:0002B012
646
+ __text:0002B012 loc_2B012: ; CODE XREF: _DecompressSixBits+1D0j
647
+ __text:0002B012 mov eax, [ebp+pStruct]
648
+ __text:0002B015 mov eax, [eax+4]
649
+ __text:0002B018 and eax, 7
650
+ __text:0002B01B test eax, eax
651
+ __text:0002B01D jnz short loc_2B030
652
+ __text:0002B01F mov eax, [ebp+pStruct]
653
+ __text:0002B022 mov [esp], eax
654
+ __text:0002B025 call _GetBitX
655
+ __text:0002B02A mov [ebp+fifthBit], ax
656
+ __text:0002B02E jmp short loc_2B068
657
+ __text:0002B030 ; ---------------------------------------------------------------------------
658
+ __text:0002B030
659
+ __text:0002B030 loc_2B030: ; CODE XREF: _DecompressSixBits+1EEj
660
+ __text:0002B030 mov eax, [ebp+pStruct]
661
+ __text:0002B033 movzx ebx, byte ptr [eax+1Ah]
662
+ __text:0002B037 mov eax, [ebp+pStruct]
663
+ __text:0002B03A mov edx, [eax+1Ch]
664
+ __text:0002B03D mov eax, [ebp+pStruct]
665
+ __text:0002B040 mov ecx, [eax+4]
666
+ __text:0002B043 mov eax, ecx
667
+ __text:0002B045 movzx eax, ax
668
+ __text:0002B048 and eax, 7
669
+ __text:0002B04B lea eax, [edx+eax]
670
+ __text:0002B04E movzx eax, byte ptr [eax]
671
+ __text:0002B051 and eax, ebx
672
+ __text:0002B053 test al, al
673
+ __text:0002B055 setnz al
674
+ __text:0002B058 movzx eax, al
675
+ __text:0002B05B mov [ebp+fifthBit], ax
676
+ __text:0002B05F lea edx, [ecx+1]
677
+ __text:0002B062 mov eax, [ebp+pStruct]
678
+ __text:0002B065 mov [eax+4], edx
679
+ __text:0002B068
680
+ __text:0002B068 loc_2B068: ; CODE XREF: _DecompressSixBits+1FFj
681
+ __text:0002B068 movzx eax, [ebp+fifthBit]
682
+ __text:0002B06C mov [ebp+currentBit], ax
683
+ __text:0002B070 cmp [ebp+currentBit], 0
684
+ __text:0002B075 jz short loc_2B088
685
+ __text:0002B077 cmp [ebp+currentBit], 0
686
+ __text:0002B07C js loc_2B103
687
+ __text:0002B082 lea eax, [ebp+decompressedByte]
688
+ __text:0002B085 or byte ptr [eax], 2
689
+ __text:0002B088
690
+ __text:0002B088 loc_2B088: ; CODE XREF: _DecompressSixBits+246j
691
+ __text:0002B088 mov eax, [ebp+pStruct]
692
+ __text:0002B08B mov eax, [eax+4]
693
+ __text:0002B08E and eax, 7
694
+ __text:0002B091 test eax, eax
695
+ __text:0002B093 jnz short loc_2B0A6
696
+ __text:0002B095 mov eax, [ebp+pStruct]
697
+ __text:0002B098 mov [esp], eax
698
+ __text:0002B09B call _GetBitX
699
+ __text:0002B0A0 mov [ebp+sixthBit], ax
700
+ __text:0002B0A4 jmp short loc_2B0DE
701
+ __text:0002B0A6 ; ---------------------------------------------------------------------------
702
+ __text:0002B0A6
703
+ __text:0002B0A6 loc_2B0A6: ; CODE XREF: _DecompressSixBits+264j
704
+ __text:0002B0A6 mov eax, [ebp+pStruct]
705
+ __text:0002B0A9 movzx ebx, byte ptr [eax+1Ah]
706
+ __text:0002B0AD mov eax, [ebp+pStruct]
707
+ __text:0002B0B0 mov edx, [eax+1Ch]
708
+ __text:0002B0B3 mov eax, [ebp+pStruct]
709
+ __text:0002B0B6 mov ecx, [eax+4]
710
+ __text:0002B0B9 mov eax, ecx
711
+ __text:0002B0BB movzx eax, ax
712
+ __text:0002B0BE and eax, 7
713
+ __text:0002B0C1 lea eax, [edx+eax]
714
+ __text:0002B0C4 movzx eax, byte ptr [eax]
715
+ __text:0002B0C7 and eax, ebx
716
+ __text:0002B0C9 test al, al
717
+ __text:0002B0CB setnz al
718
+ __text:0002B0CE movzx eax, al
719
+ __text:0002B0D1 mov [ebp+sixthBit], ax
720
+ __text:0002B0D5 lea edx, [ecx+1]
721
+ __text:0002B0D8 mov eax, [ebp+pStruct]
722
+ __text:0002B0DB mov [eax+4], edx
723
+ __text:0002B0DE
724
+ __text:0002B0DE loc_2B0DE: ; CODE XREF: _DecompressSixBits+275j
725
+ __text:0002B0DE movzx eax, [ebp+sixthBit]
726
+ __text:0002B0E2 mov [ebp+currentBit], ax
727
+ __text:0002B0E6 cmp [ebp+currentBit], 0
728
+ __text:0002B0EB jz short loc_2B0FA
729
+ __text:0002B0ED cmp [ebp+currentBit], 0
730
+ __text:0002B0F2 js short loc_2B103
731
+ __text:0002B0F4 lea eax, [ebp+decompressedByte]
732
+ __text:0002B0F7 or byte ptr [eax], 1
733
+ __text:0002B0FA
734
+ __text:0002B0FA loc_2B0FA: ; CODE XREF: _DecompressSixBits+2BCj
735
+ __text:0002B0FA movzx eax, [ebp+decompressedByte]
736
+ __text:0002B0FE mov [ebp+returnValue], eax
737
+ __text:0002B101 jmp short loc_2B10A
738
+ __text:0002B103 ; ---------------------------------------------------------------------------
739
+ __text:0002B103
740
+ __text:0002B103 loc_2B103: ; CODE XREF: _DecompressSixBits+75j
741
+ __text:0002B103 ; _DecompressSixBits+EBj ...
742
+ __text:0002B103 movsx eax, [ebp+currentBit]
743
+ __text:0002B107 mov [ebp+returnValue], eax
744
+ __text:0002B10A
745
+ __text:0002B10A loc_2B10A: ; CODE XREF: _DecompressSixBits+2D2j
746
+ __text:0002B10A mov eax, [ebp+returnValue]
747
+ __text:0002B10D add esp, 44h
748
+ __text:0002B110 pop ebx
749
+ __text:0002B111 leave
750
+ __text:0002B112 retn
751
+ __text:0002B112 _DecompressSixBits endp
752
+ __text:0002B112
753
+ __text:0002B113
754
+ __text:0002B113 ; =============== S U B R O U T I N E =======================================
755
+ __text:0002B113
756
+ __text:0002B113 ; Attributes: bp-based frame
757
+ __text:0002B113
758
+ __text:0002B113 _CompressDBRec proc near ; CODE XREF: _DBRecordWrite+BEp
759
+ __text:0002B113
760
+ __text:0002B113 var_60 = dword ptr -60h
761
+ __text:0002B113 var_5C = byte ptr -5Ch
762
+ __text:0002B113 var_50 = dword ptr -50h
763
+ __text:0002B113 var_49 = byte ptr -49h
764
+ __text:0002B113 var_44 = dword ptr -44h
765
+ __text:0002B113 var_38 = dword ptr -38h
766
+ __text:0002B113 var_2B = byte ptr -2Bh
767
+ __text:0002B113 var_28 = dword ptr -28h
768
+ __text:0002B113 var_24 = byte ptr -24h
769
+ __text:0002B113 var_20 = dword ptr -20h
770
+ __text:0002B113 var_1C = dword ptr -1Ch
771
+ __text:0002B113 var_16 = word ptr -16h
772
+ __text:0002B113 var_14 = dword ptr -14h
773
+ __text:0002B113 var_10 = dword ptr -10h
774
+ __text:0002B113 var_C = word ptr -0Ch
775
+ __text:0002B113 var_A = word ptr -0Ah
776
+ __text:0002B113 arg_0 = dword ptr 8
777
+ __text:0002B113 arg_4 = dword ptr 0Ch
778
+ __text:0002B113 arg_8 = dword ptr 10h
779
+ __text:0002B113 arg_C = dword ptr 14h
780
+ __text:0002B113
781
+ __text:0002B113 push ebp
782
+ __text:0002B114 mov ebp, esp
783
+ __text:0002B116 push edi
784
+ __text:0002B117 sub esp, 74h
785
+ __text:0002B11A mov eax, [ebp+arg_C]
786
+ __text:0002B11D mov [ebp+var_5C], al
787
+ __text:0002B120 lea eax, [ebp+var_44]
788
+ __text:0002B123 mov edi, eax
789
+ __text:0002B125 cld
790
+ __text:0002B126 mov edx, 0
791
+ __text:0002B12B mov eax, 0Ah
792
+ __text:0002B130 mov ecx, eax
793
+ __text:0002B132 mov eax, edx
794
+ __text:0002B134 rep stosd
795
+ __text:0002B136 mov eax, [ebp+arg_4]
796
+ __text:0002B139 mov [ebp+var_44], eax
797
+ __text:0002B13C mov eax, [ebp+arg_8]
798
+ __text:0002B13F shl eax, 3
799
+ __text:0002B142 mov [ebp+var_38], eax
800
+ __text:0002B145 movzx edx, [ebp+var_5C]
801
+ __text:0002B149 mov eax, [ebp+arg_8]
802
+ __text:0002B14C movzx eax, ax
803
+ __text:0002B14F mov [esp+4], edx
804
+ __text:0002B153 mov [esp], eax
805
+ __text:0002B156 call _FunnyMask
806
+ __text:0002B15B mov [ebp+var_28], eax
807
+ __text:0002B15E movzx edx, [ebp+var_5C]
808
+ __text:0002B162 mov eax, [ebp+arg_8]
809
+ __text:0002B165 movzx eax, ax
810
+ __text:0002B168 mov [esp+4], edx
811
+ __text:0002B16C mov [esp], eax
812
+ __text:0002B16F call _CrypOfs
813
+ __text:0002B174 mov [ebp+var_24], al
814
+ __text:0002B177 call _CrypMask
815
+ __text:0002B17C mov [ebp+var_20], eax
816
+ __text:0002B17F cmp [ebp+arg_8], 8
817
+ __text:0002B183 ja loc_2B301
818
+ __text:0002B189 mov [ebp+var_2B], 9
819
+ __text:0002B18D jmp loc_2B301
820
+ __text:0002B192 ; ---------------------------------------------------------------------------
821
+ __text:0002B192
822
+ __text:0002B192 loc_2B192: ; CODE XREF: _CompressDBRec+200j
823
+ __text:0002B192 mov eax, [ebp+var_1C]
824
+ __text:0002B195 shr eax, 7
825
+ __text:0002B198 xor eax, 1
826
+ __text:0002B19B and eax, 1
827
+ __text:0002B19E test al, al
828
+ __text:0002B1A0 jz short loc_2B1D2
829
+ __text:0002B1A2 mov eax, [ebp+var_1C]
830
+ __text:0002B1A5 movzx eax, al
831
+ __text:0002B1A8 mov [esp+4], eax
832
+ __text:0002B1AC lea eax, [ebp+var_44]
833
+ __text:0002B1AF mov [esp], eax
834
+ __text:0002B1B2 call _CompressByte
835
+ __text:0002B1B7 mov [ebp+var_16], ax
836
+ __text:0002B1BB cmp [ebp+var_16], 0
837
+ __text:0002B1C0 jz loc_2B2FF
838
+ __text:0002B1C6 movsx eax, [ebp+var_16]
839
+ __text:0002B1CA mov [ebp+var_60], eax
840
+ __text:0002B1CD jmp loc_2B328
841
+ __text:0002B1D2 ; ---------------------------------------------------------------------------
842
+ __text:0002B1D2
843
+ __text:0002B1D2 loc_2B1D2: ; CODE XREF: _CompressDBRec+8Dj
844
+ __text:0002B1D2 mov eax, [ebp+var_1C]
845
+ __text:0002B1D5 mov [ebp+var_49], al
846
+ __text:0002B1D8 mov eax, [ebp+var_1C]
847
+ __text:0002B1DB movsx eax, al
848
+ __text:0002B1DE mov [esp], eax
849
+ __text:0002B1E1 call _MBCLenFromFirstByte
850
+ __text:0002B1E6 mov [ebp+var_10], eax
851
+ __text:0002B1E9 mov [ebp+var_14], 1
852
+ __text:0002B1F0 jmp short loc_2B230
853
+ __text:0002B1F2 ; ---------------------------------------------------------------------------
854
+ __text:0002B1F2
855
+ __text:0002B1F2 loc_2B1F2: ; CODE XREF: _CompressDBRec+123j
856
+ __text:0002B1F2 mov eax, [ebp+arg_0]
857
+ __text:0002B1F5 mov [esp], eax
858
+ __text:0002B1F8 call _TwxtGetByte
859
+ __text:0002B1FD mov [ebp+var_1C], eax
860
+ __text:0002B200 cmp [ebp+var_1C], 0FFFFFFFFh
861
+ __text:0002B204 jz short loc_2B215
862
+ __text:0002B206 mov eax, [ebp+var_1C]
863
+ __text:0002B209 and eax, 0C0h
864
+ __text:0002B20E cmp eax, 80h
865
+ __text:0002B213 jz short loc_2B221
866
+ __text:0002B215
867
+ __text:0002B215 loc_2B215: ; CODE XREF: _CompressDBRec+F1j
868
+ __text:0002B215 mov [ebp+var_60], 0FFFFDFFFh
869
+ __text:0002B21C jmp loc_2B328
870
+ __text:0002B221 ; ---------------------------------------------------------------------------
871
+ __text:0002B221
872
+ __text:0002B221 loc_2B221: ; CODE XREF: _CompressDBRec+100j
873
+ __text:0002B221 mov edx, [ebp+var_14]
874
+ __text:0002B224 mov eax, [ebp+var_1C]
875
+ __text:0002B227 mov [ebp+edx+var_49], al
876
+ __text:0002B22B lea eax, [ebp+var_14]
877
+ __text:0002B22E inc dword ptr [eax]
878
+ __text:0002B230
879
+ __text:0002B230 loc_2B230: ; CODE XREF: _CompressDBRec+DDj
880
+ __text:0002B230 mov eax, [ebp+var_14]
881
+ __text:0002B233 cmp eax, [ebp+var_10]
882
+ __text:0002B236 jb short loc_2B1F2
883
+ __text:0002B238 mov eax, [ebp+var_10]
884
+ __text:0002B23B mov [ebp+eax+var_49], 0
885
+ __text:0002B240 lea eax, [ebp+var_50]
886
+ __text:0002B243 mov [esp+4], eax
887
+ __text:0002B247 lea eax, [ebp+var_49]
888
+ __text:0002B24A mov [esp], eax
889
+ __text:0002B24D call _ZiNumberLen
890
+ __text:0002B252 cmp eax, 0FFFEh
891
+ __text:0002B257 jz short loc_2B261
892
+ __text:0002B259 mov eax, [ebp+var_50]
893
+ __text:0002B25C cmp eax, [ebp+var_10]
894
+ __text:0002B25F jz short loc_2B26D
895
+ __text:0002B261
896
+ __text:0002B261 loc_2B261: ; CODE XREF: _CompressDBRec+144j
897
+ __text:0002B261 mov [ebp+var_60], 0FFFFDFFFh
898
+ __text:0002B268 jmp loc_2B328
899
+ __text:0002B26D ; ---------------------------------------------------------------------------
900
+ __text:0002B26D
901
+ __text:0002B26D loc_2B26D: ; CODE XREF: _CompressDBRec+14Cj
902
+ __text:0002B26D movzx eax, [ebp+var_49]
903
+ __text:0002B271 movzx eax, al
904
+ __text:0002B274 mov [esp+4], eax
905
+ __text:0002B278 lea eax, [ebp+var_44]
906
+ __text:0002B27B mov [esp], eax
907
+ __text:0002B27E call _CompressByte
908
+ __text:0002B283 mov [ebp+var_C], ax
909
+ __text:0002B287 cmp [ebp+var_C], 0
910
+ __text:0002B28C jz short loc_2B29A
911
+ __text:0002B28E movsx eax, [ebp+var_C]
912
+ __text:0002B292 mov [ebp+var_60], eax
913
+ __text:0002B295 jmp loc_2B328
914
+ __text:0002B29A ; ---------------------------------------------------------------------------
915
+ __text:0002B29A
916
+ __text:0002B29A loc_2B29A: ; CODE XREF: _CompressDBRec+179j
917
+ __text:0002B29A mov [ebp+var_14], 1
918
+ __text:0002B2A1 jmp short loc_2B2F7
919
+ __text:0002B2A3 ; ---------------------------------------------------------------------------
920
+ __text:0002B2A3
921
+ __text:0002B2A3 loc_2B2A3: ; CODE XREF: _CompressDBRec+1EAj
922
+ __text:0002B2A3 mov [ebp+var_A], 20h
923
+ __text:0002B2A9
924
+ __text:0002B2A9 loc_2B2A9: ; CODE XREF: _CompressDBRec+1DDj
925
+ __text:0002B2A9 mov eax, [ebp+var_14]
926
+ __text:0002B2AC movzx eax, [ebp+eax+var_49]
927
+ __text:0002B2B1 movsx edx, al
928
+ __text:0002B2B4 movsx eax, [ebp+var_A]
929
+ __text:0002B2B8 and eax, edx
930
+ __text:0002B2BA test eax, eax
931
+ __text:0002B2BC setnz al
932
+ __text:0002B2BF movzx eax, al
933
+ __text:0002B2C2 mov [esp+4], eax
934
+ __text:0002B2C6 lea eax, [ebp+var_44]
935
+ __text:0002B2C9 mov [esp], eax
936
+ __text:0002B2CC call _PutBit
937
+ __text:0002B2D1 mov [ebp+var_C], ax
938
+ __text:0002B2D5 cmp [ebp+var_C], 0
939
+ __text:0002B2DA jz short loc_2B2E5
940
+ __text:0002B2DC movsx eax, [ebp+var_C]
941
+ __text:0002B2E0 mov [ebp+var_60], eax
942
+ __text:0002B2E3 jmp short loc_2B328
943
+ __text:0002B2E5 ; ---------------------------------------------------------------------------
944
+ __text:0002B2E5
945
+ __text:0002B2E5 loc_2B2E5: ; CODE XREF: _CompressDBRec+1C7j
946
+ __text:0002B2E5 lea eax, [ebp+var_A]
947
+ __text:0002B2E8 sar word ptr [eax], 1
948
+ __text:0002B2EB cmp [ebp+var_A], 0
949
+ __text:0002B2F0 jnz short loc_2B2A9
950
+ __text:0002B2F2 lea eax, [ebp+var_14]
951
+ __text:0002B2F5 inc dword ptr [eax]
952
+ __text:0002B2F7
953
+ __text:0002B2F7 loc_2B2F7: ; CODE XREF: _CompressDBRec+18Ej
954
+ __text:0002B2F7 mov eax, [ebp+var_14]
955
+ __text:0002B2FA cmp eax, [ebp+var_10]
956
+ __text:0002B2FD jb short loc_2B2A3
957
+ __text:0002B2FF
958
+ __text:0002B2FF loc_2B2FF: ; CODE XREF: _CompressDBRec+ADj
959
+ __text:0002B2FF jmp short $+2
960
+ __text:0002B301 ; ---------------------------------------------------------------------------
961
+ __text:0002B301
962
+ __text:0002B301 loc_2B301: ; CODE XREF: _CompressDBRec+70j
963
+ __text:0002B301 ; _CompressDBRec+7Aj ...
964
+ __text:0002B301 mov eax, [ebp+arg_0]
965
+ __text:0002B304 mov [esp], eax
966
+ __text:0002B307 call _TwxtGetByte
967
+ __text:0002B30C mov [ebp+var_1C], eax
968
+ __text:0002B30F cmp [ebp+var_1C], 0FFFFFFFFh
969
+ __text:0002B313 jnz loc_2B192
970
+ __text:0002B319 lea eax, [ebp+var_44]
971
+ __text:0002B31C mov [esp], eax
972
+ __text:0002B31F call _FlushBitStream
973
+ __text:0002B324 cwde
974
+ __text:0002B325 mov [ebp+var_60], eax
975
+ __text:0002B328
976
+ __text:0002B328 loc_2B328: ; CODE XREF: _CompressDBRec+BAj
977
+ __text:0002B328 ; _CompressDBRec+109j ...
978
+ __text:0002B328 mov eax, [ebp+var_60]
979
+ __text:0002B32B add esp, 74h
980
+ __text:0002B32E pop edi
981
+ __text:0002B32F leave
982
+ __text:0002B330 retn
983
+ __text:0002B330 _CompressDBRec endp
984
+
985
+ __text:0002B4A6 ; =============== S U B R O U T I N E =======================================
986
+ __text:0002B4A6
987
+ __text:0002B4A6 ; Attributes: bp-based frame
988
+ __text:0002B4A6
989
+ __text:0002B4A6 _GetBitX proc near ; CODE XREF: _DecompressByte+20p
990
+ __text:0002B4A6 ; _DecompressSixBits+1Ep ...
991
+ __text:0002B4A6
992
+ __text:0002B4A6 returnValue = dword ptr -1Ch
993
+ __text:0002B4A6 fChar = dword ptr -0Ch
994
+ __text:0002B4A6 pStruct = dword ptr 8
995
+ __text:0002B4A6
996
+ __text:0002B4A6 push ebp
997
+ __text:0002B4A7 mov ebp, esp
998
+ __text:0002B4A9 push ebx
999
+ __text:0002B4AA sub esp, 34h
1000
+ __text:0002B4AD mov eax, [ebp+pStruct]
1001
+ __text:0002B4B0 mov edx, [eax+4]
1002
+ __text:0002B4B3 mov eax, [ebp+pStruct]
1003
+ __text:0002B4B6 mov eax, [eax+0Ch]
1004
+ __text:0002B4B9 cmp edx, eax
1005
+ __text:0002B4BB jl short loc_2B4C9
1006
+ __text:0002B4BD mov [ebp+returnValue], 0FFFFFFFEh
1007
+ __text:0002B4C4 jmp loc_2B54E
1008
+ __text:0002B4C9 ; ---------------------------------------------------------------------------
1009
+ __text:0002B4C9
1010
+ __text:0002B4C9 loc_2B4C9: ; CODE XREF: _GetBitX+15j
1011
+ __text:0002B4C9 mov eax, [ebp+pStruct]
1012
+ __text:0002B4CC mov [esp], eax
1013
+ __text:0002B4CF call _MatrixFGetC
1014
+ __text:0002B4D4 mov [ebp+fChar], eax
1015
+ __text:0002B4D7 cmp [ebp+fChar], 0FFFFFFFFh
1016
+ __text:0002B4DB jnz short loc_2B4E6
1017
+ __text:0002B4DD mov [ebp+returnValue], 0FFFFFFFFh
1018
+ __text:0002B4E4 jmp short loc_2B54E
1019
+ __text:0002B4E6 ; ---------------------------------------------------------------------------
1020
+ __text:0002B4E6
1021
+ __text:0002B4E6 loc_2B4E6: ; CODE XREF: _GetBitX+35j
1022
+ __text:0002B4E6 mov eax, [ebp+pStruct]
1023
+ __text:0002B4E9 mov edx, [eax+24h]
1024
+ __text:0002B4EC mov eax, [ebp+pStruct]
1025
+ __text:0002B4EF movzx ecx, byte ptr [eax+20h]
1026
+ __text:0002B4F3 movzx eax, cl
1027
+ __text:0002B4F6 and eax, 3Fh
1028
+ __text:0002B4F9 lea eax, [edx+eax]
1029
+ __text:0002B4FC movzx eax, byte ptr [eax]
1030
+ __text:0002B4FF mov edx, eax
1031
+ __text:0002B501 mov eax, [ebp+fChar]
1032
+ __text:0002B504 xor eax, edx
1033
+ __text:0002B506 mov edx, eax
1034
+ __text:0002B508 mov eax, [ebp+pStruct]
1035
+ __text:0002B50B mov [eax+1Ah], dl
1036
+ __text:0002B50E lea edx, [ecx-1]
1037
+ __text:0002B511 mov eax, [ebp+pStruct]
1038
+ __text:0002B514 mov [eax+20h], dl
1039
+ __text:0002B517 mov eax, [ebp+pStruct]
1040
+ __text:0002B51A movzx ebx, byte ptr [eax+1Ah]
1041
+ __text:0002B51E mov eax, [ebp+pStruct]
1042
+ __text:0002B521 mov edx, [eax+1Ch]
1043
+ __text:0002B524 mov eax, [ebp+pStruct]
1044
+ __text:0002B527 mov ecx, [eax+4]
1045
+ __text:0002B52A mov eax, ecx
1046
+ __text:0002B52C movzx eax, ax
1047
+ __text:0002B52F and eax, 7
1048
+ __text:0002B532 lea eax, [edx+eax]
1049
+ __text:0002B535 movzx eax, byte ptr [eax]
1050
+ __text:0002B538 and eax, ebx
1051
+ __text:0002B53A test al, al
1052
+ __text:0002B53C setnz al
1053
+ __text:0002B53F movzx eax, al
1054
+ __text:0002B542 mov [ebp+returnValue], eax
1055
+ __text:0002B545 lea edx, [ecx+1]
1056
+ __text:0002B548 mov eax, [ebp+pStruct]
1057
+ __text:0002B54B mov [eax+4], edx
1058
+ __text:0002B54E
1059
+ __text:0002B54E loc_2B54E: ; CODE XREF: _GetBitX+1Ej
1060
+ __text:0002B54E ; _GetBitX+3Ej
1061
+ __text:0002B54E mov eax, [ebp+returnValue]
1062
+ __text:0002B551 add esp, 34h
1063
+ __text:0002B554 pop ebx
1064
+ __text:0002B555 leave
1065
+ __text:0002B556 retn
1066
+ __text:0002B556 _GetBitX endp
1067
+
1068
+ __text:0002B72E ; =============== S U B R O U T I N E =======================================
1069
+ __text:0002B72E
1070
+ __text:0002B72E ; Attributes: bp-based frame
1071
+ __text:0002B72E
1072
+ __text:0002B72E _MatrixFGetC proc near ; CODE XREF: _GetBitX+29p
1073
+ __text:0002B72E
1074
+ __text:0002B72E returnValue = dword ptr -1Ch
1075
+ __text:0002B72E buffer = byte ptr -11h
1076
+ __text:0002B72E arg_0 = dword ptr 8
1077
+ __text:0002B72E
1078
+ __text:0002B72E push ebp
1079
+ __text:0002B72F mov ebp, esp
1080
+ __text:0002B731 sub esp, 38h
1081
+ __text:0002B734
1082
+ __text:0002B734 loc_2B734: ; DATA XREF: _FiveIndex+1F8o
1083
+ __text:0002B734 ; _KXRadicalFromZin+EEo ...
1084
+ __text:0002B734 mov eax, [ebp+arg_0]
1085
+ __text:0002B737 movzx eax, byte ptr [eax+19h]
1086
+ __text:0002B73B cmp al, 9
1087
+ __text:0002B73D jnz short loc_2B751
1088
+ __text:0002B73F
1089
+ __text:0002B73F loc_2B73F: ; DATA XREF: _KXRadicalFromZin:loc_9EE60o
1090
+ __text:0002B73F ; _AppendUnihanBlockVersion:loc_A2097o ...
1091
+ __text:0002B73F mov eax, [ebp+arg_0]
1092
+ __text:0002B742 mov eax, [eax]
1093
+ __text:0002B744 mov [esp], eax ; FILE *
1094
+ __text:0002B747 call _getc
1095
+ __text:0002B74C mov [ebp+returnValue], eax
1096
+ __text:0002B74F jmp short loc_2B7CD
1097
+ __text:0002B751 ; ---------------------------------------------------------------------------
1098
+ __text:0002B751
1099
+ __text:0002B751 loc_2B751: ; CODE XREF: _MatrixFGetC+Fj
1100
+ __text:0002B751 mov eax, [ebp+arg_0]
1101
+ __text:0002B754 movzx eax, byte ptr [eax+19h]
1102
+ __text:0002B758 test al, al
1103
+ __text:0002B75A jnz short loc_2B7AC
1104
+ __text:0002B75C mov eax, [ebp+arg_0]
1105
+ __text:0002B75F mov eax, [eax]
1106
+ __text:0002B761 mov [esp+0Ch], eax ; FILE *
1107
+ __text:0002B765 mov dword ptr [esp+8], 9 ; size_t
1108
+ __text:0002B76D mov dword ptr [esp+4], 1 ; size_t
1109
+ __text:0002B775 lea eax, [ebp+buffer]
1110
+ __text:0002B778 mov [esp], eax ; void *
1111
+ __text:0002B77B call _fread
1112
+ __text:0002B780 cmp eax, 9
1113
+ __text:0002B783 jz short loc_2B78E
1114
+ __text:0002B785 mov [ebp+returnValue], 0FFFFFFFFh
1115
+ __text:0002B78C jmp short loc_2B7CD
1116
+ __text:0002B78E ; ---------------------------------------------------------------------------
1117
+ __text:0002B78E
1118
+ __text:0002B78E loc_2B78E: ; CODE XREF: _MatrixFGetC+55j
1119
+ __text:0002B78E mov eax, [ebp+arg_0]
1120
+ __text:0002B791 add eax, 10h
1121
+ __text:0002B794 lea edx, [ebp+buffer]
1122
+ __text:0002B797 mov [esp+8], edx
1123
+ __text:0002B79B mov edx, offset _inverseMatrix
1124
+ __text:0002B7A0 mov [esp+4], edx
1125
+ __text:0002B7A4 mov [esp], eax
1126
+ __text:0002B7A7 call _MatrixMultiply
1127
+ __text:0002B7AC
1128
+ __text:0002B7AC loc_2B7AC: ; CODE XREF: _MatrixFGetC+2Cj
1129
+ __text:0002B7AC mov eax, [ebp+arg_0]
1130
+ __text:0002B7AF movzx ecx, byte ptr [eax+19h]
1131
+ __text:0002B7B3 movzx edx, cl
1132
+ __text:0002B7B6 mov eax, [ebp+arg_0]
1133
+ __text:0002B7B9 movzx eax, byte ptr [edx+eax+10h]
1134
+ __text:0002B7BE movzx eax, al
1135
+ __text:0002B7C1 mov [ebp+returnValue], eax
1136
+ __text:0002B7C4 lea edx, [ecx+1]
1137
+ __text:0002B7C7 mov eax, [ebp+arg_0]
1138
+ __text:0002B7CA mov [eax+19h], dl
1139
+ __text:0002B7CD
1140
+ __text:0002B7CD loc_2B7CD: ; CODE XREF: _MatrixFGetC+21j
1141
+ __text:0002B7CD ; _MatrixFGetC+5Ej
1142
+ __text:0002B7CD mov eax, [ebp+returnValue]
1143
+ __text:0002B7D0 leave
1144
+ __text:0002B7D1 retn
1145
+ __text:0002B7D1 _MatrixFGetC endp
1146
+
1147
+ __text:0002B7D2 ; =============== S U B R O U T I N E =======================================
1148
+ __text:0002B7D2
1149
+ __text:0002B7D2 ; Attributes: bp-based frame
1150
+ __text:0002B7D2
1151
+ __text:0002B7D2 _MatrixMultiply proc near ; CODE XREF: _MatrixFPutC+92p
1152
+ __text:0002B7D2 ; _MatrixFGetC+79p
1153
+ __text:0002B7D2
1154
+ __text:0002B7D2 i = dword ptr -0Ch
1155
+ __text:0002B7D2 result = dword ptr 8
1156
+ __text:0002B7D2 matrix = dword ptr 0Ch
1157
+ __text:0002B7D2 vector = dword ptr 10h
1158
+ __text:0002B7D2
1159
+ __text:0002B7D2 push ebp
1160
+ __text:0002B7D3 mov ebp, esp
1161
+ __text:0002B7D5 push ebx
1162
+ __text:0002B7D6 sub esp, 14h
1163
+ __text:0002B7D9 mov [ebp+i], 9
1164
+ __text:0002B7E0 jmp loc_2B8C6
1165
+ __text:0002B7E5 ; ---------------------------------------------------------------------------
1166
+ __text:0002B7E5
1167
+ __text:0002B7E5 loc_2B7E5: ; CODE XREF: _MatrixMultiply+FDj
1168
+ __text:0002B7E5 mov eax, [ebp+matrix]
1169
+ __text:0002B7E8 movzx edx, byte ptr [eax]
1170
+ __text:0002B7EB mov eax, [ebp+vector]
1171
+ __text:0002B7EE movzx eax, byte ptr [eax]
1172
+ __text:0002B7F1 imul eax, edx
1173
+ __text:0002B7F4 mov ecx, eax
1174
+ __text:0002B7F6 mov eax, [ebp+matrix]
1175
+ __text:0002B7F9 inc eax
1176
+ __text:0002B7FA movzx edx, byte ptr [eax]
1177
+ __text:0002B7FD mov eax, [ebp+vector]
1178
+ __text:0002B800 inc eax
1179
+ __text:0002B801 movzx eax, byte ptr [eax]
1180
+ __text:0002B804 imul eax, edx
1181
+ __text:0002B807 lea ebx, [ecx+eax]
1182
+ __text:0002B80A mov eax, [ebp+matrix]
1183
+ __text:0002B80D add eax, 3
1184
+ __text:0002B810 movzx edx, byte ptr [eax]
1185
+ __text:0002B813 mov eax, [ebp+vector]
1186
+ __text:0002B816 add eax, 3
1187
+ __text:0002B819 movzx eax, byte ptr [eax]
1188
+ __text:0002B81C imul eax, edx ; DATA XREF: _FiveIndex+205o
1189
+ __text:0002B81F mov ecx, eax
1190
+ __text:0002B821 mov eax, [ebp+matrix]
1191
+ __text:0002B824 add eax, 2
1192
+ __text:0002B827 movzx edx, byte ptr [eax]
1193
+ __text:0002B82A mov eax, [ebp+vector]
1194
+ __text:0002B82D add eax, 2
1195
+ __text:0002B830 movzx eax, byte ptr [eax]
1196
+ __text:0002B833 imul eax, edx
1197
+ __text:0002B836 lea eax, [ecx+eax]
1198
+ __text:0002B839 add ebx, eax
1199
+ __text:0002B83B mov eax, [ebp+matrix]
1200
+ __text:0002B83E add eax, 5
1201
+ __text:0002B841 movzx edx, byte ptr [eax]
1202
+ __text:0002B844 mov eax, [ebp+vector]
1203
+ __text:0002B847 add eax, 5
1204
+ __text:0002B84A movzx eax, byte ptr [eax]
1205
+ __text:0002B84D imul eax, edx
1206
+ __text:0002B850 mov ecx, eax
1207
+ __text:0002B852 mov eax, [ebp+matrix]
1208
+ __text:0002B855 add eax, 4
1209
+ __text:0002B858 movzx edx, byte ptr [eax]
1210
+ __text:0002B85B mov eax, [ebp+vector]
1211
+ __text:0002B85E add eax, 4
1212
+ __text:0002B861 movzx eax, byte ptr [eax]
1213
+ __text:0002B864 imul eax, edx
1214
+ __text:0002B867 lea eax, [ecx+eax]
1215
+ __text:0002B86A add ebx, eax
1216
+ __text:0002B86C mov eax, [ebp+matrix]
1217
+ __text:0002B86F add eax, 7
1218
+ __text:0002B872 movzx edx, byte ptr [eax]
1219
+ __text:0002B875 mov eax, [ebp+vector]
1220
+ __text:0002B878 add eax, 7
1221
+ __text:0002B87B movzx eax, byte ptr [eax]
1222
+ __text:0002B87E imul eax, edx
1223
+ __text:0002B881 mov ecx, eax
1224
+ __text:0002B883 mov eax, [ebp+matrix]
1225
+ __text:0002B886 add eax, 6
1226
+ __text:0002B889 movzx edx, byte ptr [eax]
1227
+ __text:0002B88C mov eax, [ebp+vector]
1228
+ __text:0002B88F add eax, 6
1229
+ __text:0002B892 movzx eax, byte ptr [eax]
1230
+ __text:0002B895 imul eax, edx
1231
+ __text:0002B898 lea eax, [ecx+eax]
1232
+ __text:0002B89B lea ecx, [ebx+eax]
1233
+ __text:0002B89E mov eax, [ebp+matrix]
1234
+ __text:0002B8A1 add eax, 8
1235
+ __text:0002B8A4 movzx edx, byte ptr [eax]
1236
+ __text:0002B8A7 mov eax, [ebp+vector]
1237
+ __text:0002B8AA add eax, 8
1238
+ __text:0002B8AD movzx eax, byte ptr [eax]
1239
+ __text:0002B8B0 imul eax, edx
1240
+ __text:0002B8B3 lea eax, [ecx+eax]
1241
+ __text:0002B8B6 mov edx, eax
1242
+ __text:0002B8B8 mov eax, [ebp+result]
1243
+ __text:0002B8BB mov [eax], dl
1244
+ __text:0002B8BD inc [ebp+result]
1245
+ __text:0002B8C0 lea eax, [ebp+matrix]
1246
+ __text:0002B8C3 add dword ptr [eax], 9
1247
+ __text:0002B8C6
1248
+ __text:0002B8C6 loc_2B8C6: ; CODE XREF: _MatrixMultiply+Ej
1249
+ __text:0002B8C6 lea eax, [ebp+i]
1250
+ __text:0002B8C9 dec dword ptr [eax]
1251
+ __text:0002B8CB cmp [ebp+i], 0FFFFFFFFh
1252
+ __text:0002B8CF jnz loc_2B7E5
1253
+ __text:0002B8D5 add esp, 14h
1254
+ __text:0002B8D8 pop ebx
1255
+ __text:0002B8D9 leave
1256
+ __text:0002B8DA retn
1257
+ __text:0002B8DA _MatrixMultiply endp
1258
+
1259
+ __text:000A218D ; =============== S U B R O U T I N E =======================================
1260
+ __text:000A218D
1261
+ __text:000A218D ; Attributes: bp-based frame
1262
+ __text:000A218D
1263
+ __text:000A218D _ZiNumberLen proc near ; CODE XREF: _ConstructPinyinFromChars+2Dp
1264
+ __text:000A218D ; _ConvertHanziToOtherHomophone+62p ...
1265
+ __text:000A218D
1266
+ __text:000A218D returnValue = dword ptr -0Ch
1267
+ __text:000A218D decompressedChar= dword ptr 8
1268
+ __text:000A218D lenBuffer = dword ptr 0Ch
1269
+ __text:000A218D
1270
+ __text:000A218D push ebp
1271
+ __text:000A218E mov ebp, esp
1272
+ __text:000A2190 sub esp, 18h
1273
+ __text:000A2193 mov eax, [ebp+decompressedChar]
1274
+ __text:000A2196 movzx eax, byte ptr [eax]
1275
+ __text:000A2199 test al, al
1276
+ __text:000A219B js short loc_A21B7
1277
+ __text:000A219D mov eax, [ebp+lenBuffer]
1278
+ __text:000A21A0 mov dword ptr [eax], 1
1279
+ __text:000A21A6 mov eax, [ebp+decompressedChar]
1280
+ __text:000A21A9 movzx eax, byte ptr [eax]
1281
+ __text:000A21AC movzx eax, al
1282
+ __text:000A21AF mov [ebp+returnValue], eax
1283
+ __text:000A21B2 jmp loc_A23CB
1284
+ __text:000A21B7 ; ---------------------------------------------------------------------------
1285
+ __text:000A21B7
1286
+ __text:000A21B7 loc_A21B7: ; CODE XREF: _ZiNumberLen+Ej
1287
+ __text:000A21B7 mov eax, [ebp+decompressedChar]
1288
+ __text:000A21BA movzx eax, byte ptr [eax]
1289
+ __text:000A21BD cmp al, 0DFh
1290
+ __text:000A21BF ja short loc_A221C
1291
+ __text:000A21C1 mov eax, [ebp+decompressedChar]
1292
+ __text:000A21C4 movzx eax, byte ptr [eax]
1293
+ __text:000A21C7 cmp al, 0C1h
1294
+ __text:000A21C9 jbe loc_A23BB
1295
+ __text:000A21CF mov eax, [ebp+decompressedChar]
1296
+ __text:000A21D2 inc eax
1297
+ __text:000A21D3 movzx eax, byte ptr [eax]
1298
+ __text:000A21D6 movzx eax, al
1299
+ __text:000A21D9 and eax, 0C0h
1300
+ __text:000A21DE cmp eax, 80h
1301
+ __text:000A21E3 jnz loc_A23BB
1302
+ __text:000A21E9 mov eax, [ebp+lenBuffer]
1303
+ __text:000A21EC mov dword ptr [eax], 2
1304
+ __text:000A21F2 mov eax, [ebp+decompressedChar]
1305
+ __text:000A21F5 movzx eax, byte ptr [eax]
1306
+ __text:000A21F8 movzx eax, al
1307
+ __text:000A21FB and eax, 1Fh
1308
+ __text:000A21FE mov edx, eax
1309
+ __text:000A2200 shl edx, 6
1310
+ __text:000A2203 mov eax, [ebp+decompressedChar]
1311
+ __text:000A2206 inc eax
1312
+ __text:000A2207 movzx eax, byte ptr [eax]
1313
+ __text:000A220A movzx eax, al
1314
+ __text:000A220D and eax, 3Fh
1315
+ __text:000A2210 mov ecx, edx
1316
+ __text:000A2212 or ecx, eax
1317
+ __text:000A2214 mov [ebp+returnValue], ecx
1318
+ __text:000A2217 jmp loc_A23CB
1319
+ __text:000A221C ; ---------------------------------------------------------------------------
1320
+ __text:000A221C
1321
+ __text:000A221C loc_A221C: ; CODE XREF: _ZiNumberLen+32j
1322
+ __text:000A221C mov eax, [ebp+decompressedChar]
1323
+ __text:000A221F movzx eax, byte ptr [eax]
1324
+ __text:000A2222 cmp al, 0EFh
1325
+ __text:000A2224 ja loc_A22D9
1326
+ __text:000A222A mov eax, [ebp+decompressedChar]
1327
+ __text:000A222D movzx eax, byte ptr [eax]
1328
+ __text:000A2230 cmp al, 0E0h
1329
+ __text:000A2232 jnz short loc_A2243
1330
+ __text:000A2234 mov eax, [ebp+decompressedChar]
1331
+ __text:000A2237 inc eax
1332
+ __text:000A2238 movzx eax, byte ptr [eax]
1333
+ __text:000A223B cmp al, 9Fh
1334
+ __text:000A223D jbe loc_A23BB
1335
+ __text:000A2243
1336
+ __text:000A2243 loc_A2243: ; CODE XREF: _ZiNumberLen+A5j
1337
+ __text:000A2243 mov eax, [ebp+decompressedChar]
1338
+ __text:000A2246 movzx eax, byte ptr [eax]
1339
+ __text:000A2249 cmp al, 0EDh
1340
+ __text:000A224B jnz short loc_A225C
1341
+ __text:000A224D mov eax, [ebp+decompressedChar]
1342
+ __text:000A2250 inc eax
1343
+ __text:000A2251 movzx eax, byte ptr [eax]
1344
+ __text:000A2254 cmp al, 9Fh
1345
+ __text:000A2256 ja loc_A23BB
1346
+ __text:000A225C
1347
+ __text:000A225C loc_A225C: ; CODE XREF: _ZiNumberLen+BEj
1348
+ __text:000A225C mov eax, [ebp+decompressedChar]
1349
+ __text:000A225F inc eax
1350
+ __text:000A2260 movzx eax, byte ptr [eax]
1351
+ __text:000A2263 movzx eax, al
1352
+ __text:000A2266 and eax, 0C0h
1353
+ __text:000A226B cmp eax, 80h
1354
+ __text:000A2270 jnz loc_A23BB
1355
+ __text:000A2276 mov eax, [ebp+decompressedChar]
1356
+ __text:000A2279 add eax, 2
1357
+ __text:000A227C movzx eax, byte ptr [eax]
1358
+ __text:000A227F movzx eax, al
1359
+ __text:000A2282 and eax, 0C0h
1360
+ __text:000A2287 cmp eax, 80h
1361
+ __text:000A228C jnz loc_A23BB
1362
+ __text:000A2292 mov eax, [ebp+lenBuffer]
1363
+ __text:000A2295 mov dword ptr [eax], 3
1364
+ __text:000A229B mov eax, [ebp+decompressedChar]
1365
+ __text:000A229E movzx eax, byte ptr [eax]
1366
+ __text:000A22A1 movzx eax, al
1367
+ __text:000A22A4 and eax, 0Fh
1368
+ __text:000A22A7 mov edx, eax
1369
+ __text:000A22A9 shl edx, 0Ch
1370
+ __text:000A22AC mov eax, [ebp+decompressedChar]
1371
+ __text:000A22AF inc eax
1372
+ __text:000A22B0 movzx eax, byte ptr [eax]
1373
+ __text:000A22B3 movzx eax, al
1374
+ __text:000A22B6 and eax, 3Fh
1375
+ __text:000A22B9 shl eax, 6
1376
+ __text:000A22BC or edx, eax
1377
+ __text:000A22BE mov eax, [ebp+decompressedChar]
1378
+ __text:000A22C1 add eax, 2
1379
+ __text:000A22C4 movzx eax, byte ptr [eax]
1380
+ __text:000A22C7 movzx eax, al
1381
+ __text:000A22CA and eax, 3Fh
1382
+ __text:000A22CD mov ecx, edx
1383
+ __text:000A22CF or ecx, eax
1384
+ __text:000A22D1 mov [ebp+returnValue], ecx
1385
+ __text:000A22D4 jmp loc_A23CB
1386
+ __text:000A22D9 ; ---------------------------------------------------------------------------
1387
+ __text:000A22D9
1388
+ __text:000A22D9 loc_A22D9: ; CODE XREF: _ZiNumberLen+97j
1389
+ __text:000A22D9 mov eax, [ebp+decompressedChar]
1390
+ __text:000A22DC movzx eax, byte ptr [eax]
1391
+ __text:000A22DF cmp al, 0F4h
1392
+ __text:000A22E1 ja loc_A23BB
1393
+ __text:000A22E7 mov eax, [ebp+decompressedChar]
1394
+ __text:000A22EA movzx eax, byte ptr [eax]
1395
+ __text:000A22ED cmp al, 0F0h
1396
+ __text:000A22EF jnz short loc_A2300
1397
+ __text:000A22F1 mov eax, [ebp+decompressedChar]
1398
+ __text:000A22F4 inc eax
1399
+ __text:000A22F5 movzx eax, byte ptr [eax]
1400
+ __text:000A22F8 cmp al, 8Fh
1401
+ __text:000A22FA jbe loc_A23BB
1402
+ __text:000A2300
1403
+ __text:000A2300 loc_A2300: ; CODE XREF: _ZiNumberLen+162j
1404
+ __text:000A2300 mov eax, [ebp+decompressedChar]
1405
+ __text:000A2303 movzx eax, byte ptr [eax]
1406
+ __text:000A2306 cmp al, 0F4h
1407
+ __text:000A2308 jnz short loc_A2319
1408
+ __text:000A230A mov eax, [ebp+decompressedChar]
1409
+ __text:000A230D inc eax
1410
+ __text:000A230E movzx eax, byte ptr [eax]
1411
+ __text:000A2311 cmp al, 8Fh
1412
+ __text:000A2313 ja loc_A23BB
1413
+ __text:000A2319
1414
+ __text:000A2319 loc_A2319: ; CODE XREF: _ZiNumberLen+17Bj
1415
+ __text:000A2319 mov eax, [ebp+decompressedChar]
1416
+ __text:000A231C inc eax
1417
+ __text:000A231D movzx eax, byte ptr [eax]
1418
+ __text:000A2320 movzx eax, al
1419
+ __text:000A2323 and eax, 0C0h
1420
+ __text:000A2328 cmp eax, 80h
1421
+ __text:000A232D jnz loc_A23BB
1422
+ __text:000A2333 mov eax, [ebp+decompressedChar]
1423
+ __text:000A2336 add eax, 2
1424
+ __text:000A2339 movzx eax, byte ptr [eax]
1425
+ __text:000A233C movzx eax, al
1426
+ __text:000A233F and eax, 0C0h
1427
+ __text:000A2344 cmp eax, 80h
1428
+ __text:000A2349 jnz short loc_A23BB
1429
+ __text:000A234B mov eax, [ebp+decompressedChar]
1430
+ __text:000A234E add eax, 3
1431
+ __text:000A2351 movzx eax, byte ptr [eax]
1432
+ __text:000A2354 movzx eax, al
1433
+ __text:000A2357 and eax, 0C0h
1434
+ __text:000A235C cmp eax, 80h
1435
+ __text:000A2361 jnz short loc_A23BB
1436
+ __text:000A2363 mov eax, [ebp+lenBuffer]
1437
+ __text:000A2366 mov dword ptr [eax], 4
1438
+ __text:000A236C mov eax, [ebp+decompressedChar]
1439
+ __text:000A236F movzx eax, byte ptr [eax]
1440
+ __text:000A2372 movzx eax, al
1441
+ __text:000A2375 and eax, 7
1442
+ __text:000A2378 mov edx, eax
1443
+ __text:000A237A shl edx, 12h
1444
+ __text:000A237D mov eax, [ebp+decompressedChar]
1445
+ __text:000A2380 inc eax
1446
+ __text:000A2381 movzx eax, byte ptr [eax]
1447
+ __text:000A2384 movzx eax, al
1448
+ __text:000A2387 and eax, 3Fh
1449
+ __text:000A238A shl eax, 0Ch
1450
+ __text:000A238D or edx, eax
1451
+ __text:000A238F mov eax, [ebp+decompressedChar]
1452
+ __text:000A2392 add eax, 2
1453
+ __text:000A2395 movzx eax, byte ptr [eax]
1454
+ __text:000A2398 movzx eax, al
1455
+ __text:000A239B and eax, 3Fh
1456
+ __text:000A239E shl eax, 6
1457
+ __text:000A23A1 or edx, eax
1458
+ __text:000A23A3 mov eax, [ebp+decompressedChar]
1459
+ __text:000A23A6 add eax, 3
1460
+ __text:000A23A9 movzx eax, byte ptr [eax]
1461
+ __text:000A23AC movzx eax, al
1462
+ __text:000A23AF and eax, 3Fh
1463
+ __text:000A23B2 mov ecx, edx
1464
+ __text:000A23B4 or ecx, eax
1465
+ __text:000A23B6 mov [ebp+returnValue], ecx
1466
+ __text:000A23B9 jmp short loc_A23CB
1467
+ __text:000A23BB ; ---------------------------------------------------------------------------
1468
+ __text:000A23BB
1469
+ __text:000A23BB loc_A23BB: ; CODE XREF: _ZiNumberLen+3Cj
1470
+ __text:000A23BB ; _ZiNumberLen+56j ...
1471
+ __text:000A23BB mov eax, [ebp+lenBuffer]
1472
+ __text:000A23BE mov dword ptr [eax], 1
1473
+ __text:000A23C4 mov [ebp+returnValue], 0FFFEh
1474
+ __text:000A23CB
1475
+ __text:000A23CB loc_A23CB: ; CODE XREF: _ZiNumberLen+25j
1476
+ __text:000A23CB ; _ZiNumberLen+8Aj ...
1477
+ __text:000A23CB mov eax, [ebp+returnValue]
1478
+ __text:000A23CE leave
1479
+ __text:000A23CF retn
1480
+ __text:000A23CF _ZiNumberLen endp
1481
+
1482
+ __text:0002A8C4 ; =============== S U B R O U T I N E =======================================
1483
+ __text:0002A8C4
1484
+ __text:0002A8C4 ; Attributes: bp-based frame
1485
+ __text:0002A8C4
1486
+ __text:0002A8C4 ; int __cdecl DBRecordReadIntoTextBuf(int buffer, FILE *fp, __int32 offset)
1487
+ __text:0002A8C4 _DBRecordReadIntoTextBuf proc near ; CODE XREF: _DBRecordRead+3Ep
1488
+ __text:0002A8C4 ; _DBRecordReadOneLine+4Ap
1489
+ __text:0002A8C4
1490
+ __text:0002A8C4 returnValue = dword ptr -1Ch
1491
+ __text:0002A8C4 recordLength = word ptr -16h
1492
+ __text:0002A8C4 recordTag = dword ptr -14h
1493
+ __text:0002A8C4 rawRecordByte = dword ptr -10h
1494
+ __text:0002A8C4 appendBufferStat= word ptr -0Ah
1495
+ __text:0002A8C4 buffer = dword ptr 8
1496
+ __text:0002A8C4 fp = dword ptr 0Ch
1497
+ __text:0002A8C4 offset = dword ptr 10h
1498
+ __text:0002A8C4
1499
+ __text:0002A8C4 push ebp
1500
+ __text:0002A8C5 mov ebp, esp
1501
+ __text:0002A8C7 sub esp, 38h
1502
+ __text:0002A8CA mov dword ptr [esp+8], 0 ; int
1503
+ __text:0002A8D2 mov eax, [ebp+offset]
1504
+ __text:0002A8D5 mov [esp+4], eax ; __int32
1505
+ __text:0002A8D9 mov eax, [ebp+fp]
1506
+ __text:0002A8DC mov [esp], eax ; FILE *
1507
+ __text:0002A8DF call _fseek
1508
+ __text:0002A8E4 test eax, eax
1509
+ __text:0002A8E6 jz short loc_2A8F4
1510
+ __text:0002A8E8 mov [ebp+returnValue], 0FFFFFFB0h
1511
+ __text:0002A8EF jmp loc_2A9F0
1512
+ __text:0002A8F4 ; ---------------------------------------------------------------------------
1513
+ __text:0002A8F4
1514
+ __text:0002A8F4 loc_2A8F4: ; CODE XREF: _DBRecordReadIntoTextBuf+22j
1515
+ __text:0002A8F4 lea eax, [ebp+recordLength]
1516
+ __text:0002A8F7 mov [esp+4], eax ; void *
1517
+ __text:0002A8FB mov eax, [ebp+fp]
1518
+ __text:0002A8FE mov [esp], eax ; FILE *
1519
+ __text:0002A901 call _ReadBigEndianShort
1520
+ __text:0002A906 test eax, eax
1521
+ __text:0002A908 jz short loc_2A914
1522
+ __text:0002A90A movzx eax, [ebp+recordLength]
1523
+ __text:0002A90E cmp ax, 7530h
1524
+ __text:0002A912 jbe short loc_2A920
1525
+ __text:0002A914
1526
+ __text:0002A914 loc_2A914: ; CODE XREF: _DBRecordReadIntoTextBuf+44j
1527
+ __text:0002A914 mov [ebp+returnValue], 0FFFFFFEDh
1528
+ __text:0002A91B jmp loc_2A9F0
1529
+ __text:0002A920 ; ---------------------------------------------------------------------------
1530
+ __text:0002A920
1531
+ __text:0002A920 loc_2A920: ; CODE XREF: _DBRecordReadIntoTextBuf+4Ej
1532
+ __text:0002A920 mov eax, [ebp+fp]
1533
+ __text:0002A923 mov [esp], eax ; FILE *
1534
+ __text:0002A926 call _getc
1535
+ __text:0002A92B mov [ebp+recordTag], eax
1536
+ __text:0002A92E cmp [ebp+recordTag], 0FFFFFFFFh
1537
+ __text:0002A932 jnz short loc_2A940
1538
+ __text:0002A934 mov [ebp+returnValue], 0FFFFFFEDh
1539
+ __text:0002A93B jmp loc_2A9F0
1540
+ __text:0002A940 ; ---------------------------------------------------------------------------
1541
+ __text:0002A940
1542
+ __text:0002A940 loc_2A940: ; CODE XREF: _DBRecordReadIntoTextBuf+6Ej
1543
+ __text:0002A940 movzx eax, [ebp+recordLength]
1544
+ __text:0002A944 dec eax
1545
+ __text:0002A945 mov [ebp+recordLength], ax
1546
+ __text:0002A949 mov eax, [ebp+recordTag]
1547
+ __text:0002A94C shr eax, 1
1548
+ __text:0002A94E and eax, 1
1549
+ __text:0002A951 test al, al
1550
+ __text:0002A953 jz short loc_2A982
1551
+ __text:0002A955 mov eax, [ebp+recordTag]
1552
+ __text:0002A958 movzx edx, al
1553
+ __text:0002A95B movzx eax, [ebp+recordLength]
1554
+ __text:0002A95F movzx eax, ax
1555
+ __text:0002A962 mov [esp+0Ch], edx
1556
+ __text:0002A966 mov [esp+8], eax
1557
+ __text:0002A96A mov eax, [ebp+fp]
1558
+ __text:0002A96D mov [esp+4], eax
1559
+ __text:0002A971 mov eax, [ebp+buffer]
1560
+ __text:0002A974 mov [esp], eax
1561
+ __text:0002A977 call _DecompressDBRec
1562
+ __text:0002A97C cwde
1563
+ __text:0002A97D mov [ebp+returnValue], eax
1564
+ __text:0002A980 jmp short loc_2A9F0
1565
+ __text:0002A982 ; ---------------------------------------------------------------------------
1566
+ __text:0002A982
1567
+ __text:0002A982 loc_2A982: ; CODE XREF: _DBRecordReadIntoTextBuf+8Fj
1568
+ __text:0002A982 ; _DBRecordReadIntoTextBuf+123j
1569
+ __text:0002A982 mov eax, [ebp+fp]
1570
+ __text:0002A985 mov [esp], eax ; FILE *
1571
+ __text:0002A988 call _getc
1572
+ __text:0002A98D mov [ebp+rawRecordByte], eax
1573
+ __text:0002A990 cmp [ebp+rawRecordByte], 0FFFFFFFFh
1574
+ __text:0002A994 jnz short loc_2A99F
1575
+ __text:0002A996 mov [ebp+returnValue], 0FFFFFFEDh
1576
+ __text:0002A99D jmp short loc_2A9F0
1577
+ __text:0002A99F ; ---------------------------------------------------------------------------
1578
+ __text:0002A99F
1579
+ __text:0002A99F loc_2A99F: ; CODE XREF: _DBRecordReadIntoTextBuf+D0j
1580
+ __text:0002A99F cmp [ebp+rawRecordByte], 0
1581
+ __text:0002A9A3 jnz short loc_2A9AE
1582
+ __text:0002A9A5 mov [ebp+returnValue], 0
1583
+ __text:0002A9AC jmp short loc_2A9F0
1584
+ __text:0002A9AE ; ---------------------------------------------------------------------------
1585
+ __text:0002A9AE
1586
+ __text:0002A9AE loc_2A9AE: ; CODE XREF: _DBRecordReadIntoTextBuf+DFj
1587
+ __text:0002A9AE mov eax, [ebp+rawRecordByte]
1588
+ __text:0002A9B1 movsx eax, al
1589
+ __text:0002A9B4 mov [esp+4], eax
1590
+ __text:0002A9B8 mov eax, [ebp+buffer]
1591
+ __text:0002A9BB mov [esp], eax
1592
+ __text:0002A9BE call _TBPutC
1593
+ __text:0002A9C3 mov [ebp+appendBufferStat], ax
1594
+ __text:0002A9C7 cmp [ebp+appendBufferStat], 0
1595
+ __text:0002A9CC jz short loc_2A9D7
1596
+ __text:0002A9CE movsx eax, [ebp+appendBufferStat]
1597
+ __text:0002A9D2 mov [ebp+returnValue], eax
1598
+ __text:0002A9D5 jmp short loc_2A9F0
1599
+ __text:0002A9D7 ; ---------------------------------------------------------------------------
1600
+ __text:0002A9D7
1601
+ __text:0002A9D7 loc_2A9D7: ; CODE XREF: _DBRecordReadIntoTextBuf+108j
1602
+ __text:0002A9D7 movzx eax, [ebp+recordLength]
1603
+ __text:0002A9DB dec eax
1604
+ __text:0002A9DC mov [ebp+recordLength], ax
1605
+ __text:0002A9E0 movzx eax, [ebp+recordLength]
1606
+ __text:0002A9E4 test ax, ax
1607
+ __text:0002A9E7 jnz short loc_2A982
1608
+ __text:0002A9E9 mov [ebp+returnValue], 0
1609
+ __text:0002A9F0
1610
+ __text:0002A9F0 loc_2A9F0: ; CODE XREF: _DBRecordReadIntoTextBuf+2Bj
1611
+ __text:0002A9F0 ; _DBRecordReadIntoTextBuf+57j ...
1612
+ __text:0002A9F0 mov eax, [ebp+returnValue]
1613
+ __text:0002A9F3 leave
1614
+ __text:0002A9F4 retn
1615
+ __text:0002A9F4 _DBRecordReadIntoTextBuf endp
1616
+