summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/uudecode.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2008-01-27 11:37:44 +0100
committerTobias Klauser <tklauser@xenon.tklauser.home>2008-01-27 11:37:44 +0100
commit7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch)
treeb1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/SNIP/uudecode.c
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/SNIP/uudecode.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/uudecode.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/uudecode.c b/reference/C/CONTRIB/SNIP/uudecode.c
new file mode 100755
index 0000000..01a8518
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/uudecode.c
@@ -0,0 +1,41 @@
+/*
+** by: John Lots
+** patched up for BC++ 3.1 by Alan Eldridge 10/12/92
+** (UUCP: alane@wozzle.linet.org, FIDO: 1:272/38.473)
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#define DEC(c) (char)(((c)-' ')&077)
+
+int main()
+{
+ int n;
+ char buf[128],a,b,c,d;
+
+ scanf("begin %o ", &n);
+ gets(buf); /* filename */
+ if (!freopen(buf, "wb", stdout)) /* oops.. */
+ {
+ perror(buf);
+ exit(1);
+ }
+ while ((n=getchar())!=EOF&&((n=DEC(n))!=0))
+ {
+ while (n>0)
+ {
+ a=DEC(getchar());
+ b=DEC(getchar());
+ c=DEC(getchar());
+ d=DEC(getchar());
+ if (n-->0)
+ putchar((a<<2)|(b>>4));
+ if (n-->0)
+ putchar((b<<4)|(c>>2));
+ if (n-->0)
+ putchar((c<<6)|d);
+ }
+ n=getchar(); /* skip \n */
+ }
+ return 0;
+}