Skip to content

Instantly share code, notes, and snippets.

@cibyr
Created April 10, 2013 05:12
Show Gist options
  • Save cibyr/5351983 to your computer and use it in GitHub Desktop.
Save cibyr/5351983 to your computer and use it in GitHub Desktop.
uudecode in bash
if ! hash uudecode; then
uudecode() {
bs=0
while read -rs t ; do
if [ $bs -eq 1 ] ; then
if [ "a$t" = "aend" ] ; then
bs=2
else
x=1
i=($(printf "%d " "'${t:0:1}" "'${t:1:1}" "'${t:2:1}" "'${t:3:1}" "'${t:4:1}" "'${t:5:1}" "'${t:6:1}" "'${t:7:1}" "'${t:8:1}" "'${t:9:1}" "'${t:10:1}" "'${t:11:1}" "'${t:12:1}" "'${t:13:1}" "'${t:14:1}" "'${t:15:1}" "'${t:16:1}" "'${t:17:1}" "'${t:18:1}" "'${t:19:1}" "'${t:20:1}" "'${t:21:1}" "'${t:22:1}" "'${t:23:1}" "'${t:24:1}" "'${t:25:1}" "'${t:26:1}" "'${t:27:1}" "'${t:28:1}" "'${t:29:1}" "'${t:30:1}" "'${t:31:1}" "'${t:32:1}" "'${t:33:1}" "'${t:34:1}" "'${t:35:1}" "'${t:36:1}" "'${t:37:1}" "'${t:38:1}" "'${t:39:1}" "'${t:40:1}" "'${t:41:1}" "'${t:42:1}" "'${t:43:1}" "'${t:44:1}" "'${t:45:1}" "'${t:46:1}" "'${t:47:1}" "'${t:48:1}" "'${t:49:1}" "'${t:50:1}" "'${t:51:1}" "'${t:52:1}" "'${t:53:1}" "'${t:54:1}" "'${t:55:1}" "'${t:56:1}" "'${t:57:1}" "'${t:58:1}" "'${t:59:1}" "'${t:60:1}"))
l=$[${i[0]} -32 & 63 ]
while [ $l -gt 0 ] ; do
i0=$[${i[$[x++]]} -32 & 63]
i1=$[${i[$[x++]]} -32 & 63]
i2=$[${i[$[x++]]} -32 & 63]
i3=$[${i[$[x++]]} -32 & 63]
if [ $l -gt 2 ] ; then
echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]\0$[$i1 >> 2 & 3]$[$i1 << 1 & 6 | $i2 >> 5]$[$i2 >> 2 & 7]\0$[$i2 & 3]$[$i3 >> 3 & 7]$[$i3 & 7]" >>"$name"
echo -n .
elif [ $l -eq 2 ] ; then
echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]\0$[$i1 >> 2 & 3]$[$i1 << 1 & 6 | $i2 >> 5]$[$i2 >> 2 & 7]" >>"$name"
else
echo -ne "\0$[$i0 >> 4]$[$i0 >> 1 & 7]$[$i0 << 2 & 4 | $i1 >> 4]" >>"$name"
fi
l=$[l-3]
done
fi
elif [ "${t:0:5}" = "begin" ]; then
bs=1
mode="${t:6:3}"
name="${t:10}"
rm "$name"
fi
done
chmod $mode "$name"
}
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment