add .gitignore
[xgalaxy.git] / entry.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "tmalloc.h"
6 #include "galaxy.h"
7 #include "xgalaxy.h"
8
9
10 void
11 freeStarEntry() {
12         if ( XGalaxy.entry ) 
13                 tfree(XGalaxy.entry);
14         XGalaxy.entry=NULL;
15         if ( XGalaxy.tmpentry ) 
16                 tfree(XGalaxy.tmpentry);
17         XGalaxy.tmpentry=NULL;
18         XGalaxy.nentry = XGalaxy.lenentry = 0; 
19 }
20
21 void
22 addEntry(Star *star) {
23         if ( XGalaxy.nentry >= XGalaxy.lenentry ) {
24                 XGalaxy.lenentry = (XGalaxy.lenentry) ? XGalaxy.lenentry*2 : 16;
25                 XGalaxy.entry = (Star*) ((XGalaxy.entry) ? 
26                         trealloc(XGalaxy.entry, sizeof(Star)*XGalaxy.lenentry)
27                         : 
28                         tmalloc(sizeof(Star)*XGalaxy.lenentry));
29                 XGalaxy.tmpentry = (Star*) ((XGalaxy.entry) ? 
30                         trealloc(XGalaxy.tmpentry, sizeof(Star)*XGalaxy.lenentry)
31                         : 
32                         tmalloc(sizeof(Star)*XGalaxy.lenentry));
33         }
34
35         if ( star ) 
36                 memcpy(XGalaxy.entry + XGalaxy.nentry, star, sizeof(Star));
37         else 
38                 memset(XGalaxy.entry + XGalaxy.nentry, 0, sizeof(Star));
39         
40         XGalaxy.nentry++;
41 }
42
43 void
44 deleteEntry(u_int32_t i) {
45         if ( i>=XGalaxy.nentry || XGalaxy.nentry==0)
46                 return;
47
48         if ( i!=XGalaxy.nentry-1)
49                 memmove( XGalaxy.entry + i, XGalaxy.entry + i + 1, sizeof(Star) * ( XGalaxy.nentry-i-1) );
50         XGalaxy.nentry--;
51 }
52
53 void
54 editEntry(u_int32_t i, int col, double val) {
55         if ( i>=XGalaxy.nentry )
56                 return;
57         switch(col) {
58                 case 1:  XGalaxy.entry[i].mass = val; break;
59                 case 2:  XGalaxy.entry[i].c.x = val; break;
60                 case 3:  XGalaxy.entry[i].c.y = val; break;
61                 case 4:  XGalaxy.entry[i].c.z = val; break;
62                 case 5:  XGalaxy.entry[i].v.x = val; break;
63                 case 6:  XGalaxy.entry[i].v.y = val; break;
64                 case 7:  XGalaxy.entry[i].v.z = val; break;
65                 default: break;
66         }
67 }
68
69 void
70 cntEntry() {
71         Galaxy galaxy;
72         char buf[128];
73
74         memset(&galaxy,0,sizeof(galaxy));
75
76         galaxy.stars = XGalaxy.entry;
77         galaxy.nstars = XGalaxy.nentry;
78
79         EnergyImpulseGalaxy(&galaxy);
80
81         sprintf(buf,"%G",galaxy.kineticEnergy + galaxy.potentialEnergy);
82         gtk_label_set_text( GTK_LABEL(XGalaxy.dataEnergyField), buf);
83
84         sprintf(buf,"%G",galaxy.Impulse);
85         gtk_label_set_text( GTK_LABEL(XGalaxy.dataImpulseField), buf);
86
87         sprintf(buf,"%G",galaxy.Moment);
88         gtk_label_set_text( GTK_LABEL(XGalaxy.dataMomentField), buf);
89 }