2019/07/27(土)デバッグメモ
2021/05/21 06:56
デバッグメモ
このサイトを作る際に見つけた、公式ヘルプの不具合関連。あとで修正したいと思っている、または修正されるまで書いておく感じのメモ。
ttpmacro.exe システム関係
ttmparse.c ユーザ変数の最大値について
変数 の見栄えを調整していて 変数の最大値設定 との整合性に疑問が出たのでメモ。前提条件
変数の最大値設定 に書いた内容で、ソースコードは見つけた時点でも次のとおり。https://osdn.net/projects/ttssh2/scm/svn/blobs/head/trunk/teraterm/ttpmacro/ttmparse.c
// 変数の個数を128->256、ラベルの個数を256->512へ拡張した。(2006.2.1 yutaka) // 変数の個数を、InitTTL で作っているシステム変数の分だけ追加した。(2006.7.26 maya) #define MaxNumOfIntVar (LONG)(256+4) #define MaxNumOfStrVar (LONG)(256+20) #define MaxNumOfLabVar (LONG)512 #define MaxNumOfIntAryVar (LONG)256 #define MaxNumOfStrAryVar (LONG)256変数 に書いたシステム変数を整理すると、以下の通り。
データ型 | システム変数の数 | 設定されている数 | 備考 |
---|---|---|---|
整数型 | 4 | (256+4) | |
文字列型 | 20 | (256+20) | |
ラベル | 0 | 512 | |
整数型配列 | 0 | 256 | |
文字列型配列 | 1 | 256 | ユーザ変数としては 255 個? |
疑問点
文字列型配列の数が、定義より一つ少ない?// 変数の個数を128->256、ラベルの個数を256->512へ拡張した。(2006.2.1 yutaka) // 変数の個数を、InitTTL で作っているシステム変数の分だけ追加した。(2006.7.26 maya) #define MaxNumOfIntVar (LONG)(256+4) #define MaxNumOfStrVar (LONG)(256+20) #define MaxNumOfLabVar (LONG)512 #define MaxNumOfIntAryVar (LONG)256 #define MaxNumOfStrAryVar (LONG)(256+1)
こんな感じに直してもいいんだろうか?
というか、文字列型配列は、ユーザ変数とは別空間として定義?
自分の知ってる #define の使い方とは微妙に違っていて、正しいのかどうかもわからない……
(LONG) は、引数の名前として LONG にしている? LONG 型(4バイトの符号付整数)を指定できる?
long なのに short にも満たない値として利用している?
結局のところ、ヘタに手を付けたくない感じ。
見つけた日:2019年7月27日
公開した日:2019年7月27日
2019/8/5 追記:
検証は簡単なのだからと、検証マクロを作って実行してみました。
やっぱり文字列型配列だけ1つ少なかったです。
記述するのは簡単だけど、開発環境 (Visual Studio) が無いので動作検証ができない。
フリーの開発環境 MinGW が使えるようなので、時間があればやっておきたい。
コマンド関係
filereadln 読み込み対象ファイルの文字コード
気づいた時点で filereadln には書いていた内容の転記。Tera Term バージョン 4.102 より、マクロファイルのエンコーディングとして UTF-8 および UTF-16 (いずれも BOM の有無はチェック) に対応しているものの、filereadln はどちらにも未対応のため、対象ファイルが UTF-8 または UTF-16 の場合に文字化けする件。
※ Tera Term バージョン 4.103 にて確認。
これは CSV ファイルの内容を listbox で選択できたらいいなと。
具体的には UTF-8 の csv ファイルを filereadln で読み込んで strsplit で分割後、strdim として指定できる形式で外部ファイルとして include できるように変換しファイルを作成 → include したら listbox で選択……という回りくどいことをやろうとして日本語が文字化けしたので気づいた*1。
CSV が Shift JIS なら問題ないものの、どうせなら ttl と同じ文字コードで統一したくなって挫折。
ついでに書くと、UTF-8 は文字のバイト数が可変だからなのか他の文字コード変換ツールへ渡しても一部文字化けしたりするので厄介。
対処法がちょっとわからず。
今のところ、対象ファイルの文字コードが Shift JIS なら問題ないことは分かっているので、回避するまでもなさそう。
でも、Windows 10 のメモ帳でさえ UTF-8 での保存がデフォルトになってきた現在、CSV の文字コードを気にするのはちょっと面倒かも。
見つけた日:2019年7月
公開した日:2019年7月27日
fileconcate コマンドの result 内容
いくつかの条件で、正常系/異常系の result 値を確認してみた。まずは正常系。
指定内容 | <file1> の指定 | <file2> の指定 | result の値 | 備考 |
---|---|---|---|---|
Text同士 | a.txt | b.txt | 0 | 正常系確認 |
b.txt | a.txt | 0 | a.txt を b.txt に追記 |
指定内容 | <file1> の指定 | <file2> の指定 | result の値 | 備考 |
---|---|---|---|---|
存在するText同士 | a.txt | a.txt | 2 | 同名の場合 |
b.txt | b.txt | 2 | 同名の場合 | |
存在するDir同士 | a.dir | b.dir | 3 | ディレクトリの場合 |
a.dir | a.dir | 2 | 同名ディレクトリの場合 | |
b.dir | b.dir | 2 | 同名ディレクトリの場合 | |
存在する テキスト x ディレクトリ | a.dir | b.txt | 3 | テキストとディレクトリの場合 |
b.txt | a.dir | 0 | ディレクトリをテキストに入れる場合は 0 が戻る | |
対象が両方存在しない | a.txt | b.txt | 0 | b.txt が作られる |
a.txt | a.txt | 2 | ||
b.txt | b.txt | 2 | ||
指定不備 1 | :a.txt | a.txt | -1 | |
a.txt | :b.txt | -2 | ||
指定不備 2 | a:.txt | a.txt | 3 | |
a.txt | b:.txt | 0 |
以下、纏める前の情報の列記
ファイルが存在する場合の組み合わせ (正常系)
指定内容 | <file1> の指定 | <file2> の指定 | result の値 | 備考 |
---|---|---|---|---|
Text同士 | a.txt | b.txt | 0 | 正常系確認 |
b.txt | a.txt | 0 | a.txt を b.txt に追記 |
ファイルが存在する場合の組み合わせ (異常系)
指定内容 | <file1> の指定 | <file2> の指定 | result の値 | 備考 |
---|---|---|---|---|
Text同士 | a.txt | a.txt | 2 | 同名の場合 |
b.txt | b.txt | 2 | 同名の場合 | |
Dir同士 | a.dir | b.dir | 3 | ディレクトリの場合 |
a.dir | a.dir | 2 | 同名ディレクトリの場合 | |
b.dir | b.dir | 2 | 同名ディレクトリの場合 | |
Text x Dir | a.dir | b.txt | 3 | テキストとディレクトリの場合 |
b.txt | a.dir | 0 | ディレクトリをテキストに入れる場合は 0 が戻る |
;; 対象が存在する場合 (text のみ) fileconcat 'a.txt' 'b.txt' ; result 0 messagebox result 'result' fileconcat 'a.txt' 'a.txt' ; result 2 messagebox result 'result' fileconcat 'b.txt' 'b.txt' ; result 2 messagebox result 'result' ;; 対象が存在する場合 (dir のみ) fileconcat 'a.dir' 'a.dir' ; result 2 messagebox result 'result' fileconcat 'a.dir' 'b.dir' ; result 3 messagebox result 'result' fileconcat 'b.dir' 'b.dir' ; result 2 messagebox result 'result' ;; 対象が存在する場合 (text x dir) fileconcat 'a.dir' 'b.txt' ; result 3 messagebox result 'result' fileconcat 'b.txt' 'a.dir' ; result 0 messagebox result 'result'
ファイル・ディレクトリが存在しない場合の組み合わせ (異常系)
指定内容 | <file1> の指定 | <file2> の指定 | result の値 | 備考 |
---|---|---|---|---|
対象が両方存在しない | a.txt | b.txt | 0 | |
a.txt | a.txt | 2 | ||
b.txt | b.txt | 2 |
;; 対象が存在しない場合 ;fileconcat 'a.txt' 'b.txt' ; result 0 ;messagebox result 'result' ;fileconcat 'a.txt' 'a.txt' ; result 2 ;messagebox result 'result' ;fileconcat 'b.txt' 'b.txt' ; result 2 ;messagebox result 'result'
ファイル指定の間違い (異常系)
指定内容 | <file1> の指定 | <file2> の指定 | result の値 | 備考 |
---|---|---|---|---|
指定不備 1 | :a.txt | a.txt | -1 | |
a.txt | :b.txt | -2 | ||
指定不備 2 | a:.txt | a.txt | 3 | |
a.txt | b:.txt | 0 |
fileconcat ':a.txt' 'b.txt' ; result -1 messagebox result 'result' fileconcat 'a.txt' ':b.txt' ; result -2 messagebox result 'result' fileconcat 'a:.txt' 'b.txt' ; result 3 messagebox result 'result' fileconcat 'a.txt' 'b:.txt' ; result 0 messagebox result 'result'
見つけた日:2019年8月
公開した日:2019年8月24日