/*=============================HASH INCLUDES=================================*/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
/*=============================HASH DEFINES=================================*/
#define MAX_CHARS 999
/*=============================TYPEDEFS======================================*/
typedef struct term_info term_t;
typedef struct node node_t;
typedef struct tree tree_t;
/*=============================STRUCTURES====================================*/
struct term_info{
char term[MAX_CHARS+1];
int ft;
int **dfdt;
};
struct node{
term_t data;
node_t *right,*left;
};
struct tree{
node_t *root;
int (*cmp)(void*,void*);
};
/*=============================FUNCTION PROTOTYPES===========================*/
void copy_string_into_structure_string(int *c,term_t *term1,int*spaces
,int *iteration,int *term_number);
void clear_up_elements(term_t *term1,int *spaces
,int *element_pair,int *is_space,int *pair_num,int *iteration);
void copy_ft_into_structure(term_t *term1,int *iterations,int *spaces
,int *iteration,int *c);
void print_then_free(void *value);
void read_lines(FILE *fp,int *terms,int *dfdt_pairs,tree_t *tree,term_t *term1);
void print_stage_1(int terms, int dfdt_pairs);
/*=======================MAIN BODY OF THE PROGRAM============================*/
int main(int argc,char *argv[]){
tree_t *tree;
term_t *term1;
FILE *fp;
int i,terms,dfdt_pairs;
tree
=(tree_t
*)malloc(sizeof(tree_t
)); term1
=(term_t
*)malloc(sizeof(term_t
)); for(i=1;i<argc;i++){
if((fp
= fopen(argv
[i
],"r"))==NULL
){ fprintf(stderr
,"...........failed\n"); }else{
read_lines(fp,&terms,&dfdt_pairs,tree,term1);
}
}
print_stage_1(terms,dfdt_pairs);
return 0;
}
void read_lines(FILE *fp,int *terms,int *dfdt_pairs,tree_t *tree,term_t *term1){
int c,k,l;
int spaces = 0,elem_in_pair = 1,iteration =0,term_number=0
,element_pair =0,pair_num=0;
while((c
=getc(fp
))!=EOF
){ if(iteration>=0 && (!spaces)){
copy_string_into_structure_string(&c,term1,&spaces
,&iteration,&term_number);
}else{
if(spaces==1){
copy_ft_into_structure(term1,&iteration,&spaces,&iteration,&c);
}
if(spaces>1){
if(c==' '){ /* move over spaces */
iteration++;
c++;
}
if(elem_in_pair<3 && c!=' '){
if(elem_in_pair==1){ /* counts of pairs */
pair_num++;
}else{
if(elem_in_pair==3){ /* add null byte if both pairs picked */
(*((*(term1->dfdt)+element_pair)+(elem_in_pair-1))) = '\0';
elem_in_pair++; /* use it to flush out go to the
clause for going to next pointer to pointer*/
}else{
term1
->dfdt
=(int**)malloc((element_pair
+1)*sizeof(int*)); /* store the two of the elements, first malloc the pointer to pointers */
k =0;
while(k<pair_num+1){ /* malloc the inner pointers */
term1
->dfdt
[k
]=(int*)malloc((2*sizeof(int))+1); k++;
}
(*((*(term1->dfdt)+element_pair)+(elem_in_pair-1))) = c; /*store
now and move to next inner pointer using elem_in_ pair
and move up the characters */
elem_in_pair++;
iteration++;
c++;
}
}
/*}else if(elem_in_pair==4 && c!=' '){
l = 0;
while(l<elem_in_pair-2){
free(((*(term1->dfdt)+element_pair)+(l)));
l++;
free up the elements and move to next pointer to pointer
}
element_pair++; next pointer to pointer
elem_in_pair=1; resetting the inner pointers back
*/
}else if(c=='\n'){
clear_up_elements(term1,&spaces,&element_pair,&elem_in_pair
,&pair_num,&iteration);
}
}
}
}
*dfdt_pairs = pair_num;
*terms = term_number;
}
void copy_ft_into_structure(term_t *term1,int *iterations,int *spaces
,int *iteration,int *c){
term1->ft = *c;
printf("term1->ft=%c\n",term1
->ft
); (*spaces)++;
(*iteration)++;
(*c)++;
}
void clear_up_elements(term_t *term1,int *spaces
,int *element_pair,int *elem_in_pair,int *pair_num,int *iteration){
int i,j;
*spaces=0;
*element_pair=0;
*elem_in_pair=1;
term1->term[0]='\0';
term1->ft=0;
i=0;
j=0;
while(j<*pair_num){
while(i<2){
free((*((term1
->dfdt
)+j
)+i
)); i++;
}
i=0;
j++;
}
j=0;
*iteration = 0;
}
void copy_string_into_structure_string(int *c,term_t *term1,int*spaces
,int *iteration,int *term_number){
if(*c==' '){
term1->term[(*iteration)]='\0';
printf("term1->term=%s\n",term1
->term
); (*spaces)++;
(*term_number)++;
(*iteration)++;
(*c)++;
}else{
term1->term[(*iteration)++]=(*c)++;
}
}
void print_stage_1(int terms,int dfdt_pairs){
printf("index has %d terms and %d (d,fdt) pairs\n",terms
,dfdt_pairs
); /*printf("Term 1 is "\"%d"\" ")*/
}
Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PUhBU0ggSU5DTFVERVM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPGFzc2VydC5oPgojaW5jbHVkZTxzdHJpbmcuaD4KCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1IQVNIIERFRklORVM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKI2RlZmluZSBNQVhfQ0hBUlMgOTk5CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09VFlQRURFRlM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgp0eXBlZGVmIHN0cnVjdCB0ZXJtX2luZm8gdGVybV90Owp0eXBlZGVmIHN0cnVjdCBub2RlIG5vZGVfdDsKdHlwZWRlZiBzdHJ1Y3QgdHJlZSB0cmVlX3Q7CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09U1RSVUNUVVJFUz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgpzdHJ1Y3QgdGVybV9pbmZvewogY2hhciB0ZXJtW01BWF9DSEFSUysxXTsKIGludCBmdDsJCiBpbnQgKipkZmR0Owp9OwoKc3RydWN0IG5vZGV7CiB0ZXJtX3QgZGF0YTsKIG5vZGVfdCAqcmlnaHQsKmxlZnQ7Cn07CgpzdHJ1Y3QgdHJlZXsKICBub2RlX3QgKnJvb3Q7CiAgaW50ICgqY21wKSh2b2lkKix2b2lkKik7Cn07CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09RlVOQ1RJT04gUFJPVE9UWVBFUz09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgp2b2lkIGNvcHlfc3RyaW5nX2ludG9fc3RydWN0dXJlX3N0cmluZyhpbnQgKmMsdGVybV90ICp0ZXJtMSxpbnQqc3BhY2VzCiAgICAsaW50ICppdGVyYXRpb24saW50ICp0ZXJtX251bWJlcik7CnZvaWQgY2xlYXJfdXBfZWxlbWVudHModGVybV90ICp0ZXJtMSxpbnQgKnNwYWNlcwoJLGludCAqZWxlbWVudF9wYWlyLGludCAqaXNfc3BhY2UsaW50ICpwYWlyX251bSxpbnQgKml0ZXJhdGlvbik7CnZvaWQgY29weV9mdF9pbnRvX3N0cnVjdHVyZSh0ZXJtX3QgKnRlcm0xLGludCAqaXRlcmF0aW9ucyxpbnQgKnNwYWNlcwoJLGludCAqaXRlcmF0aW9uLGludCAqYyk7CnZvaWQgcHJpbnRfdGhlbl9mcmVlKHZvaWQgKnZhbHVlKTsKdm9pZCByZWFkX2xpbmVzKEZJTEUgKmZwLGludCAqdGVybXMsaW50ICpkZmR0X3BhaXJzLHRyZWVfdCAqdHJlZSx0ZXJtX3QgKnRlcm0xKTsKdm9pZCBwcmludF9zdGFnZV8xKGludCB0ZXJtcywgaW50IGRmZHRfcGFpcnMpOwoKLyo9PT09PT09PT09PT09PT09PT09PT09PU1BSU4gQk9EWSBPRiBUSEUgUFJPR1JBTT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKaW50IG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKXsKICAgIHRyZWVfdCAqdHJlZTsKICAgIHRlcm1fdCAqdGVybTE7CiAgICBGSUxFICpmcDsKICAgIGludCBpLHRlcm1zLGRmZHRfcGFpcnM7CiAgICB0cmVlID0odHJlZV90KiltYWxsb2Moc2l6ZW9mKHRyZWVfdCkpOwogICAgYXNzZXJ0KHRyZWUhPU5VTEwpOwogICAgdGVybTEgPSh0ZXJtX3QqKW1hbGxvYyhzaXplb2YodGVybV90KSk7CiAgICBhc3NlcnQodGVybTEhPU5VTEwpOwogICAgZm9yKGk9MTtpPGFyZ2M7aSsrKXsKICAgICBpZigoZnAgPSBmb3Blbihhcmd2W2ldLCJyIikpPT1OVUxMKXsKICAgICAgZnByaW50ZihzdGRlcnIsIi4uLi4uLi4uLi4uZmFpbGVkXG4iKTsJICAgIAogICAgIH1lbHNlewkgICAgCiAJICByZWFkX2xpbmVzKGZwLCZ0ZXJtcywmZGZkdF9wYWlycyx0cmVlLHRlcm0xKTsKIAkgIGZjbG9zZShmcCk7CiAgICAgfQkgCiAgICB9IAogICAgcHJpbnRfc3RhZ2VfMSh0ZXJtcyxkZmR0X3BhaXJzKTsKICAgIGZyZWUodHJlZSk7CiAgICBmcmVlKHRlcm0xKTsKICAgIHJldHVybiAwOwp9Cgp2b2lkIHJlYWRfbGluZXMoRklMRSAqZnAsaW50ICp0ZXJtcyxpbnQgKmRmZHRfcGFpcnMsdHJlZV90ICp0cmVlLHRlcm1fdCAqdGVybTEpewogICAgaW50IGMsayxsOwogICAgaW50IHNwYWNlcyA9IDAsZWxlbV9pbl9wYWlyID0gMSxpdGVyYXRpb24gPTAsdGVybV9udW1iZXI9MAogICAgLGVsZW1lbnRfcGFpciA9MCxwYWlyX251bT0wOwogICAgd2hpbGUoKGM9Z2V0YyhmcCkpIT1FT0YpewogICAgIGlmKGl0ZXJhdGlvbj49MCAmJiAoIXNwYWNlcykpewogICAgICBjb3B5X3N0cmluZ19pbnRvX3N0cnVjdHVyZV9zdHJpbmcoJmMsdGVybTEsJnNwYWNlcwogICAgICAsJml0ZXJhdGlvbiwmdGVybV9udW1iZXIpOwogICAgIH1lbHNlewogICAgICBpZihzcGFjZXM9PTEpewogICAJICAgY29weV9mdF9pbnRvX3N0cnVjdHVyZSh0ZXJtMSwmaXRlcmF0aW9uLCZzcGFjZXMsJml0ZXJhdGlvbiwmYyk7ICAgCiAgICAgIH0KICAgICAgaWYoc3BhY2VzPjEpeyAgICAKICAgICAgIGlmKGM9PScgJyl7IC8qIG1vdmUgb3ZlciBzcGFjZXMgKi8KICAgICAgICBpdGVyYXRpb24rKzsKICAgICAgICBjKys7CiAgICAgICB9CiAgICAgICBpZihlbGVtX2luX3BhaXI8MyAmJiBjIT0nICcpewogICAgICAJaWYoZWxlbV9pbl9wYWlyPT0xKXsgIC8qIGNvdW50cyBvZiBwYWlycyAqLwogICAgICAJICBwYWlyX251bSsrOwogICAgICAgIH1lbHNlewogICAgICAgICAgaWYoZWxlbV9pbl9wYWlyPT0zKXsgLyogYWRkIG51bGwgYnl0ZSBpZiBib3RoIHBhaXJzIHBpY2tlZCAqLwogICAgICAgICAgICAoKigoKih0ZXJtMS0+ZGZkdCkrZWxlbWVudF9wYWlyKSsoZWxlbV9pbl9wYWlyLTEpKSkgPSAnXDAnOwogICAgICAgICAgICBlbGVtX2luX3BhaXIrKzsgLyogdXNlIGl0IHRvIGZsdXNoIG91dCBnbyB0byB0aGUgCiAgICAgICAgICAgIGNsYXVzZSBmb3IgZ29pbmcgdG8gbmV4dCBwb2ludGVyIHRvIHBvaW50ZXIqLwogICAgICAgICAgfWVsc2V7ICAKICAgICAgICAgICAgdGVybTEtPmRmZHQ9KGludCoqKW1hbGxvYygoZWxlbWVudF9wYWlyKzEpKnNpemVvZihpbnQqKSk7IC8qIHN0b3JlCiAgICAgICAgICAgIHRoZSB0d28gb2YgdGhlIGVsZW1lbnRzLCBmaXJzdCBtYWxsb2MgdGhlIHBvaW50ZXIgdG8gcG9pbnRlcnMgKi8KICAgICAgCSAgICBrID0wOwogICAgICAJICAgIHdoaWxlKGs8cGFpcl9udW0rMSl7IC8qIG1hbGxvYyAgdGhlIGlubmVyIHBvaW50ZXJzICovCiAgICAgIAkgICAgIHRlcm0xLT5kZmR0W2tdPShpbnQqKW1hbGxvYygoMipzaXplb2YoaW50KSkrMSk7CiAgICAgICAgICAgICBrKys7CiAgICAgICAgICAgIH0JCiAgICAgIAkgICAgKCooKCoodGVybTEtPmRmZHQpK2VsZW1lbnRfcGFpcikrKGVsZW1faW5fcGFpci0xKSkpID0gYzsgLypzdG9yZQogICAgICAJICAgIG5vdyAgYW5kIG1vdmUgdG8gbmV4dCBpbm5lciBwb2ludGVyIHVzaW5nIGVsZW1faW5fIHBhaXIgCiAgICAgIAkgICAgYW5kIG1vdmUgdXAgdGhlIGNoYXJhY3RlcnMgKi8KICAgICAgCSAgICBlbGVtX2luX3BhaXIrKzsKICAgICAgICAgICAgaXRlcmF0aW9uKys7CiAgICAgICAgICAgIGMrKzsKICAgICAgICAgIH0gCiAgICAgIAl9CQogICAgICAgLyp9ZWxzZSBpZihlbGVtX2luX3BhaXI9PTQgJiYgYyE9JyAnKXsKICAgICAgCSBsID0gMDsgCiAgICAgIAkgd2hpbGUobDxlbGVtX2luX3BhaXItMil7CiAgICAgICAgICBmcmVlKCgoKih0ZXJtMS0+ZGZkdCkrZWxlbWVudF9wYWlyKSsobCkpKTsKICAgICAgICAgIGwrKzsKICAgICAgICAgICBmcmVlIHVwIHRoZSBlbGVtZW50cyBhbmQgbW92ZSB0byBuZXh0IHBvaW50ZXIgdG8gcG9pbnRlciAgCiAgICAgICAgIH0KICAgICAgICAgZWxlbWVudF9wYWlyKys7ICBuZXh0IHBvaW50ZXIgdG8gcG9pbnRlciAKICAgICAgIAkgZWxlbV9pbl9wYWlyPTE7ICByZXNldHRpbmcgdGhlIGlubmVyIHBvaW50ZXJzIGJhY2sgCiAgICAgICAJKi8gCiAgICAgICB9ZWxzZSBpZihjPT0nXG4nKXsgIAogICAgICAgICBjbGVhcl91cF9lbGVtZW50cyh0ZXJtMSwmc3BhY2VzLCZlbGVtZW50X3BhaXIsJmVsZW1faW5fcGFpcgogICAgICAgICAsJnBhaXJfbnVtLCZpdGVyYXRpb24pOwogICAgICAgfQogICAgICB9CiAgICAgfSAKICAgIH0KICAgICpkZmR0X3BhaXJzID0gcGFpcl9udW07CiAgICAqdGVybXMgPSB0ZXJtX251bWJlcjsgIAp9Cgp2b2lkIGNvcHlfZnRfaW50b19zdHJ1Y3R1cmUodGVybV90ICp0ZXJtMSxpbnQgKml0ZXJhdGlvbnMsaW50ICpzcGFjZXMKICAgICxpbnQgKml0ZXJhdGlvbixpbnQgKmMpewogICAgdGVybTEtPmZ0ID0gKmM7CiAgICBwcmludGYoInRlcm0xLT5mdD0lY1xuIix0ZXJtMS0+ZnQpOwogICAgKCpzcGFjZXMpKys7CiAgICAoKml0ZXJhdGlvbikrKzsKICAgICgqYykrKzsKfQoKdm9pZCBjbGVhcl91cF9lbGVtZW50cyh0ZXJtX3QgKnRlcm0xLGludCAqc3BhY2VzCiAgICAsaW50ICplbGVtZW50X3BhaXIsaW50ICplbGVtX2luX3BhaXIsaW50ICpwYWlyX251bSxpbnQgKml0ZXJhdGlvbil7CiAgICBpbnQgaSxqOwogICAgKnNwYWNlcz0wOwogICAgKmVsZW1lbnRfcGFpcj0wOwogICAgKmVsZW1faW5fcGFpcj0xOwogICAgdGVybTEtPnRlcm1bMF09J1wwJzsKICAgIHRlcm0xLT5mdD0wOwogICAgaT0wOwogICAgaj0wOwogICAgd2hpbGUoajwqcGFpcl9udW0pewogICAgIHdoaWxlKGk8Mil7CQkKICAgICAgIGZyZWUoKCooKHRlcm0xLT5kZmR0KStqKStpKSk7CiAgICAgICBpKys7CiAgICAgfQogICAgIGk9MDsKICAgICBqKys7CiAgICB9CiAgICBqPTA7CiAgICAqaXRlcmF0aW9uID0gMDsKfQoKdm9pZCBjb3B5X3N0cmluZ19pbnRvX3N0cnVjdHVyZV9zdHJpbmcoaW50ICpjLHRlcm1fdCAqdGVybTEsaW50KnNwYWNlcwogICAgLGludCAqaXRlcmF0aW9uLGludCAqdGVybV9udW1iZXIpewogICAgaWYoKmM9PScgJyl7CiAgICAgdGVybTEtPnRlcm1bKCppdGVyYXRpb24pXT0nXDAnOwogICAgIHByaW50ZigidGVybTEtPnRlcm09JXNcbiIsdGVybTEtPnRlcm0pOwogICAgICgqc3BhY2VzKSsrOwogICAgICgqdGVybV9udW1iZXIpKys7CiAgICAgKCppdGVyYXRpb24pKys7CiAgICAgKCpjKSsrOwogICAgfWVsc2V7CiAgICAgdGVybTEtPnRlcm1bKCppdGVyYXRpb24pKytdPSgqYykrKzsKICAgIH0KfQoKdm9pZCBwcmludF9zdGFnZV8xKGludCB0ZXJtcyxpbnQgZGZkdF9wYWlycyl7CiAgICBwcmludGYoIlN0YWdlIDEgT3V0cHV0XG4iKTsKICAgIHByaW50ZigiaW5kZXggaGFzICVkIHRlcm1zIGFuZCAlZCAoZCxmZHQpIHBhaXJzXG4iLHRlcm1zLGRmZHRfcGFpcnMpOwogICAgLypwcmludGYoIlRlcm0gMSBpcyAiXCIlZCJcIiAiKSovCn0=