COBOLでGUIプログラミングもどき

  • 0
    いいね
  • 0
    コメント

    いろいろ勉強不足でした、またまたウンコードしか書けませんでした。

    そうそうたる面々の中でネタ記事すら書くことができなくてごめんなさい。
    FUN Advent Calendar 23日目担当のnRiokiです。
    (ちなみに先日はmashaさんでした。http://mashaencount.hatenablog.jp/entry/2016/12/22/164606)
    んで、やろうとしたことはタイトルの通りでCOBOLでウィンドウ表示してチョメチョメしたかったんです。
    結果は全然でした。ちーん。
    でもまぁ一応""COBOLから""ウィンドウを生成することに成功(?)したので備忘録の如く書いてみます。
    ちなみにOpen COBOL 1.1.0を用いてます。

    COBOLでウィンドウを表示してみよう

    できました。
    af.png

           identification division.
           program-id. CALL-TEST.
           data division.
           working-storage section.
           01 numeri PIC 9(4). 
           procedure division.
               move 0721 to numeri.
               call 'sub1' using by value numeri.
               display "Hello After C".
               stop run.
    
    //http://7ujm.net/X/XSTEP1.html いなば様より拝借 一部改変
    #include<X11/Xlib.h>
    #include<X1C1/Xutil.h>
    #include<math.h>
    //描画
    void paint(Display*d,Window w,int screen,GC gc){
        XClearWindow(d,w);
        XDrawString( d, w, gc, 1, 10, "Hello", 5);
        XFlush( d );
    }
    
    void sub1(int numeri){
        Display *d;
        Window  w;
        int screen;
        XSetWindowAttributes attr;
        GC gc;
        int width = 2;
        int height = 10;
        printf("%04d\n", numeri);
    
        d = XOpenDisplay( NULL );//Xサーバーに接続する
        screen=DefaultScreen(d);
        //ウインドウの作成
        w = XCreateSimpleWindow( d, RootWindow(d,screen),
                            0, 0, 100, 100,//ウインドウのサイズ
                            1,BlackPixel(d,screen),//枠の設定
                            WhitePixel(d,screen));//背景色の色番号
    
        //ウィンドウの内容を記憶
        attr.backing_store = WhenMapped;
        XChangeWindowAttributes( d, w, CWBackingStore, &attr); 
    
        //ウインドウ名の設定
        XStoreName(d, w, "test Window");
        XSetIconName(d, w, "test Window");
    
        //グラフィックコンテキストを取得
        gc = XCreateGC( d, RootWindow( d,screen ), 0, 0); 
    
        XEvent event;
        //イベントマスクを登録
        XSelectInput( d, w,ButtonPressMask | ExposureMask ); 
    
        //マップして表示
        XMapWindow( d, w );
        XFlush( d );
    
        while(1){
            XNextEvent( d, &event );
            switch(event.type){
                case ButtonPress://画面上でマウスのボタンが押された時
                    XDestroyWindow( d, w);//終了処理
                    XCloseDisplay( d );
                    exit(0);            
                    break;
                case Expose://再描画要求               
                    paint(d,w,screen,gc);//再描画    
                    break;
                default:
                    break;
            }
        }
    }
    

    はい、誰がなんというとCOBOLからウィンドウが生成されましたね。

    まとめ

    あまりの出来に酒でも飲まないとこんな記事書いてられません。
    やってみたかったことではありますが、記事にして公開するには大分中身のないものになってしまいました。
    ライブラリの場所の指定さえ間違わなければGUIに限らずCで使えるものであればなんでもできそうです。
    今回はそれがわかっただけでも良しとします。させてください…
    正直時間までに間に合わなかった感は否めない(warningでたままとか)ので今後の課題とさせてください。
    来年こそはCOBOLでゲームやらGUIツールてきなものを作ります。
    明日はクリスマスイブですね、shield-9様
    http://www.adventar.org/calendars/1350#list-2016-12-24
    よろしくお願いします。

    参考元

    COBOL2002 使用の手引 手引編,http://itdoc.hitachi.co.jp/manuals/3000/30003D0800/GD080001.HTM ,日立製作所様
    プログラミング色々,http://7ujm.net/ ,いなば様