ascii {
var %c = 1
var %ret
while (%c <= $len($1-)) {
/* use $mid($1-,%c,1) gets char from position stored in %c
* use $asc() to convert character to ascii
* use $base to convert to base 16, and 0 pad line
* this allows spaces to be removed
*/
var %ret = %ret $+ $base($asc($mid($1-,%c,1)),10,16,2)
inc %c
}
if ($isid) { return %ret }
elseif ($chan) { msg $chan %ret }
}
normal {
var %c = 1
var %ret
while (%c <= $len($1-)) {
var %chr = $mid($1-,%c,2)
/* to handle spaces correctly, convert them to a unique sequence <space>
* change < to <lt> and > to <gt>, just in case "<space>" is in the text
*/
if (%chr == 20) {
var %ret = %ret $+ <space>
}
elseif (%chr == 3C) {
var %ret = %ret $+ <lt>
}
elseif (%chr == 3e) {
var %ret = %ret $+ <gt>
}
else {
var %ret = %ret $+ $chr($base(%chr,16,10))
}
inc %c 2
}
;use $replace to get $chr(32), $chr(60), and, $chr(62) back
if ($isid) { return $replace(%ret,<space>,$chr(32),<lt>,<,<gt>,>) }
elseif ($chan) { msg $chan $replace(%ret,<space>,$chr(32),<lt>,<,<gt>,>) }
}