MODULE irbit2

    LIBRARY "funlib"

    DECLARE FUNCTION and, or, xor, nott

    SHARE ib1, ib3, ib5, ib14, mask, iff, iseed

    ! I have changed the bits to correspond to Sprott

    LET ib1 = 1
    LET ib3 = 4
    LET ib5 = 16
    LET ib14 = 8192
    LET mask = ib1 + ib3 + ib5
    LET iff = 0

    FUNCTION irbit2 (iiseed)

        ! The argument iiseed is the seed only on the first use.
        ! On subsequent use, the shared iseed is used.

        IF iff = 0 then
           LET iff = 1
           LET iseed = iiseed
        END IF

        IF and(iseed, ib14) <> 0 then
           LET iseed = xor(iseed, mask)
           IF iseed > 2^14 then LET iseed = iseed - 2^14
           LET iseed = or(2*iseed, ib1)
           LET irbit2 = 1
        ELSE
           IF iseed > 2^14 then LET iseed = iseed - 2^14
           LET iseed = and(2*iseed, nott(ib1))
           LET irbit2 = 0
        END IF

    END FUNCTION

END MODULE