Add full compiler toolchain, libc, examples and reference docs

First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.

What's in here:
  bin/sprinter-cc        — driver script invoking SDCC + linker + mkexe
  libc/                  — Sprinter-specific libc layer over ESTEX/BIOS
                           (conio, gfx, io, mem, stdio + headers)
  runtime/               — crt0 variants (default/small/banked/minimal)
                           + heap + bank trampolines
  toolchain/             — mkexe (SprintEXE packer, C + tests)
  examples/              — 30 demo programs (gfx, file I/O, env, time, …)
  lib/Makefile           — builds the libc archive (sprinter.lib)
  docs/                  — converted Sprinter manuals + asm reference samples
  third_party/           — solid-c reference compiler dump + sdcc setup script
  release_docs/          — packaging / release notes

gitignore overhaul:
  • Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
    and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
    on macOS APFS).  Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
  • Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
    INPUT fixtures, not build outputs.
  • Collapse the duplicated SDCC/C/Sdcc sections into one section per
    concern (build outputs / vendored / OS-junk).
  • Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 16:13:21 +03:00
parent f542608b3f
commit c71e249a4e
404 changed files with 75155 additions and 58 deletions
+42
View File
@@ -0,0 +1,42 @@
/*
* sys/stat.h — POSIX-style stat() / fstat() over ESTEX file metadata.
*
* stat(path, &st) queries via ESTEX F_FIRST ($19) using the exact
* name; gets size, attrib, and DOS-format date/time
* that we expand to a struct stat.
* fstat(fd, &st) queries an open handle: size via lseek(SEEK_END)
* trick + date/time via ESTEX GET_D_T ($17).
*
* Sprinter has no inodes / owners / groups, so st_ino / st_uid / st_gid
* are absent. S_ISREG and S_ISDIR are the only meaningful mode tests.
*/
#ifndef SYS_STAT_H
#define SYS_STAT_H
#include <stdint.h>
#include <time.h> /* time_t */
/* File mode bits — POSIX subset (octal as per convention). */
#define S_IFMT 0170000 /* file-type mask */
#define S_IFREG 0100000 /* regular file */
#define S_IFDIR 0040000 /* directory */
#define S_IRUSR 0000400 /* owner read */
#define S_IWUSR 0000200 /* owner write */
#define S_IXUSR 0000100 /* owner execute */
#define S_IRWXU 0000700
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
struct stat {
uint16_t st_mode; /* file type + perms */
uint32_t st_size; /* size in bytes */
time_t st_mtime; /* last-mod time (Unix epoch) */
};
int stat (const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
#endif