#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "define.h"
#include "struct.h"
const char* list_word ( int, int );
/*
* LIST EDITING
*/
const char* list_entry [ MAX_LIST ][ 30 ] =
{
{ "Lists", "Permissions", "Create Food", "LS-Species",
"LS-Reagent", "FF-Species", "FF-Reagent",
"RA-Species", "RA-Reagent", "FM-Species", "FM-Reagent",
"CE-Species", "CE-Reagent", "CG-Species", "CG-Reagent", "" },
{ "All Rooms", "Help", "Mobs", "Objects", "Write All",
"Edit Players", "Site Names", "Private Email", "Tables", "Lists",
"All Mobs", "Accounts", "Passwords", "All Objects", "Rooms",
"Exp", "Ban Sites", "Switch", "" },
{ "30", "Item", "O" },
{ "30", "Mob", "M" },
{ "30", "Item", "O" },
{ "30", "Mob", "M" },
{ "30", "Item", "O" },
{ "30", "Mob", "M" },
{ "30", "Item", "O" },
{ "30", "Mob", "M" },
{ "30", "Item", "O" },
{ "30", "Mob", "M" },
{ "30", "Item", "O" },
{ "30", "Mob", "M" },
{ "30", "Item", "O" }
};
int list_value [ MAX_LIST ][ 30 ];
const char* list_word( int list, int i )
{
const char* blank = "-blank-";
obj_clss_data* obj_clss;
species_data* species;
if( *list_entry[list][2] == 'O' ) {
obj_clss = get_obj_index( list_value[list][i] );
return( obj_clss == NULL ? blank : obj_clss->Name( ) );
}
if( *list_entry[list][2] == 'M' ) {
species = get_species( list_value[list][i] );
return( species == NULL ? blank : species->descr->name );
}
return empty_string;
}
void do_ledit( char_data* ch, char* argument )
{
wizard_data* wizard;
int i;
wizard = (wizard_data*) ch;
if( *argument == '\0' ) {
display_array( ch, "Lists", &list_entry[0][0],
&list_entry[0][1], MAX_LIST );
return;
}
for( i = 0; i < MAX_LIST; i++ )
if( !strncasecmp( argument, list_entry[0][i], strlen( argument ) ) ) {
send( ch, "Ledit now operates on list '%s'.\n\r", list_entry[0][i] );
wizard->list_edit = i;
return;
}
send( ch, "No list with that name found.\n\r" );
return;
}
void do_lstat( char_data* ch, char* )
{
char tmp [ TWO_LINES ];
wizard_data* imm;
int list;
int i;
int number;
imm = wizard( ch );
list = imm->list_edit;
if( list < 0 || list >= MAX_LIST ) {
bug( "Lstat: List editted out of range" );
return;
}
page( ch, "%s:\n\r", list_entry[0][list] );
if( isdigit( *list_entry[list][0] ) ) {
number = atoi( list_entry[list][0] );
for( i = 0; i < number; i++ ) {
sprintf( tmp, "%6s[%2d] : %-5d%-20s",
list_entry[list][1], i, list_value[list][i],
list_word( list, i ) );
truncate( tmp, 38 );
page( ch, tmp );
if( i%2 == 1 )
page( ch, "\n\r" );
}
}
else {
for( i = 0; *list_entry[list][i] != '\0'; i++ ) {
sprintf( tmp, "%18s : %-10d%s",
list_entry[list][i], list_value[list][i],
i%2 ? "\n\r" : "" );
page( ch, tmp );
}
}
if( i%2 == 1 )
page( ch, "\n\r" );
return;
}
void do_lset( char_data* ch, char* argument )
{
char arg [ MAX_INPUT_LENGTH ];
wizard_data* imm;
int list;
int i;
int number;
int length;
if( *argument == '\0' ) {
do_lstat( ch, "" );
return;
}
imm = wizard( ch );
list = imm->list_edit;
if( list_value[0][list] > get_trust( ch ) ) {
send( ch, "You need to be level %d to edit '%s' list.\n\r",
list_value[0][list], list_entry[0][list] );
return;
}
argument = one_argument( argument, arg );
if( isdigit( *list_entry[list][0] ) ) {
number = atoi( list_entry[list][0] );
i = atoi( arg );
if( i < 0 || i >= number ) {
send( ch, "Index for list out of range.\n\r" );
return;
}
number = atoi( argument );
send( ch, "List entry %d set to %d.\n\r", i, number );
}
else {
length = strlen( arg );
for( i = 0; ; i++ ) {
if( *list_entry[list][i] == '\0' ) {
send( "Entry not found in list.\n\r", ch );
return;
}
if( !strncasecmp( arg, list_entry[list][i], length ) )
break;
}
number = atoi( argument );
send( ch, "List entry '%s' set to %d.\n\r",
list_entry[list][i], number );
}
list_value[list][i] = number;
return;
}
/*
* DISK ROUTINES
*/
void save_lists( void )
{
char tmp [ ONE_LINE ];
FILE* fp;
int i,j,k;
sprintf( tmp, "%s%s", TABLE_DIR, "Lists" );
if( ( fp = fopen( tmp, "w" ) ) == NULL ) {
perror( tmp );
exit( 1 );
}
for( i = 0; i < MAX_LIST; i++ ) {
for( j = 0; j < 3; j++ ) {
for( k = 0; k < 10; k++ )
fprintf( fp, "%4d ", list_value[i][10*j+k] );
fprintf( fp, "\n" );
}
fprintf( fp, "\n" );
}
fclose( fp );
return;
}
void load_lists( void )
{
FILE* fp;
int i, j;
fprintf( stderr, "Loading Lists...\n\r" );
fp = open_file( TABLE_DIR, "Lists", "r" );
for( i = 0; i < MAX_LIST; i++ )
for( j = 0; j < 30; j++ )
list_value[i][j] = fread_number( fp );
fclose( fp );
return;
}