использование ВТО для печати с помощью металлического C
Вопрос
Я пытаюсь использовать инструкцию ВТО из with в Metal C, чтобы распечатать "Hello World" в моем журнале заданий.Это основано на примере из раздела 1.2.3.5 руководства по программированию на z / OS V1R10.0 Metal C и справочной информации, которая появляется, когда я использую 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 filetag("IBM-500") Компилятор не принял [ и ] в тексте символа[80];Я также пытался изменить char text[80] на char * text, но я получил тот же самый странный результат, что и вы.
Другие советы
Возможно, расположение в памяти двух версий структуры не совпадает?Я попробовал это в 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
Инструкция ВТО, вероятно, ожидает, что строка будет упакована прямо в эту структуру.
Почему вы не можете скомпилировать образец IBM?У меня это работает нормально - возможно, вы могли бы показать нам параметры вашего компилятора и сообщения об ошибках?
Редактируете ли вы свой код через клиент TN3270?Очень вероятно, что проблема связана с кодовой страницей в вашем эмуляторе.Например, мне нужно внести следующие изменения в ISPF :c x'4A' x'AD' all (для [ ) и c x'5A'x'BD' (для ]) для компиляции исходного кода ...