Home | History | Annotate | Line # | Download | only in libdos
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