RosettaCodeData/Task/Variable-length-quantity/Bracmat/variable-length-quantity.br...

57 lines
993 B
Plaintext

( ( VLQ
= b07 b8 vlq
. 0:?b8
& :?vlq
& whl
' ( !arg:>0
& mod$(!arg.128):?b07
& (chr$(!b8+!b07)|) !vlq:?vlq
& 128:?b8
& div$(!arg.128):?arg
)
& str$!vlq
)
& ( NUM
= c num d
. 0:?num:?d
& whl
' ( @(!arg:%@?c ?arg)
& asc$!c:?c:~<128
& 128*(!c+-128+!num):?num
& 1+!d:?d
)
& (!c:<128&!c+!num:?num|)
& !num
)
& ( printVLQ
= c h
. :?h
& whl
' ( @(!arg:%@?c ?arg)
& d2x$(asc$!c):?x
& !h (@(!x:? [1)&0|) !x
: ?h
)
& ( asc$!c:~<128&!h 00:?h
|
)
& out$("VLQ :" str$!h)
)
& ( test
= vlq num
. out$("input:" !arg)
& VLQ$(x2d$!arg):?vlq
& printVLQ$!vlq
& NUM$!vlq:?num
& out$("back :" d2x$!num \n)
)
& test$200000
& test$1fffff
& test$00
& test$7f
& test$80
& test$81
& test$82
& test$894E410E0A
);