Leon Brocard sent the following bits through the ether:
> Now to get the hand of the signatures...
Ah, well, I gave up on SDL as it was a little complicated. Instead, I
played with curses. Please find attached a cute little curses life
program loading and calling curses at runtime with dlfunc.
Oh, and I made the shape a small spaceship as it's more interesting.
[It's a bit of the pain the way it stomps over registers all the time,
though ;-]
Leon
--
Leon Brocard.............................http://www.astray.com/
scribot.................................http://www.scribot.com/
.... 43rd Law of Computing: Anything that can go wr...
#
# life.pasm
#
# Play conway's (no, not *him*. The other conway) game
# of life
#
# Hacked by Leon Brocard <[EMAIL PROTECTED]> to use curses
loadlib P1, "libcurses.so"
dlfunc P0, P1, "initscr", "i"
invoke
dlfunc P0, P1, "curs_set", "ii"
set I5, 0
invoke
# First the generation count
set I2, 5000
# Note the time
time N5
# If true, we don't print
set I12, 0
set S0, " "
set S1, " "
set S2, " "
set S3, " "
set S4, " ** "
set S5, " * * "
set S6, " * "
set S7, " * * "
set S8, " ****** "
set S9, " "
set S10, " "
set S11, " "
set S12, " "
set S13, " "
set S14, " "
set S15, ""
concat S15, S0
concat S15, S1
concat S15, S2
concat S15, S3
concat S15, S4
concat S15, S5
concat S15, S6
concat S15, S7
concat S15, S8
concat S15, S9
concat S15, S10
concat S15, S11
concat S15, S12
concat S15, S13
concat S15, S14
bsr dump
set I0, 0
loop: ge I0, I2, getout
inc I0
mod I31,I0,100
if I31, skip
skip:
bsr generate
bsr dump
branch loop
getout:
dlfunc P0, P1, "curs_set", "ii"
set I5, 1
invoke
dlfunc P0, P1, "endwin", "i"
invoke
end
# S15 has the incoming string, S0 is scratch, S1 is scratch, S2 is scratch
#
# I0 is the length of the string
# I1 is the current cell we're checking
# I2 is the count for that cell
# I3 is the offset to the neighbor
generate:
pushi
length I0, S15
set S1, ""
set I1, 0
genloop:
set I2, 0
NW:
set I3, -16
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", North
inc I2
North:
set I3, -15
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", NE
inc I2
NE:
set I3, -14
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", West
inc I2
West:
set I3, -1
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", East
inc I2
East:
set I3, 1
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", SW
inc I2
SW:
set I3, 14
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", South
inc I2
South:
set I3, 15
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", SE
inc I2
SE:
set I3, 16
add I3, I3, I0
add I3, I3, I1
mod I3, I3, I0
substr S0, S15, I3, 1
ne S0, "*", check
inc I2
check:
substr S0, S15, I1, 1
eq S0, "*", check_alive
# If eq 3, put a star in else a space
check_dead:
eq I2, 3, star
branch space
check_alive:
lt I2, 2, space
gt I2, 3, space
branch star
space:
concat S1, " "
branch iter_done
star:
concat S1, "*"
iter_done:
inc I1
lt I1, I0, genloop
done:
set S15, S1
popi
ret
# S15 has the incoming string, S0 is scratch
dump:
saveall
dlfunc P0, P1, "move", "iii"
set I5, 0
set I6, 0
invoke
restoreall
if I12, dumpend
save I0
save I1
saveall
save I0
dlfunc P0, P1, "addstr", "it"
set S5, "Generation: "
invoke
restore I0
dlfunc P0, P1, "addstr", "it"
set S5, I0
invoke
dlfunc P0, P1, "refresh", "i"
invoke
restoreall
set I0, 0
set I1, 14
printloop:
substr S0, S15, I0, 15
saveall
dlfunc P0, P1, "addstr", "it"
set S5, S0
invoke
dlfunc P0, P1, "addstr", "it"
set S5, "\n"
invoke
restoreall
add I0, I0, 15
dec I1
ge I1, 0 printloop
restore I1
restore I0
sleep 1
dumpend:
ret