-/* $Id: blue.c,v 1.26 2000/07/11 04:08:43 phreak Exp $
+/* $Id: blue.c,v 1.30 2001/07/30 11:49:38 ea Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
/* FUNCTIONS **************************************************************/
NTSTATUS
-ScrCreate (PDEVICE_OBJECT DeviceObject, PIRP Irp)
+STDCALL ScrCreate (PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PDEVICE_EXTENSION DeviceExtension;
PHYSICAL_ADDRESS BaseAddress;
/* calculate number of text rows */
DeviceExtension->Rows =
DeviceExtension->Rows / DeviceExtension->ScanLines;
+#ifdef BOCHS_30ROWS
+ DeviceExtension->Rows = 30;
+#endif
DPRINT ("%d Columns %d Rows %d Scanlines\n",
DeviceExtension->Columns,
NTSTATUS
-ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
+STDCALL ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation (Irp);
PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
break;
case '\r':
+ cursorx = 0;
break;
case '\t':
NTSTATUS
-ScrIoControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)
+STDCALL ScrIoControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation (Irp);
PDEVICE_EXTENSION DeviceExtension;
NTSTATUS Status;
-
DeviceExtension = DeviceObject->DeviceExtension;
-
switch (stk->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO:
case IOCTL_CONSOLE_WRITE_OUTPUT_ATTRIBUTE:
{
- POUTPUT_ATTRIBUTE Buf = (POUTPUT_ATTRIBUTE)Irp->AssociatedIrp.SystemBuffer;
- PWORD pAttr = (PWORD)MmGetSystemAddressForMdl(Irp->MdlAddress);
+ COORD *pCoord = (COORD *)MmGetSystemAddressForMdl(Irp->MdlAddress);
+ CHAR *pAttr = (CHAR *)(pCoord + 1);
char *vidmem;
int offset;
DWORD dwCount;
vidmem = DeviceExtension->VideoMemory;
- offset = (Buf->dwCoord.Y * DeviceExtension->Columns * 2) +
- (Buf->dwCoord.X * 2) + 1;
+ offset = (pCoord->Y * DeviceExtension->Columns * 2) +
+ (pCoord->X * 2) + 1;
- for (dwCount = 0; dwCount < stk->Parameters.Write.Length; dwCount++, pAttr++)
+ for (dwCount = 0; dwCount < (stk->Parameters.Write.Length - sizeof( COORD )); dwCount++, pAttr++)
{
- vidmem[offset + (dwCount * 2)] = (char) *pAttr;
+ vidmem[offset + (dwCount * 2)] = *pAttr;
}
-
- Buf->dwTransfered = dwCount;
-
- Irp->IoStatus.Information = sizeof(OUTPUT_ATTRIBUTE);
+ Irp->IoStatus.Information = 0;
Status = STATUS_SUCCESS;
}
break;
case IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER:
{
- POUTPUT_CHARACTER Buf = (POUTPUT_CHARACTER)Irp->AssociatedIrp.SystemBuffer;
- LPSTR pChar = (LPSTR)MmGetSystemAddressForMdl(Irp->MdlAddress);
+ COORD *pCoord;
+ LPSTR pChar;
char *vidmem;
int offset;
DWORD dwCount;
-
+ pCoord = (COORD *)MmGetSystemAddressForMdl(Irp->MdlAddress);
+ pChar = (CHAR *)(pCoord + 1);
vidmem = DeviceExtension->VideoMemory;
- offset = (Buf->dwCoord.Y * DeviceExtension->Columns * 2) +
- (Buf->dwCoord.X * 2) + 1;
+ offset = (pCoord->Y * DeviceExtension->Columns * 2) +
+ (pCoord->X * 2);
- for (dwCount = 0; dwCount < stk->Parameters.Write.Length; dwCount++, pChar++)
+ for (dwCount = 0; dwCount < (stk->Parameters.Write.Length - sizeof( COORD )); dwCount++, pChar++)
{
- vidmem[offset + (dwCount * 2)] = (char) *pChar;
+ vidmem[offset + (dwCount * 2)] = *pChar;
}
- Buf->dwTransfered = dwCount;
-
- Irp->IoStatus.Information = sizeof(OUTPUT_ATTRIBUTE);
+ Irp->IoStatus.Information = 0;
Status = STATUS_SUCCESS;
}
break;
NTSTATUS
-ScrDispatch (PDEVICE_OBJECT DeviceObject, PIRP Irp)
+STDCALL ScrDispatch (PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation(Irp);
NTSTATUS Status;