2021/02/06(土) [n年前の日記]
#1 [prog][tcltk] Tcl/TkをWindows10にインストール
Windows10 x64 20H2上で、Tcl/Tk (ActiveTcl) をインストールしてみた。
_Enterprise-grade Tcl with ActiveTcl | ActiveState
ActiveState から、ActiveTcl8.5.18.0.298892-win32-ix86-threaded.exe を入手。今回は D:\Tcl\ にインストールした。
しかし、動作確認をしてみたら、Iwidgets が見つからないと言われてしまう…。teacup install --with-recommends Iwidgets と打ってもダメ。エラーが出る。
ActiveTcl-8.6.9.8609.2-MSWin32-x64-5ccbd9ac8.exe を入手して、D:\Tcl\ にインストールし直したところ、Iwidgets を使ったスクリプトも動いてくれた。
_Enterprise-grade Tcl with ActiveTcl | ActiveState
ActiveState から、ActiveTcl8.5.18.0.298892-win32-ix86-threaded.exe を入手。今回は D:\Tcl\ にインストールした。
しかし、動作確認をしてみたら、Iwidgets が見つからないと言われてしまう…。teacup install --with-recommends Iwidgets と打ってもダメ。エラーが出る。
ActiveTcl-8.6.9.8609.2-MSWin32-x64-5ccbd9ac8.exe を入手して、D:\Tcl\ にインストールし直したところ、Iwidgets を使ったスクリプトも動いてくれた。
◎ exe化を試してみた。 :
.tcl のexe化を試してみた。手順は、以前メモしたやり方を踏襲。
_mieki256's diary - Tcl/Tkのスクリプトをexe化
_Google Code Archive - Long-term storage for Google Code Project Hosting.
以下のファイルを入手してリネーム。
sdx.bat も作成。
_SDX under Windows
sdx.bat
hoge.tcl というスクリプトがあると仮定する。exe化の流れは以下。
hoge.tcl を hoge.kit (VFS,仮想ファイルシステム) にラッピング。
hoge.kit を逆ラッピングして hoge.vfs/ に展開。
hoge.vfs/ 以下を hoge.exe にパッケージング。つまりexe化する。
_mieki256's diary - Tcl/Tkのスクリプトをexe化
_Google Code Archive - Long-term storage for Google Code Project Hosting.
以下のファイルを入手してリネーム。
- sdx-20110317.kit -> sdx.kit
- tclkit-8.5.9-win32.upx.exe -> tclkit.exe
- tclkitsh-8.5.9-win32.upx.exe -> tclkitsh.exe
sdx.bat も作成。
_SDX under Windows
sdx.bat
@tclkitsh sdx.kit %1 %2 %3 %4 %5 %6 %7 %8 %9
hoge.tcl というスクリプトがあると仮定する。exe化の流れは以下。
hoge.tcl を hoge.kit (VFS,仮想ファイルシステム) にラッピング。
sdx.bat qwrap hoge.tcl
hoge.kit を逆ラッピングして hoge.vfs/ に展開。
sdx.bat unwrap hoge.kit
hoge.vfs/ 以下を hoge.exe にパッケージング。つまりexe化する。
sdx.bat wrap hoge.exe -runtime tclkit.exe
◎ MSYS2上でも動作確認。 :
MSYS2上でも、Tcl/Tk が動作するか確認してみた。関連パッケージは既にインストールされていた。pacman -Ss tcl と打てば、おそらく関連パッケージがリストアップされるのではないか、と。間違ってるかもしれんけど。
*NIX上ではどうやって動かすのかなと思ったけれど、各スクリプトの先頭に以下の1行を書いておけばいいらしい。
もしかすると、スクリプトの改行コードを LF にしておかないといけないのかもしれない。面倒な時は、dos2unix *.tcl を動かせば改行コードをLFに変換してくれる。pacman -S dos2unix でインストールできる。
*NIX上ではどうやって動かすのかなと思ったけれど、各スクリプトの先頭に以下の1行を書いておけばいいらしい。
#!/usr/bin/env wishwish が Tcl/Tk を動かすためのプログラムなのだろう…。/usr/bin/env wish で、PATHの中から wish を探し出してくれる。
もしかすると、スクリプトの改行コードを LF にしておかないといけないのかもしれない。面倒な時は、dos2unix *.tcl を動かせば改行コードをLFに変換してくれる。pacman -S dos2unix でインストールできる。
[ ツッコむ ]
#2 [prog] PandocをWindows10にインストール
Markdown を html に変換したいので、Pandoc をインストールした。環境は Windows10 x64 20H2。
_Releases - jgm/pandoc
pandoc-2.11.4-windows-x86_64.msi を入手してインストール。
インストール先は尋ねてこなかった。後で確認したら以下にインストールされていた。
インストールされたか確認。
Markdown を html に変換するなら以下。
css等を指定しつつ変換するなら、もう少し指定が必要。
_Pandoc で Windows に作るmarkdown to html, docx 環境 - Qiita
_Pandoc で github 風 CSS を使った standalone な html を生成 - Qiita
_Releases - jgm/pandoc
pandoc-2.11.4-windows-x86_64.msi を入手してインストール。
インストール先は尋ねてこなかった。後で確認したら以下にインストールされていた。
C:\Users\(アカウント名)\AppData\Local\Pandoc\ユーザー側の環境変数 PATH に追加。
インストールされたか確認。
> pandoc --version pandoc 2.11.4 Compiled with pandoc-types 1.22, texmath 0.12.1, skylighting 0.10.2, citeproc 0.3.0.5, ipynb 0.1.0.1 (以下略)
Markdown を html に変換するなら以下。
pandoc hoge.md -t html5 -o hoge.html
css等を指定しつつ変換するなら、もう少し指定が必要。
_Pandoc で Windows に作るmarkdown to html, docx 環境 - Qiita
_Pandoc で github 風 CSS を使った standalone な html を生成 - Qiita
pandoc hoge.md -s --self-contained -t html5 -c github.css -o hoge.html
[ ツッコむ ]
#3 [hsp] HSPでiniファイルの読み込み
スクリーンセーバのラッパーっぽいプログラムをHSPで書けないものかなと思い立った。HSPにはスクリーンセーバを作成するサンプルが同梱されているので、ソレを参考にして改造すれば作れるのではないかと。
HSPというのは、ゲームやツールを作れるプログラミング環境、という説明でいいのだろうか。Windows / Linux上で利用できる。
_プログラミング言語 HSP 公式 - HSPTV!
_onitama/OpenHSP: Hot Soup Processor
Windows10 x64 20H2上に、HSP3.51 と HSP3.6beta4 をインストールした。基本的には HSP3.6beta4 で動作確認をしていく。
余談。最近は心理学関係の何かでHSPなる略称が流行ってしまったようで、ググってもそっちばかり出てくる…。
HSPというのは、ゲームやツールを作れるプログラミング環境、という説明でいいのだろうか。Windows / Linux上で利用できる。
_プログラミング言語 HSP 公式 - HSPTV!
_onitama/OpenHSP: Hot Soup Processor
Windows10 x64 20H2上に、HSP3.51 と HSP3.6beta4 をインストールした。基本的には HSP3.6beta4 で動作確認をしていく。
余談。最近は心理学関係の何かでHSPなる略称が流行ってしまったようで、ググってもそっちばかり出てくる…。
◎ 実行プログラムのパスを取得。 :
まずは、実行プログラムである自分自身のファイルパスを取得できそうか試してみる。それができれば、(自身のファイル名).ini のファイルパスを得ることもできるだろう…。
以下のページが参考になった。ありがたや。
_HSP3 あれこれ 【ファイル関連サンプルソース】 - Let's HSP!
_getexeloc.hsp
HSPスクリプトエディタで開いて、Ctrl + F9 を叩いて exeファイルを作成。実行してみる。
取得できたっぽい。
以下のページが参考になった。ありがたや。
_HSP3 あれこれ 【ファイル関連サンプルソース】 - Let's HSP!
_getexeloc.hsp
; 実行プログラムの名前やパスを取得してみる ;; 実行ファイル名を指定 #packopt name "getexeloc" ;; exe生成を指定 #packopt type 0 #uselib "kernel32" #func GetModuleFileName "GetModuleFileNameA" int, int, int sdim filepath, 256 GetModuleFileName, varptr(filepath), 256 cls mes "dir_cur : " + dir_cur mes "dir_exe : " + dir_exe mes "filepath : " + filepath ;; ファイル名のみ取得 mes "filename : " + getpath(filepath, 8) ;; 拡張子を除外してiniファイル名にする mes "ini file : " + getpath(filepath, 1) + ".ini"
HSPスクリプトエディタで開いて、Ctrl + F9 を叩いて exeファイルを作成。実行してみる。
取得できたっぽい。
◎ iniファイルを読み込む。 :
iniファイルを読み込んでみる。
_read_ini.hsp
iniファイルは以下。
_read_ini.ini
HSPスクリプトエディタで Ctrl + F9 を叩いて exeファイルを生成。実行してみる。
iniファイルの内容を取得できた。
一応少しだけ解説。
これで、"自分自身のファイル名".ini を読み込んで、中に書かれた文字列を取り出すことができた。
_read_ini.hsp
; iniファイルを読み込んでみる ;; 実行ファイル名とexe生成を指定 #packopt name "read_ini" #packopt type 0 fullscreen_bin = "" config_bin = "" preview_img = "" #uselib "kernel32" #func GetModuleFileName "GetModuleFileNameA" int, int, int ;; 自分自身のファイル名を取得 sdim filepath, 256 GetModuleFileName, varptr(filepath), 256 ;; iniファイルのファイルパスを生成 ini_filepath = getpath(filepath, 1) + ".ini" ;; iniファイル読み込み ini_data = "" notesel ini_data ; iniファイル存在チェック exist ini_filepath if strsize = -1 { mes "Not found " + ini_filepath } else { ; iniファイルを読み込む noteload ini_filepath ; 1行ずつ内容を解析して記録 sdim ld, 512 repeat notemax noteget ld, cnt ; 1行分を取得 if instr(ld, 0, "fullscreen_bin=") >= 0 { split ld, "=", kind, cmd gosub *checkfileexist fullscreen_bin = cmd } if instr(ld, 0, "config_bin=") >= 0 { split ld, "=", kind, cmd gosub *checkfileexist config_bin = cmd } if instr(ld, 0, "preview_img=") >= 0 { split ld, "=", kind, cmd gosub *checkfileexist preview_img = cmd } loop } cls mes "fullscreen : " + fullscreen_bin mes "config : " + config_bin mes "preview : " + preview_img ; main loop repeat ; ESC key to exit stick key, 128 if key & 128 : end await (1000 / 60) loop end ; ファイルの存在チェック。 ; cmd にファイルパスを入れて呼ぶ。 ; ファイルが存在しなかったら cmd が空文字列になって返る。 *checkfileexist if cmd = "" : return exist cmd if strsize = -1 { cmd = "" } return
iniファイルは以下。
_read_ini.ini
fullscreen_bin=D:\home\prg\hsp\fullscreen\boundball.exe config_bin=D:\home\prg\hsp\fullscreen\boundball_cfg.exe preview_img=D:\home\prg\hsp\fullscreen\sample.bmp
HSPスクリプトエディタで Ctrl + F9 を叩いて exeファイルを生成。実行してみる。
iniファイルの内容を取得できた。
一応少しだけ解説。
- テキストファイルを読み込むには、notesel, noteload, noteget, notemax 等を使える。
- ファイルの存在確認は、exist ファイルパス、が使える。その直後に strsize を調べてみて -1 だったらファイルは存在していない。
- instr() で、指定文字列が入ってるかどうかを調べられる。
- split を使って、任意の区切り文字で文字列を分割できる。
これで、"自分自身のファイル名".ini を読み込んで、中に書かれた文字列を取り出すことができた。
◎ 外部プログラムを実行。 :
HSPから外部プログラムを実行してみる。以下が参考になった。
_exec命令 (外部プログラムの起動) HSP3入門講座 - Let's HSP!
_exec_tes.hsp
実行すると、Windowsの電卓が起動する。
とりあえず、iniファイルの読み込みと、外部プログラムの実行はできたので、これをスクリーンセーバのサンプルに組み込んでいけば…。どうかな…。
_exec命令 (外部プログラムの起動) HSP3入門講座 - Let's HSP!
_exec_tes.hsp
; 外部プログラムを実行 #packopt name "exec_tes" #packopt type 0 exe_path = "C:/Windows/System32/calc.exe" exist exe_path if strsize = -1 { mes "Not found " + exe_path wait 5 * 100 end } exec exe_path end
実行すると、Windowsの電卓が起動する。
とりあえず、iniファイルの読み込みと、外部プログラムの実行はできたので、これをスクリーンセーバのサンプルに組み込んでいけば…。どうかな…。
[ ツッコむ ]
以上、1 日分です。