/*------------------------------------------------------------------------------
 Copyright:      Radig Ulrich
 Mailto: 	 nobody@example.net
 Author:
 Remarks:
 known Problems: none
 Version:
 Description:    Programm zur Ansteuerung eines LCD
		 Grundgerüst mit Hinweisen.
Hinweis :
------------------------------------------------------------------------------*/

#include "lcd.h"
#include "t6963lcd.h"  oder wie auch immer das Headerfile heisst...

#if USE_SER_LCD

volatile unsigned char back_light = 0;

//------------------------------------------------------------------------------
void lcd_init (void)
{
Hier Init fuer T6963 aufrufen ...
}

//------------------------------------------------------------------------------
#if 0
void lcd_write (char data, char cd)
{
	if(cd)
T6963_Zeichenausgabe(data);
	// else
	//	unused
}
#endif
//------------------------------------------------------------------------------
void lcd_print_P (unsigned char zeile,unsigned char spalte,const char *Buffer,...)
{
	va_list ap;
	va_start (ap, Buffer);

	int format_flag;
	char str_buffer[10];
	char str_null_buffer[10];
	char move = 0;
	char Base = 0;
	int tmp = 0;
	char by;
	char *ptr;

	//Berechnet Adresse für die Zeile und schreibt sie ins DD-Ram

Hier Ausgabe-Zeiger des T6963 setzen. zeile = y, spalte = x
Evtl. Anpassung wegen "links Oben" == (0,0) oder (1,1) nötig

	//Ausgabe der Zeichen
	for(;;)
	{
		by = pgm_read_byte(Buffer++);
		if(by == 0) break; // end of format string

		if (by == '%')
		{
			by = pgm_read_byte(Buffer++);
			if (isdigit(by)>0)
			{

				str_null_buffer[0] = by;
				str_null_buffer[1] = '\0';
				move = atoi(str_null_buffer);
				by = pgm_read_byte(Buffer++);
			}

			switch (by)
			{
			case 's':
				ptr = va_arg(ap,char *);
				while(*ptr)
T6963_Zeichenausgabe(*ptr++);
				break;
			case 'b':
				Base = 2;
				goto ConversionLoop;
			case 'c':
				//Int to char
				format_flag = va_arg(ap,int);
T6963_Zeichenausgabe(format_flag);
				break;
			case 'i':
				Base = 10;
				goto ConversionLoop;
			case 'o':
				Base = 8;
				goto ConversionLoop;
			case 'x':
				Base = 16;
				//****************************
				ConversionLoop:
				//****************************
				itoa(va_arg(ap,int),str_buffer,Base);
				int b = 0;
				while (str_buffer[b++] != 0)
					;
				b--;
				if (b < move)
				{
					move -= b;
					for (tmp = 0; tmp < move; tmp++)
					{
						str_null_buffer[tmp] = '0';
					}
					//tmp ++;
					str_null_buffer[tmp] = '\0';
					strcat(str_null_buffer,str_buffer);
					strcpy(str_buffer,str_null_buffer);
				}
				lcd_print_str (str_buffer);
				move = 0;
				break;
			}

		}
		else
		{
T6963_Zeichenausgabe(by);
		}
	}
	va_end(ap);
}

//------------------------------------------------------------------------------
void lcd_print_str (char *Buffer)
{
	while (*Buffer != '\0')
	{
T6963_Zeichenausgabe(*Buffer++);
	};
};

//------------------------------------------------------------------------------
void lcd_clear (void)
{
T6963 löschen
T6963 Ausgabe-Cursor auf (0,0) // oder 1,1 - je nach Bibliothek;

	//Clear Display
	//Set DD-Ram Adresse = 0
}

#endif


