/*
* Copyright (C) 1995-1997 Christopher D. Granz
*
* This header may not be removed.
*
* Refer to the file "License" included in this package for further
* information and before using any of the following.
*/
#include <stdlib.h>
#include "emerald.h"
/*
* Functions
*/
/*
* string, string ione_arg( string );
*
* Interface function.
*/
void _ione_arg( void )
{
EM_VALUE v;
char *pParam1;
char *pParam2;
em_get_values( 1, TYPE_STRING, &pParam1 );
TEMP_ALLOC( pParam2, ( strlen( pParam1 ) + 1 ) );
v.iType = TYPE_STRING;
init_value( &v );
v.u.pString->pString = str_dup( one_arg( pParam1, pParam2 ) );
interp_stack_push( &v );
init_value( &v );
v.u.pString->pString = str_dup( pParam2 );
interp_stack_push( &v );
}
/*
* int istr_to_int( string );
*
* Interface function.
*
*
* Transforms a string into an integer if the string contains digits.
*/
void _istr_to_int( void )
{
EM_VALUE v;
char *pParam1;
em_get_values( 1, TYPE_STRING, &pParam1 );
v.iType = TYPE_INT;
v.u.lInt = atoi( pParam1 );
interp_stack_push( &v );
}
/*
* string imud_name( );
*
* Interface function.
*
*
* Returns the name of the MUD which is running the interpreter.
*/
void _imud_name( void )
{
EM_VALUE v;
v.iType = TYPE_STRING;
init_value( &v );
v.u.pString->pString = str_dup( pMUDName );
interp_stack_push( &v );
}
/*
* object iget_plr_obj( string );
*
* Interface function.
*
*
* Looks up a player by name.
*/
void _iget_plr_obj( void )
{
CHAR_DATA *pChar;
EM_VALUE v;
char *pParam1;
int i;
em_get_values( 1, TYPE_STRING, &pParam1 );
v.iType = TYPE_OBJECT;
init_value( &v );
v.u.pObject->iObjectType = OBJ_TYPE_CHAR;
if ( pParam1[0] == '\0' )
goto end;
for ( i = 0; i < iHashListSize; i++ )
{
for ( pChar = ppCharList[i]; pChar != NULL; pChar = pChar->pNext )
{
if ( !IS_NPC( pChar )
&& str_compare( pParam1, pChar->pPCData->sName ) == TRUE )
{
v.u.pObject->pRealObject = pChar;
goto end;
}
}
}
end:
interp_stack_push( &v );
}
/*
* object iget_term_obj( object );
*
* Interface function.
*
*
* Looks up a player's terminal.
*/
void _iget_term_obj( void )
{
TERM_DATA *pTerm;
EM_VALUE v;
EM_OBJECT *pParam1;
em_get_values( 1, TYPE_OBJECT, &pParam1 );
v.iType = TYPE_OBJECT;
init_value( &v );
v.u.pObject->iObjectType = OBJ_TYPE_TERM;
if ( pParam1->iObjectType != OBJ_TYPE_CHAR
|| pParam1->pRealObject == NULL )
goto end;
for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext )
{
if ( pParam1->pRealObject == pTerm->pChar )
{
v.u.pObject->pRealObject = pTerm;
break;
}
}
end:
interp_stack_push( &v );
}
/*
* object inext_char_obj( object );
*
* Interface function.
*
*
* Returns the pNext value from the given character object. Usally
* used to terverse the character linked list.
*/
void _inext_char_obj( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
em_get_values( 1, TYPE_OBJECT, &pParam1 );
v.iType = TYPE_OBJECT;
init_value( &v );
v.u.pObject->iObjectType = OBJ_TYPE_CHAR;
if ( pParam1->iObjectType != OBJ_TYPE_CHAR
|| pParam1->pRealObject == NULL )
goto end;
v.u.pObject->pRealObject
= ( (CHAR_DATA *) pParam1->pRealObject )->pNext;
end:
interp_stack_push( &v );
}
/*
* object inext_term_obj( object );
*
* Interface function.
*
*
* Returns the pNext value from the given terminal object. Usally
* used to terverse the terminal linked list.
*/
void _inext_term_obj( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
em_get_values( 1, TYPE_OBJECT, &pParam1 );
v.iType = TYPE_OBJECT;
init_value( &v );
v.u.pObject->iObjectType = OBJ_TYPE_TERM;
if ( pParam1->iObjectType != OBJ_TYPE_TERM
|| pParam1->pRealObject == NULL )
goto end;
v.u.pObject->pRealObject
= ( (TERM_DATA *) pParam1->pRealObject )->pNext;
end:
interp_stack_push( &v );
}
/*
* int iwrite_to_char( object, string );
*
* Interface function.
*
*
* Writes a string to a character.
*/
void _iwrite_to_char( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
char *pParam2;
em_get_values( 2, TYPE_OBJECT, &pParam1, TYPE_STRING, &pParam2 );
v.iType = TYPE_INT;
if ( pParam2[0] == '\0' || pParam1->iObjectType != OBJ_TYPE_CHAR
|| pParam1->pRealObject == NULL )
v.u.lInt = 0;
else
{
v.u.lInt = 1;
send_string( (CHAR_DATA *) pParam1->pRealObject, pParam2 );
}
interp_stack_push( &v );
}
/*
* int iwrite_to_term( object, string );
*
* Interface function.
*
*
* Writes a string to a terminal. Returns 1 if successful, otherwise
* returns 0.
*/
void _iwrite_to_term( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
char *pParam2;
em_get_values( 2, TYPE_OBJECT, &pParam1, TYPE_STRING, &pParam2 );
v.iType = TYPE_INT;
if ( pParam2[0] == '\0' || pParam1->iObjectType != OBJ_TYPE_TERM
|| pParam1->pRealObject == NULL )
v.u.lInt = 0;
else
{
v.u.lInt = 1;
write_string_buffer( (TERM_DATA *) pParam1->pRealObject,
pParam2 );
}
interp_stack_push( &v );
}
/*
* int isetup_string_pager( object );
*
* Interface function.
*
*
* Sets up a string pager for a terminal. Returns 1 if successful,
* returns 0 otherwise.
*/
void _isetup_string_pager( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
em_get_values( 2, TYPE_OBJECT, &pParam1 );
v.iType = TYPE_INT;
if ( pParam1->iObjectType != OBJ_TYPE_TERM
|| pParam1->pRealObject == NULL
|| ( (TERM_DATA *) pParam1->pRealObject )->pPageString != NULL )
v.u.lInt = 0;
else
{
v.u.lInt = 1;
setup_string_pager( (TERM_DATA *) pParam1->pRealObject );
}
interp_stack_push( &v );
}
/*
* int ifinish_string_pager( object );
*
* Interface function.
*
*
* Starts paging a string to a terminal. Returns 1 if successful,
* otherwise returns 0.
*/
void _ifinish_string_pager( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
em_get_values( 2, TYPE_OBJECT, &pParam1 );
v.iType = TYPE_INT;
if ( pParam1->iObjectType != OBJ_TYPE_TERM
|| pParam1->pRealObject == NULL
|| ( (TERM_DATA *) pParam1->pRealObject )->pPageString == NULL )
v.u.lInt = 0;
else
{
v.u.lInt = 1;
finish_string_pager( (TERM_DATA *) pParam1->pRealObject );
}
interp_stack_push( &v );
}
/*
* int ipage_string( object, string );
*
* Interface function.
*
*
* Adds a string to the string pager buffer of a terminal. A value
* of 1 is returned if it was successful, 0 is returned if it was not
* successful.
*/
void _ipage_string( void )
{
EM_VALUE v;
EM_OBJECT *pParam1;
char *pParam2;
em_get_values( 2, TYPE_OBJECT, &pParam1, TYPE_STRING, &pParam2 );
v.iType = TYPE_INT;
if ( pParam2[0] == '\0' || pParam1->iObjectType != OBJ_TYPE_TERM
|| pParam1->pRealObject == NULL
|| ( (TERM_DATA *) pParam1->pRealObject )->pPageString == NULL )
v.u.lInt = 0;
else
{
v.u.lInt = 1;
page_string( (TERM_DATA *) pParam1->pRealObject, pParam2 );
}
interp_stack_push( &v );
}
/*
* End of ifunc.c
*/