mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-07 03:00:58 +01:00
sinclairql: implemented do_rename(), based on the patch of Norman Dunbar
git-svn-id: trunk@49171 -
This commit is contained in:
parent
992fa3eea7
commit
541c65feb7
@ -175,6 +175,7 @@ const
|
|||||||
_FS_POSAB = $42;
|
_FS_POSAB = $42;
|
||||||
_FS_POSRE = $43;
|
_FS_POSRE = $43;
|
||||||
_FS_HEADR = $47;
|
_FS_HEADR = $47;
|
||||||
|
_FS_RENAME = $4A;
|
||||||
_FS_TRUNCATE = $4B;
|
_FS_TRUNCATE = $4B;
|
||||||
|
|
||||||
function io_fbyte(chan: Tchanid; timeout: Ttimeout): longint; assembler; nostackframe; public name '_io_fbyte';
|
function io_fbyte(chan: Tchanid; timeout: Ttimeout): longint; assembler; nostackframe; public name '_io_fbyte';
|
||||||
@ -327,6 +328,32 @@ asm
|
|||||||
movem.l (sp)+,d2-d3
|
movem.l (sp)+,d2-d3
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function fs_rename_qlstr(chan: Tchanid; new_name_as_qlstr: pointer): longint; assembler; nostackframe; public name '_fs_rename_qlstr';
|
||||||
|
asm
|
||||||
|
move.l d3,-(sp)
|
||||||
|
move.l new_name_as_qlstr,a1
|
||||||
|
move.l chan,a0
|
||||||
|
moveq #-1,d3
|
||||||
|
moveq #_FS_RENAME,d0
|
||||||
|
trap #3
|
||||||
|
move.l (sp)+,d3
|
||||||
|
end;
|
||||||
|
|
||||||
|
function fs_rename(chan: Tchanid; new_name: pchar): longint; public name '_fs_rename';
|
||||||
|
var
|
||||||
|
len: longint;
|
||||||
|
new_name_qlstr: array[0..63] of char;
|
||||||
|
begin
|
||||||
|
len:=length(new_name);
|
||||||
|
if len > length(new_name_qlstr)-2 then
|
||||||
|
len:=length(new_name_qlstr)-2;
|
||||||
|
|
||||||
|
PWord(@new_name_qlstr)[0]:=len;
|
||||||
|
Move(new_name^,new_name_qlstr[2],len);
|
||||||
|
|
||||||
|
fs_rename:=fs_rename_qlstr(chan,@new_name_qlstr);
|
||||||
|
end;
|
||||||
|
|
||||||
function fs_truncate(chan: Tchanid): longint; assembler; nostackframe; public name '_fs_truncate';
|
function fs_truncate(chan: Tchanid): longint; assembler; nostackframe; public name '_fs_truncate';
|
||||||
asm
|
asm
|
||||||
move.l d3,-(sp)
|
move.l d3,-(sp)
|
||||||
|
|||||||
@ -37,6 +37,8 @@ function io_sstrg(chan: Tchanid; timeout: Ttimeout; buf: pointer; len: word): lo
|
|||||||
function fs_posab(chan: Tchanid; var new_pos: longint): longint; external name '_fs_posab';
|
function fs_posab(chan: Tchanid; var new_pos: longint): longint; external name '_fs_posab';
|
||||||
function fs_posre(chan: Tchanid; var new_pos: longint): longint; external name '_fs_posre';
|
function fs_posre(chan: Tchanid; var new_pos: longint): longint; external name '_fs_posre';
|
||||||
function fs_headr(chan: Tchanid; buf: pointer; buf_size: word): longint; external name '_fs_headr';
|
function fs_headr(chan: Tchanid; buf: pointer; buf_size: word): longint; external name '_fs_headr';
|
||||||
|
function fs_rename_qlstr(chan: Tchanid; new_name_as_qlstr: pointer): longint; external name '_fs_rename_qlstr';
|
||||||
|
function fs_rename(chan: Tchanid; new_name: pchar): longint; external name '_fs_rename';
|
||||||
function fs_truncate(chan: Tchanid): longint; external name '_fs_truncate';
|
function fs_truncate(chan: Tchanid): longint; external name '_fs_truncate';
|
||||||
|
|
||||||
function sd_wdef(chan: Tchanid; timeout: Ttimeout; border_colour: byte; border_width: word; window: PQLRect): longint; external name '_sd_wdef';
|
function sd_wdef(chan: Tchanid; timeout: Ttimeout; border_colour: byte; border_width: word; window: PQLRect): longint; external name '_sd_wdef';
|
||||||
|
|||||||
@ -33,7 +33,40 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
procedure do_rename(p1,p2 : pchar; p1changeable, p2changeable: boolean);
|
procedure do_rename(p1,p2 : pchar; p1changeable, p2changeable: boolean);
|
||||||
|
var
|
||||||
|
chanId: longint;
|
||||||
|
res: longint;
|
||||||
begin
|
begin
|
||||||
|
{ To rename a QL file, it must exist and be opened. For WIN/FLP this
|
||||||
|
means open mode 0 (Q_OPEN) but for RAM this can be any of Q_OPEN,
|
||||||
|
Q_OPEN_NEW or Q_OPEN_OVER. }
|
||||||
|
|
||||||
|
{ Does the file exist? }
|
||||||
|
chanId := io_open(p1, Q_OPEN_IN);
|
||||||
|
if chanId < 0 then
|
||||||
|
begin
|
||||||
|
InOutRes:=2; { File not found. }
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ Close and reopen in correct mode. }
|
||||||
|
io_close(chanId);
|
||||||
|
|
||||||
|
chanId := io_open(p1, Q_OPEN);
|
||||||
|
if chanId < 0 then
|
||||||
|
begin
|
||||||
|
Error2InOutRes(chanId);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ Now, finally, we can rename. }
|
||||||
|
res := fs_rename(chanId,p2);
|
||||||
|
|
||||||
|
{ Close the file. Never errors out. }
|
||||||
|
io_close(chanId);
|
||||||
|
|
||||||
|
if res < 0 then
|
||||||
|
Error2InOutRes(res);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user