Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-05 - decus/20-0141/dashow.for
There are 2 other files named dashow.for in the archive. Click here to see a list.
      SUBROUTINE DASHOW(KONTRL,MINDEC,MAXDEC,MINSIG,MAXSIG,
     1    IDECML,IVALUE,VALUE ,MAXBFR,KOUNT ,IBUFFR,IERR  )
C     RENBR(/REPRESENT INTEGER OR REAL NUMBER)
C
C     DONALD BARTH, HARVARD BUSINESS SCHOOL
C
C     ROUTINE TO REPRESENT INTEGERS OR  REAL  NUMBERS  LEFT
C     JUSTIFIED AND WITHOUT EXTRA RIGHTMOST BLANKS
C
C     FOLLOWING ARGUMENTS ARE USED ONLY FOR INPUT  AND  ARE
C     RETURNED UNCHANGED.
C
C     KONTRL = -1,  REPRESENT  INTEGER   VALUE   INPUT   AS
C              ARGUMENT NAMED IVALUE AS OCTAL NUMBER.
C            = 0, REPRESENT INTEGER VALUE INPUT AS ARGUMENT
C              NAMED IVALUE AS DECIMAL NUMBER.
C            = 1 OR GREATER, REPRESENT REAL VALUE INPUT  AS
C              ARGUMENT  NAMED  VALUE  WITH  NO  MORE  THAN
C              MAXDEC NOR LESS THAN MINDEC DIGITS TO  RIGHT
C              OF  DECIMAL  POINT  AND  WITH  NO  MORE THAN
C              MAXSIG  NOR  LESS  THAN  MINSIG  SIGNIFICANT
C              DIGITS.   IF  VALUE  CANNOT  BE  REPRESENTED
C              USING  SPECIFIED  NUMBERS   OF   DIGITS   IN
C              FLOATING  POINT  FORM  (WITHOUT E EXPONENT),
C              THEN  VALUE  IS   INSTEAD   REPRESENTED   IN
C              SCIENTIFIC  NOTATION  (WITH  E EXPONENT) AND
C              WITH IDECML DIGITS TO RIGHT OF DECIMAL POINT
C              IN  REPRESENTATION OF VALUE WHICH EITHER HAS
C              VALUE  ZERO,  OR  WHICH  HAS  BEEN  MODIFIED
C              THOUGH  MULTIPLICATION BY POWER OF TEN SO AS
C              TO FALL WITHIN RANGE 1.0 THROUGH 9.999...
C     MINDEC = 0, THERE IS NO  LOWER  LIMIT  TO  NUMBER  OF
C              DIGITS  WHICH  MUST  BE  SHOWN  TO  RIGHT OF
C              DECIMAL  POINT  OF  NUMBER  REPRESENTED   IN
C              FLOATING POINT FORM.
C            = GREATER THAN ZERO, MINDEC IS MINIMUM  NUMBER
C              OF  DIGITS  WHICH  CAN  BE SHOWN TO RIGHT OF
C              DECIMAL  POINT  OF  NUMBER  REPRESENTED   IN
C              FLOATING  POINT  FORM  IF RIGHTMOST OF THESE
C              DIGITS IS  NONZERO.   IF  IT  WOULD  NOT  BE
C              POSSIBLE  TO INCLUDE AT LEAST THIS NUMBER OF
C              DIGITS TO RIGHT OF DECIMAL POINT, THEN VALUE
C              WILL  BE  REPRESENTED IN SCIENTIFIC NOTATION
C              INSTEAD.  AFTER DETERMINING THAT IT WOULD BE
C              POSSIBLE TO REPRESENT AT LEAST MINDEC DIGITS
C              TO RIGHT OF DECIMAL POINT, THEN  EACH  DIGIT
C              WHICH IS TO RIGHT OF DECIMAL POINT AND WHICH
C              DOES NOT HAVE NONZERO DIGIT TO ITS RIGHT  IS
C              SUPPRESSED  AND  EVEN DECIMAL POINT WILL NOT
C              BE SHOWN IF THERE ARE NO NONZERO  DIGITS  TO
C              RIGHT OF DECIMAL POINT.
C     MAXDEC = 0, REPRESENT ONLY DIGITS WHICH ARE  TO  LEFT
C              OF  DECIMAL  POINT  OF NUMBER REPRESENTED IN
C              FLOATING POINT FORM.
C            = GREATER THAN ZERO, MAXDEC IS MAXIMUM  NUMBER
C              OF  DIGITS  WHICH  CAN  BE SHOWN TO RIGHT OF
C              DECIMAL  POINT  OF  NUMBER  REPRESENTED   IN
C              FLOATING POINT FORM.
C     MINSIG = MINIMUM NUMBER OF SIGNIFICANT  DIGITS  WHICH
C              CAN   BE  SHOWN  IN  NUMBER  REPRESENTED  IN
C              FLOATING POINT FORM IF  RIGHTMOST  OF  THESE
C              DIGITS IS NONZERO.  IF VALUE BEING DISPLAYED
C              HAS VALUE ZERO, THEN MINSIG IS IGNORED.
C     MAXSIG = 0, REPRESENT VALUE INPUT AS  ARGUMENT  NAMED
C              VALUE   IN   SCIENTIFIC   NOTATION  (WITH  E
C              EXPONENT).
C            = GREATER THAN ZERO, MAXSIG IS MAXIMUM  NUMBER
C              OF  DIGITS  WHICH  CAN  BE  SHOWN  IN NUMBER
C              REPRESENTED IN FLOATING POINT FORM, STARTING
C              WITH LEFTMOST NONZERO DIGIT, COUNTING IT AND
C              ALL DIGITS TO ITS RIGHT.  NUMBER  OF  DIGITS
C              DISPLAYED  TO  RIGHT  OF  DECIMAL  POINT  IS
C              REDUCED  IF  NECESSARY  SO  THAT  NUMBER  OF
C              DIGITS    STARTING   AT   LEFTMOST   NONZERO
C              DISPLAYED DIGIT  AND  COUNTING  IT  AND  ALL
C              DIGITS  DISPLAYED  TO  ITS  RIGHT  DOES  NOT
C              EXCEED MAXSIG.  IF MAXSIG WOULD BE LESS THAN
C              NUMBER  OF  DIGITS  LEFT OF DECIMAL POINT IN
C              REPRESENTATION OF VALUE, THEN VALUE WILL  BE
C              REPRESENTED IN SCIENTIFIC NOTATION.
C     IDECML = SAME AS MAXDEC EXCEPT  THAT  IDECML  APPLIES
C              ONLY   TO  VALUES  DISPLAYED  IN  SCIENTIFIC
C              NOTATION.   NOTE  THAT  IF  VALUE  IS  BEING
C              REPRESENTED  IN  SCIENTIFIC  NOTATION,  THEN
C              NONZERO DIGIT WILL BE USED LEFT  OF  DECIMAL
C              POINT   UNLESS   VALUE   IS   ITSELF   ZERO.
C              THEREFORE,  MAXIMUM  NUMBER  OF  SIGNIFICANT
C              DIGITS  WHICH CAN BE DISPLAYED IN SCIENTIFIC
C              NOTATION IS IDECML+1.
C     IVALUE = INPUT  CONTAINING  INTEGER   VALUE   TO   BE
C              REPRESENTED  IF KONTRL IS LESS THAN OR EQUAL
C              TO ZERO.
C     VALUE  = INPUT   CONTAINING   REAL   VALUE   TO    BE
C              REPRESENTED IF KONTRL IS GREATER THAN ZERO.
C     MAXBFR = SUBSCRIPT OF RIGHTMOST  LOCATION  IN  IBUFFR
C              ARRAY  WHICH CAN BE USED BY THIS ROUTINE FOR
C              RETURN OF CHARACTERS  IN  REPRESENTATION  OF
C              NUMBER.   REPRESENTATION  OF NUMBER WILL USE
C              FEWER LOCATIONS IN IBUFFR ARRAY IF POSSIBLE.
C
C     FOLLOWING ARGUMENT IS USED FOR BOTH INPUT AND OUTPUT.
C
C     KOUNT  = INPUT  CONTAINING  SUBSCRIPT  OF   RIGHTMOST
C              (HIGHEST   SUBSCRIPT   VALUE)  IBUFFR  ARRAY
C              LOCATION WHICH IS CURRENTLY IN USE AND WHICH
C              MUST BE PRESERVED.  REPRESENTATION OF NUMBER
C              WILL BE RETURNED STARTING IN IBUFFR(KOUNT+1)
C              AND   EXTENDING  THROUGH  IBUFFR(MAXBFR)  IF
C              NECESSARY.
C            = RETURNED CONTAINING SUBSCRIPT  OF  RIGHTMOST
C              IBUFFR  ARRAY LOCATION IN WHICH CHARACTER OF
C              REPRESENTATION  OF   NUMBER   IS   RETURNED.
C              PORTION   OF   IBUFFR   ARRAY  TO  RIGHT  OF
C              REPRESENTATION   AND    EXTENDING    THROUGH
C              IBUFFR(MAXBFR)  IS  RETURNED  UNDEFINED, BUT
C              POSSIBLY CHANGED.
C
C     FOLLOWING ARGUMENTS ARE USED ONLY FOR OUTPUT.
C
C     IBUFFR = ARRAY  IN  WHICH   CHARACTERS   WHICH   FORM
C              REPRESENTATION  OF  NUMBER  ARE  RETURNED AS
C              THOUGH  READ  BY  MULTIPLE  OF   A1   FORMAT
C              SPECIFICATION   OR   AS  THOUGH  DEFINED  BY
C              SEVERAL 1H FIELDS.   LEFTMOST  CHARACTER  OF
C              REPRESENTATION      IS      RETURNED      IN
C              IBUFFR(KOUNT+1).
C     IERR   = -1, RETURNED  IF  FIELD  WAS  TOO  SHORT  TO
C              CONTAIN  REPRESENTATION OF NUMBER.  FIELD IS
C              RETURNED CONTAINING ASTERISKS, AND KOUNT  IS
C              RETURNED SET EQUAL TO MAXBFR.
C            = 0, RETURNED IF KONTRL IS LESS THAN OR  EQUAL
C              TO ZERO AND INTEGER VALUE COULD BE SHOWN, OR
C              IF KONTRL IS  GREATER  THAN  ZERO  AND  REAL
C              VALUE  WAS  REPRESENTED  IN  FLOATING  POINT
C              FORM.
C            = 1 OR GREATER, RETURNED IF  KONTRL  IS  INPUT
C              GREATER  THAN ZERO AND VALUE WAS REPRESENTED
C              IN SCIENTIFIC NOTATION.  IERR IS  NUMBER  OF
C              DIGITS  WHICH  WOULD  BE  SHOWN  TO  LEFT OF
C              EXPONENT IF RIGHTMOST  OF  THESE  DIGITS  IS
C              NONZERO.    ZEROS  WHICH  ARE  TO  RIGHT  OF
C              DECIMAL POINT AND WHICH DO NOT HAVE  NONZERO
C              DIGIT  TO  THEIR RIGHT ARE NOT SHOWN BUT ARE
C              INCLUDED IN VALUE OF IERR.
C
      DIMENSION IBUFFR(MAXBFR)
      DATA ISTAR/1H*/
      LFTCOL=KOUNT
      IF(KONTRL.GT.0)GO TO 2
C
C     REPRESENT INTEGER
      IRADIX=10
      IF(KONTRL.LT.0)IRADIX=8
      CALL DANUMB(0,IVALUE,IRADIX,IBUFFR,KOUNT,LFTCOL,
     1MAXBFR)
      IERR=0
      IF(KOUNT.GT.LFTCOL)GO TO 3
      IERR=-1
    1 IF(KOUNT.GE.MAXBFR)GO TO 3
      KOUNT=KOUNT+1
      IBUFFR(KOUNT)=ISTAR
      GO TO 1
C
C     REPRESENT REAL NUMBER
    2 LOWDEC=MINDEC
      IF(LOWDEC.LE.0)LOWDEC=-1
      NOTATN=0
      IF(MAXSIG.LE.0)NOTATN=-1
      IWIDTH=MAXBFR-LFTCOL
      CALL DARITE(VALUE ,-1,NOTATN,0,0,
     1-3,0,IWIDTH,LOWDEC,MAXDEC,MINSIG,MAXSIG,
     2-1,0,IDECML,0,0,-1,LFTCOL,
     3MAXBFR,IBUFFR,KOUNT,IERR)
C
C     RETURN TO CALLING PROGRAM
    3 RETURN
C227857143604
      END