aboutsummaryrefslogtreecommitdiff
path: root/mail/faces/files/patch-compface_compface.h
diff options
context:
space:
mode:
Diffstat (limited to 'mail/faces/files/patch-compface_compface.h')
-rw-r--r--mail/faces/files/patch-compface_compface.h306
1 files changed, 306 insertions, 0 deletions
diff --git a/mail/faces/files/patch-compface_compface.h b/mail/faces/files/patch-compface_compface.h
new file mode 100644
index 000000000000..41db8268a5db
--- /dev/null
+++ b/mail/faces/files/patch-compface_compface.h
@@ -0,0 +1,306 @@
+*** compface/compface.h Thu Feb 21 16:42:54 2002
+--- /home/lkoeller/tmp/ports/mail/faces/work/faces/compface/compface.h Thu Sep 5 07:24:42 1991
+***************
+*** 14,45 ****
+ * to me, then an attempt will be made to fix them.
+ */
+
+ #include <string.h>
+ #include <fcntl.h>
+ #include <setjmp.h>
+
+! /* Need to know how many bits per hexadecimal digit for io */
+ #define BITSPERDIG 4
+! extern char HexDigits[];
+
+! /* Define the face size - 48x48x1 */
+ #define WIDTH 48
+ #define HEIGHT WIDTH
+
+! /* Total number of pixels and digits */
+ #define PIXELS (WIDTH * HEIGHT)
+ #define DIGITS (PIXELS / BITSPERDIG)
+
+! extern char F[PIXELS];
+
+! /* Output formatting word lengths and line lengths */
+ #define DIGSPERWORD 4
+ #define WORDSPERLINE (WIDTH / DIGSPERWORD / BITSPERDIG)
+
+! /* Compressed output uses the full range of printable characters.
+ * in ascii these are in a contiguous block so we just need to know
+! * the first and last. The total number of printables is needed too.
+! */
+ #define FIRSTPRINT '!'
+ #define LASTPRINT '~'
+ #define NUMPRINTS (LASTPRINT - FIRSTPRINT + 1)
+--- 13,64 ----
+ * to me, then an attempt will be made to fix them.
+ */
+
++ #if defined(SYSV32) || defined(hpux)
+ #include <string.h>
++ #else
++ #include <strings.h>
++ #endif /* SYSV32 || hpux */
+ #include <fcntl.h>
+ #include <setjmp.h>
+
+! /* For all function declarations, if ANSI then use a prototype. */
+!
+! #if defined(__STDC__)
+! #define P(args) args
+! #else /* ! __STDC__ */
+! #define P(args) ()
+! #endif /* STDC */
+!
+! #ifdef MAIN
+! #define EXTERN
+! #define INIT(x) = x
+! #else
+! #define EXTERN extern
+! #define INIT(x)
+! #endif
+!
+! /* need to know how many bits per hexadecimal digit for io */
+ #define BITSPERDIG 4
+! EXTERN char HexDigits[] INIT("0123456789ABCDEF");
+
+! /* define the face size - 48x48x1 */
+ #define WIDTH 48
+ #define HEIGHT WIDTH
+
+! /* total number of pixels and digits */
+ #define PIXELS (WIDTH * HEIGHT)
+ #define DIGITS (PIXELS / BITSPERDIG)
+
+! /* internal face representation - 1 char per pixel is faster */
+! EXTERN char F[PIXELS];
+
+! /* output formatting word lengths and line lengths */
+ #define DIGSPERWORD 4
+ #define WORDSPERLINE (WIDTH / DIGSPERWORD / BITSPERDIG)
+
+! /* compressed output uses the full range of printable characters.
+ * in ascii these are in a contiguous block so we just need to know
+! * the first and last. The total number of printables is needed too */
+ #define FIRSTPRINT '!'
+ #define LASTPRINT '~'
+ #define NUMPRINTS (LASTPRINT - FIRSTPRINT + 1)
+***************
+*** 49,56 ****
+
+ /* Portable, very large unsigned integer arithmetic is needed.
+ * Implementation uses arrays of WORDs. COMPs must have at least
+! * twice as many bits as WORDs to handle intermediate results.
+! */
+ #define WORD unsigned char
+ #define COMP unsigned long
+ #define BITSPERWORD 8
+--- 68,74 ----
+
+ /* Portable, very large unsigned integer arithmetic is needed.
+ * Implementation uses arrays of WORDs. COMPs must have at least
+! * twice as many bits as WORDs to handle intermediate results */
+ #define WORD unsigned char
+ #define COMP unsigned long
+ #define BITSPERWORD 8
+***************
+*** 64,76 ****
+ WORD b_word[MAXWORDS];
+ } BigInt;
+
+! extern BigInt B;
+
+ /* This is the guess the next pixel table. Normally there are 12 neighbour
+ * pixels used to give 1<<12 cases but in the upper left corner lesser
+! * numbers of neighbours are available, leading to 6231 different guesses.
+! */
+! typedef struct guesses {
+ char g_00[1<<12];
+ char g_01[1<<7];
+ char g_02[1<<2];
+--- 82,94 ----
+ WORD b_word[MAXWORDS];
+ } BigInt;
+
+! EXTERN BigInt B;
+
+ /* This is the guess the next pixel table. Normally there are 12 neighbour
+ * pixels used to give 1<<12 cases but in the upper left corner lesser
+! * numbers of neighbours are available, leading to 6231 different guesses */
+! typedef struct guesses
+! {
+ char g_00[1<<12];
+ char g_01[1<<7];
+ char g_02[1<<2];
+***************
+*** 88,155 ****
+ char g_42[1<<2];
+ } Guesses;
+
+! extern Guesses G;
+
+ /* Data of varying probabilities are encoded by a value in the range 0 - 255.
+ * The probability of the data determines the range of possible encodings.
+! * Offset gives the first possible encoding of the range.
+! */
+! typedef struct prob {
+ WORD p_range;
+ WORD p_offset;
+ } Prob;
+
+! extern Prob *ProbBuf[PIXELS * 2];
+! extern int NumProbs;
+
+ /* Each face is encoded using 9 octrees of 16x16 each. Each level of the
+ * trees has varying probabilities of being white, grey or black.
+! * The table below is based on sampling many faces.
+! */
+
+ #define BLACK 0
+ #define GREY 1
+ #define WHITE 2
+
+! extern Prob levels[4][3];
+! extern Prob freqs[16];
+
+ #define ERR_OK 0 /* successful completion */
+ #define ERR_EXCESS 1 /* completed OK but some input was ignored */
+ #define ERR_INSUFF -1 /* insufficient input. Bad face format? */
+ #define ERR_INTERNAL -2 /* Arithmetic overflow or buffer overflow */
+
+! extern int status;
+
+! extern jmp_buf comp_env;
+
+! int AllBlack(char *, int, int);
+! int AllWhite(char *, int, int);
+! int BigPop(Prob *);
+! int compface(char *);
+! int main(int, char *[]);
+! int ReadBuf();
+! int Same(char *, int, int);
+! int uncompface(char *);
+! int WriteBuf();
+!
+! void BigAdd(WORD);
+! void BigClear();
+! void BigDiv(WORD, WORD *);
+! void BigMul(WORD);
+! void BigPrint();
+! void BigPush(Prob *);
+! void BigRead(char *);
+! void BigSub(WORD);
+! void BigWrite(char *);
+! void CompAll(char *);
+! void Compress(char *, int, int, int);
+! void GenFace();
+! void PopGreys(char *, int, int);
+! void PushGreys(char *, int, int);
+! void ReadFace(char *);
+! void RevPush(Prob *);
+! void UnCompAll(char *);
+! void UnCompress(char *, int, int, int);
+! void UnGenFace();
+! void WriteFace(char *);
+--- 106,204 ----
+ char g_42[1<<2];
+ } Guesses;
+
+! /* data.h was established by sampling over 1000 faces and icons */
+! EXTERN Guesses G
+! #ifdef MAIN
+! =
+! #include "data.h"
+! #endif
+! ;
+
+ /* Data of varying probabilities are encoded by a value in the range 0 - 255.
+ * The probability of the data determines the range of possible encodings.
+! * Offset gives the first possible encoding of the range */
+! typedef struct prob
+! {
+ WORD p_range;
+ WORD p_offset;
+ } Prob;
+
+! /* A stack of probability values */
+! EXTERN Prob *ProbBuf[PIXELS * 2];
+! EXTERN int NumProbs INIT(0);
+
+ /* Each face is encoded using 9 octrees of 16x16 each. Each level of the
+ * trees has varying probabilities of being white, grey or black.
+! * The table below is based on sampling many faces */
+
+ #define BLACK 0
+ #define GREY 1
+ #define WHITE 2
+
+! EXTERN Prob levels[4][3]
+! #ifdef MAIN
+! =
+! {
+! {{1, 255}, {251, 0}, {4, 251}}, /* Top of tree almost always grey */
+! {{1, 255}, {200, 0}, {55, 200}},
+! {{33, 223}, {159, 0}, {64, 159}},
+! {{131, 0}, {0, 0}, {125, 131}} /* Grey disallowed at bottom */
+! }
+! #endif
+! ;
+!
+! /* At the bottom of the octree 2x2 elements are considered black if any
+! * pixel is black. The probabilities below give the distribution of the
+! * 16 possible 2x2 patterns. All white is not really a possibility and
+! * has a probability range of zero. Again, experimentally derived data */
+! EXTERN Prob freqs[16]
+! #ifdef MAIN
+! =
+! {
+! {0, 0}, {38, 0}, {38, 38}, {13, 152},
+! {38, 76}, {13, 165}, {13, 178}, {6, 230},
+! {38, 114}, {13, 191}, {13, 204}, {6, 236},
+! {13, 217}, {6, 242}, {5, 248}, {3, 253}
+! }
+! #endif
+! ;
+
+ #define ERR_OK 0 /* successful completion */
+ #define ERR_EXCESS 1 /* completed OK but some input was ignored */
+ #define ERR_INSUFF -1 /* insufficient input. Bad face format? */
+ #define ERR_INTERNAL -2 /* Arithmetic overflow or buffer overflow */
+
+! EXTERN int status;
+
+! EXTERN jmp_buf comp_env;
+
+! int AllBlack P((char *, int, int)) ;
+! int AllWhite P((char *, int, int)) ;
+! int BigPop P((Prob *)) ;
+! int compface P((char *)) ;
+! int main P((int, char *[])) ;
+! int ReadBuf P(()) ;
+! int Same P((char *, int, int)) ;
+! int uncompface P((char *)) ;
+! int WriteBuf P(()) ;
+!
+! void BigAdd P((unsigned char)) ;
+! void BigClear P(()) ;
+! void BigDiv P((unsigned char, unsigned char *)) ;
+! void BigMul P((unsigned char)) ;
+! void BigPrint P(()) ;
+! void BigPush P((Prob *)) ;
+! void BigRead P((char *)) ;
+! void BigSub P((unsigned int)) ;
+! void BigWrite P((char *)) ;
+! void CompAll P((char *)) ;
+! void Compress P((char *, int, int, int)) ;
+! void GenFace P(()) ;
+! void PopGreys P((char *, int, int)) ;
+! void PushGreys P((char *, int, int)) ;
+! void ReadFace P((char *)) ;
+! void RevPush P((Prob *)) ;
+! void UnCompAll P((char *)) ;
+! void UnCompress P((char *, int, int, int)) ;
+! void UnGenFace P(()) ;
+! void WriteFace P((char *)) ;