mirror of
https://github.com/reactos/reactos.git
synced 2024-07-11 07:05:12 +00:00
Was reporting geometry backwards, and needed to add a raw output mode
svn path=/trunk/; revision=1127
This commit is contained in:
parent
6ac6c50282
commit
4f6c860da3
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: blue.c,v 1.20 2000/02/24 13:16:40 ekohl Exp $
|
/* $Id: blue.c,v 1.21 2000/04/23 17:42:57 phreak Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -157,15 +157,15 @@ NTSTATUS
|
||||||
ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
{
|
{
|
||||||
PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation (Irp);
|
PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation (Irp);
|
||||||
PDEVICE_EXTENSION DeviceExtension;
|
PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
char *pch = Irp->UserBuffer;
|
char *pch = Irp->UserBuffer;
|
||||||
char *vidmem;
|
char *vidmem;
|
||||||
int i, j, offset;
|
int i, j, offset;
|
||||||
int cursorx, cursory;
|
int cursorx, cursory;
|
||||||
int rows, columns;
|
int rows, columns;
|
||||||
|
int processed = DeviceExtension->Mode & ENABLE_PROCESSED_OUTPUT;
|
||||||
|
|
||||||
DeviceExtension = DeviceObject->DeviceExtension;
|
|
||||||
vidmem = DeviceExtension->VideoMemory;
|
vidmem = DeviceExtension->VideoMemory;
|
||||||
rows = DeviceExtension->Rows;
|
rows = DeviceExtension->Rows;
|
||||||
columns = DeviceExtension->Columns;
|
columns = DeviceExtension->Columns;
|
||||||
|
@ -178,83 +178,90 @@ ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
cursory = offset / columns;
|
cursory = offset / columns;
|
||||||
cursorx = offset % columns;
|
cursorx = offset % columns;
|
||||||
|
|
||||||
for (i = 0; i < stk->Parameters.Write.Length; i++, pch++)
|
if( processed == 0 )
|
||||||
{
|
{
|
||||||
switch (*pch)
|
/* raw output mode */
|
||||||
{
|
memcpy( &vidmem[(cursorx * 2) + (cursory * columns * 2)], pch, stk->Parameters.Write.Length );
|
||||||
case '\b':
|
offset += (stk->Parameters.Write.Length / 2);
|
||||||
if (cursorx > 0)
|
}
|
||||||
{
|
else {
|
||||||
cursorx--;
|
for (i = 0; i < stk->Parameters.Write.Length; i++, pch++)
|
||||||
}
|
{
|
||||||
else if (cursory > 0)
|
switch (*pch)
|
||||||
{
|
{
|
||||||
cursorx = columns - 1;
|
case '\b':
|
||||||
cursory--;
|
if (cursorx > 0)
|
||||||
}
|
{
|
||||||
break;
|
cursorx--;
|
||||||
|
}
|
||||||
|
else if (cursory > 0)
|
||||||
|
{
|
||||||
|
cursorx = columns - 1;
|
||||||
|
cursory--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\n':
|
||||||
|
cursory++;
|
||||||
|
cursorx = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\r':
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\t':
|
||||||
|
offset = TAB_WIDTH - (cursorx % TAB_WIDTH);
|
||||||
|
for (j = 0; j < offset; j++)
|
||||||
|
{
|
||||||
|
vidmem[(cursorx * 2) + (cursory * columns * 2)] = ' ';
|
||||||
|
cursorx++;
|
||||||
|
|
||||||
|
if (cursorx >= columns)
|
||||||
|
{
|
||||||
|
cursory++;
|
||||||
|
cursorx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
vidmem[(cursorx * 2) + (cursory * columns * 2)] = *pch;
|
||||||
|
vidmem[(cursorx * 2) + (cursory * columns * 2) + 1] = (char) DeviceExtension->CharAttribute;
|
||||||
|
cursorx++;
|
||||||
|
if (cursorx >= columns)
|
||||||
|
{
|
||||||
|
cursory++;
|
||||||
|
cursorx = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cursory >= rows)
|
||||||
|
{
|
||||||
|
unsigned short *LinePtr;
|
||||||
|
|
||||||
case '\n':
|
memcpy (vidmem,
|
||||||
cursory++;
|
&vidmem[columns * 2],
|
||||||
cursorx = 0;
|
columns * (rows - 1) * 2);
|
||||||
break;
|
|
||||||
|
|
||||||
case '\r':
|
LinePtr = (unsigned short *) &vidmem[columns * (rows - 1) * 2];
|
||||||
break;
|
|
||||||
|
|
||||||
case '\t':
|
for (j = 0; j < columns; j++)
|
||||||
offset = TAB_WIDTH - (cursorx % TAB_WIDTH);
|
{
|
||||||
for (j = 0; j < offset; j++)
|
LinePtr[j] = DeviceExtension->CharAttribute << 8;
|
||||||
{
|
}
|
||||||
vidmem[(cursorx * 2) + (cursory * columns * 2)] = ' ';
|
cursory = rows - 1;
|
||||||
cursorx++;
|
for (j = 0; j < columns; j++)
|
||||||
|
{
|
||||||
if (cursorx >= columns)
|
vidmem[(j * 2) + (cursory * columns * 2)] = ' ';
|
||||||
{
|
vidmem[(j * 2) + (cursory * columns * 2) + 1] = (char)DeviceExtension->CharAttribute;
|
||||||
cursory++;
|
}
|
||||||
cursorx = 0;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
/* Set the cursor position */
|
||||||
|
offset = (cursory * columns) + cursorx;
|
||||||
default:
|
|
||||||
vidmem[(cursorx * 2) + (cursory * columns * 2)] = *pch;
|
|
||||||
vidmem[(cursorx * 2) + (cursory * columns * 2) + 1] = (char) DeviceExtension->CharAttribute;
|
|
||||||
cursorx++;
|
|
||||||
if (cursorx >= columns)
|
|
||||||
{
|
|
||||||
cursory++;
|
|
||||||
cursorx = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cursory >= rows)
|
|
||||||
{
|
|
||||||
unsigned short *LinePtr;
|
|
||||||
|
|
||||||
memcpy (vidmem,
|
|
||||||
&vidmem[columns * 2],
|
|
||||||
columns * (rows - 1) * 2);
|
|
||||||
|
|
||||||
LinePtr = (unsigned short *) &vidmem[columns * (rows - 1) * 2];
|
|
||||||
|
|
||||||
for (j = 0; j < columns; j++)
|
|
||||||
{
|
|
||||||
LinePtr[j] = DeviceExtension->CharAttribute << 8;
|
|
||||||
}
|
|
||||||
cursory = rows - 1;
|
|
||||||
for (j = 0; j < columns; j++)
|
|
||||||
{
|
|
||||||
vidmem[(j * 2) + (cursory * columns * 2)] = ' ';
|
|
||||||
vidmem[(j * 2) + (cursory * columns * 2) + 1] = (char)DeviceExtension->CharAttribute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the cursor position */
|
|
||||||
offset = (cursory * columns) + cursorx;
|
|
||||||
|
|
||||||
WRITE_PORT_UCHAR (CRTC_COMMAND, CRTC_CURSORPOSLO);
|
WRITE_PORT_UCHAR (CRTC_COMMAND, CRTC_CURSORPOSLO);
|
||||||
WRITE_PORT_UCHAR (CRTC_DATA, offset);
|
WRITE_PORT_UCHAR (CRTC_DATA, offset);
|
||||||
WRITE_PORT_UCHAR (CRTC_COMMAND, CRTC_CURSORPOSHI);
|
WRITE_PORT_UCHAR (CRTC_COMMAND, CRTC_CURSORPOSHI);
|
||||||
|
@ -296,8 +303,8 @@ ScrIoControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
offset += (READ_PORT_UCHAR (CRTC_DATA) << 8);
|
offset += (READ_PORT_UCHAR (CRTC_DATA) << 8);
|
||||||
__asm__("sti\n\t");
|
__asm__("sti\n\t");
|
||||||
|
|
||||||
pcsbi->dwSize.X = rows;
|
pcsbi->dwSize.X = columns;
|
||||||
pcsbi->dwSize.Y = columns;
|
pcsbi->dwSize.Y = rows;
|
||||||
|
|
||||||
pcsbi->dwCursorPosition.X = (SHORT)(offset % columns);
|
pcsbi->dwCursorPosition.X = (SHORT)(offset % columns);
|
||||||
pcsbi->dwCursorPosition.Y = (SHORT)(offset / columns);
|
pcsbi->dwCursorPosition.Y = (SHORT)(offset / columns);
|
||||||
|
|
Loading…
Reference in a new issue