libnjb  2.2.7
gettr.c
#include "common.h"
static int progress (u_int64_t sent, u_int64_t total, const char* buf, unsigned len, void *data)
{
int percent = (sent*100)/total;
#ifdef __WIN32__
printf("Progress: %I64u of %I64u (%d%%)\r", sent, total, percent);
#else
printf("Progress: %llu of %llu (%d%%)\r", sent, total, percent);
#endif
fflush(stdout);
return 0;
}
static void usage (void)
{
fprintf(stderr, "gettr [ -s size ] <trackid> <filename>\n");
}
int main (int argc, char **argv)
{
njb_t njbs[NJB_MAX_DEVICES], *njb;
int n, opt, debug;
u_int32_t id, size;
extern int optind;
extern char *optarg;
char *endptr;
char *file;
debug= 0;
size= 0;
while ( (opt= getopt(argc, argv, "D:s:")) != -1 ) {
switch (opt) {
case 'D':
debug= atoi(optarg);
break;
case 's':
size= strtoul(optarg, &endptr, 10);
if ( *endptr != '\0' ) {
fprintf(stderr, "illegal size value %s\n",
optarg);
return 1;
}
break;
default:
usage();
return 1;
}
}
argc -= optind;
argv += optind;
if ( argc != 2 ) {
usage();
return 1;
}
id= strtoul(argv[0], &endptr, 10);
if ( *endptr != 0 ) {
fprintf(stderr, "illegal value %s\n", optarg);
return 1;
} else if ( ! id ) {
fprintf(stderr, "bad song id %u\n", id);
return 1;
}
file= argv[1];
if ( debug ) NJB_Set_Debug(debug);
if (NJB_Discover(njbs, 0, &n) == -1) {
fprintf(stderr, "could not locate any jukeboxes\n");
return 1;
}
if ( n == 0 ) {
fprintf(stderr, "no NJB devices found\n");
return 1;
}
njb = njbs;
if ( NJB_Open(njb) == -1 ) {
NJB_Error_Dump(njb,stderr);
return 1;
}
if ( ! size ) {
printf("Locating track %u\n", id);
while ( (tag = NJB_Get_Track_Tag(njb)) ) {
if ( tag->trid == id ) {
size = frame->data.u_int32_val;
}
}
/* Dump any pending errors */
if (NJB_Error_Pending(njb)) {
NJB_Error_Dump(njb, stderr);
}
if ( size ) {
printf("%u bytes\n", size);
} else {
fprintf(stderr, "Track %u not found\n", id);
}
}
if ( size ) {
if ( NJB_Get_Track(njb, id, size, file, progress, NULL) == -1 ) {
NJB_Error_Dump(njb, stderr);
}
printf("\n");
}
NJB_Close(njb);
return 0;
}
int NJB_Capture(njb_t *njb)
Definition: procedure.c:223
void NJB_Close(njb_t *njb)
Definition: procedure.c:184
int NJB_Discover(njb_t *njbs, int limit, int *n)
Definition: procedure.c:108
int NJB_Release(njb_t *njb)
Definition: procedure.c:266
int NJB_Open(njb_t *njb)
Definition: procedure.c:130
#define FR_SIZE
Definition: libnjb.h:112
int NJB_Error_Pending(njb_t *njb)
Definition: njb_error.c:303
void NJB_Set_Debug(int debug_flags)
Definition: procedure.c:2819
void NJB_Error_Dump(njb_t *njb, FILE *fp)
Definition: njb_error.c:418
void NJB_Songid_Destroy(njb_songid_t *song)
Definition: songid.c:673
void NJB_Reset_Get_Track_Tag(njb_t *njb)
Definition: procedure.c:460
njb_songid_t * NJB_Get_Track_Tag(njb_t *njb)
Definition: procedure.c:503
int NJB_Get_Track(njb_t *njb, u_int32_t trackid, u_int32_t size, const char *path, NJB_Xfer_Callback *callback, void *data)
Definition: procedure.c:904
njb_songid_frame_t * NJB_Songid_Findframe(njb_songid_t *song, const char *label)
Definition: songid.c:739
#define NJB_MAX_DEVICES
Definition: libnjb.h:60
Definition: libnjb.h:202
u_int32_t u_int32_val
Definition: libnjb.h:212
union njb_songid_frame_struct::@0 data
Definition: libnjb.h:222
u_int32_t trid
Definition: libnjb.h:223
Definition: libnjb.h:182