TITLE FLOATB--CONVERT FLOATING NUMBER TO ASCII STRING RELOCA .GLOBAL FLOATB ACNUM==1 IRP A,,[A,B,C,D,E,F,G,H,I,J] A==ACNUM ACNUM==ACNUM+1 TERMIN P==17 TEM1==I EXPUNGE ACNUM FLOATB: PUSH P,B PUSH P,C PUSH P,D PUSH P,F PUSH P,G PUSH P,H PUSH P,I PUSH P,0 PUSH P,J MOVSI 0,440700 ; BUILD BYTEPNTR HLRZ J,A ; POINT TO BUFFER HRRI 0,1(J) MOVE A,(A) ; GET NUMBER MOVE D,A SETZM (J) ; Clear counter PUSHJ P,NFLOT POP P,J POP P,0 POP P,I POP P,H POP P,G POP P,F POP P,D POP P,C POP P,B POPJ P, ; at this point we enter code abstracted from DDT. NFLOT: JUMPG A,TFL1 JUMPE A,FP1A MOVNS A PUSH P,A MOVEI A,"- PUSHJ P,CHRO POP P,A TLZE A,400000 JRST FP1A TFL1: MOVEI B,0 TFLX: CAMGE A,FT01 JRST FP4 CAML A,FT8 AOJA B,FP4 FP1A: FP3: SETZB C,TEM1 ; CLEAR DIGIT CNTR, C TO RECEIVE FRACTION MULI A,400 ASHC B,-243(A) MOVE A,B PUSHJ P,FP7 PUSH P,A MOVEI A,". PUSHJ P,CHRO POP P,A MOVNI A,10 ADD A,TEM1 MOVE E,C FP3A: MOVE D,E MULI D,12 PUSHJ P,FP7B SKIPE E AOJL A,FP3A POPJ P, ; ONE return from OFLT here FP4: MOVNI C,6 MOVEI F,0 FP4A: ADDI F,1(F) XCT FCP(B) SOSA F FMPR A,@FCP+1(B) AOJN C,FP4A PUSH P,EXPSGN(B) PUSHJ P,FP3 PUSH P,A MOVEI A,"E PUSHJ P,CHRO POP P,A POP P,D PUSHJ P,FDIGIT MOVE A,F FP7: SKIPE A ; AVOID AOSING TEM1, NOT SIGNIFICANT DIGIT AOS TEM1 IDIVI A,12 HRLM B,(P) JUMPE A,FP7A1 PUSHJ P,FP7 FP7A1: HLRZ D,(P) FP7B: ADDI D,"0 ; type digit FDIGIT: PUSH P,A MOVE A,D PUSHJ P,CHRO POP P,A POPJ P, CHRO: AOS (J) ; COUNT CHAR IDPB A,0 ; STUFF CHAR POPJ P, ; constants 1.0^32. 1.0^16. FT8: 1.0^8 1.0^4 1.0^2 1.0^1 FT: 1.0^0 1.0^-32. 1.0^-16. 1.0^-8 1.0^-4 1.0^-2 FT01: 1.0^-1 FT0=FT01+1 ; instructions FCP: CAMLE A, FT0(C) CAMGE A, FT(C) 0, FT0(C) EXPSGN: "- "+ EXPUNGE A,B,C,D,E,F,G,H,I,J,TEM1,P END