home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_progs
/
educ
/
splines.lzh
/
SPLINES
/
SPLINE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-16
|
2KB
|
80 lines
/* The routines in this file are copyright (c) 1987 by Helene (Lee) Taran.
* Permission is granted for use and free distribution as long as the
* original author's name is included with the code.
*/
#include "spline.h"
extern struct Window *Window;
extern struct Screen *Screen;
extern struct PopUp_Menu CurveMenu, PointMenu;
DLIST_ELEMENT Control_Points;
main()
{
OpenLibraries();
SetupEnvironment();
Init_List(&Control_Points);
Create_ControlPoints();
Init_GValues(); /* sets up the Gvalues for interpolating splines */
while(1) /* Main Loop */
{ struct IntuiMessage *message, *GetMsg();
struct IntuiMessage mcopy;
/* Wait until something happens and then respond to it */
Wait(1 << Window->UserPort->mp_SigBit);
/* Now, one or more input events have arrived. Respond to ALL */
while (message = GetMsg(Window->UserPort))
{
mcopy = *message; /* make a copy of the message */
ReplyMsg(message); /* reply to it immediately */
ProcessMessage(&mcopy); /* react to the message */
}
}
}
/* ProcessMessage processes an input event given */
ProcessMessage(msg)
struct IntuiMessage *msg;
{
switch (msg->Class) {
case CLOSEWINDOW : close_things(); exit(0);
case MOUSEBUTTONS :
if (msg->Code == SELECTDOWN) {
DLISTPTR p,Select_ControlPoint();
if (p = Select_ControlPoint(msg->MouseX,msg->MouseY))
Edit_ControlPoint(Window,p);
else Edit_CurveStyle(Window);
}
break;
}
}
Create_ControlPoints()
{
DLISTPTR p; void *calloc();
REAL_POINT *c;
p = (DLISTPTR)calloc(1,sizeof(DLIST_ELEMENT));
c = (REAL_POINT *)calloc(1,sizeof(REAL_POINT));
c->x = 300; c->y = 200; p->contents = c;
INSERT_FIRST(p,&Control_Points);
p = (DLISTPTR)calloc(1,sizeof(DLIST_ELEMENT));
c = (REAL_POINT *)calloc(1,sizeof(REAL_POINT));
c->x = 155; c->y = 30; p->contents = c;
INSERT_FIRST(p,&Control_Points);
p = (DLISTPTR)calloc(1,sizeof(DLIST_ELEMENT));
c = (REAL_POINT *)calloc(1,sizeof(REAL_POINT));
c->x = 20; c->y = 175; p->contents = c;
INSERT_FIRST(p,&Control_Points);
Draw_ControlPoints(Window);
Draw_Natural_Bspline(Window,&Control_Points);
}