Bug fixes with new API call burn_make_input_sheet_v07t()

This commit is contained in:
Thomas Schmitt 2013-05-20 12:45:12 +00:00
parent 60191a71fe
commit bd8731d272
2 changed files with 67 additions and 15 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2013.05.20.110128"
#define Cdrskin_timestamP "2013.05.20.124448"

View File

@ -1259,9 +1259,30 @@ static int collect_payload(unsigned char *text_packs, int num_packs,
}
/*
@param flag bit0= use double 0 as delimiter
*/
static int is_payload_text_end(unsigned char *payload, int payload_count,
int i, int flag)
{
if (i >= payload_count)
return 1;
if (payload[i])
return 0;
if (!(flag & 1))
return 1;
if (i + 1 >= payload_count)
return 1;
if (payload[i + 1] == 0)
return 1;
return 0;
}
/*
@param flag Bitfield for control purposes.
bit0= use double 0 as delimiter
bit1= replace TAB resp. TAB TAB by text of previous tno
*/
static int pick_payload_text(unsigned char *payload, int payload_count,
int tno,
@ -1270,34 +1291,59 @@ static int pick_payload_text(unsigned char *payload, int payload_count,
{
int i, skipped = 0, end_found = 0;
again:;
if (tno <= 0) {
*text_start = payload;
*text_len = strlen((char *) payload);
*text_len = 0;
for (i = 0; i < payload_count; i += 1 + (flag & 1)) {
end_found = is_payload_text_end(payload, payload_count,
i, flag & 1);
if (end_found) {
*text_len = i;
break;
}
}
return 1;
}
*text_start = NULL;
*text_len = 0;
for (i = 0; i < payload_count; i += 1 + (flag & 1)) {
if (flag & 1) {
if (payload[i] == 0 && i < payload_count - 1)
if (payload[i + 1] == 0)
end_found = 1;
} else if (payload[i] == 0)
end_found = 1;
end_found = is_payload_text_end(payload, payload_count,
i, flag & 1);
if (end_found) {
skipped++;
if (skipped == tno) {
*text_start = payload + (i + 1 + (flag & 1));
} else if (skipped == tno + 1) {
*text_len = i - (*text_start - payload);
return 1;
goto found;
}
end_found = 0;
}
}
if (*text_start == NULL)
return 0;
*text_len = payload_count - (*text_start - payload);
found:;
if (flag & 2) {
/* If TAB resp. TAB TAB, then look back */
if (flag & 1) {
if (*text_len == 2) {
if ((*text_start)[0] == '\t' &&
(*text_start)[1] == '\t') {
skipped = 0;
tno--;
goto again;
}
}
} else if (*text_len == 1) {
if ((*text_start)[0] == '\t') {
skipped = 0;
tno--;
goto again;
}
}
}
return 1;
}
@ -1308,16 +1354,22 @@ static int write_v07t_textline(unsigned char *text_packs, int num_packs,
char **respt, int *result_len, int flag)
{
unsigned char *payload = NULL, *text_start;
int ret, payload_count = 0, text_len;
int ret, payload_count = 0, text_len, tab_flag = 0;
char msg[80];
if ((pack_type >= 0x80 && pack_type <= 0x85) || pack_type == 0x8e)
tab_flag = 2;
ret = collect_payload(text_packs, num_packs, pack_type, block,
&payload, &payload_count, 0);
if(ret > 0) {
ret = pick_payload_text(payload, payload_count, tno,
&text_start, &text_len, ret == 2);
&text_start, &text_len,
(ret == 2) | tab_flag);
if (ret > 0) {
if (tno > 0)
if (tno > 0 && strcmp(spec, "ISRC") == 0)
sprintf(msg, "%s %-2.2d",
spec, tno + first_tno - 1);
else if (tno > 0)
sprintf(msg, "Track %-2.2d %s",
tno + first_tno - 1, spec);
else
@ -1449,7 +1501,7 @@ static int report_block(unsigned char *text_packs, int num_packs,
goto failure;
}
ret = collect_payload(text_packs, num_packs, 0x87, -1,
ret = collect_payload(text_packs, num_packs, 0x87, block,
&payload, &payload_count, 0);
if(ret > 0) {
genre = (payload[0] << 8) | payload[1];
@ -1464,7 +1516,7 @@ static int report_block(unsigned char *text_packs, int num_packs,
-1, &result_len, flag & 1);
BURN_FREE_MEM(payload); payload = NULL;
}
ret = collect_payload(text_packs, num_packs, 0x8d, -1,
ret = collect_payload(text_packs, num_packs, 0x8d, block,
&payload, &payload_count, 0);
if(ret > 0) {
write_v07t_line(&respt, "Closed Information", (char *) payload,