uudecode


Ce programme vous permet d'extraire un document uuencodé dans un message comme c'est souvent le cas dans les posts sur les newsgroups. Aprés avoir compilé avec gcc, il suffit de lancer le programme avec le nom du fichier texte qui contient le fichier encodé.
#include <stdio.h>

#define DEC(Char) (((Char) - ' ') & 077)

void uu_dec (FILE *in, FILE *out)
{
  unsigned char buf[256];
  int n;
  unsigned char *p;

  while (1) {
    if (fgets (buf, sizeof(buf), in) == NULL) return;
    p = buf;
    n = DEC (*p);
    if (n <= 0) break;
    for (++p; n > 0; p += 4, n -= 3) {
      if (n >= 3) {
        fprintf(out,"%c",DEC (p[0]) << 2 | DEC (p[1]) >> 4 & 0x3);
        fprintf(out,"%c",DEC (p[1]) << 4 | DEC (p[2]) >> 2 & 0xF);
        fprintf(out,"%c",DEC (p[2]) << 6 | DEC (p[3]) & 0x3F );
      } else {
        if (n >= 1) fprintf(out,"%c",DEC (p[0]) << 2 | DEC (p[1]) >> 4 & 0x3);
        if (n >= 2) fprintf(out,"%c",DEC (p[1]) << 4 | DEC (p[2]) >> 2 & 0xF);
      }
    }
  }
}


int main ( int argc, char *argv[] ) {

  FILE *f, *g;
  char b[256], fn[256];

  if ( !(f = fopen(argv[1],"r"))) exit(1) ;

  while( fgets(b, sizeof(b), f) != NULL ) {
    if ( ! strncmp(b,"begin", 5) ) {
      sscanf(b+10,"%s",fn);
      g = fopen(fn,"wb");
      uu_dec(f,g);
      fclose(g);
      break;
    }
  }
  fclose(f);
  return 0;
}