|
|
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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/14193c400f11.html, оценка из 5, голосов 10
|