void Menu() {
    char *input;
    // Add full menu
    printf("=====================================\n");
    //printf("Welcome to TTHN_5C13_ManageProduct.\n");
    //printf("Enter a command in the menu to start.\n");
    //printf("add - Add a product.");
    //printf("display - Show all products");
    //printf("delete - Delete a product.");
    //printf("=====================================\n");

    //while(getchar()!='\n');
    input = ReadLine(100, stdin);
    if (strcmp(input, "add") == 0) {
        free(input);
        AddProduct();
    } else if (strcmp(input, "display") == 0) {
        free(input);
        Display();
    } else if (strcmp(input, "delete") == 0) {
        free(input);
        Delete();
    } else if (strcmp(input, "deletex") == 0) {
        free(input);
        DeleteX();
    } else if (strcmp(input, "deleteall") == 0) {
        free(input);
        DeleteAll();
    } else if (strcmp(input, "search") == 0) {
        free(input);
        Search();
    }

}
void CIFXMetaData::AppendX(IFXMetaDataX* pSource)
{
	IFXString sKey, sEncodedKey, sValue;
	U32 srcCount, srcIndex, srcSize, dstIndex;
	IFXMetaDataAttribute srcType;
	U8* pBuffer;
	IFXRESULT rc;
	BOOL Persistance = true;
	
	IFXCHECKX_RESULT( pSource, IFX_E_NOT_INITIALIZED );
	pSource->GetCountX(srcCount);
	
	for (srcIndex = 0; srcIndex < srcCount; srcIndex++) {
		pSource->GetKeyX(srcIndex, sKey);
		pSource->GetEncodedKeyX(srcIndex, sEncodedKey);
		pSource->GetAttributeX(srcIndex, srcType);

		if (IsKeyExists(sKey)) {
			rc = GetIndex(sKey, dstIndex);
			IFXCHECKX_RESULT( IFXSUCCESS( rc ), IFX_E_NO_METADATA );
			DeleteX(dstIndex);
		}

		if (srcType & IFXMETADATAATTRIBUTE_BINARY) {
			pSource->GetBinarySizeX(srcIndex, srcSize);
			pBuffer = (U8*)new U8[srcSize];
			IFXCHECKX_RESULT( pBuffer, IFX_E_NOT_INITIALIZED );
			pSource->GetBinaryX(srcIndex, pBuffer);
			SetBinaryValueX(sEncodedKey, srcSize, pBuffer);
			delete [] pBuffer;
		} else {
			pSource->GetStringX(srcIndex, sValue);
			SetStringValueX(sEncodedKey, sValue);
		}
		GetIndex(sKey, dstIndex);
		SetAttributeX(dstIndex, srcType);

		pSource->GetPersistenceX(srcIndex, Persistance);
		rc = GetIndex(sKey, dstIndex);
		IFXCHECKX_RESULT(IFXSUCCESS( rc ), IFX_E_NO_METADATA);
		SetPersistenceX(dstIndex, Persistance);
	}
}