[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Fehlermeldungen:Cursor Position

    Hallo,

    wollte die Cursor Position sauber programmieren, stosse aber immer auf folgende Fehler: *RNF0312/ *RNF5377.
    Code:
    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:
    Code:
       478          OUTROW = CURLOC:256;                            
    ======>                        a                                
    *RNF5377 20 a      021700  Ende des Ausdrucks erwartet.
    Ist das so sauber programmiert?


    Gruß

    Tarki

  2. #2
    Registriert seit
    Feb 2013
    Beiträge
    51
    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.
    Gruss,
    Ernst

  3. #3
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    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!
    kf

  4. #4
    Registriert seit
    Feb 2013
    Beiträge
    51
    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.:

    Code:
    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.
    Gruss,
    Ernst

  5. #5
    Registriert seit
    Apr 2012
    Beiträge
    360
    Habe es nun wie folgt dank eurer Hilfe umgesetzt:
    Code:
    D  CURLOC               370    371B 0        
          OUTROW = (CURLOC/256);                 
          OUTCOL = %Rem(%INT(CURLOC) : 256);     
          *IN31 = *ON;

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    42
    So sollte es noch einfacher gehen.

    PHP-Code:
    d InfoDs          ds                 
    d  DsRow               370    370I 0
    d  DsCol               371    371I 0
     
    c                   
    eval      OutRow dsRow  
    c                   
    eval      OutCol dsCol 
    mfg Christian

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •