PDA

View Full Version : Fehlermeldungen:Cursor Position



tarkusch
19-02-13, 11:45
Hallo,

wollte die Cursor Position sauber programmieren, stosse aber immer auf folgende Fehler: *RNF0312/ *RNF5377.

A** DDS Angaben
A RTNCSRLOC(&RCD &FLD)
A RTNCSRLOC(*MOUSE &ROW &COL)
A 31 CSRLOC(OUTROW OUTCOL)
A OVERLAY
A RCD 10A H
A FLD 10A H
A ROW 3S 0H
A COL 3S 0H
A OUTROW 3S 0H
A OUTCOL 3S 0H

D* DATENSTRUKTUR FÜR FUNKTIONSTASTEN
D INFODS DS
D CURLOC 370 371

477 if *inkd = *on;
478 OUTROW = (CURLOC:256);
======> abbb
*RNF0312 20 a 021700 Rechte runde Klammer erwartet, aber nicht gefunden.
*RNF5377 20 b 021700 Ende des Ausdrucks erwartet.
479 OUTCOL = %Rem(%INT(CURLOC) : 60);
480 *IN31 = *ON;


Wenn ich die Klammern ganz weglasse kommt die Fehlermeldung:

478 OUTROW = CURLOC:256;
======> a
*RNF5377 20 a 021700 Ende des Ausdrucks erwartet.

Ist das so sauber programmiert?


Gruß

Tarki

EFueloep
19-02-13, 12:22
Ich nehme an mit der Operation:

OUTROW = (CURLOC:256);soll eine Divison ausgeführt werden?

Dies müßte aber korrekt:


OUTROW = (CURLOC/256);sein.

Das Zeichen ':' ist kein Expression Operator.

camouflage
19-02-13, 12:25
Wird ein lustiges Resultat geben, wenn das Feld alpha definiert ist.... ;-)

Grundsätzlich würde ich eh auf die Definition (Länge/Typ)der Felder achten!

EFueloep
19-02-13, 12:32
Stimmt; das Feld CURLOC ist character.

Laut Info Center enthält es:


Cursor location (line and position). Updated on input operations that are not subfile operations that return data to the program. For example, hex 0102 means line 1, position 2. Line 10, position 33 would be hex 0A21.Du mußt also diesen Inhalt von Hex auf Numeric umrechnen.

So ähnlich wie z.B.:



D CHROW DS
D NUMROW 1 2B 0
D CHPOS DS
D NUMPOS 1 2B 0

C EVAL NUMROW = 0
C EVAL NUMPOS = 0
C EVAL %subst(CHROW:2:1) = %subst(CURLOC:1:1)
C EVAL %subst(CHPOS:2:1) = %subst(CURLOC:2:1)
Dann müßte der Inhalt von NUMROW und NUMPOS den numerischen Wert der Cursorposition enthalten.
Ich habe dies aber jetzt nicht ausprobiert.

tarkusch
19-02-13, 13:03
Habe es nun wie folgt dank eurer Hilfe umgesetzt:

D CURLOC 370 371B 0
OUTROW = (CURLOC/256);
OUTCOL = %Rem(%INT(CURLOC) : 256);
*IN31 = *ON;

christian_lettner
19-02-13, 15:13
So sollte es noch einfacher gehen.



d InfoDs ds
d DsRow 370 370I 0
d DsCol 371 371I 0

c eval OutRow = dsRow
c eval OutCol = dsCol


mfg Christian