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