ID Number: Q68745
6.00 6.00a 6.00ax 7.00
MS-DOS
Summary:
In Microsoft C versions 6.0, 6.0a, 6.0ax, and C/C++ versiion 7.0 using
_pg_defaultchart(), you can specify a line-chart type with
_PG_LINECHART. The choices for the chart style are _PG_POINTANDLINE
and _PG_POINTONLY. There is no manifest constant for "lines only," but
a line chart with lines only can be made with a few modifications to
the existing code, which produces a chart with points and lines.
More Information:
The following code, which defines the field in the palette to be
modified, is taken from page 259 of the "Microsoft C Advanced
Programming Techniques" manual that shipped with C version 6.0.
/* Typedef for pattern bitmap */
typedef unsigned char fillmap[8];
/* Typedef for palette entry definition */
typedef struct
{
unsigned short color;
unsigned short style;
fillmap fill;
char plotchar; /* by default, the plotted character is '*' */
}paletteentry;
/* Typedef for palette definition */
typedef paletteentry palettetype[ _PG_PALETTELEN ];
The following are the modifications to be made to the sample program
SCATTER.C on pages 256-258 of "Microsoft C Advanced Programming
Techniques" (also on pages 280-281 of "C For Yourself," which was
shipped with QuickC version 2.5). Note that the original program
produces a scatter chart; a line chart requires different arguments in
the call to _pg_defaultchart(), as shown below.
Declare the following variable
palettetype palette_struct;
after the line
_pg_initchart( );
but before the line:
_pg_defaultchart( &env, _PG_LINECHART, _PG_POINTANDLINE);
1. Get the array of current palette structures with the line:
_pg_getpalette( palette_struct );
2. Change the plotted character in the first palette to a blank, so
that no points will appear on the graph (the line will be
unbroken). For example:
palette_struct[1].plotchar = ' ';
3. Reset the palette with the line:
_pg_setpalette( palette_struct );
The following is the modified SCATTER.C program:
Sample Code
-----------
#include <conio.h>
#include <string.h>
#include <graph.h>
#include <pgchart.h>
#define MONTHS 12
typedef enum {FALSE, TRUE} boolean;
float far value[MONTHS] =
{
33.0,27.0,42.0,64.0,106.0,157.0,
182.0,217.0,128.0,62.0,43.0,36.0
};
char far *category[MONTHS] =
{
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jly", "Aug",
"Sep", "Oct", "Nov", "Dec"
};
palettetype palette_struct;
main( )
{
chartenv env;
int mode = _VRES16COLOR;
if( _setvideomode( _MAXRESMODE ) == 0 )
exit( 0 );
_pg_initchart();
_pg_getpalette( palette_struct );
palette_struct[1].plotchar = ' ';
_pg_setpalette( palette_struct );
_pg_defaultchart( &env, _PG_LINECHART, _PG_POINTANDLINE );
strcpy( env.maintitle.title, "Good Neighbor Grocery" );
env.maintitle.titlecolor = 6;
env.maintitle.justify = _PG_RIGHT;
strcpy( env.subtitle.title, "Orange Juice vs Hot Chocolate" );
env.subtitle.titlecolor = 6;
env.subtitle.justify = _PG_RIGHT;
strcpy( env.xaxis.axistitle.title, "Months" );
strcpy( env.yaxis.axistitle.title, "Quantity" );
env.chartwindow.border = FALSE;
env.xaxis.ticinterval = 4.0;
if( _pg_chart( &env, category, value, MONTHS ) )
{
_setvideomode( _DEFAULTMODE );
_outtext( "Error: can't draw chart" );
}
else
{
getch();
_setvideomode( _DEFAULTMODE );
}
return( 0 );
}
For more information about line charts, see pages 252-273 of
"Microsoft C Advanced Programming Techniques," and pages 267-296 of "C
for Yourself."
Additional reference words: 6.00 6.00a 6.00ax 7.00