71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
/* The arrays are too large for the xstormy16 - won't fit in 16 bits. */
|
|
/* { dg-do assemble } */
|
|
/* { dg-require-effective-target size32plus } */
|
|
/* { dg-xfail-if "The array too big" { m6811-*-* m6812-*-* } { "*" } { "" } } /*
|
|
/* { dg-skip-if "Array too big" { "avr-*-*" } { "*" } { "" } } */
|
|
/* { dg-xfail-if "The array too big" { h8300-*-* } { "-mno-h" "-mn" } { "" } } */
|
|
|
|
unsigned char TIFFFax2DMode[20][256];
|
|
unsigned char TIFFFax2DNextState[20][256];
|
|
unsigned char TIFFFaxUncompAction[20][256];
|
|
unsigned char TIFFFaxUncompNextState[20][256];
|
|
unsigned char TIFFFax1DAction[230][256];
|
|
unsigned char TIFFFax1DNextState[230][256];
|
|
|
|
typedef struct tableentry {
|
|
unsigned short length;
|
|
unsigned short code;
|
|
short runlen;
|
|
} tableentry;
|
|
|
|
extern tableentry TIFFFaxWhiteCodes[];
|
|
extern tableentry TIFFFaxBlackCodes[];
|
|
|
|
static short sp_data, sp_bit;
|
|
|
|
static unsigned char
|
|
fetchByte (inbuf)
|
|
|
|
unsigned char **inbuf;
|
|
|
|
{
|
|
unsigned char byte = **inbuf;
|
|
(*inbuf)++;
|
|
return (byte);
|
|
}
|
|
|
|
static int
|
|
decode_white_run (inbuf)
|
|
|
|
unsigned char **inbuf;
|
|
|
|
{
|
|
short state = sp_bit;
|
|
short action;
|
|
int runlen = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if (sp_bit == 0)
|
|
{
|
|
nextbyte:
|
|
sp_data = fetchByte (inbuf);
|
|
}
|
|
|
|
action = TIFFFax1DAction[state][sp_data];
|
|
state = TIFFFax1DNextState[state][sp_data];
|
|
if (action == 0 )
|
|
goto nextbyte;
|
|
if (action == 1 )
|
|
return (-1 );
|
|
if (action == 210 )
|
|
return (-3 );
|
|
sp_bit = state;
|
|
action = (TIFFFaxWhiteCodes[ action - 2 ].runlen) ;
|
|
runlen += action;
|
|
if (action < 64)
|
|
return (runlen);
|
|
}
|
|
}
|
|
|