News:

Download Pelles C here: http://www.pellesc.se

Main Menu

Console scroll demo

Started by Vortex, Today at 12:03:04 PM

Previous topic - Next topic

Vortex

Here is a console scroll demo :

.386
.model flat,stdcall
option casemap:none

include ConsoleScroll.inc

.data

Coordinates dw  30,5
message     db '        This is a scroll test. ',0

.code

start:

    invoke  ClearScreen

    call    scroll
    invoke  ExitProcess,0

scroll PROC uses esi edi ebx

LOCAL hStd:DWORD

    invoke  GetStdHandle,STD_OUTPUT_HANDLE
    mov     hStd,eax

    mov     esi,OFFSET message
    invoke  lstrlen,esi
    mov     ebx,eax
    mov     edi,1
@@:
    invoke  SetConsoleCursorPosition,\
            hStd,Coordinates
           
    invoke  StdOut,esi
    invoke  Sleep,200
    add     esi,edi
    dec     ebx
    jnz     @b
    ret

scroll ENDP


ClearScreen PROC ; function from the Masm32 package

    LOCAL   hOutPut:DWORD
    LOCAL   noc    :DWORD
    LOCAL   cnt    :DWORD
    LOCAL   sbi    :CONSOLE_SCREEN_BUFFER_INFO

    invoke  GetStdHandle,STD_OUTPUT_HANDLE
    mov     hOutPut, eax

    invoke  GetConsoleScreenBufferInfo,hOutPut,ADDR sbi

    mov     eax, sbi.dwSize

    push    ax
    rol     eax, 16
    mov     cx, ax
    pop     ax
    mul     cx
    cwde
    mov     cnt, eax

    invoke  FillConsoleOutputCharacter,hOutPut,\
            32,cnt,0,ADDR noc

    invoke  locate,0,0
    ret
   
ClearScreen ENDP


locate PROC x:DWORD,y:DWORD ; function from the Masm32 package

LOCAL hOutPut  :DWORD
   
    invoke  GetStdHandle,STD_OUTPUT_HANDLE
    mov     hOutPut, eax

  ; -----------------------------------
  ; make both co-ordinates into a DWORD
  ; -----------------------------------
    mov     ecx,x
    mov     eax,y
    shl     eax,16
    mov     ax,cx

    invoke SetConsoleCursorPosition,hOutPut,eax

    ret

locate ENDP

StdOut PROC lpszText:DWORD ; function from the Masm32 package

LOCAL hOutPut  :DWORD
LOCAL bWritten :DWORD
LOCAL sl       :DWORD

    invoke  GetStdHandle,STD_OUTPUT_HANDLE
    mov     hOutPut, eax

    invoke  lstrlen,lpszText
    mov     sl,eax

    invoke  WriteFile,hOutPut,lpszText,\
            sl,ADDR bWritten,0

    mov     eax,bWritten
    ret

StdOut ENDP

END start
Code it... That's all...