今回はプログラミングネタです。
これまで何度かプログラミングの初歩的なネタを書いてきていますが、CUI環境のネタばかりでしたね。
そこで、今回はLinuxのGUI環境でシンプルなウインドウを表示させるC言語のプログラムで遊んでみました。

まずは空のウインドウを表示させてみます。


#include<stdio.h>
#include<X11/Xlib.h>
#include<X11/Xutil.h>

#define WIN_WIDTH 640
#define WIN_HEIGHT 640

int main(void)
{
        Display *d;
        Window w;
        int black,white;
        d = XOpenDisplay(NULL);
        black = BlackPixel(d,0);
        white = WhitePixel(d,0);
        w = XCreateSimpleWindow(d,RootWindow(d,0),150,150,WIN_WIDTH,WIN_HEIGHT,2,black,white);
        XMapWindow(d,w);
        XFlush(d);
        getchar();
}

上記をshowwin.cというファイル名で保存し、「gcc showwin.c -lX11」でコンパイルすると
以下のようなウインドウが表示されます。

今度はこのウインドウに文字を表示させてみるには以下のようにします。


#include<stdio.h>
#include<string.h>
#include<X11/Xlib.h>
#include<X11/Xutil.h>

#define WIN_WIDTH 600
#define WIN_HEIGHT 40
#define MSG "Hello,Linux X11 World!!"
#define FONT "-misc-fixed-medium-r-normal-ja-0-0-100-100-c-0-iso10646-1"

int main(void)
{
        Display *d;
        Window w;
        GC gc;
        Font f;
        XEvent e;

        int black,white;
        d = XOpenDisplay(NULL);
        black = BlackPixel(d,0);
        white = WhitePixel(d,0);
        w = XCreateSimpleWindow(d,RootWindow(d,0),25,25,WIN_WIDTH,WIN_HEIGHT,2,black,white);
        gc = XCreateGC(d,RootWindow(d,0),0,0);
        f = XLoadFont(d,FONT);
        XSetFont(d,gc,f);
        XSelectInput(d,w,ExposureMask | ButtonPressMask);

        XMapWindow(d,w);
        while(1){
                XNextEvent(d,&e);
                if (e.type == Expose)
                        XDrawString(d,w,gc,10,30,MSG,strlen(MSG));

                else
                if (e.type == ButtonPress)
                        break;

        }


        XCloseDisplay(d);
}

上記をshowfont.cというファイル名で保存し、「gcc showfont.c -lX11」でコンパイルすると
以下のようなウインドウが表示されます。

今回はLinux上のC言語でX11ライブラリを使ったプログラミングの本当にさわりを体験してみました。
このように地味にプログラミングしていくことがわかりました。

しかし、今更C言語でX11アプリの開発スキルを身に着けてもね、
今後もそのスキルが活かせる機会はあまりないかなとも思います。

今であれば流行りの機械学習にも使える言語としてのPython+TKInterで作るのがお手軽かつ、
Pythonの勉強にもなるので良いでしょうか。