sin-sdk/script.h
1998-12-20 00:00:00 +00:00

172 lines
4.6 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/script.h $
// $Revision:: 12 $
// $Author:: Jimdose $
// $Date:: 10/07/98 11:59p $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/script.h $
//
// 12 10/07/98 11:59p Jimdose
// changed script_p to offset in script markers
//
// 11 9/21/98 10:15p Markd
// Putting archiving and unarchiving functions in
//
// 10 6/09/98 4:24p Jimdose
// filename is now an str
// added close and filename
//
// 9 5/26/98 11:59p Markd
// moved buffer out of protected for e3 demo
//
// 8 5/24/98 4:48p Jimdose
// Made char *'s const
//
// 7 3/02/98 8:49p Jimdose
// Changed CLASS_PROTOTYPE to only take the classname
//
// 6 2/17/98 7:14p Jimdose
// Added MarkPosition and RestorePosition
// Added atString for determining if the next token is a quoted string
//
// 5 2/03/98 10:54a Jimdose
// Updated to work with Quake 2 engine
//
// 3 11/24/97 4:30p Markd
// Added GetVector
//
// 2 9/26/97 6:14p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// C++ implementaion of tokenizing text interpretation. Class accepts filename
// to load or pointer to preloaded text data. Standard tokenizing operations
// such as skip white-space, get string, get integer, get float, get token,
// and skip line are implemented.
//
// Note: all '//', '#', and ';' are treated as comments. Probably should
// make this behaviour toggleable.
//
#ifndef __SCRIPT_H__
#define __SCRIPT_H__
#include "class.h"
#include "vector.h"
#include "str.h"
#define MAXTOKEN 256
typedef struct
{
qboolean tokenready;
int offset;
int line;
char token[ MAXTOKEN ];
} scriptmarker_t;
class EXPORT_FROM_DLL Script : public Class
{
protected:
qboolean tokenready;
str filename;
const char *script_p;
const char *end_p;
int line;
char token[ MAXTOKEN ];
qboolean releaseBuffer;
qboolean AtComment( void );
void CheckOverflow( void );
public:
const char *buffer;
int length;
CLASS_PROTOTYPE( Script );
~Script();
Script();
void Close( void );
const char *Filename( void );
int GetLineNumber( void );
void Reset( void );
void MarkPosition( scriptmarker_t *mark );
void RestorePosition( scriptmarker_t *mark );
qboolean SkipToEOL( void );
void SkipWhiteSpace( qboolean crossline );
void SkipNonToken( qboolean crossline );
qboolean TokenAvailable( qboolean crossline );
qboolean CommentAvailable( qboolean crossline );
void UnGetToken( void );
qboolean AtString( qboolean crossline );
const char *GetToken( qboolean crossline );
const char *GetLine( qboolean crossline );
const char *GetRaw( void );
const char *GetString( qboolean crossline );
qboolean GetSpecific( const char *string );
int GetInteger( qboolean crossline );
double GetDouble( qboolean crossline );
float GetFloat( qboolean crossline );
Vector GetVector( qboolean crossline );
int LinesInFile( void );
void Parse( const char *data, int length, const char *name );
void LoadFile( const char *name );
const char *Token( void );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Script::Archive
(
Archiver &arc
)
{
Class::Archive( arc );
arc.WriteString( filename );
arc.WriteBoolean( tokenready );
//
// save out current pointer as an offset
//
arc.WriteInteger( script_p - buffer );
arc.WriteInteger( line );
arc.WriteRaw( token, sizeof( token ) );
}
inline EXPORT_FROM_DLL void Script::Unarchive
(
Archiver &arc
)
{
int i;
Class::Unarchive( arc );
arc.ReadString( &filename );
//
// load the file in
//
LoadFile( filename.c_str() );
arc.ReadBoolean( &tokenready );
arc.ReadInteger( &i );
//
// restore the script pointer
//
script_p = buffer + i;
arc.ReadInteger( &line );
arc.ReadRaw( token, sizeof( token ) );
}
#endif