Games-Axmud

 view release on metacpan or  search on metacpan

lib/Language/Axbasic/Statement.pm  view on Meta::CPAN

        package Language::Axbasic::Statement::play;
        package Language::Axbasic::Statement::poke;
        package Language::Axbasic::Statement::pokedec;
        package Language::Axbasic::Statement::pokedelete;
        package Language::Axbasic::Statement::pokedechash;
        package Language::Axbasic::Statement::pokeempty;
        package Language::Axbasic::Statement::pokefalse;
        package Language::Axbasic::Statement::pokeinc;
        package Language::Axbasic::Statement::pokeinchash;
        package Language::Axbasic::Statement::pokeint;
        package Language::Axbasic::Statement::pokeadd;
        package Language::Axbasic::Statement::pokedivide;
        package Language::Axbasic::Statement::pokeminus;
        package Language::Axbasic::Statement::pokemultiply;
        package Language::Axbasic::Statement::pokeplus;
        package Language::Axbasic::Statement::pokepop;
        package Language::Axbasic::Statement::pokepush;
        package Language::Axbasic::Statement::pokereplace;
        package Language::Axbasic::Statement::pokeset;
        package Language::Axbasic::Statement::pokeshift;
        package Language::Axbasic::Statement::poketrue;
        package Language::Axbasic::Statement::pokeundef;
        package Language::Axbasic::Statement::pokeunshift;
        package Language::Axbasic::Statement::pop;
        package Language::Axbasic::Statement::print;
        package Language::Axbasic::Statement::profile;
        package Language::Axbasic::Statement::push;
        package Language::Axbasic::Statement::randomize;
        package Language::Axbasic::Statement::read;
        package Language::Axbasic::Statement::redim;
        package Language::Axbasic::Statement::relay;
        package Language::Axbasic::Statement::rem;
        package Language::Axbasic::Statement::reset;
        package Language::Axbasic::Statement::restore;
        package Language::Axbasic::Statement::return;
        package Language::Axbasic::Statement::revpath;
        package Language::Axbasic::Statement::select;
        package Language::Axbasic::Statement::send;
        package Language::Axbasic::Statement::setalias;
        package Language::Axbasic::Statement::setgauge;
        package Language::Axbasic::Statement::sethook;
        package Language::Axbasic::Statement::setmacro;
        package Language::Axbasic::Statement::setstatus;
        package Language::Axbasic::Statement::settimer;
        package Language::Axbasic::Statement::settrig;
        package Language::Axbasic::Statement::shift;
        package Language::Axbasic::Statement::skipiface;
        package Language::Axbasic::Statement::sort;
        package Language::Axbasic::Statement::sortcase;
        package Language::Axbasic::Statement::sortcaser;
        package Language::Axbasic::Statement::sortr;
        package Language::Axbasic::Statement::speak;
        package Language::Axbasic::Statement::speed;
        package Language::Axbasic::Statement::stop;
        package Language::Axbasic::Statement::sub;
        package Language::Axbasic::Statement::titlewin;
        package Language::Axbasic::Statement::unflashwin;
        package Language::Axbasic::Statement::unshift;
        package Language::Axbasic::Statement::until;
        package Language::Axbasic::Statement::waitactive;
        package Language::Axbasic::Statement::waitalive;
        package Language::Axbasic::Statement::waitarrive;
        package Language::Axbasic::Statement::waitdead;
        package Language::Axbasic::Statement::waitep;
        package Language::Axbasic::Statement::waitgp;
        package Language::Axbasic::Statement::waithp;
        package Language::Axbasic::Statement::waitmp;
        package Language::Axbasic::Statement::waitnextxp;
        package Language::Axbasic::Statement::waitnotactive;
        package Language::Axbasic::Statement::waitpassout;
        package Language::Axbasic::Statement::waitscript;
        package Language::Axbasic::Statement::waitsleep;
        package Language::Axbasic::Statement::waitsp;
        package Language::Axbasic::Statement::waittask;
        package Language::Axbasic::Statement::waittotalxp;
        package Language::Axbasic::Statement::waittrig;
        package Language::Axbasic::Statement::waitxp;
        package Language::Axbasic::Statement::warning;
        package Language::Axbasic::Statement::while;
        package Language::Axbasic::Statement::winaddgauge;
        package Language::Axbasic::Statement::winaddcongauge;
        package Language::Axbasic::Statement::windelgauge;
        package Language::Axbasic::Statement::winsetgauge;
        package Language::Axbasic::Statement::write;
        package Language::Axbasic::Statement::writewin;
    }

    ##################
    # Constructors

    sub new {

        # Called by LA::Line->parse (or by the ->parse function of another LA::Statement::xxx
        #   object)
        # The class that handles the parsing of a single Axbasic statement
        # This function blesses itself, then calls $self->refine to decide what kind of statement it
        #   is (PRINT, LET, DATA, etc)
        # $self->refine creates a LA::Statement::<keyword> object, where <keyword> is the first
        #   keyword in the statement (matches an element in LA::Token->keywordList). <keyword> is
        #   set to the implied LET for a statement beginning with a variable.
        # This function then returns the blessed reference of the LA::Statement::<keyword> object (a
        #   subclass which inherits from this one)
        #
        # Expected arguments
        #   $scriptObj      - Blessed reference of the parent LA::Script
        #   $lineObj        - Blessed reference of the calling LA::Line
        #   $tokenGroupObj  - Blessed reference of the line's LA::TokenGroup
        #
        # Optional arguments
        #   $lineNumOk      - Set to 'line_num_ok' when called by LA::Statement::if, in situations
        #                       like 'IF ... THEN 20' in which case, this statement knows that the
        #                       'THEN 20' part should be parsed as 'THEN GOTO 20'. Otherwise, set to
        #                       'undef'
        #
        # Return values
        #   'undef' on improper arguments, or if the statement can't be parsed at all (i.e. doesn't
        #       begin with a keyword, including an implied LET), or begins with a 'weak' keyword
        #       like STEP (matching a key in LA::Script->weakKeywordHash)
        #   Blessed reference to the newly-created object on success

        my ($class, $scriptObj, $lineObj, $tokenGroupObj, $lineNumOk, $check) = @_;

lib/Language/Axbasic/Statement.pm  view on Meta::CPAN

        # Called by LA::Line->parse directly after a call to LA::Statement->new
        #
        # Expected arguments
        #   (none besides $self)
        #
        # Return values
        #   'undef' on improper arguments or if there is an error
        #   1 otherwise

        my ($self, $check) = @_;

        # Check for improper arguments
        if (defined $check) {

            return $axmud::CLIENT->writeImproper($self->_objClass . '->parse', @_);
        }

        # Extract tokens. If the extraction is successful, they are stored in $self->parseDataList,
        #   ready for $self->implement to access
        if (! $self->parseWaitInterface()) {

            # ($self->scriptObj->setError has already been called)
            return undef;
        }

        # Parsing complete
        return 1;
    }

    sub implement {

        # Called by LA::Line->implement directly after a call to $self->parse
        #
        # Expected arguments
        #   (none besides $self)
        #
        # Return values
        #   'undef' on improper arguments or if there is an error
        #   1 otherwise

        my ($self, $check) = @_;

        # Check for improper arguments
        if (defined $check) {

            return $axmud::CLIENT->writeImproper($self->_objClass . '->implement', @_);
        }

        # Implement the statement, haveing parsed it
        if (! $self->implementWaitInterface('alias')) {

            # ($self->scriptObj->setError has already been called)
            return undef;
        }

        # Implementation complete
        return 1;
    }
}

{ package Language::Axbasic::Statement::waitalive;

    use strict;
    use warnings;
#   use diagnostics;

    use Glib qw(TRUE FALSE);

    @Language::Axbasic::Statement::waitalive::ISA = qw(
        Language::Axbasic
        Language::Axbasic::Statement
    );

    # WAITALIVE [ expression ]

    ##################
    # Methods

    sub parse {

        # Called by LA::Line->parse directly after a call to LA::Statement->new
        #
        # Expected arguments
        #   (none besides $self)
        #
        # Return values
        #   'undef' on improper arguments or if there is an error
        #   1 otherwise

        my ($self, $check) = @_;

        # Local variables
        my $timeoutExp;

        # Check for improper arguments
        if (defined $check) {

            return $axmud::CLIENT->writeImproper($self->_objClass . '->parse', @_);
        }

        # Get the timeout, if specified, and convert it into an expression
        if (defined $self->tokenGroupObj->shiftMatchingToken(',')) {

            $timeoutExp = Language::Axbasic::Expression::Arithmetic->new(
                $self->scriptObj,
                $self->tokenGroupObj,
            );

            if (! defined $timeoutExp) {

                return $self->scriptObj->setError(
                    'missing_or_illegal_expression',
                    $self->_objClass . '->parse',
                );
            }
        }

        # Check that nothing follows the expression(s)
        if (! $self->tokenGroupObj->testStatementEnd()) {

            return $self->scriptObj->setError(
                'unexpected_keywords,_operators_or_expressions',
                $self->_objClass . '->parse',
            );
        }

        # Store the expression (if specified), so $self->implement can retrieve it
        $self->ivAdd('parseDataHash', 'timeout', $timeoutExp);

lib/Language/Axbasic/Statement.pm  view on Meta::CPAN

        return 1;
    }

    sub implement {

        # Called by LA::Line->implement directly after a call to $self->parse
        #
        # Expected arguments
        #   (none besides $self)
        #
        # Return values
        #   'undef' on improper arguments or if there is an error
        #   1 otherwise

        my ($self, $check) = @_;

        # Local variables
        my ($timeoutExp, $timeout);

        # Check for improper arguments
        if (defined $check) {

            return $axmud::CLIENT->writeImproper($self->_objClass . '->implement', @_);
        }

        # If the Axbasic script isn't being run from within an Axmud task, ignore the statement
        if (! $self->scriptObj->parentTask) {

            # Implementation complete. Execution resumes from the next statement
            return 1;
        }

        # Otherwise, retrieve the argument (if any) stored by $self->parse
        $timeoutExp = $self->ivShow('parseDataHash', 'timeout');

        # Evaluate the expression, if specified
        if (defined $timeoutExp) {

            $timeout = $timeoutExp->evaluate();

            if (! ($timeout =~  /^\d+$/)) {

                return $self->scriptObj->setError(
                    'invalid_integer',
                    $self->_objClass . '->implement',
                );

            } elsif ($timeout < 1) {

                return $self->scriptObj->setError(
                    'number_NUM_out_of_range',
                    $self->_objClass . '->implement',
                    'NUM', $timeout,
                );
            }
        }

        # Inform the parent task that it should start waiting
        $self->scriptObj->parentTask->setUpMonitoring(
            'status',
            'alive',
            undef,
            $timeout,
        );

        # Halt execution of the Axbasic script to allow control to be passed back to the parent task
        $self->scriptObj->set_scriptStatus('wait_status');

        # Implementation complete
        return 1;
    }
}

{ package Language::Axbasic::Statement::waitarrive;

    use strict;
    use warnings;
#   use diagnostics;

    use Glib qw(TRUE FALSE);

    @Language::Axbasic::Statement::waitarrive::ISA = qw(
        Language::Axbasic
        Language::Axbasic::Statement
    );

    # WAITARRIVE [ expression ]

    ##################
    # Methods

    sub parse {

        # Called by LA::Line->parse directly after a call to LA::Statement->new
        #
        # Expected arguments
        #   (none besides $self)
        #
        # Return values
        #   'undef' on improper arguments or if there is an error
        #   1 otherwise

        my ($self, $check) = @_;

        # Local variables
        my $timeoutExp;

        # Check for improper arguments
        if (defined $check) {

            return $axmud::CLIENT->writeImproper($self->_objClass . '->parse', @_);
        }

        # Get the timeout, if specified, and convert it into an expression
        if (defined $self->tokenGroupObj->shiftMatchingToken(',')) {

            $timeoutExp = Language::Axbasic::Expression::Arithmetic->new(
                $self->scriptObj,
                $self->tokenGroupObj,
            );



( run in 0.826 second using v1.01-cache-2.11-cpan-39bf76dae61 )