2016-08-17 00:13:26 +00:00
|
|
|
# Wrappers around file-system primitives that take a 'filesystem' object and
|
|
|
|
# are thus easier to test.
|
|
|
|
|
|
|
|
container filesystem [
|
2016-08-21 00:51:58 +00:00
|
|
|
data:address:array:file-mapping
|
|
|
|
]
|
|
|
|
|
|
|
|
container file-mapping [
|
|
|
|
name:address:array:character
|
|
|
|
contents:address:array:character
|
2016-08-17 00:13:26 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
def start-reading fs:address:filesystem, filename:address:array:character -> contents:address:source:character [
|
|
|
|
local-scope
|
|
|
|
load-ingredients
|
2016-08-19 04:09:27 +00:00
|
|
|
file:number <- $open-file-for-reading filename
|
2016-08-17 00:13:26 +00:00
|
|
|
contents:address:source:character, sink:address:sink:character <- new-channel 30
|
2016-08-19 04:09:27 +00:00
|
|
|
start-running transmit-from-file file, sink
|
2016-08-17 00:13:26 +00:00
|
|
|
]
|
|
|
|
|
2016-08-19 04:09:27 +00:00
|
|
|
def transmit-from-file file:number, sink:address:sink:character -> file:number, sink:address:sink:character [
|
2016-08-17 00:13:26 +00:00
|
|
|
local-scope
|
|
|
|
load-ingredients
|
|
|
|
{
|
|
|
|
c:character <- $read-from-file file
|
|
|
|
break-unless c
|
|
|
|
sink <- write sink, c
|
|
|
|
loop
|
|
|
|
}
|
|
|
|
sink <- close sink
|
2016-08-19 04:09:27 +00:00
|
|
|
$close-file file
|
|
|
|
]
|
|
|
|
|
|
|
|
def start-writing fs:address:filesystem, filename:address:array:character -> sink:address:sink:character, routine-id:number [
|
|
|
|
local-scope
|
|
|
|
load-ingredients
|
|
|
|
file:number <- $open-file-for-writing filename
|
|
|
|
source:address:source:character, sink:address:sink:character <- new-channel 30
|
|
|
|
routine-id <- start-running transmit-to-file file, source
|
|
|
|
]
|
|
|
|
|
|
|
|
def transmit-to-file file:number, source:address:source:character -> file:number, source:address:source:character [
|
|
|
|
local-scope
|
|
|
|
load-ingredients
|
|
|
|
{
|
|
|
|
c:character, done?:boolean, source <- read source
|
|
|
|
break-if done?
|
|
|
|
$write-to-file file, c
|
|
|
|
loop
|
|
|
|
}
|
|
|
|
$close-file file
|
2016-08-17 00:13:26 +00:00
|
|
|
]
|