/* funcs.h */

/* memory.c functions */
extern void * mymalloc(ULONG size);
extern void * myrealloc(void * old, ULONG size, ULONG oldsize);
extern void myfree(void * ptr, ULONG size);

/* lines.c functions */
extern void setbox(line_ptr seg);
extern line_ptr addpoint(line_ptr seg,int x,int y);
extern line_ptr appendpoint(line_ptr line,int x,int y);
extern void insertpoint(line_ptr seg,int point,int x,int y);
extern void deletepoint(line_ptr seg,int point);
extern void movepoint(line_ptr seg,int point,int x,int y);
extern line_ptr copyline(line_ptr line);
extern line_ptr findpoint(line_ptr line,int x,int y,int *point);
extern line_ptr findintersect(line_ptr line,int x,int y,int *point);
extern line_ptr cutseg(line_ptr seg,int point);
extern line_ptr deleteseg(line_ptr seg);
extern line_ptr cutline(line_ptr line,line_ptr seg);
extern void deleteline(line_ptr line);
extern void appendline(line_ptr line,line_ptr append);
extern void scaleline(line_ptr line,int xfact,int yfact);

/* objects.c functions */
extern obj_ptr locateframe(obj_ptr object);
extern obj_ptr locatestart(obj_ptr object);
extern void moveobject(obj_ptr object,int dx,int dy);
extern void moveobjectchain(obj_ptr object,int dx,int dy);
extern void addimage(obj_ptr object,line_ptr line,int type);
extern obj_ptr makeobject(void);
extern void mergeobject(obj_ptr object,obj_ptr append);
extern void addobject(obj_ptr chain,obj_ptr object,int frames);
extern void addchain(obj_ptr frame,obj_ptr chain);
extern void removechain(obj_ptr chain);
extern void deletechain(obj_ptr chain);
/* not yet implemented functions */
extern copyobject(obj_ptr object);
extern copychain(obj_ptr chain);
extern insertframe(obj_ptr frame);
extern deleteframe(obj_ptr frame);

/* animate.c functions */
extern int strokes(line_ptr line);
extern void addsegs(line_ptr seg,int n,int req);
extern void breakstroke(line_ptr seg,int n);
extern void addstrokes(line_ptr line,int n,int req);
extern void preprocess(line_ptr l1,line_ptr l2);
extern int relative(int x ,int y ,int x1,int y1,int x2,int y2,
                    int x3,int y3,int x4,int y4,int *l,int *w);
extern line_ptr makerelative(obj_ptr object);
extern void makeimage(obj_ptr object,line_ptr relative);
extern void inbetween(int xi,int yi,int xo,int yo,int frame,int frames,
                      int law,int *x,int *y);
extern line_ptr imagebetween(line_ptr linein,line_ptr lineout,
                             int frame,int frames,int law);
extern obj_ptr findtype(obj_ptr object,int flags,int *n);
extern obj_ptr findtypeback(obj_ptr object,int flags,int *n);
extern void makeoutline(obj_ptr with,obj_ptr without);
extern void derelative(obj_ptr firstimage,int n);
extern void animate(obj_ptr object);

/* render functions */
extern void next(void);
extern void prev(void);
extern void DrawFrame(obj_ptr frame);
extern void EraseFrame(obj_ptr frame);
extern void DrawObject(line_ptr line,int xoff,int yoff);
extern void DrawOutline(line_ptr out,line_ptr skel,int xoff,int yoff);

/* file functions */
extern BOOL filerequest(void);
extern void new(void);
extern void save(void);
extern void load(void);
