Help save net neutrality! Learn more.
Close

Diff of /main.cpp [000000] .. [68cdf8]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/main.cpp
@@ -0,0 +1,223 @@
+
+// PTLens, Copyright (C) 2004, Thomas Niemann
+// email: thomasn@epaperpress.com, subject=ptlens
+// 
+// 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., 675 
+// Mass Ave, Cambridge, MA 02139, USA.
+
+#include "main.h"
+
+SPBasicSuite * sSPBasic = NULL;
+StaticData *gData = NULL;
+ParamData *gParam = NULL;
+FilterRecord *gFr = NULL;
+int16 *gResult;
+
+int display(const char *fmt, ...) {
+	char buf[100];
+	va_list ap;
+
+	va_start(ap, fmt);
+	vsprintf(buf, fmt, ap);
+	MessageBox(NULL, buf, "Info", MB_OK);
+	va_end(ap);
+	return 1;
+}
+
+static void initParameters() {}
+
+static void initData() {
+	memset(gData, 0, sizeof(StaticData));
+	memInit(memStatic);
+	memInit(memDynamic);
+	DLL.initDLL = false;
+}
+
+
+static void lockData(int32 *data) {
+	bool init = false;
+	BufferProcs *bufferProcs = gFr->bufferProcs;
+
+	if (*data == NULL) {
+
+		// create handle
+		BufferID h;
+		if (bufferProcs->allocateProc(sizeof(StaticData), &h)) {
+			*gResult = memFullErr;
+			return;
+		}
+
+		*data = (int32)h;
+  		init = true;
+	}
+
+	gData = (StaticData *)bufferProcs->lockProc((BufferID)(*data), true);
+	if (gData == NULL) {
+		*gResult = memFullErr;
+		return;
+	}
+
+	if (init) initData();
+	
+	return;
+}
+
+static void unlockData(int32 *data) {
+	if (*data != NULL)
+		gFr->bufferProcs->unlockProc((BufferID)(*data));
+}
+
+static void lockParameters() {
+	bool init = false;
+	BufferProcs *bufferProcs = gFr->bufferProcs;
+
+	if (gFr->parameters == NULL) {
+
+		// create handle
+		BufferID h;
+		if (bufferProcs->allocateProc(sizeof(ParamData), &h)) {
+			*gResult = memFullErr;
+			return;
+		}
+
+		gFr->parameters = (Handle)h;
+		init = true;
+	}
+
+	// lock handle
+	gParam = (ParamData *)bufferProcs->lockProc((BufferID)(gFr->parameters), true);
+	if (gParam == NULL) {
+		*gResult = memFullErr;
+		return;
+	}
+	
+	if (init) initParameters();
+}
+
+static void unlockParameters() {
+	if (gFr->parameters != NULL)
+		gFr->bufferProcs->unlockProc((BufferID)(gFr->parameters));
+}
+
+static void lockHandles(int32 *data) {
+	lockData(data);
+	lockParameters();
+	memLockHandles(memStatic);
+	memLockHandles(memDynamic);
+}
+
+static void unlockHandles(int32 *data) {
+	memUnlockHandles(memDynamic);
+	memFreeAll(memDynamic);
+	memUnlockHandles(memStatic);
+	unlockParameters();
+	unlockData(data);
+}
+
+static void DoContinue(void) {
+	gFr->inRect.top = 0;
+	gFr->inRect.bottom = 0;
+	gFr->inRect.left = 0;
+	gFr->inRect.right = 0;
+	gFr->outRect.top = 0;
+	gFr->outRect.bottom = 0;
+	gFr->outRect.left = 0;
+	gFr->outRect.right = 0;
+	gFr->maskRect.top = 0;
+	gFr->maskRect.bottom = 0;
+	gFr->maskRect.left = 0;
+	gFr->maskRect.right = 0;
+}
+
+static int DoFinish(void) {
+	return 0;
+}
+
+static void checkPrefs() {
+
+	// force dialog box if requested by script
+	PIDescriptorParameters* descParams = gFr->descriptorParameters;
+	if (!descParams) return;
+	ReadDescriptorProcs* readProcs = gFr->descriptorParameters->readDescriptorProcs;
+	if (!readProcs) return;
+	if (!descParams->descriptor) return;
+	if (descParams->playInfo != plugInDialogDisplay) return;
+
+	PAN.initPrefs = false;
+}
+
+static int DoStart(void) {
+	
+	// if scripting, check to see if user wants dialog box
+    if (PAN.initPrefs) checkPrefs();
+	if (panTools()) return 1;
+	return 0;
+}
+
+static void DoPrepare(void) {
+	// we'll allocate our own space
+	gFr->bufferSpace = 0;
+	gFr->maxSpace = 0;
+}
+
+static void DoParameters(void) {
+	PAN.initPrefs = false;
+}
+
+DLLExport MACPASCAL void PluginMain(const int16 selector,
+								    FilterRecord *filterParamBlock,
+								    int32 *data,
+								    int16 *result)
+{
+		// update our global parameters
+	gFr = filterParamBlock;
+	gResult = result;
+	*gResult = noErr;
+
+	// handle About dialog
+	if (selector == filterSelectorAbout) {
+		sSPBasic = ((AboutRecordPtr)filterParamBlock)->sSPBasic;
+		dlgAbout((AboutRecordPtr)filterParamBlock);
+		return;
+	}
+	sSPBasic = filterParamBlock->sSPBasic;
+
+	lockHandles(data);
+
+	if (*gResult != noErr) return;
+
+	// do the command according to the selector
+	switch (selector) {
+	case filterSelectorParameters:
+		DoParameters();
+		break;
+	case filterSelectorPrepare:
+		DoPrepare();
+		break;
+	case filterSelectorStart:
+		DoStart();
+		break;
+	case filterSelectorContinue:
+		DoContinue();
+		break;
+	case filterSelectorFinish:
+		DoFinish();
+		break;
+	}
+
+	unlockHandles(data);
+}