質問

私は自分のジョブ・ログに「Hello Worldのを」印刷するメタルCにしてから、WTO命令を使用しようとしています。これは、z / OS V1R10.0メタルCプログラミングガイドのセクション1.2.3.5に例をもとに、私はWTOを使用する場合私が私のバッファがEBCDIC変換に0またはASCIIを含むの問題のいずれかが生じています表示されます参照です。私は自分のコードに続いて以下の私のジョブログの関連セクション、私はコンパイルすることができませんでしたIBMの例から、コードを貼り付けました。 ジョブ・ログ

09.01.56 J0686275  IEF403I IMIJWS0G - STARTED - TIME=09.01.56
 09.01.56 J0686275  +...0.......
 09.01.56 J0686275  -                                         --TIMINGS (MINS.)--            ----PAGING COUNTS---
09.01.56 J0686275  -IMIJWS0G          GO          00      6    .00    .00    .00   1292   0      0      0      0     0     1
 09.01.56 J0686275  IEF404I IMIJWS0G - ENDED - TIME=09.01.56

私のコード

#include 
#include 
#include 
 int main()
 {
                                    struct WTO_PARM {
               unsigned short len;
               unsigned short code;
               char* text;
            } wto_buff = { 4+11, 0, "hello world" };
            __asm( " WTO  MF=(E,(%0)) " : : "r"(&wto_buff));

        }

IBMコード

int main() {

            struct WTO_PARM {
               unsigned short len;
               unsigned short code;
               char text[80];            } wto_buff = { 4+11, 0, "hello world" };            __asm( " WTO  MF=(E,(%0)) " : : "r"(&wto_buff));
            return 0;
        }
役に立ちましたか?

解決

IBMの例は、(Z / OS 1.9の下で)私のために働いたが、私は追加する必要がありました コードページを設定するには、プラグマ: 例の上に: #pragma filetag( "IBM-500") コンパイラは、char型のテキスト内の[と]を受け入れなかった[80]。 私は同様のchar *テキストに文字テキスト[80]を変更しようとしましたが、私は同じです あなたのように奇妙な結果ます。

他のヒント

おそらく、構造体の2つのバージョンのメモリ内のレイアウトは同じではありませんか?私は、GCCでこれを試してみました。

#include <stdio.h>

struct WTO_PARM {
    unsigned short len;
    unsigned short code;
    char *text;
};

int main()
{
    struct WTO_PARM moo = { 4+11,0,"hello" };
    printf("size %zu struct %p string %p\n", sizeof(struct WTO_PARM),&moo,moo.text);
    return 0;
}

ここでの結果は次のとおりです:

size 8 struct 0x22cce0 string 0x402000

Iは、テキストパラメータの型がcharに変更する場合は、[80]は、結果を変更します。

size 84 struct 0x22cc80 string 0x22cc84

WTO命令は、おそらく文字列が右、その構造体にパックされることを想定しています。

なぜあなたは、IBMのサンプルをコンパイルすることはできませんか?それは私のために正常に動作します - ?おそらく、あなたは私達にあなたのコンパイラのPARMSとエラーメッセージを表示することができます。

あなたはTN3270クライアントを経由して、あなたのコードを編集しますか?それは問題があなたのエミュレータでコードページに関連している可能性が非常に高いです。たとえば、私は、ISPFを次のように変更行う必要がありますソースをコンパイルするためにX'4A「x'AD」すべて(のための[)とC x'5A(のための「x'BD」])Cを...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top