text: #include <windows.h>
  #include <cassert>
  
  #include "../src/shared/DebugClient.cc"
  #include "TestUtil.cc"
  
  void dumpInfoToTrace() {
      CONSOLE_SCREEN_BUFFER_INFO info;
      assert(GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info));
      trace("win=(%d,%d,%d,%d)",
          (int)info.srWindow.Left,
          (int)info.srWindow.Top,
          (int)info.srWindow.Right,
          (int)info.srWindow.Bottom);
      trace("buf=(%d,%d)",
          (int)info.dwSize.X,
          (int)info.dwSize.Y);
      trace("cur=(%d,%d)",
          (int)info.dwCursorPosition.X,
          (int)info.dwCursorPosition.Y);
  }
  
  int main(int argc, char *argv[]) {
      if (argc == 1) {
          startChildProcess(L"CHILD");
          return 0;
      }
  
      setWindowPos(0, 0, 1, 1);
  
      if (false) {
          // Reducing the buffer height can move the window up.
          setBufferSize(80, 25);
          setWindowPos(0, 20, 80, 5);
          Sleep(2000);
          setBufferSize(80, 10);
      }
  
      if (false) {
          // Reducing the buffer height moves the window up and the buffer
          // contents up too.
          setBufferSize(80, 25);
          setWindowPos(0, 20, 80, 5);
          setCursorPos(0, 20);
          printf("TEST1\nTEST2\nTEST3\nTEST4\n");
          fflush(stdout);
          Sleep(2000);
          setBufferSize(80, 10);
      }
  
      if (false) {
          // Reducing the buffer width can move the window left.
          setBufferSize(80, 25);
          setWindowPos(40, 0, 40, 25);
          Sleep(2000);
          setBufferSize(60, 25);
      }
  
      if (false) {
          // Sometimes the buffer contents are shifted up; sometimes they're
          // shifted down.  It seems to depend on the cursor position?
  
          // setBufferSize(80, 25);
          // setWindowPos(0, 20, 80, 5);
          // setCursorPos(0, 20);
          // printf("TESTa\nTESTb\nTESTc\nTESTd\nTESTe");
          // fflush(stdout);
          // setCursorPos(0, 0);
          // printf("TEST1\nTEST2\nTEST3\nTEST4\nTEST5");
          // fflush(stdout);
          // setCursorPos(0, 24);
          // Sleep(5000);
          // setBufferSize(80, 24);
  
          setBufferSize(80, 20);
          setWindowPos(0, 10, 80, 10);
          setCursorPos(0, 18);
  
          printf("TEST1\nTEST2");
          fflush(stdout);
          setCursorPos(0, 18);
  
          Sleep(2000);
          setBufferSize(80, 18);
      }
  
      dumpInfoToTrace();
      Sleep(30000);
  
      return 0;
  }
  