for internal functions, and returning values from functions in the compiler.
89 lines
1.6 KiB
Bash
Executable File
89 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
INFILE=$1
|
|
|
|
if [ "X${INFILE}" = "X" ]
|
|
then
|
|
echo "Usage: $0 abispec"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "${INFILE}" ]
|
|
then
|
|
echo "$0: ${INFILE}: not found"
|
|
exit 1
|
|
fi
|
|
|
|
ABI=abi.c
|
|
HEADER=abi.lh
|
|
|
|
|
|
# This is pretty evil. We use sed to produce shell commands which set
|
|
# variables which contain 8-character chunks of the sha1 hash.
|
|
# eval takes care of defining them in the current shell, rather than in
|
|
# a subshell.
|
|
for VER in `sha1 -n ${INFILE} | sed 's/\(........\)\(........\)\(........\)\(........\)\(........\).*$/ABIVER1=\1 ABIVER2=\2 ABIVER3=\3 ABIVER4=\4 ABIVER5=\5/'`
|
|
do
|
|
eval ${VER}
|
|
done
|
|
|
|
|
|
FNCOUNT=0
|
|
|
|
do_function()
|
|
{
|
|
echo " vm_intfn_${ARG1}," >>${ABI}
|
|
echo "fndefint ${ARG1} ${FNCOUNT};" >>${HEADER}
|
|
FNCOUNT=$((${FNCOUNT}+1))
|
|
}
|
|
|
|
do_function_v()
|
|
{
|
|
echo " vm_intfn_${ARG1}," >>${ABI}
|
|
echo "fndefint_v ${ARG1} ${FNCOUNT};" >>${HEADER}
|
|
FNCOUNT=$((${FNCOUNT}+1))
|
|
}
|
|
|
|
cat <<EOF >${ABI}
|
|
/* abi.c */
|
|
/* autogenerated - do not edit */
|
|
|
|
#include "abi.h"
|
|
|
|
const long vm_abiversion1 = 0x${ABIVER1};
|
|
const long vm_abiversion2 = 0x${ABIVER2};
|
|
const long vm_abiversion3 = 0x${ABIVER3};
|
|
const long vm_abiversion4 = 0x${ABIVER4};
|
|
const long vm_abiversion5 = 0x${ABIVER5};
|
|
|
|
vm_intfn vm_intfn_table[] = {
|
|
EOF
|
|
|
|
cat <<EOF >${HEADER}
|
|
/* abi.lh */
|
|
/* autogenerated - do not edit */
|
|
|
|
constant __abiversion1 0x${ABIVER1};
|
|
constant __abiversion2 0x${ABIVER2};
|
|
constant __abiversion3 0x${ABIVER3};
|
|
constant __abiversion4 0x${ABIVER4};
|
|
constant __abiversion5 0x${ABIVER5};
|
|
|
|
EOF
|
|
|
|
while read TYPE ARG1 ARG2
|
|
do
|
|
case "$TYPE" in
|
|
function) do_function
|
|
;;
|
|
function_v) do_function_v
|
|
;;
|
|
esac
|
|
done <${INFILE}
|
|
|
|
cat <<EOF >>${ABI}
|
|
};
|
|
|
|
const int vm_intfn_size = sizeof(vm_intfn_table) / sizeof(vm_intfn);
|
|
EOF
|