コンプリートウォーカー
(Programing of Complete Walker Revision Admministrator)

Complete Walker Revision Administrator はC言語を利用したCGIプログラムの自動生成とデバッグログ出力/テスティング管理/差分管理/故障管理を行えます。

必要な環境は以下になります。
1)Linuxカーネル2.6.18以降
2)ncurses5.7(aseエディタがこのライブラリで作成されているため必須)
3)ksh(cms差分管理システムがこのシェルで作成されているため必須)
4)apache2以降のバージョン
5)postgreSQL 8.4以降のバージョン(C言語への埋め込みSQLを利用するのでECPGプリプロセッサのインストールは必須)
6)Google Chrome5.0以上 Opera10.0以降 FireFox 3.0以降 Safari5.01以降 IE8以降
Opera11か.Chrome10.0がお勧めです。特にOpera11.0ではHTML5の機能に多く対応しています。
7)FastCGI(現在fcgi2.4.0を利用しております)
8)libsubformHTML.a(本プログラムのメインライブラリです。テーブルの行列を操作しHTMLに関連付けます)
9)現在 HTML5.0の機能を追加中(生成されるソースコード中にHTMLの矛盾点がまだ少々有ります)
※libsubformHTML.aはComplete Walkerに含まれている機能です。 ※最大９９９９９行のDB行を操作可能
10)開発環境としてEclipse3.7以上が利用」可能
11)Eclipseを利用する場合はhttp://codoo2hk.corede.net/cms3/cms3update3のプラグインをEclispeに組み込む必要が有ります。
※本アドレスは２０１２年６月末に終了の予定です、


0.はじめに

開発名 Complete Walker はLinux のファイル／ディレクトリ、インターネットファイル、データベース、ソースコードの履歴、そしてWEBデータベースの５つの階層を自由に歩き回れることを構想したシステムである。
その昔、自分だけで利用していた初期の UNIX 用ファイラ uf をバージョンアップしていたときのこと。仕事で ORACLE データベースの Pro-C での開発を依頼されたことがあった。
その仕事をしている時に思いやられたのは、リアルタイムデータベースプログラムのテスティングのわずわらしさと、DB ホスト変数やサブルーチンの扱いが同じことの繰り返しで疲れてしまうことだった。
その仕事も終わった夏のはじめに出会ったのが ECPG プリプロセッサである。
ECPG プリプロセッサは ORACLE の Pro-C と似ている。違うのはデータベースシステムが PostgreSQL という名前のリレーショナルデータベースシステムだったことだ。
これに、既に2001年に開発していたが、不遇にも破棄されていた自作の wsubform ライブラリの機能をドッキングさせ、DBグリッドを簡単に作成できるライブラリを新たに開発した。 それが現在の wsubformライブラリである。
また、1996年頃 VB でFTP を作成したままになっていて、そのC言語のライブラリもWindows用になったままで放置されていたのを思い出したのである。
このプログラムをLinux用に改編して機能を追加したのが今回の開発名の由来になった。
私が追加したのは基本的に、ファイル送信機能、PASSIVE機能、エラー処理機能だけである。もちろん Linux にあわせてかなりの改修はしているが、プロトコル処理はそのままにしてある。
また、最後に追加したWEBデータベース機能は、CGIプログラムでACCESSのような操作を目標とするC言語のプログラムを自動生成するエディタを実行することが出来る。これは未だテスティングの段階だが生成するプログラムが非常に高速に動作するので面白いのではないかとと考えている。

P/S
Complete Walker　は複数のプログラマが同時に同じソースコードを開発することの出来るCMSというリビジョンコントロールシステムの中で、プログラム開発をより楽しく有意義に出来るよう考えられたファイラーシステムです。本システムはデータベースをPostgreSQLに限定していますが、ECPGプリプロセッサを活用することでユニークなデータベースのテスティング環境を構築することが出来ます。
また、FTP機能による遠隔ファイル編集はWEB編集はもちろん将来的にはリモートでのプログラム開発を想定しています。

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

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


1.1 ローカルファイラー

起動方法

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

% cw

1)基本操作方法

vi にほぼ準じる

'j' と　'k' のキーで上下にスクロール（矢印キーもＯＫです）

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

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


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

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

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

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

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


2)その他の機能 

1）'t' キーで先頭のファイルにジャンプ
2）'g' キーで最後のファイルにジャンプ
3）コントロールキー　＋　d  で５行づつ下にジャンプ
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-HTMLライブラリ用の各種ファイルを操作します。ローカルファイラーの表示で、.pgc .def .sql という拡張子の付いたファイルは Enter キーで vi 又は ASEエディタに変身し、DBグリッド設計画面としてオープンします。
これらのファイルは ASEエディタでDB設計ファイルから生成されるファイルになります。
libsubformHTML.a というスタティックライブラリはPostgreSQlとGoogle Chromeのために開発されたWEB-DBシステムを構築するためのライブラリです。
ASEは生成したC言語ソースファイルをこのライブラリを利用してWEB-DBシステムを構成し、まるでデスクトップで動作するようなデータベースアプリケーションを構築します。

なお、cw が aseエディタに変身した時ファイルのオープン時表示速度が遅くなる場合があります。
これはエディタ内でセルを作成する量の多さの他に、CURSESライブラリのマルチバイト処理をコンパイルオプションに加えているからです。

なお、gnome端末を利用している場合には、「端末」メニューから「文字コードの設定」で、「日本語（UTF-8）」に変更してください。


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



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

fconv.ksh
UTF-8、シフトＪＩＳ、ＥＵＣ変換用
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.ksh によって保存された障害修理処理票を編集します。
mr.ksh
	ＭＲの登録
	tr.ksh による故障処理票に関連して障害修理処理票を新規登録します。
unget.ksh
	GETの取り消し
	get.ksh によって呼び出されたソースファイルの修正を中止します。
	カレントディレクトリのソースファイルを削除するかどうかの質問あり。
showget.ksh
	GET履歴の表示
	過去に行った get.ksh のログを表示します。
showput.ksh
	PUT履歴の表示
	過去に行った put.ksh のログを表示します。
tredit.ksh
	ＴＲの編集
	tr.ksh によって保存された故障処理票を編集します。
tr.ksh
	ＴＲの登録
	ソフトウェアテスト時、故障を発見した場合に故障処理票を登録します。
newfile.ksh
	CMSへファイルの登録
	新規の CMS で管理するソースファイルを登録します。
	新規登録する前に tabchg.ksh でテーブルファイルに新規ソースファイル名を
	記述する必要があります。
tabchg.ksh
	CMSテーブルファイルの編集
	newfile.ksh で新規ソースファイルの登録をするまえにファイル名を記述します。
	階層化で記述出来るので大規模なシステムの登録可能です。
mrreport.ksh
	ＭＲ記録のレポート
	障害修正記録ファイルＭＲの一覧を表示します。
rejectmr.ksh
	ＭＲの削除
	障害修正記録ファイルＭＲを削除します。
	ＭＲが削除されても関連するＴＲがあれば故障履歴は確保されます。
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にて選択したファイルを送信()
	 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 ＭＲの編集
	'S''F' mr.ksh ＭＲの登録
	'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 ＴＲの編集
	'S''M' tr.ksh ＴＲの登録
	'S''N' newfile.ksh CMSへファイルの登録
	'S''O' tabchg.ksh CMSテーブルファイルの編集
	'S''P' mrreport.ksh ＭＲ記録のレポート
	'S''Q' rejectmr.ksh ＭＲの削除
	'S''R' reject.ksh リビジョンの削除
	'S''S' submit.ksh SUBMITの実行



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

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

ＫＳＨ入門
デビッド・コーン著

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

