CTITLEUSCDRI - DECODE AN INTEGER FIELD C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** C CA AUTHOR H. W. SWAN CA DESIGNER H. W. SWAN CA SYSTEM IBM/CRAY CA LANGUAGE VS FORTRAN VERSION 2.2 CA WRITTEN 12-03-87 C REVISED 05-23-91 JJC - CHANGED IMPLICIT TO (A-Z). C REVISED 12-17-91 JJC - MODIFIED TO MEET SPARC STANDARDS. CA CA CALLING SEQUENCE CA CALL USCDRI(STRING,*,FMAT,IVAL) CA CA IN/OUT ARGUMENT TYPE DESCRIPTION CA ------ -------- ---- ----------- CA CA IN STRING C*(*) THE INPUT STRING TO BE DECODED CA IN * LABEL A FORTRAN LABEL TO GAIN CONTROL CA IF 'STRING' IS NOT A VALID INTEGER CA IN FMAT C*(*) THE FORMAT STATMENT TO DECODE THE CA INTEGER FIELD CA OUT IVAL I4 THE DECODED INTEGER CA CA CA CA PURPOSE: SCAN A STRING TO MAKE SURE IT'S A VALID INTEGER, THEN CA THEN DECODE IT. CA CA CA THE FOLLOWING TWO GROUPS OF STATEMENTS SHOULD BE EQUIVALENT: CA CA 1) CHARACTER*5 STRING CA READ (STRING, 7000, ERR=100) IVAL CA 7000 FORMAT(I5) CA CA 2) CHARACTER*5 STRING, FMAT CA FMAT = '(I5)' CA CALL USCDRI(STRING, *100, FMAT, IVAL) CA CA UNFORTUNATELY, ALTERNATIVE (1) DOESN'T WORK, WHICH IS WHY 'USCDRI' CA WAS WRITTEN. CA CA SUBROUTINE USCDRI(STRING,*,FMAT,IVAL) C CJJ IMPLICIT NONE IMPLICIT INTEGER (A-Z) C INTEGER IVAL, LENGTH, IBND1, IBND2, I, IC CHARACTER C CHARACTER*(*) STRING, FMAT C C CHECK TO MAKE SURE THERE ARE NO NON-NUMERIC CHARACTERS IN 'STRING'. C LENGTH = LEN(STRING) IBND1 = ICHAR('0') IBND2 = ICHAR('9') DO 100 I=1,LENGTH C = STRING(I:I) IF(C .EQ. ' ' .OR. C .EQ. '+' .OR. C .EQ. '-') GO TO 100 IC = ICHAR(C) IF(IC .LT. IBND1 .OR. IC .GT. IBND2) RETURN 1 100 CONTINUE C C NOW IT'S SAFE TO DO THE INTERNAL READ. C READ (STRING,FMAT) IVAL RETURN END