/* $VER: 0.11 , (29.08.1997), © by Thorsten Willert

   Macro um Tabellenspalten und Zeilen zu 
   einer (den Inhalt in Zahlen natürlich) Gesamt-
   summe zu addieren.
   
------------------------------------------------
Funktion:

        Spalte2:  Spalte3   Spalte4: ...  Spalte:
Zeile2: Summand + Summand + Summand       Summe
Zeile3: Summand + Summand + Summand     + Summe
...                                       --------
Zeile:                                  = Summe

-------------------------------------------------
Voreinstellungen:                               */

Info = 1

/*----------------------------------------------*/

ADDRESS = 'FinaW'
OPTIONS CACHE RESULTS

STATUS PORTNAME
FW = RESULT
ADDRESS = FW

SIGNAL ON BREAK_C
SIGNAL ON HALT
SIGNAL ON SYNTAX

/*-----------------------------------------------*/

RT.Title = "FWAddMatrix1"
RT.Para1 = "rtez_flags = ezreqf_centertext"
RT.Para2 = "rt_pubscrname = FinalWriterPubScreen rtfi_flags = freqf_selectdirs"

Copyright = RT.Title || ", © 1997, by Thorsten Willert"

R = '0A'X
GesamtSumme=0
Zahlen = "1234567890,.-"

/*-----------------------------------------------*/

IF ~show('L',"rexxreqtools.library") THEN DO
   IF ~addlib('rexxreqtools.library',0,-30,0) THEN DO
      'ShowMessage 1 1 "Fehler ..." "Benötige RexxReqTools.library!" "" "Abbruch !!" "" ""'
      EXIT 20
   END
END

IF Info=1 THEN CALL Info("_Weiter")

ADDRESS (FW)
GetDocItemPrefs Decimal
Punkt = result
result = ""

CALL SetCursor

DO WHILE Zeile ~= Zeilen
        CALL Addieren
    Spalte = SpalteA
    Zeile = Zeile + 1
END

TableSetActiveCell Zeilen Spalten
    SelectAll
    Clear
    Justify Right
    Style Bold
        IF Punkt ~= "Period" THEN GesamtSumme = TRANSLATE( GesamtSumme,",","." )
    Type GesamtSumme

/*-----------------------------------------------*/

Ende:
EXIT

/*-----------------------------------------------*/

SetCursor:

ADDRESS(FW)
TableGetActiveCell
    PARSE VAR RESULT Zeile Spalte

IF Zeile = "" | Spalte = "" THEN /* Geht nicht über GetObjektType */
    DO
        CALL KeineTabelle
        CALL Ende
    END

TableGetRows
    PARSE VAR RESULT Muell Zeilen

TableGetColumns
    PARSE VAR RESULT Muell Spalten
    
    IF Zeile=1 | Zeile=Zeilen THEN Zeile=2
    IF Spalte=1 | Spalte=Spalten THEN Spalte=2    

SpalteA = Spalte

TableSetActiveCell Zeile Spalte

RETURN

/*-----------------------------------------------*/

Addieren:

ADDRESS (FW)

Summand=0;Summe=0
DO FOREVER
   TableSetActiveCell Zeile Spalte
        SelectAll
        Extract
        Summand = COMPRESS( RESULT,'09'X'0A'X" ")
        IF ~VERIFY(Summand,Zahlen) ~=0 THEN
            DO
                Justify Right
                Summand=TRANSLATE(Summand,".",",")
                IF Summand = "" THEN Summand = 0
            END
            ELSE Summand = 0
        Summe = Summe + Summand
    IF Spalte = Spalten - 1 THEN LEAVE
    Spalte = Spalte + 1
END

GesamtSumme = GesamtSumme + Summe

TableSetActiveCell Zeile Spalten
    SelectAll
    Clear
    Justify Right
        IF Punkt ~= "Period" THEN Summe = TRANSLATE( Summe,",","." )
        Type Summe
        
RETURN

/*-----------------------------------------------*/

Info: EXPOSE RT.Title
PARSE ARG Taste1

rtezrequest(Copyright || R || R ||,
            "Ab Cursorposition wird folgende Funktion ausgeführt:" || R || R || R ||,
            "           Spalte2:  Spalte3   Spalte4: ... Spalte:" || R ||,
            " Zeile2:   Summand + Summand + Summand      Summe" || R ||,
            " Zeile3:   Summand + Summand + Summand    + Summe" || R ||,
            " ...                                       --------" || R ||,
            " Zeile:                                   = Summe" || R || R || R ||,
            "Die erste Zeile und Spalte werden nie mitaddiert" || R || ,
            "und in der letzen steht immer das Ergebnis!",Taste1,RT.Title)
            
RETURN

/*-----------------------------------------------*/

KeineTabelle:

rtezrequest("Zuerst eine Tabelle auswählen" || R ||,
            "und Cursor positioniern!","Weiter",RT.Title,RT.Para1)

RETURN

/*-----------------------------------------------*/


HALT:
BREAK_C:

rtezrequest("Macro wurde abgebrochen ... ","Weiter",RT.Title,RT.Para1)

EXIT 10

SYNTAX:

IF RC = 47 THEN
rtezrequest("Fehler!","_Weiter|_Hilfe",RT.Title,RT.Para1)
IF rtresult==0 THEN CALL Info("_Aha")

EXIT 10