48 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
| 74700 #include "rundecs.h"
 | |
| 74710     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
 | |
| 74720 (**)
 | |
| 74730 (**)
 | |
| 74740 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN ;
 | |
| 74750 FUNCTION SUBFIXED(SIGN, BEFORE, POINT, AFTER  : INTEGER; VAR EXP: INTEGER; EXPNEEDED: BOOLEAN;
 | |
| 74760                 X: REALTEGER; R: BOOLEAN; VAR S: OBJECTP; START: INTEGER): BOOLEAN; EXTERN;
 | |
| 74770 PROCEDURE ERRORFILL(VAR S: OBJECTP; LENGTH: INTEGER); EXTERN;
 | |
| 74780 (**)
 | |
| 74790 (**)
 | |
| 74800 FUNCTION FLOAT(XMODE: INTEGER; VAL: REALTEGER; WIDTH, AFTER, EXP: INTEGER): OBJECTP;
 | |
| 74810   VAR E: REALTEGER;
 | |
| 74820       S: OBJECTP;
 | |
| 74830       ABSWIDTH, BEFORE, POINT, ABSEXP, EXPSIGN: INTEGER;
 | |
| 74840       OK, OK1: BOOLEAN;
 | |
| 74850   BEGIN
 | |
| 74860     ABSWIDTH := ABS(WIDTH)+ORD(WIDTH=0);
 | |
| 74870     ABSEXP := ABS(EXP)+ORD(EXP=0);
 | |
| 74880     S := CRSTRING(ABSWIDTH);
 | |
| 74890     REPEAT
 | |
| 74900       POINT := ORD(AFTER>0);
 | |
| 74910       BEFORE := ABSWIDTH-1-POINT-AFTER-1-ABSEXP;
 | |
| 74920       IF BEFORE<0 THEN AFTER := -1; (*WILL CAUSE SUBFIXED TO FAIL*)
 | |
| 74930       OK := SUBFIXED(ORD((WIDTH>0) OR (VAL.INT<0))-ORD((WIDTH<0) AND (VAL.INT>=0)),
 | |
| 74940                      BEFORE, POINT, AFTER, E.INT, TRUE, VAL, XMODE=2, S, 1)
 | |
| 74950             AND (BEFORE+AFTER>0);
 | |
| 74960       S^.CHARVEC[1+BEFORE+POINT+AFTER+1] := 'E';
 | |
| 74970       EXPSIGN := ORD((EXP>0) OR (E.INT<0));
 | |
| 74980       OK1 := SUBFIXED(EXPSIGN, ABSEXP-EXPSIGN, 0, 0, E.INT, FALSE, E, FALSE,
 | |
| 74990                       S, 1+BEFORE+POINT+AFTER+2);
 | |
| 75000       AFTER := AFTER-ORD(AFTER<>0); ABSEXP := ABSEXP+1
 | |
| 75010     UNTIL NOT OK OR OK1;
 | |
| 75020     IF NOT OK THEN ERRORFILL(S, ABSWIDTH);
 | |
| 75030     FLOAT := S;
 | |
| 75040   END;
 | |
| 75050 (**)
 | |
| 75060 (**)
 | |
| 75070 (*+01() (*$X4*) ()+01*)
 | |
| 75080 (**)
 | |
| 75090 (**)
 | |
| 75100 (*-02()
 | |
| 75110 BEGIN (*OF A68*)
 | |
| 75120 END; (*OF A68*)
 | |
| 75130 ()-02*)
 | |
| 75140 (*+01()
 | |
| 75150 BEGIN (*OF MAIN PROGRAM*)
 | |
| 75160 END (* OF EVERYTHING *).
 | |
| 75170 ()+01*)
 |