Domanda

Sto cercando di usare l'istruzione OMC da con in metallo C per stampare "Ciao Mondo" al mio registro lavori. Questo si basa su l'esempio nella sezione 1.2.3.5 della z / OS V1R10.0 metallo C Programming Guide and Reference Appare quando uso OMC sto avendo entrambi i problemi con il mio tampone contenente 0 o ASCII alla conversione EBCDIC. Ho incollato relativa sezione del mio registro dei processi di seguito, seguito dal mio codice, quindi il codice dall'esempio IBM, che non ho potuto ottenere per la compilazione. ceppo di lavoro

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

Il mio codice

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

        }

Codice 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;
        }
È stato utile?

Soluzione

L'esempio IBM ha funzionato per me (sotto z / OS 1.9), ma ho dovuto aggiungere un pragma per impostare la tabella codici: in cima alla esempio: #pragma filetag ( "IBM-500") Il compilatore non ha accettato la [e] nel testo char [80]; Ho provato a cambiare il testo char [80] in char * testo così ma ho ottenuto lo stesso strano risultato come te.

Altri suggerimenti

Forse il layout in memoria dei due versioni della struct non è lo stesso? Ho provato questo in 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;
}

Ecco i risultati:

size 8 struct 0x22cce0 string 0x402000

Tuttavia, se cambio il tipo di parametro di testo a char [80], i risultati cambiano a:

size 84 struct 0x22cc80 string 0x22cc84

L'istruzione OMC probabilmente si aspetta che la stringa da confezionare a destra in quel struct.

Perché non si può compilare l'esempio di IBM? Funziona bene per me -? Forse ci potrebbe mostrare i vostri parms compilatore ei messaggi di errore

Non si modifica il codice tramite client TN3270? E 'molto probabile che il problema è legato alla pagina di codice nel tuo emulatore. Per esempio ho bisogno di fare la seguente modifica in ISPF: c x'4A 'x'AD' tutti (per [) ec x'5A 'x'BD' (per]) al fine di compilare il sorgente ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top