Add charwin get/put rect functions

This commit is contained in:
drmortalwombat 2022-07-20 08:10:05 +02:00
parent 864c8ec9a5
commit 67142bdb01
2 changed files with 106 additions and 1 deletions

View File

@ -422,7 +422,7 @@ char cwin_getat_char_raw(CharWin * win, char x, char y)
return *sp; return *sp;
} }
#pragma native(cwin_getat_char_raw) #pragma native(cwin_getat_chars_raw)
void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num) void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num)
{ {
@ -434,6 +434,98 @@ void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num)
} }
} }
#pragma native(cwin_put_rect_raw)
void cwin_put_rect_raw(CharWin * win, char x, char y, char w, char h, const char * chars, char color)
{
int offset = mul40[y] + x;
char * sp = win->sp + offset;
char * cp = win->cp + offset;
for(char i=0; i<h; i++)
{
for(char j=0; j<w; j++)
{
sp[j] = chars[j];
cp[j] = color;
}
chars += w;
sp += 40;
cp += 40;
}
}
#pragma native(cwin_put_rect)
void cwin_put_rect(CharWin * win, char x, char y, char w, char h, const char * chars, char color)
{
int offset = mul40[y] + x;
char * sp = win->sp + offset;
char * cp = win->cp + offset;
for(char i=0; i<h; i++)
{
for(char j=0; j<w; j++)
{
sp[j] = p2s(chars[j]);
cp[j] = color;
}
chars += w;
sp += 40;
cp += 40;
}
}
#pragma native(cwin_get_rect_raw)
void cwin_get_rect_raw(CharWin * win, char x, char y, char w, char h, char * chars)
{
int offset = mul40[y] + x;
char * sp = win->sp + offset;
for(char i=0; i<h; i++)
{
for(char j=0; j<w; j++)
{
chars[j] = sp[j];
}
chars += w;
sp += 40;
}
}
#pragma native(cwin_get_rect)
void cwin_get_rect(CharWin * win, char x, char y, char w, char h, char * chars)
{
int offset = mul40[y] + x;
char * sp = win->sp + offset;
for(char i=0; i<h; i++)
{
for(char j=0; j<w; j++)
{
chars[j] = s2p(sp[j]);
}
chars += w;
sp += 40;
}
}
#pragma native(cwin_getat_chars_raw) #pragma native(cwin_getat_chars_raw)
void cwin_insert_char(CharWin * win) void cwin_insert_char(CharWin * win)

View File

@ -122,6 +122,17 @@ char cwin_getat_char_raw(CharWin * win, char x, char y);
void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num); void cwin_getat_chars_raw(CharWin * win, char x, char y, char * chars, char num);
// Put an array of characters into a rectangle in the char win
void cwin_put_rect_raw(CharWin * win, char x, char y, char w, char h, const char * chars, char color);
void cwin_put_rect(CharWin * win, char x, char y, char w, char h, const char * chars, char color);
// Get an array of characters from a rectangle of a char win
void cwin_get_rect_raw(CharWin * win, char x, char y, char w, char h, char * chars);
void cwin_get_rect(CharWin * win, char x, char y, char w, char h, char * chars);
// Insert one space character at the cursor position // Insert one space character at the cursor position
// //
@ -160,6 +171,8 @@ inline void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char c
// //
void cwin_fill_rect_raw(CharWin * win, char x, char y, char w, char h, char ch, char color); void cwin_fill_rect_raw(CharWin * win, char x, char y, char w, char h, char ch, char color);
#pragma compile("charwin.c") #pragma compile("charwin.c")
#endif #endif