tbasic 1.61を公開しました。

tbasicセット1.61を公開しました。

tbw161set.zip 
https://www.tbasic.org/downloads/index.html

です。

Ver. 1.6 及び 1.61の更新の詳細は,https://tbasic.org/documents/202501WhatsnewTBasic161.pdf
にあります。


Ver.1.6及び1.61の更新は主として,ユニコード,日本語処理関連のものです。tbasicがユニコード対応になったのは,2010年 Ver.1.2ですから,もう大分前のことです。この間,コンピューター利用環境の世界では,ユニコードが徐々に浸透し,今では意識しないでユニコードを利用する状況になりました。

しかし,それでも日本語環境になかで,旧来型のShift_JISエンコーディングが広く使われています。またメール環境の中では 今でも7ビットJISエンコーディングが普通に使われています。昔作成したデータやプログラムがShift_JISで記述されていることも多いでしょう。また,現在でも青空文庫で提供されてる文書は殆ど(すべて?)Shift_JISです。

このような中で,tbasicは初級インタプリタ言語として,できる限りそれらの環境に応じた処理ができるようなツールとして心がけています。種々のBASICがある中で,これはtbasicの特徴の一つとも思えます。それらは主として,読み取り,書き込みが種々のエンコーディングで可能ということで実現できます。今回の更新では,それらをより使いやすいように改良を加えました。

扱えるエンコーディングとしては,普通の使用では,Shift_JISとUTF-8があれば,ほぼ十分と思えます。しかし,tbasicでは,JIS,EUC,UTF-16,UTF-32も扱えます。これらを判定する関数として,GetFileEncodingName関数をサポートしています。

この関数でこれらすべてのエンコーディングを完全に判定することはできませんが,日本語を含むファイルについてはかなり正確に判定できると思っています。元々エンコーディング判定は原理的に完全にはできません。それは,同じファイルがいくつかのエンコーディングでファイルとして意味の持つものが存在するからです。

例えば,内容が”NX”というファイルをShift_JISで作ったとします。このファイルのバイナリとしての内容は,16進数で表すと,2バイトで,

4E 58

となります。これは,単純なアスキーファイルになりますから,UTF-8,JIS,EUCで読んでも内容は “NX”になります。ところが,このファイルをUTF-16のBigEndian として読むと,内容は”乘”になります,また,UTF-16のLittleEndianとして読むと,”塎”となります。ですから,この2バイトのファイルが与えられたとき,エンコーディングの情報が与えられていなければ,なんと読んでよいのか分かりません。

このように,ファイルのエンコーディングは,読む側が,予め知っているというのが原則になります。しかし,それも限界があり,GetFileEncodingName関数それを補完するものとしての位置づけです。

今回の更新では,このGetFileEncodingName関数の改良及び,種々のエンコーディングでの読み書きの改善を図りました。種々のエンコーディングを利用する状況は少ないかもしれませんが,必要になった場合,有効なツールとなると思われます。

binary viewer

tbasicが1.60になりました。これを機会にそのsamplesとして,いくつかのプログラムを作りました。ここではその中から,binary viewer を紹介します。プログラムの名前は,「Tiny Binary Viewer」で,ファイル名は「tbview.tbt」です。tbasic set 1.60 のsamples\Advancedの中にあります。

1.60では新たに,バイナリファイルの読み書きができる ReadAllBytes,WriteAllBytes関数・手続きをサポートしました。この使い方は,Tiny Basic for Windows ファイル操作編(2023年08月版)10節に書いてあります。簡単に言えば,ファイルの内容をバイト列として,読み書きするものです。
この機能を使えば,原理的には,バイナリエディタを作ることも可能ですが,利用目的が思いつかないので,今回は,binary viewerを作ることにしました。バイナリビューアはすべてのファイルのバイト内容を表示するもので。テキストファイル,画像ファイル,文書ファイル,実行ファイルなど,標準的な起動・開く方法とは異なった形式の表示を得ることができます。そして種々のファイルの舞台裏をつぶさに見ることができます。
今回色々なエンコーディングについて調べるときに,それらの内容の確認をするためには,テキストファイルをバイナリとして確認する必要がありました。そして, ユニコードへ(2023年8月版)を書く際に,実際にtbview.tbtを確認用として使いました。

tbview.tbtの起動画面は次です。

ここで,表示は16進表示,10進表示,アスキー表示が可能です。16,10進表示は0~255までの数値ですが,アスキー表示は,制御コードと印刷可能範囲で記号・数値・アルファベットが表示されます。
例えば,「1+1の計算」と記入したテキストファイルをシフトジスでファイル名「1足す1SJIS.txt」として保存して,この内容をバイナリビューアで表示させると,次のようになります。16進表示です。

見ると,ファイル内容は「31 2B 31 82 CC 8C 76 8E 5A」です。この結果は,ユニコードへ(2023年8月版)の23ページでシフトジスでの計算結果に合致します。
同様に,「1+1の計算」と記入したテキストファイルをエンコーディングEUCでファイル名「1足す1EUC.txt」として保存して,この内容をバイナリビューアで表示させると,次のようになります。

見ると,ファイル内容は「31 2B 31 A4 CE B7 D7 BB BB」です。この結果は,ユニコードへ(2023年8月版)の27ページでEUCでの計算結果に合致します。

プログラムは全体で,200行弱ですが,コントロール画面の設定がかなりの部分を占めています。実際,ファイルを指定して,その内容を表示するだけなら,数10行のプログラムで可能です。


工夫の余地はありますが,一応のツールとして使うことができます。興味があったらお試しください。

time stamp の変更

tbasicが1.60になりました。これを機会にそのsamplesとして,いくつかのプログラムを作りました。ここではその一つを紹介します。プログラムの名前は,「Time Stamp Changer」で,ファイル名は「tsChanger.tbt」です。tbasic set 1.60 のsamples\Advancedの中にあります。

このプログラムの目的はファイル,フォルダーのtime stamp を変えるものです。
ファイルやフォルダーにはtime stampと言った3種類の性質があります。「作成時刻,更新時刻,最終アクセス時刻」です。これらの性質は,ファイルの使用状況を示すもので,ファイルを右クリックして,表示させるプロパティでそれを見ることができます。
そしてこれは本来の性質上,変更すべきものではありません。

しかし,時には変更したい場合があります。これはそのような時のためのツールです。

time stampの変更は,よく使われる一般的機能なので,特別なものではありません。標準的なプログラミング言語で実現できると思います。また,プログラミング言語を使わなくても,Power Shellでも実現できます。
実はまた,tbasicでも,1.50で,「SetCreationTime,SetLastWriteTime, SetLastAccessTime」をサポートしましたので,この時点で,tbasic でも可能でした。
プログラムを書くのであれば,特定のファイルのtime stamp変更は数行で可能です。

今回1.60を機会にこのプログラムを作ったのは,機能と言うより,操作性を重視してツールとして作ったものです。tsChanger.tbtを起動すると次の画面になります。

フォルダ参照またはファイル参照をクリックして目的のファイルを確定します。
参照をクリックすると,例えば,次のような選択画面がでます。

確定すると,次の画面が出ます。そこで変更したい時刻を設定して,目的とするボタンを押すと,設定できます。例えば,次のようになります。

このように,ファイルの選択,設定等視覚的に,簡単にできます。tbasicでのコントロール画面の機能をフルに使ったものです。ver. 1.60で,コントロール画面の機能を少し強化し,それを使いました。

プログラムは全体で,約250行で,殆どがコントロール画面設定の部分です。

少数のファイルが対象なら,このままで十分に目的が果たされます。また,必要に応じてこのプログラムを変更すれば色々機能を追加することができます。

興味のある方は実行してみてください。

このプログラムの実行時の注意をあげます。
・使用中のファイルやフォルダの time stampは変更できません。
・ファイルですと開いているものなどです。
・フォルダの time stamp の変更は少し微妙です。
フォルダが使用中と言うことは,そのフォルダ下にあるファイルが使用中ということです。たくさんのファイルやフォルダを含むフォルダの場合,その中にあるファイル等が一つでも使われていると変更できなくなります。

1 2 3 10