CygwinとPostgreSQLのためのコンプリートウォーカー

Cygwin、ncurses、PostgreSQL、そしてECPGプリプロセッサのための開発環境を紹介します。

マニュアルはこのページでご覧になれます。プログラムはダウンロード出来ます。

本ライブラリは以下からダウンロード出来ます。

※ファイルはtar.gz でアーカイブされています。日本語はEUCになっていますのでそのままWindows9X/Me 以外のWindows上のCygwinでコンパイルして使用出来ます。

なお、ご意見、ご希望等がありましたなら以下のアドレスにメールして下さればと思います。

xkgpm804@ybb.ne.jp

開発者名:小野重樹

All Rights Reserved 2006

ダウンロードはこちらから


コンプリートウォーカー
履歴書
(Programing of Complete Walker Class Libraly)


0.はじめに

開発名 Complete Walker はLinux のファイル/ディレクトリ、インターネット、データベース、そして、ソースコードの履歴の4つの階層を自由に歩き回れることを構想したシステムである。
その昔、自分だけで利用していた初期の UNIX 用ファイラ uf をバージョンアップしていたときのこと。仕事で ORACLE データベースの Pro-C での開発を依頼されたことがあった。
その仕事をしている時に思いやられたのは、リアルタイムデータベースプログラムのテスティングのわずわらしさと、DB ホスト変数やサブルーチンの扱いが同じことの繰り返しで疲れてしまうことだった。
その仕事も終わった夏のはじめに出会ったのが ECPG プリプロセッサである。
ECPG プリプロセッサは ORACLE の Pro-C と似ている。違うのはデータベースシステムが PostgreSQL という名前のリレーショナルデータベースシステムだったことだ。
これに、既に2001年に開発していたが、不遇にも破棄されていた自作の wsubform ライブラリの機能をドッキングさせ、DBグリッドを簡単に作成できるライブラリを新たに開発した。 それが現在の wsubformライブラリである。
また、1996年頃 VB でFTP を作成したままになっていて、そのC言語のライブラリもWindows用になったままで放置されていたのを思い出したのである。
その頃書店で出会った「インターネットプログラミング」という書籍の付録のサンプルライブラリはエラー処理やファイル送信機能が無かったけれど、構造的に良く出来たプログラムで、おまけにFTP プロトコルを完全に説明してくれていた。
このプログラムをLinux用に改編して機能を追加したのが今回の開発名の由来になった。私は作者の Dr,Kris Jamusa に感謝している。
私が追加したのは基本的に、ファイル送信機能、PASSIVE機能、エラー処理機能だけである。もちろん Linux にあわせてかなりの改修はしているが、プロトコル処理はそのままにしてある。
今回、Complete Walker では1990年から私が開発して使っている CMS(Change Management System) も公開することになるだろう。このバージョン/リビジョン管理システムは、ある会社に勤めていた頃の私が、バグに困っていたあるプロジェクトのために作成したシステムに始まっている。ただ、その構想の石杖になったのはある研究所のシステムである。
Dr,D,G,Estberg はそのシステの構築に約1年の時間をかけていた。
彼の開発したシステムはグループでプロジェクトを問題無く進めて行くには最良の構想であった。ただ、彼のシステムは大がかり過ぎた。UNIXコンピュータ1つを占有したからである。また、ユーザインタフェースが面倒だった。コマンドの応答で操作する形態だったからである。
私は、Dr,D,G,Estberg の書いたソースコードは全く見ていない。それでも 1990年の秋には私はこのシステムをMS-DOSのMKS-ToolKitを使用したコマンドラインインターフェースで実現していた。
今や CMS はLinux上でユーザインタフェースを改善して使い易くなっている。
ところで、この私の考えたCMSは一風変わっている。システムがひとつのログインの中にまた複数のログインが出来るのだ。
そしてその二次ログインしたCMSユーザにはCMSツリーの中では自分のディレクトリしか見えなくなるという感じなのである。
これは不思議に思えるかもしれないが、これがこのシステムのもっとも大きな特徴だ。現在その最後のプログラムclass CMSFiler を記述完了した。C++のクラスで書いたので、少々の変更で、MKS-ToolKitやCygwin,Free-BSD でも利用出来るだろう。
そういえば、1994年の春頃私はアルバイトでせっせと掃除をしながら食いつなぎながら、Programinng Square というMS-DOS最後の時代に必死にしがみつくようなプログラムを作っていた。
このプログラムは15万行という大きなものであったが、時既に遅く誰にも利用されなく消えていったのが寂しく感慨に陥ることもある。このプログラムもまたそうなるのだろうか。


1.CWファイラーシステム

当初の目標でもあった、FTPクライントとディレクトリ操作とデータベース操作を付け加えたため、もともとのC言語バージョンからC++言語で書き換えてあります。
C++の便利なクラス機能を利用して、基本ファイラは LocalFiler クラス、FTP はFTXクラス、ディレクトリ操作は LocalTree クラス、ASEエディタは AseEditor クラスとして明解に区別してあります。
なお、コマンドバージョンの ase は独立したファイラークラスを含んだプログラムとしてありますので参考にしてください。


1.1 ローカルファイラー

起動方法

[注意事項]
お使いの Linux/UNIX システムによっては、使用する前に画面を大きくして eval `resize` とタイプする必要があるかもしれません。

% cw

1)基本操作方法

vi にほぼ準じる

'j' と 'k' のキーで上下にスクロール(矢印キーもOKです)

SHIFT + 'H' でヘルプ画面の表示

'c' で選択中のディレクトリに移動


TABキーファイルを選択することで一括コピー及び、一括移動、一括削除が行えます。

まずTABキーを押すとファイル名の前に * のマークが付きます。

いくつかファイルに * マークを付けた後以下の機能が使用出来ます。

コントロールキー + P で一括コピー
コントロールキー + L で一括移動
コントロールキー + W を2回続けて押すと一括削除

なお、SHIFT + c で全ての選択解除が出来ます。


2)その他の機能

1)'t' キーで先頭のファイルにジャンプ
2)'g' キーで最後のファイルにジャンプ
3)コントロールキー + d で5行づつ下にジャンプ
4)コントロールキー + u で5行づつ上にジャンプ
5)'1' でアクセス月日表示に切り替え
6)'0' で作成月日表示に切り替え
7)'9' で作成年月表示に切り替え
8)'X' キーダブルでFTPクライアントに変身
9) '\' キーでツリーファイラに変身
10) '^' キーでファイル名の前に . の付いたファイルの表示/非表示
11) '~' キーでブックマークのディレクトリに移動
12) ' ' キーでブックマークにカレントディレクトリを保存
13) .def ファイルでは Enter キーで ase ファイルの編集(aseエディタに変身)
14) '\' キーで ツリーファイラーに変身
15) '_' キーで CMSファイラーに変身

なお以下の機能はツリーファイラと共通機能です。

使用キー   機能

コントロールキー + A チェンジモード(775 とか 664 と入力します)
コントロールキー + R ファイル削除
コントロールキー + H 環境変数 $HOME のディレクトリに移動する
コントロールキー + B cw を起動したディレクトリに戻る
'e' vi でファイルを編集
'^E' vi で新規ファイルを編集
'i' ひとつ上のディレクトリに移動
'/' 検索
'n' 次を検索
'p' ファイルコピー
SHIFT + 'm' ファイルの移動またはリネーム
'm ディレクトリの作成
SHIFT + 'o' 指定したディレクトリに移動
SHIFT + 'c' 画面の適正化


2.変身するファイラー

CWは4つの顔(機能)を持つファイラーとPostgreSQLのDBを操作するエディタを含んでいます。
これらの顔は、CW の大きな特徴のひとつです。その用途に合わせて使い分けすると良いでしょう。

2.1 ツリーファイラー

ツリーファイラーへの変身は '\' キーにて行います。
ツリーの表示はカスタマイズし易いようにシェルコマンドの出力を利用しています。
ツリーファイラーではディレクトリが対象となりますので、コピーや削除、Move等は全て選択したディレクトリ自身を操作することになります。
ツリー表示はカレントディレクトリ配下のみになるため、'i' キーでディレクトリを遡るとツリーの表示に時間がかかるようになります。
/ ディレクトリのように頂点のディレクトリではファイルシステムの大きさにもよりますが、それなりの時間を必要とします。(キャッシュメモリの大きいコンピュータが良い)
クラスライブラリになっているので他のプログラムで利用可能です。


2.2 FTXファイラー

FTXファイラー への変身は 'X''X' とダブルコマンドで行います。
このファイラーはインターネットに接続されたFTPクライアントです。
FTPクライアントとして必要な機能はほとんど実現していますので、コマンドラインのFTPに疲れた人にとっては、コマンド等の手入力が各段に少ないので朗報だと思います。
FTPクライアントになった場合では、ファイル送信のみミニローカルファイラーを呼出し複数ファイル選択の送信が出来ます。
ファイルの送信と受信がターゲットファイルの複数選択で出来ます。
なお、単独のクラスライブラリになっているので他のプログラムとリンクして利用可能です。ソースレベルでのリンクはFTXのマニュアルを参照してください。


2.3 ミニローカルファイラー

FTXファイラーから 'X''S'とキー入力でローカルミニファイラーに変身します。
ローカルミニファイラーからはTABキーでの複数選択によるファイル送信が出来ます。
このファイラーはファイル送信用のファイラーという位置づけですが、ローカルファイラーに近い機能を合わせ持ちます。ただ、ローカルミニファイラーでは、複数選択でのコピー/移動の機能はありません。


2.4 ASEエディタ

ASE は PostgreSQLへのデータベースアクセスを行うプログラムとDBグリッドライブラリ用の各種ファイルを操作します。ローカルファイラーの表示で、.pgc .def .sql という拡張子の付いたファイルは Enter キーで vi 又は ASEエディタに変身し、DBグリッド設計画面としてオープンします。
これらのファイルは ASEエディタで画面ファイルから生成されるファイルになります。
詳細は ASEエディタマニュアルとlivwsubform のマニュアルを参照してください。

なお、cw が aseエディタに変身した時ファイルのオープン時表示速度が遅くなります。
これはエディタ内でセルを作成する量の多さの他に、CURSESライブラリのマルチバイト処理をコンパイルオプションに加えているからです。
こうした場合、ソースファイルの漢字コードをEUCコードに変更し、CURSES のリンクオプションを -lcursesw から -lcurses に変更し cw を再コンパイルしてください。
マルチバイトの処理は出来なくなりますが aseエディタの処理速度は格段に早くなります。

なお、gnome端末を利用している場合には、以上の変更の後「端末」メニューから「文字コードの設定」で、「日本語(EUC)」に変更してください。

また、日本語コードが変更された場合は、.profile の LANG=ja_JP.UTF-8 を LANG=ja_JP.EUC_JP に変更して再ログインしてください。


2.5 CMSファイラー
CMSLocalFiler クラスは cmsmenu をファイラークラス化したメニューオブジェクトとなっています。このファイラーは特殊なファイラーで CMS ユーザのバージョン/リビジョン管理のために存在します。
この CMS ファイラーはこれまでのファイラーと違い、ホームディレクトリの表示が CMS に登録されたファイルのみの表示となります。
これは、バージョン/リビジョンの管理にターゲットファイルに絞りやすくすることと、登録ファイル以外のファイルとの区別を明確にする意味があります。。
また、CMS ファイラーは /home/cms 配下の他のディレクトリのファイルを見ることは出来ません。そのため、このファイラーを CMS のセキュリティーのために利用することが可能です。
複数の開発者が同時にCMS を利用してリビジョンの管理を行う場合は安全のためにこのファイラーを使用することを推奨します。特にカレントディレクトリにサンプル等のファイルや、データファイル等が多い場合には、CMS に登録されたソースファイルの管理に威力を発揮します。
また、階層化されたソースファイルのシステムの、階層の下の位置からでも CMS を操作出来ます。



3.cwが利用するシェルプログラム

fconv.ksh
UTF-8、シフトJIS、EUC変換用
cwがコマンドとして利用。必ずパスのあるディレクトリに存在することが必要。
お使いのコンピュータシステムによって漢字変換プログラムが異なる場合はこのファイルを変更してください。

dtree.sh
cwがコマンドとして利用。必ずパスのあるディレクトリに存在することが必要。
Linux の複雑なファイルシステムをツリー表示するため、Shell コマンドにしてあります。各システムによってはこのファイルを変更して調整してください。

dtree_path.sh
cwがコマンドとして利用。必ずパスのあるディレクトリに存在することが必要。
dtree.sh と対のコマンド path名を保存する。
各システムによってはこのファイルを変更して調整してください。

dtree.root.sh
cwがコマンドとして利用。必ずパスのあるディレクトリに存在することが必要。
コマンドのユーザIDを root とするとより多くのディレクトリを表示出来る。
Linux の複雑なファイルシステムをツリー表示するため、Shell コマンドにしてあります。各システムによってはこのファイルを変更して調整してください。

dtree.root_path.sh
cwがコマンドとして利用。必ずパスのあるディレクトリに存在することが必要。
コマンドのユーザIDを root とするとより多くのディレクトリを表示出来る。
dtree.root.sh と対のコマンド path名を保存する。
各システムによってはこのファイルを変更して調整してください。

以下は CMS が使用する KSH コマンドです。
これらのコマンドのほとんどは fusr の下にあるユーザホームディレクトリで実行する必要があります。これらのコマンドをメニューから実行出来る cmsmenu というプログラムもありますので、そちらを使うようにしてください。

get.ksh
GETの実行
最新のソースファイルを呼び出します。
put.ksh
PUTの実行
現在のソースファイルを起点のソースとの差分を保存し削除します。
pulog.ksh
PUT修正記録の編集
put.ksh による保存された修正履歴文書を再編集します。
vget.ksh
リビジョンの呼び出し
0 〜 99 までの修正差分により、以前のソースに復元します。
mredit.ksh
MRの編集
mr.ksh によって保存された障害修理処理票を編集します。
mr.ksh
MRの登録
tr.ksh による故障処理票に関連して障害修理処理票を新規登録します。
unget.ksh
GETの取り消し
get.ksh によって呼び出されたソースファイルの修正を中止します。
カレントディレクトリのソースファイルを削除するかどうかの質問あり。
showget.ksh
GET履歴の表示
過去に行った get.ksh のログを表示します。
showput.ksh
PUT履歴の表示
過去に行った put.ksh のログを表示します。
tredit.ksh
TRの編集
tr.ksh によって保存された故障処理票を編集します。
tr.ksh
TRの登録
ソフトウェアテスト時、故障を発見した場合に故障処理票を登録します。
newfile.ksh
CMSへファイルの登録
新規の CMS で管理するソースファイルを登録します。
新規登録する前に tabchg.ksh でテーブルファイルに新規ソースファイル名を
記述する必要があります。
tabchg.ksh
CMSテーブルファイルの編集
newfile.ksh で新規ソースファイルの登録をするまえにファイル名を記述します。
階層化で記述出来るので大規模なシステムの登録可能です。
mrreport.ksh
MR記録のレポート
障害修正記録ファイルMRの一覧を表示します。
rejectmr.ksh
MRの削除
障害修正記録ファイルMRを削除します。
MRが削除されても関連するTRがあれば故障履歴は確保されます。
reject.ksh
リビジョンの削除
put.ksh によって保存された差分を削除します。
submit.ksh
SUBMITの実行
これは最後の PUT コマンドになります。
sabunntouroku
差分登録は同じですが、SUBMITが発行された後は PUTとGET は出来なくなります。
この他に commit.ksh というコマンドもありますが、cmsmenu からは利用出来ません。


4.cwが利用するライブラリ

libsubform.a(C言語ライブラリ)

グリッドとテキストを扱うライブラリ。PostgreSQL とのリンクをソースコードレベルで行う。DBグリッドを利用するとデータベースをリアルタイムに監視するとが可能になる。
ECPG プリプロセッサでコンパイル出来るコードを自動的に作成することが可能なaseエディタを使用すると簡単にDBグリッドを作成出来る。
このライブラリは C言語で作成されていますが、全てのソースコードが付属します。
詳細は wsubform ライブラリと ase のマニュアルを参照してください。

libftx.a(C++クラスライブラリ)

FTPクライアントライブラリ libftx.a を提供します。
このライブラリを利用することにより、インターネット上の様々な操作プログラムが作成可能です。
ソースコードレベルで改変が可能な ftpfrm.cc が付属します。
詳細はFTXクラスライブラリマニュアルを参照してください。


5.cwが利用するローカルクラス

CW はそのプログラムの中に、外部クラス FTX の他に内部クラスとして、LocalFiler クラス、TreeFiler クラス、AseEditor クラス、CMSLoalFiler クラスを含んでいます。
これらのクラスは /home/cms/fusr/ftx/filer.h の中に定義されています。


6.コマンドリファレンス

ローカルファイラー

H このヘルプを表示
v ファイルを表示
e ファイルを編集
f EUC -> SHIFT-JIS
x 実行ファイルを実行
p ファイルをコピー
^P 選択ファイルコピー
m ディレクトリを作成
r ディレクトリを削除
^R ファイルを削除
c ディレクトリを移動
^O 移動ディレクトリ入力
F SHIFT-JIS -> EUC
M ファイル移動/名前変更
^W^W 選択ファイルを削除
^A 属性を変更
^B cw を起動した場所に
^H $HOME に戻る
- 以前に移動した場所に移動
+ 以前に移動した場所から移動
n 検索を開始。入力は '/' で

^L 選択ファイル移動
i ひとつ上へ
S 画面の更新
^E vi の実行
@ CMS メニューの起動
t 画面の先頭へ
g 最後尾に
! シェルモードに
2 アクセス時刻表示
9 作成年月表示
0 作成時刻表示
1 メニュー表示切替
u 半画面上に
d 半画面下に
j 一行下に
k 一行上に
G 画面最後尾に
: .ファイルの非表示
\\ カレントツリー
^K ブックマークに位置を保存
~ ブックマークメニューを開く
TAB ファイルを複数選択する"
q で終了


ローカルツリー

H このヘルプを表示
/ 検索名入力
n 画面を下に検索
N 画面を上に検索
p 単一ディレクトリをコピー
^P 選択ディレクトリのコピー
m ディレクトリを作成
r ディレクトリを削除
^R 選択ディレクトリを配下まで削除
c ディレクトリをチェンジ
i ひとつ上のディレクトリへ
^ 先頭に.のあるファイルも表示
M ディレクトリ移動/名前変更
^W^W 選択ディレクトリを削除
^A 属性を変更
^B ファイラーを起動した場所に戻る
^H $HOME に戻る
- 以前に移動した場所に移動
+ 以前に移動した場所から戻る
Enter ツリー表示の終了(選択中のディレクトリを表示)

^L 選択ディレクトリの移動
S 画面の更新
^E vi の実行
@ CMS メニューの起動
= ツリー表示時フルパスを表示
t 画面の先頭へ
g 最後尾に
! シェルモードに
1 アクセス時刻表示
9 作成年月表示
0 作成時刻表示
2 メニュー表示切替
u 半画面上に
d 半画面下に
j 一行下に
k 一行上に
G(g) 画面最後尾に
^K ブックマークに位置を保存
~ ブックマークメニューを開く
q で終了


リモートファイラー

x x キーダブルで再接続
X S キーダブルでローカルファイラーに変身しTABにて選択したファイルを送信(TABにて選択したファイルを送信)
X E キーダブルで hosts.ftx を vi で編集
X R キーダブルでTABにて複数選択したファイルを受信
W W キーダブルでTABにて複数選択したファイルを削除
TAB でファイルを選択(ディレクトリは選択出来ない)
R でファイルの受信を行う。(選択しているファイルのみ)
c でディレクトリを移動
i でひとつ上のディレクトリに移動
e でファイルを編集
v で画像ファイルを表示
^A でファイルの属性変更
^R でファイルの削除。
r でディレクトリの削除
m でディレクトリの作成
M でファイル名の変更
L でイミディエイトウインドウに移動('q'で戻る)
/ でファイル検索、'n' で再検索
S でファイルの送信(ファイル名入力)
j と 'k' キーでファイラーカーソルの移動
g で画面最下行へ移動
t で画面トップに移動"
q で終了


ローカミニルファイラー

H このヘルプを表示
v ファイルを表示
e ファイルを編集
f EUC -> SHIFT-JIS
TABキーでファイルを選択
p ファイルを送信
^P 選択ファイルを送信
m ディレクトリを作成
r ディレクトリを削除
^R ファイルを削除
c ディレクトリを移動
^O 移動ディレクトリ入力
F SHIFT-JIS -> EUC
M ファイル移動/名前変更
^A 属性を変更
^B MiniFiler を起動した場所に
^H $HOME に戻る
- 以前に移動した場所に移動
+ 以前に移動した場所から移動
n 検索を開始。入力は '/' で

i ひとつ上へ
S 画面の更新
^E vi の実行
t 画面の先頭へ
g 最後尾に
! シェルモードに
2 アクセス時刻表示
9 作成年月表示
0 作成時刻表示
1 メニュー表示切替
u 半画面上に
d 半画面下に
j 一行下に
k 一行上に
G 画面最後尾に
: .ファイルの非表示
\\ カレントツリー
^K ブックマークに位置を保存
~ ブックマークメニューを開く
q で終了


CMSローカルファイラー

H このヘルプを表示
v ファイルを表示
e ファイルを編集
f EUC -> SHIFT-JIS
TABキーでファイルを選択
p ファイルを送信
^P 選択ファイルを送信
m ディレクトリを作成
r ディレクトリを削除
^R ファイルを削除
c ディレクトリを移動
^O 移動ディレクトリ入力
F SHIFT-JIS -> EUC
M ファイル移動/名前変更
^A 属性を変更
^B MiniFiler を起動した場所に
^H $HOME に戻る
- 以前に移動した場所に移動
+ 以前に移動した場所から移動
n 検索を開始。入力は '/' で

i ひとつ上へ
S 画面の更新
^E vi の実行
t 画面の先頭へ
g 最後尾に
! シェルモードに
2 アクセス時刻表示
9 作成年月表示
0 作成時刻表示
1 メニュー表示切替
u 半画面上に
d 半画面下に
j 一行下に
k 一行上に
G 画面最後尾に
: .ファイルの非表示
\\ カレントツリー
^K ブックマークに位置を保存
~ ブックマークメニューを開く
q でCMSファイラーを終了し CW へ戻る


CMSコマンドの実行

CMS コマンドはダブルキー操作になります。

'S''A' get.ksh GETの実行
'S''B' put.ksh PUTの実行
'S''C' pulog.ksh PUT修正記録の編集
'S''D' vget.ksh リビジョンの呼び出し
'S''E' mredit.ksh MRの編集
'S''F' mr.ksh MRの登録
'S''G' unget.ksh GETの取り消し
'S''H' showget.ksh GET履歴の表示
'S''I' showput.ksh PUT履歴の表示
'S''J' make file-name MAKEコマンドの実行
'S''K'
'S''L' tredit.ksh TRの編集
'S''M' tr.ksh TRの登録
'S''N' newfile.ksh CMSへファイルの登録
'S''O' tabchg.ksh CMSテーブルファイルの編集
'S''P' mrreport.ksh MR記録のレポート
'S''Q' rejectmr.ksh MRの削除
'S''R' reject.ksh リビジョンの削除
'S''S' submit.ksh SUBMITの実行



6.参考文献
Complete Walker Class Libraly and Change Management System を開発するにあたって参考にした文献は以下になります。

UNIXプログラミング環境
ボブ・パイク/ブライアン・カーニハン著

KSH入門
デビッド・コーン著

インターネットプログラミング(Internet Programming)
クリス・ジャムサ & ケン・コープ著