All pastes #584099 Raw Edit

Stuff

public text v1 · immutable
·published 2007-06-22 16:35 UTC
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();
}