24-May-2026の続き。
OpenBSDでのDeskflow、LibreSSLではなくOpenSSLでも試しています(実は最初OpenSSLでやっていたのですが、LibreSSLで動いたのでそっちに一本化したものの、OpenSSLでの動作も確認する必要があったので結局両方用意する羽目になったということです)。自分が使うときに楽できるようports化も目論んでおり、LibreSSL版にするかOpenSSL版にするか悩んでいます。CMake関連のファイルを直すだけで済む、OpenSSL版の方が有力か?
♪
解説のための文章を書こうとして途中で挫折した05-Feb-2026のモールス符号を鳴らすプログラムの話、少しだけまとめてみようと思います。
面倒な文字間の処理…次の文字が分かっていればまだ楽に書けるのでしょうけど、分からない以上はフラグ等を使って対処する必要があって面倒という話です。処理対象となるファイルを全部読み出してメモリ上に置くならともかく、fgetws()で一行単位の読み出し→一文字単位の処理を行うとなると、読み出した行の次の行にどんな文字がくるかは分かったものではありませんから。
a1a_genのコード(player.c)には以下のフラグがあり、こんな感じに動いています。文字間の処理と関係ないものも含めて説明します。
- use_alt_code
- 和文電信の額表で使われる略体数字のような、同じ文字だが別の符号を使用する場合のフラグ。{}内の文字列を処理中の場合にtrueとなる。
- space_sent
- 直前に空白を送信していた場合はtrue、そうでなければfalse。複数の空白は一つにまとめられてしまうが、これは仕様としている。
- disable_char_space
- ARやBTのような、文字間を空けずに送信することを示すフラグ。<>内の文字列を処理中の場合にtrueとなる。
- char_space_is_disabled
- 文字間が実際にon/offとなっているかを示すフラグ。disable_char_spaceだけで文字間のon/offを判断するとx<ar>に対応できないため(xと<ar>の文字間が確保できない)、このフラグを使用して、x→<(disable_char_space=true, char_space_is_disabled=false)→文字間(disable_char_space=true, char_space_is_disabled=true)→a(これ以降は>が来るまで文字間off)→r、という動作をさせている。
久々にコードを見て頭を抱えておりましたが、文章にするとより頭を抱えたくなりますね…57.8kg(23:05)