utilizzando OMC stampare da con in metallo C
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; }
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 ...