You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
4.2 KiB

/*
* $Id: veo.c,v 1.7 2006/10/12 14:21:23 desrod Exp $
*
* veo.c: Translate veo traveler data formats
*
* Copyright (c) 2002, Angus Ainslie
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Library General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
* General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pi-macros.h"
#include "pi-veo.h"
/***********************************************************************
*
* Function: free_Veo
*
* Summary: Free the memory and filehandle from the record alloc.
*
***********************************************************************/
void
free_Veo( Veo_t *veo )
{
}
/***********************************************************************
*
* Function: unpack_Veo
*
* Summary: Unpack the Veo structure into records we can chew on
*
***********************************************************************/
int
unpack_Veo(Veo_t *veo, unsigned char *buffer, size_t len)
{
unsigned char *start = buffer;
/* consume unknown */
buffer += 1;
veo->quality = (unsigned char) get_byte(buffer);
buffer += 1;
veo->resolution = (unsigned char) get_byte(buffer);
buffer += 1;
/* consume 12 more unknowns */
buffer += 12;
veo->picnum = (unsigned long int) get_long(buffer);
buffer += 4;
veo->day = (unsigned short int) get_short(buffer);
buffer += 2;
veo->month = (unsigned short int) get_short(buffer);
buffer += 2;
veo->year = (unsigned short int) get_short(buffer);
buffer += 2;
if( veo->resolution == 0 )
{
veo->width = 640;
veo->height = 480;
}
else if( veo->resolution == 1 )
{
veo->width = 320;
veo->height = 240;
}
else
fprintf( stderr, "unknown resolution\n" );
return ( buffer - start ); /* FIXME: return real length */
}
/***********************************************************************
*
* Function: pack_Veo
*
* Summary: Pack the Veo records into a structure
*
***********************************************************************/
int pack_Veo(Veo_t *veo, unsigned char *buf, size_t len)
{
return( 0 );
}
/***********************************************************************
*
* Function: unpack_VeoAppInfo
*
* Summary: Unpack the Veo AppInfo block from the structure
*
***********************************************************************/
int unpack_VeoAppInfo(struct VeoAppInfo *appinfo, unsigned char *record,
size_t len)
{
int i;
unsigned char *start = record;
i = unpack_CategoryAppInfo( &appinfo->category, record, len );
if (!i)
return 0;
record += i;
len -= i;
if (len < 4)
return 0;
appinfo->dirty = get_short(record);
record += 2;
appinfo->sortByPriority = get_byte(record);
record += 2;
return (record - start);
}
/***********************************************************************
*
* Function: pack_VeoAppInfo
*
* Summary: Pack the AppInfo block/record back into the structure
*
***********************************************************************/
int
pack_VeoAppInfo(struct VeoAppInfo *appinfo, unsigned char *record, size_t len)
{
int i;
unsigned char *start = record;
i = pack_CategoryAppInfo(&appinfo->category, record, len);
if (!record)
return i + 4;
if (!i)
return 0;
record += i;
len -= i;
if (len < 4)
return 0;
set_short(record, appinfo->dirty);
set_byte(record + 2, appinfo->sortByPriority);
set_byte(record + 3, 0); /* gapfill */
record += 4;
return (record - start);
}
/* vi: set ts=8 sw=4 sts=4 noexpandtab: cin */
/* ex: set tabstop=4 expandtab: */
/* Local Variables: */
/* indent-tabs-mode: t */
/* c-basic-offset: 8 */
/* End: */