flat assembler
Message board for the users of flat assembler.
Index
> Macroinstructions > [fixed] Parameter count macro fails on zero parameters |
Author |
|
Tomasz Grysztar 25 Mar 2012, 13:54
I already fixed that (fasmw package is updated). And the insane error messaging experiment has been abandoned, 1.69.49 (released this morning) has it all back to usual.
|
|||
25 Mar 2012, 13:54 |
|
madmatt 26 Mar 2012, 20:28
Decided post here, same subject matter. I've been getting unusual pcount errors also, 2 examples:
Code: cominvk d3d9, [b]GetDeviceCaps[/b], D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, caps ;'GetDeviceCaps' parameter count error also with stdcall: Code: stdcall BigNumToString, [ms.dwMemoryLoad], addr szBuf ;pcount error Defining 'BigNumToString% = 2' at the start of the program solves the problem, but you didn't have to do this with the previous macros. |
|||
26 Mar 2012, 20:28 |
|
Tomasz Grysztar 26 Mar 2012, 20:45
I was able to hunt down the first one, it was a bug in COM64.INC
For the second one, however, you would have to provide more context, because I was not able to reproduce the bug. |
|||
26 Mar 2012, 20:45 |
|
madmatt 26 Mar 2012, 21:05
Sorry about that, here is the full source of the example (note: my win64a.inc combines all 'win64aXX.inc' into one) :
Code: format PE64 GUI 5.0 on 'nul' entry WINMAIN include 'win64a.inc' include 'equates\msvcrt.inc' include 'equates\kernel32.inc' include 'equates\gdi32.inc' include 'equates\user32.inc' include 'equates\comctl32.inc' include 'equates\comdlg32.inc' IDI_ICON = 101 IDT_TIMER1 = 1000 DLG_MEMSTAT = 1 ID_MEMLOAD = 1 ID_TOTALPHYS = 2 ID_AVAILPHYS = 3 ID_USEDPHYSICAL = 8 ID_TOTALPAGEFILE = 4 ID_AVAILPAGEFILE = 5 ID_USEDPAGEFILE = 9 ID_TOTALVIRTUAL = 6 ID_AVAILVIRTUAL = 7 ID_USEDVIRTUAL = 10 ;BigNumToString% = 2 section '.data' data readable writeable icex INITCOMMONCONTROLSEX sizeof.INITCOMMONCONTROLSEX, ICC_ALL_CLASSES section '.code' code readable executable proc WINMAIN hInstance, hprevinstance, lpszCmdLine, nCmdShow invoke InitCommonControlsEx, icex invoke GetModuleHandle, 0 invoke DialogBoxParam, rax, DLG_MEMSTAT, HWND_DESKTOP, DlgProc, WM_INITDIALOG invoke ExitProcess, 0 endp proc DlgProc hDlg, uMsg, wParam, lParam local szBuf[128]:BYTE, ms:MEMORYSTATUSEX ;Note that first four parameters are passed in registers, ;while names given in the declaration of procedure refer to the stack ;space reserved for them - you may store them there to be later accessible ;if the contents of registers gets destroyed. This may look like: mov [hDlg], rcx mov [uMsg], rdx mov [wParam], r8 mov [lParam], r9 .if rdx = WM_INITDIALOG invoke SetTimer, rcx, IDT_TIMER1, 200, NULL ;Initialize the length of the structure before calling GlobalMemoryStatus. cinvoke memset, addr ms, 0, sizeof.MEMORYSTATUSEX mov [ms.dwLength], sizeof.MEMORYSTATUSEX invoke GlobalMemoryStatusEx, addr ms ;File the static controls in the listbox with the appropriate number. cinvoke strcat, addr szBuf, "%" stdcall BigNumToString, [ms.dwMemoryLoad], addr szBuf invoke SetDlgItemText, [hDlg], ID_MEMLOAD, rax stdcall BigNumToString, [ms.ullTotalPhys], addr szBuf invoke SetDlgItemText, [hDlg], ID_TOTALPHYS, rax stdcall BigNumToString, [ms.ullAvailPhys], addr szBuf invoke SetDlgItemText, [hDlg], ID_AVAILPHYS, rax stdcall BigNumToString, [ms.ullTotalPageFile], addr szBuf invoke SetDlgItemText, [hDlg], ID_TOTALPAGEFILE, rax stdcall BigNumToString, [ms.ullAvailPageFile], addr szBuf invoke SetDlgItemText, [hDlg], ID_AVAILPAGEFILE, rax stdcall BigNumToString, [ms.ullTotalVirtual], addr szBuf invoke SetDlgItemText, [hDlg], ID_TOTALVIRTUAL, rax stdcall BigNumToString, [ms.ullAvailExtendedVirtual], addr szBuf invoke SetDlgItemText, [hDlg], ID_AVAILVIRTUAL, rax ;ullAvailExtendedVirtual return NO_ERROR .elseif rdx = WM_TIMER .if r8 = IDT_TIMER1 cinvoke memset, addr ms, 0, sizeof.MEMORYSTATUSEX mov [ms.dwLength], sizeof.MEMORYSTATUSEX invoke GlobalMemoryStatusEx, addr ms stdcall BigNumToString, [ms.dwMemoryLoad], addr szBuf cinvoke strcat, addr szBuf, "%" invoke SetDlgItemText, [hDlg], ID_MEMLOAD, addr szBuf stdcall BigNumToString, [ms.ullTotalPhys], addr szBuf invoke SetDlgItemText, [hDlg], ID_TOTALPHYS, rax stdcall BigNumToString, [ms.ullAvailPhys], addr szBuf invoke SetDlgItemText, [hDlg], ID_AVAILPHYS, rax mov rax, [ms.ullTotalPhys] sub rax, [ms.ullAvailPhys] stdcall BigNumToString, rax, addr szBuf invoke SetDlgItemText, [hDlg], ID_USEDPHYSICAL, rax stdcall BigNumToString, [ms.ullTotalPageFile], addr szBuf invoke SetDlgItemText, [hDlg], ID_TOTALPAGEFILE, rax stdcall BigNumToString, [ms.ullAvailPageFile], addr szBuf invoke SetDlgItemText, [hDlg], ID_AVAILPAGEFILE, rax mov rax, [ms.ullTotalPageFile] sub rax, [ms.ullAvailPageFile] stdcall BigNumToString, rax, addr szBuf invoke SetDlgItemText, [hDlg], ID_USEDPAGEFILE, rax stdcall BigNumToString, [ms.ullTotalVirtual], addr szBuf invoke SetDlgItemText, [hDlg], ID_TOTALVIRTUAL, rax stdcall BigNumToString, [ms.ullAvailVirtual], addr szBuf invoke SetDlgItemText, [hDlg], ID_AVAILVIRTUAL, rax mov rax, [ms.ullTotalVirtual] sub rax, [ms.ullAvailVirtual] stdcall BigNumToString, rax, addr szBuf invoke SetDlgItemText, [hDlg], ID_USEDVIRTUAL, rax ;ullAvailExtendedVirtual .endif return NO_ERROR .elseif rdx = WM_COMMAND invoke KillTimer, rcx, IDT_TIMER1 invoke EndDialog, [hDlg], NULL return NO_ERROR .endif return NO_ERROR endp ;This function accepts a number and converts it to a string inserting commas where appropriate. proc BigNumToString lNum, szBuf local wNumDigits:QWORD, wNumChars:QWORD mov [lNum], rcx mov [szBuf], rdx xor rax, rax mov [wNumDigits], rax mov [wNumChars], rax .repeat ;Put the last digit of the string in the character buffer. ;szBuf[wNumChars++] = lNum % 10 + '0' mov rdx, 0 mov rcx, 10 mov rax, [lNum] idiv rcx add dl, '0' mov rcx, [szBuf] mov rax, [wNumChars] mov [rcx + rax], dl add [wNumChars], 1 ;Increment the number of digits that we put in the string. add [wNumDigits], 1 ;For every three digits put in the string, add a comma ",". mov rcx, 3 mov rdx, 0 mov rax, [wNumDigits] idiv rcx .if rdx = 0 mov rcx, [szBuf] mov rax, [wNumChars] mov byte [rcx + rax], ',' add [wNumChars], 1 .endif ;Divide the number by 10 and repeat the process. mov rcx, 10 mov rdx, 0 mov rax, [lNum] idiv rcx mov [lNum], rax ;Continue adding digits to the string until the number is zero. .until [lNum] <= 0 ;If the last character added to the string was a comma, truncate it. mov rcx, [szBuf] mov rax, [wNumChars] .if byte [rcx + rax - 1] = ',' mov byte [rcx + rax - 1], 0 .endif ;Make sure that the string is zero-terminated. mov rcx, [szBuf] mov rax, [wNumChars] mov byte [rcx + rax], 0 ;We added all of the chaaracters to the string in reverse order. ;We must reverse the contents of the string. ;strrev(szBuf); cinvoke _strrev, [szBuf] ;Returns the address of the string. This is the same value that was ;passed to us initially. Returning it here makes it easier for the ;calling function to use the string. return [szBuf] endp section '.rsrc' resource data readable directory RT_ICON, icons, RT_GROUP_ICON, group_icons, RT_DIALOG, dialogs, RT_MANIFEST, manifest resource dialogs, DLG_MEMSTAT, LANG_ENGLISH + SUBLANG_DEFAULT, memstatdialog resource icons, 1, LANG_NEUTRAL, icon_data resource group_icons, IDI_ICON, LANG_NEUTRAL, main_icon resource manifest, 1, LANG_NEUTRAL, xpstyle resdata xpstyle file '\..\fasmw64\v7include64\winxpstyle.xml' endres icon main_icon, icon_data, 'MEMSTAT.ICO' ;macro dialogitem class, title, id, x, y, cx, cy, style, exstyle dialog memstatdialog, 'Memory Status', 60, 27, 136, 134, DS_MODALFRAME or WS_POPUP or WS_VISIBLE or WS_CAPTION or WS_SYSMENU,\ NULL, NULL, "Arial Bold", 16 dialogitem 'STATIC', 'Memory Load:', -1, 8, 4, 52, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_MEMLOAD, 70, 4, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Total Physical:', -1, 0, 20, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_TOTALPHYS, 70, 20, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Available Physical:', -1, 0, 32, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_AVAILPHYS, 70, 32, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Used Physical:', -1, 0, 44, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_USEDPHYSICAL, 70, 44, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Total Pagefile:', -1, 0, 60, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_TOTALPAGEFILE, 70, 60, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Available Pagefile:', -1, 0, 72, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_AVAILPAGEFILE, 70, 72, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Used Pagefile:', -1, 0, 84, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_USEDPAGEFILE, 70, 84, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Total Virtual:', -1, 0, 100, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_TOTALVIRTUAL, 70, 100, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Available Virtual:', -1, 0, 112, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_AVAILVIRTUAL, 70, 112, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', 'Used Virtual:', -1, 0, 124, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP dialogitem 'STATIC', '', ID_USEDVIRTUAL, 70, 124, 60, 8, SS_RIGHT or WS_CHILD or WS_VISIBLE or WS_GROUP enddialog section '.idata' import data readable writeable library msvcrt, 'MSVCRT.DLL',\ kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ gdi32,'GDI32.DLL',\ comctl32,'COMCTL32.DLL',\ comdlg32,'COMDLG32.DLL' include 'apia/msvcrt.inc' include 'apia/kernel32.inc' include 'apia/user32.inc' include 'apia/gdi32.inc' include 'apia/comctl32.inc' include 'apia/comdlg32.inc' |
|||
26 Mar 2012, 21:05 |
|
Tomasz Grysztar 26 Mar 2012, 21:21
This does not assemble with fasmw's include set, and if I cut it down to the version that I can test-assemble quickly, I still do not get a problem.
|
|||
26 Mar 2012, 21:21 |
|
madmatt 26 Mar 2012, 21:55
I use my own custom includes (macros remain pretty much the same). Download the file with the underscore in front. the file hasn't been updated in about a month, so they use the older 64bit include sets):
http://board.flatassembler.net/topic.php?t=13931 I'll see if I can recreate the error with the standard fasmw includes. [EDIT] Couldn't recreate the error, so maybe the fix in the com64.inc will correct the problem. Have you uploaded the fix yet? |
|||
26 Mar 2012, 21:55 |
|
Tomasz Grysztar 27 Mar 2012, 10:23
I uploaded it at the same time that I was writing about it.
|
|||
27 Mar 2012, 10:23 |
|
madmatt 28 Mar 2012, 21:32
Tomasz Grysztar wrote: This does not assemble with fasmw's include set, and if I cut it down to the version that I can test-assemble quickly, I still do not get a problem. I re-merged the new macro '.inc' files with my own and they seem to work now. No more problems. _________________ Gimme a sledge hammer! I'LL FIX IT! |
|||
28 Mar 2012, 21:32 |
|
madmatt 18 Apr 2012, 11:22
Ok, one more minor problem. In the 'win64wxp.inc' the parameter count checker just gives a standard error, rather than a 'parameter count error'.
|
|||
18 Apr 2012, 11:22 |
|
Tomasz Grysztar 18 Apr 2012, 11:24
In what context? Please post the minimal reproducing source.
|
|||
18 Apr 2012, 11:24 |
|
madmatt 18 Apr 2012, 13:05
Did some more checking. And discovered that your macros work fine, it was a DISPLAY macro that was causing the problem. Sorry about that. anyways if your still curious, here is the source to the macro and the .asm file.
MACRO Code: macro __digit num { if num < 10 display '0'+num else display 'A'+num-10 end if } ;DISPLAY "Offset: ", <$,16>, 13, 10 macro __display arg1, arg2 { if arg2 eq display arg1 else local ..tmp ..tmp = arg1 virtual at 0 repeat 32 if ..tmp > 0 db ..tmp mod arg2 ..tmp = ..tmp / arg2 end if end repeat repeat $ load ..tmp byte from $-% __digit ..tmp end repeat if $ = 0 display '0' end if end virtual end if } macro DISPLAY [arg] { __display arg } CODE Code: format PE64 GUI 5.0 on 'nul' entry WinMain include 'win64w.inc' include 'equates\msvcrt.inc' ;msvcrt.dll include 'equates\kernel32.inc' ;kernel32.dll include 'equates\ole32.inc' ;ole32.dll include 'equates\gdi32.inc' ;gdi32.dll include 'equates\gdiplus.inc' ;gdiplus.dll include 'equates\wincodec.inc' ;gdiplus.dll include 'equates\user32.inc' ;user32.dll include 'equates\comctl32.inc' ;comctl32.dll include 'equates\comdlg32.inc' ;comdlg32.dll include 'equates\shell32.inc' ;shell32.dll include 'equates\winmm.inc' ;winmm.dll include 'equates\mmreg.inc' ;winmm.dll, msvfw32.dll include 'equates\winsock2.inc' ;ws2_32.dll include 'equates\dbghelp.inc' ;dbghelp.dll include 'equates\winspool.inc' ;winspool.dll, localspl.dll include 'equates\uiribbon.inc' ;(COM OBJECTS ONLY) include 'equates\propsys.inc' ;propsys.dll include 'equates\winscard.inc' ;winscard.dll include 'equates\riched20.inc' ;riched20.dll include 'equates\shlwapi.inc' ;shlwapi.dll include 'equates\vfw.inc' ;msvfw32.dll, avifil32.dll, avicap32.dll include 'equates\windns.inc' ;dnsapi.dll include 'equates\winioctl.inc' ;kernel32.dll include 'equates\wininet.inc' ;wininet.dll <> winhttp.dll include 'equates\wincrypt.inc' ;crypt32.dll, advapi32.dll include 'equates\shlobj.inc' ;mpr.dll include 'equates\sapi53.inc' ;(COM OBJECTS ONLY) include 'equates\ras.inc' ;rasapi32.dll include 'equates\mshtml.inc' ;(COM OBJECTS ONLY) include 'equates\msxml6.inc' ;??? include 'equates\xpsobjectmodel.inc' include 'equates\opmapi.inc' ;dxva2.dll include 'equates\mmdeviceapi.inc' ;mmdevapi.dll include 'equates\mfapi.inc' ;mf.dll include 'equates\wmcontainer.inc' ;??? include 'equates\audioclient.inc' ;(COM OBJECTS ONLY) include 'equates\gl\opengl32.inc' ;opengl32.dll; glu32.dll; glut32.dll; glaux.dll ;include 'equates\directx\ddraw.inc' ;ddraw.dll' ;include 'equates\directx\dshow.inc' ; ;include 'equates\directx\dplay8.inc' ; include 'equates\directx\d3d9.inc' ;d3d9.dll include 'equates\directx\d3dx9.inc' ;d3dx9_xx.dll ;include 'equates\directx\dsound8.inc' ;dsound.dll ;include 'equates\directx\dmusic.inc' ;dmusic.dll include 'equates\directx\dinput8.inc' ;dinput8.dll ;include 'equates\evr.inc' ;evr.dll ;include 'equates\directx\d3d10.inc' ;d3d10.dll d3d10_1.dll ;include 'equates\directx\d3dx10.inc' ;d3dx10_xx.dll ;include 'equates\directx\d3d11.inc' ;d3d11.dll ;include 'equates\directx\d3dx11.inc' ;d3dx11_4x.dll include 'equates\directx\d2d1.inc' ;d2d1.dll include 'equates\directx\dwrite.inc' ;dwrite.dll include 'equates\directx\dxva2api.inc' ;dxva2.dll include 'equates\directx\xaudio2.inc' ;xaudio2_7.dll include 'equates\directx\xapo.inc' ;(COM OBJECTS ONLY) include 'equates\fmodex64.inc' ;fmodex.dll WINDOWWIDTH = 800 WINDOWHEIGHT = 600 ;DISPLAY "SizeOf: ",<sizeof.XPS_COLOR, 10>,13,10 ;DISPLAY "Value: ",<sizeof.DWORD, 10>,13,10 section '.data' data readable writeable szAppTitle du "All in one Shell 64W",0 szAppClass du "WinShellW64",0 _fontname du "Courier New",0 ;"Tahoma" align 8 hWnd dq 0 hInstance dq 0 editfont dq 0 icex INITCOMMONCONTROLSEX sizeof.INITCOMMONCONTROLSEX, ICC_ALL_CLASSES section '.code' code readable executable proc WinMain hInst, hPrevInstance, lpCmdLine, nCmdShow local msg:MSG, winClass:WNDCLASSEXW, clientrectangle:RECT, startx:QWORD, starty:QWORD invoke InitCommonControlsEx, icex cinvoke memset, addr winClass, 0, sizeof.WNDCLASSEXW invoke GetModuleHandle, 0 mov [hInstance], rax mov [winClass.hInstance], rax mov [winClass.lpszClassName], szAppClass mov [winClass.cbSize], sizeof.WNDCLASSEXA mov [winClass.style], CS_HREDRAW or CS_VREDRAW mov [winClass.lpfnWndProc], WindowProc invoke LoadIcon, [hInstance], IDI_APPLICATION mov [winClass.hIcon], rax mov [winClass.hIconSm], rax invoke LoadCursor, NULL, IDC_ARROW mov [winClass.hCursor], rax invoke GetStockObject, WHITE_BRUSH mov [winClass.hbrBackground], rax mov [winClass.lpszMenuName], NULL mov [winClass.cbClsExtra], 0 mov [winClass.cbWndExtra], 0 ;Register our window class. invoke RegisterClassEx, addr winClass .if rax = NULL invoke MessageBox, NULL, "RegisterClassEx()", "ERROR", MB_OK or MB_ICONERROR return FALSE .endif ;Create window for Direct3D FullScreen mode. invoke GetSystemMetrics, SM_CXFULLSCREEN shr rax, 1 sub rax, WINDOWWIDTH shr 1 mov [startx], rax invoke GetSystemMetrics, SM_CYFULLSCREEN shr rax, 1 sub rax, WINDOWHEIGHT shr 1 mov [starty], rax invoke SetRect, addr clientrectangle, 0, 0, WINDOWWIDTH, WINDOWHEIGHT invoke AdjustWindowRect, addr clientrectangle, WS_OVERLAPPEDWINDOW or WS_VISIBLE, FALSE movsxd r10, [clientrectangle.right] movsxd r11, [clientrectangle.left] sub r10, r11 movsxd r11, [clientrectangle.bottom] movsxd r12, [clientrectangle.top] sub r11, r12 invoke CreateWindowEx, NULL;, szAppClass, szAppTitle, WS_OVERLAPPEDWINDOW or WS_VISIBLE, [startx], [starty], r10, r11,\ NULL, NULL, [hInstance], NULL .if rax = NULL invoke MessageBox, NULL, "CreateWindowEx()", "ERROR", MB_OK or MB_ICONERROR return FALSE .endif mov [hWnd], rax mov [msg.message], FALSE .while [msg.message] <> WM_QUIT invoke GetMessage, addr msg, NULL, 0, 0 invoke TranslateMessage, addr msg invoke DispatchMessage, addr msg .endw invoke ExitProcess, 0 return endp proc WindowProc hwnd, wmsg, wparam, lparam local hdc:QWORD, qfloat:DOUBLE, ps:PAINTSTRUCT, szBuffer[128]:WORD ;Note that first four parameters are passed in registers, ;while names given in the declaration of procedure refer to the stack ;space reserved for them - you may store them there to be later accessible ;if the contents of registers gets destroyed. This may look like: mov [hwnd], rcx mov [wmsg], rdx mov [wparam], r8 mov [lparam], r9 ;check for messages wanted here .if rdx = WM_CREATE invoke CreateFont, 24, 10, 0, 0, FW_BOLD, NULL, NULL, NULL, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,\ CLEARTYPE_QUALITY, VARIABLE_PITCH or FF_DONTCARE, _fontname mov [editfont], rax return 0 .elseif rdx = WM_PAINT invoke BeginPaint, rcx, addr ps mov [hdc], rax .if [editfont] invoke SelectObject, [hdc], [editfont] .endif fldpi fstp [qfloat] cinvoke swprintf, addr szBuffer, "Float: %7.10f", [qfloat] cinvoke wcslen, addr szBuffer invoke TextOut, [hdc], 0, 0, addr szBuffer, rax invoke EndPaint, [hwnd], addr ps return 0 .elseif rdx = WM_KEYDOWN .if r8 = VK_ESCAPE .if [editfont] invoke DeleteObject, [editfont] mov [editfont], NULL .endif invoke PostQuitMessage, 0 .endif return 0 .elseif rdx = WM_CLOSE .if [editfont] invoke DeleteObject, [editfont] mov [editfont], NULL .endif invoke PostQuitMessage, NULL return 0 .endif invoke DefWindowProc, rcx, rdx, r8, r9 return endp section '.rsrc' resource data readable directory RT_MANIFEST, manifest resource manifest, 1, LANG_NEUTRAL, xpstyle resdata xpstyle file '\..\fasmw64\v7include64\winxpstyle.xml' endres section '.idata' import data readable writeable library msvcrt,'MSVCRT.DLL',\ kernel32,'KERNEL32.DLL',\ gdi32,'GDI32.DLL',\ gdiplus,'GDIPLUS.DLL',\ user32,'USER32.DLL',\ winspool,'WINSPOOL.DLL',\ comctl32,'COMCTL32.DLL',\ comdlg32,'COMDLG32.DLL',\ shell32,'SHELL32.DLL',\ dbghelp,'DBGHELP.DLL',\ propsys,'PROPSYS.DLL',\ ole32,'OLE32.DLL',\ oleaut32,'OLEAUT32.DLL',\ ws2_32,'WS2_32.DLL',\ winscard,'WINSCARD.DLL',\ winmm,'WINMM.DLL',\ riched20,'RICHED20.DLL',\ shlwapi,'SHLWAPI.DLL',\ msvfw32,'MSVFW32.INC',\ avifil32,'AVIFIL32.DLL',\ advapi32,'ADVAPI32.DLL',\ avicap32,'AVICAP32.DLL',\ urlmon,'URLMON.DLL',\ dnsapi,'DNSAPI.DLL',\ mapi,'MAPI32.DLL',\ wininet,'WININET.DLL',\ winhttp,'WINHTTP.DLL',\ rasapi32,'RASAPI32.DLL',\ Crypt32,'CRYPT32.DLL',\ uxtheme,'UXTHEME.DLL',\ mpr,'MPR.DLL',\ mshtml,'MSHTML.DLL',\ odbc32,'ODBC32.DLL',\ localspl,'LOCALSPL.DLL',\ avrt,'AVRT.DLL',\ mmdevapi,'MMDEVAPI.DLL',\ mf,'MF.DLL',\ mfplat,'MFPLAT.DLL',\ mfreadwrite,'MFREADWRITE.DLL',\ dwmapi,'DWMAPI.DLL',\ \ opengl32,'OPENGL32.DLL',\ glu32,'GLU32.DLL',\ ddraw,'DDRAW.DLL',\ dinput8,'DINPUT8.DLL',\ dsound8,'DSOUND8.DLL',\ dplayx,'DPLAYX.DLL',\ d3d10,'D3D10.DLL',\ d3dx10_33,'D3DX10_33.DLL',\ evr,'EVR.DLL',\ dxva2,'DXVA2.DLL',\ fmodex,'FMODEX.DLL' COMMENT { d3d9,'D3D9.DLL',\ d3dx9_24,'D3DX9_24.DLL',\ d3d11,'D3D11.DLL',\ d3dx11,'D3DX11.DLL',\ } include 'apiw\msvcrt.inc' include 'apiw\kernel32.inc' include 'apiw\gdi32.inc' include 'apiw\gdiplus.inc' include 'apiw\user32.inc' include 'apiw\winspool.inc' include 'apiw\comctl32.inc' include 'apiw\comdlg32.inc' include 'apiw\shell32.inc' include 'apiw\dbghelp.inc' include 'apiw\propsys.inc' include 'apiw\ole32.inc' include 'apiw\oleaut32.inc' include 'apiw\ws2_32.inc' include 'apiw\winscard.inc' include 'apiw\winmm.inc' include 'apiw\riched20.inc' include 'apiw\shlwapi.inc' include 'apiw\msvfw32.inc' include 'apiw\avifil32.inc' include 'apiw\avicap32.inc' include 'apiw\advapi32.inc' include 'apiw\dnsapi.inc' include 'apiw\mapi32.inc' include 'apiw\wininet.inc' include 'apiw\winhttp.inc' include 'apiw\rasapi32.inc' include 'apiw\crypt32.inc' include 'apiw\uxtheme.inc' include 'apiw\mpr.inc' include 'apiw\mshtml.inc' include 'apiw\avrt.inc' include 'apiw\mmdevapi.inc' include 'apiw\mf.inc' include 'apiw\mfplat.inc' include 'apiw\mfreadwrite.inc' include 'apiw\gl\opengl32.inc' include 'apiw\gl\glu32.inc' include 'apiw\directx\ddraw.inc' include 'apiw\directx\dinput8.inc' include 'apiw\directx\dsound8.inc' include 'apiw\directx\d3d9.inc' ;include 'apiw\directx\d3dx9_24.inc' include 'apiw\directx\d3d10_1.inc' ;include 'apiw\directx\d3d10.inc' include 'apiw\directx\d3dx10_33.inc' ;include 'apiw\directx\d3d11.inc' ;include 'apiw\directx\d3dx11_43.inc' include 'apiw\directx\d2d1.inc' include 'apiw\directx\dwrite.inc' include 'apiw\directx\dxva2.inc' include 'apiw\evr.inc' include 'apiw\fmodex64.inc' ;include 'apiw\fmod64.inc' |
|||
18 Apr 2012, 13:05 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.