Back to index

gcompris  8.2.2
Classes | Defines | Enumerations | Functions | Variables
reading.c File Reference
#include <string.h>
#include "gcompris/gcompris.h"

Go to the source code of this file.

Classes

struct  LettersItem

Defines

#define SOUNDLISTFILE   PACKAGE
#define MAXWORDSLENGTH   50
#define MAX_WORDS   100
#define NOT_THERE   -1000
#define BASE_X1   70
#define BASE_Y1   120
#define BASE_X2   350
#define BASE_Y2   520
#define BASE_CX   BASE_X1+(BASE_X2-BASE_X1)/2

Enumerations

enum  Mode { MODE_NORMAL = 0, MODE_TUX = 1, MODE_HORIZONTAL = 0, MODE_VERTICAL = 1 }

Functions

static void start_board (GcomprisBoard *agcomprisBoard)
static void pause_board (gboolean pause)
static void end_board (void)
static gboolean is_our_board (GcomprisBoard *gcomprisBoard)
static void set_level (guint level)
static gboolean reading_create_item (GnomeCanvasGroup *parent)
static gint reading_drop_items (void)
static void reading_destroy_all_items (void)
static gint reading_next_level (void)
static void reading_config_start (GcomprisBoard *agcomprisBoard, GcomprisProfile *aProfile)
static void reading_config_stop (void)
static void player_win (void)
static void player_loose (void)
static gchar * get_random_word (const gchar *except)
 Return a random word from a set of text file depending on the current level and language.
static GnomeCanvasItem * display_what_to_do (GnomeCanvasGroup *parent)
static void ask_ready (gboolean status)
static void ask_yes_no (void)
static gint item_event_valid (GnomeCanvasItem *item, GdkEvent *event, gpointer data)
static void save_table (gpointer key, gpointer value, gpointer user_data)
static void conf_ok (GHashTable *table)

Variables

static GcomprisWordlistgc_wordlist = NULL
static GcomprisBoard * gcomprisBoard = NULL
static gint drop_items_id = 0
static gint next_level_timer = 0
static gchar * textToFind = NULL
static gint textToFindIndex = 0
static GnomeCanvasGroup * boardRootItem = NULL
static Mode currentMode = MODE_VERTICAL
static LettersItem previousFocus
static LettersItem toDeleteFocus
gint current_x
gint current_y
gint numberOfLine
gint font_size
gint interline
static int wait_for_ready
static int gamewon
static guint32 fallSpeed = 0
static BoardPlugin menu_bp
static GcomprisProfileprofile_conf
static GcomprisBoard * board_conf

Class Documentation

struct LettersItem

Definition at line 55 of file reading.c.

Class Members
gint count
GnomeCanvasItem * item
gchar * letter
gchar * overword
GnomeCanvasItem * overwriteItem
gchar * pos
GnomeCanvasItem * rootitem
GnomeCanvasGroup * rootItem
gchar * word

Define Documentation

#define BASE_CX   BASE_X1+(BASE_X2-BASE_X1)/2

Definition at line 70 of file reading.c.

#define BASE_X1   70

Definition at line 66 of file reading.c.

#define BASE_X2   350

Definition at line 68 of file reading.c.

#define BASE_Y1   120

Definition at line 67 of file reading.c.

#define BASE_Y2   520

Definition at line 69 of file reading.c.

#define MAX_WORDS   100

Definition at line 31 of file reading.c.

#define MAXWORDSLENGTH   50

Definition at line 30 of file reading.c.

#define NOT_THERE   -1000

Definition at line 43 of file reading.c.

#define SOUNDLISTFILE   PACKAGE

Definition at line 29 of file reading.c.


Enumeration Type Documentation

enum Mode
Enumerator:
MODE_NORMAL 
MODE_TUX 
MODE_HORIZONTAL 
MODE_VERTICAL 

Definition at line 47 of file reading.c.


Function Documentation

static void ask_ready ( gboolean  status) [static]

Definition at line 533 of file reading.c.

{
  static GnomeCanvasItem *item1 = NULL;
  static GnomeCanvasItem *item2 = NULL;
  GdkPixbuf *button_pixmap = NULL;
  double y_offset = 310;
  double x_offset = 430;

  if(textToFind==NULL)
    return;

  if(status==FALSE)
    {
      if(item1!=NULL)
       gtk_object_destroy(GTK_OBJECT(item1));

      if(item2!=NULL)
       gtk_object_destroy(GTK_OBJECT(item2));

      item1 = NULL;
      item2 = NULL;
      return;
    }

  /*----- READY -----*/
  button_pixmap = gc_skin_pixmap_load("button_large2.png");
  item1 = gnome_canvas_item_new (boardRootItem,
                            gnome_canvas_pixbuf_get_type (),
                            "pixbuf",  button_pixmap,
                            "x", x_offset,
                            "y", y_offset,
                            NULL);

  gdk_pixbuf_unref(button_pixmap);
  gtk_signal_connect(GTK_OBJECT(item1), "event",
                   (GtkSignalFunc) item_event_valid,
                   "R");

  item2 = gnome_canvas_item_new (boardRootItem,
                            gnome_canvas_text_get_type (),
                            "text", _("I am Ready"),
                            "font", gc_skin_font_board_big,
                            "x", (double) x_offset +
                            gdk_pixbuf_get_width(button_pixmap)/2,
                            "y", (double) y_offset + 40,
                            "anchor", GTK_ANCHOR_CENTER,
                            "fill_color", "white",
                            NULL);

  gtk_signal_connect(GTK_OBJECT(item2), "event",
                   (GtkSignalFunc) item_event_valid,
                   "R");
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void ask_yes_no ( void  ) [static]

Definition at line 587 of file reading.c.

{
  GnomeCanvasItem *item;
  GdkPixbuf *button_pixmap = NULL;
  double y_offset = 310;
  double x_offset = 430;

  if(textToFind==NULL)
    return;

  /*----- YES -----*/
  button_pixmap = gc_skin_pixmap_load("button_large2.png");
  item = gnome_canvas_item_new (boardRootItem,
                            gnome_canvas_pixbuf_get_type (),
                            "pixbuf",  button_pixmap,
                            "x", x_offset,
                            "y", y_offset,
                            NULL);

  gdk_pixbuf_unref(button_pixmap);
  gtk_signal_connect(GTK_OBJECT(item), "event",
                   (GtkSignalFunc) item_event_valid,
                   "Y");

  item = gnome_canvas_item_new (boardRootItem,
                            gnome_canvas_text_get_type (),
                            "text", _("Yes, I saw it"),
                            "font", gc_skin_font_board_big,
                            "x", (double) x_offset +
                            gdk_pixbuf_get_width(button_pixmap)/2,
                            "y", (double) y_offset + 40,
                            "anchor", GTK_ANCHOR_CENTER,
                            "fill_color", "white",
                            NULL);

  gtk_signal_connect(GTK_OBJECT(item), "event",
                   (GtkSignalFunc) item_event_valid,
                   "Y");

  /*----- NO -----*/
  y_offset += 100;
  button_pixmap = gc_skin_pixmap_load("button_large2.png");
  item = gnome_canvas_item_new (boardRootItem,
                            gnome_canvas_pixbuf_get_type (),
                            "pixbuf",  button_pixmap,
                            "x", x_offset,
                            "y", y_offset,
                            NULL);

  gdk_pixbuf_unref(button_pixmap);
  gtk_signal_connect(GTK_OBJECT(item), "event",
                   (GtkSignalFunc) item_event_valid,
                   "N");

  item = gnome_canvas_item_new (boardRootItem,
                            gnome_canvas_text_get_type (),
                            "text", _("No, it was not there"),
                            "font", gc_skin_font_board_big,
                            "x", (double) x_offset +
                            gdk_pixbuf_get_width(button_pixmap)/2,
                            "y", (double) y_offset + 40,
                            "anchor", GTK_ANCHOR_CENTER,
                            "fill_color", "white",
                            NULL);

  gtk_signal_connect(GTK_OBJECT(item), "event",
                   (GtkSignalFunc) item_event_valid,
                   "N");
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void conf_ok ( GHashTable *  table) [static]

Definition at line 786 of file reading.c.

{
  if (!table){
    if (gcomprisBoard)
      pause_board(FALSE);
    return;
  }

  g_hash_table_foreach(table, (GHFunc) save_table, NULL);

  if (gcomprisBoard){
    gc_locale_reset();

    GHashTable *config;

    if (profile_conf)
      config = gc_db_get_board_conf();
    else
      config = table;

    gc_locale_set(g_hash_table_lookup( config, "locale"));

    if (profile_conf)
      g_hash_table_destroy(config);

    reading_next_level();

    pause_board(FALSE);
  }

  board_conf = NULL;
  profile_conf = NULL;

}

Here is the call graph for this function:

Here is the caller graph for this function:

static GnomeCanvasItem * display_what_to_do ( GnomeCanvasGroup *  parent) [static]

Definition at line 356 of file reading.c.

{

  gint base_Y = 110;
  gint base_X = 580;
  gint i;

  /* Load the text to find */

  textToFind = get_random_word(NULL);

  g_assert(textToFind != NULL);

  /* Decide now if this time we will display the text to find */
  /* Use this formula to have a better random number see 'man 3 rand' */
  i=((int)(2.0*rand()/(RAND_MAX+1.0)));
  if(i==0)
      textToFindIndex = rand() % numberOfLine;
  else
    textToFindIndex = NOT_THERE;

  gnome_canvas_item_new (parent,
                      gnome_canvas_text_get_type (),
                      "text", _("Please, check if the word"),
                      "font", gc_skin_font_board_big,
                      "x", (double) base_X,
                      "y", (double) base_Y,
                      "anchor", GTK_ANCHOR_CENTER,
                      "fill_color", "white",
                      NULL);

  gnome_canvas_item_new (parent,
                      gnome_canvas_text_get_type (),
                      "text", textToFind,
                      "font", gc_skin_font_board_big,
                      "x", (double) base_X,
                      "y", (double) base_Y + 30,
                      "anchor", GTK_ANCHOR_CENTER,
                      "fill_color", "green",
                      NULL);

  gnome_canvas_item_new (parent,
                      gnome_canvas_text_get_type (),
                      "text", _("is being displayed"),
                      "font", gc_skin_font_board_big,
                      "x", (double) base_X,
                      "y", (double) base_Y + 60,
                      "anchor", GTK_ANCHOR_CENTER,
                      "fill_color", "white",
                      NULL);


  return NULL;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void end_board ( void  ) [static]

Definition at line 235 of file reading.c.

Here is the call graph for this function:

static gchar * get_random_word ( const gchar *  except) [static]

Return a random word from a set of text file depending on the current level and language.

Parameters:
except,:if non NULL, never return this value
Returns:
a random word from. must be freed by the caller

Definition at line 747 of file reading.c.

{
  gchar *word;

  word = gc_wordlist_random_word_get(gc_wordlist, gcomprisBoard->level);

  if(except)
    while(strcmp(except, word)==0)
      {
       g_free(word);
       word = gc_wordlist_random_word_get(gc_wordlist, gcomprisBoard->level);
      }

  return(word);
}

Here is the call graph for this function:

Here is the caller graph for this function:

gboolean is_our_board ( GcomprisBoard *  gcomprisBoard) [static]

Definition at line 266 of file reading.c.

{
  if (gcomprisBoard)
    {
      if(g_strcasecmp(gcomprisBoard->type, "reading")==0)
       {
         /* Set the plugin entry */
         gcomprisBoard->plugin=&menu_bp;

         return TRUE;
       }
    }
  return FALSE;
}
static gint item_event_valid ( GnomeCanvasItem *  item,
GdkEvent *  event,
gpointer  data 
) [static]

Definition at line 700 of file reading.c.

{

  switch (event->type)
    {
    case GDK_ENTER_NOTIFY:
      break;
    case GDK_LEAVE_NOTIFY:
      break;
    case GDK_BUTTON_PRESS:
      if (((char *)data)[0]=='R')
       {
         // The user is Ready
         wait_for_ready = FALSE;
         ask_ready(FALSE);
         pause_board(FALSE);
       }
      else if(!wait_for_ready) {
       if ((((char *)data)[0]=='Y' && textToFindIndex == -1)
           || (((char *)data)[0]=='N' && textToFindIndex == NOT_THERE))
         {
           player_win();
         }
       else
         {
           player_loose();
         }
       return TRUE;
      }
      break;

    default:
      break;
    }
  return FALSE;

}

Here is the call graph for this function:

Here is the caller graph for this function:

static void pause_board ( gboolean  pause) [static]

Definition at line 143 of file reading.c.

{
  // after the bonus is ended, the board is unpaused, but we must wait for
  // the player to be ready (this board does not use the same framework as others)
  if (wait_for_ready)
    return;

  if(gcomprisBoard==NULL)
    return;

  if(pause)
    {
      if (drop_items_id) {
       gtk_timeout_remove (drop_items_id);
       drop_items_id = 0;
      }
    }
  else
    {
      if(!drop_items_id) {
       reading_drop_items();
      }
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void player_loose ( void  ) [static]

Definition at line 673 of file reading.c.

{
  gchar *expected;
  gchar *got;
  gamewon = FALSE;
  wait_for_ready = TRUE;

  /* Report what was wrong in the log */
  expected = g_strdup_printf(_("The word to find was '%s'"), textToFind);

  if(textToFindIndex == NOT_THERE)
    got    = g_strdup_printf(_("But it was not displayed"));
  else
    got    = g_strdup_printf(_("And it was displayed"));

  gc_log_set_comment (gcomprisBoard, expected, got);

  g_free(expected);
  g_free(got);

  gc_bonus_display(gamewon, BONUS_FLOWER);

  next_level_timer = g_timeout_add(3000, (GtkFunction)reading_next_level, NULL);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void player_win ( void  ) [static]

Definition at line 658 of file reading.c.

{
  gamewon = TRUE;
  wait_for_ready = TRUE;
  gc_bonus_display(gamewon, BONUS_FLOWER);
  /* Try the next level */
  gcomprisBoard->level++;
  if(gcomprisBoard->level>gcomprisBoard->maxlevel) { // the current board is finished : bail out
    gc_bonus_end_display(BOARD_FINISHED_RANDOM);
    return;
  }

  next_level_timer = g_timeout_add(3000, (GtkFunction)reading_next_level, NULL);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void reading_config_start ( GcomprisBoard *  agcomprisBoard,
GcomprisProfile aProfile 
) [static]

Definition at line 822 of file reading.c.

{
  board_conf = agcomprisBoard;
  profile_conf = aProfile;

  if (gcomprisBoard)
    pause_board(TRUE);

  gchar *label = g_strdup_printf("<b>%s</b> configuration\n for profile <b>%s</b>",
                             agcomprisBoard->name,
                             aProfile? aProfile->name: "");

  gc_board_config_window_display( label,
                             (GcomprisConfCallback )conf_ok);

  g_free(label);

  /* init the combo to previously saved value */
  GHashTable *config = gc_db_get_conf( profile_conf, board_conf);

  gchar *locale = g_hash_table_lookup( config, "locale");

  gc_board_config_combo_locales( locale);

}

Here is the call graph for this function:

static void reading_config_stop ( void  ) [static]

Definition at line 854 of file reading.c.

{
}
static gboolean reading_create_item ( GnomeCanvasGroup *  parent) [static]

Definition at line 411 of file reading.c.

{
  gint   anchor = GTK_ANCHOR_CENTER;
  gchar *word;

  g_assert(textToFind!=NULL);

  if(toDeleteFocus.rootItem)
    {
      gtk_object_destroy (GTK_OBJECT(toDeleteFocus.rootItem));
      toDeleteFocus.rootItem = NULL;
    }

  if(previousFocus.rootItem)
    {
      gnome_canvas_item_show (previousFocus.overwriteItem);
      toDeleteFocus.rootItem = previousFocus.rootItem;
    }

  if(numberOfLine<=0)
    {
      gtk_object_destroy (GTK_OBJECT(toDeleteFocus.rootItem));
      toDeleteFocus.rootItem = NULL;

      ask_yes_no();
      return FALSE;
    }


  if(textToFindIndex!=0)
    {
      word = get_random_word(textToFind);
    }
  else
    {
      word = g_strdup(textToFind);
    }

  g_assert(word!=NULL);

  if(textToFindIndex>=0)
    textToFindIndex--;

  previousFocus.rootItem = \
    GNOME_CANVAS_GROUP( gnome_canvas_item_new (parent,
                                          gnome_canvas_group_get_type (),
                                          "x", (double) current_x,
                                          "y", (double) current_y,
                                          NULL));

  if(currentMode==MODE_HORIZONTAL)
    anchor=GTK_ANCHOR_WEST;

  previousFocus.item = \
    gnome_canvas_item_new (GNOME_CANVAS_GROUP(previousFocus.rootItem),
                        gnome_canvas_text_get_type (),
                        "text", word,
                        "font", gc_skin_font_board_medium,
                        "x", (double) 0,
                        "y", (double) 0,
                        "anchor", anchor,
                        "fill_color", "black",
                        NULL);


  gchar *oldword = g_strdup_printf("<span foreground=\"black\" background=\"black\">%s</span>", word);

  g_free(word);

  previousFocus.overwriteItem =                                       \
    gnome_canvas_item_new (GNOME_CANVAS_GROUP(previousFocus.rootItem),
                        gnome_canvas_text_get_type (),
                        "markup", oldword,
                        "font", gc_skin_font_board_medium,
                        "x", (double) 0,
                        "y", (double) 0,
                        "anchor", anchor,
                        NULL);

  g_free(oldword);
  gnome_canvas_item_hide(previousFocus.overwriteItem);

  // Calculate the next spot
  if(currentMode==MODE_VERTICAL)
    {
      current_y += interline;
      numberOfLine--;
    }
  else
    {
      double x1, y1, x2, y2;

      gnome_canvas_item_get_bounds(GNOME_CANVAS_ITEM(previousFocus.rootItem), &x1, &y1, &x2, &y2);

      // Are we out of bound
      if(x2>BASE_X2)
       {
         // Do the line Wrapping
         gnome_canvas_item_move(GNOME_CANVAS_ITEM(previousFocus.rootItem), BASE_X1-x1, interline);
         current_y += interline;
         current_x = BASE_X1;
         numberOfLine--;
       }
      current_x += x2-x1 + font_size;
    }

  return (TRUE);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void reading_destroy_all_items ( void  ) [static]

Definition at line 329 of file reading.c.

{

  if (drop_items_id) {
    gtk_timeout_remove (drop_items_id);
    drop_items_id = 0;
  }

  if (next_level_timer) {
    gtk_timeout_remove (next_level_timer);
    drop_items_id = 0;
  }

  if(boardRootItem!=NULL)
      gtk_object_destroy (GTK_OBJECT(boardRootItem));

  boardRootItem = NULL;
  previousFocus.rootItem = NULL;
  toDeleteFocus.rootItem = NULL;

  if (textToFind!=NULL)
    {
    g_free(textToFind);
    textToFind=NULL;
    }
}

Here is the caller graph for this function:

static gint reading_drop_items ( void  ) [static]

Definition at line 524 of file reading.c.

{

  if(reading_create_item(boardRootItem))
    drop_items_id = gtk_timeout_add (fallSpeed,
                                 (GtkFunction) reading_drop_items, NULL);
  return (FALSE);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static gint reading_next_level ( void  ) [static]

Definition at line 288 of file reading.c.

{

  gc_bar_set_level(gcomprisBoard);

  gamewon = FALSE;

  reading_destroy_all_items();

  boardRootItem = GNOME_CANVAS_GROUP(
                                 gnome_canvas_item_new (gnome_canvas_root(gcomprisBoard->canvas),
                                                     gnome_canvas_group_get_type (),
                                                     "x", (double) 0,
                                                     "y", (double) 0,
                                                     NULL));

  /* Default speed */
  fallSpeed=1400-gcomprisBoard->level*120;

  if(currentMode==MODE_VERTICAL)
    {
      current_x = BASE_CX;
      numberOfLine=7+gcomprisBoard->level;
    }
  else
    {
      current_x = BASE_X1;
      numberOfLine=2+gcomprisBoard->level;
    }

  current_y = BASE_Y1 - 2 * interline;

  gcomprisBoard->number_of_sublevel=1;
  gcomprisBoard->sublevel=1;

  display_what_to_do(boardRootItem);
  ask_ready(TRUE);
  return (FALSE);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void save_table ( gpointer  key,
gpointer  value,
gpointer  user_data 
) [static]

Definition at line 776 of file reading.c.

{
  gc_db_set_board_conf ( profile_conf,
                         board_conf,
                         (gchar *) key,
                         (gchar *) value);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void set_level ( guint  level) [static]

Definition at line 255 of file reading.c.

{

  if(gcomprisBoard!=NULL)
    {
      gcomprisBoard->level=level;
      reading_next_level();
    }
}

Here is the call graph for this function:

static void start_board ( GcomprisBoard *  agcomprisBoard) [static]

Definition at line 170 of file reading.c.

{
  GHashTable *config = gc_db_get_board_conf();

  gc_locale_set(g_hash_table_lookup( config, "locale"));

  g_hash_table_destroy(config);

  if(agcomprisBoard!=NULL)
    {
      gchar *img;

      gcomprisBoard=agcomprisBoard;

      img = gc_skin_image_get("reading-bg.jpg");
      gc_set_background(gnome_canvas_root(gcomprisBoard->canvas),
                           img);
      g_free(img);
      wait_for_ready = TRUE;
      gamewon = FALSE;

      gcomprisBoard->level = 1;
      gcomprisBoard->maxlevel = 9;
      gc_bar_set(GC_BAR_CONFIG|GC_BAR_LEVEL);

      font_size = PANGO_PIXELS(pango_font_description_get_size (pango_font_description_from_string (gc_skin_font_board_medium)));
      interline = (int) (1.5*font_size);

      PangoContext *pango_context = gtk_widget_get_pango_context  (GTK_WIDGET(agcomprisBoard->canvas));

      PangoFontMetrics* pango_metrics =  pango_context_get_metrics (pango_context,
                                                            pango_font_description_from_string (gc_skin_font_board_medium),
                                                            pango_language_from_string   (gc_locale_get()));

      int ascent = PANGO_PIXELS(pango_font_metrics_get_ascent (pango_metrics));
      int descent = PANGO_PIXELS(pango_font_metrics_get_descent (pango_metrics));
      interline = ascent + descent;

      g_warning ("Font to display words have size %d  ascent : %d, descent : %d.\n Set inerline to %d", font_size, ascent, descent, interline);

      /* Default mode */
      currentMode=MODE_VERTICAL;
      if(gcomprisBoard->mode && g_strcasecmp(gcomprisBoard->mode, "horizontal")==0)
       currentMode=MODE_HORIZONTAL;

      gc_wordlist = gc_wordlist_get_from_file("wordsgame/default-$LOCALE.xml");

      if(!gc_wordlist)
       {
         /* Fallback to english */
         gc_wordlist = gc_wordlist_get_from_file("wordsgame/default-en.xml");

         if(!gc_wordlist)
           {
             gcomprisBoard = NULL;
             gc_dialog(_("Error: We can't find\na list of words to play this game.\n"), gc_board_end);
             return;
           }
       }

      reading_next_level();
    }
}

Here is the call graph for this function:


Variable Documentation

GcomprisBoard* board_conf [static]

Definition at line 774 of file reading.c.

GnomeCanvasGroup* boardRootItem = NULL [static]

Definition at line 45 of file reading.c.

gint current_x

Definition at line 72 of file reading.c.

gint current_y

Definition at line 73 of file reading.c.

Definition at line 52 of file reading.c.

gint drop_items_id = 0 [static]

Definition at line 38 of file reading.c.

guint32 fallSpeed = 0 [static]

Definition at line 104 of file reading.c.

gint font_size

Definition at line 75 of file reading.c.

int gamewon [static]

Definition at line 85 of file reading.c.

GcomprisWordlist* gc_wordlist = NULL [static]

Definition at line 34 of file reading.c.

GcomprisBoard* gcomprisBoard = NULL [static]

Definition at line 36 of file reading.c.

gint interline

Definition at line 76 of file reading.c.

BoardPlugin menu_bp [static]
Initial value:
{
   NULL,
   NULL,
   "Reading",
   "Read a list of words and then work out if the given word is in it",
   "Bruno Coudoin <bruno.coudoin@free.fr>",
   NULL,
   NULL,
   NULL,
   NULL,
   start_board,
   pause_board,
   end_board,
   is_our_board,
   NULL,
   NULL,
   set_level,
   NULL,
   NULL,
   reading_config_start,
   reading_config_stop
}

Definition at line 107 of file reading.c.

gint next_level_timer = 0 [static]

Definition at line 39 of file reading.c.

Definition at line 74 of file reading.c.

Definition at line 61 of file reading.c.

Definition at line 773 of file reading.c.

gchar* textToFind = NULL [static]

Definition at line 41 of file reading.c.

gint textToFindIndex = 0 [static]

Definition at line 42 of file reading.c.

Definition at line 62 of file reading.c.

int wait_for_ready [static]

Definition at line 84 of file reading.c.