Enumeration   
    #String_0  
    #String_1  
    #String_2  
    #String_3  
    #String_4  
    #String_5  
    #String_6  
    #Button_0  
    #Text_0  
    #Text_1  
    #Text_2  
    #Text_3  
    #Text_4  
    #Text_5  
    #Text_6  
    #Button_2  
    #icone_actif  
    #icone_arret  
    #image_0  
   EndEnumeration   
  #INTERNET_SERVICE_FTP  =1
 
 #INTERNET_OPEN_TYPE_DIRECT  =1
 
 #FTP_PORT  =21
 
 #FTP_TRANSFER_ASCII  =1
 
 #FTP_TRANSFER_BINARY  =2
Global Nom_Serveur.s,Nom_Utilisateur.s,Mot_De_Passe.s,Nom_Fichier_Local.s,Nom_Fichier_Distant.s,Frequence.s,Nom_Hote.s
Global freq.l , etat_prog.b ,adresse_ip.s , Memoire_adresse_ip.s
 
  Procedure.s    Encrypt(str.s)    
 ; pour le codage du mot de passe ftp dans les prefs  
  DefType.l i, C 
  DefType.s tmp, erg 
  
   
  For    i = 1  
  To       Len   (str) 
    tmp =  
  Mid   (str, i, 1) 
    C =  
  Asc   (tmp) + 15 
     
  If    C > 255 
      C = C - 255 
     
  EndIf    
    erg = erg +  
  Chr   (C) 
   
  Next    
  
     ProcedureReturn    erg 
 
  EndProcedure    
   Procedure.s    Decrypt(str.s) 
  DefType.l i, C 
  DefType.s tmp, erg 
  
   
  For    i = 1  
  To       Len   (str) 
    tmp =  
  Mid   (str, i, 1) 
    C =  
  Asc   (tmp) - 15 
     
  If    C < 0 
      C = C + 255 
     
  EndIf    
    erg = erg +  
  Chr   (C) 
   
  Next    
  
     ProcedureReturn    erg 
 
  EndProcedure    
   Procedure    lecture_preference()
  
   
  If       OpenPreferences   (
  "dyn_ip.pref"   )
    Nom_Hote =  
  ReadPreferenceString   (
  "Nom_Hote"   ,
  "Erreur ! Pas de données ..."   )
    Nom_Serveur =   
  ReadPreferenceString   (
  "Nom_Serveur"   ,
  "Erreur ! Pas de données ..."   )
    Nom_Utilisateur =  
  ReadPreferenceString   (
  "Nom_Utilisateur"   ,
  "Erreur ! Pas de données ..."   )
    tempo.s =  
  ReadPreferenceString   (
  "Mot_De_Passe"   ,
  "Erreur ! Pas de données ..."   )
    Mot_De_Passe =  Decrypt(tempo)
    Nom_Fichier_Local =  
  ReadPreferenceString   (
  "Nom_Fichier_Local"   ,
  "Erreur ! Pas de données ..."   )
    Nom_Fichier_Distant =  
  ReadPreferenceString   (
  "Nom_Fichier_Distant"   ,
  "Erreur ! Pas de données ..."   )
    Frequence =  
  ReadPreferenceString   (
  "Frequence"   ,
  "Erreur ! Pas de données ..."   )
    freq =  
  Val   (Frequence)
     
  If    freq = 0 
      freq = 60 
      Frequence =  
  "60"   
         EndIf   
        ClosePreferences   ()
   
  Else   
       MessageRequester   (
  "  Erreur"   , 
  "Pas de fichier de Configuration : "    +  
  Chr   (34) + 
  " proto_dyn_ip.pref "    +  
  Chr   (34) + 
  ""   ,  
 #MB_OK|#MB_ICONERROR  )
   
  EndIf   
  
  
     SetGadgetText   ( 
 #String_6  ,Nom_Hote)                           
 ; Remplissage des champs de la fenetre  
     SetGadgetText   ( 
 #String_0  ,Nom_Serveur)
   
  SetGadgetText   ( 
 #String_1  ,Nom_Utilisateur)
   
  SetGadgetText   ( 
 #String_2  ,Mot_De_Passe)
   
  SetGadgetText   ( 
 #String_3  ,Nom_Fichier_Local)
   
  SetGadgetText   ( 
 #String_4  ,Nom_Fichier_Distant)
   
  SetGadgetText   ( 
 #String_5  ,Frequence)
  
 
  EndProcedure   
   Procedure    ecriture_preference()
  
  
  
  
  
   
  If       CreatePreferences   (
  "dyn_ip.pref"   )
     
  WritePreferenceString   (
  "Nom_Hote"    ,  
  GetGadgetText   ( 
 #String_6  ))
     
  WritePreferenceString   (
  "Nom_Serveur"    ,  
  GetGadgetText   ( 
 #String_0  ))
     
  WritePreferenceString   (
  "Nom_Utilisateur"    ,  
  GetGadgetText   ( 
 #String_1  ))
    tempo.s = Encrypt( 
  GetGadgetText   ( 
 #String_2  ))    
 ; Encodage du mot de passe  
       WritePreferenceString   (
  "Mot_De_Passe"    , tempo.s )
     
  WritePreferenceString   (
  "Nom_Fichier_Local"    ,  
  GetGadgetText   ( 
 #String_3  ))
     
  WritePreferenceString   (
  "Nom_Fichier_Distant"    ,  
  GetGadgetText   ( 
 #String_4  ))
    entier.l =  
  Val   ( 
  GetGadgetText   ( 
 #String_5  ))      
 ; Convertion du champ frequence en entier !  
       WritePreferenceString   (
  "Frequence"    ,  
  Str   (entier))
   
  EndIf   
  
    
  
   EndProcedure   
   Procedure.s    OpenURL(Url.s, OpenType.b)
  
  isLoop.b=1
  INET_RELOAD.l=$80000000
  hInet.l=0: hURL.l=0: Bytes.l=0
  Buffer.s= 
  Space   (2048 )
  
  hInet =  
  InternetOpen_   (
  "PB@INET"   , OpenType,  
 #Null  ,  
 #Null  , 0)
  hURL =  
  InternetOpenUrl_   (hInet, Url,  
 #Null  , 0, INET_RELOAD, 0)
  
   
  Repeat   
    
       Delay   (1)
     
  InternetReadFile_   (hURL, @Buffer,  
  Len   (Buffer), @Bytes)
     
  If    Bytes = 0
      isLoop=0
     
  Else   
      res.s = res +  
  Left   (Buffer, Bytes)
     
  EndIf   
     Until    isLoop=0
   
  InternetCloseHandle_   (hURL)
   
  InternetCloseHandle_   (hInet)
   
  ProcedureReturn    res
  
  
  
 
  EndProcedure   
   Procedure.s    Recup_Ip()
  
  URL$ = 
  "http://www.whatismyip.com/"              ; Adresse http://www.whatismyip.com/ ou http://www.ipaddressworld.com  
  HTML$ = OpenURL(URL$, 1)                     
 ; Appel de la procedure OpenURL et enregistrement de la page dans HTML$  
  
   ;OpenFile(1,"c:\sauv_page_ip.txt")           ; Utile pour la mise au point du filtre de recherche de l'IP  
   ;WriteString(HTML$)  
   ;CloseFile(1)  
  
  debut =  
  FindString   (HTML$,
  "<TITLE>Your ip is"   ,1) + 17      
 ;  
  fin =  
  FindString   (HTML$,
  "WhatIsMyIP.com</TITLE>"   ,1)       
 ;   Filtre pour trouver l'adresse ip  dans la page html  
  ip$ =  
  Mid   (HTML$,debut,(fin - debut))                     
 ;   Attention filtre  pour http://www.whatismyip.com/  
   ;   different si un autre site ! !  
     ProcedureReturn    ip$
 
  EndProcedure   
   Procedure    Creation_Page_Perso(localfile.s,ip.s)
  
  date$ =  
  FormatDate   (
  "%dd/%mm/%yyyy"   ,  
  Date   ())  
 ; Creation et mise en forme de la chaine date$  
  heure$ =  
  FormatDate   (
  "%hh:%ii:%ss"   ,  
  Date   ())   
 ; Creation et mise en forme de la chaine heure$  
  
  donnees$ = 
  "Adresse IP de "    + Nom_Hote + 
  " est : "    + ip + 
  "      Mise à jour le :   "    + date$ + 
  "     à :   "    + heure$
  
  HTML$= 
  "<html><head><title> Adresse IP </title></head><body><p>"    + donnees$ + 
  "</p></body></html>"   
  
     OpenFile   (1,localfile)
   
  WriteString   (HTML$)
   
  CloseFile   (1)
  
  
 
  EndProcedure   
   Procedure.s    Envoie_Ftp(Proxy.s,ProxyBypass.s,ServerName.s,UserName.s,Password.s,localfile.s,remotefile.s)
  
   
 #INTERNET_SERVICE_FTP  =1
   
 #INTERNET_OPEN_TYPE_DIRECT  =1
   
 #FTP_PORT  =21
   
 #FTP_TRANSFER_ASCII  =1
   
 #FTP_TRANSFER_BINARY  =2
  
  
  hInternet= 
  InternetOpen_   (
  "FTP"   , 
 #INTERNET_OPEN_TYPE_DIRECT  ,Proxy,ProxyBypass,0)
   
  If    hInternet
    hConnect= 
  InternetConnect_   (hInternet,ServerName, 
 #FTP_PORT  ,UserName,Password, 
 #INTERNET_SERVICE_FTP  ,0,0)
     
  If    hConnect
       
  If       FtpPutFile_   (hConnect,localfile,remotefile, 
 #FTP_TRANSFER_ASCII  ,0)
        
 ;MessageRequester("","File has been sent",0)  
        message.s =  
  " Transfert du fichier OK !"   
         Else   
         ;MessageRequester("Error", "Failure while sending file...",0)  
        message.s =  
  " Erreur, Probleme pendand l'envoie du fichier..."   
         EndIf   
       Else   
       ;MessageRequester("Error", "Couldn't get a connection to the server!",0)  
      message.s =  
  " Erreur, Impossible de se connecter au serveur ftp..."   
       EndIf   
       InternetCloseHandle_   (hInternet)
   
  Else   
     ;MessageRequester("Error", "Internet isn't reachable.",0)  
    message.s =   
  " Erreur , Pas de connexion a internet ..."   
     EndIf   
     ProcedureReturn    message
 
  EndProcedure   
   Procedure    mise_a_jour()
  
  adresse_ip = Recup_Ip()
  
  SysTrayIconToolTip(0, 
  "Ip Publique = "    + adresse_ip)
   
  SetWindowTitle   (0, 
  "Actif ! freq = "    +  
  Str   (freq) + 
  " mn"    + 
  " Ip Publique = "    + adresse_ip)
  
   
  If    adresse_ip <> Memoire_adresse_ip 
    Creation_Page_Perso(Nom_Fichier_Local,adresse_ip)
    Envoie_Ftp(
  ""   ,
  ""   ,Nom_Serveur,Nom_Utilisateur,Mot_De_Passe,Nom_Fichier_Local,Nom_Fichier_Distant)
    Memoire_adresse_ip = adresse_ip
   
  EndIf   
  
   EndProcedure   
 ;-------------------------------------------- Début de Programme --------------------------------  
id_icone_actif =  
  LoadImage   ( 
 #icone_actif   ,
  "icone_actif.ico"   )   
 ; Chargement des icones pour le systray  
id_icone_arret =  
  LoadImage   ( 
 #icone_arret  ,
  "icone_arret.ico"   )
 
 ;------------------------------------------  Creation de la fenetre ----------------------------  
   If       OpenWindow   (0, 346, 307, 364, 292, 
 #PB_Window_MinimizeGadget|#PB_Window_SystemMenu   ,
  "Dyn_IP"   ) 
  
   
  AddSysTrayIcon   (0,  
  WindowID   (),id_icone_arret ) 
  SysTrayIconToolTip(0, 
  "Dyn_IP"   ) 
  
   
  If       CreatePopupMenu   (0) 
     
  MenuItem   (1, 
  "Restaurer"   ) 
   
  EndIf    
  
     If       CreateGadgetList   ( 
  WindowID   ())
     
  StringGadget   ( 
 #String_0  , 10, 40, 210, 20, 
  ""   )
     
  StringGadget   ( 
 #String_1  , 10, 70, 210, 20, 
  ""   )
     
  StringGadget   ( 
 #String_2  , 10, 100, 210, 20, 
  ""   , 
 #PB_String_Password  )  
 ;#PB_String_Password  
       StringGadget   ( 
 #String_3  , 10, 130, 210, 20, 
  ""   )
     
  StringGadget   ( 
 #String_4  , 10, 160, 210, 20, 
  ""   )
     
  StringGadget   ( 
 #String_5  , 10, 190, 210, 20, 
  ""   )
     
  StringGadget   ( 
 #String_6  , 10, 10, 210, 20, 
  ""   )
     
  ButtonGadget   ( 
 #Button_0  , 10, 220, 210, 40, 
  "Enregistrer"   )
     
  ButtonGadget   ( 
 #Button_2  , 230, 220, 120, 40, 
  "Démarrer"   )
     
  TextGadget   ( 
 #Text_0  , 240, 40, 130, 20, 
  "Adresse du serveur ftp"   )
     
  TextGadget   ( 
 #Text_1  , 240, 70, 100, 20, 
  "Nom d'utilisateur"   )
     
  TextGadget   ( 
 #Text_2  , 240, 100, 80, 20, 
  "Mot de passe"   )
     
  TextGadget   ( 
 #Text_3  , 240, 130, 120, 20, 
  "Nom du fichier local"   )
     
  TextGadget   ( 
 #Text_4  , 240, 160, 110, 20, 
  "Nom du fichier distant"   )
     
  TextGadget   ( 
 #Text_5  , 240, 190, 110, 20, 
  "freq mise à jour (mn)"   )
     
  TextGadget   ( 
 #Text_6  , 240, 10, 80, 20, 
  "Nom de l'hote"   )
     
  ImageGadget   ( 
 #image_0  ,320,2,32,32,id_icone_arret)
   
  EndIf   
  
     If       CreateMenu   (1 , 
  WindowID   ()) 
     
  MenuTitle   (
  "Menu"   ) 
     
  MenuItem   (2,
  " Quitter"   )
   
  EndIf   
  
  
lecture_preference()   
 ; Remplissage des champs de la fenetre     
  
  
  
 ;- ------------------------------   Boucle de gestion des evenements --------------------------------  
     Repeat                                           
    Event =  
  WaitWindowEvent   () 
    
     
  Select    Event 
       
  Case      #PB_Event_SysTray   
           If       EventType   () =  
 #PB_EventType_RightClick   
             DisplayPopupMenu   (0,  
  WindowID   ()) 
           
  If       IsIconic_   ( 
  WindowID   (0)) 
            
 ;cette ligne est utilisée pour l'effet d'agrandissement   
               ShowWindow_   ( 
  WindowID   (0), 
 #SW_MINIMIZE  ) 
            
 ;Une tempo est nécessaire sinon ça ne fonctionne pas à tous les coups   
               Delay   (250) 
             
  ShowWindow_   ( 
  WindowID   (0), 
 #SW_RESTORE  ) 
           
  EndIf    
           EndIf    
        
         Case      #WM_SIZE   
           If       IsIconic_   ( 
  WindowID   (0)) 
           
  ShowWindow_   ( 
  WindowID   (0), 
 #SW_HIDE  ) 
         
  EndIf    
       
         Case      #PB_EventGadget   
        
           GadgetID    =  
  EventGadgetID   ()
        
         
  If       GadgetID    =  
 #String_0  
           
           ElseIf       GadgetID    =  
 #String_1  
           
           ElseIf       GadgetID    =  
 #String_2  
           
           ElseIf       GadgetID    =  
 #String_3  
           
           ElseIf       GadgetID    =  
 #String_4  
          
           ElseIf       GadgetID    =  
 #Button_0               ; bouton Enregistrer  
          ecriture_preference()
          lecture_preference()
          
         
  ElseIf       GadgetID    =  
 #Button_2              ; Bouton démarrer  
          
             If       GetGadgetText   ( 
 #Button_2  )=  
  "Démarrer"   
               SetGadgetText   ( 
 #Button_2  ,
  "Arrêter"   )
             
  SetWindowTitle   (0, 
  "Dyn_IP  Actif !  freq =  "    +  
  Str   (freq) + 
  " mn"   ) 
             
  ChangeSysTrayIcon   (0,id_icone_actif)
             
  ImageGadget   ( 
 #image_0  ,320,2,32,32,id_icone_actif)
            lecture_preference()
            mise_a_jour()
            StartTimer(0,freq*60000,@mise_a_jour())    
 ; Demarrage du Timer sur la procedure mise_a_jour   
            
             Else   
            EndTimer(0)                                
 ; Arret du Timer  
               SetGadgetText   ( 
 #Button_2  ,
  "Démarrer"   )
             
  SetWindowTitle   (0, 
  "Dyn_IP Arrêté !"   )
             
  ChangeSysTrayIcon   (0,id_icone_arret)
             
  ImageGadget   ( 
 #image_0  ,320,2,32,32,id_icone_arret)
            
           
  EndIf   
         
           EndIf   
       
        
         Case      #PB_EventMenu  
        
        menu_id = 
  EventMenuID   ()
        
         
  If    menu_id = 2
           
  End   
           EndIf   
       
       EndSelect    
   
     Until    Event =  
 #PB_Event_CloseWindow   
   EndIf    
   End