/*******************************************************************************
 *	GenBoap.h	Generate output
 *			T.Barnaby,	BEAM Ltd,	2/5/03
 *******************************************************************************
 */
#ifndef GENBOAP_HH
#define GENBOAP_HH

#include <Gen.h>

class GenBoap : public Gen {
public:
			GenBoap();
			~GenBoap();
	BError		produce(Node* n, BString fileName);
private:
	BError		produceHeaderIntC();
	BError		produceHeaderIntS();
	BError		produceTrailerInt();
	BError		produceHeaderImpC();
	BError		produceHeaderImpS();
	BError		produceHeaderIntT();
	BError		produceHeaderImpT();

	void		produceIntC(Node* n);
	void		produceIntS(Node* n);
	void		produceImpC(Node* n);
	void		produceImpS(Node* n);
	void		produceIntT(Node* n);
	void		produceImpT(Node* n);

	void		pushPopVar(FileIndent& file, int push, BString func, Node* type, BString name);
	void		produceFuncC(Node* n);
	void		produceFuncAdd(Node* n);
	void		produceFuncS(Node* n);
	
	BString		getTypeSwapList(Node* n);

	BString		ofileName;
	FileIndent	ofileIntC;
	FileIndent	ofileIntS;
	FileIndent	ofileImpC;
	FileIndent	ofileImpS;
	FileIndent	ofileIntT;
	FileIndent	ofileImpT;
	BString		omodule;
	BString		ointerface;
	int		ofuncNum;
	int		opushPopDepth;
	int		oapiVersion;
};

#endif
