Bash  5.0-beta2
Bash - Bourne Again shell
hello.c
Go to the documentation of this file.
1 /* Sample builtin to be dynamically loaded with enable -f and create a new
2  builtin. */
3 
4 /* See Makefile for compilation details. */
5 
6 /*
7  Copyright (C) 1999-2009 Free Software Foundation, Inc.
8 
9  This file is part of GNU Bash.
10  Bash is free software: you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  Bash is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with Bash. If not, see <http://www.gnu.org/licenses/>.
22 */
23 
24 #include <config.h>
25 
26 #if defined (HAVE_UNISTD_H)
27 # include <unistd.h>
28 #endif
29 
30 #include <stdio.h>
31 
32 #include "loadables.h"
33 
34 /* A builtin `xxx' is normally implemented with an `xxx_builtin' function.
35  If you're converting a command that uses the normal Unix argc/argv
36  calling convention, use argv = make_builtin_argv (list, &argc) and call
37  the original `main' something like `xxx_main'. Look at cat.c for an
38  example.
39 
40  Builtins should use internal_getopt to parse options. It is the same as
41  getopt(3), but it takes a WORD_LIST *. Look at print.c for an example
42  of its use.
43 
44  If the builtin takes no options, call no_options(list) before doing
45  anything else. If it returns a non-zero value, your builtin should
46  immediately return EX_USAGE. Look at logname.c for an example.
47 
48  A builtin command returns EXECUTION_SUCCESS for success and
49  EXECUTION_FAILURE to indicate failure. */
50 int
52  WORD_LIST *list;
53 {
54  printf("hello world\n");
55  fflush (stdout);
56  return (EXECUTION_SUCCESS);
57 }
58 
59 int
61  char *s;
62 {
63  printf ("hello builtin loaded\n");
64  fflush (stdout);
65  return (1);
66 }
67 
68 void
70  char *s;
71 {
72  printf ("hello builtin unloaded\n");
73  fflush (stdout);
74 }
75 
76 /* An array of strings forming the `long' documentation for a builtin xxx,
77  which is printed by `help xxx'. It must end with a NULL. By convention,
78  the first line is a short description. */
79 char *hello_doc[] = {
80  "Sample builtin.",
81  "",
82  "this is the long doc for the sample hello builtin",
83  (char *)NULL
84 };
85 
86 /* The standard structure describing a builtin command. bash keeps an array
87  of these structures. The flags must include BUILTIN_ENABLED so the
88  builtin can be used. */
90  "hello", /* builtin name */
91  hello_builtin, /* function implementing the builtin */
92  BUILTIN_ENABLED, /* initial flags for builtin */
93  hello_doc, /* array of long documentation strings. */
94  "hello", /* usage synopsis; becomes short_doc */
95  0 /* reserved for internal use */
96 };
int hello_builtin(WORD_LIST *list)
Definition: hello.c:51
struct builtin hello_struct
Definition: hello.c:89
list
Definition: subst.c:10212
#define BUILTIN_ENABLED
Definition: builtins.h:41
#define EXECUTION_SUCCESS
Definition: shell.h:53
int hello_builtin_load(char *s)
Definition: hello.c:60
#define NULL
Definition: general.h:53
void hello_builtin_unload(char *s)
Definition: hello.c:69
char * hello_doc[]
Definition: hello.c:79