mieki256's diary



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 を使ったスクリプトも動いてくれた。

exe化を試してみた。 :

.tcl の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行を書いておけばいいらしい。
#!/usr/bin/env wish
wish が 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 を入手してインストール。

インストール先は尋ねてこなかった。後で確認したら以下にインストールされていた。
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なる略称が流行ってしまったようで、ググってもそっちばかり出てくる…。

実行プログラムのパスを取得。 :

まずは、実行プログラムである自分自身のファイルパスを取得できそうか試してみる。それができれば、(自身のファイル名).ini のファイルパスを得ることもできるだろう…。

以下のページが参考になった。ありがたや。

_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ファイルを作成。実行してみる。

getexeloc_ss.png

取得できたっぽい。

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ファイルを生成。実行してみる。

read_ini_ss01.png

iniファイルの内容を取得できた。

一応少しだけ解説。
  • テキストファイルを読み込むには、notesel, noteload, noteget, notemax 等を使える。
  • ファイルの存在確認は、exist ファイルパス、が使える。その直後に strsize を調べてみて -1 だったらファイルは存在していない。
  • instr() で、指定文字列が入ってるかどうかを調べられる。
  • split を使って、任意の区切り文字で文字列を分割できる。

これで、"自分自身のファイル名".ini を読み込んで、中に書かれた文字列を取り出すことができた。

外部プログラムを実行。 :

HSPから外部プログラムを実行してみる。以下が参考になった。

_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 日分です。

過去ログ表示

Prev - 2021/02 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project