nakedmud-mod/
nakedmud-mod/html/tutorials/
nakedmud-mod/html/tutorials/building_extras/
nakedmud-mod/html/tutorials/c/
nakedmud-mod/html/tutorials/reference/
nakedmud-mod/html/tutorials/scripting/
nakedmud-mod/html/tutorials/scripting_extras/
nakedmud-mod/lib/
nakedmud-mod/lib/help/A/
nakedmud-mod/lib/help/B/
nakedmud-mod/lib/help/C/
nakedmud-mod/lib/help/D/
nakedmud-mod/lib/help/G/
nakedmud-mod/lib/help/H/
nakedmud-mod/lib/help/J/
nakedmud-mod/lib/help/L/
nakedmud-mod/lib/help/M/
nakedmud-mod/lib/help/O/
nakedmud-mod/lib/help/P/
nakedmud-mod/lib/help/R/
nakedmud-mod/lib/help/S/
nakedmud-mod/lib/help/W/
nakedmud-mod/lib/logs/
nakedmud-mod/lib/misc/
nakedmud-mod/lib/players/
nakedmud-mod/lib/pymodules/polc/
nakedmud-mod/lib/txt/
nakedmud-mod/lib/world/
nakedmud-mod/lib/world/zones/examples/
nakedmud-mod/lib/world/zones/examples/mproto/
nakedmud-mod/lib/world/zones/examples/oproto/
nakedmud-mod/lib/world/zones/examples/reset/
nakedmud-mod/lib/world/zones/examples/rproto/
nakedmud-mod/lib/world/zones/examples/trigger/
nakedmud-mod/lib/world/zones/limbo/
nakedmud-mod/lib/world/zones/limbo/room/
nakedmud-mod/lib/world/zones/limbo/rproto/
nakedmud-mod/src/alias/
nakedmud-mod/src/dyn_vars/
nakedmud-mod/src/editor/
nakedmud-mod/src/example_module/
nakedmud-mod/src/help2/
nakedmud-mod/src/set_val/
nakedmud-mod/src/socials/
nakedmud-mod/src/time/
//*****************************************************************************
//
// notepad.c
//
// Here is the proof of concept for the editor utility. This is a basic text
// editor that allows players to write/read information contained within a
// notepad.
//
//*****************************************************************************

#include "../mud.h"
#include "../utils.h"
#include "../inform.h"
#include "../auxiliary.h"
#include "../socket.h"
#include "../character.h"
#include "editor.h"



//*****************************************************************************
// mandatory modules
//*****************************************************************************
#include "../scripts/scripts.h"
#include "../scripts/pychar.h"
#include "../scripts/script_editor.h"



//*****************************************************************************
// auxiliary data for sockets
//*****************************************************************************
typedef struct notepad_data {
  BUFFER *notepad;
} NOTEPAD_DATA;

NOTEPAD_DATA *newNotepadData() {
  NOTEPAD_DATA *data = malloc(sizeof(NOTEPAD_DATA));
  data->notepad = newBuffer(1);
  return data;
}

void deleteNotepadData(NOTEPAD_DATA *data) {
  if(data->notepad) deleteBuffer(data->notepad);
  free(data);
}



//*****************************************************************************
// local datastructures, functions, and commands for players
//*****************************************************************************
void socketStartNotepad(SOCKET_DATA *sock, EDITOR *editor) {
  NOTEPAD_DATA *data = socketGetAuxiliaryData(sock, "notepad_data");
  socketStartEditor(sock, editor, data->notepad);
}

COMMAND(cmd_write) {
  if(!charGetSocket(ch))
    text_to_char(ch, "You need an attached socket for that!\r\n");
  else {
    message(ch, NULL, NULL, NULL, TRUE, TO_ROOM, 
	    "$n pulls out a pen and begins jotting notes down.");
    if(!strcasecmp(arg, "script"))
      socketStartNotepad(charGetSocket(ch), script_editor);
    else
      socketStartNotepad(charGetSocket(ch), text_editor);
  }
}

COMMAND(cmd_notepad) {
  if(!charGetSocket(ch))
    text_to_char(ch, "You need an attached socket for that!\r\n");
  else {
    SOCKET_DATA *sock = charGetSocket(ch);
    NOTEPAD_DATA *data = socketGetAuxiliaryData(sock, "notepad_data");
    if(!*bufferString(data->notepad))
      text_to_char(ch, "Your notepad is empty.\r\n");
    else
      text_to_char(ch, bufferString(data->notepad));
  }
}

BUFFER *socketGetNotepad(SOCKET_DATA *sock) {
  NOTEPAD_DATA *data = socketGetAuxiliaryData(sock, "notepad_data");
  return data->notepad;
}

void socketSetNotepad(SOCKET_DATA *sock, const char *txt) {
  NOTEPAD_DATA *data = socketGetAuxiliaryData(sock, "notepad_data");
  bufferClear(data->notepad);
  bufferCat(data->notepad, txt);
}

PyObject *PyChar_getnotepad(PyObject *self, void *closure) {
  CHAR_DATA *ch = PyChar_AsChar(self);
  if(ch != NULL && charGetSocket(ch) != NULL) 
    return Py_BuildValue("s", 
			 (charGetSocket(ch) ? 
			  bufferString(socketGetNotepad(charGetSocket(ch))) :
			  ""));
  else           
    return NULL;
}



//*****************************************************************************
// setting everything up...
//*****************************************************************************
void init_notepad() {
  // install the editor components
  auxiliariesInstall("notepad_data", 
		     newAuxiliaryFuncs(AUXILIARY_TYPE_SOCKET,
				       newNotepadData, deleteNotepadData,
				       NULL, NULL, NULL, NULL));

  // install our commands
  add_cmd("write",   NULL, cmd_write,   "player", TRUE);
  add_cmd("notepad", NULL, cmd_notepad, "player", TRUE);

  // add our python extensions
  PyChar_addGetSetter("notepad", PyChar_getnotepad, NULL,
		      "Returns the character's notepad, if any");
}