Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Stas Degteff                         2:50/207       12 Jan 2002  11:24:54
 To : Evgen Kondratyuk
 Subject : [?]  ужен алгоритм UUE!!!
 -------------------------------------------------------------------------------- 
 
 
    Привет, Evgen!
 
  EK> Сабж!. Если у кого есть алгоритм или исходники плиз. Заранее
  EK> благодарен.
 
 #define UUDEC(n) (n - ' ') & 077
 #define UUENC(n) (n != 0) ? (((n) & 077) + ' ') : '`'
 
 int uuencode( FILE *infd, FILE *outfd, const char*filename,
               const unsigned section, const unsigned sectsize)
 {
   int i, a, b, c, d, j = 0;
   char buf[UUBUFSIZE];
 
   log(DL_FUNC,"uuencode()");
 
   switch( section ){
    case 1: fprintf(outfd, "section 1 of file %s\n\nbegin 664 %s\n", filename,
 filename);
    case 0: fprintf(outfd, "\n\nbegin 664 %s\n", filename);
            break;
   default: fprintf(outfd, "section %d of file %s\n\n", section, filename);
   }
 
   do{ /* uuencode loop */
     memset(buf, 0, sizeof(buf));
 
     /* Read 45 bytes from input file */
     j=fread(buf, 1, sizeof(buf), infd);
 
     /* write line length */
     fputc(UUENC(j), outfd);
 
     /* encode data & write line to ooutput stream */
     for (i = 0; i < j; i += 3)
     {   a = buf[i] >> 2;
         b = ((buf[i] << 4) & 060) | ((buf[i+1] >> 4) & 017);
         c = ((buf[i+1] << 2) & 074) | ((buf[i+2] >> 6) & 03);
         d = buf[i+2] & 077;
 
         fputc(UUENC(a), outfd);
         fputc(UUENC(b), outfd);
         fputc(UUENC(c), outfd);
         fputc(UUENC(d), outfd);
     }
     fprintf(outfd, "\n");
 
   }while( j && !feof(infd) && !ferror(infd) );
 
   if( feof(infd) ) fprintf(outfd, "end\n");
   if( ferror(infd) )
   { logerr(DL_ERR, errno, "uuencode(): File read error");
     return ferror(infd);
   }
 
   log(DL_FUNC,"uuencode() OK");
   return 0;
 }
 
 int uudecode(char *name, FILE *from)
 {
     FILE *to;
     char buf[STRINGSIZE];
     int i;
     int a, b, c, d;
 
   log(DL_FUNC,"fromUUE()");
 
     if ((to = fopen(name, "wb")) == NULL)
         return -1;
 
     while ((i = UUDEC(fgetc(from))) != 0)
     {   while (i > 0)
         {   a = UUDEC(fgetc(from));
             b = UUDEC(fgetc(from));
             c = UUDEC(fgetc(from));
             d = UUDEC(fgetc(from));
 
             if (i-- > 0)
                 fputc((char)(a<<2)|(b>>4), to);
             if (i-- > 0)
                 fputc((char)(b<<4)|(c>>2), to);
             if (i-- > 0)
                 fputc((char)(c<<6)|(d), to);
         }
         fgets(buf, STRINGSIZE, from);
     }
     fclose(to);
 
   log(DL_FUNC,"fromUUE() OK");
   return 0;
 }
 Stas Degteff
 ICQ UIN: 24628713
 
 --- GED3 --- 2:50/207 --- 2:5080/102 --- 7:1500/102
  * Origin: Grumbler@work, New Urengoy city (2:50/207)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 [?] ужен алгоритм UUE!!!   Evgen Kondratyuk   10 Jan 2002 18:15:24 
 [?] ужен алгоритм UUE!!!   Stas Degteff   12 Jan 2002 11:24:54 
Архивное /ru.algorithms/14193c400f11.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional