PlugIn's fr den WinRec Editor
------------------------------

PlugIn's sind einfache TOS Programme (mit der Extension 'WRM'),
die ihre Parameter ber die Kommandozeile erhalten: 

Unter normalem TOS:
	ABSOLUT adr1 adr2 channel

	'adr1' ist die Startadresse, 'adr2' die Endadresse des markierten
	Blocks im Editor. 'channel' gibt den gerade angezeigten Kanal im Editor
	an (0: Links, 1: Rechts)
	 
Unter MTOS:
	SHARED rel1 rel2 channel
	
	Das PlugIn mu sich zuerst die Adresse des Shared-Memory Blocks von
	Laufwerk U: holen. Der Block hat den Namen 'BUFFER.MEM'.
	'rel1' und 'rel2' ist die Start- bzw. Endadresse relativ zum
	Shared-Memory Block. 'channel' gibt den gerade angezeigten Kanal im Editor
	an (0: Links, 1: Rechts)

Im so angegebenen Speicherbereich liegt ein Sample im Format '16 Bit
Stereo'. Nach Beendigung der Berechnung sollte das PlugIn den Wert Null
zurckliefern, ansonsten eine negative Zahl. Folgende zwei Fehlermeldungen
sind im Moment vordefiniert:

-10: Kein Shared-Memory Block gefunden
-11: Fehler in der Kommandozeile

Das fertige PlugIn kommt in den Ordner 'PLUG_IN" im WinRec-Ordner. Auerdem
gehrt zu jedem PlugIn ein Color-Icon, welches dann im Editor angezeigt
wird. Das Icon mu im Resourcefile 'PLUG_IN.RSC' eingebunden werden. Dazu
bentigen Sie natrlich ein Resource-Construction-Set wie z.B. Interface.
Das Icon mu 32x32 Pixel gro sein und im Icontext den Namen der
PlugIn-Datei tragen. Das Icon selbst wird im einzigen vorhandenen
Objektbaum unter den schon vorhandenen Icons angefgt (Linksbndig!). Wenn
mglich sollte man sich beim Zeichnen des Icons an das Design von WinRec
halten.

Im folgenden der C-Quellcode des 'LOWER' PlugIn:

--------------------------------------------------------------------------------

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <tos.h>
#define SHMGETBLK	(('M'<< 8) | 0)

int main(int argc, const char *argv[])
{
	int *st,*en,*buf;
	int side,h;
	
/* Zuwenig Parameter ?*/
	if (argc<4)
		return(-11);
		
/* TOS oder MTOS ? */
	h=-1;
	if (strcmp(argv[1],"SHARED"))
	{
		st=atol(argv[2]);
		en=atol(argv[3]);
		side=atol(argv[4]);
	}
	else
	{
/* Anfangsadresse ermitteln */
		h=Fopen("U:\\SHM\\BUFFER.MEM",FO_READ);
		if (h>=0)
			buf=Fcntl(h,0L,SHMGETBLK);
		else
			return(-10);
		st=&buf[atol(argv[2])];
		en=&buf[atol(argv[3])];
		side=atol(argv[4]);
	}
	
/* Eigentliche Bearbeitung der Sampledaten */
	
	while (st!=en)
		*st++/=2;
	
/* Fertig ! */

	if (h>=0)
	{
		Mfree(buf);
		Fclose(h);
	}
	return(0);
}
--------------------------------------------------------------------------------
