static void do_something_server(char *wherenewline) { int n; *wherenewline = '\0'; if (match_arg(buf, "loc", &n)) { loc(n); } else if (match_arg(buf, "here", &n)) { here(n); } else if (match_arg(buf, "arr", &n)) { arrived(n); } else if (match_arg(buf, "dep", &n)) { departed(n); } else if (match_arg(buf, "poked", &n)) { pokedby(n); } else if (match_arg(buf, "said", &n)){ said(n); }else if (strcmp(buf, "ib") == 0) { saw_inventory_something = 0; printf("%s\n", lang_inv_heading); } else if (match_arg(buf, "i", &n)) { saw_inventory_something = 1; printf(" %s (#%d)\n", lang_thing[n], n); } else if (strcmp(buf, "ie") == 0) { if (!saw_inventory_something) printf("%s\n", lang_inv_nothing); } else if (strcmp(buf, "ok") == 0) { printf("%s\n", lang_ok); } else if (strcmp(buf, "ng") == 0) { printf("%s\n", lang_get_nosuch); } else if (strcmp(buf, "nd") == 0) { printf("%s\n", lang_drop_nosuch); } else if (strcmp(buf, "np") == 0) { printf("%s\n", lang_get_nosuch); } else if (match_arg(buf, "name", &n)) { char *p; if ((p = strchr(buf, ' ')) == NULL || (p = strchr(p + 1, ' ')) == NULL) fprintf(stderr, "error: malformed 'name' from server\n"); else storename(n, p + 1); } else if (match_arg(buf, "quit", &n)) { removename(n); } else if (strncmp(buf, "error ", 6) == 0) { printf("error from server: %s\n", buf + 6); } else { fprintf(stderr, "unexpected data from server: %s\n", buf); } n = wherenewline - buf; n++; if (bytes_in_buf > n && (buf[n] == '\r' || buf[n] == '\n')) n++; bytes_in_buf -= n; memmove(buf, buf + n, bytes_in_buf); }
reg_t kSaid(EngineState *s, int argc, reg_t *argv) { reg_t heap_said_block = argv[0]; byte *said_block; int new_lastmatch; Vocabulary *voc = g_sci->getVocabulary(); #ifdef DEBUG_PARSER const int debug_parser = 1; #else const int debug_parser = 0; #endif if (!heap_said_block.getSegment()) return NULL_REG; said_block = (byte *)s->_segMan->derefBulkPtr(heap_said_block, 0); if (!said_block) { warning("Said on non-string, pointer %04x:%04x", PRINT_REG(heap_said_block)); return NULL_REG; } #ifdef DEBUG_PARSER debugN("Said block: "); g_sci->getVocabulary()->debugDecipherSaidBlock(said_block); #endif if (voc->parser_event.isNull() || (readSelectorValue(s->_segMan, voc->parser_event, SELECTOR(claimed)))) { return NULL_REG; } new_lastmatch = said(said_block, debug_parser); if (new_lastmatch != SAID_NO_MATCH) { /* Build and possibly display a parse tree */ #ifdef DEBUG_PARSER debugN("kSaid: Match.\n"); #endif s->r_acc = make_reg(0, 1); if (new_lastmatch != SAID_PARTIAL_MATCH) writeSelectorValue(s->_segMan, voc->parser_event, SELECTOR(claimed), 1); } else { return NULL_REG; } return s->r_acc; }
int main(int argc, char* argv[]) { std::string said(""); std::cout << "PocketVoice test\n"; PocketVoice* recognizer = new PocketVoice; recognizer->loadConfigCommands("commands.json"); if ( recognizer->init("", "commands.gram") > 0 ) fatal("[main()] initiating recognizer"); recognizer->calibrateListener(); said = recognizer->recognize(); if ( recognizer->synthetize(said) > 0 ) fatal("[main()] synthetizing voice"); recognizer->execute(said); delete recognizer; return 0; }
reg_t GfxMenu::kernelSelect(reg_t eventObject, bool pauseSound) { int16 eventType = readSelectorValue(_segMan, eventObject, SELECTOR(type)); int16 keyPress, keyModifier; GuiMenuItemList::iterator itemIterator = _itemList.begin(); GuiMenuItemList::iterator itemEnd = _itemList.end(); GuiMenuItemEntry *itemEntry = NULL; bool forceClaimed = false; switch (eventType) { case SCI_EVENT_KEYBOARD: keyPress = readSelectorValue(_segMan, eventObject, SELECTOR(message)); keyModifier = readSelectorValue(_segMan, eventObject, SELECTOR(modifiers)); // If tab got pressed, handle it here as if it was Ctrl-I - at least // sci0 also did it that way if (keyPress == SCI_KEY_TAB) { keyModifier = SCI_KEYMOD_CTRL; keyPress = 'i'; } switch (keyPress) { case 0: break; case SCI_KEY_ESC: interactiveStart(pauseSound); itemEntry = interactiveWithKeyboard(); interactiveEnd(pauseSound); forceClaimed = true; break; default: while (itemIterator != itemEnd) { itemEntry = *itemIterator; if (itemEntry->keyPress == keyPress && itemEntry->keyModifier == keyModifier && itemEntry->enabled) break; itemIterator++; } if (itemIterator == itemEnd) itemEntry = NULL; } break; case SCI_EVENT_SAID: while (itemIterator != itemEnd) { itemEntry = *itemIterator; if (!itemEntry->saidVmPtr.isNull()) { byte *saidSpec = _segMan->derefBulkPtr(itemEntry->saidVmPtr, 0); if (!saidSpec) { warning("Could not dereference saidSpec"); continue; } if (said(saidSpec, 0) != SAID_NO_MATCH) break; } itemIterator++; } if (itemIterator == itemEnd) itemEntry = NULL; break; case SCI_EVENT_MOUSE_PRESS: { Common::Point mousePosition; mousePosition.x = readSelectorValue(_segMan, eventObject, SELECTOR(x)); mousePosition.y = readSelectorValue(_segMan, eventObject, SELECTOR(y)); if (mousePosition.y < 10) { interactiveStart(pauseSound); itemEntry = interactiveWithMouse(); interactiveEnd(pauseSound); forceClaimed = true; } } break; } if (!_menuSaveHandle.isNull()) { _paint16->bitsRestore(_menuSaveHandle); // Display line inbetween menubar and actual menu Common::Rect menuLine = _menuRect; menuLine.bottom = menuLine.top + 1; _paint16->bitsShow(menuLine); _paint16->kernelGraphRedrawBox(_menuRect); _menuSaveHandle = NULL_REG; } if (!_barSaveHandle.isNull()) { _paint16->bitsRestore(_barSaveHandle); _paint16->bitsShow(_ports->_menuRect); _barSaveHandle = NULL_REG; } if (_oldPort) { _ports->setPort(_oldPort); _oldPort = NULL; } if ((itemEntry) || (forceClaimed)) writeSelector(_segMan, eventObject, SELECTOR(claimed), make_reg(0, 1)); if (itemEntry) return make_reg(0, (itemEntry->menuId << 8) | (itemEntry->id)); return NULL_REG; }