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