--- dagrab.c.orig Sun Feb 20 01:32:46 2000 +++ dagrab.c Mon Aug 7 19:29:28 2000 @@ -94,26 +94,20 @@ #include #include #include -#include #include #include -#include #include #include -#define __need_timeval /* needed by glibc */ -#include -#include -#ifdef USE_UCDROM -#include -#endif -#include #include #include #include #include #include +#include +#include +#include #define CDDEVICE "/dev/cdrom" -#define N_BUF 8 +#define N_BUF 12 #define OVERLAP 2 #define KEYLEN 12 #define OFS 12 @@ -123,12 +117,18 @@ #define D_MODE 0660 #define CDDB_MAX 65535 #define CDDB_PORT 888 +#ifndef CDDB_PATH #define CDDB_PATH "/usr/lib/X11/xmcd/cddb" +#endif #define CDDB_HOST "freedb.freedb.org" //#define USE_CDDB (opt_save||opt_name) #define USE_CDDB opt_cddb #define PROGNAME "dagrab" #define VERSION "0.3.5" +#define CD_MSF_OFFSET 150 +#define CDROM_DATA_TRACK 4 +#define CDROM_LEADOUT 0xaa +#define CD_FRAMESIZE_RAW 2352 #define KW_TRACK 0 #define KW_FULLD 1 #define KW_AUTHOR 2 @@ -226,16 +226,16 @@ return buf; } -int cd_get_tochdr(struct cdrom_tochdr *Th) +int cd_get_tochdr(struct ioc_toc_header *Th) { - return ioctl(cdrom_fd,CDROMREADTOCHDR,Th); + return ioctl(cdrom_fd,CDIOREADTOCHEADER,Th); } -int cd_get_tocentry(int trk,struct cdrom_tocentry *Te,int mode) +int cd_get_tocentry(int trk,struct ioc_read_toc_single_entry *Te,int mode) { - Te->cdte_track=trk; - Te->cdte_format=mode; - return ioctl(cdrom_fd,CDROMREADTOCENTRY,Te); + Te->track=trk; + Te->address_format=mode; + return ioctl(cdrom_fd,CDIOREADTOCENTRY,Te); } void cd_read_audio(int lba,int num,char *buf) @@ -244,13 +244,13 @@ /*NOTE: if num>CDROM_NBLOCKS_BUFFER as defined in ide_cd.c (8 in linux 2.0.32) jitter correction may be required inside the block. */ { - struct cdrom_read_audio ra; + struct ioc_read_audio ra; - ra.addr.lba=lba; - ra.addr_format=CDROM_LBA; + ra.address.lba=lba; + ra.address_format=CD_LBA_FORMAT; ra.nframes=num; - ra.buf=buf; - if(ioctl(cdrom_fd,CDROMREADAUDIO,&ra)){ + ra.buffer=buf; + if(ioctl(cdrom_fd,CDIOCREADAUDIO,&ra)){ /*fprintf(stderr,"%s: read raw ioctl failed \n",progname);*/ fprintf(stderr,"\n%s: read raw ioctl failed at lba %d length %d: %s\n", progname,lba,num,strerror(errno)); @@ -471,7 +471,7 @@ DIR *d; struct dirent *e; char *id2,*p,*cddb,*loc; - int i,cddbs,locs; + int i,cddbs,locs=0; char id[12]; char *path; char path2[500]; @@ -645,10 +645,10 @@ int cd_getinfo(char *cd_dev,struct cd_trk_list *tl) { int i; - struct cdrom_tochdr Th; - struct cdrom_tocentry Te; + struct ioc_toc_header Th; + struct ioc_read_toc_single_entry Te; - if ((cdrom_fd=open(cd_dev,O_RDONLY|O_NONBLOCK))==-1){ + if ((cdrom_fd=open(cd_dev,O_RDONLY))==-1){ fprintf(stderr,"%s: error opening device %s\n",progname,cd_dev); exit(1); } @@ -656,7 +656,7 @@ fprintf(stderr,"%s: read TOC ioctl failed: %s\n",progname,strerror(errno)); exit(1); } - tl->min=Th.cdth_trk0;tl->max=Th.cdth_trk1; + tl->min=Th.starting_track;tl->max=Th.ending_track; if((tl->starts=(int *)malloc((tl->max-tl->min+2)*sizeof(int)))==NULL){ fprintf(stderr,"%s: list data allocation failed\n",progname); exit(1); @@ -668,21 +668,21 @@ for (i=tl->min;i<=tl->max;i++) { - if(cd_get_tocentry(i,&Te,CDROM_LBA)){ + if(cd_get_tocentry(i,&Te,CD_LBA_FORMAT)){ fprintf(stderr,"%s: read TOC entry ioctl failed: %s\n", progname,strerror(errno)); exit(1); } - tl->starts[i-tl->min]=Te.cdte_addr.lba; - tl->types[i-tl->min]=Te.cdte_ctrl&CDROM_DATA_TRACK; + tl->starts[i-tl->min]=ntohl(Te.entry.addr.lba); + tl->types[i-tl->min]=Te.entry.control&CDROM_DATA_TRACK; } i=CDROM_LEADOUT; - if(cd_get_tocentry(i,&Te,CDROM_LBA)){ + if(cd_get_tocentry(i,&Te,CD_LBA_FORMAT)){ fprintf(stderr,"%s: read TOC entry ioctl failed: %s\n",progname,strerror(errno)); exit(1); } - tl->starts[tl->max-tl->min+1]=Te.cdte_addr.lba; - tl->types[tl->max-tl->min+1]=Te.cdte_ctrl&CDROM_DATA_TRACK; + tl->starts[tl->max-tl->min+1]=ntohl(Te.entry.addr.lba); + tl->types[tl->max-tl->min+1]=Te.entry.control&CDROM_DATA_TRACK; i=cddb_main(tl); if(i==-1) { @@ -961,7 +961,7 @@ int main(int ac,char **av) { int i,l,disp_TOC=0; - char c; + int c; int all_tracks=0; struct cd_trk_list tl; char cd_dev[BLEN+1]=CDDEVICE; @@ -969,10 +969,8 @@ char filter[BLEN+1] = ""; char path[500]; FILE *f; - progname=av[0]; - optind=0; - while((c=getopt(ac,av,"d:f:n:o:k:r:t:m:e:H:P:D:pshaivCSN"))!=EOF){ + while((c=getopt(ac,av,"pshaivCSNd:f:n:o:k:r:t:m:e:H:P:D:"))!=-1){ switch(c){ case 'h':usage();break; case 'd':CPARG(cd_dev);break;