ID Number: Q70362
6.00 6.00a 6.00ax
MS-DOS
Summary:
When attempting to reset the Presentation Graphics palette to display
an extended ASCII character as a plotted point, a different character
may be printed than expected. This problem occurs with the
_pg_setpalette() function in C versions 6.0, 6.0a, and 6.0ax and
QuickC versions 2.5 and 2.51 [but not with the _pg_setpalette()
function in QuickC versions 2.0 and 2.01].
More Information:
The _pg_setpalette() function sets a palette that is used by the
presentation graphics routines. This palette contains colors, line
styles, fill patterns, and plot characters specifically defined by the
user.
When defining these plot characters with extended ASCII characters,
the actual character displayed may be different than what was defined.
The sample code below demonstrates this problem. Note that the ASCII
character displayed incorrectly is ASCII 254. All extended ASCII
characters of value 175 and below seem to be displayed correctly;
however, most characters above 175 are displayed incorrectly, usually
as single dashes.
This problem is occurring because with QuickC versions 2.5 and later,
and C versions 6.0 and later, characters are based on the ANSI
character set, and the actual implementation of additional characters
are undefined (Section 2.2.1). The ANSI character set consists of all
uppercase and lowercase letters, decimal digits 0 - 10, and the
following graphics characters:
! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] _ { | } ~
When using the CodeView debugger and setting a watch on
pal[1].plotchar, it can be seen that the correct value is being placed
in memory. However, _pg_setpalette() does not initialize this value
correctly for the presentation graphics functions.
Sample Code
-----------
/* Compiler options needed: none
*/
#include <graph.h>
#include <pgchart.h>
#include <stdio.h>
#include <conio.h>
#define VALUES 5
float _far xvals[VALUES] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float _far yvals[VALUES] = {11.0f, 9.0f, 12.0f, 8.0f, 5.0f};
void main(void)
{
chartenv env;
palettetype pal;
_setvideomode(_MAXRESMODE);
_pg_initchart();
_pg_defaultchart( &env, _PG_SCATTERCHART, _PG_POINTANDLINE );
_pg_getpalette((paletteentry _far *)pal);
pal[1].plotchar = 254; /* This value does not get */
/* printed correctly */
_pg_setpalette((paletteentry _far *)pal);
_pg_chartscatter(&env, xvals, yvals, VALUES);
getch();
_setvideomode(_DEFAULTMODE);
}
Additional reference words: 6.00 6.00a 6.00ax