/************
 *
 * Includes:
 *
 ************/

#include <exec/types.h> 
#include <intuition/intuition.h>

/***********
 *
 * Defines:
 *
 ***********/

#define MAXWIDTH 80
#define MAXHEIGHT 50
#define BGPEN 0L
#define FGPEN 1L
#define FOLDPEN 2L
#define CTRLPEN 3L
#define EVENLEN(x) (((x)+1)&-2)
#define CONTROLCODE(c) (((c)&127)<32)

#define ZLINESPTR(n) actualEditor->zlinesptr[n]
#define ZLINESNR(n) actualEditor->zlinesnr[n]

/*******************
 *
 * Data structures:
 *
 *******************/

struct Zline
{
	struct Zline *succ;
	struct Zline *pred;
	UBYTE flags;
	UBYTE len;
};

#define ZLF_USED 128
#define ZLF_FSE 64
#define ZLF_FOLD 63

struct ZList
{
	struct Zline *head;
	struct Zline *tail;
	struct Zline *tailpred;
};

struct Memorysection
{
	struct Memorysection *succ;
	struct Memorysection *pred;
	UWORD len;
};

struct FList
{
	struct Memorysection *head;
	struct Memorysection *tail;
	struct Memorysection *tailpred;
};

struct Memoryblock
{
	struct Memoryblock *succ;
	struct Memoryblock *pred;
	ULONG length;
	ULONG free;
	struct FList freeliste;
};

struct BList
{
	struct Memoryblock *head;
	struct Memoryblock *tail;
	struct Memoryblock *tailpred;
};

struct Editor
{
	struct Editor *succ;
	struct Editor *pred;
	struct Window *window;
	struct BList block;
	struct ZList zlines;
	UBYTE buffer[MAXWIDTH];
	UBYTE tabstring[MAXWIDTH];
	UWORD num_lines;
	struct Zline *actual;
	struct Zline *zlinesptr[MAXHEIGHT];
	UWORD zlinesnr[MAXHEIGHT];
	UWORD toppos,leftpos;
	UWORD xpos,ypos;
	UWORD wdy;
	UWORD changed:1;
	UWORD insert:1;
	struct RastPort *rp;
	UWORD xoff,yoff;
	UWORD xscr,yscr;
	UWORD cw,ch;
	UWORD wcw,wch;
	UWORD xrl,xrr,yru,bl;
	UWORD minfold;
	UWORD maxfold;
};

struct EList
{
	struct Editor *head;
	struct Editor *tail;
	struct Editor *tailpred;
};
