Voila j'ai trouvé un super code de ASZID v3.94 pour un packer de repertoire sur le forum anglais :
Code : Tout sélectionner
; Aszid's Packer v 0.9
;
;- Constants
;
#Main = 0
#Status = 0
#Pack = 1
#Quit = 2
#UnPack = 3
#Progressbar = 4
#Packfn = 5
#Gadget_6 = 6
#Pfname = 7
#gadget_8 = 8
#Comp = 9
;- Arrays
;
Dim Dirlist$(10000)
Dim Filelist$(10000)
Dim Filecnt(10000)
;- Global Variables
;
Global curfile$
Global prog.f
Global Filelist$
Global Dirlist$
Global FileCnt
Global Stepnum
Global filenum
Global dirnum
Global fsz.f
Global comp
Global runone
Global rootlen
Procedure Open_Main()
If OpenWindow(#Main, 216, 0, 270, 225, #PB_Window_TitleBar , "Packer")
If CreateGadgetList(WindowID())
ListViewGadget(#Status, 10, 10, 230, 110)
ButtonGadget(#Pack, 10, 150, 70, 20, "Pack")
ButtonGadget(#Quit, 180, 150, 60, 20, "Quit")
ButtonGadget(#UnPack, 90, 150, 80, 20, "UnPack")
ProgressBarGadget(#Progressbar, 10, 125, 230, 15, 0, 100, #PB_ProgressBar_Smooth)
StringGadget(#Packfn, 100, 175, 140, 20, "")
TextGadget(#Gadget_6, 10, 175, 85, 15, "Pack Filename:")
StringGadget(#Pfname, 100, 200, 140, 20, "")
TextGadget(#gadget_8, 10, 200, 80, 15, "Pack Folder:")
TrackBarGadget(#Comp, 245, 10, 20, 210, 0, 9, #PB_TrackBar_Ticks | #PB_TrackBar_Vertical)
EndIf
EndIf
EndProcedure
Procedure AddStep(StepText$)
AddGadgetItem(#Status, -1, StepText$)
SetGadgetState(#Status, Stepnum)
Stepnum = Stepnum + 1
EndProcedure
Procedure GetList(root$, Start)
If runone = 0
filenum = 0
dirnum = 0
rootlen = Len(root$)
runone = 1
EndIf
If ExamineDirectory(Start, root$, "")
Repeat
Type = NextDirectoryEntry()
If Type = 2
If DirectoryEntryName() <> "." And DirectoryEntryName() <> ".."
dirnum = dirnum + 1
If root$ = ""
Dirlist$(dirnum) = DirectoryEntryName() + "\"
GetList(Dirlist$(dirnum), Start+1)
Else
Dirlist$(dirnum) = root$ + DirectoryEntryName() + "\"
GetList(Dirlist$(dirnum), Start+1)
EndIf
UseDirectory(Start)
EndIf
Else
If Type = 1
filecnt(Start) = filecnt(Start) + 1
filenum = filenum + 1
Filelist$(filenum) = root$ + DirectoryEntryName()
EndIf
EndIf
Until Type = 0
EndIf
EndProcedure
Procedure stbar(spos, dpos)
prog = spos*100/fsz
SetGadgetState(#Progressbar, prog)
EventID=WindowEvent()
If EventID = #PB_EventGadget
Select EventGadgetID()
Case #Quit
a = ClosePack()
addstep("Cancelling: " + curfile$)
a = DeleteFile(curfile$)
End
EndSelect
EndIf
ProcedureReturn 1
EndProcedure
Procedure makepack(packname$, folder$)
Compl = GetGadgetState(#Comp)
curfile$ = packname$
If Right(folder$, 1) <> "\"
folder$ = folder$ + "\"
EndIf
GetList(folder$, 1)
b = CreateFile(1,"index.dir")
WriteStringN(Str(dirnum))
For a = 1 To dirnum
WriteStringN(Right(dirlist$(a),Len(dirlist$(a)) - rootlen))
WriteStringN(Str(filecnt(a)))
Next a
CloseFile(1)
b = CreateFile(1,"index.fil")
WriteStringN(Str(filenum))
For a = 1 To filenum
WriteStringN(Right(Filelist$(a),Len(Filelist$(a)) - rootlen))
Next a
CloseFile(1)
;PackerCallback(@stbar())
b = CreatePack(packname$)
AddStep("adding: index.dir")
b = AddPackFile("index.dir", Compl)
AddStep("adding: index.fil")
b = AddPackFile("index.fil", Compl)
b = DeleteFile("index.dir")
b = DeleteFile("index.fil")
For a = 1 To filenum
fsz = FileSize(Filelist$(a))
AddStep("adding: " + Filelist$(a))
b = AddPackFile(Filelist$(a),Compl)
Next a
AddStep("Done!")
b = ClosePack()
EndProcedure
Procedure UnPack(PackName$, dest$)
If Right(dest$,1) <> "\"
dest$ = dest$ + "\"
EndIf
If dest$ = "\"
dest$ = ""
EndIf
c = OpenPack(PackName$)
memloca = NextPackFile()
FileLength = PackFileSize()
b = CreateFile(1,"index.dir")
WriteData(memloca,FileLength)
CloseFile(1)
memloca = NextPackFile()
FileLength = PackFileSize()
b = CreateFile(1,"index.fil")
WriteData(memloca,FileLength)
CloseFile(1)
b = OpenFile(1,"index.dir")
dirnum = Val(ReadString())
For a = 1 To dirnum
dirlist$(a) = ReadString()
filecnt(a) = Val(ReadString())
Next a
CloseFile(1)
b = DeleteFile("index.dir")
b = OpenFile(1,"index.fil")
filenum = Val(ReadString())
For a = 1 To filenum
filelist$(a) = ReadString()
Next a
CloseFile(1)
b = DeleteFile("index.fil")
; make dirs
b = CreateDirectory(dest$)
For a = 1 To dirnum
b = CreateDirectory(dest$ + Dirlist$(a))
Next a
; decompress files to the proper dirs
For a = 1 To filenum
Addstep("Decompressing: " + Filelist$(a))
memloca = NextPackFile()
FileLength = PackFileSize()
b = CreateFile(1,dest$ + Filelist$(a))
WriteData(memloca,FileLength)
CloseFile(1)
Next a
b = ClosePack()
EndProcedure
;- Main Program
;
Open_Main()
SetGadgetState(#Comp,9)
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventMenu
Select EventMenuID()
EndSelect
EndIf
If Event = #PB_EventGadget
Select EventGadgetID()
Case #Pack
packfil$ = "c:\Eric.pack" ;GetGadgetText(#Packfn)
If UCase(Left(packfil$,5)) <> ".PACK"
packfil$ = packfil$ + ".pack"
EndIf
pfolder$ = "E:\DONNEES\ksa8d4\MES DOCUMENTS\# PROGRAM FILES #\tgclic" ;GetGadgetText(#Pfname)
makepack(packfil$,pfolder$)
runone = 0
Case #UnPack
packfil$ = GetGadgetText(#Packfn)
If UCase(Left(packfil$,5)) <> ".PACK"
packfil$ = packfil$ + ".pack"
EndIf
pfolder$ = GetGadgetText(#Pfname)
Unpack(packfil$,pfolder$)
AddStep("Done!")
Case #Quit
CloseWindow(#Main)
End
EndSelect
EndIf
Until Event = #PB_EventCloseWindow
End
J'ai le message invalid memory acces sur le endprocedure de makepack(packname$, folder$). J'ai cherché, et evidement pas trouvé puisque je vous derange à nouveau.
Voici la V4.0
Code : Tout sélectionner
; Converted by PBSourceConverter on 28.09.2006 / 17:40
; Aszid's Packer v 0.9
;
;- Constants
;
#Main = 0
#Status = 0
#Pack = 1
#Quit = 2
#UnPack = 3
#Progressbar = 4
#Packfn = 5
#Gadget_6 = 6
#Pfname = 7
#gadget_8 = 8
#Comp = 9
;- Arrays
;
Global Dim Dirlist$(10000)
Global Dim Filelist$(10000)
Global Dim Filecnt(10000)
;- Global Variables
;
Global curfile$
Global prog.f
Global Filelist$
Global Dirlist$
Global FileCnt
Global Stepnum
Global filenum
Global dirnum
Global fsz.f
Global comp
Global runone
Global rootlen
Procedure Open_Main()
If OpenWindow(#Main, 216, 0, 270, 225, "Packer", #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Main))
ListViewGadget(#Status, 10, 10, 230, 110)
ButtonGadget(#Pack, 10, 150, 70, 20, "Pack")
ButtonGadget(#Quit, 180, 150, 60, 20, "Quit")
ButtonGadget(#UnPack, 90, 150, 80, 20, "UnPack")
ProgressBarGadget(#Progressbar, 10, 125, 230, 15, 0, 100, #PB_ProgressBar_Smooth)
StringGadget(#Packfn, 100, 175, 140, 20, "")
TextGadget(#Gadget_6, 10, 175, 85, 15, "Pack Filename:")
StringGadget(#Pfname, 100, 200, 140, 20, "")
TextGadget(#gadget_8, 10, 200, 80, 15, "Pack Folder:")
TrackBarGadget(#Comp, 245, 10, 20, 210, 0, 9, #PB_TrackBar_Ticks | #PB_TrackBar_Vertical)
EndIf
EndIf
EndProcedure
Procedure AddStep(StepText$)
AddGadgetItem(#Status, -1, StepText$)
SetGadgetState(#Status, Stepnum)
Stepnum = Stepnum + 1
EndProcedure
Procedure GetList(root$, Start)
If runone = 0
filenum = 0
dirnum = 0
rootlen = Len(root$)
runone = 1
EndIf
If ExamineDirectory(Start, root$, "")
Repeat
Type = NextDirectoryEntry(Start)
If Type = 2
If DirectoryEntryName(Start) <> "." And DirectoryEntryName(Start) <> ".."
dirnum = dirnum + 1
If root$ = ""
Dirlist$(dirnum) = DirectoryEntryName(Start) + "\"
GetList(Dirlist$(dirnum), Start+1)
Else
Dirlist$(dirnum) = root$ + DirectoryEntryName(Start) + "\"
GetList(Dirlist$(dirnum), Start+1)
EndIf
EndIf
Else
If Type = 1
filecnt(Start) = filecnt(Start) + 1
filenum = filenum + 1
Filelist$(filenum) = root$ + DirectoryEntryName(Start)
EndIf
EndIf
Until Type = 0
EndIf
EndProcedure
Procedure stbar(spos, dpos)
prog = spos*100/fsz
SetGadgetState(#Progressbar, prog)
EventID=WindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Quit
a = ClosePack()
addstep("Cancelling: " + curfile$)
a = DeleteFile(curfile$)
End
EndSelect
EndIf
ProcedureReturn 1
EndProcedure
Procedure makepack(packname$, folder$)
Compl = GetGadgetState(#Comp)
curfile$ = packname$
If Right(folder$, 1) <> "\"
folder$ = folder$ + "\"
EndIf
GetList(folder$, 1)
b = CreateFile(1,"index.dir")
WriteStringN(1,Str(dirnum))
For a = 1 To dirnum
WriteStringN(1,Right(dirlist$(a),Len(dirlist$(a)) - rootlen))
WriteStringN(1,Str(filecnt(a)))
Next a
CloseFile(1)
b = CreateFile(1,"index.fil")
WriteStringN(1,Str(filenum))
For a = 1 To filenum
WriteStringN(1,Right(Filelist$(a),Len(Filelist$(a)) - rootlen))
Next a
CloseFile(1)
PackerCallback(@stbar())
b = CreatePack(packname$)
AddStep("adding: index.dir")
b = AddPackFile("index.dir", Compl)
AddStep("adding: index.fil")
b = AddPackFile("index.fil", Compl)
b = DeleteFile("index.dir")
b = DeleteFile("index.fil")
For a = 1 To filenum
fsz = FileSize(Filelist$(a))
AddStep("adding: " + Filelist$(a))
b = AddPackFile(Filelist$(a),Compl)
Next a
AddStep("Done!")
b = ClosePack()
EndProcedure
Procedure UnPack(PackName$, dest$)
If Right(dest$,1) <> "\"
dest$ = dest$ + "\"
EndIf
If dest$ = "\"
dest$ = ""
EndIf
c = OpenPack(PackName$)
memloca = NextPackFile()
FileLength = PackFileSize()
b = CreateFile(1,"index.dir")
WriteData(1,memloca,FileLength)
CloseFile(1)
memloca = NextPackFile()
FileLength = PackFileSize()
b = CreateFile(1,"index.fil")
WriteData(1,memloca,FileLength)
CloseFile(1)
b = OpenFile(1,"index.dir")
dirnum = Val(ReadString(1))
For a = 1 To dirnum
dirlist$(a) = ReadString(1)
filecnt(a) = Val(ReadString(1))
Next a
CloseFile(1)
b = DeleteFile("index.dir")
b = OpenFile(1,"index.fil")
filenum = Val(ReadString(1))
For a = 1 To filenum
filelist$(a) = ReadString(1)
Next a
CloseFile(1)
b = DeleteFile("index.fil")
; make dirs
b = CreateDirectory(dest$)
For a = 1 To dirnum
b = CreateDirectory(dest$ + Dirlist$(a))
Next a
; decompress files to the proper dirs
For a = 1 To filenum
Addstep("Decompressing: " + Filelist$(a))
memloca = NextPackFile()
FileLength = PackFileSize()
b = CreateFile(1,dest$ + Filelist$(a))
WriteData(1,memloca,FileLength)
CloseFile(1)
Next a
b = ClosePack()
EndProcedure
;- Main Program
;
Open_Main()
SetGadgetState(#Comp,9)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Menu
Select EventMenu()
EndSelect
EndIf
If Event = #PB_Event_Gadget
Select EventGadget()
Case #Pack
packfil$ = GetGadgetText(#Packfn)
If UCase(Left(packfil$,5)) <> ".PACK"
packfil$ = packfil$ + ".pack"
EndIf
pfolder$ = GetGadgetText(#Pfname)
makepack(packfil$,pfolder$)
runone = 0
Case #UnPack
packfil$ = GetGadgetText(#Packfn)
If UCase(Left(packfil$,5)) <> ".PACK"
packfil$ = packfil$ + ".pack"
EndIf
pfolder$ = GetGadgetText(#Pfname)
Unpack(packfil$,pfolder$)
AddStep("Done!")
Case #Quit
CloseWindow(#Main)
End
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
End
Normal l'homme sera toujours meilleur que la machine.....
Bonne journée