Add raw mode for charwin
This commit is contained in:
parent
639a33f9eb
commit
a86a19fc8c
|
@ -120,6 +120,9 @@ rem @echo off
|
||||||
@call :test scrolltest.c
|
@call :test scrolltest.c
|
||||||
@if %errorlevel% neq 0 goto :error
|
@if %errorlevel% neq 0 goto :error
|
||||||
|
|
||||||
|
@call :test charwintest.c
|
||||||
|
@if %errorlevel% neq 0 goto :error
|
||||||
|
|
||||||
@exit /b 0
|
@exit /b 0
|
||||||
|
|
||||||
:error
|
:error
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
#include <c64/charwin.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
CharWin cw;
|
||||||
|
|
||||||
|
cwin_init(&cw, (char *)0x0400, 2, 2, 32, 20);
|
||||||
|
|
||||||
|
cwin_clear(&cw);
|
||||||
|
|
||||||
|
for(int y=0; y<20; y++)
|
||||||
|
{
|
||||||
|
for(int x=0; x<32; x++)
|
||||||
|
{
|
||||||
|
assert(cwin_getat_char_raw(&cw, x, y) == ' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int y=0; y<20; y++)
|
||||||
|
{
|
||||||
|
for(int x=0; x<32; x++)
|
||||||
|
{
|
||||||
|
cwin_putat_char(&cw, x, y, p'a' - 1 + x, 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int y=0; y<20; y++)
|
||||||
|
{
|
||||||
|
for(int x=0; x<32; x++)
|
||||||
|
{
|
||||||
|
assert(cwin_getat_char(&cw, x, y) == p'a' -1 + x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int y=0; y<20; y++)
|
||||||
|
{
|
||||||
|
for(int x=0; x<32; x++)
|
||||||
|
{
|
||||||
|
cwin_putat_char(&cw, x, y, p'A' - 1 + x, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int y=0; y<20; y++)
|
||||||
|
{
|
||||||
|
for(int x=0; x<32; x++)
|
||||||
|
{
|
||||||
|
cwin_putat_char_raw(&cw, x, y, x + 32 * y, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int y=0; y<8; y++)
|
||||||
|
{
|
||||||
|
for(int x=0; x<32; x++)
|
||||||
|
{
|
||||||
|
assert(cwin_getat_char_raw(&cw, x, y) == x + 32 * y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -254,6 +254,32 @@ char cwin_put_string(CharWin * win, const char * str, char color)
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_put_char_raw(CharWin * win, char ch, char color)
|
||||||
|
{
|
||||||
|
cwin_putat_char_raw(win, win->cx, win->cy, ch, color);
|
||||||
|
win->cx++;
|
||||||
|
if (win->cx == win->wx)
|
||||||
|
{
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_put_chars_raw(CharWin * win, const char * chars, char num, char color)
|
||||||
|
{
|
||||||
|
cwin_putat_chars_raw(win, win->cx, win->cy, chars, color);
|
||||||
|
win->cx += num;
|
||||||
|
if (win->cx >= win->wx)
|
||||||
|
{
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cwin_putat_char(CharWin * win, char x, char y, char ch, char color)
|
void cwin_putat_char(CharWin * win, char x, char y, char ch, char color)
|
||||||
{
|
{
|
||||||
int offset = mul40[y] + x;
|
int offset = mul40[y] + x;
|
||||||
|
@ -303,6 +329,35 @@ char cwin_putat_string(CharWin * win, char x, char y, const char * str, char col
|
||||||
#pragma native(cwin_putat_string)
|
#pragma native(cwin_putat_string)
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_putat_char_raw(CharWin * win, char x, char y, char ch, char color)
|
||||||
|
{
|
||||||
|
int offset = mul40[y] + x;
|
||||||
|
|
||||||
|
win->sp[offset] = ch;
|
||||||
|
win->cp[offset] = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(cwin_putat_char_raw)
|
||||||
|
|
||||||
|
void cwin_putat_chars_raw(CharWin * win, char x, char y, const char * chars, char num, char color)
|
||||||
|
{
|
||||||
|
int offset = mul40[y] + x;
|
||||||
|
|
||||||
|
char * sp = win->sp + offset;
|
||||||
|
char * cp = win->cp + offset;
|
||||||
|
|
||||||
|
for(char i=0; i<num; i++)
|
||||||
|
{
|
||||||
|
char ch = chars[i];
|
||||||
|
|
||||||
|
sp[i] = ch;
|
||||||
|
cp[i] = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(cwin_putat_chars_raw)
|
||||||
|
|
||||||
|
|
||||||
char cwin_getat_char(CharWin * win, char x, char y)
|
char cwin_getat_char(CharWin * win, char x, char y)
|
||||||
{
|
{
|
||||||
char * sp = win->sp + mul40[y] + x;
|
char * sp = win->sp + mul40[y] + x;
|
||||||
|
@ -310,6 +365,8 @@ char cwin_getat_char(CharWin * win, char x, char y)
|
||||||
return s2p(*sp);
|
return s2p(*sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma native(cwin_getat_char)
|
||||||
|
|
||||||
void cwin_getat_chars(CharWin * win, char x, char y, char * chars, char num)
|
void cwin_getat_chars(CharWin * win, char x, char y, char * chars, char num)
|
||||||
{
|
{
|
||||||
char * sp = win->sp + mul40[y] + x;
|
char * sp = win->sp + mul40[y] + x;
|
||||||
|
@ -320,6 +377,28 @@ void cwin_getat_chars(CharWin * win, char x, char y, char * chars, char num)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma native(cwin_getat_chars)
|
||||||
|
|
||||||
|
char cwin_getat_char_raw(CharWin * win, char x, char y)
|
||||||
|
{
|
||||||
|
char * sp = win->sp + mul40[y] + x;
|
||||||
|
|
||||||
|
return *sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(cwin_getat_char_raw)
|
||||||
|
|
||||||
|
void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num)
|
||||||
|
{
|
||||||
|
char * sp = win->sp + mul40[y] + x;
|
||||||
|
|
||||||
|
for(char i=0; i<num; i++)
|
||||||
|
{
|
||||||
|
chars[i] = sp[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(cwin_getat_chars_raw)
|
||||||
|
|
||||||
void cwin_insert_char(CharWin * win)
|
void cwin_insert_char(CharWin * win)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,6 +62,17 @@ void cwin_put_chars(CharWin * win, const char * chars, char num, char color);
|
||||||
//
|
//
|
||||||
char cwin_put_string(CharWin * win, const char * str, char color);
|
char cwin_put_string(CharWin * win, const char * str, char color);
|
||||||
|
|
||||||
|
|
||||||
|
// Put a single raw char at the cursor location and advance the cursor
|
||||||
|
//
|
||||||
|
void cwin_put_char_raw(CharWin * win, char ch, char color);
|
||||||
|
|
||||||
|
// Put an array of raw chars at the cursor location and advance the cursor
|
||||||
|
//
|
||||||
|
void cwin_put_chars_raw(CharWin * win, const char * chars, char num, char color);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Put a single char at the given window location
|
// Put a single char at the given window location
|
||||||
//
|
//
|
||||||
void cwin_putat_char(CharWin * win, char x, char y, char ch, char color);
|
void cwin_putat_char(CharWin * win, char x, char y, char ch, char color);
|
||||||
|
@ -75,6 +86,15 @@ void cwin_putat_chars(CharWin * win, char x, char y, const char * chars, char nu
|
||||||
char cwin_putat_string(CharWin * win, char x, char y, const char * str, char color);
|
char cwin_putat_string(CharWin * win, char x, char y, const char * str, char color);
|
||||||
|
|
||||||
|
|
||||||
|
// Put a single raw char at the given window location
|
||||||
|
//
|
||||||
|
void cwin_putat_char_raw(CharWin * win, char x, char y, char ch, char color);
|
||||||
|
|
||||||
|
// Put an array of raw chars at the given window location
|
||||||
|
//
|
||||||
|
void cwin_putat_chars_raw(CharWin * win, char x, char y, const char * chars, char num, char color);
|
||||||
|
|
||||||
|
|
||||||
// Get a single char at the given window location
|
// Get a single char at the given window location
|
||||||
//
|
//
|
||||||
char cwin_getat_char(CharWin * win, char x, char y);
|
char cwin_getat_char(CharWin * win, char x, char y);
|
||||||
|
@ -85,6 +105,16 @@ void cwin_getat_chars(CharWin * win, char x, char y, char * chars, char num);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Get a single char at the given window location
|
||||||
|
//
|
||||||
|
char cwin_getat_char_raw(CharWin * win, char x, char y);
|
||||||
|
|
||||||
|
// Get an array of chars at the given window location
|
||||||
|
//
|
||||||
|
void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Insert one space character at the cursor position
|
// Insert one space character at the cursor position
|
||||||
//
|
//
|
||||||
void cwin_insert_char(CharWin * win);
|
void cwin_insert_char(CharWin * win);
|
||||||
|
|
Loading…
Reference in New Issue