    format pe console
    entry start

    include "include\win32ax.inc"

;------------------------------------------------------------------------------

section ".data" data readable writeable

    hOut dd 0

    align 4
    struct COORD
        x dw ?
        y dw ?
    ends

    align 4
    struct SMALL_RECT
        Left dw ?
        Top dw ?
        Right dw ?
        Bottom dw ?
    ends

    align 4
    struct CONSOLE_SCREEN_BUFFER_INFO
        dwSize COORD
        dwCursorPosition COORD
        wAttributes dw ?
        srWindow SMALL_RECT
        dwMaximumWindowSize COORD
    ends


;------------------------------------------------------------------------------

section ".text" code readable executable
start:

    invoke GetStdHandle, STD_OUTPUT_HANDLE
    ;error?
    mov dword [hOut], eax

    stdcall CLS

    invoke ExitProcess, 0



align 4
proc CLS

    local dwLen dd 0
    local dwCoord dd 0
    local lpWritten dd 0
    local Csbi CONSOLE_SCREEN_BUFFER_INFO

    pushad

    invoke GetConsoleScreenBufferInfo, dword [hOut], addr Csbi
    ;error?

    movzx eax, word [Csbi.dwSize.x]
    movzx ecx, word [Csbi.dwSize.y]
    mul ecx
    mov dword [dwLen], eax

    invoke FillConsoleOutputCharacter, dword [hOut], 0x20, dword [dwLen], dword [dwCoord], addr lpWritten
    ;error?

    movzx eax, word [Csbi.wAttributes]

    invoke FillConsoleOutputAttribute, dword [hOut], eax, dword [dwLen], dword [dwCoord], addr lpWritten
    ;error?

    invoke SetConsoleCursorPosition, dword [hOut], dword [dwCoord]
    ;error?

    popad

    ret
endp


;------------------------------------------------------------------------------

section ".idata" import data readable writeable

    library kernel32,"kernel32.dll"

    include "include\api\kernel32.inc"