Sometime in the mid-1980s, I wrote a few programs that used X directly. Here’s a complete application that brings up a simple window with a greeting. It uses the system’s default widget set:
/*
* This is a sample X11 program using Xt and the Athena widget set that
* simply puts up a main window with the text "hello" in it.
*/
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Label.h>
int main(int argc, char* argv[])
{
XtAppContext app_context;
Widget toplevel, hello;
toplevel = XtVaAppInitialize(
&app_context,
"XHello",
NULL, 0,
&argc, argv,
NULL,
NULL);
hello = XtVaCreateManagedWidget("hello", labelWidgetClass, toplevel, NULL);
XtRealizeWidget(toplevel);
XtAppMainLoop(app_context);
}
Long ago there was a popular widget set called OpenLook. I had this program working back then:
/*
* This is a sample X11 program using Xt and the OpenLook widget set which
* simply puts up a main window displaying the command line arguments.
*/
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <Xol/OpenLook.h>
#include <Xol/StaticText.h>
int main(int argc, char* argv[])
{
Widget toplevel;
Arg wargs[1];
int n;
String message;
toplevel = OlInitialize(argv[0], "Memo", NULL, 0, &argc, argv);
n = 0;
if ((message = argv[1]) != NULL) {
XtSetArg(wargs[n], XtNstring, message);
n++;
}
XtCreateManagedWidget("msg", staticTextWidgetClass, toplevel, wargs, n);
XtRealizeWidget(toplevel);
XtMainLoop();
}
I also managed to run a program that used no tookit at all:
/*
* This is a sample X11 program that uses Xlib calls only (no toolkit!).
* It just writes to the console the events that the window receives.
*/
#include <X11/Xlib.h>
int main(int, char*[])
{
Display* display = XOpenDisplay(NULL);
Window window = XCreateSimpleWindow(
display, XDefaultRootWindow(display),
100, 100, 200, 200, 4, 0, 0);
XEvent event;
XMapWindow(display, window);
XSelectInput(display, window, KeyPressMask | ButtonPressMask | ExposureMask);
while (True) {
XNextEvent(display, &event);
printf("%d\n", event.type);
}
return 0;
}