Estrarre i dati presenti in un CD-Audio con le risorse di linux/cdrom.h

Da Gambas-it.org - Wikipedia.

Con alcune risorse dichiarate nel file header "linux/cdrom.h" è possibile estrarre i dati memorizzati in un CD-Audio.
Il punto iniziale, dal quale leggere i dati, sarà individuato in base ai minuti, secondi e frame.

Mostriamo un possibile esempio:

Library "libc:6"

Private Const CDROMREADRAW As Long = &5314
Private Const CD_FRAMES As Integer = 75
Private Const CD_FRAMESIZE_RAW As Integer = 2352

' int ioctl (int __fd, unsigned long int __request, ...)
' Perform the I/O control operation specified by REQUEST on FD.
Private Extern ioctl(__fd As Integer, __request As Long, par As Pointer) As Integer


Public Sub Main()
 
 Dim fl As File
 Dim arg As Pointer
 Dim st As Stream
 Dim frame, i As Integer
 
 fl = Open "/dev/sr0" For Read
 
' Legge per 75 frame:
 For frame = 0 To (CD_FRAMES - 1)
   arg = Alloc(SizeOf(gb.Byte), CD_FRAMESIZE_RAW)
   st = Memory arg For Write
   
' Legge i dati presenti - ad esempio - partendo da 4' 0" 0frame:
   Write #st, 4 As Byte           ' Minuti
   Write #st, 0 As Byte           ' Secondi
   Write #st, frame As Byte       ' Frame
   
   i = ioctl(fl.Handle, CDROMREADRAW, arg)
   If i < 0 Then Error.Raise("ERRORE !")
   Print "Frame: "; frame
   Wait 0.5
   For i = 0 To (CD_FRAMESIZE_RAW - 1)
     Print i, Hex(Byte@(arg + i), 2)
   Next
   Print "------------"
   st.Close
   Free(arg)
 Next
 Print "=== Termine lettura dati ==="
 fl.Close
   
End