windows环境下32位汇编语言程序设计-第75节
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
mov word ptr 'ecx';ax
invoke _WalkTree;_hFile;ebx;addr @szWord
。endif
inc @dwTemp
。endw
;********************************************************************
; 释放结点
;********************************************************************
。if 'esi'。dwDepth
invoke GlobalFree;esi
。endif
popad
assume esi:ptr WORD_COUNT
ret
_WalkTree endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 如果输入的是字母则建立或移动到下一结点,输入0则增加结点计数
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_CountLetter proc _dwLetter
local @dwIndex
assume edi:ptr WORD_COUNT
or al;20h ;转换成小写字母
。if (al 》= 'a') && (al 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
include windows。inc
include user32。inc
includelib user32。lib
include kernel32。inc
includelib kernel32。lib
include dlg32。inc
includelib dlg32。lib
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; Equ 等值定义
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
ICO_MAIN equ 1000
DLG_MAIN equ 100
IDC_FILE equ 101
IDC_BROWSE equ 102
WORD_COUNT struct
lpLetter dd 26 dup (?)
dwCount dd ?
dwDepth dd ?
WORD_COUNT ends
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 数据段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
。data?
hInstance dd ?
hWinMain dd ?
szFileName db MAX_PATH dup (?)
szBuffer db 4096 dup (?)
stWordCount WORD_COUNT
dwCount dd ?
dwOption dd ?
F_COUNTING equ 00000001h
F_FILEEND equ 00000002h
nst
szFileExt db '全部文件';0;'*。*';0;0
szLogExt db '。log';0
szErrOpenFile db '无法打开文件!';0
szErrCreateFile db '无法建立记录文件!';0
szFmtWord db '%5d (%3d‰) %s';0dh;0ah;0
szSuccees db '统计成功,请查看记录文件%s';0
szSucceesCap db '统计成功';0
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 代码段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
de
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 遍历树并输出结果
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_WalkTree proc _hFile;_lpWC;_lpsz
local @dwTemp
local @szWord'52':byte
pushad
mov esi;_lpWC
assume esi:ptr WORD_COUNT
。if 'esi'。dwDepth && 'esi'。dwCount
;********************************************************************
; 计算百分比并写入log文件
;********************************************************************
mov eax;'esi'。dwCount
mov ecx;1000
mul ecx
mov ecx;dwCount
。if ecx
div ecx
。else
mov eax;0
。endif
invoke wsprintf;addr szBuffer;
addr szFmtWord;'esi'。dwCount;eax;_lpsz
invoke lstrlen;addr szBuffer
mov ecx;eax
invoke WriteFile;_hFile;addr szBuffer;
ecx;addr @dwTemp;NULL
。endif
;********************************************************************
; 如果有下层结点则递归调用
;********************************************************************
mov @dwTemp;0
。while @dwTemp 《 26
mov ebx;@dwTemp
mov ebx;dword ptr 'esi+ebx*4'
。if ebx
invoke lstrcpy;addr @szWord;_lpsz
invoke lstrlen;addr @szWord
lea ecx;@szWord
add ecx;eax
mov eax;@dwTemp
add al;'a'
mov word ptr 'ecx';ax
invoke _WalkTree;_hFile;ebx;addr @szWord
。endif
inc @dwTemp
。endw
;********************************************************************
; 释放结点
;********************************************************************
。if 'esi'。dwDepth
invoke GlobalFree;esi
。endif
popad
assume esi:ptr WORD_COUNT
ret
_WalkTree endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 如果输入的是字母则建立或移动到下一结点,输入0则增加结点计数
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_CountLetter proc _dwLetter
local @dwIndex
assume edi:ptr WORD_COUNT
or al;20h ;转换成小写字母
。if (al 》= 'a') && (al