bool Player::HUMAN(dodBYTE c) { int res; dodBYTE A, B; // Check if we are displaying the map if (HEARTF == 0) { game.INIVU(); viewer.PROMPT(); } if (c == parser.I_CR) { carriage_return: viewer.OUTCHR(parser.I_SP); parser.LINBUF[parser.LINPTR] = Parser::I_NULL; parser.LINBUF[parser.LINPTR+1] = Parser::I_NULL; parser.LINPTR = 0; if (!PreTranslateCommand(&parser.LINBUF[0])) { game.AUTFLG = true; game.demoRestart = true; return false; } // dispatch to proper routine res = parser.PARSER(&parser.CMDTAB[0], A, B, true); if (res == 1) { // dispatch switch (A) { case Parser::CMD_ATTACK: PATTK(); break; case Parser::CMD_CLIMB: PCLIMB(); break; case Parser::CMD_DROP: PDROP(); break; case Parser::CMD_EXAMINE: PEXAM(); break; case Parser::CMD_GET: PGET(); break; case Parser::CMD_INCANT: PINCAN(); break; case Parser::CMD_LOOK: PLOOK(); break; case Parser::CMD_MOVE: PMOVE(); break; case Parser::CMD_PULL: PPULL(); break; case Parser::CMD_REVEAL: PREVEA(); break; case Parser::CMD_STOW: PSTOW(); break; case Parser::CMD_TURN: PTURN(); break; case Parser::CMD_USE: PUSE(); break; case Parser::CMD_ZLOAD: PZLOAD(); break; case Parser::CMD_ZSAVE: PZSAVE(); break; } } if (res == -1) { parser.CMDERR(); } if ((HEARTF != 0) && (FAINT == 0)) { viewer.PROMPT(); } parser.LINPTR = 0; return true; } if (c == parser.I_BS) { if (parser.LINPTR == 0) { return true; } --parser.LINPTR; viewer.OUTSTR(parser.M_ERAS); return true; } // Buffer normal characters viewer.OUTCHR(c); parser.LINBUF[parser.LINPTR] = c; ++parser.LINPTR; viewer.OUTSTR(parser.M_CURS); if (parser.LINPTR >= 32) { goto carriage_return; } return true; }