Advertisement
Guest User

Untitled

a guest
Dec 24th, 2011
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.86 KB | None | 0 0
  1. ;Rafael Trivino
  2. ;A Program that makes a blue box that toggles mouse interrupt
  3. ;and can be typed into through cursor positioning, with limited
  4. ;spaceing. December 8th, 2011
  5. ;BASED ON CATS CRADLE, 3:15AM IDEA
  6. TITLE FinalTest
  7. include\masm32\include\masm32rt.inc
  8.  
  9. FORMAT PROTO :DWORD
  10. MAKEWIN PROTO :DWORD, :DWORD
  11. ;-------------------------------------------------------------------------------------------------
  12. Rows EQU 25
  13. Colums EQU 80
  14. XLength EQU Rows*Colums*4 ;**string length charachter** Incase someone asks because you wont remember it.
  15. ;-------------------------------------------------------------------------------------------------
  16. ATitle = 47
  17. Colorz = 5 * 16 * 15
  18. ;-------------------------------------------------------------------------------------------------
  19. TitleCol = 18
  20. TitleStarPoint =(80 * 4) + (TitleCol - 1) * 4
  21.  
  22. .DATA
  23. BTitle DB "--------------------[] My Little Box Of Lies[]--------------------", 0
  24. PtrConTitle DWORD BTitle + 17
  25. InputB DWORD 1
  26.  
  27. ;Positioning, directly
  28. UpperRow DB 218
  29. RightCol DB 191
  30. LowerRow DB 192
  31. LeftCol DB 217
  32. Horizontal DB 196
  33. Vertical DB 179
  34.  
  35. .Data? ; Declare my unitialized Data (Irivine pg568)
  36. ConsoleScreen CHAR_INFO 2000 DUP (<>) ; Declaring a structured variable, my default field, pg 335
  37. Curs CONSOLE_CURSOR_INFO <> ;pg 402 the information of the cursor's size and visibility.
  38. Handler1 HANDLE ? ;pg 339, toogles Screen Buffer, could be wrong.
  39. Handler2 HANDLE ?
  40.  
  41. WindowSize SMALL_RECT<> ;pg390
  42. BufSize COORD <>
  43. Starter COORD <> ; Finding X, Y in the DOS field.
  44.  
  45. Manyof DD ?
  46. Buffer INPUT_RECORD <> ;pg 346, console input functions.
  47. ;-------------------------------------------------------------------------------------------------
  48. .CODE
  49. speedracer:
  50. MAIN PROC
  51. CALL InitProc
  52. CALL WINDESC
  53. CALL PUTCHAR
  54. INVOKE FORMAT, offset ConsoleScreen
  55. CALL AnyKey
  56. CALL CURPOS
  57. RacerX:
  58. INVOKE ExitProcess, 0 ;MS terminates program pg159
  59. RET
  60. MAIN ENDP
  61. ;------------------------------------------------------------------------------------------------
  62. WINDESC PROC
  63. INVOKE SetConsoleTitle, ADDR BTitle ;pg386. Setting the title bar string.
  64. CALL HideCurpos
  65. INVOKE SetConsoleWindowInfo, Handler1, TRUE, ADDR WindowSize
  66. INVOKE SetConsoleScreenBufferSize, Handler1, DWORD PTR BufSize
  67. RET
  68. WINDESC ENDP
  69. ;-------------------------------------------------------------------------------------------------
  70. PUTCHAR PROC
  71. CALL SetBufferColor
  72. INVOKE MAKEWIN, 1, 3
  73. INVOKE MAKEWIN, 4, 25
  74. CALL WriteScreenTitle
  75. RET
  76. PUTCHAR ENDP
  77. ;-------------------------------------------------------------------------------------------------
  78. ; Fill the buffer with a box of 80 characters
  79. ; till the number of line passed as II parameter.
  80. ;My 3:45AM Buzz Kill.
  81.  
  82. MAKEWIN PROC Row1:DWORD, Row2:DWORD
  83. MOV EAX, Row1
  84. SUB EAX, 1
  85. IMUL EAX, 320 ;pg627 perform a signed integer multiplication.
  86. MOV EDX, EAX
  87. LEA EAX, ConsoleScreen ;pg631 calculate and load the memory address.
  88. ADD EAX, EDX
  89.  
  90. MOVZX EBX, BYTE PTR[UpperRow]
  91. MOV BYTE PTR [EAX], BL
  92. ADD EAX, 4
  93. MOV ECX, 78
  94.  
  95. MOVZX EBX, BYTE PTR [Horizontal]
  96. MOV BL, Horizontal
  97. Filler1:
  98. MOV BYTE PTR[EAX], BL
  99. ADD EAX, 4
  100. DEC ECX
  101. JNZ Filler1
  102.  
  103. MOVZX EBX, BYTE PTR [RightCol]
  104. MOV BYTE PTR [EAX], BL
  105. ADD EAX, 4
  106.  
  107. MOV ECX, Row2
  108. SUB ECX, Row1
  109. DEC ECX
  110. MOVZX EBX, BYTE PTR [Vertical]
  111. BorderFill:
  112. MOV BYTE PTR [EAX], BL
  113. ADD EAX, 4
  114. MOV EDX, 4
  115. IMUL EDX, 78
  116. ADD EAX, EDX
  117. MOV BYTE PTR[EAX], BL
  118. ADD EAX, 4
  119. DEC ECX
  120. JNZ BorderFill
  121.  
  122. MOVZX EBX, BYTE PTR [LowerRow]
  123. MOV BYTE PTR [EAX], BL
  124. ADD EAX, 4
  125. MOV ECX, 78
  126. MOVZX EBX, BYTE PTR [Horizontal]
  127.  
  128. Filler2:
  129. MOV BYTE PTR [EAX], BL
  130. ADD EAX, 4
  131. DEC ECX
  132. JNZ Filler2
  133.  
  134. MOVZX EBX, BYTE PTR [LeftCol]
  135. MOV BYTE PTR [EAX], BL
  136. RET
  137. MAKEWIN ENDP
  138. ;-------------------------------------------------------------------------------------------------
  139. WriteScreenTitle PROC
  140. LEA EAX, ConsoleScreen
  141. ADD EAX, TitleStarPoint
  142. MOV ESI, PtrConTitle
  143. MOV BL, BYTE PTR Colorz
  144. MOV ECX, ATitle
  145. WriteTitle:
  146. MOV DL, BYTE PTR [ESI]
  147. MOV BYTE PTR [EAX], DL
  148. ADD EAX, 2
  149. MOV BYTE PTR [EAX], BL
  150. ADD EAX, 2
  151. INC ESI
  152. LOOP WriteTitle
  153. RET
  154. WriteScreenTitle ENDP
  155. ;-------------------------------------------------------------------------------------------------
  156. ;Coloring Time XD
  157. SetBufferColor PROC
  158. PUSH EDI
  159. MOV EDI, OFFSET ConsoleScreen
  160. MOV EAX, 201E2020H
  161. MOV ECX, 2000
  162. REP STOSD ; repeats what is stored in EAX.
  163. POP EDI
  164. RET
  165. SetBufferColor ENDP
  166. ;-------------------------------------------------------------------------------------------------
  167. CURPOS PROC
  168. INVOKE GetConsoleCursorInfo, Handler1, ADDR Curs
  169. MOV Curs.bVisible, TRUE
  170. INVOKE SetConsoleCursorInfo, Handler1, ADDR Curs
  171. RET
  172. CURPOS ENDP
  173. ;-------------------------------------------------------------------------------------------------
  174. HideCurpos PROC
  175. INVOKE GetConsoleCursorInfo, Handler1, ADDR Curs
  176. MOV Curs.bVisible, FALSE
  177. INVOKE SetConsoleCursorInfo, Handler1, ADDR Curs
  178. RET
  179. HideCurpos ENDP
  180. ;-------------------------------------------------------------------------------------------------
  181. InitProc PROC
  182. INVOKE GetStdHandle, STD_INPUT_HANDLE; pg383 return my handle back into EAX, the safekeeper.
  183. MOV Handler2, EAX
  184. INVOKE GetStdHandle, STD_OUTPUT_HANDLE
  185. MOV Handler1, EAX
  186.  
  187. MOV WindowSize.Left, 0
  188. MOV WindowSize.Right, 79
  189. MOV WindowSize.Top, 0
  190. MOV WindowSize.Bottom, 24
  191.  
  192. MOV BufSize.x, 80
  193. MOV BufSize.y, 25
  194.  
  195. MOV Starter.x, 0
  196. MOV Starter.y, 0
  197. CALL WINDESC
  198. RET
  199. InitProc ENDP
  200. ;-------------------------------------------------------------------------------------------------
  201. FORMAT PROC szFmtName:DWORD
  202. INVOKE WriteConsoleOutput, Handler1, szFmtName, DWORD PTR BufSize,
  203. DWORD PTR Starter, OFFSET WindowSize
  204. RET
  205. FORMAT ENDP
  206. ;-------------------------------------------------------------------------------------------------
  207. ;Returning the key code in buffer.KeyEvent.wVirtualKeyCode WORD size
  208. AnyKey PROC
  209. Looper:
  210. INVOKE ReadConsoleInput, Handler2, OFFSET Buffer, 1, OFFSET Manyof
  211. CMP Buffer.EventType, KEY_EVENT
  212. JNZ Looper
  213.  
  214. CMP Buffer.KeyEvent.bKeyDown, 0
  215. JZ Looper
  216. RET
  217. AnyKey ENDP
  218. ;-------------------------------------------------------------------------------------------------
  219. END speedracer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement