aboutsummaryrefslogtreecommitdiff
path: root/gen.c
diff options
context:
space:
mode:
authorDeposite Pirate2018-09-16 22:54:11 +0200
committerDeposite Pirate2018-09-16 22:54:11 +0200
commit1c7d481d0104add72933c560d957a422e8636d84 (patch)
tree2ef71132559dd018c453f4617d92ce69394e42f0 /gen.c
Initial commit.
Diffstat (limited to 'gen.c')
-rw-r--r--gen.c115
1 files changed, 115 insertions, 0 deletions
diff --git a/gen.c b/gen.c
new file mode 100644
index 0000000..4dedc09
--- /dev/null
+++ b/gen.c
@@ -0,0 +1,115 @@
+/*
+ * Compface - 48x48x1 image compression and decompression
+ *
+ * Copyright (c) James Ashton - Sydney University - June 1990.
+ *
+ * Written 11th November 1989.
+ *
+ * Permission is given to distribute these sources, as long as the
+ * copyright messages are not removed, and no monies are exchanged.
+ *
+ * No responsibility is taken for any errors on inaccuracies inherent
+ * either to the comments or the code of this program, but if reported
+ * to me, then an attempt will be made to fix them.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "compface.h"
+
+#define GEN(g) F[h] ^= G.g[k]; break
+
+static void Gen P((char *)) ;
+
+static void
+Gen(f)
+register char *f;
+{
+ register int m, l, k, j, i, h;
+
+ for (j = 0; j < HEIGHT; j++)
+ {
+ for (i = 0; i < WIDTH; i++)
+ {
+ h = i + j * WIDTH;
+ k = 0;
+ for (l = i - 2; l <= i + 2; l++)
+ for (m = j - 2; m <= j; m++)
+ {
+ if ((l >= i) && (m == j))
+ continue;
+ if ((l > 0) && (l <= WIDTH) && (m > 0))
+ k = *(f + l + m * WIDTH) ? k * 2 + 1 : k * 2;
+ }
+ switch (i)
+ {
+ case 1 :
+ switch (j)
+ {
+ case 1 : GEN(g_22);
+ case 2 : GEN(g_21);
+ default : GEN(g_20);
+ }
+ break;
+ case 2 :
+ switch (j)
+ {
+ case 1 : GEN(g_12);
+ case 2 : GEN(g_11);
+ default : GEN(g_10);
+ }
+ break;
+ case WIDTH - 1 :
+ switch (j)
+ {
+ case 1 : GEN(g_42);
+ case 2 : GEN(g_41);
+ default : GEN(g_40);
+ }
+ break;
+ case WIDTH :
+ switch (j)
+ {
+ case 1 : GEN(g_32);
+ case 2 : GEN(g_31);
+ default : GEN(g_30);
+ }
+ break;
+ default :
+ switch (j)
+ {
+ case 1 : GEN(g_02);
+ case 2 : GEN(g_01);
+ default : GEN(g_00);
+ }
+ break;
+ }
+ }
+ }
+}
+
+void
+GenFace()
+{
+ static char new[PIXELS];
+ register char *f1;
+ register char *f2;
+ register int i;
+
+ f1 = new;
+ f2 = F;
+ i = PIXELS;
+ while (i-- > 0)
+ *(f1++) = *(f2++);
+ Gen(new);
+}
+
+void
+UnGenFace()
+{
+ Gen(F);
+}
+