Home | History | Annotate | Line # | Download | only in libedit
makelist revision 1.17.2.1
      1       1.1       cgd #!/bin/sh -
      2  1.17.2.1      yamt #	$NetBSD: makelist,v 1.17.2.1 2012/04/17 00:05:27 yamt Exp $
      3       1.1       cgd #
      4       1.1       cgd # Copyright (c) 1992, 1993
      5       1.1       cgd #	The Regents of the University of California.  All rights reserved.
      6       1.1       cgd #
      7       1.1       cgd # This code is derived from software contributed to Berkeley by
      8       1.1       cgd # Christos Zoulas of Cornell University.
      9       1.1       cgd #
     10       1.1       cgd # Redistribution and use in source and binary forms, with or without
     11       1.1       cgd # modification, are permitted provided that the following conditions
     12       1.1       cgd # are met:
     13       1.1       cgd # 1. Redistributions of source code must retain the above copyright
     14       1.1       cgd #    notice, this list of conditions and the following disclaimer.
     15       1.1       cgd # 2. Redistributions in binary form must reproduce the above copyright
     16       1.1       cgd #    notice, this list of conditions and the following disclaimer in the
     17       1.1       cgd #    documentation and/or other materials provided with the distribution.
     18       1.9     lukem # 3. Neither the name of the University nor the names of its contributors
     19       1.1       cgd #    may be used to endorse or promote products derived from this software
     20       1.1       cgd #    without specific prior written permission.
     21       1.1       cgd #
     22       1.1       cgd # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     23       1.1       cgd # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     24       1.1       cgd # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     25       1.1       cgd # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     26       1.1       cgd # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     27       1.1       cgd # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     28       1.1       cgd # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     29       1.1       cgd # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     30       1.1       cgd # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31       1.1       cgd # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32       1.1       cgd # SUCH DAMAGE.
     33       1.1       cgd #
     34       1.1       cgd #	@(#)makelist	5.3 (Berkeley) 6/4/93
     35       1.1       cgd 
     36       1.1       cgd # makelist.sh: Automatically generate header files...
     37       1.1       cgd 
     38       1.8  christos AWK=awk
     39      1.14  christos USAGE="Usage: $0 -n|-h|-e|-fc|-fh|-bc|-bh|-m <filenames>"
     40       1.1       cgd 
     41       1.1       cgd if [ "x$1" = "x" ]
     42       1.1       cgd then
     43       1.1       cgd     echo $USAGE 1>&2
     44       1.1       cgd     exit 1
     45       1.1       cgd fi
     46       1.1       cgd 
     47       1.1       cgd FLAG="$1"
     48       1.1       cgd shift
     49       1.1       cgd 
     50       1.1       cgd FILES="$@"
     51       1.1       cgd 
     52       1.1       cgd case $FLAG in
     53       1.5     lukem 
     54       1.5     lukem #	generate foo.h file from foo.c
     55       1.5     lukem #
     56      1.14  christos -n)
     57      1.13  christos     cat << _EOF
     58      1.17  christos #include "config.h"
     59      1.14  christos #undef WIDECHAR
     60      1.14  christos #define NARROWCHAR
     61      1.14  christos #include "${FILES}"
     62      1.13  christos _EOF
     63      1.13  christos     ;;
     64      1.13  christos     
     65       1.1       cgd -h)
     66       1.2       cgd     set - `echo $FILES | sed -e 's/\\./_/g'`
     67      1.16  christos     hdr="_h_`basename $1`"
     68       1.1       cgd     cat $FILES | $AWK '
     69       1.1       cgd 	BEGIN {
     70       1.1       cgd 	    printf("/* Automatically generated file, do not edit */\n");
     71       1.1       cgd 	    printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'");
     72       1.1       cgd 	}
     73       1.1       cgd 	/\(\):/ {
     74       1.1       cgd 	    pr = substr($2, 1, 2);
     75       1.1       cgd 	    if (pr == "vi" || pr == "em" || pr == "ed") {
     76       1.1       cgd 		name = substr($2, 1, length($2) - 3);
     77       1.6     lukem #
     78       1.6     lukem # XXX:	need a space between name and prototype so that -fc and -fh
     79       1.6     lukem #	parsing is much easier
     80       1.6     lukem #
     81      1.15  christos 		printf("protected el_action_t\t%s (EditLine *, Int);\n", name);
     82       1.1       cgd 	    }
     83       1.1       cgd 	}
     84       1.1       cgd 	END {
     85       1.1       cgd 	    printf("#endif /* %s */\n", "'$hdr'");
     86       1.5     lukem 	}'
     87       1.5     lukem 	;;
     88       1.5     lukem 
     89       1.5     lukem #	generate help.c from various .c files
     90       1.5     lukem #
     91       1.1       cgd -bc)
     92       1.1       cgd     cat $FILES | $AWK '
     93       1.1       cgd 	BEGIN {
     94       1.1       cgd 	    printf("/* Automatically generated file, do not edit */\n");
     95      1.12    sketch 	    printf("#include \"config.h\"\n#include \"el.h\"\n");
     96      1.13  christos 	    printf("#include \"chartype.h\"\n");
     97       1.7  jdolecek 	    printf("private const struct el_bindings_t el_func_help[] = {\n");
     98       1.1       cgd 	    low = "abcdefghijklmnopqrstuvwxyz_";
     99       1.1       cgd 	    high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_";
    100       1.1       cgd 	    for (i = 1; i <= length(low); i++)
    101       1.1       cgd 		tr[substr(low, i, 1)] = substr(high, i, 1);
    102       1.1       cgd 	}
    103       1.1       cgd 	/\(\):/ {
    104       1.1       cgd 	    pr = substr($2, 1, 2);
    105       1.1       cgd 	    if (pr == "vi" || pr == "em" || pr == "ed") {
    106       1.1       cgd 		name = substr($2, 1, length($2) - 3);
    107       1.1       cgd 		uname = "";
    108       1.1       cgd 		fname = "";
    109       1.1       cgd 		for (i = 1; i <= length(name); i++) {
    110       1.1       cgd 		    s = substr(name, i, 1);
    111       1.1       cgd 		    uname = uname tr[s];
    112       1.1       cgd 		    if (s == "_")
    113       1.1       cgd 			s = "-";
    114       1.1       cgd 		    fname = fname s;
    115       1.1       cgd 		}
    116       1.4    simonb 
    117      1.13  christos 		printf("    { %-30.30s %-30.30s\n","STR(\"" fname "\"),", uname ",");
    118       1.4    simonb 		ok = 1;
    119       1.1       cgd 	    }
    120       1.1       cgd 	}
    121       1.1       cgd 	/^ \*/ {
    122       1.1       cgd 	    if (ok) {
    123      1.13  christos 		printf("      STR(\"");
    124       1.1       cgd 		for (i = 2; i < NF; i++)
    125       1.1       cgd 		    printf("%s ", $i);
    126      1.13  christos 		printf("%s\") },\n", $i);
    127       1.1       cgd 		ok = 0;
    128       1.1       cgd 	    }
    129       1.1       cgd 	}
    130       1.1       cgd 	END {
    131       1.1       cgd 	    printf("};\n");
    132  1.17.2.1      yamt 	    printf("\nprotected const el_bindings_t* help__get(void)");
    133       1.1       cgd 	    printf("{ return el_func_help; }\n");
    134       1.5     lukem 	}'
    135       1.5     lukem 	;;
    136       1.5     lukem 
    137       1.5     lukem #	generate help.h from various .c files
    138       1.5     lukem #
    139       1.1       cgd -bh)
    140       1.1       cgd     $AWK '
    141       1.4    simonb 	BEGIN {
    142       1.1       cgd 	    printf("/* Automatically generated file, do not edit */\n");
    143       1.1       cgd 	    printf("#ifndef _h_help_c\n#define _h_help_c\n");
    144       1.7  jdolecek 	    printf("protected const el_bindings_t *help__get(void);\n");
    145       1.1       cgd 	    printf("#endif /* _h_help_c */\n");
    146       1.5     lukem 	}' /dev/null
    147       1.5     lukem 	;;
    148       1.5     lukem 
    149       1.6     lukem #	generate fcns.h from various .h files
    150       1.5     lukem #
    151       1.1       cgd -fh)
    152       1.1       cgd     cat $FILES | $AWK '/el_action_t/ { print $3 }' | \
    153      1.11  christos     sort | tr '[:lower:]' '[:upper:]' | $AWK '
    154       1.4    simonb 	BEGIN {
    155       1.1       cgd 	    printf("/* Automatically generated file, do not edit */\n");
    156       1.1       cgd 	    printf("#ifndef _h_fcns_c\n#define _h_fcns_c\n");
    157       1.4    simonb 	    count = 0;
    158       1.1       cgd 	}
    159       1.4    simonb 	{
    160       1.1       cgd 	    printf("#define\t%-30.30s\t%3d\n", $1, count++);
    161       1.1       cgd 	}
    162       1.1       cgd 	END {
    163       1.1       cgd 	    printf("#define\t%-30.30s\t%3d\n", "EL_NUM_FCNS", count);
    164       1.1       cgd 
    165      1.15  christos 	    printf("typedef el_action_t (*el_func_t)(EditLine *, Int);");
    166       1.7  jdolecek 	    printf("\nprotected const el_func_t* func__get(void);\n");
    167       1.1       cgd 	    printf("#endif /* _h_fcns_c */\n");
    168       1.5     lukem 	}'
    169       1.5     lukem 	;;
    170       1.5     lukem 
    171       1.6     lukem #	generate fcns.c from various .h files
    172       1.5     lukem #
    173       1.1       cgd -fc)
    174       1.1       cgd     cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK '
    175       1.1       cgd 	BEGIN {
    176       1.1       cgd 	    printf("/* Automatically generated file, do not edit */\n");
    177      1.12    sketch 	    printf("#include \"config.h\"\n#include \"el.h\"\n");
    178       1.7  jdolecek 	    printf("private const el_func_t el_func[] = {");
    179       1.1       cgd 	    maxlen = 80;
    180       1.1       cgd 	    needn = 1;
    181       1.1       cgd 	    len = 0;
    182       1.1       cgd 	}
    183       1.1       cgd 	{
    184       1.1       cgd 	    clen = 25 + 2;
    185       1.1       cgd 	    len += clen;
    186       1.4    simonb 	    if (len >= maxlen)
    187       1.1       cgd 		needn = 1;
    188       1.1       cgd 	    if (needn) {
    189       1.1       cgd 		printf("\n    ");
    190       1.1       cgd 		needn = 0;
    191       1.1       cgd 		len = 4 + clen;
    192       1.1       cgd 	    }
    193       1.1       cgd 	    s = $1 ",";
    194       1.1       cgd 	    printf("%-26.26s ", s);
    195       1.1       cgd 	}
    196       1.1       cgd 	END {
    197       1.1       cgd 	    printf("\n};\n");
    198  1.17.2.1      yamt 	    printf("\nprotected const el_func_t* func__get(void) { return el_func; }\n");
    199       1.5     lukem 	}'
    200       1.5     lukem 	;;
    201       1.5     lukem 
    202       1.5     lukem #	generate editline.c from various .c files
    203       1.5     lukem #
    204       1.1       cgd -e)
    205       1.1       cgd 	echo "$FILES" | tr ' ' '\012' | $AWK '
    206       1.1       cgd 	BEGIN {
    207       1.1       cgd 	    printf("/* Automatically generated file, do not edit */\n");
    208       1.1       cgd 	    printf("#define protected static\n");
    209       1.1       cgd 	    printf("#define SCCSID\n");
    210       1.1       cgd 	}
    211       1.1       cgd 	{
    212       1.1       cgd 	    printf("#include \"%s\"\n", $1);
    213       1.5     lukem 	}'
    214       1.5     lukem 	;;
    215       1.5     lukem 
    216       1.5     lukem #	generate man page fragment from various .c files
    217       1.5     lukem #
    218       1.5     lukem -m)
    219       1.5     lukem     cat $FILES | $AWK '
    220       1.5     lukem 	BEGIN {
    221       1.5     lukem 	    printf(".\\\" Section automatically generated with makelist\n");
    222       1.5     lukem 	    printf(".Bl -tag -width 4n\n");
    223       1.5     lukem 	}
    224       1.5     lukem 	/\(\):/ {
    225       1.5     lukem 	    pr = substr($2, 1, 2);
    226       1.5     lukem 	    if (pr == "vi" || pr == "em" || pr == "ed") {
    227       1.5     lukem 		name = substr($2, 1, length($2) - 3);
    228       1.5     lukem 		fname = "";
    229       1.5     lukem 		for (i = 1; i <= length(name); i++) {
    230       1.5     lukem 		    s = substr(name, i, 1);
    231       1.5     lukem 		    if (s == "_")
    232       1.5     lukem 			s = "-";
    233       1.5     lukem 		    fname = fname s;
    234       1.5     lukem 		}
    235       1.5     lukem 
    236       1.5     lukem 		printf(".It Ic %s\n", fname);
    237       1.5     lukem 		ok = 1;
    238       1.5     lukem 	    }
    239       1.5     lukem 	}
    240       1.5     lukem 	/^ \*/ {
    241       1.5     lukem 	    if (ok) {
    242       1.5     lukem 		for (i = 2; i < NF; i++)
    243       1.5     lukem 		    printf("%s ", $i);
    244       1.5     lukem 		printf("%s.\n", $i);
    245       1.5     lukem 		ok = 0;
    246       1.5     lukem 	    }
    247       1.5     lukem 	}
    248       1.5     lukem 	END {
    249       1.5     lukem 	    printf(".El\n");
    250       1.5     lukem 	    printf(".\\\" End of section automatically generated with makelist\n");
    251       1.5     lukem 	}'
    252       1.5     lukem 	;;
    253       1.5     lukem 
    254       1.1       cgd *)
    255       1.1       cgd     echo $USAGE 1>&2
    256       1.5     lukem     exit 1
    257       1.5     lukem     ;;
    258       1.5     lukem 
    259       1.1       cgd esac
    260