PDA

View Full Version : OFFSET zwischen POINTERs



Seiten : 1 [2]

Fuerchau
25-02-15, 17:14
Nun ja, besser ist das schon.
Ich weiß nicht, was bei ACTGRP(*CALLER) passiert.
Im Zweifel ist ein Aufruf nicht möglich, wenn die ACTGRP bereits für *SNGLVL initialisiert ist.
Da ich keine Lust habe das zu testen, probier es doch einfach mal aus.

Was Pointer-Differenz in COBOL angeht, so kann man den Pointer redefinieren mit einer Struktur Filler x(10) und 9(9) comp-4 (Wichtig kein S!), ggf. geht auch 9(9) comp-5.
Somit kann man die Differenz zweier Pointer zumindest im Speicher berechnen.

jsranko
26-02-15, 08:26
Hi Fuerchau,

genau das ist Antwort auf meine Frage! Super, ich danke dir.

Nur kleine Anpassung: FILLER muss X(12), weil die numerische Variable 9(9) BINARY ist 4Bytes groß und insgesamt muss es 16Bytes sein, weil Pointers 16Bytes allozieren.



IDENTIFICATION DIVISION.
PROGRAM-ID. PTRDIFF.


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.


DATA DIVISION.
FILE SECTION.


WORKING-STORAGE SECTION.
01 TEST-STRING-1 PIC X(160)
VALUE "green eggs and ham".
01 TEST-STRING-1-PTR POINTER.
01 TEST-STRING-2-PTR POINTER.
01 TEST-STRING-1-PTRR REDEFINES TEST-STRING-1-PTR.
05 FILLER PIC X(12).
05 OFFSET1 PIC 9(9) BINARY.
01 TEST-STRING-2-PTRR REDEFINES TEST-STRING-2-PTR.
05 FILLER PIC X(12).
05 OFFSET2 PIC 9(9) BINARY.
01 OFFSET PIC 9(9) BINARY.


PROCEDURE DIVISION.
MAIN.


SET TEST-STRING-1-PTR TO ADDRESS OF TEST-STRING-1.
SET TEST-STRING-2-PTR TO ADDRESS OF TEST-STRING-1.
SET TEST-STRING-2-PTR UP BY 2.
COMPUTE OFFSET = OFFSET2 - OFFSET1.
DISPLAY OFFSET.




STOP RUN
.

Fuerchau
26-02-15, 09:43
Mir dürfen doch auch schon mal Rechenfehler unterlaufen:).
Immerhin seid ihr ja auch gefordert.