.bp
DEVA = ALLOC(DEV)
	ALLOC obtains one 512-byte block of storage space from
the free pool of blocks for
device DEV and returns its device address DEVA.

FREE(DEV, DEVA)
	FREE places the 512-byte block of storage
with address DEVA into the free pool for device DEV.

DEVRD(DEV, DEVA)
	DEVRD reads the 512-byte
block of information located at address DEVA on device DEV.
The information is read into the common buffer DEVBUF.
DEVRD is used only for block-oriented devices.

DEVWR(DEV, DEVA)
	DEVWR writes from the common buffer DEVBUF to the
block of secondary storage at address DEVA on device DEV.
DEVWR is used only for block-oriented devices.

(RDEV, DEVA) = ICALC(DEV, I)
	Given a device number DEV and an I-node number I
ICALC returns the device RDEV and the block address DEVA
in which the I-node is located.

IGET(I, DEV)
	IGET arranges for the I-node with number I on
device DEV to be loaded into the I-node buffer
IBUF in core memory.
If the I-node referred to is the root
of a mounted file system volume,
it is possible that the device
on which the I-node actually resides
is not the same as DEV.

DEVA = MGET(DEV, I, P)
	MGET returns the block number DEVA in which byte number
P of the file with I-node number I on device DEV is located.
If there is no such block, MGET allocates
one, clears it to zeroes, and returns its address.

RTTY, RPPT, RMEM
	These routines return the next character
read from a user's console typewriter, from a paper
tape reader, or from core memory treated
as a file.
They are illustrative
of a possibly larger group of routines which implement
input from character-oriented devices.

WTTY, WPPT, WMEM
	These routines write one character on
a user's console typewriter, on the paper tape punch,
or into core memory treated as a file, respectively.
They are thus illustrative of a possibly larger
group of routines which implement output
onto character-oriented devices.

BYTE = IREAD(I, DEV, P)
	IREAD returns the byte at location P
of the file with I-node number I on device DEV.
IREAD handles both ordinary files and special files.

IWRITE(BYTE, I, DEV, P)
	IWRITE writes (or rewrites)
the BYTE at location P of the file with I-node number I
on device DEV.  If thebyte's location did not previously exist
(in an ordinary file) it is created.
IWRITE is used foth for ordinary files
and for special files.

(I, DEV) = NAMEI(FILENAME)
	Given the name of a file, FILENAME, NAMEI returns the
device DEV on which it is located and its I-node number
I.
