#ifndef CC_RESOURCES_H
#define CC_RESOURCES_H
//
// Das Headerfile für den ResGrep
//

extern "C" {
#include <stdio.h>
};
#include "res.h"
#include "list.h"

class ResID : public node
{
		       // in node->name steht der Name der RESOURCE, in
		       // node->pack der gepackte Typ und in node->pri
		       // die ID.
   unsigned char  Attrs;      // Die Attribute der Resource.
   unsigned long  DataOffset; // Beginn der Daten im File.
 public:
   ResID(MacResID *mri, unsigned long theResType,
	 void *theMacResNameList, unsigned long FileDataOffset);
   ~ResID(void);

   int export(void);   // Exportiert die Daten
};

class ResType : public node
{
		       // in node->name steht der Name der Datei und in
		       // node->pack der gepackte Typ.
   list theResID;      // Die Liste mit den ID-Einträgen.
   short NumberOfResIDs; // Die Anzahl der abhängigen IDs.
 public:
   ResType(MacResType *mrt, MacResID *mri, void *theMacResNameList,
	   unsigned long FileDataOffset, char *name=NULL, long pri=0);
   ~ResType(void);
		       // Und noch die gleichen (selben???) Methoden wie
		       // bei einem ResFile.

   void hidewin(struct IntuiMessage *msg); // Versteckt  das Listenfenster
   void revealwin(struct IntuiMessage *msg); // Macht das Fenster sichtbar.
   void closewin(struct IntuiMessage *msg);
   void displaywin(struct MsgPort *msg, struct Menu *men);

   node *check(struct IntuiMessage *msg);
};


class ResFile : public node
{
		       // in node::name steht der Filename der Datei
		       // (OHNE Pfad!)
   list  theResType;   // Die Liste aller ResourceTypen dieses Files.
   char *fullname;     // Vollständiger Name der Datei.
   FILE *fp;	       // Der Filepointer für 'fread()' und 'fwrite()'.
   short NumberOfResTypes; // Anzahl der ResourceTypen in diesem File.
   unsigned long  DataOffset; // Anfang der Daten im File.
   unsigned short Attrs;   // Die Fileattribute.
 public:
   ResFile(void);
   ~ResFile(void);     // Schließt das File und gibt alle abhängigen Listen
		       // frei.

   int open(char *name=NULL); // Öffnet ein ResourceFile, gibt das vorherige
		       // wieder frei (falls es schon eins gab.)
   void close(void);   // Schließt ein File.

   FILE *getfp(void);

   // Dann noch die Funktionen, die die ResType-Liste betreffen:
   void hidewin(struct IntuiMessage *msg); // Versteckt das Listenfenster
   void hidechild(struct IntuiMessage *msg); // Versteckt dieses und
		       // ALLE von ihm abhängige Fenster
   void revealwin(struct IntuiMessage *msg); // Macht das Fenster sichtbar.
   void revealchild(struct IntuiMessage *msg); // Macht dieses
		       // und ALLE abhängigen sichtbar.
   void closewin(struct IntuiMessage *msg);
   void closechild(struct IntuiMessage *msg);
   void displaywin(struct MsgPort *msg, struct Menu *);

   node *check(struct IntuiMessage *msg);
};

extern list ResFileList;
#endif

