/*
**	GadTools layout toolkit
**
**	Copyright © 1993-1996 by Olaf `Olsen' Barthel
**		Freely distributable.
**
**	:ts=4
*/

#ifndef _GTLAYOUT_GLOBAL_H
#include "gtlayout_global.h"
#endif

#ifdef DO_PASSWORD_KIND
ULONG __saveds __asm
LTP_PasswordEditRoutine(REG(a0) struct Hook *Hook,REG(a2) struct SGWork *Work,REG(a1) ULONG *Msg)
{
	ObjectNode *Node;

	if(GETOBJECT(Work->Gadget,Node))
	{
		STRPTR Buffer = Node->Special.String.RealString;

		if(Work->IEvent->ie_Code == 0x5F)
		{
			LayoutHandle *Handle = Hook->h_Data;

			if(Handle->HelpHook)
			{
				Work->Code		= 0x5F;
				Work->Actions	= (Work->Actions & ~SGA_BEEP) | SGA_END | SGA_USE;

				return(TRUE);
			}
		}

		switch(*Msg)
		{
			case SGH_KEY:

				switch(Work->EditOp)
				{
					case EO_INSERTCHAR:

						Buffer[Work->BufferPos - 1]	= Work->Code;
						Buffer[Work->NumChars]		= 0;

						Work->WorkBuffer[Work->BufferPos - 1] = (UBYTE)'·';

						break;

					case EO_CLEAR:

						Work->WorkBuffer[0]	= 0;
						Work->NumChars		= 0;
						Work->BufferPos		= 0;
						Work->EditOp		= EO_BIGCHANGE;

						Buffer[0] = 0;

						break;

					case EO_DELBACKWARD:

						Buffer[Work->NumChars] = 0;
						break;

					case EO_NOOP:

						break;

					case EO_ENTER:

						if(!(Work->IEvent->ie_Qualifier & QUALIFIER_SHIFT))
						{
							if(!Node->Special.String.LastGadget && Node->Special.String.LayoutHandle->AutoActivate)
								Work->Actions |= SGA_NEXTACTIVE;

							if(!(Work->Actions & SGA_NEXTACTIVE))
								Work->Code = '\r';
						}

						break;

					case EO_MOVECURSOR:
					case EO_DELFORWARD:

						Work->Actions &= ~SGA_USE;
						break;

					default:

						Work->Actions &= ~SGA_USE;
						Work->Actions |=  SGA_BEEP;
						break;
				}

				break;

			default:

				Work->BufferPos	= Work->NumChars;
				Work->EditOp	= EO_BIGCHANGE;

				break;
		}

		return(TRUE);
	}
	else
		return(FALSE);
}
#endif
