#include #include #include #define ROZ 100 /*=================================================================================================*/ typedef struct Wezel { char *zaw; struct Wezel *lista, *prawy; struct Wezel *korzen; }*wezel; /*=================================================================================================*/ dodaj(wezel galaz) { char tmp[ROZ]; wezel nowy; nowy=malloc(sizeof(wezel)); printf("podaj wartosc :"); scanf("%s",&tmp); nowy->zaw=malloc((strlen(tmp)+1)*sizeof(char)); strcpy(nowy->zaw,"\n"); strcat(nowy->zaw,tmp); strcat(nowy->zaw,"< >"); galaz->prawy->korzen=nowy; nowy->lista=galaz->prawy; galaz->prawy=nowy; nowy->prawy=NULL; nowy->korzen=galaz; } /*=================================================================================================*/ edytuj(wezel galaz) { char *c, nowy[ROZ]; printf("podaj nowa wartosc :"); scanf("%s",&nowy); c=malloc((strlen(nowy)+1)*sizeof(char)); strcpy(c,nowy); strcat(c,"\n"); free(galaz->zaw); (galaz->zaw)=c; } /*=================================================================================================*/ usun(wezel galaz) { galaz->prawy=NULL; strcat(galaz->zaw,"< >"); galaz=galaz->lista; } /*=================================================================================================*/ wezel inic_wezel(FILE *xml, wezel galaz, wezel root) { char c,tmp[ROZ]; int k,i=0; wezel temp; galaz=malloc(sizeof(wezel)); do { c=fgetc(xml); tmp[i++]=c; if(c<0) break; } while((c!='<')&&(c!='>')); tmp[i-1]='\0'; galaz->zaw=malloc(strlen(tmp)+1); strcpy(galaz->zaw,tmp); galaz->prawy=NULL; galaz->korzen=root; galaz->lista=NULL; if(c=='<') //printf(" [->] "); galaz->prawy=inic_wezel(xml,galaz->prawy,galaz); else return galaz; //printf(" [<-] "); galaz->lista=inic_wezel(xml,galaz->lista,galaz); return galaz; } /*=================================================================================================*/ wyswietl(wezel galaz, FILE *out, int tag, int edyt) { char c; while(galaz) { fprintf(out,"%s",galaz->zaw); if(edyt) { do { fprintf(stdout,"\n[d]-dodaj [e]-edytuj [u]-usun_zawartosc [n]-nic \n"); c=getch(); } while((c!='d')&&(c!='D')&&(c!='e')&&(c!='E')&&(c!='u')&&(c!='U')&&(c!='n')&&(c!='N')); if((c=='E')||(c=='e')) edytuj(galaz); else if((c=='U')||(c=='u')) usun(galaz); else if((c=='D')||(c=='d')) dodaj(galaz); } if(galaz->prawy) { if(tag) fprintf(out,"<"); wyswietl(galaz->prawy,out,tag,edyt); if(tag) fprintf(out,">"); } galaz=galaz->lista; } } /*=================================================================================================*/ main() { FILE *xml=fopen("xml.txt","r"); FILE *xml_out=fopen("xml_out.txt","w"); wezel root; root=malloc(sizeof(wezel)); root->prawy=NULL; root->korzen=NULL; root->lista=inic_wezel(xml,root->lista,root); wyswietl(root->lista, stdout, 0, 0); printf("\n________________________________________________\n"); wyswietl(root->lista, stdout, 0, 1); wyswietl(root->lista, xml_out, 1, 0); printf("\n________________________________________________\n"); fclose(stdout); fclose(xml); getch(); }