This is bitshift.c in view mode; [Download] [Up]
/******************************************************************************
* *
* Copyright (C) 1992,1993,1994 Tony Robinson *
* *
* See the file LICENSE for conditions on distribution and usage *
* *
******************************************************************************/
# include <stdio.h>
# include "shorten.h"
uchar linear2ulaw(/* int */);
int ulaw2linear(/* unsigned char */);
# define USIZE 256
# define HUSIZE 128
# define SHIFTSIZE 13
char *argv0 = "bitshift";
int main() {
int shift, i;
int tab[USIZE];
long **forwardmap = long2d((ulong) SHIFTSIZE, (ulong) USIZE);
long **reversemap = long2d((ulong) SHIFTSIZE, (ulong) USIZE);
for(i = 0; i < USIZE; i++) tab[i] = 0;
for(shift = 0; shift < SHIFTSIZE; shift++)
for(i = -(1 << 15); i < (1 << 15); i += 1 << (shift + 3))
tab[linear2ulaw(i)] = shift;
printf("char ulaw_maxshift[%d] = {", USIZE);
for(i = 0; i < USIZE - 1; i++)
printf("%d,", tab[i]);
printf("%d};\n\n", tab[USIZE - 1]);
for(shift = 0; shift < SHIFTSIZE; shift++) {
int nused;
nused = 0;
for(i = 255; i >= 128; i--)
if(tab[i] >= shift) forwardmap[shift][i] = nused++;
for(i = 255; i >= 128; i--)
if(tab[i] < shift) forwardmap[shift][i] = nused++;
nused = -1;
for(i = 126; i >= 0; i--)
if(tab[i] >= shift) forwardmap[shift][i] = nused--;
forwardmap[shift][127] = nused--;
for(i = 126; i >= 0; i--)
if(tab[i] < shift) forwardmap[shift][i] = nused--;
for(i = 0; i < USIZE; i++)
reversemap[shift][forwardmap[shift][i] + HUSIZE] = i;
}
for(shift = 0; shift < SHIFTSIZE; shift++)
for(i = 0; i < USIZE; i++)
if(forwardmap[shift][reversemap[shift][i]] != i - HUSIZE)
fprintf(stderr, "identity maping failed for shift: %d\tindex: %d\n",
shift, i);
printf("schar ulaw_inward[%d][%d] = {\n", SHIFTSIZE, USIZE);
for(shift = 0; shift < SHIFTSIZE; shift++) {
printf("{");
for(i = 0; i < USIZE - 1; i++)
printf("%ld,", forwardmap[shift][i]);
if(shift != SHIFTSIZE - 1)
printf("%ld},\n", forwardmap[shift][USIZE - 1]);
else
printf("%ld}\n};\n", forwardmap[shift][USIZE - 1]);
}
printf("\n");
printf("uchar ulaw_outward[%d][%d] = {\n", SHIFTSIZE, USIZE);
for(shift = 0; shift < SHIFTSIZE; shift++) {
printf("{");
for(i = 0; i < USIZE - 1; i++)
printf("%ld,", reversemap[shift][i]);
if(shift != SHIFTSIZE - 1)
printf("%ld},\n", reversemap[shift][USIZE - 1]);
else
printf("%ld}\n};\n", reversemap[shift][USIZE - 1]);
}
return(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.