/* ....[@@@..[@@@..............[@.................. 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@falcon.mercer.peachnet.edu MUD++ development mailing list mudpp-list@spice.com ------------------------------------------------------------------------------ edit.h */ #ifndef _EDIT_H #define _EDIT_H #include "string.h" #include "llist.h" #include "index.h" #include "indexable.h" #include "server.h" #include "room.h" #include "bit.h" #include "pc.h" class NPC; class Area; class Room; class Object; class Editor { protected: // Since objects/npcs have no index, need an index while // editing, before inserting into a IndexList PC *pc; Index index; int state; int state_last; public: Editor() : pc(0), state(0), state_last(0) { } Editor( PC * x ) : pc(x), state(0), state_last(0) { } Editor( PC * x, const Index & y ) : pc(x), index(y), state(0), state_last(0) { } virtual void command( String & ) = 0; const Index & getIndex() { return index; } void setIndex( const Index & x ) { index = x; } }; class RoomEditor : public Editor { protected: Room *room; public: RoomEditor() : room(0) { } RoomEditor( PC * x, Room * y ) : Editor(x), room(y) { } virtual void command( String & ); }; class NPCEditor : public Editor { protected: NPC *npc; public: NPCEditor() : npc(0) { } NPCEditor( PC * x, NPC * y ) : Editor(x), npc(y) { } virtual void command( String & ); }; class ObjectEditor : public Editor { protected: Object *obj; public: ObjectEditor() : obj(0) { } ObjectEditor( PC * x, Object * y ) : Editor(x), obj(y) { } virtual void command( String & ); }; class AreaEditor : public Editor { protected: Area *area; public: AreaEditor() : area(0) { } AreaEditor( PC * x, Area * y ) : Editor(x), area(y) { } virtual void command( String & ); }; #define MAX_LINES 256 #define EDIT_APPEND 1 class TextEditor : public Editor { protected: int lines; int current; int clipped; String output; String text[ MAX_LINES + 1 ]; String clipboard[32]; public: TextEditor() : lines(0), current(0), clipped(0) { } TextEditor( String str ) : lines(0), current(0), clipped(0) { for( int i = 1; i < MAX_LINES; i++ ) { text[ i - 1 ] = str.getLine( i ); if( !text[ i - 1 ] ) break; lines++; } } TextEditor( const char * ) : lines(0), current(0), clipped(0) { } virtual void command( String & ); const char *chars(); const String & asStr(); const String & operator [] ( int i ); const String & format(); void clr(); void clrLine( int ); void cutLine( int ); void insertLine( const String &, int ); void insertLine( const char *, int ); void replaceLine( const String &, int ); void replaceLine( const char *, int ); void cutLines( int, int ); void pasteLines( int ); void append( const char * ); void append( const String & ); }; #endif