1
0
Fork 0
forked from fun/fun

Removed all notcurses support. (0.40.3)

This commit is contained in:
Johannes Findeisen 2026-04-03 19:00:53 +02:00
commit 45dbcde527
8 changed files with 3 additions and 318 deletions

View file

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
project(fun VERSION 0.40.2 LANGUAGES C) project(fun VERSION 0.40.3 LANGUAGES C)
set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD_REQUIRED ON)

View file

@ -20,7 +20,6 @@ include(${CMAKE_SOURCE_DIR}/cmake/Extensions/XML2.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Extensions/LIBSQL.cmake) include(${CMAKE_SOURCE_DIR}/cmake/Extensions/LIBSQL.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Extensions/PCRE2.cmake) include(${CMAKE_SOURCE_DIR}/cmake/Extensions/PCRE2.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Extensions/CURL.cmake) include(${CMAKE_SOURCE_DIR}/cmake/Extensions/CURL.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Extensions/NOTCURSES.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Extensions/REPL.cmake) include(${CMAKE_SOURCE_DIR}/cmake/Extensions/REPL.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Extensions/OPENSSL.cmake) include(${CMAKE_SOURCE_DIR}/cmake/Extensions/OPENSSL.cmake)
@ -35,7 +34,6 @@ _fun_print_feature("libxml2 (FUN_WITH_XML2)" FUN_WITH_XML2)
_fun_print_feature("libsql (FUN_WITH_LIBSQL)" FUN_WITH_LIBSQL) _fun_print_feature("libsql (FUN_WITH_LIBSQL)" FUN_WITH_LIBSQL)
_fun_print_feature("PCRE2 (FUN_WITH_PCRE2)" FUN_WITH_PCRE2) _fun_print_feature("PCRE2 (FUN_WITH_PCRE2)" FUN_WITH_PCRE2)
_fun_print_feature("libcurl (FUN_WITH_CURL)" FUN_WITH_CURL) _fun_print_feature("libcurl (FUN_WITH_CURL)" FUN_WITH_CURL)
_fun_print_feature("Notcurses (FUN_WITH_NOTCURSES)" FUN_WITH_NOTCURSES)
_fun_print_feature("REPL (FUN_WITH_REPL)" FUN_WITH_REPL) _fun_print_feature("REPL (FUN_WITH_REPL)" FUN_WITH_REPL)
_fun_print_feature("OpenSSL (FUN_WITH_OPENSSL)" FUN_WITH_OPENSSL) _fun_print_feature("OpenSSL (FUN_WITH_OPENSSL)" FUN_WITH_OPENSSL)
message(STATUS "--------------------------------") message(STATUS "--------------------------------")

View file

@ -36,7 +36,6 @@ foreach(var_pair
LIBSQL LIBSQL
LIBXML2 LIBXML2
TCL TCL
NOTCURSES
OPENSSL) OPENSSL)
if(${var_pair}_INCLUDE_DIRS) if(${var_pair}_INCLUDE_DIRS)
target_include_directories(fun_core PRIVATE ${${var_pair}_INCLUDE_DIRS}) target_include_directories(fun_core PRIVATE ${${var_pair}_INCLUDE_DIRS})
@ -78,9 +77,6 @@ if(FUN_WITH_CURL)
target_compile_definitions(fun_core PUBLIC FUN_WITH_CURL=1) target_compile_definitions(fun_core PUBLIC FUN_WITH_CURL=1)
endif() endif()
if(FUN_WITH_NOTCURSES)
target_compile_definitions(fun_core PUBLIC FUN_WITH_NOTCURSES=1)
endif()
if(FUN_WITH_SQLITE) if(FUN_WITH_SQLITE)
target_compile_definitions(fun_core PUBLIC FUN_WITH_SQLITE=1) target_compile_definitions(fun_core PUBLIC FUN_WITH_SQLITE=1)

View file

@ -1,46 +0,0 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2026-01-03
*/
/*
* Minimal Notcurses hello example.
*/
include <ui/notcurses.fun>
n = Notcurses()
if n.init() == 0
print("Notcurses not available. Rebuild with -DFUN_WITH_NOTCURSES=ON.")
exit(0)
n.clear()
n.draw_text(2, 0, "Fun + Notcurses")
n.draw_text(4, 0, "Press any key to exit...")
// blocking until key
_ = n.getch(0)
n.shutdown()
/* Possible output:
A TUI.
After exit:
3 renders, 991,14µs (223,57µs min, 330,38µs avg, 531,91µs max)
3 rasters, 320,76µs (106,45µs min, 106,92µs avg, 107,72µs max)
3 writes, 198,26µs (62,54µs min, 66,09µs avg, 69,94µs max)
59B (0B min, 19B avg, 30B max) 1 input Ghpa: 0
0 failed renders, 0 failed rasters, 0 refreshes, 0 input errors
RGB emits:elides: def 1:38 fg 0:0 bg 0:0
Cell emits:elides: 39:74805 (99,95%) 97,44% 0,00% 0,00%
Bmap emits:elides: 0:0 (0,00%) 0B (0,00%) SuM: 0 (0,00%)
*/

View file

@ -1,33 +0,0 @@
#!/usr/bin/env fun
include <ui/notcurses.fun>
n = Notcurses()
if n.init() == 0
print("Notcurses not available. Build with -DFUN_WITH_NOTCURSES=ON.")
exit(1)
items = ["First", "Second", "Third", "Fourth"]
sel = 0
while true
n.clear()
// Title
n.set_style(0xFFFF00, 0x000000, 1) // bold yellow
n.draw_text(1, 2, "Demo Menu (j/k to move, Enter to select, ESC to quit)")
// Render menu list
n.menu(3, 4, items, sel, 30, 0, 32)
key = n.getch(0)
if key == 27 // ESC
break
if key == 106 // 'j'
sel = (sel + 1) % len(items)
if key == 107 // 'k'
sel = (sel - 1 + len(items)) % len(items)
if key == 10 // Enter
n.status_bar("Selected: " + items[sel], 32)
// brief wait
sleep_ms(300)
n.shutdown()

View file

@ -1,38 +0,0 @@
#!/usr/bin/env fun
include <ui/notcurses.fun>
n = Notcurses()
if n.init() == 0
print("Notcurses not available. Build with -DFUN_WITH_NOTCURSES=ON.")
exit(1)
n.clear()
sz = n.size()
rows = 24
cols = 80
if typeof(sz) == "array"
if len(sz) >= 2
rows = sz[0]
cols = sz[1]
y = to_number(rows) / 2
w = cols - 10
if w < 20
w = 20
i = 0
while i <= 100
// styles handled inside progress(); keep plane sane
rc = n.set_style(0x00FF00, 0x000000, 1)
frac = to_number(i) / 100
rc = n.progress(y, 5, w, frac, 0)
k = n.getch(10)
i = i + 1
// final message
rc = n.set_style(0xFFFFFF, 0x000000, 1)
rc = n.draw_text(y + 2, 5, "Done!")
rc = n.render()
rc = n.shutdown()

View file

@ -1,172 +0,0 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2026-01-03
*/
// Notcurses stdlib abstraction wrapping VM NC_* builtins.
// Provides a tiny OO-style helper around nc_init/nc_clear/nc_draw_text/nc_getch/nc_shutdown.
// If Fun was built without Notcurses support, init() returns 0 and methods are no-ops.
class Notcurses()
// Initialize Notcurses core. Returns 1 on success, 0 on failure.
fun init(this)
return nc_init()
// Clear the screen and render. Returns 0 on success, -1 on error.
fun clear(this)
return nc_clear()
// Draw text at y, x and render. Returns 0 on success, -1 on error.
fun draw_text(this, y, x, text)
// allow flexible types
return nc_draw_text(to_number(y), to_number(x), to_string(text))
// Get a Unicode codepoint (int). timeout_ms<=0 blocks; >0 returns -1 if no key ready.
fun getch(this, timeout_ms)
if timeout_ms == nil
timeout_ms = 0
return nc_getch(to_number(timeout_ms))
// Shut down Notcurses, restoring the terminal.
fun shutdown(this)
return nc_shutdown()
// (banner helper removed temporarily due to parser limitations)
// --- Extended primitives ---
fun size(this)
return nc_get_size()
fun render(this)
return nc_render()
// fg/bg are 0xRRGGBB, style bitmask: bold(1), dim(2), italic(4), underline(8), strike(16), reverse(32)
fun set_style(this, fg, bg, style)
// parser order for builtin is (style,bg,fg)
return nc_set_style(to_number(style), to_number(bg), to_number(fg))
fun draw_char(this, y, x, ch)
return nc_draw_char(to_number(y), to_number(x), to_number(ch))
fun hline(this, y, x, len, ch)
return nc_draw_hline(to_number(y), to_number(x), to_number(len), to_number(ch))
fun vline(this, y, x, len, ch)
return nc_draw_vline(to_number(y), to_number(x), to_number(len), to_number(ch))
fun box(this, y, x, h, w, style)
// builtin expects (x,y,w,h,style)
return nc_box(to_number(x), to_number(y), to_number(w), to_number(h), to_number(style))
fun fill(this, y, x, h, w, ch)
// builtin expects (x,y,w,h,ch)
return nc_fill(to_number(x), to_number(y), to_number(w), to_number(h), to_number(ch))
// --- Widgets as methods ---
// Status bar on the last row
fun status_bar(this, text, style)
sz = this.size()
if style == nil
style = 32
rc = this.set_style(0x000000, 0xFFFFFF, style)
rc = this.fill(sz[0] - 1, 0, 1, sz[1], 32)
rc = this.draw_text(sz[0] - 1, 1, text)
rc = this.render()
return 0
// Draw styled label
fun label(this, y, x, text, style)
if style != nil
rc = this.set_style(0xFFFFFF, 0x000000, style)
rc = this.draw_text(y, x, text)
rc = this.render()
return 0
// Panel with optional title
fun box_panel(this, y, x, h, w, title, style)
if style == nil
style = 0
rc = this.box(y, x, h, w, style)
if title != nil
rc = this.draw_text(y, x + 2, to_string(title))
rc = this.render()
return 0
// Progress bar (frac in 0..1)
fun progress(this, y, x, w, frac, style)
if style == nil
style = 0
if frac < 0
frac = 0
if frac > 1
frac = 1
// frame and title
rc = nc_box(to_number(x - 2), to_number(y - 1), to_number(w + 4), 3, to_number(style))
// background in dim gray
rc = this.set_style(0x606060, 0x000000, 2)
rc = nc_fill(to_number(y), to_number(x), to_number(w), 1, 46) // '.'
// filled portion in bold green
rc = this.set_style(0x00FF00, 0x000000, 1)
fw = to_number(frac) * w
if fw < 0
fw = 0
if fw > w
fw = w
if fw > 0
rc = nc_fill(to_number(y), to_number(x), to_number(fw), 1, 35) // '#'
rc = nc_draw_text(to_number(y - 1), to_number(x), "Progress")
rc = nc_render()
return 0
// Simple vertical menu, highlight selected index
fun menu(this, y, x, items, selected_idx, w, style, sel_style)
if style == nil
style = 0
if sel_style == nil
sel_style = 32
i = 0
while i < len(items)
if i == selected_idx
rc = this.set_style(0x000000, 0xFFFFFF, sel_style)
else
rc = this.set_style(0xFFFFFF, 0x000000, style)
if w != nil
if len(to_string(items[i])) > w
rc = this.draw_text(y + i, x, substr(to_string(items[i]), 0, w))
else
rc = this.draw_text(y + i, x, to_string(items[i]))
else
rc = this.draw_text(y + i, x, to_string(items[i]))
i = i + 1
rc = this.render()
return 0
// Input line echo with cursor
fun input_line(this, y, x, prompt, buffer, cursor_idx, w, style)
if style == nil
style = 0
if w == nil
w = len(buffer) + len(prompt) + 2
rc = this.set_style(0xFFFFFF, 0x000000, style)
rc = this.draw_text(y, x, to_string(prompt))
rc = this.fill(y, x + len(prompt), 1, w, 32)
rc = this.draw_text(y, x + len(prompt), to_string(buffer))
this.set_style(0x000000, 0xFFFFFF, 32)
ci = cursor_idx
if ci < 0
ci = 0
if ci > len(buffer)
ci = len(buffer)
rc = this.draw_char(y, x + len(prompt) + ci, 32)
rc = this.render()
return 0
// --- End of class Notcurses ---

View file

@ -53,12 +53,7 @@
#include "value.h" #include "value.h"
#include "vm.h" #include "vm.h"
/* Shared Notcurses state (optional) */ /* Notcurses support removed */
#ifdef FUN_WITH_NOTCURSES
#include <notcurses/notcurses.h>
#include <wchar.h> /* ensure wcwidth/wcswidth prototypes present before notcurses.h on some systems */
#endif
#include "vm/notcurses/common.h"
// Optional by extensions commonly used code. #ifdef's are in each single file. // Optional by extensions commonly used code. #ifdef's are in each single file.
#include "external/curl.c" #include "external/curl.c"
@ -863,22 +858,7 @@ void vm_run(VM *vm, Bytecode *entry) {
#include "vm/tk/wm_title.c" #include "vm/tk/wm_title.c"
#endif #endif
/* Notcurses TUI ops (optional) */ /* Notcurses TUI ops removed */
#ifdef FUN_WITH_NOTCURSES
#include "vm/notcurses/clear.c"
#include "vm/notcurses/draw_text.c"
#include "vm/notcurses/getch.c"
#include "vm/notcurses/init.c"
#include "vm/notcurses/shutdown.c"
#include "vm/notcurses/get_size.c"
#include "vm/notcurses/set_style.c"
#include "vm/notcurses/draw_char.c"
#include "vm/notcurses/hline.c"
#include "vm/notcurses/vline.c"
#include "vm/notcurses/box.c"
#include "vm/notcurses/fill.c"
#include "vm/notcurses/render.c"
#endif
/* SQLite ops */ /* SQLite ops */
#ifdef FUN_WITH_SQLITE #ifdef FUN_WITH_SQLITE