Advertisement
Tranvick

Untitled

Oct 10th, 2013
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .586
  2. .model flat,stdcall
  3. option casemap:none
  4.  
  5. include windows.inc
  6. include user32.inc
  7. include kernel32.inc
  8. include 3_3_2.inc
  9.  
  10. include comdlg32.inc
  11. include gdi32.inc
  12.  
  13. includelib user32.lib
  14. includelib kernel32.lib
  15.  
  16. includelib comdlg32.lib
  17. includelib gdi32.lib
  18.  
  19.     WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
  20.  
  21. .data
  22.  
  23.     ClassName db "MainWinClass",0
  24.     AppName db "Main Window",0
  25.     rgn     dd  0
  26.     ch1      db  '\'
  27.     x   dd  20
  28.     x1   dd  400
  29.     x2   dd  0
  30.     x3   dd  0
  31.     y   dd  20
  32.     y1   dd  40
  33.     y2   dd  60
  34.     y3   dd  0
  35.     edi_s   dd  0
  36.    
  37.     mstr1    db  300 dup(0)
  38.     mstr    db  300 dup(0)    
  39.    
  40. .data?
  41.  
  42.  
  43.    
  44.     fn dd ?
  45.     nIndex  dd  ?
  46.     szBuffer db 300 dup(?)
  47.     hList dd ?
  48.     hEdit dd ?
  49.     hInstance HINSTANCE ?
  50.     CommandLine LPSTR ?
  51.     ps PAINTSTRUCT <>
  52.     ofn OPENFILENAME <>
  53.     hDC HDC ?
  54.     br  HBRUSH ?
  55.     hwnd HWND ?
  56.     fl  dd ?
  57.  
  58. .code
  59.  
  60. ; —-------------------------------------------------------------------------
  61.  
  62. start:
  63. invoke GetModuleHandle, NULL
  64. mov hInstance,eax
  65.  
  66. invoke GetCommandLine
  67. mov CommandLine,eax
  68.  
  69. invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
  70. invoke ExitProcess,eax
  71.  
  72. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
  73.     LOCAL wc:WNDCLASSEX
  74.     LOCAL msg:MSG
  75.    
  76.     mov wc.cbSize,SIZEOF WNDCLASSEX
  77.     mov wc.style, CS_HREDRAW or CS_VREDRAW
  78.     mov wc.lpfnWndProc, OFFSET WndProc
  79.     mov wc.cbClsExtra,NULL
  80.     mov wc.cbWndExtra,NULL
  81.     push hInstance
  82.     pop wc.hInstance
  83.     mov wc.hbrBackground,COLOR_BTNFACE+1
  84.     mov wc.lpszMenuName,IDR_MENU
  85.     mov wc.lpszClassName,OFFSET ClassName
  86.    
  87.     invoke LoadIcon,NULL,IDI_APPLICATION
  88.     mov wc.hIcon,eax
  89.     mov wc.hIconSm,eax
  90.    
  91.     invoke LoadCursor,NULL,IDC_ARROW
  92.     mov wc.hCursor,eax
  93.    
  94.     invoke RegisterClassEx, addr wc
  95.    
  96.     INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
  97.     WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
  98.     CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
  99.     hInst,NULL
  100.    
  101.     mov hwnd,eax
  102.    
  103.     invoke ShowWindow, hwnd,SW_SHOWNORMAL
  104.    
  105.     invoke UpdateWindow, hwnd
  106.    
  107.     .WHILE TRUE
  108.         invoke GetMessage, ADDR msg,NULL,0,0
  109.         .BREAK .IF (!eax)
  110.         invoke TranslateMessage, ADDR msg
  111.         invoke DispatchMessage, ADDR msg
  112.     .ENDW
  113.  
  114.     mov eax,msg.wParam
  115.     ret
  116. WinMain endp
  117.  
  118.  
  119. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  120.  
  121.     .IF uMsg==WM_DESTROY
  122.         invoke PostQuitMessage,NULL
  123.     .ELSEIF uMsg==WM_CREATE ; otsyda nacinaetsa kod tvoi. Eto vipolnaetsa, kogda sozdaetsa okno.
  124.         push hWnd ; hWnd -> stack
  125.         mov ofn.lStructSize, sizeof(OPENFILENAME) ; inizializiruem structuru dlya otkritiya faila
  126.         push hWnd ; Klimanski - loh. Opyat' kladem hWnd v stack. Oshibka ento.
  127.         pop ofn.hwndOwner ; Dostaem iz stacka v ofn.hwndOwner. Tipa dalshe etu structuru inizializiruem
  128.        
  129.         ;push offset CustColor
  130.         ;pop color_box.lpCustColors
  131.        
  132.        
  133.     .ELSEIF uMsg==WM_COMMAND ; eto vipolnaetsa, esli zhmesh na knopku
  134.         mov eax, wParam
  135.         and eax, 0FFFFh
  136.    
  137.         .if (eax == IDM_D1) ; esli nazhali na menu
  138.             ;;;;;;;;;;;;;;;;FILEDIALOG;;;;;;;;;;;;;;;;
  139.            
  140.             mov y,20
  141.             mov y1,40
  142.             mov y2,60 ; prisvaivaem peremennie
  143.            
  144.             ;;;clean
  145.             lea edi,mstr ; v esi <- adres mstr
  146.              mov ecx,300 ; ecx <- 300
  147.             i_lab: ; v etom cycle obnulyaem massiv mstr
  148.             mov dl,0 ; dl <- 0
  149.             mov [edi],dl ; [edi] <- 0, a edi - adres tekushchego elementa massiva mstr
  150.             inc edi ; uvelichivaem adres
  151.             loop i_lab ; cycle
  152.             lea edi,mstr1 ; delaem to zhe samoe s mstr1(obnulyaem)
  153.              mov ecx,300
  154.             i_lab1:
  155.             mov dl,0
  156.             mov [edi],dl
  157.             inc edi
  158.             loop i_lab1
  159.             ;;;;;;;
  160.    
  161.             mov ofn.nMaxFile,300 ; dlya otkritiya faila
  162.             lea esi,mstr ; esi <- adres mstr
  163.             push esi ; esi -> stack
  164.             pop ofn.lpstrFile ; ofn.lpstrFile <- esi(adres mstr). Eto tozhe dlya otkritiya faila.
  165.            
  166.             invoke GetOpenFileName,addr ofn ; vizov okna vibora faila
  167.             mov esi, ofn.lpstrFile ; esi <- imya faila, kotoriy vibrali
  168.            
  169.             ;invoke MessageBox,hWnd,addr mstr,0,MB_OK
  170.            
  171.             mov fl,eax ; fl <- rezultat vibora faila. Eto 0, esli zakrili na krestik ili cancel.
  172.             .if eax!=0 ; esli fail zakrili ne na otmenu
  173.                 invoke RedrawWindow,hWnd,0,0,RDW_ERASE or RDW_INVALIDATE ; pererisovivaem okno
  174.             .endif
  175.            
  176.         .endif
  177.        
  178.     .ELSEIF uMsg==WM_PAINT ; eto risovanie
  179.         invoke BeginPaint, hWnd, addr ps ; standartno. inizializiruem risovanie
  180.         mov hDC,eax ; tozhe standartno
  181.        
  182.         .if (fl!=0) ; esli fl != 0. To est' fail normalno vibran
  183.        
  184.         invoke TextOut,hDC,x,y,addr mstr,100 ; vivodim vibranniy fail
  185.         lea esi,mstr ; esi <- adres mstr
  186.         lea edi,mstr1 ; edi <- adres mstr1
  187.         mov edi_s,edi ; edi_s <- edi
  188.         xor ebx,ebx ; obnulyaem ebx
  189.         ;dec esi
  190.         ;dec edi
  191.  label1:
  192.  
  193.        
  194.             ; tut budet kopirovanie mstr -> mstr1      
  195.             mov dl,[esi] ; dl <- chislo po adresu esi(element massiva mstr)
  196.             mov [edi],dl ; v [edi] (element massiva mstr1) <- dl
  197.                    
  198.        
  199.         inc esi
  200.         inc edi
  201.        
  202.         mov dl,ch1 ; dl <- ch1 (symbol '\')
  203.         xor ebx,ebx ; obnulaem ebx
  204.         .if ([esi]==dl || [esi]==bl) ; esli tekuschiy simvol - konez stroki ili '\'
  205.             push esi ; esi -> stack
  206.             invoke TextOut,hDC,x1,y1,addr mstr1,50 ; vivodim tekuschiy kusok puti k failu
  207.             mov eax, edi ; eax <- edi
  208.             sub eax, edi_s ; eax = eax - edi_s
  209.             mov ebx,10
  210.             imul ebx
  211.             add eax,20 ; teper' eax = eax * 10 + 20
  212.             invoke Rectangle,hDC,x,y1,eax,y2 ; vivodim pryamougolnik, poslednie 4 chisla - koordinaty          
  213.             pop esi ; dostayu esi iz stacka
  214.             lea edi,mstr1 ; edi <- adres mstr1
  215.              mov ecx,300 ; dalshe prosto mstr1 obnulyaetsa, tam vishe takoy zhe kusok koda
  216.             i_lab2:
  217.             mov dl,0
  218.             mov [edi],dl
  219.             inc edi
  220.             loop i_lab2
  221.            
  222.             lea edi,mstr1 ; edi <- adres mstr1
  223.            
  224.             add y1,20 ; dobavlyau k y1 i y2 po 20(tipa na 20 nizhe opuskaem sleduuschuu stroku)
  225.             add y2,20
  226.             inc esi
  227.         .endif
  228.        
  229.         xor ebx,ebx
  230.          .if [esi]!=bl ; esli fail ne zakolnchilsa, to prodolzhaem cycle
  231.             jmp label1
  232.         .endif
  233.  
  234.         .endif
  235.            
  236.         invoke EndPaint, hWnd, addr ps
  237.    
  238.     .ELSE
  239.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  240.         ret
  241.     .ENDIF
  242.    
  243.     xor eax,eax
  244.     ret
  245. WndProc endp
  246.    
  247. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement