home *** CD-ROM | disk | FTP | other *** search
- #include "globals.h"
- #include "../util/util.h"
- #include "buffer.h"
- #include "../fileio/wrfile.h"
-
- extern char *malloc();
- extern char *realloc();
- extern void exit();
-
- char *data_fork, *rsrc_fork;
- int data_size, rsrc_size;
- static int max_data_size, max_rsrc_size;
- static int do_data;
-
- void put_byte(c)
- char c;
- {
- if(do_data) {
- if(data_size >= max_data_size) {
- if(max_data_size == 0) {
- data_fork = malloc(1024);
- } else {
- data_fork = realloc(data_fork, (unsigned)max_data_size + 1024);
- }
- max_data_size += 1024;
- if(data_fork == NULL) {
- (void)fprintf(stderr, "Insufficient memory.\n");
- exit(1);
- }
- }
- data_fork[data_size++] = c;
- } else {
- if(rsrc_size >= max_rsrc_size) {
- if(max_rsrc_size == 0) {
- rsrc_fork = malloc(1024);
- } else {
- rsrc_fork = realloc(rsrc_fork, (unsigned)max_rsrc_size + 1024);
- }
- max_rsrc_size += 1024;
- if(rsrc_fork == NULL) {
- (void)fprintf(stderr, "Insufficient memory.\n");
- exit(1);
- }
- }
- rsrc_fork[rsrc_size++] = c;
- }
- }
-
- void set_put(data)
- int data;
- {
- do_data = data;
- if(do_data) {
- data_size = 0;
- } else {
- rsrc_size = 0;
- }
- }
-
- void end_put()
- {
- if(info_only) {
- return;
- }
- start_info(info, (unsigned long)rsrc_size, (unsigned long)data_size);
- if(data_size != 0) {
- start_data();
- copy(out_ptr, data_fork, data_size);
- }
- if(rsrc_size != 0) {
- start_rsrc();
- copy(out_ptr, rsrc_fork, rsrc_size);
- }
- end_file();
- }
-
-