Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Rafael Trivino
- ;A Program that makes a blue box that toggles mouse interrupt
- ;and can be typed into through cursor positioning, with limited
- ;spaceing. December 8th, 2011
- ;BASED ON CATS CRADLE, 3:15AM IDEA
- TITLE FinalTest
- include\masm32\include\masm32rt.inc
- FORMAT PROTO :DWORD
- MAKEWIN PROTO :DWORD, :DWORD
- ;-------------------------------------------------------------------------------------------------
- Rows EQU 25
- Colums EQU 80
- XLength EQU Rows*Colums*4 ;**string length charachter** Incase someone asks because you wont remember it.
- ;-------------------------------------------------------------------------------------------------
- ATitle = 47
- Colorz = 5 * 16 * 15
- ;-------------------------------------------------------------------------------------------------
- TitleCol = 18
- TitleStarPoint =(80 * 4) + (TitleCol - 1) * 4
- .DATA
- BTitle DB "--------------------[] My Little Box Of Lies[]--------------------", 0
- PtrConTitle DWORD BTitle + 17
- InputB DWORD 1
- ;Positioning, directly
- UpperRow DB 218
- RightCol DB 191
- LowerRow DB 192
- LeftCol DB 217
- Horizontal DB 196
- Vertical DB 179
- .Data? ; Declare my unitialized Data (Irivine pg568)
- ConsoleScreen CHAR_INFO 2000 DUP (<>) ; Declaring a structured variable, my default field, pg 335
- Curs CONSOLE_CURSOR_INFO <> ;pg 402 the information of the cursor's size and visibility.
- Handler1 HANDLE ? ;pg 339, toogles Screen Buffer, could be wrong.
- Handler2 HANDLE ?
- WindowSize SMALL_RECT<> ;pg390
- BufSize COORD <>
- Starter COORD <> ; Finding X, Y in the DOS field.
- Manyof DD ?
- Buffer INPUT_RECORD <> ;pg 346, console input functions.
- ;-------------------------------------------------------------------------------------------------
- .CODE
- speedracer:
- MAIN PROC
- CALL InitProc
- CALL WINDESC
- CALL PUTCHAR
- INVOKE FORMAT, offset ConsoleScreen
- CALL AnyKey
- CALL CURPOS
- RacerX:
- INVOKE ExitProcess, 0 ;MS terminates program pg159
- RET
- MAIN ENDP
- ;------------------------------------------------------------------------------------------------
- WINDESC PROC
- INVOKE SetConsoleTitle, ADDR BTitle ;pg386. Setting the title bar string.
- CALL HideCurpos
- INVOKE SetConsoleWindowInfo, Handler1, TRUE, ADDR WindowSize
- INVOKE SetConsoleScreenBufferSize, Handler1, DWORD PTR BufSize
- RET
- WINDESC ENDP
- ;-------------------------------------------------------------------------------------------------
- PUTCHAR PROC
- CALL SetBufferColor
- INVOKE MAKEWIN, 1, 3
- INVOKE MAKEWIN, 4, 25
- CALL WriteScreenTitle
- RET
- PUTCHAR ENDP
- ;-------------------------------------------------------------------------------------------------
- ; Fill the buffer with a box of 80 characters
- ; till the number of line passed as II parameter.
- ;My 3:45AM Buzz Kill.
- MAKEWIN PROC Row1:DWORD, Row2:DWORD
- MOV EAX, Row1
- SUB EAX, 1
- IMUL EAX, 320 ;pg627 perform a signed integer multiplication.
- MOV EDX, EAX
- LEA EAX, ConsoleScreen ;pg631 calculate and load the memory address.
- ADD EAX, EDX
- MOVZX EBX, BYTE PTR[UpperRow]
- MOV BYTE PTR [EAX], BL
- ADD EAX, 4
- MOV ECX, 78
- MOVZX EBX, BYTE PTR [Horizontal]
- MOV BL, Horizontal
- Filler1:
- MOV BYTE PTR[EAX], BL
- ADD EAX, 4
- DEC ECX
- JNZ Filler1
- MOVZX EBX, BYTE PTR [RightCol]
- MOV BYTE PTR [EAX], BL
- ADD EAX, 4
- MOV ECX, Row2
- SUB ECX, Row1
- DEC ECX
- MOVZX EBX, BYTE PTR [Vertical]
- BorderFill:
- MOV BYTE PTR [EAX], BL
- ADD EAX, 4
- MOV EDX, 4
- IMUL EDX, 78
- ADD EAX, EDX
- MOV BYTE PTR[EAX], BL
- ADD EAX, 4
- DEC ECX
- JNZ BorderFill
- MOVZX EBX, BYTE PTR [LowerRow]
- MOV BYTE PTR [EAX], BL
- ADD EAX, 4
- MOV ECX, 78
- MOVZX EBX, BYTE PTR [Horizontal]
- Filler2:
- MOV BYTE PTR [EAX], BL
- ADD EAX, 4
- DEC ECX
- JNZ Filler2
- MOVZX EBX, BYTE PTR [LeftCol]
- MOV BYTE PTR [EAX], BL
- RET
- MAKEWIN ENDP
- ;-------------------------------------------------------------------------------------------------
- WriteScreenTitle PROC
- LEA EAX, ConsoleScreen
- ADD EAX, TitleStarPoint
- MOV ESI, PtrConTitle
- MOV BL, BYTE PTR Colorz
- MOV ECX, ATitle
- WriteTitle:
- MOV DL, BYTE PTR [ESI]
- MOV BYTE PTR [EAX], DL
- ADD EAX, 2
- MOV BYTE PTR [EAX], BL
- ADD EAX, 2
- INC ESI
- LOOP WriteTitle
- RET
- WriteScreenTitle ENDP
- ;-------------------------------------------------------------------------------------------------
- ;Coloring Time XD
- SetBufferColor PROC
- PUSH EDI
- MOV EDI, OFFSET ConsoleScreen
- MOV EAX, 201E2020H
- MOV ECX, 2000
- REP STOSD ; repeats what is stored in EAX.
- POP EDI
- RET
- SetBufferColor ENDP
- ;-------------------------------------------------------------------------------------------------
- CURPOS PROC
- INVOKE GetConsoleCursorInfo, Handler1, ADDR Curs
- MOV Curs.bVisible, TRUE
- INVOKE SetConsoleCursorInfo, Handler1, ADDR Curs
- RET
- CURPOS ENDP
- ;-------------------------------------------------------------------------------------------------
- HideCurpos PROC
- INVOKE GetConsoleCursorInfo, Handler1, ADDR Curs
- MOV Curs.bVisible, FALSE
- INVOKE SetConsoleCursorInfo, Handler1, ADDR Curs
- RET
- HideCurpos ENDP
- ;-------------------------------------------------------------------------------------------------
- InitProc PROC
- INVOKE GetStdHandle, STD_INPUT_HANDLE; pg383 return my handle back into EAX, the safekeeper.
- MOV Handler2, EAX
- INVOKE GetStdHandle, STD_OUTPUT_HANDLE
- MOV Handler1, EAX
- MOV WindowSize.Left, 0
- MOV WindowSize.Right, 79
- MOV WindowSize.Top, 0
- MOV WindowSize.Bottom, 24
- MOV BufSize.x, 80
- MOV BufSize.y, 25
- MOV Starter.x, 0
- MOV Starter.y, 0
- CALL WINDESC
- RET
- InitProc ENDP
- ;-------------------------------------------------------------------------------------------------
- FORMAT PROC szFmtName:DWORD
- INVOKE WriteConsoleOutput, Handler1, szFmtName, DWORD PTR BufSize,
- DWORD PTR Starter, OFFSET WindowSize
- RET
- FORMAT ENDP
- ;-------------------------------------------------------------------------------------------------
- ;Returning the key code in buffer.KeyEvent.wVirtualKeyCode WORD size
- AnyKey PROC
- Looper:
- INVOKE ReadConsoleInput, Handler2, OFFSET Buffer, 1, OFFSET Manyof
- CMP Buffer.EventType, KEY_EVENT
- JNZ Looper
- CMP Buffer.KeyEvent.bKeyDown, 0
- JZ Looper
- RET
- AnyKey ENDP
- ;-------------------------------------------------------------------------------------------------
- END speedracer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement