70 lines
1.4 KiB
Text
70 lines
1.4 KiB
Text
get "libhdr"
|
|
|
|
let reads(v) be
|
|
$( v%0 := 0
|
|
$( let ch = rdch()
|
|
if ch = '*N' | ch = endstreamch break
|
|
v%0 := v%0 + 1
|
|
v%(v%0) := ch
|
|
$) repeat
|
|
$)
|
|
|
|
let digits(v) = valof
|
|
$( for i=1 to v%0
|
|
$( unless '0' <= v%i <= '9' resultis false
|
|
v%i := v%i - '0'
|
|
$)
|
|
resultis true
|
|
$)
|
|
|
|
let base20(v) be
|
|
$( let i = ?
|
|
for j=v%0-1 to 1 by -1
|
|
for i=1 to j
|
|
$( v%(i+1) := v%(i+1) + 10*(v%i & 1)
|
|
v%i := v%i >> 1
|
|
$)
|
|
i := 1
|
|
while v%i=0 & i<v%0 do i := i+1
|
|
for j=i to v%0 do v%(j-i+1) := v%j
|
|
v%0 := v%0-i+1
|
|
$)
|
|
|
|
let mayan(v) be
|
|
$( let border(n) be
|
|
$( for i=1 to n do writes("+----")
|
|
writes("+*N")
|
|
$)
|
|
let part(num, line) be
|
|
test num=0 do
|
|
writes(line=0 -> " @ ", " ")
|
|
or
|
|
$( num := num - line*5
|
|
writes(num<=0 -> " ",
|
|
num =1 -> " . ",
|
|
num =2 -> " .. ",
|
|
num =3 -> "... ",
|
|
num =4 -> "....",
|
|
"----")
|
|
$)
|
|
border(v%0)
|
|
for l=3 to 0 by -1
|
|
$( for d=1 to v%0
|
|
$( wrch('|')
|
|
part(v%d, l)
|
|
$)
|
|
writes("|*N")
|
|
$)
|
|
border(v%0)
|
|
$)
|
|
|
|
let start() be
|
|
$( let v = vec 1+255/BYTESPERWORD
|
|
$( writes("Number? ")
|
|
reads(v)
|
|
if v%0=0 finish
|
|
unless digits(v) loop
|
|
base20(v)
|
|
mayan(v)
|
|
$) repeat
|
|
$)
|