/* * 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 = (char *)d->olc; if (!storage) terminator = STRINGADD_ABORT; switch (terminator) { case STRINGADD_SAVE: if (!(fl = fopen(storage, "w"))) { sprintf(buf, "SYSERR: Can't write file '%s'.", storage); mudlog(buf, CMP, LVL_IMPL, TRUE); } else { if (*d->str) { strip_cr(*d->str); fputs(*d->str, fl); } fclose(fl); sprintf(buf, "OLC: %s saves '%s'.", GET_NAME(d->character), storage); mudlog(buf, CMP, LVL_GOD, TRUE); SEND_TO_Q("Saved.\r\n", d); } break; case STRINGADD_ABORT: SEND_TO_Q("Edit aborted.\r\n", d); 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. */ if (d->olc) { free(d->olc); d->olc = NULL; } STATE(d) = CON_PLAYING; } ACMD(do_tedit) { int l, i; 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; half_chop(argument, field, buf); if (!*field) { strcpy(buf, "Files available to be edited:\r\n"); i = 1; for (l = 0; *fields[l].cmd != '\n'; l++) { if (GET_LEVEL(ch) >= fields[l].level) { sprintf(buf, "%s%-11.11s", buf, fields[l].cmd); if (!(i % 7)) strcat(buf, "\r\n"); i++; } } if (--i % 7) strcat(buf, "\r\n"); if (i == 0) strcat(buf, "None.\r\n"); send_to_char(buf, ch); 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("Invalid text editor option.\r\n", ch); return; } if (GET_LEVEL(ch) < fields[l].level) { send_to_char("You are not godly enough for that!\r\n", ch); return; } /* set up editor stats */ clear_screen(ch->desc); send_editor_help(ch->desc); send_to_char("Edit file below:\r\n\r\n", ch); if (*fields[l].buffer) { send_to_char(*fields[l].buffer, ch); backstr = str_dup(*fields[l].buffer); } ch->desc->olc = str_dup(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); STATE(ch->desc) = CON_TEDIT; }