all repos — min @ bfd0fd447fa5d7282e3a8623d5f84ed4f802f9e2

A small but practical concatenative programming language.

Removed gui module - decided to keep things simple.
h3rald h3rald@h3rald.com
Fri, 15 May 2026 11:09:53 +0200
commit

bfd0fd447fa5d7282e3a8623d5f84ed4f802f9e2

parent

60f839a52b1850f134c3e4b33439d327d83d77ac

6 files changed, 0 insertions(+), 244 deletions(-)

jump to
M min.nimblemin.nimble

@@ -18,4 +18,3 @@ requires "zippy >= 0.5.6 & < 0.6.0"

requires "nimquery >= 2.0.1 & < 3.0.0" requires "minline >= 0.1.2 & < 0.2.0" requires "htmlparser >= 0.1.0 & < 0.2.0" -requires "https://github.com/h3rald/fenstim"
M minpkg/core/stdlib.nimminpkg/core/stdlib.nim

@@ -23,7 +23,6 @@ min_xml,

min_http, min_net, min_crypto, - min_gui, min_math] var customPrelude* {.threadvar.}: string

@@ -49,7 +48,6 @@ i.net_module

i.math_module i.http_module i.xml_module - i.gui_module if customPrelude != "": try: i.eval customPrelude.readFile, customPrelude
D minpkg/lib/min_gui.nim

@@ -1,144 +0,0 @@

-import std/sequtils - -import pkg/fenstim, fenstim_audio - -import - ../core/parser, - ../core/interpreter, - ../core/value, - ../core/utils - -var WINDOWS*: seq[Fenster] = @[] -var AUDIO*: seq[FensterAudio] = @[] - -proc window(i: In, v: MinValue): var Fenster = - return WINDOWS[i.dget(v, "ref").intVal] - -proc audio(i: In, v: MinValue): var FensterAudio = - return AUDIO[i.dget(v, "ref").intVal] - -proc close(i: In, v: MinValue) = - i.window(v).close() - let r = i.dget(v, "ref").intVal - WINDOWS.delete(r) - -proc stop(i: In, v: MinValue) = - i.audio(v).close() - let r = i.dget(v, "ref").intVal - AUDIO.delete(r) - -proc gui_module*(i: In) = - let def = i.define() - - def.symbol("window") do (i: In): - let vals = i.expect("dict") - var d = vals[0] - var title = "min" - var height = 400 - var width = 400 - var fps = 60 - if d.dhas("title"): - title = i.dget(d, "title").getString - if d.dhas("height"): - height = i.dget(d, "height").intVal - if d.dhas("width"): - width = i.dget(d, "width").intVal - if d.dhas("fps"): - fps = i.dget(d, "fps").intVal - var window = Fenster.init(title, width, height, fps) - var win = newDict(i.scope) - win = i.dset(win, "title", title.newVal) - win = i.dset(win, "height", height.newVal) - win = i.dset(win, "width", width.newVal) - win = i.dset(win, "fps", fps.newVal) - win = i.dset(win, "ref", WINDOWS.len.newVal) - win.objType = "window" - WINDOWS.add window - i.push win - - def.symbol("loop") do (i: In): - var vals = i.expect("quot", "dict:window") - while i.window(vals[1]).loop: - i.dequote vals[0] - - def.symbol("close") do (i: In): - var vals = i.expect("dict:window") - i.close(vals[0]) - - def.symbol("pixel") do (i: In): - var vals = i.expect("quot", "dict:window") - i.push i.window(vals[1]).pixel(vals[0].qVal[0].intVal, vals[0].qVal[ - 1].intVal).int.newVal - - def.symbol("draw") do (i: In): - var vals = i.expect("int", "quot", "dict:window") - var f = i.window(vals[2]) - let x = vals[1].qVal[0].intVal - let y = vals[1].qVal[1].intVal - let v = vals[0].intVal.uint32 - f.pixel(x, y) = v - - def.symbol("width") do (i: In): - var vals = i.expect("dict:window") - i.push i.window(vals[0]).width.newVal - - def.symbol("height") do (i: In): - var vals = i.expect("dict:window") - i.push i.window(vals[0]).height.newVal - - def.symbol("keys") do (i: In): - var vals = i.expect("dict:window") - i.push i.window(vals[0]).keys.mapIt(it.int.newVal).newVal - - def.symbol("modkey") do (i: In): - var vals = i.expect("dict:window") - i.push i.window(vals[0]).modkey.newVal - - def.symbol("mouse") do (i: In): - var vals = i.expect("dict:window") - var win = i.window(vals[0]) - var mouse = newDict(i.scope) - # Double quote quotations - let click = @[win.mouse.mclick.mapIt( - it.int.newVal).newVal].newVal - let hold = @[win.mouse.mhold.mapIt( - it.int.newVal).newVal].newVal - i.dset(mouse, "x", win.mouse.pos.x.newVal) - i.dset(mouse, "y", win.mouse.pos.y.newVal) - i.dset(mouse, "click", click) - i.dset(mouse, "hold", hold) - i.push mouse - - def.symbol("sleep") do (i: In): - var vals = i.expect("int", "dict:window") - i.window(vals[1]).sleep(vals[0].intVal) - - def.symbol("time") do (i: In): - var vals = i.expect("dict:window") - i.push i.window(vals[0]).time.newVal - - def.symbol("clear") do (i: In): - var vals = i.expect("dict:window") - i.window(vals[0]).clear() - - def.symbol("audio") do (i: In): - var audio = FensterAudio.init() - var aud = newDict(i.scope) - aud = i.dset(aud, "ref", AUDIO.len.newVal) - aud.objType = "audio" - AUDIO.add audio - i.push aud - - def.symbol("samples") do (i: In): - var vals = i.expect("dict:audio") - i.push (i.audio(vals[0]).available).newVal - - def.symbol("play") do (i: In): - var vals = i.expect("quot", "dict:audio") - i.audio(vals[1]).write(vals[0].qVal.mapIt(it.floatVal.float32)) - - def.symbol("stop") do (i: In): - var vals = i.expect("dict:audio") - i.stop(vals[0]) - - def.finalize("gui")
M next-release.mdnext-release.md

@@ -1,5 +1,4 @@

### Fixes and Improvements -* Implemented a simple `gui` module based on [Fenster](https://zserge.com/posts/fenster/) and [Fenstim](https://github.com/CardealRusso/fenstim) (Closes #70). * Fixed compilation of dictionary literals (Closes #194).
D site/contents/reference-gui.md

@@ -1,77 +0,0 @@

------ -content-type: "page" -title: "gui Module" ------ -{@ _defs_.md || 0 @} - -{#op||audio||{{none}}||{{audio}}|| -... -#} - -{#op||clear||{{window}}||{{none}}|| -... -#} - -{#op||close||{{window}}||{{none}}|| -... -#} - -{#op||draw||{{window}} {{q}} {{i}}||{{none}}|| -... -#} - -{#op||height||{{window}}||{{i}}|| -... -#} - -{#op||keys||{{window}}||{{i}}|| -... -#} - -{#op||loop||{{window}} {{q}}||{{none}}|| -... -#} - -{#op||modkey||{{window}}||{{i}}|| -... -#} - -{#op||mouse||{{window}}||{{i}}|| -... -#} - -{#op||pixel||{{window}} {{q}}||{{none}}|| -... -#} - -{#op||play||{{audio}} {{q}}||{{none}}|| -... -#} - -{#op||samples||{{audio}}||{{i}}|| -... -#} - -{#op||sleep||{{window}}||{{i}}|| -... -#} - -{#op||stop||{{audio}}||{{none}}|| -... -#} - -{#op||time||{{window}}||{{i}}|| -... -#} - -{#op||width||{{window}}||{{i}}|| -... -#} - -{#op||window||{{d}}||{{window}}|| -Creates a new window by specifying a dictionary containing the following keys: - -* title -* width -* height -* fps (default: 60) #}
M site/contents/reference.mdsite/contents/reference.md

@@ -15,8 +15,6 @@ {#link-module||dict#}

: Defines operators for dictionaries, like `dict.get`, `dict.dup`, `dict.set`, etc. {#link-module||fs#} : Provides operators for reading and writing files, and accessing file information and properties. -{#link-module||gui#} -: Provides operators for creating simple graphical user interfaces by drawing pixels, managing mouse clicks, key presses, and simple audio. {#link-module||http#} : Provides operators to perform HTTP requests, download files and create basic HTTP servers. {#link-module||io#}

@@ -210,24 +208,7 @@ {{xnode}}

: A typealias to identify all XML dictionary types. dict:xml-element||dict:xml-text||dict:xml-comment||dict:xml-entity||dict:xml-cdata -{{window}} -: A dictionary representing a GUI window. - { - "Audio Test" :title - 60 :fps - 320 :height - 320 :width - 0 :ref - ;window - } -{{audio}} -: A dictionary representing the system audio device. - - { - 0 :ref - ;audio - } ### Suffixes