Basic Univers
Global Path.s, nbimage, comparaison.b, aa, bb, *memoire1, *memoire2, titre.s
Path = Space(255)
GetModuleFileName_(0, @Path, 255)
While Right(Path, 1)<>"\"
Path = Left(Path, Len(Path)- 1)
Wend
CreateDirectory(Path +"clichés")
Global amem, amem2, count2, lim, zero.b
Structure m
adresse1.l
adresse2.l
type.b
EndStructure
Global Dim modif.m(5000)
Global nmodif
Global Dim charge.b(5000)
Declare cliche()
Declare suppression()
Declare sauver()
Declare refresh()
Declare modifications()
Declare details(i)
Global Dim image.s(200)
Global Dim temps.s(200)
nbimage = 0
If ReadFile(0, Path +"breg.cfg")
Repeat
nbimage + 1
image(nbimage)= ReadString(0)
temps(nbimage)= ReadString(0)
If image(nbimage)="": nbimage - 1: EndIf
Until Eof(0) Or nbimage = 199
CloseFile(0)
EndIf
start = 1 : run = 1
Global win
h = OpenProcess_($1F0FFF, 0, GetCurrentProcessId_())
SetPriorityClass_(h, #HIGH_PRIORITY_CLASS)
CloseHandle_(h)
titre.s = "Suivi du registre"
win.l = OpenWindow(0, 0, 0, 530, 380, titre, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If win = 0: End: EndIf
Couleur = GetSysColor_(#COLOR_3DFACE)
CreateGadgetList(win)
CreateImage(2, 167, 60)
LoadFont(0, "Times New Roman", 12, #PB_Font_Italic|#PB_Font_HighQuality)
StartDrawing(ImageOutput(2))
Box(0, 0, 167, 60, Couleur)
FrontColor(RGB($D6, $B5, $29))
DrawingMode(1)
DrawingFont(FontID(0))
DrawText(0, 0, "Suivi registre v 1.0")
DrawText(0, 18, "Pascal Tonnelier")
DrawText(0, 36, "12/2004")
StopDrawing()
FreeFont(0)
ImageGadget(99, 355, 290, 167, 60, ImageID(2))
ImageGadget(100, 355, 30, 167, 250, Image)
ListIconGadget(1, 0, 10, 343, 330, "Clichés registre", 400, #PB_ListIcon_FullRowSelect|#PB_ListIcon_CheckBoxes|#PB_ListIcon_AlwaysShowSelection)
ButtonGadget(2, 10, 350, 100, 20, "Prendre un cliché")
ButtonGadget(3, 120, 350, 120, 20, "Comparer deux clichés")
ButtonGadget(4, 260, 350, 60, 20, "Effacer")
refresh()
run = 1
SetWindowText_(win, @titre)
HideWindow(0, 1)
HideWindow(0, 0)
debut:
Repeat
Event = WaitWindowEvent()
If IsIconic_(win)<>0 And hide = 0
HideWindow(0, 1): hide = 1
EndIf
Select Event
Case #PB_Event_SysTray
HideWindow(0, 0): hide = 0
SetForegroundWindow_(win)
Case #PB_Event_CloseWindow
Select EventWindow()
Case 0
run = 0
Case 10
CloseWindow(10)
FreeMemory(*memoire1)
FreeMemory(*memoire2)
DisableGadget(3, 0)
Default
CloseWindow(EventWindow())
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 11
For i = 1 To nmodif
If GetGadgetItemState(11, i - 1)&#PB_ListIcon_Selected
details(i)
Break
EndIf
Next i
Case 2
For i = 2 To 4: DisableGadget(i, 1): Next i
cliche()
For i = 2 To 4: DisableGadget(i, 0): Next i
Case 4
suppression()
Case 3
n = 0
For i = 1 To nbimage
If GetGadgetItemState(1, i - 1)=#PB_ListIcon_Checked Or GetGadgetItemState(1, i - 1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
n + 1
If n = 1 : aa = i : Else: bb = i: EndIf
EndIf
Next i
If n<>2
MessageRequester("Comparaison de clichés", "Sélectionner exactement deux clichés")
Goto debut
EndIf
DisableGadget(3, 1)
nmodif = 0
If OpenWindow(10, 0, 0, 1000, 415, "Modifications entre le cliché " + Chr(34)+ image(aa)+ Chr(34)+" et le cliché " + Chr(34)+ image(bb)+ Chr(34), #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(10))
ListIconGadget(11, 5, 5, 500, 400, "modifications", 1500)
ListIconGadget(12, 510, 5, 490, 400, "détails (sélectionner une modification)", 1500)
modifications()
EndIf
EndSelect
EndSelect
Until run = 0
End
Procedure cliche()
debutcliche:
nom.s = InputRequester("Cliché de registre", "Choisissez un nom (uniquement des lettres et des chiffres)", "")
If nom = ""
MessageRequester("Cliché registre", "Nom vide = cliché annulé")
ProcedureReturn
EndIf
For i = 1 To nbimage
If nom = image(i)
MessageRequester("cliché de registre", "Nom déjà utilisé")
Goto debutcliche
EndIf
Next i
SetWindowTitle(0, titre +" Cliché en cours...")
UpdateWindow_(WindowID(0))
time.s = Space(255)
date.s = Space(255)
GetTimeFormat_(0, 8, 0, 0, @time, 255)
getdateformat_(0, 1, 0, 0, @date, 255)
date = date +" " + time
DeleteFile("c:\bregistre.reg")
Delay(100)
RunProgram("regedit.exe", "/e c:\bregistre.reg", "", 1)
Delay(50)
If ReadFile(0, "c:\bregistre.reg")
l = Lof(0)
*mem = AllocateMemory(l)
*memo =*mem
If *mem
ReadData(0, *mem, l)
CloseFile(0)
DeleteFile("c:\bregistre.reg")
Else
CloseFile(0)
ProcedureReturn
EndIf
*mem2 = AllocateMemory(l)
*memo2 =*mem2
If *mem And *mem2
lim =*memo + l - 1
amem =*mem
amem2 =*mem2
!XOR Ecx, Ecx
!MOV Eax, [v_amem]
!MOV Ebx, [v_amem2]
!boucle:
!MOV dl, byte[Eax]
!CMP dl, 0
!JLE cas2
!CMP dl, 13
!JE cas3
!CMP dl, 10
!JE cas3
!INC Ecx
!MOV byte[Ebx], dl
!INC Eax
!INC Ebx
!JMP fin
!cas3:
!MOV byte[Ebx], 0
!INC Ebx
!INC Ecx
!repete:
!INC Eax
!MOV dl, byte[Eax]
!CMP Eax, [v_lim]
!JE fin
!CMP dl, 13
!JE repete
!CMP dl, 10
!JE repete
!CMP dl, 0
!JLE repete
!JMP fin
!cas2:
!INC Eax
!fin:
!CMP Eax, [v_lim]
!JLE boucle
!MOV [v_amem2], Ebx
!MOV [v_count2], Ecx
*mem = amem
*mem2 = amem2
count = count2
Goto suite
regulier:
While *mem<*memo + l
a.b = PeekB(*mem)
If a>0
If a<>13 And a<>10
count + 1
PokeB(*mem2, a)
*mem2 + 1
*mem + 1
Else
PokeB(*mem2, 0)
*mem2 + 1
count + 1
Repeat
*mem + 1
Until(PeekB(*mem)<>13 And PeekB(*mem)<>10 And PeekB(*mem)>0) Or *mem =*memo + l - 1
EndIf
Else
*mem + 1
EndIf
Wend
suite:
PokeS(*mem2, "[berliozo]")
If OpenFile(1, Path +"clichés/" + nom +".breg")
*mem2 - count
WriteData(1, *mem2, count + 11)
CloseFile(1)
sauver()
MessageRequester("Cliché de registre", "Cliché effectué")
nbimage + 1
image(nbimage)= nom
temps(nbimage)= date
EndIf
EndIf
EndIf
FreeMemory(*memo)
FreeMemory(*memo2)
sauver()
refresh()
SetWindowTitle(0, titre)
EndProcedure
Procedure suppression()
nbimage2 = 0
Global Dim image2.s(200)
For i = 1 To nbimage
If GetGadgetItemState(1, i - 1)=#PB_ListIcon_Checked Or GetGadgetItemState(1, i - 1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
DeleteFile(Path +"clichés/" + image(i)+".breg")
Else
nbimage2 + 1
image2(nbimage2)= image(i)
EndIf
Next i
nbimage = nbimage2
For i = 1 To nbimage
image(i)= image2(i)
Next i
refresh()
sauver()
EndProcedure
Procedure sauver()
DeleteFile(Path +"breg.cfg")
If OpenFile(0, Path +"breg.cfg")
For i = 1 To nbimage
WriteStringN(0, image(i))
WriteStringN(0, temps(i))
Next i
CloseFile(0)
EndIf
EndProcedure
Procedure refresh()
ClearGadgetItemList(1)
For i = 1 To nbimage
AddGadgetItem(1, - 1, image(i)+" : le " + temps(i))
Next i
EndProcedure
Procedure modifications()
If OpenFile(0, Path +"clichés\" + image(aa)+".breg") And OpenFile(1, Path +"clichés\" + image(bb)+".breg")
l = Lof(0)
*mem = AllocateMemory(l)
*memoire1 =*mem
If *mem = 0
CloseFile(0)
CloseFile(1)
Goto debut
EndIf
ReadData(0, *mem, l)
CloseFile(0)
l2 = Lof(1)
*mem2 = AllocateMemory(l2)
*memoire2 =*mem2
If *mem2 = 0
CloseFile(1)
FreeMemory(*mem)
Goto debut
EndIf
ReadData(1, *mem2, l2)
CloseFile(1)
While PeekS(*mem)<>"[berliozo]" And PeekS(*mem2)<>"[berliozo]"
Select CompareMemoryString(*mem, *mem2, 1)
Case - 1
a.s = PeekS(*mem)
AddGadgetItem(11, - 1, "clé effacée = " + a)
nmodif + 1
modif(nmodif)\adresse1 =*mem
modif(nmodif)\type = 1
Repeat
*mem + Len(a)+ 1
a.s = PeekS(*mem)
Until Left(a, 1)="["
Case 1
a.s = PeekS(*mem2)
AddGadgetItem(11, - 1, "clé créée = " + a)
nmodif + 1
modif(nmodif)\adresse2 =*mem2
modif(nmodif)\type = 2
Repeat
*mem2 + Len(a)+ 1
a.s = PeekS(*mem2)
Until Left(a, 1)="["
Case 0
debut1 =*mem
debut2 =*mem2
a.s = PeekS(*mem)
Repeat
*mem + Len(a)+ 1
a.s = PeekS(*mem)
Until Left(a, 1)="["
a.s = PeekS(*mem2)
Repeat
*mem2 + Len(a)+ 1
a.s = PeekS(*mem2)
Until Left(a, 1)="["
l1 =*mem - debut1: l2 =*mem2 - debut2
If l1<>l2
AddGadgetItem(11, - 1, "clé modifiéé = " + PeekS(debut1))
nmodif + 1
modif(nmodif)\adresse1 = debut1
modif(nmodif)\adresse2 = debut2
modif(nmodif)\type = 3
Else
If CompareMemory(debut1, debut2, l1)= 0
AddGadgetItem(11, - 1, "clé modifiée = " + PeekS(debut1))
nmodif + 1
modif(nmodif)\adresse1 = debut1
modif(nmodif)\adresse2 = debut2
modif(nmodif)\type = 3
EndIf
EndIf
EndSelect
Wend
EndIf
EndProcedure
Procedure details(i)
ClearGadgetItemList(12)
Select modif(i)\type
Case 1
*mem = modif(i)\adresse1
a.s = PeekS(*mem)
AddGadgetItem(12, - 1, "anciennes valeurs de " + a)
AddGadgetItem(12, - 1, "******************************************************************************************************************")
*mem + Len(PeekS(*mem))+ 1
a = PeekS(*mem)
While Left(a, 1)<>"["
AddGadgetItem(12, - 1, ReplaceString(a, "@=", "(par défaut)="))
*mem + Len(a)+ 1
a = PeekS(*mem)
Wend
Case 2
*mem2 = modif(i)\adresse2
a.s = PeekS(*mem2)
AddGadgetItem(12, - 1, "nouvelles valeurs de " + a)
AddGadgetItem(12, - 1, "******************************************************************************************************************")
*mem2 + Len(PeekS(*mem2))+ 1
a = PeekS(*mem2)
While Left(a, 1)<>"["
AddGadgetItem(12, - 1, ReplaceString(a, "@=", "(par défaut)="))
*mem2 + Len(a)+ 1
a = PeekS(*mem2)
Wend
Case 3
*mem = modif(i)\adresse1
a.s = PeekS(*mem)
AddGadgetItem(12, - 1, "anciennes valeurs de " + a)
AddGadgetItem(12, - 1, "******************************************************************************************************************")
*mem + Len(PeekS(*mem))+ 1
a = PeekS(*mem)
While Left(a, 1)<>"["
AddGadgetItem(12, - 1, ReplaceString(a, "@=", "(par défaut)="))
*mem + Len(a)+ 1
a = PeekS(*mem)
Wend
*mem2 = modif(i)\adresse2
a.s = PeekS(*mem2)
AddGadgetItem(12, - 1, "******************************************************************************************************************")
AddGadgetItem(12, - 1, "nouvelles valeurs de " + a)
AddGadgetItem(12, - 1, "******************************************************************************************************************")
*mem2 + Len(PeekS(*mem2))+ 1
a = PeekS(*mem2)
While Left(a, 1)<>"["
count2 + 1
AddGadgetItem(12, - 1, ReplaceString(a, "@=", "(par défaut)="))
*mem2 + Len(a)+ 1
a = PeekS(*mem2)
Wend
AddGadgetItem(12, - 1, "******************************************************************************************************************")
EndSelect
EndProcedure