#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#define PATH "/home/rombus/Escritorio/sample.c"
#define FALSE 0
#define TRUE !FALSE
#define escribeEnter(a) fputc('n',a)
#define unoParaAtraz(a) fseek(a,(long)-1,SEEK_CUR)
#define unoParaAdelante(a) fseek(a,(long)1,SEEK_CUR)
typedef char boolean;
boolean buscaLlave(FILE *a){
char c;
do{
c = fgetc(a);
}while(c != '{' && c != EOF);
if(c == EOF)
return FALSE;
unoParaAtraz(a);
return TRUE;
}
void limpiaString(char *a){
int i;
for(i=0; a[i] != ' '; i++)
a[i] = ' ';
}
char *getLine(FILE *a){
char *l = (char*)malloc(255*sizeof(char));
int i = 0;
do{
l[i] = fgetc(a);
}while((l[i] != 'n') && (l[i++] != EOF));
return l;
}
void escribeTab(FILE *a, int n){
int i;
for(i=0; i<n; i++)
fputc('t',a);
}
void indenta(char *path){
FILE *b = fopen(path,"r+b");
int cont = 0;
char *aux = (char *)malloc(sizeof(char)*255);
long lastLine;
while(!feof(b)){
if(buscaLlave(b)){
cont++;
limpiaString(aux);
aux = getLine(b);
if(strrchr(aux,'}')){
cont--;
printf("chau...n");
}
if(cont){
printf("entro en cont mayor a 1n");
do{
printf("entro en el don");
lastLine = ftell(b);
limpiaString(aux);
aux = getLine(b);
if(strrchr(aux,'}')){
cont--;
printf("cont --n");
}
fseek(b,lastLine,SEEK_SET);
escribeTab(b,cont);
if(strrchr(aux,'{'))
cont++;
aux = getLine(b);
if(strrchr(aux,'}')){
cont--;
printf("cont --n");
}
printf("cont: %dn",cont);
}while(cont > 0 || !feof(b));
}
}
else
break;
}
fclose(b);
}
int main(void){
indenta(PATH);
printf("Finn");
return 0;
}