Fixed charwin petscii screen code conversion
This commit is contained in:
parent
695d4cf914
commit
a8acde291b
|
@ -169,6 +169,19 @@ bool cwin_cursor_backward(CharWin * win)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char p2smap[] = {0x00, 0x20, 0x00, 0x40, 0x00, 0x60, 0x40, 0x60};
|
||||||
|
static char s2pmap[] = {0x40, 0x20, 0x60, 0xb0, 0x40, 0x20, 0x60, 0xb0};
|
||||||
|
|
||||||
|
static inline char p2s(char ch)
|
||||||
|
{
|
||||||
|
return (ch & 0x1f) | p2smap[ch >> 5];
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline char s2p(char ch)
|
||||||
|
{
|
||||||
|
return (ch & 0x1f) | s2pmap[ch >> 5];
|
||||||
|
}
|
||||||
|
|
||||||
void cwin_read_string(CharWin * win, char * buffer)
|
void cwin_read_string(CharWin * win, char * buffer)
|
||||||
{
|
{
|
||||||
char * sp = win->sp;
|
char * sp = win->sp;
|
||||||
|
@ -178,12 +191,7 @@ void cwin_read_string(CharWin * win, char * buffer)
|
||||||
{
|
{
|
||||||
for(char x=0; x<win->wx; x++)
|
for(char x=0; x<win->wx; x++)
|
||||||
{
|
{
|
||||||
char c = sp[x];
|
buffer[i++] = s2p(sp[x]);
|
||||||
if (c & 0x40)
|
|
||||||
c ^= 0xc0;
|
|
||||||
if (!(c & 0x20))
|
|
||||||
c |= 0x40;
|
|
||||||
buffer[i++] = c;
|
|
||||||
}
|
}
|
||||||
sp += 40;
|
sp += 40;
|
||||||
}
|
}
|
||||||
|
@ -202,9 +210,7 @@ void cwin_write_string(CharWin * win, const char * buffer)
|
||||||
char ch = *buffer;
|
char ch = *buffer;
|
||||||
if (ch)
|
if (ch)
|
||||||
{
|
{
|
||||||
ch = (ch & 0x3f) | ((ch & 0x80) >> 1);
|
dp[x] = p2s(ch);
|
||||||
|
|
||||||
dp[x] = ch;
|
|
||||||
buffer++;
|
buffer++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -252,9 +258,7 @@ void cwin_putat_char(CharWin * win, char x, char y, char ch, char color)
|
||||||
{
|
{
|
||||||
int offset = mul40[y] + x;
|
int offset = mul40[y] + x;
|
||||||
|
|
||||||
ch = (ch & 0x3f) | ((ch & 0x80) >> 1);
|
win->sp[offset] = p2s(ch);
|
||||||
|
|
||||||
win->sp[offset] = ch;
|
|
||||||
win->cp[offset] = color;
|
win->cp[offset] = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,9 +275,7 @@ void cwin_putat_chars(CharWin * win, char x, char y, const char * chars, char nu
|
||||||
{
|
{
|
||||||
char ch = chars[i];
|
char ch = chars[i];
|
||||||
|
|
||||||
ch = (ch & 0x3f) | ((ch & 0x80) >> 1);
|
sp[i] = p2s(ch);
|
||||||
|
|
||||||
sp[i] = ch;
|
|
||||||
cp[i] = color;
|
cp[i] = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -290,9 +292,7 @@ char cwin_putat_string(CharWin * win, char x, char y, const char * str, char col
|
||||||
char i = 0;
|
char i = 0;
|
||||||
while (char ch = str[i])
|
while (char ch = str[i])
|
||||||
{
|
{
|
||||||
ch = (ch & 0x3f) | ((ch & 0x80) >> 1);
|
sp[i] = p2s(ch);
|
||||||
|
|
||||||
sp[i] = ch;
|
|
||||||
cp[i] = color;
|
cp[i] = color;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
@ -307,14 +307,7 @@ char cwin_getat_char(CharWin * win, char x, char y)
|
||||||
{
|
{
|
||||||
char * sp = win->sp + mul40[y] + x;
|
char * sp = win->sp + mul40[y] + x;
|
||||||
|
|
||||||
char c = *sp;
|
return s2p(*sp);
|
||||||
|
|
||||||
if (c & 0x40)
|
|
||||||
c ^= 0xc0;
|
|
||||||
if (!(c & 0x20))
|
|
||||||
c |= 0x40;
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
@ -323,14 +316,7 @@ void cwin_getat_chars(CharWin * win, char x, char y, char * chars, char num)
|
||||||
|
|
||||||
for(char i=0; i<num; i++)
|
for(char i=0; i<num; i++)
|
||||||
{
|
{
|
||||||
char c = sp[i];
|
chars[i] = s2p(sp[i]);
|
||||||
|
|
||||||
if (c & 0x40)
|
|
||||||
c ^= 0xc0;
|
|
||||||
if (!(c & 0x20))
|
|
||||||
c |= 0x40;
|
|
||||||
|
|
||||||
chars[i] = c;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,8 +515,7 @@ void cwin_scroll_down(CharWin * win, char by)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cwin_fill_rect_raw(CharWin * win, char x, char y, char w, char h, char ch, char color)
|
||||||
void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char color)
|
|
||||||
{
|
{
|
||||||
if (w > 0)
|
if (w > 0)
|
||||||
{
|
{
|
||||||
|
@ -545,3 +530,8 @@ void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char color)
|
||||||
|
{
|
||||||
|
cwin_fill_rect_raw(win, x, y, w, h, p2s(ch), color);
|
||||||
|
}
|
||||||
|
|
|
@ -114,7 +114,11 @@ void cwin_scroll_down(CharWin * win, char by);
|
||||||
|
|
||||||
// Fill the given rectangle with the character and color
|
// Fill the given rectangle with the character and color
|
||||||
//
|
//
|
||||||
void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char color);
|
inline void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char color);
|
||||||
|
|
||||||
|
// Fill the given rectangle with the screen code and 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")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue