# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Copyright (C) 2009-2010 IBM Corporation and Others. All Rights Reserved.
# 
# This is a sample ICU Plugins control file for Windows.
# It's also an example control file for any platform.
#
# This file can be copied to, for example, C:\SOMEDIRECTORY\icuplugins##.txt
#  where ## is the major and minor ICU versions (i.e.  just 96 for version 9.6.3) 
#  and C:\SOMEDIRECTORY is any directory.
# 
# Then, set the variable ICU_PLUGINS to C:\SOMEDIRECTORY
#
# Then, ICU will load the test plugin from either the debug or non-debug	
# plugin DLL (depending on whether ICU is in debug or non-debug state).
#
# To see the results, run the command  "icuinfo -v -L"
#
# The format of this file is pretty simple.
# These lines are comments. 
#
# Non-comment lines have two or three elements in them, and look like this:
#    
#  LIBRARYNAME     ENTRYPOINT     [ CONFIGURATION .. ]
#
# Tabs or spaces separate the three items. 
#
# LIBRARYNAME is the name of a shared library, either a short name if it is on the PATH,
#  or a full pathname.
# 
# ENTRYPOINT is the short (undecorated) symbol name of the plugin's entrypoint.
#  see unicode/icuplug.h for information.
#
# CONFIGURATION is the entire rest of the line. It's passed as-is to the plugin.
#
#
# This sample file tries to load 'myPlugin'. 
# It is in the testplug project. (You will need to rebuild either the debug or release version of this DLL.)
# The configuration string isn't used, but is just an example

## A high level test plugin that does nothing.
testplug.dll	myPlugin	hello=world

## A "bad" plugin that is low level but performs a malloc.
##  Sometimes this is desired, but, note that it may cause
##  later plugins to fail to load.
#testplug.dll	myPluginBad	hello=world

## A "high-level" plugin that does nothing. 
##  It will be loaded after the low level plugins.
#testplug.dll	myPluginHigh

## A "low-level" plugin that does nothing.
##  It will be loaded before the high level plugins.
#testplug.dll	myPluginLow

## A low level plugin that just prints a message when uprv_malloc  and related functions are called
##  Note, it cannot be unloaded. 
#testplug.dll	debugMemoryPlugin
