mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 12:49:09 +02:00
human68k: implemented do_open (based on the Atari version)
This commit is contained in:
parent
958f30f192
commit
e867fce883
@ -154,7 +154,76 @@ procedure do_open(var f;p:pchar;flags:longint; pchangeable: boolean);
|
|||||||
when (flags and $1000) the file will be truncate/rewritten
|
when (flags and $1000) the file will be truncate/rewritten
|
||||||
when (flags and $10000) there is no check for close (needed for textfiles)
|
when (flags and $10000) there is no check for close (needed for textfiles)
|
||||||
}
|
}
|
||||||
|
var
|
||||||
|
oldp : PAnsiChar;
|
||||||
|
dosResult: longint;
|
||||||
begin
|
begin
|
||||||
|
{ close first if opened }
|
||||||
|
if ((flags and $10000)=0) then
|
||||||
|
begin
|
||||||
|
case filerec(f).mode of
|
||||||
|
fmInput, fmOutput, fmInout:
|
||||||
|
do_close(filerec(f).handle);
|
||||||
|
fmClosed: ;
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
InOutRes:=102; {not assigned}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ reset file handle }
|
||||||
|
filerec(f).handle:=UnusedHandle;
|
||||||
|
|
||||||
|
{ convert filemode to filerec modes }
|
||||||
|
case (flags and 3) of
|
||||||
|
0 : filerec(f).mode:=fmInput;
|
||||||
|
1 : filerec(f).mode:=fmOutput;
|
||||||
|
2 : filerec(f).mode:=fmInout;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ empty name is special }
|
||||||
|
if p[0]=#0 then begin
|
||||||
|
case filerec(f).mode of
|
||||||
|
fminput :
|
||||||
|
filerec(f).handle:=StdInputHandle;
|
||||||
|
fmappend,
|
||||||
|
fmoutput : begin
|
||||||
|
filerec(f).handle:=StdOutputHandle;
|
||||||
|
filerec(f).mode:=fmOutput; {fool fmappend}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
oldp:=p;
|
||||||
|
DoDirSeparators(p);
|
||||||
|
|
||||||
|
{ rewrite (create a new file) }
|
||||||
|
if (flags and $1000)<>0 then
|
||||||
|
dosResult:=h68kdos_create(p,0)
|
||||||
|
else
|
||||||
|
dosResult:=h68kdos_open(p,flags and 3);
|
||||||
|
|
||||||
|
if oldp<>p then
|
||||||
|
freemem(p);
|
||||||
|
|
||||||
|
if dosResult < 0 then
|
||||||
|
begin
|
||||||
|
Error2InOutRes(dosResult);
|
||||||
|
filerec(f).mode:=fmClosed;
|
||||||
|
exit;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
filerec(f).handle:=word(dosResult);
|
||||||
|
|
||||||
|
{ append mode }
|
||||||
|
if ((Flags and $100)<>0) and
|
||||||
|
(FileRec(F).Handle<>UnusedHandle) then begin
|
||||||
|
do_seekend(filerec(f).handle);
|
||||||
|
filerec(f).mode:=fmOutput; {fool fmappend}
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user