int GuiListDel(const char *dlogid, const char *id, int from, int to) { McpMesg msg; McpFrame *mfr; char numbuf[32]; int descr = gui_dlog_get_descr(dlogid); mfr = descr_mcpframe(descr); if (!mfr) { return EGUINODLOG; } if (GuiSupported(descr)) { mcp_mesg_init(&msg, GUI_PACKAGE, "list-delete"); mcp_mesg_arg_append(&msg, "dlogid", dlogid); mcp_mesg_arg_append(&msg, "id", id); if (from == GUI_LIST_END) { mcp_mesg_arg_append(&msg, "from", "end"); } else { snprintf(numbuf, sizeof(numbuf), "%d", from); mcp_mesg_arg_append(&msg, "from", numbuf); } if (to == GUI_LIST_END) { mcp_mesg_arg_append(&msg, "to", "end"); } else { snprintf(numbuf, sizeof(numbuf), "%d", to); mcp_mesg_arg_append(&msg, "to", numbuf); } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); return 0; } return EGUINOSUPPORT; }
int GuiMenuItem(const char *dlogid, const char *id, const char *type, const char *name, const char **args) { McpMesg msg; McpFrame *mfr; int i; int descr = gui_dlog_get_descr(dlogid); mfr = descr_mcpframe(descr); if (!mfr) { return EGUINODLOG; } if (GuiSupported(descr)) { mcp_mesg_init(&msg, GUI_PACKAGE, "menu-item"); mcp_mesg_arg_append(&msg, "dlogid", dlogid); mcp_mesg_arg_append(&msg, "id", id); mcp_mesg_arg_append(&msg, "name", name); mcp_mesg_arg_append(&msg, "type", name); i = 0; while (args && args[i]) { const char *arg = args[i]; const char *val = args[i + 1]; mcp_mesg_arg_append(&msg, arg, val); i += 2; } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); return 0; } return EGUINOSUPPORT; }
int GuiSetVal(const char *dlogid, const char *id, int lines, const char **value) { McpMesg msg; McpFrame *mfr; int i; int descr = gui_dlog_get_descr(dlogid); mfr = descr_mcpframe(descr); if (!mfr) { return EGUINODLOG; } if (GuiSupported(descr)) { mcp_mesg_init(&msg, GUI_PACKAGE, "ctrl-value"); mcp_mesg_arg_append(&msg, "dlogid", dlogid); mcp_mesg_arg_append(&msg, "id", id); for (i = 0; i < lines; i++) { mcp_mesg_arg_append(&msg, "value", value[i]); } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); gui_value_set_local(dlogid, id, lines, value); return 0; } return EGUINOSUPPORT; }
int GuiListInsert(const char *dlogid, const char *id, int after, int lines, const char **value) { McpMesg msg; McpFrame *mfr; char numbuf[32]; int i; int descr = gui_dlog_get_descr(dlogid); mfr = descr_mcpframe(descr); if (!mfr) { return EGUINODLOG; } if (GuiSupported(descr)) { mcp_mesg_init(&msg, GUI_PACKAGE, "list-insert"); mcp_mesg_arg_append(&msg, "dlogid", dlogid); mcp_mesg_arg_append(&msg, "id", id); if (after > 0) { snprintf(numbuf, sizeof(numbuf), "%d", after); mcp_mesg_arg_append(&msg, "after", numbuf); } for (i = 0; i < lines; i++) { mcp_mesg_arg_append(&msg, "values", value[i]); } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); return 0; } return EGUINOSUPPORT; }
const char * GuiHelper(int descr, const char *title, int pagecount, const char **pagenames, const char **pageids, Gui_CB callback, GuiErr_CB error_cb, void *context) { McpMesg msg; McpFrame *mfr = descr_mcpframe(descr); const char *id; int i; if (!mfr) { return NULL; } if (GuiSupported(descr)) { id = gui_dlog_alloc(descr, callback, error_cb, context); mcp_mesg_init(&msg, GUI_PACKAGE, "dlog-create"); mcp_mesg_arg_append(&msg, "dlogid", id); mcp_mesg_arg_append(&msg, "type", "helper"); mcp_mesg_arg_append(&msg, "title", title); for (i = 0; i < pagecount; i++) { mcp_mesg_arg_append(&msg, "panes", pageids[i]); mcp_mesg_arg_append(&msg, "names", pagenames[i]); } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); return id; } else { return NULL; } }
void do_mcpedit(int descr, dbref player, const char *name) { dbref i; struct match_data md; McpFrame *mfr; if (!(mfr = descr_mcpframe(descr))) { do_edit(descr, player, name); return; } else if (Typeof(player) != TYPE_PLAYER) { anotify_nolisten2(player, CFAIL "Only players can edit programs."); return; } else if (!Mucker(player)) { anotify_nolisten2(player, CFAIL NOMBIT_MESG); return; } else if (tp_db_readonly) { anotify_nolisten2(player, CFAIL DBRO_MESG); return; } else if (!*name) { anotify_nolisten2(player, CINFO "No program name given."); return; } init_match(descr, player, name, TYPE_PROGRAM, &md); match_possession(&md); match_neighbor(&md); match_registered(&md); match_absolute(&md); if ((i = noisy_match_result(&md)) == NOTHING || i == AMBIGUOUS) return; mcpedit_program(descr, player, i, name, mfr); }
void do_mcpprogram(int descr, dbref player, const char *name) { dbref i; McpFrame *mfr; struct match_data md; if (!(mfr = descr_mcpframe(descr))) { do_prog(descr, player, name); return; } else if (Typeof(player) != TYPE_PLAYER) { anotify_nolisten2(player, CFAIL "Only players can edit programs."); return; } else if (!Mucker(player)) { anotify_nolisten2(player, CFAIL NOMBIT_MESG); return; } else if (!tp_building || tp_db_readonly) { anotify_nolisten2(player, CFAIL NOBUILD_MESG); return; } else if (!*name) { anotify_nolisten2(player, CINFO "No program name given."); return; } init_match(descr, player, name, TYPE_PROGRAM, &md); match_possession(&md); match_neighbor(&md); match_registered(&md); match_absolute(&md); if ((i = match_result(&md)) == NOTHING) { i = new_program(OWNER(player), name); DBFETCH(player)->sp.player.curr_prog = i; anotify_fmt(player, CSUCC "Program %s created with number %d.", name, i); } else if (i == AMBIGUOUS) { anotify_nolisten2(player, CINFO "I don't know which one you mean!"); return; } else { if ((Typeof(i) != TYPE_PROGRAM) || !controls(player, i)) { anotify_fmt(player, CFAIL "%s", tp_noperm_mesg); return; } else if (FLAGS(i) & INTERNAL) { anotify_nolisten2(player, CFAIL NOEDIT_MESG); return; } DBFETCH(i)->sp.program.first = read_program(i); DBFETCH(player)->sp.player.curr_prog = i; anotify_fmt(player, CINFO "Entering editor for %s.", unparse_object(player, i)); DBDIRTY(i); } mcpedit_program(descr, player, i, name, mfr); DBDIRTY(player); }
int gui_ctrl_make_l(const char *dlogid, const char *type, const char *pane, const char *id, const char *text, const char *value, int layout, ...) { va_list ap; McpMesg msg; McpFrame *mfr; int descr; va_start(ap, layout); descr = gui_dlog_get_descr(dlogid); mfr = descr_mcpframe(descr); if (!mfr) { va_end(ap); return EGUINODLOG; } if (GuiSupported(descr)) { char cmdname[64]; snprintf(cmdname, sizeof(cmdname), "ctrl-%.55s", type); mcp_mesg_init(&msg, GUI_PACKAGE, cmdname); gui_ctrl_process_layout(&msg, layout); mcp_mesg_arg_append(&msg, "dlogid", dlogid); mcp_mesg_arg_append(&msg, "id", id); if (text) mcp_mesg_arg_append(&msg, "text", text); if (value) { mcp_mesg_arg_append(&msg, "value", value); if (id) { gui_value_set_local(dlogid, id, 1, &value); } } if (pane) mcp_mesg_arg_append(&msg, "pane", pane); while (1) { const char *val; const char *arg; arg = va_arg(ap, const char *); if (!arg) break; val = va_arg(ap, const char *); mcp_mesg_arg_append(&msg, arg, val); } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); va_end(ap); return 0; } va_end(ap); return EGUINOSUPPORT; }
McpVer GuiVersion(int descr) { McpVer supp = { 0, 0 }; McpFrame *mfr; mfr = descr_mcpframe(descr); if (mfr) { supp = mcp_frame_package_supported(mfr, GUI_PACKAGE); } return supp; }
int gui_ctrl_make_v(const char *dlogid, const char *type, const char *pane, const char *id, const char *text, const char *value, int layout, const char **args) { McpMesg msg; McpFrame *mfr; int descr; int i; descr = gui_dlog_get_descr(dlogid); mfr = descr_mcpframe(descr); if (!mfr) { return EGUINODLOG; } if (GuiSupported(descr)) { char cmdname[64]; snprintf(cmdname, sizeof(cmdname), "ctrl-%.55s", type); mcp_mesg_init(&msg, GUI_PACKAGE, cmdname); gui_ctrl_process_layout(&msg, layout); mcp_mesg_arg_append(&msg, "dlogid", dlogid); mcp_mesg_arg_append(&msg, "id", id); if (text) mcp_mesg_arg_append(&msg, "text", text); if (value) { mcp_mesg_arg_append(&msg, "value", value); if (id) { gui_value_set_local(dlogid, id, 1, &value); } } if (pane) mcp_mesg_arg_append(&msg, "pane", pane); i = 0; while (args && args[i]) { const char *arg = args[i]; const char *val = args[i + 1]; if (id && !string_compare(arg, "value")) { gui_value_set_local(dlogid, id, 1, &val); } mcp_mesg_arg_append(&msg, arg, val); i += 2; } mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); return 0; } return EGUINOSUPPORT; }
int GuiSupported(int descr) { McpVer supp; McpFrame *mfr; mfr = descr_mcpframe(descr); if (mfr) { supp = mcp_frame_package_supported(mfr, GUI_PACKAGE); if (supp.verminor != 0 || supp.vermajor != 0) { return 1; } } return 0; }
int GuiClose(const char *id) { McpMesg msg; McpFrame *mfr; int descr = gui_dlog_get_descr(id); mfr = descr_mcpframe(descr); if (!mfr) { return EGUINODLOG; } if (GuiSupported(descr)) { if (!GuiClosed(id)) { mcp_mesg_init(&msg, GUI_PACKAGE, "dlog-close"); mcp_mesg_arg_append(&msg, "dlogid", id); mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); } return 0; } return EGUINOSUPPORT; }
const char * GuiSimple(int descr, const char *title, Gui_CB callback, GuiErr_CB error_cb, void *context) { McpMesg msg; McpFrame *mfr = descr_mcpframe(descr); const char *id; if (!mfr) { return NULL; } if (GuiSupported(descr)) { id = gui_dlog_alloc(descr, callback, error_cb, context); mcp_mesg_init(&msg, GUI_PACKAGE, "dlog-create"); mcp_mesg_arg_append(&msg, "dlogid", id); mcp_mesg_arg_append(&msg, "type", "simple"); mcp_mesg_arg_append(&msg, "title", title); mcp_frame_output_mesg(mfr, &msg); mcp_mesg_clear(&msg); return id; } else { return NULL; } }