Ejemplo n.º 1
0
int     FSkipLogical( b_file *io )
//================================
{
    unsigned_32 tag;
    unsigned_32 save_tag;
    size_t      rc;

    for(;;) {
        rc = SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) );
        if( rc == READ_ERROR ) {
            if( io->stat != IO_EOF )
                return( -1 );
            // if an EOF occurs we've skipped the record
            IOOk( io );
            return( 0 );
        }
        if( (tag & 0x80000000) == 0 )
            break;
        save_tag = tag;
        tag &= 0x7fffffff;
        if( SysSeek( io, tag, SEEK_CUR ) < 0 )
            return( -1 );
        rc = SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) );
        if( rc == READ_ERROR )
            return( -1 );
        if( tag != save_tag ) {
            FSetErr( IO_BAD_RECORD, io );
            return( -1 );
        }
    }
    if( SysSeek( io, -(long)sizeof( unsigned_32 ), SEEK_CUR ) < 0 )
        return( -1 );
    return( 0 );
}
Ejemplo n.º 2
0
static size_t GetVariableRec( b_file *io, char *b, size_t len )
//=============================================================
// Get a record from a file with "variable" records.
{
    size_t      tag_len;
    unsigned_32 tag;
    unsigned_32 save_tag;

    if( SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) ) == READ_ERROR ) {
        return( 0 );
    }
    save_tag = tag;
    tag_len = tag & 0x7fffffff;
    if( tag_len > len ) {
        FSetTrunc( io );
        if( SysRead( io, b, len ) == READ_ERROR )
            return( 0 );
        if( SysSeek( io, (long)tag_len - (long)len, SEEK_CUR ) < 0 ) {
            FSetSysErr( io );
            return( 0 );
        }
    } else {
        if( SysRead( io, b, tag_len ) == READ_ERROR )
            return( 0 );
        len = tag_len;
    }
    if( SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) ) == READ_ERROR )
        return( 0 );
    if( tag != save_tag ) {
        FSetErr( IO_BAD_RECORD, io );
        return( 0 );
    }
    return( len );
}
Ejemplo n.º 3
0
signed_32       FGetVarRecLen( b_file *io )
//=========================================
{
    unsigned_32 tag;
    unsigned_32 save_tag;
    int         rc;
    long        pos;
    unsigned_32 size = 0;

    pos = FGetFilePos( io );
    for( ;; ) {
        rc = SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) );
        if( rc == READ_ERROR ) {
            if( io->stat != IO_EOF )
                return( -1 );
            // if an EOF occurs we've skipped the record
            IOOk( io );
            break;
        }
        save_tag = tag;
        if( !size ) {
            if( tag & 0x80000000 ) {
                FSetErr( IO_BAD_RECORD, io );
                return( -1 );
            }
        } else {
            if( tag & 0x80000000 ) {
                tag &= 0x7fffffff;
            } else {
                break;
            }
        }
        size += tag;
        if( SysSeek( io, tag, SEEK_CUR ) < 0 )
            return( -1 );
        rc = SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) );
        if( rc == READ_ERROR )
            return( -1 );
        if( tag != save_tag ) {
            FSetErr( IO_BAD_RECORD, io );
            return( -1 );
        }
    }
    if( SysSeek( io, pos, SEEK_SET ) < 0 )
        return( -1 );
    return( size );
}
Ejemplo n.º 4
0
static size_t GetFixedRec( b_file *io, char *b, size_t len )
//==========================================================
// Get a record from a file with "fixed" records.
{
    len = SysRead( io, b, len );
    if( len == READ_ERROR )
        return( 0 );
    return( len );
}
Ejemplo n.º 5
0
Archivo: file.c Proyecto: d33tah/whitix
ssize_t read(int fd,void* buf,size_t count)
{
	ssize_t ret = SysRead(fd, buf, count);
	
	if (ret < 0)
	{
		errno=-ret;
		return -1;
	}
	
	return ret;
}
Ejemplo n.º 6
0
int s_video_null_mouse_update (s_video_input_data_t *mouse)
{
	struct Ps2Packet pack;
	int dX, dY;

readAgain:
	if (SysRead(mouseFd, &pack, sizeof(struct Ps2Packet)) < 0)
		return -EIO;

	if (pack.flags.xOverflow || pack.flags.yOverflow)
		goto readAgain;

//	printf("pack.flags = %u, pack.dX = %d, dY = %d\n", *(unsigned char*)&pack.flags, pack.dX, pack.dY);
//	printf("xSign = %u, ySign = %u\n", pack.flags.xSign, pack.flags.ySign);

	dX=pack.dX;
	dY=pack.dY;

	if (pack.flags.xSign)
		dX=dX-255;

	if (pack.flags.ySign)
		dY=dY-255;

	mouseX+=dX;
	mouseY-=dY;

	mouseX=MAX(mouseX, 0);
	mouseY=MAX(mouseY, 0);

	mouseX=MIN(mouseX, 320);
	mouseY=MIN(mouseY, 200);

	mouse->mouse.x = mouseX;
	mouse->mouse.y = mouseY;
	mouse->mouse.buttons = 0;

//	printf("x = %u, y = %u\n", mouse->mouse.x, mouse->mouse.y);

	if (pack.flags.leftB)
		mouse->mouse.buttons |= MOUSE_LEFTBUTTON;

	if (pack.flags.middleB)
		mouse->mouse.buttons |= MOUSE_MIDDLEBUTTON;

	if (pack.flags.rightB)
		mouse->mouse.buttons |= MOUSE_RIGHTBUTTON;

	return 0;
}
Ejemplo n.º 7
0
Archivo: file.c Proyecto: d33tah/whitix
int FileGetChar(struct File* file)
{
	if (!file)
		return -1;
		
	unsigned char c;
		
	int bytesRead=SysRead(file->fd, &c, 1);
	
	if (!bytesRead)
		return -1;
	else if (bytesRead != 1)
		return -1;

	return (int)c;
}
Ejemplo n.º 8
0
int     FCheckLogical( b_file *io )
//=================================
{
    unsigned_32 tag;
    size_t      rc;

    rc = SysRead( io, (char *)(&tag), sizeof( unsigned_32 ) );
    if( rc == READ_ERROR ) {
        if( io->stat != IO_EOF )
            return( -1 );
        // if an EOF occurs we've skipped the record
        IOOk( io );
        return( 0 );
    }
    rc = 0;
    if( tag & 0x80000000 ) {
        rc = 1;
    }
    if( SysSeek( io, -(long)sizeof( unsigned_32 ), SEEK_CUR ) < 0 )
        return( -1 );
    return( rc );
}
Ejemplo n.º 9
0
void    FBackspace( b_file *io, int rec_size ) {
//==============================================

// Backspace a file.

    uint        ch;
    unsigned_32 offset;
    bool        start_of_logical_record;

    IOOk( io );
    if( io->attrs & REC_VARIABLE ) {
        for(;;) {
            offset = sizeof( unsigned_32 );
            if( SysSeek( io, -offset, SEEK_CUR ) < 0 ) return;
            if( SysRead( io, (char *)(&offset), sizeof( unsigned_32 ) ) ==
                READ_ERROR ) return;
            if( offset & 0x80000000 ) {
                offset &= 0x7fffffff;
                start_of_logical_record = FALSE;
            } else {
                start_of_logical_record = TRUE;
            }
            SysSeek( io, -( offset + 2 * sizeof( unsigned_32 ) ), SEEK_CUR );
            if( start_of_logical_record ) break;
        }
    } else if( io->attrs & REC_TEXT ) {
        // skip first record separator
        if( GetPrevChar( io ) == NO_CHAR ) return;
        for(;;) {
            ch = GetPrevChar( io );
            if( ch == NO_CHAR ) return;
            if( ch == LF ) break;
        }
        // give back record separator
        SysSeek( io, +1, SEEK_CUR );
    } else {
        SysSeek( io, -rec_size, SEEK_CUR );
    }
}
Ejemplo n.º 10
0
static size_t GetTextRec( b_file *io, char *b, size_t len )
//=========================================================
// Get a record from a TEXT file.
{
    char        ch;
    size_t      read;
    char        rs[2];

    if( io->attrs & SEEK ) { // direct access
        if( SysRead( io, b, len ) == READ_ERROR )
            return( 0 );
        if( SysRead( io, rs, sizeof( char ) ) == READ_ERROR )
            return( 0 );
        if( rs[0] == LF )
            return( len );
#if ! defined( __UNIX__ )
        if( rs[0] == CR ) {
            if( SysRead( io, &rs[1], sizeof( char ) ) == READ_ERROR ) {
                return( 0 );
            }
            if( rs[1] == LF )
                return( len );
            if( ( io->attrs & CARRIAGE_CONTROL ) && ( rs[1] == FF ) ) {
                return( len );
            }
        }
#endif
        FSetErr( IO_BAD_RECORD, io );
        return( 0 );
    } else if( io->attrs & BUFFERED ) {
        char            *ptr;
        char            *stop;
        bool            seen_cr;
        bool            trunc;
        size_t          max_valid;

        // determine maximum valid position in the buffer
        max_valid = io->read_len;
        if( max_valid < io->high_water ) {
            max_valid = io->high_water;
        }
        stop = io->buffer + max_valid;
        ptr = io->buffer + io->b_curs;
        read = 0;
        seen_cr = false;
        trunc = false;
        for( ;; ) {
            if( ptr >= stop ) {
                io->b_curs = ptr - io->buffer;
                if( FillBuffer( io ) < 0 ) {
                    // we have to do this so that io->b_curs is set properly
                    // on end of file
                    ptr = io->buffer + io->b_curs;
                    if( read > 0 && io->stat == IO_EOF ) {
                        IOOk( io );
                    }
                    break;
                }
                stop = io->buffer + io->read_len;
                ptr = io->buffer + io->b_curs;
            }
            ch = *ptr;
            ++ptr;
            if( ch == LF )
                break;
            if( !seen_cr ) {
                if( ch == CTRL_Z ) {
                    --ptr; // give back char so we don't read past EOF
                    if( read == 0 )
                        FSetEof( io );
                    break;
                }
                if( ch == CR ) {
                    seen_cr = true;
                } else if( read < len ) {
                    b[read] = ch;
                    ++read;
                } else {
                    trunc = true;
                }
            } else {
                if( ch == FF && (io->attrs & CARRIAGE_CONTROL) )
                    break;
                --ptr;  // give back the char
                seen_cr = false;
                if( read < len ) {
                    b[read] = CR;
                    ++read;
                } else {
                    trunc = true;
                }
            }
        }
        io->b_curs = ptr - io->buffer;
        if( trunc ) {
            FSetTrunc( io );
        }
        return( read );
    } else {    // device (CON)
        read = 0;
        len = readbytes( io, b, len );
        if( len == READ_ERROR )
            return( 0 );
        for( ;; ) {
            if( read == len )
                break;
#if defined( __UNIX__ ) || defined( __NETWARE__ )
            if( *b == LF )
                return( read );
#else
            if( *b == CR ) {
                ++b;
                if( read == len - 1 )
                    break;
                if( *b == LF )
                    return( read );
                --b;
            } else if( *b == CTRL_Z ) {
                FSetEof( io );
                return( read );
            }
#endif
            ++b;
            ++read;
        }
        FSetTrunc( io );
        return( read );
    }
}