今回のプログラムはセミオートファイルコピープログラムです。このプログラムの特徴は一切機械語プログラムを用いていないにもかかわらず、BASICファイルであればほとんどコピーできるところにあります。
プログラムを入力して実際に動かしてみれば分かることなのですが、最初ディレクトリを読み込んでいるときは時間がかかりますがファイルをコピーしている時間は短くて済みます。
プログラムで使っている特殊な手法は「送り手側のディスケットのディレクトリを読み込むときに『Files』を用いている」、「BASICインタープリタの一部を書き換えてBASICのテキストファイルを機械語ファイルとしている」の二種類です。
前者の手法を行なっている理由はディレクトリを読み込む時間が短くて済み、なおかつファイル名のソーティングを行なってくれるからです。ディレクトリが読み込まれるところが&H1000番地から&H17FF番地までと決まっていますから、必要な情報を安全なところに転送しておかないといけません。
後者の手法を行なっている理由は、通常BASICではプログラム中で別のテキストファイルを読み込んだり、書き込んだりすることができないからです。そこでインタープリタの一部分(機械語ファイルの読み込み・書き込みを行なっているところ)を書き換えてテキストファイルを機械語ファイルとして読み込ませているわけです。書き換えているところはBLOADやBSAVEでファイルの種類をチェックしているデータです。
この二つの手法を用いるといろいろなことができます。何本かのプログラムをチェインしなければならないソフトの場合、予め必要なプログラムをメモリディスクの方に転送を行なって、ディスケットへのアクセスを極力減らすことができます。さらに特定のディレクトリ上のファイルの削除・属性の変更ができるようになります。
次にコピープログラムを使うにあたって必要だと思われる変数の説明をします。 |
|
|
S_DEV$ |
="1:"
|
→
|
コピー元のドライブ番号を入れています。
|
|
D_DEV$
|
="2:"
|
→
|
コピー先のドライブ番号を入れています。
|
|
F$
|
=""
|
→
|
特定のファイルだけをコピーするときにファイル名を入れます。ワイルドカードを使用することができます。
|
|
このプログラムではドライブ1からドライブ2へのコピーを標準にしていますので、他のドライブに変更したい場合は上記の変数の内容を変更してください。ここが、このプログラムが"セミオート"コピープログラムと呼ばれる理由です。また次の場合はコピーを行ないませんので注意してください。コピーができない場合には理由に応じたコメントがファイル名の後ろに出ます。
|
|
|
|
1: |
コピー先に同じ名前のファイルが存在している場合:
『同じファイル名のファイルが存在しています。』と表示されます。
|
|
2:
3: |
シーケンシャルファイルので一つのデータの長さが255文字分を越えた場合:
ランダムファイルのコピーではファイルの大きさが120KBを越えるもの:
『このプログラムではコピーできません。』と表示されます。
|
|
|
|
何らかの理由でコピーができなかった場合、1のときにはコピー先のファイルを削除してから再び行なってください。また、2・3のときにはBASICに付属しているコピープログラムでコピーを行なってください。また、プロテクトノッチの検出を行なっていませんので、コピー先のディスケットは書き込み可能な状態にしておいてください。
このプログラムは非常に簡単に作られていますので、是非入力して使ってください。もっとも党員の方は私まで言って頂ければプログラムを差し上げます。そのときにはOh!MZ '87.11号に載っていたアルゴブロック崩しとNEW ON 0の虫取りプログラムもお付けします。
プログラムを組んでいて疲れたらすぐ遊べるアルゴブロック崩しは面白いですね。NEW ON 0の虫を取るとOh!MZにも書かれてありましたが、フリーエリアが増えてたいへんよろしい!
|