diff options
Diffstat (limited to 'transform.e')
| -rw-r--r-- | transform.e | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/transform.e b/transform.e index 26ee650..e184c7e 100644 --- a/transform.e +++ b/transform.e @@ -259,6 +259,35 @@ 3roll pack8 } if-else } if-else } forever ; +~ (output point, filename -- output point) +: pack-file-contents + dup 0 0 sys-open + ~ (output point, filename, open result code or file descriptor) + dup 0 > { + ." Couldn't open " swap emitstring space + ." because " space . ." ." newline + 2 ndrop exit + } if + + ~ (output point, filename, file descriptor) + { + dup 3 pick 1024 sys-read + ~ (output point, filename, file descriptor, read result code or length) + + dup 0 > { + ." Error while reading from " 3roll emitstring + ." because " space . ." ." newline + drop exit + } if + + dup 0 = { + 3 ndrop exit + } if + + 4 roll + 3unroll + } forever ; + + ~ In logical terms, this modifies an input buffer metadata structure ~ in-place to push a new, zeroed one into the start of the linked list formed ~ through the next-source field. |