Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <ctype.h>
- char TagTitle[5] = "TIT2";
- char TagYear[5] = "TYER";
- char TagNumber[5] = "TRCK";
- char TagArtist[5] = "TPE1";
- char TagAlbum[5] = "TALB";
- FILE *fr;
- FILE *media;
- struct tags
- {
- char title[100], artist[100], album[100],
- number[100], year[100];
- };
- int Checker(char * newcontent,int position){
- int i = position;
- if((newcontent[i] == 'T' && newcontent[i+1] == 'A' && newcontent[i+2] == 'L' && newcontent[i+3] == 'B')
- || (newcontent[i] == 'T' && newcontent[i+1] == 'Y' && newcontent[i+2] == 'E' && newcontent[i+3] == 'R')
- || (newcontent[i] == 'T' && newcontent[i+1] == 'R' && newcontent[i+2] == 'C' && newcontent[i+3] == 'K')
- || (newcontent[i] == 'T' && newcontent[i+1] == 'P' && newcontent[i+2] == 'E' && newcontent[i+3] == '1')
- || (newcontent[i] == 'T' && newcontent[i+1] == 'I' && newcontent[i+2] == 'T' && newcontent[i+3] == '2')
- || (newcontent[i] == 'U' && newcontent[i+1] == 'S' && newcontent[i+2] == 'L' && newcontent[i+3] == 'T')
- ||(newcontent[i] == 'T' && newcontent[i+1] == 'C' && newcontent[i+2] == 'O' && newcontent[i+3] == 'N')
- || (newcontent[i] == 'C' && newcontent[i+1] == 'O' && newcontent[i+2] == 'N'))
- return 1;
- else
- return 0;
- }
- void Parser(char * content,char * newcontent){
- int k = 0;
- for(int i = 10;i < 512;i++){
- if(isprint(content[i])) {
- newcontent[k] = content[i];
- k++;
- }
- }
- newcontent[k] = '\0';
- }
- char title[50] = "Unknown";
- char * ShowByTag(char * newcontent,char * Tag) {
- int position = 0;
- int j = 0;
- int k = 0;
- for(int i = 0; i < strlen(newcontent);i++) {
- if(Tag[j] == newcontent[i]){
- position = i;
- j++;
- }
- else if(j == 4){
- break;
- }
- else{
- j = 0;
- }
- }
- if(j != 0){
- for(int i = position+1;i <position + 100;i++){
- if(Checker(newcontent,i) == 1)
- break;
- title[k] = newcontent[i];
- k++;
- }
- title[k] = '\0';
- return title;
- }else{
- strncpy(title,"Unknown",50);
- return title;
- }
- }
- void Show(char * newcontent){
- printf("Title - %s\n",ShowByTag(newcontent,TagTitle));
- printf("Year - %s\n",ShowByTag(newcontent,TagYear));
- printf("Artist - %s\n",ShowByTag(newcontent,TagArtist));
- printf("Track в„– - %s\n",ShowByTag(newcontent,TagNumber));
- printf("Album - %s\n",ShowByTag(newcontent,TagAlbum));
- }
- void WriteInf(FILE * fr,char * Tag,char * Value){
- unsigned char pad2[3] = { 0x00, 0x00, 0x00 };
- fprintf(fr,"%s",Tag);
- fwrite(pad2, sizeof(pad2), 1, fr);
- int size = strlen(Value);
- size++;
- fprintf(fr, "%c", size);
- fwrite(pad2, sizeof(pad2), 1, fr);
- fprintf(fr, "%s", Value);
- if(strcmp(Tag,TagTitle) == 0 ){
- fprintf(fr,"TCON");
- }
- }
- void Set(char * newcontent,char * Tag,char * Value,FILE * fr,char * filepath,FILE * output){
- struct tags t;
- strncpy(t.year,ShowByTag(newcontent,TagYear),100);
- strncpy(t.artist,ShowByTag(newcontent,TagArtist),100);
- strncpy(t.number,ShowByTag(newcontent,TagNumber),100);
- strncpy(t.album,ShowByTag(newcontent,TagAlbum),100);
- strncpy(t.title,ShowByTag(newcontent,TagTitle),100);
- unsigned char pad1[7] = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76 };
- if(strcmp(Tag,TagYear) == 0){
- strncpy(t.year,Value,100);
- }
- else if(strcmp(Tag,TagArtist) == 0){
- strncpy(t.artist,Value,100);
- }
- else if(strcmp(Tag,TagNumber) == 0){
- strncpy(t.number,Value,100);
- }
- else if(strcmp(Tag,TagAlbum) == 0){
- strncpy(t.album,Value,100);
- }
- else {
- strncpy(t.title,Value,100);
- }
- fr = fopen("media_info.txt","wb");
- output = fopen(filepath,"r+");
- fprintf(fr, "ID3");
- fwrite(pad1, sizeof(pad1), 1, fr);
- WriteInf(fr,TagYear,t.year);
- WriteInf(fr,TagArtist,t.artist);
- WriteInf(fr,TagNumber,t.number);
- WriteInf(fr,TagAlbum,t.album);
- WriteInf(fr,TagTitle,t.title);
- fclose(fr);
- fr = fopen("media_info.txt","rb");
- int ch;
- while ((ch = fgetc(fr)) != EOF)
- fputc(ch, output);
- fclose(fr);
- fclose(output);
- }
- int main()
- {
- char content[512];
- char newcontent[512];
- char filepath[50];
- int k = 0;
- scanf("%s",filepath);
- for(int i = 11;i < strlen(filepath);i++){
- filepath[k] = filepath[i];
- k++;
- }
- filepath[k] = '\0';
- fr = fopen(filepath,"r+");
- if (fr== NULL){
- printf("Cannot open the file\n");
- return 0;
- }
- fgets(content,512,fr);
- fclose(fr);
- char command[50];
- scanf("%s",command);
- Parser(content,newcontent);
- if(strcmp(command,"--show") == 0) {
- Show(newcontent);
- }
- else if(command[2] == 'g' && command[3] == 'e' && command[4] == 't' && command[5] == '=') {
- char tag[5];
- int k = 6;
- int i = 0;
- for(i;i < 5;i++){
- tag[i] = command[k];
- k++;
- }
- tag[i] ='\0';
- if(strcmp(tag,TagNumber) != 0 && strcmp(tag,TagAlbum) != 0 &&
- strcmp(tag,TagArtist) != 0 && strcmp(tag,TagTitle) != 0 && strcmp(tag,TagYear) != 0)
- printf("Wrong tag\n");
- else
- printf("%s - %s\n",tag,ShowByTag(newcontent,tag));
- }
- else if(command[2] == 's' && command[3] == 'e' && command[4] == 't' && command[5] == '='){
- char tag[5];
- int k = 6;
- int i = 0;
- for(i;i<5;i++) {
- tag[i] = command[k];
- k++;
- }
- tag[i] = '\0';
- if(strcmp(tag,TagNumber) != 0 && strcmp(tag,TagAlbum) != 0 &&
- strcmp(tag,TagArtist) != 0 && strcmp(tag,TagTitle) != 0 && strcmp(tag,TagYear) != 0)
- printf("Wrong tag\n");
- else {
- char value[30];
- k = 0;
- scanf("%[^\n]%*c",command);
- char ValueCommand[9];
- for(int i = 0;i<9;i++){
- ValueCommand[i] = command[i];
- }
- if(strcmp(ValueCommand,"--value") == 0){
- for(int i = 9;i < strlen(command);i++){
- value[k] = command[i];
- k++;
- }
- value[k] = '\0';
- Set(newcontent,tag,value,media,filepath,fr);
- }
- else
- printf("Wrong command\n");
- }
- }
- else
- printf("Wrong command\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement