C  =====================================================================
C  pgm: SH2ST2 .. Get next string (letters, _, digits), right pad blank
C
C  use:     CALL SH2ST2(KHAR,KHPOS,NOFSTR,KHSTR)
C
C  i/o: KHAR ...... last buffer char obtained - CHAR*1
C  i/o: KHPOS ..... last char loc: 2=eol,1=err-eol,0=eof,neg=err - INT
C  out: NOFSTR .... number of non-blank chars found - INT
C  out:             (set to -1 if bad char is found)
C  out: KHSTR ..... string of next chars found, blank padded - CHAR*8
C  out:             (set to blank if bad char is found)
C  out:             (Note, search stops at end of string length)
C
C  rqd: SHGETK
C
C  cmt: Routine will NOT process if current char is "end-of-line".
C  cmt: "KHAR" must be guaranteed not blank if "KHPOS" is less than 2.
C  =====================================================================
      SUBROUTINE SH2ST2(KHAR,KHPOS,NOFSTR,KHSTR)

      EXTERNAL       SHGETK

      INTRINSIC      LEN
      INTEGER        LEN

      CHARACTER*8    KHSTR
      CHARACTER*1    KHAR
      INTEGER        KHPOS,NOFSTR,NCHAR,MAX
C
C    ================================= RCS keyword statements ==========
      CHARACTER*68     RCSKW1,RCSKW2
      DATA             RCSKW1,RCSKW2 /                                 '
     .$Source: /fs/hseb/ob5/rfc/ofs/src/shefpars_driv/RCS/sh2st2.f,v $
     . $',                                                             '
     .$Id: sh2st2.f,v 1.3 1998/04/07 19:08:55 page Exp $
     . $' /
C    ===================================================================
C

        KHSTR = '        '
        NCHAR = 0

C                   If current char position is in a message line

        IF (KHPOS .GT. 2) THEN

C                   Loop while char is not blank nor is output str full

          MAX = LEN(KHSTR)
   50     IF (KHAR.EQ.' ' .OR. KHPOS.LE.2 .OR. NCHAR.GE.MAX) GOTO 60

C                   If not cap letter nor digit, set error indicator

            IF (KHAR.LT.'A' .OR. KHAR.GT.'Z' .AND. KHAR.NE.'_') THEN
              IF (KHAR.LT.'0' .OR. KHAR.GT.'9') NCHAR = -1
            ENDIF

C                   If letter or digit, add to string and get next char

            IF (NCHAR .GE. 0) THEN
              NCHAR  = NCHAR+1
              KHSTR(NCHAR:NCHAR) = KHAR
              CALL SHGETK(KHAR,KHPOS)

C                   Else output blank string and force end of loop

            ELSE
              MAX   = -1
              KHSTR = '        '
            ENDIF

            GOTO 50
   60     CONTINUE
        ENDIF

C                   Output number of chars in string, else -1

        NOFSTR = NCHAR

      RETURN
      END