?? uudecode.c
字號:
/* UUDECODE - a Win32 utility to uudecode single files.
*
* Copyright (C) 1998 Clem Dye
*
* Modified by Sword Du
* Data: Nov 27, 2007
*/
#include "uudecode.h"
int uudecode(char* src, char* dest)
{
int n;
char* dest_bgn = dest;
while (1) {
switch(*src) {
case '\r':
case '\n':
src++;
break;
case 'b':
if (str_ncmp(src, "begin", 5) == 0) {
while (*src++ != '\r');
break;
}
return -1; // begin not match
case 'e':
if (str_ncmp(src, "end", 3) == 0)
return ((dest - dest_bgn) / sizeof(char)); // success to decode
return -2; // end not match
default:
n = DEC(*src);
if (n < 0)
return -3; // lenght invalid
for (src++; n > 0; src += 4, n -= 3) {
if (n >= 3) {
*dest++ = DEC(src[0]) << 2 | DEC(src[1]) >> 4;
*dest++ = DEC(src[1]) << 4 | DEC(src[2]) >> 2;
*dest++ = DEC(src[2]) << 6 | DEC(src[3]);
} else {
if (n >= 1)
*dest++ = DEC(src[0]) << 2 | DEC(src[1]) >> 4;
if (n >= 2)
*dest++ = DEC(src[1]) << 4 | DEC(src[2]) >> 2;
}
}
break;
}
}
return -4;
}
/*
int main(int argc, char *argv[])
{
FILE *f;
int i, len;
char ch, data[10000];
if (argc <= 1) {
printf("Don't type source file\n");
return -1;
}
if ((f = fopen(argv[1], "rb"))== NULL) {
printf("I can't find %s\n", argv[1]);
return -2;
}
i = 0;
while ((ch = fgetc(f)) != 'd')
data[i++] = ch;
data[i] = 'd';
if ((len = uudecode(data, data)) < 0)
return -3;
fclose(f);
f = fopen(argv[2], "wb");
if (f == NULL) {
printf("I can't find %s\n", argv[2]);
return -4;
}
i = 0;
while (i < len)
fputc(data[i++], f);
fclose(f);
printf("Result decoded in %s\n", argv[2]);
return 0;
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -