(2005年12月の野ざらし言への書き込み) ども。 新しいスレッドにします。 勢いにまかせて、Vz用の画像ファイル作成マクロをリクエストします。 使いやすいかどうかは別にして、私の考えている仕様は以下の通りです。 出力形式はxbm形式。 入力は、いにしえのTXT2BMPにならって、と言うわけでもありませんが、 半角1文字を1ドットに対応させたいです。 使い方としては、編集画面を行ブロック状態でこのマクロを起動すると、 ブロック範囲のキャラクタ状況を読み取って、画像ファイル形式で出力 する。いわば、banner.defのような感じでしょうか。 キャラクタとドットの対応付けとしては、半角空白が白、何かの文字が 黒を表す、としましょう。任意の文字、とすると難しいかもしれないの で、半角ピリオドとか半角#あたりの固定文字の方がいいかな。 でも、固定文字とすると、イレギュラーな文字があった場合の処理が必 要になって、かえって難しいかな。 黒と白の反転機能もあると嬉しいけど、必須ではないですね。 画像のサイズに関しては、ブロック範囲から読み取るのが基本。 画像名については、決め打ち(固定値)でもいいし、入力窓が開いて問 い合わせてくるのでもいいです。 あと、他に何か関係のありそうなものってなにかありましたっけ? とにかく、画像関係については、参考になりそうなものはbanner.defと TXT2BMP.EXEぐらいしか思いつかないので、他にもっといい方法があった としてもわからないのです。 ということで、ナイスな(死語?)マクロを作っていただけると幸いです。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− (2006年1月の野ざらし言への書き込み) > 8の倍数化については、おいおい直したいと思います。 ということで、これに関してはめざらさんに教えていただいた式を組み込ん でみました。それから、画面分割のチェックもめざらさんに教えてもらった ものをそのまま入れたし。 あと、全体的に自分の文体に書き直したものをアップします。 = XBM.DEF 変数一覧 w: width h: height a: temporary x: width counter y: height counter * M 1 ^\ "XBM.DEF" ?. (mb!=1)?. ;行ブロックモードでなければ終了 we[255, ;編集画面サイズを最大化 wt[, ;分割モード保存 (wt)?{&#Y(0)} ;全画面化 #k ;ブロック範囲をコピー #N "nul.nul" #m ;一時ファイルを開いて ek[-, #i ek], ;ペースト ; サイズ測定 w-, h-, :a #> (wa} ;ファイル終端で終了 (w%8)?w+=8-w%8, ;8の倍数化 #^ #< ;カーソル位置を開始位置へ #N "nul" #m #W ;結果ファイルを開く ; main loop x1, y1, a0, :m &10 (ck==1)?{x++, &10} ;全角文字ならもう1ビットセット (cd!=13)?{#d} ;改行でなければカーソル移動 (xm} ;横幅ループチェック (x==w)?{#> #d y++, x1, #W #m #W} ;横幅ループ終了処理 (y<=h)?{a0, >m} ;高さループチェック ; 後処理 #C 'y' ;一時ファイルクローズ "}" #m #^ &?("#define _width %d",w) #m &?("#define _height %d",h) #m "static char _bits[] = {" #m wt], we], ;設定戻し ; ローカルマクロ 10: (cd!=' ' && cd!=' ' && cd!=13)?{ ;現在の桁が空白でなければ a=a|(1<<((x-1)%8)), ;ビットに1をセット } (x%8==0)?{ ;8ビット分たまったら #W &?("0x%02x,",a) a=0, #W ;結果をファイルに出力 } * これ、そのまま起動すると、編集画面の切替が多発します。 ポケ3で使うと、いかにも一生懸命働いています、って感じになって、実行 時間もかなりかかるので、&sはつけたい気もします。でも、母艦で実行する と大したこともないので、とりあえずこのままという事で。 本当に速度が気になるのなら、めざらさんのマクロを使えばいいだけだし。 いや、ほんと、めざらさんのは速くていいですよ。 あと、おまけ。 banner.defって、DOS/Vバージョンは新しい版があって、縦2倍という か、フォントの1ドットを半角1文字に変換することもできるようです。で も、ポケ3やPC−98で動くバージョンにはそういう機能がなくて、縦が 圧縮された形でしか出力されません。つまり、半角1文字で縦2ドット分。 画面に表示する分にはこの方が美しくていいのですが、画像に変換すること を考えると、かなり使い勝手が悪いです。ということで、banner.defの出力 を単純に縦2倍にするマクロを作ってみました。本当ならbanner.defを改造 するのが筋なのかもしれませんが、そんな大がかりなことまでする必要はあ りませんから。 = X2.DEF * M 1 ^\ "X2.DEF" ?. (mb!=1)?. ;行ブロックモードでなければ終了 we[255, ;編集画面サイズを最大化 wt[, ;分割モード保存 ei[-, ;オートインデント抑止 (wt)?{&#Y(0)} ;全画面化 #k ;ブロック範囲をコピー #N "nul.nul" #m ;一時ファイルを開いて ek[-, #i ek], ;ペースト #^ #< ;カーソル位置を開始位置へ #N "nul" #m ;結果ファイルを開く #m #m #^ #W ;結果ファイル初期設定 :a (cd==' ')?{#W ' ' #x ' ' #e #W >b} (cd==',')?{#W ' ' #x '*' #e #W >b} (cd==';')?{#W '*' #x '*' #e #W >b} (cd==$27)?{#W '*' #x ' ' #e #W >b} (cd==13) ?{#W #x #m #m #e #W} :b #d (r)??>a #C 'y' #g #g ei], wt], we], ;設定戻し * 特に、ポケ3はもともとがワープロなので、機種依存文字のコードのところ に、いろいろと面白い記号が入っていたりします。そういうもののフォント 情報を取り出すと、ちょっとした絵を画くのに大いに役立ってくれそうです。