?? fasmw.asm
字號:
; flat assembler Win32 IDE
; Copyright (c) 1999-2006, Tomasz Grysztar.
; All rights reserved.
format PE GUI 4.0
entry start
stack 20000h
include 'win32a.inc'
include 'asmedit.ash'
include '..\..\version.inc'
IDE_VERSION_STRING equ "0.93.9"
struct EDITITEM
header TC_ITEMHEADER
hwnd dd ?
pszpath dd ?
ends
FM_NEW = WM_USER + 0
FM_OPEN = WM_USER + 1
FM_SAVE = WM_USER + 2
FM_COMPILE = WM_USER + 3
FM_SELECT = WM_USER + 4
FM_ASSIGN = WM_USER + 5
FM_GETSELECTED = WM_USER + 6
FM_GETASSIGNED = WM_USER + 7
FM_GETHANDLE = WM_USER + 8
CF_REPLACEPROMPT = 1
struct HH_AKLINK
cbStruct dd ?
fReserved dd ?
pszKeywords dd ?
pszUrl dd ?
pszMsgText dd ?
pszMsgTitle dd ?
pszWindow dd ?
fIndexOnFail dd ?
ends
HH_DISPLAY_TOPIC = 0
HH_KEYWORD_LOOKUP = 0Dh
section '.data' data readable writeable
_caption db 'flat assembler ',VERSION_STRING,0
_class db 'FASMW_IDE2',0
_asmedit_class db 'ASMEDIT',0
_listbox_class db 'LISTBOX',0
_tabctrl_class db 'SysTabControl32',0
_htmlhelp_library db 'HHCTRL.OCX',0
_htmlhelp_api db 'HtmlHelpA',0
_memory_error db 'Not enough memory to complete operation.',0
_loading_error db 'Could not load file %s.',0
_run_object_error db 'Cannot execute object file.',0
_saving_question db 'File was modified. Save it now?',0
_not_found db 'Text not found.',0
_replace_prompt db 'Replace this occurence?',0
_untitled db 'Untitled',0
_font_face db 'Courier New',0
_row_column db 9,'%d,'
_value db '%d'
_null db 0
_summary db '%d passes, %d.%d seconds, %d bytes.',0
_summary_small db '%d passes, %d bytes.',0
_assembler_error db 'Error: %s.',0
_line_number db '%s [%d]',0
_color db '%d,%d,%d',0
_modified_status db 9,'Modified',0
_pick_help db 'Pick help file',0
_asm_extension db 'ASM',0
_section_environment db 'Environment',0
_section_compiler db 'Compiler',0
_key_compiler_memory db 'Memory',0
_key_compiler_priority db 'Priority',0
_section_options db 'Options',0
_key_options_securesel db 'SecureSelection',0
_key_options_autobrackets db 'AutoBrackets',0
_key_options_autoindent db 'AutoIndent',0
_key_options_smarttabs db 'SmartTabs',0
_key_options_optimalfill db 'OptimalFill',0
_key_options_revivedeadkeys db 'ReviveDeadKeys',0
_key_options_consolecaret db 'ConsoleCaret',0
_key_options_oneinstanceonly db 'OneInstanceOnly',0
_section_colors db 'Colors',0
_key_color_text db 'Text',0
_key_color_background db 'Background',0
_key_color_seltext db 'SelectionText',0
_key_color_selbackground db 'SelectionBackground',0
_key_color_symbols db 'Symbols',0
_key_color_numbers db 'Numbers',0
_key_color_strings db 'Strings',0
_key_color_comments db 'Comments',0
_section_font db 'Font',0
_key_font_face db 'Face',0
_key_font_height db 'Height',0
_key_font_width db 'Width',0
_key_font_weight db 'Weight',0
_key_font_italic db 'Italic',0
_key_font_charset db 'CharSet',0
_section_window db 'Window',0
_key_window_top db 'Top',0
_key_window_left db 'Left',0
_key_window_right db 'Right',0
_key_window_bottom db 'Bottom',0
_key_window_maximized db 'Maximized',0
_section_help db 'Help',0
_key_help_path db 'Path',0
_appearance_settings db 'Font',0
db 'Text color',0
db 'Background color',0
db 'Selection text color',0
db 'Selection background color',0
db 'Symbols color',0
db 'Numbers color',0
db 'Strings color',0
db 'Comments color',0
db 0
_memory_settings db '1024',0
db '2048',0
db '4096',0
db '8192',0
db '16384',0
db '32768',0
db '65536',0
db 0
_priority_settings db 'Idle',0
db 'Low',0
db 'Normal',0
db 'High',0
db 'Realtime',0
db 0
asmedit_style dd AES_AUTOINDENT+AES_SMARTTABS+AES_OPTIMALFILL+AES_CONSOLECARET
editor_colors rd 4
asm_syntax_colors dd 0xF03030,0x009000,0x0000B0,0x808080
preview_text db 0Dh,0Ah
db ' org 100h',0Dh,0Ah
db 0Dh,0Ah
db ' mov ah,09h ',' ; write',0Dh,0Ah
db ' mov dx,text',0Dh,0Ah
db ' int 21h',0Dh,0Ah
db ' int 20h',0Dh,0Ah
db 0Dh,0Ah
db ' text db "Hello!",24h',0Dh,0Ah
db 0
preview_selection dd 1,5,1,6
asm_filter db 'Assembler files',0,'*.ASM;*.INC;*.ASH',0
db 'All files',0,'*.*',0
db 0
help_filter db 'Help files',0,'*.HLP;*.CHM',0
db 0
whell_scroll_lines dd 3
HtmlHelp dd 0
section '.udata' readable writeable
hinstance dd ?
hkey_main dd ?
hmenu_main dd ?
hmenu_edit dd ?
hmenu_tab dd ?
hacc dd ?
hfont dd ?
hwnd_main dd ?
hwnd_status dd ?
hwnd_tabctrl dd ?
hwnd_history dd ?
hwnd_asmedit dd ?
hwnd_compiler dd ?
hwnd_progress dd ?
himl dd ?
hthread dd ?
hmem_display dd ?
hmem_error_data dd ?
hfile dd ?
command_flags dd ?
search_settings dd ?
compiler_memory dd ?
compiler_priority dd ?
assigned_file dd ?
program_arguments dd ?
param_buffer rd 10h
user_colors rd 40h
name_buffer rb 100h
search_string rb 1000h
replace_string rb 1000h
string_buffer rb 1000h
help_path rb 1000h
ini_path rb 1000h
path_buffer rb 4000h
msg MSG
wc WNDCLASS
rc RECT
pt POINT
ei EDITITEM
font LOGFONT
bm BITMAP
tcht TC_HITTESTINFO
wp WINDOWPLACEMENT
aepos AEPOS
ofn OPENFILENAME
cf CHOOSEFONT
cc CHOOSECOLOR
systime SYSTEMTIME
sinfo STARTUPINFO
pinfo PROCESS_INFORMATION
cp COPYDATASTRUCT
bytes_count dd ?
asmedit_font dd ?
tmp_colors rd 8
tmp_font LOGFONT
backup_font LOGFONT
hhkey HH_AKLINK
case_table rb 100h
section '.code' code readable executable
include 'asmedit.inc'
start:
invoke GetModuleHandle,0
mov [hinstance],eax
invoke GetCommandLine
mov esi,eax
mov edi,ini_path
find_program_path:
lodsb
cmp al,20h
je find_program_path
cmp al,22h
je quoted_program_path
cmp al,0Dh
je program_path_ok
or al,al
jnz get_program_path
dec esi
jmp program_path_ok
get_program_path:
stosb
lodsb
cmp al,20h
je program_path_ok
cmp al,0Dh
je program_path_ok
or al,al
jnz get_program_path
dec esi
jmp program_path_ok
quoted_program_path:
lodsb
cmp al,22h
je program_path_ok
cmp al,0Dh
je program_path_ok
stosb
or al,al
jnz quoted_program_path
dec esi
program_path_ok:
mov [program_arguments],esi
mov ebx,edi
find_program_extension:
cmp ebx,ini_path
je make_ini_extension
dec ebx
mov al,[ebx]
cmp al,'\'
je make_ini_extension
cmp al,'/'
je make_ini_extension
cmp al,'.'
jne find_program_extension
mov edi,ebx
jmp find_program_extension
make_ini_extension:
mov eax,'.INI'
stosd
xor al,al
stosb
invoke GetFullPathName,ini_path,1000h,ini_path,param_buffer
mov [param_buffer],0
stdcall GetIniBit,ini_path,_section_options,_key_options_oneinstanceonly,param_buffer,1
cmp [param_buffer],0
je create_new_window
invoke FindWindow,_class,NULL
or eax,eax
jnz window_already_exists
create_new_window:
invoke LoadCursor,0,IDC_IBEAM
mov [wc.hCursor],eax
mov [wc.style],CS_GLOBALCLASS+CS_DBLCLKS
mov [wc.lpfnWndProc],AsmEdit
mov eax,[hinstance]
mov [wc.hInstance],eax
mov [wc.cbWndExtra],4
xor eax,eax
mov [wc.hbrBackground],eax
mov [wc.cbClsExtra],eax
mov [wc.lpszMenuName],eax
mov [wc.lpszClassName],_asmedit_class
invoke RegisterClass,wc
or eax,eax
jz end_loop
invoke CreateFont,0,0,0,0,0,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_RASTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH+FF_DONTCARE,NULL
or eax,eax
jz end_loop
mov [asmedit_font],eax
mov edi,case_table
xor ebx,ebx
mov esi,100h
make_case_table:
invoke CharLower,ebx
stosb
inc bl
dec esi
jnz make_case_table
mov edi,characters
mov ecx,100h
xor al,al
prepare_characters_table:
stosb
inc al
loop prepare_characters_table
mov esi,characters+'a'
mov edi,characters+'A'
mov ecx,26
rep movsb
mov edi,characters
mov esi,symbol_characters+1
movzx ecx,byte [esi-1]
xor eax,eax
convert_table:
lodsb
mov byte [edi+eax],0
loop convert_table
invoke LoadIcon,[hinstance],IDI_MAIN
mov [wc.hIcon],eax
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
mov [wc.style],0
mov [wc.lpfnWndProc],MainWindow
mov [wc.cbClsExtra],0
mov [wc.cbWndExtra],0
mov eax,[hinstance]
mov [wc.hInstance],eax
mov [wc.hbrBackground],COLOR_BTNFACE+1
mov [wc.lpszMenuName],0
mov [wc.lpszClassName],_class
invoke RegisterClass,wc
invoke LoadMenu,[hinstance],IDM_MAIN
mov [hmenu_main],eax
invoke GetSubMenu,eax,1
mov [hmenu_edit],eax
invoke LoadMenu,[hinstance],IDM_TAB
invoke GetSubMenu,eax,0
mov [hmenu_tab],eax
invoke LoadAccelerators,[hinstance],IDA_MAIN
mov [hacc],eax
invoke CreateWindowEx,0,_class,_caption,WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS,96,64,384,324,NULL,[hmenu_main],[hinstance],NULL
or eax,eax
jz end_loop
mov [hwnd_main],eax
mov eax,SW_SHOW
test [wp.flags],WPF_RESTORETOMAXIMIZED
jz show_main_window
mov eax,SW_SHOWMAXIMIZED
show_main_window:
invoke ShowWindow,[hwnd_main],eax
invoke UpdateWindow,[hwnd_main]
msg_loop:
invoke GetMessage,msg,NULL,0,0
or eax,eax
jz end_loop
invoke TranslateAccelerator,[hwnd_main],[hacc],msg
or eax,eax
jnz msg_loop
cmp [msg.message],WM_KEYDOWN
je msg_dispatch
invoke TranslateMessage,msg
msg_dispatch:
invoke DispatchMessage,msg
jmp msg_loop
window_already_exists:
mov ebx,eax
invoke ShowWindow,ebx,SW_SHOWNORMAL
invoke SetForegroundWindow,ebx
mov edi,[program_arguments]
mov [cp.lpData],edi
or ecx,-1
xor al,al
repne scasb
neg ecx
mov [cp.cbData],ecx
invoke SendMessage,ebx,WM_COPYDATA,NULL,cp
end_loop:
invoke ExitProcess,[msg.wParam]
proc MainWindow hwnd,wmsg,wparam,lparam
push ebx esi edi
cmp [wmsg],WM_CREATE
je wmcreate
cmp [wmsg],WM_COPYDATA
je wmcopydata
cmp [wmsg],WM_GETMINMAXINFO
je wmgetminmaxinfo
cmp [wmsg],WM_SIZE
je wmsize
cmp [wmsg],WM_SETFOCUS
je wmsetfocus
cmp [wmsg],FM_NEW
je fmnew
cmp [wmsg],FM_OPEN
je fmopen
cmp [wmsg],FM_SAVE
je fmsave
cmp [wmsg],FM_COMPILE
je fmcompile
cmp [wmsg],FM_SELECT
je fmselect
cmp [wmsg],FM_ASSIGN
je fmassign
cmp [wmsg],FM_GETSELECTED
je fmgetselected
cmp [wmsg],FM_GETASSIGNED
je fmgetassigned
cmp [wmsg],FM_GETHANDLE
je fmgethandle
cmp [wmsg],WM_INITMENU
je wminitmenu
cmp [wmsg],WM_COMMAND
je wmcommand
cmp [wmsg],WM_NOTIFY
je wmnotify
cmp [wmsg],WM_DROPFILES
je wmdropfiles
cmp [wmsg],WM_CLOSE
je wmclose
cmp [wmsg],WM_DESTROY
je wmdestroy
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp finish
wmcreate:
xor eax,eax
mov [search_settings],eax
mov [search_string],al
mov [replace_string],al
mov [compiler_memory],16384
mov [compiler_priority],THREAD_PRIORITY_NORMAL
mov [assigned_file],-1
mov [help_path],0
mov [ofn.lStructSize],sizeof.OPENFILENAME
mov eax,[hwnd]
mov [ofn.hwndOwner],eax
mov eax,[hinstance]
mov [ofn.hInstance],eax
mov [ofn.lpstrCustomFilter],NULL
mov [ofn.nFilterIndex],1
mov [ofn.nMaxFile],1000h
mov [ofn.lpstrFileTitle],name_buffer
mov [ofn.nMaxFileTitle],100h
mov [ofn.lpstrInitialDir],NULL
mov [ofn.lpstrDefExt],_asm_extension
mov [font.lfHeight],16
mov [font.lfWidth],0
mov [font.lfEscapement],0
mov [font.lfOrientation],0
mov [font.lfWeight],0
mov [font.lfItalic],FALSE
mov [font.lfUnderline],FALSE
mov [font.lfStrikeOut],FALSE
mov [font.lfCharSet],DEFAULT_CHARSET
mov [font.lfOutPrecision],OUT_RASTER_PRECIS
mov [font.lfClipPrecision],CLIP_DEFAULT_PRECIS
mov [font.lfQuality],DEFAULT_QUALITY
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -