AeInstFile.h 1.63 KB
#ifndef __AeInstFile__
#define __AeInstFile__

#include <fstream.h>

#include "AeFile.h"
#include "AeInstHash.h"
#include "AeInstList.h"


class AeAsset;
class AeInstAsset;
class AeBankAsset;
class AeSoundAsset;
class AeEnvAsset;
class AeKeymapAsset;
class AeBankFileAsset;

class AeInstHash;
class AeInstList;


class AeInstID
{
public:
    AeInstID *	next;
    char *	name;
    int		lextype;
};



class AeInstFile : public AeAssetFile
{
public:
                        AeInstFile (char *);
    virtual		~AeInstFile (void);

    virtual AeErr      	Read (AeAsset *&);
    virtual AeErr	ReadList (GList<AeAsset *> *&);
    virtual AeErr	Write (AeAssetBase *);

    char *		MakeUnquotedStr (char * src);

    // these fields are public for easy access by yacc
    AeBankFileAsset *  	curBankFile;
    AeBankAsset *      	curBank;
    AeInstAsset *     	curInstrument;
    AeSoundAsset *    	curSound;
    AeEnvAsset *      	curEnvelope;
    AeKeymapAsset *    	curKeyMap;

    AeInstHash *	hash;
    AeInstList *	list;

private:
    AeErr		read (void);

    AeErr		write (ofstream &, AeAssetBase *, TAssetType);
    AeErr		writeAsset (ofstream &, AeAsset *);
    AeErr		writeBank (ofstream &, AeBankAsset *);
    AeErr		writeInst (ofstream &, AeInstAsset *);
    AeErr		writeSound (ofstream &, AeSoundAsset *);
    AeErr		writeEnv (ofstream &, AeEnvAsset *);
    AeErr		writeKeymap (ofstream &, AeKeymapAsset *);

    void		initReserved (void);
};


extern class AeInstFile *      	instFile;


// lex/yacc interface
void    	initLex(void);

extern void     yyerror(char *msg);
extern int      yyparse(void);
extern int      yylineno;
extern char     yytext[];

#endif