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 >
C/C++ Source or Header  |  1990-02-27  |  4KB  |  272 lines

  1. #include <exec/types.h>
  2. #include <intuition/intuition.h>
  3. #include <intuition/screens.h>
  4. #include "turtle.h"
  5.  
  6. #include <proto/exec.h>
  7. #include <proto/graphics.h>
  8. #include <proto/intuition.h>
  9. #include "turtle.proto"
  10.  
  11. struct IntuitionBase *IntuitionBase;
  12. struct GfxBase *GfxBase;
  13. struct Library *TurtleBase;
  14.  
  15. struct Screen *Screen;
  16. struct Window *Window;
  17.  
  18. struct TurtleHandle *TurtleHandle;
  19.  
  20. BOOL NTSC = FALSE;
  21.  
  22. long _stack = 4000;
  23. char *_procname = "Turtle Demo";
  24. long _priority = 0;
  25. long _BackGroundIO = 0;
  26.  
  27.  
  28. int CXBRK()
  29.  
  30. {
  31.     return(0);
  32. }
  33.  
  34.  
  35. void spiralen()
  36.  
  37. {
  38.     void ClrScrn();
  39.     void WaitKey();
  40.     
  41.     int szahl;
  42.     WORD winkel;
  43.     float dist;
  44.     
  45.     ClrScrn();
  46.     
  47.     for (winkel = 300; winkel > 0; winkel -= 120)
  48.     {
  49.         ResetTurtle(TurtleHandle); SetAngle(TurtleHandle, winkel); dist = 4;
  50.         
  51.         for (szahl =  NTSC ? 104 : 128; szahl; szahl--)
  52.         {
  53.             Forward(TurtleHandle,dist);
  54.             dist += 2;
  55.             TurnLeft(TurtleHandle,60);
  56.         };
  57.     };
  58.     
  59.     WaitKey();
  60. }
  61.  
  62.  
  63. void pyramiden()
  64.  
  65. {
  66.     void ClrScrn();
  67.     void WaitKey();
  68.     
  69.     int pkanten, pzahl;
  70.     WORD winkel = 45;
  71.     float dist = 10;
  72.     
  73.     ClrScrn();
  74.     
  75.     for (pzahl = NTSC ? 34 : 45; pzahl; pzahl--)
  76.     {
  77.         for (pkanten = 8; pkanten; pkanten--)
  78.         {
  79.             Forward(TurtleHandle,dist);
  80.             TurnLeft(TurtleHandle,winkel);
  81.         };
  82.         
  83.         if (winkel > 0)
  84.             TurnRight(TurtleHandle,45);
  85.         else
  86.         {
  87.             TurnLeft(TurtleHandle,45);
  88.             dist += 4;
  89.         };
  90.         winkel = -winkel;
  91.     };
  92.     
  93.     WaitKey();
  94. }
  95.  
  96.  
  97. void schleifen()
  98.  
  99. {
  100.     void ClrScrn();
  101.     void WaitKey();
  102.     
  103.     int szahl;
  104.     WORD winkel = 0;
  105.     
  106.     ClrScrn();
  107.     
  108.     ShowTurtle(TurtleHandle);
  109.     for (szahl = 721; szahl; szahl--)
  110.     {
  111.         Forward(TurtleHandle,(float) 15);
  112.         
  113.         winkel = (winkel+29) % 360;
  114.         TurnLeft(TurtleHandle,winkel);
  115.     };
  116.     HideTurtle(TurtleHandle);
  117.     
  118.     WaitKey();
  119. }
  120.  
  121.  
  122. void flocke()
  123.  
  124. {
  125.     void ClrScrn();
  126.     void WaitKey();
  127.     
  128.     void strckzeich(int);
  129.     
  130.     int i;
  131.     
  132.     ClrScrn();
  133.     
  134.     SetPosition(TurtleHandle,(WORD) (NTSC ? 158 : 117),(WORD) (NTSC ? 296 : 376));
  135.     
  136.     for (i = 3; i; i--)
  137.     {
  138.         strckzeich(0);
  139.         TurnLeft(TurtleHandle,120);
  140.     };
  141. }
  142.  
  143.  
  144. void strckzeich (int tiefe)
  145.  
  146. {
  147.     if (tiefe <= 3)
  148.     {
  149.         strckzeich(tiefe+1);
  150.         TurnRight(TurtleHandle,60);
  151.         strckzeich(tiefe+1);
  152.         TurnLeft(TurtleHandle,120);
  153.         strckzeich(tiefe+1);
  154.         TurnRight(TurtleHandle,60);
  155.         strckzeich(tiefe+1);
  156.     }
  157.     else
  158.         Forward(TurtleHandle,(float) (NTSC ? 4 : 5));
  159. }
  160.  
  161.  
  162. void OpenAll()
  163.  
  164. {
  165.     void CloseAll();
  166.     
  167.     struct NewScreen ns;
  168.     struct NewWindow nw;
  169.     
  170.     if (!(IntuitionBase = OpenLibrary("intuition.library",0)))
  171.         CloseAll();
  172.     if (!(GfxBase = OpenLibrary("graphics.library",0)))
  173.         CloseAll();;
  174.     if (!(TurtleBase = OpenLibrary("turtle.library",0)))
  175.         CloseAll();
  176.     
  177.     ns.LeftEdge = 0;
  178.     ns.TopEdge = 0;
  179.     ns.Width = 640;
  180.     ns.Height = STDSCREENHEIGHT;
  181.     ns.Depth = 1;
  182.     ns.DetailPen = 0;
  183.     ns.BlockPen = 1;
  184.     ns.ViewModes = HIRES|LACE;
  185.     ns.Type = CUSTOMSCREEN;
  186.     ns.Font = NULL;
  187.     ns.DefaultTitle = "Turtle Demo - Press Return for the next Picture";
  188.     ns.Gadgets = NULL;
  189.     if (!(Screen = OpenScreen(&ns)))
  190.         CloseAll();
  191.     if (Screen->Height == 400) NTSC = TRUE;
  192.     
  193.     nw.LeftEdge = 0;
  194.     nw.TopEdge = 0;
  195.     nw.Width = 640;
  196.     nw.Height = Screen->Height;
  197.     nw.DetailPen = 0;
  198.     nw.BlockPen = 1;
  199.     nw.IDCMPFlags = VANILLAKEY;
  200.     nw.Flags = NOCAREREFRESH|ACTIVATE|BORDERLESS|BACKDROP|SIMPLE_REFRESH;
  201.     nw.FirstGadget = NULL;
  202.     nw.CheckMark = NULL;
  203.     nw.Title = NULL;
  204.     nw.Screen = Screen;
  205.     nw.Type = CUSTOMSCREEN;
  206.     if (!(Window = OpenWindow(&nw)))
  207.         CloseAll();
  208.     
  209.     if (!(TurtleHandle = CreateTurtle(Window->RPort,320,(WORD) (Window->Height/2+5),0,HIDETURTLE|TCX640Y400)))
  210.         CloseAll();
  211. }    
  212.     
  213.  
  214. void CloseAll()
  215.  
  216. {
  217.     if (TurtleHandle) ReturnTurtle(TurtleHandle);
  218.     
  219.     if (Window) CloseWindow(Window);
  220.     if (Screen) CloseScreen(Screen);
  221.     
  222.     if (TurtleBase) CloseLibrary(TurtleBase);
  223.     if (IntuitionBase) CloseLibrary(IntuitionBase);
  224.     if (GfxBase) CloseLibrary(GfxBase);
  225.     
  226.     exit();
  227. }
  228.  
  229.  
  230. void WaitKey()
  231.  
  232. {
  233.     struct IntuiMessage *message;
  234.     char taste;
  235.     
  236.     do
  237.     {
  238.         WaitPort(Window->UserPort);
  239.         message = (struct IntuiMessage *) GetMsg(Window->UserPort);
  240.         taste = message->Code;
  241.         ReplyMsg((struct Message *) message);
  242.     } while (taste != 13);
  243. }
  244.  
  245.  
  246. void ClrScrn()
  247.  
  248. {
  249.     HideTurtle(TurtleHandle);
  250.     
  251.     Move(Window->RPort,0,0);
  252.     ClearScreen(Window->RPort);
  253.     
  254.     ResetTurtle(TurtleHandle);
  255. }
  256.  
  257.  
  258. void _main()
  259.  
  260. {
  261.     OpenAll();
  262.     
  263.     spiralen();
  264.     pyramiden();
  265.     schleifen();
  266.     flocke();
  267.     
  268.     WaitKey();
  269.     CloseAll();
  270. }
  271.  
  272.