#if !defined _IGOR_H
#define _IGOR_H
//////////////////////////////////////////////////////////////////
// Igor
//
// Simple Telnet Server
// Flying Pig
// Started 05/8/2004
//////////////////////////////////////////////////////////////////

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

#include "oslib/types.h"

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

//#define _DEBUG

#define FLAGS_NULL            ((wimp_poll_flags)0x3c30)
#define FLAGS_NONULL          ((wimp_poll_flags)0x3c31)

#ifndef TRUE
#define TRUE                  (1)
#endif
#ifndef FALSE
#define FALSE                 (0)
#endif

#define SPRITES               "<Igor$Dir>.Sprites"
#define MESSAGES              "<Igor$Dir>.Messages"
#define TEMPLATES             "<Igor$Dir>.Templates"
#define EMAIL                 "mailto:david@flypig.co.uk"
#define WEBSITE               "http://www.flypig.co.uk/"

#define IYONIX_SOCKET_ERR     (0x20e00)

#define Report_Text0          (0x054c80)

#define message_URL_LAUNCH    (0x4af80u)
#define message_HELP          (0x502u)

#define SOCKET_NOT_SET        (NULL)

#if defined _DEBUG
#define REPORT                Report
#define REPORTVAR             ReportVar
void    Report                (char * szMessage);
void    ReportVar             (char * szFormat, int nVariable);
#else
#define REPORT(szMessage)     /* szMessage */
#define REPORTVAR(szMessage, nVariable)    /* szMessage, nVariable */
#endif

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

typedef enum _SAVETYPE
{
  SAVETYPE_INVALID = -1,
  SAVETYPE_FILE,
  SAVETYPE_ICONTEXT,
  SAVETYPE_NUM
} SAVETYPE;

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

void    Receive               (wimp_block *pcBlock);
void    Quit                  (void);
char  * Tag                   (char * szTag);
char  * TagArg (char * szTag, char * szArg0);
wimp_i  CreateIconbarIcon     (char * szSprite, int nWidth, int nHeight);
wimp_i  CreateIconbarIconSprites (char * szSprite, int nWidth, int nHeight, osspriteop_area * pcArea);
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    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    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);
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    FileLoaded            (char * pcMemory, int nSize);
void    SaveFile              (char * szFileName);


#endif
