Listing 3 ENGINE and SYM class definitions

#if !defined(ENGINE_HPP)
#define ENGINE_HPP
/////////////////////////////////////////////////////
//    ENGINE + SYM definition, an abstract generator
/////////////////////////////////////////////////////
#include "STR.HPP"

class SYM {
public:
   virtual void set(const char szSym[], int nVal)= 0;
   virtual int get(const char szSym[]) = 0 ;
          // if szSym not found, should return 0
};

class ENGINE {
   enum { MAXLEN = 1024 };
public:
   ENGINE(const char szHppTemplate[],
         const char szCppTemplate[]);
   virtual ~ENGINE() {}

   void go(const char szTargetDir[],
          const char szClass[], SYM* pSym);
protected:
   static const char _Class[];
   static const char _FlagOn[];
   static const char _FlagOff[];
private:
// to be redefined for some presentation layer:
   virtual void
      cannotOpen(const char szFileSpec[]) = 0;
   virtual int

      overwriteQuest(const char szFileSpec[]) = 0;
   virtual void
      unexpectedEOB(const char szFileSpec[], int nLine) = 0;
   virtual void
      missingEOB(const char szFileSpec[], int nLine) = 0;
   virtual void
      runEditor(const char szFileSpec[]) {}

   const STR _inHpp;
   const STR _inCpp;
   STR _inLine, _outLine, _stamp;

   void _fileJob(const char szInFile[],
   const char szOutFile[],
   const char newClass[], SYM *pSym);
   const char* _substitute(const char newClass[]);
};
#endif
// End of file