[英]using WTO to print from with in Metal C
我正在嘗試使用來自Metal C的WTO指令將“Hello World”打印到我的工作日志中。 這是基於z / OS V1R10.0金屬C編程指南和參考的1.2.3.5節中的示例。當我使用WTO時,我遇到了包含0或ASCII到EBCDIC轉換的緩沖區問題。 我已經粘貼了下面的工作日志的相關部分,然后是我的代碼,然后是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來設置代碼頁:在示例的頂部:#pragma filetag(“IBM-500”)編譯器不接受[和]在char文本[80]; 我試圖將char文本[80]更改為char *文本,但我得到的結果和你一樣奇怪。
也許兩個版本的結構在內存中的布局是不一樣的? 我在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
但是,如果我將text參數的類型更改為char [80],結果將更改為:
size 84 struct 0x22cc80 string 0x22cc84
WTO指令可能希望將字符串直接打包到該結構中。
你是否通過TN3270客戶端編輯代碼? 問題很可能與模擬器中的代碼頁有關。 例如,我需要在ISPF中進行以下更改:c x'4A'x'AD'all(for [)和c x'5A'x'BD'(for])以編譯源代碼...
為什么不能編譯IBM樣本? 它對我來說很好 - 也許您可以向我們展示您的編譯器參數和錯誤消息?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.