-LY_DEFINE(make_duration,
- "ly:make-duration", 2, 2, 0, (SCM length, SCM dotcount,
- SCM num, SCM den),
-" \n"
-"@var{length} is the negative logarithm (base 2) of the duration:\n"
-"1 is a half note, 2 is a quarter note, 3 is an eighth\n"
-"note, etc. The number of dots after the note is given by\n"
-"@var{dotcount}.\n"
-"\n"
-"The duration factor is optionally given by @var{num} and @var{den}.\n"
-"\n"
-"A duration is a musical duration, i.e. a length of time described by a\n"
-"power of two (whole, half, quarter, etc.) and a number of augmentation\n"
-"dots. \n"
-"\n"
-"")
-{
- SCM_ASSERT_TYPE(gh_number_p (length), length, SCM_ARG1, __FUNCTION__, "integer");
- SCM_ASSERT_TYPE(gh_number_p (dotcount), dotcount, SCM_ARG2, __FUNCTION__, "integer");
+LY_DEFINE (duration_less, "ly:duration<?",
+ 2, 0, 0, (SCM p1, SCM p2),
+ "Is @var{p1} shorter than @var{p2}?")
+{
+ Duration *a = unsmob_duration (p1);
+ Duration *b = unsmob_duration (p2);
+
+ SCM_ASSERT_TYPE (a, p1, SCM_ARG1, __FUNCTION__, "Duration");
+ SCM_ASSERT_TYPE (b, p2, SCM_ARG2, __FUNCTION__, "Duration");
+
+ if (Duration::compare (*a, *b) < 0)
+ return SCM_BOOL_T;
+ else
+ return SCM_BOOL_F;
+}
+
+LY_DEFINE (make_duration, "ly:make-duration",
+ 1, 3, 0, (SCM length, SCM dotcount, SCM num, SCM den),
+ "@var{length} is the negative logarithm (base 2) of the duration:\n"
+ "1 is a half note, 2 is a quarter note, 3 is an eighth\n"
+ "note, etc. The number of dots after the note is given by\n"
+ "the optional argument @var{dotcount}.\n"
+ "\n"
+ "The duration factor is optionally given by @var{num}\n"
+ "and @var{den}.\n\n"
+ "A duration is a musical duration, "
+ "i.e. a length of time described by a power of two "
+ "(whole, half, quarter, etc.) and a number of augmentation\n"
+ "dots. \n")
+{
+ SCM_ASSERT_TYPE (scm_integer_p (length) == SCM_BOOL_T,
+ length, SCM_ARG1, __FUNCTION__, "integer");
+
+ int dots = 0;
+ if (dotcount != SCM_UNDEFINED)
+ {
+ SCM_ASSERT_TYPE (scm_integer_p (dotcount) == SCM_BOOL_T,
+ dotcount, SCM_ARG2, __FUNCTION__, "integer");
+ dots = gh_scm2int (dotcount);
+ }