alRom/bin/
alRom/data/class/
alRom/data/command/
alRom/data/guild/
alRom/data/help/
alRom/data/lang/
alRom/data/race/
alRom/data/religion/
alRom/data/skill/
alRom/note/
/*
 * Aalyreth MUD Server is copyright (c) 2000-2003 by Anthony Goins
 * and Anthony Dudas.  All rights reserved.
 *
 * By using any portion of this code including design or any
 * piece(whole or portion) of this base you are bound by the
 * license found in ../doc/License.txt.
 *
 * Information on getting a commercial license is found in
 * ../doc/Commercial_License.txt.
 *
 * Comments, suggestions and flames should be sent to
 * scapegoat@messiah.ath.cx
 *
 * This file is the main OLC module.
 */

 /* This file was taken from Aalyreth MUD Server, and modified by Davion */

#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include "include.h"

void HandleEditor(CHAR_DATA *ch, char *arg)
{	int Ed;
	
	// Forgot. we gotta can those extra spaces sent by something or other... or I'm wrong and no one will ever read this.
	while(isspace(*arg) ) arg++;

	if( ( Ed = GetEdByState(ch->desc->OLC_state) ) == -1 )
	{	PrintOLCMenu(ch);
		ch->desc->OLC_state = STATE_OLC_MENU;    
		return;
	}
	(*olc_ed_table[Ed].editor ) (ch, arg);
}

OLC_EDITOR(EditorMenu)
{	int i;
	
	if (arg[0] == '\0')
	{	send_to_char( "What are you going to edit?\n\r", ch);
		return;
	}

	switch (arg[0])
	{	case 'X': case 'x':
			ch->desc->OLC_state = STATE_NONE;
			send_to_char("Leaving OLC mode\n\r",ch);
		    break;
	
		default:
			i = GetEdByArg(arg);
			ch->desc->OLC_state = olc_ed_table[i].state;
			(*olc_ed_table[i].menu) (ch);
			break;
	}
}

OLC_MENU(PrintOLCMenu)
{	int i;
	int col = 0;
	bool found = FALSE;
	char buf[MSL];
	char buf2[MSL];

	send_to_char( "========================================================================\n\r", ch);
	send_to_char( "[ |         Welcome to The Other Realms Online Creation System       | ]\n\r", ch);
	send_to_char( "[ |          Written by Anthony \"Daurven\" Goins of Aalyreth          | ]\n\r", ch);
	send_to_char( "[ |                Ported to SS codebase by Davion                  | ]\n\r", ch);
	send_to_char( "[ |                                                                  | ]\n\r", ch);
	send_to_char( "[ |  To select an editor, type the number of the editor you wish to  | ]\n\r", ch);
	send_to_char( "[ |  use and press enter.  To exit the editor press \"X\" to exit.     | ]\n\r", ch);
	send_to_char( "[ |          To get help type help or help <subject>.                | ]\n\r", ch);
	send_to_char( "[ |------------------------------------------------------------------| ]\n\r[ | ", ch);
	for(i = 1; olc_ed_table[i].name != NULL ; i++ )
	{	if(!olc_ed_table[i].show)
			continue;
		sprintf(buf, "    [%d] %s", i, olc_ed_table[i].name );
		sprintf(buf2, "%-30s", buf );
		send_to_char(buf2,ch);
		if(++col % 3 == 0 ) send_to_char("\n\r[ | ",ch);
		found = TRUE;
	}
	if(!found)
		send_to_char( "        We don't currently have any OLC Editors                  | ]\n\r", ch);
	if(col % 3 ) send_to_char("\n\r",ch);
	send_to_char( "[ |------------------------------------------------------------------| ]\n\r", ch);
	send_to_char( "[ | [X] Exit Editor                                                  | ]\n\r", ch);
	send_to_char( "========================================================================\n\r", ch);
	send_to_char( "\n\r\n\rWhat is your choice? ", ch);
	return;
}


int GetEdByState( int state )
{	int i;
	for( i = 0; olc_ed_table[i].name != NULL; i++ )
	{	if( olc_ed_table[i].state == state )
			return i;
	}
	return -1;
}

int GetEdByArg ( char *arg )
{	int i, x;
	
	if( is_number(arg) )
	{	i = atoi(arg);
		for(x = 0; olc_ed_table[x].name != NULL; x++ );
		if(x < i || i < 1 )
			return 0;
		return i;
	}

	for(i = 0 ; olc_ed_table[i].name != NULL ; i++ )
	{	if(LOWER(arg[0]) == LOWER(olc_ed_table[i].name[0])
		&& !str_prefix(arg, olc_ed_table[i].name ) )
			return i;
	}
		
	return 0;
}

	
const struct olc_ed_type olc_ed_table[] =
{	{ "OLC Menu",			EditorMenu,		PrintOLCMenu,		STATE_OLC_MENU,			TRUE	},
	{ NULL, NULL, 0 }
};