~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to cmd-line-utils/libedit/makelist.sh

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh -
 
2
#       $NetBSD: makelist,v 1.11 2005/10/22 16:45:03 christos Exp $
 
3
#
 
4
# Copyright (c) 1992, 1993
 
5
#       The Regents of the University of California.  All rights reserved.
 
6
#
 
7
# This code is derived from software contributed to Berkeley by
 
8
# Christos Zoulas of Cornell University.
 
9
#
 
10
# Redistribution and use in source and binary forms, with or without
 
11
# modification, are permitted provided that the following conditions
 
12
# are met:
 
13
# 1. Redistributions of source code must retain the above copyright
 
14
#    notice, this list of conditions and the following disclaimer.
 
15
# 2. Redistributions in binary form must reproduce the above copyright
 
16
#    notice, this list of conditions and the following disclaimer in the
 
17
#    documentation and/or other materials provided with the distribution.
 
18
# 3. Neither the name of the University nor the names of its contributors
 
19
#    may be used to endorse or promote products derived from this software
 
20
#    without specific prior written permission.
 
21
#
 
22
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
23
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
24
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
25
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
26
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
27
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
28
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
29
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
30
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
31
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
32
# SUCH DAMAGE.
 
33
#
 
34
#       @(#)makelist    5.3 (Berkeley) 6/4/93
 
35
 
 
36
# makelist.sh: Automatically generate header files...
 
37
 
 
38
AWK=@AWK@
 
39
USAGE="Usage: $0 -h|-e|-fc|-fh|-bc|-bh|-m <filenames>"
 
40
 
 
41
if [ "x$1" = "x" ]
 
42
then
 
43
    echo $USAGE 1>&2
 
44
    exit 1
 
45
fi
 
46
 
 
47
FLAG="$1"
 
48
shift
 
49
 
 
50
FILES="$@"
 
51
 
 
52
case $FLAG in
 
53
 
 
54
#       generate foo.h file from foo.c
 
55
#
 
56
-h)
 
57
    set - `echo $FILES | sed -e 's/\\./_/g'`
 
58
    hdr="_h_`basename $1`"
 
59
    cat $FILES | $AWK '
 
60
        BEGIN {
 
61
            printf("/* Automatically generated file, do not edit */\n");
 
62
            printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'");
 
63
        }
 
64
        /\(\):/ {
 
65
            pr = substr($2, 1, 2);
 
66
            if (pr == "vi" || pr == "em" || pr == "ed") {
 
67
                # XXXMYSQL: support CRLF
 
68
                name = substr($2, 1, index($2,"(") - 1);
 
69
#
 
70
# XXX:  need a space between name and prototype so that -fc and -fh
 
71
#       parsing is much easier
 
72
#
 
73
                printf("protected el_action_t\t%s (EditLine *, int);\n", name);
 
74
            }
 
75
        }
 
76
        END {
 
77
            printf("#endif /* %s */\n", "'$hdr'");
 
78
        }'
 
79
        ;;
 
80
 
 
81
#       generate help.c from various .c files
 
82
#
 
83
-bc)
 
84
    cat $FILES | $AWK '
 
85
        BEGIN {
 
86
            printf("/* Automatically generated file, do not edit */\n");
 
87
            printf("#include \"config.h\"\n#include \"el.h\"\n");
 
88
            printf("private const struct el_bindings_t el_func_help[] = {\n");
 
89
            low = "abcdefghijklmnopqrstuvwxyz_";
 
90
            high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_";
 
91
            for (i = 1; i <= length(low); i++)
 
92
                tr[substr(low, i, 1)] = substr(high, i, 1);
 
93
        }
 
94
        /\(\):/ {
 
95
            pr = substr($2, 1, 2);
 
96
            if (pr == "vi" || pr == "em" || pr == "ed") {
 
97
                # XXXMYSQL: support CRLF
 
98
                name = substr($2, 1, index($2,"(") - 1);
 
99
                uname = "";
 
100
                fname = "";
 
101
                for (i = 1; i <= length(name); i++) {
 
102
                    s = substr(name, i, 1);
 
103
                    uname = uname tr[s];
 
104
                    if (s == "_")
 
105
                        s = "-";
 
106
                    fname = fname s;
 
107
                }
 
108
 
 
109
                printf("    { %-30.30s %-30.30s\n","\"" fname "\",", uname ",");
 
110
                ok = 1;
 
111
            }
 
112
        }
 
113
        /^ \*/ {
 
114
            if (ok) {
 
115
                printf("      \"");
 
116
                for (i = 2; i < NF; i++)
 
117
                    printf("%s ", $i);
 
118
                # XXXMYSQL: support CRLF
 
119
                sub("\r", "", $i);
 
120
                printf("%s\" },\n", $i);
 
121
                ok = 0;
 
122
            }
 
123
        }
 
124
        END {
 
125
            printf("};\n");
 
126
            printf("\nprotected const el_bindings_t* help__get()");
 
127
            printf("{ return el_func_help; }\n");
 
128
        }'
 
129
        ;;
 
130
 
 
131
#       generate help.h from various .c files
 
132
#
 
133
-bh)
 
134
    $AWK '
 
135
        BEGIN {
 
136
            printf("/* Automatically generated file, do not edit */\n");
 
137
            printf("#ifndef _h_help_c\n#define _h_help_c\n");
 
138
            printf("protected const el_bindings_t *help__get(void);\n");
 
139
            printf("#endif /* _h_help_c */\n");
 
140
        }' /dev/null
 
141
        ;;
 
142
 
 
143
#       generate fcns.h from various .h files
 
144
#
 
145
# XXXMYSQL: use portable tr syntax
 
146
-fh)
 
147
    cat $FILES | $AWK '/el_action_t/ { print $3 }' | \
 
148
    sort | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | $AWK '
 
149
        BEGIN {
 
150
            printf("/* Automatically generated file, do not edit */\n");
 
151
            printf("#ifndef _h_fcns_c\n#define _h_fcns_c\n");
 
152
            count = 0;
 
153
        }
 
154
        {
 
155
            printf("#define\t%-30.30s\t%3d\n", $1, count++);
 
156
        }
 
157
        END {
 
158
            printf("#define\t%-30.30s\t%3d\n", "EL_NUM_FCNS", count);
 
159
 
 
160
            printf("typedef el_action_t (*el_func_t)(EditLine *, int);");
 
161
            printf("\nprotected const el_func_t* func__get(void);\n");
 
162
            printf("#endif /* _h_fcns_c */\n");
 
163
        }'
 
164
        ;;
 
165
 
 
166
#       generate fcns.c from various .h files
 
167
#
 
168
-fc)
 
169
    cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK '
 
170
        BEGIN {
 
171
            printf("/* Automatically generated file, do not edit */\n");
 
172
            printf("#include \"config.h\"\n#include \"el.h\"\n");
 
173
            printf("private const el_func_t el_func[] = {");
 
174
            maxlen = 80;
 
175
            needn = 1;
 
176
            len = 0;
 
177
        }
 
178
        {
 
179
            clen = 25 + 2;
 
180
            len += clen;
 
181
            if (len >= maxlen)
 
182
                needn = 1;
 
183
            if (needn) {
 
184
                printf("\n    ");
 
185
                needn = 0;
 
186
                len = 4 + clen;
 
187
            }
 
188
            s = $1 ",";
 
189
            printf("%-26.26s ", s);
 
190
        }
 
191
        END {
 
192
            printf("\n};\n");
 
193
            printf("\nprotected const el_func_t* func__get() { return el_func; }\n");
 
194
        }'
 
195
        ;;
 
196
 
 
197
#       generate editline.c from various .c files
 
198
#
 
199
-e)
 
200
        echo "$FILES" | tr ' ' '\012' | $AWK '
 
201
        BEGIN {
 
202
            printf("/* Automatically generated file, do not edit */\n");
 
203
            printf("#define protected static\n");
 
204
            printf("#define SCCSID\n");
 
205
        }
 
206
        {
 
207
            printf("#include \"%s\"\n", $1);
 
208
        }'
 
209
        ;;
 
210
 
 
211
#       generate man page fragment from various .c files
 
212
#
 
213
-m)
 
214
    cat $FILES | $AWK '
 
215
        BEGIN {
 
216
            printf(".\\\" Section automatically generated with makelist\n");
 
217
            printf(".Bl -tag -width 4n\n");
 
218
        }
 
219
        /\(\):/ {
 
220
            pr = substr($2, 1, 2);
 
221
            if (pr == "vi" || pr == "em" || pr == "ed") {
 
222
                # XXXMYSQL: support CRLF
 
223
                name = substr($2, 1, index($2, "(") - 1);
 
224
                fname = "";
 
225
                for (i = 1; i <= length(name); i++) {
 
226
                    s = substr(name, i, 1);
 
227
                    if (s == "_")
 
228
                        s = "-";
 
229
                    fname = fname s;
 
230
                }
 
231
 
 
232
                printf(".It Ic %s\n", fname);
 
233
                ok = 1;
 
234
            }
 
235
        }
 
236
        /^ \*/ {
 
237
            if (ok) {
 
238
                for (i = 2; i < NF; i++)
 
239
                    printf("%s ", $i);
 
240
                printf("%s.\n", $i);
 
241
                ok = 0;
 
242
            }
 
243
        }
 
244
        END {
 
245
            printf(".El\n");
 
246
            printf(".\\\" End of section automatically generated with makelist\n");
 
247
        }'
 
248
        ;;
 
249
 
 
250
*)
 
251
    echo $USAGE 1>&2
 
252
    exit 1
 
253
    ;;
 
254
 
 
255
esac