// -*- c -*-
//
// PSPP - a program for statistical analysis.
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// 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
function DATE.DMY (d, m, y) = expr_ymd_to_date (y, m, d);
function DATE.MDY (m, d, y) = expr_ymd_to_date (y, m, d);
function DATE.MOYR (m, y) = expr_ymd_to_date (y, m, 1);
-function DATE.QYR (q, y) = expr_ymd_to_date (y, q * 3 - 2, 1);
+function DATE.QYR (q, y)
+{
+ if (q < 1.0 || q > 4.0 || q != (int) q)
+ {
+ msg (SW, _("The first argument to DATE.QYR must be 1, 2, 3, or 4."));
+ return SYSMIS;
+ }
+ return expr_ymd_to_date (y, q * 3 - 2, 1);
+}
function DATE.WKYR (w, y) = expr_wkyr_to_date (w, y);
function DATE.YRDAY (y, yday) = expr_yrday_to_date (y, yday);
function YRMODA (y, m, d) = expr_yrmoda (y, m, d);
function NUMBER (string s, ni_format f)
{
union value out;
- data_in (ss_head (s, f->w), LEGACY_NATIVE, f->type, f->d, 0, 0, &out, 0);
+ data_in (ss_head (s, f->w), LEGACY_NATIVE, f->type, f->d, 0, 0, NULL, &out, 0);
return out.f;
}
{
union value v;
struct substring dst;
+ char *s;
v.f = x;
- dst = alloc_string (e, f->w);
+
assert (!fmt_is_string (f->type));
- data_out (&v, f, dst.string);
+ s = data_out (&v, LEGACY_NATIVE, f);
+ dst = alloc_string (e, strlen (s));
+ strcpy (dst.string, s);
+ free (s);
return dst;
}
// Artificial.
operator SQUARE (x) = x * x;
-boolean operator NUM_TO_BOOLEAN (x)
+boolean operator NUM_TO_BOOLEAN (x, string op_name)
{
if (x == 0. || x == 1. || x == SYSMIS)
return x;
else
{
- msg (SE, _("A number being treated as a Boolean in an "
- "expression was found to have a value other than "
- "0 (false), 1 (true), or the system-missing value. "
- "The result was forced to 0."));
+ msg (SE, _("An operand of the %.*s operator was found to have a value "
+ "other than 0 (false), 1 (true), or the system-missing "
+ "value. The result was forced to 0."),
+ (int) op_name.length, op_name.string);
return 0.;
}
}