1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 
5 #include "tool.h"
6 #include "id3.h"
7 
GetId3v1(char * titre,char * artiste,char * radioName)8 char *GetId3v1(char *titre, char *artiste, char *radioName)
9 {
10   char *chunk;
11   char *relativePointer;
12   int padding = 0;
13 
14   chunk = (char *)memory_allocation(128);
15 
16   /* id3v1 tag */
17   strncat(chunk, "TAG", 3);
18 
19   /* Title */
20   relativePointer = chunk + 3; /* 3 octets */
21   if (titre) {
22     padding = (30 - strlen(titre));
23     if (padding < 0)
24     {
25       snprintf(relativePointer+3, 31, "%s", titre);
26     } else {
27       snprintf(relativePointer, 128-3, "%s", titre);
28       memset(relativePointer + (30-padding), 0, padding);
29     }
30   } else {
31     memset(relativePointer, 0, 30);
32   }
33 
34   /* Artist */
35   relativePointer = relativePointer + 30; /* 33 octets */
36   if (artiste) {
37     padding = (30 - strlen(artiste));
38     if (padding < 0) {
39       snprintf(relativePointer, 31, "%s", artiste);
40     } else {
41       snprintf(relativePointer, 128-33, "%s", artiste);
42       memset(relativePointer + (30 - padding), 0, padding);
43     }
44   } else {
45     memset(relativePointer, 0, 30);
46   }
47 
48   /* Album (on met l'url de la radio ...) */
49   relativePointer = relativePointer + 30; /* 63 octets */
50   if (radioName != NULL) {
51     padding = (30 - strlen(radioName));
52     if (padding < 0) {
53       snprintf(relativePointer, 31, "%s", radioName);
54     } else {
55       snprintf(relativePointer, 128-63, "%s", radioName);
56       memset(relativePointer + (30-padding), 0, padding);
57     }
58   } else {
59     memset(relativePointer, 0, 30);
60   }
61 
62   /* Year */
63   relativePointer = relativePointer + 30; /* 93 octets */
64   memset(relativePointer, 0, 4);
65 
66   /* Comment */
67   relativePointer = relativePointer + 4; /* 97 octets */
68   snprintf(relativePointer, 31, "by cPige http://ed.zehome.com/");
69   /* Ouah la chance, �a rentre! */
70 
71   /* genre */
72   relativePointer = relativePointer + 30; /* 127 octets */
73   memset(relativePointer, 1, 1);
74 
75   /* 128 bytes ! We won :) */
76   return chunk;
77 }
78