diff --git a/lib/MSWindows/aspi32.c b/lib/MSWindows/aspi32.c index 1bcb0ef6..497c425c 100644 --- a/lib/MSWindows/aspi32.c +++ b/lib/MSWindows/aspi32.c @@ -1,5 +1,5 @@ /* - $Id: aspi32.c,v 1.26 2004/07/17 09:12:21 rocky Exp $ + $Id: aspi32.c,v 1.27 2004/07/17 10:05:54 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: aspi32.c,v 1.26 2004/07/17 09:12:21 rocky Exp $"; +static const char _rcsid[] = "$Id: aspi32.c,v 1.27 2004/07/17 10:05:54 rocky Exp $"; #include #include @@ -701,15 +701,6 @@ wnaspi32_eject_media (void *user_data) { } #endif -#define set_cdtext_field(FIELD) \ - if( i_track == 0 ) \ - env->cdtext.field[FIELD] = strdup(buffer); \ - else \ - env->tocent[i_track-1].cdtext.field[FIELD] \ - = strdup(buffer); \ - i_track++; \ - idx = 0; - /* Read cdtext information for a CdIo object . @@ -730,68 +721,9 @@ init_cdtext_aspi (_img_private_t *env) if (!scsi_passthrough_aspi(env, scsi_cdb, sizeof(scsi_cdb), wdata, sizeof(wdata))) return false; - - { - CDText_data_t *pdata; - int i; - int j; - char buffer[256]; - int idx; - int i_track; - - memset( buffer, 0x00, sizeof(buffer) ); - idx = 0; - - pdata = (CDText_data_t *) (&wdata[4]); - for( i=0; i < CDIO_CDTEXT_MAX_PACK_DATA; i++ ) { - if( pdata->seq != i ) - break; - - if( (pdata->type >= 0x80) - && (pdata->type <= 0x85) && (pdata->block == 0) ) { - i_track = pdata->i_track; - - for( j=0; j < CDIO_CDTEXT_MAX_TEXT_DATA; j++ ) { - if( pdata->text[j] == 0x00 ) - { - switch( pdata->type) { - case CDIO_CDTEXT_TITLE: - set_cdtext_field(CDTEXT_TITLE); - break; - case CDIO_CDTEXT_PERFORMER: - set_cdtext_field(CDTEXT_PERFORMER); - break; - case CDIO_CDTEXT_SONGWRITER: - set_cdtext_field(CDTEXT_SONGWRITER); - break; - case CDIO_CDTEXT_COMPOSER: - set_cdtext_field(CDTEXT_COMPOSER); - break; - case CDIO_CDTEXT_ARRANGER: - set_cdtext_field(CDTEXT_ARRANGER); - break; - case CDIO_CDTEXT_MESSAGE: - set_cdtext_field(CDTEXT_MESSAGE); - break; - case CDIO_CDTEXT_DISCID: - set_cdtext_field(CDTEXT_DISCID); - break; - case CDIO_CDTEXT_GENRE: - set_cdtext_field(CDTEXT_GENRE); - break; - } - } - else { - buffer[idx++] = pdata->text[j]; - } - buffer[idx] = 0x00; - } - } - pdata++; - } - } - - return true; + else + return cdtext_data_init(env, env->i_first_track, wdata, + set_cdtext_field_win32); } /*! diff --git a/lib/MSWindows/win32.c b/lib/MSWindows/win32.c index 22a2e549..8839537d 100644 --- a/lib/MSWindows/win32.c +++ b/lib/MSWindows/win32.c @@ -1,5 +1,5 @@ /* - $Id: win32.c,v 1.23 2004/07/17 09:12:21 rocky Exp $ + $Id: win32.c,v 1.24 2004/07/17 10:05:54 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -26,7 +26,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: win32.c,v 1.23 2004/07/17 09:12:21 rocky Exp $"; +static const char _rcsid[] = "$Id: win32.c,v 1.24 2004/07/17 10:05:54 rocky Exp $"; #include #include @@ -427,6 +427,23 @@ _get_arg_win32 (void *user_data, const char key[]) return NULL; } +void +set_cdtext_field_win32(void *user_data, track_t i_track, + track_t i_first_track, + cdtext_field_t e_field, const char *psz_value) +{ + char **pp_field; + _img_private_t *env = user_data; + + if( i_track == 0 ) + pp_field = &(env->cdtext.field[e_field]); + + else + pp_field = &(env->tocent[i_track-i_first_track].cdtext.field[e_field]); + + *pp_field = strdup(psz_value); +} + /*! Return the value associated with the key "arg". */ @@ -553,7 +570,7 @@ _cdio_get_track_green(void *obj, track_t i_track) /* FIXME: Dunno if this is the right way, but it's what I was using in cd-info for a while. */ - return ((env->tocent[i_track-1].Control & 2) != 0); + return ((env->tocent[i_track-env->i_first_track].Control & 2) != 0); } /*! diff --git a/lib/MSWindows/win32.h b/lib/MSWindows/win32.h index 85226e72..a3f0503f 100644 --- a/lib/MSWindows/win32.h +++ b/lib/MSWindows/win32.h @@ -1,5 +1,5 @@ /* - $Id: win32.h,v 1.11 2004/07/17 09:12:21 rocky Exp $ + $Id: win32.h,v 1.12 2004/07/17 10:05:54 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -136,3 +136,8 @@ cdio_drive_cap_t get_drive_cap_win32ioctl (const _img_private_t *env); */ track_format_t get_track_format_win32ioctl(const _img_private_t *env, track_t i_track); + +void set_cdtext_field_win32(void *user_data, track_t i_track, + track_t i_first_track, + cdtext_field_t e_field, const char *psz_value); + diff --git a/lib/MSWindows/win32_ioctl.c b/lib/MSWindows/win32_ioctl.c index 371493e6..05a276bc 100644 --- a/lib/MSWindows/win32_ioctl.c +++ b/lib/MSWindows/win32_ioctl.c @@ -1,5 +1,5 @@ /* - $Id: win32_ioctl.c,v 1.15 2004/07/17 09:12:21 rocky Exp $ + $Id: win32_ioctl.c,v 1.16 2004/07/17 10:05:54 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -26,7 +26,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: win32_ioctl.c,v 1.15 2004/07/17 09:12:21 rocky Exp $"; +static const char _rcsid[] = "$Id: win32_ioctl.c,v 1.16 2004/07/17 10:05:54 rocky Exp $"; #include #include @@ -449,68 +449,10 @@ init_cdtext_win32ioctl (_img_private_t *env) cdio_info("Error reading cdtext: %s", psz_msg); LocalFree(psz_msg); return false; + } else { + return cdtext_data_init(env, env->i_first_track, wdata, + set_cdtext_field_win32); } - - { - CDText_data_t *pdata; - int i; - int j; - char buffer[256]; - int idx; - int i_track; - - memset( buffer, 0x00, sizeof(buffer) ); - idx = 0; - - pdata = (CDText_data_t *) (&wdata[4]); - for( i=0; i < CDIO_CDTEXT_MAX_PACK_DATA; i++ ) { - if( pdata->seq != i ) - break; - - if( (pdata->type >= 0x80) - && (pdata->type <= 0x85) && (pdata->block == 0) ) { - i_track = pdata->i_track; - - for( j=0; j < CDIO_CDTEXT_MAX_TEXT_DATA; j++ ) { - if( pdata->text[j] == 0x00 ) - { - switch( pdata->type) { - case CDIO_CDTEXT_TITLE: - set_cdtext_field(CDTEXT_TITLE); - break; - case CDIO_CDTEXT_PERFORMER: - set_cdtext_field(CDTEXT_PERFORMER); - break; - case CDIO_CDTEXT_SONGWRITER: - set_cdtext_field(CDTEXT_SONGWRITER); - break; - case CDIO_CDTEXT_COMPOSER: - set_cdtext_field(CDTEXT_COMPOSER); - break; - case CDIO_CDTEXT_ARRANGER: - set_cdtext_field(CDTEXT_ARRANGER); - break; - case CDIO_CDTEXT_MESSAGE: - set_cdtext_field(CDTEXT_MESSAGE); - break; - case CDIO_CDTEXT_DISCID: - set_cdtext_field(CDTEXT_DISCID); - break; - case CDIO_CDTEXT_GENRE: - set_cdtext_field(CDTEXT_GENRE); - break; - } - } - else { - buffer[idx++] = pdata->text[j]; - } - buffer[idx] = 0x00; - } - } - pdata++; - } - } - return true; } /*!