FormatCode Code Formatter is based on serveral powerful syntax parser engines
so you can exactly control the appearance of your source code. Here is the code formatting demo of
FormatCode 80x86 Assembly / x86 Asm Code Formatter to prove the ability
of code formatting functions of FormatCode:
.386
.MODEL FLAT,STDCALL
include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
WinMain PROTO :DWORD, :DWORD, :DWORD, :SDWORD
PolyBezier PROTO STDCALL hdc:DWORD, apt:DWORD, num:DWORD
DrawBezier PROTO STDCALL hdc:DWORD, apt:POINT
WHITE_PEN EQU 6
BLACK_PEN EQU 7
MK_LBUTTON EQU 1
MK_RBUTTON EQU 2
.data
ClassName db "SimpleWinClass",0
AppName db "Bezier Splines",0
BezPoints STRUCT Spt POINT {} Cp1 POINT {} Cp2 POINT {} Ept POINT {} BezPoints ENDS
apt BezPoints {}
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
LOWORD MACRO
mov eax, lParam
and eax, 0FFFFh
ENDM
HIWORD MACRO
mov ebx, lParam
shr ebx, 16
ENDM
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:SDWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,0
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
mov hwnd,eax
INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
INVOKE UpdateWindow, hwnd
.WHILE TRUE
INVOKE GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
INVOKE TranslateMessage, ADDR msg
INVOKE DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
mov eax,uMsg
.IF eax==WM_SIZE LOWORD HIWORD shr eax,2
mov apt.Spt.x,eax
shr ebx,1
mov apt.Spt.y,ebx
mov apt.Ept.y,ebx
shl eax,1
mov apt.Cp1.x,eax
mov apt.Cp2.x,eax
shr ebx,1
mov apt.Cp1.y,ebx
add ebx,apt.Spt.y
mov apt.Cp2.y,ebx
mov eax,apt.Cp1.x
add eax,apt.Spt.x
mov apt.Ept.x,eax
.ELSEIF eax==WM_LBUTTONDOWN || eax==WM_RBUTTONDOWN || eax==WM_MOUSEMOVE
.IF (wParam & MK_LBUTTON) || (wParam & MK_RBUTTON)
invoke GetDC, hWnd
mov hdc,eax
invoke GetStockObject, WHITE_PEN
invoke SelectObject, hdc,eax
invoke DrawBezier, hdc, apt .IF (wParam & MK_LBUTTON)
LOWORD
HIWORD
mov apt.Cp1.x,eax mov apt.Cp1.y,ebx
.ENDIF
.IF (wParam & MK_RBUTTON)
LOWORD
HIWORD
mov apt.Cp2.x,eax
mov apt.Cp2.y,ebx
.ENDIF
invoke GetStockObject, BLACK_PEN
invoke SelectObject, hdc,eax
invoke DrawBezier, hdc, apt
invoke ReleaseDC, hWnd,hdc
.ENDIF
.ELSEIF eax==WM_PAINT
invoke InvalidateRect, hWnd, NULL, TRUE
invoke BeginPaint, hWnd, ADDR ps
mov hdc,eax
invoke DrawBezier, hdc, apt
invoke EndPaint, hWnd, ADDR ps
.ELSEIF eax==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
DrawBezier PROC Hdc:DWORD, aapt:POINT
invoke PolyBezier, Hdc, ADDR aapt, 4
invoke MoveToEx, Hdc, apt.Spt.x, apt.Spt.y, NULL
invoke LineTo, Hdc, apt.Cp1.x, apt.Cp1.y
invoke MoveToEx, Hdc, apt.Cp2.x, apt.Cp2.y, NULL
invoke LineTo, Hdc, apt.Ept.x, apt.Ept.y
ret
DrawBezier ENDP
end start
.386
.model flat, stdcall
include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
WinMain proto :DWORD, :DWORD, :DWORD, :SDWORD
PolyBezier proto stdcall hdc:DWORD, apt:DWORD, num:DWORD
DrawBezier proto stdcall hdc:DWORD, apt:POINT
WHITE_PEN equ 6
BLACK_PEN equ 7
MK_LBUTTON equ 1
MK_RBUTTON equ 2
.data
ClassName db "SimpleWinClass", 0
AppName db "Bezier Splines", 0
BezPoints struct Spt POINT {} Cp1 POINT {} Cp2 POINT {} Ept POINT {} BezPoints ends
apt BezPoints {}
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
LOWORD macro
mov EAX, lParam
and EAX, 0FFFFh
endm
HIWORD macro
mov EBX, lParam
shr EBX, 16
endm
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, EAX
invoke GetCommandLine
invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
invoke ExitProcess, EAX
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:SDWORD
local wc:WNDCLASSEX
local msg:MSG
local hwnd:HWND
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground, COLOR_WINDOW+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset ClassName
invoke LoadIcon, NULL, IDI_APPLICATION
mov wc.hIcon, EAX
mov wc.hIconSm, 0
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, EAX
invoke RegisterClassEx, addr wc
invoke CreateWindowEx, NULL, addr ClassName, addr AppName, \
WS_OVERLAPPEDWINDOW , CW_USEDEFAULT, \
CW_USEDEFAULT , CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, \
hInst , NULL
mov hwnd, EAX
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.while TRUE
invoke GetMessage, addr msg, NULL, 0, 0
.break .if (!EAX)
invoke TranslateMessage, addr msg
invoke DispatchMessage, addr msg
.endw
mov EAX, msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
local hdc:HDC
local ps:PAINTSTRUCT
mov EAX, uMsg
.if EAX==WM_SIZE LOWORD HIWORD shr EAX, 2
mov apt.Spt.x, EAX
shr EBX, 1
mov apt.Spt.y, EBX
mov apt.Ept.y, EBX
shl EAX, 1
mov apt.Cp1.x, EAX
mov apt.Cp2.x, EAX
shr EBX, 1
mov apt.Cp1.y, EBX
add EBX, apt.Spt.y
mov apt.Cp2.y, EBX
mov EAX, apt.Cp1.x
add EAX, apt.Spt.x
mov apt.Ept.x, EAX
.elseif EAX==WM_LBUTTONDOWN || EAX==WM_RBUTTONDOWN || EAX==WM_MOUSEMOVE
.if (wParam & MK_LBUTTON) || (wParam & MK_RBUTTON)
invoke GetDC, hWnd
mov hdc, EAX
invoke GetStockObject, WHITE_PEN
invoke SelectObject, hdc, EAX
invoke DrawBezier, hdc, apt .if (wParam & MK_LBUTTON)
LOWORD
HIWORD
mov apt.Cp1.x, EAX mov apt.Cp1.y, EBX
.endif
.if (wParam & MK_RBUTTON)
LOWORD
HIWORD
mov apt.Cp2.x, EAX
mov apt.Cp2.y, EBX
.endif
invoke GetStockObject, BLACK_PEN
invoke SelectObject, hdc, EAX
invoke DrawBezier, hdc, apt
invoke ReleaseDC, hWnd, hdc
.endif
.elseif EAX==WM_PAINT
invoke InvalidateRect, hWnd, NULL, TRUE
invoke BeginPaint, hWnd, addr ps
mov hdc, EAX
invoke DrawBezier, hdc, apt
invoke EndPaint, hWnd, addr ps
.elseif EAX==WM_DESTROY
invoke PostQuitMessage, NULL
.else
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.endif
xor EAX, EAX
ret
WndProc endp
DrawBezier proc Hdc:DWORD, aapt:POINT
invoke PolyBezier, Hdc, addr aapt, 4
invoke MoveToEx, Hdc, apt.Spt.x, apt.Spt.y, NULL
invoke LineTo, Hdc, apt.Cp1.x, apt.Cp1.y
invoke MoveToEx, Hdc, apt.Cp2.x, apt.Cp2.y, NULL
invoke LineTo, Hdc, apt.Ept.x, apt.Ept.y
ret
DrawBezier endp
end start
Click here to preview the 80x86 Assembly / x86 Asm Code Formatting Demo 2.
With FormatCode 80x86 Assembly Code Formatters, you can format any foreign x86 Asm source code to meet your preferred coding style or any common code convention in several seconds!
|