DOS で使う

[ 目次 | 更新履歴 | ヲレのモバ | DOS | BSD | プログラム | もがく日々 | 関連リンク ]


NOTICE

このページに書いてあることはメーカー保証外のことをしているので、個人の責任で行ってください。 なにが起こっても責任は持ちません。

CONTENTS


とりあえずこれをしなきゃはじまらない

まず DOS に降りる方法から。

姫代さんの時計じかけ本舗 internet ソフトウェアライブラリから UniExitShell を持ってきて登録。実行すると D:\UNISHELL.DBG を作成してくれる。これで準備はオッケー。 裏のリセットスイッチを押して左右の SHIFT キーをずーっと押していると C:\> と表示されて autoexec.bat の途中で止まる(というか UNISHELL.EXE の実行が終わる)。

[DOS に降りた直後の画面]

これでもう DOS でやり放題。このままでは画面いっぱいに表示できないし日本語も出ないので、mogd を常駐させて dir とかしてみよう。あとは同ページにある常駐物やツールをお好みで入れよう。


組み込みサンプル

ap.bat という名前で起動バッチを作っている。

---

@echo off
set COMSPEC=
set UNI_PATH=
set PATH=
a:\bin\histcsh -s -t -r^[[C -l^[[D -N1 -S512 -p%%_
a:\bin\mgalt -u kanaoff numoff
a:\bin\mogd -v0
a:\bin\adddev a:\mg.dev
a:\bin\bindkey
a:\bin\mgai -s -q
c:\dos\power off
a:\bin\mgbatt -v -a batt=lo+ ac=hi+ -t timer=20 up=hi -k nokey=180
a:\bin\mgoff -s -q

path=a:\bin;d:\;c:\;c:\dos
set COMSPEC=c:\command.com
set TMP=a:\tmp
set TZ=JST-9
set PROMPT=$s
set TERMCAP=a:\etc\termcap
set TERM=mg24
set HOME=a:\work
set CDPATH=a:\work;a:\
set DF=AD
set LESSCHARSET=dos
set NG=a:
set USER=sharl
set ROGUEOPTS=jump,directory:a:\tmp,file:a:\tmp\rogue.sav

mgask 1
todo
---

詳しくは各ソフトのドキュメントを熟読のこと。

mg.dev は以下のとおり。

---

DEVICE = C:\DOS\NECAIK1.DRV
DEVICE = C:\DOS\NECAIK2.DRV
DEVICE = A:\ETC\PANSI.SYS
---

あくまでもサンプルなので、各自の環境に合わせて適宜変更のこと。

環境変数領域について

256bytes しかないので注意。拡張したい人は exenv 1.5.1 というツールで拡張できます。5.x までしか対応してないとドキュメントには書いてあるけど、6.20 でも拡張可能なことを確認。メモリの fragmentation が発生するけど…狭いよりはいいか。

DOS 画面サンプル

[Vz1] [Vz2] Vz が動作中。DOS 用の常駐画面キャプチャがあれば、もっと綺麗に撮れるんだけど、どこかにないかなぁ。

[オリジナル] JPEG ビュア mgjv でのタイリングによる違いの実験。これがオリジナル画像。
[タイリングなし] [タイリングあり] 常駐しない画面キャプチャが吐くファイルを mggtoppm, pnmcrop, ppmtogif で変換した。右がタイリングありで比較的綺麗に出ている。


青モバでデジカメの画像を表示

(97/08/22)
富士フィルム DS-10 の画像の表示に成功。スマートメディアをモバに挿して吸い出し。このデジカメの 画像ファイルフォーマットは Exif フォーマットになっているので JFIF 形式決め打ちで表示しようと する mgjv 1.20 では表示できない。IIJ の Simtel ミラーにある jpeg6a.zip に入っている cjpeg, djpeg を使って DS-10 の画像を変換する。

djpeg -pnm dsc00001.jpg

とすると、PPM 形式のファイル dsc00001.ppm ができる。これを cjpeg にかけると Exif ヘッダではない JPEG ファイルができあがる。

cjpeg -outfile new.jpg dsc00001.ppm

これで mgjv 1.20 で表示できる new.jpg ができる。他のメモリカード対応デジカメの JPEG ファイルもこの方法で表示できると思われる。

こんなことをやるのは面倒だし電池がもったいないので、ぜひ mgjv で Exif ヘッダに対応して もらいたいものである。


(97/09/11)
mgjv の作者に Exif ヘッダ対応のことを聞いてみたら、対応予定なしとのこと(悲)。

最近発売されているモバには Exif ヘッダに対応している画像ビュアが内蔵されてるのね。NEC は青モバユーザをサポートしてくれないだろうから、今のところはこの方法で表示するしかない。


(97/09/16)
今までの手順を自動化するため適当にプログラムを書いてみる。カードを入れ替えても実行できるように 内蔵ドライブ(D:)をだいぶ使っている(MC-K1 は D: が 811K しかない)のが納得いかないが しょうがない。紺モバ内蔵の画像ビュアより実行速度が速いのが救いかな。でも電池がもったいないのは あいかわらず。とはいえ、お試し DOS からも実行できるので かなり便利になった。QV シリーズの CAM フォーマットに対応する必要はないだろう(camtojpeg と pnmscale 使えばできるけど)。

DOS で動くのを確認した UNIXy なソフトウェア

Bold 表示のアンカータグはこのサイトに置いてあるものです。

通信を行うものの導入はしばらく予定がありません。通信したい人は鈴電さんのページを見るのがいいかも。


シェル コンパイラ エディタ その他ツール類 ゲーム

シェル

HistCSH Ver 2.04A
tcsh ライクなコマンドライン編集機能を持った常駐シェル。ヒストリ、別名定義、ファイル名補完など tcsh と見間違うインターフェイスを持つ。残念ながら command.com の呪縛から逃れられるものではない。

コンパイラ

LSI-C 試食版
gcc ぢゃないけど、プロトタイプの開発にはもってこい。

エディタ

Ng 1.3L enhanced MEI 版
JVim 3.0-j1.3e
これでバリバリとプログラムを書こう。動かすための情報はこっち
MicroEMACS for DOS/V(V 1.11t)
ベースバージョンは 3.11a です。モバだとちょっと色が見づらいかな。こいつが X680x0 版 MicroEMACS のように補完ウインドウを出してくれたり display で変数名を補完できるようになると嬉しいんだけど。4.xx に期待?
Demacs 1.2.0
適切な termcap を設定して elisp できちんと設定すると動くことを確認。 しかし青モバでは満足な動作速度が得られなかったので削除(汗;)。

その他ツール類

jperl version 4.036 + 1.4
いわずと知れた perl。MC-K1 でも動くけど、大量の連想配列を持つと死ぬ。2 Mbytes 搭載モデルなら かなり大きな連想配列でも大丈夫だろう。(←誰か実験して)
GNU sed 1.18 + mb1.03
GNU awk 2.15.6 + mb1.04
GNU grep 2.0 + mb1.04
この辺もお約束。
UNIX-like tools
basename, cal, cat, cdate, chd, chmod, chvol, cmp, cp, df, diff, egrep, expand, false, fecho, fgrep, findf, fold, foreach, head, joinf, ls, makedir, mv, od, pr, pwd, removdir, rm, setenv, sort, split, tail, tee, test, tman, touch, tr, unexpand, uniq, wc など UNIX 者には馴染み深いツールが揃っているパッケージ。好みに応じて導入できる。
Simtel gnuish
diff, fileutils, gzip, indent, patch, rcs, tar, textutils, unzip, zip などがある。GNU のツールに慣れ親しんでいる人にはこちらのほうがいいだろう。使い勝手が変わらないので、 イライラすることがないぞ。
fileutils は fut312bx.zip だ。chmod, cp, dd, df, di(dir), du, install, ls, mkd(mkdir), mv, rm, rmd(rmdir), touch, vdir が入っている。command.com の内部コマンドと同じ名前があるので、 若干違う名前になってる。
textutils は tut111ax.zip だ。cat, cksum, comm, csplit, cut, expand, fmt, fold, head, join, nl, od, paste, pr, sort, split, sum, tac, tail, tr, unexpand, uniq, wc が入ってる。
rcs は rcs57pc1.zip の中の bindos/ 以下のファイルを使おう。環境変数 USERTMP が必須だ。diff が必要なので注意…ってのは rcs を使おうって人ならわかってると 思うけど忘れやすいので。
cjpeg, djpeg version 6a
jpeg6a.zip というアーカイブに含まれている。Independent JPEG Group 作成の JPEG <-> BMP, GIF, PPM などの相互変換ツール。
df 0.60
ドライブの空き容量を表示する例のやつ。Simtel gnuish fileutils のとは違って、検索するドライブを 環境変数で指定できるので 'Insert diskette for drive B: and press any key when ready' とかいったメッセージを見なくてすむ。便利。
less v332
QUX がコンパイルした less 最新版。30 行表示にも対応。

ゲーム

ローグ・クローン 2 日本語版 1.3
UNIX 者には説明不要ですね。移動時間の暇つぶしにはもってこい。

Ng (日本語 Micro GNU Emacs) を動かす

Ng だけじゃなく、JVim など termcap が必要なものも同じ。

次のアーカイブを用意する。

  1. Hi Text に対応している Ng 1.3L enhanced MEI 版に含まれている ng31c.exe
    ドキュメントはこれ
  2. コンパクトな ANSI エスケープシーケンスエミュレータ pansi 1.00 に含まれている pansi.sys
  3. pansi.sys が内蔵の adddrv では組み込めないため adddev 2.55 で組み込む

組み込み順序はサンプルを参照のこと。pansi.sys と mogd を組み合わせる時は mogd v0.25b 以降のものじゃないとうまく動かん。pansi.com は対応シーケンス不足のためダメ。

termcap の設定例

あまり煮詰めてないけど termcap の設定例。

山野さん <yamano@nwk.cl.nec.co.jp> の情報により pansi.sys? mogd? が暴走するシーケンスを削除しました。まだ変更する可能性があります。

---
mg25|mogd-v0|ansi:\
	:co#80:li#25:am:bs:pt:xn:bl=^G:le=\E[D:do=\E[B:\
	:cl=\E[2J:ce=\E[K:cd=\E[J:sc=\E[s:rc=\E[u:\
	:cm=\E[%i%d;%dH:ho=\E[H:ll=\E[25;1H:\
	:up=\E[A:nd=\E[C:ri=\E[C:im=\E[4h:ei=\E[4l:\
	:UP=\E[%dA:DO=\E[%dB:RI=\E[%dC:LE=\E[%dD:\
	:al=\E[L:dl=\E[M:AL=\E[%dL:DL=\E[%dM:\
        :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
        :mb=\E[5m:md=\E[1m:mr=\E[7m:mh=\E[2m:me=\E[m:

mg24:\
	:li#24:ll=\E[24;1H:tc=ansi:
mg30|mogd-v1:\
        :li#30:ll=\E[30;1H:tc=ansi:
mg29:\
	:li#29:ll=\E[29;1H:tc=ansi:
mg20|mogd-v2:\
        :li#20:ll=\E[20;1H:tc=ansi:
mg19:\
	:li#19:ll=\E[19;1H:tc=ansi:
mg15|mogd-v4:\
        :li#15:ll=\E[15;1H:tc=ansi:
mg14:\
	:li#14:ll=\E[14;1H:tc=ansi:
mg20w|vmode2:\
	:co#106:li#20:ll=\E[20;1H:tc=ansi:
mg19w:\
	:co#106:li#19:ll=\E[19;1H:tc=ansi:
---

HistCSH の alias 機能を利用して

30	mogd -v1; set TERM=mg30
29	mogd -v1; set TERM=mg29
25	mogd -v0; set TERM=mg25
24	mogd -v0; set TERM=mg24
20	mogd -v2; set TERM=mg20
19	mogd -v2; set TERM=mg19
15	mogd -v4; set TERM=mg15
14	mogd -v4; set TERM=mg14

などとすると便利だ。mogd で画面モードを切り替えたときに環境変数 TERM になにがしかの値を設定してくれるようになっていればかなり楽になるんだけど。

mogd の 20 行モード愛用者は -v2 じゃなくて -v3 にするといいことがあるかも。


その他ツール

定常的に使っている UNIX っぽくないツールの紹介。

DIET 1.45f
実行ファイルを圧縮したまま使えるようにできる。磁性面の節約に有効。 実は登録ソフトも圧縮して使える。
DoDiary 1.53
PIM(Personal Information Manager) に分類されるらしい。実行ファイル名が dd.com なので UNIX の dd と紛らわしいので todo.com に rename して使っている。とにかく高速。これのおかげで ToDo リストが お払い箱になった。設定は自己書き換えを行うので DIET で圧縮するとダメなのに気がつかなくて ちょっとハマった。
TRAIN 2.68
目的地にたどり着くための経路検索ソフト。「○すぱあと」のようなものである。便利。画面イメージはこれ
pbmconv 0.3
PPM/PGM/PBM/GIF 相互変換ツール。PC-9801 用の TurboC でコンパイルされていて暴走するので LSI-C 試食版で再コンパイルして使っている。自然画 GIF 画像はデカいし mggif 1.00 はメモリを食うので、こいつで PPM にしてから JPG に変換している。
zmodem
zma.lzh に入っているものを使っている。母艦では Tera Term Pro を介してファイルのやり取りを行っている。Tera Term Pro 側を zmodem 自動受信にしておくと楽。 標準添付の Mobile Gear Station で転送を行うと Windows が非常に重くなるが、Tera Term Pro なら軽いので他の作業がしやすい。ただし 38400bps までしかスピードが上がらない。X680x0 とのファイル転送にも使っている。

ToDo リストデータファイル構造解析結果(途上)

未完成ながら解析したので、なにかの参考になれば。

/* size 16 */
typedef struct {
  unsigned long endmark;	/* チェック用? */
  unsigned long offset;		/* データファイル先頭からのオフセット */
  unsigned long startmark;	/* チェック用? */
  unsigned long dummy;		/* わからん */
} INDEX;

/* size 37 */
typedef struct {
  unsigned char startmark[4];	/* チェック用? */
  unsigned char dummy[3];	/* なんだこれ? */
  unsigned char endmark[4];	/* チェック用? */
  unsigned char date[16];	/* 期限日、記入日が連続して入ってる */
  unsigned char delete;		/* 削除マーク */
  unsigned char rank;		/* ランク */
  unsigned char secret;		/* シークレット */
  unsigned char moto;		/* 依頼元文字列長 */
  unsigned char saki;		/* 依頼先文字列長 */
  unsigned char content[3];	/* 内容文字列長 content[1] だけ必要 */
  unsigned char end[2];		/* 終端? */
} DATA;

INDEX は todo.idx の構造。DATA は todo.dat の。DATA がすべて unsigned char になっているのは strict struct packing のため(UNIX でも動かせるように)なので「ダセ〜」とか言わないように(汗;)。

todo.idx の先頭 16byte はなんらかの情報を管理していると思われるが、詳細は不明。startmark に未処理データの先頭位置、offset に削除データの先頭位置が格納されていることが判明している。

DATA 構造体の直後に「依頼元」「依頼先」「内容」それぞれの内容が連続して格納されている。

「チェック用?」となっているところはデータの整合性チェックにでも使われているのか、INDEX と DATA の startmark, endmark それぞれが一致している。

この結果を元に CSV 変換プログラムを作成してみたところ、 簡単に変換できた。


雑学

モバには

がある(ペンタイプ MC-P1, MC-MP11 は除く)。ちなみに WindowsCE モデルは「モバ CE」だ。 内蔵メモリが 2M から 4M に増加したのは黒モバ以降。MK32 では 6M 搭載している。青モバは EMS が 13page 208KB しかないが、MK22 は 38page 608KB もある。XMS で見るともっとスゴくて

	total	used	free
MC-K1	1236KB	1236KB	  0KB(悲)
MC-MK22	3292KB	3058KB	234KB

となる。(TNX QUX) こんなに違いがあるので MK シリーズはメモリ上で作業がしやすい。登録ソフトの「画像表示対応ファイルコピーツール」はこれらの空いているメモリを ガンガン つかっているらしく、青モバでは動かない(悲)。

メモリをファイルシステムとして使っているモバをメイル端末にするには大量のメモリが必要なことは 最初からわかってたと思うんだけど、コストとの兼ね合いがあったんだろうな。MK32 になってやっと まともなメイル端末になったような気がするのはヲレだけか?

青モバとその他機種の判別は mgjv 1.30β のドキュメントを見ると C:\SYSTEM\UNIKBROM.REV の有無でやるらしい。UNIKBROM.REV がない青モバもあるようなので、機種依存しないためには もっと確実な方法を取らなければならないと思う。Extend memory block の allocation ができるかできないかで判別できるかな?

UNIKBROM.REV の中を見てみると GOLDBIRD-M と書いてある。その他 SMILE-M, SOL-M と書いてあるバージョンがあるようだ。コードネームみたいなもの? 金鳥…。

mogd 0.25b + pansi の環境でカーソル消去・カーソル表示のエスケープシーケンスを 出力するとカーソル形状が上一本線になる症状は mogd 0.25b に依存する模様。

なんか間違いとかあったらツッコミよろしくです。


謝辞

さまざまなソフトを発表してくれる皆さんに感謝。

uniexit, reset, suspend の鈴木昌太さん。
mgalt, mgai, mgbatt, mgoff の Yoshi さん。
mgjv, mglsilib白子雅之さん
mogd の小田和俊さん。

閉鎖的な NIFTY Serve から自由な場所にソフトウェアのアーカイブを持ち出してくださった姫代秋さん
mogd + pansi での termcap に関する貴重な情報をくださり、unikbrom.rev のバージョン違いをまとめてくださった山野さん。

DOS で UNIX な気分を味わうための有用なソフト群を紹介していただいた♪きむらかずしさん


(c)1997-99 Kazuya 'Sharl' Masuda <sharl@hauN.org>