home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / macutils.lzh / MACUTILS / HEXBIN / buffer.c < prev    next >
C/C++ Source or Header  |  1996-02-01  |  1KB  |  77 lines

  1. #include "globals.h"
  2. #include "../util/util.h"
  3. #include "buffer.h"
  4. #include "../fileio/wrfile.h"
  5.  
  6. extern char *malloc();
  7. extern char *realloc();
  8. extern void exit();
  9.  
  10. char *data_fork, *rsrc_fork;
  11. int data_size, rsrc_size;
  12. static int max_data_size, max_rsrc_size;
  13. static int do_data;
  14.  
  15. void put_byte(c)
  16. char c;
  17. {
  18.     if(do_data) {
  19.     if(data_size >= max_data_size) {
  20.         if(max_data_size == 0) {
  21.         data_fork = malloc(1024);
  22.         } else {
  23.         data_fork = realloc(data_fork, (unsigned)max_data_size + 1024);
  24.         }
  25.         max_data_size += 1024;
  26.         if(data_fork == NULL) {
  27.         (void)fprintf(stderr, "Insufficient memory.\n");
  28.         exit(1);
  29.         }
  30.     }
  31.     data_fork[data_size++] = c;
  32.     } else {
  33.     if(rsrc_size >= max_rsrc_size) {
  34.         if(max_rsrc_size == 0) {
  35.         rsrc_fork = malloc(1024);
  36.         } else {
  37.         rsrc_fork = realloc(rsrc_fork, (unsigned)max_rsrc_size + 1024);
  38.         }
  39.         max_rsrc_size += 1024;
  40.         if(rsrc_fork == NULL) {
  41.         (void)fprintf(stderr, "Insufficient memory.\n");
  42.         exit(1);
  43.         }
  44.     }
  45.     rsrc_fork[rsrc_size++] = c;
  46.     }
  47. }
  48.  
  49. void set_put(data)
  50. int data;
  51. {
  52.     do_data = data;
  53.     if(do_data) {
  54.     data_size = 0;
  55.     } else {
  56.     rsrc_size = 0;
  57.     }
  58. }
  59.  
  60. void end_put()
  61. {
  62.     if(info_only) {
  63.     return;
  64.     }
  65.     start_info(info, (unsigned long)rsrc_size, (unsigned long)data_size);
  66.     if(data_size != 0) {
  67.     start_data();
  68.     copy(out_ptr, data_fork, data_size);
  69.     }
  70.     if(rsrc_size != 0) {
  71.     start_rsrc();
  72.     copy(out_ptr, rsrc_fork, rsrc_size);
  73.     }
  74.     end_file();
  75. }
  76.  
  77.