/CHANGES TO FLOATING POINT OUTPUT ROUTINE
/TO ALLOW OPTIONAL FIXED POINT OUTPUT
/IF (62)=0, OUTPUT FLOATING
/OTHERWISE C(62) = NUMBER OF DIGITS
/C(AC) = NUMBER OF DECIMAL PLACES
/C(15) LOST DURING EXECUTION


*7200

FOUT,     0
          DCA I SCAD /SAVE C(AC)
          TAD HORDER
          SPA CLA
          TAD SMINUS
          TAD SPLUS
          JMS ASCOUT /PRINT "+" OR "-"
          TAD BFRST
          DCA 15     /INITIALIZE AUTO-INDEX
          JMP 7234   /CONVERT MANTISSA AND BUFFER THE DIGITS

RETN,     TAD BEXP
          DCA 44     /STORE DECIMAL EXPONENT
          JMS I FXAD /GO TO OUTPUT THE NUMBER
          JMP CRLF   /FIXED POINT RETURN
          TAD CHE    /FLOATING POINT RETURN
          JMS ASCOUT /PRINT "E"
	NOP
	NOP
          JMS I EXPT /GO TO OUTPUT EXPONENT
CRLF,     TAD SWIT1
          SNA CLA    /PRINT CR-LF?
          JMP I FOUT /NO, EXIT
          TAD CARRTN /YES
          JMS ASCOUT
          TAD LNFEED
          JMS ASCOUT
          JMP I FOUT /EXIT


*7375

SCAD,     SAC
BFRST,    BUFFER-1
FXAD,     FIX


*7301

          DCA I 15


*7305

          DCA I 15


*7310

          JMP RETN




HORDER=45
SMINUS=7330
SPLUS=7327
BEXP=7324
CHE=7343
EXPT=7337
ASCOUT=7344
SWIT1=55
CARRTN=7341
LNFEED=7342










/IN THE COMMENTS BELOW:-
/   F = NUMBER OF DIGITS TO BE OUTPUT
/   D = NUMBER OF DECIMAL PLACES
/   E = DECIMAL EXPONENT
/   P = NUMBER OF PLACES REMAINING TO BE
/       PRINTED BEFORE DECIMAL POINT


*4600

FIX,      0
          TAD 62
          SNA        /FLOATING OUTPUT?
          JMP R6     /YES, ROUND OFF TO 6 PLACES
          CIA
          TAD SAC
          SPA        /   F-D > 0 ?
          JMP .+5    /YES
          CLA CMA
          TAD 62
          DCA SAC    /MAKE D = F-1
          CMA
          TAD 44
          SMA        /   F-D > E ?
          CLA        /NO, ROUND OFF TO F PLACES
          TAD 62     /YES
          SPA        /   D+E < 0 ?
          JMP PRNT-1 /YES, NO ROUNDING NEEDED, GO TO PRINT
          TAD M6     /NO, ROUND TO D+E PLACES,
          SMA        /TO A MAXIMUM OF 6 PLACES
          CLA
R6,       TAD K7
          DCA TEMP   /SAVE NUMBER+1 OF PLACES TO ROUND TO
          TAD BUFST
          TAD TEMP   /SET UP BUFFER ADDRESS AT WHICH
          DCA PLCE   /ROUNDING OFF SHOULD START
          TAD TEMP
          CIA        /SET UP COUNT OF MAXIMUM NUMBER
          DCA TEMP   /OF CARRIES ALLOWABLE
          TAD K4
RET,      ISZ I PLCE /ADD 1 TO DIGIT AT CURRENT POSITION
          TAD I PLCE
          TAD M10
          SPA CLA    /CARRY REQUIRED?
          JMP PRNT   /NO, GO TO OUTPUT
          DCA I PLCE /YES, MAKE CURRENT DIGIT A ZERO
          ISZ TEMP   /BEGINNING OF BUFFER REACHED?
          JMP DECR   /NO, DECREMENT BUFFER ADDRESS AND REPEAT







          ISZ I PLCE /YES, SET MANTISSA TO 0.1
          ISZ 44     /COMPENSATE BY INCREMENTING EXPONENT
          CLA
PRNT,     TAD BUFST
          DCA 15     /SET AUTO-INDEX REGISTER
          TAD 62
          SNA        /   F = 0 ?
          JMP FLOP   /YES, OUTPUT AS FLOATING NUMBER
          CIA        /NO,
          DCA FCOUNT /SET UP COUNT TO PRINT F PLACES
          TAD FCOUNT
          TAD 44
          SMA SZA    /   E > F ?
          JMP XXX    /YES, PRINT X'S
          TAD SAC
          SMA        /   E < F-D ?
          CLA        /NO, TAKE P = E
          CIA        /YES, TAKE P = F-D
          TAD 44
          CIA
          DCA TEMP   /SET UP MINUS P
          TAD M7
          DCA SCOUNT /SET COUNT OF MAX. NO. OF SIG. FIGS.
BACK,     TAD 44
          TAD TEMP
          SNA CLA    /   P = E ?
          JMP DIG    /YES, PRINT DIGIT
          TAD TEMP   /NO,
          IAC
          SPA CLA    /   P > 1 ?
          TAD SPACE  /YES, TAKE SPACE; OTHERWISE ZERO
IN,       JMS OUT    /PRINT CHARACTER
          ISZ TEMP   /P CHARACTERS PRINTED?
          JMP BACK   /NO
          TAD POINT  /YES,
          JMS I OPUT /PRINT DECIMAL POINT
          JMP BACK

DECR,     CMA
          TAD PLCE
          DCA PLCE
          JMP RET






XXX,      CLA
          TAD CHX
          JMS OUT    /PRINT "X"
          JMP .-2    /AND REPEAT

OUT,      0
          JMS I OPUT /PRINT CHARACTER
          ISZ FCOUNT /F CHARACTERS PRINTED?
          JMP I OUT  /NO, RETURN
          JMP I FIX  /YES, NUMBER FINISHED

DIG,      CMA
          TAD 44     /REDUCE E BY 1
          DCA 44
          ISZ SCOUNT /6 SIG. FIGS. PRINTED?
          JMP .+4    /NO
          CMA        /YES,
          DCA SCOUNT /RESET COUNT TO -1
          JMP IN     /AND LEAVE C(AC) = 0
          TAD I 15   /TAKE NEXT DIGIT FROM BUFFER
          JMP IN

FLOP,     TAD M6     /SET COUNT TO PRINT
          DCA FCOUNT /6 DIGITS AFTER DECIMAL POINT
          JMS I OPUT /PRINT "0"
          TAD POINT
          JMS I OPUT /PRINT "."
          ISZ FIX    /INCREMENT RETURN ADDRESS
          TAD I 15   /TAKE NEXT DIGIT FROM BUFFER
          JMS OUT    /PRINT IT
          JMP .-2    /AND REPEAT

K4,       4
K7,       7
M3,       -3
M6,       -6
M10,      -12
BUFST,    BUFFER-1
OPUT,     7352
SPACE,    240-260
M7,       -7
POINT,    256-260
CHX,      330-260
TEMP,     0
SAC,
SCOUNT,   0
PLCE,
FCOUNT,   0
BUFFER,

$
|*U*