#include #include #include #include "tmalloc.h" #include "galaxy.h" #include "xgalaxy.h" void freeStarEntry() { if ( XGalaxy.entry ) tfree(XGalaxy.entry); XGalaxy.entry=NULL; if ( XGalaxy.tmpentry ) tfree(XGalaxy.tmpentry); XGalaxy.tmpentry=NULL; XGalaxy.nentry = XGalaxy.lenentry = 0; } void addEntry(Star *star) { if ( XGalaxy.nentry >= XGalaxy.lenentry ) { XGalaxy.lenentry = (XGalaxy.lenentry) ? XGalaxy.lenentry*2 : 16; XGalaxy.entry = (Star*) ((XGalaxy.entry) ? trealloc(XGalaxy.entry, sizeof(Star)*XGalaxy.lenentry) : tmalloc(sizeof(Star)*XGalaxy.lenentry)); XGalaxy.tmpentry = (Star*) ((XGalaxy.entry) ? trealloc(XGalaxy.tmpentry, sizeof(Star)*XGalaxy.lenentry) : tmalloc(sizeof(Star)*XGalaxy.lenentry)); } if ( star ) memcpy(XGalaxy.entry + XGalaxy.nentry, star, sizeof(Star)); else memset(XGalaxy.entry + XGalaxy.nentry, 0, sizeof(Star)); XGalaxy.nentry++; } void deleteEntry(u_int32_t i) { if ( i>=XGalaxy.nentry || XGalaxy.nentry==0) return; if ( i!=XGalaxy.nentry-1) memmove( XGalaxy.entry + i, XGalaxy.entry + i + 1, sizeof(Star) * ( XGalaxy.nentry-i-1) ); XGalaxy.nentry--; } void editEntry(u_int32_t i, int col, double val) { if ( i>=XGalaxy.nentry ) return; switch(col) { case 1: XGalaxy.entry[i].mass = val; break; case 2: XGalaxy.entry[i].c.x = val; break; case 3: XGalaxy.entry[i].c.y = val; break; case 4: XGalaxy.entry[i].c.z = val; break; case 5: XGalaxy.entry[i].v.x = val; break; case 6: XGalaxy.entry[i].v.y = val; break; case 7: XGalaxy.entry[i].v.z = val; break; default: break; } } void cntEntry() { Galaxy galaxy; char buf[128]; memset(&galaxy,0,sizeof(galaxy)); galaxy.stars = XGalaxy.entry; galaxy.nstars = XGalaxy.nentry; EnergyImpulseGalaxy(&galaxy); sprintf(buf,"%G",galaxy.kineticEnergy + galaxy.potentialEnergy); gtk_label_set_text( GTK_LABEL(XGalaxy.dataEnergyField), buf); sprintf(buf,"%G",galaxy.Impulse); gtk_label_set_text( GTK_LABEL(XGalaxy.dataImpulseField), buf); sprintf(buf,"%G",galaxy.Moment); gtk_label_set_text( GTK_LABEL(XGalaxy.dataMomentField), buf); }