Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
badcf8df5e | ||
|
|
76eaf6c698 | ||
|
|
2fb50a5366 |
No files matched your search
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -4,9 +4,7 @@ Architecture-agnostic kernel panic (BSOD) engine.
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
`core.panic` implements a graphical and serial kernel panic handler for the Asuro kernel. When a fatal condition is detected anywhere in the kernel, `panic` is called with a fault identifier, a human-readable description, and an optional CPU register snapshot. All diagnostic sections (Fault Info, CPU Registers, Process Info, System Info, Call Stack) are mirrored to the serial syslog for headless debugging. If LVGL has been initialised, a graphical Blue Screen of Death (BSOD) is displayed.
|
`core.panic` implements a graphical and serial kernel panic handler for the Asuro kernel. When a fatal condition is detected anywhere in the kernel, `panic` is called with a fault identifier, a human-readable description, and an optional CPU register snapshot. The unit outputs the fault information to the serial syslog for headless debugging and, if LVGL has been initialised, displays a graphical Blue Screen of Death (BSOD).
|
||||||
|
|
||||||
If the panic occurs inside the `gfxd` graphics-rendering process, LVGL state may be corrupt. In this case the unit falls back to rendering the panic screen directly to the VESA framebuffer using `driver.video.DrawString`, `driver.video.DrawHex`, and `driver.video.DrawInt`, bypassing LVGL entirely.
|
|
||||||
|
|
||||||
The BSOD screen and all its LVGL widgets are pre-allocated at `init` time so that no dynamic LVGL allocation is needed when a panic fires. At panic time only label text is updated via `lv_label_set_text`, the pre-built screen is loaded, and a single render pass is forced. Text formatting uses static heap buffers and avoids calling any string library routines that might themselves fault.
|
The BSOD screen and all its LVGL widgets are pre-allocated at `init` time so that no dynamic LVGL allocation is needed when a panic fires. At panic time only label text is updated via `lv_label_set_text`, the pre-built screen is loaded, and a single render pass is forced. Text formatting uses static heap buffers and avoids calling any string library routines that might themselves fault.
|
||||||
|
|
||||||
@@ -18,7 +16,7 @@ If `init` has not been called before a panic (early boot panic), the unit gracef
|
|||||||
|
|
||||||
- `io.syslog` — serial fault output
|
- `io.syslog` — serial fault output
|
||||||
- `debug.tracer` — call-stack capture and freeze
|
- `debug.tracer` — call-stack capture and freeze
|
||||||
- `driver.video` — frame buffer flush and text drawing (DrawString, DrawHex, DrawInt) for VESA fallback
|
- `driver.video` — frame buffer flush
|
||||||
- `memory.heap` — buffer allocation
|
- `memory.heap` — buffer allocation
|
||||||
- `driver.video.lvgl` — LVGL widget creation and rendering
|
- `driver.video.lvgl` — LVGL widget creation and rendering
|
||||||
- `core.version` — version constants for the system info panel
|
- `core.version` — version constants for the system info panel
|
||||||
@@ -26,8 +24,6 @@ If `init` has not been called before a panic (early boot panic), the unit gracef
|
|||||||
- `proc.types` — process state enumeration
|
- `proc.types` — process state enumeration
|
||||||
- `core.fmt.targa` — teapot TGA image decoding
|
- `core.fmt.targa` — teapot TGA image decoding
|
||||||
- `core.gfx.texture` — pixel buffer type
|
- `core.gfx.texture` — pixel buffer type
|
||||||
- `core.strings` — string comparison for gfxd process detection
|
|
||||||
- `core.gfx.color` — TRGB32 colour type for direct pixel drawing
|
|
||||||
|
|
||||||
## Constants
|
## Constants
|
||||||
|
|
||||||
@@ -75,7 +71,7 @@ Creates the hidden BSOD LVGL screen and pre-allocates all widget objects and tex
|
|||||||
```pascal
|
```pascal
|
||||||
procedure panic(fault : pchar; info : pchar; regs : PRegisterSnapshot);
|
procedure panic(fault : pchar; info : pchar; regs : PRegisterSnapshot);
|
||||||
```
|
```
|
||||||
Triggers a kernel panic. Freezes the call-stack tracer, dumps all diagnostic sections (Fault Info, CPU Registers, Process Info, System Info, Call Stack) to syslog, and displays the graphical panic screen. If the crash occurred in the `gfxd` process, LVGL is bypassed and the screen is rendered directly to the VESA framebuffer. Otherwise, if the LVGL BSOD screen is ready, it is used. Then calls the registered halt procedure. Re-entrant calls are detected by a guard flag; if `panic` is called while a panic is already in progress, the system halts immediately without further output.
|
Triggers a kernel panic. Freezes the call-stack tracer, dumps fault information to syslog, and (if the BSOD screen is ready) displays the graphical panic screen. Then calls the registered halt procedure. Re-entrant calls are detected by a guard flag; if `panic` is called while a panic is already in progress, the system halts immediately without further output.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
- `fault` — short fault identifier string, e.g. `'arch.x86.fault.gpf'`.
|
- `fault` — short fault identifier string, e.g. `'arch.x86.fault.gpf'`.
|
||||||
@@ -97,17 +93,3 @@ The teapot image is loaded from a TGA binary linked into the kernel image via an
|
|||||||
All text formatting in the panic path uses a set of internal buffer-writing helpers (`writeHexToBuffer`, `writeStrToBuffer`, `writeIntToBuffer`) that do not call the kernel string library, making the panic path robust against faults in those subsystems.
|
All text formatting in the panic path uses a set of internal buffer-writing helpers (`writeHexToBuffer`, `writeStrToBuffer`, `writeIntToBuffer`) that do not call the kernel string library, making the panic path robust against faults in those subsystems.
|
||||||
|
|
||||||
A compile-time switch `BSOD_ENABLE` gates the display path; if disabled, `panic` only writes to syslog and halts.
|
A compile-time switch `BSOD_ENABLE` gates the display path; if disabled, `panic` only writes to syslog and halts.
|
||||||
|
|
||||||
### gfxd Crash Detection
|
|
||||||
|
|
||||||
When `panic` is triggered, it checks whether the currently executing process is `gfxd` (the graphics daemon). If so, LVGL’s internal state may be corrupt (since `gfxd` drives the LVGL render pipeline), so the unit falls back to `showVESAFallbackScreen`. This procedure fills the screen with the BSOD background colour and renders all diagnostic sections using `driver.video.DrawString`, `driver.video.DrawHex`, and `driver.video.DrawInt` (which draw 8×16 bitmap font glyphs via `DrawPixel`). The layout mirrors the LVGL BSOD but uses a simpler single-column text format.
|
|
||||||
|
|
||||||
### Syslog Output
|
|
||||||
|
|
||||||
All five diagnostic sections are written to syslog in every panic, regardless of the display path:
|
|
||||||
|
|
||||||
1. **Fault Info** — fault identifier and human-readable description
|
|
||||||
2. **CPU Registers** — name/value pairs from the register snapshot
|
|
||||||
3. **Process Info** — name, PID, parent PID, state, and priority of the current process
|
|
||||||
4. **System Info** — kernel version, build date, compiler, revision, heap status, process count, uptime
|
|
||||||
5. **Call Stack** — frozen tracer output
|
|
||||||
@@ -106,12 +106,6 @@ function intToString(i : uint32) : pchar;
|
|||||||
```
|
```
|
||||||
Returns a heap-allocated decimal string representation of `i`.
|
Returns a heap-allocated decimal string representation of `i`.
|
||||||
|
|
||||||
### int64ToString
|
|
||||||
```pascal
|
|
||||||
function int64ToString(i : int64) : pchar;
|
|
||||||
```
|
|
||||||
Returns a heap-allocated decimal string representation of the signed 64-bit integer `i`. Negative values are prefixed with `'-'`.
|
|
||||||
|
|
||||||
### hexStringToInt
|
### hexStringToInt
|
||||||
```pascal
|
```pascal
|
||||||
function hexStringToInt(str : pchar) : uint32;
|
function hexStringToInt(str : pchar) : uint32;
|
||||||
@@ -124,12 +118,6 @@ function boolToString(b : boolean; ext : boolean) : pchar;
|
|||||||
```
|
```
|
||||||
Returns a heap-allocated string for the boolean `b`. When `ext` is `true`, returns `'true'` or `'false'`; when `false`, returns `'1'` or `'0'`.
|
Returns a heap-allocated string for the boolean `b`. When `ext` is `true`, returns `'true'` or `'false'`; when `false`, returns `'1'` or `'0'`.
|
||||||
|
|
||||||
### doubleToStr
|
|
||||||
```pascal
|
|
||||||
function doubleToStr(d : Double) : pchar;
|
|
||||||
```
|
|
||||||
Returns a heap-allocated decimal string representation of the 64-bit floating-point value `d`. Integer values are emitted without a decimal point (e.g. `42`). Fractional values include up to 15 significant digits with trailing zeros removed. Very large or very small values use scientific notation (e.g. `1.5e+20`).
|
|
||||||
|
|
||||||
### UnitTest
|
### UnitTest
|
||||||
```pascal
|
```pascal
|
||||||
procedure UnitTest;
|
procedure UnitTest;
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -13,7 +13,6 @@ This unit is the central video interface for the Asuro kernel. It holds a single
|
|||||||
- `driver.video.gpu`
|
- `driver.video.gpu`
|
||||||
- `driver.video.vesa32` (and other BPP variants)
|
- `driver.video.vesa32` (and other BPP variants)
|
||||||
- `core.hashmap`
|
- `core.hashmap`
|
||||||
- `core.gfx.fonts` — 8×16 bitmap font data for text drawing
|
|
||||||
- `syslog`
|
- `syslog`
|
||||||
|
|
||||||
## Functions and Procedures
|
## Functions and Procedures
|
||||||
@@ -70,34 +69,6 @@ function backBuffer: PVideoBuffer;
|
|||||||
```
|
```
|
||||||
Returns a pointer to `VideoInterface.BackBuffer`.
|
Returns a pointer to `VideoInterface.BackBuffer`.
|
||||||
|
|
||||||
## Text Drawing
|
|
||||||
|
|
||||||
These functions render text directly to the framebuffer using the 8×16 bitmap font from `core.gfx.fonts`. They are useful for panic screens or other contexts where LVGL is unavailable. Each function returns the X coordinate immediately after the last drawn pixel, allowing calls to be chained for inline formatting.
|
|
||||||
|
|
||||||
### DrawChar
|
|
||||||
```pascal
|
|
||||||
function DrawChar(X, Y : uint32; C : char; Color : TRGB32) : uint32;
|
|
||||||
```
|
|
||||||
Draws a single 8×16 bitmap glyph at `(X, Y)` in the given colour. Returns `X + 8`.
|
|
||||||
|
|
||||||
### DrawString
|
|
||||||
```pascal
|
|
||||||
function DrawString(X, Y : uint32; Str : pchar; Color : TRGB32) : uint32;
|
|
||||||
```
|
|
||||||
Draws a null-terminated string starting at `(X, Y)`. Each character advances X by 8 pixels. Returns the X coordinate after the last character.
|
|
||||||
|
|
||||||
### DrawHex
|
|
||||||
```pascal
|
|
||||||
function DrawHex(X, Y : uint32; Value : uint32; Color : TRGB32) : uint32;
|
|
||||||
```
|
|
||||||
Draws a `uint32` as a `0xHHHHHHHH` hex string at `(X, Y)`. Returns the X coordinate after the string.
|
|
||||||
|
|
||||||
### DrawInt
|
|
||||||
```pascal
|
|
||||||
function DrawInt(X, Y : uint32; Value : uint32; Color : TRGB32) : uint32;
|
|
||||||
```
|
|
||||||
Draws an unsigned integer in decimal at `(X, Y)`. Returns the X coordinate after the last digit.
|
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- All drawing operations target the back buffer (`DefaultBuffer`) when double buffering is active. `Flush` transfers the result to the front (visible) buffer.
|
- All drawing operations target the back buffer (`DefaultBuffer`) when double buffering is active. `Flush` transfers the result to the front (visible) buffer.
|
||||||
|
|||||||
+3724
File diff suppressed because it is too large.
Load diff
@@ -136,7 +136,6 @@ nav:
|
|||||||
- MD5: src/core/enc/core.enc.md5.md
|
- MD5: src/core/enc/core.enc.md5.md
|
||||||
- SHA-1: src/core/enc/core.enc.sha1.md
|
- SHA-1: src/core/enc/core.enc.sha1.md
|
||||||
- Formats:
|
- Formats:
|
||||||
- JSON: src/core/fmt/core.fmt.json.md
|
|
||||||
- Targa (TGA): src/core/fmt/core.fmt.targa.md
|
- Targa (TGA): src/core/fmt/core.fmt.targa.md
|
||||||
- Graphics:
|
- Graphics:
|
||||||
- Color: src/core/gfx/core.gfx.color.md
|
- Color: src/core/gfx/core.gfx.color.md
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
{
|
|
||||||
Prog->Ping - ICMP Ping command.
|
|
||||||
|
|
||||||
Sends 10 ICMP echo requests to a host, printing round-trip time
|
|
||||||
for each reply. Sleeps 1 second between pings. Each invocation
|
|
||||||
uses a heap-allocated state record so multiple terminals can app.ping
|
|
||||||
concurrently without corrupting each other.
|
|
||||||
|
|
||||||
@author(Kieron Morris <[email protected]>)
|
|
||||||
}
|
|
||||||
unit app.divzero;
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
io.stdio, debug.tracer;
|
|
||||||
|
|
||||||
procedure init();
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
uses
|
|
||||||
arch.x86.bda, driver.net.types, driver.net.proto.icmp, driver.net.util, core.strings,
|
|
||||||
proc.mgr, core.util, arch.x86.util, memory.heap, svc.gfxd;
|
|
||||||
|
|
||||||
{ ---- Command entry point (runs as a process) ---- }
|
|
||||||
|
|
||||||
procedure run_div0(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
|
|
||||||
begin
|
|
||||||
asm
|
|
||||||
XOR EAX, EAX
|
|
||||||
DIV EAX { this will trigger a divide by zero exception (interrupt 0) }
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure run_pf(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
|
|
||||||
begin
|
|
||||||
asm
|
|
||||||
MOV EAX, $DEADBEEF
|
|
||||||
MOV [EAX], EAX { this will trigger a page fault (interrupt 14) }
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure run_div0_gfxd(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
|
|
||||||
begin
|
|
||||||
svc.gfxd.SHOULD_CRASH := true; { set flag to trigger crash in graphics service }
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure init();
|
|
||||||
begin
|
|
||||||
debug.tracer.push_trace('divzero.init');
|
|
||||||
io.stdio.registerCommand('DIV0', @run_div0, 'Force a divide by zero exception.');
|
|
||||||
io.stdio.registerCommand('PF', @run_pf, 'Force a page fault.');
|
|
||||||
io.stdio.registerCommand('CRASHGFXD', @run_div0_gfxd, 'Force a divide by zero exception in the graphics service.');
|
|
||||||
end;
|
|
||||||
|
|
||||||
end.
|
|
||||||
+13
-34
@@ -28,8 +28,9 @@ uses
|
|||||||
proc.mgr,
|
proc.mgr,
|
||||||
proc.types,
|
proc.types,
|
||||||
core.strings,
|
core.strings,
|
||||||
core.strings.helpers,
|
core.search,
|
||||||
core.gfx.fileicons,
|
core.gfx.fileicons,
|
||||||
|
io.syslog,
|
||||||
debug.tracer,
|
debug.tracer,
|
||||||
core.util,
|
core.util,
|
||||||
arch.x86.util;
|
arch.x86.util;
|
||||||
@@ -227,8 +228,7 @@ procedure fb_rename_cb(e: Plv_event); cdecl; forward;
|
|||||||
procedure fb_rename_ok_cb(e: Plv_event); cdecl; forward;
|
procedure fb_rename_ok_cb(e: Plv_event); cdecl; forward;
|
||||||
procedure fb_newfile_cb(e: Plv_event); cdecl; forward;
|
procedure fb_newfile_cb(e: Plv_event); cdecl; forward;
|
||||||
procedure fb_newfile_ok_cb(e: Plv_event); cdecl; forward;
|
procedure fb_newfile_ok_cb(e: Plv_event); cdecl; forward;
|
||||||
procedure fb_newfile_opened(error: TError; userdata: pointer); forward;
|
procedure fb_newfile_done(error: TError; userdata: pointer); forward;
|
||||||
procedure fb_newfile_written(error: TError; userdata: pointer); forward;
|
|
||||||
procedure fb_newfile_done_timer(tmr: Plv_timer); cdecl; forward;
|
procedure fb_newfile_done_timer(tmr: Plv_timer); cdecl; forward;
|
||||||
{ Phase 7 — context menu }
|
{ Phase 7 — context menu }
|
||||||
procedure fb_row_long_press_cb(e: Plv_event); cdecl; forward;
|
procedure fb_row_long_press_cb(e: Plv_event); cdecl; forward;
|
||||||
@@ -557,10 +557,10 @@ end;
|
|||||||
procedure navigate_to(state: PFileBrowserState; newDir: pchar);
|
procedure navigate_to(state: PFileBrowserState; newDir: pchar);
|
||||||
begin
|
begin
|
||||||
{ Unwatch old directory }
|
{ Unwatch old directory }
|
||||||
if state^.watch_id <> 0 then begin
|
{if state^.watch_id <> 0 then begin
|
||||||
driver.storage.vfs.UnwatchDirectory(state^.watch_id);
|
driver.storage.vfs.UnwatchDirectory(state^.watch_id);
|
||||||
state^.watch_id := 0;
|
state^.watch_id := 0;
|
||||||
end;
|
end;}
|
||||||
push_history(state, newDir);
|
push_history(state, newDir);
|
||||||
if state^.cur_path <> nil then kfree(void(state^.cur_path));
|
if state^.cur_path <> nil then kfree(void(state^.cur_path));
|
||||||
state^.cur_path := stringCopy(newDir);
|
state^.cur_path := stringCopy(newDir);
|
||||||
@@ -568,8 +568,8 @@ begin
|
|||||||
build_breadcrumbs(state);
|
build_breadcrumbs(state);
|
||||||
if state^.tab_bar <> nil then rebuild_tab_bar(state);
|
if state^.tab_bar <> nil then rebuild_tab_bar(state);
|
||||||
{ Watch new directory }
|
{ Watch new directory }
|
||||||
state^.watch_dirty := false;
|
{state^.watch_dirty := false;
|
||||||
state^.watch_id := driver.storage.vfs.WatchDirectory(newDir, @fb_watch_cb, state);
|
state^.watch_id := driver.storage.vfs.WatchDirectory(newDir, @fb_watch_cb, state);}
|
||||||
schedule_refresh(state);
|
schedule_refresh(state);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -637,8 +637,6 @@ begin
|
|||||||
ctx := PFBCollectCtx(ud);
|
ctx := PFBCollectCtx(ud);
|
||||||
obj := PVFSObject(data);
|
obj := PVFSObject(data);
|
||||||
if (ctx = nil) or (obj = nil) then exit;
|
if (ctx = nil) or (obj = nil) then exit;
|
||||||
{ Always hide '.' and '..' entries }
|
|
||||||
if stringEquals(key, '.') or stringEquals(key, '..') then exit;
|
|
||||||
case obj^.ObjectType of
|
case obj^.ObjectType of
|
||||||
otVDIRECTORY, otDRIVE, otDIRECTORY, otMOUNT, otSYMLINK:
|
otVDIRECTORY, otDRIVE, otDIRECTORY, otMOUNT, otSYMLINK:
|
||||||
if ctx^.dir_count < ENTRY_MAX then begin
|
if ctx^.dir_count < ENTRY_MAX then begin
|
||||||
@@ -1845,38 +1843,20 @@ begin
|
|||||||
nfctx^.err := eNone;
|
nfctx^.err := eNone;
|
||||||
nfctx^.handle := 0;
|
nfctx^.handle := 0;
|
||||||
driver.storage.vfs.OpenFileAsync(fp, omCreate, nfctx^.handle,
|
driver.storage.vfs.OpenFileAsync(fp, omCreate, nfctx^.handle,
|
||||||
@nfctx^.err, @fb_newfile_opened, nfctx);
|
@nfctx^.err, @fb_newfile_done, nfctx);
|
||||||
kfree(void(fp));
|
kfree(void(fp));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Async step 1: file descriptor opened — now write 0 bytes to create dir entry }
|
{ Async completion for file creation }
|
||||||
procedure fb_newfile_opened(error: TError; userdata: pointer);
|
procedure fb_newfile_done(error: TError; userdata: pointer);
|
||||||
var
|
var
|
||||||
nfctx : PNewFileCtx;
|
nfctx : PNewFileCtx;
|
||||||
begin
|
begin
|
||||||
nfctx := PNewFileCtx(userdata);
|
nfctx := PNewFileCtx(userdata);
|
||||||
if nfctx = nil then exit;
|
if nfctx = nil then exit;
|
||||||
nfctx^.err := error;
|
nfctx^.err := error;
|
||||||
if (error = eNone) and (nfctx^.handle <> 0) then begin
|
{ Close the handle if it was opened successfully }
|
||||||
{ WriteFileAsync needs a non-nil buffer; Length=0 so it is never read }
|
if (error = eNone) and (nfctx^.handle <> 0) then
|
||||||
driver.storage.vfs.WriteFileAsync(nfctx^.handle, 0,
|
|
||||||
puint8(@nfctx^.err), 0, @fb_newfile_written, nfctx);
|
|
||||||
end else begin
|
|
||||||
if nfctx^.handle <> 0 then
|
|
||||||
driver.storage.vfs.CloseFile(nfctx^.handle);
|
|
||||||
lv_timer_create(@fb_newfile_done_timer, 1, nfctx);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ Async step 2: write complete — close handle and schedule UI refresh }
|
|
||||||
procedure fb_newfile_written(error: TError; userdata: pointer);
|
|
||||||
var
|
|
||||||
nfctx : PNewFileCtx;
|
|
||||||
begin
|
|
||||||
nfctx := PNewFileCtx(userdata);
|
|
||||||
if nfctx = nil then exit;
|
|
||||||
if error <> eNone then nfctx^.err := error;
|
|
||||||
if nfctx^.handle <> 0 then
|
|
||||||
driver.storage.vfs.CloseFile(nfctx^.handle);
|
driver.storage.vfs.CloseFile(nfctx^.handle);
|
||||||
lv_timer_create(@fb_newfile_done_timer, 1, nfctx);
|
lv_timer_create(@fb_newfile_done_timer, 1, nfctx);
|
||||||
end;
|
end;
|
||||||
@@ -3077,7 +3057,6 @@ begin
|
|||||||
makeToolBtn(toolbar, SYM_DIRECTORY, 32, state, @fb_newfolder_cb);
|
makeToolBtn(toolbar, SYM_DIRECTORY, 32, state, @fb_newfolder_cb);
|
||||||
makeToolBtn(toolbar, SYM_FILE, 32, state, @fb_newfile_cb);
|
makeToolBtn(toolbar, SYM_FILE, 32, state, @fb_newfile_cb);
|
||||||
makeToolBtn(toolbar, SYM_EDIT, 32, state, @fb_rename_cb);
|
makeToolBtn(toolbar, SYM_EDIT, 32, state, @fb_rename_cb);
|
||||||
makeToolBtn(toolbar, SYM_TRASH, 32, state, @fb_delete_cb);
|
|
||||||
|
|
||||||
{ Filter input }
|
{ Filter input }
|
||||||
state^.filter_ta := lv_textarea_create(toolbar);
|
state^.filter_ta := lv_textarea_create(toolbar);
|
||||||
@@ -3226,7 +3205,7 @@ begin
|
|||||||
rebuild_tab_bar(state);
|
rebuild_tab_bar(state);
|
||||||
|
|
||||||
{ Create 500ms poll timer for directory watch notifications }
|
{ Create 500ms poll timer for directory watch notifications }
|
||||||
state^.watch_timer := lv_timer_create(@fb_watch_poll_timer, 500, state);
|
{state^.watch_timer := lv_timer_create(@fb_watch_poll_timer, 500, state);}
|
||||||
|
|
||||||
{ Default bookmarks }
|
{ Default bookmarks }
|
||||||
add_bookmark_entry(state, '/');
|
add_bookmark_entry(state, '/');
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ uses
|
|||||||
driver.video.lvgl,
|
driver.video.lvgl,
|
||||||
driver.storage.types,
|
driver.storage.types,
|
||||||
core.strings,
|
core.strings,
|
||||||
core.strings.helpers,
|
core.search,
|
||||||
io.syslog,
|
io.syslog,
|
||||||
debug.tracer,
|
debug.tracer,
|
||||||
core.util, arch.x86.util,
|
core.util, arch.x86.util,
|
||||||
|
|||||||
+1
-3
@@ -33,8 +33,7 @@ uses
|
|||||||
//dispatch
|
//dispatch
|
||||||
driver.storage.filedispatch,
|
driver.storage.filedispatch,
|
||||||
//wasm
|
//wasm
|
||||||
app.wasm.runner,
|
app.wasm.runner;
|
||||||
app.divzero;
|
|
||||||
|
|
||||||
{ Initialize all baked-in programs }
|
{ Initialize all baked-in programs }
|
||||||
procedure init();
|
procedure init();
|
||||||
@@ -85,7 +84,6 @@ begin
|
|||||||
{ WASM & remaining apps }
|
{ WASM & remaining apps }
|
||||||
app.wasm.runner.init();
|
app.wasm.runner.init();
|
||||||
app.setres.init();
|
app.setres.init();
|
||||||
app.divzero.init();
|
|
||||||
app.filebrowser.init();
|
app.filebrowser.init();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ uses
|
|||||||
driver.storage.types,
|
driver.storage.types,
|
||||||
driver.storage.filedispatch,
|
driver.storage.filedispatch,
|
||||||
core.strings,
|
core.strings,
|
||||||
core.strings.helpers,
|
core.search,
|
||||||
io.syslog,
|
io.syslog,
|
||||||
io.stdio,
|
io.stdio,
|
||||||
debug.tracer,
|
debug.tracer,
|
||||||
|
|||||||
+3
-6
@@ -84,7 +84,7 @@ uses
|
|||||||
driver.storage.mgr,
|
driver.storage.mgr,
|
||||||
driver.storage.test,
|
driver.storage.test,
|
||||||
core.strings,
|
core.strings,
|
||||||
core.strings.helpers,
|
core.search,
|
||||||
io.syslog,
|
io.syslog,
|
||||||
driver.exp.testdriver,
|
driver.exp.testdriver,
|
||||||
proc.testprocs,
|
proc.testprocs,
|
||||||
@@ -118,8 +118,7 @@ uses
|
|||||||
wasm.test,
|
wasm.test,
|
||||||
wasm.test.framework,
|
wasm.test.framework,
|
||||||
driver.video.windows,
|
driver.video.windows,
|
||||||
driver.bus.usb.xhci,
|
driver.bus.usb.xhci;
|
||||||
core.fmt.json;
|
|
||||||
|
|
||||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||||
|
|
||||||
@@ -329,7 +328,7 @@ begin
|
|||||||
{ Run unit tests }
|
{ Run unit tests }
|
||||||
boot.splash.update(65, 'Running test suite...');
|
boot.splash.update(65, 'Running test suite...');
|
||||||
core.strings.UnitTest;
|
core.strings.UnitTest;
|
||||||
core.strings.helpers.UnitTest;
|
core.search.UnitTest;
|
||||||
driver.bus.usb.types.UnitTest;
|
driver.bus.usb.types.UnitTest;
|
||||||
driver.bus.usb.core.UnitTest;
|
driver.bus.usb.core.UnitTest;
|
||||||
boot.splash.update(70, 'Running test suite...');
|
boot.splash.update(70, 'Running test suite...');
|
||||||
@@ -355,11 +354,9 @@ begin
|
|||||||
core.ds.prio.UnitTest;
|
core.ds.prio.UnitTest;
|
||||||
driver.storage.vfs.UnitTest;
|
driver.storage.vfs.UnitTest;
|
||||||
driver.storage.test.UnitTest;
|
driver.storage.test.UnitTest;
|
||||||
boot.splash.update(95, 'Running test suite...');
|
|
||||||
core.enc.fnv1a.UnitTest;
|
core.enc.fnv1a.UnitTest;
|
||||||
core.enc.djb2.UnitTest;
|
core.enc.djb2.UnitTest;
|
||||||
core.ds.bloom.UnitTest;
|
core.ds.bloom.UnitTest;
|
||||||
core.fmt.json.UnitTest;
|
|
||||||
|
|
||||||
{ Initialize driver.video.desktop environment }
|
{ Initialize driver.video.desktop environment }
|
||||||
boot.splash.update(100, 'Booting desktop...');
|
boot.splash.update(100, 'Booting desktop...');
|
||||||
|
|||||||
+6
-240
File diff suppressed because it is too large.
Load diff
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
Core->StringHelpers - Reusable file-oriented search, sort, and format utilities.
|
Core->Search - Reusable file-oriented search, sort, and format utilities.
|
||||||
|
|
||||||
Provides:
|
Provides:
|
||||||
- getFileExtension: zero-copy extension extraction
|
- getFileExtension: zero-copy extension extraction
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
@author(Aaron Hance <ah@aaronhance.me>)
|
@author(Aaron Hance <ah@aaronhance.me>)
|
||||||
}
|
}
|
||||||
unit core.strings.helpers;
|
unit core.search;
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -14,7 +14,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
core.strings,
|
core.strings,
|
||||||
core.strings.helpers;
|
core.search;
|
||||||
|
|
||||||
const
|
const
|
||||||
{ File-type icon PUA constants (U+E000..E078) — rendered by asuro_icons_* }
|
{ File-type icon PUA constants (U+E000..E078) — rendered by asuro_icons_* }
|
||||||
|
|||||||
Loaded 20 of 27 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user