diff options
author | Arun Isaac | 2021-05-07 16:45:59 +0530 |
---|---|---|
committer | Arun Isaac | 2021-05-07 17:06:27 +0530 |
commit | 80d15411b74f3eca6969d7276152500dd8ece463 (patch) | |
tree | f56ee80e30482838bd39bac163ceb59ab885f7be /src/macros | |
parent | 4224e183522b696e60556c8ea88dec5409d8a746 (diff) | |
download | nsmc-80d15411b74f3eca6969d7276152500dd8ece463.tar.gz nsmc-80d15411b74f3eca6969d7276152500dd8ece463.tar.lz nsmc-80d15411b74f3eca6969d7276152500dd8ece463.zip |
Define with-file and with-data-file sc macros.
* src/macros/macros.sc (with-file, with-data-file): New macros.
Diffstat (limited to 'src/macros')
-rw-r--r-- | src/macros/macros.sc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/macros/macros.sc b/src/macros/macros.sc index 8ff799b..1ccfeab 100644 --- a/src/macros/macros.sc +++ b/src/macros/macros.sc @@ -67,3 +67,19 @@ body ... (for-i i n (gsl-rstat-free (array-get var i))))) + +(sc-define-syntax (with-file fp filename mode body ...) + (with-alloc fp FILE* (begin (fopen filename mode) + (unless fp + (perror filename) + (exit EXIT_FAILURE))) + fclose + body ...)) + +(sc-define-syntax* (with-data-file fp filename mode body ...) + (let* ((data-file (string-append "data/" filename))) + `(with-file fp ,data-file ,mode + ,@(if (string=? mode "w") + `((fprintf stderr "Writing to %s...\n" ,data-file)) + '()) + ,@body))) |