# Copyright (c) 2010, 2012, 2013, 2014
#	Thorsten Glaser <tg@mirbsd.org>
# This file is provided under the same terms as mksh.
#-
# Minimal /system/etc/mkshrc for Android
#
# Support: https://launchpad.net/mksh

: ${HOME:=/data}
: ${HOSTNAME:=$(getprop ro.product.device)}
: ${HOSTNAME:=android}
: ${MKSH:=/system/bin/sh}
: ${SHELL:=$MKSH}
: ${TERM:=xterm}
: ${TMPDIR:=/data/local/tmp}
: ${USER:=$(id -un)}
export HOME HOSTNAME MKSH SHELL TERM TMPDIR USER

if (( USER_ID )); then PS1='$'; else PS1='#'; fi
PS4='[$EPOCHREALTIME] '; PS1='${|
	local e=$?

	(( e )) && REPLY+="$e|"

	return $e
}$USER@$HOSTNAME:${PWD:-?} '"$PS1 "

function hd {
	local -Uui16 -Z11 pos=0
	local -Uui16 -Z5 hv=2147483647
	local dasc line i

	cat "$@" | { set +U; if read -arN -1 line; then
		typeset -i1 'line[*]'
		i=0
		while (( i < ${#line[*]} )); do
			hv=${line[i++]}
			if (( (pos & 15) == 0 )); then
				(( pos )) && print -r -- "$dasc|"
				print -n "${pos#16#}  "
				dasc=' |'
			fi
			print -n "${hv#16#} "
			if (( (hv < 32) || (hv > 126) )); then
				dasc+=.
			else
				dasc+=${line[i-1]#1#}
			fi
			(( (pos++ & 15) == 7 )) && print -n -- '- '
		done
		while (( pos & 15 )); do
			print -n '   '
			(( (pos++ & 15) == 7 )) && print -n -- '- '
		done
		(( hv == 2147483647 )) || print -r -- "$dasc|"
	fi; }
}

function setenv {
	eval export "\"$1\""'="$2"'
}

for p in ~/bin; do
	[[ -d $p/. ]] || continue
	[[ :$PATH: = *:$p:* ]] || PATH=$p:$PATH
done

unset p

: place customisations above this line
