/*
'       $VER: Tanlist 4.013 (09 Apr 2000)  **
'       © 1998/2000 Gerald Froehlich
'
' PROGRAMNAME:
'     Tanlist
'
' FUNCTION:
'     Skript für Multiterm zum Freischalten einer
'   Folge-Tanliste
'  nur von HB aus zu benutzen!
'
' $HISTORY:
'
' 09 Apr 2000 : 004.013 :  letzte -> etzte
' 10 Jan 1999 : 004.012 :  neuer schlüssel
' 29 Nov 1998 : 004.011 :  unverändert
' 29 Oct 1998 : 003.711 :  Req verändert
' 29 Jun 1998 : 003.710 :  unverändert
' 22 Jun 1998 : 003.712 :  1. vollständige VERSION
' 22 Jun 1998 : 003.711 :  - no comment -
'
'   ************************************************************
*/

TRACE Background
ADDRESS command 'sys:rexxc/te'

DPfad  = "HB:Parameter/"
Kasse     = ""
Ktnr      = ""
GKtnr     = ""
Pin       = ""
Prot      = ""
okay      = "19"


MT_Port = GetClip('MT_Port')
screen = GetClip('screenName')
Newtan = GetClip('NT')
Listzahl = GetClip('TNR')
a = SetClip('TNR')
a = SetClip('NT')


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

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

OPTIONS RESULTS
SIGNAL on error
SIGNAL ON break_c
SIGNAL ON break_d
SIGNAL ON break_e
SIGNAL ON break_f
SIGNAL ON failure
SIGNAL ON halt
SIGNAL ON ioerr
SIGNAL ON syntax


TRACE Background

IF ~Open("k","RAM:Key.HB4","R") THEN DO
    CALL rtezrequest('Die Demo-VERSION wurde noch nicht registriert!',
    '0a'x '     (keine TAN-Freischaltung)','Ja doch!',,'rt_pubscrname=Workbench')
    EXIT
END
ELSE 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)
   cvS   = BitXor(B2C(Reverse(y)),co)
   cvUNR = BitXor(B2C(Reverse(y)),co)/1000
   cvUNR = cvUNR-se
   cvUNR = Trunc(cvUNR-B2C(Vers))
   cvU = BitXor(B2C(Reverse(Left(Be,Length(Be)-3))),co)
   IF Word(cvU,Words(cvU))=cvUNR & az = az1 THEN NOP
   ELSE DO
     CALL rtezrequest('Vielleicht probierst Du es doch mal mit einem' '0a'x,
     'legalem Key?','Ja doch!',,'rt_pubscrname=Workbench')
     EXIT
   END
END

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

/*##########################
**** Werte einlesen ********
##########################*/

CALL stop

Prot      = DPfad || "homebank.config"            /* Configdatei auslesen */
IF ~(Open(A1,Prot,"r")) THEN DO
  CALL rtezrequest('Config-Datei nicht zu öffnen',
  ,'Ja doch!',,'rt_pubscrname='screen)
  EXIT 10
END

a = Seek(A1,125,'B')
Kasse = Strip(ReadLn(A1))

a = Seek(A1,166,'B')
Ktnr = Strip(ReadLn(A1))

a = Seek(A1,207,'B')
Pin = Left(ReadLn(A1),5)
a = Close(A1)
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('Heh!','Ja doch!',,'rt_pubscrname='screen)
         CALL Ende
        END
        a = Close("a1")
IF ~(Open(A1,"HB:parameter/letzte_TAN","r")) THEN DO    /* letzte TAN aus Datei abfragen */
  CALL rtezrequest('letzte TAN-Datei nicht zu öffnen',
  ,'Ja doch!',,'rt_pubscrname='screen)
  EXIT 10
END
Ltan = ReadLn(A1)
a = Close(A1)
Ltan = Left(Ltan,29)


 /*##########################
****** Bankaufruf **********
##########################*/

CALL stop

ADDRESS VALUE MT_Port

SIGNAL off error
checkonline
IF rc ~= 0 THEN DO
    CALL rtezrequest('MT ist nicht online',
  ,'Ja doch!','Gebühren','rt_pubscrname='screen)
  ADDRESS "HB" BANK_END
  EXIT
END

checkER
IF rc = 0 THEN DO
    CALL rtezrequest('Sie befinden sich noch in einem ER',
  ,'Ja doch!','Gebühren','rt_pubscrname='screen)
  ADDRESS "HB" BANK_END
  EXIT
END

SIGNAL on error

callpage Kasse

TRACE Background

 IF ~Open("k","RAM:Key.HB4","R") THEN DO
    IF ~Open("k","HB:Key.HB4","R") THEN DO
        CALL rtezrequest('Die Demo-VERSION wurde noch nicht registriert!',
        '0a'x 'Alles klar?!','Ja doch!',,'rt_pubscrname='screen)
        ccc=1
    END
    ELSE DO
        ADDRESS command 'copy HB:Key.HB4 RAM:Key.HB4'
        ccc = 5
    END
 END
 ELSE ccc = 5
 IF ccc = 5 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)
   tzS   = BitXor(B2C(Reverse(y)),co)
   tzUNR = BitXor(B2C(Reverse(y)),co)/1000
   tzUNR = tzUNR-se
   tzUNR = Trunc(tzUNR-B2C(Vers))
   tzU = BitXor(B2C(Reverse(Left(Be,Length(Be)-3))),co)
   IF Word(tzU,Words(tzU))~=tzUNR THEN DO
     CALL rtezrequest('Vielleicht probierst Du es doch mal mit einem' '0a'x,
     'legalem Key?','Ja doch!',,'rt_pubscrname=Workbench')
     CALL SCHLUSS
   END
   ELSE ccc = 10
 END

split 3
locate 3 2
mplprint " Aufruf der Sparkasse    "
CALL cuwait
split 0

send Ktnr
 CALL cuwait
send Pin
 CALL cuwait
send okay

CALL cuwait

ADDRESS "HB" ER

SIGNAL off error
  existstring Ltan
  IF rc ~=  0 THEN DO

     existstring "Fehler in unserem System"
     IF rc = 0 THEN DO
       CALL rtezrequest('Leider momentan kein Zugang zur Sparkasse möglich',
       ,'Ja doch!','HB','rt_pubscrname='screen)
       SIGNAL on error
       CALL SCHLUSS
     END

     /* jetzt Abfrage nach letzter TAN */
     CALL rtezrequest('Da stimmt was mit den verbrauchten TANs nicht!!',
     ,'Ja doch!',,'rt_pubscrname='screen)
     CALL SCHLUSS
 END
SIGNAL on error
split 4
locate 3 2
mplprint "Letzte verbrauchte TAN ist OKAY !"

send 7
CALL cuwait
send 4

/* alte TAN */

   Prot = "HB:Parameter/Tan.lst"
   IF ~(Open(A2,Prot,"r")) THEN DO
    CALL rtezrequest('TAN-Liste nicht zu öffnen',
    ,'Ja doch!',,'rt_pubscrname='screen)
    EXIT 10
   END
   a = Seek(A2,0,'B')
   Tan = ReadLn(A2)
   a = Close(A2)

CALL cuwait
send Tan
CALL cuwait
send Newtan
CALL cuwait
send Listzahl


IF Length(Listzahl) < 10 THEN
    sendter
CALL cuwait

x =  rtezrequest('Bitte prüfen Sie alle Zahlen nochmal nach!',
    ,'Alles okay!|Stop',,'rt_pubscrname='screen)

IF x = 0 THEN DO
    sendini
    send '99'
    sendter
    CALL SCHLUSS
END

sendter
CALL cuwait


send 1
CALL cuwait
send 9
CALL cuwait

/***** verbrauchte TAN speichern *******/
a = Open('A2',"HB:Parameter/letzte_TAN","w")
a = WriteLn('A2' ,"etzte verbrauchte TAN " || Newtan || ".          ")
a = Close('A2')


filename = Prot        /* alte TANS löschen */
a = Open('A2',Prot,'W')
a = WriteLn('A2','Neue TANs eingeben und diese Zeile danach löschen!!')
a = Close('A2')


CALL rtezrequest(' Bitte nicht vergessen, die neuen TANs' '0a'x,
 'im TAN-Editor einzugeben!' '0a'x '0a'x 'Die alten TANs wurden automatisch gelöscht.',
 '0a'x 'Die im Texteditor erscheinende Text-Zeile',
 '0a'x 'müssen Sie aber nach der' '0a'x 'TAN-Eingabe wieder löschen!',
 '0a'x '(Im Kontroll-Modus diese Zeile auswählen',
 '0a'x 'und auf "TAN löschen" klicken!',
 '0a'x  'Aber bitte NICHT als letzte TAN speichern!!)',
 ,'Ja doch!',,'rt_pubscrname='screen)


SCHLUSS:

locate 3 2
mplprint " Das Skript endet hier ...                "
locate 3 3
mplprint " Die Verbindung wird beendet!             "
a = delay(400)
split 0
ADDRESS 'HB' TANLIST_END
EXIT

/*##################################
**** ENDE des Ablaufs **************
##################################*/

/********* Auf Cursor warten **********/
cuwait:
CALL Stop
SIGNAL off error
a = delay(30)
checkcuron
DO WHILE rc ~= 0
 CALL stop
 a = delay(30)
 checkcuron
END
SIGNAL on error
RETURN

/*########################################
********** BREAK-Message ? **************
#######################################*/

STOP:

packet = GetPkt("HB_REXX")
      IF packet ~= "0000 0000"x THEN DO
        pack = GetArg(packet)
        CALL Reply(packet,0)
        IF pack = "STOP" THEN DO
          CALL HALT
        END
      END
RETURN



/*###################################
*** Debugging-Fehlerroutinen *******
###################################*/
syntax:
text =  'Syntax-Fehler' rc 'in Zeile' sigl '0A'x ErrorText(rc),
    '0A'x || SourceLine(sigl)
   CALL rtezrequest(text,"Alles klar!", "Fehlermeldung Tanlist",'rt_pubscrname='screen)
  EXIT 10

failure:
ioerr:
ERROR:
text =  'Fehler' rc 'in Zeile' sigl '0A'x ErrorText(rc),
    '0A'x || SourceLine(sigl)
   CALL rtezrequest(text,"Alles klar!", "Fehlermeldung Tanlist",'rt_pubscrname='screen)
  EXIT 10
halT:
break_c:
break_d:
break_e:
break_f:
 text =  'User-Abbruch durch Halt!' || '0A'x || 'Wirklich abbrechen ?'
 ab = rtezrequest(text,"_Mach Schluss|_Neeiiin", "Tanlist",'rt_pubscrname='screen)
 IF ab = 1 THEN DO
   ADDRESS "HB" END
   EXIT
 END
 ELSE RETURN
