Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7983 leency 1
(*
2
    BSD 2-Clause License
3
 
8097 maxcodehac 4
    Copyright (c) 2019-2020, Anton Krotov
7983 leency 5
    All rights reserved.
6
*)
7
 
8
MODULE File;
9
 
8097 maxcodehac 10
IMPORT SYSTEM, WINAPI, API;
7983 leency 11
 
12
 
13
CONST
14
 
15
    OPEN_R* = 0;     OPEN_W* = 1;     OPEN_RW* = 2;
16
    SEEK_BEG* = 0;   SEEK_CUR* = 1;   SEEK_END* = 2;
17
 
18
 
19
PROCEDURE Exists* (FName: ARRAY OF CHAR): BOOLEAN;
20
VAR
21
    FindData: WINAPI.TWin32FindData;
22
    Handle:   INTEGER;
8097 maxcodehac 23
    attr:     SET;
7983 leency 24
 
25
BEGIN
8097 maxcodehac 26
    Handle := WINAPI.FindFirstFileA(SYSTEM.ADR(FName[0]), FindData);
7983 leency 27
    IF Handle # -1 THEN
28
        WINAPI.FindClose(Handle);
8097 maxcodehac 29
        SYSTEM.GET32(SYSTEM.ADR(FindData.dwFileAttributes), attr);
30
        IF 4 IN attr THEN
7983 leency 31
            Handle := -1
32
        END
33
    END
34
 
35
    RETURN Handle # -1
36
END Exists;
37
 
38
 
39
PROCEDURE Delete* (FName: ARRAY OF CHAR): BOOLEAN;
8097 maxcodehac 40
    RETURN WINAPI.DeleteFileA(SYSTEM.ADR(FName[0])) # 0
7983 leency 41
END Delete;
42
 
43
 
44
PROCEDURE Create* (FName: ARRAY OF CHAR): INTEGER;
8097 maxcodehac 45
    RETURN WINAPI.CreateFileA(SYSTEM.ADR(FName[0]), 0C0000000H, 0, NIL, 2, 80H, 0)
7983 leency 46
END Create;
47
 
48
 
49
PROCEDURE Close* (F: INTEGER);
50
BEGIN
51
    WINAPI.CloseHandle(F)
52
END Close;
53
 
54
 
55
PROCEDURE Open* (FName: ARRAY OF CHAR; Mode: INTEGER): INTEGER;
56
VAR
57
    ofstr: WINAPI.OFSTRUCT;
58
BEGIN
59
    RETURN WINAPI.OpenFile(SYSTEM.ADR(FName[0]), ofstr, Mode)
60
END Open;
61
 
62
 
63
PROCEDURE Seek* (F, Offset, Origin: INTEGER): INTEGER;
64
    RETURN WINAPI.SetFilePointer(F, Offset, 0, Origin)
65
END Seek;
66
 
67
 
68
PROCEDURE Read* (F, Buffer, Count: INTEGER): INTEGER;
69
VAR
8097 maxcodehac 70
    res: INTEGER;
7983 leency 71
 
72
BEGIN
8097 maxcodehac 73
    IF WINAPI.ReadFile(F, Buffer, Count, SYSTEM.ADR(res), NIL) = 0 THEN
7983 leency 74
        res := -1
75
    END
76
 
77
    RETURN res
78
END Read;
79
 
80
 
81
PROCEDURE Write* (F, Buffer, Count: INTEGER): INTEGER;
82
VAR
8097 maxcodehac 83
    res: INTEGER;
7983 leency 84
 
85
BEGIN
8097 maxcodehac 86
    IF WINAPI.WriteFile(F, Buffer, Count, SYSTEM.ADR(res), NIL) = 0 THEN
7983 leency 87
        res := -1
88
    END
89
 
90
    RETURN res
91
END Write;
92
 
93
 
94
PROCEDURE Load* (FName: ARRAY OF CHAR; VAR Size: INTEGER): INTEGER;
95
VAR
96
    res, n, F: INTEGER;
97
 
98
BEGIN
99
    res := 0;
100
    F := Open(FName, OPEN_R);
101
 
102
    IF F # -1 THEN
103
        Size := Seek(F, 0, SEEK_END);
104
        n    := Seek(F, 0, SEEK_BEG);
8097 maxcodehac 105
        res  := API._NEW(Size);
7983 leency 106
        IF (res = 0) OR (Read(F, res, Size) # Size) THEN
107
            IF res # 0 THEN
8097 maxcodehac 108
                res := API._DISPOSE(res);
7983 leency 109
                Size := 0
110
            END
111
        END;
112
        Close(F)
113
    END
114
 
115
    RETURN res
116
END Load;
117
 
118
 
119
PROCEDURE RemoveDir* (DirName: ARRAY OF CHAR): BOOLEAN;
8097 maxcodehac 120
    RETURN WINAPI.RemoveDirectoryA(SYSTEM.ADR(DirName[0])) # 0
7983 leency 121
END RemoveDir;
122
 
123
 
124
PROCEDURE ExistsDir* (DirName: ARRAY OF CHAR): BOOLEAN;
125
VAR
126
    Code: SET;
127
 
128
BEGIN
8097 maxcodehac 129
    Code := WINAPI.GetFileAttributesA(SYSTEM.ADR(DirName[0]))
7983 leency 130
    RETURN (Code # {0..31}) & (4 IN Code)
131
END ExistsDir;
132
 
133
 
134
PROCEDURE CreateDir* (DirName: ARRAY OF CHAR): BOOLEAN;
8097 maxcodehac 135
    RETURN WINAPI.CreateDirectoryA(SYSTEM.ADR(DirName[0]), NIL) # 0
7983 leency 136
END CreateDir;
137
 
138
 
139
END File.