Quantcast

Redo directories and update .toc file

Adrian L Lange [08-06-09 - 03:42]
Redo directories and update .toc file
- This diff is a mess for sure
Filename
libs/CallbackHandler-1.0.lua
libs/LibSharedMedia-3.0.lua
libs/LibStub.lua
media/font.ttf
pMinimap.lua
pMinimap.toc
pMinimap/font.ttf
pMinimap/pMinimap.lua
pMinimap/pMinimap.toc
pMinimap_Config.lua
pMinimap_Config/pMinimap_Config.lua
pMinimap_Config/pMinimap_Config.toc
diff --git a/libs/CallbackHandler-1.0.lua b/libs/CallbackHandler-1.0.lua
new file mode 100644
index 0000000..ca21919
--- /dev/null
+++ b/libs/CallbackHandler-1.0.lua
@@ -0,0 +1,239 @@
+--[[ $Id: CallbackHandler-1.0.lua 504 2008-02-07 11:04:06Z nevcairiel $ ]]
+local MAJOR, MINOR = "CallbackHandler-1.0", 3
+local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
+
+if not CallbackHandler then return end -- No upgrade needed
+
+local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
+
+local type = type
+local pcall = pcall
+local pairs = pairs
+local assert = assert
+local concat = table.concat
+local loadstring = loadstring
+local next = next
+local select = select
+local type = type
+local xpcall = xpcall
+
+local function errorhandler(err)
+	return geterrorhandler()(err)
+end
+
+local function CreateDispatcher(argCount)
+	local code = [[
+	local next, xpcall, eh = ...
+
+	local method, ARGS
+	local function call() method(ARGS) end
+
+	local function dispatch(handlers, ...)
+		local index
+		index, method = next(handlers)
+		if not method then return end
+		local OLD_ARGS = ARGS
+		ARGS = ...
+		repeat
+			xpcall(call, eh)
+			index, method = next(handlers, index)
+		until not method
+		ARGS = OLD_ARGS
+	end
+
+	return dispatch
+	]]
+
+	local ARGS, OLD_ARGS = {}, {}
+	for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end
+	code = code:gsub("OLD_ARGS", concat(OLD_ARGS, ", ")):gsub("ARGS", concat(ARGS, ", "))
+	return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler)
+end
+
+local Dispatchers = setmetatable({}, {__index=function(self, argCount)
+	local dispatcher = CreateDispatcher(argCount)
+	rawset(self, argCount, dispatcher)
+	return dispatcher
+end})
+
+--------------------------------------------------------------------------
+-- CallbackHandler:New
+--
+--   target            - target object to embed public APIs in
+--   RegisterName      - name of the callback registration API, default "RegisterCallback"
+--   UnregisterName    - name of the callback unregistration API, default "UnregisterCallback"
+--   UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API.
+
+function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName, OnUsed, OnUnused)
+	-- TODO: Remove this after beta has gone out
+	assert(not OnUsed and not OnUnused, "ACE-80: OnUsed/OnUnused are deprecated. Callbacks are now done to registry.OnUsed and registry.OnUnused")
+
+	RegisterName = RegisterName or "RegisterCallback"
+	UnregisterName = UnregisterName or "UnregisterCallback"
+	if UnregisterAllName==nil then	-- false is used to indicate "don't want this method"
+		UnregisterAllName = "UnregisterAllCallbacks"
+	end
+
+	-- we declare all objects and exported APIs inside this closure to quickly gain access
+	-- to e.g. function names, the "target" parameter, etc
+
+
+	-- Create the registry object
+	local events = setmetatable({}, meta)
+	local registry = { recurse=0, events=events }
+
+	-- registry:Fire() - fires the given event/message into the registry
+	function registry:Fire(eventname, ...)
+		if not rawget(events, eventname) or not next(events[eventname]) then return end
+		local oldrecurse = registry.recurse
+		registry.recurse = oldrecurse + 1
+
+		Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...)
+
+		registry.recurse = oldrecurse
+
+		if registry.insertQueue and oldrecurse==0 then
+			-- Something in one of our callbacks wanted to register more callbacks; they got queued
+			for eventname,callbacks in pairs(registry.insertQueue) do
+				local first = not rawget(events, eventname) or not next(events[eventname])	-- test for empty before. not test for one member after. that one member may have been overwritten.
+				for self,func in pairs(callbacks) do
+					events[eventname][self] = func
+					-- fire OnUsed callback?
+					if first and registry.OnUsed then
+						registry.OnUsed(registry, target, eventname)
+						first = nil
+					end
+				end
+			end
+			registry.insertQueue = nil
+		end
+	end
+
+	-- Registration of a callback, handles:
+	--   self["method"], leads to self["method"](self, ...)
+	--   self with function ref, leads to functionref(...)
+	--   "addonId" (instead of self) with function ref, leads to functionref(...)
+	-- all with an optional arg, which, if present, gets passed as first argument (after self if present)
+	target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]])
+		if type(eventname) ~= "string" then
+			error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2)
+		end
+
+		method = method or eventname
+
+		local first = not rawget(events, eventname) or not next(events[eventname])	-- test for empty before. not test for one member after. that one member may have been overwritten.
+
+		if type(method) ~= "string" and type(method) ~= "function" then
+			error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2)
+		end
+
+		local regfunc
+
+		if type(method) == "string" then
+			-- self["method"] calling style
+			if type(self) ~= "table" then
+				error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2)
+			elseif self==target then
+				error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2)
+			elseif type(self[method]) ~= "function" then
+				error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2)
+			end
+
+			if select("#",...)>=1 then	-- this is not the same as testing for arg==nil!
+				local arg=select(1,...)
+				regfunc = function(...) self[method](self,arg,...) end
+			else
+				regfunc = function(...) self[method](self,...) end
+			end
+		else
+			-- function ref with self=object or self="addonId"
+			if type(self)~="table" and type(self)~="string" then
+				error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string expected.", 2)
+			end
+
+			if select("#",...)>=1 then	-- this is not the same as testing for arg==nil!
+				local arg=select(1,...)
+				regfunc = function(...) method(arg,...) end
+			else
+				regfunc = method
+			end
+		end
+
+
+		if events[eventname][self] or registry.recurse<1 then
+		-- if registry.recurse<1 then
+			-- we're overwriting an existing entry, or not currently recursing. just set it.
+			events[eventname][self] = regfunc
+			-- fire OnUsed callback?
+			if registry.OnUsed and first then
+				registry.OnUsed(registry, target, eventname)
+			end
+		else
+			-- we're currently processing a callback in this registry, so delay the registration of this new entry!
+			-- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency
+			registry.insertQueue = registry.insertQueue or setmetatable({},meta)
+			registry.insertQueue[eventname][self] = regfunc
+		end
+	end
+
+	-- Unregister a callback
+	target[UnregisterName] = function(self, eventname)
+		if not self or self==target then
+			error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2)
+		end
+		if type(eventname) ~= "string" then
+			error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2)
+		end
+		if rawget(events, eventname) and events[eventname][self] then
+			events[eventname][self] = nil
+			-- Fire OnUnused callback?
+			if registry.OnUnused and not next(events[eventname]) then
+				registry.OnUnused(registry, target, eventname)
+			end
+		end
+		if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then
+			registry.insertQueue[eventname][self] = nil
+		end
+	end
+
+	-- OPTIONAL: Unregister all callbacks for given selfs/addonIds
+	if UnregisterAllName then
+		target[UnregisterAllName] = function(...)
+			if select("#",...)<1 then
+				error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2)
+			end
+			if select("#",...)==1 and ...==target then
+				error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2)
+			end
+
+
+			for i=1,select("#",...) do
+				local self = select(i,...)
+				if registry.insertQueue then
+					for eventname, callbacks in pairs(registry.insertQueue) do
+						if callbacks[self] then
+							callbacks[self] = nil
+						end
+					end
+				end
+				for eventname, callbacks in pairs(events) do
+					if callbacks[self] then
+						callbacks[self] = nil
+						-- Fire OnUnused callback?
+						if registry.OnUnused and not next(callbacks) then
+							registry.OnUnused(registry, target, eventname)
+						end
+					end
+				end
+			end
+		end
+	end
+
+	return registry
+end
+
+
+-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it
+-- try to upgrade old implicit embeds since the system is selfcontained and
+-- relies on closures to work.
+
diff --git a/libs/LibSharedMedia-3.0.lua b/libs/LibSharedMedia-3.0.lua
new file mode 100644
index 0000000..ef062a0
--- /dev/null
+++ b/libs/LibSharedMedia-3.0.lua
@@ -0,0 +1,230 @@
+--[[
+Name: LibSharedMedia-3.0
+Revision: $Revision: 58 $
+Author: Elkano (elkano@gmx.de)
+Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
+Website: http://www.wowace.com/projects/libsharedmedia-3-0/
+Description: Shared handling of media data (fonts, sounds, textures, ...) between addons.
+Dependencies: LibStub, CallbackHandler-1.0
+License: LGPL v2.1
+]]
+
+local MAJOR, MINOR = "LibSharedMedia-3.0", 90000 + tonumber(("$Revision: 58 $"):match("(%d+)"))
+local lib = LibStub:NewLibrary(MAJOR, MINOR)
+
+if not lib then return end
+
+local _G = getfenv(0)
+
+local pairs		= _G.pairs
+local type		= _G.type
+
+local band			= _G.bit.band
+
+local table_insert	= _G.table.insert
+local table_sort	= _G.table.sort
+
+local locale = GetLocale()
+local locale_is_western
+local LOCALE_MASK = 0
+lib.LOCALE_BIT_koKR		= 1
+lib.LOCALE_BIT_ruRU		= 2
+lib.LOCALE_BIT_zhCN		= 4
+lib.LOCALE_BIT_zhTW		= 8
+lib.LOCALE_BIT_western	= 128
+
+local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0")
+
+lib.callbacks		= lib.callbacks			or CallbackHandler:New(lib)
+
+lib.DefaultMedia	= lib.DefaultMedia		or {}
+lib.MediaList		= lib.MediaList			or {}
+lib.MediaTable		= lib.MediaTable		or {}
+lib.MediaType		= lib.MediaType			or {}
+lib.OverrideMedia	= lib.OverrideMedia		or {}
+
+local defaultMedia = lib.DefaultMedia
+local mediaList = lib.MediaList
+local mediaTable = lib.MediaTable
+local overrideMedia = lib.OverrideMedia
+
+
+-- create mediatype constants
+lib.MediaType.BACKGROUND	= "background"			-- background textures
+lib.MediaType.BORDER		= "border"				-- border textures
+lib.MediaType.FONT			= "font"				-- fonts
+lib.MediaType.STATUSBAR		= "statusbar"			-- statusbar textures
+lib.MediaType.SOUND			= "sound"				-- sound files
+
+-- populate lib with default Blizzard data
+-- BACKGROUND
+if not lib.MediaTable.background then lib.MediaTable.background = {} end
+lib.MediaTable.background["Blizzard Dialog Background"]		= [[Interface\DialogFrame\UI-DialogBox-Background]]
+lib.MediaTable.background["Blizzard Low Health"]			= [[Interface\FullScreenTextures\LowHealth]]
+lib.MediaTable.background["Blizzard Out of Control"]		= [[Interface\FullScreenTextures\OutOfControl]]
+lib.MediaTable.background["Blizzard Parchment"]				= [[Interface\AchievementFrame\UI-Achievement-Parchment-Horizontal]]
+lib.MediaTable.background["Blizzard Parchment 2"]			= [[Interface\AchievementFrame\UI-Achievement-Parchment]]
+lib.MediaTable.background["Blizzard Tabard Background"]		= [[Interface\TabardFrame\TabardFrameBackground]]
+lib.MediaTable.background["Blizzard Tooltip"]				= [[Interface\Tooltips\UI-Tooltip-Background]]
+lib.MediaTable.background["Solid"]							= [[Interface\Buttons\WHITE8X8]]
+
+-- BORDER
+if not lib.MediaTable.border then lib.MediaTable.border = {} end
+lib.MediaTable.border["None"]								= [[Interface\None]]
+lib.MediaTable.border["Blizzard Achievement Wood"]			= [[Interface\AchievementFrame\UI-Achievement-WoodBorder]]
+lib.MediaTable.border["Blizzard Chat Bubble"]				= [[Interface\Tooltips\ChatBubble-Backdrop]]
+lib.MediaTable.border["Blizzard Dialog"]					= [[Interface\DialogFrame\UI-DialogBox-Border]]
+lib.MediaTable.border["Blizzard Dialog Gold"]				= [[Interface\DialogFrame\UI-DialogBox-Gold-Border]]
+lib.MediaTable.border["Blizzard Party"]						= [[Interface\CHARACTERFRAME\UI-Party-Border]]
+lib.MediaTable.border["Blizzard Tooltip"]					= [[Interface\Tooltips\UI-Tooltip-Border]]
+
+-- FONT
+if not lib.MediaTable.font then lib.MediaTable.font = {} end
+local SML_MT_font = lib.MediaTable.font
+if locale == "koKR" then
+	LOCALE_MASK = lib.LOCALE_BIT_koKR
+--
+	SML_MT_font["굵은 글꼴"]		= [[Fonts\2002B.TTF]]
+	SML_MT_font["기본 글꼴"]		= [[Fonts\2002.TTF]]
+	SML_MT_font["데미지 글꼴"]		= [[Fonts\K_Damage.TTF]]
+	SML_MT_font["퀘스트 글꼴"]		= [[Fonts\K_Pagetext.TTF]]
+--
+	lib.DefaultMedia["font"] = "기본 글꼴" -- someone from koKR please adjust if needed
+--
+elseif locale == "zhCN" then
+	LOCALE_MASK = lib.LOCALE_BIT_zhCN
+--
+	SML_MT_font["伤害数字"]		= [[Fonts\ZYKai_C.ttf]]
+	SML_MT_font["默认"]			= [[Fonts\ZYKai_T.ttf]]
+	SML_MT_font["聊天"]			= [[Fonts\ZYHei.ttf]]
+--
+	lib.DefaultMedia["font"] = "默认" -- someone from zhCN please adjust if needed
+--
+elseif locale == "zhTW" then
+	LOCALE_MASK = lib.LOCALE_BIT_zhTW
+--
+	SML_MT_font["提示訊息"]		= [[Fonts\bHEI00M.ttf]]
+	SML_MT_font["聊天"]			= [[Fonts\bHEI01B.ttf]]
+	SML_MT_font["傷害數字"]		= [[Fonts\bKAI00M.ttf]]
+	SML_MT_font["預設"]			= [[Fonts\bLEI00D.ttf]]
+--
+	lib.DefaultMedia["font"] = "預設" -- someone from zhTW please adjust if needed
+
+elseif locale == "ruRU" then
+	LOCALE_MASK = lib.LOCALE_BIT_ruRU
+--
+	SML_MT_font["Arial Narrow"]			= [[Fonts\ARIALN.TTF]]
+	SML_MT_font["Friz Quadrata TT"]		= [[Fonts\FRIZQT__.TTF]]
+	SML_MT_font["Morpheus"]				= [[Fonts\MORPHEUS.TTF]]
+	SML_MT_font["Nimrod MT"]			= [[Fonts\NIM_____.ttf]]
+	SML_MT_font["Skurri"]				= [[Fonts\SKURRI.TTF]]
+--
+	lib.DefaultMedia.font = "Friz Quadrata TT"
+--
+else
+	LOCALE_MASK = lib.LOCALE_BIT_western
+	locale_is_western = true
+--
+	SML_MT_font["Arial Narrow"]			= [[Fonts\ARIALN.TTF]]
+	SML_MT_font["Friz Quadrata TT"]		= [[Fonts\FRIZQT__.TTF]]
+	SML_MT_font["Morpheus"]				= [[Fonts\MORPHEUS.TTF]]
+	SML_MT_font["Skurri"]				= [[Fonts\SKURRI.TTF]]
+--
+	lib.DefaultMedia.font = "Friz Quadrata TT"
+--
+end
+
+-- STATUSBAR
+if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end
+lib.MediaTable.statusbar["Blizzard"]						= [[Interface\TargetingFrame\UI-StatusBar]]
+lib.DefaultMedia.statusbar = "Blizzard"
+
+-- SOUND
+if not lib.MediaTable.sound then lib.MediaTable.sound = {} end
+lib.MediaTable.sound["None"]								= [[Interface\Quiet.mp3]]	-- Relies on the fact that PlaySound[File] doesn't error on non-existing input.
+lib.DefaultMedia.sound = "None"
+
+local function rebuildMediaList(mediatype)
+	local mtable = mediaTable[mediatype]
+	if not mtable then return end
+	if not mediaList[mediatype] then mediaList[mediatype] = {} end
+	local mlist = mediaList[mediatype]
+	-- list can only get larger, so simply overwrite it
+	local i = 0
+	for k in pairs(mtable) do
+		i = i + 1
+		mlist[i] = k
+	end
+	table_sort(mlist)
+end
+
+function lib:Register(mediatype, key, data, langmask)
+	if type(mediatype) ~= "string" then
+		error(MAJOR..":Register(mediatype, key, data, langmask) - mediatype must be string, got "..type(mediatype))
+	end
+	if type(key) ~= "string" then
+		error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key))
+	end
+	if mediatype == lib.MediaType.FONT  and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end
+	mediatype = mediatype:lower()
+	if not mediaTable[mediatype] then mediaTable[mediatype] = {} end
+	local mtable = mediaTable[mediatype]
+	if mtable[key] then return false end
+
+	mtable[key] = data
+	rebuildMediaList(mediatype)
+	self.callbacks:Fire("LibSharedMedia_Registered", mediatype, key)
+	return true
+end
+
+function lib:Fetch(mediatype, key, noDefault)
+	local mtt = mediaTable[mediatype]
+	local overridekey = overrideMedia[mediatype]
+	local result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil
+
+	return result
+end
+
+function lib:IsValid(mediatype, key)
+	return mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false
+end
+
+function lib:HashTable(mediatype)
+	return mediaTable[mediatype]
+end
+
+function lib:List(mediatype)
+	if not mediaTable[mediatype] then
+		return nil
+	end
+	if not mediaList[mediatype] then
+		rebuildMediaList(mediatype)
+	end
+	return mediaList[mediatype]
+end
+
+function lib:GetGlobal(mediatype)
+	return overrideMedia[mediatype]
+end
+
+function lib:SetGlobal(mediatype, key)
+	if not mediaTable[mediatype] then
+		return false
+	end
+	overrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil
+	self.callbacks:Fire("LibSharedMedia_SetGlobal", mediatype, overrideMedia[mediatype])
+	return true
+end
+
+function lib:GetDefault(mediatype)
+	return defaultMedia[mediatype]
+end
+
+function lib:SetDefault(mediatype, key)
+	if mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then
+		defaultMedia[mediatype] = key
+		return true
+	else
+		return false
+	end
+end
diff --git a/libs/LibStub.lua b/libs/LibStub.lua
new file mode 100644
index 0000000..cfc97de
--- /dev/null
+++ b/libs/LibStub.lua
@@ -0,0 +1,30 @@
+-- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/wiki/LibStub for more info
+-- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
+local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2  -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
+local LibStub = _G[LIBSTUB_MAJOR]
+
+if not LibStub or LibStub.minor < LIBSTUB_MINOR then
+	LibStub = LibStub or {libs = {}, minors = {} }
+	_G[LIBSTUB_MAJOR] = LibStub
+	LibStub.minor = LIBSTUB_MINOR
+
+	function LibStub:NewLibrary(major, minor)
+		assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
+		minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
+
+		local oldminor = self.minors[major]
+		if oldminor and oldminor >= minor then return nil end
+		self.minors[major], self.libs[major] = minor, self.libs[major] or {}
+		return self.libs[major], oldminor
+	end
+
+	function LibStub:GetLibrary(major, silent)
+		if not self.libs[major] and not silent then
+			error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
+		end
+		return self.libs[major], self.minors[major]
+	end
+
+	function LibStub:IterateLibraries() return pairs(self.libs) end
+	setmetatable(LibStub, { __call = LibStub.GetLibrary })
+end
diff --git a/media/font.ttf b/media/font.ttf
new file mode 100644
index 0000000..04ce123
Binary files /dev/null and b/media/font.ttf differ
diff --git a/pMinimap.lua b/pMinimap.lua
new file mode 100644
index 0000000..f359a98
--- /dev/null
+++ b/pMinimap.lua
@@ -0,0 +1,306 @@
+--[[
+
+ Copyright (c) 2009, Adrian L Lange
+ All rights reserved.
+
+ You're allowed to use this addon, free of monetary charge,
+ but you are not allowed to modify, alter, or redistribute
+ this addon without express, written permission of the author.
+
+--]]
+
+pMinimap = CreateFrame('Frame', 'pMinimap', UIParent)
+pMinimap:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end)
+pMinimap:RegisterEvent('ADDON_LOADED')
+
+local LSM = LibStub('LibSharedMedia-3.0')
+
+local onUpdate, onClickClock, onClickCoord, onMouseWheel
+local defaults = {
+	coords = false,
+	coordsDecimals = 0,
+	clock = true,
+	dura = true,
+	mail = true,
+	subzone = false,
+	unlocked = false,
+	scale = 0.9,
+	offset = 1,
+	level = 2,
+	strata = 'BACKGROUND',
+	smfont = 'Visitor TT1',
+	fontsize = 13,
+	fontflag = 'OUTLINE',
+	colors = {0, 0, 0, 1},
+	zone = false,
+	zonePoint = 'TOP',
+	zoneOffset = 8,
+}
+
+do
+	local total = 0.25
+	function onUpdate(self, elapsed)
+		if(total) then
+			total = total - elapsed
+			if(total <= 0) then
+				total = 0.25
+
+				local x, y = GetPlayerMapPosition('player')
+				if(x ~= 0 and y ~= 0) then
+					self.Text:SetFormattedText('%.'..pMinimapDB.coordsDecimals..'f,%.'..pMinimapDB.coordsDecimals..'f', x * 100, y * 100)
+				else
+					self.Text:SetText()
+				end
+			end
+		end
+	end
+
+	function onClickClock(self, button)
+		if(button == 'RightButton') then
+			ToggleCalendar()
+		else
+			if(self.alarmFiring) then
+				PlaySound('igMainMenuQuit')
+				TimeManager_TurnOffAlarm()
+			else
+				ToggleTimeManager()
+			end
+		end
+	end
+
+	function onClickCoord(self, button)
+		if(button == 'RightButton') then
+			ToggleBattlefieldMinimap()
+		else
+			ToggleFrame(WorldMapFrame)
+		end
+	end
+
+	function onMouseWheel(self, dir)
+		if(dir > 0) then
+			MinimapZoomIn:Click()
+		else
+			MinimapZoomOut:Click()
+		end
+	end
+end
+
+
+local function slashHandler(str)
+	if(str == 'reset') then
+		pMinimapDB = {}
+		print('|cffff8080pMinimap:|r Savedvariables is now reset. You should reload/relog to affect changes.')
+	elseif(str == 'refresh') then
+		Minimap:SetMaskTexture([=[Interface\ChatFrame\ChatFrameBackground]=])
+		print('|cffff8080pMinimap:|r Minimap mask is now refreshed.')
+	else
+		if(not IsAddOnLoaded('pMinimap_Config')) then
+			LoadAddOn('pMinimap_Config')
+		end
+		InterfaceOptionsFrame_OpenToCategory('pMinimap')
+	end
+end
+
+local function optionsPanel(self)
+	if(not IsAddOnLoaded('pMinimap_Config')) then
+		LoadAddOn('pMinimap_Config')
+	end
+	self:SetScript('OnShow', nil)
+
+	InterfaceOptionsDisplayPanelShowClock:Disable()
+	InterfaceOptionsDisplayPanelShowClock:Hide()
+end
+
+local function Initialize(self)
+	Minimap:EnableMouseWheel()
+	Minimap:SetScript('OnMouseWheel', onMouseWheel)
+	MinimapZoomIn:Hide()
+	MinimapZoomOut:Hide()
+
+	MiniMapTrackingBackground:Hide()
+	MiniMapTrackingButton:SetHighlightTexture('')
+	MiniMapTrackingButtonBorder:SetTexture('')
+	MiniMapTrackingIcon:SetTexCoord(0.065, 0.935, 0.065, 0.935)
+	MiniMapTrackingIconOverlay:SetTexture('')
+	MiniMapTracking:SetParent(Minimap)
+	MiniMapTracking:ClearAllPoints()
+	MiniMapTracking:SetPoint('TOPLEFT', -2, 2)
+
+	BattlegroundShine:Hide()
+	MiniMapBattlefieldBorder:SetTexture('')
+	MiniMapBattlefieldFrame:SetParent(Minimap)
+	MiniMapBattlefieldFrame:ClearAllPoints()
+	MiniMapBattlefieldFrame:SetPoint('TOPRIGHT', -2, -2)
+
+	MiniMapMailBorder:SetTexture('')
+	MiniMapMailFrame:SetParent(Minimap)
+	MiniMapMailFrame:ClearAllPoints()
+	MiniMapMailFrame:SetPoint('TOP', 0, -4)
+	MiniMapMailFrame:SetHeight(8)
+
+	MiniMapMailText = MiniMapMailFrame:CreateFontString(nil, 'OVERLAY')
+	MiniMapMailText:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
+	MiniMapMailText:SetPoint('BOTTOM', 0, 2)
+	MiniMapMailText:SetText('New Mail!')
+	MiniMapMailText:SetTextColor(1, 1, 1)
+
+	MinimapZoneTextButton:SetParent(Minimap)
+	MinimapZoneTextButton:ClearAllPoints()
+	MinimapZoneTextButton:SetPoint(self.db.zonePoint == 'BOTTOM' and 'TOP' or 'BOTTOM', Minimap, self.db.zonePoint, 0, self.db.zoneOffset)
+	MinimapZoneTextButton:SetWidth(Minimap:GetWidth() * 1.5)
+
+	MinimapZoneText:ClearAllPoints()
+	MinimapZoneText:SetAllPoints(MinimapZoneTextButton)
+	MinimapZoneText:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
+	MinimapZoneText:SetShadowOffset(0, 0)
+
+	MinimapBorder:SetTexture('')
+	MinimapBorderTop:Hide()
+	MinimapToggleButton:Hide()
+
+	GameTimeFrame:Hide()
+	MiniMapWorldMapButton:Hide()
+	MiniMapMeetingStoneFrame:SetAlpha(0)
+	MiniMapVoiceChatFrame:Hide()
+	MiniMapVoiceChatFrame.Show = MiniMapVoiceChatFrame.Hide
+	MinimapNorthTag:SetAlpha(0)
+
+	Minimap:SetScale(self.db.scale)
+	Minimap:SetFrameLevel(self.db.level)
+	Minimap:SetFrameStrata(self.db.strata)
+	Minimap:SetMaskTexture([=[Interface\ChatFrame\ChatFrameBackground]=])
+	Minimap:SetBackdrop({bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], insets = {top = - self.db.offset, left = - self.db.offset, bottom = - self.db.offset, right = - self.db.offset}})
+	Minimap:SetBackdropColor(unpack(self.db.colors))
+
+	MinimapCluster:EnableMouse(false)
+	Minimap:SetMovable(true)
+	Minimap:RegisterForDrag('LeftButton')
+	Minimap:SetScript('OnDragStop', function() if(pMinimapDB.unlocked) then Minimap:StopMovingOrSizing() end end)
+	Minimap:SetScript('OnDragStart', function() if(pMinimapDB.unlocked) then Minimap:StartMoving() end end)
+
+	if(not self.db.zone) then
+		MinimapZoneTextButton:Hide()
+	end
+
+	if(self.db.dura) then
+		DurabilityFrame:SetAlpha(0)
+
+		self:RegisterEvent('UPDATE_INVENTORY_ALERTS')
+		self.UPDATE_INVENTORY_ALERTS()
+	end
+
+	if(self.db.coords) then
+		self:CreateCoords()
+	end
+
+	if(self.db.clock) then
+		self:CreateClock()
+	else
+		TimeManagerClockButton:Hide()
+	end
+
+	if(self.db.mail) then
+		MiniMapMailIcon:Hide()
+	else
+		MiniMapMailText:Hide()
+	end
+end
+
+
+function pMinimap:CreateClock()
+	TimeManager_LoadUI()
+
+	TimeManagerClockButton:SetWidth(40)
+	TimeManagerClockButton:SetHeight(14)
+	TimeManagerClockButton:ClearAllPoints()
+	TimeManagerClockButton:SetPoint(self.db.coords and 'BOTTOMLEFT' or 'BOTTOM', Minimap)
+	TimeManagerClockButton:GetRegions():Hide()
+	TimeManagerClockButton:Show()
+	TimeManagerClockButton:SetScript('OnClick', onClickClock)
+
+	TimeManagerClockTicker:SetPoint('CENTER', TimeManagerClockButton)
+	TimeManagerClockTicker:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
+	TimeManagerClockTicker:SetShadowOffset(0, 0)
+
+	TimeManagerAlarmFiredTexture.Show = function() TimeManagerClockTicker:SetTextColor(1, 0, 0) end
+	TimeManagerAlarmFiredTexture.Hide = function() TimeManagerClockTicker:SetTextColor(1, 1, 1) end
+
+	self:RegisterEvent('CALENDAR_UPDATE_PENDING_INVITES')
+	self.CALENDAR_UPDATE_PENDING_INVITES()
+
+	self.RunClock = true
+end
+
+function pMinimap:CreateCoords()
+	self.Coord = CreateFrame('Button', nil, Minimap)
+	self.Coord:SetPoint(self.db.clock and 'BOTTOMRIGHT' or 'BOTTOM', Minimap)
+	self.Coord:SetWidth(40)
+	self.Coord:SetHeight(14)
+	self.Coord:RegisterForClicks('AnyUp')
+
+	self.Coord.Text = self.Coord:CreateFontString(nil, 'OVERLAY')
+	self.Coord.Text:SetPoint('BOTTOMRIGHT', self.Coord)
+	self.Coord.Text:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
+	self.Coord.Text:SetTextColor(1, 1, 1)
+
+	self.Coord:SetScript('OnClick', onClickCoord)
+	self.Coord:SetScript('OnUpdate', onUpdate)
+
+	self:RegisterEvent('ZONE_CHANGED_NEW_AREA')
+end
+
+
+function pMinimap:ADDON_LOADED(event, addon)
+	if(addon ~= 'pMinimap') then return end
+
+	CreateFrame('Frame', nil, InterfaceOptionsFrame):SetScript('OnShow', optionsPanel)
+	LSM:Register('font', 'Visitor TT1', [=[Interface\AddOns\pMinimap\font.ttf]=])
+
+	SLASH_PMINIMAP1 = '/pmm'
+	SLASH_PMINIMAP2 = '/pminimap'
+	SlashCmdList.PMINIMAP = slashHandler
+
+	pMinimapDB = setmetatable(pMinimapDB or {}, {__index = defaults})
+	pMinimapDB.unlocked = false
+
+	self.db = pMinimapDB
+	self:UnregisterEvent(event)
+
+	InterfaceOptionsDisplayPanelShowClock.setFunc('1')
+	InterfaceOptionsDisplayPanelShowClock.setFunc = function() end
+
+	Initialize(self)
+end
+
+function pMinimap:CALENDAR_UPDATE_PENDING_INVITES()
+	if(CalendarGetNumPendingInvites() ~= 0) then
+		TimeManagerClockTicker:SetTextColor(0, 1, 0)
+	else
+		TimeManagerClockTicker:SetTextColor(1, 1, 1)
+	end
+end
+
+function pMinimap:ZONE_CHANGED_NEW_AREA()
+	SetMapToCurrentZone()
+end
+
+function pMinimap:UPDATE_INVENTORY_ALERTS()
+	local highstatus = 0
+	for i in next, INVENTORY_ALERT_STATUS_SLOTS do
+		local status = GetInventoryAlertStatus(i)
+		if(status > highstatus) then
+			highstatus = status
+		end
+	end
+
+	local color = INVENTORY_ALERT_COLORS[highstatus]
+	if(color) then
+		Minimap:SetBackdropColor(color.r, color.g, color.b)
+	else
+		Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
+	end
+end
+
+
+-- http://www.wowwiki.com/GetMinimapShape
+function GetMinimapShape() return 'SQUARE' end
\ No newline at end of file
diff --git a/pMinimap.toc b/pMinimap.toc
new file mode 100644
index 0000000..637a070
--- /dev/null
+++ b/pMinimap.toc
@@ -0,0 +1,15 @@
+## Interface: 30100
+## Author: p3lim
+## Version: Alpha
+## Title: |cffff6000p|rMinimap
+## Notes: Yet another square minimap addon
+## SavedVariablesPerCharacter: pMinimapDB
+## OptionalDeps: LibSharedMedia-3.0, SharedMedia
+
+libs\LibStub.lua
+libs\CallbackHandler-1.0.lua
+libs\LibSharedMedia-3.0.lua
+
+pMinimap.lua
+
+pMinimap_Config.lua
\ No newline at end of file
diff --git a/pMinimap/font.ttf b/pMinimap/font.ttf
deleted file mode 100644
index 04ce123..0000000
Binary files a/pMinimap/font.ttf and /dev/null differ
diff --git a/pMinimap/pMinimap.lua b/pMinimap/pMinimap.lua
deleted file mode 100644
index f359a98..0000000
--- a/pMinimap/pMinimap.lua
+++ /dev/null
@@ -1,306 +0,0 @@
---[[
-
- Copyright (c) 2009, Adrian L Lange
- All rights reserved.
-
- You're allowed to use this addon, free of monetary charge,
- but you are not allowed to modify, alter, or redistribute
- this addon without express, written permission of the author.
-
---]]
-
-pMinimap = CreateFrame('Frame', 'pMinimap', UIParent)
-pMinimap:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end)
-pMinimap:RegisterEvent('ADDON_LOADED')
-
-local LSM = LibStub('LibSharedMedia-3.0')
-
-local onUpdate, onClickClock, onClickCoord, onMouseWheel
-local defaults = {
-	coords = false,
-	coordsDecimals = 0,
-	clock = true,
-	dura = true,
-	mail = true,
-	subzone = false,
-	unlocked = false,
-	scale = 0.9,
-	offset = 1,
-	level = 2,
-	strata = 'BACKGROUND',
-	smfont = 'Visitor TT1',
-	fontsize = 13,
-	fontflag = 'OUTLINE',
-	colors = {0, 0, 0, 1},
-	zone = false,
-	zonePoint = 'TOP',
-	zoneOffset = 8,
-}
-
-do
-	local total = 0.25
-	function onUpdate(self, elapsed)
-		if(total) then
-			total = total - elapsed
-			if(total <= 0) then
-				total = 0.25
-
-				local x, y = GetPlayerMapPosition('player')
-				if(x ~= 0 and y ~= 0) then
-					self.Text:SetFormattedText('%.'..pMinimapDB.coordsDecimals..'f,%.'..pMinimapDB.coordsDecimals..'f', x * 100, y * 100)
-				else
-					self.Text:SetText()
-				end
-			end
-		end
-	end
-
-	function onClickClock(self, button)
-		if(button == 'RightButton') then
-			ToggleCalendar()
-		else
-			if(self.alarmFiring) then
-				PlaySound('igMainMenuQuit')
-				TimeManager_TurnOffAlarm()
-			else
-				ToggleTimeManager()
-			end
-		end
-	end
-
-	function onClickCoord(self, button)
-		if(button == 'RightButton') then
-			ToggleBattlefieldMinimap()
-		else
-			ToggleFrame(WorldMapFrame)
-		end
-	end
-
-	function onMouseWheel(self, dir)
-		if(dir > 0) then
-			MinimapZoomIn:Click()
-		else
-			MinimapZoomOut:Click()
-		end
-	end
-end
-
-
-local function slashHandler(str)
-	if(str == 'reset') then
-		pMinimapDB = {}
-		print('|cffff8080pMinimap:|r Savedvariables is now reset. You should reload/relog to affect changes.')
-	elseif(str == 'refresh') then
-		Minimap:SetMaskTexture([=[Interface\ChatFrame\ChatFrameBackground]=])
-		print('|cffff8080pMinimap:|r Minimap mask is now refreshed.')
-	else
-		if(not IsAddOnLoaded('pMinimap_Config')) then
-			LoadAddOn('pMinimap_Config')
-		end
-		InterfaceOptionsFrame_OpenToCategory('pMinimap')
-	end
-end
-
-local function optionsPanel(self)
-	if(not IsAddOnLoaded('pMinimap_Config')) then
-		LoadAddOn('pMinimap_Config')
-	end
-	self:SetScript('OnShow', nil)
-
-	InterfaceOptionsDisplayPanelShowClock:Disable()
-	InterfaceOptionsDisplayPanelShowClock:Hide()
-end
-
-local function Initialize(self)
-	Minimap:EnableMouseWheel()
-	Minimap:SetScript('OnMouseWheel', onMouseWheel)
-	MinimapZoomIn:Hide()
-	MinimapZoomOut:Hide()
-
-	MiniMapTrackingBackground:Hide()
-	MiniMapTrackingButton:SetHighlightTexture('')
-	MiniMapTrackingButtonBorder:SetTexture('')
-	MiniMapTrackingIcon:SetTexCoord(0.065, 0.935, 0.065, 0.935)
-	MiniMapTrackingIconOverlay:SetTexture('')
-	MiniMapTracking:SetParent(Minimap)
-	MiniMapTracking:ClearAllPoints()
-	MiniMapTracking:SetPoint('TOPLEFT', -2, 2)
-
-	BattlegroundShine:Hide()
-	MiniMapBattlefieldBorder:SetTexture('')
-	MiniMapBattlefieldFrame:SetParent(Minimap)
-	MiniMapBattlefieldFrame:ClearAllPoints()
-	MiniMapBattlefieldFrame:SetPoint('TOPRIGHT', -2, -2)
-
-	MiniMapMailBorder:SetTexture('')
-	MiniMapMailFrame:SetParent(Minimap)
-	MiniMapMailFrame:ClearAllPoints()
-	MiniMapMailFrame:SetPoint('TOP', 0, -4)
-	MiniMapMailFrame:SetHeight(8)
-
-	MiniMapMailText = MiniMapMailFrame:CreateFontString(nil, 'OVERLAY')
-	MiniMapMailText:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
-	MiniMapMailText:SetPoint('BOTTOM', 0, 2)
-	MiniMapMailText:SetText('New Mail!')
-	MiniMapMailText:SetTextColor(1, 1, 1)
-
-	MinimapZoneTextButton:SetParent(Minimap)
-	MinimapZoneTextButton:ClearAllPoints()
-	MinimapZoneTextButton:SetPoint(self.db.zonePoint == 'BOTTOM' and 'TOP' or 'BOTTOM', Minimap, self.db.zonePoint, 0, self.db.zoneOffset)
-	MinimapZoneTextButton:SetWidth(Minimap:GetWidth() * 1.5)
-
-	MinimapZoneText:ClearAllPoints()
-	MinimapZoneText:SetAllPoints(MinimapZoneTextButton)
-	MinimapZoneText:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
-	MinimapZoneText:SetShadowOffset(0, 0)
-
-	MinimapBorder:SetTexture('')
-	MinimapBorderTop:Hide()
-	MinimapToggleButton:Hide()
-
-	GameTimeFrame:Hide()
-	MiniMapWorldMapButton:Hide()
-	MiniMapMeetingStoneFrame:SetAlpha(0)
-	MiniMapVoiceChatFrame:Hide()
-	MiniMapVoiceChatFrame.Show = MiniMapVoiceChatFrame.Hide
-	MinimapNorthTag:SetAlpha(0)
-
-	Minimap:SetScale(self.db.scale)
-	Minimap:SetFrameLevel(self.db.level)
-	Minimap:SetFrameStrata(self.db.strata)
-	Minimap:SetMaskTexture([=[Interface\ChatFrame\ChatFrameBackground]=])
-	Minimap:SetBackdrop({bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], insets = {top = - self.db.offset, left = - self.db.offset, bottom = - self.db.offset, right = - self.db.offset}})
-	Minimap:SetBackdropColor(unpack(self.db.colors))
-
-	MinimapCluster:EnableMouse(false)
-	Minimap:SetMovable(true)
-	Minimap:RegisterForDrag('LeftButton')
-	Minimap:SetScript('OnDragStop', function() if(pMinimapDB.unlocked) then Minimap:StopMovingOrSizing() end end)
-	Minimap:SetScript('OnDragStart', function() if(pMinimapDB.unlocked) then Minimap:StartMoving() end end)
-
-	if(not self.db.zone) then
-		MinimapZoneTextButton:Hide()
-	end
-
-	if(self.db.dura) then
-		DurabilityFrame:SetAlpha(0)
-
-		self:RegisterEvent('UPDATE_INVENTORY_ALERTS')
-		self.UPDATE_INVENTORY_ALERTS()
-	end
-
-	if(self.db.coords) then
-		self:CreateCoords()
-	end
-
-	if(self.db.clock) then
-		self:CreateClock()
-	else
-		TimeManagerClockButton:Hide()
-	end
-
-	if(self.db.mail) then
-		MiniMapMailIcon:Hide()
-	else
-		MiniMapMailText:Hide()
-	end
-end
-
-
-function pMinimap:CreateClock()
-	TimeManager_LoadUI()
-
-	TimeManagerClockButton:SetWidth(40)
-	TimeManagerClockButton:SetHeight(14)
-	TimeManagerClockButton:ClearAllPoints()
-	TimeManagerClockButton:SetPoint(self.db.coords and 'BOTTOMLEFT' or 'BOTTOM', Minimap)
-	TimeManagerClockButton:GetRegions():Hide()
-	TimeManagerClockButton:Show()
-	TimeManagerClockButton:SetScript('OnClick', onClickClock)
-
-	TimeManagerClockTicker:SetPoint('CENTER', TimeManagerClockButton)
-	TimeManagerClockTicker:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
-	TimeManagerClockTicker:SetShadowOffset(0, 0)
-
-	TimeManagerAlarmFiredTexture.Show = function() TimeManagerClockTicker:SetTextColor(1, 0, 0) end
-	TimeManagerAlarmFiredTexture.Hide = function() TimeManagerClockTicker:SetTextColor(1, 1, 1) end
-
-	self:RegisterEvent('CALENDAR_UPDATE_PENDING_INVITES')
-	self.CALENDAR_UPDATE_PENDING_INVITES()
-
-	self.RunClock = true
-end
-
-function pMinimap:CreateCoords()
-	self.Coord = CreateFrame('Button', nil, Minimap)
-	self.Coord:SetPoint(self.db.clock and 'BOTTOMRIGHT' or 'BOTTOM', Minimap)
-	self.Coord:SetWidth(40)
-	self.Coord:SetHeight(14)
-	self.Coord:RegisterForClicks('AnyUp')
-
-	self.Coord.Text = self.Coord:CreateFontString(nil, 'OVERLAY')
-	self.Coord.Text:SetPoint('BOTTOMRIGHT', self.Coord)
-	self.Coord.Text:SetFont(LSM:Fetch('font', self.db.smfont), self.db.fontsize, self.db.fontflag)
-	self.Coord.Text:SetTextColor(1, 1, 1)
-
-	self.Coord:SetScript('OnClick', onClickCoord)
-	self.Coord:SetScript('OnUpdate', onUpdate)
-
-	self:RegisterEvent('ZONE_CHANGED_NEW_AREA')
-end
-
-
-function pMinimap:ADDON_LOADED(event, addon)
-	if(addon ~= 'pMinimap') then return end
-
-	CreateFrame('Frame', nil, InterfaceOptionsFrame):SetScript('OnShow', optionsPanel)
-	LSM:Register('font', 'Visitor TT1', [=[Interface\AddOns\pMinimap\font.ttf]=])
-
-	SLASH_PMINIMAP1 = '/pmm'
-	SLASH_PMINIMAP2 = '/pminimap'
-	SlashCmdList.PMINIMAP = slashHandler
-
-	pMinimapDB = setmetatable(pMinimapDB or {}, {__index = defaults})
-	pMinimapDB.unlocked = false
-
-	self.db = pMinimapDB
-	self:UnregisterEvent(event)
-
-	InterfaceOptionsDisplayPanelShowClock.setFunc('1')
-	InterfaceOptionsDisplayPanelShowClock.setFunc = function() end
-
-	Initialize(self)
-end
-
-function pMinimap:CALENDAR_UPDATE_PENDING_INVITES()
-	if(CalendarGetNumPendingInvites() ~= 0) then
-		TimeManagerClockTicker:SetTextColor(0, 1, 0)
-	else
-		TimeManagerClockTicker:SetTextColor(1, 1, 1)
-	end
-end
-
-function pMinimap:ZONE_CHANGED_NEW_AREA()
-	SetMapToCurrentZone()
-end
-
-function pMinimap:UPDATE_INVENTORY_ALERTS()
-	local highstatus = 0
-	for i in next, INVENTORY_ALERT_STATUS_SLOTS do
-		local status = GetInventoryAlertStatus(i)
-		if(status > highstatus) then
-			highstatus = status
-		end
-	end
-
-	local color = INVENTORY_ALERT_COLORS[highstatus]
-	if(color) then
-		Minimap:SetBackdropColor(color.r, color.g, color.b)
-	else
-		Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
-	end
-end
-
-
--- http://www.wowwiki.com/GetMinimapShape
-function GetMinimapShape() return 'SQUARE' end
\ No newline at end of file
diff --git a/pMinimap/pMinimap.toc b/pMinimap/pMinimap.toc
deleted file mode 100644
index 043d3ae..0000000
--- a/pMinimap/pMinimap.toc
+++ /dev/null
@@ -1,13 +0,0 @@
-## Interface: 30100
-## Author: p3lim
-## Version: 30100.wowi:revision
-## Title: |cffff6000p|rMinimap
-## Notes: Yet another square minimap addon
-## SavedVariablesPerCharacter: pMinimapDB
-## OptionalDeps: Ace3, LibSharedMedia-3.0, SharedMedia
-
-libs\LibStub\LibStub.lua
-libs\CallbackHandler-1.0\CallbackHandler-1.0.xml
-libs\LibSharedMedia-3.0\Lib.xml
-
-pMinimap.lua
\ No newline at end of file
diff --git a/pMinimap_Config.lua b/pMinimap_Config.lua
new file mode 100644
index 0000000..afe9d2a
--- /dev/null
+++ b/pMinimap_Config.lua
@@ -0,0 +1 @@
+--[[

 Copyright (c) 2009, Adrian L Lange
 All rights reserved.

 You're allowed to use this addon, free of monetary charge,
 but you are not allowed to modify, alter, or redistribute
 this addon without express, written permission of the author.

--]]

local LSM = LibStub('LibSharedMedia-3.0')
local list = LSM:List('font')

local function AddToFontStrings()
	MiniMapMailText:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)
	MinimapZoneText:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)

	if(pMinimapDB.clock) then
		TimeManagerClockTicker:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)
	end
	if(pMinimapDB.coords) then
		pMinimap.Coord.Text:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)
	end
end

LibStub('AceConfigDialog-3.0'):AddToBlizOptions('pMinimap', 'pMinimap')
LibStub('AceConfig-3.0'):RegisterOptionsTable('pMinimap', {
	name = 'pMinimap Options',
	type = 'group',
	args = {
		mapheader = {
			name = 'Minimap options',
			type = 'header',
			order = 0,
		},
		scale = {
			type = 'range',
			order = 1,
			name = 'Minimap Scale',
			min = 0.50,
			max = 2.50,
			step = 0.01,
			get = function() return pMinimapDB.scale end,
			set = function(_, value)
				pMinimapDB.scale = value
				Minimap:SetScale(value)
			end,
		},
		lock = {
			type = 'toggle',
			order = 2,
			name = 'Unlocked',
			get = function() return pMinimapDB.unlocked end,
			set = function()
				pMinimapDB.unlocked = not pMinimapDB.unlocked

				if(pMinimapDB.unlocked) then
					Minimap:SetBackdropColor(0, 1, 0, 0.5)
				else
					Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
				end
			end
		},
		level = {
			type = 'range',
			order = 3,
			name = 'Frame level',
			min = 1,
			max = 15,
			step = 1,
			get = function() return pMinimapDB.level end,
			set = function(_, value)
				pMinimapDB.level = value
				Minimap:SetFrameLevel(value)
			end
		},
		strata = {
			type = 'select',
			order = 4,
			name = 'Frame Strata',
			values = {['DIALOG'] = 'DIALOG', ['HIGH'] = 'HIGH', ['MEDIUM'] = 'MEDIUM', ['LOW'] = 'LOW', ['BACKGROUND'] = 'BACKGROUND'},
			get = function() return pMinimapDB.strata end,
			set = function(_, strata)
				pMinimapDB.strata = strata
				Minimap:SetFrameStrata(strata)
			end
		},
		mischeader = {
			name = 'Misc modules',
			type = 'header',
			order = 5,
		},
		clock = {
			type = 'toggle',
			order = 6,
			name = 'Clock',
			get = function() return pMinimapDB.clock end,
			set = function()
				pMinimapDB.clock = not pMinimapDB.clock

				if(pMinimapDB.clock) then
					if(not pMinimap.RunClock) then
						pMinimap:CreateClock()
					else
						TimeManagerClockButton:Show()
						TimeManagerClockButton:ClearAllPoints()
						TimeManagerClockButton:SetPoint(pMinimapDB.coords and 'BOTTOMLEFT' or 'BOTTOM', Minimap)
					end
					pMinimap.CALENDAR_UPDATE_PENDING_INVITES()
				else
					TimeManagerClockButton:Hide()
				end

				if(pMinimapDB.coords) then
					pMinimap.Coord:ClearAllPoints()
					pMinimap.Coord:SetPoint(pMinimapDB.clock and 'BOTTOMRIGHT' or 'BOTTOM', Minimap)
				end
			end
		},
		coords = {
			type = 'toggle',
			order = 7,
			name = 'Coords',
			get = function() return pMinimapDB.coords end,
			set = function()
				pMinimapDB.coords = not pMinimapDB.coords

				if(pMinimapDB.coords) then
					if(not pMinimap.Coord) then
						pMinimap:CreateCoords()
					else
						pMinimap.Coord:Show()
						pMinimap.Coord:ClearAllPoints()
						pMinimap.Coord:SetPoint(pMinimapDB.clock and 'BOTTOMRIGHT' or 'BOTTOM', Minimap)
					end
				else
					pMinimap.Coord:Hide()
				end

				if(pMinimapDB.clock) then
					TimeManagerClockButton:ClearAllPoints()
					TimeManagerClockButton:SetPoint(pMinimapDB.coords and 'BOTTOMLEFT' or 'BOTTOM', Minimap)
				end
			end
		},
		mail = {
			type = 'toggle',
			order = 8,
			name = 'Mail',
			get = function() return pMinimapDB.mail end,
			set = function()
				pMinimapDB.mail = not pMinimapDB.mail

				if(pMinimapDB.mail) then
					MiniMapMailIcon:Hide()
					MiniMapMailText:Show()
				else
					MiniMapMailIcon:Show()
					MiniMapMailText:Hide()
				end
			end
		},
		dura = {
			type = 'toggle',
			order = 9,
			name = 'Durability',
			get = function() return pMinimapDB.dura end,
			set = function()
				pMinimapDB.dura = not pMinimapDB.dura

				if(pMinimapDB.dura) then
					DurabilityFrame:SetAlpha(0)
					pMinimap:RegisterEvent('UPDATE_INVENTORY_ALERTS')
					pMinimap.UPDATE_INVENTORY_ALERTS()
				else
					DurabilityFrame:SetAlpha(1)
					pMinimap:UnregisterEvent('UPDATE_INVENTORY_ALERTS')
					Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
				end
			end
		},
		bgheader = {
			name = 'Backdrop options',
			type = 'header',
			order = 10,
		},
		bgthick = {
			type = 'range',
			order = 11,
			name = 'Backdrop Thickness',
			min = 0,
			max = 10,
			step = 0.5,
			get = function() return pMinimapDB.offset end,
			set = function(_, value)
				pMinimapDB.offset = value
				Minimap:SetBackdrop({bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], insets = {top = - value, left = - value, bottom = - value, right = - value}})
				Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
			end
		},
		bgcolor = {
			type = 'color',
			order = 12,
			name = 'Backdrop Color',
			hasAlpha = true,
			get = function() return unpack(pMinimapDB.colors) end,
			set = function(_, r, g, b, a)
				pMinimapDB.colors = {r, g, b, a}
				Minimap:SetBackdropColor(r, g, b, a)
			end
		},
		zoneheader = {
			name = 'Zone options',
			type = 'header',
			order = 13,
		},
		zoneoffset = {
			type = 'range',
			order = 14,
			name = 'ZoneText offset',
			min = -25,
			max = 25,
			step = 0.5,
			get = function() return pMinimapDB.zoneOffset end,
			set = function(_, value)
				pMinimapDB.zoneOffset = value
				MinimapZoneTextButton:ClearAllPoints()
				MinimapZoneTextButton:SetPoint(pMinimapDB.zonePoint == 'TOP' and 'BOTTOM' or 'TOP', Minimap, pMinimapDB.zonePoint, 0, value)
			end
		},
		zone = {
			type = 'toggle',
			order = 15,
			name = 'ZoneText',
			get = function() return pMinimapDB.zone end,
			set = function()
				pMinimapDB.zone = not pMinimapDB.zone

				if(pMinimapDB.zone) then
					MinimapZoneTextButton:Show()
				else
					MinimapZoneTextButton:Hide()
				end
			end
		},
		zonepoint = {
			type = 'select',
			order = 16,
			name = 'ZoneText point',
			values = {['TOP'] = 'TOP', ['BOTTOM'] = 'BOTTOM'},
			get = function() return pMinimapDB.zonePoint end,
			set = function(_, point)
				pMinimapDB.zonePoint = point

				if(point == 'TOP') then
					MinimapZoneTextButton:ClearAllPoints()
					MinimapZoneTextButton:SetPoint('BOTTOM', Minimap, point, 0, pMinimapDB.zoneOffset)
				else
					MinimapZoneTextButton:ClearAllPoints()
					MinimapZoneTextButton:SetPoint('TOP', Minimap, point, 0, pMinimapDB.zoneOffset)
				end
			end
		},
		fontheader = {
			name = 'Font options',
			type = 'header',
			order = 17,
		},
		font = {
			type = 'select',
			order = 18,
			name = 'Font',
			values = list,
			get = function()
				for k, v in next, list do
					if(v == pMinimapDB.smfont) then
						return k
					end
				end
			end,
			set = function(_, font)
				pMinimapDB.smfont = list[font]
				AddToFontStrings()
			end
		},
		fontflag = {
			type = 'select',
			order = 19,
			name = 'Font flag',
			values = {['OUTLINE'] = 'OUTLINE', ['THICKOUTLINE'] = 'THICKOUTLINE', ['MONOCHROME'] = 'MONOCHROME', ['NONE'] = 'NONE'},
			get = function() return pMinimapDB.fontflag end,
			set = function(_, flag)
				pMinimapDB.fontflag = flag
				AddToFontStrings()
			end
		},
		fontsize = {
			type = 'range',
			order = 20,
			name = 'Font Size',
			min = 5,
			max = 18,
			step = 1,
			get = function() return pMinimapDB.fontsize end,
			set = function(_, value)
				pMinimapDB.fontsize = value
				AddToFontStrings()
			end
		},
		misc2header = {
			name = 'Misc options',
			type = 'header',
			order = 21,
		},
		coordDecimal = {
			type = 'range',
			order = 22,
			name = 'Coords decimals',
			min = 0,
			max = 3,
			step = 1,
			get = function() return pMinimapDB.coordsDecimals end,
			set = function(_, value)
				pMinimapDB.coordsDecimals = value
			end
		},
	}
})
\ No newline at end of file
diff --git a/pMinimap_Config/pMinimap_Config.lua b/pMinimap_Config/pMinimap_Config.lua
deleted file mode 100644
index afe9d2a..0000000
--- a/pMinimap_Config/pMinimap_Config.lua
+++ /dev/null
@@ -1 +0,0 @@
---[[

 Copyright (c) 2009, Adrian L Lange
 All rights reserved.

 You're allowed to use this addon, free of monetary charge,
 but you are not allowed to modify, alter, or redistribute
 this addon without express, written permission of the author.

--]]

local LSM = LibStub('LibSharedMedia-3.0')
local list = LSM:List('font')

local function AddToFontStrings()
	MiniMapMailText:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)
	MinimapZoneText:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)

	if(pMinimapDB.clock) then
		TimeManagerClockTicker:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)
	end
	if(pMinimapDB.coords) then
		pMinimap.Coord.Text:SetFont(LSM:Fetch('font', pMinimapDB.smfont), pMinimapDB.fontsize, pMinimapDB.fontflag)
	end
end

LibStub('AceConfigDialog-3.0'):AddToBlizOptions('pMinimap', 'pMinimap')
LibStub('AceConfig-3.0'):RegisterOptionsTable('pMinimap', {
	name = 'pMinimap Options',
	type = 'group',
	args = {
		mapheader = {
			name = 'Minimap options',
			type = 'header',
			order = 0,
		},
		scale = {
			type = 'range',
			order = 1,
			name = 'Minimap Scale',
			min = 0.50,
			max = 2.50,
			step = 0.01,
			get = function() return pMinimapDB.scale end,
			set = function(_, value)
				pMinimapDB.scale = value
				Minimap:SetScale(value)
			end,
		},
		lock = {
			type = 'toggle',
			order = 2,
			name = 'Unlocked',
			get = function() return pMinimapDB.unlocked end,
			set = function()
				pMinimapDB.unlocked = not pMinimapDB.unlocked

				if(pMinimapDB.unlocked) then
					Minimap:SetBackdropColor(0, 1, 0, 0.5)
				else
					Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
				end
			end
		},
		level = {
			type = 'range',
			order = 3,
			name = 'Frame level',
			min = 1,
			max = 15,
			step = 1,
			get = function() return pMinimapDB.level end,
			set = function(_, value)
				pMinimapDB.level = value
				Minimap:SetFrameLevel(value)
			end
		},
		strata = {
			type = 'select',
			order = 4,
			name = 'Frame Strata',
			values = {['DIALOG'] = 'DIALOG', ['HIGH'] = 'HIGH', ['MEDIUM'] = 'MEDIUM', ['LOW'] = 'LOW', ['BACKGROUND'] = 'BACKGROUND'},
			get = function() return pMinimapDB.strata end,
			set = function(_, strata)
				pMinimapDB.strata = strata
				Minimap:SetFrameStrata(strata)
			end
		},
		mischeader = {
			name = 'Misc modules',
			type = 'header',
			order = 5,
		},
		clock = {
			type = 'toggle',
			order = 6,
			name = 'Clock',
			get = function() return pMinimapDB.clock end,
			set = function()
				pMinimapDB.clock = not pMinimapDB.clock

				if(pMinimapDB.clock) then
					if(not pMinimap.RunClock) then
						pMinimap:CreateClock()
					else
						TimeManagerClockButton:Show()
						TimeManagerClockButton:ClearAllPoints()
						TimeManagerClockButton:SetPoint(pMinimapDB.coords and 'BOTTOMLEFT' or 'BOTTOM', Minimap)
					end
					pMinimap.CALENDAR_UPDATE_PENDING_INVITES()
				else
					TimeManagerClockButton:Hide()
				end

				if(pMinimapDB.coords) then
					pMinimap.Coord:ClearAllPoints()
					pMinimap.Coord:SetPoint(pMinimapDB.clock and 'BOTTOMRIGHT' or 'BOTTOM', Minimap)
				end
			end
		},
		coords = {
			type = 'toggle',
			order = 7,
			name = 'Coords',
			get = function() return pMinimapDB.coords end,
			set = function()
				pMinimapDB.coords = not pMinimapDB.coords

				if(pMinimapDB.coords) then
					if(not pMinimap.Coord) then
						pMinimap:CreateCoords()
					else
						pMinimap.Coord:Show()
						pMinimap.Coord:ClearAllPoints()
						pMinimap.Coord:SetPoint(pMinimapDB.clock and 'BOTTOMRIGHT' or 'BOTTOM', Minimap)
					end
				else
					pMinimap.Coord:Hide()
				end

				if(pMinimapDB.clock) then
					TimeManagerClockButton:ClearAllPoints()
					TimeManagerClockButton:SetPoint(pMinimapDB.coords and 'BOTTOMLEFT' or 'BOTTOM', Minimap)
				end
			end
		},
		mail = {
			type = 'toggle',
			order = 8,
			name = 'Mail',
			get = function() return pMinimapDB.mail end,
			set = function()
				pMinimapDB.mail = not pMinimapDB.mail

				if(pMinimapDB.mail) then
					MiniMapMailIcon:Hide()
					MiniMapMailText:Show()
				else
					MiniMapMailIcon:Show()
					MiniMapMailText:Hide()
				end
			end
		},
		dura = {
			type = 'toggle',
			order = 9,
			name = 'Durability',
			get = function() return pMinimapDB.dura end,
			set = function()
				pMinimapDB.dura = not pMinimapDB.dura

				if(pMinimapDB.dura) then
					DurabilityFrame:SetAlpha(0)
					pMinimap:RegisterEvent('UPDATE_INVENTORY_ALERTS')
					pMinimap.UPDATE_INVENTORY_ALERTS()
				else
					DurabilityFrame:SetAlpha(1)
					pMinimap:UnregisterEvent('UPDATE_INVENTORY_ALERTS')
					Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
				end
			end
		},
		bgheader = {
			name = 'Backdrop options',
			type = 'header',
			order = 10,
		},
		bgthick = {
			type = 'range',
			order = 11,
			name = 'Backdrop Thickness',
			min = 0,
			max = 10,
			step = 0.5,
			get = function() return pMinimapDB.offset end,
			set = function(_, value)
				pMinimapDB.offset = value
				Minimap:SetBackdrop({bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], insets = {top = - value, left = - value, bottom = - value, right = - value}})
				Minimap:SetBackdropColor(unpack(pMinimapDB.colors))
			end
		},
		bgcolor = {
			type = 'color',
			order = 12,
			name = 'Backdrop Color',
			hasAlpha = true,
			get = function() return unpack(pMinimapDB.colors) end,
			set = function(_, r, g, b, a)
				pMinimapDB.colors = {r, g, b, a}
				Minimap:SetBackdropColor(r, g, b, a)
			end
		},
		zoneheader = {
			name = 'Zone options',
			type = 'header',
			order = 13,
		},
		zoneoffset = {
			type = 'range',
			order = 14,
			name = 'ZoneText offset',
			min = -25,
			max = 25,
			step = 0.5,
			get = function() return pMinimapDB.zoneOffset end,
			set = function(_, value)
				pMinimapDB.zoneOffset = value
				MinimapZoneTextButton:ClearAllPoints()
				MinimapZoneTextButton:SetPoint(pMinimapDB.zonePoint == 'TOP' and 'BOTTOM' or 'TOP', Minimap, pMinimapDB.zonePoint, 0, value)
			end
		},
		zone = {
			type = 'toggle',
			order = 15,
			name = 'ZoneText',
			get = function() return pMinimapDB.zone end,
			set = function()
				pMinimapDB.zone = not pMinimapDB.zone

				if(pMinimapDB.zone) then
					MinimapZoneTextButton:Show()
				else
					MinimapZoneTextButton:Hide()
				end
			end
		},
		zonepoint = {
			type = 'select',
			order = 16,
			name = 'ZoneText point',
			values = {['TOP'] = 'TOP', ['BOTTOM'] = 'BOTTOM'},
			get = function() return pMinimapDB.zonePoint end,
			set = function(_, point)
				pMinimapDB.zonePoint = point

				if(point == 'TOP') then
					MinimapZoneTextButton:ClearAllPoints()
					MinimapZoneTextButton:SetPoint('BOTTOM', Minimap, point, 0, pMinimapDB.zoneOffset)
				else
					MinimapZoneTextButton:ClearAllPoints()
					MinimapZoneTextButton:SetPoint('TOP', Minimap, point, 0, pMinimapDB.zoneOffset)
				end
			end
		},
		fontheader = {
			name = 'Font options',
			type = 'header',
			order = 17,
		},
		font = {
			type = 'select',
			order = 18,
			name = 'Font',
			values = list,
			get = function()
				for k, v in next, list do
					if(v == pMinimapDB.smfont) then
						return k
					end
				end
			end,
			set = function(_, font)
				pMinimapDB.smfont = list[font]
				AddToFontStrings()
			end
		},
		fontflag = {
			type = 'select',
			order = 19,
			name = 'Font flag',
			values = {['OUTLINE'] = 'OUTLINE', ['THICKOUTLINE'] = 'THICKOUTLINE', ['MONOCHROME'] = 'MONOCHROME', ['NONE'] = 'NONE'},
			get = function() return pMinimapDB.fontflag end,
			set = function(_, flag)
				pMinimapDB.fontflag = flag
				AddToFontStrings()
			end
		},
		fontsize = {
			type = 'range',
			order = 20,
			name = 'Font Size',
			min = 5,
			max = 18,
			step = 1,
			get = function() return pMinimapDB.fontsize end,
			set = function(_, value)
				pMinimapDB.fontsize = value
				AddToFontStrings()
			end
		},
		misc2header = {
			name = 'Misc options',
			type = 'header',
			order = 21,
		},
		coordDecimal = {
			type = 'range',
			order = 22,
			name = 'Coords decimals',
			min = 0,
			max = 3,
			step = 1,
			get = function() return pMinimapDB.coordsDecimals end,
			set = function(_, value)
				pMinimapDB.coordsDecimals = value
			end
		},
	}
})
\ No newline at end of file
diff --git a/pMinimap_Config/pMinimap_Config.toc b/pMinimap_Config/pMinimap_Config.toc
deleted file mode 100644
index 4b9c8d6..0000000
--- a/pMinimap_Config/pMinimap_Config.toc
+++ /dev/null
@@ -1,13 +0,0 @@
-## Interface: 30100
-## Author: p3lim
-## Version: 30100.wowi:revision
-## Title: |cffff6000p|rMinimap_Config
-## Notes: Options module for pMinimap
-## RequiredDeps: pMinimap
-## LoadOnDemand: 1
-
-libs\LibStub\LibStub.lua
-libs\AceGUI-3.0\AceGUI-3.0.xml
-libs\AceConfig-3.0\AceConfig-3.0.xml
-
-pMinimap_Config.lua
\ No newline at end of file