Metropoli BBS
VIEWER: 6_subr.zrx MODE: TEXT (ASCII)
/* REXX */

/* This program lets the user enter a value.  It is done in a sub-    */
/* routine with global variable space that modifies the variables     */
/* of the calling program part.  Then another subroutine checks  if   */
/* the value can be divided by any other number.                      */

CALL ENTERIT

IF HAS_DIVIDERS(number)=0 THEN DO 
    SAY number||" is a prime number!"
END
ELSE DO 
    SAY number||" is not a prime number!"
END

EXIT

/* Below is a subroutine.  It has access to the varibale pool of the  */
/* calling program.  Of course, this could be done in a more elegant  */
/* way.                                                               */
ENTERIT:
    SAY "Please enter a number (up to 1000)"
    PULL number
    RETURN


/* Below is a function.  The word PROCEDURE was added, to give it a   */
/* local variable pool.  Exchange of data with the calling program is */
/* done through argument passing and result return mechanism.         */
HAS_DIVIDERS: PROCEDURE 
    /* Pick up first (and only) argument */
    z= ARG(1)
    result= 0

    DO i=2 TO z-1
        IF (z//i)=0 THEN DO
            /* leave loop if i is a divider of z */
            result= 1
            LEAVE i
        END 
    END

    RETURN result

[ RETURN TO DIRECTORY ]