/
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "sapphire.h"


/*
 * Functions
 */
void fwrite_npc_reset_list( FILE *pFile, NPC_RESET_DATA *pNPCReset )
{
    bool b = FALSE;

    for ( ; pNPCReset != NULL; pNPCReset = pNPCReset->pNext )
    {
        if ( b == TRUE )
            putc( ',', pFile );

        fprintf( pFile, "%ld[", pNPCReset->u1.pNPCIndex->iNumber );
        fwrite_obj_reset_list( pFile, pNPCReset->pInvenResets );
        fprintf( pFile, "][" );
        fwrite_obj_reset_list( pFile, pNPCReset->pEqResets );
        fprintf( pFile, "]%d", pNPCReset->iResetTime );

        b  = TRUE;
    }
}


void fwrite_obj_reset_list( FILE *pFile, OBJ_RESET_DATA *pObjReset )
{
    bool b = FALSE;

    for ( ; pObjReset != NULL; pObjReset = pObjReset->pNext )
    {
        if ( b == TRUE )
            putc( ',', pFile );

        fprintf( pFile, "%ld[", pObjReset->u1.pObjIndex->iNumber );
        fwrite_obj_reset_list( pFile, pObjReset->pContentResets );
        fprintf( pFile, "]%d", pObjReset->iResetTime );

        b  = TRUE;
    }
}


bool save_room( ROOM_INDEX_DATA *pRoom, char *pFilename )
{
    FILE *pFile;
    int i;

    if ( ( pFile = open_file( pFilename, "w", FALSE ) ) == NULL )
        return ( FALSE );

    fprintf( pFile, "#%ld\n", pRoom->iNumber );
    fprintf( pFile,
      "*************************************************************\n"
      "**** This file was generated by the Sapphire OLC system. ****\n"
      "*************************************************************\n" );

    if ( pRoom->sImageFilename[0] != '\0' )
    {
        fprintf( pFile, "image       " );
        fput_string( pFile, "%s", pRoom->sImageFilename );
        fprintf( pFile, ";\n" );
    }

    if ( str_compare( pRoom->sTitle, "(no title)" ) != TRUE )
    {
        fprintf( pFile, "title       " );
        fput_string( pFile, "%s", pRoom->sTitle );
        fprintf( pFile, ";\n" );
    }

    if ( str_compare( pRoom->sDesc, "(no description)" ) != TRUE )
    {
        fprintf( pFile, "desc\n  " );
        fput_string( pFile, "%s", pRoom->sDesc );
        fprintf( pFile, "\n  [ ];\n" );
    }

    for ( i = 0; i < 10; i++ )
    {
        if ( pRoom->sDirDescs[i][0] != '\0' )
        {
            fprintf( pFile, "%s_desc\n  ",
              uncapit( snDirTable[i].pName ) );
            fput_string( pFile, "%s", pRoom->sDirDescs[i] );
            fprintf( pFile, "\n  [ ];\n" );
        }
    }

    if ( pRoom->iSectorType != snSectorTable[0].iNumber )
        fprintf( pFile, "sector      %s;\n",
          get_sector_string( pRoom->iSectorType ) );

    if ( pRoom->fRoomFlags != 0 )
        fprintf( pFile, "room_flags  [%s];\n",
          uncapit( room_flags_string( pRoom->fRoomFlags ) ) );

    if ( pRoom->iTemperature != 60 )
        fprintf( pFile, "temperature %d;\n", pRoom->iTemperature );

    for ( i = 0; i < 10; i++ )
    {
        if ( pRoom->eExits[i].uRoom.pRoom != NULL )
        {
            fprintf( pFile, "%-9.9s   %ld ",
              uncapit( snDirTable[i].pName ),
              pRoom->eExits[i].uRoom.pRoom->iNumber );

            if ( pRoom->eExits[i].iExitType == NUMBER_EXIT_STANDARD )
                fprintf( pFile, "standard;\n" );
            else if ( pRoom->eExits[i].iExitType == NUMBER_EXIT_DOOR )
            {
                fprintf( pFile, "door " );
                fput_string( pFile, "%s", pRoom->eExits[i].pDoorNames[0] );
                fprintf( pFile, " [%s",
                  door_flags_string( pRoom->eExits[i].fOrigFlags ) );

                if ( pRoom->eExits[i].iLevel > 0 )
                    fprintf( pFile, " level %d", pRoom->eExits[i].iLevel );

                if ( pRoom->eExits[i].uKey.pObjKey != NULL )
                    fprintf( pFile, " key %ld",
                      pRoom->eExits[i].uKey.pObjKey->iNumber );

                fprintf( pFile, "] %ld;\n", pRoom->eExits[i].iResetTime );
            }
        }
    }

    if ( pRoom->pNPCResets != NULL )
    {
        fprintf( pFile, "npcs        [" );
        fwrite_npc_reset_list( pFile, pRoom->pNPCResets );
        fprintf( pFile, "];\n" );
    }

    if ( pRoom->pObjResets != NULL )
    {
        fprintf( pFile, "objects     [" );
        fwrite_obj_reset_list( pFile, pRoom->pObjResets );
        fprintf( pFile, "];\n" );
    }

    fprintf( pFile, "end;\n" );

    close_file( pFile );
    return ( TRUE );
}


/*
 * End of olc_save.c
 */