146 lines
3.4 KiB
PHP
146 lines
3.4 KiB
PHP
|
{cp866}
|
|||
|
|
|||
|
function DecodeErrNo(ErrNo: DWord): Word;
|
|||
|
{0 = <EFBFBD>ᯥ譮
|
|||
|
1 = <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> ࠧ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>⪮<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>᪠ (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㭪<EFBFBD><EFBFBD>ﬨ 7, 8 <EFBFBD>㭪樨 21)
|
|||
|
2 = <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ন<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䠩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>⥬<EFBFBD>
|
|||
|
3 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⭠<EFBFBD> 䠩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>⥬<EFBFBD>
|
|||
|
4 = <EFBFBD><EFBFBD>१<EFBFBD>ࢨ<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> ⥪<EFBFBD>饩 ॠ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨
|
|||
|
5 = 䠩<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
6 = 䠩<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>稫<EFBFBD><EFBFBD>
|
|||
|
7 = 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ਫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
8 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
9 = ⠡<EFBFBD><EFBFBD><EFBFBD><EFBFBD> FAT ࠧ<EFBFBD><EFBFBD>襭<EFBFBD>
|
|||
|
10 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
11 = <EFBFBD>訡<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ன<EFBFBD>⢠}
|
|||
|
begin
|
|||
|
case ErrNo of
|
|||
|
0: Result := 0;
|
|||
|
1: Result := 152;
|
|||
|
2: Result := 153;
|
|||
|
3: Result := 151;
|
|||
|
4: Result := 1;
|
|||
|
5: Result := 2;
|
|||
|
6: Result := 0;
|
|||
|
8: Result := 101;
|
|||
|
else
|
|||
|
Result := 153; { Unknown command (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⭠<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) }
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
function do_isdevice(handle:thandle): Boolean;
|
|||
|
begin
|
|||
|
InOutRes := 211;
|
|||
|
Result := False;
|
|||
|
end;
|
|||
|
|
|||
|
procedure do_close(handle: THandle);
|
|||
|
begin
|
|||
|
FreeMem(PKosFile(handle));
|
|||
|
InOutRes := 0;
|
|||
|
end;
|
|||
|
|
|||
|
procedure do_erase(p : pchar);
|
|||
|
begin
|
|||
|
InOutRes := 211;
|
|||
|
end;
|
|||
|
|
|||
|
procedure do_rename(p1,p2 : pchar);
|
|||
|
begin
|
|||
|
InOutRes := 211;
|
|||
|
end;
|
|||
|
|
|||
|
function do_write(handle: THandle; addr: Pointer; len: Longint): Longint;
|
|||
|
begin
|
|||
|
PKosFile(handle)^.Size := len;
|
|||
|
PKosFile(handle)^.Data := addr;
|
|||
|
InOutRes := DecodeErrNo(kos_writefile(PKosFile(handle), Result));
|
|||
|
Inc(PKosFile(handle)^.Position, Result);
|
|||
|
end;
|
|||
|
|
|||
|
function do_read(handle: THandle; addr: Pointer; len: Longint): Longint;
|
|||
|
begin
|
|||
|
PKosFile(handle)^.Size := len;
|
|||
|
PKosFile(handle)^.Data := addr;
|
|||
|
InOutRes := DecodeErrNo(kos_readfile(PKosFile(handle), Result));
|
|||
|
Inc(PKosFile(handle)^.Position, Result);
|
|||
|
end;
|
|||
|
|
|||
|
function do_filepos(handle: THandle): Int64;
|
|||
|
begin
|
|||
|
Result := PKosFile(handle)^.Position;
|
|||
|
end;
|
|||
|
|
|||
|
procedure do_seek(handle: THandle; pos: Int64);
|
|||
|
begin
|
|||
|
PKosFile(handle)^.Position := pos;
|
|||
|
end;
|
|||
|
|
|||
|
function do_seekend(handle: THandle): Int64;
|
|||
|
begin
|
|||
|
InOutRes := 211;
|
|||
|
Result := 0;
|
|||
|
end;
|
|||
|
|
|||
|
function do_filesize(handle: THandle): Int64;
|
|||
|
var
|
|||
|
BDFE: TKosBDFE;
|
|||
|
begin
|
|||
|
PKosFile(handle)^.Data := @BDFE;
|
|||
|
InOutRes := DecodeErrNo(kos_fileinfo(PKosFile(handle)));
|
|||
|
Result := BDFE.Size;
|
|||
|
end;
|
|||
|
|
|||
|
procedure do_truncate(handle: THandle; pos: Int64);
|
|||
|
begin
|
|||
|
InOutRes := 211;
|
|||
|
end;
|
|||
|
|
|||
|
procedure do_open(var f; p: PChar; flags: Longint);
|
|||
|
var
|
|||
|
KosFile: PKosFile;
|
|||
|
FilePath: PChar;
|
|||
|
FilePathLen: Longint;
|
|||
|
RecSize: Longint;
|
|||
|
CurrDir: array[0..2048] of Char;
|
|||
|
CurrDirLen: Longint;
|
|||
|
begin
|
|||
|
case flags and 3 of
|
|||
|
0: FileRec(f).Mode := fmInput;
|
|||
|
1: FileRec(f).Mode := fmOutput;
|
|||
|
2: FileRec(f).Mode := fmInOut;
|
|||
|
end;
|
|||
|
|
|||
|
{<EFBFBD><EFBFBD>ନ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>᮫<EFBFBD>⭮<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
|||
|
FilePathLen := Length(p);
|
|||
|
if p^ <> DirectorySeparator then
|
|||
|
begin
|
|||
|
{XXX: ࠧ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CurrDir <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
|||
|
CurrDirLen := kos_getdir(@CurrDir, SizeOf(CurrDir) - FilePathLen - 1) - 1;
|
|||
|
FilePath := @CurrDir;
|
|||
|
|
|||
|
if FilePath[CurrDirLen - 1] <> DirectorySeparator then
|
|||
|
begin
|
|||
|
FilePath[CurrDirLen] := DirectorySeparator;
|
|||
|
Inc(CurrDirLen);
|
|||
|
end;
|
|||
|
Move(p^, FilePath[CurrDirLen], FilePathLen + 1);
|
|||
|
Inc(FilePathLen, CurrDirLen);
|
|||
|
end else
|
|||
|
FilePath := p;
|
|||
|
|
|||
|
{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TKosFile}
|
|||
|
RecSize := SizeOf(TKosFile) + FilePathLen;
|
|||
|
KosFile := GetMem(RecSize);
|
|||
|
FillChar(KosFile^, RecSize, 0);
|
|||
|
Move(FilePath^, KosFile^.Name, FilePathLen);
|
|||
|
FileRec(f).Handle := DWord(KosFile);
|
|||
|
|
|||
|
if flags and $1000 <> 0 then
|
|||
|
begin
|
|||
|
{ ᮧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䠩<EFBFBD> }
|
|||
|
InOutRes := DecodeErrNo(kos_rewritefile(KosFile, RecSize));
|
|||
|
end else
|
|||
|
InOutRes := 0;
|
|||
|
end;
|