Question

Je suis en train d'utiliser l'instruction OMC de métal avec en C pour imprimer « Bonjour tout le monde » à mon journal de travail. Ceci est basé sur l'exemple dans la section 1.2.3.5 du z / OS V1R10.0 Guide Métal C programmation et de référence Il apparaît lorsque j'utilise l'OMC j'ai soit des problèmes avec mon tampon contenant 0 ou ASCII à la conversion EBCDIC. J'ai collé la section pertinente de mon journal d'emploi ci-dessous, suivi de mon code, le code de l'exemple IBM que je ne pouvais pas compiler. journal d'emploi

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

Mon code

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

        }

Code 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;
        }
Était-ce utile?

La solution

L'exemple IBM a fonctionné pour moi (en Z / OS 1.9), mais je devais ajouter un pragma pour définir la page de code: au-dessus de l'exemple: #pragma filetag ( "IBM-500") Le compilateur n'a pas accepté la [et] dans le texte de char [80]; J'ai essayé de changer le texte char [80] en texte char * ainsi, mais je suis le même étrange résultat que vous.

Autres conseils

Peut-être la mise en page en mémoire des deux versions de la struct n'est pas la même chose? J'ai essayé dans 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;
}

Voici les résultats:

size 8 struct 0x22cce0 string 0x402000

Cependant, si je change le type du paramètre de texte char [80], les résultats changent à:

size 84 struct 0x22cc80 string 0x22cc84

L'instruction OMC attend probablement la chaîne à emballer droite dans cette struct.

Pourquoi ne pas compiler l'exemple d'IBM? Il fonctionne très bien pour moi - vous pourriez peut-être nous montrer votre parms compilateur et messages d'erreur

Avez-vous modifier votre code via TN3270 client? Il est très probable que le problème est lié à la page de code dans votre émulateur. Par exemple, je dois faire le changement suivant dans ISPF: c x'4A « X'AD » tout (pour [) et c x'5A « X'BD » (pour]) afin de compiler la source ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top