Peace & Protection 4.00 — File Browser
PeaceProtection4.00v4.0 / PeaceProtection4.00v4.0 / SCRIPT / ADDON.MRC
ADDON.MRC — 16.52 KB — Download this file
; #= P&P -rs
; ########################################
; Peace & Protection
; Addon support
; ########################################
;
; Addons
;
alias addons addon
alias addon {
var %addon,%num,%steps,%cur,%file,%count,%loadto,%cmd
if ($1) {
if ($2 == $null) _qhelp /addon $1
%addon = $replace($_rel.fn($2-),/,\)
if ($_averify(%addon) == 0) _error That is not a valid P&P addon.The file may be corrupted or for a later version of P&P.
}
if ($1 == d) {
; delete
if ($istok(%!addon.ids, [ $readini -n %addon addon id ] ,32)) _error That addon is installed!Uninstall it before deleting.
_okcancel 1 Delete the $readini -n %addon addon name addon entirely?
; Delete, phase one (leave .ppa for last)
%count = 1
:loopD1
%file = $readini -n %addon files %count
if (%file) {
%file = $nofile(%addon) $+ %file
if (%file != %addon) {
.remove " $+ %file $+ "
if ($exists(%file)) _error Unable to delete ' $+ %file $+ '
}
inc %count
goto loopD1
}
; Delete, phase two
%count = 1
:loopD2
%file = $readini -n %addon other %count
if (%file) {
%file = $nofile(%addon) $+ %file
.remove " $+ %file $+ "
if ($exists(%file)) _error Unable to delete ' $+ %file $+ '
inc %count
goto loopD2
}
; Last file
.remove " $+ %addon $+ "
if ($exists(%addon)) _error Unable to delete ' $+ %addon $+ '
disps Addon ' $+ %addon $+ ' successfully deleted.
if ($dialog(addons)) _recurse addon
halt
}
if ($1 == i) {
if ($_averify2(%addon)) _error One or more required files are missing.The file ' $+ $ifmatch $+ ' is missing.
if ($istok(%!addon.ids, [ $readini -n %addon addon id ] ,32)) _error That addon is already installed!Uninstall it or restart P&P if you are having problems.
_progress.1 Installing $readini -n %addon addon name
; Count files to be loaded
%count = 1
:loopL2
if ($readini -n %addon files %count) { inc %count | goto loopL2 }
dec %count
; Prepare meter
%steps = $calc(%count + 3) | %cur = 1
%loadto = $script(0) - 2
; Load 3.20 compatibility?
if (($readini -n %addon addon ppver < 4.00) && ($script(addon320.mrc) == $null)) {
_progress.2 $int($calc(%cur / %steps * 100)) Loading 3.20 compatibility...
.load -rs $+ %loadto script\addon320.mrc
_broadcast .load -rs script\addon320.mrc
}
; Load addon files
%num = 1
:loopL3
%file = $nofile(%addon) $+ [ $readini -n %addon files %num ]
_progress.2 $int($calc(%cur / %steps * 100)) Loading %file
.load -rs $+ %loadto " $+ %file $+ "
_broadcast .load -rs $+ %loadto " $+ %file $+ "
inc %loadto
inc %cur
if (%num < %count) { inc %num | goto loopL3 }
; Cleanup (notify other mircs, update loaded states)
_progress.2 $int($calc(%cur / %steps * 100)) Cleaning up
inc %cur
%!addon.ids = $addtok(%!addon.ids, [ $readini -n %addon addon id ] ,32)
%!addon.codes = $addtok(%!addon.codes, [ $readini -n %addon addon code ] ,32)
_cfgxw addons ids %!addon.ids
_cfgxw addons [ $readini -n %addon addon id ] %addon
_broadcast % $+ !addon.ids = %!addon.ids
_broadcast % $+ !addon.codes = %!addon.codes
if ($readini -n %addon addon ppver < 4.00) {
_pnp320compat
_broadcast _pnp320compat
}
; Popups and interfaces
_progress.2 $int($calc(%cur / %steps * 100)) Updating popups
_apopups
%!addon.i = $_addon.names(4)
_progress.2 100 Addon installed!
%cmd = $readini -n %addon addon config
if ($dialog(addons)) _recurse addon
if (%cmd) { window -c @Progress | %cmd }
halt
}
if ($1 == u) {
if ($istok(%!addon.ids, [ $readini -n %addon addon id ] ,32) == $null) _error That addon is not installed!Restart P&P if you are having problems.
; Unload command? Clear vars? Windows? Dialogs? Timers?
%cmd = $readini -n %addon addon unload | if (%cmd) %cmd
%cmd = $readini -n %addon addon vars | if (%cmd) unset [ %cmd ]
%cmd = $readini -n %addon addon windows
if (%cmd) {
var %windows = $window(0)
:loopW
if (%windows) {
if ($_searchtok(%cmd,$window(%windows),32)) {
_dowcleanup $window(%windows)
window -c $window(%windows)
}
dec %windows | goto loopW
}
}
%cmd = $readini -n %addon addon dialogs
if (%cmd) {
var %dialogs = $dialog(0)
:loopD
if (%dialogs) {
if ($_searchtok(%cmd,$dialog(%dialogs),32)) dialog -x $dialog(%dialogs)
dec %dialogs | goto loopD
}
}
%cmd = $readini -n %addon addon timers
if (%cmd) {
var %timer = $numtok(%cmd,32)
:loopT
if (%timer) {
.timer [ $+ [ $gettok(%cmd,%timer,32) ] ] off
dec %timer | goto loopT
}
}
%cmd = $readini -n %addon addon sockets
if (%cmd) {
var %socks = $numtok(%cmd,32)
:loopS
if (%socks) {
sockclose $gettok(%cmd,%socks,32)
dec %socks | goto loopS
}
}
%cmd = $readini -n %addon addon vars2
if (%cmd) {
var %vars = $numtok(%cmd,32)
:loopV
if (%vars) {
`set $gettok(%cmd,%vars,32)
dec %vars | goto loopV
}
}
_progress.1 Uninstalling $readini -n %addon addon name
; Count files to be unloaded
%count = 1
:loopU1
if ($readini -n %addon files %count) { inc %count | goto loopU1 }
dec %count
; Prepare meter
%steps = $calc(%count + 3) | %cur = 1
; Unload addon files
%num = 1
:loopU2
%file = $script( [ $readini -n %addon files %num ] )
_progress.2 $int($calc(%cur / %steps * 100)) Unloading %file
.timer 1 0 .unload -rs " $+ %file $+ "
_broadcast .unload -rs " $+ %file $+ "
inc %cur
if (%num < %count) { inc %num | goto loopU2 }
; Cleanup (notify other mircs, update loaded states)
_progress.2 $int($calc(%cur / %steps * 100)) Cleaning up
inc %cur
%!addon.ids = $remtok(%!addon.ids, [ $readini -n %addon addon id ] ,32)
%!addon.codes = $remtok(%!addon.codes, [ $readini -n %addon addon code ] ,32)
_cfgxw addons ids %!addon.ids
_cfgxw addons $readini -n %addon addon id
_broadcast % $+ !addon.ids = %!addon.ids
_broadcast % $+ !addon.codes = %!addon.codes
; Popups and interfaces
_progress.2 $int($calc(%cur / %steps * 100)) Updating popups
_apopups
%!addon.i = $_addon.names(4)
_progress.2 100 Addon uninstalled!
if ($dialog(addons)) _recurse addon
halt
}
if ($1 == n) {
if ($window(@Addon)) { clear @Addon | window -a @Addon }
else _window 2.1 -alkd -t11 @Addon $_center(450,320) @Addon
titlebar @Addon Info - $2-
aline @Addon Addon: $+ $:h( [ $readini -n %addon addon name ] )
if ($readini -n %addon addon version != $null) aline @Addon Version: $+ $ifmatch
aline @Addon For PnP: $+ $readini -n %addon addon ppver
if ($readini -n %addon addon author != $null) aline @Addon Author: $+ $ifmatch
if ($readini -n %addon addon email != $null) aline @Addon E-Mail: $+ $:s($ifmatch) (double-click to e-mail)
if ($readini -n %addon addon url != $null) aline @Addon Homepage: $+ $:s($ifmatch) (double-click to visit)
if ($readini -n %addon notes 1 != $null) {
aline @Addon $chr(9)
aline @Addon Info: $+ $ifmatch
%num = 2
:notes | %cmd = $readini -n %addon notes %num | if (%cmd != $null) { aline @Addon $+ $iif($ifmatch != -,$ifmatch, ) | inc %num | goto notes }
}
if ($readini -n %addon addon group != $null) {
aline @Addon $chr(9)
aline @Addon Group: $+ $ifmatch
}
aline @Addon $chr(9)
aline @Addon Addon file: $+ $nofile($2-) $+ $:s($nopath($2-))
aline @Addon Scripts: $+ $nofile($2-) $+ $:s( [ $readini -n %addon files 1 ] )
%num = 2
:files
if ($readini -n %addon files %num != $null) { aline @Addon $+ $nofile($2-) $+ $:s($ifmatch) | inc %num | goto files }
%num = 1
:other
%cmd = $readini -n %addon other %num
if (%cmd != $null) { aline @Addon $iif(%num == 1,Other files:) $+ $+ $nofile($2-) $+ $:s(%cmd) | inc %num | goto other }
aline @Addon $chr(9)
aline @Addon (Double-click a filename to view it in notepad)
window -b @Addon
halt
}
if ($1 == c) {
if ($istok(%!addon.ids, [ $readini -n %addon addon id ] ,32) == $null) _error That addon is not installed!You cannot configure an addon that is not installed.
%cmd = $readini -n %addon addon config
if (%cmd == $null) _doerror Sorry- This addon has no configuration.Check the addon's documentation for assistance.
%cmd
halt
}
if ($1 == h) {
if ($istok(%!addon.ids, [ $readini -n %addon addon id ] ,32) == $null) _error That addon is not installed!You cannot get help on an addon that is not installed.
%cmd = $readini -n %addon addon help
if (%cmd == $null) _doerror Sorry- This addon has no defined help.Try reading any text files that came with the addon.
%cmd
halt
}
window -hnl @.files
%num = $findfile($mircdir,*.ppa,0,@.files)
%num = $line(@.files,0)
if (%num == 0) { window -c @.files | _error No addon files found!Unzip any addons to $mircdiraddons\ and try again. }
if ($dialog(addons)) { did -r addons 1,2 | dialog -v addons }
else dialog -md addons addons
var %error = 0
:loopF
%file = $line(@.files,%num)
%cur = $readini -n %file addon ppver
if (%cur > $:bver) %error = 2 %file
elseif (%cur !isnum) %error = 1 %file
else did -a addons $iif($istok(%!addon.ids, [ $readini -n %file addon id ] ,32),1,2) $readini -n %file addon name $chr(160) ( $+ %file $+ )
if (%num > 1) { dec %num | goto loopF }
window -c @.files
if (1* iswm %error) $_doerror($gettok(%error,2-,32),Erroneous addon file!This is not a legitimate P&P addon, or the file is corrupted.)
if (2* iswm %error) $_doerror($gettok(%error,2-,32),Unusable addon file!This addon is for P&P, [ $readini -n [ $gettok(%error,2-,32) ] addon ppver ] ,.)
}
alias _averify if (($readini -n $1- addon ppver !isnum) || ($readini -n $1- addon ppver > $:bver) || ($readini -n $1- addon id == $null) || ($readini -n $1- addon code == $null) || ($readini -n $1- addon name == $null) || ($readini -n $1- files 1 == $null)) return 0 | return 1
alias _averify2 {
var %num = 1
:loop1
var %file = $readini -n $1- files %num
if (%file) {
%file = $nofile($1-) $+ %file
if ($exists(%file)) { inc %num | goto loop1 }
return %file
}
%num = 1
:loop2
%file = $readini -n $1- other %num
if (%file) {
%file = $nofile($1-) $+ %file
if ($exists(%file)) { inc %num | goto loop2 }
return %file
}
return
}
; Update addon popups
alias _apopups {
var %num = 1,%mtypes = nicklist query channel status
:winp
var %bit = $gettok(%mtypes,%num,32)
window -hl @.adpopups $+ %bit
aline -hl @.adpopups $+ %bit menu %bit $chr(123)
aline -hl @.adpopups $+ %bit Misc.
if (%num < 4) { inc %num | goto winp }
window -hl @.adpopups
aline @.adpopups ; #= P&P -rs 0
aline @.adpopups ; ########################################
aline @.adpopups ; Peace & Protection
aline @.adpopups ; Addon popups (*auto-generated*)
aline @.adpopups ; ########################################
aline @.adpopups menu menubar $chr(123)
window -hls @.apops
; Get addon names
var %file,%name,%pop,%popup,%cfg,%help,%num = $numtok(%!addon.ids,32)
if (%num < 1) { aline @.adpopups $!iif(($mouse.key & 2) || ($mid(%`popups.1,9,1) != 0),Addons...):addon | goto nope }
aline @.adpopups $!iif(($mouse.key & 2) || ($mid(%`popups.1,8,1) != 0),Addons)
:loop1
%file = $_cfgx(addons,$gettok(%!addon.ids,%num,32))
%name = $readini -n %file addon popup
if (%name == $null) %name = $readini -n %file addon name
aline @.apops %name $+ $+ %file
if (%num > 1) { dec %num | goto loop1 }
; Write popups
%num = 1
:loop2
%name = $line(@.apops,%num)
if (%name) {
aline @.adpopups . $+ $gettok(%name,1,127)
%file = $gettok(%name,2,127)
; Special popups?
%pop = 1
:loop3
%popup = $readini -n %file menu %pop
if (%popup != $null) { aline @.adpopups .. $+ %popup | inc %pop | goto loop3 }
; Misc. popups?
var %mtype = 1
:loopmt
var %bit = $gettok(%mtypes,%mtype,32),%pop = 1
:loopmt2
%popup = $readini -n %file %bit %pop
if (%popup != $null) { aline @.adpopups $+ %bit . $+ %popup | inc %pop | goto loopmt2 }
if (%mtype < 4) { inc %mtype | goto loopmt }
%cfg = $readini -n %file addon config
%help = $readini -n %file addon help
aline @.adpopups ..-
if (%cfg != $null) aline @.adpopups ..Configure...: $+ %cfg
if (%help != $null) aline @.adpopups ..Help...: $+ %help
aline @.adpopups ..-
aline @.adpopups ..Info...:addon n %file
aline @.adpopups ..Uninstall:addon u %file
inc %num | goto loop2
}
aline @.adpopups .-
aline @.adpopups .More...:addon
:nope
aline @.adpopups $chr(125)
savebuf @.adpopups $_cfg(adpopups.mrc)
%num = 1
:winp2
%bit = $gettok(%mtypes,%num,32)
loadbuf -t $+ %bit @.adpopups $+ %bit script\miscmenu.dat
aline @.adpopups $+ %bit $chr(125)
savebuf -a @.adpopups $+ %bit $_cfg(adpopups.mrc)
window -c @.adpopups $+ %bit
if (%num < 4) { inc %num | goto winp2 }
close -@ @.apops @.adpopups
_broadcastp .unload -rs " $!+ $!script(adpopups.mrc) $!+ " $chr(124) .load -rs2 $_cfg(adpopups.mrc)
.timer 1 0 .unload -rs " $+ $script(adpopups.mrc) $+ " $chr(124) .load -rs2 $_cfg(adpopups.mrc)
}
menu @Addon {
dclick:{
var %type,%payload,%num = $1
:loop
if ($left($line(@Addon,%num),1) == $chr(9)) { dec %num | goto loop }
%type = $gettok($line(@Addon,%num),1,9)
%payload = $strip($remtok($line(@Addon,$1),%type,1,9))
if (%type == E-Mail:) mailto $gettok(%payload,1,32)
elseif (%type == Homepage:) http $gettok(%payload,1,32)
elseif ((%type == Addon file:) || (%type == Other files:) || (%type == Scripts:)) run notepad.exe %payload
}
}
;
; Addon dialog
;
dialog addons {
title "P&P Addons"
size -1 -1 400 364
box "Installed &addons", 11, 10 10 380 150
list 1, 20 30 230 140, sort
button "I&nformation...", 101, 260 30 120 25, default
button "&Uninstall", 102, 260 62 120 25
button "&Configure...", 103, 260 94 120 25
button "&Help on addon...", 104, 260 126 120 25
box "&More addons", 12, 10 170 380 150
list 2, 20 190 230 140, sort
button "In&formation...", 201, 260 190 120 25
button "&Install", 205, 260 222 120 25
button "&Delete...", 206, 260 254 120 25
button "Cl&ose", 21, 110 330 80 25, cancel
button "H&elp", 22, 210 330 80 25, disable
}
on *:DIALOG:addons:sclick:1:did -t $dname 101 | did -u $dname 2
on *:DIALOG:addons:sclick:2:did -t $dname 201 | did -u $dname 1
on *:DIALOG:addons:dclick:*:var %addon = $did($did,$did($did).sel) | addon n $left($gettok(%addon,$numtok(%addon,40),40),-1)
on *:DIALOG:addons:sclick:21:return
on *:DIALOG:addons:sclick:*:{
var %addon = $did($left($did,1),$did($left($did,1)).sel)
if (%addon == $null) return
_juryrig addon $mid(nuchid,$right($did,1),1) $left($gettok(%addon,$numtok(%addon,40),40),-1)
}
;
; Addon info identifier- (loaded)
;
; $_addon.names(n)
; 1 = names (commaspace sep)
; 2 = id/ver pairs (space sep)
; 3 = codes (space sep)
; 4 = calculate interfaces (returns interfaces available)
alias _addon.names {
var %ln,%get,%id,%ppa,%names,%num = 1,%addons = $_cfgx(addons,ids),%old
if ($1 == 4) unset %!addon.i.*
if (%addons) {
:loop
%id = $gettok(%addons,%num,32)
%ppa = $_cfgx(addons,%id)
if ($exists(%ppa)) {
if ($1 == 1) %names = %names $readini -n %ppa addon name $+ ,
elseif ($1 == 2) %names = %names %id $+ / $+ $readini -n %ppa addon version
elseif ($1 == 3) %names = %names $readini -n %ppa addon code
else {
%ln = $read -s[interfaces] %ppa
%ln = $readn + 1
:loop2
%get = $read -nl [ $+ [ %ln ] ] %ppa
if (([* !iswm %get) && (#* !iswm %get) && (%get)) {
%names = $addtok(%names,$gettok($ifmatch,1,61),32)
%old = %!addon.i. [ $+ [ $gettok($ifmatch,1,61) ] ]
%!addon.i. [ $+ [ $gettok($ifmatch,1,61) ] ] = $addtok(%old,$gettok($ifmatch,2-,61),44)
inc %ln
goto loop2
}
}
}
if (%num < $numtok(%addons,32)) { inc %num | goto loop }
if ($1 == 1) return $left(%names,-1)
return %names
}
return
}