89 lines
2.8 KiB
C
89 lines
2.8 KiB
C
/* Includes */
|
|
#include "opendoor.h"
|
|
|
|
/* Function prototypes. */
|
|
void DrawHorizontalBar(int nValue, int nMinValue, int nMaxValue,
|
|
int nMaxChars);
|
|
void DrawGraphOfPercentages(int nItems, int *panPercentages,
|
|
char **papszTitles, char bTitleColor, char bGraphColor,
|
|
int nTitleWidth, int nGraphWidth);
|
|
|
|
|
|
/* Main function - program execution begins here. */
|
|
main()
|
|
{
|
|
char *apszTitles[7] = {"Sunday", "Monday", "Tuesday", "Wednesday",
|
|
"Thursday", "Friday", "Saturday"};
|
|
int anValues[7] = {50, 75, 100, 25, 83, 0, 43};
|
|
|
|
od_printf("`bright green`Test graph:\n\r");
|
|
|
|
DrawGraphOfPercentages(7, anValues, apszTitles, 0x02, 0x0f, 20, 50);
|
|
|
|
od_get_key(TRUE);
|
|
|
|
return(0);
|
|
}
|
|
|
|
|
|
/* Function to draw horizontal graph of percentages with titles, to */
|
|
/* demonstrate the use of the DrawHorizontalBar() function. */
|
|
/* No titles should have more than nTitleWidth characters. */
|
|
void DrawGraphOfPercentages(int nItems, int *panPercentages,
|
|
char **papszTitles, char bTitleColor, char bGraphColor,
|
|
int nTitleWidth, int nGraphWidth)
|
|
{
|
|
int nCurrentItem;
|
|
|
|
/* Loop for each item (line) in the graph. */
|
|
for(nCurrentItem = 0; nCurrentItem < nItems; ++nCurrentItem)
|
|
{
|
|
/* Set display color for title text. */
|
|
od_set_attrib(bTitleColor);
|
|
|
|
/* Add spaces to right-align all titles. */
|
|
od_repeat(' ', nTitleWidth - strlen(papszTitles[nCurrentItem]));
|
|
|
|
/* Display the title. */
|
|
od_disp_str(papszTitles[nCurrentItem]);
|
|
|
|
/* Add space between title and graph. */
|
|
od_printf(" ");
|
|
|
|
/* Set display color for graph. */
|
|
od_set_attrib(bGraphColor);
|
|
|
|
/* Draw bar graph for this line. */
|
|
DrawHorizontalBar(panPercentages[nCurrentItem], 0, 100, nGraphWidth);
|
|
|
|
/* Move to the next line. */
|
|
od_printf("\n\r");
|
|
}
|
|
}
|
|
|
|
|
|
/* Function to draw a horizontal bar, given a value, the minimum and maximum */
|
|
/* possible values, and the number of characters the horizontal bar should */
|
|
/* extended for the maximum value. */
|
|
void DrawHorizontalBar(int nValue, int nMinValue, int nMaxValue,
|
|
int nMaxChars)
|
|
{
|
|
/* Determine lenght of bar */
|
|
int nBarChars = ((nValue - nMinValue) * nMaxChars) / nMaxValue;
|
|
|
|
if(od_control.user_ansi || od_control.user_avatar)
|
|
{
|
|
/* If ANSI or AVATAR graphics are available, assume that IBM extended */
|
|
/* ASCII is also available. This function uses character 220 to form */
|
|
/* bars that are 1/2 the height of the line. You might also want to */
|
|
/* try character 119, which will form bars that are the entire height */
|
|
/* of the line. */
|
|
od_repeat(220, nBarChars);
|
|
}
|
|
else
|
|
{
|
|
/* In ASCII mode, the bar is formed by the '=' character. */
|
|
od_repeat('=', nBarChars);
|
|
}
|
|
}
|