	GET	hdr.support


	AREA	|Asm$$Code|, CODE, READONLY


	EXPORT	strcmp
strcmp	ROUT
	MOV	a3,#-1
;	B	strncmp ; fall through

	EXPORT	strncmp
strncmp	ROUT
	TEQ	a3,#0
	MOVEQ	a1,#0
	MOVEQS	pc,lr
	STMFD	sp!,{lr}
	MOV	lr,a1
0	LDRB	a1,[lr],#1
	LDRB	a4,[a2],#1
	SUBS	a1,a1,a4
	LDMNEFD	sp!,{pc}^
	SUBS	a3,a3,#1
	TEQNE	a4,#0
	BNE	%BT0
	LDMFD	sp!,{pc}^


	EXPORT	strlen
strlen	ROUT
	SUB	a2,a1,#1
0	LDRB	a3,[a2,#1]!
	TEQ	a3,#0
	BNE	%BT0
	SUB	a1,a2,a1
	MOVS	pc,lr


	EXPORT  strncpy
strncpy	ROUT
	TEQ	a3,#0
	BEQ	%FT1
0	LDRB	a4,[a2],#1
	SUBS	a3,a3,#1
	STRB	a4,[a1],#1
	TEQNE	a4,#0
	BNE	%BT0
1	MOV	a4,#0
	STRB	a4,[a1]
	MOVS	pc,lr


	EXPORT	strtol
strtol	ROUT	; in: a1 = string, a2 = end ptr, a3 = base
	STMFD	sp!,{a2,lr}
	MOV	a2,a1
	MOV	a1,a3
	SWI	XOS_ReadUnsigned
	LDMFD	sp!,{a4,lr}
	TEQ	a4,#0
	STRNE	a2,[a4]
	MOV	a1,a3
	MOVS	pc,lr


	EXPORT	memset
memset	ROUT
	SUBS	a3,a3,#1
	STRPLB	a2,[a1],#1
	BPL	memset
	MOVS	pc,lr


	EXPORT	getenv
getenv	ROUT
	STMFD	sp!,{v1,lr}
	LDR	r1,[sl]
	MOV	r2,#RMA_block
	SUB	r2,r2,#1
	MOV	r3,#0
	MOV	r4,#4
	SWI	XOS_ReadVarVal
	LDRVC	a1,[sl]
	MOVVC	v1,#0
	STRVCB	v1,[a1,r2]
	MOVVS	a1,#0
	LDMFD	sp!,{v1,pc}^


	EXPORT  strcat
strcat	ROUT
	SUB	a1,a1,#1
0	LDRB	a3,[a1,#1]!
	TEQ	a3,#0
	BNE	%BT0
;	B	stpcpy ; fall through


	EXPORT  stpcpy
stpcpy	ROUT
	SUB	a1,a1,#1
0	LDRB	a3,[a2],#1
	STRB	a3,[a1,#1]!
	TEQ	a3,#0
	BNE	%BT0
	MOVS	pc,lr


	EXPORT	mini_sprintf
mini_sprintf ROUT
	MOV	ip,sp
	STMDB	sp!,{a3,a4} ; varargs
	STMDB	sp!,{v1-v3,fp,ip,lr,pc}
	SUB	fp,ip,#12
	MOV	v1,a1
	MOV	v2,a2
	SUB	v3,ip,#8
0	LDRB	a1,[v2],#1
	TEQ	a1,#0
	STREQB	a1,[v1]
	LDMEQDB	fp,{v1-v3,fp,sp,pc}^
	TEQ	a1,#'%'
	STRNEB	a1,[v1],#1
	BNE	%BT0
	LDRB	a1,[v2],#1
	TEQ	a1,#'s'
	; hmm, either %s (string) or %c *ahem* %<anything else> (character)
	LDRNEB	a1,[v3],#4
	STRNEB	a1,[v1],#1
	BNE	%BT0
	MOV	a1,v1
	LDR	a2,[v3],#4
	BL	stpcpy
	MOV	v1,a1
	B	%BT0


	EXPORT	returnerr
returnerr ROUT
	LDR	a3,[sl]
	STR	a1,[a3]
	TEQ	a2,#0
	MOV	a1,a3
	MOVEQS	pc,lr
	STMFD	sp!,{a1,lr}
	ADD	a1,a1,#4
	BL	stpcpy
	LDMFD	sp!,{a1,pc}


	EXPORT  errmess
errmess	ROUT
	LDR	a1,[sl]
	ADD	a1,a1,#4
|x$stack_overflow|
	MOV	pc,lr


	EXPORT	checkvar
checkvar ROUT
	STMFD	sp!,{v1,lr}
	MOV	r1,#0
	MVN	r2,#0
	MOV	r3,#0
	MOV	r4,#4
	SWI	XOS_ReadVarVal
	MOV	a1,r2
	LDMFD	sp!,{v1,pc}^


	EXPORT	|x$stack_overflow|

	END

	ORRS	pc,lr,#1<<28


	END
