117 lines
2.4 KiB
C++
117 lines
2.4 KiB
C++
#include "terminal.hpp"
|
|
|
|
Terminal
|
|
TerminalCreate(Picture out, Picture font)
|
|
{
|
|
Terminal terminal;
|
|
|
|
memset(&terminal, 0, sizeof(Terminal));
|
|
|
|
terminal.out = out;
|
|
terminal.font = font;
|
|
terminal.fontwidth = 9;
|
|
|
|
return terminal;
|
|
}
|
|
|
|
|
|
void
|
|
TerminalCarriageReturn(Terminal* terminal)
|
|
{
|
|
terminal->xpos = 0;
|
|
}
|
|
|
|
void
|
|
TerminalLineFeed(Terminal* terminal)
|
|
{
|
|
int i;
|
|
|
|
terminal->ypos += terminal->font.height;
|
|
|
|
while (terminal->ypos > (terminal->out.height - terminal->font.height))
|
|
{
|
|
terminal->ypos -= terminal->font.height;
|
|
/*
|
|
PictureBlit(
|
|
&terminal->out,
|
|
0,
|
|
0,
|
|
terminal->out.width,
|
|
terminal->out.height - terminal->font.height,
|
|
&terminal->out,
|
|
0,
|
|
terminal->font.height,
|
|
terminal->out.width,
|
|
terminal->out.height,
|
|
PICTURE_NO_COLOUR_KEY, 0, 0);
|
|
*/
|
|
}
|
|
for (i = 0; i < terminal->font.height; i++)
|
|
{
|
|
memset(terminal->out.pixels[terminal->ypos + i], 0, terminal->out.width);
|
|
}
|
|
}
|
|
|
|
void
|
|
TerminalNewLine(Terminal* terminal)
|
|
{
|
|
TerminalCarriageReturn(terminal);
|
|
TerminalLineFeed(terminal);
|
|
}
|
|
|
|
void
|
|
TerminalRight(Terminal* terminal)
|
|
{
|
|
terminal->xpos += terminal->fontwidth;
|
|
|
|
if (terminal->xpos > (terminal->out.width - terminal->fontwidth))
|
|
{
|
|
TerminalNewLine(terminal);
|
|
}
|
|
}
|
|
|
|
void
|
|
TerminalPrintChar(Terminal* terminal, int c)
|
|
{
|
|
switch (c)
|
|
{
|
|
case '\n':
|
|
{
|
|
TerminalNewLine(terminal);
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
assert(isprint(c));
|
|
|
|
c = (c - 32) * terminal->fontwidth;
|
|
|
|
PictureBlit(
|
|
&terminal->out ,
|
|
terminal->xpos,
|
|
terminal->ypos,
|
|
terminal->xpos + terminal->fontwidth,
|
|
terminal->ypos + terminal->font.height,
|
|
&terminal->font,
|
|
c,
|
|
0,
|
|
terminal->fontwidth + c,
|
|
terminal->font.height,
|
|
PICTURE_NO_COLOUR_KEY, 0, 0);
|
|
|
|
TerminalRight(terminal);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
TerminalPrintString(Terminal* terminal, char* s)
|
|
{
|
|
while (*s)
|
|
{
|
|
TerminalPrintChar(terminal, *s++);
|
|
}
|
|
}
|
|
|
|
|