File Browser

Problem 1

int fgetpos(FILE *stream)
{
    return (stream->current_byte - stream->first_byte);
}

Problem 2

bool fsetpos(FILE *stream, int offset)
{
    if (offset >= stream->size || offset < 0)
    {
        return false;
    }
    stream->current_byte = stream->first_byte + offset;
    return true;
}

Problem 3

bool fwrite(BYTE *buffer, int size, FILE *stream) {

    if (buffer == NULL)
    {
        return false;
    }
    if (stream->read_only)
    {
        return false;
    }

    int start = stream->current_byte;

    for (int i = 0; i < size; i++)
    {
        *(stream->current_byte) = buffer[i];
        stream->current_byte++;
    }

    if ((start + size) > stream->size)
        stream->size = start + size;

    return true;
}

Problem 4

bool feof(FILE *stream)
{
    return (stream->current_byte - stream->first_byte) >= stream->size;
}