SUBROUTINE SHOWX C C PURPOSE: OUTPUTS CONTENTS OF STACK REGISTER X TO UNIT # LUNOUT C (CURRENTLY = LUNTI, BUT MAY CHANGE IN FUTURE REVISIONS) UNDER C DIRECTION OF "DIGITS", WHICH CONTROLS # OF DISPLAYED DIGITS. C UNLESS NUMBER TO LARGE OR SMALL TO DISPLAY WITH "DIGITS" DIGITS TO C RIGHT OF DECIMAL POINT, NUMBER IS ENCODED USING A RUN TIME FORMAT C SPECIFIER. C C SUBROUTINES REQUIRED: C CMPRES(LENGTH,STRING) C REMOVES EMBEDDED SPACES FROM STRING OF LENGTH CHARACTERS. C C SORENSON 2/81 C COMMON/UNIT/LUNCMD,LUNOUT,LUNTI,LUNFIL COMMON/FLAGS/STATE,ERROR,STKLFT,NEST,ANGLES,DIGITS,RADIX,FLAG(4) BYTE FLAG,STATE,ERROR,STKLFT,ANGLES,DIGITS,RADIX,NEST COMMON/STACK/X,Y,Z,T,XLST DOUBLE PRECISION X,Y,Z,T,XLST DOUBLE PRECISION HI,LO,XTEMP BYTE FMT(8),STRING(22) DATA FMT/'(',6*' ',')'/ 1 I=DIGITS IF(I.GT.15)I=15 IF(I.LT.0)I=0 XTEMP=DABS(X) HI=1.*10.D0**(15-I) LO=.5*10.D0**(-I) D WRITE(LUNTI,998)HI,LO D998 FORMAT(' HI = ',G22.15,5X,'LO = ',G22.15) C C IF X IS GREATER THAN LARGEST # THAT CAN BE DISPLAYED WHILE C RETAINING "DIGITS" DIGITS TO RIGHT OF DECIMAL POINT, OR LESS THEN C LEAST SIGNIFICANT DISPLAYED DIGIT, SWITCH TO "E" FORMAT. C OTHERWISE, ENCODE X USING "F" FORMAT. C IF(XTEMP.GE.HI.OR.(XTEMP.LT.LO.AND.XTEMP.NE.0.D0))GO TO 50 FMT(2)="106 FMT(3)="61 FMT(4)="67 FMT(5)="56 ENCODE(2,15,FMT(6))I 15 FORMAT(I2) D WRITE(LUNTI,999)(FMT(I),I=1,8) D999 FORMAT(' FORMAT = ',8A1) ENCODE(17,FMT,STRING)X LENGTH=17 C C DELETE LEADING SPACES FROM "F" FIELD BY CALL TO CMPRES C CALL CMPRES(LENGTH,STRING) GO TO 100 C C ENTRY POINT FOR "E" FIELD DISPLAY. DO THINGS SLIGHTLY DIFFERENT C FROM STANDARD E FORMAT--INSTEAD OF DISPLAYING 0.123E+02, DISPLAY C 1.23 E+02. C 50 HI=X HI=X*0.1D0 ENCODE(22,53,STRING)HI LENGTH=22 53 FORMAT(E22.15) STRING(2)=STRING(1) 55 DO 56 I=2,LENGTH-4 56 STRING(I-1)=STRING(I) STRING(I-1)="40 STRING(2)=STRING(3) STRING(3)="56 GO TO 100 C C COMMON DISPLAY SECTION C 100 WRITE(LUNOUT,101)(STRING(I),I=1,LENGTH) 101 FORMAT('0 X = ',22A1) RETURN END