|
|
@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
|
|
|
|
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|
-| **22253** | `function Exist(FileN : AnyString): boolean;` — function declarations/returns (`ERR 1`) |
|
|
|
+| **22280** | `assign(F, FileN)` in `Exist` — file operations (`ERR 41`) |
|
|
|
|
|
|
Rungs behind it (now passed):
|
|
|
|
|
|
@@ -127,12 +127,13 @@ Rungs behind it (now passed):
|
|
|
| 18267 | `Write(Value:FW:DEC)` — REAL output | `real_write` (`t84`) |
|
|
|
| 19847 | run-time set algebra / `Succ` / `Pred` | `set_op`/`set_cmp`/`copy` (`t85`, `t86`) |
|
|
|
| 20912 | the fixed 4 KiB code window | original layout: code-only `.COM`, high zeroed data base (§3.2) |
|
|
|
+| 22253 | `var F : file;` — the untyped file type in `Exist` | optional `of T`; the parser reported ENoSemi at the semicolon |
|
|
|
|
|
|
Rungs ahead:
|
|
|
|
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|
-| 22253 | function declarations/returns (`Exist`), then the rest of CALC's functions |
|
|
|
+| 22280 | file operations (`Assign`, `Reset`, `Rewrite`, `Close`, `IoResult`, `EndOfFile`) |
|
|
|
|
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
|
below was written before them:
|
|
|
@@ -423,7 +424,7 @@ The file is runtime + code, exactly the shape we now emit; the data is in the
|
|
|
separate DS described by the inline parameters. Our CALC image will be smaller
|
|
|
in runtime (3,667 B instead of 11,341 B) but has the same code-only, high-data
|
|
|
shape. The ladder moved **20,912 → 22,253** on this change; the next blocker is
|
|
|
-not layout but `function Exist(FileN : AnyString): boolean;`.
|
|
|
+not layout but the untyped `file` declaration; that is fixed in the next rung.
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -452,9 +453,9 @@ calling convention and string value parameters, `Length`, the CRT identifiers,
|
|
|
subscripts, write field widths, WITH with n-dimensional subscripts, set-field
|
|
|
assignment, string fields through DI, REAL constants, UpCase, run-time set
|
|
|
membership, string fields in WRITE, real output, run-time set algebra,
|
|
|
-`Succ`/`Pred`, and the original memory layout). The ladder has moved from the
|
|
|
-first typed constant at 7,791 to **22,253**, where the first **function**
|
|
|
-declaration appears.
|
|
|
+`Succ`/`Pred`, the original memory layout, and the untyped file type). The
|
|
|
+ladder has moved from the first typed constant at 7,791 to **22,280**, where
|
|
|
+`assign(F, FileN)` is the first file operation.
|
|
|
|
|
|
The rung commits and their tags, in order (each is one rung with its own
|
|
|
fixture, red proof, and — where the harness allows — execution under qemu and
|
|
|
@@ -489,7 +490,8 @@ Exec86):
|
|
|
| `0946e80` | `v-TP3-CALC-REALCONST` | `ERR 41 15911` (`Upcase`) |
|
|
|
| `17f7f7c` | `v-TP3-CALC-UPCASE` | **`ERR 102 18267`** (real output) |
|
|
|
| `203f77e` | `v-TP3-CALC-SETOPS` | `ERR 98 20912` (layout limit reached) |
|
|
|
-| *(this commit)* | `v-TP3-CALC-LAYOUT` | **`ERR 1 22253`** (function declarations) |
|
|
|
+| `ff05141` | `v-TP3-CALC-LAYOUT` | `ERR 1 22253` (untyped file, initially misread as a function) |
|
|
|
+| *(this commit)* | `v-TP3-CALC-UNTYPEDFILE` | **`ERR 41 22280`** (`assign`) |
|
|
|
|
|
|
- **Code HEAD** is the layout rung (`v-TP3-CALC-LAYOUT`). Nothing is pushed.
|
|
|
The terminal-config work (`v-TP3-TERMCFG`) and the editor key map
|
|
|
@@ -1085,10 +1087,11 @@ currently reserves a fresh **256-byte** global scratch (`NewScratchStr`), which
|
|
|
for CALC's concat sites buys ~2 KiB of the budget in §3 — it needs to be sized
|
|
|
to the operand, or reused.
|
|
|
|
|
|
-**Stage 13 — files. Types DONE; operations next.**
|
|
|
+**Stage 13 — files. Types DONE, including untyped `file`; operations next.**
|
|
|
|
|
|
-Done: `text` and `file of T`. A file variable is our own control block
|
|
|
-(`FileVarSize = 4`: the DOS handle word and a mode word), because this runtime
|
|
|
+Done: `text`, `file of T`, and untyped `file` (`t87_untypedfile`). A file
|
|
|
+variable is our own control block (`FileVarSize = 4`: the DOS handle word and a
|
|
|
+mode word), because this runtime
|
|
|
does unbuffered `INT 21h` I/O where TP3 keeps a 128-byte buffer inside the
|
|
|
variable - a recorded divergence. `file of T` parses its element type so the
|
|
|
RECORD size a Read/Write must move is known. Fixture `t66_files`; this let the
|