xref: /openbsd-src/lib/libedit/makelist (revision 13e01c7add293760b137f79ec359a58715043708)
1df930be7Sderaadt#!/bin/sh -
2*13e01c7aSschwarze#	$NetBSD: makelist,v 1.28 2016/04/18 17:01:19 christos Exp $
3df930be7Sderaadt#
4df930be7Sderaadt# Copyright (c) 1992, 1993
5df930be7Sderaadt#	The Regents of the University of California.  All rights reserved.
6df930be7Sderaadt#
7df930be7Sderaadt# This code is derived from software contributed to Berkeley by
8df930be7Sderaadt# Christos Zoulas of Cornell University.
9df930be7Sderaadt#
10df930be7Sderaadt# Redistribution and use in source and binary forms, with or without
11df930be7Sderaadt# modification, are permitted provided that the following conditions
12df930be7Sderaadt# are met:
13df930be7Sderaadt# 1. Redistributions of source code must retain the above copyright
14df930be7Sderaadt#    notice, this list of conditions and the following disclaimer.
15df930be7Sderaadt# 2. Redistributions in binary form must reproduce the above copyright
16df930be7Sderaadt#    notice, this list of conditions and the following disclaimer in the
17df930be7Sderaadt#    documentation and/or other materials provided with the distribution.
185c0d7bc8Sderaadt# 3. Neither the name of the University nor the names of its contributors
19df930be7Sderaadt#    may be used to endorse or promote products derived from this software
20df930be7Sderaadt#    without specific prior written permission.
21df930be7Sderaadt#
22df930be7Sderaadt# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23df930be7Sderaadt# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24df930be7Sderaadt# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25df930be7Sderaadt# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26df930be7Sderaadt# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27df930be7Sderaadt# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28df930be7Sderaadt# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29df930be7Sderaadt# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30df930be7Sderaadt# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31df930be7Sderaadt# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32df930be7Sderaadt# SUCH DAMAGE.
33df930be7Sderaadt#
34df930be7Sderaadt#	@(#)makelist	5.3 (Berkeley) 6/4/93
35df930be7Sderaadt
36df930be7Sderaadt# makelist.sh: Automatically generate header files...
37df930be7Sderaadt
38d484b7d0SottoAWK=awk
39*13e01c7aSschwarzeUSAGE="Usage: $0 -h|-dh|-fh|-bh <filenames>"
40df930be7Sderaadt
41df930be7Sderaadtif [ "x$1" = "x" ]
42df930be7Sderaadtthen
43df930be7Sderaadt    echo $USAGE 1>&2
44df930be7Sderaadt    exit 1
45df930be7Sderaadtfi
46df930be7Sderaadt
47df930be7SderaadtFLAG="$1"
48df930be7Sderaadtshift
49df930be7Sderaadt
50df930be7SderaadtFILES="$@"
51df930be7Sderaadt
52df930be7Sderaadtcase $FLAG in
53d484b7d0Sotto
54df930be7Sderaadt-h)
55df930be7Sderaadt    set - `echo $FILES | sed -e 's/\\./_/g'`
56df930be7Sderaadt    hdr="_h_`basename $1`"
57df930be7Sderaadt    cat $FILES | $AWK '
58df930be7Sderaadt	BEGIN {
59df930be7Sderaadt	    printf("/* Automatically generated file, do not edit */\n");
60df930be7Sderaadt	    printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'");
61df930be7Sderaadt	}
62df930be7Sderaadt	/\(\):/ {
63df930be7Sderaadt	    pr = substr($2, 1, 2);
64df930be7Sderaadt	    if (pr == "vi" || pr == "em" || pr == "ed") {
65df930be7Sderaadt		name = substr($2, 1, length($2) - 3);
66d484b7d0Sotto#
67*13e01c7aSschwarze# XXX:	need a space between name and prototype so that -dh and -fh
68d484b7d0Sotto#	parsing is much easier
69d484b7d0Sotto#
70b2589f0bSschwarze		printf("protected el_action_t\t%s (EditLine *, wint_t);\n",
71b2589f0bSschwarze		    name);
72df930be7Sderaadt	    }
73df930be7Sderaadt	}
74df930be7Sderaadt	END {
75df930be7Sderaadt	    printf("#endif /* %s */\n", "'$hdr'");
76d484b7d0Sotto	}'
77d484b7d0Sotto	;;
78d484b7d0Sotto
792053e281Sschwarze#	generate help.h from various .c files
80d484b7d0Sotto#
812053e281Sschwarze-bh)
82df930be7Sderaadt    cat $FILES | $AWK '
83df930be7Sderaadt	BEGIN {
84df930be7Sderaadt	    printf("/* Automatically generated file, do not edit */\n");
85ddc81437Sschwarze	    printf("static const struct el_bindings_t el_func_help[] = {\n");
86df930be7Sderaadt	    low = "abcdefghijklmnopqrstuvwxyz_";
87df930be7Sderaadt	    high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_";
88df930be7Sderaadt	    for (i = 1; i <= length(low); i++)
89df930be7Sderaadt		tr[substr(low, i, 1)] = substr(high, i, 1);
90df930be7Sderaadt	}
91df930be7Sderaadt	/\(\):/ {
92df930be7Sderaadt	    pr = substr($2, 1, 2);
93df930be7Sderaadt	    if (pr == "vi" || pr == "em" || pr == "ed") {
94df930be7Sderaadt		name = substr($2, 1, length($2) - 3);
95df930be7Sderaadt		uname = "";
96df930be7Sderaadt		fname = "";
97df930be7Sderaadt		for (i = 1; i <= length(name); i++) {
98df930be7Sderaadt		    s = substr(name, i, 1);
99df930be7Sderaadt		    uname = uname tr[s];
100df930be7Sderaadt		    if (s == "_")
101df930be7Sderaadt			s = "-";
102df930be7Sderaadt		    fname = fname s;
103df930be7Sderaadt		}
104df930be7Sderaadt
1055c93237dSschwarze		printf("    { %-30.30s %-30.30s\n","L\"" fname "\",", uname ",");
106df930be7Sderaadt		ok = 1;
107df930be7Sderaadt	    }
108df930be7Sderaadt	}
109df930be7Sderaadt	/^ \*/ {
110df930be7Sderaadt	    if (ok) {
1115c93237dSschwarze		printf("      L\"");
112df930be7Sderaadt		for (i = 2; i < NF; i++)
113df930be7Sderaadt		    printf("%s ", $i);
1145c93237dSschwarze		printf("%s\" },\n", $i);
115df930be7Sderaadt		ok = 0;
116df930be7Sderaadt	    }
117df930be7Sderaadt	}
118df930be7Sderaadt	END {
119df930be7Sderaadt	    printf("};\n");
120d484b7d0Sotto	}'
121d484b7d0Sotto	;;
122d484b7d0Sotto
123d484b7d0Sotto#	generate fcns.h from various .h files
124d484b7d0Sotto#
125df930be7Sderaadt-fh)
126df930be7Sderaadt    cat $FILES | $AWK '/el_action_t/ { print $3 }' | \
127aed0ee81Snicm    sort | tr '[:lower:]' '[:upper:]' | $AWK '
128df930be7Sderaadt	BEGIN {
129df930be7Sderaadt	    printf("/* Automatically generated file, do not edit */\n");
130df930be7Sderaadt	    count = 0;
131df930be7Sderaadt	}
132df930be7Sderaadt	{
133df930be7Sderaadt	    printf("#define\t%-30.30s\t%3d\n", $1, count++);
134df930be7Sderaadt	}
135df930be7Sderaadt	END {
136df930be7Sderaadt	    printf("#define\t%-30.30s\t%3d\n", "EL_NUM_FCNS", count);
137d484b7d0Sotto	}'
138d484b7d0Sotto	;;
139d484b7d0Sotto
140*13e01c7aSschwarze#	generate dispatch table func.h from various .h files
141d484b7d0Sotto#
142*13e01c7aSschwarze-dh)
143df930be7Sderaadt    cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK '
144df930be7Sderaadt	BEGIN {
145df930be7Sderaadt	    printf("/* Automatically generated file, do not edit */\n");
146ddc81437Sschwarze	    printf("static const el_func_t el_func[] = {");
147df930be7Sderaadt	    maxlen = 80;
148df930be7Sderaadt	    needn = 1;
149df930be7Sderaadt	    len = 0;
150df930be7Sderaadt	}
151df930be7Sderaadt	{
152df930be7Sderaadt	    clen = 25 + 2;
153df930be7Sderaadt	    len += clen;
154df930be7Sderaadt	    if (len >= maxlen)
155df930be7Sderaadt		needn = 1;
156df930be7Sderaadt	    if (needn) {
157df930be7Sderaadt		printf("\n    ");
158df930be7Sderaadt		needn = 0;
159df930be7Sderaadt		len = 4 + clen;
160df930be7Sderaadt	    }
161df930be7Sderaadt	    s = $1 ",";
162df930be7Sderaadt	    printf("%-26.26s ", s);
163df930be7Sderaadt	}
164df930be7Sderaadt	END {
165df930be7Sderaadt	    printf("\n};\n");
166d484b7d0Sotto	}'
167d484b7d0Sotto	;;
168d484b7d0Sotto
169df930be7Sderaadt*)
170df930be7Sderaadt    echo $USAGE 1>&2
171d484b7d0Sotto    exit 1
172d484b7d0Sotto    ;;
173d484b7d0Sotto
174df930be7Sderaadtesac
175