For fun:

$longipv6(<ip>) or /longipv6 <ip>
Code
alias longipv6 {
  bset -t & 1 $1
  set -l %start 1
  set -l %end
  set -l %hextets
  while ($bfind(&,%start,:).textcs) {
    %end = $v1 - 1
    if (%end > %start) %hextets = %hextets $base($bvar(&,%start - %end).text,16,10)
    else %hextets = %hextets SHORTENED
    %start = %end + 2
  }
  tokenize 32 $replacex(%hextets $base($bvar(&,%start -).text,16,10),SHORTENED,$str(0 $+ $chr(32),$calc(8 - $numtok(%hextets,32))))
  set -l %decimal $add_($multiply_(5192296858534827628530496329220096,$1),$multiply_(79228162514264337593543950336,$2))
  %decimal = $add_(%decimal,$multiply_(1208925819614629174706176,$3))
  %decimal = $add_(%decimal,$multiply_(18446744073709551616,$4))
  %decimal = $add_(%decimal,$multiply_(281474976710656,$5))
  %decimal = $add_(%decimal,$multiply_(4294967296,$6))
  %decimal = $add_(%decimal,$multiply_(65536,$7))
  $iif($isid,return,echo -a) $add_(%decimal,$8)
}

alias add_ {
  if ($len($2) > $len($1)) tokenize 32 $2 $1
  set -l %result
  set -l %carryover
  set -l %temp
  while ($right($1,15) isnum) {
    %temp = $base($calc($v1 + $right($2,15) + %carryover),10,10,$len($v1))
    %carryover = $mid(%temp,1-,-15)
    %result = $right(%temp,15) $+ %result
    tokenize 32 $mid($1,1-,-15) $mid($2,1-,-15)
  }
  return %result
}

alias multiply_ {
  if ($len($2) > $len($1)) tokenize 32 $2 $1
  set -l %temp
  set -l %result
  set -l %multiplicand $1
  set -l %multiplier
  set -l %remaining
  set -l %interval
  set -l %padding
  set -l %carryover
  tokenize 1 $2
  while ($1 isnum) {
    %multiplier = $right($1,7)
    %remaining = $mid($1,1-,-7)
    %carryover = 0
    if (%multiplier > 0) {
      tokenize 1 %multiplicand
      while ($right($1,7) isnum) {
        %temp = $base($calc($v1 * %multiplier + %carryover),10,10,$len($v1))
        %carryover = $mid(%temp,1-,-7)
        %interval = $right(%temp,7) $+ %interval
        tokenize 1 $mid($1,1-,-7)
      }
      if (%carryover) %interval = %carryover $+ %interval
      %result = $add_(%result,%interval $+ %padding)
    }
    %padding = %padding $+ $str(0,$len(%multiplier))
    tokenize 1 %remaining
  }
  return %result
}


It checks absolutely nothing, you can literally feed it carrots and it won't even blink an eye. Seriously, carrots: /longipv6 carrots

Last edited by Dazuz; 07/12/19 08:14 PM. Reason: Brain fart