Line data Source code
1 : /* yes - output a string repeatedly until killed
2 : Copyright (C) 1991-1997, 1999-2004, 2007 Free Software Foundation, Inc.
3 :
4 : This program is free software: you can redistribute it and/or modify
5 : it under the terms of the GNU General Public License as published by
6 : the Free Software Foundation, either version 3 of the License, or
7 : (at your option) any later version.
8 :
9 : This program is distributed in the hope that it will be useful,
10 : but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : GNU General Public License for more details.
13 :
14 : You should have received a copy of the GNU General Public License
15 : along with this program. If not, see <http://www.gnu.org/licenses/>. */
16 :
17 : /* David MacKenzie <djm@gnu.ai.mit.edu> */
18 :
19 : #include <config.h>
20 : #include <stdio.h>
21 : #include <sys/types.h>
22 : #include <getopt.h>
23 :
24 : #include "system.h"
25 :
26 : #include "error.h"
27 : #include "long-options.h"
28 :
29 : /* The official name of this program (e.g., no `g' prefix). */
30 : #define PROGRAM_NAME "yes"
31 :
32 : #define AUTHORS "David MacKenzie"
33 :
34 : /* The name this program was run with. */
35 : char *program_name;
36 :
37 : void
38 9 : usage (int status)
39 : {
40 9 : if (status != EXIT_SUCCESS)
41 7 : fprintf (stderr, _("Try `%s --help' for more information.\n"),
42 : program_name);
43 : else
44 : {
45 2 : printf (_("\
46 : Usage: %s [STRING]...\n\
47 : or: %s OPTION\n\
48 : "),
49 : program_name, program_name);
50 :
51 2 : fputs (_("\
52 : Repeatedly output a line with all specified STRING(s), or `y'.\n\
53 : \n\
54 : "), stdout);
55 2 : fputs (HELP_OPTION_DESCRIPTION, stdout);
56 2 : fputs (VERSION_OPTION_DESCRIPTION, stdout);
57 2 : emit_bug_reporting_address ();
58 : }
59 9 : exit (status);
60 : }
61 :
62 : int
63 10 : main (int argc, char **argv)
64 : {
65 : initialize_main (&argc, &argv);
66 10 : program_name = argv[0];
67 10 : setlocale (LC_ALL, "");
68 : bindtextdomain (PACKAGE, LOCALEDIR);
69 : textdomain (PACKAGE);
70 :
71 10 : atexit (close_stdout);
72 :
73 10 : parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE_NAME, VERSION,
74 : usage, AUTHORS, (char const *) NULL);
75 7 : if (getopt_long (argc, argv, "+", NULL, NULL) != -1)
76 7 : usage (EXIT_FAILURE);
77 :
78 0 : if (argc <= optind)
79 : {
80 0 : optind = argc;
81 0 : argv[argc++] = "y";
82 : }
83 :
84 : for (;;)
85 0 : {
86 : int i;
87 0 : for (i = optind; i < argc; i++)
88 0 : if (fputs (argv[i], stdout) == EOF
89 0 : || putchar (i == argc - 1 ? '\n' : ' ') == EOF)
90 : {
91 0 : error (0, errno, _("standard output"));
92 0 : exit (EXIT_FAILURE);
93 : }
94 : }
95 : }
|