Statistics
| Branch: | Revision:

root / hope.c @ 0:3c15de202295

History | View | Annotate | Download (47.1 KB)

1
#include "hope.h"
2
#include "maintain.c"
3
#include "user_dict.c"
4
#include <gdk/gdkkeysyms.h>
5
#include <glib/gprintf.h>
6

    
7
PangoFontDescription *font_desc;
8
PangoFontDescription *font_dsc;
9
GtkRcStyle *rc_style;
10

    
11
static int flagserial,flagspace,flagback;
12
char sound[20];
13
char  logfile[MAX_STR_LEN];
14
/* Create a new hbox with an image and a label packed into it
15
 * and return the box. This is used at the top level */
16

    
17

    
18

    
19

    
20
static GtkWidget *xpm_label_box(gchar *label_text,  gchar *xpm_filename)
21
{
22
  GtkWidget *box;
23
  GtkWidget *label;
24
  GtkWidget *image;
25
  char final_label[10];
26

    
27
font_desc = pango_font_description_from_string ("Helvetica,Sans 15");
28
font_dsc = pango_font_description_from_string ("Helvetica,Sans 15");
29
  strcpy (final_label, " ");
30
  strcat (final_label, label_text);
31
  strcat (final_label, " ");
32
  
33
  /* Create box for image and label */
34
  box = gtk_vbox_new (FALSE, 0);
35
  
36
  gtk_container_set_border_width (GTK_CONTAINER (box), 0);
37
  
38
  /* Now on to the image stuff */
39
  image = gtk_image_new_from_file (xpm_filename);
40
  
41
  /* Create a label for the button */
42
  label = gtk_label_new (final_label);
43
//  gtk_widget_modify_font (label, font_dsc);  
44
//  gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &blue);
45

    
46
  /* Pack the image and label into the box */
47
  gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
48
//  gtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 3);  
49
  gtk_widget_show (label);
50
//gtk_widget_show (image);
51
  
52
    return box;
53
}
54

    
55
/* This function is used for removing temp files while running the application and exit the application. */
56

    
57
int cleanup_and_main_quit ()
58
{
59
  system ("sh clean.sh");
60
  gtk_main_quit ();
61
}
62

    
63
/* Callback method */
64

    
65
static void create_buttons()
66
{
67
  GtkWidget *box, *message;
68
  
69
  int i;
70
  int response = read_conf_file (CONFIG_FILE);
71
  change_mode = 0; // initial default mode 
72

    
73
  /* This is to read the config file*/          
74
  if (response == -1)
75
    fprintf (fp, "Error: Can not open config file %s\n", CONFIG_FILE);
76
  else if (response == -2)
77
    fprintf (fp, "Error: In config file => Wrong definition of label\n");
78
  else if (response == -3)
79
    fprintf (fp, "Error: In config file => Invalid mode given\n");
80
  
81
  if (response < 0)
82
  {  
83

    
84
     message = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Brain overflow!");
85
     gtk_dialog_run(GTK_DIALOG(message));
86
     gtk_widget_hide(message);
87
     exit (1); 
88
  }
89
 
90
  /* This is to populate all the 9 buttons with alphabets as labels*/
91
  for(i = 0; i < 10; i++)
92
    {        
93
      button[i] = gtk_button_new();
94
      box = xpm_label_box (label[i], icon[i]);
95
//      g_print ("hop.c the label is %s\n",label[i]);
96
      gtk_container_add (GTK_CONTAINER (button[i]), box);
97
      gtk_table_attach_defaults (GTK_TABLE (table), button[i], i, i+1, 0, 2);
98
      gtk_widget_show (box);
99
      gtk_widget_show (button[i]);
100
    }
101

    
102
  g_signal_connect (GTK_OBJECT (window), "key_press_event",
103
                     GTK_SIGNAL_FUNC ( check), NULL); 
104
}
105

    
106
/*
107
This method does the switching when the button is pressed. According to 
108
various scan modes, it switches from one to other and highlights buttons/labels.
109
*/
110

    
111
static void callback()
112
{
113
  int index,i;
114

    
115
  if(scan_mode == 2)
116
    {
117
    
118
     switch(iter2%4)
119
        {
120
        case 0:
121
        sprintf(selected_char, "%s", gtk_label_get_text(GTK_LABEL(single_button_label[0])));
122

    
123
        if(strncmp(selected_char,"#",1) == 0)
124
         {
125
           char text_space[300];
126
           strcpy(text_to_add, (char *)gtk_entry_get_text(GTK_ENTRY(entry_label[0])));
127
           strcpy(text_space,text_to_add);
128
           for (i=0 ; i < strlen(text_space) ; i++)
129
           if(text_space[i]==' ')
130
           text_space[i] = '-';
131
           fprintf(fp, "W %s \n", text_space);
132
           is_word_selected = 1;
133
           enter_into_sentence_box();
134
/*-- will change to this            gdk_threads_enter();
135
           for(index = 0; index < 5; index++)
136
           gtk_entry_set_text(GTK_ENTRY(entry_label[index]), "");
137
           gdk_threads_leave(); if they ask */
138
         }
139

    
140
        if(strncmp(selected_char," ",1)==0)          
141
        {
142
//         g_print ("The space thing is here %s\n",selected_char);
143
         spell_mode=0;
144
        }
145
         break;
146
        case 1:
147
          sprintf(selected_char, "%s", gtk_label_get_text(GTK_LABEL(single_button_label[1])));
148

    
149
          if(strncmp(selected_char,"#",1) == 0)
150
           {
151
              char text_space[300];
152
              strcpy(text_to_add, (char *)gtk_entry_get_text(GTK_ENTRY(entry_label[0])));
153
              strcpy(text_space,text_to_add);
154
              for (i=0 ; i < strlen(text_space) ; i++)
155
              if(text_space[i]==' ')
156
              text_space[i] = '-';
157
              fprintf(fp, "W %s \n", text_space);
158
              is_word_selected = 1;
159
              enter_into_sentence_box();
160
           }
161
            
162
          if(strncmp(selected_char,"UNDO",4) == 0)
163
          {
164
               flagspace=1;
165
               gtk_widget_modify_bg(single_button[1], GTK_STATE_NORMAL, &colorGray);
166
               strcpy(text_to_add,"");
167
               flagpridict=0;
168
               strcpy(strpridict,"");
169
               for(index = 0; index < 5; index++)
170
               gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
171
               gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
172
               //enter_into_sentence_box ();
173
               scan_mode=4;
174
//             gtk_entry_set_text(GTK_ENTRY(sentence_box)," ");
175
//             is_back_selected=1; 
176
//              g_print ("yes\n");
177
//             return;
178
          }
179
          break;
180
        case 2:        
181
          sprintf(selected_char, "%s", gtk_label_get_text(GTK_LABEL(single_button_label[2])));
182
          if(strncmp(selected_char,"#",1) == 0)
183
           {
184
              char text_space[300];
185
              strcpy(text_to_add, (char *)gtk_entry_get_text(GTK_ENTRY(entry_label[0])));
186
              strcpy(text_space,text_to_add);
187
              for (i=0 ; i < strlen(text_space) ; i++)
188
              if(text_space[i]==' ')
189
              text_space[i] = '-';
190
              fprintf(fp, "W %s \n", text_space);
191
              is_word_selected = 1;
192
              enter_into_sentence_box();
193
           }
194
/*            
195
              change_mode = 1;
196
              if(spell_mode == 0)
197
              {         
198
                // from word to spell mode
199
//--u                fprintf(fp, "W->S\n");
200
                      spell_mode = 1;
201
              }
202
              else        
203
              {
204
                // from spell mode to word mode
205
//--u                fprintf(fp, "S->W\n");
206
                      spell_mode = 0;
207
              }
208
                               
209
          }*/        
210
          break;
211
        case 3:        
212
          gdk_threads_enter();
213
          sprintf(selected_char, "%s", gtk_label_get_text(GTK_LABEL(single_button_label[3])));
214
          gdk_threads_leave(); 
215
          flagback=1;
216
          is_back_selected = 1;
217
          break;
218
        }
219
       // Selected char
220
//       fprintf(fp, "C = %s\n",selected_char);
221
    }
222
  else if (scan_mode == 3)
223
    {  
224
      char text_space[200];
225
      switch(iter3%mod_value)
226
        {
227
        case 1:
228
          strcpy(text_to_add, (char *)gtk_entry_get_text(GTK_ENTRY(entry_label[0])));
229

    
230
          strcpy(text_space,text_to_add);
231
          for (i=0 ; i < strlen(text_space); i++)
232
          if(text_space[i]==' ')
233
          text_space[i] = '-';
234
          if(selected_char[0] == ' ')
235
          fprintf(fp, "D  %s \n", text_space);
236
          else
237
          fprintf(fp, "W %s \n", text_space);
238

    
239
          is_word_selected = 1;
240
          enter_into_sentence_box();
241
          break;
242
        case 2:
243
          strcpy(text_to_add, (char *)gtk_entry_get_text(GTK_ENTRY(entry_label[1])));
244
    // Selected word
245
          strcpy(text_space,text_to_add);
246
          for (i=0 ; i < strlen(text_space); i++)
247
          if(text_space[i]==' ')
248
          text_space[i] = '-';
249
          if(selected_char[0] == ' ')
250
          fprintf(fp, "D  %s \n", text_space);
251
          else
252
          fprintf(fp, "W %s \n", text_space);
253

    
254
          is_word_selected = 1;
255
          enter_into_sentence_box();
256
          break;
257
        case 3:
258
          strcpy(text_to_add,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[2])));
259
    // Selected word
260
          strcpy(text_space,text_to_add);
261
          for (i=0 ; i < strlen(text_space); i++)
262
          if(text_space[i]==' ')
263
          text_space[i] = '-';
264
          if(selected_char[0] == ' ')
265
          fprintf(fp, "D  %s \n", text_space);
266
          else
267
          fprintf(fp, "W %s \n", text_space);
268

    
269
          is_word_selected = 1;
270
          enter_into_sentence_box();
271
          break;
272
        case 4:
273
          strcpy(text_to_add,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[3])));
274
    // Selected word
275
          strcpy(text_space,text_to_add);
276
          for (i=0 ; i < strlen(text_space); i++)
277
          if(text_space[i]==' ')
278
          text_space[i] = '-';
279
          if(selected_char[0] == ' ')
280
          fprintf(fp, "D  %s \n", text_space);
281
          else
282
          fprintf(fp, "W %s \n", text_space);
283

    
284
          is_word_selected = 1;
285
          enter_into_sentence_box();
286
          break;
287
        case 5:
288
          strcpy(text_to_add,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[4])));
289
    // Selected word
290
          strcpy(text_space,text_to_add);
291
          for (i=0 ; i < strlen(text_space); i++)
292
          if(text_space[i]==' ')
293
          text_space[i] = '-';
294
          if(selected_char[0] == ' ')
295
          fprintf(fp, "D  %s \n", text_space);
296
          else
297
          fprintf(fp, "W %s \n", text_space);
298

    
299
          is_word_selected = 1;
300
          enter_into_sentence_box();
301
          break;
302
        case 6:
303
          is_more_selected = 1;
304
          break;
305
        case 0:
306
          stg3_back_selected = 1;
307
          break;
308
        default:
309
          break;
310
        }
311
    }
312
  else if (scan_mode == 4)
313
    {
314
//         g_print ("##################################################################yes this is the place\n");
315
//    sleep(5);
316
      if (is_selected)
317
        {
318
          is_word_selected = 0;        
319
          gdk_threads_enter();
320
          gtk_widget_modify_bg(single_button[5], GTK_STATE_NORMAL, &colorGray);
321
          gdk_threads_leave();
322
          is_erase_selected = 1;
323
          enter_into_sentence_box();
324
        }
325
      else 
326
        {                
327
          int i = 0;
328
          char string[300];
329
          gdk_threads_enter();
330
          gtk_widget_modify_bg(single_button[4], GTK_STATE_NORMAL, &green);
331
          gdk_threads_leave();
332
          iter1=0;
333
         // Done selected - sentence in word mode/word in spell mode formed.
334
          strcpy(string,((char *)gtk_entry_get_text(GTK_ENTRY(sentence_box))));
335
          string[strlen(string)-1]='\0'; // because space is added to senetence box
336

    
337
/* Restricting the length of the string to SLEN, which will be added logfile*/
338
          if (strlen(string) >SLEN)
339
          string[SLEN-1]='\0';
340

    
341
          for(i=0;i<strlen(string)-1;i++)
342
          if(string[i]==' ')
343
          string[i]='-';
344
          fprintf(fp, "D  %s\n" , string);//((char *)gtk_entry_get_text(GTK_ENTRY(sentence_box))));
345
           system("play rings/click.wav");
346
                read_out((char *)gtk_entry_get_text(GTK_ENTRY(sentence_box)));
347
          system("play rings/click.wav");
348

    
349
          for (i=0; i <= current_index; i++)
350
              strcpy (text_array[i], "");
351
    current_index = 0;
352
    spell_index = 0;
353
          is_word_selected = 0;
354
          is_done_selected = 1;
355
//          gtk_widget_modify_bg(single_button[4], GTK_STATE_NORMAL, &colorGray);
356
//          g_print ("yes this is the placelllll \\n");
357
          prev_scan_mode = 1;
358
          while (check_for_user_input() == 0)
359
            ;
360
          gdk_threads_enter();
361
          gtk_entry_set_text(GTK_ENTRY(sentence_box),"");
362
          for(index = 0; index < 5; index++)
363
          gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
364
          gdk_threads_leave();
365
        }
366
    }
367

    
368
  if(is_word_selected)
369
    scan_mode = 4;         
370
  else if(is_more_selected)
371
    scan_mode = 3;
372
  else if (stg3_back_selected)
373
    scan_mode = 2;        
374
  else if (is_back_selected)                
375
  {
376
        scan_mode = 1;
377
  }
378
  else if(spell_mode && scan_mode == 1 && !change_mode) 
379
        scan_mode = 2; 
380
  else if(spell_mode && scan_mode == 2  && !change_mode)
381
  {
382
        strcpy(text_to_add,selected_char);
383
        enter_into_sentence_box();
384
        scan_mode = 4;
385
  }
386
  else if (change_mode)        
387
  {
388
    
389
    if(spell_mode)
390
    {        
391
        for(index = 0; index < 5; index++)
392
                gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
393
           
394
    }         
395
    else         
396
    {        
397
      for(index = 0; index < 5; index++)
398
        gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
399
//      gtk_entry_set_text(GTK_ENTRY(entry_label[5]), "MORE");
400
//      gtk_entry_set_text(GTK_ENTRY(entry_label[6]), "BACK");
401
      current_index++;
402
      spell_index = 0;
403
    }        
404
    scan_mode = 1;
405
    change_mode = 0;
406

    
407
  }
408
  else if(!spell_mode)        
409
    scan_mode = (scan_mode % 4) +1;
410
  else if(is_done_selected)
411
     scan_mode = 1; 
412
}
413

    
414
/*
415
Using spell mode once the word construction is done this method is called.
416
If the formed word is found in the dictionary, the wav file is played. 
417
Otherwise, the text to speech synthesis is done and the word is read out.
418
*/
419

    
420
void spell_out(char * string_to_read)
421
{
422
/*  int i = 0;
423
  char total_string [400];
424
  char prefix[20] = "wav/";
425
  int wordlen = strlen(string_to_read);
426
  int len;
427
  strcpy (total_string,"./playit.sh ");
428
  len=strlen(total_string);
429
  for(i=0;i<wordlen;i++)
430
    {
431
      if(string_to_read[i] == '#')
432
        {
433
// strcpy(prefix,"wav/");
434
          if(spell_mode)        
435
            strcpy(prefix,"word");
436
          else
437
            strcpy(prefix,"spell");
438
        }
439
      else
440
        {
441
          prefix[4]= tolower(string_to_read[i]);
442
          prefix[5] ='\0';
443
        }
444
//      strcat(total_string, prefix);
445
//      strcat(total_string,".wav ");
446
//      strcpy (total_string,"./playit.sh ");
447
      total_string[len++]=string_to_read[i];
448
      total_string[len++]=',';
449

450
    }
451

452
      total_string[len++]='\0';
453
  if(string_to_read[2]== '#') 
454
    {
455
     strcpy(total_string,"./playit.sh y,z,");
456
     strcat(total_string,prefix);
457
     }
458
    system(total_string);
459
  g_print ("The total string is %s\n",total_string);
460
//  strcat (total_string, " -o out.wav");
461
//  system(total_string);
462
//  system("play out.wav");*/
463
int i = 0;
464
  char total_string [100];
465
  char prefix[20] = "a";
466
  int wordlen = strlen(string_to_read);
467
 
468
  if(string_to_read[0] == 1 || string_to_read[0] == 2 || string_to_read[0] == 3)
469
    {
470
      system("./playit.sh template");
471
      return;
472
    }
473

    
474
  
475
  for(i=0;i<wordlen;i++)
476
    {
477
//      strcpy (total_string,"mplayer -quiet -af volume=20 wav/");
478
      strcpy (total_string,"./playit.sh ");
479
      if(string_to_read[i] == '#')
480
        {
481
/*          if(spell_mode)
482
            strcpy(prefix,"word");
483
          else
484
            strcpy(prefix,"spell"); */
485
            strcpy(prefix,"done"); 
486
        }
487
      else
488
        {
489
          prefix[0]= tolower(string_to_read[i]);
490
          prefix[1] ='\0';
491
        }
492
      strcat(total_string, prefix);
493
//      strcat(total_string,".mp3 ");
494
//      g_print ("%s\n",total_string);
495
     system(total_string);
496

    
497
//      sleep(1);
498
    }
499
//  strcat (total_string, " -o out.wav");
500
//  system(total_string);
501
//  system("play out.wav");
502

    
503

    
504

    
505
}
506

    
507
/* 
508
This is method is called in the word mode. This is to read the final sentence
509
formed after pressing the DONE button.
510
*/
511

    
512
void read_sentence(char * sentence)
513
{
514
  char *token;
515
  char * temp = (char *) malloc ((strlen(sentence)+1)*sizeof(char));
516
  strcpy(temp,sentence);
517
  token = strtok(temp, " ");
518
  while (token != NULL)
519
    {
520
      read_out(token);
521
      token = strtok(NULL, " ");
522
    }
523
  free (temp);
524
}
525

    
526
/* 
527
This is method is called in the word mode. This is to read the list of words
528
available in level 3.
529
*/
530

    
531
void read_out(char * string_to_read)
532
{
533
  char tmp_string [200];
534
  int i = 0, length = 0;
535
  char total_string [400];
536
  strcpy (tmp_string,string_to_read);
537
  for (i=0 ; i < strlen(tmp_string); i++)
538
               if(tmp_string[i]==' ')
539
               tmp_string[i] = '-';
540

    
541
  length = strlen(tmp_string);
542
  for(i = 0; i < length; i++)
543
    {
544
      if((tmp_string[i] != '-') && (tmp_string[i] != '#'))
545
              tmp_string[i] += 32;
546
      if(tmp_string[i] == '#')
547
        {        
548
//--          if(!spell_mode)
549
//--            strcpy(tmp_string,"spell");
550
//--          else
551
            strcpy (tmp_string,"done");
552
      }
553
    }
554
  strcpy (total_string,"./playit.sh  ");
555
  strcat(total_string,tmp_string);
556
  system(total_string);
557
  g_print ("The total string is %s\n",total_string);
558

    
559
}
560

    
561
/*
562
This method is to add/delete the words/letters in the selected box. (the 
563
box which shows the selected words/letters)
564
*/
565
void enter_into_sentence_box ()
566
{
567
  char concatenated_text[300] = "";
568
  int i;
569

    
570
// g_print ("ghjdgfdgsfjbg ---%d\n",flagspace ); 
571
   if (is_erase_selected)
572
    if (spell_mode && (spell_index))
573
       text_array[current_index][--spell_index] = 0;
574
    else
575
    {
576
       strcpy(text_array[current_index-1], "");
577
             strcpy(text_array[current_index], "");
578
       if (current_index != 0)
579
         current_index--;
580
//     printf ("I think it will come here :%d...........................\n",flagpridict);         
581
   }
582
  else 
583
    if (spell_mode)
584
     {
585
       text_array[current_index][spell_index++] = text_to_add[0];
586
       text_array[current_index][spell_index] = 0;
587
     }
588
/*   else if(flagspace == 1 )
589
      {
590
//       strcpy(text_array[current_index][spell_index++]," ");
591
//       text_array[current_index][spell_index++]=' ';
592
        text_array[current_index][spell_index++] = ' ';
593
        flagspace = 0;
594
      }*/
595
     else
596
       strcpy(text_array[current_index++],text_to_add);
597
  
598
  for(i=0; i <= current_index; i++) 
599
    { 
600
      strcat(concatenated_text,text_array[i]);
601
      strcat(concatenated_text," ");
602
    }
603
 
604
  gtk_entry_set_text(GTK_ENTRY(sentence_box),(gchar *)concatenated_text);        
605
  fclose(fp);
606

    
607
/* Calling the function update_user_dictionary to maintain a user local dictionary. */
608

    
609
  update_user_dictionary(dir_name) ;
610

    
611
  fp=fopen(logfile,"a");
612
}
613

    
614
/*
615
This is the method that keeps on running in a thread which scans the
616
buttons/labels at each level according to the requirements.
617
*/
618

    
619
void *button_selection (void *args)
620
{
621
  yes_or_no_args *data = (yes_or_no_args *)args;
622
  gboolean say_something;
623
  guint word_count = 0;
624
  int label_iter = 1, index = 0; 
625
  
626
  while (1) 
627
    {
628
      if(scan_mode == 1)
629
        {   
630
          gdk_threads_enter();
631
          if(flagback==1)
632
          {
633
           data->index-=3;
634
           iter1-=3;
635
//g_print ("data->index  and iter1+++++++++++++++++++++++++++ : %d and :%d\n",data->index,iter1);               
636
           if(iter1 == -2)
637
           {iter1=8;
638
            data->index=7;
639
           }
640
           if(iter1 == -1)
641
           {
642
            iter1=9;
643
            data->index=8;
644
           }
645
           if(iter1 == 0)
646
           data->index=9;
647
           if(data->index == -3)
648
           data->index=8;
649
           flagback=0;
650
          }
651

    
652
//          gtk_widget_modify_bg(button[data->index],GTK_STATE_NORMAL,&colorRed);
653
          gtk_widget_modify_bg(single_button[2], GTK_STATE_NORMAL, &colorGray);
654
          gtk_widget_modify_bg(single_button[3], GTK_STATE_NORMAL, &colorGray);
655
          gtk_widget_modify_bg(single_button[4], GTK_STATE_NORMAL, &colorGray);
656
          gtk_widget_modify_bg(single_button[5], GTK_STATE_NORMAL, &colorGray);
657
          gdk_threads_leave();
658
            
659
          is_word_selected = 0;
660
          is_more_selected = 0;
661
          is_back_selected = 0;
662
                      
663
 
664
          say_something = 1;// (yes_or_no != data->what);
665
          
666
          if(say_something)
667
            {
668
              /* set the variable */
669
              yes_or_no = data->what;
670
            }
671
          
672
          if (say_something)
673
            {
674
              /* set label text */
675
              if(data->what == NO_IT_IS_NOT)
676
                {
677
                  int index = iter1%10;
678

    
679
                   gchar string[7];
680
                  string[1] = '\0';
681
                     gdk_threads_enter ();
682
                  gtk_widget_modify_bg(button[data->index],GTK_STATE_NORMAL,&colorRed);
683
//g_print ("data->index---------------------------------- : %d\n",data->index);               
684
                  data->what = YES_IT_IS;
685
                  if(index == 0)
686
                    {
687
                      index = 10;
688
                    }
689
                  string[0] = label[index-1][0];
690
                  if(string[0] == '1')
691
                  strcpy(string," TEMP");
692
                  gtk_label_set_text(GTK_LABEL(single_button_label[0]), string);
693
                  string[0] = label[index-1][1];
694
                  if(string[0] == '2')
695
                  strcpy(string,"UNDO");
696
                  gtk_label_set_text(GTK_LABEL(single_button_label[1]), string);
697
                  string[0] = label[index-1][2];
698
                  if(string[0] == '3')
699
                  strcpy(string,"     ");
700
                  gtk_label_set_text(GTK_LABEL(single_button_label[2]), string);
701

    
702
                  gdk_threads_leave ();
703
                  if(index==10)
704
                  system ("./playit.sh tem,plate");
705
                  else
706
                  spell_out(label[index-1]);
707
                  if(check_for_user_input())
708
                    callback();        
709
                }
710
              else 
711
                {
712
                  if(scan_mode == 1)
713
                    {
714
                      gdk_threads_enter ();
715
                      gtk_widget_modify_bg(button[data->index],GTK_STATE_NORMAL,&colorGray);
716
                      data->index = (iter1++)%10;        
717
                      gdk_threads_leave ();
718
                    }                    
719
                  data->what = NO_IT_IS_NOT;
720
                   }
721
            }
722
          iter2=0;
723
        }
724
      else if (scan_mode == 2)
725
        { int i;
726
          stg3_back_selected = 0;
727
          gdk_threads_enter ();
728
//          gtk_widget_modify_base(entry_label[6], GTK_STATE_NORMAL, &colorGray);
729
          for(i=0;i<10;i++)
730
          gtk_widget_modify_bg(button[i],GTK_STATE_NORMAL,&colorGray);
731
          gtk_widget_modify_bg (backbutton, GTK_STATE_NORMAL, &colorGray);
732
          gdk_threads_leave ();
733
          switch(iter2%4)
734
            {
735
            case 0:
736
              gdk_threads_enter ();
737
              gtk_widget_modify_bg(single_button[0],GTK_STATE_NORMAL,&colorRed);
738
              gtk_widget_modify_bg(single_button[3],GTK_STATE_NORMAL,&colorGray);
739
              gdk_threads_leave ();
740
              read_out((char *)gtk_label_get_text(GTK_LABEL(single_button_label[0])));
741
              if(check_for_user_input())
742
                callback();        
743
              iter2++;
744
              break;
745
            case 1:
746
              gdk_threads_enter ();
747
              gtk_widget_modify_bg(single_button[1],GTK_STATE_NORMAL,&colorRed);
748
              gtk_widget_modify_bg(single_button[0],GTK_STATE_NORMAL,&colorGray);
749
              gdk_threads_leave ();
750
              read_out((char *)gtk_label_get_text(GTK_LABEL(single_button_label[1])));
751
              if(check_for_user_input())
752
                callback();        
753
              iter2++;
754
              break;
755
            case 2:
756
              gdk_threads_enter ();
757
              gtk_widget_modify_bg(single_button[2],GTK_STATE_NORMAL,&colorRed);
758
              gtk_widget_modify_bg(single_button[1],GTK_STATE_NORMAL,&colorGray);
759
              gdk_threads_leave ();
760
              read_out((char *)gtk_label_get_text(GTK_LABEL(single_button_label[2])));
761
              if(check_for_user_input())
762
                callback();        
763
              iter2++;
764
              break;
765
            case 3: 
766
              gdk_threads_enter ();
767
              gtk_widget_modify_bg(single_button[3],GTK_STATE_NORMAL,&colorRed);
768
              gtk_widget_modify_bg(single_button[2],GTK_STATE_NORMAL,&colorGray);
769
              gdk_threads_leave ();
770
              read_out((char *)gtk_label_get_text(GTK_LABEL(single_button_label[3])));
771
              if(check_for_user_input())
772
                callback();        
773
              if(!is_back_selected)
774
              {
775
                  prev_scan_mode = 2;
776
                  scan_mode = 4; 
777
              }          
778
              iter2++;
779
              break;
780
            }
781
          iter3=1;
782
          label_iter = 1;
783
          mod_value = 7;
784
        }
785
      else if (scan_mode == 3)
786
        {
787
          gchar returnString[MAX_STR_LEN];
788
         
789
          gdk_threads_enter();
790
          for(index = 0; index < 6; index++)
791
            gtk_widget_modify_bg(single_button[index],GTK_STATE_NORMAL,&colorGray);
792
          gdk_threads_leave();
793
          
794
          if(iter3 == 1)
795
            {
796
              word_count = init_query(selected_char);
797
              if (flagpridict ==1)
798
              strcpy (selected_char,strpridict);
799
              gdk_threads_enter();
800
              gtk_entry_set_text(GTK_ENTRY(entry_label[0]),selected_char);
801
              gdk_threads_leave();
802
              if(word_count > 0)
803
                  for(index =1; index < 5; index ++)
804
                    {
805
                      run_query(returnString,label_iter++);
806
                      gdk_threads_enter();
807
                      gtk_entry_set_text(GTK_ENTRY(entry_label[index]),returnString);
808
                      gdk_threads_leave();
809
                    }
810
              else
811
                 {
812
                  gdk_threads_enter();
813
                  for(index = 1; index < 5; index++)
814
                  gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
815
                  gdk_threads_leave();
816
                 }
817
            }                
818
          if(label_iter > word_count)
819
            {
820
              is_more_selected = 0;
821
              mod_value = word_count+2;
822
//              printf ("------------------------------------%d",mod_value);
823
            }
824
          else if(is_more_selected)
825
            {
826
                  int diff = word_count - label_iter;
827
                  if(diff > 5)
828
                     for(index =1; index < 5; index ++)
829
                      {
830
                      run_query(returnString,label_iter++);
831
                      gdk_threads_enter();
832
                      gtk_entry_set_text(GTK_ENTRY(entry_label[index]),returnString);
833
                      gdk_threads_leave();
834
                    }
835
                   else 
836
                   {
837
                      for(index = 1; index <diff; index++)
838
                      {
839
                         run_query(returnString,label_iter++);
840
                         gdk_threads_enter();
841
                         gtk_entry_set_text(GTK_ENTRY(entry_label[index]),returnString);
842
                         gdk_threads_leave();
843
                      } 
844
                      for(; index < 5 ; index++)
845
                      {
846
                         gdk_threads_enter();
847
                         gtk_entry_set_text(GTK_ENTRY(entry_label[index])," ");
848
                         gdk_threads_leave();
849
                      }  
850
                      mod_value = diff + 1;
851
//          printf ("%d------------%d----------\n",mod_value,diff);
852
            
853
                   }    
854
              is_more_selected = 0;
855
              iter3 = 1; 
856
              gdk_threads_enter();
857
//              gtk_widget_modify_bg(entry_label[5], GTK_STATE_NORMAL, &colorGray);
858
              gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
859
              gdk_threads_leave();
860
            }
861
          char spacestr[100];
862
           int ind;
863
//          printf ("%d------------%d----------%d\n",iter3,mod_value,no_of_results);
864
                  if (selected_char[0] == ' ')
865
                     {
866
                       if((iter3%mod_value) == 1)
867
                         iter3=2;
868
                      gdk_threads_enter();
869
                      for(index = 1; index < 5; index++)
870
                      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
871
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
872
                      gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
873
                      gdk_threads_leave();
874
                     }
875
          switch(iter3%mod_value)                
876
            {
877
            case 1: 
878
              gdk_threads_enter();
879
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&colorRed);
880
              
881
              for(index = 0; index < 5; index++)
882
                  if(index != 0)
883
                      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
884
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
885
                      gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
886
              
887
              gdk_threads_leave();
888
              strcpy(spacestr,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[0])));
889
               for (ind=0 ; ind < strlen(spacestr); ind++)
890
               if(spacestr[ind]==' ')
891
               spacestr[ind] = '-';
892
//               g_print ("the string  is : %s \n",spacestr);
893
               read_out(spacestr);
894
              //read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[0])));
895
              if(check_for_user_input())
896
                { 
897
                  iter1=0;
898
                  flagpridict=1;
899
                  strcpy(strpridict,spacestr);
900
                  scan_mode=0;
901
                  printf("before callback\n");
902
                  callback();
903
                  printf("after callback\n");
904
                }
905
              iter3++;
906
              break;
907
            case 2:
908
              gdk_threads_enter();
909
              gtk_widget_modify_base(entry_label[1], GTK_STATE_NORMAL,&colorRed);
910
              for(index = 0; index < 5; index++)
911
                  if(index != 1)
912
                      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
913
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
914
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
915
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
916
              
917
              gdk_threads_leave();
918
              strcpy(spacestr,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[1])));
919
               for (ind=0 ; ind < strlen(spacestr); ind++)
920
               if(spacestr[ind]==' ')
921
               spacestr[ind] = '-';
922
//               g_print ("the string  is : %s \n",spacestr);
923
               read_out(spacestr);
924
//              read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[1])));
925
              if(check_for_user_input())
926
                callback();
927
              iter3++;
928
              break;
929
            case 3:
930
              gdk_threads_enter();
931
              gtk_widget_modify_base(entry_label[2], GTK_STATE_NORMAL,&colorRed);
932
              for(index = 0; index < 5; index++)
933
                  if(index != 2)
934
                      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
935
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
936
                      gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
937
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
938
              
939
              gdk_threads_leave();
940
              strcpy(spacestr,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[2])));
941
               for (ind=0 ; ind < strlen(spacestr); ind++)
942
               if(spacestr[ind]==' ')
943
               spacestr[ind] = '-';
944
//               g_print ("the string  is : %s \n",spacestr);
945
               read_out(spacestr);
946
//              read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[2])));
947
              if(check_for_user_input())
948
                callback();
949
              iter3++;
950
              break;
951
            case 4:
952
              gdk_threads_enter();
953
              gtk_widget_modify_base(entry_label[3], GTK_STATE_NORMAL,&colorRed);
954
              for(index = 0; index < 5; index++)
955
                  if(index != 3)
956
                      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
957
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
958
                      gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
959
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
960

    
961
              gdk_threads_leave();
962
              strcpy(spacestr,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[3])));
963
               for (ind=0 ; ind < strlen(spacestr); ind++)
964
               if(spacestr[ind]==' ')
965
               spacestr[ind] = '-';
966
//               g_print ("the string  is : %s \n",spacestr);
967
               read_out(spacestr);
968
//              read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[3])));
969
              if(check_for_user_input())
970
                                        callback();
971
              iter3++;
972
              break;
973
            case 5:
974
              gdk_threads_enter();
975
              gtk_widget_modify_base(entry_label[4], GTK_STATE_NORMAL,&colorRed);
976
              for(index = 0; index < 5; index++)
977
                  if(index != 4)
978
                      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
979
                      gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
980
                      gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
981
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
982
                
983
              gdk_threads_leave();
984
              strcpy(spacestr,(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[4])));
985
               for (ind=0 ; ind < strlen(spacestr); ind++)
986
               if(spacestr[ind]==' ')
987
               spacestr[ind] = '-';
988
//               g_print ("the string  is : %s \n",spacestr);
989
               read_out(spacestr);
990
//              read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[4])));
991
              if(check_for_user_input())
992
                callback();
993
              iter3++;
994
              break;
995
            case 6: 
996
              gdk_threads_enter();
997
//              gtk_widget_modify_base(entry_label[5], GTK_STATE_NORMAL,&colorRed);
998
              gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL,&colorRed);
999
              for(index = 0; index < 5; index++)
1000
              gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
1001
              gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
1002
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
1003
                                
1004
              gdk_threads_leave();
1005
//            read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[5])));
1006
              read_out ("MORE");
1007
              if(check_for_user_input())
1008
                    callback();
1009
              iter3++;
1010
              break;
1011
            case 0:
1012
              gdk_threads_enter();
1013
//              gtk_widget_modify_base(entry_label[6], GTK_STATE_NORMAL,&colorRed);
1014
              gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL,&colorRed);
1015
              for(index = 0; index < 5; index++)
1016
              gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
1017
              gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
1018
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
1019
                    
1020
              gdk_threads_leave();
1021
//              read_out((char *)gtk_entry_get_text(GTK_ENTRY(entry_label[6])));
1022
              read_out("BACK");//(char *)gtk_entry_get_text(GTK_ENTRY(entry_label[6])));
1023
              if(check_for_user_input())
1024
                {
1025
                 if (flagpridict == 1 )
1026
                   {
1027
                    int len=strlen(strpridict);
1028
                    strpridict[len-1]='\0';
1029
                    gdk_threads_enter();
1030
                    gtk_entry_set_text(GTK_ENTRY(entry_label[0]), strpridict);
1031
                    gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL, &yellow);
1032
                    gdk_threads_leave();
1033
                   }
1034
                 else
1035
                   {
1036
                     gdk_threads_enter();
1037
                     for(index = 0; index < 5; index++)
1038
                     gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
1039
                     gdk_threads_leave();
1040
                   }
1041
                 callback();
1042
                }
1043
              iter3++;
1044
              break;
1045
            }
1046
             
1047
//          gdk__threads_leave();
1048

    
1049
        }
1050
      else if (scan_mode == 4)
1051
        {
1052
          gdk_threads_enter ();
1053
//         sleep(2); 
1054
//g_print("test maadi");
1055
          for(index = 0; index < 5; index++)
1056
              gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
1057
              gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
1058
              gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
1059
              gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
1060
          
1061
          gdk_threads_leave ();
1062
          
1063
          gdk_threads_enter ();
1064
          for(index =0; index < 4; index++)
1065
            gtk_widget_modify_bg(single_button[index],GTK_STATE_NORMAL,&colorGray);
1066
          gdk_threads_leave ();
1067
          
1068
          //for DONE button
1069
                
1070
          is_selected = 0;
1071
          gdk_threads_enter ();
1072
          gtk_widget_modify_bg(single_button[4],GTK_STATE_NORMAL,&colorRed);
1073
          gtk_widget_modify_bg(single_button[5],GTK_STATE_NORMAL,&colorGray);
1074
          gdk_threads_leave ();
1075
          read_out((char *)gtk_label_get_text(GTK_LABEL(single_button_label[4])));
1076
          sleep(1); 
1077

    
1078
          if(check_for_user_input())
1079
            callback();
1080
          
1081
          if(is_done_selected)
1082
            {
1083
              scan_mode = 1;
1084
              is_done_selected = 0;
1085
     g_print ("check here\n");
1086
            }
1087
          else 
1088
            {
1089
              //for ERASE button
1090
              is_selected = 1;
1091
              gdk_threads_enter ();
1092
              gtk_widget_modify_bg(single_button[5],GTK_STATE_NORMAL,&colorRed);
1093
              gtk_widget_modify_bg(single_button[4],GTK_STATE_NORMAL,&colorGray);
1094
              gdk_threads_leave ();
1095
              read_out((char *)gtk_label_get_text(GTK_LABEL(single_button_label[5])));
1096
              if(check_for_user_input())
1097
               {
1098
                  if (flagpridict == 1)
1099
                   {
1100
//                  gtk_entry_set_text(GTK_ENTRY(entry_label[0]),strpridict);
1101
//                    scan_mode=3;
1102
                    strcpy(selected_char ,"");
1103
                   }  
1104
                  callback();
1105
               }
1106
            }        
1107
          if(!is_erase_selected)
1108
            {
1109
              g_print("test maadi --1\n");
1110
//              flagpridict=0;
1111
//---              strcpy(strpridict,""); 
1112
              if((prev_scan_mode == 2) && (!is_done_selected))
1113
                {
1114
              g_print("test maadi --2\n");
1115
                  gdk_threads_enter();
1116
                  gtk_widget_modify_bg(single_button[5],GTK_STATE_NORMAL,&colorGray);
1117
                  gdk_threads_leave();
1118
                  prev_scan_mode = 1;
1119
                  scan_mode = 2;
1120
                }  
1121
              else 
1122
                {
1123
              g_print("test maadi --3\n");
1124
                  gdk_threads_enter();
1125
                  for(index = 0; index < 5; index++)
1126
                  gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
1127
                  gdk_threads_leave();
1128
                  scan_mode = 1;
1129
                  flagpridict=0;
1130
                  strcpy(strpridict,""); 
1131
                }
1132
            }
1133
          else
1134
            {
1135
              g_print("test maadi --4\n");
1136
              if(!spell_mode)        
1137
                if(prev_scan_mode == 2)
1138
                {
1139
                    g_print("test maadi --5 PS : %d  SM %d\n",scan_mode , prev_scan_mode);
1140
                    scan_mode = prev_scan_mode;
1141
                    gdk_threads_enter();
1142
                    gtk_widget_modify_bg(single_button[5],GTK_STATE_NORMAL,&colorGray);
1143
                    gdk_threads_leave();
1144
                }         
1145
                else         
1146
                {
1147
                    scan_mode = 3;
1148
                    if (selected_char[0] == '#')
1149
                    scan_mode = 1;
1150
                    g_print("test maadi --6 %s\n",selected_char);
1151
                }
1152
              else 
1153
                {
1154
                   scan_mode = 2;
1155
                   g_print("test maadi --7\n");
1156
                }
1157
              is_erase_selected = 0;
1158
            }
1159
        }
1160
    }
1161
  return NULL;
1162
}
1163

    
1164
/*
1165
This is to create buttons for level 2 and DONE and ERASE.
1166
*/
1167

    
1168
static void create_single_button()
1169
{
1170
  GtkWidget *box;
1171
  int index;
1172
  
1173
  for(index = 0; index < 6; index++)
1174
    {
1175
      single_button[index] = gtk_button_new();
1176
      box = gtk_vbox_new(FALSE,0);
1177
      
1178
      if(index == 3)        
1179
        {
1180
         single_button_label[index] = gtk_label_new("BACK");
1181
//         gtk_widget_modify_font (single_button_label[index], font_desc);  
1182
//         gtk_widget_modify_fg (single_button_label[index], GTK_STATE_NORMAL, &blue);
1183
        }
1184
      else if(index == 4)        
1185
        {
1186
         single_button_label[index] = gtk_label_new("DONE");
1187
//         gtk_widget_modify_font (single_button_label[index], font_desc);  
1188
//         gtk_widget_modify_fg (single_button_label[index], GTK_STATE_NORMAL, &blue);
1189
        }
1190
      else if(index == 5)
1191
        {
1192
         single_button_label[index] = gtk_label_new("ERASE");
1193
//         gtk_widget_modify_font (single_button_label[index], font_desc);  
1194
//         gtk_widget_modify_fg (single_button_label[index], GTK_STATE_NORMAL, &blue);
1195
        }
1196
      else
1197
        single_button_label[index] = gtk_label_new(" ");
1198
                        
1199
      gtk_box_pack_start (GTK_BOX (box), single_button_label[index], FALSE, FALSE, 3);
1200
      gtk_widget_show(single_button_label[index]);
1201
      gtk_widget_show(box);
1202
      gtk_container_add (GTK_CONTAINER (single_button[index]), box);
1203
      if(index == 4 || index == 5)
1204
        gtk_table_attach_defaults (GTK_TABLE (table),single_button[index], 9, 10, index, index+1);
1205
       else
1206
        gtk_table_attach_defaults (GTK_TABLE (table), single_button[index], 0, 1, index+3, index+4);
1207
                
1208
      gtk_widget_show(single_button[index]);
1209
    }
1210
}
1211

    
1212
/*
1213
This is to create the labels in level 3.
1214
*/
1215
void create_labels()
1216
{
1217
  int index;
1218
  
1219
  for(index = 0; index < 5; index ++)
1220
    {
1221
      entry_label[index] = gtk_entry_new_with_max_length(MAX_STR_LEN);
1222
//      gtk_widget_modify_text (entry_label[index], GTK_STATE_NORMAL, &blue);
1223
//      gtk_widget_modify_font ((entry_label[index]), font_desc);
1224
      gtk_entry_set_editable(GTK_ENTRY(entry_label[index]), FALSE);
1225
      gtk_widget_modify_base(entry_label[index], GTK_STATE_NORMAL, &colorGray);
1226
      gtk_table_attach_defaults (GTK_TABLE (table), entry_label[index], 2, 8, index+2,index+3);
1227
      
1228
/*    if(index == 5)
1229
      {        
1230
        if(!spell_mode)
1231
                gtk_entry_set_text(GTK_ENTRY(entry_label[index]), "MORE");
1232
        else 
1233
                gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
1234
      }
1235
      else if(index == 6)
1236
      { 
1237
        if(!spell_mode)
1238
                gtk_entry_set_text(GTK_ENTRY(entry_label[index]), "BACK");
1239
        else 
1240
                gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
1241
      }                
1242
      else
1243
        gtk_entry_set_text(GTK_ENTRY(entry_label[index]), " ");
1244
  */  
1245
      gtk_widget_show (entry_label[index]);
1246
    }
1247
  gtk_widget_modify_base(entry_label[0], GTK_STATE_NORMAL,&yellow);
1248
  morebutton = gtk_button_new_with_label("MORE");
1249
//  gtk_widget_modify_font (GTK_BIN (morebutton)->child, font_desc);  
1250
//  gtk_widget_modify_fg (GTK_BIN (morebutton)->child, GTK_STATE_NORMAL, &blue);
1251
  gtk_table_attach_defaults (GTK_TABLE (table), morebutton, 2, 5, 7,8);
1252
  gtk_widget_modify_bg(morebutton, GTK_STATE_NORMAL, &colorGray);
1253
  gtk_widget_show (morebutton);
1254
 
1255
  backbutton = gtk_button_new_with_label("BACK");
1256
//  gtk_widget_modify_font (GTK_BIN (backbutton)->child, font_desc);  
1257
//  gtk_widget_modify_fg (GTK_BIN (backbutton)->child, GTK_STATE_NORMAL, &blue);
1258
  gtk_table_attach_defaults (GTK_TABLE (table), backbutton, 5, 8, 7,8);
1259
  gtk_widget_modify_bg(backbutton, GTK_STATE_NORMAL, &colorGray);
1260
  gtk_widget_show (backbutton);
1261

    
1262
  sentence_box = gtk_entry_new_with_max_length(200);
1263
//  gtk_widget_modify_font ((sentence_box), font_desc);
1264
//  gtk_widget_modify_text (sentence_box, GTK_STATE_NORMAL, &blue);
1265
  gtk_entry_set_editable(GTK_ENTRY(sentence_box), FALSE);
1266
  gtk_entry_set_text(GTK_ENTRY(sentence_box)," ");        
1267
//  gtk_widget_modify_base(sentence_box, GTK_STATE_NORMAL, &colorGray);
1268
  gtk_table_attach_defaults (GTK_TABLE (table), sentence_box, 0, 10, 8, 9);
1269
  gtk_widget_grab_focus (sentence_box);
1270
  gtk_widget_show (sentence_box);
1271
}
1272

    
1273
/*
1274
The pos signifies the position of the word in the list of words
1275
in res.txt. resultAt.txt gives the word at pos.
1276
*/
1277

    
1278
void run_query(char *string, int pos)
1279
{
1280
  FILE *fid = NULL;
1281
  char cmd[300];
1282
  char str[3];
1283
  int ind;  
1284
  if( pos > no_of_results )
1285
    {
1286
      strcpy(string,"");
1287
      return;
1288
    }
1289
  strcpy (cmd, "cat res.txt | head -");
1290
  sprintf (str, "%d" , pos);
1291
  strcat (cmd, str);
1292
  strcat (cmd, " | tail -1 > resultAt.txt");
1293
  system (cmd);
1294
  
1295
  fid = fopen("resultAt.txt","r");
1296
  fscanf(fid,"%s",string);
1297
//  printf("---> %s pos %d no_of_res %d\n",string,pos,no_of_results);
1298
  fclose(fid);
1299
  for(ind=0;ind<strlen(string);ind++)
1300
  if(string[ind]=='-')
1301
  string[ind] = ' ';
1302
   return;
1303
}
1304

    
1305
/*
1306
This is to clean the query and reset the variables.
1307
*/
1308

    
1309
void clean_query(void)
1310
{
1311
  no_of_results = 0;
1312
  memset(query_string,0,MAX_LEN);
1313
  return;
1314
}
1315

    
1316
/*This is to check the dictionary and find out the list of words. The number of
1317
words resulted from the query is given in resNo.txt and the words are given
1318
in res.txt.
1319
*/
1320

    
1321
int init_query(char *qString)
1322
{
1323
  char cmd[100];
1324
  char spcmd[2200];
1325
  char cmd_new[200];
1326
  FILE *fid = NULL;
1327

    
1328
  fclose(fp);
1329
  if (qString[0]== ' ')
1330
  {
1331
   strcpy(qString," ");
1332
   strcpy(strpridict,"");
1333
   strcpy (spcmd, "grep -h '^D");
1334
  }
1335
  else
1336
  strcpy (spcmd, "grep -h '^W ");
1337

    
1338
  if (flagpridict == 1)
1339
  {
1340
     strcat(strpridict,qString);
1341
//     printf ("------------------> %s\n",strpridict);  
1342
     strcpy(qString,strpridict);
1343
//     printf ("------------------> %s\n",qString);  
1344
  }
1345

    
1346
  strcat(spcmd, qString);
1347
  strcat (spcmd, "' ");
1348
  strcat (spcmd, dir_name);
1349
  strcat (spcmd, "/logs/* | sort | uniq -c | sort -n -r  | awk '{print $3}' > res1.txt");
1350
/*for showing words used to all users */
1351
//--- : for showing words to all users:  strcat (spcmd, "-r users/* | sort | uniq -c | sort -n -r  | awk '{print $3}' > res1.txt");
1352
//  printf ("---> %s\n",spcmd);  
1353
  system (spcmd);
1354
  system ("cp res1.txt res.txt");
1355

    
1356

    
1357
  strcpy (query_string, qString);
1358
  strcpy (cmd, "grep  ""^");
1359
  strcat (cmd, qString);
1360
  strcat (cmd, """ ");
1361
  switch(query_string[0])
1362
    {
1363
    case 'A':
1364
    case 'B':
1365
    case 'C':
1366
//      strcat (cmd, "dict/abc.txt");
1367
      strcat (cmd, "dict/A2Zwordslist.txt");
1368
      break;
1369
    case 'D':
1370
    case 'E':
1371
    case 'F':
1372
//      strcat (cmd, "dict/def.txt");
1373
      strcat (cmd, "dict/A2Zwordslist.txt");
1374
      break;
1375
    case 'G':
1376
    case 'H':
1377
    case 'I':
1378
//      strcat (cmd, "dict/ghi.txt");
1379
      strcat (cmd, "dict/A2Zwordslist.txt");
1380
      break;
1381
    case 'J':
1382
    case 'K':
1383
    case 'L':
1384
//      strcat (cmd, "dict/jkl.txt");
1385
      strcat (cmd, "dict/A2Zwordslist.txt");
1386
      break;
1387
    case 'M':
1388
    case 'N':
1389
    case 'O':
1390
//      strcat (cmd, "dict/mno.txt");
1391
      strcat (cmd, "dict/A2Zwordslist.txt");
1392
      break;
1393
    case 'P':
1394
    case 'Q':
1395
    case 'R':
1396
//      strcat (cmd, "dict/pqr.txt");
1397
      strcat (cmd, "dict/A2Zwordslist.txt");
1398
      break;
1399
    case 'S':
1400
    case 'T':
1401
    case 'U':
1402
//      strcat (cmd, "dict/stu.txt");
1403
      strcat (cmd, "dict/A2Zwordslist.txt");
1404
      break;
1405
    case 'V':
1406
    case 'W':
1407
    case 'X':
1408
    case 'Y':
1409
    case 'Z':
1410
//      strcat (cmd, "dict/vwxyz.txt");
1411
      strcat (cmd, "dict/A2Zwordslist.txt");
1412
      break;
1413
    case '1':
1414
    case '2':
1415
    case '3':
1416
      strcat(cmd, "dict/temp.txt");
1417
      break;
1418
    default:
1419
      strcat(cmd, "dict/temp.txt");
1420
      break;
1421
    }
1422
  
1423
  strcat (cmd, "> let.txt");
1424
  system (cmd);
1425
  system ("cat res1.txt let.txt > res2.txt");
1426
  system ("cat res2.txt res1.txt | sort | uniq -u >> res.txt");
1427
//  printf("---> %s\n",cmd);
1428
//  strcat (cmd_new, " | wc -l > resNo.txt");
1429
  strcpy (cmd_new, "grep -c ^");
1430
  strncat(cmd_new,qString,1);
1431
  strcat (cmd_new," res.txt > resNo.txt");
1432
  system (cmd_new);
1433
//  printf("---> %s\n",cmd_new);
1434
  
1435
  fid = fopen("resNo.txt","r");
1436
  fscanf(fid,"%d",&no_of_results);
1437
//  printf("---> %d\n",no_of_results);
1438
  fclose(fid);
1439
  fp = fopen (logfile, "a");
1440
  
1441
  return no_of_results;
1442
}
1443

    
1444
/*
1445
This is the method called by the main program. This initializes the 
1446
GUI and spawns a thread which runs the scanning process forever.
1447
The thread is used as gtk_main should be called to make the GUI visible 
1448
and no code after that can be executed. Before gtk_main is invoked, if 
1449
the scanning process is done then it never reaches gtk_main and the
1450
GUI will not be displayed. 
1451
*/
1452

    
1453
int Callmain( int   *argc, char ***argv )
1454
{
1455

    
1456
  yes_or_no_args yes_args;
1457
  pthread_t yes_tid;
1458
  GtkWidget * event_box;
1459

    
1460
  time_t    time_now;
1461
  struct tm *time_ptr;
1462
  char  string[MAX_STR_LEN];
1463
  char  str_dict[MAX_STR_LEN];
1464

    
1465
  
1466
  time(&time_now);     /* get time in seconds */
1467

    
1468
 /* custom build the format of the date/ time */
1469
  time_ptr = localtime(&time_now);
1470
  strftime(string, MAX_STR_LEN, "%d-%b-%G", time_ptr);
1471

    
1472
  strcpy(logfile,USER_DIR);
1473
  strcat(logfile,user_name);
1474
  strcat(logfile,LOG_FILE_PREFIX);
1475
  mkdir(logfile, (mode_t)0755); 
1476
  
1477
/* Here we are calling the function maintain_userlogs in maintain.c to restrict the memory for a each user. */
1478

    
1479
  maintain_userlogs (logfile);
1480

    
1481
/* Here we are creating local dictionary for the usser. */
1482

    
1483
  strcpy(str_dict , "touch ");
1484
  strcat(str_dict , logfile);
1485
  strcat(str_dict  , "dict.txt");
1486
  system(str_dict);
1487

    
1488
  strcat(logfile,string);   
1489
//  printf("LOG FILE NAME IS %s\n", LOGFIle);
1490

    
1491
  fp = fopen (logfile, "a");
1492
  
1493
  gdk_color_parse("red",&colorRed);        
1494
  gtk_init (argc, argv);
1495
  
1496
  if (!g_thread_supported ())
1497
    {
1498
      g_thread_init (NULL);
1499
      gdk_threads_init(); 
1500
    }
1501
  
1502
  gdk_threads_enter ();
1503
  
1504
  
1505
  /* Create a new window */
1506
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1507
  gtk_widget_set_size_request (window, 800, 400);
1508
  gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
1509
  
1510
  gtk_window_set_title (GTK_WINDOW (window), "HOPE");
1511

    
1512
  /* It's a good idea to do this for all windows. */
1513
  g_signal_connect (G_OBJECT (window), "destroy",
1514
                    G_CALLBACK (cleanup_and_main_quit), NULL);
1515
  
1516
  g_signal_connect (G_OBJECT (window), "delete_event",
1517
                    G_CALLBACK (cleanup_and_main_quit), NULL);
1518
  
1519
  //adding event_box for handling events
1520
  event_box = gtk_event_box_new ();
1521
  gtk_container_add (GTK_CONTAINER (window), event_box);
1522
  
1523
  /* Sets the border width of the window. */
1524
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
1525
  
1526
  /* Create a 10x10 table */
1527
  table = gtk_table_new (9, 10, TRUE);
1528
  
1529
  /*Set table row spacing and column spacing*/
1530
  gtk_table_set_col_spacings (GTK_TABLE (table), 2);
1531
  gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1532
  
1533
  /* Put the table in the main window */
1534
  gtk_container_add (GTK_CONTAINER (event_box), table);
1535
  
1536
  /* Create buttons */
1537
  create_buttons();
1538
  
1539
  gtk_widget_modify_bg(button[0],GTK_STATE_NORMAL,&colorRed);
1540
  
1541
  create_single_button();
1542
  
1543
  create_labels();         
1544
  
1545
  gtk_widget_realize (event_box);
1546
  gdk_window_set_cursor (event_box->window, gdk_cursor_new (GDK_HAND1));
1547
  
1548
  gtk_widget_show (table);
1549
  gtk_widget_show (event_box);
1550
  gtk_widget_show (window);
1551
  
1552
  /* 
1553
  Here the variables to be sent to the thread are created. The thread is 
1554
  created and button_selection method is executed in the thread.
1555
  */
1556
  scan_mode = 1;
1557
  yes_args.what = NO_IT_IS_NOT;
1558
  yes_args.index = 0;        
1559
  pthread_create (&yes_tid, NULL, button_selection, &yes_args);
1560
  
1561
  /* Rest in gtk_main and wait for the fun to begin! */
1562
  gtk_main ();
1563
  gdk_threads_leave ();
1564
  
1565
  return 0;
1566
}
1567

    
1568

    
Redmine Appliance - Powered by TurnKey Linux