PRB: M6101 on PG Scatter Charts with Autoscaling Off

ID Number: Q62627

5.10 6.00 6.00a 6.00ax 7.00

MS-DOS

Summary:

SYMPTOMS

In Microsoft C versions 5.1, 6.0, 6.0a, 6.0ax, and C/C++ version 7.0

if you turn autoscaling off in any presentation graphics scatter

chart, you will receive the following run-time error:

M6101 -- invalid math operation

when the _pg_chartscatter() run-time function is called.

CAUSE

This error is occurring because if autoscaling is turned off, there

are several variables that need to be set. These variables are

automatically determined when autoscale is set to true. The

variables are scalefactor, scalemax, scalemin, scaletitle,

ticdecimals, ticformat, and ticinterval. (See page 267 of the

"Microsoft C Advanced Programming Techniques" manual.)

More Information:

The following code is from the SCAT.C sample program, which is the

sample program found in the online Help for the _pg_chartscatter and

_pg_chartscatterms routines. Note the added lines, which turn off

autoscaling. Compile the program, then link with the GRAPHICS.LIB and

PGCHART.LIB files. Running the application will duplicate the M6101

run-time error.

Sample Code

-----------

/* SCAT.C illustrates presentation graphics scatter chart functions

* including:

* _pg_chartscatter _pg_chartscatterms

*/

#include <conio.h>

#include <graph.h>

#include <string.h>

#include <stdlib.h>

#include <pgchart.h>

#define ITEMS 5

#define SERIES 2

float _far people[SERIES][ITEMS] = { { 235.F, 423.F, 596.F, 729.F,

963.F },

{ 285.F, 392.F, 634.F, 801.F, 895.F }

};

float _far profits[SERIES][ITEMS] = { { 0.9F, 2.3F, 5.4F, 8.0F,

9.3F },

{ 4.2F, 3.4F, 3.6F, 2.9F, 2.7F }

};

char _far *companies[SERIES] = { "Goodstuff,Inc.", "Badjunk & Co." };

void main()

{

chartenv env;

if( !_setvideomode( _MAXRESMODE ) ) /* Find a valid graphics

mode */

exit( 1 );

_pg_initchart(); /* Initialize chart system */

/* Show single-series scatter chart. */

_pg_defaultchart (&env, _PG_SCATTERCHART, _PG_POINTONLY );

strcpy( env.maintitle.title, "Goodstuff, Inc." );

strcpy( env.xaxis.axistitle.title, "Employees" );

strcpy( env.yaxis.axistitle.title, "Profitability" );

/****** Note : Turn one of these two to '0' or off, or uncomment

this section to cause problem. */

/* env.xaxis.autoscale=1; */

/* env.yaxis.autoscale=0; */

/********************************************************************/

/****** To eliminate the error, initialize the following ************/

/* env.yaxis.scalefactor=1000; */

/* env.yaxis.scalemax=1.0; */

/* env.yaxis.scalemin=0.0; */

/* env.yaxis.ticdecimals=0x0001; */

/* env.yaxis.ticformat=0x0001; */

/* env.yaxis.ticinterval= 0.5; */

/********************************************************************/

_pg_chartscatter( &env, people[0], profits[0], ITEMS );

getch();

_clearscreen( _GCLEARSCREEN );

/* Show multiseries scatter chart. */

_pg_defaultchart (&env, _PG_SCATTERCHART, _PG_POINTONLY );

strcpy( env.xaxis.axistitle.title, "Employees" );

strcpy( env.yaxis.axistitle.title, "Profitability" );

_pg_chartscatterms( &env, (float _far *)people,

(float _far *)profits, SERIES, ITEMS, ITEMS, companies );

getch();

_setvideomode( _DEFAULTMODE );

}

Additional reference words: 5.10 6.00 6.00a 6.00ax 7.00