использование ВТО для печати с помощью металлического C

StackOverflow https://stackoverflow.com/questions/944816

  •  09-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать инструкцию ВТО из 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' (для ]) для компиляции исходного кода ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top