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