warzone2100/lib/framework/lexer_input.c

43 lines
829 B
C

#include "frame.h"
#include "lexer_input.h"
int lexer_input(lexerinput_t* input, char* buf, size_t max_size, int nullvalue)
{
switch (input->type)
{
case LEXINPUT_PHYSFS:
if (PHYSFS_eof(input->input.physfsfile))
{
buf[0] = EOF;
return nullvalue;
}
else
{
int result = PHYSFS_read(input->input.physfsfile, buf, 1, max_size);
if (result == -1)
{
buf[0] = EOF;
return nullvalue;
}
return result;
}
break;
case LEXINPUT_BUFFER:
if (input->input.buffer.begin != input->input.buffer.end)
{
buf[0] = *input->input.buffer.begin++;
return 1;
}
else
{
buf[0] = EOF;
return nullvalue;
}
break;
}
ASSERT(!"Invalid input type!", "Invalid input type used for lexer (numeric value: %u)", (unsigned int)input->type);
return nullvalue;
}