/* Prototypes for functions defined in
WBStartup+Prefs.c
 */

#include <dos/dos.h>  /* BPTR */

extern enum GadgetIDs {SAVE_GAD=0,CANCEL_GAD,LIST_GAD,TOTALGADGETS};
extern enum MenuIDs {SAVE_MENU=0,ABOUT_MENU,QUIT_MENU,RESTORE_MENU,PROGRAMINFO_MENU,SORTALPHABETICALLY_MENU,SORTPRIORITY_MENU, SELECTALL_MENU, SELECTNONE_MENU, SELECTTOGGLE_MENU, SELECTGROUP_MENU,
              CREATEGROUP_MENU,DELETEGROUP_MENU,MODIFYGROUP_MENU};

struct WBStartupPrefs
{
  char ExecutePath[200];
  char StoragePath[200];
  BOOL Alphabetize;
  APTR filenamePool;               /* Memory Pool for filenames */
  APTR groupPool;                  /* Memory Pool for groups */
  BPTR EnabledDirLock;             /* A Lock on the enabled directory */
  BPTR DisabledDirLock;            /* A Lock on the disabled directory */
  ULONG NumPrograms;               /* The # of programs in the list */
};


struct GadgetData
{
  struct Gadget *gadgets[TOTALGADGETS];
  struct Image  *upimage;
  struct Image  *downimage;
  struct Object *stringframe;
};

struct WBSPNode   /* Workbench Startup Prefs Node */
{
  struct Node wbsp_node;
  UBYTE Original_Type;
  int Original_Priority;  /* no greater than BYTE */
};

struct GroupNode
{
  struct Node group_node;
  struct List enabled;
};

extern struct Node *FirstSelectedNode;
extern char const version[100];
extern ULONG PRIORITYEDGE;
extern struct IntuitionBase * IntuitionBase;
extern struct Library * GadToolsBase;
extern struct Library * CxBase;
extern struct Library * IconBase;
extern struct Library * ScreenNotifyBase;
extern struct Library * WorkbenchBase;
extern struct Library * DiskfontBase;
extern struct GfxBase * GfxBase;
extern struct Library * UtilityBase;
extern struct Hook CBLVHook;

int main(int , char ** );
void GetFilenames(struct List *filenamequeue, APTR memPool, char *directory, UBYTE type, struct WBStartupPrefs *prefs);
struct WBSPNode *AddFileToList(struct List *filenamequeue, APTR memPool, char *pathname, UBYTE type, struct WBStartupPrefs *prefs);
void GetArguments(int , char ** , struct WBStartupPrefs * );
void ProcessEvents(struct List * , struct List * , struct WBStartupPrefs *, APTR );
BOOL RenderGadgets(struct Gadget ** , void * , struct Window * , struct Gadget ** , struct List * , struct Gadget * (* )(struct Gadget ** , void * , struct Window * , struct Gadget ** , struct List * ));
void ShowRequester(STRPTR );
struct Gadget * createAllGadgets(struct Gadget ** , void * , struct Window * , struct Gadget ** , struct List * );
void RestoreTypes(struct List * );
void SaveChanges(struct List * , struct WBStartupPrefs * );
BOOL ChangePriTooltype(char * , BYTE );
void ShowWBIconRequester(struct WBSPNode * , struct WBStartupPrefs * , struct Screen * );
void AlphabetizeList(struct List * );
ULONG GetScreenHeight(struct Screen * );
ULONG BestWindowHeight(struct Screen * , struct List * );
ULONG ListViewHeight(struct Screen *scr, struct List *list);
void SortPriorityList(struct List * );
void SaveGroups(struct List * );
void ReadGroups(struct List *, APTR memPool);
void CreateGroup(struct List *grouplist, struct List *wbsplist, char *groupname, APTR memPool);
void SelectGroup(struct List * , struct List * );
void DeleteGroup(struct GroupNode *, APTR );
