*/
/*
- * This file is part of GNU enscript.
+ * This file is part of GNU Enscript.
*
- * This program is free software; you can redistribute it and/or modify
+ * Enscript is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * Enscript is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; see the file COPYING. If not, write to
- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
+ * along with Enscript. If not, see <http://www.gnu.org/licenses/>.
*/
#include "gsint.h"
#include "getopt.h"
+#include <locale.h>
+#include <limits.h>
/*
* Prototypes for static functions.
char *program; /* Program's name, used for messages. */
FILE *ofp = NULL; /* Output file. */
void *printer_context; /* Context for the printer. */
-char *version_string = NULL; /* Enscript's version string. */
-char *ps_version_string = NULL; /* Version string for PS procsets. */
char *date_string = NULL; /* Preformatted time string. */
struct tm run_tm; /* Time when program is run. */
struct tm mod_tm; /* Last modification time for current file. */
* Send mail notification to user after print job has been completed.
*/
int mail = 0;
+char *mailto;
/*
* -M, --media
{{"88597", "greek", NULL}, ENC_ISO_8859_7, '\n', 8},
{{"88599", "latin5", NULL}, ENC_ISO_8859_9, '\n', 8},
{{"885910", "latin6", NULL}, ENC_ISO_8859_10, '\n', 8},
+ {{"885915", "latin9", NULL}, ENC_ISO_8859_15, '\n', 8},
{{"ascii", NULL, NULL}, ENC_ASCII, '\n', 8},
{{"asciifise", "asciifi", "asciise"}, ENC_ASCII_FISE, '\n', 8},
{{"asciidkno", "asciidk", "asciino"}, ENC_ASCII_DKNO, '\n', 8},
{"no-page-prefeed", no_argument, 0, 'K'},
{"lineprinter", no_argument, 0, 'l'},
{"lines-per-page", required_argument, 0, 'L'},
- {"mail", no_argument, 0, 'm'},
+ {"mail", optional_argument, 0, 'm'},
{"media", required_argument, 0, 'M'},
{"copies", required_argument, 0, 'n'},
{"newline", required_argument, 0, 'N'},
/* Make getopt_long() to use our modified programname. */
argv[0] = program;
- /* Create version strings. */
-
- buffer_clear (&buffer);
- buffer_append (&buffer, "GNU ");
- buffer_append (&buffer, PACKAGE);
- buffer_append (&buffer, " ");
- buffer_append (&buffer, VERSION);
- version_string = buffer_copy (&buffer);
-
- ps_version_string = xstrdup (VERSION);
- cp = strrchr (ps_version_string, '.');
- *cp = ' ';
-
/* Create the default TOC format string. Wow, this is cool! */
/* xgettext:no-c-format */
toc_fmt_string = _("$3v $-40N $3% pages $4L lines $E $C");
*/
#if HAVE_LC_MESSAGES
setlocale (LC_MESSAGES, "");
+#endif
+ setlocale (LC_CTYPE, "");
+#ifdef LC_PAPER
+ setlocale (LC_PAPER, "");
#endif
#endif
#if ENABLE_NLS
ERROR ((stderr, _("\tmake")));
ERROR ((stderr, _("\tmake check")));
ERROR ((stderr, _("\tmake install")));
- ERROR ((stderr,
-_("or set the environment variable `ENSCRIPT_LIBRARY' to point to your")));
- ERROR ((stderr,
-_("library directory.")));
+ ERROR ((stderr, _("or set the environment variable `ENSCRIPT_LIBRARY'"
+ " to point to your library directory.")));
exit (1);
}
}
/* Site config. */
- (void) read_config (SYSCONFDIR, "enscriptsite.cfg");
+ read_config (SYSCONFDIR, "enscriptsite.cfg");
/* Personal config. */
- (void) read_config (passwd->pw_dir, ".enscriptrc");
+ read_config (cp, ".enscriptrc");
/*
* Options.
buffer_append (&buffer, enscript_library);
buffer_append (&buffer, "/hl/*.st");
- system (buffer_ptr (&buffer));
+ if (system (buffer_ptr (&buffer)) < 0)
+ perror("system");
exit (0);
}
buffer_append (&cmd, intbuf);
buffer_append (&cmd, " ");
- buffer_append (&cmd, "-Ddocument_title=\"");
- buffer_append (&cmd, title);
- buffer_append (&cmd, "\" ");
+ buffer_append (&cmd, "-Ddocument_title=\'");
+ if ((cp = shell_escape (title)) != NULL)
+ {
+ buffer_append (&cmd, cp);
+ free (cp);
+ }
+ buffer_append (&cmd, "\' ");
buffer_append (&cmd, "-Dtoc=");
buffer_append (&cmd, toc ? "1" : "0");
/* Append input files. */
for (i = optind; i < argc; i++)
{
- buffer_append (&cmd, " ");
- buffer_append (&cmd, argv[i]);
+ char *cp;
+ if ((cp = shell_escape (argv[i])) != NULL)
+ {
+ buffer_append (&cmd, " \'");
+ buffer_append (&cmd, cp);
+ buffer_append (&cmd, "\'");
+ free (cp);
+ }
}
/* And do the job. */
buffer_ptr (opts), buffer_len (opts));
}
- buffer_append (&buffer, " \"%s\"");
+ buffer_append (&buffer, " \'%s\'");
input_filter = buffer_copy (&buffer);
input_filter_stdin = "-";
real_total_pages = total_pages;
/* We did something, tell what. */
- MESSAGE (0, (stderr, _("[ %d pages * %d copy ]"), real_total_pages,
- num_copies));
+ char message[80];
+ snprintf(message, sizeof message, "%s%s%s%s%s",
+ "[ ",
+ ngettext("%d page", "%d pages", real_total_pages),
+ " * ",
+ ngettext("%d copy", "%d copies", num_copies),
+ " ]");
+ MESSAGE (0, (stderr, message, real_total_pages, num_copies));
+
if (output_file == OUTPUT_FILE_NONE)
MESSAGE (0, (stderr, _(" sent to %s\n"),
printer ? printer : _("printer")));
if (num_truncated_lines)
{
retval |= 2;
- MESSAGE (0, (stderr, _("%d lines were %s\n"), num_truncated_lines,
+ MESSAGE (0, (stderr,
+ ngettext("%d line was %s\n",
+ "%d lines were %s\n",
+ num_truncated_lines),
+ num_truncated_lines,
line_end == LE_TRUNCATE
? _("truncated") : _("wrapped")));
}
if (num_missing_chars)
{
retval |= 4;
- MESSAGE (0, (stderr, _("%d characters were missing\n"),
+ MESSAGE (0, (stderr,
+ ngettext("%d character was missing\n",
+ "%d characters were missing\n",
+ num_missing_chars),
num_missing_chars));
if (list_missing_characters)
{
if (num_non_printable_chars)
{
retval |= 8;
- MESSAGE (0, (stderr, _("%d non-printable characters\n"),
+ MESSAGE (0, (stderr,
+ ngettext("%d non-printable character\n",
+ "%d non-printable characters\n",
+ num_non_printable_chars),
num_non_printable_chars));
if (list_missing_characters)
{
/* Format spooler options. */
spooler_options[0] = '\0';
if (mail)
- strcat (spooler_options, "-m ");
+ {
+ strcat (spooler_options, "-m ");
+ strcat (spooler_options, mailto);
+ strcat (spooler_options, " ");
+ }
if (no_job_header)
{
strcat (spooler_options, no_job_header_switch);
int i;
c = getopt_long (argc, argv,
- "#:123456789a:A:b:BcC::d:D:e::E::f:F:gGhH::i:I:jJ:kKlL:mM:n:N:o:Op:P:qrRs:S:t:T:u::U:vVW:X:zZ",
+ "#:123456789a:A:b:BcC::d:D:e::E::f:F:gGhH::i:I:jJ:kKlL:m::M:n:N:o:Op:P:qrRs:S:t:T:u::U:vVw:W:X:zZ",
long_options, &option_index);
if (c == -1)
case 'm': /* send mail upon completion */
mail = 1;
+ if(optarg)
+ mailto = (optarg);
+ else
+ mailto = (*passwd).pw_name;
break;
case 'M': /* select output media */
-b, --header=HEADER set page header\n\
-B, --no-header no page headers\n\
-c, --truncate-lines cut long lines (default is to wrap)\n\
- -C, --line-numbers[=START]\n\
+ -C[START], --line-numbers[=START]\n\
precede each line with its line number\n\
-d an alias for option --printer\n\
-D, --setpagedevice=KEY[:VALUE]\n\
pass a page device definition to output\n\
- -e, --escapes[=CHAR] enable special escape interpretation\n"),
+ -e[CHAR], --escapes[=CHAR] enable special escape interpretation\n"),
program);
printf (_("\
- -E, --highlight[=LANG] highlight source code\n"));
+ -E[LANG], --highlight[=LANG] highlight source code\n"));
printf (_("\
-f, --font=NAME use font NAME for body text\n\
-G same as --fancy-header\n\
--fancy-header[=NAME] select fancy page header\n\
-h, --no-job-header suppress the job header page\n\
- -H, --highlight-bars=NUM specify how high highlight bars are\n\
+ -H[NUM], --highlight-bars[=NUM] specify how high highlight bars are\n\
-i, --indent=NUM set line indent to NUM characters\n\
-I, --filter=CMD read input files through input filter CMD\n\
-j, --borders print borders around columns\n\
-t, --title=TITLE set banner page's job title to TITLE. Option\n\
sets also the name of the input file stdin.\n\
-T, --tabsize=NUM set tabulator size to NUM\n\
- -u, --underlay[=TEXT] print TEXT under every page\n\
+ -u[TEXT], --underlay[=TEXT] print TEXT under every page\n\
-U, --nup=NUM print NUM logical pages on each output page\n\
-v, --verbose tell what we are doing\n\
-V, --version print version number\n\
--word-wrap wrap long lines from word boundaries\n\
"));
- printf (_("\nReport bugs to mtr@iki.fi.\n"));
+ printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
}
version ()
{
printf ("%s\n\
-Copyright (C) 2003 Markku Rossi.\n\
-GNU enscript comes with NO WARRANTY, to the extent permitted by law.\n\
-You may redistribute copies of GNU enscript under the terms of the GNU\n\
-General Public License. For more information about these matters, see\n\
-the files named COPYING.\n",
- version_string);
+Copyright (C) 1995-2003, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\n\
+%s comes with NO WARRANTY, to the extent permitted by law.\n\
+You may redistribute copies of %s under the terms of the GNU\n\
+General Public License, version 3 or, at your option, any later version.\n\
+For more information about these matters, see the files named COPYING.\n",
+ PACKAGE_STRING,
+ PACKAGE_NAME,
+ PACKAGE_NAME);
}