diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /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-x | reference/C/CONTRIB/SNIP/uudecode.c | 41 |
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;
+}
|