1 /* 2 * 3 * An interval list used to map matrix elements into integers in the range 0 to 4 * 254 representing shades of gray on a PostScript printer. The list can be given 5 * using the -i option or can be set in the optional header that can preceed each 6 * matrix. The list should be a comma or space separated list that looks like, 7 * 8 * num1,num2, ... ,numn 9 * 10 * where each num is a floating point number. The list must be given in increasing 11 * numerical order. The n numbers in the list partion the real line into 2n+1 12 * regions given by, 13 * 14 * region1 element < num1 15 * region2 element = num1 16 * region3 element < num2 17 * region4 element = num3 18 * . . 19 * . . 20 * . . 21 * region2n element = numn 22 * region2n+1 element > numn 23 * 24 * Every number in a given region is mapped into an integer in the range 0 to 254 25 * and that number, when displayed on a PostScript printer using the image operator, 26 * prints as a square filled with a gray scale that reflects the integer that was 27 * chosen. 0 maps to black and 255 white (that's why 255 is normally omitted). 28 * 29 * The shades of gray chosen by the program are normally generated automatically, 30 * but can be reassigned using the -g option or by including a grayscale line in 31 * the optional header. The grayscale list is comma or space separated list of 32 * integers between 0 and 255 that's used to map individual regions into arbitray 33 * shade of gray, thus overriding the default choice made in the program. The list 34 * should look like, 35 * 36 * color1,color2, ... ,color2n+1 37 * 38 * where color1 applies to region1 and color2n+1 applies to region2n+1. If less 39 * than 2n+1 numbers are given the default assignments will be used for the missing 40 * regions. Each color must be an integer in the range 0 to 255. 41 * 42 * The default interval list is given below. The default grayscale maps 254 (almost 43 * white) into the first region and 0 (black) into the last. 44 * 45 */ 46 47 #define DFLTILIST "-1,0,1" 48 49 /* 50 * 51 * The active interval list is built from an interval string and stored in an array 52 * whose elements are of type Ilist. 53 * 54 */ 55 56 typedef struct { 57 double val; /* only valid in kind is ENDPOINT */ 58 int color; /* gray scale color */ 59 long count; /* statistics for each region */ 60 } Ilist; 61 62 /* 63 * 64 * Non-integer function declarations. 65 * 66 */ 67 68 char *savestring(); 69 70