Home | History | Annotate | Line # | Download | only in libterminfo
      1  1.1       roy #!/bin/sh
      2  1.9       roy # $NetBSD: genhash,v 1.9 2017/01/11 20:53:52 roy Exp $
      3  1.1       roy 
      4  1.8       roy # Copyright (c) 2009, 2011 The NetBSD Foundation, Inc.
      5  1.1       roy #
      6  1.1       roy # This code is derived from software contributed to The NetBSD Foundation
      7  1.1       roy # by Roy Marples.
      8  1.1       roy #
      9  1.1       roy # Redistribution and use in source and binary forms, with or without
     10  1.1       roy # modification, are permitted provided that the following conditions
     11  1.1       roy # are met:
     12  1.1       roy # 1. Redistributions of source code must retain the above copyright
     13  1.1       roy #    notice, this list of conditions and the following disclaimer.
     14  1.1       roy # 2. Redistributions in binary form must reproduce the above copyright
     15  1.1       roy #    notice, this list of conditions and the following disclaimer in the
     16  1.1       roy #    documentation and/or other materials provided with the distribution.
     17  1.1       roy #
     18  1.1       roy # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19  1.1       roy # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  1.1       roy # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21  1.1       roy # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  1.1       roy # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23  1.1       roy # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24  1.1       roy # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25  1.1       roy # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  1.1       roy # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27  1.1       roy # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  1.1       roy 
     29  1.1       roy 
     30  1.1       roy # Generate string and hash tables for our terminfo strings in term.h
     31  1.1       roy # We don't expose the hash or tables directly, but instead via functions.
     32  1.2       snj # This allows us to freely change how we hash or store our string tables
     33  1.1       roy # in the future.
     34  1.1       roy 
     35  1.6       roy set -e
     36  1.1       roy : ${TOOL_AWK:=awk}
     37  1.1       roy : ${TOOL_NBPERF:=nbperf}
     38  1.1       roy : ${TOOL_SED:=sed}
     39  1.1       roy 
     40  1.1       roy TERMH=${1:-term.h}
     41  1.1       roy 
     42  1.1       roy genent()
     43  1.1       roy {
     44  1.1       roy 	local name=$1 NAME=$2 len=
     45  1.1       roy 
     46  1.1       roy 	# Calculate the maximum word length plus terminator
     47  1.7  christos 	len=$($TOOL_SED -e "1,/enum TI${NAME}/d" -e '/};/,$d' \
     48  1.1       roy             -e 's/.*TICODE_\([^,]*\).*/\1X/' $TERMH | \
     49  1.7  christos 	    $TOOL_AWK \
     50  1.7  christos 	    'BEGIN {L=0} {if (length($1)>L) L=length($1)} END {print L}')
     51  1.1       roy 
     52  1.1       roy 	echo
     53  1.1       roy 	echo "static const char _ti_${name}ids[][${len}] = {"
     54  1.1       roy 	$TOOL_SED -e "1,/enum TI${NAME}/d" -e '/};/,$d' \
     55  1.1       roy             -e 's/.*TICODE_\([^,]*\).*/	"\1",/' $TERMH
     56  1.1       roy 	echo "};"
     57  1.1       roy 	echo
     58  1.1       roy 	$TOOL_SED -e "1,/enum TI${NAME}/d" -e '/};/,$d' \
     59  1.1       roy 	    -e 's/.*TICODE_\([^,]*\).*/\1/' $TERMH | \
     60  1.8       roy 	    $TOOL_NBPERF -p -s -n _ti_${name}hash;
     61  1.1       roy 
     62  1.1       roy 	cat <<EOF
     63  1.1       roy 
     64  1.1       roy const char *
     65  1.1       roy _ti_${name}id(ssize_t idx)
     66  1.1       roy {
     67  1.1       roy 
     68  1.9       roy 	if ((size_t)idx >= __arraycount(_ti_${name}ids))
     69  1.1       roy 		return NULL;
     70  1.1       roy 	return _ti_${name}ids[idx];
     71  1.1       roy }
     72  1.1       roy 
     73  1.1       roy ssize_t
     74  1.1       roy _ti_${name}index(const char *key)
     75  1.1       roy {
     76  1.1       roy 	uint32_t idx;
     77  1.1       roy 
     78  1.1       roy 	idx = _ti_${name}hash((const unsigned char *)key, strlen(key));
     79  1.9       roy 	if (idx >= __arraycount(_ti_${name}ids) ||
     80  1.1       roy 	    strcmp(key, _ti_${name}ids[idx]) != 0)
     81  1.1       roy 		return -1;
     82  1.1       roy 	return idx;
     83  1.1       roy }
     84  1.1       roy EOF
     85  1.1       roy }
     86  1.1       roy 
     87  1.1       roy cat <<EOF
     88  1.1       roy /* DO NOT EDIT
     89  1.1       roy  * Automatically generated from term.h */
     90  1.1       roy 
     91  1.5       roy #if HAVE_NBTOOL_CONFIG_H
     92  1.5       roy #include "nbtool_config.h"
     93  1.5       roy #endif
     94  1.5       roy 
     95  1.4       roy #include <stdint.h>
     96  1.1       roy #include <stdlib.h>
     97  1.1       roy #include <string.h>
     98  1.1       roy #include <term_private.h>
     99  1.1       roy #include <term.h>
    100  1.1       roy EOF
    101  1.1       roy 
    102  1.1       roy genent flag FLAG
    103  1.1       roy genent num NUM
    104  1.1       roy genent str STR
    105