summaryrefslogtreecommitdiffstats
path: root/noatun-plugins/synaescope/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'noatun-plugins/synaescope/main.cpp')
-rw-r--r--noatun-plugins/synaescope/main.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/noatun-plugins/synaescope/main.cpp b/noatun-plugins/synaescope/main.cpp
new file mode 100644
index 0000000..4b4a2a5
--- /dev/null
+++ b/noatun-plugins/synaescope/main.cpp
@@ -0,0 +1,196 @@
+/* Synaescope - a pretty noatun visualization (based on P. Harrison's Synaesthesia)
+ Copyright (C) 1997 Paul Francis Harrison <pfh@yoyo.cc.monash.edu.au>
+ 2001 Charles Samuels <charles@kde.org>
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <time.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <string.h>
+#include <math.h>
+
+#include "syna.h"
+
+void Core::allocOutput(int w,int h)
+{
+#if 0
+ delete[] output;
+ delete[] lastOutput;
+ delete[] lastLastOutput;
+ output = new unsigned char[w*h*2];
+ lastOutput = new unsigned char[w*h*2];
+ lastLastOutput = new unsigned char[w*h*2];
+ memset(output,32,w*h*2);
+ memset(lastOutput,32,w*h*2);
+ outWidth = w;
+ outHeight = h;
+#endif
+
+ outputBmp.size(w,h);
+ lastOutputBmp.size(w,h);
+ lastLastOutputBmp.size(w,h);
+ polygonEngine.size(w,h);
+ outWidth = w;
+ outHeight = h;
+}
+
+void Core::toDefaults()
+{
+ fadeMode = Stars;
+ pointsAreDiamonds = true;
+
+ brightnessTwiddler = 0.33; //0.125;
+ starSize = 0.125;
+
+ fgRedSlider=0.0;
+ fgGreenSlider=0.5;
+ bgRedSlider=1.0;
+ bgGreenSlider=0.2;
+}
+
+Core::Core() : StereoScope(40)
+{
+ setSamples(NumSamples);
+ core = this;
+ int i;
+
+ data = new sampleType[NumSamples*2+16];
+
+ for(i=0;i<NumSamples;i++)
+ {
+ negSinTable[i] = -sin(3.141592*2.0/NumSamples*i);
+ cosTable[i] = cos(3.141592*2.0/NumSamples*i);
+ bitReverse[i] = bitReverser(i);
+ }
+}
+
+bool Core::init ( void )
+{
+ windX = 1;
+ windY = 1;
+
+ screen = new SdlScreen;
+ if (!screen->init(windX,windY,windWidth,windHeight,false))
+ {
+ delete screen;
+ screen = 0;
+ return false;
+ }
+
+ allocOutput(outWidth,outHeight);
+
+ setStarSize(starSize);
+
+ interface = new Interface;
+ return true;
+}
+
+Core::~Core()
+{
+ delete interface;
+
+ screen->end();
+ delete screen;
+}
+
+bool Core::go()
+{
+ time_t startTime = time(0);
+ time_t currentTime = time(0);
+ time_t lastTime = 0;
+ char fpsString[32];
+ int frames = 0;
+ double fps=0;
+
+// printf("%u\n", static_cast<SdlScreen *>(screen)->winID());
+// fflush(stdout);
+
+ while (1)
+ {
+ fade();
+
+ if (!calculate())
+ break;
+
+ if (!interface->go()) break;
+
+ screen->show();
+
+ frames++;
+ currentTime = time(0) - startTime;
+
+ if ((currentTime - lastTime) > 1) // update fps display every 2 seconds
+ {
+ fps = double(frames) / currentTime;
+ lastTime = currentTime;
+ snprintf(fpsString, 32, "Noatun - Synaescope: %.2f fps", fps);
+ screen->updateWindowCaption(&fpsString[0]);
+ }
+ if (fps>25.0)
+ usleep(5);
+ }
+
+ return true;
+}
+
+bool start()
+{
+ return true;
+}
+
+void error(const char *str, bool)
+{
+ fprintf(stderr, "synaescope: Error %s\n",str);
+// if (syscall)
+// fprintf(stderr,"(reason for error: %s)\n",strerror(errno));
+ exit(1);
+}
+
+void warning(const char *str, bool)
+{
+ fprintf(stderr, "synaescope: Possible error %s\n",str);
+// if (syscall)
+// fprintf(stderr,"(reason for error: %s)\n",strerror(errno));
+}
+
+#include <kinstance.h>
+#include <kglobal.h>
+#include <kconfig.h>
+
+int main(void)
+{
+ KInstance in("noatunsynaescope");
+
+ core = new Core;
+
+ KConfig mConfig("noatunrc");
+ mConfig.setGroup("Synaescope");
+
+ core->windWidth = mConfig.readNumEntry("xResolution", 320);
+ core->windHeight = mConfig.readNumEntry("yResolution", 240);
+
+ if ( core->init() )
+ core->go();
+
+ delete core;
+ exit(0);
+}