Home | History | Annotate | Line # | Download | only in libterminfo
genhash revision 1.8.24.1
      1       1.1       roy #!/bin/sh
      2  1.8.24.1  pgoyette # $NetBSD: genhash,v 1.8.24.1 2017/03/20 06:57:00 pgoyette 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.8.24.1  pgoyette 	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.8.24.1  pgoyette 	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