+/*
+ * Problems with this code:
+ * 1. The text window behaves like it's only a few lines high,
+ * scrolling in response to Return when the insertion point
+ * is nowhere near the last line.
+ * 2. The attempt to insert text with XawTextReplace() core dumps.
+ * 3. I haven't found a way to write a callback that triggers on Return
+ * and yields the line before the return. The explanation at
+ * http://www.linuxjunkies.org/programming/GUI/xwindow/x11/text.html
+ * hints that this may be difficult.
+ *
+ * The functional goal is this:
+ * 1. Button pushes should be able to insert commands at the buffer's
+ * current insertion point.
+ * 2. When a user finishes a command with Return, a callback should
+ * receive the line of input typed.
+ *
+ * All the input passed to the game in back of this will be lines full
+ * of commands generated either by typing into the text buffer directly
+ * or by button presses that generate text unto the buffer.
+ */
#include <stdlib.h>
+#include <stdio.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/AsciiText.h>
-#include "sst.h"
+//#include "sst.h"
+#define OPTION_PLANETS 1
+#define OPTION_PROBE 2
static XtAppContext app_context;
static Widget toplevel, text, form;
exit (0);
}
+static void text_append_to(Widget w, String str)
+/* append text to a specified text widget */
+{
+ XawTextBlock txtblk;
+ XawTextPosition textend = XawTextGetInsertionPoint(w);
+
+ txtblk.ptr = str;
+ txtblk.length = strlen(str);
+ txtblk.firstPos = 0;
+ txtblk.format = FMT8BIT;
+
+ XawTextReplace(w, textend, textend, &txtblk);
+}
+
static void noargs_proc(Widget w, XtPointer client_data, XtPointer call_data)
/* use this for commands that take no arguments */
{
/* currently a stub */
+ text_append_to(w, XtName(w));
printf("Button %s pressed\n", XtName(w));
}
misclabel = XtVaCreateManagedWidget("misclabel",
labelWidgetClass, misc,
NULL);
- for (cp = commands; cp < commands + sizeof(commands)/sizeof(commands[0]); cp++) {
+ for (cp = commands; cp < commands + ARRAY_SIZE(commands); cp++) {
cp->widget = XtVaCreateManagedWidget(cp->name,
commandWidgetClass,
*cp->parent,