#ifndef __qwaq_editor_editbuffer_h
#define __qwaq_editor_editbuffer_h

#ifdef __QFCC__
#include <Object.h>

//FIXME finish unsigned in qfcc
#ifndef umax
#define umax 0x7fffffff
#endif

#endif//__QFCC__

typedef struct eb_sel_s {
	unsigned    start;
	unsigned    length;
} eb_sel_t;

typedef struct eb_color_s {
	int         normal;
	int         selected;
} eb_color_t;

#ifdef __QFCC__
@interface EditBuffer : Object
{
	struct edit_buffer_s *buffer;
}
+(EditBuffer *)buffer;
+(EditBuffer *)withFile:(string)filename;
-init;
-initWithFile: (string) filename;
- (unsigned) nextChar: (unsigned) charPtr;
- (unsigned) prevChar: (unsigned) charPtr;
- (unsigned) nextNonSpace: (unsigned) charPtr;
- (unsigned) prevNonSpace: (unsigned) charPtr;
- (int) isWord: (unsigned) charPtr;
- (unsigned) nextWord: (unsigned) wordPtr;
- (unsigned) prevWord: (unsigned) wordPtr;
- (unsigned) nextLine: (unsigned) linePtr;
- (unsigned) prevLine: (unsigned) linePtr;
- (unsigned) nextLine: (unsigned) linePtr : (unsigned) count;
- (unsigned) prevLine: (unsigned) linePtr : (unsigned) count;

- (unsigned) charPos: (unsigned) linePtr at: (unsigned) target;
- (unsigned) charPtr: (unsigned) linePtr at: (unsigned) target;

- (eb_sel_t) getWord: (unsigned) wordPtr;
- (eb_sel_t) getLine: (unsigned) linePtr;
- (unsigned) getBOL: (unsigned) linePtr;
- (unsigned) getEOL: (unsigned) linePtr;
- (unsigned) getBOT;
- (unsigned) getEOT;

- (string) readString: (eb_sel_t) selection;
- (int) getChar: (unsigned) charPtr;
- (void) putChar: (int) char at:(unsigned) charPtr;
- (void) insertChar: (int) char at:(unsigned) charPtr;

- (unsigned) countLines: (eb_sel_t) selection;
- (eb_sel_t) search: (eb_sel_t) selection
				for: (string) str
		  direction: (int) dir;
- (eb_sel_t) isearch: (eb_sel_t) selection
				 for: (string) str
		   direction: (int) dir;
- (unsigned) formatLine: (unsigned) linePtr
				   from: (unsigned) xpos
				   into: (int *) buf
				  width: (unsigned) length
			  highlight: (eb_sel_t) selection
				 colors: (eb_color_t) colors;

- (BOOL) modified;
- (unsigned) textSize;
- (int) saveFile: (string) fileName;
@end
#else//__QFCC__

#include "QF/progs/pr_obj.h"

typedef struct qwaq_editbuffer_s {
	pr_id_t     isa;
	pr_ptr_t    buffer;
} qwaq_editbuffer_t;

#endif//!__QFCC__

#endif//__qwaq_editor_editbuffer_h
