BUGFIXES FOR THE OLDER RELEASES OF THE NEWER IMPROVED_EDIT: ---------------------------------------------------------- [ Last Editted: Nov. 06, 1996 -- Newest changes added at the end ] There were some bugs that were reported, and here are the fixes (you can compare to your code to see if they've already been fixed or not): in modify.c::string_add() (after the following check) add the '+' marked lines: if (terminator) { /* here we check for the abort option and reset the pointers */ if ((terminator == 2) && /* you may have some extra olc stuff here */ (STATE(d) == CON_EXDESC)) { free(*d->str); if (d->backstr) { *d->str = d->backstr; } else *d->str = NULL; d->backstr = NULL; d->str = NULL; } + else if ((d->str) && (*d->str) && (**d->str == '\0')) { + free(*d->str); + *d->str = NULL; + } (still in modify.c at string_add()) add the '+' marked lines: else if (d->mail_to >= BOARD_MAGIC) { Board_save_board(d->mail_to - BOARD_MAGIC); + if (terminator == 2) SEND_TO_Q("Post not aborted, use REMOVE .\r\n", d); d->mail_to = 0; } ALSO: if you uncommented the lines out of the stuff above, so that you could use oasis olc.. then you had a missing parenthesis at the end: if (terminator) { /* here we check for the abort option and reset the pointers */ if ((terminator == 2) && UNCOMMENTED OLC STUFF IS HERE.. (STATE(d) == CON_EXDESC)) { should be changed to: (STATE(d) == CON_EXDESC))) { but like i said, ONLY if you were uncommenting those lines for the oasis stuff. ALSO, IF YOU WERE USING OASIS OLC COMPARE THESE SNIPPETS TO YOUR CODE: (and make changes as neccessary) first in oedit.c in oedit_parse() under case OEDIT_MAIN_MENU: case '4': OLC_MODE(d) = OEDIT_ACTDESC; SEND_TO_Q("Enter action description: (/s saves /h for help)\r\n\r\n", d); d->backstr = NULL; if (OLC_OBJ(d)->action_description) { SEND_TO_Q(OLC_OBJ(d)->action_description, d); d->backstr = str_dup(OLC_OBJ(d)->action_description); } d->str = &OLC_OBJ(d)->action_description; d->max_str = MAX_MESSAGE_LENGTH; d->mail_to = 0; break; next under the case OEDIT_EXTRADESC_MENU: case 2: OLC_MODE(d) = OEDIT_EXTRADESC_DESCRIPTION; SEND_TO_Q("Enter the extra description: (/s saves /h for help)\r\n\r\n", d); d->backstr = NULL; if (OLC_DESC(d)->description) { SEND_TO_Q(OLC_DESC(d)->description, d); d->backstr = str_dup(OLC_DESC(d)->description); } d->str = &OLC_DESC(d)->description; d->max_str = MAX_MESSAGE_LENGTH; d->mail_to = 0; OLC_VAL(d) = 1; return; now in redit.c in redit_parse().. under case REDIT_MAIN_MENU: case '2': OLC_MODE(d) = REDIT_DESC; SEND_TO_Q("\x1B[H\x1B[J", d); SEND_TO_Q("Enter room description: (/s saves /h for help)\r\n\r\n", d); d->backstr = NULL; if (OLC_ROOM(d)->description) { SEND_TO_Q(OLC_ROOM(d)->description, d); d->backstr = str_dup(OLC_ROOM(d)->description); } d->str = &OLC_ROOM(d)->description; d->max_str = MAX_ROOM_DESC; d->mail_to = 0; OLC_VAL(d) = 1; break; under case REDIT_EXIT_MENU: case '2': OLC_MODE(d) = REDIT_EXIT_DESCRIPTION; SEND_TO_Q("Enter exit description: (/s saves /h for help)\r\n\r\n", d); d->backstr = NULL; if (OLC_EXIT(d)->general_description) { SEND_TO_Q(OLC_EXIT(d)->general_description, d); d->backstr = str_dup(OLC_EXIT(d)->general_description); } d->str = &OLC_EXIT(d)->general_description; d->max_str = MAX_EXIT_DESC; d->mail_to = 0; return; and under case REDIT_EXTRADESC_MENU: case 2: case 2: OLC_MODE(d) = REDIT_EXTRADESC_DESCRIPTION; SEND_TO_Q("Enter extra description: (/s saves /h for help)\r\n\r\n", d); d->backstr = NULL; if (OLC_DESC(d)->description) { SEND_TO_Q(OLC_DESC(d)->description, d); d->backstr = str_dup(OLC_DESC(d)->description); } d->str = &OLC_DESC(d)->description; d->max_str = MAX_MESSAGE_LENGTH; d->mail_to = 0; return; NOW, in medit.c in medit_parse().. under MEDIT_MAIN_MENU: case '5': OLC_MODE(d) = MEDIT_D_DESC; SEND_TO_Q("Enter mob description: (/s saves /h for help)\r\n\r\n", d); d->backstr = NULL; if (OLC_MOB(d)->player.description) { SEND_TO_Q(OLC_MOB(d)->player.description, d); d->backstr = str_dup(OLC_MOB(d)->player.description); } d->str = &OLC_MOB(d)->player.description; d->max_str = MAX_MOB_DESC; d->mail_to = 0; return; And, after changing the lines in modify.c to handle NULL messages correctly (see the first bugfix up top) you need to change the following statement below in string_add() also: } } else if (!d->connected && (PLR_FLAGGED(d->character, PLR_MAILING))) { if ((terminator == 1) && *d->str) { /* ^^^^^^^ line above is changed ^^^^^^ */ store_mail(d->mail_to, GET_IDNUM(d->character), *d->str); SEND_TO_Q("Message sent!\r\n", d); } Have fun, and as always report errors or fixes to: Michael Scott