vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--Created by Tehu of Garona
--
--
--Credit goes out to the creators of AvgXP and AvgXPPlus for the AvgXP functions
--Credit goes out to the creator of TotalXP for the XP needed until 60 function
--Credit goes out the the creator of the original XPBar (non titan that is :P) for the sizing functions

TITAN_XPBAR_FREQUENCY=1
local restxp=nil
PLAYER_ENTERING_WORLD=0
TITAN_XPBAR_BUTTON_TEXT_XP="XP: %s"
TITAN_XPBAR_BUTTON_TEXT_NIL="%s"
TITAN_XPBAR_BUTTON_TEXT_NEEDED="%s XP"
TITAN_XPBAR_BUTTON_TEXT_NPCT="%s"
TITAN_XPBAR_MENU_TEXT="XPBar"
TITAN_XPBAR_MENU_SHOW_STATUS="Show XP Statusbar"
TITAN_XPBAR_MENU_HIDE_STATUS="Hide XP Statusbar"
TITAN_XPBAR_TOOLTIP_XP="Current XP:"
TITAN_XPBAR_TOOLTIP_LEV="Level XP:"
TITAN_XPBAR_TOOLTIP_REST="Rested XP:"
TITAN_XPBAR_TOOLTIP_NEED="XP Until Next Level:"
TITAN_XPBAR_TOOLTIP_PERCENT=""
TITAN_XPBAR_TOOLTIP="Experience Tooltip"
TITAN_XPBAR_TOOLTIP_CURRLEV="Currently Level:"
TITAN_XPBAR_TOOLTIP_XPTO60="XP Remaining Until 60"
TITAN_XPBAR_TOOLTIP_XPSOFAR="XP Gained Since Level 1"
TITAN_XPBAR_TOOLTIP_XPTO60PCT=""
TITAN_XPBAR_TOOLTIP_XPSOFARPCT=""
TITAN_XPBAR_TOTAL_TIME_PLAYED = "Total Time Played:"
TITAN_XPBAR_LEVEL_TIME_PLAYED = "Time Played This Level:"
TITAN_XPBAR_SESSION_TIME_PLAYED = "Time Played This Session:"
TITAN_XPBAR_SESSION_XP = "XP Gained This Session:"
TITAN_XPBAR_PER_HOUR_LEVEL = "XP Per Hour This Level:"
TITAN_XPBAR_PER_HOUR_SESSION = "XP Per Hour This Session:"
TITAN_XPBAR_EST_TIME_TO_LEVEL_LEVEL_RATE = "Time To Level At This Level's Rate:"
TITAN_XPBAR_EST_TIME_TO_LEVEL_SESSION_RATE = "Time To Level At This Session's Rate:"

TITAN_XPBAR_TOTAL_KILLS="Total Kills This Session:"
TITAN_XPBAR_TOTAL_NKILLS="Total Kills Needed To Level:"
TITAN_XPBAR_AVGXP="Average XP Gained Per Kill:"
TITAN_XPBAR_MENU_SHOW_TEXT="Show Average XP Text"

TITAN_XPBAR_NKILLS=" Needed: %s"
TITAN_XPBAR_KILLS=" Kills: %s"
TITAN_XPBAR_AVGXPTEXT="AVG XP: %s"

TITAN_XPBAR_MENU_SHOWCURR="Display Current Level Info"
TITAN_XPBAR_MENU_SHOWNEXT="Display XP Needed Until Next Level"
TITAN_XPBAR_MENU_CHAT="Enable Chat Output"

LBLUE_FONT_COLOR="|cff55A9FF"

TXP_pos = {};
RegisterForSave("TXP_pos");
AVG_pos = {};
RegisterForSave("AVG_pos");

function TitanPanelXPBarButton_OnLoad()
        SlashCmdList["TXP"] = TXP_SlashHandler
        SLASH_TXP1 = "/txp";
        
        SlashCmdList["TEST"] = TXP_TestHandler;
        SLASH_TEST1 = "/test"

        DEFAULT_CHAT_FRAME:AddMessage("TitanXPBar Loaded, /txp for options", 1, 1, 0)

        this:RegisterEvent("VARIABLES_LOADED")
        this:RegisterEvent("UPDATE_EXHAUSTION")
        this:RegisterEvent("PLAYER_ENTERING_WORLD")
        this:RegisterEvent("CHAT_MSG_COMBAT_XP_GAIN");
        this:RegisterEvent("UNIT_NAME_UPDATE");
        this:RegisterEvent("PLAYER_TARGET_CHANGED");
        this:RegisterEvent("PLAYER_LEVEL_UP")
        this:RegisterEvent("PLAYER_XP_UPDATE");
        this.registry={
                id="XPBar",
                menuText = TITAN_XPBAR_MENU_TEXT,
                buttonTextFunction="TitanPanelXPBarButton_GetButtonText",
                tooltipTitle = TITAN_XPBAR_TOOLTIP,
                tooltipTextFunction = "TitanPanelXPBarButton_GetTooltipText", 
        }

        totalkilled=0
        avgxp=0
        totalxpgained=0
        lastxpgained=0
        numleft=0 
        bar = {255, 255, 255}

        
        
end

function TXP_TestHandler(msg)
        RegisterForSave("test_Args");
        test_Args=tyn_Parser(msg);
end     

function tyn_Parser(commandline)
        local t = {};
        local k, v;
        local msg=commandline;
        for k, v in string.gfind(msg, "(%w+)=\"(.-)\"") do
                t[k] = v
        end
        msg=string.gsub(msg, "(%w+)=\"(.-)\"", "")
        for k, v in string.gfind(msg, "(%w+)=(%w+)") do
                t[k] = v
        end
        msg=string.gsub(msg, "(%w+)=(%w+)", "")
        for k in string.gfind(msg, "(%w+)") do
                t[k] = true;
        end
        return t;
end

function TitanPanelXPBarButton_OnEvent(event)
        local rxp,curr,max,needed,currpcent,needpcent,currlev,nextlev=TitanPanelXPBarButton_GetXPBarInfo()
        TitanPanelButton_UpdateButton("XPBar")
        Statusbar_Update()
        
        if (TitanSettings.Chat == nil) then
                if (event == "PLAYER_XP_UPDATE") then
                DEFAULT_CHAT_FRAME:AddMessage(LBLUE_FONT_COLOR..curr.."/"..max.." XP ("..needpcent..") to go"..FONT_COLOR_CODE_CLOSE)
                DEFAULT_CHAT_FRAME:AddMessage(LBLUE_FONT_COLOR..needed.." XP Until Level "..nextlev..FONT_COLOR_CODE_CLOSE)
                end
        end
        
        if (event == "PLAYER_ENTERING_WORLD") then
                if (PLAYER_ENTERING_WORLD == 0) then            
                this.initXP = UnitXP("player");
                this.accumXP = 0;
                this.sessionXP = 0;
                PLAYER_ENTERING_WORLD = 1
                end
        elseif (event == "PLAYER_XP_UPDATE") then
                if (not this.initXP) then
                        this.initXP = UnitXP("player");
                        this.accumXP = 0;
                        this.sessionXP = 0;
                end
                this.sessionXP = UnitXP("player") - this.initXP + this.accumXP;
        elseif (event == "PLAYER_LEVEL_UP") then
                this.accumXP = this.accumXP + UnitXPMax("player") - this.initXP;
                this.initXP = 0;
        end

        if(event=="CHAT_MSG_COMBAT_XP_GAIN") then
        for mobile_name, xp in string.gfind(arg1, "(.+) dies, you gain (%d+) experience.") do
                lastxpgained = tonumber(xp)
                totalkilled = totalkilled + 1
                totalxpgained = totalxpgained + lastxpgained
        end
        end
                
                        


        if( (totalkilled > 0) and (totalkilled~=nil) ) then
                        avgxp = floor(totalxpgained / totalkilled * 100) / 100;
        end


        if( (avgxp > 0) and (avgxp~=nil) ) then
                        numleft = ( UnitXPMax("player") - UnitXP("player") ) / avgxp;
                        numleft = ceil(numleft);
        end

        if (event == "VARIABLES_LOADED") then
                if (XPBar_Width) then
                        XPBG:SetWidth(XPBar_Width);
                        XPStatus:SetWidth(XPBar_Width);
                end

                if (XPBar_Height) then
                        XPBG:SetHeight(XPBar_Height);
                        XPStatus:SetHeight(XPBar_Height);
                end

                if (AVGXP_Locked) then
                        TXP_SlashHandler('lock');
                end
                

        TXP()
        AVG()
        end

end

function TitanPanelXPBarButton_GetButtonText(id)
        local rxp,curr,max,needed,currpcent,needpcent,currlev,nextlev=TitanPanelXPBarButton_GetXPBarInfo()
        local button, id = TitanUtils_GetButton(id, true);
        if (rxp == nil) then
                rxp=0
        else
                rxp=rxp
        end
        
        
        if (TitanSettings.Status == 1) then
                XPStatus:Hide()
        end

        if (TitanSettings.Status == nil) then
                XPStatus:Show()
        end     

        
        if (TitanSettings.Showtext == nil) then
                getglobal("AVGText"):SetText("AVG XP: "..TitanUtils_GetHighlightText(avgxp).." Kills: "..TitanUtils_GetHighlightText(totalkilled).." Needed: "..TitanUtils_GetHighlightText(numleft))
                AVGXPButton:Show()
        end
        
        if (TitanSettings.Showtext == 1) then
                AVGXPButton:Hide()
        end

        if (TitanSettings.XPFormat == 1) then   
        return
                format(TITAN_XPBAR_BUTTON_TEXT_XP,TitanUtils_GetHighlightText(curr)).."/"..
                format(TITAN_XPBAR_BUTTON_TEXT_NIL,TitanUtils_GetHighlightText(max)).." + ("..
                format(TITAN_XPBAR_BUTTON_TEXT_NIL,TitanUtils_GetHighlightText(rxp)).." Rested)"
        end


        if (TitanSettings.XPFormat == nil) then
        return
                format(TITAN_XPBAR_BUTTON_TEXT_NEEDED,TitanUtils_GetHighlightText(needed)).." ("..
                format(TITAN_XPBAR_BUTTON_TEXT_NPCT,TitanUtils_GetHighlightText(needpcent))..") until "..
                format(TITAN_XPBAR_BUTTON_TEXT_NIL,TitanUtils_GetHighlightText(nextlev)).." ("..
                format(TITAN_XPBAR_BUTTON_TEXT_NIL,TitanUtils_GetHighlightText(rxp)).." Rested)"
        end

end

function TitanPanelXPBarButton_GetXPBarInfo()
        local rxp=GetXPExhaustion("player")
        local max=UnitXPMax("player")
        local curr=UnitXP("player")
        local needed=max - curr
        local currpercent=string.format("%.2f", ( curr / max) * 100)
        local needpcent=string.format("%.2f", ( needed / max) * 100)
        local currlev=UnitLevel("player")
        local nextlev=currlev + 1
        return rxp,curr,max,needed,currpercent.."%",needpcent.."%",currlev,nextlev
end

function TitanPanelXPBarButton_GetTooltipText()
        local rxp,curr,max,needed,currpercent,needpcent,currlev=TitanPanelXPBarButton_GetXPBarInfo()
        local totalxp,totalMaxXP,totalxppct,needxp,needxppct,totalgpct,totalnpct=totalxp(level)
        local totalTime = TitanUtils_GetTotalTime();
        local sessionTime = TitanUtils_GetSessionTime();
        local levelTime = TitanUtils_GetLevelTime();    
        local xpPerHourThisLevel = curr / levelTime * 3600;
        local xpPerHourThisSession = this.sessionXP / sessionTime * 3600;
        local estTimeToLevelThisLevel = TitanUtils_Ternary((curr == 0), -1, needed / curr * levelTime);
        local estTimeToLevelThisSession = TitanUtils_Ternary((this.sessionXP == 0), -1, needed / this.sessionXP * sessionTime); 

        if (rxp == nil) then
                rxp=0 
                rxppcent=0 .."%"
        else
                rxppcent=floor(rxp*100/max) .."%"
        end

        return  ""..
                TITAN_XPBAR_TOOLTIP_CURRLEV.." "..GetBlueText(currlev).."\n"..
                "\n"..
                TITAN_XPBAR_TOOLTIP_XP.." "..TitanUtils_GetHighlightText(curr).." "..
                TITAN_XPBAR_TOOLTIP_PERCENT.." ("..TitanUtils_GetHighlightText(currpercent)..")".."\n"..
                TITAN_XPBAR_TOOLTIP_LEV.." "..TitanUtils_GetHighlightText(max).."\n"..
                TITAN_XPBAR_TOOLTIP_NEED.." "..TitanUtils_GetHighlightText(needed).." "..
                TITAN_XPBAR_TOOLTIP_PERCENT.." ("..TitanUtils_GetHighlightText(needpcent)..")".."\n"..
                TITAN_XPBAR_TOOLTIP_REST.." "..TitanUtils_GetHighlightText(rxp).." "..
                TITAN_XPBAR_TOOLTIP_PERCENT.." ("..TitanUtils_GetHighlightText(rxppcent)..")".."\n".."\n"..
                TITAN_XPBAR_TOOLTIP_XPSOFAR..": "..GetBlueText(totalxp).." ("..
                TITAN_XPBAR_TOOLTIP_XPSOFARPCT..""..GetBlueText(totalgpct)..")".."\n"..
                TITAN_XPBAR_TOOLTIP_XPTO60.." "..GetBlueText(needxp).." ("..
                TITAN_XPBAR_TOOLTIP_XPTO60PCT..""..GetBlueText(totalnpct)..")".."\n".."\n"..
                TITAN_XPBAR_SESSION_XP.." "..TitanUtils_GetGreenText(this.sessionXP).."\n"..
                TITAN_XPBAR_AVGXP.." "..TitanUtils_GetGreenText(avgxp).."\n".."\n"..
                TITAN_XPBAR_TOTAL_KILLS.." "..GetBlueText(totalkilled).."\n"..
                TITAN_XPBAR_TOTAL_NKILLS.." "..GetBlueText(numleft).."\n".."\n"..               
                TITAN_XPBAR_PER_HOUR_LEVEL.." "..TitanUtils_GetHighlightText(floor((xpPerHourThisLevel / 100) *100)).."\n"..
                TITAN_XPBAR_PER_HOUR_SESSION.." "..TitanUtils_GetHighlightText(floor((xpPerHourThisSession / 100)*100)).."\n".."\n"..
                TITAN_XPBAR_TOTAL_TIME_PLAYED.." "..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(totalTime)).."\n"..
                TITAN_XPBAR_EST_TIME_TO_LEVEL_LEVEL_RATE.." "..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(estTimeToLevelThisLevel)).."\n"..
                TITAN_XPBAR_EST_TIME_TO_LEVEL_SESSION_RATE.." "..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(estTimeToLevelThisSession))
                

end

function GetBlueText(text)
        if (text) then
                return LBLUE_FONT_COLOR..text..FONT_COLOR_CODE_CLOSE;
        end
end

function Statusbar_Update()
        local currValue = UnitXP("player");
        local maxValue = UnitXPMax("player");

        XPStatus:SetMinMaxValues(0, maxValue);
        XPStatus:SetValue(currValue);

        XPBG:SetMinMaxValues(0, maxValue);
        XPBG:SetValue(maxValue)

        XPStatus:ClearAllPoints();
        XPStatus:SetPoint("BOTTOM", "UIParent", "BOTTOM", TXP_pos["LOCATIONX"], TXP_pos["LOCATIONY"]);

        AVGText:ClearAllPoints();
        AVGText:SetPoint("BOTTOM", "UIParent", "BOTTOM", AVG_pos["LOCX"], AVG_pos["LOCY"]);
end

function TitanPanelRightClickMenu_PrepareXPBarMenu()
        local id = "XPBar";
        local info;

        TitanPanelRightClickMenu_AddTitle(TitanPlugins[id].menuText);

        info = {};
        info.text = TITAN_XPBAR_MENU_SHOWCURR
        info.func = TitanPanelXPBarButton_ShowCurr
        info.checked=TitanSettings.XPFormat
        UIDropDownMenu_AddButton(info);
        
        info = {};
        info.text = TITAN_XPBAR_MENU_SHOWNEXT
        info.func = TitanPanelXPBarButton_ShowNext
        info.checked=TitanUtils_Toggle(TitanSettings.XPFormat)
        UIDropDownMenu_AddButton(info)
        TitanPanelRightClickMenu_AddSpacer()

        info = {};
        info.text = TITAN_XPBAR_MENU_SHOW_STATUS;
        info.func = TitanPanelXPBarButton_ShowStatus;
        info.checked = TitanUtils_Toggle(TitanSettings.Status);
        UIDropDownMenu_AddButton(info);

        info = {};
        info.disabled = nil
        info.text = TITAN_XPBAR_MENU_SHOW_TEXT
        info.func = TitanPanelXPBarButton_ShowText
        info.checked = TitanUtils_Toggle(TitanSettings.Showtext)
        UIDropDownMenu_AddButton(info)
        
        info = {};
        info.text = TITAN_XPBAR_MENU_CHAT
        info.func = TitanPanelXPBarButton_Chat
        info.checked = TitanUtils_Toggle(TitanSettings.Chat)
        UIDropDownMenu_AddButton(info)

        info = {}
        info.text = "Enable Shift+Click Output"
        info.func = TitanPanelXPBarButton_Shift
        info.checked = TitanUtils_Toggle(TitanSettings.Shift)
        UIDropDownMenu_AddButton(info)

        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, id, TITAN_PANEL_MENU_FUNC_HIDE);
end

function TitanPanelXPBarButton_ShowStatus()
        TitanSettings.Status = TitanUtils_Toggle(TitanSettings.Status)
        TitanPanelButton_UpdateButton("XPBar");
end


function totalxp(level)
        myLevel = UnitLevel("player");
        myCurrXP = UnitXP("player");
        myMaxXP = UnitXPMax("player");
        myTNLXP = myMaxXP - myCurrXP;

        xpl = { 0, 400, 1300, 2700, 4800, 7600, 11200, 15700, 21100, 27600,
                35200, 44000, 54100, 65500, 78400, 92800, 108800, 126500,
                145900, 167200, 190400, 215600, 242900, 272300, 304000,
                338000, 374400, 413300, 454700, 499000, 546400, 597200,
                651900, 710500, 773300, 840300, 911900, 988000, 1068800,
                1154500, 1245200, 1341000, 1442000, 1548300, 1660100,
                1777500, 1900700, 2029800, 2164900, 2306100, 2453600,
                2607500, 2767900, 2935000, 3108900, 3289700, 3477600,
                3672600, 3874900, 4084700 }
                
        local totalxp = xpl[myLevel] + myCurrXP;
        local totalMaxXP = xpl[60];
        local totalxppct = totalxp / totalMaxXP;

        local needxp = totalMaxXP - totalxp
        local needxppct = (totalMaxXP - totalxp) / totalMaxXP
        
        local totalgpct = floor(totalxppct * 10000) / 100
        local totalnpct = floor(needxppct * 10000) / 100

        return totalxp,totalMaxXP,totalxppct,needxp,needxppct,totalgpct.."%",totalnpct.."%"
end

function TitanPanelXPBarButton_ShowText()
        TitanSettings.Showtext=TitanUtils_Toggle(TitanSettings.Showtext)
        TitanPanelButton_UpdateButton("XPBar")
end

function TitanPanelXPBarButton_Chat()
        TitanSettings.Chat=TitanUtils_Toggle(TitanSettings.Chat)
end

function TitanPanelXPBarButton_ShowCurr()
        TitanSettings.XPFormat=1
        TitanPanelButton_UpdateButton("XPBar")
end

function TitanPanelXPBarButton_ShowNext()
        TitanSettings.XPFormat=nil
        TitanPanelButton_UpdateButton("XPBar")
end

function TitanPanelXPBarButton_Shift()
        TitanSettings.Shift=TitanUtils_Toggle(TitanSettings.Shift)
        TitanPanelButton_UpdateButton("XPBar")
end

function TitanPanelXPBarButton_OnClick()
        local rxp,curr,max,needed,currpercent,needpcent,currlev,nextlev=TitanPanelXPBarButton_GetXPBarInfo()
        

        if (IsShiftKeyDown()) then
                if (not chatFrame) then
                        chatFrame = DEFAULT_CHAT_FRAME;
                end
                
                chatType = chatFrame.editBox.chatType;

                if (TitanSettings.Shift == nil) then
                      if (ChatFrameEditBox:IsVisible()) then
                                ChatFrameEditBox:Insert("Currently "..curr.."/"..max.." XP with "..needed.." XP ("..needpcent..") until level "..nextlev);
                        else
                                SendChatMessage("Currently "..curr.."/"..max.." XP with "..needed.." XP ("..needpcent..") until level "..nextlev);
                      end
                
                end
        end
end

function TXP_SlashHandler(msg)

if (msg == 'help') then msg = nil end
--if (msg == '') then 
--      DEFAULT_CHAT_FRAME:AddMessage("Usage: /txp height=## width=## x=## y=## avgx=## avgy=##", 1, 1, 0)
--      DEFAULT_CHAT_FRAME:AddMessage("Typing just '/txp x' (or y) will display the current x (or y) position", 1, 1, 0)
--end

if msg then

        local LOCK = false;
        local UNLOCK = false;

        local param = TXP_Split(msg, " ");
        
        

        
        local i = 1;
        
        
        while ( param[i] ~= nil ) do
                local current = string.lower(param[i]);
                if (string.sub(current, 1, 7)=="height=") then
                        local height=tonumber(string.sub(current, 8));
                        if (height) then
                                if (height<10) then
                                        height=10;
                                end
                                XPBar_Height = height;
                                XPBG:SetHeight(XPBar_Height);
                                XPStatus:SetHeight(XPBar_Height);
                        end
                end
                if (string.sub(current, 1, 6)=="width=") then
                        local width=tonumber(string.sub(current, 7));
                        if (width) then
                                if (width<50) then
                                        width=50;
                                end
                                XPBar_Width = width;
                                XPBG:SetWidth(XPBar_Width);
                                XPStatus:SetWidth(XPBar_Width);
                        end
                end

                if (current == "x") then
                        DEFAULT_CHAT_FRAME:AddMessage("Current Statusbar X = " ..TXP_pos["LOCATIONX"], 1, 1, 0);
                end

                if (current == "") then
                        DEFAULT_CHAT_FRAME:AddMessage("Use: /txp height=## width=## x=## y=## avgx=## avgy=##", 1, 1, 0)
                        DEFAULT_CHAT_FRAME:AddMessage("Typing just '/txp x'(or y) will display the current x (or y) position", 1, 1, 0)
                        DEFAULT_CHAT_FRAME:AddMessage("The same works for avgx and avgy", 1, 1, 0)
                end

                if (string.sub(current, 1, 2)=="x=") then
                        local xpos=tonumber(string.sub(current,3))
                        if (xpos) then
                                if (xpos==0) then
                                        xpos=0
                                end
                                TXP_pos["LOCATIONX"] = xpos
                        end
                end
                
                if (current == "y") then
                        DEFAULT_CHAT_FRAME:AddMessage("Current Statusbar Y = " ..TXP_pos["LOCATIONY"], 1, 1, 0);
                end

                if (current == "avgx") then
                        DEFAULT_CHAT_FRAME:AddMessage("Current AVGXP X = " ..AVG_pos["LOCX"], 1, 1, 0);
                end

                if (current == "avgy") then
                        DEFAULT_CHAT_FRAME:AddMessage("Current AVGXP Y = " ..AVG_pos["LOCY"], 1, 1, 0);
                end
                
                if (string.sub(current, 1, 2)=="y=") then
                        local ypos=tonumber(string.sub(current,3))
                        if (ypos) then
                                if (ypos == 0) then
                                        ypos=0
                                end
                                TXP_pos["LOCATIONY"] = ypos
                        end
                end

                if (string.sub(current, 1, 5)=="avgx=") then
                        local avgxpos=tonumber(string.sub(current,6))
                        if (avgxpos) then
                                if (avgxpos == 0) then
                                        avgxpos=0
                                end
                                AVG_pos["LOCX"] = avgxpos
                        end
                end

                if (string.sub(current, 1, 5)=="avgy=") then
                        local avgypos=tonumber(string.sub(current,6))
                        if (avgypos) then
                                if (avgypos == 0) then
                                        avgypos=0
                                end
                                AVG_pos["LOCY"] = avgypos
                        end
                end

                i = i + 1;

        end

        

        Statusbar_Update();
        TXP()
        AVG()
end
end

function TXP_Split(toCut, separator)
        local splitted = {};
        local i = 0;
        local regEx = "([^" .. separator .. "]*)" .. separator .. "?";

        for item in string.gfind(toCut .. separator, regEx) do
                i = i + 1;
                splitted[i] = TXP_Trim(item) or '';
        end
        splitted[i] = nil;
        return splitted;
end

function TXP_Trim (s)
        return (string.gsub(s, "^%s*(.-)%s*$", "%1"));
end

function TXP()
        if ( not TXP_pos["LOCATIONX"] ) then
                TXP_pos["LOCATIONX"] = "0";
        end
        
        if ( not TXP_pos["LOCATIONY"] ) then
        TXP_pos["LOCATIONY"] = "90";
        end
end

function AVG()
        if ( not AVG_pos["LOCX"] ) then
                AVG_pos["LOCX"] = "0";
        end

        if ( not AVG_pos["LOCY"] ) then
                AVG_pos["LOCY"] = "90";
        end
end

Generated by GNU Enscript 1.6.5.90.