2019年10月18日金曜日

懐かしの kbanner を CentOS8 でコンパイルしたら動いた!

1994年頃、仕事で NEC の UNIXワークステーション EWS4800 を日常的に使っていました。そのマシンの /usr/local/bin (職場の中央サーバを NFS マウントして利用していた) に、kbanner というツール (漢字に対応した banner ソフト) がインストールされていて、その -s オプションの表示の綺麗さに魅了され、よく利用していました。
当時は、誰が作ったものなのか?をググったりはできませんでしたし、ソースは入手できないものだと思っていました。

時は流れ、2003年ごろから Linux どっぷりな仕事 (使うマシンも Express5800 に変わった) になり、kbanner のソースも持っていませんでしたので、EWS4800 の衰退と共に記憶の彼方になっていきました。

そして今、ふと懐かしく思い出し、どこかにソースないのかなと、ググってみたら、ありました!
なんと kbanner の作者さんは、「キーボード配列 QWERTYの謎 NTT出版 (2008年3月), ISBN978-4-7571-4176-6.」の著者さんだったのかー、キーボード好き (特に ThinkPad と RealForce) が高じて手もとにあります。

さっそくダウンロードして、現在の自宅メインマシン (ThinkPad 25 + CentOS8) で make してみました。
コンパイルエラーでも起きるかなと思ったのですが、警告は出るものの、修正なしでビルドできました!
[root@hoge kbanner2]# make
cc -c -O kbanner.c
kbanner.c:5:14: 警告: 組み込み関数 ‘malloc’ と型が競合しています [-Wbuiltin-declaration-mismatch]
 extern char *malloc();
              ^~~~~~
kbanner.c:85:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 main(argc,argv)
 ^~~~
kbanner.c: 関数 ‘main’ 内:
kbanner.c:115:14: 警告: 関数 ‘atoi’ の暗黙的な宣言です [-Wimplicit-function-declaration]
       column=atoi(&((*argv)[1]));
              ^~~~
kbanner.c:82:3: 警告: 関数 ‘exit’ の暗黙的な宣言です [-Wimplicit-function-declaration]
   exit(1);\
   ^~~~
kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’
       USAGE
       ^~~~~
kbanner.c:82:3: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
   exit(1);\
   ^~~~
kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’
       USAGE
       ^~~~~
kbanner.c:82:3: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c:4:1:
+#include 
 
kbanner.c:82:3:
   exit(1);\
   ^~~~
kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’
       USAGE
       ^~~~~
kbanner.c:126:5: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
     exit(1);
     ^~~~
kbanner.c:126:5: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c:129:5: 警告: 関数 ‘kbanner’ の暗黙的な宣言です [-Wimplicit-function-declaration]
     kbanner(stdin);
     ^~~~~~~
kbanner.c:130:5: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
     exit(0);
     ^~~~
kbanner.c:130:5: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c:142:3: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
   exit(0);
   ^~~~
kbanner.c:142:3: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c: トップレベル:
kbanner.c:145:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 kbanner(fp)
 ^~~~~~~
kbanner.c: 関数 ‘kbanner’ 内:
kbanner.c:152:12: 警告: implicit declaration of function ‘kgetchar’; did you mean ‘getchar’? [-Wimplicit-function-declaration]
   while((i=kgetchar(fp))!=EOF){
            ^~~~~~~~
            getchar
kbanner.c:159:4: 警告: implicit declaration of function ‘kputchar’; did you mean ‘putchar’? [-Wimplicit-function-declaration]
    kputchar(i*256+(j&127));
    ^~~~~~~~
    putchar
kbanner.c: トップレベル:
kbanner.c:202:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 kputchar(c)
 ^~~~~~~~
kbanner.c: 関数 ‘kputchar’ 内:
kbanner.c:267:7: 警告: 非 void を戻す関数内に値が無い ‘return’ があります
       return;
       ^~~~~~
kbanner.c:202:1: 備考: ここで宣言されています
 kputchar(c)
 ^~~~~~~~
kbanner.c: トップレベル:
kbanner.c:278:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 kgetchar(fp)
 ^~~~~~~~
cc -c -O font1.c
cc -c -O font2.c
cc -c -O font3.c
cc kbanner.o font1.o font2.o font3.o -o kbanner
strip kbanner
[root@hoge kbanner2]# ls -l
合計 1356
-rw-r--r-- 1 1001 wheel    321  7月 13  2004 Makefile
-rw-r--r-- 1 1001 wheel    203  7月 13  2004 README
-rw-r--r-- 1 1001 wheel 289120 10月 15  1993 font1.c
-rw-r--r-- 1 root root   79952 10月 18 04:47 font1.o
-rw-r--r-- 1 1001 wheel 289120 10月 15  1993 font2.c
-rw-r--r-- 1 root root   79952 10月 18 04:47 font2.o
-rw-r--r-- 1 1001 wheel 278000 10月 15  1993 font3.c
-rw-r--r-- 1 root root   76912 10月 18 04:47 font3.o
-rwxr-xr-x 1 root root  245376 10月 18 04:47 kbanner
-rw-r--r-- 1 1001 wheel    692 10月 15  1993 kbanner.1
-rw-r--r-- 1 1001 wheel   8594 10月 15  1993 kbanner.c
-rw-r--r-- 1 root root   16208 10月 18 04:47 kbanner.o
[root@hoge kbanner2]# ./kbanner --help
Usage: ./kbanner [-l|-numofcol] [-s] [-m] [file]
早速動かしてみると文字化け、、、当時は EUC-JP でしたので、環境変数 LANG=ja_JP.eucJP を設定し、端末文字コードも EUC-JP にして、再実行。
[root@hoge kbanner2]# echo -n キーボード配列 QWERTYの謎 | ./kbanner -s -8
     ;                                 ,    ; ;                       ,     , , ,,,,,,,,, ,,,,,  ,,,,,,,,, ,  ;                 
     ';   ,,,                          ;                              ;     ' '    ; ;        ;     ;      ;  ;                 
    ,,;;'''                      '''''';'''''''                       ;          ;';';';      ;     ;,,,,  ;  ;                 
 ''''  ;   ,,,,  ',,,,,,,,,,,,,     ,  ;   ,     ',,,,,,,,,,,,,       ;'';,,     ; ; ; ;  ;''''    ;'   ;  ;  ;                 
     ,,;;'''                       ,;  ;   ';,                        ;    '''   ;'  '';  ;      ,;';, ;'  ;  ;                 
  ''''  ;,                        ,;   ;     ;,                       ;          ;,,,,,;  ;          ';'   '  ;                 
         ;                       ''    ;      '                       ;          ;     ;  ;,  ,;    ,;'       ;                 
         ';                          '''                              '          '''''''   '''' ,,;''       ,,;                 
      ,,,,      ,,,,,  ,,  ,,,,,  ,,,,,,,,,,,     ,,,,,,,,,      ,,,,,,,,,,,,,   ,,,,,   ,,,,,                   ,,,, ,  ,  ;  ,
   ,;'    ';,     ;    ;;    ;      ;       ',      ;      ',    ;     ;     ;     ;,     ,;        ,,;';';,,   ,,,,,,'; '; ; ;'
  ,;        ;,    ;,  ;'';  ,;      ;    ,          ;       ;          ;            ;,   ,;       ,;'   ;   ';   ,,,,    ,,,;,,,
  ;          ;     ; ,;  ;, ;       ;,,,,;          ;,,,,,,'           ;             ;, ,;       ,;    ;'    ';       ,,,  ,;,  
  ;,        ,;     ; ;    ; ;       ;    ;          ;     ;,           ;              ';'        ;    ;'      ;  ''''   ; ,';', 
   ;, ,'', ,;      ';;    ;;'       ;        ,      ;      ;,          ;               ;         ;  ,;'      ;'  ,,,,   ;,' ; ',
    '',,,,';  ,     ;      ;      ,,;,,,,,,,;     ,,;,,   ,,;,,      ,,;,,           ,,;,,        '''    ,,;''   ;  ;  ,;   ;   
            ''                                                                                                   ;,,; ;' ',,,,,,
[root@hoge kbanner2]# 
これだ、これだよ〜、懐かしいなあ。また利用させてもらおうと思います。作者さん、ありがとうございます m(_ _)m

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ