英小文字メッセージの扱い
海外のISV製品のほとんどは、コンソール、ターミナル、などへの出力メッセージに英小文字(lowercase character)が使われている。国産OSでは基本的にカタカナを使うEBCDICコードを使うため、「abcdefghijkl」は「アイウエオカキクケタチツ」となる。「Iinitialization completed.」は「Iケトケホケアツケヤアホケナト ウナテニツオホオエ.」になる。何とも間の抜けたことである。実際、笑い話だけでは済まない。インフォメーションだけなら無視できるが、エラーメッセージなどの場合、これでは使い物にならない。
IBMユーザーの場合、3270エミュレーターで英小文字←→カタカナ切り替え(例えばPcommならCtrl+F3キーでトグルできる)が可能であるが、富士通、日立のユーザーではそうはいかない。日立のEBCDICはEBCDIKと呼ばれ、カタカナも英小文字も両方サポートされているが、EBCDICの英小文字のコードにカタカナを割り当てているため、化けることに違いはない。
英小文字→大文字変換
アルファベットの大文字A?Zは、EBCDICコードのxC1?E9に割り当てられている(途中に文字を割り当てない抜け番はある)。一方小文字はa?zは、x81?xA9に割り当てられている。x81にx40を足すとxC1となり、xA9にx40を足すとxE9となる。小文字(lowercase)から大文字(uppercase)への変換は簡単で、文字コードにx40をORすればよい。
テキストを直接直す
メッセージ・テキストの場所がロードモジュールであれば、IMASPZAPユーティリティー、データセットであればIEBUPDTEユーティリティーなどを利用して修正を行う。重要なのは、オリジナルのデータやモジュールをバックアップした上で、修正の記録を確実に残すことである。故にバッチ・ユーティリティーなどを使い、ISPFエディターなどで安易に修正しない方がよい。
プログラムで動的に変換する
規模が大きなプログラムなどでは、エラーメッセージなどを個々のモジュールが直接I/Oするのではなく、メッセージ・ビルダー、メッセージI/Oルーチン、のように専用のサービスモジュールを作り、それをメッセージを出したいプログラムが呼び出すデザインになっていることも多い。
このような場合は、メッセージ・テキストを直接修正せずに、メッセージ・テキストの編集後、あるいはOUTPUTの直前、などのタイミングで、動的にlower→upper変換を行うロジックを追加する。単にx40でORを掛ける程度であれば、ソースを直さなくとも、モジュールパッチでも十分対応可能である(モジュール内または共通エリア内に設けられた、パッチ用領域を使えばパッチでもロジックの追加は可能)。
今後もバージョンアップなどによって、再ポーティングが行われる製品なら、パラメーターなどでメッセージ・テキストをuppercaseに変換するオプションの実装を、開発元に検討してもらうことを奨める。
※日本語を扱う製品の場合、単純なx40のORでは対応できないことに注意する。メッセージ・テキスト中に漢字を含む場合、シフトコードで囲まれた部分は変換しない、などの工夫を要する。
製品によっては、言語タイプをパラメーターに設定することで、各国語によるメッセージ・セットやパネル・セットなどを定義できるものもあるかも知れない。そのような場合は、プログラムの修正ではなく、ローカライズされたメッセージやパネルなどを外部に用意することでの対応をまず考えたい。