mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
Stage 21
This commit is contained in:
112
.VSCodeCounter/2026-04-11_19-00-52/details.md
Normal file
112
.VSCodeCounter/2026-04-11_19-00-52/details.md
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
# Details
|
||||||
|
|
||||||
|
Date : 2026-04-11 19:00:52
|
||||||
|
|
||||||
|
Directory d:\\Projects\\C\\cleonos
|
||||||
|
|
||||||
|
Total : 97 files, 7635 codes, 8 comments, 1894 blanks, all 9537 lines
|
||||||
|
|
||||||
|
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
|
|
||||||
|
## Files
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
| :--- | :--- | ---: | ---: | ---: | ---: |
|
||||||
|
| [CMakeLists.txt](/CMakeLists.txt) | CMake | 535 | 0 | 75 | 610 |
|
||||||
|
| [Makefile](/Makefile) | Makefile | 100 | 0 | 22 | 122 |
|
||||||
|
| [cleonos/c/apps/elfrunner\_kmain.c](/cleonos/c/apps/elfrunner_kmain.c) | C | 6 | 0 | 3 | 9 |
|
||||||
|
| [cleonos/c/apps/elfrunner\_main.c](/cleonos/c/apps/elfrunner_main.c) | C | 6 | 0 | 3 | 9 |
|
||||||
|
| [cleonos/c/apps/memc\_kmain.c](/cleonos/c/apps/memc_kmain.c) | C | 6 | 0 | 3 | 9 |
|
||||||
|
| [cleonos/c/apps/memc\_main.c](/cleonos/c/apps/memc_main.c) | C | 8 | 0 | 3 | 11 |
|
||||||
|
| [cleonos/c/apps/shell\_main.c](/cleonos/c/apps/shell_main.c) | C | 396 | 0 | 124 | 520 |
|
||||||
|
| [cleonos/c/apps/ttydrv\_main.c](/cleonos/c/apps/ttydrv_main.c) | C | 6 | 0 | 3 | 9 |
|
||||||
|
| [cleonos/c/include/cleonos\_rust\_bridge.h](/cleonos/c/include/cleonos_rust_bridge.h) | C++ | 6 | 0 | 4 | 10 |
|
||||||
|
| [cleonos/c/include/cleonos\_syscall.h](/cleonos/c/include/cleonos_syscall.h) | C++ | 60 | 0 | 5 | 65 |
|
||||||
|
| [cleonos/c/src/runtime.c](/cleonos/c/src/runtime.c) | C | 11 | 0 | 6 | 17 |
|
||||||
|
| [cleonos/c/src/syscall.c](/cleonos/c/src/syscall.c) | C | 89 | 0 | 29 | 118 |
|
||||||
|
| [cleonos/c/stub.c](/cleonos/c/stub.c) | C | 3 | 4 | 2 | 9 |
|
||||||
|
| [cleonos/rust/src/lib.rs](/cleonos/rust/src/lib.rs) | Rust | 23 | 0 | 9 | 32 |
|
||||||
|
| [clks/arch/aarch64/boot.c](/clks/arch/aarch64/boot.c) | C | 6 | 0 | 1 | 7 |
|
||||||
|
| [clks/arch/x86\_64/boot.c](/clks/arch/x86_64/boot.c) | C | 6 | 0 | 1 | 7 |
|
||||||
|
| [clks/arch/x86\_64/interrupt\_stubs.S](/clks/arch/x86_64/interrupt_stubs.S) | Go Assembly | 108 | 0 | 12 | 120 |
|
||||||
|
| [clks/drivers/serial/serial.c](/clks/drivers/serial/serial.c) | C | 52 | 0 | 16 | 68 |
|
||||||
|
| [clks/drivers/video/font8x8.c](/clks/drivers/video/font8x8.c) | C | 67 | 0 | 8 | 75 |
|
||||||
|
| [clks/drivers/video/font8x8.h](/clks/drivers/video/font8x8.h) | C++ | 5 | 0 | 3 | 8 |
|
||||||
|
| [clks/drivers/video/framebuffer.c](/clks/drivers/video/framebuffer.c) | C | 162 | 0 | 42 | 204 |
|
||||||
|
| [clks/drivers/video/psf\_font.c](/clks/drivers/video/psf_font.c) | C | 159 | 0 | 35 | 194 |
|
||||||
|
| [clks/drivers/video/psf\_font.h](/clks/drivers/video/psf_font.h) | C++ | 14 | 0 | 4 | 18 |
|
||||||
|
| [clks/include/clks/boot.h](/clks/include/clks/boot.h) | C++ | 11 | 0 | 4 | 15 |
|
||||||
|
| [clks/include/clks/compiler.h](/clks/include/clks/compiler.h) | C++ | 13 | 0 | 4 | 17 |
|
||||||
|
| [clks/include/clks/cpu.h](/clks/include/clks/cpu.h) | C++ | 20 | 0 | 4 | 24 |
|
||||||
|
| [clks/include/clks/driver.h](/clks/include/clks/driver.h) | C++ | 28 | 0 | 8 | 36 |
|
||||||
|
| [clks/include/clks/elf64.h](/clks/include/clks/elf64.h) | C++ | 27 | 0 | 8 | 35 |
|
||||||
|
| [clks/include/clks/elfrunner.h](/clks/include/clks/elfrunner.h) | C++ | 6 | 0 | 3 | 9 |
|
||||||
|
| [clks/include/clks/exec.h](/clks/include/clks/exec.h) | C++ | 8 | 0 | 3 | 11 |
|
||||||
|
| [clks/include/clks/framebuffer.h](/clks/include/clks/framebuffer.h) | C++ | 20 | 0 | 4 | 24 |
|
||||||
|
| [clks/include/clks/fs.h](/clks/include/clks/fs.h) | C++ | 23 | 0 | 7 | 30 |
|
||||||
|
| [clks/include/clks/heap.h](/clks/include/clks/heap.h) | C++ | 15 | 0 | 4 | 19 |
|
||||||
|
| [clks/include/clks/interrupts.h](/clks/include/clks/interrupts.h) | C++ | 6 | 0 | 3 | 9 |
|
||||||
|
| [clks/include/clks/kelf.h](/clks/include/clks/kelf.h) | C++ | 9 | 0 | 5 | 14 |
|
||||||
|
| [clks/include/clks/kernel.h](/clks/include/clks/kernel.h) | C++ | 4 | 0 | 2 | 6 |
|
||||||
|
| [clks/include/clks/keyboard.h](/clks/include/clks/keyboard.h) | C++ | 19 | 0 | 5 | 24 |
|
||||||
|
| [clks/include/clks/limine.h](/clks/include/clks/limine.h) | C++ | 132 | 0 | 24 | 156 |
|
||||||
|
| [clks/include/clks/log.h](/clks/include/clks/log.h) | C++ | 12 | 0 | 4 | 16 |
|
||||||
|
| [clks/include/clks/pmm.h](/clks/include/clks/pmm.h) | C++ | 16 | 0 | 5 | 21 |
|
||||||
|
| [clks/include/clks/ramdisk.h](/clks/include/clks/ramdisk.h) | C++ | 17 | 0 | 8 | 25 |
|
||||||
|
| [clks/include/clks/scheduler.h](/clks/include/clks/scheduler.h) | C++ | 18 | 0 | 5 | 23 |
|
||||||
|
| [clks/include/clks/serial.h](/clks/include/clks/serial.h) | C++ | 6 | 0 | 2 | 8 |
|
||||||
|
| [clks/include/clks/service.h](/clks/include/clks/service.h) | C++ | 31 | 0 | 8 | 39 |
|
||||||
|
| [clks/include/clks/shell.h](/clks/include/clks/shell.h) | C++ | 7 | 0 | 3 | 10 |
|
||||||
|
| [clks/include/clks/string.h](/clks/include/clks/string.h) | C++ | 9 | 0 | 3 | 12 |
|
||||||
|
| [clks/include/clks/syscall.h](/clks/include/clks/syscall.h) | C++ | 34 | 0 | 4 | 38 |
|
||||||
|
| [clks/include/clks/task.h](/clks/include/clks/task.h) | C++ | 24 | 0 | 7 | 31 |
|
||||||
|
| [clks/include/clks/tty.h](/clks/include/clks/tty.h) | C++ | 12 | 0 | 5 | 17 |
|
||||||
|
| [clks/include/clks/types.h](/clks/include/clks/types.h) | C++ | 17 | 0 | 6 | 23 |
|
||||||
|
| [clks/include/clks/userland.h](/clks/include/clks/userland.h) | C++ | 11 | 0 | 4 | 15 |
|
||||||
|
| [clks/kernel/driver.c](/clks/kernel/driver.c) | C | 163 | 0 | 48 | 211 |
|
||||||
|
| [clks/kernel/elf64.c](/clks/kernel/elf64.c) | C | 170 | 0 | 52 | 222 |
|
||||||
|
| [clks/kernel/elfrunner.c](/clks/kernel/elfrunner.c) | C | 30 | 0 | 8 | 38 |
|
||||||
|
| [clks/kernel/exec.c](/clks/kernel/exec.c) | C | 51 | 0 | 15 | 66 |
|
||||||
|
| [clks/kernel/fs.c](/clks/kernel/fs.c) | C | 698 | 0 | 220 | 918 |
|
||||||
|
| [clks/kernel/heap.c](/clks/kernel/heap.c) | C | 134 | 0 | 42 | 176 |
|
||||||
|
| [clks/kernel/interrupts.c](/clks/kernel/interrupts.c) | C | 298 | 0 | 43 | 341 |
|
||||||
|
| [clks/kernel/kelf.c](/clks/kernel/kelf.c) | C | 203 | 1 | 53 | 257 |
|
||||||
|
| [clks/kernel/keyboard.c](/clks/kernel/keyboard.c) | C | 199 | 0 | 42 | 241 |
|
||||||
|
| [clks/kernel/kmain.c](/clks/kernel/kmain.c) | C | 180 | 1 | 50 | 231 |
|
||||||
|
| [clks/kernel/limine\_requests.c](/clks/kernel/limine_requests.c) | C | 76 | 0 | 26 | 102 |
|
||||||
|
| [clks/kernel/log.c](/clks/kernel/log.c) | C | 79 | 0 | 17 | 96 |
|
||||||
|
| [clks/kernel/pmm.c](/clks/kernel/pmm.c) | C | 82 | 0 | 23 | 105 |
|
||||||
|
| [clks/kernel/ramdisk.c](/clks/kernel/ramdisk.c) | C | 172 | 0 | 50 | 222 |
|
||||||
|
| [clks/kernel/scheduler.c](/clks/kernel/scheduler.c) | C | 127 | 0 | 42 | 169 |
|
||||||
|
| [clks/kernel/service.c](/clks/kernel/service.c) | C | 113 | 0 | 34 | 147 |
|
||||||
|
| [clks/kernel/shell.c](/clks/kernel/shell.c) | C | 860 | 0 | 230 | 1,090 |
|
||||||
|
| [clks/kernel/syscall.c](/clks/kernel/syscall.c) | C | 243 | 0 | 50 | 293 |
|
||||||
|
| [clks/kernel/tty.c](/clks/kernel/tty.c) | C | 275 | 0 | 77 | 352 |
|
||||||
|
| [clks/kernel/userland.c](/clks/kernel/userland.c) | C | 113 | 0 | 32 | 145 |
|
||||||
|
| [clks/lib/string.c](/clks/lib/string.c) | C | 54 | 0 | 16 | 70 |
|
||||||
|
| [cmake/check\_tools.cmake](/cmake/check_tools.cmake) | CMake | 32 | 0 | 6 | 38 |
|
||||||
|
| [cmake/log.cmake](/cmake/log.cmake) | CMake | 30 | 0 | 6 | 36 |
|
||||||
|
| [cmake/log\_emit.cmake](/cmake/log_emit.cmake) | CMake | 23 | 0 | 6 | 29 |
|
||||||
|
| [cmake/setup\_limine.cmake](/cmake/setup_limine.cmake) | CMake | 100 | 0 | 18 | 118 |
|
||||||
|
| [configs/limine.conf](/configs/limine.conf) | Properties | 6 | 0 | 1 | 7 |
|
||||||
|
| [docs/README.md](/docs/README.md) | Markdown | 22 | 0 | 2 | 24 |
|
||||||
|
| [docs/stage1.md](/docs/stage1.md) | Markdown | 41 | 0 | 5 | 46 |
|
||||||
|
| [docs/stage10.md](/docs/stage10.md) | Markdown | 34 | 0 | 6 | 40 |
|
||||||
|
| [docs/stage11.md](/docs/stage11.md) | Markdown | 36 | 0 | 5 | 41 |
|
||||||
|
| [docs/stage12.md](/docs/stage12.md) | Markdown | 40 | 0 | 6 | 46 |
|
||||||
|
| [docs/stage13.md](/docs/stage13.md) | Markdown | 34 | 0 | 6 | 40 |
|
||||||
|
| [docs/stage14.md](/docs/stage14.md) | Markdown | 44 | 0 | 8 | 52 |
|
||||||
|
| [docs/stage15.md](/docs/stage15.md) | Markdown | 47 | 0 | 7 | 54 |
|
||||||
|
| [docs/stage2.md](/docs/stage2.md) | Markdown | 30 | 0 | 5 | 35 |
|
||||||
|
| [docs/stage20.md](/docs/stage20.md) | Markdown | 46 | 0 | 6 | 52 |
|
||||||
|
| [docs/stage21.md](/docs/stage21.md) | Markdown | 72 | 0 | 7 | 79 |
|
||||||
|
| [docs/stage3.md](/docs/stage3.md) | Markdown | 29 | 0 | 5 | 34 |
|
||||||
|
| [docs/stage4.md](/docs/stage4.md) | Markdown | 30 | 0 | 5 | 35 |
|
||||||
|
| [docs/stage5.md](/docs/stage5.md) | Markdown | 29 | 0 | 5 | 34 |
|
||||||
|
| [docs/stage6.md](/docs/stage6.md) | Markdown | 30 | 0 | 6 | 36 |
|
||||||
|
| [docs/stage7.md](/docs/stage7.md) | Markdown | 34 | 0 | 6 | 40 |
|
||||||
|
| [docs/stage8.md](/docs/stage8.md) | Markdown | 31 | 0 | 6 | 37 |
|
||||||
|
| [docs/stage9.md](/docs/stage9.md) | Markdown | 31 | 0 | 6 | 37 |
|
||||||
|
| [ramdisk/shell/init.cmd](/ramdisk/shell/init.cmd) | Batch | 11 | 0 | 2 | 13 |
|
||||||
|
| [scripts/gen-tty-psf.ps1](/scripts/gen-tty-psf.ps1) | PowerShell | 64 | 2 | 18 | 84 |
|
||||||
|
|
||||||
|
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
15
.VSCodeCounter/2026-04-11_19-00-52/diff-details.md
Normal file
15
.VSCodeCounter/2026-04-11_19-00-52/diff-details.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Diff Details
|
||||||
|
|
||||||
|
Date : 2026-04-11 19:00:52
|
||||||
|
|
||||||
|
Directory d:\\Projects\\C\\cleonos
|
||||||
|
|
||||||
|
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
||||||
|
|
||||||
|
## Files
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
| :--- | :--- | ---: | ---: | ---: | ---: |
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
||||||
2
.VSCodeCounter/2026-04-11_19-00-52/diff.csv
Normal file
2
.VSCodeCounter/2026-04-11_19-00-52/diff.csv
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"filename", "language", "", "comment", "blank", "total"
|
||||||
|
"Total", "-", , 0, 0, 0
|
||||||
|
19
.VSCodeCounter/2026-04-11_19-00-52/diff.md
Normal file
19
.VSCodeCounter/2026-04-11_19-00-52/diff.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Diff Summary
|
||||||
|
|
||||||
|
Date : 2026-04-11 19:00:52
|
||||||
|
|
||||||
|
Directory d:\\Projects\\C\\cleonos
|
||||||
|
|
||||||
|
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
||||||
|
|
||||||
|
## Languages
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
|
||||||
|
## Directories
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
|
||||||
|
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
||||||
22
.VSCodeCounter/2026-04-11_19-00-52/diff.txt
Normal file
22
.VSCodeCounter/2026-04-11_19-00-52/diff.txt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Date : 2026-04-11 19:00:52
|
||||||
|
Directory : d:\Projects\C\cleonos
|
||||||
|
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||||
|
|
||||||
|
Languages
|
||||||
|
+----------+------------+------------+------------+------------+------------+
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
+----------+------------+------------+------------+------------+------------+
|
||||||
|
+----------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Directories
|
||||||
|
+------+------------+------------+------------+------------+------------+
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
+------+------------+------------+------------+------------+------------+
|
||||||
|
+------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Files
|
||||||
|
+----------+----------+------------+------------+------------+------------+
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
+----------+----------+------------+------------+------------+------------+
|
||||||
|
| Total | | 0 | 0 | 0 | 0 |
|
||||||
|
+----------+----------+------------+------------+------------+------------+
|
||||||
99
.VSCodeCounter/2026-04-11_19-00-52/results.csv
Normal file
99
.VSCodeCounter/2026-04-11_19-00-52/results.csv
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
"filename", "language", "PowerShell", "CMake", "Markdown", "Batch", "Makefile", "Properties", "C++", "C", "Go Assembly", "Rust", "comment", "blank", "total"
|
||||||
|
"d:\Projects\C\cleonos\CMakeLists.txt", "CMake", 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 610
|
||||||
|
"d:\Projects\C\cleonos\Makefile", "Makefile", 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 122
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\apps\elfrunner_kmain.c", "C", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 3, 9
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\apps\elfrunner_main.c", "C", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 3, 9
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\apps\memc_kmain.c", "C", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 3, 9
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\apps\memc_main.c", "C", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3, 11
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\apps\shell_main.c", "C", 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 124, 520
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\apps\ttydrv_main.c", "C", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 3, 9
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\include\cleonos_rust_bridge.h", "C++", 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 10
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\include\cleonos_syscall.h", "C++", 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 5, 65
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\src\runtime.c", "C", 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 6, 17
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\src\syscall.c", "C", 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 29, 118
|
||||||
|
"d:\Projects\C\cleonos\cleonos\c\stub.c", "C", 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 2, 9
|
||||||
|
"d:\Projects\C\cleonos\cleonos\rust\src\lib.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 9, 32
|
||||||
|
"d:\Projects\C\cleonos\clks\arch\aarch64\boot.c", "C", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 7
|
||||||
|
"d:\Projects\C\cleonos\clks\arch\x86_64\boot.c", "C", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 7
|
||||||
|
"d:\Projects\C\cleonos\clks\arch\x86_64\interrupt_stubs.S", "Go Assembly", 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 12, 120
|
||||||
|
"d:\Projects\C\cleonos\clks\drivers\serial\serial.c", "C", 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 16, 68
|
||||||
|
"d:\Projects\C\cleonos\clks\drivers\video\font8x8.c", "C", 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 8, 75
|
||||||
|
"d:\Projects\C\cleonos\clks\drivers\video\font8x8.h", "C++", 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 3, 8
|
||||||
|
"d:\Projects\C\cleonos\clks\drivers\video\framebuffer.c", "C", 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 42, 204
|
||||||
|
"d:\Projects\C\cleonos\clks\drivers\video\psf_font.c", "C", 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 35, 194
|
||||||
|
"d:\Projects\C\cleonos\clks\drivers\video\psf_font.h", "C++", 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 4, 18
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\boot.h", "C++", 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 4, 15
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\compiler.h", "C++", 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 4, 17
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\cpu.h", "C++", 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 4, 24
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\driver.h", "C++", 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 8, 36
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\elf64.h", "C++", 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 8, 35
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\elfrunner.h", "C++", 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 3, 9
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\exec.h", "C++", 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3, 11
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\framebuffer.h", "C++", 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 4, 24
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\fs.h", "C++", 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 7, 30
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\heap.h", "C++", 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 4, 19
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\interrupts.h", "C++", 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 3, 9
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\kelf.h", "C++", 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 5, 14
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\kernel.h", "C++", 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 6
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\keyboard.h", "C++", 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 5, 24
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\limine.h", "C++", 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 24, 156
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\log.h", "C++", 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 16
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\pmm.h", "C++", 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 5, 21
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\ramdisk.h", "C++", 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 8, 25
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\scheduler.h", "C++", 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 5, 23
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\serial.h", "C++", 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 2, 8
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\service.h", "C++", 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 8, 39
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\shell.h", "C++", 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 3, 10
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\string.h", "C++", 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 3, 12
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\syscall.h", "C++", 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 4, 38
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\task.h", "C++", 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 7, 31
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\tty.h", "C++", 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 5, 17
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\types.h", "C++", 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 6, 23
|
||||||
|
"d:\Projects\C\cleonos\clks\include\clks\userland.h", "C++", 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 4, 15
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\driver.c", "C", 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 48, 211
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\elf64.c", "C", 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 52, 222
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\elfrunner.c", "C", 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 8, 38
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\exec.c", "C", 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 15, 66
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\fs.c", "C", 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 220, 918
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\heap.c", "C", 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 42, 176
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\interrupts.c", "C", 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 43, 341
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\kelf.c", "C", 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 1, 53, 257
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\keyboard.c", "C", 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 42, 241
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\kmain.c", "C", 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 1, 50, 231
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\limine_requests.c", "C", 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 26, 102
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\log.c", "C", 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 17, 96
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\pmm.c", "C", 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 23, 105
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\ramdisk.c", "C", 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 50, 222
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\scheduler.c", "C", 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 42, 169
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\service.c", "C", 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 34, 147
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\shell.c", "C", 0, 0, 0, 0, 0, 0, 0, 860, 0, 0, 0, 230, 1090
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\syscall.c", "C", 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 50, 293
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\tty.c", "C", 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 77, 352
|
||||||
|
"d:\Projects\C\cleonos\clks\kernel\userland.c", "C", 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 32, 145
|
||||||
|
"d:\Projects\C\cleonos\clks\lib\string.c", "C", 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 16, 70
|
||||||
|
"d:\Projects\C\cleonos\cmake\check_tools.cmake", "CMake", 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 38
|
||||||
|
"d:\Projects\C\cleonos\cmake\log.cmake", "CMake", 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 36
|
||||||
|
"d:\Projects\C\cleonos\cmake\log_emit.cmake", "CMake", 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 29
|
||||||
|
"d:\Projects\C\cleonos\cmake\setup_limine.cmake", "CMake", 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 118
|
||||||
|
"d:\Projects\C\cleonos\configs\limine.conf", "Properties", 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 7
|
||||||
|
"d:\Projects\C\cleonos\docs\README.md", "Markdown", 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 2, 24
|
||||||
|
"d:\Projects\C\cleonos\docs\stage1.md", "Markdown", 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 5, 46
|
||||||
|
"d:\Projects\C\cleonos\docs\stage10.md", "Markdown", 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 6, 40
|
||||||
|
"d:\Projects\C\cleonos\docs\stage11.md", "Markdown", 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 5, 41
|
||||||
|
"d:\Projects\C\cleonos\docs\stage12.md", "Markdown", 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 6, 46
|
||||||
|
"d:\Projects\C\cleonos\docs\stage13.md", "Markdown", 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 6, 40
|
||||||
|
"d:\Projects\C\cleonos\docs\stage14.md", "Markdown", 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 8, 52
|
||||||
|
"d:\Projects\C\cleonos\docs\stage15.md", "Markdown", 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 7, 54
|
||||||
|
"d:\Projects\C\cleonos\docs\stage2.md", "Markdown", 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 5, 35
|
||||||
|
"d:\Projects\C\cleonos\docs\stage20.md", "Markdown", 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 6, 52
|
||||||
|
"d:\Projects\C\cleonos\docs\stage21.md", "Markdown", 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 7, 79
|
||||||
|
"d:\Projects\C\cleonos\docs\stage3.md", "Markdown", 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 5, 34
|
||||||
|
"d:\Projects\C\cleonos\docs\stage4.md", "Markdown", 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 5, 35
|
||||||
|
"d:\Projects\C\cleonos\docs\stage5.md", "Markdown", 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 5, 34
|
||||||
|
"d:\Projects\C\cleonos\docs\stage6.md", "Markdown", 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 6, 36
|
||||||
|
"d:\Projects\C\cleonos\docs\stage7.md", "Markdown", 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 6, 40
|
||||||
|
"d:\Projects\C\cleonos\docs\stage8.md", "Markdown", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 6, 37
|
||||||
|
"d:\Projects\C\cleonos\docs\stage9.md", "Markdown", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 6, 37
|
||||||
|
"d:\Projects\C\cleonos\ramdisk\shell\init.cmd", "Batch", 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 2, 13
|
||||||
|
"d:\Projects\C\cleonos\scripts\gen-tty-psf.ps1", "PowerShell", 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 84
|
||||||
|
"Total", "-", 64, 720, 660, 11, 100, 6, 640, 5303, 108, 23, 8, 1894, 9537
|
||||||
|
1
.VSCodeCounter/2026-04-11_19-00-52/results.json
Normal file
1
.VSCodeCounter/2026-04-11_19-00-52/results.json
Normal file
File diff suppressed because one or more lines are too long
56
.VSCodeCounter/2026-04-11_19-00-52/results.md
Normal file
56
.VSCodeCounter/2026-04-11_19-00-52/results.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# Summary
|
||||||
|
|
||||||
|
Date : 2026-04-11 19:00:52
|
||||||
|
|
||||||
|
Directory d:\\Projects\\C\\cleonos
|
||||||
|
|
||||||
|
Total : 97 files, 7635 codes, 8 comments, 1894 blanks, all 9537 lines
|
||||||
|
|
||||||
|
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
|
|
||||||
|
## Languages
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
| C | 36 | 5,303 | 6 | 1,449 | 6,758 |
|
||||||
|
| CMake | 5 | 720 | 0 | 111 | 831 |
|
||||||
|
| Markdown | 18 | 660 | 0 | 102 | 762 |
|
||||||
|
| C++ | 32 | 640 | 0 | 168 | 808 |
|
||||||
|
| Go Assembly | 1 | 108 | 0 | 12 | 120 |
|
||||||
|
| Makefile | 1 | 100 | 0 | 22 | 122 |
|
||||||
|
| PowerShell | 1 | 64 | 2 | 18 | 84 |
|
||||||
|
| Rust | 1 | 23 | 0 | 9 | 32 |
|
||||||
|
| Batch | 1 | 11 | 0 | 2 | 13 |
|
||||||
|
| Properties | 1 | 6 | 0 | 1 | 7 |
|
||||||
|
|
||||||
|
## Directories
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
| :--- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
| . | 97 | 7,635 | 8 | 1,894 | 9,537 |
|
||||||
|
| . (Files) | 2 | 635 | 0 | 97 | 732 |
|
||||||
|
| cleonos | 12 | 620 | 4 | 194 | 818 |
|
||||||
|
| cleonos\\c | 11 | 597 | 4 | 185 | 786 |
|
||||||
|
| cleonos\\c (Files) | 1 | 3 | 4 | 2 | 9 |
|
||||||
|
| cleonos\\c\\apps | 6 | 428 | 0 | 139 | 567 |
|
||||||
|
| cleonos\\c\\include | 2 | 66 | 0 | 9 | 75 |
|
||||||
|
| cleonos\\c\\src | 2 | 100 | 0 | 35 | 135 |
|
||||||
|
| cleonos\\rust | 1 | 23 | 0 | 9 | 32 |
|
||||||
|
| cleonos\\rust\\src | 1 | 23 | 0 | 9 | 32 |
|
||||||
|
| clks | 58 | 5,454 | 2 | 1,444 | 6,900 |
|
||||||
|
| clks\\arch | 3 | 120 | 0 | 14 | 134 |
|
||||||
|
| clks\\arch\\aarch64 | 1 | 6 | 0 | 1 | 7 |
|
||||||
|
| clks\\arch\\x86_64 | 2 | 114 | 0 | 13 | 127 |
|
||||||
|
| clks\\drivers | 6 | 459 | 0 | 108 | 567 |
|
||||||
|
| clks\\drivers\\serial | 1 | 52 | 0 | 16 | 68 |
|
||||||
|
| clks\\drivers\\video | 5 | 407 | 0 | 92 | 499 |
|
||||||
|
| clks\\include | 28 | 555 | 0 | 152 | 707 |
|
||||||
|
| clks\\include\\clks | 28 | 555 | 0 | 152 | 707 |
|
||||||
|
| clks\\kernel | 20 | 4,266 | 2 | 1,154 | 5,422 |
|
||||||
|
| clks\\lib | 1 | 54 | 0 | 16 | 70 |
|
||||||
|
| cmake | 4 | 185 | 0 | 36 | 221 |
|
||||||
|
| configs | 1 | 6 | 0 | 1 | 7 |
|
||||||
|
| docs | 18 | 660 | 0 | 102 | 762 |
|
||||||
|
| ramdisk | 1 | 11 | 0 | 2 | 13 |
|
||||||
|
| ramdisk\\shell | 1 | 11 | 0 | 2 | 13 |
|
||||||
|
| scripts | 1 | 64 | 2 | 18 | 84 |
|
||||||
|
|
||||||
|
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
||||||
156
.VSCodeCounter/2026-04-11_19-00-52/results.txt
Normal file
156
.VSCodeCounter/2026-04-11_19-00-52/results.txt
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
Date : 2026-04-11 19:00:52
|
||||||
|
Directory : d:\Projects\C\cleonos
|
||||||
|
Total : 97 files, 7635 codes, 8 comments, 1894 blanks, all 9537 lines
|
||||||
|
|
||||||
|
Languages
|
||||||
|
+-------------+------------+------------+------------+------------+------------+
|
||||||
|
| language | files | code | comment | blank | total |
|
||||||
|
+-------------+------------+------------+------------+------------+------------+
|
||||||
|
| C | 36 | 5,303 | 6 | 1,449 | 6,758 |
|
||||||
|
| CMake | 5 | 720 | 0 | 111 | 831 |
|
||||||
|
| Markdown | 18 | 660 | 0 | 102 | 762 |
|
||||||
|
| C++ | 32 | 640 | 0 | 168 | 808 |
|
||||||
|
| Go Assembly | 1 | 108 | 0 | 12 | 120 |
|
||||||
|
| Makefile | 1 | 100 | 0 | 22 | 122 |
|
||||||
|
| PowerShell | 1 | 64 | 2 | 18 | 84 |
|
||||||
|
| Rust | 1 | 23 | 0 | 9 | 32 |
|
||||||
|
| Batch | 1 | 11 | 0 | 2 | 13 |
|
||||||
|
| Properties | 1 | 6 | 0 | 1 | 7 |
|
||||||
|
+-------------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Directories
|
||||||
|
+---------------------------------------------------------------+------------+------------+------------+------------+------------+
|
||||||
|
| path | files | code | comment | blank | total |
|
||||||
|
+---------------------------------------------------------------+------------+------------+------------+------------+------------+
|
||||||
|
| . | 97 | 7,635 | 8 | 1,894 | 9,537 |
|
||||||
|
| . (Files) | 2 | 635 | 0 | 97 | 732 |
|
||||||
|
| cleonos | 12 | 620 | 4 | 194 | 818 |
|
||||||
|
| cleonos\c | 11 | 597 | 4 | 185 | 786 |
|
||||||
|
| cleonos\c (Files) | 1 | 3 | 4 | 2 | 9 |
|
||||||
|
| cleonos\c\apps | 6 | 428 | 0 | 139 | 567 |
|
||||||
|
| cleonos\c\include | 2 | 66 | 0 | 9 | 75 |
|
||||||
|
| cleonos\c\src | 2 | 100 | 0 | 35 | 135 |
|
||||||
|
| cleonos\rust | 1 | 23 | 0 | 9 | 32 |
|
||||||
|
| cleonos\rust\src | 1 | 23 | 0 | 9 | 32 |
|
||||||
|
| clks | 58 | 5,454 | 2 | 1,444 | 6,900 |
|
||||||
|
| clks\arch | 3 | 120 | 0 | 14 | 134 |
|
||||||
|
| clks\arch\aarch64 | 1 | 6 | 0 | 1 | 7 |
|
||||||
|
| clks\arch\x86_64 | 2 | 114 | 0 | 13 | 127 |
|
||||||
|
| clks\drivers | 6 | 459 | 0 | 108 | 567 |
|
||||||
|
| clks\drivers\serial | 1 | 52 | 0 | 16 | 68 |
|
||||||
|
| clks\drivers\video | 5 | 407 | 0 | 92 | 499 |
|
||||||
|
| clks\include | 28 | 555 | 0 | 152 | 707 |
|
||||||
|
| clks\include\clks | 28 | 555 | 0 | 152 | 707 |
|
||||||
|
| clks\kernel | 20 | 4,266 | 2 | 1,154 | 5,422 |
|
||||||
|
| clks\lib | 1 | 54 | 0 | 16 | 70 |
|
||||||
|
| cmake | 4 | 185 | 0 | 36 | 221 |
|
||||||
|
| configs | 1 | 6 | 0 | 1 | 7 |
|
||||||
|
| docs | 18 | 660 | 0 | 102 | 762 |
|
||||||
|
| ramdisk | 1 | 11 | 0 | 2 | 13 |
|
||||||
|
| ramdisk\shell | 1 | 11 | 0 | 2 | 13 |
|
||||||
|
| scripts | 1 | 64 | 2 | 18 | 84 |
|
||||||
|
+---------------------------------------------------------------+------------+------------+------------+------------+------------+
|
||||||
|
|
||||||
|
Files
|
||||||
|
+---------------------------------------------------------------+-------------+------------+------------+------------+------------+
|
||||||
|
| filename | language | code | comment | blank | total |
|
||||||
|
+---------------------------------------------------------------+-------------+------------+------------+------------+------------+
|
||||||
|
| d:\Projects\C\cleonos\CMakeLists.txt | CMake | 535 | 0 | 75 | 610 |
|
||||||
|
| d:\Projects\C\cleonos\Makefile | Makefile | 100 | 0 | 22 | 122 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\apps\elfrunner_kmain.c | C | 6 | 0 | 3 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\apps\elfrunner_main.c | C | 6 | 0 | 3 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\apps\memc_kmain.c | C | 6 | 0 | 3 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\apps\memc_main.c | C | 8 | 0 | 3 | 11 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\apps\shell_main.c | C | 396 | 0 | 124 | 520 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\apps\ttydrv_main.c | C | 6 | 0 | 3 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\include\cleonos_rust_bridge.h | C++ | 6 | 0 | 4 | 10 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\include\cleonos_syscall.h | C++ | 60 | 0 | 5 | 65 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\src\runtime.c | C | 11 | 0 | 6 | 17 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\src\syscall.c | C | 89 | 0 | 29 | 118 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\c\stub.c | C | 3 | 4 | 2 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\cleonos\rust\src\lib.rs | Rust | 23 | 0 | 9 | 32 |
|
||||||
|
| d:\Projects\C\cleonos\clks\arch\aarch64\boot.c | C | 6 | 0 | 1 | 7 |
|
||||||
|
| d:\Projects\C\cleonos\clks\arch\x86_64\boot.c | C | 6 | 0 | 1 | 7 |
|
||||||
|
| d:\Projects\C\cleonos\clks\arch\x86_64\interrupt_stubs.S | Go Assembly | 108 | 0 | 12 | 120 |
|
||||||
|
| d:\Projects\C\cleonos\clks\drivers\serial\serial.c | C | 52 | 0 | 16 | 68 |
|
||||||
|
| d:\Projects\C\cleonos\clks\drivers\video\font8x8.c | C | 67 | 0 | 8 | 75 |
|
||||||
|
| d:\Projects\C\cleonos\clks\drivers\video\font8x8.h | C++ | 5 | 0 | 3 | 8 |
|
||||||
|
| d:\Projects\C\cleonos\clks\drivers\video\framebuffer.c | C | 162 | 0 | 42 | 204 |
|
||||||
|
| d:\Projects\C\cleonos\clks\drivers\video\psf_font.c | C | 159 | 0 | 35 | 194 |
|
||||||
|
| d:\Projects\C\cleonos\clks\drivers\video\psf_font.h | C++ | 14 | 0 | 4 | 18 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\boot.h | C++ | 11 | 0 | 4 | 15 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\compiler.h | C++ | 13 | 0 | 4 | 17 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\cpu.h | C++ | 20 | 0 | 4 | 24 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\driver.h | C++ | 28 | 0 | 8 | 36 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\elf64.h | C++ | 27 | 0 | 8 | 35 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\elfrunner.h | C++ | 6 | 0 | 3 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\exec.h | C++ | 8 | 0 | 3 | 11 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\framebuffer.h | C++ | 20 | 0 | 4 | 24 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\fs.h | C++ | 23 | 0 | 7 | 30 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\heap.h | C++ | 15 | 0 | 4 | 19 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\interrupts.h | C++ | 6 | 0 | 3 | 9 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\kelf.h | C++ | 9 | 0 | 5 | 14 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\kernel.h | C++ | 4 | 0 | 2 | 6 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\keyboard.h | C++ | 19 | 0 | 5 | 24 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\limine.h | C++ | 132 | 0 | 24 | 156 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\log.h | C++ | 12 | 0 | 4 | 16 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\pmm.h | C++ | 16 | 0 | 5 | 21 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\ramdisk.h | C++ | 17 | 0 | 8 | 25 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\scheduler.h | C++ | 18 | 0 | 5 | 23 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\serial.h | C++ | 6 | 0 | 2 | 8 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\service.h | C++ | 31 | 0 | 8 | 39 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\shell.h | C++ | 7 | 0 | 3 | 10 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\string.h | C++ | 9 | 0 | 3 | 12 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\syscall.h | C++ | 34 | 0 | 4 | 38 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\task.h | C++ | 24 | 0 | 7 | 31 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\tty.h | C++ | 12 | 0 | 5 | 17 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\types.h | C++ | 17 | 0 | 6 | 23 |
|
||||||
|
| d:\Projects\C\cleonos\clks\include\clks\userland.h | C++ | 11 | 0 | 4 | 15 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\driver.c | C | 163 | 0 | 48 | 211 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\elf64.c | C | 170 | 0 | 52 | 222 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\elfrunner.c | C | 30 | 0 | 8 | 38 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\exec.c | C | 51 | 0 | 15 | 66 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\fs.c | C | 698 | 0 | 220 | 918 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\heap.c | C | 134 | 0 | 42 | 176 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\interrupts.c | C | 298 | 0 | 43 | 341 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\kelf.c | C | 203 | 1 | 53 | 257 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\keyboard.c | C | 199 | 0 | 42 | 241 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\kmain.c | C | 180 | 1 | 50 | 231 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\limine_requests.c | C | 76 | 0 | 26 | 102 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\log.c | C | 79 | 0 | 17 | 96 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\pmm.c | C | 82 | 0 | 23 | 105 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\ramdisk.c | C | 172 | 0 | 50 | 222 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\scheduler.c | C | 127 | 0 | 42 | 169 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\service.c | C | 113 | 0 | 34 | 147 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\shell.c | C | 860 | 0 | 230 | 1,090 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\syscall.c | C | 243 | 0 | 50 | 293 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\tty.c | C | 275 | 0 | 77 | 352 |
|
||||||
|
| d:\Projects\C\cleonos\clks\kernel\userland.c | C | 113 | 0 | 32 | 145 |
|
||||||
|
| d:\Projects\C\cleonos\clks\lib\string.c | C | 54 | 0 | 16 | 70 |
|
||||||
|
| d:\Projects\C\cleonos\cmake\check_tools.cmake | CMake | 32 | 0 | 6 | 38 |
|
||||||
|
| d:\Projects\C\cleonos\cmake\log.cmake | CMake | 30 | 0 | 6 | 36 |
|
||||||
|
| d:\Projects\C\cleonos\cmake\log_emit.cmake | CMake | 23 | 0 | 6 | 29 |
|
||||||
|
| d:\Projects\C\cleonos\cmake\setup_limine.cmake | CMake | 100 | 0 | 18 | 118 |
|
||||||
|
| d:\Projects\C\cleonos\configs\limine.conf | Properties | 6 | 0 | 1 | 7 |
|
||||||
|
| d:\Projects\C\cleonos\docs\README.md | Markdown | 22 | 0 | 2 | 24 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage1.md | Markdown | 41 | 0 | 5 | 46 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage10.md | Markdown | 34 | 0 | 6 | 40 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage11.md | Markdown | 36 | 0 | 5 | 41 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage12.md | Markdown | 40 | 0 | 6 | 46 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage13.md | Markdown | 34 | 0 | 6 | 40 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage14.md | Markdown | 44 | 0 | 8 | 52 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage15.md | Markdown | 47 | 0 | 7 | 54 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage2.md | Markdown | 30 | 0 | 5 | 35 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage20.md | Markdown | 46 | 0 | 6 | 52 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage21.md | Markdown | 72 | 0 | 7 | 79 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage3.md | Markdown | 29 | 0 | 5 | 34 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage4.md | Markdown | 30 | 0 | 5 | 35 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage5.md | Markdown | 29 | 0 | 5 | 34 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage6.md | Markdown | 30 | 0 | 6 | 36 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage7.md | Markdown | 34 | 0 | 6 | 40 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage8.md | Markdown | 31 | 0 | 6 | 37 |
|
||||||
|
| d:\Projects\C\cleonos\docs\stage9.md | Markdown | 31 | 0 | 6 | 37 |
|
||||||
|
| d:\Projects\C\cleonos\ramdisk\shell\init.cmd | Batch | 11 | 0 | 2 | 13 |
|
||||||
|
| d:\Projects\C\cleonos\scripts\gen-tty-psf.ps1 | PowerShell | 64 | 2 | 18 | 84 |
|
||||||
|
| Total | | 7,635 | 8 | 1,894 | 9,537 |
|
||||||
|
+---------------------------------------------------------------+-------------+------------+------------+------------+------------+
|
||||||
@@ -19,6 +19,12 @@ clks_bool clks_fs_stat(const char *path, struct clks_fs_node_info *out_info);
|
|||||||
const void *clks_fs_read_all(const char *path, u64 *out_size);
|
const void *clks_fs_read_all(const char *path, u64 *out_size);
|
||||||
u64 clks_fs_count_children(const char *dir_path);
|
u64 clks_fs_count_children(const char *dir_path);
|
||||||
clks_bool clks_fs_get_child_name(const char *dir_path, u64 index, char *out_name, usize out_name_size);
|
clks_bool clks_fs_get_child_name(const char *dir_path, u64 index, char *out_name, usize out_name_size);
|
||||||
|
|
||||||
|
clks_bool clks_fs_mkdir(const char *path);
|
||||||
|
clks_bool clks_fs_write_all(const char *path, const void *data, u64 size);
|
||||||
|
clks_bool clks_fs_append(const char *path, const void *data, u64 size);
|
||||||
|
clks_bool clks_fs_remove(const char *path);
|
||||||
|
|
||||||
u64 clks_fs_node_count(void);
|
u64 clks_fs_node_count(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
368
clks/kernel/fs.c
368
clks/kernel/fs.c
@@ -1,5 +1,6 @@
|
|||||||
#include <clks/boot.h>
|
#include <clks/boot.h>
|
||||||
#include <clks/fs.h>
|
#include <clks/fs.h>
|
||||||
|
#include <clks/heap.h>
|
||||||
#include <clks/log.h>
|
#include <clks/log.h>
|
||||||
#include <clks/ramdisk.h>
|
#include <clks/ramdisk.h>
|
||||||
#include <clks/string.h>
|
#include <clks/string.h>
|
||||||
@@ -8,6 +9,8 @@
|
|||||||
#define CLKS_FS_MAX_NODES 512U
|
#define CLKS_FS_MAX_NODES 512U
|
||||||
#define CLKS_FS_PATH_MAX CLKS_RAMDISK_PATH_MAX
|
#define CLKS_FS_PATH_MAX CLKS_RAMDISK_PATH_MAX
|
||||||
|
|
||||||
|
#define CLKS_FS_NODE_FLAG_HEAP_DATA 0x0001U
|
||||||
|
|
||||||
struct clks_fs_node {
|
struct clks_fs_node {
|
||||||
clks_bool used;
|
clks_bool used;
|
||||||
enum clks_fs_node_type type;
|
enum clks_fs_node_type type;
|
||||||
@@ -26,6 +29,7 @@ struct clks_fs_build_stats {
|
|||||||
static struct clks_fs_node clks_fs_nodes[CLKS_FS_MAX_NODES];
|
static struct clks_fs_node clks_fs_nodes[CLKS_FS_MAX_NODES];
|
||||||
static u16 clks_fs_nodes_used = 0U;
|
static u16 clks_fs_nodes_used = 0U;
|
||||||
static clks_bool clks_fs_ready = CLKS_FALSE;
|
static clks_bool clks_fs_ready = CLKS_FALSE;
|
||||||
|
static const u8 clks_fs_empty_file_data[1] = {0U};
|
||||||
|
|
||||||
static clks_bool clks_fs_normalize_external_path(const char *path, char *out_internal, usize out_size) {
|
static clks_bool clks_fs_normalize_external_path(const char *path, char *out_internal, usize out_size) {
|
||||||
usize in_pos = 0;
|
usize in_pos = 0;
|
||||||
@@ -94,6 +98,33 @@ static clks_bool clks_fs_normalize_external_path(const char *path, char *out_int
|
|||||||
return CLKS_TRUE;
|
return CLKS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_fs_internal_in_temp_tree(const char *internal_path) {
|
||||||
|
if (internal_path == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (internal_path[0] != 't' ||
|
||||||
|
internal_path[1] != 'e' ||
|
||||||
|
internal_path[2] != 'm' ||
|
||||||
|
internal_path[3] != 'p') {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (internal_path[4] == '\0' || internal_path[4] == '/') ? CLKS_TRUE : CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_fs_internal_is_temp_file_path(const char *internal_path) {
|
||||||
|
if (clks_fs_internal_in_temp_tree(internal_path) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (internal_path[4] == '\0') {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static i32 clks_fs_find_node_by_internal(const char *internal_path) {
|
static i32 clks_fs_find_node_by_internal(const char *internal_path) {
|
||||||
u16 i;
|
u16 i;
|
||||||
|
|
||||||
@@ -176,12 +207,54 @@ static clks_bool clks_fs_split_parent(const char *internal_path, char *parent_ou
|
|||||||
return CLKS_TRUE;
|
return CLKS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_fs_node_has_heap_data(u16 index) {
|
||||||
|
return ((clks_fs_nodes[index].reserved & CLKS_FS_NODE_FLAG_HEAP_DATA) != 0U) ? CLKS_TRUE : CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_fs_node_set_heap_data(u16 index, clks_bool value) {
|
||||||
|
if (value == CLKS_TRUE) {
|
||||||
|
clks_fs_nodes[index].reserved |= CLKS_FS_NODE_FLAG_HEAP_DATA;
|
||||||
|
} else {
|
||||||
|
clks_fs_nodes[index].reserved &= (u16)(~CLKS_FS_NODE_FLAG_HEAP_DATA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_fs_node_release_heap_data(u16 index) {
|
||||||
|
if (clks_fs_nodes[index].type != CLKS_FS_NODE_FILE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_node_has_heap_data(index) == CLKS_TRUE && clks_fs_nodes[index].data != CLKS_NULL) {
|
||||||
|
clks_kfree((void *)clks_fs_nodes[index].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_fs_node_set_heap_data(index, CLKS_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static i32 clks_fs_alloc_slot(void) {
|
||||||
|
u16 i;
|
||||||
|
|
||||||
|
for (i = 0U; i < clks_fs_nodes_used; i++) {
|
||||||
|
if (clks_fs_nodes[i].used == CLKS_FALSE) {
|
||||||
|
return (i32)i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_nodes_used >= CLKS_FS_MAX_NODES) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_fs_nodes_used++;
|
||||||
|
return (i32)(clks_fs_nodes_used - 1U);
|
||||||
|
}
|
||||||
|
|
||||||
static i32 clks_fs_create_or_update_node(const char *internal_path,
|
static i32 clks_fs_create_or_update_node(const char *internal_path,
|
||||||
enum clks_fs_node_type type,
|
enum clks_fs_node_type type,
|
||||||
u16 parent,
|
u16 parent,
|
||||||
const void *data,
|
const void *data,
|
||||||
u64 size) {
|
u64 size) {
|
||||||
i32 existing;
|
i32 existing;
|
||||||
|
i32 slot;
|
||||||
usize path_len;
|
usize path_len;
|
||||||
|
|
||||||
if (internal_path == CLKS_NULL) {
|
if (internal_path == CLKS_NULL) {
|
||||||
@@ -208,25 +281,28 @@ static i32 clks_fs_create_or_update_node(const char *internal_path,
|
|||||||
if (type == CLKS_FS_NODE_FILE) {
|
if (type == CLKS_FS_NODE_FILE) {
|
||||||
node->data = data;
|
node->data = data;
|
||||||
node->size = size;
|
node->size = size;
|
||||||
|
node->reserved = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node->used = CLKS_TRUE;
|
||||||
return existing;
|
return existing;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clks_fs_nodes_used >= CLKS_FS_MAX_NODES) {
|
slot = clks_fs_alloc_slot();
|
||||||
|
|
||||||
|
if (slot < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
clks_fs_nodes[clks_fs_nodes_used].used = CLKS_TRUE;
|
clks_fs_nodes[(u16)slot].used = CLKS_TRUE;
|
||||||
clks_fs_nodes[clks_fs_nodes_used].type = type;
|
clks_fs_nodes[(u16)slot].type = type;
|
||||||
clks_fs_nodes[clks_fs_nodes_used].parent = parent;
|
clks_fs_nodes[(u16)slot].parent = parent;
|
||||||
clks_fs_nodes[clks_fs_nodes_used].reserved = 0U;
|
clks_fs_nodes[(u16)slot].reserved = 0U;
|
||||||
clks_fs_nodes[clks_fs_nodes_used].data = (type == CLKS_FS_NODE_FILE) ? data : CLKS_NULL;
|
clks_fs_nodes[(u16)slot].data = (type == CLKS_FS_NODE_FILE) ? data : CLKS_NULL;
|
||||||
clks_fs_nodes[clks_fs_nodes_used].size = (type == CLKS_FS_NODE_FILE) ? size : 0ULL;
|
clks_fs_nodes[(u16)slot].size = (type == CLKS_FS_NODE_FILE) ? size : 0ULL;
|
||||||
clks_memcpy(clks_fs_nodes[clks_fs_nodes_used].path, internal_path, path_len + 1U);
|
clks_memcpy(clks_fs_nodes[(u16)slot].path, internal_path, path_len + 1U);
|
||||||
|
|
||||||
clks_fs_nodes_used++;
|
return slot;
|
||||||
return (i32)(clks_fs_nodes_used - 1U);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static clks_bool clks_fs_ensure_root(void) {
|
static clks_bool clks_fs_ensure_root(void) {
|
||||||
@@ -372,6 +448,38 @@ static clks_bool clks_fs_ramdisk_visit(const struct clks_ramdisk_entry *entry, v
|
|||||||
return CLKS_TRUE;
|
return CLKS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_fs_build_file_payload(const void *data,
|
||||||
|
u64 size,
|
||||||
|
const void **out_data,
|
||||||
|
clks_bool *out_heap_owned) {
|
||||||
|
void *payload;
|
||||||
|
|
||||||
|
if (out_data == CLKS_NULL || out_heap_owned == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == 0ULL) {
|
||||||
|
*out_data = (const void *)clks_fs_empty_file_data;
|
||||||
|
*out_heap_owned = CLKS_FALSE;
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
payload = clks_kmalloc((usize)size);
|
||||||
|
|
||||||
|
if (payload == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_memcpy(payload, data, (usize)size);
|
||||||
|
*out_data = (const void *)payload;
|
||||||
|
*out_heap_owned = CLKS_TRUE;
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void clks_fs_init(void) {
|
void clks_fs_init(void) {
|
||||||
const struct limine_file *module;
|
const struct limine_file *module;
|
||||||
struct clks_fs_build_stats stats;
|
struct clks_fs_build_stats stats;
|
||||||
@@ -474,6 +582,10 @@ const void *clks_fs_read_all(const char *path, u64 *out_size) {
|
|||||||
*out_size = clks_fs_nodes[(u16)node_index].size;
|
*out_size = clks_fs_nodes[(u16)node_index].size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clks_fs_nodes[(u16)node_index].size == 0ULL) {
|
||||||
|
return (const void *)clks_fs_empty_file_data;
|
||||||
|
}
|
||||||
|
|
||||||
return clks_fs_nodes[(u16)node_index].data;
|
return clks_fs_nodes[(u16)node_index].data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -563,10 +675,244 @@ clks_bool clks_fs_get_child_name(const char *dir_path, u64 index, char *out_name
|
|||||||
return CLKS_FALSE;
|
return CLKS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clks_bool clks_fs_mkdir(const char *path) {
|
||||||
|
char internal[CLKS_FS_PATH_MAX];
|
||||||
|
i32 node_index;
|
||||||
|
|
||||||
|
if (clks_fs_ready == CLKS_FALSE || path == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_normalize_external_path(path, internal, sizeof(internal)) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_internal_in_temp_tree(internal) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (internal[0] == '\0') {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_ensure_dir_hierarchy(internal) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
node_index = clks_fs_find_node_by_internal(internal);
|
||||||
|
|
||||||
|
if (node_index < 0) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (clks_fs_nodes[(u16)node_index].type == CLKS_FS_NODE_DIR) ? CLKS_TRUE : CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_bool clks_fs_write_all(const char *path, const void *data, u64 size) {
|
||||||
|
char internal[CLKS_FS_PATH_MAX];
|
||||||
|
char parent[CLKS_FS_PATH_MAX];
|
||||||
|
const void *payload_data = CLKS_NULL;
|
||||||
|
clks_bool payload_heap_owned = CLKS_FALSE;
|
||||||
|
i32 parent_index;
|
||||||
|
i32 node_index;
|
||||||
|
|
||||||
|
if (clks_fs_ready == CLKS_FALSE || path == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_normalize_external_path(path, internal, sizeof(internal)) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_internal_is_temp_file_path(internal) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_split_parent(internal, parent, sizeof(parent)) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_internal_in_temp_tree(parent) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_ensure_dir_hierarchy(parent) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent_index = clks_fs_find_node_by_internal(parent);
|
||||||
|
|
||||||
|
if (parent_index < 0 || clks_fs_nodes[(u16)parent_index].type != CLKS_FS_NODE_DIR) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
node_index = clks_fs_find_node_by_internal(internal);
|
||||||
|
|
||||||
|
if (node_index >= 0 && clks_fs_nodes[(u16)node_index].type != CLKS_FS_NODE_FILE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_build_file_payload(data, size, &payload_data, &payload_heap_owned) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node_index >= 0) {
|
||||||
|
clks_fs_node_release_heap_data((u16)node_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
node_index = clks_fs_create_or_update_node(
|
||||||
|
internal,
|
||||||
|
CLKS_FS_NODE_FILE,
|
||||||
|
(u16)parent_index,
|
||||||
|
payload_data,
|
||||||
|
size
|
||||||
|
);
|
||||||
|
|
||||||
|
if (node_index < 0) {
|
||||||
|
if (payload_heap_owned == CLKS_TRUE) {
|
||||||
|
clks_kfree((void *)payload_data);
|
||||||
|
}
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_fs_node_set_heap_data((u16)node_index, payload_heap_owned);
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_bool clks_fs_append(const char *path, const void *data, u64 size) {
|
||||||
|
char internal[CLKS_FS_PATH_MAX];
|
||||||
|
i32 node_index;
|
||||||
|
const void *old_data;
|
||||||
|
u64 old_size;
|
||||||
|
u64 new_size;
|
||||||
|
void *merged = CLKS_NULL;
|
||||||
|
|
||||||
|
if (clks_fs_ready == CLKS_FALSE || path == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > 0ULL && data == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_normalize_external_path(path, internal, sizeof(internal)) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_internal_is_temp_file_path(internal) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
node_index = clks_fs_find_node_by_internal(internal);
|
||||||
|
|
||||||
|
if (node_index < 0) {
|
||||||
|
return clks_fs_write_all(path, data, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_nodes[(u16)node_index].type != CLKS_FS_NODE_FILE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
old_data = clks_fs_nodes[(u16)node_index].data;
|
||||||
|
old_size = clks_fs_nodes[(u16)node_index].size;
|
||||||
|
|
||||||
|
if (old_size > (0xFFFFFFFFFFFFFFFFULL - size)) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_size = old_size + size;
|
||||||
|
|
||||||
|
if (new_size == 0ULL) {
|
||||||
|
return clks_fs_write_all(path, clks_fs_empty_file_data, 0ULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
merged = clks_kmalloc((usize)new_size);
|
||||||
|
|
||||||
|
if (merged == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (old_size > 0ULL && old_data != CLKS_NULL) {
|
||||||
|
clks_memcpy(merged, old_data, (usize)old_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > 0ULL) {
|
||||||
|
clks_memcpy((u8 *)merged + (usize)old_size, data, (usize)size);
|
||||||
|
}
|
||||||
|
if (clks_fs_write_all(path, merged, new_size) == CLKS_FALSE) {
|
||||||
|
clks_kfree(merged);
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_kfree(merged);
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_bool clks_fs_remove(const char *path) {
|
||||||
|
char internal[CLKS_FS_PATH_MAX];
|
||||||
|
i32 node_index;
|
||||||
|
u16 i;
|
||||||
|
|
||||||
|
if (clks_fs_ready == CLKS_FALSE || path == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_normalize_external_path(path, internal, sizeof(internal)) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_internal_in_temp_tree(internal) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_strcmp(internal, "temp") == 0) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
node_index = clks_fs_find_node_by_internal(internal);
|
||||||
|
|
||||||
|
if (node_index < 0) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_nodes[(u16)node_index].type == CLKS_FS_NODE_DIR) {
|
||||||
|
for (i = 0U; i < clks_fs_nodes_used; i++) {
|
||||||
|
if (clks_fs_nodes[i].used == CLKS_FALSE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_nodes[i].parent == (u16)node_index) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_fs_node_release_heap_data((u16)node_index);
|
||||||
|
|
||||||
|
clks_fs_nodes[(u16)node_index].used = CLKS_FALSE;
|
||||||
|
clks_fs_nodes[(u16)node_index].type = CLKS_FS_NODE_FILE;
|
||||||
|
clks_fs_nodes[(u16)node_index].parent = 0U;
|
||||||
|
clks_fs_nodes[(u16)node_index].reserved = 0U;
|
||||||
|
clks_fs_nodes[(u16)node_index].data = CLKS_NULL;
|
||||||
|
clks_fs_nodes[(u16)node_index].size = 0ULL;
|
||||||
|
clks_fs_nodes[(u16)node_index].path[0] = '\0';
|
||||||
|
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
u64 clks_fs_node_count(void) {
|
u64 clks_fs_node_count(void) {
|
||||||
|
u16 i;
|
||||||
|
u64 used = 0ULL;
|
||||||
|
|
||||||
if (clks_fs_ready == CLKS_FALSE) {
|
if (clks_fs_ready == CLKS_FALSE) {
|
||||||
return 0ULL;
|
return 0ULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (u64)clks_fs_nodes_used;
|
for (i = 0U; i < clks_fs_nodes_used; i++) {
|
||||||
|
if (clks_fs_nodes[i].used == CLKS_TRUE) {
|
||||||
|
used++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return used;
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ void clks_kernel_main(void) {
|
|||||||
clks_tty_init();
|
clks_tty_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
clks_log(CLKS_LOG_INFO, "BOOT", "CLEONOS STAGE18 START");
|
clks_log(CLKS_LOG_INFO, "BOOT", "CLEONOS Stage21 START");
|
||||||
|
|
||||||
if (boot_fb == CLKS_NULL) {
|
if (boot_fb == CLKS_NULL) {
|
||||||
clks_log(CLKS_LOG_WARN, "VIDEO", "NO FRAMEBUFFER FROM LIMINE");
|
clks_log(CLKS_LOG_WARN, "VIDEO", "NO FRAMEBUFFER FROM LIMINE");
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ static char clks_shell_line[CLKS_SHELL_LINE_MAX];
|
|||||||
static usize clks_shell_line_len = 0U;
|
static usize clks_shell_line_len = 0U;
|
||||||
static usize clks_shell_cursor = 0U;
|
static usize clks_shell_cursor = 0U;
|
||||||
static usize clks_shell_rendered_len = 0U;
|
static usize clks_shell_rendered_len = 0U;
|
||||||
|
static char clks_shell_cwd[CLKS_SHELL_PATH_MAX] = "/";
|
||||||
|
|
||||||
static char clks_shell_history[CLKS_SHELL_HISTORY_MAX][CLKS_SHELL_LINE_MAX];
|
static char clks_shell_history[CLKS_SHELL_HISTORY_MAX][CLKS_SHELL_LINE_MAX];
|
||||||
static u32 clks_shell_history_count = 0U;
|
static u32 clks_shell_history_count = 0U;
|
||||||
@@ -390,11 +391,178 @@ static clks_bool clks_shell_resolve_exec_path(const char *arg, char *out_path, u
|
|||||||
return CLKS_TRUE;
|
return CLKS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_shell_path_push_component(char *path, usize path_size, usize *io_len, const char *component, usize comp_len) {
|
||||||
|
if (path == CLKS_NULL || io_len == CLKS_NULL || component == CLKS_NULL || comp_len == 0U) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*io_len == 1U) {
|
||||||
|
if (*io_len + comp_len >= path_size) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_memcpy(path + 1U, component, comp_len);
|
||||||
|
*io_len = 1U + comp_len;
|
||||||
|
path[*io_len] = '\0';
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*io_len + 1U + comp_len >= path_size) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
path[*io_len] = '/';
|
||||||
|
clks_memcpy(path + *io_len + 1U, component, comp_len);
|
||||||
|
*io_len += (1U + comp_len);
|
||||||
|
path[*io_len] = '\0';
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_path_pop_component(char *path, usize *io_len) {
|
||||||
|
if (path == CLKS_NULL || io_len == CLKS_NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*io_len <= 1U) {
|
||||||
|
path[0] = '/';
|
||||||
|
path[1] = '\0';
|
||||||
|
*io_len = 1U;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*io_len > 1U && path[*io_len - 1U] != '/') {
|
||||||
|
(*io_len)--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*io_len > 1U) {
|
||||||
|
(*io_len)--;
|
||||||
|
}
|
||||||
|
|
||||||
|
path[*io_len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_shell_path_parse_into(const char *src, char *out_path, usize out_size, usize *io_len) {
|
||||||
|
usize i = 0U;
|
||||||
|
|
||||||
|
if (src == CLKS_NULL || out_path == CLKS_NULL || io_len == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src[0] == '/') {
|
||||||
|
i = 1U;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (src[i] != '\0') {
|
||||||
|
usize start;
|
||||||
|
usize len;
|
||||||
|
|
||||||
|
while (src[i] == '/') {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src[i] == '\0') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
start = i;
|
||||||
|
|
||||||
|
while (src[i] != '\0' && src[i] != '/') {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = i - start;
|
||||||
|
|
||||||
|
if (len == 1U && src[start] == '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len == 2U && src[start] == '.' && src[start + 1U] == '.') {
|
||||||
|
clks_shell_path_pop_component(out_path, io_len);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_path_push_component(out_path, out_size, io_len, src + start, len) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_shell_resolve_path(const char *arg, char *out_path, usize out_size) {
|
||||||
|
usize len = 1U;
|
||||||
|
|
||||||
|
if (out_path == CLKS_NULL || out_size < 2U) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
out_path[0] = '/';
|
||||||
|
out_path[1] = '\0';
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
|
return clks_shell_path_parse_into(clks_shell_cwd, out_path, out_size, &len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg[0] != '/') {
|
||||||
|
if (clks_shell_path_parse_into(clks_shell_cwd, out_path, out_size, &len) == CLKS_FALSE) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return clks_shell_path_parse_into(arg, out_path, out_size, &len);
|
||||||
|
}
|
||||||
|
|
||||||
|
static clks_bool clks_shell_split_first_and_rest(const char *arg,
|
||||||
|
char *out_first,
|
||||||
|
usize out_first_size,
|
||||||
|
const char **out_rest) {
|
||||||
|
usize i = 0U;
|
||||||
|
usize p = 0U;
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || out_first == CLKS_NULL || out_first_size == 0U || out_rest == CLKS_NULL) {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
out_first[0] = '\0';
|
||||||
|
*out_rest = "";
|
||||||
|
|
||||||
|
while (arg[i] != '\0' && clks_shell_is_space(arg[i]) == CLKS_TRUE) {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg[i] == '\0') {
|
||||||
|
return CLKS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (arg[i] != '\0' && clks_shell_is_space(arg[i]) == CLKS_FALSE) {
|
||||||
|
if (p + 1U < out_first_size) {
|
||||||
|
out_first[p++] = arg[i];
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
out_first[p] = '\0';
|
||||||
|
|
||||||
|
while (arg[i] != '\0' && clks_shell_is_space(arg[i]) == CLKS_TRUE) {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
*out_rest = &arg[i];
|
||||||
|
return CLKS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void clks_shell_cmd_help(void) {
|
static void clks_shell_cmd_help(void) {
|
||||||
clks_shell_writeln("commands:");
|
clks_shell_writeln("commands:");
|
||||||
clks_shell_writeln(" help");
|
clks_shell_writeln(" help");
|
||||||
clks_shell_writeln(" ls [dir]");
|
clks_shell_writeln(" ls [dir]");
|
||||||
clks_shell_writeln(" cat <file>");
|
clks_shell_writeln(" cat <file>");
|
||||||
|
clks_shell_writeln(" pwd");
|
||||||
|
clks_shell_writeln(" cd [dir]");
|
||||||
|
clks_shell_writeln(" mkdir <dir> (/temp only)");
|
||||||
|
clks_shell_writeln(" touch <file> (/temp only)");
|
||||||
|
clks_shell_writeln(" write <file> <text> (/temp only)");
|
||||||
|
clks_shell_writeln(" append <file> <text> (/temp only)");
|
||||||
|
clks_shell_writeln(" rm <path> (/temp only)");
|
||||||
clks_shell_writeln(" exec <path|name>");
|
clks_shell_writeln(" exec <path|name>");
|
||||||
clks_shell_writeln(" clear");
|
clks_shell_writeln(" clear");
|
||||||
clks_shell_writeln(" kbdstat");
|
clks_shell_writeln(" kbdstat");
|
||||||
@@ -403,12 +571,18 @@ static void clks_shell_cmd_help(void) {
|
|||||||
|
|
||||||
static void clks_shell_cmd_ls(const char *arg) {
|
static void clks_shell_cmd_ls(const char *arg) {
|
||||||
struct clks_fs_node_info info;
|
struct clks_fs_node_info info;
|
||||||
const char *path = arg;
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
|
const char *target = arg;
|
||||||
u64 count;
|
u64 count;
|
||||||
u64 i;
|
u64 i;
|
||||||
|
|
||||||
if (path == CLKS_NULL || path[0] == '\0') {
|
if (target == CLKS_NULL || target[0] == '\0') {
|
||||||
path = "/";
|
target = ".";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(target, path, sizeof(path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("ls: invalid path");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clks_fs_stat(path, &info) == CLKS_FALSE || info.type != CLKS_FS_NODE_DIR) {
|
if (clks_fs_stat(path, &info) == CLKS_FALSE || info.type != CLKS_FS_NODE_DIR) {
|
||||||
@@ -439,6 +613,7 @@ static void clks_shell_cmd_cat(const char *arg) {
|
|||||||
const void *data;
|
const void *data;
|
||||||
u64 size = 0ULL;
|
u64 size = 0ULL;
|
||||||
u64 copy_len;
|
u64 copy_len;
|
||||||
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
char out[CLKS_SHELL_CAT_LIMIT + 1U];
|
char out[CLKS_SHELL_CAT_LIMIT + 1U];
|
||||||
|
|
||||||
if (arg == CLKS_NULL || arg[0] == '\0') {
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
@@ -446,7 +621,12 @@ static void clks_shell_cmd_cat(const char *arg) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = clks_fs_read_all(arg, &size);
|
if (clks_shell_resolve_path(arg, path, sizeof(path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("cat: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = clks_fs_read_all(path, &size);
|
||||||
|
|
||||||
if (data == CLKS_NULL) {
|
if (data == CLKS_NULL) {
|
||||||
clks_shell_writeln("cat: file not found");
|
clks_shell_writeln("cat: file not found");
|
||||||
@@ -469,6 +649,143 @@ static void clks_shell_cmd_cat(const char *arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_pwd(void) {
|
||||||
|
clks_shell_writeln(clks_shell_cwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_cd(const char *arg) {
|
||||||
|
struct clks_fs_node_info info;
|
||||||
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
|
const char *target = arg;
|
||||||
|
|
||||||
|
if (target == CLKS_NULL || target[0] == '\0') {
|
||||||
|
target = "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(target, path, sizeof(path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("cd: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_stat(path, &info) == CLKS_FALSE || info.type != CLKS_FS_NODE_DIR) {
|
||||||
|
clks_shell_writeln("cd: directory not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clks_shell_copy_line(clks_shell_cwd, sizeof(clks_shell_cwd), path);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_mkdir(const char *arg) {
|
||||||
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
|
clks_shell_writeln("mkdir: directory path required");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(arg, path, sizeof(path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("mkdir: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_mkdir(path) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("mkdir: failed (only /temp writable)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_touch(const char *arg) {
|
||||||
|
static const char empty_data[1] = {'\0'};
|
||||||
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
|
clks_shell_writeln("touch: file path required");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(arg, path, sizeof(path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("touch: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_write_all(path, empty_data, 0ULL) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("touch: failed (only /temp writable)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_write(const char *arg) {
|
||||||
|
char path_arg[CLKS_SHELL_PATH_MAX];
|
||||||
|
char abs_path[CLKS_SHELL_PATH_MAX];
|
||||||
|
const char *payload;
|
||||||
|
u64 payload_len;
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
|
clks_shell_writeln("write: usage write <file> <text>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_split_first_and_rest(arg, path_arg, sizeof(path_arg), &payload) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("write: usage write <file> <text>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(path_arg, abs_path, sizeof(abs_path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("write: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
payload_len = clks_strlen(payload);
|
||||||
|
|
||||||
|
if (clks_fs_write_all(abs_path, payload, payload_len) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("write: failed (only /temp writable)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_append(const char *arg) {
|
||||||
|
char path_arg[CLKS_SHELL_PATH_MAX];
|
||||||
|
char abs_path[CLKS_SHELL_PATH_MAX];
|
||||||
|
const char *payload;
|
||||||
|
u64 payload_len;
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
|
clks_shell_writeln("append: usage append <file> <text>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_split_first_and_rest(arg, path_arg, sizeof(path_arg), &payload) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("append: usage append <file> <text>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(path_arg, abs_path, sizeof(abs_path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("append: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
payload_len = clks_strlen(payload);
|
||||||
|
|
||||||
|
if (clks_fs_append(abs_path, payload, payload_len) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("append: failed (only /temp writable)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clks_shell_cmd_rm(const char *arg) {
|
||||||
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
|
|
||||||
|
if (arg == CLKS_NULL || arg[0] == '\0') {
|
||||||
|
clks_shell_writeln("rm: path required");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_resolve_path(arg, path, sizeof(path)) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("rm: invalid path");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_fs_remove(path) == CLKS_FALSE) {
|
||||||
|
clks_shell_writeln("rm: failed (only /temp writable; dir must be empty)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void clks_shell_cmd_exec(const char *arg) {
|
static void clks_shell_cmd_exec(const char *arg) {
|
||||||
char path[CLKS_SHELL_PATH_MAX];
|
char path[CLKS_SHELL_PATH_MAX];
|
||||||
u64 status = (u64)-1;
|
u64 status = (u64)-1;
|
||||||
@@ -540,6 +857,41 @@ static void clks_shell_execute_line(const char *line) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "pwd") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_pwd();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "cd") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_cd(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "mkdir") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_mkdir(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "touch") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_touch(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "write") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_write(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "append") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_append(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clks_shell_streq(cmd, "rm") == CLKS_TRUE) {
|
||||||
|
clks_shell_cmd_rm(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (clks_shell_streq(cmd, "exec") == CLKS_TRUE || clks_shell_streq(cmd, "run") == CLKS_TRUE) {
|
if (clks_shell_streq(cmd, "exec") == CLKS_TRUE || clks_shell_streq(cmd, "run") == CLKS_TRUE) {
|
||||||
clks_shell_cmd_exec(arg);
|
clks_shell_cmd_exec(arg);
|
||||||
return;
|
return;
|
||||||
@@ -686,10 +1038,12 @@ static void clks_shell_handle_char(char ch) {
|
|||||||
clks_shell_render_line();
|
clks_shell_render_line();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void clks_shell_init(void) {
|
void clks_shell_init(void) {
|
||||||
clks_shell_reset_line();
|
clks_shell_reset_line();
|
||||||
clks_shell_history_count = 0U;
|
clks_shell_history_count = 0U;
|
||||||
clks_shell_history_cancel_nav();
|
clks_shell_history_cancel_nav();
|
||||||
|
clks_shell_copy_line(clks_shell_cwd, sizeof(clks_shell_cwd), "/");
|
||||||
|
|
||||||
if (clks_tty_ready() == CLKS_FALSE) {
|
if (clks_tty_ready() == CLKS_FALSE) {
|
||||||
clks_shell_ready = CLKS_FALSE;
|
clks_shell_ready = CLKS_FALSE;
|
||||||
@@ -702,6 +1056,7 @@ void clks_shell_init(void) {
|
|||||||
clks_shell_writeln("");
|
clks_shell_writeln("");
|
||||||
clks_shell_writeln("CLeonOS interactive shell ready");
|
clks_shell_writeln("CLeonOS interactive shell ready");
|
||||||
clks_shell_writeln("type 'help' for commands");
|
clks_shell_writeln("type 'help' for commands");
|
||||||
|
clks_shell_writeln("/temp is writable in kernel shell mode");
|
||||||
clks_shell_prompt();
|
clks_shell_prompt();
|
||||||
|
|
||||||
clks_log(CLKS_LOG_INFO, "SHELL", "INTERACTIVE LOOP ONLINE");
|
clks_log(CLKS_LOG_INFO, "SHELL", "INTERACTIVE LOOP ONLINE");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
timeout: 3
|
timeout: 3
|
||||||
verbose: yes
|
verbose: yes
|
||||||
|
|
||||||
/CLeonOS Stage1
|
/CLeonOS Stage21
|
||||||
protocol: limine
|
protocol: limine
|
||||||
kernel_path: boot():/boot/clks_kernel.elf
|
kernel_path: boot():/boot/clks_kernel.elf
|
||||||
module_path: boot():/boot/cleonos_ramdisk.tar
|
module_path: boot():/boot/cleonos_ramdisk.tar
|
||||||
24
docs/README.md
Normal file
24
docs/README.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# CLeonOS Stage Docs
|
||||||
|
|
||||||
|
## Available Stage Docs
|
||||||
|
- `stage1.md`
|
||||||
|
- `stage2.md`
|
||||||
|
- `stage3.md`
|
||||||
|
- `stage4.md`
|
||||||
|
- `stage5.md`
|
||||||
|
- `stage6.md`
|
||||||
|
- `stage7.md`
|
||||||
|
- `stage8.md`
|
||||||
|
- `stage9.md`
|
||||||
|
- `stage10.md`
|
||||||
|
- `stage11.md`
|
||||||
|
- `stage12.md`
|
||||||
|
- `stage13.md`
|
||||||
|
- `stage14.md`
|
||||||
|
- `stage15.md`
|
||||||
|
- `stage20.md`
|
||||||
|
- `stage21.md`
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
- Stage docs use a fixed template: goal, implementation, acceptance criteria, build targets, QEMU command, and debugging notes.
|
||||||
|
- Stages 16~19 are currently not documented in this folder; add them later using the same template to keep history continuous.
|
||||||
52
docs/stage20.md
Normal file
52
docs/stage20.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# CLeonOS Stage20
|
||||||
|
|
||||||
|
## Stage Goal
|
||||||
|
- Keep system in kernel-shell mode while ELF user shell remains deferred.
|
||||||
|
- Stabilize terminal interaction path: PS/2 input queue + line editing shell loop.
|
||||||
|
- Enable external PSF font loading for framebuffer TTY.
|
||||||
|
- Keep scheduler/service/syscall/interrupt pipeline stable.
|
||||||
|
|
||||||
|
## What Was Implemented
|
||||||
|
- Boot pipeline keeps kernel shell as the active interactive interface.
|
||||||
|
- TTY supports loading external PSF font from `/system/tty.psf`.
|
||||||
|
- Keyboard module provides:
|
||||||
|
- PS/2 scan code handling
|
||||||
|
- input queue buffering
|
||||||
|
- `Alt+F1..F4` virtual TTY switch hotkeys
|
||||||
|
- Kernel shell interactive loop is online:
|
||||||
|
- command dispatch (`help/ls/cat/exec/clear/kbdstat` baseline)
|
||||||
|
- line editing and history
|
||||||
|
- TTY cursor path is timer-driven and supports blink updates via `clks_tty_tick()`.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- Kernel boots and prints `CLEONOS Stage20 START`.
|
||||||
|
- Boot logs include:
|
||||||
|
- `[INFO][TTY] EXTERNAL PSF LOADED /SYSTEM/TTY.PSF` (or fallback warning)
|
||||||
|
- `[INFO][KBD] ALT+F1..F4 TTY HOTKEY ONLINE`
|
||||||
|
- `[INFO][KBD] PS2 INPUT QUEUE ONLINE`
|
||||||
|
- `[INFO][SHELL] INTERACTIVE LOOP ONLINE`
|
||||||
|
- Typing in kernel shell produces immediate echo and command execution.
|
||||||
|
- `Alt+F1..F4` switches active TTY without panic.
|
||||||
|
|
||||||
|
## Build Targets
|
||||||
|
- `make setup`
|
||||||
|
- `make userapps`
|
||||||
|
- `make iso`
|
||||||
|
- `make run`
|
||||||
|
- `make debug`
|
||||||
|
|
||||||
|
## QEMU Command
|
||||||
|
- `qemu-system-x86_64 -M q35 -m 1024M -cdrom build/CLeonOS-x86_64.iso -serial stdio`
|
||||||
|
|
||||||
|
## Common Bugs and Debugging
|
||||||
|
- Cannot type in shell:
|
||||||
|
- Ensure QEMU window has keyboard focus.
|
||||||
|
- Check logs for keyboard queue online messages.
|
||||||
|
- External PSF not applied:
|
||||||
|
- Verify `/system/tty.psf` exists in ramdisk package.
|
||||||
|
- If load fails, system will fall back to built-in font.
|
||||||
|
- Hotkey switching does not work:
|
||||||
|
- Confirm `Alt` is held while pressing `F1..F4`.
|
||||||
|
- Check `[INFO][TTY] HOTKEY SWITCH` logs.
|
||||||
|
- Input lag feels high:
|
||||||
|
- Increase shell input budget or scheduler frequency in later stage.
|
||||||
79
docs/stage21.md
Normal file
79
docs/stage21.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# CLeonOS Stage21
|
||||||
|
|
||||||
|
## Stage Goal
|
||||||
|
- Add writable runtime filesystem capability without touching ELF execution path.
|
||||||
|
- Restrict write operations to `/temp` to keep system area read-only.
|
||||||
|
- Extend kernel shell with practical file/dir operations for daily debugging.
|
||||||
|
|
||||||
|
## What Was Implemented
|
||||||
|
- New writable VFS APIs:
|
||||||
|
- `clks_fs_mkdir(const char *path)`
|
||||||
|
- `clks_fs_write_all(const char *path, const void *data, u64 size)`
|
||||||
|
- `clks_fs_append(const char *path, const void *data, u64 size)`
|
||||||
|
- `clks_fs_remove(const char *path)`
|
||||||
|
- Write guard policy:
|
||||||
|
- Only `/temp` subtree is writable.
|
||||||
|
- `/system`, `/shell`, `/driver` remain read-only.
|
||||||
|
- Non-empty directory delete is rejected.
|
||||||
|
- Runtime file payload management:
|
||||||
|
- Dynamically written file data uses kernel heap.
|
||||||
|
- Overwrite/append paths release previous heap-backed payload safely.
|
||||||
|
- Kernel shell command expansion:
|
||||||
|
- `pwd`
|
||||||
|
- `cd [dir]`
|
||||||
|
- `mkdir <dir>`
|
||||||
|
- `touch <file>`
|
||||||
|
- `write <file> <text>`
|
||||||
|
- `append <file> <text>`
|
||||||
|
- `rm <path>`
|
||||||
|
- Shell path handling upgraded:
|
||||||
|
- relative path support
|
||||||
|
- `.` and `..` handling
|
||||||
|
- shell-maintained current working directory
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- Boot completes and kernel shell is interactive.
|
||||||
|
- `help` output includes new file commands.
|
||||||
|
- Writable flow under `/temp` works:
|
||||||
|
- create dir
|
||||||
|
- create file
|
||||||
|
- write and append text
|
||||||
|
- read with `cat`
|
||||||
|
- remove file/empty dir
|
||||||
|
- Write operation outside `/temp` fails with safe message.
|
||||||
|
- No regression in scheduler/service/syscall/interrupt initialization logs.
|
||||||
|
|
||||||
|
## Suggested Validation Script (Manual)
|
||||||
|
- `pwd`
|
||||||
|
- `cd /temp`
|
||||||
|
- `mkdir demo`
|
||||||
|
- `cd demo`
|
||||||
|
- `touch a.txt`
|
||||||
|
- `write a.txt hello`
|
||||||
|
- `append a.txt _world`
|
||||||
|
- `cat a.txt` (expect `hello_world`)
|
||||||
|
- `cd /`
|
||||||
|
- `write /system/x.txt bad` (expect failure)
|
||||||
|
- `rm /temp/demo/a.txt`
|
||||||
|
- `rm /temp/demo`
|
||||||
|
|
||||||
|
## Build Targets
|
||||||
|
- `make setup`
|
||||||
|
- `make userapps`
|
||||||
|
- `make iso`
|
||||||
|
- `make run`
|
||||||
|
- `make debug`
|
||||||
|
|
||||||
|
## QEMU Command
|
||||||
|
- `qemu-system-x86_64 -M q35 -m 1024M -cdrom build/CLeonOS-x86_64.iso -serial stdio`
|
||||||
|
|
||||||
|
## Common Bugs and Debugging
|
||||||
|
- `mkdir/write/touch` always fails:
|
||||||
|
- Confirm target path resolves under `/temp`.
|
||||||
|
- Use `pwd` and absolute paths to verify current directory.
|
||||||
|
- `rm` fails for directory:
|
||||||
|
- Stage21 only allows removing empty directories.
|
||||||
|
- `cat` prints truncated data:
|
||||||
|
- Current shell output keeps bounded preview buffer by design.
|
||||||
|
- Unexpected write behavior after repeated overwrite:
|
||||||
|
- Check heap stats and ensure no panic; Stage21 releases old heap payload before replacing.
|
||||||
Reference in New Issue
Block a user