xbanner
The snippet can be accessed without any authentication.
Authored by
Jakob Kaivo
a system classification type banner for the X Window System
#define _POSIX_C_SOURCE 200809
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <X11/Xlib.h>
int main(int argc, char *argv[])
{
char *bannermsg = "UNCLASSIFIED";
char *background = "darkgreen";
char *foreground = "white";
int c;
while ((c = getopt(argc, argv, "b:f:")) != -1) {
switch (c) {
case 'b':
background = optarg;
break;
case 'f':
foreground = optarg;
break;
default:
return 1;
}
}
if (optind < argc) {
bannermsg = argv[optind];
}
Display *dpy = XOpenDisplay(NULL);
Window root = XDefaultRootWindow(dpy);
XColor bg, fg;
Colormap cmap = XDefaultColormap(dpy, 0);
if (XParseColor(dpy, cmap, background, &bg) == 0) {
fprintf(stderr, "couldn't find color %s\n", background);
bg.pixel = WhitePixel(dpy, 0);
} else if (XAllocColor(dpy, DefaultColormap(dpy, 0), &bg) == 0) {
fprintf(stderr, "couldn't allocate color %s\n", background);
bg.pixel = WhitePixel(dpy, 0);
}
if (XParseColor(dpy, cmap, foreground, &fg) == 0) {
fprintf(stderr, "couldn't find color %s\n", foreground);
fg.pixel = BlackPixel(dpy, 0);
} else if (XAllocColor(dpy, DefaultColormap(dpy, 0), &fg) == 0) {
fprintf(stderr, "couldn't allocate color %s\n", foreground);
fg.pixel = BlackPixel(dpy, 0);
}
int textheight = 10;
int width = XDisplayWidth(dpy, 0) / 2;
/* FIXME: use actual font metrics */
int textwidth = 6 * strlen(bannermsg);
Window w = XCreateSimpleWindow(dpy, root, 0, 0, XDisplayWidth(dpy, 0) / 2, textheight + 2, 0, 0, bg.pixel);
XStoreName(dpy, w, "banner");
XSelectInput(dpy, w, ExposureMask);
XMapRaised(dpy, w);
XSetForeground(dpy, DefaultGC(dpy, 0), fg.pixel);
for (;;) {
XEvent ev;
XNextEvent(dpy, &ev);
if (ev.type == Expose) {
XDrawString(dpy, w, DefaultGC(dpy, 0), (width - textwidth) / 2, textheight, bannermsg, strlen(bannermsg));
}
}
return 0;
}