/*
* Originally written by: Michael Scott -- Manx.
* Last known e-mail address: scottm@workcomm.net
*
* XXX: This needs Oasis-ifying.
*/
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "interpreter.h"
#include "comm.h"
#include "db.h"
#include "genolc.h"
#include "oasis.h"
#include "improved-edit.h"
#include "tedit.h"
extern const char *credits;
extern const char *news;
extern const char *motd;
extern const char *imotd;
extern const char *help;
extern const char *info;
extern const char *background;
extern const char *handbook;
extern const char *policies;
void tedit_string_cleanup(struct descriptor_data *d, int terminator)
{
FILE *fl;
char *storage = OLC_STORAGE(d);
if (!storage)
terminator = STRINGADD_ABORT;
switch (terminator) {
case STRINGADD_SAVE:
if (!(fl = fopen(storage, "w")))
mudlog(CMP, LVL_IMPL, TRUE, "SYSERR: Can't write file '%s'.", storage);
else {
if (*d->str) {
strip_cr(*d->str);
fputs(*d->str, fl);
}
fclose(fl);
mudlog(CMP, LVL_GOD, TRUE, "OLC: %s saves '%s'.", GET_NAME(d->character), storage);
write_to_output(d, "Saved.\r\n");
}
break;
case STRINGADD_ABORT:
write_to_output(d, "Edit aborted.\r\n");
act("$n stops editing some scrolls.", TRUE, d->character, 0, 0, TO_ROOM);
break;
default:
log("SYSERR: tedit_string_cleanup: Unknown terminator status.");
break;
}
/* Common cleanup code. */
cleanup_olc(d, CLEANUP_ALL);
STATE(d) = CON_PLAYING;
}
ACMD(do_tedit)
{
int l, i = 0;
char field[MAX_INPUT_LENGTH];
char *backstr = NULL;
struct {
char *cmd;
char level;
const char **buffer;
int size;
char *filename;
} fields[] = {
/* edit the lvls to your own needs */
{ "credits", LVL_IMPL, &credits, 2400, CREDITS_FILE},
{ "news", LVL_GRGOD, &news, 8192, NEWS_FILE},
{ "motd", LVL_GRGOD, &motd, 2400, MOTD_FILE},
{ "imotd", LVL_IMPL, &imotd, 2400, IMOTD_FILE},
{ "help", LVL_GRGOD, &help, 2400, HELP_PAGE_FILE},
{ "info", LVL_GRGOD, &info, 8192, INFO_FILE},
{ "background", LVL_IMPL, &background, 8192, BACKGROUND_FILE},
{ "handbook", LVL_IMPL, &handbook, 8192, HANDBOOK_FILE},
{ "policies", LVL_IMPL, &policies, 8192, POLICIES_FILE},
{ "\n", 0, NULL, 0, NULL }
};
if (ch->desc == NULL)
return;
one_argument(argument, field);
if (!*field) {
send_to_char(ch, "Files available to be edited:\r\n");
for (l = 0; *fields[l].cmd != '\n'; l++) {
if (GET_LEVEL(ch) >= fields[l].level) {
send_to_char(ch, "%-11.11s ", fields[l].cmd);
if (!(++i % 7))
send_to_char(ch, "\r\n");
}
}
if (i % 7)
send_to_char(ch, "\r\n");
if (i == 0)
send_to_char(ch, "None.\r\n");
return;
}
for (l = 0; *(fields[l].cmd) != '\n'; l++)
if (!strncmp(field, fields[l].cmd, strlen(field)))
break;
if (*fields[l].cmd == '\n') {
send_to_char(ch, "Invalid text editor option.\r\n");
return;
}
if (GET_LEVEL(ch) < fields[l].level) {
send_to_char(ch, "You are not godly enough for that!\r\n");
return;
}
/* set up editor stats */
clear_screen(ch->desc);
send_editor_help(ch->desc);
send_to_char(ch, "Edit file below:\r\n\r\n");
if (ch->desc->olc) {
mudlog(BRF, LVL_IMMORT, TRUE, "SYSERR: do_tedit: Player already had olc structure.");
free(ch->desc->olc);
}
CREATE(ch->desc->olc, struct oasis_olc_data, 1);
if (*fields[l].buffer) {
send_to_char(ch, "%s", *fields[l].buffer);
backstr = strdup(*fields[l].buffer);
}
OLC_STORAGE(ch->desc) = strdup(fields[l].filename);
string_write(ch->desc, (char **)fields[l].buffer, fields[l].size, 0, backstr);
act("$n begins editing a scroll.", TRUE, ch, 0, 0, TO_ROOM);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
STATE(ch->desc) = CON_TEDIT;
}