home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
ML
/
DATA.H
< prev
next >
Wrap
C/C++ Source or Header
|
1996-02-16
|
5KB
|
238 lines
/*
* データ構造定義
*
* T.Kobayashi 1994.5.14
*/
#define DATA 1
#ifndef ALLOC
# include "alloc.h"
#endif
#include "defines.h"
/* 型 */
#define TYPE_NOASN 0x00
#define TYPE_BOOLEAN 0x01
#define TYPE_INT 0x02
#define TYPE_REAL 0x04
#define TYPE_TYPE 0x08
#define TYPE_FUNC 0x10
#define TYPE_ARRAY 0x20
#define TYPE_OBJECT 0x40
/* 関数の型 */
#define FUNC_NO 0
#define FUNC_SYS 1
#define FUNC_USR 2
/* 演算子 */
#define OPE_SINGLE 5 /* 単項 */
#define OPE_EXP_END 0 /* 式終了 */
#define OPE_NOT 1 /* ! */
#define OPE_MINUS1 2 /* 単項- */
#define OPE_INC 3 /* ++ */
#define OPE_DEC 4 /* -- */
#define OPE_PLUS 5 /* + */
#define OPE_MINUS 6 /* - */
#define OPE_MULT 7 /* * */
#define OPE_DIVIDE 8 /* / */
#define OPE_DOT 9 /* . */
#define OPE_REFER 10 /* . */
#define OPE_MOD 11 /* % */
#define OPE_LSS 12 /* < */
#define OPE_GTR 13 /* > */
#define OPE_LSSEQ 14 /* <= */
#define OPE_GTREQ 15 /* >= */
#define OPE_AND 16 /* & */
#define OPE_OR 17 /* | */
#define OPE_XOR 18 /* ^ */
#define OPE_EQ 19 /* == */
#define OPE_NOTEQ 20 /* != */
#define OPE_LSFT 21 /* << */
#define OPE_RSFT 22 /* >> */
#define FUNC_START 32 /* 関数 */
/* 識別子管理 */
#define IDENT_RESERVE 0
#define IDENT_LOCAL 1 /* ローカル変数 */
#define IDENT_GLOBAL 2 /* 大域変数 */
#define IDENT_VAR 3 /* 変数識別子 */
#define IDENT_FUNC 4 /* 関数識別子 */
#define IDENT_ARY 16 /* 配列変数 */
#define IDENT_PRIVATE 32
#define IDENT_CONST 64
typedef char IdentName[IDENT_CHARS+1] ;
typedef struct {
char *name;
int id;
} IdentTable;
typedef struct {
int max ;
int count ;
char *flag ;
IdentName *name ;
IdentTable *table ;
int tablesize;
}
IdentBuffer ;
/*
* 関数
*/
typedef struct {
int type ; /* タイプ */
char *name ; /* 名前 */
void *ptr ; /* 実体 */
}
FuncBuffer ;
/*
* オブジェクト
*/
typedef struct {
short type ; /* 型番号 */
short ref ; /* 参照数 */
int size ; /* サイズ */
}
Object ;
/*
* クラス
*/
typedef struct {
char *name ; /* 名前 */
int funcs ; /* 関数の最大数 */
int parent ; /* 継承クラス */
FuncBuffer *func ; /* 関数リスト */
}
Class ;
extern int ObjectCount ;
extern Class ClassList[] ;
extern IdentBuffer *IdentGlobalVar, *IdentLocalVar, *IdentFunction ;
/*
* 演算用データ構造体
*/
/* 論理型 */
typedef struct {
short type ;
short dmy ;
int l ;
}
BoolData ;
/* 整数型 */
typedef struct {
short type ;
short dmy ;
int i ;
}
IntData ;
/* 実数型 */
typedef struct {
short type ;
short dmy ;
float r ;
}
RealData ;
/* 配列型 */
typedef struct {
short type ;
short size ;
void *ary ;
}
ArrayData ;
/* 実行型 */
typedef struct {
short type ;
short dmy ;
int ident ;
}
ExecData ;
/* 型型 */
typedef struct {
short type ;
short dmy ;
int t ;
}
TypeData ;
/* オブジェクト型 */
typedef struct {
short type ;
short dmy ;
Object *ptr ;
}
ObjectData ;
typedef union {
short type ;
BoolData ld ;
IntData id ;
RealData rd ;
ArrayData ad ;
ExecData funcd ;
TypeData td ;
ObjectData od ;
}
DataStruct ;
#ifdef __cplusplus
extern "C" {
#endif
/* init.c */
extern void StackInit( int );
extern void StackExit( void );
extern void ObjectInit( void );
extern void ObjectExit( void );
/* object.c */
extern Object *ObjectAlloc( int, int );
extern void ObjectFree( Object* );
extern int ObjectCheck( DataStruct*, int );
extern Object *ObjectDup( Object* );
extern Object *ObjectCopy( Object* );
/* class.c */
extern int ObjectSetClass( char*, int, int );
/* func.c */
extern FuncBuffer *FunctionAlloc( int );
extern void FunctionFree( FuncBuffer* );
extern int FunctionSet( int, char*, int(*)() );
extern void OperatorSet( int, int, int(*)() );
/* stack.c */
extern DataStruct *StackTop( void );
extern void StackPop( void );
extern void StackPush( DataStruct* );
extern void StackPushBoolean( int );
extern void StackPushInt( int );
extern void StackPushReal( double );
extern DataStruct *StackAlloc( int );
extern void StackRelease( DataStruct* );
extern int StackMaxUsed( void );
extern void DataPrint( DataStruct* );
extern int DataToString( char*, DataStruct* );
/* ident.c */
extern IdentBuffer *IdentAlloc( int, int );
extern void IdentFree( IdentBuffer* );
extern int IdentAppend( IdentBuffer*, char*, int );
extern int IdentSearch( IdentBuffer*, char* );
extern void IdentPrivate( IdentBuffer* );
extern int IdentFlag( IdentBuffer*, int );
#ifdef __cplusplus
}
#endif