используя ВТО для печати с помощью Metal C - PullRequest
4 голосов
/ 03 июня 2009

Я пытаюсь использовать инструкцию WTO из 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;
        }

Ответы [ 4 ]

3 голосов
/ 16 октября 2009

Пример IBM работал для меня (под Z / OS 1.9), но мне пришлось добавить Прагма для установки кодовой страницы: поверх примера: #pragma filetag ("IBM-500") Компилятор не принял [и] в тексте символа [80]; Я пытался изменить текст char [80] на char * text, но я получил то же самое странный результат как у вас.

1 голос
/ 03 июня 2009

Возможно, расположение в памяти двух версий структуры не одинаково? Я попробовал это в 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

Инструкция ВТО, вероятно, ожидает, что строка будет упакована прямо в эту структуру.

0 голосов
/ 29 июля 2013

Редактируете ли вы свой код с помощью клиента TN3270? Весьма вероятно, что проблема связана с кодовой страницей в вашем эмуляторе. Например, мне нужно внести следующие изменения в ISPF: c x'4A 'x'AD' all (for [) и c x'5A 'x'BD' (for]), чтобы скомпилировать исходный код ...

0 голосов
/ 04 июня 2009

Почему вы не можете скомпилировать образец IBM? Он прекрасно работает для меня - возможно, вы могли бы показать нам ваши пароли компилятора и сообщения об ошибках?

...