Subversion Repositories Kolibri OS

Rev

Rev 8859 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8859 Rev 9893
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2018-2021, Anton Krotov
4
    Copyright (c) 2018-2022, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 215... Line 215...
215
 
215
 
216
 
216
 
217
PROCEDURE fconv* (s: ARRAY OF CHAR; VAR v: VALUE; VAR error: INTEGER);
217
PROCEDURE fconv* (s: ARRAY OF CHAR; VAR v: VALUE; VAR error: INTEGER);
218
VAR
-
 
219
    value:    REAL;
218
VAR
220
    frac:     REAL;
219
    value:    REAL;
221
    exp10:    REAL;
220
    exp10:    REAL;
Line 222... Line 221...
222
    i, n, d:  INTEGER;
221
    i, n, d:  INTEGER;
223
    minus:    BOOLEAN;
222
    minus:    BOOLEAN;
224
 
223
 
225
BEGIN
-
 
226
    error := 0;
-
 
227
    value := 0.0;
224
BEGIN
228
    frac  := 0.0;
225
    error := 0;
Line 229... Line 226...
229
    exp10 := 1.0;
226
    value := 0.0;
230
    minus := FALSE;
227
    minus := FALSE;
231
    n := 0;
228
    n := 0;
-
 
229
 
232
 
230
    exp10 := 0.0;
233
    i := 0;
231
    WHILE (error = 0) & (STRINGS.digit(s[i]) OR (s[i] = ".")) DO
234
    WHILE (error = 0) & STRINGS.digit(s[i]) DO
-
 
235
        IF opFloat2(value, 10.0, "*") & opFloat2(value, FLT(digit[ORD(s[i])]), "+") THEN
-
 
236
            INC(i)
-
 
237
        ELSE
-
 
238
            error := 4
-
 
239
        END
-
 
240
    END;
-
 
241
 
232
        IF s[i] = "." THEN
242
    INC(i);
-
 
243
 
233
            exp10 := 1.0;
244
    WHILE (error = 0) & STRINGS.digit(s[i]) DO
234
            INC(i)
245
        IF opFloat2(frac, 10.0, "*") & opFloat2(frac, FLT(digit[ORD(s[i])]), "+") THEN
235
        ELSE
246
            exp10 := exp10 * 10.0;
236
            IF opFloat2(value, 10.0, "*") & opFloat2(value, FLT(digit[ORD(s[i])]), "+") & opFloat2(exp10, 10.0, "*") THEN
-
 
237
                INC(i)
247
            INC(i)
238
            ELSE
Line 248... Line 239...
248
        ELSE
239
                error := 4
249
            error := 4
240
            END
250
        END
241
        END
Line 251... Line 242...
251
    END;
242
    END;
252
 
243