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; |