/* * 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 */