projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lexer: Factor some token inspectors out into new token functions.
[pspp]
/
src
/
ui
/
gui
/
find-dialog.c
diff --git
a/src/ui/gui/find-dialog.c
b/src/ui/gui/find-dialog.c
index 01abc0c81644c2a7d6c8e07a83050bbc641f9428..18f933decc5c5200921678a38075a2e29ce1f771 100644
(file)
--- a/
src/ui/gui/find-dialog.c
+++ b/
src/ui/gui/find-dialog.c
@@
-49,13
+49,6
@@
which match particular strings */
#define _(msgid) gettext (msgid)
#define N_(msgid) msgid
#define _(msgid) gettext (msgid)
#define N_(msgid) msgid
-/* Some systems like MacOS do not have exp10 */
-#ifndef HAVE_EXP10
-inline static double exp10(double x)
-{
- return pow(10.0, x);
-}
-#endif
struct find_dialog
{
struct find_dialog
{
@@
-108,15
+101,17
@@
refresh (GObject *obj, const struct find_dialog *fd)
static void
do_find (GObject *obj, const struct find_dialog *fd)
{
static void
do_find (GObject *obj, const struct find_dialog *fd)
{
+ SswSheet *sheet = SSW_SHEET (fd->de->data_editor->data_sheet);
casenumber x = -1;
gint column = -1;
casenumber x = -1;
gint column = -1;
- glong row = -1;
+ gint unused;
+ gint row = 0;
+ ssw_sheet_get_active_cell (sheet, &unused, &row);
find_value (fd, row, &x, &column);
if (x != -1)
{
find_value (fd, row, &x, &column);
if (x != -1)
{
- SswSheet *sheet = SSW_SHEET (fd->de->data_editor->data_sheet);
gtk_notebook_set_current_page (GTK_NOTEBOOK (fd->de->data_editor),
PSPPIRE_DATA_EDITOR_DATA_VIEW);
gtk_notebook_set_current_page (GTK_NOTEBOOK (fd->de->data_editor),
PSPPIRE_DATA_EDITOR_DATA_VIEW);
@@
-318,8
+313,8
@@
cp1c (casenumber current, struct datasheet *data)
static casenumber
cm1 (casenumber current, struct datasheet *data)
{
static casenumber
cm1 (casenumber current, struct datasheet *data)
{
- if (current ==
-1
)
- return datasheet_get_n_rows (data);
+ if (current ==
0
)
+ return datasheet_get_n_rows (data)
- 1
;
return current - 1;
}
return current - 1;
}
@@
-330,9
+325,6
@@
cm1c (casenumber current, struct datasheet *data)
{
casenumber next = current;
{
casenumber next = current;
- if (current == -1)
- return datasheet_get_n_rows (data);
-
backward_wrap (&next, data);
return next;
backward_wrap (&next, data);
return next;
@@
-348,9
+340,6
@@
last (casenumber current, struct datasheet *data)
static casenumber
minus1 (casenumber current, struct datasheet *data)
{
static casenumber
minus1 (casenumber current, struct datasheet *data)
{
- if (current == -1)
- return 0;
-
return -1;
}
return -1;
}
@@
-375,11
+364,18
@@
enum iteration_type{
n_iterators
};
n_iterators
};
-static const struct casenum_iterator
ip
[n_iterators] =
+static const struct casenum_iterator
case_iterator
[n_iterators] =
{
{
+ /* Forward iterator (linear) */
{cp1, last, forward},
{cp1, last, forward},
+
+ /* Forward iterator (circular) */
{cp1c, cm1, forward_wrap},
{cp1c, cm1, forward_wrap},
+
+ /* Reverse iterator (linear) */
{cm1, minus1, backward},
{cm1, minus1, backward},
+
+ /* Reverse iterator (circular */
{cm1c, cp1, backward_wrap}
};
{cm1c, cp1, backward_wrap}
};
@@
-398,16
+394,16
@@
get_iteration_params (const struct find_dialog *fd)
if (wrap)
{
if (reverse)
if (wrap)
{
if (reverse)
- return &
ip
[REVERSE_WRAP];
+ return &
case_iterator
[REVERSE_WRAP];
else
else
- return &
ip
[FORWARD_WRAP];
+ return &
case_iterator
[FORWARD_WRAP];
}
else
{
if (reverse)
}
else
{
if (reverse)
- return &
ip
[REVERSE];
+ return &
case_iterator
[REVERSE];
else
else
- return &
ip
[FORWARD];
+ return &
case_iterator
[FORWARD];
}
}
}
}
@@
-459,6
+455,18
@@
struct regexp_comparator
regex_t re;
};
regex_t re;
};
+/* Returns 10 raised to the power of X.
+ X must be a non-negative integer. */
+static inline int
+int_pow10 (int x)
+{
+ int ret = 1;
+ assert (x >= 0);
+ while (x--)
+ ret *= 10;
+
+ return ret;
+}
static bool
value_compare (const struct comparator *cmptr,
static bool
value_compare (const struct comparator *cmptr,
@@
-467,7
+475,7
@@
value_compare (const struct comparator *cmptr,
const struct numeric_comparator *nc = (const struct numeric_comparator *) cmptr;
const struct fmt_spec *fs = var_get_print_format (cmptr->var);
const struct numeric_comparator *nc = (const struct numeric_comparator *) cmptr;
const struct fmt_spec *fs = var_get_print_format (cmptr->var);
- double c = nearbyint (v->f *
exp
10 (fs->d));
+ double c = nearbyint (v->f *
int_pow
10 (fs->d));
return c == nc->rounded_ref;
}
return c == nc->rounded_ref;
}
@@
-599,7
+607,7
@@
numeric_comparator_create (const struct variable *var, const char *target)
union value val;
text_to_value (target, var, &val);
union value val;
text_to_value (target, var, &val);
- nc->rounded_ref = nearbyint (val.f *
exp
10 (fs->d));
+ nc->rounded_ref = nearbyint (val.f *
int_pow
10 (fs->d));
value_destroy (&val, var_get_width (var));
return cmptr;
value_destroy (&val, var_get_width (var));
return cmptr;