ruby-gdchart 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +81 -0
- data/README +47 -0
- data/examples/bar_example.rb +23 -0
- data/examples/line_example.rb +27 -0
- data/examples/pie_example.rb +19 -0
- data/ext/extconf.rb +35 -0
- data/ext/gdchart.c +1123 -0
- data/ext/gdchart0.11.5dev/Makefile +145 -0
- data/ext/gdchart0.11.5dev/README.txt +87 -0
- data/ext/gdchart0.11.5dev/array_alloc.c +183 -0
- data/ext/gdchart0.11.5dev/array_alloc.h +41 -0
- data/ext/gdchart0.11.5dev/ft_samp.c +89 -0
- data/ext/gdchart0.11.5dev/ft_samp.sav +89 -0
- data/ext/gdchart0.11.5dev/gdc.c +310 -0
- data/ext/gdchart0.11.5dev/gdc.h +158 -0
- data/ext/gdchart0.11.5dev/gdc_pie.c +691 -0
- data/ext/gdchart0.11.5dev/gdc_pie_samp.c +77 -0
- data/ext/gdchart0.11.5dev/gdc_samp1.c +47 -0
- data/ext/gdchart0.11.5dev/gdc_samp2.c +88 -0
- data/ext/gdchart0.11.5dev/gdchart.c +2193 -0
- data/ext/gdchart0.11.5dev/gdchart.h +248 -0
- data/ext/gdchart0.11.5dev/gdcpie.h +85 -0
- data/ext/gdchart0.11.5dev/price_conv.c +93 -0
- metadata +67 -0
@@ -0,0 +1,145 @@
|
|
1
|
+
CC=gcc
|
2
|
+
# gcc 2.7.1 or better is required
|
3
|
+
# CFLAGS=
|
4
|
+
# CFLAGS=-g -ansi -pedantic
|
5
|
+
|
6
|
+
# ----- build path -----
|
7
|
+
GDC_INCL=./
|
8
|
+
GDC_LD=./
|
9
|
+
GDC_LIB=libgdc.a
|
10
|
+
|
11
|
+
# ----- install locations -----
|
12
|
+
PREFIX_INC = /usr/local/include
|
13
|
+
PREFIX_LIB = /usr/local/lib
|
14
|
+
|
15
|
+
# INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include
|
16
|
+
|
17
|
+
# ----- lib gd -----
|
18
|
+
# GDChart requires the gd library - www.boutell.com/gd/
|
19
|
+
# gd 2.0.28 or better is required (GIF support has returned to libgd)
|
20
|
+
# if it's not installed in a standard location edit these lines for your installation
|
21
|
+
GD_INCL=/usr/local/include/
|
22
|
+
GD_LD=/usr/local/lib/
|
23
|
+
#GD_LIB=libgd.so
|
24
|
+
# a static libgd is also available
|
25
|
+
GD_LIB=libgd.a
|
26
|
+
|
27
|
+
# ----- lib png -----
|
28
|
+
# libgd requires libpng
|
29
|
+
# if it's not installed in a standard location edit these lines for your installation
|
30
|
+
# PNG_INCL = ../libpng-1.0.8
|
31
|
+
# PNG_LD = ../libpng-1.0.8
|
32
|
+
|
33
|
+
# ----- lib z -----
|
34
|
+
# libgd requires zlib
|
35
|
+
# if it's not installed in a standard location edit these lines for your installation
|
36
|
+
# ZLIB_INCL = ../zlib-1.1.3
|
37
|
+
# ZLIB_LD = ../zlib-1.1.3
|
38
|
+
|
39
|
+
# ----- lib jpeg -----
|
40
|
+
# libgd optionally uses libjpeg to produce JPEG images
|
41
|
+
# JPEG_INCL = ../libjpeg
|
42
|
+
# JPEG_LD = ../libjpeg
|
43
|
+
JPEG_DEF = -DHAVE_JPEG
|
44
|
+
JPEG_LK = -ljpeg
|
45
|
+
|
46
|
+
# libgd optionally uses libfreetype to use TTFs
|
47
|
+
# FT_LD = /usr/local/lib
|
48
|
+
FT_DEF = -DHAVE_LIBFREETYPE
|
49
|
+
FT_LK = -lfreetype
|
50
|
+
|
51
|
+
DEFS = $(FT_DEF) $(JPEG_DEF)
|
52
|
+
LIBS = $(FT_LK) $(JPEG_LK)
|
53
|
+
|
54
|
+
LIB_PATHS = -L$(GD_LD) -L$(GDC_LD)
|
55
|
+
# if not installed in standard paths (/lib, /usr/lib), or LD_LIBRARY_PATH
|
56
|
+
# LIB_PATHS = -L$(GD_LD) -L$(PNG_LD) -L$(ZLIB_LD) -L$(JPEG_LD)
|
57
|
+
|
58
|
+
# NOTE:
|
59
|
+
# libpng, libz, etc. are usually linked in as dynamic libs
|
60
|
+
# either use a link line similar to one of these, or set environment LD_LIBRARY_PATH
|
61
|
+
# these should likely be absolute paths, as resolved at runtime
|
62
|
+
# LIB_PATHS = $(LIB_PATHS) -R$(PNG_LD) -R$(ZLIB_LD)
|
63
|
+
# LIB_PATHS = $(LIB_PATHS) -Xlinker -rpath -Xlinker $(PNG_LD) -Xlinker -rpath -Xlinker $(ZLIB_LD)
|
64
|
+
|
65
|
+
|
66
|
+
all: libgdc.a gdc_samp1 gdc_samp2 gdc_pie_samp ft_samp
|
67
|
+
|
68
|
+
# --- compile the samples ---
|
69
|
+
gdc_pie_samp.o: $(GDC_INCL)gdc.h $(GDC_INCL)gdcpie.h gdc_pie_samp.c
|
70
|
+
$(CC) $(CFLAGS) -I$(GDC_INCL) $(DEFS) -c gdc_pie_samp.c
|
71
|
+
|
72
|
+
gdc_samp1.o: $(GDC_INCL)gdc.h $(GDC_INCL)gdchart.h gdc_samp1.c
|
73
|
+
$(CC) $(CFLAGS) -I$(GDC_INCL) $(DEFS) -c gdc_samp1.c
|
74
|
+
|
75
|
+
gdc_samp2.o: $(GDC_INCL)gdc.h $(GDC_INCL)gdchart.h gdc_samp2.c
|
76
|
+
$(CC) $(CFLAGS) -I$(GDC_INCL) $(DEFS) -c gdc_samp2.c
|
77
|
+
|
78
|
+
ft_samp.o: $(GDC_INCL)gdc.h $(GDC_INCL)gdchart.h ft_samp.c
|
79
|
+
$(CC) $(CFLAGS) -I$(GDC_INCL) $(DEFS) -c ft_samp.c
|
80
|
+
|
81
|
+
# --- link the samples ---
|
82
|
+
gdc_samp1: $(GDC_LD)libgdc.a gdc_samp1.o $(GD_LD)/$(GD_LIB) $(GDC_LD)/$(GDC_LIB)
|
83
|
+
$(CC) -o gdc_samp1 \
|
84
|
+
gdc_samp1.o \
|
85
|
+
$(LIB_PATHS) \
|
86
|
+
-lgdc -lgd -lz -lpng $(LIBS) -lm
|
87
|
+
|
88
|
+
gdc_samp2: $(GDC_LD)libgdc.a gdc_samp2.o $(GD_LD)/$(GD_LIB) $(GDC_LD)/$(GDC_LIB)
|
89
|
+
$(CC) -o gdc_samp2 \
|
90
|
+
gdc.o gdchart.o price_conv.o \
|
91
|
+
gdc_samp2.o \
|
92
|
+
$(LIB_PATHS) \
|
93
|
+
-lgdc -lgd -lz -lpng $(LIBS) -lm
|
94
|
+
|
95
|
+
gdc_pie_samp: $(GDC_LD)libgdc.a gdc_pie_samp.o $(GD_LD)/$(GD_LIB) $(GDC_LD)/$(GDC_LIB)
|
96
|
+
$(CC) -o gdc_pie_samp \
|
97
|
+
gdc.o gdc_pie.o price_conv.o \
|
98
|
+
gdc_pie_samp.o \
|
99
|
+
$(LIB_PATHS) \
|
100
|
+
-lgdc -lgd -lz -lpng $(LIBS) -lm
|
101
|
+
|
102
|
+
ft_samp: $(GDC_LD)libgdc.a ft_samp.o $(GD_LD)/$(GD_LIB) $(GDC_LD)/$(GDC_LIB)
|
103
|
+
$(CC) -o ft_samp \
|
104
|
+
gdc.o gdchart.o price_conv.o \
|
105
|
+
ft_samp.o \
|
106
|
+
$(LIB_PATHS) \
|
107
|
+
-lgdc -lgd -lz -lpng $(LIBS) -lm
|
108
|
+
|
109
|
+
# --- compile the lib ---
|
110
|
+
#gdc.h: $(GD_INCL)gd.h $(GD_INCL)gdfonts.h $(GD_INCL)gdfontt.h $(GD_INCL)gdfontmb.h $(GD_INCL)gdfontg.h $(GD_INCL)gdfontl.h $(GDC_INCL)array_alloc.h
|
111
|
+
gdc.h: array_alloc.h
|
112
|
+
|
113
|
+
price_conv.o: price_conv.c
|
114
|
+
$(CC) $(CFLAGS) -c price_conv.c
|
115
|
+
|
116
|
+
gdc.o: gdc.c $(GDC_INCL)gdc.h
|
117
|
+
$(CC) $(CFLAGS) -I$(GD_INCL) -I$(GDC_INCL) $(DEFS) -c gdc.c
|
118
|
+
|
119
|
+
gdc_pie.o: $(GDC_INCL)gdc.h $(GDC_INCL)gdcpie.h gdc_pie.c
|
120
|
+
$(CC) $(CFLAGS) -I$(GD_INCL) -I$(GDC_INCL) $(DEFS) -c gdc_pie.c
|
121
|
+
|
122
|
+
gdchart.o: $(GDC_INCL)gdc.h $(GDC_INCL)gdchart.h gdchart.c
|
123
|
+
$(CC) $(CFLAGS) -I$(GD_INCL) -I$(GDC_INCL) $(DEFS) -c gdchart.c
|
124
|
+
|
125
|
+
array_alloc.o: array_alloc.c array_alloc.h
|
126
|
+
$(CC) $(CFLAGS) -c array_alloc.c
|
127
|
+
|
128
|
+
libgdc.a: price_conv.o gdc.o gdc_pie.o gdchart.o array_alloc.o
|
129
|
+
ar cr libgdc.a gdc.o gdchart.o gdc_pie.o price_conv.o array_alloc.o
|
130
|
+
ranlib libgdc.a
|
131
|
+
|
132
|
+
# --- supporting libraries ---
|
133
|
+
# should be compile & installed separately
|
134
|
+
# $(GD_LD)/$(GD_LIB):
|
135
|
+
# cd $(GD_LD) ; make -f Makefile $(GD_LIB)
|
136
|
+
|
137
|
+
# ----- install -----
|
138
|
+
install: gdc.h gdchart.h gdcpie.h libgdc.a
|
139
|
+
cp gdc.h gdchart.h gdcpie.h $(PREFIX_INC)/
|
140
|
+
cp libgdc.a $(PREFIX_LIB)/
|
141
|
+
|
142
|
+
# --- clean ---
|
143
|
+
clean:
|
144
|
+
rm -f *.o *.a gdc_samp1 gdc_samp2 gdc_pie_samp ft_samp
|
145
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
/* GDCHART 0.11.5dev 17 Dec 2004 */
|
2
|
+
/* Copyright Bruce Verderaime 1998-2004 */
|
3
|
+
|
4
|
+
GDChart 0.11.5 relies on the latest version of libgd ( gd 2.0.28 or higher available: www.boutell.com/gd/ ).
|
5
|
+
gd 2.0.28 in turn relies on libpng and zlib (and optionally libjpeg, and libfreetype).
|
6
|
+
|
7
|
+
If libgd 2.0.28 or higher isn't installed, do that first.
|
8
|
+
|
9
|
+
There's no configure script.
|
10
|
+
Makefile may need to be edited to change paths to libgd (It's set to libgd's defualt install path).
|
11
|
+
The makefile defaults to include jpeg and freetype, and assumes they are installed,
|
12
|
+
and libgd was built with those options as well.
|
13
|
+
|
14
|
+
Though dev, it is a stable release.
|
15
|
+
|
16
|
+
--
|
17
|
+
brv@fred.net
|
18
|
+
|
19
|
+
|
20
|
+
Note: GDChart is copyrighted code:
|
21
|
+
Permission has been granted to copy, distribute and modify GDChart in any context without fee, including a commercial
|
22
|
+
application, provided that this notice is present in user-accessible supporting documentation.
|
23
|
+
|
24
|
+
This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of
|
25
|
+
GDChart, not to interfere with your productive use of GDChart. If you have questions, ask. "Derived works" includes all programs that
|
26
|
+
utilize the library. Credit must be given in user-accessible documentation.
|
27
|
+
|
28
|
+
This software is provided "AS IS." The copyright holders disclaim all warranties, either express or implied, including but
|
29
|
+
not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and
|
30
|
+
accompanying documentation.
|
31
|
+
|
32
|
+
|
33
|
+
Note: gd is copyrighted code:
|
34
|
+
COPYRIGHT STATEMENT FOLLOWS THIS LINE
|
35
|
+
|
36
|
+
Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
37
|
+
2002 by Cold Spring Harbor Laboratory. Funded under Grant
|
38
|
+
P41-RR02188 by the National Institutes of Health.
|
39
|
+
|
40
|
+
Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
|
41
|
+
Boutell.Com, Inc.
|
42
|
+
|
43
|
+
Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
|
44
|
+
Philip Warner.
|
45
|
+
|
46
|
+
Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
|
47
|
+
Roelofs.
|
48
|
+
|
49
|
+
Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John
|
50
|
+
Ellson (ellson@lucent.com).
|
51
|
+
|
52
|
+
Portions relating to gdft.c copyright 2001, 2002 John Ellson
|
53
|
+
(ellson@lucent.com).
|
54
|
+
|
55
|
+
Portions relating to JPEG and to color quantization copyright 2000,
|
56
|
+
2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
|
57
|
+
1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is
|
58
|
+
based in part on the work of the Independent JPEG Group. See the
|
59
|
+
file README-JPEG.TXT for more information.
|
60
|
+
|
61
|
+
Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
|
62
|
+
Szmurlo and Johan Van den Brande.
|
63
|
+
|
64
|
+
Permission has been granted to copy, distribute and modify gd in
|
65
|
+
any context without fee, including a commercial application,
|
66
|
+
provided that this notice is present in user-accessible supporting
|
67
|
+
documentation.
|
68
|
+
|
69
|
+
This does not affect your ownership of the derived work itself, and
|
70
|
+
the intent is to assure proper credit for the authors of gd, not to
|
71
|
+
interfere with your productive use of gd. If you have questions,
|
72
|
+
ask. "Derived works" includes all programs that utilize the
|
73
|
+
library. Credit must be given in user-accessible documentation.
|
74
|
+
|
75
|
+
This software is provided "AS IS." The copyright holders disclaim
|
76
|
+
all warranties, either express or implied, including but not
|
77
|
+
limited to implied warranties of merchantability and fitness for a
|
78
|
+
particular purpose, with respect to this code and accompanying
|
79
|
+
documentation.
|
80
|
+
|
81
|
+
Although their code does not appear in gd, the authors wish to thank
|
82
|
+
David Koblas, David Rowley, and Hutchison Avenue Software Corporation
|
83
|
+
for their prior contributions.
|
84
|
+
|
85
|
+
END OF GD COPYRIGHT STATEMENT
|
86
|
+
|
87
|
+
|
@@ -0,0 +1,183 @@
|
|
1
|
+
/* GDCHART 0.11.2dev ARRAY_ALLOC.C Mar 2002 */
|
2
|
+
/* Copyright Bruce Verderaime 2002-2004 */
|
3
|
+
/* Contributed in part or whole by Don Fasen and Darren Kent */
|
4
|
+
|
5
|
+
#if !defined (__GNUC__) || defined (__STRICT_ANSI__)
|
6
|
+
|
7
|
+
#include <stdio.h>
|
8
|
+
|
9
|
+
#include "array_alloc.h"
|
10
|
+
|
11
|
+
/*F***************************************************************************
|
12
|
+
*
|
13
|
+
* Function Name: allocate_array_float
|
14
|
+
*
|
15
|
+
* Function Prototype: float ** allocate_array_float (int nr, int nc)
|
16
|
+
*
|
17
|
+
* Allocates memory for a two-dimensional array of floats
|
18
|
+
* referenced as arr[r][c]
|
19
|
+
*
|
20
|
+
***************************************************************************
|
21
|
+
*
|
22
|
+
* access array as arr[i1=0-nr][i2=0-nc] = *(&arr[0][0]+nr*i1+i2)
|
23
|
+
* row col makes fewest pointer array elements
|
24
|
+
* assuming Ncol>>Nrow
|
25
|
+
* Ex: NC=2
|
26
|
+
* _______ __________
|
27
|
+
* **arr |arr[0] |------>arr[0]-->|arr[0][0] |
|
28
|
+
* |_______| |__________|
|
29
|
+
* |arr[1] |----- |arr[0][1] |
|
30
|
+
* |_______| | |__________|
|
31
|
+
* | . | --------->|arr[1][0] |
|
32
|
+
* | . | |__________|
|
33
|
+
* |_______| |arr[1][1] |
|
34
|
+
* |arr[NR-1]
|
35
|
+
* | |
|
36
|
+
* pointer array data array
|
37
|
+
*
|
38
|
+
******************************************************************************
|
39
|
+
*
|
40
|
+
* Parameters :
|
41
|
+
*
|
42
|
+
* Name Type Use Description
|
43
|
+
* ---- ---- --- -----------
|
44
|
+
* nr int Input Number of rows
|
45
|
+
* nc int Input Number of columns
|
46
|
+
*
|
47
|
+
******************************************************************************
|
48
|
+
*
|
49
|
+
* Function Return: float** with allocated memory all set up as float[][].
|
50
|
+
*
|
51
|
+
******************************************************************************
|
52
|
+
*
|
53
|
+
* Author: Don Fasen
|
54
|
+
* Date : 12/18/98
|
55
|
+
* Modified: Darren Kent 20/03/2002
|
56
|
+
*
|
57
|
+
****************************************************************************F*/
|
58
|
+
float **
|
59
|
+
allocate_array_float( int nr, /* number of pointer array elements */
|
60
|
+
int nc ) /* larger number for min memory usage */
|
61
|
+
{
|
62
|
+
int i;
|
63
|
+
float **arr;
|
64
|
+
|
65
|
+
/* Try to allocate memory for the pointer array, 'nr' pointers-to-float: */
|
66
|
+
arr = (float**)malloc( nr * sizeof(float*) );
|
67
|
+
/* no test for success ala glib, i.e., if you're outa memory, ... */
|
68
|
+
#ifdef DBUG
|
69
|
+
if( arr == NULL )
|
70
|
+
{
|
71
|
+
perror( "Unable to malloc pointer array in allocate_array_float()\n" );
|
72
|
+
exit( 2 );
|
73
|
+
}
|
74
|
+
#endif
|
75
|
+
|
76
|
+
/* Now allocate memory for the data array, 'nr * nc' floats: */
|
77
|
+
arr[0] = (float*)malloc( nr * nc * sizeof(float) );
|
78
|
+
#ifdef DBUG
|
79
|
+
if( arr == NULL )
|
80
|
+
{
|
81
|
+
perror( "Unable to malloc data array in allocate_array_float()\n" );
|
82
|
+
exit( 2 );
|
83
|
+
}
|
84
|
+
#endif
|
85
|
+
/* fill in the array pointers to point to successive columns. */
|
86
|
+
/* Don't need to do the first (zeroth) one, because it was set up by the data malloc. */
|
87
|
+
/* Note that adding 1 to (float*)a.arr[0] adds sizeof(float*) automatically. */
|
88
|
+
|
89
|
+
for (i = 1; i < nr; i++)
|
90
|
+
arr[i] = arr[0] + i*nc;
|
91
|
+
|
92
|
+
return arr;
|
93
|
+
|
94
|
+
} /* End of FUNCTION allocate_array_float */
|
95
|
+
|
96
|
+
/***********************************************************************************
|
97
|
+
*
|
98
|
+
* Same Implementation for a Char array.
|
99
|
+
*
|
100
|
+
************************************************************************************/
|
101
|
+
char **
|
102
|
+
allocate_array_char( int nr,
|
103
|
+
int nc )
|
104
|
+
{
|
105
|
+
int i;
|
106
|
+
char **arr;
|
107
|
+
|
108
|
+
/* Try to allocate memory for the pointer array, 'nr' pointers-to-chars: */
|
109
|
+
arr = (char**)malloc( nr * sizeof(char*) );
|
110
|
+
/* no test for success ala glib, i.e., if you're outa memory, ... */
|
111
|
+
#ifdef DBUG
|
112
|
+
if( arr == NULL )
|
113
|
+
{
|
114
|
+
perror( "Unable to malloc pointer array in allocate_array_char()\n" );
|
115
|
+
exit( 2 );
|
116
|
+
}
|
117
|
+
#endif
|
118
|
+
|
119
|
+
/* Now allocate memory for the data array, 'nr * nc' char: */
|
120
|
+
arr[0] = (char*)malloc( nr * nc * sizeof(char) );
|
121
|
+
#ifdef DBUG
|
122
|
+
if( arr == NULL )
|
123
|
+
{
|
124
|
+
perror( "Unable to malloc data array in allocate_array_char()\n" );
|
125
|
+
exit( 2 );
|
126
|
+
}
|
127
|
+
#endif
|
128
|
+
/* fill in the array pointers to point to successive columns. */
|
129
|
+
/* Don't need to do the first (zeroth) one, because it was set up by the data malloc. */
|
130
|
+
/* Note that adding 1 to (char*)a.arr[0] adds sizeof(char*) automatically. */
|
131
|
+
|
132
|
+
for (i = 1; i < nr; i++)
|
133
|
+
arr[i] = arr[0] + i*nc;
|
134
|
+
|
135
|
+
return arr;
|
136
|
+
|
137
|
+
} /* End of FUNCTION allocate_array_char */
|
138
|
+
|
139
|
+
/***********************************************************************************
|
140
|
+
*
|
141
|
+
* Same Implementation for a Int array.
|
142
|
+
*
|
143
|
+
************************************************************************************/
|
144
|
+
int **
|
145
|
+
allocate_array_int( int nr,
|
146
|
+
int nc )
|
147
|
+
|
148
|
+
{
|
149
|
+
int i;
|
150
|
+
int **arr;
|
151
|
+
|
152
|
+
/* Try to allocate memory for the pointer array, 'nr' pointers-to-ints: */
|
153
|
+
arr = (int**)malloc( nr * sizeof(int*) );
|
154
|
+
/* no test for success ala glib, i.e., if you're outa memory, ... */
|
155
|
+
#ifdef DBUG
|
156
|
+
if( arr == NULL )
|
157
|
+
{
|
158
|
+
perror( "Unable to malloc pointer array in allocate_array_int()\n" );
|
159
|
+
exit( 2 );
|
160
|
+
}
|
161
|
+
#endif
|
162
|
+
|
163
|
+
/* Now allocate memory for the data array, 'nr * nc' int: */
|
164
|
+
arr[0] = (int*)malloc( nr * nc * sizeof(int) );
|
165
|
+
#ifdef DBUG
|
166
|
+
if( arr == NULL )
|
167
|
+
{
|
168
|
+
perror( "Unable to malloc data array in allocate_array_int()\n" );
|
169
|
+
exit( 2 );
|
170
|
+
}
|
171
|
+
#endif
|
172
|
+
/* fill in the array pointers to point to successive columns. */
|
173
|
+
/* Don't need to do the first (zeroth) one, because it was set up by the data malloc. */
|
174
|
+
/* Note that adding 1 to (int*)a.arr[0] adds sizeof(int*) automatically. */
|
175
|
+
|
176
|
+
for (i = 1; i < nr; i++)
|
177
|
+
arr[i] = arr[0] + i*nc;
|
178
|
+
|
179
|
+
return arr;
|
180
|
+
|
181
|
+
} /* End of FUNCTION allocate_array_int */
|
182
|
+
|
183
|
+
#endif /* !defined (__GNUC__) || defined (__STRICT_ANSI__) */
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/* GDCHART 0.11.2dev ARRAY_ALLOC.H Mar 2002 */
|
2
|
+
/* Copyright Bruce Verderaime 2002-2004 */
|
3
|
+
/* Contributed in part or whole by Don Fasen and Darren Kent */
|
4
|
+
|
5
|
+
#ifndef _ARRAY_ALLOC_H
|
6
|
+
#define _ARRAY_ALLOC_H
|
7
|
+
|
8
|
+
/* ----- no dynamic auto array, need to mallocate space ----- */
|
9
|
+
#if !defined (__GNUC__) || defined (__STRICT_ANSI__)
|
10
|
+
|
11
|
+
#include <stdlib.h>
|
12
|
+
|
13
|
+
float **allocate_array_float( int nrs, int ncs );
|
14
|
+
char **allocate_array_char( int nrs, int ncs );
|
15
|
+
int **allocate_array_int( int nrs, int ncs );
|
16
|
+
|
17
|
+
#define CREATE_ARRAY1( arr, type, nels ) type *arr = (type*)malloc( (nels) * sizeof(type) )
|
18
|
+
/* array2 can't do ptr (*) types */
|
19
|
+
#define CREATE_ARRAY2( arr, type, nrs, ncs ) type **arr = allocate_array_##type( nrs, ncs )
|
20
|
+
|
21
|
+
#define FREE_ARRAY1( arr ) if( arr ) { free( (void*)arr ); arr = NULL; } else
|
22
|
+
#define FREE_ARRAY2( arr ) if( arr ) \
|
23
|
+
{ \
|
24
|
+
if( arr[0] ) \
|
25
|
+
free( (void*)arr[0] ); \
|
26
|
+
free( (void*)arr ); \
|
27
|
+
arr = NULL; \
|
28
|
+
} \
|
29
|
+
else
|
30
|
+
|
31
|
+
/* ----- avoid alloc, let the stack do the work ----- */
|
32
|
+
#else
|
33
|
+
|
34
|
+
#define CREATE_ARRAY1( arr, type, nels ) type arr[ nels ]
|
35
|
+
#define CREATE_ARRAY2( arr, type, nrs, ncs ) type arr[ nrs ][ ncs ]
|
36
|
+
#define FREE_ARRAY1( arr )
|
37
|
+
#define FREE_ARRAY2( arr )
|
38
|
+
|
39
|
+
#endif
|
40
|
+
|
41
|
+
#endif /*_ARRAY_ALLOC_H */
|