WHAT IS BARPLOT? ---------------- Barplot is a program that takes as input a scripted language that describes progress along various points of a continuum. The output is scaled to the user's specification. Additionally, barplot can calculate percentage of reported progress to an internal default accuracy of 1:10000 Barplot can output .JPG files, and does so to a file or to stdout. It is possible to have barplot generate these .JPG images "on the fly" with a simple .CGI or other Server-side process on a webserver. We use this constantly at Gulf Interstate Engineering to model real-world progress of various activities in near real-time. This version of barplot is 1.0.00907.00 The latest version can be found at http:\\www.gie-mis.com\barplot WHAT ARE THESE FILES? --------------------- This distribution consists of the following: README - What you're reading now. LICENSE - GNU Copyleft license. src/ - Source code for barplot barplot.c - barplot main program barplot.h - barplot include file. bphelp.c - barplot help file. test.data - Test data test.jpg - The results of running test.data :^) Win32/ BARPLOT.EXE - Statically linked Win32 Binary make_barplot.bat (simple make script for Win32 & VC 5.0) Linux-ELF/ barplot - Statically linked ELF binary for Linux make_barplot.sh (simple make script for linux) Web/ - Webserver Stuff notes - Some server notes. image_out.php3 - PHP3 script to show .JPG image inline. Tutorial/ tut_1.dat - Tutorial data tut_1.jpg - Resultant .JPG file ---------------------------------------------------------------- Binary MD5SUM Information Linux-ELF md5sum barplot 82566b1ef37f7d7e11b730e2a1caffd9 barplot Win32 md5sum barplot.exe fec6758e5ea9cd90e4e0d1b76e9b2320 barplot.exe ---------------------------------------------------------------- Note: Barplot links against several other packages, and requires these libraries to compile: ZLIB - Zlib compression library LIBPNG - PNG Library GD - Graphics Draw Library (Note: GD requires the jpeg library to compile) The following URLs may be helpful in finding these packages: zlib - http://www.gnu.org/gnulist/production/zlib.html libpng - http://www.libpng.org/pub/png/libpng.html gd - http://www.boutell.com/gd/index.html libjpeg - ftp://ftp.uu.net/graphics/jpeg/ HOW DO I USE IT? ---------------- We're going to explore the language of barplot, and see how we can use it for ourselves. The following script (the typed passages after the '>' character) is available as /tutorial/tut_1.dat We want to create a file called my_1st.jpg from a file containing these commands. Open your favorite editor, and create a file by typing in the commands that follow the '>' character below. When you're finished, you will have a file that is very close to the tut_1.dat file, and which you can edit as we go along. You can type these commands in directly, if you like, by running barplot with the "input from stdin" filename. barplot - my_1st.jpg TO BEGIN: 1) Determine the size of the required output image. barplot generates .JPG images, and *you* have complete control over the size of the resultant image. Depending on the end usage, you may want a small bar or a large bar. You decide. We'll choose to have a bar that is 200 x 30 (LxW) pixels. 2) Do you want each spread (or section of bar, if there are multiple sections) to start with a black indicator bar? barplots "bar" can consist of one or more spreads, or sections, and the start of each section can be indicated on the bar. We'll choose not to do this. No=0, Yes=1. So "0" 3) Do you want to have regular "tic" marks along the length of the bar? If so, how many? barplot indicate relative positioning by subdividing the bar into sections. For example, you may wish to divide the output bar into quarters, or tenths. We'll choose to divide the bar into fourths. So "4". 3b) (Optional) Generate a second image with a percent complete value? barplot can optionally generate two seperate .JPG files, a .JPG image of the bar, and a .JPG image of the percent complete value. This can be helpful in static reports, when you are generating a large number of bars at a time, and are pasting them into some sort of report. You can not use this option and get meaningful output from stdout. Great, you have defined the output bar parameters! The first line of input to barplot will look like this: BAR <length> <width> <start marks> <divisions> [percent complete image] >BAR 200 30 0 4 4) Define the scale of the bar. barplot needs to know the beginning and end points of your overall bar. If this bar represents mileage, for example, you have to define the start and end points of the bar. Our bar represents miles from 0 to 7.5 >BAR_MIN_MAX 0 7.5 5) Define the background color of the bar. barplot needs to know the background color of the bar. The background color can be any of the seven predefined colors, or either of the two user defined colors. Do step 6 first if you wish to use a defined color as the background. Our bar has a white background >BGCOLOR WHITE 6) Define any unique colors you'd like to use. This is optional. barplot gives you the ability to define two colors, apart from the predefined colors WHITE,BLUE,RED,BLACK,YELLOW,GREY and GREEN. You define these colors by telling barplot what color you want to define (COLOR1 or COLOR2) and the Red,Green,Blue values of that color. For example, let's say I want a pink background COLOR1, I would issue this command to barplot: COLOR1 255 102 204 NOTE: If you are going to use a unique color for your background, you MUST define that unique color as the first defined color. Our bar does not require any unique colors. 7) Define your first spread. Every bar has at least one spread. A spread can take the length of the entire bar, or be just a small part of the bar. It is often useful to know the start and end points of the spread with respect to the bar itself. The spread can, optionally, have a default color for items in that spread. Our first spread is from 0 to 3.825 miles, and we want the default color of our items to be blue. >SPREAD 0.0000 3.825 BLUE 8) Define data points for your spread. We have four data points to indicate on the spread, three are normal and one is, say, in trouble :^) >0.0379 0.9193 >0.9193 2.2034 >2.2034 4.4750 RED >4.4750 5.1250 Note that the data does not need to fill the entire spread, and can represent whatever we want in the bar. 9) End your spread barplot need to know when the data for your spread is finished. The command for this is simple: END >END Let's define another spread. >SPREAD 3.825 7.5 GREEN and some data for that spread >0.1275 0.3750 >2.2500 2.7500 YELLOW >2.7500 3.3750 RED Note how the data points relate to the SPREAD and not to the BAR itself. We don't need to have spread start/stop information, though. We could also have written the above four lines as: >SPREAD >3.9525 4.2000 GREEN >6.0750 6.5750 YELLOW >6.5750 7.2000 RED and created a bar that looked identical. Spreads are very useful when we get data from the field about a certain area, and the measurements are relative to that area only. We don't have to do the math, barplot does it for us! End the spread >END Finally, we want to end our bar and write the file. >BAR_END Save the file and run it through barplot as follows: barplot <filename> my_1st.jpg That does it! A quick look at the resulting .JPG file should show it to be exactly like \tutorial\tut_1.jpg What about percent complete information? Glad you asked :^) Because barplot is very flexible in presenting information to the user, the definition of "percent complete" can vary from bar to bar. Is the user interested in the amount of BLUE represented in the bar? Perhaps a more telling statistic is how much is NOT reported, or what percent is RED (assuming that RED means something on this bar) A quick statistic, how much has been reported, is given by: barplot <filename> NULL NULL This calls barplot with your data file, and tells it to *not* generate any .JPG files, but to calculate the representative percentage of reported areas. You should get the following answer on your command line: 68.83 To get the representative percentage of the BLUE items, do this: barplot <filename> NULL NULL blue and you get: 28.87 barplot <filename> NULL NULL white gives you the UNREPORTED percentage, which is 31.17 You can get the percentage of any combination of colors by including them on the command line: barplot <filename> NULL NULL blue red green yellow gives you 68.83, which is identical to leaving out the colors altogether. barplot <filename> NULL NULL blue green yellow gives you 38.84, the amount of NON-RED, reported items. LICENSING --------- barplot is licensed under the GNU general license, and is free software. barplot is linked to libraries that are also released free to the public under the GNU license, or similiar licenses. The software was developed at Gulf Interstate Engineering by Jim Delahanty. If you find it useful, you can drop me a note. I welcome comments, patches, and suggestions for improvements. If you're interested in writing man pages, configure scripts or makefiles, by all means, be my guest! The following header has been prepended to all applicable files in the distribution: /****************************************************************************\ barplot - scaled linear progress bar .JPG generator. Copyright (c) 2000 James Delahanty - Gulf Interstate Engineering This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Send comments, suggestions for improvements, any code you'd like to share or just random thoughts to jimd@gie.com or, if you'd like, you can mail them to: Jim Delahanty, c/o Gulf Interstate Engineering Suite 600 1700 West Loop South Houston, TX 77027 \****************************************************************************/