SUBROUTINE GETWRD(LINE, NL, WORD, NW, IPNTR, EOL 1,DEBUG, FORTRN, NUMBER, IVOWEL) C+ C SUBROUTINE GETWRD WILL RETURN THE NEXT WORD FROM THE C LINE OR EOL=.TRUE. IF END-OF-LINE C RUNOFF COMMAND LINES ARE PROCESSED TO THE EXTENT C THAT THE RUNOFF COMMANDS ARE NOT CHECKED BUT EVERYTHING C AFTER THE ';' IS CHECKED IF IT OCCURS ON A RUNOFF COMMAND C LINE. C C VARIABLE DEFINITIONS: C LINE LINE CONTAINING CURRENT LINE C FROM DOCUMENT. C NL LENGTH OF LINE IN BYTES C WORD NEXT CHAR*25 RETURNED TO CALLER C NW NUMBER OF BYTES IN WORD C IPNTR POINTER TO CURRENT POSITION IN LINE C EOL LOGICAL*1 IF END-OF-LINE C DEBUG THE DEBUG VARIABLE C FORTRN THE FORTRAN VARIABLE C NUMBER THE NUMBERS ARE ALL RIGHT VARIABLE C IVOWEL VOWELS ARE REQUIRED IN VALID WORDS C C LOCAL VARIABLES: C VOWEL ARRAY CONTAINING ALLOWABLE VOWELS C WDSTRT THE STARTING POSITION IN THE LINE OF NEXT WORD C WDEND THE ENDING POSITION IN THE LINE OF CURRENT WORD C HYPHEN DEFINES WHETHER LAST WORD ON PREVIOUS LINE WAS - C HPNTR POINTS TO BEGINNING OF WORD IF NOT HYPHEN, POINTS C TO CONTINUATION SPOT IF HYPHEN C SUBROUTINES REFERENCED C BLANK RETURNS BLANKS IN GIVEN ARRAY C C- LOGICAL*1 EOL, DEBUG, FORTRN, HYPHEN, NUMBER, IVOWEL BYTE LINE(255), WORD(25), VOWEL(6) INTEGER WDSTRT,WDEND,HPNTR DATA HYPHEN /.FALSE./VOWEL/'a','e','i','o','u','y'/ C EOL=.FALSE. WDSTRT=1 IF(LINE(1).EQ.'.'.AND.IPNTR.EQ.1)THEN !PROCESS RNO COMMAND LINES DO 10,I=1,NL IF(LINE(I).EQ.';')THEN IPNTR=I+1 GO TO 20 END IF 10 CONTINUE GO TO 50 END IF 20 CONTINUE IF(HYPHEN)THEN HPNTR=NW HYPHEN=.FALSE. ELSE HPNTR=1 END IF C CALL BLANK(WORD,25) !BLANK OUT PREVIOUS DO 30,I=IPNTR,NL IF(FORTRN.AND.I.EQ.1)GO TO 30 IF((LINE(I).GE.'a'.AND.LINE(I).LE.'z').OR. 1((LINE(I).GE.'0'.AND.LINE(I).LE.'9').AND.NUMBER))THEN WDSTRT=I GO TO 40 END IF 30 CONTINUE 40 IF(I.GT.NL.OR.IPNTR.GT.NL)THEN 50 IF(DEBUG)WRITE(3,1000) EOL=.TRUE. RETURN ELSE DO 60,J=WDSTRT,NL+1 IF(LINE(J).EQ.' '.OR.LINE(J).EQ.'11'O 1 .OR.LINE(J).EQ.','.OR.LINE(J).EQ.'.' 2 .OR.LINE(J).EQ.';'.OR.LINE(J).EQ.':' 3 .OR.LINE(J).EQ.'?'.OR.LINE(J).EQ.'/' 4 .OR.LINE(J).EQ.'!'.OR.LINE(J).EQ.'(' 5 .OR.LINE(J).EQ.')'.OR.LINE(J).EQ.'_' 6 .OR.J.EQ.NL+1)THEN WDEND=J-1 IPNTR=J GO TO 70 END IF 60 CONTINUE 70 CONTINUE DO 80,K=WDSTRT,WDEND IF(LINE(K).GE.'a'.AND.LINE(K).LE.'z' 1 .OR.((LINE(K).GE.'0'.AND.LINE(K).LE.'9').AND.NUMBER) 2 .OR.(LINE(K).EQ.'-'.OR.LINE(K).EQ.'47'O))THEN !FOR HYPHEN WORD(K-WDSTRT+HPNTR)=LINE(K) !OR "'" IF(LINE(K).EQ.'-'.AND.K.EQ.NL) 1 HYPHEN=.TRUE. !IF EOL AND - ELSE GO TO 20 !GET NEXT WORD END IF 80 CONTINUE END IF NW=WDEND-WDSTRT+1 DO 90,K=NW+1,25 90 WORD(K)=' ' IF(DEBUG)THEN WRITE(3,1020)WORD WRITE(3,1010) END IF IF(.NOT.IVOWEL)GO TO 110 !TOKEN MUST HAVE VOWEL? DO 100,J=1,6 !YES, CHECK TOKEN FOR VOWEL DO 100,K=WDSTRT,WDEND IF(LINE(K).EQ.VOWEL(J))GO TO 110 !TOKEN HAVE VOWEL? 100 CONTINUE GO TO 20 !NO, GET NEXT TOKEN 110 CONTINUE RETURN 1000 FORMAT(' GETWRD EOL') 1010 FORMAT(' GETWRD NO EOL') 1020 FORMAT(' WORD=',25A1) END