12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- Many different types of programs can be enhanced by the use of graphical
- information. Often, this graphical information can take the form of
- horizontal bar graphs.
- An easy way to draw horizontal bars in door programs written with
- OpenDoors, is to use the od_repeat() function. Not only does od_repeat()
- allow you to easily form a bar by repeating a particular character the
- specified number of times, but it is also a very efficient way to do so.
- od_repeat() will take advantage of terminal emulation optimizations,
- when available. For instance, a character can be repeated any number of
- times with AVATAR by sending a short 3-byte sequence that specifies the
- character and number of times to repeat.
- How do you calculate the number of character to use to form a bar in
- your graph? The DrawHorizontalBar() function, which is provided below,
- will do this calculation for you. Simply provide the value to be
- represented by this bar, the minimum and maximum possible values, and
- the maximum number of character to use to draw the bar. For example, if
- you are graphing percentages (which could range from 0% to 100%), and
- wanted the graph to fit in a space of 40 columns, you would use:
- DrawHorizontalBar(nPercent, 0, 100, 40);
- The included tip1.c is a complete program which demonstrates the
- DrawHorizontalBar() function as called from another function that will
- create complete horizontal bar graphs. This second function,
- DrawGraphOfPercentages(), takes an array of titles, and array of values
- corresponding to each title, and draws a complete bar graph from this
- information.
- /* 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);
- }
- }
|