/****************************************************************************************\
 *  Ceasar.cpp  -- Implementierung des Caesar Allgorithmus als Funktionsaufruf          *
 *																						*
 *  Version:	1.0																		*
 *																						*
 *  Author:		Bernd Herth																*
 *																						*
 *	Datum:		11.11.2003																*
 *																						*
 *	Verwendung:	Abbildung der Verschüsselung mit dem Caesar Chiffre						*
 *				Implementiert als Funktionsaufruf zur Verschlüsselung eines Zeichens	*
 *				Es werden nur Zeichen zwischen A und Z berücksichtigt. Hierbei wird		*
 *				Gross und Klein unterschieden. Alle anderen Zeichen werden unverändert	*
 *				zurückgegeben															*
 *																						*
 *	Einschränkung:	Die Funktion basiert auf 8 bit char. wchar werden nicht unterstützt	*
 *																						*
 *																						*
\****************************************************************************************/
#include "caesar.h"

const int  maxkey = 26;		

/*--------------------------------------------------------------------------------------*\
 * char encrypt ( const char input, const int key)										*
 *																						*
 * Eingabe:		const char input -	zu konvertierendes Zeichen							*
 *									keine Einschränkung, jedoch werden nur Zeichen		*
 *									konvertiert die zwischen 'A' und 'Z' bzw. a und z	*
 *									liegen.												*
 *				const int key	 -	Schlüssel - gibt die Verschiebung der Buchstaben an.*
 *									wird intern reduziert auf den Bereich 0-26			*
 *																						*
 * Ausgabe:		returns char	 -	verschlüsseltes Zeichen (für Wertebereich A-Z, a-z	*
 *									ansonst Rückgabe = Eingabe							*
 *																						*
 * Ausnahmen:					 -  Keine												*
 *																						*
\*--------------------------------------------------------------------------------------*/
char encrypt ( const char input, const int inkey )
throw (char*)
{
	unsigned char output = input;
	int key = inkey % maxkey;				// Sicherheitsabfrage falls unsinniger Schlüssel

	if (key = 3) throw "Zu einfach";
	//
	// Eine Umwandlung 
	//
	if ((output >= 'A') && (output<='Z'))							// Bereich A - Z
	{
		output +=  key ;
		output = ( output > 'Z' ) ? ( output - maxkey)  : output;
	}
	else if ((output >= 'a') && (output<='z'))						// Bereich a - z
	{
		output +=  key ;
		output = ( output > 'z' ) ? ( output - maxkey)  : output;
	}
	else
	{
		;															// Rest - bereits oben
	}
	return char(output);
}