Error: Rank mismatch in argument 'std' at (1) (scalar and rank-1)

The answer lies in your other thread (Error: IF clause at (1) requires a scalar LOGICAL expression).

  LOGICAL FUNCTION RUZE(CARD1,CARD2)
  IMPLICIT NONE
  CHARACTER CARD1*(*)
  CHARACTER(*) ::CARD2(:)  ! assumed-shape array, previously assumed-size

You provide one. The two options are 1) any procedure which calls RUZE should contain a block such as

INTERFACE
  LOGICAL FUNCTION RUZE(CARD1,CARD2)
    IMPLICIT NONE
    CHARACTER CARD1*(*)
    CHARACTER(*) ::CARD2(:)
  END FUNCTION
END INTERFACE

You can use an include statement if want to save yourself the typing. The better solution 2) is to define the interface (or the entire) procedure in a named module. Calling routines can then use that module.

Alternatively, you could get rid of the assumed-shape array (the one ending with (:)) and use some F77-conforming solution instead. Unfortunately, given the changes you are making, it’s almost impossible to figure out your intentions. Are CARD1 and CARD2 supposed to be arrays or scalars (single cards)?