63 lines
2.1 KiB
Forth
63 lines
2.1 KiB
Forth
\ tag: deblocker support package
|
|
\
|
|
\ Copyright (C) 2003 Stefan Reinauer
|
|
\
|
|
\ See the file "COPYING" for further information about
|
|
\ the copyright and warranty status of this work.
|
|
\
|
|
|
|
" /packages" find-device
|
|
|
|
\ The deblocker package makes it easy to implement byte-oriented device
|
|
\ methods, using the block-oriented or record-oriented methods defined by
|
|
\ devices such as disks or tapes. It provides a layer of buffering between
|
|
\ the high-level byte-oriented interface and the low-level block-oriented
|
|
\ interface. deblocker uses the max-transfer, block-size, read-blocks and
|
|
\ write-blocks methods of its parent.
|
|
|
|
new-device
|
|
" deblocker" device-name
|
|
\ open ( -- flag )
|
|
\ Prepares the package for subsequent use, allocating the buffers used
|
|
\ by the deblocking process based upon the values returned by the parent
|
|
\ instance's max-transfer and block-size methods. Returns -1 if the
|
|
\ operation succeeds, 0 otherwise.
|
|
: open ( -- flag )
|
|
|
|
;
|
|
|
|
\ close ( -- )
|
|
\ Frees all resources that were allocated by open.
|
|
: close ( -- )
|
|
;
|
|
|
|
\ read ( adr len -- actual )
|
|
\ Reads at most len bytes from the device into the memory buffer
|
|
\ beginning at adr. Returns actual, the number of bytes actually
|
|
\ read, or 0 if the read operation failed. Uses the parent's read-
|
|
\ blocks method as necessary to satisfy the request, buffering any
|
|
\ unused bytes for the next request.
|
|
|
|
: read ( adr len -- actual )
|
|
;
|
|
|
|
\ Writes at most len bytes from the device into the memory buffer
|
|
\ beginning at adr. Returns actual, the number of bytes actually
|
|
\ read, or 0 if the write operation failed. Uses the parent's write-
|
|
\ blocks method as necessary to satisfy the request, buffering any
|
|
\ unused bytes for the next request.
|
|
|
|
: write ( adr len -- actual )
|
|
;
|
|
|
|
\ Sets the device position at which the next read or write will take
|
|
\ place. The position is specified by the 64-bit number x.position.
|
|
\ Returns 0 if the operation succeeds or -1 if it fails.
|
|
|
|
: seek ( x.position -- flag )
|
|
;
|
|
|
|
finish-device
|
|
|
|
\ clean up afterwards
|
|
device-end
|