Pregunta

Estoy tratando de utilizar la instrucción de la OMC con el metal en C para imprimir "Hello World" a mi registro de trabajos. Esto se basa en el ejemplo de la sección 1.2.3.5 de la z / OS V1R10.0 metal de Programación C guía y referencia Aparece cuando uso OMC estoy teniendo problemas con mi ya sea tampón que contiene 0 o ASCII a la conversión EBCDIC. He pegado la sección correspondiente de mi registro de trabajos a continuación, seguido por el código, a continuación, el código del ejemplo de IBM que no pude llegar a compilar. registro de trabajo

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

Mi 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 de 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;
        }
¿Fue útil?

Solución

El ejemplo de IBM trabajado para mí (en z / OS 1.9) pero tenía que añadir un pragma para establecer la página de códigos: en la parte superior del ejemplo: filetag #pragma ( "IBM-500") El compilador no aceptó la [y] en el texto char [80]; He tratado de cambiar el texto char [80] en char * texto así pero me dio la misma extraño resultado como usted.

Otros consejos

Tal vez la disposición en memoria de las dos versiones de la estructura no es lo mismo? He intentado esto en 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;
}

Estos son los resultados:

size 8 struct 0x22cce0 string 0x402000

Sin embargo, si se cambia el tipo del parámetro de texto a char [80], los resultados cambiará a:

size 84 struct 0x22cc80 string 0x22cc84

La instrucción OMC probable que la cadena espera que haya de contener a la derecha en esa estructura.

¿Por qué no se puede compilar el ejemplo de IBM? Funciona bien para mí - quizá nos pudiera mostrar sus parms compilador y mensajes de error

¿Se edita el código a través de cliente TN3270? Es muy probable que el problema está relacionado con la página de códigos en su emulador. Por ejemplo Necesito hacer el siguiente cambio en ISPF: c x'4A 'x'AD' todo (por [) y c x'5A 'x'BD' (por]) con el fin de compilar la fuente ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top