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

Reply via email to