Désarchiver ZIP 100% PB (listage et debut decompression)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Désarchiver ZIP 100% PB (listage et debut decompression)

Message par GallyHC »

Bonjour tout le monde,

Je vous présente un nouveau test de conversion d’un programme en purebasic. Ce code permet de faire la liste des fichiers d’un fichier ZIP.

Pour le moment c’est en phase de développement et j’ai fait le test sur windows xp et mac leopard et cela fonctionne parfaitement. Vous pouvez testé et me dire si cela fonctionne bien aussi pour vous.

Code : Tout sélectionner

; +======================================================+
; | GESTION DES FICHERS ZIP (Réalisation par KoakDesign) |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2009, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | VER & REV    | 0.0.1                                 |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.30 (MODULE)               |
; +--------------+---------------------------------------+
; | Program name | fls_zipfile_all.pbi                   |
; +======================================================+

; +======================================================+
; | Original Version: 0.0.1                              |
; +--------------+---------------------------------------+
; | Created by   | GallyHomeCorp                         |
; | Graphix by   |                                       |
; +--------------+---------------------------------------+
; | Comments:    |                                       |
; +--------------+                                       |
; |                                                      |
; |                                                      |
; |                                                      |
; +======================================================+

; +======================================================+
; | Système d'Exploitation                               |
; +--------------+---------------------------------------+
; | Window       | Oui                                   |
; | Linux        | Oui                                   |
; | MacOS        | Oui                                   |
; +======================================================+

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES PROCEDURES.

Declare.b setOpenZipFile(filename.s)

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES.

Global szipcomment.s
Global Dim sfilezip.s(0)

#READZIP            = 0
#LOCSIG             = $4034B50
#CENSIG             = $2014B50
#ENDSIG             = $6054B50
#EXTLOCSIG          = $8074B50

Structure ZIPFileHeader
    Signature.l
    Version.w
    GenePurpFlag.w
    Methode.i
    LastFileTime.w
    LastFileData.w
    Crc32.l
    SizeComp.l
    SizeUnComp.l
    FileNameLen.w
    ExtraLen.i
EndStructure
Structure ZIPCentralDirHeader
    Signature.l
    NbOfDiskInDir.w
    NbOfDiskIn.w
    TotalInDiskDir.w
    TotalInDisk.w
    SizeOfDir.l
    OffsetOfDir.l
    CommentLength.w
EndStructure
Structure ZIPCentralFileHeader
    Signature.l
    MadeByVer.w
    ExtractVer.w
    GenePurpFlag.w
    Methode.w
    LastFileTime.w
    LastFileDate.w
    Crc32.l
    SizeComp.l
    SizeUnComp.l
    FileNameLen.w
    ExtraLen.w
    CommentLen.w
    DiskNumStart.w
    InternalAttr.w
    ExtrernalAttr.l
    DataOffset.l
EndStructure
Structure CodesType
    Lenght.i
    Code.l
EndStructure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- 

Procedure.s DosTimeToDate(vnDate.l, vnTime.l)
;
  Define nYear.l
  Define nMonth.l
  Define nDay.l
  Define nHour.l
  Define nMinute.l
  Define nSecond.l
  
  vnDate = vnDate & $FFFF
  vnTime = vnTime & $FFFF
  nYear = 1980 + vnDate / 512
  nMonth = (vnDate / 32) % 16
  nDay = vnDate % 32
  nHour = vnTime / 2048
  nMinute = (vnTime / 32) % 64
  nSecond = (vnTime % 32) * 2  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", Date(nYear,nMonth,nDay,nHour,nMinute,nSecond))

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b setOpenZipFile(filename.s)
;
  Define i.l
  Define j.l
  Define temp.l
  Define lfllen.l
  Define zipok.b
  Define result.l
  Define mExtra.s
  Define mFileName.s
  Define *temp.l
  Define *temp1.l
  Protected LOCHdr.ZIPFileHeader
  Protected ENDHdr.ZIPCentralDirHeader
  Protected CENHdr.ZIPCentralFileHeader

  If ReadFile(#READZIP, filename)
    lfllen = Lof(#READZIP)
    ReadData(#READZIP, LOCHdr, SizeOf(ZIPFileHeader))
    If LOCHdr\Signature = #LOCSIG
        For i = (lfllen - 20) To 1 Step -1
          FileSeek(#READZIP, i)
          *temp = AllocateMemory(SizeOf(i))
          ReadData(#READZIP, *temp, SizeOf(i))
          If PeekI(*temp) = #ENDSIG
            FileSeek(#READZIP, i)
            ReadData(#READZIP, ENDHdr, SizeOf(ZIPCentralDirHeader))
            If ENDHdr\CommentLength > 0
              *temp = ReAllocateMemory(*temp,SizeOf(ZIPCentralDirHeader))
              ReadData(#READZIP, *temp, ENDHdr\CommentLength)
              szipcomment = Space(ENDHdr\CommentLength)
              szipcomment = PeekS(*temp)
            EndIf
            ZipOk = #True
            Break
          EndIf
        Next
    EndIf
    If ZipOk = #True
      Debug szipcomment
      Debug ""
      ReDim sfilezip(i)
      For j = 1 To ENDHdr\TotalInDisk
        i = i - 36
        ReDim sfilezip(j)        
        For i = i To 1 Step -1
          FileSeek(#READZIP, i)
          ReadData(#READZIP, *temp, SizeOf(i))
          If PeekI(*temp) = #CENSIG
            FileSeek(#READZIP, i)
            ReadData(#READZIP, CENHdr, SizeOf(ZIPCentralFileHeader))
            FileSeek(#READZIP, i+46)
            ReadData(#READZIP, *temp, CENHdr\FileNameLen)
            mFileName = Mid(PeekS(*temp),0,CENHdr\FileNameLen)
            sfilezip(j) = mFileName + " - " + DosTimeToDate(CENHdr\LastFileDate, CENHdr\LastFileTime)
            Debug sfilezip(j) + " - Rate: " + Str(((CENHdr\SizeUnComp-CENHdr\SizeComp)*100)/CENHdr\SizeUnComp) + "%"
            Break
          EndIf
        Next i
      Next j
    EndIf
    CloseFile(#READZIP)
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

setOpenZipFile("01.zip")
Par la suite si cela fonctionne comme je le veux j'en ferais une DLL, car perso j'ai besoin d'un désarchiver compatible Windows, Linux et Mac. Vous pouvez laisse un commentaire pour me dire si cela interresse quelqu'un ou pas, pour savoir si je met a jour ou pas.

Cordialement,
GallyHC
Dernière modification par GallyHC le ven. 30/oct./2009 10:37, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Désarchiver ZIP 100% PB (liste des fichiers actuellement)

Message par venom »

Bonjour,

ça fonctionne bien chez moi windows xp sp2 :wink:
néanmoins, j'ai ajouté ça en debut de code :

Code : Tout sélectionner

archive$ = OpenFileRequester("Ouvrir un archive zip", "", "Archive zip|*.zip", 0)

histoire d'ouvrir un zip qui traine dans l'ordinateur plutôt que de taper le chemin :)
Par la suite si cela fonctionne comme je le veux j'en ferais une DLL, car perso j'ai besoin d'un désarchiver compatible Windows, Linux et Mac. Vous pouvez laisse un commentaire pour me dire si cela intéresse quelqu'un ou pas, pour savoir si je met a jour ou pas.
le 1er souci c'est que sous linux il n'y a pas de DLL :)
si non le sujet peut être sympa.





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (liste des fichiers actuellement)

Message par GallyHC »

Bonjour,

Quand je parle de DLL c aussi un lybrary ou je ne sais quoi sur linux, mais il y a surement un equivalent :). Sinon dans tout les cas je donnerais le source au pire ce sera avec.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Désarchiver ZIP 100% PB (liste des fichiers actuellement)

Message par Kwai chang caine »

Bonjour GallyHC

Bah moi ça plante à la ligne 218 avec la v4.30 comme la 4.40 :(

Code : Tout sélectionner

 Debug sfilezip(j) + " - Rate: " + Str(((CENHdr\SizeUnComp-CENHdr\SizeComp)*100)/CENHdr\SizeUnComp) + "%"
Si tu veux essayer toi meme :
http://erdsjb.free.fr/PureStorage/Provisoire/Zip.zip

J'ai W2000 SP4
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (liste des fichiers actuellement)

Message par GallyHC »

Bonjour Kwai chang caine,

Met juste Debug "sfilezip(j)" a cette ligne, tu as surement des fichiers non compresse dans ton zip. Je n'ai pas fait le test si compress < uncompress, je penses que sa vient de la.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (liste des fichiers actuellement)

Message par GallyHC »

Bonjour tout le monde,

Pour finir j’ai pas mal avance, maintenant le listage des fichiers est Ok, les fichiers non compresse sont bien copier dans le répertoire du code-source. Il reste la partie de Deflate à faire et la pour le moment je sèche, mais j’espère pouvoir avance rapidement.

Voici le source actuelle non fini mais bien avancer, vous pouvez me dire ce que vous en pensé.

Code : Tout sélectionner

; +======================================================+
; | GESTION DES FICHERS ZIP (Réalisation par KoakDesign) |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2009, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | VER & REV    | 0.0.1                                 |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.30 (MODULE)               |
; +--------------+---------------------------------------+
; | Program name | fls_zipfile_all.pbi                   |
; +======================================================+

; +======================================================+
; | Original Version: 0.0.1                              |
; +--------------+---------------------------------------+
; | Created by   | GallyHomeCorp                         |
; | Graphix by   |                                       |
; +--------------+---------------------------------------+
; | Comments:    |                                       |
; +--------------+                                       |
; |                                                      |
; |                                                      |
; |                                                      |
; +======================================================+

; +======================================================+
; | Système d'Exploitation                               |
; +--------------+---------------------------------------+
; | Window       | Oui                                   |
; | Linux        | Oui                                   |
; | MacOS        | Oui                                   |
; +======================================================+

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES PROCEDURES.

Declare.s DosTimeToDate(vnDate.l, vnTime.l)
Declare.l InStrRev(StringCheck.s, StringMatch.s, Start=0)
Declare.b setOpenZipFile(filename.s)
Declare Extract_ZipFile(filenums.l)
Declare Extract_Level_0(filenums.l)
Declare Extract_Level_8(filenums.l)

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES.

#READZIP            = 0
#LOCSIG             = $4034B50
#CENSIG             = $2014B50
#ENDSIG             = $6054B50
#EXTLOCSIG          = $8074B50

Structure ZIPFileHeader
    Signature.l
    Version.w
    GenePurpFlag.w
    Methode.w
    LastFileTime.w
    LastFileData.w
    Crc32.l
    SizeComp.l
    SizeUnComp.l
    FileNameLen.w
    ExtraLen.w
EndStructure
Structure ZIPCentralDirHeader
    Signature.l
    NbOfDiskInDir.w
    NbOfDiskIn.w
    TotalInDiskDir.w
    TotalInDisk.w
    SizeOfDir.l
    OffsetOfDir.l
    CommentLength.w
EndStructure
Structure ZIPCentralFileHeader
    Signature.l
    MadeByVer.w
    ExtractVer.w
    GenePurpFlag.w
    Methode.w
    LastFileTime.w
    LastFileDate.w
    Crc32.l
    SizeComp.l
    SizeUnComp.l
    FileNameLen.w
    ExtraLen.w
    CommentLen.w
    DiskNumStart.w
    InternalAttr.w
    ExtrernalAttr.l
    DataOffset.l
EndStructure
Structure CodesType
    Lenght.i
    Code.l
EndStructure

Global szipfilenme.s
Global szipcomment.s
Global Dim sfilezip.s(0)
Global Dim sfileinf.ZIPCentralFileHeader(0)

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.s DosTimeToDate(vnDate.l, vnTime.l)
;
  Define nYear.l
  Define nMonth.l
  Define nDay.l
  Define nHour.l
  Define nMinute.l
  Define nSecond.l
  
  vnDate = vnDate & $FFFF
  vnTime = vnTime & $FFFF
  nYear = 1980 + vnDate / 512
  nMonth = (vnDate / 32) % 16
  nDay = vnDate % 32
  nHour = vnTime / 2048
  nMinute = (vnTime / 32) % 64
  nSecond = (vnTime % 32) * 2  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", Date(nYear,nMonth,nDay,nHour,nMinute,nSecond))

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l InStrRev(StringCheck.s, StringMatch.s, Start=0)
;
  Define i.l
  Define j.l

  j = Len(StringCheck) - Start
  For i=j To 0 Step-1
    If Mid(StringCheck,i,Len(StringMatch)) = StringMatch
      ProcedureReturn Len(StringCheck) - i
    EndIf
  Next i
  ProcedureReturn 0

EndProcedure 

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b setOpenZipFile(filename.s)
;
  Define i.l
  Define j.l
  Define temp.l
  Define lfllen.l
  Define zipok.b
  Define result.l
  Define mExtra.s
  Define mFileName.s
  Define *temp.l
  Protected LOCHdr.ZIPFileHeader
  Protected ENDHdr.ZIPCentralDirHeader
  Protected CENHdr.ZIPCentralFileHeader

  If ReadFile(#READZIP, filename)
    lfllen = Lof(#READZIP)
    ReadData(#READZIP, LOCHdr, SizeOf(ZIPFileHeader))
    If LOCHdr\Signature = #LOCSIG
        For i = (lfllen - 20) To 1 Step -1
          FileSeek(#READZIP, i)
          *temp = AllocateMemory(SizeOf(i))
          ReadData(#READZIP, *temp, SizeOf(i))
          If PeekI(*temp) = #ENDSIG
            FileSeek(#READZIP, i)
            ReadData(#READZIP, ENDHdr, SizeOf(ZIPCentralDirHeader))
            If ENDHdr\CommentLength > 0
              *temp = ReAllocateMemory(*temp,SizeOf(ZIPCentralDirHeader))
              ReadData(#READZIP, *temp, ENDHdr\CommentLength)
              szipcomment = Space(ENDHdr\CommentLength)
              szipcomment = PeekS(*temp)
            EndIf
            ZipOk = #True
            Break
          EndIf
        Next
    EndIf
    If ZipOk = #True
      ReDim sfilezip(0)
      ReDim sfileinf(0)
      For j = 1 To ENDHdr\TotalInDisk
        i = i - 36
        ReDim sfilezip(j)
        ReDim sfileinf(j)
        For i = i To 1 Step -1
          FileSeek(#READZIP, i)
          ReadData(#READZIP, *temp, SizeOf(i))
          If PeekI(*temp) = #CENSIG
            FileSeek(#READZIP, i)
            ReadData(#READZIP, CENHdr, SizeOf(ZIPCentralFileHeader))
            FileSeek(#READZIP, i+46)
            ReadData(#READZIP, *temp, CENHdr\FileNameLen)
            mFileName = Mid(PeekS(*temp),0,CENHdr\FileNameLen)
            sfilezip(j)               = mFileName
            sfileinf(j)\Signature     = CENHdr\Signature            
            sfileinf(j)\MadeByVer     = CENHdr\MadeByVer
            sfileinf(j)\ExtractVer    = CENHdr\ExtractVer
            sfileinf(j)\GenePurpFlag  = CENHdr\GenePurpFlag
            sfileinf(j)\Methode       = CENHdr\Methode
            sfileinf(j)\LastFileTime  = CENHdr\LastFileTime
            sfileinf(j)\LastFileDate  = CENHdr\LastFileDate
            sfileinf(j)\Crc32         = CENHdr\Crc32
            sfileinf(j)\SizeComp      = CENHdr\SizeComp
            sfileinf(j)\SizeUnComp    = CENHdr\SizeUnComp
            sfileinf(j)\FileNameLen   = CENHdr\FileNameLen
            sfileinf(j)\ExtraLen      = CENHdr\ExtraLen
            sfileinf(j)\CommentLen    = CENHdr\CommentLen
            sfileinf(j)\DiskNumStart  = CENHdr\DiskNumStart
            sfileinf(j)\InternalAttr  = CENHdr\InternalAttr
            sfileinf(j)\ExtrernalAttr = CENHdr\ExtrernalAttr
            sfileinf(j)\DataOffset    = CENHdr\DataOffset
            If CENHdr\SizeUnComp > CENHdr\SizeComp
              Debug sfilezip(j) + " - Rate: " + Str(((CENHdr\SizeUnComp-CENHdr\SizeComp)*100)/CENHdr\SizeUnComp) + "% - Methode: " + Str(CENHdr\Methode)
            Else
              Debug sfilezip(j) + " - Rate: 0% - Methode: " + Str(CENHdr\Methode)
            EndIf
            Break
          EndIf
        Next i
      Next j
      szipfilenme = filename            
    EndIf
    CloseFile(#READZIP)

    ; 
    ; DECOMPRESSION DU FICHIER N°3
    ;
    Extract_ZipFile(3)
    ; 
    ; DECOMPRESSION DU FICHIER N°3
    ;

    ProcedureReturn #True
  EndIf
  ProcedureReturn #False

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure Extract_ZipFile(filenums.l)
;
  If sfileinf(filenums)\Signature = #CENSIG
    Select sfileinf(filenums)\Methode
      Case 0:   Extract_Level_0(filenums)
      Case 8:   Extract_Level_8(filenums)
      Default:  MessageRequester("PureZip", "Erreur type de compression non reconnu (Type: "+Str(sfileinf(filenums)\Methode)+")")
    EndSelect 
  EndIf

EndProcedure

Procedure Extract_Level_0(filenums.l)
;
  Define i.l
  Define j.s
  Define mOfs.l
  Define lfllen.l
  Define mOk.b
  Define filename.s
  Define filepath.s
  Dim mIn.c(0)
  Protected mHdr.ZIPFileHeader
  Protected CENHdr.ZIPCentralFileHeader

  If ReadFile(#READZIP, szipfilenme)
    lfllen = Lof(#READZIP)
    If lfllen > 1 + sfileinf(filenums)\DataOffset
      FileSeek(#READZIP, sfileinf(filenums)\DataOffset)
      ReadData(#READZIP, mHdr, SizeOf(ZIPFileHeader))
      mOfs = sfileinf(filenums)\DataOffset + SizeOf(mHdr) + mHdr\FileNameLen + mHdr\ExtraLen
      If sfileinf(filenums)\SizeComp > 0
      ReDim mIn(sfileinf(filenums)\SizeComp - 1)
        FileSeek(#READZIP, mOfs)
        ReadData(#READZIP, @mIn(), sfileinf(filenums)\SizeComp)
      EndIf
      mOk = #True
    Else
      Debug "Error"
    EndIf
    CloseFile(#READZIP)
  EndIf
  If mOk = #True
    i = InStrRev(sfilezip(filenums),"/",1)
    If i>0
      filename = Right(sfilezip(filenums), i)
      filepath = Mid(sfilezip(filenums), 0, Len(sfilezip(filenums))-i)
    Else
      filename = sfilezip(filenums)
    EndIf
    If CreateFile(0, filename)
      For i=0 To sfileinf(filenums)\SizeComp - 1
        WriteByte(0, mIn(i))
      Next i
      CloseFile(0)
    EndIf
  EndIf

EndProcedure

Procedure Extract_Level_8(filenums.l)
;
  Define i.l
  Define j.s
  Define mOfs.l
  Define result.l
  Define lfllen.l
  Define mOk.b
  Define filename.s
  Define filepath.s
  Dim mIn.c(0)
  Protected mHdr.ZIPFileHeader
  Protected CENHdr.ZIPCentralFileHeader

  If ReadFile(#READZIP, szipfilenme)
    lfllen = Lof(#READZIP)
    If lfllen > 1 + sfileinf(filenums)\DataOffset
      FileSeek(#READZIP, sfileinf(filenums)\DataOffset)
      ReadData(#READZIP, mHdr, SizeOf(ZIPFileHeader))
      mOfs = sfileinf(filenums)\DataOffset + SizeOf(mHdr) + mHdr\FileNameLen + mHdr\ExtraLen
      ReDim mIn(sfileinf(filenums)\SizeComp - 1)
      FileSeek(#READZIP, mOfs)
      ReadData(#READZIP, @mIn(), sfileinf(filenums)\SizeComp)
      mOk = #True      
    Else
      Debug "Error"
    EndIf
    CloseFile(#READZIP)
  EndIf
  If mOk = #True
    i = InStrRev(sfilezip(filenums),"/",1)
    If i>0
      filename = Right(sfilezip(filenums), i)
      filepath = Mid(sfilezip(filenums), 0, Len(sfilezip(filenums))-i)
    Else
      filename = sfilezip(filenums)
    EndIf

;
; ICI ROUTINE DE DEFLATE
;

  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

setOpenZipFile("05.zip")
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par GallyHC »

Bonjour tous,

Je recherche des personnes pouvant m'aider sur la partie deflate.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par GallyHC »

Bonjour tous,

La decompression d'un zip en multi-os n'a pas l'air d'avoir un franc succes.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par Kwai chang caine »

La decompression d'un zip en multi-os n'a pas l'air d'avoir un franc succes.
Bah peut etre parce que WinZip et Winrar sont pseudo gratuit, et je crois qu'il y a aussi une lib ZIP :roll:

Mais bon ...regarde ton site....au debut tu paraissais tout seul sur ton ile
Et maintenant, j'entend parler de ton site sur pas mal de POSTS :wink:

J'ai essayé encore une fois ton super code....et j'ai une erreur ligne 302 array index out of bound

Remarque j'y suis allé fort, car comme sur l'autre POST j'ai vu que DarkBasic etait gratuit, je l'ai téléchargé et j'ai essayé avec ce ZIP que j'avais sous la main.
Et il fait 200 Mo, donc ce doit etre ça le probleme :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par GallyHC »

Bonjour je verrais le pourquoi de l'erreur, sinon oui il y a winzip et winrar et quand je parle multi-os sa veux dire windows, linux et mac. Avec le meme code dit moi la DLL ou autre qui fonctionne sur les 3 os?

Enfin ct l'idee avoir un code pour les 3 os qui fonctionne bien. Peux tu me donne l'url de ton zip car j'ai fait le test avec 300MO et sa passe?

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par Kwai chang caine »

Oui oui, j'ai bien compris.

Encore une fois, ne te meprend pas sur mes dires....
Loin de moi de critiquer ton elan, ta motivation, et tes idées :oops:

Mais comme tu pose une question de savoir pourquoi, "apparemment" personne ne se jette tout de suite dessus ...
Je tente d'apporter une reponse qui parait logique pour moi...

Comme pour ton site, tu t'attaque a des choses qui existe déjà, qui sont reconnues, peut etre moins bien, peut etre moins joli, je ne sais pas.
Mais quand un boulanger s'installe en face d'un autre qui fait du bon pain...la concurence est dure et longue, et il faut drolement que le nouveau apporte des "plus" pour que les clients passent en face.
Le français a ses petites habitudes....
Regarde un bourrin comme moi qui continue a utiliser l'IDE natif, alors que le genial GNOZAL et son splendide Japbe fait les preuves de sa superiorité tous les jours :oops:

Regarde SROD, pourquoi sa lib COMATE a suplanté celle de TsSoft PureDishelper.
Et bien je pense que c'est parce qu'elle est open source...c'est un reel plus, meme pour les bourrins comme moi qui comprennent pas une ligne.
Mais si un jour y'a un probleme....et bien on sait que quelqu'un pourra reprendre le flambeau. 8)

Le challenge est audacieux, difficile et de longue haleine.....c'est tout a ton honneur.... 8)
On a d'autant plus de chance de susciter un interet, lorsque l'idée est novatrice et que la concurence est peu nombreuse voir inexistante :roll:

Voila je pense, une des raisons pour laquelle, les clients ne se cassent pas la figure pour entrer dans ton magasin :D
Mais bon peut etre qu'une fois qu'ils auront gouté ton pain.....y'aura plus de client qu'en face :wink:

Pour le lien j'suis dégouté.....j'ai cherché 1/4 d'heure et pas moyen de le retrouver
Je comprend pas...j'avais tapé DarkBasic freeware et je suis tombé dessus tout de suite sur un zip de 200 MO et la je trouve que des petit fichiers en shareware
Si vraiment tu en a besoin, je pourrais tenter de le deposer sur un de mes sites ....

Autrement je viens de tomber sur un post de MISTREL qui en parle....je suppose que c'est le meme zip
http://www.purebasic.fr/english/viewtop ... 20#p304820
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par Progi1984 »

GallyHC a écrit :Bonjour je verrais le pourquoi de l'erreur, sinon oui il y a winzip et winrar et quand je parle multi-os sa veux dire windows, linux et mac. Avec le meme code dit moi la DLL ou autre qui fonctionne sur les 3 os?
ZLib
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par Fred »

Pour le deflate, utilise la "libz" qui est d'ailleurs deja fourni en standard avec PB sous les 3 OSes. Avec un "ImportC" ca devrait le faire.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par GallyHC »

Bonjour,

Merci bien pour cette information, en plus j'ai vu que la beta 6 y avait le systray pour macos vraiment cool.

Encore merci Fred
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Désarchiver ZIP 100% PB (listage et debut decompression)

Message par GallyHC »

Bonjour tout le monde,

Je viens à vous pour encore avoir de votre aide. Voila j’avance pas mal sur la compression des Zip mais la je sèche complément sur la lib ZLib, pour l’utilisation de Uncompress(). J’ai toujours des erreurs quoi que je fasse.

J’ai vérifié le format de la sortie du fichier, voir si il y avait une erreur de bite et visiblement il n’y en a pas. La decrompression est dans la fonction "Procedure Extract_Level_8(filenums.l)"

Code : Tout sélectionner

; +======================================================+
; | GESTION DES FICHERS ZIP (Réalisation par KoakDesign) |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2009, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | VER & REV    | 0.0.1                                 |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.30 (MODULE)               |
; +--------------+---------------------------------------+
; | Program name | fls_zipfile_all.pbi                   |
; +======================================================+

; +======================================================+
; | Original Version: 0.0.1                              |
; +--------------+---------------------------------------+
; | Created by   | GallyHomeCorp                         |
; | Graphix by   |                                       |
; +--------------+---------------------------------------+
; | Comments:    |                                       |
; +--------------+                                       |
; |                                                      |
; |                                                      |
; |                                                      |
; +======================================================+

; +======================================================+
; | Système d'Exploitation                               |
; +--------------+---------------------------------------+
; | Window       | Oui                                   |
; | Linux        | Oui                                   |
; | MacOS        | Oui                                   |
; +======================================================+

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES PROCEDURES.

ImportC "zlib.lib"
  compress2(*dest, *destLen, *source, sourceLen.i, level.i)
  uncompress(*dest, *destLen, *source, sourceLen)
EndImport

Declare.s DosTimeToDate(vnDate.l, vnTime.l)
Declare.l InStrRev(StringCheck.s, StringMatch.s, Start=0)
Declare.b setOpenZipFile(filename.s)
Declare Extract_ZipFile(filenums.l)
Declare Extract_Level_0(filenums.l)
Declare Extract_Level_8(filenums.l)

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES.

#READZIP            = 0
#LOCSIG             = $4034B50
#CENSIG             = $2014B50
#ENDSIG             = $6054B50
#EXTLOCSIG          = $8074B50

#Z_OK               = 0
#Z_DATA_ERROR       = -3
#Z_MEM_ERROR        = -4
#Z_BUF_ERROR        = -5

Structure ZIPFileHeader
    Signature.l
    Version.w
    GenePurpFlag.w
    Methode.w
    LastFileTime.w
    LastFileData.w
    Crc32.l
    SizeComp.l
    SizeUnComp.l
    FileNameLen.w
    ExtraLen.w
EndStructure
Structure ZIPCentralDirHeader
    Signature.l
    NbOfDiskInDir.w
    NbOfDiskIn.w
    TotalInDiskDir.w
    TotalInDisk.w
    SizeOfDir.l
    OffsetOfDir.l
    CommentLength.w
EndStructure
Structure ZIPCentralFileHeader
    Signature.l
    MadeByVer.w
    ExtractVer.w
    GenePurpFlag.w
    Methode.w
    LastFileTime.w
    LastFileDate.w
    Crc32.l
    SizeComp.l
    SizeUnComp.l
    FileNameLen.w
    ExtraLen.w
    CommentLen.w
    DiskNumStart.w
    InternalAttr.w
    ExtrernalAttr.l
    DataOffset.l
EndStructure

Global szipfilenme.s
Global szipcomment.s
Global Dim sfilezip.s(0)
Global Dim spathzip.s(0)
Global Dim sfileinf.ZIPCentralFileHeader(0)

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.s DosTimeToDate(vnDate.l, vnTime.l)
; ROUTINE DE FORMATAGE DES DATES.
  Define nYear.l
  Define nMonth.l
  Define nDay.l
  Define nHour.l
  Define nMinute.l
  Define nSecond.l
  
  vnDate = vnDate & $FFFF
  vnTime = vnTime & $FFFF
  nYear = 1980 + vnDate / 512
  nMonth = (vnDate / 32) % 16
  nDay = vnDate % 32
  nHour = vnTime / 2048
  nMinute = (vnTime / 32) % 64
  nSecond = (vnTime % 32) * 2  
  ProcedureReturn FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", Date(nYear,nMonth,nDay,nHour,nMinute,nSecond))

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l InStrRev(StringCheck.s, StringMatch.s, Start=0)
; ROUTINE DE RECHERCHE DE CARACTERE.
  Define i.l
  Define j.l

  j = Len(StringCheck) - Start
  For i=j To 0 Step -1
    If Mid(StringCheck,i,Len(StringMatch)) = StringMatch
      ProcedureReturn Len(StringCheck) - i
    EndIf
  Next i
  ProcedureReturn 0

EndProcedure 

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b setOpenZipFile(filename.s)
; ROUTINE DE LISTAGE DU ZIP.
  Define i.l
  Define j.l
  Define temp.l
  Define lfllen.l
  Define zipok.b
  Define result.l
  Define mExtra.s
  Define mFileName.s
  Define *temp.l
  Protected LOCHdr.ZIPFileHeader
  Protected ENDHdr.ZIPCentralDirHeader
  Protected CENHdr.ZIPCentralFileHeader

Define name.s

  If ReadFile(#READZIP, filename)
    lfllen = Lof(#READZIP)
    ReadData(#READZIP, LOCHdr, SizeOf(ZIPFileHeader))
    If LOCHdr\Signature = #LOCSIG
        For i = (lfllen - 20) To 1 Step -1
          FileSeek(#READZIP, i)
          *temp = AllocateMemory(SizeOf(i))
          ReadData(#READZIP, *temp, SizeOf(i))
          If PeekI(*temp) = #ENDSIG
            FileSeek(#READZIP, i)
            ReadData(#READZIP, ENDHdr, SizeOf(ZIPCentralDirHeader))
            If ENDHdr\CommentLength > 0
              *temp = ReAllocateMemory(*temp, SizeOf(ZIPCentralDirHeader))
              ReadData(#READZIP, *temp, ENDHdr\CommentLength)
              szipcomment = Space(ENDHdr\CommentLength)
              szipcomment = PeekS(*temp)
            EndIf
            ZipOk = #True
            Break
          EndIf
        Next
    EndIf
    If ZipOk = #True
      ReDim sfilezip(0)
      ReDim sfileinf(0)
      For j = 1 To ENDHdr\TotalInDisk
        i = i - 36
        ReDim sfilezip(j)
        ReDim sfileinf(j)
        For i = i To 1 Step -1
          FileSeek(#READZIP, i)
          ReadData(#READZIP, *temp, SizeOf(i))
          If PeekI(*temp) = #CENSIG
            FileSeek(#READZIP, i)
            ReadData(#READZIP, CENHdr, SizeOf(ZIPCentralFileHeader))
            FileSeek(#READZIP, i+46)
            ReadData(#READZIP, *temp, CENHdr\FileNameLen)
            mFileName = Mid(PeekS(*temp),0,CENHdr\FileNameLen)
            sfilezip(j)               = mFileName
            sfileinf(j)\Signature     = CENHdr\Signature            
            sfileinf(j)\MadeByVer     = CENHdr\MadeByVer
            sfileinf(j)\ExtractVer    = CENHdr\ExtractVer
            sfileinf(j)\GenePurpFlag  = CENHdr\GenePurpFlag
            sfileinf(j)\Methode       = CENHdr\Methode
            sfileinf(j)\LastFileTime  = CENHdr\LastFileTime
            sfileinf(j)\LastFileDate  = CENHdr\LastFileDate
            sfileinf(j)\Crc32         = CENHdr\Crc32
            sfileinf(j)\SizeComp      = CENHdr\SizeComp
            sfileinf(j)\SizeUnComp    = CENHdr\SizeUnComp
            sfileinf(j)\FileNameLen   = CENHdr\FileNameLen
            sfileinf(j)\ExtraLen      = CENHdr\ExtraLen
            sfileinf(j)\CommentLen    = CENHdr\CommentLen
            sfileinf(j)\DiskNumStart  = CENHdr\DiskNumStart
            sfileinf(j)\InternalAttr  = CENHdr\InternalAttr
            sfileinf(j)\ExtrernalAttr = CENHdr\ExtrernalAttr
            sfileinf(j)\DataOffset    = CENHdr\DataOffset
            If Right(sfilezip(j),1) = "/"
              name+sfilezip(j) + " - Dir"+#CRLF$
            Else
              If CENHdr\SizeUnComp > CENHdr\SizeComp
                name+sfilezip(j) + " - Rate: " + Str(((CENHdr\SizeUnComp-CENHdr\SizeComp)*100)/CENHdr\SizeUnComp) + "% - Methode: " + Str(CENHdr\Methode)+#CRLF$
              Else
                name+sfilezip(j) + " - Rate: 0% - Methode: " + Str(CENHdr\Methode)+#CRLF$
              EndIf
            EndIf
            Break
          EndIf
        Next i
      Next j
      szipfilenme = filename            
    EndIf
    CloseFile(#READZIP)

    ;
    ; DECOMPRESSION DU FICHIER N°3
    ;
    MessageRequester("PureZIP", name)
    MessageRequester("PureZIP", sfilezip(1))
    Extract_ZipFile(1)
    ; 
    ; DECOMPRESSION DU FICHIER N°3
    ;

    ProcedureReturn #True
  EndIf
  ProcedureReturn #False

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure Extract_ZipFile(filenums.l)
; ROUTINE DE VERIFICATION DU FICHIER.
  If sfileinf(filenums)\Signature = #CENSIG
    Select sfileinf(filenums)\Methode
      Case 0:   Extract_Level_0(filenums)
      Case 8:   Extract_Level_8(filenums)
      Default:  MessageRequester("PureZip", "Erreur type de compression non reconnu (Type: "+Str(sfileinf(filenums)\Methode)+")")
    EndSelect 
  EndIf

EndProcedure

Procedure Extract_Level_0(filenums.l)
; ROUTINE D'EXTRATION NIVEAU 0.
  Define i.l
  Define j.s
  Define mOfs.l
  Define lfllen.l
  Define mOk.b
  Define filename.s
  Define filepath.s
  Dim mIn.c(0)
  Protected mHdr.ZIPFileHeader

  If sfileinf(filenums)\SizeComp>0 And sfileinf(filenums)\SizeUnComp>0
    If ReadFile(#READZIP, szipfilenme)
      lfllen = Lof(#READZIP)
      If lfllen > 1 + sfileinf(filenums)\DataOffset
        FileSeek(#READZIP, sfileinf(filenums)\DataOffset)
        ReadData(#READZIP, mHdr, SizeOf(ZIPFileHeader))
        mOfs = sfileinf(filenums)\DataOffset + SizeOf(mHdr) + mHdr\FileNameLen + mHdr\ExtraLen
        If sfileinf(filenums)\SizeComp > 0
          ReDim mIn(sfileinf(filenums)\SizeComp)
          FileSeek(#READZIP, mOfs)
          ReadData(#READZIP, @mIn(), sfileinf(filenums)\SizeComp)
        EndIf
        mOk = #True
      Else
        ProcedureReturn #False
      EndIf
      CloseFile(#READZIP)
    EndIf
    If mOk = #True
      i = InStrRev(sfilezip(filenums),"/",1)
      If i>0
        filename = Right(sfilezip(filenums), i)
        filepath = Mid(sfilezip(filenums), 0, Len(sfilezip(filenums))-i)
      Else
        filename = sfilezip(filenums)
      EndIf
      If CreateFile(0, filename)
        WriteData(0, mIn(), sfileinf(filenums)\SizeComp)
        CloseFile(0)
        ProcedureReturn #True
      EndIf
    EndIf
  EndIf
  ProcedureReturn #False

EndProcedure

Procedure Extract_Level_8(filenums.l)
; ROUTINE D'EXTRATION NIVEAU 8.
  Define i.l
  Define j.s
  Define mOfs.l
  Define lresu.l
  Define lfllen.l
  Define mOk.b
  Define *mout
  Define filename.s
  Define filepath.s
  Dim mIn.c(0)
  Protected mHdr.ZIPFileHeader

  If sfileinf(filenums)\SizeComp>0 And sfileinf(filenums)\SizeUnComp>0
    If ReadFile(#READZIP, szipfilenme)
      lfllen = Lof(#READZIP)
      If lfllen > 1 + sfileinf(filenums)\DataOffset
        FileSeek(#READZIP, sfileinf(filenums)\DataOffset)
        ReadData(#READZIP, mHdr, SizeOf(ZIPFileHeader))
        mOfs = sfileinf(filenums)\DataOffset + SizeOf(mHdr) + mHdr\FileNameLen + mHdr\ExtraLen
        If sfileinf(filenums)\SizeComp > 0
          ReDim mIn(sfileinf(filenums)\SizeComp)
          FileSeek(#READZIP, mOfs)
          ReadData(#READZIP, @mIn(), sfileinf(filenums)\SizeComp)
        EndIf
        mOk = #True
      Else
        ProcedureReturn #False
      EndIf
      CloseFile(#READZIP)
    EndIf
    If mOk = #True
      i = InStrRev(sfilezip(filenums),"/",1)
      If i>0
        filename = Right(sfilezip(filenums), i)
        filepath = Mid(sfilezip(filenums), 0, Len(sfilezip(filenums))-i)
      Else
        filename = sfilezip(filenums)
      EndIf


      *mout = AllocateMemory(@mHdr\SizeUnComp)
      lresu = uncompress(@*mout, @mHdr\SizeUnComp, @mIn(1), mHdr\SizeComp)


      If lresu = #Z_OK
        If CreateFile(0, filename)
          WriteData(0, *mout, mHdr\SizeUnComp)
          CloseFile(0)
          ProcedureReturn #True
        EndIf
      Else
        Select lresu
          Case #Z_DATA_ERROR: 
          Case #Z_MEM_ERROR:  
          Case #Z_BUF_ERROR:  
          Default:
        EndSelect
        Debug lresu
      EndIf
    EndIf
  EndIf
  ProcedureReturn #False

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

setOpenZipFile(OpenFileRequester("Ouvrir un archive zip", "", "Archive zip|*.zip", 0))
Merci d’avance tous
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre