K-Meleon Extensions Manager(important!update)
Posted by: disrupted
Date: September 30, 2009 04:07AM

an autotit-based script to handle compressed 7z km extensions

KEM is available in 2 versions
for 9x systems(95, 98, me): http://kmext.sourceforge.net/keih/kmextman9x.7z
for NT systems(2000,xp, vista): http://kmext.sourceforge.net/keih/kmextmanNT.7z

KEM has 4 functions:
1- displays extensions in an array
2- online(web) installer
3- local installer
4- ext uninstaller

how it works:

the online installer first executes through a macro, to access the installer..right click on a kmext 7z link and select km extension



KEITH (part of KEM) will download the extension, decompresses it and extracts all files/folders in their designated destinations in kmeleon's folder.







please note, that the km extension menu command will always be greyed out(disabled) and will only be active on kmext.sf.net, this precaution is for 2 reasons:
1- ensuring the extension is in 7z format
2- ensuring the extension has the necessary uninstall ini for KEM


as an extensions manager, you can access KEM from the tools menu



clicking the drop down menu displays a list of the installed extensions



selecting the extension(by it's uninstall ini) and clicking uninstall





the ext install button triggers the KEIH local file extension installer



KEIH function's installing procedure is identical to KEITH only just for local files

note..that installing(web/local) and uninstalling extensions will close k-meleon and restart it. the functions also support kmeleons running with a loader.exe and additionally they will always delete compreg.dat and xpti.dat upon either installing or uninstalling ensuring that the components are always registered properly.

for an extension/macro to be supported by KEM, it must include an ini file containing instructions for the files that will be removed upon an uninstall..that ini file is naturally deleted as well.

for now, there are few extensions that are supported by KEM.. i've updated and uploaded about 20 or so but we have around 230 extensions and macros so updating all of them will take a while but hopefull will be done by this weekend

for now, if you'd like to test KEM.. you can download/install those extensions which have been updated

adblockplus
blockfall (game)
archive edit
capture plus

_---------------------------------------------------------------------------------

for ext/macro writers

to enable uninstall support, the package in 7z should include a folder called: "kmextensions"

inside kmextensions will be the ini file with all the necessary info for KEM to parse

here's an example of the adblock uninstall ini:
[macros]
1=adblockplus.kmm
[chrome]
1=adblockplus.jar
2=adblockplus.manifest
[components]
1=nsAdblockPlus.js
[kplugins]
1=adblockplus.dll
[plugins]

[pref]
1=adblockplus.js
2=adblockplus_extra.js
[locales]

[tools]

[scripts]

[skins]

[stylesheets]

[profile]
1=adblockplus
[root]

[strings]


this ini instructs KEM of the adblockplus files/folders that are included with the extension and must be removed upon an uninstall.

fields where the extension does not have files can be left empty without problems

explaining the fields
[macros]the extension may contain up to 5 macros .kmm or folders location: root\macros
1=
2=
3=
4=
5=
[chrome]support up to 4 files in the chrome folder.. 2 jars and 2 manifests location: root\chrome
1=
2=
3=
4=
[components]support up to 8 component files location: root\components
1=
2=
3=
4=
5=
6=
7=
8=
[kplugins]support for 1 k-plugin for each extension location: root\k-plugins
1=
[plugins]support for 4 plugins location: root\plugins
1=
2=
3=
4=
[pref]support for 2 pref files per extension location: root\defaults\pref
1=
2=
[locales]support for up to 7 locales (kml) for each extension location: root\locales
1=(e.g.) es-ES\blockfall.kml
2=others\blockfall.kml
3=
4=
5=
6=
7=
[tools]support for 5 files and or folders per extension location root\tools
1=(e.g.)bogus-extension\tutu.exe (file)
2=bugus-extension (folder)
3=bugbog\beebee.au3 (file)
4=
5=
[scripts]support for 1 script (js) per extension location: root\scripts
1=
[skins]support for 4 bitmaps per extension location: root\skins\default
1=
2=
3=
4=
[stylesheets]support for 5 stylesheets(css) per ext. location: root\styles
1=
2=
3=
4=
5=
[profile]support for 3 files and/or folders per ext in the profile folder location: active profile directory
1=
2=
3=
[root]support for 3 files in root location: root
1=
2=
3=
[strings](not implemented) active profile



special conditions; for macro, tools and profile directory locations.. the ini may contain folders (without an ext suffix) for those 3 locations only KEM can delete folders as well as files listed in those places. for example if you have an extension that is created in a subdirectory in the tools folder..no need to list all the files in that folder and simply just add the folder name which will be deleted along with any files in that folder.



Edited 1 time(s). Last edit at 10/03/2009 07:20PM by disrupted.

Re: K-Meleon Extensions Manager
Posted by: JujuLand
Date: September 30, 2009 06:56AM

ok,

but why don't you put your post under K-Meleon Extensions forum ?

A+



Mozilla/5.0 (x11; U; Linux x86_64; fr-FR; rv:38.0) Gecko/20100101 Ubuntu/12.04 K-Meleon/76.0


Web: http://jujuland.pagesperso-orange.fr/
Mail : alain [dot] aupeix [at] wanadoo [dot] fr



Ubuntu 12.04 - Gramps 3.4.9 - Harbour 3.2.0 - Hwgui 2.20-3 - K-Meleon 76.0 rc



Re: K-Meleon Extensions Manager
Posted by: jsnj
Date: September 30, 2009 07:12AM

Cool. Me likey smiling smiley Suggestion: Since the the Extensions Manager is really just an extensions installation manager, how about changing the Extensions Manager menu item into a submenu item named simply, Extensions, providing a centralized location to list all the extensions' options? The first item in the list could refer to the installer, like Install/Uninstall followed by a separator then the extensions listed below. When clicked, their options(or function for those w/o options) would initiate.Ya feel me? Just a thought.



Edited 1 time(s). Last edit at 09/30/2009 07:16AM by jsnj.

Re: K-Meleon Extensions Manager
Posted by: JujuLand
Date: September 30, 2009 07:27AM

No problem, I'm :cool: ...

For the menu, give an example of what you think of.

A+



Mozilla/5.0 (x11; U; Linux x86_64; fr-FR; rv:38.0) Gecko/20100101 Ubuntu/12.04 K-Meleon/76.0


Web: http://jujuland.pagesperso-orange.fr/
Mail : alain [dot] aupeix [at] wanadoo [dot] fr



Ubuntu 12.04 - Gramps 3.4.9 - Harbour 3.2.0 - Hwgui 2.20-3 - K-Meleon 76.0 rc





Edited 1 time(s). Last edit at 09/30/2009 07:28AM by JujuLand.

Re: K-Meleon Extensions Manager
Posted by: disrupted
Date: October 02, 2009 06:42AM

Quote
JujuLand
ok,

but why don't you put your post under K-Meleon Extensions forum ?

A+
sorry, i didn't see the new thread when i made the post..guesss things are better organised now

update (preview-only) on KEM

displays number of installed extensions, install date and a small description for the selected extension..all read from the ini.. also the array display now remeoves the ini extension suffix so as not to confuse users. changes are not only cosmetic but several improvements for uninstalling..for ext. writes..the limitations have been expanded even more..technically..no longer have to worry about how many files or folders where..for e.g. there's support for up to 20 locales. ext/macro writers just need to follow the simple template to be supported by KEM.. an additonal part have been included (info) where the dev can write a brief description about their macro etc..it's optional..if KEM can't find it..then it will just display N/A .. hope you're happy now jsnj smiling smiley

by the way, alain.. ididn't remove the locales from microrss, i just uploaded it as it is from gary's website..i added the original locales from 1.4 but haven't uploaded it yet..also making autoit scripts localisable is proving more nightmarish everyday.. follow km locale is the proper way but the functional(somewhat easier) follow the os locale.. i'm not really sure how i'm going to solve this problem

preview of latest KEM updates













those are the extensions that now have complete support for KEM

23 done..about 200 to go

Re: K-Meleon Extensions Manager
Posted by: jsnj
Date: October 02, 2009 07:06AM

Quote
disrupted
update (preview-only) on KEM

displays number of installed extensions, install date and a small description for the selected extension..all read from the ini.. also the array display now remeoves the ini extension suffix so as not to confuse users. changes are not only cosmetic but several improvements for uninstalling..for ext. writes..the limitations have been expanded even more..technically..no longer have to worry about how many files or folders where..for e.g. there's support for up to 20 locales. ext/macro writers just need to follow the simple template to be supported by KEM.. an additonal part have been included (info) where the dev can write a brief description about their macro etc..it's optional..if KEM can't find it..then it will just display N/A .. hope you're happy now jsnj smiling smiley

Was happy before. New improvements look sweet! Why (preview-only)?

Re: K-Meleon Extensions Manager
Posted by: disrupted
Date: October 02, 2009 08:42PM

i needed to test-out a few things on windows 98 first

all extensions have been updated for kem and kem is now available for download:
http://kmext.sourceforge.net/kem.htm

for extensions and macro writers, this is the template that kem supports
http://kmext.sourceforge.net/keih/kem-template.ini

Re: K-Meleon Extensions Manager
Posted by: jsnj
Date: October 02, 2009 11:25PM

Quote
disrupted
i needed to test-out a few things on windows 98 first

all extensions have been updated for kem and kem is now available for download:
http://kmext.sourceforge.net/kem.htm

for extensions and macro writers, this is the template that kem supports
http://kmext.sourceforge.net/keih/kem-template.ini

Just tested it and easily auto-installed about 40 ext from the site. Works great. Only bug is the installation date display in the manager. It reads that all of my extensions were installed on the 30th at the exact same time.

Re: K-Meleon Extensions Manager
Posted by: disrupted
Date: October 03, 2009 12:29AM

very stupid bug, thank you so much j for spotting it out.. i was concentrating so much on the info part, i forgot to do the refresh setdata at combo change for the date.. it's just setting the date for the first entry and not displaying any other

i've fixed it and uploaded revised one, download from same link

when uninstalling, be careful when testing with extensions like adblockplus or stylish, fireftp.. because the uninstaller will remove their settings files and folders from the profile so test with a secondary profile or even better test with a different kmeleon in another folder using different profile.. the uninstaller is unmerciful grinning smiley maybe it's not a very good thing but i believe an uninstall must a clean one

Re: K-Meleon Extensions Manager
Posted by: disrupted
Date: October 03, 2009 07:19PM

major update to fix a very crucial bug, please download from same links

bug:a malformed uninstall ini may turn KEM into a k-meleon uninstaller

the bug is caused by a badly written uninstall ini..by numbering any entry then leaving it blank, or having just white space or a slash in an ini field

for e.g.
[macros]
1=


or
[macros]
1=[/sub]


kem interpreted this as a path for a folder and in case above will delete the entire macros content and for some fields where the dirremove command is used, it would cause that folder to be deleted

a bad ini example like this:
[macros]
1=
2=
3=
4=
5=
[chrome]
1=
2=
3=
4=
[components]
1=
2=
3=
4=
5=
6=
7=
8=
[kplugins]
1=
[plugins]
1=
2=
3=
4=
[pref]
1=
2=
[locales]
1=
2=
3=
4=
5=
6=
7=
8=
9=
10=
11=
12=
13=
14=
15=
16=
17=
18=
19=
20=
[tools]
1=
2=
3=
4=
5=
6=
7=
8=
[scripts]
1=
2=
3=
4=
5=
6=
[skins]
1=
2=
3=
4=
[stylesheets]
1=
2=
3=
4=
5=
[profile]
1=
2=
3=
[root]
1=
2=
3=
[strings]

[info]
1=


the above ini for example will transform kem into a kmeleon uninstaller..deleting the entire kmeleon folder contents and leaving only itself kmextman.exe in that folder.. the kmeleon profile folder will also be removed. the damage is only confined to kmeleon folder(and profile) but nothing else is affected(very ashamed

although not a single extension uninstall ini is malformed or can cause kem to remove kmeleon..it's a serious bug and had to be fixed.


the update address this bug so any malformality in an uninstall ini will no longer initiate an uninstall and kem will display an error message


additionally the bad ini will be removed and will not be displayed in kem next time its opened.

every single field line is now checked separately and even one error in a single line will prevent kem from uninstalling, displaying the error message and deleting the ini.

i'm very sorry for the previous kem(kmeleon-killer), the update has been tested vigorously on windows xp and 98 with numerous different malformed ini's and the bug was completely patched.

please update kem from http://kmext.sf.net/kem.htm

all sources (rest-assurance)

# K-Meleon Macros (http://kmeleon.sourceforge.net/wiki/index.php?id=MacroLanguage)

# --------extensions uninstaller-experimental-------------------------

$_keu_path=getfolder(RootFolder);
$_profile_path=getfolder(ProfileFolder);
$_keith_path=getfolder(RootFolder)."\\Tools\\keith";

keith{
menugrayed=(substr($LinkURL,0,14)!="http://kmext.s"winking smiley;
exec($_keith_path."\\keith.exe " . $LinkURL);
}

kmextman{
exec($_keu_path."\\kmextman.exe \"".$_profile_path."\"");
}

kmextman_BuildMenu{
setmenu("&Tools",inline,keu_pag,6);
setmenu(keu_pag,macro,"Extensions Manager",kmextman,-1);
setmenu(LinkSave,inline,keith_pagina);
setmenu(keith_pagina,macro,"KM Extension",keith,1);
}

$OnInit=$OnInit."kmextman_BuildMenu;";
$macroModules=$macroModules."keu;";


; AutoIt Version: 3.3.0
; Language: blahblah
; Platform: Win9x/NT
; Author: yanni
; Script Function: kmeleon extension installer turbo helper (online/offline installer)

#NoTrayIcon
#include <GUIConstants e x.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <ProgressConstants.au3>
#Include <String.au3>
#Include <File.au3>
#Include <Array.au3>
#include <Misc.au3>

if _Singleton("KEIH",0) = 0 Then
exit
endif

$kmpath=StringTrimRight (@scriptdir, 12)

$deletable1 = ($kmpath & "\components\compreg.dat")
$deletable2 = ($kmpath & "\components\xpti.dat")
$kmbinary=($kmpath & "\k-meleon.exe")

if $CmdLine[0] = 0 Then
$extpath = FileOpenDialog("Select Extension", @WorkingDir & "", "K-Meleon Compressed Extensions (*.7z)", 1)
checker()
ElseIf $CmdLine[0] = 1 Then
$extpath =$CmdLine[1]
extsite()
EndIf

Func extsite()
$onlinecheck=StringRegExp($extpath, "(?i)http://")
if $onlinecheck=1 Then
isvalid()
Else
checker()
Endif
Endfunc

Func isvalid()
$valid=StringRegExp($extpath, "(?i)http://kmext.s")
if $valid=1 Then
onlinechecker()
Else
MsgBox(48, "KEITH Error", "Invalid website. K-Meleon extensions can only be downloaded from K-Meleon's extensions websites")
Endif
Endfunc

Func checker()
$checkfucker=StringRegExp($extpath, "(?i)7z")
if $checkfucker=0 Then
exit
Else
installshit()
Endif
Endfunc

Func onlinechecker()
$checkfucker=StringRegExp($extpath, "(?i)7z")
if $checkfucker=0 Then
MsgBox(48, "KEITH Error", "Unrecognised extension format. aborting.")
Else
onlineinstaller()
Endif
Endfunc



func installshit()
If FileExists($kmbinary) Then
ProgressOn("KEIH: installing extension, please wait..", "initalising..", "0 percent", -1, -1, 16)
$kmbinary=($kmpath & "\k-meleon.exe")
ProgressSet(5, "6 percent", "extracting files")
$7zpath =(@ScriptDir & "\7z\7z.exe")
$pend = FileGetShortName($kmpath)
ProgressSet(15, "15 percent", "extracting..")
$pendparm1 = _StringInsert($pend, "-o", 0)
$pendparm2 = ($pendparm1 & " -y")
$pendparm3 = _StringInsert($pendparm2, " ", 0)
$pendparm7z=("""" & $extpath & """")
$extparm = ("x " & $pendparm7z)
ProgressSet(25, "25 percent", "extraction completed")
$overparm = ($extparm & $pendparm3)
$finalparam =($7zpath & " " & $overparm)
;shellexecute($7zpath, $overparm)
run($finalparam, "", @SW_HIDE)
ProgressSet(65, "65 percent", "extraction completed")
;MsgBox(4096, "Test", $finalparam)
ProgressSet(85, "85 percent", "registering components")
setkm()
ProgressSet(94, "94 percent", "finalising..")
checkloader()
ProgressOff()
Winwaitactive("[CLASS:KMeleon Browser Window]", "", 5)
sleep(888)
MsgBox(64, "K-Meleon Extension Installer Helper", "Extension was installed successfully. ")
exit
Else
MsgBox(48, "Error", "Invalid directory. Make sure to select K-Meleon's Install folder ")
Endif
endfunc

Func setkm()
FileDelete($deletable1)
sleep(40)
FileDelete($deletable2)
endFunc

Func checkloader()
if process e xists("loader.exe") Then
fireloader()
else
firekm()
endIf
EndFunc

func fireloader()
$kmLoader=($kmpath & "\loader.exe")
ProcessClose("loader.exe")
sleep(20)
ProcessClose("k-meleon.exe")
sleep(88)
Run($kmbinary)
sleep(4888)
Run($kmLoader)
EndFunc

Func firekm()
While Process e xists("k-meleon.exe")
WinClose("[CLASS:KMeleon Browser Window]", "");
sleep(400);
If WinActive("K-Meleon") Then
Send("{Enter}")
EndIf
Wend
sleep(1400)
Run($kmbinary)
endFunc

Func onlineinstaller()
$penddownload=(@tempdir & "\kmextpend.7z")
$extdown = GUICreate("Ext download", 220, 32, -1, -1, BitOR($WS_DLGFRAME, $WS_POPUP, $WS_EX_TOPMOST))
$Label1 = GUICtrlCreateLabel("downloading extension. please wait...", 8, 8, 200, 15)
GUISetState(@SW_SHOW)
WinSetOnTop("Ext download", "", 1)
InetGet($CmdLine[1], $penddownload, 1, 0)
GUIdelete($extdown)
sleep(800)


ProgressSet(5, "6 percent", "extracting files")
$7zpath =(@ScriptDir & "\7z\7z.exe")
$pend = FileGetShortName($kmpath)
ProgressSet(15, "15 percent", "extracting..")
$pendparm1 = _StringInsert($pend, "-o", 0)
$pendparm2 = ($pendparm1 & " -y")
$pendparm3 = _StringInsert($pendparm2, " ", 0)
$pendparm7z=("""" & $penddownload & """")
$extparm = ("x " & $pendparm7z)
ProgressSet(25, "25 percent", "extraction..")
$overparm = ($extparm & $pendparm3)
$finalparam =($7zpath & " " & $overparm)
;shellexecute($7zpath, $overparm)
run($finalparam, "", @SW_HIDE)
ProgressSet(65, "65 percent", "extraction completed")
;MsgBox(4096, "Test", $finalparam)
ProgressSet(85, "85 percent", "registering components")
setkm()
ProgressSet(94, "94 percent", "finalising..")
checkloader()
ProgressOff()
Winwaitactive("[CLASS:KMeleon Browser Window]", "", 5)
sleep(888)
MsgBox(64, "K-Meleon Extension Installer Helper", "Extension was installed successfully. ")
exit

EndFunc


; AutoIt Version: 3.3.0
; Language: mary poppins
; Platform: Win9x/NT
; Author: yannis

#Include <File.au3>
#Include <Array.au3>
#include <Misc.au3>
#include <extprop.au3>
#include <GUIConstants e x.au3>
#include <GUIComboBox.au3>
#notrayicon

if _Singleton("KME",0) = 0 Then
exit
endif

$KEITH=(@scriptDir & "\tools\keith\keith.exe")
$KMBIN=(@scriptDir & "\k-meleon.exe")
$DEL1=(@scriptDir & "\components\xpti.dat")
$DEL2=(@scriptDir & "\components\compreg.dat")
$kmexthome=("http://kmext.sourceforge.net"winking smiley
$openhome=($KMBIN & " " & $kmexthome)

if $cmdline[0]=0 then
msgbox(48,"K-Meleon Extensions Manager Error", "Only execute the manager from inside k-meleon. ")
else
$inini=(@scriptDir & "\kmextensions")
$kmunext="*.ini"
$inipath=("pending")
$kmprefs=($CmdLine[1] & "\prefs.js")
$kmprof=($CmdLine[1] & "\")
;$testrun=("c:\windows\notepad.exe")

$FileList=_FileListToArray($inini,$kmunext)
If @Error=1 Then
openkmext()
Exit
EndIf
if $FileList= 0 Then
openkmext()
;MsgBox (64,"K-meleon Extensions Manager","You don't have any installed extensions. ")
Else
runman()
endif
endif


func runman()
$pentrim=_ArrayToString($FileList, "|", 1)
$remini=StringReplace($pentrim, ".ini", "")
$first=StringInStr($remini, "|" ,"",1)
$initial=StringMid($remini, 1, $first-1)
;msgbox(0, "test", $initial)
$hGUI = GUICreate("K-meleon Extensions Manager",304,174)
$Label1 = GUICtrlCreateLabel("Installed extensions: " & $FileList[0], 10, 3, 140, 15)
$hCombo = GUICtrlCreateCombo("", 10, 20,178,100)
$update=GUICtrlSetData($hCombo,$remini, $initial)
$hButton = GUICtrlCreateButton("Uninstall",193,18,100)
$iButton = GUICtrlCreateButton("Run Installer",193,84,100)
$eButton = GUICtrlCreateButton("kmext.sf.net",193,112,100)
$Label2 = GUICtrlCreateLabel("Note: K-meleon will be restarted on an uninstall/install", 10, 157, 290, 20)
$inipath=($inini & "\" & $FileList[_GUICtrlComboBox_GetCurSel($hCombo)+1])
$findinfo=IniRead($inipath, "info", "1", "N/A")
$date=_GetExtProperty($inipath,4)
$extinstdate= GUICtrlCreateLabel("install date: ", 11, 44, 100, 20)
$setdata=GUICtrlCreateLabel($date, 71, 44, 160, 20)
$info= GUICtrlCreateLabel("info:", 11, 67, 40, 15)
$desc= GUICtrlCreateLabel($findinfo, 11, 83, 150, 67)
GUISetState()
WinSetOnTop("K-meleon Extensions Manager", "", 1)


While 1

$msg = GUIGetMsg()
select
case $msg =$hCombo
$inipath=($inini & "\" & $FileList[_GUICtrlComboBox_GetCurSel($hCombo)+1])
$findinfo=IniRead($inipath, "info", "1", "N/A")
$date=_GetExtProperty($inipath,4)
GUICtrlSetData($desc,$findinfo)
GUICtrlSetData($setdata,$date)
endselect
select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $hButton
;MsgBox (64,"K-meleon Extensions Manager",$testrun & " " & $inini & "\" & $FileList[_GUICtrlComboBox_GetCurSel($hCombo)+1])
;$commandtest=($testrun & " " & $inini & "\" & $FileList[_GUICtrlComboBox_GetCurSel($hCombo)+1])
$inipath=($inini & "\" & $FileList[_GUICtrlComboBox_GetCurSel($hCombo)+1])

;MsgBox (64,"K-meleon Extensions Manager",$inipath)
$findmacro=IniRead($inipath, "macros", "1", "supercalafragelisticexpialido.ciaus")
$findmacro2=IniRead($inipath, "macros", "2", "supercalafragelisticexpialido.ciaus")
$findmacro3=IniRead($inipath, "macros", "3", "supercalafragelisticexpialido.ciaus")
$findmacro4=IniRead($inipath, "macros", "4", "supercalafragelisticexpialido.ciaus")
$findmacro5=IniRead($inipath, "macros", "5", "supercalafragelisticexpialido.ciaus")
$findjar=IniRead($inipath, "chrome", "1", "supercalafragelisticexpialido.ciaus")
$findmani=IniRead($inipath, "chrome", "2", "supercalafragelisticexpialido.ciaus")
$findjar2=IniRead($inipath, "chrome", "3", "supercalafragelisticexpialido.ciaus")
$findmani2=IniRead($inipath, "chrome", "4", "supercalafragelisticexpialido.ciaus")
$findcomp1=IniRead($inipath, "components", "1", "supercalafragelisticexpialido.ciaus")
$findcomp2=IniRead($inipath, "components", "2", "supercalafragelisticexpialido.ciaus")
$findcomp3=IniRead($inipath, "components", "3", "supercalafragelisticexpialido.ciaus")
$findcomp4=IniRead($inipath, "components", "4", "supercalafragelisticexpialido.ciaus")
$findcomp5=IniRead($inipath, "components", "5", "supercalafragelisticexpialido.ciaus")
$findcomp6=IniRead($inipath, "components", "6", "supercalafragelisticexpialido.ciaus")
$findcomp7=IniRead($inipath, "components", "7", "supercalafragelisticexpialido.ciaus")
$findcomp8=IniRead($inipath, "components", "8", "supercalafragelisticexpialido.ciaus")
$findkplugs=IniRead($inipath, "kplugins", "1", "supercalafragelisticexpialido.ciaus")
$findplugs1=IniRead($inipath, "plugins", "1", "supercalafragelisticexpialido.ciaus")
$findplugs2=IniRead($inipath, "plugins", "2", "supercalafragelisticexpialido.ciaus")
$findplugs3=IniRead($inipath, "plugins", "3", "supercalafragelisticexpialido.ciaus")
$findplugs4=IniRead($inipath, "plugins", "4", "supercalafragelisticexpialido.ciaus")
$findpref=IniRead($inipath, "pref", "1", "supercalafragelisticexpialido.ciaus")
$findpref2=IniRead($inipath, "pref", "2", "supercalafragelisticexpialido.ciaus")
$findloc1=IniRead($inipath, "locales", "1", "supercalafragelisticexpialido.ciaus")
$findloc2=IniRead($inipath, "locales", "2", "supercalafragelisticexpialido.ciaus")
$findloc3=IniRead($inipath, "locales", "3", "supercalafragelisticexpialido.ciaus")
$findloc4=IniRead($inipath, "locales", "4", "supercalafragelisticexpialido.ciaus")
$findloc5=IniRead($inipath, "locales", "5", "supercalafragelisticexpialido.ciaus")
$findloc6=IniRead($inipath, "locales", "6", "supercalafragelisticexpialido.ciaus")
$findloc7=IniRead($inipath, "locales", "7", "supercalafragelisticexpialido.ciaus")
$findloc8=IniRead($inipath, "locales", "8", "supercalafragelisticexpialido.ciaus")
$findloc9=IniRead($inipath, "locales", "9", "supercalafragelisticexpialido.ciaus")
$findloc10=IniRead($inipath, "locales", "10", "supercalafragelisticexpialido.ciaus")
$findloc11=IniRead($inipath, "locales", "11", "supercalafragelisticexpialido.ciaus")
$findloc12=IniRead($inipath, "locales", "12", "supercalafragelisticexpialido.ciaus")
$findloc13=IniRead($inipath, "locales", "13", "supercalafragelisticexpialido.ciaus")
$findloc14=IniRead($inipath, "locales", "14", "supercalafragelisticexpialido.ciaus")
$findloc15=IniRead($inipath, "locales", "15", "supercalafragelisticexpialido.ciaus")
$findloc16=IniRead($inipath, "locales", "16", "supercalafragelisticexpialido.ciaus")
$findloc17=IniRead($inipath, "locales", "17", "supercalafragelisticexpialido.ciaus")
$findloc18=IniRead($inipath, "locales", "18", "supercalafragelisticexpialido.ciaus")
$findloc19=IniRead($inipath, "locales", "19", "supercalafragelisticexpialido.ciaus")
$findloc20=IniRead($inipath, "locales", "20", "supercalafragelisticexpialido.ciaus")
$findtools=IniRead($inipath, "tools", "1", "supercalafragelisticexpialido.ciaus")
$findtools2=IniRead($inipath, "tools", "2", "supercalafragelisticexpialido.ciaus")
$findtools3=IniRead($inipath, "tools", "3", "supercalafragelisticexpialido.ciaus")
$findtools4=IniRead($inipath, "tools", "4", "supercalafragelisticexpialido.ciaus")
$findtools5=IniRead($inipath, "tools", "5", "supercalafragelisticexpialido.ciaus")
$findtools6=IniRead($inipath, "tools", "6", "supercalafragelisticexpialido.ciaus")
$findtools7=IniRead($inipath, "tools", "7", "supercalafragelisticexpialido.ciaus")
$findtools8=IniRead($inipath, "tools", "8", "supercalafragelisticexpialido.ciaus")
$findscripts=IniRead($inipath, "scripts", "1", "supercalafragelisticexpialido.ciaus")
$findscripts2=IniRead($inipath, "scripts", "2", "supercalafragelisticexpialido.ciaus")
$findscripts3=IniRead($inipath, "scripts", "3", "supercalafragelisticexpialido.ciaus")
$findscripts4=IniRead($inipath, "scripts", "4", "supercalafragelisticexpialido.ciaus")
$findscripts5=IniRead($inipath, "scripts", "5", "supercalafragelisticexpialido.ciaus")
$findscripts6=IniRead($inipath, "scripts", "6", "supercalafragelisticexpialido.ciaus")
$findskins1=IniRead($inipath, "skins", "1", "supercalafragelisticexpialido.ciaus")
$findskins2=IniRead($inipath, "skins", "2", "supercalafragelisticexpialido.ciaus")
$findskins3=IniRead($inipath, "skins", "3", "supercalafragelisticexpialido.ciaus")
$findskins4=IniRead($inipath, "skins", "4", "supercalafragelisticexpialido.ciaus")
$findstyles=IniRead($inipath, "stylesheets", "1", "supercalafragelisticexpialido.ciaus")
$findstyles2=IniRead($inipath, "stylesheets", "2", "supercalafragelisticexpialido.ciaus")
$findstyles3=IniRead($inipath, "stylesheets", "3", "supercalafragelisticexpialido.ciaus")
$findstyles4=IniRead($inipath, "stylesheets", "4", "supercalafragelisticexpialido.ciaus")
$findstyles5=IniRead($inipath, "stylesheets", "5", "supercalafragelisticexpialido.ciaus")
$findpfiles=IniRead($inipath, "profile", "1", "supercalafragelisticexpialido.ciaus")
$findpfiles2=IniRead($inipath, "profile", "2", "supercalafragelisticexpialido.ciaus")
$findpfiles3=IniRead($inipath, "profile", "3", "supercalafragelisticexpialido.ciaus")
$findroot1=IniRead($inipath, "root", "1", "supercalafragelisticexpialido.ciaus")
$findroot2=IniRead($inipath, "root", "2", "supercalafragelisticexpialido.ciaus")
$findroot3=IniRead($inipath, "root", "3", "supercalafragelisticexpialido.ciaus")
;MsgBox(48, "test macro", $findmacro, 10)
;MsgBox(48, "test jar", $findjar, 10)
;MsgBox(48, "test mani", $findmani, 10)
;MsgBox(48, "test plug", $findplugs1, 10)
;MsgBox(48, "test loc1", $findloc1, 10)
;MsgBox(48, "test loc2", $findloc2, 10)
;MsgBox(48, "test loc3", $findloc3, 10)
;MsgBox(48, "test skins1", $findskins1, 10)
;MsgBox(48, "test skins2", $findskins2, 10)
;MsgBox(48, "test skins3", $findskins3, 10)
;MsgBox(48, "test skins4", $findskins4, 10)
$retpath=(@scriptdir)

if $findmacro=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmacro=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findmacro2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmacro2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findmacro3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmacro3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findmacro4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmacro4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findmacro5=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmacro5=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findjar=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findjar=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findmani=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmani=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findjar2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findjar2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findmani2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmani2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findcomp1=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp1=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findcomp2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findcomp3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findcomp4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findcomp5=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp5=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findcomp6=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp6=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findcomp7=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp7=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findcomp8=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findcomp8=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findkplugs=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findkplugs=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findplugs1=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findplugs1=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

if $findplugs2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findplugs2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findplugs3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findplugs3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

;---------------------------------------------------

if $findplugs4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findplugs4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findpref=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findpref=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findpref2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findpref2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc1=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc1=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc5=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc5=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc6=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc6=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc7=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc7=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc8=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc8=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc9=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc9=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc10=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc10=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc11=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc11=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc12=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc12=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc13=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc13=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc14=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc14=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc15=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc15=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc16=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc16=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc17=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc17=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc18=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc18=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc19=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc19=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findloc20=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findloc20=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools5=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools5=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools6=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools6=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools7=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools7=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findtools8=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findtools8=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findscripts=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findscripts=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findscripts2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findscripts2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findscripts3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findscripts3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findscripts4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findscripts4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findscripts5=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findscripts5=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findscripts6=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findscripts6=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findskins1=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findskins1=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findskins2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findskins2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findskins3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findskins3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findskins4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findskins4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findstyles=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findstyles=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findstyles2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findstyles2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findstyles3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findstyles3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findstyles4=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findstyles4=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findstyles5=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findstyles5=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findpfiles=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findpfiles=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findpfiles2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findpfiles2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findpfiles3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findpfiles3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findroot1=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findroot1=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findroot2=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findroot2=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else


if $findroot3=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findroot3=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

$retpath=(@scriptdir)
guidelete()
$retmacro=($retpath &"\macros\" & $findmacro)
$retmacro2=($retpath &"\macros\" & $findmacro2)
$retmacro3=($retpath &"\macros\" & $findmacro3)
$retmacro4=($retpath &"\macros\" & $findmacro4)
$retmacro5=($retpath &"\macros\" & $findmacro5)
$retjar=($retpath &"\chrome\" & $findjar)
$retmani=($retpath &"\chrome\" & $findmani)
$retjar2=($retpath &"\chrome\" & $findjar2)
$retmani2=($retpath &"\chrome\" & $findmani2)
$retcomp1=($retpath &"\components\" & $findcomp1)
$retcomp2=($retpath &"\components\" & $findcomp2)
$retcomp3=($retpath &"\components\" & $findcomp3)
$retcomp4=($retpath &"\components\" & $findcomp4)
$retcomp5=($retpath &"\components\" & $findcomp5)
$retcomp6=($retpath &"\components\" & $findcomp6)
$retcomp7=($retpath &"\components\" & $findcomp7)
$retcomp8=($retpath &"\components\" & $findcomp8)
$retkplugs=($retpath &"\kplugins\" & $findkplugs)
$retplugs1=($retpath &"\plugins\" & $findplugs1)
$retplugs2=($retpath &"\plugins\" & $findplugs2)
$retplugs3=($retpath &"\plugins\" & $findplugs3)
$retplugs4=($retpath &"\plugins\" & $findplugs4)
$retpref=($retpath &"\defaults\pref\" & $findpref)
$retpref2=($retpath &"\defaults\pref\" & $findpref2)
$retloc1=($retpath &"\locales\" & $findloc1)
$retloc2=($retpath &"\locales\" & $findloc2)
$retloc3=($retpath &"\locales\" & $findloc3)
$retloc4=($retpath &"\locales\" & $findloc4)
$retloc5=($retpath &"\locales\" & $findloc5)
$retloc6=($retpath &"\locales\" & $findloc6)
$retloc7=($retpath &"\locales\" & $findloc7)
$retloc8=($retpath &"\locales\" & $findloc8)
$retloc9=($retpath &"\locales\" & $findloc9)
$retloc10=($retpath &"\locales\" & $findloc10)
$retloc11=($retpath &"\locales\" & $findloc11)
$retloc12=($retpath &"\locales\" & $findloc12)
$retloc13=($retpath &"\locales\" & $findloc13)
$retloc14=($retpath &"\locales\" & $findloc14)
$retloc15=($retpath &"\locales\" & $findloc15)
$retloc16=($retpath &"\locales\" & $findloc16)
$retloc17=($retpath &"\locales\" & $findloc17)
$retloc18=($retpath &"\locales\" & $findloc18)
$retloc19=($retpath &"\locales\" & $findloc19)
$retloc20=($retpath &"\locales\" & $findloc20)
$rettools=($retpath &"\tools\" & $findtools)
$rettools2=($retpath &"\tools\" & $findtools2)
$rettools3=($retpath &"\tools\" & $findtools3)
$rettools4=($retpath &"\tools\" & $findtools4)
$rettools5=($retpath &"\tools\" & $findtools5)
$rettools6=($retpath &"\tools\" & $findtools6)
$rettools7=($retpath &"\tools\" & $findtools7)
$rettools8=($retpath &"\tools\" & $findtools8)
$retscripts=($retpath &"\scripts\" & $findscripts)
$retscripts2=($retpath &"\scripts\" & $findscripts2)
$retscripts3=($retpath &"\scripts\" & $findscripts3)
$retscripts4=($retpath &"\scripts\" & $findscripts4)
$retscripts5=($retpath &"\scripts\" & $findscripts5)
$retscripts6=($retpath &"\scripts\" & $findscripts6)
$retskins1=($retpath &"\skins\default\" & $findskins1)
$retskins2=($retpath &"\skins\default\" & $findskins2)
$retskins3=($retpath &"\skins\default\" & $findskins3)
$retskins4=($retpath &"\skins\default\" & $findskins4)
$retstyles=($retpath &"\styles\" & $findstyles)
$retstyles2=($retpath &"\styles\" & $findstyles2)
$retstyles3=($retpath &"\styles\" & $findstyles3)
$retstyles4=($retpath &"\styles\" & $findstyles4)
$retstyles5=($retpath &"\styles\" & $findstyles5)
$retpfiles=($CmdLine[1] & "\" & $findpfiles)
$retpfiles2=($CmdLine[1] & "\" & $findpfiles2)
$retpfiles3=($CmdLine[1] & "\" & $findpfiles3)
$retroot1=($retpath & "\" & $findroot1)
$retroot2=($retpath & "\" & $findroot2)
$retroot3=($retpath & "\" & $findroot3)
;MsgBox(48, "test loc3", $retmacro, 10)
;MsgBox(48, "test comp3", $retcomp3, 10)
;MsgBox(48, "test locale1", $retloc1, 10)
;MsgBox(48, "test locale3", $retloc3, 10)
;MsgBox(48, "test tools", $rettools, 10)
;MsgBox(48, "test sk1", $retskins1, 10)
;MsgBox(48, "test sk2", $retskins2, 10)
;MsgBox(48, "test sk3", $retskins3, 10)
;MsgBox(48, "test sk4", $retskins4, 10)
ProcessClose("loader.exe")
ProcessClose("k-meleon.exe")
sleep(400)
FileDelete($retmacro)
FileDelete($retmacro2)
FileDelete($retmacro3)
FileDelete($retmacro4)
FileDelete($retmacro5)
DirRemove($retmacro, 1)
DirRemove($retmacro2, 1)
DirRemove($retmacro3, 1)
DirRemove($retmacro4, 1)
DirRemove($retmacro5, 1)
FileDelete($retjar)
FileDelete($retmani)
FileDelete($retjar2)
FileDelete($retmani2)
FileDelete($retcomp1)
FileDelete($retcomp2)
FileDelete($retcomp3)
FileDelete($retcomp4)
FileDelete($retcomp5)
FileDelete($retcomp6)
FileDelete($retcomp7)
FileDelete($retcomp8)
FileDelete($retkplugs)
FileDelete($retplugs1)
FileDelete($retplugs2)
FileDelete($retplugs3)
FileDelete($retplugs4)
FileDelete($retpref)
FileDelete($retpref2)
FileDelete($retloc1)
FileDelete($retloc2)
FileDelete($retloc3)
FileDelete($retloc4)
FileDelete($retloc5)
FileDelete($retloc6)
FileDelete($retloc7)
FileDelete($retloc8)
FileDelete($retloc9)
FileDelete($retloc10)
FileDelete($retloc11)
FileDelete($retloc12)
FileDelete($retloc13)
FileDelete($retloc14)
FileDelete($retloc15)
FileDelete($retloc16)
FileDelete($retloc17)
FileDelete($retloc18)
FileDelete($retloc19)
FileDelete($retloc20)
FileDelete($rettools)
FileDelete($rettools2)
FileDelete($rettools3)
FileDelete($rettools4)
FileDelete($rettools5)
FileDelete($rettools6)
FileDelete($rettools7)
FileDelete($rettools8)
DirRemove($rettools, 1)
DirRemove($rettools2, 1)
DirRemove($rettools3, 1)
DirRemove($rettools4, 1)
DirRemove($rettools5, 1)
DirRemove($rettools6, 1)
DirRemove($rettools7, 1)
DirRemove($rettools8, 1)
FileDelete($retscripts)
FileDelete($retscripts2)
FileDelete($retscripts3)
FileDelete($retscripts4)
FileDelete($retscripts5)
FileDelete($retscripts6)
DirRemove($retscripts)
DirRemove($retscripts2)
DirRemove($retscripts3)
DirRemove($retscripts4)
DirRemove($retscripts5)
DirRemove($retscripts6)
FileDelete($retskins1)
FileDelete($retskins2)
FileDelete($retskins3)
FileDelete($retskins4)
DirRemove($retskins1)
DirRemove($retskins2)
DirRemove($retskins3)
DirRemove($retskins4)
FileDelete($retstyles)
FileDelete($retstyles2)
FileDelete($retstyles3)
FileDelete($retstyles4)
FileDelete($retstyles5)
FileDelete($retroot1)
FileDelete($retroot2)
FileDelete($retroot3)
DirRemove($retroot1)
DirRemove($retroot2)
DirRemove($retroot3)
FileDelete($retpfiles)
FileDelete($retpfiles2)
FileDelete($retpfiles3)
DirRemove($retpfiles, 1)
DirRemove($retpfiles2, 1)
DirRemove($retpfiles3, 1)
sleep(100)
FileDelete($inipath)
FileDelete($DEL1)
FileDelete($DEL2)

$cleanclose=("user_pref" & "(" &"""" & "kmeleon.plugins.sessions.cleanShutdown" & """" & "," & " true" & ");")
FileWriteLine($kmprefs, $cleanclose)
sleep(48)

run($KMBIN)
Winwaitactive("[CLASS:KMeleon Browser Window]", "", 5)
sleep(888)

$findextname=StringTriMRight($findmacro, 4)
$message=("The extension: " & $findextname & " has been uninstalled successfully. ")
MsgBox(64, "KEU: uninstall complete", $message, 8)
exit

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf



Case $msg = $iButton
run($KEITH)
exit
Case $msg = $eButton
run($openhome)
exit
endselect
WEnd
endfunc

func openkmext()
$ask=MsgBox(32+4, "K-meleon Extensions Manager","You don't have any installed extensions. Would you like to download extensions?")
If $ask=7 Then
Exit
Else
run($openhome)
endif
endfunc


Re: K-Meleon Extensions Manager
Posted by: desga2
Date: October 04, 2009 12:08PM

Sorry disrupted but I think that your code could be more simple (more easy to read) if you change this repeated sections:
if $findmacro=("") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
elseif $findmacro=("\") then
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
else

By something like this:
if $findmacro=("") OR $findmacro=("\") then
IniError()
else 

func IniError()
GUICtrlSetData($desc,"can't uninstall: malformed ini, please reinstall this extension or contact the author")
FileDelete($inipath)
endfunc

If you repeat some code in a lot of lines is better convert it in a function.

K-Meleon in Spanish



Edited 1 time(s). Last edit at 10/04/2009 12:13PM by desga2.

Re: K-Meleon Extensions Manager
Posted by: Matt
Date: October 04, 2009 12:20PM

The Extension Manager works great - good job disrupted!

Quote
disrupted
also making autoit scripts localisable is proving more nightmarish everyday.. follow km locale is the proper way but the functional(somewhat easier) follow the os locale.. i'm not really sure how i'm going to solve this problem

And I thought it would be easy to localize the dialogs from Extensions Manager simply by translating the quoted texts in keit.au3 and kmextman.au3, but it's not sad smiley.I hope You find a soultion.

How about offering a separate download link on kmext.sf.net for other languages, similar to K-Meleon en-US, de-DE, fr-FR etc?
I searched the Web and found a lot of extensions translated into polish (a few done by myself ), but on the Extensions Page you can find only a small amount with pl-PL locales included. It would make all the addons for K-Meleon more popular among the non-english speaking users. Of cource I could collect all existing translations and put them into .7-zip packages.

Re: K-Meleon Extensions Manager
Posted by: disrupted
Date: October 04, 2009 05:41PM

desga, i'm not sure if this will work because it will be a function setting a command for a different function so guictrlsetdata will not know what gui to modify..i'm doing a slight update for kem(it will be a surprise) and test adding the seperate function

actually matt after struggling with localising autoits for more than 3 months, i came to the conclusion that the best way is that for every language; the script is translated just as you've mentioned..it's not very hard..the text that will need translating in every script is very little..mainly labels and buttons. then the script is compiled and uploaded to a seperate folder..

for example german extensions:
kmext.sf.net/files_de/
etc

the slight problem which will need efforts form everyone is translating all pages to all languages supported by km..that is:
es, de, fr, pl, and ru

the translators will be responsible for:
1- maintaining the translated pages for their language
2- translating autoit scripts and compiling them

extensions which are chromes and macros only do not need to be localised and uploaded to the localised files folder(files_es, files_de etc) as many chrome(mozilla) have the locales and if not it's very easy to add a locale nside the jar and make a kml for the macro

translating and compiling autoit is very easy..just translating the few lines necessary in the script and compiling with autoit..for every extension, it won't take more than a minute ..this way better solution than messing up the scripts and rewriting everything so it can work from an external locale file.. using locales is alright for macros..in jars, it's no problem..the locale can be added inside and identified in the manifest.

just remember those guidelines for compiling autoit
1- the compiled file (exe) name must not be changed because it's called from the macro and sometimes it's called from other scripts
2- universal scripts(those that work on all windows version) must be compiled in ansi mode
3- scripts for nt must be compiled in unicode
4- scripts for windows 9x must be compiled in ansi

when you open the auoit compiler, just select ansi or unicode radio button before compiling..or a nice way i do it through the context menu of au3 scripts is adding 2 commands for au3 files in folder optons>file types
first command"compile in ansi": "I:\program files\autoIT\Aut2Exe\Aut2ExeA.exe" /in "%l" /icon "I:\program files\autoIT\Aut2Exe\Icons\main9x.ico"

second command "compile unicode": "I:\program files\autoIT\Aut2Exe\Aut2Exe.exe" /in "%l" /icon "I:\program files\autoIT\Aut2Exe\Icons\main.ico"

the problem is who is willing to participate in the project.
i can translate autoit scripts into german but that's about it..my crappy german is not good enough for translating a website.. maybe gunter can help tongue sticking out smiley

french will be for alain, desga and aniatziag can do spanish, and anyone from russian team will do the russian(watsonrus or alex) and ofcourse you will do polish smiling smiley


remeber kmext is an open project for anyone to join in just like kmeleon, and several people have all the site details(passwort/ftp etc)

the pages are not too many..maybe 12 or so with not that much text either..mainly focus on extension pages and help, kplugins, plugins and disclaimer and credits pages are not important/not much to translate

if you like to translate the scripts and compile+ translating kmext.sf.net, i'll send you site ftp so you can upload..my email is openbsd6 AT googlemail , or you can contact gunter who has all the details.


here's a preview of what i hope will become of kmext one day:
http://kmext.sourceforge.net/int-preview2.htm

Re: K-Meleon Extensions Manager
Posted by: JujuLand
Date: October 04, 2009 06:57PM

For me, as specific versions as languages is a bad option.

Without using autoit, all the extensions had been translated using kml file (generally for menus and boxes used in macros) and locales in jar.

As K-Meleon handles locales, if the jar haven't the locale required, en-US is used by default. Same feature for kml files. So, all the extensions I put online have by default 4 kml files (es, de, fr, other). when installing, the setup looks for locales folder and installs all the needed kml. When a locale is found different from es, de, fr, it installs a untranslated kml file in this folder, and the user can translate it in his language (else en is used).

Wouldn't it be possible to read the strings in an inifile and to set variables which will be used in dialogs like I do it in SetDefault ?

A+



Mozilla/5.0 (x11; U; Linux x86_64; fr-FR; rv:38.0) Gecko/20100101 Ubuntu/12.04 K-Meleon/76.0


Web: http://jujuland.pagesperso-orange.fr/
Mail : alain [dot] aupeix [at] wanadoo [dot] fr



Ubuntu 12.04 - Gramps 3.4.9 - Harbour 3.2.0 - Hwgui 2.20-3 - K-Meleon 76.0 rc





Edited 1 time(s). Last edit at 10/04/2009 06:58PM by JujuLand.

Re: K-Meleon Extensions Manager
Posted by: disrupted
Date: October 04, 2009 07:40PM

i don't know.. can you send me the source for setdafult .. in any case kmext.sf.net should be translated to langauges supported by kmeleon.

here's a new update for kem, option to edit the macro from the extension


this can be useful if user wants to change the menu command name or set under another menu.

in case extension(like a kplugin) does not have a macro:


Re: K-Meleon Extensions Manager
Posted by: JujuLand
Date: October 04, 2009 08:09PM

In fact, after rereading it, I'm not sure that the SetDefault sample, even it's this type of technic which ought to be used, is the better sample.

Well, I send it. To make the read simplest, in function .onInit which is the start point, we set language which is set by a parameter. If a parameter is given, we jump to ReadLocale and translate variables (call Translate_Strings, else we call Messages_En.

Locale messages are now set and used in strings and dialogs.

NSIS his a language which isn't very usefull for this type of operations, so I have had big difficults to make it. I hope and think that autoIt3 is easier for this purpose, and I also think you will easily make it.
Instead of nlf file, you will probably use inifile which will be easy to use with autoIt.

Last thing, prefer use the locales\xx-YY folder to put and read the translations.
This folder is already use for k-Meleon and macros translations.

A+



Mozilla/5.0 (x11; U; Linux x86_64; fr-FR; rv:38.0) Gecko/20100101 Ubuntu/12.04 K-Meleon/76.0


Web: http://jujuland.pagesperso-orange.fr/
Mail : alain [dot] aupeix [at] wanadoo [dot] fr



Ubuntu 12.04 - Gramps 3.4.9 - Harbour 3.2.0 - Hwgui 2.20-3 - K-Meleon 76.0 rc



Attachments: SetDefault.nsi (38.5 KB)   french.nlf (4.1 KB)  
Re: K-Meleon Extensions Manager
Posted by: bclarky12
Date: January 24, 2010 01:36AM

I'm sorry, but i just can not get this program to work. When I unzip on it and click the icon, it says you must run it from within kmeleon. But the program does not seem to be installed in kmeleon so I cannot get any grey menu bars by right clicking or anything like that. Is there a certain place i have to extract the extensions manager/downloader file to? Thank you so much for your time

Re: K-Meleon Extensions Manager
Posted by: SoerenB
Date: January 24, 2010 03:13AM

Hi,
"extract to the K-Meleon folder" ...means: putting the files&folders from the unzipped extensions folder into their K-Meleons counterparts, e.g. those from "\kemNT4\kmextensions\" go to "\K-Meleon\kmextensions\", et cetera.
kmextman.exe and -.au3 go to the \K-Meleon main folder.
Unzippers usually can do this, but how to make them do it is not always ituitive to the newbie.

Cheers
SoerenB

K-Meleon forum is powered by Phorum.