
Listing 2 - The Function print_hist_image (file djet.c)


   /***********************************
   *
   *   print_hist_image(...
   *
   ************************************/



print_hist_image(printer, hist)
   FILE *printer;
   unsigned long hist[];
{
   char   c, d;
   int          i, j, k;
   unsigned long limit, max;

   d = 0;
   c = 255;

      /********************************
      *
      *   First scale the histogram
      *
      *********************************/

   max = 0;
   for(i=0; i<256; i++)
      if(hist[i] > max) max = hist[i];

   if(max > 200){
      for(i=0; i<256; i++){
        hist[i] = (hist[i]*200)/max;
      }
   }


      /********************************
      *
      *   Second print it
      *
      *   Print a space between the image
      *   and the histogram.
      *
      *********************************/


   for(i=0; i<20; i++){
         end_graphics_mode(printer);
         select_300_dpi_resolution(printer);
         set_raster_width(printer);
         start_raster_graphics(printer);
         select_full_graphics_mode(printer);
         set_horizontal_offset(printer);
         putc(ESCAPE, printer);
         putc('*', printer);
         putc('b', printer);
         putc('2', printer);
         putc('0', printer);
         putc('0', printer);
         putc('W', printer);

         for(j=0; j<200; j++)
            putc(d, printer);
   }


   printf("\n\nHIST> Now printing the histogram");
   for(i=0; i<256; i++){
      printf("\n\tHIST> Histogram[%d]=%ld", i, hist[i]);

            /* print the line 2 times */
      for(k=0; k<2; k++){

         end_graphics_mode(printer);
         select_300_dpi_resolution(printer);
         set_raster_width(printer);
         start_raster_graphics(printer);
         select_full_graphics_mode(printer);


            /***************************
            *
            *        Print grid marks every
            *        50 pixels.  Do this by
            *        setting a shorter margin
            *        then printing 2 marks then
            *        the data.
            *
            ****************************/

         if( (i ==   0)        ||
             (i ==  50) ||
             (i == 100) ||
             (i == 150) ||
             (i == 200) ||
             (i == 255)){

            set_shorter_horizontal_offset(printer);
            putc(ESCAPE, printer);
            putc('*', printer);
            putc('b', printer);
            putc('2', printer);
            putc('0', printer);
            putc('2', printer);
            putc('W', printer);

            putc(c, printer);
            putc(c, printer);


            if(hist[i] >= 200)
               hist[i] = 200;

            limit = 200 - hist[i];

            if(hist[i] == 0)
               putc(c, printer);

            for(j=0; j<hist[i]; j++)
               putc(c, printer);

            for(j=0; j<limit; j++)
              putc(d, printer);

         }  /* ends print grid marks */


            /***************************
            *
            *        If you do not print
            *        grid marks, set the normal
            *        margin and then print the
            *        data.
            *
            ****************************/

         else{
            set_horizontal_offset(printer);
            /* this prints 200 bytes so print 200 */
            putc(ESCAPE, printer);
            putc('*', printer);
            putc('b', printer);
            putc('2', printer);
            putc('0', printer);
            putc('0', printer);
            putc('W', printer);

            if(hist[i] >= 200)
               hist[i] = 200;

            limit = 200 - hist[i];

            if(hist[i] == 0)
               putc(c, printer);

            for(j=0; j<hist[i]; j++)
               putc(c, printer);

            for(j=0; j<limit; j++)
              putc(d, printer);

         }  /* ends else no grid marks */

      }  /* ends loop over k */

   }  /* ends loop over i */

}  /* ends print_hist_image */

