/*
 *   kml.h
 *
 *   This file is part of Emu48
 *
 *   Copyright (C) 1995 Sebastien Carlier
 *
 */

#define LEX_BLOCK   1
#define LEX_COMMAND 2
#define LEX_PARAM   3

typedef enum eTokenId
{
	TOK_NONE, //0
	TOK_ANNUNCIATOR, //1
	TOK_BACKGROUND, //2
	TOK_IFPRESSED, //3
	TOK_RESETFLAG, //4
	TOK_SCANCODE, //5
	TOK_MENUITEM, //6
	TOK_INTEGER, //7
	TOK_SETFLAG, //8
	TOK_RELEASE, //9
	TOK_VIRTUAL, //10
	TOK_INCLUDE, //11
	TOK_STRING, //12
	TOK_GLOBAL, //13
	TOK_AUTHOR, //14
	TOK_BITMAP, //15
	TOK_OFFSET, //16
	TOK_BUTTON, //17
	TOK_IFFLAG, //18
	TOK_ONDOWN, //19
	TOK_NOHOLD, //20
	TOK_TITLE, //21
	TOK_OUTIN, //22
	TOK_PATCH, //23
	TOK_PRINT, //24
	TOK_DEBUG, //25
	TOK_COLOR, //26
	TOK_MODEL, //27
	TOK_PRESS, //28
	TOK_TYPE, //29
	TOK_SIZE, //30
	TOK_DOWN, //31
	TOK_ZOOM, //32
	TOK_ELSE, //33
	TOK_ONUP, //34
	TOK_EOL, //35
	TOK_MAP, //36
	TOK_ROM, //37
	TOK_LCD, //38
	TOK_NOTFLAG, //39
	TOK_END //40
} TokenId;

#define TYPE_NONE    00
#define TYPE_INTEGER 01
#define TYPE_STRING  02

typedef struct Token
{
	TokenId eId;
	DWORD  nParams;
	DWORD  nLen;
	CHAR   szName[20];
} Token;

typedef struct Line
{
	struct Line* pNext;
	TokenId eCommand;
	DWORD nParam[6];
} Line;

typedef struct Block
{
	TokenId eType;
	DWORD nId;
	struct Line*  pFirstLine;
	struct Block* pNext;
} Block;

#define BUTTON_NOHOLD  0x0001
#define BUTTON_VIRTUAL 0x0002
typedef struct Button
{
	UINT nId;
	BOOL bDown;
	UINT nType;
	DWORD dwFlags;
	UINT nOx, nOy;
	UINT nDx, nDy;
	UINT nCx, nCy;
	UINT nOut, nIn;
	Line* pOnDown;
	Line* pOnUp;
} Button;

typedef struct Annunciator
{
	UINT nOx, nOy;
	UINT nDx, nDy;
	UINT nCx, nCy;
} Annunciator;

extern Block* pKml;
extern BOOL DisplayChooseKml(CHAR cType);
extern VOID FreeBlocks(Block* pBlock);
extern VOID DrawAnnunciator(UINT nId, BOOL bOn);
extern VOID RefreshButtons();
extern VOID MouseButtonDownAt(UINT nFlags, DWORD x, DWORD y);
extern VOID MouseButtonUpAt(UINT nFlags, DWORD x, DWORD y);
extern VOID MouseMovesTo(UINT nFlags, DWORD x, DWORD y);
extern VOID RunKey(BYTE nId, BOOL bPressed);
extern BOOL InitKML(LPCSTR szFilename, BOOL bNoLog);
extern VOID KillKML();
