;=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
;very simply ncurses example borrowed from FreeBASIC
;ported to jwasm 12-01-2009 
;James C. Fuller
;------------------------------------------------------------------------------
;JWASM -elf -zcw -Fo ncurs1.o ncurs1.asm
;gcc  -o ncurs1 ncurs1.o -I/lib/ld-linux.so.2 -lncurses
;=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
    .486
    .model flat,c
    option casemap:none

initscr         proto 
newwin          proto :DWORD,:DWORD,:DWORD,:DWORD
delwin          proto :DWORD
box             proto :DWORD,:DWORD,:DWORD
endwin          proto 
wrefresh        proto :DWORD
curs_set        proto :DWORD
wgetch          proto :DWORD
mvwprintw       proto :DWORD,:DWORD,:DWORD,:DWORD,:VARARG
wclear          proto :DWORD 
cbreak          proto
noecho          proto
COLOR_PAIR      proto :DWORD
has_colors      proto
start_color     proto
pair_content    proto :WORD,:DWORD,:DWORD
printw          proto :DWORD,:VARARG
init_pair       proto :WORD,:WORD,:WORD
attrset         proto :DWORD
getch           proto
printf          proto c :DWORD,:VARARG

COLOR_BLACK     equ 0
COLOR_RED       equ 1
COLOR_GREEN     equ 2
COLOR_YELLOW    equ 3
COLOR_BLUE      equ 4
COLOR_MAGENTA   equ 5
COLOR_CYAN      equ 6
COLOR_WHITE     equ 7

;------------------------------------------------------------------------------
lf equ 10

CStr macro text
local xxx
    .const
xxx db text,0
    .code
    exitm <offset xxx>
    endm
;------------------------------------------------------------------------------
    .code

main proc

    local window:DWORD,f:WORD,b:WORD

    invoke initscr
    invoke cbreak
    invoke noecho
    invoke has_colors
    .if eax == 0
        invoke printf,CStr(<"This demo requires a color terminal",lf>)
        jmp @F
    .endif
    invoke start_color
    invoke pair_content,0,ADDR f,ADDR b
    invoke printw,CStr(<"pair 0 contains (%d,%d) Any key to continue",lf>), f, b
    invoke getch
    invoke printw, CStr(<"Initializing pair 1 to red/black",lf)
    invoke init_pair,1,COLOR_RED, COLOR_BLACK
    invoke COLOR_PAIR,1
    invoke attrset,eax
    invoke printw,CStr(<"RED/BLACK -> Any Key To continue",lf> )
    invoke getch
    invoke COLOR_PAIR,0
    invoke attrset,eax 
    invoke printw,CStr(<"Initializing pair 2 to white/blue",lf> )
    invoke init_pair,2,COLOR_WHITE, COLOR_BLUE
    invoke COLOR_PAIR,2
    invoke attrset,eax
    invoke printw,CStr(<"WHITE/BLUE -> Any Key To continue",lf> )
    invoke COLOR_PAIR,0
    invoke attrset,eax 
    invoke getch
    invoke printw,CStr(<"Initializing pair 3 to white/cyan",lf> )
    invoke init_pair,3,COLOR_WHITE, COLOR_CYAN
    invoke COLOR_PAIR,3
    invoke attrset,eax 
    invoke printw,CStr(<"WHITE/CYAN -> Any Key To continue",lf> )
    invoke getch

    invoke endwin
@@:
    ret
main endp
end