/* ....[@@@..[@@@..............[@.................. 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 ------------------------------------------------------------------------------ editor.cc */ #include "config.h" #include "io.h" #include "edit.h" #include "pc.h" #include "global.h" const String & Editor::getPrompt() { if ( !text ) return prompt; else return text->getPrompt(); } void Editor::editText( const String & initial ) { if( pc->getTextEditor() ) { String temp = initial; temp.strip( '\r' ); filename = pc->getName(); filename += ".tmp"; OutputFile outf( filename.chars() ); if( !outf ) { pc->out( "Error creating edit file.\n\r" ); return; } outf << temp << endl; outf.close(); /* command << "vi " << filename; pc->do_shell( command ); */ pcs.remove( pc ); shellpcs.addTop( pc ); pc->startShell( pc->getTextEditor(), filename ); return; } text = new TextEditor( pc, initial ); state = ED_DESC; pc->out( text->format() ); return; } void Editor::editFile( const String & name ) { savefile = name; if ( pc->getTextEditor() ) { InputFile inf(savefile); String init; if ( inf ) { init = String(inf.getBuf()); inf.close(); } init.strip( '\r' ); filename = pc->getName(); filename += ".tmp"; OutputFile outf( filename.chars() ); if( !outf ) { pc->out( "Error creating edit file.\n\r" ); return; } outf << init << endl; outf.close(); pcs.remove( pc ); shellpcs.addTop( pc ); pc->startShell( pc->getTextEditor(), filename ); return; } else { InputFile inf(savefile); if ( !inf ) { text = new TextEditor( pc, String("") ); } else { text = new TextEditor( pc, String( inf.getBuf() ) ); inf.close(); } pc->out( text->format() ); return; } } void TextfileEditor::command( const String & arg ) { if ( state == ED_NONE ) { editFile( arg ); state = ED_DESC; return; } 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(); } } delete text; pc->quitEditor(); return; } return; } else if ( filename ) { remove( savefile.chars() ); rename( filename.chars(), savefile.chars() ); remove( filename.chars() ); pc->quitEditor(); return; } }