SUBROUTINE NUMSTR(N,LINE,LENGTH) C C SUBROUTINE NUMSTR WILL PRODUCE A STRING OF CHARACTERS C REPRESENTING THE WORDS ASSOCIATED WITH N. THE LENGTH IN C CHARACTERS IS RETURNED IN LENGTH. LENGTH < 58. C BYTE LINE(58), ONESB(8,9), TENSB(8,9), TEENSB(8,9) BYTE HUNDRB(8), THOUSB(8), NUMB(6) BYTE PERIOD, DASH, COMMA, BLANK COMPLEX ONESC(9), TENSC(9), TEENSC(9) COMPLEX*8 HUNDRD, THOUSD INTEGER ONEBL(9), TENBL(9), HUNDBL, THOUBL, TEENBL(9) INTEGER ONE, TEN, HUND, THOU, TENTHO EQUIVALENCE (ONESB(1,1),ONESC(1)) EQUIVALENCE (TENSB(1,1),TENSC(1)) EQUIVALENCE (TEENSB(1,1),TEENSC(1)) EQUIVALENCE (HUNDRB(1),HUNDRD) EQUIVALENCE (THOUSB(1),THOUSD) DATA ONESC/'one ','two ','three ' 1,'four ','five ','six ','seven ' 2,'eight ','nine '/ DATA TENSC/'ten ','twenty ','thirty ' 1,'forty ','fifty ','sixty ','seventy ' 2,'eighty ','ninety '/ DATA TEENSC/'eleven ','twelve ','thirteen' 1,'fourteen','fifteen ','sixteen ','seventee' 2,'eighteen','nineteen'/ DATA HUNDRD/'hundred '/THOUSD/'thousand'/ DATA BLANK/' '/ DATA DASH/'-'/ DATA COMMA/','/ DATA PERIOD/'.'/ DATA ONEBL/3,3,5,4,4,3,5,5,4/ DATA TENBL/3,6,6,5,5,5,7,6,6/ DATA TEENBL/6,6,8,8,7,7,8,8,8/ DATA HUNDBL/7/THOUBL/8/ C C START OF CODE C ENCODE(6,101,NUMB(1))N DECODE(1,102,NUMB(6))ONE DECODE(1,102,NUMB(5))TEN DECODE(1,102,NUMB(4))HUND DECODE(1,102,NUMB(3))THOU DECODE(1,102,NUMB(2))TENTHO LENGTH=0 C IF(TENTHO.EQ.0)GO TO 20 IF(TENTHO.GT.1.OR.(TENTHO.EQ.1.AND.THOU.EQ.0))GO TO 10 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,TEENSB(1,THOU),TEENBL(THOU)) IF(THOU.EQ.7)CALL MOVSTR(LINE,LENGTH,'n',1) GO TO 30 C 10 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,TENSB(1,TENTHO),TENBL(TENTHO)) C 20 IF(THOU.EQ.0)GO TO 30 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,ONESB(1,THOU),ONEBL(THOU)) 30 IF(TENTHO.EQ.0.AND.THOU.EQ.0)GO TO 35 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,THOUSB,THOUBL) C 35 IF(HUND.EQ.0)GO TO 40 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,ONESB(1,HUND),ONEBL(HUND)) CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,HUNDRD,HUNDBL) C 40 IF(TEN.EQ.0)GO TO 60 IF(TEN.GT.1.OR.(TEN.EQ.1.AND.ONE.EQ.0))GO TO 50 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,TEENSB(1,ONE),TEENBL(ONE)) IF(ONE.EQ.7)CALL MOVSTR(LINE,LENGTH,'n',1) GO TO 70 C 50 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,TENSB(1,TEN),TENBL(TEN)) C 60 IF(ONE.EQ.0)GO TO 70 CALL MOVSTR(LINE,LENGTH,BLANK,1) CALL MOVSTR(LINE,LENGTH,ONESB(1,ONE),ONEBL(ONE)) 70 RETURN 101 FORMAT(I6) 102 FORMAT(I1) END SUBROUTINE MOVSTR(LINE,LENGTH,STRING,STRLEN) INTEGER STRLEN BYTE STRING(STRLEN),LINE(80) DO 10,I=1,STRLEN LENGTH=LENGTH+1 LINE(LENGTH)=STRING(I) 10 CONTINUE RETURN END