Advertisement
kamasazi99

asm lab10,all

Jan 19th, 2020
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .MODEL FLAT, STDCALL
  3. GENERIC_READ equ 80000000h
  4. GENERIC_WRITE equ 40000000h
  5. CREATE_NEW equ 1
  6. CREATE_ALWAYS equ 2
  7. OPEN_EXISTING equ 3
  8. OPEN_ALWAYS equ 4
  9. include grafika.inc
  10. SetFilePointer PROTO :DWORD, :DWORD, :DWORD, :DWORD
  11. ExitProcess         PROTO :DWORD
  12. SetDlgItemTextA     PROTO :DWORD,:DWORD, :DWORD
  13. SetDlgItemInt       PROTO :DWORD,:DWORD, :DWORD, :DWORD
  14. SendDlgItemMessageA PROTO :DWORD,:DWORD, :DWORD, :DWORD, :DWORD
  15.  
  16. WriteFile PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
  17. ReadFile PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
  18. CreateFileA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
  19. CloseHandle PROTO:DWORD
  20.  
  21. .DATA
  22. BSstyle EQU BS_PUSHBUTTON + WS_VISIBLE + WS_CHILD + WS_TABSTOP
  23. tstart BYTE " Start " , 0
  24. tbutt BYTE " BUTTON " , 0
  25. hbutt DWORD 0
  26.  
  27.  
  28.     hinst   DWORD   0
  29.     hicon   DWORD   0
  30.     hcur    DWORD   0
  31.     hmenu   DWORD   0
  32.  
  33.     tdlg1   BYTE        "DLG1",0
  34.     ALIGN 4
  35.     tmenu   BYTE        "MENU1",0
  36.     ALIGN 4
  37.     tOK       BYTE      "OK",0
  38.     ALIGN 4
  39.     terr    BYTE        32 dup(0)   ; bufor komunikatu
  40.     tnagl   BYTE        32 dup(0)   ; bufor nagłówka
  41.     buffor  BYTE        32 dup(0)
  42.     buffor_pustki byte " ",0
  43.     imie byte "Buczynski Hubert",0
  44.    
  45. ;plik
  46. path byte "dane.txt",0
  47. handle_plik DWORD 0
  48. buffor_pliku byte 255 dup(0)
  49. buffor_odczytu byte 255 dup(0)
  50. odczytane DWORD 0
  51.  
  52.  
  53. .CODE
  54.  
  55. WndProc PROC uses EBX ESI EDI windowHandle:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
  56.     .IF uMSG == WM_CREATE
  57.  
  58.     mov eax,1
  59.     jmp konWNDPROC
  60.     .ENDIF
  61.  
  62.     .IF uMSG ==  WM_INITDIALOG
  63.     INVOKE LoadIcon , hinst , 11
  64.         mov hicon , EAX
  65.         INVOKE SendMessageA , windowHandle , WM_SETICON , ICON_SMALL , hicon
  66.  
  67.         INVOKE LoadCursorA,hinst,12
  68.         mov hcur,EAX
  69.  
  70.          INVOKE LoadMenu,hinst,OFFSET tmenu ;menu te u gory z opcjami
  71.                 mov hmenu,EAX
  72.         INVOKE SetMenu, windowHandle, hmenu
  73.  
  74.         INVOKE LoadString, hinst,1,OFFSET buffor,32
  75.  
  76.        
  77.  
  78.         mov EAX, 1
  79.         jmp konWNDPROC
  80.     .ENDIF
  81.  
  82.     .IF uMSG ==  WM_CLOSE
  83.             INVOKE DestroyMenu,hmenu
  84.         INVOKE EndDialog, windowHandle, 0  
  85.          
  86.    
  87.          mov EAX, 1
  88.     jmp konWNDPROC
  89.     .ENDIF
  90.  
  91.     .IF uMSG ==  WM_COMMAND
  92.         .IF wParam ==  105 ;button wyjscie w menu
  93.         INVOKE MessageBoxA,0,OFFSET tOK,OFFSET tnagl,0
  94.         INVOKE SendDlgItemMessageA, windowHandle,1,WM_GETTEXT,lengthof buffor, offset buffor
  95.  
  96.         INVOKE SetDlgItemTextA, windowHandle, 2, offset buffor
  97.  
  98.  
  99.  
  100.             mov EAX, 1
  101.             jmp konWNDPROC
  102.         .ENDIF
  103.         ;obsluga zamkniecia
  104.         .IF wParam == 101
  105.         INVOKE DestroyMenu , hmenu ; uchwyt menu
  106.         INVOKE EndDialog , windowHandle , 0
  107.         mov eax,1
  108.         jmp konWNDPROC
  109.         .ENDIF
  110.         ;obsluga czyszczenia
  111.         .IF wParam == 104
  112.         INVOKE SetDlgItemTextA, windowHandle, 2, offset buffor_pustki
  113.         INVOKE SetDlgItemTextA, windowHandle, 1, offset buffor_pustki
  114.         mov eax,1
  115.         jmp konWNDPROC
  116.         .ENDIF
  117.         ;obsluga zapisu
  118.         .IF wParam == 102
  119.         invoke CreateFileA, offset path, GENERIC_WRITE or GENERIC_READ,0,0,CREATE_ALWAYS,0,0
  120.         mov handle_plik,eax
  121.         INVOKE SendDlgItemMessageA, windowHandle,1,WM_GETTEXT,lengthof buffor_pliku, offset buffor_pliku
  122.         invoke WriteFile,handle_plik,offset buffor_pliku, lengthof buffor_pliku,offset odczytane,0
  123.         INVOKE SendDlgItemMessageA, windowHandle,2,WM_GETTEXT,lengthof buffor_pliku, offset buffor_pliku
  124.         invoke WriteFile,handle_plik,offset buffor_pliku, lengthof buffor_pliku,offset odczytane,0
  125.         invoke CloseHandle,handle_plik
  126.         mov eax,1
  127.         jmp konWNDPROC
  128.         .ENDIF
  129.         ;obsluga odczytu
  130.         .IF wParam == 103
  131.         invoke CreateFileA, offset path, GENERIC_WRITE or GENERIC_READ,0,0,OPEN_EXISTING,0,0
  132.         mov handle_plik,eax
  133.         invoke ReadFile,handle_plik,offset buffor_odczytu, 255,offset odczytane,0
  134.         INVOKE SetDlgItemTextA, windowHandle, 1, offset buffor_odczytu
  135.         invoke ReadFile,handle_plik,offset buffor_odczytu, 255,offset odczytane,0
  136.         INVOKE SetDlgItemTextA, windowHandle, 2, offset buffor_odczytu
  137.         invoke CloseHandle,handle_plik
  138.         mov eax,1
  139.         jmp konWNDPROC
  140.         .ENDIF
  141.  
  142.     .ENDIF
  143.  
  144.     .IF uMSG ==  WM_MOUSEMOVE
  145.         INVOKE SetCursor,hcur
  146.        
  147.         mov EAX, 1
  148.         jmp konWNDPROC
  149.     .ENDIF
  150.  
  151.      mov    EAX, 0
  152.      jmp    konWNDPROC
  153.  
  154.        
  155.  
  156.  
  157.     konWNDPROC:
  158.         ret
  159.  
  160. WndProc ENDP
  161.  
  162.  
  163. main PROC
  164.  
  165.     INVOKE GetModuleHandleA, 0
  166.     mov hinst, EAX
  167.    
  168.     INVOKE DialogBoxParamA, hinst,OFFSET tdlg1, 0, OFFSET WndProc, 0
  169.     ;tworzenie okna dialogowego
  170.  
  171.     .IF EAX == 0
  172.             jmp etkon
  173.     .ENDIF
  174.  
  175.     .IF EAX == -1
  176.         jmp err0
  177.     .ENDIF 
  178.  
  179.     err0:
  180.         INVOKE LoadString, hinst,2,OFFSET terr,32
  181.         INVOKE MessageBoxA,0,OFFSET terr,OFFSET tnagl,0
  182.  
  183.     etkon:
  184.  
  185.     INVOKE ExitProcess, 0
  186.  
  187. main ENDP
  188.  
  189. END
  190.  
  191.  
  192.  
  193.  
  194.  
  195. resource
  196.  
  197.  
  198.  
  199. #define BS_CENTER 0x300L
  200. #define BS_PUSHBUTTON 0x0L
  201. #define ES_LEFT 0x0L
  202. #define SS_LEFT 0x0L
  203. #define WS_BORDER 0x800000L
  204. #define WS_CHILD 0x40000000L
  205. #define WS_CAPTION 0x0C00000L
  206. #define WS_MINIMIZEBOX 0x00020000L
  207. #define WS_MAXIMIZEBOX 0x00010000L
  208. #define WS_POPUP 0x80000000L
  209. #define WS_SYSMENU 0x00080000L
  210. #define WS_TABSTOP 0x10000L
  211. #define WS_VISIBLE 0x10000000L
  212. #define CBS_DROPDOWNLIST 3h
  213. #define CBS_HASSTRINGS 200h
  214. //--------------------------------
  215. #define STR1 1  // 1 to identyfikator wiersza
  216. #define STR2 2  // 2 to identyfikator wiersza
  217. #define IDI_ICON1 11
  218. #define IDI_ICUR1 12
  219.  
  220. DLG1 DIALOG 0, 0, 200, 150
  221. STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
  222. CAPTION "Siema tu okno"
  223. FONT 10, "Arial"
  224. {
  225.  CONTROL "",1,"EDIT",ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,20,16,104,16
  226.   // 1 to identyfikator obiektu graficznego
  227.  CONTROL "Tekst",2,"STATIC",SS_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER,20,40,104,16
  228.   // 2 to identyfikator obiektu graficznego
  229.  CONTROL "Kopiuj",105,"BUTTON",BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,20,60,104,16
  230.   // 105 to identyfikator obiektu graficznego
  231.  CONTROL "test", 106, "COMBOBOX", WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER | CBS_DROPDOWNLIST | CBS_HASSTRINGS, 20, 80, 104, 16
  232. }
  233. STRINGTABLE
  234. {
  235.  STR1 "Komunikat"
  236.  STR2 "Błąd!"
  237. }
  238. IDI_ICON1 ICON "ikona.ico"
  239. IDI_ICUR1 CURSOR "kursor.cur"
  240.  
  241. MENU1 MENU
  242. {
  243.  POPUP "Plik"
  244.  {
  245.   MENUITEM "Zamknij", 101 // 101 to identyfikator punktu menu
  246. MENUITEM "Zapisz", 102
  247. MENUITEM "Otworz", 103
  248.  }
  249.       POPUP "Edycja"
  250.  {
  251.   MENUITEM "Wyczysc", 104 // 101 to identyfikator punktu menu
  252.  }
  253.  
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement