From 6c066b18d0c1693920ccb3d3f568bb30435dd1a0 Mon Sep 17 00:00:00 2001 From: Lukian Date: Wed, 30 Apr 2025 14:51:41 +0200 Subject: [PATCH] add: added template file --- dir.asm | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 dir.asm diff --git a/dir.asm b/dir.asm new file mode 100644 index 0000000..83a269d --- /dev/null +++ b/dir.asm @@ -0,0 +1,133 @@ +.386 +.model flat,stdcall +option casemap:none + +WinMain proto :DWORD + +include c:\masm32\include\windows.inc +include c:\masm32\include\gdi32.inc +include c:\masm32\include\gdiplus.inc +include c:\masm32\include\user32.inc +include c:\masm32\include\kernel32.inc + +includelib c:\masm32\lib\kernel32.lib +includelib c:\masm32\lib\gdi32.lib +includelib c:\masm32\lib\user32.lib + +RGB macro red,green,blue + xor eax,eax + mov ah,blue + shl eax,8 + mov ah,green + mov al,red +endm + +.DATA +ClassName db "SimpleWinClass",0 +AppName db "Our First Window",0 +GlobX DWORD 10 +Delta DWORD 8 + +.DATA? +hInstance HINSTANCE ? + +.CODE +start: + invoke GetModuleHandle, NULL + mov hInstance,eax + invoke WinMain, hInstance;, NULL, NULL, SW_SHOWDEFAULT + + invoke ExitProcess,eax + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Fonction principale +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WinMain proc hInst:HINSTANCE;, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD + 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 hInst + 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,eax + 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 + +; boucle de gestion des evenements +main_loop: + invoke GetMessage, ADDR msg,NULL,0,0 + cmp eax, 0 + je end_loop + invoke TranslateMessage, ADDR msg + invoke DispatchMessage, ADDR msg + jmp main_loop +end_loop: + mov eax, msg.wParam + ret + +WinMain endp + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Fonction appelée à chaque evenement +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM + LOCAL ps:PAINTSTRUCT + LOCAL rect:RECT + LOCAL hdc:HDC + +; switch WM events + mov eax, uMsg +; WM_DESTROY event + cmp eax, WM_DESTROY + jne evt_not_destroy + invoke PostQuitMessage,NULL + jmp evt_switch_end +evt_not_destroy: +; WM_PAINT event + cmp eax, WM_PAINT + jne evt_not_paint + invoke BeginPaint,hWnd, ADDR ps + mov hdc,eax + invoke GetClientRect,hWnd, ADDR rect + + ; code de dessin + + invoke EndPaint,hWnd, ADDR ps + jmp evt_switch_end +evt_not_paint: +; WM_CHAR event + cmp eax, WM_CHAR + jne evt_not_char + + ; gestion des evenements clavier + ; le caractere recu est dans wParam + + jmp evt_switch_end +evt_not_char: +; By default call DefWindowProc + invoke DefWindowProc,hWnd,uMsg,wParam,lParam + ret +evt_switch_end: + xor eax, eax + ret +WndProc endp + +end start \ No newline at end of file