uucode.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <sprog.h>
  2. #include <uucode.h>
  3. /* aaaa aa|aa bbbb|bbbb cc|cc cccc */
  4. int uuencode_line(const struct sprog_data *d, char *dst, int *offset, int *checksum) {
  5. char srcbuf[64];
  6. unsigned char sum;
  7. char *dstd;
  8. int b;
  9. int n;
  10. int i;
  11. b = d->size - *offset;
  12. if(b>45) b = 45;
  13. sum = 0;
  14. for(i=0; i<b; i++) {
  15. srcbuf[i] = d->data[*offset + i];
  16. sum += srcbuf[i];
  17. *checksum += srcbuf[i];
  18. }
  19. for(i=0; i<3; i++)
  20. srcbuf[b+i] = 0;
  21. dst[0] = b;
  22. dstd = &dst[1];
  23. n = 0;
  24. for(i=0; i<b; i+=3) {
  25. dstd[0] = srcbuf[i]>>2;
  26. dstd[1] = srcbuf[i]<<4 | srcbuf[i+1]>>4;
  27. dstd[2] = srcbuf[i+1]<<2 | srcbuf[i+2]>>6;
  28. dstd[3] = srcbuf[i+2];
  29. dstd += 4;
  30. n += 4;
  31. }
  32. for(i=0; i<n+1; i++) {
  33. dst[i] &= 0x3f;
  34. if(dst[i])
  35. dst[i] += ' ';
  36. else
  37. dst[i] = '`';
  38. }
  39. dstd[0] = 0;
  40. if(*offset >= d->size)
  41. return 0;
  42. *offset += b;
  43. return 1;
  44. }
  45. void uudecode_line(struct sprog_data *d, const char *src, int *checksum) {
  46. d = 0;
  47. src = 0;
  48. checksum = 0;
  49. return;
  50. }