2009-06-03 13 views
4

Metal CでのWTO命令を使用して、ジョブログに「Hello World」を印刷しようとしています。これは、z/OS V1R10.0メタルCプログラミングガイドおよびリファレンスのセクション1.2.3.5の例に基づいています.WTOを使用すると表示されます.0またはASCIIからEBCDICへの変換を含むバッファに問題があります。私は下に私の仕事ログの関連するセクションを貼り付けました、その後私のコード、そして私がコンパイルすることができなかったIBMの例のコード。 ジョブログWTOを使用してMetal Cで印刷する

 
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; 
     } 

答えて

2

IBMの例は、(Z/OS 1.9の下で)私のために働いたが、私は にコードページを設定するには、プラグマを追加する必要がありました:例の上に を: の#pragma filetag( "IBM-500") コンパイラはchar text [80]で[と]を受け入れませんでした。 私はchar text [80]をchar * textに変更しようとしましたが、同じ という結果が得られました。

1

は、おそらく、構造体の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 

しかし、私は[80]をcharにテキストパラメータの種類を変更した場合、結果はに変更:

size 84 struct 0x22cc80 string 0x22cc84 

WTO命令では、文字列がその構造体に正しく格納されると予想されます。

+0

+1構造体を修正してください –

+0

2つの構造体の「メモリ内のレイアウト」は同じです。異なる構造体です。 1つはポインタを持ち(このポインタは構造体の外側のどこかを指しています)、もう一方は配列を持っています(配列は関数、構造体などで宣言されています)。 –

0

IBMサンプルをコンパイルできないのはなぜですか?それは私のためにうまく動作します - おそらくあなたは私たちにあなたのコンパイラparmsとエラーメッセージを表示することができますか?

0

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

関連する問題