home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
ML
/
FUNC.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-20
|
2KB
|
82 lines
/*
* 関数の管理
*
* 1994.5.21 T.Koabayashi
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "data.h"
#include "err.h"
#include "inlib.h"
/* 関数用バッファの初期化 */
FuncBuffer *FunctionAlloc( funcs )
int funcs ;
{
int i ;
FuncBuffer *func ;
func = MemoryAlloc( funcs * sizeof( FuncBuffer ) );
if ( func == NULL )
{
ParseFatal( "関数管理バッファが確保できません" );
return NULL ;
}
for( i = 0 ; i < funcs ; i++ )
{
func[i].type = FUNC_NO ;
}
return func ;
}
void FunctionFree( func )
FuncBuffer *func ;
{
MemoryFree( func );
}
/* 組み込み関数の設定 */
int FunctionSet( id, name, ptr )
int id ;
char *name ;
int (*ptr)();
{
int ident ;
FuncBuffer *func ;
assert( 0 <= id && id < MAX_CLASS && ClassList[id].name != NULL );
func = ClassList[id].func ;
ident = IdentSearch( IdentFunction, name );
if ( ident < 0 )
ident = IdentAppend( IdentFunction, name, IDENT_FUNC );
if ( ident >= ClassList[id].funcs )
ParseFatal( "新しいメンバー関数が登録できません。" );
func[ident].type = FUNC_SYS ;
func[ident].name = name ;
func[ident].ptr = ptr ;
return ident ;
}
/* 演算子の設定 */
void OperatorSet( id, ident, ptr )
int id ;
int ident ;
int (*ptr)();
{
FuncBuffer *func ;
assert( 0 <= id && id < MAX_CLASS && ClassList[id].name != NULL );
func = ClassList[id].func ;
func[ident].type = FUNC_SYS ;
func[ident].name = "" ;
func[ident].ptr = ptr ;
}