LOW4_Fixup/src/obj/
/***************************************************************************
 *  God Wars Mud originally written by KaVir aka Richard Woolcock.         *
 *  Changes done to the code done by Sage aka Walter Howard, this mud is   *
 *  for the public, however if you run this code it means you agree        *
 *  to the license.low, license.gw, and license.merc have fun. :)          *
***************************************************************************/
/*This code was written by KaVir and he is to be given full credit for it*/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"

#define FILE_CLAN      "../area/clan.txt"

CLAN_DATA         *     clans_data       [MAX_CLAN]; 

/*
 * Clan table.
 */
char *	const	clan_table	[] =
{
    "None",
    "None",
    "None",
    "None",
    "None",
    "None",
    "None",
    "None",
    "None",
    "None",
    "None",
    "None"
};

bool clan_exist( )
{
    FILE *fp;
    char buf [MAX_STRING_LENGTH];
    bool found = FALSE;

    fclose( fpReserve );
    sprintf( buf, "%s", FILE_CLAN );
    if ( ( fp = fopen( buf, "r" ) ) != NULL )
    {
        found = TRUE;
        fclose( fp );
    }
    fpReserve = fopen( NULL_FILE, "r" );
    return found;
}


void do_clanlist( CHAR_DATA *ch, char *argument )
{
    char       buf[MAX_STRING_LENGTH];
    int i;

    send_to_char("--------------------"
	"-------------- CLAN "
	"LIST ---------------"
	"--------------------\n\r", ch );
    for ( i = 0; i < MAX_CLAN; i++ )
    {
        sprintf( buf, "%-15s Leader:%-16s Prince:%-16s Members:%-3d\n\r",
            clan_table[i], clans_data[i]->clan_head, clans_data[i]->primogen,
            clans_data[i]->members );
        send_to_char( buf, ch );
    }
    send_to_char("--------------------"
	"--------------------"
	"--------------------"
	"--------------------\n\r", ch );

    return;
}


void clan_write( )
{
    FILE *fp;
    int i;

    fflush( fpReserve );
    fclose( fpReserve );

    if ( ( fp = fopen( CLAN_DIR, "w" ) ) == NULL )
	bug("Cannot Open clan data file.", 0);
    else
    {
	for ( i = 0; i < MAX_CLAN; i++ )
	{
	    fprintf( fp, "%s %d %s %s\n", 
		clan_table[i], clans_data[i]->members, 
		clans_data[i]->clan_head, clans_data[i]->primogen );
	}
    }

    fflush( fp );
    fclose( fp );
    fpReserve = fopen( NULL_FILE, "r" );
    return;
}

void clan_read( )
{
    FILE *fp;
    int i;

    if ( !clan_exist() )
    {
	for ( i = 0; i < MAX_CLAN; i++ )
	{
	    clans_data[i] = alloc_perm( sizeof(CLAN_DATA) );
	    clans_data[i]->members = 0;
	    clans_data[i]->clan_head = str_dup( "None" );
	    clans_data[i]->primogen = str_dup( "None" );
	}
	clan_write();
	return;
    }

    fflush( fpReserve );
    fclose( fpReserve );

    if ( ( fp = fopen( CLAN_DIR, "r" ) ) != NULL )
    {
	if ( fread_letter( fp ) == EOF )
	{
	    bug( "clan_read: blank file.", 0 );
	    for ( i = 0; i < MAX_CLAN; i++ )
	    {
		clans_data[i] = alloc_perm( sizeof(CLAN_DATA) );
		clans_data[i]->members = 0;
		clans_data[i]->clan_head = str_dup( "None" );
		clans_data[i]->primogen = str_dup( "None" );
	    }
	    clan_write();
	    return;
	}
	for ( i = 0; i < MAX_CLAN; i++ )
	{
	    fread_word( fp );
	    clans_data[i] = alloc_perm( sizeof(CLAN_DATA) );
	    clans_data[i]->members = fread_number( fp );
	    clans_data[i]->clan_head = str_dup( fread_word( fp ) );
	    clans_data[i]->primogen = str_dup( fread_word( fp ) );
	}
    }
    else
    {
	bug( "clan_read: fopen", 0 );
	perror( CLAN_DIR );
    }

    fflush( fp );
    fclose( fp );
    fpReserve = fopen( NULL_FILE, "r" );
    return;
}

void update_clanlist( CHAR_DATA *ch, bool add_char )
{
    int clan = find_clanname( ch );

    if ( clan < 0 ) return;

    if ( add_char )
	clans_data[clan]->members++;
    else
    {
	clans_data[clan]->members--;
	if ( !str_cmp( ch->name, clans_data[clan]->clan_head ) )
	{
	    free_string( clans_data[clan]->clan_head );
	    clans_data[clan]->clan_head = str_dup( "None" );
	}
	if ( !str_cmp( ch->name, clans_data[clan]->primogen ) )
	{
	    free_string( clans_data[clan]->primogen );
	    clans_data[clan]->primogen = str_dup( "None" );
	}
    }
    clan_write();
    return;
}

int find_clanname( CHAR_DATA *ch )
{
    int clan;

    if ( strlen( ch->clan ) < 2 || !str_cmp( ch->clan, "None" ) ) clan = 0;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )		clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )		clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )		clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )	clan = CLAN_NONE;
    else if ( !str_cmp( ch->clan, "None" ) )		clan = CLAN_NONE;
    else return -1;
    return clan;
}