/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * File: aedit.c * * Comment: OLC for MUDs -- this one edits socials * * by Michael Scott <scottm@workcomm.net> -- 06/10/96 * * for use with OasisOLC * * ftpable from ftp.circlemud.org:/pub/CircleMUD/contrib/code * * Part of OLC+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "conf.h" #include "sysdep.h" #include "structs.h" #include "interpreter.h" #include "handler.h" #include "comm.h" #include "utils.h" #include "db.h" #include "olc.h" #include "screen.h" extern int top_of_socialt; extern struct social_messg *soc_mess_list; extern char *position_types[]; /* WARNING: if you have added diagonal directions and have them at the * beginning of the command list.. change this value to 11 or 15 (depending) */ /* reserve these commands to come straight from the cmd list then start * sorting */ #define RESERVE_CMDS 7 /* external functs */ void sort_commands(void); /* aedit patch -- M. Scott */ void create_command_list(void); void free_action(struct social_messg *action); /* function protos */ void aedit_disp_menu(struct descriptor_data * d); void aedit_parse(struct descriptor_data * d, char *arg); void aedit_setup_new(struct descriptor_data *d); void aedit_setup_existing(struct descriptor_data *d, int real_num); void aedit_save_to_disk(struct descriptor_data *d); void aedit_save_internally(struct descriptor_data *d); /* * Utils and exported functions. */ void aedit_setup_new(struct descriptor_data *d) { CREATE(OLC_ACTION(d), struct social_messg, 1); OLC_ACTION(d)->command = str_dup(OLC_STORAGE(d)); OLC_ACTION(d)->sort_as = str_dup(OLC_STORAGE(d)); OLC_ACTION(d)->hide = 0; OLC_ACTION(d)->min_victim_position = POS_STANDING; OLC_ACTION(d)->min_char_position = POS_STANDING; OLC_ACTION(d)->min_level_char = 0; OLC_ACTION(d)->char_no_arg = str_dup("This action is unfinished."); OLC_ACTION(d)->others_no_arg = str_dup("This action is unfinished."); OLC_ACTION(d)->char_found = NULL; OLC_ACTION(d)->others_found = NULL; OLC_ACTION(d)->vict_found = NULL; OLC_ACTION(d)->not_found = NULL; OLC_ACTION(d)->char_auto = NULL; OLC_ACTION(d)->others_auto = NULL; OLC_ACTION(d)->char_body_found = NULL; OLC_ACTION(d)->others_body_found = NULL; OLC_ACTION(d)->vict_body_found = NULL; OLC_ACTION(d)->char_obj_found = NULL; OLC_ACTION(d)->others_obj_found = NULL; aedit_disp_menu(d); OLC_VAL(d) = 0; } /*------------------------------------------------------------------------*/ void aedit_setup_existing(struct descriptor_data *d, int real_num) { CREATE(OLC_ACTION(d), struct social_messg, 1); OLC_ACTION(d)->command = str_dup(soc_mess_list[real_num].command); OLC_ACTION(d)->sort_as = str_dup(soc_mess_list[real_num].sort_as); OLC_ACTION(d)->hide = soc_mess_list[real_num].hide; OLC_ACTION(d)->min_victim_position = soc_mess_list[real_num].min_victim_position; OLC_ACTION(d)->min_char_position = soc_mess_list[real_num].min_char_position; OLC_ACTION(d)->min_level_char = soc_mess_list[real_num].min_level_char; if (soc_mess_list[real_num].char_no_arg) OLC_ACTION(d)->char_no_arg = str_dup(soc_mess_list[real_num].char_no_arg); if (soc_mess_list[real_num].others_no_arg) OLC_ACTION(d)->others_no_arg = str_dup(soc_mess_list[real_num].others_no_arg); if (soc_mess_list[real_num].char_found) OLC_ACTION(d)->char_found = str_dup(soc_mess_list[real_num].char_found); if (soc_mess_list[real_num].others_found) OLC_ACTION(d)->others_found = str_dup(soc_mess_list[real_num].others_found); if (soc_mess_list[real_num].vict_found) OLC_ACTION(d)->vict_found = str_dup(soc_mess_list[real_num].vict_found); if (soc_mess_list[real_num].not_found) OLC_ACTION(d)->not_found = str_dup(soc_mess_list[real_num].not_found); if (soc_mess_list[real_num].char_auto) OLC_ACTION(d)->char_auto = str_dup(soc_mess_list[real_num].char_auto); if (soc_mess_list[real_num].others_auto) OLC_ACTION(d)->others_auto = str_dup(soc_mess_list[real_num].others_auto); if (soc_mess_list[real_num].char_body_found) OLC_ACTION(d)->char_body_found = str_dup(soc_mess_list[real_num].char_body_found); if (soc_mess_list[real_num].others_body_found) OLC_ACTION(d)->others_body_found = str_dup(soc_mess_list[real_num].others_body_found); if (soc_mess_list[real_num].vict_body_found) OLC_ACTION(d)->vict_body_found = str_dup(soc_mess_list[real_num].vict_body_found); if (soc_mess_list[real_num].char_obj_found) OLC_ACTION(d)->char_obj_found = str_dup(soc_mess_list[real_num].char_obj_found); if (soc_mess_list[real_num].others_obj_found) OLC_ACTION(d)->others_obj_found = str_dup(soc_mess_list[real_num].others_obj_found); OLC_VAL(d) = 0; aedit_disp_menu(d); } void aedit_save_internally(struct descriptor_data *d) { struct social_messg *new_soc_mess_list = NULL; int i; /* add a new social into the list */ if (OLC_ZNUM(d) > top_of_socialt) { CREATE(new_soc_mess_list, struct social_messg, top_of_socialt + 2); for (i = 0; i <= top_of_socialt; i++) new_soc_mess_list[i] = soc_mess_list[i]; new_soc_mess_list[++top_of_socialt] = *OLC_ACTION(d); free(soc_mess_list); soc_mess_list = new_soc_mess_list; create_command_list(); sort_commands(); } /* pass the editted action back to the list - no need to add */ else { i = find_command(OLC_ACTION(d)->command); OLC_ACTION(d)->act_nr = soc_mess_list[OLC_ZNUM(d)].act_nr; /* why did i do this..? hrm */ free_action(soc_mess_list + OLC_ZNUM(d)); soc_mess_list[OLC_ZNUM(d)] = *OLC_ACTION(d); if (i > NOTHING) { complete_cmd_info[i].command = soc_mess_list[OLC_ZNUM(d)].command; complete_cmd_info[i].sort_as = soc_mess_list[OLC_ZNUM(d)].sort_as; complete_cmd_info[i].minimum_position = soc_mess_list[OLC_ZNUM(d)].min_char_position; complete_cmd_info[i].minimum_level = soc_mess_list[OLC_ZNUM(d)].min_level_char; } } olc_add_to_save_list(AEDIT_PERMISSION, OLC_SAVE_ACTION); } /*------------------------------------------------------------------------*/ void aedit_save_to_disk(struct descriptor_data *d) { FILE *fp; int i; if (!(fp = fopen(SOCMESS_FILE, "w+"))) { sprintf(buf, "Can't open socials file '%s'", SOCMESS_FILE); perror(buf); exit(1); } for (i = 0; i <= top_of_socialt; i++) { sprintf(buf, "~%s %s %d %d %d %Ld\n", soc_mess_list[i].command, soc_mess_list[i].sort_as, soc_mess_list[i].hide, soc_mess_list[i].min_char_position, soc_mess_list[i].min_victim_position, soc_mess_list[i].min_level_char); fputs(buf, fp); sprintf(buf, "%s\n%s\n%s\n%s\n", ((soc_mess_list[i].char_no_arg)?soc_mess_list[i].char_no_arg:"#"), ((soc_mess_list[i].others_no_arg)?soc_mess_list[i].others_no_arg:"#"), ((soc_mess_list[i].char_found)?soc_mess_list[i].char_found:"#"), ((soc_mess_list[i].others_found)?soc_mess_list[i].others_found:"#")); fputs(buf, fp); sprintf(buf, "%s\n%s\n%s\n%s\n", ((soc_mess_list[i].vict_found)?soc_mess_list[i].vict_found:"#"), ((soc_mess_list[i].not_found)?soc_mess_list[i].not_found:"#"), ((soc_mess_list[i].char_auto)?soc_mess_list[i].char_auto:"#"), ((soc_mess_list[i].others_auto)?soc_mess_list[i].others_auto:"#")); fputs(buf, fp); sprintf(buf, "%s\n%s\n%s\n", ((soc_mess_list[i].char_body_found)?soc_mess_list[i].char_body_found:"#"), ((soc_mess_list[i].others_body_found)?soc_mess_list[i].others_body_found:"#"), ((soc_mess_list[i].vict_body_found)?soc_mess_list[i].vict_body_found:"#")); fputs(buf, fp); sprintf(buf, "%s\n%s\n\n", ((soc_mess_list[i].char_obj_found)?soc_mess_list[i].char_obj_found:"#"), ((soc_mess_list[i].others_obj_found)?soc_mess_list[i].others_obj_found:"#")); fputs(buf, fp); } fprintf(fp, "$\n"); fclose(fp); olc_remove_from_save_list(AEDIT_PERMISSION, OLC_SAVE_ACTION); } /*------------------------------------------------------------------------*/ /* Menu functions */ /* the main menu */ void aedit_disp_menu(struct descriptor_data * d) { struct social_messg *action = OLC_ACTION(d); struct char_data *ch = d->character; get_char_cols(ch); sprintf(buf, "\x1B[H\x1B[J" "%s-- Action editor\r\n\r\n" "%sn%s) Command : %s%-15.15s%s %s1%s) Sort as Command : %s%-15.15s%s\r\n" "%s2%s) Min Position[CH]: %s%-8.8s %s3%s) Min Position [VT]: %s%-8.8s\r\n" "%s4%s) Min Level [CH]: %s%-9Ld %s5%s) Show if Invisible: %s%s\r\n" "%sa%s) Char [NO ARG]: %s%s\r\n" "%sb%s) Others [NO ARG]: %s%s\r\n" "%sc%s) Char [NOT FOUND]: %s%s\r\n" "%sd%s) Char [ARG SELF]: %s%s\r\n" "%se%s) Others[ARG SELF]: %s%s\r\n" "%sf%s) Char [VICT]: %s%s\r\n" "%sg%s) Others [VICT]: %s%s\r\n" "%sh%s) Victim [VICT]: %s%s\r\n" "%si%s) Char [BODY PRT]: %s%s\r\n" "%sj%s) Others[BODY PRT]: %s%s\r\n" "%sk%s) Victim[BODY PRT]: %s%s\r\n" "%sl%s) Char [OBJ]: %s%s\r\n" "%sm%s) Others [OBJ]: %s%s\r\n" "%sq%s) Quit\r\n", nrm, grn, nrm, yel, action->command, nrm, grn, nrm, yel, action->sort_as, nrm, grn, nrm, cyn, position_types[action->min_char_position], grn, nrm, cyn, position_types[action->min_victim_position], grn, nrm, cyn, action->min_level_char, grn, nrm, cyn, (action->hide?"HIDDEN":"NOT HIDDEN"), grn, nrm, cyn, action->char_no_arg ? action->char_no_arg : "<Null>", grn, nrm, cyn, action->others_no_arg ? action->others_no_arg : "<Null>", grn, nrm, cyn, action->not_found ? action->not_found : "<Null>", grn, nrm, cyn, action->char_auto ? action->char_auto : "<Null>", grn, nrm, cyn, action->others_auto ? action->others_auto : "<Null>", grn, nrm, cyn, action->char_found ? action->char_found : "<Null>", grn, nrm, cyn, action->others_found ? action->others_found : "<Null>", grn, nrm, cyn, action->vict_found ? action->vict_found : "<Null>", grn, nrm, cyn, action->char_body_found ? action->char_body_found : "<Null>", grn, nrm, cyn, action->others_body_found ? action->others_body_found : "<Null>", grn, nrm, cyn, action->vict_body_found ? action->vict_body_found : "<Null>", grn, nrm, cyn, action->char_obj_found ? action->char_obj_found : "<Null>", grn, nrm, cyn, action->others_obj_found ? action->others_obj_found : "<Null>", grn, nrm); strcat(buf,"\r\n"); strcat(buf, "Enter choice: "); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_MAIN_MENU; } /* * The main loop */ void aedit_parse(struct descriptor_data * d, char *arg) { int i; switch (OLC_MODE(d)) { case AEDIT_CONFIRM_SAVESTRING: switch (*arg) { case 'y': case 'Y': aedit_save_internally(d); sprintf(buf, "OLC: %s edits action %s", GET_NAME(d->character), OLC_ACTION(d)->command); mudlog(buf, CMP, LVL_IMPL, TRUE); /* do not free the strings.. just the structure */ cleanup_olc(d, CLEANUP_STRUCTS); send_to_char("Action saved to memory.\r\n", d->character); break; case 'n': case 'N': /* free everything up, including strings etc */ cleanup_olc(d, CLEANUP_ALL); break; default: send_to_char("Invalid choice!\r\nDo you wish to save this action internally? ", d->character); break; } return; /* end of AEDIT_CONFIRM_SAVESTRING */ case AEDIT_CONFIRM_EDIT: switch (*arg) { case 'y': case 'Y': aedit_setup_existing(d, OLC_ZNUM(d)); break; case 'q': case 'Q': cleanup_olc(d, CLEANUP_ALL); break; case 'n': case 'N': OLC_ZNUM(d)++; for (;(OLC_ZNUM(d) <= top_of_socialt); OLC_ZNUM(d)++) if (is_abbrev(OLC_STORAGE(d), soc_mess_list[OLC_ZNUM(d)].command)) break; if (OLC_ZNUM(d) > top_of_socialt) { if (find_command(OLC_STORAGE(d)) > NOTHING) { cleanup_olc(d, CLEANUP_ALL); break; } sprintf(buf, "Do you wish to add the '%s' action? ", OLC_STORAGE(d)); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_CONFIRM_ADD; } else { sprintf(buf, "Do you wish to edit the '%s' action? ", soc_mess_list[OLC_ZNUM(d)].command); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_CONFIRM_EDIT; } break; default: sprintf(buf, "Invalid choice!\r\nDo you wish to edit the '%s' action? ", soc_mess_list[OLC_ZNUM(d)].command); send_to_char(buf, d->character); break; } return; case AEDIT_CONFIRM_ADD: switch (*arg) { case 'y': case 'Y': aedit_setup_new(d); break; case 'n': case 'N': case 'q': case 'Q': cleanup_olc(d, CLEANUP_ALL); break; default: sprintf(buf, "Invalid choice!\r\nDo you wish to add the '%s' action? ", OLC_STORAGE(d)); send_to_char(buf, d->character); break; } return; case AEDIT_MAIN_MENU: switch (*arg) { case 'q': case 'Q': if (OLC_VAL(d)) { /* Something was modified */ send_to_char("Do you wish to save this action internally? ", d->character); OLC_MODE(d) = AEDIT_CONFIRM_SAVESTRING; } else cleanup_olc(d, CLEANUP_ALL); break; case 'n': send_to_char("Enter action name: ", d->character); OLC_MODE(d) = AEDIT_ACTION_NAME; return; case '1': send_to_char("Enter sort info for this action (for the command listing): ", d->character); OLC_MODE(d) = AEDIT_SORT_AS; return; case '2': send_to_char("Enter the minimum position the Character has to be in to activate social [0 - 8]: ", d->character); OLC_MODE(d) = AEDIT_MIN_CHAR_POS; return; case '3': send_to_char("Enter the minimum position the Victim has to be in to activate social [0 - 8]: ", d->character); OLC_MODE(d) = AEDIT_MIN_VICT_POS; return; case '4': send_to_char("Enter new minimum level for social: ", d->character); OLC_MODE(d) = AEDIT_MIN_CHAR_LEVEL; return; case '5': OLC_ACTION(d)->hide = !OLC_ACTION(d)->hide; aedit_disp_menu(d); OLC_VAL(d) = 1; break; case 'a': case 'A': sprintf(buf, "Enter social shown to the Character when there is no argument supplied.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->char_no_arg)?OLC_ACTION(d)->char_no_arg:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_NOVICT_CHAR; return; case 'b': case 'B': sprintf(buf, "Enter social shown to Others when there is no argument supplied.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->others_no_arg)?OLC_ACTION(d)->others_no_arg:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_NOVICT_OTHERS; return; case 'c': case 'C': sprintf(buf, "Enter text shown to the Character when his victim isnt found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->not_found)?OLC_ACTION(d)->not_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_NOT_FOUND; return; case 'd': case 'D': sprintf(buf, "Enter social shown to the Character when it is its own victim.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->char_auto)?OLC_ACTION(d)->char_auto:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_SELF_CHAR; return; case 'e': case 'E': sprintf(buf, "Enter social shown to Others when the Char is its own victim.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->others_auto)?OLC_ACTION(d)->others_auto:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_SELF_OTHERS; return; case 'f': case 'F': sprintf(buf, "Enter normal social shown to the Character when the victim is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->char_found)?OLC_ACTION(d)->char_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_CHAR_FOUND; return; case 'g': case 'G': sprintf(buf, "Enter normal social shown to Others when the victim is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->others_found)?OLC_ACTION(d)->others_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_OTHERS_FOUND; return; case 'h': case 'H': sprintf(buf, "Enter normal social shown to the Victim when the victim is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->vict_found)?OLC_ACTION(d)->vict_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_VICT_FOUND; return; case 'i': case 'I': sprintf(buf, "Enter 'body part' social shown to the Character when the victim is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->char_body_found)?OLC_ACTION(d)->char_body_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_CHAR_BODY_FOUND; return; case 'j': case 'J': sprintf(buf, "Enter 'body part' social shown to Others when the victim is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->others_body_found)?OLC_ACTION(d)->others_body_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_OTHERS_BODY_FOUND; return; case 'k': case 'K': sprintf(buf, "Enter 'body part' social shown to the Victim when the victim is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->vict_body_found)?OLC_ACTION(d)->vict_body_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_VICT_VICT_BODY_FOUND; return; case 'l': case 'L': sprintf(buf, "Enter 'object' social shown to the Character when the object is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->char_obj_found)?OLC_ACTION(d)->char_obj_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_OBJ_CHAR_FOUND; return; case 'm': case 'M': sprintf(buf, "Enter 'object' social shown to the Room when the object is found.\r\n[OLD]: %s\r\n[NEW]: ", ((OLC_ACTION(d)->others_obj_found)?OLC_ACTION(d)->others_obj_found:"NULL")); send_to_char(buf, d->character); OLC_MODE(d) = AEDIT_OBJ_OTHERS_FOUND; return; default: aedit_disp_menu(d); break; } return; case AEDIT_ACTION_NAME: if (*arg) { if (strchr(arg,' ')) { aedit_disp_menu(d); return; } else { if (OLC_ACTION(d)->command) free(OLC_ACTION(d)->command); OLC_ACTION(d)->command = str_dup(arg); } } else { aedit_disp_menu(d); return; } break; case AEDIT_SORT_AS: if (*arg) { if (strchr(arg,' ')) { aedit_disp_menu(d); return; } else { if (OLC_ACTION(d)->sort_as) free(OLC_ACTION(d)->sort_as); OLC_ACTION(d)->sort_as = str_dup(arg); } } else { aedit_disp_menu(d); return; } break; case AEDIT_MIN_CHAR_POS: case AEDIT_MIN_VICT_POS: if (*arg) { i = atoi(arg); if ((i < 0) && (i > POS_STANDING)) { aedit_disp_menu(d); return; } else { if (OLC_MODE(d) == AEDIT_MIN_CHAR_POS) OLC_ACTION(d)->min_char_position = i; else OLC_ACTION(d)->min_victim_position = i; } } else { aedit_disp_menu(d); return; } break; case AEDIT_MIN_CHAR_LEVEL: if (*arg) { i = atoi(arg); if ((i < 0) && (i > LVL_IMPL)) { aedit_disp_menu(d); return; } else OLC_ACTION(d)->min_level_char = i; } else { aedit_disp_menu(d); return; } break; case AEDIT_NOVICT_CHAR: if (OLC_ACTION(d)->char_no_arg) free(OLC_ACTION(d)->char_no_arg); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->char_no_arg = str_dup(arg); } else OLC_ACTION(d)->char_no_arg = NULL; break; case AEDIT_NOVICT_OTHERS: if (OLC_ACTION(d)->others_no_arg) free(OLC_ACTION(d)->others_no_arg); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->others_no_arg = str_dup(arg); } else OLC_ACTION(d)->others_no_arg = NULL; break; case AEDIT_VICT_CHAR_FOUND: if (OLC_ACTION(d)->char_found) free(OLC_ACTION(d)->char_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->char_found = str_dup(arg); } else OLC_ACTION(d)->char_found = NULL; break; case AEDIT_VICT_OTHERS_FOUND: if (OLC_ACTION(d)->others_found) free(OLC_ACTION(d)->others_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->others_found = str_dup(arg); } else OLC_ACTION(d)->others_found = NULL; break; case AEDIT_VICT_VICT_FOUND: if (OLC_ACTION(d)->vict_found) free(OLC_ACTION(d)->vict_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->vict_found = str_dup(arg); } else OLC_ACTION(d)->vict_found = NULL; break; case AEDIT_VICT_NOT_FOUND: if (OLC_ACTION(d)->not_found) free(OLC_ACTION(d)->not_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->not_found = str_dup(arg); } else OLC_ACTION(d)->not_found = NULL; break; case AEDIT_SELF_CHAR: if (OLC_ACTION(d)->char_auto) free(OLC_ACTION(d)->char_auto); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->char_auto = str_dup(arg); } else OLC_ACTION(d)->char_auto = NULL; break; case AEDIT_SELF_OTHERS: if (OLC_ACTION(d)->others_auto) free(OLC_ACTION(d)->others_auto); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->others_auto = str_dup(arg); } else OLC_ACTION(d)->others_auto = NULL; break; case AEDIT_VICT_CHAR_BODY_FOUND: if (OLC_ACTION(d)->char_body_found) free(OLC_ACTION(d)->char_body_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->char_body_found = str_dup(arg); } else OLC_ACTION(d)->char_body_found = NULL; break; case AEDIT_VICT_OTHERS_BODY_FOUND: if (OLC_ACTION(d)->others_body_found) free(OLC_ACTION(d)->others_body_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->others_body_found = str_dup(arg); } else OLC_ACTION(d)->others_body_found = NULL; break; case AEDIT_VICT_VICT_BODY_FOUND: if (OLC_ACTION(d)->vict_body_found) free(OLC_ACTION(d)->vict_body_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->vict_body_found = str_dup(arg); } else OLC_ACTION(d)->vict_body_found = NULL; break; case AEDIT_OBJ_CHAR_FOUND: if (OLC_ACTION(d)->char_obj_found) free(OLC_ACTION(d)->char_obj_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->char_obj_found = str_dup(arg); } else OLC_ACTION(d)->char_obj_found = NULL; break; case AEDIT_OBJ_OTHERS_FOUND: if (OLC_ACTION(d)->others_obj_found) free(OLC_ACTION(d)->others_obj_found); if (*arg) { delete_doubledollar(arg); OLC_ACTION(d)->others_obj_found = str_dup(arg); } else OLC_ACTION(d)->others_obj_found = NULL; break; default: /* we should never get here */ break; } OLC_VAL(d) = 1; aedit_disp_menu(d); }