Top > PC

2015.02.05

T98-Nextでの印刷 on Windows 8.1

うちの会社で昔作ったPC-98用ソフトをT98-Next上で動かして何度か目にしたのが「印刷途中で急に途切れて、次ページから制御コードを印刷したようなページがぞろぞろ何ページも出てくる」という現象。
Windows XPでは出なくて、Windows 7では時々という状態だったのが、Windows 8.1になると特定箇所で必ず発生するように。それもドットインパクトプリンタでは発生せず、レーザープリンタでのみ。

何度も調べた結果
1.プリンタプラグイン(PRINTER.NHW)で何かがトリガーになって印刷ジョブが途中で完了してしまう ←ここで用紙が排出される(=途切れる)
2.でもT98-Next上のソフトは印刷完了してないので引き続きLPTに出力される
3.するとWindows上のプリンタでは新たな印刷ジョブとして認識される
4.印刷ジョブの最初で設定した用紙サイズやフォント、改行幅などのESCコマンドによる書式はジョブが変わると引き継がれず、次ページからデフォルト書式でデータが続々と印刷される ←これが制御コードのように見える

ドットインパクトプリンタだと印刷ジョブが切れても勝手に用紙排出とかされず、書式を引き継いだまま印刷される(まあ垂れ流しみたいなもんだし)ので気がつかないんだが、レーザープリンタの場合はジョブが完了すると用紙が強制排出されて書式もリセットされるのでどうしようもない。

ちゃんと対応するにはNDDKでプリンタプラグインを自前で作るのがベストなんだけど、何せPC-98関係の資料がもう手元に無いんで開発もできず。(UNDOCUMENTED 9801/9821 Vol.1が残ってりゃなあ…)

なので苦肉の策として
1.RedMon - Redirection Port Monitorをインストール。
2.プリンタドライバとして「Generic / Text Only」を使う。
3.Redmonによって標準入出力から送られる印刷生データをファイル出力するプログラムを書く(言語は何でもOK)。
4.「デバイスとプリンタフォルダ」の「プリントサーバのプロパティ」で「Redirected Port」を追加。「Generic / Text Only」に割り当てる。
5.3.のプログラムで出力された分割ファイルを結合。目的のプリンタに出力。
という、なんとも泥臭い方法で回避することに。
ちなみに印刷の完了はどうやっても判断できなかったんで、一定時間ファイルが出力されなかったら完了と見なすというこちらも大変アナログな方法しか考えつきませんでした(--;

T98-NEXT & T98vmm 関連のページのprtdp.nhwとか使えば良かったんだけど、スプール中のまま印刷されない事についてのCLOSESPLを使うよう98側のプログラムを直さなきゃいけないのが結構しんどかったのでこういう形に。

本家で直してもらえたら嬉しいけど難しいだろうなあ。

2013.04.23

「存在しないトークンを参照しようとしました」エラー

ローカル セキュリティ ポリシー(secpol.msc)を起動しようとしたらこんなエラーが。
token
原因はよくわからんけど「管理者として実行」したら起動するんで権限まわりでおかしな事になってるのかなあ。

ググるとMicrosoft ランゲージ ポータルから始めるトラブル解決という記事がヒットするんだけど、その記事中にあるMicrosoft Management Console: "An attempt was made to reference a token that does not exist"というTechNetのArticleで示された解決方法がちょっとアレな感じ。

For /F %s in ('dir /b *.dll') do regsvr32 /s %s

これ、system32にあるDLLを片っ端からregsvr32で再登録するんだよね…。

直るかもしれないけど副作用ありそうですげー怖い。大丈夫なのだろうか。

2013.03.25

Virtual CloneDrive 5.4.5.0 日本語修正ファイル

Virtual CloneDrive の設定画面で項目の一部が英語メッセージのままだったのを不思議に思い、言語ファイルをちょっと覗いてみると、案の定英語版には存在するメッセージ文字列が日本語版に無い。
どこかのタイミングで言語ファイルの更新をやめちゃったのかなーと予想。
一部制御コードが混じってるので試行錯誤してみたら解析できたっぽいのでメモ。

VCDPrefsJP.lng : 設定画面の文字列
VCDShellJP.lng : タスクトレイアイコンを右クリックしたときに出るメニュー文字列

VCDPrefsStrings.h と VCDShellStrings.h に定義してあるのが項目IDで
(ヘッダー)(項目ID1 + null + 文字列長 + null + 文字列)(項目ID2 + null + 文字列長 + null + 文字列)...
という構成。
ちなみに文字列はShiftJISでいけた。IDや文字列長はバイナリ値なので制御コードが挿入できるエディタか、バイナリエディタが必要。

VCDPrefsEN.lng に定義済みの項目ID 29~31 が VCDPrefsJP.lng ではごっそり無いので、英語版をコピーして(具体的にはAutomatic以降)日本語版にペースト。
英語版文字列をGoogleで翻訳して日本語に置換後、文字列長を修正したら完了。

VCDShellJP.lng も同様に、項目ID 8~14が(以下略)

今更こんなもん作って需要があるのかさっぱりだけど、一応使う人もいるかなと思ってアップしてみる。

Virtual CloneDrive 5.4.5.0 日本語修正ファイル(私家版)

解凍した VCDPrefsJP.lng と VCDShellJP.lng を Virtual CloneDrive 本体があるフォルダ配下の Texts フォルダに放り込んだらすぐ置き換わるはず。
元に戻したい場合はoriginalフォルダに原本が入ってます。

まあこんなので壊れたりはしないだろうけど、念のため利用については自己責任でおながいします。
あと、翻訳がおかしいという場合は「こいつ英語できねーんだなpgr」と笑い飛ばしつつ、各自で直してみて下さい。

2013.01.16

PCはやっぱ自作もしくは国産

会社でDELLマシンを使って結構痛い目に遭ってきたので、HPは割と好意的に見てたけどやっぱダメだ。

dv5/ct

  • 液晶のコネクタが接触不良で画面がちらつき→ブラックアウト。
    これは2chのスレでもよく言われてた。
    解決策は分解してコネクタの抜き刺し。
  • タッチ式ミラーセンサーのバックライトが猛烈な勢いで点滅。
    当然操作不可。
    原因不明だが放っておくとWindowsが誤動作するのでケーブルを外した。
  • そもそも筐体の設計ミスで廃熱性能が悪く、リストレスト部分が猛烈に熱くなる。
    長時間負荷の高い処理をすると、熱くて手を置けない。
  • Wi-fiモジュールも熱暴走をするのか、よくアクセスポイントを見失う。
  • 熱を出さないように、電源プランでパフォーマンスを低めに設定。
    せっかくのC2DやGeForceの恩恵にあずかれない。

ML115G1

  • 死亡。
    POST画面すら行かない

今のメインマシンは鼻毛鯖なのでML115は死んでもそれほど痛手ではないのだが、dv5/ctは会社で使ってて壊れると結構困る。

我が家の財務大臣にお伺いを立てて新マシンにしたいところだが、たぶん稟議通らん。

このまま騙し騙し使い続けるしかないか。

もうちょっとHPには耐久性に期待してたんだけどなあ…残念。

JS共通セキュリティ更新モジュールが何度も出てくる件

JUSTオンラインアップデートがJS共通セキュリティ更新モジュールを2週間に1回くらい通知してきて、何度適用しても再度出てくるのがいいかげんウザくなってきたので調べてみた。

Justオンラインアップデート(hinkyaku49の日記)

どうもこの辺が怪しい。
C:¥Program Files¥JustSystem¥JSLIB32¥JSJPEG.DLL
私のPCには↑のファイルがあります。
一方、一太郎2012に上記アップデートを適用すると↓が置き換えられる。
C:¥Program Files¥JustSystems¥JSLIB32¥JSJPEG.DLL
JSJPEG.DLLがあるせいで一太郎のバージョンを誤認されているのではなかろうか。

なるほど、JSJPEG.DLLが怪しいと。

んじゃ解凍して上書きしたらOKなのかな?と更新ファイル(comup01.exe)をダウンロード後、Explzhにドラッグ&ドロップ。

すると、Setup.exeとCommonUpdate.msiのファイルで構成されているのが判る。

msiパッケージをmsiexec.exeで展開する(nanoblog)

に従ってCommonUpdate.msiを展開する。

start /wait msiexec.exe /a CommonUpdate.msi targetdir="c:¥dest¥dir" /qn

targetdirで、展開したファイルの保存先を指定します。
msiファイルが存在するフォルダを指定すると、正常に展開できないので注意してください

その他、展開先が仮想ドライブの場合はエラーになるので注意。

インストール先に SUBST で割り当てた仮想ドライブを指定すると、1320エラーが発生(InstallShieldFAQ)

展開先のフォルダにあるJSLIB内のJSJPEG.DLLとJPGFILE.XTDを上書きしたら完了。

ちなみに

ファイルバージョンが1.0.4.0→1.0.5.0
タイムスタンプが1997/08/25→2012/01/16

にアップしてた。

2012.09.06

T98-Next on Windows Vista / 7 の印刷

T98-Nextでのプリンタ出力はLTP1のみという仕様なので、USBやネットワークで接続されているプリンタは共有してNET USEコマンドでLPT1へマッピングをするというテクニックがある。

PC98エミュレータ プリンタ設定のキモ T98-Nextの場合

USBポートとLPTポート lpt1にリダイレクトして直接出力する方法

だがしかし、このテクニックはWindows XPまでしか使えない。

なぜかVista以降ではこのテクニックに必要なRAWモード印刷の機能が使えなくなっている。

(ソースはこのへん)

なので、Windows Vista以降(8は知らん)でT98-NextからUSBプリンタに印刷したい場合は、LPT1への出力をUSBにリダイレクトしてくれるアプリケーションを使用するしかない。

具体的にはDOSPrintがフリーで使えるのでお勧め。