Pergunta

Eu estou tentando usar a instrução da OMC a partir de com em Metal C para imprimir "Olá Mundo" para o meu registro de trabalhos. Esta baseia-se no exemplo na secção 1.2.3.5 do z / OS V1R10.0 metal C Guia de Programação e Referência Parece quando eu uso OMC estou tendo tanto problemas com meu tampão contendo 0 ou ASCII para conversão EBCDIC. Eu tenho colado a seção relevante do meu registro de trabalhos a seguir, seguido por meu código, então o código do exemplo IBM, que eu não poderia começar a compilar. log Job

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

Meu código

#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));

        }

código 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;
        }
Foi útil?

Solução

O exemplo a IBM trabalhou para mim (sob z / OS 1.9), mas eu tive que adicionar um pragma para definir a página de código: na parte superior do exemplo: #pragma filetag ( "IBM-500") O compilador não aceitou a [e] no texto char [80]; Eu tentei o texto da mudança char [80] para char * texto tão bem, mas eu tenho o mesmo resultado estranho como você.

Outras dicas

Talvez o layout em memória das duas versões do struct não é o mesmo? Tentei fazer isso no 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;
}

Aqui estão os resultados:

size 8 struct 0x22cce0 string 0x402000

No entanto, se eu mudar o tipo de parâmetro de texto para char [80], os resultados mudar para:

size 84 struct 0x22cc80 string 0x22cc84

A instrução OMC provavelmente espera a string a ser embalado para a direita em que struct.

Por que você não pode compilar o exemplo IBM? Ele funciona muito bem para mim? - talvez você poderia mostrar-nos os seus parms do compilador e mensagens de erro

Você editar o seu código via TN3270 cliente? É muito provável que o problema está relacionado com a página de código em seu emulador. Por exemplo, eu preciso fazer a seguinte alteração no ISPF: c x'4A 'X'AD' all (para [) e c x'5A 'X'BD' (para]), a fim de compilar o código fonte ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top