当前位置: 代码迷 >> 汇编语言 >> 小弟我要,罗云彬书本第10章的一个程序
  详细解决方案

小弟我要,罗云彬书本第10章的一个程序

热度:235   发布时间:2016-05-02 04:39:25.0
我要求助,罗云彬书本第10章的一个程序
请看代码,资源文件

#include <resource.h>

#define ICO_MAIN 1000
#define DLG_MAIN 100
#define IDC_FILE 101
#define IDC_BROWSE 102

ICO_MAIN ICON "my.ico"

DLG_MAIN DIALOG 84,79,201,41
STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "UNIX TEXT file ------> PC TEXT file"
FONT 9,"宋体"
{
LTEXT "文件名", -1,7,8,25,8
EDITTEXT IDC_FILE,35,5,160,12,ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
PUSHBUTTON "浏览",IDC_BROWSE,115,22,40,14
PUSHBUTTON "开始",IDOK,155,22,40,14,WS_DISABLED | WS_TABSTOP

}

asm文件
		.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include comdlg32.inc
includelib comdlg32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000
DLG_MAIN equ 100
IDC_FILE equ 101
IDC_BROWSE equ 102
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?

hInstance dd ?
hWinMain dd ?
szFileName db MAX_PATH dup (?)

.const
szFileExt db '文本文件',0,'*.txt',0,0
szNewFile db '.new.txt',0
szErrOpenFile db '无法打开源文件!',0
szErrCreateFile db '无法创建新的文本文件!',0
szSuccess db '文件转换成功,新的文本文件保存为',0dh,0ah,'%s',0
szSuccessCap db '提示',0


.code
_FormatText proc uses esi _lpData,_dwSize,_hFile
local @szBuffer[128]:byte,@dwBytesWrite

mov esi,_lpData
mov ecx,_dwSize
lea edi,@szBuffer
xor edx,edx
cld
_LoopBegin:
or ecx,ecx
jz _WriteLine
lodsb
dec ecx
cmp al,0dh
jz _LoopBegin
cmp al,0ah
jz _LineEnd
stosb
inc edx
cmp edx,sizeof @szBuffer-2
jae _WriteLine
jmp _LoopBegin
_LineEnd:
mov ax,0a0dh
stosw
inc edx
inc edx
_WriteLine:
push ecx
.if edx
invoke WriteFile,_hFile,addr @szBuffer,\
edx,addr @dwBytesWrite,NULL
.endif
lea edi,@szBuffer
xor edx,edx
pop ecx
or ecx,ecx
jnz _LoopBegin
ret
_FormatText endp
_ProcFile proc
local @hFile,@hFileNew,@dwBytesRead
local @szNewFile[MAX_PATH]:byte
local @szReadBuffer[512]:byte
invoke CreateFile,addr szFileName,GENERIC_READ,FILE_SHARE_READ,0,\
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,hWinMain,addr szErrOpenFile,\
NULL,MB_OK or MB_ICONEXCLAMATION
ret
.endif
mov @hFile,eax

invoke lstrcpy,addr @szNewFile,addr szFileName
invoke lstrcat,addr @szNewFile,addr szNewFile
invoke CreateFile,addr @szNewFile,GENERIC_WRITE,\
FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,hWinMain,addr szErrCreateFile,\
NULL,MB_OK or MB_ICONEXCLAMATION
invoke CloseHandle,@hFile
ret
.endif
mov @hFileNew,eax
xor eax,eax
mov @dwBytesRead,eax
.while TRUE
lea esi,@szReadBuffer
invoke ReadFile,@hFile,esi,sizeof @szReadBuffer,\
addr @dwBytesRead,0
.break .if ! @dwBytesRead
invoke _FormatText,esi,@dwBytesRead,@hFileNew
.endw
invoke CloseHandle,@hFile
invoke CloseHandle,@hFileNew
invoke wsprintf,addr @szReadBuffer,addr szSuccess,addr @szNewFile
invoke MessageBox,hWinMain,addr @szReadBuffer,\
  相关解决方案