158f0484fSRodney W. Grimes#!/bin/sh - 23c195773SDavid E. O'Brien# $FreeBSD$ 3c1a66a97SBaptiste Daroussin# $NetBSD: makelist,v 1.18 2012/03/21 05:34:54 matt Exp $ 458f0484fSRodney W. Grimes# 558f0484fSRodney W. Grimes# Copyright (c) 1992, 1993 658f0484fSRodney W. Grimes# The Regents of the University of California. All rights reserved. 758f0484fSRodney W. Grimes# 858f0484fSRodney W. Grimes# This code is derived from software contributed to Berkeley by 958f0484fSRodney W. Grimes# Christos Zoulas of Cornell University. 1058f0484fSRodney W. Grimes# 1158f0484fSRodney W. Grimes# Redistribution and use in source and binary forms, with or without 1258f0484fSRodney W. Grimes# modification, are permitted provided that the following conditions 1358f0484fSRodney W. Grimes# are met: 1458f0484fSRodney W. Grimes# 1. Redistributions of source code must retain the above copyright 1558f0484fSRodney W. Grimes# notice, this list of conditions and the following disclaimer. 1658f0484fSRodney W. Grimes# 2. Redistributions in binary form must reproduce the above copyright 1758f0484fSRodney W. Grimes# notice, this list of conditions and the following disclaimer in the 1858f0484fSRodney W. Grimes# documentation and/or other materials provided with the distribution. 1976d00450SStefan Farfeleder# 3. Neither the name of the University nor the names of its contributors 2058f0484fSRodney W. Grimes# may be used to endorse or promote products derived from this software 2158f0484fSRodney W. Grimes# without specific prior written permission. 2258f0484fSRodney W. Grimes# 2358f0484fSRodney W. Grimes# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2458f0484fSRodney W. Grimes# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2558f0484fSRodney W. Grimes# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2658f0484fSRodney W. Grimes# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2758f0484fSRodney W. Grimes# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2858f0484fSRodney W. Grimes# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2958f0484fSRodney W. Grimes# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3058f0484fSRodney W. Grimes# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3158f0484fSRodney W. Grimes# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3258f0484fSRodney W. Grimes# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3358f0484fSRodney W. Grimes# SUCH DAMAGE. 3458f0484fSRodney W. Grimes# 3558f0484fSRodney W. Grimes# @(#)makelist 5.3 (Berkeley) 6/4/93 3658f0484fSRodney W. Grimes 3758f0484fSRodney W. Grimes# makelist.sh: Automatically generate header files... 3858f0484fSRodney W. Grimes 3976d00450SStefan FarfelederAWK=awk 40c1a66a97SBaptiste DaroussinUSAGE="Usage: $0 -n|-h|-e|-fc|-fh|-bc|-bh|-m <filenames>" 4158f0484fSRodney W. Grimes 4258f0484fSRodney W. Grimesif [ "x$1" = "x" ] 4358f0484fSRodney W. Grimesthen 4458f0484fSRodney W. Grimes echo $USAGE 1>&2 4558f0484fSRodney W. Grimes exit 1 4658f0484fSRodney W. Grimesfi 4758f0484fSRodney W. Grimes 4858f0484fSRodney W. GrimesFLAG="$1" 4958f0484fSRodney W. Grimesshift 5058f0484fSRodney W. Grimes 5158f0484fSRodney W. GrimesFILES="$@" 5258f0484fSRodney W. Grimes 5358f0484fSRodney W. Grimescase $FLAG in 543c195773SDavid E. O'Brien 553c195773SDavid E. O'Brien# generate foo.h file from foo.c 563c195773SDavid E. O'Brien# 57c1a66a97SBaptiste Daroussin-n) 58c1a66a97SBaptiste Daroussin cat << _EOF 59c1a66a97SBaptiste Daroussin#include "config.h" 60c1a66a97SBaptiste Daroussin#undef WIDECHAR 61c1a66a97SBaptiste Daroussin#define NARROWCHAR 62c1a66a97SBaptiste Daroussin#include "${FILES}" 63c1a66a97SBaptiste Daroussin_EOF 64c1a66a97SBaptiste Daroussin ;; 65c1a66a97SBaptiste Daroussin 6658f0484fSRodney W. Grimes-h) 673c195773SDavid E. O'Brien set - `echo $FILES | sed -e 's/\\./_/g'` 683c195773SDavid E. O'Brien hdr="_h_`basename $1`" 6958f0484fSRodney W. Grimes cat $FILES | $AWK ' 7058f0484fSRodney W. Grimes BEGIN { 7158f0484fSRodney W. Grimes printf("/* Automatically generated file, do not edit */\n"); 7258f0484fSRodney W. Grimes printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'"); 7358f0484fSRodney W. Grimes } 7458f0484fSRodney W. Grimes /\(\):/ { 7558f0484fSRodney W. Grimes pr = substr($2, 1, 2); 7658f0484fSRodney W. Grimes if (pr == "vi" || pr == "em" || pr == "ed") { 7758f0484fSRodney W. Grimes name = substr($2, 1, length($2) - 3); 783c195773SDavid E. O'Brien# 793c195773SDavid E. O'Brien# XXX: need a space between name and prototype so that -fc and -fh 803c195773SDavid E. O'Brien# parsing is much easier 813c195773SDavid E. O'Brien# 82*1f37f0f1SPedro F. Giffuni printf("protected el_action_t\t%s (EditLine *, wint_t);\n", 8358f0484fSRodney W. Grimes name); 8458f0484fSRodney W. Grimes } 8558f0484fSRodney W. Grimes } 8658f0484fSRodney W. Grimes END { 873c195773SDavid E. O'Brien printf("#endif /* %s */\n", "'$hdr'"); 883c195773SDavid E. O'Brien }' 893c195773SDavid E. O'Brien ;; 903c195773SDavid E. O'Brien 913c195773SDavid E. O'Brien# generate help.c from various .c files 9258f0484fSRodney W. Grimes# 9358f0484fSRodney W. Grimes-bc) 9458f0484fSRodney W. Grimes cat $FILES | $AWK ' 9558f0484fSRodney W. Grimes BEGIN { 96c1a66a97SBaptiste Daroussin printf("/* Automatically generated file, do not edit */\n"); 97*1f37f0f1SPedro F. Giffuni printf("#include \"config.h\"\n#include \"el.h\"\n"); 983c195773SDavid E. O'Brien printf("#include \"help.h\"\n"); 9958f0484fSRodney W. Grimes printf("private const struct el_bindings_t el_func_help[] = {\n"); 10058f0484fSRodney W. Grimes low = "abcdefghijklmnopqrstuvwxyz_"; 10158f0484fSRodney W. Grimes high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_"; 10258f0484fSRodney W. Grimes for (i = 1; i <= length(low); i++) 10358f0484fSRodney W. Grimes tr[substr(low, i, 1)] = substr(high, i, 1); 10458f0484fSRodney W. Grimes } 10558f0484fSRodney W. Grimes /\(\):/ { 10658f0484fSRodney W. Grimes pr = substr($2, 1, 2); 10758f0484fSRodney W. Grimes if (pr == "vi" || pr == "em" || pr == "ed") { 10858f0484fSRodney W. Grimes name = substr($2, 1, length($2) - 3); 10958f0484fSRodney W. Grimes uname = ""; 11058f0484fSRodney W. Grimes fname = ""; 11158f0484fSRodney W. Grimes for (i = 1; i <= length(name); i++) { 11258f0484fSRodney W. Grimes s = substr(name, i, 1); 11358f0484fSRodney W. Grimes uname = uname tr[s]; 11458f0484fSRodney W. Grimes if (s == "_") 11558f0484fSRodney W. Grimes s = "-"; 11658f0484fSRodney W. Grimes fname = fname s; 11758f0484fSRodney W. Grimes } 118c1a66a97SBaptiste Daroussin 11958f0484fSRodney W. Grimes printf(" { %-30.30s %-30.30s\n","STR(\"" fname "\"),", uname ","); 12058f0484fSRodney W. Grimes ok = 1; 12158f0484fSRodney W. Grimes } 12258f0484fSRodney W. Grimes } 12358f0484fSRodney W. Grimes /^ \*/ { 124c1a66a97SBaptiste Daroussin if (ok) { 12558f0484fSRodney W. Grimes printf(" STR(\""); 12658f0484fSRodney W. Grimes for (i = 2; i < NF; i++) 127c1a66a97SBaptiste Daroussin printf("%s ", $i); 12858f0484fSRodney W. Grimes printf("%s\") },\n", $i); 12958f0484fSRodney W. Grimes ok = 0; 13058f0484fSRodney W. Grimes } 13158f0484fSRodney W. Grimes } 13258f0484fSRodney W. Grimes END { 133c1a66a97SBaptiste Daroussin printf("};\n"); 13458f0484fSRodney W. Grimes printf("\nprotected const el_bindings_t* help__get(void)"); 1353c195773SDavid E. O'Brien printf("{ return el_func_help; }\n"); 1363c195773SDavid E. O'Brien }' 1373c195773SDavid E. O'Brien ;; 1383c195773SDavid E. O'Brien 1393c195773SDavid E. O'Brien# generate help.h from various .c files 14058f0484fSRodney W. Grimes# 14158f0484fSRodney W. Grimes-bh) 14258f0484fSRodney W. Grimes $AWK ' 14358f0484fSRodney W. Grimes BEGIN { 14458f0484fSRodney W. Grimes printf("/* Automatically generated file, do not edit */\n"); 1453c195773SDavid E. O'Brien printf("#ifndef _h_help_c\n#define _h_help_c\n"); 14658f0484fSRodney W. Grimes printf("protected const el_bindings_t *help__get(void);\n"); 1473c195773SDavid E. O'Brien printf("#endif /* _h_help_c */\n"); 1483c195773SDavid E. O'Brien }' /dev/null 1493c195773SDavid E. O'Brien ;; 1503c195773SDavid E. O'Brien 1513c195773SDavid E. O'Brien# generate fcns.h from various .h files 15258f0484fSRodney W. Grimes# 15358f0484fSRodney W. Grimes-fh) 154c1a66a97SBaptiste Daroussin cat $FILES | $AWK '/el_action_t/ { print $3 }' | \ 15558f0484fSRodney W. Grimes sort | tr '[:lower:]' '[:upper:]' | $AWK ' 15658f0484fSRodney W. Grimes BEGIN { 15758f0484fSRodney W. Grimes printf("/* Automatically generated file, do not edit */\n"); 15858f0484fSRodney W. Grimes printf("#ifndef _h_fcns_c\n#define _h_fcns_c\n"); 15958f0484fSRodney W. Grimes count = 0; 16058f0484fSRodney W. Grimes } 16158f0484fSRodney W. Grimes { 16258f0484fSRodney W. Grimes printf("#define\t%-30.30s\t%3d\n", $1, count++); 16358f0484fSRodney W. Grimes } 16458f0484fSRodney W. Grimes END { 16558f0484fSRodney W. Grimes printf("#define\t%-30.30s\t%3d\n", "EL_NUM_FCNS", count); 166*1f37f0f1SPedro F. Giffuni 1673c195773SDavid E. O'Brien printf("typedef el_action_t (*el_func_t)(EditLine *, wint_t);"); 16858f0484fSRodney W. Grimes printf("\nprotected const el_func_t* func__get(void);\n"); 1693c195773SDavid E. O'Brien printf("#endif /* _h_fcns_c */\n"); 1703c195773SDavid E. O'Brien }' 1713c195773SDavid E. O'Brien ;; 1723c195773SDavid E. O'Brien 1733c195773SDavid E. O'Brien# generate fcns.c from various .h files 17458f0484fSRodney W. Grimes# 17558f0484fSRodney W. Grimes-fc) 17658f0484fSRodney W. Grimes cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK ' 17758f0484fSRodney W. Grimes BEGIN { 178c1a66a97SBaptiste Daroussin printf("/* Automatically generated file, do not edit */\n"); 1793c195773SDavid E. O'Brien printf("#include \"config.h\"\n#include \"el.h\"\n"); 18058f0484fSRodney W. Grimes printf("#include \"common.h\"\n"); 18158f0484fSRodney W. Grimes printf("#include \"emacs.h\"\n"); 18258f0484fSRodney W. Grimes printf("#include \"vi.h\"\n"); 18358f0484fSRodney W. Grimes printf("private const el_func_t el_func[] = {"); 18458f0484fSRodney W. Grimes maxlen = 80; 18558f0484fSRodney W. Grimes needn = 1; 18658f0484fSRodney W. Grimes len = 0; 18758f0484fSRodney W. Grimes } 18858f0484fSRodney W. Grimes { 18958f0484fSRodney W. Grimes clen = 25 + 2; 19058f0484fSRodney W. Grimes len += clen; 19158f0484fSRodney W. Grimes if (len >= maxlen) 19258f0484fSRodney W. Grimes needn = 1; 19358f0484fSRodney W. Grimes if (needn) { 19458f0484fSRodney W. Grimes printf("\n "); 19558f0484fSRodney W. Grimes needn = 0; 19658f0484fSRodney W. Grimes len = 4 + clen; 19758f0484fSRodney W. Grimes } 19858f0484fSRodney W. Grimes s = $1 ","; 199c1a66a97SBaptiste Daroussin printf("%-26.26s ", s); 2003c195773SDavid E. O'Brien } 2013c195773SDavid E. O'Brien END { 2023c195773SDavid E. O'Brien printf("\n};\n"); 2033c195773SDavid E. O'Brien printf("\nprotected const el_func_t* func__get(void) { return el_func; }\n"); 2043c195773SDavid E. O'Brien }' 20558f0484fSRodney W. Grimes ;; 20658f0484fSRodney W. Grimes 20758f0484fSRodney W. Grimes# generate editline.c from various .c files 20858f0484fSRodney W. Grimes# 20958f0484fSRodney W. Grimes-e) 21058f0484fSRodney W. Grimes echo "$FILES" | tr ' ' '\012' | $AWK ' 21158f0484fSRodney W. Grimes BEGIN { 21258f0484fSRodney W. Grimes printf("/* Automatically generated file, do not edit */\n"); 21358f0484fSRodney W. Grimes printf("#define protected static\n"); 2143c195773SDavid E. O'Brien printf("#define SCCSID\n"); 2153c195773SDavid E. O'Brien } 2163c195773SDavid E. O'Brien { 2173c195773SDavid E. O'Brien printf("#include \"%s\"\n", $1); 2183c195773SDavid E. O'Brien }' 2193c195773SDavid E. O'Brien ;; 2203c195773SDavid E. O'Brien 2213c195773SDavid E. O'Brien# generate man page fragment from various .c files 2223c195773SDavid E. O'Brien# 2233c195773SDavid E. O'Brien-m) 2243c195773SDavid E. O'Brien cat $FILES | $AWK ' 2253c195773SDavid E. O'Brien BEGIN { 2263c195773SDavid E. O'Brien printf(".\\\" Section automatically generated with makelist\n"); 2273c195773SDavid E. O'Brien printf(".Bl -tag -width 4n\n"); 2283c195773SDavid E. O'Brien } 2293c195773SDavid E. O'Brien /\(\):/ { 2303c195773SDavid E. O'Brien pr = substr($2, 1, 2); 2313c195773SDavid E. O'Brien if (pr == "vi" || pr == "em" || pr == "ed") { 2323c195773SDavid E. O'Brien name = substr($2, 1, length($2) - 3); 2333c195773SDavid E. O'Brien fname = ""; 2343c195773SDavid E. O'Brien for (i = 1; i <= length(name); i++) { 2353c195773SDavid E. O'Brien s = substr(name, i, 1); 2363c195773SDavid E. O'Brien if (s == "_") 2373c195773SDavid E. O'Brien s = "-"; 2383c195773SDavid E. O'Brien fname = fname s; 2393c195773SDavid E. O'Brien } 2403c195773SDavid E. O'Brien 2413c195773SDavid E. O'Brien printf(".It Ic %s\n", fname); 2423c195773SDavid E. O'Brien ok = 1; 2433c195773SDavid E. O'Brien } 2443c195773SDavid E. O'Brien } 2453c195773SDavid E. O'Brien /^ \*/ { 2463c195773SDavid E. O'Brien if (ok) { 2473c195773SDavid E. O'Brien for (i = 2; i < NF; i++) 2483c195773SDavid E. O'Brien printf("%s ", $i); 2493c195773SDavid E. O'Brien printf("%s.\n", $i); 2503c195773SDavid E. O'Brien ok = 0; 2513c195773SDavid E. O'Brien } 2523c195773SDavid E. O'Brien } 2533c195773SDavid E. O'Brien END { 2543c195773SDavid E. O'Brien printf(".El\n"); 25558f0484fSRodney W. Grimes printf(".\\\" End of section automatically generated with makelist\n"); 25658f0484fSRodney W. Grimes }' 2573c195773SDavid E. O'Brien ;; 2583c195773SDavid E. O'Brien 2593c195773SDavid E. O'Brien*) 26058f0484fSRodney W. Grimes echo $USAGE 1>&2 261 exit 1 262 ;; 263 264esac 265