Figure 1: A portion of the xemboss program

#include "cips.h"

   /* the convolution masks */

short emboss_0_mask[3][3] =  {
       {-1,  0,  1},
       {-1,  1,  1},
       {-1,  0,  1} };

short emboss_1_mask[3][3] =  {
       { 0,  1,  1},
       {-1,  1,  1},
       {-1, -1,  0} };

short emboss_2_mask[3][3] =  {
       { 1,  1,  0},
       { 1,  1, -1},
       { 0, -1, -1} };

short emboss_3_mask[3][3] =  {
       { 1,  0, -1},
       { 1,  1, -1},
       { 1,  0, -1} };

short emboss_4_mask[3][3] =  {
       { 0, -1, -1},
       { 1,  1, -1},
       { 1,  1,  0} };

short emboss_5_mask[3][3] =  {
       {-1, -1, -1},
       { 0,  1,  0},
       { 1,  1,  1} };

short emboss_6_mask[3][3] =  {
       {-1, -1,  0},
       {-1,  1,  1},
       { 0,  1,  1} };

short emboss_7_mask[3][3] =  {
       {-1,  1,  1},
       {-1,  1,  1},
       {-1,  1,  1} };

short emboss_8_mask[3][3] =  {
       { 1,  1,  1},
       {-1,  1,  1},
       {-1, -1,  1} };

short emboss_9_mask[3][3] =  {
       { 1,  1,  1},
       { 1,  1, -1},
       { 1, -1, -1} };

short emboss_10_mask[3][3] =  {
       { 1,  1, -1},
       { 1,  1, -1},
       { 1,  1, -1} };

short emboss_11_mask[3][3] =  {
       { 1, -1, -1},
       { 1,  1, -1},
       { 1,  1,  1} };

short emboss_12_mask[3][3] =  {
       {-1, -1, -1},
       { 1,  1,  1},
       { 1,  1,  1} };

short emboss_13_mask[3][3] =  {
       {-1, -1,  1},
       {-1,  1,  1},
       { 1,  1,  1} };

short **the_image;
short **out_image;

main(argc, argv)
   int argc;
   char *argv[];
{
   ...

   read_image_array(in_name, the_image);
   emboss_convolution(the_image, out_image,
      type,
      length, width,
      bitsperpixel);
   write_image_array(out_name, out_image);

   ...

}  /* ends main  */

   /****************************************
   *
   *   emoboss_convolution(...
   *
   *****************************************/

emboss_convolution(image, out_image, type, 
   rows, cols, bitsperpixel)

   short **image, **out_image;
   int   type;
   long  rows, cols, bitsperpixel;
{
   int a, b, i, is_present, j, sum;
   short  mask[3][3], max, min;

   min = 0;
   max = 255;
   if(bitsperpixel == 4)
      max = 16;

     /* clear output image array */
   for(i=0; i<rows; i++)
      for(j=0; j<cols; j++)
         out_image[i][j] = image[i][j];

   copy_array(type, mask);

   for(i=1; i<rows-1; i++){
      for(j=1; j<cols-1; j++){
         sum = 0;
         for(a=-1; a<2; a++){
            for(b=-1; b<2; b++){
               sum = 
                 sum + image[i+a][j+b] *
                       mask[a+1][b+1];
            }
         }

         if(sum > max) sum = max;
         if(sum < 0)   sum = 0;
         out_image[i][j] = sum;
         if( type >= 7 && type <= 13)
            out_image[i][j] = 
               out_image[i][j]/3;

      }  /* ends loop over j */
   }  /* ends loop over i */
}  /* ends emboss_convolution */