W7 done done

This commit is contained in:
root 2026-06-15 11:06:35 +00:00
parent 1743c51e46
commit abcb66717e
14 changed files with 207 additions and 1 deletions

2
.gitignore vendored
View File

@ -36,7 +36,7 @@
tmp/*
bin/*
pkg/*
dist/*
# Python cache artifacts
__pycache__/

View File

@ -1,5 +1,8 @@
Runtime
backtrace_frames_string
capture_backtrace_string
error_pages
signal_name
unit_info
units_list
unit_compile

View File

@ -1,10 +1,13 @@
String Functions
ascii_safe_name
base64_decode
base64_encode
contains
filter
first
join
json_consume_space
json_encode
list_every
list_find
@ -19,6 +22,8 @@ str_ends_with
str_starts_with
substr
split
split_http_headers
split_kv
split_space
split_utf8
replace

View File

@ -4,6 +4,7 @@ basename
dirname
expand_path
file_append
file_append_contents
file_exists
file_get_contents
file_mtime

View File

@ -1,5 +1,6 @@
Time and Date Functions
usleep
time_precise
time
time_format_local

View File

@ -12,5 +12,6 @@ route_path_normalize
route_path_sanitize
session_id_create
parse_query
parse_uri
uri_decode
uri_encode

View File

@ -0,0 +1,18 @@
:sig
String backtrace_frames_string(void* const* frames, size_t size, u32 skip_frames = 0)
:params
frames : frame pointer array returned by native backtrace collection
size : number of frames in the array
skip_frames : number of newest frames to omit
return value : formatted backtrace string
:see
>runtime
capture_backtrace_string
signal_name
:content
Formats a captured native backtrace frame array.
Most page code should use `capture_backtrace_string()` instead. Use this helper when you already have raw frame pointers from lower-level diagnostic code.

View File

@ -0,0 +1,24 @@
:sig
String capture_backtrace_string(u32 max_frames = 32, u32 skip_frames = 0)
:params
max_frames : maximum number of frames to capture
skip_frames : number of newest frames to omit
return value : formatted backtrace string
:see
>runtime
backtrace_frames_string
signal_name
:content
Captures and formats a native backtrace for the current call stack.
This helper is for diagnostics. It is used by runtime error reporting paths and can also be useful in local debugging pages.
Example:
```uce
String trace = capture_backtrace_string(16, 0);
print("<pre>", html_escape(trace), "</pre>");
```

View File

@ -0,0 +1,26 @@
:sig
bool file_append_contents(String file_name, String content)
:params
file_name : path to open or create
content : bytes to append
return value : `true` when the append succeeds
:see
>sys
file_append
file_put_contents
file_get_contents
:content
Appends one string to a file.
`file_append()` is the variadic convenience wrapper for ordinary page code. Use `file_append_contents()` when you already have one string buffer.
Example:
```uce
bool ok = file_append_contents("/tmp/uce-log.txt", "line\n");
```
The file is created if it does not exist.

View File

@ -0,0 +1,24 @@
:sig
void json_consume_space(String s, u32& i)
:params
s : JSON source string
i : current byte offset; advanced past JSON whitespace
:see
>string
json_encode
json_decode
:content
Advances `i` past JSON whitespace in `s`.
This helper is mainly useful when writing a parser that follows UCE's JSON parsing rules. Most page code should call `json_decode()` instead.
Example:
```uce
u32 i = 0;
json_consume_space(" \n {\"ok\":true}", i);
// i now points at the opening brace
```

View File

@ -0,0 +1,28 @@
:sig
URI parse_uri(String uri_string)
:params
uri_string : URI or URL string
return value : URI object with `parts` and `query` maps
:see
>uri
parse_query
uri_decode
uri_encode
:content
Parses a URI into its component maps.
`return.parts` contains the parsed URI fields. `return.query` contains query parameters decoded with the same rules as `parse_query()`.
Example:
```uce
URI uri = parse_uri("https://example.test/docs/index.uce?q=uce#top");
String host = uri.parts["host"];
String path = uri.parts["path"];
String q = uri.query["q"];
```
Use `parse_uri()` when you need to inspect a full URL. Use `parse_query()` when you only have the query string.

View File

@ -0,0 +1,23 @@
:sig
String signal_name(int sig)
:params
sig : POSIX signal number
return value : signal name such as `SIGSEGV`, or an empty string when unknown
:see
>runtime
capture_backtrace_string
backtrace_frames_string
:content
Returns a readable name for a POSIX signal number.
Example:
```uce
String name = signal_name(11);
// name == "SIGSEGV"
```
This is mostly useful in diagnostics and error reporting code.

View File

@ -0,0 +1,29 @@
:sig
StringMap split_http_headers(String s)
:params
s : HTTP request or header text
return value : parsed request/header fields
:see
>string
split_kv
parse_query
0_Request
:content
Parses HTTP request/header text into a `StringMap`.
For a request line, the returned map includes fields such as `REQUEST_METHOD`, `REQUEST_URI`, `SCRIPT_NAME`, `QUERY_STRING`, and `SERVER_PROTOCOL`. Header names are normalized to uppercase CGI-style keys, for example `Host` becomes `HTTP_HOST`.
Example:
```uce
StringMap h = split_http_headers("GET /demo.uce?x=1 HTTP/1.1\r\nHost: example.test\r\n\r\n");
// h["REQUEST_METHOD"] == "GET"
// h["SCRIPT_NAME"] == "/demo.uce"
// h["QUERY_STRING"] == "x=1"
// h["HTTP_HOST"] == "example.test"
```
Most page code should read `context.params` instead. Use this helper when parsing raw HTTP text in tests or protocol helpers.

23
site/doc/pages/usleep.txt Normal file
View File

@ -0,0 +1,23 @@
:sig
int usleep(unsigned int usec)
:params
usec : microseconds to sleep
return value : `0` after sleeping
:see
>time
sleep
:content
Pauses the current request or task for a number of microseconds.
Use this for short waits in local tests, polling loops, or background tasks. Avoid long sleeps in normal HTTP render paths because they hold a worker process for the duration.
Example:
```uce
usleep(250000); // 0.25 seconds
```
For whole-second waits, use `sleep()`.