Advertisement
VNikita

Untitled

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