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