The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

VM::Dreamer::IO - IO functionality for Dreamer

SYNOPSIS

    get_valid_input_from_user($machine)
    add_input_to_inbox( $machine, $input )
    shift_inbox_to_memory( $machine, $address )

    add_to_outbox( $machine, $operand )
    shift_outbox_to_user($machine)

DESCRIPTION

This module handles IO functions for Dreamer. This just means that it can:

get input and validate it =item add the input to the Inbox stack =item shift the "oldest" entry in the inbox to an address in memory
add an item in memory to the Outbox stack =item output the "oldest" entry in the outbox to the user

SUBROUTINES

get_valid_input_from_user

Prompts the user for input. Valid input is returned otherwise the user is told what they did wrong and asked to try again. Raises an exception if max_tries is exceeded by the user.

Note: The user doesn't need to zero-pad their input. They can do so if they like, but the input can't have more digits than the largest number they can enter.

I.e. if the largest number they can enter is 999, 15 and 015 are acceptable, but 0015 would be rejected.

add_input_to_inbox

Pushes input to the "top" of the Inbox.

shift_inbox_to_memory

Shifts the "bottom" of the inbox to an address in memory.

add_to_outbox

Adds the information stored at an address in memory to the "top" of the Outbox.

shift_outbox_to_user

Putputs the value at the "bottom" of the Outbox to the user. Note all output is zero-padded to have the same number of digits as the "width" of each address in memory.

This means that if your memory is 8 digits wide and each digit can be between 0 and 7, the number 715 would be output as 00000715.

This may change in a future release.

CONSUMPTION

Together, the first three methods are used to implement VM::Dreamer::Instructions::input_to_mb and the last two are used to implemtn VM::Dreamer::Instructions::output_from_mb. These in turn are the INP and OUT operations for Grasshopper.

CAVEATS

I've tried to follow the FIFO concept of First In, First Out; however, I don't know how well I understand the underlying concepts. If you know better and see any conceptual issues with the implementation, please let me know.

AUTHOR

William Stevenson <william at coders dot coop>

SEE ALSO

VM::Dreamer::Instructions

COPYRIGHT AND LICENSE

This software is Copyright (c) 2013 by William Stevenson.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)