dos_rename.S revision 1.1.10.2 1 1.1.10.2 bouyer | XC compatible RENAME() function
2 1.1.10.2 bouyer | int DOS_RENAME __P((const char *path, const char *newname));
3 1.1.10.2 bouyer |
4 1.1.10.2 bouyer | written by Yasha (ITOH Yasufumi)
5 1.1.10.2 bouyer | public domain
6 1.1.10.2 bouyer |
7 1.1.10.2 bouyer | $NetBSD: dos_rename.S,v 1.1.10.2 2000/11/20 20:30:14 bouyer Exp $
8 1.1.10.2 bouyer
9 1.1.10.2 bouyer #include "dos_asm.h"
10 1.1.10.2 bouyer
11 1.1.10.2 bouyer Lbufsz = 92 | sizeof(struct dos_nameckbuf)
12 1.1.10.2 bouyer Lnamoff = 67 | offsetof(struct dos_nameckbuf, name)
13 1.1.10.2 bouyer Lextoff = 86 | offsetof(struct dos_nameckbuf, ext)
14 1.1.10.2 bouyer
15 1.1.10.2 bouyer ENTRY_NOPROFILE(DOS_RENAME)
16 1.1.10.2 bouyer link %a6,#-Lbufsz*2 | allocate two dos_nameckbuf
17 1.1.10.2 bouyer
18 1.1.10.2 bouyer moveal %sp,%a1 | dos_nameckbuf for path
19 1.1.10.2 bouyer
20 1.1.10.2 bouyer pea %sp@(Lbufsz)
21 1.1.10.2 bouyer movel %a6@(4 + 8),%sp@- | newname
22 1.1.10.2 bouyer .word 0xff37 | DOS_NAMECK
23 1.1.10.2 bouyer tstl %d0
24 1.1.10.2 bouyer bmis Lerr
25 1.1.10.2 bouyer
26 1.1.10.2 bouyer addql #4,%sp
27 1.1.10.2 bouyer
28 1.1.10.2 bouyer movel %a1,%sp@
29 1.1.10.2 bouyer movel %a6@(4 + 4),%sp@- | (old) path
30 1.1.10.2 bouyer .word 0xff37 | DOS_NAMECK
31 1.1.10.2 bouyer tstl %d0
32 1.1.10.2 bouyer bmis Lerr
33 1.1.10.2 bouyer
34 1.1.10.2 bouyer | we don't pop arguments since the same args are used by DOS_MOVE below
35 1.1.10.2 bouyer
36 1.1.10.2 bouyer | search end of dirname of (old) path
37 1.1.10.2 bouyer Lpath: tstb %a1@+
38 1.1.10.2 bouyer bnes Lpath
39 1.1.10.2 bouyer subql #1,%a1 | remove nul char
40 1.1.10.2 bouyer
41 1.1.10.2 bouyer | add new name
42 1.1.10.2 bouyer lea %sp@(8 + Lbufsz+Lnamoff),%a0 | new name (8: args on stack)
43 1.1.10.2 bouyer Lname: moveb %a0@+,%a1@+
44 1.1.10.2 bouyer bnes Lname
45 1.1.10.2 bouyer subql #1,%a1 | remove nul char
46 1.1.10.2 bouyer
47 1.1.10.2 bouyer | add new extention
48 1.1.10.2 bouyer lea %sp@(8 + Lbufsz+Lextoff),%a0 | new ext (8: args on stack)
49 1.1.10.2 bouyer Lext: moveb %a0@+,%a1@+
50 1.1.10.2 bouyer bnes Lext
51 1.1.10.2 bouyer
52 1.1.10.2 bouyer | we already have the arguments on stack
53 1.1.10.2 bouyer bsr _C_LABEL(DOS_MOVE)
54 1.1.10.2 bouyer
55 1.1.10.2 bouyer | version check of Human68k and error handlings are done in DOS_MOVE()
56 1.1.10.2 bouyer
57 1.1.10.2 bouyer unlk %a6 | restore stack
58 1.1.10.2 bouyer rts
59 1.1.10.2 bouyer
60 1.1.10.2 bouyer Lerr: unlk %a6
61 1.1.10.2 bouyer bra CERROR
62