Logo Search packages:      
Sourcecode: scummvm version File versions  Download package

input_pn.cpp

/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/tags/release-1-1-0/engines/agos/input_pn.cpp $
 * $Id: input_pn.cpp 43304 2009-08-12 02:24:03Z Kirben $
 *
 */



#include "agos/agos.h"
#include "agos/intern.h"

namespace AGOS {

void AGOSEngine_PN::clearInputLine() {
      _inputting = false;
      _inputReady = false;
      clearWindow(_windowArray[2]);
}

void AGOSEngine_PN::handleKeyboard() {
      if (!_inputReady)
            return;

      if (_hitCalled != 0) {
            mouseHit();
      }

      int16 chr = -1;
      if (_mouseString) {
            const char *strPtr = _mouseString;
            while (*strPtr != 0 && *strPtr != 13)
                  addChar(*strPtr++);
            _mouseString = 0;

            chr = *strPtr;
            if (chr == 13) {
                  addChar(13);
            }
      }
      if (_mouseString1 && chr != 13) {
            const char *strPtr = _mouseString1;
            while (*strPtr != 13)
                  addChar(*strPtr++);
            _mouseString1 = 0;

            chr = *strPtr;
            if (chr == 13) {
                  addChar(13);
            }
      }
      if (chr == -1) {
            if (_keyPressed.keycode == Common::KEYCODE_BACKSPACE || _keyPressed.keycode == Common::KEYCODE_RETURN) {
                  chr = _keyPressed.keycode;
                  addChar(chr);
            } else if (!(_videoLockOut & 0x10)) {
                  chr = _keyPressed.ascii;
                  if (chr >= 32)
                        addChar(chr);
            }
      }

      if (chr == 13) {
            _mouseString = 0;
            _mouseString1 = 0;
            _mousePrintFG = 0;
            _inputReady = false;
      }

      _keyPressed.reset();
}

void AGOSEngine_PN::interact(char *buffer, uint8 size) {
      if (!_inputting) {
            memset(_keyboardBuffer, 0, sizeof(_keyboardBuffer));
            _intputCounter = 0;
            _inputMax = size;
            _inputWindow = _windowArray[_curWindow];
            windowPutChar(_inputWindow, 128);
            windowPutChar(_inputWindow, 8);
            _inputting = true;
            _inputReady = true;
      }

      while (!shouldQuit() && _inputReady) {
            if (!_noScanFlag && _scanFlag) {
                  buffer[0] = 1;
                  buffer[1] = 0;
                  _scanFlag = 0;
                  break;
            }
            delay(1);
      }

      if (!_inputReady) {
            memcpy(buffer, _keyboardBuffer, size);
            _inputting = false;
      }
}

void AGOSEngine_PN::addChar(uint8 chr) {
      if (chr == 13) {
            _keyboardBuffer[_intputCounter++] = chr;
            windowPutChar(_inputWindow, 13);
      } else if (chr == 8 && _intputCounter) {
            clearCursor(_inputWindow);
            windowPutChar(_inputWindow, 8);
            windowPutChar(_inputWindow, 128);
            windowPutChar(_inputWindow, 8);

            _keyboardBuffer[--_intputCounter] = 0;
      } else if (chr >= 32 && _intputCounter < _inputMax) {
            _keyboardBuffer[_intputCounter++] = chr;

            clearCursor(_inputWindow);
            windowPutChar(_inputWindow, chr);
            windowPutChar(_inputWindow, 128);
            windowPutChar(_inputWindow, 8);
      }
}

void AGOSEngine_PN::clearCursor(WindowBlock *window) {
      byte oldTextColor = window->textColor;

      window->textColor = window->fillColor;
      windowPutChar(window, 128);
      window->textColor = oldTextColor;

      windowPutChar(window, 8);
}

bool AGOSEngine_PN::processSpecialKeys() {
      if (shouldQuit())
            _exitCutscene = true;

      switch (_keyPressed.keycode) {
      case Common::KEYCODE_ESCAPE:
            _exitCutscene = true;
            break;
      case Common::KEYCODE_PAUSE:
            pause();
            break;
      default:
            break;
      }

      _keyPressed.reset();
      return false;
}

} // End of namespace AGOS

Generated by  Doxygen 1.6.0   Back to index