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