#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <locale.h>

Display *d;
Window w;
Screen s;

int main(void)
{
   XEvent evt;
   char s[80];
   XFontStruct *fontInfo;
   GC gc;
   XChar2b *ws;
   XSetWindowAttributes attr;
   int i;

   setlocale(LC_ALL, "");

   d = XOpenDisplay(NULL);

   w = XCreateSimpleWindow(d, DefaultRootWindow(d), 50, 50,
       500, 375, 0, BlackPixel(d, 0), WhitePixel(d, 0));

   attr.event_mask = KeyPressMask;
   XChangeWindowAttributes(d, w, CWEventMask, &attr);
   XStoreName(d, w, "Draw String");

   if (! w) {
       printf("Error creating window!\n");
       exit(1);
   }

   XMapWindow(d, w);

   fontInfo = XLoadQueryFont(d,
           "-misc-fixed-medium-r-normal--20-*-iso10646-1");

   if (! fontInfo) {
       fprintf(stderr, "Error loading font!\n");
       exit(1);
   }

   printf("min_byte1: %d\n", fontInfo->min_byte1);
   printf("max_byte1: %d\n", fontInfo->max_byte1);
   printf("min_char_or_byte2: %d\n", fontInfo->min_char_or_byte2);
   printf("max_char_or_byte2: %d\n", fontInfo->max_char_or_byte2);

   gc = XCreateGC(d, w, 0, NULL);

   XSetForeground(d, gc, BlackPixel(d, 0));
   XSetBackground(d, gc, WhitePixel(d, 0));
   XSetFont(d, gc, fontInfo->fid);

   ws = (XChar2b *)malloc(sizeof(XChar2b) * 16);
   for (i = 0; i < 16; i++) {
       ws[i].byte1 = 0x16;
       ws[i].byte2 = 0xA0 + i;
   }

   strcpy(s, "Here are some runes");
   XDrawString(d, w, gc, 5, 25, s, strlen(s));
   XDrawString16(d, w, gc, 5, 50, ws, 16);

   while(1) {
       while(XPending(d)) {
           XNextEvent(d, &evt);
           if (evt.type == KeyPress)
               goto end;
       }
       usleep(1000);
   }

end:
   XDestroyWindow(d, w);
   XCloseDisplay(d);
   return 0;
}