Rev 616 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 616 | Rev 763 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | {cp866} |
1 | {utf8} |
Line 2... | Line 2... | ||
2 | 2 | ||
3 | function DecodeErrNo(ErrNo: DWord): Word; |
3 | function DecodeErrNo(ErrNo: DWord): Word; |
4 | {0 = ãá¯¥è® |
4 | {0 = успешно |
5 | 1 = ¥ ®¯à¥¤¥«¥ ¡ § ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª (¯®¤äãªæ¨ï¬¨ 7, 8 äãªæ¨¨ 21) |
5 | 1 = не определена база и/или раздел жёсткого диска (подфункциями 7, 8 функции 21) |
6 | 2 = äãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ®© ä ©«®¢®© á¨á⥬ë |
6 | 2 = функция не поддерживается для данной файловой системы |
7 | 3 = ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ |
7 | 3 = неизвестная файловая система |
8 | 4 = § १¥à¢¨à®¢ ®, ¨ª®£¤ ¥ ¢®§¢à é ¥âáï ¢ ⥪ã饩 ॠ«¨§ 樨 |
8 | 4 = зарезервировано, никогда не возвращается в текущей реализации |
9 | 5 = ä ©« ¥ ©¤¥ |
9 | 5 = файл не найден |
10 | 6 = ä ©« § ª®ç¨«áï |
10 | 6 = файл закончился |
11 | 7 = 㪠§ â¥«ì ¢¥ ¯ ¬ï⨠¯à¨«®¦¥¨ï |
11 | 7 = указатель вне памяти приложения |
12 | 8 = ¤¨áª § ¯®«¥ |
12 | 8 = диск заполнен |
13 | 9 = â ¡«¨æ FAT à §àãè¥ |
13 | 9 = таблица FAT разрушена |
14 | 10 = ¤®áâ㯠§ ¯à¥éñ |
14 | 10 = доступ запрещён |
15 | 11 = ®è¨¡ª ãáâனá⢠} |
15 | 11 = ошибка устройства} |
16 | begin |
16 | begin |
17 | case ErrNo of |
17 | case ErrNo of |
18 | 0: Result := 0; |
18 | 0: Result := 0; |
19 | 1: Result := 152; |
19 | 1: Result := 152; |
Line 22... | Line 22... | ||
22 | 4: Result := 1; |
22 | 4: Result := 1; |
23 | 5: Result := 2; |
23 | 5: Result := 2; |
24 | 6: Result := 0; |
24 | 6: Result := 0; |
25 | 8: Result := 101; |
25 | 8: Result := 101; |
26 | else |
26 | else |
27 | Result := 153; { Unknown command (¥¨§¢¥áâ ï ª®¬ ¤ ) } |
27 | Result := 153; { Unknown command (неизвестная команда) } |
28 | end; |
28 | end; |
29 | end; |
29 | end; |
Line 30... | Line 30... | ||
30 | 30 | ||
31 | function do_isdevice(handle:thandle): Boolean; |
31 | function do_isdevice(handle:thandle): Boolean; |
Line 94... | Line 94... | ||
94 | procedure do_truncate(handle: THandle; pos: Int64); |
94 | procedure do_truncate(handle: THandle; pos: Int64); |
95 | begin |
95 | begin |
96 | InOutRes := 211; |
96 | InOutRes := 211; |
97 | end; |
97 | end; |
Line -... | Line 98... | ||
- | 98 | ||
- | 99 | ||
98 | 100 | { FIXME: Поправить RTL, факт отсутствия файла не фиксируется при его открытии. } |
|
99 | procedure do_open(var f; p: PChar; flags: Longint); |
101 | procedure do_open(var f; p: PChar; flags: Longint); |
100 | var |
102 | var |
101 | KosFile: PKosFile; |
103 | KosFile: PKosFile; |
102 | FilePath: PChar; |
104 | FilePath: PChar; |
103 | FilePathLen: Longint; |
105 | FilePathLen: Longint; |
104 | RecSize: Longint; |
106 | RecSize: Longint; |
105 | CurrDir: array[0..2048] of Char; |
107 | CurrDir: array[0..2048] of Char; |
- | 108 | CurrDirLen: Longint; |
|
106 | CurrDirLen: Longint; |
109 | Dummy: Longint; |
107 | begin |
110 | begin |
108 | case flags and 3 of |
111 | case flags and 3 of |
109 | 0: FileRec(f).Mode := fmInput; |
112 | 0: FileRec(f).Mode := fmInput; |
110 | 1: FileRec(f).Mode := fmOutput; |
113 | 1: FileRec(f).Mode := fmOutput; |
111 | 2: FileRec(f).Mode := fmInOut; |
114 | 2: FileRec(f).Mode := fmInOut; |
Line 112... | Line 115... | ||
112 | end; |
115 | end; |
113 | 116 | ||
114 | {®à¬¨à®¢ ¨¥ ¨¬¥¨ ¡á®«î⮣® ¯ãâ¨} |
117 | {Формирование имени абсолютного пути} |
115 | FilePathLen := Length(p); |
118 | FilePathLen := Length(p); |
116 | if p^ <> DirectorySeparator then |
119 | if p^ <> DirectorySeparator then |
117 | begin |
120 | begin |
118 | {XXX: à §¬¥à ¡ãä¥à CurrDir ¬®¦¥â ®ª § âìáï ¥¤®áâ â®çë¬} |
121 | {XXX: размер буфера CurrDir может оказаться недостаточным} |
Line 119... | Line 122... | ||
119 | CurrDirLen := kos_getdir(@CurrDir, SizeOf(CurrDir) - FilePathLen - 1) - 1; |
122 | CurrDirLen := kos_getdir(@CurrDir, SizeOf(CurrDir) - FilePathLen - 1) - 1; |
120 | FilePath := @CurrDir; |
123 | FilePath := @CurrDir; |
Line 127... | Line 130... | ||
127 | Move(p^, FilePath[CurrDirLen], FilePathLen + 1); |
130 | Move(p^, FilePath[CurrDirLen], FilePathLen + 1); |
128 | Inc(FilePathLen, CurrDirLen); |
131 | Inc(FilePathLen, CurrDirLen); |
129 | end else |
132 | end else |
130 | FilePath := p; |
133 | FilePath := p; |
Line 131... | Line 134... | ||
131 | 134 | ||
132 | {®§¤ ¨¥ áâàãªâãàë TKosFile} |
135 | {Создание структуры TKosFile} |
133 | RecSize := SizeOf(TKosFile) + FilePathLen; |
136 | RecSize := SizeOf(TKosFile) + FilePathLen; |
134 | KosFile := GetMem(RecSize); |
137 | KosFile := GetMem(RecSize); |
135 | FillChar(KosFile^, RecSize, 0); |
138 | FillChar(KosFile^, RecSize, 0); |
136 | Move(FilePath^, KosFile^.Name, FilePathLen); |
139 | Move(FilePath^, KosFile^.Name, FilePathLen); |
Line 137... | Line 140... | ||
137 | FileRec(f).Handle := DWord(KosFile); |
140 | FileRec(f).Handle := DWord(KosFile); |
138 | 141 | ||
139 | if flags and $1000 <> 0 then |
142 | if flags and $1000 <> 0 then |
140 | begin |
143 | begin |
141 | { ᮧ¤ âì ä ©« } |
144 | { создать файл } |
- | 145 | InOutRes := DecodeErrNo(kos_rewritefile(KosFile, RecSize)); |
|
- | 146 | end else |
|
- | 147 | begin |
|
- | 148 | { попытаться прочитать файл } |
|
- | 149 | KosFile^.Size := 1; |
|
- | 150 | KosFile^.Data := @Dummy; |
|
- | 151 | InOutRes := DecodeErrNo(kos_readfile(KosFile, Dummy)); |
|
142 | InOutRes := DecodeErrNo(kos_rewritefile(KosFile, RecSize)); |
152 | end; |
- | 153 | ||
143 | end else |
154 | if InOutRes <> 0 then |