cos jest chyba nie tak z funkcja load :/ ale nie wiem co, program kompiluje sie pod gcc(cygwin) jest w main odhashowana jest linia printf("case s\n"); // WTF !??!?!?!?!?! ;D;D
} else if
(strcmp(argv[i],"-s")==0) {
printf("case s\n"); // WTF !??!?!?!?!?!
datahold=load("pl");
show("pl",datahold);
jesli jej nie ma to program rowniez sie kompiluje ale przy uruchomieniu z opcja -s wywala segmentation fault
po prostu kosmos ...
ktos moze ma jakis pomysl co jest nie tak ?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct data_ {
char* word;
int tcount;
char lan[3];
char** trans;
struct data_* next;
struct data_* prev;
} data;
//wksaz=malloc(n*sizeof(plpoint*))
//void del(data** datahold);
data* load(const char* lan);
int save(const char* lan, data* datahold);
int add(const char* lan, const char* wo, const char* tr, data** datahold);
int show(const char* lan, const data* datahold);
int main(int argc, char* argv[]) {
//char test[] = {'c','o'};
//printf("%d \n",sizeof(test));
data* datahold = NULL;
int i;
char c;
if (argc == 1) {
printf("Dict Usage:\n\n");
printf("dict [options] [word] [translation] \n\n");
printf("-pl translation into polish\n");
printf("-en translation into English\n");
printf("-a adds entries\n");
printf("-r removes entries\n");
printf("-s views statistics\n");
printf("-u magical option for online update, requires internet connection");
} else {
for (i=1;i<argc;i++) {
if (strcmp(argv[i],"-a")==0) {
if ((strcmp(argv[i-1],"-pl")==0)||(strcmp(argv[i+1],"-pl")==0)) {
printf("add PL:%s -> EN:%s to dictionary database? y/n\n",argv[3],argv[4]);
//printf("%s,%s\n",argv[i+2],argv[i+3]);
scanf("%s",&c);
if ((c=='y')||(c=='Y')) {
add("pl",argv[3],argv[4],&datahold);
save("pl",datahold);
//del(&datahold);
}
break;
}
if ((strcmp(argv[i-1],"-en")==0)||(strcmp(argv[i+1],"-en")==0)) {
printf("add EN:%s -> PL:%s to dictionary database? y/n\n",argv[3],argv[4]);
scanf("%s",&c);
if ((c=='y')||(c=='Y')) {
add("en",argv[3],argv[4],&datahold);
save("en",datahold);
}
break;
}
// printf("case a\n");
// add("pl","cos","something",&datahold);
} else if
(strcmp(argv[i],"-s")==0) {
printf("case s\n"); // WTF !??!?!?!?!?!
datahold=load("pl");
show("pl",datahold);
//del(&datahold);
//show("pl",datahold);
} else if
(strcmp(argv[i],"-r")==0) {
if ((strcmp(argv[i-1],"-pl")==0)||(strcmp(argv[i+1],"-pl")==0)) {
printf("rem pl\n");
break;
}
if ((strcmp(argv[i-1],"-en")==0)||(strcmp(argv[i+1],"-en")==0)) {
printf("rem en\n");
break;
}
printf("case r remove entries\n");
} else if
(strcmp(argv[i],"-u")==0) {
printf("case u do magic\n");
} else if
(strcmp(argv[i],"-pl")==0) {
printf("trans into pl\n");
} else if
(strcmp(argv[i],"-en")==0) {
printf("trans into en\n");
}
}
}
return 0;
}
//void del(data** datahold) {
// data* tmp;
// for (;*datahold!=NULL;*datahold=tmp) {
// tmp=*datahold->next;
// free(*datahold);
// }
// return;
//}
data* load(const char* lan) {
data* tmp;
data* datahold;
FILE* storage;
char tmp_fname[7];
char *tmpc;
int tcount,i=0;
sprintf(tmp_fname, "%s.dat", lan);
storage = fopen(tmp_fname,"r");
datahold = NULL;
tmp = NULL;
while(feof(storage)!=1) {
fgets(tmpc,255,storage);
tmpc[strlen(tmpc)-1]='\0';
if (strcmp(tmpc,"+")==0) {
fgets(tmpc,255,storage);
tmpc[strlen(tmpc)-1]='\0';
tmp=(data*)malloc(sizeof(data));
tmp->word=(char*)malloc(strlen(tmpc)+1);
strcpy(tmp->word,tmpc);
fgets(tmpc,255,storage);
tmpc[strlen(tmpc)-1]='\0';
tcount=atoi(tmpc);
strcpy(tmp->lan,lan);
tmp->trans=(char**)malloc(tcount*sizeof(char*));
for (i;i<=tcount;i++) {
fgets(tmpc,255,storage);
tmpc[strlen(tmpc)-1]='\0';
tmp->trans[i]=(char*)malloc(strlen(tmpc)+1);
strcpy(tmp->trans[i],tmpc);
}
i=0;
tmp->prev=datahold;
datahold=tmp;
}
}
fclose(storage);
return datahold;
}
int save(const char* lan, data* datahold) {
FILE* storage;
char fd,tmp_fname[7];
int i=0;
sprintf(tmp_fname, "%s.dat", lan);
if (fopen(tmp_fname,"r")!=NULL){
printf("apending\n");
storage = fopen(tmp_fname,"a+");
} else {
printf("creating new one\n");
storage = fopen(tmp_fname,"w");
}
while (datahold != NULL) {
// fwrite(datahold,1,sizeof(data),storage);
fprintf(storage,"+\n",datahold->word);
fprintf(storage,"%s\n",datahold->word);
// fprintf(storage,"=\n",datahold->word);
fprintf(storage,"%d\n",datahold->tcount);
// printf("%d\n",datahold->tcount);
// fputs("+",storage);
// fputs(datahold->word,storage);
// fputs("=",storage);
// fd=(char)datahold->tcount;
// fputs(fd,storage);
for (i;i<=datahold->tcount;i++){
printf("zapisuje translacje\n");
// if (i<datahold->tcount)
fprintf(storage,"%s\n",datahold->trans[i]);
// else
// fprintf(storage,"%s",datahold->trans[i]);
// fputs(datahold->trans[i],storage);
}
//fprintf(storage,"\n");
datahold=datahold->prev;
}
}
int add(const char* lan, const char* wo, const char* tr, data** datahold) {
data* tmp;
int tcount=1;
tmp=(data*)malloc(sizeof(data));
tmp->word=(char*)malloc(strlen(wo)+1);
strcpy(tmp->word,wo);
strcpy(tmp->lan,lan);
//printf("jojo add\n");
tmp->tcount=0;
tmp->trans=(char**)malloc(tcount*sizeof(char*));
tmp->trans[tmp->tcount]=(char*)malloc(strlen(tr)+1);
strcpy(tmp->trans[tmp->tcount],tr);
tmp->prev=*datahold;
*datahold=tmp;
//printf("in add %s\n",(*datahold)->word);
return 0;
}
int show(const char* lan, const data* datahold) {
printf("show on\n");
while (datahold != NULL) {
// printf("show function\n");
printf("show function %s \n",datahold->word);
datahold=datahold->prev;
}
return 0;
}