#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/AsciiText.h>
#include <X11/Shell.h>
#include <stdio.h>
#include <stdlib.h>
#include "xgc.h"
#define DEFINE_TILE
#include "tile"
#include "main.h"
static void fill_up_commandform(Widget);
static void quit(void);
static void quitAction(Widget, XEvent *, String *, Cardinal *);
static void clear_test_window(void);
static void clear_result_window(void);
static void set_foreground_and_background(void);
#ifdef notdef
int fildes[2];
FILE *outend;
#endif
XStuff X;
Boolean recording = FALSE;
XtAppContext appcontext;
static Atom wm_delete_window;
static XtActionsRec actions[] = {
{"quit", quitAction}
};
static Widget bigdaddy;
Widget topform;
Widget GCform;
static Widget Testform;
Widget testchoiceform;
ChoiceDesc *testchoicedesc;
static Widget commandform;
Widget test;
Widget result;
static Widget runbutton;
static Widget clearbutton;
Widget recordbutton;
static Widget playbackbutton;
static Widget keyinputbutton;
static Widget GCchoices[NUMCHOICES];
ChoiceDesc *GCdescs[NUMCHOICES];
Widget planemaskchoice;
Widget dashlistchoice;
static Widget linewidthchoice;
Widget linewidthtext;
static Widget fontchoice;
Widget fonttext;
static Widget foregroundchoice;
Widget foregroundtext;
static Widget backgroundchoice;
Widget backgroundtext;
static Widget percentchoice;
int
main(int argc, char *argv[])
{
static Arg shellargs[] = {
{XtNinput, (XtArgVal) True}
};
static Arg testformargs[] = {
{XtNfromVert, (XtArgVal) NULL}
};
static Arg commandformargs[] = {
{XtNfromVert, (XtArgVal) NULL},
{XtNfromHoriz, (XtArgVal) NULL}
};
static Arg testargs[] = {
{XtNheight, (XtArgVal) 400},
{XtNwidth, (XtArgVal) 400},
{XtNfromHoriz, (XtArgVal) NULL}
};
static Arg resultargs[] = {
{XtNheight, (XtArgVal) 50},
{XtNwidth, (XtArgVal) 400},
{XtNfromHoriz, (XtArgVal) NULL},
{XtNfromVert, (XtArgVal) NULL}
};
static Arg gcchoiceargs[] = {
{XtNfromVert, (XtArgVal) NULL},
{XtNfromHoriz, (XtArgVal) NULL},
{XtNborderWidth, (XtArgVal) 0}
};
static Arg testchoiceargs[] = {
{XtNborderWidth, (XtArgVal) 0}
};
int i;
#ifdef notdef
pipe(fildes);
outend = fdopen(fildes[0],"r");
#endif
XtSetLanguageProc(NULL, (XtLanguageProc) NULL, NULL);
bigdaddy = XtAppInitialize(&appcontext, "Xgc", (XrmOptionDescList) NULL,
(Cardinal) 0, &argc, argv, (String *) NULL,
shellargs, XtNumber(shellargs));
X.dpy = XtDisplay(bigdaddy);
XtAppAddActions(appcontext, actions, XtNumber(actions));
XtOverrideTranslations
(bigdaddy, XtParseTranslationTable("<Message>WM_PROTOCOLS: quit()"));
X.scr = DefaultScreenOfDisplay(X.dpy);
X.gc = XCreateGC(X.dpy,RootWindowOfScreen(X.scr),0,(XGCValues *) NULL);
X.miscgc = XCreateGC(X.dpy,RootWindowOfScreen(X.scr),0,(XGCValues *) NULL);
set_foreground_and_background();
topform = XtCreateManagedWidget("topform",formWidgetClass,bigdaddy,
NULL,0);
GCform = XtCreateManagedWidget("GCform",formWidgetClass,topform,
NULL,0);
for (i=0;i<NUMCHOICES;++i) {
if (i==0)
gcchoiceargs[0].value = (XtArgVal) NULL;
else
gcchoiceargs[0].value = (XtArgVal) GCchoices[i-1];
GCchoices[i] = XtCreateManagedWidget(Everything[i]->choice.text,
formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
GCdescs[i] = create_choice(GCchoices[i],Everything[i]);
}
gcchoiceargs[0].value = (XtArgVal) GCchoices[NUMCHOICES-1];
planemaskchoice = XtCreateManagedWidget("planemask",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
create_planemask_choice(planemaskchoice);
gcchoiceargs[0].value = (XtArgVal) planemaskchoice;
dashlistchoice = XtCreateManagedWidget("dashlist",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
create_dashlist_choice(dashlistchoice);
gcchoiceargs[0].value = (XtArgVal) dashlistchoice;
linewidthchoice = XtCreateManagedWidget("linewidth",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
linewidthtext = create_text_choice(linewidthchoice,TLineWidth,2,30);
gcchoiceargs[0].value = (XtArgVal) linewidthchoice;
fontchoice = XtCreateManagedWidget("font",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
fonttext = create_text_choice(fontchoice,TFont,80,300);
gcchoiceargs[0].value = (XtArgVal) fontchoice;
foregroundchoice = XtCreateManagedWidget("foreground",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
foregroundtext = create_text_choice(foregroundchoice,TForeground,4,50);
gcchoiceargs[1].value = (XtArgVal) foregroundchoice;
backgroundchoice = XtCreateManagedWidget("background",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
backgroundtext = create_text_choice(backgroundchoice,TBackground,4,50);
gcchoiceargs[1].value = (XtArgVal) NULL;
gcchoiceargs[0].value = (XtArgVal) foregroundchoice;
percentchoice = XtCreateManagedWidget("testpercent",formWidgetClass,GCform,
gcchoiceargs,XtNumber(gcchoiceargs));
X.percent = 1.0;
create_testfrac_choice(percentchoice);
line_up_labels(GCdescs,(int) XtNumber(GCdescs));
testformargs[0].value = (XtArgVal) GCform;
Testform = XtCreateManagedWidget("Testform",formWidgetClass,topform,
testformargs,XtNumber(testformargs));
testchoiceform = XtCreateManagedWidget("testchoiceform",formWidgetClass,
Testform,testchoiceargs,XtNumber(testchoiceargs));
testchoicedesc = create_choice(testchoiceform,Everything[CTest]);
commandformargs[0].value = (XtArgVal) GCform;
commandformargs[1].value = (XtArgVal) Testform;
commandform = XtCreateManagedWidget("commandform",formWidgetClass,topform,
commandformargs,XtNumber(commandformargs));
fill_up_commandform(commandform);
testargs[2].value = (XtArgVal) GCform;
test = XtCreateManagedWidget("test",widgetClass,topform,
testargs,XtNumber(testargs));
resultargs[2].value = (XtArgVal) GCform;
resultargs[3].value = (XtArgVal) test;
result = XtCreateManagedWidget("result",asciiTextWidgetClass,topform,
resultargs,XtNumber(resultargs));
XtRealizeWidget(bigdaddy);
X.win = XtWindow(test);
X.tile = XCreatePixmap(X.dpy,X.win,tile_width,tile_height,
DefaultDepthOfScreen(X.scr));
X.tile = XCreatePixmapFromBitmapData(X.dpy,X.win,
(char *)tile_bits,tile_width,
tile_height,Black,White,
DefaultDepthOfScreen(X.scr));
X.stipple = XCreateBitmapFromData(X.dpy,X.win,(char *)tile_bits,tile_width,
tile_height);
XSetStipple(X.dpy,X.gc,X.stipple);
XSetStipple(X.dpy,X.miscgc,X.stipple);
GC_change_foreground(X.foreground,TRUE);
GC_change_background(X.background,TRUE);
wm_delete_window = XInternAtom(X.dpy, "WM_DELETE_WINDOW", False);
(void) XSetWMProtocols(X.dpy, XtWindow(bigdaddy), &wm_delete_window, 1);
choose_defaults(GCdescs,(int)XtNumber(GCdescs));
choose_defaults(&testchoicedesc,1);
XtAppMainLoop(appcontext);
return 0;
}
static void
fill_up_commandform(Widget w)
{
static XtCallbackRec runcallbacklist[] = {
{(XtCallbackProc) run_test, NULL},
{NULL, NULL}
};
static XtCallbackRec quitcallbacklist[] = {
{(XtCallbackProc) quit, NULL},
{NULL, NULL}
};
static XtCallbackRec clearcallbacklist[] = {
{(XtCallbackProc) clear_test_window, NULL},
{(XtCallbackProc) clear_result_window, NULL},
{NULL, NULL}
};
static XtCallbackRec playbackcallbacklist[] = {
{(XtCallbackProc) start_playback, NULL},
{NULL, NULL}
};
static XtCallbackRec keyinputcallbacklist[] = {
{(XtCallbackProc) read_from_keyboard, NULL},
{NULL, NULL}
};
static XtCallbackRec recordcallbacklist[] = {
{(XtCallbackProc) toggle_recordbutton, NULL},
{NULL, NULL}
};
static Arg runargs[] = {
{XtNcallback, (XtArgVal) NULL}
};
static Arg clearargs[] = {
{XtNcallback, (XtArgVal) NULL},
{XtNfromVert, (XtArgVal) NULL},
{XtNvertDistance,(XtArgVal) 10}
};
static Arg recordargs[] = {
{XtNcallback, (XtArgVal) NULL},
{XtNfromVert, (XtArgVal) NULL},
{XtNvertDistance,(XtArgVal) 10},
{XtNresizable, (XtArgVal) True}
};
static Arg playbackargs[] = {
{XtNcallback, (XtArgVal) NULL},
{XtNfromVert, (XtArgVal) NULL}
};
static Arg keyinputargs[] = {
{XtNcallback, (XtArgVal) NULL},
{XtNfromVert, (XtArgVal) NULL}
};
static Arg quitargs[] = {
{XtNcallback, (XtArgVal) NULL},
{XtNfromVert, (XtArgVal) NULL},
{XtNvertDistance,(XtArgVal) 10}
};
runargs[0].value = (XtArgVal) runcallbacklist;
runbutton = XtCreateManagedWidget("Run",commandWidgetClass,
w,runargs,XtNumber(runargs));
clearargs[0].value = (XtArgVal) clearcallbacklist;
clearargs[1].value = (XtArgVal) runbutton;
clearbutton = XtCreateManagedWidget("Clear window",commandWidgetClass,
w,clearargs,XtNumber(clearargs));
recordargs[0].value = (XtArgVal) recordcallbacklist;
recordargs[1].value = (XtArgVal) clearbutton;
recordbutton = XtCreateManagedWidget("Record",commandWidgetClass,
w,recordargs,XtNumber(recordargs));
playbackargs[0].value = (XtArgVal) playbackcallbacklist;
playbackargs[1].value = (XtArgVal) recordbutton;
playbackbutton = XtCreateManagedWidget("Playback",commandWidgetClass,
w,playbackargs,XtNumber(playbackargs));
keyinputargs[0].value = (XtArgVal) keyinputcallbacklist;
keyinputargs[1].value = (XtArgVal) playbackbutton;
keyinputbutton = XtCreateManagedWidget("Read Input",commandWidgetClass,
w,keyinputargs,XtNumber(keyinputargs));
quitargs[0].value = (XtArgVal) quitcallbacklist;
quitargs[1].value = (XtArgVal) keyinputbutton;
(void) XtCreateManagedWidget("Quit",commandWidgetClass,
w,quitargs,XtNumber(quitargs));
}
static void
quit(void)
{
close_file_if_recording();
exit(0);
}
static void quitAction(Widget w, XEvent *e, String *p, Cardinal *n)
{
if (e->type == ClientMessage && e->xclient.data.l[0] != wm_delete_window)
XBell(XtDisplay(w), 0);
else
quit();
}
static void
clear_test_window(void)
{
XClearWindow(X.dpy,XtWindow(test));
}
static void
clear_result_window(void)
{
set_text(result, "");
}
static void
set_foreground_and_background(void)
{
static XtResource resources[] = {
{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
XtOffsetOf(XStuff, foreground), XtRString, XtDefaultForeground},
{XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),
XtOffsetOf(XStuff, background), XtRString, XtDefaultBackground}
};
XtGetApplicationResources(bigdaddy, (XtPointer) &X, resources,
XtNumber(resources), NULL, (Cardinal) 0);
X.gcv.foreground = X.foreground;
X.gcv.background = X.background;
X.fontname = "6x10";
GC_change_font(X.fontname,FALSE);
}