Subversion Repositories Kolibri OS

Rev

Rev 6613 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6613 Rev 7597
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016 Anton Krotov
2
    BSD 2-Clause License
Line 3... Line -...
3
 
-
 
4
    This program is free software: you can redistribute it and/or modify
-
 
5
    it under the terms of the GNU Lesser General Public License as published by
-
 
6
    the Free Software Foundation, either version 3 of the License, or
3
 
7
    (at your option) any later version.
-
 
8
 
-
 
9
    This program is distributed in the hope that it will be useful,
-
 
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-
 
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4
    Copyright (c) 2019, Anton Krotov
12
    GNU Lesser General Public License for more details.
-
 
13
 
-
 
14
    You should have received a copy of the GNU Lesser General Public License
-
 
15
    along with this program.  If not, see .
5
    All rights reserved.
Line 16... Line 6...
16
*)
6
*)
Line 17... Line 7...
17
 
7
 
-
 
8
MODULE HOST;
Line 18... Line 9...
18
MODULE HOST;
9
 
Line -... Line 10...
-
 
10
IMPORT SYSTEM, API, RTL;
19
 
11
 
-
 
12
 
-
 
13
CONST
20
IMPORT sys := SYSTEM, API;
14
 
-
 
15
    slash* = "/";
-
 
16
    OS* = "LINUX";
Line 21... Line 17...
21
 
17
 
Line 22... Line 18...
22
CONST
18
    bit_depth* = RTL.bit_depth;
Line 23... Line -...
23
 
-
 
24
  OS* = "LNX";
19
    maxint* = RTL.maxint;
Line 25... Line -...
25
  Slash* = "/";
-
 
26
 
-
 
27
VAR
-
 
Line 28... Line 20...
28
 
20
    minint* = RTL.minint;
29
  fsize  : INTEGER;
21
 
30
 
22
 
31
  sec*	 : INTEGER;
23
VAR
-
 
24
 
-
 
25
    argc: INTEGER;
-
 
26
 
-
 
27
    eol*: ARRAY 2 OF CHAR;
-
 
28
 
-
 
29
 
Line 32... Line -...
32
  dsec*  : INTEGER;
-
 
33
 
-
 
34
PROCEDURE GetCommandLine* (): INTEGER;
30
PROCEDURE ExitProcess* (code: INTEGER);
35
  RETURN API.Param
31
BEGIN
-
 
32
    API.exit(code)
-
 
33
END ExitProcess;
36
END GetCommandLine;
34
 
37
 
35
 
-
 
36
PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
-
 
37
VAR
-
 
38
    i, len, ptr: INTEGER;
-
 
39
    c: CHAR;
38
PROCEDURE CloseFile* (File: INTEGER);
40
 
39
BEGIN
41
BEGIN
40
  File := API.fclose(File)
42
    i := 0;
41
END CloseFile;
43
    len := LEN(s) - 1;
-
 
44
    IF (n < argc) & (len > 0) THEN
-
 
45
        SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr);
-
 
46
        REPEAT
-
 
47
            SYSTEM.GET(ptr, c);
-
 
48
            s[i] := c;
Line 42... Line -...
42
 
-
 
43
PROCEDURE FileRW* (hFile, Buffer, nNumberOfBytes: INTEGER; write: BOOLEAN): INTEGER;
-
 
44
VAR res: INTEGER;
49
            INC(i);
-
 
50
            INC(ptr)
-
 
51
        UNTIL (c = 0X) OR (i = len)
-
 
52
    END;
-
 
53
    s[i] := 0X
-
 
54
END GetArg;
-
 
55
 
-
 
56
 
-
 
57
PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR);
-
 
58
VAR
-
 
59
    n: INTEGER;
45
BEGIN
60
 
46
  IF write THEN
61
BEGIN
Line -... Line 62...
-
 
62
    GetArg(0, path);
47
    res := API.fwrite(Buffer, nNumberOfBytes, 1, hFile) * nNumberOfBytes
63
    n := LENGTH(path) - 1;
48
  ELSE
64
    WHILE path[n] # slash DO
49
    res := API.fread(Buffer, nNumberOfBytes, 1, hFile) * nNumberOfBytes
65
        DEC(n)
-
 
66
    END;
50
  END
67
    path[n + 1] := 0X
51
  RETURN res
68
END GetCurrentDirectory;
-
 
69
 
52
END FileRW;
70
 
-
 
71
PROCEDURE ReadFile (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
53
 
72
    RETURN API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F)
54
PROCEDURE OutString* (str: ARRAY OF CHAR);
73
END ReadFile;
55
VAR res: INTEGER;
74
 
56
BEGIN
-
 
57
  res := FileRW(API.stdout, sys.ADR(str), LENGTH(str), TRUE)
-
 
58
END OutString;
75
 
59
 
76
PROCEDURE WriteFile (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
60
PROCEDURE CreateFile* (FName: ARRAY OF CHAR): INTEGER;
-
 
61
  RETURN API.fopen(sys.ADR(FName), sys.ADR("wb"))
-
 
Line 62... Line -...
62
END CreateFile;
-
 
63
 
77
    RETURN API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F)
64
PROCEDURE OpenFile* (FName: ARRAY OF CHAR): INTEGER;
78
END WriteFile;
65
VAR F, res: INTEGER;
79
 
66
BEGIN
-
 
67
  F := API.fopen(sys.ADR(FName), sys.ADR("rb"));
-
 
68
  IF F # 0 THEN
-
 
69
    res   := API.fseek(F, 0, 2);
80
 
70
    fsize := API.ftell(F);
81
PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
-
 
82
VAR
71
    res   := API.fseek(F, 0, 0)
83
    res: INTEGER;
-
 
84
 
72
  END
85
BEGIN
73
  RETURN F
-
 
74
END OpenFile;
86
    res := ReadFile(F, Buffer, bytes);
75
 
87
    IF res <= 0 THEN
76
PROCEDURE FileSize* (F: INTEGER): INTEGER;
88
        res := -1
77
  RETURN fsize
89
    END
-
 
90
 
78
END FileSize;
91
    RETURN res
79
 
92
END FileRead;
Line -... Line 93...
-
 
93
 
-
 
94
 
-
 
95
PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
-
 
96
VAR
-
 
97
    res: INTEGER;
-
 
98
 
80
PROCEDURE Align(n, m: INTEGER): INTEGER;
99
BEGIN
81
  RETURN n + (m - n MOD m) MOD m
100
    res := WriteFile(F, Buffer, bytes);
-
 
101
    IF res <= 0 THEN
-
 
102
        res := -1
-
 
103
    END
-
 
104
 
-
 
105
    RETURN res
-
 
106
END FileWrite;
-
 
107
 
-
 
108
 
-
 
109
PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
-
 
110
    RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb"))
-
 
111
END FileCreate;
82
END Align;
112
 
83
 
113
 
-
 
114
PROCEDURE FileClose* (File: INTEGER);
-
 
115
BEGIN
-
 
116
    File := API.fclose(File)
-
 
117
END FileClose;
-
 
118
 
-
 
119
 
Line 84... Line -...
84
PROCEDURE malloc* (Bytes: INTEGER): INTEGER;
-
 
85
VAR res: INTEGER;
-
 
86
BEGIN
120
PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
87
  Bytes := Align(Bytes, 4);
121
    RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb"))
88
  res := API.malloc(Bytes);
-
 
89
  IF res # 0 THEN
122
END FileOpen;
90
    API.zeromem(ASR(Bytes, 2), res)
123
 
91
  END
-
 
92
  RETURN res
124
 
93
END malloc;
125
PROCEDURE OutChar* (c: CHAR);
94
 
-
 
Line -... Line 126...
-
 
126
BEGIN
-
 
127
    API.putc(c)
-
 
128
END OutChar;
-
 
129
 
-
 
130
 
-
 
131
PROCEDURE GetTickCount* (): INTEGER;
-
 
132
VAR
-
 
133
    tp:  API.TP;
-
 
134
    res: INTEGER;
-
 
135
 
-
 
136
BEGIN
-
 
137
    IF API.clock_gettime(0, tp) = 0 THEN
-
 
138
        res := tp[0] * 100 + tp[1] DIV 10000000
95
PROCEDURE ExitProcess* (code: INTEGER);
139
    ELSE
-
 
140
        res := 0
-
 
141
    END
-
 
142
 
-
 
143
    RETURN res
-
 
144
END GetTickCount;
-
 
145
 
-
 
146
 
-
 
147
PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
96
BEGIN
148
    RETURN path[0] # slash
-
 
149
END isRelative;
-
 
150
 
-
 
151
 
-
 
152
PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER);
-
 
153
END now;
97
  API.exit(code)
154
 
98
END ExitProcess;
155
 
Line 99... Line -...
99
 
-
 
100
PROCEDURE Time* (VAR sec, dsec: INTEGER);
-
 
101
VAR tp: API.TP;
-
 
Line -... Line 156...
-
 
156
PROCEDURE UnixTime* (): INTEGER;
-
 
157
    RETURN API.time(0)
-
 
158
END UnixTime;
102
BEGIN
159
 
103
  IF API.clock_gettime(0, tp) = 0 THEN
160