Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5.  
  6.  
  7.  
  8. char TagTitle[5] = "TIT2";
  9. char TagYear[5] = "TYER";
  10. char TagNumber[5] = "TRCK";
  11. char TagArtist[5] = "TPE1";
  12. char TagAlbum[5] = "TALB";
  13.  
  14. FILE *fr;
  15. FILE *media;
  16.  
  17. struct tags
  18. {
  19. char title[100], artist[100], album[100],
  20. number[100], year[100];
  21. };
  22.  
  23.  
  24.  
  25. int Checker(char * newcontent,int position){
  26. int i = position;
  27. if((newcontent[i] == 'T' && newcontent[i+1] == 'A' && newcontent[i+2] == 'L' && newcontent[i+3] == 'B')
  28. || (newcontent[i] == 'T' && newcontent[i+1] == 'Y' && newcontent[i+2] == 'E' && newcontent[i+3] == 'R')
  29. || (newcontent[i] == 'T' && newcontent[i+1] == 'R' && newcontent[i+2] == 'C' && newcontent[i+3] == 'K')
  30. || (newcontent[i] == 'T' && newcontent[i+1] == 'P' && newcontent[i+2] == 'E' && newcontent[i+3] == '1')
  31. || (newcontent[i] == 'T' && newcontent[i+1] == 'I' && newcontent[i+2] == 'T' && newcontent[i+3] == '2')
  32. || (newcontent[i] == 'U' && newcontent[i+1] == 'S' && newcontent[i+2] == 'L' && newcontent[i+3] == 'T')
  33. ||(newcontent[i] == 'T' && newcontent[i+1] == 'C' && newcontent[i+2] == 'O' && newcontent[i+3] == 'N'))
  34. return 1;
  35. else
  36. return 0;
  37.  
  38. }
  39.  
  40. void Parser(char * content,char * newcontent){
  41. int k = 0;
  42. for(int i = 10;i < 512;i++){
  43. if(isprint(content[i])) {
  44. newcontent[k] = content[i];
  45. k++;
  46. }
  47. }
  48. newcontent[k] = '\0';
  49. }
  50.  
  51.  
  52.  
  53.  
  54. char title[50] = "Unknown";
  55. char * ShowByTag(char * newcontent,char * Tag) {
  56. int position = 0;
  57. int j = 0;
  58. int k = 0;
  59. for(int i = 0; i < strlen(newcontent);i++) {
  60. if(Tag[j] == newcontent[i]){
  61. position = i;
  62. j++;
  63. }
  64. else if(j == 4){
  65. break;
  66. }
  67. else{
  68. j = 0;
  69. }
  70. }
  71. if(j != 0){
  72. for(int i = position+1;i <position + 100;i++){
  73. if(Checker(newcontent,i) == 1)
  74. break;
  75. title[k] = newcontent[i];
  76. k++;
  77. }
  78.  
  79. title[k] = '\0';
  80. return title;
  81.  
  82. }else{
  83. strncpy(title,"Unknown",50);
  84. return title;
  85. }
  86.  
  87. }
  88.  
  89.  
  90.  
  91. void Show(char * newcontent){
  92. printf("Title - %s\n",ShowByTag(newcontent,TagTitle));
  93. printf("Year - %s\n",ShowByTag(newcontent,TagYear));
  94. printf("Artist - %s\n",ShowByTag(newcontent,TagArtist));
  95. printf("Track - %s\n",ShowByTag(newcontent,TagNumber));
  96. printf("Album - %s\n",ShowByTag(newcontent,TagAlbum));
  97. }
  98.  
  99. void WriteInf(FILE * fr,char * Tag,char * Value){
  100. unsigned char pad2[3] = { 0x00, 0x00, 0x00 };
  101. fprintf(fr,"%s",Tag);
  102. fwrite(pad2, sizeof(pad2), 1, fr);
  103. int size = strlen(Value);
  104. size++;
  105. fprintf(fr, "%c", size);
  106. fwrite(pad2, sizeof(pad2), 1, fr);
  107. fprintf(fr, "%s", Value);
  108. /* if(strcmp(Tag,TagTitle) == 0 ){
  109. fprintf(fr,"TCON");
  110. }*/
  111. }
  112.  
  113.  
  114. void Set(char * newcontent,char * Tag,char * Value,FILE * fr,char * filepath,FILE * output){
  115. struct tags t;
  116. strncpy(t.year,ShowByTag(newcontent,TagYear),100);
  117. strncpy(t.artist,ShowByTag(newcontent,TagArtist),100);
  118. strncpy(t.number,ShowByTag(newcontent,TagNumber),100);
  119. strncpy(t.album,ShowByTag(newcontent,TagAlbum),100);
  120. strncpy(t.title,ShowByTag(newcontent,TagTitle),100);
  121. unsigned char pad1[20] = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76 };
  122. if(strcmp(Tag,TagYear) == 0){
  123. strncpy(t.year,Value,100);
  124. }
  125. else if(strcmp(Tag,TagArtist) == 0){
  126. strncpy(t.artist,Value,100);
  127. }
  128. else if(strcmp(Tag,TagNumber) == 0){
  129. strncpy(t.number,Value,100);
  130. }
  131. else if(strcmp(Tag,TagAlbum) == 0){
  132. strncpy(t.album,Value,100);
  133. }
  134. else {
  135. strncpy(t.title,Value,100);
  136. }
  137.  
  138. fr = fopen("media_info.txt","wb");
  139. output = fopen(filepath,"r+");
  140.  
  141. fprintf(fr, "ID3");
  142. fwrite(pad1, sizeof(pad1), 1, fr);
  143. WriteInf(fr,TagYear,t.year);
  144. WriteInf(fr,TagArtist,t.artist);
  145. WriteInf(fr,TagNumber,t.number);
  146. WriteInf(fr,TagAlbum,t.album);
  147. WriteInf(fr,TagTitle,t.title);
  148. fclose(fr);
  149. fr = fopen("media_info.txt","rb");
  150. int ch;
  151. while ((ch = fgetc(fr)) != EOF)
  152. fputc(ch, output);
  153. fclose(fr);
  154. fclose(output);
  155.  
  156.  
  157. }
  158.  
  159.  
  160.  
  161. int main(int argc, char ** argv)
  162. {
  163. char content[512];
  164. char newcontent[512];
  165. char filepath[50];
  166. int k = 0;
  167. for(int i = 11;i < strlen(argv[1]);i++){
  168. filepath[k] = argv[1][i];
  169. k++;
  170. }
  171. filepath[k] = '\0';
  172. fr = fopen(filepath,"r+");
  173. if (fr== NULL){
  174. printf("Cannot open the file\n");
  175. return 0;
  176. }
  177.  
  178. fgets(content,512,fr);
  179. fclose(fr);
  180.  
  181. Parser(content,newcontent);
  182.  
  183. if(strcmp(argv[2],"--show") == 0) {
  184. Show(newcontent);
  185. }
  186.  
  187. else if(argv[2][2] == 'g' && argv[2][3] == 'e' && argv[2][4] == 't' && argv[2][5] == '=') {
  188. char tag[5];
  189. int k = 6;
  190. int i = 0;
  191. for(i;i < 5;i++){
  192. tag[i] = argv[2][k];
  193. k++;
  194. }
  195. tag[i] ='\0';
  196. if(strcmp(tag,TagNumber) != 0 && strcmp(tag,TagAlbum) != 0 &&
  197. strcmp(tag,TagArtist) != 0 && strcmp(tag,TagTitle) != 0 && strcmp(tag,TagYear) != 0)
  198. printf("Wrong tag\n");
  199. else
  200. printf("%s - %s\n",tag,ShowByTag(newcontent,tag));
  201. }
  202.  
  203. else if(argv[2][2] == 's' && argv[2][3] == 'e' && argv[2][4] == 't' && argv[2][5] == '='){
  204. char tag[5];
  205. int k = 6;
  206. int i = 0;
  207.  
  208. for(i;i<5;i++) {
  209. tag[i] = argv[2][k];
  210. k++;
  211. }
  212.  
  213. tag[i] = '\0';
  214. if(strcmp(tag,TagNumber) != 0 && strcmp(tag,TagAlbum) != 0 &&
  215. strcmp(tag,TagArtist) != 0 && strcmp(tag,TagTitle) != 0 && strcmp(tag,TagYear) != 0)
  216. printf("Wrong tag\n");
  217. else {
  218. char value[30];
  219. k = 0;
  220. char ValueCommand[9];
  221. for(int i = 0;i<9;i++){
  222. ValueCommand[i] = argv[2][i];
  223. }
  224. char checkValue[9] = " --value=";
  225. //printf("%s", ValueCommand);
  226.  
  227.  
  228. /*
  229. if(strcmp(ValueCommand," --value=") == 1)*/
  230. int f=1;
  231. for (int j = 0; j<9; j++) {
  232. if (ValueCommand[j]!=argv[3][j])
  233. f=0;
  234. }
  235. if (f=1){
  236. for(int i = 8;i < strlen(argv[3]);i++){
  237. value[k] = argv[3][i];
  238. k++;
  239. }
  240. value[k] = '\0';
  241. Set(newcontent,tag,value,media,filepath,fr);
  242. }
  243. else
  244. printf("Wrong command\n");
  245. }
  246. }
  247. else
  248. printf("Wrong command\n");
  249. return 0;
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement