+void
+Stem::set_default_stemlen ()
+{
+ /*
+ TODO
+ urg; this should be handled by Stem_info
+ */
+
+ Real length_f = paper ()->get_var ("stem_length");
+ Real shorten_f = paper ()->get_var ("forced_stem_shorten");
+
+ Real internote_f = paper ()->internote_f ();
+ length_f /= internote_f;
+ shorten_f /= internote_f;
+
+ Real len = length_f;
+ if (!dir_)
+ set_default_dir ();
+ /*
+ stems in unnatural (forced) direction should be shortened,
+ accoding to [Roush & Gourlay]
+ */
+ else if (dir_ != get_default_dir ())
+ len -= shorten_f / internote_f;
+
+ if (flag_i_ >= 5)
+ len += 2.0;
+ if (flag_i_ >= 6)
+ len += 1.0;
+
+ set_stemend ((dir_ > 0) ? head_positions()[BIGGER] + len :
+ head_positions()[SMALLER] - len);
+
+ if (dir_ * stem_end_f () < 0)
+ {
+ set_stemend (0);