source file of the GNU LilyPond music typesetter
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include <stdlib.h>
#include <iostream.h>
#include <assert.h>
#include <locale.h>
+
#include "lily-guile.hh"
#include "lily-version.hh"
-#include "all-fonts.hh"
-#include "proto.hh"
-#include "dimensions.hh"
+#include "all-font-metrics.hh"
#include "getopt-long.hh"
#include "misc.hh"
#include "string.hh"
#include <libintl.h>
#endif
+#if KPATHSEA && HAVE_KPATHSEA_KPATHSEA_H
+extern "C" {
+#include <kpathsea/kpathsea.h>
+}
+#endif
-bool version_ignore_global_b = false;
+bool verbose_global_b = false;
bool no_paper_global_b = false;
bool no_timestamps_global_b = false;
bool find_old_relative_b = false;
*/
Long_option_init theopts[] = {
{0, "debug", 'd', _i ("enable debugging output")},
- {_i ("EXT"), "output-format", 'f', _i ("use output format EXT")},
+ {_i ("EXT"), "output-format", 'f', _i ("use output format EXT (scm, ps, tex or as)")},
{0, "help", 'h', _i ("this help")},
{_i ("DIR"), "include", 'I', _i ("add DIR to search path")},
{_i ("FILE"), "init", 'i', _i ("use FILE as init file")},
{0, "safe", 's', _i ("inhibit file output naming and exporting")},
{0, "no-timestamps", 'T', _i ("don't timestamp the output")},
{0, "test", 't', _i ("switch on experimental features")},
- {0, "ignore-version", 'V', _i ("ignore mudela version")},
{0, "version", 'v', _i ("print version number")},
+ {0, "verbose", 'V', _i("verbose")},
{0, "warranty", 'w', _i ("show warranty and copyright")},
{0,0,0, 0}
};
+void
+identify (ostream* os)
+{
+ //*os << gnu_lilypond_version_str () << endl;
+ *os << gnu_lilypond_version_str ();
+}
+
void
usage ()
{
+ identify (&cout);
+ cout << "\n";
cout << _f ("Usage: %s [OPTION]... [FILE]...", "lilypond");
cout << "\n\n";
cout << _ ("Typeset music and or play MIDI from FILE");
cout << "\n\n";
cout <<
-#include "BLURB.hh"
+_(
+"LilyPond is a music typesetter. It produces beautiful sheet music\n"
+"using a high level description file as input. LilyPond is part of \n"
+"the GNU Project.\n"
+);
cout << '\n';
cout << _ ("Options:");
"localedir: `" DIR_LOCALEDIR "'\n"
"\n";
- print_mudela_versions (cout);
+
cout << endl;
cout << _f ("Report bugs to %s", "bug-gnu-music@gnu.org") << endl;
}
-void
-identify ()
-{
- cout << gnu_lilypond_version_str () << endl;
-}
-
void
version ()
{
- identify ();
+ identify (&cout);
cout << '\n';
cout << _f (""
"This is free software. It is covered by the GNU General Public License,\n"
"lilypond");
cout << endl;
- cout << _f ("Copyright (c) %s by", "1996--1999");
+ cout << _f ("Copyright (c) %s by", "1996--2000");
cout << "Han-Wen Nienhuys <hanwen@cs.uu.nl>\n"
<< "Jan Nieuwenhuizen <janneke@gnu.org>\n";
}
// GNU GNU?
cout << _ ("GNU LilyPond -- The GNU Project music typesetter");
cout << '\n';
- cout << _f ("Copyright (c) %s by", "1996--1999");
+ cout << _f ("Copyright (c) %s by", "1996--2000");
cout << '\n';
cout << " Han-Wen Nienhuys <hanwen@cs.uu.nl>\n";
cout << " Jan Nieuwenhuizen <janneke@gnu.org>\n";
"USA.\n");
}
-
void
setup_paths ()
{
global_path.parse_path (env_sz);
- char *suffixes[] = {"ly", "afm", "scm", "tfm", "cmtfm", "ps", 0};
- for (char **s = suffixes; *s; s++){
- if (!prefix_directory.empty_b())
- global_path.add (prefix_directory + to_str ('/') + String (*s));
- else
- global_path.add (String (DIR_DATADIR) + to_str ('/') + String(*s));
- }
+ /*
+ Should use kpathsea, this is getting out of hand.
+ */
+ char *suffixes[] = {"ly", "afm", "scm", "tfm", "ps", 0};
+ String prefix = prefix_directory;
+ if (prefix.empty_b ()) prefix = DIR_DATADIR;
+ for (char **s = suffixes; *s; s++)
+ {
+ String p = prefix + to_str ('/') + String (*s);
+ global_path.add (p);
+
+#if !KPATHSEA
+ /*
+ Although kpathsea seems nice, it is not universally available
+ (GNU/Windows).
+
+ Compiling kpathsea seems not possible without
+ (compiling) a matching tex installation. Apart from the fact
+ that I cannot get kpathsea compiled for GNU/Windows, another
+ major problem is that TeX installations may be different on
+ different clients, so it wouldn't work anyway. While ugly,
+ this code is simple and effective.
+ -- jcn
+ */
+
+ /* Urg: GNU make's $(word) index starts at 1 */
+ int i = 1;
+ while (global_path.try_add (p + to_str (".") + to_str (i)))
+ i++;
+#endif
+ }
}
/*
need to do this first. Engravers use lily.scm contents.
*/
- extern void ly_init_protection();
- ly_init_protection();
init_lily_guile ();
- read_lily_scm_file ( "lily.scm");
+ if (verbose_global_b)
+ progress_indication ("\n");
+ read_lily_scm_file ("lily.scm");
cout << endl;
call_constructors ();
debug_init (); // should be first
setup_paths ();
+ /*
+ prepare guile for heavy mem usage.
+
+ putenv is POSIX, setenv is BSD 4.3
+ */
+ putenv ("GUILE_INIT_SEGMENT_SIZE_1=4194304");
+ putenv ("GUILE_MAX_SEGMENT_SIZE=8388608");
+
+#if KPATHSEA && HAVE_KPATHSEA_KPATHSEA_H
+ /*
+ initialize kpathsea
+ */
+ kpse_set_program_name(argv[0], NULL);
+ kpse_maketex_option("tfm", TRUE);
+#endif
+
oparser_global_p = new Getopt_long(argc, argv,theopts);
while (Long_option_init const * opt = (*oparser_global_p)())
{
break;
case 't':
experimental_features_global_b = true;
- *mlog << "*** enabling experimental features, you're on your own now ***\n";
+ progress_indication ("*** enabling experimental features, you're on your own now ***\n");
break;
case 'o':
outname_str_global = oparser_global_p->optional_argument_ch_C_;
exit (0);
break;
case 'V':
- version_ignore_global_b = true;
+ verbose_global_b = true;
break;
case 's':
safe_global_b = true;
break;
}
}
- identify ();
+ identify (&cerr);
#ifdef WINNT
gh_enter (argc, argv, main_prog);