\r processing.
[reactos.git] / reactos / drivers / dd / blue / blue.c
index 875a23d..f951a09 100644 (file)
@@ -1,4 +1,4 @@
-/* $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
@@ -68,7 +68,7 @@ typedef struct _DEVICE_EXTENSION
 /* FUNCTIONS **************************************************************/
 
 NTSTATUS
-ScrCreate (PDEVICE_OBJECT DeviceObject, PIRP Irp)
+STDCALL ScrCreate (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
     PDEVICE_EXTENSION DeviceExtension;
     PHYSICAL_ADDRESS BaseAddress;
@@ -120,6 +120,9 @@ ScrCreate (PDEVICE_OBJECT DeviceObject, PIRP Irp)
     /* 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,
@@ -154,7 +157,7 @@ ScrCreate (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
 
 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;
@@ -208,6 +211,7 @@ ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
                   break;
                   
                case '\r':
+                  cursorx = 0;
                   break;
                   
                case '\t':
@@ -278,14 +282,12 @@ ScrWrite (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
 
 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:
@@ -459,24 +461,21 @@ ScrIoControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
         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;
@@ -539,24 +538,23 @@ ScrIoControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
         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;
@@ -574,7 +572,7 @@ ScrIoControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
 
 NTSTATUS
-ScrDispatch (PDEVICE_OBJECT DeviceObject, PIRP Irp)
+STDCALL ScrDispatch (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
     PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation(Irp);
     NTSTATUS Status;