1 /*
2  * toc_print.c -- print toc file
3  *
4  * Copyright (C) 2004, 2005, 2006, 2007, 2013 Svend Sorensen
5  * For license terms, see the file COPYING in this distribution.
6  */
7 
8 #include <stdio.h>
9 #include <string.h>
10 #include "cd.h"
11 #include "time.h"
12 
13 void toc_print_track (FILE *fp, Track *track);
14 void toc_print_cdtext (Cdtext *cdtext, FILE *fp, int istrack);
15 
toc_print(FILE * fp,Cd * cd)16 void toc_print (FILE *fp, Cd *cd)
17 {
18 	Cdtext *cdtext = cd_get_cdtext(cd);
19 	int i;	/* track */
20 	Track *track;
21 
22 	switch(cd_get_mode(cd)) {
23 	case MODE_CD_DA:
24 		fprintf(fp, "CD_DA\n");
25 		break;
26 	case MODE_CD_ROM:
27 		fprintf(fp, "CD_ROM\n");
28 		break;
29 	case MODE_CD_ROM_XA:
30 		fprintf(fp, "CD_ROM_XA\n");
31 		break;
32 	}
33 
34 	if (NULL != cd_get_catalog(cd)) {
35 		fprintf(fp, "CATALOG \"%s\"\n", cd_get_catalog(cd));
36 	}
37 
38 	if(0 != cdtext_is_empty(cdtext)) {
39 		fprintf(fp, "CD_TEXT {\n");
40 		fprintf(fp, "\tLANGUAGE_MAP { 0:9 }\n");
41 		fprintf(fp, "\tLANGUAGE 0 {\n");
42 		toc_print_cdtext(cdtext, fp, 0);
43 		fprintf(fp, "\t}\n");
44 		fprintf(fp, "}\n");
45 	}
46 
47 	for (i = 1; i <= cd_get_ntrack(cd); i++) {
48 		track = cd_get_track(cd, i);
49 		fprintf(fp, "\n");
50 		toc_print_track(fp, track);
51 	}
52 }
53 
toc_print_track(FILE * fp,Track * track)54 void toc_print_track (FILE *fp, Track *track)
55 {
56 	Cdtext *cdtext = track_get_cdtext(track);
57 	int i;	/* index */
58 
59 	fprintf(fp, "TRACK ");
60 	switch (track_get_mode(track)) {
61 	case MODE_AUDIO:
62 		fprintf(fp, "AUDIO");
63 		break;
64 	case MODE_MODE1:
65 		fprintf(fp, "MODE1");
66 		break;
67 	case MODE_MODE1_RAW:
68 		fprintf(fp, "MODE1_RAW");
69 		break;
70 	case MODE_MODE2:
71 		fprintf(fp, "MODE2");
72 		break;
73 	case MODE_MODE2_FORM1:
74 		fprintf(fp, "MODE2_FORM1");
75 		break;
76 	case MODE_MODE2_FORM2:
77 		fprintf(fp, "MODE2_FORM2");
78 		break;
79 	case MODE_MODE2_FORM_MIX:
80 		fprintf(fp, "MODE2_FORM_MIX");
81 		break;
82 	}
83 	fprintf(fp, "\n");
84 
85 	if (0 != track_is_set_flag(track, FLAG_PRE_EMPHASIS)) {
86 		fprintf(fp, "PRE_EMPHASIS\n");
87 	}
88 	if (0 != track_is_set_flag(track, FLAG_COPY_PERMITTED)) {
89 		fprintf(fp, "COPY\n");
90 	}
91 	if (0 != track_is_set_flag(track, FLAG_FOUR_CHANNEL)) {
92 		fprintf(fp, "FOUR_CHANNEL_AUDIO\n");
93 	}
94 
95 	if (NULL != track_get_isrc(track)) {
96 		fprintf(fp, "ISRC \"%s\"\n", track_get_isrc(track));
97 	}
98 
99 	if (0 != cdtext_is_empty(cdtext)) {
100 		fprintf(fp, "CD_TEXT {\n");
101 		fprintf(fp, "\tLANGUAGE 0 {\n");
102 		toc_print_cdtext(cdtext, fp, 1);
103 		fprintf(fp, "\t}\n");
104 		fprintf(fp, "}\n");
105 	}
106 
107 	if (0 != track_get_zero_pre(track)) {
108 		fprintf(fp, "ZERO ");
109 		fprintf(fp, "%s", time_frame_to_mmssff(track_get_zero_pre(track)));
110 		fprintf(fp, "\n");
111 	}
112 
113 	fprintf(fp, "FILE ");
114 	fprintf(fp, "\"%s\" ", track_get_filename(track));
115 	if (0 == track_get_start(track)) {
116 		fprintf(fp, "0");
117 	} else {
118 		fprintf(fp, "%s", time_frame_to_mmssff(track_get_start(track)));
119 	}
120 	if (0 != track_get_length(track)) {
121 		fprintf(fp, " %s", time_frame_to_mmssff(track_get_length(track)));
122 	}
123 	fprintf(fp, "\n");
124 
125 	if (0 != track_get_zero_post(track)) {
126 		fprintf(fp, "ZERO ");
127 		fprintf(fp, "%s", time_frame_to_mmssff(track_get_zero_post(track)));
128 		fprintf(fp, "\n");
129 	}
130 
131 	if (track_get_index(track, 1) != 0) {
132 		fprintf(fp, "START ");
133 		fprintf(fp, "%s\n", time_frame_to_mmssff(track_get_index(track, 1)));
134 	}
135 
136 	for (i = 2; i < track_get_nindex(track); i++) {
137 		fprintf(fp, "INDEX ");
138 		fprintf(fp, "%s\n", time_frame_to_mmssff( \
139 		track_get_index(track, i) - track_get_index(track, 0) \
140 		));
141 	}
142 }
143 
toc_print_cdtext(Cdtext * cdtext,FILE * fp,int istrack)144 void toc_print_cdtext (Cdtext *cdtext, FILE *fp, int istrack)
145 {
146 	int pti;
147 	char *value = NULL;
148 
149 	for (pti = 0; PTI_END != pti; pti++) {
150 		if (NULL != (value = cdtext_get(pti, cdtext))) {
151 			fprintf(fp, "\t\t");
152 			fprintf(fp, "%s", cdtext_get_key(pti, istrack));
153 			fprintf(fp, " \"%s\"\n", value);
154 		}
155 	}
156 }
157