コード例 #1
0
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');
}
コード例 #2
0
ファイル: input_parser.c プロジェクト: taylorstark/CS452
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();
        }
    }
}