src/pmc/parrotio.pmc - Parrot IO
These are the vtable functions and methods for Parrot IO.
METHOD say(STRING *s)
- Print the string with an appended newline to SELF or to stdout if used as a class method.
METHOD open(STRING *file, STRING *mode, STRING *layer)
- Opens the file with the given mode,
using the given IO layer.
METHOD isatty()
METHOD set_readline_interactive(INTVAL)
- Sets readline interactive mode to the given value,
if PARROT_HAS_READLINE is defined,
that is,
if the readline library is available.
The return values are:
- -1
readline isn't configured
- -2
The file is not open/not input or not a tty,
if turning on interactive.
- 0 / 1
old interactive setting
METHOD readline(STRING *prompt)
- Reads a line from the given PIO.
If readline is interactive and a prompt is not empty,
it will be displayed.
The interactive feature is not available with the
readline
opcode (which will be removed anyway).
Interactive mode adds non-empty lines to the readline history.
- Returns the line without the newline in a String PMC.
If ^D/eof occurred,
this will return a Null PMC.
- SYNOPSIS
pio = getstdin
$I0 = pio.'set_readline_interactive'(1)
if $I0 >= 0 goto loop
printerr "set_readline_interactive failed: "
...
loop:
$P1 = pio.'readline'('hello polly> ')
if null $P1 goto ex
..
goto loop
ex:
- METHOD slurp(STRING *name);
- Slurp an (existing, disc) file named name into a STRING result.
- Please note that this method isn't catching any failures yet.
- Usage as class method:
.local pmc cl
cl = get_class 'ParrotIO'
$S0 = cl.'slurp'('the_file')
- The file will be opened, read, and closed.
- Or with an openend file:
pio = open 'the_file', '<'
$S0 = pio.'slurp'('')
- This does not close the file.
METHOD eof()
- Returns true or false according to the end of file state of the object.
METHOD flush()
- Flushes pending writes.
METHOD setbuf(INTVAL)
- RT#46087 TBD
METHOD setlinebuf()
- RT#46089 TBD
METHOD INTVAL get_fd()
- Get the file descriptor out of the ParrotIO object.
- RT#48312 Still to do: integral file descriptors might not exist outside of the UNIX platform. or for other streams.
void class_init()
- Class initialization.
void init()
- Initializes the IO PMC.
void destroy()
- Destroys the IO PMC, flushing and closing as necessary.
PMC *clone()
- Clones the IO PMC.
- For now, both PMCs refer to the same
ParrotIO
object. If we have different IO layers, we might copy data
and struct_val
.
void assign_pmc(PMC *other)
- Set SELF to the data in other.
INTVAL get_bool()
- Returns whether at
EOF
or not.
STRING *get_string_keyed_int(INTVAL n)
- Returns the name of the nth layer. n >= 0 returns layer names up from the bottom. If n is negative, returns layer names from top down. For non-existent layers, returns an empty string.
void push_string(STRING *value)
- Pushes the layer name
value
onto the PIO's layer stack.
STRING *pop_string()
- Pops a layer off the PIO's layer stack and returns its name.