room101/OBSOLETE/TERMINAL.CPP

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++);
}
}