ef2-sdk/Shared/qcommon/tiki_script.h

109 lines
3.3 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /EF2/Code/Shared/qcommon/tiki_script.h $
// $Revision:: 10 $
// $Author:: Steven $
// $Date:: 10/13/03 8:54a $
//
// 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.
//
//
// 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 __TIKI_SCRIPT_H__
#define __TIKI_SCRIPT_H__
#if !defined( QERADIANT ) && !defined( UTILS )
#define MAXTOKEN 256
#endif
#define MAXMACROS 384 // was 256, increased for ef2 weapon lists
typedef struct
{
char name[ MAXTOKEN ];
char macro[ MAXTOKEN ];
} tiki_macro_t;
class TikiScript
{
public:
~TikiScript();
TikiScript();
char* buffer;
int length;
void Close();
const char* Filename();
int GetLineNumber();
void Reset();
qboolean TokenAvailable( qboolean crossline );
void UnGetToken();
const char* GetToken( qboolean crossline );
const char* GetLine( qboolean crossline );
const char* GetRaw();
const char* GetString( qboolean crossline );
qboolean GetSpecific( const char *string );
int GetInteger( qboolean crossline );
double GetDouble( qboolean crossline );
float GetFloat( qboolean crossline );
void GetVector( qboolean crossline, vec3_t vec );
int LinesInFile();
void Parse( char *data, int length, const char *name );
qboolean LoadFile( const char *name, qboolean quiet = qfalse );
qboolean LoadFileFromTS( const char *name, const char * tikidata, qboolean quiet = qfalse );
const char* Token();
float EvaluateMacroMath(float value, float newval, char oper);
char* EvaluateMacroString(const char *theMacroString);
const char* GetMacroString(const char *theMacroName);
protected:
qboolean error;
qboolean tokenready;
TikiScript* include;
TikiScript* parent;
char filename[ MAXTOKEN ];
const char* script_p;
const char* end_p;
tiki_macro_t macros[ MAXMACROS ];
int nummacros;
int line;
char token[ MAXTOKEN ];
qboolean releaseBuffer;
qboolean AtComment();
qboolean AtExtendedComment();
qboolean AtCommand();
qboolean AtString( qboolean crossline );
qboolean ProcessCommand( qboolean crossline );
qboolean Completed();
void CheckOverflow();
void Uninclude();
const char* FindMacro( const char * macro );
void AddMacro( const char *macro, const char *expansion );
qboolean SkipToEOL();
void SkipWhiteSpace( qboolean crossline );
void SkipNonToken( qboolean crossline );
qboolean CommentAvailable( qboolean crossline );
void SkipExtendedComment();
};
#endif