Subversion Repositories Kolibri OS

Rev

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

Rev 7983 Rev 8097
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) 2019, Anton Krotov
4
    Copyright (c) 2019-2020, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
MODULE File;
8
MODULE File;
Line 9... Line 9...
9
 
9
 
Line 18... Line 18...
18
 
18
 
19
PROCEDURE Exists* (FName: ARRAY OF CHAR): BOOLEAN;
19
PROCEDURE Exists* (FName: ARRAY OF CHAR): BOOLEAN;
20
VAR
20
VAR
21
    FindData: WINAPI.TWin32FindData;
21
    FindData: WINAPI.TWin32FindData;
-
 
22
    Handle:   INTEGER;
Line 22... Line 23...
22
    Handle:   INTEGER;
23
    attr:     SET;
23
 
24
 
24
BEGIN
25
BEGIN
25
    Handle := WINAPI.FindFirstFile(SYSTEM.ADR(FName[0]), FindData);
26
    Handle := WINAPI.FindFirstFileA(SYSTEM.ADR(FName[0]), FindData);
26
    IF Handle # -1 THEN
27
    IF Handle # -1 THEN
-
 
28
        WINAPI.FindClose(Handle);
27
        WINAPI.FindClose(Handle);
29
        SYSTEM.GET32(SYSTEM.ADR(FindData.dwFileAttributes), attr);
28
        IF 4 IN FindData.dwFileAttributes THEN
30
        IF 4 IN attr THEN
29
            Handle := -1
31
            Handle := -1
Line 30... Line 32...
30
        END
32
        END
31
    END
33
    END
Line 32... Line 34...
32
 
34
 
33
    RETURN Handle # -1
35
    RETURN Handle # -1
34
END Exists;
36
END Exists;
Line 35... Line 37...
35
 
37
 
36
 
38
 
37
PROCEDURE Delete* (FName: ARRAY OF CHAR): BOOLEAN;
39
PROCEDURE Delete* (FName: ARRAY OF CHAR): BOOLEAN;
Line 38... Line 40...
38
    RETURN WINAPI.DeleteFile(SYSTEM.ADR(FName[0])) # 0
40
    RETURN WINAPI.DeleteFileA(SYSTEM.ADR(FName[0])) # 0
39
END Delete;
41
END Delete;
Line 63... Line 65...
63
END Seek;
65
END Seek;
Line 64... Line 66...
64
 
66
 
65
 
67
 
66
PROCEDURE Read* (F, Buffer, Count: INTEGER): INTEGER;
68
PROCEDURE Read* (F, Buffer, Count: INTEGER): INTEGER;
Line 67... Line 69...
67
VAR
69
VAR
68
    res, n: INTEGER;
70
    res: INTEGER;
69
 
71
 
70
BEGIN
-
 
71
    IF WINAPI.ReadFile(F, Buffer, Count, SYSTEM.ADR(n), NIL) = 0 THEN
-
 
72
        res := -1
72
BEGIN
Line 73... Line 73...
73
    ELSE
73
    IF WINAPI.ReadFile(F, Buffer, Count, SYSTEM.ADR(res), NIL) = 0 THEN
74
        res := n
74
        res := -1
Line 75... Line 75...
75
    END
75
    END
76
 
76
 
77
    RETURN res
77
    RETURN res
Line 78... Line 78...
78
END Read;
78
END Read;
79
 
79
 
80
 
80
 
81
PROCEDURE Write* (F, Buffer, Count: INTEGER): INTEGER;
-
 
82
VAR
-
 
83
    res, n: INTEGER;
81
PROCEDURE Write* (F, Buffer, Count: INTEGER): INTEGER;
Line 84... Line 82...
84
 
82
VAR
85
BEGIN
83
    res: INTEGER;
Line 102... Line 100...
102
    F := Open(FName, OPEN_R);
100
    F := Open(FName, OPEN_R);
Line 103... Line 101...
103
 
101
 
104
    IF F # -1 THEN
102
    IF F # -1 THEN
105
        Size := Seek(F, 0, SEEK_END);
103
        Size := Seek(F, 0, SEEK_END);
106
        n    := Seek(F, 0, SEEK_BEG);
104
        n    := Seek(F, 0, SEEK_BEG);
107
        res  := WINAPI.GlobalAlloc(64, Size);
105
        res  := API._NEW(Size);
108
        IF (res = 0) OR (Read(F, res, Size) # Size) THEN
106
        IF (res = 0) OR (Read(F, res, Size) # Size) THEN
109
            IF res # 0 THEN
-
 
110
                WINAPI.GlobalFree(Size);
107
            IF res # 0 THEN
111
                res := 0;
108
                res := API._DISPOSE(res);
112
                Size := 0
109
                Size := 0
113
            END
110
            END
114
        END;
111
        END;
115
        Close(F)
112
        Close(F)
Line 118... Line 115...
118
    RETURN res
115
    RETURN res
119
END Load;
116
END Load;
Line 120... Line 117...
120
 
117
 
121
 
118
 
122
PROCEDURE RemoveDir* (DirName: ARRAY OF CHAR): BOOLEAN;
119
PROCEDURE RemoveDir* (DirName: ARRAY OF CHAR): BOOLEAN;
Line 123... Line 120...
123
    RETURN WINAPI.RemoveDirectory(SYSTEM.ADR(DirName[0])) # 0
120
    RETURN WINAPI.RemoveDirectoryA(SYSTEM.ADR(DirName[0])) # 0
124
END RemoveDir;
121
END RemoveDir;
125
 
122
 
Line 126... Line 123...
126
 
123
 
127
PROCEDURE ExistsDir* (DirName: ARRAY OF CHAR): BOOLEAN;
124
PROCEDURE ExistsDir* (DirName: ARRAY OF CHAR): BOOLEAN;
128
VAR
125
VAR
129
    Code: SET;
126
    Code: SET;
Line 130... Line 127...
130
 
127
 
131
BEGIN
128
BEGIN
132
    Code := WINAPI.GetFileAttributes(SYSTEM.ADR(DirName[0]))
129
    Code := WINAPI.GetFileAttributesA(SYSTEM.ADR(DirName[0]))
Line 133... Line 130...
133
    RETURN (Code # {0..31}) & (4 IN Code)
130
    RETURN (Code # {0..31}) & (4 IN Code)
134
END ExistsDir;
131
END ExistsDir;