目次


基本編

目次

Pad.comとは?

 Pad.comは、バッチでListPadのオープンマクロを記述する為の同梱補助ツールです。バッチが使えるという事は当然Perl、AWK、SEDなどでListPadのデータを書き換えられるという事です。そのバッチをListPadのツールメニューに組み込んでマクロ処理が出来ます。まだ試運転中なのでたいした機能はありませんしエラー処理も甘いかもしれませんが是非一度お試し下さい。バグ発見時には是非ともMAIL.TXTの連絡先までご報告を。またPad.comはなるべくパスの通った場所に入れておいて下さい。

 ちなみに現在バッチを介さずバイナリ実行ファイルを直接組み込めるインターフェースを思案中です。Windowsプログラミングの出来る方は「開発者の方へ」の項をご覧ください。とりあえず理屈上はDelphi、C++、VisualBasicなどでもオープンマクロを書けるはずです。(テスト済みはDelphiのみ。乞う報告。)
目次

コマンドラインの書式

 [ツール]-[ツールの設定]メニューでバッチを組み込む時にツールタイプを「オープンマクロ」にしておくと、そのバッチに以下の引数を付けて起動します。
/LISTPAD [ListPadのウィンドウハンドル]

 つまりバッチ内では %2 がListPadのウィンドウハンドルになります。こうして取得したハンドルに対してPad.comにコマンドを実行させる基本的な書式は以下の通りです。
pad [hListPad] [Command] [Value]

 返すERRORLEVELはコマンドによって異なりますが、コマンドラインそのものに誤りがある時は「-1」を返します。またコマンドラインが長すぎる等、Pad.comの起動自体が失敗した場合のERRORLEVELはドキュメントの通りではありません。その他の注意点としては特に以下の点に留意して下さい。


 それでは以下でコマンドの解説を致します。
目次

コマンド一覧

目次

データの受信関連

目次

選択範囲を取得


例: pad %2 GetSelTsv c:\tools\temp.tsv

 選択されている範囲をTSVで指定のファイルに保存します。
目次

全リストを取得


例: pad %2 GetAllTsv c:\temp\temp.tsv

 固定行を除く現在の全セル内容をそのままTSVで指定のファイルに保存します。
目次

各種ステータスの取得


例:pad %2 GetStatus c:\tools\temp.hed

 以下の様な形式のテキストを書き出します。青文字の所は書き出しません。またListPadのファイル設定では上固定行を*.HEDファイルに別保存させる事が出来、その*.HEDファイルと以下の書き出しファイルは互換性があります。

[PATH] ;全てDOSパス名です。
MODULE=C:\PROGRA~1\LISTPAD\LISTPAD.EXE ;ListPad.exeのパス名
FILE=C:\DOCS\SAMPLE.CSV ;現在読み込んでいるファイル名
CURRENT=C:\DOCS ;カレントディレクトリ
[GRID] ;カーソル位置等
WIDTH=4 ;左固定行を除く全リストの幅
HEIGHT=121 ;上固定行を除く全リストの高さ
X=2 ;現在のカーソルX座標
Y=28 ;現在のカーソルY座標
LEFT=2 ;選択矩形の左位置
TOP=28 ;"上位置
RIGHT=4 ;"右位置
BOTTOM=35 ;"下位置
[HEAD] ;上固定行
COUNT=4 ;上記WIDTHと同じ(*.HEDファイルとの互換性の為)
1=列名1
2=列名2
3=列名3
4=列名4
[OTHER] ;その他
MODIFIED=NO ;更新されているか(YES/NO)
MAINVER=190 ;ListPadのバージョン×100(2.00β5は1.90)
SUBVER=90 ;Pad.comのバージョン×100

 とどのつまりがINIファイル形式です。各セクションの項目が増える事も考えられますので行番号指定でなくパターンを考慮した読み込みを行なって下さい。
目次

データの送信関連

目次

TSVを貼り付け


例:pad %2 Paste c:\temp\temp.tsv

 基本的にListPad本体の「貼り付け」と同じですが、クリップボードの代わりに指定されたTSVファイルが貼り付けられます。
目次

末尾に貼り付け


例:pad %2 Merge c:\temp\temp.tsv

 基本的にListPad本体の「末尾に貼り付け」と同じですが、クリップボードの代わりに指定されたTSVファイルがマージされます。
目次

セルに文字列をセット


例:pad %2 SetCell "こんにちは"

 現在カーソルのあるセルに書き込まれます。文字列はなるべく例のように「"」で括って下さい。またメッセージ内で「"」を使いたい時はTSVを貼り付けするコマンドを使う必要があります。
目次

カーソル系

目次

カーソル位置を指定


例:pad %2 SetPos 1 1

 カーソル位置は 1 以上でなければなりません。尚、現在の位置や全体のサイズは「各種ステータスの取得」コマンドで確認出来ます。ちなみにListPad本体のステータスバー左下の方に表示されている形式は(Y,X)です。逆ですのでつられて間違えないようにご注意下さい。
目次

全てを選択


例:pad %2 SelAll
目次

行を選択


例:pad %2 SelRow
目次

列を選択


例:pad %2 SelCol
目次

矩形を選択


例:pad %2 SelRect 1 3 3 5

 第三〜六引数は 1 以上でなければなりません。またLeftはRightより小さいか同じ、TopはBottomより小さいか同じである必要があります。尚、現在の位置や全体のサイズは「各種ステータスの取得」コマンドで確認出来ます。
目次

ファイル

目次

保存


例:pad %2 Save

 上記例では第三引数のファイル名が無指定なので、本体の[ファイル]-[上書き保存]メニューを選択したのと同じになります。
目次

読み込み


例:pad %2 Load

 上記例では第三引数のファイル名が無指定なので、本体の[ファイル]-[再読み込み]メニューを選択したのと同じになります。
目次

その他のコマンド

目次

問い合わせ


例:pad %2 YesNoCancel "作業を続行しますか?"

 バッチコマンド「CHOICE」の代わりです。ただしこちらはメッセージボックスで問い合わせられるのでPIFでプロンプトを最小化起動にしておいてもマウス操作でユーザーの意志を確認出来ます。メッセージ文字列はなるべく例のように「"」で括って下さい。

 第三引数の文字列はリダイレクト入力出来ます。先頭に「@」を付けるとテキストファイルとみなされます。メッセージ内で「"」や改行を使いたい時はこの機能を使う必要があります。

例:pad %2 YesNoCancel @C:\WINDOWS\TEMP\MESSAGE.TXT
目次

メッセージボックス


例:pad %2 Message "作業が終了しました。"

 使い方は基本的に上記「問い合わせ」と同じです。ただしこちらはダイアログボックスに ? マークも付きませんし OK ボタンしか出ません。そのため返すERRORLEVELも違いますのでご注意下さい。
目次

各種資料

目次

用語解説

目次

オープンマクロ

 ListPadは独自のマクロ言語を持つ代わりに既に広く使われているテキスト処理スクリプト等を組み込むインターフェースを用意しました。それを指す造語です。現在は基本的にバッチを介してスクリプトを起動しますが、先々はより高速なバイナリ実行ファイル(EXEやDLL)も組み込めるようにしたいと思っています。それについては「開発者の方へ」をご覧ください。

目次

バッチ

 DOS用のスクリプトです。詳しくはDOSの解説書をご覧下さい。

目次

パスの通った場所

 Pad.comはなるべくWindowsのインストールされているフォルダのサブフォルダ「Command」に入れておいて下さい。ただ「パスの通った場所」の意味が分からない場合、Pad.comの利用は困難を極めるものと思います。一度DOSの解説書をお読み頂いて基本を身につける事をお勧めします。

目次

ウィンドウハンドル

 簡単に言うとウィンドウそれぞれに振られた背番号です。要は単なる数字で、ウィンドウを開く時にOSが内部的な処理の為に自動的に重複しない数字を割り当てます。ここではオープンマクロ起動元のListPadを指定する為に使います。
 ListPadは一度にいくつも起動出来ます。そのためPad.comでは「ListPadの画面に命令を出す」というだけでなく、この背番号(ウィンドウハンドル)を指定して「このListPadに命令を出す」とする事で命令の送り先を特定しています。

(取得方法は「コマンドラインの書式」の項をご覧ください。)

目次

TSV

 Tab Separated Valueの略で、文字どおり要素をタブで区切ったテキストファイルの事です。オープンマクロでグリッドの内容をやり取りする時は必ずこの形式で行なって下さい。明文化すると以下の通りです。

文字コード……Shift JIS
区切り記号……タブ(コードは10進数で「9」)
括り記号………無し
改行コード……CR+LF(コードは10進数で「13,10」)
数値表現………半角で10進表記。カンマ区切り無し。

 尚数値はExtended型(34×10の-4932乗〜11×10の4932乗の間で桁数は19-20)に収まっていない場合ソートで例外が発生します。天文学的数値なので普段は気にする必要はありませんが学術計算等にお使いの際はご注意下さい。

目次

Perl、AWK、SED

 テキストベースで置換や計算を行なうソフトの名前です。Pad.comで切り出したTSVを処理するにはこれら用のスクリプトが便利でしょう。一般に以下のような特徴別に使い分けられています。

Perl……テキスト処理総合プログラミング言語。
AWK……Perlほど高機能ではないが数値計算も出来る。
SED……文字列処理しか出来ないが他の2つに比べて簡単。

 入手したい場合はネット上のあちこちに転がってます。インターネットの場合はこれら3つのAND検索をかければすぐに見つかる事でしょう。Niftyにアクセス出来る場合はFGALTSから入手すると使い方の資料や質問出来る場所、またこの3つ以外のテキスト処理ソフトもあるのでそちらから入手した方が良いかもしれません。

目次

PIF

 バッチを起動すると自動的に同名のショートカットが作成されます。これがPIFです。これを右クリックしてプロパティーを表示し、「プログラム」のページを開いてみてください。ここの「実行時の大きさ」を「最小化の状態」に指定するとDOS窓が表示されません。また「プログラム終了時にウィンドウを閉じる」はなるべくチェックしておいて下さい。ここをチェックしていないとバッチ終了後のDOS窓を手動で閉じなくてはなりません。

目次

開発者の方へ

 これ以上本体を太らせたくないのでいづれ追加機能を外付けするインターフェースを付けたいと思っています。しかし私以外の方でも使えるようにしようとするとそれぞれ引っ掛かりがあって実装には至っていません。

DDE.........................時代遅れだしSDI向きではない
OLE,COM.....................ListPadの性格上大袈裟?(勉強不足)
メモリマップドファイル......APIを使う側として面倒
プラグインに対応............同上

 ネックはWin32のメモリ共有の面倒臭さが主なので、もうちょっとPad.comがまともになればPad.comをDLL化してファイルを経由せずデータを渡せるようにするだけという線も考えられます。ちなみに現在のPad.comはSendMessageで以下のパラメータをListPadに送信しています。


 「WM_PADCOM_LONG」には下線文字が入ってます。Netscape社製のブラウザでは勝手にスペースに変換して表示するようですのでご注意下さい。また文字列の括りが「'」なのはListPad制作に使われているDelphiの文法です。C++やVisualBasicでご利用の際は「"」と読み替えて下さい。

 まだ仕様はどうにでも変更の効く段階なので何かご意見のある方はお気軽にMAIL.TXTにある連絡先までお願いします。また今の仕様のままで良ければこのままコマンド増加やエラー処理の充実に力を注いで行きます。
目次

内部構造


 という訳で、上記「開発者の方へ」に引き続いて内部の暫定仕様です。仕様変更も有り得ますので予めご了承下さい。あくまでPad.comのために付けたものなので生ファイルでデータをやりとりする極めて前時代的な仕様です。ただバッチ経由のスクリプト処理よりは直でバイナリから叩いた方が速度的にずっとましになる事でしょう。

 またListPadのウィンドウクラス名は「TLstpdWnd」です。SendMessageする前にGetClassNameでの確認をお勧めします。それらエラー処理を予めPad.comで行なっている為、下記コマンドのチェックはそれ程厳重な作りではありません。またuMsgは上記「開発者の方へ」の通りWM_PADCOM_LONG、戻り値はPad.com対応コマンドのERRORLEVEL(大概成功すると0、失敗すると1)と同じです。

対応コマンド wParam lParam
GetSelTsv ファイル名へのATOM 260
GetAllTsv ファイル名へのATOM 270
GetStatus ファイル名へのATOM 273
Paste ファイル名へのATOM 262
Merge ファイル名へのATOM 272
SetPos 引数3,4へのATOM 274
SetCell 文字列へのATOM(0=空文字) 275
SelRect 引数3,4,5,6へのATOM 276
SelRow (未使用) 277
SelCol (未使用) 278
SelAll (未使用) 279
Save ファイル名へのATOM(0=上書き) 280
Load ファイル名へのATOM(0=Reload) 281

 見ての通り結構DDEもどきな作りです。以下はカーソルを先頭に持って行くサンプルソースです。起動引数の2番がListPadのウィンドウハンドルだと決め打ちしている等、エラー処理は省いています。Delphi表記で申し訳ありませんがStrToInt(文字列を整数にする)以外の関数はWinAPIしか使っていないのでC++やVisualBasicでも大差無いコードで使えると思います。

const
PadSetPos = 274;
var
hListPad: HWND;
WM_PADCOM_LONG: UINT;
nAtom: TAtom;
begin
hListPad:= StrToInt(ParamStr(2));
WM_PADCOM_LONG:= RegisterWindowMessage('WM_PADCOM_LONG');
nAtom:= GlobalAddAtom('1,1');
SendMessage(hListPad,WM_PADCOM_LONG,nAtom,PadSetPos);
GlobalDeleteAtom(nAtom);
end;

 WinAPIに明るくない方は以下の関数を調べて下さい。

必須API
その他有用なAPI