/*
**  $VER: HomeBank 3.710 (29.Jun 98)
**  für Bankinstitute, die ans Rechenzentrum DVG Hannover angeschlossen sind
**        © 1996/98 Gerald Froehlich
**
**  PROGRAMNAME:
**      HomeBank -  Homebanking (mit GUI)
**
**  FUNCTION:
**          Haupt-Programm
**
**  $HISTORY:
**
**  29 Jun 1998 : 003.710 :  Bug bei unreg und Auszüge holen gefixt
**  26 Jun 1998 : 003.705 :  Zeilenedit eingefügt
**  22 Jun 1998 : 003.704 :  Verify gefixt
**  18 Jun 1998 : 003.703 :  Freischalten
**  18 Jun 1998 : 003.702 :  Es liegen keine Aufträge vor
**  07 May 1998 : 003.701 :  in HB Probs mit O_Auszuege gefixt
**  28 Apr 1998 : 003.700 :  Anzeige - Zeile löschen gefixt
**  17 Apr 1998 : 003.609 :  Z-Löschen disable bei ungebucht
**  10 Apr 1998 : 003.608 :  Fehler bei auszüge gefixt
**  13 Mar 1998 : 003.607 :  Auszugszeile löschen
**  10 Mar 1998 : 003.606 :  ENV-Files ?_Auszuege in Parameter-Verz.
**  09 Mar 1998 : 003.605 :  Ausz. & Geb mit ins Setup
**  09 Mar 1998 : 003.604 :  Datumsautomatik bei Online aus
**  22 Jan 1998 : 003.603 :  Demo in Statuszeile angezeigt
**  22 Jan 1998 : 003.602 :  TAN-Meldung für DEMO
**   26 Mar 1996 : 0.01 : initial release
*/


Grafik        = "HB:SK.ilbm"

Hilfe = 1       
Flag_Logoff = 1
Auto_Dat = 0

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

Versi     = SubStr(SourceLine(2),20,3)
Release  = SubStr(SourceLine(2),23,2)
vom      = SubStr(SourceLine(2),27,11)
Longname = "Homebanking für MultiTerm-KIT"
Info     =  "Sparkassen-Homebanking (für Banken der DVG Hannover)"

OPTIONS RESULTS
TRACE Background
Flag_Fiasco     = 0
Flag_Gebuehren  = 0
Flag_P_Auszuege = 0
Flag_O_Auszuege = 0
Flag_Bank       = 0
warnung         = 0
events          = 0
xyz             = 0
       text.1 = ""
       text.2 = ""
       text.3 = ""
       text.4 = ""
       text.5 = ""
       status = "Beim Login wird erledigt:"
       text.0 = "  TAN-Anzahl: 0 (DEMO-VERSION)   "
       
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 bye
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"
/*
**  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

    Flag_Gebuehren = SubStr(a1,5,1)
END

CALL TestAktuell

/*
** Grafik laden
*/

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',
                  'Space',
                  BoopsiImageD('SK',IMAGEWIDTH('SK'),IMAGEHEIGHT('SK')) 'TRAT_ID 20',
                  'SpaceB HorizSeparator SpaceB HorizGroup SpaceB SpaceB',
                  'GroupBox VertGroupAC Space',
                  'HorizGroupC',
                   CenteredTextID('_BTX-Gebühren',6),
                  'Space' CheckBox(6),
                  QuickHelp("Speichern der T-Online-Gebühren"),
                  'SpaceB EndGroup Space EndGroup SpaceB SpaceB EndGroup',
                  'SpaceB',
                  NamedFrameBox('Konto-Verwaltung') 'VertGroupAC' 'Space',
                  'HorizGroupEAC Space',
                  Button('_privat',12),
                  QuickHelp("private Kontoauszüge ansehen, bestellen oder Stand ansehen"),
                  'Space',
                  Button('_geschäftl.',13),
                  QuickHelp("Geschäftsauszüge ansehen, bestellen oder Stand ansehen"),
                  'Space' 'EndGroup',
                  'Space EndGroup',
                  'SpaceB',
                  NamedFrameBox('Überweisungen schreiben') 'VertGroupAC' 'SpaceB',
                  'HorizGroup SpaceB SpaceB',
                  Button('  _FIASCO aufrufen  ',14),
                  QuickHelp("DatenBank FIASCO wird gestartet"),
                  'SpaceB SpaceB EndGroup',
                  'SpaceB  EndGroup',
                  'SpaceB',
                  'Space EndGroup',
                  'Space VertSeparator 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 SpaceB SpaceB',
                  'GroupBox VertGroupAC SpaceS',
                  'HorizGroupC',
                   CenteredTextID('_Auto-LogOff',15),
                  'Space' CheckBox(15),
                  QuickHelp("Nach Ablauf der Skripte bleibt MT online"),
                  'Space EndGroup SpaceS EndGroup SpaceB SpaceB',
                  'SpaceB SpaceB SpaceB EndGroup',
                  'SpaceB HorizGroupEAC Space',
                  'GroupBox ObjectBackfillFB VertGroupAC SpaceS HorizGroupC',
                  'SpaceS' Button('MT-Log_in',16),
                 QuickHelp("Aufruf MultiTerm und Abarbeiten der Aufträge"),
                  'SpaceB',
                  Button('MT-Log_off',17),
                  QuickHelp("Beenden von MultiTerm & TAN-Liste aufräumen"),
                   'SpaceS EndGroup SpaceS EndGroup',
                   'Space' 'EndGroup',
               'Space EndGroup SpaceB SpaceB',
                'HorizGroup SpaceB SpaceB SpaceB SpaceB',
                Button('Ablage _lesen',18),
                QuickHelp("Aufruf des Textreaders"),
                'SpaceB SpaceB SpaceB SpaceB EndGroup',
               'SpaceB Space',
               NamedSeparatorN('Statuszeile'),
                'SpaceS',
               'HorizGroup SpaceS',
               'GroupBox ObjectBackfillFB',
               'VertGroup Space',
               TextID(text.0,19) 'Space EndGroup',
               'EndGroup',
               'Space EndGroup Space 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)

   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 DO
         dummy = TR_SetAttribute(window,15,'TRAT_Value',1)
         dummy = TR_SetAttribute(window,15,'TRDO_QuickHelpString',"Nach Ablauf der Skripte wird MT beendet")
     END
    IF Auto_Dat = 1 THEN
        dummy = TR_SetAttribute(window,51,'TRMN_Flags','TRMF_CHECKED')

    IF Flag_Gebuehren = 1 THEN
         dummy = TR_SetAttribute(window,6,'TRAT_Value',1)

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


     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
           
         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 = 18 THEN
                      CALL Ablage_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 = 6 THEN DO
                      Flag_Gebuehren = event.trm_data
                      CALL setup GE Flag_Gebuehren
                    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
             packet = GetPkt("HB")
             IF packet ~= "0000 0000"x THEN DO
                 IF GetArg(packet) = "OK" THEN DO
                   CALL TestAktuell
                   CALL StatusAnzeige
                   CALL Reply(packet,0)
                 END
                 ELSE DO
                    CALL rtezrequest('Falsches SIGNAL von FIASCO','Ja doch!',,'rt_pubscrname='screen)
                    CALL Reply(packet,10)
                 END
             END
             
             IF ~(Show('p','FIASCO')) & Flag_Fiasco = 1 THEN DO
               Flag_Fiasco = 0
               packet = GetPkt("HB")
               IF packet ~= "0000 0000"x THEN DO
                   CALL TestAktuell
                   CALL StatusAnzeige
                   CALL Reply(packet,0)
               END

                 dummy = TR_SetAttribute(window,5,'TRAT_Disabled',0)
             END
         END
      END


      CALL Ausloggen
      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 'registrieren lassen?  ;)','Ja doch!',,'rt_pubscrname='screen)


ADDRESS command
'delete >NIL: RAM:Command.1'
'delete >NIL: ram:Key.HB'
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")

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)
        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
  /* Gebühren speichern */
   IF Flag_Gebuehren THEN DO
        CALL Message GEB
        ADDRESS command run "HB:Skript/Gebuehren"
        pos = "6 25 12 13 51"
        x = 1
        CALL dis
        pos = 3
        CALL WaitForREXX
        Flag_Gebuehren = 0
        dummy = TR_SetAttribute(window,6,'TRAT_Value',0)
        CALL setup GE 0
    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 6 15 25 12 13 51"
        x = 1
        CALL dis
        pos = 9
        CALL WaitForREXX
        a = SetClip('Frei','')
        pos = "6 12 13 14 15 51"
        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 6 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"

  Flag_P_Auszuege = 0
  Flag_O_Auszuege = 0
  CALL Nein
  dummy = TR_SetAttribute(window,12,'TRDO_QuickHelpString',,
  "private Kontoauszüge ansehen, bestellen oder Stand ansehen")
  dummy = TR_SetAttribute(window,13,'TRDO_QuickHelpString',,
  "Geschäftsauszüge ansehen, bestellen oder Stand ansehen")
  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('priv.Uew stimmt nicht mehr!',
         '0A'x||'priv.Uew anpassen?','Ändern|Ne, laß das!','Privatkonto','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 priv.Uew')
       END
     END
  END

IF GETDIR('HB:senden/','GKtoUeberwsg#?','stemvar','FILES','N') THEN DO
     IF stemvar.0 ~= O2 THEN DO
         ab = rtezrequest('gesch.Uew stimmt nicht mehr!',
         '0A'x||'gesch.Uew anpassen?','Ändern|Ne, laß das!','Geschäftskonto','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 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 || " private Überweisung(en)"
      text.xy = Centre(text.xy,34)
      END

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

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

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

    if Flag_Gebuehren then do
      xy = xy +1
      text.xy = "T-ONLINE-Gebühren speichern"
      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 = "6 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 (DEMO-VERSION)   "
     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('nur noch 1 Eintrag in der  TAN-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
   dummy = TR_SetAttribute(window,13,'TRAT_Disabled',1)
ELSE dummy = TR_SetAttribute(window,13,'TRAT_Disabled',0)
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)
      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 = 3 THEN   /* T-Online - Gebühren */
            CALL Message GEB

            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
                    ADDRESS "HB_REXX" STOP

                  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 = 6 & pos < 3 THEN Flag_Gebuehren = event.trm_data

             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

/******** T-Online Gebühren ********

Gebuehren:
IF Flag_Gebuehren = 1 THEN DO
      Flag_Gebuehren = 0
    end
    ELSE DO
      Flag_Gebuehren = 1
    end
CALL TestAktuell
CALL setup GE Flag_Gebuehren
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,'Geschäftskonto','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")
       dummy = TR_SetAttribute(window,13,'TRDO_QuickHelpString',,
       "Geschäftsauszüge ansehen, bestellen oder Stand ansehen")
    CALL setup AU FLAG_P_Auszuege
    END
    ELSE DO
      dummy = TR_SetAttribute(window,13,'TRDO_QuickHelpString',,
      "Auszüge oder Stand ansehen oder Bestellung wieder aus")
      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")
            dummy = TR_SetAttribute(window,13,'TRDO_QuickHelpString',
            ,"Geschäftsauszüge ansehen, bestellen oder Stand ansehen")
            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,'Privatkonto','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")
      dummy = TR_SetAttribute(window,12,'TRDO_QuickHelpString',,
      "private Kontoauszüge ansehen, bestellen oder Stand ansehen")
      IF FLAG_O_Auszuege THEN CALL setup AU 3
      ELSE CALL setup AU 0
    END
    ELSE DO
      dummy = TR_SetAttribute(window,12,'TRDO_QuickHelpString',,
      "Auszüge oder Stand ansehen oder Bestellung wieder aus")
      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")
            dummy = TR_SetAttribute(window,12,'TRDO_QuickHelpString',,
            "private Kontoauszüge ansehen, bestellen oder Stand ansehen")
            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 "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 = "6 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/98 Gerald Fröhlich "
IF xyz = 200 THEN
  text = text '0A0A'x ' Registriert für' SubWord(ControlU,1,Words(ControlU)-1) '0A'x,
   ' Seriennummer:' ControlS
ELSE text = text '0A0A'x 'unregistrierte VERSION (ohne TAN-Verwaltung)'
CALL rtezrequest(text,"Alles klar!", "Über...",'rt_pubscrname='screen)
RETURN

Nein:
/*
ADDRESS command "copy " ParameterPfad || "Auszuege_nein HB:Parameter/O_Auszuege NOPRO"
address command "copy " ParameterPfad || "Auszuege_nein HB:Parameter/P_Auszuege NOPRO"
*/
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)
               dummy = TR_SetAttribute(window,6,'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
               Flag_Gebuehren = 0
               dummy = TR_SetAttribute(window,15,'TRAT_Value',0)
               dummy = TR_SetAttribute(window,15,'TRAT_Disabled',1)
               dummy = TR_SetAttribute(window,6,'TRAT_Value',0)
               dummy = TR_SetAttribute(window,6,'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,15,'TRDO_QuickHelpString',"Nach Ablauf der Skripte bleibt MT online")
               dummy = TR_SetAttribute(window,25,'TRAT_Disabled',0)
               LF = 0
        END
        IF Flag_Logoff THEN DO
               dummy = TR_SetAttribute(window,15,'TRDO_QuickHelpString',"Nach Ablauf der Skripte wird MT beendet")
               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 ab = "HB:ablage/Kontostand.gesch"
IF ab = "P" THEN ab = "HB:ablage/Kontostand.priv"

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 'DM' '0A'x '0A'x '0A'x,
        ||SubWord(ko.12,1,2) || ": " SubWord(ko.12,3,1) 'DM'

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 = "GEB" THEN   text = "Gebühren speichern"
    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:

filename = "HB:Parameter/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)

           OTHERWISE NOP
            end
        end
    a = Close(FP)

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

 /* user */
 IF ~Open("k","RAM:Key.HB","R") THEN DO
    IF ~Open("k","HB:Key.HB","R") THEN DO
        CALL rtezrequest('Die Demo-VERSION wurde noch nicht registriert!',
        '0a'x '     (keine TAN-Verwaltung)','Ja doch!',,'rt_pubscrname=Workbench')
    END
    ELSE DO
        ADDRESS command 'copy HB:Key.HB RAM:Key.HB'
        xyz = 100
    END
 END
 ELSE xyz = 100
 IF xyz = 100 THEN DO
     j = ReadLn('k')
  PARSE VAR j "HB©Key"."0bzo" seST "jk010" y "NMQ" co "0b1" se "101" Be "111öß" Vers "\" seL
     j = Close("k")

   se = SubStr(se,seST,seL)
   ControlS   = BitXor(B2C(Reverse(y)),co)
   ControlUNR = BitXor(B2C(Reverse(y)),co)/1000
   ControlUNR = ControlUNR-se
   ControlUNR = Trunc(ControlUNR-B2C(Vers))
   ControlU = BitXor(B2C(Reverse(Be)),co)
   IF Word(ControlU,Words(ControlU))~=ControlUNR THEN DO
     CALL rtezrequest('Vielleicht probierst Du es doch mal mit einem' '0a'x,
     'legalem Key?','Ja doch!',,'rt_pubscrname=Workbench')
     CALL bye
   END
   ELSE xyz = 200
 END
RETURN "|"
END
RETURN filename


Auszuege:

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


PROCEDURE

ARG Kontoname


 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"

END
ELSE DO
    File1 = "HB:ablage/Kontoauszuege.gesch"
    Wfile1 = "HB:ablage/Auszug.gesch"
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       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)
    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,4,2) ||".19"|| Left(x,2)
    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(Tan 'nicht gefunden','Ja doch!',,'rt_pubscrname='screen)
    END
  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'),',','.') "DM"
ELSE do
  Stand1 = Translate(Compress(Word(ko.5,3),'.HS'),',','.') "DM"
  IF Length(Stand1) > 9 THEN Stand1 = Left(Stand1,Length(Stand1)-9) || "." || Right(Stand1,9)
END
Stand2 = SubWord(ko.12,3,1) 'DM'

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')
   CALL closeport 'HB'

   EXIT(10)
