Peace & Protection 4.00 — File Browser

PeaceProtection4.00v4.0 / PeaceProtection4.00v4.0 / SCRIPT / ALIAS1.MRC

ALIAS1.MRC — 22.4 KB — Download this file

; #= P&P -a
; **********************
; Unsorted routines
; **********************

;;;###*** Not yet divided ***###;;;

; _series variable token
; can track any number of tokens- first set stored in %variable, next set in %variable1, %variable2, etc.
; %variable0 contains the number of the last set, or is null if only one set in %variable
_series {
  var %where = $1 $+ % [ $+ [ $1 ] $+ [ 0 ] ]
  :loop
  if ($calc($len(% [ $+ [ %where ] ] ) + $len($2)) < 400) % [ $+ [ %where ] ] = % [ $+ [ %where ] ] $2
  else {
    inc % [ $+ [ $1 ] $+ [ 0 ] ]
    %where = $1 $+ % [ $+ [ $1 ] $+ [ 0 ] ]
    goto loop
  }
}
; $_countseries(variable) counts total tokens from a series generated by _series
_countseries {
  var %where,%total = 0,%new
  :loop
  %new = $numtok(% [ $+ [ $1 ] $+ [ %where ] ] ,32)
  if (%new) {
    inc %total %new
    inc %where
    goto loop
  }
  return %total
}

; Opposite of wildtok- returns token num that matches given token
; $_searchtok(tokens,tok,chr)
_searchtok {
  var %pos = 1,%total = $numtok($1,$3)
  :loop
  if ($gettok($1,%pos,$3) iswm $2) return %pos
  if (%pos < %total) { inc %pos | goto loop }
  return 0
}

; Date and time in default formats (current or given)
_date return $date($iif($1,$1,$ctime),$_cfgi(format.date))
_time return $time($iif($1,$1,$ctime),$_cfgi(format.time))
_datetime return $date($iif($1,$1,$ctime),$_cfgi(format.datetime))

_poptop var %poptop = $strip($replace($_rec(topic,$1),&&channel&&,#)) | if ($len(%poptop) > 75) return $left(%poptop,71) ... | return %poptop

; prevents reading options n0 thru n5 more than once every X seconds
; usage- $_optn(line,token) etc
_optn if (%_opt.n [ $+ [ $1 ] ] == $null) set -u8 %_opt.n [ $+ [ $1 ] ] $readini -n $mircini options n [ $+ [ $1 ] ] | return $gettok(%_opt.n [ $+ [ $1 ] ] ,$2,44)

; Like $_optn but for events-default
; usage- $_edef(token) etc
_edef if (%_ev.def == $null) set -u8 %_ev.def $readini -n $mircini events default | return $gettok(%_ev.def,$1,44)

; PW fog
_pw.enc var %ret,%size = $len($1) | :loop | %ret = %ret $+ $chr($calc(160 - $asc($mid($1,%size,1)))) | if (%size > 1) { dec %size | goto loop } | return %ret

_merge return $remove($1-,$chr(32))
_tf2o return $iif($1,On,Off)
_o2tf return $iif($1 == On,1,0)
_dur return $iif($1 > 86399, [ $int($calc($1 / 86400)) ] day) $iif($1 > 3599, [ $int($calc($1 % 86400 / 3600)) ] hr) $iif($1 > 59, [ $int($calc($1 % 3600 / 60)) ] min) $calc($1 % 60) s
_round if ($len($gettok($1,2,46)) <= $2) return $1 | return $round($1,$2)
_p if ($2 == 0) return 0% | return $_round($calc($1 * 100 / $2),2) $+ %
:www return $1 $+ http://www.pairc.com/pnp/ $+ $1
:email return $1 $+ pnp@pairc.com $+ $1
_known if ($notify($1)) return 1 | if ($2) return $iif($remtok($level($2),=black,44) != $dlevel,1,0) | return $iif($remtok($level($address($1,5)),=black,44) != $dlevel,1,0)
; Prefixes each char with + or -
_fixmode {
  var %final,%bit = +,%pos = 1
  :loop
  if ($mid($1,%pos,1)) {
    if ($ifmatch isin -+) %bit = $ifmatch
    else %final = %final $+ %bit $+ $mid($1,%pos,1)
    inc %pos | goto loop
  }
  return %final
}
; $_convmode(modes,char,default)
; Finds char in a fixmoded string and returns 1 or 0 for + or -, or default if not present (0 if not given)
_convmode if (- [ $+ [ $2 ] ] isin $1) return 0 | if (+ [ $+ [ $2 ] ] isin $1) return 1 | if ($3- != $null) return $3- | return 0

;
; Run an URL or e-mail
;
http saveini | if ($readini -n $mircini files browser != $null) run $ifmatch $1- | elseif (*://* iswm $1-) run $1- | else run http:// $+ $1-
mailto saveini | if ($readini -n $mircini files emailer != $null) run $ifmatch mailto: $+ $1- | else run mailto: $+ $1-

;
; Size in kb/meg/etc
;
_size {
  if ($1 == $null) return (FileNotFound)
  if ($1 < 10240) return $1bytes
  if ($1 < 10240000) return $round($calc($1 / 1024),1) $+ k
  return $round($calc($1 / 1048576 + 0.00001),1) $+ meg
}

;
; Recent target trackers (unique to one mirc)
;

; _recseen type value [suffix [max]] (one word; suffix is ignored in duplication searchs and is usually +; tacked on using $chr(127); max is max number to save- defaults to 10)
_recseen var %old = $wildtok(%> [ $+ [ $1 ] ] ,$2*,1,32) | %old = $gettok($iif(%old,$remtok(%> [ $+ [ $1 ] ] ,%old,1,32),%> [ $+ [ $1 ] ] ),1- [ $+ [ $calc($iif($4,$4,10) - 1) ] ] ,32) | %> [ $+ [ $1 ] ] = $2 $+ $3 $iif(%old,%old)
; $_getrec(type[,curr]) (if curr is in list, returns next [null if last], otherwise returns first [null if none])
_getrec {
  if ($wildtok(%> [ $+ [ $1 ] ] ,$2*,1,32)) return $gettok($gettok(%> [ $+ [ $1 ] ] ,$calc($findtok(%> [ $+ [ $1 ] ] ,$ifmatch,1,32) + 1),32),1,127)
  return $gettok($gettok(%> [ $+ [ $1 ] ] ,1,32),1,127)
}
; $_refsufx(type,token) Returns suffix for given token
_refsufx return $gettok($wildtok(%> [ $+ [ $1 ] ] ,$2*,1,32),2-,127)
; $_refsufn(type,token) Returns suffix for given number
_refsufn return $gettok($gettok(%> [ $+ [ $1 ] ] ,$2,32),2-,127)
; $_grabrec(type,n) Returns by number
_grabrec if ($gettok(%> [ $+ [ $1 ] ] ,$2,32)) return $gettok($ifmatch,1,127) | return
; $_poprec(type,n[,x]) Used for popups (x is added to number if present)
_poprec if ($_grabrec($1,$2)) return $calc($2 + [ $3 ] ) $+ . $replace($ifmatch,&,&&) | return
; _setrec /cmd /alt type [p] (pops up commands in current window from a recseen list; p adds a space to end of cmd)
; if setting is proper, auto-runs command. (if not a [p] command) /alt is used if nick has + suffix
_setrec {
  if (=* iswm $active) var %editact = $editbox(chat [ $right($active,-1) ] )
  else var %editact = $editbox($active)
  if (($_cfgi(recent.auto)) && ($4 != p)) {
    if ($_getrec($3)) { %_lastsrec = $ifmatch | if ($_refsufx($3,%_lastsrec) == +) $2 %_lastsrec | else $1 %_lastsrec }
  }
  elseif (($gettok(%editact,1,32) == $1) || ($gettok(%editact,1,32) == $2)) {
    if ($_getrec($3,$gettok(%editact,2,32))) {
      %_lastsrec = $ifmatch
      editbox -a $+ $4 $iif($_refsufx($3,$gettok(%_lastsrec,1,44)) == +,$2,$1) %_lastsrec
    }
    else { editbox -a | unset %_lastsrec }
  }
  elseif ($_getrec($3)) { %_lastsrec = $ifmatch | editbox -a $+ $4 $iif($_refsufx($3,%_lastsrec) == +,$2,$1) %_lastsrec }
}

;
; Scheme data
;

; Plays a sound scheme file
; _ssplay code
_ssplay {
  if (($inwave == $false) && ((%!away == $null) || ($2))) {
    var %line = $calc($findtok(connect disconnect youquit startup - chatreq filereq senddone getdone fileerror - newquery notice opnotice wallop snotice - youkick youop youdeop invite anykick - realnotify realunotify fakenotify fakeunotify - setaway setback setautoaway pager - attacked protection nicktaken selflag cantjoin clones otheralert - othererror complete question confirm,$1,1,32) + 25)
    %line = $read -tnl [ $+ [ %line ] ] $_cfg(display.dat)
    if ((%line != .) && ($exists(%line))) .splay " $+ %line $+ "
  }
}

; $_msg(code[,msg])
; Returns a message from current scheme; default if none; uses msg if present
_msg {
  ; Get message
  if ($2) return $_premsg($2-)
  var %line = $read -tns [ $+ [ $1 ] ] script\scheme.dat,%found = $read -tnl [ $+ [ $readn ] ] $_cfg(display.dat)
  if (%found ==  ) return
  if (%found == $null) %found = $_p2s($gettok(%line,1,32))
  return $_premsg(%found)
}

; $_msgwrap(wrap,code[,msg])
; Used for kick wrappers / etc.
_msgwrap {
  ; Get message
  if ($3) var %msg = $3-
  else {
    var %line = $read -tns [ $+ [ $2 ] ] script\scheme.dat
    var %msg = $read -tnl [ $+ [ $readn ] ] $_cfg(display.dat)
    if (%msg == $null) %msg = $_p2s($gettok(%line,1,32))
    if (!Random:* iswm %msg) %msg = $read -n $gettok(%msg,2-,58)
  }
  var %line = $read -tns [ $+ [ $1 ] ] script\scheme.dat
  var %wrap = $read -tnl [ $+ [ $readn ] ] $_cfg(display.dat)
  if (%wrap ==  ) %wrap = &msg&
  elseif (%wrap == $null) %wrap = $_p2s($gettok(%line,1,32))
  if (!Random:* iswm %wrap) %wrap = $read -n $gettok(%wrap,2-,58)
  if (&msg& !isin %wrap) %wrap = %wrap &msg&
  return $_premsg($replace(%wrap,&msg&,%msg))
}

; $_premsg(msg)
; Does random files, &col*&, &ver&, &me&, &[&, &]&, and &counters&
_premsg {
  var %tag,%sel,%col = 02 03 04 05 06 07 10 12 13 14
  if (!Random:* iswm $1) var %msg = $read -n $gettok($1-,2-,58)
  else var %msg = $1-
  ; Replace colors
  :loopC
  if (&col isin %msg) {
    %tag = & $+ $gettok($right(%msg,$calc(- $pos(%msg,&col,1))),1,38) $+ &
    if (%tag isin %msg) {
      %sel = $gettok(%col,$_pprand($numtok(%col,32)),32)
      %col = $remtok(%col,%sel,32)
      %msg = $replace(%msg,%tag, [  $+ [ %sel ] ] )
      if (%col) goto loopC
    }
  }
  ; Replace counters
  :loopN
  if (&count isin %msg) {
    %tag = & $+ $gettok($right(%msg,$calc(- $pos(%msg,&count,1))),1,38) $+ &
    if (%tag isin %msg) {
      %sel = $_cfgx($mid(%tag,7,1),%tag)
      inc %sel
      _cfgxw $mid(%tag,7,1) %tag %sel
      %msg = $replace(%msg,%tag,%sel)
      goto loopN
    }
  }
  ; Replace some codes
  return $replace(%msg,&ver&,$:ver,&[&,$:[,&]&,$:],&me&,$me)
}

; $_finalmsg(msg)
; finishes up a message (doing $identifier stuff)
_finalmsg {
  if ($1 == $null) return
  if ($ !isin $1-) return $_stripout($1-)
  var %ret = $replace($1-,$chr(32),$chr(141),!$,$chr(128))
  if ($left(%ret,1) == $chr(128)) %ret = $chr(141) $+ %ret
  var %num = $numtok(%ret,128)
  if (%num > 1) {
    var %ret2 = $gettok(%ret,1,128),%cur = 2
    :loop
    %ret2 = %ret2 $+ $ [ $+ [ $gettok($gettok(%ret,%cur,128),1,36) ] ] $+ $gettok($gettok(%ret,%cur,128),2-,36)
    if (%cur < %num) { inc %cur | goto loop }
    %ret = %ret2
  }
  if (<$ isin %ret) %ret = $_dofm¹($replace(%ret,<$,$chr(128),>$,$chr(129)))
  return $_stripout($replace(%ret,$chr(141),$chr(32)))
}
_dofm¹ if ($chr(128) isin $1-) { var %todo = $chr(141) $+ $mid($1-,$pos($1-,$chr(128),1),$len($1-)),%todo2 = $chr(141) $+ $1- | return $_dofm²($_dofm³(%todo),%todo2) } | if ($1) return $1- | return
;;; old routine- did double eval IE <$upper$ $me>$upper$
;_dofm² return $gettok($2-,1,128) $+ $replace($ [ $+ [ $gettok($gettok($gettok($2-,2-,128),1,129),1,36) $+ ( [ $replace($_dofm¹($left($gettok($1,2-,36),-1)),$chr(141),$chr(32)) ] ) ] ] ,$chr(32),$chr(141)) $+ [ $_dofm¹($gettok($mid($2-,$calc($pos($2-,$chr(128),1) + $len($1)),$len($2-)),2-,36)) ]
;;; new routine- doesn't do commas IE <$r$1,9>$r$ BUT otherwise is perfect
_dofm² return $gettok($2-,1,128) $+ $replace($ [ $+ [ $gettok($gettok($gettok($2-,2-,128),1,129),1,36) $+ ( ] ] $replace($_dofm¹($left($gettok($1,2-,36),-1)),$chr(141),$chr(32)) ),$chr(32),$chr(141)) $+ [ $_dofm¹($gettok($mid($2-,$calc($pos($2-,$chr(128),1) + $len($1)),$len($2-)),2-,36)) ]
_dofm³ {
  var %got,%try = 1
  :loop
  %got = $mid($1-,$pos($1-,$chr(128),1),$calc($pos($1-,$chr(129),%try) - $pos($1-,$chr(128),1) +1))
  if ($count(%got,$chr(128)) == $count(%got,$chr(129))) return %got
  if (%try < $count($1-,$chr(129))) { inc %try | goto loop }
  return ERR
}
_stripout if (%`strip.auto) return $strip($1-) | return $1-

;
; Basic commands
;

j join $1-
join if (-* iswm $1) join $1 $iif($2,$_patch($2)) $3- | elseif ($1 == 0) .raw join 0 | elseif ($1) .raw join $_patch($1) $2- | else _qhelp /join

pj jp $1-
jp if ($1) { .raw join $_patch($1) $2- | ping $_patch($1) } | else _qhelp /jp

p part $1-
leave part $1-
part {
  if (($_ischan($1)) || ($gettok($_patch($1),1,44) ischan)) .raw part $_patch($1) : $+ $_finalmsg($replace($_msg(part,$2-),&chan&,$_patch($1)))
  elseif (#) .raw part # : $+ $_finalmsg($replace($_msg(part,$1-),&chan&,#))
  else _error You must specify a channel to /part.(or use /part in a channel window)
}

rejoin cycle $1-
cycle {
  if ($1 !ischan) {
    if ($active ischan) tokenize 32 $active
    else _error You must use /cycle in a channel.(or specify a channel to rejoin)
  }
  .raw part $1 :rejoining | .raw join $1 $chan($1).key
  disprs $1 $:cl($1) Rejoining...
}

hop { if ($1 == $null) _qhelp /hop | if ($active !ischan) _error You must use /hop in a channel | dispa $:cl($active) Hopping to $:s($1) $+ ... | .part $active $2- | .raw join $_patch($1) }

nick {
  if ($1 == $null) _qhelp /nick
  nick $1-
  if ($2 != $null) _recent nick 9 $2
  _recent nick 9 $1
}

q query $1-
query {
  var %switch,%who,%num = 1
  if ($1 == -n) { %switch = -n | tokenize 32 $2- }
  if ($1 == $null) _qhelp /query
  var %whom = $_ncs(44,$1)
  :loop
  %who = $gettok(%whom,%num,44)
  query %switch %who
  if ($2 == /me) describe %who $3-
  elseif ($2 != $null) msg %who $2-
  %who = $_renlogfile(%who)
  if ($exists($logdir [ $+ [ %who ] ] )) _recent log 9 %who
  if (%num < $numtok($1,44)) { inc %num | goto loop }
}

w whois $1-
whois {
  if ($1) {
    if ($1 == $2) {
      var %who = $_nc($1)
      .raw whois %who %who
    }
    else {
      var %who = $_ncs(44,$_s2c($1-))
      .raw whois %who
    }
    _whois.src %who
  }
  elseif ($_targ(=?)) {
    .raw whois $ifmatch
    %-whois.src. [ $+ [ $ifmatch ] ] = $active
  }
  else _qhelp /whois
  .enable #-whoisno
}
; IF you use _Q.whois you MUST unset %-mwho.* in your queued alias!
; also MUST make sure you are queing a single nick (no commas, no wildcards)
_Q.whois %-wwq. [ $+ [ $1 ] ] = $2- | .raw whois $1 | .enable #-whoisno

ww whowas $1-
whowas if ($1 == $null) _qhelp /whowas | .raw whowas $1- | _whois.src $1-

ew {
  if ($1) {
    var %who = $_ncs(44,$_s2c($1-))
    :loop
    if ($gettok(%who,1,44)) {
      .raw whois $ifmatch $ifmatch
      _whois.src $ifmatch
      %who = $deltok(%who,1,44)
      goto loop
    }
  }
  elseif ($_targ(=?)) {
    .raw whois $ifmatch $ifmatch
    %-whois.src. [ $+ [ $ifmatch ] ] = $active
  }
  else _qhelp /ew
  .enable #-whoisno
}

_whois.src {
  if ((* isin $1) || (? isin $1)) return
  if ($chan) var %src = $chan
  elseif ($active == Status Window) var %src = -si2
  elseif (($chr(32) isin $active) || (@* iswm $active)) var %src = -ai2
  else var %src = $active
  var %num = 1 | :loop | if ($gettok($1,%num,44)) { %-whois.src. [ $+ [ $ifmatch ] ] = %src | inc %num | goto loop }
}
server {
  var %server = $1-
  if ($1 == !) { server | return }
  elseif ($1 == $null) %server = $_entry(0,$_s2p($_cfgi(lastserv)),Enter server to connect to-(you may also specify a port))
  elseif ($2 == ?) {
    if ($server($1).port) %server = $1 $+  $+ $gettok($ifmatch,$_pprand($numtok($ifmatch,44)),44)
    else %server = $1
    %server = $_entry(0,%server,Enter server and port to connect to-)
  }
  if ($server) quit server hop
  if ((%server isnum) && ($len(%server) >= 4)) {
    if ($server == $null) server $gettok($_cfgi(lastserv),1,32) %server
    else server $server %server
  }
  else server %server
}
quit {
  if ($server == $null) _error Can't quit IRC.(you kind of have to be connected to IRC first)
  var %quitmsg = $_finalmsg($replace($_msg(quit,$1-),&online&,$duration($online)))
  inc -u3 %-quithalt
  if (%quitmsg == $null) {
    .raw quit :
    if (%-quithalt < 2) disps Quit message- (none)
  }
  else {
    quit %quitmsg
    if (%-quithalt < 2) disps Quit message- %quitmsg
    _recent2 quit 9 %quitmsg
  }
  %-quitrequest = 1
  return %quitmsg
}
names {
  if ($1 == $null) {
    if ($active ischan) .raw names $active
    else _error You must use /names in a channel window.(or specify a channel to view a names list for)
  }
  elseif (* isin $1-) .raw names $1-
  else .raw names $_patch($1-)
}

dns {
  if ($1 == $null) { dns | return }
  elseif ($1 == -d) { dns $2- | return }
  elseif ($1 == -c) { .dns -c | unset %_showdns | return }
  var %dns,%type
  if ($1 == -h) { %dns = $2 | %type = -h }
  elseif (. isin $1) { if (@ isin $1) %dns = $gettok($1,2,64) | else %dns = $1 | %type = -h }
  else { %dns = $_nc($1) | %type = -n }
  if ($show) { _Q.dns _dnsshow _dnsfail %type %dns | <dns.start> %dns %type }
  else _Q.dns halt halt %type %dns
}
; _Q.dns command errorcmd -h/-n nick/addr1 nick/addr2 ...
; command is _s2p, run for each resolved ($nick/$raddress/$iaddress/$naddress set)
; errorcmd is _s2p, run if resolve fails (etc. set) halt is ok etc.
; -h for hosts, -n for nicks
_Q.dns if (($3 == -n) && ($server == $null)) .dns -d notconnected | :loop | %_dns. [ $+ [ $iif(@ isin $4,$gettok($4,2-,64),$4) ] ] = $1-2 | .dns -d $iif($3 == -h,-h) $4 | if ($5) { tokenize 32 $1-3 $5- | goto loop }

;
; Titlebar junk
;
_title.win {
  var %away = %!away
  if (%away) {
    if ($mid(%!title,5,1)) return [[ $+ $gettok(%away,6-,32))) $+ ]] for [[ $+ $_dur($calc($ctime - $gettok(%away,2,32))) $+ ]] - Log[ $+ $iif(%!logging,%_awaylog.^,off) $+ ]]
    else return [[ $+ $gettok(%away,6-,32))) $+ ]] for [[ $+ $_dur($calc($ctime - $gettok(%away,2,32))) $+ ]]
  }
  elseif ($active ischan) return [[ $+ $nick($active,0) @ $+ $nick($active,0,o) + $+ $nick($active,0,v,o) %`popupmark $+ $nick($active,0,r) $+ ]] on [[ $+ $active $+ ]] %-titleavg. [ $+ [ $active ] ]
  elseif ($_targ(=?)) return [[ $+ $ifmatch $+ ]] on [[ $+ $_title.win²($ifmatch) $+ ]]
  elseif ($server) return [[ $+ $usermode $+ ]] on [[ $+ $server $port $+ ]]
  else return [offline]
}
_title.win² {
  var %num = $comchan($1,0),%ret
  :loop
  if (%num) {
    %ret = %ret $_stch($1,$comchan($1,%num))
    dec %num | goto loop
  }
  if (%ret) return %ret
  return ??
}
_upd.title {
  if (%_in.flash) return
  if (%`title.bar) {
    var %title = %!title,%bar = $iif($mid(%title,1,1),%!net) $iif($mid(%title,1,2) == 11,:) $iif($mid(%title,2,1),$me) $iif((%-self.lag) && ($mid(%title,3,1)), [ [[ $+ [ %-self.lag ] $+ ]] ] )
    if (%bar) %bar = - %bar
    if ($mid(%title,4,1)) %bar = %bar - $iif(%_locked.title,%_locked.title,$_title.win)
    if ($mid(%title,6,1)) { if (%!pager) %bar = %bar - Pager[ $+ %_newpages $+ / $+ %_totalpages $+ ]] | else %bar = %bar - Pager[off] }
    if ($mid(%title,7,1)) %bar = %bar - $_time
    if ($mid(%title,8,1)) if ($idle > 90) %bar = %bar - Idle $_dur($idle)
    if (%_title.note) %bar = - %_title.note %bar
    titlebar %bar
  }
}
_new.active %_last.active = $active | _upd.title | %_timedclose = $remtok(%_timedclose,$active,1,32) | if ($active ischan) window -w " $+ $active $+ " | elseif (($query($active)) || (=* iswm $active) || ($istok(%!@close,$active,32))) window -w $active | elseif ($active == Status Window) window -w "Status Window"
_lock.tb %_locked.title = $_title.win | .timer.chktitle off
_unlock.tb unset %_locked.title | .timer.chktitle -om 0 100 if ($active != % $+ _last.active) _new.active
_title.note %_title.note = $1- | .timer.titlenote -o 1 16 unset % $+ _title.note
flash {
  if (($1 == $null) || ($appactive)) {
    unset %_in.flash | flash | _upd.title
    .timer.unflash? off
  }
  else {
    %_in.flash = 1 | titlebar $1- | flash $1-
    if ($_cfgi($iif(%!away,flash.away,flash.here))) .timer.unflash1 -o 1 $ifmatch flash
    .timer.unflash2 -om 0 100 if ($appactive) flash
  }
}

; $_stch(nick,#chan)
; Returns #chan, @#chan, or +#chan for on, opped, or voiced on given channel
_stch return $_stsym($1,$2) $+ $2
; $_stsym(nick,#chan)
; Returns nothing, @, or + for on, opped, or voiced on given channel
_stsym if ($1 isop $2) return @ | if ($1 isvo $2) return + | return

; **********************
; Function keys
; **********************

f1 _setrec /notice /onotice notice p
sf1 if ($mouse.key & 2) _setrec /chat /whowas user | else _setrec /query /whowas user px
cf1 _setrec /whois /whowas user
f2 if ($_targ(=?#)) ping $active | else _error You must use F2 in a channel, query, or chat.(F2 pings the current window)
cf2 if ($active ischan) avglag $active | elseif (@Ping* iswm $active) { _dowclose $active | window -c $active } | else _error You must use CtrlF2 in a channel.(CtrlF2 views the latest average ping)
sf2 if ($mouse.key & 2) sp | elseif (@Ping* iswm $active) window -n $active | elseif ($active ischan) pwin $active | else _error You must use ShiftF2 in a channel.(ShiftF2 views stored pings)
sf8 _setrec /ping /ping clones
cf9 {
  if (%_nickrc) {
    dispa $:n(%_nickrc) Nick retake cancelled
    .timer.nickretake off | unset %_nickrc
  }
  elseif (%_nickretake) {
    dispa $:n(%_nickretake) You will take this nick as soon as it is available; Press $:s(CtrlF9) again to cancel
    %_nickrc = %_nickretake
    _retakecheck
  }
}
f11 if ($server) fav j | else server
sf11 {
  if ($mouse.key & 2) _setrec /ign /ign user px
  else {
    if ($gettok($editbox($active),1,32) == /join) var %last = $_getrec(chan,$gettok($editbox($active),2,32)))
    else var %last = $_getrec(chan)
    :loop
    if ($me ison %last) {
      %last = $_getrec(chan,%last)
      goto loop
    }
    if (%last) {
      if ($_cfgi(recent.auto)) join %lawt
      else editbox -ap /join %last
    }
    else editbox -a
  }
}
cf11 _setrec /server /server serv px
f12 if (%!away) { if (+q isin $gettok(%!away,3,32)) qb | else back } | else away
sf12 {
  if ($mouse.key & 2) {
    if (%!away) { if (+q isin $gettok(%!away,3,32)) qb | else back }
    awaylog
  }
  else pager v
}
cf12 if (@AwayLog* iswm $active) { _dowclose $active | window -c $active } | else awaylog

;
; "Color/talker" identifiers
;
_pat.rand {
  var %num = $numtok($1,46),%pos = $len($2-),%text = $replace($2-,$chr(32),),%tok,%ret
  :loop | %tok = $gettok($1,$_pprand(%num),46) | if (%tok == $) var %tok | %ret = %tok $+ $mid(%text,%pos,1) $+ %ret | if (%pos > 1) { dec %pos | goto loop }
  return $replace(%ret,,$chr(32))
}
colori return $_pat.rand(02.03.04.05.06.07.09.10.12.13,$1-)
color2i return $_pat.rand(01.02.03.04.05.06.07.09.10.12.13.14.15,$1-)
funkyi return $_pat.rand(02.03.04.05.06.07.09.10.12.13.02.03.04.05.06.07.09.10.12.13.02.03.04.05.06.07.09.10.12.13,$1-)
ulinei _pat.rand .$ $1- | if (2 // $count($result,)) return $result | return $result $+ 
boldi _pat.rand .$ $1- | if (2 // $count($result,)) return $result | return $result $+ 
codei _pat.rand ...$ $1- | var %cdi | if (2 \\ $count($result,)) %cdi = %cdi $+  | if (2 \\ $count($result,)) %cdi = %cdi $+  | return $result $+ %cdi
uvoweli return $replace($lower($1-),a,A,e,E,i,I,o,O,u,U,y,Y)
lvoweli return $replace($upper($1-),A,a,E,e,I,i,O,o,U,u,Y,y)

_cfade {
  var %ret,%tok = 1,%len = $len($2-),%str = $replace($2-,$chr(32),),%sect = $int($calc(%len / $numtok($1,46))) + 1,%extra = $calc(%len % $numtok($1,46)) + 1
  :loop
  dec %extra | if (%extra == 0) dec %sect
  %ret = %ret $+  $+ $gettok($1,%tok,46) $+ $left(%str,%sect)
  %str = $right(%str,$calc(- %sect))
  if (%tok < $numtok($1,46)) { inc %tok | goto loop }
  return $replace(%ret,,$chr(32))
}

_u return  $+ $1- $+ 
_b return  $+ $1- $+ 
_r return  $+ $1- $+ 
_k return  $+ $1- $+ 
f10 halt