1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4*34f9b3eeSRoland Mainz# Copyright (c) 1986-2009 AT&T Intellectual Property # 5da2e3ebdSchin# and is licensed under the # 6da2e3ebdSchin# Common Public License, Version 1.0 # 77c2fbfb3SApril Chin# by AT&T Intellectual Property # 8da2e3ebdSchin# # 9da2e3ebdSchin# A copy of the License is available at # 10da2e3ebdSchin# http://www.opensource.org/licenses/cpl1.0.txt # 11da2e3ebdSchin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 12da2e3ebdSchin# # 13da2e3ebdSchin# Information and Software Systems Research # 14da2e3ebdSchin# AT&T Research # 15da2e3ebdSchin# Florham Park NJ # 16da2e3ebdSchin# # 17da2e3ebdSchin# Glenn Fowler <gsf@research.att.com> # 18da2e3ebdSchin# # 19da2e3ebdSchin######################################################################## 20da2e3ebdSchin: 21da2e3ebdSchin# Glenn Fowler 22da2e3ebdSchin# AT&T Bell Laboratories 23da2e3ebdSchin# 24da2e3ebdSchin# @(#)gentab (gsf@research.att.com) 07/17/94 25da2e3ebdSchin# 26da2e3ebdSchin# C table generator 27da2e3ebdSchin# 28da2e3ebdSchin# %flags [ prefix=<prefix> ] [ index=<index> ] [ init=<init> ] 29da2e3ebdSchin# 30da2e3ebdSchin# %keyword <name> [ prefix=<prefix> ] [ index=<index> ] [ init=<init> ] [ first=<id> ] [ last=<id> ] 31da2e3ebdSchin# 32da2e3ebdSchin# %sequence [ prefix=<prefix> ] [ index=<index> ] [ init=<init> ] 33da2e3ebdSchin# 34da2e3ebdSchin 35da2e3ebdSchincase `(typeset -u s=a n=0; ((n=n+1)); print $s$n) 2>/dev/null` in 36da2e3ebdSchinA1) shell=ksh 37da2e3ebdSchin typeset -u ID 38da2e3ebdSchin typeset -i counter err_line 39da2e3ebdSchin ;; 40da2e3ebdSchin*) shell=bsh 41da2e3ebdSchin ;; 42da2e3ebdSchinesac 43da2e3ebdSchincommand=$0 44da2e3ebdSchincounter=0 45da2e3ebdSchindefine=1 46da2e3ebdSchinerr_line=0 47da2e3ebdSchintype="" 48da2e3ebdSchinindex="" 49da2e3ebdSchinfirst="" 50da2e3ebdSchinlast="" 51da2e3ebdSchintable=1 52da2e3ebdSchinwhile : 53da2e3ebdSchindo case $1 in 54da2e3ebdSchin -d) table=0 ;; 55da2e3ebdSchin -t) define=0 ;; 56da2e3ebdSchin *) break ;; 57da2e3ebdSchin esac 58da2e3ebdSchin shift 59da2e3ebdSchindone 60da2e3ebdSchincase $1 in 61da2e3ebdSchin"") err_file="" 62da2e3ebdSchin ;; 63da2e3ebdSchin*) exec <$1 64da2e3ebdSchin err_file="\"$1\", " 65da2e3ebdSchin ;; 66da2e3ebdSchinesac 67da2e3ebdSchinwhile read line 68da2e3ebdSchindo case $shell in 69da2e3ebdSchin ksh) ((err_line=err_line+1)) ;; 70da2e3ebdSchin *) err_line=`expr $err_line + 1` ;; 71da2e3ebdSchin esac 72da2e3ebdSchin set '' $line 73da2e3ebdSchin shift 74da2e3ebdSchin case $1 in 75da2e3ebdSchin [#]*) echo "/*" 76da2e3ebdSchin while : 77da2e3ebdSchin do case $1 in 78da2e3ebdSchin [#]*) shift 79da2e3ebdSchin echo " * $*" 80da2e3ebdSchin read line 81da2e3ebdSchin set '' $line 82da2e3ebdSchin shift 83da2e3ebdSchin ;; 84da2e3ebdSchin *) break 85da2e3ebdSchin ;; 86da2e3ebdSchin esac 87da2e3ebdSchin done 88da2e3ebdSchin echo " */" 89da2e3ebdSchin echo 90da2e3ebdSchin ;; 91da2e3ebdSchin esac 92da2e3ebdSchin eval set '""' $line 93da2e3ebdSchin shift 94da2e3ebdSchin case $1 in 95da2e3ebdSchin "") ;; 96da2e3ebdSchin %flags|%keywords|%sequence) 97da2e3ebdSchin case $define:$last in 98da2e3ebdSchin 1:?*) case $shell in 99da2e3ebdSchin ksh) ((n=counter-1)) ;; 100da2e3ebdSchin *) n=`expr $counter - 1` ;; 101da2e3ebdSchin esac 102da2e3ebdSchin echo "#define $prefix$last $n" 103da2e3ebdSchin ;; 104da2e3ebdSchin esac 105da2e3ebdSchin case $type in 106da2e3ebdSchin %flags|%sequence) 107da2e3ebdSchin if test $define = 1 108da2e3ebdSchin then echo 109da2e3ebdSchin fi 110da2e3ebdSchin ;; 111da2e3ebdSchin %keywords) 112da2e3ebdSchin if test $table = 1 113da2e3ebdSchin then echo " 0, 0" 114da2e3ebdSchin echo "};" 115da2e3ebdSchin echo 116da2e3ebdSchin elif test $define = 1 117da2e3ebdSchin then echo 118da2e3ebdSchin fi 119da2e3ebdSchin ;; 120da2e3ebdSchin esac 121da2e3ebdSchin case $index in 122da2e3ebdSchin ?*) eval $index=$counter ;; 123da2e3ebdSchin esac 124da2e3ebdSchin type=$1 125da2e3ebdSchin shift 126da2e3ebdSchin name="" 127da2e3ebdSchin prefix="" 128da2e3ebdSchin index="" 129da2e3ebdSchin init="" 130da2e3ebdSchin first="" 131da2e3ebdSchin last="" 132da2e3ebdSchin case $type in 133da2e3ebdSchin %keywords) 134da2e3ebdSchin case $1 in 135da2e3ebdSchin "") echo "$command: ${err_file}line $err_line: $type table name omitted" >&2 136da2e3ebdSchin exit 1 137da2e3ebdSchin ;; 138da2e3ebdSchin esac 139da2e3ebdSchin name=$1 140da2e3ebdSchin shift 141da2e3ebdSchin if test $table = 1 142da2e3ebdSchin then echo "$name"'[] =' 143da2e3ebdSchin echo "{" 144da2e3ebdSchin fi 145da2e3ebdSchin ;; 146da2e3ebdSchin esac 147da2e3ebdSchin eval "$@" 148da2e3ebdSchin case $init in 149da2e3ebdSchin "") case $type in 150da2e3ebdSchin %flags|%sequence) 151da2e3ebdSchin init=0 152da2e3ebdSchin ;; 153da2e3ebdSchin *) init=1 154da2e3ebdSchin ;; 155da2e3ebdSchin esac 156da2e3ebdSchin ;; 157da2e3ebdSchin esac 158da2e3ebdSchin case $index in 159da2e3ebdSchin "") counter=$init 160da2e3ebdSchin ;; 161da2e3ebdSchin *) eval value=\$$index 162da2e3ebdSchin case $value in 163da2e3ebdSchin "") counter=$init ;; 164da2e3ebdSchin [0123456789]*) counter=$value ;; 165da2e3ebdSchin esac 166da2e3ebdSchin ;; 167da2e3ebdSchin esac 168da2e3ebdSchin case $define:$first in 169da2e3ebdSchin 1:?*) echo "#define $prefix$first $counter" ;; 170da2e3ebdSchin esac 171da2e3ebdSchin ;; 172da2e3ebdSchin %*) echo "$command: ${err_file}line $err_line: $1: unknown keyword" >&2 173da2e3ebdSchin exit 1 174da2e3ebdSchin ;; 175da2e3ebdSchin *) while : 176da2e3ebdSchin do case $1 in 177da2e3ebdSchin "") break 178da2e3ebdSchin ;; 179da2e3ebdSchin *) case $shell in 180da2e3ebdSchin ksh) ID=${1#[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]} ;; 181da2e3ebdSchin *) ID=`echo $1 | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | sed 's/^[^ABCDEFGHIJKLMNOPQRSTUVWXYZ_]//'` ;; 182da2e3ebdSchin esac 183da2e3ebdSchin case $type in 184da2e3ebdSchin %flags) if test $define = 1 185da2e3ebdSchin then case $counter in 186da2e3ebdSchin 32) echo "$command: ${err_file}line $err_line: warning: $1: too many flag bits" >&2 ;; 187da2e3ebdSchin 1[56789]|[23][0123456789]) long=L ;; 188da2e3ebdSchin *) long= ;; 189da2e3ebdSchin esac 190da2e3ebdSchin echo "#define $prefix$ID (1$long<<$counter)" 191da2e3ebdSchin fi 192da2e3ebdSchin ;; 193da2e3ebdSchin %keywords) 194da2e3ebdSchin if test $define = 1 195da2e3ebdSchin then echo "#define $prefix$ID $counter" 196da2e3ebdSchin fi 197da2e3ebdSchin if test $table = 1 198da2e3ebdSchin then echo " \"$1\", $prefix$ID," 199da2e3ebdSchin fi 200da2e3ebdSchin ;; 201da2e3ebdSchin %sequence) 202da2e3ebdSchin if test $define = 1 203da2e3ebdSchin then echo "#define $prefix$ID $counter" 204da2e3ebdSchin fi 205da2e3ebdSchin ;; 206da2e3ebdSchin esac 207da2e3ebdSchin case $shell in 208da2e3ebdSchin ksh) ((counter=counter+1)) ;; 209da2e3ebdSchin *) counter=`expr $counter + 1` ;; 210da2e3ebdSchin esac 211da2e3ebdSchin shift 212da2e3ebdSchin ;; 213da2e3ebdSchin esac 214da2e3ebdSchin done 215da2e3ebdSchin ;; 216da2e3ebdSchin esac 217da2e3ebdSchindone 218da2e3ebdSchincase $define:$last in 219da2e3ebdSchin1:?*) case $shell in 220da2e3ebdSchin ksh) ((n=counter-1)) ;; 221da2e3ebdSchin *) n=`expr $counter - 1` ;; 222da2e3ebdSchin esac 223da2e3ebdSchin echo "#define $prefix$last $n" 224da2e3ebdSchin ;; 225da2e3ebdSchinesac 226da2e3ebdSchincase $type in 227da2e3ebdSchin%keywords) 228da2e3ebdSchin if test $table = 1 229da2e3ebdSchin then echo " 0, 0" 230da2e3ebdSchin echo "};" 231da2e3ebdSchin fi 232da2e3ebdSchin ;; 233da2e3ebdSchinesac 234da2e3ebdSchinexit 0 235