実際のプログラミングの解説に入る前に、AS/400上でC言語のプログラムを開発するには、どのような環境が必要になるのかを説明したいと思います。
プログラムを作成するには、まずソースコードをAS/400のソースファイルに登録する必要があります。
C言語では、英小文字と英大文字は明確に区別されます。
したがって、英小文字をソースファイルに登録出来ることが必要になります。
ここで注意が必要なのは、AS/400の日本語環境(言語コード2962)では、省略時の文字に英小文字が含まれていないことです。AS/400は文字コードとしてEBCDICを使用していますが、日本語のEBCDICでは、長い間英小文字のコードにカタカナ文字を割り当てて使用してきました。その為、日本語のEBCDICでは、英小文字とカタカナを同時に使用することが出来ませんでした。最近は、英小文字とカタカナ文字の両方が使えるコード表(5035)が使用出来るようになったのは比較的最近のことです。日本語のOS/400を使用する場合はこのコード(5035)にJOBのCCSIDを設定することが必要です。
次に、C言語では、いくつかの特殊文字がコーディング上必要になります。
特に / [ ] \ { } 〜 ¬ | などの文字は、注意が必要です。キーボードから打鍵したい場合に、キーボートに文字が割り当てられれていないと、入力することができません。鍵盤タイプによっては、キーが用意されていないので、打鍵することができないことがあります。
必要とする文字セットの違い
|
RPG言語 |
C言語 |
文字
|
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
数字 |
0 1 2 3 4 5 6 7 8 9 |
0 1 2 3 4 5 6 7 8 9 |
特殊文字 |
+ - * , . ' &/ \ # : @ |
! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] _ {} 〜¬ | |
上記文字セットをみて解るように、RPGの文字セットの中には、日本語5250端末で表示や打鍵ができない文字は、ほとんど含まれていないことが分かると思います。
C言語の必要とする文字セットはどうでしょう。こちらの文字セットの特殊文字には、エミュレータによっては打鍵できない文字がずいぶんと含まれています。
打鍵可能な特殊文字は、エミュレータの種類やキーボードタイプにより多少異なります。(5250PC,5250WS,CM/2,PCOMなど)
キーボートから打鍵できない文字が必要になった場合のために、C言語では、3文字表記と言う方法にて特殊文字を記述することが可能となっています。
これは、打鍵可能な文字を3文字組み合わせて、1つの特殊文字を表す方法です。これは、プラットフォームに関係なく、C言語の標準として定義されています。
主な3文字表記
3文字表記 |
??( |
??) |
??< |
??> |
??/ |
??' |
??! |
??- |
特殊文字 |
[ |
] |
{ |
} |
¥ |
^ |
| |
〜 |
エミュレーターのキーボートで特殊文字のキーがあるかないかはコーディングの効率に大きく影響しますのでできればPCOMMなどのコードページ939をサポートするものが良いでしょう。
コーディングの効率に関わることなので、3文字表記はあまりお勧めできませんが、他のプラットフォームや他のAS/400に移動したり、異なるエミュレータを使用したりするさいに起こりやすい、文字化けを避けることは可能となります。
ソースコードを他のプラットフォーム(PCやUNIX)で打ち込み、AS/400にftpなどをされるさいには、特殊文字がうまく変換できないことがありますので、その際は、3文字表記も有効かもしれません。
SEUに関する不満
AS/400でソースコードを入力するには、SEUを使用します。これはRPGと変わりありません。だだ、RPGの時は感じ無かった不便なことがC言語の場合はいくつかあります。多分どうしようもないのでしょうから、愚痴っぽくなってしまいますが
SEUではタブによる段落付けが出来ません。
C言語は、フリーフォーマットにてソースコードを入力できます。RPGの様に決められた桁に命令コードを書く必要はありません。
そのため、C言語は、基本的な文法にさえあっていれば、どのように記述しようが自由と言うことになりますが、一般的に見やすいとされているお作法はいくつかあるようです。ちなみに〜派と言っても良いぐらいに活発な議論があるようです。私自身は動けばよいので形式にはあまりこだわりませんが、興味のある方は、関連のNEWSグループなどをご覧になるのも良いかもしれません。
だだ私自身(多分みなさんも感じると思います)非常に不便と思っているのは、タブによる段落付けがSEUではできないことです。SEUでは、TABキーで文字の移動ができません。そのため、桁を揃えてソースコードを入力しようとするとスペースキーまたは矢印キーで1個づつずらさないといけません。非常に面倒です、変更も大変です。
5250の画面は横80桁か132桁です。
フリーフォーマットですし、フィールド名なども長い名前で定義できますし、
桁をずらして段落ずけなどをしていると80桁はすぐにいっぱいになってしまいます。
PCやUnixなとの他のエディターでは、行の途中で改行キーを押すと、以降の文字は次の行になりますが、
SEUの場合は、消去されてしまいます。132桁も使用できますが、これはちょっと長すぎと感じながらも使用しています。
SEUはC言語の文法チェックをしてくれません
RPGの場合はうるさいほど文法チェックしてくれるので、タイプミスなどはコンパイル前に気がつくのですが、SEUは
C言語の文法チェックを全くしません。命令コードまでチェックしろとは言いませんが、構文チェック(たとえば括弧が閉じていないとか、文の終わりに;がないとか..)ぐらいしてくれてもよさそうなものですが全くしてくれません。
できれば、関数や引数をプロンプト表示してくれると大変助かります。
SEUへの要望はつきないのですが、要はC言語の開発には、非常に使いにくいよって結論しかありません。文句ばかりいってもしょうがないのでこのへんでやめますが、皆さんも、SEUが使いにくいからってC言語の開発をやめないでくださいね。
C言語のプログラムのコンパイル方法
Cのコンパイル命令
- CRTBNDC.........ソースコードからプログラムを作成
- CRTCMOD.........ソースコードからモジュールを作成
- CRTPGM...........モジュールからプログラムを作成
- CRTSRVPGM.....モジュールからサービスプログラムを作成
ILE環境では、PGMはまずモジュールとしてコンパイルし、モジュールをBINDして(linkていう方が一般的ですが)PGMとします。
PGMの種類としては、サービス・プログラムとプログラムの2種類があります。
プログラムはRPGと同じくCALL命令によって呼び出されるPGMです。
サービス・プログラムとは、プログラムから呼び出される外部関数をサービスする汎用ルーチンのかたまりとして利用できます。(windowsのDLLだと思ってください)そのため直接CALLで実行はできません。
詳しくは別の章で説明したいと思いますので、いまは、この程度にしておきます。
プログラム作成時の注意事項
CRTBNDC/CRTCMODはデフォルトでは、コンパイルリストを作成しません。
エラーの内容を確認するためコンパイルリストを出力したいときは、コンパイルオプションで*PRINTを指定する必要があります。
また、デフォルトでは、デバッグ用のコードも生成しません。開発中などはDEBUGオプションを*ALLにしてコンパイルしておく方がよいでしょう。
コンパイルのつどパラメーターをセットするのは面倒なので、コマンドの省略値をCHGCMDDFTで変更する方法もありますが、他の人の迷惑にならないように、気をつけましょう。
PDMのユーザーオプションに自分用のオプションを追加する方法もあります。
たとえば、以下のようにできます
MK CRTBNDC *PRINT DEBUG(*ALL)
MM CRTCMOD *PRINT DEBUG(*ALL)
ソースファイルはCCSID(65535)で作成してください。
多分コンパイラーのトラブルだと思われますが、漢字(DBCS)文字がソースコードに含まれているとコンパイルエラーになります。(コメントなど関係ないところでもエラーになります)これを避けるには、ソースファイル作成時にCRTSRCPF...CCSID(65535)として作成してください。
必要なOS/400ライセンスプログラム
- C言語のコンパイラー
5xxx-CX2 ILE C AS/400 用
- ソースファイル編集用
5xxx-PW1 適用業務開発ツールセット AS/400 用
- socketなどプログラムの作成を行う場合
5xxx-SS1 オプション13 OS/400-システム・オープンの組込み
- thread プログラムを作成/実行する場合
5xxx-SS1 オプション15 OS/400-CPAツールキット