//////////////////////////////////////////////////////////////////
// Compose
//
// C program shell for rapid application development
// The Flying Pig!
// Started 17/7/2003
//////////////////////////////////////////////////////////////////

//#define _DEBUG

//////////////////////////////////////////////////////////////////
// Includes

#include "General.h"

//////////////////////////////////////////////////////////////////
// Defines

#define VERSION_STRING_SHORT  "0.52"
#define VERSION_STRING_LONG   "0.52 (08-Jul-2005)"
#define VERSION_INT           (0.52)

#define FLAGS                 ((wimp_poll_flags)( \
                                wimp_MASK_POLLWORD | \
                                wimp_MASK_GAIN | \
                                wimp_MASK_LOSE | \
                                wimp_MASK_SCROLL | \
                                wimp_MASK_ENTERING | \
                                wimp_MASK_LEAVING \
                              ))
//                                wimp_MASK_NULL

#define FLAGS_POLL            ((wimp_poll_flags)( \
                                wimp_MASK_POLLWORD | \
                                wimp_MASK_GAIN | \
                                wimp_MASK_LOSE | \
                                wimp_MASK_SCROLL \
                              ))
//                                wimp_MASK_NULL

#define FLAGS_NOPOLL          ((wimp_poll_flags)( \
                                wimp_MASK_POLLWORD | \
                                wimp_MASK_GAIN | \
                                wimp_MASK_LOSE | \
                                wimp_MASK_SCROLL | \
                                wimp_MASK_NULL \
                              ))

#define MESSAGES              "<Compose$Dir>.Messages"
#define TEMPLATES             "<Compose$Dir>.Templates"
#define EXAMPLE               "<Compose$Dir>.Example"
#define SPRITES               "<Compose$Dir>.Sprites"

//////////////////////////////////////////////////////////////////
// Messages

//////////////////////////////////////////////////////////////////
// Structures

typedef enum _SAVETYPE
{
  SAVETYPE_INVALID = -1,

  SAVETYPE_FILE,
  SAVETYPE_ICONTEXT,
  SAVETYPE_COMPONENT,
  SAVETYPE_LINKSTART,
  SAVETYPE_LINKEND,

  SAVETYPE_NUM
} SAVETYPE;

typedef enum _LOADTYPE
{
  LOADTYPE_INVALID = -1,

  LOADTYPE_FILE,

  LOADTYPE_NUM
} LOADTYPE;

//////////////////////////////////////////////////////////////////
// Function prototypes

void    Receive               (wimp_block *pcBlock);
void    Quit                  (void);
char  * Tag                   (char * szTag);
wimp_i  CreateIconbarIcon     (char * szSprite, int nWidth, int nHeight);
wimp_w  LoadTemplate          (char * szWindowTitle);
wimp_w  LoadTemplateSprites   (char * szWindowTitle, osspriteop_area * pcSpriteArea);
void    OpenWindow            (wimp_block *pcBlock);
void    MouseClick            (wimp_block *pcBlock);
void    OpenWindowInit        (wimp_w whWindow);
void    CloseWindow           (wimp_block *pcBlock);
void    CloseWindowHandle     (wimp_w whWindow);
wimp_menu  * CreateMenu       (char * szMenu);
void    SetSubMenu            (wimp_menu * pcMain, int nItem, wimp_menu * pcSub);
void    SetMenuItemGreyness   (bool boState, wimp_menu * pcMenu, int nItem);
void    SetMenuItemTicked     (bool boTicked, wimp_menu * pcMenu, int nItem);
void    OpenMenu              (wimp_menu * pcMenu, int nXpos, int nYpos);
void    MenuSelect            (wimp_block *pcBlock);
void    UserDragBox           (wimp_block *pcBlock);
void    Keys                  (wimp_block *pcBlock);
char  * GetIconText           (wimp_w whWindow, wimp_i ihIcon);
bool    GetIconSelectionState (wimp_w whWindow, wimp_i ihIcon);
void    SetIconSelectionState (bool boState, wimp_w whWindow, wimp_i ihIcon);
void    SetIconText           (char * szText, wimp_w whWindow, wimp_i ihIcon);
void    DataSave              (wimp_block *pcBlock);
void    DataSaveAck           (wimp_block *pcBlock);
void    DataLoad              (wimp_block *pcBlock);
void    RamFetch              (wimp_block *pcBlock);
void    RamFetchReturned      (wimp_block *pcBlock);
void    RamTransmit           (wimp_block *pcBlock);
void    DataOpen              (wimp_block *pcBlock);
void    Help                  (wimp_block *pcBlock);
char  * TagCheck              (char * szTag);
void    SetIconGreyness       (bool boState, wimp_w whWindow, wimp_i ihIcon);
osspriteop_area * LoadSprites (char * szFileName);
char  * LoadFile              (char * szFileName, int * pnSize);
//int     LoadFileFlex          (char * szFilename, char * * ppcMemory, int * pnSize);
void    ShowWarningTag        (char * szTag);
void    ShowWarning           (os_error * sError);
void    OpenWindowInitCentre  (wimp_w whWindow);
void    DragSprite            (wimp_w whWindow, wimp_i ihIcon, char * szIconName);
void    DragBox               (wimp_w whWindow, wimp_i ihIcon);
void    OpenURL               (char * szURL);
void    OpenURLReturned       (wimp_block *pcBlock);
void    Acknowledged          (wimp_block *pcBlock);
void    SaveSave              (void);
inline void err               (os_error * sError);
void    CloseWarning          (void);
void    CloseMenu             (void);
void    FileLoadedFlex        (char * * pcMemory, int nSize);
void    SaveFile              (char * szFileName);

void    ReceiveLinkControl    (wimp_block *pcBlock);
void    ReceiveLinkForward    (wimp_block *pcBlock);
void    ReceiveLinkDataSave   (wimp_block *pcBlock);
void    ReceiveLinkRamFetch   (wimp_block *pcBlock);
void    ReceiveLinkRamTransmit (wimp_block *pcBlock);
void    LinkRamTransmitComplete (int nComponent, int nSearchLink);
void    LinkOpen              (int nLink);
void    LinkSend              (int nLink, char * pcData, int nSize);
void    LinkClose             (int nLink);
void    ActOnInit             (void);
void    ActOnConfig           (void);
void    ActOnLinkOpen         (int nLink);
void    ActOnLinkClose        (int nLink);
void    ActOnLinkSend         (int nLink, char * pcData, int nSize);


