Listing 6 (byte.hpp)

/*************************************************************/
/*         Byte classes.   Copyright by Joe Schell 1989.     */
/*************************************************************/

#ifndef CLASS_byte
#define CLASS_byte
#include  <limits.h>         // Maximum values UCHAR_MAX and UINT_MAX.
#include  <stdlib.h>         // prototype exit() and EXIT_FAILURE.
#include  <iostream.h>
#include  <form.h>
/*--------------------------------------------------------------------*/
/* byte                Handle a byte.                                 */
/*--------------------------------------------------------------------*/
class byte
   {
public:
   byte()          { c = 0; }
   byte(int &i)    { c = value(i); }
   operator int() const { return c; }
   byte operator=(int &i)  { c = value(i); return *this; }
   byte operator++()   { c++; return *this; }
   byte operator--()  { c--; return *this; }
   char *make_string() { return form("%2.2X", int(c));}

private:
   unsigned char c;             // A byte.
   unsigned char value(int &i)
      {
      if (i > UCHAR_MAX)
         {
         cerr << "\nByte class: Illegal value-" << i << "\n";
         exit(EXIT_FAILURE);
         }
      return (unsigned char)i;
      }
  };  // End of byte class.
/*---------------------------------------------------------------------*/
/* word            Handle a word                                       */
/*---------------------------------------------------------------------*/
class word
   {
public:
   word()          { i = 0; }
   word(long &x)   { i = value(x); }
   operator long() const { return (long)i; }
   word operator++()   { i++; return *this; }
   word operator--()  { i--; return *this; }
   char *make_string() { return form("%4.4X", i); }
private:
   unsigned int i;     // An int.
   unsigned int value(long &x)
      {
      if (x > UINT_MAX)
         {
         cerr << "\nWord class: Illegal value-" << x << "\n";
         exit(EXIT_FAILURE);
         }
      return (unsigned int)x;
      }
  }; // End of word class.

#if sizeof(unsigned char) != sizeof(byte)
   #error Byte class cannot be used as pointer to memory.
#endif
#if sizeof(unsigned int) != sizeof(word)
   #error Word class cannot be used as pointer to memory.
#endif

#endif    // #ifndef CLASS_byte