Listing 3

/*******************************************************
*  file d:\cips\pi.c
*
*  Purpose - These functions print an image out to the
*      line printer. The parameters in this function
*      are defined differently than in most other CIPS
*      functions. The parameters il, ie, ll, le are
*      coordinates inside the 100x100 image array.
*      The parameters first_line and first_element
*      are coordinates for the entire image file.
*      So, if you want to start printing at row 10
*      and column 10 of the image file you would call:
*         read_tiff_image(name, the_image, 10, 10,
*                         110, 110);
*         print_image(the_image, name, 1, 1, 1, 100, 18,
*                     10, 10);
*      In normal print mode you can only print 17
*      columns: le - ie = 17.
*
*  External Calls: fwrite.c -  my_frwiteln
*                              my_fwrite
*                  rstring.c - read_string
*                              long_clear_buffer
********************************************************/

#include "d:\cips\cips.h"
#define FORMFEED '\014'

print_image(the_image, name, channel, il, ie, ll, le,
          first_line, first_element)
   char  name[];
   int   channel, il, ie, ll, le, first_line, first_element;
   short the_image[ROWS] [COLS];
{
   char printer_name[MAX_NAME_LENGTH);
   FILE *printer;

   strcpy(printer_name, "prn");
   if( (printer = fopen(printer_name, "w")) == NULL)
      printf("\nPI> Could not open printer");
   else{
      printf("\nPI> The print file is opened");
     /********************************************
     *   If your printer has some form of
     *   condensed printing, you can send those
     *   commands via software using the fputc
     *   function. For example, if your printer
     *   needs to sequence X Y Z to start
     *   condensed printing, insert the following
     *   three calls right here:
     *   fputc('X', printer);
     *   putc('Y', printer);
     *   fputc('Z', printer);
     *********************************************/
      perform_printing(printer, the_image, name, channel,
                    il, ll, ie, le, first_line, first_element);
      fclose(printer);
   }  /* ends else print */
}     /* ends print_image */

perform_printing(printer, the_image, name, channel,
              il, ll, ie, le, first_line, first_element)
   char  name[];
   FILE  *printer;
   int        channel, il, ie, ll, le, first_line, first_element;
   short the_image[ROWS][COLS];
{
   char output[300],
       response[80],
       string [300];
   int  i,
       j,
       k,
       line_counter;

   printf("\nPI> Print header");
   line_counter = 0;
   long_clear_buffer(string);
   sprintf(string,"      This image is -- %s --", name);
   my_fwriteln(printer, string);
   ++ line_counter;

   long_clear_buffer(string);
   sprintf(string," The parameters are:");
   my_fwriteln(printer,string);
   ++ line_counter;

   long_clear_buffer(string);
   sprintf(string,"       channel=%d il=%d ll=%d ie=%d le=%d",
          channel, first_line, first_line+ll-2,
          first_element, first_element+le-2);
   my_fwriteln(printer, string);
   ++line_counter;
   long_clear_buffer(string);
   sprintf (string, " ");
   my_fwriteln(printer, string);
   ++line_counter;

   print_column_header(&line_counter, first_element, ie, le,
                    output, string, printer);

   for(i=il; i<ll; i++){
      long_clear_buffer(string);
   /* now print the image */
      sprintf(string," ");
      long_clear_buffer(output);
      sprintf(output, "%3d-", i+first_line-1);
      append_string(output, string);
      for(j=ie; j<le; j++){
         long_clear_buffer(output);
         sprintf(output,"%4d", the_image [i] [j] );
         append_string(output, string);
      }  /* ends loop over j columns */

      my_fwriteln(printer, string);
      line_counter = line_counter + 1;
      if(line_counter >= 53){
         line_counter = 0;
         putc(FORMFEED, printer);
         print_column_header(&line_counter, first_element, ie,
                          le, output, string, printer);
      }  /* ends if line_counter >=65*/
   }  /* ends loop over i rows */

   for(i=line_counter; i<66; i++){
      long_clear_buffer(string);
      sprintf(string, " ");
      my_fwriteln(printer, string);
   }
}      /* ends perform_printing */
print_column_header(line_counter, first_element, ie, le, output,
                 string, printer)
   char string[], output[];
   FILE *printer;
   int first_element, ie, le, *line_counter;
{
   int k;

   long_clear_buffer(string);
   sprintf(string,"          ",);

   for(k=first_element; k<(first_element + (le-ie)); k++){
      long_clear_buffer(output);
      sprintf(output, "-%3d", k);
      append_string(output, string);
   }  /* ends loop over k */
   my_fwriteln(printer, string);
   *line_counter = *line_counter + 1;

}  /* ends print_column_header  */

/**********************************************
*  print_image_array(...
*  This function prints a 100x100 image array. ***********************************************/
print_image_array(the_image)
   short the_image[ROWS] [COLS];
{
   char response [80];
   printf("\nPIA> Enter a comment line\n--");
   clear_buffer(response);
   read_string(response);
                          /*      il  ie  ll    le     */
   print_image(the_image, response, 0,  1,  1, 100,  17, 0, 0);
   print_image(the_image, response, 0,  1, 18, 100,  35, 0, 0);
   print_image(the_image, response, 0,  1, 36, 100,  53, 0, 0);
   print_image(the_image, response, 0,  1, 54, 100,  71, 0, 0);
   print_image(the_image, response, 0,  1, 72, 100,  89, 0, 0);
   print_image(the_image, response, 0,  1, 90, 100, 100, 0, 0);
}  /* ends print_image_array */