void MD_PZone::commonPrint(void)
{
	int16_t	nextPos;

	FSMPRINTS("\ncommonPrint");
	nextPos = _limitLeft;
	_charCols = getFirstChar();
	_countCols = 0;

	while (nextPos >= _limitRight)
	{
		if (_countCols == _charCols)
		{
			_charCols = getNextChar();
			_countCols = 0;
		}

		// now put something on the display
		_MX->setColumn(nextPos--, DATA_BAR(_cBuf[_countCols++]));
	}
}
void permute(char *str)
{
	int firstIndex=-1 ;
	int secondIndex=-1 ;
	char temp ;

	firstIndex=getFirstChar(str);
	if(firstIndex!=-1)
	{	
		secondIndex=getSecondChar(str,firstIndex);
	
		//swap elements at firstIndex and secondIndex ..
		temp=str[firstIndex];
		str[firstIndex]=str[secondIndex];
		str[secondIndex]=temp ;
		printf("%s\n",str);
		//sort str after the firstIndex ..
		quickSort(str,firstIndex+1,strlen(str)-1);
		printf("%s\n",str);
	//	printf("%c  %c  %d  %d\n",str[firstIndex],str[secondIndex],firstIndex,secondIndex);
		//call on permute on newly sorted Strig ..
		permute(str);
	}
}
void MD_PZone::effectSlice(bool bIn)
{
    if (bIn)
    {
        switch(_fsmState)
        {
        case INITIALISE:
        case GET_FIRST_CHAR:
            PRINT_STATE("I SLICE");

            if ((_charCols = getFirstChar()) == 0)
            {
                _fsmState = END;
                break;
            }
            zoneClear();
            _countCols = 0;
            _nextPos = ZONE_START_COL(_zoneStart);
            _endPos = _limitLeft;

            _fsmState = PUT_CHAR;
            break;

        case GET_NEXT_CHAR:	// Load the next character from the font table
            PRINT_STATE("I SLICE");
            // have we reached the end of the characters string?
            if ((_charCols = getNextChar()) == 0)
            {
                _fsmState = PAUSE;
                break;
            }
            _countCols = 0;
            _fsmState = PUT_CHAR;
        // !! fall through to next state to start displaying

        case PUT_CHAR:	// display the next part of the character
            PRINT_STATE("I SLICE");
            FSMPRINT(" - Next ", _endPos);
            FSMPRINT(", anim ", _nextPos);

            if (_cBuf[_countCols] == 0)
            {
                _nextPos = _endPos;	// pretend we just animated it!
            }
            else
            {
                // clear the column and animate the next one
                if (_nextPos != _endPos) _MX->setColumn(_nextPos, EMPTY_BAR);
                _nextPos++;
                _MX->setColumn(_nextPos, DATA_BAR(_cBuf[_countCols]));
            }

            // set up for the next time
            if (_nextPos == _endPos)
            {
                _nextPos = ZONE_START_COL(_zoneStart);
                _countCols++;
                _endPos--;
            }
            if (_countCols == _charCols) _fsmState = GET_NEXT_CHAR;
            break;

        default:
            _fsmState = PAUSE;
        }
    }
    else	// exiting
    {
        switch(_fsmState)
        {
        case PAUSE:
            PRINT_STATE("O SLICE");
            _nextPos = _endPos = _limitLeft;
            _fsmState = PUT_CHAR;
        // fall through

        case GET_FIRST_CHAR:
        case GET_NEXT_CHAR:
        case PUT_CHAR:
            PRINT_STATE("O SLICE");
            FSMPRINT(" - Next ", _endPos);
            FSMPRINT(", anim ", _nextPos);

            while(_MX->getColumn(_nextPos) == EMPTY_BAR && _endPos >= _limitRight)
                _nextPos = _endPos--;	// pretend we just animated it!

            if (_endPos <= _limitRight)
                _fsmState = END;	//reached the end
            else
            {
                // Move the column over to the left and blank out previous position
                if (_nextPos < ZONE_END_COL(_zoneEnd))
                    _MX->setColumn(_nextPos+1, _MX->getColumn(_nextPos));
                _MX->setColumn(_nextPos, EMPTY_BAR);
                _nextPos++;

                // set up for the next time
                if (_nextPos == ZONE_END_COL(_zoneEnd)+1)
                    _nextPos = _endPos--;
            }
            break;

        default:
            _fsmState = END;
        }
    }
}