Немногое, но кое-что просто придется переделывать. Да, конечно, теперь есть новые функции, новые возможности, а самая клевая фишка — Юникод. О нем и поговорим…
Юникод это не однобайтовая кодировка, mIRC работает с UTF-8 и содержит 2097151 символ. Помимо универсальности, которая дает UTF-8, придется учитывать работу с символами; наиболее часто мы их используем на низком уровне в бинарных переменных:
//bset -t &bvar 1 тест | echo -a $bvar(&bvar,1-)
и такой код вернет уже
209 130 208 181 209 129 209 130
— 8 байт, а не 4.
Еще один момент уже в конкретном скрипте, когда, например, нужно закодировать URL строку.
alias urlencode {
var %i = 1, %len = $len($1), %str
while (%i <= %len) {
var %char = $asc($mid($1,%i,1)), %i = %i + 1
if (%char == 32) var %str = $+(%str,+)
elseif (%char isin 35,37,38,46,47,58,59,61,63,64) var %str = $+(%str,$chr($v1))
elseif (%char isnum 48-57) || (%char isnum 65-90) || (%char isnum 97-122) var %str = $+(%str,$chr($v1))
elseif (%char < 128) var %str = $+(%str,%,$base($v1,10,16,2))
elseif (%char < 2048) var %str = $+(%str,%,$base($calc(192 + $int($calc($v1 / 64))),10,16,2),%,$base($calc(128 + ($v1 % 64)),10,16,2))
elseif (%char < 65536) var %str = $+(%str,%,$base($calc(224 + $int($calc($v1 / 4096))),10,16,2),%,$base($calc(128 + ($int($calc($v1 / 64)) % 64)),10,16,2),%,$base($calc(128 + ($v1 % 64)),10,16,2))
elseif (%char < 2097152) var %str = $+(%str,%,$base($calc(240 + $int($calc($v1 / 262144))),10,16,2),%,$base($calc(128 + ($int($calc($v1 / 4096)) % 64)),10,16,2),%,$base($calc(128 + ($int($calc($v1 / 64)) % 64)),10,16,2),%,$base($calc(128 + ($v1 % 64)),10,16,2))
}
return %str
}
Клево? А можно сделать проще, — либо регексом
alias urlencode return $regsubex($1-,/([^\d\w])/g,$+(%,$base($asc(\t),10,16)))
, либо все также пройтись циклом по каждому символу (как в первом варианте), только закодировав все в тот-же UTF-8
return $utfencode(строка)
. На этом с Юникодом все.
Какие новые функции? Мне нравится больше всего
Bind to Adapter or IP address.
//while ($bindip($0)) tokenize 32 $1- $v1 | echo $2-
, а и еще поддержка IPv6 и UPnP.
/dns -46 irc.efnet.org
. Новым возможностям связанным с сетью всегда рады.