Import backup from 2004-08-17
This commit is contained in:
1 parent
c0dd3b529e
commit
1bf14ddefa
8 files changed
+81
-66
No files matched your search
+51
-46
@@ -9,10 +9,13 @@
|
||||
#include "mm/vmm.h"
|
||||
#include "lang/asmfuncs.h"
|
||||
#include "console.h"
|
||||
#include "functions.h"
|
||||
|
||||
vconsole_t *vconsoles[VCONSOLE_MAX]; // pointer to virtual console structs
|
||||
extern int activeConsole; // console subsystem active virtual console number
|
||||
|
||||
char ansi2vgaAttr[8] = {0, 4, 2, 6, 1, 5, 3, 7};
|
||||
|
||||
void vconsole_put_char(minor_t id, int c);
|
||||
void vconsole_update_cursor(minor_t id, u16_t position);
|
||||
void vconsole_update_attribute(minor_t id);
|
||||
@@ -75,6 +78,7 @@ int vconsole_char_write(minor_t id, int c)
|
||||
return -1;
|
||||
int cursorY = vconsoles[id]->cursorPosition / vconsoles[id]->width;
|
||||
int cursorX = vconsoles[id]->cursorPosition % vconsoles[id]->width;
|
||||
int evalEscapePosition = 0;
|
||||
switch (vconsoles[id]->escapeLevel)
|
||||
{
|
||||
case 2:
|
||||
@@ -96,29 +100,25 @@ int vconsole_char_write(minor_t id, int c)
|
||||
cursorY -= vconsoles[id]->escapeValue[0];
|
||||
if (cursorY < 0)
|
||||
cursorY = 0;
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width +
|
||||
cursorX);
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width + cursorX);
|
||||
break;
|
||||
case 'B': // move cursor down n rows
|
||||
cursorY += vconsoles[id]->escapeValue[0];
|
||||
if (cursorY >= vconsoles[id]->height)
|
||||
cursorY = vconsoles[id]->height - 1;
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width +
|
||||
cursorX);
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width + cursorX);
|
||||
break;
|
||||
case 'C': // move cursor right n columns
|
||||
cursorX -= vconsoles[id]->escapeValue[0];
|
||||
if (cursorX < 0)
|
||||
cursorX = 0;
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width +
|
||||
cursorX);
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width + cursorX);
|
||||
break;
|
||||
case 'D': // move cursor left n columns
|
||||
cursorX += vconsoles[id]->escapeValue[0];
|
||||
if (cursorX >= vconsoles[id]->width)
|
||||
cursorX = vconsoles[id]->width - 1;
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width +
|
||||
cursorX);
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width + cursorX);
|
||||
break;
|
||||
case 'H':
|
||||
case 'f': // move cursor to position (x,y) upper left is (1,1)
|
||||
@@ -132,7 +132,7 @@ cursorX);
|
||||
cursorX = 0;
|
||||
if (cursorX >= vconsoles[id]->width)
|
||||
cursorX = vconsoles[id]->width - 1;
|
||||
vconsole_update_cursor(id, 0);
|
||||
vconsole_update_cursor(id, cursorY * vconsoles[id]->width + cursorX);
|
||||
break;
|
||||
case 'J': // clear screen, home cursor
|
||||
memsetw(vconsoles[id]->buffer, 0x0720, vconsoles[id]->width * vconsoles[id]->height);
|
||||
@@ -140,8 +140,7 @@ cursorX);
|
||||
vconsole_update_cursor(id, 0);
|
||||
break;
|
||||
case 'K': // erase line from cursor position (including char. under cursor) to end of line
|
||||
memsetw(vconsoles[id]->buffer +
|
||||
vconsoles[id]->cursorPosition, 0x0720, vconsoles[id]->width - cursorX);
|
||||
memsetw(vconsoles[id]->buffer + vconsoles[id]->cursorPosition, 0x0720, vconsoles[id]->width - cursorX);
|
||||
vconsole_draw(id);
|
||||
break;
|
||||
case 's': // push cursor position on an internal stack
|
||||
@@ -156,9 +155,9 @@ vconsoles[id]->cursorPosition, 0x0720, vconsoles[id]->width - cursorX);
|
||||
}
|
||||
break;
|
||||
case 'm': // set text attributes
|
||||
for (; vconsoles[id]->escapePosition; vconsoles[id]->escapePosition--)
|
||||
for (evalEscapePosition = 0; evalEscapePosition <= vconsoles[id]->escapePosition; evalEscapePosition++)
|
||||
{
|
||||
switch (vconsoles[id]->escapeValue[vconsoles[id]->escapePosition])
|
||||
switch (vconsoles[id]->escapeValue[evalEscapePosition])
|
||||
{
|
||||
case 0:
|
||||
vconsoles[id]->foreground = 0x07;
|
||||
@@ -170,17 +169,17 @@ vconsoles[id]->cursorPosition, 0x0720, vconsoles[id]->width - cursorX);
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
case 1:
|
||||
vconsoles[id]->bold = 1;
|
||||
vconsole_update_attribute(id);
|
||||
vconsoles[id]->bold = 1;
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
case 5:
|
||||
vconsoles[id]->blink = 1;
|
||||
vconsole_update_attribute(id);
|
||||
vconsoles[id]->blink = 1;
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
case 7:
|
||||
vconsoles[id]->reverse = 1;
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
vconsoles[id]->reverse = 1;
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
case 30:
|
||||
case 31:
|
||||
case 32:
|
||||
@@ -189,9 +188,9 @@ vconsoles[id]->cursorPosition, 0x0720, vconsoles[id]->width - cursorX);
|
||||
case 35:
|
||||
case 36:
|
||||
case 37:
|
||||
vconsoles[id]->foreground = vconsoles[id]->escapeValue[vconsoles[id]->escapePosition] - 30;
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
vconsoles[id]->foreground = ansi2vgaAttr[vconsoles[id]->escapeValue[evalEscapePosition] - 30];
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
case 40:
|
||||
case 41:
|
||||
case 42:
|
||||
@@ -200,11 +199,12 @@ vconsoles[id]->cursorPosition, 0x0720, vconsoles[id]->width - cursorX);
|
||||
case 45:
|
||||
case 46:
|
||||
case 47:
|
||||
vconsoles[id]->background = vconsoles[id]->escapeValue[vconsoles[id]->escapePosition] - 30;
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
vconsoles[id]->background = ansi2vgaAttr[vconsoles[id]->escapeValue[evalEscapePosition] - 40];
|
||||
vconsole_update_attribute(id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
vconsoles[id]->escapePosition = 0;
|
||||
break;
|
||||
}
|
||||
memsetd(vconsoles[id]->escapeValue, 0, 8);
|
||||
@@ -238,27 +238,21 @@ void vconsole_put_char(minor_t id, int c)
|
||||
{
|
||||
case '\t':
|
||||
if (vconsoles[id]->cursorPosition % 8)
|
||||
vconsoles[id]->cursorPosition += (8 - (vconsoles[id]->cursorPosition % 8));
|
||||
vconsole_update_cursor(id, vconsoles[id]->cursorPosition + (8 - (vconsoles[id]->cursorPosition % 8)));
|
||||
else
|
||||
vconsoles[id]->cursorPosition += 8;
|
||||
if (id == activeConsole)
|
||||
console_update_cursor(id, vconsoles[id]->cursorPosition);
|
||||
vconsole_update_cursor(id, vconsoles[id]->cursorPosition + 8);
|
||||
break;
|
||||
case '\n':
|
||||
if (vconsoles[id]->cursorPosition % (vconsoles[id]->width))
|
||||
vconsoles[id]->cursorPosition += (vconsoles[id]->width - (vconsoles[id]->cursorPosition % vconsoles[id]->width));
|
||||
vconsole_update_cursor(id, vconsoles[id]->cursorPosition + (vconsoles[id]->width - (vconsoles[id]->cursorPosition % vconsoles[id]->width)));
|
||||
else
|
||||
vconsoles[id]->cursorPosition += vconsoles[id]->width;
|
||||
if (id == activeConsole)
|
||||
console_update_cursor(id, vconsoles[id]->cursorPosition);
|
||||
vconsole_update_cursor(id, vconsoles[id]->cursorPosition + vconsoles[id]->width);
|
||||
break;
|
||||
default:
|
||||
vconsoles[id]->buffer[vconsoles[id]->cursorPosition << 1] = c | (vconsoles[id]->attribute << 8);
|
||||
vconsoles[id]->buffer[vconsoles[id]->cursorPosition] = c | (vconsoles[id]->attribute << 8);
|
||||
if (id == activeConsole)
|
||||
console_put_char(id, c | (vconsoles[id]->attribute << 8), vconsoles[id]->cursorPosition);
|
||||
vconsoles[id]->cursorPosition++;
|
||||
if (id == activeConsole)
|
||||
console_update_cursor(id, vconsoles[id]->cursorPosition);
|
||||
vconsole_update_cursor(id, vconsoles[id]->cursorPosition + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,6 +260,17 @@ void vconsole_put_char(minor_t id, int c)
|
||||
void vconsole_update_cursor(minor_t id, u16_t position)
|
||||
{
|
||||
vconsoles[id]->cursorPosition = position;
|
||||
if (position >= (vconsoles[id]->width * vconsoles[id]->height)) // time to scroll console
|
||||
{
|
||||
vconsoles[id]->cursorPosition -= vconsoles[id]->width;
|
||||
memcpyw(vconsoles[id]->buffer, vconsoles[id]->buffer + vconsoles[id]->width, vconsoles[id]->width * (vconsoles[id]->height - 1));
|
||||
memsetw(vconsoles[id]->buffer + (vconsoles[id]->width * (vconsoles[id]->height - 1)), 0x0720, vconsoles[id]->width);
|
||||
if (activeConsole == id)
|
||||
{
|
||||
vconsole_draw(id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (activeConsole == id)
|
||||
console_update_cursor(id, position);
|
||||
}
|
||||
@@ -275,18 +280,18 @@ void vconsole_update_attribute(minor_t id)
|
||||
if (vconsoles[id]->reverse)
|
||||
{
|
||||
vconsoles[id]->attribute =
|
||||
vconsoles[id]->blink << 7 |
|
||||
vconsoles[id]->foreground << 4 |
|
||||
vconsoles[id]->bold << 3 |
|
||||
vconsoles[id]->background;
|
||||
vconsoles[id]->blink << 7 |
|
||||
vconsoles[id]->foreground << 4 |
|
||||
vconsoles[id]->bold << 3 |
|
||||
vconsoles[id]->background;
|
||||
}
|
||||
else
|
||||
{
|
||||
vconsoles[id]->attribute =
|
||||
vconsoles[id]->blink << 7 |
|
||||
vconsoles[id]->background << 4 |
|
||||
vconsoles[id]->bold << 3 |
|
||||
vconsoles[id]->foreground;
|
||||
vconsoles[id]->blink << 7 |
|
||||
vconsoles[id]->background << 4 |
|
||||
vconsoles[id]->bold << 3 |
|
||||
vconsoles[id]->foreground;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user