マルチウィンドウエディタ WINER

近藤環
 
 WINERは,オーバーラッピングマルチウィンドウをサポートした,フルスクリーンエディタです。操作方法には,E-MATEにほぼ準じたもので,機能的にもマクロ機能を取り入れるなど,意欲的な拡張が見られます。
 

◆使用方法

 3000Hにジャンプすると起動(コールドスタート)します。ホットスタートは3006Hです。バージョン1.1の拡張が施されていれば、コマンドラインに指定したファイルを自動的に読み込んで起動します。また,DEレジスタにファイル名,BCレジスタに行番号をセットして3009Hをコールするとその行番号をセットしてコマンドレベルに移ります。
 まず,コントロールキーはBREAK+各キーに割り当てられています。S-OSのBREAKコードは1BHですから,ESCキーをそのまま通している機種では,コントロールキーがエスケープシーケンスに置き換えられます。そして,CTRL+〜という表記は,BREAKキーまたは,ESCキーに続いて何かのキーを押すことを表しています。
 WINERでは,コントロールコードを1文字入力するとコントロールモードから抜けてしまいます。コントロールモードを継続したい場合は,CTRL+スペースを押してください。コントロールロック状態になります(抜けるときはもう一度スペースキーを押す)。
 ほとんどのコントロールコードはどのウィンドウに対しでも有効ですが,起動時に開かれているウィンドウ番号のついていないウィンドウ(コマンドウィンドウ)では,WINER特有のコマンドを実行することができます(表1)。
 なお,コントロールキーは,表2にまとめてあります。
●シングルウィンドウで使う
 WINERを普通のスクリーンエディタとして使うのであれば,以下のようにしてください。ウィンドウを使用しないのであれば,これらの操作を最初からワークエリアに書き込んでおくといいでしょう。
1) M/B:adr
 adrは各機種の#MEMAXのアドレス。起動後,MコマンドでテキストエリアAの割り当てメモリを最大にする(巨大なテキストでなければ,この操作は不要)。
2) L
 ディレクトリを表示させ,テキストを読み込む(新規テキストでは不要)。
3) 0E
 ウィンドウ0のエディットを開始する。
4) CTRL+"
 ウィンドウ0を画面いっぱいに拡大し,エディット開始する。
●マルチウィンドウで使う
 マルチウィンドウを使えば,同一のテキスト複数のテキストを扱うことができます。同一のテキストを複数のウィンドウで使う場合,画面上のテキスト書き換えはアクティブウィンドウが変わったとき,ウィンドウの位置や大きさを切り換えたときなどに更新されます。
 まず,コマンドウィンドウからアクティブウィンドウを指定してください。標準状態では0番のウィンドウがアクティブになっていますので,ウィンドウ0をアクセスしたければそのまま,それ以外のウィンドウをアクセスしたければ,該当するウィンドウ番号(0〜7)を入力してください。エディットを開始するときはEコマンドを打ち込みます。まとめて,
  1E
のように入力してもかまいません。
 エディット状態からアクティブウィンドウを切り換えるには,CTRL+!を使用します。キーを押したあとは画面の指示に従って切り換えるウィンドウ番号を入力してください。このWINERでは,画面情報の保護,復帰というものは行わず,ウィンドウを下から順に書き直すことで画面を保っています。画面表示速度の遅い機種では,少しいらつくこともあるかもしれません。そこで,下画面が不要なときは画面の書き換えを行わないモードもつけました。これは,コマンドウィンドウ上でPコマンドを実行するたびに書き換え/非書き換えのモードを切り替えます(標準状態では書き換えは行わない)。
●テキストをコピーする
 コピー機能関係は,CTRL+0〜9の数字キーに割り振られています。もっとも基本的な使用方法は,
1) コピーしたい文字列の先頭にカーソルをあわせる。
2) CTRL+スペースてコントロールモードをロックする。
3) 数字の7キーを押してバッフアに文字列を送る。
4) 転送したい場所にカーソルをあわせ,数字の1キーを押す。
5) 4キーでバッファの内容をクリアしておく。
という手順になります。
 なお,バッファは3積類用意されています。
●復数のテキストを同時に扱いたい
 WINERはマルチテキストに対応しています。扱えるテキストは4種類でA〜Dの名前で識別されます。0〜3のウィンドウにA〜Dのテキストを割り当てる場合,
  0/A
  1/B
  2/C
  3/D
のようにコマンドウィンドウから打ち込んでください。テキストの割り当てを行わなければ,どのウィンドウもAのテキストをエディットすることになります。
●もっと大きなテキストを扱いたい
 標準状態では,マルチテキストモードですので,
  A 5000H~9FFFH
  B A000H~CFFFH
  C D000H~E4FFH
  D 〜MEMAX
というテキストエリアの割り当てが行われています。もっと大きなテキストを扱いたいときには,コマンドウィンドウから,
  M/B:C000
  M/C:……
のようにして,テキストB以降の先頭アドレスを変えてください。
●面倒なキー操作をまとめて行いたい
 テキストDは特殊な用途に使用できます。それは,この領域に書いたテキストはマクロテキストとみなされ,コントロールキーでバッチファイルのように自動実行することができるのです。具体的には,テキストDに以下のように書き込んでみます。
  MCR1
  0/A@M
  LTEST1@M
  1/B@M
  LTEST2@M
  P@M
  E@M
  @"@$888888888888@M
  @#222222222222@M
  @!0
  @"@$22222222222@M
  END
 1行目はマクロ番号の命令を記述しています。ENDまでの記述はキー操作を表し,コントロールコードは@を頭につけて表現します。操作内容についてはコントロールコード表から解読してください。
 次に,コマンドウィンドウ上からCTRL+:(コロン)を実行してみると,ウィンドウ0にTEST1,ウィンドウ1にTEST2というファイルを読み込んで上下半分ずつのウィンドウを開き,エディット状態に入ります。
 このようなマクロ機能は0〜9番までの10種類が登録可能です。定型的なテキスト編集作業には威力を発揮します。
 
表1 コマンド
E(n) エディットモードに入る
0~7 ウィンドウを選択する。続けてコマンドを入力できる
/t テキストエリアを選択する
L(fn) 現在のテキストエリアにテキストをロードする
ファイル名を省略するとディレクトリを表示して,その中からカーソルで選択する
S(fn) 現在のテキストエリアをセーブする
ファイル名を省略すると,テキストが一度ロードしたものであれば,ファイル名を表示してそのままセーブするかどうか聞いてくるので,Yesならば.リターンキーを押す。別のキーを押すか新規のファイルであればLコマンドと同じ
Dnn 現在のテキストエリアの指定した範囲を削除する
B ラインNo.をトップにする。F.Cコマンドで使用する
F(n) "str" 現在のテキストエリアで文字列を検索する。文字列をみつけると文字列の最初でカーソルキーが点滅する。そのときスペースキーを押すとエディットモードに入る
C(/)(n) "str1" "str2" 現在のテキストエリアの“str1"を“str2"に置き換える
/をつけると“str1"をみつけるたび文字列の最初でカーソルが点滅する。そのとき変換したかったらスペースキーを押す
M 現在のテキストエリアの使用状況を表示する
たとえば/A:5000-8000:3000[2FFF]と表示されたらテキストエリアAは5000Hから8000Hまでの3000Hバイトあり,残り2FFFHバイトある
M/t:adr テキストエリアの開始アドレスを指定し使用状況を表示する
N 現在のウィンドウの割り当てを表示する
たとえば0/A:なら,ウィンドウOにはテキストエリアAが割り当てられている
Xt t テキストエリア内の交換
P ウィンドウをプライオリティに合わせて表示するかどうかの切り換え
% タプデータを表示するかどうかの切り換え
& 現在のテキストエリアのテキストを消去する
R &コマンドで消したテキストを復活する
! 呼び出したシステムに帰る
   
n:行No.1〜65534
fn:ファイルネーム
t:テキストエリア名A〜D
str:文字列
():省略できる
 
表2 コントロールキー一覧
 
カーソル移動キー
^s
013H
01DH
1文字左に移動  
^D
004H
01CH
1文字右に移動  
^E
005H
01EH
1文字上に移動  
^X
018H
01FH
1文字下に移動  
^A 001H 1単語左に移動  
^F 006H 1単語右に移動  
^- 02DH マークした行へのジャンプ
マイナスの後数字キーを押す。最新のマークが0になる
 
 
画面表示関係
^W 017H 1行下にスクロール *
^Z 01AH 1行上にスクロール *
^R 012H 1ページ下にスクロール *
^C 003H 1ページ上にスクロール *
^J 00AH 画面を表示しなおす *
^T 013H 1ステップ左にスクロール *
^U 014H 1ステップ右にスクロール *
 
タビュレーション関係
^I 009H 次のタブ位鐙までカーソルを移動する  
^Q 011H タブ位置の設定,解除を行う  
 
ウィンドウコントロール関係
^! 021H ダイレクトに指定のウィンドウにジャンブする *
^" 022H 現在使用中のウィンドウの大きさを最大にし,もう一度押すともとの大きさに戻る  
^# 023H ウィンドウの移動。カーソルがウィンドウの左上に移動しテンキー,カーソルキー,Sを中心としたキーでカーソルを動かし,上記以外のキーを押すと移動したウィンドウを表示する  
^$ 024H ウィンドウの大きさ指定。同上  
 
コピー関係
^0 030H コピーバッファを表示する。スペースキーを押すたびにCH1→CH2→CH3の順で表示される  
^1 031H コピーバッファ1の内容を出力する  
^2 032H コピーバッファ2の内容を出力する  
^3 033H コピーバッファ3の内容を出力する  
^4 034H コピーバッフア1の内容を消去する  
^5 035H コピーバッファ2の内容を消去する  
^6 036H コピーバッファ3の内容を消去する  
^7 037H カーソルの文字をコピーバッファ1に入れる  
^8 038H 力ーソルの文字をコピーバッファ2に入れる  
^9 039H カーソルの文字をコピーバッファ3に入れる  
 
デリート関係(削除した文字はデリートバッファに保存)
^G 007H カーソル上の文字を削除する  
^B 002H カーソルの左の文字を削除する  
^V 016H カーソル以後1行を削除する  
^Y 019H 改行コードを含む1行を削除する *
 
マクロ関係
^; 03BH マクロ0実行  
^: 03AH マクロ1実行  
^, 02CH マクロ2実行  
^. 02EH マクロ3実行  
^/ 02FH マクロ4実行  
^+ 028H マクロ5実行  
^* 02AH マクロ6実行  
^< 03CH マクロ7実行  
^> 03EH マクロ8実行  
^? 03FH マクロ9実行  
 
カット&ベースト関係
^% 025H カーソルの行にカット&ベースト用のマークをつける。マークがついているときはウィンドウの右上の行Noの表示部に*がつく *
^& 026H マークした行からカーソルまでの行をバッファに入れテキストを削除する *
^' 027H マークした行からカーソルまでの行をバッファに入れテキストを削除しない *
^( 028H カーソルの行からバッファの内容をインサートする *
 
行コネクト関係
^N 00EH カーソルの位置でその行を分割する *
^L 00CH カーソルの行と次の行を1文字あけて連結しカーソルを連結部に移動する *
 
デリートバッファ関係
^P 010H カーソルの位置からデリートバッファの内容を出力する  
^K 00BH デリートバッファの内容をクリアする  
 
その他
^O 00FH オーバーライトモードとインサートモードの切り換え  
^SP 020H コントロールモードキープON/OFFの切り換え  
^H 008H 現在の行を変更前に戻す  
^ESC 01BH エディットモードからコマンドレベルに戻る(再設定不可) *
^M
RET
00DH
00DH
改行する  
 
表3 各種ワークエリア
●メインメモリ側
300EH (4E00H) タブデータバッファアドレス
3010H (4F00H) 1行バッファアドレス
3012H (5000H) テキストA開始アドレス
3014H   テキストB開始アドレス
3016H   テキストC開始アドレス
3018H   テキストD開始アドレス
301AH   テキストMAX (#MEMAX)
    テキストエリアの設定はMコマンドでもできる
     
●特殊ワーク側
301CH (0000H) カット&ベースト用バッファアドレス
(0000Hに固定する)
301EH (0700H) コピー用バッフアドレス
(同時にC&Pバッファの上限になる)
3020H (0A00H) ウィンドウデータ用ワークアドレス
3022H (0800H) サーチ用文字列バッファアドレス
3024H (0880H) チェンジ用文字列バッファアドレス
3026H (0C00H) コマンドテキスト用バッファアドレス
3028H (07H) コマンドテキスト用ラインマスク
*ラインNo.にかかるマスクで1行は128バイトなので使えるのは
03H─3行 大きさは0200H
07H─7行 大きさは0400H
0FH─15行 大きさは0800H
1FH─31行 大きさは1000H
3FH─63行 大きさは2000H
7FH─127行 大きさは4000H
FFH─255行 大きさは8000H
3029H (0000H) デリートバッファ用アドレス
*初期値は0000HでC&Pバッファと同じだがコマンドテキストバッファの後ろにすれば重ならないで使える
3028H (03H) デリートバッファ用サイズマスク
*アドレスの上位8ピットにかかるマスクなので使えるのは
01H─大きさは0200H
03H─大きさは0400H
07H─大きさは0800H
0FH─大きさは1000H
1FH─大きさは2000H
3FH─大きさは4000H
7FH─大きさは8000H
たとえばX1turboなら特殊ワークの設定を頭から,
0000H,8000H,8300H,8400H,8480H,8500H,3FH,A500H,0FH
とすると,カット&ペーストバッファが32Kパイト,コマンドテキストが8Kバイト(63行),デリートバッファが4Kバイトとなる
 
図 メモリマップ
●メインメモリ
3000H~3FFFH WINER本体
4000H~4DFFH 1行表示ルーチン
4E00H~4EFFH タブデータバッファ
4F00H~4FFFH エディット用1行バッファ
5000H~ テキストエリア、A~D
各テキストエリアは自由に設定可能
●特殊ワーク
0000H~06FFH カット&ペースト用バッファ、デリートバッファ
0700H~09FFH コピー用バッファ
0A00H~0A00H ウィンドウデータ&ファイルネームバッファ
0B00H~0BFFH サーチ&チェンジコマンド用バッファ
0C00H~1000H コマンドテキストバッファ
*特殊ワークに余裕があればカット&ペースト用バッファとデリートバッファを分割できる
 
(C)1988 Tamaki Kondou(original)
(C)1997 Junji Okazaki(edited)
(C)2024 Oh!Ishi,Nibbles Lab.(formatted)