tbamud/src/tedit.c
Rumble 047c5d0de3 Removal of outdated char_file_u warnings.
Adding of the appropropriate structs to the plrtoascii utility.
Incoorporation of changes from old circlemud CVS snapshot
this also gives more info on SYSERRors.
cleanup of zmalloc language (shit->tmp)
PRF_ROOMFLAGS has been renamed to PRF_SHOWVNUMS for clarity.
"Deaf" has been changed to "No_shout" in preference_bits, for clarity.
Addition of hindex (help index) command.
who command added argument -g and -l to check who are grouped (and 
leaders)
toggle has been expanded, and the commands nohassle, holylight, 
color, buildwalk, syslog and roomflags were moved to toggles.
renaming of some vars in dg files (xxx -> dg_xxx) for clarity.


set <player> password can now be used by other people than the first
 implementor - id check removed.


fix of a couple of minor bugs:
- crash bug related to freeing a pointer twice - ascii pfiles bug.
- host was not updated correctly after switch to ascii pfiles.

Todo: 
make "who #-#", "who #-" and "who -#" all work as "who -l #-#" did before 
Remove redundant commands which are now toggles.
Make script variables save to pfile instead of its own file.
2006-12-27 21:16:28 +00:00

155 lines
4.2 KiB
C

/*
* 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"
extern const char *credits;
extern const char *news;
extern const char *motd;
extern const char *imotd;
extern const char *GREETINGS;
extern const char *help;
extern const char *ihelp;
extern const char *info;
extern const char *background;
extern const char *handbook;
extern const char *policies;
extern const char *wizlist;
extern const char *immlist;
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},
{ "greetings", LVL_IMPL, &GREETINGS, 2400, GREETINGS_FILE},
{ "help", LVL_GRGOD, &help, 2400, HELP_PAGE_FILE},
{ "ihelp", LVL_GRGOD, &ihelp, 2400, IHELP_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},
{ "wizlist", LVL_IMPL, &wizlist, 2400, WIZLIST_FILE},
{ "immlist", LVL_GRGOD, &immlist, 2400, IMMLIST_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(PLR_FLAGS(ch), PLR_WRITING);
STATE(ch->desc) = CON_TEDIT;
}