Listing 3 Pop-up window functions

/* Save a rectangular region to a user buffer */
void save_area(int ulrow, int ulcol, int lrrow,
            int lrcol, char *buf)
{
   if (buf)
   {
      int nbytes = 2*(lrcol-ulcol+1), row, n;

      for (row = ulrow; row <= lrrow; ++row)
      {
         char far *p = base + (row*160 + 2*ulcol);
         for (n= 0; n < nbytes; ++n)
            *buf++ = *p++;
      }
   }
}

/* Restore a region to the screen from user buffer */
void restore_area(int ulrow, int ulcol, int lrrow,
                  int lrcol, char *buf)
{
 /*  DETAILS OMITTED: Identical to save_area() except the
  *   assignment in the last statement is reversed:
  */
            *p++ = *buf++;
      }
   }
}

/* Fill a region with normal spaces */
void vclear_area(int ulrow, int ulcol, int lrrow, int lrcol)
{
   int far *p;
   int nchars = (lrcol-ulcol+1), row, n;

   for (row = ulrow; row <= lrrow; ++row)
   {
      p = (int far *) (base + (row*160 + 2*ulcol));
      for (n = 0; n < nchars; ++n)
          *p++ = 0x0720;
   }
}
/* End of File */