【问题标题】:using WTO to print from with in Metal C在 Metal C 中使用 WTO 进行打印
【发布时间】:2010-10-30 23:56:09
【问题描述】:

我正在尝试使用 Metal C 中的 WTO 指令将“Hello World”打印到我的工作日志中。这是基于 z/OS V1R10.0 Metal C Programming Guide and Reference 的第 1.2.3.5 节中的示例当我使用 WTO 时出现的问题,我的缓冲区包含 0 或 ASCII 到 EBCDIC 转换。我在下面粘贴了我的工作日志的相关部分,然后是我的代码,然后是我无法编译的 IBM 示例中的代码。 工作日志

09.01.56 J0686275 IEF403I IMIJWS0G - 开始 - 时间 = 09.01.56 09.01.56 J0686275 +...0....... 09.01.56 J0686275 - --计时(分钟)-- ----分页计数--- 09.01.56 J0686275-IMIJWS0G 去 00 6 .00 .00 .00 1292 0 0 0 0 0 1 09.01.56 J0686275 IEF404I IMIJWS0G - 结束 - 时间 = 09.01.56

我的代码

#包括 #包括 #包括 主函数() { 结构 WTO_PARM { 无符号短长度; 无符号短代码; 字符*文本; } wto_buff = { 4+11, 0, "你好世界" }; __asm(" WTO MF=(E,(%0))" : : "r"(&wto_buff)); }

IBM 代码

int main() { 结构 WTO_PARM { 无符号短长度; 无符号短代码; 字符文本[80]; } wto_buff = { 4+11, 0, "你好世界" }; __asm(" WTO MF=(E,(%0))" : : "r"(&wto_buff)); 返回0; }

【问题讨论】:

    标签: c mainframe zos metalc


    【解决方案1】:

    IBM 示例对我有用(在 Z/os 1.9 下),但我必须添加 设置代码页的编译指示: 在示例之上: #pragma 文件标签(“IBM-500”) 编译器不接受 char text[80] 中的 [ 和 ]; 我也尝试将 char text[80] 更改为 char *text 但我得到了相同的结果 和你一样奇怪的结果。

    【讨论】:

      【解决方案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
      

      但是,如果我将文本参数的类型更改为 char[80],结果将更改为:

      size 84 struct 0x22cc80 string 0x22cc84
      

      WTO 指令可能希望将字符串直接打包到该结构中。

      【讨论】:

      • 两个结构的“内存布局”是相同的——只是结构不同。一个有一个指针(并且这个指针指向 结构外部的某处),而另一个有一个数组(数组完全包含它们被声明的地方 - 在函数、结构、等)。
      【解决方案3】:

      为什么不能编译 IBM 示例?它对我来说很好 - 也许您可以向我们展示您的编译器参数和错误消息?

      【讨论】:

        【解决方案4】:

        您是否通过 TN3270 客户端编辑您的代码?问题很可能与您的模拟器中的代码页有关。例如,我需要在 ISPF 中进行以下更改: c x'4A' x'AD' all (for [ ) 和 c x'5A' x'BD' (for ]) 以编译源代码 ...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-16
          相关资源
          最近更新 更多