www.pudn.com > pccp047.zip > RFXTOPCX.C


#include 
#include 
#include 
#include 
#include 
 
#define MAKEUP 0x1000 
#define SEVENOHS 0x1fff 
 
unsigned char curbyte, bitmask; 
 
int rfxfd; 
 
jmp_buf where; 
 
int debug; 
 
int getbit() 
        { 
        int result; 
        if(!bitmask) 
                { 
                if(!read(rfxfd, &curbyte, 1)) 
			{ 
			printf("Premature end of file.\n"); 
			exit(1); 
			} 
		if(curbyte==0x10) 
			{ 
			if(!read(rfxfd, &curbyte, 1)) 
				{ 
				printf("Premature end of file.\n"); 
				exit(1); 
				} 
			if(curbyte==0x03) 
				{ 
				longjmp(where, -1); 
				} 
			} 
                bitmask=0x80; 
		if(debug) 
			printf("(%02x)", curbyte); 
                } 
        result=curbyte&bitmask; 
        bitmask>>=1; 
	bitmask&=0x7f; 
	if(debug) 
		if(result) 
			putchar('1'); 
		else 
			putchar('0'); 
	return(result); 
        } 
 
int getwhite() 
        { 
        if(getbit()) 
         /* 1 */ 
         if(getbit()) 
          /* 11 */ 
          if(getbit()) 
           /* 111 */ 
           if(getbit()) 
            /* 1111 */ 
            return(7); 
           else 
            /* 1110 */ 
            return(6); 
          else 
           /* 110 */ 
           if(getbit()) 
            /* 1101 */ 
            if(getbit()) 
             /* 11011 */ 
             return(MAKEUP|64); 
            else 
             /* 11010 */ 
             if(getbit()) 
              /* 110101 */ 
              return(15); 
             else 
              /* 110100 */ 
              return(14); 
           else 
            /* 1100 */ 
            return(5); 
         else 
          /* 10 */ 
          if(getbit()) 
           /* 101 */ 
           if(getbit()) 
            /* 1011 */ 
            return(4); 
           else 
            /* 1010 */ 
            if(getbit()) 
             /* 10101 */ 
             if(getbit()) 
              /* 101011 */ 
              return(17); 
             else 
              /* 101010 */ 
              return(16); 
            else 
             /* 10100 */ 
             return(9); 
          else 
           /* 100 */ 
           if(getbit()) 
            /* 1001 */ 
            if(getbit()) 
             /* 10011 */ 
             return(8); 
            else 
             /* 10010 */ 
             return(MAKEUP|128); 
           else 
            /* 1000 */ 
            return(3); 
        else 
         /* 0 */ 
         if(getbit()) 
          /* 01 */ 
          if(getbit()) 
           /* 011 */ 
           if(getbit()) 
            /* 0111 */ 
            return(2); 
           else 
            /* 0110 */ 
            if(getbit()) 
             /* 01101 */ 
             if(getbit()) 
              /* 011011 */ 
              if(getbit()) 
               /* 0110111 */ 
               return(MAKEUP|256); 
              else 
               /* 0110110 */ 
               if(getbit()) 
                /* 01101101 */ 
                if(getbit()) 
                 /* 011011011 */ 
                 return(MAKEUP|1408); 
                else 
                 /* 011011010 */ 
                 return(MAKEUP|1344); 
               else 
                /* 01101100 */ 
                if(getbit()) 
                 /* 011011001 */ 
                 return(MAKEUP|1280); 
                else 
                 /* 011011000 */ 
                 return(MAKEUP|1216); 
             else 
              /* 011010 */ 
              if(getbit()) 
               /* 0110101 */ 
               if(getbit()) 
                /* 01101011 */ 
                if(getbit()) 
                 /* 011010111 */ 
                 return(MAKEUP|1152); 
                else 
                 /* 011010110 */ 
                 return(MAKEUP|1088); 
               else 
                /* 01101010 */ 
                if(getbit()) 
                 /* 011010101 */ 
                 return(MAKEUP|1024); 
                else 
                 /* 011010100 */ 
                 return(MAKEUP|960); 
              else 
               /* 0110100 */ 
               if(getbit()) 
                /* 01101001 */ 
                if(getbit()) 
                 /* 011010011 */ 
                 return(MAKEUP|896); 
                else 
                 /* 011010010 */ 
                 return(MAKEUP|832); 
               else 
                /* 01101000 */ 
                return(MAKEUP|576); 
            else 
             /* 01100 */ 
             if(getbit()) 
              /* 011001 */ 
              if(getbit()) 
               /* 0110011 */ 
               if(getbit()) 
                /* 01100111 */ 
                return(MAKEUP|640); 
               else 
                /* 01100110 */ 
                if(getbit()) 
                 /* 011001101 */ 
                 return(MAKEUP|768); 
                else 
                 /* 011001100 */ 
                 return(MAKEUP|704); 
              else 
               /* 0110010 */ 
               if(getbit()) 
                /* 01100101 */ 
                return(MAKEUP|512); 
               else 
                /* 01100100 */ 
                return(MAKEUP|448); 
             else 
              /* 011000 */ 
              return(MAKEUP|1664); 
          else 
           /* 010 */ 
           if(getbit()) 
            /* 0101 */ 
            if(getbit()) 
             /* 01011 */ 
             if(getbit()) 
              /* 010111 */ 
              return(MAKEUP|192); 
             else 
              /* 010110 */ 
              if(getbit()) 
               /* 0101101 */ 
               if(getbit()) 
                /* 01011011 */ 
                return(58); 
               else 
                /* 01011010 */ 
                return(57); 
              else 
               /* 0101100 */ 
               if(getbit()) 
                /* 01011001 */ 
                return(56); 
               else 
                /* 01011000 */ 
                return(55); 
            else 
             /* 01010 */ 
             if(getbit()) 
              /* 010101 */ 
              if(getbit()) 
               /* 0101011 */ 
               return(25); 
              else 
               /* 0101010 */ 
               if(getbit()) 
                /* 01010101 */ 
                return(52); 
               else 
                /* 01010100 */ 
                return(51); 
             else 
              /* 010100 */ 
              if(getbit()) 
               /* 0101001 */ 
               if(getbit()) 
                /* 01010011 */ 
                return(50); 
               else 
                /* 01010010 */ 
                return(49); 
              else 
               /* 0101000 */ 
               return(24); 
           else 
            /* 0100 */ 
            if(getbit()) 
             /* 01001 */ 
             if(getbit()) 
              /* 010011 */ 
              if(getbit()) 
               /* 0100111 */ 
               return(18); 
              else 
               /* 0100110 */ 
               if(getbit()) 
                /* 01001101 */ 
                if(getbit()) 
                 /* 010011011 */ 
                 return(MAKEUP|1728); 
                else 
                 /* 010011010 */ 
                 return(MAKEUP|1600); 
               else 
                /* 01001100 */ 
                if(getbit()) 
                 /* 010011001 */ 
                 return(MAKEUP|1536); 
                else 
                 /* 010011000 */ 
                 return(MAKEUP|1472); 
             else 
              /* 010010 */ 
              if(getbit()) 
               /* 0100101 */ 
               if(getbit()) 
                /* 01001011 */ 
                return(60); 
               else 
                /* 01001010 */ 
                return(59); 
              else 
               /* 0100100 */ 
               return(27); 
            else 
             /* 01000 */ 
             return(11); 
         else 
          /* 00 */ 
          if(getbit()) 
           /* 001 */ 
           if(getbit()) 
            /* 0011 */ 
            if(getbit()) 
             /* 00111 */ 
             return(10); 
            else 
             /* 00110 */ 
             if(getbit()) 
              /* 001101 */ 
              if(getbit()) 
               /* 0011011 */ 
               if(getbit()) 
                /* 00110111 */ 
                return(MAKEUP|384); 
               else 
                /* 00110110 */ 
                return(MAKEUP|320); 
              else 
               /* 0011010 */ 
               if(getbit()) 
                /* 00110101 */ 
                return(0); 
               else 
                /* 00110100 */ 
                return(63); 
             else 
              /* 001100 */ 
              if(getbit()) 
               /* 0011001 */ 
               if(getbit()) 
                /* 00110011 */ 
                return(62); 
               else 
                /* 00110010 */ 
                return(61); 
              else 
               /* 0011000 */ 
               return(28); 
           else 
            /* 0010 */ 
            if(getbit()) 
             /* 00101 */ 
             if(getbit()) 
              /* 001011 */ 
              if(getbit()) 
               /* 0010111 */ 
               return(21); 
              else 
               /* 0010110 */ 
               if(getbit()) 
                /* 00101101 */ 
                return(44); 
               else 
                /* 00101100 */ 
                return(43); 
             else 
              /* 001010 */ 
              if(getbit()) 
               /* 0010101 */ 
               if(getbit()) 
                /* 00101011 */ 
                return(42); 
               else 
                /* 00101010 */ 
                return(41); 
              else 
               /* 0010100 */ 
               if(getbit()) 
                /* 00101001 */ 
                return(40); 
               else 
                /* 00101000 */ 
                return(39); 
            else 
             /* 00100 */ 
             if(getbit()) 
              /* 001001 */ 
              if(getbit()) 
               /* 0010011 */ 
               return(26); 
              else 
               /* 0010010 */ 
               if(getbit()) 
                /* 00100101 */ 
                return(54); 
               else 
                /* 00100100 */ 
                return(53); 
             else 
              /* 001000 */ 
              return(12); 
          else 
           /* 000 */ 
           if(getbit()) 
            /* 0001 */ 
            if(getbit()) 
             /* 00011 */ 
             if(getbit()) 
              /* 000111 */ 
              return(1); 
             else 
              /* 000110 */ 
              if(getbit()) 
               /* 0001101 */ 
               if(getbit()) 
                /* 00011011 */ 
                return(32); 
               else 
                /* 00011010 */ 
                return(31); 
              else 
               /* 0001100 */ 
               return(19); 
            else 
             /* 00010 */ 
             if(getbit()) 
              /* 000101 */ 
              if(getbit()) 
               /* 0001011 */ 
               if(getbit()) 
                /* 00010111 */ 
                return(38); 
               else 
                /* 00010110 */ 
                return(37); 
              else 
               /* 0001010 */ 
               if(getbit()) 
                /* 00010101 */ 
                return(36); 
               else 
                /* 00010100 */ 
                return(35); 
             else 
              /* 000100 */ 
              if(getbit()) 
               /* 0001001 */ 
               if(getbit()) 
                /* 00010011 */ 
                return(34); 
               else 
                /* 00010010 */ 
                return(33); 
              else 
               /* 0001000 */ 
               return(20); 
           else 
            /* 0000 */ 
            if(getbit()) 
             /* 00001 */ 
             if(getbit()) 
              /* 000011 */ 
              return(13); 
             else 
              /* 000010 */ 
              if(getbit()) 
               /* 0000101 */ 
               if(getbit()) 
                /* 00001011 */ 
                return(48); 
               else 
                /* 00001010 */ 
                return(47); 
              else 
               /* 0000100 */ 
               return(23); 
            else 
             /* 00000 */ 
             if(getbit()) 
              /* 000001 */ 
              if(getbit()) 
               /* 0000011 */ 
               return(22); 
              else 
               /* 0000010 */ 
               if(getbit()) 
                /* 00000101 */ 
                return(46); 
               else 
                /* 00000100 */ 
                return(45); 
             else 
              /* 000000 */ 
              if(getbit()) 
               /* 0000001 */ 
               if(getbit()) 
                /* 00000011 */ 
                return(30); 
               else 
                /* 00000010 */ 
                return(29); 
              else 
               /* 0000000 */ 
               return(SEVENOHS); 
        } 
 
int getblack() 
	{ 
	if(getbit()) 
         /* 1 */ 
         if(getbit()) 
          /* 11 */ 
          return(2); 
         else 
          /* 10 */ 
          return(3); 
        else 
         /* 0 */ 
         if(getbit()) 
          /* 01 */ 
          if(getbit()) 
           /* 011 */ 
           return(4); 
          else 
           /* 010 */ 
           return(1); 
         else 
          /* 00 */ 
          if(getbit()) 
           /* 001 */ 
           if(getbit()) 
            /* 0011 */ 
            return(5); 
           else 
            /* 0010 */ 
            return(6); 
          else 
           /* 000 */ 
           if(getbit()) 
            /* 0001 */ 
            if(getbit()) 
             /* 00011 */ 
             return(7); 
            else 
             /* 00010 */ 
             if(getbit()) 
              /* 000101 */ 
              return(8); 
             else 
              /* 000100 */ 
              return(9); 
           else 
            /* 0000 */ 
            if(getbit()) 
             /* 00001 */ 
             if(getbit()) 
              /* 000011 */ 
              if(getbit()) 
               /* 0000111 */ 
               return(12); 
              else 
               /* 0000110 */ 
               if(getbit()) 
                /* 00001101 */ 
                if(getbit()) 
                 /* 000011011 */ 
                 if(getbit()) 
                  /* 0000110111 */ 
                  return(0); 
                 else 
                  /* 0000110110 */ 
                  if(getbit()) 
                   /* 00001101101 */ 
                   if(getbit()) 
                    /* 000011011011 */ 
                    return(43); 
                   else 
                    /* 000011011010 */ 
                    return(42); 
                  else 
                   /* 00001101100 */ 
                   return(21); 
                else 
                 /* 000011010 */ 
                 if(getbit()) 
                  /* 0000110101 */ 
                  if(getbit()) 
                   /* 00001101011 */ 
                   if(getbit()) 
                    /* 000011010111 */ 
                    return(39); 
                   else 
                    /* 000011010110 */ 
                    return(38); 
                  else 
                   /* 00001101010 */ 
                   if(getbit()) 
                    /* 000011010101 */ 
                    return(37); 
                   else 
                    /* 000011010100 */ 
                    return(36); 
                 else 
                  /* 0000110100 */ 
                  if(getbit()) 
                   /* 00001101001 */ 
                   if(getbit()) 
                    /* 000011010011 */ 
                    return(35); 
                   else 
                    /* 000011010010 */ 
                    return(34); 
                  else 
                   /* 00001101000 */ 
                   return(20); 
               else 
                /* 00001100 */ 
                if(getbit()) 
                 /* 000011001 */ 
                 if(getbit()) 
                  /* 0000110011 */ 
                  if(getbit()) 
                   /* 00001100111 */ 
                   return(19); 
                  else 
                   /* 00001100110 */ 
                   if(getbit()) 
                    /* 000011001101 */ 
                    return(29); 
                   else 
                    /* 000011001100 */ 
                    return(28); 
                 else 
                  /* 0000110010 */ 
                  if(getbit()) 
                   /* 00001100101 */ 
                   if(getbit()) 
                    /* 000011001011 */ 
                    return(27); 
                   else 
                    /* 000011001010 */ 
                    return(26); 
                  else 
                   /* 00001100100 */ 
                   if(getbit()) 
                    /* 000011001001 */ 
                    return(MAKEUP|192); 
                   else 
                    /* 000011001000 */ 
                    return(MAKEUP|128); 
                else 
                 /* 000011000 */ 
                 return(15); 
             else 
              /* 000010 */ 
              if(getbit()) 
               /* 0000101 */ 
               return(11); 
              else 
               /* 0000100 */ 
               return(10); 
            else 
             /* 00000 */ 
             if(getbit()) 
              /* 000001 */ 
              if(getbit()) 
               /* 0000011 */ 
               if(getbit()) 
                /* 00000111 */ 
                return(14); 
               else 
                /* 00000110 */ 
                if(getbit()) 
                 /* 000001101 */ 
                 if(getbit()) 
                  /* 0000011011 */ 
                  if(getbit()) 
                   /* 00000110111 */ 
                   return(22); 
                  else 
                   /* 00000110110 */ 
                   if(getbit()) 
                    /* 000001101101 */ 
                    return(41); 
                   else 
                    /* 000001101100 */ 
                    return(40); 
                 else 
                  /* 0000011010 */ 
                  if(getbit()) 
                   /* 00000110101 */ 
                   if(getbit()) 
                    /* 000001101011 */ 
                    return(33); 
                   else 
                    /* 000001101010 */ 
                    return(32); 
                  else 
                   /* 00000110100 */ 
                   if(getbit()) 
                    /* 000001101001 */ 
                    return(31); 
                   else 
                    /* 000001101000 */ 
                    return(30); 
                else 
                 /* 000001100 */ 
                 if(getbit()) 
                  /* 0000011001 */ 
                  if(getbit()) 
                   /* 00000110011 */ 
                   if(getbit()) 
                    /* 000001100111 */ 
                    return(63); 
                   else 
                    /* 000001100110 */ 
                    return(62); 
                  else 
                   /* 00000110010 */ 
                   if(getbit()) 
                    /* 000001100101 */ 
                    return(49); 
                   else 
                    /* 000001100100 */ 
                    return(48); 
                 else 
                  /* 0000011000 */ 
                  return(17); 
              else 
               /* 0000010 */ 
               if(getbit()) 
                /* 00000101 */ 
                if(getbit()) 
                 /* 000001011 */ 
                 if(getbit()) 
                  /* 0000010111 */ 
                  return(16); 
                 else 
                  /* 0000010110 */ 
                  if(getbit()) 
                   /* 00000101101 */ 
                   if(getbit()) 
                    /* 000001011011 */ 
                    return(MAKEUP|256); 
                   else 
                    /* 000001011010 */ 
                    return(61); 
                  else 
                   /* 00000101100 */ 
                   if(getbit()) 
                    /* 000001011001 */ 
                    return(58); 
                   else 
                    /* 000001011000 */ 
                    return(57); 
                else 
                 /* 000001010 */ 
                 if(getbit()) 
                  /* 0000010101 */ 
                  if(getbit()) 
                   /* 00000101011 */ 
                   if(getbit()) 
                    /* 000001010111 */ 
                    return(47); 
                   else 
                    /* 000001010110 */ 
                    return(46); 
                  else 
                   /* 00000101010 */ 
                   if(getbit()) 
                    /* 000001010101 */ 
                    return(45); 
                   else 
                    /* 000001010100 */ 
                    return(44); 
                 else 
                  /* 0000010100 */ 
                  if(getbit()) 
                   /* 00000101001 */ 
                   if(getbit()) 
                    /* 000001010011 */ 
                    return(51); 
                   else 
                    /* 000001010010 */ 
                    return(50); 
                  else 
                   /* 00000101000 */ 
                   return(23); 
               else 
                /* 00000100 */ 
                return(13); 
             else 
              /* 000000 */ 
              if(getbit()) 
               /* 0000001 */ 
               if(getbit()) 
                /* 00000011 */ 
                if(getbit()) 
                 /* 000000111 */ 
                 if(getbit()) 
                  /* 0000001111 */ 
                  return(MAKEUP|64); 
                 else 
                  /* 0000001110 */ 
                  if(getbit()) 
                   /* 00000011101 */ 
                   if(getbit()) 
                    /* 000000111011 */ 
                    if(getbit()) 
                     /* 0000001110111 */ 
                     return(MAKEUP|1216); 
                    else 
                     /* 0000001110110 */ 
                     return(MAKEUP|1152); 
                   else 
                    /* 000000111010 */ 
                    if(getbit()) 
                     /* 0000001110101 */ 
                     return(MAKEUP|1088); 
                    else 
                     /* 0000001110100 */ 
                     return(MAKEUP|1024); 
                  else 
                   /* 00000011100 */ 
                   if(getbit()) 
                    /* 000000111001 */ 
                    if(getbit()) 
                     /* 0000001110011 */ 
                     return(MAKEUP|960); 
                    else 
                     /* 0000001110010 */ 
                     return(MAKEUP|896); 
                   else 
                    /* 000000111000 */ 
                    return(54); 
                else 
                 /* 000000110 */ 
                 if(getbit()) 
                  /* 0000001101 */ 
                  if(getbit()) 
                   /* 00000011011 */ 
                   if(getbit()) 
                    /* 000000110111 */ 
                    return(53); 
                   else 
                    /* 000000110110 */ 
                    if(getbit()) 
                     /* 0000001101101 */ 
                     return(MAKEUP|576); 
                    else 
                     /* 0000001101100 */ 
                     return(MAKEUP|512); 
                  else 
                   /* 00000011010 */ 
                   if(getbit()) 
                    /* 000000110101 */ 
                    return(MAKEUP|448); 
                   else 
                    /* 000000110100 */ 
                    return(MAKEUP|384); 
                 else 
                  /* 0000001100 */ 
                  if(getbit()) 
                   /* 00000011001 */ 
                   if(getbit()) 
                    /* 000000110011 */ 
                    return(MAKEUP|320); 
                   else 
                    /* 000000110010 */ 
                    if(getbit()) 
                     /* 0000001100101 */ 
                     return(MAKEUP|1728); 
                    else 
                     /* 0000001100100 */ 
                     return(MAKEUP|1664); 
                  else 
                   /* 00000011000 */ 
                   return(25); 
               else 
                /* 00000010 */ 
                if(getbit()) 
                 /* 000000101 */ 
                 if(getbit()) 
                  /* 0000001011 */ 
                  if(getbit()) 
                   /* 00000010111 */ 
                   return(24); 
                  else 
                   /* 00000010110 */ 
                   if(getbit()) 
                    /* 000000101101 */ 
                    if(getbit()) 
                     /* 0000001011011 */ 
                     return(MAKEUP|1600); 
                    else 
                     /* 0000001011010 */ 
                     return(MAKEUP|1536); 
                   else 
                    /* 000000101100 */ 
                    return(60); 
                 else 
                  /* 0000001010 */ 
                  if(getbit()) 
                   /* 00000010101 */ 
                   if(getbit()) 
                    /* 000000101011 */ 
                    return(59); 
                   else 
                    /* 000000101010 */ 
                    if(getbit()) 
                     /* 0000001010101 */ 
                     return(MAKEUP|1472); 
                    else 
                     /* 0000001010100 */ 
                     return(MAKEUP|1408); 
                  else 
                   /* 00000010100 */ 
                   if(getbit()) 
                    /* 000000101001 */ 
                    if(getbit()) 
                     /* 0000001010011 */ 
                     return(MAKEUP|1344); 
                    else 
                     /* 0000001010010 */ 
                     return(MAKEUP|1280); 
                   else 
                    /* 000000101000 */ 
                    return(56); 
                else 
                 /* 000000100 */ 
                 if(getbit()) 
                  /* 0000001001 */ 
                  if(getbit()) 
                   /* 00000010011 */ 
                   if(getbit()) 
                    /* 000000100111 */ 
                    return(55); 
                   else 
                    /* 000000100110 */ 
                    if(getbit()) 
                     /* 0000001001101 */ 
                     return(MAKEUP|832); 
                    else 
                     /* 0000001001100 */ 
                     return(MAKEUP|768); 
                  else 
                   /* 00000010010 */ 
                   if(getbit()) 
                    /* 000000100101 */ 
                    if(getbit()) 
                     /* 0000001001011 */ 
                     return(MAKEUP|704); 
                    else 
                     /* 0000001001010 */ 
                     return(MAKEUP|640); 
                   else 
                    /* 000000100100 */ 
                    return(52); 
                 else 
                  /* 0000001000 */ 
                  return(18); 
              else 
               /* 0000000 */ 
               return(SEVENOHS); 
       } 
 
struct header_s 
	{ 
	unsigned char mfgr; 
	unsigned char version; 
	unsigned char encoding; 
	unsigned char bppix; 
	unsigned short xmin; 
	unsigned short ymin; 
	unsigned short xmax; 
	unsigned short ymax; 
	unsigned short hdpi; 
	unsigned short vdpi; 
	unsigned char cmap[48]; 
	unsigned char reserved; 
	unsigned char nplanes; 
	unsigned short bypl; 
	unsigned short paltinf; 
	unsigned short hscrnsz; 
	unsigned short vscrnsz; 
	unsigned char filler[54]; 
	}; 
 
int pcxfd, pagelines; 
struct header_s header; 
 
pcxwriteheader() 
	{ 
	int i; 
	header.mfgr=10; 
	header.version=45; 
	header.encoding=1; 
	header.bppix=1; 
	header.xmin=0; 
	header.ymin=0; 
	header.xmax=1727; 
	header.ymax=pagelines-1; 
	header.hdpi=200; 
	header.vdpi=192; 
	header.reserved=0; 
	header.nplanes=1; 
	header.bypl=216; 
	header.paltinf=1; 
	header.hscrnsz=0; 
	header.vscrnsz=0; 
	for(i=0;i<54;++i) 
		header.filler[i]=0; 
	lseek(pcxfd, (long)0, SEEK_SET); 
	if(write(pcxfd, &header, 128)!=128) 
		{ 
		printf("Error overwriting final pcx file header.\n"); 
		exit(9); 
		} 
	} 
 
unsigned char fcfr[]="+FCFR\r\n\r\n"; 
unsigned char fhng[]="+FHNG"; 
unsigned char connect[]="CONNECT\r\n"; 
 
int scanfcfr() 
	{ 
	int i, j, k; 
	unsigned char c; 
	i=j=k=0; 
	while(read(rfxfd, &c, 1)) 
		{ 
		if(fcfr[i]==c) 
			{ 
			i++; 
			if(fcfr[i]=='\0') 
				return(1); 
			} 
		else 
			i=0; 
		if(connect[k]==c) 
			{ 
			k++; 
			if(connect[k]=='\0') 
				return(0); 
			} 
		else 
			k=0; 
		if(fhng[j]==c) 
			{ 
			j++; 
			if(fhng[j]=='\0') 
				{ 
				printf("End of document. Exit code +FHNG"); 
				while(1) 
					{ 
					if(!read(rfxfd, &c, 1)) 
						{ 
						printf("\nPremature end of file while seeking +FHNG code.\n"); 
						exit(6); 
						} 
					putchar(c); 
					if(c=='\n') 
						break; 
					} 
				exit(0); 
				} 
			} 
		else 
			j=0; 
		} 
	printf("Premature end of file while seeking +FCFR.\n"); 
	exit(5); 
	} 
 
int scanconnect() 
	{ 
	int i; 
	unsigned char c; 
	i=0; 
	while(read(rfxfd, &c, 1)) 
		{ 
		if(connect[i]==c) 
			{ 
			i++; 
			if(connect[i]=='\0') 
				return(0); 
			} 
		else 
			i=0; 
		} 
	printf("Premature end of file while seeking CONNECT.\n"); 
	exit(7); 
	} 
 
int rfxgets(str) 
	unsigned char *str; 
	{ 
	int i; 
	i=0; 
	while(read(rfxfd, &str[i], 1)) 
		if(str[i]=='\r') 
			{ 
			str[i]='\0'; 
			return(i); 
			} 
		else 
			i++; 
	return(-1); 
	} 
 
unsigned char line[216]; 
int linenbits; 
 
putwhite(n) 
	int n; 
	{ 
	int bytenum, i; 
	if(n>(1728-linenbits)) 
		n=1728-linenbits; 
	bytenum=linenbits/8; /* integer division */ 
	for(i=7-(linenbits%8);(i>=0)&&(n>0);i--,n--) 
		{ 
		line[bytenum]|=1<0;--i) 
		line[bytenum++]=0xff; /* We limited n above */ 
	linenbits+=n; 
	} 
 
putblack(n) 
	int n; 
	{ 
	int bytenum, i; 
	if(n>(1728-linenbits)) 
		n=1728-linenbits; 
	bytenum=linenbits/8; /* integer division */ 
	for(i=7-(linenbits%8);(i>=0)&&(n>0);i--,n--) 
		{ 
		line[bytenum]&=~(1<0;--i) 
		line[bytenum++]=0x00; 
	linenbits+=n; 
	} 
 
pcxwriteline(times) 
	int times; 
	{ 
	unsigned char pcxline[432], hold; 
	int pcxnbytes, i, nreps; 
	if(!linenbits) 
		return(0); 
	if(linenbits<1728) 
		putwhite(1728-linenbits); 
	pcxnbytes=0; 
	/* PCX Encode */ 
	hold=line[0]; 
	nreps=i=1; 
	while(1) 
		{ 
		if((i<216)&&(line[i]==hold)) /* Reading beyond item is OK*/ 
			nreps++; 
		else 
			{ 
			if((nreps==1)&&((hold&0xc0)!=0xc0)) 
				pcxline[pcxnbytes++]=hold; 
			else 
				{ 
				while(nreps) 
					{ 
					if(nreps>63) 
						{ 
						pcxline[pcxnbytes++]=63|0xc0; 
						pcxline[pcxnbytes++]=hold; 
						nreps-=63; 
						} 
					else 
						{ 
						pcxline[pcxnbytes++]=nreps|0xc0; 
						pcxline[pcxnbytes++]=hold; 
						nreps=0; 
						} 
					} 
				nreps=1; /* This is a little ahead */ 
				} 
			} 
		if(i<216) 
			hold=line[i++]; 
		else 
			break; 
		} 
	/* Write encoded line */ 
	for(i=0;i [/debug]\n"); 
		exit(10); 
		} 
	if(argc==3) 
		debug=1; 
	else 
		debug=0; 
	if((rfxfd=open(argv[1], O_RDONLY|O_BINARY))==-1) 
		{ 
		printf("Error opening %s for read.\n", argv[1]); 
		exit(11); 
		} 
	while(1) 
		{ 
		if(!read(rfxfd, &c, 1)) 
			{ 
			printf("Premature end of file while seeking initial doublequote.\n"); 
			exit(12); 
			} 
		if(c=='"') 
			break; 
		} 
	printf("Sender ID: "); 
	while(1) 
		{ 
		if(!read(rfxfd, &c, 1)) 
			{ 
			printf("Premature end of file while seeking final doublequote.\n"); 
			exit(13); 
			} 
		if(c=='"') 
			break; 
		putchar(c); 
		} 
	putchar('\n'); 
	page=0; 
	gotfcfr=0; 
	while(1) 
		{ 
		page++; 
		if(scanfcfr()) /* Normal exit is in this function */ 
			{ 
			if(rfxgets(str)==-1) 
				{ 
				printf("Premature end of file while seeking +FDCS.\n"); 
				exit(15); 
				} 
			if(sscanf(str, " +FDCS: %d,%*d,%d,%*d,%d,%*d,%*d,%*d", 
				&dcsvr, &dcswd, &dcsdf)!=3) 
				{ 
				printf("Error scanning +FDCS params.\n"); 
				exit(14); 
				} 
			else 
				gotfcfr=1; 
			if(dcsvr) 
				printf("High vertical resolution.\n"); 
			else 
				printf("Standard vertical resolution.\n"); 
			if(dcswd) 
				{ 
				printf("Non-supported width!\n"); 
				exit(13); 
				} 
			if(dcsdf) 
				{ 
				printf("Non-supported coding scheme (must be 1-D)!\n"); 
				exit(14); 
				} 
			scanconnect(); 
			gotfcfr=1; 
			} 
		if(!gotfcfr) 
			{ 
			printf("Never got initial +FCFR; aborting.\n"); 
			exit(60); 
			} 
		bitmask=0; 
		while(1) 
			{ 
			printf("Enter filename for Page %d (include .PCX):\n--> ", page); 
			gets(str); 
			if((pcxfd=open(str, O_CREAT|O_BINARY|O_TRUNC|O_WRONLY, S_IWRITE))!=-1) 
				break; 
			else 
				printf("Error opening file.\n"); 
			} 
		/* Save a dummy block for PCX file header */ 
		if(write(pcxfd, str, 128)!=128) 
			{ 
			printf("Error writing dummy header to file.\n"); 
			exit(20); 
			} 
		/* Translate */ 
		pagelines=0; 
		while(getbit()); /* flush Panafax 1 bits */ 
		while(!getbit()); /* flush initial EOL */ 
		if(debug) 
			printf(" = EOL\n"); 
		dopage=1; 
		if(!setjmp(where)) /* returns -1 magically on DLE ETX */ 
			while(1) 
				{ 
				/* loop over lines */ 
				linenbits=npelschk=0; 
				while(1) 
					{ 
					/* loop over symbols */ 
					symbol=getwhite(); 
					if(debug) 
						{ 
						printf(" = %d White", symbol&0x0fff); 
						if(symbol&MAKEUP) 
							printf(" Makeup\n"); 
						else 
							printf("\n"); 
						} 
					bitcount=symbol&0x0fff; 
					if(symbol&MAKEUP) 
						{ 
						if(symbol==SEVENOHS) 
							break; 
						symbol=getwhite(); 
						if(debug) 
							{ 
							printf(" = %d White", symbol&0x0fff); 
							if(symbol&MAKEUP) 
								printf(" Makeup\n"); 
							else 
								printf("\n"); 
							} 
						if(symbol&MAKEUP) 
							{ 
							printf("Error: sequential makeups.\n"); 
							abortpage(); 
							dopage=0; 
							break; 
							} 
						bitcount+=symbol&0x0fff; 
						} 
					npelschk+=bitcount; 
					putwhite(bitcount); 
					symbol=getblack(); 
					if(debug) 
						{ 
						printf(" = %d Black", symbol&0x0fff); 
						if(symbol&MAKEUP) 
							printf(" Makeup\n"); 
						else 
							printf("\n"); 
						} 
					bitcount=symbol&0x0fff; 
					if(symbol&MAKEUP) 
						{ 
						if(symbol==SEVENOHS) 
							break; 
						symbol=getblack(); 
						if(debug) 
							{ 
							printf(" = %d Black", symbol&0x0fff); 
							if(symbol&MAKEUP) 
								printf(" Makeup\n"); 
							else 
								printf("\n"); 
							} 
						if(symbol&MAKEUP) 
							{ 
							printf("Error: sequential makeups.\n"); 
							abortpage(); 
							dopage=0; 
							break; 
							} 
						bitcount+=symbol&0x0fff; 
						} 
					npelschk+=bitcount; 
					putblack(bitcount); 
					} 
				if(!dopage) 
					break; 
				if(npelschk&&(npelschk!=1728)) 
					printf("Line %d bad; %d pels.\n", pagelines/(2-dcsvr), npelschk); 
				pcxwriteline(2-dcsvr); 
				while(!getbit()); 
				if(debug) 
					printf(" = EOL\n"); 
				} 
		else 
			pcxwriteline(2-dcsvr); 
		pcxwriteheader(); 
		close(pcxfd); 
		printf("Page translate completed.\n"); 
		} 
	}