rendered paste body#include <stdio.h>
#include <conio.h>
#include <string.h>
#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();
}