uucode.c 1.0 KB

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