summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/puzzles/rbcompat.h1
-rw-r--r--apps/plugins/puzzles/rbwrappers.c6
-rw-r--r--apps/plugins/puzzles/src/midend.c2
-rw-r--r--apps/plugins/puzzles/src/net.c7
-rw-r--r--apps/plugins/puzzles/src/netslide.c7
-rw-r--r--apps/plugins/puzzles/src/rect.c7
6 files changed, 23 insertions, 7 deletions
diff --git a/apps/plugins/puzzles/rbcompat.h b/apps/plugins/puzzles/rbcompat.h
index 4bb9f39..66c86f1 100644
--- a/apps/plugins/puzzles/rbcompat.h
+++ b/apps/plugins/puzzles/rbcompat.h
@@ -15,6 +15,7 @@ double cos_wrapper(double rads);
int vsprintf_wrapper(char *s, const char *fmt, va_list ap);
float fabs_wrapper(float n);
float floor_wrapper(float n);
+int ftoa(char *buf, int len, float f);
float atan_wrapper(float x);
float atan2_wrapper(float y, float x);
diff --git a/apps/plugins/puzzles/rbwrappers.c b/apps/plugins/puzzles/rbwrappers.c
index 95bc2fc..2d857c1 100644
--- a/apps/plugins/puzzles/rbwrappers.c
+++ b/apps/plugins/puzzles/rbwrappers.c
@@ -23,6 +23,12 @@ int puts_wrapper(const char *s)
return 0;
}
+int ftoa(char *buf, int len, float f)
+{
+ /* biggest hack ever */
+ return rb->snprintf(buf, len, "%d.%06d", (int)f, (int)((f - (int)f)*1e6));
+}
+
/* fixed-point wrappers */
static long lastphase = 0, lastsin = 0, lastcos = 0x7fffffff;
diff --git a/apps/plugins/puzzles/src/midend.c b/apps/plugins/puzzles/src/midend.c
index 2eb5ee9..6dbdd33 100644
--- a/apps/plugins/puzzles/src/midend.c
+++ b/apps/plugins/puzzles/src/midend.c
@@ -1701,7 +1701,7 @@ void midend_serialise(midend *me,
*/
if (me->ourgame->is_timed) {
char buf[80];
- sprintf(buf, "%g", me->elapsed);
+ ftoa(buf, 80, me->elapsed);
wr("TIME", buf);
}
diff --git a/apps/plugins/puzzles/src/net.c b/apps/plugins/puzzles/src/net.c
index de51f82..9289afb 100644
--- a/apps/plugins/puzzles/src/net.c
+++ b/apps/plugins/puzzles/src/net.c
@@ -257,7 +257,10 @@ static char *encode_params(const game_params *params, int full)
if (params->wrapping)
ret[len++] = 'w';
if (full && params->barrier_probability)
- len += sprintf(ret+len, "b%g", params->barrier_probability);
+ {
+ len += sprintf(ret+len, "b");
+ len += ftoa(ret + len, 400, params->barrier_probability);
+ }
if (full && !params->unique)
ret[len++] = 'a';
assert(len < lenof(ret));
@@ -292,7 +295,7 @@ static config_item *game_configure(const game_params *params)
ret[3].name = "Barrier probability";
ret[3].type = C_STRING;
- sprintf(buf, "%g", params->barrier_probability);
+ ftoa(buf, 80, params->barrier_probability);
ret[3].sval = dupstr(buf);
ret[3].ival = 0;
diff --git a/apps/plugins/puzzles/src/netslide.c b/apps/plugins/puzzles/src/netslide.c
index c56e1ab..663febc 100644
--- a/apps/plugins/puzzles/src/netslide.c
+++ b/apps/plugins/puzzles/src/netslide.c
@@ -241,7 +241,10 @@ static char *encode_params(const game_params *params, int full)
if (params->wrapping)
ret[len++] = 'w';
if (full && params->barrier_probability)
- len += sprintf(ret+len, "b%g", params->barrier_probability);
+ {
+ len += sprintf(ret+len, "b");
+ len += ftoa(ret + len, 400, params->barrier_probability);
+ }
/* Shuffle limit is part of the limited parameters, because we have to
* provide the target move count. */
if (params->movetarget)
@@ -278,7 +281,7 @@ static config_item *game_configure(const game_params *params)
ret[3].name = "Barrier probability";
ret[3].type = C_STRING;
- sprintf(buf, "%g", params->barrier_probability);
+ ftoa(buf, 80, params->barrier_probability);
ret[3].sval = dupstr(buf);
ret[3].ival = 0;
diff --git a/apps/plugins/puzzles/src/rect.c b/apps/plugins/puzzles/src/rect.c
index 465e143..0c06c74 100644
--- a/apps/plugins/puzzles/src/rect.c
+++ b/apps/plugins/puzzles/src/rect.c
@@ -163,7 +163,10 @@ static char *encode_params(const game_params *params, int full)
sprintf(data, "%dx%d", params->w, params->h);
if (full && params->expandfactor)
- sprintf(data + strlen(data), "e%g", params->expandfactor);
+ {
+ sprintf(data + strlen(data), "e");
+ ftoa(data + strlen(data), 256, params->expandfactor);
+ }
if (full && !params->unique)
strcat(data, "a");
@@ -191,7 +194,7 @@ static config_item *game_configure(const game_params *params)
ret[2].name = "Expansion factor";
ret[2].type = C_STRING;
- sprintf(buf, "%g", params->expandfactor);
+ ftoa(buf, 80, params->expandfactor);
ret[2].sval = dupstr(buf);
ret[2].ival = 0;