From ead7d296f751ca901aa7a220777cefdd0098e58a Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Thu, 5 Mar 2026 19:18:11 +0100 Subject: [PATCH] feat: add word processor, spreadsheet, kernel and userspace memory improvements --- kernel/src/Api/WinServer.cpp | 27 +- kernel/src/Memory/PageFrameAllocator.cpp | 84 +- kernel/src/Memory/PageFrameAllocator.hpp | 2 + programs/GNUmakefile | 11 +- programs/gui/fonts/C059/C059-Bold.ttf | Bin 0 -> 215028 bytes programs/gui/fonts/C059/C059-Italic.ttf | Bin 0 -> 212536 bytes programs/gui/fonts/C059/C059-Roman.ttf | Bin 0 -> 217884 bytes programs/include/gui/desktop.hpp | 1 + programs/include/gui/svg.hpp | 29 +- programs/include/gui/terminal.hpp | 17 +- programs/include/montauk/heap.h | 7 +- programs/src/desktop/Makefile | 2 +- programs/src/desktop/app_spreadsheet.cpp | 12 + programs/src/desktop/app_terminal.cpp | 2 + programs/src/desktop/app_wordprocessor.cpp | 1779 +++++++++++++++++ programs/src/desktop/apps_common.hpp | 2 + programs/src/desktop/main.cpp | 106 +- programs/src/spreadsheet/Makefile | 86 + programs/src/spreadsheet/edit.cpp | 245 +++ programs/src/spreadsheet/fileio.cpp | 125 ++ programs/src/spreadsheet/formula.cpp | 308 +++ programs/src/spreadsheet/helpers.cpp | 194 ++ programs/src/spreadsheet/main.cpp | 538 +++++ programs/src/spreadsheet/render.cpp | 342 ++++ programs/src/spreadsheet/spreadsheet.h | 240 +++ .../src/spreadsheet/stb_truetype_impl.cpp | 35 + scripts/copy_fonts.sh | 7 + scripts/copy_icons.sh | 1 + 28 files changed, 4146 insertions(+), 56 deletions(-) create mode 100644 programs/gui/fonts/C059/C059-Bold.ttf create mode 100644 programs/gui/fonts/C059/C059-Italic.ttf create mode 100644 programs/gui/fonts/C059/C059-Roman.ttf create mode 100644 programs/src/desktop/app_spreadsheet.cpp create mode 100644 programs/src/desktop/app_wordprocessor.cpp create mode 100644 programs/src/spreadsheet/Makefile create mode 100644 programs/src/spreadsheet/edit.cpp create mode 100644 programs/src/spreadsheet/fileio.cpp create mode 100644 programs/src/spreadsheet/formula.cpp create mode 100644 programs/src/spreadsheet/helpers.cpp create mode 100644 programs/src/spreadsheet/main.cpp create mode 100644 programs/src/spreadsheet/render.cpp create mode 100644 programs/src/spreadsheet/spreadsheet.h create mode 100644 programs/src/spreadsheet/stb_truetype_impl.cpp diff --git a/kernel/src/Api/WinServer.cpp b/kernel/src/Api/WinServer.cpp index b71ea8d..60d1399 100644 --- a/kernel/src/Api/WinServer.cpp +++ b/kernel/src/Api/WinServer.cpp @@ -97,6 +97,19 @@ namespace WinServer { } } + // Unmap pixel pages from the owner's address space so that + // FreeUserHalf() won't double-free them when the process exits. + { + auto* ownerProc = Sched::GetProcessByPid(slot.ownerPid); + if (ownerProc) { + for (int p = 0; p < slot.pixelNumPages; p++) { + Memory::VMM::Paging::UnmapUserIn( + ownerProc->pml4Phys, + slot.ownerVa + (uint64_t)p * 0x1000); + } + } + } + // Free physical pixel pages for (int i = 0; i < slot.pixelNumPages; i++) { if (slot.pixelPhysPages[i] != 0) { @@ -198,9 +211,11 @@ namespace WinServer { int numPages = (int)((bufSize + 0xFFF) / 0x1000); if (numPages > MaxPixelPages) return -1; - // Free old pixel pages before allocating new ones + // Unmap old pixel pages from owner's address space, then free them int oldNumPages = slot.pixelNumPages; for (int i = 0; i < oldNumPages; i++) { + Memory::VMM::Paging::UnmapUserIn( + ownerPml4, slot.ownerVa + (uint64_t)i * 0x1000); if (slot.pixelPhysPages[i] != 0) { Memory::g_pfa->Free((void*)Memory::HHDM(slot.pixelPhysPages[i])); slot.pixelPhysPages[i] = 0; @@ -271,12 +286,10 @@ namespace WinServer { } } - // Free physical pixel pages - for (int p = 0; p < g_slots[i].pixelNumPages; p++) { - if (g_slots[i].pixelPhysPages[p] != 0) { - Memory::g_pfa->Free((void*)Memory::HHDM(g_slots[i].pixelPhysPages[p])); - } - } + // Do NOT free physical pixel pages here — they are still mapped + // in the owner's page tables and FreeUserHalf() (called right + // after CleanupProcess) will free them. Freeing here would + // cause a double-free, creating a cycle in the PFA free list. g_slots[i].used = false; } diff --git a/kernel/src/Memory/PageFrameAllocator.cpp b/kernel/src/Memory/PageFrameAllocator.cpp index 0082b8b..0782cf8 100644 --- a/kernel/src/Memory/PageFrameAllocator.cpp +++ b/kernel/src/Memory/PageFrameAllocator.cpp @@ -108,20 +108,84 @@ namespace Memory { return nullptr; } - void PageFrameAllocator::Free(void* ptr) { - Lock.Acquire(); - auto prev_next = head.next; - head.next = (Page*)ptr; + // Core free implementation: sorted-insert with coalescing. + // The free list is kept sorted by address so adjacent blocks can be merged, + // preventing fragmentation from accumulating over time. + void PageFrameAllocator::FreeRange(void* ptr, size_t size) { + if (ptr == nullptr || size == 0) return; + + Lock.Acquire(); + + uint64_t addr = (uint64_t)ptr; + + // Walk to find the sorted insertion point: prev < addr < current + Page* prev = &head; + Page* current = head.next; + + while (current != nullptr && (uint64_t)current < addr) { + // Double-free check: addr falls within an existing free block + if (addr < (uint64_t)current + current->size) { + Kt::KernelLogStream(Kt::WARNING, "PFA") + << "Double-free detected at " << addr << ", ignoring"; + Lock.Release(); + return; + } + prev = current; + current = current->next; + } + + // Double-free check: exact match with next block + if (current != nullptr && (uint64_t)current == addr) { + Kt::KernelLogStream(Kt::WARNING, "PFA") + << "Double-free detected at " << addr << ", ignoring"; + Lock.Release(); + return; + } + + // Try to coalesce with previous block (if prev ends where new block starts) + bool merged_prev = false; + if (prev != &head) { + uint64_t prev_end = (uint64_t)prev + prev->size; + if (prev_end == addr) { + prev->size += size; + merged_prev = true; + } + } + + // Try to coalesce with next block (if new block ends where next starts) + if (current != nullptr && addr + size == (uint64_t)current) { + if (merged_prev) { + // Three-way merge: prev absorbs new block and current + prev->size += current->size; + prev->next = current->next; + } else { + // Forward merge: new block absorbs current + Page* new_page = (Page*)addr; + new_page->size = size + current->size; + new_page->next = current->next; + prev->next = new_page; + } + } else if (!merged_prev) { + // No merging possible: insert new block between prev and current + Page* new_page = (Page*)addr; + new_page->size = size; + new_page->next = current; + prev->next = new_page; + } - head.next->next = prev_next; - head.next->size = 0x1000; Lock.Release(); } + void PageFrameAllocator::Free(void* ptr) { + FreeRange(ptr, 0x1000); + } + void PageFrameAllocator::Free(void* ptr, int n) { - for (int i = 0; i < n; i++) { - Free((void*)((uint64_t)ptr + 0x1000 * i)); - } + if (ptr == nullptr || n <= 0) return; + // Free the entire contiguous range as a single block. + // This is more efficient than freeing one page at a time and + // guarantees the range stays coalesced. + FreeRange(ptr, (size_t)n * 0x1000); } void PageFrameAllocator::GetStats(Montauk::MemStats* out) { @@ -140,4 +204,4 @@ namespace Memory { out->usedBytes = g_section.size > freeBytes ? g_section.size - freeBytes : 0; out->pageSize = 0x1000; } -}; \ No newline at end of file +}; diff --git a/kernel/src/Memory/PageFrameAllocator.hpp b/kernel/src/Memory/PageFrameAllocator.hpp index b72000a..d7bdbe6 100644 --- a/kernel/src/Memory/PageFrameAllocator.hpp +++ b/kernel/src/Memory/PageFrameAllocator.hpp @@ -20,6 +20,8 @@ namespace Memory { Page head{}; kcp::Spinlock Lock{}; LargestSection g_section; + + void FreeRange(void* ptr, std::size_t size); public: PageFrameAllocator(LargestSection section); diff --git a/programs/GNUmakefile b/programs/GNUmakefile index 4115b56..a8b40b1 100644 --- a/programs/GNUmakefile +++ b/programs/GNUmakefile @@ -59,7 +59,7 @@ BINDIR := bin PROGRAMS := $(notdir $(wildcard src/*)) # Programs with custom Makefiles (built separately). -CUSTOM_BUILDS := doom fetch wiki wikipedia weather imageviewer fontpreview desktop +CUSTOM_BUILDS := doom fetch wiki wikipedia weather imageviewer fontpreview spreadsheet desktop SYSTEM_PROGRAMS := $(filter-out $(CUSTOM_BUILDS),$(PROGRAMS)) # Build targets: system programs go to bin/os/, games are handled separately. @@ -84,9 +84,9 @@ CA_CERTS := $(BINDIR)/etc/ca-certificates.crt # Home directory placeholder. HOMEKEEP := $(BINDIR)/home/.keep -.PHONY: all clean doom fetch wiki wikipedia weather imageviewer fontpreview desktop icons fonts bearssl libc tls libjpeg +.PHONY: all clean doom fetch wiki wikipedia weather imageviewer fontpreview spreadsheet desktop icons fonts bearssl libc tls libjpeg -all: bearssl libc libjpeg tls $(TARGETS) fetch wiki wikipedia weather imageviewer fontpreview doom desktop icons fonts $(GAME_DATA) $(MANDST) $(WWWDST) $(CA_CERTS) $(HOMEKEEP) +all: bearssl libc libjpeg tls $(TARGETS) fetch wiki wikipedia weather imageviewer fontpreview spreadsheet doom desktop icons fonts $(GAME_DATA) $(MANDST) $(WWWDST) $(CA_CERTS) $(HOMEKEEP) # Build BearSSL static library (cross-compiled for freestanding x86_64). BEARSSL_INCLUDES := -isystem $(shell cd .. && pwd)/kernel/freestnd-c-hdrs/x86_64/include -isystem $(abspath include/libc) @@ -135,6 +135,10 @@ imageviewer: libc libjpeg fontpreview: $(MAKE) -C src/fontpreview +# Build spreadsheet standalone GUI client (depends on libc). +spreadsheet: libc + $(MAKE) -C src/spreadsheet + # Build desktop via its own Makefile (depends on libc and libjpeg for wallpaper). desktop: libc libjpeg $(MAKE) -C src/desktop @@ -195,3 +199,4 @@ clean: $(MAKE) -C src/weather clean $(MAKE) -C src/imageviewer clean $(MAKE) -C src/fontpreview clean + $(MAKE) -C src/spreadsheet clean diff --git a/programs/gui/fonts/C059/C059-Bold.ttf b/programs/gui/fonts/C059/C059-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74117334676b0598c46dc8f29031154bd8f410d1 GIT binary patch literal 215028 zcmeFacYKsp_CJ2_^Gr#dOv#k=DVdo}%}gefNzbH_3MnL%0D*)MLJdudh$5nhD1yCL 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 Ok2zQ3 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 literal 0 HcmV?d00001 diff --git a/programs/gui/fonts/C059/C059-Italic.ttf b/programs/gui/fonts/C059/C059-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2e1e86111c9550467bd2a620050557106095f09b GIT binary patch literal 212536 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 z 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%0Dyboh5CNj1X@2=d;*s9JbzcRLZnO@dB!r0np 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 literal 0 HcmV?d00001 diff --git a/programs/gui/fonts/C059/C059-Roman.ttf b/programs/gui/fonts/C059/C059-Roman.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2d957d8a3655e0b40a03ce516fb07f5d8108d375 GIT binary patch literal 217884 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 q&z4_er> 16) & 0xFF; uint32_t fg = (fill >> 8) & 0xFF; @@ -1081,7 +1081,7 @@ inline void svg_rasterize_blend(const SvgEdgeList& el, uint32_t* pixels, int w, } } - montauk::free(isect); + montauk::mfree(isect); } // --------------------------------------------------------------------------- @@ -1091,7 +1091,7 @@ inline SvgIcon svg_render(const char* svg_data, int svg_len, int target_w, int t SvgIcon icon; icon.width = target_w; icon.height = target_h; - icon.pixels = (uint32_t*)montauk::alloc(target_w * target_h * sizeof(uint32_t)); + icon.pixels = (uint32_t*)montauk::malloc(target_w * target_h * sizeof(uint32_t)); // Clear to transparent svg_memset(icon.pixels, 0, target_w * target_h * sizeof(uint32_t)); @@ -1204,6 +1204,9 @@ inline SvgIcon svg_render(const char* svg_data, int svg_len, int target_w, int t SvgEdgeList el; el.init(SVG_MAX_EDGES); + // Heap-allocated path data buffer (avoids 8 KiB on the stack) + char* d_buf = (char*)montauk::malloc(SVG_MAX_PATH_LEN); + // Scan for blocks (they define reusable items, not rendered directly) const char* p = svg_data; @@ -1249,7 +1252,6 @@ inline SvgIcon svg_render(const char* svg_data, int svg_len, int target_w, int t int alpha = svg_get_element_opacity(elem_start, elem_len); // Extract and rasterize path - char d_buf[SVG_MAX_PATH_LEN]; int d_len = svg_get_attr(elem_start, elem_len, " d", d_buf, SVG_MAX_PATH_LEN); if (d_len > 0) { el.clear(); @@ -1359,7 +1361,8 @@ inline SvgIcon svg_render(const char* svg_data, int svg_len, int target_w, int t ++p; } - montauk::free(el.edges); + montauk::mfree(d_buf); + montauk::mfree(el.edges); return icon; } @@ -1378,7 +1381,7 @@ inline SvgIcon svg_load(const char* vfs_path, int target_w, int target_h, Color return {nullptr, 0, 0}; } - char* buf = (char*)montauk::alloc(size + 1); + char* buf = (char*)montauk::malloc(size + 1); montauk::read(fd, (uint8_t*)buf, 0, size); montauk::close(fd); buf[size] = '\0'; @@ -1389,12 +1392,12 @@ inline SvgIcon svg_load(const char* vfs_path, int target_w, int target_h, Color int hi_h = target_h * SS; SvgIcon hi = svg_render(buf, (int)size, hi_w, hi_h, fill_color); - montauk::free(buf); + montauk::mfree(buf); if (!hi.pixels) return {nullptr, 0, 0}; // Allocate final icon at target resolution - uint32_t* out = (uint32_t*)montauk::alloc(target_w * target_h * 4); + uint32_t* out = (uint32_t*)montauk::malloc(target_w * target_h * 4); for (int i = 0; i < target_w * target_h; i++) out[i] = 0; // Downsample: average each SSxSS block using premultiplied alpha @@ -1432,7 +1435,7 @@ inline SvgIcon svg_load(const char* vfs_path, int target_w, int target_h, Color } } - montauk::free(hi.pixels); + montauk::mfree(hi.pixels); return {out, target_w, target_h}; } @@ -1440,7 +1443,7 @@ inline SvgIcon svg_load(const char* vfs_path, int target_w, int target_h, Color // Free icon pixel data // --------------------------------------------------------------------------- inline void svg_free(SvgIcon& icon) { - if (icon.pixels) montauk::free(icon.pixels); + if (icon.pixels) montauk::mfree(icon.pixels); icon.pixels = nullptr; icon.width = 0; icon.height = 0; diff --git a/programs/include/gui/terminal.hpp b/programs/include/gui/terminal.hpp index 09da368..65c1a54 100644 --- a/programs/include/gui/terminal.hpp +++ b/programs/include/gui/terminal.hpp @@ -130,6 +130,13 @@ static inline void terminal_init_cells(TerminalState* t, int cols, int rows, int int screen_cells = rows * cols; t->cells = (TermCell*)montauk::alloc(total_cells * sizeof(TermCell)); t->alt_cells = (TermCell*)montauk::alloc(screen_cells * sizeof(TermCell)); + if (!t->cells || !t->alt_cells) { + // Allocation failed — leave terminal in a safe but unusable state + if (t->cells) { montauk::free(t->cells); t->cells = nullptr; } + if (t->alt_cells) { montauk::free(t->alt_cells); t->alt_cells = nullptr; } + t->cols = 0; t->rows = 0; + return; + } for (int i = 0; i < total_cells; i++) { t->cells[i] = {' ', colors::TERM_FG, colors::TERM_BG}; } @@ -143,7 +150,8 @@ static inline void terminal_init(TerminalState* t, int cols, int rows) { t->cursor_visible = true; t->child_pid = montauk::spawn_redir("0:/os/shell.elf"); - montauk::childio_settermsz(t->child_pid, cols, rows); + if (t->child_pid > 0) + montauk::childio_settermsz(t->child_pid, cols, rows); } static inline void terminal_put_char(TerminalState* t, char ch) { @@ -467,7 +475,7 @@ static inline void terminal_feed(TerminalState* t, const char* data, int len) { } static inline void terminal_render(TerminalState* t, uint32_t* pixels, int pw, int ph) { - if (!t->dirty) return; + if (!t->dirty || !t->cells) return; t->dirty = false; int cell_w = mono_cell_width(); @@ -593,6 +601,11 @@ static inline void terminal_resize(TerminalState* t, int new_cols, int new_rows) int new_total = new_capacity * new_cols; TermCell* new_cells = (TermCell*)montauk::alloc(new_total * sizeof(TermCell)); TermCell* new_alt = (TermCell*)montauk::alloc(new_rows * new_cols * sizeof(TermCell)); + if (!new_cells || !new_alt) { + if (new_cells) montauk::free(new_cells); + if (new_alt) montauk::free(new_alt); + return; // keep existing buffers + } // Clear new buffers for (int i = 0; i < new_total; i++) diff --git a/programs/include/montauk/heap.h b/programs/include/montauk/heap.h index df4fdde..267c2b6 100644 --- a/programs/include/montauk/heap.h +++ b/programs/include/montauk/heap.h @@ -24,9 +24,10 @@ namespace heap_detail { FreeNode* next; }; - // Per-process heap state (single TU per program, so static is fine) - static FreeNode g_head{0, nullptr}; - static bool g_initialized = false; + // Per-process heap state — must be `inline` (not `static`) so that all + // translation units in a multi-TU program share a single heap. + inline FreeNode g_head{0, nullptr}; + inline bool g_initialized = false; static inline Header* get_header(void* block) { return (Header*)((uint8_t*)block - sizeof(Header)); diff --git a/programs/src/desktop/Makefile b/programs/src/desktop/Makefile index 1fe0a8e..1663a3f 100644 --- a/programs/src/desktop/Makefile +++ b/programs/src/desktop/Makefile @@ -63,7 +63,7 @@ LDFLAGS := \ # ---- C++ source files ---- -SRCS := main.cpp font_data.cpp stb_truetype_impl.cpp app_terminal.cpp app_filemanager.cpp app_sysinfo.cpp app_calculator.cpp app_texteditor.cpp app_klog.cpp app_wiki.cpp app_weather.cpp app_procmgr.cpp app_mandelbrot.cpp app_devexplorer.cpp app_settings.cpp app_doom.cpp +SRCS := main.cpp font_data.cpp stb_truetype_impl.cpp app_terminal.cpp app_filemanager.cpp app_sysinfo.cpp app_calculator.cpp app_texteditor.cpp app_wordprocessor.cpp app_spreadsheet.cpp app_klog.cpp app_wiki.cpp app_weather.cpp app_procmgr.cpp app_mandelbrot.cpp app_devexplorer.cpp app_settings.cpp app_doom.cpp OBJS := $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.o)) # ---- Target ---- diff --git a/programs/src/desktop/app_spreadsheet.cpp b/programs/src/desktop/app_spreadsheet.cpp new file mode 100644 index 0000000..1100b7e --- /dev/null +++ b/programs/src/desktop/app_spreadsheet.cpp @@ -0,0 +1,12 @@ +/* + * app_spreadsheet.cpp + * MontaukOS Desktop - Spreadsheet launcher (spawns standalone spreadsheet.elf) + * Copyright (c) 2026 Daniel Hammer +*/ + +#include "apps_common.hpp" + +void open_spreadsheet(DesktopState* ds) { + (void)ds; + montauk::spawn("0:/os/spreadsheet.elf"); +} diff --git a/programs/src/desktop/app_terminal.cpp b/programs/src/desktop/app_terminal.cpp index f5b2aac..3cc0b0f 100644 --- a/programs/src/desktop/app_terminal.cpp +++ b/programs/src/desktop/app_terminal.cpp @@ -110,6 +110,8 @@ static void term_add_tab(TermTabState* tts, int cols, int rows) { static void terminal_on_draw(Window* win, Framebuffer& fb) { TermTabState* tts = (TermTabState*)win->app_data; if (!tts || tts->tab_count == 0) return; + if (tts->active_tab < 0 || tts->active_tab >= tts->tab_count) + tts->active_tab = 0; Rect cr = win->content_rect(); int term_h = cr.h - TERM_TAB_BAR_H; diff --git a/programs/src/desktop/app_wordprocessor.cpp b/programs/src/desktop/app_wordprocessor.cpp new file mode 100644 index 0000000..c3bf3d5 --- /dev/null +++ b/programs/src/desktop/app_wordprocessor.cpp @@ -0,0 +1,1779 @@ +/* + * app_wordprocessor.cpp + * Rich-text editor + * Copyright (c) 2026 Daniel Hammer +*/ + +#include "apps_common.hpp" + +// ============================================================================ +// Constants +// ============================================================================ + +static constexpr int WP_TOOLBAR_H = 36; +static constexpr int WP_PATHBAR_H = 32; +static constexpr int WP_STATUS_H = 24; +static constexpr int WP_SCROLLBAR_W = 12; +static constexpr int WP_MARGIN = 16; +static constexpr int WP_MAX_RUNS = 1024; +static constexpr int WP_MAX_TEXT = 262144; // 256KB total text +static constexpr int WP_DEFAULT_SIZE = 18; + +// Font IDs +static constexpr int FONT_ROBOTO = 0; +static constexpr int FONT_NOTOSERIF = 1; +static constexpr int FONT_C059 = 2; +static constexpr int FONT_COUNT = 3; + +// Style flags +static constexpr uint8_t STYLE_BOLD = 0x01; +static constexpr uint8_t STYLE_ITALIC = 0x02; + +// ============================================================================ +// Font table — loaded on demand per word processor instance +// ============================================================================ + +struct WPFontTable { + // [font_id][variant]: variant = 0=regular, 1=bold, 2=italic, 3=bolditalic + TrueTypeFont* fonts[FONT_COUNT][4]; + bool loaded; +}; + +static WPFontTable wp_fonts = { {{nullptr}}, false }; + +static void wp_load_fonts() { + if (wp_fonts.loaded) return; + + auto load = [](const char* path) -> TrueTypeFont* { + TrueTypeFont* f = (TrueTypeFont*)montauk::malloc(sizeof(TrueTypeFont)); + montauk::memset(f, 0, sizeof(TrueTypeFont)); + if (!f->init(path)) { + montauk::mfree(f); + return nullptr; + } + return f; + }; + + // Roboto variants + wp_fonts.fonts[FONT_ROBOTO][0] = fonts::system_font; // Roboto-Medium (regular) + wp_fonts.fonts[FONT_ROBOTO][1] = fonts::system_bold; // Roboto-Bold + wp_fonts.fonts[FONT_ROBOTO][2] = load("0:/fonts/Roboto-Italic.ttf"); + wp_fonts.fonts[FONT_ROBOTO][3] = load("0:/fonts/Roboto-BoldItalic.ttf"); + + // NotoSerif variants + wp_fonts.fonts[FONT_NOTOSERIF][0] = load("0:/fonts/NotoSerif-Regular.ttf"); + wp_fonts.fonts[FONT_NOTOSERIF][1] = load("0:/fonts/NotoSerif-SemiBold.ttf"); + wp_fonts.fonts[FONT_NOTOSERIF][2] = load("0:/fonts/NotoSerif-Italic.ttf"); + wp_fonts.fonts[FONT_NOTOSERIF][3] = load("0:/fonts/NotoSerif-BoldItalic.ttf"); + + // C059 variants (no BoldItalic — falls back to Bold) + wp_fonts.fonts[FONT_C059][0] = load("0:/fonts/C059-Roman.ttf"); + wp_fonts.fonts[FONT_C059][1] = load("0:/fonts/C059-Bold.ttf"); + wp_fonts.fonts[FONT_C059][2] = load("0:/fonts/C059-Italic.ttf"); + wp_fonts.fonts[FONT_C059][3] = load("0:/fonts/C059-Bold.ttf"); // fallback: bold for bolditalic + + wp_fonts.loaded = true; +} + +static TrueTypeFont* wp_get_font(int font_id, uint8_t flags) { + if (font_id < 0 || font_id >= FONT_COUNT) font_id = 0; + int variant = 0; + if ((flags & STYLE_BOLD) && (flags & STYLE_ITALIC)) variant = 3; + else if (flags & STYLE_BOLD) variant = 1; + else if (flags & STYLE_ITALIC) variant = 2; + + TrueTypeFont* f = wp_fonts.fonts[font_id][variant]; + if (f && f->valid) return f; + // Fallback: try regular variant + f = wp_fonts.fonts[font_id][0]; + if (f && f->valid) return f; + // Last resort: system font + return fonts::system_font; +} + +// ============================================================================ +// Document model +// ============================================================================ + +struct StyledRun { + char* text; + int len; + int cap; + uint8_t font_id; + uint8_t size; + uint8_t flags; // STYLE_BOLD | STYLE_ITALIC +}; + +// Word-wrapped line info for rendering +struct WrapLine { + int run_idx; // which run this line starts in + int run_offset; // byte offset within that run + int char_count; // total chars in this line (across runs) + int y; // pixel y position in content space + int height; // line height in pixels + int baseline; // max ascent — shared baseline offset from y for all runs +}; + +static constexpr int WP_MAX_WRAP_LINES = 4096; + +// ============================================================================ +// Word Processor state +// ============================================================================ + +struct WordProcessorState { + // Document + StyledRun runs[WP_MAX_RUNS]; + int run_count; + int total_text_len; + + // Cursor + int cursor_run; // which run the cursor is in + int cursor_offset; // byte offset within that run + + // Selection (absolute positions, -1 = no selection) + int sel_anchor; // where selection started + int sel_end; // where selection extends to (cursor end) + bool has_selection; + bool mouse_selecting; // currently dragging + + // Current formatting for new text + uint8_t cur_font_id; + uint8_t cur_size; + uint8_t cur_flags; + + // Scrollbar + Scrollbar scrollbar; + int content_height; + + // Word-wrap cache + WrapLine* wrap_lines; + int wrap_line_count; + bool wrap_dirty; + int last_wrap_width; // detect resize + + // UI state + bool modified; + char filepath[256]; + char filename[64]; + DesktopState* desktop; + + bool show_pathbar; + bool pathbar_save_mode; // true = save, false = open + char pathbar_text[256]; + int pathbar_cursor; + int pathbar_len; + + // Dropdown state + bool font_dropdown_open; + bool size_dropdown_open; +}; + +// ============================================================================ +// Run management +// ============================================================================ + +static void wp_init_run(StyledRun* r, uint8_t font_id, uint8_t size, uint8_t flags) { + r->cap = 64; + r->text = (char*)montauk::malloc(r->cap); + r->text[0] = '\0'; + r->len = 0; + r->font_id = font_id; + r->size = size; + r->flags = flags; +} + +static void wp_free_run(StyledRun* r) { + if (r->text) montauk::mfree(r->text); + r->text = nullptr; + r->len = 0; + r->cap = 0; +} + +static void wp_ensure_run_cap(StyledRun* r, int needed) { + if (r->len + needed <= r->cap) return; + int new_cap = r->cap * 2; + if (new_cap < r->len + needed) new_cap = r->len + needed; + r->text = (char*)montauk::realloc(r->text, new_cap); + r->cap = new_cap; +} + +static bool wp_same_style(const StyledRun* a, uint8_t font_id, uint8_t size, uint8_t flags) { + return a->font_id == font_id && a->size == size && a->flags == flags; +} + +// Get absolute character position from run+offset +static int wp_abs_pos(WordProcessorState* wp, int run, int offset) { + int pos = 0; + for (int i = 0; i < run && i < wp->run_count; i++) + pos += wp->runs[i].len; + pos += offset; + return pos; +} + +// Convert absolute position to run+offset +static void wp_pos_to_run(WordProcessorState* wp, int abs_pos, int* out_run, int* out_offset) { + if (abs_pos <= 0) { *out_run = 0; *out_offset = 0; return; } + int pos = 0; + for (int i = 0; i < wp->run_count; i++) { + if (pos + wp->runs[i].len >= abs_pos || i == wp->run_count - 1) { + *out_run = i; + *out_offset = abs_pos - pos; + if (*out_offset > wp->runs[i].len) *out_offset = wp->runs[i].len; + return; + } + pos += wp->runs[i].len; + } + *out_run = 0; + *out_offset = 0; +} + +// Get char at absolute position +static char wp_char_at(WordProcessorState* wp, int abs_pos) { + int r, o; + wp_pos_to_run(wp, abs_pos, &r, &o); + if (r < wp->run_count && o < wp->runs[r].len) + return wp->runs[r].text[o]; + return '\0'; +} + +// Get font info for char at absolute position +static void wp_font_at(WordProcessorState* wp, int abs_pos, + TrueTypeFont** out_font, GlyphCache** out_gc) { + int r, o; + wp_pos_to_run(wp, abs_pos, &r, &o); + if (r >= wp->run_count) r = wp->run_count - 1; + StyledRun* run = &wp->runs[r]; + *out_font = wp_get_font(run->font_id, run->flags); + *out_gc = (*out_font && (*out_font)->valid) ? (*out_font)->get_cache(run->size) : nullptr; +} + +// ============================================================================ +// Text insertion / deletion +// ============================================================================ + +static void wp_insert_char(WordProcessorState* wp, char c) { + if (wp->total_text_len >= WP_MAX_TEXT - 1) return; + + StyledRun* cur = &wp->runs[wp->cursor_run]; + + // If cursor is at same style as current formatting, insert into current run + if (wp_same_style(cur, wp->cur_font_id, wp->cur_size, wp->cur_flags)) { + wp_ensure_run_cap(cur, 1); + // Shift chars after cursor offset + for (int i = cur->len; i > wp->cursor_offset; i--) + cur->text[i] = cur->text[i - 1]; + cur->text[wp->cursor_offset] = c; + cur->len++; + wp->cursor_offset++; + wp->total_text_len++; + wp->modified = true; + wp->wrap_dirty = true; + return; + } + + // Different style: need to split the run + if (wp->cursor_offset == 0) { + // Insert a new run before current + if (wp->run_count >= WP_MAX_RUNS) return; + for (int i = wp->run_count; i > wp->cursor_run; i--) + wp->runs[i] = wp->runs[i - 1]; + wp->run_count++; + StyledRun* nr = &wp->runs[wp->cursor_run]; + wp_init_run(nr, wp->cur_font_id, wp->cur_size, wp->cur_flags); + wp_ensure_run_cap(nr, 1); + nr->text[0] = c; + nr->len = 1; + wp->cursor_offset = 1; + wp->total_text_len++; + } else if (wp->cursor_offset == cur->len) { + // Append a new run after current + if (wp->run_count >= WP_MAX_RUNS) return; + int insert_idx = wp->cursor_run + 1; + for (int i = wp->run_count; i > insert_idx; i--) + wp->runs[i] = wp->runs[i - 1]; + wp->run_count++; + StyledRun* nr = &wp->runs[insert_idx]; + wp_init_run(nr, wp->cur_font_id, wp->cur_size, wp->cur_flags); + wp_ensure_run_cap(nr, 1); + nr->text[0] = c; + nr->len = 1; + wp->cursor_run = insert_idx; + wp->cursor_offset = 1; + wp->total_text_len++; + } else { + // Split current run into three: [before][new char][after] + if (wp->run_count + 2 > WP_MAX_RUNS) return; + int split_at = wp->cursor_offset; + int after_len = cur->len - split_at; + + // Create "after" run + StyledRun after; + wp_init_run(&after, cur->font_id, cur->size, cur->flags); + wp_ensure_run_cap(&after, after_len); + montauk::memcpy(after.text, cur->text + split_at, after_len); + after.len = after_len; + + // Truncate current run to "before" + cur->len = split_at; + + // Insert new style run and after run + int new_idx = wp->cursor_run + 1; + // Shift runs from new_idx onward by 2 to make room + for (int i = wp->run_count - 1; i >= new_idx; i--) + wp->runs[i + 2] = wp->runs[i]; + + StyledRun* nr = &wp->runs[new_idx]; + wp_init_run(nr, wp->cur_font_id, wp->cur_size, wp->cur_flags); + wp_ensure_run_cap(nr, 1); + nr->text[0] = c; + nr->len = 1; + + wp->runs[new_idx + 1] = after; + wp->run_count += 2; + wp->cursor_run = new_idx; + wp->cursor_offset = 1; + wp->total_text_len++; + } + + wp->modified = true; + wp->wrap_dirty = true; +} + +static void wp_merge_adjacent(WordProcessorState* wp) { + // Merge adjacent runs with the same style + int i = 0; + while (i < wp->run_count - 1) { + StyledRun* a = &wp->runs[i]; + StyledRun* b = &wp->runs[i + 1]; + if (a->font_id == b->font_id && a->size == b->size && a->flags == b->flags) { + int old_a_len = a->len; + // Merge b into a + wp_ensure_run_cap(a, b->len); + montauk::memcpy(a->text + a->len, b->text, b->len); + a->len += b->len; + + // Update cursor if it was in run b + if (wp->cursor_run == i + 1) { + wp->cursor_run = i; + wp->cursor_offset = old_a_len + wp->cursor_offset; + } else if (wp->cursor_run > i + 1) { + wp->cursor_run--; + } + + wp_free_run(b); + for (int j = i + 1; j < wp->run_count - 1; j++) + wp->runs[j] = wp->runs[j + 1]; + wp->run_count--; + } else { + i++; + } + } + + // Remove empty runs (except if it's the only one) + i = 0; + while (i < wp->run_count && wp->run_count > 1) { + if (wp->runs[i].len == 0) { + if (wp->cursor_run == i) { + if (i < wp->run_count - 1) { + wp->cursor_run = i; + wp->cursor_offset = 0; + } else { + wp->cursor_run = i - 1; + wp->cursor_offset = wp->runs[i - 1].len; + } + } else if (wp->cursor_run > i) { + wp->cursor_run--; + } + wp_free_run(&wp->runs[i]); + for (int j = i; j < wp->run_count - 1; j++) + wp->runs[j] = wp->runs[j + 1]; + wp->run_count--; + } else { + i++; + } + } +} + +static void wp_backspace(WordProcessorState* wp) { + if (wp->cursor_run == 0 && wp->cursor_offset == 0) return; + + if (wp->cursor_offset > 0) { + StyledRun* r = &wp->runs[wp->cursor_run]; + for (int i = wp->cursor_offset - 1; i < r->len - 1; i++) + r->text[i] = r->text[i + 1]; + r->len--; + wp->cursor_offset--; + } else { + wp->cursor_run--; + StyledRun* r = &wp->runs[wp->cursor_run]; + if (r->len > 0) { + r->len--; + } + wp->cursor_offset = r->len; + } + + wp->total_text_len--; + wp->modified = true; + wp->wrap_dirty = true; + wp_merge_adjacent(wp); +} + +static void wp_delete_char(WordProcessorState* wp) { + int abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + if (abs >= wp->total_text_len) return; + + StyledRun* r = &wp->runs[wp->cursor_run]; + if (wp->cursor_offset < r->len) { + for (int i = wp->cursor_offset; i < r->len - 1; i++) + r->text[i] = r->text[i + 1]; + r->len--; + } else if (wp->cursor_run + 1 < wp->run_count) { + StyledRun* next = &wp->runs[wp->cursor_run + 1]; + if (next->len > 0) { + for (int i = 0; i < next->len - 1; i++) + next->text[i] = next->text[i + 1]; + next->len--; + } + } + + wp->total_text_len--; + wp->modified = true; + wp->wrap_dirty = true; + wp_merge_adjacent(wp); +} + +// ============================================================================ +// Cursor movement +// ============================================================================ + +static void wp_cursor_left(WordProcessorState* wp) { + if (wp->cursor_offset > 0) { + wp->cursor_offset--; + } else if (wp->cursor_run > 0) { + wp->cursor_run--; + wp->cursor_offset = wp->runs[wp->cursor_run].len; + } +} + +static void wp_cursor_right(WordProcessorState* wp) { + if (wp->cursor_offset < wp->runs[wp->cursor_run].len) { + wp->cursor_offset++; + } else if (wp->cursor_run + 1 < wp->run_count) { + wp->cursor_run++; + wp->cursor_offset = 0; + } +} + +// ============================================================================ +// Selection helpers +// ============================================================================ + +static void wp_clear_selection(WordProcessorState* wp) { + wp->has_selection = false; + wp->sel_anchor = 0; + wp->sel_end = 0; +} + +static void wp_sel_range(WordProcessorState* wp, int* out_start, int* out_end) { + if (wp->sel_anchor < wp->sel_end) { + *out_start = wp->sel_anchor; + *out_end = wp->sel_end; + } else { + *out_start = wp->sel_end; + *out_end = wp->sel_anchor; + } +} + +// Start or extend selection from current cursor position +static void wp_start_selection(WordProcessorState* wp) { + if (!wp->has_selection) { + wp->sel_anchor = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + wp->sel_end = wp->sel_anchor; + wp->has_selection = true; + } +} + +static void wp_update_selection_to_cursor(WordProcessorState* wp) { + wp->sel_end = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + // Collapse if anchor == end + if (wp->sel_anchor == wp->sel_end) wp->has_selection = false; +} + +// Split run at absolute position, returning the run index where `abs_pos` starts. +// If abs_pos falls at a run boundary, no split needed — just returns the index. +static int wp_split_at(WordProcessorState* wp, int abs_pos) { + int r, o; + wp_pos_to_run(wp, abs_pos, &r, &o); + if (o == 0) return r; + if (o >= wp->runs[r].len) return r + 1; + + // Need to split run r at offset o + if (wp->run_count >= WP_MAX_RUNS) return r; + + StyledRun* src = &wp->runs[r]; + int after_len = src->len - o; + + // Create the "after" portion + StyledRun after; + wp_init_run(&after, src->font_id, src->size, src->flags); + wp_ensure_run_cap(&after, after_len); + montauk::memcpy(after.text, src->text + o, after_len); + after.len = after_len; + + // Truncate original to "before" + src->len = o; + + // Shift runs to make room at r+1 + for (int i = wp->run_count - 1; i > r; i--) + wp->runs[i + 1] = wp->runs[i]; + wp->runs[r + 1] = after; + wp->run_count++; + + // Fix cursor if it was in the split run + if (wp->cursor_run == r && wp->cursor_offset > o) { + wp->cursor_run = r + 1; + wp->cursor_offset -= o; + } else if (wp->cursor_run > r) { + wp->cursor_run++; + } + + return r + 1; +} + +// Apply a style change to the selected range. +// `mode`: 0 = set font_id, 1 = set size, 2 = toggle bold, 3 = toggle italic +static void wp_apply_style_to_selection(WordProcessorState* wp, int mode, int value) { + if (!wp->has_selection) return; + + int sel_s, sel_e; + wp_sel_range(wp, &sel_s, &sel_e); + if (sel_s >= sel_e) return; + + // Split at selection boundaries to isolate affected runs + int end_ri = wp_split_at(wp, sel_e); + int start_ri = wp_split_at(wp, sel_s); + // Recompute end_ri after the start split may have shifted things + { + int pos = 0; + end_ri = wp->run_count; + for (int i = 0; i < wp->run_count; i++) { + if (pos >= sel_e) { end_ri = i; break; } + pos += wp->runs[i].len; + } + } + + // Apply style to runs [start_ri, end_ri) + for (int i = start_ri; i < end_ri && i < wp->run_count; i++) { + StyledRun* r = &wp->runs[i]; + switch (mode) { + case 0: r->font_id = (uint8_t)value; break; + case 1: r->size = (uint8_t)value; break; + case 2: r->flags ^= STYLE_BOLD; break; + case 3: r->flags ^= STYLE_ITALIC; break; + } + } + + wp->wrap_dirty = true; + wp->modified = true; + wp_merge_adjacent(wp); +} + +// Delete the selected text and place cursor at selection start +static void wp_delete_selection(WordProcessorState* wp) { + if (!wp->has_selection) return; + + int sel_s, sel_e; + wp_sel_range(wp, &sel_s, &sel_e); + int count = sel_e - sel_s; + if (count <= 0) { wp_clear_selection(wp); return; } + + // Place cursor at selection start + wp_pos_to_run(wp, sel_s, &wp->cursor_run, &wp->cursor_offset); + + // Delete chars one at a time from the cursor position + for (int i = 0; i < count; i++) + wp_delete_char(wp); + + wp_clear_selection(wp); +} + +// ============================================================================ +// Word-wrap layout (absolute-position based) +// ============================================================================ + +// Measure the advance width of a single character at absolute position +static int wp_char_width(WordProcessorState* wp, int abs_pos) { + TrueTypeFont* font; + GlyphCache* gc; + wp_font_at(wp, abs_pos, &font, &gc); + if (!font || !gc) return 8; + char ch = wp_char_at(wp, abs_pos); + if (ch == '\n') return 0; + CachedGlyph* g = font->get_glyph(gc, (unsigned char)ch); + return g ? g->advance : 8; +} + +static void wp_recompute_wrap(WordProcessorState* wp, int content_w) { + int wrap_width = content_w - WP_MARGIN * 2 - WP_SCROLLBAR_W; + if (wrap_width < 50) wrap_width = 50; + + // Invalidate if width changed + if (wrap_width != wp->last_wrap_width) { + wp->wrap_dirty = true; + wp->last_wrap_width = wrap_width; + } + + if (!wp->wrap_dirty && wp->wrap_lines) return; + + if (!wp->wrap_lines) { + wp->wrap_lines = (WrapLine*)montauk::malloc(WP_MAX_WRAP_LINES * sizeof(WrapLine)); + } + + wp->wrap_line_count = 0; + int total = wp->total_text_len; + int y = WP_MARGIN; + + int pos = 0; // absolute char position + + while (pos < total && wp->wrap_line_count < WP_MAX_WRAP_LINES) { + // Start a new line at position `pos` + WrapLine* line = &wp->wrap_lines[wp->wrap_line_count]; + wp_pos_to_run(wp, pos, &line->run_idx, &line->run_offset); + line->char_count = 0; + line->y = y; + + // First pass: find where this line ends (newline, word-wrap, or end of text) + int x = 0; + int last_space = -1; // absolute position of last space on this line + int line_start = pos; + int max_ascent = 0; + int max_height = 0; + + int scan = pos; + while (scan < total) { + char ch = wp_char_at(wp, scan); + + // Get font metrics for this char + TrueTypeFont* font; + GlyphCache* gc; + wp_font_at(wp, scan, &font, &gc); + if (gc) { + if (gc->ascent > max_ascent) max_ascent = gc->ascent; + if (gc->line_height > max_height) max_height = gc->line_height; + } + + if (ch == '\n') { + // Include the newline in this line's char_count + scan++; + break; + } + + int cw = 0; + if (font && gc) { + CachedGlyph* g = font->get_glyph(gc, (unsigned char)ch); + cw = g ? g->advance : 8; + } else { + cw = 8; + } + + if (x + cw > wrap_width && scan > line_start) { + // Need to wrap. Try breaking at last space. + if (last_space >= line_start) { + scan = last_space + 1; // wrap after the space + } + // else: no space found, break right here (hard break) + break; + } + + if (ch == ' ') last_space = scan; + x += cw; + scan++; + } + + line->char_count = scan - line_start; + + // If we didn't encounter any chars (empty doc), set defaults + if (max_height == 0) { + TrueTypeFont* df = wp_get_font(wp->cur_font_id, 0); + if (df && df->valid) { + GlyphCache* dgc = df->get_cache(wp->cur_size); + max_height = dgc->line_height; + max_ascent = dgc->ascent; + } else { + max_height = WP_DEFAULT_SIZE; + max_ascent = WP_DEFAULT_SIZE; + } + } + + // Recompute max_ascent/max_height precisely by walking the line's runs + // (the scan above may have overshot for word-wrap — recalculate for actual chars) + max_ascent = 0; + max_height = 0; + { + int ri, ro; + wp_pos_to_run(wp, line_start, &ri, &ro); + int left = line->char_count; + while (left > 0 && ri < wp->run_count) { + StyledRun* r = &wp->runs[ri]; + TrueTypeFont* font = wp_get_font(r->font_id, r->flags); + if (font && font->valid) { + GlyphCache* gc = font->get_cache(r->size); + if (gc->ascent > max_ascent) max_ascent = gc->ascent; + if (gc->line_height > max_height) max_height = gc->line_height; + } + int avail = r->len - ro; + int consume = avail < left ? avail : left; + left -= consume; + ro += consume; + if (ro >= r->len) { ri++; ro = 0; } + } + if (max_height == 0) { + TrueTypeFont* df = wp_get_font(wp->cur_font_id, 0); + if (df && df->valid) { + GlyphCache* dgc = df->get_cache(wp->cur_size); + max_height = dgc->line_height; + max_ascent = dgc->ascent; + } else { + max_height = WP_DEFAULT_SIZE; + max_ascent = WP_DEFAULT_SIZE; + } + } + } + + line->height = max_height; + line->baseline = max_ascent; + wp->wrap_line_count++; + + y += max_height; + pos = line_start + line->char_count; + + // If we consumed nothing (shouldn't happen), advance to avoid infinite loop + if (line->char_count == 0 && pos < total) { + pos++; + } + } + + // Add trailing line if document ends with newline (cursor needs somewhere to go) + if (total > 0 && wp_char_at(wp, total - 1) == '\n' && wp->wrap_line_count < WP_MAX_WRAP_LINES) { + WrapLine* line = &wp->wrap_lines[wp->wrap_line_count]; + wp_pos_to_run(wp, total, &line->run_idx, &line->run_offset); + line->char_count = 0; + line->y = y; + TrueTypeFont* df = wp_get_font(wp->cur_font_id, wp->cur_flags); + if (df && df->valid) { + GlyphCache* dgc = df->get_cache(wp->cur_size); + line->height = dgc->line_height; + line->baseline = dgc->ascent; + } else { + line->height = WP_DEFAULT_SIZE; + line->baseline = WP_DEFAULT_SIZE; + } + wp->wrap_line_count++; + y += line->height; + } + + // Ensure at least one line exists + if (wp->wrap_line_count == 0) { + WrapLine* line = &wp->wrap_lines[0]; + line->run_idx = 0; + line->run_offset = 0; + line->char_count = 0; + line->y = WP_MARGIN; + TrueTypeFont* df = wp_get_font(wp->cur_font_id, 0); + if (df && df->valid) { + GlyphCache* dgc = df->get_cache(wp->cur_size); + line->height = dgc->line_height; + line->baseline = dgc->ascent; + } else { + line->height = WP_DEFAULT_SIZE; + line->baseline = WP_DEFAULT_SIZE; + } + wp->wrap_line_count = 1; + y = WP_MARGIN + line->height; + } + + wp->content_height = y + WP_MARGIN; + wp->wrap_dirty = false; +} + +// ============================================================================ +// Cursor position helpers (using wrap lines) +// ============================================================================ + +static int wp_find_wrap_line(WordProcessorState* wp, int abs_pos) { + int pos = 0; + for (int i = 0; i < wp->wrap_line_count; i++) { + int next_pos = pos + wp->wrap_lines[i].char_count; + if (abs_pos < next_pos || i == wp->wrap_line_count - 1) + return i; + pos = next_pos; + } + return 0; +} + +static int wp_wrap_line_start(WordProcessorState* wp, int line_idx) { + int pos = 0; + for (int i = 0; i < line_idx && i < wp->wrap_line_count; i++) + pos += wp->wrap_lines[i].char_count; + return pos; +} + +static void wp_cursor_up(WordProcessorState* wp) { + int abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + int line = wp_find_wrap_line(wp, abs); + if (line <= 0) return; + + int col = abs - wp_wrap_line_start(wp, line); + int prev_start = wp_wrap_line_start(wp, line - 1); + int prev_len = wp->wrap_lines[line - 1].char_count; + int new_col = col < prev_len ? col : prev_len; + // Don't land on the newline at end of line + if (new_col > 0 && new_col == prev_len) { + char ch = wp_char_at(wp, prev_start + prev_len - 1); + if (ch == '\n') new_col = prev_len - 1; + } + wp_pos_to_run(wp, prev_start + new_col, &wp->cursor_run, &wp->cursor_offset); +} + +static void wp_cursor_down(WordProcessorState* wp) { + int abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + int line = wp_find_wrap_line(wp, abs); + if (line >= wp->wrap_line_count - 1) return; + + int col = abs - wp_wrap_line_start(wp, line); + int next_start = wp_wrap_line_start(wp, line + 1); + int next_len = wp->wrap_lines[line + 1].char_count; + int new_col = col < next_len ? col : next_len; + if (new_col > 0 && new_col == next_len && line + 1 < wp->wrap_line_count - 1) { + char ch = wp_char_at(wp, next_start + next_len - 1); + if (ch == '\n') new_col = next_len - 1; + } + wp_pos_to_run(wp, next_start + new_col, &wp->cursor_run, &wp->cursor_offset); +} + +static void wp_ensure_cursor_visible(WordProcessorState* wp, int view_h) { + int abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + int line = wp_find_wrap_line(wp, abs); + if (line < 0 || line >= wp->wrap_line_count) return; + + int cy = wp->wrap_lines[line].y; + int ch = wp->wrap_lines[line].height; + + if (cy < wp->scrollbar.scroll_offset) { + wp->scrollbar.scroll_offset = cy - WP_MARGIN; + if (wp->scrollbar.scroll_offset < 0) wp->scrollbar.scroll_offset = 0; + } + if (cy + ch > wp->scrollbar.scroll_offset + view_h) { + wp->scrollbar.scroll_offset = cy + ch - view_h + WP_MARGIN; + } + + // Clamp scroll + int ms = wp->scrollbar.max_scroll(); + if (wp->scrollbar.scroll_offset > ms) wp->scrollbar.scroll_offset = ms; + if (wp->scrollbar.scroll_offset < 0) wp->scrollbar.scroll_offset = 0; +} + +// ============================================================================ +// File I/O - MWP binary format +// ============================================================================ + +static void wp_set_filepath(WordProcessorState* wp, const char* path) { + montauk::strncpy(wp->filepath, path, 255); + int last_slash = -1; + for (int i = 0; path[i]; i++) + if (path[i] == '/') last_slash = i; + if (last_slash >= 0) + montauk::strncpy(wp->filename, path + last_slash + 1, 63); + else + montauk::strncpy(wp->filename, path, 63); +} + +static void wp_open_save_pathbar(WordProcessorState* wp) { + wp->show_pathbar = true; + wp->pathbar_save_mode = true; + montauk::strncpy(wp->pathbar_text, wp->filepath, 255); + wp->pathbar_len = montauk::slen(wp->pathbar_text); + wp->pathbar_cursor = wp->pathbar_len; +} + +static void wp_save_file(WordProcessorState* wp) { + if (wp->filepath[0] == '\0') { + wp_open_save_pathbar(wp); + return; + } + + int size = 4 + 2 + 1 + 1 + 2; + for (int i = 0; i < wp->run_count; i++) + size += 2 + 1 + 1 + 1 + 1 + wp->runs[i].len; + + uint8_t* buf = (uint8_t*)montauk::malloc(size); + int off = 0; + + buf[off++] = 'M'; buf[off++] = 'W'; buf[off++] = 'P'; buf[off++] = '1'; + buf[off++] = 1; buf[off++] = 0; + buf[off++] = wp->cur_font_id; + buf[off++] = wp->cur_size; + buf[off++] = (uint8_t)(wp->run_count & 0xFF); + buf[off++] = (uint8_t)((wp->run_count >> 8) & 0xFF); + + for (int i = 0; i < wp->run_count; i++) { + StyledRun* r = &wp->runs[i]; + buf[off++] = (uint8_t)(r->len & 0xFF); + buf[off++] = (uint8_t)((r->len >> 8) & 0xFF); + buf[off++] = r->font_id; + buf[off++] = r->size; + buf[off++] = r->flags; + buf[off++] = 0; + montauk::memcpy(buf + off, r->text, r->len); + off += r->len; + } + + int fd = montauk::fcreate(wp->filepath); + if (fd >= 0) { + montauk::fwrite(fd, buf, 0, off); + montauk::close(fd); + wp->modified = false; + } + + montauk::mfree(buf); +} + +static void wp_load_file(WordProcessorState* wp, const char* path) { + int fd = montauk::open(path); + if (fd < 0) return; + + uint64_t fsize = montauk::getsize(fd); + if (fsize < 10 || fsize > WP_MAX_TEXT * 2) { + montauk::close(fd); + return; + } + + uint8_t* buf = (uint8_t*)montauk::malloc((int)fsize); + montauk::read(fd, buf, 0, fsize); + montauk::close(fd); + + if (buf[0] != 'M' || buf[1] != 'W' || buf[2] != 'P' || buf[3] != '1') { + montauk::mfree(buf); + return; + } + + for (int i = 0; i < wp->run_count; i++) + wp_free_run(&wp->runs[i]); + + int off = 4; + off += 2; + wp->cur_font_id = buf[off++]; + wp->cur_size = buf[off++]; + + int run_count = buf[off] | (buf[off + 1] << 8); + off += 2; + + wp->run_count = 0; + wp->total_text_len = 0; + + for (int i = 0; i < run_count && off < (int)fsize && i < WP_MAX_RUNS; i++) { + if (off + 6 > (int)fsize) break; + int text_len = buf[off] | (buf[off + 1] << 8); + off += 2; + uint8_t font_id = buf[off++]; + uint8_t size = buf[off++]; + uint8_t flags = buf[off++]; + off++; + + if (off + text_len > (int)fsize) break; + + StyledRun* r = &wp->runs[wp->run_count]; + wp_init_run(r, font_id, size, flags); + wp_ensure_run_cap(r, text_len); + montauk::memcpy(r->text, buf + off, text_len); + r->len = text_len; + off += text_len; + + wp->total_text_len += text_len; + wp->run_count++; + } + + if (wp->run_count == 0) { + wp_init_run(&wp->runs[0], wp->cur_font_id, wp->cur_size, 0); + wp->run_count = 1; + } + + wp->cursor_run = 0; + wp->cursor_offset = 0; + wp->scrollbar.scroll_offset = 0; + wp->modified = false; + wp->wrap_dirty = true; + + montauk::strncpy(wp->filepath, path, 255); + + int last_slash = -1; + for (int i = 0; path[i]; i++) + if (path[i] == '/') last_slash = i; + if (last_slash >= 0) + montauk::strncpy(wp->filename, path + last_slash + 1, 63); + else + montauk::strncpy(wp->filename, path, 63); + + montauk::mfree(buf); +} + +// ============================================================================ +// Drawing +// ============================================================================ + +static const char* font_names[] = { "Roboto", "NotoSerif", "C059" }; +static const int size_options[] = { 12, 14, 16, 18, 20, 24, 28, 36 }; +static constexpr int SIZE_OPTION_COUNT = 8; + +static void wp_on_draw(Window* win, Framebuffer& fb) { + WordProcessorState* wp = (WordProcessorState*)win->app_data; + if (!wp) return; + + Canvas c(win); + c.fill(colors::WINDOW_BG); + + int sfh = system_font_height(); + Color toolbar_bg = Color::from_rgb(0xF5, 0xF5, 0xF5); + Color btn_bg = Color::from_rgb(0xE8, 0xE8, 0xE8); + Color btn_active = Color::from_rgb(0xC0, 0xD0, 0xE8); + + // ---- Toolbar (36px) ---- + c.fill_rect(0, 0, c.w, WP_TOOLBAR_H, toolbar_bg); + + // Open button + c.fill_rounded_rect(4, 6, 24, 24, 3, btn_bg); + if (wp->desktop && wp->desktop->icon_folder.pixels) + c.icon(8, 10, wp->desktop->icon_folder); + + // Save button + c.fill_rounded_rect(32, 6, 24, 24, 3, btn_bg); + if (wp->desktop && wp->desktop->icon_save.pixels) + c.icon(36, 10, wp->desktop->icon_save); + + c.vline(60, 4, 28, colors::BORDER); + + // Bold button + Color bold_bg = (wp->cur_flags & STYLE_BOLD) ? btn_active : btn_bg; + c.fill_rounded_rect(66, 6, 24, 24, 3, bold_bg); + if (fonts::system_bold && fonts::system_bold->valid) { + fonts::system_bold->draw_to_buffer(c.pixels, c.w, c.h, 73, 8, "B", colors::TEXT_COLOR, fonts::UI_SIZE); + } else { + c.text(73, 10, "B", colors::TEXT_COLOR); + } + + // Italic button + Color italic_bg = (wp->cur_flags & STYLE_ITALIC) ? btn_active : btn_bg; + c.fill_rounded_rect(94, 6, 24, 24, 3, italic_bg); + { + TrueTypeFont* italic_font = wp_get_font(FONT_ROBOTO, STYLE_ITALIC); + if (italic_font && italic_font->valid) { + italic_font->draw_to_buffer(c.pixels, c.w, c.h, 103, 8, "I", colors::TEXT_COLOR, fonts::UI_SIZE); + } else { + c.text(103, 10, "I", colors::TEXT_COLOR); + } + } + + c.vline(122, 4, 28, colors::BORDER); + + // Font dropdown + c.fill_rounded_rect(128, 6, 90, 24, 3, btn_bg); + { + const char* fn = font_names[wp->cur_font_id < FONT_COUNT ? wp->cur_font_id : 0]; + c.text(134, (WP_TOOLBAR_H - sfh) / 2, fn, colors::TEXT_COLOR); + } + + // Size dropdown + c.fill_rounded_rect(224, 6, 44, 24, 3, btn_bg); + { + char sz[8]; + snprintf(sz, 8, "%d", (int)wp->cur_size); + c.text(232, (WP_TOOLBAR_H - sfh) / 2, sz, colors::TEXT_COLOR); + } + + c.vline(272, 4, 28, colors::BORDER); + + // Section sign button + c.fill_rounded_rect(278, 6, 24, 24, 3, btn_bg); + { + char section[2] = { (char)0xA7, '\0' }; + TrueTypeFont* sf = wp_get_font(FONT_ROBOTO, 0); + if (sf && sf->valid) + sf->draw_to_buffer(c.pixels, c.w, c.h, 284, 8, section, colors::TEXT_COLOR, fonts::UI_SIZE); + else + c.text(284, 10, "S", colors::TEXT_COLOR); + } + + // Filename + modified + { + char label[128]; + if (wp->filename[0]) + snprintf(label, 128, "%s%s", wp->filename, wp->modified ? " *" : ""); + else + snprintf(label, 128, "Untitled%s", wp->modified ? " *" : ""); + c.text(312, (WP_TOOLBAR_H - sfh) / 2, label, Color::from_rgb(0x88, 0x88, 0x88)); + } + + c.hline(0, WP_TOOLBAR_H - 1, c.w, colors::BORDER); + + // ---- Path bar (conditional) ---- + int edit_y = WP_TOOLBAR_H; + + if (wp->show_pathbar) { + int pb_y = WP_TOOLBAR_H; + c.fill_rect(0, pb_y, c.w, WP_PATHBAR_H, Color::from_rgb(0xF0, 0xF0, 0xF0)); + + int inp_x = 8; + int inp_y = pb_y + 4; + int btn_w = 56; + int inp_w = c.w - inp_x - btn_w - 12; + int inp_h = 24; + + c.fill_rect(inp_x, inp_y, inp_w, inp_h, colors::WHITE); + c.rect(inp_x, inp_y, inp_w, inp_h, colors::ACCENT); + int text_y = inp_y + (inp_h - sfh) / 2; + c.text(inp_x + 4, text_y, wp->pathbar_text, colors::TEXT_COLOR); + + char prefix[256]; + int plen = wp->pathbar_cursor; + if (plen > 255) plen = 255; + for (int i = 0; i < plen; i++) prefix[i] = wp->pathbar_text[i]; + prefix[plen] = '\0'; + int cx = inp_x + 4 + text_width(prefix); + c.fill_rect(cx, inp_y + 3, 2, inp_h - 6, colors::ACCENT); + + int ob_x = inp_x + inp_w + 6; + const char* pb_label = wp->pathbar_save_mode ? "Save" : "Open"; + c.button(ob_x, inp_y, btn_w, inp_h, pb_label, colors::ACCENT, colors::WHITE, 3); + + c.hline(0, pb_y + WP_PATHBAR_H - 1, c.w, colors::BORDER); + edit_y = WP_TOOLBAR_H + WP_PATHBAR_H; + } + + // ---- Text area ---- + int text_area_h = c.h - edit_y - WP_STATUS_H; + int text_area_w = c.w; + + wp_recompute_wrap(wp, text_area_w); + + // Update scrollbar + wp->scrollbar.bounds = {c.w - WP_SCROLLBAR_W, edit_y, WP_SCROLLBAR_W, text_area_h}; + wp->scrollbar.content_height = wp->content_height; + wp->scrollbar.view_height = text_area_h; + + // Clamp scroll offset + { + int ms = wp->scrollbar.max_scroll(); + if (wp->scrollbar.scroll_offset > ms) wp->scrollbar.scroll_offset = ms; + if (wp->scrollbar.scroll_offset < 0) wp->scrollbar.scroll_offset = 0; + } + + wp_ensure_cursor_visible(wp, text_area_h); + + int scroll_y = wp->scrollbar.scroll_offset; + + // Draw text content + int cursor_abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + int sel_s = 0, sel_e = 0; + if (wp->has_selection) wp_sel_range(wp, &sel_s, &sel_e); + Color sel_bg = Color::from_rgb(0xB0, 0xD0, 0xF0); + + for (int li = 0; li < wp->wrap_line_count; li++) { + WrapLine* wl = &wp->wrap_lines[li]; + int py = edit_y + wl->y - scroll_y; + + // Clip + if (py + wl->height <= edit_y) continue; + if (py >= edit_y + text_area_h) break; + + // Walk through runs to render this line's chars + int chars_left = wl->char_count; + int ri = wl->run_idx; + int ro = wl->run_offset; + int x = WP_MARGIN; + int line_abs_start = wp_wrap_line_start(wp, li); + int char_idx = 0; + + while (chars_left > 0 && ri < wp->run_count) { + StyledRun* r = &wp->runs[ri]; + TrueTypeFont* font = wp_get_font(r->font_id, r->flags); + if (!font || !font->valid) { + ri++; ro = 0; + continue; + } + + GlyphCache* gc = font->get_cache(r->size); + int baseline = py + wl->baseline; + + int avail = r->len - ro; + int to_draw = avail < chars_left ? avail : chars_left; + + for (int ci = 0; ci < to_draw; ci++) { + char ch = r->text[ro + ci]; + int abs_ch = line_abs_start + char_idx; + + // Compute char advance for selection highlight + int char_adv = 0; + if (ch != '\n' && (ch >= 32 || ch < 0)) { + CachedGlyph* g = font->get_glyph(gc, (unsigned char)ch); + char_adv = g ? g->advance : 8; + } + + // Draw selection highlight behind text + if (wp->has_selection && abs_ch >= sel_s && abs_ch < sel_e) { + int sel_w = char_adv > 0 ? char_adv : 6; + c.fill_rect(x, py, sel_w, wl->height, sel_bg); + } + + // Draw cursor + if (abs_ch == cursor_abs) { + int cur_h = wl->height; + if (py >= edit_y && py + cur_h <= edit_y + text_area_h) + c.fill_rect(x, py, 2, cur_h, colors::ACCENT); + } + + if (ch != '\n' && (ch >= 32 || ch < 0)) { + if (x < c.w - WP_SCROLLBAR_W - WP_MARGIN) { + Color text_col = (wp->has_selection && abs_ch >= sel_s && abs_ch < sel_e) + ? Color::from_rgb(0x10, 0x10, 0x10) : colors::TEXT_COLOR; + int adv = font->draw_char_to_buffer( + c.pixels, c.w, c.h, x, baseline, (unsigned char)ch, + text_col, gc); + x += adv; + } + } + char_idx++; + } + + chars_left -= to_draw; + ro += to_draw; + if (ro >= r->len) { + ri++; + ro = 0; + } + } + + // Draw cursor at end of line only on the last wrap line + if (line_abs_start + char_idx == cursor_abs && li == wp->wrap_line_count - 1) { + int cur_h = wl->height; + if (py >= edit_y && py + cur_h <= edit_y + text_area_h) + c.fill_rect(x, py, 2, cur_h, colors::ACCENT); + } + } + + // ---- Scrollbar ---- + if (wp->scrollbar.content_height > wp->scrollbar.view_height) { + Color sb_fg = (wp->scrollbar.hovered || wp->scrollbar.dragging) + ? wp->scrollbar.hover_fg : wp->scrollbar.fg; + int sbx = wp->scrollbar.bounds.x; + int sby = wp->scrollbar.bounds.y; + int sbw = wp->scrollbar.bounds.w; + int sbh = wp->scrollbar.bounds.h; + c.fill_rect(sbx, sby, sbw, sbh, colors::SCROLLBAR_BG); + int th = wp->scrollbar.thumb_height(); + int tty = wp->scrollbar.thumb_y(); + c.fill_rect(sbx + 1, tty, sbw - 2, th, sb_fg); + } + + // ---- Status bar ---- + int status_y = c.h - WP_STATUS_H; + c.fill_rect(0, status_y, c.w, WP_STATUS_H, Color::from_rgb(0x2B, 0x3E, 0x50)); + int status_text_y = status_y + (WP_STATUS_H - sfh) / 2; + + char status_left[128]; + snprintf(status_left, 128, " %s %dpt %s%s", + font_names[wp->cur_font_id < FONT_COUNT ? wp->cur_font_id : 0], (int)wp->cur_size, + (wp->cur_flags & STYLE_BOLD) ? "Bold " : "", + (wp->cur_flags & STYLE_ITALIC) ? "Italic" : ""); + c.text(4, status_text_y, status_left, colors::PANEL_TEXT); + + char status_right[32]; + snprintf(status_right, 32, "%d chars ", wp->total_text_len); + int sr_w = text_width(status_right); + c.text(c.w - sr_w - 4, status_text_y, status_right, colors::PANEL_TEXT); + + // ---- Dropdown overlays ---- + if (wp->font_dropdown_open) { + int dx = 128, dy = WP_TOOLBAR_H; + int dw = 110, dh = FONT_COUNT * 26 + 4; + c.fill_rect(dx, dy, dw, dh, colors::MENU_BG); + c.rect(dx, dy, dw, dh, colors::BORDER); + for (int i = 0; i < FONT_COUNT; i++) { + int iy = dy + 2 + i * 26; + if (i == wp->cur_font_id) + c.fill_rect(dx + 2, iy, dw - 4, 24, colors::MENU_HOVER); + c.text(dx + 8, iy + (24 - sfh) / 2, font_names[i], colors::TEXT_COLOR); + } + } + + if (wp->size_dropdown_open) { + int dx = 224, dy = WP_TOOLBAR_H; + int dw = 56, dh = SIZE_OPTION_COUNT * 26 + 4; + c.fill_rect(dx, dy, dw, dh, colors::MENU_BG); + c.rect(dx, dy, dw, dh, colors::BORDER); + for (int i = 0; i < SIZE_OPTION_COUNT; i++) { + int iy = dy + 2 + i * 26; + if (size_options[i] == wp->cur_size) + c.fill_rect(dx + 2, iy, dw - 4, 24, colors::MENU_HOVER); + char sz[8]; + snprintf(sz, 8, "%d", size_options[i]); + c.text(dx + 8, iy + (24 - sfh) / 2, sz, colors::TEXT_COLOR); + } + } +} + +// ============================================================================ +// Mouse handling +// ============================================================================ + +static void wp_on_mouse(Window* win, MouseEvent& ev) { + WordProcessorState* wp = (WordProcessorState*)win->app_data; + if (!wp) return; + + Rect cr = win->content_rect(); + int local_x = ev.x - cr.x; + int local_y = ev.y - cr.y; + int edit_y = WP_TOOLBAR_H + (wp->show_pathbar ? WP_PATHBAR_H : 0); + int text_area_h = cr.h - edit_y - WP_STATUS_H; + + // Scrollbar + MouseEvent local_ev = ev; + local_ev.x = local_x; + local_ev.y = local_y; + wp->scrollbar.handle_mouse(local_ev); + + // ---- Font dropdown clicks ---- + if (wp->font_dropdown_open && ev.left_pressed()) { + int dx = 128, dy = WP_TOOLBAR_H; + int dh = FONT_COUNT * 26 + 4; + if (local_x >= dx && local_x < dx + 110 && local_y >= dy && local_y < dy + dh) { + int idx = (local_y - dy - 2) / 26; + if (idx >= 0 && idx < FONT_COUNT) { + if (wp->has_selection) wp_apply_style_to_selection(wp, 0, idx); + wp->cur_font_id = (uint8_t)idx; + } + } + wp->font_dropdown_open = false; + return; + } + + // ---- Size dropdown clicks ---- + if (wp->size_dropdown_open && ev.left_pressed()) { + int dx = 224, dy = WP_TOOLBAR_H; + int dh = SIZE_OPTION_COUNT * 26 + 4; + if (local_x >= dx && local_x < dx + 56 && local_y >= dy && local_y < dy + dh) { + int idx = (local_y - dy - 2) / 26; + if (idx >= 0 && idx < SIZE_OPTION_COUNT) { + if (wp->has_selection) wp_apply_style_to_selection(wp, 1, size_options[idx]); + wp->cur_size = (uint8_t)size_options[idx]; + wp->wrap_dirty = true; + } + } + wp->size_dropdown_open = false; + return; + } + + // ---- Toolbar clicks ---- + if (ev.left_pressed() && local_y < WP_TOOLBAR_H) { + if (local_x >= 4 && local_x < 28 && local_y >= 6 && local_y < 30) { + wp->show_pathbar = !wp->show_pathbar; + wp->pathbar_save_mode = false; + if (wp->show_pathbar) { + montauk::strncpy(wp->pathbar_text, wp->filepath, 255); + wp->pathbar_len = montauk::slen(wp->pathbar_text); + wp->pathbar_cursor = wp->pathbar_len; + } + return; + } + if (local_x >= 32 && local_x < 56 && local_y >= 6 && local_y < 30) { + wp_save_file(wp); + return; + } + if (local_x >= 66 && local_x < 90 && local_y >= 6 && local_y < 30) { + if (wp->has_selection) wp_apply_style_to_selection(wp, 2, 0); + wp->cur_flags ^= STYLE_BOLD; + return; + } + if (local_x >= 94 && local_x < 118 && local_y >= 6 && local_y < 30) { + if (wp->has_selection) wp_apply_style_to_selection(wp, 3, 0); + wp->cur_flags ^= STYLE_ITALIC; + return; + } + if (local_x >= 128 && local_x < 218 && local_y >= 6 && local_y < 30) { + wp->font_dropdown_open = !wp->font_dropdown_open; + wp->size_dropdown_open = false; + return; + } + if (local_x >= 224 && local_x < 268 && local_y >= 6 && local_y < 30) { + wp->size_dropdown_open = !wp->size_dropdown_open; + wp->font_dropdown_open = false; + return; + } + if (local_x >= 278 && local_x < 302 && local_y >= 6 && local_y < 30) { + wp_insert_char(wp, (char)0xA7); + return; + } + return; + } + + // ---- Path bar clicks ---- + if (wp->show_pathbar && local_y >= WP_TOOLBAR_H && local_y < WP_TOOLBAR_H + WP_PATHBAR_H) { + if (ev.left_pressed()) { + int btn_w = 56; + int inp_w = cr.w - 8 - btn_w - 12; + int ob_x = 8 + inp_w + 6; + if (local_x >= ob_x && local_x < ob_x + btn_w) { + if (wp->pathbar_text[0]) { + if (wp->pathbar_save_mode) { + wp_set_filepath(wp, wp->pathbar_text); + wp_save_file(wp); + } else { + wp_load_file(wp, wp->pathbar_text); + } + char title[64]; + snprintf(title, 64, "%s - Word Processor", wp->filename); + montauk::strncpy(win->title, title, 63); + wp->show_pathbar = false; + } + } + } + return; + } + + // ---- Text area: hit-test helper ---- + auto hit_test = [&](int lx, int ly) -> int { + int click_y = ly - edit_y + wp->scrollbar.scroll_offset; + int click_x = lx - WP_MARGIN; + + int target_line = wp->wrap_line_count - 1; + for (int i = 0; i < wp->wrap_line_count; i++) { + if (click_y >= wp->wrap_lines[i].y && + click_y < wp->wrap_lines[i].y + wp->wrap_lines[i].height) { + target_line = i; + break; + } + } + + WrapLine* wl = &wp->wrap_lines[target_line]; + int ri = wl->run_idx; + int ro = wl->run_offset; + int chars_left = wl->char_count; + int x = 0; + int best_abs = wp_wrap_line_start(wp, target_line); + + while (chars_left > 0 && ri < wp->run_count) { + StyledRun* r = &wp->runs[ri]; + TrueTypeFont* font = wp_get_font(r->font_id, r->flags); + if (!font || !font->valid) { ri++; ro = 0; continue; } + + GlyphCache* gc = font->get_cache(r->size); + int avail = r->len - ro; + int to_check = avail < chars_left ? avail : chars_left; + + for (int ci = 0; ci < to_check; ci++) { + char ch = r->text[ro + ci]; + CachedGlyph* g = (ch >= 32 || ch < 0) && ch != '\n' + ? font->get_glyph(gc, (unsigned char)ch) : nullptr; + int char_w = g ? g->advance : 0; + + if (x + char_w / 2 > click_x) return best_abs; + x += char_w; + best_abs++; + } + + chars_left -= to_check; + ro += to_check; + if (ro >= r->len) { ri++; ro = 0; } + } + return best_abs; + }; + + // ---- Text area: mouse press - start selection or place cursor ---- + if (ev.left_pressed() && local_y >= edit_y && local_y < edit_y + text_area_h) { + wp->font_dropdown_open = false; + wp->size_dropdown_open = false; + + int abs = hit_test(local_x, local_y); + wp_pos_to_run(wp, abs, &wp->cursor_run, &wp->cursor_offset); + wp->sel_anchor = abs; + wp->sel_end = abs; + wp->has_selection = false; + wp->mouse_selecting = true; + return; + } + + // ---- Text area: mouse drag - extend selection ---- + if (wp->mouse_selecting && ev.left_held() && local_y >= edit_y - 20) { + int abs = hit_test(local_x, local_y); + wp->sel_end = abs; + wp_pos_to_run(wp, abs, &wp->cursor_run, &wp->cursor_offset); + wp->has_selection = (wp->sel_anchor != wp->sel_end); + return; + } + + // ---- Mouse release: end selection ---- + if (wp->mouse_selecting && ev.left_released()) { + wp->mouse_selecting = false; + return; + } + + // ---- Scroll ---- + if (ev.scroll != 0 && local_y >= edit_y && local_y < edit_y + text_area_h) { + wp->scrollbar.scroll_offset -= ev.scroll * 40; + int ms = wp->scrollbar.max_scroll(); + if (wp->scrollbar.scroll_offset < 0) wp->scrollbar.scroll_offset = 0; + if (wp->scrollbar.scroll_offset > ms) wp->scrollbar.scroll_offset = ms; + } +} + +// ============================================================================ +// Keyboard handling +// ============================================================================ + +static void wp_on_key(Window* win, const Montauk::KeyEvent& key) { + WordProcessorState* wp = (WordProcessorState*)win->app_data; + if (!wp || !key.pressed) return; + + // ---- Path bar mode ---- + if (wp->show_pathbar) { + if (key.ascii == '\n' || key.ascii == '\r') { + if (wp->pathbar_text[0]) { + if (wp->pathbar_save_mode) { + wp_set_filepath(wp, wp->pathbar_text); + wp_save_file(wp); + } else { + wp_load_file(wp, wp->pathbar_text); + } + char title[64]; + snprintf(title, 64, "%s - Word Processor", wp->filename); + montauk::strncpy(win->title, title, 63); + wp->show_pathbar = false; + } + return; + } + if (key.scancode == 0x01) { wp->show_pathbar = false; return; } + if (key.ascii == '\b' || key.scancode == 0x0E) { + if (wp->pathbar_cursor > 0) { + for (int i = wp->pathbar_cursor - 1; i < wp->pathbar_len - 1; i++) + wp->pathbar_text[i] = wp->pathbar_text[i + 1]; + wp->pathbar_len--; + wp->pathbar_cursor--; + wp->pathbar_text[wp->pathbar_len] = '\0'; + } + return; + } + if (key.scancode == 0x4B) { if (wp->pathbar_cursor > 0) wp->pathbar_cursor--; return; } + if (key.scancode == 0x4D) { if (wp->pathbar_cursor < wp->pathbar_len) wp->pathbar_cursor++; return; } + if (key.ascii >= 32 && key.ascii < 127 && wp->pathbar_len < 254) { + for (int i = wp->pathbar_len; i > wp->pathbar_cursor; i--) + wp->pathbar_text[i] = wp->pathbar_text[i - 1]; + wp->pathbar_text[wp->pathbar_cursor] = key.ascii; + wp->pathbar_cursor++; + wp->pathbar_len++; + wp->pathbar_text[wp->pathbar_len] = '\0'; + return; + } + return; + } + + // Close dropdowns on any key + wp->font_dropdown_open = false; + wp->size_dropdown_open = false; + + // Ctrl+S + if (key.ctrl && (key.ascii == 's' || key.ascii == 'S')) { + wp_save_file(wp); + return; + } + // Ctrl+O + if (key.ctrl && (key.ascii == 'o' || key.ascii == 'O')) { + wp->show_pathbar = !wp->show_pathbar; + wp->pathbar_save_mode = false; + if (wp->show_pathbar) { + montauk::strncpy(wp->pathbar_text, wp->filepath, 255); + wp->pathbar_len = montauk::slen(wp->pathbar_text); + wp->pathbar_cursor = wp->pathbar_len; + } + return; + } + // Ctrl+B + if (key.ctrl && (key.ascii == 'b' || key.ascii == 'B')) { + if (wp->has_selection) wp_apply_style_to_selection(wp, 2, 0); + wp->cur_flags ^= STYLE_BOLD; + return; + } + // Ctrl+I + if (key.ctrl && (key.ascii == 'i' || key.ascii == 'I')) { + if (wp->has_selection) wp_apply_style_to_selection(wp, 3, 0); + wp->cur_flags ^= STYLE_ITALIC; + return; + } + + // Arrow keys (Shift extends selection) + if (key.scancode == 0x48) { // Up + if (key.shift) wp_start_selection(wp); + else wp_clear_selection(wp); + wp_cursor_up(wp); + if (key.shift) wp_update_selection_to_cursor(wp); + return; + } + if (key.scancode == 0x50) { // Down + if (key.shift) wp_start_selection(wp); + else wp_clear_selection(wp); + wp_cursor_down(wp); + if (key.shift) wp_update_selection_to_cursor(wp); + return; + } + if (key.scancode == 0x4B) { // Left + if (key.shift) wp_start_selection(wp); + else if (wp->has_selection) { + int s, e; wp_sel_range(wp, &s, &e); + wp_pos_to_run(wp, s, &wp->cursor_run, &wp->cursor_offset); + wp_clear_selection(wp); + return; + } + wp_cursor_left(wp); + if (key.shift) wp_update_selection_to_cursor(wp); + return; + } + if (key.scancode == 0x4D) { // Right + if (key.shift) wp_start_selection(wp); + else if (wp->has_selection) { + int s, e; wp_sel_range(wp, &s, &e); + wp_pos_to_run(wp, e, &wp->cursor_run, &wp->cursor_offset); + wp_clear_selection(wp); + return; + } + wp_cursor_right(wp); + if (key.shift) wp_update_selection_to_cursor(wp); + return; + } + + // Home + if (key.scancode == 0x47) { + if (key.shift) wp_start_selection(wp); + else wp_clear_selection(wp); + int abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + int line = wp_find_wrap_line(wp, abs); + int start = wp_wrap_line_start(wp, line); + wp_pos_to_run(wp, start, &wp->cursor_run, &wp->cursor_offset); + if (key.shift) wp_update_selection_to_cursor(wp); + return; + } + // End + if (key.scancode == 0x4F) { + if (key.shift) wp_start_selection(wp); + else wp_clear_selection(wp); + int abs = wp_abs_pos(wp, wp->cursor_run, wp->cursor_offset); + int line = wp_find_wrap_line(wp, abs); + int start = wp_wrap_line_start(wp, line); + int end = start + wp->wrap_lines[line].char_count; + if (end > start) { + char ch = wp_char_at(wp, end - 1); + if (ch == '\n') end--; + } + wp_pos_to_run(wp, end, &wp->cursor_run, &wp->cursor_offset); + if (key.shift) wp_update_selection_to_cursor(wp); + return; + } + + // Ctrl+A - select all + if (key.ctrl && (key.ascii == 'a' || key.ascii == 'A')) { + wp->sel_anchor = 0; + wp->sel_end = wp->total_text_len; + wp->has_selection = (wp->total_text_len > 0); + wp_pos_to_run(wp, wp->total_text_len, &wp->cursor_run, &wp->cursor_offset); + return; + } + + // Delete + if (key.scancode == 0x53) { + if (wp->has_selection) wp_delete_selection(wp); + else wp_delete_char(wp); + return; + } + + // Backspace + if (key.ascii == '\b' || key.scancode == 0x0E) { + if (wp->has_selection) wp_delete_selection(wp); + else wp_backspace(wp); + return; + } + + // Enter + if (key.ascii == '\n' || key.ascii == '\r') { + if (wp->has_selection) wp_delete_selection(wp); + wp_insert_char(wp, '\n'); + return; + } + + // Tab + if (key.ascii == '\t') { + if (wp->has_selection) wp_delete_selection(wp); + for (int i = 0; i < 4; i++) wp_insert_char(wp, ' '); + return; + } + + // Printable characters + if (key.ascii >= 32 && key.ascii < 127) { + if (wp->has_selection) wp_delete_selection(wp); + wp_insert_char(wp, key.ascii); + return; + } +} + +// ============================================================================ +// Close handler +// ============================================================================ + +static void wp_on_close(Window* win) { + WordProcessorState* wp = (WordProcessorState*)win->app_data; + if (wp) { + for (int i = 0; i < wp->run_count; i++) + wp_free_run(&wp->runs[i]); + if (wp->wrap_lines) montauk::mfree(wp->wrap_lines); + montauk::mfree(wp); + win->app_data = nullptr; + } +} + +// ============================================================================ +// Word Processor launcher +// ============================================================================ + +void open_wordprocessor(DesktopState* ds) { + wp_load_fonts(); + + int idx = desktop_create_window(ds, "Word Processor", 140, 50, 640, 480); + if (idx < 0) return; + + Window* win = &ds->windows[idx]; + WordProcessorState* wp = (WordProcessorState*)montauk::malloc(sizeof(WordProcessorState)); + montauk::memset(wp, 0, sizeof(WordProcessorState)); + + wp_init_run(&wp->runs[0], FONT_ROBOTO, WP_DEFAULT_SIZE, 0); + wp->run_count = 1; + wp->total_text_len = 0; + wp->cursor_run = 0; + wp->cursor_offset = 0; + + wp->cur_font_id = FONT_ROBOTO; + wp->cur_size = WP_DEFAULT_SIZE; + wp->cur_flags = 0; + + wp->scrollbar.init(0, 0, WP_SCROLLBAR_W, 100); + + wp->modified = false; + wp->desktop = ds; + wp->show_pathbar = false; + wp->wrap_dirty = true; + wp->wrap_lines = nullptr; + wp->last_wrap_width = 0; + wp->font_dropdown_open = false; + wp->size_dropdown_open = false; + + win->app_data = wp; + win->on_draw = wp_on_draw; + win->on_mouse = wp_on_mouse; + win->on_key = wp_on_key; + win->on_close = wp_on_close; +} diff --git a/programs/src/desktop/apps_common.hpp b/programs/src/desktop/apps_common.hpp index e3b2d50..27a8d0a 100644 --- a/programs/src/desktop/apps_common.hpp +++ b/programs/src/desktop/apps_common.hpp @@ -174,5 +174,7 @@ void open_devexplorer(DesktopState* ds); void open_settings(DesktopState* ds); void open_doom(DesktopState* ds); void open_reboot_dialog(DesktopState* ds); +void open_wordprocessor(DesktopState* ds); +void open_spreadsheet(DesktopState* ds); void open_shutdown_dialog(DesktopState* ds); void desktop_poll_external_windows(DesktopState* ds); diff --git a/programs/src/desktop/main.cpp b/programs/src/desktop/main.cpp index 4497cc1..b7411d3 100644 --- a/programs/src/desktop/main.cpp +++ b/programs/src/desktop/main.cpp @@ -69,6 +69,7 @@ void gui::desktop_init(DesktopState* ds) { ds->icon_procmgr = svg_load("0:/icons/system-monitor.svg", 20, 20, defColor); ds->icon_mandelbrot = svg_load("0:/icons/applications-science.svg", 20, 20, defColor); ds->icon_devexplorer = svg_load("0:/icons/hardware.svg", 20, 20, defColor); + ds->icon_spreadsheet = svg_load("0:/icons/spreadsheet.svg", 20, 20, defColor); // Settings defaults ds->settings.bg_gradient = true; @@ -428,7 +429,7 @@ void gui::desktop_draw_panel(DesktopState* ds) { static constexpr int MENU_W = 220; static constexpr int MENU_ITEM_H = 36; -static constexpr int MENU_CAT_H = 28; +static constexpr int MENU_CAT_H = 32; static constexpr int MENU_DIV_H = 10; struct MenuRow { @@ -437,30 +438,53 @@ struct MenuRow { int app_id; // -1 for category headers / dividers }; -static constexpr int MENU_ROW_COUNT = 20; +static constexpr int MENU_ROW_COUNT = 22; static const MenuRow menu_rows[MENU_ROW_COUNT] = { - { true, "Applications", -1 }, + { true, "Applications", -1 }, // cat 0 { false, "Terminal", 0 }, { false, "Files", 1 }, { false, "Text Editor", 4 }, + { false, "Word Processor", 15 }, + { false, "Spreadsheet", 16 }, { false, "Calculator", 3 }, - { true, "Internet", -1 }, + { true, "Internet", -1 }, // cat 1 { false, "Wikipedia", 9 }, { false, "Weather", 13 }, - { true, "System", -1 }, + { true, "System", -1 }, // cat 2 { false, "System Info", 2 }, { false, "Kernel Log", 5 }, { false, "Processes", 6 }, { false, "Devices", 8 }, - { true, "Games", -1 }, + { true, "Games", -1 }, // cat 3 { false, "Mandelbrot", 7 }, { false, "DOOM", 10 }, - { true, "", -1 }, // divider + { true, "", -1 }, // divider (always visible) { false, "Settings", 11 }, { false, "Reboot", 12 }, { false, "Shutdown", 14 }, }; +// Collapsible category state (categories 0-3 are toggleable; divider category always expanded) +static constexpr int MENU_NUM_CATS = 5; +static bool menu_cat_expanded[MENU_NUM_CATS] = { false, false, false, false, true }; + +// Map a menu_rows index to its category index (0-4), or -1 for items before any category +static int menu_get_cat(int row_idx) { + int cat = -1; + for (int i = 0; i <= row_idx; i++) + if (menu_rows[i].is_category) cat++; + return cat; +} + +// Check if a row should be visible given current expand/collapse state +static bool menu_row_visible(int row_idx) { + const MenuRow& row = menu_rows[row_idx]; + if (row.is_category) return true; // category headers always visible + int cat = menu_get_cat(row_idx); + if (cat < 0 || cat >= MENU_NUM_CATS) return true; + return menu_cat_expanded[cat]; +} + static int menu_row_height(const MenuRow& row) { if (!row.is_category) return MENU_ITEM_H; return row.label[0] ? MENU_CAT_H : MENU_DIV_H; @@ -469,7 +493,8 @@ static int menu_row_height(const MenuRow& row) { static int menu_total_height() { int h = 10; // top + bottom padding for (int i = 0; i < MENU_ROW_COUNT; i++) - h += menu_row_height(menu_rows[i]); + if (menu_row_visible(i)) + h += menu_row_height(menu_rows[i]); return h; } @@ -488,7 +513,7 @@ static void desktop_draw_app_menu(DesktopState* ds) { draw_rect(fb, menu_x, menu_y, MENU_W, menu_h, colors::BORDER); // Icon lookup by app_id - SvgIcon* icons[15] = { + SvgIcon* icons[17] = { &ds->icon_terminal, // 0 &ds->icon_filemanager, // 1 &ds->icon_sysinfo, // 2 @@ -504,29 +529,64 @@ static void desktop_draw_app_menu(DesktopState* ds) { &ds->icon_reboot, // 12 &ds->icon_weather, // 13 &ds->icon_shutdown, // 14 + &ds->icon_texteditor, // 15 + &ds->icon_spreadsheet, // 16 }; int mx = ds->mouse.x; int my = ds->mouse.y; int iy = menu_y + 5; + int cur_cat = -1; for (int i = 0; i < MENU_ROW_COUNT; i++) { const MenuRow& row = menu_rows[i]; + + if (row.is_category) cur_cat++; + if (!menu_row_visible(i)) continue; + int row_h = menu_row_height(row); if (row.is_category) { // Separator line above (except first category) if (i > 0) { for (int sx = menu_x + 8; sx < menu_x + MENU_W - 8; sx++) - fb.put_pixel(sx, iy + row_h / 2, colors::BORDER); + fb.put_pixel(sx, iy + 1, colors::BORDER); } - // Category label (dimmed), skip for divider-only rows + // Category header with hover + expand/collapse indicator if (row.label[0]) { - int tx = menu_x + 12; + Rect cat_rect = {menu_x + 4, iy, MENU_W - 8, row_h}; + bool hovered = cat_rect.contains(mx, my); + if (hovered) + fill_rounded_rect(fb, cat_rect.x, cat_rect.y, cat_rect.w, cat_rect.h, 4, + Color::from_rgb(0xE8, 0xE8, 0xE8)); + + // Arrow indicator: > for collapsed, v for expanded + bool expanded = (cur_cat >= 0 && cur_cat < MENU_NUM_CATS) && menu_cat_expanded[cur_cat]; + int ax = menu_x + 10; + int ay = iy + row_h / 2; + Color arrow_color = Color::from_rgb(0x88, 0x88, 0x88); + if (expanded) { + // Down arrow (v shape) + for (int d = 0; d < 4; d++) { + fb.put_pixel(ax + d, ay - 2 + d, arrow_color); + fb.put_pixel(ax + d + 1, ay - 2 + d, arrow_color); + fb.put_pixel(ax + 7 - d, ay - 2 + d, arrow_color); + fb.put_pixel(ax + 6 - d, ay - 2 + d, arrow_color); + } + } else { + // Right arrow (> shape) + for (int d = 0; d < 4; d++) { + fb.put_pixel(ax + d, ay - 3 + d, arrow_color); + fb.put_pixel(ax + d, ay - 3 + d + 1, arrow_color); + fb.put_pixel(ax + d, ay + 3 - d, arrow_color); + fb.put_pixel(ax + d, ay + 3 - d - 1, arrow_color); + } + } + + int tx = menu_x + 24; int ty = iy + (row_h - system_font_height()) / 2; - if (i > 0) ty += 2; - draw_text(fb, tx, ty, row.label, Color::from_rgb(0x88, 0x88, 0x88)); + draw_text(fb, tx, ty, row.label, Color::from_rgb(0x66, 0x66, 0x66)); } } else { Rect item_rect = {menu_x + 4, iy, MENU_W - 8, row_h}; @@ -539,7 +599,7 @@ static void desktop_draw_app_menu(DesktopState* ds) { // Icon int icon_x = item_rect.x + 8; int icon_y = item_rect.y + (row_h - 20) / 2; - if (row.app_id >= 0 && row.app_id < 15) { + if (row.app_id >= 0 && row.app_id < 17) { SvgIcon* icon = icons[row.app_id]; if (icon && icon->pixels) { fb.blit_alpha(icon_x, icon_y, icon->width, icon->height, icon->pixels); @@ -1217,13 +1277,19 @@ void gui::desktop_handle_mouse(DesktopState* ds) { Rect menu_rect = {menu_x, menu_y, MENU_W, menu_h}; if (menu_rect.contains(mx, my)) { - // Walk rows to find which one was clicked + // Walk visible rows to find which one was clicked int iy = menu_y + 5; + int cur_cat = -1; for (int i = 0; i < MENU_ROW_COUNT; i++) { const MenuRow& row = menu_rows[i]; + if (row.is_category) cur_cat++; + if (!menu_row_visible(i)) continue; int row_h = menu_row_height(row); if (my >= iy && my < iy + row_h) { - if (!row.is_category) { + if (row.is_category && row.label[0] && cur_cat >= 0 && cur_cat < MENU_NUM_CATS - 1) { + // Toggle category expand/collapse + menu_cat_expanded[cur_cat] = !menu_cat_expanded[cur_cat]; + } else if (!row.is_category) { switch (row.app_id) { case 0: open_terminal(ds); break; case 1: open_filemanager(ds); break; @@ -1240,6 +1306,8 @@ void gui::desktop_handle_mouse(DesktopState* ds) { case 12: open_reboot_dialog(ds); break; case 13: open_weather(ds); break; case 14: open_shutdown_dialog(ds); break; + case 15: open_wordprocessor(ds); break; + case 16: open_spreadsheet(ds); break; } ds->app_menu_open = false; } @@ -1509,6 +1577,10 @@ void gui::desktop_handle_keyboard(DesktopState* ds, const Montauk::KeyEvent& key open_texteditor(ds); return; } + if (key.ascii == 'w' || key.ascii == 'W') { + open_wordprocessor(ds); + return; + } if (key.ascii == 'k' || key.ascii == 'K') { open_klog(ds); return; diff --git a/programs/src/spreadsheet/Makefile b/programs/src/spreadsheet/Makefile new file mode 100644 index 0000000..cd15794 --- /dev/null +++ b/programs/src/spreadsheet/Makefile @@ -0,0 +1,86 @@ +# Makefile for spreadsheet (standalone Window Server app) on MontaukOS +# Copyright (c) 2026 Daniel Hammer + +MAKEFLAGS += -rR +.SUFFIXES: + +# ---- Toolchain ---- + +TOOLCHAIN_PREFIX := $(shell cd ../../.. && pwd)/toolchain/local/bin/x86_64-elf- +ifneq ($(wildcard $(TOOLCHAIN_PREFIX)gcc),) + CXX := $(TOOLCHAIN_PREFIX)g++ +else + CXX := g++ +endif + +# ---- Paths ---- + +PROG_INC := ../../include +LINK_LD := ../../link.ld +BINDIR := ../../bin +OBJDIR := obj +LIBDIR := ../../lib + +# ---- Compiler flags ---- + +CXXFLAGS := \ + -std=gnu++20 \ + -g -O2 -pipe \ + -Wall \ + -Wextra \ + -Wno-unused-parameter \ + -Wno-unused-function \ + -nostdinc \ + -ffreestanding \ + -fno-stack-protector \ + -fno-stack-check \ + -fno-PIC \ + -fno-rtti \ + -fno-exceptions \ + -ffunction-sections \ + -fdata-sections \ + -m64 \ + -march=x86-64 \ + -msse \ + -msse2 \ + -mno-red-zone \ + -mcmodel=small \ + -I $(PROG_INC) \ + -isystem $(PROG_INC)/libc \ + -isystem ../../../kernel/freestnd-c-hdrs/x86_64/include \ + -isystem ../../../kernel/freestnd-cxx-hdrs/x86_64/include + +# ---- Linker flags ---- + +LDFLAGS := \ + -nostdlib \ + -static \ + -Wl,--build-id=none \ + -Wl,--gc-sections \ + -Wl,-m,elf_x86_64 \ + -z max-page-size=0x1000 \ + -T $(LINK_LD) + +# ---- Source files ---- + +SRCS := main.cpp helpers.cpp formula.cpp fileio.cpp edit.cpp render.cpp stb_truetype_impl.cpp +OBJS := $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.o)) + +# ---- Target ---- + +TARGET := $(BINDIR)/os/spreadsheet.elf + +.PHONY: all clean + +all: $(TARGET) + +$(TARGET): $(OBJS) $(LINK_LD) Makefile + mkdir -p $(BINDIR)/os + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(LIBDIR)/libc/liblibc.a -o $@ + +$(OBJDIR)/%.o: %.cpp Makefile + mkdir -p $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $< -o $@ + +clean: + rm -rf $(OBJDIR) $(TARGET) diff --git a/programs/src/spreadsheet/edit.cpp b/programs/src/spreadsheet/edit.cpp new file mode 100644 index 0000000..4c843a1 --- /dev/null +++ b/programs/src/spreadsheet/edit.cpp @@ -0,0 +1,245 @@ +/* + * edit.cpp + * Editing, selection, clipboard, formatting, undo/redo, scroll + * Copyright (c) 2026 Daniel Hammer + */ + +#include "spreadsheet.h" + +// ============================================================================ +// Undo/redo +// ============================================================================ + +void undo_push() { + for (int i = g_undo_pos; i < g_undo_count; i++) { + if (g_undo[i]) { montauk::mfree(g_undo[i]); g_undo[i] = nullptr; } + } + if (g_undo[UNDO_MAX]) { montauk::mfree(g_undo[UNDO_MAX]); g_undo[UNDO_MAX] = nullptr; } + g_undo_count = g_undo_pos; + + if (g_undo_count >= UNDO_MAX) { + if (g_undo[0]) montauk::mfree(g_undo[0]); + for (int i = 0; i < UNDO_MAX - 1; i++) g_undo[i] = g_undo[i + 1]; + g_undo[UNDO_MAX - 1] = nullptr; + g_undo_count = UNDO_MAX - 1; + } + + UndoEntry* e = (UndoEntry*)montauk::malloc(sizeof(UndoEntry)); + if (!e) return; + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) { + str_cpy(e->cells[r][c].input, g_cells[r][c].input, CELL_TEXT_MAX); + e->cells[r][c].align = g_cells[r][c].align; + e->cells[r][c].fmt = g_cells[r][c].fmt; + e->cells[r][c].bold = g_cells[r][c].bold; + } + g_undo[g_undo_count] = e; + g_undo_count++; + g_undo_pos = g_undo_count; +} + +static void undo_restore(UndoEntry* e) { + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) { + str_cpy(g_cells[r][c].input, e->cells[r][c].input, CELL_TEXT_MAX); + g_cells[r][c].align = e->cells[r][c].align; + g_cells[r][c].fmt = e->cells[r][c].fmt; + g_cells[r][c].bold = e->cells[r][c].bold; + } + eval_all_cells(); +} + +void undo_do() { + if (g_undo_pos <= 0) return; + if (g_undo_pos == g_undo_count && !g_undo[g_undo_count]) { + UndoEntry* e = (UndoEntry*)montauk::malloc(sizeof(UndoEntry)); + if (e) { + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) { + str_cpy(e->cells[r][c].input, g_cells[r][c].input, CELL_TEXT_MAX); + e->cells[r][c].align = g_cells[r][c].align; + e->cells[r][c].fmt = g_cells[r][c].fmt; + e->cells[r][c].bold = g_cells[r][c].bold; + } + g_undo[g_undo_count] = e; + } + } + g_undo_pos--; + if (g_undo[g_undo_pos]) undo_restore(g_undo[g_undo_pos]); +} + +void redo_do() { + if (g_undo_pos >= g_undo_count) return; + g_undo_pos++; + UndoEntry* e = g_undo[g_undo_pos]; + if (e) undo_restore(e); +} + +// ============================================================================ +// Editing +// ============================================================================ + +void start_editing() { + if (g_editing) return; + g_editing = true; + Cell* c = &g_cells[g_sel_row][g_sel_col]; + str_cpy(g_edit_buf, c->input, CELL_TEXT_MAX); + g_edit_len = str_len(g_edit_buf); + g_edit_cursor = g_edit_len; +} + +void commit_edit() { + if (!g_editing) return; + g_editing = false; + undo_push(); + Cell* c = &g_cells[g_sel_row][g_sel_col]; + str_cpy(c->input, g_edit_buf, CELL_TEXT_MAX); + g_modified = true; + eval_all_cells(); +} + +void cancel_edit() { + g_editing = false; +} + +// ============================================================================ +// Selection helpers +// ============================================================================ + +void sel_range(int* c0, int* r0, int* c1, int* r1) { + if (!g_has_selection) { + *c0 = *c1 = g_sel_col; + *r0 = *r1 = g_sel_row; + return; + } + *c0 = g_sel_col < g_anchor_col ? g_sel_col : g_anchor_col; + *c1 = g_sel_col > g_anchor_col ? g_sel_col : g_anchor_col; + *r0 = g_sel_row < g_anchor_row ? g_sel_row : g_anchor_row; + *r1 = g_sel_row > g_anchor_row ? g_sel_row : g_anchor_row; +} + +void clear_selection() { + g_has_selection = false; + g_anchor_col = g_sel_col; + g_anchor_row = g_sel_row; +} + +void copy_selection() { + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + g_clip_count = 0; + g_clip_cols = c1 - c0 + 1; + g_clip_rows = r1 - r0 + 1; + for (int r = r0; r <= r1 && g_clip_count < CLIP_MAX_CELLS; r++) { + for (int c = c0; c <= c1 && g_clip_count < CLIP_MAX_CELLS; c++) { + ClipCell* cc = &g_clipboard[g_clip_count]; + str_cpy(cc->text, g_cells[r][c].input, CELL_TEXT_MAX); + cc->rel_col = c - c0; + cc->rel_row = r - r0; + cc->align = g_cells[r][c].align; + cc->fmt = g_cells[r][c].fmt; + cc->bold = g_cells[r][c].bold; + g_clip_count++; + } + } +} + +void cut_selection() { + copy_selection(); + undo_push(); + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + for (int r = r0; r <= r1; r++) + for (int c = c0; c <= c1; c++) + g_cells[r][c].input[0] = '\0'; + eval_all_cells(); + g_modified = true; +} + +void paste_at_cursor() { + if (g_clip_count == 0) return; + undo_push(); + for (int i = 0; i < g_clip_count; i++) { + int tc = g_sel_col + g_clipboard[i].rel_col; + int tr = g_sel_row + g_clipboard[i].rel_row; + if (tc >= 0 && tc < MAX_COLS && tr >= 0 && tr < MAX_ROWS) { + str_cpy(g_cells[tr][tc].input, g_clipboard[i].text, CELL_TEXT_MAX); + g_cells[tr][tc].align = g_clipboard[i].align; + g_cells[tr][tc].fmt = g_clipboard[i].fmt; + g_cells[tr][tc].bold = g_clipboard[i].bold; + } + } + eval_all_cells(); + g_modified = true; +} + +// ============================================================================ +// Formatting helpers (apply to selection) +// ============================================================================ + +void apply_bold_toggle() { + undo_push(); + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + bool new_bold = !g_cells[r0][c0].bold; + for (int r = r0; r <= r1; r++) + for (int c = c0; c <= c1; c++) + g_cells[r][c].bold = new_bold; + g_modified = true; +} + +void apply_align(CellAlign a) { + undo_push(); + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + for (int r = r0; r <= r1; r++) + for (int c = c0; c <= c1; c++) + g_cells[r][c].align = a; + g_modified = true; +} + +void apply_format(NumFormat f) { + undo_push(); + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + for (int r = r0; r <= r1; r++) + for (int c = c0; c <= c1; c++) + g_cells[r][c].fmt = f; + eval_all_cells(); + g_modified = true; +} + +// ============================================================================ +// Scroll clamping +// ============================================================================ + +void clamp_scroll() { + int pbh = g_pathbar_open ? PATHBAR_H : 0; + int max_x = content_width() - (g_win_w - ROW_HEADER_W); + int max_y = content_height() - (g_win_h - TOOLBAR_H - pbh - FORMULA_BAR_H - STATUS_BAR_H); + if (max_x < 0) max_x = 0; + if (max_y < 0) max_y = 0; + if (g_scroll_x < 0) g_scroll_x = 0; + if (g_scroll_x > max_x) g_scroll_x = max_x; + if (g_scroll_y < 0) g_scroll_y = 0; + if (g_scroll_y > max_y) g_scroll_y = max_y; +} + +void ensure_sel_visible() { + int pbh = g_pathbar_open ? PATHBAR_H : 0; + int area_w = g_win_w - ROW_HEADER_W; + int area_h = g_win_h - TOOLBAR_H - pbh - FORMULA_BAR_H - COL_HEADER_H - STATUS_BAR_H; + + int cx = col_x(g_sel_col) - ROW_HEADER_W; + int cy = g_sel_row * ROW_H; + + if (cx < g_scroll_x) g_scroll_x = cx; + if (cx + g_col_widths[g_sel_col] > g_scroll_x + area_w) + g_scroll_x = cx + g_col_widths[g_sel_col] - area_w; + + if (cy < g_scroll_y) g_scroll_y = cy; + if (cy + ROW_H > g_scroll_y + area_h) + g_scroll_y = cy + ROW_H - area_h; + + clamp_scroll(); +} diff --git a/programs/src/spreadsheet/fileio.cpp b/programs/src/spreadsheet/fileio.cpp new file mode 100644 index 0000000..9995cc8 --- /dev/null +++ b/programs/src/spreadsheet/fileio.cpp @@ -0,0 +1,125 @@ +/* + * fileio.cpp + * File I/O - MSS (Montauk SpreadSheet) format + * Copyright (c) 2026 Daniel Hammer + */ + +#include "spreadsheet.h" + +void save_file() { + if (g_filepath[0] == '\0') return; + + int count = 0; + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) + if (g_cells[r][c].input[0]) count++; + + int size = 4 + 2 + 2; + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) + if (g_cells[r][c].input[0]) + size += 1 + 1 + 2 + 1 + str_len(g_cells[r][c].input); + + uint8_t* buf = (uint8_t*)montauk::malloc(size); + int off = 0; + + buf[off++] = 'M'; buf[off++] = 'S'; buf[off++] = 'S'; buf[off++] = '2'; + buf[off++] = (uint8_t)(count & 0xFF); + buf[off++] = (uint8_t)((count >> 8) & 0xFF); + buf[off++] = MAX_COLS; + buf[off++] = MAX_ROWS; + + for (int r = 0; r < MAX_ROWS; r++) { + for (int c = 0; c < MAX_COLS; c++) { + if (!g_cells[r][c].input[0]) continue; + buf[off++] = (uint8_t)c; + buf[off++] = (uint8_t)r; + int len = str_len(g_cells[r][c].input); + buf[off++] = (uint8_t)(len & 0xFF); + buf[off++] = (uint8_t)((len >> 8) & 0xFF); + uint8_t flags = ((uint8_t)g_cells[r][c].align & 3) + | (((uint8_t)g_cells[r][c].fmt & 3) << 2) + | (g_cells[r][c].bold ? 0x10 : 0); + buf[off++] = flags; + montauk::memcpy(buf + off, g_cells[r][c].input, len); + off += len; + } + } + + int fd = montauk::fcreate(g_filepath); + if (fd >= 0) { + montauk::fwrite(fd, buf, 0, off); + montauk::close(fd); + g_modified = false; + } + + montauk::mfree(buf); +} + +void load_file(const char* path) { + int fd = montauk::open(path); + if (fd < 0) return; + + uint64_t fsize = montauk::getsize(fd); + if (fsize < 8 || fsize > 1024 * 1024) { + montauk::close(fd); + return; + } + + uint8_t* buf = (uint8_t*)montauk::malloc((int)fsize); + montauk::read(fd, buf, 0, fsize); + montauk::close(fd); + + if (buf[0] != 'M' || buf[1] != 'S' || buf[2] != 'S' || (buf[3] != '1' && buf[3] != '2')) { + montauk::mfree(buf); + return; + } + bool v2 = (buf[3] == '2'); + + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) { + g_cells[r][c].input[0] = '\0'; + g_cells[r][c].display[0] = '\0'; + g_cells[r][c].value = 0; + g_cells[r][c].type = CT_EMPTY; + g_cells[r][c].align = ALIGN_AUTO; + g_cells[r][c].fmt = FMT_AUTO; + g_cells[r][c].bold = false; + } + + int off = 4; + int count = buf[off] | (buf[off + 1] << 8); + off += 2; + off += 2; // skip cols/rows + + for (int i = 0; i < count && off < (int)fsize; i++) { + if (off + 4 > (int)fsize) break; + int c = buf[off++]; + int r = buf[off++]; + int len = buf[off] | (buf[off + 1] << 8); + off += 2; + + uint8_t flags = 0; + if (v2) { + if (off >= (int)fsize) break; + flags = buf[off++]; + } + + if (off + len > (int)fsize) break; + if (c < MAX_COLS && r < MAX_ROWS && len < CELL_TEXT_MAX) { + montauk::memcpy(g_cells[r][c].input, buf + off, len); + g_cells[r][c].input[len] = '\0'; + if (v2) { + g_cells[r][c].align = (CellAlign)(flags & 3); + g_cells[r][c].fmt = (NumFormat)((flags >> 2) & 3); + g_cells[r][c].bold = (flags & 0x10) != 0; + } + } + off += len; + } + + str_cpy(g_filepath, path, 256); + g_modified = false; + eval_all_cells(); + montauk::mfree(buf); +} diff --git a/programs/src/spreadsheet/formula.cpp b/programs/src/spreadsheet/formula.cpp new file mode 100644 index 0000000..4a27362 --- /dev/null +++ b/programs/src/spreadsheet/formula.cpp @@ -0,0 +1,308 @@ +/* + * formula.cpp + * Formula parser, cell evaluation, and geometry helpers + * Copyright (c) 2026 Daniel Hammer + */ + +#include "spreadsheet.h" + +// ============================================================================ +// Cell reference parsing +// ============================================================================ + +static bool parse_cell_ref(const char* s, int* col, int* row, int* consumed) { + int i = 0; + char c = to_upper(s[i]); + if (c < 'A' || c > 'Z') return false; + *col = c - 'A'; + i++; + + if (!is_digit(s[i])) return false; + int r = 0; + while (is_digit(s[i])) { + r = r * 10 + (s[i] - '0'); + i++; + } + if (r < 1 || r > MAX_ROWS) return false; + *row = r - 1; + *consumed = i; + return true; +} + +// ============================================================================ +// Formula evaluation (simple recursive-descent) +// ============================================================================ + +static double eval_expr(const char* s, int* pos, bool* ok); + +static double cell_value(int col, int row) { + if (col < 0 || col >= MAX_COLS || row < 0 || row >= MAX_ROWS) return 0; + return g_cells[row][col].value; +} + +static double eval_range_func(const char* func, const char* s, int* pos, bool* ok) { + if (s[*pos] != '(') { *ok = false; return 0; } + (*pos)++; + + int c1, r1, c2, r2, consumed; + if (!parse_cell_ref(s + *pos, &c1, &r1, &consumed)) { *ok = false; return 0; } + *pos += consumed; + + if (s[*pos] != ':') { *ok = false; return 0; } + (*pos)++; + + if (!parse_cell_ref(s + *pos, &c2, &r2, &consumed)) { *ok = false; return 0; } + *pos += consumed; + + if (s[*pos] != ')') { *ok = false; return 0; } + (*pos)++; + + if (c1 > c2) { int t = c1; c1 = c2; c2 = t; } + if (r1 > r2) { int t = r1; r1 = r2; r2 = t; } + + double sum = 0; + int count = 0; + for (int r = r1; r <= r2; r++) { + for (int c = c1; c <= c2; c++) { + sum += cell_value(c, r); + count++; + } + } + + bool is_sum = (func[0] == 'S' || func[0] == 's'); + bool is_avg = (func[0] == 'A' || func[0] == 'a'); + bool is_min = (func[0] == 'M' || func[0] == 'm') && (func[1] == 'I' || func[1] == 'i'); + bool is_max = (func[0] == 'M' || func[0] == 'm') && (func[1] == 'A' || func[1] == 'a'); + bool is_cnt = (func[0] == 'C' || func[0] == 'c'); + + if (is_sum) return sum; + if (is_avg) return count > 0 ? sum / count : 0; + if (is_cnt) return (double)count; + if (is_min || is_max) { + double result = cell_value(c1, r1); + for (int r = r1; r <= r2; r++) { + for (int c = c1; c <= c2; c++) { + double v = cell_value(c, r); + if (is_min && v < result) result = v; + if (is_max && v > result) result = v; + } + } + return result; + } + + *ok = false; + return 0; +} + +static void skip_spaces(const char* s, int* pos) { + while (s[*pos] == ' ') (*pos)++; +} + +static double eval_primary(const char* s, int* pos, bool* ok) { + skip_spaces(s, pos); + + if (s[*pos] == '-') { + (*pos)++; + return -eval_primary(s, pos, ok); + } + + if (s[*pos] == '(') { + (*pos)++; + double v = eval_expr(s, pos, ok); + skip_spaces(s, pos); + if (s[*pos] == ')') (*pos)++; + return v; + } + + if (is_alpha(s[*pos])) { + char fname[8] = {}; + int fi = 0; + int save_pos = *pos; + while (is_alpha(s[*pos]) && fi < 7) { + fname[fi++] = to_upper(s[*pos]); + (*pos)++; + } + fname[fi] = '\0'; + + if (s[*pos] == '(' && (strcmp(fname, "SUM") == 0 || + strcmp(fname, "AVG") == 0 || + strcmp(fname, "MIN") == 0 || + strcmp(fname, "MAX") == 0 || + strcmp(fname, "COUNT") == 0)) { + return eval_range_func(fname, s, pos, ok); + } + + *pos = save_pos; + int col, row, consumed; + if (parse_cell_ref(s + *pos, &col, &row, &consumed)) { + *pos += consumed; + return cell_value(col, row); + } + + *ok = false; + return 0; + } + + if (is_digit(s[*pos]) || s[*pos] == '.') { + double result = 0; + while (is_digit(s[*pos])) { + result = result * 10 + (s[*pos] - '0'); + (*pos)++; + } + if (s[*pos] == '.') { + (*pos)++; + double frac = 0.1; + while (is_digit(s[*pos])) { + result += (s[*pos] - '0') * frac; + frac *= 0.1; + (*pos)++; + } + } + return result; + } + + *ok = false; + return 0; +} + +static double eval_term(const char* s, int* pos, bool* ok) { + double left = eval_primary(s, pos, ok); + while (*ok) { + skip_spaces(s, pos); + char op = s[*pos]; + if (op != '*' && op != '/') break; + (*pos)++; + double right = eval_primary(s, pos, ok); + if (op == '*') left *= right; + else if (right != 0) left /= right; + else { *ok = false; return 0; } + } + return left; +} + +static double eval_expr(const char* s, int* pos, bool* ok) { + double left = eval_term(s, pos, ok); + while (*ok) { + skip_spaces(s, pos); + char op = s[*pos]; + if (op != '+' && op != '-') break; + (*pos)++; + double right = eval_term(s, pos, ok); + if (op == '+') left += right; + else left -= right; + } + return left; +} + +// ============================================================================ +// Cell evaluation +// ============================================================================ + +void format_value(char* buf, int max, double val, NumFormat fmt) { + switch (fmt) { + case FMT_CURRENCY: { + bool neg = val < 0; + double av = neg ? -val : val; + long long cents = (long long)(av * 100 + 0.5); + long long dollars = cents / 100; + int c = (int)(cents % 100); + if (neg) + snprintf(buf, max, "-$%lld.%02d", dollars, c); + else + snprintf(buf, max, "$%lld.%02d", dollars, c); + break; + } + case FMT_PERCENT: { + double av = val < 0 ? -val : val; + long long ip = (long long)av; + double frac = av - ip; + if (frac < 0.005) + snprintf(buf, max, "%s%lld%%", val < 0 ? "-" : "", ip); + else + snprintf(buf, max, "%s%lld.%02d%%", val < 0 ? "-" : "", ip, (int)(frac * 100 + 0.5)); + break; + } + case FMT_DECIMAL: { + long long rounded = (long long)((val < 0 ? -val : val) * 100 + 0.5); + long long ip = rounded / 100; + int dp = (int)(rounded % 100); + snprintf(buf, max, "%s%lld.%02d", val < 0 ? "-" : "", ip, dp); + break; + } + default: + double_to_str(buf, max, val); + break; + } +} + +void eval_cell(int col, int row) { + Cell* c = &g_cells[row][col]; + if (c->input[0] == '\0') { + c->type = CT_EMPTY; + c->display[0] = '\0'; + c->value = 0; + return; + } + + if (c->input[0] == '=') { + int pos = 1; + bool ok = true; + double val = eval_expr(c->input, &pos, &ok); + if (ok) { + c->type = CT_FORMULA; + c->value = val; + format_value(c->display, CELL_TEXT_MAX, val, c->fmt); + } else { + c->type = CT_ERROR; + c->value = 0; + str_cpy(c->display, "#ERR", CELL_TEXT_MAX); + } + return; + } + + bool ok; + double val = str_to_double(c->input, &ok); + if (ok) { + c->type = CT_NUMBER; + c->value = val; + format_value(c->display, CELL_TEXT_MAX, val, c->fmt); + } else { + c->type = CT_TEXT; + c->value = 0; + str_cpy(c->display, c->input, CELL_TEXT_MAX); + } +} + +void eval_all_cells() { + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) + eval_cell(c, r); +} + +// ============================================================================ +// Column/row geometry helpers +// ============================================================================ + +int col_x(int col) { + int x = ROW_HEADER_W; + for (int i = 0; i < col; i++) x += g_col_widths[i]; + return x; +} + +int content_width() { + int w = ROW_HEADER_W; + for (int i = 0; i < MAX_COLS; i++) w += g_col_widths[i]; + return w; +} + +int content_height() { + return COL_HEADER_H + MAX_ROWS * ROW_H; +} + +void cell_name(char* buf, int col, int row) { + buf[0] = 'A' + col; + int r = row + 1; + if (r >= 100) { buf[1] = '0' + r / 100; buf[2] = '0' + (r / 10) % 10; buf[3] = '0' + r % 10; buf[4] = '\0'; } + else if (r >= 10) { buf[1] = '0' + r / 10; buf[2] = '0' + r % 10; buf[3] = '\0'; } + else { buf[1] = '0' + r; buf[2] = '\0'; } +} diff --git a/programs/src/spreadsheet/helpers.cpp b/programs/src/spreadsheet/helpers.cpp new file mode 100644 index 0000000..9e745d8 --- /dev/null +++ b/programs/src/spreadsheet/helpers.cpp @@ -0,0 +1,194 @@ +/* + * helpers.cpp + * Pixel drawing and string/number helpers + * Copyright (c) 2026 Daniel Hammer + */ + +#include "spreadsheet.h" + +void px_fill(uint32_t* px, int bw, int bh, + int x, int y, int w, int h, Color c) { + uint32_t v = c.to_pixel(); + int x0 = x < 0 ? 0 : x, y0 = y < 0 ? 0 : y; + int x1 = x + w > bw ? bw : x + w; + int y1 = y + h > bh ? bh : y + h; + for (int row = y0; row < y1; row++) + for (int col = x0; col < x1; col++) + px[row * bw + col] = v; +} + +void px_hline(uint32_t* px, int bw, int bh, + int x, int y, int w, Color c) { + if (y < 0 || y >= bh) return; + uint32_t v = c.to_pixel(); + int x0 = x < 0 ? 0 : x; + int x1 = x + w > bw ? bw : x + w; + for (int col = x0; col < x1; col++) + px[y * bw + col] = v; +} + +void px_vline(uint32_t* px, int bw, int bh, + int x, int y, int h, Color c) { + if (x < 0 || x >= bw) return; + uint32_t v = c.to_pixel(); + int y0 = y < 0 ? 0 : y; + int y1 = y + h > bh ? bh : y + h; + for (int row = y0; row < y1; row++) + px[row * bw + x] = v; +} + +void px_rect(uint32_t* px, int bw, int bh, + int x, int y, int w, int h, Color c) { + px_hline(px, bw, bh, x, y, w, c); + px_hline(px, bw, bh, x, y + h - 1, w, c); + px_vline(px, bw, bh, x, y, h, c); + px_vline(px, bw, bh, x + w - 1, y, h, c); +} + +void px_fill_rounded(uint32_t* px, int bw, int bh, + int x, int y, int w, int h, int r, Color c) { + uint32_t v = c.to_pixel(); + for (int row = 0; row < h; row++) { + int py = y + row; + if (py < 0 || py >= bh) continue; + int inset = 0; + if (row < r) { + int dy = r - 1 - row; + if (r == 3) { + if (dy >= 2) inset = 2; + else if (dy >= 1) inset = 1; + } else { + for (int i = r; i > 0; i--) { + int dx = r - i; + if (dx * dx + dy * dy < r * r) { inset = i; break; } + } + } + } else if (row >= h - r) { + int dy = row - (h - r); + if (r == 3) { + if (dy >= 2) inset = 2; + else if (dy >= 1) inset = 1; + } else { + for (int i = r; i > 0; i--) { + int dx = r - i; + if (dx * dx + dy * dy < r * r) { inset = i; break; } + } + } + } + int x0 = x + inset; + int x1 = x + w - inset; + if (x0 < 0) x0 = 0; + if (x1 > bw) x1 = bw; + for (int col = x0; col < x1; col++) + px[py * bw + col] = v; + } +} + +int str_len(const char* s) { + int n = 0; + while (s[n]) n++; + return n; +} + +void str_cpy(char* dst, const char* src, int max) { + int i = 0; + while (src[i] && i < max - 1) { dst[i] = src[i]; i++; } + dst[i] = '\0'; +} + +bool is_digit(char c) { return c >= '0' && c <= '9'; } +bool is_alpha(char c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); } +char to_upper(char c) { return (c >= 'a' && c <= 'z') ? c - 32 : c; } + +double str_to_double(const char* s, bool* ok) { + *ok = false; + if (!s || !s[0]) return 0; + + int i = 0; + bool neg = false; + if (s[i] == '-') { neg = true; i++; } + else if (s[i] == '+') i++; + + double result = 0; + bool has_digit = false; + while (is_digit(s[i])) { + result = result * 10 + (s[i] - '0'); + has_digit = true; + i++; + } + + if (s[i] == '.') { + i++; + double frac = 0.1; + while (is_digit(s[i])) { + result += (s[i] - '0') * frac; + frac *= 0.1; + has_digit = true; + i++; + } + } + + if (!has_digit) return 0; + while (s[i] == ' ') i++; + if (s[i] != '\0') return 0; + + *ok = true; + return neg ? -result : result; +} + +void double_to_str(char* buf, int max, double v) { + bool neg = false; + if (v < 0) { neg = true; v = -v; } + + long long integer_part = (long long)v; + double frac = v - (double)integer_part; + + if (frac < 0.005) { + int i = 0; + if (neg && integer_part != 0) buf[i++] = '-'; + if (integer_part == 0) { + buf[i++] = '0'; + } else { + char tmp[32]; + int t = 0; + long long n = integer_part; + while (n > 0 && t < 30) { tmp[t++] = '0' + (int)(n % 10); n /= 10; } + while (t > 0 && i < max - 1) buf[i++] = tmp[--t]; + } + buf[i] = '\0'; + return; + } + + long long rounded = (long long)(v * 100 + 0.5); + long long int_part = rounded / 100; + int dec_part = (int)(rounded % 100); + + int i = 0; + if (neg) buf[i++] = '-'; + if (int_part == 0) { + buf[i++] = '0'; + } else { + char tmp[32]; + int t = 0; + long long n = int_part; + while (n > 0 && t < 30) { tmp[t++] = '0' + (int)(n % 10); n /= 10; } + while (t > 0 && i < max - 1) buf[i++] = tmp[--t]; + } + if (i < max - 3) { + buf[i++] = '.'; + buf[i++] = '0' + dec_part / 10; + buf[i++] = '0' + dec_part % 10; + } + buf[i] = '\0'; + + int len = str_len(buf); + if (len > 0) { + bool has_dot = false; + for (int j = 0; j < len; j++) if (buf[j] == '.') has_dot = true; + if (has_dot) { + while (len > 1 && buf[len - 1] == '0') len--; + if (len > 1 && buf[len - 1] == '.') len--; + buf[len] = '\0'; + } + } +} diff --git a/programs/src/spreadsheet/main.cpp b/programs/src/spreadsheet/main.cpp new file mode 100644 index 0000000..10b06f8 --- /dev/null +++ b/programs/src/spreadsheet/main.cpp @@ -0,0 +1,538 @@ +/* + * main.cpp + * Spreadsheet app — global state, hit testing, entry point + * Copyright (c) 2026 Daniel Hammer + */ + +#include "spreadsheet.h" + +// ============================================================================ +// Global state definitions +// ============================================================================ + +int g_win_w = INIT_W; +int g_win_h = INIT_H; + +Cell g_cells[MAX_ROWS][MAX_COLS]; + +int g_sel_col = 0; +int g_sel_row = 0; + +int g_scroll_x = 0; +int g_scroll_y = 0; + +int g_col_widths[MAX_COLS]; + +bool g_editing = false; +char g_edit_buf[CELL_TEXT_MAX]; +int g_edit_len = 0; +int g_edit_cursor = 0; + +bool g_has_selection = false; +int g_anchor_col = 0; +int g_anchor_row = 0; + +ClipCell g_clipboard[CLIP_MAX_CELLS]; +int g_clip_count = 0; +int g_clip_cols = 0; +int g_clip_rows = 0; + +char g_filepath[256] = {}; +bool g_modified = false; + +bool g_pathbar_open = false; +bool g_pathbar_save = false; +char g_pathbar_text[256] = {}; +int g_pathbar_len = 0; +int g_pathbar_cursor = 0; + +TrueTypeFont* g_font = nullptr; +TrueTypeFont* g_font_bold = nullptr; + +bool g_fmt_dropdown_open = false; + +UndoEntry* g_undo[UNDO_MAX + 1]; +int g_undo_count = 0; +int g_undo_pos = 0; + +// ============================================================================ +// Hit testing +// ============================================================================ + +bool hit_cell(int mx, int my, int* out_col, int* out_row) { + int pbh = g_pathbar_open ? PATHBAR_H : 0; + int grid_y = TOOLBAR_H + pbh + FORMULA_BAR_H + COL_HEADER_H; + if (mx < ROW_HEADER_W || my < grid_y) return false; + + int content_x = mx + g_scroll_x; + int content_y = my - grid_y + g_scroll_y; + + *out_row = content_y / ROW_H; + if (*out_row < 0) *out_row = 0; + if (*out_row >= MAX_ROWS) *out_row = MAX_ROWS - 1; + + int x = ROW_HEADER_W; + for (int c = 0; c < MAX_COLS; c++) { + if (content_x >= x - ROW_HEADER_W && content_x < x - ROW_HEADER_W + g_col_widths[c]) { + *out_col = c; + return true; + } + x += g_col_widths[c]; + } + + *out_col = MAX_COLS - 1; + return true; +} + +bool handle_toolbar_click(int mx, int my) { + if (my >= TOOLBAR_H || my < TB_BTN_Y || my >= TB_BTN_Y + TB_BTN_SIZE) return false; + + if (g_fmt_dropdown_open && !(mx >= TB_FMT_X0 && mx < TB_FMT_X1)) { + g_fmt_dropdown_open = false; + } + + if (mx >= TB_OPEN_X0 && mx < TB_OPEN_X1) { + if (g_editing) commit_edit(); + g_pathbar_open = true; + g_pathbar_save = false; + g_pathbar_text[0] = '\0'; + g_pathbar_len = 0; + g_pathbar_cursor = 0; + } else if (mx >= TB_SAVE_X0 && mx < TB_SAVE_X1) { + if (g_editing) commit_edit(); + if (g_filepath[0]) { + save_file(); + } else { + g_pathbar_open = true; + g_pathbar_save = true; + str_cpy(g_pathbar_text, "0:/", 256); + g_pathbar_len = str_len(g_pathbar_text); + g_pathbar_cursor = g_pathbar_len; + } + } else if (mx >= TB_CUT_X0 && mx < TB_CUT_X1) { + if (!g_editing) cut_selection(); + } else if (mx >= TB_COPY_X0 && mx < TB_COPY_X1) { + if (!g_editing) copy_selection(); + } else if (mx >= TB_PASTE_X0 && mx < TB_PASTE_X1) { + if (!g_editing) paste_at_cursor(); + } else if (mx >= TB_BOLD_X0 && mx < TB_BOLD_X1) { + if (!g_editing) apply_bold_toggle(); + } else if (mx >= TB_AL_X0 && mx < TB_AL_X1) { + if (!g_editing) apply_align(ALIGN_LEFT); + } else if (mx >= TB_AC_X0 && mx < TB_AC_X1) { + if (!g_editing) apply_align(ALIGN_CENTER); + } else if (mx >= TB_AR_X0 && mx < TB_AR_X1) { + if (!g_editing) apply_align(ALIGN_RIGHT); + } else if (mx >= TB_FMT_X0 && mx < TB_FMT_X1) { + g_fmt_dropdown_open = !g_fmt_dropdown_open; + } else if (mx >= TB_UNDO_X0 && mx < TB_UNDO_X1) { + undo_do(); + } else if (mx >= TB_REDO_X0 && mx < TB_REDO_X1) { + redo_do(); + } else { + return false; + } + return true; +} + +bool handle_fmt_dropdown_click(int mx, int my) { + if (!g_fmt_dropdown_open) return false; + int dx = TB_FMT_X0; + int dy = TOOLBAR_H; + int dw = 80; + int item_h = 26; + int item_count = 4; + int dh = item_count * item_h + 4; + + if (mx >= dx && mx < dx + dw && my >= dy && my < dy + dh) { + int idx = (my - dy - 2) / item_h; + if (idx >= 0 && idx < item_count) { + apply_format((NumFormat)idx); + } + g_fmt_dropdown_open = false; + return true; + } + g_fmt_dropdown_open = false; + return true; +} + +// ============================================================================ +// Entry point +// ============================================================================ + +extern "C" void _start() { + // Initialize column widths + for (int i = 0; i < MAX_COLS; i++) + g_col_widths[i] = DEF_COL_W; + + // Initialize cells + for (int r = 0; r < MAX_ROWS; r++) + for (int c = 0; c < MAX_COLS; c++) { + g_cells[r][c].input[0] = '\0'; + g_cells[r][c].display[0] = '\0'; + g_cells[r][c].value = 0; + g_cells[r][c].type = CT_EMPTY; + g_cells[r][c].align = ALIGN_AUTO; + g_cells[r][c].fmt = FMT_AUTO; + g_cells[r][c].bold = false; + } + + // Initialize undo pointers + for (int i = 0; i <= UNDO_MAX; i++) g_undo[i] = nullptr; + g_undo_count = 0; + g_undo_pos = 0; + + // Load font + auto load_font = [](const char* path) -> TrueTypeFont* { + TrueTypeFont* f = (TrueTypeFont*)montauk::malloc(sizeof(TrueTypeFont)); + if (!f) return nullptr; + montauk::memset(f, 0, sizeof(TrueTypeFont)); + if (!f->init(path)) { montauk::mfree(f); return nullptr; } + return f; + }; + g_font = load_font("0:/fonts/Roboto-Medium.ttf"); + g_font_bold = load_font("0:/fonts/Roboto-Bold.ttf"); + + // Check for file argument + char args[512] = {}; + int arglen = montauk::getargs(args, sizeof(args)); + if (arglen > 0 && args[0]) { + str_cpy(g_filepath, args, 256); + load_file(g_filepath); + } + + // Build window title + char title[64] = "Spreadsheet"; + if (g_filepath[0]) { + const char* fname = g_filepath; + for (int i = 0; g_filepath[i]; i++) + if (g_filepath[i] == '/') fname = g_filepath + i + 1; + snprintf(title, 64, "%s - Spreadsheet", fname); + } + + // Create window + Montauk::WinCreateResult wres; + if (montauk::win_create(title, INIT_W, INIT_H, &wres) < 0 || wres.id < 0) + montauk::exit(1); + + int win_id = wres.id; + uint32_t* pixels = (uint32_t*)(uintptr_t)wres.pixelVa; + + render(pixels); + montauk::win_present(win_id); + + while (true) { + Montauk::WinEvent ev; + int r = montauk::win_poll(win_id, &ev); + + if (r < 0) break; + + if (r == 0) { + montauk::sleep_ms(16); + continue; + } + + // Close + if (ev.type == 3) break; + + // Resize + if (ev.type == 2) { + g_win_w = ev.resize.w; + g_win_h = ev.resize.h; + pixels = (uint32_t*)(uintptr_t)montauk::win_resize(win_id, g_win_w, g_win_h); + clamp_scroll(); + render(pixels); + montauk::win_present(win_id); + continue; + } + + bool redraw = false; + + // Keyboard + if (ev.type == 0 && ev.key.pressed) { + auto& key = ev.key; + + // Path bar input (intercepts all keys when open) + if (g_pathbar_open) { + if (key.ascii == '\n' || key.ascii == '\r') { + if (g_pathbar_text[0]) { + if (g_pathbar_save) { + str_cpy(g_filepath, g_pathbar_text, 256); + save_file(); + } else { + load_file(g_pathbar_text); + } + } + g_pathbar_open = false; + } else if (key.scancode == 0x01) { + g_pathbar_open = false; + } else if (key.ascii == '\b' || key.scancode == 0x0E) { + if (g_pathbar_cursor > 0) { + for (int i = g_pathbar_cursor - 1; i < g_pathbar_len - 1; i++) + g_pathbar_text[i] = g_pathbar_text[i + 1]; + g_pathbar_len--; + g_pathbar_cursor--; + g_pathbar_text[g_pathbar_len] = '\0'; + } + } else if (key.scancode == 0x4B) { + if (g_pathbar_cursor > 0) g_pathbar_cursor--; + } else if (key.scancode == 0x4D) { + if (g_pathbar_cursor < g_pathbar_len) g_pathbar_cursor++; + } else if (key.ascii >= 32 && key.ascii < 127 && g_pathbar_len < 254) { + for (int i = g_pathbar_len; i > g_pathbar_cursor; i--) + g_pathbar_text[i] = g_pathbar_text[i - 1]; + g_pathbar_text[g_pathbar_cursor] = key.ascii; + g_pathbar_cursor++; + g_pathbar_len++; + g_pathbar_text[g_pathbar_len] = '\0'; + } + redraw = true; + goto done_keys; + } + + // Escape: cancel edit or quit + if (key.scancode == 0x01) { + if (g_editing) { cancel_edit(); redraw = true; } + else break; + } + // Enter: commit edit and move down + else if (key.ascii == '\n' || key.ascii == '\r') { + if (g_editing) commit_edit(); + if (g_sel_row < MAX_ROWS - 1) g_sel_row++; + ensure_sel_visible(); + redraw = true; + } + // Tab: commit and move right + else if (key.ascii == '\t') { + if (g_editing) commit_edit(); + if (key.shift) { + if (g_sel_col > 0) g_sel_col--; + } else { + if (g_sel_col < MAX_COLS - 1) g_sel_col++; + } + ensure_sel_visible(); + redraw = true; + } + // Arrow keys (with Shift = extend selection) + else if (key.scancode == 0x48 && !g_editing) { // Up + if (key.shift) { + if (!g_has_selection) { g_anchor_col = g_sel_col; g_anchor_row = g_sel_row; g_has_selection = true; } + if (g_sel_row > 0) g_sel_row--; + } else { + if (g_sel_row > 0) g_sel_row--; + clear_selection(); + } + ensure_sel_visible(); + redraw = true; + } + else if (key.scancode == 0x50 && !g_editing) { // Down + if (key.shift) { + if (!g_has_selection) { g_anchor_col = g_sel_col; g_anchor_row = g_sel_row; g_has_selection = true; } + if (g_sel_row < MAX_ROWS - 1) g_sel_row++; + } else { + if (g_sel_row < MAX_ROWS - 1) g_sel_row++; + clear_selection(); + } + ensure_sel_visible(); + redraw = true; + } + else if (key.scancode == 0x4B && !g_editing) { // Left + if (key.shift) { + if (!g_has_selection) { g_anchor_col = g_sel_col; g_anchor_row = g_sel_row; g_has_selection = true; } + if (g_sel_col > 0) g_sel_col--; + } else { + if (g_sel_col > 0) g_sel_col--; + clear_selection(); + } + ensure_sel_visible(); + redraw = true; + } + else if (key.scancode == 0x4D && !g_editing) { // Right + if (key.shift) { + if (!g_has_selection) { g_anchor_col = g_sel_col; g_anchor_row = g_sel_row; g_has_selection = true; } + if (g_sel_col < MAX_COLS - 1) g_sel_col++; + } else { + if (g_sel_col < MAX_COLS - 1) g_sel_col++; + clear_selection(); + } + ensure_sel_visible(); + redraw = true; + } + // Backspace + else if (key.ascii == '\b' || key.scancode == 0x0E) { + if (g_editing) { + if (g_edit_cursor > 0) { + for (int i = g_edit_cursor - 1; i < g_edit_len - 1; i++) + g_edit_buf[i] = g_edit_buf[i + 1]; + g_edit_len--; + g_edit_cursor--; + g_edit_buf[g_edit_len] = '\0'; + } + redraw = true; + } else { + undo_push(); + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + for (int r = r0; r <= r1; r++) + for (int c = c0; c <= c1; c++) + g_cells[r][c].input[0] = '\0'; + eval_all_cells(); + g_modified = true; + redraw = true; + } + } + // Delete key + else if (key.scancode == 0x53) { + if (g_editing) { + if (g_edit_cursor < g_edit_len) { + for (int i = g_edit_cursor; i < g_edit_len - 1; i++) + g_edit_buf[i] = g_edit_buf[i + 1]; + g_edit_len--; + g_edit_buf[g_edit_len] = '\0'; + } + redraw = true; + } else { + undo_push(); + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + for (int r = r0; r <= r1; r++) + for (int c = c0; c <= c1; c++) + g_cells[r][c].input[0] = '\0'; + eval_all_cells(); + g_modified = true; + redraw = true; + } + } + // Edit mode arrow keys (cursor movement within formula bar) + else if (key.scancode == 0x4B && g_editing) { + if (g_edit_cursor > 0) g_edit_cursor--; + redraw = true; + } + else if (key.scancode == 0x4D && g_editing) { + if (g_edit_cursor < g_edit_len) g_edit_cursor++; + redraw = true; + } + // Ctrl+B: bold toggle + else if (key.ctrl && (key.ascii == 'b' || key.ascii == 'B' || key.ascii == 2) && !g_editing) { + apply_bold_toggle(); + redraw = true; + } + // Ctrl+Z: undo + else if (key.ctrl && (key.ascii == 'z' || key.ascii == 'Z' || key.ascii == 26) && !g_editing) { + undo_do(); + redraw = true; + } + // Ctrl+Y: redo + else if (key.ctrl && (key.ascii == 'y' || key.ascii == 'Y' || key.ascii == 25) && !g_editing) { + redo_do(); + redraw = true; + } + // Ctrl+C: copy + else if (key.ctrl && (key.ascii == 'c' || key.ascii == 'C' || key.ascii == 3) && !g_editing) { + copy_selection(); + redraw = true; + } + // Ctrl+X: cut + else if (key.ctrl && (key.ascii == 'x' || key.ascii == 'X' || key.ascii == 24) && !g_editing) { + cut_selection(); + redraw = true; + } + // Ctrl+V: paste + else if (key.ctrl && (key.ascii == 'v' || key.ascii == 'V' || key.ascii == 22) && !g_editing) { + paste_at_cursor(); + redraw = true; + } + // Ctrl+S: save (or Save As if no path) + else if (key.ctrl && (key.ascii == 's' || key.ascii == 'S' || key.ascii == 19)) { + if (g_editing) commit_edit(); + if (g_filepath[0]) { + save_file(); + } else { + g_pathbar_open = true; + g_pathbar_save = true; + str_cpy(g_pathbar_text, "0:/", 256); + g_pathbar_len = str_len(g_pathbar_text); + g_pathbar_cursor = g_pathbar_len; + } + redraw = true; + } + // Ctrl+O: open + else if (key.ctrl && (key.ascii == 'o' || key.ascii == 'O' || key.ascii == 15) && !g_editing) { + g_pathbar_open = true; + g_pathbar_save = false; + g_pathbar_text[0] = '\0'; + g_pathbar_len = 0; + g_pathbar_cursor = 0; + redraw = true; + } + // Printable character: start editing or insert + else if (key.ascii >= 32 && key.ascii < 127 && !key.ctrl) { + if (!g_editing) { + clear_selection(); + g_editing = true; + g_edit_buf[0] = key.ascii; + g_edit_buf[1] = '\0'; + g_edit_len = 1; + g_edit_cursor = 1; + } else if (g_edit_len < CELL_TEXT_MAX - 1) { + for (int i = g_edit_len; i > g_edit_cursor; i--) + g_edit_buf[i] = g_edit_buf[i - 1]; + g_edit_buf[g_edit_cursor] = key.ascii; + g_edit_len++; + g_edit_cursor++; + g_edit_buf[g_edit_len] = '\0'; + } + redraw = true; + } + // F2: edit current cell content (append mode) + else if (key.scancode == 0x3C) { + if (!g_editing) start_editing(); + redraw = true; + } + } + done_keys: + + // Mouse + if (ev.type == 1) { + int mx = ev.mouse.x; + int my = ev.mouse.y; + uint8_t btns = ev.mouse.buttons; + uint8_t prev = ev.mouse.prev_buttons; + bool clicked = (btns & 1) && !(prev & 1); + + if (clicked) { + if (handle_fmt_dropdown_click(mx, my)) { + redraw = true; + } + else if (handle_toolbar_click(mx, my)) { + redraw = true; + } + else { + int col, row; + if (hit_cell(mx, my, &col, &row)) { + if (g_editing) commit_edit(); + g_sel_col = col; + g_sel_row = row; + clear_selection(); + g_fmt_dropdown_open = false; + redraw = true; + } + } + } + + if (ev.mouse.scroll != 0) { + g_scroll_y -= ev.mouse.scroll * SCROLL_STEP; + clamp_scroll(); + redraw = true; + } + } + + if (redraw) { + render(pixels); + montauk::win_present(win_id); + } + } + + montauk::win_destroy(win_id); + montauk::exit(0); +} diff --git a/programs/src/spreadsheet/render.cpp b/programs/src/spreadsheet/render.cpp new file mode 100644 index 0000000..8c1dc4b --- /dev/null +++ b/programs/src/spreadsheet/render.cpp @@ -0,0 +1,342 @@ +/* + * render.cpp + * Rendering — toolbar, grid, status bar, overlays + * Copyright (c) 2026 Daniel Hammer + */ + +#include "spreadsheet.h" + +void render(uint32_t* pixels) { + px_fill(pixels, g_win_w, g_win_h, 0, 0, g_win_w, g_win_h, BG_COLOR); + + // ---- Toolbar ---- + px_fill(pixels, g_win_w, g_win_h, 0, 0, g_win_w, TOOLBAR_H, TOOLBAR_BG); + px_hline(pixels, g_win_w, g_win_h, 0, TOOLBAR_H - 1, g_win_w, GRID_COLOR); + + Cell* cur_cell = &g_cells[g_sel_row][g_sel_col]; + + int bx = 4; + auto tb_btn = [&](int w, bool active, const char* label) { + Color bg = active ? TB_BTN_ACTIVE : TB_BTN_BG; + px_fill_rounded(pixels, g_win_w, g_win_h, bx, TB_BTN_Y, w, TB_BTN_SIZE, TB_BTN_RAD, bg); + if (g_font && label[0]) { + TrueTypeFont* f = (active && g_font_bold) ? g_font_bold : g_font; + int tw = f->measure_text(label, HEADER_FONT); + f->draw_to_buffer(pixels, g_win_w, g_win_h, + bx + (w - tw) / 2, TB_BTN_Y + (TB_BTN_SIZE - HEADER_FONT) / 2, + label, HEADER_TEXT, HEADER_FONT); + } + bx += w + 4; + }; + auto tb_sep = [&]() { + px_vline(pixels, g_win_w, g_win_h, bx, 6, TOOLBAR_H - 12, TB_SEP_COLOR); + bx += 8; + }; + + // Open / Save + tb_btn(36, false, "Open"); + tb_btn(36, false, "Save"); + tb_sep(); + + // Cut/Copy/Paste + tb_btn(28, false, "Cut"); + tb_btn(36, false, "Copy"); + tb_btn(36, false, "Paste"); + tb_sep(); + + // Bold + tb_btn(24, cur_cell->bold, "B"); + tb_sep(); + + // Alignment + tb_btn(24, cur_cell->align == ALIGN_LEFT || (cur_cell->align == ALIGN_AUTO && cur_cell->type == CT_TEXT), "L"); + tb_btn(24, cur_cell->align == ALIGN_CENTER, "C"); + tb_btn(24, cur_cell->align == ALIGN_RIGHT || (cur_cell->align == ALIGN_AUTO && (cur_cell->type == CT_NUMBER || cur_cell->type == CT_FORMULA)), "R"); + tb_sep(); + + // Format dropdown + { + const char* fmt_labels[] = { "Auto", ".00", "$", "%" }; + int fi = (int)cur_cell->fmt; + if (fi < 0 || fi > 3) fi = 0; + char fmt_label[16]; + snprintf(fmt_label, 16, "%s v", fmt_labels[fi]); + int fmt_w = 64; + Color bg = g_fmt_dropdown_open ? TB_BTN_ACTIVE : TB_BTN_BG; + px_fill_rounded(pixels, g_win_w, g_win_h, bx, TB_BTN_Y, fmt_w, TB_BTN_SIZE, TB_BTN_RAD, bg); + if (g_font) { + int tw = g_font->measure_text(fmt_label, HEADER_FONT); + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, + bx + (fmt_w - tw) / 2, TB_BTN_Y + (TB_BTN_SIZE - HEADER_FONT) / 2, + fmt_label, HEADER_TEXT, HEADER_FONT); + } + bx += fmt_w + 4; + tb_sep(); + + // Undo/Redo + tb_btn(36, false, "Undo"); + tb_btn(36, false, "Redo"); + } + + // ---- Path bar (Open/Save As) ---- + int pathbar_h = g_pathbar_open ? PATHBAR_H : 0; + if (g_pathbar_open) { + int pby = TOOLBAR_H; + px_fill(pixels, g_win_w, g_win_h, 0, pby, g_win_w, PATHBAR_H, HEADER_BG); + px_hline(pixels, g_win_w, g_win_h, 0, pby + PATHBAR_H - 1, g_win_w, GRID_COLOR); + + const char* label = g_pathbar_save ? "Save as:" : "Open:"; + if (g_font) { + int lw = g_font->measure_text(label, HEADER_FONT); + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, + 8, pby + (PATHBAR_H - HEADER_FONT) / 2, label, HEADER_TEXT, HEADER_FONT); + + int inp_x = 16 + lw; + int inp_w = g_win_w - inp_x - 8; + px_fill(pixels, g_win_w, g_win_h, inp_x, pby + 4, inp_w, PATHBAR_H - 8, BG_COLOR); + px_rect(pixels, g_win_w, g_win_h, inp_x, pby + 4, inp_w, PATHBAR_H - 8, GRID_COLOR); + + if (g_pathbar_text[0]) + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, + inp_x + 4, pby + (PATHBAR_H - FONT_SIZE) / 2, + g_pathbar_text, CELL_TEXT, FONT_SIZE); + + char prefix[256]; + int plen = g_pathbar_cursor < 255 ? g_pathbar_cursor : 255; + for (int i = 0; i < plen; i++) prefix[i] = g_pathbar_text[i]; + prefix[plen] = '\0'; + int cx = inp_x + 4 + g_font->measure_text(prefix, FONT_SIZE); + px_fill(pixels, g_win_w, g_win_h, cx, pby + 6, 2, PATHBAR_H - 12, SELECT_BORDER); + } + } + + // ---- Formula bar ---- + int fbar_y = TOOLBAR_H + pathbar_h; + px_fill(pixels, g_win_w, g_win_h, 0, fbar_y, g_win_w, FORMULA_BAR_H, HEADER_BG); + px_hline(pixels, g_win_w, g_win_h, 0, fbar_y + FORMULA_BAR_H - 1, g_win_w, GRID_COLOR); + + char name_buf[8]; + cell_name(name_buf, g_sel_col, g_sel_row); + int fbar_ty = fbar_y + (FORMULA_BAR_H - HEADER_FONT) / 2; + if (g_font) + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, 8, fbar_ty, name_buf, HEADER_TEXT, HEADER_FONT); + + int sep_x = ROW_HEADER_W + 12; + px_vline(pixels, g_win_w, g_win_h, sep_x, fbar_y + 4, FORMULA_BAR_H - 8, GRID_COLOR); + + { + int fx = sep_x + 10; + const char* display; + if (g_editing) { + display = g_edit_buf; + } else { + display = cur_cell->input; + } + if (g_font && display[0]) + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, fx, fbar_ty, display, CELL_TEXT, FONT_SIZE); + + if (g_editing && g_font) { + char prefix[CELL_TEXT_MAX]; + int plen = g_edit_cursor < CELL_TEXT_MAX - 1 ? g_edit_cursor : CELL_TEXT_MAX - 1; + for (int i = 0; i < plen; i++) prefix[i] = g_edit_buf[i]; + prefix[plen] = '\0'; + int cx = fx + g_font->measure_text(prefix, FONT_SIZE); + px_fill(pixels, g_win_w, g_win_h, cx, fbar_y + 6, 2, FORMULA_BAR_H - 12, SELECT_BORDER); + } + } + + int area_y = TOOLBAR_H + pathbar_h + FORMULA_BAR_H; + + // ---- Column headers ---- + px_fill(pixels, g_win_w, g_win_h, 0, area_y, g_win_w, COL_HEADER_H, HEADER_BG); + px_hline(pixels, g_win_w, g_win_h, 0, area_y + COL_HEADER_H - 1, g_win_w, GRID_COLOR); + + px_fill(pixels, g_win_w, g_win_h, 0, area_y, ROW_HEADER_W, COL_HEADER_H, HEADER_BG); + px_vline(pixels, g_win_w, g_win_h, ROW_HEADER_W - 1, area_y, COL_HEADER_H, GRID_COLOR); + + for (int c = 0; c < MAX_COLS; c++) { + int x = col_x(c) - g_scroll_x; + if (x + g_col_widths[c] <= ROW_HEADER_W) continue; + if (x >= g_win_w) break; + + { + int sc0, sr0, sc1, sr1; + sel_range(&sc0, &sr0, &sc1, &sr1); + if (c >= sc0 && c <= sc1) + px_fill(pixels, g_win_w, g_win_h, x, area_y, g_col_widths[c], COL_HEADER_H, SELECT_FILL); + } + + char label[2] = { (char)('A' + c), '\0' }; + if (g_font) { + int tw = g_font->measure_text(label, HEADER_FONT); + int lx = x + (g_col_widths[c] - tw) / 2; + if (lx >= ROW_HEADER_W) + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, lx, area_y + (COL_HEADER_H - HEADER_FONT) / 2, label, HEADER_TEXT, HEADER_FONT); + } + + px_vline(pixels, g_win_w, g_win_h, x + g_col_widths[c] - 1, area_y, COL_HEADER_H, GRID_COLOR); + } + + // ---- Row headers + grid ---- + int grid_y = area_y + COL_HEADER_H; + int grid_h = g_win_h - TOOLBAR_H - pathbar_h - FORMULA_BAR_H - COL_HEADER_H - STATUS_BAR_H; + + for (int r = 0; r < MAX_ROWS; r++) { + int y = grid_y + r * ROW_H - g_scroll_y; + if (y + ROW_H <= grid_y) continue; + if (y >= grid_y + grid_h) break; + + // Row header + { + int sc0, sr0, sc1, sr1; + sel_range(&sc0, &sr0, &sc1, &sr1); + if (r >= sr0 && r <= sr1) + px_fill(pixels, g_win_w, g_win_h, 0, y, ROW_HEADER_W, ROW_H, SELECT_FILL); + else + px_fill(pixels, g_win_w, g_win_h, 0, y, ROW_HEADER_W, ROW_H, HEADER_BG); + } + + char row_label[8]; + int rv = r + 1; + if (rv >= 100) { row_label[0] = '0' + rv / 100; row_label[1] = '0' + (rv / 10) % 10; row_label[2] = '0' + rv % 10; row_label[3] = '\0'; } + else if (rv >= 10) { row_label[0] = '0' + rv / 10; row_label[1] = '0' + rv % 10; row_label[2] = '\0'; } + else { row_label[0] = '0' + rv; row_label[1] = '\0'; } + + if (g_font) { + int tw = g_font->measure_text(row_label, HEADER_FONT); + int lx = (ROW_HEADER_W - tw) / 2; + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, lx, y + (ROW_H - HEADER_FONT) / 2, row_label, HEADER_TEXT, HEADER_FONT); + } + + px_vline(pixels, g_win_w, g_win_h, ROW_HEADER_W - 1, y, ROW_H, GRID_COLOR); + + // Cells in this row + for (int c = 0; c < MAX_COLS; c++) { + int x = col_x(c) - g_scroll_x; + if (x + g_col_widths[c] <= ROW_HEADER_W) continue; + if (x >= g_win_w) break; + + Cell* cell = &g_cells[r][c]; + + // Selection fill (drawn before text so text is visible) + if (g_has_selection) { + int sc0, sr0, sc1, sr1; + sel_range(&sc0, &sr0, &sc1, &sr1); + if (c >= sc0 && c <= sc1 && r >= sr0 && r <= sr1 && + !(c == g_sel_col && r == g_sel_row)) + px_fill(pixels, g_win_w, g_win_h, x + 1, y + 1, g_col_widths[c] - 2, ROW_H - 2, SELECT_FILL); + } + + // Cell text + if (cell->display[0] && g_font) { + Color col = CELL_TEXT; + if (cell->type == CT_NUMBER || cell->type == CT_FORMULA) col = NUM_COLOR; + if (cell->type == CT_ERROR) col = ERR_COLOR; + + TrueTypeFont* cf = (cell->bold && g_font_bold) ? g_font_bold : g_font; + + CellAlign eff_align = cell->align; + if (eff_align == ALIGN_AUTO) { + eff_align = (cell->type == CT_NUMBER || cell->type == CT_FORMULA) ? ALIGN_RIGHT : ALIGN_LEFT; + } + + int tw = cf->measure_text(cell->display, FONT_SIZE); + int text_x; + if (eff_align == ALIGN_RIGHT) + text_x = x + g_col_widths[c] - tw - 6; + else if (eff_align == ALIGN_CENTER) + text_x = x + (g_col_widths[c] - tw) / 2; + else + text_x = x + 6; + + if (text_x >= ROW_HEADER_W - tw && text_x < g_win_w) + cf->draw_to_buffer(pixels, g_win_w, g_win_h, text_x, y + (ROW_H - FONT_SIZE) / 2, cell->display, col, FONT_SIZE); + } + + // Cell right border + px_vline(pixels, g_win_w, g_win_h, x + g_col_widths[c] - 1, y, ROW_H, GRID_COLOR); + } + + // Row bottom border + px_hline(pixels, g_win_w, g_win_h, ROW_HEADER_W, y + ROW_H - 1, g_win_w - ROW_HEADER_W, GRID_COLOR); + } + + // ---- Selection border ---- + { + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + + int sx = col_x(c0) - g_scroll_x; + int sy_sel = grid_y + r0 * ROW_H - g_scroll_y; + int sw = 0; + for (int c = c0; c <= c1; c++) sw += g_col_widths[c]; + int sh = (r1 - r0 + 1) * ROW_H; + + px_rect(pixels, g_win_w, g_win_h, sx, sy_sel, sw, sh, SELECT_BORDER); + px_rect(pixels, g_win_w, g_win_h, sx + 1, sy_sel + 1, sw - 2, sh - 2, SELECT_BORDER); + } + + // ---- Status bar ---- + int sy = g_win_h - STATUS_BAR_H; + px_fill(pixels, g_win_w, g_win_h, 0, sy, g_win_w, STATUS_BAR_H, STATUS_BG); + + if (g_font) { + char status[128]; + if (g_filepath[0]) { + const char* fname = g_filepath; + for (int i = 0; g_filepath[i]; i++) + if (g_filepath[i] == '/') fname = g_filepath + i + 1; + snprintf(status, 128, " %s%s", fname, g_modified ? " *" : ""); + } else { + snprintf(status, 128, " Untitled%s", g_modified ? " *" : ""); + } + int sty = sy + (STATUS_BAR_H - HEADER_FONT) / 2; + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, 6, sty, status, STATUS_TEXT, HEADER_FONT); + + char right[64]; + if (g_has_selection) { + int c0, r0, c1, r1; + sel_range(&c0, &r0, &c1, &r1); + char n0[8], n1[8]; + cell_name(n0, c0, r0); + cell_name(n1, c1, r1); + int ncells = (c1 - c0 + 1) * (r1 - r0 + 1); + snprintf(right, 64, "%s:%s (%d cells) ", n0, n1, ncells); + } else { + Cell* sel = &g_cells[g_sel_row][g_sel_col]; + char cname[8]; + cell_name(cname, g_sel_col, g_sel_row); + if (sel->type == CT_FORMULA || sel->type == CT_NUMBER) { + char vbuf[32]; + double_to_str(vbuf, 32, sel->value); + snprintf(right, 64, "%s = %s ", cname, vbuf); + } else { + snprintf(right, 64, "%s ", cname); + } + } + int rw = g_font->measure_text(right, HEADER_FONT); + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, g_win_w - rw - 6, sty, right, STATUS_TEXT, HEADER_FONT); + } + + // ---- Format dropdown overlay ---- + if (g_fmt_dropdown_open && g_font) { + int dx = TB_FMT_X0; + int dy = TOOLBAR_H; + int dw = 80; + const char* items[] = { "Auto", "Decimal", "Currency $", "Percent %" }; + int item_count = 4; + int item_h = 26; + int dh = item_count * item_h + 4; + + px_fill(pixels, g_win_w, g_win_h, dx, dy, dw, dh, BG_COLOR); + px_rect(pixels, g_win_w, g_win_h, dx, dy, dw, dh, GRID_COLOR); + + for (int i = 0; i < item_count; i++) { + int iy = dy + 2 + i * item_h; + if ((int)cur_cell->fmt == i) + px_fill(pixels, g_win_w, g_win_h, dx + 2, iy, dw - 4, item_h - 2, SELECT_FILL); + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, + dx + 8, iy + (item_h - HEADER_FONT) / 2, items[i], CELL_TEXT, HEADER_FONT); + } + } +} diff --git a/programs/src/spreadsheet/spreadsheet.h b/programs/src/spreadsheet/spreadsheet.h new file mode 100644 index 0000000..c4edd5f --- /dev/null +++ b/programs/src/spreadsheet/spreadsheet.h @@ -0,0 +1,240 @@ +/* + * spreadsheet.h + * Shared header for the MontaukOS spreadsheet app + * Copyright (c) 2026 Daniel Hammer + */ + +#pragma once + +#include +#include +#include +#include +#include + +extern "C" { +#include +#include +} + +using namespace gui; + +// ============================================================================ +// Constants +// ============================================================================ + +static constexpr int INIT_W = 900; +static constexpr int INIT_H = 600; +static constexpr int TOOLBAR_H = 36; +static constexpr int FORMULA_BAR_H = 36; +static constexpr int COL_HEADER_H = 28; +static constexpr int ROW_HEADER_W = 48; +static constexpr int STATUS_BAR_H = 24; +static constexpr int SCROLL_STEP = 50; +static constexpr int TB_BTN_SIZE = 24; +static constexpr int TB_BTN_Y = 6; +static constexpr int TB_BTN_RAD = 3; + +static constexpr int MAX_COLS = 26; // A-Z +static constexpr int MAX_ROWS = 100; +static constexpr int DEF_COL_W = 100; +static constexpr int ROW_H = 26; + +static constexpr int CELL_TEXT_MAX = 128; +static constexpr int FONT_SIZE = 18; +static constexpr int HEADER_FONT = 16; + +static constexpr Color BG_COLOR = Color::from_rgb(0xFF, 0xFF, 0xFF); +static constexpr Color GRID_COLOR = Color::from_rgb(0xD0, 0xD0, 0xD0); +static constexpr Color HEADER_BG = Color::from_rgb(0xF0, 0xF0, 0xF0); +static constexpr Color HEADER_TEXT = Color::from_rgb(0x55, 0x55, 0x55); +static constexpr Color CELL_TEXT = Color::from_rgb(0x22, 0x22, 0x22); +static constexpr Color SELECT_BORDER = Color::from_rgb(0x36, 0x7B, 0xF0); +static constexpr Color SELECT_FILL = Color::from_rgb(0xD8, 0xE8, 0xFD); +static constexpr Color FORMULA_BG = Color::from_rgb(0xFF, 0xFF, 0xFF); +static constexpr Color FORMULA_BORDER = Color::from_rgb(0xCC, 0xCC, 0xCC); +static constexpr Color STATUS_BG = Color::from_rgb(0x2B, 0x3E, 0x50); +static constexpr Color STATUS_TEXT = Color::from_rgb(0xFF, 0xFF, 0xFF); +static constexpr Color NUM_COLOR = Color::from_rgb(0x10, 0x50, 0x90); +static constexpr Color ERR_COLOR = Color::from_rgb(0xCC, 0x22, 0x22); +static constexpr Color TOOLBAR_BG = Color::from_rgb(0xF5, 0xF5, 0xF5); +static constexpr Color TB_BTN_BG = Color::from_rgb(0xE8, 0xE8, 0xE8); +static constexpr Color TB_BTN_ACTIVE = Color::from_rgb(0xC0, 0xD0, 0xE8); +static constexpr Color TB_SEP_COLOR = Color::from_rgb(0xCC, 0xCC, 0xCC); + +// ============================================================================ +// Types +// ============================================================================ + +enum CellAlign : uint8_t { ALIGN_AUTO = 0, ALIGN_LEFT = 1, ALIGN_CENTER = 2, ALIGN_RIGHT = 3 }; +enum NumFormat : uint8_t { FMT_AUTO = 0, FMT_DECIMAL = 1, FMT_CURRENCY = 2, FMT_PERCENT = 3 }; + +enum CellType : uint8_t { + CT_EMPTY = 0, + CT_TEXT = 1, + CT_NUMBER = 2, + CT_FORMULA = 3, + CT_ERROR = 4, +}; + +struct Cell { + char input[CELL_TEXT_MAX]; // raw user input + char display[CELL_TEXT_MAX]; // computed display string + double value; // numeric value (for formulas/numbers) + CellType type; + CellAlign align; + NumFormat fmt; + bool bold; +}; + +static constexpr int CLIP_MAX_CELLS = 256; +struct ClipCell { + char text[CELL_TEXT_MAX]; + int rel_col; + int rel_row; + CellAlign align; + NumFormat fmt; + bool bold; +}; + +static constexpr int UNDO_MAX = 6; +struct UndoCellData { + char input[CELL_TEXT_MAX]; + CellAlign align; + NumFormat fmt; + bool bold; +}; +struct UndoEntry { + UndoCellData cells[MAX_ROWS][MAX_COLS]; +}; + +static constexpr int PATHBAR_H = 32; + +// ============================================================================ +// Toolbar button positions +// ============================================================================ + +static constexpr int TB_OPEN_X0 = 4, TB_OPEN_X1 = 40; +static constexpr int TB_SAVE_X0 = 44, TB_SAVE_X1 = 80; +static constexpr int TB_CUT_X0 = 92, TB_CUT_X1 = 120; +static constexpr int TB_COPY_X0 = 124, TB_COPY_X1 = 160; +static constexpr int TB_PASTE_X0 = 164, TB_PASTE_X1 = 200; +static constexpr int TB_BOLD_X0 = 212, TB_BOLD_X1 = 236; +static constexpr int TB_AL_X0 = 248, TB_AL_X1 = 272; +static constexpr int TB_AC_X0 = 276, TB_AC_X1 = 300; +static constexpr int TB_AR_X0 = 304, TB_AR_X1 = 328; +static constexpr int TB_FMT_X0 = 340, TB_FMT_X1 = 404; +static constexpr int TB_UNDO_X0 = 416, TB_UNDO_X1 = 452; +static constexpr int TB_REDO_X0 = 456, TB_REDO_X1 = 492; + +// ============================================================================ +// Global state (extern — defined in main.cpp) +// ============================================================================ + +extern int g_win_w, g_win_h; +extern Cell g_cells[MAX_ROWS][MAX_COLS]; +extern int g_sel_col, g_sel_row; +extern int g_scroll_x, g_scroll_y; +extern int g_col_widths[MAX_COLS]; + +extern bool g_editing; +extern char g_edit_buf[CELL_TEXT_MAX]; +extern int g_edit_len; +extern int g_edit_cursor; + +extern bool g_has_selection; +extern int g_anchor_col, g_anchor_row; + +extern ClipCell g_clipboard[CLIP_MAX_CELLS]; +extern int g_clip_count; +extern int g_clip_cols, g_clip_rows; + +extern char g_filepath[256]; +extern bool g_modified; + +extern bool g_pathbar_open; +extern bool g_pathbar_save; +extern char g_pathbar_text[256]; +extern int g_pathbar_len; +extern int g_pathbar_cursor; + +extern TrueTypeFont* g_font; +extern TrueTypeFont* g_font_bold; + +extern bool g_fmt_dropdown_open; + +extern UndoEntry* g_undo[UNDO_MAX + 1]; +extern int g_undo_count; +extern int g_undo_pos; + +// ============================================================================ +// Function declarations — helpers.cpp +// ============================================================================ + +void px_fill(uint32_t* px, int bw, int bh, int x, int y, int w, int h, Color c); +void px_hline(uint32_t* px, int bw, int bh, int x, int y, int w, Color c); +void px_vline(uint32_t* px, int bw, int bh, int x, int y, int h, Color c); +void px_rect(uint32_t* px, int bw, int bh, int x, int y, int w, int h, Color c); +void px_fill_rounded(uint32_t* px, int bw, int bh, int x, int y, int w, int h, int r, Color c); + +int str_len(const char* s); +void str_cpy(char* dst, const char* src, int max); +bool is_digit(char c); +bool is_alpha(char c); +char to_upper(char c); +double str_to_double(const char* s, bool* ok); +void double_to_str(char* buf, int max, double v); + +// ============================================================================ +// Function declarations — formula.cpp +// ============================================================================ + +void eval_cell(int col, int row); +void eval_all_cells(); +int col_x(int col); +int content_width(); +int content_height(); +void cell_name(char* buf, int col, int row); +void format_value(char* buf, int max, double val, NumFormat fmt); + +// ============================================================================ +// Function declarations — fileio.cpp +// ============================================================================ + +void save_file(); +void load_file(const char* path); + +// ============================================================================ +// Function declarations — edit.cpp +// ============================================================================ + +void undo_push(); +void undo_do(); +void redo_do(); +void start_editing(); +void commit_edit(); +void cancel_edit(); +void sel_range(int* c0, int* r0, int* c1, int* r1); +void clear_selection(); +void copy_selection(); +void cut_selection(); +void paste_at_cursor(); +void apply_bold_toggle(); +void apply_align(CellAlign a); +void apply_format(NumFormat f); +void clamp_scroll(); +void ensure_sel_visible(); + +// ============================================================================ +// Function declarations — render.cpp +// ============================================================================ + +void render(uint32_t* pixels); + +// ============================================================================ +// Function declarations — main.cpp +// ============================================================================ + +bool hit_cell(int mx, int my, int* out_col, int* out_row); +bool handle_toolbar_click(int mx, int my); +bool handle_fmt_dropdown_click(int mx, int my); diff --git a/programs/src/spreadsheet/stb_truetype_impl.cpp b/programs/src/spreadsheet/stb_truetype_impl.cpp new file mode 100644 index 0000000..9ce2266 --- /dev/null +++ b/programs/src/spreadsheet/stb_truetype_impl.cpp @@ -0,0 +1,35 @@ +/* + * stb_truetype_impl.cpp + * Single compilation unit for stb_truetype in MontaukOS freestanding environment + * Copyright (c) 2026 Daniel Hammer + */ + +#include +#include +#include +#include +#include + +// Override all stb_truetype dependencies before including the implementation + +#define STBTT_ifloor(x) ((int) stb_floor(x)) +#define STBTT_iceil(x) ((int) stb_ceil(x)) +#define STBTT_sqrt(x) stb_sqrt(x) +#define STBTT_pow(x,y) stb_pow(x,y) +#define STBTT_fmod(x,y) stb_fmod(x,y) +#define STBTT_cos(x) stb_cos(x) +#define STBTT_acos(x) stb_acos(x) +#define STBTT_fabs(x) stb_fabs(x) + +#define STBTT_malloc(x,u) ((void)(u), montauk::malloc(x)) +#define STBTT_free(x,u) ((void)(u), montauk::mfree(x)) + +#define STBTT_memcpy(d,s,n) montauk::memcpy(d,s,n) +#define STBTT_memset(d,v,n) montauk::memset(d,v,n) + +#define STBTT_strlen(x) montauk::slen(x) + +#define STBTT_assert(x) ((void)(x)) + +#define STB_TRUETYPE_IMPLEMENTATION +#include diff --git a/scripts/copy_fonts.sh b/scripts/copy_fonts.sh index 2ac178c..810caf7 100755 --- a/scripts/copy_fonts.sh +++ b/scripts/copy_fonts.sh @@ -16,10 +16,17 @@ FONTS=( "programs/gui/fonts/Roboto/static/Roboto-Regular.ttf" "programs/gui/fonts/Roboto/static/Roboto-Bold.ttf" "programs/gui/fonts/Roboto/static/Roboto-Medium.ttf" + "programs/gui/fonts/Roboto/static/Roboto-Italic.ttf" + "programs/gui/fonts/Roboto/static/Roboto-BoldItalic.ttf" "programs/gui/fonts/JetBrains_Mono/static/JetBrainsMono-Regular.ttf" "programs/gui/fonts/JetBrains_Mono/static/JetBrainsMono-Bold.ttf" "programs/gui/fonts/Noto_Serif/static/NotoSerif-Regular.ttf" "programs/gui/fonts/Noto_Serif/static/NotoSerif-SemiBold.ttf" + "programs/gui/fonts/Noto_Serif/static/NotoSerif-Italic.ttf" + "programs/gui/fonts/Noto_Serif/static/NotoSerif-BoldItalic.ttf" + "programs/gui/fonts/C059/C059-Roman.ttf" + "programs/gui/fonts/C059/C059-Bold.ttf" + "programs/gui/fonts/C059/C059-Italic.ttf" ) copied=0 diff --git a/scripts/copy_icons.sh b/scripts/copy_icons.sh index 03c8357..18a1067 100755 --- a/scripts/copy_icons.sh +++ b/scripts/copy_icons.sh @@ -84,6 +84,7 @@ ICONS=( "panel/weather-none-available.svg" "apps/symbolic/utilities-system-monitor-symbolic.svg" # system monitor "apps/scalable/utilities-system-monitor.svg" # system monitor + "mimetypes/scalable/spreadsheet.svg" ) copied=0