Differenze tra le versioni di "Conoscere le proprietà di un drive CD con le funzioni del API di libcdio"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
 
La libreria '''''Libcdio''''' consente di gestire i CD ed i relativi driver presenti nel sistema.
 
La libreria '''''Libcdio''''' consente di gestire i CD ed i relativi driver presenti nel sistema.
  
Per utilizzare le funzioni esterne del API di ''libcdio'' sarà necessario richiamare l'attuale libreria: "''libcdio.so.17.0.0''".
+
Per utilizzare le funzioni esterne del API di ''libcdio'' sarà necessario richiamare l'attuale libreria: "''libcdio.so.19.0.0'' ".
 
 
  
 
Mostriamo un semplice codice che consentirà di conoscere le proprietà hardware di un drive CD:
 
Mostriamo un semplice codice che consentirà di conoscere le proprietà hardware di un drive CD:
  Library "libcdio:17.0.0"
+
  Library "libcdio:19.0.0"
 
   
 
   
 
  Private Enum DRIVER_UNKNOWN = 0, DRIVER_AIX, DRIVER_FREEBSD, DRIVER_NETBSD, DRIVER_LINUX, DRIVER_SOLARIS,
 
  Private Enum DRIVER_UNKNOWN = 0, DRIVER_AIX, DRIVER_FREEBSD, DRIVER_NETBSD, DRIVER_LINUX, DRIVER_SOLARIS,
Riga 52: Riga 51:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim p_cdio As Pointer
 
   Dim p_cdio As Pointer
Riga 58: Riga 57:
 
   Dim legge_cap, scrive_cap, i_misc_cap, driver As Integer
 
   Dim legge_cap, scrive_cap, i_misc_cap, driver As Integer
 
   
 
   
+
  p_cdio = cdio_open(Null, DRIVER_UNKNOWN)
  p_cdio = cdio_open(Null, DRIVER_UNKNOWN)
+
  If p_cdio == 0 Then Error.Raise("Impossibile trovare il driver per il CD !")
  If IsNull(p_cdio) Then Error.Raise("Impossibile trovare il driver per il CD !")
 
 
    
 
    
  Print "-- Il driver selezionato è: "; cdio_get_driver_name(p_cdio)
+
  Print "-- Il driver selezionato è: "; cdio_get_driver_name(p_cdio)
 
    
 
    
  default_device = cdio_get_default_device(p_cdio)
+
  default_device = cdio_get_default_device(p_cdio)
  If IsNull(default_device) = False Then Print "-- Il dispositivo predefinito per questo driver è: "; default_device
+
  If IsNull(default_device) = False Then Print "-- Il dispositivo predefinito per questo driver è: "; default_device
 
    
 
    
  cdio_get_drive_cap(p_cdio, VarPtr(legge_cap), VarPtr(scrive_cap), VarPtr(i_misc_cap))
+
  cdio_get_drive_cap(p_cdio, VarPtr(legge_cap), VarPtr(scrive_cap), VarPtr(i_misc_cap))
 
    
 
    
  Funzionalita_Drive(legge_cap, scrive_cap, i_misc_cap)
+
  Funzionalita_Drive(legge_cap, scrive_cap, i_misc_cap)
 
  Print
 
 
   
 
   
  For driver = 1 To 12
+
  Print
    If cdio_have_driver(driver)
 
      Print "-- E' presente: ", cdio_driver_describe(driver)
 
    Else
 
      Print "-- Non è presente: ", cdio_driver_describe(driver)
 
    Endif
 
  Next
 
 
   
 
   
 +
  For driver = 1 To 12
 +
    If cdio_have_driver(driver)
 +
      Print "-- E' presente: ", cdio_driver_describe(driver)
 +
    Else
 +
      Print "-- Non è presente: ", cdio_driver_describe(driver)
 +
    Endif
 +
  Next
 
   
 
   
 
  <FONT Color=gray>' ''Va in chiusura:''</font>
 
  <FONT Color=gray>' ''Va in chiusura:''</font>
  cdio_destroy(p_cdio)
+
  cdio_destroy(p_cdio)
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Private''' Procedure Funzionalita_Drive(read_cap As Integer, write_cap As Integer, misc_cap As Integer)
+
  Private Procedure Funzionalita_Drive(read_cap As Integer, write_cap As Integer, misc_cap As Integer)
 
   
 
   
 
   Dim s As String
 
   Dim s As String
 
   
 
   
  If CDIO_DRIVE_CAP_ERROR = misc_cap Then
+
  If CDIO_DRIVE_CAP_ERROR = misc_cap Then
    Print "Errore nel tentativo di ottenere le proprietà hardware del drive\n"
+
    Print "Errore nel tentativo di ottenere le proprietà hardware del drive\n"
  Else
+
  Else
    If (misc_cap And CDIO_DRIVE_CAP_MISC_FILE) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_FILE) Then
      s = "Disk Image"
+
      s = "Disk Image"
    Else
+
    Else
      s = "CD-ROM o DVD"
+
      s = "CD-ROM o DVD"
    Endif
+
    Endif
    Print "-- Hardware: ", s
+
    Print "-- Hardware: ", s
 
      
 
      
    If (misc_cap And CDIO_DRIVE_CAP_MISC_EJECT) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_EJECT) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile l'espulsione del disco: ", s
+
    Print "-- E' possibile l'espulsione del disco: ", s
 
      
 
      
    If (misc_cap And CDIO_DRIVE_CAP_MISC_CLOSE_TRAY) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_CLOSE_TRAY) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile la chiusura del vassoio: ", s
+
    Print "-- E' possibile la chiusura del vassoio: ", s
   
 
    If (misc_cap And CDIO_DRIVE_CAP_MISC_LOCK) Then
 
      s = "Sì"
 
    Else
 
      s = "No"
 
    Endif
 
    Print "-- E' possibile l'espulsione manuale del disco: ", s
 
 
      
 
      
    If (misc_cap And CDIO_DRIVE_CAP_MISC_SELECT_DISC) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_LOCK) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile selezionare un disco juke-box: ", s
+
    Print "-- E' possibile l'espulsione manuale del disco: ", s
 
      
 
      
    If (misc_cap And CDIO_DRIVE_CAP_MISC_SELECT_SPEED) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_SELECT_DISC) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile impostare la velocità del drive: ", s
+
    Print "-- E' possibile selezionare un disco juke-box: ", s
 +
 
 +
    If (misc_cap And CDIO_DRIVE_CAP_MISC_SELECT_SPEED) Then
 +
      s = "Sì"
 +
    Else
 +
      s = "No"
 +
    Endif
 +
    Print "-- E' possibile impostare la velocità del drive: ", s
 
      
 
      
    If (misc_cap And CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile verificare se il CD è cambiato: ", s
+
    Print "-- E' possibile verificare se il CD è cambiato: ", s
 
      
 
      
    If (misc_cap And CDIO_DRIVE_CAP_MISC_MULTI_SESSION) Then
+
    If (misc_cap And CDIO_DRIVE_CAP_MISC_MULTI_SESSION) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile leggere sessioni multiple: ", s
+
    Print "-- E' possibile leggere sessioni multiple: ", s
      
+
 
    If (misc_cap And CDIO_DRIVE_CAP_MISC_RESET) Then
+
     If (misc_cap And CDIO_DRIVE_CAP_MISC_RESET) Then
      s = "Sì"
+
      s = "Sì"
    Else
+
    Else
      s = "No"
+
      s = "No"
    Endif
+
    Endif
    Print "-- E' possibile un hard reset del dispositivo: ", s
+
    Print "-- E' possibile un hard reset del dispositivo: ", s
  Endif
+
  Endif
 
+
 
    
+
   If (CDIO_DRIVE_CAP_ERROR = read_cap) Then
  If (CDIO_DRIVE_CAP_ERROR = read_cap) Then
+
    Print "\nErrore nel tentativo di ottenere le proprietà di lettura del drive\n"
    Print "\nErrore nel tentativo di ottenere le proprietà di lettura del drive\n"
+
  Else  
  Else  
+
    Print "\n-- LETTURA --"
    Print "\n-- LETTURA --"
+
    If (read_cap And CDIO_DRIVE_CAP_READ_AUDIO) Then
    If (read_cap And CDIO_DRIVE_CAP_READ_AUDIO) Then
+
      s = "Sì"
      s = "Sì"
+
    Else
    Else
+
      s = "No"
      s = "No"
+
    Endif
    Endif
+
    Print "--  E' possibile eseguire l'audio: ", s
    Print "--  E' possibile eseguire l'audio: ", s
+
    If (read_cap And CDIO_DRIVE_CAP_READ_CD_R) Then
+
      s = "Sì"
    If (read_cap And CDIO_DRIVE_CAP_READ_CD_R) Then
+
    Else
      s = "Sì"
+
      s = "No"
    Else
+
    Endif
      s = "No"
+
    Print "--  E' possibile leggere un  CD-R: ", s
    Endif
+
    If (read_cap And CDIO_DRIVE_CAP_READ_CD_RW) Then
    Print "--  E' possibile leggere un  CD-R: ", s
+
      s = "Sì"
+
    Else
    If (read_cap And CDIO_DRIVE_CAP_READ_CD_RW) Then
+
      s = "No"
      s = "Sì"
+
    Endif
    Else
+
    Print "--  E' possibile leggere un  CD-RW: ", s
      s = "No"
+
 
    Endif
+
    If (read_cap And CDIO_DRIVE_CAP_READ_DVD_ROM) Then
    Print "--  E' possibile leggere un  CD-RW: ", s
+
      s = "Sì"
+
    Else
    If (read_cap And CDIO_DRIVE_CAP_READ_DVD_ROM) Then
+
      s = "No"
      s = "Sì"
+
    Endif
    Else
+
    Print "--  E' possibile leggere un  DVD-ROM: ", s
      s = "No"
+
   Endif
    Endif
 
    Print "--  E' possibile leggere un  DVD-ROM: ", s
 
  Endif
 
 
 
    
 
  If CDIO_DRIVE_CAP_ERROR = write_cap Then
 
    Print "\nErrore nel tentativo di ottenere le proprietà di scrittura del drive\n"
 
  Else
 
    Print "\n-- SCRITTURA --"
 
   
 
    If (read_cap And CDIO_DRIVE_CAP_READ_CD_RW) Then
 
      s = "Sì"
 
    Else
 
      s = "No"
 
    Endif
 
    Print "--  E' possibile scrivere un  CD-RW: ", s
 
 
      
 
      
    If (write_cap And CDIO_DRIVE_CAP_READ_DVD_R) Then
+
  If CDIO_DRIVE_CAP_ERROR = write_cap Then
      s = "Sì"
+
    Print "\nErrore nel tentativo di ottenere le proprietà di scrittura del drive\n"
    Else
+
  Else
      s = "No"
+
    Print "\n-- SCRITTURA --"
    Endif
+
    If (read_cap And CDIO_DRIVE_CAP_READ_CD_RW) Then
    Print "--  E' possibile scrivere un  DVD-R: ", s
+
      s = "Sì"
   
+
    Else
    If (write_cap And CDIO_DRIVE_CAP_READ_DVD_RAM) Then
+
      s = "No"
      s = "Sì"
+
    Endif
    Else
+
    Print "--  E' possibile scrivere un  CD-RW: ", s
      s = "No"
+
    If (write_cap And CDIO_DRIVE_CAP_READ_DVD_R) Then
    Endif
+
      s = "Sì"
    Print "--  E' possibile scrivere un  DVD-RAM:", s     
+
    Else
  Endif
+
      s = "No"
 +
    Endif
 +
    Print "--  E' possibile scrivere un  DVD-R: ", s
 +
    If (write_cap And CDIO_DRIVE_CAP_READ_DVD_RAM) Then
 +
      s = "Sì"
 +
    Else
 +
      s = "No"
 +
    Endif
 +
    Print "--  E' possibile scrivere un  DVD-RAM:", s     
 +
  Endif
 
    
 
    
  '''End'''
+
  End
 
 
  
  

Versione attuale delle 08:13, 4 giu 2024

La libreria Libcdio consente di gestire i CD ed i relativi driver presenti nel sistema.

Per utilizzare le funzioni esterne del API di libcdio sarà necessario richiamare l'attuale libreria: "libcdio.so.19.0.0 ".

Mostriamo un semplice codice che consentirà di conoscere le proprietà hardware di un drive CD:

Library "libcdio:19.0.0"

Private Enum DRIVER_UNKNOWN = 0, DRIVER_AIX, DRIVER_FREEBSD, DRIVER_NETBSD, DRIVER_LINUX, DRIVER_SOLARIS,
             DRIVER_OSX, DRIVER_WIN32, DRIVER_CDRDAO, DRIVER_BINCUE, DRIVER_NRG, DRIVER_DEVICE

Private Enum CDIO_DRIVE_CAP_ERROR = &40000, CDIO_DRIVE_CAP_UNKNOWN = &80000, CDIO_DRIVE_CAP_MISC_CLOSE_TRAY = &00001, CDIO_DRIVE_CAP_MISC_EJECT = &00002, CDIO_DRIVE_CAP_MISC_LOCK = &00004,
             CDIO_DRIVE_CAP_MISC_SELECT_SPEED = &00008, CDIO_DRIVE_CAP_MISC_SELECT_DISC = &00010, CDIO_DRIVE_CAP_MISC_MULTI_SESSION = &00020, CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED = &00080,
             CDIO_DRIVE_CAP_MISC_RESET = &00100, CDIO_DRIVE_CAP_MISC_FILE = &20000
             
Private Enum CDIO_DRIVE_CAP_READ_AUDIO = &00001, CDIO_DRIVE_CAP_READ_CD_DA = &00002, CDIO_DRIVE_CAP_READ_CD_G = &00004, CDIO_DRIVE_CAP_READ_CD_R = &00008,
             CDIO_DRIVE_CAP_READ_CD_RW = &00010, CDIO_DRIVE_CAP_READ_DVD_R = &00020, CDIO_DRIVE_CAP_READ_DVD_PR = &00040, CDIO_DRIVE_CAP_READ_DVD_RAM = &00080,
             CDIO_DRIVE_CAP_READ_DVD_ROM = &00100, CDIO_DRIVE_CAP_READ_DVD_RW = &00200, CDIO_DRIVE_CAP_READ_DVD_RPW = &00400, CDIO_DRIVE_CAP_READ_C2_ERRS = &00800,
             CDIO_DRIVE_CAP_READ_MODE2_FORM1 = &01000, CDIO_DRIVE_CAP_READ_MODE2_FORM2 = &02000, CDIO_DRIVE_CAP_READ_MCN = &04000, CDIO_DRIVE_CAP_READ_ISRC = &08000
 
Private Enum CDIO_DRIVE_CAP_WRITE_CD_R = &00001, CDIO_DRIVE_CAP_WRITE_CD_RW = &00002, CDIO_DRIVE_CAP_WRITE_DVD_R = &00004, CDIO_DRIVE_CAP_WRITE_DVD_PR = &00008,
             CDIO_DRIVE_CAP_WRITE_DVD_RAM = &00010, CDIO_DRIVE_CAP_WRITE_DVD_RW = &00020, CDIO_DRIVE_CAP_WRITE_DVD_RPW = &00040, CDIO_DRIVE_CAP_WRITE_MT_RAINIER = &00080,
             CDIO_DRIVE_CAP_WRITE_BURN_PROOF = &00100, CDIO_DRIVE_CAP_WRITE_CD = 3, CDIO_DRIVE_CAP_WRITE_DVD = 124, CDIO_DRIVE_CAP_WRITE = 127
           
' CdIo_t * cdio_open (const char *psz_source, driver_id_t driver_id)
' Sets up to read from place specified by psz_source and driver_id.
Private Extern cdio_open(psz_source As String, driver_id As Integer) As Pointer

' char* cdio_get_default_device(const CdIo_t * p_cdio)
' Get the default CD device.
Private Extern cdio_get_default_device(cdioP As Pointer) As String

' const char* cdio_get_driver_name(const CdIo_t * p_cdio)
' Get a string containing the name of the driver in use.
Private Extern cdio_get_driver_name(cdioP As Pointer) As String

' void cdio_get_drive_cap(const CdIo_t *p_cdio, cdio_drive_read_cap_t *p_read_cap, cdio_drive_write_cap_t *p_write_cap, cdio_drive_misc_cap_t *p_misc_cap)
' Get the what kind of device we've got.
Private Extern cdio_get_drive_cap(cdioP As Pointer, p_read_cap As Pointer, p_write_cap As Pointer, p_misc_cap As Pointer)

' bool cdio_have_driver(driver_id_t driver_id)
' Like cdio_have_xxx but uses an enumeration instead.
Private Extern cdio_have_driver(driver_id As Integer) As Boolean

' const char* cdio_driver_describe(driver_id_t driver_id)
' Get a string decribing driver_id.
Private Extern cdio_driver_describe(driver_id As Integer) As String

' void cdio_destroy(CdIo_t * p_cdio)
' Free any resources associated with p_cdio.
Private Extern cdio_destroy(cdioP As Pointer)


Public Sub Main()

 Dim p_cdio As Pointer
 Dim default_device As String
 Dim legge_cap, scrive_cap, i_misc_cap, driver As Integer

 p_cdio = cdio_open(Null, DRIVER_UNKNOWN)
 If p_cdio == 0 Then Error.Raise("Impossibile trovare il driver per il CD !")
 
 Print "-- Il driver selezionato è: "; cdio_get_driver_name(p_cdio)
 
 default_device = cdio_get_default_device(p_cdio)
 If IsNull(default_device) = False Then Print "-- Il dispositivo predefinito per questo driver è: "; default_device
 
 cdio_get_drive_cap(p_cdio, VarPtr(legge_cap), VarPtr(scrive_cap), VarPtr(i_misc_cap))
 
 Funzionalita_Drive(legge_cap, scrive_cap, i_misc_cap)

 Print

 For driver = 1 To 12
   If cdio_have_driver(driver)
     Print "-- E' presente: ", cdio_driver_describe(driver)
   Else
     Print "-- Non è presente: ", cdio_driver_describe(driver)
   Endif
 Next

' Va in chiusura:
 cdio_destroy(p_cdio)

End


Private Procedure Funzionalita_Drive(read_cap As Integer, write_cap As Integer, misc_cap As Integer)

 Dim s As String

 If CDIO_DRIVE_CAP_ERROR = misc_cap Then
   Print "Errore nel tentativo di ottenere le proprietà hardware del drive\n"
 Else
   If (misc_cap And CDIO_DRIVE_CAP_MISC_FILE) Then
     s = "Disk Image"
   Else
     s = "CD-ROM o DVD"
   Endif
   Print "-- Hardware: ", s
   
   If (misc_cap And CDIO_DRIVE_CAP_MISC_EJECT) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile l'espulsione del disco: ", s
    
   If (misc_cap And CDIO_DRIVE_CAP_MISC_CLOSE_TRAY) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile la chiusura del vassoio: ", s
   
   If (misc_cap And CDIO_DRIVE_CAP_MISC_LOCK) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile l'espulsione manuale del disco: ", s
   
   If (misc_cap And CDIO_DRIVE_CAP_MISC_SELECT_DISC) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile selezionare un disco juke-box: ", s
  
   If (misc_cap And CDIO_DRIVE_CAP_MISC_SELECT_SPEED) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile impostare la velocità del drive: ", s
   
   If (misc_cap And CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile verificare se il CD è cambiato: ", s
    
   If (misc_cap And CDIO_DRIVE_CAP_MISC_MULTI_SESSION) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile leggere sessioni multiple: ", s
  
   If (misc_cap And CDIO_DRIVE_CAP_MISC_RESET) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "-- E' possibile un hard reset del dispositivo: ", s
 Endif
  
 If (CDIO_DRIVE_CAP_ERROR = read_cap) Then
   Print "\nErrore nel tentativo di ottenere le proprietà di lettura del drive\n"
 Else 
   Print "\n-- LETTURA --"
   If (read_cap And CDIO_DRIVE_CAP_READ_AUDIO) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile eseguire l'audio: ", s
   If (read_cap And CDIO_DRIVE_CAP_READ_CD_R) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile leggere un  CD-R: ", s
   If (read_cap And CDIO_DRIVE_CAP_READ_CD_RW) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile leggere un  CD-RW: ", s
   If (read_cap And CDIO_DRIVE_CAP_READ_DVD_ROM) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile leggere un  DVD-ROM: ", s
 Endif
   
 If CDIO_DRIVE_CAP_ERROR = write_cap Then
   Print "\nErrore nel tentativo di ottenere le proprietà di scrittura del drive\n"
 Else
   Print "\n-- SCRITTURA --"
   If (read_cap And CDIO_DRIVE_CAP_READ_CD_RW) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile scrivere un  CD-RW: ", s
   If (write_cap And CDIO_DRIVE_CAP_READ_DVD_R) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile scrivere un  DVD-R: ", s
   If (write_cap And CDIO_DRIVE_CAP_READ_DVD_RAM) Then
     s = "Sì"
   Else
     s = "No"
   Endif
   Print "--  E' possibile scrivere un  DVD-RAM:", s    
 Endif
 
End


Riferimenti