Subversion Repositories Kolibri OS

Rev

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