home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 306.lha / Gravity-Well / GW-Include.h < prev    next >
Text File  |  1980-12-03  |  17KB  |  480 lines

  1. /*
  2.       GW-Include.h
  3.       Shared code include for Gravity-Well
  4.       Gary Teachout
  5.       Copyright   July  1989
  6. */
  7.  
  8.  
  9.  #include <exec/types.h>
  10.  #include <exec/memory.h>
  11.  #include <libraries/dos.h>
  12.  #include <libraries/dosextens.h>
  13.  #include <intuition/intuition.h>
  14.  #include <graphics/gfxmacros.h>
  15.  #include <string.h>
  16.  #include <math.h>
  17.  #include <float.h>
  18.  
  19.  
  20.  #define LINEPEN     1        /*    pen colors  */
  21.  #define DOTPEN      3
  22.  #define BPEN        2
  23.  #define DPEN        0
  24.  #define MFPEN       0
  25.  #define MBPEN       2
  26.  
  27.  #define NEWCENTER      1     /*    awaiting    */
  28.  #define NEWPOSITION    2
  29.  #define NEWVELOCITY    3
  30.  #define NEWMASS        4
  31.  #define NEWCREATE      5
  32.  
  33.  
  34.  struct dv        /*    double   3 - d   vector    */
  35.       { double  x , y , z  ; }  ;
  36.  
  37.  struct obv       /*    orthogonal  basis vectors  */
  38.       { struct dv  i , j , k  ; }  ;
  39.  
  40.  struct object    /*    data for each body   */
  41.  {
  42.    struct dv      position ,
  43.                   velocity ,
  44.                   oldpos ,
  45.                   startpos ,
  46.                   startvel  ;
  47.    double         mass ,
  48.                   startmass ,
  49.                   radius  ;
  50.    short          flags ,
  51.                   collision  ;
  52.    char           name[ 68 ]  ;
  53.  }  ;
  54.  
  55.  struct filedata  /*    data for the entire simulation   */
  56.  {                
  57.    char           tag[ 16 ]  ;
  58.    struct object  objects[ 20 ]  ;
  59.    struct obv     viewbasis ,
  60.                   unviewbasis  ;
  61.    struct dv      viewoffset  ;
  62.    double         elapsedtime ,
  63.                   timestep ,
  64.                   scale ,
  65.                   magic  ;
  66.    USHORT         stopflag ,
  67.                   awaiting ,
  68.                   trailson ,
  69.                   objectnum ,
  70.                   follow  ;
  71.    char           filecomment1[ 66 ] ,
  72.                   filecomment2[ 66 ]  ;
  73.  }  ;
  74.  
  75.  struct menubox   /*    text menu items   */
  76.  {
  77.    struct MenuItem      item  ;
  78.    struct IntuiText     text  ;
  79.  }  ;
  80.  
  81.  
  82. /*    System prototypes    */
  83.  
  84.  char                   *AllocMem()  ;
  85.  struct Screen          *OpenScreen()  ;
  86.  struct Window          *OpenWindow()  ;
  87.  struct IntuiMessage    *GetMsg()  ;
  88.  struct FileHandle      *Open()  ;
  89.  struct TextFont        *OpenDiskFont()  ;
  90.  
  91. /*    GW-Main prototypes   */
  92.  
  93.  void main( void )  ;
  94.  void takestep( double )  ;
  95.  
  96. /*    GW-Interface prototypes    */
  97.  
  98.  void startup( void )  ;
  99.  void cleanup( void )  ;
  100.  void openmainview( void )  ;
  101.  void opentopview( void )  ;
  102.  void openrightview( void )  ;
  103.  void openviewcontrol( void )  ;
  104.  void pixel( struct Window * , double , double )  ;
  105.  void blankwindow( struct Window * )  ;
  106.  void line( struct Window * , double , double , double , double )  ;
  107.  void linelong( struct Window * , long , long , long , long )  ;
  108.  void interface( void )  ;
  109.  void readmes( void )  ;
  110.  void handelmenu( void )  ;
  111.  void stoploop( void )  ;
  112.  void resetdisplay( void )  ;
  113.  void screentitle( long )  ;
  114.  void setupdisplay( struct Window * )  ;
  115.  void set( void )  ;
  116.  void create( void )  ;
  117.  void setstrings( void )  ;
  118.  void deleteobject( long )  ;
  119.  void endtrail( long , long )  ;
  120.  void updatedisplay( void )  ;
  121.  
  122. /*    GW-Vectors prototypes   */
  123.  
  124.  void rotatedv( struct dv * , struct dv * , double * , double * )  ;
  125.  void rotatedvpair10( struct dv * , struct dv * )  ;
  126.  void adddv( struct dv * , struct dv * , struct dv * )  ;
  127.  void subdv( struct dv * , struct dv * , struct dv * )  ;
  128.  void scaledv( struct dv * , double * , struct dv * )  ;
  129.  void dotdv( struct dv * , struct dv * , double * )  ;
  130.  void crossdv( struct dv * , struct dv * , struct dv * )  ;
  131.  void magdv( struct dv * , double * )  ;
  132.  void basis( struct dv * , struct obv * , struct dv * )  ;
  133.  
  134.  
  135. /*    Global Data    */
  136. /*    all but one file must be compiled with the -x option  */
  137.  
  138.  struct IntuitionBase      *IntuitionBase  ;
  139.  struct GfxBase            *GfxBase  ;
  140.  struct Library            *DiskfontBase  ;
  141.  
  142.  struct IntuiMessage       *mes  ;
  143.  struct Screen             *screen  ;
  144.  struct Window             *control ,     /* renamed the Data window   */
  145.                            *viewcontrol ,
  146.                            *mainview ,
  147.                            *topview ,
  148.                            *rightview  ;
  149.  
  150.  struct TextAttr           stext = { "topaz.font" , 8 , 0 , 0 }  ;
  151.  struct TextAttr           rtext = { "topaz.font" , 11 , 0 , 0 }  ;
  152.  struct TextFont           *rfont  ;
  153.  
  154.  ULONG                     class  ;
  155.  USHORT                    code  ;
  156.  short                     mousex ,
  157.                            mousey  ;
  158.  
  159.  struct Gadget             *iadd  ;
  160.  
  161.  char    *titletext[ 6 ] =
  162.  {
  163.    "  Gravity Well" ,
  164.    "  Gravity Well     Awating New Center Point" ,
  165.    "  Gravity Well     Awating New Position" ,
  166.    "  Gravity Well     Awating New Velocity" ,
  167.    "  Gravity Well     Awating New Mass" ,
  168.    "  Gravity Well     Create Mode" 
  169.  }  ;
  170.  
  171.  char    ettext[ 33 ]  ;
  172.  
  173.  char    numbertext[] =
  174.    "  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20  "  ;
  175.  
  176.  char    *controlgtext[ 11 ] =
  177.  {
  178.    "Position" , "Velocity" , "Mass    " ,
  179.    "Delete  " , "Zero  M " , "Start   " ,
  180.    "  Load  " , "  Save  " , "  New   " ,
  181.    " Create " , " Enter  "
  182.  }  ;
  183.  
  184.  char    *conlabel[ 10 ] =
  185.  {
  186.    "File Name:" ,
  187.    "Comment:" ,
  188.    "" ,
  189.    "Name:" ,
  190.    "Time Step:" ,
  191.    "Magic:" ,
  192.    "Mass:" ,
  193.    "Radius:" ,
  194.    "Start Position:" ,
  195.    "Start Velocity:"
  196.  }  ;
  197.  
  198.  short   conlabellength[ 10 ] =
  199.    {  10 , 8 , 0 , 5 , 10 , 6 , 5 , 7 , 15 , 15  }  ;
  200.  
  201.  short clut[ 4 ][ 3 ] =    /*    screen colors  */
  202.  {
  203.    { 0 , 0 , 0 } ,
  204.    { 15 , 0 , 0 } ,
  205.    { 10 , 8 , 0 } ,
  206.    { 15 , 15 , 15 }
  207.  }  ;
  208.  
  209.  struct  NewScreen   ns =
  210.  {
  211.    0 , 0 , 640 , 400 , 2 , DPEN , BPEN , HIRES | LACE ,
  212.    CUSTOMSCREEN , NULL , "  Gravity Well" , NULL , NULL
  213.  }  ;
  214.  
  215.  struct  NewWindow
  216.    controlnw =       /*    the Data window   */
  217.    {
  218.       0 , 12 , 640 , 388 , DPEN , BPEN , MENUPICK | GADGETUP ,
  219.       WINDOWDEPTH
  220.       | SMART_REFRESH | ACTIVATE ,
  221.       NULL , NULL , "  Data  " , 
  222.       NULL , NULL , 0 , 0 , 0 , 0 , CUSTOMSCREEN
  223.    } ,
  224.    viewcontrolnw =
  225.    {
  226.       490 , 0 , 100 , 173 , DPEN , BPEN , CLOSEWINDOW | MENUPICK | GADGETUP ,
  227.       WINDOWCLOSE | WINDOWDRAG | WINDOWDEPTH 
  228.       | SMART_REFRESH ,
  229.       NULL , NULL , "VC " , 
  230.       NULL , NULL , 0 , 0 , 0 , 0 , CUSTOMSCREEN
  231.    } ,
  232.    mainviewnw =
  233.    {
  234.       80 , 92 , 460 , 308 , DPEN , BPEN , 
  235.       CLOSEWINDOW | NEWSIZE | MENUPICK | MOUSEBUTTONS ,
  236.       WINDOWCLOSE | WINDOWDRAG | WINDOWSIZING | WINDOWDEPTH 
  237.       | SMART_REFRESH ,
  238.       NULL , NULL , " Main View  " , 
  239.       NULL , NULL , 100 , 80 , 640 , 400 , CUSTOMSCREEN
  240.    } ,
  241.    topviewnw =
  242.    {
  243.       80 , 12 , 460 , 80 , DPEN , BPEN ,
  244.       CLOSEWINDOW | NEWSIZE | MENUPICK | MOUSEBUTTONS ,
  245.       WINDOWCLOSE | WINDOWDRAG | WINDOWSIZING | WINDOWDEPTH 
  246.       | SMART_REFRESH ,
  247.       NULL , NULL , " Top View  " , 
  248.       NULL , NULL , 100 , 80 , 640 , 400 , CUSTOMSCREEN
  249.    } ,
  250.    rightviewnw =
  251.    {
  252.       540 , 92 , 100 , 308 , DPEN , BPEN ,
  253.       CLOSEWINDOW | NEWSIZE | MENUPICK | MOUSEBUTTONS ,
  254.       WINDOWCLOSE | WINDOWDRAG | WINDOWSIZING | WINDOWDEPTH 
  255.       | SMART_REFRESH ,
  256.       NULL , NULL , " Right View  " ,
  257.       NULL , NULL , 100 , 80 , 640 , 400 , CUSTOMSCREEN
  258.    }  ;
  259.  
  260.  struct Menu menustrip[ 3 ] =    /* all windows share this menu strip   */
  261.  {
  262.    {  NULL , 1   , 0 , 120 , 10 , MENUENABLED , " QUIT" , NULL } ,
  263.    {  NULL , 121 , 0 , 120 , 10 , MENUENABLED , " Open Window" , NULL } ,
  264.    {  NULL , 241 , 0 , 120 , 10 , MENUENABLED , " Control" , NULL } 
  265.  }  ;
  266.  
  267.  struct menubox
  268.    menu0[ 1 ] =
  269.    {
  270.       {
  271.          {  NULL , 0 , 0 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  272.             0 , NULL , NULL , 0 , NULL , 0  } ,
  273.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "QUIT" , NULL  }
  274.       }
  275.    } ,
  276.    menu1[ 5 ] =
  277.    {
  278.       {
  279.          {  NULL , 0 , 0 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  280.             0 , NULL , NULL , 0 , NULL , 0  } ,
  281.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Main View" , NULL  }
  282.       } ,
  283.       {
  284.          {  NULL , 0 , 14 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  285.             0 , NULL , NULL , 0 , NULL , 0  } ,
  286.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Top View" , NULL  }
  287.       } ,
  288.       {
  289.          {  NULL , 0 , 28 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  290.             0 , NULL , NULL , 0 , NULL , 0  } ,
  291.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Right View" , NULL  }
  292.       } ,
  293.       {
  294.          {  NULL , 0 , 42 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  295.             0 , NULL , NULL , 0 , NULL , 0  } ,
  296.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "View Control" , NULL  }
  297.       } ,
  298.       {
  299.          {  NULL , 0 , 56 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  300.             0 , NULL , NULL , 0 , NULL , 0  } ,
  301.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Data" , NULL  }
  302.       }
  303.    } ,
  304.    menu2[ 5 ] =
  305.    {
  306.       {
  307.          {  NULL , 0 , 0 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  308.             0 , NULL , NULL , 0 , NULL , 0  } ,
  309.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Start" , NULL  }
  310.       } ,
  311.       {
  312.          {  NULL , 0 , 14 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  313.             0 , NULL , NULL , 0 , NULL , 0  } ,
  314.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Stop" , NULL  }
  315.       } ,
  316.       {
  317.          {  NULL , 0 , 28 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  318.             0 , NULL , NULL , 0 , NULL , 0  } ,
  319.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Set" , NULL  }
  320.       } ,
  321.       {
  322.          {  NULL , 0 , 42 , 130 , 14 , ITEMTEXT | ITEMENABLED | HIGHCOMP ,
  323.             0 , NULL , NULL , 0 , NULL , 0  } ,
  324.          {  MFPEN , MBPEN , JAM1 , 15 , 2 , NULL , "Reset" , NULL  }
  325.       } 
  326.    }  ;
  327.  
  328.  struct Gadget
  329.    viewcongadg[ 12 ] =     /*    gadgets for View Control window  */
  330.    {
  331.       {  NULL , 8  , 60 + 16 , 20 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  332.       {  NULL , 72 , 60 + 16 , 20 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  333.       {  NULL , 8  , 76 + 16 , 20 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  334.       {  NULL , 72 , 76 + 16 , 20 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  335.       {  NULL , 8  , 92 + 16 , 20 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  336.       {  NULL , 72 , 92 + 16 , 20 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  337.       {  NULL , 10 , 108 + 16 , 80 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  338.       {  NULL , 8  , 140 + 16 , 28 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  339.       {  NULL , 56 , 140 + 16 , 36 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  340.       {  NULL , 10 , 28 + 16 , 80 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  341.       {  NULL , 10 , 12 + 16 , 80 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  342.       {  NULL , 10 , 12 , 80 , 15 , GADGHCOMP , RELVERIFY , BOOLGADGET } 
  343.    } ,
  344.    controlgadg[ 45 ] =     /*    gadgets for Data window    */
  345.    {
  346.       {  NULL , 6  , 12 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  347.       {  NULL , 6  , 26 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  348.       {  NULL , 6  , 40 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  349.       {  NULL , 6  , 54 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  350.       {  NULL , 6  , 68 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  351.  
  352.       {  NULL , 6  , 82 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  353.       {  NULL , 6  , 96 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  354.       {  NULL , 6  , 110 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  355.       {  NULL , 6  , 124 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  356.       {  NULL , 6  , 138 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  357.  
  358.       {  NULL , 6  , 152 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  359.       {  NULL , 6  , 166 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  360.       {  NULL , 6  , 180 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  361.       {  NULL , 6  , 194 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  362.       {  NULL , 6  , 208 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  363.  
  364.       {  NULL , 6  , 222 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  365.       {  NULL , 6  , 236 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  366.       {  NULL , 6  , 250 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  367.       {  NULL , 6  , 264 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  368.       {  NULL , 6  , 278 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  369.  
  370.       {  NULL , 6  , 294 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  371.       {  NULL , 6  , 308 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  372.       {  NULL , 6  , 322 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  373.       {  NULL , 6  , 336 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  374.       {  NULL , 6  , 350 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  375.  
  376.       {  NULL , 6  , 364 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  377.  
  378.       {  NULL , 100 , 87 - 5 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  379.       {  NULL , 200 , 87 - 5 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  380.       {  NULL , 300 , 87 - 5 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  381.  
  382.       {  NULL , 100 , 217 + 5 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  383.  
  384.       /* 30 */
  385.  
  386.       {  NULL , 200 , 217 + 5 , 72 , 13 , GADGHCOMP , RELVERIFY , BOOLGADGET } ,
  387.  
  388.       {  NULL , 100 , 74 - 5 , 528 , 8 , 
  389.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  390.       {  NULL , 100 , 126 - 5 , 528 , 8 , 
  391.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  392.       {  NULL , 100 , 139 - 4 , 528 , 8 , 
  393.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  394.       {  NULL , 100 , 256 + 5 , 528 , 8 , 
  395.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  396.  
  397.       {  NULL , 100 , 178 - 5 , 264 , 8 , 
  398.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  399.       {  NULL , 370 , 178 - 5 , 264 , 8 , 
  400.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  401.       {  NULL , 100 , 295 + 5 , 264 , 8 , 
  402.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  403.       {  NULL , 370 , 295 + 5 , 264 , 8 , 
  404.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  405.       {  NULL , 100 , 334 + 5 , 264 , 8 , 
  406.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  407.  
  408.       {  NULL , 370 , 334 + 5 , 264 , 8 , 
  409.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  410.       {  NULL , 100 , 347 + 6 , 264 , 8 , 
  411.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  412.       {  NULL , 370 , 347 + 6 , 264 , 8 , 
  413.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  414.       {  NULL , 100 , 360 + 7 , 264 , 8 , 
  415.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET } ,
  416.       {  NULL , 370 , 360 + 7 , 264 , 8 , 
  417.          GADGHCOMP , TOGGLESELECT | RELVERIFY , STRGADGET }
  418.    }  ;
  419.  
  420.  struct StringInfo   controlinfo[ 14 ] ;
  421.  
  422.  struct Border    textbox = { -2 , -2 , BPEN , 0 , JAM1 , 5 } ,
  423.                   numberbox = { -2 , -2 , BPEN , 0 , JAM1 , 5 }  ;
  424.  short  xytextbox[ 10 ] = { 0 , 0 , 532 , 0 , 532 , 11 , 0 , 11 , 0 , 0 } ,
  425.         xynumbox[ 10 ] = { 0 , 0 , 268 , 0 , 268 , 11 , 0 , 11 , 0 , 0 } ;
  426.               
  427.  char    undobuffer[ 100 ] ,
  428.          filename[ 100 ] ,
  429.          numberbuff[ 10 ][ 34 ]  ;
  430.  
  431.  struct dv zerodv = { 0.0 , 0.0 , 0.0 }  ;   /* reference vectors */
  432.  struct obv refobv =
  433.       { { 1.0 , 0.0 , 0.0 } , { 0.0 , 1.0 , 0.0 } , { 0.0 , 0.0 , 1.0 } }  ;
  434.  
  435.  struct filedata  g =   /*    data for the entire simulation   */
  436.  {
  437.    "Gravity-Well-10" ,
  438.    {
  439.       {
  440.          {  0.2539644458873187 , 0.0570845085389242 , 0.0  } ,
  441.          {  0.0133749752769728 , -0.0183469991534279 , 0.0  } ,
  442.          {  0.0 , 0.0 , 0.0  } ,
  443.          {  0.0 , 0.0 , 0.0  } ,
  444.          {  0.0 , 0.0 , 0.0  } ,
  445.          1.0 , 0.0 , 0.9 ,
  446.          1 , 0 ,
  447.          "Planet     Not the earth"
  448.       } ,
  449.       {
  450.          {  13.4603555411268747 , 9.1291549146107567 , 0.0  } ,
  451.          {  -0.133749752769728 , 0.1834699915342789 , 0.0  } ,
  452.          {  0.0 , 0.0 , 0.0  } ,
  453.          {  1.0 , 0.0 , 0.0  } ,
  454.          {  0.0 , 1.0 , 0.0  } ,
  455.          0.1 , 0.0 , 0.2 ,
  456.          1 , 0 ,
  457.          "Moon"
  458.       } ,
  459.       {
  460.          {  0.492 , -1.3 , -0.02  } ,
  461.          {  1.16 , 0.15 , 0.12 } ,
  462.          {  0.0 , 0.0 , 0.0  } ,
  463.          {  1.0 , 0.0 , 0.0  } ,
  464.          {  0.0 , 1.0 , 0.0  } ,
  465.          0.0 , 0.0 , 0.0 ,
  466.          1 , 0 ,
  467.          "Space Ship"
  468.       }
  469.    } ,
  470.    { { 1.0 , 0.0 , 0.0 } , { 0.0 , 1.0 , 0.0 } , { 0.0 , 0.0 , 1.0 } } ,
  471.    { { 1.0 , 0.0 , 0.0 } , { 0.0 , 1.0 , 0.0 } , { 0.0 , 0.0 , 1.0 } } ,
  472.    { 0.0 , 0.0 , 0.0 } ,
  473.    0.0 , 0.5 , 0.0298023223876953 , 100.0 ,
  474.    0 , 0 , 1 , 0 , 0 ,
  475.    "Example simulation" ,
  476.    "At play in space and time"
  477.  }  ;
  478.  
  479.  
  480.