/
Sapphire/bin/
Sapphire/db/
Sapphire/db/OLC_rooms/
Sapphire/db/abi/
Sapphire/db/em_src/
Sapphire/db/helps/
Sapphire/db/helps/emman/ifunc/
Sapphire/db/npcs/Tatt/
Sapphire/db/objects/Tatt/
Sapphire/db/q_data/
Sapphire/db/rooms/Tatt/
Sapphire/doc/
Sapphire/doc/em/
Sapphire/etc/
Sapphire/src/abic/
Sapphire/src/areacon/
Sapphire/src/client/
Sapphire/src/embc/
Sapphire/src/emi/
Sapphire/src/emi/test/
Sapphire/src/include/
Sapphire/src/sapphire/em/
Sapphire/src/tcon/
/*
 * 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
 */