Advertisement
Guest User

Untitled

a guest
Dec 20th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 2.21 KB | None | 0 0
  1. include masm32rt.inc
  2.  
  3. MENUITEM struct
  4.  
  5.     coord COORD {?, ?}
  6.     text BYTE 50 dup(0)
  7.  
  8. MENUITEM ends
  9.  
  10. .data
  11.  
  12. StdHandle DWORD ?
  13. StdInput DWORD ?
  14.  
  15. menus MENUITEM {{50, 11}, "1. File     "},
  16.                 {{50, 12}, "2. Edit     "},
  17.                 {{50, 13}, "3. Tools    "},
  18.                 {{50, 14}, "4. Welp     "},
  19.                 {{50, 15}, "5. Exit     "}
  20. menu_count dd lengthof menus
  21.  
  22. Selected dd 0
  23.  
  24. .code
  25. start:
  26.  
  27.     invoke GetStdHandle, STD_OUTPUT_HANDLE
  28.     mov StdHandle, eax
  29.     invoke GetStdHandle, STD_INPUT_HANDLE
  30.     mov StdInput, eax
  31.    
  32.    
  33.     xor esi, esi
  34.    
  35.     .while TRUE
  36.        
  37.         xor ecx, ecx
  38.         xor edi, edi
  39.        
  40.         .while ecx < menu_count
  41.             push ecx
  42.             invoke SetConsoleCursorPosition, StdHandle, DWORD PTR menus[edi].MENUITEM.coord
  43.             pop ecx
  44.             push ecx
  45.             .if ecx == Selected
  46.                 invoke SetConsoleTextAttribute, StdHandle, 0a0h
  47.             .else
  48.                 invoke SetConsoleTextAttribute, StdHandle, 00ah
  49.             .endif
  50.             invoke StdOut, addr menus[edi].MENUITEM.text
  51.            
  52.             add edi, sizeof(MENUITEM)
  53.             pop ecx
  54.             inc ecx
  55.         .endw
  56.        
  57.         call getch
  58.         mov ebx, eax
  59.        
  60.         .if bl == 'S' || bl == 's'
  61.             mov eax, Selected
  62.             inc eax
  63.             .if eax > 4
  64.                 mov eax, 0
  65.             .endif
  66.             mov Selected, eax
  67.         .elseif bl == 'W' || bl == 'w'
  68.             mov eax, Selected
  69.             .if eax == 0
  70.                 mov eax, 4
  71.             .else
  72.                 dec eax
  73.             .endif
  74.             mov Selected, eax
  75.         .elseif bl == VK_RETURN
  76.             mov eax, Selected
  77.             .if eax == 4
  78.                 invoke ExitProcess, 0
  79.             .else
  80.                 mov ebx, eax
  81.                 invoke SetConsoleTextAttribute, StdHandle, 0Ch
  82.                 invoke SetConsoleCursorPosition, StdHandle, 0009002Dh
  83.                 mov eax, Selected
  84.                 xor edi, edi
  85.                 .while eax
  86.                     add edi, sizeof(MENUITEM)
  87.                     dec eax
  88.                 .endw
  89.                 printf("Selected: %s ", addr menus[edi].MENUITEM.text)
  90.             .endif
  91.         .endif
  92.        
  93.         invoke Sleep, 50
  94.    
  95.     .endw
  96.    
  97.     getkey
  98.     invoke ExitProcess, 0
  99.  
  100.  
  101. getch Proc
  102.     LOCAL lpBuffer:INPUT_RECORD
  103.     LOCAL lpRead:DWORD
  104.     invoke ReadConsoleInput, StdInput, addr lpBuffer, 1, addr lpRead
  105.     .if (lpBuffer.EventType==KEY_EVENT) && lpBuffer.KeyEvent.bKeyDown
  106.         movzx eax, lpBuffer.KeyEvent.UnicodeChar
  107.         movzx edx, lpBuffer.KeyEvent.wVirtualKeyCode
  108.         .else
  109.             xor eax, eax
  110.             xor edx, edx    
  111.     .endif
  112.     ret
  113. getch endp
  114.  
  115. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement