#pragma +
// Name:						ARexx-Klassen
// Programmtyp:			Hilfsroutine für
//								Fakturierprogramm
//	Programmiersprache:	C++ (AT&T Standard 3.0)
// Computersystem:		Commodore AMIGA
// Betriebssystem:		AMIGA OS3.0 oder höher
// Autor:					Manfred Tremmel
// © Copyright:			1998-2000 by MT Graphic & Design
// Version:					V1.08
//
//    Copyright (C) 1997-2000 Manfred Tremmel
//
//    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., 59 Temple Place, Suite 330, Boston, MA 02111 USA


// Includes:
#include <new.h>
#include <stdio.h>
#include <intuition/intuition.h>

#include "MTLocale.h"
#include "MTScreen.h"
#include "MTVersion.h"
#include "LocaleStrings.h"
#include "MTList.h"
#include "Datenbank.h"
#include "Einstellungen.h"
#include "Laender.h"
#include "Versand.h"
#include "Artikel.h"
#include "Adressen.h"
#include "RechnungArtikel.h"
#include "Rechnung.h"
#include "ARechnung.h"
#include "ERechnung.h"
#include "Inventur.h"
#include "KontenPos.h"
#include "Konten.h"
#include "BuchenPos.h"
#include "Buchen.h"
#include "MTToolType.h"

extern Prefs				*MyPrefsPTR;
extern Laender				*MyLaenderPTR;
extern Versand				*MyVersandPTR;
extern Artikel				*MyArtikelPTR;
extern Adress				*MyAdressPTR;
extern Kunden				*MyKundenPTR;
extern Mitarbeiter		*MyMitarbeiterPTR;
extern Niederlassung		*MyNiederlassungPTR;
extern Lieferanten		*MyLieferantPTR;
extern RechnungArtikel	*MyARechnungArtikelPTR;
extern ARechnung			*MyARechnungPTR;
extern RechnungArtikel	*MyERechnungArtikelPTR;
extern ERechnung			*MyERechnungPTR;
extern Inventur			*MyInventurPTR;
extern Konten				*MyKontenPTR;
extern KontenPos			*MyKontenPosPTR;
extern Buchen				*MyBuchenPTR;
extern BuchenPos			*MyBuchenPosPTR;

extern OpenLocaleClass	*MyLocalePTR;
extern FillAppStrings	*MyAppStringsPTR;
extern MTToolType			*MyToolTypesPTR;

// Surface-Pointer
extern APTR	surface;

#define MSGPortName "MTRechnung"

// MTARexx Klasse
// Konstruktor
MTARexx::MTARexx()
{
	RexxPort.mp_Flags				= PA_IGNORE;
	RexxPort.mp_Node.ln_Type	= NT_MSGPORT;
	RexxPort.mp_SigTask			= FindTask(NULL);
	RexxPort.mp_SigBit			= AllocSignal(-1);
	RexxPort.mp_Flags				= PA_SIGNAL;
	strcpy( RexxPortName, MSGPortName );
	ULONG i = 0;
	Forbid();
	while( FindPort( RexxPortName ) )
	{
		sprintf(RexxPortName, "%s_%lu", MSGPortName, ++i);
	}
	RexxPort.mp_Node.ln_Name	= RexxPortName;
	AddPort( &RexxPort );

	Permit();

	strcpy( Result, "MTR_RESULT" );

	ThisScreen	= NULL;
	SuchBezug	= 3;

	(DataBaseSearch *)Vergleichsfunktion	= new DataBaseSearch[3];
};

MTARexx::~MTARexx()
{
	if(Vergleichsfunktion)
		delete [3] ((DataBaseSearch *)(Vergleichsfunktion));

	RemPort( &RexxPort );

	if( RexxPort.mp_SigBit >= 0 )
		FreeSignal( RexxPort.mp_SigBit );
};

struct DateStamp MTARexx::RexxDatum( STRPTR RexxVar )
{
	STRPTR Buffer;

	GetRexxVar( (struct Message *)rxmsg, RexxVar, (UBYTE **)&Buffer );

	return RexxDatum2( Buffer );
};

struct DateStamp MTARexx::RexxDatum2( STRPTR Buffer )
{
	TEXT Buffer2[11];

	if( Buffer && *Buffer )
	{
		Buffer2[0]	= Buffer[0];
		Buffer2[1]	= Buffer[1];
		Buffer2[2]	= Buffer[2];
		Buffer2[3]	= Buffer[3];
		Buffer2[4]	= '.';
		Buffer2[5]	= Buffer[4];
		Buffer2[6]	= Buffer[5];
		Buffer2[7]	= '.';
		Buffer2[8]	= Buffer[6];
		Buffer2[9]	= Buffer[7];
		Buffer2[10]	= 0;
	}
	else
		Buffer2[0] = 0;

	return MyLocalePTR->ParseDateC( Buffer2, "%Y.%m.%d" );
};

ULONG MTARexx::RexxBetrag2( STRPTR Name, DOUBLE Betrag, UWORD Waehrung_KZ )
{
	DOUBLE Betrag2;
	ULONG ReturnWert = 0;
	TEXT Buffer[80];
	TEXT Buffer2[80];

	for( ULONG i = 0; i < 2; i++ )
	{
		sprintf(Buffer2, "%s.%lu", Name, i);
		Betrag2 = MyPrefsPTR->WaehrungUmrechnen( 0, Betrag, Waehrung_KZ, (2 * i), 0 );
		sprintf(Buffer, "%f", Betrag2);
		ReturnWert += SetRexxVar( (struct Message *)rxmsg, Buffer2, (STRPTR)Buffer, strlen(Buffer) );
	}

	return ReturnWert;
};

ULONG MTARexx::RexxBetrag4( STRPTR Name, DOUBLE Betrag, UWORD Waehrung_KZ, DOUBLE MWSt, UBYTE MWSt_Typ )
{
	DOUBLE Betrag2;
	ULONG ReturnWert = 0;
	TEXT Buffer[80];
	TEXT Buffer2[80];

	for( ULONG i = 0; i < 4; i++ )
	{
		sprintf(Buffer2, "%s.%lu", Name, i);
		Betrag2 = MyPrefsPTR->WaehrungUmrechnen( MWSt, Betrag, Waehrung_KZ, i, MWSt_Typ );
		sprintf(Buffer, "%f", Betrag2);
		ReturnWert += SetRexxVar( (struct Message *)rxmsg, Buffer2, (STRPTR)Buffer, strlen(Buffer) );
	}

	return ReturnWert;
};

ULONG MTARexx::RexxBetrag( STRPTR Name, DOUBLE Betrag_W1, DOUBLE Betrag_W2 )
{
	DOUBLE Betrag[] = {	Betrag_W1,
								Betrag_W2 };
	ULONG ReturnWert = 0;
	TEXT Buffer[80];
	TEXT Buffer2[80];

	for( ULONG i = 0; i < 2; i++ )
	{
		sprintf(Buffer2, "%s.%lu", Name, i);
		sprintf(Buffer, "%f", Betrag[i]);
		ReturnWert += SetRexxVar( (struct Message *)rxmsg, Buffer2, (STRPTR)Buffer, strlen(Buffer) );
	}

	return ReturnWert;
};

ULONG MTARexx::RexxBetrag( STRPTR Name, DOUBLE Betrag_NW1, DOUBLE Betrag_BW1, DOUBLE Betrag_NW2, DOUBLE Betrag_BW2 )
{
	DOUBLE Betrag[] = {	Betrag_NW1,
								Betrag_BW1,
								Betrag_NW2,
								Betrag_BW2 };
	ULONG ReturnWert = 0;
	TEXT Buffer[80];
	TEXT Buffer2[80];

	for( ULONG i = 0; i < 4; i++ )
	{
		sprintf(Buffer2, "%s.%lu", Name, i);
		sprintf(Buffer, "%f", Betrag[i]);
		ReturnWert += SetRexxVar( (struct Message *)rxmsg, Buffer2, (STRPTR)Buffer, strlen(Buffer) );
	}

	return ReturnWert;
};

LONG MTARexx::GetRexxLong( STRPTR Name, LONG von, LONG bis)
{
	LONG Ergebnis;
	STRPTR Buffer;

	GetRexxVar( (struct Message *)rxmsg, Name, (UBYTE **)&Buffer );
	Ergebnis				= atol( Buffer );
	if(Ergebnis			< von)
		Ergebnis			= von;
	else if(Ergebnis	> bis)
		Ergebnis			= bis;

	return Ergebnis;
}

LONG MTARexx::ParseRexxMsg()
{
	LONG ReturnWert = 0;

	*Buffer = 0;
	STRPTR ZW_String = NULL;

	if( Strnicmp( rxmsg->rm_Args[0], "VERSION", 7 ) == 0)
	{
		strcpy( Buffer, _Version_ );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PUBSCREEN", 9 ) == 0)
	{
		strcpy( Buffer, PubScreen );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "LOCKGUI", 7 ) == 0)
	{
		WZ_LockWindows(surface);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FREEGUI", 7 ) == 0)
	{
		WZ_UnlockWindows(surface);
		ActivateWindow( ThisScreen->FirstWindow );
		ActivateWindow( ThisScreen->FirstWindow->NextWindow );
		ActivateWindow( ThisScreen->FirstWindow );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "MTSCREENTOFRONT", 15 ) == 0)
	{
		if( ThisScreen )
			ScreenToFront( ThisScreen ); 
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "WBENCHTOFRONT", 13 ) == 0)
	{
		WBenchToFront();
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PRINTSTATE", 10 ) == 0)
	{
		Buffer[0] = '0' + DruckArt;
		Buffer[1] = 0;
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PRINTFIND", 9 ) == 0)
	{
		if( MerkDB &&
			 (Drucknummer_von <= Drucknummer_bis) )
		{
			switch( SuchBezug )
			{
				case 0:
					ReturnWert = ((DataBase*)(MerkDB))->GetRexx( rxmsg, Drucknummer_von );
					sprintf(Buffer, "%lu", Drucknummer_von);
					Drucknummer_von++;
					break;
				case 1:
					for( ; ( (Drucknummer_von <= Drucknummer_bis) && (*Buffer == 0) ); Drucknummer_von++ )
					{
						((DataBase*)(MerkDB))->GetElementNr( Drucknummer_von );
						if( ((DataBase*)(MerkDB))->Vergleich( (DataBaseSearch *)Vergleichsfunktion, Verknuepf ) )
						{
							ReturnWert = ((DataBase*)(MerkDB))->GetRexx( rxmsg, Drucknummer_von );
							sprintf(Buffer, "%lu", Drucknummer_von);
						}
					}
					if( *Buffer == 0 )
					{
						Buffer[0] = '0';
						Buffer[1] = 0;
					}
					break;
				default:
					Buffer[0] = '0';
					Buffer[1] = 0;
					break;
			}
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
			SuchBezug = 3;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "EASY_REQUEST", 12 ) == 0)
	{
		LONG RequestReturn;
		TEXT Titel[256], TextFormat[512], GadgetFormat[128];

		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ES_TITLE", (UBYTE **)&ZW_String );
		strcpy( Titel, ZW_String );
		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ES_TEXTFORMAT", (UBYTE **)&ZW_String );
		strcpy( TextFormat, ZW_String );
		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ES_GADGETFORMAT", (UBYTE **)&ZW_String );
		strcpy( GadgetFormat, ZW_String );

		struct EasyStruct es = {	(ULONG)sizeof(struct EasyStruct),
											0L,
											(UBYTE *)Titel,
											(UBYTE *)TextFormat,
											(UBYTE *)GadgetFormat };

		RequestReturn = EasyRequest( ThisScreen->FirstWindow, &es, NULL );
		sprintf(Buffer, "%lu", RequestReturn);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ASL_FILE_REQUEST", 16 ) == 0)
	{
		struct FileRequester	*fr;
		TEXT TitelText[256], InitialDrawer[256], InitialPattern[256], InitialFile[256];

		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ASLFR_TITLETEXT", (UBYTE **)&ZW_String );
		strcpy( TitelText, ZW_String );
		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ASLFR_INITIALDRAWER", (UBYTE **)&ZW_String );
		strcpy( InitialDrawer, ZW_String );
		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ASLFR_INITIALPATTERN", (UBYTE **)&ZW_String );
		strcpy( InitialPattern, ZW_String );
		ReturnWert += GetRexxVar( (struct Message *)rxmsg, "ASLFR_INITIALFILE", (UBYTE **)&ZW_String );
		strcpy( InitialFile, ZW_String );

		if ((fr = ( struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
														ASLFR_Screen,				ThisScreen,
														ASLFR_TitleText,			TitelText,
														ASLFR_InitialPattern,	InitialPattern,
														ASLFR_InitialDrawer,		InitialDrawer,
														ASLFR_InitialFile,		InitialFile,
														ASLFR_InitialHeight,		ThisScreen->Height - (ThisScreen->BarHeight + 1),
														ASLFR_InitialWidth,		320,
														ASLFR_InitialLeftEdge,	ThisScreen->LeftEdge,
														ASLFR_InitialTopEdge,	(ThisScreen->BarHeight + 1),
														TAG_DONE)) != 0)
		{
			if(AslRequest(fr,NULL))
			{
				// Der neue Filerequester setzt sich aus Drawer und File zusammen
				strcpy(Buffer, fr->fr_Drawer);
				if( *Buffer > 0 &&
					 Buffer[(strlen(Buffer)-1)] != ':' &&
					 Buffer[(strlen(Buffer)-1)] != '/' )
					 strcat(Buffer, "/");
				strcat(Buffer, fr->fr_File);
			}
			else
			{
				Buffer[0] = ' ';
				Buffer[1] = 0;
			}
			FreeAslRequest(fr);
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_DATE_SHORT", 17 ) == 0)
	{
		struct DateStamp ThisDateStamp = RexxDatum2( &rxmsg->rm_Args[0][18] );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, MyLocalePTR->Thislocale->loc_ShortDateFormat );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PARSE_DATE_SHORT", 16 ) == 0)
	{
		struct DateStamp ThisDateStamp = MyLocalePTR->ParseDateC( &rxmsg->rm_Args[0][17], MyLocalePTR->Thislocale->loc_ShortDateFormat );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, "%Y%m%d");
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_DATE_LONG", 16 ) == 0)
	{
		struct DateStamp ThisDateStamp = RexxDatum2( &rxmsg->rm_Args[0][17] );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, MyLocalePTR->Thislocale->loc_DateFormat );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PARSE_DATE_LONG", 15 ) == 0)
	{
		struct DateStamp ThisDateStamp = MyLocalePTR->ParseDateC( &rxmsg->rm_Args[0][16], MyLocalePTR->Thislocale->loc_DateFormat );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, "%Y%m%d");
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_TIME_SHORT", 17 ) == 0)
	{
		struct DateStamp ThisDateStamp = MyLocalePTR->ParseDateC( &rxmsg->rm_Args[0][18], "%X" );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, MyLocalePTR->Thislocale->loc_ShortTimeFormat );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PARSE_TIME_SHORT", 16 ) == 0)
	{
		struct DateStamp ThisDateStamp = MyLocalePTR->ParseDateC( &rxmsg->rm_Args[0][17], MyLocalePTR->Thislocale->loc_ShortTimeFormat );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, "%X");
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_TIME_LONG", 16 ) == 0)
	{
		struct DateStamp ThisDateStamp = MyLocalePTR->ParseDateC( &rxmsg->rm_Args[0][17], "%X" );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, MyLocalePTR->Thislocale->loc_TimeFormat );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PARSE_TIME_LONG", 15 ) == 0)
	{
		struct DateStamp ThisDateStamp = MyLocalePTR->ParseDateC( &rxmsg->rm_Args[0][16], MyLocalePTR->Thislocale->loc_TimeFormat );
		MyLocalePTR->FormatDateC( Buffer, &ThisDateStamp, "%X");
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_MONEY1", 13 ) == 0)
	{
		DOUBLE ZW_DOUBLE = atof( &rxmsg->rm_Args[0][14] );
		MyLocalePTR->FormatMoney( Buffer, ZW_DOUBLE,	MyPrefsPTR->WaehrungPTR[0] );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_MONEY2", 13 ) == 0)
	{
		DOUBLE ZW_DOUBLE = atof( &rxmsg->rm_Args[0][14] );
		MyLocalePTR->FormatMoney( Buffer, ZW_DOUBLE,	MyPrefsPTR->WaehrungPTR[2] );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PARSE_MONEY", 11 ) == 0)
	{
		DOUBLE ZW_DOUBLE = MyLocalePTR->ParseMoney( &rxmsg->rm_Args[0][12] );
		sprintf( Buffer, "%f", ZW_DOUBLE );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "FORMAT_NUMBER", 13 ) == 0)
	{
		DOUBLE ZW_DOUBLE = strtod( &rxmsg->rm_Args[0][14], &ZW_String );
		ZW_String++;
		i = atol( ZW_String );
		MyLocalePTR->FormatNumber( Buffer, ZW_DOUBLE, i );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "PARSE_NUMBER", 12 ) == 0)
	{
		DOUBLE ZW_DOUBLE = MyLocalePTR->ParseNumber( &rxmsg->rm_Args[0][13] );
		sprintf( Buffer, "%f", ZW_DOUBLE );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_REXXPATH", 12 ) == 0)
	{
		strcpy( Buffer, MyToolTypesPTR->MTTTVorgaben[15].Wert );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NAME_OF_QUANTITY_UNIT", 21 ) == 0)
	{
		i = atol( &rxmsg->rm_Args[0][22] );
		MyAppStringsPTR->GetCycleWert( AppStrings[MSG_ME], Buffer, i );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NAME_OF_INBILL_RSTATE", 21 ) == 0)
	{
		i = atol( &rxmsg->rm_Args[0][22] );
		MyAppStringsPTR->GetCycleWert( AppStrings[MSG_ERechStatus], Buffer, i );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NAME_OF_OUTBILL_RSTATE", 22 ) == 0)
	{
		i = atol( &rxmsg->rm_Args[0][23] );
		MyAppStringsPTR->GetCycleWert( AppStrings[MSG_ARechStatus], Buffer, i );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NAME_OF_SALUTATION", 18 ) == 0)
	{
		i = atol( &rxmsg->rm_Args[0][19] );
		MyAppStringsPTR->GetCycleWert( AppStrings[MSG_Anrede], Buffer, i );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NAME_OF_FAMILY_STATE", 20 ) == 0)
	{
		i = atol( &rxmsg->rm_Args[0][21] );
		MyAppStringsPTR->GetCycleWert( AppStrings[MSG_FStand], Buffer, i );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_PREFS", 9 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Prefs >= 1 )
			ReturnWert = MyPrefsPTR->GetRexx( rxmsg, 1 );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_PREFS", 9 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Prefs >= 2 )
			ReturnWert = MyPrefsPTR->SetRexx( rxmsg, 1 );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_COUNTRY", 14 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Laender >= 1 )
			sprintf(Buffer, "%lu", MyLaenderPTR->ElementeVorhanden());
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_COUNTRY", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Laender >= 1 )
			sprintf(Buffer, "%lu", MyLaenderPTR->AktElementNr);
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_COUNTRY", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Laender >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyLaenderPTR->ElementeVorhanden())
				i = MyLaenderPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyLaenderPTR->GetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_COUNTRY", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Laender >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyLaenderPTR->ElementeVorhanden())
				i = MyLaenderPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyLaenderPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_COUNTRY", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Laender >= 2 )
		{
			MyLaenderPTR->NeuerDatensatz();
			ReturnWert = MyLaenderPTR->GetRexx( rxmsg, MyLaenderPTR->ElementeVorhanden() );
			sprintf(Buffer, "%lu", MyLaenderPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_COUNTRY", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Laender >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > 0 && i <= MyLaenderPTR->ElementeVorhanden() )
			{
				MyLaenderPTR->GetElementNr(i);
				MyLaenderPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_DISPATCH", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 1 )
		{
			sprintf(Buffer, "%lu", MyVersandPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_DISPATCH", 17 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 1 )
		{
			sprintf(Buffer, "%lu", MyVersandPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_DISPATCH", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyVersandPTR->ElementeVorhanden())
				i = MyVersandPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyVersandPTR->GetRexx( rxmsg, i, "", NULL);
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_DISPATCH", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyVersandPTR->ElementeVorhanden())
				i = MyVersandPTR->ElementeVorhanden();
			else if( i <= 0 )
			i = 1;
			ReturnWert = MyVersandPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_DISPATCH", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 2 )
		{
			MyVersandPTR->NeuerDatensatz();
			ReturnWert = MyVersandPTR->GetRexx( rxmsg, MyVersandPTR->ElementeVorhanden(), "", NULL );
			sprintf(Buffer, "%lu", MyVersandPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_DISPATCH", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyVersandPTR->ElementeVorhanden() )
			{
				MyVersandPTR->GetElementNr(i);
				MyVersandPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_ARTICLE", 14 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 1 )
		{
			sprintf(Buffer, "%lu", MyArtikelPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_ARTICLE", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 1 )
		{
			sprintf(Buffer, "%lu", MyArtikelPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_ARTICLE", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyArtikelPTR->ElementeVorhanden())
				i = MyArtikelPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyArtikelPTR->GetRexx( rxmsg, i, "", NULL);
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_ARTICLE", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyArtikelPTR->ElementeVorhanden())
				i = MyArtikelPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyArtikelPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_ARTICLE", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 2 )
		{
			MyArtikelPTR->NeuerDatensatz();
			ReturnWert = MyArtikelPTR->GetRexx( rxmsg, MyArtikelPTR->ElementeVorhanden(), "", NULL );
			sprintf(Buffer, "%lu", MyArtikelPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_ARTICLE", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Artikel >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > 0 && i <= MyArtikelPTR->ElementeVorhanden() )
			{
				MyArtikelPTR->GetElementNr(i);
				MyArtikelPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_ADDRESS", 14 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 1 )
		{
			sprintf(Buffer, "%lu", MyAdressPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_ADDRESS", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 1 )
		{
			sprintf(Buffer, "%lu", MyAdressPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_ADDRESS", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyAdressPTR->ElementeVorhanden())
				i = MyAdressPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyAdressPTR->GetRexx( rxmsg, i, "", NULL);
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_ADDRESS", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyAdressPTR->ElementeVorhanden())
				i = MyAdressPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyAdressPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_ADDRESS", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			MyAdressPTR->NeuerDatensatz();
			ReturnWert = MyAdressPTR->GetRexx( rxmsg, MyAdressPTR->ElementeVorhanden(), "", NULL );
			sprintf(Buffer, "%lu", MyAdressPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_ADDRESS", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > 0 && i <= MyAdressPTR->ElementeVorhanden() )
			{
				MyAdressPTR->GetElementNr(i);
				MyAdressPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_CUSTOMER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyAdressPTR->ElementeVorhanden() )
			{
				MyAdressPTR->GetElementNr(i);
				if( MyAdressPTR->Daten->Kunde > 0 )
				{
					MyKundenPTR->GetRexx( rxmsg, MyAdressPTR->Daten->Kunde, "", NULL );
					ReturnWert = 2;
				}
				else
				{
					MyKundenPTR->NeuerDatensatz();
					MyAdressPTR->Daten->Kunde = MyKundenPTR->AktElementNr;
					MyAdressPTR->UpDateElement();
					ReturnWert += MyKundenPTR->GetRexx( rxmsg, MyKundenPTR->AktElementNr, "", NULL );
				}
				sprintf(Buffer, "%lu", MyAdressPTR->Daten->Kunde );
			}
			else
			{
				Buffer[0]	= '0';
				Buffer[1]	= 0;
				ReturnWert	= 2;
			}
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_EMPLOYEE", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyAdressPTR->ElementeVorhanden() )
			{
				MyAdressPTR->GetElementNr(i);
				if( MyAdressPTR->Daten->Mitarbeiter > 0 )
				{
					MyMitarbeiterPTR->GetRexx( rxmsg, MyAdressPTR->Daten->Mitarbeiter, "", NULL );
					ReturnWert = 2;
				}
				else
				{
					MyMitarbeiterPTR->NeuerDatensatz();
					MyAdressPTR->Daten->Mitarbeiter = MyMitarbeiterPTR->AktElementNr;
					MyAdressPTR->UpDateElement();
					ReturnWert = MyMitarbeiterPTR->GetRexx( rxmsg, MyMitarbeiterPTR->AktElementNr, "", NULL );
					MyMitarbeiterPTR->GetElementNr(i);
				}
				sprintf(Buffer, "%lu", MyAdressPTR->Daten->Mitarbeiter );
			}
			else
			{
				Buffer[0]	= '0';
				Buffer[1]	= 0;
				ReturnWert	= 2;
			}
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_BRANCHOFFICE", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][17] );
			if( i > 0 && i <= MyAdressPTR->ElementeVorhanden() )
			{
				MyAdressPTR->GetElementNr(i);
				if( MyAdressPTR->Daten->Niederlassung > 0 )
				{
					MyNiederlassungPTR->GetRexx( rxmsg, MyAdressPTR->Daten->Niederlassung, "", NULL );
					ReturnWert = 2;
				}
				else
				{
					MyNiederlassungPTR->NeuerDatensatz();
					MyAdressPTR->Daten->Niederlassung = MyNiederlassungPTR->AktElementNr;
					MyAdressPTR->UpDateElement();
					ReturnWert = MyNiederlassungPTR->GetRexx( rxmsg, MyNiederlassungPTR->AktElementNr, "", NULL );
				}
				sprintf(Buffer, "%lu", MyAdressPTR->Daten->Niederlassung );
			}
			else
			{
				Buffer[0]	= '0';
				Buffer[1]	= 0;
				ReturnWert	= 2;
			}
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_SUPPLIER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Adressen >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyAdressPTR->ElementeVorhanden() )
			{
				MyAdressPTR->GetElementNr(i);
				if( MyAdressPTR->Daten->Lieferant > 0 )
				{
					MyLieferantPTR->GetRexx( rxmsg, MyAdressPTR->Daten->Lieferant, "", NULL );
					ReturnWert = 2;
				}
				else
				{
					MyLieferantPTR->NeuerDatensatz();
					MyAdressPTR->Daten->Lieferant = MyLieferantPTR->AktElementNr;
					MyAdressPTR->UpDateElement();
					ReturnWert = MyLieferantPTR->GetRexx( rxmsg, MyLieferantPTR->AktElementNr, "", NULL );
				}
				sprintf(Buffer, "%lu", MyAdressPTR->Daten->Lieferant );
			}
			else
			{
				Buffer[0]	= '0';
				Buffer[1]	= 0;
				ReturnWert	= 2;
			}
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_CUSTOMER", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kunden >= 1 )
		{
			sprintf(Buffer, "%lu", MyKundenPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_CUSTOMER", 17 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kunden >= 1 )
		{
			sprintf(Buffer, "%lu", MyKundenPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_CUSTOMER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kunden >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyKundenPTR->ElementeVorhanden())
				i = MyKundenPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyKundenPTR->GetRexx( rxmsg, i, "", NULL);
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_CUSTOMER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kunden >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyKundenPTR->ElementeVorhanden())
				i = MyKundenPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyKundenPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_CUSTOMER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kunden >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyKundenPTR->ElementeVorhanden() )
			{
				MyKundenPTR->GetElementNr(i);
				if( MyKundenPTR->Daten->Adresse	> 0 &&
					 MyKundenPTR->Daten->Status	< 0xffff )
				{
					MyKundenPTR->LoeschenAkt();
					MyKundenPTR->GetRexx( rxmsg, i, "", NULL );
					i = MyAdressPTR->AktElementNr;
					MyAdressPTR->GetElementNr(MyKundenPTR->Daten->Adresse);
					MyAdressPTR->Daten->Kunde = 0;
					MyAdressPTR->UpDateElement();
					MyAdressPTR->GetElementNr(i);
					ReturnWert = 0;
				}
				else
				{
					ReturnWert = 2;
					i = 0;
				}
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_EMPLOYEE", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Mitarbeiter >= 1 )
		{
			sprintf(Buffer, "%lu", MyMitarbeiterPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_EMPLOYEE", 17 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Mitarbeiter >= 1 )
		{
			sprintf(Buffer, "%lu", MyMitarbeiterPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_EMPLOYEE", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Mitarbeiter >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyMitarbeiterPTR->ElementeVorhanden())
				i = MyMitarbeiterPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyMitarbeiterPTR->GetRexx( rxmsg, i, "");
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_LOGON_EMPLOYEE", 18 ) == 0)
	{
		ReturnWert = MyMitarbeiterPTR->GetRexx( rxmsg, 0, "", &MyMitarbeiterPTR->UserDaten);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_EMPLOYEE", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Mitarbeiter >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyMitarbeiterPTR->ElementeVorhanden())
				i = MyMitarbeiterPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyMitarbeiterPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_EMPLOYEE", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Mitarbeiter >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyMitarbeiterPTR->ElementeVorhanden() )
			{
				MyMitarbeiterPTR->GetElementNr(i);
				if( MyMitarbeiterPTR->Daten->Adresse	> 0 &&
					 MyMitarbeiterPTR->Daten->Status		< 0xffff )
				{
					MyMitarbeiterPTR->LoeschenAkt();
					MyMitarbeiterPTR->GetRexx( rxmsg, i, "", NULL );
					i = MyAdressPTR->AktElementNr;
					MyAdressPTR->GetElementNr(MyMitarbeiterPTR->Daten->Adresse);
					MyAdressPTR->Daten->Mitarbeiter = 0;
					MyAdressPTR->UpDateElement();
					MyAdressPTR->GetElementNr(i);
					ReturnWert = 0;
				}
				else
				{
					ReturnWert = 2;
					i = 0;
				}
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_BRANCHOFFICE", 19 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Niederlassung >= 1 )
		{
			sprintf(Buffer, "%lu", MyNiederlassungPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_BRANCHOFFICE", 21 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Niederlassung >= 1 )
		{
			sprintf(Buffer, "%lu", MyNiederlassungPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_BRANCHOFFICE", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Niederlassung >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][17] );
			if( i > MyNiederlassungPTR->ElementeVorhanden())
				i = MyNiederlassungPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyNiederlassungPTR->GetRexx( rxmsg, i, "");
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_LOGON_BRANCHOFFICE", 22 ) == 0)
	{
		ReturnWert = MyNiederlassungPTR->GetRexx( rxmsg, 0, "", &MyNiederlassungPTR->UserNiederlassung );
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_BRANCHOFFICE", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Niederlassung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][17] );
			if( i > MyNiederlassungPTR->ElementeVorhanden())
				i = MyNiederlassungPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyNiederlassungPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_BRANCHOFFICE", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Niederlassung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][17] );
			if( i > 0 && i <= MyNiederlassungPTR->ElementeVorhanden() )
			{
				MyNiederlassungPTR->GetElementNr(i);
				if( MyNiederlassungPTR->Daten->Adresse	> 0 &&
					 MyNiederlassungPTR->Daten->Status	< 0xffff )
				{
					MyNiederlassungPTR->LoeschenAkt();
					MyNiederlassungPTR->GetRexx( rxmsg, i, "", NULL );
					i = MyAdressPTR->AktElementNr;
					MyAdressPTR->GetElementNr(MyNiederlassungPTR->Daten->Adresse);
					MyAdressPTR->Daten->Niederlassung = 0;
					MyAdressPTR->UpDateElement();
					MyAdressPTR->GetElementNr(i);
					ReturnWert = 0;
				}
				else
				{
					ReturnWert = 2;
					i = 0;
				}
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_SUPPLIER", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Lieferanten >= 1 )
		{
			sprintf(Buffer, "%lu", MyLieferantPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_SUPPLIER", 17 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Lieferanten >= 1 )
		{
			sprintf(Buffer, "%lu", MyLieferantPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_SUPPLIER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Lieferanten >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyLieferantPTR->ElementeVorhanden())
				i = MyLieferantPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyLieferantPTR->GetRexx( rxmsg, i, "", NULL);
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_SUPPLIER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Lieferanten >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > MyLieferantPTR->ElementeVorhanden())
				i = MyLieferantPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyLieferantPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_SUPPLIER", 12 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Lieferanten >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][13] );
			if( i > 0 && i <= MyLieferantPTR->ElementeVorhanden() )
			{
				MyLieferantPTR->GetElementNr(i);
				if( MyLieferantPTR->Daten->Adresse	> 0 &&
					 MyLieferantPTR->Daten->Status	< 0xffff )
				{
					MyLieferantPTR->LoeschenAkt();
					MyLieferantPTR->GetRexx( rxmsg, i, "", NULL );
					i = MyAdressPTR->AktElementNr;
					MyAdressPTR->GetElementNr(MyLieferantPTR->Daten->Adresse);
					MyAdressPTR->Daten->Lieferant = 0;
					MyAdressPTR->UpDateElement();
					MyAdressPTR->GetElementNr(i);
					ReturnWert = 0;
				}
				else
				{
					ReturnWert = 2;
					i = 0;
				}
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_OUTBILL", 14 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 1 )
		{
			sprintf(Buffer, "%lu", MyARechnungPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_OUTBILL", 16 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 1 )
		{
			sprintf(Buffer, "%lu", MyARechnungPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_OUTBILL", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyARechnungPTR->ElementeVorhanden())
				i = MyARechnungPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyARechnungPTR->GetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_OUTBILL", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > MyARechnungPTR->ElementeVorhanden())
				i = MyARechnungPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyARechnungPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_OUTBILL", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 2 )
		{
			MyARechnungPTR->NeuerDatensatz();
			ReturnWert = MyARechnungPTR->GetRexx( rxmsg, MyARechnungPTR->ElementeVorhanden() );
			sprintf(Buffer, "%lu", MyARechnungPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_OUTBILL", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][12] );
			if( i > 0 && i <= MyARechnungPTR->ElementeVorhanden() )
			{
				MyARechnungPTR->GetElementNr(i);
				MyARechnungPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_ARTICLE_OUTBILL", 19 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][20] );
			if( i > 0 && i <= MyARechnungPTR->ElementeVorhanden() )
			{
				MyARechnungPTR->GetElementNr(i);
				MyARechnungPTR->LesenGesamtRech();
				MyARechnungArtikelPTR->NeuerArtikel();
				ReturnWert = MyARechnungPTR->GetRexx( rxmsg, i );
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "REMOVE_ARTICLE_OUTBILL", 22 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 2 )
		{
			i = strtol( &rxmsg->rm_Args[0][23], &ZW_String, 10 );
			ZW_String++;
			j = atol( ZW_String );
			if( i > 0 && i <= MyARechnungPTR->ElementeVorhanden() )
			{
				MyARechnungPTR->GetElementNr(i);
				MyARechnungPTR->LesenGesamtRech();
				MyARechnungArtikelPTR->LoescheArtikel(j);
				ReturnWert = MyARechnungPTR->GetRexx( rxmsg, i );
			}
			else
			{
				ReturnWert = 2;
				j = 0;
			}
		}
		else
			j = 0;

		sprintf(Buffer, "%lu", j);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_INBILL", 13 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 1 )
		{
			sprintf(Buffer, "%lu", MyERechnungPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_INBILL", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 1 )
		{
			sprintf(Buffer, "%lu", MyERechnungPTR->AktElementNr);
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_INBILL", 10 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][11] );
			if( i > MyERechnungPTR->ElementeVorhanden())
				i = MyERechnungPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyERechnungPTR->GetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_INBILL", 10 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][11] );
			if( i > MyERechnungPTR->ElementeVorhanden())
				i = MyERechnungPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyERechnungPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_INBILL", 10 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 2 )
		{
			MyERechnungPTR->NeuerDatensatz();
			ReturnWert = MyERechnungPTR->GetRexx( rxmsg, MyERechnungPTR->ElementeVorhanden() );
			sprintf(Buffer, "%lu", MyERechnungPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_INBILL", 10 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][11] );
			if( i > 0 && i <= MyERechnungPTR->ElementeVorhanden() )
			{
				MyERechnungPTR->GetElementNr(i);
				MyERechnungPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_ARTICLE_INBILL", 18 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][19] );
			if( i > 0 && i <= MyERechnungPTR->ElementeVorhanden() )
			{
				MyERechnungPTR->GetElementNr(i);
				MyERechnungPTR->LesenGesamtRech();
				MyERechnungArtikelPTR->NeuerArtikel();
				ReturnWert = MyERechnungPTR->GetRexx( rxmsg, i );
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "REMOVE_ARTICLE_INBILL", 21 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ERechnung >= 2 )
		{
			i = strtol( &rxmsg->rm_Args[0][22], &ZW_String, 10 );
			ZW_String++;
			j = atol( ZW_String );
			if( i > 0 && i <= MyERechnungPTR->ElementeVorhanden() )
			{
				MyERechnungPTR->GetElementNr(i);
				MyERechnungPTR->LesenGesamtRech();
				MyERechnungArtikelPTR->LoescheArtikel(j);
				ReturnWert = MyERechnungPTR->GetRexx( rxmsg, i );
			}
			else
			{
				ReturnWert = 2;
				j = 0;
			}
		}
		else
			j = 0;

		sprintf(Buffer, "%lu", j);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NUMBER_STOCKTAKING", 18 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Inventur >= 1 )
			sprintf(Buffer, "%lu", MyInventurPTR->ElementeVorhanden());
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "POSITION_STOCKTAKING", 20 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Inventur >= 1 )
			sprintf(Buffer, "%lu", MyInventurPTR->AktElementNr);
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_STOCKTAKING", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Inventur >= 1 )
		{
			i = atol( &rxmsg->rm_Args[0][16] );
			if( i > MyInventurPTR->ElementeVorhanden())
				i = MyInventurPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyInventurPTR->GetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_STOCKTAKING", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Inventur >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][16] );
			if( i > MyInventurPTR->ElementeVorhanden())
				i = MyInventurPTR->ElementeVorhanden();
			else if( i <= 0 )
				i = 1;
			ReturnWert = MyInventurPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "NEW_STOCKTAKING", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Inventur >= 2 )
		{
			MyInventurPTR->NeuerDatensatz();
			ReturnWert = MyInventurPTR->GetRexx( rxmsg, MyInventurPTR->ElementeVorhanden() );
			sprintf(Buffer, "%lu", MyInventurPTR->ElementeVorhanden());
		}
		else
		{
			Buffer[0] = '0';
			Buffer[1] = 0;
		}
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "DEL_STOCKTAKING", 15 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Inventur >= 2 )
		{
			i = atol( &rxmsg->rm_Args[0][16] );
			if( i > 0 && i <= MyInventurPTR->ElementeVorhanden() )
			{
				MyInventurPTR->GetElementNr(i);
				MyInventurPTR->LoeschenAkt();
				ReturnWert = 0;
			}
			else
			{
				ReturnWert = 2;
				i = 0;
			}
		}
		else
			i = 0;
		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "GET_ACCOUNT", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kontenplan >= 1 )
		{
			i = 1;
			ReturnWert = MyKontenPTR->GetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "SET_ACCOUNT", 11 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kontenplan >= 2 )
		{
			i = 1;
			ReturnWert = MyKontenPTR->SetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "ADD_ACCOUNT_ACCOUNT", 19 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_Kontenplan >= 2 )
		{
			MyKontenPosPTR->NeuesKonto();
			i = 1;
			ReturnWert = MyKontenPTR->GetRexx( rxmsg, i );
		}
		else
			i = 0;

		sprintf(Buffer, "%lu", i);
	}
	else if( Strnicmp( rxmsg->rm_Args[0], "REMOVE_ACCOUNT_ACCOUNT", 22 ) == 0)
	{
		if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung >= 2 )
		{
			j = atol( &rxmsg->rm_Args[0][23] );
			MyKontenPosPTR->LoescheKonto(j);
			i = 1;
			ReturnWert = MyKontenPTR->GetRexx( rxmsg, i );
		}
		else
			j = 0;

		sprintf(Buffer, "%lu", j);
	}
	else
	{
		return ReturnWert;
	}

	ReturnWert += SetRexxVar( (struct Message *)rxmsg, Result, (STRPTR)Buffer, strlen(Buffer) );

	return ReturnWert;
};

BOOL MTARexx::StartRexxScript( STRPTR Verzeichnis, STRPTR Scriptname )
{
	struct MsgPort *RexxMaster;
	TEXT Argument[400];
	BOOL Returnwert = FALSE;

	strcpy( Argument, Verzeichnis );
	if(*Verzeichnis > 0 &&
		Verzeichnis[(strlen(Verzeichnis)-1)] != ':' &&
		Verzeichnis[(strlen(Verzeichnis)-1)] != '/' )
		strcat( Argument, "/" );
	strcat( Argument, Scriptname );
	strcat( Argument, " " );
	strcat( Argument, RexxPortName );

	rxmsg2 = CreateRexxMsg(&RexxPort, NULL, RexxPortName);

	if( rxmsg2 )
	{
		if( (rxmsg2->rm_Args[0]	= CreateArgstring( Argument, strlen(Argument))) != 0 )
		{
			rxmsg2->rm_Action		= RXCOMM | RXFF_NOIO;
			rxmsg2->rm_CommAddr	= RexxPortName;

			Forbid();
			RexxMaster = FindPort( "AREXX" );

			if( RexxMaster )
				PutMsg(RexxMaster, (struct Message *)rxmsg2);
			else
				Returnwert			= TRUE;

			Permit();

			if( RexxMaster )
			{
				WaitPort( &RexxPort );
				GetMsg( &RexxPort );
				Returnwert			= (rxmsg2->rm_Result1 != RC_OK);
			}
			ClearRexxMsg( rxmsg2, 1 );
		}
		DeleteRexxMsg( rxmsg2 );
	}

	if( (rxmsg2 == NULL) || (RexxMaster == NULL) )
	{
		struct EasyStruct es = {	(ULONG)sizeof(struct EasyStruct),
											0L,
											(UBYTE *)AppStrings[MSG_ReQuest_Fehler],
											(UBYTE *)AppStrings[MSG_ReQuest_RexxPort],
											(UBYTE *)AppStrings[MSG_ReQuest_OK] };
		WZ_LockWindows(surface);
		EasyRequest( ThisScreen->FirstWindow, &es, NULL );
		WZ_UnlockWindows(surface);
	}

	return Returnwert;
};

LONG MTARexx::PutRexxMsg(struct RexxMsg *rxmsg)
{
	struct MsgPort *mp;
	LONG ReturnWert = 0;

	Forbid();
	if((mp = FindPort(RXSDIR)) != NULL )
	{
		PutMsg(mp,&rxmsg->rm_Node);
		ReturnWert = 1;
	}
	Permit();
	return ReturnWert;
};

LONG MTARexx::SendRexxMsg( STRPTR string, ULONG len)
{
	struct RexxMsg *rxmsg;
	LONG ReturnWert = 0;
	
	if( (rxmsg = CreateRexxMsg(&RexxPort, NULL, RexxPortName)) != NULL )
	{
		if( (ARG0(rxmsg) = CreateArgstring(string,len)) != NULL )
		{
			rxmsg->rm_Action	= RXCOMM | RXFF_STRING;
			if(PutRexxMsg(rxmsg))
				ReturnWert = 1;
			else
				DeleteArgstring(ARG0(rxmsg));
		}
		DeleteRexxMsg(rxmsg);
	}
	return ReturnWert;
};

void MTARexx::Auswertung()
{
	while( (rxmsg = (struct RexxMsg*)GetMsg(&RexxPort)) != NULL )
	{
		switch(rxmsg->rm_Node.mn_Node.ln_Type)
		{
			case NT_REPLYMSG:
				if((rxmsg2 = (struct RexxMsg*)rxmsg->rm_Args[MAXRMARG]) != NULL)
				{
					rxmsg->rm_Args[MAXRMARG] = NULL;
					ReplyMsg(&rxmsg2->rm_Node);
				}
				else
				{
					DeleteArgstring(ARG0(rxmsg));
				}
				DeleteRexxMsg(rxmsg);
				break;					
			case NT_MESSAGE:
				if(IsRexxMsg(rxmsg))
				{
					if( (rxmsg->rm_Action & RXCODEMASK) == RXCOMM )
					{
						ULONG j = ParseRexxMsg();
						if( j > 0 )
						{
							BOOL result_requested	= FALSE;
							if (rxmsg->rm_Action & RXFF_RESULT)
								result_requested		= TRUE;
							rxmsg->rm_Action			|= RXFF_RESULT;
							rxmsg->rm_Result1			= RC_OK;
							if( j == 2)
							{
								if(result_requested == FALSE)
								{
									if(rxmsg->rm_Result2 && rxmsg->rm_Stdout)
									{
										cout << (STRPTR)rxmsg->rm_Result2 << "\n";
										DeleteArgstring((UBYTE*)rxmsg->rm_Result2);
									}
								}
							}
							else
							{
								rxmsg->rm_Result2 = ERR10_010;
								rxmsg->rm_Result1 = RC_ERROR;
							}
							for(i = 1; i <= (rxmsg->rm_Action & RXARGMASK); i++)
							{
								DeleteArgstring(rxmsg->rm_Args[i]);
								rxmsg->rm_Args[i] = NULL;
							}
							if(result_requested == FALSE)
								rxmsg->rm_Action &= ~RXFF_RESULT;
						}
					}
					else
					{
						if( (rxmsg2 = CreateRexxMsg(&RexxPort, NULL, RexxPortName)) != 0 )
						{
							rxmsg2->rm_Action				= rxmsg->rm_Action;
							rxmsg2->rm_Stdin				= rxmsg->rm_Stdin;
							rxmsg2->rm_Stdout				= rxmsg->rm_Stdout;
							ARG0(rxmsg2)					= ARG0(rxmsg);
							rxmsg2->rm_Args[MAXRMARG]	= (UBYTE*)rxmsg;
							if(!PutRexxMsg(rxmsg2))
							{
								DeleteRexxMsg(rxmsg2);
							}
							else
								break;
						}
						rxmsg->rm_Result1 = RC_FATAL;
					}
				}
				ReplyMsg(&rxmsg->rm_Node);
				break;
			default:
				ReplyMsg(&rxmsg->rm_Node);
				break;
		}
	}
};

