Differenze tra le versioni di "Conoscere le proprietà di un drive CD con le funzioni del API di libcdio"
Da Gambas-it.org - Wikipedia.
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. | + | 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: | + | 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() | |
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) | |
− | + | 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 | ||
<FONT Color=gray>' ''Va in chiusura:''</font> | <FONT Color=gray>' ''Va in chiusura:''</font> | ||
− | + | 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 | 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 | |
− | |||
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