xref: /netbsd-src/lib/libedit/makelist (revision a2d6b270ec11be297c154da1d16ab6218f048c27)
16dc2f1dbScgd#!/bin/sh -
2*a2d6b270Schristos#	$NetBSD: makelist,v 1.29 2016/05/09 21:46:56 christos Exp $
36dc2f1dbScgd#
46dc2f1dbScgd# Copyright (c) 1992, 1993
56dc2f1dbScgd#	The Regents of the University of California.  All rights reserved.
66dc2f1dbScgd#
76dc2f1dbScgd# This code is derived from software contributed to Berkeley by
86dc2f1dbScgd# Christos Zoulas of Cornell University.
96dc2f1dbScgd#
106dc2f1dbScgd# Redistribution and use in source and binary forms, with or without
116dc2f1dbScgd# modification, are permitted provided that the following conditions
126dc2f1dbScgd# are met:
136dc2f1dbScgd# 1. Redistributions of source code must retain the above copyright
146dc2f1dbScgd#    notice, this list of conditions and the following disclaimer.
156dc2f1dbScgd# 2. Redistributions in binary form must reproduce the above copyright
166dc2f1dbScgd#    notice, this list of conditions and the following disclaimer in the
176dc2f1dbScgd#    documentation and/or other materials provided with the distribution.
1878745cdeSlukem# 3. Neither the name of the University nor the names of its contributors
196dc2f1dbScgd#    may be used to endorse or promote products derived from this software
206dc2f1dbScgd#    without specific prior written permission.
216dc2f1dbScgd#
226dc2f1dbScgd# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
236dc2f1dbScgd# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
246dc2f1dbScgd# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
256dc2f1dbScgd# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
266dc2f1dbScgd# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
276dc2f1dbScgd# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
286dc2f1dbScgd# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
296dc2f1dbScgd# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
306dc2f1dbScgd# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
316dc2f1dbScgd# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
326dc2f1dbScgd# SUCH DAMAGE.
336dc2f1dbScgd#
346dc2f1dbScgd#	@(#)makelist	5.3 (Berkeley) 6/4/93
356dc2f1dbScgd
366dc2f1dbScgd# makelist.sh: Automatically generate header files...
376dc2f1dbScgd
3880a839beSchristosAWK=awk
394fc1f47dSchristosUSAGE="Usage: $0 -h|-fc|-fh|-bh <filenames>"
406dc2f1dbScgd
416dc2f1dbScgdif [ "x$1" = "x" ]
426dc2f1dbScgdthen
436dc2f1dbScgd    echo $USAGE 1>&2
446dc2f1dbScgd    exit 1
456dc2f1dbScgdfi
466dc2f1dbScgd
476dc2f1dbScgdFLAG="$1"
486dc2f1dbScgdshift
496dc2f1dbScgd
506dc2f1dbScgdFILES="$@"
516dc2f1dbScgd
526dc2f1dbScgdcase $FLAG in
5378dc0c22Slukem
546dc2f1dbScgd-h)
55ac2f3dfcScgd    set - `echo $FILES | sed -e 's/\\./_/g'`
56d29e2500Schristos    hdr="_h_`basename $1`"
576dc2f1dbScgd    cat $FILES | $AWK '
586dc2f1dbScgd	BEGIN {
596dc2f1dbScgd	    printf("/* Automatically generated file, do not edit */\n");
606dc2f1dbScgd	    printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'");
616dc2f1dbScgd	}
626dc2f1dbScgd	/\(\):/ {
636dc2f1dbScgd	    pr = substr($2, 1, 2);
646dc2f1dbScgd	    if (pr == "vi" || pr == "em" || pr == "ed") {
656dc2f1dbScgd		name = substr($2, 1, length($2) - 3);
666592086aSlukem#
676592086aSlukem# XXX:	need a space between name and prototype so that -fc and -fh
686592086aSlukem#	parsing is much easier
696592086aSlukem#
70*a2d6b270Schristos		printf("libedit_private el_action_t\t%s (EditLine *, wint_t);\n",
71f54e4f97Schristos		    name);
726dc2f1dbScgd	    }
736dc2f1dbScgd	}
746dc2f1dbScgd	END {
756dc2f1dbScgd	    printf("#endif /* %s */\n", "'$hdr'");
7678dc0c22Slukem	}'
7778dc0c22Slukem	;;
7878dc0c22Slukem
794fc1f47dSchristos#	generate help.h from various .c files
8078dc0c22Slukem#
814fc1f47dSchristos-bh)
826dc2f1dbScgd    cat $FILES | $AWK '
836dc2f1dbScgd	BEGIN {
846dc2f1dbScgd	    printf("/* Automatically generated file, do not edit */\n");
85469d44f8Schristos	    printf("static const struct el_bindings_t el_func_help[] = {\n");
866dc2f1dbScgd	    low = "abcdefghijklmnopqrstuvwxyz_";
876dc2f1dbScgd	    high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_";
886dc2f1dbScgd	    for (i = 1; i <= length(low); i++)
896dc2f1dbScgd		tr[substr(low, i, 1)] = substr(high, i, 1);
906dc2f1dbScgd	}
916dc2f1dbScgd	/\(\):/ {
926dc2f1dbScgd	    pr = substr($2, 1, 2);
936dc2f1dbScgd	    if (pr == "vi" || pr == "em" || pr == "ed") {
946dc2f1dbScgd		name = substr($2, 1, length($2) - 3);
956dc2f1dbScgd		uname = "";
966dc2f1dbScgd		fname = "";
976dc2f1dbScgd		for (i = 1; i <= length(name); i++) {
986dc2f1dbScgd		    s = substr(name, i, 1);
996dc2f1dbScgd		    uname = uname tr[s];
1006dc2f1dbScgd		    if (s == "_")
1016dc2f1dbScgd			s = "-";
1026dc2f1dbScgd		    fname = fname s;
1036dc2f1dbScgd		}
1046dc2f1dbScgd
1050aefc7f9Schristos		printf("    { %-30.30s %-30.30s\n","L\"" fname "\",", uname ",");
1066dc2f1dbScgd		ok = 1;
1076dc2f1dbScgd	    }
1086dc2f1dbScgd	}
1096dc2f1dbScgd	/^ \*/ {
1106dc2f1dbScgd	    if (ok) {
1110aefc7f9Schristos		printf("      L\"");
1126dc2f1dbScgd		for (i = 2; i < NF; i++)
1136dc2f1dbScgd		    printf("%s ", $i);
1140aefc7f9Schristos		printf("%s\" },\n", $i);
1156dc2f1dbScgd		ok = 0;
1166dc2f1dbScgd	    }
1176dc2f1dbScgd	}
1186dc2f1dbScgd	END {
1196dc2f1dbScgd	    printf("};\n");
12078dc0c22Slukem	}'
12178dc0c22Slukem	;;
12278dc0c22Slukem
1236592086aSlukem#	generate fcns.h from various .h files
12478dc0c22Slukem#
1256dc2f1dbScgd-fh)
1266dc2f1dbScgd    cat $FILES | $AWK '/el_action_t/ { print $3 }' | \
12741a71d99Schristos    sort | tr '[:lower:]' '[:upper:]' | $AWK '
1286dc2f1dbScgd	BEGIN {
1296dc2f1dbScgd	    printf("/* Automatically generated file, do not edit */\n");
1306dc2f1dbScgd	    count = 0;
1316dc2f1dbScgd	}
1326dc2f1dbScgd	{
1336dc2f1dbScgd	    printf("#define\t%-30.30s\t%3d\n", $1, count++);
1346dc2f1dbScgd	}
1356dc2f1dbScgd	END {
1366dc2f1dbScgd	    printf("#define\t%-30.30s\t%3d\n", "EL_NUM_FCNS", count);
13778dc0c22Slukem	}'
13878dc0c22Slukem	;;
13978dc0c22Slukem
1404fc1f47dSchristos#	generate func.h from various .h files
14178dc0c22Slukem#
1426dc2f1dbScgd-fc)
1436dc2f1dbScgd    cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK '
1446dc2f1dbScgd	BEGIN {
1456dc2f1dbScgd	    printf("/* Automatically generated file, do not edit */\n");
146469d44f8Schristos	    printf("static const el_func_t el_func[] = {");
1476dc2f1dbScgd	    maxlen = 80;
1486dc2f1dbScgd	    needn = 1;
1496dc2f1dbScgd	    len = 0;
1506dc2f1dbScgd	}
1516dc2f1dbScgd	{
1526dc2f1dbScgd	    clen = 25 + 2;
1536dc2f1dbScgd	    len += clen;
1546dc2f1dbScgd	    if (len >= maxlen)
1556dc2f1dbScgd		needn = 1;
1566dc2f1dbScgd	    if (needn) {
1576dc2f1dbScgd		printf("\n    ");
1586dc2f1dbScgd		needn = 0;
1596dc2f1dbScgd		len = 4 + clen;
1606dc2f1dbScgd	    }
1616dc2f1dbScgd	    s = $1 ",";
1626dc2f1dbScgd	    printf("%-26.26s ", s);
1636dc2f1dbScgd	}
1646dc2f1dbScgd	END {
1656dc2f1dbScgd	    printf("\n};\n");
16678dc0c22Slukem	}'
16778dc0c22Slukem	;;
16878dc0c22Slukem
1696dc2f1dbScgd*)
1706dc2f1dbScgd    echo $USAGE 1>&2
17178dc0c22Slukem    exit 1
17278dc0c22Slukem    ;;
17378dc0c22Slukem
1746dc2f1dbScgdesac
175