****** ACHTUNG KEIN AUSFÜHRBARES PROGRAMM !!! *************
*							  *
* Routine	atoi					  *
* Autor		Merlin/dv-team				  *
* Datum		13.11.1989				  *
*							  *
****** ACHTUNG KEIN AUSFÜHRBARES PROGRAMM !!! *************

***********************************************************
* AtoI - wandelt einen String aus Ziffern in eine Zahl um *
* A0 enthält Zeiger auf 0-terminierten String, D0 Ergebnis*
***********************************************************

atoi		movem.l		a1-a5/d1-d7,-(sp)
		move.l		a0,-(sp)
		clr.w		d1		;Anzahl Stellen
atoi_l1		addq		#1,d1
		cmp.b		#0,(a0)+
		bne		atoi_l1
		subq		#1,d1
		cmp.w		#10,d1		;mehr Stellen als erlaubt?
		bgt		err_overflow	;ja
		subq		#1,d1		;D1 als Zähler vorbereiten 
		move.l		(sp)+,a0	;A0 restaurieren
		clr.l		d0
		lea		atoi_tab(pc),a1
atoi_l2		move.b		(a0)+,d2	;Stellen-Wert
		ext.w		d2
		sub.w		#48,d2
		cmp.w		#9,d2		;keine Ziffer?
		bgt		err_overflow
		beq		atoi_nextpos
		move.w		d1,d3
		lsl.w		#2,d3		;*4 für Adressen-Offset
		subq		#1,d2		;als Zähler initialisieren
atoi_l3		add.l		(a1,d3.w),d0
		dbra		d2,atoi_l3
atoi_nextpos	dbra		d1,atoi_l2
atoi_end	movem.l		(sp)+,a1-a5/d1-d7
		rts

err_overflow	move.l		#-1,a0
		clr.l		d0
		bra		atoi_end



atoi_tab	dc.l		1
		dc.l		10
		dc.l		100
		dc.l		1000
		dc.l		10000
		dc.l		100000
		dc.l		1000000
		dc.l		10000000
		dc.l		100000000
		dc.l		1000000000

