~ubuntu-branches/ubuntu/vivid/macutils/vivid

« back to all changes in this revision

Viewing changes to hexbin/buffer.c

  • Committer: Bazaar Package Importer
  • Author(s): Eric Sharkey
  • Date: 2001-10-27 15:22:18 UTC
  • Revision ID: james.westby@ubuntu.com-20011027152218-oikhfgiaja3hjf5f
Tags: upstream-2.0b3
ImportĀ upstreamĀ versionĀ 2.0b3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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