Commit Graph

498 Commits

Author SHA1 Message Date
Kartik K. Agaram
13ef6b6202 . 2021-07-08 16:20:17 -07:00
Kartik K. Agaram
cbf22e7ab2 primitives for double-buffering
I thought I needed these for this bouncing-ball demo:

  def (bounce screen)
    with (w (width screen)
          h (height screen)
          cx 16
          cy 16
          dx 12
          dy 19)
      while 1
        clear screen
        ring screen cx cy 16 3 5
        cx += dx
        cy += dy
        when (or (cx > w) (cx < 0))
          set dx 0-dx
        when (or (cy > h) (cy < 0))
          set dy 0-dy
        for _ 0 (< _ 100) ++_         # delay

No matter how I adjusted the delay I couldn't get rid of the jitter. So
I built a double-buffered version:

    (bounce2 . [def (bounce2 screen)
  with (w (width screen)
        h (height screen)
        cx 16
        cy 16
        dx 12
        dy 19
        screen2 (new_screen (columns screen)
                            (lines screen)))
      while 1
        clear screen2
        ring screen2 cx cy 16 3 5
        cx += dx
        cy += dy
        when (or (cx > w) (cx < 0))
          set dx 0-dx
        when (or (cy > h) (cy < 0))
          set dy 0-dy
        blit screen2 screen
        for _ 0 (< _ 100) ++_])       # delay

But it didn't make a difference! Turns out nothing will help you when
successive frames are too far apart. This is the correct tweak to
`bounce`:

  -       dx 12
  -       dy 19)
  +       dx 1
  +       dy (/ 19 12))

Still, we'll keep double-buffering around for the future.
2021-07-05 23:18:30 -07:00
Kartik K. Agaram
468b0d979f shell: fix clear on screens
Broken since commit c95648c96 on Jul 3.

Unclear what test to write for this. Should clear-stream check for NULL?
Should apply-clear?
2021-07-05 22:06:37 -07:00
Kartik K. Agaram
5d614af955 expose Mu implementation of 'bezier'
Still no support for acute-angled control points.
2021-07-05 18:31:07 -07:00
Kartik K. Agaram
493aabf79a replace 'circle' with Mu implementation 2021-07-05 18:21:02 -07:00
Kartik K. Agaram
c7bedaf49b replace 'vline' with Mu implementation 2021-07-05 18:12:07 -07:00
Kartik K. Agaram
5d8a858a6f replace 'hline' with Mu implementation 2021-07-05 18:08:40 -07:00
Kartik K. Agaram
0b07a43367 replace 'line' with Mu implementation 2021-07-05 18:08:33 -07:00
Kartik K. Agaram
ac1d702cdc . 2021-07-05 17:36:25 -07:00
Kartik K. Agaram
1ac1fe1fff . 2021-07-05 17:35:38 -07:00
Kartik K. Agaram
c95648c960 reading from streams
The Mu shell has no string literals, only streams. No random access,
only sequential access. But I've been playing fast and loose with its
read pointer until now. Hopefully things are cleaned up now.
2021-07-03 18:27:01 -07:00
Kartik K. Agaram
7ced4e44dd alists 2021-07-03 16:28:15 -07:00
Kartik K. Agaram
d986404ff0 new primitive: cons? 2021-07-03 16:16:03 -07:00
Kartik K. Agaram
810d9a26f5 . 2021-07-03 10:57:36 -07:00
Kartik K. Agaram
a745749382 . 2021-07-03 10:44:05 -07:00
Kartik K. Agaram
bd538804db reorg primitives on screen 2021-07-02 19:31:15 -07:00
Kartik K. Agaram
c8fb6d6aca clean up final abort in macroexpand 2021-06-30 20:43:34 -07:00
Kartik Agaram
49d60aa575 delete a known issue
I can't reproduce the issue with the keyboard handler anymore :/
2021-06-30 09:44:20 -07:00
Kartik K. Agaram
0237be29aa . 2021-06-27 08:32:44 -07:00
Kartik K. Agaram
efecaa99d5 simplify Qemu instructions
Turns out we don't need a special case for KVM.
  https://qemu.readthedocs.io/en/latest/system/invocation.html
2021-06-27 08:05:18 -07:00
Kartik Agaram
6f6f6384f1 . 2021-06-24 14:33:22 -07:00
Kartik Agaram
1684e3e10c . 2021-06-24 13:30:35 -07:00
Kartik Agaram
eee222f14c . 2021-06-24 09:18:59 -07:00
Kartik Agaram
65077b46b4 . 2021-06-23 18:14:57 -07:00
Kartik Agaram
2c1770a349 . 2021-06-23 16:59:38 -07:00
Kartik Agaram
709902d34a . 2021-06-23 16:28:41 -07:00
Kartik Agaram
e4b6665aee . 2021-06-23 16:24:56 -07:00
Kartik Agaram
a25e4c1ac2 . 2021-06-23 11:05:57 -07:00
Kartik Agaram
f13e3cdfb1 . 2021-06-23 11:05:53 -07:00
Kartik K. Agaram
6a65f6f233 one more bug, and documentation for infix
One error message gets a bit worse.
2021-06-23 10:06:57 -07:00
Kartik K. Agaram
ba0c41673b . 2021-06-23 01:01:42 -07:00
Kartik K. Agaram
cfa1bac8bb . 2021-06-23 00:59:14 -07:00
Kartik K. Agaram
577123e975 one more bug 2021-06-23 00:56:39 -07:00
Kartik K. Agaram
f174695400 start using infix in data disk
Still some gaps to track down.
2021-06-23 00:03:07 -07:00
Kartik K. Agaram
76ef912eb2 all tests passing again; infix seems done 2021-06-22 23:39:54 -07:00
Kartik K. Agaram
2eae06ebda infix tests passing but something's still broken 2021-06-22 23:31:51 -07:00
Kartik K. Agaram
10e9a9a8d4 2 failing tests remaining
We just need to support unary operators.
2021-06-22 23:11:55 -07:00
Kartik K. Agaram
156b74c759 almost there; this is encouraging
The at-head-of-list? is a really ugly hack, though.
2021-06-22 23:02:09 -07:00
Kartik K. Agaram
aebcfd1bfb beginnings of tokenization within symbols
We're now down to 4 failing tests. But these will require surgery.
2021-06-22 22:32:20 -07:00
Kartik K. Agaram
f5e55cbbdb . 2021-06-22 21:57:47 -07:00
Kartik K. Agaram
0436ab71ea clean up lexical categories 2021-06-22 21:43:44 -07:00
Kartik K. Agaram
59d904b4df snapshot
Still a couple of failing tests before I switch gears to breaking down
symbols containing infix.
2021-06-22 21:25:04 -07:00
Kartik K. Agaram
5997eafd46 . 2021-06-22 21:24:06 -07:00
Kartik K. Agaram
26e9387df6 snapshot: infix
Like parenthesize, I'm copying tests over from https://github.com/akkartik/wart
Unlike parenthesize, though, I can't just transliterate the code itself.
Wart was operating on an intermediate AST representation. Here I'm all
the way down to cells. That seemed like a good idea when I embarked, but
now I'm not so sure. Operating with the right AST data structure allowed
me to more easily iterate over the elements of a list. The natural recursion
for cells is not a good fit.

This patch and the next couple is an interesting case study in what makes
Unix so effective. Yes, you have to play computer, and yes it gets verbose
and ugly. But just diff and patch go surprisingly far in helping build a
picture of the state space in my brain.

Then again, there's a steep gradient of skills here. There are people who
can visualize state spaces using diff and patch far better than me, and
people who can't do it as well as me. Nature, nurture, having different
priorities, whatever the reason. Giving some people just the right crutch
excludes others.
2021-06-22 21:23:40 -07:00
Kartik K. Agaram
74d6a4d382 . 2021-06-21 22:02:47 -07:00
Kartik K. Agaram
6669133bcf start implementing infix
First step: undo operator support in tokenization.
2021-06-21 22:00:55 -07:00
Kartik K. Agaram
0f071ae99b . 2021-06-20 23:09:50 -07:00
Kartik K. Agaram
77f347c181 shell: now no definitions with long lines 2021-06-20 23:07:23 -07:00
Kartik K. Agaram
b195921b5f shell: shrink definition widths in a few places
The only remaining long lines now are in 'pair' and 'with'.
2021-06-20 23:07:23 -07:00
Kartik K. Agaram
3fd3f3a1c7 this is how we create aliases 2021-06-20 23:07:23 -07:00