home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / macutils.lzh / MACUTILS / MACUNPACK / bin.c < prev    next >
C/C++ Source or Header  |  1995-09-18  |  2KB  |  69 lines

  1. #include "macunpack.h"
  2. #ifdef BIN
  3. #include "globals.h"
  4. #include "../fileio/machdr.h"
  5. #include "../fileio/wrfile.h"
  6. #include "../fileio/kind.h"
  7. #include "../util/util.h"
  8. #include "../util/masks.h"
  9.  
  10. extern void mcb();
  11.  
  12. void bin(header, data_size, UMcp)
  13. char *header;
  14. int data_size, UMcp;
  15. {
  16.     char hdr[INFOBYTES];
  17.     unsigned long rsrcLength, dataLength;
  18.  
  19.     hdr[0] = getb(infp);
  20.     (void)ungetc(hdr[0], infp);
  21.     if(hdr[0] != 0) {
  22.     if(!strncmp(header + I_AUTHOFF, "BnHq", 4) && hdr[0] == '(') {
  23.         do_indent(indent);
  24.         (void)fprintf(stderr, "Sorry, this is a fake BinHex 5.0 file.  ");
  25.         (void)fprintf(stderr, "Debinhex with hexbin first.\n");
  26. #ifdef SCAN
  27.         do_error("macunpack: fake BinHex 5.0");
  28. #endif /* SCAN */
  29.     } else {
  30.         do_indent(indent);
  31.         (void)fprintf(stderr, "Sorry, contents not recognized.\n");
  32. #ifdef SCAN
  33.         do_error("macunpack: contents not recognized");
  34. #endif /* SCAN */
  35.     }
  36.     do_indent(indent);
  37.     (void)fprintf(stderr, "Copying as a plain file.\n");
  38. #ifdef SCAN
  39.     do_idf("", COPY);
  40. #endif /* SCAN */
  41.     mcb(header, (unsigned long)in_data_size, (unsigned long)in_rsrc_size,
  42.         in_ds + in_rs);
  43.     ds_skip = 0;
  44.     rs_skip = 0;
  45.     in_ds = 0;
  46.     in_rs = 0;
  47.     return;
  48.     }
  49.     if(fread(hdr, 1, INFOBYTES - 1, infp) != INFOBYTES) {
  50.     (void)fprintf(stderr, "Can't read file header\n");
  51. #ifdef SCAN
  52.     do_error("macunpack: Can't read file header");
  53. #endif /* SCAN */
  54.     exit(1);
  55.     }
  56.     rsrcLength = get4(hdr + I_RLENOFF);
  57.     dataLength = get4(hdr + I_DLENOFF);
  58.     if(UMcp) {
  59.     /* Why this?  Moreover, we are losing the bundle bit! */
  60.     put4(hdr + I_RLENOFF, ++rsrcLength);
  61.     put4(hdr + I_DLENOFF, ++dataLength);
  62.     }
  63.     mcb(hdr, rsrcLength, dataLength, data_size - INFOBYTES);
  64. }
  65. #else /* BIN */
  66. int bin; /* keep lint and some compilers happy */
  67. #endif /* BIN */
  68.  
  69.