home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff321.lzh
/
Turtle
/
sources
/
TurtleDemo.c
next >
Wrap
C/C++ Source or Header
|
1990-02-27
|
4KB
|
272 lines
#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/screens.h>
#include "turtle.h"
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include "turtle.proto"
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct Library *TurtleBase;
struct Screen *Screen;
struct Window *Window;
struct TurtleHandle *TurtleHandle;
BOOL NTSC = FALSE;
long _stack = 4000;
char *_procname = "Turtle Demo";
long _priority = 0;
long _BackGroundIO = 0;
int CXBRK()
{
return(0);
}
void spiralen()
{
void ClrScrn();
void WaitKey();
int szahl;
WORD winkel;
float dist;
ClrScrn();
for (winkel = 300; winkel > 0; winkel -= 120)
{
ResetTurtle(TurtleHandle); SetAngle(TurtleHandle, winkel); dist = 4;
for (szahl = NTSC ? 104 : 128; szahl; szahl--)
{
Forward(TurtleHandle,dist);
dist += 2;
TurnLeft(TurtleHandle,60);
};
};
WaitKey();
}
void pyramiden()
{
void ClrScrn();
void WaitKey();
int pkanten, pzahl;
WORD winkel = 45;
float dist = 10;
ClrScrn();
for (pzahl = NTSC ? 34 : 45; pzahl; pzahl--)
{
for (pkanten = 8; pkanten; pkanten--)
{
Forward(TurtleHandle,dist);
TurnLeft(TurtleHandle,winkel);
};
if (winkel > 0)
TurnRight(TurtleHandle,45);
else
{
TurnLeft(TurtleHandle,45);
dist += 4;
};
winkel = -winkel;
};
WaitKey();
}
void schleifen()
{
void ClrScrn();
void WaitKey();
int szahl;
WORD winkel = 0;
ClrScrn();
ShowTurtle(TurtleHandle);
for (szahl = 721; szahl; szahl--)
{
Forward(TurtleHandle,(float) 15);
winkel = (winkel+29) % 360;
TurnLeft(TurtleHandle,winkel);
};
HideTurtle(TurtleHandle);
WaitKey();
}
void flocke()
{
void ClrScrn();
void WaitKey();
void strckzeich(int);
int i;
ClrScrn();
SetPosition(TurtleHandle,(WORD) (NTSC ? 158 : 117),(WORD) (NTSC ? 296 : 376));
for (i = 3; i; i--)
{
strckzeich(0);
TurnLeft(TurtleHandle,120);
};
}
void strckzeich (int tiefe)
{
if (tiefe <= 3)
{
strckzeich(tiefe+1);
TurnRight(TurtleHandle,60);
strckzeich(tiefe+1);
TurnLeft(TurtleHandle,120);
strckzeich(tiefe+1);
TurnRight(TurtleHandle,60);
strckzeich(tiefe+1);
}
else
Forward(TurtleHandle,(float) (NTSC ? 4 : 5));
}
void OpenAll()
{
void CloseAll();
struct NewScreen ns;
struct NewWindow nw;
if (!(IntuitionBase = OpenLibrary("intuition.library",0)))
CloseAll();
if (!(GfxBase = OpenLibrary("graphics.library",0)))
CloseAll();;
if (!(TurtleBase = OpenLibrary("turtle.library",0)))
CloseAll();
ns.LeftEdge = 0;
ns.TopEdge = 0;
ns.Width = 640;
ns.Height = STDSCREENHEIGHT;
ns.Depth = 1;
ns.DetailPen = 0;
ns.BlockPen = 1;
ns.ViewModes = HIRES|LACE;
ns.Type = CUSTOMSCREEN;
ns.Font = NULL;
ns.DefaultTitle = "Turtle Demo - Press Return for the next Picture";
ns.Gadgets = NULL;
if (!(Screen = OpenScreen(&ns)))
CloseAll();
if (Screen->Height == 400) NTSC = TRUE;
nw.LeftEdge = 0;
nw.TopEdge = 0;
nw.Width = 640;
nw.Height = Screen->Height;
nw.DetailPen = 0;
nw.BlockPen = 1;
nw.IDCMPFlags = VANILLAKEY;
nw.Flags = NOCAREREFRESH|ACTIVATE|BORDERLESS|BACKDROP|SIMPLE_REFRESH;
nw.FirstGadget = NULL;
nw.CheckMark = NULL;
nw.Title = NULL;
nw.Screen = Screen;
nw.Type = CUSTOMSCREEN;
if (!(Window = OpenWindow(&nw)))
CloseAll();
if (!(TurtleHandle = CreateTurtle(Window->RPort,320,(WORD) (Window->Height/2+5),0,HIDETURTLE|TCX640Y400)))
CloseAll();
}
void CloseAll()
{
if (TurtleHandle) ReturnTurtle(TurtleHandle);
if (Window) CloseWindow(Window);
if (Screen) CloseScreen(Screen);
if (TurtleBase) CloseLibrary(TurtleBase);
if (IntuitionBase) CloseLibrary(IntuitionBase);
if (GfxBase) CloseLibrary(GfxBase);
exit();
}
void WaitKey()
{
struct IntuiMessage *message;
char taste;
do
{
WaitPort(Window->UserPort);
message = (struct IntuiMessage *) GetMsg(Window->UserPort);
taste = message->Code;
ReplyMsg((struct Message *) message);
} while (taste != 13);
}
void ClrScrn()
{
HideTurtle(TurtleHandle);
Move(Window->RPort,0,0);
ClearScreen(Window->RPort);
ResetTurtle(TurtleHandle);
}
void _main()
{
OpenAll();
spiralen();
pyramiden();
schleifen();
flocke();
WaitKey();
CloseAll();
}