Ignore:
Timestamp:
Dec 30, 2012, 12:02:33 AM (8 years ago)
Author:
dmik
Message:

kernel32: Properly handle backspace and tab characters in console input/output mode.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/conbuffer.cpp

    r21916 r22052  
    309309
    310310        case 8: /* Backspace */
    311           // not correct if deleting expanded tab character
     311        {
     312          BOOL go = FALSE;
    312313          if (pConsoleBuffer->coordCursorPosition.X > 0)
     314          {
    313315            pConsoleBuffer->coordCursorPosition.X--;
    314 
    315           //@@@PH overwrite old character
    316           *(pConsoleBuffer->ppszLine[pConsoleBuffer->coordCursorPosition.Y] +
    317             pConsoleBuffer->coordCursorPosition.X * 2) = 0x20;
     316            go = TRUE;
     317          }
     318          else if (pConsoleBuffer->coordCursorPosition.Y > 0)
     319          {
     320            pConsoleBuffer->coordCursorPosition.Y--;
     321            pConsoleBuffer->coordCursorPosition.X = pConsoleBuffer->coordBufferSize.X - 1;
     322            go = TRUE;
     323          }
     324          if (go)
     325          {
     326            *(pConsoleBuffer->ppszLine[pConsoleBuffer->coordCursorPosition.Y] +
     327              pConsoleBuffer->coordCursorPosition.X * 2) = 0x20;
     328          }
    318329          break;
     330        }
    319331
    320332        case 9: /* Tab */
     
    328340              pConsoleBuffer->coordBufferSize.X)
    329341          {
    330             pConsoleBuffer->coordCursorPosition.X = 0;
     342            pConsoleBuffer->coordCursorPosition.X %= pConsoleBuffer->coordBufferSize.X;
    331343            pConsoleBuffer->coordCursorPosition.Y++;
    332344
Note: See TracChangeset for help on using the changeset viewer.