mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-05 23:22:25 +00:00
Reals brought back for x86 and other 32bit platforms with gnuc dependency
This commit is contained in:
parent
015afee491
commit
bbb031f234
11 changed files with 442 additions and 6 deletions
2
makefile
2
makefile
|
|
@ -9,7 +9,7 @@ RELEASE = 1.0
|
|||
|
||||
INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH)
|
||||
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
|
||||
VOC = voc
|
||||
VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ RELEASE = 1.0
|
|||
|
||||
INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH)
|
||||
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
|
||||
VOC = voc
|
||||
VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ RELEASE = 1.0
|
|||
|
||||
INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH)
|
||||
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
|
||||
VOC = voc
|
||||
VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ RELEASE = 1.0
|
|||
|
||||
INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH)
|
||||
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
|
||||
VOC = voc
|
||||
VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ RELEASE = 1.0
|
|||
|
||||
INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH)
|
||||
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
|
||||
VOC = voc
|
||||
VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ RELEASE = 1.0
|
|||
|
||||
INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH)
|
||||
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(CCOMP):src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(CCOMP):src/lib/ooc:src/lib/ooc/$(CCOMP):src/lib/pow:src/lib/misc:src/lib/s3:src/voc:src/voc/$(CCOMP):src/voc/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test
|
||||
|
||||
VOC = voc
|
||||
VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH)
|
||||
|
|
|
|||
109
src/lib/v4/armv6j/Reals.Mod
Normal file
109
src/lib/v4/armv6j/Reals.Mod
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
MODULE Reals;
|
||||
(* JT, 5.2.90 / RC 9.12.91 conversion between reals and strings for HP-700, MB 9.12.91, JT for Ofront, 16.3. 95*)
|
||||
|
||||
IMPORT S := SYSTEM;
|
||||
|
||||
|
||||
PROCEDURE -ecvt (x: LONGREAL; ndigit, decpt, sign: LONGINT): LONGINT
|
||||
"ecvt (x, ndigit, decpt, sign)";
|
||||
|
||||
PROCEDURE Ten*(e: INTEGER): REAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
WHILE e > 0 DO
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
power := power * power; e := e DIV 2
|
||||
END ;
|
||||
RETURN SHORT(r)
|
||||
END Ten;
|
||||
|
||||
PROCEDURE TenL*(e: INTEGER): LONGREAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
LOOP
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
e := e DIV 2;
|
||||
IF e <= 0 THEN RETURN r END ;
|
||||
power := power * power
|
||||
END
|
||||
END TenL;
|
||||
|
||||
PROCEDURE Expo*(x: REAL): INTEGER;
|
||||
BEGIN
|
||||
RETURN SHORT(ASH(S.VAL(LONGINT, x), -23) MOD 256)
|
||||
END Expo;
|
||||
|
||||
PROCEDURE ExpoL*(x: LONGREAL): INTEGER;
|
||||
VAR h: LONGINT;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
RETURN SHORT(ASH(h, -20) MOD 2048)
|
||||
END ExpoL;
|
||||
|
||||
PROCEDURE SetExpo*(e: INTEGER; VAR x: REAL);
|
||||
CONST expo = {1..8};
|
||||
BEGIN
|
||||
x := S.VAL(REAL, S.VAL(SET, x) - expo + S.VAL(SET, ASH(LONG(e), 23)))
|
||||
END SetExpo;
|
||||
|
||||
PROCEDURE SetExpoL*(e: INTEGER; VAR x: LONGREAL);
|
||||
CONST expo = {1..11};
|
||||
VAR h: SET;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
h := h - expo + S.VAL(SET, ASH(LONG(e), 20));
|
||||
S.PUT(S.ADR(x)+4, h)
|
||||
END SetExpoL;
|
||||
|
||||
PROCEDURE Convert*(x: REAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END Convert;
|
||||
(*
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END ConvertL;
|
||||
*)
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR decpt, sign, i: LONGINT; buf: LONGINT;
|
||||
BEGIN
|
||||
(*x := x - 0.5; already rounded in ecvt*)
|
||||
buf := ecvt(x, n+2, S.ADR(decpt), S.ADR(sign));
|
||||
i := 0;
|
||||
WHILE i < decpt DO S.GET(buf + i, d[n - i -1]); INC(i) END ; (* showdef was crashing here on oocLowLReal.sym because of ecvt *)
|
||||
i := n - i - 1;
|
||||
WHILE i >= 0 DO d[i] := "0"; DEC(i) END ;
|
||||
END ConvertL;
|
||||
|
||||
PROCEDURE Unpack(VAR b, d: ARRAY OF S.BYTE);
|
||||
VAR i, k: SHORTINT; len: LONGINT;
|
||||
BEGIN i := 0; len := LEN(b);
|
||||
WHILE i < len DO
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) DIV 16);
|
||||
IF k > 9 THEN d[i*2] := k + 55 ELSE d[i*2] := k + 48 END ;
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) MOD 16);
|
||||
IF k > 9 THEN d[i*2+1] := k + 55 ELSE d[i*2+1] := k + 48 END ;
|
||||
INC(i)
|
||||
END
|
||||
END Unpack;
|
||||
|
||||
PROCEDURE ConvertH* (y: REAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(y, d)
|
||||
END ConvertH;
|
||||
|
||||
PROCEDURE ConvertHL* (x: LONGREAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(x, d)
|
||||
END ConvertHL;
|
||||
|
||||
END Reals.
|
||||
109
src/lib/v4/armv6j_hardfp/Reals.Mod
Normal file
109
src/lib/v4/armv6j_hardfp/Reals.Mod
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
MODULE Reals;
|
||||
(* JT, 5.2.90 / RC 9.12.91 conversion between reals and strings for HP-700, MB 9.12.91, JT for Ofront, 16.3. 95*)
|
||||
|
||||
IMPORT S := SYSTEM;
|
||||
|
||||
|
||||
PROCEDURE -ecvt (x: LONGREAL; ndigit, decpt, sign: LONGINT): LONGINT
|
||||
"ecvt (x, ndigit, decpt, sign)";
|
||||
|
||||
PROCEDURE Ten*(e: INTEGER): REAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
WHILE e > 0 DO
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
power := power * power; e := e DIV 2
|
||||
END ;
|
||||
RETURN SHORT(r)
|
||||
END Ten;
|
||||
|
||||
PROCEDURE TenL*(e: INTEGER): LONGREAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
LOOP
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
e := e DIV 2;
|
||||
IF e <= 0 THEN RETURN r END ;
|
||||
power := power * power
|
||||
END
|
||||
END TenL;
|
||||
|
||||
PROCEDURE Expo*(x: REAL): INTEGER;
|
||||
BEGIN
|
||||
RETURN SHORT(ASH(S.VAL(LONGINT, x), -23) MOD 256)
|
||||
END Expo;
|
||||
|
||||
PROCEDURE ExpoL*(x: LONGREAL): INTEGER;
|
||||
VAR h: LONGINT;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
RETURN SHORT(ASH(h, -20) MOD 2048)
|
||||
END ExpoL;
|
||||
|
||||
PROCEDURE SetExpo*(e: INTEGER; VAR x: REAL);
|
||||
CONST expo = {1..8};
|
||||
BEGIN
|
||||
x := S.VAL(REAL, S.VAL(SET, x) - expo + S.VAL(SET, ASH(LONG(e), 23)))
|
||||
END SetExpo;
|
||||
|
||||
PROCEDURE SetExpoL*(e: INTEGER; VAR x: LONGREAL);
|
||||
CONST expo = {1..11};
|
||||
VAR h: SET;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
h := h - expo + S.VAL(SET, ASH(LONG(e), 20));
|
||||
S.PUT(S.ADR(x)+4, h)
|
||||
END SetExpoL;
|
||||
|
||||
PROCEDURE Convert*(x: REAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END Convert;
|
||||
(*
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END ConvertL;
|
||||
*)
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR decpt, sign, i: LONGINT; buf: LONGINT;
|
||||
BEGIN
|
||||
(*x := x - 0.5; already rounded in ecvt*)
|
||||
buf := ecvt(x, n+2, S.ADR(decpt), S.ADR(sign));
|
||||
i := 0;
|
||||
WHILE i < decpt DO S.GET(buf + i, d[n - i -1]); INC(i) END ; (* showdef was crashing here on oocLowLReal.sym because of ecvt *)
|
||||
i := n - i - 1;
|
||||
WHILE i >= 0 DO d[i] := "0"; DEC(i) END ;
|
||||
END ConvertL;
|
||||
|
||||
PROCEDURE Unpack(VAR b, d: ARRAY OF S.BYTE);
|
||||
VAR i, k: SHORTINT; len: LONGINT;
|
||||
BEGIN i := 0; len := LEN(b);
|
||||
WHILE i < len DO
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) DIV 16);
|
||||
IF k > 9 THEN d[i*2] := k + 55 ELSE d[i*2] := k + 48 END ;
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) MOD 16);
|
||||
IF k > 9 THEN d[i*2+1] := k + 55 ELSE d[i*2+1] := k + 48 END ;
|
||||
INC(i)
|
||||
END
|
||||
END Unpack;
|
||||
|
||||
PROCEDURE ConvertH* (y: REAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(y, d)
|
||||
END ConvertH;
|
||||
|
||||
PROCEDURE ConvertHL* (x: LONGREAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(x, d)
|
||||
END ConvertHL;
|
||||
|
||||
END Reals.
|
||||
109
src/lib/v4/armv7a_hardfp/Reals.Mod
Normal file
109
src/lib/v4/armv7a_hardfp/Reals.Mod
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
MODULE Reals;
|
||||
(* JT, 5.2.90 / RC 9.12.91 conversion between reals and strings for HP-700, MB 9.12.91, JT for Ofront, 16.3. 95*)
|
||||
|
||||
IMPORT S := SYSTEM;
|
||||
|
||||
|
||||
PROCEDURE -ecvt (x: LONGREAL; ndigit, decpt, sign: LONGINT): LONGINT
|
||||
"ecvt (x, ndigit, decpt, sign)";
|
||||
|
||||
PROCEDURE Ten*(e: INTEGER): REAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
WHILE e > 0 DO
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
power := power * power; e := e DIV 2
|
||||
END ;
|
||||
RETURN SHORT(r)
|
||||
END Ten;
|
||||
|
||||
PROCEDURE TenL*(e: INTEGER): LONGREAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
LOOP
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
e := e DIV 2;
|
||||
IF e <= 0 THEN RETURN r END ;
|
||||
power := power * power
|
||||
END
|
||||
END TenL;
|
||||
|
||||
PROCEDURE Expo*(x: REAL): INTEGER;
|
||||
BEGIN
|
||||
RETURN SHORT(ASH(S.VAL(LONGINT, x), -23) MOD 256)
|
||||
END Expo;
|
||||
|
||||
PROCEDURE ExpoL*(x: LONGREAL): INTEGER;
|
||||
VAR h: LONGINT;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
RETURN SHORT(ASH(h, -20) MOD 2048)
|
||||
END ExpoL;
|
||||
|
||||
PROCEDURE SetExpo*(e: INTEGER; VAR x: REAL);
|
||||
CONST expo = {1..8};
|
||||
BEGIN
|
||||
x := S.VAL(REAL, S.VAL(SET, x) - expo + S.VAL(SET, ASH(LONG(e), 23)))
|
||||
END SetExpo;
|
||||
|
||||
PROCEDURE SetExpoL*(e: INTEGER; VAR x: LONGREAL);
|
||||
CONST expo = {1..11};
|
||||
VAR h: SET;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
h := h - expo + S.VAL(SET, ASH(LONG(e), 20));
|
||||
S.PUT(S.ADR(x)+4, h)
|
||||
END SetExpoL;
|
||||
|
||||
PROCEDURE Convert*(x: REAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END Convert;
|
||||
(*
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END ConvertL;
|
||||
*)
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR decpt, sign, i: LONGINT; buf: LONGINT;
|
||||
BEGIN
|
||||
(*x := x - 0.5; already rounded in ecvt*)
|
||||
buf := ecvt(x, n+2, S.ADR(decpt), S.ADR(sign));
|
||||
i := 0;
|
||||
WHILE i < decpt DO S.GET(buf + i, d[n - i -1]); INC(i) END ; (* showdef was crashing here on oocLowLReal.sym because of ecvt *)
|
||||
i := n - i - 1;
|
||||
WHILE i >= 0 DO d[i] := "0"; DEC(i) END ;
|
||||
END ConvertL;
|
||||
|
||||
PROCEDURE Unpack(VAR b, d: ARRAY OF S.BYTE);
|
||||
VAR i, k: SHORTINT; len: LONGINT;
|
||||
BEGIN i := 0; len := LEN(b);
|
||||
WHILE i < len DO
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) DIV 16);
|
||||
IF k > 9 THEN d[i*2] := k + 55 ELSE d[i*2] := k + 48 END ;
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) MOD 16);
|
||||
IF k > 9 THEN d[i*2+1] := k + 55 ELSE d[i*2+1] := k + 48 END ;
|
||||
INC(i)
|
||||
END
|
||||
END Unpack;
|
||||
|
||||
PROCEDURE ConvertH* (y: REAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(y, d)
|
||||
END ConvertH;
|
||||
|
||||
PROCEDURE ConvertHL* (x: LONGREAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(x, d)
|
||||
END ConvertHL;
|
||||
|
||||
END Reals.
|
||||
109
src/lib/v4/x86/Reals.Mod
Normal file
109
src/lib/v4/x86/Reals.Mod
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
MODULE Reals;
|
||||
(* JT, 5.2.90 / RC 9.12.91 conversion between reals and strings for HP-700, MB 9.12.91, JT for Ofront, 16.3. 95*)
|
||||
|
||||
IMPORT S := SYSTEM;
|
||||
|
||||
|
||||
PROCEDURE -ecvt (x: LONGREAL; ndigit, decpt, sign: LONGINT): LONGINT
|
||||
"ecvt (x, ndigit, decpt, sign)";
|
||||
|
||||
PROCEDURE Ten*(e: INTEGER): REAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
WHILE e > 0 DO
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
power := power * power; e := e DIV 2
|
||||
END ;
|
||||
RETURN SHORT(r)
|
||||
END Ten;
|
||||
|
||||
PROCEDURE TenL*(e: INTEGER): LONGREAL;
|
||||
VAR r, power: LONGREAL;
|
||||
BEGIN r := 1.0;
|
||||
power := 10.0;
|
||||
LOOP
|
||||
IF ODD(e) THEN r := r * power END ;
|
||||
e := e DIV 2;
|
||||
IF e <= 0 THEN RETURN r END ;
|
||||
power := power * power
|
||||
END
|
||||
END TenL;
|
||||
|
||||
PROCEDURE Expo*(x: REAL): INTEGER;
|
||||
BEGIN
|
||||
RETURN SHORT(ASH(S.VAL(LONGINT, x), -23) MOD 256)
|
||||
END Expo;
|
||||
|
||||
PROCEDURE ExpoL*(x: LONGREAL): INTEGER;
|
||||
VAR h: LONGINT;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
RETURN SHORT(ASH(h, -20) MOD 2048)
|
||||
END ExpoL;
|
||||
|
||||
PROCEDURE SetExpo*(e: INTEGER; VAR x: REAL);
|
||||
CONST expo = {1..8};
|
||||
BEGIN
|
||||
x := S.VAL(REAL, S.VAL(SET, x) - expo + S.VAL(SET, ASH(LONG(e), 23)))
|
||||
END SetExpo;
|
||||
|
||||
PROCEDURE SetExpoL*(e: INTEGER; VAR x: LONGREAL);
|
||||
CONST expo = {1..11};
|
||||
VAR h: SET;
|
||||
BEGIN
|
||||
S.GET(S.ADR(x)+4, h);
|
||||
h := h - expo + S.VAL(SET, ASH(LONG(e), 20));
|
||||
S.PUT(S.ADR(x)+4, h)
|
||||
END SetExpoL;
|
||||
|
||||
PROCEDURE Convert*(x: REAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END Convert;
|
||||
(*
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR i, k: LONGINT;
|
||||
BEGIN
|
||||
i := ENTIER(x); k := 0;
|
||||
WHILE k < n DO
|
||||
d[k] := CHR(i MOD 10 + 48); i := i DIV 10; INC(k)
|
||||
END
|
||||
END ConvertL;
|
||||
*)
|
||||
PROCEDURE ConvertL*(x: LONGREAL; n: INTEGER; VAR d: ARRAY OF CHAR);
|
||||
VAR decpt, sign, i: LONGINT; buf: LONGINT;
|
||||
BEGIN
|
||||
(*x := x - 0.5; already rounded in ecvt*)
|
||||
buf := ecvt(x, n+2, S.ADR(decpt), S.ADR(sign));
|
||||
i := 0;
|
||||
WHILE i < decpt DO S.GET(buf + i, d[n - i -1]); INC(i) END ; (* showdef was crashing here on oocLowLReal.sym because of ecvt *)
|
||||
i := n - i - 1;
|
||||
WHILE i >= 0 DO d[i] := "0"; DEC(i) END ;
|
||||
END ConvertL;
|
||||
|
||||
PROCEDURE Unpack(VAR b, d: ARRAY OF S.BYTE);
|
||||
VAR i, k: SHORTINT; len: LONGINT;
|
||||
BEGIN i := 0; len := LEN(b);
|
||||
WHILE i < len DO
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) DIV 16);
|
||||
IF k > 9 THEN d[i*2] := k + 55 ELSE d[i*2] := k + 48 END ;
|
||||
k := SHORT(ORD(S.VAL(CHAR, b[i])) MOD 16);
|
||||
IF k > 9 THEN d[i*2+1] := k + 55 ELSE d[i*2+1] := k + 48 END ;
|
||||
INC(i)
|
||||
END
|
||||
END Unpack;
|
||||
|
||||
PROCEDURE ConvertH* (y: REAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(y, d)
|
||||
END ConvertH;
|
||||
|
||||
PROCEDURE ConvertHL* (x: LONGREAL; VAR d: ARRAY OF CHAR);
|
||||
BEGIN Unpack(x, d)
|
||||
END ConvertHL;
|
||||
|
||||
END Reals.
|
||||
Loading…
Add table
Add a link
Reference in a new issue