예제 #1
0
파일: client.c 프로젝트: martylee/CSC209
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);
}
예제 #2
0
파일: kparse.cpp 프로젝트: Cruel/scummvm
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;
}
예제 #3
0
파일: test.cpp 프로젝트: hackliff/domobot
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;
}
예제 #4
0
파일: menu.cpp 프로젝트: AlbanBedel/scummvm
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;
}