X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fxio.c;h=6985cc9a7d01bbde9bc14be26bf6b8e17d75991b;hp=a84ee44192a077809e8da3bb7be703b3a89fa84b;hb=304e25e71f7d1eb24c2fa373e86b619358dffee6;hpb=a4e2f7b1e48278ae7642c8fda987a67fe8674420 diff --git a/src/xio.c b/src/xio.c index a84ee44..6985cc9 100644 --- a/src/xio.c +++ b/src/xio.c @@ -2,70 +2,161 @@ #include #include #include +#include #include #include #include +#include "sst.h" -XtAppContext app_context; -Widget toplevel, form, text; -Widget buttons, phasers, photons, destruct, quit; +static XtAppContext app_context; +static Widget toplevel, text, form; +static Widget navigation, weapons, status, planets, misc; +static Widget navlabel, weaplabel, statlabel, planlabel, misclabel; -String fallback[] = { - /* button labels */ - "*phasers.label: Phasers", - "*photons.label: Torps", - "*destruct.label: Destruct", - "*quit.label: Quit", +static String fallback[] = { /* text window resources */ "*text.resizable: true", "*text.resize: ResizeBoth", - /* layout constraints */ - "*photons.fromHoriz: phasers", - "*destruct.fromHoriz: photons", - "*quit.fromHoriz: destruct", NULL, }; -static void quit_proc (Widget w, XtPointer client_data, XtPointer call_data) +struct cmd_t { + char *name; + void (*callback)(Widget, XtPointer, XtPointer); + Widget *parent; + int enable; + Widget widget; + +}; + +static void quit_proc(Widget w, XtPointer client_data, XtPointer call_data) { XtDestroyApplicationContext (app_context); exit (0); } -int main (int argc, char **argv) +static void noargs_proc(Widget w, XtPointer client_data, XtPointer call_data) +/* use this for commands that take no arguments */ +{ + /* currently a stub */ +} + +static struct cmd_t commands[] = { + {"Move", NULL, &navigation, 0}, + {"Dock", noargs_proc, &navigation, 0}, + {"Chart", noargs_proc, &navigation, 0}, + {"Impulse", NULL, &navigation, 0}, + {"Rest", NULL, &navigation, 0}, + {"Warp", NULL, &navigation, 0}, + {"Probe", NULL, &navigation, OPTION_PROBE}, + + {"Phasers", NULL, &weapons, 0}, + {"Torpedo", NULL, &weapons, 0}, + {"Shields", NULL, &weapons, 0}, + {"Damages", noargs_proc, &weapons, 0}, + {"Abandon", noargs_proc, &weapons, 0}, + {"Destruct", noargs_proc, &weapons, 0}, + {"Deathray", noargs_proc, &weapons, 0}, + {"Mayday", noargs_proc, &weapons, 0}, + + {"Score", noargs_proc, &status, 0}, + {"Report", noargs_proc, &status, 0}, + {"Computer", noargs_proc, &status, 0}, + + {"Sensors", noargs_proc, &planets, OPTION_PLANETS}, + {"Orbit", noargs_proc, &planets, OPTION_PLANETS}, + {"Transport", noargs_proc, &planets, OPTION_PLANETS}, + {"Mine", noargs_proc, &planets, OPTION_PLANETS}, + {"Crystals", noargs_proc, &planets, OPTION_PLANETS}, + {"Shuttle", noargs_proc, &planets, OPTION_PLANETS}, + {"Planets", noargs_proc, &planets, OPTION_PLANETS}, + + {"Emexit", noargs_proc, &misc, 0}, + {"Save", NULL, &misc, 0}, + {"Quit", quit_proc, &misc, 0}, + {"Help", noargs_proc, &misc, 0}, +}; + +#define MAXWIDTH 640 +#define TEXTHEIGHT 200 + +int main(int argc, char **argv) { - toplevel = XtVaOpenApplication (&app_context, "sst2k", NULL, 0, &argc, + struct cmd_t *cp; + + toplevel = XtVaOpenApplication(&app_context, "sst2k", NULL, 0, &argc, argv, fallback, applicationShellWidgetClass, XtNallowShellResize, True, NULL); - form = XtVaCreateManagedWidget ("form", formWidgetClass, toplevel, NULL); - /* The button panel */ - buttons = XtVaCreateManagedWidget ("form", formWidgetClass, form, NULL); - phasers = XtVaCreateManagedWidget("phasers", - commandWidgetClass, buttons, - NULL); - photons = XtVaCreateManagedWidget("photons", - commandWidgetClass, buttons, - NULL); - destruct = XtVaCreateManagedWidget("destruct", - commandWidgetClass, buttons, - NULL); - quit = XtVaCreateManagedWidget("quit", - commandWidgetClass, buttons, - NULL); - XtAddCallback (quit, XtNcallback, quit_proc, NULL); + form = XtVaCreateManagedWidget("form", formWidgetClass, toplevel, NULL); /* the command window */ - text = XtVaCreateManagedWidget ("text", asciiTextWidgetClass, form, - XtNfromVert, buttons, - NULL); - - /* sample text so the widget will be identifiable */ - XtVaSetValues (text, XtNtype, XawAsciiString, - XtNstring, "Command window", NULL); - XtVaSetValues (text, XtNeditType, XawtextRead, XtNdisplayCaret, False, NULL); - XtRealizeWidget (toplevel); - XtAppMainLoop (app_context); + text = XtVaCreateManagedWidget("text", asciiTextWidgetClass, form, + XtNwidth, MAXWIDTH, XtNheight, TEXTHEIGHT, + NULL); + XtVaSetValues(text, XtNeditType,XawtextRead, XtNdisplayCaret,False, NULL); + /* The button panels */ + navigation = XtVaCreateManagedWidget("navigation", + boxWidgetClass, form, + XtNborderWidth, 0, + XtNfromVert, text, + XtNorientation, XtorientHorizontal, + NULL); + navlabel = XtVaCreateManagedWidget("Navigation: ", + labelWidgetClass, navigation, + XtNborderWidth, 0, + NULL); + weapons = XtVaCreateManagedWidget("weapons", + boxWidgetClass, form, + XtNborderWidth, 0, + XtNfromVert, navigation, + XtNorientation, XtorientHorizontal, + NULL); + weaplabel = XtVaCreateManagedWidget("Weapons: ", + labelWidgetClass, weapons, + XtNborderWidth, 0, + NULL); + status = XtVaCreateManagedWidget("status", + boxWidgetClass, form, + XtNborderWidth, 0, + XtNfromVert, weapons, + XtNorientation, XtorientHorizontal, + NULL); + statlabel = XtVaCreateManagedWidget("Status: ", + labelWidgetClass, status, + XtNborderWidth, 0, + NULL); + planets = XtVaCreateManagedWidget("planets", + boxWidgetClass, form, + XtNborderWidth, 0, + XtNfromVert, status, + XtNorientation, XtorientHorizontal, + NULL); + planlabel = XtVaCreateManagedWidget("Planets: ", + labelWidgetClass, planets, + XtNborderWidth, 0, + NULL); + misc = XtVaCreateManagedWidget("misc", + boxWidgetClass, form, + XtNborderWidth, 0, + XtNfromVert, planets, + XtNorientation, XtorientHorizontal, + NULL); + misclabel = XtVaCreateManagedWidget("Miscellaneous:", + labelWidgetClass, misc, + XtNborderWidth, 0, + NULL); + for (cp = commands; cp < commands + sizeof(commands)/sizeof(commands[0]); cp++) { + cp->widget = XtVaCreateManagedWidget(cp->name, + commandWidgetClass, + *cp->parent, + XtNlabel, cp->name, + NULL); + if (cp->callback) + XtAddCallback (cp->widget, XtNcallback, cp->callback, NULL); + } + XtRealizeWidget(toplevel); + XtAppMainLoop(app_context); /* loop may be interrupted */ - XtDestroyApplicationContext (app_context); + XtDestroyApplicationContext(app_context); exit(0); }