Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boards/Makefile.am102
-rw-r--r--src/boards/Makefile.mingw2
-rw-r--r--src/boards/advanced_colors.c8
-rw-r--r--src/boards/algebra.c6
-rw-r--r--src/boards/algebra_guesscount.c6
-rw-r--r--src/boards/awele.c14
-rw-r--r--src/boards/awele_alphaBeta.c2
-rw-r--r--src/boards/awele_utils.c2
-rw-r--r--src/boards/click_on_letter.c6
-rw-r--r--src/boards/clickgame.c5
-rw-r--r--src/boards/clockgame.c14
-rw-r--r--src/boards/colors.c6
-rw-r--r--src/boards/crane.c4
-rw-r--r--src/boards/enumerate.c6
-rw-r--r--src/boards/erase.c4
-rw-r--r--src/boards/fifteen.c5
-rw-r--r--src/boards/gletters.c4
-rw-r--r--src/boards/gtans.c8
-rw-r--r--src/boards/gtans_support.c11
-rw-r--r--src/boards/hanoi.c8
-rw-r--r--src/boards/imageid.c2
-rw-r--r--src/boards/leftright.c2
-rw-r--r--src/boards/machpuzzle.c2
-rw-r--r--src/boards/magic_hat.c8
-rw-r--r--src/boards/maze.c8
-rw-r--r--src/boards/memory.c10
-rw-r--r--src/boards/missingletter.c2
-rw-r--r--src/boards/money.c8
-rw-r--r--src/boards/paratrooper.c6
-rw-r--r--src/boards/planegame.c6
-rw-r--r--src/boards/py-mod-gcompris.c4
-rw-r--r--src/boards/python/tuxpaint.py524
-rw-r--r--src/boards/railroad.c4
-rw-r--r--src/boards/read_colors.c6
-rw-r--r--src/boards/reading.c6
-rw-r--r--src/boards/reversecount.c4
-rw-r--r--src/boards/shapegame.c6
-rw-r--r--src/boards/smallnumbers.c6
-rw-r--r--src/boards/submarine.c4
-rw-r--r--src/boards/superbrain.c4
-rw-r--r--src/boards/target.c4
-rw-r--r--src/boards/wordsgame.c2
-rw-r--r--src/gcompris/Makefile.am32
-rw-r--r--src/gcompris/Makefile.mingw2
-rw-r--r--src/gcompris/binreloc.c3
-rw-r--r--src/gcompris/board.c7
-rw-r--r--src/gcompris/board.h14
-rw-r--r--src/gcompris/bonus.c19
-rw-r--r--src/gcompris/file_selector.c2
-rw-r--r--src/gcompris/gameutil.c15
-rw-r--r--src/gcompris/gameutil.h2
-rw-r--r--src/gcompris/gcompris.c16
-rw-r--r--src/gcompris/gcompris_db.c13
-rw-r--r--src/gcompris/images_selector.c2
-rw-r--r--src/gcompris/menu.c12
-rw-r--r--src/gcompris/properties.c17
-rw-r--r--src/gcompris/sdlplayer.c8
57 files changed, 549 insertions, 466 deletions
diff --git a/src/boards/Makefile.am b/src/boards/Makefile.am
index 0e8e04a..233e0d2 100644
--- a/src/boards/Makefile.am
+++ b/src/boards/Makefile.am
@@ -23,6 +23,17 @@ cairo_ldflags =
cairo_cflags =
endif
+if PLATFORM_WIN32
+shared = -shared
+no_undefined = -no-undefined
+gc_libs = $(GCOMPRIS_LIBS)
+dll_export = -DBOARD_DLL_EXPORT
+else
+shared =
+no_undefined =
+gc_libs =
+dll_export =
+endif
SUBDIRS= $(python_subdir)
@@ -80,192 +91,193 @@ INCLUDES = \
$(PYTHON_CFLAGS) \
$(PYGTK_CFLAGS) \
$(sqlite_cflags) \
- $(cairo_cflags)
+ $(cairo_cflags) \
+ $(dll_export)
-libdraw_la_LDFLAGS = -module -avoid-version
+libdraw_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libdraw_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libdraw_la_SOURCES = draw.c
-libawele_la_LDFLAGS = -module -avoid-version
+libawele_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libawele_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libawele_la_SOURCES = awele.c awele_alphaBeta.c awele_utils.c awele_utils.h awele.h
-libcrane_la_LDFLAGS = -module -avoid-version
+libcrane_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libcrane_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libcrane_la_SOURCES = crane.c
-libmenu_la_LDFLAGS = -module -avoid-version
+libmenu_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libmenu_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmenu_la_SOURCES = menu2.c
-libclickgame_la_LDFLAGS = -module -avoid-version
+libclickgame_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libclickgame_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libclickgame_la_SOURCES = clickgame.c
-libalgebra_la_LDFLAGS = -module -avoid-version
+libalgebra_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libalgebra_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libalgebra_la_SOURCES = algebra.c
-libclockgame_la_LDFLAGS = -module -avoid-version
+libclockgame_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libclockgame_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libclockgame_la_SOURCES = clockgame.c
-libshapegame_la_LDFLAGS = -module -avoid-version
+libshapegame_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(XML_LIBS)
libshapegame_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libshapegame_la_SOURCES = shapegame.c
-libwordsgame_la_LDFLAGS = -module -avoid-version
+libwordsgame_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libwordsgame_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libwordsgame_la_SOURCES = wordsgame.c
-libgletters_la_LDFLAGS = -module -avoid-version
+libgletters_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libgletters_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libgletters_la_SOURCES = gletters.c
-libgtans_la_LDFLAGS = -module -avoid-version
+libgtans_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libgtans_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libgtans_la_SOURCES = gtans.c gtans_interface.c gtans_support.c gtans_callbacks.c \
gtans_callbacks.h gtans.h gtans_interface.h gtans_support.h
-libplanegame_la_LDFLAGS = -module -avoid-version
+libplanegame_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libplanegame_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libplanegame_la_SOURCES = planegame.c
-libsmallnumbers_la_LDFLAGS = -module -avoid-version
+libsmallnumbers_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libsmallnumbers_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libsmallnumbers_la_SOURCES = smallnumbers.c
-libparatrooper_la_LDFLAGS = -module -avoid-version
+libparatrooper_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libparatrooper_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libparatrooper_la_SOURCES = paratrooper.c
-libreading_la_LDFLAGS = -module -avoid-version
+libreading_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libreading_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libreading_la_SOURCES = reading.c
-libmemory_la_LDFLAGS = -module -avoid-version
+libmemory_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libmemory_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmemory_la_SOURCES = memory.c
-libimageid_la_LDFLAGS = -module -avoid-version
+libimageid_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(XML_LIBS)
libimageid_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libimageid_la_SOURCES = imageid.c
-libmissingletter_la_LDFLAGS = -module -avoid-version
+libmissingletter_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(XML_LIBS)
libmissingletter_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmissingletter_la_SOURCES = missingletter.c
-libclick_on_letter_la_LDFLAGS = -module -avoid-version
+libclick_on_letter_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libclick_on_letter_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libclick_on_letter_la_SOURCES = click_on_letter.c
-librailroad_la_LDFLAGS = -module -avoid-version
+librailroad_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
librailroad_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
librailroad_la_SOURCES = railroad.c
-liberase_la_LDFLAGS = -module -avoid-version
+liberase_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
liberase_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
liberase_la_SOURCES = erase.c
-libalgebra_guesscount_la_LDFLAGS = -module -avoid-version
+libalgebra_guesscount_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libalgebra_guesscount_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libalgebra_guesscount_la_SOURCES = algebra_guesscount.c
-libleftright_la_LDFLAGS = -module -avoid-version
+libleftright_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libleftright_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libleftright_la_SOURCES = leftright.c
-libcolors_la_LDFLAGS = -module -avoid-version
+libcolors_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libcolors_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libcolors_la_SOURCES = colors.c
-libtarget_la_LDFLAGS = -module -avoid-version
+libtarget_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libtarget_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libtarget_la_SOURCES = target.c
-libmagic_hat_la_LDFLAGS = -module -avoid-version
+libmagic_hat_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libmagic_hat_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmagic_hat_la_SOURCES = magic_hat.c
-libmaze_la_LDFLAGS = -module -avoid-version
+libmaze_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libmaze_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmaze_la_SOURCES = maze.c
-libreversecount_la_LDFLAGS = -module -avoid-version
+libreversecount_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libreversecount_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libreversecount_la_SOURCES = reversecount.c
-libcanal_lock_la_LDFLAGS = -module -avoid-version
+libcanal_lock_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libcanal_lock_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libcanal_lock_la_SOURCES = canal_lock.c
-libadvanced_colors_la_LDFLAGS = -module -avoid-version
+libadvanced_colors_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(XML_LIBS)
libadvanced_colors_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libadvanced_colors_la_SOURCES = advanced_colors.c
-libsuperbrain_la_LDFLAGS = -module -avoid-version
+libsuperbrain_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libsuperbrain_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libsuperbrain_la_SOURCES = superbrain.c
-libread_colors_la_LDFLAGS = -module -avoid-version
+libread_colors_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(XML_LIBS)
libread_colors_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libread_colors_la_SOURCES = read_colors.c
-libchess_la_LDFLAGS = -module -avoid-version
+libchess_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libchess_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libchess_la_SOURCES = chess.c chess_position.c chess_notation.c \
chess_notation.h chess_position.h chess_makros.h
-libenumerate_la_LDFLAGS = -module -avoid-version
+libenumerate_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libenumerate_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libenumerate_la_SOURCES = enumerate.c
-libmoney_la_LDFLAGS = -module -avoid-version
+libmoney_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libmoney_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmoney_la_SOURCES = money.c money_widget.c money_widget.h
-libtraffic_la_LDFLAGS = -module -avoid-version
+libtraffic_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libtraffic_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libtraffic_la_SOURCES = traffic.c traffic.h
-libmachpuzzle_la_LDFLAGS = -module -avoid-version
+libmachpuzzle_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libmachpuzzle_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libmachpuzzle_la_SOURCES = machpuzzle.c
-libsubmarine_la_LDFLAGS = -module -avoid-version
+libsubmarine_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libsubmarine_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libsubmarine_la_SOURCES = submarine.c
-libhanoi_la_LDFLAGS = -module -avoid-version
+libhanoi_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libhanoi_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libhanoi_la_SOURCES = hanoi.c
-libhanoi_real_la_LDFLAGS = -module -avoid-version
+libhanoi_real_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libhanoi_real_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libhanoi_real_la_SOURCES = hanoi_real.c
-libfifteen_la_LDFLAGS = -module -avoid-version
+libfifteen_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libfifteen_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libfifteen_la_SOURCES = fifteen.c
-libwordprocessor_la_LDFLAGS = -module -avoid-version
+libwordprocessor_la_LDFLAGS = $(shared) $(no_undefined) -module -avoid-version $(gc_libs)
libwordprocessor_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libwordprocessor_la_SOURCES = wordprocessor.c
-libpython_la_LDFLAGS = -export-dynamic -module -avoid-version $(PYTHON_LIBS)
+libpython_la_LDFLAGS = -export-dynamic $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(PYTHON_LIBS)
libpython_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
-libpython_la_CFLAGS = -fno-strict-aliasing
+libpython_la_CFLAGS = -fno-strict-aliasing $(PYGTK_CFLAGS)
libpython_la_SOURCES = python.c \
canvas.c canvasmodule.c \
py-gcompris-board.c py-gcompris-board.h \
diff --git a/src/boards/Makefile.mingw b/src/boards/Makefile.mingw
index a9424ea..1bf88e2 100644
--- a/src/boards/Makefile.mingw
+++ b/src/boards/Makefile.mingw
@@ -26,7 +26,7 @@ GCOMPRIS_INSTALL_DIR := $(GCOMPRIS_TOP)/win32-install-dir
# Compiler Options
-CFLAGS =
+CFLAGS = -DSTATIC_MODULE
DEFINES =
diff --git a/src/boards/advanced_colors.c b/src/boards/advanced_colors.c
index fa9a581..1362af8 100644
--- a/src/boards/advanced_colors.c
+++ b/src/boards/advanced_colors.c
@@ -196,7 +196,7 @@ static gboolean is_our_board (GcomprisBoard *gcomprisBoard) {
* =====================================================================*/
static void colors_next_level() {
gchar *str = NULL;
- int i;
+ int i, list_length;
GList * list = NULL;
int * item;
@@ -215,8 +215,8 @@ static void colors_next_level() {
for (i=0; i<LAST_COLOR; i++)
list = g_list_append(list, GINT_TO_POINTER(i));
- while ((g_list_length(list) > 0)) {
- i = RAND(0,g_list_length(list)-1);
+ while((list_length = g_list_length(list))) {
+ i = list_length == 1 ? 0 : g_random_int_range(0,g_list_length(list)-1);
item = g_list_nth_data(list, i);
listColors = g_list_append(listColors, item);
list = g_list_remove(list, item);
@@ -288,7 +288,7 @@ static GnomeCanvasItem *colors_create_item(GnomeCanvasGroup *parent) {
g_free(str);
gnome_canvas_item_hide(highlight_image_item);
- i = RAND(0,LAST_COLOR);
+ i = g_random_int_range(0,LAST_COLOR);
gdk_pixbuf_unref(highlight_pixmap);
diff --git a/src/boards/algebra.c b/src/boards/algebra.c
index 4075692..691d653 100644
--- a/src/boards/algebra.c
+++ b/src/boards/algebra.c
@@ -709,7 +709,7 @@ item_event(GnomeCanvasItem *item, GdkEvent *event, gpointer data)
static gint get_operand()
{
gint j = 10;
- gint i = (1+rand()%10);
+ gint i = (1+g_random_int()%10);
// Get the next free slot
while(operation_done[i]==TRUE && j>=0)
@@ -781,8 +781,8 @@ static void get_random_number(guint *first_operand, guint *second_operand)
min = 1;
max = 10;
}
- *second_operand = (min+rand()%(max-min+1));
- *first_operand = *second_operand*(min+rand()%max);
+ *second_operand = (min+g_random_int()%(max-min+1));
+ *first_operand = *second_operand*(min+g_random_int()%max);
break;
default:
g_error("Bad Operation");
diff --git a/src/boards/algebra_guesscount.c b/src/boards/algebra_guesscount.c
index 726e636..722c632 100644
--- a/src/boards/algebra_guesscount.c
+++ b/src/boards/algebra_guesscount.c
@@ -334,7 +334,7 @@ static int generate_numbers() {
gboolean minus, divide;
for (i=0; i<gcomprisBoard->level+1; i++) {
- j = RAND(0,NUM_VALUES-1);
+ j = g_random_int_range(0,NUM_VALUES-1);
answer_num_index[i] = j;
}
@@ -350,7 +350,7 @@ static int generate_numbers() {
}
r = 2 + minus + divide;
- switch (RAND(1,r)) {
+ switch (g_random_int_range(1,r)) {
case 1 :
answer_oper[i] = '+';
result += num_values[answer_num_index[i+1]];
@@ -377,7 +377,7 @@ static int generate_numbers() {
}
break;
case 4 :
- if ( RAND(0,1) == 0) {
+ if ( g_random_int_range(0,1) == 0) {
answer_oper[i] = '-';
result -= num_values[answer_num_index[i+1]];
g_assert(result >= 0);
diff --git a/src/boards/awele.c b/src/boards/awele.c
index 574fc90..a03f757 100644
--- a/src/boards/awele.c
+++ b/src/boards/awele.c
@@ -16,8 +16,6 @@
#include <awele_utils.h>
#include <awele.h>
#include <string.h>
-#include <unistd.h>
-
static GcomprisBoard *gcomprisBoard = NULL;
static gboolean board_paused = TRUE;
@@ -624,17 +622,17 @@ initBoardGraphics (GRAPHICS_ELT * graphsElt)
j < staticAwale->board[i] && idxTabBeans < NBTOTALBEAN;
j++, idxTabBeans++)
{
- k = 0 + rand () % 4;
+ k = 0 + g_random_int() % 4;
graphsElt->ptBeansHoleLink[idxTabBeans].beanPixbuf =
gnome_canvas_item_new (boardRootItem,
gnome_canvas_pixbuf_get_type
(), "x",
(double) caseCoord[i] +
- rand () % 50, "y",
+ g_random_int() % 50, "y",
(double) (((i <
6) ? 260 :
130) +
- rand () %
+ g_random_int() %
60),
"pixbuf",
graphsElt->
@@ -858,15 +856,15 @@ updateNbBeans (int alpha)
j++, idxTabBeans++)
{
- k = 0 + rand () % 4;
+ k = 0 + g_random_int() % 4;
gnome_canvas_item_set (ptBeansHoleLink[idxTabBeans].
beanPixbuf, "x",
(double) caseCoord[i] +
- rand () % 50, "y",
+ g_random_int() % 50, "y",
(double) (((i <
6) ? 260 : 130) +
- rand () % 60), NULL);
+ g_random_int() % 60), NULL);
ptBeansHoleLink[idxTabBeans].hole = i;
}
diff --git a/src/boards/awele_alphaBeta.c b/src/boards/awele_alphaBeta.c
index 418856b..567193d 100644
--- a/src/boards/awele_alphaBeta.c
+++ b/src/boards/awele_alphaBeta.c
@@ -73,7 +73,7 @@ GNode *firstChild(GNode *node)
return NULL;
gint i;
- rand_play = RAND(1, 5);
+ rand_play = g_random_int_range(1, 5);
for (i = 0 ; i < 6; i++)
{
diff --git a/src/boards/awele_utils.c b/src/boards/awele_utils.c
index 368503c..f2d5982 100644
--- a/src/boards/awele_utils.c
+++ b/src/boards/awele_utils.c
@@ -139,7 +139,7 @@ short int randplay(AWALE * a)
AWALE *tmp = NULL;
do {
- i = 6 + rand() % 6;
+ i = 6 + g_random_int() % 6;
} while (a->board[i] == 0 && !(tmp = moveAwale(i, a)));
g_free(tmp);
diff --git a/src/boards/click_on_letter.c b/src/boards/click_on_letter.c
index a5a2e0b..409d1cc 100644
--- a/src/boards/click_on_letter.c
+++ b/src/boards/click_on_letter.c
@@ -353,7 +353,7 @@ static GnomeCanvasItem *click_on_letter_create_item(GnomeCanvasGroup *parent)
g_assert(number_of_letters<=length_of_aphabet); // because we must set unique letter on every "vagon"
for (i=0;i<number_of_letters;i++){
- numbers[i]=((int)(((float)length_of_aphabet)*rand()/(RAND_MAX+1.0)));
+ numbers[i]= g_random_int_range(0, number_of_letters);
// check that the letter has not been taken yet
for(j=0;j<i;j++){
@@ -378,7 +378,7 @@ static GnomeCanvasItem *click_on_letter_create_item(GnomeCanvasGroup *parent)
case 2 : letters[i]=g_strndup(copy_from,copy_to-copy_from); break;
case 3 : letters[i]=g_utf8_strup(copy_from,copy_to-copy_from); break;
default :
- if ( rand() > (RAND_MAX/2) )
+ if ( g_random_boolean() )
letters[i]=g_strndup(copy_from,copy_to-copy_from);
else
letters[i]=g_utf8_strup(copy_from,copy_to-copy_from);
@@ -387,7 +387,7 @@ static GnomeCanvasItem *click_on_letter_create_item(GnomeCanvasGroup *parent)
}
/* */
- right_position = ((int)(((float)number_of_letters)*rand()/(RAND_MAX+1.0)));
+ right_position = g_random_int_range(0,number_of_letters);
g_assert(right_position >= 0 && right_position < number_of_letters);
right_letter = g_utf8_strdown(letters[right_position],-1);
diff --git a/src/boards/clickgame.c b/src/boards/clickgame.c
index 53e9df8..7772878 100644
--- a/src/boards/clickgame.c
+++ b/src/boards/clickgame.c
@@ -720,7 +720,7 @@ clickgame_create_item()
fishitem = g_malloc(sizeof(FishItem));
fishitem->currentItem = 0;
- fishitem->speed = (double)(rand()%(60))/10 - 3;
+ fishitem->speed = (double)(g_random_int()%(60))/10 - 3;
fishitem->fright = 0;
fishitem->stun = 0;
fishitem->fwd_frames = NULL;
@@ -746,7 +746,7 @@ clickgame_create_item()
gnome_canvas_item_new (parent,
gnome_canvas_group_get_type (),
"x", x,
- "y", (double)(rand()%(gcomprisBoard->height-
+ "y", (double)(g_random_int()%(gcomprisBoard->height-
(guint)(gdk_pixbuf_get_height(pixmap)*
imageZoom))),
NULL);
@@ -840,4 +840,3 @@ static void game_won()
}
clickgame_next_level();
}
-
diff --git a/src/boards/clockgame.c b/src/boards/clockgame.c
index 6e98303..92749d6 100644
--- a/src/boards/clockgame.c
+++ b/src/boards/clockgame.c
@@ -746,21 +746,21 @@ item_event(GnomeCanvasItem *item, GdkEvent *event, gpointer data)
static void get_random_hour(GcomprisTime *time)
{
- time->hour=rand()%12;
-
+ time->hour=g_random_int()%12;
+
if(gcomprisBoard->level>3)
- time->second=rand()%60;
+ time->second=g_random_int()%60;
else time->second=0;
-
- time->minute=rand()%60;
+
+ time->minute=g_random_int()%60;
switch(gcomprisBoard->level)
{
case 1:
- time->minute=rand()%4*15;
+ time->minute=g_random_int()%4*15;
break;
case 2:
- time->minute=rand()%12*5;
+ time->minute=g_random_int()%12*5;
break;
default:
break;
diff --git a/src/boards/colors.c b/src/boards/colors.c
index 8331b29..46cf4a8 100644
--- a/src/boards/colors.c
+++ b/src/boards/colors.c
@@ -211,7 +211,7 @@ static void start_board (GcomprisBoard *agcomprisBoard) {
GcomprisProperties *properties = gc_prop_get();
GList * list = NULL;
int * item;
- int i;
+ int i, list_length;
GHashTable *config = gc_db_get_board_conf();
@@ -239,8 +239,8 @@ static void start_board (GcomprisBoard *agcomprisBoard) {
for (i=0; i<LAST_COLOR; i++)
list = g_list_append(list, GINT_TO_POINTER(i));
- while ((g_list_length(list) > 0)) {
- i = RAND(0,g_list_length(list)-1);
+ while ((list_length = g_list_length(list))) {
+ i = list_length == 1 ? 0 : g_random_int_range(0,g_list_length(list)-1);
item = g_list_nth_data(list, i);
listColors = g_list_append(listColors, item);
list = g_list_remove(list, item);
diff --git a/src/boards/crane.c b/src/boards/crane.c
index 5db70d1..118a01b 100644
--- a/src/boards/crane.c
+++ b/src/boards/crane.c
@@ -696,8 +696,8 @@ void shuffle_list(int list[], int size) {
for (i = 0 ; i < size ; i++) {
- rand1 = RAND(0, size-1);
- rand2 = RAND(0, size-1);
+ rand1 = g_random_int_range(0, size-1);
+ rand2 = g_random_int_range(0, size-1);
buffer = list[rand2];
list[rand2] = list[rand1];
diff --git a/src/boards/enumerate.c b/src/boards/enumerate.c
index f05e604..e4474dc 100644
--- a/src/boards/enumerate.c
+++ b/src/boards/enumerate.c
@@ -377,15 +377,15 @@ static GnomeCanvasItem *enumerate_create_item(GnomeCanvasGroup *parent)
pixmap = gc_pixmap_load(imageList[i]);
- answer_to_find[i] = RAND(1, number_of_item_max);
+ answer_to_find[i] = g_random_int_range(1, number_of_item_max);
answer[i] = 0;
for(j=0; j<answer_to_find[i]; j++)
{
guint x, y;
- x = RAND(0, ANSWER_X-gdk_pixbuf_get_width(pixmap)-ANSWER_WIDTH);
- y = RAND(0, BOARDHEIGHT-gdk_pixbuf_get_height(pixmap));
+ x = g_random_int_range(0, ANSWER_X-gdk_pixbuf_get_width(pixmap)-ANSWER_WIDTH);
+ y = g_random_int_range(0, BOARDHEIGHT-gdk_pixbuf_get_height(pixmap));
item = gnome_canvas_item_new (boardRootItem,
gnome_canvas_pixbuf_get_type (),
diff --git a/src/boards/erase.c b/src/boards/erase.c
index 5210719..b3c89d1 100644
--- a/src/boards/erase.c
+++ b/src/boards/erase.c
@@ -487,8 +487,8 @@ void shuffle_image_list(char *list[], int size)
for(i=0; i<size; i++)
{
- int random1 = RAND(0, size-1);
- int random2 = RAND(0, size-1);
+ int random1 = g_random_int_range(0, size-1);
+ int random2 = g_random_int_range(0, size-1);
char *olditem;
olditem = list[random2];
diff --git a/src/boards/fifteen.c b/src/boards/fifteen.c
index 04646c3..4d71d8f 100644
--- a/src/boards/fifteen.c
+++ b/src/boards/fifteen.c
@@ -431,7 +431,8 @@ scramble (GnomeCanvasItem **board, guint number_of_scrambles)
int dir;
int x, y;
- srand (time (NULL));
+ /* g_random are initialised in gcompris launch */
+ /* srand (time (NULL)); */
/* First, find the blank spot */
@@ -443,7 +444,7 @@ scramble (GnomeCanvasItem **board, guint number_of_scrambles)
for (i = 0; i < number_of_scrambles; i++) {
retry_scramble:
- dir = rand () % 4;
+ dir = g_random_int () % 4;
x = y = 0;
diff --git a/src/boards/gletters.c b/src/boards/gletters.c
index 1ceb498..660b0c1 100644
--- a/src/boards/gletters.c
+++ b/src/boards/gletters.c
@@ -611,7 +611,7 @@ static GnomeCanvasItem *gletters_create_item(GnomeCanvasGroup *parent)
{
attempt++;
str_p = letters_array[gcomprisBoard->level-1];
- i = (int)((float)k*rand()/(RAND_MAX+1.0));
+ i = g_random_int_range(0,k);
for(j = 0; j < i; j++)
{
@@ -651,7 +651,7 @@ static GnomeCanvasItem *gletters_create_item(GnomeCanvasGroup *parent)
"y", (double) -12,
NULL);
- x = 80 + (int)((float)(gcomprisBoard->width-160)*rand()/(RAND_MAX+1.0));
+ x = g_random_int_range( 80, gcomprisBoard->width-160);
gnome_canvas_item_new (GNOME_CANVAS_GROUP(item),
gnome_canvas_text_get_type (),
"text", letter,
diff --git a/src/boards/gtans.c b/src/boards/gtans.c
index 03bed7b..d57ba17 100644
--- a/src/boards/gtans.c
+++ b/src/boards/gtans.c
@@ -20,20 +20,12 @@
#include "gcompris/gcompris.h"
-#include <math.h>
-#include <stdio.h>
#include <string.h>
/* Added by Florian Ernst <florian_ernst@gmx.net> for lines 193 and 194 */
//#include <string.h>
/* End of added section */
-/* uniquement pour mkdir() */
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-
#include "gtans.h"
#include "gtans_interface.h"
#include "gtans_support.h"
diff --git a/src/boards/gtans_support.c b/src/boards/gtans_support.c
index 2590ced..9303d98 100644
--- a/src/boards/gtans_support.c
+++ b/src/boards/gtans_support.c
@@ -1,17 +1,14 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
+
+
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
#include <string.h>
#include "gcompris/gcompris.h"
+#include <glib/gstdio.h>
#include "gtans_support.h"
@@ -150,7 +147,7 @@ check_file_exists (const gchar *directory,
strcat (full_filename, G_DIR_SEPARATOR_S);
strcat (full_filename, filename);
- status = stat (full_filename, &s);
+ status = g_stat (full_filename, &s);
if (status == 0 && S_ISREG (s.st_mode))
return full_filename;
g_free (full_filename);
diff --git a/src/boards/hanoi.c b/src/boards/hanoi.c
index 60873c6..e70ed0e 100644
--- a/src/boards/hanoi.c
+++ b/src/boards/hanoi.c
@@ -371,7 +371,7 @@ static GnomeCanvasItem *hanoi_create_item(GnomeCanvasGroup *parent)
/* Initialize a random goal and store the color index in position[number_of_item_x] */
for(i=0; i<(number_of_item_y); i++)
{
- guint color = (guint)RAND(0, NUMBER_OF_COLOR-1);
+ guint color = (guint)g_random_int_range(0, NUMBER_OF_COLOR-1);
position[number_of_item_x+1][i]->color = color;
used_colors[color] = TRUE;
@@ -386,10 +386,10 @@ static GnomeCanvasItem *hanoi_create_item(GnomeCanvasGroup *parent)
{
done = FALSE;
- i = (guint)RAND(0, number_of_item_x-2);
+ i = (guint)g_random_int_range(0, number_of_item_x-2);
/* Restrict the goal to lowest items */
- j = (guint)RAND(0, 2);
+ j = (guint)g_random_int_range(0, 2);
if(position[i][j]->color == -1)
{
@@ -408,7 +408,7 @@ static GnomeCanvasItem *hanoi_create_item(GnomeCanvasGroup *parent)
if(position[i][j]->color == -1)
{
/* Take only a color that is not part of the goal */
- guint color = (guint)RAND(0, NUMBER_OF_COLOR-1);
+ guint color = (guint)g_random_int_range(0, NUMBER_OF_COLOR-1);
//printf(" i,j=%d,%d random color = %d used_colors[color]=%d\n", i,j,color, used_colors[color]);
while(used_colors[color])
{
diff --git a/src/boards/imageid.c b/src/boards/imageid.c
index e2d0068..a04431d 100644
--- a/src/boards/imageid.c
+++ b/src/boards/imageid.c
@@ -266,7 +266,7 @@ static GnomeCanvasItem *imageid_create_item(GnomeCanvasGroup *parent)
board_number = g_list_length(board_list)-1;
*/
g_assert(board_number >= 0 && board_number < g_list_length(board_list));
- place = ((int)(3.0*rand()/(RAND_MAX+1.0)));
+ place = g_random_int_range( 0, 3);
g_assert(place >= 0 && place < 3);
right_word = place+1;
diff --git a/src/boards/leftright.c b/src/boards/leftright.c
index c7109d9..23bdc5d 100644
--- a/src/boards/leftright.c
+++ b/src/boards/leftright.c
@@ -314,7 +314,7 @@ static GnomeCanvasItem *leftright_create_item(GnomeCanvasGroup *parent) {
// make sure that next hand is not the same as previous
do {
- i = RAND(0,gcomprisBoard->level*8-1);
+ i = g_random_int_range(0,gcomprisBoard->level*8-1);
} while ( i == last_hand );
last_hand = i;
diff --git a/src/boards/machpuzzle.c b/src/boards/machpuzzle.c
index 569c861..ed30700 100644
--- a/src/boards/machpuzzle.c
+++ b/src/boards/machpuzzle.c
@@ -243,7 +243,7 @@ static GnomeCanvasItem *minigolf_create_item(GnomeCanvasGroup *parent)
NULL));
create_machine_item(MACH_HOLE, 730.0, 260.0);
- create_machine_item(MACH_BASKET_BALL, (double)RAND(60, 150), (double)RAND(60, 400));
+ create_machine_item(MACH_BASKET_BALL, (double)g_random_int_range(60, 150), (double)RAND(60, 400));
return NULL;
diff --git a/src/boards/magic_hat.c b/src/boards/magic_hat.c
index 496fc10..089f7c0 100644
--- a/src/boards/magic_hat.c
+++ b/src/boards/magic_hat.c
@@ -363,9 +363,9 @@ static GnomeCanvasItem *magic_hat_create_item()
// Frame 1
if (board_mode == MODE_MINUS)
- frame1.nb_stars[i] = RAND(2, (1 + (step * nb_list()))); // Minimum 2 to avoid '0' value (which is not easy to understand for kids)
+ frame1.nb_stars[i] = g_random_int_range(2, (1 + (step * nb_list()))); // Minimum 2 to avoid '0' value (which is not easy to understand for kids)
else
- frame1.nb_stars[i] = RAND(1, (step * nb_list()));
+ frame1.nb_stars[i] = g_random_int_range(1, (step * nb_list()));
for (j = 0 ; j < frame1.nb_stars[i] ; j++) frame1.array_star_type[i][j] = i;
for ( ; j < MAX_ITEM ; j++) frame1.array_star_type[i][j] = -1;
@@ -373,9 +373,9 @@ static GnomeCanvasItem *magic_hat_create_item()
// Frame 2
if (board_mode == MODE_MINUS)
- frame2.nb_stars[i] = RAND(1, (frame1.nb_stars[i]) - 1); // Minimum 1 to avoid '0'
+ frame2.nb_stars[i] = g_random_int_range(1, (frame1.nb_stars[i]) - 1); // Minimum 1 to avoid '0'
else
- frame2.nb_stars[i] = RAND(1, ((step * nb_list()) - frame1.nb_stars[i] + 1));
+ frame2.nb_stars[i] = g_random_int_range(1, ((step * nb_list()) - frame1.nb_stars[i] + 1));
for (j = 0 ; j < frame2.nb_stars[i] ; j++) frame2.array_star_type[i][j] = i;
for ( ; j < MAX_ITEM ; j++) frame2.array_star_type[i][j] = -1;
diff --git a/src/boards/maze.c b/src/boards/maze.c
index 6b5a3f2..6618cf1 100644
--- a/src/boards/maze.c
+++ b/src/boards/maze.c
@@ -272,7 +272,7 @@ static void maze_next_level() {
gamewon = FALSE;
initMaze();
- generateMaze((rand()%breedte),(rand()%hoogte));
+ generateMaze((g_random_int()%breedte),(g_random_int()%hoogte));
removeSet();
/* Try the next level */
maze_create_item(gnome_canvas_root(gcomprisBoard->canvas));
@@ -283,8 +283,8 @@ static void maze_next_level() {
}
/* make a new group for the items */
- begin=rand()%hoogte;
- end=rand()%hoogte;
+ begin=g_random_int()%hoogte;
+ end=g_random_int()%hoogte;
/* Draw the tux */
pixmap = gc_pixmap_load("gcompris/misc/tux_top_east.png");
@@ -723,7 +723,7 @@ static void generateMaze(int x, int y)
{
int nr = *po;
int ran, in;
- in=(rand()%nr)+1;
+ in=(g_random_int()%nr)+1;
//printf("random: %d en %d mogelijkheden\n", in, *po);
ran=*(po + in);
if (nr>=1)
diff --git a/src/boards/memory.c b/src/boards/memory.c
index e78ca3f..cbe9bae 100644
--- a/src/boards/memory.c
+++ b/src/boards/memory.c
@@ -522,7 +522,7 @@ void get_random_token(int token_type, gint *returned_type, gchar **string, gchar
g_assert(max_token >0);
- i = rand()%max_token;
+ i = g_random_int()%max_token;
for (list = data; list != NULL; list = list->next)
if ( i < ((DATUM *)list->data)->bound)
@@ -1175,8 +1175,8 @@ static void get_image(MemoryItem *memoryItem, guint x, guint y)
// Randomly set the pair
- rx = (int)(numberOfColumn*((double)rand()/RAND_MAX));
- ry = (int)(numberOfLine*((double)rand()/RAND_MAX));
+ rx = g_random_int_range( 0, numberOfColumn);
+ ry = g_random_int_range(0, numberOfLine);
while(memoryArray[rx][ry])
{
@@ -1744,8 +1744,8 @@ static gint tux_play(){
}
// Randomly set the pair
- rx = (int)(numberOfColumn*((double)rand()/RAND_MAX));
- ry = (int)(numberOfLine*((double)rand()/RAND_MAX));
+ rx = g_random_int_range( 0, numberOfColumn);
+ ry = g_random_int_range(0, numberOfLine);
gboolean stay_unknown = (remainingCards > (g_queue_get_length (tux_memory)
+ (firstCard ? 1 : 0)));
diff --git a/src/boards/missingletter.c b/src/boards/missingletter.c
index febe4c9..46d7795 100644
--- a/src/boards/missingletter.c
+++ b/src/boards/missingletter.c
@@ -275,7 +275,7 @@ static GnomeCanvasItem *missing_letter_create_item(GnomeCanvasGroup *parent)
board_number = (gcomprisBoard->level-1) * NUMBER_OF_SUBLEVELS + gcomprisBoard->sublevel-1;
g_assert(board_number >= 0 && board_number < g_list_length(board_list));
- place = ((int)(3.0*rand()/(RAND_MAX+1.0)));
+ place = g_random_int_range( 0, 3);
g_assert(place >= 0 && place < 3);
right_word = place+1;
diff --git a/src/boards/money.c b/src/boards/money.c
index 68ca52e..3f85f33 100644
--- a/src/boards/money.c
+++ b/src/boards/money.c
@@ -469,7 +469,7 @@ static void money_next_level()
double object_price;
gchar *text;
- pixmap = gc_pixmap_load(imageList[RAND(0, NUMBER_OF_IMAGES-1)]);
+ pixmap = gc_pixmap_load(imageList[g_random_int_range(0, NUMBER_OF_IMAGES-1)]);
gnome_canvas_item_new ( boardRootItem,
gnome_canvas_pixbuf_get_type (),
@@ -480,7 +480,7 @@ static void money_next_level()
NULL);
/* Diplay the price */
- object_price = (double) RAND(min_price/number_of_item, max_price/number_of_item);
+ object_price = (double) g_random_int_range(min_price/number_of_item, max_price/number_of_item);
if(currentMode==WITH_CENTS)
{
@@ -489,11 +489,11 @@ static void money_next_level()
/* Add random cents */
if(gcomprisBoard->level == 1)
{
- object_price += (double)((double) RAND(1, 9))/10.0;
+ object_price += (double)((double) g_random_int_range(1, 9))/10.0;
}
else
{
- object_price += (double)((double) RAND(1, 99))/100.0;
+ object_price += (double)((double) g_random_int_range(1, 99))/100.0;
}
}
else
diff --git a/src/boards/paratrooper.c b/src/boards/paratrooper.c
index 4a380c8..804ef50 100644
--- a/src/boards/paratrooper.c
+++ b/src/boards/paratrooper.c
@@ -337,8 +337,8 @@ static void paratrooper_next_level()
NULL);
gdk_pixbuf_unref(pixmap);
- windspeed = (3 + rand()%gcomprisBoard->level);
- if(rand()%2==0)
+ windspeed = (3 + g_random_int()%gcomprisBoard->level);
+ if(g_random_int()%2==0)
windspeed *= -1;
/* Drop a cloud */
@@ -620,7 +620,7 @@ static GnomeCanvasItem *paratrooper_create_cloud(GnomeCanvasGroup *parent)
gnome_canvas_item_new (parent,
gnome_canvas_group_get_type (),
"x", (double) x,
- "y", (double)(rand()%(gcomprisBoard->height-200-
+ "y", (double)(g_random_int()%(gcomprisBoard->height-200-
(guint)(gdk_pixbuf_get_height(pixmap)*
imageZoom))),
NULL);
diff --git a/src/boards/planegame.c b/src/boards/planegame.c
index f0aa74b..251dbf5 100644
--- a/src/boards/planegame.c
+++ b/src/boards/planegame.c
@@ -469,7 +469,7 @@ static GnomeCanvasItem *planegame_create_item(GnomeCanvasGroup *parent)
CloudItem *clouditem;
/* Random cloud number */
- if(rand()%2==0)
+ if(g_random_int()%2==0)
{
/* Put the target */
i = plane_target;
@@ -477,7 +477,7 @@ static GnomeCanvasItem *planegame_create_item(GnomeCanvasGroup *parent)
else
{
min = MAX(1, plane_target - 1);
- i = min + rand()%(plane_target - min + 3);
+ i = min + g_random_int()%(plane_target - min + 3);
}
number = g_strdup_printf("%d", i);
@@ -487,7 +487,7 @@ static GnomeCanvasItem *planegame_create_item(GnomeCanvasGroup *parent)
gnome_canvas_item_new (parent,
gnome_canvas_group_get_type (),
"x", (double) gcomprisBoard->width,
- "y", (double)(rand()%(gcomprisBoard->height-
+ "y", (double)(g_random_int()%(gcomprisBoard->height-
(guint)(gdk_pixbuf_get_height(pixmap)*
imageZoom))),
NULL);
diff --git a/src/boards/py-mod-gcompris.c b/src/boards/py-mod-gcompris.c
index 12c1bd3..c5ae83c 100644
--- a/src/boards/py-mod-gcompris.c
+++ b/src/boards/py-mod-gcompris.c
@@ -671,7 +671,7 @@ py_gcompris_child_watch_add(PyObject *unused, PyObject *args, PyObject *kwargs)
static char *kwlist[] = { "pid", "function", "data", "priority", NULL };
guint id;
gint priority = G_PRIORITY_DEFAULT;
- int pid;
+ GPid pid;
PyObject *func, *user_data = NULL;
struct _PyGChildData *child_data;
@@ -738,7 +738,7 @@ py_gcompris_spawn_async(PyObject *unused, PyObject *args, PyObject *kwargs)
gint *standard_input, *standard_output, *standard_error;
struct _PyGChildSetupData *callback_data = NULL;
GError *error = NULL;
- GPid child_pid = -1;
+ GPid child_pid = (GPid) -1;
int len, i;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OsiOOOOO:gcompris.spawn_async",
diff --git a/src/boards/python/tuxpaint.py b/src/boards/python/tuxpaint.py
index ae0c7fa..dea43b6 100644
--- a/src/boards/python/tuxpaint.py
+++ b/src/boards/python/tuxpaint.py
@@ -1,252 +1,272 @@
-# gcompris - Tuxpaint Launcher
-#
-# Copyright (C) 2004 Yves Combe
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-import gnomecanvas
-import gcompris
-import gcompris.utils
-import gcompris.bonus
-import gcompris.skin
-import gcompris.sound
-import gcompris.admin
-import gtk
-import os
-
-import pango
-
-#import gobject
-from gettext import gettext as _
-
-pid = None
-#board = None
-
-class Gcompris_tuxpaint:
- """TuxPaint Launcher"""
- global pid
-
- def __init__(self, gcomprisBoard):
- self.gcomprisBoard = gcomprisBoard
- pass
-
- def configuration(self, value, init):
- if self.config_dict.has_key(value):
- return eval(self.config_dict[value])
- else:
- return init
-
- def start(self):
-# line = os.sys.stdin.readline()
-# while (len(line) >1):
-# exec(line)
-# line = os.sys.stdin.readline()
-
- self.window = self.gcomprisBoard.canvas.get_toplevel()
-
- #global board
- #board = self
-
- Prop = gcompris.get_properties()
-
- #get default values
- self.config_dict = self.init_config()
-
- #replace configured values
- self.config_dict.update(gcompris.get_board_conf())
-
- self.rootitem = self.gcomprisBoard.canvas.root().add(
- gnomecanvas.CanvasGroup,
- x=0.0,
- y=0.0
- )
-
- options = ['tuxpaint']
-
- if (Prop.fullscreen and eval(self.config_dict['fullscreen'])):
- options.append('--fullscreen')
-
- # tuxpaint size are 800x600 and 640x480 in 9.14
- # in cvs (future 9.15) it will be
- # [--640x480 | --800x600 | --1024x768 |
- # --1280x1024 | --1400x1050 | --1600x1200]
- if (Prop.screensize and eval(self.config_dict['size'])):
- if (Prop.screensize >=1):
- print 'Prop.screensize', Prop.screensize
- options.append('--800x600')
- else:
- options.append('--640x480')
-
- if eval(self.config_dict['disable_shape_rotation']):
- options.append('--simpleshapes')
-
- if eval(self.config_dict['uppercase_text']):
- options.append('--uppercase')
-
- if eval(self.config_dict['disable_stamps']):
- options.append('--nostamps')
-
- if eval(self.config_dict['disable_stamps_control']):
- options.append('--nostampcontrols')
-
- gcompris.sound.close()
-
- # release pointergrab if running fullscreen, tuxpaint wants to grab the
- # pointer itself
- if (Prop.fullscreen and not Prop.noxf86vm):
- gtk.gdk.pointer_ungrab()
-
- #self.window.set_property("accept-focus", 0)
- #self.window.set_keep_below(False)
-
- try:
- # gobject.SPAWN_DO_NOT_REAP_CHILD|gobject.SPAWN_SEARCH_PATH = 2 | 4
- pid,stdin, stdout, stderr = gcompris.spawn_async(
- options, flags=2|4)
- except:
- gcompris.utils.dialog(_("Cannot find Tuxpaint.\nInstall it to use this activity !"),stop_board)
- return
-
- gcompris.child_watch_add(pid, child_callback, self)
-
- gcompris.bar_set(0)
- gcompris.bar_hide(1)
-
- gcompris.set_background(self.rootitem,
- gcompris.skin.image_to_skin("gcompris-bg.jpg"))
-
- textItem = self.rootitem.add(
- gnomecanvas.CanvasText,
- text = _("Waiting for Tuxpaint to finish"),
- x = gcompris.BOARD_WIDTH/2,
- y = 185,
- fill_color_rgba = 0x000000ffL,
- font = gcompris.skin.get_font("gcompris/board/title bold"),
- )
-
- def end(self):
- gcompris.sound.reopen()
- global pid
- # force kill - data loss
- if pid != None:
- print "Tuxpaint not killed", self.pid
- #import os
- #os.kill(self.pid, signal.SIGKILL)
- if self.rootitem != None:
- self.rootitem.destroy()
- self.rootitem = None
-
- def set_level(self,level):
- pass
-
- def ok(self):
- pass
-
- def key_press(self, keyval, commit_str, preedit_str):
- return False
-
- def repeat(self):
- pass
-
- def pause(self, pause):
- pass
-
- def config(self):
- print "Config"
- pass
-
- def config_stop(self):
- print "config_stop", self
- pass
-
- def config_start(self, profile):
- self.configure_profile = profile
-
- #get default values
- self.config_dict = self.init_config()
-
- #set already configured values
- self.config_dict.update(gcompris.get_conf(profile, self.gcomprisBoard))
-
- self.main_vbox = gcompris.configuration_window(_('<b>%s</b> configuration\n for profile <b>%s</b>') % ('Tuxpaint', profile.name ),
- self.apply_callback)
-
-
- gcompris.boolean_box(_('Inherit fullscreen setting from GCompris'), 'fullscreen', eval(self.config_dict['fullscreen']))
-
- gcompris.separator()
-
- gcompris.boolean_box(_('Inherit size setting from GCompris (800x600, 640x480)'), 'size', eval(self.config_dict['size']))
-
- gcompris.separator()
-
- gcompris.boolean_box(_('Disable shape rotation'), 'disable_shape_rotation', eval(self.config_dict['disable_shape_rotation']))
-
- gcompris.separator()
-
- gcompris.boolean_box(_('Show Uppercase text only'), 'uppercase_text', eval(self.config_dict['uppercase_text']))
-
- gcompris.separator()
-
- stamps = gcompris.boolean_box(_('Disable stamps'), 'disable_stamps', eval(self.config_dict['disable_stamps']))
- stamps.connect("toggled", self.stamps_changed)
-
- self.stamps_control = gcompris.boolean_box('Disable stamps control', 'disable_stamps_control', eval(self.config_dict['disable_stamps_control']))
- self.stamps_control.set_sensitive(not eval(self.config_dict['disable_stamps']))
-
- def stamps_changed(self, button):
- self.stamps_control.set_sensitive(not button.get_active())
-
- def apply_callback(self,table):
- print table
- for key,value in table.iteritems():
- gcompris.set_board_conf(self.configure_profile, self.gcomprisBoard, key, value)
-
- def init_config(self):
- default_config_dict = { 'fullscreen' : 'True',
- 'disable_shape_rotation' : 'False',
- 'uppercase_text' : 'False',
- 'disable_stamps' : 'False',
- 'disable_stamps_control' : 'False',
- 'size' : 'True'
- }
- return default_config_dict
-
-def child_callback(fd, cond, data):
- # restore pointergrab if running fullscreen
- if (gcompris.get_properties().fullscreen and
- not gcompris.get_properties().noxf86vm):
- gtk.gdk.pointer_grab(data.window.window, True, 0, data.window.window)
- #global board
- #board.window.set_property("accept-focus", 1)
- #board.window.set_keep_above(False)
- gcompris.sound.reopen()
-
- #a bug in tuxpaint 9.14: it does not suppress it lockfile
- lockfile = os.getenv('HOME') + '/.tuxpaint/lockfile.dat'
-
- try:
- os.remove(lockfile)
- except:
- print lockfile, 'not removed.'
-
- global pid
- pid = None
- gcompris.bar_hide(0)
- gcompris.bonus.board_finished(gcompris.bonus.FINISHED_RANDOM)
-
-def stop_board():
- gcompris.bonus.board_finished(gcompris.bonus.FINISHED_RANDOM)
-
+# gcompris - Tuxpaint Launcher
+#
+# Copyright (C) 2004 Yves Combe
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+import gnomecanvas
+import gcompris
+import gcompris.utils
+import gcompris.bonus
+import gcompris.skin
+import gcompris.sound
+import gcompris.admin
+import gtk
+import os
+import gobject
+
+import pango
+import platform
+
+#import gobject
+from gettext import gettext as _
+
+pid = None
+
+class Gcompris_tuxpaint:
+ """TuxPaint Launcher"""
+ global pid
+
+ def __init__(self, gcomprisBoard):
+ self.gcomprisBoard = gcomprisBoard
+ pass
+
+ def configuration(self, value, init):
+ if self.config_dict.has_key(value):
+ return eval(self.config_dict[value])
+ else:
+ return init
+
+ def start(self):
+ progname='tuxpaint'
+ tuxpaint_dir = None
+ flags = gobject.SPAWN_DO_NOT_REAP_CHILD | gobject.SPAWN_SEARCH_PATH
+
+ print platform.platform(), platform.platform().split('-')[0]
+ if (platform.platform().split('-')[0] == 'Windows'):
+ progname = 'tuxpaint.exe'
+
+ try:
+ import _winreg
+
+ tuxpaint_key = _winreg.OpenKey( _winreg.HKEY_LOCAL_MACHINE,
+ "Software\\TuxPaint" )
+ tuxpaint_dir, type = _winreg.QueryValueEx(tuxpaint_key, "Install_Dir")
+ flags = gobject.SPAWN_DO_NOT_REAP_CHILD
+ # escape mandatory in Win pygtk2.6
+ tuxpaint_dir = '"' + tuxpaint_dir + '"'
+
+ except:
+ pass
+
+ self.window = self.gcomprisBoard.canvas.get_toplevel()
+
+ #global board
+ #board = self
+
+ Prop = gcompris.get_properties()
+
+ #get default values
+ self.config_dict = self.init_config()
+
+ #replace configured values
+ self.config_dict.update(gcompris.get_board_conf())
+
+ self.rootitem = self.gcomprisBoard.canvas.root().add(
+ gnomecanvas.CanvasGroup,
+ x=0.0,
+ y=0.0
+ )
+
+ options = [progname]
+
+ if (Prop.fullscreen and eval(self.config_dict['fullscreen'])):
+ options.append('--fullscreen')
+
+ # tuxpaint size are 800x600 and 640x480 in 9.14
+ # in cvs (future 9.15) it will be
+ # [--640x480 | --800x600 | --1024x768 |
+ # --1280x1024 | --1400x1050 | --1600x1200]
+ if (Prop.screensize and eval(self.config_dict['size'])):
+ if (Prop.screensize >=1):
+ options.append('--800x600')
+ else:
+ options.append('--640x480')
+
+ if eval(self.config_dict['disable_shape_rotation']):
+ options.append('--simpleshapes')
+
+ if eval(self.config_dict['uppercase_text']):
+ options.append('--uppercase')
+
+ if eval(self.config_dict['disable_stamps']):
+ options.append('--nostamps')
+
+ if eval(self.config_dict['disable_stamps_control']):
+ options.append('--nostampcontrols')
+
+ gcompris.sound.close()
+
+ # release pointergrab if running fullscreen, tuxpaint wants to grab the
+ # pointer itself
+ if (Prop.fullscreen and not Prop.noxf86vm):
+ gtk.gdk.pointer_ungrab()
+
+ #self.window.set_property("accept-focus", 0)
+ #self.window.set_keep_below(False)
+
+ try:
+ # bug in working_directory=None ?
+ if (tuxpaint_dir):
+ pid, stdin, stdout, stderr = gobject.spawn_async(
+ argv=options,
+ flags=flags,
+ working_directory=tuxpaint_dir)
+
+ else:
+ pid, stdin, stdout, stderr = gobject.spawn_async(
+ argv=options,
+ flags=flags)
+
+ except:
+ gcompris.utils.dialog(_("Cannot find Tuxpaint.\nInstall it to use this activity !"),stop_board)
+ return
+
+ gobject.child_watch_add(pid, child_callback, data=self, priority=gobject.PRIORITY_HIGH)
+
+ gcompris.bar_set(0)
+ gcompris.bar_hide(1)
+
+ gcompris.set_background(self.rootitem,
+ gcompris.skin.image_to_skin("gcompris-bg.jpg"))
+
+ textItem = self.rootitem.add(
+ gnomecanvas.CanvasText,
+ text = _("Waiting for Tuxpaint to finish"),
+ x = gcompris.BOARD_WIDTH/2,
+ y = 185,
+ fill_color_rgba = 0x000000ffL,
+ font = gcompris.skin.get_font("gcompris/board/title bold"),
+ )
+
+ def end(self):
+ gcompris.sound.reopen()
+ global pid
+ # force kill - data loss
+ if pid != None:
+ print "Tuxpaint not killed", self.pid
+ #import os
+ #os.kill(self.pid, signal.SIGKILL)
+ if self.rootitem != None:
+ self.rootitem.destroy()
+ self.rootitem = None
+
+ def set_level(self,level):
+ pass
+
+ def ok(self):
+ pass
+
+ def key_press(self, keyval, commit_str, preedit_str):
+ return False
+
+ def repeat(self):
+ pass
+
+ def pause(self, pause):
+ pass
+
+ def config(self):
+ print "Config"
+ pass
+
+ def config_stop(self):
+ print "config_stop", self
+ pass
+
+ def config_start(self, profile):
+ self.configure_profile = profile
+
+ #get default values
+ self.config_dict = self.init_config()
+
+ #set already configured values
+ self.config_dict.update(gcompris.get_conf(profile, self.gcomprisBoard))
+
+ self.main_vbox = gcompris.configuration_window(_('<b>%s</b> configuration\n for profile <b>%s</b>') % ('Tuxpaint', profile.name ),
+ self.apply_callback)
+
+
+ gcompris.boolean_box(_('Inherit fullscreen setting from GCompris'), 'fullscreen', eval(self.config_dict['fullscreen']))
+
+ gcompris.separator()
+
+ gcompris.boolean_box(_('Inherit size setting from GCompris (800x600, 640x480)'), 'size', eval(self.config_dict['size']))
+
+ gcompris.separator()
+
+ gcompris.boolean_box(_('Disable shape rotation'), 'disable_shape_rotation', eval(self.config_dict['disable_shape_rotation']))
+
+ gcompris.separator()
+
+ gcompris.boolean_box(_('Show Uppercase text only'), 'uppercase_text', eval(self.config_dict['uppercase_text']))
+
+ gcompris.separator()
+
+ stamps = gcompris.boolean_box(_('Disable stamps'), 'disable_stamps', eval(self.config_dict['disable_stamps']))
+ stamps.connect("toggled", self.stamps_changed)
+
+ self.stamps_control = gcompris.boolean_box('Disable stamps control', 'disable_stamps_control', eval(self.config_dict['disable_stamps_control']))
+ self.stamps_control.set_sensitive(not eval(self.config_dict['disable_stamps']))
+
+ def stamps_changed(self, button):
+ self.stamps_control.set_sensitive(not button.get_active())
+
+ def apply_callback(self,table):
+ print table
+ for key,value in table.iteritems():
+ gcompris.set_board_conf(self.configure_profile, self.gcomprisBoard, key, value)
+
+ def init_config(self):
+ default_config_dict = { 'fullscreen' : 'True',
+ 'disable_shape_rotation' : 'False',
+ 'uppercase_text' : 'False',
+ 'disable_stamps' : 'False',
+ 'disable_stamps_control' : 'False',
+ 'size' : 'True'
+ }
+ return default_config_dict
+
+def child_callback(fd, cond, data):
+ # restore pointergrab if running fullscreen
+ if (gcompris.get_properties().fullscreen and
+ not gcompris.get_properties().noxf86vm):
+ gtk.gdk.pointer_grab(data.window.window, True, 0, data.window.window)
+
+ #bug in gtk2.6/window
+ if (gtk.gtk_version <= (2,6,10)):
+ data.window.unfullscreen()
+ data.window.fullscreen()
+
+ gcompris.sound.reopen()
+
+ global pid
+ pid = None
+ gcompris.bar_hide(0)
+ gcompris.bonus.board_finished(gcompris.bonus.FINISHED_RANDOM)
+
+def stop_board():
+ gcompris.bonus.board_finished(gcompris.bonus.FINISHED_RANDOM)
+
diff --git a/src/boards/railroad.c b/src/boards/railroad.c
index 7387372..76c0ccc 100644
--- a/src/boards/railroad.c
+++ b/src/boards/railroad.c
@@ -357,7 +357,7 @@ static GnomeCanvasItem *railroad_create_item(GnomeCanvasGroup *parent)
model_size = gcomprisBoard->level +1; // engine + cars
// First the cars, depending of the level
for (i=0; i<model_size-1; i++) {
- r = (int)(((float) WAGONS)*rand()/(RAND_MAX+1.0));
+ r = g_random_int_range( 0, WAGONS);
g_assert( r >=0 && r < WAGONS);
// keep track of the answer
int_model_list = g_list_append(int_model_list, GINT_TO_POINTER(r+ENGINES));
@@ -373,7 +373,7 @@ static GnomeCanvasItem *railroad_create_item(GnomeCanvasGroup *parent)
}
// Then the engine
- r = (int)(((float) ENGINES)*rand()/(RAND_MAX+1.0));
+ r = g_random_int_range( 0, ENGINES);
g_assert( r >=0 && r < ENGINES);
// keep track of the answer
int_model_list = g_list_append(int_model_list, GINT_TO_POINTER(r));
diff --git a/src/boards/read_colors.c b/src/boards/read_colors.c
index f5997ac..06caa2f 100644
--- a/src/boards/read_colors.c
+++ b/src/boards/read_colors.c
@@ -127,7 +127,7 @@ static void pause_board (gboolean pause)
static void start_board (GcomprisBoard *agcomprisBoard) {
GList * list = NULL;
int * item;
- int i;
+ int i,list_length;
if(agcomprisBoard!=NULL) {
gcomprisBoard=agcomprisBoard;
@@ -148,8 +148,8 @@ static void start_board (GcomprisBoard *agcomprisBoard) {
for (i=0; i<LAST_COLOR; i++)
list = g_list_append(list, GINT_TO_POINTER(i));
- while ((g_list_length(list) > 0)) {
- i = RAND(0,g_list_length(list)-1);
+ while ((list_length = g_list_length(list))) {
+ i = list_length == 1 ? 0 : g_random_int_range(0,g_list_length(list)-1);
item = g_list_nth_data(list, i);
listColors = g_list_append(listColors, item);
list = g_list_remove(list, item);
diff --git a/src/boards/reading.c b/src/boards/reading.c
index 1926d01..a89f7b3 100644
--- a/src/boards/reading.c
+++ b/src/boards/reading.c
@@ -362,7 +362,6 @@ static GnomeCanvasItem *display_what_to_do(GnomeCanvasGroup *parent)
gint base_Y = 110;
gint base_X = 580;
- gint i;
/* Load the text to find */
@@ -372,9 +371,8 @@ static GnomeCanvasItem *display_what_to_do(GnomeCanvasGroup *parent)
/* 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;
+ if(g_random_boolean())
+ textToFindIndex = g_random_int_range(0, numberOfLine);
else
textToFindIndex = NOT_THERE;
diff --git a/src/boards/reversecount.c b/src/boards/reversecount.c
index a81bf9a..f9872bc 100644
--- a/src/boards/reversecount.c
+++ b/src/boards/reversecount.c
@@ -570,13 +570,13 @@ static void display_random_fish()
{
fish_index = tux_index +
- rand()%(max_dice_number*number_of_dices) + 1;
+ g_random_int()%(max_dice_number*number_of_dices) + 1;
// Wrapping
if(fish_index >= number_of_item)
fish_index = fish_index - (number_of_item);
- fishItem = display_item_at(fishList[rand()%NUMBER_OF_FISHES],
+ fishItem = display_item_at(fishList[g_random_int()%NUMBER_OF_FISHES],
fish_index, -1);
}
diff --git a/src/boards/shapegame.c b/src/boards/shapegame.c
index abf754f..6af6207 100644
--- a/src/boards/shapegame.c
+++ b/src/boards/shapegame.c
@@ -1954,6 +1954,7 @@ parse_doc(xmlDocPtr doc)
xmlNodePtr node;
GList *list;
GnomeCanvasItem *item;
+ int list_length, i;
/* find <Shape> nodes and add them to the list, this just
loops through all the children of the root of the document */
@@ -1966,11 +1967,12 @@ parse_doc(xmlDocPtr doc)
shape_list = g_list_copy(shape_list_init);
/* Insert each of the shapes randomly */
- while(g_list_length(shape_list_init)>0)
+ while((list_length = g_list_length(shape_list_init)))
{
Shape *shape;
- shape = g_list_nth_data(shape_list_init, RAND(0, (g_list_length(shape_list_init)-1)));
+ i = list_length == 1 ? 0 : g_random_int_range(0, g_list_length(shape_list_init)-1);
+ shape = g_list_nth_data(shape_list_init, i);
add_shape_to_canvas(shape);
shape_list_init = g_list_remove (shape_list_init, shape);
diff --git a/src/boards/smallnumbers.c b/src/boards/smallnumbers.c
index 4ad1d10..08cac23 100644
--- a/src/boards/smallnumbers.c
+++ b/src/boards/smallnumbers.c
@@ -376,9 +376,9 @@ static void smallnumbers_create_item(GnomeCanvasGroup *parent)
/* Take care not to go above 9 anyway */
if(total_number==0) {
- i=rand()%6;
+ i=g_random_int()%6;
} else {
- int rando = rand()%(9-total_number);
+ int rando = g_random_int()%(9-total_number);
i=MIN(rando, 5);
}
@@ -434,7 +434,7 @@ static void smallnumbers_create_item(GnomeCanvasGroup *parent)
if(x==0.0)
{
- x = (double)(rand()%(gcomprisBoard->width-
+ x = (double)(g_random_int()%(gcomprisBoard->width-
(guint)(gdk_pixbuf_get_width(smallnumbers_pixmap)* imageZoom)*2));
}
else
diff --git a/src/boards/submarine.c b/src/boards/submarine.c
index c4e6331..1aaea62 100644
--- a/src/boards/submarine.c
+++ b/src/boards/submarine.c
@@ -779,8 +779,8 @@ static GnomeCanvasItem *submarine_create_item(GnomeCanvasGroup *parent) {
// whale item
str = g_strdup_printf("%s/%s", gcomprisBoard->boarddir, "whale.png");
pixmap = gc_pixmap_load(str);
- whale_x = RAND((int)(gdk_pixbuf_get_width(pixmap)), (int)(gcomprisBoard->width-gdk_pixbuf_get_width(pixmap)));
- whale_y = RAND((int)(SURFACE_IN_BACKGROUND + gdk_pixbuf_get_height(pixmap)),(int)MAX_DEPTH);
+ whale_x = g_random_int_range((int)(gdk_pixbuf_get_width(pixmap)), (int)(gcomprisBoard->width-gdk_pixbuf_get_width(pixmap)));
+ whale_y = g_random_int_range((int)(SURFACE_IN_BACKGROUND + gdk_pixbuf_get_height(pixmap)),(int)MAX_DEPTH);
whale = gnome_canvas_item_new (boardRootItem,
gnome_canvas_pixbuf_get_type (),
"pixbuf", pixmap,
diff --git a/src/boards/superbrain.c b/src/boards/superbrain.c
index 769dc66..797bb69 100644
--- a/src/boards/superbrain.c
+++ b/src/boards/superbrain.c
@@ -258,9 +258,9 @@ static void superbrain_next_level()
{
guint j;
- j = (guint)RAND(1, number_of_color);
+ j = (guint)g_random_int_range(1, number_of_color);
while(selected_color[j])
- j = (guint)RAND(1, number_of_color);
+ j = (guint)g_random_int_range(1, number_of_color);
solution[i] = j;
selected_color[j] = TRUE;
diff --git a/src/boards/target.c b/src/boards/target.c
index d81de24..29466a9 100644
--- a/src/boards/target.c
+++ b/src/boards/target.c
@@ -362,12 +362,12 @@ static void display_windspeed()
NULL));
/* Speed orientation */
- second = rand()%60;
+ second = g_random_int()%60;
ang = second * M_PI / 30;
/* Speed force */
wind_speed = targetDefinition[gcomprisBoard->level-1].target_min_wind_speed \
- + rand()%(targetDefinition[gcomprisBoard->level-1].target_max_wind_speed \
+ + g_random_int()%(targetDefinition[gcomprisBoard->level-1].target_max_wind_speed \
- targetDefinition[gcomprisBoard->level-1].target_min_wind_speed);
canvasPoints->coords[0]=SPEED_CENTER_X;
diff --git a/src/boards/wordsgame.c b/src/boards/wordsgame.c
index 05a5044..51d5e61 100644
--- a/src/boards/wordsgame.c
+++ b/src/boards/wordsgame.c
@@ -636,7 +636,7 @@ static GnomeCanvasItem *wordsgame_create_item(GnomeCanvasGroup *parent)
&x2,
&y2);
- gnome_canvas_item_move (item->rootitem,(double) (rand()%(gcomprisBoard->width-(gint)(x2))),(double) 0);
+ gnome_canvas_item_move (item->rootitem,(double) (g_random_int()%(gcomprisBoard->width-(gint)(x2))),(double) 0);
g_static_rw_lock_writer_lock (&items_lock);
diff --git a/src/gcompris/Makefile.am b/src/gcompris/Makefile.am
index 6a444f7..f796882 100644
--- a/src/gcompris/Makefile.am
+++ b/src/gcompris/Makefile.am
@@ -27,6 +27,25 @@ endif
#cairo_c =
#endif
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+shared = -shared
+else
+no_undefined =
+shared =
+endif
+
+if OS_WIN32
+install-libtool-import-lib:
+ $(INSTALL) .libs/libgcompris-1.dll.a $(DESTDIR)$(libdir)
+
+uninstall-libtool-import-lib:
+ -rm $(DESTDIR)$(libdir)/libgcompris-1.dll.a
+else
+install-libtool-import-lib:
+uninstall-libtool-import-lib:
+endif
+
bin_PROGRAMS = gcompris
INCLUDES = \
@@ -45,26 +64,25 @@ gcompris_SOURCES = \
main.c
gcompris_LDFLAGS = \
- -export-dynamic $(python_ldflags) $(SDL_LIBS) $(cairo_ldflags)
+ -export-dynamic $(python_ldflags) $(cairo_ldflags)
gcompris_LDADD = \
+ $(top_builddir)/src/gcompris/libgcompris-1.la \
$(LIBICONV) \
$(INTLLIBS) \
$(python_ldadd) \
- $(top_builddir)/src/gcompris/libgcompris-1.la \
$(LIBPOPT)
-
#
# Gcompris library
#
lib_LTLIBRARIES = libgcompris-1.la
libgcompris_1_la_LIBADD = \
- $(GCOMPRIS_LIBS) $(sqlite_ldadd) $(XML_LIBS) $(GNET_LIBS)
+ $(GCOMPRIS_LIBS) $(sqlite_ldadd) $(XML_LIBS) $(GNET_LIBS) $(SDL_LIBS)
-libgcompris_1_la_LDFLAGS = \
+libgcompris_1_la_LDFLAGS = $(shared) $(no_undefined) \
-version-info $(LIBGCOMPRIS_CURRENT):$(LIBGCOMPRIS_REVISION):$(LIBGCOMPRIS_AGE)
libgcomprisincludedir = $(includedir)/libgcompris-1.0/libgcompris
@@ -164,5 +182,9 @@ dist-hook:
rm -f $(distdir)/$$file ; \
done
+install-data-local: install-libtool-import-lib
+
+uninstall-local: uninstall-libtool-import-lib
+
clean-local:
rm -f $(marshal_sources)
diff --git a/src/gcompris/Makefile.mingw b/src/gcompris/Makefile.mingw
index 437ea59..6493872 100644
--- a/src/gcompris/Makefile.mingw
+++ b/src/gcompris/Makefile.mingw
@@ -29,7 +29,7 @@ TARGET = gcompris
# Compiler and Linker Options
-CFLAGS =
+CFLAGS = -DSTATIC_MODULE
DEFINES =
diff --git a/src/gcompris/binreloc.c b/src/gcompris/binreloc.c
index 6b92634..03ffbc7 100644
--- a/src/gcompris/binreloc.c
+++ b/src/gcompris/binreloc.c
@@ -17,7 +17,6 @@
#ifdef ENABLE_BINRELOC
#include <sys/types.h>
- #include <sys/stat.h>
#include <unistd.h>
#endif /* ENABLE_BINRELOC */
#include <glib/gstdio.h>
@@ -86,7 +85,7 @@ _br_find_exe (GbrInitError *error)
/* Check whether the symlink's target is also a symlink.
* We want to get the final target. */
- i = stat (path, &stat_buf);
+ i = g_stat (path, &stat_buf);
if (i == -1) {
/* Error. */
g_free (path2);
diff --git a/src/gcompris/board.c b/src/gcompris/board.c
index e86d776..cbde963 100644
--- a/src/gcompris/board.c
+++ b/src/gcompris/board.c
@@ -28,7 +28,7 @@ static struct BoardPluginData *bp_data;
static gboolean get_board_playing(void);
-#ifdef WIN32
+#ifdef STATIC_MODULE
int gc_activation_check(char *code);
extern BoardPlugin * get_advanced_colors_bplugin_info();
extern BoardPlugin * get_algebra_bplugin_info();
@@ -79,7 +79,7 @@ static BoardPlugin *static_boards[MAX_NUMBER_OF_BOARDS];
#endif
-#ifdef WIN32
+#ifdef STATIC_MODULE
int gc_board_number_in_demo;
void gc_board_init(void)
{
@@ -203,7 +203,7 @@ void gc_board_set_current(GcomprisBoard * gcomprisBoard)
bp_data->current_gcompris_board = gcomprisBoard;
}
-#ifdef WIN32
+#ifdef STATIC_MODULE
gboolean
gc_board_check_file(GcomprisBoard *gcomprisBoard)
{
@@ -380,6 +380,7 @@ gc_board_pause(int pause)
if(gc_board_get_current_board_plugin()->pause_board)
gc_board_get_current_board_plugin()->pause_board(pause);
}
+ else g_warning ("No boards to pause ?");
}
void
diff --git a/src/gcompris/board.h b/src/gcompris/board.h
index cec22ac..8a81f89 100644
--- a/src/gcompris/board.h
+++ b/src/gcompris/board.h
@@ -23,9 +23,9 @@
/**
* Handles plugins initialization
*
- * WIN32 = Static module, else it's dynamic
+ * STATIC_MODULE = Static module, else it's dynamic
*/
-#if defined WIN32
+#if defined STATIC_MODULE
#define GET_BPLUGIN_INFO(pluginname) \
BoardPlugin \
*get_##pluginname##_bplugin_info(void) \
@@ -34,8 +34,16 @@
} \
BoardPlugin * _##pluginname##_menu_bp = &menu_bp;
#else
+
+#ifdef BOARD_DLL_EXPORT
+// the dll exports
+# define EXPORT __declspec(dllexport)
+#else
+# define EXPORT
+#endif
+
#define GET_BPLUGIN_INFO(pluginname) \
- BoardPlugin \
+EXPORT BoardPlugin \
*get_bplugin_info(void) \
{ \
return &menu_bp; \
diff --git a/src/gcompris/bonus.c b/src/gcompris/bonus.c
index b434507..c94adf3 100644
--- a/src/gcompris/bonus.c
+++ b/src/gcompris/bonus.c
@@ -212,20 +212,28 @@ gc_bonus_end_display(BoardFinishedList type) {
void
gc_bonus_display(BonusStatusList gamewon, BonusList bonus_id)
{
+ g_warning("bonus display %d %d", (int) gamewon, (int) bonus_id);
gchar *absolute_file;
g_assert(bonus_id < BONUS_LAST);
+ g_warning("bar_hide...");
gc_bar_hide(TRUE);
+ g_warning("bar_hide... ok");
- if (bonus_display_running)
+ if (bonus_display_running) {
+ g_warning("error bonus_display_running !");
return;
+ }
else
bonus_display_running = TRUE;
if(gamewon == BOARD_WIN || gamewon == BOARD_DRAW) {
+ g_warning("bonus absolute filename... ");
absolute_file = gc_file_find_absolute(greetingsList[RAND(0, NUMBER_OF_GREETINGS-1)]);
+ g_warning("bonus absolute filename: %s", absolute_file );
+
if (absolute_file)
{
gc_sound_play_ogg(absolute_file, NULL);
@@ -247,7 +255,9 @@ gc_bonus_display(BonusStatusList gamewon, BonusList bonus_id)
}
/* First pause the board */
+ g_warning("Pausinng board ...");
gc_board_pause(TRUE);
+ g_warning("Pausinng board ...ok");
if(bonus_id==BONUS_RANDOM)
bonus_id = RAND(1, BONUS_LAST-2);
@@ -278,8 +288,15 @@ bonus_image(char *image, BonusStatusList gamewon)
char *str= NULL;
int x,y;
GdkPixbuf *pixmap = NULL;
+
+ g_warning("Bonus_image: gc_board_get_current...");
+
GcomprisBoard *gcomprisBoard = gc_board_get_current();
+ g_assert(gcomprisBoard);
+
+ g_warning("Bonus_image: gc_board_get_current... ok");
+
/* check that bonus_group is a singleton */
if (bonus_group != NULL) {
bonus_display_running = FALSE;
diff --git a/src/gcompris/file_selector.c b/src/gcompris/file_selector.c
index b6aaf2b..f8c577a 100644
--- a/src/gcompris/file_selector.c
+++ b/src/gcompris/file_selector.c
@@ -847,7 +847,7 @@ static void parse_doc(xmlDocPtr doc) {
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
- fprintf(stderr,"empty document\n");
+ g_warning("empty document\n");
xmlFreeDoc(doc);
return;
}
diff --git a/src/gcompris/gameutil.c b/src/gcompris/gameutil.c
index 41792fb..337be1e 100644
--- a/src/gcompris/gameutil.c
+++ b/src/gcompris/gameutil.c
@@ -23,10 +23,8 @@
#include <string.h>
#include <time.h>
-/* for gc_util_create_rootdir */
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+/* g_mkdir */
+#include <glib/gstdio.h>
/* libxml includes */
#include <libxml/parserInternals.h>
@@ -630,16 +628,13 @@ gc_util_create_rootdir (gchar *rootdir)
/* Case where ~/.gcompris already exist as a file. We remove it */
if(g_file_test(rootdir, G_FILE_TEST_IS_REGULAR)) {
- unlink(rootdir);
+ g_unlink(rootdir);
}
if(g_file_test(rootdir, G_FILE_TEST_IS_DIR)) {
return 0;
}
-#if defined WIN32
- return(mkdir(rootdir));
-#else
- return(mkdir(rootdir, 0755));
-#endif
+ return(g_mkdir(rootdir, 0755));
+
}
diff --git a/src/gcompris/gameutil.h b/src/gcompris/gameutil.h
index ecfc5c7..cf1a714 100644
--- a/src/gcompris/gameutil.h
+++ b/src/gcompris/gameutil.h
@@ -33,7 +33,7 @@
#include "soundutil.h"
// returns a random integer in range [A,B]
-#define RAND(A,B) (A + (int)((float)(B-A+1)*rand()/(RAND_MAX+1.0)))
+#define RAND(A,B) (A == B ? A : g_random_int_range((guint32) A,(guint32) B))
#ifndef MAX
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
diff --git a/src/gcompris/gcompris.c b/src/gcompris/gcompris.c
index 02babbd..83e223e 100644
--- a/src/gcompris/gcompris.c
+++ b/src/gcompris/gcompris.c
@@ -60,7 +60,7 @@ void gc_terminate(int signum);
/*
* For the Activation dialog
*/
-#ifdef WIN32
+#ifdef STATIC_MODULE
int gc_activation_check(char *code);
static void activation_enter_callback(GtkWidget *widget,
GtkWidget *entry );
@@ -785,7 +785,7 @@ static void setup_window ()
}
-#ifdef WIN32
+#ifdef STATIC_MODULE
extern int gc_board_number_in_demo;
/** Display the activation dialog for the windows version
*
@@ -924,7 +924,7 @@ activation_done()
(strcmp((char *)gtk_entry_get_text(GTK_ENTRY(widget_activation_entry)), "GOOD") != 0) &&
(strcmp((char *)gtk_entry_get_text(GTK_ENTRY(widget_activation_entry)), "WRONG") != 0))
{
- activation_enter_callback(widget_activation_entry, NULL);
+ activation_enter_callback(GTK_WIDGET(widget_activation_entry), NULL);
}
gc_board_play(properties->menu_board);
@@ -1119,12 +1119,12 @@ static void load_properties ()
g_free(prefix_dir);
- /* Display the directory value we have */
+ /* Display the directory and database value we have */
printf("package_data_dir = %s\n", properties->package_data_dir);
printf("package_locale_dir = %s\n", properties->package_locale_dir);
printf("package_plugin_dir = %s\n", properties->package_plugin_dir);
printf("package_python_plugin_dir= %s\n", properties->package_python_plugin_dir);
-
+ printf("database = %s\n", properties->database);
}
GcomprisProperties *gc_prop_get ()
@@ -1393,7 +1393,7 @@ gc_init (int argc, char *argv[])
textdomain (GETTEXT_PACKAGE);
/* To have some real random behaviour */
- srand (time (NULL));
+ g_random_set_seed (time (NULL));
/* Default difficulty filter: non specified */
popt_difficulty_filter = -1;
@@ -1662,10 +1662,10 @@ gc_init (int argc, char *argv[])
if(popt_web_only) {
g_free(properties->package_data_dir);
- properties->package_data_dir = g_strdup("");
+ properties->package_data_dir = "";
g_free(properties->system_icon_dir);
- properties->system_icon_dir = g_strdup("");
+ properties->system_icon_dir = "";
}
if (popt_server){
diff --git a/src/gcompris/gcompris_db.c b/src/gcompris/gcompris_db.c
index c7f1207..ef9cb7e 100644
--- a/src/gcompris/gcompris_db.c
+++ b/src/gcompris/gcompris_db.c
@@ -20,8 +20,7 @@
#include <string.h>
#include "gcompris.h"
-#include <sys/stat.h>
-
+#include <glib/gstdio.h>
#ifdef USE_SQLITE
static sqlite3 *gcompris_db=NULL;
@@ -127,12 +126,17 @@ int gc_db_init()
if (!g_file_test(properties->database, G_FILE_TEST_EXISTS))
creation = TRUE;
+
+#ifndef WIN32
+ /* this stat() does not work on WinXP */
+ /* NEEDS CHECKING IN WINXP */
+
else {
/* we have to check this file is not empty,
because bug in administration */
struct stat buf;
- if (stat(properties->database, &buf)!=0)
+ if (g_stat(properties->database, &buf)!=0)
g_error("Can't stat %s", properties->database);
/* if size of file is null, we recreate the tables */
@@ -141,10 +145,11 @@ int gc_db_init()
g_warning("Database file is empty! Trying to create table...");
}
}
+#endif
rc = sqlite3_open(properties->database, &gcompris_db);
if( rc ){
- g_error("Can't open database: %s\n", sqlite3_errmsg(gcompris_db));
+ g_error("Can't open database %s : %s\n", properties->database, sqlite3_errmsg(gcompris_db));
sqlite3_close(gcompris_db);
exit(1);
}
diff --git a/src/gcompris/images_selector.c b/src/gcompris/images_selector.c
index 0bbd9ae..32e27d0 100644
--- a/src/gcompris/images_selector.c
+++ b/src/gcompris/images_selector.c
@@ -784,7 +784,7 @@ parse_doc(xmlDocPtr doc) {
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
- fprintf(stderr,"empty document\n");
+ g_warning("empty document\n");
xmlFreeDoc(doc);
return;
}
diff --git a/src/gcompris/menu.c b/src/gcompris/menu.c
index da1d4cf..9918c5d 100644
--- a/src/gcompris/menu.c
+++ b/src/gcompris/menu.c
@@ -633,9 +633,19 @@ void gc_menu_load()
int db = (gc_profile_get_current() ? TRUE: FALSE);
properties->reread_menu = TRUE;
gc_menu_load_dir(properties->package_data_dir, db);
+
+
+ /* use GTimeVal for portability */
GDate *today = g_date_new();
- g_date_set_time (today, time (NULL));
+#if (GLIB_MAJOR_VERSION > 2) && (GLIB_MINOR_VERSION > 10)
+ GTimeVal now;
+
+ g_get_current_time (&now);
+ g_date_set_time_val (today, &now);
+#else
+ g_date_set_time (today, time (NULL));
+#endif
gchar date[11];
g_date_strftime (date, 11, "%F", today);
gc_db_set_date(date);
diff --git a/src/gcompris/properties.c b/src/gcompris/properties.c
index 5a8d2d6..2d20020 100644
--- a/src/gcompris/properties.c
+++ b/src/gcompris/properties.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#define G_STDIO_NO_WRAP_ON_UNIX
#include <glib/gstdio.h>
#include <fcntl.h>
#include <string.h>
@@ -78,9 +79,11 @@ gc_prop_user_root_directory_get ()
{
G_CONST_RETURN gchar *home_dir = g_get_home_dir();
- if (home_dir == NULL) /* Win9x */
- return g_strdup("gcompris");
+#ifdef WIN32
+ if ( ! G_WIN32_IS_NT_BASED() ) /* Win9x */
+ return g_strdup("../gcompris");
else
+#endif
return g_strconcat(home_dir, "/.gcompris", NULL);
}
@@ -97,11 +100,13 @@ gc_prop_config_file_get()
return(config_file);
dir = gc_prop_user_root_directory_get();
/* Was never called, must calculate it */
- if (g_get_home_dir()==NULL) {
+#ifdef WIN32
+ if (! G_WIN32_IS_NT_BASED() ) {
config_file = g_strconcat(dir, "/gcompris.cfg", NULL);
- } else {
+ } else
+#endif
config_file = g_strconcat(dir, "/gcompris.conf", NULL);
- }
+
g_free(dir);
return(config_file);
}
@@ -128,7 +133,9 @@ gc_prop_new ()
GScanner *scanner;
int filefd;
gchar *full_rootdir;
+#ifndef WIN32
const gchar *locale;
+#endif
gchar *user_dir;
tmp = (GcomprisProperties *) malloc (sizeof (GcomprisProperties));
diff --git a/src/gcompris/sdlplayer.c b/src/gcompris/sdlplayer.c
index 81c750f..5591ff4 100644
--- a/src/gcompris/sdlplayer.c
+++ b/src/gcompris/sdlplayer.c
@@ -45,15 +45,15 @@ static gboolean sound_closed = FALSE;
void errorv(char *str, va_list ap)
{
- vfprintf(stderr,str,ap);
+ //vfprintf(stderr,str,ap);
if(strcmp(Mix_GetError(), "Unrecognized file type (not VOC)")==0) {
- fprintf(stderr,"*** You need a version of \"SDL_mixer\" with OGG Vorbis supported ***\n");
+ g_warning("*** You need a version of \"SDL_mixer\" with OGG Vorbis supported ***\n");
exit(EXIT_FAILURE);
}
- fprintf(stderr,": %s.\n", Mix_GetError());
- fprintf(stderr,": %s.\n", SDL_GetError());
+ g_warning(": %s.\n", Mix_GetError());
+ g_warning(": %s.\n", SDL_GetError());
}