This commit is contained in:
2026-04-11 19:01:07 +08:00
parent 3bcff3c829
commit 20553735cd
17 changed files with 1363 additions and 19 deletions

View 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)

View 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

View File

@@ -0,0 +1,2 @@
"filename", "language", "", "comment", "blank", "total"
"Total", "-", , 0, 0, 0
1 filename language comment blank total
2 Total - 0 0 0

View 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)

View 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 |
+----------+----------+------------+------------+------------+------------+

View 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 filename language PowerShell CMake Markdown Batch Makefile Properties C++ C Go Assembly Rust comment blank total
2 d:\Projects\C\cleonos\CMakeLists.txt CMake 0 535 0 0 0 0 0 0 0 0 0 75 610
3 d:\Projects\C\cleonos\Makefile Makefile 0 0 0 0 100 0 0 0 0 0 0 22 122
4 d:\Projects\C\cleonos\cleonos\c\apps\elfrunner_kmain.c C 0 0 0 0 0 0 0 6 0 0 0 3 9
5 d:\Projects\C\cleonos\cleonos\c\apps\elfrunner_main.c C 0 0 0 0 0 0 0 6 0 0 0 3 9
6 d:\Projects\C\cleonos\cleonos\c\apps\memc_kmain.c C 0 0 0 0 0 0 0 6 0 0 0 3 9
7 d:\Projects\C\cleonos\cleonos\c\apps\memc_main.c C 0 0 0 0 0 0 0 8 0 0 0 3 11
8 d:\Projects\C\cleonos\cleonos\c\apps\shell_main.c C 0 0 0 0 0 0 0 396 0 0 0 124 520
9 d:\Projects\C\cleonos\cleonos\c\apps\ttydrv_main.c C 0 0 0 0 0 0 0 6 0 0 0 3 9
10 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
11 d:\Projects\C\cleonos\cleonos\c\include\cleonos_syscall.h C++ 0 0 0 0 0 0 60 0 0 0 0 5 65
12 d:\Projects\C\cleonos\cleonos\c\src\runtime.c C 0 0 0 0 0 0 0 11 0 0 0 6 17
13 d:\Projects\C\cleonos\cleonos\c\src\syscall.c C 0 0 0 0 0 0 0 89 0 0 0 29 118
14 d:\Projects\C\cleonos\cleonos\c\stub.c C 0 0 0 0 0 0 0 3 0 0 4 2 9
15 d:\Projects\C\cleonos\cleonos\rust\src\lib.rs Rust 0 0 0 0 0 0 0 0 0 23 0 9 32
16 d:\Projects\C\cleonos\clks\arch\aarch64\boot.c C 0 0 0 0 0 0 0 6 0 0 0 1 7
17 d:\Projects\C\cleonos\clks\arch\x86_64\boot.c C 0 0 0 0 0 0 0 6 0 0 0 1 7
18 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
19 d:\Projects\C\cleonos\clks\drivers\serial\serial.c C 0 0 0 0 0 0 0 52 0 0 0 16 68
20 d:\Projects\C\cleonos\clks\drivers\video\font8x8.c C 0 0 0 0 0 0 0 67 0 0 0 8 75
21 d:\Projects\C\cleonos\clks\drivers\video\font8x8.h C++ 0 0 0 0 0 0 5 0 0 0 0 3 8
22 d:\Projects\C\cleonos\clks\drivers\video\framebuffer.c C 0 0 0 0 0 0 0 162 0 0 0 42 204
23 d:\Projects\C\cleonos\clks\drivers\video\psf_font.c C 0 0 0 0 0 0 0 159 0 0 0 35 194
24 d:\Projects\C\cleonos\clks\drivers\video\psf_font.h C++ 0 0 0 0 0 0 14 0 0 0 0 4 18
25 d:\Projects\C\cleonos\clks\include\clks\boot.h C++ 0 0 0 0 0 0 11 0 0 0 0 4 15
26 d:\Projects\C\cleonos\clks\include\clks\compiler.h C++ 0 0 0 0 0 0 13 0 0 0 0 4 17
27 d:\Projects\C\cleonos\clks\include\clks\cpu.h C++ 0 0 0 0 0 0 20 0 0 0 0 4 24
28 d:\Projects\C\cleonos\clks\include\clks\driver.h C++ 0 0 0 0 0 0 28 0 0 0 0 8 36
29 d:\Projects\C\cleonos\clks\include\clks\elf64.h C++ 0 0 0 0 0 0 27 0 0 0 0 8 35
30 d:\Projects\C\cleonos\clks\include\clks\elfrunner.h C++ 0 0 0 0 0 0 6 0 0 0 0 3 9
31 d:\Projects\C\cleonos\clks\include\clks\exec.h C++ 0 0 0 0 0 0 8 0 0 0 0 3 11
32 d:\Projects\C\cleonos\clks\include\clks\framebuffer.h C++ 0 0 0 0 0 0 20 0 0 0 0 4 24
33 d:\Projects\C\cleonos\clks\include\clks\fs.h C++ 0 0 0 0 0 0 23 0 0 0 0 7 30
34 d:\Projects\C\cleonos\clks\include\clks\heap.h C++ 0 0 0 0 0 0 15 0 0 0 0 4 19
35 d:\Projects\C\cleonos\clks\include\clks\interrupts.h C++ 0 0 0 0 0 0 6 0 0 0 0 3 9
36 d:\Projects\C\cleonos\clks\include\clks\kelf.h C++ 0 0 0 0 0 0 9 0 0 0 0 5 14
37 d:\Projects\C\cleonos\clks\include\clks\kernel.h C++ 0 0 0 0 0 0 4 0 0 0 0 2 6
38 d:\Projects\C\cleonos\clks\include\clks\keyboard.h C++ 0 0 0 0 0 0 19 0 0 0 0 5 24
39 d:\Projects\C\cleonos\clks\include\clks\limine.h C++ 0 0 0 0 0 0 132 0 0 0 0 24 156
40 d:\Projects\C\cleonos\clks\include\clks\log.h C++ 0 0 0 0 0 0 12 0 0 0 0 4 16
41 d:\Projects\C\cleonos\clks\include\clks\pmm.h C++ 0 0 0 0 0 0 16 0 0 0 0 5 21
42 d:\Projects\C\cleonos\clks\include\clks\ramdisk.h C++ 0 0 0 0 0 0 17 0 0 0 0 8 25
43 d:\Projects\C\cleonos\clks\include\clks\scheduler.h C++ 0 0 0 0 0 0 18 0 0 0 0 5 23
44 d:\Projects\C\cleonos\clks\include\clks\serial.h C++ 0 0 0 0 0 0 6 0 0 0 0 2 8
45 d:\Projects\C\cleonos\clks\include\clks\service.h C++ 0 0 0 0 0 0 31 0 0 0 0 8 39
46 d:\Projects\C\cleonos\clks\include\clks\shell.h C++ 0 0 0 0 0 0 7 0 0 0 0 3 10
47 d:\Projects\C\cleonos\clks\include\clks\string.h C++ 0 0 0 0 0 0 9 0 0 0 0 3 12
48 d:\Projects\C\cleonos\clks\include\clks\syscall.h C++ 0 0 0 0 0 0 34 0 0 0 0 4 38
49 d:\Projects\C\cleonos\clks\include\clks\task.h C++ 0 0 0 0 0 0 24 0 0 0 0 7 31
50 d:\Projects\C\cleonos\clks\include\clks\tty.h C++ 0 0 0 0 0 0 12 0 0 0 0 5 17
51 d:\Projects\C\cleonos\clks\include\clks\types.h C++ 0 0 0 0 0 0 17 0 0 0 0 6 23
52 d:\Projects\C\cleonos\clks\include\clks\userland.h C++ 0 0 0 0 0 0 11 0 0 0 0 4 15
53 d:\Projects\C\cleonos\clks\kernel\driver.c C 0 0 0 0 0 0 0 163 0 0 0 48 211
54 d:\Projects\C\cleonos\clks\kernel\elf64.c C 0 0 0 0 0 0 0 170 0 0 0 52 222
55 d:\Projects\C\cleonos\clks\kernel\elfrunner.c C 0 0 0 0 0 0 0 30 0 0 0 8 38
56 d:\Projects\C\cleonos\clks\kernel\exec.c C 0 0 0 0 0 0 0 51 0 0 0 15 66
57 d:\Projects\C\cleonos\clks\kernel\fs.c C 0 0 0 0 0 0 0 698 0 0 0 220 918
58 d:\Projects\C\cleonos\clks\kernel\heap.c C 0 0 0 0 0 0 0 134 0 0 0 42 176
59 d:\Projects\C\cleonos\clks\kernel\interrupts.c C 0 0 0 0 0 0 0 298 0 0 0 43 341
60 d:\Projects\C\cleonos\clks\kernel\kelf.c C 0 0 0 0 0 0 0 203 0 0 1 53 257
61 d:\Projects\C\cleonos\clks\kernel\keyboard.c C 0 0 0 0 0 0 0 199 0 0 0 42 241
62 d:\Projects\C\cleonos\clks\kernel\kmain.c C 0 0 0 0 0 0 0 180 0 0 1 50 231
63 d:\Projects\C\cleonos\clks\kernel\limine_requests.c C 0 0 0 0 0 0 0 76 0 0 0 26 102
64 d:\Projects\C\cleonos\clks\kernel\log.c C 0 0 0 0 0 0 0 79 0 0 0 17 96
65 d:\Projects\C\cleonos\clks\kernel\pmm.c C 0 0 0 0 0 0 0 82 0 0 0 23 105
66 d:\Projects\C\cleonos\clks\kernel\ramdisk.c C 0 0 0 0 0 0 0 172 0 0 0 50 222
67 d:\Projects\C\cleonos\clks\kernel\scheduler.c C 0 0 0 0 0 0 0 127 0 0 0 42 169
68 d:\Projects\C\cleonos\clks\kernel\service.c C 0 0 0 0 0 0 0 113 0 0 0 34 147
69 d:\Projects\C\cleonos\clks\kernel\shell.c C 0 0 0 0 0 0 0 860 0 0 0 230 1090
70 d:\Projects\C\cleonos\clks\kernel\syscall.c C 0 0 0 0 0 0 0 243 0 0 0 50 293
71 d:\Projects\C\cleonos\clks\kernel\tty.c C 0 0 0 0 0 0 0 275 0 0 0 77 352
72 d:\Projects\C\cleonos\clks\kernel\userland.c C 0 0 0 0 0 0 0 113 0 0 0 32 145
73 d:\Projects\C\cleonos\clks\lib\string.c C 0 0 0 0 0 0 0 54 0 0 0 16 70
74 d:\Projects\C\cleonos\cmake\check_tools.cmake CMake 0 32 0 0 0 0 0 0 0 0 0 6 38
75 d:\Projects\C\cleonos\cmake\log.cmake CMake 0 30 0 0 0 0 0 0 0 0 0 6 36
76 d:\Projects\C\cleonos\cmake\log_emit.cmake CMake 0 23 0 0 0 0 0 0 0 0 0 6 29
77 d:\Projects\C\cleonos\cmake\setup_limine.cmake CMake 0 100 0 0 0 0 0 0 0 0 0 18 118
78 d:\Projects\C\cleonos\configs\limine.conf Properties 0 0 0 0 0 6 0 0 0 0 0 1 7
79 d:\Projects\C\cleonos\docs\README.md Markdown 0 0 22 0 0 0 0 0 0 0 0 2 24
80 d:\Projects\C\cleonos\docs\stage1.md Markdown 0 0 41 0 0 0 0 0 0 0 0 5 46
81 d:\Projects\C\cleonos\docs\stage10.md Markdown 0 0 34 0 0 0 0 0 0 0 0 6 40
82 d:\Projects\C\cleonos\docs\stage11.md Markdown 0 0 36 0 0 0 0 0 0 0 0 5 41
83 d:\Projects\C\cleonos\docs\stage12.md Markdown 0 0 40 0 0 0 0 0 0 0 0 6 46
84 d:\Projects\C\cleonos\docs\stage13.md Markdown 0 0 34 0 0 0 0 0 0 0 0 6 40
85 d:\Projects\C\cleonos\docs\stage14.md Markdown 0 0 44 0 0 0 0 0 0 0 0 8 52
86 d:\Projects\C\cleonos\docs\stage15.md Markdown 0 0 47 0 0 0 0 0 0 0 0 7 54
87 d:\Projects\C\cleonos\docs\stage2.md Markdown 0 0 30 0 0 0 0 0 0 0 0 5 35
88 d:\Projects\C\cleonos\docs\stage20.md Markdown 0 0 46 0 0 0 0 0 0 0 0 6 52
89 d:\Projects\C\cleonos\docs\stage21.md Markdown 0 0 72 0 0 0 0 0 0 0 0 7 79
90 d:\Projects\C\cleonos\docs\stage3.md Markdown 0 0 29 0 0 0 0 0 0 0 0 5 34
91 d:\Projects\C\cleonos\docs\stage4.md Markdown 0 0 30 0 0 0 0 0 0 0 0 5 35
92 d:\Projects\C\cleonos\docs\stage5.md Markdown 0 0 29 0 0 0 0 0 0 0 0 5 34
93 d:\Projects\C\cleonos\docs\stage6.md Markdown 0 0 30 0 0 0 0 0 0 0 0 6 36
94 d:\Projects\C\cleonos\docs\stage7.md Markdown 0 0 34 0 0 0 0 0 0 0 0 6 40
95 d:\Projects\C\cleonos\docs\stage8.md Markdown 0 0 31 0 0 0 0 0 0 0 0 6 37
96 d:\Projects\C\cleonos\docs\stage9.md Markdown 0 0 31 0 0 0 0 0 0 0 0 6 37
97 d:\Projects\C\cleonos\ramdisk\shell\init.cmd Batch 0 0 0 11 0 0 0 0 0 0 0 2 13
98 d:\Projects\C\cleonos\scripts\gen-tty-psf.ps1 PowerShell 64 0 0 0 0 0 0 0 0 0 2 18 84
99 Total - 64 720 660 11 100 6 640 5303 108 23 8 1894 9537

File diff suppressed because one or more lines are too long

View 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)

View 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 |
+---------------------------------------------------------------+-------------+------------+------------+------------+------------+

View File

@@ -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);
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_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);
#endif

View File

@@ -1,5 +1,6 @@
#include <clks/boot.h>
#include <clks/fs.h>
#include <clks/heap.h>
#include <clks/log.h>
#include <clks/ramdisk.h>
#include <clks/string.h>
@@ -8,6 +9,8 @@
#define CLKS_FS_MAX_NODES 512U
#define CLKS_FS_PATH_MAX CLKS_RAMDISK_PATH_MAX
#define CLKS_FS_NODE_FLAG_HEAP_DATA 0x0001U
struct clks_fs_node {
clks_bool used;
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 u16 clks_fs_nodes_used = 0U;
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) {
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;
}
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) {
u16 i;
@@ -176,12 +207,54 @@ static clks_bool clks_fs_split_parent(const char *internal_path, char *parent_ou
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,
enum clks_fs_node_type type,
u16 parent,
const void *data,
u64 size) {
i32 existing;
i32 slot;
usize path_len;
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) {
node->data = data;
node->size = size;
node->reserved = 0U;
}
node->used = CLKS_TRUE;
return existing;
}
if (clks_fs_nodes_used >= CLKS_FS_MAX_NODES) {
slot = clks_fs_alloc_slot();
if (slot < 0) {
return -1;
}
clks_fs_nodes[clks_fs_nodes_used].used = CLKS_TRUE;
clks_fs_nodes[clks_fs_nodes_used].type = type;
clks_fs_nodes[clks_fs_nodes_used].parent = parent;
clks_fs_nodes[clks_fs_nodes_used].reserved = 0U;
clks_fs_nodes[clks_fs_nodes_used].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_memcpy(clks_fs_nodes[clks_fs_nodes_used].path, internal_path, path_len + 1U);
clks_fs_nodes[(u16)slot].used = CLKS_TRUE;
clks_fs_nodes[(u16)slot].type = type;
clks_fs_nodes[(u16)slot].parent = parent;
clks_fs_nodes[(u16)slot].reserved = 0U;
clks_fs_nodes[(u16)slot].data = (type == CLKS_FS_NODE_FILE) ? data : CLKS_NULL;
clks_fs_nodes[(u16)slot].size = (type == CLKS_FS_NODE_FILE) ? size : 0ULL;
clks_memcpy(clks_fs_nodes[(u16)slot].path, internal_path, path_len + 1U);
clks_fs_nodes_used++;
return (i32)(clks_fs_nodes_used - 1U);
return slot;
}
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;
}
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) {
const struct limine_file *module;
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;
}
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;
}
@@ -563,10 +675,244 @@ clks_bool clks_fs_get_child_name(const char *dir_path, u64 index, char *out_name
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) {
u16 i;
u64 used = 0ULL;
if (clks_fs_ready == CLKS_FALSE) {
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;
}

View File

@@ -96,7 +96,7 @@ void clks_kernel_main(void) {
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) {
clks_log(CLKS_LOG_WARN, "VIDEO", "NO FRAMEBUFFER FROM LIMINE");

View File

@@ -23,6 +23,7 @@ static char clks_shell_line[CLKS_SHELL_LINE_MAX];
static usize clks_shell_line_len = 0U;
static usize clks_shell_cursor = 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 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;
}
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) {
clks_shell_writeln("commands:");
clks_shell_writeln(" help");
clks_shell_writeln(" ls [dir]");
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(" clear");
clks_shell_writeln(" kbdstat");
@@ -403,12 +571,18 @@ static void clks_shell_cmd_help(void) {
static void clks_shell_cmd_ls(const char *arg) {
struct clks_fs_node_info info;
const char *path = arg;
char path[CLKS_SHELL_PATH_MAX];
const char *target = arg;
u64 count;
u64 i;
if (path == CLKS_NULL || path[0] == '\0') {
path = "/";
if (target == CLKS_NULL || target[0] == '\0') {
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) {
@@ -439,6 +613,7 @@ static void clks_shell_cmd_cat(const char *arg) {
const void *data;
u64 size = 0ULL;
u64 copy_len;
char path[CLKS_SHELL_PATH_MAX];
char out[CLKS_SHELL_CAT_LIMIT + 1U];
if (arg == CLKS_NULL || arg[0] == '\0') {
@@ -446,7 +621,12 @@ static void clks_shell_cmd_cat(const char *arg) {
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) {
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) {
char path[CLKS_SHELL_PATH_MAX];
u64 status = (u64)-1;
@@ -540,6 +857,41 @@ static void clks_shell_execute_line(const char *line) {
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) {
clks_shell_cmd_exec(arg);
return;
@@ -686,10 +1038,12 @@ static void clks_shell_handle_char(char ch) {
clks_shell_render_line();
}
}
void clks_shell_init(void) {
clks_shell_reset_line();
clks_shell_history_count = 0U;
clks_shell_history_cancel_nav();
clks_shell_copy_line(clks_shell_cwd, sizeof(clks_shell_cwd), "/");
if (clks_tty_ready() == CLKS_FALSE) {
clks_shell_ready = CLKS_FALSE;
@@ -702,6 +1056,7 @@ void clks_shell_init(void) {
clks_shell_writeln("");
clks_shell_writeln("CLeonOS interactive shell ready");
clks_shell_writeln("type 'help' for commands");
clks_shell_writeln("/temp is writable in kernel shell mode");
clks_shell_prompt();
clks_log(CLKS_LOG_INFO, "SHELL", "INTERACTIVE LOOP ONLINE");

View File

@@ -1,7 +1,7 @@
timeout: 3
verbose: yes
/CLeonOS Stage1
/CLeonOS Stage21
protocol: limine
kernel_path: boot():/boot/clks_kernel.elf
module_path: boot():/boot/cleonos_ramdisk.tar

24
docs/README.md Normal file
View 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
View 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
View 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.