add website
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,236 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS userspace configuration and TOML API">
|
||||
<title>Configuration and TOML - MontaukOS</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.75em; }
|
||||
h2 { margin: 1.25em 0 0.5em; }
|
||||
h3 { margin: 1em 0 0.35em; }
|
||||
.sidebar { width: 160px; flex-shrink: 0; }
|
||||
.sidebar ul { list-style: none; padding: 0; }
|
||||
.sidebar li { margin: 0.5em 0; }
|
||||
.sidebar a { color: #0066CC; text-decoration: none; font-weight: 600; }
|
||||
.sidebar a:hover { color: #004499; text-decoration: underline; }
|
||||
.sidebar .current { color: #004499; }
|
||||
.sidebar hr { border: none; border-top: 1px solid #999; margin: 0.75em 0; }
|
||||
.main { flex: 1; min-width: 0; }
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.center { text-align: center; }
|
||||
pre {
|
||||
background: #f4f4f4;
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.75em;
|
||||
overflow-x: auto;
|
||||
}
|
||||
code { font-family: monospace; }
|
||||
@media (max-width: 700px) {
|
||||
body { flex-direction: column; gap: 1em; padding: 1em 0.75em; }
|
||||
.sidebar { width: auto; }
|
||||
.sidebar ul { display: flex; flex-wrap: wrap; gap: 0 1em; }
|
||||
.sidebar hr { width: 100%; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html">Application Programming Manual</a></li>
|
||||
<li><a href="config.html" class="current">Configuration and TOML</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>Configuration and TOML</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<p>MontaukOS provides a small header-only C++ API for reading and writing
|
||||
TOML configuration files from userspace. Include
|
||||
<code><montauk/config.h></code> for file-backed configuration and
|
||||
<code><montauk/toml.h></code> for the in-memory TOML document model.</p>
|
||||
|
||||
<h2>Configuration locations</h2>
|
||||
|
||||
<p>System configuration is stored in <code>0:/config</code>. The API accepts a
|
||||
name without the <code>.toml</code> extension:</p>
|
||||
|
||||
<pre><code>0:/config/desktop.toml
|
||||
0:/config/network.toml</code></pre>
|
||||
|
||||
<p>Per-user configuration is stored below the user directory:</p>
|
||||
|
||||
<pre><code>0:/users/<username>/config/<name>.toml</code></pre>
|
||||
|
||||
<h2>Loading and saving</h2>
|
||||
|
||||
<pre><code>#include <montauk/config.h>
|
||||
|
||||
auto doc = montauk::config::load("desktop");
|
||||
const char* theme = doc.get_string("appearance.theme", "light");
|
||||
|
||||
montauk::config::set_string(&doc, "appearance.theme", "dark");
|
||||
int result = montauk::config::save("desktop", &doc);
|
||||
|
||||
doc.destroy();</code></pre>
|
||||
|
||||
<p><code>load()</code> returns an initialized empty document if the file does
|
||||
not exist. <code>save()</code> creates the configuration directory and returns
|
||||
<code>0</code> on success or a negative value on error. Saving rewrites the
|
||||
whole file.</p>
|
||||
|
||||
<h3>System configuration API</h3>
|
||||
|
||||
<pre><code>toml::Doc config::load(const char* name);
|
||||
int config::save(const char* name, toml::Doc* doc);
|
||||
int config::remove(const char* name);</code></pre>
|
||||
|
||||
<h3>Per-user configuration API</h3>
|
||||
|
||||
<pre><code>toml::Doc config::load_user(const char* username, const char* name);
|
||||
int config::save_user(const char* username,
|
||||
const char* name,
|
||||
toml::Doc* doc);</code></pre>
|
||||
|
||||
<p>For example:</p>
|
||||
|
||||
<pre><code>auto doc = montauk::config::load_user("alice", "desktop");
|
||||
bool clock24 = doc.get_bool("display.clock_24h", false);
|
||||
|
||||
montauk::config::set_bool(&doc, "display.clock_24h", true);
|
||||
montauk::config::save_user("alice", "desktop", &doc);
|
||||
doc.destroy();</code></pre>
|
||||
|
||||
<h2>Reading values</h2>
|
||||
|
||||
<p>Keys may use dotted paths corresponding to TOML tables:</p>
|
||||
|
||||
<pre><code>[server]
|
||||
host = "pool.ntp.org"
|
||||
port = 123
|
||||
enabled = true</code></pre>
|
||||
|
||||
<pre><code>const char* host = doc.get_string("server.host", "localhost");
|
||||
int64_t port = doc.get_int("server.port", 80);
|
||||
bool enabled = doc.get_bool("server.enabled", false);</code></pre>
|
||||
|
||||
<p>Typed getters return their default when the key is absent or has another
|
||||
type. The available value types are:</p>
|
||||
|
||||
<pre><code>toml::Type::String
|
||||
toml::Type::Int
|
||||
toml::Type::Bool
|
||||
toml::Type::Array
|
||||
toml::Type::Table</code></pre>
|
||||
|
||||
<p>Arrays and tables are returned as <code>toml::Value*</code>. Their children
|
||||
are available through <code>value->array.items</code> and
|
||||
<code>value->array.count</code>:</p>
|
||||
|
||||
<pre><code>auto* names = doc.get_array("server.names");
|
||||
if (names) {
|
||||
for (int i = 0; i < names->array.count; ++i) {
|
||||
auto* item = names->array.items[i];
|
||||
if (item->type == montauk::toml::Type::String)
|
||||
montauk::print(item->str);
|
||||
}
|
||||
}</code></pre>
|
||||
|
||||
<h2>Modifying documents</h2>
|
||||
|
||||
<pre><code>void config::set_string(toml::Doc* doc,
|
||||
const char* key, const char* value);
|
||||
void config::set_int(toml::Doc* doc,
|
||||
const char* key, int64_t value);
|
||||
void config::set_bool(toml::Doc* doc,
|
||||
const char* key, bool value);
|
||||
bool config::unset(toml::Doc* doc, const char* key);</code></pre>
|
||||
|
||||
<p>The setters overwrite an existing value or append a new one. The
|
||||
<code>unset()</code> return value is <code>true</code> when a matching key was
|
||||
removed.</p>
|
||||
|
||||
<h2>Parsing and serialization</h2>
|
||||
|
||||
<p>Use <code>toml::parse()</code> when TOML is already available in memory:</p>
|
||||
|
||||
<pre><code>const char* text =
|
||||
"[server]\n"
|
||||
"port = 8080\n"
|
||||
"enabled = true\n";
|
||||
|
||||
auto doc = montauk::toml::parse(text);
|
||||
int64_t port = doc.get_int("server.port");
|
||||
doc.destroy();</code></pre>
|
||||
|
||||
<p>A document can be serialized to newly allocated TOML text:</p>
|
||||
|
||||
<pre><code>char* text = montauk::config::serialize(&doc);
|
||||
// Use text...
|
||||
montauk::mfree(text);</code></pre>
|
||||
|
||||
<p>Serialization produces normalized TOML and does not preserve comments or
|
||||
the original formatting.</p>
|
||||
|
||||
<h2>Memory ownership</h2>
|
||||
|
||||
<p><code>toml::Doc</code> owns its parsed values and strings. Every document
|
||||
returned by <code>load()</code>, <code>load_user()</code>, or
|
||||
<code>toml::parse()</code> must eventually be released with
|
||||
<code>doc.destroy()</code>.</p>
|
||||
|
||||
<p>When constructing a document manually, initialize it before using the
|
||||
mutation helpers:</p>
|
||||
|
||||
<pre><code>montauk::toml::Doc doc;
|
||||
doc.init();
|
||||
montauk::config::set_bool(&doc, "enabled", true);
|
||||
montauk::config::save("example", &doc);
|
||||
doc.destroy();</code></pre>
|
||||
|
||||
<h2>Supported TOML features</h2>
|
||||
|
||||
<p>The userspace parser supports strings, literal and multiline strings,
|
||||
integers (including hexadecimal, octal, and binary forms), booleans, arrays,
|
||||
tables, inline tables, dotted keys, and comments.</p>
|
||||
|
||||
<p>There are no typed float or datetime accessors. Callers should also treat
|
||||
configuration names and usernames as safe path components, since they are
|
||||
used to construct filesystem paths.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="index.html">Back to Application Programming Manual</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,291 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS dialogs library API">
|
||||
<title>Dialogs Library - MontaukOS</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
h3 { margin: 0.75em 0 0.35em; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #999;
|
||||
padding: 0.35em 0.5em;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
th { background: #f0f0f0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.figure {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.figure img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border: 1px solid #999;
|
||||
}
|
||||
.figure p {
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
margin: 0.25em 0 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html">Application Programming Manual</a></li>
|
||||
<li><a href="dialogs.html" class="current">Dialogs library</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>Dialogs</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Overview</h2>
|
||||
<p>
|
||||
The dialogs library (at 0:/os/dialogs.lib) provides the following system dialogs across apps:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>File selection (Open)</li>
|
||||
<li>File save location selection (Save)</li>
|
||||
<li>Print setup/submission</li>
|
||||
<li>Message Box popups</li>
|
||||
</ul>
|
||||
|
||||
<h2>Message Box</h2>
|
||||
<p>
|
||||
<i>message_box</i> displays a popup window with text and buttons.
|
||||
</p>
|
||||
|
||||
<pre><code>gui::dialogs::MessageBoxResult message_box(
|
||||
const char* title,
|
||||
const char* message,
|
||||
gui::dialogs::MessageBoxButtons buttons = gui::dialogs::MESSAGE_BOX_OK,
|
||||
char* out_message = nullptr,
|
||||
int out_message_len = 0);</code></pre>
|
||||
|
||||
<h3>Button Sets</h3>
|
||||
<table>
|
||||
<tr><th>Value</th><th>Buttons</th></tr>
|
||||
<tr><td>MESSAGE_BOX_OK</td><td>OK</td></tr>
|
||||
<tr><td>MESSAGE_BOX_OK_CANCEL</td><td>OK, Cancel</td></tr>
|
||||
<tr><td>MESSAGE_BOX_YES_NO</td><td>Yes, No</td></tr>
|
||||
<tr><td>MESSAGE_BOX_YES_NO_CANCEL</td><td>Yes, No, Cancel</td></tr>
|
||||
</table>
|
||||
|
||||
<h3>Results</h3>
|
||||
<table>
|
||||
<tr><th>Value</th><th>Meaning</th></tr>
|
||||
<tr><td>MESSAGE_BOX_RESULT_OK</td><td>The user selected OK.</td></tr>
|
||||
<tr><td>MESSAGE_BOX_RESULT_CANCEL</td><td>The user selected Cancel or closed a cancelable dialog.</td></tr>
|
||||
<tr><td>MESSAGE_BOX_RESULT_YES</td><td>The user selected Yes.</td></tr>
|
||||
<tr><td>MESSAGE_BOX_RESULT_NO</td><td>The user selected No, or closed a Yes/No dialog.</td></tr>
|
||||
<tr><td>MESSAGE_BOX_RESULT_NONE</td><td>The dialog could not be loaded or invoked.</td></tr>
|
||||
</table>
|
||||
|
||||
<h3>Example</h3>
|
||||
<pre><code>#include <gui/dialogs.hpp>
|
||||
|
||||
void show_confirm() {
|
||||
auto result = gui::dialogs::message_box(
|
||||
"Close Document",
|
||||
"Discard unsaved changes?",
|
||||
gui::dialogs::MESSAGE_BOX_YES_NO_CANCEL);
|
||||
|
||||
if (result == gui::dialogs::MESSAGE_BOX_RESULT_YES) {
|
||||
/* discard and close */
|
||||
}
|
||||
}</code></pre>
|
||||
|
||||
<div class="figure">
|
||||
<img src="assets/discard_dialog.png" width="337" height="181" alt="Message box asking whether to discard unsaved changes">
|
||||
<p>Example <i>MESSAGE_BOX_YES_NO_CANCEL</i> dialog.</p>
|
||||
</div>
|
||||
|
||||
<h2>File Dialogs</h2>
|
||||
<p>
|
||||
File dialog helpers allow applications to use graphical file selection views (similar to the Files app) to select paths for Open/Save operations.
|
||||
</p>
|
||||
|
||||
<pre><code>bool open_file(
|
||||
const char* title,
|
||||
const char* initial_path,
|
||||
char* out_path,
|
||||
int out_path_len,
|
||||
char* out_message = nullptr,
|
||||
int out_message_len = 0);
|
||||
|
||||
bool save_file(
|
||||
const char* title,
|
||||
const char* initial_path,
|
||||
const char* suggested_name,
|
||||
char* out_path,
|
||||
int out_path_len,
|
||||
char* out_message = nullptr,
|
||||
int out_message_len = 0);</code></pre>
|
||||
|
||||
<p>
|
||||
Use <code>initial_path</code> to select the starting directory or current file
|
||||
context. <code>save_file</code> also accepts a <code>suggested_name</code> for
|
||||
the filename field.
|
||||
</p>
|
||||
|
||||
<h3>Open Example</h3>
|
||||
<pre><code>char path[256];
|
||||
char message[160];
|
||||
|
||||
if (gui::dialogs::open_file("Open File", "", path, sizeof(path),
|
||||
message, sizeof(message))) {
|
||||
/* open path */
|
||||
}</code></pre>
|
||||
|
||||
<h3>Save Example</h3>
|
||||
<pre><code>char path[256];
|
||||
|
||||
if (gui::dialogs::save_file("Save File", "", "untitled.txt",
|
||||
path, sizeof(path))) {
|
||||
/* write path */
|
||||
}</code></pre>
|
||||
|
||||
<div class="figure">
|
||||
<img src="assets/save_dialog.png" width="749" height="581" alt="Save file dialog showing folders and a filename field">
|
||||
<p>Save-file dialog as used by the MontaukOS Word Processor app.</p>
|
||||
</div>
|
||||
|
||||
<h2>Print Dialogs</h2>
|
||||
<p>
|
||||
Print dialog helpers allow applications to expose printer configuration to the user, and submit a file for printing.
|
||||
</p>
|
||||
|
||||
<pre><code>bool configure_print(
|
||||
const char* title,
|
||||
const char* initial_printer_uri,
|
||||
const char* job_name,
|
||||
char* out_printer_uri,
|
||||
int out_printer_uri_len,
|
||||
char* out_printer_name,
|
||||
int out_printer_name_len,
|
||||
uint32_t* out_copies = nullptr,
|
||||
char* out_message = nullptr,
|
||||
int out_message_len = 0);
|
||||
|
||||
bool print_file(
|
||||
const char* title,
|
||||
const char* source_path,
|
||||
const char* job_name,
|
||||
char* out_job_id,
|
||||
int out_job_id_len,
|
||||
char* out_message = nullptr,
|
||||
int out_message_len = 0);</code></pre>
|
||||
|
||||
|
||||
<h2>Include</h2>
|
||||
<pre><code>#include <gui/dialogs.hpp></code></pre><br>
|
||||
|
||||
<hr>
|
||||
<p class="center">Copyright © 2026 Montauk Operating System Project. All rights reserved.<br><br>Page last revised 26 May 2026.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,144 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Documentation">
|
||||
<title>Documentation - MontaukOS</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
h3 { margin: 0.75em 0 0.35em; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../index.html">Home</a></li>
|
||||
<li><a href="../downloads.html">Downloads</a></li>
|
||||
<li><a href="index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>Documentation</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>User Documentation</h2>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<a href="tutorials/index.html">User tutorials</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="man/index.html">Man pages</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Developer Documentation</h2>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<a href="apm/config.html">Configuration and TOML</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="apm/dialogs.html">Dialogs library</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Home</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,166 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: dhcp(1) - obtain network configuration via DHCP">
|
||||
<title>dhcp(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>dhcp(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
dhcp - obtain network configuration via DHCP
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
dhcp
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
The DHCP client automatically obtains an IP address, subnet mask,
|
||||
default gateway, and other network parameters from a DHCP server
|
||||
on the local network using the Dynamic Host Configuration Protocol
|
||||
(RFC 2131).
|
||||
|
||||
On success the network configuration is applied immediately via
|
||||
set_netcfg(). On failure the original configuration is restored.
|
||||
|
||||
The client is run automatically by the init system at boot, but
|
||||
may also be invoked manually from the shell.
|
||||
|
||||
<strong>PROTOCOL</strong>
|
||||
The client performs the standard four-message DHCP exchange:
|
||||
|
||||
1. DHCPDISCOVER Broadcast to 255.255.255.255:67
|
||||
2. DHCPOFFER Server offers an IP address
|
||||
3. DHCPREQUEST Client accepts the offered address
|
||||
4. DHCPACK Server confirms the lease
|
||||
|
||||
The BROADCAST flag (0x8000) is set so that server replies are
|
||||
sent to the broadcast address, since the client has no IP yet.
|
||||
|
||||
Each step has a 10-second timeout. If no response is received
|
||||
the client exits with an error and restores the previous config.
|
||||
|
||||
<strong>OUTPUT</strong>
|
||||
On success the client prints the assigned configuration:
|
||||
|
||||
IP Address, Subnet Mask, Gateway, DNS Server, Lease Time
|
||||
|
||||
<strong>OPTIONS</strong>
|
||||
The DHCP client requests the following options from the server:
|
||||
|
||||
1 Subnet Mask
|
||||
3 Router (default gateway)
|
||||
6 DNS Server
|
||||
51 Lease Time
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
ifconfig(1), shell(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,169 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: edit(1) - text editor for MontaukOS">
|
||||
<title>edit(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>edit(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
edit - text editor for MontaukOS
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
edit [filename]
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
edit is an interactive text editor. When invoked with a filename,
|
||||
it opens the file for editing. If the file does not exist, a new
|
||||
empty buffer is created and will be saved to that path on write.
|
||||
|
||||
When invoked without arguments, edit opens an empty buffer. You
|
||||
will be prompted for a filename when saving.
|
||||
|
||||
<strong>KEYBOARD SHORTCUTS</strong>
|
||||
|
||||
<strong>Navigation</strong>
|
||||
Arrow Keys Move cursor up/down/left/right
|
||||
Home Move to start of line
|
||||
End Move to end of line
|
||||
Page Up Scroll up one page
|
||||
Page Down Scroll down one page
|
||||
|
||||
<strong>Editing</strong>
|
||||
Backspace Delete character before cursor
|
||||
Delete Delete character at cursor
|
||||
Enter Insert new line
|
||||
Tab Insert 4 spaces
|
||||
|
||||
<strong>Commands</strong>
|
||||
Ctrl+S Save file
|
||||
Ctrl+Q Quit (warns if unsaved changes)
|
||||
Ctrl+F Search for text
|
||||
Ctrl+G Find next occurrence
|
||||
|
||||
<strong>DISPLAY</strong>
|
||||
The top line shows the filename, a modified indicator [+],
|
||||
and the current cursor position (Ln, Col).
|
||||
|
||||
The bottom line shows keyboard shortcuts or status messages.
|
||||
|
||||
Line numbers are displayed in a gutter on the left side.
|
||||
Lines past the end of the file are marked with ~.
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
edit intro.1 Edit a file
|
||||
edit Open a new empty buffer
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
cat(1), shell(1)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,180 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: fetch(1) - HTTP/HTTPS client for MontaukOS">
|
||||
<title>fetch(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>fetch(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
fetch - HTTP/HTTPS client for MontaukOS
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
fetch [-v] <url>
|
||||
fetch [-v] <host> <port> [path]
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
fetch performs an HTTP/1.0 GET request and prints the response
|
||||
body to the terminal. Supports both plain HTTP and HTTPS (TLS 1.2)
|
||||
connections. By default only the body is printed.
|
||||
|
||||
In URL mode, the scheme (http:// or https://) determines whether
|
||||
TLS is used. The port defaults to 80 for HTTP and 443 for HTTPS.
|
||||
|
||||
In legacy mode, the host and port are specified as separate
|
||||
arguments and the connection is always plain HTTP.
|
||||
|
||||
The host may be an IP address or a hostname. Hostnames are
|
||||
resolved via the configured DNS server.
|
||||
|
||||
If no path is given, "/" is used.
|
||||
|
||||
<strong>OPTIONS</strong>
|
||||
<strong>-v</strong>
|
||||
Verbose mode. Print connection info, trust anchor count, TLS
|
||||
handshake progress, and the HTTP status/size header before
|
||||
the body.
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
fetch https://icanhazip.com
|
||||
Print your public IP address over HTTPS.
|
||||
|
||||
fetch http://icanhazip.com
|
||||
Same, but over plain HTTP.
|
||||
|
||||
fetch -v https://example.com
|
||||
Fetch a page with verbose output showing:
|
||||
Connecting to example.com:443 (HTTPS)...
|
||||
Loaded 128 trust anchors
|
||||
TLS handshake...
|
||||
TLS connection established
|
||||
GET /
|
||||
HTTP 200 OK (1256 bytes)
|
||||
|
||||
fetch 10.0.68.1 80 /
|
||||
Fetch from a local server by IP (legacy syntax).
|
||||
|
||||
<strong>TLS SUPPORT</strong>
|
||||
HTTPS connections use BearSSL for TLS 1.2. Server certificates
|
||||
are validated against the system CA bundle at
|
||||
0:/os/certs/ca-certificates.crt.
|
||||
|
||||
Entropy for the TLS handshake is provided by RDTSC-seeded
|
||||
random data via the SYS_GETRANDOM syscall.
|
||||
|
||||
<strong>KEYBOARD</strong>
|
||||
Ctrl+Q Abort the request
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
ping(1), nslookup(1), tcpconnect(1), shell(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,220 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: file(2) - file I/O system calls">
|
||||
<title>file(2) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>file(2)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
open, read, getsize, close, readdir - file I/O system calls
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong> int montauk::open(const char* path);</strong>
|
||||
<strong> int montauk::read(int handle, uint8_t* buf, uint64_t offset, uint64_t size);</strong>
|
||||
<strong> uint64_t montauk::getsize(int handle);</strong>
|
||||
<strong> void montauk::close(int handle);</strong>
|
||||
<strong> int montauk::readdir(const char* path, const char** names, int max);</strong>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
MontaukOS provides a Virtual File System (VFS) with read/write
|
||||
support. Drive 0 is the boot ramdisk; additional drives may be
|
||||
mounted from GPT partitions backed by FAT32 or ext2 (see
|
||||
syscalls(2), STORAGE section). Files are accessed via paths in
|
||||
the format "<drive>:/<path>".
|
||||
|
||||
<strong>open</strong>
|
||||
Opens a file and returns a non-negative handle on success, or a
|
||||
negative value on error (file not found, no free handles).
|
||||
|
||||
int h = montauk::open("0:/os/hello.elf");
|
||||
|
||||
<strong>read</strong>
|
||||
Reads up to 'size' bytes starting at 'offset' into 'buf'.
|
||||
Returns the number of bytes actually read, or negative on error.
|
||||
There is no implicit file position -- the offset is explicit on
|
||||
every call.
|
||||
|
||||
uint8_t buf[512];
|
||||
int n = montauk::read(h, buf, 0, 512);
|
||||
|
||||
<strong>getsize</strong>
|
||||
Returns the total size in bytes of the file.
|
||||
|
||||
uint64_t sz = montauk::getsize(h);
|
||||
|
||||
<strong>close</strong>
|
||||
Closes the file handle and frees kernel resources.
|
||||
|
||||
montauk::close(h);
|
||||
|
||||
<strong>readdir</strong>
|
||||
Lists entries in a directory. Up to 'max' entry names (VFS cap
|
||||
256, driver-backed listings such as 0:/os/ cap 128) are written
|
||||
to the 'names' array. The kernel allocates a user-accessible
|
||||
page for the string data automatically. Directory entries are
|
||||
returned with a trailing slash.
|
||||
|
||||
const char* entries[64];
|
||||
int count = montauk::readdir("0:/", entries, 64);
|
||||
// entries: "os/", "apps/", "man/", "www/", "users/", ...
|
||||
|
||||
For directories that may contain more entries than fit in one
|
||||
call, use montauk::readdir_at(path, names, max, startIndex) and
|
||||
advance startIndex by the returned count until it returns 0.
|
||||
|
||||
<strong>READING PATTERN</strong>
|
||||
The standard pattern for reading a file:
|
||||
|
||||
int h = montauk::open("0:/man/intro.1");
|
||||
uint64_t size = montauk::getsize(h);
|
||||
uint8_t buf[512];
|
||||
uint64_t off = 0;
|
||||
while (off < size) {
|
||||
uint64_t chunk = size - off;
|
||||
if (chunk > 511) chunk = 511;
|
||||
int n = montauk::read(h, buf, off, chunk);
|
||||
if (n <= 0) break;
|
||||
buf[n] = '\0';
|
||||
montauk::print((const char*)buf);
|
||||
off += n;
|
||||
}
|
||||
montauk::close(h);
|
||||
|
||||
<strong>WRITING, DELETING, RENAMING</strong>
|
||||
<strong> int montauk::fcreate(const char* path);</strong>
|
||||
<strong> int montauk::fwrite(int handle, const uint8_t* buf, uint64_t offset, uint64_t size);</strong>
|
||||
<strong> int montauk::fdelete(const char* path);</strong>
|
||||
<strong> int montauk::fmkdir(const char* path);</strong>
|
||||
<strong> int montauk::frename(const char* oldPath, const char* newPath);</strong>
|
||||
|
||||
fcreate creates a new file and returns a handle. fwrite writes
|
||||
bytes at the given offset. fdelete removes a file, fmkdir
|
||||
creates a directory, and frename renames or moves a file or
|
||||
directory (the basis for file manager move operations).
|
||||
|
||||
On drive 0 (the ramdisk), changes persist only until reboot --
|
||||
the ramdisk is reloaded from the USTAR archive on each boot. On
|
||||
disk-backed drives (FAT32/ext2 partitions mounted with
|
||||
montauk::fs_mount), changes are written through to storage; use
|
||||
montauk::fs_sync() to flush caches before power-off.
|
||||
|
||||
<strong>NOTES</strong>
|
||||
Drive 0 is loaded at boot from a USTAR tar archive into RAM.
|
||||
Other drives are mounted on demand from GPT partitions on
|
||||
SATA/NVMe/USB block devices; see syscalls(2), STORAGE and
|
||||
DEVICES sections.
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
syscalls(2), spawn(2), malloc(3)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,161 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: fontscale(1) - get or set terminal font scale">
|
||||
<title>fontscale(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>fontscale(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
fontscale - get or set terminal font scale
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
fontscale
|
||||
fontscale <n>
|
||||
fontscale <x> <y>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
Controls the terminal font scale factor. The Flanterm terminal
|
||||
emulator renders text at a configurable scale multiplier.
|
||||
Increasing the scale makes text larger, which is useful on
|
||||
high-resolution displays or real hardware where text may be
|
||||
too small to read comfortably.
|
||||
|
||||
With no arguments, prints the current scale factor and terminal
|
||||
dimensions.
|
||||
|
||||
With one argument, sets both the horizontal and vertical scale
|
||||
to the same value.
|
||||
|
||||
With two arguments, sets asymmetric horizontal and vertical
|
||||
scale factors independently.
|
||||
|
||||
Valid scale values are 1 through 8. After rescaling, the screen
|
||||
is cleared.
|
||||
|
||||
<strong>OUTPUT</strong>
|
||||
fontscale
|
||||
Scale: 1x1 (160 cols x 50 rows)
|
||||
|
||||
fontscale 2
|
||||
Scale set to 2x2 (80 cols x 25 rows)
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
fontscale Show current scale and dimensions
|
||||
fontscale 2 Double the font size
|
||||
fontscale 3 2 3x horizontal, 2x vertical
|
||||
fontscale 1 Reset to default size
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
shell(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,180 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: framebuffer(2) - direct framebuffer access">
|
||||
<title>framebuffer(2) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>framebuffer(2)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
fb_info, fb_map - direct framebuffer access
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong> void montauk::fb_info(montauk::abi::FbInfo* info);</strong>
|
||||
<strong> void* montauk::fb_map();</strong>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
These syscalls allow userspace programs to access the linear
|
||||
framebuffer directly for graphical output.
|
||||
|
||||
<strong>fb_info</strong>
|
||||
Fills in an FbInfo structure with the framebuffer geometry:
|
||||
|
||||
montauk::abi::FbInfo fb;
|
||||
montauk::fb_info(&fb);
|
||||
// fb.width, fb.height, fb.pitch, fb.bpp
|
||||
|
||||
The pitch is the number of bytes per scanline (may be larger
|
||||
than width * 4 due to alignment). bpp is always 32.
|
||||
|
||||
<strong>fb_map</strong>
|
||||
Maps the physical framebuffer into the process address space at
|
||||
a fixed virtual address (0x50000000) and returns that address.
|
||||
|
||||
uint32_t* pixels = (uint32_t*)montauk::fb_map();
|
||||
|
||||
Each pixel is a 32-bit value in 0xAARRGGBB format (blue in the
|
||||
low byte). Writing to this memory directly updates the screen.
|
||||
|
||||
<strong>PIXEL FORMAT</strong>
|
||||
Bits 31-24: Alpha (unused, typically 0xFF)
|
||||
Bits 23-16: Red
|
||||
Bits 15-8: Green
|
||||
Bits 7-0: Blue
|
||||
|
||||
Example: red = 0x00FF0000, green = 0x0000FF00, blue = 0x000000FF
|
||||
|
||||
<strong>EXAMPLE</strong>
|
||||
Fill the screen with blue:
|
||||
|
||||
montauk::abi::FbInfo fb;
|
||||
montauk::fb_info(&fb);
|
||||
uint32_t* pixels = (uint32_t*)montauk::fb_map();
|
||||
|
||||
for (uint64_t y = 0; y < fb.height; y++) {
|
||||
uint32_t* row = (uint32_t*)((uint8_t*)pixels + y * fb.pitch);
|
||||
for (uint64_t x = 0; x < fb.width; x++) {
|
||||
row[x] = 0x000000FF;
|
||||
}
|
||||
}
|
||||
|
||||
<strong>NOTES</strong>
|
||||
After mapping, the cursor overlay is not composited. Programs
|
||||
that use the framebuffer take full control of screen output.
|
||||
|
||||
Only one mapping per process is supported. Calling fb_map()
|
||||
multiple times returns the same address.
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
syscalls(2), malloc(3)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,264 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Man Pages">
|
||||
<title>Man Pages - MontaukOS</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
font-family: monospace;
|
||||
}
|
||||
.doc-list p {
|
||||
margin: 0.25em 0 0 1.5em;
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>Man Pages</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<p>
|
||||
Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1)</a> command.
|
||||
</p>
|
||||
|
||||
<h2>User Commands (Section 1)</h2>
|
||||
|
||||
<ul class="doc-list">
|
||||
|
||||
<li>
|
||||
<a href="intro.html">intro(1)</a>
|
||||
<p>introduction to MontaukOS userspace</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="shell.html">shell(1)</a>
|
||||
<p>MontaukOS interactive command shell</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="init.html">init(1)</a>
|
||||
<p>MontaukOS init system</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="dhcp.html">dhcp(1)</a>
|
||||
<p>obtain network configuration via DHCP</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="fetch.html">fetch(1)</a>
|
||||
<p>HTTP/HTTPS client for MontaukOS</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="ping.html">ping(1)</a>
|
||||
<p>send ICMP echo requests</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="nslookup.html">nslookup(1)</a>
|
||||
<p>DNS hostname lookup</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="fontscale.html">fontscale(1)</a>
|
||||
<p>get or set terminal font scale</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="edit.html">edit(1)</a>
|
||||
<p>text editor for MontaukOS</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="man.html">man(1)</a>
|
||||
<p>display manual pages</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="printctl.html">printctl(1)</a>
|
||||
<p>configure printers and submit print jobs</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="printd.html">printd(1)</a>
|
||||
<p>MontaukOS userspace print spooler daemon</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wiki.html">wiki(1)</a>
|
||||
<p>Wikipedia article viewer for MontaukOS</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>System Calls (Section 2)</h2>
|
||||
|
||||
<ul class="doc-list">
|
||||
|
||||
<li>
|
||||
<a href="syscalls.html">syscalls(2)</a>
|
||||
<p>overview of MontaukOS system calls</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="spawn.html">spawn(2)</a>
|
||||
<p>create and wait for processes</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="file.html">file(2)</a>
|
||||
<p>file I/O system calls</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="framebuffer.html">framebuffer(2)</a>
|
||||
<p>direct framebuffer access</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>Library Functions (Section 3)</h2>
|
||||
|
||||
<ul class="doc-list">
|
||||
|
||||
<li>
|
||||
<a href="malloc.html">malloc(3)</a>
|
||||
<p>userspace heap allocation</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>File Formats / Reference (Section 5)</h2>
|
||||
|
||||
<ul class="doc-list">
|
||||
|
||||
<li>
|
||||
<a href="tls-errors.html">tls-errors(5)</a>
|
||||
<p>BearSSL TLS and X.509 error codes</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>Miscellaneous (Section 7)</h2>
|
||||
|
||||
<ul class="doc-list">
|
||||
|
||||
<li>
|
||||
<a href="legal.html">legal(7)</a>
|
||||
<p>MontaukOS legal/copyright information</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: init(1) - MontaukOS init system">
|
||||
<title>init(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>init(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
init - MontaukOS init system
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
Spawned automatically by the kernel as PID 0.
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
init is the first userspace process started by the MontaukOS
|
||||
kernel. It chains system services in sequence, then launches
|
||||
the interactive shell.
|
||||
|
||||
Each service is spawned as a child process. init waits for it
|
||||
to exit before starting the next one. If a service fails to
|
||||
spawn, init logs an error and continues to the next stage.
|
||||
|
||||
Log output is timestamped and color-coded:
|
||||
|
||||
HH:MM:SS INFO init Starting dhcp
|
||||
HH:MM:SS OK init dhcp finished (pid 1)
|
||||
|
||||
<strong>BOOT SEQUENCE</strong>
|
||||
The following services are started in order:
|
||||
|
||||
1. 0:/os/dhcp.elf Obtain network configuration via DHCP
|
||||
2. 0:/os/shell.elf Launch the interactive shell
|
||||
|
||||
After the shell exits, init enters an idle loop.
|
||||
|
||||
<strong>LOG LEVELS</strong>
|
||||
init uses four log levels, each with a distinct color:
|
||||
|
||||
OK Green Service completed successfully
|
||||
INFO Cyan Informational (service starting, etc.)
|
||||
WARN Yellow Non-fatal warning
|
||||
FAIL Red Service failed to start
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
dhcp(1), shell(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,212 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: intro(1) - introduction to MontaukOS userspace">
|
||||
<title>intro(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>intro(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
intro - introduction to MontaukOS userspace
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
MontaukOS is a hobbyist 64-bit operating system written in C++20,
|
||||
currently at version 0.1.7 (API version 8). Userspace programs
|
||||
run in Ring 3, are loaded as static ELF64 binaries, and
|
||||
communicate with the kernel through the x86-64 SYSCALL/SYSRET
|
||||
mechanism (150 syscalls -- see syscalls(2)).
|
||||
|
||||
Programs are compiled with a freestanding cross-compiler and
|
||||
linked at virtual address 0x400000. There is no standard C
|
||||
library for C++ programs -- all system interaction goes through
|
||||
the montauk:: syscall wrappers. A desktop environment with a
|
||||
window server, GUI apps, and Bluetooth/audio/networking stacks
|
||||
runs on top of the same syscall API.
|
||||
|
||||
<strong>GETTING STARTED</strong>
|
||||
To write a new system/CLI program, create a directory under
|
||||
programs/src/ with a main.cpp file. The entry point is:
|
||||
|
||||
extern "C" void _start() { ... }
|
||||
|
||||
There is no argc/argv. Use montauk::getargs() to retrieve any
|
||||
arguments passed by the parent process. Include <montauk/syscall.h>
|
||||
for the full typed syscall API. GUI apps additionally use
|
||||
win_create()/win_poll()/win_present() from montauk/Window.hpp
|
||||
(see framebuffer(2)).
|
||||
|
||||
Build with:
|
||||
|
||||
cd programs && make
|
||||
|
||||
System/CLI binaries appear in programs/bin/os/; GUI app bundles
|
||||
(ELF + manifest.toml + icon) appear under programs/bin/apps/<name>/.
|
||||
|
||||
<strong>RAMDISK LAYOUT</strong>
|
||||
The boot ramdisk is mounted as drive 0 with the following
|
||||
directory structure:
|
||||
|
||||
0:/os/ System/CLI binaries (shell, init, man, etc.),
|
||||
plus os-owned data: certs/, firmware/,
|
||||
licenses/, wallpapers/
|
||||
0:/apps/ GUI app bundles, one directory per app
|
||||
(<app>.elf + manifest.toml + icon)
|
||||
0:/config/ System-wide config TOMLs
|
||||
0:/users/<name>/ Per-user home directories (created at
|
||||
login), with Music/, Videos/, Pictures/,
|
||||
config/ subdirectories
|
||||
0:/fonts/ Shared fonts
|
||||
0:/icons/ Shared icons
|
||||
0:/man/ Manual pages
|
||||
0:/www/ Web server content
|
||||
0:/lib/ Lua and TinyCC toolchain payloads
|
||||
0:/boot/ Kernel, bootloader, ramdisk image
|
||||
|
||||
There is no 0:/games/, 0:/common/, 0:/home/, or 0:/etc/ --
|
||||
these were used by earlier single-user releases and no longer
|
||||
exist. Games and other GUI programs (including doom) ship as
|
||||
bundles under 0:/apps/.
|
||||
|
||||
<strong>SHELL</strong>
|
||||
The interactive shell is the primary way to interact with
|
||||
MontaukOS. Commands are resolved against the current directory
|
||||
first, then 0:/os/. Type 'help' at the shell prompt for a list
|
||||
of commands. Use 'man shell' for detailed shell documentation.
|
||||
|
||||
<strong>MAN PAGES</strong>
|
||||
The following man pages are available:
|
||||
|
||||
intro(1) This page
|
||||
shell(1) Shell commands reference
|
||||
init(1) Init system
|
||||
dhcp(1) DHCP client
|
||||
fetch(1) HTTP client
|
||||
ping(1) ICMP ping
|
||||
nslookup(1) DNS lookup
|
||||
fontscale(1) Terminal font scaling
|
||||
edit(1) Text editor
|
||||
man(1) The man command itself
|
||||
printctl(1) Printer control
|
||||
printd(1) Print spooler daemon
|
||||
wiki(1) Wikipedia article viewer
|
||||
legal(7) Copyright and legal information
|
||||
tls-errors(5) TLS/BearSSL error reference
|
||||
syscalls(2) Overview of all syscalls
|
||||
spawn(2) Process spawning
|
||||
file(2) File I/O syscalls
|
||||
framebuffer(2) Framebuffer access
|
||||
malloc(3) Memory allocation
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
shell(1), syscalls(2), malloc(3)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,177 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: legal(7) - MontaukOS legal/copyright information">
|
||||
<title>legal(7) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>legal(7)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
MontaukOS legal/copyright information
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
Copyright (c) 2025-2026 Daniel Hammer, et al.
|
||||
(includes contributors to other projects, i.e. The Limine Bootloader. Please refer to any other project's own license.)
|
||||
|
||||
MontaukOS is source-available software, provided under the terms of the
|
||||
MontaukOS Software License. The full license text is on this system at
|
||||
0:/os/licenses/LICENSE.txt.
|
||||
|
||||
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.
|
||||
|
||||
== License for the Limine C++ template (certain portions derive therefrom) ==
|
||||
Copyright (C) 2023-2026 Mintsuki and contributors.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
<strong>THIRD-PARTY COMPONENTS</strong>
|
||||
MontaukOS is distributed together with third-party components that remain
|
||||
under their own licenses, including:
|
||||
|
||||
* Flat Remix icon theme, Copyright (C) Daniel Ruiz de Alegria - GPLv3
|
||||
* DOOM engine (doom.elf, via doomgeneric), Copyright (C) id Software, Inc.
|
||||
and contributors - GPLv2
|
||||
* Limine bootloader, Copyright (C) Mintsuki and contributors - BSD 2-Clause
|
||||
* BearSSL, Copyright (c) Thomas Pornin - MIT
|
||||
* stb_image, Copyright (c) Sean Barrett - MIT
|
||||
* JetBrains Mono font, Copyright The JetBrains Mono Project Authors - OFL-1.1
|
||||
* Noto Serif font, Copyright The Noto Project Authors - OFL-1.1
|
||||
* Roboto font, Copyright The Roboto Project Authors - OFL-1.1
|
||||
* C059 font (URW Base 35), Copyright (C) (URW)++ Design and Development
|
||||
GmbH - AGPLv3 with font-embedding exception
|
||||
* Tiny C Compiler (tcc.elf, 0:/sdk/tcc), Copyright (c) Fabrice Bellard and
|
||||
contributors - LGPL-2.1
|
||||
* Lua (lua.elf, 0:/sdk/lua), Copyright (C) Lua.org, PUC-Rio - MIT
|
||||
* Mozilla CA certificate bundle (0:/os/certs), Mozilla CA Certificate
|
||||
Program - MPL-2.0
|
||||
* Intel Bluetooth firmware (0:/os/firmware/intel), Copyright (c) Intel
|
||||
Corporation - Intel redistributable firmware license
|
||||
* Default wallpaper photo (0:/os/wallpapers), by Nikhil Kumar -
|
||||
Unsplash License
|
||||
|
||||
Full license texts and notices are on this system in 0:/os/licenses/.</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,175 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: malloc(3) - userspace heap allocation">
|
||||
<title>malloc(3) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>malloc(3)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
malloc, mfree, realloc - userspace heap allocation
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong> void* montauk::malloc(uint64_t size);</strong>
|
||||
<strong> void montauk::mfree(void* ptr);</strong>
|
||||
<strong> void* montauk::realloc(void* ptr, uint64_t size);</strong>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
The userspace heap provides dynamic memory allocation on top of
|
||||
the kernel's page-mapping syscall (SYS_ALLOC). Include the
|
||||
header <montauk/heap.h> to use these functions.
|
||||
|
||||
<strong>malloc</strong>
|
||||
Allocates 'size' bytes from the free list. Returns a 16-byte
|
||||
aligned pointer, or nullptr on failure. When the free list is
|
||||
empty, it requests more pages from the kernel via SYS_ALLOC
|
||||
(minimum 16 KiB growth, initial seed of 64 KiB).
|
||||
|
||||
char* buf = (char*)montauk::malloc(1024);
|
||||
|
||||
<strong>mfree</strong>
|
||||
Returns the block to the userspace free list. No syscall is
|
||||
made -- the memory stays mapped and is immediately reusable.
|
||||
Passing nullptr is a safe no-op.
|
||||
|
||||
montauk::mfree(buf);
|
||||
|
||||
<strong>realloc</strong>
|
||||
Resizes the allocation to 'size' bytes. Allocates a new block,
|
||||
copies the smaller of old/new sizes, and frees the old block.
|
||||
If ptr is nullptr, behaves like malloc.
|
||||
|
||||
buf = (char*)montauk::realloc(buf, 2048);
|
||||
|
||||
<strong>IMPLEMENTATION</strong>
|
||||
The allocator uses a linked free-list with first-fit search.
|
||||
Blocks larger than needed are split. The allocation header is
|
||||
16 bytes (magic + size). All allocations are 16-byte aligned.
|
||||
|
||||
The heap grows by requesting pages from the kernel via
|
||||
SYS_ALLOC. These pages are never returned to the kernel (since
|
||||
SYS_FREE is currently a no-op), but mfree makes them available
|
||||
for future malloc calls within the process.
|
||||
|
||||
<strong>LOW-LEVEL PAGE API</strong>
|
||||
For large allocations or when direct page control is needed:
|
||||
|
||||
void* montauk::alloc(uint64_t size); // SYS_ALLOC
|
||||
void montauk::free(void* ptr); // SYS_FREE (no-op)
|
||||
|
||||
alloc() maps zeroed pages starting at 0x40000000 and growing
|
||||
upward. Size is rounded up to 4 KiB page boundaries.
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
syscalls(2), file(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,167 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: man(1) - display manual pages">
|
||||
<title>man(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>man(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
man - display manual pages
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong> man topic</strong>
|
||||
<strong> man section topic</strong>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
The man command displays manual pages from the ramdisk in a
|
||||
fullscreen pager. Pages are stored as plain text files with
|
||||
simple formatting directives.
|
||||
|
||||
If no section is specified, sections 1 through 7 are searched
|
||||
in order. If a section number is given, only that section is
|
||||
checked.
|
||||
|
||||
<strong>KEY BINDINGS</strong>
|
||||
|
||||
<strong>Navigation</strong>
|
||||
j, Down Arrow Scroll down one line
|
||||
k, Up Arrow Scroll up one line
|
||||
Space, Page Down Scroll down one page
|
||||
b, Page Up Scroll up one page
|
||||
g, Home Go to top
|
||||
G, End Go to bottom
|
||||
q Quit
|
||||
|
||||
<strong>SECTIONS</strong>
|
||||
1 User commands and programs
|
||||
2 System calls (kernel interface)
|
||||
3 Library functions (userspace libraries)
|
||||
7 Miscellaneous (legal, conventions)
|
||||
|
||||
<strong>FILES</strong>
|
||||
Man pages are stored on the ramdisk at:
|
||||
|
||||
0:/man/<topic>.<section>
|
||||
|
||||
For example, man intro reads 0:/man/intro.1
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
man intro View the introduction
|
||||
man 2 syscalls View syscall overview (section 2)
|
||||
man malloc View malloc documentation
|
||||
man legal View copyright information
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
intro(1), shell(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,154 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: nslookup(1) - DNS hostname lookup">
|
||||
<title>nslookup(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>nslookup(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
nslookup - DNS hostname lookup
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
nslookup <hostname>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
Resolves a hostname to an IPv4 address using the configured
|
||||
DNS server and prints the result.
|
||||
|
||||
The kernel DNS resolver sends a UDP query to port 53 of the
|
||||
configured DNS server and waits up to 5 seconds for a reply.
|
||||
Results are cached in an 8-entry kernel cache with TTL support.
|
||||
|
||||
<strong>OUTPUT</strong>
|
||||
Server: 10.0.68.1
|
||||
Name: example.com
|
||||
Address: 93.184.216.34
|
||||
Time: 3ms
|
||||
|
||||
If the lookup fails:
|
||||
|
||||
Could not resolve: badhost.invalid
|
||||
|
||||
<strong>DNS CONFIGURATION</strong>
|
||||
The DNS server address is obtained automatically via DHCP.
|
||||
It can also be viewed and set with ifconfig. The default
|
||||
is 10.0.68.1 (QEMU user-mode networking).
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
nslookup google.com
|
||||
nslookup icanhazip.com
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
ping(1), fetch(1), dhcp(1), ifconfig(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,155 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: ping(1) - send ICMP echo requests">
|
||||
<title>ping(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>ping(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
ping - send ICMP echo requests
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
ping <host>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
Sends 4 ICMP echo requests to the specified host and prints
|
||||
the round-trip time for each reply.
|
||||
|
||||
The host may be an IP address or a hostname. Hostnames are
|
||||
resolved via the configured DNS server.
|
||||
|
||||
Each request has a 3-second timeout. Requests are sent at
|
||||
1-second intervals.
|
||||
|
||||
<strong>OUTPUT</strong>
|
||||
PING example.com (93.184.216.34)
|
||||
Reply from 93.184.216.34: time=12ms
|
||||
Reply from 93.184.216.34: time=11ms
|
||||
Reply from 93.184.216.34: time=13ms
|
||||
Reply from 93.184.216.34: time=11ms
|
||||
|
||||
If a reply is not received within the timeout:
|
||||
|
||||
Request timed out
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
ping 10.0.68.1
|
||||
Ping the gateway by IP address.
|
||||
|
||||
ping google.com
|
||||
Ping by hostname (requires DNS).
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
nslookup(1), ifconfig(1), shell(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,150 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: printctl(1) - configure printers and submit print jobs">
|
||||
<title>printctl(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>printctl(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
printctl - configure printers and submit print jobs
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong>printctl</strong>
|
||||
<em>command</em>
|
||||
[<em>options</em>]
|
||||
<strong>DESCRIPTION</strong>
|
||||
<strong>printctl</strong>
|
||||
manages the MontaukOS userspace print spooler and submits print jobs to IPP printers.
|
||||
<strong>COMMANDS</strong>
|
||||
|
||||
<strong>set-printer <em>URI</em></strong>
|
||||
Store the default printer URI.
|
||||
|
||||
<strong>show-printer</strong>
|
||||
Print the configured default printer URI.
|
||||
|
||||
<strong>print <em>FILE</em> [--printer <em>URI</em>] [--name <em>JOB</em>] [--wait]</strong>
|
||||
Queue a file for printing.
|
||||
|
||||
<strong>test-page [--printer <em>URI</em>] [--wait] [--no-wait]</strong>
|
||||
Generate and queue a simple test page.
|
||||
|
||||
<strong>status [--verbose]</strong>
|
||||
Show daemon state and queued, active, completed, and failed jobs.
|
||||
|
||||
<strong>inspect <em>JOB-ID</em></strong>
|
||||
Show full metadata and debug details for a queued, active, completed, or failed job.
|
||||
|
||||
<strong>probe [<em>URI</em>]</strong>
|
||||
Probe the configured printer, print host and resolution details, and show IPP capability diagnostics.</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: printd(1) - MontaukOS userspace print spooler daemon">
|
||||
<title>printd(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>printd(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
printd - MontaukOS userspace print spooler daemon
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong>printd</strong>
|
||||
<strong>DESCRIPTION</strong>
|
||||
<strong>printd</strong>
|
||||
monitors the print spool directories, claims queued jobs, and delivers them to IPP printers.
|
||||
|
||||
It is normally launched automatically by
|
||||
<strong>init</strong>(1)
|
||||
and does not require direct user interaction.</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,313 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: shell(1) - MontaukOS interactive command shell">
|
||||
<title>shell(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>shell(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
shell - MontaukOS interactive command shell
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
The MontaukOS shell is a command interpreter launched by init
|
||||
after system services have started. It provides command
|
||||
execution, file navigation, shell variables, command chaining,
|
||||
tab completion, and command history.
|
||||
|
||||
Commands are either shell builtins or external programs. When
|
||||
a command is not a builtin, the shell searches for a matching
|
||||
ELF binary and executes it as a child process.
|
||||
|
||||
<strong>COMMAND RESOLUTION</strong>
|
||||
When a non-builtin command is entered, the shell searches for
|
||||
a matching binary in the following order:
|
||||
|
||||
1. <cwd>/<command> (exact name, e.g. "hello.elf")
|
||||
2. <cwd>/<command>.elf
|
||||
3. 0:/os/<command>.elf
|
||||
4. 0:/os/<command> (no extension)
|
||||
5. If on a non-zero drive, the drive root: <drive>:/<command>[.elf]
|
||||
|
||||
A command containing a "/" (or an explicit drive prefix, or a
|
||||
leading "." or "/") is instead treated as a direct path and
|
||||
resolved by the kernel against the process CWD, trying the
|
||||
path as-is and then with ".elf" appended.
|
||||
|
||||
The first match is spawned and the shell waits for it to exit.
|
||||
If no match is found, the shell prints:
|
||||
|
||||
<command>: command not found
|
||||
|
||||
Arguments after the command name are passed to the spawned
|
||||
process.
|
||||
|
||||
<strong>BUILTINS</strong>
|
||||
|
||||
<strong>help</strong>
|
||||
Display a categorized list of available commands.
|
||||
|
||||
<strong>ls [dir]</strong>
|
||||
List files in the current directory, or in the specified
|
||||
directory. Directory entries are shown with a trailing slash.
|
||||
Examples: ls, ls man, ls os
|
||||
|
||||
<strong>cd [dir]</strong>
|
||||
Change the working directory. With no argument, returns to the
|
||||
logged-in user's home directory (0:/users/<user>); with /,
|
||||
returns to the drive root. Use cd .. to go up one level.
|
||||
The shell prompt reflects the current directory.
|
||||
Examples: cd os, cd .., cd
|
||||
|
||||
<strong>pwd</strong>
|
||||
Print the current working directory as an absolute path
|
||||
(e.g. "0:/os").
|
||||
|
||||
<strong>echo [-n] ...</strong>
|
||||
Print the arguments. -n suppresses the trailing newline.
|
||||
|
||||
<strong>set [VAR=value]</strong>
|
||||
With no argument, list all shell variables (built-in and
|
||||
user-defined). With VAR=value, set a variable. With a bare
|
||||
name, print that variable's value.
|
||||
|
||||
<strong>unset VAR</strong>
|
||||
Remove a user-defined shell variable.
|
||||
|
||||
<strong>true / false</strong>
|
||||
Return exit status 0 / 1 without doing anything. Useful with
|
||||
&& and ||.
|
||||
|
||||
<strong>N:</strong>
|
||||
A bare "<number>:" (e.g. "1:") switches the current drive to
|
||||
drive N and resets the working directory to that drive's root.
|
||||
|
||||
<strong>exit</strong>
|
||||
Terminate the shell process (with the last command's exit code).
|
||||
|
||||
<strong>SYNTAX</strong>
|
||||
<strong>Variables</strong>
|
||||
NAME=value Set a shell variable (no leading $)
|
||||
$VAR or ${VAR} Expand a variable's value
|
||||
$? Exit status of the last command
|
||||
$USER, $HOME, $PWD Built-in dynamic variables (session user,
|
||||
home directory, current directory)
|
||||
\$ Escape a literal '$'
|
||||
|
||||
<strong>Tilde expansion</strong>
|
||||
A leading ~ expands to the session home directory
|
||||
(0:/users/<user>) when followed by end-of-string, '/', or a
|
||||
space.
|
||||
|
||||
<strong>Command chaining</strong>
|
||||
cmd1 ; cmd2 Run cmd2 unconditionally after cmd1
|
||||
cmd1 && cmd2 Run cmd2 only if cmd1 succeeded (exit 0)
|
||||
cmd1 || cmd2 Run cmd2 only if cmd1 failed (nonzero exit)
|
||||
|
||||
Single and double quotes protect ;, &&, and || from being
|
||||
treated as separators.
|
||||
|
||||
<strong>Comments</strong>
|
||||
A '#' outside of quotes starts a comment; the rest of the line
|
||||
is ignored.
|
||||
|
||||
<strong>EXTERNAL COMMANDS</strong>
|
||||
All external commands live in 0:/os/ (see COMMAND RESOLUTION).
|
||||
Where a dedicated man page exists it is noted below; run
|
||||
'man <command>' for details.
|
||||
|
||||
<strong>File commands</strong>
|
||||
cat <file> Display file contents
|
||||
edit [file] Text editor -- see edit(1)
|
||||
copy <src> <dst> Copy a file
|
||||
move <src> <dst> Move/rename a file
|
||||
rm <file> Remove a file
|
||||
touch <file> Create an empty file
|
||||
|
||||
<strong>System commands</strong>
|
||||
man <topic> View manual pages -- see man(1)
|
||||
whoami Print the current username
|
||||
info / mtkfetch Show system information
|
||||
date Show current date and time
|
||||
uptime Show system uptime
|
||||
proclist List running processes
|
||||
power CPU power/thermal status (power [watch [secs]])
|
||||
clear Clear the screen and framebuffer
|
||||
fontscale [n] Get or set terminal font scale -- see fontscale(1)
|
||||
lua Lua interpreter
|
||||
tcc TinyCC (in-system C compiler)
|
||||
reset Reboot the system
|
||||
shutdown Shut down the system
|
||||
|
||||
<strong>Network commands</strong>
|
||||
ping <host> Send ICMP echo requests -- see ping(1)
|
||||
nslookup <host> DNS lookup -- see nslookup(1)
|
||||
ifconfig Show/set network configuration
|
||||
tcpconnect <host> <port> Interactive TCP client
|
||||
irc IRC client
|
||||
dhcp DHCP client -- see dhcp(1)
|
||||
fetch <url> HTTP/HTTPS client (TLS 1.2) -- see fetch(1)
|
||||
wiki <title> Wikipedia article viewer -- see wiki(1)
|
||||
httpd HTTP server
|
||||
|
||||
Network commands accept both IP addresses and hostnames.
|
||||
Hostnames are resolved via the configured DNS server.
|
||||
|
||||
<strong>Bluetooth</strong>
|
||||
btlist List connected Bluetooth devices
|
||||
btbonds List bonded (paired) Bluetooth devices
|
||||
|
||||
<strong>Software-defined radio</strong>
|
||||
sdr [freqMHz [rateHz]] Receive and report basic signal
|
||||
statistics from an attached RTL-SDR dongle
|
||||
|
||||
GUI applications (window server programs, not run from the
|
||||
shell prompt as text commands) live under 0:/apps/, one bundle
|
||||
per app -- e.g. doom, terminal, texteditor, spreadsheet,
|
||||
wordprocessor, paint, calculator, network, bluetooth, audio,
|
||||
disks, devexplorer, procmgr, powermgr, printers, timezone,
|
||||
weather, wikipedia. There is no 0:/games/ directory.
|
||||
|
||||
<strong>TAB COMPLETION</strong>
|
||||
Pressing Tab completes the word under the cursor against, in
|
||||
order: executable names in 0:/os/, shell builtins, and file/
|
||||
directory entries in the current directory. A single match is
|
||||
completed inline; multiple matches are listed below the prompt.
|
||||
|
||||
<strong>INPUT</strong>
|
||||
The shell uses non-blocking keyboard input via SYS_GETKEY (with
|
||||
SYS_INPUT_WAIT to sleep between events) to support arrow key
|
||||
detection. Lines are limited to 255 characters.
|
||||
|
||||
<strong>Editing</strong>
|
||||
Backspace Delete character before cursor
|
||||
Tab Tab-complete the current word
|
||||
Enter Execute the command line
|
||||
|
||||
<strong>History</strong>
|
||||
The shell stores the last 32 unique commands. Duplicate
|
||||
consecutive entries are suppressed.
|
||||
|
||||
Up Arrow Recall previous command
|
||||
Down Arrow Recall next command (or clear line)
|
||||
|
||||
<strong>PROMPT</strong>
|
||||
The prompt displays the current drive and working directory:
|
||||
|
||||
0:/> _ (at root of drive 0)
|
||||
0:/os> _ (in os/ directory)
|
||||
1:/> _ (at root of drive 1)
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
man(1), intro(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,187 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: spawn(2) - create and wait for processes">
|
||||
<title>spawn(2) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>spawn(2)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
spawn, waitpid - create and wait for processes
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
<strong> int montauk::spawn(const char* path, const char* args = nullptr);</strong>
|
||||
<strong> void montauk::waitpid(int pid);</strong>
|
||||
<strong> int montauk::getargs(char* buf, uint64_t maxLen);</strong>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
|
||||
<strong>spawn</strong>
|
||||
Loads the ELF64 binary at the given VFS path and creates a new
|
||||
process. The path must include the drive prefix, for example:
|
||||
|
||||
int pid = montauk::spawn("0:/os/hello.elf");
|
||||
|
||||
An optional second argument passes a string to the child:
|
||||
|
||||
int pid = montauk::spawn("0:/os/man.elf", "intro");
|
||||
|
||||
The new process gets its own PML4 page table, a 32 KiB stack
|
||||
(at 0x7FFFFF7000-0x7FFFFFF000), and begins executing at the
|
||||
ELF entry point (_start).
|
||||
|
||||
Returns the new process's PID on success, or -1 on failure.
|
||||
Failure occurs when there are no free process slots (max 256),
|
||||
the file cannot be found, or the ELF is invalid.
|
||||
|
||||
<strong>waitpid</strong>
|
||||
Blocks the calling process until the process with the given PID
|
||||
has exited. Internally, this yields the CPU in a loop:
|
||||
|
||||
montauk::waitpid(pid);
|
||||
|
||||
This is how the shell implements foreground process execution --
|
||||
it spawns a child and waits for it to complete before showing
|
||||
the next prompt.
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
Spawn a program and wait for it:
|
||||
|
||||
int pid = montauk::spawn("0:/os/hello.elf");
|
||||
if (pid < 0) {
|
||||
montauk::print("spawn failed\n");
|
||||
} else {
|
||||
montauk::waitpid(pid);
|
||||
montauk::print("child exited\n");
|
||||
}
|
||||
|
||||
<strong>getargs</strong>
|
||||
Copies the argument string into buf (up to maxLen bytes, always
|
||||
null-terminated). Returns the number of characters copied, or
|
||||
-1 on error.
|
||||
|
||||
char args[256];
|
||||
montauk::getargs(args, sizeof(args));
|
||||
|
||||
The argument string is set by the parent when calling spawn().
|
||||
If no arguments were provided, the buffer will be empty.
|
||||
|
||||
<strong>NOTES</strong>
|
||||
The _start() entry point receives no argc/argv. Use getargs()
|
||||
to retrieve the argument string passed by the parent process.
|
||||
|
||||
Process exit codes are not yet collected by waitpid.
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
syscalls(2), file(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,906 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: syscalls(2) - overview of MontaukOS system calls">
|
||||
<title>syscalls(2) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>syscalls(2)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
syscalls - overview of MontaukOS system calls
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
MontaukOS provides 150 system calls (numbers 0-149, sparsely
|
||||
assigned -- not every number in the range is in use) for
|
||||
userspace programs. Syscalls use the x86-64 SYSCALL instruction
|
||||
with the following register convention:
|
||||
|
||||
RAX Syscall number (in) / return value (out)
|
||||
RDI Argument 1
|
||||
RSI Argument 2
|
||||
RDX Argument 3
|
||||
R10 Argument 4
|
||||
R8 Argument 5
|
||||
R9 Argument 6
|
||||
|
||||
Include <Api/Syscall.hpp> for the numeric SYS_* constants and
|
||||
ABI structs, and <montauk/syscall.h> for typed wrappers in the
|
||||
montauk:: namespace. This page groups syscalls the same way the
|
||||
kernel source does (one subsystem header per group).
|
||||
|
||||
<strong>PROCESS MANAGEMENT</strong>
|
||||
<strong>SYS_EXIT (0)</strong>
|
||||
Terminate the calling process.
|
||||
[[noreturn]] void montauk::exit(int code = 0);
|
||||
|
||||
<strong>SYS_YIELD (1)</strong>
|
||||
Yield the remainder of the time slice.
|
||||
void montauk::yield();
|
||||
|
||||
<strong>SYS_SLEEP_MS (2)</strong>
|
||||
Sleep for at least the given number of milliseconds.
|
||||
void montauk::sleep_ms(uint64_t ms);
|
||||
|
||||
<strong>SYS_GETPID (3)</strong>
|
||||
Return the PID of the calling process.
|
||||
int montauk::getpid();
|
||||
|
||||
<strong>SYS_SPAWN (20)</strong>
|
||||
Spawn a new process from an ELF binary on the VFS.
|
||||
int montauk::spawn(const char* path, const char* args = nullptr);
|
||||
|
||||
<strong>SYS_WAITPID (23)</strong>
|
||||
Block until the given process has exited.
|
||||
void montauk::waitpid(int pid);
|
||||
|
||||
<strong>SYS_GETARGS (25)</strong>
|
||||
Get the argument string passed to this process at spawn time.
|
||||
int montauk::getargs(char* buf, uint64_t maxLen);
|
||||
|
||||
<strong>SYS_PROCLIST (61)</strong>
|
||||
List running processes (pid, parent, state, name, heap usage,
|
||||
accumulated CPU time).
|
||||
int montauk::proclist(montauk::abi::ProcInfo* buf, int max);
|
||||
|
||||
<strong>SYS_KILL (62)</strong>
|
||||
Terminate another process by PID.
|
||||
int montauk::kill(int pid);
|
||||
|
||||
<strong>SYS_CHDIR (96)</strong>
|
||||
Change the calling process's current working directory.
|
||||
int montauk::chdir(const char* path);
|
||||
|
||||
<strong>SYS_GETCWD (95)</strong>
|
||||
Get the calling process's current working directory.
|
||||
int montauk::getcwd(char* buf, uint64_t maxLen);
|
||||
|
||||
<strong>SYS_SETUSER (92)</strong>
|
||||
Associate a process with a logged-in user name (used by login/session
|
||||
management).
|
||||
int montauk::setuser(int pid, const char* name);
|
||||
|
||||
<strong>SYS_GETUSER (93)</strong>
|
||||
Get the user name associated with the calling process.
|
||||
int montauk::getuser(char* buf, uint64_t maxLen);
|
||||
|
||||
<strong>THREADING</strong>
|
||||
Threads share the spawning process's address space and heap
|
||||
(see montauk/heap.h for the heap lock). Declared in
|
||||
montauk/thread.h.
|
||||
|
||||
<strong>SYS_THREAD_SPAWN (130)</strong>
|
||||
Spawn a new thread in the calling process. Returns a positive
|
||||
TID on success, -1 on failure.
|
||||
int montauk::thread_spawn(ThreadEntry entry, void* arg,
|
||||
uint64_t stack_bytes = 0);
|
||||
|
||||
<strong>SYS_THREAD_EXIT (131)</strong>
|
||||
Terminate only the calling thread. If it is the main thread,
|
||||
the whole process exits.
|
||||
[[noreturn]] void montauk::thread_exit(int code = 0);
|
||||
|
||||
<strong>SYS_THREAD_JOIN (132)</strong>
|
||||
Block until the given TID exits, then reclaim its kernel state.
|
||||
int montauk::thread_join(int tid, int* out_code = nullptr);
|
||||
|
||||
<strong>SYS_THREAD_SELF (133)</strong>
|
||||
Return the calling thread's TID (equals getpid() for the main
|
||||
thread).
|
||||
int montauk::thread_self();
|
||||
|
||||
<strong>CONSOLE I/O</strong>
|
||||
<strong>SYS_PRINT (4)</strong>
|
||||
Write a null-terminated string to the terminal.
|
||||
void montauk::print(const char* text);
|
||||
|
||||
<strong>SYS_PUTCHAR (5)</strong>
|
||||
Write a single character to the terminal.
|
||||
void montauk::putchar(char c);
|
||||
|
||||
<strong>FILE I/O</strong>
|
||||
<strong>SYS_OPEN (6)</strong>
|
||||
Open a file. Returns a handle or negative on error.
|
||||
int montauk::open(const char* path);
|
||||
|
||||
<strong>SYS_READ (7)</strong>
|
||||
Read bytes from a file at a given offset.
|
||||
int montauk::read(int h, uint8_t* buf, uint64_t off, uint64_t sz);
|
||||
|
||||
<strong>SYS_GETSIZE (8)</strong>
|
||||
Get the size of an open file in bytes.
|
||||
uint64_t montauk::getsize(int handle);
|
||||
|
||||
<strong>SYS_CLOSE (9)</strong>
|
||||
Close a file handle.
|
||||
void montauk::close(int handle);
|
||||
|
||||
<strong>SYS_READDIR (10)</strong>
|
||||
List directory entries (max 256 per call for VFS directories,
|
||||
128 for driver-backed listings such as 0:/os/). For larger
|
||||
directories use SYS_READDIR_AT.
|
||||
int montauk::readdir(const char* path, const char** names, int max);
|
||||
|
||||
<strong>SYS_READDIR_AT (136)</strong>
|
||||
Paginated directory read. Returns entries starting at
|
||||
startIndex; call repeatedly with startIndex advanced by the
|
||||
returned count until it returns 0 to enumerate directories of
|
||||
any size.
|
||||
int montauk::readdir_at(const char* path, const char** names,
|
||||
int max, int startIndex);
|
||||
|
||||
<strong>SYS_FWRITE (41)</strong>
|
||||
Write bytes to a file at a given offset.
|
||||
int montauk::fwrite(int handle, const uint8_t* buf,
|
||||
uint64_t offset, uint64_t size);
|
||||
|
||||
<strong>SYS_FCREATE (42)</strong>
|
||||
Create a new file on the target volume. Returns a handle or
|
||||
negative on error.
|
||||
int montauk::fcreate(const char* path);
|
||||
|
||||
<strong>SYS_FDELETE (77)</strong>
|
||||
Delete a file.
|
||||
int montauk::fdelete(const char* path);
|
||||
|
||||
<strong>SYS_FMKDIR (78)</strong>
|
||||
Create a directory.
|
||||
int montauk::fmkdir(const char* path);
|
||||
|
||||
<strong>SYS_FRENAME (94)</strong>
|
||||
Rename or move a file/directory (used as the basis for file
|
||||
manager move operations).
|
||||
int montauk::frename(const char* oldPath, const char* newPath);
|
||||
|
||||
<strong>SYS_DRIVELIST (79)</strong>
|
||||
List mounted drive numbers.
|
||||
int montauk::drivelist(int* outDrives, int max);
|
||||
|
||||
<strong>SYS_DRIVELABEL (124)</strong>
|
||||
Get the volume label of a drive.
|
||||
int montauk::drivelabel(int drive, char* outLabel, int maxLen);
|
||||
|
||||
<strong>SYS_DRIVEKIND (127)</strong>
|
||||
Get the block device kind backing a drive: 0=unknown/ramdisk,
|
||||
1=SATA, 2=SATAPI, 3=NVMe, 4=USB mass storage.
|
||||
int montauk::drivekind(int drive);
|
||||
|
||||
<strong>MEMORY</strong>
|
||||
<strong>SYS_ALLOC (11)</strong>
|
||||
Map zeroed pages into the process address space.
|
||||
void* montauk::alloc(uint64_t size);
|
||||
|
||||
<strong>SYS_FREE (12)</strong>
|
||||
Reserved (currently a no-op).
|
||||
void montauk::free(void* ptr);
|
||||
|
||||
<strong>SYS_MEMSTATS (67)</strong>
|
||||
Get kernel-wide physical memory usage (total/free/used bytes,
|
||||
page size).
|
||||
void montauk::memstats(montauk::abi::MemStats* out);
|
||||
|
||||
<strong>TIMEKEEPING</strong>
|
||||
<strong>SYS_GETTICKS (13)</strong>
|
||||
Get APIC timer ticks since boot.
|
||||
uint64_t montauk::get_ticks();
|
||||
|
||||
<strong>SYS_GETMILLISECONDS (14)</strong>
|
||||
Get milliseconds elapsed since boot.
|
||||
uint64_t montauk::get_milliseconds();
|
||||
|
||||
<strong>SYS_GETTIME (28)</strong>
|
||||
Get the current wall-clock date and time (UTC).
|
||||
Fills a montauk::abi::DateTime struct with Year, Month, Day,
|
||||
Hour, Minute, and Second fields.
|
||||
void montauk::gettime(montauk::abi::DateTime* out);
|
||||
|
||||
<strong>SYS_SETTZ (90)</strong>
|
||||
Set the process/system timezone offset, in minutes from UTC.
|
||||
void montauk::settz(int offset_minutes);
|
||||
|
||||
<strong>SYS_GETTZ (91)</strong>
|
||||
Get the current timezone offset, in minutes from UTC.
|
||||
int montauk::gettz();
|
||||
|
||||
<strong>SYSTEM</strong>
|
||||
<strong>SYS_GETINFO (15)</strong>
|
||||
Get OS name, version string, API version, max process count,
|
||||
and the monotonic kernel build number.
|
||||
void montauk::get_info(montauk::abi::SysInfo* info);
|
||||
|
||||
<strong>KEYBOARD</strong>
|
||||
<strong>SYS_ISKEYAVAILABLE (16)</strong>
|
||||
Check if a key event is pending (non-blocking).
|
||||
bool montauk::is_key_available();
|
||||
|
||||
<strong>SYS_GETKEY (17)</strong>
|
||||
Get the next key event (press or release).
|
||||
void montauk::getkey(montauk::abi::KeyEvent* out);
|
||||
|
||||
<strong>SYS_GETCHAR (18)</strong>
|
||||
Block until a printable character is typed.
|
||||
char montauk::getchar();
|
||||
|
||||
<strong>SYS_INPUT_WAIT (123)</strong>
|
||||
Block until the input serial number differs from
|
||||
observedSerial or the timeout elapses; used to sleep
|
||||
efficiently between input-driven redraws.
|
||||
uint64_t montauk::input_wait(uint64_t observedSerial, uint64_t timeoutMs);
|
||||
|
||||
<strong>MOUSE</strong>
|
||||
<strong>SYS_MOUSESTATE (47)</strong>
|
||||
Get the current mouse position, scroll delta, and button mask.
|
||||
void montauk::mouse_state(montauk::abi::MouseState* out);
|
||||
|
||||
<strong>SYS_SETMOUSEBOUNDS (48)</strong>
|
||||
Set the maximum X/Y the mouse cursor may reach (e.g. framebuffer
|
||||
dimensions).
|
||||
void montauk::set_mouse_bounds(int32_t maxX, int32_t maxY);
|
||||
|
||||
<strong>NETWORKING</strong>
|
||||
<strong>SYS_PING (19)</strong>
|
||||
Send an ICMP echo request and wait for reply.
|
||||
int32_t montauk::ping(uint32_t ip, uint32_t timeoutMs = 3000);
|
||||
|
||||
<strong>SYS_RESOLVE (44)</strong>
|
||||
Resolve a hostname to an IPv4 address via DNS. Sends a UDP
|
||||
query to the configured DNS server and waits up to 5 seconds
|
||||
for a reply. Returns the IP in network byte order, or 0 on
|
||||
failure. IP address strings (e.g. "10.0.0.1") are detected
|
||||
and returned directly without a DNS query.
|
||||
uint32_t montauk::resolve(const char* hostname);
|
||||
|
||||
<strong>SYS_GETNETCFG (37)</strong>
|
||||
Get the current network configuration (IP, mask, gateway, MAC,
|
||||
DNS server).
|
||||
void montauk::get_netcfg(montauk::abi::NetCfg* out);
|
||||
|
||||
<strong>SYS_SETNETCFG (38)</strong>
|
||||
Set the network configuration (IP, mask, gateway, DNS server).
|
||||
int montauk::set_netcfg(const montauk::abi::NetCfg* cfg);
|
||||
|
||||
<strong>SYS_NETSTATUS (125)</strong>
|
||||
Get adapter status including driver name, link state, polling mode,
|
||||
and RX/TX packet counters.
|
||||
int montauk::net_status(montauk::abi::NetStatus* out);
|
||||
|
||||
<strong>SOCKETS</strong>
|
||||
<strong>SYS_SOCKET (29)</strong>
|
||||
Create a socket. type=SOCK_TCP (1) or SOCK_UDP (2).
|
||||
Returns fd or -1.
|
||||
int montauk::socket(int type);
|
||||
|
||||
<strong>SYS_CONNECT (30)</strong>
|
||||
Connect a TCP socket to a remote host.
|
||||
int montauk::connect(int fd, uint32_t ip, uint16_t port);
|
||||
|
||||
<strong>SYS_BIND (31)</strong>
|
||||
Bind a socket to a local port for listening.
|
||||
int montauk::bind(int fd, uint16_t port);
|
||||
|
||||
<strong>SYS_LISTEN (32)</strong>
|
||||
Start listening for incoming TCP connections.
|
||||
int montauk::listen(int fd);
|
||||
|
||||
<strong>SYS_ACCEPT (33)</strong>
|
||||
Accept an incoming connection on a listening socket.
|
||||
Returns a new socket fd for the client connection.
|
||||
int montauk::accept(int fd);
|
||||
|
||||
<strong>SYS_SEND (34)</strong>
|
||||
Send data on a connected socket. Returns bytes sent.
|
||||
int montauk::send(int fd, const void* data, uint32_t len);
|
||||
|
||||
<strong>SYS_RECV (35)</strong>
|
||||
Receive data from a connected socket. Returns bytes
|
||||
received, 0 if no data available, or -1 on close/error.
|
||||
int montauk::recv(int fd, void* buf, uint32_t maxLen);
|
||||
|
||||
<strong>SYS_CLOSESOCK (36)</strong>
|
||||
Close a socket and release its resources.
|
||||
int montauk::closesocket(int fd);
|
||||
|
||||
<strong>SYS_SENDTO (39)</strong>
|
||||
Send a UDP datagram to a specific destination.
|
||||
int montauk::sendto(int fd, const void* data, uint32_t len,
|
||||
uint32_t destIp, uint16_t destPort);
|
||||
|
||||
<strong>SYS_RECVFROM (40)</strong>
|
||||
Receive a UDP datagram. Returns the source address.
|
||||
int montauk::recvfrom(int fd, void* buf, uint32_t maxLen,
|
||||
uint32_t* srcIp, uint16_t* srcPort);
|
||||
|
||||
<strong>FRAMEBUFFER</strong>
|
||||
<strong>SYS_FBINFO (21)</strong>
|
||||
Get framebuffer dimensions and format.
|
||||
void montauk::fb_info(montauk::abi::FbInfo* info);
|
||||
|
||||
<strong>SYS_FBMAP (22)</strong>
|
||||
Map the framebuffer into process memory.
|
||||
void* montauk::fb_map();
|
||||
|
||||
<strong>TERMINAL</strong>
|
||||
<strong>SYS_TERMSIZE (24)</strong>
|
||||
Get terminal dimensions (columns and rows).
|
||||
void montauk::termsize(int* cols, int* rows);
|
||||
|
||||
<strong>SYS_TERMSCALE (43)</strong>
|
||||
Get or set the terminal font scale factor. When scale_x is 0,
|
||||
returns the current scale as (scale_y << 32 | scale_x). When
|
||||
scale_x is non-zero, sets the font scale and returns the new
|
||||
terminal dimensions as (rows << 32 | cols).
|
||||
void montauk::termscale(int scale_x, int scale_y);
|
||||
void montauk::get_termscale(int* scale_x, int* scale_y);
|
||||
|
||||
<strong>RANDOM</strong>
|
||||
<strong>SYS_GETRANDOM (45)</strong>
|
||||
Fill a buffer with random bytes using RDTSC-seeded entropy.
|
||||
Returns the number of bytes written.
|
||||
int64_t montauk::getrandom(void* buf, uint32_t len);
|
||||
|
||||
<strong>POWER MANAGEMENT</strong>
|
||||
<strong>SYS_RESET (26)</strong>
|
||||
Reboot the system.
|
||||
[[noreturn]] void montauk::reset();
|
||||
|
||||
<strong>SYS_SHUTDOWN (27)</strong>
|
||||
Shut down the system.
|
||||
[[noreturn]] void montauk::shutdown();
|
||||
|
||||
<strong>SYS_SUSPEND (89)</strong>
|
||||
Enter ACPI S3 sleep. Returns after wake, 0 on success.
|
||||
int montauk::suspend();
|
||||
|
||||
<strong>SYS_POWER_REQUEST (135)</strong>
|
||||
Cross-process graceful power-off request channel. The desktop
|
||||
posts a pending action (POWER_REQ_SHUTDOWN / POWER_REQ_REBOOT)
|
||||
then exits; login.elf reads it with POWER_REQ_QUERY
|
||||
(read-and-clear), runs the shutdown stages, and finally calls
|
||||
shutdown()/reset(). See montauk::abi::PowerRequestAction.
|
||||
int montauk::power_request(int action);
|
||||
|
||||
<strong>SYS_POWERINFO (149)</strong>
|
||||
Get the CPU power/thermal snapshot (HWP state, throttling,
|
||||
package temperature, base/max/effective frequency). Returns 0
|
||||
on success, -1 if unsupported by the running hardware.
|
||||
int montauk::syscall1(SYS_POWERINFO, (uint64_t)&out);
|
||||
// out: montauk::abi::PowerInfo*
|
||||
|
||||
<strong>KERNEL LOG</strong>
|
||||
<strong>SYS_LOG (46)</strong>
|
||||
Read from the kernel ring log buffer.
|
||||
int64_t montauk::read_log(char* buf, uint64_t size);
|
||||
|
||||
<strong>I/O REDIRECTION</strong>
|
||||
Used by the terminal app and similar programs to run a child
|
||||
process with its console I/O captured instead of going directly
|
||||
to the framebuffer console.
|
||||
|
||||
<strong>SYS_SPAWN_REDIR (49)</strong>
|
||||
Spawn a process with its console I/O redirected to the caller.
|
||||
int montauk::spawn_redir(const char* path, const char* args = nullptr);
|
||||
|
||||
<strong>SYS_CHILDIO_READ (50)</strong>
|
||||
Read buffered output produced by a redirected child.
|
||||
int montauk::childio_read(int childPid, char* buf, int maxLen);
|
||||
|
||||
<strong>SYS_CHILDIO_WRITE (51)</strong>
|
||||
Write text input to a redirected child's stdin.
|
||||
int montauk::childio_write(int childPid, const char* data, int len);
|
||||
|
||||
<strong>SYS_CHILDIO_WRITEKEY (52)</strong>
|
||||
Forward a raw key event to a redirected child.
|
||||
int montauk::childio_writekey(int childPid, const montauk::abi::KeyEvent* key);
|
||||
|
||||
<strong>SYS_CHILDIO_SETTERMSZ (53)</strong>
|
||||
Tell a redirected child its terminal dimensions changed.
|
||||
int montauk::childio_settermsz(int childPid, int cols, int rows);
|
||||
|
||||
<strong>WINDOW SERVER</strong>
|
||||
Window server syscalls are used by GUI programs to create and
|
||||
drive an on-screen window (see montauk/Window.hpp for the
|
||||
higher-level win_create/win_poll/win_present wrappers built on
|
||||
top of these).
|
||||
|
||||
<strong>SYS_WINCREATE (54)</strong>
|
||||
Create a window and get its pixel buffer.
|
||||
int montauk::win_create(const char* title, int w, int h,
|
||||
montauk::abi::WinCreateResult* result);
|
||||
|
||||
<strong>SYS_WINDESTROY (55)</strong>
|
||||
Destroy a window.
|
||||
int montauk::win_destroy(int id);
|
||||
|
||||
<strong>SYS_WINPRESENT (56)</strong>
|
||||
Flush the pixel buffer to the screen.
|
||||
uint64_t montauk::win_present(int id);
|
||||
|
||||
<strong>SYS_WINPOLL (57)</strong>
|
||||
Poll the next event (key, mouse, resize, close, scale) for a
|
||||
window.
|
||||
int montauk::win_poll(int id, montauk::abi::WinEvent* event);
|
||||
|
||||
<strong>SYS_WINENUM (58)</strong>
|
||||
Enumerate all windows currently managed by the window server.
|
||||
int montauk::win_enumerate(montauk::abi::WinInfo* info, int max);
|
||||
|
||||
<strong>SYS_WINMAP (59)</strong>
|
||||
Map (or re-map) a window's pixel buffer into the caller's
|
||||
address space.
|
||||
uint64_t montauk::win_map(int id);
|
||||
|
||||
<strong>SYS_WINUNMAP (97)</strong>
|
||||
Unmap a window's pixel buffer from the caller's address space.
|
||||
int montauk::win_unmap(int id);
|
||||
|
||||
<strong>SYS_WINSENDEVENT (60)</strong>
|
||||
Inject an event into a window's event queue.
|
||||
int montauk::win_sendevent(int id, const montauk::abi::WinEvent* event);
|
||||
|
||||
<strong>SYS_WINRESIZE (64)</strong>
|
||||
Resize a window and its pixel buffer.
|
||||
uint64_t montauk::win_resize(int id, int w, int h);
|
||||
|
||||
<strong>SYS_WINSETSCALE (65)</strong>
|
||||
Set the desktop-wide UI scale factor.
|
||||
int montauk::win_setscale(int scale);
|
||||
|
||||
<strong>SYS_WINGETSCALE (66)</strong>
|
||||
Get the desktop-wide UI scale factor.
|
||||
int montauk::win_getscale();
|
||||
|
||||
<strong>SYS_WINSETCURSOR (68)</strong>
|
||||
Set the mouse cursor shown while over a window (0=arrow,
|
||||
1=resize_h, 2=resize_v).
|
||||
int montauk::win_setcursor(int id, int cursor);
|
||||
|
||||
<strong>SYS_WINSETFLAGS (126)</strong>
|
||||
Set window flags (e.g. WIN_FLAG_FULLSCREEN).
|
||||
int montauk::win_setflags(int id, uint32_t flags);
|
||||
|
||||
<strong>DEVICES</strong>
|
||||
<strong>SYS_DEVLIST (63)</strong>
|
||||
Enumerate detected devices (CPU, interrupts, timers, input,
|
||||
USB, network, display, storage, PCI, audio, ACPI) for the
|
||||
device explorer app.
|
||||
int montauk::devlist(montauk::abi::DevInfo* buf, int max);
|
||||
|
||||
<strong>SYS_DISKINFO (69)</strong>
|
||||
Get detailed info for one block device (model, serial, sector
|
||||
size, NCQ/TRIM/SMART support, etc.).
|
||||
int montauk::diskinfo(montauk::abi::DiskInfo* buf, int port);
|
||||
|
||||
<strong>STORAGE</strong>
|
||||
<strong>SYS_PARTLIST (70)</strong>
|
||||
Enumerate GPT partitions across all block devices.
|
||||
int montauk::partlist(montauk::abi::PartInfo* buf, int max);
|
||||
|
||||
<strong>SYS_DISKREAD (71)</strong>
|
||||
Raw, driver-agnostic sector read from a block device.
|
||||
int64_t montauk::disk_read(int blockDev, uint64_t lba,
|
||||
uint32_t sectorCount, void* buf);
|
||||
|
||||
<strong>SYS_DISKWRITE (72)</strong>
|
||||
Raw, driver-agnostic sector write to a block device.
|
||||
int64_t montauk::disk_write(int blockDev, uint64_t lba,
|
||||
uint32_t sectorCount, const void* buf);
|
||||
|
||||
<strong>SYS_GPTINIT (73)</strong>
|
||||
Initialize a fresh GPT partition table on a block device.
|
||||
int montauk::gpt_init(int blockDev);
|
||||
|
||||
<strong>SYS_GPTADD (74)</strong>
|
||||
Add a partition to an existing GPT table.
|
||||
int montauk::gpt_add(const montauk::abi::GptAddParams* params);
|
||||
|
||||
<strong>SYS_FSMOUNT (75)</strong>
|
||||
Mount a partition's filesystem onto a drive number.
|
||||
int montauk::fs_mount(int partIndex, int driveNum);
|
||||
|
||||
<strong>SYS_FSFORMAT (76)</strong>
|
||||
Format a partition with a filesystem (FS_TYPE_FAT32 or
|
||||
FS_TYPE_EXT2).
|
||||
int montauk::fs_format(const montauk::abi::FsFormatParams* params);
|
||||
|
||||
<strong>SYS_FS_SYNC (134)</strong>
|
||||
Flush all block-device write caches and cleanly unmount
|
||||
disk-backed volumes ahead of power-off. Returns the number of
|
||||
volumes unmounted. Part of the graceful shutdown sequence
|
||||
(see SYS_POWER_REQUEST).
|
||||
int montauk::fs_sync();
|
||||
|
||||
<strong>AUDIO</strong>
|
||||
<strong>SYS_AUDIOOPEN (80)</strong>
|
||||
Open a mixer output stream at the given sample rate, channel
|
||||
count, and bit depth. Returns a stream handle.
|
||||
int montauk::audio_open(uint32_t sampleRate, uint8_t channels,
|
||||
uint8_t bitsPerSample);
|
||||
|
||||
<strong>SYS_AUDIOCLOSE (81)</strong>
|
||||
Close an audio stream.
|
||||
void montauk::audio_close(int handle);
|
||||
|
||||
<strong>SYS_AUDIOWRITE (82)</strong>
|
||||
Write PCM samples to an audio stream.
|
||||
int montauk::audio_write(int handle, const void* data, uint32_t size);
|
||||
|
||||
<strong>SYS_AUDIOCTL (83)</strong>
|
||||
Control an audio stream or the global mixer. Commands 0-3 act
|
||||
on the stream named by the handle argument; commands 4-12 act
|
||||
on that stream's routing/mute state or the global master and
|
||||
ignore or reuse the handle as documented below.
|
||||
int montauk::audio_ctl(int handle, int cmd, int value);
|
||||
|
||||
Convenience wrappers (all thin calls onto audio_ctl):
|
||||
audio_set_volume, audio_get_volume AUDIO_CTL_{SET,GET}_VOLUME (0/1)
|
||||
audio_get_pos AUDIO_CTL_GET_POS (2)
|
||||
audio_pause, audio_resume AUDIO_CTL_PAUSE (3)
|
||||
audio_get_output AUDIO_CTL_GET_OUTPUT (4): 0=HDA, 1=Bluetooth
|
||||
audio_set_output AUDIO_CTL_SET_OUTPUT (5): switch all streams
|
||||
(SET_OUTPUT, 5) switch a stream's output route
|
||||
audio_bt_status AUDIO_CTL_BT_STATUS (6)
|
||||
audio_set_master_volume, _get_ AUDIO_CTL_{SET,GET}_MASTER_VOLUME (7/8), 0-100
|
||||
audio_set_mute, audio_get_mute AUDIO_CTL_{SET,GET}_MUTE (9/10), per-stream
|
||||
audio_set_master_mute, _get_ AUDIO_CTL_{SET,GET}_MASTER_MUTE (11/12)
|
||||
|
||||
<strong>SYS_AUDIOLIST (128)</strong>
|
||||
Enumerate active mixer streams (owner PID, name, format,
|
||||
volume, mute/pause state).
|
||||
int montauk::audio_list(montauk::abi::AudioStreamInfo* buf, int maxCount);
|
||||
|
||||
<strong>SYS_AUDIOWAIT (129)</strong>
|
||||
Return the current mixer state serial. With timeoutMs > 0,
|
||||
blocks until the serial differs from prevSerial or the timeout
|
||||
elapses; with timeoutMs == 0 it returns immediately.
|
||||
uint64_t montauk::audio_wait(uint64_t prevSerial, uint64_t timeoutMs);
|
||||
|
||||
<strong>BLUETOOTH</strong>
|
||||
<strong>SYS_BTSCAN (84)</strong>
|
||||
Scan for discoverable Bluetooth devices for up to timeoutMs.
|
||||
int montauk::bt_scan(montauk::abi::BtScanResult* buf, int maxCount,
|
||||
uint32_t timeoutMs);
|
||||
|
||||
<strong>SYS_BTCONNECT (85)</strong>
|
||||
Connect (and pair/bond if needed) to a device by BD_ADDR.
|
||||
int montauk::bt_connect(const uint8_t* bdAddr);
|
||||
|
||||
<strong>SYS_BTDISCONNECT (86)</strong>
|
||||
Disconnect from a device by BD_ADDR.
|
||||
int montauk::bt_disconnect(const uint8_t* bdAddr);
|
||||
|
||||
<strong>SYS_BTLIST (87)</strong>
|
||||
List currently connected devices.
|
||||
int montauk::bt_list(montauk::abi::BtDevInfo* buf, int maxCount);
|
||||
|
||||
<strong>SYS_BTINFO (88)</strong>
|
||||
Get local adapter info (BD_ADDR, name, init/scanning state).
|
||||
int montauk::bt_info(montauk::abi::BtAdapterInfo* buf);
|
||||
|
||||
<strong>SYS_BTSETADDR (137)</strong>
|
||||
Change the adapter's BD_ADDR (6-byte buffer, byte 0 is the
|
||||
least-significant octet). Volatile -- apply after the last
|
||||
controller reset and persist separately to bluetooth.toml.
|
||||
int montauk::bt_set_addr(const uint8_t* bdAddr);
|
||||
|
||||
<strong>SYS_BTBONDS (138)</strong>
|
||||
List bonded (paired) devices.
|
||||
int montauk::bt_bonds(montauk::abi::BtBondInfo* buf, int maxCount);
|
||||
|
||||
<strong>SYS_BTFORGET (139)</strong>
|
||||
Forget a paired device; it must re-pair next time.
|
||||
int montauk::bt_forget(const uint8_t* bdAddr);
|
||||
|
||||
<strong>SOFTWARE-DEFINED RADIO</strong>
|
||||
Receive-only SDR API. Receivers are enumerated by index in
|
||||
[0, SYS_SDR_COUNT); SYS_SDR_OPEN returns a handle used by the
|
||||
rest of the calls. Samples are delivered as interleaved 8-bit
|
||||
unsigned I/Q (CU8, SDR_FORMAT_CU8) from the device's ring
|
||||
buffer. Backed by an RTL-SDR (RTL2832U + R820T2) driver.
|
||||
|
||||
<strong>SYS_SDR_COUNT (140)</strong>
|
||||
Number of available SDR receivers.
|
||||
int montauk::sdr_count();
|
||||
|
||||
<strong>SYS_SDR_INFO (141)</strong>
|
||||
Get static/dynamic info for one receiver by index (name, tuner,
|
||||
frequency/sample-rate ranges, gain steps, present/streaming
|
||||
flags).
|
||||
int montauk::sdr_info(int index, montauk::abi::SdrDeviceInfo* out);
|
||||
|
||||
<strong>SYS_SDR_OPEN (142)</strong>
|
||||
Open a receiver by index. Returns a handle.
|
||||
int montauk::sdr_open(int index);
|
||||
|
||||
<strong>SYS_SDR_CLOSE (143)</strong>
|
||||
Close a receiver handle.
|
||||
int montauk::sdr_close(int handle);
|
||||
|
||||
<strong>SYS_SDR_START (144)</strong>
|
||||
Begin streaming samples.
|
||||
int montauk::sdr_start(int handle);
|
||||
|
||||
<strong>SYS_SDR_STOP (145)</strong>
|
||||
Stop streaming samples.
|
||||
int montauk::sdr_stop(int handle);
|
||||
|
||||
<strong>SYS_SDR_READ (146)</strong>
|
||||
Non-blocking read of queued I/Q samples. Returns bytes copied.
|
||||
int montauk::sdr_read(int handle, void* buf, uint32_t len);
|
||||
|
||||
<strong>SYS_SDR_SETPARAM (147)</strong>
|
||||
Set a tunable parameter (see SDR_PARAM_* below).
|
||||
int montauk::sdr_set_param(int handle, int param, uint64_t value);
|
||||
|
||||
<strong>SYS_SDR_GETPARAM (148)</strong>
|
||||
Get a tunable parameter's current value.
|
||||
int64_t montauk::sdr_get_param(int handle, int param);
|
||||
|
||||
Parameters (montauk::abi::SDR_PARAM_*): FREQ (center frequency,
|
||||
Hz), SAMPLE_RATE (Hz), GAIN_MODE (0=auto/AGC, 1=manual), GAIN
|
||||
(tenths of dB), FREQ_CORR (ppm), AGC (demod digital AGC, 0/1),
|
||||
DIRECT_SAMP (0=off, 1=I, 2=Q). Convenience wrappers exist for
|
||||
each: sdr_set_freq/sdr_get_freq, sdr_set_sample_rate/
|
||||
sdr_get_sample_rate, sdr_set_gain_mode, sdr_set_gain,
|
||||
sdr_set_freq_correction, sdr_set_agc.
|
||||
|
||||
<strong>CLIPBOARD</strong>
|
||||
<strong>SYS_CLIPBOARD_SET_TEXT (119)</strong>
|
||||
Set the system clipboard's text contents (max
|
||||
CLIPBOARD_MAX_TEXT_BYTES, 256 KiB).
|
||||
int montauk::clipboard_set_text(const char* data, uint32_t len);
|
||||
|
||||
<strong>SYS_CLIPBOARD_GET_INFO (120)</strong>
|
||||
Get the clipboard's current size and serial number (for
|
||||
change detection).
|
||||
int montauk::clipboard_get_info(montauk::abi::ClipboardInfo* out);
|
||||
|
||||
<strong>SYS_CLIPBOARD_GET_TEXT (121)</strong>
|
||||
Read the clipboard's text contents.
|
||||
int montauk::clipboard_get_text(char* buf, uint32_t bufLen,
|
||||
uint32_t* outLen, uint64_t* outSerial = nullptr);
|
||||
|
||||
<strong>SYS_CLIPBOARD_CLEAR (122)</strong>
|
||||
Clear the clipboard.
|
||||
int montauk::clipboard_clear();
|
||||
|
||||
<strong>GENERIC IPC</strong>
|
||||
Handle-based IPC primitives underlying streams, mailboxes,
|
||||
waitsets, and shared-memory surfaces (see kernel/src/Ipc/Ipc.hpp).
|
||||
All are accessed via numeric handles with rights-based security
|
||||
and can be waited on with SYS_WAIT_HANDLE or a waitset.
|
||||
|
||||
<strong>SYS_DUPHANDLE (98)</strong>
|
||||
Duplicate a handle (e.g. to hand a copy to a child process).
|
||||
int montauk::dup_handle(int handle);
|
||||
|
||||
<strong>SYS_WAIT_HANDLE (99)</strong>
|
||||
Block until a handle's signals intersect wantedSignals, or
|
||||
timeoutMs elapses. See IPC_SIGNAL_* (READABLE, WRITABLE,
|
||||
PEER_CLOSED, EXITED, READY).
|
||||
uint32_t montauk::wait_handle(int handle, uint32_t wantedSignals,
|
||||
uint64_t timeoutMs = ~0ULL);
|
||||
|
||||
<strong>SYS_STREAM_CREATE (100)</strong>
|
||||
Create a byte-pipe stream, returning a read handle and a write
|
||||
handle.
|
||||
int montauk::stream_create(int* outReadHandle, int* outWriteHandle,
|
||||
uint32_t capacity = 0);
|
||||
|
||||
<strong>SYS_STREAM_READ (101)</strong>
|
||||
Read bytes from a stream handle.
|
||||
int montauk::stream_read(int handle, void* buf, int maxLen);
|
||||
|
||||
<strong>SYS_STREAM_WRITE (102)</strong>
|
||||
Write bytes to a stream handle.
|
||||
int montauk::stream_write(int handle, const void* data, int len);
|
||||
|
||||
<strong>SYS_MAILBOX_CREATE (103)</strong>
|
||||
Create a message-queue mailbox, returning a send handle and a
|
||||
receive handle.
|
||||
int montauk::mailbox_create(int* outSendHandle, int* outRecvHandle);
|
||||
|
||||
<strong>SYS_MAILBOX_SEND (104)</strong>
|
||||
Send a typed message, optionally attaching a handle to
|
||||
transfer to the receiver.
|
||||
int montauk::mailbox_send(int handle, uint32_t msgType, const void* data,
|
||||
uint16_t len, int attachHandle = -1);
|
||||
|
||||
<strong>SYS_MAILBOX_RECV (105)</strong>
|
||||
Receive a message.
|
||||
int montauk::mailbox_recv(int handle, uint32_t* outMsgType, void* data,
|
||||
uint16_t* inOutLen, int* outAttachHandle = nullptr);
|
||||
|
||||
<strong>SYS_WAITSET_CREATE (106)</strong>
|
||||
Create a waitset for multiplexing waits across many handles.
|
||||
int montauk::waitset_create();
|
||||
|
||||
<strong>SYS_WAITSET_ADD (107)</strong>
|
||||
Add a handle and its signal mask to a waitset.
|
||||
int montauk::waitset_add(int waitsetHandle, int targetHandle,
|
||||
uint32_t signals);
|
||||
|
||||
<strong>SYS_WAITSET_REMOVE (108)</strong>
|
||||
Remove an entry from a waitset by index.
|
||||
int montauk::waitset_remove(int waitsetHandle, int index);
|
||||
|
||||
<strong>SYS_WAITSET_WAIT (109)</strong>
|
||||
Block until any member handle's watched signals fire, or
|
||||
timeoutMs elapses.
|
||||
int montauk::waitset_wait(int waitsetHandle, montauk::abi::IpcWaitResult* outReady,
|
||||
uint64_t timeoutMs = ~0ULL);
|
||||
|
||||
<strong>SYS_PROC_OPEN (110)</strong>
|
||||
Open a handle to another process by PID (for waiting on its
|
||||
exit via IPC_SIGNAL_EXITED, etc.).
|
||||
int montauk::proc_open(int pid);
|
||||
|
||||
<strong>SYS_SURFACE_CREATE (111)</strong>
|
||||
Create a shared pixel-buffer surface of byteSize bytes.
|
||||
int montauk::surface_create(uint64_t byteSize);
|
||||
|
||||
<strong>SYS_SURFACE_MAP (112)</strong>
|
||||
Map a surface into the caller's address space.
|
||||
void* montauk::surface_map(int handle);
|
||||
|
||||
<strong>SYS_SURFACE_RESIZE (113)</strong>
|
||||
Resize a surface.
|
||||
int montauk::surface_resize(int handle, uint64_t newSize);
|
||||
|
||||
<strong>SHARED LIBRARIES</strong>
|
||||
<strong>SYS_LOAD_LIB (114)</strong>
|
||||
Load a shared library ELF (.lib) into the caller's address
|
||||
space.
|
||||
int montauk::load_lib(const char* path);
|
||||
|
||||
<strong>SYS_UNLOAD_LIB (115)</strong>
|
||||
Unload a previously loaded library.
|
||||
int montauk::unload_lib(int handle);
|
||||
|
||||
<strong>SYS_DLSYM (116)</strong>
|
||||
Resolve a symbol offset within a loaded library to a callable
|
||||
address.
|
||||
void* montauk::dlsym(int handle, uint64_t symbolOffset);
|
||||
|
||||
<strong>SYS_GETLIBBASE (117)</strong>
|
||||
Get the base virtual address a loaded library was mapped at.
|
||||
uint64_t montauk::get_libbase(int handle);
|
||||
|
||||
<strong>CRASH REPORTING</strong>
|
||||
<strong>SYS_CRASH_REPORT (118)</strong>
|
||||
Retrieve the kernel-filled crash report for the last faulting
|
||||
process (exception vector/name, faulting address, register
|
||||
state, page-fault error bits). Used by the crashpad app.
|
||||
int montauk::crash_report(montauk::abi::CrashReportInfo* out);
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
spawn(2), file(2), framebuffer(2), malloc(3), intro(1)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,355 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: tls-errors(5) - BearSSL TLS and X.509 error codes">
|
||||
<title>tls-errors(5) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>tls-errors(5)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
tls-errors - BearSSL TLS and X.509 error codes
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
MontaukOS uses BearSSL for TLS 1.2 connections. When a TLS
|
||||
operation fails, an integer error code is reported. This page
|
||||
lists all possible error codes.
|
||||
|
||||
<strong>SSL/TLS ENGINE ERRORS</strong>
|
||||
|
||||
<strong>0 BR_ERR_OK</strong>
|
||||
No error.
|
||||
|
||||
<strong>1 BR_ERR_BAD_PARAM</strong>
|
||||
Caller-provided parameter is incorrect.
|
||||
|
||||
<strong>2 BR_ERR_BAD_STATE</strong>
|
||||
Operation cannot be applied in the current engine state.
|
||||
|
||||
<strong>3 BR_ERR_UNSUPPORTED_VERSION</strong>
|
||||
Incoming protocol or record version is unsupported.
|
||||
|
||||
<strong>4 BR_ERR_BAD_VERSION</strong>
|
||||
Incoming record version does not match the expected version.
|
||||
|
||||
<strong>5 BR_ERR_BAD_LENGTH</strong>
|
||||
Incoming record length is invalid.
|
||||
|
||||
<strong>6 BR_ERR_TOO_LARGE</strong>
|
||||
Incoming record is too large, or buffer is too small for the
|
||||
handshake message to send.
|
||||
|
||||
<strong>7 BR_ERR_BAD_MAC</strong>
|
||||
Decryption found invalid padding, or the record MAC is
|
||||
not correct.
|
||||
|
||||
<strong>8 BR_ERR_NO_RANDOM</strong>
|
||||
No initial entropy was provided and none could be obtained
|
||||
from the OS.
|
||||
|
||||
<strong>9 BR_ERR_UNKNOWN_TYPE</strong>
|
||||
Incoming record type is unknown.
|
||||
|
||||
<strong>10 BR_ERR_UNEXPECTED</strong>
|
||||
Incoming record or message has wrong type for the current
|
||||
engine state.
|
||||
|
||||
<strong>12 BR_ERR_BAD_CCS</strong>
|
||||
ChangeCipherSpec message from the peer has invalid contents.
|
||||
|
||||
<strong>13 BR_ERR_BAD_ALERT</strong>
|
||||
Alert message from the peer has invalid contents (odd length).
|
||||
|
||||
<strong>14 BR_ERR_BAD_HANDSHAKE</strong>
|
||||
Incoming handshake message decoding failed.
|
||||
|
||||
<strong>15 BR_ERR_OVERSIZED_ID</strong>
|
||||
ServerHello contains a session ID larger than 32 bytes.
|
||||
|
||||
<strong>16 BR_ERR_BAD_CIPHER_SUITE</strong>
|
||||
Server wants to use a cipher suite that we did not advertise,
|
||||
or we tried to advertise a cipher suite that we do not support.
|
||||
|
||||
<strong>17 BR_ERR_BAD_COMPRESSION</strong>
|
||||
Server wants to use a compression method that we did not
|
||||
advertise.
|
||||
|
||||
<strong>18 BR_ERR_BAD_FRAGLEN</strong>
|
||||
Server's max fragment length does not match client's.
|
||||
|
||||
<strong>19 BR_ERR_BAD_SECRENEG</strong>
|
||||
Secure renegotiation failed.
|
||||
|
||||
<strong>20 BR_ERR_EXTRA_EXTENSION</strong>
|
||||
Server sent an extension type that we did not announce, or
|
||||
used the same extension type more than once in ServerHello.
|
||||
|
||||
<strong>21 BR_ERR_BAD_SNI</strong>
|
||||
Invalid Server Name Indication contents (when used by the
|
||||
server, this extension shall be empty).
|
||||
|
||||
<strong>22 BR_ERR_BAD_HELLO_DONE</strong>
|
||||
Invalid ServerHelloDone from the server (length is not 0).
|
||||
|
||||
<strong>23 BR_ERR_LIMIT_EXCEEDED</strong>
|
||||
Internal limit exceeded (e.g. server's public key is too
|
||||
large).
|
||||
|
||||
<strong>24 BR_ERR_BAD_FINISHED</strong>
|
||||
Finished message from peer does not match the expected value.
|
||||
|
||||
<strong>25 BR_ERR_RESUME_MISMATCH</strong>
|
||||
Session resumption attempted with a different version or
|
||||
cipher suite.
|
||||
|
||||
<strong>26 BR_ERR_INVALID_ALGORITHM</strong>
|
||||
Unsupported or invalid algorithm (ECDHE curve, signature
|
||||
algorithm, hash function).
|
||||
|
||||
<strong>27 BR_ERR_BAD_SIGNATURE</strong>
|
||||
Invalid signature on ServerKeyExchange or CertificateVerify.
|
||||
|
||||
<strong>28 BR_ERR_WRONG_KEY_USAGE</strong>
|
||||
Peer's public key does not have the proper type or is not
|
||||
allowed for the requested operation.
|
||||
|
||||
<strong>29 BR_ERR_NO_CLIENT_AUTH</strong>
|
||||
Client did not send a certificate upon request, or the client
|
||||
certificate could not be validated.
|
||||
|
||||
<strong>31 BR_ERR_IO</strong>
|
||||
I/O error or premature close on the underlying transport.
|
||||
|
||||
<strong>X.509 CERTIFICATE ERRORS</strong>
|
||||
|
||||
<strong>32 BR_ERR_X509_OK</strong>
|
||||
X.509 validation was successful (not an error).
|
||||
|
||||
<strong>33 BR_ERR_X509_INVALID_VALUE</strong>
|
||||
Invalid value in an ASN.1 structure.
|
||||
|
||||
<strong>34 BR_ERR_X509_TRUNCATED</strong>
|
||||
Truncated certificate.
|
||||
|
||||
<strong>35 BR_ERR_X509_EMPTY_CHAIN</strong>
|
||||
Empty certificate chain (no certificate at all).
|
||||
|
||||
<strong>36 BR_ERR_X509_INNER_TRUNC</strong>
|
||||
Inner element extends beyond outer element size.
|
||||
|
||||
<strong>37 BR_ERR_X509_BAD_TAG_CLASS</strong>
|
||||
Unsupported tag class (application or private).
|
||||
|
||||
<strong>38 BR_ERR_X509_BAD_TAG_VALUE</strong>
|
||||
Unsupported tag value.
|
||||
|
||||
<strong>39 BR_ERR_X509_INDEFINITE_LENGTH</strong>
|
||||
Indefinite length encoding found.
|
||||
|
||||
<strong>40 BR_ERR_X509_EXTRA_ELEMENT</strong>
|
||||
Extraneous element in certificate.
|
||||
|
||||
<strong>41 BR_ERR_X509_UNEXPECTED</strong>
|
||||
Unexpected element in certificate.
|
||||
|
||||
<strong>42 BR_ERR_X509_NOT_CONSTRUCTED</strong>
|
||||
Expected constructed element, but found primitive.
|
||||
|
||||
<strong>43 BR_ERR_X509_NOT_PRIMITIVE</strong>
|
||||
Expected primitive element, but found constructed.
|
||||
|
||||
<strong>44 BR_ERR_X509_PARTIAL_BYTE</strong>
|
||||
BIT STRING length is not a multiple of 8.
|
||||
|
||||
<strong>45 BR_ERR_X509_BAD_BOOLEAN</strong>
|
||||
BOOLEAN value has invalid length.
|
||||
|
||||
<strong>46 BR_ERR_X509_OVERFLOW</strong>
|
||||
Value is off-limits (overflow).
|
||||
|
||||
<strong>47 BR_ERR_X509_BAD_DN</strong>
|
||||
Invalid distinguished name.
|
||||
|
||||
<strong>48 BR_ERR_X509_BAD_TIME</strong>
|
||||
Invalid date/time representation in certificate.
|
||||
|
||||
<strong>49 BR_ERR_X509_UNSUPPORTED</strong>
|
||||
Certificate contains unsupported features that cannot be
|
||||
ignored.
|
||||
|
||||
<strong>50 BR_ERR_X509_LIMIT_EXCEEDED</strong>
|
||||
Key or signature size exceeds internal limits.
|
||||
|
||||
<strong>51 BR_ERR_X509_WRONG_KEY_TYPE</strong>
|
||||
Key type does not match that which was expected.
|
||||
|
||||
<strong>52 BR_ERR_X509_BAD_SIGNATURE</strong>
|
||||
Signature is invalid.
|
||||
|
||||
<strong>53 BR_ERR_X509_TIME_UNKNOWN</strong>
|
||||
Validation time is unknown (no time was set).
|
||||
|
||||
<strong>54 BR_ERR_X509_EXPIRED</strong>
|
||||
Certificate is expired or not yet valid.
|
||||
|
||||
<strong>55 BR_ERR_X509_DN_MISMATCH</strong>
|
||||
Issuer/subject DN mismatch in the chain.
|
||||
|
||||
<strong>56 BR_ERR_X509_BAD_SERVER_NAME</strong>
|
||||
Expected server name was not found in the chain.
|
||||
|
||||
<strong>57 BR_ERR_X509_CRITICAL_EXTENSION</strong>
|
||||
Unknown critical extension in certificate.
|
||||
|
||||
<strong>58 BR_ERR_X509_NOT_CA</strong>
|
||||
Not a CA, or path length constraint violation.
|
||||
|
||||
<strong>59 BR_ERR_X509_FORBIDDEN_KEY_USAGE</strong>
|
||||
Key Usage extension prohibits the intended usage.
|
||||
|
||||
<strong>60 BR_ERR_X509_WEAK_PUBLIC_KEY</strong>
|
||||
Public key found in certificate is too small.
|
||||
|
||||
<strong>62 BR_ERR_X509_NOT_TRUSTED</strong>
|
||||
Chain could not be linked to a trust anchor.
|
||||
|
||||
<strong>FATAL ALERTS</strong>
|
||||
When a fatal alert is received from the peer, the error code
|
||||
is 256 + the TLS alert value. When a fatal alert is sent to
|
||||
the peer, the error code is 512 + the TLS alert value.
|
||||
|
||||
Common alert values:
|
||||
0 close_notify
|
||||
10 unexpected_message
|
||||
20 bad_record_mac
|
||||
40 handshake_failure
|
||||
42 bad_certificate
|
||||
43 unsupported_certificate
|
||||
44 certificate_revoked
|
||||
45 certificate_expired
|
||||
46 certificate_unknown
|
||||
47 illegal_parameter
|
||||
48 unknown_ca
|
||||
50 decode_error
|
||||
51 decrypt_error
|
||||
70 protocol_version
|
||||
71 insufficient_security
|
||||
80 internal_error
|
||||
86 unrecognized_name
|
||||
112 no_application_protocol
|
||||
|
||||
For example, error 296 means a handshake_failure alert was
|
||||
received (256 + 40 = 296).
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
fetch(1), syscalls(2)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,182 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS manual page: wiki(1) - Wikipedia article viewer for MontaukOS">
|
||||
<title>wiki(1) - MontaukOS Manual</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar .current {
|
||||
color: #004499;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
||||
code { background: #f0f0f0; padding: 0 0.15em; }
|
||||
pre code { padding: 0; }
|
||||
.center { text-align: center; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Man Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>wiki(1)</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<pre><code><strong>NAME</strong>
|
||||
wiki - Wikipedia article viewer for MontaukOS
|
||||
|
||||
<strong>SYNOPSIS</strong>
|
||||
wiki <title>
|
||||
wiki -f <title>
|
||||
wiki -s <query>
|
||||
|
||||
<strong>DESCRIPTION</strong>
|
||||
wiki fetches and displays Wikipedia articles in the terminal.
|
||||
It connects to en.wikipedia.org over HTTPS (TLS 1.2) and
|
||||
uses the Wikipedia REST and Action APIs to retrieve article
|
||||
content as plain text.
|
||||
|
||||
Articles are displayed in a fullscreen interactive pager with
|
||||
color-coded headings and word-wrapped text. Multi-word titles
|
||||
are accepted as separate arguments and joined automatically.
|
||||
|
||||
<strong>OPTIONS</strong>
|
||||
<strong>-f</strong>
|
||||
Full article mode. Display the complete article text instead
|
||||
of just the summary. Section headings are color-coded.
|
||||
|
||||
<strong>-s</strong>
|
||||
Search mode. Search Wikipedia for articles matching the
|
||||
query and display a numbered list of up to 10 results.
|
||||
Press a number key to view that article's summary.
|
||||
|
||||
<strong>EXAMPLES</strong>
|
||||
wiki Linux
|
||||
Show a summary of the Linux article.
|
||||
|
||||
wiki -f C programming language
|
||||
Show the full text of the C programming language article.
|
||||
|
||||
wiki -s operating system
|
||||
Search for articles related to "operating system".
|
||||
|
||||
<strong>TLS SUPPORT</strong>
|
||||
Connections use BearSSL for TLS 1.2. Server certificates
|
||||
are validated against the system CA bundle at
|
||||
0:/os/certs/ca-certificates.crt.
|
||||
|
||||
<strong>KEYBOARD</strong>
|
||||
|
||||
<strong>Article pager</strong>
|
||||
j / Down Scroll down one line
|
||||
k / Up Scroll up one line
|
||||
Space / PgDn Scroll down one page
|
||||
b / PgUp Scroll up one page
|
||||
g / Home Jump to top
|
||||
G / End Jump to bottom
|
||||
q Quit pager
|
||||
|
||||
<strong>Search results</strong>
|
||||
1-9, 0 View article (0 = result 10)
|
||||
q Quit search
|
||||
|
||||
<strong>General</strong>
|
||||
Ctrl+Q Abort during network request
|
||||
|
||||
<strong>SEE ALSO</strong>
|
||||
fetch(1), ping(1), nslookup(1), shell(1)</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,152 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Tutorials">
|
||||
<title>Connectivity - MontaukOS Tutorials</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.doc-list p {
|
||||
margin: 0.25em 0 0 1.5em;
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Tutorials</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h2>Connecting to a network (and to the Internet) on MontaukOS</h2>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<p>This tutorial explains how to connect to your local network on MontaukOS.</p>
|
||||
<hr><br>
|
||||
<p>
|
||||
MontaukOS includes drivers for Intel Ethernet adapters, including virtualized adapters found on QEMU and VirtualBox, and adapters used on a wide variety of desktops and laptops. Wireless networking via Wi-Fi is currently not supported.<br><br>
|
||||
For most Ethernet configurations, MontaukOS should automatically connect to your local network and obtain an IP address via the DHCP protocol. You can review your network connection using the Network configuration applet:
|
||||
<ol>
|
||||
<li>Open the applications menu and click on the 'Settings' entry.</li>
|
||||
<li>Double-click the 'Network' applet from within the Settings virtual folder.</li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<img src="images/networkapplet-overview.png" alt="">
|
||||
<p>The Network applet displayed on a QEMU/KVM virtual machine (MontaukOS 0.1.5)</p>
|
||||
</blockquote>
|
||||
If you need to manually configure your connection - such as by setting up a static IP - you can use the "Configure" tab.
|
||||
Configuration options include the IP address, subnet mask, gateway IP, and DNS server.
|
||||
<blockquote>
|
||||
<img src="images/networkapplet-configure.png" alt=""><br><br>
|
||||
</blockquote>
|
||||
|
||||
The 'DHCP' button on the toolbar invokes the DHCP client manually, in the background. MontaukOS otherwise runs the DHCP client automatically once every system startup.<br><br>
|
||||
|
||||
If the Network applet reports that there is no network adapter present, it is very likely that MontaukOS does not have network drivers for your device. For further troubleshooting, you can use the Devices (<code>devexplorer</code>) app to review
|
||||
devices detected by the system, or use the Kernel Log tool to inspect relevant kernel log lines.
|
||||
</p>
|
||||
<ol>
|
||||
|
||||
</ol><br>
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,142 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Tutorials">
|
||||
<title>Tutorials - MontaukOS</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.doc-list p {
|
||||
margin: 0.25em 0 0 1.5em;
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">MontaukOS Tutorials</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h1>User's Tutorials</h1>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<p>
|
||||
This volume contains tutorials for users covering everyday use of the MontaukOS system.
|
||||
</p>
|
||||
|
||||
<h2>Getting started</h2>
|
||||
<ul>
|
||||
<li><a href="initialsetup.html">Initial setup (account creation, time zone)</a></li>
|
||||
<li><a href="connectivity.html">Connecting to a network (and the Internet)</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Programming</h2>
|
||||
<ul>
|
||||
<li><a href="tutorial-programming.html">Writing and running a "Hello, World" program in Lua</a></li>
|
||||
<li><a href="tutorial-programming-c.html">Writing and running a "Hello, World" program in C</a></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,155 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Tutorials">
|
||||
<title>Initial Setup - MontaukOS Tutorials</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.doc-list p {
|
||||
margin: 0.25em 0 0 1.5em;
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Tutorials</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h2>Initial Setup on MontaukOS</h2>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<p>This tutorial explains how to create your first account and set your time zone on MontaukOS.</p>
|
||||
<hr>
|
||||
<p>
|
||||
<h3>Account creation and login</h3>
|
||||
When you successfully boot MontaukOS for the first time, you should see the 'MontaukOS Setup' window, as depicted below.
|
||||
|
||||
<br><br><img width=700 src="images/initialsetup.png" alt=""><br>
|
||||
|
||||
<ol>
|
||||
<li>It is recommended to select a new username for your account rather than keeping the default username 'admin'.</li>
|
||||
<li>Select a display name for your account.</li>
|
||||
<li>Choose a password for your account, and enter it in both the 'Password' and 'Confirm Password' fields.</li>
|
||||
<li>Click 'Create Account'.</li>
|
||||
<li>First-time setup is complete. Keep the 'Desktop' session selected and use the credentials you just created to log in to the system.</li>
|
||||
</ol>
|
||||
|
||||
<h3>Time zone selection</h3>
|
||||
<ol>
|
||||
<li>Click on the application menu icon located at the top-left corner of the desktop, and click the 'Settings' entry.</li>
|
||||
<li>Double-click the 'Time' icon within the virtual 'Settings' folder, then open the Time Zones tab.</li>
|
||||
<li>The default time zone is Oslo, Norway. To adjust your time zone, scroll along the left pane (countries) and select your country or region. Then, select the city closest to your location on the right pane.</li>
|
||||
<li>Click 'Apply'.</li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<img src="images/timezone.png" alt="">
|
||||
</blockquote>
|
||||
</p>
|
||||
<ol>
|
||||
|
||||
</ol><br>
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Tutorials">
|
||||
<title>C Hello World - MontaukOS Tutorials</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.doc-list p {
|
||||
margin: 0.25em 0 0 1.5em;
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Tutorials</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h2>Writing and running a "Hello, World" program in C</h2>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<p>This tutorial explains how to create and run a simple program in the C programming language (using the tcc C compiler) on MontaukOS.</p>
|
||||
<hr><ol>
|
||||
<li>Open the Text Editor by navigating to the 'Applications' section in the app menu.</li>
|
||||
<blockquote><strong>Did you know?</strong> The MontaukOS Text Editor provides syntax highlighting for C and Lua files.</blockquote>
|
||||
<li>Type:
|
||||
<blockquote><pre>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void) {
|
||||
printf("Hello, World!\n");
|
||||
return 0;
|
||||
}
|
||||
</pre></blockquote>
|
||||
into the Text Editor window. This code outputs the string "Hello, World!" along with a line break to the Terminal.</li><br>
|
||||
<blockquote>
|
||||
<img src="images/texteditor-c.png" alt="">
|
||||
|
||||
</blockquote>
|
||||
<li>Click the Save (floppy disk) button on the top panel. Choose a directory to save your code in - for example, your Home folder - give the source file a name ending in <i>.c</i>, and click 'Save'.</li>
|
||||
<br><li>Open the Terminal app by navigating to the 'Applications' section in the app menu. You should see something like this appear on your screen:
|
||||
<blockquote><pre>
|
||||
MontaukOS
|
||||
Copyright (c) 2025-2026 Montauk Operating System Project
|
||||
|
||||
Logged in as admin
|
||||
|
||||
Type 'help' for available commands.
|
||||
|
||||
0:/users/admin>
|
||||
</pre>
|
||||
</blockquote>
|
||||
</li>
|
||||
<li>If you saved your program's source file somewhere other than your Home directory, switch to the directory in which you saved your program using the <i>cd</i> command. For example, <code>cd Documents</code>.</li>
|
||||
<br><li>Type '<code>tcc </code>' followed by your program's name, and then press enter. For example, '<code>tcc hello.c</code>'.</li>
|
||||
<br><li>Run your program by typing its name without the '.c' extension, before pressing enter - for example, "hello".</li>
|
||||
<br><li>You should see "Hello, World!" displayed in the Terminal window. Congratulations!</li>
|
||||
<br>
|
||||
<img src="images/terminal-c.png" alt="">
|
||||
</ol><br>
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,160 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="MontaukOS Tutorials">
|
||||
<title>Lua Hello World - MontaukOS Tutorials</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 1em;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
gap: 2em;
|
||||
}
|
||||
p { margin: 0 0 0.5em; }
|
||||
h2 { margin: 0.5em 0; }
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.sidebar li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #0066CC;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
color: #004499;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.sidebar hr {
|
||||
border: none;
|
||||
border-top: 1px solid #999;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
a { color: #0000EE; }
|
||||
a:visited { color: #0066CC; }
|
||||
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
||||
.box {
|
||||
border: 1px solid #999;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.doc-list a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.doc-list p {
|
||||
margin: 0.25em 0 0 1.5em;
|
||||
color: #555;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
padding: 1em 0.75em;
|
||||
}
|
||||
.sidebar {
|
||||
width: auto;
|
||||
}
|
||||
.sidebar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0 1em;
|
||||
}
|
||||
.sidebar hr {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="sidebar">
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a></li>
|
||||
<li><a href="../../downloads.html">Downloads</a></li>
|
||||
<li><a href="../index.html">Documentation</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
|
||||
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="index.html" class="current">Tutorials</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="main">
|
||||
<div class="center">
|
||||
<h2>Writing and running a "Hello, World" program in Lua</h2>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<p>This tutorial explains how to create and run a simple program in the Lua programming language on MontaukOS.</p>
|
||||
<hr><ol>
|
||||
<li>Open the Text Editor by navigating to the 'Applications' section in the app menu.</li>
|
||||
<blockquote><strong>Did you know?</strong> The MontaukOS Text Editor provides syntax highlighting for C and Lua files.</blockquote>
|
||||
<li>Type:
|
||||
<blockquote><code>print("Hello, World!")</code></blockquote>
|
||||
into the Text Editor window. This code outputs the string "Hello, World!" to the Terminal.</li><br>
|
||||
<blockquote>
|
||||
<img src="images/texteditor-lua.png" alt="">
|
||||
|
||||
</blockquote>
|
||||
<li>Click the Save (floppy disk) button on the top panel. Choose a directory to save your code in - for example, your Home folder - give the program a name ending in <i>.lua</i>, and click 'Save'.</li>
|
||||
<br><li>Open the Terminal app by navigating to the 'Applications' section in the app menu. You should see something like this appear on your screen:
|
||||
<blockquote><pre>
|
||||
MontaukOS
|
||||
Copyright (c) 2025-2026 Montauk Operating System Project
|
||||
|
||||
Logged in as admin
|
||||
|
||||
Type 'help' for available commands.
|
||||
|
||||
0:/users/admin>
|
||||
</pre>
|
||||
</blockquote>
|
||||
</li>
|
||||
<li>If you saved your program somewhere other than your Home directory, switch to the directory in which you saved your program using the <i>cd</i> command. For example, <code>cd Documents</code>.</li>
|
||||
<br><li>Type '<code>lua </code>' followed by your program's name, and then press enter. For example, '<code>lua hello.lua</code>'.</li>
|
||||
<br><li>You should see "Hello, World!" displayed in the Terminal window. Congratulations!</li>
|
||||
<br>
|
||||
<img src="images/terminal-lua.png" alt="">
|
||||
</ol>
|
||||
<hr>
|
||||
<h3>Beware!</h3>
|
||||
<p>The Lua implementation on MontaukOS currently has known issues. For example, floating point calculations do not work.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="center">
|
||||
<a href="../index.html">Back to Documentation Index</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||