void test_string_consume() { char* input = "this is 6"; char* p = input; char token[12]; INT read = 0; read = RtStrConsumeToken(&p, token, sizeof(token)); T_ASSERT(read == 4); T_ASSERT(token[0] == 't'); T_ASSERT(token[1] == 'h'); T_ASSERT(token[2] == 'i'); T_ASSERT(token[3] == 's'); T_ASSERT(token[4] == '\0'); read = RtStrConsumeToken(&p, token, sizeof(token)); T_ASSERT(read == 2); T_ASSERT(token[0] == 'i'); T_ASSERT(token[1] == 's'); T_ASSERT(token[2] == '\0'); read = RtStrConsumeToken(&p, token, sizeof(token)); T_ASSERT(read == 1); T_ASSERT(token[0] == '6'); T_ASSERT(token[1] == '\0'); }
static VOID InputParserpParseCommand ( IN STRING buffer, IN INT bufferLength ) { INT arg1 = 0; CHAR arg1Buffer[12]; arg1Buffer[11] = '\0'; INT arg2 = 0; CHAR arg2Buffer[12]; arg2Buffer[11] = '\0'; CHAR token[12]; INT read = RtStrConsumeToken(&buffer, token, sizeof(token)); if (read == 0) { return; } if (RtStrEqual(token, "tr")) { read = RtStrConsumeToken(&buffer, arg1Buffer, sizeof(arg1Buffer)); if (read && RT_SUCCESS(RtAtoi(arg1Buffer, &arg1))) { read = RtStrConsumeToken(&buffer, arg2Buffer, sizeof(arg2Buffer)); if (read && RT_SUCCESS(RtAtoi(arg2Buffer, &arg2))) { if (RtStrIsWhitespace(buffer)) { TrainSetSpeed(arg1, arg2); } } } } else if (RtStrEqual(token, "sw")) { read = RtStrConsumeToken(&buffer, arg1Buffer, sizeof(arg1Buffer)); if (read && RT_SUCCESS(RtAtoi(arg1Buffer, &arg1))) { SWITCH_DIRECTION direction = SwitchCurved; read = RtStrConsumeToken(&buffer, arg2Buffer, sizeof(arg2Buffer)); if (read == 1 && InputParserpGetSwitchDirection(arg2Buffer[0], &direction)) { if (RtStrIsWhitespace(buffer)) { SwitchSetDirection(arg1, direction); } } } } else if (RtStrEqual(token, "rv")) { read = RtStrConsumeToken(&buffer, arg1Buffer, sizeof(arg1Buffer)); if (read && RT_SUCCESS(RtAtoi(arg1Buffer, &arg1))) { if (RtStrIsWhitespace(buffer)) { TrainReverse(arg1); } } } else if(RtStrEqual(token, "rt")) { read = RtStrConsumeToken(&buffer, arg1Buffer, sizeof(arg1Buffer)); if(read && RT_SUCCESS(RtAtoi(arg1Buffer, &arg1))) { if(RtStrIsWhitespace(buffer)) { VERIFY(SUCCESSFUL(TrainDestinationForever(arg1))); } } } else if (RtStrEqual(token, "go")) { read = RtStrConsumeToken(&buffer, arg1Buffer, sizeof(arg1Buffer)); if (read && RT_SUCCESS(RtAtoi(arg1Buffer, &arg1))) { read = RtStrConsumeToken(&buffer, arg2Buffer, sizeof(arg2Buffer)); if (read && RT_SUCCESS(RtAtoi(&arg2Buffer[1], &arg2))) { if(RtStrIsWhitespace(buffer)) { SENSOR sensor = { arg2Buffer[0], arg2 }; LOCATION location; location.node = TrackFindSensor(&sensor); location.distancePastNode = 0; VERIFY(SUCCESSFUL(TrainDestinationOnce(arg1, &location))); } } } } else if (RtStrEqual(token, "q")) { if (RtStrIsWhitespace(buffer)) { Shutdown(); } } }