Initial commit: Schunix as it stands before the SchOS rename

An x86-64 operating system built from xv6, now largely rewritten: SMP,
a copy-on-write root filesystem (SchFS), PCI/USB/virtio drivers, a TTF
rasteriser, and a Linux-numbered syscall ABI.

No history before this point -- the tree was never under version control.
This commit exists so the rename that follows has something to undo to.
This commit is contained in:
Nexoniarz 2026-08-09 13:47:01 +02:00
commit d0f7acf9eb
275 changed files with 51417 additions and 0 deletions

49
include/ttf.h Normal file
View file

@ -0,0 +1,49 @@
#pragma once
// TrueType outlines, as a font provider for include/text.h.
//
// Scope, and why it is this and not "TTF and OTF":
//
// .ttf and .otf are both sfnt containers -- the same table directory, the same
// cmap, the same hmtx. What differs is how outlines are stored. TrueType puts
// quadratic B-spline contours in a `glyf` table; OpenType/PostScript puts cubic
// béziers in a `CFF ` table encoded as Type 2 charstrings, which is a
// stack-based interpreted format and a separate project.
//
// Checked before writing any of it: JetBrains Mono and Roboto -- the two fonts
// this system is going to use -- both ship `glyf` and neither ships `CFF `. So
// CFF support would buy nothing today, and the honest thing is to implement the
// format the fonts actually use and say so, rather than half-implement two.
//
// Everything here is from Apple's TrueType Reference Manual and the OpenType
// specification, both public documents.
struct ttf {
const unsigned char *data;
uint32 len;
uint32 glyf, glyf_len;
uint32 loca, loca_len;
uint32 cmap4; // offset of the format 4 subtable, 0 if none
uint32 hmtx;
int num_glyphs;
int num_hmetrics;
int units_per_em;
int long_loca; // indexToLocFormat: 0 = 16-bit offsets, 1 = 32
int ascent, descent;
// Rasterisation target size, in pixels per em. Set by ttf_open.
int px;
};
// Parse a font already in memory. Returns 0, or -1 if it is not a TrueType
// font this can read. `data` must outlive the struct -- nothing is copied.
int ttf_open(struct ttf *, const void *data, uint32 len, int pixels_per_em);
// Rasterise one codepoint into `cov`. Returns 0, or -1 if the font has no such
// glyph or it will not fit. Exposed because the host harness uses it directly.
int ttf_render(struct ttf *, uint32 cp, struct glyph *out, unsigned char *cov,
int covcap, int *ox, int *oy);
// A font provider over it, for text.h. The struct must outlive the font.
struct font *ttf_font(struct ttf *);