Chargement des fichiers ISO CD (c'est le debut).

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Chargement des fichiers ISO CD (c'est le debut).

Message par GallyHC »

Bonjour,

Je viens de commencer une source pour le chargement des fichiers de type ISO (pour le moment c'est la détection du type et le nom de CD).

Je continu mes recherches sur la structure des fichiers ISO car avec tout les protocoles différents, il y a du boulot :). Donc voila la première partie du code et espèrent rapidement mettre le listage des fichier :).

Code : Tout sélectionner

; +======================================================+
; |   ISO CD FILE LOADER (Réalisation par KoakDesign)    |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2008, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 5.10                        |
; +--------------+---------------------------------------+
; | VER & REV    | 0.0.1                                 |
; +--------------+---------------------------------------+
; | Program name | iso_file.pb                           |
; +======================================================+

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

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

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

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

EnableExplicit

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

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

#CDFS_SIZE_2048       = 2048
;#CDFS_SIZE_2336       = 2336

#VSD_STD_ID_CD001     = "CD001" ; (* STANDARD ID *)
#VSD_STD_ID_NSR02     = "NSR02" ; (* (3/9.1)     * Standard Identifier)
#VSD_STD_ID_NSR03     = "NSR03" ; (* (3/9.1)     *)
#VSD_STD_ID_BEA01     = "BEA01" ; (* (2/9.2)     *)
#VSD_STD_ID_TEA01     = "TEA01" ; (* (2/9.3)     *)
#VSD_STD_ID_BOOT2     = "BOOT2" ; (* (2/9.4)     *)
#VSD_STD_ID_CD001     = "CD001" ; (* (ECMA-119)  *)
#VSD_STD_ID_CDW02     = "CDW02" ; (* (ECMA-168)  *)

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

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

Structure FILE_DIRECTORY_DATE_TIME
  year.a
  month.a
  day.a
  hour.a
  minute.a
  second.a
  gmtoffset.a
EndStructure

Structure PRIMARY_ROOT_DATE_TIME
  year.l
  month.a
  day.a
  hour.a
  minute.a
  second.a
  Hundredths.l
  gmtoffset.l
EndStructure

Structure ROOT_DIRECTORY_RECORD
  LengthOfDirectoryRecord.a
  ExtendedAttributeRecordLength.a
  LocationOfExtent.q
  DataLength.q
  RecordingDateAndTime.FILE_DIRECTORY_DATE_TIME
  FileFlags.a
  FileUnitSize.a
  InterleaveGapSize.a
  VolumeSequenceNumber.l
  LengthOfFileIdentifier.a
  FileIdentifier.a
EndStructure

Structure PRIMARY_VOLUME_DESCRIPTOR
  StandardType.a
  StandardIdentifier.s{5}
  VolumeDescriptorVersion.a
  Unused1.a
  SystemIdentifier.s{32}
  VolumeIdentifier.s{32}
  Unused2.b[8]
  VolumeSpaceSize.q
  EscapeSequences.s{32}
  VolumeSetSize.l
  VolumeSequenceNumber.l
  LogicalBlockSize.l
  PathTableSize.q
  LocationOfTypeLPathTable.l
  LocationOfOptionalTypeLPathTable.l
  LocationOfTypeMPathTable.l
  LocationOfOptionalTypeMPathTable.l
  LocationDirectoryEntryRoot.ROOT_DIRECTORY_RECORD
  VolumeSetIdentifier.s{128}
  PublisherIdentifier.s{128}
  DataPreparerIdentifier.s{128}
  ApplicationIdentifier.s{128}
  CopyrightFileIdentifier.s{37}
  AbstractFileIdentifier.s{37}
  BibliographicFileIdentifier.s{37}
  VolumeCreatedTimeDate.PRIMARY_ROOT_DATE_TIME
  VolumeMidifiedTimeDate.PRIMARY_ROOT_DATE_TIME
  VolumeExpiratedTimeDate.PRIMARY_ROOT_DATE_TIME
  VolumeEffectiveTimeDate.PRIMARY_ROOT_DATE_TIME
  FilestructureVersion.a
  Unused3.a
  ApplicationUsed.s{512}
  Reserved.a[653]
EndStructure

Structure FILE_DIRECTORY_DESCRIPTORS
  DirectoryLenRecord.a
  ExtendedAttributeRecordLen.a
  LocationofExtent.q
  DataLength.q
  RecordingDateTime.FILE_DIRECTORY_DATE_TIME
  FileFlags.a
  FileUnitSize.a
  InterleaveGapSize.a
  VolumeSequenceNumber.l
  LengthofFileIdentifier.a
  FileIdentifier.a
EndStructure

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

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

Define i.i
Define j.i
Define ifile.i
Define iflen.i
Define iseek.i
Define itemp.i
Define atemp.a
Define btemp.b
Define stemp.s

Define szfile.s = "fileiso_0.iso"

Define pvdescriptor.PRIMARY_VOLUME_DESCRIPTOR
Define fldescriptor.FILE_DIRECTORY_DESCRIPTORS

ifile = ReadFile(#PB_Any, szfile)
If ifile
  iflen = Lof(ifile)
  
  ; LES 16 PREMIERS SECTEURS SONT A VIDE. 
  ; 1 SECTEUR = 2048 PAQUETS DONC DEPLACEMENT DE "16 x 2048".
  iseek = 16 * #CDFS_SIZE_2048
  FileSeek(ifile, iseek)

  ; LECTURE DU PREMIER BLOCK D'INFORMATION.
  ; ON DOIT AVOIR "CD001" DANS LA VARIABLE "STANDADIDENTIFIER".
  ReadData(ifile, pvdescriptor,   SizeOf(PRIMARY_VOLUME_DESCRIPTOR))

  ; PASSAGE DES DIVERS TAGS DU FICHIER.
  ; AU MINIMUM IL Y A DEUX TAGS "CD001" DANS LES FICHIERS ISO.
  Debug "RECHERCHE DES TAGS :"
  Debug #NULL$
  btemp = #False
  Repeat
    atemp = ReadByte(ifile)
    stemp = ReadString(ifile, #PB_Ascii, 5)
    If stemp <> #NULL$
      i + 1
      If atemp <> 255
        Debug Str(i) + " : " + stemp + " : " + Str(atemp) 
      Else
        Debug Str(i) + " : " + stemp + " : " + Str(atemp) + " : FIN DE TAG CD001"
      EndIf
      Select stemp
        Case #VSD_STD_ID_CD001
          iseek + #CDFS_SIZE_2048
          FileSeek(ifile, iseek)
        Case #VSD_STD_ID_NSR02
          iseek + #CDFS_SIZE_2048
          FileSeek(ifile, iseek)
        Case #VSD_STD_ID_NSR03
          iseek + #CDFS_SIZE_2048
          FileSeek(ifile, iseek)
        Case #VSD_STD_ID_BEA01
          iseek + #CDFS_SIZE_2048
          FileSeek(ifile, iseek)
        Case #VSD_STD_ID_BOOT2
          iseek + #CDFS_SIZE_2048
          FileSeek(ifile, iseek)
        Case #VSD_STD_ID_CDW02
          iseek + #CDFS_SIZE_2048
          FileSeek(ifile, iseek)
        Case #VSD_STD_ID_TEA01
          iseek + (11* #CDFS_SIZE_2048)
          FileSeek(ifile, iseek)
        Default
          btemp = #True
      EndSelect
    Else
      btemp = #True
      FileSeek(ifile, iseek)
    EndIf
  Until btemp = #True  
  ; ON RECHERCHE LE PREMIER FICHIER DE L'ISO.
  ; PREMIER BIT DOIT AVOIR 34 ($22) POUR ETRE PREMIER FICHIER.
  Repeat
    i + 1
    atemp = ReadByte(ifile)
    If atemp <> 34
      iseek + #CDFS_SIZE_2048
      FileSeek(ifile, iseek)
    Else
      FileSeek(ifile, iseek)
    EndIf
  Until atemp = 34
  
  Debug #NULL$
  Debug "-----------------------"
  Debug "PREMIER FICHIER A : " + Str(Loc(ifile)) + " ($"+ Hex(Loc(ifile)) + ")"
  Debug Str(i) + " : " + Str(atemp)

  ; LE PREMIER FICHIER OU REPERTOIRE EST :
  ; LIRE A PARTIR DE l'OCTET 101 EN MEMOIRE.
  Debug #NULL$
  Debug "-----------------------"
  Debug "PREMIER FICHIER OU REPERTOIRE :"  
  ReadData(ifile, fldescriptor,   SizeOf(FILE_DIRECTORY_DESCRIPTORS))  
  
  CloseFile(ifile)
  
  ;
  ; NETOYAGE DES INFORMATIONS.
  ;
  pvdescriptor\VolumeIdentifier     = RTrim(pvdescriptor\VolumeIdentifier)
  pvdescriptor\VolumeSetIdentifier  = RTrim(pvdescriptor\VolumeSetIdentifier)
  ;
  ; NETOYAGE DES INFORMATIONS.
  ;
  
  Debug #NULL$
  Debug "-----------------------"
  Debug "INFORMATION DU CD :"
  Debug #NULL$
  Debug "VOLUME NAME : " + pvdescriptor\VolumeIdentifier
  Debug "DATA IDENTIFIER : " + pvdescriptor\DataPreparerIdentifier
  Debug #NULL$
  Debug "-----------------------"
  Debug #NULL$
  If pvdescriptor\StandardType = 1 And pvdescriptor\StandardIdentifier = #VSD_STD_ID_CD001
    Debug "ISO FILE IS OK"  
  EndIf
EndIf
Cordialement,
GallyHC
Dernière modification par GallyHC le ven. 22/mars/2013 23:55, modifié 4 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
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Chargement des fichiers ISO (c'est le debut).

Message par graph100 »

Un beau projet à réaliser en PB !

Je suivrais avec attention :D
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Chargement des fichiers ISO (c'est le debut).

Message par falsam »

graph100 a écrit :Un beau projet à réaliser en PB ! Je suivrais avec attention :D
+1
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Chargement des fichiers ISO (c'est le debut).

Message par GallyHC »

Bonjour,

Petite évolution du code enfin pas encore grand chose, juste le nom du premier fichier ou répertoire du CD et correction de code :). Mise à jour dans le premier post.

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
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Chargement des fichiers ISO CD (c'est le debut).

Message par graph100 »

Si tu as besoin de test, je peux te faire un petit retour d'expérience (peut-être quand le code sera un peu plus avancé)

:D

Prends-tu aussi en compte les ISO de DVD ? Je ne sais pas si c'est le même standard et ça m'étonnerais.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Chargement des fichiers ISO CD (c'est le debut).

Message par GallyHC »

Bonjour,

graph100> Pour le moment je ne vois que pour les CD, histoire de ne pas trop me pollué de plein de trucs inutile :). Après je verrais si cela est facilement modifiable (mais je penses qui a quelque similitude).

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: Chargement des fichiers ISO CD (c'est le debut).

Message par GallyHC »

Bonjour,

Version un peu épurer, je recherche le listage des fichiers.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre