nsfw { noop $$1 | say $replace($$1-,http://,nsfw://) } cfix return $iif($$1 < 10,$+(0,$1),$1) rb var %i 1, %out | while (%i <= $len($$1-)) { %out = $+(%out,$chr(3),$cfix($rand(2,14)),$replace($mid($1-,%i,1),$chr(32),$chr(160))) | inc %i } | say %out internet { /say 0,5 0,4  0,4  0,4   0,7 0,8   0,7 0,8   0,3 0,9  0,9  0,9   0,2 0,12  0,12  0,12   0,6 0,13  0,13  0,13   0,5 0,4   0,5 0,4   0,7 0,8  0,8  0,8   0,3 0,9  0,9  0,9       /say   0,5 0,4     0,7 0,8  0,8 0,7 0,8     0,3 0,9     0,2 0,12       0,6 0,13   0,6 0,13   0,5 0,4  0,4 0,5 0,4   0,7 0,8         0,3 0,9         /say   0,5 0,4     0,7 0,8  0,8  0,8     0,3 0,9     0,2 0,12  0,12  0,12   0,6 0,13  0,13  0,13   0,5 0,4  0,4  0,4   0,7 0,8  0,8  0,8     0,3 0,9         /say   0,5 0,4     0,7 0,8  0,7 0,8 0,8     0,3 0,9     0,2 0,12       0,6 0,13   0,6 0,13   0,5 0,4  0,5 0,4 0,4   0,7 0,8         0,3 0,9         /say 0,5 0,4  0,4  0,4   0,7 0,8   0,7 0,8     0,3 0,9     0,2 0,12  0,12  0,12   0,6 0,13   0,6 0,13   0,5 0,4   0,5 0,4   0,7 0,8  0,8  0,8     0,3 0,9     0,2 0,12   } ; /cl - circled letters! (doesn't work with multibyte text) cl { var %res, %spc, %len = $len($1-), %i = 1 while (%i <= %len) { var %chr = $mid($1-,%i,1), %asc = $asc(%chr) if (%asc == 32) { %spc = $true | inc %i | continue } ; A-J if (%asc isnum 65-74) { inc %asc 117 %chr = $+($chr(226),$chr(146),$chr(%asc)) } ; K-Z else if (%asc isnum 75-90) { inc %asc 53 %chr = $+($chr(226),$chr(147),$chr(%asc)) } ; a-z else if (%asc isnum 97-122) { var %asc = $calc($asc(%chr) + 47) %chr = $+($chr(226),$chr(147),$chr(%asc)) } if (%spc) { %res = %res %chr | %spc = $false } else %res = %res $+ %chr | inc %i } say %res } ; /flip - Flips English text (letters and ; punctuation marks only). Can also flip back to the normal ; form. Requires $flipchr() and $utf8len(). flip { var %res, %spc, %len = $len($$1-), %i = 1 while (%i <= %len) { var %chr = $mid($1-,%i,4), %chrlen = $utf8len(%chr) %chr = $left(%chr, %chrlen) if (%chr == $chr(32)) { %spc = $true | inc %i | continue } %chr = $flipchr(%chr) if (%spc) { %res = %chr %res | %spc = $false } else %res = %chr $+ %res | inc %i %chrlen } say %res } flipchr { if (($1 == l) || ($1 == o) || ($1 == s) || $& ($1 == x) || ($1 == z)) return $lower($1) var %p1 = b q var %p2 = d p var %p3 = n u var %p4 = a $+($chr(201),$chr(144)) var %p5 = c $+($chr(201),$chr(148)) var %p6 = e $+($chr(199),$chr(157)) var %p7 = f $+($chr(201),$chr(159)) var %p8 = g $+($chr(198),$chr(131)) var %p9 = h $+($chr(201),$chr(165)) var %p10 = i $+($chr(196),$chr(177)) var %p11 = j $+($chr(201),$chr(190)) var %p12 = k $+($chr(202),$chr(158)) var %p13 = m $+($chr(201),$chr(175)) var %p14 = r $+($chr(201),$chr(185)) var %p15 = t $+($chr(202),$chr(135)) var %p16 = v $+($chr(202),$chr(140)) var %p17 = w $+($chr(202),$chr(141)) var %p18 = y $+($chr(202),$chr(142)) var %p19 = . $+($chr(203),$chr(153)) var %p20 = $chr(91) $chr(93) var %p21 = ( ) var %p22 = $chr(123) $chr(125) var %p23 = ? $+($chr(194),$chr(191)) var %p24 = ! $+($chr(194),$chr(161)) var %p25 = ' $chr(44) var %p26 = < > var %p27 = _ $+($chr(226),$chr(128),$chr(190)) var %p28 = $chr(59) $+($chr(216),$chr(155)) var %chr = $1, %i = 1 while ($($+(%,p,%i),2)) { tokenize 32 $v1 if ($1 == %chr) return $2 if ($2 == %chr) return $1 inc %i } return %chr } ; $utf8len(buf) - Returns the size of the UTF-8 character ; started at the first byte of "buf". Only the first four ; bytes of "buf" make any difference. Returns 1 on error. utf8len { if ($asc($1) < 128) return 1 | var %res = 1 if (($v1 >= 194) && ($v1 <= 223)) %res = 2 elseif (($v1 >= 224) && ($v1 <= 239)) %res = 3 elseif (($v1 >= 240) && ($v1 <= 243)) %res = 4 ; validate the other bytes var %i = 2 while (%i <= %res) { if (($asc($mid($1,%i,1)) < 128) || ($v1 > 191)) { return 1 } | inc %i } | return %res } deer { /say 1,1@@@@@@@@0,0@1,1@@0,0@1,1@ /say 1,1@@@@@@@@0,0@1,1@@0,0@1,1@ /say 1,1@@@@@@@@@0,0@@0,01,1@@ /say 1,1@@@@@@@@4,4@0,0@@1,1@@ /say 1,1@@@@@@@@@0,0@@1,1@@ /say 1,1@@0,0@@@@@@@@@1,1@@ /say 1,1@0,0@@@@@@@@@@1,1@@ /say 1,1@0,0@@@@@@@@@@1,1@@ /say 1,1@0,0@1,1@0,0@1,1@@@@0,0@1,1@0,0@1,1@@ /say 1,1@0,0@1,1@0,0@1,1@@@@0,0@1,1@0,0@1,1@@ /say 1,1@0,0@1,1@0,0@1,1@@@@0,0@1,1@0,0@1,1@@ } ; /age - shows exact age and time to next birthday. age { ;-------------------------------------------------------- ; Set this to your birthdate in dd/mm/yyyy hh:mm:ss format: ; var %birthdate = 01/01/1990 00:00:00 ; ; Set the level of detail you want for time left for your next birthday. ; var %precision = 5 ; var %msg = I'm AGE years old; I'll turn NEXT in LEFT. ; ;-------------------------------------------------------- var %age = $agex($gettok(%birthdate,1,32),$gettok(%birthdate,2,32)) var %nextage = $calc($floor(%age) +1) var %timeleft = $gettok($agex($gettok(%birthdate,1,32),$gettok(%birthdate,2,32)).nextbd,1- $+ $eval(%precision),32) say $replacecs(%msg,AGE,%age,NEXT,%nextage,LEFT,%timeleft) } ; $agex(dd/mm/yyyy hh:mm:ss) - returns an exact Gregorian calendar ; age, based on the specified birthdate. If the "nextbd" ; property is used, returns time left to the next birthday. agex { var %daymon = $+($gettok($1,1,47),/,$$gettok($1,2,47),/) var %midn = $iif($2,$2,00:00:00), %next_bd = $+(%daymon,$date(yyyy)) var %last_bd = $+(%daymon,$calc($date(yyyy) -1)) var %till_bd = $calc($ctime(%next_bd %midn) - $ctime) if (%till_bd <= 0) { %last_bd = %next_bd %next_bd = $+(%daymon,$calc($date(yyyy) +1)) %till_bd = $calc($ctime(%next_bd %midn) - $ctime) } if ($prop == nextbd) return $duration(%till_bd) %last_bd = $ctime(%last_bd %midn) %next_bd = $ctime(%next_bd %midn) var %ageint = $calc(%last_bd - $ctime($1 %midn)) %ageint = $round($calc(%ageint / 31556952),0) var %interv = $calc(%next_bd - %last_bd) var %agefrac = $calc(1- %till_bd / %interv) if (%agefrac == 1) %agefrac = 0.999999 return $calc(%ageint + %agefrac) } tk run taskkill /f /im $$1 $+ .exe