OSDN Git Service

joypy/Thun.git
15 months agoswap
Simon Forman [Mon, 20 Mar 2023 23:33:11 +0000 (16:33 -0700)]
swap

16 months agoCheck for error after cons'ing term.
Simon Forman [Sat, 18 Mar 2023 21:13:51 +0000 (14:13 -0700)]
Check for error after cons'ing term.

16 months agopop_any()
Simon Forman [Sat, 18 Mar 2023 19:48:59 +0000 (12:48 -0700)]
pop_any()

16 months agodup
Simon Forman [Sat, 18 Mar 2023 19:43:30 +0000 (12:43 -0700)]
dup

16 months agostack function.
Simon Forman [Sat, 18 Mar 2023 19:31:36 +0000 (12:31 -0700)]
stack function.

16 months agopop()
Simon Forman [Sat, 18 Mar 2023 18:50:18 +0000 (11:50 -0700)]
pop()

16 months agoMove pop_list().
Simon Forman [Sat, 18 Mar 2023 18:41:16 +0000 (11:41 -0700)]
Move pop_list().

16 months agoNo reason to pass expression to function.
Simon Forman [Sat, 18 Mar 2023 18:40:19 +0000 (11:40 -0700)]
No reason to pass expression to function.

16 months agopop_list()
Simon Forman [Sat, 18 Mar 2023 18:31:38 +0000 (11:31 -0700)]
pop_list()

Kind of a misnomer, you have to take the tail() of the stack yourself.
This function only returns the list from TOS.

16 months agoMinor cleanup.
Simon Forman [Sat, 18 Mar 2023 18:31:12 +0000 (11:31 -0700)]
Minor cleanup.

16 months agoSwaack and error macro.
Simon Forman [Sat, 18 Mar 2023 18:26:27 +0000 (11:26 -0700)]
Swaack and error macro.

16 months agoUse clear, set up for swaack.
Simon Forman [Sat, 18 Mar 2023 17:40:49 +0000 (10:40 -0700)]
Use clear, set up for swaack.

16 months agoClear.
Simon Forman [Fri, 17 Mar 2023 19:10:18 +0000 (12:10 -0700)]
Clear.

16 months agoDid i not commit this?
Simon Forman [Fri, 10 Mar 2023 22:11:54 +0000 (14:11 -0800)]
Did i not commit this?

16 months agoA start on the joy() interpeter.
Simon Forman [Mon, 6 Mar 2023 07:20:37 +0000 (23:20 -0800)]
A start on the joy() interpeter.

16 months agoMinor cleanup.
Simon Forman [Mon, 6 Mar 2023 07:04:56 +0000 (23:04 -0800)]
Minor cleanup.

16 months agoCatch unbalanced brackets.
Simon Forman [Mon, 6 Mar 2023 03:37:15 +0000 (19:37 -0800)]
Catch unbalanced brackets.

16 months agoMinor cleanup.
Simon Forman [Mon, 6 Mar 2023 03:26:34 +0000 (19:26 -0800)]
Minor cleanup.

16 months agoOnly allocate strings once.
Simon Forman [Mon, 6 Mar 2023 02:46:05 +0000 (18:46 -0800)]
Only allocate strings once.

That for loop in hash_fragment() is the gnarliest I've ever written.

16 months agoCombine tokenizer and parser.
Simon Forman [Mon, 6 Mar 2023 01:01:25 +0000 (17:01 -0800)]
Combine tokenizer and parser.

I'm pretty happy with this. It's iterative rather than recursive so you
won't blow out the call stack if you want to parse a million brackets
(intermediate results are stored on (another) little stack.)  It scans
the string and builds lists and sublists as it goes, without wasting
cons cells.

16 months agoThread error handling through tokenizer.
Simon Forman [Sun, 5 Mar 2023 23:20:22 +0000 (15:20 -0800)]
Thread error handling through tokenizer.

16 months agoIt turns out the error machinery was working...
Simon Forman [Sun, 5 Mar 2023 22:36:55 +0000 (14:36 -0800)]
It turns out the error machinery was working...

So I was memset'ing the hash table and string table /after/ setting up
the left- and right-bracket tokens! So then when I tried to print the
token list and ht_lookup() dutifully set the error code when it couldn't
find the strings in the hash table, the system properly quit printing
and halted.  D'oh!  That was a subtle one.  Obvious in hindsight.

16 months agoFold parser code into joy_types.c
Simon Forman [Sun, 5 Mar 2023 04:50:34 +0000 (20:50 -0800)]
Fold parser code into joy_types.c

Add some docs, minor cleanup.

16 months agoIt seems to be working.
Simon Forman [Sun, 5 Mar 2023 01:48:26 +0000 (17:48 -0800)]
It seems to be working.

It took all expletive-deleted day but I finally nailed it down.  In the
end the last bug was I was decrementing a stack pointer /after/ trying
to load the item at the (empty) top of the stack.  Classic.

I still need to make it not re-allocate strings that it has already
interned, but beyond that I think it's fine.

16 months agotokenate() and reverse_list_in_place()
Simon Forman [Sun, 5 Mar 2023 01:23:54 +0000 (17:23 -0800)]
tokenate() and reverse_list_in_place()

16 months agoUse symbols for tokens for brackets.
Simon Forman [Sat, 4 Mar 2023 23:48:55 +0000 (15:48 -0800)]
Use symbols for tokens for brackets.

Try a different tack on the parser.

16 months agoAlmost working parser.
Simon Forman [Sat, 4 Mar 2023 19:59:19 +0000 (11:59 -0800)]
Almost working parser.

16 months agoMinor cleanup.
Simon Forman [Sat, 4 Mar 2023 16:31:40 +0000 (08:31 -0800)]
Minor cleanup.

Some printing to see the machinery in action.

16 months agoJoy parser in NCC.
Simon Forman [Sat, 4 Mar 2023 16:25:32 +0000 (08:25 -0800)]
Joy parser in NCC.

16 months agoA start on error handling.
Simon Forman [Sat, 4 Mar 2023 03:23:15 +0000 (19:23 -0800)]
A start on error handling.

16 months agoDouble hashing w/ extra bits of hash.
Simon Forman [Fri, 3 Mar 2023 22:52:26 +0000 (14:52 -0800)]
Double hashing w/ extra bits of hash.

16 months agoA start on a hash table for symbols.
Simon Forman [Fri, 3 Mar 2023 20:05:40 +0000 (12:05 -0800)]
A start on a hash table for symbols.

16 months agoJoy in UVM NCC code.
Simon Forman [Fri, 3 Mar 2023 15:31:52 +0000 (07:31 -0800)]
Joy in UVM NCC code.

16 months agoA bunch of stuff.
Simon Forman [Fri, 3 Mar 2023 15:30:55 +0000 (07:30 -0800)]
A bunch of stuff.

16 months agoMinor cleanup.
Simon Forman [Tue, 28 Feb 2023 15:45:38 +0000 (07:45 -0800)]
Minor cleanup.

16 months agoUse defines to abstract font choice.
Simon Forman [Tue, 28 Feb 2023 15:14:33 +0000 (07:14 -0800)]
Use defines to abstract font choice.

Clunky but now you only have to change the font name four time in one
place rather than N times in N places, eh?

Writing C again for the first time in ages (this and the Joy
interpreter) the using the preprocessor is like stone-age
meta-programming, from the lens of lisp it's like, "you do what to your
source code?".

16 months agoA different font.
Simon Forman [Tue, 28 Feb 2023 14:53:31 +0000 (06:53 -0800)]
A different font.

It's easy enough to substitute a different font in the call to
Imagemagick's `convert` tool, but in the case of pixel fonts, it will
scale them, so you're not getting a proper bitmap of the pixels, you're
getting a kind of screenshot of the pixels.

I want to make a different machinery for bitmapped pixel fonts, and I
want to make a simple DEFINE-based way to pick them without having to
edit your source code,  e.g. #define font_data font_PublicPixel_22_data
yeah?

After that, simple affine transforms for fake 3D..

16 months agoWu-ish lines.
Simon Forman [Tue, 28 Feb 2023 03:27:32 +0000 (19:27 -0800)]
Wu-ish lines.

16 months agoMostly working Wu-ish algorithm.
Simon Forman [Tue, 28 Feb 2023 00:29:45 +0000 (16:29 -0800)]
Mostly working Wu-ish algorithm.

16 months agoMinor cleanup.
Simon Forman [Mon, 27 Feb 2023 05:46:05 +0000 (21:46 -0800)]
Minor cleanup.

16 months agoCicada bg, needs work.
Simon Forman [Mon, 27 Feb 2023 05:02:57 +0000 (21:02 -0800)]
Cicada bg, needs work.

Not as pretty as I'd hoped.

Putting a pin in Wu lines for tonight.  I'll lick it in the morning when
I'm fresh.

16 months agoI clearly don't know what I'm doing.
Simon Forman [Mon, 27 Feb 2023 04:39:32 +0000 (20:39 -0800)]
I clearly don't know what I'm doing.

Go to sleep!  Think, then type!

16 months agoIs this fun? Kinda.
Simon Forman [Mon, 27 Feb 2023 04:02:14 +0000 (20:02 -0800)]
Is this fun?  Kinda.

I should break out the graph papaer and Abrash's Black Book and figure
out WTF I'm doing rather than just noodling around, eh?

16 months agoHorizontal proto-Wu.
Simon Forman [Mon, 27 Feb 2023 03:06:15 +0000 (19:06 -0800)]
Horizontal proto-Wu.

16 months agoHorz/vert lines and boxes.
Simon Forman [Mon, 27 Feb 2023 02:07:47 +0000 (18:07 -0800)]
Horz/vert lines and boxes.

16 months agoAw, exit() doesn't work?
Simon Forman [Mon, 27 Feb 2023 00:55:53 +0000 (16:55 -0800)]
Aw, exit() doesn't work?

In any event, I can live with esc-to-quit (is there a callback to hook
into?)

16 months agoBut KEY_BACKSPACE doesn't seem to fire?
Simon Forman [Mon, 27 Feb 2023 00:53:41 +0000 (16:53 -0800)]
But KEY_BACKSPACE doesn't seem to fire?

Maybe worth a bug report?

16 months agoHa ha! The escape-to-quit behavior...
Simon Forman [Mon, 27 Feb 2023 00:52:02 +0000 (16:52 -0800)]
Ha ha!  The escape-to-quit behavior...

...seems to be baked into the UVM.

16 months agoAdd if..else ladder for keys.
Simon Forman [Mon, 27 Feb 2023 00:49:11 +0000 (16:49 -0800)]
Add if..else ladder for keys.

I just noticed that I have KEY_BACKSPACE for the exit key rather than
KEY_ESCAPE as I had thought, yet escape key surely does exit the
program!

16 months agoEscape key exits program.
Simon Forman [Mon, 27 Feb 2023 00:27:23 +0000 (16:27 -0800)]
Escape key exits program.

16 months agominor edits
Simon Forman [Mon, 27 Feb 2023 00:04:54 +0000 (16:04 -0800)]
minor edits

I don't think this is any better?

16 months agoDraw chars when you click.
Simon Forman [Sun, 26 Feb 2023 23:24:40 +0000 (15:24 -0800)]
Draw chars when you click.

Pick a letter at random.

I wasn't checking that the destination values were not less than zero,
which let you click at the top/left edges of the screen and therefore
the carefree_alpha_blend_blit() would try to write to areas outside the
framebuffer.  I started to see "zalgol" pixels in the letters, so I'm
guessing the pixel data is getting stored just above the framebuffer,
which makes sense (because that's the order they appear in the source
code and this is a simple system!)  When you click at the top of the
screen it was writing pixels in the font data, eh?  Then when you click
elsewhere on the screen you get extra pixels with your letterforms and
it looks like Unicode Lovecraft puns.

16 months agoA sort of blit.
Simon Forman [Sun, 26 Feb 2023 23:06:30 +0000 (15:06 -0800)]
A sort of blit.

16 months agoDepend on graphics.h.
Simon Forman [Sun, 26 Feb 2023 21:24:34 +0000 (13:24 -0800)]
Depend on graphics.h.

16 months agoMove draw_background to own file graphics.h.
Simon Forman [Sun, 26 Feb 2023 21:20:38 +0000 (13:20 -0800)]
Move draw_background to own file graphics.h.

16 months agoSwitch font size to 22.
Simon Forman [Sun, 26 Feb 2023 21:09:02 +0000 (13:09 -0800)]
Switch font size to 22.

My old eyes ain't what they used to be.

16 months agoMinor cleanup.
Simon Forman [Sun, 26 Feb 2023 21:04:04 +0000 (13:04 -0800)]
Minor cleanup.

16 months agoTry changing the font size.
Simon Forman [Sun, 26 Feb 2023 20:42:39 +0000 (12:42 -0800)]
Try changing the font size.

16 months agoDisplay font in anti-aliased glory!
Simon Forman [Sun, 26 Feb 2023 19:23:32 +0000 (11:23 -0800)]
Display font in anti-aliased glory!

16 months agoAlpha blend font FTW!
Simon Forman [Sun, 26 Feb 2023 19:21:18 +0000 (11:21 -0800)]
Alpha blend font FTW!

16 months agoOkay, alright, skipping blank pixels.
Simon Forman [Sun, 26 Feb 2023 19:12:07 +0000 (11:12 -0800)]
Okay, alright, skipping blank pixels.

16 months agoWe have a character on the screen!
Simon Forman [Sun, 26 Feb 2023 19:07:29 +0000 (11:07 -0800)]
We have a character on the screen!

It looks like potato because no alpha blending yet, but it's certainly
there!  I don't like the spelling of the C code, but who cares?  It
works.

16 months agoA start on draw_char().
Simon Forman [Sun, 26 Feb 2023 18:52:09 +0000 (10:52 -0800)]
A start on draw_char().

16 months agoRename anim_callback to draw_background
Simon Forman [Sun, 26 Feb 2023 18:18:46 +0000 (10:18 -0800)]
Rename anim_callback to draw_background

because that's what it is

16 months agoi can haz font data
Simon Forman [Sun, 26 Feb 2023 18:11:58 +0000 (10:11 -0800)]
i can haz font data

ooo that's a finicky parser tho

Early days.  It's all good.

(But damn those Rust tracebacks, what a useless pile of text.  i know
the problem is in the parser!?  why is it showing me all the rust
internal crap and none of the actual stack trace of the ncc code?  I
mean, look at this thing:

    sforman@bock:~/src/Joypy/implementations/uvm-ncc % setenv RUST_BACKTRACE full
    sforman@bock:~/src/Joypy/implementations/uvm-ncc % gmake
    cd /home/sforman/src/uvm/ncc ; cargo run /home/sforman/src/Joypy/implementations/uvm-ncc/xerblin.c
        Finished dev [unoptimized + debuginfo] target(s) in 0.01s
         Running `target/debug/ncc /home/sforman/src/Joypy/implementations/uvm-ncc/xerblin.c`
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseError { msg: "expected identifier", line_no: 139, col_no: 20 }', src/main.rs:98:43
    stack backtrace:
       0:          0x10d741f - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h919bef3d5abebde9
       1:          0x10ee08e - core::fmt::write::h6413343c5226105f
       2:          0x10bce85 - std::io::Write::write_fmt::had0ddcb25461208f
       3:          0x10d71d5 - std::sys_common::backtrace::print::h5ed9962f90e9b258
       4:          0x10c6eff - std::panicking::default_hook::{{closure}}::h3978a8a8f5c1f893
       5:          0x10c6b91 - std::panicking::default_hook::h0cdbdd5201407347
       6:          0x10c75bb - std::panicking::rust_panic_with_hook::h15bc8b6da20c2af3
       7:          0x10d7777 - std::panicking::begin_panic_handler::{{closure}}::h082a693f9436206b
       8:          0x10d756c - std::sys_common::backtrace::__rust_end_short_backtrace::h56343aa2331ff455
       9:          0x10c7142 - rust_begin_unwind
      10:          0x10ed3d3 - core::panicking::panic_fmt::hf18d1d226927e137
      11:          0x10efa93 - core::result::unwrap_failed::ha5725a0b4539229c
      12:          0x105b505 - core::result::Result<T,E>::unwrap::h0f336a18a308049e
                                   at /wrkdirs/usr/ports/lang/rust/work/rustc-1.66.0-src/library/core/src/result.rs:1113:23
      13:          0x1068314 - ncc::main::h189929cbc5450262
                                   at /usr/home/sforman/src/uvm/ncc/src/main.rs:98:20
      14:          0x10611cb - core::ops::function::FnOnce::call_once::h8146a3c8fa28ca14
                                   at /wrkdirs/usr/ports/lang/rust/work/rustc-1.66.0-src/library/core/src/ops/function.rs:251:5
      15:          0x106e13e - std::sys_common::backtrace::__rust_begin_short_backtrace::h4e9f285841c55b79
                                   at /wrkdirs/usr/ports/lang/rust/work/rustc-1.66.0-src/library/std/src/sys_common/backtrace.rs:121:18
      16:          0x1069fa1 - std::rt::lang_start::{{closure}}::h8ca60a785648e691
                                   at /wrkdirs/usr/ports/lang/rust/work/rustc-1.66.0-src/library/std/src/rt.rs:166:18
      17:          0x10c1514 - std::rt::lang_start_internal::hadf3843363799440
      18:          0x1069f7a - std::rt::lang_start::h3ee6ffb894d9f1d3
                                   at /wrkdirs/usr/ports/lang/rust/work/rustc-1.66.0-src/library/std/src/rt.rs:165:17
      19:          0x10684ee - main
      20:          0x104f472 - _start
                                   at /usr/src/lib/csu/amd64/crt1.c:76:7
    gmake: *** [GNUmakefile:11: /home/sforman/src/uvm/ncc/out.asm] Error 101

There's ONE LINE from the ncc source: uvm/ncc/src/main.rs:98:20 which is a call
to parse_unit, but it's the following unwrap that seems to be causing the error
message?

16 months agoThis compiles.
Simon Forman [Sun, 26 Feb 2023 18:06:39 +0000 (10:06 -0800)]
This compiles.

16 months agoI think I got it.
Simon Forman [Sun, 26 Feb 2023 18:01:40 +0000 (10:01 -0800)]
I think I got it.

16 months agoAdding a function and it still compiles.
Simon Forman [Sun, 26 Feb 2023 17:39:21 +0000 (09:39 -0800)]
Adding a function and it still compiles.

16 months agoThis compiles and runs, include font.h but don't call init_font_data() yet.
Simon Forman [Sun, 26 Feb 2023 17:37:59 +0000 (09:37 -0800)]
This compiles and runs, include font.h but don't call init_font_data() yet.

16 months agoSo far...
Simon Forman [Sun, 26 Feb 2023 17:37:20 +0000 (09:37 -0800)]
So far...

16 months agoDrawing pixel per mouse move is slow at 1280x800.
Simon Forman [Sun, 26 Feb 2023 16:52:53 +0000 (08:52 -0800)]
Drawing pixel per mouse move is slow at 1280x800.

So let's just use a smaller screen for now, eh?

16 months agoRepair damage during mouse move.
Simon Forman [Sun, 26 Feb 2023 16:42:37 +0000 (08:42 -0800)]
Repair damage during mouse move.

This is a compromise between updating the screen every frame (which
takes ~60% CPU on my old no-GPU hardware) and repairing damage from e.g.
dragging offscreen and back on, or covering and uncovering the window
with another window.

16 months agoIgnore tryrax binary.
Simon Forman [Sun, 26 Feb 2023 15:58:18 +0000 (07:58 -0800)]
Ignore tryrax binary.

16 months agoLet's use uvm.
Simon Forman [Sun, 26 Feb 2023 15:53:47 +0000 (07:53 -0800)]
Let's use uvm.

https://github.com/maximecb/uvm

16 months agoAllocate a buffer just large enough.
Simon Forman [Tue, 21 Feb 2023 00:23:41 +0000 (16:23 -0800)]
Allocate a buffer just large enough.

I figure that's worth the overhead of iterating twice.  It's happening
during a user interaction so there's plenty of time, eh?

16 months agoBreak up completion into simple and prefixed cases.
Simon Forman [Tue, 21 Feb 2023 00:04:12 +0000 (16:04 -0800)]
Break up completion into simple and prefixed cases.

16 months agoHandle completion of symbols with a prefix...
Simon Forman [Mon, 20 Feb 2023 23:48:59 +0000 (15:48 -0800)]
Handle completion of symbols with a prefix...

You can type stuff and then tab and it will work.  Before it would try
to complete the whole line, which didn't work.

16 months agoLinenoise with rax.
Simon Forman [Mon, 20 Feb 2023 20:53:58 +0000 (12:53 -0800)]
Linenoise with rax.

16 months agoLet's use rax to generate tab completions?
Simon Forman [Mon, 20 Feb 2023 19:19:27 +0000 (11:19 -0800)]
Let's use rax to generate tab completions?

16 months agoLine editing with linenoise.
Simon Forman [Mon, 20 Feb 2023 18:20:40 +0000 (10:20 -0800)]
Line editing with linenoise.

https://github.com/antirez/linenoise
https://todo.sr.ht/~sforman/thun-der/33

16 months agoMove and rename push_thing_onto_expression().
Simon Forman [Mon, 20 Feb 2023 16:35:03 +0000 (08:35 -0800)]
Move and rename push_thing_onto_expression().

16 months agoMinor cleanup.
Simon Forman [Mon, 20 Feb 2023 14:38:18 +0000 (06:38 -0800)]
Minor cleanup.

16 months agotypedef FTW
Simon Forman [Mon, 20 Feb 2023 04:06:07 +0000 (20:06 -0800)]
typedef FTW

16 months agoWrap it?
Simon Forman [Mon, 20 Feb 2023 03:43:53 +0000 (19:43 -0800)]
Wrap it?

16 months agoI figured out how to spell it.
Simon Forman [Mon, 20 Feb 2023 03:41:11 +0000 (19:41 -0800)]
I figured out how to spell it.

16 months agoA little macro.
Simon Forman [Mon, 20 Feb 2023 03:40:43 +0000 (19:40 -0800)]
A little macro.

16 months agoLet's use the idiomatic functions, eh?
Simon Forman [Mon, 20 Feb 2023 01:54:34 +0000 (17:54 -0800)]
Let's use the idiomatic functions, eh?

That way the code is simpler and there aren't error messages scattered
all over the place.

16 months agoHow would you compile this?
Simon Forman [Mon, 20 Feb 2023 01:43:18 +0000 (17:43 -0800)]
How would you compile this?

    fn [+] step

16 months agoSWIProlog vlist
Simon Forman [Sun, 19 Feb 2023 04:09:19 +0000 (20:09 -0800)]
SWIProlog

16 months agoeval_joy_ast
Simon Forman [Fri, 17 Feb 2023 21:56:37 +0000 (13:56 -0800)]
eval_joy_ast

16 months agoA simple Joy-to-AST program.
Simon Forman [Fri, 17 Feb 2023 19:08:43 +0000 (11:08 -0800)]
A simple Joy-to-AST program.

Written in GNU Prolog, doncha know!?  :D

16 months agovlist.c
Simon Forman [Fri, 17 Feb 2023 19:07:32 +0000 (11:07 -0800)]
vlist.c

17 months agoMinor cleanup.
Simon Forman [Fri, 17 Feb 2023 01:45:25 +0000 (17:45 -0800)]
Minor cleanup.

17 months agoMinor cleanup.
Simon Forman [Thu, 16 Feb 2023 21:36:31 +0000 (13:36 -0800)]
Minor cleanup.

17 months agoMinor cleanup.
Simon Forman [Thu, 16 Feb 2023 21:26:11 +0000 (13:26 -0800)]
Minor cleanup.

17 months agopick and length
Simon Forman [Thu, 16 Feb 2023 20:12:42 +0000 (12:12 -0800)]
pick and length

17 months agoMinor cleanup. This is pretty nice.
Simon Forman [Thu, 16 Feb 2023 19:45:54 +0000 (11:45 -0800)]
Minor cleanup.  This is pretty nice.

It's hard to believe this datastructure is so obscure!

17 months agoDouble list size each time; neat demo.
Simon Forman [Thu, 16 Feb 2023 19:42:17 +0000 (11:42 -0800)]
Double list size each time; neat demo.

17 months agoSet correct last_used when creating new vlist.
Simon Forman [Thu, 16 Feb 2023 19:41:35 +0000 (11:41 -0800)]
Set correct last_used when creating new vlist.

17 months ago() is the null pointer
Simon Forman [Thu, 16 Feb 2023 19:27:39 +0000 (11:27 -0800)]
() is the null pointer