#!/bin/sh

ROOT=$(dirname `readlink $0` 2> /dev/null)
if [ -n "${ROOT}" ]; then
	cd "${ROOT}"
fi

if [ -z "$R2PIPE_IN" ]; then
	echo "This program must be run from r2 using #!pipe r2g"
	exit 1
fi
if [ -z "$1" ]; then
	echo "Usage: r2ghidra [command]"
	echo "Commands:"
	echo "  r2            .!r2g r2          # import r2ghidra into cmd.pdc"
	echo '  dec [addr]    !r2g dec `?v $$`  # decompile function at given address'
	echo "  pull                            # pull changes from ghidra into r2"
	echo "  push                            # push comments and functions names from r2 to ghidra"
	echo "  client [addr]                   # call the server to request the decompilation"
	echo "  server [file]"
#	exit 1
fi

TESTBIN=${R2_FILE}
FCNADDR=${R2_XOFFSET}

TESTBIN=/bin/ls
case "$1" in
r2)
	#echo '"(pdcg,!r2g client `?v $FB`>.a,. .a,rm .a)"'
	#echo 'e cmd.pdc=.(pdcg)'
	#echo 'e cmd.pdc=$ghidra-dec'
	echo '"$pddg*=#!pipe r2g pdd*"'
	echo '"$pddg=#!pipe r2g pdd"'
	echo 'e cmd.pdd=pddg'
	;;
headless)
	echo "Headless r2ghidra is WIP"
	TESTBIN="$2"
	if [ -z "${TESTBIN}" ]; then
		echo "Usage: r2g server /path/to/file"
	else
		rm -rf Test.*
		analyzeHeadless . Test.gpr -import ${TESTBIN} \
			-postScript GhidraDecompilerR2.java -deleteProject
	fi
	;;
dec)
	TESTBIN=/bin/ls
	FCNADDR=$2
	echo "FCNADDR=$2"
	echo
	rm -f decompiled.c
	rm -rf Test.*
	analyzeHeadless . Test.gpr -import ${TESTBIN} -postScript GhidraDecompiler.java ${FCNADDR} -deleteProject > /dev/null 2>&1
	indent decompiled.c
	cat decompiled.c
	;;
import|pull)
	TESTBIN=/bin/ls
	FCNADDR=$2
	echo "Assuming you have r2 http server on port 9090"
	echo "r2 -e http.port=9090 -c'& =h' /bin/ls"
	rm -rf Test.*
	analyzeHeadless . Test.gpr -import ${TESTBIN} -postScript ghidra2radare.py -deleteProject > /dev/null 2>&1
	cat ghidra-output.r2
	;;
*)
	curl "http://localhost:8002/cmd/$@"
	;;
esac

#analyzeHeadless . Test.gpr -import $(TESTBIN) -postScript ghidra/GhidraDecompiler.java $(FCNADDR) -deleteProject
exit 0
