Conoscere il numero delle tracce ed i numeri dei settori logici di un CD con le funzioni del API di libcdio
Da Gambas-it.org - Wikipedia.
Versione del 31 lug 2019 alle 12:27 di Vuott (Discussione | contributi)
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".
Mostriamo di seguito un semplice codice che consentirà di conoscere il numero delle tracce ed i numeri dei settori logici di un CD.
Library "libcdio:17.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 Const CDIO_INVALID_LSN As Integer = -45301 Private Const CDIO_CDROM_LEADOUT_TRACK As Integer = &AA ' 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 ' track_t cdio_get_num_tracks(const CdIo_t * p_cdio) ' Get the number of tracks on the CD. Private Extern cdio_get_num_tracks(cdioP As Pointer) As Byte ' track_t cdio_get_first_track_num(const CdIo_t * p_cdio) ' Get the number of the first track. Private Extern cdio_get_first_track_num(cdioP As Pointer) As Byte ' lsn_t cdio_get_track_lsn(const CdIo_t * p_cdio, track_t u_track) ' Return the starting LSN for track number i_track in p_cdio. Private Extern cdio_get_track_lsn(cdioP As Pointer, u_track As Integer) As Integer ' 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 tracce, prima_traccia As Byte Dim i, j, lsn As Integer p_cdio = cdio_open(Null, DRIVER_LINUX) If p_cdio = 0 Then Error.Raise("Impossibile trovare il driver per il cd-rom !") tracce = cdio_get_num_tracks(p_cdio) i = CInt(cdio_get_first_track_num(p_cdio)) prima_traccia = i Print "Tracce del CD-ROM ("; prima_traccia; " - "; prima_traccia + tracce - 1; ")" Print " #: LSN" For j = 0 To tracce - 1 lsn = cdio_get_track_lsn(p_cdio, i) If (CDIO_INVALID_LSN <> lsn) Then Print Format(i, "#0:"), Format(CLong(lsn), "000000") Inc i Next Print Hex(CDIO_CDROM_LEADOUT_TRACK, 2); ": "; CLong(cdio_get_track_lsn(p_cdio, CDIO_CDROM_LEADOUT_TRACK)); " leadout" ' Va in chiusura: cdio_destroy(p_cdio) End