diff --git a/docs/html/_r_e_a_d_m_e_8md.html b/docs/html/_r_e_a_d_m_e_8md.html new file mode 100644 index 0000000..1f49fcb --- /dev/null +++ b/docs/html/_r_e_a_d_m_e_8md.html @@ -0,0 +1,113 @@ + + + + + + + +AstraKernel: README.md File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
README.md File Reference
+
+
+
+
+ +
+ + + + diff --git a/docs/html/annotated.html b/docs/html/annotated.html new file mode 100644 index 0000000..2cb2476 --- /dev/null +++ b/docs/html/annotated.html @@ -0,0 +1,112 @@ + + + + + + + +AstraKernel: Class List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + +
 Cdateval
 CFormat_StateStores the current numeric value and formatting flags
 Ctimeval
+
+
+
+
+ + + + diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js new file mode 100644 index 0000000..6c731cc --- /dev/null +++ b/docs/html/annotated_dup.js @@ -0,0 +1,6 @@ +var annotated_dup = +[ + [ "dateval", "structdateval.html", "structdateval" ], + [ "Format_State", "struct_format___state.html", "struct_format___state" ], + [ "timeval", "structtimeval.html", "structtimeval" ] +]; \ No newline at end of file diff --git a/docs/html/classes.html b/docs/html/classes.html new file mode 100644 index 0000000..e013cdb --- /dev/null +++ b/docs/html/classes.html @@ -0,0 +1,117 @@ + + + + + + + +AstraKernel: Class Index + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
D | F | T
+
+
+
D
+
dateval
+
+
F
+
Format_State
+
+
T
+
timeval
+
+
+
+
+ + + + diff --git a/docs/html/clear_8c.html b/docs/html/clear_8c.html new file mode 100644 index 0000000..beaf500 --- /dev/null +++ b/docs/html/clear_8c.html @@ -0,0 +1,159 @@ + + + + + + + +AstraKernel: src/user/clear.c File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
clear.c File Reference
+
+
+
#include "printf.h"
+
+Include dependency graph for clear.c:
+
+
+
+
+

Go to the source code of this file.

+ + + + +

+Functions

void clear (void)
 Clears the terminal screen and moves the cursor to the home position.
+

Function Documentation

+ +

◆ clear()

+ +
+
+ + + + + + + +
void clear (void )
+
+ +

Clears the terminal screen and moves the cursor to the home position.

+ +

Definition at line 6 of file clear.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/clear_8c.js b/docs/html/clear_8c.js new file mode 100644 index 0000000..fdb56db --- /dev/null +++ b/docs/html/clear_8c.js @@ -0,0 +1,4 @@ +var clear_8c = +[ + [ "clear", "clear_8c.html#ae683fe63c33c388e9ba1c6392dd477eb", null ] +]; \ No newline at end of file diff --git a/docs/html/clear_8c__incl.map b/docs/html/clear_8c__incl.map new file mode 100644 index 0000000..dd3590c --- /dev/null +++ b/docs/html/clear_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/html/clear_8c__incl.md5 b/docs/html/clear_8c__incl.md5 new file mode 100644 index 0000000..907cbe2 --- /dev/null +++ b/docs/html/clear_8c__incl.md5 @@ -0,0 +1 @@ +465899045d31fbbf769bc1d65646b9d2 \ No newline at end of file diff --git a/docs/html/clear_8c__incl.svg b/docs/html/clear_8c__incl.svg new file mode 100644 index 0000000..f300f1a --- /dev/null +++ b/docs/html/clear_8c__incl.svg @@ -0,0 +1,111 @@ + + + + + + +src/user/clear.c + + +Node1 + + +src/user/clear.c + + + + + +Node2 + + +printf.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdarg.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +stddef.h + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +stdbool.h + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +stdint.h + + + + + +Node2->Node6 + + + + + + + + diff --git a/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.map b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.map new file mode 100644 index 0000000..ae1ceff --- /dev/null +++ b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.md5 b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.md5 new file mode 100644 index 0000000..c4ef246 --- /dev/null +++ b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.md5 @@ -0,0 +1 @@ +4540314a2f8c50eeef58cf4712e1df58 \ No newline at end of file diff --git a/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.svg b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.svg new file mode 100644 index 0000000..3e290ab --- /dev/null +++ b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.svg @@ -0,0 +1,237 @@ + + + + + + +clear + + +Node1 + + +clear + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +put_integers + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +put_unsigned + + + + + +Node2->Node5 + + + + + + + + +Node9 + + +putc + + + + + +Node2->Node9 + + + + + + + + +Node10 + + +puts + + + + + +Node2->Node10 + + + + + + + + +Node4 + + +put_signed + + + + + +Node3->Node4 + + + + + + + + +Node3->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node4->Node9 + + + + + + + + +Node6 + + +_divmod + + + + + +Node5->Node6 + + + + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node6->Node7 + + + + + + + + +Node7->Node2 + + + + + + + + +Node8 + + +kernel_halt + + + + + +Node7->Node8 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.map b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.map new file mode 100644 index 0000000..a375e31 --- /dev/null +++ b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.md5 b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.md5 new file mode 100644 index 0000000..5814289 --- /dev/null +++ b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.md5 @@ -0,0 +1 @@ +ddbc601a8ef26a8ce58dcb65cf61072e \ No newline at end of file diff --git a/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.svg b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.svg new file mode 100644 index 0000000..d078432 --- /dev/null +++ b/docs/html/clear_8c_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +clear + + +Node1 + + +clear + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/clear_8c_source.html b/docs/html/clear_8c_source.html new file mode 100644 index 0000000..981fd31 --- /dev/null +++ b/docs/html/clear_8c_source.html @@ -0,0 +1,118 @@ + + + + + + + +AstraKernel: src/user/clear.c Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
clear.c
+
+
+Go to the documentation of this file.
1#include "printf.h"
+
2
+
+
6void clear(void)
+
7{
+
8 printf("\x1B[2J");
+
9 printf("\x1B[H");
+
10}
+
+
void clear(void)
Clears the terminal screen and moves the cursor to the home position.
Definition clear.c:6
+
void printf(const char *fmt,...)
Kernel printf implementation using UART output.
Definition printf.c:205
+
Minimal kernel printf/puts/getlines interface for freestanding systems.
+
+
+
+ + + + diff --git a/docs/html/clear_8h.html b/docs/html/clear_8h.html new file mode 100644 index 0000000..fd8d7fd --- /dev/null +++ b/docs/html/clear_8h.html @@ -0,0 +1,158 @@ + + + + + + + +AstraKernel: include/clear.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
clear.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + +

+Functions

void clear (void)
 Clears the terminal screen and moves the cursor to the home position.
+

Function Documentation

+ +

◆ clear()

+ +
+
+ + + + + + + +
void clear (void )
+
+ +

Clears the terminal screen and moves the cursor to the home position.

+ +

Definition at line 6 of file clear.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/clear_8h.js b/docs/html/clear_8h.js new file mode 100644 index 0000000..4a5c5eb --- /dev/null +++ b/docs/html/clear_8h.js @@ -0,0 +1,4 @@ +var clear_8h = +[ + [ "clear", "clear_8h.html#ae683fe63c33c388e9ba1c6392dd477eb", null ] +]; \ No newline at end of file diff --git a/docs/html/clear_8h__dep__incl.map b/docs/html/clear_8h__dep__incl.map new file mode 100644 index 0000000..64db07a --- /dev/null +++ b/docs/html/clear_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/clear_8h__dep__incl.md5 b/docs/html/clear_8h__dep__incl.md5 new file mode 100644 index 0000000..1ff5a5a --- /dev/null +++ b/docs/html/clear_8h__dep__incl.md5 @@ -0,0 +1 @@ +95eebc3435dbbf63fd61900f34430a7d \ No newline at end of file diff --git a/docs/html/clear_8h__dep__incl.svg b/docs/html/clear_8h__dep__incl.svg new file mode 100644 index 0000000..6f8ab92 --- /dev/null +++ b/docs/html/clear_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +include/clear.h + + +Node1 + + +include/clear.h + + + + + +Node2 + + +src/kernel/kernel.c + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.map b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.map new file mode 100644 index 0000000..ae1ceff --- /dev/null +++ b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.md5 b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.md5 new file mode 100644 index 0000000..c4ef246 --- /dev/null +++ b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.md5 @@ -0,0 +1 @@ +4540314a2f8c50eeef58cf4712e1df58 \ No newline at end of file diff --git a/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.svg b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.svg new file mode 100644 index 0000000..3e290ab --- /dev/null +++ b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_cgraph.svg @@ -0,0 +1,237 @@ + + + + + + +clear + + +Node1 + + +clear + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +put_integers + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +put_unsigned + + + + + +Node2->Node5 + + + + + + + + +Node9 + + +putc + + + + + +Node2->Node9 + + + + + + + + +Node10 + + +puts + + + + + +Node2->Node10 + + + + + + + + +Node4 + + +put_signed + + + + + +Node3->Node4 + + + + + + + + +Node3->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node4->Node9 + + + + + + + + +Node6 + + +_divmod + + + + + +Node5->Node6 + + + + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node6->Node7 + + + + + + + + +Node7->Node2 + + + + + + + + +Node8 + + +kernel_halt + + + + + +Node7->Node8 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.map b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.map new file mode 100644 index 0000000..a375e31 --- /dev/null +++ b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.md5 b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.md5 new file mode 100644 index 0000000..5814289 --- /dev/null +++ b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.md5 @@ -0,0 +1 @@ +ddbc601a8ef26a8ce58dcb65cf61072e \ No newline at end of file diff --git a/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.svg b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.svg new file mode 100644 index 0000000..d078432 --- /dev/null +++ b/docs/html/clear_8h_ae683fe63c33c388e9ba1c6392dd477eb_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +clear + + +Node1 + + +clear + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/clear_8h_source.html b/docs/html/clear_8h_source.html new file mode 100644 index 0000000..dbe7fd5 --- /dev/null +++ b/docs/html/clear_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +AstraKernel: include/clear.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
clear.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3void clear(void);
+
4
+
void clear(void)
Clears the terminal screen and moves the cursor to the home position.
Definition clear.c:6
+
+
+
+ + + + diff --git a/docs/html/clipboard.js b/docs/html/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/docs/html/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/html/cookie.js b/docs/html/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/html/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/html/datetime_8c.html b/docs/html/datetime_8c.html new file mode 100644 index 0000000..ad4d631 --- /dev/null +++ b/docs/html/datetime_8c.html @@ -0,0 +1,267 @@ + + + + + + + +AstraKernel: src/user/datetime.c File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
datetime.c File Reference
+
+
+
#include <stddef.h>
+#include <stdint.h>
+#include "datetime.h"
+
+Include dependency graph for datetime.c:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + +

+Macros

#define RTCDR   (*(volatile uint32_t *)0x101e8000)
#define SECONDS_IN_YEAR   31556926
#define SECONDS_IN_MONTH   2629743
#define SECONDS_IN_DAY   86400
#define LEAP_YEARS_BEFORE_1970   477
+ + + +

+Functions

uint32_t getdate (dateval *date_struct)
uint32_t gettime (timeval *time_struct)
+

Macro Definition Documentation

+ +

◆ LEAP_YEARS_BEFORE_1970

+ +
+
+ + + + +
#define LEAP_YEARS_BEFORE_1970   477
+
+ +

Definition at line 13 of file datetime.c.

+ +
+
+ +

◆ RTCDR

+ +
+
+ + + + +
#define RTCDR   (*(volatile uint32_t *)0x101e8000)
+
+ +

Definition at line 8 of file datetime.c.

+ +
+
+ +

◆ SECONDS_IN_DAY

+ +
+
+ + + + +
#define SECONDS_IN_DAY   86400
+
+ +

Definition at line 12 of file datetime.c.

+ +
+
+ +

◆ SECONDS_IN_MONTH

+ +
+
+ + + + +
#define SECONDS_IN_MONTH   2629743
+
+ +

Definition at line 11 of file datetime.c.

+ +
+
+ +

◆ SECONDS_IN_YEAR

+ +
+
+ + + + +
#define SECONDS_IN_YEAR   31556926
+
+ +

Definition at line 10 of file datetime.c.

+ +
+
+

Function Documentation

+ +

◆ getdate()

+ +
+
+ + + + + + + +
uint32_t getdate (dateval * date_struct)
+
+ +

Definition at line 15 of file datetime.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ gettime()

+ +
+
+ + + + + + + +
uint32_t gettime (timeval * time_struct)
+
+ +

Definition at line 49 of file datetime.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/datetime_8c.js b/docs/html/datetime_8c.js new file mode 100644 index 0000000..0e4ed48 --- /dev/null +++ b/docs/html/datetime_8c.js @@ -0,0 +1,10 @@ +var datetime_8c = +[ + [ "LEAP_YEARS_BEFORE_1970", "datetime_8c.html#adbaf12c2d2bb87fcac509cbf26d9138a", null ], + [ "RTCDR", "datetime_8c.html#a2dff2dfb11335c4e93f29925ee2a2792", null ], + [ "SECONDS_IN_DAY", "datetime_8c.html#ab8e2596e9eb4c7f02aa52caa4c07ff90", null ], + [ "SECONDS_IN_MONTH", "datetime_8c.html#abc6b438d643dc4b10ef34d427e92d213", null ], + [ "SECONDS_IN_YEAR", "datetime_8c.html#a599d171dc6323cb2705efd42dc2e0add", null ], + [ "getdate", "datetime_8c.html#add26ce10819b28be2718dcdab0117eb2", null ], + [ "gettime", "datetime_8c.html#ae5ad61ac69c1f40d86ae1feba81b1836", null ] +]; \ No newline at end of file diff --git a/docs/html/datetime_8c__incl.map b/docs/html/datetime_8c__incl.map new file mode 100644 index 0000000..f622d75 --- /dev/null +++ b/docs/html/datetime_8c__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/html/datetime_8c__incl.md5 b/docs/html/datetime_8c__incl.md5 new file mode 100644 index 0000000..cc51f30 --- /dev/null +++ b/docs/html/datetime_8c__incl.md5 @@ -0,0 +1 @@ +06bbda484e990a97c4645a8a419defe5 \ No newline at end of file diff --git a/docs/html/datetime_8c__incl.svg b/docs/html/datetime_8c__incl.svg new file mode 100644 index 0000000..4ce0daf --- /dev/null +++ b/docs/html/datetime_8c__incl.svg @@ -0,0 +1,84 @@ + + + + + + +src/user/datetime.c + + +Node1 + + +src/user/datetime.c + + + + + +Node2 + + +stddef.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +datetime.h + + + + + +Node1->Node4 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.map b/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.map new file mode 100644 index 0000000..6e5475e --- /dev/null +++ b/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.md5 b/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.md5 new file mode 100644 index 0000000..0a9c69c --- /dev/null +++ b/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.md5 @@ -0,0 +1 @@ +22071e5d1b63b3436c80088fd2b6fb26 \ No newline at end of file diff --git a/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.svg b/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.svg new file mode 100644 index 0000000..dc16b1f --- /dev/null +++ b/docs/html/datetime_8c_add26ce10819b28be2718dcdab0117eb2_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +getdate + + +Node1 + + +getdate + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.map b/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.map new file mode 100644 index 0000000..e746a5f --- /dev/null +++ b/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.md5 b/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.md5 new file mode 100644 index 0000000..bd43ad1 --- /dev/null +++ b/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.md5 @@ -0,0 +1 @@ +0ebcad9c716b2199859d10cad56de30d \ No newline at end of file diff --git a/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.svg b/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.svg new file mode 100644 index 0000000..68f48f1 --- /dev/null +++ b/docs/html/datetime_8c_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +gettime + + +Node1 + + +gettime + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/datetime_8c_source.html b/docs/html/datetime_8c_source.html new file mode 100644 index 0000000..a697e32 --- /dev/null +++ b/docs/html/datetime_8c_source.html @@ -0,0 +1,191 @@ + + + + + + + +AstraKernel: src/user/datetime.c Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
datetime.c
+
+
+Go to the documentation of this file.
1#include <stddef.h>
+
2#include <stdint.h>
+
3#include "datetime.h"
+
4
+
5_Static_assert(sizeof(uint32_t) == 4, "uint32_t must be 4 bytes");
+
6
+
7// TODO: Potentially move those macros to utils file or something
+
8#define RTCDR (*(volatile uint32_t *)0x101e8000) // RTC Register
+
9
+
10#define SECONDS_IN_YEAR 31556926
+
11#define SECONDS_IN_MONTH 2629743
+
12#define SECONDS_IN_DAY 86400
+
13#define LEAP_YEARS_BEFORE_1970 477
+
14
+
+
15uint32_t getdate(dateval *date_struct)
+
16{
+
17 static uint32_t day_arr[12] = {31, 27, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // Initialize only once
+
18
+
19 if (date_struct != NULL)
+
20 {
+
21 uint32_t since_epoch = RTCDR;
+
22
+
23 date_struct->year = 1970 + since_epoch / SECONDS_IN_YEAR;
+
24 date_struct->month = 1 + (since_epoch / SECONDS_IN_MONTH) % 12;
+
25
+
26 uint32_t days_since_epoch = since_epoch / SECONDS_IN_DAY;
+
27 uint32_t leap_years_since_epoch = (date_struct->year / 4) - (date_struct->year / 100) + (date_struct->year / 400) - LEAP_YEARS_BEFORE_1970;
+
28 uint32_t not_leap_years = date_struct->year - 1970 - leap_years_since_epoch;
+
29
+
30 date_struct->day = days_since_epoch - (leap_years_since_epoch * 366) - (not_leap_years * 365);
+
31
+
32 uint32_t is_leap_year = ((date_struct->year % 4 == 0) && (date_struct->year % 100 != 0)) || (date_struct->year % 400 == 0);
+
33 day_arr[1] += is_leap_year; // Extra day if leap year
+
34
+
35 for (uint32_t i = 0; i < 12; i++)
+
36 {
+
37 if (date_struct->day > day_arr[i])
+
38 {
+
39 date_struct->day -= day_arr[i];
+
40 }
+
41 }
+
42
+
43 day_arr[1] -= is_leap_year; // Undo the leap year effect, if any
+
44 }
+
45
+
46 return RTCDR;
+
47}
+
+
48
+
+
49uint32_t gettime(timeval *time_struct)
+
50{
+
51 if (time_struct != NULL)
+
52 {
+
53 uint32_t since_epoch = RTCDR;
+
54
+
55 time_struct->secs = since_epoch % 60;
+
56 since_epoch /= 60;
+
57
+
58 time_struct->mins = since_epoch % 60;
+
59 since_epoch /= 60;
+
60
+
61 time_struct->hrs = since_epoch % 24;
+
62 }
+
63
+
64 return RTCDR;
+
65}
+
+
#define RTCDR
Definition datetime.c:8
+
#define SECONDS_IN_YEAR
Definition datetime.c:10
+
#define SECONDS_IN_DAY
Definition datetime.c:12
+
#define SECONDS_IN_MONTH
Definition datetime.c:11
+
#define LEAP_YEARS_BEFORE_1970
Definition datetime.c:13
+
uint32_t getdate(dateval *date_struct)
Definition datetime.c:15
+
uint32_t gettime(timeval *time_struct)
Definition datetime.c:49
+ + +
uint32_t month
Definition datetime.h:20
+
uint32_t year
Definition datetime.h:21
+
uint32_t day
Definition datetime.h:19
+ +
uint32_t secs
Definition datetime.h:14
+
uint32_t hrs
Definition datetime.h:12
+
uint32_t mins
Definition datetime.h:13
+
+
+
+ + + + diff --git a/docs/html/datetime_8h.html b/docs/html/datetime_8h.html new file mode 100644 index 0000000..a7eee22 --- /dev/null +++ b/docs/html/datetime_8h.html @@ -0,0 +1,186 @@ + + + + + + + +AstraKernel: include/datetime.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
datetime.h File Reference
+
+
+
#include <stdint.h>
+
+Include dependency graph for datetime.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + +

+Classes

struct  timeval
struct  dateval
+ + + +

+Functions

uint32_t getdate (dateval *date)
uint32_t gettime (timeval *time_struct)
+

Function Documentation

+ +

◆ getdate()

+ +
+
+ + + + + + + +
uint32_t getdate (dateval * date)
+
+ +

Definition at line 15 of file datetime.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ gettime()

+ +
+
+ + + + + + + +
uint32_t gettime (timeval * time_struct)
+
+ +

Definition at line 49 of file datetime.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/datetime_8h.js b/docs/html/datetime_8h.js new file mode 100644 index 0000000..a55855d --- /dev/null +++ b/docs/html/datetime_8h.js @@ -0,0 +1,7 @@ +var datetime_8h = +[ + [ "timeval", "structtimeval.html", "structtimeval" ], + [ "dateval", "structdateval.html", "structdateval" ], + [ "getdate", "datetime_8h.html#a722cd4f876f5d4dbe92c0eba1484bd3b", null ], + [ "gettime", "datetime_8h.html#ae5ad61ac69c1f40d86ae1feba81b1836", null ] +]; \ No newline at end of file diff --git a/docs/html/datetime_8h__dep__incl.map b/docs/html/datetime_8h__dep__incl.map new file mode 100644 index 0000000..c8d017e --- /dev/null +++ b/docs/html/datetime_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/datetime_8h__dep__incl.md5 b/docs/html/datetime_8h__dep__incl.md5 new file mode 100644 index 0000000..dbc5140 --- /dev/null +++ b/docs/html/datetime_8h__dep__incl.md5 @@ -0,0 +1 @@ +a8e506aea6a095b0d1faa7b8588632cd \ No newline at end of file diff --git a/docs/html/datetime_8h__dep__incl.svg b/docs/html/datetime_8h__dep__incl.svg new file mode 100644 index 0000000..f98816e --- /dev/null +++ b/docs/html/datetime_8h__dep__incl.svg @@ -0,0 +1,57 @@ + + + + + + +include/datetime.h + + +Node1 + + +include/datetime.h + + + + + +Node2 + + +src/kernel/kernel.c + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/user/datetime.c + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/datetime_8h__incl.map b/docs/html/datetime_8h__incl.map new file mode 100644 index 0000000..5f35a79 --- /dev/null +++ b/docs/html/datetime_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/datetime_8h__incl.md5 b/docs/html/datetime_8h__incl.md5 new file mode 100644 index 0000000..0b5fd99 --- /dev/null +++ b/docs/html/datetime_8h__incl.md5 @@ -0,0 +1 @@ +ceaadb9c3ec31ec75ab1e5fb3618b5b9 \ No newline at end of file diff --git a/docs/html/datetime_8h__incl.svg b/docs/html/datetime_8h__incl.svg new file mode 100644 index 0000000..7159f81 --- /dev/null +++ b/docs/html/datetime_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +include/datetime.h + + +Node1 + + +include/datetime.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.map b/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.map new file mode 100644 index 0000000..6e5475e --- /dev/null +++ b/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.md5 b/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.md5 new file mode 100644 index 0000000..0a9c69c --- /dev/null +++ b/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.md5 @@ -0,0 +1 @@ +22071e5d1b63b3436c80088fd2b6fb26 \ No newline at end of file diff --git a/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.svg b/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.svg new file mode 100644 index 0000000..dc16b1f --- /dev/null +++ b/docs/html/datetime_8h_a722cd4f876f5d4dbe92c0eba1484bd3b_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +getdate + + +Node1 + + +getdate + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.map b/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.map new file mode 100644 index 0000000..e746a5f --- /dev/null +++ b/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.md5 b/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.md5 new file mode 100644 index 0000000..bd43ad1 --- /dev/null +++ b/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.md5 @@ -0,0 +1 @@ +0ebcad9c716b2199859d10cad56de30d \ No newline at end of file diff --git a/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.svg b/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.svg new file mode 100644 index 0000000..68f48f1 --- /dev/null +++ b/docs/html/datetime_8h_ae5ad61ac69c1f40d86ae1feba81b1836_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +gettime + + +Node1 + + +gettime + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/datetime_8h_source.html b/docs/html/datetime_8h_source.html new file mode 100644 index 0000000..701d5aa --- /dev/null +++ b/docs/html/datetime_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +AstraKernel: include/datetime.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
datetime.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <stdint.h>
+
4
+
5#ifdef __cplusplus
+
6extern "C"
+
7{
+
8#endif
+
9
+
+
10 typedef struct
+
11 {
+
12 uint32_t hrs;
+
13 uint32_t mins;
+
14 uint32_t secs;
+
15 } timeval;
+
+
16
+
+
17 typedef struct
+
18 {
+
19 uint32_t day;
+
20 uint32_t month;
+
21 uint32_t year;
+
22
+
23 } dateval;
+
+
24
+
25 uint32_t getdate(dateval *date);
+
26 uint32_t gettime(timeval *time_struct);
+
27
+
28#ifdef __cplusplus
+
29}
+
30#endif
+
31
+
uint32_t getdate(dateval *date)
Definition datetime.c:15
+
uint32_t gettime(timeval *time_struct)
Definition datetime.c:49
+ +
uint32_t month
Definition datetime.h:20
+
uint32_t year
Definition datetime.h:21
+
uint32_t day
Definition datetime.h:19
+ +
uint32_t secs
Definition datetime.h:14
+
uint32_t hrs
Definition datetime.h:12
+
uint32_t mins
Definition datetime.h:13
+
+
+
+ + + + diff --git a/docs/html/dir_000002_000001.html b/docs/html/dir_000002_000001.html new file mode 100644 index 0000000..0db186b --- /dev/null +++ b/docs/html/dir_000002_000001.html @@ -0,0 +1,110 @@ + + + + + + + +AstraKernel: src/kernel -> include Relation + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ + + + diff --git a/docs/html/dir_000005_000001.html b/docs/html/dir_000005_000001.html new file mode 100644 index 0000000..9e27db9 --- /dev/null +++ b/docs/html/dir_000005_000001.html @@ -0,0 +1,110 @@ + + + + + + + +AstraKernel: user -> include Relation + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

user → include Relation

File in userIncludes file in include
clear.cprintf.h
datetime.cdatetime.h
printf.cprintf.h
string.cstring.h
+
+ +
+ + + + diff --git a/docs/html/dir_000006_000001.html b/docs/html/dir_000006_000001.html new file mode 100644 index 0000000..1739d1a --- /dev/null +++ b/docs/html/dir_000006_000001.html @@ -0,0 +1,110 @@ + + + + + + + +AstraKernel: src/user -> include Relation + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

user → include Relation

File in src/userIncludes file in include
clear.cprintf.h
datetime.cdatetime.h
printf.cpanic.h
printf.cprintf.h
string.cstring.h
+
+ +
+ + + + diff --git a/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e.html b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e.html new file mode 100644 index 0000000..7951512 --- /dev/null +++ b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e.html @@ -0,0 +1,126 @@ + + + + + + + +AstraKernel: user Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
user Directory Reference
+
+
+
+Directory dependency graph for user:
+
+
+
+ + + + + + +

+Files

 
clear.c
 
datetime.c
 
printf.c
 
string.c
+
+
+ +
+ + + + diff --git a/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e.js b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e.js new file mode 100644 index 0000000..01d9cad --- /dev/null +++ b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e.js @@ -0,0 +1,7 @@ +var dir_111cd2f11cffd6d6d28d89ee0389ee9e = +[ + [ "clear.c", "clear_8c.html", "clear_8c" ], + [ "datetime.c", "datetime_8c.html", "datetime_8c" ], + [ "printf.c", "printf_8c.html", "printf_8c" ], + [ "string.c", "string_8c.html", "string_8c" ] +]; \ No newline at end of file diff --git a/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.map b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.map new file mode 100644 index 0000000..10b250a --- /dev/null +++ b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.md5 b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.md5 new file mode 100644 index 0000000..f204b71 --- /dev/null +++ b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.md5 @@ -0,0 +1 @@ +50ea4723d9ba233c4f1738f5b6ae6a51 \ No newline at end of file diff --git a/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.svg b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.svg new file mode 100644 index 0000000..a9ef98f --- /dev/null +++ b/docs/html/dir_111cd2f11cffd6d6d28d89ee0389ee9e_dep.svg @@ -0,0 +1,43 @@ + + + + + + +user + + +dir_111cd2f11cffd6d6d28d89ee0389ee9e + + +user + + + + + +dir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + + +dir_111cd2f11cffd6d6d28d89ee0389ee9e->dir_d44c64559bbebec7f509842c48db8b23 + + + + + + +4 + + + + + diff --git a/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html b/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html new file mode 100644 index 0000000..81dab9b --- /dev/null +++ b/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html @@ -0,0 +1,118 @@ + + + + + + + +AstraKernel: docs Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
docs Directory Reference
+
+
+ + + +

+Directories

 
pages
+
+
+ +
+ + + + diff --git a/docs/html/dir_49e56c817e5e54854c35e136979f97ca.js b/docs/html/dir_49e56c817e5e54854c35e136979f97ca.js new file mode 100644 index 0000000..795bc89 --- /dev/null +++ b/docs/html/dir_49e56c817e5e54854c35e136979f97ca.js @@ -0,0 +1,4 @@ +var dir_49e56c817e5e54854c35e136979f97ca = +[ + [ "pages", "dir_ef3b2545113449f8f25e623a543d64e3.html", null ] +]; \ No newline at end of file diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..04570eb --- /dev/null +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,124 @@ + + + + + + + +AstraKernel: src Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
src Directory Reference
+
+
+
+Directory dependency graph for src:
+
+
+
+ + + + +

+Directories

 
kernel
 
user
+
+
+ +
+ + + + diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 0000000..c04bf8a --- /dev/null +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,5 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "kernel", "dir_cbd7f246bdf7dc0a50281a272327e6ed.html", "dir_cbd7f246bdf7dc0a50281a272327e6ed" ], + [ "user", "dir_8b0164eb0fb74115683f9812cb2f78f0.html", "dir_8b0164eb0fb74115683f9812cb2f78f0" ] +]; \ No newline at end of file diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map new file mode 100644 index 0000000..e893564 --- /dev/null +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 new file mode 100644 index 0000000..a69bef8 --- /dev/null +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -0,0 +1 @@ +6f4d626bb1d5325f61a87f62730ea5bd \ No newline at end of file diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg new file mode 100644 index 0000000..dc1931a --- /dev/null +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg @@ -0,0 +1,77 @@ + + + + + + +src + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + + + + + + +dir_68267d1309a1af8e8297ef4c3efbcdba +src + + + +dir_cbd7f246bdf7dc0a50281a272327e6ed + + +kernel + + + + + +dir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + + +dir_cbd7f246bdf7dc0a50281a272327e6ed->dir_d44c64559bbebec7f509842c48db8b23 + + + + + + +13 + + + + + +dir_8b0164eb0fb74115683f9812cb2f78f0 + + +user + + + + + +dir_8b0164eb0fb74115683f9812cb2f78f0->dir_d44c64559bbebec7f509842c48db8b23 + + + + + + +5 + + + + + diff --git a/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0.html b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0.html new file mode 100644 index 0000000..ac47a71 --- /dev/null +++ b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0.html @@ -0,0 +1,127 @@ + + + + + + + +AstraKernel: src/user Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
user Directory Reference
+
+
+
+Directory dependency graph for user:
+
+
+
+ + + + + + + +

+Files

 
clear.c
 
datetime.c
 
printf.c
 UART-backed minimal printf implementation for a freestanding kernel.
 
string.c
+
+
+ +
+ + + + diff --git a/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0.js b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0.js new file mode 100644 index 0000000..f8c7a9d --- /dev/null +++ b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0.js @@ -0,0 +1,7 @@ +var dir_8b0164eb0fb74115683f9812cb2f78f0 = +[ + [ "clear.c", "clear_8c.html", "clear_8c" ], + [ "datetime.c", "datetime_8c.html", "datetime_8c" ], + [ "printf.c", "printf_8c.html", "printf_8c" ], + [ "string.c", "string_8c.html", "string_8c" ] +]; \ No newline at end of file diff --git a/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.map b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.map new file mode 100644 index 0000000..fbad4aa --- /dev/null +++ b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.md5 b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.md5 new file mode 100644 index 0000000..523519c --- /dev/null +++ b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.md5 @@ -0,0 +1 @@ +35d2b1404be801ad1edb637ddfff0ae7 \ No newline at end of file diff --git a/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.svg b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.svg new file mode 100644 index 0000000..033b48f --- /dev/null +++ b/docs/html/dir_8b0164eb0fb74115683f9812cb2f78f0_dep.svg @@ -0,0 +1,51 @@ + + + + + + +src/user + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + +src + + + + + +dir_8b0164eb0fb74115683f9812cb2f78f0 + + +user + + + + + +dir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + + +dir_8b0164eb0fb74115683f9812cb2f78f0->dir_d44c64559bbebec7f509842c48db8b23 + + + + + + +5 + + + + + diff --git a/docs/html/dir_a61f22007e0f347cded0d82030ee545d.html b/docs/html/dir_a61f22007e0f347cded0d82030ee545d.html new file mode 100644 index 0000000..e282ab6 --- /dev/null +++ b/docs/html/dir_a61f22007e0f347cded0d82030ee545d.html @@ -0,0 +1,123 @@ + + + + + + + +AstraKernel: include/lib Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
lib Directory Reference
+
+
+
+Directory dependency graph for lib:
+
+
+
+ + + +

+Files

 
math.h
+
+
+ +
+ + + + diff --git a/docs/html/dir_a61f22007e0f347cded0d82030ee545d.js b/docs/html/dir_a61f22007e0f347cded0d82030ee545d.js new file mode 100644 index 0000000..4691ac4 --- /dev/null +++ b/docs/html/dir_a61f22007e0f347cded0d82030ee545d.js @@ -0,0 +1,4 @@ +var dir_a61f22007e0f347cded0d82030ee545d = +[ + [ "math.h", "math_8h.html", "math_8h" ] +]; \ No newline at end of file diff --git a/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.map b/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.map new file mode 100644 index 0000000..0d266d6 --- /dev/null +++ b/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.md5 b/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.md5 new file mode 100644 index 0000000..4825e3e --- /dev/null +++ b/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.md5 @@ -0,0 +1 @@ +6842e6d707e58c7ae50ec01570a5a66c \ No newline at end of file diff --git a/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.svg b/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.svg new file mode 100644 index 0000000..8739076 --- /dev/null +++ b/docs/html/dir_a61f22007e0f347cded0d82030ee545d_dep.svg @@ -0,0 +1,29 @@ + + + + + + +include/lib + +clusterdir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + + +dir_a61f22007e0f347cded0d82030ee545d + + +lib + + + + + diff --git a/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed.html b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed.html new file mode 100644 index 0000000..64d3ecf --- /dev/null +++ b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed.html @@ -0,0 +1,127 @@ + + + + + + + +AstraKernel: src/kernel Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kernel Directory Reference
+
+
+
+Directory dependency graph for kernel:
+
+
+
+ + + + + + + +

+Files

 
interrupt.c
 
kernel.c
 
memory.c
 
panic.c
 
start.s
+
+
+ +
+ + + + diff --git a/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed.js b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed.js new file mode 100644 index 0000000..b545f9c --- /dev/null +++ b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed.js @@ -0,0 +1,8 @@ +var dir_cbd7f246bdf7dc0a50281a272327e6ed = +[ + [ "interrupt.c", "interrupt_8c.html", "interrupt_8c" ], + [ "kernel.c", "kernel_8c.html", "kernel_8c" ], + [ "memory.c", "memory_8c.html", "memory_8c" ], + [ "panic.c", "panic_8c.html", "panic_8c" ], + [ "start.s", "start_8s.html", null ] +]; \ No newline at end of file diff --git a/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.map b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.map new file mode 100644 index 0000000..5c268db --- /dev/null +++ b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.md5 b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.md5 new file mode 100644 index 0000000..e6a6bff --- /dev/null +++ b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.md5 @@ -0,0 +1 @@ +6138d6baa168003da95fa19665480f18 \ No newline at end of file diff --git a/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.svg b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.svg new file mode 100644 index 0000000..4bdae54 --- /dev/null +++ b/docs/html/dir_cbd7f246bdf7dc0a50281a272327e6ed_dep.svg @@ -0,0 +1,51 @@ + + + + + + +src/kernel + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + +src + + + + + +dir_cbd7f246bdf7dc0a50281a272327e6ed + + +kernel + + + + + +dir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + + +dir_cbd7f246bdf7dc0a50281a272327e6ed->dir_d44c64559bbebec7f509842c48db8b23 + + + + + + +13 + + + + + diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..aa5c6bd --- /dev/null +++ b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,130 @@ + + + + + + + +AstraKernel: include Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+ + + +

+Directories

 
lib
+ + + + + + + + + + +

+Files

 
clear.h
 
datetime.h
 
interrupt.h
 
memory.h
 
panic.h
 Kernel panic and halt routines.
 
printf.h
 Minimal kernel printf/puts/getlines interface for freestanding systems.
 
string.h
+
+
+ +
+ + + + diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.js b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..7cee30c --- /dev/null +++ b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,11 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "lib", "dir_a61f22007e0f347cded0d82030ee545d.html", "dir_a61f22007e0f347cded0d82030ee545d" ], + [ "clear.h", "clear_8h.html", "clear_8h" ], + [ "datetime.h", "datetime_8h.html", "datetime_8h" ], + [ "interrupt.h", "interrupt_8h.html", "interrupt_8h" ], + [ "memory.h", "memory_8h.html", "memory_8h" ], + [ "panic.h", "panic_8h.html", "panic_8h" ], + [ "printf.h", "printf_8h.html", "printf_8h" ], + [ "string.h", "string_8h.html", "string_8h" ] +]; \ No newline at end of file diff --git a/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6.html b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6.html new file mode 100644 index 0000000..82afa11 --- /dev/null +++ b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6.html @@ -0,0 +1,127 @@ + + + + + + + +AstraKernel: kernel Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kernel Directory Reference
+
+
+
+Directory dependency graph for kernel:
+
+
+
+ + + + + + + +

+Files

 
interrupt.c
 
kernel.c
 
memory.c
 
panic.c
 
start.s
+
+
+ +
+ + + + diff --git a/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6.js b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6.js new file mode 100644 index 0000000..6202427 --- /dev/null +++ b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6.js @@ -0,0 +1,8 @@ +var dir_dc43877d82dd332f9fb2071fcca799d6 = +[ + [ "interrupt.c", "interrupt_8c.html", "interrupt_8c" ], + [ "kernel.c", "kernel_8c.html", "kernel_8c" ], + [ "memory.c", "memory_8c.html", "memory_8c" ], + [ "panic.c", "panic_8c.html", "panic_8c" ], + [ "start.s", "start_8s.html", null ] +]; \ No newline at end of file diff --git a/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.map b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.map new file mode 100644 index 0000000..44fa180 --- /dev/null +++ b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.md5 b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.md5 new file mode 100644 index 0000000..a0e938b --- /dev/null +++ b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.md5 @@ -0,0 +1 @@ +a31d40411c9b918e5ad287c7cc1281e0 \ No newline at end of file diff --git a/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.svg b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.svg new file mode 100644 index 0000000..9269d5e --- /dev/null +++ b/docs/html/dir_dc43877d82dd332f9fb2071fcca799d6_dep.svg @@ -0,0 +1,43 @@ + + + + + + +kernel + + +dir_dc43877d82dd332f9fb2071fcca799d6 + + +kernel + + + + + +dir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + + +dir_dc43877d82dd332f9fb2071fcca799d6->dir_d44c64559bbebec7f509842c48db8b23 + + + + + + +13 + + + + + diff --git a/docs/html/dir_ef3b2545113449f8f25e623a543d64e3.html b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3.html new file mode 100644 index 0000000..3b586ee --- /dev/null +++ b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3.html @@ -0,0 +1,118 @@ + + + + + + + +AstraKernel: docs/pages Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pages Directory Reference
+
+
+
+Directory dependency graph for pages:
+
+
+
+
+
+ +
+ + + + diff --git a/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.map b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.map new file mode 100644 index 0000000..4afadda --- /dev/null +++ b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.md5 b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.md5 new file mode 100644 index 0000000..218b7db --- /dev/null +++ b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.md5 @@ -0,0 +1 @@ +ddbd9a2e517616bd379e3f52677b00ea \ No newline at end of file diff --git a/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.svg b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.svg new file mode 100644 index 0000000..830379c --- /dev/null +++ b/docs/html/dir_ef3b2545113449f8f25e623a543d64e3_dep.svg @@ -0,0 +1,29 @@ + + + + + + +docs/pages + +clusterdir_49e56c817e5e54854c35e136979f97ca + + +docs + + + + + +dir_ef3b2545113449f8f25e623a543d64e3 + + +pages + + + + + diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css new file mode 100644 index 0000000..5d2eecd --- /dev/null +++ b/docs/html/doxygen.css @@ -0,0 +1,2461 @@ +/* The standard CSS for doxygen 1.14.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #3D578C; +--page-external-link-color: #334975; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--group-header-separator-color: #D9E0EE; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 75px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #C4CFE5; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #C4CFE5; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +/* +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg');*/ +--icon-folder-open-fill-color: #C4CFE5; +--icon-folder-fill-color: #D8DFEE; +--icon-folder-border-color: #4665A2; +--icon-doc-fill-color: #D8DFEE; +--icon-doc-border-color: #4665A2; + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; +--memdecl-border-color: #D5DDEC; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-proto-background-color: #EEF1F7; +--memdef-proto-text-color: #253555; +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-border-color: #C4CFE5; +--nav-breadcrumb-separator-color: #C4CFE5; +--nav-breadcrumb-active-bg: #EEF1F7; +--nav-breadcrumb-color: #354C7B; +--nav-breadcrumb-border-color: #E1E7F2; +--nav-splitbar-bg-color: #DCE2EF; +--nav-splitbar-handle-color: #9CAFD4; +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-active-bg: #DCE2EF; +--nav-menu-active-color: #9CAFD4; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #B6C4DF; +--nav-arrow-selected-color: #90A5CE; + +/* sync icon */ +--sync-icon-border-color: #C4CFE5; +--sync-icon-background-color: #F9FAFC; +--sync-icon-selected-background-color: #EEF1F7; +--sync-icon-color: #C4CFE5; +--sync-icon-selected-color: #6884BD; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-active-color: black; +--search-filter-background-color: rgba(255,255,255,.7); +--search-filter-backdrop-filter: blur(4px); +--search-filter-foreground-color: black; +--search-filter-border-color: rgba(150,150,150,.4); +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: rgba(255,255,255,.8); +--search-results-backdrop-filter: blur(4px); +--search-results-border-color: rgba(150,150,150,.4); +--search-box-border-color: #B6C4DF; +--search-close-icon-bg-color: #A0A0A0; +--search-close-icon-fg-color: white; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: rgba(255,255,255,0.8); +--tooltip-arrow-background-color: white; +--tooltip-border-color: rgba(150,150,150,0.7); +--tooltip-backdrop-filter: blur(3px); +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 0 4px 8px 0 rgba(0,0,0,.25); +--fold-line-color: #808080; + +/** font-family */ +--font-family-normal: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #90A5CE; +--page-external-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--group-header-separator-color: #1D2A43; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #212F4B; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #2C3F65; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-folder-open-fill-color: #4665A2; +--icon-folder-fill-color: #5373B4; +--icon-folder-border-color: #C4CFE5; +--icon-doc-fill-color: #6884BD; +--icon-doc-border-color: #C4CFE5; + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; +--memdecl-border-color: #233250; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-border-color: #212F4B; +--nav-breadcrumb-separator-color: #212F4B; +--nav-breadcrumb-active-bg: #1D2A43; +--nav-breadcrumb-color: #90A5CE; +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-bg-color: #283A5D; +--nav-splitbar-handle-color: #4665A2; +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-active-bg: #1D2A43; +--nav-menu-active-color: #C9D3E7; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #4665A2; +--nav-arrow-selected-color: #6884BD; + +/* sync icon */ +--sync-icon-border-color: #212F4B; +--sync-icon-background-color: #101826; +--sync-icon-selected-background-color: #1D2A43; +--sync-icon-color: #4665A2; +--sync-icon-selected-color: #5373B4; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-active-color: #F5F5F5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-backdrop-filter: none; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: black; +--search-results-foreground-color: #90A5CE; +--search-results-backdrop-filter: none; +--search-results-border-color: #334975; +--search-box-border-color: #334975; +--search-close-icon-bg-color: #909090; +--search-close-icon-fg-color: black; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-arrow-background-color: #202020; +--tooltip-backdrop-filter: none; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; + +/** font-family */ +--font-family-normal: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +body.resizing { + user-select: none; + -webkit-user-select: none; +} + +#doc-content { + scrollbar-width: thin; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 160%; + font-weight: 400; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + box-shadow: 12px 0 var(--page-background-color), + -12px 0 var(--page-background-color), + 12px 1px var(--group-header-separator-color), + -12px 1px var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +td h2.groupheader { + box-shadow: 13px 0 var(--page-background-color), + -13px 0 var(--page-background-color), + 13px 1px var(--group-header-separator-color), + -13px 1px var(--group-header-separator-color); +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + margin-right: 6px; + padding-right: 6px; + text-align: right; + line-height: 110%; + background-color: var(--nav-background-color); +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + padding-right: 6px; + padding-left: 6px; + border-radius: 0 6px 6px 0; + background-color: var(--nav-menu-active-bg); +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +span.label a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.el, a.el:visited, a.code, a.code:visited, a.line, a.line:visited { + color: var(--page-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--page-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +span.tt { + white-space: pre; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: wrap; + word-break: break-all; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -62px; + padding-left: 62px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + display: inline-block; + width: 12px; + height: 12px; + margin-left: 4px; + margin-right: 1px; +} + +span.foldnone { + display: inline-block; + position: relative; + cursor: pointer; + user-select: none; +} + +span.fold.plus, span.fold.minus { + width: 10px; + height: 10px; + background-color: var(--fragment-background-color); + position: relative; + border: 1px solid var(--fold-line-color); + margin-right: 1px; +} + +span.fold.plus::before, span.fold.minus::before { + content: ''; + position: absolute; + background-color: var(--fold-line-color); +} + +span.fold.plus::before { + width: 2px; + height: 6px; + top: 2px; + left: 4px; +} + +span.fold.plus::after { + content: ''; + position: absolute; + width: 6px; + height: 2px; + top: 4px; + left: 2px; + background-color: var(--fold-line-color); +} + +span.fold.minus::before { + width: 6px; + height: 2px; + top: 4px; + left: 2px; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + box-shadow: 13px 0 var(--page-background-color), + -13px 0 var(--page-background-color), + 13px 1px var(--group-header-separator-color), + -13px 1px var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 110%; + font-weight: 500; + margin-left: 0px; + margin-top: 0em; + margin-bottom: 6px; + padding-top: 8px; + padding-bottom: 4px; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 12px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + border: none; + margin-top: 16px; + margin-bottom: 16px; + height: 1px; + box-shadow: 13px 0 var(--page-background-color), + -13px 0 var(--page-background-color), + 13px 1px var(--group-header-separator-color), + -13px 1px var(--group-header-separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight { + padding-top: 2px; + padding-bottom: 2px; +} + +.memTemplParams { + padding-left: 10px; + padding-top: 5px; +} + +.memItemLeft, .memItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +tr[class^='memdesc'] { + box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,.075); +} + +.mdescLeft { + border-left: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); +} + +.mdescRight { + border-right: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; + border-left: 1px solid var(--memdecl-border-color); + border-right: 1px solid var(--memdecl-border-color); +} + +td.ititle { + border: 1px solid var(--memdecl-border-color); + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding-left: 10px; +} + +tr:not(:first-child) > td.ititle { + border-top: 0; + border-radius: 0; +} + +.memItemLeft { + white-space: nowrap; + border-left: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); + padding-left: 10px; + transition: none; +} + +.memItemRight { + width: 100%; + border-right: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); + padding-right: 10px; + transition: none; +} + +tr.heading + tr[class^='memitem'] td.memItemLeft, +tr.groupHeader + tr[class^='memitem'] td.memItemLeft, +tr.inherit_header + tr[class^='memitem'] td.memItemLeft { + border-top: 1px solid var(--memdecl-border-color); + border-top-left-radius: 4px; +} + +tr.heading + tr[class^='memitem'] td.memItemRight, +tr.groupHeader + tr[class^='memitem'] td.memItemRight, +tr.inherit_header + tr[class^='memitem'] td.memItemRight { + border-top: 1px solid var(--memdecl-border-color); + border-top-right-radius: 4px; +} + +tr.heading + tr[class^='memitem'] td.memTemplParams, +tr.heading + tr td.ititle, +tr.groupHeader + tr[class^='memitem'] td.memTemplParams, +tr.groupHeader + tr td.ititle, +tr.inherit_header + tr[class^='memitem'] td.memTemplParams { + border-top: 1px solid var(--memdecl-border-color); + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +table.memberdecls tr:last-child td.memItemLeft, +table.memberdecls tr:last-child td.mdescLeft, +table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemLeft, +table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemLeft, +table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescLeft, +table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescLeft { + border-bottom-left-radius: 4px; +} + +table.memberdecls tr:last-child td.memItemRight, +table.memberdecls tr:last-child td.mdescRight, +table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemRight, +table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemRight, +table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescRight, +table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescRight { + border-bottom-right-radius: 4px; +} + +tr.template .memItemLeft, tr.template .memItemRight { + border-top: none; + padding-top: 0; +} + + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-color: var(--memdef-proto-background-color); + line-height: 1.25; + font-family: var(--font-family-monospace); + font-weight: 500; + font-size: 16px; + float:left; + box-shadow: 0 10px 0 -1px var(--memdef-proto-background-color), + 0 2px 8px 0 rgba(0,0,0,.075); + position: relative; +} + +.memtitle:after { + content: ''; + display: block; + background: var(--memdef-proto-background-color); + height: 10px; + bottom: -10px; + left: 0px; + right: -14px; + position: absolute; + border-top-right-radius: 6px; +} + +.permalink +{ + font-family: var(--font-family-monospace); + font-weight: 500; + line-height: 1.25; + font-size: 16px; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-family: var(--font-family-monospace); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + display: table !important; + width: 100%; + box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + border-radius: 4px; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-family: var(--font-family-monospace); + font-size: 13px; + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + background-color: var(--memdef-proto-background-color); + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-background-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 14px; + transition: opacity 0.3s ease; +} + +span.arrowhead { + position: relative; + padding: 0; + margin: 0 0 0 2px; + display: inline-block; + width: 5px; + height: 5px; + border-right: 2px solid var(--nav-arrow-color); + border-bottom: 2px solid var(--nav-arrow-color); + transform: rotate(-45deg); + transition: transform 0.3s ease; +} + +span.arrowhead.opened { + transform: rotate(45deg); +} + +.selected span.arrowhead { + border-right: 2px solid var(--nav-arrow-selected-color); + border-bottom: 2px solid var(--nav-arrow-selected-color); +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfolder { + width: 24px; + height: 18px; + margin-top: 6px; + vertical-align:top; + display: inline-block; + position: relative; +} + +.icondoc { + width: 24px; + height: 18px; + margin-top: 3px; + vertical-align:top; + display: inline-block; + position: relative; +} + +.folder-icon { + width: 16px; + height: 11px; + background-color: var(--icon-folder-fill-color); + border: 1px solid var(--icon-folder-border-color); + border-radius: 0 2px 2px 2px; + position: relative; + box-sizing: content-box; +} + +.folder-icon::after { + content: ''; + position: absolute; + top: 2px; + left: -1px; + width: 16px; + height: 7px; + background-color: var(--icon-folder-open-fill-color); + border: 1px solid var(--icon-folder-border-color); + border-radius: 7px 7px 2px 2px; + transform-origin: top left; + opacity: 0; + transition: all 0.3s linear; +} + +.folder-icon::before { + content: ''; + position: absolute; + top: -3px; + left: -1px; + width: 6px; + height: 2px; + background-color: var(--icon-folder-fill-color); + border-top: 1px solid var(--icon-folder-border-color); + border-left: 1px solid var(--icon-folder-border-color); + border-right: 1px solid var(--icon-folder-border-color); + border-radius: 2px 2px 0 0; +} + +.folder-icon.open::after { + top: 3px; + opacity: 1; +} + +.doc-icon { + left: 6px; + width: 12px; + height: 16px; + background-color: var(--icon-doc-border-color); + clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%); + position: relative; + display: inline-block; +} +.doc-icon::before { + content: ""; + left: 1px; + top: 1px; + width: 10px; + height: 14px; + background-color: var(--icon-doc-fill-color); + clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%); + position: absolute; + box-sizing: border-box; +} +.doc-icon::after { + content: ""; + left: 7px; + top: 0px; + width: 3px; + height: 3px; + background-color: transparent; + position: absolute; + border: 1px solid var(--icon-doc-border-color); +} + + + + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +span.dynarrow { + position: relative; + display: inline-block; + width: 12px; + bottom: 1px; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + +/* ----------- navigation breadcrumb styling ----------- */ + +#nav-path ul { + height: 30px; + line-height: 30px; + color: var(--nav-text-normal-color); + overflow: hidden; + margin: 0px; + padding-left: 4px; + background-image: none; + background: var(--page-background-color); + border-bottom: 1px solid var(--nav-breadcrumb-separator-color); + font-size: var(--nav-font-size-level1); + font-family: var(--font-family-nav); + position: relative; + z-index: 100; +} + +#main-nav { + border-bottom: 1px solid var(--nav-border-color); +} + +.navpath li { + list-style-type:none; + float:left; + color: var(--nav-foreground-color); +} + +.navpath li.footer { + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + font-size: 8pt; + color: var(--footer-foreground-color); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; + padding-left: 15px; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--nav-breadcrumb-color); + position: relative; + top: 0px; + height: 30px; + margin-right: -20px; +} + +#nav-path li.navelem:after { + content: ''; + display: inline-block; + position: relative; + top: 0; + right: -15px; + width: 30px; + height: 30px; + transform: scaleX(0.5) scale(0.707) rotate(45deg); + z-index: 10; + background: var(--page-background-color); + box-shadow: 2px -2px 0 2px var(--nav-breadcrumb-separator-color); + border-radius: 0 5px 0 50px; +} + +#nav-path li.navelem:first-child { + margin-left: -6px; +} + +#nav-path li.navelem:hover, +#nav-path li.navelem:hover:after { + background-color: var(--nav-breadcrumb-active-bg); +} + +/* ---------------------- */ + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + margin: 0px; + background-color: var(--header-background-color); + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl { + padding: 0 0 0 0; +} + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0; + padding: 0; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0 0 0 5px; + margin: 0px; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: 400; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0 2px 0; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 12px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + backdrop-filter: var(--tooltip-backdrop-filter); + -webkit-backdrop-filter: var(--tooltip-backdrop-filter); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-arrow-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-arrow-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +:root { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/doxygen_crawl.html b/docs/html/doxygen_crawl.html new file mode 100644 index 0000000..09a9296 --- /dev/null +++ b/docs/html/doxygen_crawl.html @@ -0,0 +1,197 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js new file mode 100644 index 0000000..d89724e --- /dev/null +++ b/docs/html/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.slideUp('fast'); + summary.show(); + $(linkObj).find('.arrowhead').addClass('closed').removeClass('opened'); + } else { + content.slideDown('fast'); + summary.hide(); + $(linkObj).find('.arrowhead').removeClass('closed').addClass('opened'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').addClass('plus').removeClass('minus'); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ +$(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/docs/html/files.html b/docs/html/files.html new file mode 100644 index 0000000..e21fad3 --- /dev/null +++ b/docs/html/files.html @@ -0,0 +1,133 @@ + + + + + + + +AstraKernel: File List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + +
 
docs
 
pages
 
include
 
lib
 
math.h
 
clear.h
 
datetime.h
 
interrupt.h
 
memory.h
 
panic.h
Kernel panic and halt routines
 
printf.h
Minimal kernel printf/puts/getlines interface for freestanding systems
 
string.h
 
src
 
kernel
 
interrupt.c
 
kernel.c
 
memory.c
 
panic.c
 
start.s
 
user
 
clear.c
 
datetime.c
 
printf.c
UART-backed minimal printf implementation for a freestanding kernel
 
string.c
+
+
+
+
+ + + + diff --git a/docs/html/files_dup.js b/docs/html/files_dup.js new file mode 100644 index 0000000..cd36bb1 --- /dev/null +++ b/docs/html/files_dup.js @@ -0,0 +1,6 @@ +var files_dup = +[ + [ "docs", "dir_49e56c817e5e54854c35e136979f97ca.html", "dir_49e56c817e5e54854c35e136979f97ca" ], + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] +]; \ No newline at end of file diff --git a/docs/html/functions.html b/docs/html/functions.html new file mode 100644 index 0000000..ecb6304 --- /dev/null +++ b/docs/html/functions.html @@ -0,0 +1,112 @@ + + + + + + + +AstraKernel: Class Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+
+
+
+ + + + diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html new file mode 100644 index 0000000..3c4fa6e --- /dev/null +++ b/docs/html/functions_vars.html @@ -0,0 +1,112 @@ + + + + + + + +AstraKernel: Class Members - Variables + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+
+
+
+ + + + diff --git a/docs/html/globals.html b/docs/html/globals.html new file mode 100644 index 0000000..96ab479 --- /dev/null +++ b/docs/html/globals.html @@ -0,0 +1,251 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+
+
+ + + + diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html new file mode 100644 index 0000000..6afb93a --- /dev/null +++ b/docs/html/globals_defs.html @@ -0,0 +1,165 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all macros with links to the files they belong to:
+ +

- c -

+ + +

- i -

+ + +

- l -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+
+
+ + + + diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html new file mode 100644 index 0000000..ddc20ba --- /dev/null +++ b/docs/html/globals_enum.html @@ -0,0 +1,105 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the files they belong to:
+
+
+
+ + + + diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html new file mode 100644 index 0000000..1df8cdf --- /dev/null +++ b/docs/html/globals_eval.html @@ -0,0 +1,111 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enum values with links to the files they belong to:
+
+
+
+ + + + diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html new file mode 100644 index 0000000..c3d3d91 --- /dev/null +++ b/docs/html/globals_func.html @@ -0,0 +1,178 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the files they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- c -

+ + +

- g -

+ + +

- i -

+ + +

- k -

+ + +

- n -

+ + +

- p -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+
+
+ + + + diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html new file mode 100644 index 0000000..c9147cc --- /dev/null +++ b/docs/html/globals_type.html @@ -0,0 +1,105 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all typedefs with links to the files they belong to:
+
+
+
+ + + + diff --git a/docs/html/globals_vars.html b/docs/html/globals_vars.html new file mode 100644 index 0000000..0eee45d --- /dev/null +++ b/docs/html/globals_vars.html @@ -0,0 +1,114 @@ + + + + + + + +AstraKernel: File Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the files they belong to:
+
+
+
+ + + + diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html new file mode 100644 index 0000000..4c31b66 --- /dev/null +++ b/docs/html/graph_legend.html @@ -0,0 +1,165 @@ + + + + + + + +AstraKernel: Graph Legend + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+
+
+ + + + diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 new file mode 100644 index 0000000..da515da --- /dev/null +++ b/docs/html/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/docs/html/graph_legend.svg b/docs/html/graph_legend.svg new file mode 100644 index 0000000..030cd52 --- /dev/null +++ b/docs/html/graph_legend.svg @@ -0,0 +1,167 @@ + + + + + + +Graph Legend + + +Node9 + + +Inherited + + + + + +Node10 + + +PublicBase + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Truncated + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +ProtectedBase + + + + + +Node13->Node9 + + + + + + + + +Node14 + + +PrivateBase + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +Undocumented + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +Templ< int > + + + + + +Node16->Node9 + + + + + + + + +Node17 + + +Templ< T > + + + + + +Node17->Node16 + + + + + +< int > + + + +Node18 + + +Used + + + + + +Node18->Node9 + + + + + +m_usedClass + + + diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..adc8396 --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,187 @@ + + + + + + + +AstraKernel: AstraKernel ~ A minimal ARM kernel for QEMU + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
AstraKernel ~ A minimal ARM kernel for QEMU
+
+
+

+

GitHub release (including pre-releases)

+

AstraKernel is a minimal experimental kernel written in modern C and ARM assembly, designed to run on QEMU’s Versatile AB/PB board with a Cortex‑A8 CPU override (-cpu cortex-a8). This setup keeps the simple Versatile peripheral map while enabling ARMv7‑A features for experimentation. The purpose is educational, showing the fundamental steps of bringing up a bare-metal system, from low-level bootstrapping to higher-level interactive features to explore kernel development concepts.

+
========================================
+
AstraKernel v0.1.0
+
Built Aug 27 2025 at 12:56:35
+
========================================
+
+
CPU: Cortex-A8 @ 200MHz (simulated)
+
RAM: 128MB SDRAM at 0x00000000
+
+
Welcome to your own little Astra world!
+
Type away, explore, have fun.
+
+
AstraKernel is running...
+
Press Ctrl-A and then X to exit QEMU.
+
+
AstraKernel >
+

+Target platform and configuration

+
    +
  • Machine (board): versatilepb (or versatileab)
  • +
  • CPU model: cortex-a8 (via -cpu cortex-a8)
  • +
  • Key peripherals (Versatile map):
      +
    • UART0 (PL011): 0x101F1000
    • +
    • Timers (SP804): 0x101E2000
    • +
    • Interrupt controller: VIC at 0x10140000
    • +
    • SDRAM base: 0x00000000
    • +
    +
  • +
  • Exception vectors: initially at 0x00000000 (32-byte aligned).
  • +
+

Later, the kernel may relocate vectors using VBAR once the MMU is enabled.

+

+Features so far

+
    +
  • Bootstrapping: stack setup, BSS clearing, entry into the kernel main.
  • +
+
    +
  • UART I/O: putc/puts, getc/getline, basic shell loop.
  • +
+
    +
  • Vector Table: Define vector table for exceptions/interrupts.
  • +
+
    +
  • Basic Timer Interrupt: Configure one hardware timer, hook its interrupt to increment a "tick" counter.
  • +
+

+Building

+

+Native Build

+

Make sure you have an ARM cross-compiler installed (e.g., arm-none-eabi-gcc) and qemu-system-arm.

+
make
+

Developers also have the option to run the kernel with custom flags, such as:

make KFLAGS="-DUSE_KTESTS -MY_DEFFLAG"
+
Important

+ make will clean, build, and run the kernel in QEMU. You can also run make qemu to run the kernel without cleaning or building it again.
+

+Docker Build

+

If you have Docker installed, you can also run AstraKernel through a Docker container:

+
make docker
+
Important

+ make docker will pull from the most recent main commit from the upstream repository https://github.com/sandbox-science/AstraKernel.git. If you wish to use a local copy, you can run make docker-dev, which will copy all local build files into the repository.
+

+Documentation

+

For more details about this kernel, refer to the AstraKernel Documentation.

+
Note

+ The manual is a work in progress and may not cover all features yet.
+

+Disclaimer

+

AstraKernel is an educational project created to demonstrate operating system concepts. It is currently in version GitHub release (latest by date including pre-releases) and should be considered experimental software.

+
    +
  • Not Production-Ready: AstraKernel is not stable, secure, or suitable for production environments.
  • +
  • Educational Use Only: The project is provided for learning, research, and experimentation purposes.
  • +
  • No Warranty: AstraKernel is distributed on an “as is” basis, without warranties or conditions of any kind, express or implied.
  • +
  • Limitation of Liability: The authors and contributors assume no responsibility or liability for any damages, data loss, or issues arising from the use of AstraKernel.
  • +
+

By using AstraKernel, you acknowledge that you understand these limitations.

+

+License

+

This project is licensed under the GNU General Public License. See the [LICENSE](LICENSE) file for details.

+
+ +
+
+
+ + + + diff --git a/docs/html/index.js b/docs/html/index.js new file mode 100644 index 0000000..0402b75 --- /dev/null +++ b/docs/html/index.js @@ -0,0 +1,12 @@ +var index = +[ + [ "Target platform and configuration", "index.html#autotoc_md4", null ], + [ "Features so far", "index.html#autotoc_md5", null ], + [ "Building", "index.html#autotoc_md6", [ + [ "Native Build", "index.html#autotoc_md7", null ], + [ "Docker Build", "index.html#autotoc_md8", null ] + ] ], + [ "Documentation", "index.html#autotoc_md9", null ], + [ "Disclaimer", "index.html#autotoc_md10", null ], + [ "License", "index.html#autotoc_md11", null ] +]; \ No newline at end of file diff --git a/docs/html/interrupt_8c.html b/docs/html/interrupt_8c.html new file mode 100644 index 0000000..69d75ba --- /dev/null +++ b/docs/html/interrupt_8c.html @@ -0,0 +1,282 @@ + + + + + + + +AstraKernel: src/kernel/interrupt.c File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
interrupt.c File Reference
+
+
+
#include "interrupt.h"
+#include "lib/math.h"
+#include <stdint.h>
+
+Include dependency graph for interrupt.c:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + +

+Functions

void interrupts_init_timer0 (uint32_t tick_hz, uint32_t timer_clk_hz)
 VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)
void irq_handler (void)
 C-level IRQ handler called from assembly stub in start.s Must clear the source interrupt and (for VIC) write VIC_VECTADDR to ack end of interrupt.
void irq_disable (void)
void irq_enable (void)
+ + +

+Variables

volatile uint64_t systicks = 0
+

Function Documentation

+ +

◆ interrupts_init_timer0()

+ +
+
+ + + + + + + + + + + +
void interrupts_init_timer0 (uint32_t tick_hz,
uint32_t timer_clk_hz )
+
+ +

VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)

+
Parameters
+ + + +
tick_hzdesired tick frequency (e.g., 100)
timer_clk_hzinput clock to the SP804 (e.g., 1000000)
+
+
+ +

Definition at line 14 of file interrupt.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_disable()

+ +
+
+ + + + + +
+ + + + + + + +
void irq_disable (void )
+
+inline
+
+ +

Definition at line 53 of file interrupt.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_enable()

+ +
+
+ + + + + +
+ + + + + + + +
void irq_enable (void )
+
+inline
+
+ +

Definition at line 58 of file interrupt.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_handler()

+ +
+
+ + + + + + + +
void irq_handler (void )
+
+ +

C-level IRQ handler called from assembly stub in start.s Must clear the source interrupt and (for VIC) write VIC_VECTADDR to ack end of interrupt.

+ +

Definition at line 40 of file interrupt.c.

+ +
+
+

Variable Documentation

+ +

◆ systicks

+ +
+
+ + + + +
volatile uint64_t systicks = 0
+
+ +

Definition at line 6 of file interrupt.c.

+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/interrupt_8c.js b/docs/html/interrupt_8c.js new file mode 100644 index 0000000..d572747 --- /dev/null +++ b/docs/html/interrupt_8c.js @@ -0,0 +1,8 @@ +var interrupt_8c = +[ + [ "interrupts_init_timer0", "interrupt_8c.html#a2a778647bb8df60e6c3238b29eb2fca2", null ], + [ "irq_disable", "interrupt_8c.html#ab4e0cc193587bb7ac297bbc859ff4603", null ], + [ "irq_enable", "interrupt_8c.html#a0a004f8aa16635895a42e0667f26c420", null ], + [ "irq_handler", "interrupt_8c.html#afbe4835df451e474a54178267b1d6060", null ], + [ "systicks", "interrupt_8c.html#aef55475e4484403d59e8e19b4ec43ad4", null ] +]; \ No newline at end of file diff --git a/docs/html/interrupt_8c__incl.map b/docs/html/interrupt_8c__incl.map new file mode 100644 index 0000000..901d59d --- /dev/null +++ b/docs/html/interrupt_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/html/interrupt_8c__incl.md5 b/docs/html/interrupt_8c__incl.md5 new file mode 100644 index 0000000..d25aaec --- /dev/null +++ b/docs/html/interrupt_8c__incl.md5 @@ -0,0 +1 @@ +f33aae108ef879c14135d367d6bcabae \ No newline at end of file diff --git a/docs/html/interrupt_8c__incl.svg b/docs/html/interrupt_8c__incl.svg new file mode 100644 index 0000000..b132897 --- /dev/null +++ b/docs/html/interrupt_8c__incl.svg @@ -0,0 +1,111 @@ + + + + + + +src/kernel/interrupt.c + + +Node1 + + +src/kernel/interrupt.c + + + + + +Node2 + + +interrupt.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +lib/math.h + + + + + +Node1->Node4 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +panic.h + + + + + +Node4->Node5 + + + + + + + + diff --git a/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.map b/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.map new file mode 100644 index 0000000..7c75a4f --- /dev/null +++ b/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.md5 b/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.md5 new file mode 100644 index 0000000..0b81307 --- /dev/null +++ b/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.md5 @@ -0,0 +1 @@ +cdbec30fa9e7c07ffbd60bf35f8f54c4 \ No newline at end of file diff --git a/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.svg b/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.svg new file mode 100644 index 0000000..16cd824 --- /dev/null +++ b/docs/html/interrupt_8c_a0a004f8aa16635895a42e0667f26c420_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +irq_enable + + +Node1 + + +irq_enable + + + + + +Node2 + + +irq_sanity_check + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +not_main + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.map b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.map new file mode 100644 index 0000000..6c95a0f --- /dev/null +++ b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.md5 b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.md5 new file mode 100644 index 0000000..9bffc37 --- /dev/null +++ b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.md5 @@ -0,0 +1 @@ +4915daa6d98585f656ddd8e8e56263b1 \ No newline at end of file diff --git a/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.svg b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.svg new file mode 100644 index 0000000..4393646 --- /dev/null +++ b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.svg @@ -0,0 +1,291 @@ + + + + + + +interrupts_init_timer0 + + +Node1 + + +interrupts_init_timer0 + + + + + +Node2 + + +_udiv32 + + + + + +Node1->Node2 + + + + + + + + +Node12 + + +timer0_start_periodic + + + + + +Node1->Node12 + + + + + + + + +Node13 + + +vic_enable_timer01_irq + + + + + +Node1->Node13 + + + + + + + + +Node3 + + +kernel_panic + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_halt + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +put_integers + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +put_unsigned + + + + + +Node5->Node8 + + + + + + + + +Node10 + + +putc + + + + + +Node5->Node10 + + + + + + + + +Node11 + + +puts + + + + + +Node5->Node11 + + + + + + + + +Node7 + + +put_signed + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node8 + + + + + + + + +Node7->Node10 + + + + + + + + +Node9 + + +_divmod + + + + + +Node8->Node9 + + + + + + + + +Node8->Node10 + + + + + + + + +Node9->Node3 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.map b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.map new file mode 100644 index 0000000..150dad9 --- /dev/null +++ b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.md5 b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.md5 new file mode 100644 index 0000000..3aa9018 --- /dev/null +++ b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.md5 @@ -0,0 +1 @@ +738933dc6eb30fd1318908b611990056 \ No newline at end of file diff --git a/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.svg b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.svg new file mode 100644 index 0000000..1d2c0c3 --- /dev/null +++ b/docs/html/interrupt_8c_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +interrupts_init_timer0 + + +Node1 + + +interrupts_init_timer0 + + + + + +Node2 + + +not_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.map b/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.map new file mode 100644 index 0000000..536b815 --- /dev/null +++ b/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.md5 b/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.md5 new file mode 100644 index 0000000..9199bbc --- /dev/null +++ b/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.md5 @@ -0,0 +1 @@ +bdc33a75d592c5807d3b516daed96b4c \ No newline at end of file diff --git a/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.svg b/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.svg new file mode 100644 index 0000000..8d9cb7b --- /dev/null +++ b/docs/html/interrupt_8c_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +irq_disable + + +Node1 + + +irq_disable + + + + + +Node2 + + +irq_sanity_check + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/interrupt_8c_source.html b/docs/html/interrupt_8c_source.html new file mode 100644 index 0000000..fdc7f66 --- /dev/null +++ b/docs/html/interrupt_8c_source.html @@ -0,0 +1,179 @@ + + + + + + + +AstraKernel: src/kernel/interrupt.c Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
interrupt.c
+
+
+Go to the documentation of this file.
1#include "interrupt.h"
+
2#include "lib/math.h"
+
3
+
4#include <stdint.h>
+
5
+
6volatile uint64_t systicks = 0;
+
7
+
+
14void interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz)
+
15{
+
16 if (tick_hz == 0 || timer_clk_hz == 0)
+
17 {
+
18 tick_hz = 100; // fallback to 100 Hz
+
19 timer_clk_hz = 1000000; // fallback to 1 MHz
+
20 }
+
21
+
22 // Periodic mode reloads LOAD each cycle.
+
23 uint32_t load = _udiv32(timer_clk_hz, tick_hz);
+
24 if (load == 0)
+
25 {
+
26 load = 1;
+
27 }
+
28
+
29 // Program timer0 periodic
+ +
31
+
32 // Route timer01 interrupt to IRQ and enable it in VIC
+ +
34}
+
+
35
+
+
40void irq_handler(void)
+
41{
+
42 // Check Timer0 MIS (masked interrupt status)
+
43 if (T0_MIS)
+
44 {
+
45 T0_INTCLR = 1; // Clear the timer interrupt
+
46 systicks++;
+
47 }
+
48
+
49 // End of interrupt for PL190 VIC
+
50 VIC_VECTADDR = 0; // signal end of IRQ service
+
51}
+
+
52
+
+
53inline void irq_disable(void)
+
54{
+
55 __asm__ volatile("cpsid i" ::: "memory"); // mask IRQ
+
56}
+
+
57
+
+
58inline void irq_enable(void)
+
59{
+
60 __asm__ volatile("cpsie i" ::: "memory"); // unmask IRQ
+
61 __asm__ volatile("isb" ::: "memory"); // take effect immediately
+
62}
+
+
void irq_enable(void)
Definition interrupt.c:58
+
void interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz)
VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)
Definition interrupt.c:14
+
void irq_disable(void)
Definition interrupt.c:53
+
volatile uint64_t systicks
Definition interrupt.c:6
+
void irq_handler(void)
C-level IRQ handler called from assembly stub in start.s Must clear the source interrupt and (for VIC...
Definition interrupt.c:40
+ +
static void vic_enable_timer01_irq(void)
Definition interrupt.h:56
+
static void timer0_start_periodic(uint32_t load)
Definition interrupt.h:48
+
#define T0_MIS
Definition interrupt.h:30
+
#define T0_INTCLR
Definition interrupt.h:29
+
#define VIC_VECTADDR
Definition interrupt.h:20
+ +
static uint32_t _udiv32(uint32_t n, uint32_t d)
Unsigned 32-bit integer division: n / d.
Definition math.h:17
+
+
+
+ + + + diff --git a/docs/html/interrupt_8h.html b/docs/html/interrupt_8h.html new file mode 100644 index 0000000..42a3f76 --- /dev/null +++ b/docs/html/interrupt_8h.html @@ -0,0 +1,674 @@ + + + + + + + +AstraKernel: include/interrupt.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
interrupt.h File Reference
+
+
+
#include <stdint.h>
+
+Include dependency graph for interrupt.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define VIC_BASE   0x10140000u
#define VIC_INTSELECT   (*(volatile uint32_t *)(VIC_BASE + 0x00C))
#define VIC_INTENABLE   (*(volatile uint32_t *)(VIC_BASE + 0x010))
#define VIC_INTENCLR   (*(volatile utin32_t *)(VIC_BASE + 0x014))
#define VIC_SOFT_INT   (*(volatile uint32_t *)(VIC_BASE + 0x018))
#define VIC_SOFT_INTCLR   (*(volatile uint32_t *)(VIC_BASE + 0x01C))
#define VIC_IRQSTATUS   (*(volatile uint32_t *)(VIC_BASE + 0x000))
#define VIC_VECTADDR   (*(volatile uint32_t *)(VIC_BASE + 0x030))
#define VIC_DEFVECTADDR   (*(volatile uint32_t *)(VIC_BASE + 0x034))
#define T01_BASE   0x101E2000u
#define T0_LOAD   (*(volatile uint32_t *)(T01_BASE + 0x00))
#define T0_VALUE   (*(volatile uint32_t *)(T01_BASE + 0x04))
#define T0_CONTROL   (*(volatile uint32_t *)(T01_BASE + 0x08))
#define T0_INTCLR   (*(volatile uint32_t *)(T01_BASE + 0x0C))
#define T0_MIS   (*(volatile uint32_t *)(T01_BASE + 0x14))
#define TCTRL_ENABLE   (1u << 7)
#define TCTRL_PERIODIC   (1u << 6)
#define TCTRL_INTEN   (1u << 5)
#define TCTRL_32BIT   (1u << 1)
#define IRQ_TIMER01   4
+ + + + + + + + + +

+Functions

void irq_handler (void)
 C-level IRQ handler called from assembly stub in start.s Must clear the source interrupt and (for VIC) write VIC_VECTADDR to ack end of interrupt.
void irq_enable (void)
void irq_disable (void)
void interrupts_init_timer0 (uint32_t tick_hz, uint32_t timer_clk_hz)
 VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)
static void timer0_start_periodic (uint32_t load)
static void vic_enable_timer01_irq (void)
+

Macro Definition Documentation

+ +

◆ IRQ_TIMER01

+ +
+
+ + + + +
#define IRQ_TIMER01   4
+
+ +

Definition at line 40 of file interrupt.h.

+ +
+
+ +

◆ T01_BASE

+ +
+
+ + + + +
#define T01_BASE   0x101E2000u
+
+ +

Definition at line 25 of file interrupt.h.

+ +
+
+ +

◆ T0_CONTROL

+ +
+
+ + + + +
#define T0_CONTROL   (*(volatile uint32_t *)(T01_BASE + 0x08))
+
+ +

Definition at line 28 of file interrupt.h.

+ +
+
+ +

◆ T0_INTCLR

+ +
+
+ + + + +
#define T0_INTCLR   (*(volatile uint32_t *)(T01_BASE + 0x0C))
+
+ +

Definition at line 29 of file interrupt.h.

+ +
+
+ +

◆ T0_LOAD

+ +
+
+ + + + +
#define T0_LOAD   (*(volatile uint32_t *)(T01_BASE + 0x00))
+
+ +

Definition at line 26 of file interrupt.h.

+ +
+
+ +

◆ T0_MIS

+ +
+
+ + + + +
#define T0_MIS   (*(volatile uint32_t *)(T01_BASE + 0x14))
+
+ +

Definition at line 30 of file interrupt.h.

+ +
+
+ +

◆ T0_VALUE

+ +
+
+ + + + +
#define T0_VALUE   (*(volatile uint32_t *)(T01_BASE + 0x04))
+
+ +

Definition at line 27 of file interrupt.h.

+ +
+
+ +

◆ TCTRL_32BIT

+ +
+
+ + + + +
#define TCTRL_32BIT   (1u << 1)
+
+ +

Definition at line 37 of file interrupt.h.

+ +
+
+ +

◆ TCTRL_ENABLE

+ +
+
+ + + + +
#define TCTRL_ENABLE   (1u << 7)
+
+ +

Definition at line 34 of file interrupt.h.

+ +
+
+ +

◆ TCTRL_INTEN

+ +
+
+ + + + +
#define TCTRL_INTEN   (1u << 5)
+
+ +

Definition at line 36 of file interrupt.h.

+ +
+
+ +

◆ TCTRL_PERIODIC

+ +
+
+ + + + +
#define TCTRL_PERIODIC   (1u << 6)
+
+ +

Definition at line 35 of file interrupt.h.

+ +
+
+ +

◆ VIC_BASE

+ +
+
+ + + + +
#define VIC_BASE   0x10140000u
+
+ +

Definition at line 12 of file interrupt.h.

+ +
+
+ +

◆ VIC_DEFVECTADDR

+ +
+
+ + + + +
#define VIC_DEFVECTADDR   (*(volatile uint32_t *)(VIC_BASE + 0x034))
+
+ +

Definition at line 21 of file interrupt.h.

+ +
+
+ +

◆ VIC_INTENABLE

+ +
+
+ + + + +
#define VIC_INTENABLE   (*(volatile uint32_t *)(VIC_BASE + 0x010))
+
+ +

Definition at line 14 of file interrupt.h.

+ +
+
+ +

◆ VIC_INTENCLR

+ +
+
+ + + + +
#define VIC_INTENCLR   (*(volatile utin32_t *)(VIC_BASE + 0x014))
+
+ +

Definition at line 15 of file interrupt.h.

+ +
+
+ +

◆ VIC_INTSELECT

+ +
+
+ + + + +
#define VIC_INTSELECT   (*(volatile uint32_t *)(VIC_BASE + 0x00C))
+
+ +

Definition at line 13 of file interrupt.h.

+ +
+
+ +

◆ VIC_IRQSTATUS

+ +
+
+ + + + +
#define VIC_IRQSTATUS   (*(volatile uint32_t *)(VIC_BASE + 0x000))
+
+ +

Definition at line 19 of file interrupt.h.

+ +
+
+ +

◆ VIC_SOFT_INT

+ +
+
+ + + + +
#define VIC_SOFT_INT   (*(volatile uint32_t *)(VIC_BASE + 0x018))
+
+ +

Definition at line 16 of file interrupt.h.

+ +
+
+ +

◆ VIC_SOFT_INTCLR

+ +
+
+ + + + +
#define VIC_SOFT_INTCLR   (*(volatile uint32_t *)(VIC_BASE + 0x01C))
+
+ +

Definition at line 17 of file interrupt.h.

+ +
+
+ +

◆ VIC_VECTADDR

+ +
+
+ + + + +
#define VIC_VECTADDR   (*(volatile uint32_t *)(VIC_BASE + 0x030))
+
+ +

Definition at line 20 of file interrupt.h.

+ +
+
+

Function Documentation

+ +

◆ interrupts_init_timer0()

+ +
+
+ + + + + + + + + + + +
void interrupts_init_timer0 (uint32_t tick_hz,
uint32_t timer_clk_hz )
+
+ +

VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)

+
Parameters
+ + + +
tick_hzdesired tick frequency (e.g., 100)
timer_clk_hzinput clock to the SP804 (e.g., 1000000)
+
+
+ +

Definition at line 14 of file interrupt.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_disable()

+ +
+
+ + + + + +
+ + + + + + + +
void irq_disable (void )
+
+inline
+
+ +

Definition at line 53 of file interrupt.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_enable()

+ +
+
+ + + + + +
+ + + + + + + +
void irq_enable (void )
+
+inline
+
+ +

Definition at line 58 of file interrupt.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_handler()

+ +
+
+ + + + + + + +
void irq_handler (void )
+
+ +

C-level IRQ handler called from assembly stub in start.s Must clear the source interrupt and (for VIC) write VIC_VECTADDR to ack end of interrupt.

+ +

Definition at line 40 of file interrupt.c.

+ +
+
+ +

◆ timer0_start_periodic()

+ +
+
+ + + + + +
+ + + + + + + +
void timer0_start_periodic (uint32_t load)
+
+inlinestatic
+
+ +

Definition at line 48 of file interrupt.h.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ vic_enable_timer01_irq()

+ +
+
+ + + + + +
+ + + + + + + +
void vic_enable_timer01_irq (void )
+
+inlinestatic
+
+ +

Definition at line 56 of file interrupt.h.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/interrupt_8h.js b/docs/html/interrupt_8h.js new file mode 100644 index 0000000..996da06 --- /dev/null +++ b/docs/html/interrupt_8h.js @@ -0,0 +1,29 @@ +var interrupt_8h = +[ + [ "IRQ_TIMER01", "interrupt_8h.html#afa6c290ed4f4bc4926f70c2f8e4a03b4", null ], + [ "T01_BASE", "interrupt_8h.html#ad3725493cd92ce709967d46dff203c53", null ], + [ "T0_CONTROL", "interrupt_8h.html#aaccf6b96ba3b742c6bda83b3eb59e419", null ], + [ "T0_INTCLR", "interrupt_8h.html#ae2e3c97a8b35d12b57b0ee7f07dbac79", null ], + [ "T0_LOAD", "interrupt_8h.html#a24e819c57eeb7a925f1c6526e19fc0a6", null ], + [ "T0_MIS", "interrupt_8h.html#acc5acea895618d5b1d4a94daaf34c372", null ], + [ "T0_VALUE", "interrupt_8h.html#a09661a92c1ee93307f89d0bf5d056cf1", null ], + [ "TCTRL_32BIT", "interrupt_8h.html#a8c90f5c03791fbd20caf094c1c238d3e", null ], + [ "TCTRL_ENABLE", "interrupt_8h.html#a0ae1e8b399502d25a8a5bf23479a8453", null ], + [ "TCTRL_INTEN", "interrupt_8h.html#a2cadbad73a0a0951e5da8b3abef68939", null ], + [ "TCTRL_PERIODIC", "interrupt_8h.html#a55d19d2e3a269142eb991a3c93b9d650", null ], + [ "VIC_BASE", "interrupt_8h.html#a20d127cee2705b7e0b86585d131c2380", null ], + [ "VIC_DEFVECTADDR", "interrupt_8h.html#ae9cc6c8999966c69d2a21bc3884397a3", null ], + [ "VIC_INTENABLE", "interrupt_8h.html#a0b1ee4a77609e8163ad74cbe81c98213", null ], + [ "VIC_INTENCLR", "interrupt_8h.html#a195648e4e688b672df29f6fa94aabf35", null ], + [ "VIC_INTSELECT", "interrupt_8h.html#a595c2bd198349dbf4a8f4fe07771b474", null ], + [ "VIC_IRQSTATUS", "interrupt_8h.html#a810f60f080c753e160afd81d479d8944", null ], + [ "VIC_SOFT_INT", "interrupt_8h.html#a75ec9a495c5185a396cd68dca2460edf", null ], + [ "VIC_SOFT_INTCLR", "interrupt_8h.html#aa5a73a9343ad968ee5a1640dc01b66de", null ], + [ "VIC_VECTADDR", "interrupt_8h.html#ae718b3209b4779204ab625ec050d88dc", null ], + [ "interrupts_init_timer0", "interrupt_8h.html#a2a778647bb8df60e6c3238b29eb2fca2", null ], + [ "irq_disable", "interrupt_8h.html#ab4e0cc193587bb7ac297bbc859ff4603", null ], + [ "irq_enable", "interrupt_8h.html#a0a004f8aa16635895a42e0667f26c420", null ], + [ "irq_handler", "interrupt_8h.html#afbe4835df451e474a54178267b1d6060", null ], + [ "timer0_start_periodic", "interrupt_8h.html#a6b1cda18aba744c0a2580c0833a96d9d", null ], + [ "vic_enable_timer01_irq", "interrupt_8h.html#a18b76150ed04c0d5d19456bf30970fdd", null ] +]; \ No newline at end of file diff --git a/docs/html/interrupt_8h__dep__incl.map b/docs/html/interrupt_8h__dep__incl.map new file mode 100644 index 0000000..5fb6c76 --- /dev/null +++ b/docs/html/interrupt_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/interrupt_8h__dep__incl.md5 b/docs/html/interrupt_8h__dep__incl.md5 new file mode 100644 index 0000000..0468e00 --- /dev/null +++ b/docs/html/interrupt_8h__dep__incl.md5 @@ -0,0 +1 @@ +43237846fdc3244ed75aab743f3192b7 \ No newline at end of file diff --git a/docs/html/interrupt_8h__dep__incl.svg b/docs/html/interrupt_8h__dep__incl.svg new file mode 100644 index 0000000..2c9061e --- /dev/null +++ b/docs/html/interrupt_8h__dep__incl.svg @@ -0,0 +1,57 @@ + + + + + + +include/interrupt.h + + +Node1 + + +include/interrupt.h + + + + + +Node2 + + +src/kernel/interrupt.c + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/kernel/kernel.c + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/interrupt_8h__incl.map b/docs/html/interrupt_8h__incl.map new file mode 100644 index 0000000..9c0e93c --- /dev/null +++ b/docs/html/interrupt_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/interrupt_8h__incl.md5 b/docs/html/interrupt_8h__incl.md5 new file mode 100644 index 0000000..7e7ff83 --- /dev/null +++ b/docs/html/interrupt_8h__incl.md5 @@ -0,0 +1 @@ +265fb6e5556a6df860d2810a8e192e75 \ No newline at end of file diff --git a/docs/html/interrupt_8h__incl.svg b/docs/html/interrupt_8h__incl.svg new file mode 100644 index 0000000..13bb77b --- /dev/null +++ b/docs/html/interrupt_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +include/interrupt.h + + +Node1 + + +include/interrupt.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.map b/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.map new file mode 100644 index 0000000..7c75a4f --- /dev/null +++ b/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.md5 b/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.md5 new file mode 100644 index 0000000..0b81307 --- /dev/null +++ b/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.md5 @@ -0,0 +1 @@ +cdbec30fa9e7c07ffbd60bf35f8f54c4 \ No newline at end of file diff --git a/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.svg b/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.svg new file mode 100644 index 0000000..16cd824 --- /dev/null +++ b/docs/html/interrupt_8h_a0a004f8aa16635895a42e0667f26c420_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +irq_enable + + +Node1 + + +irq_enable + + + + + +Node2 + + +irq_sanity_check + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +not_main + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.map b/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.map new file mode 100644 index 0000000..1536943 --- /dev/null +++ b/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.md5 b/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.md5 new file mode 100644 index 0000000..586cd22 --- /dev/null +++ b/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.md5 @@ -0,0 +1 @@ +91e2738f7663b9fb3228945fb245222a \ No newline at end of file diff --git a/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.svg b/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.svg new file mode 100644 index 0000000..46a8593 --- /dev/null +++ b/docs/html/interrupt_8h_a18b76150ed04c0d5d19456bf30970fdd_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +vic_enable_timer01_irq + + +Node1 + + +vic_enable_timer01_irq + + + + + +Node2 + + +interrupts_init_timer0 + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +not_main + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.map b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.map new file mode 100644 index 0000000..6c95a0f --- /dev/null +++ b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.md5 b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.md5 new file mode 100644 index 0000000..9bffc37 --- /dev/null +++ b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.md5 @@ -0,0 +1 @@ +4915daa6d98585f656ddd8e8e56263b1 \ No newline at end of file diff --git a/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.svg b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.svg new file mode 100644 index 0000000..4393646 --- /dev/null +++ b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_cgraph.svg @@ -0,0 +1,291 @@ + + + + + + +interrupts_init_timer0 + + +Node1 + + +interrupts_init_timer0 + + + + + +Node2 + + +_udiv32 + + + + + +Node1->Node2 + + + + + + + + +Node12 + + +timer0_start_periodic + + + + + +Node1->Node12 + + + + + + + + +Node13 + + +vic_enable_timer01_irq + + + + + +Node1->Node13 + + + + + + + + +Node3 + + +kernel_panic + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_halt + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +put_integers + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +put_unsigned + + + + + +Node5->Node8 + + + + + + + + +Node10 + + +putc + + + + + +Node5->Node10 + + + + + + + + +Node11 + + +puts + + + + + +Node5->Node11 + + + + + + + + +Node7 + + +put_signed + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node8 + + + + + + + + +Node7->Node10 + + + + + + + + +Node9 + + +_divmod + + + + + +Node8->Node9 + + + + + + + + +Node8->Node10 + + + + + + + + +Node9->Node3 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.map b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.map new file mode 100644 index 0000000..150dad9 --- /dev/null +++ b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.md5 b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.md5 new file mode 100644 index 0000000..3aa9018 --- /dev/null +++ b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.md5 @@ -0,0 +1 @@ +738933dc6eb30fd1318908b611990056 \ No newline at end of file diff --git a/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.svg b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.svg new file mode 100644 index 0000000..1d2c0c3 --- /dev/null +++ b/docs/html/interrupt_8h_a2a778647bb8df60e6c3238b29eb2fca2_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +interrupts_init_timer0 + + +Node1 + + +interrupts_init_timer0 + + + + + +Node2 + + +not_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.map b/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.map new file mode 100644 index 0000000..590b412 --- /dev/null +++ b/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.md5 b/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.md5 new file mode 100644 index 0000000..695a195 --- /dev/null +++ b/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.md5 @@ -0,0 +1 @@ +02936841b0c2ee3e5fa84197828da24f \ No newline at end of file diff --git a/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.svg b/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.svg new file mode 100644 index 0000000..83e25f4 --- /dev/null +++ b/docs/html/interrupt_8h_a6b1cda18aba744c0a2580c0833a96d9d_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +timer0_start_periodic + + +Node1 + + +timer0_start_periodic + + + + + +Node2 + + +interrupts_init_timer0 + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +not_main + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.map b/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.map new file mode 100644 index 0000000..536b815 --- /dev/null +++ b/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.md5 b/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.md5 new file mode 100644 index 0000000..9199bbc --- /dev/null +++ b/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.md5 @@ -0,0 +1 @@ +bdc33a75d592c5807d3b516daed96b4c \ No newline at end of file diff --git a/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.svg b/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.svg new file mode 100644 index 0000000..8d9cb7b --- /dev/null +++ b/docs/html/interrupt_8h_ab4e0cc193587bb7ac297bbc859ff4603_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +irq_disable + + +Node1 + + +irq_disable + + + + + +Node2 + + +irq_sanity_check + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/interrupt_8h_source.html b/docs/html/interrupt_8h_source.html new file mode 100644 index 0000000..2336c08 --- /dev/null +++ b/docs/html/interrupt_8h_source.html @@ -0,0 +1,189 @@ + + + + + + + +AstraKernel: include/interrupt.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
interrupt.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <stdint.h>
+
4
+
5#ifdef __cplusplus
+
6extern "C"
+
7{
+
8#endif
+
9
+
10// PL190 VIC (interrupt controller)
+
11// ref: PrimeCell Vectored Interrupt Controller (PL190) TRM (Page3-7)
+
12#define VIC_BASE 0x10140000u
+
13#define VIC_INTSELECT (*(volatile uint32_t *)(VIC_BASE + 0x00C)) // 0=IRQ,1=FIQ
+
14#define VIC_INTENABLE (*(volatile uint32_t *)(VIC_BASE + 0x010)) // set bit=enable
+
15#define VIC_INTENCLR (*(volatile utin32_t *)(VIC_BASE + 0x014)) // clear bit=disable
+
16#define VIC_SOFT_INT (*(volatile uint32_t *)(VIC_BASE + 0x018))
+
17#define VIC_SOFT_INTCLR (*(volatile uint32_t *)(VIC_BASE + 0x01C))
+
18
+
19#define VIC_IRQSTATUS (*(volatile uint32_t *)(VIC_BASE + 0x000))
+
20#define VIC_VECTADDR (*(volatile uint32_t *)(VIC_BASE + 0x030))
+
21#define VIC_DEFVECTADDR (*(volatile uint32_t *)(VIC_BASE + 0x034))
+
22
+
23// SP804 Timer0 in the 0/1 block
+
24// ref: ARM Dual-Time Module (SP804) TRM (Page 3-2)
+
25#define T01_BASE 0x101E2000u
+
26#define T0_LOAD (*(volatile uint32_t *)(T01_BASE + 0x00))
+
27#define T0_VALUE (*(volatile uint32_t *)(T01_BASE + 0x04))
+
28#define T0_CONTROL (*(volatile uint32_t *)(T01_BASE + 0x08))
+
29#define T0_INTCLR (*(volatile uint32_t *)(T01_BASE + 0x0C))
+
30#define T0_MIS (*(volatile uint32_t *)(T01_BASE + 0x14))
+
31
+
32// Bits for CONTROL (SP804)
+
33// ref: ARM Dual-Time Module (SP804) TRM (Page 3-5)
+
34#define TCTRL_ENABLE (1u << 7) // EN=bit7
+
35#define TCTRL_PERIODIC (1u << 6) // PERIODIC=bit6
+
36#define TCTRL_INTEN (1u << 5) // INTEN=bit5
+
37#define TCTRL_32BIT (1u << 1) // 32BIT=bit1
+
38
+
39// VIC line number for Timer0/1 on Versatile
+
40#define IRQ_TIMER01 4
+
41
+
42 void irq_handler(void);
+
43 void irq_enable(void);
+
44 void irq_disable(void);
+
45
+
46 void interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz);
+
47
+
+
48 static inline void timer0_start_periodic(uint32_t load)
+
49 {
+
50 T0_CONTROL = 0; // disable while reconfig
+
51 T0_LOAD = load; // ex: 10000 for ~100 Hz if TIMCLK≈1 MHz
+
52 T0_INTCLR = 1; // clear any pending interrupt
+ +
54 }
+
+
55
+
+
56 static inline void vic_enable_timer01_irq(void)
+
57 {
+
58 VIC_INTSELECT &= ~(1u << IRQ_TIMER01); // route to IRQ
+
59 VIC_INTENABLE |= (1u << IRQ_TIMER01); // enable line 4
+
60 }
+
+
61#ifdef __cplusplus
+
62}
+
63#endif
+
void irq_enable(void)
Definition interrupt.c:58
+
#define TCTRL_ENABLE
Definition interrupt.h:34
+
#define VIC_INTENABLE
Definition interrupt.h:14
+
static void vic_enable_timer01_irq(void)
Definition interrupt.h:56
+
#define T0_LOAD
Definition interrupt.h:26
+
void interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz)
VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)
Definition interrupt.c:14
+
#define TCTRL_INTEN
Definition interrupt.h:36
+
#define TCTRL_PERIODIC
Definition interrupt.h:35
+
#define VIC_INTSELECT
Definition interrupt.h:13
+
static void timer0_start_periodic(uint32_t load)
Definition interrupt.h:48
+
#define TCTRL_32BIT
Definition interrupt.h:37
+
#define T0_CONTROL
Definition interrupt.h:28
+
void irq_disable(void)
Definition interrupt.c:53
+
#define T0_INTCLR
Definition interrupt.h:29
+
#define IRQ_TIMER01
Definition interrupt.h:40
+
void irq_handler(void)
C-level IRQ handler called from assembly stub in start.s Must clear the source interrupt and (for VIC...
Definition interrupt.c:40
+
+
+
+ + + + diff --git a/docs/html/jquery.js b/docs/html/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/docs/html/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/html/kernel_8c.html b/docs/html/kernel_8c.html new file mode 100644 index 0000000..cdb3a37 --- /dev/null +++ b/docs/html/kernel_8c.html @@ -0,0 +1,437 @@ + + + + + + + +AstraKernel: src/kernel/kernel.c File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kernel.c File Reference
+
+
+
#include <stdbool.h>
+#include <stddef.h>
+#include "datetime.h"
+#include "printf.h"
+#include "clear.h"
+#include "string.h"
+#include "interrupt.h"
+#include "memory.h"
+
+Include dependency graph for kernel.c:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Macros

#define TIMER_TICK_TEST   not_main()
#define SANITY_CHECK   irq_sanity_check()
#define CALL_SVC_0   __asm__ volatile ("svc #0")
+ + + + + +

+Functions

static void init_message (void)
void irq_sanity_check (void)
void not_main (void)
void kernel_main (void)
+ + + + + + +

+Variables

volatile uint64_t systicks
char __heap_start__
char __heap_end__
char __heap_size__
static const char * banner []
+

Macro Definition Documentation

+ +

◆ CALL_SVC_0

+ +
+
+ + + + +
#define CALL_SVC_0   __asm__ volatile ("svc #0")
+
+ +

Definition at line 116 of file kernel.c.

+ +
+
+ +

◆ SANITY_CHECK

+ +
+
+ + + + +
#define SANITY_CHECK   irq_sanity_check()
+
+ +

Definition at line 115 of file kernel.c.

+ +
+
+ +

◆ TIMER_TICK_TEST

+ +
+
+ + + + +
#define TIMER_TICK_TEST   not_main()
+
+ +

Definition at line 114 of file kernel.c.

+ +
+
+

Function Documentation

+ +

◆ init_message()

+ +
+
+ + + + + +
+ + + + + + + +
void init_message (void )
+
+static
+
+ +

Definition at line 32 of file kernel.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ irq_sanity_check()

+ +
+
+ + + + + + + +
void irq_sanity_check (void )
+
+ +

Definition at line 44 of file kernel.c.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ kernel_main()

+ +
+
+ + + + + + + +
void kernel_main (void )
+
+ +

Definition at line 119 of file kernel.c.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ not_main()

+ +
+
+ + + + + + + +
void not_main (void )
+
+ +

Definition at line 66 of file kernel.c.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Variable Documentation

+ +

◆ __heap_end__

+ +
+
+ + + + + +
+ + + + +
char __heap_end__
+
+extern
+
+ +
+
+ +

◆ __heap_size__

+ +
+
+ + + + + +
+ + + + +
char __heap_size__
+
+extern
+
+ +
+
+ +

◆ __heap_start__

+ +
+
+ + + + + +
+ + + + +
char __heap_start__
+
+extern
+
+ +
+
+ +

◆ banner

+ +
+
+ + + + + +
+ + + + +
const char* banner[]
+
+static
+
+Initial value:
= {
+
"========================================\r\n",
+
" AstraKernel v0.1.0\r\n",
+
" Built " __DATE__ " at " __TIME__ "\r\n",
+
"========================================\r\n",
+
"\r\n",
+
" CPU: Cortex-A8 @ 200MHz (simulated)\r\n",
+
" RAM: 128MB SDRAM at 0x00000000\r\n",
+
"\r\n",
+
"Welcome to your own little Astra world!\r\n",
+
"Type away, explore, have fun.\r\n",
+
"\r\n"
+
}
+
+

Definition at line 17 of file kernel.c.

+ +
+
+ +

◆ systicks

+ +
+
+ + + + + +
+ + + + +
volatile uint64_t systicks
+
+extern
+
+ +

Definition at line 6 of file interrupt.c.

+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/kernel_8c.js b/docs/html/kernel_8c.js new file mode 100644 index 0000000..d4d979a --- /dev/null +++ b/docs/html/kernel_8c.js @@ -0,0 +1,15 @@ +var kernel_8c = +[ + [ "CALL_SVC_0", "kernel_8c.html#abf99406c50fd43ebcb9e3e6f6f843e2a", null ], + [ "SANITY_CHECK", "kernel_8c.html#acb05d8656987be634f8bd20154d84eb8", null ], + [ "TIMER_TICK_TEST", "kernel_8c.html#abee0a0a40ba8a0eb2af7112f7b2b0c95", null ], + [ "init_message", "kernel_8c.html#a5f7f5591859a697cdeb5faafdf0ce822", null ], + [ "irq_sanity_check", "kernel_8c.html#a7e3f35a711eee12e3d4bbc0a276fcf0c", null ], + [ "kernel_main", "kernel_8c.html#a6b8fb674fb359f6ae53dc9c4fb7fc6be", null ], + [ "not_main", "kernel_8c.html#a8a11654fcf5bd5fcf10f118ad5f79904", null ], + [ "__heap_end__", "kernel_8c.html#a5f674bc040d9a9407ca7193054c8e974", null ], + [ "__heap_size__", "kernel_8c.html#a0c86500a0535afeb0b92fb3955181545", null ], + [ "__heap_start__", "kernel_8c.html#adcb1118ba48adbd37101ffae162e00bd", null ], + [ "banner", "kernel_8c.html#a0f1ac68e65e509326c6790f5c76da0b9", null ], + [ "systicks", "kernel_8c.html#aef55475e4484403d59e8e19b4ec43ad4", null ] +]; \ No newline at end of file diff --git a/docs/html/kernel_8c__incl.map b/docs/html/kernel_8c__incl.map new file mode 100644 index 0000000..2e9e75a --- /dev/null +++ b/docs/html/kernel_8c__incl.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/kernel_8c__incl.md5 b/docs/html/kernel_8c__incl.md5 new file mode 100644 index 0000000..2916394 --- /dev/null +++ b/docs/html/kernel_8c__incl.md5 @@ -0,0 +1 @@ +bf9d79ef0966aa9767c022ce19322818 \ No newline at end of file diff --git a/docs/html/kernel_8c__incl.svg b/docs/html/kernel_8c__incl.svg new file mode 100644 index 0000000..c678883 --- /dev/null +++ b/docs/html/kernel_8c__incl.svg @@ -0,0 +1,264 @@ + + + + + + +src/kernel/kernel.c + + +Node1 + + +src/kernel/kernel.c + + + + + +Node2 + + +stdbool.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stddef.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +datetime.h + + + + + +Node1->Node4 + + + + + + + + +Node6 + + +printf.h + + + + + +Node1->Node6 + + + + + + + + +Node8 + + +clear.h + + + + + +Node1->Node8 + + + + + + + + +Node9 + + +string.h + + + + + +Node1->Node9 + + + + + + + + +Node10 + + +interrupt.h + + + + + +Node1->Node10 + + + + + + + + +Node11 + + +memory.h + + + + + +Node1->Node11 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node4->Node5 + + + + + + + + +Node6->Node2 + + + + + + + + +Node6->Node3 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +stdarg.h + + + + + +Node6->Node7 + + + + + + + + +Node9->Node3 + + + + + + + + +Node10->Node5 + + + + + + + + +Node11->Node3 + + + + + + + + +Node11->Node5 + + + + + + + + diff --git a/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.map b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.map new file mode 100644 index 0000000..3e2dc22 --- /dev/null +++ b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.map @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.md5 b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.md5 new file mode 100644 index 0000000..d8f3c90 --- /dev/null +++ b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.md5 @@ -0,0 +1 @@ +29e3f2684fa2b98c5afba3106a6d7bde \ No newline at end of file diff --git a/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.svg b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.svg new file mode 100644 index 0000000..43bf042 --- /dev/null +++ b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_cgraph.svg @@ -0,0 +1,246 @@ + + + + + + +init_message + + +Node1 + + +init_message + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node10 + + +puts + + + + + +Node1->Node10 + + + + + + + + +Node3 + + +put_integers + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +put_unsigned + + + + + +Node2->Node5 + + + + + + + + +Node9 + + +putc + + + + + +Node2->Node9 + + + + + + + + +Node2->Node10 + + + + + + + + +Node4 + + +put_signed + + + + + +Node3->Node4 + + + + + + + + +Node3->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node4->Node9 + + + + + + + + +Node6 + + +_divmod + + + + + +Node5->Node6 + + + + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node6->Node7 + + + + + + + + +Node7->Node2 + + + + + + + + +Node8 + + +kernel_halt + + + + + +Node7->Node8 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.map b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.map new file mode 100644 index 0000000..13eefb5 --- /dev/null +++ b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.md5 b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.md5 new file mode 100644 index 0000000..b13a7e5 --- /dev/null +++ b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.md5 @@ -0,0 +1 @@ +338520b006e63475a75b092a5df8b292 \ No newline at end of file diff --git a/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.svg b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.svg new file mode 100644 index 0000000..dbd58c9 --- /dev/null +++ b/docs/html/kernel_8c_a5f7f5591859a697cdeb5faafdf0ce822_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +init_message + + +Node1 + + +init_message + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.map b/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.map new file mode 100644 index 0000000..16a2790 --- /dev/null +++ b/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.map @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.md5 b/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.md5 new file mode 100644 index 0000000..48da56e --- /dev/null +++ b/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.md5 @@ -0,0 +1 @@ +40e4fab5d9387acc10408357d975472c \ No newline at end of file diff --git a/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.svg b/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.svg new file mode 100644 index 0000000..ee40531 --- /dev/null +++ b/docs/html/kernel_8c_a6b8fb674fb359f6ae53dc9c4fb7fc6be_cgraph.svg @@ -0,0 +1,489 @@ + + + + + + +kernel_main + + +Node1 + + +kernel_main + + + + + +Node2 + + +clear + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node1->Node3 + + + + + + + + +Node12 + + +getdate + + + + + +Node1->Node12 + + + + + + + + +Node13 + + +getlines + + + + + +Node1->Node13 + + + + + + + + +Node15 + + +gettime + + + + + +Node1->Node15 + + + + + + + + +Node16 + + +init_message + + + + + +Node1->Node16 + + + + + + + + +Node17 + + +kmalloc_init + + + + + +Node1->Node17 + + + + + + + + +Node19 + + +kmalloc_remaining + + + + + +Node1->Node19 + + + + + + + + +Node20 + + +strcmp + + + + + +Node1->Node20 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +put_integers + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +put_unsigned + + + + + +Node3->Node6 + + + + + + + + +Node10 + + +putc + + + + + +Node3->Node10 + + + + + + + + +Node11 + + +puts + + + + + +Node3->Node11 + + + + + + + + +Node5 + + +put_signed + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node5->Node6 + + + + + + + + +Node5->Node10 + + + + + + + + +Node7 + + +_divmod + + + + + +Node6->Node7 + + + + + + + + +Node6->Node10 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node7->Node8 + + + + + + + + +Node8->Node3 + + + + + + + + +Node9 + + +kernel_halt + + + + + +Node8->Node9 + + + + + + + + +Node11->Node10 + + + + + + + + +Node13->Node3 + + + + + + + + +Node13->Node10 + + + + + + + + +Node13->Node11 + + + + + + + + +Node14 + + +getc + + + + + +Node13->Node14 + + + + + + + + +Node16->Node3 + + + + + + + + +Node16->Node11 + + + + + + + + +Node17->Node8 + + + + + + + + +Node17->Node11 + + + + + + + + +Node18 + + +align_up_uintptr + + + + + +Node17->Node18 + + + + + + + + diff --git a/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.map b/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.map new file mode 100644 index 0000000..6fe296f --- /dev/null +++ b/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.md5 b/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.md5 new file mode 100644 index 0000000..d5b4eb9 --- /dev/null +++ b/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.md5 @@ -0,0 +1 @@ +042525deb002906bc5e406e7abe4ad6b \ No newline at end of file diff --git a/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.svg b/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.svg new file mode 100644 index 0000000..4028d55 --- /dev/null +++ b/docs/html/kernel_8c_a7e3f35a711eee12e3d4bbc0a276fcf0c_cgraph.svg @@ -0,0 +1,93 @@ + + + + + + +irq_sanity_check + + +Node1 + + +irq_sanity_check + + + + + +Node2 + + +irq_disable + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +irq_enable + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +puts + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +putc + + + + + +Node4->Node5 + + + + + + + + diff --git a/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.map b/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.map new file mode 100644 index 0000000..aec79df --- /dev/null +++ b/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.md5 b/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.md5 new file mode 100644 index 0000000..dbc5c7d --- /dev/null +++ b/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.md5 @@ -0,0 +1 @@ +743abe7170cbd7410d00091e9daee20d \ No newline at end of file diff --git a/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.svg b/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.svg new file mode 100644 index 0000000..ab425be --- /dev/null +++ b/docs/html/kernel_8c_a8a11654fcf5bd5fcf10f118ad5f79904_cgraph.svg @@ -0,0 +1,372 @@ + + + + + + +not_main + + +Node1 + + +not_main + + + + + +Node2 + + +interrupts_init_timer0 + + + + + +Node1->Node2 + + + + + + + + +Node6 + + +printf + + + + + +Node1->Node6 + + + + + + + + +Node12 + + +puts + + + + + +Node1->Node12 + + + + + + + + +Node15 + + +irq_enable + + + + + +Node1->Node15 + + + + + + + + +Node16 + + +kmalloc + + + + + +Node1->Node16 + + + + + + + + +Node3 + + +_udiv32 + + + + + +Node2->Node3 + + + + + + + + +Node13 + + +timer0_start_periodic + + + + + +Node2->Node13 + + + + + + + + +Node14 + + +vic_enable_timer01_irq + + + + + +Node2->Node14 + + + + + + + + +Node4 + + +kernel_panic + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_halt + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node7 + + +put_integers + + + + + +Node6->Node7 + + + + + + + + +Node9 + + +put_unsigned + + + + + +Node6->Node9 + + + + + + + + +Node11 + + +putc + + + + + +Node6->Node11 + + + + + + + + +Node6->Node12 + + + + + + + + +Node8 + + +put_signed + + + + + +Node7->Node8 + + + + + + + + +Node7->Node9 + + + + + + + + +Node8->Node9 + + + + + + + + +Node8->Node11 + + + + + + + + +Node10 + + +_divmod + + + + + +Node9->Node10 + + + + + + + + +Node9->Node11 + + + + + + + + +Node10->Node4 + + + + + + + + +Node12->Node11 + + + + + + + + +Node16->Node4 + + + + + + + + diff --git a/docs/html/kernel_8c_source.html b/docs/html/kernel_8c_source.html new file mode 100644 index 0000000..9d730e1 --- /dev/null +++ b/docs/html/kernel_8c_source.html @@ -0,0 +1,366 @@ + + + + + + + +AstraKernel: src/kernel/kernel.c Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kernel.c
+
+
+Go to the documentation of this file.
1#include <stdbool.h>
+
2#include <stddef.h>
+
3
+
4#include "datetime.h"
+
5#include "printf.h"
+
6#include "clear.h"
+
7#include "string.h"
+
8#include "interrupt.h"
+
9#include "memory.h"
+
10
+
11extern volatile uint64_t systicks; // this is declared in interrupt.c
+
12
+
13extern char __heap_start__;
+
14extern char __heap_end__;
+
15extern char __heap_size__;
+
16
+
+
17static const char *banner[] = {
+
18 "========================================\r\n",
+
19 " AstraKernel v0.1.0\r\n",
+
20 " Built " __DATE__ " at " __TIME__ "\r\n",
+
21 "========================================\r\n",
+
22 "\r\n",
+
23 " CPU: Cortex-A8 @ 200MHz (simulated)\r\n",
+
24 " RAM: 128MB SDRAM at 0x00000000\r\n",
+
25 "\r\n",
+
26 "Welcome to your own little Astra world!\r\n",
+
27 "Type away, explore, have fun.\r\n",
+
28 "\r\n"
+
29};
+
+
30
+
31// Initializes and prints the welcome banner.
+
+
32static void init_message(void)
+
33{
+
34 for (size_t i = 0; i < sizeof(banner) / sizeof(banner[0]); ++i)
+
35 {
+
36 puts(banner[i]);
+
37 }
+
38
+
39 printf("AstraKernel is running...\r\n");
+
40 printf("Press Ctrl-A and then X to exit QEMU.\r\n");
+
41 printf("\r\n");
+
42}
+
+
43
+
+ +
45{
+ +
47 const unsigned before = systicks;
+
48
+
49 irq_enable();
+ +
51
+
52 const unsigned after = systicks;
+
53
+
54 if (before == after)
+
55 {
+
56 puts("\r\nA1 Sanity PASS: no spurious IRQs\r\n");
+
57 }
+
58 else
+
59 {
+
60 puts("\r\nA1 Sanity FAIL: unexpected IRQs\r\n");
+
61 }
+
62}
+
+
63
+
64// This function is for testing purposes.
+
65// It test that the timer interrupt is firing as expected.
+
+
66void not_main(void)
+
67{
+
68 puts("Memory allocation firing test!\r\n");
+
69
+
70 void *p = kmalloc(10);
+
71 void *p2 = kmalloc(48);
+
72 printf("kmalloc(10) addr: %p\n", p);
+
73 printf("kmalloc(48) addr: %p\n", p2);
+
74
+
75 char *buf = kmalloc(1);
+
76 if (buf)
+
77 {
+
78 printf("buf addr: %p\n", buf);
+
79 buf[0] = 'a';
+
80 buf[1] = 'b';
+
81 buf[2] = 'c';
+
82 }
+
83
+
84 printf("content -> %c%c%c\n addr -> %p\n%p\n%p\n", buf[0], buf[1], buf[2], &buf[0], &buf[1], &buf[2]);
+
85 printf("buf[0] add: %p\n", &buf[0]);
+
86
+
87 unsigned heap_size_kb = (unsigned)(uintptr_t)&__heap_size__ / 1024;
+
88 printf("heap: start=0x%x end=0x%x size=%u KiB\r\n",
+
89 (unsigned)(uintptr_t)&__heap_start__,
+
90 (unsigned)(uintptr_t)&__heap_end__,
+
91 heap_size_kb);
+
92
+
93 puts("Time0 IRQ firing test!\r\n");
+
94
+
95 // Configure Timer0 for 100 Hz assuming 1 MHz timer clock in QEMU
+
96 interrupts_init_timer0(100, 1000000);
+
97
+
98 // Unmask CPU IRQs (I-bit = 0)
+
99 irq_enable();
+
100
+
101 // Test loop: print a dot every ~100 ticks
+
102 uint64_t last = 0;
+
103 for (;;)
+
104 {
+
105 if (systicks - last >= 100)
+
106 {
+
107 last = systicks;
+
108 puts(".");
+
109 }
+
110 }
+
111}
+
+
112
+
113/* The following macros are for testing purposes. */
+
114#define TIMER_TICK_TEST not_main()
+
115#define SANITY_CHECK irq_sanity_check()
+
116#define CALL_SVC_0 __asm__ volatile ("svc #0")
+
117
+
118// Entry point for the kernel
+
+
119void kernel_main(void)
+
120{
+
121 clear();
+ + +
124
+
125 /* TESTS */
+
126 #ifdef USE_KTESTS
+ + + +
130 #endif
+
131
+
132 /* Back to normal operations */
+
133 init_message();
+
134
+
135 char input_buffer[100];
+
136
+
137 dateval date_struct;
+
138 timeval time_struct;
+
139
+
140 bool is_running = true;
+
141 while (is_running)
+
142 {
+
143 input_buffer[0] = '\0'; // Clear the input buffer
+
144 printf("AstraKernel > ");
+
145 getlines(input_buffer, sizeof(input_buffer));
+
146
+
147 printf("\r\n");
+
148
+
149 if (input_buffer[0] == '\0') continue;
+
150
+
151 switch (input_buffer[0])
+
152 {
+
153 case 'h': // Check for help command
+
154 printf("\nHelp:\n 'q' to exit\n 'h' for help\n 'c' to clear screen\n 't' to print current time\n 'd' to print current date\r\n");
+
155 break;
+
156
+
157 case 'b':
+
158 /* @todo Remove this section when testings are over. */
+
159 printf("UART base: 0x%p\n", (void *)0x101F1000);
+
160 printf("CPU Mode: %s\n", "Supervisor");
+
161 printf("Test signed: %d, unsigned: %u, hex: 0x%X\n", -42, 42, 42);
+
162
+
163 case 'e':
+
164 /* @todo Remove this section when testings are over. */
+
165 int result = strcmp("abc", "abc"); // Expect 0
+
166 printf("Expect 0 -> %d\r\n", result);
+
167
+
168 result = strcmp("abc", "abd"); // Expect -1
+
169 printf("Expect -1 -> %d\r\n", result);
+
170
+
171 result = strcmp("abc", "ABC"); // Expect 1
+
172 printf("Expect 1 -> %d\r\n", result);
+
173
+
174 result = strcmp("ABC", "abc"); // Expect -1
+
175 printf("Expect -1 -> %d\r\n", result);
+
176
+
177 result = strcmp("\x01\x02\x03", "\x01\x02\x03"); // Expect 0
+
178 printf("Expect 0 -> %d\r\n", result);
+
179
+
180 result = strcmp("\x01\x02\x03", "\x01\x02\x04"); // Expect -1
+
181 printf("Expect -1 -> %d\r\n", result);
+
182
+
183 result = strcmp("\x01\x02\x04", "\x01\x02\x03"); // Expect 1
+
184 printf("Expect 1 -> %d\r\n", result);
+
185 break;
+
186
+
187 case 'q': // Check for exit command
+
188 printf("Exiting...\r\n");
+
189 is_running = false;
+
190 break;
+
191
+
192 case 'c': // Check for clear screen command
+
193 clear();
+
194 break;
+
195
+
196 case 't': // Check for time command
+
197 gettime(&time_struct);
+
198 printf("Current time(GMT): %d:%d:%d\r\n", time_struct.hrs, time_struct.mins, time_struct.secs);
+
199 break;
+
200
+
201 case 'd': // Check for date command
+
202 getdate(&date_struct);
+
203 printf("Current date(MM-DD-YYYY): %d-%d-%d\r\n", date_struct.month, date_struct.day, date_struct.year);
+
204 break;
+
205
+
206 default:
+
207 printf("Unknown command. Type 'h' for help.\r\n");
+
208 break;
+
209 }
+
210 }
+
211}
+
+
void clear(void)
Clears the terminal screen and moves the cursor to the home position.
Definition clear.c:6
+ +
uint32_t getdate(dateval *date_struct)
Definition datetime.c:15
+
uint32_t gettime(timeval *time_struct)
Definition datetime.c:49
+ +
void irq_enable(void)
Definition interrupt.c:58
+
void interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz)
VersatilePB SP804 timer clock is typically 1 MHz (can be overridden)
Definition interrupt.c:14
+
void irq_disable(void)
Definition interrupt.c:53
+
volatile uint64_t systicks
Definition interrupt.c:6
+ +
char __heap_size__
+
static const char * banner[]
Definition kernel.c:17
+
char __heap_end__
+
static void init_message(void)
Definition kernel.c:32
+
void kernel_main(void)
Definition kernel.c:119
+
void irq_sanity_check(void)
Definition kernel.c:44
+
void not_main(void)
Definition kernel.c:66
+
#define TIMER_TICK_TEST
Definition kernel.c:114
+
#define CALL_SVC_0
Definition kernel.c:116
+
#define SANITY_CHECK
Definition kernel.c:115
+
char __heap_start__
+
size_t kmalloc_remaining(void)
Definition memory.c:62
+
void * kmalloc(size_t size)
Definition memory.c:41
+
void kmalloc_init(void *start, void *limit)
Definition memory.c:18
+ +
void printf(const char *fmt,...)
Kernel printf implementation using UART output.
Definition printf.c:205
+
void puts(const char *s)
Transmit a null-terminated string.
Definition printf.c:187
+
void getlines(char *restrict buffer, size_t length)
Read a line of text from UART with basic editing support.
Definition printf.c:346
+
Minimal kernel printf/puts/getlines interface for freestanding systems.
+
int strcmp(const char *str_1, const char *str_2)
Compares two null-terminated strings lexicographically.
Definition string.c:11
+ + +
uint32_t month
Definition datetime.h:20
+
uint32_t year
Definition datetime.h:21
+
uint32_t day
Definition datetime.h:19
+ +
uint32_t secs
Definition datetime.h:14
+
uint32_t hrs
Definition datetime.h:12
+
uint32_t mins
Definition datetime.h:13
+
+
+
+ + + + diff --git a/docs/html/kernel_8ld.html b/docs/html/kernel_8ld.html new file mode 100644 index 0000000..a0cf30e --- /dev/null +++ b/docs/html/kernel_8ld.html @@ -0,0 +1,115 @@ + + + + + + + +AstraKernel: kernel.ld File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kernel.ld File Reference
+
+ +
+ +
+ + + + diff --git a/docs/html/kernel_8ld_source.html b/docs/html/kernel_8ld_source.html new file mode 100644 index 0000000..3a73c39 --- /dev/null +++ b/docs/html/kernel_8ld_source.html @@ -0,0 +1,193 @@ + + + + + + + +AstraKernel: kernel.ld Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kernel.ld
+
+
+Go to the documentation of this file.
1ASSERT(SIZEOF(.text) < 0x00100000, "Error: .text grew beyond the 1 MiB safety window");
+
2OUTPUT_ARCH(arm)
+
3OUTPUT_FORMAT("elf32-littlearm","elf32-bigarm","elf32-littlearm")
+
4ENTRY(_start)
+
5
+
6MEMORY
+
7{
+
8 RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 128M /* 128 MB */
+
9}
+
10
+
11SECTIONS
+
12{
+
13 /* Exception vector table at 0x00000000
+
14 * the . line can be removed at some point
+
15 * if we want, as the VBAR alone determine where
+
16 * exceptions land. This will be done once the MMU
+
17 * is fully enabled. For this, we will need to have
+
18 * the page table in place (vector Virtual Addres (VA) mapped)
+
19 */
+
20 . = ORIGIN(RAM);
+
21 .vectors ALIGN(32) : /* Aligned by 32 bytes */
+
22 {
+
23 KEEP(*(.vectors))
+
24 } > RAM
+
25
+
26 /* Main kernel starts at 64KB */
+
27 . = 0x00010000;
+
28 .text BLOCK(4K) : ALIGN(4K)
+
29 {
+
30 __text_start = .;
+
31 *(.text .text.*)
+
32 __text_end = .;
+
33 } > RAM
+
34
+
35 .rodata BLOCK(4K) : ALIGN(4K)
+
36 {
+
37 __rodata_start = .;
+
38 *(.rodata .rodata.*)
+
39 __rodata_end = .;
+
40 } > RAM
+
41
+
42 .data BLOCK(4K) : ALIGN(4K)
+
43 {
+
44 __data_start = .;
+
45 *(.data)
+
46 __data_end = .;
+
47 } > RAM AT > RAM
+
48 __data_load = LOADADDR(.data);
+
49
+
50 /* Reserved space for initial page tables (MMU) */
+
51 .ptables BLOCK(16K) : ALIGN(16K)
+
52 {
+
53 __ptables_start = .;
+
54 /* Reserve 16 KiB for L1 table; extend as needed for L2 tables */
+
55 . = . + 0x4000;
+
56 __ptables_end = .;
+
57 } > RAM
+
58
+
59 .bss BLOCK(4K) : ALIGN(4K)
+
60 {
+
61 __bss_start = .;
+
62 *(.bss .bss.*)
+
63 *(.sbss .sbss.*)
+
64 *(COMMON)
+
65 __bss_end = .;
+
66 } > RAM
+
67
+
68 /* Stack pointer = top of RAM */
+
69 __stack_top__ = ORIGIN(RAM) + LENGTH(RAM);
+
70
+
71 /* Reserve space for kernel stacks (64 KiB total) */
+
72 __stack_bottom__ = __stack_top__ - 64K;
+
73
+
74 /* Heap starts right after .bss */
+
75 __heap_start__ = .;
+
76 __heap_end__ = __stack_bottom__;
+
77 __heap_size__ = __heap_end__ - __heap_start__;
+
78
+
79 /* Discard unneeded sections to keep image lean */
+
80 /DISCARD/ :
+
81 {
+
82 *(.comment)
+
83 *(.note*)
+
84 *(.debug* .gnu.debug*)
+
85 *(.stab* .stabstr*)
+
86 }
+
87}
+
+
+
+ + + + diff --git a/docs/html/math_8h.html b/docs/html/math_8h.html new file mode 100644 index 0000000..141a955 --- /dev/null +++ b/docs/html/math_8h.html @@ -0,0 +1,186 @@ + + + + + + + +AstraKernel: include/lib/math.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
math.h File Reference
+
+
+
#include <stdint.h>
+#include "panic.h"
+
+Include dependency graph for math.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + +

+Functions

static uint32_t _udiv32 (uint32_t n, uint32_t d)
 Unsigned 32-bit integer division: n / d.
+

Function Documentation

+ +

◆ _udiv32()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
uint32_t _udiv32 (uint32_t n,
uint32_t d )
+
+inlinestatic
+
+ +

Unsigned 32-bit integer division: n / d.

+
Parameters
+ + + +
nNumerator.
dDenominator.
+
+
+
Returns
uint32_t Quotient, discards remainder.
+
Note
If d == 0: kernel panic. Otherwise, returns the quotient and discards the remainder.
+ +

Definition at line 17 of file math.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/math_8h.js b/docs/html/math_8h.js new file mode 100644 index 0000000..350f6f5 --- /dev/null +++ b/docs/html/math_8h.js @@ -0,0 +1,4 @@ +var math_8h = +[ + [ "_udiv32", "math_8h.html#a97fbf4adb8a31d415775bdbd5c30c468", null ] +]; \ No newline at end of file diff --git a/docs/html/math_8h__dep__incl.map b/docs/html/math_8h__dep__incl.map new file mode 100644 index 0000000..aceaec9 --- /dev/null +++ b/docs/html/math_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/math_8h__dep__incl.md5 b/docs/html/math_8h__dep__incl.md5 new file mode 100644 index 0000000..96fa37b --- /dev/null +++ b/docs/html/math_8h__dep__incl.md5 @@ -0,0 +1 @@ +475346150dc96c5e10580200502113bf \ No newline at end of file diff --git a/docs/html/math_8h__dep__incl.svg b/docs/html/math_8h__dep__incl.svg new file mode 100644 index 0000000..38f6a39 --- /dev/null +++ b/docs/html/math_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +include/lib/math.h + + +Node1 + + +include/lib/math.h + + + + + +Node2 + + +src/kernel/interrupt.c + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/math_8h__incl.map b/docs/html/math_8h__incl.map new file mode 100644 index 0000000..c564cf6 --- /dev/null +++ b/docs/html/math_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/math_8h__incl.md5 b/docs/html/math_8h__incl.md5 new file mode 100644 index 0000000..6517092 --- /dev/null +++ b/docs/html/math_8h__incl.md5 @@ -0,0 +1 @@ +fa97f07e85e78842832bbcf2f2f544d3 \ No newline at end of file diff --git a/docs/html/math_8h__incl.svg b/docs/html/math_8h__incl.svg new file mode 100644 index 0000000..3654e29 --- /dev/null +++ b/docs/html/math_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +include/lib/math.h + + +Node1 + + +include/lib/math.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +panic.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.map b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.map new file mode 100644 index 0000000..5efaf21 --- /dev/null +++ b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.md5 b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.md5 new file mode 100644 index 0000000..babd684 --- /dev/null +++ b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.md5 @@ -0,0 +1 @@ +d6c76fd8c3b4e8d3f51f364b5d740371 \ No newline at end of file diff --git a/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.svg b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.svg new file mode 100644 index 0000000..7943203 --- /dev/null +++ b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_cgraph.svg @@ -0,0 +1,237 @@ + + + + + + +_udiv32 + + +Node1 + + +_udiv32 + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_halt + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +printf + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +put_integers + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +put_unsigned + + + + + +Node4->Node7 + + + + + + + + +Node9 + + +putc + + + + + +Node4->Node9 + + + + + + + + +Node10 + + +puts + + + + + +Node4->Node10 + + + + + + + + +Node6 + + +put_signed + + + + + +Node5->Node6 + + + + + + + + +Node5->Node7 + + + + + + + + +Node6->Node7 + + + + + + + + +Node6->Node9 + + + + + + + + +Node8 + + +_divmod + + + + + +Node7->Node8 + + + + + + + + +Node7->Node9 + + + + + + + + +Node8->Node2 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.map b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.map new file mode 100644 index 0000000..3f9d49c --- /dev/null +++ b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.md5 b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.md5 new file mode 100644 index 0000000..3faf9e6 --- /dev/null +++ b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.md5 @@ -0,0 +1 @@ +a874814366dd3800a85152440b2f5709 \ No newline at end of file diff --git a/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.svg b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.svg new file mode 100644 index 0000000..4e952ae --- /dev/null +++ b/docs/html/math_8h_a97fbf4adb8a31d415775bdbd5c30c468_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +_udiv32 + + +Node1 + + +_udiv32 + + + + + +Node2 + + +interrupts_init_timer0 + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +not_main + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/math_8h_source.html b/docs/html/math_8h_source.html new file mode 100644 index 0000000..1b138cd --- /dev/null +++ b/docs/html/math_8h_source.html @@ -0,0 +1,139 @@ + + + + + + + +AstraKernel: include/lib/math.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
math.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <stdint.h>
+
4#include "panic.h"
+
5
+
+
17static inline uint32_t _udiv32(uint32_t n, uint32_t d)
+
18{
+
19 if (d == 0)
+
20 {
+
21 kernel_panic("Error: Division by zero in udiv32.\n");
+
22 }
+
23
+
24 uint32_t quotient = 0;
+
25 uint32_t remainder = 0;
+
26 for (int i = 31; i >= 0; --i)
+
27 {
+
28 remainder = (remainder << 1) | ((n >> i) & 1u);
+
29 if (remainder >= d)
+
30 {
+
31 remainder -= d;
+
32 quotient |= (1u << i);
+
33 }
+
34 }
+
35 return quotient;
+
36}
+
+
37// Note: This is a simple implementation and may not be the most efficient.
+
38// It is intended for educational purposes and may be replaced with
+
39// architecture-specific optimizations if needed.
+
static uint32_t _udiv32(uint32_t n, uint32_t d)
Unsigned 32-bit integer division: n / d.
Definition math.h:17
+
void kernel_panic(const char *message)
Print a panic message and halt the CPU.
Definition panic.c:45
+
Kernel panic and halt routines.
+
+
+
+ + + + diff --git a/docs/html/md_docs_2pages_2panic.html b/docs/html/md_docs_2pages_2panic.html new file mode 100644 index 0000000..3442d35 --- /dev/null +++ b/docs/html/md_docs_2pages_2panic.html @@ -0,0 +1,128 @@ + + + + + + + +AstraKernel: Kernel Panic Subsystem + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Kernel Panic Subsystem
+
+
+

+

The panic subsystem provides the kernel with a controlled way to stop execution when a fatal error occurs.

+

+Design

+
    +
  • Panics print an error message to the console before halting.
  • +
  • The halt routine disables interrupts and executes wfi indefinitely, ensuring the CPU does not execute further instructions.
  • +
+

+Future Plans

+
    +
  • Add structured error codes via errno.h/.c.
  • +
  • Provide hooks for logging the panic state (e.g., stack trace).
  • +
  • Possibly support multi-core halting (broadcast halt signal).
  • +
+
+
+
+ +
+ + + + diff --git a/docs/html/memory_8c.html b/docs/html/memory_8c.html new file mode 100644 index 0000000..4ae31c0 --- /dev/null +++ b/docs/html/memory_8c.html @@ -0,0 +1,334 @@ + + + + + + + +AstraKernel: src/kernel/memory.c File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
memory.c File Reference
+
+
+
#include "memory.h"
+#include "panic.h"
+#include "printf.h"
+#include <stdatomic.h>
+
+Include dependency graph for memory.c:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + +

+Functions

static uintptr_t align_up_uintptr (uintptr_t x, size_t align)
void kmalloc_init (void *start, void *limit)
void * kmalloc (size_t size)
size_t kmalloc_remaining (void)
+ + + + +

+Variables

static const size_t KMALLOC_ALIGN = (16 < sizeof(void*) ? sizeof(void*) : 16)
static _Atomic uintptr_t heap_cur = 0
static uintptr_t heap_end = 0
+

Function Documentation

+ +

◆ align_up_uintptr()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
uintptr_t align_up_uintptr (uintptr_t x,
size_t align )
+
+inlinestatic
+
+ +

Definition at line 13 of file memory.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ kmalloc()

+ +
+
+ + + + + + + +
void * kmalloc (size_t size)
+
+ +

Definition at line 41 of file memory.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ kmalloc_init()

+ +
+
+ + + + + + + + + + + +
void kmalloc_init (void * start,
void * limit )
+
+ +

Definition at line 18 of file memory.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ kmalloc_remaining()

+ +
+
+ + + + + + + +
size_t kmalloc_remaining (void )
+
+ +

Definition at line 62 of file memory.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Variable Documentation

+ +

◆ heap_cur

+ +
+
+ + + + + +
+ + + + +
_Atomic uintptr_t heap_cur = 0
+
+static
+
+ +

Definition at line 10 of file memory.c.

+ +
+
+ +

◆ heap_end

+ +
+
+ + + + + +
+ + + + +
uintptr_t heap_end = 0
+
+static
+
+ +

Definition at line 11 of file memory.c.

+ +
+
+ +

◆ KMALLOC_ALIGN

+ +
+
+ + + + + +
+ + + + +
const size_t KMALLOC_ALIGN = (16 < sizeof(void*) ? sizeof(void*) : 16)
+
+static
+
+ +

Definition at line 8 of file memory.c.

+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/memory_8c.js b/docs/html/memory_8c.js new file mode 100644 index 0000000..36f79af --- /dev/null +++ b/docs/html/memory_8c.js @@ -0,0 +1,10 @@ +var memory_8c = +[ + [ "align_up_uintptr", "memory_8c.html#a4742e575dd722d9e1d926ab578f02c9f", null ], + [ "kmalloc", "memory_8c.html#a87d8585002a620e687d68b38ab387a0e", null ], + [ "kmalloc_init", "memory_8c.html#ae8d09a66c8495a0c2ff5c54f1309fd6a", null ], + [ "kmalloc_remaining", "memory_8c.html#a5a329ef700130de7d4a5ade2fa4f3998", null ], + [ "heap_cur", "memory_8c.html#a30f61122e981effc69731cd6b4e750b9", null ], + [ "heap_end", "memory_8c.html#a874db3bfd8c5593f9080ee32fee5b1ab", null ], + [ "KMALLOC_ALIGN", "memory_8c.html#a33dfa93395fb15626ad7538600aefe5a", null ] +]; \ No newline at end of file diff --git a/docs/html/memory_8c__incl.map b/docs/html/memory_8c__incl.map new file mode 100644 index 0000000..f79c41c --- /dev/null +++ b/docs/html/memory_8c__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/memory_8c__incl.md5 b/docs/html/memory_8c__incl.md5 new file mode 100644 index 0000000..6d926d3 --- /dev/null +++ b/docs/html/memory_8c__incl.md5 @@ -0,0 +1 @@ +733b39fbba0dcddbd25dafd15328c8d7 \ No newline at end of file diff --git a/docs/html/memory_8c__incl.svg b/docs/html/memory_8c__incl.svg new file mode 100644 index 0000000..799919a --- /dev/null +++ b/docs/html/memory_8c__incl.svg @@ -0,0 +1,183 @@ + + + + + + +src/kernel/memory.c + + +Node1 + + +src/kernel/memory.c + + + + + +Node2 + + +memory.h + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +panic.h + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +printf.h + + + + + +Node1->Node6 + + + + + + + + +Node9 + + +stdatomic.h + + + + + +Node1->Node9 + + + + + + + + +Node3 + + +stddef.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node2->Node4 + + + + + + + + +Node6->Node3 + + + + + + + + +Node6->Node4 + + + + + + + + +Node7 + + +stdarg.h + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +stdbool.h + + + + + +Node6->Node8 + + + + + + + + diff --git a/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.map b/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.map new file mode 100644 index 0000000..2354592 --- /dev/null +++ b/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.md5 b/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.md5 new file mode 100644 index 0000000..5b658dc --- /dev/null +++ b/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.md5 @@ -0,0 +1 @@ +df08116021bcaa8934c688b7d6d58e15 \ No newline at end of file diff --git a/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.svg b/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.svg new file mode 100644 index 0000000..58bc543 --- /dev/null +++ b/docs/html/memory_8c_a4742e575dd722d9e1d926ab578f02c9f_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +align_up_uintptr + + +Node1 + + +align_up_uintptr + + + + + +Node2 + + +kmalloc_init + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.map b/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.map new file mode 100644 index 0000000..6fa133c --- /dev/null +++ b/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.md5 b/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.md5 new file mode 100644 index 0000000..55f5fb1 --- /dev/null +++ b/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.md5 @@ -0,0 +1 @@ +3079076b10a1b47e1f15dda202a65df5 \ No newline at end of file diff --git a/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.svg b/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.svg new file mode 100644 index 0000000..51aedb3 --- /dev/null +++ b/docs/html/memory_8c_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +kmalloc_remaining + + +Node1 + + +kmalloc_remaining + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.map b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.map new file mode 100644 index 0000000..de1cfbb --- /dev/null +++ b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.md5 b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.md5 new file mode 100644 index 0000000..6dbd1c6 --- /dev/null +++ b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.md5 @@ -0,0 +1 @@ +0e8e243444b36717a70fba2d59ac874f \ No newline at end of file diff --git a/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.svg b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.svg new file mode 100644 index 0000000..517df5e --- /dev/null +++ b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_cgraph.svg @@ -0,0 +1,237 @@ + + + + + + +kmalloc + + +Node1 + + +kmalloc + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_halt + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +printf + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +put_integers + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +put_unsigned + + + + + +Node4->Node7 + + + + + + + + +Node9 + + +putc + + + + + +Node4->Node9 + + + + + + + + +Node10 + + +puts + + + + + +Node4->Node10 + + + + + + + + +Node6 + + +put_signed + + + + + +Node5->Node6 + + + + + + + + +Node5->Node7 + + + + + + + + +Node6->Node7 + + + + + + + + +Node6->Node9 + + + + + + + + +Node8 + + +_divmod + + + + + +Node7->Node8 + + + + + + + + +Node7->Node9 + + + + + + + + +Node8->Node2 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.map b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.map new file mode 100644 index 0000000..1fc2271 --- /dev/null +++ b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.md5 b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.md5 new file mode 100644 index 0000000..84ceef6 --- /dev/null +++ b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.md5 @@ -0,0 +1 @@ +b9a6cf7dbd292774fad34e8d58451fcd \ No newline at end of file diff --git a/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.svg b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.svg new file mode 100644 index 0000000..796ebd9 --- /dev/null +++ b/docs/html/memory_8c_a87d8585002a620e687d68b38ab387a0e_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +kmalloc + + +Node1 + + +kmalloc + + + + + +Node2 + + +not_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.map b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.map new file mode 100644 index 0000000..958d517 --- /dev/null +++ b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.md5 b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.md5 new file mode 100644 index 0000000..17337a0 --- /dev/null +++ b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.md5 @@ -0,0 +1 @@ +4cb40fbaaf55dc6a8fef7dcf9d93fbac \ No newline at end of file diff --git a/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.svg b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.svg new file mode 100644 index 0000000..3296422 --- /dev/null +++ b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.svg @@ -0,0 +1,264 @@ + + + + + + +kmalloc_init + + +Node1 + + +kmalloc_init + + + + + +Node2 + + +align_up_uintptr + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_panic + + + + + +Node1->Node3 + + + + + + + + +Node11 + + +puts + + + + + +Node1->Node11 + + + + + + + + +Node4 + + +kernel_halt + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +put_integers + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +put_unsigned + + + + + +Node5->Node8 + + + + + + + + +Node10 + + +putc + + + + + +Node5->Node10 + + + + + + + + +Node5->Node11 + + + + + + + + +Node7 + + +put_signed + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node8 + + + + + + + + +Node7->Node10 + + + + + + + + +Node9 + + +_divmod + + + + + +Node8->Node9 + + + + + + + + +Node8->Node10 + + + + + + + + +Node9->Node3 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.map b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.map new file mode 100644 index 0000000..d551316 --- /dev/null +++ b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.md5 b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.md5 new file mode 100644 index 0000000..cf940c4 --- /dev/null +++ b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.md5 @@ -0,0 +1 @@ +aafa3a5144d80acd5e1190578bd0293e \ No newline at end of file diff --git a/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.svg b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.svg new file mode 100644 index 0000000..60cbf57 --- /dev/null +++ b/docs/html/memory_8c_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +kmalloc_init + + +Node1 + + +kmalloc_init + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/memory_8c_source.html b/docs/html/memory_8c_source.html new file mode 100644 index 0000000..d84384b --- /dev/null +++ b/docs/html/memory_8c_source.html @@ -0,0 +1,191 @@ + + + + + + + +AstraKernel: src/kernel/memory.c Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
memory.c
+
+
+Go to the documentation of this file.
1#include "memory.h"
+
2#include "panic.h"
+
3#include "printf.h"
+
4
+
5#include <stdatomic.h>
+
6
+
7// Default alignment: at least pointer size; 16 is a good general default.
+
8static const size_t KMALLOC_ALIGN = (16 < sizeof(void*) ? sizeof(void*) : 16);
+
9
+
10static _Atomic uintptr_t heap_cur = 0; // atomic in case of future multi core
+
11static uintptr_t heap_end = 0;
+
12
+
+
13static inline uintptr_t align_up_uintptr(uintptr_t x, size_t align)
+
14{
+
15 return (x + (align - 1)) & ~(uintptr_t)(align - 1);
+
16}
+
+
17
+
+
18void kmalloc_init(void *start, void *limit)
+
19{
+
20 const uintptr_t s = (uintptr_t)start;
+
21 const uintptr_t l = (uintptr_t)limit;
+
22 if (l <= s)
+
23 {
+
24 kernel_panic("kmalloc_init: invalid heap range");
+
25 }
+
26
+
27 const uintptr_t aligned_start = align_up_uintptr(s, KMALLOC_ALIGN);
+
28 const uintptr_t aligned_end = l & ~(KMALLOC_ALIGN - 1);
+
29
+
30 if (aligned_end <= aligned_start)
+
31 {
+
32 kernel_panic("kmalloc_init: heap too small after alignment");
+
33 }
+
34
+
35 heap_cur = aligned_start;
+
36 heap_end = aligned_end;
+
37
+
38 puts("kmalloc init\n");
+
39}
+
+
40
+
+
41void *kmalloc(size_t size)
+
42{
+
43 if (size == 0 || heap_cur == 0 || heap_end == 0)
+
44 {
+
45 return NULL; // not initialized
+
46 }
+
47
+
48 // Round size up to alignment
+
49 size = (size + (KMALLOC_ALIGN - 1)) & ~(size_t)(KMALLOC_ALIGN - 1);
+
50
+
51 if (size > (size_t)(heap_end - heap_cur))
+
52 {
+
53 kernel_panic("kmalloc: out of memory");
+
54 }
+
55
+
56 void *ptr = (void *)heap_cur;
+
57 heap_cur += (uintptr_t)size;
+
58
+
59 return ptr;
+
60}
+
+
61
+
+ +
63{
+
64 return (heap_end > heap_cur) ? (size_t)(heap_end - heap_cur) : 0;
+
65}
+
+
static _Atomic uintptr_t heap_cur
Definition memory.c:10
+
static const size_t KMALLOC_ALIGN
Definition memory.c:8
+
static uintptr_t align_up_uintptr(uintptr_t x, size_t align)
Definition memory.c:13
+
size_t kmalloc_remaining(void)
Definition memory.c:62
+
static uintptr_t heap_end
Definition memory.c:11
+
void * kmalloc(size_t size)
Definition memory.c:41
+
void kmalloc_init(void *start, void *limit)
Definition memory.c:18
+ +
void kernel_panic(const char *message)
Print a panic message and halt the CPU.
Definition panic.c:45
+
Kernel panic and halt routines.
+
void puts(const char *s)
Transmit a null-terminated string.
Definition printf.c:187
+
Minimal kernel printf/puts/getlines interface for freestanding systems.
+
+
+
+ + + + diff --git a/docs/html/memory_8h.html b/docs/html/memory_8h.html new file mode 100644 index 0000000..a5abf53 --- /dev/null +++ b/docs/html/memory_8h.html @@ -0,0 +1,221 @@ + + + + + + + +AstraKernel: include/memory.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
memory.h File Reference
+
+
+
#include <stddef.h>
+#include <stdint.h>
+
+Include dependency graph for memory.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Functions

void kmalloc_init (void *start, void *limit)
void * kmalloc (size_t size)
size_t kmalloc_remaining (void)
+

Function Documentation

+ +

◆ kmalloc()

+ +
+
+ + + + + + + +
void * kmalloc (size_t size)
+
+ +

Definition at line 41 of file memory.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ kmalloc_init()

+ +
+
+ + + + + + + + + + + +
void kmalloc_init (void * start,
void * limit )
+
+ +

Definition at line 18 of file memory.c.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ kmalloc_remaining()

+ +
+
+ + + + + + + +
size_t kmalloc_remaining (void )
+
+ +

Definition at line 62 of file memory.c.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/docs/html/memory_8h.js b/docs/html/memory_8h.js new file mode 100644 index 0000000..c53bce4 --- /dev/null +++ b/docs/html/memory_8h.js @@ -0,0 +1,6 @@ +var memory_8h = +[ + [ "kmalloc", "memory_8h.html#a87d8585002a620e687d68b38ab387a0e", null ], + [ "kmalloc_init", "memory_8h.html#ae8d09a66c8495a0c2ff5c54f1309fd6a", null ], + [ "kmalloc_remaining", "memory_8h.html#a5a329ef700130de7d4a5ade2fa4f3998", null ] +]; \ No newline at end of file diff --git a/docs/html/memory_8h__dep__incl.map b/docs/html/memory_8h__dep__incl.map new file mode 100644 index 0000000..08be5a4 --- /dev/null +++ b/docs/html/memory_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/memory_8h__dep__incl.md5 b/docs/html/memory_8h__dep__incl.md5 new file mode 100644 index 0000000..2728b9b --- /dev/null +++ b/docs/html/memory_8h__dep__incl.md5 @@ -0,0 +1 @@ +b7b53bd1bcab38d97a0916ee488f5a9f \ No newline at end of file diff --git a/docs/html/memory_8h__dep__incl.svg b/docs/html/memory_8h__dep__incl.svg new file mode 100644 index 0000000..7ff76a1 --- /dev/null +++ b/docs/html/memory_8h__dep__incl.svg @@ -0,0 +1,57 @@ + + + + + + +include/memory.h + + +Node1 + + +include/memory.h + + + + + +Node2 + + +src/kernel/kernel.c + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/kernel/memory.c + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/memory_8h__incl.map b/docs/html/memory_8h__incl.map new file mode 100644 index 0000000..16c4499 --- /dev/null +++ b/docs/html/memory_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/memory_8h__incl.md5 b/docs/html/memory_8h__incl.md5 new file mode 100644 index 0000000..75362a3 --- /dev/null +++ b/docs/html/memory_8h__incl.md5 @@ -0,0 +1 @@ +360588e2ebdf74eb56ef4f765647ddf9 \ No newline at end of file diff --git a/docs/html/memory_8h__incl.svg b/docs/html/memory_8h__incl.svg new file mode 100644 index 0000000..f87feff --- /dev/null +++ b/docs/html/memory_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +include/memory.h + + +Node1 + + +include/memory.h + + + + + +Node2 + + +stddef.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.map b/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.map new file mode 100644 index 0000000..6fa133c --- /dev/null +++ b/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.md5 b/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.md5 new file mode 100644 index 0000000..55f5fb1 --- /dev/null +++ b/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.md5 @@ -0,0 +1 @@ +3079076b10a1b47e1f15dda202a65df5 \ No newline at end of file diff --git a/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.svg b/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.svg new file mode 100644 index 0000000..51aedb3 --- /dev/null +++ b/docs/html/memory_8h_a5a329ef700130de7d4a5ade2fa4f3998_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +kmalloc_remaining + + +Node1 + + +kmalloc_remaining + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.map b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.map new file mode 100644 index 0000000..de1cfbb --- /dev/null +++ b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.md5 b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.md5 new file mode 100644 index 0000000..6dbd1c6 --- /dev/null +++ b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.md5 @@ -0,0 +1 @@ +0e8e243444b36717a70fba2d59ac874f \ No newline at end of file diff --git a/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.svg b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.svg new file mode 100644 index 0000000..517df5e --- /dev/null +++ b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_cgraph.svg @@ -0,0 +1,237 @@ + + + + + + +kmalloc + + +Node1 + + +kmalloc + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_halt + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +printf + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +put_integers + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +put_unsigned + + + + + +Node4->Node7 + + + + + + + + +Node9 + + +putc + + + + + +Node4->Node9 + + + + + + + + +Node10 + + +puts + + + + + +Node4->Node10 + + + + + + + + +Node6 + + +put_signed + + + + + +Node5->Node6 + + + + + + + + +Node5->Node7 + + + + + + + + +Node6->Node7 + + + + + + + + +Node6->Node9 + + + + + + + + +Node8 + + +_divmod + + + + + +Node7->Node8 + + + + + + + + +Node7->Node9 + + + + + + + + +Node8->Node2 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.map b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.map new file mode 100644 index 0000000..1fc2271 --- /dev/null +++ b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.md5 b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.md5 new file mode 100644 index 0000000..84ceef6 --- /dev/null +++ b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.md5 @@ -0,0 +1 @@ +b9a6cf7dbd292774fad34e8d58451fcd \ No newline at end of file diff --git a/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.svg b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.svg new file mode 100644 index 0000000..796ebd9 --- /dev/null +++ b/docs/html/memory_8h_a87d8585002a620e687d68b38ab387a0e_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +kmalloc + + +Node1 + + +kmalloc + + + + + +Node2 + + +not_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.map b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.map new file mode 100644 index 0000000..958d517 --- /dev/null +++ b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.md5 b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.md5 new file mode 100644 index 0000000..17337a0 --- /dev/null +++ b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.md5 @@ -0,0 +1 @@ +4cb40fbaaf55dc6a8fef7dcf9d93fbac \ No newline at end of file diff --git a/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.svg b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.svg new file mode 100644 index 0000000..3296422 --- /dev/null +++ b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_cgraph.svg @@ -0,0 +1,264 @@ + + + + + + +kmalloc_init + + +Node1 + + +kmalloc_init + + + + + +Node2 + + +align_up_uintptr + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_panic + + + + + +Node1->Node3 + + + + + + + + +Node11 + + +puts + + + + + +Node1->Node11 + + + + + + + + +Node4 + + +kernel_halt + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +put_integers + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +put_unsigned + + + + + +Node5->Node8 + + + + + + + + +Node10 + + +putc + + + + + +Node5->Node10 + + + + + + + + +Node5->Node11 + + + + + + + + +Node7 + + +put_signed + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node8 + + + + + + + + +Node7->Node10 + + + + + + + + +Node9 + + +_divmod + + + + + +Node8->Node9 + + + + + + + + +Node8->Node10 + + + + + + + + +Node9->Node3 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.map b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.map new file mode 100644 index 0000000..d551316 --- /dev/null +++ b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.md5 b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.md5 new file mode 100644 index 0000000..cf940c4 --- /dev/null +++ b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.md5 @@ -0,0 +1 @@ +aafa3a5144d80acd5e1190578bd0293e \ No newline at end of file diff --git a/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.svg b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.svg new file mode 100644 index 0000000..60cbf57 --- /dev/null +++ b/docs/html/memory_8h_ae8d09a66c8495a0c2ff5c54f1309fd6a_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +kmalloc_init + + +Node1 + + +kmalloc_init + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/memory_8h_source.html b/docs/html/memory_8h_source.html new file mode 100644 index 0000000..83e188a --- /dev/null +++ b/docs/html/memory_8h_source.html @@ -0,0 +1,127 @@ + + + + + + + +AstraKernel: include/memory.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
AstraKernel v0.1.0 +
+
A minimalist experimental ARM kernel
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
memory.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <stddef.h>
+
4#include <stdint.h>
+
5
+
6#ifdef __cplusplus
+
7extern "C"
+
8{
+
9#endif
+
10
+
11 void kmalloc_init(void *start, void *limit);
+
12 void* kmalloc(size_t size);
+
13 size_t kmalloc_remaining(void);
+
14
+
15#ifdef __cplusplus
+
16}
+
17#endif
+
18
+
size_t kmalloc_remaining(void)
Definition memory.c:62
+
void * kmalloc(size_t size)
Definition memory.c:41
+
void kmalloc_init(void *start, void *limit)
Definition memory.c:18
+
+
+
+ + + + diff --git a/docs/html/menu.js b/docs/html/menu.js new file mode 100644 index 0000000..15f9c52 --- /dev/null +++ b/docs/html/menu.js @@ -0,0 +1,131 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
'+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'+ + '
'+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + $('#main-menu').append('
  • '); + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js new file mode 100644 index 0000000..3077543 --- /dev/null +++ b/docs/html/menudata.js @@ -0,0 +1,78 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__5F"}, +{text:"a",url:"globals.html#index_a"}, +{text:"b",url:"globals.html#index_b"}, +{text:"c",url:"globals.html#index_c"}, +{text:"f",url:"globals.html#index_f"}, +{text:"g",url:"globals.html#index_g"}, +{text:"h",url:"globals.html#index_h"}, +{text:"i",url:"globals.html#index_i"}, +{text:"k",url:"globals.html#index_k"}, +{text:"l",url:"globals.html#index_l"}, +{text:"n",url:"globals.html#index_n"}, +{text:"p",url:"globals.html#index_p"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}, +{text:"t",url:"globals.html#index_t"}, +{text:"u",url:"globals.html#index_u"}, +{text:"v",url:"globals.html#index_v"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"_",url:"globals_func.html#index__5F"}, +{text:"a",url:"globals_func.html#index_a"}, +{text:"c",url:"globals_func.html#index_c"}, +{text:"g",url:"globals_func.html#index_g"}, +{text:"i",url:"globals_func.html#index_i"}, +{text:"k",url:"globals_func.html#index_k"}, +{text:"n",url:"globals_func.html#index_n"}, +{text:"p",url:"globals_func.html#index_p"}, +{text:"s",url:"globals_func.html#index_s"}, +{text:"t",url:"globals_func.html#index_t"}, +{text:"v",url:"globals_func.html#index_v"}]}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html"}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"c",url:"globals_defs.html#index_c"}, +{text:"i",url:"globals_defs.html#index_i"}, +{text:"l",url:"globals_defs.html#index_l"}, +{text:"r",url:"globals_defs.html#index_r"}, +{text:"s",url:"globals_defs.html#index_s"}, +{text:"t",url:"globals_defs.html#index_t"}, +{text:"u",url:"globals_defs.html#index_u"}, +{text:"v",url:"globals_defs.html#index_v"}]}]}]}]} diff --git a/docs/html/navtree.css b/docs/html/navtree.css new file mode 100644 index 0000000..0ea3a07 --- /dev/null +++ b/docs/html/navtree.css @@ -0,0 +1,327 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0; + padding:0; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + position: relative; + background-color: var(--nav-menu-active-bg); + border-radius: 0 6px 6px 0; + /*margin-right: 5px;*/ +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); + line-height: 22px; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--page-link-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin: 0 6px 0 -5px; + padding: 0 0 0 5px; + height: 22px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + transition: opacity 0.5s ease; + background-color: var(--nav-splitbar-bg-color); + opacity:0; + cursor:col-resize; + height:100%; + right:0; + top:0; + width:6px; + position: relative; +} + +.ui-resizable-e:after { + content: ''; + display: block; + top: 50%; + left: 1px; + width: 2px; + height: 15px; + border-left: 1px solid var(--nav-splitbar-handle-color); + border-right: 1px solid var(--nav-splitbar-handle-color); + position: absolute; +} + +.ui-resizable-e:hover { + opacity: 1; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ + scrollbar-width: thin; + border-right: 1px solid var(--nav-border-color); + padding-left: 5px; +} + +#nav-sync { + position:absolute; + top:0px; + right:0px; + z-index:1; +} + +#nav-sync img { + opacity:0.3; +} + +div.nav-sync-icon { + position: relative; + width: 24px; + height: 17px; + left: -6px; + top: -1px; + opacity: 0.7; + display: inline-block; + background-color: var(--sync-icon-background-color); + border: 1px solid var(--sync-icon-border-color); + box-sizing: content-box; +} + +div.nav-sync-icon:hover { + background-color: var(--sync-icon-selected-background-color); + opacity: 1.0; +} + +div.nav-sync-icon.active:after { + content: ''; + background-color: var(--sync-icon-background-color); + border-top: 2px solid var(--sync-icon-color); + position: absolute; + width: 16px; + height: 0px; + top: 7px; + left: 4px; +} + +div.nav-sync-icon.active:hover:after { + border-top: 2px solid var(--sync-icon-selected-color); +} + +span.sync-icon-left { + position: absolute; + padding: 0; + margin: 0; + top: 3px; + left: 4px; + display: inline-block; + width: 8px; + height: 8px; + border-left: 2px solid var(--sync-icon-color); + border-top: 2px solid var(--sync-icon-color); + transform: rotate(-45deg); +} + +span.sync-icon-right { + position: absolute; + padding: 0; + margin: 0; + top: 3px; + left: 10px; + display: inline-block; + width: 8px; + height: 8px; + border-right: 2px solid var(--sync-icon-color); + border-bottom: 2px solid var(--sync-icon-color); + transform: rotate(-45deg); +} + +div.nav-sync-icon:hover span.sync-icon-left { + border-left: 2px solid var(--sync-icon-selected-color); + border-top: 2px solid var(--sync-icon-selected-color); +} + +div.nav-sync-icon:hover span.sync-icon-right { + border-right: 2px solid var(--sync-icon-selected-color); + border-bottom: 2px solid var(--sync-icon-selected-color); +} + +#nav-path ul { + border-top: 1px solid var(--nav-breadcrumb-separator-color); +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + +/*---------------------------*/ +#container { + display: grid; + grid-template-columns: auto auto; + overflow: hidden; +} + +#page-nav { + background: var(--nav-background-color); + display: block; + width: 250px; + box-sizing: content-box; + position: relative; + border-left: 1px solid var(--nav-border-color); +} + +#page-nav-tree { + display: inline-block; +} + +#page-nav-resize-handle { + transition: opacity 0.5s ease; + background-color: var(--nav-splitbar-bg-color); + opacity:0; + cursor:col-resize; + height:100%; + right:0; + top:0; + width:6px; + position: relative; + z-index: 1; + user-select: none; +} + +#page-nav-resize-handle:after { + content: ''; + display: block; + top: 50%; + left: 1px; + width: 2px; + height: 15px; + border-left: 1px solid var(--nav-splitbar-handle-color); + border-right: 1px solid var(--nav-splitbar-handle-color); + position: absolute; +} + +#page-nav-resize-handle.dragging, +#page-nav-resize-handle:hover { + opacity: 1; +} + +#page-nav-contents { + padding: 0; + margin: 0; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + overflow: auto; + scrollbar-width: thin; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +ul.page-outline, +ul.page-outline ul { + text-indent: 0; + list-style: none outside none; + padding: 0 0 0 4px; +} + +ul.page-outline { + margin: 0 4px 4px 6px; +} + +ul.page-outline div.item { + font: 12px var(--font-family-nav); + line-height: 22px; +} + +ul.page-outline li { + white-space: nowrap; +} + +ul.page-outline li.vis { + background-color: var(--nav-breadcrumb-active-bg); +} + +#container.resizing { + cursor: col-resize; + user-select: none; +} diff --git a/docs/html/navtree.js b/docs/html/navtree.js new file mode 100644 index 0000000..4fcf6e3 --- /dev/null +++ b/docs/html/navtree.js @@ -0,0 +1,899 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath,allMembersFile) { + let navTreeSubIndices = []; + const ARROW_DOWN = ''; + const ARROW_RIGHT = ''; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + const fullSidebar = typeof page_layout!=='undefined' && page_layout==1; + + function getScrollBarWidth () { + let outer = $('
    ').css({visibility: 'hidden', width: 100, overflow: 'scroll', scrollbarWidth: 'thin'}).appendTo('body'); + let widthWithScroll = $('
    ').css({width: '100%'}).appendTo(outer).outerWidth(); + outer.remove(); + return 100 - widthWithScroll; + } + const scrollbarWidth = getScrollBarWidth(); + + function adjustSyncIconPosition() { + if (!fullSidebar) { + const nt = document.getElementById("nav-tree"); + const hasVerticalScrollbar = nt.scrollHeight > nt.clientHeight; + $("#nav-sync").css({right:parseInt(hasVerticalScrollbar?scrollbarWidth:0)}); + } + } + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + const e = n.replace(/-/g,'_'); + return window[e]; + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = function() { func(); adjustSyncIconPosition(); } + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast",adjustSyncIconPosition); + $(node.plus_img.childNodes[0]).removeClass('opened').addClass('closed'); + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + function htmlToNode(html) { + const template = document.createElement('template'); + template.innerHTML = html; + const nNodes = template.content.childNodes.length; + if (nNodes !== 1) { + throw new Error(`html parameter must represent a single node; got ${nNodes}. `); + } + return template.content.firstChild; + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(htmlToNode(''+text+'')); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast",adjustSyncIconPosition); + $(node.plus_img.childNodes[0]).addClass('opened').removeClass('closed'); + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + $(node.plus_img.childNodes[0]).removeClass('closed').addClass('opened'); + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+10) { // try root page without hash as fallback + gotoUrl(o,root,'',relpath); + } else { + o.breadcrumbs = $.extend(true, [], nti); + if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index + navTo(o,NAVTREE[0][1],"",relpath); + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + } + if (o.breadcrumbs) { + o.breadcrumbs.unshift(0); // add 0 for root node + showNode(o, o.node, 0, hash); + } + } + } + + const gotoUrl = function(o,root,hash,relpath) { + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = window['NAVTREEINDEX'+i]; + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const navTo = function(o,root,hash,relpath) { + const link = cachedLink(); + if (link) { + const parts = link.split('#'); + root = parts[0]; + hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + gotoUrl(o,root,hash,relpath); + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ try to keep right panel width + const shrinkLeft = Math.min(deficit, leftPanelWidth-minPanelWidth); + leftPanelWidth -= shrinkLeft; + const remainingDeficit = deficit - shrinkLeft; + const shrinkRight = Math.min(remainingDeficit, rightPanelWidth-minPanelWidth); + rightPanelWidth -= shrinkRight; + } else { // dragging right handle -> try to keep left panel width + const shrinkRight = Math.min(deficit, rightPanelWidth-minPanelWidth); + rightPanelWidth -= shrinkRight; + const remainingDeficit = deficit - shrinkRight; + const shrinkLeft = Math.min(remainingDeficit, leftPanelWidth-minPanelWidth); + leftPanelWidth -= shrinkLeft; + } + } else { + rightPanelWidth = pagenav.length ? Math.max(minPanelWidth,rightPanelWidth) : 0; + leftPanelWidth = Math.max(minPanelWidth,leftPanelWidth); + } + return { leftPanelWidth, rightPanelWidth } + } + + function updateWidths(sidenavWidth,pagenavWidth,dragLeft) + { + const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,dragLeft); + const widthStr = parseInt(widths.leftPanelWidth)+"px"; + content.css({marginLeft:widthStr}); + if (fullSidebar) { + footer.css({marginLeft:widthStr}); + if (mainnav) { + mainnav.css({marginLeft:widthStr}); + } + } + sidenav.css({width:widthStr}); + if (pagenav.length) { + container.css({gridTemplateColumns:'auto '+parseInt(widths.rightPanelWidth)+'px'}); + pagenav.css({width:parseInt(widths.rightPanelWidth-1)+'px'}); + } + return widths; + } + + function resizeWidth(dragLeft) { + const sidenavWidth = $(sidenav).outerWidth()-barWidth; + const pagenavWidth = pagenav.length ? $(pagenav).outerWidth() : 0; + const widths = updateWidths(sidenavWidth,pagenavWidth,dragLeft); + Cookie.writeSetting(RESIZE_COOKIE_NAME,widths.leftPanelWidth-barWidth); + if (pagenav.length) { + Cookie.writeSetting(PAGENAV_COOKIE_NAME,widths.rightPanelWidth); + } + } + + function restoreWidth(sidenavWidth,pagenavWidth) { + updateWidths(sidenavWidth,pagenavWidth,false); + showHideNavBar(); + } + + function resizeHeight() { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (!fullSidebar) { + contentHeight = windowHeight - headerHeight - footerHeight - 1; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (fullSidebar) { + contentHeight = windowHeight - footerHeight - 1; + navtreeHeight = windowHeight - headerHeight - 1; + sideNavHeight = windowHeight - 1; + if (mainnav) { + contentHeight -= mainnav.outerHeight(); + } + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + content.css({height:contentHeight + "px"}); + resizeWidth(false); + showHideNavBar(); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (document.getElementById('main-nav')) { + mainnav = $("#main-nav"); + } + navtree = $("#nav-tree"); + pagenav = $("#page-nav"); + container = $("#container"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(true); } }); + $(sidenav).resizable({ minWidth: 0 }); + if (pagenav.length) { + pagehandle = $("#page-nav-resize-handle"); + pagehandle.on('mousedown touchstart',function(e) { + $('body').addClass('resizing'); + pagehandle.addClass('dragging'); + $(document).on('mousemove touchmove',function(e) { + const clientX = e.clientX || e.originalEvent.touches[0].clientX; + let pagenavWidth = container[0].offsetWidth-clientX+barWidth/2; + const sidenavWidth = sidenav.width(); + const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,false); + container.css({gridTemplateColumns:'auto '+parseInt(widths.rightPanelWidth)+'px'}); + pagenav.css({width:parseInt(widths.rightPanelWidth-1)+'px'}); + content.css({marginLeft:parseInt(widths.leftPanelWidth)+'px'}); + Cookie.writeSetting(PAGENAV_COOKIE_NAME,pagenavWidth); + }); + $(document).on('mouseup touchend', function(e) { + $('body').removeClass('resizing'); + pagehandle.removeClass('dragging'); + $(document).off('mousemove mouseup touchmove touchend'); + }); + }); + } else { + container.css({gridTemplateColumns:'auto'}); + } + const width = parseInt(Cookie.readSetting(RESIZE_COOKIE_NAME,250)); + const pagenavWidth = parseInt(Cookie.readSetting(PAGENAV_COOKIE_NAME,250)); + if (width) { restoreWidth(width+barWidth,pagenavWidth); } else { resizeWidth(); } + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(window).ready(function() { + let lastWidth = -1; + let lastHeight = -1; + $(window).resize(function() { + const newWidth = $(this).width(), newHeight = $(this).height(); + if (newWidth!=lastWidth || newHeight!=lastHeight) { + resizeHeight(); + navtree_trampoline.updateContentTop(); + lastWidth = newWidth; + lastHeight = newHeight; + } + }); + resizeHeight(); + lastWidth = $(window).width(); + lastHeight = $(window).height(); + content.scroll(function() { + navtree_trampoline.updateContentTop(); + }); + }); + } + + + function initPageToc() { + const topMapping = []; + const toc_contents = $('#page-nav-contents'); + const content=$('
      ').addClass('page-outline'); + + var entityMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '/': '/', + '`': '`', + '=': '=' + }; + function escapeHtml (string) { + return String(string).replace(/[&<>"'`=\/]/g, function (s) { + return entityMap[s]; + }); + } + + // for ClassDef/GroupDef/ModuleDef/ConceptDef/DirDef + const groupSections = []; + let currentGroup = null; + $('h2.groupheader, h2.memtitle').each(function(){ + const $element = $(this); + if ($element.hasClass('groupheader')) { + currentGroup = { groupHeader: $element, memTitles: [] }; + groupSections.push(currentGroup); + } else if ($element.hasClass('memtitle') && currentGroup) { + currentGroup.memTitles.push($element); + } + }); + groupSections.forEach(function(item){ + const title = item.groupHeader.text().trim(); + let id = item.groupHeader.attr('id'); + const table = item.groupHeader.parents('table.memberdecls'); + let rows = $(); + if (table.length>0) { + rows = table.find("tr[class^='memitem:'] td.memItemRight, tr[class^='memitem:'] td.memItemLeft.anon, tr[class=groupHeader] td"); + } + function hasSubItems() { + return item.memTitles.length>0 || rows.toArray().some(function(el) { return $(el).is(':visible'); }); + } + const li = $('
    • ').attr('id','nav-'+id); + const div = $('
      ').addClass('item'); + const span = $('').addClass('arrow').css({ paddingLeft:'0' }); + if (hasSubItems()) { + span.append($('').addClass('arrowhead opened')); + } + const ahref = $('').attr('href','#'+id).append(title); + content.append(li.append(div.append(span).append(ahref))); + topMapping.push(id); + const ulStack = []; + ulStack.push(content); + if (hasSubItems()) { + let last_id = undefined; + let inMemberGroup = false; + // declaration sections have rows for items + rows.each(function(){ + let td = $(this); + let tr = $(td).parent(); + const is_anon_enum = td.contents().first().text().trim()=='{'; + if (tr.hasClass('template')) { + tr = tr.prev(); + } + id = $(tr).attr('id'); + const text = is_anon_enum ? 'anonymous enum' : $(this).find('a:first,b,div.groupHeader').text(); + let isMemberGroupHeader = $(tr).hasClass('groupHeader'); + if ($(tr).is(":visible") && last_id!=id && id!==undefined) { + if (isMemberGroupHeader && inMemberGroup) { + ulStack.pop(); + inMemberGroup=false; + } + const li2 = $('
    • ').attr('id','nav-'+id); + const div2 = $('
      ').addClass('item'); + const span2 = $('').addClass('arrow').css({ paddingLeft:parseInt(ulStack.length*16)+'px' }); + const ahref = $('').attr('href','#'+id).append(escapeHtml(text)); + li2.append(div2.append(span2).append(ahref)); + topMapping.push(id); + if (isMemberGroupHeader) { + span2.append($('').addClass('arrowhead opened')); + ulStack[ulStack.length-1].append(li2); + const ul2 = $('
        '); + ulStack.push(ul2); + li2.append(div2).append(ul2); + inMemberGroup=true; + } else { + ulStack[ulStack.length-1].append(li2); + } + last_id=id; + } + }); + // detailed documentation has h2.memtitle sections for items + item.memTitles.forEach(function(data) { + const text = $(data).contents().not($(data).children().first()).text(); + const name = text.replace(/\(\)(\s*\[\d+\/\d+\])?$/, '') // func() [2/8] -> func + id = $(data).find('span.permalink a').attr('href') + if (id!==undefined && name!==undefined) { + const li2 = $('
      • ').attr('id','nav-'+id.substring(1)); + const div2 = $('
      • '); + const div = $('
        ').addClass('item'); + const span = $('').addClass('arrow').css({ paddingLeft:'0' }); + const ahref = $('').attr('href',srcBaseUrl+dstBaseUrl+pageName).addClass('noscroll'); + content.append(li.append(div.append(span).append(ahref.append(LISTOFALLMEMBERS)))); + } + + if (groupSections.length==0) { + // for PageDef + const sectionTree = [], sectionStack = []; + $('h1.doxsection, h2.doxsection, h3.doxsection, h4.doxsection, h5.doxsection, h6.doxsection').each(function(){ + const level = parseInt(this.tagName[1]); + const anchor = $(this).find('a.anchor').attr('id'); + const node = { text: $(this).html(), id: anchor, children: [] }; + while (sectionStack.length && sectionStack[sectionStack.length - 1].level >= level) sectionStack.pop(); + (sectionStack.length ? sectionStack[sectionStack.length - 1].children : sectionTree).push(node); + sectionStack.push({ ...node, level }); + }); + if (sectionTree.length>0) { + function render(nodes, level=0) { + nodes.map(n => { + const li = $('
      • ').attr('id','nav-'+n.id); + const div = $('
        ').addClass('item'); + const span = $('').addClass('arrow').attr('style','padding-left:'+parseInt(level*16)+'px;'); + if (n.children.length > 0) { span.append($('').addClass('arrowhead opened')); } + const url = $('').attr('href','#'+n.id); + content.append(li.append(div.append(span).append(url.append(n.text)))); + topMapping.push(n.id); + render(n.children,level+1); + }); + } + render(sectionTree); + } + } + + toc_contents.append(content); + + $(".page-outline a[href]:not(.noscroll)").click(function(e) { + e.preventDefault(); + const aname = $(this).attr("href"); + gotoAnchor($(aname),aname); + }); + + let lastScrollSourceOffset = -1; + let lastScrollTargetOffset = -1; + let lastScrollTargetId = ''; + + navtree_trampoline.updateContentTop = function() { + const pagenavcontents = $("#page-nav-contents"); + if (pagenavcontents.length) { + const content = $("#doc-content"); + const height = content.height(); + const navy = pagenavcontents.offset().top; + const yc = content.offset().top; + let offsets = [] + for (let i=0;imargin || ye>margin) && (yslastScrollTargetOffset) || + (!scrollDown && targetOffset { + navtree_trampoline.updateContentTop(); + },200); + } + $(document).ready(function() { initPageToc(); initResizable(); }); + +} +/* @license-end */ diff --git a/docs/html/navtreedata.js b/docs/html/navtreedata.js new file mode 100644 index 0000000..da24770 --- /dev/null +++ b/docs/html/navtreedata.js @@ -0,0 +1,63 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var NAVTREE = +[ + [ "AstraKernel", "index.html", [ + [ "AstraKernel ~ A minimal ARM kernel for QEMU", "index.html", "index" ], + [ "Kernel Panic Subsystem", "md_docs_2pages_2panic.html", [ + [ "Design", "md_docs_2pages_2panic.html#autotoc_md1", null ], + [ "Future Plans", "md_docs_2pages_2panic.html#autotoc_md2", null ] + ] ], + [ "Todo List", "todo.html", null ], + [ "Classes", "annotated.html", [ + [ "Class List", "annotated.html", "annotated_dup" ], + [ "Class Index", "classes.html", null ], + [ "Class Members", "functions.html", [ + [ "All", "functions.html", null ], + [ "Variables", "functions_vars.html", null ] + ] ] + ] ], + [ "Files", "files.html", [ + [ "File List", "files.html", "files_dup" ], + [ "File Members", "globals.html", [ + [ "All", "globals.html", null ], + [ "Functions", "globals_func.html", null ], + [ "Variables", "globals_vars.html", null ], + [ "Enumerations", "globals_enum.html", null ], + [ "Enumerator", "globals_eval.html", null ], + [ "Macros", "globals_defs.html", null ] + ] ] + ] ] + ] ] +]; + +var NAVTREEINDEX = +[ +"annotated.html" +]; + +var SYNCONMSG = 'click to disable panel synchronization'; +var SYNCOFFMSG = 'click to enable panel synchronization'; +var LISTOFALLMEMBERS = 'List of all members'; \ No newline at end of file diff --git a/docs/html/navtreeindex0.js b/docs/html/navtreeindex0.js new file mode 100644 index 0000000..d8e91fb --- /dev/null +++ b/docs/html/navtreeindex0.js @@ -0,0 +1,176 @@ +var NAVTREEINDEX0 = +{ +"annotated.html":[3,0], +"classes.html":[3,1], +"clear_8c.html":[4,0,2,1,0], +"clear_8c.html#ae683fe63c33c388e9ba1c6392dd477eb":[4,0,2,1,0,0], +"clear_8c_source.html":[4,0,2,1,0], +"clear_8h.html":[4,0,1,1], +"clear_8h.html#ae683fe63c33c388e9ba1c6392dd477eb":[4,0,1,1,0], +"clear_8h_source.html":[4,0,1,1], +"datetime_8c.html":[4,0,2,1,1], +"datetime_8c.html#a2dff2dfb11335c4e93f29925ee2a2792":[4,0,2,1,1,1], +"datetime_8c.html#a599d171dc6323cb2705efd42dc2e0add":[4,0,2,1,1,4], +"datetime_8c.html#ab8e2596e9eb4c7f02aa52caa4c07ff90":[4,0,2,1,1,2], +"datetime_8c.html#abc6b438d643dc4b10ef34d427e92d213":[4,0,2,1,1,3], +"datetime_8c.html#adbaf12c2d2bb87fcac509cbf26d9138a":[4,0,2,1,1,0], +"datetime_8c.html#add26ce10819b28be2718dcdab0117eb2":[4,0,2,1,1,5], +"datetime_8c.html#ae5ad61ac69c1f40d86ae1feba81b1836":[4,0,2,1,1,6], +"datetime_8c_source.html":[4,0,2,1,1], +"datetime_8h.html":[4,0,1,2], +"datetime_8h.html#a722cd4f876f5d4dbe92c0eba1484bd3b":[4,0,1,2,2], +"datetime_8h.html#ae5ad61ac69c1f40d86ae1feba81b1836":[4,0,1,2,3], +"datetime_8h_source.html":[4,0,1,2], +"dir_49e56c817e5e54854c35e136979f97ca.html":[4,0,0], +"dir_68267d1309a1af8e8297ef4c3efbcdba.html":[4,0,2], +"dir_8b0164eb0fb74115683f9812cb2f78f0.html":[4,0,2,1], +"dir_a61f22007e0f347cded0d82030ee545d.html":[4,0,1,0], +"dir_cbd7f246bdf7dc0a50281a272327e6ed.html":[4,0,2,0], +"dir_d44c64559bbebec7f509842c48db8b23.html":[4,0,1], +"dir_ef3b2545113449f8f25e623a543d64e3.html":[4,0,0,0], +"files.html":[4,0], +"functions.html":[3,2,0], +"functions_vars.html":[3,2,1], +"globals.html":[4,1,0], +"globals_defs.html":[4,1,5], +"globals_enum.html":[4,1,3], +"globals_eval.html":[4,1,4], +"globals_func.html":[4,1,1], +"globals_vars.html":[4,1,2], +"index.html":[], +"index.html":[0], +"index.html#autotoc_md10":[0,4], +"index.html#autotoc_md11":[0,5], +"index.html#autotoc_md4":[0,0], +"index.html#autotoc_md5":[0,1], +"index.html#autotoc_md6":[0,2], +"index.html#autotoc_md7":[0,2,0], +"index.html#autotoc_md8":[0,2,1], +"index.html#autotoc_md9":[0,3], +"interrupt_8c.html":[4,0,2,0,0], +"interrupt_8c.html#a0a004f8aa16635895a42e0667f26c420":[4,0,2,0,0,2], +"interrupt_8c.html#a2a778647bb8df60e6c3238b29eb2fca2":[4,0,2,0,0,0], +"interrupt_8c.html#ab4e0cc193587bb7ac297bbc859ff4603":[4,0,2,0,0,1], +"interrupt_8c.html#aef55475e4484403d59e8e19b4ec43ad4":[4,0,2,0,0,4], +"interrupt_8c.html#afbe4835df451e474a54178267b1d6060":[4,0,2,0,0,3], +"interrupt_8c_source.html":[4,0,2,0,0], +"interrupt_8h.html":[4,0,1,3], +"interrupt_8h.html#a09661a92c1ee93307f89d0bf5d056cf1":[4,0,1,3,6], +"interrupt_8h.html#a0a004f8aa16635895a42e0667f26c420":[4,0,1,3,22], +"interrupt_8h.html#a0ae1e8b399502d25a8a5bf23479a8453":[4,0,1,3,8], +"interrupt_8h.html#a0b1ee4a77609e8163ad74cbe81c98213":[4,0,1,3,13], +"interrupt_8h.html#a18b76150ed04c0d5d19456bf30970fdd":[4,0,1,3,25], +"interrupt_8h.html#a195648e4e688b672df29f6fa94aabf35":[4,0,1,3,14], +"interrupt_8h.html#a20d127cee2705b7e0b86585d131c2380":[4,0,1,3,11], +"interrupt_8h.html#a24e819c57eeb7a925f1c6526e19fc0a6":[4,0,1,3,4], +"interrupt_8h.html#a2a778647bb8df60e6c3238b29eb2fca2":[4,0,1,3,20], +"interrupt_8h.html#a2cadbad73a0a0951e5da8b3abef68939":[4,0,1,3,9], +"interrupt_8h.html#a55d19d2e3a269142eb991a3c93b9d650":[4,0,1,3,10], +"interrupt_8h.html#a595c2bd198349dbf4a8f4fe07771b474":[4,0,1,3,15], +"interrupt_8h.html#a6b1cda18aba744c0a2580c0833a96d9d":[4,0,1,3,24], +"interrupt_8h.html#a75ec9a495c5185a396cd68dca2460edf":[4,0,1,3,17], +"interrupt_8h.html#a810f60f080c753e160afd81d479d8944":[4,0,1,3,16], +"interrupt_8h.html#a8c90f5c03791fbd20caf094c1c238d3e":[4,0,1,3,7], +"interrupt_8h.html#aa5a73a9343ad968ee5a1640dc01b66de":[4,0,1,3,18], +"interrupt_8h.html#aaccf6b96ba3b742c6bda83b3eb59e419":[4,0,1,3,2], +"interrupt_8h.html#ab4e0cc193587bb7ac297bbc859ff4603":[4,0,1,3,21], +"interrupt_8h.html#acc5acea895618d5b1d4a94daaf34c372":[4,0,1,3,5], +"interrupt_8h.html#ad3725493cd92ce709967d46dff203c53":[4,0,1,3,1], +"interrupt_8h.html#ae2e3c97a8b35d12b57b0ee7f07dbac79":[4,0,1,3,3], +"interrupt_8h.html#ae718b3209b4779204ab625ec050d88dc":[4,0,1,3,19], +"interrupt_8h.html#ae9cc6c8999966c69d2a21bc3884397a3":[4,0,1,3,12], +"interrupt_8h.html#afa6c290ed4f4bc4926f70c2f8e4a03b4":[4,0,1,3,0], +"interrupt_8h.html#afbe4835df451e474a54178267b1d6060":[4,0,1,3,23], +"interrupt_8h_source.html":[4,0,1,3], +"kernel_8c.html":[4,0,2,0,1], +"kernel_8c.html#a0c86500a0535afeb0b92fb3955181545":[4,0,2,0,1,8], +"kernel_8c.html#a0f1ac68e65e509326c6790f5c76da0b9":[4,0,2,0,1,10], +"kernel_8c.html#a5f674bc040d9a9407ca7193054c8e974":[4,0,2,0,1,7], +"kernel_8c.html#a5f7f5591859a697cdeb5faafdf0ce822":[4,0,2,0,1,3], +"kernel_8c.html#a6b8fb674fb359f6ae53dc9c4fb7fc6be":[4,0,2,0,1,5], +"kernel_8c.html#a7e3f35a711eee12e3d4bbc0a276fcf0c":[4,0,2,0,1,4], +"kernel_8c.html#a8a11654fcf5bd5fcf10f118ad5f79904":[4,0,2,0,1,6], +"kernel_8c.html#abee0a0a40ba8a0eb2af7112f7b2b0c95":[4,0,2,0,1,2], +"kernel_8c.html#abf99406c50fd43ebcb9e3e6f6f843e2a":[4,0,2,0,1,0], +"kernel_8c.html#acb05d8656987be634f8bd20154d84eb8":[4,0,2,0,1,1], +"kernel_8c.html#adcb1118ba48adbd37101ffae162e00bd":[4,0,2,0,1,9], +"kernel_8c.html#aef55475e4484403d59e8e19b4ec43ad4":[4,0,2,0,1,11], +"kernel_8c_source.html":[4,0,2,0,1], +"math_8h.html":[4,0,1,0,0], +"math_8h.html#a97fbf4adb8a31d415775bdbd5c30c468":[4,0,1,0,0,0], +"math_8h_source.html":[4,0,1,0,0], +"md_docs_2pages_2panic.html":[1], +"md_docs_2pages_2panic.html#autotoc_md1":[1,0], +"md_docs_2pages_2panic.html#autotoc_md2":[1,1], +"memory_8c.html":[4,0,2,0,2], +"memory_8c.html#a30f61122e981effc69731cd6b4e750b9":[4,0,2,0,2,4], +"memory_8c.html#a33dfa93395fb15626ad7538600aefe5a":[4,0,2,0,2,6], +"memory_8c.html#a4742e575dd722d9e1d926ab578f02c9f":[4,0,2,0,2,0], +"memory_8c.html#a5a329ef700130de7d4a5ade2fa4f3998":[4,0,2,0,2,3], +"memory_8c.html#a874db3bfd8c5593f9080ee32fee5b1ab":[4,0,2,0,2,5], +"memory_8c.html#a87d8585002a620e687d68b38ab387a0e":[4,0,2,0,2,1], +"memory_8c.html#ae8d09a66c8495a0c2ff5c54f1309fd6a":[4,0,2,0,2,2], +"memory_8c_source.html":[4,0,2,0,2], +"memory_8h.html":[4,0,1,4], +"memory_8h.html#a5a329ef700130de7d4a5ade2fa4f3998":[4,0,1,4,2], +"memory_8h.html#a87d8585002a620e687d68b38ab387a0e":[4,0,1,4,0], +"memory_8h.html#ae8d09a66c8495a0c2ff5c54f1309fd6a":[4,0,1,4,1], +"memory_8h_source.html":[4,0,1,4], +"pages.html":[], +"panic_8c.html":[4,0,2,0,3], +"panic_8c.html#a830ea0b31f5cecec34c74c8a4c2f8192":[4,0,2,0,3,0], +"panic_8c.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca":[4,0,2,0,3,1], +"panic_8c_source.html":[4,0,2,0,3], +"panic_8h.html":[4,0,1,5], +"panic_8h.html#a830ea0b31f5cecec34c74c8a4c2f8192":[4,0,1,5,0], +"panic_8h.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca":[4,0,1,5,1], +"panic_8h_source.html":[4,0,1,5], +"printf_8c.html":[4,0,2,1,2], +"printf_8c.html#a0aff7311d684a0e0ef33125616a73385":[4,0,2,1,2,7], +"printf_8c.html#a0e65feb118c1ee30820c142aeb5a5145":[4,0,2,1,2,5], +"printf_8c.html#a299d0f9cb9e7b14e1278a4ed21e4d76f":[4,0,2,1,2,12], +"printf_8c.html#a2e8c688dfa078a9a7f1f02d4126f466a":[4,0,2,1,2,9], +"printf_8c.html#a4bd8785a1ac7d8be53153ec3e2f5afa4":[4,0,2,1,2,1], +"printf_8c.html#a6882f9f402227d0d57eb685890f6ac58":[4,0,2,1,2,14], +"printf_8c.html#a694b6d27273027eb96424e52b798c391":[4,0,2,1,2,3], +"printf_8c.html#a7880ed31ba841d890680635d6b83fcb7":[4,0,2,1,2,6], +"printf_8c.html#a7a07348b4332ff6b88abf6092347deba":[4,0,2,1,2,0], +"printf_8c.html#a8838537812346e09a66edf94c0c9ffe9":[4,0,2,1,2,2], +"printf_8c.html#a96a30e819fcbfa9a0251f71f14ff79bc":[4,0,2,1,2,4], +"printf_8c.html#a9bdf0418571456c566aa2f329b5f8350":[4,0,2,1,2,11], +"printf_8c.html#ab97c3c9e783c1402d4007ceafdb197c1":[4,0,2,1,2,10], +"printf_8c.html#ac3154a3597888cf112e4e7bf6a5f1846":[4,0,2,1,2,8], +"printf_8c.html#ae3aa13fe253ec6af67a7bbb2509081d9":[4,0,2,1,2,13], +"printf_8c_source.html":[4,0,2,1,2], +"printf_8h.html":[4,0,1,6], +"printf_8h.html#a0aff7311d684a0e0ef33125616a73385":[4,0,1,6,3], +"printf_8h.html#a299d0f9cb9e7b14e1278a4ed21e4d76f":[4,0,1,6,4], +"printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4":[4,0,1,6,1], +"printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a254aa61e900a06ab00f4a0c5a7d7e246":[4,0,1,6,1,2], +"printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a3bc5680c539dfa2bdfab45834b0f8b26":[4,0,1,6,1,1], +"printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4af800661ffd277611eab389279f927862":[4,0,1,6,1,0], +"printf_8h.html#a7880ed31ba841d890680635d6b83fcb7":[4,0,1,6,2], +"printf_8h_source.html":[4,0,1,6], +"start_8s.html":[4,0,2,0,4], +"start_8s_source.html":[4,0,2,0,4], +"string_8c.html":[4,0,2,1,3], +"string_8c.html#a008e171a518fe0e0352f31b245e03875":[4,0,2,1,3,1], +"string_8c.html#a49735c99bf645cfa53f5c5c98a7ceea7":[4,0,2,1,3,0], +"string_8c_source.html":[4,0,2,1,3], +"string_8h.html":[4,0,1,7], +"string_8h.html#a008e171a518fe0e0352f31b245e03875":[4,0,1,7,1], +"string_8h.html#a49735c99bf645cfa53f5c5c98a7ceea7":[4,0,1,7,0], +"string_8h_source.html":[4,0,1,7], +"struct_format___state.html":[3,0,1], +"struct_format___state.html#a0b085f36471887da4f0b5e93001b4fdb":[3,0,1,1], +"struct_format___state.html#a8e9f520821a5c2d969f3bc9195145dac":[3,0,1,0], +"structdateval.html":[3,0,0], +"structdateval.html#a24c5854c50c27c8743e8dce356602c11":[3,0,0,1], +"structdateval.html#ab84a06feb804ed04520b2355b364daea":[3,0,0,2], +"structdateval.html#ac90484ba884dbc4d453976120a111c76":[3,0,0,0], +"structtimeval.html":[3,0,2], +"structtimeval.html#a6298d86d865364801b3c1a976661bab8":[3,0,2,2], +"structtimeval.html#a6e62d267f33ee409bbab00d2f86b43fc":[3,0,2,0], +"structtimeval.html#ab572bcefc22589608f6f9b17db4c67d0":[3,0,2,1], +"todo.html":[2] +}; diff --git a/docs/html/pages.html b/docs/html/pages.html new file mode 100644 index 0000000..f03f80c --- /dev/null +++ b/docs/html/pages.html @@ -0,0 +1,111 @@ + + + + + + + +AstraKernel: Related Pages + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        Related Pages
        +
        +
        +
        Here is a list of all related documentation pages:
        +
        +
        +
        + +
        + + diff --git a/docs/html/panic_8c.html b/docs/html/panic_8c.html new file mode 100644 index 0000000..e8fb7f5 --- /dev/null +++ b/docs/html/panic_8c.html @@ -0,0 +1,200 @@ + + + + + + + +AstraKernel: src/kernel/panic.c File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        panic.c File Reference
        +
        +
        +
        #include "panic.h"
        +#include "printf.h"
        +
        +Include dependency graph for panic.c:
        +
        +
        +
        +
        +

        Go to the source code of this file.

        + + + + + + +

        +Functions

        void kernel_halt (void)
         Halt the CPU indefinitely.
        void kernel_panic (const char *message)
         Print a panic message and halt the CPU.
        +

        Function Documentation

        + +

        ◆ kernel_halt()

        + +
        +
        + + + + + + + +
        void kernel_halt (void )
        +
        + +

        Halt the CPU indefinitely.

        +

        Implementation details:

          +
        • Disables both IRQ (cpsid i) and FIQ (cpsid f) interrupts.
        • +
        • Uses wfi (Wait For Interrupt) to place the CPU in a low-power idle loop.
        • +
        • The memory clobber ensures no memory operations are reordered around this sequence.
        • +
        +
        See also
        kernel_panic()
        + +

        Definition at line 17 of file panic.c.

        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ kernel_panic()

        + +
        +
        + + + + + + + +
        void kernel_panic (const char * message)
        +
        + +

        Print a panic message and halt the CPU.

        +

        Implementation details:

        + +

        Definition at line 45 of file panic.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/panic_8c.js b/docs/html/panic_8c.js new file mode 100644 index 0000000..e565880 --- /dev/null +++ b/docs/html/panic_8c.js @@ -0,0 +1,5 @@ +var panic_8c = +[ + [ "kernel_halt", "panic_8c.html#a830ea0b31f5cecec34c74c8a4c2f8192", null ], + [ "kernel_panic", "panic_8c.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca", null ] +]; \ No newline at end of file diff --git a/docs/html/panic_8c__incl.map b/docs/html/panic_8c__incl.map new file mode 100644 index 0000000..679169e --- /dev/null +++ b/docs/html/panic_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8c__incl.md5 b/docs/html/panic_8c__incl.md5 new file mode 100644 index 0000000..81de7ae --- /dev/null +++ b/docs/html/panic_8c__incl.md5 @@ -0,0 +1 @@ +fbbde9263db02e6582b2a1b65475e8d8 \ No newline at end of file diff --git a/docs/html/panic_8c__incl.svg b/docs/html/panic_8c__incl.svg new file mode 100644 index 0000000..5071383 --- /dev/null +++ b/docs/html/panic_8c__incl.svg @@ -0,0 +1,129 @@ + + + + + + +src/kernel/panic.c + + +Node1 + + +src/kernel/panic.c + + + + + +Node2 + + +panic.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +stdarg.h + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +stddef.h + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +stdbool.h + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +stdint.h + + + + + +Node3->Node7 + + + + + + + + diff --git a/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.map b/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.map new file mode 100644 index 0000000..fc3202b --- /dev/null +++ b/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.map @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.md5 b/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.md5 new file mode 100644 index 0000000..3bf9c0d --- /dev/null +++ b/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.md5 @@ -0,0 +1 @@ +ead4779d5cbfc0f8038faec74da97ea5 \ No newline at end of file diff --git a/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.svg b/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.svg new file mode 100644 index 0000000..aa1f9b8 --- /dev/null +++ b/docs/html/panic_8c_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.svg @@ -0,0 +1,390 @@ + + + + + + +kernel_halt + + +Node1 + + +kernel_halt + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_bdiv + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +_divmod + + + + + +Node2->Node4 + + + + + + + + +Node14 + + +_udiv32 + + + + + +Node2->Node14 + + + + + + + + +Node16 + + +kmalloc + + + + + +Node2->Node16 + + + + + + + + +Node17 + + +kmalloc_init + + + + + +Node2->Node17 + + + + + + + + +Node5 + + +put_unsigned + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +printf + + + + + +Node5->Node6 + + + + + + + + +Node12 + + +put_integers + + + + + +Node5->Node12 + + + + + + + + +Node13 + + +put_signed + + + + + +Node5->Node13 + + + + + + + + +Node6->Node2 + + + + + + + + +Node7 + + +clear + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +kernel_main + + + + + +Node6->Node8 + + + + + + + + +Node9 + + +getlines + + + + + +Node6->Node9 + + + + + + + + +Node10 + + +init_message + + + + + +Node6->Node10 + + + + + + + + +Node11 + + +not_main + + + + + +Node6->Node11 + + + + + + + + +Node7->Node8 + + + + + + + + +Node9->Node8 + + + + + + + + +Node10->Node8 + + + + + + + + +Node12->Node6 + + + + + + + + +Node13->Node12 + + + + + + + + +Node15 + + +interrupts_init_timer0 + + + + + +Node14->Node15 + + + + + + + + +Node15->Node11 + + + + + + + + +Node16->Node11 + + + + + + + + +Node17->Node8 + + + + + + + + diff --git a/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.map b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.map new file mode 100644 index 0000000..036b3c0 --- /dev/null +++ b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.md5 b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.md5 new file mode 100644 index 0000000..5b831e8 --- /dev/null +++ b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.md5 @@ -0,0 +1 @@ +8d3ed7eb9e7951edff30edd9382113c2 \ No newline at end of file diff --git a/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.svg b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.svg new file mode 100644 index 0000000..e2791ce --- /dev/null +++ b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +kernel_panic + + +Node1 + + +kernel_panic + + + + + +Node2 + + +kernel_halt + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +put_integers + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +put_unsigned + + + + + +Node3->Node6 + + + + + + + + +Node8 + + +putc + + + + + +Node3->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node3->Node9 + + + + + + + + +Node5 + + +put_signed + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node5->Node6 + + + + + + + + +Node5->Node8 + + + + + + + + +Node7 + + +_divmod + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node1 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.map b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.map new file mode 100644 index 0000000..86793eb --- /dev/null +++ b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.md5 b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.md5 new file mode 100644 index 0000000..7273cb8 --- /dev/null +++ b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.md5 @@ -0,0 +1 @@ +c7abc508a987ecbaf17f858a59d40a12 \ No newline at end of file diff --git a/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.svg b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.svg new file mode 100644 index 0000000..1a29934 --- /dev/null +++ b/docs/html/panic_8c_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +kernel_panic + + +Node1 + + +kernel_panic + + + + + +Node2 + + +_bdiv + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_divmod + + + + + +Node1->Node3 + + + + + + + + +Node13 + + +_udiv32 + + + + + +Node1->Node13 + + + + + + + + +Node15 + + +kmalloc + + + + + +Node1->Node15 + + + + + + + + +Node16 + + +kmalloc_init + + + + + +Node1->Node16 + + + + + + + + +Node4 + + +put_unsigned + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node4->Node5 + + + + + + + + +Node11 + + +put_integers + + + + + +Node4->Node11 + + + + + + + + +Node12 + + +put_signed + + + + + +Node4->Node12 + + + + + + + + +Node5->Node1 + + + + + + + + +Node6 + + +clear + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +kernel_main + + + + + +Node5->Node7 + + + + + + + + +Node8 + + +getlines + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +init_message + + + + + +Node5->Node9 + + + + + + + + +Node10 + + +not_main + + + + + +Node5->Node10 + + + + + + + + +Node6->Node7 + + + + + + + + +Node8->Node7 + + + + + + + + +Node9->Node7 + + + + + + + + +Node11->Node5 + + + + + + + + +Node12->Node11 + + + + + + + + +Node14 + + +interrupts_init_timer0 + + + + + +Node13->Node14 + + + + + + + + +Node14->Node10 + + + + + + + + +Node15->Node10 + + + + + + + + +Node16->Node7 + + + + + + + + diff --git a/docs/html/panic_8c_source.html b/docs/html/panic_8c_source.html new file mode 100644 index 0000000..6776777 --- /dev/null +++ b/docs/html/panic_8c_source.html @@ -0,0 +1,139 @@ + + + + + + + +AstraKernel: src/kernel/panic.c Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        panic.c
        +
        +
        +Go to the documentation of this file.
        1#include "panic.h"
        +
        2#include "printf.h"
        +
        3
        +
        +
        17[[noreturn]] void kernel_halt(void)
        +
        18{
        +
        19 __asm__ volatile(
        +
        20 "cpsid i\n\t"
        +
        21 "cpsid f\n\t"
        +
        22 :
        +
        23 :
        +
        24 : "memory"
        +
        25 );
        +
        26
        +
        27 for (;;)
        +
        28 {
        +
        29 __asm__ volatile("wfi" ::: "memory");
        +
        30 }
        +
        31}
        +
        +
        32
        +
        +
        45[[noreturn]] void kernel_panic(const char *message)
        +
        46{
        +
        47 printf("%s", message);
        + +
        49}
        +
        +
        void kernel_halt(void)
        Halt the CPU indefinitely.
        Definition panic.c:17
        +
        void kernel_panic(const char *message)
        Print a panic message and halt the CPU.
        Definition panic.c:45
        +
        Kernel panic and halt routines.
        +
        void printf(const char *fmt,...)
        Kernel printf implementation using UART output.
        Definition printf.c:205
        +
        Minimal kernel printf/puts/getlines interface for freestanding systems.
        +
        +
        +
        + + + + diff --git a/docs/html/panic_8h.html b/docs/html/panic_8h.html new file mode 100644 index 0000000..c976906 --- /dev/null +++ b/docs/html/panic_8h.html @@ -0,0 +1,216 @@ + + + + + + + +AstraKernel: include/panic.h File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        panic.h File Reference
        +
        +
        + +

        Kernel panic and halt routines. +More...

        +
        +This graph shows which files directly or indirectly include this file:
        +
        +
        +
        +
        +

        Go to the source code of this file.

        + + + + + + +

        +Functions

        void kernel_halt (void)
         Halt the CPU indefinitely.
        void kernel_panic (const char *message)
         Print a panic message and halt the CPU.
        +

        Detailed Description

        +

        Kernel panic and halt routines.

        +

        This module provides mechanisms to halt the system or stop execution in response to critical errors.

        + +

        Definition in file panic.h.

        +

        Function Documentation

        + +

        ◆ kernel_halt()

        + +
        +
        + + + + + + + +
        void kernel_halt (void )
        +
        + +

        Halt the CPU indefinitely.

        +

        Disables interrupts and places the processor in an infinite low-power wait state.

        +
        Note
        This function never returns.
        +

        Implementation details:

          +
        • Disables both IRQ (cpsid i) and FIQ (cpsid f) interrupts.
        • +
        • Uses wfi (Wait For Interrupt) to place the CPU in a low-power idle loop.
        • +
        • The memory clobber ensures no memory operations are reordered around this sequence.
        • +
        +
        See also
        kernel_panic()
        + +

        Definition at line 17 of file panic.c.

        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ kernel_panic()

        + +
        +
        + + + + + + + +
        void kernel_panic (const char * message)
        +
        + +

        Print a panic message and halt the CPU.

        +

        Used to stop the kernel when an unrecoverable error occurs.

        +
        Parameters
        + + +
        messageA human-readable string describing the reason for the panic.
        +
        +
        +
        Note
        This function never returns.
        +

        Implementation details:

        + +

        Definition at line 45 of file panic.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/panic_8h.js b/docs/html/panic_8h.js new file mode 100644 index 0000000..f9ac54f --- /dev/null +++ b/docs/html/panic_8h.js @@ -0,0 +1,5 @@ +var panic_8h = +[ + [ "kernel_halt", "panic_8h.html#a830ea0b31f5cecec34c74c8a4c2f8192", null ], + [ "kernel_panic", "panic_8h.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca", null ] +]; \ No newline at end of file diff --git a/docs/html/panic_8h__dep__incl.map b/docs/html/panic_8h__dep__incl.map new file mode 100644 index 0000000..9cee1c6 --- /dev/null +++ b/docs/html/panic_8h__dep__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/html/panic_8h__dep__incl.md5 b/docs/html/panic_8h__dep__incl.md5 new file mode 100644 index 0000000..e4f3599 --- /dev/null +++ b/docs/html/panic_8h__dep__incl.md5 @@ -0,0 +1 @@ +76651a2caa4e4c04c5356e15ac14869a \ No newline at end of file diff --git a/docs/html/panic_8h__dep__incl.svg b/docs/html/panic_8h__dep__incl.svg new file mode 100644 index 0000000..ef37fa9 --- /dev/null +++ b/docs/html/panic_8h__dep__incl.svg @@ -0,0 +1,111 @@ + + + + + + +include/panic.h + + +Node1 + + +include/panic.h + + + + + +Node2 + + +include/lib/math.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +src/kernel/memory.c + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/kernel/panic.c + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +src/user/printf.c + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +src/kernel/interrupt.c + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.map b/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.map new file mode 100644 index 0000000..fc3202b --- /dev/null +++ b/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.map @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.md5 b/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.md5 new file mode 100644 index 0000000..3bf9c0d --- /dev/null +++ b/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.md5 @@ -0,0 +1 @@ +ead4779d5cbfc0f8038faec74da97ea5 \ No newline at end of file diff --git a/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.svg b/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.svg new file mode 100644 index 0000000..aa1f9b8 --- /dev/null +++ b/docs/html/panic_8h_a830ea0b31f5cecec34c74c8a4c2f8192_icgraph.svg @@ -0,0 +1,390 @@ + + + + + + +kernel_halt + + +Node1 + + +kernel_halt + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_bdiv + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +_divmod + + + + + +Node2->Node4 + + + + + + + + +Node14 + + +_udiv32 + + + + + +Node2->Node14 + + + + + + + + +Node16 + + +kmalloc + + + + + +Node2->Node16 + + + + + + + + +Node17 + + +kmalloc_init + + + + + +Node2->Node17 + + + + + + + + +Node5 + + +put_unsigned + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +printf + + + + + +Node5->Node6 + + + + + + + + +Node12 + + +put_integers + + + + + +Node5->Node12 + + + + + + + + +Node13 + + +put_signed + + + + + +Node5->Node13 + + + + + + + + +Node6->Node2 + + + + + + + + +Node7 + + +clear + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +kernel_main + + + + + +Node6->Node8 + + + + + + + + +Node9 + + +getlines + + + + + +Node6->Node9 + + + + + + + + +Node10 + + +init_message + + + + + +Node6->Node10 + + + + + + + + +Node11 + + +not_main + + + + + +Node6->Node11 + + + + + + + + +Node7->Node8 + + + + + + + + +Node9->Node8 + + + + + + + + +Node10->Node8 + + + + + + + + +Node12->Node6 + + + + + + + + +Node13->Node12 + + + + + + + + +Node15 + + +interrupts_init_timer0 + + + + + +Node14->Node15 + + + + + + + + +Node15->Node11 + + + + + + + + +Node16->Node11 + + + + + + + + +Node17->Node8 + + + + + + + + diff --git a/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.map b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.map new file mode 100644 index 0000000..036b3c0 --- /dev/null +++ b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.md5 b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.md5 new file mode 100644 index 0000000..5b831e8 --- /dev/null +++ b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.md5 @@ -0,0 +1 @@ +8d3ed7eb9e7951edff30edd9382113c2 \ No newline at end of file diff --git a/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.svg b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.svg new file mode 100644 index 0000000..e2791ce --- /dev/null +++ b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +kernel_panic + + +Node1 + + +kernel_panic + + + + + +Node2 + + +kernel_halt + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +put_integers + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +put_unsigned + + + + + +Node3->Node6 + + + + + + + + +Node8 + + +putc + + + + + +Node3->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node3->Node9 + + + + + + + + +Node5 + + +put_signed + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node5->Node6 + + + + + + + + +Node5->Node8 + + + + + + + + +Node7 + + +_divmod + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node1 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.map b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.map new file mode 100644 index 0000000..86793eb --- /dev/null +++ b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.md5 b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.md5 new file mode 100644 index 0000000..7273cb8 --- /dev/null +++ b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.md5 @@ -0,0 +1 @@ +c7abc508a987ecbaf17f858a59d40a12 \ No newline at end of file diff --git a/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.svg b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.svg new file mode 100644 index 0000000..1a29934 --- /dev/null +++ b/docs/html/panic_8h_ac3d3e7674c5f1ad62a44afce2ff9a0ca_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +kernel_panic + + +Node1 + + +kernel_panic + + + + + +Node2 + + +_bdiv + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_divmod + + + + + +Node1->Node3 + + + + + + + + +Node13 + + +_udiv32 + + + + + +Node1->Node13 + + + + + + + + +Node15 + + +kmalloc + + + + + +Node1->Node15 + + + + + + + + +Node16 + + +kmalloc_init + + + + + +Node1->Node16 + + + + + + + + +Node4 + + +put_unsigned + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node4->Node5 + + + + + + + + +Node11 + + +put_integers + + + + + +Node4->Node11 + + + + + + + + +Node12 + + +put_signed + + + + + +Node4->Node12 + + + + + + + + +Node5->Node1 + + + + + + + + +Node6 + + +clear + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +kernel_main + + + + + +Node5->Node7 + + + + + + + + +Node8 + + +getlines + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +init_message + + + + + +Node5->Node9 + + + + + + + + +Node10 + + +not_main + + + + + +Node5->Node10 + + + + + + + + +Node6->Node7 + + + + + + + + +Node8->Node7 + + + + + + + + +Node9->Node7 + + + + + + + + +Node11->Node5 + + + + + + + + +Node12->Node11 + + + + + + + + +Node14 + + +interrupts_init_timer0 + + + + + +Node13->Node14 + + + + + + + + +Node14->Node10 + + + + + + + + +Node15->Node10 + + + + + + + + +Node16->Node7 + + + + + + + + diff --git a/docs/html/panic_8h_source.html b/docs/html/panic_8h_source.html new file mode 100644 index 0000000..213d714 --- /dev/null +++ b/docs/html/panic_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +AstraKernel: include/panic.h Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        panic.h
        +
        +
        +Go to the documentation of this file.
        1
        +
        8#pragma once
        +
        9
        +
        18[[noreturn]] void kernel_halt(void);
        +
        19
        +
        30[[noreturn]] void kernel_panic(const char *message);
        +
        void kernel_halt(void)
        Halt the CPU indefinitely.
        Definition panic.c:17
        +
        void kernel_panic(const char *message)
        Print a panic message and halt the CPU.
        Definition panic.c:45
        +
        +
        +
        + + + + diff --git a/docs/html/panic_8md.html b/docs/html/panic_8md.html new file mode 100644 index 0000000..a55a4c5 --- /dev/null +++ b/docs/html/panic_8md.html @@ -0,0 +1,113 @@ + + + + + + + +AstraKernel: docs/pages/panic.md File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        docs/pages/panic.md File Reference
        +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/printf_8c.html b/docs/html/printf_8c.html new file mode 100644 index 0000000..32d48db --- /dev/null +++ b/docs/html/printf_8c.html @@ -0,0 +1,714 @@ + + + + + + + +AstraKernel: src/user/printf.c File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        printf.c File Reference
        +
        +
        + +

        UART-backed minimal printf implementation for a freestanding kernel. +More...

        +
        #include "printf.h"
        +#include "panic.h"
        +#include <stdint.h>
        +#include <stdbool.h>
        +#include <stdarg.h>
        +#include <stddef.h>
        +
        +Include dependency graph for printf.c:
        +
        +
        +
        +
        +

        Go to the source code of this file.

        + + + + + +

        +Macros

        #define UART0_BASE   0x101F1000
        #define UART0_DR   (*(volatile uint32_t *)UART0_BASE)
        #define UART0_FR   (*(volatile uint32_t *)(UART0_BASE + 0x18))
        + + + + + + + + + + + + + + + + + + + + +

        +Functions

        static void putc (char c)
         Send a single character over UART, waiting if the FIFO is full.
        unsigned long long _bdiv (unsigned long long dividend, unsigned long long divisor, unsigned long long *remainder)
        static unsigned long long _divmod (unsigned long long n, unsigned long long d, unsigned long long *r)
         Perform division and return quotient and remainder.
        static void put_unsigned (unsigned long long num, unsigned base, bool uppercase)
         Print an unsigned integer in the given base.
        static void put_signed (long long num)
         Print a signed integer in decimal form.
        static void put_integers (char control, const Format_State *restrict fs)
         Format and print an integer based on format control.
        void puts (const char *s)
         Transmit a null-terminated string.
        void printf (const char *fmt,...)
         Kernel printf implementation using UART output.
        static char getc (void)
         Blocking UART character input.
        void getlines (char *restrict buffer, size_t length)
         Read a line of text from UART with basic editing support.
        + + + +

        +Variables

        static const uint32_t UART_FR_TXFF = (1U << 5)
        static const uint32_t UART_FR_RXFE = (1U << 4)
        +

        Detailed Description

        +

        UART-backed minimal printf implementation for a freestanding kernel.

        +

        This file implements formatted output and simple line input using the QEMU VersatileAB UART0. It is designed for early boot and debugging.

        + +

        Definition in file printf.c.

        +

        Macro Definition Documentation

        + +

        ◆ UART0_BASE

        + +
        +
        + + + + +
        #define UART0_BASE   0x101F1000
        +
        +
        Todo
        : See to move this mathematical operation to math.c/.h
        + +

        Definition at line 22 of file printf.c.

        + +
        +
        + +

        ◆ UART0_DR

        + +
        +
        + + + + +
        #define UART0_DR   (*(volatile uint32_t *)UART0_BASE)
        +
        + +

        Definition at line 23 of file printf.c.

        + +
        +
        + +

        ◆ UART0_FR

        + +
        +
        + + + + +
        #define UART0_FR   (*(volatile uint32_t *)(UART0_BASE + 0x18))
        +
        + +

        Definition at line 24 of file printf.c.

        + +
        +
        +

        Function Documentation

        + +

        ◆ _bdiv()

        + +
        +
        + + + + + + + + + + + + + + + + +
        unsigned long long _bdiv (unsigned long long dividend,
        unsigned long long divisor,
        unsigned long long * remainder )
        +
        + +

        Definition at line 42 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ _divmod()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + +
        unsigned long long _divmod (unsigned long long n,
        unsigned long long d,
        unsigned long long * r )
        +
        +static
        +
        + +

        Perform division and return quotient and remainder.

        +
        Note
        Kernel panic if division by zero
        +
        Parameters
        + + + + +
        nDividend.
        dDivisor.
        rOutput parameter for remainder.
        +
        +
        +
        Returns
        Quotient of n / d.
        + +

        Definition at line 80 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ getc()

        + +
        +
        + + + + + +
        + + + + + + + +
        char getc (void )
        +
        +inlinestatic
        +
        + +

        Blocking UART character input.

        +
        Returns
        The next character read from UART.
        + +

        Definition at line 331 of file printf.c.

        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ getlines()

        + +
        +
        + + + + + + + + + + + +
        void getlines (char *restrict buffer,
        size_t length )
        +
        + +

        Read a line of text from UART with basic editing support.

        +

        Reads a line of text from UART into the given buffer.

        +
        Parameters
        + + + +
        bufferDestination buffer for the input line.
        lengthMaximum number of bytes to store (including '\0').
        +
        +
        +

        Handles backspace and carriage return.

        + +

        Definition at line 346 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ printf()

        + +
        +
        + + + + + + + + + + + +
        void printf (const char * fmt,
        ... )
        +
        + +

        Kernel printf implementation using UART output.

        +

        Prints a formatted string to the UART output.

        +
        Parameters
        + + + +
        fmtFormat string.
        ...Variable arguments for the format string.
        +
        +
        +

        Implements a minimal printf supporting:

          +
        • c, s, p, d, u, x, X, l modifiers
        • +
        • %%
        • +
        + +

        Definition at line 205 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ put_integers()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        void put_integers (char control,
        const Format_State *restrict fs )
        +
        +inlinestatic
        +
        + +

        Format and print an integer based on format control.

        +
        Parameters
        + + + +
        controlFormat specifier character ('d', 'u', 'x', or 'X').
        fsPointer to the current format state.
        +
        +
        + +

        Definition at line 141 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ put_signed()

        + +
        +
        + + + + + +
        + + + + + + + +
        void put_signed (long long num)
        +
        +inlinestatic
        +
        + +

        Print a signed integer in decimal form.

        +
        Parameters
        + + +
        numSigned integer to print.
        +
        +
        + +

        Definition at line 125 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ put_unsigned()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + +
        void put_unsigned (unsigned long long num,
        unsigned base,
        bool uppercase )
        +
        +static
        +
        + +

        Print an unsigned integer in the given base.

        +
        Parameters
        + + + + +
        numUnsigned integer to print.
        baseNumber base (10 for decimal, 16 for hex).
        uppercaseUse uppercase hex digits if true.
        +
        +
        + +

        Definition at line 98 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ putc()

        + +
        +
        + + + + + +
        + + + + + + + +
        void putc (char c)
        +
        +inlinestatic
        +
        + +

        Send a single character over UART, waiting if the FIFO is full.

        +
        Parameters
        + + +
        cCharacter to transmit
        +
        +
        + +

        Definition at line 34 of file printf.c.

        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ puts()

        + +
        +
        + + + + + + + +
        void puts (const char * s)
        +
        + +

        Transmit a null-terminated string.

        +

        Prints a null-terminated string over UART.

        +
        Parameters
        + + +
        sString to transmit. Must be non-null.
        +
        +
        + +

        Definition at line 187 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        +

        Variable Documentation

        + +

        ◆ UART_FR_RXFE

        + +
        +
        + + + + + +
        + + + + +
        const uint32_t UART_FR_RXFE = (1U << 4)
        +
        +static
        +
        + +

        Definition at line 27 of file printf.c.

        + +
        +
        + +

        ◆ UART_FR_TXFF

        + +
        +
        + + + + + +
        + + + + +
        const uint32_t UART_FR_TXFF = (1U << 5)
        +
        +static
        +
        + +

        Definition at line 26 of file printf.c.

        + +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/printf_8c.js b/docs/html/printf_8c.js new file mode 100644 index 0000000..406d1d9 --- /dev/null +++ b/docs/html/printf_8c.js @@ -0,0 +1,18 @@ +var printf_8c = +[ + [ "UART0_BASE", "printf_8c.html#a7a07348b4332ff6b88abf6092347deba", null ], + [ "UART0_DR", "printf_8c.html#a4bd8785a1ac7d8be53153ec3e2f5afa4", null ], + [ "UART0_FR", "printf_8c.html#a8838537812346e09a66edf94c0c9ffe9", null ], + [ "_bdiv", "printf_8c.html#a694b6d27273027eb96424e52b798c391", null ], + [ "_divmod", "printf_8c.html#a96a30e819fcbfa9a0251f71f14ff79bc", null ], + [ "getc", "printf_8c.html#a0e65feb118c1ee30820c142aeb5a5145", null ], + [ "getlines", "printf_8c.html#a7880ed31ba841d890680635d6b83fcb7", null ], + [ "printf", "printf_8c.html#a0aff7311d684a0e0ef33125616a73385", null ], + [ "put_integers", "printf_8c.html#ac3154a3597888cf112e4e7bf6a5f1846", null ], + [ "put_signed", "printf_8c.html#a2e8c688dfa078a9a7f1f02d4126f466a", null ], + [ "put_unsigned", "printf_8c.html#ab97c3c9e783c1402d4007ceafdb197c1", null ], + [ "putc", "printf_8c.html#a9bdf0418571456c566aa2f329b5f8350", null ], + [ "puts", "printf_8c.html#a299d0f9cb9e7b14e1278a4ed21e4d76f", null ], + [ "UART_FR_RXFE", "printf_8c.html#ae3aa13fe253ec6af67a7bbb2509081d9", null ], + [ "UART_FR_TXFF", "printf_8c.html#a6882f9f402227d0d57eb685890f6ac58", null ] +]; \ No newline at end of file diff --git a/docs/html/printf_8c__incl.map b/docs/html/printf_8c__incl.map new file mode 100644 index 0000000..f97f3f7 --- /dev/null +++ b/docs/html/printf_8c__incl.map @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c__incl.md5 b/docs/html/printf_8c__incl.md5 new file mode 100644 index 0000000..de9e67a --- /dev/null +++ b/docs/html/printf_8c__incl.md5 @@ -0,0 +1 @@ +f87c1c57c9388c93d2aa08127573f2cd \ No newline at end of file diff --git a/docs/html/printf_8c__incl.svg b/docs/html/printf_8c__incl.svg new file mode 100644 index 0000000..4781e25 --- /dev/null +++ b/docs/html/printf_8c__incl.svg @@ -0,0 +1,165 @@ + + + + + + +src/user/printf.c + + +Node1 + + +src/user/printf.c + + + + + +Node2 + + +printf.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdarg.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +stddef.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +stdbool.h + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +stdint.h + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +panic.h + + + + + +Node1->Node7 + + + + + + + + +Node2->Node3 + + + + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node2->Node6 + + + + + + + + diff --git a/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.map b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.map new file mode 100644 index 0000000..67e7678 --- /dev/null +++ b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.md5 b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.md5 new file mode 100644 index 0000000..7cfde2c --- /dev/null +++ b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.md5 @@ -0,0 +1 @@ +6a4e64ff7357fd47a7c12af0aa36eb09 \ No newline at end of file diff --git a/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.svg b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.svg new file mode 100644 index 0000000..44b716c --- /dev/null +++ b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node2 + + +put_integers + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +put_unsigned + + + + + +Node1->Node4 + + + + + + + + +Node8 + + +putc + + + + + +Node1->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node1->Node9 + + + + + + + + +Node3 + + +put_signed + + + + + +Node2->Node3 + + + + + + + + +Node2->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + +Node3->Node8 + + + + + + + + +Node5 + + +_divmod + + + + + +Node4->Node5 + + + + + + + + +Node4->Node8 + + + + + + + + +Node6 + + +kernel_panic + + + + + +Node5->Node6 + + + + + + + + +Node6->Node1 + + + + + + + + +Node7 + + +kernel_halt + + + + + +Node6->Node7 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.map b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.map new file mode 100644 index 0000000..179016e --- /dev/null +++ b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.md5 b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.md5 new file mode 100644 index 0000000..5fd07c3 --- /dev/null +++ b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.md5 @@ -0,0 +1 @@ +139c630566d443a5022b5911dab73710 \ No newline at end of file diff --git a/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.svg b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.svg new file mode 100644 index 0000000..ce61dd7 --- /dev/null +++ b/docs/html/printf_8c_a0aff7311d684a0e0ef33125616a73385_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node2 + + +clear + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +getlines + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +init_message + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +kernel_panic + + + + + +Node1->Node6 + + + + + + + + +Node14 + + +not_main + + + + + +Node1->Node14 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node7 + + +_bdiv + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +_divmod + + + + + +Node6->Node8 + + + + + + + + +Node12 + + +_udiv32 + + + + + +Node6->Node12 + + + + + + + + +Node15 + + +kmalloc + + + + + +Node6->Node15 + + + + + + + + +Node16 + + +kmalloc_init + + + + + +Node6->Node16 + + + + + + + + +Node9 + + +put_unsigned + + + + + +Node8->Node9 + + + + + + + + +Node9->Node1 + + + + + + + + +Node10 + + +put_integers + + + + + +Node9->Node10 + + + + + + + + +Node11 + + +put_signed + + + + + +Node9->Node11 + + + + + + + + +Node10->Node1 + + + + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +interrupts_init_timer0 + + + + + +Node12->Node13 + + + + + + + + +Node13->Node14 + + + + + + + + +Node15->Node14 + + + + + + + + +Node16->Node3 + + + + + + + + diff --git a/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.map b/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.map new file mode 100644 index 0000000..16fb1fc --- /dev/null +++ b/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.md5 b/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.md5 new file mode 100644 index 0000000..cfcdff7 --- /dev/null +++ b/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.md5 @@ -0,0 +1 @@ +d876ee1ed089bed24584fe70491ae524 \ No newline at end of file diff --git a/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.svg b/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.svg new file mode 100644 index 0000000..2c841e2 --- /dev/null +++ b/docs/html/printf_8c_a0e65feb118c1ee30820c142aeb5a5145_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +getc + + +Node1 + + +getc + + + + + +Node2 + + +getlines + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.map b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.map new file mode 100644 index 0000000..e34ea6e --- /dev/null +++ b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.md5 b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.md5 new file mode 100644 index 0000000..2e5c8cd --- /dev/null +++ b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.md5 @@ -0,0 +1 @@ +f7b10ff065cf2596be7970c0068796ce \ No newline at end of file diff --git a/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.svg b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.svg new file mode 100644 index 0000000..49f2a08 --- /dev/null +++ b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_cgraph.svg @@ -0,0 +1,138 @@ + + + + + + +_putintegers + + +Node1 + + +_putintegers + + + + + +Node2 + + +_puthexcapital + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_putunsignedlong + + + + + +Node1->Node3 + + + + + + + + +Node5 + + +putc + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +_puthexsmall + + + + + +Node1->Node6 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +_bdiv + + + + + +Node3->Node4 + + + + + + + + +Node3->Node5 + + + + + + + + +Node6->Node3 + + + + + + + + diff --git a/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.map b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.map new file mode 100644 index 0000000..004ecb8 --- /dev/null +++ b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.map @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.md5 b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.md5 new file mode 100644 index 0000000..7e558ae --- /dev/null +++ b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.md5 @@ -0,0 +1 @@ +168895ab25d9bf5d11ca311314b92041 \ No newline at end of file diff --git a/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.svg b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.svg new file mode 100644 index 0000000..d786f7e --- /dev/null +++ b/docs/html/printf_8c_a229f3a914ff741b54897f96250dbf980_icgraph.svg @@ -0,0 +1,282 @@ + + + + + + +_putintegers + + +Node1 + + +_putintegers + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node2->Node2 + + + + + + + + +Node3 + + +clear + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_main + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +getlines + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +init_message + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node2->Node7 + + + + + + + + +Node10 + + +not_main + + + + + +Node2->Node10 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6->Node4 + + + + + + + + +Node8 + + +_udiv32 + + + + + +Node7->Node8 + + + + + + + + +Node11 + + +kmalloc + + + + + +Node7->Node11 + + + + + + + + +Node12 + + +kmalloc_init + + + + + +Node7->Node12 + + + + + + + + +Node9 + + +interrupts_init_timer0 + + + + + +Node8->Node9 + + + + + + + + +Node9->Node10 + + + + + + + + +Node11->Node10 + + + + + + + + +Node12->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.map b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.map new file mode 100644 index 0000000..b1f544a --- /dev/null +++ b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.md5 b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.md5 new file mode 100644 index 0000000..c83ee0f --- /dev/null +++ b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.md5 @@ -0,0 +1 @@ +e27129f9a629be653d793452d46623a1 \ No newline at end of file diff --git a/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.svg b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.svg new file mode 100644 index 0000000..7ef97f4 --- /dev/null +++ b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +puts + + +Node1 + + +puts + + + + + +Node2 + + +putc + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.map b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.map new file mode 100644 index 0000000..d7d60d3 --- /dev/null +++ b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.map @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.md5 b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.md5 new file mode 100644 index 0000000..d30425c --- /dev/null +++ b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.md5 @@ -0,0 +1 @@ +888d2174652c452da005078b9cd573d4 \ No newline at end of file diff --git a/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.svg b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.svg new file mode 100644 index 0000000..3b3e7af --- /dev/null +++ b/docs/html/printf_8c_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.svg @@ -0,0 +1,444 @@ + + + + + + +puts + + +Node1 + + +puts + + + + + +Node2 + + +getlines + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +init_message + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +irq_sanity_check + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +kmalloc_init + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +not_main + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +printf + + + + + +Node1->Node8 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node6->Node3 + + + + + + + + +Node8->Node2 + + + + + + + + +Node8->Node3 + + + + + + + + +Node8->Node4 + + + + + + + + +Node8->Node7 + + + + + + + + +Node9 + + +clear + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +kernel_panic + + + + + +Node8->Node10 + + + + + + + + +Node9->Node3 + + + + + + + + +Node10->Node6 + + + + + + + + +Node11 + + +_bdiv + + + + + +Node10->Node11 + + + + + + + + +Node12 + + +_divmod + + + + + +Node10->Node12 + + + + + + + + +Node16 + + +_udiv32 + + + + + +Node10->Node16 + + + + + + + + +Node18 + + +kmalloc + + + + + +Node10->Node18 + + + + + + + + +Node13 + + +put_unsigned + + + + + +Node12->Node13 + + + + + + + + +Node13->Node8 + + + + + + + + +Node14 + + +put_integers + + + + + +Node13->Node14 + + + + + + + + +Node15 + + +put_signed + + + + + +Node13->Node15 + + + + + + + + +Node14->Node8 + + + + + + + + +Node15->Node14 + + + + + + + + +Node17 + + +interrupts_init_timer0 + + + + + +Node16->Node17 + + + + + + + + +Node17->Node7 + + + + + + + + +Node18->Node7 + + + + + + + + diff --git a/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.map b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.map new file mode 100644 index 0000000..5a9f262 --- /dev/null +++ b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.md5 b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.md5 new file mode 100644 index 0000000..8cbe526 --- /dev/null +++ b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.md5 @@ -0,0 +1 @@ +cee50ecdebe45bc7e65ea65d9a00f5e8 \ No newline at end of file diff --git a/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.svg b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.svg new file mode 100644 index 0000000..adf716e --- /dev/null +++ b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +put_signed + + +Node1 + + +put_signed + + + + + +Node2 + + +put_unsigned + + + + + +Node1->Node2 + + + + + + + + +Node8 + + +putc + + + + + +Node1->Node8 + + + + + + + + +Node3 + + +_divmod + + + + + +Node2->Node3 + + + + + + + + +Node2->Node8 + + + + + + + + +Node4 + + +kernel_panic + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_halt + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +printf + + + + + +Node4->Node6 + + + + + + + + +Node6->Node2 + + + + + + + + +Node7 + + +put_integers + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node6->Node9 + + + + + + + + +Node7->Node1 + + + + + + + + +Node7->Node2 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.map b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.map new file mode 100644 index 0000000..0cb8c73 --- /dev/null +++ b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.md5 b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.md5 new file mode 100644 index 0000000..efb740f --- /dev/null +++ b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.md5 @@ -0,0 +1 @@ +4b53fcc4596fde55f05dbed5493440e5 \ No newline at end of file diff --git a/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.svg b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.svg new file mode 100644 index 0000000..9dc95b9 --- /dev/null +++ b/docs/html/printf_8c_a2e8c688dfa078a9a7f1f02d4126f466a_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +put_signed + + +Node1 + + +put_signed + + + + + +Node2 + + +put_integers + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +clear + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_main + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +getlines + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +init_message + + + + + +Node3->Node7 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node3->Node8 + + + + + + + + +Node14 + + +not_main + + + + + +Node3->Node14 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node5 + + + + + + + + +Node9 + + +_bdiv + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +_divmod + + + + + +Node8->Node10 + + + + + + + + +Node12 + + +_udiv32 + + + + + +Node8->Node12 + + + + + + + + +Node15 + + +kmalloc + + + + + +Node8->Node15 + + + + + + + + +Node16 + + +kmalloc_init + + + + + +Node8->Node16 + + + + + + + + +Node11 + + +put_unsigned + + + + + +Node10->Node11 + + + + + + + + +Node11->Node1 + + + + + + + + +Node11->Node2 + + + + + + + + +Node11->Node3 + + + + + + + + +Node13 + + +interrupts_init_timer0 + + + + + +Node12->Node13 + + + + + + + + +Node13->Node14 + + + + + + + + +Node15->Node14 + + + + + + + + +Node16->Node5 + + + + + + + + diff --git a/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.map b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.map new file mode 100644 index 0000000..593653f --- /dev/null +++ b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.md5 b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.md5 new file mode 100644 index 0000000..1cd9890 --- /dev/null +++ b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.md5 @@ -0,0 +1 @@ +57aceb8a97433193f14bb7cd83d2aa80 \ No newline at end of file diff --git a/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.svg b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.svg new file mode 100644 index 0000000..41b3c0b --- /dev/null +++ b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + +_putunsignedlong + + +Node1 + + +_putunsignedlong + + + + + +Node2 + + +_bdiv + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +putc + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.map b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.map new file mode 100644 index 0000000..696bf47 --- /dev/null +++ b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.md5 b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.md5 new file mode 100644 index 0000000..c16a129 --- /dev/null +++ b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.md5 @@ -0,0 +1 @@ +775156ae31dcc7f89379e90dd8aced31 \ No newline at end of file diff --git a/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.svg b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.svg new file mode 100644 index 0000000..fab4e67 --- /dev/null +++ b/docs/html/printf_8c_a59d8819db32c6b5c7365aad05b0778b5_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +_putunsignedlong + + +Node1 + + +_putunsignedlong + + + + + +Node2 + + +_puthexcapital + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_putintegers + + + + + +Node1->Node3 + + + + + + + + +Node15 + + +_puthexsmall + + + + + +Node1->Node15 + + + + + + + + +Node16 + + +_putunsignedint + + + + + +Node1->Node16 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +printf + + + + + +Node3->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + +Node5 + + +clear + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +kernel_main + + + + + +Node4->Node6 + + + + + + + + +Node7 + + +getlines + + + + + +Node4->Node7 + + + + + + + + +Node8 + + +init_message + + + + + +Node4->Node8 + + + + + + + + +Node9 + + +kernel_panic + + + + + +Node4->Node9 + + + + + + + + +Node12 + + +not_main + + + + + +Node4->Node12 + + + + + + + + +Node5->Node6 + + + + + + + + +Node7->Node6 + + + + + + + + +Node8->Node6 + + + + + + + + +Node10 + + +_udiv32 + + + + + +Node9->Node10 + + + + + + + + +Node13 + + +kmalloc + + + + + +Node9->Node13 + + + + + + + + +Node14 + + +kmalloc_init + + + + + +Node9->Node14 + + + + + + + + +Node11 + + +interrupts_init_timer0 + + + + + +Node10->Node11 + + + + + + + + +Node11->Node12 + + + + + + + + +Node13->Node12 + + + + + + + + +Node14->Node6 + + + + + + + + +Node15->Node3 + + + + + + + + diff --git a/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.map b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.map new file mode 100644 index 0000000..918badc --- /dev/null +++ b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.md5 b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.md5 new file mode 100644 index 0000000..13f4f17 --- /dev/null +++ b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.md5 @@ -0,0 +1 @@ +4abf9913b80095ea3d97658dd347e255 \ No newline at end of file diff --git a/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.svg b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.svg new file mode 100644 index 0000000..d0b2cdf --- /dev/null +++ b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_cgraph.svg @@ -0,0 +1,237 @@ + + + + + + +_bdiv + + +Node1 + + +_bdiv + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_halt + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +printf + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +put_integers + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +put_unsigned + + + + + +Node4->Node7 + + + + + + + + +Node9 + + +putc + + + + + +Node4->Node9 + + + + + + + + +Node10 + + +puts + + + + + +Node4->Node10 + + + + + + + + +Node6 + + +put_signed + + + + + +Node5->Node6 + + + + + + + + +Node5->Node7 + + + + + + + + +Node6->Node7 + + + + + + + + +Node6->Node9 + + + + + + + + +Node8 + + +_divmod + + + + + +Node7->Node8 + + + + + + + + +Node7->Node9 + + + + + + + + +Node8->Node2 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.map b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.map new file mode 100644 index 0000000..c98068d --- /dev/null +++ b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.map @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.md5 b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.md5 new file mode 100644 index 0000000..2fee47a --- /dev/null +++ b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.md5 @@ -0,0 +1 @@ +8684df3f6a4c528f1a57ea6f6973215f \ No newline at end of file diff --git a/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.svg b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.svg new file mode 100644 index 0000000..380701f --- /dev/null +++ b/docs/html/printf_8c_a694b6d27273027eb96424e52b798c391_icgraph.svg @@ -0,0 +1,390 @@ + + + + + + +_bdiv + + +Node1 + + +_bdiv + + + + + +Node2 + + +_putunsignedlong + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_puthexcapital + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +_putintegers + + + + + +Node2->Node4 + + + + + + + + +Node16 + + +_puthexsmall + + + + + +Node2->Node16 + + + + + + + + +Node17 + + +_putunsignedint + + + + + +Node2->Node17 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node4->Node5 + + + + + + + + +Node5->Node5 + + + + + + + + +Node6 + + +clear + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +kernel_main + + + + + +Node5->Node7 + + + + + + + + +Node8 + + +getlines + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +init_message + + + + + +Node5->Node9 + + + + + + + + +Node10 + + +kernel_panic + + + + + +Node5->Node10 + + + + + + + + +Node13 + + +not_main + + + + + +Node5->Node13 + + + + + + + + +Node6->Node7 + + + + + + + + +Node8->Node7 + + + + + + + + +Node9->Node7 + + + + + + + + +Node11 + + +_udiv32 + + + + + +Node10->Node11 + + + + + + + + +Node14 + + +kmalloc + + + + + +Node10->Node14 + + + + + + + + +Node15 + + +kmalloc_init + + + + + +Node10->Node15 + + + + + + + + +Node12 + + +interrupts_init_timer0 + + + + + +Node11->Node12 + + + + + + + + +Node12->Node13 + + + + + + + + +Node14->Node13 + + + + + + + + +Node15->Node7 + + + + + + + + +Node16->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.map b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.map new file mode 100644 index 0000000..c7239d5 --- /dev/null +++ b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.md5 b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.md5 new file mode 100644 index 0000000..e0ea4c0 --- /dev/null +++ b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.md5 @@ -0,0 +1 @@ +d9d73740eeabb7a8f567cb59d316783f \ No newline at end of file diff --git a/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.svg b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.svg new file mode 100644 index 0000000..98f845d --- /dev/null +++ b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_cgraph.svg @@ -0,0 +1,75 @@ + + + + + + +_puthexsmall + + +Node1 + + +_puthexsmall + + + + + +Node2 + + +_putunsignedlong + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_bdiv + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +putc + + + + + +Node2->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.map b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.map new file mode 100644 index 0000000..02b49e9 --- /dev/null +++ b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.map @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.md5 b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.md5 new file mode 100644 index 0000000..d21a2fb --- /dev/null +++ b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.md5 @@ -0,0 +1 @@ +94d538c9819c8ba47876572f2fc47591 \ No newline at end of file diff --git a/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.svg b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.svg new file mode 100644 index 0000000..2a1348a --- /dev/null +++ b/docs/html/printf_8c_a6ff3a4f52ca94cf220df24b61b7bd106_icgraph.svg @@ -0,0 +1,300 @@ + + + + + + +_puthexsmall + + +Node1 + + +_puthexsmall + + + + + +Node2 + + +_putintegers + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node2->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + +Node4 + + +clear + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_main + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +getlines + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +init_message + + + + + +Node3->Node7 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node3->Node8 + + + + + + + + +Node11 + + +not_main + + + + + +Node3->Node11 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node5 + + + + + + + + +Node9 + + +_udiv32 + + + + + +Node8->Node9 + + + + + + + + +Node12 + + +kmalloc + + + + + +Node8->Node12 + + + + + + + + +Node13 + + +kmalloc_init + + + + + +Node8->Node13 + + + + + + + + +Node10 + + +interrupts_init_timer0 + + + + + +Node9->Node10 + + + + + + + + +Node10->Node11 + + + + + + + + +Node12->Node11 + + + + + + + + +Node13->Node5 + + + + + + + + diff --git a/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.map b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.map new file mode 100644 index 0000000..1aed515 --- /dev/null +++ b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.map @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.md5 b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.md5 new file mode 100644 index 0000000..619775e --- /dev/null +++ b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.md5 @@ -0,0 +1 @@ +345df8ccadcb7c0d39369e1fc68e6eb1 \ No newline at end of file diff --git a/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.svg b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.svg new file mode 100644 index 0000000..41edcea --- /dev/null +++ b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_cgraph.svg @@ -0,0 +1,273 @@ + + + + + + +getlines + + +Node1 + + +getlines + + + + + +Node2 + + +getc + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node1->Node3 + + + + + + + + +Node10 + + +putc + + + + + +Node1->Node10 + + + + + + + + +Node11 + + +puts + + + + + +Node1->Node11 + + + + + + + + +Node4 + + +put_integers + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +put_unsigned + + + + + +Node3->Node6 + + + + + + + + +Node3->Node10 + + + + + + + + +Node3->Node11 + + + + + + + + +Node5 + + +put_signed + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node5->Node6 + + + + + + + + +Node5->Node10 + + + + + + + + +Node7 + + +_divmod + + + + + +Node6->Node7 + + + + + + + + +Node6->Node10 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node7->Node8 + + + + + + + + +Node8->Node3 + + + + + + + + +Node9 + + +kernel_halt + + + + + +Node8->Node9 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.map b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.map new file mode 100644 index 0000000..f006511 --- /dev/null +++ b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.md5 b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.md5 new file mode 100644 index 0000000..bbfb486 --- /dev/null +++ b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.md5 @@ -0,0 +1 @@ +67efbff31d8176030f939754a48c25b7 \ No newline at end of file diff --git a/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.svg b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.svg new file mode 100644 index 0000000..1a74e46 --- /dev/null +++ b/docs/html/printf_8c_a7880ed31ba841d890680635d6b83fcb7_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +getlines + + +Node1 + + +getlines + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.map b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.map new file mode 100644 index 0000000..9d2e284 --- /dev/null +++ b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.md5 b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.md5 new file mode 100644 index 0000000..22dd839 --- /dev/null +++ b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.md5 @@ -0,0 +1 @@ +cc05d0be30a46de9a780229ab55c2900 \ No newline at end of file diff --git a/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.svg b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.svg new file mode 100644 index 0000000..359e7a4 --- /dev/null +++ b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +_divmod + + +Node1 + + +_divmod + + + + + +Node2 + + +kernel_panic + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_halt + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +printf + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +put_integers + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +put_unsigned + + + + + +Node4->Node7 + + + + + + + + +Node8 + + +putc + + + + + +Node4->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node4->Node9 + + + + + + + + +Node6 + + +put_signed + + + + + +Node5->Node6 + + + + + + + + +Node5->Node7 + + + + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node1 + + + + + + + + +Node7->Node8 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.map b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.map new file mode 100644 index 0000000..4737a18 --- /dev/null +++ b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.md5 b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.md5 new file mode 100644 index 0000000..4f618f9 --- /dev/null +++ b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.md5 @@ -0,0 +1 @@ +ff636626aeb37200a1ae94317fee36b2 \ No newline at end of file diff --git a/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.svg b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.svg new file mode 100644 index 0000000..c53a1d2 --- /dev/null +++ b/docs/html/printf_8c_a96a30e819fcbfa9a0251f71f14ff79bc_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +_divmod + + +Node1 + + +_divmod + + + + + +Node2 + + +put_unsigned + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node2->Node3 + + + + + + + + +Node15 + + +put_integers + + + + + +Node2->Node15 + + + + + + + + +Node16 + + +put_signed + + + + + +Node2->Node16 + + + + + + + + +Node4 + + +clear + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_main + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +getlines + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +init_message + + + + + +Node3->Node7 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node3->Node8 + + + + + + + + +Node12 + + +not_main + + + + + +Node3->Node12 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node5 + + + + + + + + +Node8->Node1 + + + + + + + + +Node9 + + +_bdiv + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +_udiv32 + + + + + +Node8->Node10 + + + + + + + + +Node13 + + +kmalloc + + + + + +Node8->Node13 + + + + + + + + +Node14 + + +kmalloc_init + + + + + +Node8->Node14 + + + + + + + + +Node11 + + +interrupts_init_timer0 + + + + + +Node10->Node11 + + + + + + + + +Node11->Node12 + + + + + + + + +Node13->Node12 + + + + + + + + +Node14->Node5 + + + + + + + + +Node15->Node3 + + + + + + + + +Node16->Node15 + + + + + + + + diff --git a/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.map b/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.map new file mode 100644 index 0000000..8c77c22 --- /dev/null +++ b/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.md5 b/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.md5 new file mode 100644 index 0000000..6032e13 --- /dev/null +++ b/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.md5 @@ -0,0 +1 @@ +beddffa30978e4edbd729d64a6ee5f65 \ No newline at end of file diff --git a/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.svg b/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.svg new file mode 100644 index 0000000..86360fb --- /dev/null +++ b/docs/html/printf_8c_a97131bc453b7cc6fd2a6e7f9695081b1_cgraph.svg @@ -0,0 +1,75 @@ + + + + + + +_putunsignedint + + +Node1 + + +_putunsignedint + + + + + +Node2 + + +_putunsignedlong + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_bdiv + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +putc + + + + + +Node2->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.map b/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.map new file mode 100644 index 0000000..1a121d8 --- /dev/null +++ b/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.map @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.md5 b/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.md5 new file mode 100644 index 0000000..2dee586 --- /dev/null +++ b/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.md5 @@ -0,0 +1 @@ +1e1db2ab1c523119451507532c3abf96 \ No newline at end of file diff --git a/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.svg b/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.svg new file mode 100644 index 0000000..d181d17 --- /dev/null +++ b/docs/html/printf_8c_a9bdf0418571456c566aa2f329b5f8350_icgraph.svg @@ -0,0 +1,498 @@ + + + + + + +putc + + +Node1 + + +putc + + + + + +Node2 + + +getlines + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +printf + + + + + +Node1->Node4 + + + + + + + + +Node10 + + +put_unsigned + + + + + +Node1->Node10 + + + + + + + + +Node12 + + +put_signed + + + + + +Node1->Node12 + + + + + + + + +Node18 + + +puts + + + + + +Node1->Node18 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node2->Node3 + + + + + + + + +Node4->Node2 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +clear + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +init_message + + + + + +Node4->Node6 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node4->Node7 + + + + + + + + +Node15 + + +not_main + + + + + +Node4->Node15 + + + + + + + + +Node5->Node3 + + + + + + + + +Node6->Node3 + + + + + + + + +Node8 + + +_bdiv + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +_divmod + + + + + +Node7->Node9 + + + + + + + + +Node13 + + +_udiv32 + + + + + +Node7->Node13 + + + + + + + + +Node16 + + +kmalloc + + + + + +Node7->Node16 + + + + + + + + +Node17 + + +kmalloc_init + + + + + +Node7->Node17 + + + + + + + + +Node9->Node10 + + + + + + + + +Node10->Node4 + + + + + + + + +Node11 + + +put_integers + + + + + +Node10->Node11 + + + + + + + + +Node10->Node12 + + + + + + + + +Node11->Node4 + + + + + + + + +Node12->Node11 + + + + + + + + +Node14 + + +interrupts_init_timer0 + + + + + +Node13->Node14 + + + + + + + + +Node14->Node15 + + + + + + + + +Node16->Node15 + + + + + + + + +Node17->Node3 + + + + + + + + +Node18->Node2 + + + + + + + + +Node18->Node4 + + + + + + + + +Node18->Node6 + + + + + + + + +Node18->Node15 + + + + + + + + +Node18->Node17 + + + + + + + + +Node19 + + +irq_sanity_check + + + + + +Node18->Node19 + + + + + + + + diff --git a/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.map b/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.map new file mode 100644 index 0000000..7187d59 --- /dev/null +++ b/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.map @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.md5 b/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.md5 new file mode 100644 index 0000000..dd120ae --- /dev/null +++ b/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.md5 @@ -0,0 +1 @@ +3f4cb1f2edbbb01e8e8f1c3335a18b17 \ No newline at end of file diff --git a/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.svg b/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.svg new file mode 100644 index 0000000..0ce82ed --- /dev/null +++ b/docs/html/printf_8c_aa332bc15fee7dec7b84879bcdb096f91_icgraph.svg @@ -0,0 +1,282 @@ + + + + + + +_validate_format_specifier + + +Node1 + + +_validate_format_specifier + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node2->Node2 + + + + + + + + +Node3 + + +clear + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_main + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +getlines + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +init_message + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node2->Node7 + + + + + + + + +Node10 + + +not_main + + + + + +Node2->Node10 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6->Node4 + + + + + + + + +Node8 + + +_udiv32 + + + + + +Node7->Node8 + + + + + + + + +Node11 + + +kmalloc + + + + + +Node7->Node11 + + + + + + + + +Node12 + + +kmalloc_init + + + + + +Node7->Node12 + + + + + + + + +Node9 + + +interrupts_init_timer0 + + + + + +Node8->Node9 + + + + + + + + +Node9->Node10 + + + + + + + + +Node11->Node10 + + + + + + + + +Node12->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.map b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.map new file mode 100644 index 0000000..5b1a62b --- /dev/null +++ b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.md5 b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.md5 new file mode 100644 index 0000000..7640e0c --- /dev/null +++ b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.md5 @@ -0,0 +1 @@ +86dccc366adc7076a9f01ed5c00e3e57 \ No newline at end of file diff --git a/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.svg b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.svg new file mode 100644 index 0000000..c1acb7a --- /dev/null +++ b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +put_unsigned + + +Node1 + + +put_unsigned + + + + + +Node2 + + +_divmod + + + + + +Node1->Node2 + + + + + + + + +Node8 + + +putc + + + + + +Node1->Node8 + + + + + + + + +Node3 + + +kernel_panic + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_halt + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +printf + + + + + +Node3->Node5 + + + + + + + + +Node5->Node1 + + + + + + + + +Node6 + + +put_integers + + + + + +Node5->Node6 + + + + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node5->Node9 + + + + + + + + +Node6->Node1 + + + + + + + + +Node7 + + +put_signed + + + + + +Node6->Node7 + + + + + + + + +Node7->Node1 + + + + + + + + +Node7->Node8 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.map b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.map new file mode 100644 index 0000000..d900121 --- /dev/null +++ b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.md5 b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.md5 new file mode 100644 index 0000000..69f5f0c --- /dev/null +++ b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.md5 @@ -0,0 +1 @@ +5dda247d662314bc458391334538c76c \ No newline at end of file diff --git a/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.svg b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.svg new file mode 100644 index 0000000..53af31c --- /dev/null +++ b/docs/html/printf_8c_ab97c3c9e783c1402d4007ceafdb197c1_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +put_unsigned + + +Node1 + + +put_unsigned + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node15 + + +put_integers + + + + + +Node1->Node15 + + + + + + + + +Node16 + + +put_signed + + + + + +Node1->Node16 + + + + + + + + +Node3 + + +clear + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_main + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +getlines + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +init_message + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node2->Node7 + + + + + + + + +Node12 + + +not_main + + + + + +Node2->Node12 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6->Node4 + + + + + + + + +Node8 + + +_bdiv + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +_divmod + + + + + +Node7->Node9 + + + + + + + + +Node10 + + +_udiv32 + + + + + +Node7->Node10 + + + + + + + + +Node13 + + +kmalloc + + + + + +Node7->Node13 + + + + + + + + +Node14 + + +kmalloc_init + + + + + +Node7->Node14 + + + + + + + + +Node9->Node1 + + + + + + + + +Node11 + + +interrupts_init_timer0 + + + + + +Node10->Node11 + + + + + + + + +Node11->Node12 + + + + + + + + +Node13->Node12 + + + + + + + + +Node14->Node4 + + + + + + + + +Node15->Node2 + + + + + + + + +Node16->Node15 + + + + + + + + diff --git a/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.map b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.map new file mode 100644 index 0000000..86069df --- /dev/null +++ b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.md5 b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.md5 new file mode 100644 index 0000000..8b64f8f --- /dev/null +++ b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.md5 @@ -0,0 +1 @@ +88fe19c2e2ddc7b7ab5bb72cc9221b23 \ No newline at end of file diff --git a/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.svg b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.svg new file mode 100644 index 0000000..ebee36e --- /dev/null +++ b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +put_integers + + +Node1 + + +put_integers + + + + + +Node2 + + +put_signed + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +put_unsigned + + + + + +Node1->Node3 + + + + + + + + +Node2->Node3 + + + + + + + + +Node8 + + +putc + + + + + +Node2->Node8 + + + + + + + + +Node4 + + +_divmod + + + + + +Node3->Node4 + + + + + + + + +Node3->Node8 + + + + + + + + +Node5 + + +kernel_panic + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +kernel_halt + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +printf + + + + + +Node5->Node7 + + + + + + + + +Node7->Node1 + + + + + + + + +Node7->Node3 + + + + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node7->Node9 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.map b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.map new file mode 100644 index 0000000..647698e --- /dev/null +++ b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.md5 b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.md5 new file mode 100644 index 0000000..8f5b4e2 --- /dev/null +++ b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.md5 @@ -0,0 +1 @@ +6b914bc9097a38c6d6f8cc399611adfa \ No newline at end of file diff --git a/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.svg b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.svg new file mode 100644 index 0000000..92c77f5 --- /dev/null +++ b/docs/html/printf_8c_ac3154a3597888cf112e4e7bf6a5f1846_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +put_integers + + +Node1 + + +put_integers + + + + + +Node2 + + +printf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +clear + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +kernel_main + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +getlines + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +init_message + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +kernel_panic + + + + + +Node2->Node7 + + + + + + + + +Node14 + + +not_main + + + + + +Node2->Node14 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6->Node4 + + + + + + + + +Node8 + + +_bdiv + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +_divmod + + + + + +Node7->Node9 + + + + + + + + +Node12 + + +_udiv32 + + + + + +Node7->Node12 + + + + + + + + +Node15 + + +kmalloc + + + + + +Node7->Node15 + + + + + + + + +Node16 + + +kmalloc_init + + + + + +Node7->Node16 + + + + + + + + +Node10 + + +put_unsigned + + + + + +Node9->Node10 + + + + + + + + +Node10->Node1 + + + + + + + + +Node10->Node2 + + + + + + + + +Node11 + + +put_signed + + + + + +Node10->Node11 + + + + + + + + +Node11->Node1 + + + + + + + + +Node13 + + +interrupts_init_timer0 + + + + + +Node12->Node13 + + + + + + + + +Node13->Node14 + + + + + + + + +Node15->Node14 + + + + + + + + +Node16->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.map b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.map new file mode 100644 index 0000000..ef62031 --- /dev/null +++ b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.md5 b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.md5 new file mode 100644 index 0000000..68fcd4e --- /dev/null +++ b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.md5 @@ -0,0 +1 @@ +35fb4121a3d90ab7f8e52488b2749030 \ No newline at end of file diff --git a/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.svg b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.svg new file mode 100644 index 0000000..2eaa970 --- /dev/null +++ b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_cgraph.svg @@ -0,0 +1,75 @@ + + + + + + +_puthexcapital + + +Node1 + + +_puthexcapital + + + + + +Node2 + + +_putunsignedlong + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +_bdiv + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +putc + + + + + +Node2->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.map b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.map new file mode 100644 index 0000000..afd9908 --- /dev/null +++ b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.map @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.md5 b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.md5 new file mode 100644 index 0000000..6e22251 --- /dev/null +++ b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.md5 @@ -0,0 +1 @@ +2fe9cc3358e20a6c317c4c4efb4c5b34 \ No newline at end of file diff --git a/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.svg b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.svg new file mode 100644 index 0000000..6e6980a --- /dev/null +++ b/docs/html/printf_8c_ad22af70967959054d79902aec3721d14_icgraph.svg @@ -0,0 +1,300 @@ + + + + + + +_puthexcapital + + +Node1 + + +_puthexcapital + + + + + +Node2 + + +_putintegers + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node2->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + +Node4 + + +clear + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_main + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +getlines + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +init_message + + + + + +Node3->Node7 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node3->Node8 + + + + + + + + +Node11 + + +not_main + + + + + +Node3->Node11 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node5 + + + + + + + + +Node9 + + +_udiv32 + + + + + +Node8->Node9 + + + + + + + + +Node12 + + +kmalloc + + + + + +Node8->Node12 + + + + + + + + +Node13 + + +kmalloc_init + + + + + +Node8->Node13 + + + + + + + + +Node10 + + +interrupts_init_timer0 + + + + + +Node9->Node10 + + + + + + + + +Node10->Node11 + + + + + + + + +Node12->Node11 + + + + + + + + +Node13->Node5 + + + + + + + + diff --git a/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.map b/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.map new file mode 100644 index 0000000..326a04d --- /dev/null +++ b/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.map @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.md5 b/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.md5 new file mode 100644 index 0000000..69278f4 --- /dev/null +++ b/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.md5 @@ -0,0 +1 @@ +b6bca95a8a0ef2ef1eadb560e6a3c637 \ No newline at end of file diff --git a/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.svg b/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.svg new file mode 100644 index 0000000..f55cefd --- /dev/null +++ b/docs/html/printf_8c_ae10ff3e0a33dd77f3e379af216166829_icgraph.svg @@ -0,0 +1,363 @@ + + + + + + +divmod + + +Node1 + + +divmod + + + + + +Node2 + + +put_unsigned + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node2->Node3 + + + + + + + + +Node15 + + +put_integers + + + + + +Node2->Node15 + + + + + + + + +Node16 + + +put_signed + + + + + +Node2->Node16 + + + + + + + + +Node4 + + +clear + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +kernel_main + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +getlines + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +init_message + + + + + +Node3->Node7 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node3->Node8 + + + + + + + + +Node12 + + +not_main + + + + + +Node3->Node12 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node5 + + + + + + + + +Node9 + + +_bdiv + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +_udiv32 + + + + + +Node8->Node10 + + + + + + + + +Node13 + + +kmalloc + + + + + +Node8->Node13 + + + + + + + + +Node14 + + +kmalloc_init + + + + + +Node8->Node14 + + + + + + + + +Node11 + + +interrupts_init_timer0 + + + + + +Node10->Node11 + + + + + + + + +Node11->Node12 + + + + + + + + +Node13->Node12 + + + + + + + + +Node14->Node5 + + + + + + + + +Node15->Node3 + + + + + + + + +Node16->Node15 + + + + + + + + diff --git a/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.map b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.map new file mode 100644 index 0000000..b2970f4 --- /dev/null +++ b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.md5 b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.md5 new file mode 100644 index 0000000..c2c659d --- /dev/null +++ b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.md5 @@ -0,0 +1 @@ +f89fe57fe8546f1cd28171fbf2daf29e \ No newline at end of file diff --git a/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.svg b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.svg new file mode 100644 index 0000000..8c6cec6 --- /dev/null +++ b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_cgraph.svg @@ -0,0 +1,192 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +_putintegers + + + + + +Node1->Node2 + + + + + + + + +Node6 + + +putc + + + + + +Node1->Node6 + + + + + + + + +Node8 + + +_validate_format_specifier + + + + + +Node1->Node8 + + + + + + + + +Node3 + + +_puthexcapital + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +_putunsignedlong + + + + + +Node2->Node4 + + + + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +_puthexsmall + + + + + +Node2->Node7 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +_bdiv + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node7->Node4 + + + + + + + + diff --git a/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.map b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.map new file mode 100644 index 0000000..3c77594 --- /dev/null +++ b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.md5 b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.md5 new file mode 100644 index 0000000..4384f9a --- /dev/null +++ b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.md5 @@ -0,0 +1 @@ +e2f5bf60ab825f81c701be2084d5cf71 \ No newline at end of file diff --git a/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.svg b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.svg new file mode 100644 index 0000000..13bc3ec --- /dev/null +++ b/docs/html/printf_8c_ae3b4a573e37c0433d9d0384904e35acb_icgraph.svg @@ -0,0 +1,264 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +clear + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +getlines + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +init_message + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +kernel_panic + + + + + +Node1->Node6 + + + + + + + + +Node9 + + +not_main + + + + + +Node1->Node9 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node7 + + +_udiv32 + + + + + +Node6->Node7 + + + + + + + + +Node10 + + +kmalloc + + + + + +Node6->Node10 + + + + + + + + +Node11 + + +kmalloc_init + + + + + +Node6->Node11 + + + + + + + + +Node8 + + +interrupts_init_timer0 + + + + + +Node7->Node8 + + + + + + + + +Node8->Node9 + + + + + + + + +Node10->Node9 + + + + + + + + +Node11->Node3 + + + + + + + + diff --git a/docs/html/printf_8c_source.html b/docs/html/printf_8c_source.html new file mode 100644 index 0000000..5b29c6f --- /dev/null +++ b/docs/html/printf_8c_source.html @@ -0,0 +1,568 @@ + + + + + + + +AstraKernel: src/user/printf.c Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        printf.c
        +
        +
        +Go to the documentation of this file.
        1
        +
        8
        +
        9#include "printf.h"
        +
        10#include "panic.h"
        +
        11
        +
        12#include <stdint.h>
        +
        13#include <stdbool.h>
        +
        14#include <stdarg.h>
        +
        15#include <stddef.h>
        +
        16
        +
        17_Static_assert(sizeof(uint32_t) == 4, "uint32_t must be 4 bytes");
        +
        18
        +
        20// Maybe have a file with the macros?
        +
        21// Memory-mapped I/O registers for UART0 on QEMU versatileAB
        +
        22#define UART0_BASE 0x101F1000
        +
        23#define UART0_DR (*(volatile uint32_t *)UART0_BASE) // Data Register
        +
        24#define UART0_FR (*(volatile uint32_t *)(UART0_BASE + 0x18)) // Flag Register
        +
        25
        +
        26static const uint32_t UART_FR_TXFF = (1U << 5); // Transmit FIFO Full
        +
        27static const uint32_t UART_FR_RXFE = (1U << 4); // Receive FIFO Empty
        +
        28
        +
        +
        34static inline void putc(char c)
        +
        35{
        +
        36 // Wait until UART transmit FIFO is not full
        +
        37 while (UART0_FR & UART_FR_TXFF) {}
        +
        38 UART0_DR = (uint32_t)c;
        +
        39}
        +
        +
        40
        +
        41// TODO: potentially move those functions to math.c/.h
        +
        +
        42unsigned long long _bdiv(unsigned long long dividend, unsigned long long divisor, unsigned long long *remainder)
        +
        43{
        +
        44 // INFO: Currently, this algorithm involves dividing only by 10 and 16. So, division by zero should not be a problem, yet.
        +
        45 // TO-DO: Design a faster division algorithm and ensure that division by zero is not allowed.
        +
        46 if (divisor == 0)
        +
        47 {
        +
        48 kernel_panic("_bdiv: Division by zero");
        +
        49 }
        +
        50 *remainder = 0;
        +
        51 unsigned long long quotient = 0;
        +
        52
        +
        53 for (int i = 63; i >= 0; i--)
        +
        54 {
        +
        55 quotient <<= 1;
        +
        56 *remainder <<= 1;
        +
        57 unsigned long long temp = (unsigned long long)1 << i; // Without this cast, the type is misinterpreted leading to UB
        +
        58 *remainder |= (dividend & temp) >> i;
        +
        59
        +
        60 if (*remainder >= divisor)
        +
        61 {
        +
        62 *remainder -= divisor;
        +
        63 quotient |= 1;
        +
        64 }
        +
        65 }
        +
        66
        +
        67 return quotient;
        +
        68}
        +
        +
        69
        +
        +
        80static unsigned long long _divmod(unsigned long long n, unsigned long long d, unsigned long long *r)
        +
        81{
        +
        82 if (d == 0)
        +
        83 {
        +
        84 kernel_panic("_bdiv: Division by zero");
        +
        85 }
        +
        86
        +
        87 *r = n % d;
        +
        88 return n / d;
        +
        89}
        +
        +
        90
        +
        +
        98static void put_unsigned(unsigned long long num, unsigned base, bool uppercase)
        +
        99{
        +
        100 static const char digits_l[] = "0123456789abcdef";
        +
        101 static const char digits_u[] = "0123456789ABCDEF";
        +
        102 const char *digits = uppercase ? digits_u : digits_l;
        +
        103
        +
        104 char buf[32];
        +
        105 size_t len = 0;
        +
        106
        +
        107 do
        +
        108 {
        +
        109 unsigned long long rem;
        +
        110 num = _divmod(num, base, &rem);
        +
        111 buf[len++] = digits[rem];
        +
        112 } while (num);
        +
        113
        +
        114 while (len--)
        +
        115 {
        +
        116 putc(buf[len]);
        +
        117 }
        +
        118}
        +
        +
        119
        +
        +
        125static inline void put_signed(long long num)
        +
        126{
        +
        127 if (num < 0)
        +
        128 {
        +
        129 putc('-');
        +
        130 num = -num;
        +
        131 }
        +
        132 put_unsigned((unsigned long long)num, 10, false);
        +
        133}
        +
        +
        134
        +
        +
        141static inline void put_integers(char control, const Format_State *restrict fs)
        +
        142{
        +
        143 bool is_long = fs->flags & FMT_LONG;
        +
        144 bool uppercase = fs->flags & FLAG_UPPERCASE;
        +
        145 unsigned long long value = fs->num;
        +
        146
        +
        147 switch (control)
        +
        148 {
        +
        149 case 'u': // unsigned decimal
        +
        150 put_unsigned(value, 10, false);
        +
        151 break;
        +
        152
        +
        153 case 'd':
        +
        154 if(is_long)
        +
        155 {
        +
        156 put_signed((long long)value);
        +
        157 }
        +
        158 else
        +
        159 {
        +
        160 put_signed((long)(uint32_t)value);
        +
        161 }
        +
        162 break;
        +
        163
        +
        164 case 'x': // lowercase hex
        +
        165 case 'X': // uppercase hex
        +
        166 if (uppercase)
        +
        167 {
        +
        168 put_unsigned(value, 16, true);
        +
        169 }
        +
        170 else
        +
        171 {
        +
        172 put_unsigned(value, 16, false);
        +
        173 }
        +
        174 break;
        +
        175
        +
        176 default:
        +
        177 // Optional: add kernel diagnostic for unknown format
        +
        178 break;
        +
        179 }
        +
        180}
        +
        +
        181
        +
        +
        187void puts(const char *s)
        +
        188{
        +
        189 while (*s)
        +
        190 {
        +
        191 putc(*s++);
        +
        192 }
        +
        193}
        +
        +
        194
        +
        +
        205void printf(const char *fmt, ...)
        +
        206{
        +
        207 va_list args;
        +
        208 va_start(args, fmt);
        +
        209
        +
        210 fmt_state_t state = FMT_TEXT;
        +
        211 Format_State fs = {0};
        +
        212
        +
        213 while (*fmt)
        +
        214 {
        +
        215 char c = *fmt++;
        +
        216
        +
        217 switch (state)
        +
        218 {
        +
        219 case FMT_TEXT:
        +
        220 if (c == '%')
        +
        221 {
        +
        222 state = FMT_PERCENT;
        +
        223 }
        +
        224
        +
        225 else
        +
        226 {
        +
        227 putc(c);
        +
        228 }
        +
        229 break;
        +
        230
        +
        231 case FMT_PERCENT:
        +
        232 switch (c)
        +
        233 {
        +
        234 case '%':
        +
        235 putc('%');
        +
        236 state = FMT_TEXT;
        +
        237 break;
        +
        238
        +
        239 case 'l':
        +
        240 fs.flags |= FLAG_LONG;
        +
        241 state = FMT_LONG;
        +
        242 break;
        +
        243
        +
        244 case 'c':
        +
        245 putc((char)va_arg(args, int));
        +
        246 state = FMT_TEXT;
        +
        247 break;
        +
        248
        +
        249 case 's':
        +
        250 {
        +
        251 const char *s = va_arg(args, const char *);
        +
        252 puts(s ? s : "(null)");
        +
        253 state = FMT_TEXT;
        +
        254 break;
        +
        255 }
        +
        256
        +
        257 case 'p':
        +
        258 {
        +
        259 uintptr_t addr = (uintptr_t)va_arg(args, void *);
        +
        260 puts("0x");
        +
        261 put_unsigned(addr, 16, false);
        +
        262 state = FMT_TEXT;
        +
        263 break;
        +
        264 }
        +
        265
        +
        266 case 'd':
        +
        267 case 'u':
        +
        268 case 'x':
        +
        269 case 'X':
        +
        270 {
        +
        271 if (c == 'X')
        +
        272 {
        +
        273 fs.flags |= FLAG_UPPERCASE;
        +
        274 }
        +
        275 fs.num = fs.flags & FLAG_LONG
        +
        276 ? va_arg(args, unsigned long long)
        +
        277 : va_arg(args, unsigned int);
        +
        278
        +
        279 put_integers(c, &fs);
        +
        280 fs.flags = 0; // reset for next
        +
        281 state = FMT_TEXT;
        +
        282 break;
        +
        283 }
        +
        284
        +
        285 default:
        +
        286 // unrecognized specifier
        +
        287 putc('%');
        +
        288 putc(c);
        +
        289 state = FMT_TEXT;
        +
        290 break;
        +
        291 }
        +
        292 break;
        +
        293
        +
        294 case FMT_LONG:
        +
        295 // only handles "%ld" or "%lu" etc.
        +
        296 switch (c)
        +
        297 {
        +
        298 case 'd':
        +
        299 case 'u':
        +
        300 case 'x':
        +
        301 case 'X':
        +
        302 if (c == 'X')
        +
        303 {
        +
        304 fs.flags |= FLAG_UPPERCASE;
        +
        305 }
        +
        306 fs.num = va_arg(args, unsigned long long);
        +
        307 put_integers(c, &fs);
        +
        308 fs.flags = 0;
        +
        309 state = FMT_TEXT;
        +
        310 break;
        +
        311 default:
        +
        312 // fallback if 'l' wasn't followed by known type
        +
        313 putc('%');
        +
        314 putc('l');
        +
        315 putc(c);
        +
        316 state = FMT_TEXT;
        +
        317 break;
        +
        318 }
        +
        319 break;
        +
        320 }
        +
        321 }
        +
        322
        +
        323 va_end(args);
        +
        324}
        +
        +
        325
        +
        +
        331static inline char getc(void)
        +
        332{
        +
        333 // Wait until UART receive FIFO is not empty
        +
        334 while (UART0_FR & UART_FR_RXFE) {}
        +
        335 return (char)(UART0_DR & 0xFF);
        +
        336}
        +
        +
        337
        +
        +
        346void getlines(char *restrict buffer, size_t length)
        +
        347{
        +
        348 long long index = 0;
        +
        349 long long cursor_position = 0;
        +
        350
        +
        351 char character;
        +
        352
        +
        353 uint8_t escape = 0;
        +
        354 uint8_t arrow_keys = 0;
        +
        355
        +
        356 while (index < length - 1)
        +
        357 {
        +
        358 character = getc();
        +
        359
        +
        360 if (character == '\033') // Handle Escape sequences
        +
        361 {
        +
        362 escape = 1;
        +
        363 continue;
        +
        364 }
        +
        365
        +
        366 if (escape)
        +
        367 {
        +
        368 if (escape == 1)
        +
        369 {
        +
        370 arrow_keys = (character == 91);
        +
        371 }
        +
        372 else
        +
        373 {
        +
        374 if (arrow_keys)
        +
        375 {
        +
        376 switch (character)
        +
        377 {
        +
        378 case 'A': // Up
        +
        379 {
        +
        380 break;
        +
        381 }
        +
        382 case 'B': // Down
        +
        383 {
        +
        384 break;
        +
        385 }
        +
        386 case 'C': // Right
        +
        387 {
        +
        388 if (cursor_position < index)
        +
        389 {
        +
        390 puts("\033[C");
        +
        391 cursor_position++;
        +
        392 }
        +
        393 break;
        +
        394 }
        +
        395 case 'D': // Left
        +
        396 {
        +
        397 if (cursor_position - 1 >= 0)
        +
        398 {
        +
        399 puts("\033[D");
        +
        400 cursor_position--;
        +
        401 }
        +
        402 }
        +
        403 default:
        +
        404 {
        +
        405 break;
        +
        406 }
        +
        407 }
        +
        408
        +
        409 arrow_keys = 0;
        +
        410 }
        +
        411 }
        +
        412 escape++;
        +
        413
        +
        414 if (escape == 3) // Escape sequence is 3 characters long
        +
        415 {
        +
        416 escape = 0;
        +
        417 }
        +
        418 continue;
        +
        419 }
        +
        420
        +
        421 if (character == '\r') // Check for carriage return
        +
        422 {
        +
        423 break;
        +
        424 }
        +
        425 if (character == '\b' || character == 0x7F) // Check for backspace
        +
        426 {
        +
        427 if (cursor_position > 0 && index > 0) // Delete char if present
        +
        428 {
        +
        429 long long initial_pos = cursor_position;
        +
        430
        +
        431 for (long long cur = cursor_position - 1; cur < index; cur++) // Shift characters to the left
        +
        432 {
        +
        433 buffer[cur] = buffer[cur + 1];
        +
        434 }
        +
        435
        +
        436 bool cond = (index != initial_pos);
        +
        437
        +
        438 index--;
        +
        439 buffer[index] = '\0';
        +
        440
        +
        441 cursor_position--;
        +
        442
        +
        443 if (cond)
        +
        444 {
        +
        445 printf("\033[%ldC", (index - cursor_position));
        +
        446 }
        +
        447
        +
        448 putc('\b'); // Move cursor back
        +
        449 putc(' '); // Clear the character
        +
        450 putc('\b'); // Move cursor back again
        +
        451
        +
        452 if (cond)
        +
        453 {
        +
        454 printf("\033[%ldD", index - cursor_position); // Analogous to the above putc sequence, but for multiple characters
        +
        455 printf("%s", buffer + cursor_position);
        +
        456 printf("\033[%ldD", index - cursor_position);
        +
        457 }
        +
        458 }
        +
        459 }
        +
        460 else
        +
        461 {
        +
        462 putc(character); // Echo the character back
        +
        463
        +
        464 long long initial_pos = cursor_position;
        +
        465
        +
        466 for (long long cur = index; cur >= cursor_position; cur--) // Shift characters to the right
        +
        467 {
        +
        468 buffer[cur + 1] = buffer[cur];
        +
        469 }
        +
        470
        +
        471 buffer[cursor_position] = character; // Store the character in the buffer
        +
        472
        +
        473 if (index != initial_pos)
        +
        474 {
        +
        475 puts(buffer + cursor_position + 1);
        +
        476 printf("\033[%ldD", index - initial_pos);
        +
        477 }
        +
        478
        +
        479 cursor_position++;
        +
        480 index++;
        +
        481 }
        +
        482 }
        +
        483 buffer[index] = '\0'; // Null-terminate the string
        +
        484}
        +
        +
        void kernel_panic(const char *message)
        Print a panic message and halt the CPU.
        Definition panic.c:45
        +
        Kernel panic and halt routines.
        +
        void printf(const char *fmt,...)
        Kernel printf implementation using UART output.
        Definition printf.c:205
        +
        static char getc(void)
        Blocking UART character input.
        Definition printf.c:331
        +
        void puts(const char *s)
        Transmit a null-terminated string.
        Definition printf.c:187
        +
        static void put_signed(long long num)
        Print a signed integer in decimal form.
        Definition printf.c:125
        +
        #define UART0_DR
        Definition printf.c:23
        +
        static const uint32_t UART_FR_TXFF
        Definition printf.c:26
        +
        unsigned long long _bdiv(unsigned long long dividend, unsigned long long divisor, unsigned long long *remainder)
        Definition printf.c:42
        +
        void getlines(char *restrict buffer, size_t length)
        Read a line of text from UART with basic editing support.
        Definition printf.c:346
        +
        #define UART0_FR
        Definition printf.c:24
        +
        static unsigned long long _divmod(unsigned long long n, unsigned long long d, unsigned long long *r)
        Perform division and return quotient and remainder.
        Definition printf.c:80
        +
        static void putc(char c)
        Send a single character over UART, waiting if the FIFO is full.
        Definition printf.c:34
        +
        static void put_unsigned(unsigned long long num, unsigned base, bool uppercase)
        Print an unsigned integer in the given base.
        Definition printf.c:98
        +
        static void put_integers(char control, const Format_State *restrict fs)
        Format and print an integer based on format control.
        Definition printf.c:141
        +
        static const uint32_t UART_FR_RXFE
        Definition printf.c:27
        +
        Minimal kernel printf/puts/getlines interface for freestanding systems.
        +
        @ FLAG_LONG
        'l' length modifier (long / long long).
        Definition printf.h:38
        +
        @ FLAG_UPPERCASE
        Uppercase hex digits (for X).
        Definition printf.h:41
        +
        fmt_state_t
        Finite-state machine for parsing format strings.
        Definition printf.h:28
        +
        @ FMT_LONG
        After encountering '%l'.
        Definition printf.h:31
        +
        @ FMT_PERCENT
        After encountering '%'.
        Definition printf.h:30
        +
        @ FMT_TEXT
        Normal character output.
        Definition printf.h:29
        +
        Stores the current numeric value and formatting flags.
        Definition printf.h:51
        +
        unsigned long long num
        The numeric value to be printed.
        Definition printf.h:52
        +
        uint8_t flags
        Bitmask of FLAG_* constants describing format.
        Definition printf.h:53
        +
        +
        +
        + + + + diff --git a/docs/html/printf_8h.html b/docs/html/printf_8h.html new file mode 100644 index 0000000..6e7e0ad --- /dev/null +++ b/docs/html/printf_8h.html @@ -0,0 +1,382 @@ + + + + + + + +AstraKernel: include/printf.h File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        printf.h File Reference
        +
        +
        + +

        Minimal kernel printf/puts/getlines interface for freestanding systems. +More...

        +
        #include <stdarg.h>
        +#include <stddef.h>
        +#include <stdbool.h>
        +#include <stdint.h>
        +
        +Include dependency graph for printf.h:
        +
        +
        +
        +
        +This graph shows which files directly or indirectly include this file:
        +
        +
        +
        +
        +

        Go to the source code of this file.

        + + + + +

        +Classes

        struct  Format_State
         Stores the current numeric value and formatting flags. More...
        + + + + + +

        +Enumerations

        enum  fmt_state_t { FMT_TEXT +, FMT_PERCENT +, FMT_LONG + }
         Finite-state machine for parsing format strings. More...
        enum  { FLAG_LONG = 1 << 0 +, FLAG_UNSIGNED = 1 << 1 +, FLAG_HEX = 1 << 2 +, FLAG_UPPERCASE = 1 << 3 + }
         Bit flags controlling number formatting. More...
        + + + + + + + +

        +Functions

        void puts (const char *s)
         Prints a null-terminated string over UART.
        void printf (const char *fmt,...)
         Prints a formatted string to the UART output.
        void getlines (char *restrict buffer, size_t length)
         Reads a line of text from UART into the given buffer.
        +

        Detailed Description

        +

        Minimal kernel printf/puts/getlines interface for freestanding systems.

        +

        This header defines the kernel's text I/O functions and the internal formatting structures used by the printf subsystem.

        +

        The implementation targets bare-metal systems using memory-mapped UART output, and is fully freestanding (no libc dependencies).

        + +

        Definition in file printf.h.

        +

        Enumeration Type Documentation

        + +

        ◆ anonymous enum

        + +
        +
        + + + + +
        anonymous enum
        +
        + +

        Bit flags controlling number formatting.

        + + + + + +
        Enumerator
        FLAG_LONG 

        'l' length modifier (long / long long).

        +
        FLAG_UNSIGNED 

        Future use: unsigned type hint.

        +
        FLAG_HEX 

        Future use: hexadecimal output flag.

        +
        FLAG_UPPERCASE 

        Uppercase hex digits (for X).

        +
        + +

        Definition at line 37 of file printf.h.

        + +
        +
        + +

        ◆ fmt_state_t

        + +
        +
        + + + + +
        enum fmt_state_t
        +
        + +

        Finite-state machine for parsing format strings.

        +

        The printf parser moves between these states as it consumes characters.

        + + + + +
        Enumerator
        FMT_TEXT 

        Normal character output.

        +
        FMT_PERCENT 

        After encountering '%'.

        +
        FMT_LONG 

        After encountering '%l'.

        +
        + +

        Definition at line 28 of file printf.h.

        + +
        +
        +

        Function Documentation

        + +

        ◆ getlines()

        + +
        +
        + + + + + + + + + + + +
        void getlines (char *restrict buffer,
        size_t length )
        +
        + +

        Reads a line of text from UART into the given buffer.

        +
        Parameters
        + + + +
        bufferDestination buffer.
        lengthMaximum buffer length (including null terminator).
        +
        +
        +

        Blocks until a newline or carriage return is received. Supports backspace editing and echoes input characters.

        +

        Reads a line of text from UART into the given buffer.

        +
        Parameters
        + + + +
        bufferDestination buffer for the input line.
        lengthMaximum number of bytes to store (including '\0').
        +
        +
        +

        Handles backspace and carriage return.

        + +

        Definition at line 346 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ printf()

        + +
        +
        + + + + + + + + + + + +
        void printf (const char * fmt,
        ... )
        +
        + +

        Prints a formatted string to the UART output.

        +
        Parameters
        + + + +
        fmtFormat string (supports c, s, d, u, x, X, p, %%).
        ...Variable arguments matching the format specifiers.
        +
        +
        +

        This function supports a minimal subset of standard C printf:

          +
        • Signed/unsigned integers (d, u)
        • +
        • Hexadecimal (x, X)
        • +
        • Pointers (p)
        • +
        • Characters (c)
        • +
        • Strings (s)
        • +
        • Length modifier (l)
        • +
        +

        Prints a formatted string to the UART output.

        +
        Parameters
        + + + +
        fmtFormat string.
        ...Variable arguments for the format string.
        +
        +
        +

        Implements a minimal printf supporting:

          +
        • c, s, p, d, u, x, X, l modifiers
        • +
        • %%
        • +
        + +

        Definition at line 205 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ puts()

        + +
        +
        + + + + + + + +
        void puts (const char * s)
        +
        + +

        Prints a null-terminated string over UART.

        +
        Parameters
        + + +
        sThe string to output. If NULL, no output occurs.
        +
        +
        +

        Prints a null-terminated string over UART.

        +
        Parameters
        + + +
        sString to transmit. Must be non-null.
        +
        +
        + +

        Definition at line 187 of file printf.c.

        +
        +Here is the call graph for this function:
        +
        +
        +
        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/printf_8h.js b/docs/html/printf_8h.js new file mode 100644 index 0000000..69d9492 --- /dev/null +++ b/docs/html/printf_8h.js @@ -0,0 +1,12 @@ +var printf_8h = +[ + [ "Format_State", "struct_format___state.html", "struct_format___state" ], + [ "fmt_state_t", "printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4", [ + [ "FMT_TEXT", "printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4af800661ffd277611eab389279f927862", null ], + [ "FMT_PERCENT", "printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a3bc5680c539dfa2bdfab45834b0f8b26", null ], + [ "FMT_LONG", "printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a254aa61e900a06ab00f4a0c5a7d7e246", null ] + ] ], + [ "getlines", "printf_8h.html#a7880ed31ba841d890680635d6b83fcb7", null ], + [ "printf", "printf_8h.html#a0aff7311d684a0e0ef33125616a73385", null ], + [ "puts", "printf_8h.html#a299d0f9cb9e7b14e1278a4ed21e4d76f", null ] +]; \ No newline at end of file diff --git a/docs/html/printf_8h__dep__incl.map b/docs/html/printf_8h__dep__incl.map new file mode 100644 index 0000000..076600a --- /dev/null +++ b/docs/html/printf_8h__dep__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/html/printf_8h__dep__incl.md5 b/docs/html/printf_8h__dep__incl.md5 new file mode 100644 index 0000000..1995215 --- /dev/null +++ b/docs/html/printf_8h__dep__incl.md5 @@ -0,0 +1 @@ +beb34c6902b640cc836702804b2a0055 \ No newline at end of file diff --git a/docs/html/printf_8h__dep__incl.svg b/docs/html/printf_8h__dep__incl.svg new file mode 100644 index 0000000..0f97ad0 --- /dev/null +++ b/docs/html/printf_8h__dep__incl.svg @@ -0,0 +1,111 @@ + + + + + + +include/printf.h + + +Node1 + + +include/printf.h + + + + + +Node2 + + +src/kernel/kernel.c + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/kernel/memory.c + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +src/kernel/panic.c + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/user/clear.c + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +src/user/printf.c + + + + + +Node1->Node6 + + + + + + + + diff --git a/docs/html/printf_8h__incl.map b/docs/html/printf_8h__incl.map new file mode 100644 index 0000000..a20083e --- /dev/null +++ b/docs/html/printf_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/printf_8h__incl.md5 b/docs/html/printf_8h__incl.md5 new file mode 100644 index 0000000..ff204b1 --- /dev/null +++ b/docs/html/printf_8h__incl.md5 @@ -0,0 +1 @@ +843beefbad4f3150e0469659da72d5b2 \ No newline at end of file diff --git a/docs/html/printf_8h__incl.svg b/docs/html/printf_8h__incl.svg new file mode 100644 index 0000000..32a8c48 --- /dev/null +++ b/docs/html/printf_8h__incl.svg @@ -0,0 +1,93 @@ + + + + + + +include/printf.h + + +Node1 + + +include/printf.h + + + + + +Node2 + + +stdarg.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stddef.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +stdbool.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node1->Node5 + + + + + + + + diff --git a/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.map b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.map new file mode 100644 index 0000000..409bda6 --- /dev/null +++ b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.md5 b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.md5 new file mode 100644 index 0000000..9a69737 --- /dev/null +++ b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.md5 @@ -0,0 +1 @@ +bf45da2de7ef2e5834acf4ea3346928c \ No newline at end of file diff --git a/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.svg b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.svg new file mode 100644 index 0000000..b4d2c56 --- /dev/null +++ b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_cgraph.svg @@ -0,0 +1,219 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node2 + + +put_integers + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +put_unsigned + + + + + +Node1->Node4 + + + + + + + + +Node8 + + +putc + + + + + +Node1->Node8 + + + + + + + + +Node9 + + +puts + + + + + +Node1->Node9 + + + + + + + + +Node3 + + +put_signed + + + + + +Node2->Node3 + + + + + + + + +Node2->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + +Node3->Node8 + + + + + + + + +Node5 + + +_divmod + + + + + +Node4->Node5 + + + + + + + + +Node4->Node8 + + + + + + + + +Node6 + + +kernel_panic + + + + + +Node5->Node6 + + + + + + + + +Node6->Node1 + + + + + + + + +Node7 + + +kernel_halt + + + + + +Node6->Node7 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.map b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.map new file mode 100644 index 0000000..bd52bd6 --- /dev/null +++ b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.md5 b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.md5 new file mode 100644 index 0000000..21d006d --- /dev/null +++ b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.md5 @@ -0,0 +1 @@ +04f5d2ef7418420c11e80944ac58abd9 \ No newline at end of file diff --git a/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.svg b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.svg new file mode 100644 index 0000000..d69e22e --- /dev/null +++ b/docs/html/printf_8h_a0aff7311d684a0e0ef33125616a73385_icgraph.svg @@ -0,0 +1,372 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node2 + + +clear + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +getlines + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +init_message + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +kernel_panic + + + + + +Node1->Node6 + + + + + + + + +Node14 + + +not_main + + + + + +Node1->Node14 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node7 + + +_bdiv + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +_divmod + + + + + +Node6->Node8 + + + + + + + + +Node12 + + +_udiv32 + + + + + +Node6->Node12 + + + + + + + + +Node15 + + +kmalloc + + + + + +Node6->Node15 + + + + + + + + +Node16 + + +kmalloc_init + + + + + +Node6->Node16 + + + + + + + + +Node9 + + +put_unsigned + + + + + +Node8->Node9 + + + + + + + + +Node9->Node1 + + + + + + + + +Node10 + + +put_integers + + + + + +Node9->Node10 + + + + + + + + +Node11 + + +put_signed + + + + + +Node9->Node11 + + + + + + + + +Node10->Node1 + + + + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +interrupts_init_timer0 + + + + + +Node12->Node13 + + + + + + + + +Node13->Node14 + + + + + + + + +Node15->Node14 + + + + + + + + +Node16->Node3 + + + + + + + + diff --git a/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.map b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.map new file mode 100644 index 0000000..62e100f --- /dev/null +++ b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.md5 b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.md5 new file mode 100644 index 0000000..75bf877 --- /dev/null +++ b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.md5 @@ -0,0 +1 @@ +47138a757bd35bcca1cad71be4577798 \ No newline at end of file diff --git a/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.svg b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.svg new file mode 100644 index 0000000..0ff8406 --- /dev/null +++ b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +puts + + +Node1 + + +puts + + + + + +Node2 + + +putc + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.map b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.map new file mode 100644 index 0000000..98ee30b --- /dev/null +++ b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.map @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.md5 b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.md5 new file mode 100644 index 0000000..725d104 --- /dev/null +++ b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.md5 @@ -0,0 +1 @@ +1da8d28741d83e0f12eb014c4b46d8ee \ No newline at end of file diff --git a/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.svg b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.svg new file mode 100644 index 0000000..4b116e7 --- /dev/null +++ b/docs/html/printf_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f_icgraph.svg @@ -0,0 +1,444 @@ + + + + + + +puts + + +Node1 + + +puts + + + + + +Node2 + + +getlines + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +init_message + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +irq_sanity_check + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +kmalloc_init + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +not_main + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +printf + + + + + +Node1->Node8 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node6->Node3 + + + + + + + + +Node8->Node2 + + + + + + + + +Node8->Node3 + + + + + + + + +Node8->Node4 + + + + + + + + +Node8->Node7 + + + + + + + + +Node9 + + +clear + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +kernel_panic + + + + + +Node8->Node10 + + + + + + + + +Node9->Node3 + + + + + + + + +Node10->Node6 + + + + + + + + +Node11 + + +_bdiv + + + + + +Node10->Node11 + + + + + + + + +Node12 + + +_divmod + + + + + +Node10->Node12 + + + + + + + + +Node16 + + +_udiv32 + + + + + +Node10->Node16 + + + + + + + + +Node18 + + +kmalloc + + + + + +Node10->Node18 + + + + + + + + +Node13 + + +put_unsigned + + + + + +Node12->Node13 + + + + + + + + +Node13->Node8 + + + + + + + + +Node14 + + +put_integers + + + + + +Node13->Node14 + + + + + + + + +Node15 + + +put_signed + + + + + +Node13->Node15 + + + + + + + + +Node14->Node8 + + + + + + + + +Node15->Node14 + + + + + + + + +Node17 + + +interrupts_init_timer0 + + + + + +Node16->Node17 + + + + + + + + +Node17->Node7 + + + + + + + + +Node18->Node7 + + + + + + + + diff --git a/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.map b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.map new file mode 100644 index 0000000..23f0747 --- /dev/null +++ b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.map @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.md5 b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.md5 new file mode 100644 index 0000000..200244f --- /dev/null +++ b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.md5 @@ -0,0 +1 @@ +68375179bf8ac52991fac980f56eb96c \ No newline at end of file diff --git a/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.svg b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.svg new file mode 100644 index 0000000..140ab8c --- /dev/null +++ b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_cgraph.svg @@ -0,0 +1,273 @@ + + + + + + +getlines + + +Node1 + + +getlines + + + + + +Node2 + + +getc + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +printf + + + + + +Node1->Node3 + + + + + + + + +Node10 + + +putc + + + + + +Node1->Node10 + + + + + + + + +Node11 + + +puts + + + + + +Node1->Node11 + + + + + + + + +Node4 + + +put_integers + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +put_unsigned + + + + + +Node3->Node6 + + + + + + + + +Node3->Node10 + + + + + + + + +Node3->Node11 + + + + + + + + +Node5 + + +put_signed + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node5->Node6 + + + + + + + + +Node5->Node10 + + + + + + + + +Node7 + + +_divmod + + + + + +Node6->Node7 + + + + + + + + +Node6->Node10 + + + + + + + + +Node8 + + +kernel_panic + + + + + +Node7->Node8 + + + + + + + + +Node8->Node3 + + + + + + + + +Node9 + + +kernel_halt + + + + + +Node8->Node9 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.map b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.map new file mode 100644 index 0000000..34496bd --- /dev/null +++ b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.md5 b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.md5 new file mode 100644 index 0000000..f9a099e --- /dev/null +++ b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.md5 @@ -0,0 +1 @@ +18cfb8093e0eb059c3283a6d530257f3 \ No newline at end of file diff --git a/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.svg b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.svg new file mode 100644 index 0000000..9631b2f --- /dev/null +++ b/docs/html/printf_8h_a7880ed31ba841d890680635d6b83fcb7_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +getlines + + +Node1 + + +getlines + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.map b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.map new file mode 100644 index 0000000..b2970f4 --- /dev/null +++ b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.md5 b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.md5 new file mode 100644 index 0000000..c2c659d --- /dev/null +++ b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.md5 @@ -0,0 +1 @@ +f89fe57fe8546f1cd28171fbf2daf29e \ No newline at end of file diff --git a/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.svg b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.svg new file mode 100644 index 0000000..8c6cec6 --- /dev/null +++ b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_cgraph.svg @@ -0,0 +1,192 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +_putintegers + + + + + +Node1->Node2 + + + + + + + + +Node6 + + +putc + + + + + +Node1->Node6 + + + + + + + + +Node8 + + +_validate_format_specifier + + + + + +Node1->Node8 + + + + + + + + +Node3 + + +_puthexcapital + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +_putunsignedlong + + + + + +Node2->Node4 + + + + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +_puthexsmall + + + + + +Node2->Node7 + + + + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +_bdiv + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node7->Node4 + + + + + + + + diff --git a/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.map b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.map new file mode 100644 index 0000000..3c77594 --- /dev/null +++ b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.md5 b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.md5 new file mode 100644 index 0000000..4384f9a --- /dev/null +++ b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.md5 @@ -0,0 +1 @@ +e2f5bf60ab825f81c701be2084d5cf71 \ No newline at end of file diff --git a/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.svg b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.svg new file mode 100644 index 0000000..13bc3ec --- /dev/null +++ b/docs/html/printf_8h_ae3b4a573e37c0433d9d0384904e35acb_icgraph.svg @@ -0,0 +1,264 @@ + + + + + + +printf + + +Node1 + + +printf + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +clear + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +kernel_main + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +getlines + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +init_message + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +kernel_panic + + + + + +Node1->Node6 + + + + + + + + +Node9 + + +not_main + + + + + +Node1->Node9 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node7 + + +_udiv32 + + + + + +Node6->Node7 + + + + + + + + +Node10 + + +kmalloc + + + + + +Node6->Node10 + + + + + + + + +Node11 + + +kmalloc_init + + + + + +Node6->Node11 + + + + + + + + +Node8 + + +interrupts_init_timer0 + + + + + +Node7->Node8 + + + + + + + + +Node8->Node9 + + + + + + + + +Node10->Node9 + + + + + + + + +Node11->Node3 + + + + + + + + diff --git a/docs/html/printf_8h_source.html b/docs/html/printf_8h_source.html new file mode 100644 index 0000000..b66c295 --- /dev/null +++ b/docs/html/printf_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +AstraKernel: include/printf.h Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        printf.h
        +
        +
        +Go to the documentation of this file.
        1
        +
        11#pragma once
        +
        12
        +
        13#include <stdarg.h>
        +
        14#include <stddef.h>
        +
        15#include <stdbool.h>
        +
        16#include <stdint.h>
        +
        17
        +
        18#ifdef __cplusplus
        +
        19extern "C" {
        +
        20#endif
        +
        21
        +
        +
        28 typedef enum {
        + + + + +
        +
        33
        +
        37 enum {
        +
        38 FLAG_LONG = 1 << 0,
        +
        39 FLAG_UNSIGNED = 1 << 1,
        +
        40 FLAG_HEX = 1 << 2,
        + +
        42 };
        +
        43
        +
        +
        51 typedef struct {
        +
        52 unsigned long long num;
        +
        53 uint8_t flags;
        + +
        +
        55
        +
        61 void puts(const char *s);
        +
        62
        +
        77 void printf(const char *fmt, ...);
        +
        78
        +
        88 void getlines(char *restrict buffer, size_t length);
        +
        89
        +
        90#ifdef __cplusplus
        +
        91}
        +
        92#endif
        +
        void printf(const char *fmt,...)
        Prints a formatted string to the UART output.
        Definition printf.c:205
        +
        void puts(const char *s)
        Prints a null-terminated string over UART.
        Definition printf.c:187
        +
        @ FLAG_HEX
        Future use: hexadecimal output flag.
        Definition printf.h:40
        +
        @ FLAG_UNSIGNED
        Future use: unsigned type hint.
        Definition printf.h:39
        +
        @ FLAG_LONG
        'l' length modifier (long / long long).
        Definition printf.h:38
        +
        @ FLAG_UPPERCASE
        Uppercase hex digits (for X).
        Definition printf.h:41
        +
        fmt_state_t
        Finite-state machine for parsing format strings.
        Definition printf.h:28
        +
        @ FMT_LONG
        After encountering '%l'.
        Definition printf.h:31
        +
        @ FMT_PERCENT
        After encountering '%'.
        Definition printf.h:30
        +
        @ FMT_TEXT
        Normal character output.
        Definition printf.h:29
        +
        void getlines(char *restrict buffer, size_t length)
        Reads a line of text from UART into the given buffer.
        Definition printf.c:346
        +
        Stores the current numeric value and formatting flags.
        Definition printf.h:51
        +
        unsigned long long num
        The numeric value to be printed.
        Definition printf.h:52
        +
        uint8_t flags
        Bitmask of FLAG_* constants describing format.
        Definition printf.h:53
        +
        +
        +
        + + + + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..30f9af4 --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['_5f_5fheap_5fend_5f_5f_0',['__heap_end__',['../kernel_8c.html#a5f674bc040d9a9407ca7193054c8e974',1,'kernel.c']]], + ['_5f_5fheap_5fsize_5f_5f_1',['__heap_size__',['../kernel_8c.html#a0c86500a0535afeb0b92fb3955181545',1,'kernel.c']]], + ['_5f_5fheap_5fstart_5f_5f_2',['__heap_start__',['../kernel_8c.html#adcb1118ba48adbd37101ffae162e00bd',1,'kernel.c']]], + ['_5fbdiv_3',['_bdiv',['../printf_8c.html#a694b6d27273027eb96424e52b798c391',1,'printf.c']]], + ['_5fdivmod_4',['_divmod',['../printf_8c.html#a96a30e819fcbfa9a0251f71f14ff79bc',1,'printf.c']]], + ['_5fudiv32_5',['_udiv32',['../math_8h.html#a97fbf4adb8a31d415775bdbd5c30c468',1,'math.h']]] +]; diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..dbc4174 --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['a_20minimal_20arm_20kernel_20for_20qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['align_5fup_5fuintptr_1',['align_up_uintptr',['../memory_8c.html#a4742e575dd722d9e1d926ab578f02c9f',1,'memory.c']]], + ['and_20configuration_2',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]], + ['arm_20kernel_20for_20qemu_3',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['astrakernel_20a_20minimal_20arm_20kernel_20for_20qemu_4',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]] +]; diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js new file mode 100644 index 0000000..b95386b --- /dev/null +++ b/docs/html/search/all_10.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['sanity_5fcheck_0',['SANITY_CHECK',['../kernel_8c.html#acb05d8656987be634f8bd20154d84eb8',1,'kernel.c']]], + ['seconds_5fin_5fday_1',['SECONDS_IN_DAY',['../datetime_8c.html#ab8e2596e9eb4c7f02aa52caa4c07ff90',1,'datetime.c']]], + ['seconds_5fin_5fmonth_2',['SECONDS_IN_MONTH',['../datetime_8c.html#abc6b438d643dc4b10ef34d427e92d213',1,'datetime.c']]], + ['seconds_5fin_5fyear_3',['SECONDS_IN_YEAR',['../datetime_8c.html#a599d171dc6323cb2705efd42dc2e0add',1,'datetime.c']]], + ['secs_4',['secs',['../structtimeval.html#a6298d86d865364801b3c1a976661bab8',1,'timeval']]], + ['so_20far_5',['Features so far',['../index.html#autotoc_md5',1,'']]], + ['start_2es_6',['start.s',['../start_8s.html',1,'']]], + ['strcmp_7',['strcmp',['../string_8c.html#a49735c99bf645cfa53f5c5c98a7ceea7',1,'strcmp(const char *str_1, const char *str_2): string.c'],['../string_8h.html#a49735c99bf645cfa53f5c5c98a7ceea7',1,'strcmp(const char *str_1, const char *str_2): string.c']]], + ['string_2ec_8',['string.c',['../string_8c.html',1,'']]], + ['string_2eh_9',['string.h',['../string_8h.html',1,'']]], + ['strlen_10',['strlen',['../string_8c.html#a008e171a518fe0e0352f31b245e03875',1,'strlen(const char *str): string.c'],['../string_8h.html#a008e171a518fe0e0352f31b245e03875',1,'strlen(const char *str): string.c']]], + ['subsystem_11',['Kernel Panic Subsystem',['../md_docs_2pages_2panic.html',1,'']]], + ['systicks_12',['systicks',['../interrupt_8c.html#aef55475e4484403d59e8e19b4ec43ad4',1,'systicks: interrupt.c'],['../kernel_8c.html#aef55475e4484403d59e8e19b4ec43ad4',1,'systicks: interrupt.c']]] +]; diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js new file mode 100644 index 0000000..a5a4ada --- /dev/null +++ b/docs/html/search/all_11.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['t01_5fbase_0',['T01_BASE',['../interrupt_8h.html#ad3725493cd92ce709967d46dff203c53',1,'interrupt.h']]], + ['t0_5fcontrol_1',['T0_CONTROL',['../interrupt_8h.html#aaccf6b96ba3b742c6bda83b3eb59e419',1,'interrupt.h']]], + ['t0_5fintclr_2',['T0_INTCLR',['../interrupt_8h.html#ae2e3c97a8b35d12b57b0ee7f07dbac79',1,'interrupt.h']]], + ['t0_5fload_3',['T0_LOAD',['../interrupt_8h.html#a24e819c57eeb7a925f1c6526e19fc0a6',1,'interrupt.h']]], + ['t0_5fmis_4',['T0_MIS',['../interrupt_8h.html#acc5acea895618d5b1d4a94daaf34c372',1,'interrupt.h']]], + ['t0_5fvalue_5',['T0_VALUE',['../interrupt_8h.html#a09661a92c1ee93307f89d0bf5d056cf1',1,'interrupt.h']]], + ['target_20platform_20and_20configuration_6',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]], + ['tctrl_5f32bit_7',['TCTRL_32BIT',['../interrupt_8h.html#a8c90f5c03791fbd20caf094c1c238d3e',1,'interrupt.h']]], + ['tctrl_5fenable_8',['TCTRL_ENABLE',['../interrupt_8h.html#a0ae1e8b399502d25a8a5bf23479a8453',1,'interrupt.h']]], + ['tctrl_5finten_9',['TCTRL_INTEN',['../interrupt_8h.html#a2cadbad73a0a0951e5da8b3abef68939',1,'interrupt.h']]], + ['tctrl_5fperiodic_10',['TCTRL_PERIODIC',['../interrupt_8h.html#a55d19d2e3a269142eb991a3c93b9d650',1,'interrupt.h']]], + ['timer0_5fstart_5fperiodic_11',['timer0_start_periodic',['../interrupt_8h.html#a6b1cda18aba744c0a2580c0833a96d9d',1,'interrupt.h']]], + ['timer_5ftick_5ftest_12',['TIMER_TICK_TEST',['../kernel_8c.html#abee0a0a40ba8a0eb2af7112f7b2b0c95',1,'kernel.c']]], + ['timeval_13',['timeval',['../structtimeval.html',1,'']]], + ['todo_20list_14',['Todo List',['../todo.html',1,'']]] +]; diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js new file mode 100644 index 0000000..9b1a533 --- /dev/null +++ b/docs/html/search/all_12.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['uart0_5fbase_0',['UART0_BASE',['../printf_8c.html#a7a07348b4332ff6b88abf6092347deba',1,'printf.c']]], + ['uart0_5fdr_1',['UART0_DR',['../printf_8c.html#a4bd8785a1ac7d8be53153ec3e2f5afa4',1,'printf.c']]], + ['uart0_5ffr_2',['UART0_FR',['../printf_8c.html#a8838537812346e09a66edf94c0c9ffe9',1,'printf.c']]], + ['uart_5ffr_5frxfe_3',['UART_FR_RXFE',['../printf_8c.html#ae3aa13fe253ec6af67a7bbb2509081d9',1,'printf.c']]], + ['uart_5ffr_5ftxff_4',['UART_FR_TXFF',['../printf_8c.html#a6882f9f402227d0d57eb685890f6ac58',1,'printf.c']]] +]; diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js new file mode 100644 index 0000000..dd2e260 --- /dev/null +++ b/docs/html/search/all_13.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['vic_5fbase_0',['VIC_BASE',['../interrupt_8h.html#a20d127cee2705b7e0b86585d131c2380',1,'interrupt.h']]], + ['vic_5fdefvectaddr_1',['VIC_DEFVECTADDR',['../interrupt_8h.html#ae9cc6c8999966c69d2a21bc3884397a3',1,'interrupt.h']]], + ['vic_5fenable_5ftimer01_5firq_2',['vic_enable_timer01_irq',['../interrupt_8h.html#a18b76150ed04c0d5d19456bf30970fdd',1,'interrupt.h']]], + ['vic_5fintenable_3',['VIC_INTENABLE',['../interrupt_8h.html#a0b1ee4a77609e8163ad74cbe81c98213',1,'interrupt.h']]], + ['vic_5fintenclr_4',['VIC_INTENCLR',['../interrupt_8h.html#a195648e4e688b672df29f6fa94aabf35',1,'interrupt.h']]], + ['vic_5fintselect_5',['VIC_INTSELECT',['../interrupt_8h.html#a595c2bd198349dbf4a8f4fe07771b474',1,'interrupt.h']]], + ['vic_5firqstatus_6',['VIC_IRQSTATUS',['../interrupt_8h.html#a810f60f080c753e160afd81d479d8944',1,'interrupt.h']]], + ['vic_5fsoft_5fint_7',['VIC_SOFT_INT',['../interrupt_8h.html#a75ec9a495c5185a396cd68dca2460edf',1,'interrupt.h']]], + ['vic_5fsoft_5fintclr_8',['VIC_SOFT_INTCLR',['../interrupt_8h.html#aa5a73a9343ad968ee5a1640dc01b66de',1,'interrupt.h']]], + ['vic_5fvectaddr_9',['VIC_VECTADDR',['../interrupt_8h.html#ae718b3209b4779204ab625ec050d88dc',1,'interrupt.h']]] +]; diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js new file mode 100644 index 0000000..19721a1 --- /dev/null +++ b/docs/html/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['year_0',['year',['../structdateval.html#ab84a06feb804ed04520b2355b364daea',1,'dateval']]] +]; diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..3100bf6 --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['banner_0',['banner',['../kernel_8c.html#a0f1ac68e65e509326c6790f5c76da0b9',1,'kernel.c']]], + ['build_1',['Build',['../index.html#autotoc_md8',1,'Docker Build'],['../index.html#autotoc_md7',1,'Native Build']]], + ['building_2',['Building',['../index.html#autotoc_md6',1,'']]] +]; diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js new file mode 100644 index 0000000..b91e1c7 --- /dev/null +++ b/docs/html/search/all_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['call_5fsvc_5f0_0',['CALL_SVC_0',['../kernel_8c.html#abf99406c50fd43ebcb9e3e6f6f843e2a',1,'kernel.c']]], + ['clear_1',['clear',['../clear_8c.html#ae683fe63c33c388e9ba1c6392dd477eb',1,'clear(void): clear.c'],['../clear_8h.html#ae683fe63c33c388e9ba1c6392dd477eb',1,'clear(void): clear.c']]], + ['clear_2ec_2',['clear.c',['../clear_8c.html',1,'']]], + ['clear_2eh_3',['clear.h',['../clear_8h.html',1,'']]], + ['configuration_4',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]] +]; diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js new file mode 100644 index 0000000..c9f9428 --- /dev/null +++ b/docs/html/search/all_4.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['datetime_2ec_0',['datetime.c',['../datetime_8c.html',1,'']]], + ['datetime_2eh_1',['datetime.h',['../datetime_8h.html',1,'']]], + ['dateval_2',['dateval',['../structdateval.html',1,'']]], + ['day_3',['day',['../structdateval.html#ac90484ba884dbc4d453976120a111c76',1,'dateval']]], + ['design_4',['Design',['../md_docs_2pages_2panic.html#autotoc_md1',1,'']]], + ['disclaimer_5',['Disclaimer',['../index.html#autotoc_md10',1,'']]], + ['docker_20build_6',['Docker Build',['../index.html#autotoc_md8',1,'']]], + ['documentation_7',['Documentation',['../index.html#autotoc_md9',1,'']]] +]; diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js new file mode 100644 index 0000000..8b3ea91 --- /dev/null +++ b/docs/html/search/all_5.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['far_0',['Features so far',['../index.html#autotoc_md5',1,'']]], + ['features_20so_20far_1',['Features so far',['../index.html#autotoc_md5',1,'']]], + ['flag_5fhex_2',['FLAG_HEX',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50ea6e2358c554833c099220e607e5b0d4c5',1,'printf.h']]], + ['flag_5flong_3',['FLAG_LONG',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50eaa72e3105e2122e6b5f57aa6292e2c8dc',1,'printf.h']]], + ['flag_5funsigned_4',['FLAG_UNSIGNED',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50ea9d7af0bc42edbc645dc9fce298ae56a6',1,'printf.h']]], + ['flag_5fuppercase_5',['FLAG_UPPERCASE',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50eab7d21bdf0595568d924424487011a7fc',1,'printf.h']]], + ['flags_6',['flags',['../struct_format___state.html#a8e9f520821a5c2d969f3bc9195145dac',1,'Format_State']]], + ['fmt_5flong_7',['FMT_LONG',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a254aa61e900a06ab00f4a0c5a7d7e246',1,'printf.h']]], + ['fmt_5fpercent_8',['FMT_PERCENT',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a3bc5680c539dfa2bdfab45834b0f8b26',1,'printf.h']]], + ['fmt_5fstate_5ft_9',['fmt_state_t',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4',1,'printf.h']]], + ['fmt_5ftext_10',['FMT_TEXT',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4af800661ffd277611eab389279f927862',1,'printf.h']]], + ['for_20qemu_11',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['format_5fstate_12',['Format_State',['../struct_format___state.html',1,'']]], + ['future_20plans_13',['Future Plans',['../md_docs_2pages_2panic.html#autotoc_md2',1,'']]] +]; diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js new file mode 100644 index 0000000..608cf0f --- /dev/null +++ b/docs/html/search/all_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getc_0',['getc',['../printf_8c.html#a0e65feb118c1ee30820c142aeb5a5145',1,'printf.c']]], + ['getdate_1',['getdate',['../datetime_8c.html#add26ce10819b28be2718dcdab0117eb2',1,'getdate(dateval *date_struct): datetime.c'],['../datetime_8h.html#a722cd4f876f5d4dbe92c0eba1484bd3b',1,'getdate(dateval *date): datetime.c']]], + ['getlines_2',['getlines',['../printf_8c.html#a7880ed31ba841d890680635d6b83fcb7',1,'getlines(char *restrict buffer, size_t length): printf.c'],['../printf_8h.html#a7880ed31ba841d890680635d6b83fcb7',1,'getlines(char *restrict buffer, size_t length): printf.c']]], + ['gettime_3',['gettime',['../datetime_8c.html#ae5ad61ac69c1f40d86ae1feba81b1836',1,'gettime(timeval *time_struct): datetime.c'],['../datetime_8h.html#ae5ad61ac69c1f40d86ae1feba81b1836',1,'gettime(timeval *time_struct): datetime.c']]] +]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js new file mode 100644 index 0000000..d7179ce --- /dev/null +++ b/docs/html/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['heap_5fcur_0',['heap_cur',['../memory_8c.html#a30f61122e981effc69731cd6b4e750b9',1,'memory.c']]], + ['heap_5fend_1',['heap_end',['../memory_8c.html#a874db3bfd8c5593f9080ee32fee5b1ab',1,'memory.c']]], + ['hrs_2',['hrs',['../structtimeval.html#a6e62d267f33ee409bbab00d2f86b43fc',1,'timeval']]] +]; diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js new file mode 100644 index 0000000..462b148 --- /dev/null +++ b/docs/html/search/all_8.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['init_5fmessage_0',['init_message',['../kernel_8c.html#a5f7f5591859a697cdeb5faafdf0ce822',1,'kernel.c']]], + ['interrupt_2ec_1',['interrupt.c',['../interrupt_8c.html',1,'']]], + ['interrupt_2eh_2',['interrupt.h',['../interrupt_8h.html',1,'']]], + ['interrupts_5finit_5ftimer0_3',['interrupts_init_timer0',['../interrupt_8c.html#a2a778647bb8df60e6c3238b29eb2fca2',1,'interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz): interrupt.c'],['../interrupt_8h.html#a2a778647bb8df60e6c3238b29eb2fca2',1,'interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz): interrupt.c']]], + ['irq_5fdisable_4',['irq_disable',['../interrupt_8c.html#ab4e0cc193587bb7ac297bbc859ff4603',1,'irq_disable(void): interrupt.c'],['../interrupt_8h.html#ab4e0cc193587bb7ac297bbc859ff4603',1,'irq_disable(void): interrupt.c']]], + ['irq_5fenable_5',['irq_enable',['../interrupt_8c.html#a0a004f8aa16635895a42e0667f26c420',1,'irq_enable(void): interrupt.c'],['../interrupt_8h.html#a0a004f8aa16635895a42e0667f26c420',1,'irq_enable(void): interrupt.c']]], + ['irq_5fhandler_6',['irq_handler',['../interrupt_8c.html#afbe4835df451e474a54178267b1d6060',1,'irq_handler(void): interrupt.c'],['../interrupt_8h.html#afbe4835df451e474a54178267b1d6060',1,'irq_handler(void): interrupt.c']]], + ['irq_5fsanity_5fcheck_7',['irq_sanity_check',['../kernel_8c.html#a7e3f35a711eee12e3d4bbc0a276fcf0c',1,'kernel.c']]], + ['irq_5ftimer01_8',['IRQ_TIMER01',['../interrupt_8h.html#afa6c290ed4f4bc4926f70c2f8e4a03b4',1,'interrupt.h']]] +]; diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js new file mode 100644 index 0000000..322b010 --- /dev/null +++ b/docs/html/search/all_9.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['kernel_20for_20qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['kernel_20panic_20subsystem_1',['Kernel Panic Subsystem',['../md_docs_2pages_2panic.html',1,'']]], + ['kernel_2ec_2',['kernel.c',['../kernel_8c.html',1,'']]], + ['kernel_5fhalt_3',['kernel_halt',['../panic_8c.html#a830ea0b31f5cecec34c74c8a4c2f8192',1,'kernel_halt(void): panic.c'],['../panic_8h.html#a830ea0b31f5cecec34c74c8a4c2f8192',1,'kernel_halt(void): panic.c']]], + ['kernel_5fmain_4',['kernel_main',['../kernel_8c.html#a6b8fb674fb359f6ae53dc9c4fb7fc6be',1,'kernel.c']]], + ['kernel_5fpanic_5',['kernel_panic',['../panic_8c.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca',1,'kernel_panic(const char *message): panic.c'],['../panic_8h.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca',1,'kernel_panic(const char *message): panic.c']]], + ['kmalloc_6',['kmalloc',['../memory_8c.html#a87d8585002a620e687d68b38ab387a0e',1,'kmalloc(size_t size): memory.c'],['../memory_8h.html#a87d8585002a620e687d68b38ab387a0e',1,'kmalloc(size_t size): memory.c']]], + ['kmalloc_5falign_7',['KMALLOC_ALIGN',['../memory_8c.html#a33dfa93395fb15626ad7538600aefe5a',1,'memory.c']]], + ['kmalloc_5finit_8',['kmalloc_init',['../memory_8c.html#ae8d09a66c8495a0c2ff5c54f1309fd6a',1,'kmalloc_init(void *start, void *limit): memory.c'],['../memory_8h.html#ae8d09a66c8495a0c2ff5c54f1309fd6a',1,'kmalloc_init(void *start, void *limit): memory.c']]], + ['kmalloc_5fremaining_9',['kmalloc_remaining',['../memory_8c.html#a5a329ef700130de7d4a5ade2fa4f3998',1,'kmalloc_remaining(void): memory.c'],['../memory_8h.html#a5a329ef700130de7d4a5ade2fa4f3998',1,'kmalloc_remaining(void): memory.c']]] +]; diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js new file mode 100644 index 0000000..5c6c8c6 --- /dev/null +++ b/docs/html/search/all_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['leap_5fyears_5fbefore_5f1970_0',['LEAP_YEARS_BEFORE_1970',['../datetime_8c.html#adbaf12c2d2bb87fcac509cbf26d9138a',1,'datetime.c']]], + ['license_1',['License',['../index.html#autotoc_md11',1,'']]], + ['list_2',['Todo List',['../todo.html',1,'']]] +]; diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js new file mode 100644 index 0000000..32ce2eb --- /dev/null +++ b/docs/html/search/all_b.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['math_2eh_0',['math.h',['../math_8h.html',1,'']]], + ['memory_2ec_1',['memory.c',['../memory_8c.html',1,'']]], + ['memory_2eh_2',['memory.h',['../memory_8h.html',1,'']]], + ['minimal_20arm_20kernel_20for_20qemu_3',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['mins_4',['mins',['../structtimeval.html#ab572bcefc22589608f6f9b17db4c67d0',1,'timeval']]], + ['month_5',['month',['../structdateval.html#a24c5854c50c27c8743e8dce356602c11',1,'dateval']]] +]; diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js new file mode 100644 index 0000000..fc2eaee --- /dev/null +++ b/docs/html/search/all_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['native_20build_0',['Native Build',['../index.html#autotoc_md7',1,'']]], + ['not_5fmain_1',['not_main',['../kernel_8c.html#a8a11654fcf5bd5fcf10f118ad5f79904',1,'kernel.c']]], + ['num_2',['num',['../struct_format___state.html#a0b085f36471887da4f0b5e93001b4fdb',1,'Format_State']]] +]; diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js new file mode 100644 index 0000000..4ec9c27 --- /dev/null +++ b/docs/html/search/all_d.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['panic_20subsystem_0',['Kernel Panic Subsystem',['../md_docs_2pages_2panic.html',1,'']]], + ['panic_2ec_1',['panic.c',['../panic_8c.html',1,'']]], + ['panic_2eh_2',['panic.h',['../panic_8h.html',1,'']]], + ['panic_2emd_3',['panic.md',['../panic_8md.html',1,'']]], + ['plans_4',['Future Plans',['../md_docs_2pages_2panic.html#autotoc_md2',1,'']]], + ['platform_20and_20configuration_5',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]], + ['printf_6',['printf',['../printf_8c.html#a0aff7311d684a0e0ef33125616a73385',1,'printf(const char *fmt,...): printf.c'],['../printf_8h.html#a0aff7311d684a0e0ef33125616a73385',1,'printf(const char *fmt,...): printf.c']]], + ['printf_2ec_7',['printf.c',['../printf_8c.html',1,'']]], + ['printf_2eh_8',['printf.h',['../printf_8h.html',1,'']]], + ['put_5fintegers_9',['put_integers',['../printf_8c.html#ac3154a3597888cf112e4e7bf6a5f1846',1,'printf.c']]], + ['put_5fsigned_10',['put_signed',['../printf_8c.html#a2e8c688dfa078a9a7f1f02d4126f466a',1,'printf.c']]], + ['put_5funsigned_11',['put_unsigned',['../printf_8c.html#ab97c3c9e783c1402d4007ceafdb197c1',1,'printf.c']]], + ['putc_12',['putc',['../printf_8c.html#a9bdf0418571456c566aa2f329b5f8350',1,'printf.c']]], + ['puts_13',['puts',['../printf_8c.html#a299d0f9cb9e7b14e1278a4ed21e4d76f',1,'puts(const char *s): printf.c'],['../printf_8h.html#a299d0f9cb9e7b14e1278a4ed21e4d76f',1,'puts(const char *s): printf.c']]] +]; diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js new file mode 100644 index 0000000..4b69c00 --- /dev/null +++ b/docs/html/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]] +]; diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js new file mode 100644 index 0000000..60596f0 --- /dev/null +++ b/docs/html/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]], + ['rtcdr_1',['RTCDR',['../datetime_8c.html#a2dff2dfb11335c4e93f29925ee2a2792',1,'datetime.c']]] +]; diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js new file mode 100644 index 0000000..3338e33 --- /dev/null +++ b/docs/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dateval_0',['dateval',['../structdateval.html',1,'']]] +]; diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js new file mode 100644 index 0000000..6b1b20c --- /dev/null +++ b/docs/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['format_5fstate_0',['Format_State',['../struct_format___state.html',1,'']]] +]; diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js new file mode 100644 index 0000000..2a118d5 --- /dev/null +++ b/docs/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timeval_0',['timeval',['../structtimeval.html',1,'']]] +]; diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js new file mode 100644 index 0000000..e5a83b9 --- /dev/null +++ b/docs/html/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['call_5fsvc_5f0_0',['CALL_SVC_0',['../kernel_8c.html#abf99406c50fd43ebcb9e3e6f6f843e2a',1,'kernel.c']]] +]; diff --git a/docs/html/search/defines_1.js b/docs/html/search/defines_1.js new file mode 100644 index 0000000..33ca305 --- /dev/null +++ b/docs/html/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['irq_5ftimer01_0',['IRQ_TIMER01',['../interrupt_8h.html#afa6c290ed4f4bc4926f70c2f8e4a03b4',1,'interrupt.h']]] +]; diff --git a/docs/html/search/defines_2.js b/docs/html/search/defines_2.js new file mode 100644 index 0000000..d465a7c --- /dev/null +++ b/docs/html/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['leap_5fyears_5fbefore_5f1970_0',['LEAP_YEARS_BEFORE_1970',['../datetime_8c.html#adbaf12c2d2bb87fcac509cbf26d9138a',1,'datetime.c']]] +]; diff --git a/docs/html/search/defines_3.js b/docs/html/search/defines_3.js new file mode 100644 index 0000000..a92e1ad --- /dev/null +++ b/docs/html/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rtcdr_0',['RTCDR',['../datetime_8c.html#a2dff2dfb11335c4e93f29925ee2a2792',1,'datetime.c']]] +]; diff --git a/docs/html/search/defines_4.js b/docs/html/search/defines_4.js new file mode 100644 index 0000000..a7cf64a --- /dev/null +++ b/docs/html/search/defines_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sanity_5fcheck_0',['SANITY_CHECK',['../kernel_8c.html#acb05d8656987be634f8bd20154d84eb8',1,'kernel.c']]], + ['seconds_5fin_5fday_1',['SECONDS_IN_DAY',['../datetime_8c.html#ab8e2596e9eb4c7f02aa52caa4c07ff90',1,'datetime.c']]], + ['seconds_5fin_5fmonth_2',['SECONDS_IN_MONTH',['../datetime_8c.html#abc6b438d643dc4b10ef34d427e92d213',1,'datetime.c']]], + ['seconds_5fin_5fyear_3',['SECONDS_IN_YEAR',['../datetime_8c.html#a599d171dc6323cb2705efd42dc2e0add',1,'datetime.c']]] +]; diff --git a/docs/html/search/defines_5.js b/docs/html/search/defines_5.js new file mode 100644 index 0000000..28d7f33 --- /dev/null +++ b/docs/html/search/defines_5.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['t01_5fbase_0',['T01_BASE',['../interrupt_8h.html#ad3725493cd92ce709967d46dff203c53',1,'interrupt.h']]], + ['t0_5fcontrol_1',['T0_CONTROL',['../interrupt_8h.html#aaccf6b96ba3b742c6bda83b3eb59e419',1,'interrupt.h']]], + ['t0_5fintclr_2',['T0_INTCLR',['../interrupt_8h.html#ae2e3c97a8b35d12b57b0ee7f07dbac79',1,'interrupt.h']]], + ['t0_5fload_3',['T0_LOAD',['../interrupt_8h.html#a24e819c57eeb7a925f1c6526e19fc0a6',1,'interrupt.h']]], + ['t0_5fmis_4',['T0_MIS',['../interrupt_8h.html#acc5acea895618d5b1d4a94daaf34c372',1,'interrupt.h']]], + ['t0_5fvalue_5',['T0_VALUE',['../interrupt_8h.html#a09661a92c1ee93307f89d0bf5d056cf1',1,'interrupt.h']]], + ['tctrl_5f32bit_6',['TCTRL_32BIT',['../interrupt_8h.html#a8c90f5c03791fbd20caf094c1c238d3e',1,'interrupt.h']]], + ['tctrl_5fenable_7',['TCTRL_ENABLE',['../interrupt_8h.html#a0ae1e8b399502d25a8a5bf23479a8453',1,'interrupt.h']]], + ['tctrl_5finten_8',['TCTRL_INTEN',['../interrupt_8h.html#a2cadbad73a0a0951e5da8b3abef68939',1,'interrupt.h']]], + ['tctrl_5fperiodic_9',['TCTRL_PERIODIC',['../interrupt_8h.html#a55d19d2e3a269142eb991a3c93b9d650',1,'interrupt.h']]], + ['timer_5ftick_5ftest_10',['TIMER_TICK_TEST',['../kernel_8c.html#abee0a0a40ba8a0eb2af7112f7b2b0c95',1,'kernel.c']]] +]; diff --git a/docs/html/search/defines_6.js b/docs/html/search/defines_6.js new file mode 100644 index 0000000..bc825a2 --- /dev/null +++ b/docs/html/search/defines_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['uart0_5fbase_0',['UART0_BASE',['../printf_8c.html#a7a07348b4332ff6b88abf6092347deba',1,'printf.c']]], + ['uart0_5fdr_1',['UART0_DR',['../printf_8c.html#a4bd8785a1ac7d8be53153ec3e2f5afa4',1,'printf.c']]], + ['uart0_5ffr_2',['UART0_FR',['../printf_8c.html#a8838537812346e09a66edf94c0c9ffe9',1,'printf.c']]] +]; diff --git a/docs/html/search/defines_7.js b/docs/html/search/defines_7.js new file mode 100644 index 0000000..59d2513 --- /dev/null +++ b/docs/html/search/defines_7.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['vic_5fbase_0',['VIC_BASE',['../interrupt_8h.html#a20d127cee2705b7e0b86585d131c2380',1,'interrupt.h']]], + ['vic_5fdefvectaddr_1',['VIC_DEFVECTADDR',['../interrupt_8h.html#ae9cc6c8999966c69d2a21bc3884397a3',1,'interrupt.h']]], + ['vic_5fintenable_2',['VIC_INTENABLE',['../interrupt_8h.html#a0b1ee4a77609e8163ad74cbe81c98213',1,'interrupt.h']]], + ['vic_5fintenclr_3',['VIC_INTENCLR',['../interrupt_8h.html#a195648e4e688b672df29f6fa94aabf35',1,'interrupt.h']]], + ['vic_5fintselect_4',['VIC_INTSELECT',['../interrupt_8h.html#a595c2bd198349dbf4a8f4fe07771b474',1,'interrupt.h']]], + ['vic_5firqstatus_5',['VIC_IRQSTATUS',['../interrupt_8h.html#a810f60f080c753e160afd81d479d8944',1,'interrupt.h']]], + ['vic_5fsoft_5fint_6',['VIC_SOFT_INT',['../interrupt_8h.html#a75ec9a495c5185a396cd68dca2460edf',1,'interrupt.h']]], + ['vic_5fsoft_5fintclr_7',['VIC_SOFT_INTCLR',['../interrupt_8h.html#aa5a73a9343ad968ee5a1640dc01b66de',1,'interrupt.h']]], + ['vic_5fvectaddr_8',['VIC_VECTADDR',['../interrupt_8h.html#ae718b3209b4779204ab625ec050d88dc',1,'interrupt.h']]] +]; diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js new file mode 100644 index 0000000..32c56b8 --- /dev/null +++ b/docs/html/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fmt_5fstate_5ft_0',['fmt_state_t',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4',1,'printf.h']]] +]; diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js new file mode 100644 index 0000000..1689f98 --- /dev/null +++ b/docs/html/search/enumvalues_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['flag_5fhex_0',['FLAG_HEX',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50ea6e2358c554833c099220e607e5b0d4c5',1,'printf.h']]], + ['flag_5flong_1',['FLAG_LONG',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50eaa72e3105e2122e6b5f57aa6292e2c8dc',1,'printf.h']]], + ['flag_5funsigned_2',['FLAG_UNSIGNED',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50ea9d7af0bc42edbc645dc9fce298ae56a6',1,'printf.h']]], + ['flag_5fuppercase_3',['FLAG_UPPERCASE',['../printf_8h.html#a3b35233f97d5a161b74dff572207c50eab7d21bdf0595568d924424487011a7fc',1,'printf.h']]], + ['fmt_5flong_4',['FMT_LONG',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a254aa61e900a06ab00f4a0c5a7d7e246',1,'printf.h']]], + ['fmt_5fpercent_5',['FMT_PERCENT',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4a3bc5680c539dfa2bdfab45834b0f8b26',1,'printf.h']]], + ['fmt_5ftext_6',['FMT_TEXT',['../printf_8h.html#a6a365df0f08a0881d39d194e9dc7b0f4af800661ffd277611eab389279f927862',1,'printf.h']]] +]; diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js new file mode 100644 index 0000000..d512efb --- /dev/null +++ b/docs/html/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['clear_2ec_0',['clear.c',['../clear_8c.html',1,'']]], + ['clear_2eh_1',['clear.h',['../clear_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js new file mode 100644 index 0000000..1d6277e --- /dev/null +++ b/docs/html/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['datetime_2ec_0',['datetime.c',['../datetime_8c.html',1,'']]], + ['datetime_2eh_1',['datetime.h',['../datetime_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js new file mode 100644 index 0000000..2afff1b --- /dev/null +++ b/docs/html/search/files_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['interrupt_2ec_0',['interrupt.c',['../interrupt_8c.html',1,'']]], + ['interrupt_2eh_1',['interrupt.h',['../interrupt_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js new file mode 100644 index 0000000..34d4c76 --- /dev/null +++ b/docs/html/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kernel_2ec_0',['kernel.c',['../kernel_8c.html',1,'']]] +]; diff --git a/docs/html/search/files_4.js b/docs/html/search/files_4.js new file mode 100644 index 0000000..eaf20eb --- /dev/null +++ b/docs/html/search/files_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['math_2eh_0',['math.h',['../math_8h.html',1,'']]], + ['memory_2ec_1',['memory.c',['../memory_8c.html',1,'']]], + ['memory_2eh_2',['memory.h',['../memory_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_5.js b/docs/html/search/files_5.js new file mode 100644 index 0000000..2075a65 --- /dev/null +++ b/docs/html/search/files_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['panic_2ec_0',['panic.c',['../panic_8c.html',1,'']]], + ['panic_2eh_1',['panic.h',['../panic_8h.html',1,'']]], + ['panic_2emd_2',['panic.md',['../panic_8md.html',1,'']]], + ['printf_2ec_3',['printf.c',['../printf_8c.html',1,'']]], + ['printf_2eh_4',['printf.h',['../printf_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_6.js b/docs/html/search/files_6.js new file mode 100644 index 0000000..4accdc1 --- /dev/null +++ b/docs/html/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]] +]; diff --git a/docs/html/search/files_7.js b/docs/html/search/files_7.js new file mode 100644 index 0000000..6517195 --- /dev/null +++ b/docs/html/search/files_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['start_2es_0',['start.s',['../start_8s.html',1,'']]], + ['string_2ec_1',['string.c',['../string_8c.html',1,'']]], + ['string_2eh_2',['string.h',['../string_8h.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..4e40e3e --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_5fbdiv_0',['_bdiv',['../printf_8c.html#a694b6d27273027eb96424e52b798c391',1,'printf.c']]], + ['_5fdivmod_1',['_divmod',['../printf_8c.html#a96a30e819fcbfa9a0251f71f14ff79bc',1,'printf.c']]], + ['_5fudiv32_2',['_udiv32',['../math_8h.html#a97fbf4adb8a31d415775bdbd5c30c468',1,'math.h']]] +]; diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js new file mode 100644 index 0000000..5ceb7da --- /dev/null +++ b/docs/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['align_5fup_5fuintptr_0',['align_up_uintptr',['../memory_8c.html#a4742e575dd722d9e1d926ab578f02c9f',1,'memory.c']]] +]; diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js new file mode 100644 index 0000000..6a57c68 --- /dev/null +++ b/docs/html/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['clear_0',['clear',['../clear_8c.html#ae683fe63c33c388e9ba1c6392dd477eb',1,'clear(void): clear.c'],['../clear_8h.html#ae683fe63c33c388e9ba1c6392dd477eb',1,'clear(void): clear.c']]] +]; diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js new file mode 100644 index 0000000..608cf0f --- /dev/null +++ b/docs/html/search/functions_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getc_0',['getc',['../printf_8c.html#a0e65feb118c1ee30820c142aeb5a5145',1,'printf.c']]], + ['getdate_1',['getdate',['../datetime_8c.html#add26ce10819b28be2718dcdab0117eb2',1,'getdate(dateval *date_struct): datetime.c'],['../datetime_8h.html#a722cd4f876f5d4dbe92c0eba1484bd3b',1,'getdate(dateval *date): datetime.c']]], + ['getlines_2',['getlines',['../printf_8c.html#a7880ed31ba841d890680635d6b83fcb7',1,'getlines(char *restrict buffer, size_t length): printf.c'],['../printf_8h.html#a7880ed31ba841d890680635d6b83fcb7',1,'getlines(char *restrict buffer, size_t length): printf.c']]], + ['gettime_3',['gettime',['../datetime_8c.html#ae5ad61ac69c1f40d86ae1feba81b1836',1,'gettime(timeval *time_struct): datetime.c'],['../datetime_8h.html#ae5ad61ac69c1f40d86ae1feba81b1836',1,'gettime(timeval *time_struct): datetime.c']]] +]; diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js new file mode 100644 index 0000000..e14acff --- /dev/null +++ b/docs/html/search/functions_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['init_5fmessage_0',['init_message',['../kernel_8c.html#a5f7f5591859a697cdeb5faafdf0ce822',1,'kernel.c']]], + ['interrupts_5finit_5ftimer0_1',['interrupts_init_timer0',['../interrupt_8c.html#a2a778647bb8df60e6c3238b29eb2fca2',1,'interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz): interrupt.c'],['../interrupt_8h.html#a2a778647bb8df60e6c3238b29eb2fca2',1,'interrupts_init_timer0(uint32_t tick_hz, uint32_t timer_clk_hz): interrupt.c']]], + ['irq_5fdisable_2',['irq_disable',['../interrupt_8c.html#ab4e0cc193587bb7ac297bbc859ff4603',1,'irq_disable(void): interrupt.c'],['../interrupt_8h.html#ab4e0cc193587bb7ac297bbc859ff4603',1,'irq_disable(void): interrupt.c']]], + ['irq_5fenable_3',['irq_enable',['../interrupt_8c.html#a0a004f8aa16635895a42e0667f26c420',1,'irq_enable(void): interrupt.c'],['../interrupt_8h.html#a0a004f8aa16635895a42e0667f26c420',1,'irq_enable(void): interrupt.c']]], + ['irq_5fhandler_4',['irq_handler',['../interrupt_8c.html#afbe4835df451e474a54178267b1d6060',1,'irq_handler(void): interrupt.c'],['../interrupt_8h.html#afbe4835df451e474a54178267b1d6060',1,'irq_handler(void): interrupt.c']]], + ['irq_5fsanity_5fcheck_5',['irq_sanity_check',['../kernel_8c.html#a7e3f35a711eee12e3d4bbc0a276fcf0c',1,'kernel.c']]] +]; diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js new file mode 100644 index 0000000..6a65cc2 --- /dev/null +++ b/docs/html/search/functions_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['kernel_5fhalt_0',['kernel_halt',['../panic_8c.html#a830ea0b31f5cecec34c74c8a4c2f8192',1,'kernel_halt(void): panic.c'],['../panic_8h.html#a830ea0b31f5cecec34c74c8a4c2f8192',1,'kernel_halt(void): panic.c']]], + ['kernel_5fmain_1',['kernel_main',['../kernel_8c.html#a6b8fb674fb359f6ae53dc9c4fb7fc6be',1,'kernel.c']]], + ['kernel_5fpanic_2',['kernel_panic',['../panic_8c.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca',1,'kernel_panic(const char *message): panic.c'],['../panic_8h.html#ac3d3e7674c5f1ad62a44afce2ff9a0ca',1,'kernel_panic(const char *message): panic.c']]], + ['kmalloc_3',['kmalloc',['../memory_8c.html#a87d8585002a620e687d68b38ab387a0e',1,'kmalloc(size_t size): memory.c'],['../memory_8h.html#a87d8585002a620e687d68b38ab387a0e',1,'kmalloc(size_t size): memory.c']]], + ['kmalloc_5finit_4',['kmalloc_init',['../memory_8c.html#ae8d09a66c8495a0c2ff5c54f1309fd6a',1,'kmalloc_init(void *start, void *limit): memory.c'],['../memory_8h.html#ae8d09a66c8495a0c2ff5c54f1309fd6a',1,'kmalloc_init(void *start, void *limit): memory.c']]], + ['kmalloc_5fremaining_5',['kmalloc_remaining',['../memory_8c.html#a5a329ef700130de7d4a5ade2fa4f3998',1,'kmalloc_remaining(void): memory.c'],['../memory_8h.html#a5a329ef700130de7d4a5ade2fa4f3998',1,'kmalloc_remaining(void): memory.c']]] +]; diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js new file mode 100644 index 0000000..9080c3d --- /dev/null +++ b/docs/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['not_5fmain_0',['not_main',['../kernel_8c.html#a8a11654fcf5bd5fcf10f118ad5f79904',1,'kernel.c']]] +]; diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js new file mode 100644 index 0000000..d7b5f91 --- /dev/null +++ b/docs/html/search/functions_7.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['printf_0',['printf',['../printf_8c.html#a0aff7311d684a0e0ef33125616a73385',1,'printf(const char *fmt,...): printf.c'],['../printf_8h.html#a0aff7311d684a0e0ef33125616a73385',1,'printf(const char *fmt,...): printf.c']]], + ['put_5fintegers_1',['put_integers',['../printf_8c.html#ac3154a3597888cf112e4e7bf6a5f1846',1,'printf.c']]], + ['put_5fsigned_2',['put_signed',['../printf_8c.html#a2e8c688dfa078a9a7f1f02d4126f466a',1,'printf.c']]], + ['put_5funsigned_3',['put_unsigned',['../printf_8c.html#ab97c3c9e783c1402d4007ceafdb197c1',1,'printf.c']]], + ['putc_4',['putc',['../printf_8c.html#a9bdf0418571456c566aa2f329b5f8350',1,'printf.c']]], + ['puts_5',['puts',['../printf_8c.html#a299d0f9cb9e7b14e1278a4ed21e4d76f',1,'puts(const char *s): printf.c'],['../printf_8h.html#a299d0f9cb9e7b14e1278a4ed21e4d76f',1,'puts(const char *s): printf.c']]] +]; diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js new file mode 100644 index 0000000..232181d --- /dev/null +++ b/docs/html/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['strcmp_0',['strcmp',['../string_8c.html#a49735c99bf645cfa53f5c5c98a7ceea7',1,'strcmp(const char *str_1, const char *str_2): string.c'],['../string_8h.html#a49735c99bf645cfa53f5c5c98a7ceea7',1,'strcmp(const char *str_1, const char *str_2): string.c']]], + ['strlen_1',['strlen',['../string_8c.html#a008e171a518fe0e0352f31b245e03875',1,'strlen(const char *str): string.c'],['../string_8h.html#a008e171a518fe0e0352f31b245e03875',1,'strlen(const char *str): string.c']]] +]; diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js new file mode 100644 index 0000000..e99a43c --- /dev/null +++ b/docs/html/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timer0_5fstart_5fperiodic_0',['timer0_start_periodic',['../interrupt_8h.html#a6b1cda18aba744c0a2580c0833a96d9d',1,'interrupt.h']]] +]; diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js new file mode 100644 index 0000000..f2b44b0 --- /dev/null +++ b/docs/html/search/functions_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vic_5fenable_5ftimer01_5firq_0',['vic_enable_timer01_irq',['../interrupt_8h.html#a18b76150ed04c0d5d19456bf30970fdd',1,'interrupt.h']]] +]; diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js new file mode 100644 index 0000000..f2b44b0 --- /dev/null +++ b/docs/html/search/functions_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vic_5fenable_5ftimer01_5firq_0',['vic_enable_timer01_irq',['../interrupt_8h.html#a18b76150ed04c0d5d19456bf30970fdd',1,'interrupt.h']]] +]; diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js new file mode 100644 index 0000000..865fc80 --- /dev/null +++ b/docs/html/search/pages_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['a_20minimal_20arm_20kernel_20for_20qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['and_20configuration_1',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]], + ['arm_20kernel_20for_20qemu_2',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['astrakernel_20a_20minimal_20arm_20kernel_20for_20qemu_3',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]] +]; diff --git a/docs/html/search/pages_1.js b/docs/html/search/pages_1.js new file mode 100644 index 0000000..3cbaa35 --- /dev/null +++ b/docs/html/search/pages_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['build_0',['Build',['../index.html#autotoc_md8',1,'Docker Build'],['../index.html#autotoc_md7',1,'Native Build']]], + ['building_1',['Building',['../index.html#autotoc_md6',1,'']]] +]; diff --git a/docs/html/search/pages_2.js b/docs/html/search/pages_2.js new file mode 100644 index 0000000..4cf5d1f --- /dev/null +++ b/docs/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['configuration_0',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]] +]; diff --git a/docs/html/search/pages_3.js b/docs/html/search/pages_3.js new file mode 100644 index 0000000..cbfa536 --- /dev/null +++ b/docs/html/search/pages_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['design_0',['Design',['../md_docs_2pages_2panic.html#autotoc_md1',1,'']]], + ['disclaimer_1',['Disclaimer',['../index.html#autotoc_md10',1,'']]], + ['docker_20build_2',['Docker Build',['../index.html#autotoc_md8',1,'']]], + ['documentation_3',['Documentation',['../index.html#autotoc_md9',1,'']]] +]; diff --git a/docs/html/search/pages_4.js b/docs/html/search/pages_4.js new file mode 100644 index 0000000..a44cb6a --- /dev/null +++ b/docs/html/search/pages_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['far_0',['Features so far',['../index.html#autotoc_md5',1,'']]], + ['features_20so_20far_1',['Features so far',['../index.html#autotoc_md5',1,'']]], + ['for_20qemu_2',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['future_20plans_3',['Future Plans',['../md_docs_2pages_2panic.html#autotoc_md2',1,'']]] +]; diff --git a/docs/html/search/pages_5.js b/docs/html/search/pages_5.js new file mode 100644 index 0000000..5a23afa --- /dev/null +++ b/docs/html/search/pages_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kernel_20for_20qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]], + ['kernel_20panic_20subsystem_1',['Kernel Panic Subsystem',['../md_docs_2pages_2panic.html',1,'']]] +]; diff --git a/docs/html/search/pages_6.js b/docs/html/search/pages_6.js new file mode 100644 index 0000000..60ec2c8 --- /dev/null +++ b/docs/html/search/pages_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['license_0',['License',['../index.html#autotoc_md11',1,'']]], + ['list_1',['Todo List',['../todo.html',1,'']]] +]; diff --git a/docs/html/search/pages_7.js b/docs/html/search/pages_7.js new file mode 100644 index 0000000..088fb8c --- /dev/null +++ b/docs/html/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['minimal_20arm_20kernel_20for_20qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]] +]; diff --git a/docs/html/search/pages_8.js b/docs/html/search/pages_8.js new file mode 100644 index 0000000..aee41af --- /dev/null +++ b/docs/html/search/pages_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['native_20build_0',['Native Build',['../index.html#autotoc_md7',1,'']]] +]; diff --git a/docs/html/search/pages_9.js b/docs/html/search/pages_9.js new file mode 100644 index 0000000..7426bf3 --- /dev/null +++ b/docs/html/search/pages_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['panic_20subsystem_0',['Kernel Panic Subsystem',['../md_docs_2pages_2panic.html',1,'']]], + ['plans_1',['Future Plans',['../md_docs_2pages_2panic.html#autotoc_md2',1,'']]], + ['platform_20and_20configuration_2',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]] +]; diff --git a/docs/html/search/pages_a.js b/docs/html/search/pages_a.js new file mode 100644 index 0000000..4b69c00 --- /dev/null +++ b/docs/html/search/pages_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qemu_0',['AstraKernel ~ A minimal ARM kernel for QEMU',['../index.html',1,'']]] +]; diff --git a/docs/html/search/pages_b.js b/docs/html/search/pages_b.js new file mode 100644 index 0000000..f9c9a71 --- /dev/null +++ b/docs/html/search/pages_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['so_20far_0',['Features so far',['../index.html#autotoc_md5',1,'']]], + ['subsystem_1',['Kernel Panic Subsystem',['../md_docs_2pages_2panic.html',1,'']]] +]; diff --git a/docs/html/search/pages_c.js b/docs/html/search/pages_c.js new file mode 100644 index 0000000..604df21 --- /dev/null +++ b/docs/html/search/pages_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['target_20platform_20and_20configuration_0',['Target platform and configuration',['../index.html#autotoc_md4',1,'']]], + ['todo_20list_1',['Todo List',['../todo.html',1,'']]] +]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..956f31f --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,378 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
      • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 43px; + margin-right: 0; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + border: 1px solid var(--search-box-border-color); + z-index: 102; + margin-right: 4px; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.6em; +} + +#MSearchField { + display: inline-block; + vertical-align: top; + width: 7.5em; + height: 22px; + margin: 0 0 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.6em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + margin: 6px 0 0 4px; +} + +.close-icon { + width: 11px; + height: 11px; + background-color: var(--search-close-icon-bg-color); + border-radius: 50%; + position: relative; + display: flex; + justify-content: center; + align-items: center; + box-sizing: content-box; +} + +.close-icon:before, +.close-icon:after { + content: ''; + position: absolute; + width: 7px; + height: 1px; + background-color: var(--search-close-icon-fg-color); +} + +.close-icon:before { + transform: rotate(45deg); +} + +.close-icon:after { + transform: rotate(-45deg); +} + + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + +.search-icon { + width: 20px; + height: 20px; + display: inline-block; + position: relative; + margin-left: 3px; +} + +#MSearchSelectExt.search-icon { + width: 10px; +} + +#MSearchSelectExt + input { + margin-left: 5px; +} + +.search-icon::before, .search-icon::after { + content: ''; + position: absolute; + border: 1.5px solid var(--search-foreground-color); + box-sizing: content-box; +} + +.search-icon::before { + width: 6px; + height: 6px; + border-radius: 50%; + top: 7px; + left: 2px; + background: var(--search-background-color); +} + +.search-icon::after { + border: 1px solid var(--search-foreground-color); + width: 0px; + height: 3px; + border-radius: 2px; + top: 15px; + left: 8px; + transform: rotate(-45deg); + transform-origin: top left; +} + +.search-icon-dropdown { + content: ''; + width: 0; + height: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 3px solid var(--search-foreground-color); + top: 8px; + left: 15px; + transform: translateX(-50%); + position: absolute; +} + + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + backdrop-filter: var(--search-filter-backdrop-filter); + -webkit-backdrop-filter: var(--search-filter-backdrop-filter); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + border-radius: 4px; +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: auto; + right: 4px; + top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + backdrop-filter: var(--search-results-backdrop-filter); + -webkit-backdrop-filter: var(--search-results-backdrop-filter); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; + border-radius: 8px; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResults; + box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); +} + + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 10pt; + padding: 2px 5px; +} + +div.SRPage { + margin: 5px 2px; + /*background-color: var(--search-results-background-color);*/ +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +#searchBoxPos1 dark-mode-toggle { + margin-top: 4px; +} + +/*---------------- External search page results */ + +.pages b { + color: var(--nav-foreground-color); + padding: 5px 5px 3px 5px; + background-color: var(--nav-menu-active-bg); + border-radius: 4px; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..dc14410 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,708 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const decodeHtml = (html) => { + const txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; + }; + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = decodeHtml(elem[1][0]); + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + if (elem[1][1][0].startsWith('http://') || elem[1][1][0].startsWith('https://')) { // absolute path + srLink.setAttribute('href',elem[1][1][0]); + } else { // relative path + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + } + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = decodeHtml(elem[1][1][2]); + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +AstraKernel: src/kernel/start.s File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        start.s File Reference
        +
        + +
        + +
        + + + + diff --git a/docs/html/start_8s_source.html b/docs/html/start_8s_source.html new file mode 100644 index 0000000..b7f2fc0 --- /dev/null +++ b/docs/html/start_8s_source.html @@ -0,0 +1,264 @@ + + + + + + + +AstraKernel: src/kernel/start.s Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        start.s
        +
        +
        +Go to the documentation of this file.
        1/* start.s — ARMv7-A (Cortex-A8), ARM state (A32) */
        +
        2
        +
        3 .syntax unified
        +
        4 .cpu cortex-a8
        +
        5 .arch armv7-a
        +
        6
        +
        7/* ------------------------------------------------------------- */
        +
        8/* Exception Vector Table */
        +
        9/* ------------------------------------------------------------- */
        +
        10 .section .vectors, "ax", %progbits
        +
        11 .align 5 // 32 bytes alignment (8 * 4B)
        +
        12
        +
        13vectors_base:
        +
        14 .global _start
        +
        15 .type _start, %function
        +
        16
        +
        17/* 0x00 Reset */ B _start
        +
        18/* 0x04 Undefined */ B undef_handler
        +
        19/* 0x08 SWI/SVC */ B svc_entry
        +
        20/* 0x0C PrefetchAbt */ B pabort_handler
        +
        21/* 0x10 DataAbt */ B dabort_handler
        +
        22/* 0x14 Reserved */ B reserved_handler
        +
        23/* 0x18 IRQ */ B irq_entry
        +
        24/* 0x1C FIQ */ B fiq_handler
        +
        25
        +
        26/* ------------------------------------------------------------- */
        +
        27/* Reset: Startup Code Section */
        +
        28/* ------------------------------------------------------------- */
        +
        29 .section .text.startup, "ax", %progbits
        +
        30 .align 4
        +
        31
        +
        32 .extern kernel_main
        +
        33 .extern __bss_start
        +
        34 .extern __bss_end
        +
        35 .extern __stack_top__
        +
        36_start:
        +
        37 // Enable Supervisor (SVC) mode explicitly and mask IRQ/FIQ
        +
        38 MRS R0, cpsr // R0 <- CPSR (current status)
        +
        39 BIC R0, R0, #0x1F // Clear Mode Bits (M[4:0])
        +
        40 ORR R0, R0, #0x13 // Set mode = SVC (0b10011)
        +
        41 ORR R0, R0, #(1 << 7) // Set I bit (mask IRQ)
        +
        42 ORR R0, R0, #(1 << 6) // Set F bit (mask FIQ)
        +
        43 MSR cpsr_c, R0 // Write CPSR control field
        +
        44
        +
        45 // Program VBAR to the vector table base (low vectors),
        +
        46 // to force low vector mode (needed for MMU)
        +
        47 // ref: https://developer.arm.com/documentation/ddi0406/b/System-Level-Architecture/Virtual-Memory-System-Architecture--VMSA-/CP15-registers-for-a-VMSA-implementation/c12--Vector-Base-Address-Register--VBAR-
        +
        48 LDR R0, =vectors_base // 32B aligned base of .vectors
        +
        49 MCR P15, 0, R0, C12, C0, 0 // Write CP15 Vector Base Address Register (VBAR)
        +
        50 ISB // This ensure new base is used for exception fetches
        +
        51
        +
        52 // Ensure high vectors are disabled: SCTLR.V = 0
        +
        53 MRC P15, 0, R1, C1, C0, 0 // Read CP15 VBAR
        +
        54 BIC R1, R1, #(1 << 13) // Clear SCTLR.V (high vectors off)
        +
        55 MCR P15, 0, R1, C1, C0, 0 // Write R1 to SCTLR
        +
        56 ISB
        +
        57
        +
        58 // Set SVC stack pointer (top of the RAM)
        +
        59 LDR sp, =__stack_top__
        +
        60 BIC sp, sp, #7 // Align to 8 bytes
        +
        61
        +
        62 // Switch to IRQ mode by init its own stack
        +
        63 MRS R0, cpsr // Save current CPSR
        +
        64 BIC R1, R0, #0x1F // Clear mode bits
        +
        65 ORR R1, R1, #0x12 // Set mode = IRQ (0b10010)
        +
        66 ORR R1, R1, #(1 << 7) // Keep IRQ masked
        +
        67 MSR cpsr_c, R1 // Switch to IRQ mode
        +
        68
        +
        69 LDR sp, =irq_stack_top // Give IRQ mode its own stack
        +
        70 BIC sp, sp, #7
        +
        71
        +
        72 // Back to SVC with IRQ/FIQ still masked
        +
        73 MRS R1, cpsr // R1 <- CPSR in IRQ mode
        +
        74 BIC R1, R1, #0x1F
        +
        75 ORR R1, R1, #0x13 // Set mode = SVC
        +
        76 ORR R1, R1, #(1 << 7) // I = 1 (IRQ)
        +
        77 ORR R1, R1, #(1 << 6) // F = 1 (FIQ)
        +
        78 MSR cpsr_c, R1 // Back to SVC
        +
        79
        +
        80 .extern __data_load
        +
        81 .extern __data_start
        +
        82 .extern __data_end
        +
        83
        +
        84 LDR R0, =__data_load
        +
        85 LDR R1, =__data_start
        +
        86 LDR R2, =__data_end
        +
        871:
        +
        88 CMP R1, R2
        +
        89 BGE 2f
        +
        90 LDR R3, [R0], #4
        +
        91 STR R3, [R1], #4
        +
        92 B 1b
        +
        932:
        +
        94
        +
        95 // Zero init the .bss section
        +
        96 LDR R0, =__bss_start
        +
        97 LDR R1, =__bss_end
        +
        98 MOV R2, #0
        +
        99
        +
        100zero_bss:
        +
        101 CMP R0, R1 // this check if we reach the end
        +
        102 BGE bss_done // if start >= end -> done, else continue
        +
        103 STR R2, [R0], #4 // *R0 = 0; R0 += 4
        +
        104 B zero_bss // Loop back until you reach the end
        +
        105bss_done:
        +
        106 BL kernel_main
        +
        107hang:
        +
        108 B hang // Halt if kernel_main returns (shouldn't happen)
        +
        109
        +
        110// Reserve space for IRQ mode stack
        +
        111 .section .bss
        +
        112 .align 8
        +
        113
        +
        114irq_stack:
        +
        115 .space 1024 // 1 KB stack for IRQ mode
        +
        116irq_stack_top:
        +
        117
        +
        118/* ------------------------------------------------------------- */
        +
        119/* Exception Entries */
        +
        120/* ------------------------------------------------------------- */
        +
        121 .section .text, "ax", %progbits
        +
        122 .align 4
        +
        123
        +
        124 .global svc_entry
        +
        125 .type svc_entry, %function
        +
        126 .extern puts
        +
        127svc_entry:
        +
        128 STMDB sp!, {R0-R3, R12, LR} // save caller-saves register
        +
        129 LDR R0, =svc_msg
        +
        130 BL puts
        +
        131 LDMIA sp!, {R0-R3, R12, LR}
        +
        132 SUBS pc, LR, #0 // return from SVC (restores CPSR)
        +
        133
        +
        134 .global irq_entry
        +
        135 .type irq_entry, %function
        +
        136 .extern irq_handler
        +
        137irq_entry:
        +
        138 STMDB sp!, {R0-R3, R12, LR}
        +
        139 BL irq_handler
        +
        140 LDMIA sp!, {R0-R3, R12, LR}
        +
        141 SUBS pc, LR, #4 // return from IRQ
        +
        142
        +
        143/* ------------------------------------------------------------- */
        +
        144/* Default handlers (spin until implemented) */
        +
        145/* ------------------------------------------------------------- */
        +
        146undef_handler: B hang
        +
        147pabort_handler: B hang
        +
        148dabort_handler: B hang
        +
        149reserved_handler: B hang
        +
        150fiq_handler: B hang
        +
        151
        +
        152/* ------------------------------------------------------------- */
        +
        153/* Read Only Data Section */
        +
        154/* ------------------------------------------------------------- */
        +
        155 .section .rodata
        +
        156svc_msg:
        +
        157 .asciz "SVC Exception Handled!\r\n"
        +
        158
        +
        +
        +
        + + + + diff --git a/docs/html/string_8c.html b/docs/html/string_8c.html new file mode 100644 index 0000000..ad35966 --- /dev/null +++ b/docs/html/string_8c.html @@ -0,0 +1,196 @@ + + + + + + + +AstraKernel: src/user/string.c File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        string.c File Reference
        +
        +
        +
        #include "string.h"
        +
        +Include dependency graph for string.c:
        +
        +
        +
        +
        +

        Go to the source code of this file.

        + + + + + + +

        +Functions

        int strcmp (const char *str_1, const char *str_2)
         Compares two null-terminated strings lexicographically.
        size_t strlen (const char *str)
         Calculates the length of a null-terminated string.
        +

        Function Documentation

        + +

        ◆ strcmp()

        + +
        +
        + + + + + + + + + + + +
        int strcmp (const char * str_1,
        const char * str_2 )
        +
        + +

        Compares two null-terminated strings lexicographically.

        +
        Parameters
        + + + +
        str_1Pointer to the first string to compare.
        str_2Pointer to the second string to compare.
        +
        +
        +
        Returns
        int 0 if strings are equal, -1 if str_1 < str_2, 1 if str_1 > str_2.
        + +

        Definition at line 11 of file string.c.

        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ strlen()

        + +
        +
        + + + + + + + +
        size_t strlen (const char * str)
        +
        + +

        Calculates the length of a null-terminated string.

        +
        Parameters
        + + +
        strPointer to the null-terminated string to be measured.
        +
        +
        +
        Returns
        The number of characters in the string, excluding the null terminator.
        + +

        Definition at line 37 of file string.c.

        + +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/string_8c.js b/docs/html/string_8c.js new file mode 100644 index 0000000..ef5ce69 --- /dev/null +++ b/docs/html/string_8c.js @@ -0,0 +1,5 @@ +var string_8c = +[ + [ "strcmp", "string_8c.html#a49735c99bf645cfa53f5c5c98a7ceea7", null ], + [ "strlen", "string_8c.html#a008e171a518fe0e0352f31b245e03875", null ] +]; \ No newline at end of file diff --git a/docs/html/string_8c__incl.map b/docs/html/string_8c__incl.map new file mode 100644 index 0000000..fca9b58 --- /dev/null +++ b/docs/html/string_8c__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/string_8c__incl.md5 b/docs/html/string_8c__incl.md5 new file mode 100644 index 0000000..c127ffd --- /dev/null +++ b/docs/html/string_8c__incl.md5 @@ -0,0 +1 @@ +d97c305a487cc2f1fa427852f4c51de7 \ No newline at end of file diff --git a/docs/html/string_8c__incl.svg b/docs/html/string_8c__incl.svg new file mode 100644 index 0000000..7d6310f --- /dev/null +++ b/docs/html/string_8c__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/user/string.c + + +Node1 + + +src/user/string.c + + + + + +Node2 + + +string.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stddef.h + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.map b/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.map new file mode 100644 index 0000000..8657133 --- /dev/null +++ b/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.md5 b/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.md5 new file mode 100644 index 0000000..4324c60 --- /dev/null +++ b/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.md5 @@ -0,0 +1 @@ +8e8690c409eb050ee41849e958378b34 \ No newline at end of file diff --git a/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.svg b/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.svg new file mode 100644 index 0000000..be9d6d9 --- /dev/null +++ b/docs/html/string_8c_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +strcmp + + +Node1 + + +strcmp + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/string_8c_source.html b/docs/html/string_8c_source.html new file mode 100644 index 0000000..763577b --- /dev/null +++ b/docs/html/string_8c_source.html @@ -0,0 +1,144 @@ + + + + + + + +AstraKernel: src/user/string.c Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        string.c
        +
        +
        +Go to the documentation of this file.
        1#include "string.h"
        +
        2
        +
        +
        11int strcmp(const char *str_1, const char *str_2)
        +
        12{
        +
        13 unsigned char ch1, ch2;
        +
        14 do
        +
        15 {
        +
        16 ch1 = *str_1++;
        +
        17 ch2 = *str_2++;
        +
        18
        +
        19 if (ch1 != ch2)
        +
        20 {
        +
        21 // NOTE: If needed in the future, can return the difference between
        +
        22 // the strings rather than just -1 or 1
        +
        23 return ch1 < ch2 ? -1 : 1;
        +
        24 }
        +
        25
        +
        26 } while (ch1);
        +
        27
        +
        28 return 0;
        +
        29}
        +
        +
        30
        +
        +
        37size_t strlen(const char *str)
        +
        38{
        +
        39 const char *s = str;
        +
        40 while (*s)
        +
        41 {
        +
        42 ++s;
        +
        43 }
        +
        44 return s - str;
        +
        45}
        +
        +
        size_t strlen(const char *str)
        Calculates the length of a null-terminated string.
        Definition string.c:37
        +
        int strcmp(const char *str_1, const char *str_2)
        Compares two null-terminated strings lexicographically.
        Definition string.c:11
        + +
        +
        +
        + + + + diff --git a/docs/html/string_8h.html b/docs/html/string_8h.html new file mode 100644 index 0000000..72bf59e --- /dev/null +++ b/docs/html/string_8h.html @@ -0,0 +1,201 @@ + + + + + + + +AstraKernel: include/string.h File Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        string.h File Reference
        +
        +
        +
        #include <stddef.h>
        +
        +Include dependency graph for string.h:
        +
        +
        +
        +
        +This graph shows which files directly or indirectly include this file:
        +
        +
        +
        +
        +

        Go to the source code of this file.

        + + + + + + +

        +Functions

        int strcmp (const char *str_1, const char *str_2)
         Compares two null-terminated strings lexicographically.
        size_t strlen (const char *str)
         Calculates the length of a null-terminated string.
        +

        Function Documentation

        + +

        ◆ strcmp()

        + +
        +
        + + + + + + + + + + + +
        int strcmp (const char * str_1,
        const char * str_2 )
        +
        + +

        Compares two null-terminated strings lexicographically.

        +
        Parameters
        + + + +
        str_1Pointer to the first string to compare.
        str_2Pointer to the second string to compare.
        +
        +
        +
        Returns
        int 0 if strings are equal, -1 if str_1 < str_2, 1 if str_1 > str_2.
        + +

        Definition at line 11 of file string.c.

        +
        +Here is the caller graph for this function:
        +
        +
        +
        + +
        +
        + +

        ◆ strlen()

        + +
        +
        + + + + + + + +
        size_t strlen (const char * str)
        +
        + +

        Calculates the length of a null-terminated string.

        +
        Parameters
        + + +
        strPointer to the null-terminated string to be measured.
        +
        +
        +
        Returns
        The number of characters in the string, excluding the null terminator.
        + +

        Definition at line 37 of file string.c.

        + +
        +
        +
        +
        + +
        + + + + diff --git a/docs/html/string_8h.js b/docs/html/string_8h.js new file mode 100644 index 0000000..2ca7a1c --- /dev/null +++ b/docs/html/string_8h.js @@ -0,0 +1,5 @@ +var string_8h = +[ + [ "strcmp", "string_8h.html#a49735c99bf645cfa53f5c5c98a7ceea7", null ], + [ "strlen", "string_8h.html#a008e171a518fe0e0352f31b245e03875", null ] +]; \ No newline at end of file diff --git a/docs/html/string_8h__dep__incl.map b/docs/html/string_8h__dep__incl.map new file mode 100644 index 0000000..68a5286 --- /dev/null +++ b/docs/html/string_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/string_8h__dep__incl.md5 b/docs/html/string_8h__dep__incl.md5 new file mode 100644 index 0000000..b1c7f1e --- /dev/null +++ b/docs/html/string_8h__dep__incl.md5 @@ -0,0 +1 @@ +ae7d3aeac9d0566d9b4ed236b7dadfa2 \ No newline at end of file diff --git a/docs/html/string_8h__dep__incl.svg b/docs/html/string_8h__dep__incl.svg new file mode 100644 index 0000000..ae8173f --- /dev/null +++ b/docs/html/string_8h__dep__incl.svg @@ -0,0 +1,57 @@ + + + + + + +include/string.h + + +Node1 + + +include/string.h + + + + + +Node2 + + +src/kernel/kernel.c + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/user/string.c + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/string_8h__incl.map b/docs/html/string_8h__incl.map new file mode 100644 index 0000000..e0970d9 --- /dev/null +++ b/docs/html/string_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/string_8h__incl.md5 b/docs/html/string_8h__incl.md5 new file mode 100644 index 0000000..0b0ec07 --- /dev/null +++ b/docs/html/string_8h__incl.md5 @@ -0,0 +1 @@ +ce19c7f78dcc3f96d5413de6cb36fb38 \ No newline at end of file diff --git a/docs/html/string_8h__incl.svg b/docs/html/string_8h__incl.svg new file mode 100644 index 0000000..76fd453 --- /dev/null +++ b/docs/html/string_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +include/string.h + + +Node1 + + +include/string.h + + + + + +Node2 + + +stddef.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.map b/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.map new file mode 100644 index 0000000..8657133 --- /dev/null +++ b/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.md5 b/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.md5 new file mode 100644 index 0000000..4324c60 --- /dev/null +++ b/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.md5 @@ -0,0 +1 @@ +8e8690c409eb050ee41849e958378b34 \ No newline at end of file diff --git a/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.svg b/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.svg new file mode 100644 index 0000000..be9d6d9 --- /dev/null +++ b/docs/html/string_8h_a49735c99bf645cfa53f5c5c98a7ceea7_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +strcmp + + +Node1 + + +strcmp + + + + + +Node2 + + +kernel_main + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/string_8h_source.html b/docs/html/string_8h_source.html new file mode 100644 index 0000000..cd3f4c8 --- /dev/null +++ b/docs/html/string_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + +AstraKernel: include/string.h Source File + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        string.h
        +
        +
        +Go to the documentation of this file.
        1#pragma once
        +
        2
        +
        3#include <stddef.h>
        +
        4
        +
        5#ifdef __cplusplus
        +
        6extern "C"
        +
        7{
        +
        8#endif
        +
        9
        +
        10 int strcmp(const char *str_1, const char *str_2);
        +
        11 size_t strlen(const char *str);
        +
        12
        +
        13#ifdef __cplusplus
        +
        14}
        +
        15#endif
        +
        16
        +
        size_t strlen(const char *str)
        Calculates the length of a null-terminated string.
        Definition string.c:37
        +
        int strcmp(const char *str_1, const char *str_2)
        Compares two null-terminated strings lexicographically.
        Definition string.c:11
        +
        +
        +
        + + + + diff --git a/docs/html/struct_format___state-members.html b/docs/html/struct_format___state-members.html new file mode 100644 index 0000000..91bbb84 --- /dev/null +++ b/docs/html/struct_format___state-members.html @@ -0,0 +1,110 @@ + + + + + + + +AstraKernel: Member List + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        Format_State Member List
        +
        +
        + +

        This is the complete list of members for Format_State, including all inherited members.

        + + + +
        flagsFormat_State
        numFormat_State
        +
        +
        + + + + diff --git a/docs/html/struct_format___state.html b/docs/html/struct_format___state.html new file mode 100644 index 0000000..090b401 --- /dev/null +++ b/docs/html/struct_format___state.html @@ -0,0 +1,171 @@ + + + + + + + +AstraKernel: Format_State Struct Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        Format_State Struct Reference
        +
        +
        + +

        Stores the current numeric value and formatting flags. + More...

        + +

        #include <printf.h>

        + + + + + + +

        +Public Attributes

        unsigned long long num
         The numeric value to be printed.
        uint8_t flags
         Bitmask of FLAG_* constants describing format.
        +

        Detailed Description

        +

        Stores the current numeric value and formatting flags.

        +

        This structure is passed to integer-formatting functions during printf processing. It represents the transient state for one format specifier.

        + +

        Definition at line 51 of file printf.h.

        +

        Member Data Documentation

        + +

        ◆ flags

        + +
        +
        + + + + +
        uint8_t Format_State::flags
        +
        + +

        Bitmask of FLAG_* constants describing format.

        + +

        Definition at line 53 of file printf.h.

        + +
        +
        + +

        ◆ num

        + +
        +
        + + + + +
        unsigned long long Format_State::num
        +
        + +

        The numeric value to be printed.

        + +

        Definition at line 52 of file printf.h.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + +
        + + + + diff --git a/docs/html/struct_format___state.js b/docs/html/struct_format___state.js new file mode 100644 index 0000000..7e267e0 --- /dev/null +++ b/docs/html/struct_format___state.js @@ -0,0 +1,5 @@ +var struct_format___state = +[ + [ "flags", "struct_format___state.html#a8e9f520821a5c2d969f3bc9195145dac", null ], + [ "num", "struct_format___state.html#a0b085f36471887da4f0b5e93001b4fdb", null ] +]; \ No newline at end of file diff --git a/docs/html/structdateval-members.html b/docs/html/structdateval-members.html new file mode 100644 index 0000000..5a013d5 --- /dev/null +++ b/docs/html/structdateval-members.html @@ -0,0 +1,111 @@ + + + + + + + +AstraKernel: Member List + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        dateval Member List
        +
        +
        + +

        This is the complete list of members for dateval, including all inherited members.

        + + + + +
        daydateval
        monthdateval
        yeardateval
        +
        +
        + + + + diff --git a/docs/html/structdateval.html b/docs/html/structdateval.html new file mode 100644 index 0000000..aee8e6e --- /dev/null +++ b/docs/html/structdateval.html @@ -0,0 +1,177 @@ + + + + + + + +AstraKernel: dateval Struct Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        dateval Struct Reference
        +
        +
        + +

        #include <datetime.h>

        + + + + + +

        +Public Attributes

        uint32_t day
        uint32_t month
        uint32_t year
        +

        Detailed Description

        +
        +

        Definition at line 17 of file datetime.h.

        +

        Member Data Documentation

        + +

        ◆ day

        + +
        +
        + + + + +
        uint32_t dateval::day
        +
        + +

        Definition at line 19 of file datetime.h.

        + +
        +
        + +

        ◆ month

        + +
        +
        + + + + +
        uint32_t dateval::month
        +
        + +

        Definition at line 20 of file datetime.h.

        + +
        +
        + +

        ◆ year

        + +
        +
        + + + + +
        uint32_t dateval::year
        +
        + +

        Definition at line 21 of file datetime.h.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + +
        + + + + diff --git a/docs/html/structdateval.js b/docs/html/structdateval.js new file mode 100644 index 0000000..ec17057 --- /dev/null +++ b/docs/html/structdateval.js @@ -0,0 +1,6 @@ +var structdateval = +[ + [ "day", "structdateval.html#ac90484ba884dbc4d453976120a111c76", null ], + [ "month", "structdateval.html#a24c5854c50c27c8743e8dce356602c11", null ], + [ "year", "structdateval.html#ab84a06feb804ed04520b2355b364daea", null ] +]; \ No newline at end of file diff --git a/docs/html/structtimeval-members.html b/docs/html/structtimeval-members.html new file mode 100644 index 0000000..258ae6a --- /dev/null +++ b/docs/html/structtimeval-members.html @@ -0,0 +1,111 @@ + + + + + + + +AstraKernel: Member List + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        timeval Member List
        +
        +
        + +

        This is the complete list of members for timeval, including all inherited members.

        + + + + +
        hrstimeval
        minstimeval
        secstimeval
        +
        +
        + + + + diff --git a/docs/html/structtimeval.html b/docs/html/structtimeval.html new file mode 100644 index 0000000..feffb7a --- /dev/null +++ b/docs/html/structtimeval.html @@ -0,0 +1,177 @@ + + + + + + + +AstraKernel: timeval Struct Reference + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        timeval Struct Reference
        +
        +
        + +

        #include <datetime.h>

        + + + + + +

        +Public Attributes

        uint32_t hrs
        uint32_t mins
        uint32_t secs
        +

        Detailed Description

        +
        +

        Definition at line 10 of file datetime.h.

        +

        Member Data Documentation

        + +

        ◆ hrs

        + +
        +
        + + + + +
        uint32_t timeval::hrs
        +
        + +

        Definition at line 12 of file datetime.h.

        + +
        +
        + +

        ◆ mins

        + +
        +
        + + + + +
        uint32_t timeval::mins
        +
        + +

        Definition at line 13 of file datetime.h.

        + +
        +
        + +

        ◆ secs

        + +
        +
        + + + + +
        uint32_t timeval::secs
        +
        + +

        Definition at line 14 of file datetime.h.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + +
        + + + + diff --git a/docs/html/structtimeval.js b/docs/html/structtimeval.js new file mode 100644 index 0000000..24f27df --- /dev/null +++ b/docs/html/structtimeval.js @@ -0,0 +1,6 @@ +var structtimeval = +[ + [ "hrs", "structtimeval.html#a6e62d267f33ee409bbab00d2f86b43fc", null ], + [ "mins", "structtimeval.html#ab572bcefc22589608f6f9b17db4c67d0", null ], + [ "secs", "structtimeval.html#a6298d86d865364801b3c1a976661bab8", null ] +]; \ No newline at end of file diff --git a/docs/html/tabs.css b/docs/html/tabs.css new file mode 100644 index 0000000..84f33ae --- /dev/null +++ b/docs/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-color:var(--nav-menu-background-color)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;line-height:36px;text-decoration:none;color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-color:var(--nav-menu-active-bg);border-radius:5px}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-color:var(--nav-menu-active-bg);border-radius:5px}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-color:var(--nav-menu-background-color);line-height:36px}.sm-dox a span.sub-arrow{top:15px;right:10px;box-sizing:content-box;padding:0;margin:0;display:inline-block;width:5px;height:5px;background-color:var(--nav-menu-background-color);border-right:2px solid var(--nav-arrow-color);border-bottom:2px solid var(--nav-arrow-color);transform:rotate(45deg);-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 6px}.sm-dox a:hover{background-color:var(--nav-menu-active-bg);border-radius:5px !important}.sm-dox a:hover span.sub-arrow{background-color:var(--nav-menu-active-bg);border-right:2px solid var(--nav-arrow-selected-color);border-bottom:2px solid var(--nav-arrow-selected-color)}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0;padding:3px}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{transform:rotate(-45deg)}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-color:var(--nav-menu-active-bg);border-radius:5px}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:6px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:6px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/docs/html/todo.html b/docs/html/todo.html new file mode 100644 index 0000000..00c4dee --- /dev/null +++ b/docs/html/todo.html @@ -0,0 +1,112 @@ + + + + + + + +AstraKernel: Todo List + + + + + + + + + + + + + + +
        +
        + + + + + + +
        +
        AstraKernel v0.1.0 +
        +
        A minimalist experimental ARM kernel
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        Todo List
        +
        +
        +
        +
        Member kernel_panic (const char *message)
        +
        Replace string-only message with structured error codes (see errno.h/.c). https://github.com/dthain/basekernel/blob/master/library/errno.c
        +
        Member UART0_BASE
        +
        : See to move this mathematical operation to math.c/.h
        +
        +
        +
        +
        +
        + + + + diff --git a/docs/pages/panic.md b/docs/pages/panic.md new file mode 100644 index 0000000..1168896 --- /dev/null +++ b/docs/pages/panic.md @@ -0,0 +1,15 @@ +# Kernel Panic Subsystem + +The panic subsystem provides the kernel with a controlled way +to stop execution when a fatal error occurs. + +## Design +- Panics print an error message to the console before halting. +- The halt routine disables interrupts and executes `wfi` + indefinitely, ensuring the CPU does not execute further + instructions. + +## Future Plans +- Add structured error codes via `errno.h/.c`. +- Provide hooks for logging the panic state (e.g., stack trace). +- Possibly support multi-core halting (broadcast halt signal).