calendar
All repositories: gitoria
2.5 KB
// process.hl → class Process — one child, its lifetime, its events. The// eventloop wiring lives HERE so app code never sees it: the events source is// registered AT this instance, the internal fan-out re-emits `line` and// `exit` at itself, and `on process.line` / `on process.exit` in the app are// ordinary instance-scoped handlers.Number pid = 0Boolean running = falseNumber #srcId = 0start(String cmd, options) {// THE STRING GOES OVER WHOLE (mission 249). `hl_proc_spawn` branches on// the argument's type and its string branch is the tokenizer server.hl// documents: whitespace RUNS (spaces, tabs, newlines — a command written// across lines is one command) and quote GROUPING. Splitting here on " "// and handing the pieces to the LIST branch is what kept that code// unreached, and put a tab or a newline inside argv[0].return this.launch(cmd, options)}startArgs(args, options) {return this.launch(args, options)}// The one spawn: `spec` is the command STRING or the argv LIST, and which// one it is decides the branch inside `hl_proc_spawn`, never anything here.launch(spec, options) {let spawned = __native("proc.spawn", spec, options)pid = spawned.pidrunning = true#srcId = __native("eventloop.register", spawned.events, "__procEvent")return this}on __procEvent(ev) {if (ev.exit != null) {running = false// A FINISHED CHILD RETIRES ITS SOURCE (server.hl: "a program whose// children are done simply ends"). Without this the loop still holds// a source that will never speak again and the program never returns.__native("eventloop.unregister", #srcId)emit exit(ev)return null}// a `binary = true` child (ticket #42): the raw bytes as a Bytes, never// split into linesif (ev.chunk != null) {emit data({ data = toBytes(ev.chunk), stream = ev.stream })return null}emit line(ev)return null}\* WRITE TO THE CHILD'S STDIN (ruling on ticket #42): a String's bytes, or aBytes, exactly as they are — nothing added, no newline. Answers how manybytes went. Only for a child spawned with `{ stdin = 'pipe' }` (a child'sstdin is inherited otherwise). The child reads EOF after end(), or when itexits; a write after that is an Error. *\write(data) {if (hlTypeName(data) == 'Bytes') {return __native("proc.write_hex", pid, data.hex())}return __native("proc.write", pid, data)}\* Close the child's stdin: it reads EOF. *\end() {return __native("proc.end", pid)}kill() {if (running == false) {return false}return __native("proc.kill", pid)}
Branches
- mainmain branch
Latest commits
- f5ce6b1dcalendar mission 001 (2/4): code order — topics, map, thin faces: lib/util.hl, lib/events(-helpers).hl (+calendarView/settingsView/soonOf), lib/settings.hl, lib/users.hl (+userOfLoginCode, tagOf), lib/api(-helpers).hl; project.hl = map; login route takes &req/&sessions (failed-login reason now kept); gates 78/0 + 18/0mre
- c6fbd011calendar mission 001 (1/4): code order — files moved: lib/events.hl, lib/users.hl, components/styles.hl (imports only); gates 78/0 + 18/0, live-data run identicalmre
- d6c59290calendar: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); gates 78/0 + 18/0mre
- 7bd0337ccalendar: Hybriel master 190aa11d (fc838894 GC correctness, #126 closure scopes, #127); gates 78/0 + 18/0mre
- ff41310ccalendar: Hybriel master 8efba065 (#126 memory, #48 lambda copy; audit: no & needed)mre
- 14ba08c7antcolony#40: mission references point to the moved missionsmre
- 99c73346antcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- 76edaa62calendar: Hybriel master ff51cf46 (re-vendor round, static workaround removed)mre
- 90a3fc2cdeploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- 6722b72ddeploy.sh: never send .git or .gitignore to Byrodinmre
- be099807State of 2026-09-27, before the move to gitoriamre