Tiens. Voilà ma version améliorée.
Retour automatique pendant la saisie.
Chargement d'un fichier.
Sauvegarde d'un fichier.
Menu Pop-up sur l'éditeur. (Copier er Coller)
Code : Tout sélectionner
; code par Dobro , modifié par Chris
; sur une base de AR-S
; algorythme de crypage acces sur le random !!
Declare.s ReplaceFirst(String$, StringToFind$, StringToReplace$)
Enumeration
#ARS
#BT_Coder
#BT_Decoder
#Affiche
#Button_3
#Text_4
#Message
#Texte1
#Button_7
#Titre
#Font_Titre
#spinGadget
#BT_Ouvrir
#BT_Sauver
EndEnumeration
Enumeration
#PopUp
EndEnumeration
;}
#CRLF = Chr(13)+Chr(10)
Define.l Event, EventWindow , EventGadget , EventType , EventMenu
;}
Procedure OpenWindow_ARS()
If OpenWindow ( #ARS , 31, 372, 368, 250, "Dobro Crypt" , #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar )
If CreatePopupMenu(#PopUp)
MenuItem(0, "Copier" + Chr(9) + "Ctrl+C")
MenuItem(1, "Coller" + Chr(9) + "Ctrl+V")
EndIf
If CreateGadgetList ( WindowID ( #ARS ))
SpinGadget ( #spinGadget , 309,150,30, 25, 0, 9, #PB_Spin_ReadOnly|#PB_Spin_Numeric )
SetGadgetText ( #spinGadget , "0" )
ButtonGadget ( #BT_Coder , 7, 150, 70, 25, "Coder" )
ButtonGadget ( #BT_Decoder , 82, 150, 70, 25, "Decoder" )
ButtonGadget(#BT_Ouvrir, 157,150,70,25,"Ouvrir")
ButtonGadget(#BT_Sauver, 232,150,70,25,"Sauver")
; EditorGadget(#Affiche, 5, 194, 355, 160, #PB_Editor_ReadOnly)
;SetGadgetText(#Affiche,"")
ButtonGadget ( #Button_3 , 6, 200, 355, 20, "Copier le résultat dans le presse papier" )
TextGadget ( #Text_4 , 7, 178, 95, 15, "Résultat" )
EditorGadget ( #Message , 3, 65, 355, 80)
SetGadgetText ( #Message , "" )
TextGadget ( #Texte1 , 10, 47, 140, 15, "Message à coder / décoder" )
ButtonGadget ( #Button_7 , 344, 150, 15, 40, "?" )
TextGadget ( #Titre , 2, 0, 365, 45, "Dobro Crypt" , #PB_Text_Border|#PB_Text_Center )
; Gadget Fonts
SetGadgetFont ( #Titre , LoadFont ( #Font_Titre , "Arial Black" , 22, 0))
EndIf
DC_Msg = GetDC_(GadgetID(#Message))
SendMessage_(GadgetID(#Message), #EM_SETTARGETDEVICE, DC_Msg, GadgetWidth(#Message)*14)
ReleaseDC_(GadgetID(#Message), DC_Msg)
EndIf
EndProcedure
OpenWindow_ARS()
;{- Event loop
Repeat
Event = WaitWindowEvent ()
Select Event
; ///////////////////
Case #WM_RBUTTONDOWN
x =WindowMouseX(#ARS) : y =WindowMouseY(#ARS)
If x >= GadgetX(#Message) And x <= GadgetX(#Message)+GadgetWidth(#Message)
If y >= GadgetY(#Message) And y <= GadgetY(#Message)+GadgetHeight(#Message)
DisplayPopupMenu(#PopUp, WindowID(#ARS))
EndIf
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case 0 ; Copier
If GetGadgetText(#Message) <> ""
ClearClipboard() : SetClipboardText(GetGadgetText(#Message))
EndIf
Case 1 ; Coller
SetGadgetText(#Message, ""): SetGadgetText(#Message, GetClipboardText())
EndSelect
Case #PB_Event_Gadget
EventGadget = EventGadget ()
EventType = EventType ()
If EventGadget = #spinGadget ; le spin
EndIf
; ************* encodage *****************************************
If EventGadget = #BT_Coder
Ex$ = ".crypt"
ClearClipboard ()
de= GetGadgetState ( #spinGadget )
RandomSeed (de)
phrase$= GetGadgetText ( #Message )
chaine_codee$= ""
For position_caractere=1 To Len (phrase$)
Caractere$= Mid (phrase$,position_caractere,1)
rd= Random (5)+position_caractere
For cc=0 To 254
If Caractere$= Chr (cc)
chaine_codee$+ Str (rd+cc)+ Chr (255)
Break 1
EndIf
Next cc
Next position_caractere
ClearGadgetItemList ( #Message )
SetGadgetText ( #Message ,chaine_codee$+ Str (de))
phrase$=chaine_codee$+ Str (de)
EndIf
; ******************************************* decodage *******************************
If EventGadget = #BT_Decoder
Ex$ = ".txt"
ClearClipboard ()
phrase$= GetGadgetText ( #Message )
de= Val ( Right (phrase$,1)) ; attention ne lit que le dernier caractere !! : D donc une valeur entre 0 et 9
RandomSeed (de)
phrase$= Left (phrase$, Len (phrase$)-1)
For t=1 To Len ( phrase$)
code= Val ( StringField (phrase$,t, Chr (255)))
rd= Random (5)+t
decode=code-rd
If decode>0
phrase$= ReplaceFirst(phrase$, Str (code), Chr (decode))
EndIf
Next t
phrase$= RemoveString (phrase$, Chr (255))
ClearGadgetItemList ( #Message )
SetGadgetText ( #Message ,phrase$)
EndIf
If EventGadget = #BT_Ouvrir
T$ = OpenFileRequester("Ouvrir un fichier","","Fichiers supportés|*.crypt;*.txt|Fichiers cryptés|*.crypt|Fichiers texte|*.txt", 0)
If T$ : Fichier$ = T$ : T$ = "" : EndIf
If Fichier$
If ReadFile(0, Fichier$)
Size = Lof(0)
*Buffer = AllocateMemory(Size +1)
If *Buffer
ReadData(0, *Buffer, Size)
EndIf
CloseFile(0)
SetGadgetText(#Message, PeekS(*Buffer))
FreeMemory(*Buffer)
EndIf
EndIf
ElseIf EventGadget = #BT_Sauver
T$ = SaveFileRequester("Sauver un fichier","","Fichiers supportés|*.crypt;*.txt|Fichiers cryptés|*.crypt|Fichiers texte|*.txt", 0)
If T$ : Fichier$ = T$ : T$ = "" : EndIf
If GetExtensionPart(Fichier$) = ""
Fichier$ + Ex$
EndIf
Debug Fichier$
Contenu$ = GetGadgetText(#Message) : Size = Len(Contenu$)
*Buffer = AllocateMemory(Size)
PokeS(*Buffer, Contenu$)
If CreateFile(0, Fichier$)
WriteData(0, *Buffer, Size)
CloseFile(0)
EndIf
FreeMemory(*Buffer)
ElseIf EventGadget = #Button_3
SetClipboardText (phrase$)
ClearGadgetItemList ( #Message )
SetGadgetText ( #Message ,phrase$)
ElseIf EventGadget = #Button_7
MessageRequester ( "A propos" , "Dobro Crypt v1" )
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow ()
If EventWindow = #ARS
CloseWindow ( #ARS )
Break
EndIf
EndSelect
ForEver
;
;}
Procedure$ ReplaceFirst(String$, StringToFind$, StringToReplace$)
; de Dri
index = FindString(String$, StringToFind$, 1)
length = Len (String$) - Len (StringToFind$) - index
If index
String$ = Left (String$, index-1) + StringToReplace$ + Right (String$, length+1)
EndIf
ProcedureReturn String$
EndProcedure