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