/* (c) Copyright Hewlett-Packard Company 2001
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Initialize Hoverware - once per process */
extern hwInt32
hwInit( hwInt32 argc, char **argv );
/* Create a display. Note that you still have to call
* disp->makeCurrent with the resulting hwDisplay for
* much of anything useful to happen
*/
extern hwDisplay hwCreateDisplay
(
hwDisplay dispFunc, hwDisplay sharedDisp,
OS_DISPLAY_TYPE display
);
/* Get the current display for this thread */
extern hwDisplay
hwGetCurrentDisplay( void );
/* Get the most recent error code, and zero it out */
extern hwInt32
hwGetError( void );
/* Register a constant for use in parsing. Constants are global. */
extern void
hwRegisterConstant( const char *, hwInt32, void * );
/* Register a class for use in parsing. Classes are global. */
extern void
hwRegisterClass( const hwObject );
/* Register an object for use in parsing. Objects are LOCAL to
* the current hwDisplay - you must have done a disp->makeCurrent()
* in the current thread for this to work!
*/
extern void
hwRegisterObject( const hwObject );
/* Register a callback for use with various classes. Callbacks are global. */
extern void
hwRegisterCallback( const char *, hwCallback );
/* Unregister all register objects */
extern void
hwUnregisterObjects( void );
/* Find a constant in the registry */
extern hwInt32
hwFindConstant( const char *, void ** );
/* Find a class in the registry */
extern hwObject
hwFindClass( const char * );
/* Find an object in the registry */
extern hwObject
hwFindObject( const char * );
/* Find a callback in the registry */
extern hwCallback
hwFindCallback( const char * );
/************ File I/O routines ************/
/* Parse a file, returning all of the top-level objects found in it */
extern hwInt32
hwParseFile( const char *, hwObject ** );
/* Parse a string array, returning all of the top-level objects found in it.
* The array should be NULL-terminated.
*/
extern hwInt32
hwParseArray( char **, hwObject ** );
/* Write an object (in ASCII) to a file */
extern hwInt32
hwWriteAscii( const hwObject, FILE * );
/* Initialize a binary file for read/write */
extern hwInt32
hwBeginBinary( hwObjRW oRdWr, void *f, hwInt32 flags, hwInt32 *numObj );
/* Finish up reading/writing a binary file */
extern hwInt32
hwEndBinary( hwObjRW oRdWr, void *f );
/* Write an object to a binary file */
extern hwInt32
hwWriteBinary( const hwObject obj, hwObjRW oWrite, void *f );
/* Read objects from a binary file */
hwInt32
hwReadBinary( hwObjRW oRead, void *f, hwInt32 numObjs, hwObject **objs );
/********* Matrix utilities ***********/
extern void
hwIdentity( hwFloat Mat[4][4] ),
hwMakeMatrix(const hwOrientType *, hwFloat Mat[4][4]),
hwScale( hwFloat Mat[4][4], hwFloat sx, hwFloat sy, hwFloat sz ),
hwRotateX( hwFloat Mat[4][4], hwFloat Ang ),
hwRotateY( hwFloat Mat[4][4], hwFloat Ang ),
hwRotateZ( hwFloat Mat[4][4], hwFloat Ang ),
hwRotateAxis( hwFloat Mat[4][4], hwFloat Ang, const hwFloat XYZ[3] ),
hwMatMult( hwFloat Res[4][4], hwFloat A[4][4], hwFloat B[4][4] ),
hwTransform( hwFloat Mat[4][4], hwFloat Vect[3] ),
hwTransform4d( hwFloat dst[4], const hwFloat src[4], hwFloat Mat[4][4] ),
hwTransformPersp( hwFloat dst[3], const hwFloat src[3], hwFloat Mat[4][4] );
extern hwInt32
hwInvertMat( hwFloat Src[4][4], hwFloat Dst[4][4] );
/* Random numbers Note that each hwDisplay context has its own
* random number seed.
*/
extern void
hwSrand48(long seed);
extern double
hwDrand48(void);
/* Hash table utilities. Note that these ARE NOT thread-safe. */
void
*hwCreateHash( int size );
void
hwEmptyHash( void *table );
int
hwInsert( const char *name, int value, void *table );
int
hwLookup( const char *name, void *table );
int
hwFindSym( char name[256], hwInt32 value, void *table );
void
hwDestroyHash( void *table );
/* Data flag utilities */
extern hwInt32
hwGetVertexOffsets( hwInt32 flags, hwVertexOffsets *offs ),
hwCalcWPV( hwInt32 flags ),
hwTextureFlags( const hwSurfaceType *surf );
/* Surface attr texture ID cooking utility */
extern void
hwSurfAttrs(hwSurfaceType *surf);
/* Normal / bump map utilities */
extern void
hwMakeNormalMap8( hwUint8 *dst, hwUint8 *src, hwInt32 w, hwInt32 h,
hwInt32 clampW, hwInt32 clampH,
hwFloat bumpScale ),
hwMakeNormalMap16( hwUint8 *dst, hwUint16 *src, hwInt32 w, hwInt32 h,
hwInt32 clampW, hwInt32 clampH,
hwFloat bumpScale );
/* File I/O routines which can access the APK */
extern void *hwFopen(const char *, const char *);
extern void hwFclose(void *);
extern int hwFread(void *, int, int, void *);
extern int hwFwrite(void *, int, int, void *);
extern int hwFgetc(void *);
extern int hwFungetc(int, void *);
extern int hwFscanf(void *, const char *, void *);
extern char *hwFgets(char *, int, void *);
extern int hwFseek(void *, long, int);
extern void hwFrewind(void *);
extern long hwFtell(void *);
#ifdef __cplusplus
}
#endif