/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project. All
................................................ contributions are welcome.
....Copyright(C).1995.Melvin.Smith.............. Enjoy.
------------------------------------------------------------------------------
Melvin Smith (aka Fusion) msmith@hom.net
MUD++ development mailing list mudpp@van.ml.org
------------------------------------------------------------------------------
edithelp.cc
*/
#include "config.h"
#include "string.h"
#include "edit.h"
#include "help.h"
#include "pc.h"
void HelpEditor::command( const String & arg )
{
String str;
String arg1;
String arg2;
int val1;
arg.startArgs();
arg1 = arg.getArg();
arg2 = arg.getArgRest();
if ( text )
{
text->command( arg );
if ( text->done() )
{
if ( text->getState() != ED_CANCEL )
{
OutputFile outf(savefile.chars());
if ( !outf )
{
pc->out("Error creating file.\n\r");
}
else
{
outf << text->asStr();
outf.close();
savefile.clr();
}
}
delete text;
text = 0;
state = ED_NONE;
help->unlock();
return;
}
return;
}
else if ( filename )
{
state = ED_NONE;
remove( savefile.chars() );
rename( filename.chars(), savefile.chars() );
remove( filename.chars() );
help->unlock();
filename.clr();
savefile.clr();
return;
}
if ( !help )
{
pc->out("No help.\n\r");
return;
}
if ( !(bool)arg || (arg == "\n") )
{
str << "Keywords: " << help->getName() <<endl;
str << "Filename: " << help->getFileName() <<endl;
str << "Level: " << help->getLevel() <<endl;
str << "Spec bits: " << listBits(help_bit_list, help->help_bits) << endl;
str << "Priv needed: " << listBits(priv_bit_list, &(help->priv_needed)) << endl;
pc->out(str);
return;
}
if ( arg1 == "view" )
{
str << HELP_DIR << "/" << help->getFileName();
pc->view(str);
return;
}
else if ( arg1 == "level" )
{
if ( !arg2.isNumber() )
return;
help->setLevel(arg2.asInt() );
pc->out("Level set.\n\r");
return;
}
else if ( (arg1 == "keywords") || (arg1 == "name") )
{
Help::remove(help);
help->setName(arg2);
Help::add(help);
pc->out("Keywords set.\n\r");
return;
}
else if ( arg1 == "text" )
{
if ( !(bool)(help->getFileName()) )
{
pc->out("First set filename.\n\r");
return;
}
if ( help->isLocked() )
{
pc->out("Somebody else is editing it now.\n\r");
return;
}
str << HELP_DIR << "/" << help->getFileName();
editFile( str );
state = ED_DESC;
help->lock();
return;
}
else if ( arg1 == "filename" )
{
if ( !(bool)arg2 || !arg2.legalFilename() )
{
pc->out("Illegal filename.\n\r");
return;
}
str << HELP_DIR << "/" << arg2;
InputFile inf(str);
if (inf)
{
pc->out("This filename is used now. Try another one.\n\r");
return;
}
help->setFileName(arg2);
return;
}
else if ( arg1 == "claim" )
{
if ( !(bool)arg2 || !arg2.legalFilename() )
{
pc->out("Illegal filename.\n\r");
return;
}
str << HELP_DIR << "/" << arg2;
InputFile inf(str);
if (!inf)
{
pc->out("No such filename. Check and type it again or use 'filename'"
" to create a new one\n\r");
return;
}
help->setFileName(arg2);
return;
}
else if ( arg1 == "all" )
{
TOGGLE_BIT( help->help_bits, ALL_CAN_READ );
pc->out("'All can read' bit toggled.\n\r");
return;
}
else if ( arg1 == "no-title" )
{
TOGGLE_BIT( help->help_bits, NO_TITLE );
pc->out( "'No title' bit toggled.\n\r");
return;
}
else if ( arg1 == "priv" )
{
// change priv bits
if (!(val1 = lookupBit ( priv_bit_list, arg2 )))
{
pc->out("No such privilage bit. See help privilages.\n\r");
return;
}
TOGGLE_BIT( &(help->priv_needed), val1 );
pc->out("Changed access rights to help.\n\r");
return;
}
else if ( arg1 == "help" )
{
pc->view("../help/hedit.hlp");
pc->page("");
return;
}
}