#!/bin/sh
set -e

echo "module SysCalls where"
echo "import Foreign.C"
echo
echo "#include <asm/unistd.h>"
echo
echo "data SysCall = "
echo "#include <asm/unistd.h>" | g++ -E -dM - | sed -nr 's/^#define __NR_(\w*) .*$/  SYS_\1 |/p' | sort | uniq
echo "  UnknownSysCall CLong"
echo "    deriving (Eq, Show)"
echo
echo "fromNumber :: CLong -> SysCall"
echo "fromNumber x = case x of"
echo "#include <asm/unistd.h>" | g++ -E -dM - | sed -nr 's/^#define __NR_(\w*) .*$/  (#const __NR_\1) -> SYS_\1/p' | sort | uniq
echo "  _ -> UnknownSysCall x"
echo
echo "toNumber :: SysCall -> CLong"
echo "toNumber x = case x of"
echo "#include <asm/unistd.h>" | g++ -E -dM - | sed -nr 's/^#define __NR_(\w*) .*$/  SYS_\1 -> (#const __NR_\1)/p' | sort | uniq
echo "  UnknownSysCall y -> y"
