uucode.c 1.1 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. char *dstd;
  7. int b;
  8. int n;
  9. int i;
  10. if(*offset >= d->size)
  11. return 0;
  12. b = d->size - *offset;
  13. if(b>45) b = 45;
  14. for(i=0; i<b; i++) {
  15. srcbuf[i] = d->data[*offset + i];
  16. *checksum += (unsigned char) srcbuf[i];
  17. }
  18. for(i=0; i<3; i++)
  19. srcbuf[b+i] = 0;
  20. dst[0] = b;
  21. dstd = &dst[1];
  22. n = 0;
  23. for(i=0; i<b; i+=3) {
  24. dstd[0] = (srcbuf[i]>>2) & 0x3f;
  25. dstd[1] = (srcbuf[i]<<4 & 0x30) | (srcbuf[i+1]>>4 & 0x0f);
  26. dstd[2] = (srcbuf[i+1]<<2 &0x3c) | (srcbuf[i+2]>>6 & 0x03);
  27. dstd[3] = srcbuf[i+2] & 0x3f;
  28. dstd += 4;
  29. n += 4;
  30. }
  31. for(i=0; i<n+1; i++) {
  32. if(dst[i])
  33. dst[i] += ' ';
  34. else
  35. dst[i] = '`';
  36. }
  37. dstd[0] = 0;
  38. *offset += b;
  39. if(*offset >= d->size)
  40. return 2;
  41. return 1;
  42. }
  43. void uudecode_line(struct sprog_data *d, const char *src, int *checksum) {
  44. d = 0;
  45. src = 0;
  46. checksum = 0;
  47. return;
  48. }