2012.6.8
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第144回]


●ファンクションコール17H(ファイル名の変更)

ファンクションコール17Hは[第93回]でテストしました。
作成したテストプログラムはFTST14です。
ファンクションコール17HはビルトインコマンドのREN(リネーム)とほぼ同じ働きをします。
ただ、[第93回]に書きましたようにコピー先のファイル名と同じファイルがすでに存在していてもエラーにならずに同じファイル名にしてしまいます。
ファンクションコール17hを使う場合には、その点に注意する必要があります。

[第93回]と同じように、FTST14を使ってテストをしてみました。

logfile nd80zlog\05312051.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/ld ftst14.bin,8100
loading FTST14.BIN ...0098(152)bytes loaded,from 8100 to 8197
>jp d233

A>b:
B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM
B>save 1 ftst14.com

B>save 1 rentst.bin

B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : RENTST   BIN
B>ftst14 rentst.bin renam.com
00
B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : RENAM    COM
B>ftst14 abc.xyz xxx.yyy
FFerr
B>save 1 renam2.com

B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : RENAM    COM : RENAM2   COM

B>ftst14 renam.com renam2.com
00
B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : RENAM2   COM : RENAM2   COM

B>era renam2.com

B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM
B>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Thu May 31 20:56:57 2012

いろいろテストをしてみたいと思いましたので、アドレス8100HからロードしたFTST14.BINを普通にFTST14.COMとしてセーブするだけではなくて、RENTST.BINというファイル名でもセーブしました。
そしてそのRENTST.BINをFTST14.COMを実行して、RENAM.COMに変更しました。
DIRコマンドで、ファイル名の変更が正しく行なわれたことを確認しました。

今度は存在しないファイル名を指定して、FTST14を実行してみました。
ftst14 abc.xyz xxx.yyy[Enter]の実行です。
結果はAレジスタの値としてFFが表示され、それに続いてerrが表示されました。

さらにテストをするため、
save 1 renam2.com[Enter]
を実行しました。
8100Hからのトランジェントエリアには、FTST14.COMが残っていますから、FTST14.COMと同じものがRENAM2.COMというファイル名でもセーブされたことになります。
しかしここではFTST14.COMと同じファイルが欲しくてそうしたのではなくて、テストのために削除しても構わない適当なファイルが欲しくて、そのようにしたのです。

テストしたかったのは、変更後のファイル名としてすでに存在するファイル名を指定するというテストです。
ftst14 renam.com renam2.com[Enter]
を実行しました。

RENAM.COMがRENAM2.COMに名前が変更されたため、RENAM2.COMが2つできてしまいました。
ファンクションコール17Hを使うときはこういうことにならないように、事前にファイル名サーチをして、同一のファイル名が存在しないことを確認しておく必要があります。
FTST14はそのようなチェックをしていないため、同じファイル名での二重登録が行なわれてしまいました。
これは、そういうことに注意しないでプログラムを書くとこういうことになってしまいますよ、という例としてテストしたものです。

このままにしておくと紛らわしいので、ERAコマンドで削除してしまいました。

●ファンクションコール1EH(ファイルアトリビュートのセット)

ファンクションコール1EHについては[第99回]で説明をしました。
ファンクションコール1EHはファイルアトリビュートのセットを行ないます。
そこで作成したテストプログラムはFTST17です。

ファイルアトリビュートはファイルの属性のことで、CP/MではそのファイルがR/O(Read Only、更新削除禁止)かR/W(読み書き可能)か、またSYS(システムファイル)か、DIR(それ以外のファイル)かというファイル属性を付与できます。

通常の操作でファイルを作成したときは、そのファイルのアトリビュートはR/WかつDIRになります。
その後ファンクションコール1EHによって、それをR/OやSYSに変更したり、またはR/OやSYSをR/WやDIRに戻したりすることができます。

[第99回]と同じように、FTST17を使ってテストを行ないました。


*** nd80z3 basic ****
>/ld ftst17.bin,8100
loading FTST17.BIN ...00e1(225)bytes loaded,from 8100 to 81E0
>jp d233

A>b:
B>save 1 ftst17.com

B>end of ZBDOS
>/ld ftst10-7.bin,8100
loading FTST10-7.BIN ...010e(270)bytes loaded,from 8100 to 820D
>jp d233

A>b:
B>save 2 ftst10-7.com

B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : FTST17   COM : FTST10-7 COM

B>ftst17 fnc0bt1.com
RorW?r
SorD?s
ok

B>ftst17 ftst14.com
RorW?r
SorD?d
ok

B>ftst17 fnc0304t.com
RorW?w
SorD?s
ok

B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : FTST17   COM : FTST10-7 COM

B>ftst10-7
drvno.?b
FNC0BT2  COM RW DIR
FNC0BT1  COM RO DIR
FNC0BT   COM RW DIR
FNC06T2  COM RW DIR
FNC0304T COM RW DIR
FTST14   COM RO DIR
FTST17   COM RW DIR
FTST10-7 COM RW DIR
end
drvno.?
B>end of ZBDOS
>

FTST17を使ってファイルアトリビュートを変更した結果を確認するために、FTST10−7を使います。
FTST10−7は[第98回]で作成しました。

最初にDIRコマンドでファイル名を確認してから、FTST17を実行して、以下の3ファイルについてアトリビュートを設定しました。
FNC0BT1.COMをReadOnly(R)、SystemFile(S)にしました。
FTST14.COMをReadOnly(R)、DirectoryFile(D、普通のファイル)にしました。
FNC0304T.COMをReadWrite(W)、SystemFile(S)にしました。

結果を確認するため、DIRコマンドでファイル名を表示させてみましたら。
あれ?
FNC0BT1.COMとFNC0304T.COMはシステムファイルにしましたから、DIRコマンドでは表示されなくなるはずなのに…。
しっかり表示されています。

FTST10−7を実行して確認してみました。
むむむ。
システムファイルになっていません?
バグがあるようです。

バグを修正して、もう一度トライしてみました。

>/ld zbdos1p.bin,c406
loading ZBDOS1P.BIN ...08f5(2293)bytes loaded,from C406 to CCFA
>jp d233

A>b:
B>dir
B: FNC0BT2  COM : FNC0BT1  COM : FNC0BT   COM : FNC06T2  COM
B: FNC0304T COM : FTST14   COM : FTST17   COM : FTST10-7 COM

B>ftst10-7
drvno.?b
FNC0BT2  COM RW DIR
FNC0BT1  COM RO DIR
FNC0BT   COM RW DIR
FNC06T2  COM RW DIR
FNC0304T COM RW DIR
FTST14   COM RO DIR
FTST17   COM RW DIR
FTST10-7 COM RW DIR
end
drvno.?
B>ftst17 fnc0bt2.com
RorW?r
SorD?s
ok

B>fnc  tst17 fnc0bt.com
RorW?w
SorD?s
ok

B>dir
B: FNC0BT1  COM : FNC06T2  COM : FNC0304T COM : FTST14   COM
B: FTST17   COM : FTST10-7 COM
B>ftst10-7
drvno.?b
FNC0BT2  COM RO SYS
FNC0BT1  COM RO DIR
FNC0BT   COM RW SYS
FNC06T2  COM RW DIR
FNC0304T COM RW DIR
FTST14   COM RO DIR
FTST17   COM RW DIR
FTST10-7 COM RW DIR
end
drvno.?
B>

もう一度FTST17を使って、以下の2つのファイルのアトリビュートを変更しました。

FNC0BT2.COMをReadOnly(R)、SYstemFile(S)にしました。
FNC0BT.COMをReadWrite(W)、SYstemFile(S)にしました。

DIRコマンドを実行しました。
今度はうまくいったようです。
システムファイルに設定した、 FNC0BT2.COMとFNC0BT.COMは表示されなくなりました。

FTST10−7を実行して確認してみました。
おお。
今度はちゃんと’SYS’が表示されています。
やれやれ。
こうやってバグをひとつずつつぶしていくのは、なかなかに根気の要る作業なのです。

ワンボードマイコンでCP/Mを![第144回]
2012.6.8upload

前へ
次へ
ホームページトップへ戻る