/*
**  $VER: HomeBank 4.4 (20 Dec 2001)
**  für Bankinstitute, die ans Rechenzentrum DVG Hannover angeschlossen sind
**        © 1996/2001 Gerald Froehlich
**
**  PROGRAMNAME:
**      HomeBank -  Homebanking (mit GUI)
**
**  FUNCTION:
**          Haupt-Programm
**
**  $HISTORY:
**
**  20 Dec 2001 : 004.4   :  ohne Gebühren, Freeware
**  15 Jan 2001 : 004.031 :  Überschr. versandte
**  05 Dec 2000 : 004.3 :  Mitteilungsseiten ausgebaut
**  18 Jan 2000 : 004.100 :  Kontobezeichnungen variabel
**  08 Jan 2000 : 004.023 :  1900/2000 Bug bei Auszüge anzeige behoben
**  13 Dec 1999 : 004.022 :  in HB Fehler mit Termin & 2000 gefixt und
**                           Button Gesch. deakt. nach Tanfreischaltung
**  04 Jul 1999 : 004.021 :  bei Ende CALL Ausloggen rausgenommen
**  30 Apr 1999 : 004.020 :  - no comment -
**  26 Jan 1999 : 004.018 :  noch letzte Bugs entfernt
**  20 Jan 1999 : 004.017 :  Config-Länge prüfen
**  18 Jan 1999 : 004.016 :  Quickhelp neu
**  17 Jan 1999 : 004.015 :  Bild in rahmen und About.fix
**  12 Jan 1999 : 004.014 :  Waehrung eingefügt
**  11 Jan 1999 : 004.013 :  GUI verändert
**  09 Jan 1999 : 004.012 :  neuer Schlüssel 
**   26 Mar 1996 : 0.01 : initial release
*/

/*
K1 = "Konto1"
K2 = "Konto2"
*/

Grafik        = "HB:SK.ilbm"

Hilfe = 1       
Flag_Logoff = 1
Auto_Dat = 0

Parameterpfad = "HB:Parameter/"
SPfad         = "HB:skript/"
setupfile     = Parameterpfad || "setup.HB"


Versi     = Left(Word(SourceLine(2),4),3)
Release  = Right(Word(SourceLine(2),4),1)
vom      = SubWord(SourceLine(2),5)
Longname = "Homebanking V.4.4   (für MultiTerm-KIT)"
Info     =  "Sparkassen-Homebanking (für Banken der DVG Hannover)"

OPTIONS RESULTS
TRACE Background
Flag_Fiasco     = 0

Flag_P_Auszuege = 0
Flag_O_Auszuege = 0
Flag_Bank       = 0
warnung         = 0
events          = 0
xyz             = 0
Al              = 1              /* Aufträge löschen? */
Conzahl         = 782            /* Config-Länge */

       text.1 = ""
       text.2 = ""
       text.3 = ""
       text.4 = ""
       text.5 = ""
       status = "Beim Login wird erledigt:"
       text.0 = "  TAN-Anzahl: 0 (unregistriert)  "
       
a = SetClip("MT_Port","MultiTerm_Btx")
a = SetClip("Konto2","YES")
a = SetClip("ParameterPfad","HB:Parameter/")


IF (~show('l','rexxsupport.library')) THEN
   CALL AddLib('rexxsupport.library',0,-30,0)


IF (~show('l','tritonrexx.library')) THEN
    CALL AddLib('tritonrexx.library',10,-30,0)


IF (~show('l','rexxreqtools.library')) THEN
    call addlib('rexxreqtools.library',0,-30,0)

IF (~show('l','rexxtricks.library')) THEN
    call addlib('rexxtricks.library',0,-30,0)

ADDRESS command 'sys:rexxc/te'

IF GetClip('Frei') = 'YOH' THEN a = SetClip('Frei')

IF ~SETENV("Bank","NO") THEN
CALL rtezrequest('Fehler beim Schreiben in ENV:Bank')

 /********** HB-Port öffnen *************************/

IF ~(OpenPort("HB")) THEN DO
    CALL rtezrequest('Fehler beim Öffnen des Portes HB','Ja doch!',,'rt_pubscrname='screen)
    CALL bye1
END


/********* erst Config-Datei entschlüsseln *************/
IF (~exists(ParameterPfad||"Tan.lst") & ~exists(ParameterPfad||"letzte_TAN") & ~exists(Parameterpfad||"Homebank.config")) THEN DO

 /* hier ist die Passwortabfrage beim Einloggen */
 Passwort = rtgetstring(,"Für Zugang bitte Passwort eingeben !","HB Paßwort-Abfrage",,'rt_pubscrname='screen ,
 'rtgs_invisible=true')
 IF Passwort ~= "" THEN DO
  ADDRESS command
  "Packer:Xpackit HB:Xparameter/ TO HB:parameter/ PW="Passwort" ALL Unpack copy"
  'rename HB:Parameter/(Konto#?|Auszug#?) HB:ablage/'
  ADDRESS
 END
 DROP Passwort
END
ELSE DO
  CALL rtezrequest('Noch ungepackte Files im Parameter-Verz.'|| '0A'x ||,
  'Es werden die ungepackten Files verwendet!','Ja doch!')
END
TRACE Background
Ou = "priv"
call O_U_leer
Ou = "gesch"
call O_U_leer



Flag_LogIn = 0
Flag_SkriptEnde = 0


CALL Clips

IF RESULT ~= "|" THEN DO
    CALL rtezrequest( "Die Konfigurationsdatei" RESULT || '0A'x||,
    "konnte nicht geöffnet werden!")
    call bye
END


  MT_Port = GetClip('MT_Port')


  screen = "Workbench"

/*
  hier verändern


screen = GetClip('screenName')

*/


/*
**  Setup laden
*/

IF Exists(setupfile) THEN DO
    a = Open("S",setupfile,"R")
    a1 = ReadCh("S",5)
    a = Close("S")
    Flag_Logoff = SubStr(a1,1,1)
    Hilfe = SubStr(a1,2,1)
    Auto_Dat = SubStr(a1,3,1)

    SELECT
        WHEN  SubStr(a1,4,1) = 1 THEN
             Flag_P_Auszuege = 1
        WHEN  SubStr(a1,4,1) = 2 THEN DO
             Flag_P_Auszuege = 1
             Flag_O_Auszuege = 1
        END
        WHEN  SubStr(a1,4,1) = 3 THEN
             Flag_O_Auszuege = 1
    OTHERWISE
    NOP
    END


END

CALL TestAktuell

/*
** GUI
*/

      T14 = " --> zeigt die gespeicherten Kontobewegungen an"||,
            " Vorher erfolgt Auswahl:"||,
            " - Auflisten          --> Anzeige der gespeicherten Auszüge"||,
            " - Holen/nicht Holen  --> Speichern der Auszüge beim nächsten Login?"

      T12 = T14" - Kontostand         --> Kurzinfo zu Konto 1"

      T13 = T14" - Kontostand         --> Kurzinfo zu Konto 2"

      T14 = " --> Die DatenBank 'FIASCO' wird gestartet. Hier werden die Überweisungen"||,
            " und Daueraufträge erzeugt,"||,
            " um sie dann später von HB an die Bank senden zu können."
      T15 = " Ist dieser Schalter aktiviert, so wird nach erfolgreicher"||,
            " Erledigung aller Online-Aufträge die Verbindung zu T-Online"||,
            " getrennt und MultitermKIT sowie das Stackprogramm"||,
            " (MIAMI) beendet"



imageflags = 'TRXIF_CENTER'

IF ~CREATEIMAGE('SK',Grafik,'TRXIM_PubScreenName' screen 'TRXIM_Flags' imageflags) THEN
   CALL rtezrequest('Kann die Grafik' Grafik 'nicht laden!','Ja doch!',,'rt_pubscrname='screen)


/*
** Definitionen
*/

apptags =      'TRCA_Name     HB',
               'TRCA_LongName Longname',
               'TRCA_Info     Info',
               'TRCA_Version  Vers',
               'TRCA_Release  Release',
               'TRCA_Date     vom',
               'TAG_END'

windowtags =   WindowID(1) WindowPosition('TRWP_DEFAULT'),
                WindowTitle(Longname) 'TRWI_Flags TRWF_ZIPCENTERTOP',
                PubScreenName(screen),
               QuickHelpOn(0),
        BeginMenu('Projekt'),
                  MenuItem('?_Info',2),
                  'ItemBarlabel',
                  MenuItemD('T_TAN-Edit',4),
                  MenuItem('C_Config-Editor',5),
                  'ItemBarlabel',
                  MenuItem('S_Status neu',22),
                  'ItemBarlabel',
                  'ItemBarlabel',
                  MenuItem('Q_Beenden',23),
          BeginMenu('Kontrolle'),
                  MenuItemC('B_ Bank halten',25),
                  'ItemBarlabel',
                  'ItemBarlabel',
                  MenuItemD('X_  Notbremse',99),
          BeginMenu('Setup'),
                  MenuItemC('H_ Hilfe  an/aus',3),
                  'ItemBarlabel',
                  MenuItemC('Datum-Automatik',51),
          'HorizGroupA Space',
            'TRGR_Vert TRGR_ALIGN|TRGR_CENTER|TRGR_FIXHORIZ|TRGR_FIXVERT',
                  'SpaceB HorizGroupS SpaceB SpaceB',
                  Groupbox,
                  BoopsiImageD('SK',IMAGEWIDTH('SK'),IMAGEHEIGHT('SK')) 'TRAT_ID 20',
                  'SpaceB SpaceB EndGroup SpaceB SpaceB',
                  NamedFrameBox('Konto-Auszüge') 'VertGroupAC' 'Space',
                  'HorizGroupEAC Space',
                  Button(K1,12),
                  QuickHelp(T12),
                  'Space',
                  Button(K2,13),
                  QuickHelp(T13),
                  'Space' 'EndGroup',
                  'Space EndGroup',
                  'SpaceB',
                  NamedFrameBox('Überweisungen schreiben') 'VertGroupAC' 'SpaceB',
                  'HorizGroup SpaceB SpaceB SpaceB',
                  Button('_FIASCO aufrufen',14),
                  QuickHelp(T14),
                  'SpaceB SpaceB SpaceB EndGroup',
                  'SpaceB  EndGroup',
                  'SpaceB',
                  NamedFrameBox('Ablage lesen') 'VertGroupAC' 'Space',
                 'SpaceB',
                'HorizGroupEAC SpaceB SpaceB',
                NamedSeparator('versandte ÜWs') 'SpaceB SpaceB',
                'EndGroup SpaceS',
                'HorizGroupEAC Space',
                Button(K1,35),
                QuickHelp("--> Aufruf des eingestellten Textreaders"||,
                " um die gespeicherten Bank-Bestätigungen der von HB gesendeten"||,
                " Überweisungen anzusehen (Konto 1)"),
                'Space',
                Button(K2,36),
                QuickHelp("--> Aufruf des eingestellten Textreaders"||,
                " um die gespeicherten Bank-Bestätigungen der von HB gesendeten"||,
                " Überweisungen anzusehen (Konto 2)"),
                'Space EndGroup SpaceB Endgroup',
                  'SpaceB EndGroup',
                  'Space Space',
                  'TRGR_Vert TRGR_ALIGN|TRGR_CENTER|TRGR_FIXHORIZ|TRGR_FIXVERT',
                   'SpaceB ',
                  NamedSeparatorIN(Status,21) 'SpaceS',
                 'GroupBox ObjectBackfillFB',
             'LineArray'  'Space',
                  'BeginLine' TextID(text.1,7) 'EndLine',
                  'Space',
                  'BeginLine' TextID(text.2,8) 'EndLine',
                  'Space',
                  'BeginLine' TextID(text.3,9) 'EndLine',
                  'Space',
                  'BeginLine' TextID(text.4,10) 'EndLine',
                  'Space',
                  'BeginLine' TextID("                                 ",11) 'EndLine',
                  'Space',
             'EndArray SpaceB SpaceB ',
                   NamedFrameBox('Hier wird es ernst'),
                    'VertGroupAC  SpaceB',
                      ' HorizGroup SpaceB SpaceB SpaceB',
                        'GroupBox',
                          'VertGroupAC SpaceB',
                             'HorizGroupC',
                              CenteredTextID('_Auto-LogOff',15),
                              CheckBox(15),
                              QuickHelp(T15),
                              'Space EndGroup Space',
                          'SpaceS EndGroup',
                        'SpaceB SpaceB SpaceB EndGroup SpaceB',
                    'HorizGroupEAC Space',
                      'GroupBox ObjectBackfillFB',
                        'VertGroupAC Space',
                          'HorizGroupC',
                          'SpaceB SpaceB' Button('MT-Log_in',16),
                          QuickHelp("--> automatisches Abarbeiten aller Online-Aufträge."||,
                          " Wenn nötig werden vorher MultitermKIT und der"||,
                          " TCP/IP-Stack (MIAMI) gestartet und T-Online angewählt"),
                          'SpaceB',
                          Button('MT-Log_off',17),
                          QuickHelp("--> Falls nicht 'Auto_LogOff' eingestellt war,"||,
                          " wird mit diesem Schalter die Online-Verbindung"||,
                          " getrennt, MultitermKIT und das Stackprogramm"||,
                          " (MIAMI) beendet und Ordnung in alle"||,
                          "  Dateien gebracht"),
                          'SpaceB SpaceB EndGroup',
                          'SpaceS SpaceS EndGroup',
                         'Space' 'EndGroup',
                       'Space EndGroup',
                     'SpaceB SpaceB',
                     NamedSeparatorN('Statuszeile'),
                     'SpaceS',
                       'HorizGroup SpaceS',
                         'GroupBox ObjectBackfillFB',
                           'VertGroup Space',
                           TextID(text.0,19) 'Space EndGroup',
                         'EndGroup',
                       'Space EndGroup',
                     'SpaceB EndGroup',
               'EndProject'

SIGNAL ON break_c
SIGNAL ON failure
SIGNAL ON halt
SIGNAL ON ioerr
SIGNAL ON syntax

/*
** Applikation erzeugen
*/

app = TRX_TR_CREATEAPP(apptags)



/*
** Fenster öffnen
*/

IF app ~= '00000000'x THEN DO
   window = TRX_TR_OPENPROJECT(app,windowtags)

   /* ist config noch gültig? */
   a = Open(NN,Parameterpfad || "Homebank.config","R")
   a = Seek(NN, 0, "E")
   IF a ~= Conzahl THEN DO
      CALL rtezrequest('Sorry, aber Ihre Config ist nicht mehr aktuell!',
      '0a'x||"Bitte lesen Sie dazu das neueste 'Update.readme'!",
      '0a0a'x||"Es wird jetzt der Config-Editor gestartet!",
      ,'Ja doch!',,'rt_pubscrname='screen)
      a = Close("NN")
      CALL config
      CALL clips

   END
   ELSE a = Close("NN")

   IF window ~= '00000000'x THEN DO
      ende = 0

     IF Hilfe = 1 THEN do
         dummy = TR_SetAttribute(window,3,'TRMN_Flags','TRMF_CHECKED')
         dummy = TR_SetAttribute(window,0,'TRWI_QuickHelp',1)
     END
    IF Flag_Logoff = 1 THEN
         dummy = TR_SetAttribute(window,15,'TRAT_Value',1)

    IF Auto_Dat = 1 THEN
        dummy = TR_SetAttribute(window,51,'TRMN_Flags','TRMF_CHECKED')

     IF GetClip("Konto2") = "NO" THEN DO
      dummy = TR_SetAttribute(window,13,'TRAT_Disabled',1)
      dummy = TR_SetAttribute(window,36,'TRAT_Disabled',1)
     END

     IF ~Show('p',MT_Port) THEN
       dummy = TR_SetAttribute(window,17,'TRAT_Disabled',1)

     IF xyz = 200 THEN
     dummy = TR_SetAttribute(window,4,'TRAT_Disabled',0)

      DO WHILE ~ende     /* Hauptschleife */
           
         CALL TRX_TR_WAIT(app,'')
        
         
         DO WHILE TRX_TR_HANDLEMSG(app,'event')
           IF event.trm_class = 'TRMS_ACTION' THEN DO
            SELECT
                  WHEN event.trm_id = 2 THEN
                     CALL about

                  WHEN event.trm_id = 4 THEN
                      CALL TAN_ED

                  WHEN event.trm_id = 5 THEN
                      CALL Config
                  
                  WHEN event.trm_id = 12 THEN
                      CALL P_Auszuege

                  WHEN event.trm_id = 13 THEN
                      CALL O_Auszuege

                  WHEN event.trm_id = 14 THEN
                      CALL Fiasco


                  WHEN event.trm_id = 16 THEN
                      CALL Multiterm

                  WHEN event.trm_id = 17 THEN
                      CALL Ausloggen
              

                  WHEN event.trm_id = 35 THEN
                      CALL P_UeW_Lesen

                  WHEN event.trm_id = 36 THEN
                      CALL G_UeW_Lesen



                  WHEN event.trm_id = 22 THEN
                      CALL TestAktuell

                  WHEN event.trm_id = 23 THEN
                      ende = 1

            OTHERWISE
                 NOP
            END
            END

             IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
               SELECT

                  WHEN event.trm_id = 3 THEN DO
                     IF event.trm_data = 0 THEN DO
                        dummy = TR_SetAttribute(window,0,'TRWI_QuickHelp',0)
                        Hi = 0
                     END
                     IF event.trm_data = 1 THEN DO
                         dummy = TR_SetAttribute(window,0,'TRWI_QuickHelp',1)
                         Hi = 1
                     END
                     CALL setup "HI" Hi
                  END

                    
                    WHEN event.trm_id = 15 THEN CALL Auto_LO

                    WHEN event.trm_id = 25 THEN CALL Bank

                    WHEN event.trm_id = 51 THEN CALL Datum


               OTHERWISE
                NOP
               END
            END
            CALL TestAktuell

            CALL StatusAnzeige
            

            IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN
               ende = 1

         END

         IF Show('p','FIASCO') THEN Flag_Fiasco = 1

         IF Flag_Fiasco = 1 & Show('p','HB') THEN DO
          
             IF GetClip("F_change") = 1 THEN DO
                CALL TestAktuell
                CALL StatusAnzeige
                a = SetClip("F_change")
             END


             IF ~(Show('p','FIASCO')) & Flag_Fiasco = 1 THEN DO
               Flag_Fiasco = 0
               
               IF GetClip("F_change") = 1 THEN DO
                CALL TestAktuell
                CALL StatusAnzeige
                a = SetClip("F_change")
               END

                 dummy = TR_SetAttribute(window,5,'TRAT_Disabled',0)
             END
         END
      END            /*  DO WHILE ~ende */


  /*    CALL Ausloggen */
  /*    weiteres HB kann nicht gestartet werden */

      CALL TRX_TR_CLOSEPROJECT(window)
   END

   CALL TRX_TR_DELETEAPP(app)
END

CALL DELETEIMAGE('SK')


Passwort = rtgetstring(,"Bitte Passwort eingeben und gut merken!","Paßwort-Abfrage","OK|Ohne PW",'rt_pubscrname='screen)
IF Passwort ~= "" THEN DO
  ADDRESS command
  IF GetClip('Packen') = "JA" THEN DO
   'delete HB:parameter/(Konto#?|Auszug#?)'
   'rename HB:ablage/(Konto#?|Auszug#?) HB:parameter/'
  END

  "Packer:PackX HB:parameter/ TO HB:Xparameter/ ALL LIB=FEAL PWD=" || Passwort || " GUI"
  ADDRESS
END
ELSE CALL rtezrequest('Files im Parameter-Verz. werden nicht verschlüsselt !!','Ja doch!',,'rt_pubscrname='screen)

DO FOREVER
 packet = GetPkt("HB")
 IF packet ~= "0000 0000"x THEN CALL Reply(packet,0)
 ELSE BREAK
END

IF xyz ~=200 THEN
CALL rtezrequest('Wollten Sie sich nicht heute noch',
        '0a'x 'kostenlos registrieren lassen?  ;)','Ja doch!',,'rt_pubscrname='screen)


ADDRESS command
'delete >NIL: RAM:Command.1'
'delete >NIL: ram:Key.HB4'
a = SetClip("Limit")
a = SetClip("Limit2")
a = SetClip("Konto2")
a = SetClip("Lesen")
a = SetClip("FiascoPfad")
a = SetClip("HB_Fiasco")
a = SetClip("MT")
a = SetClip("MT_Port")
a = SetClip("Packen")
a = SetClip("Parameter")
a = SetClip("ParameterPfad")
a = SetClip("screenName")
a = SetClip("Bank")
a = SetClip("Datei")
a = SetClip("Datei2")
a = SetClip("OUew")
a = SetClip("PUew")
a = SetClip("Ansage")
a = SetClip("Waehrung")

CALL closeport 'HB'
EXIT 0

/*####################################
 ------------ E N D E -----------
#####################################*/

Multiterm:
        IF GetClip('Frei') = 'YOH' THEN DO
          Newtan = rtgetstring(,'Bitte geben Sie eine TAN aus' '0a'x,
          'der neuen TAN-Liste ein!' ,,,'rt_pubscrname='screen)
          IF Length(Newtan) = 6 & Verify(Newtan,'0123456789') = 0 THEN DO
            NOP
          END
          ELSE DO
           dummy= BEEP()
           CALL rtezrequest('Fehler bei Eingabe der TAN !!!','Ja doch!',,'rt_pubscrname='screen)
           CALL Multiterm
          END

LZ:       Listzahl  = rtgetstring(,'Bitte geben Sie die TAN-Listen-Nr. ein!',
          ,,,'rt_pubscrname='screen)
          IF Verify(Listzahl,'0123456789') = 0 THEN DO
            NOP
          END
          ELSE DO
           dummy= BEEP()
           CALL rtezrequest('Fehler bei Eingabe der TAN-Listen-Nr. !!!','Ja doch!',,'rt_pubscrname='screen)
           CALL LZ
          END

        END
    /* MT starten und einloggen */

        dummy = TR_SetAttribute(window,99,'TRAT_Disabled',0)
        a = "HB:skript/"Word(SourceLine(2),3)
        a = Open("a1",a,"r")
        a = Seek("a1", -3, "E")
        a = ReadCh("a1",2)
        IF a ~= "gf" THEN DO
         CALL rtezrequest('Nanu,nana!','Ja doch!',,'rt_pubscrname='screen)
         CALL bye
        END
        a = Close("a1")

        ADDRESS command run "HB:skript/Login"
           pos = 0
           CALL WaitForREXX

         CALL Message LOGIN
         Flag_Login = 1
         dummy = TR_SetAttribute(window,16,'TRAT_Disabled',1)
         dummy = TR_SetAttribute(window,17,'TRAT_Disabled',0)
         
         ADDRESS VALUE MT_Port
         "setpath 10" SPfad
         "setjnrequest 0"
         ADDRESS
        
         CALL TestAktuell
         pos = "4 5 23 3 51"
         x = 1
         CALL dis

/* auf Benachrichtigungsseiten prüfen
         IF Flag_ASEITEN THEN DO
           ADDRESS command run "HB:skript/T_Online"
           pos = 1
           CALL WaitForREXX
         END
*/

IF GetClip('Frei') ~= 'YOH' THEN DO   /* nur wenn keine Freischaltung */
  /* Bank anwählen ohne Vorgänge */
  IF ~Flag_O_Ueberw & ~Flag_P_Ueberw & ~Flag_P_Auszuege & ~Flag_O_Auszuege & Flag_Bank THEN DO
        ADDRESS command run "HB:skript/Bank"
         pos = 1.5
         CALL WaitForREXX
         CALL UeberweisenAufraeumen
    END

  /* Bank anwählen und Vorgänge erledigen */
  IF Flag_O_Ueberw | Flag_P_Ueberw | Flag_P_Auszuege | Flag_O_Auszuege THEN DO
        IF xyz < 200 | tanzahl > 1 THEN DO

         ADDRESS command run "HB:Skript/HB"
         pos = "12 13"
         x = 1
         CALL dis

         pos = 2
         CALL WaitForREXX
         CALL UeberweisenAufraeumen

        END
        ELSE DO
         CALL rtezrequest('Zu wenig Einträge in der TAN-Liste!!!'||'0A'x||,
         'Alle Kontobewegungen werden gesperrt!','Ja doch!',,'rt_pubscrname='screen)
        END
   END
  
END
ELSE DO             /*TAN-liste freischalten*/
     CALL Message FREI
     a = SetClip('NT',Newtan)
     a = SetClip('TNR',Listzahl)


     ADDRESS command run "HB:Skript/Tanlist"
        pos = "3 4 5 15 25 12 13 51"
        x = 1
        CALL dis
        pos = 9
        CALL WaitForREXX
        a = SetClip('Frei','')
        pos = "12 14 15 51"
        IF GetClip("Konto2") ~= "NO" THEN pos = pos "13"
        x = 0
        CALL dis
END

/* Beenden */
      Flag_SkriptEnde = 1
      CALL TestAktuell
      dummy = Beep()
   ADDRESS VALUE MT_Port
      "tofront"
   IF Flag_Logoff = 1 THEN DO
         "split 3"
         "mplprint" " "
         "mplprint" "Es folgt nun das Ausloggen aus T-Online"
         CALL Ausloggen
   END
   ELSE DO
         "split 4"
         "locate 3 2"
         "mplprint" "Die Skripte enden hier und aber die"
         "locate 3 3"
         "mplprint" "T-Online Verbindung bleibt bestehen!"
         a = delay(300)
         "split 0"
   END

      pos = "16 4 5 23 25 12 3 51"
      IF GetClip("Konto2") ~= "NO" THEN pos = pos "13"
          x = 0
          CALL dis
          dummy = TR_SetAttribute(window,99,'TRAT_Disabled',1)
          warnung = 0
       
RETURN


UeberweisenAufraeumen:

  ADDRESS command "HB:Skript/Tanloesch"

  IF Al = 0 THEN RETURN /* falls Zugang nicht möglich gewesen */
  
  Flag_P_Auszuege = 0
  Flag_O_Auszuege = 0
  CALL Nein

  IF Flag_Bank = 1 THEN dummy = TR_SetAttribute(window,16,'TRAT_Disabled',0)
  CALL setup AU 0
  RETURN

TestAktuell:

IF GetClip('Frei') ~= 'YOH' THEN DO
/*
   Flag_ASEITEN = 0
   if upper(left(getclip("ASEITEN"),2)) = "JA" then Flag_ASEITEN = 1
*/
   Flag_P_Ueberw = 0
   Flag_O_Ueberw = 0
   

   if Open(FP,getclip("Datei"),"R") then do
    if readln(FP)  ~= "00" then Flag_P_Ueberw = 1
    a = close(FP)
   END

   if Open(FP,getclip("Datei2"),"R") then do
    if readln(FP) ~= "00" then Flag_O_Ueberw = 1
    a = close(FP)
   END


    a = open(FP,ParameterPfad || "gesch.Uew","R")
    O2 = VALUE(ReadLn(FP))
    a = close(FP)
    a = open(FP,ParameterPfad || "priv.Uew","R")
    U2 = VALUE(ReadLn(FP))
    a = close(FP)

   /* stimmen priv.Uew bzw. gesch.Uew mit Anzahl ÜWs überein? */
 IF GETDIR('HB:senden/','Ueberweisung#?','stemvar','FILES','N') THEN DO
     IF stemvar.0 ~= U2 THEN DO
         ab = rtezrequest('Datei "priv.Uew" stimmt nicht mehr!',
         '0A'x||'Datei "priv.Uew" anpassen?','Ändern|Ne, laß das!',K1,'rt_pubscrname='screen)
       IF ab = 1 THEN DO
         U2 = stemvar.0
         IF Open(FP,"HB:Parameter/priv.Uew","W") THEN DO
          IF U2 < 10 THEN U2 = "0" || U2
          a = WriteLn(FP,U2)
          a = Close(FP)
         END
         ELSE CALL rtezrequest('Fehler beim Schreiben von Datei "priv.Uew"')
       END
     END
  END

IF GETDIR('HB:senden/','GKtoUeberwsg#?','stemvar','FILES','N') THEN DO
     IF stemvar.0 ~= O2 THEN DO
         ab = rtezrequest('Die Datei "gesch.Uew" stimmt nicht mehr!',
         '0A'x||'Datei "gesch.Uew" anpassen?','Ändern|Ne, laß das!',K2,'rt_pubscrname='screen)
       IF ab = 1 THEN DO
         O2 = stemvar.0
         IF Open(FP,"HB:Parameter/gesch.Uew","W") THEN DO
          IF O2 < 10 THEN O2 = "0" || O2
          a = WriteLn(FP,O2)
          a = Close(FP)
         END
         ELSE CALL rtezrequest('Fehler beim Schreiben von Datei "gesch.Uew"')
       END
     END
  END


   DO i=1 TO 5
       text.i = ""
   END


  xy = 0
  if Flag_P_Ueberw then do
      xy = xy +1
      text.xy =  U2 || " Überweisung/en ("K1")"
      text.xy = Centre(text.xy,34)
      END

   if Flag_O_Ueberw then do
      xy = xy +1
      text.xy =  O2 || " Überweisung/en ("K2")"
      text.xy = Centre(text.xy,34)
      END

   if Flag_P_Auszuege then do
      xy = xy +1
      text.xy = "Auszüge speichern ("K1")"
      text.xy = Centre(text.xy,34)
      END

   if Flag_O_Auszuege then do
      xy = xy +1
      text.xy = "Auszüge speichern ("K2")"
      text.xy = Centre(text.xy,34)
      END


   IF Flag_Bank THEN text.5 = Centre("(Bankverbindung wird gehalten)",34)

   IF xy = 0  THEN text.3 = Centre(" Es liegen keine Aufträge vor!",34)
     status = "Beim Login wird erledigt:"
  
  if Flag_SkriptEnde then do
   IF xy >0 THEN text.2 =  "Es wurde alles gesendet,  "
   text.3 = "das automatische Abarbeiten"
   text.4 = "der Skripte ist zu Ende"
   Flag_SkriptEnde = 0
  end
END
ELSE DO                  /* falls Freischaltung */
  DO i=1 TO 5
     text.i = ""
  END
  text.3 = Centre("Neue TAN-Liste freischalten",34)
     status = "Beim Login wird erledigt:"
  pos = "12 13 14 15 51"
  x = 1
  CALL dis


END
/*##*/

    /* Anzahl TAN-Nr. auslesen*/

IF GetClip('Frei') ~= 'YOH' THEN DO

  IF events ~= 0 THEN RETURN
  IF xyz < 200 THEN DO
     text.0 = "  TAN-Anzahl: 0 (unregistriert)  "
     RETURN
  END


  IF ~(READFILE(ParameterPfad || "TAN.lst",'tanzahl')) THEN DO
    call rtezrequest('Fehler bei Einlesen der TAN-Liste !!!','Ja doch!',,'rt_pubscrname='screen)
    call bye
  end
    tanzahl = tanzahl.0 - O2 - U2
    text.0 = Centre("Noch " tanzahl " freie TAN !",34)
    IF tanzahl < 5 THEN IF tanzahl > 1 & warnung = 0 THEN DO
     IF xyz = 200 THEN DO
      CALL rtezrequest('nur noch' tanzahl 'Einträge in der  TAN-Liste !!! ','Ja doch!',,'rt_pubscrname='screen)
      warnung = 1
     END
    END

    IF tanzahl <= 1 THEN DO
        IF xyz = 200 THEN
     CALL rtezrequest('Sie haben zu wenig TANs in der Liste !!!'||'0A'x||,
     'Alle Kontobewegungen werden gesperrt!','Ja doch!',,'rt_pubscrname='screen)
    end
END
ELSE DO     /*falls Freischaltung*/
    tanzahl = 2
    text.0 = Centre("alte TAN-Liste gesperrt!",34)
END



  RETURN

Config:

ADDRESS command "HB:Skript/Config"
CALL Clips


IF GetClip("Konto2") = "NO" THEN DO
   dummy = TR_SetAttribute(window,13,'TRAT_Disabled',1)
   dummy = TR_SetAttribute(window,36,'TRAT_Disabled',1)
END
ELSE do
  dummy = TR_SetAttribute(window,13,'TRAT_Disabled',0)
  dummy = TR_SetAttribute(window,36,'TRAT_Disabled',0)
END

IF GetClip("Packen") ~= "JA" THEN
  ADDRESS command 'delete HB:xparameter/(Konto#?|Auszug#?)'


 CALL TestAktuell

 return

Ausloggen:
  Flag_LogIn = 0

  ADDRESS command "HB:Skript/Logoff"
  dummy = TR_SetAttribute(window,16,'TRAT_Disabled',0)
  dummy = TR_SetAttribute(window,17,'TRAT_Disabled',1)
  events = 0        /* TAN-Status wieder ein */
  RETURN

sleep:
  arg Sekunden
  delay(Sekunden*100)
return



/*#####################################################
*** während ein AREXX-Skript in MT abläuft **********
#####################################################*/

WaitForREXX:
DO FOREVER
  a = delay(100)
  packet = GetPkt("HB")

  IF packet ~= "0000 0000"x THEN DO
   pack = GetArg(packet)
    IF Right(pack,3) = "END" THEN DO             /* Arexx-Skript beendet */
      CALL Reply(packet,0)

      IF Right(pack,4) = "1END" THEN Al = 0   /* kein Zugang: Aufträge bewahren */

      RETURN
    END

   SELECT
        WHEN pack = "OK" THEN DO       /* Ne Meldung von FIASCO */
                   CALL Reply(packet,0)
                   CALL TestAktuell
                   CALL StatusAnzeige
        END

/*
        WHEN pack = "FEHLER" THEN DO
         CALL Reply(packet,0)
         CALL rtezrequest('Leider war ein Fehler beim Ablauf eines AREXX-Skriptes',
         ,'Ja doch!',,'rt_pubscrname='screen)
        RETURN
        END
*/
        WHEN pack = "ER" THEN DO  /*in einem ER */
            CALL Reply(packet,0)

            IF pos = 1.5 THEN   /* Bank - ohne Bankaufträge */
            CALL Message BANK

            IF pos = 2 THEN   /* Bank - Aufräge werden erledigt */
            CALL Message BANK1


            IF pos = 9 THEN
            CALL Message FREI1

        END
        OTHERWISE DO                   /* Befehl nicht verstanden */
        CALL Reply(packet,10)         
        END /*OTHERWISE*/

    END    /* SELECT*/
  END     /* IF packet ... */


    DO WHILE TRX_TR_HANDLEMSG(app,'event')
          IF event.trm_class = 'TRMS_ACTION' THEN DO

              SELECT
                  WHEN event.trm_id = 99 THEN DO
                      al = 0
                    ADDRESS "HB_REXX" STOP
                  END

                  WHEN event.trm_id = 2 THEN
                     CALL about

                  WHEN event.trm_id = 12 & pos = 1 THEN
                      CALL P_Auszuege

                  WHEN event.trm_id = 13 & pos = 1 THEN
                      CALL O_Auszuege

                  WHEN event.trm_id = 18 THEN
                      CALL Ablage_lesen

                  WHEN event.trm_id = 22 THEN
                       CALL TestAktuell
              OTHERWISE
                 NOP
              END

          END
      /* Hier Abfrage nach NEWVALUE */
      IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
           SELECT

             WHEN event.trm_id = 15 THEN CALL Auto_LO

             WHEN event.trm_id = 25 & pos < 3 THEN CALL Bank


           OTHERWISE
             NOP
           END  /* SELECT*/
      END /*IF event.trm----*/

    CALL TestAktuell
    CALL StatusAnzeige
    END   /*DO WHILE */
END      /*DO FOREVER*/

RETURN


O_Auszuege:

    ab = '_Auflisten|_Holen|_Kontostand'
    IF Flag_O_Auszuege = 1 THEN ab = '_Auflisten|nicht _Holen|_Kontostand'
    ab = rtezrequest('Auszüge holen oder bestellen;',
   '0A'x||'oder Kontostand ansehen',ab,K2,'rt_pubscrname='screen)

    IF ab = 0 THEN DO
      ab = "O"
      CALL Stand
      RETURN
    END

    IF ab = 1 THEN DO
     CALL Auszuege GESCH
      RETURN
    END

    a = open(SI,"HB:Parameter/O_Auszuege","W")
    IF Flag_O_Auszuege = 1 THEN DO
      Flag_O_Auszuege = 0
      a = writeln(SI,"Nein")
    CALL setup AU FLAG_P_Auszuege
    END
    ELSE DO
      Flag_O_Auszuege = 1
      IF Flag_P_Auszuege THEN CALL setup AU 2
      ELSE CALL setup AU 3

/* hier Abfrage von-Datum maximal 42 Tage vor heute*/
      call Tage_rechnen

      IF ab = "" THEN DO
          IF Open(FP1,"HB:ablage/letztA.gesch","R") THEN DO
            ab = ReadLn(FP1)
            a = close(FP1)
          END
          ELSE DO
            CALL rtezrequest('Welches letztes Datum?? ;)' '0a'x,
            'Bitte eventuell auch die Datumsautomatik abstellen!',
            ,'Entschuldige vielmals',,'rt_pubscrname='screen)
            Flag_O_Auszuege = 0
            a = writeln(SI,"Nein")
            a = close(SI)
            CALL TestAktuell

            RETURN
          END
      END
      a = writeln(SI,ab)

    END
    a = close(SI)
     CALL TestAktuell

    return

P_Auszuege:

    ab = '_Auflisten|_Holen|_Kontostand'
    IF Flag_P_Auszuege = 1 THEN ab = '_Auflisten|nicht _Holen|_Kontostand'
    ab = rtezrequest('Auszüge holen oder bestellen;',
   '0A'x||'oder Kontostand ansehen',ab,K1,'rt_pubscrname='screen)


    IF ab = 0 THEN DO
      ab = "P"
      CALL Stand
      RETURN
    END

    IF ab = 1 THEN DO
      CALL Auszuege PRIV
      RETURN
    END

    a = open(SI,"HB:Parameter/P_Auszuege","W")
    IF Flag_P_Auszuege = 1 THEN DO
      Flag_P_Auszuege = 0
      a = writeln(SI,"Nein")
      IF FLAG_O_Auszuege THEN CALL setup AU 3
      ELSE CALL setup AU 0
    END
    ELSE DO
      Flag_P_Auszuege = 1
      CALL setup AU Flag_O_Auszuege + 1

/* hier Abfrage von-Datum maximal 42 Tage vor heute*/
      call Tage_rechnen

      IF ab = "" THEN DO
          IF Open(FP1,"HB:ablage/letztA.priv","R") THEN DO
            ab = ReadLn(FP1)
            a = close(FP1)
          END
          ELSE do
            CALL rtezrequest('Welches letztes Datum?? ;)' '0a'x,
            'Bitte eventuell auch die Datumsautomatik abstellen!',
            ,'Entschuldige vielmals',,'rt_pubscrname='screen)
            Flag_P_Auszuege = 0
            a = writeln(SI,"Nein")
            a = close(SI)
            CALL TestAktuell

            RETURN
          END
      END
      a = writeln(SI,ab)
    END
    a = close(SI)
     CALL TestAktuell
    return

Tage_rechnen:

IF Auto_Dat = 0 THEN DO
 ab = Insert("19",Translate(Date("E",Date("I")-40),".","/"),6)
 ab =  rtgetstring(ab,"Datum im Format TT.MM.JJJJ eingeben.",
 '0A'x "Möglich ist es ab dem vorgegebenen Datum!!","Auszüge ab...","OK|"||,
 "nach letztem Datum",'rt_pubscrname='screen)
END
ELSE ab = ""
RETURN

O_U_leer:
 /* hier priv.Uew bzw. gesch.Uew restaurieren*/
 IF ~exists(ParameterPfad || Ou ||".Uew") THEN DO
  a = Open("N",ParameterPfad || Ou ||".Uew","W")
  a = WriteCh("N","00")
  a = Close("N")
 END
 RETURN

TAN_ED:
ADDRESS command "HB:skript/TAN-Ed"

 IF GetClip('Frei') = 'NO' THEN DO /* Buttons enabled */
   pos = "12 13 14 15 51"
   x = 0
   CALL dis

   a = SetClip('Frei')
 END

 CALL TestAktuell

return


Fiasco:
DO FOREVER
 packet = GetPkt("HB")
 IF packet ~= "0000 0000"x THEN CALL Reply(packet,0)
 ELSE BREAK
END

ADDRESS command "HB:skript/Fiasco_Start"
/* event. wieder bei Einfügung von Fiasco_Start in Homebanking
IF RESULT ~= 0 THEN DO
    CALL rtezrequest('Fehler bei Ausführung von Fiasco !!!','Ja doch!',,'rt_pubscrname='screen)
    call bye
 END */
 dummy = TR_SetAttribute(window,5,'TRAT_Disabled',1)

 RETURN

Ablage_lesen:

ADDRESS command GetClip("Lesen") "HB:ablage/"

RETURN


about:

text = "    " Longname '0A'x Info '0A'x "VERSION" Versi "(Release" Release,
") vom" vom '0A'x "      © 1996/2001 Gerald Fröhlich "
IF xyz = 200 THEN
  text = text '0A0A'x ' Registriert für' SubWord(TU,1,Words(TU)-1) '0A'x,
   ' Seriennummer:' TS
ELSE text = text '0A0A'x 'unregistrierte VERSION (ohne TAN-Verwaltung)'
CALL rtezrequest(text,"Alles klar!", "Über...",'rt_pubscrname='screen)
RETURN

Nein:

IF ~SETENV("HB:Parameter/O_Auszuege","Nein") THEN
    CALL rtezrequest('Fehler beim Schreiben von HB:Parameter/O_Auszuege')
IF ~SETENV("HB:Parameter/P_Auszuege","Nein") THEN
    CALL rtezrequest('Fehler beim Schreiben von HB:Parameter/P_Auszuege')

RETURN

Bank:

    Flag_Bank = event.trm_data

             IF ~Flag_Bank THEN DO
               dummy = TR_SetAttribute(window,15,'TRAT_Disabled',0)

               IF ~SETENV("Bank","NO") THEN
               CALL rtezrequest('Fehler beim Schreiben in ENV:Bank')

             END
             IF Flag_Bank THEN DO
               Flag_Logoff = 0

               dummy = TR_SetAttribute(window,15,'TRAT_Value',0)
               dummy = TR_SetAttribute(window,15,'TRAT_Disabled',1)
               

    
               IF ~SETENV("Bank","YES") THEN
                CALL rtezrequest('Fehler beim Schreiben in ENV:Bank')

             END
   RETURN

Auto_LO:

Flag_Logoff = event.trm_data
        IF ~Flag_Logoff THEN DO
               dummy = TR_SetAttribute(window,25,'TRAT_Disabled',0)
               LF = 0
        END
        IF Flag_Logoff THEN DO
               dummy = TR_SetAttribute(window,25,'TRAT_Disabled',1)
               LF = 1
               Flag_Bank = 0
        END
        CALL setup "LF" LF
RETURN

StatusAnzeige:

DO i=1 TO 5
              CALL TR_SETATTRIBUTE(window,i+6,'TRAT_Text',Copies(" ",34))
              CALL TR_SETATTRIBUTE(window,i+6,'TRAT_Text',text.i)
            END
            CALL TRX_TR_SETATTRIBUTE(window,19,'TRAT_Text',Copies(" ",34))
            CALL TRX_TR_SETATTRIBUTE(window,19,'TRAT_Text',text.0)
RETURN

dis:

DO i=1 TO Words(pos)
         dummy = TR_SetAttribute(window,Word(pos,i),'TRAT_Disabled',x)
END
IF xyz ~= 200 THEN
     dummy = TR_SetAttribute(window,4,'TRAT_Disabled',1)
RETURN

Stand:

IF ab = "O" THEN DO
 ab = "HB:ablage/Kontostand.gesch"
 Waehrung = Word(GetClip('Waehrung'),2)
END
IF ab = "P" THEN do
 ab = "HB:ablage/Kontostand.priv"
 Waehrung = Word(GetClip('Waehrung'),1)
END

IF ~(READFILE(ab,'ko')) THEN DO
    dummy= BEEP()
    CALL rtezrequest('Fehler bei Einlesen von' ab '!!!','Ja doch!',,'rt_pubscrname='screen)
    RETURN
END

IF Right(Word(ko.5,3),1) = 'S' THEN
    ab = '-' Translate(Compress(Word(ko.5,3),'.HS'),'.',',')
ELSE ab = Translate(Compress(Word(ko.5,3),'.HS'),'.',',')

text = SubWord(ko.5,1,2) || '0A'x || Strip(ko.8,'T')||,
       ":"'0A'x '0A'x ||ab Waehrung '0A'x '0A'x '0A'x,
        ||SubWord(ko.12,1,2) || ": " SubWord(ko.12,3,1) Waehrung

titel = Strip(ko.2)

Gad = 'Manche haben noch weniger!'
IF VALUE('ab') > 1000 THEN Gad = 'Oh, bist Du reich!'
IF VALUE('ab') < 200  THEN Gad = 'Is ja nicht dolle! '
IF VALUE('ab') < 0  THEN Gad = 'Da hilft nur noch ein Banküberfall'

CALL rtezrequest(text,Gad,titel,'rtez_flags = ezreqf_centertext',
              'rt_pubscrname='screen)

RETURN

Message:

ARG events

SELECT
    WHEN events = "MT" THEN    text = "MultiTerm gestartet"
    WHEN events = "LOGIN" THEN text = "T-ONLINE angewählt"
    WHEN events = "BANK" THEN  text = "Bank-Computer angewählt"
    WHEN events = "BANK1" THEN text = "Aufträge werden bearbeitet"

    WHEN events = "FREI" THEN  text = "TAN-Liste freischalten"
    WHEN events = "FREI1" THEN  text = "TAN-Liste freigeschaltet"
END
text.0 = Centre(text,34)
CALL StatusAnzeige
RETURN

Clips:
        K1 = 0
        K2 = 0 /*falls Kontoname nicht vergeben*/

filename = Parameterpfad || "Homebank.config"
if Open(FP,filename,"R") then do
    do i = 1 until eof(FP)
        text = strip(substr(readln(FP),3),"T")
        select

            WHEN i = 1 THEN a = SetClip("Packen",text)
            WHEN i = 2 THEN a = SetClip("FiascoPfad",text)
            WHEN i = 3 THEN a = SetClip("HB_Fiasco",text)

            WHEN i = 4 THEN a = SetClip("Bank",text)

            WHEN i = 7 THEN a = SetClip("MT",text)
            WHEN i = 8 THEN a = SetClip("Parameter",text)

            WHEN i = 9 THEN a = SetClip("Lesen",text)

            WHEN i = 10 THEN a = SetClip("screenName",text)

            WHEN i = 11 & text = "NO" THEN a = SetClip("Konto2",text)

            WHEN i = 15 THEN a = SetClip("Limit",text)

            WHEN i = 16 THEN a = SetClip("Limit2",text)

            WHEN i = 17 THEN a = SetClip("Ansage",text)

            WHEN i = 18 THEN a = SetClip("Waehrung",text)

            WHEN i = 19 THEN K1 = text

            WHEN i = 20 THEN K2 = text

           OTHERWISE NOP
            end
        end
    a = Close(FP)

  a =  SetClip("Datei", "HB:Parameter/priv.Uew")
  a =  SetClip("Datei2", "HB:Parameter/gesch.Uew")

  IF K1 = "" | K1 = 0 THEN K1 =  "Konto1"
     a =  SetClip("K1",K1)

  IF K2 = "" | K2 = 0 THEN K2 =  "Konto2"
  a = SetClip("K2",K2)


 IF ~Open("k","RAM:Key.HB4","R") THEN DO
    IF ~Open("k","HB:Key.HB4","R") THEN DO
        CALL rtezrequest('Diese VERSION wurde noch nicht registriert!',
        '0a'x '     (keine TAN-Verwaltung)','Ja doch!',,'rt_pubscrname=Workbench')
    END
    ELSE DO
        ADDRESS command 'copy HB:Key.HB4 RAM:Key.HB4'
        xyz = 100
    END
 END
 ELSE xyz = 100
 IF xyz = 100 THEN DO
     j = ReadLn('k')

  PARSE VAR j 7  Datum +4 . +4 seST "j" +4 y "N" +2 co "0b1" se "101" Be "öß" Vers "\" seL "a" az1
  a = Length(j)-8
  PARSE VAR j az a "a" j
  az = COUNTCHARS(az,"1")
  j = Close("k")

   se = SubStr(se,seST,seL)
   TS   = BitXor(B2C(Reverse(y)),co)
   TUNR = BitXor(B2C(Reverse(y)),co)/1000
   TUNR = TUNR-se
   TUNR = Trunc(TUNR-B2C(Vers))
   TU = BitXor(B2C(Reverse(Left(Be,Length(Be)-3))),co)

     IF Word(TU,Words(TU)) = TUNR & az = az1 THEN  xyz = 200
     ELSE DO
     CALL rtezrequest('Vielleicht probierst Du es doch mal mit einem' '0a'x,
     'legal registrierten HB?','Ja doch!',,'rt_pubscrname=Workbench')
     CALL bye
     END

 END
RETURN "|"
END
RETURN filename


/**** Lese-routinen *******/



P_UeW_Lesen:
a = ASL_RequestFile('00000000'x,stemvar,
,LoadFileP("File-Auswahl","Anzeigen","HB:Ablage/UeW","","~(#?gesch#?)"))
IF a = 1 THEN
ADDRESS command GetClip("Lesen") stemvar.1
RETURN

G_UeW_Lesen:
a = ASL_RequestFile('00000000'x,stemvar,
,LoadFileP("File-Auswahl","Anzeigen","HB:Ablage/UeW","","#?gesch#?"))
IF a = 1 THEN
ADDRESS command GetClip("Lesen") stemvar.1
RETURN

Auszuege:

/*********************
** Auszugs-Anzeige ***
*********************/


PROCEDURE

ARG Kontoname

Waehrung = GetClip('Waehrung')

 OPTIONS RESULTS                    

SIGNAL ON break_c
SIGNAL ON failure
SIGNAL ON halt
SIGNAL ON ioerr
SIGNAL ON syntax

screen = GetClip('screenName')
ub = 0

IF Kontoname = "PRIV" THEN DO
    File1 = "HB:ablage/Kontoauszuege.priv"
    Wfile1 = "HB:ablage/Auszug.priv"
    Waehrung = Word(Waehrung,1)
END
ELSE DO
    File1 = "HB:ablage/Kontoauszuege.gesch"
    Wfile1 = "HB:ablage/Auszug.gesch"
    Waehrung = Word(Waehrung,2)
END


IF ~READFILE(Wfile1,'liststore') THEN do
     CALL rtezrequest('Fehler beim Einlesen von ',
     Wfile1 '!!!' '0a'x '(Vielleicht gibts noch gar keine Auszüge??)',
     ,'Ja doch!',"Fehlermeldung Anzeige",'rt_pubscrname='screen)
     RETURN 0
END

IF Open(FA,file1,"R") THEN DO
  x = liststore.0
  DO FOREVER
   IF Eof(FA) THEN BREAK
   CALL anfang
  END
  a = close(FA)
END

Nr = liststore.0
list.0 = 0

Anzeigen:

CALL QSORT('liststore')

a = STEMCOPY('liststore',0,'auswahl',0)
a = STEMCOPY('auswahl',0,list,0)
CALL Kontostand
IF a = -31 THEN RETURN 0   /*falls noch keine Auszüge da */

Ueberschrift = "gebucht     Wert    Betrag" Waehrung "   Verwendungszweck            "

winsize.trd_left=10
winsize.trd_top=10
winsize.trd_width=80
winsize.trd_left2=10
winsize.trd_top2=10
winsize.trd_width2=80
winsize.trd_height2=30
winsize.trd_zoomed=30
winsize.trd_height =250


cyclelist.0 = 6
cyclelist.1 = "alle"
cyclelist.2 = 'gleich'
cyclelist.3 = 'ungleich'
cyclelist.4 = 'ab'
cyclelist.5 = 'bis'
cyclelist.6 = "ungebucht"


windowtags =   WindowID(1) WindowPosition('TRWP_DEFAULT'),
               WindowDimensions(winsize),
               'TRWI_Flags TRWF_ZIPCENTERTOP|TRWF_NOMINTEXTWIDTH',
               PubScreenName(screen),
               WindowTitle(Titel),
                  BeginMenu('Liste'),
                  MenuItem('A_Alle anzeigen',22),
                  'ItemBarlabel',
                  'ItemBarlabel',
                  MenuItem('S_Speichern',20),
                  'ItemBarlabel',
                  MenuItem('D_Drucken',19),
                  'ItemBarlabel',
                  'ItemBarlabel',
                  MenuItem('E_Zeile editieren',24),
                  'ItemBarlabel',
                   MenuItem('X_Zeile löschen',23),
                  'ItemBarlabel',
                  'ItemBarlabel',
                  MenuItem('Q_Anzeige schließen',21),
                  'HorizGroupA',
                     'Space',
                     'VertGroupA',
                        'Space',
                        NamedSeparatorN("Konto-Auszüge"),
                        'Space',
                        CenteredTextB(Ueberschrift),
                        'Space',
                        ListSS('auswahl',7,auswahl.0-5,auswahl.0-1),
                         'Space',
                         'HorizGroupAC',
                           'LineArray',
                           'BeginLine',
                             'SpaceB',
                             'HorizGroupAC',
                              TextID('_Filterfunktion:',4),
                              'SpaceS',
                              'EndGroup',
                              'HorizGroupS',
                              CycleGadget('cyclelist',0,4),
                              'Space',
                              'EndGroup',
                              'HorizGroupE',
                              StringGadget("",6),
                              'SpaceB',
                              CenteredButtonR("Auswahl",8),
                              'SpaceB',
                              'EndGroup',
                              'EndLine',
                           'EndArray',
                          'EndGroup',
                         'Space',
                        HorizSeparator,
                        'Space',
                         CenteredTextB('Kontostand' Stand),
                         'Space',
                         CenteredText3(Stand1),
                         'Space',
                          CenteredText('Verfügbar:' Stand2),
                         'Space',
                     'EndGroup',
                     'Space',
                  'EndGroup',
               'EndProject'



app = TR_CREATEAPP('TRCA_Name Listview')

IF app ~= '00000000'x THEN DO

   window = TR_OPENPROJECT(app,windowtags)
   dummy = TR_SetAttribute(window,6,'TRAT_Disabled',1)

   IF window ~= '00000000'x THEN DO
      ende = 0

      DO WHILE ende ~= 1
         CALL TR_WAIT(app,'')



         DO WHILE TR_HANDLEMSG(app,'event')

            IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
                IF event.trm_id = 7 THEN
                     Nr = event.trm_data+1

                IF event.trm_id = 4 THEN DO
                    n = TR_GETATTRIBUTE(window,4,'TRAT_Value')+1
                        IF n > 3 | n = 1 THEN
                           dummy = TR_SetAttribute(window,6,'TRAT_Disabled',1)
                        ELSE dummy = TR_SetAttribute(window,6,'TRAT_Disabled',0)
                END
            END

            IF event.trm_class = 'TRMS_ACTION' THEN DO
               SELECT
                  WHEN event.trm_id = 8 THEN CALL Auswahl
                  WHEN event.trm_id = 21 THEN DO
                    CALL schluss
                    ende = 1
                  END
                  WHEN event.trm_id = 22 THEN DO
                      a = STEMCOPY('liststore',0,'auswahl',0)
                      CALL TRX_TR_SETATTRIBUTE(window,7,'TROB_Listview','auswahl')
                      ub = 0
                      dummy = TR_SetAttribute(window,23,'TRAT_Disabled',0)
                      dummy = TR_SetAttribute(window,24,'TRAT_Disabled',0)
                  END
                  WHEN event.trm_id = 20 THEN CALL Speichern S
                  WHEN event.trm_id = 19 THEN CALL Speichern D
                  WHEN event.trm_id = 23 THEN CALL Z_loeschen
                  WHEN event.trm_id = 24 THEN CALL Z_edit

               OTHERWISE
                NOP
               END
             END


 
           IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN DO
               
              CALL schluss
               ende = 1
           END
         END
      END

      CALL TR_CLOSEPROJECT(window)
   END

   CALL TR_DELETEAPP(app)
END

RETURN 0


/* ######## ENDE Anzeige ############*/

Auswahl:

nummer = TR_GETATTRIBUTE(window,4,'TRAT_Value')+1
start = 1

SELECT
  
    WHEN nummer = 2 THEN DO        /* = */
     IF ub = 0 THEN DO
          a = STEMCOPY('auswahl',1,list,1)
          list.0 = auswahl.0
        auswahl.0 = 0
        DO WHILE start ~= (-1)
            Match = TR_GETATTRIBUTE(window,6,'TROB_String')
            start = LSEARCH("(#?" || Match || "#?)",'list',start,'NOCASE','Pattern')
            IF start ~= (-1) THEN DO
                auswahl.0 = auswahl.0 +1
                a = auswahl.0
                auswahl.a = list.start
                start = start +1
            END
        END
     END
     ELSE CALL rtezrequest("Bitte erst wieder 'Alle' wählen!",'Ja doch!',,'rt_pubscrname='screen)
    END

    WHEN nummer = 3 THEN DO        /* ~ */

    IF ub = 0 THEN DO
          a = STEMCOPY('auswahl',1,list,1)
          list.0 = auswahl.0

        auswahl.0 = 0
        DO WHILE start ~= (-1)
            Match = TR_GETATTRIBUTE(window,6,'TROB_String')
            Match = "~(#?" || Match || "#?)"
            start = LSEARCH(Match,'list',start,'NOCASE','Pattern')
            IF start ~= (-1) THEN DO
                auswahl.0 = auswahl.0 +1
                a = auswahl.0
                auswahl.a = list.start
                start = start +1
            END
        END
     END
     ELSE CALL rtezrequest("Bitte erst wieder 'Alle' wählen!",'Ja doch!',,'rt_pubscrname='screen)
   END

    WHEN nummer = 4 THEN DO        /* ab ausgewähltem Eintrag */
       IF ub = 0 THEN DO
             a = STEMCOPY('auswahl',1,list,1)
             list.0 = auswahl.0
            auswahl.0 = 0
            a = RXTR_STEMCOPY('list',Nr,'auswahl',1)
            auswahl.0 = list.0-Nr+1
      END
      ELSE CALL rtezrequest("Bitte erst wieder 'Alle' wählen!",'Ja doch!',,'rt_pubscrname='screen)
    END

    WHEN nummer = 5 THEN DO        /* bis ausgewähltem Eintrag */

         IF ub = 0 THEN DO
             a = STEMCOPY('auswahl',1,list,1)
             list.0 = auswahl.0
            auswahl.0 = 0
            a = RXTR_STEMCOPY('list',1,'auswahl',1,Nr)
        END
        ELSE CALL rtezrequest("Bitte erst wieder 'Alle' wählen!",'Ja doch!',,'rt_pubscrname='screen)



    END


    WHEN nummer = 1 THEN DO         /* alle */
      a = STEMCOPY('liststore',0,'auswahl',0)
      auswahl.0 = liststore.0
      ub = 0
      dummy = TR_SetAttribute(window,23,'TRAT_Disabled',0)
      dummy = TR_SetAttribute(window,24,'TRAT_Disabled',0)

    END

    WHEN nummer = 6 THEN DO  /* ungebuchte */

      IF ~READFILE('HB:ablage/Ausz_ungebucht.'|| Kontoname ,'auswahl') THEN
      CALL rtezrequest('Fehler beim Einlesen "HB:ablage/Ausz_ungebucht.' || Kontoname || '"',
      ,'Ja doch!',"Fehlermeldung Anzeige ",'rt_pubscrname='screen)
       ub = 1
       dummy = TR_SetAttribute(window,23,'TRAT_Disabled',1)
       dummy = TR_SetAttribute(window,24,'TRAT_Disabled',1)
    END


OTHERWISE  NOP
END

CALL TRX_TR_SETATTRIBUTE(window,7,'TROB_Listview','auswahl')

RETURN

/* Anzeige beenden - vorher abspeichern */
schluss:


IF ~WRITEFILE(wfile1,'liststore') THEN DO
  CALL rtezrequest('Fehler bei WRITELIST!!!','Ja doch!',,'rt_pubscrname='screen)
END


a =  "HB:ablage/letztA.priv"
IF Kontoname = "GESCH" THEN a =  "HB:ablage/letztA.gesch"
IF ~Open(FA,a,"W") THEN CALL,
 rtezrequest('da stimmt was beim Speichern des Datums nicht','Ja doch!',,'rt_pubscrname='screen)
ELSE DO
    x = liststore.0
    x = Word(liststore.x,1)
    x = Right(x,2)||"."|| SubStr(x,6,2) ||"."|| Left(x,4)
    a = WriteLn(FA,x)
    a = close(FA)
    ADDRESS command 'delete' file1
END
RETURN    



anfang:
          /*Anfang Anzeige */

DO UNTIL Left(text,6) = "Fkt Bu"
    IF Eof(FA) THEN BREAK
    text = ReadLn(FA)
END

text = ReadLn(FA) /* Zeile " Verwendungszweck" */

DO i = 1 UNTIL Eof(FA)

  text = ReadLn(FA)
  IF Compress(text) = "" THEN ITERATE i
  IF Left(text,6)= "======" THEN LEAVE
  text = text ReadLn(FA)


  dat = SubWord(text,1,1)
  dat = SubStr(dat,7,2)||"-"||SubStr(dat,4,2)||"-"||Left(dat,2)
  Wert = Word(text,3)
  PARSE VAR Wert DM ',' PF

  text = dat " " || Word(text,2) || Copies(" ",7-Length(DM)) || DM || "," || PF,
  " " Right(text,Length(text)+1-WordIndex(text,4))

/*********** bei Btx-ÜWs die Empfänger aus Dateien auslesen
             und statt TAN-Nummer einsetzen      *********/
  IF Left(Word(text,4),15) = 'SB-UEBERWEISUNG' THEN DO
    Tan = Right(Word(text,4),6)
    file2 = "HB:ablage/UeW"

    Muster = 'UeW_gesch._??-#?'
    IF Kontoname = "PRIV" THEN Muster = 'UeW_??-#?'
    IF GETDIR(file2,Muster,'stemvar','FILES','PATH',) THEN DO

        DO i1 = 1 TO stemvar.0
         erg = RXTR_SEARCHPATTERN(stemvar.i1,Tan,1,'L')
         IF erg ~= -1 THEN DO
          erg = erg - 6
          a = RXTR_READLINES(stemvar.i1,erg,1,'Empf.-Name: %26c',stemvar1)
          text = Overlay(stemvar1.1,text,WordIndex(text,4),26," ")
          LEAVE i1
         END
        END
        IF erg = -1 THEN
        CALL rtezrequest('Eine gespeicherte Bestätigung für',
        '0a'x|| 'die Überweisung mit der TAN' Tan,
        '0a'x|| 'wurde nicht gefunden','Ja doch!',,'rt_pubscrname='screen)
    END
  END
/***********Y2k* geht nur bis 2018 !!****/

 IF Left(text,2)~="19" THEN
   IF Left(text,2)~="20" THEN DO
       IF Left(text,2) > 90 THEN text = "19" || text
       ELSE text = "20" || text
    END

  
/*******************************/
  nummer = LSEARCH(text,'liststore')
  IF nummer = -1 THEN DO
    x=x+1
    liststore.x = text
    liststore.0 = x

  END
END i

RETURN


Kontostand:

ab = "HB:ablage/Kontostand.priv"

IF Kontoname = "GESCH" THEN
  ab = "HB:ablage/Kontostand.gesch"

IF ~(READFILE(ab,'ko')) THEN DO
    dummy= BEEP()
    CALL rtezrequest('Fehler bei Einlesen von' ab '!!!',
    '0a'x 'Könnte es sein, daß Sie noch gar keinen Auszug geholt haben?)',
    ,'Ja doch!',,'rt_pubscrname='screen)
    a = -31
    RETURN
END

IF Right(Word(ko.5,3),1) = 'S' THEN
    Stand1 = '-' Translate(Compress(Word(ko.5,3),'.HS'),',','.') Waehrung
ELSE do
  Stand1 = Translate(Compress(Word(ko.5,3),'.HS'),',','.') Waehrung
  IF Length(Stand1) > 10 THEN Stand1 = Left(Stand1,Length(Stand1)-10) || "." || Right(Stand1,10)
END
Stand2 = SubWord(ko.12,3,1) Waehrung

Stand = "vom" || SubStr(Strip(ko.8,'T'),3)

titel = Strip(ko.2)

RETURN


Speichern:

ARG Ziel

titel0 = "Kontoauszüge von" titel Stand

IF Ziel ~= "D" THEN DO     /* Speichern */
    Sfile = rtfilerequest('HB:',,'Bitte Filename angeben')
    IF rtresult = 1 THEN DO
        titel0 = rtgetstring(titel0,'     Bitte geben Sie die Überschrift ein:     ')
        IF Open(FS,Sfile,"W") THEN DO
            IF Length(titel0) < 60 THEN DO
              titel1 = Copies("=",Length(titel0))
              titel0 = Center(titel0,60)
              titel1  = Center(titel1,60)
            END
            ELSE titel1 = Copies("=",Length(titel0))
            a = WriteLn(FS,titel0)
            a = WriteLn(FS,titel1)
            a = WriteLn(FS,"")
            a = WriteLn(FS,Ueberschrift)
            a = WriteLn(FS,Copies("-",Length(Ueberschrift)))
            a = WriteLn(FS,"")
            a = Close(FS)
        END
        ELSE CALL rtezrequest(Sfile "konnte nicht geöffnet werden",
          ,"Alles klar!", "Fehlermeldung Anzeige ",'rt_pubscrname='screen)
        IF ~WRITEFILE(Sfile,'auswahl','A') THEN DO
           CALL rtezrequest('Fehler beim Schreiben der Liste',
           ,'Ja doch!',,'rt_pubscrname='screen)
        END
    END
END
ELSE DO      /* an Drucker */
    Sfile = 'PRT:'
        titel0 = rtgetstring(titel0,'     Bitte geben Sie die Überschrift ein:     ')
        IF Open(FS,Sfile,"W") THEN DO
            IF Length(titel0) < 60 THEN DO
              titel1 = Copies("=",Length(titel0))
              titel0 = Center(titel0,60)
              titel1  = Center(titel1,60)
            END
            ELSE titel1 = Copies("=",Length(titel0))
            a = Writeln(FS,'  ' titel0)
            a = Writeln(FS,'  ' titel1)
            a = Writeln(FS,'  ' "")
            a = Writeln(FS,'  ' Ueberschrift)
            a = Writeln(FS,'  ' Copies("-",Length(Ueberschrift)))
            a = Writeln(FS,'  ' "")

            i1 = 0
            S  = 1
            DO i = 1 TO auswahl.0
                i1 = i1 + 1
                IF i1 = 60 THEN DO
                  S = S + 1
                  a = Writeln(FS,'  ' '0C'x)
                  a = Writeln(FS,'  ' Center('Seite -' S '-',60))
                  a = Writeln(FS,'  ' "")
                  a = Writeln(FS,'  ' Ueberschrift)
                  a = Writeln(FS,'  ' Copies("-",Length(Ueberschrift)))
                  a = Writeln(FS,'  ' "")
                  i1 = 0
                END
                a = writeln(FS,'  ' auswahl.i)
            END
            a = Close(FS)
        END
        ELSE CALL rtezrequest(Sfile "konnte nicht erreicht werden",
          ,"Alles klar!", "Fehlermeldung Anzeige ",'rt_pubscrname='screen)


END

RETURN

/* ausgewählte Zeile löschen */
Z_loeschen:


IF ~rtezrequest('Hey, hast Du Dir das gut',
 '0A'x||'überlegt?!','Ja natürlich|Tschuldige','Zeile löschen','rt_pubscrname='screen)
 THEN RETURN

a = LSEARCH(auswahl.Nr,'liststore',,case)

IF ~RXTR_STEMREMOVE('liststore',a) THEN
    CALL rtezrequest("Die Zeile konnte nicht gelöscht werden (1)",
          ,"Alles klar!", "Fehlermeldung Anzeige ",'rt_pubscrname='screen)

IF ~RXTR_STEMREMOVE('auswahl',Nr) THEN
    CALL rtezrequest("Die Zeile konnte nicht gelöscht werden (2)",
          ,"Alles klar!", "Fehlermeldung Anzeige ",'rt_pubscrname='screen)


CALL TRX_TR_SETATTRIBUTE(window,7,'TROB_Listview','auswahl')


RETURN


/* Zeileneditor */
Z_edit:


a = LSEARCH(auswahl.Nr,'liststore',,case)

auswahl.Nr = rtgetstring(auswahl.Nr,'Bitte Änderung vornehmen','Zeileneditor',,
             ,'rt_pubscrname='screen)

IF rtresult = 0 THEN auswahl.Nr = liststore.a
liststore.a = auswahl.Nr


CALL TRX_TR_SETATTRIBUTE(window,7,'TROB_Listview','auswahl')


RETURN




/* Datum automatisch auf letztes? */

Datum:

Auto_Dat = event.trm_data
set = "DA"
up = Auto_Dat
CALL setup set up

RETURN


/* speichert automatisch setups */

setup:

ARG set up
/* set = LF, HI, DA, AU, GE
   up  = 1 oder 0  (AU 0-3)*/

up = Right(up,1)
IF Exists(setupfile) THEN DO
    a = Open("S",setupfile,"R")
    a1 = ReadCh("S",5)
    a = Close("S")
    IF set = "LF" THEN
        a1 = Overlay(up,a1)
    IF set = "HI" THEN
        a1 = Overlay(up,a1,2)
    IF set = "DA" THEN
        a1 = Overlay(up,a1,3)
    IF set = "AU" THEN
        a1 = Overlay(up,a1,4)
    IF set = "GE" THEN
        a1 = Overlay(up,a1,5)

    a = Open("S",setupfile,"W")
    a = WriteLn("S",a1)
    a = Close("S")
END


RETURN

/*******************************************************************************
** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
*******************************************************************************/

break_c:
failure:
halt:
ioerr:
syntax:

   IF rc = 20 & Strip(SourceLine(sigl)) = "'delete >NIL: RAM:Command.1'" THEN DO
     CALL rtezrequest('Kann RAM:Command.1 nicht löschen'||'0A'x||,
     'Wahrscheinlich läuft FIASCO noch!',
     ,"Alles klar!", "Hinweis",'rt_pubscrname='screen)
     RETURN
   END
   text =  '+++ Fehler' rc 'in Zeile' sigl '0A'x ErrorText(rc),
    '0A'x || SourceLine(sigl)
   CALL rtezrequest(text,"Alles klar!", "Fehlermeldung Homebanking",'rt_pubscrname='screen)


/*******************************
** Schluß, Aus, vorbei ********
*******************************/

bye:

   IF app ~= '00000000'x THEN
      CALL TRX_TR_DELETEAPP(app)

   CALL DELETEIMAGE('SK')

bye1:

   CALL closeport 'HB'

   EXIT(10)
