SUBROUTINE UNDRLN IMPLICIT INTEGER(A-Z) BYTE STRING,TEMP(132),BLANK,ARROW,AND,BSLASH COMMON/STRING/STRING(132),POINT,EPOINT DATA BLANK,ARROW,AND,BSLASH/' ','^','&','\'/ C C BEGIN EXECUTABLE CODE C C FIND OUT THE NUMBER OF WORDS IN THE STRING C NUMWRD=1 DO 10 J=1,EPOINT TEMP(J)=STRING(J) 10 IF(STRING(J).EQ.BLANK)NUMWRD=NUMWRD+1 D TYPE 100,NUMWRD D100 FORMAT(1X,'NUMWRD=',I3,/) C C NOW FIND OUT HOW MANY YOU WANT TO UNDERLINE C IF(NUMWRD.NE.1)GOTO 20 HOWMNY=1 START=1 GOTO 30 20 CALL RANDOM(1,NUMWRD,HOWMNY) D TYPE 200,HOWMNY D200 FORMAT(1X,'HOWMNY=',I3,/) C C NOW FIND OUT WHICH ONES C CALL RANDOM(1,NUMWRD-HOWMNY+1,START) D TYPE 300,START D300 FORMAT(1X,'START =',I3,/) C C NOW LETS UNDERLINE C 30 WORD=0 POINT=1 COUNT=1 40 WORD=WORD+1 IF(WORD.EQ.START)GOTO 60 45 CALL PTSTNG(TEMP(COUNT),COUNT) IF(TEMP(COUNT).NE.BLANK)GOTO 45 C C GOT A BLANK C CALL PTSTNG(TEMP(COUNT),COUNT) GOTO 40 C C FOUND THE START UNDERLINE C 60 CALL PTSTNG(ARROW,NULL) CALL PTSTNG(AND,NULL) GONEBY=0 C C NOW LOOK FOR THE LAST WORD TO BE UNDERLINED C 65 IF(TEMP(COUNT).EQ.BLANK.OR.COUNT.GT.EPOINT)GOTO 70 CALL PTSTNG(TEMP(COUNT),COUNT) GOTO 65 C C CHECK TO SEE IF IT IS THE RIGHT WORD C 70 GONEBY=GONEBY+1 IF(GONEBY.EQ.HOWMNY.OR.COUNT.GT.EPOINT)GOTO 80 CALL PTSTNG(TEMP(COUNT),COUNT) GOTO 65 80 CALL PTSTNG(BSLASH,NULL) CALL PTSTNG(AND,NULL) IF(COUNT.GT.EPOINT)GOTO 999 C C NOW GET THE REST OF THE STRING C DO 90 J=COUNT,EPOINT 90 CALL PTSTNG(TEMP(J),NULL) C C RESET EPOINT C 999 EPOINT=POINT-1 RETURN END SUBROUTINE PTSTNG(CHAR,WHERE) IMPLICIT INTEGER(A-Z) BYTE STRING,CHAR COMMON/STRING/STRING(132),POINT,EPOINT C C BEGIN EXECUTABLE CODE C STRING(POINT)=CHAR WHERE=WHERE+1 POINT=POINT+1 RETURN END