Frage

Ich versuche, die WTO-Anweisung zu verwenden, um von mit in Metall-C auszudrucken „Hallo Welt“ zu meinem Job-Protokoll. Dies basiert auf dem Beispiel in Abschnitt 1.2.3.5 des z / O V1R10.0 Metall-C-Programmierhandbuch und Referenz Es erscheint, wenn ich WTO verwende ich habe entweder Probleme mit meinem Puffer, der 0 oder ASCII zu EBCDIC-Konvertierung. Ich habe den entsprechenden Abschnitt meines Auftragsprotokoll von meinem Code unten, gefolgt eingefügt, dann dem Code aus dem IBM Beispiel, das ich nicht kompilieren konnte. Job-Protokoll

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

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

        }

IBM Code

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;
        }
War es hilfreich?

Lösung

Das IBM Beispiel für mich gearbeitet (unter z / OS 1.9), aber ich musste hinzufügen ein Pragma die Codepage zu setzen: auf der Oberseite des Beispiels: #pragma filetag ( "IBM-500") Der Compiler hat das nicht akzeptieren [und] im Zeichen Text [80]; Ich habe versucht, auch char Text [80] in char * Text zu ändern, aber ich habe die gleiche seltsames Ergebnis, wie Sie.

Andere Tipps

Vielleicht ist das Layout in Erinnerung an den beiden Versionen der Struktur ist nicht das Gleiche? Ich habe versucht, dies 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;
}

Hier sind die Ergebnisse:

size 8 struct 0x22cce0 string 0x402000

Wenn ich jedoch die Art des Textparameter ändern char [80], die Ergebnisse zu ändern:

size 84 struct 0x22cc80 string 0x22cc84

Die WTO Anweisung erwartet wahrscheinlich die Zeichenfolge rechts in diese Struktur verpackt werden.

Warum können Sie nicht die IBM Probe kompilieren? Es funktioniert gut für mich - vielleicht Sie uns Ihre Compiler parms und Fehlermeldungen zeigen konnte,

Haben Sie Ihren Code über TN3270-Client bearbeiten? Es ist sehr wahrscheinlich, dass das Problem in die Codepage in Ihrem Emulator verwendet ist. Zum Beispiel muss ich die folgende Änderung in ISPF machen: c x'4A ‚x'AD‘ alle (für [) und c X'5A ‚X'BD‘ (für]), um die Quelle zu kompilieren ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top