	SECTION _TEXT CLASS=CODE USE32
	SECTION _DATA CLASS=DATA USE32
	SECTION _BSS  CLASS=BSS USE32
	SECTION _CONST  CLASS=CONST USE32
	SECTION _STRING  CLASS=STRING USE32
	SECTION cstartup CLASS=INITDATA USE32
	SECTION crundown CLASS=EXITDATA USE32
	SECTION cppinit  CLASS=CPPINIT USE32
	SECTION cppexit  CLASS=CPPEXIT USE32
	GROUP DGROUP _DATA _BSS _CONST _STRING

SECTION _TEXT
[GLOBAL	___xstrtod]
;
; Line 9:	{
;
___xstrtod:
	PUSH	EBP
	MOV	EBP,ESP
	SUB	ESP,BYTE 024H
	PUSH	EBX
	PUSH	ESI
	PUSH	EDI
	MOV	ESI,DWORD [EBP+08H]
	MOV	EBX,DWORD [EBP+010H]
	MOV	EDI,DWORD [EBP+0CH]
;
; Line 10:		int sign = 0;
;
	MOV	DWORD [EBP+0FFFFFFE0H],00H
;
; Line 11:		long double frac = 0;
;
	FLDZ
	FSTP	TWORD [EBP+0FFFFFFE4H]
;
; Line 12:		long double val = 0;
;
	FLDZ
	FSTP	TWORD [EBP+0FFFFFFF0H]
;
; Line 13:		int exp=0;
;
	MOV	DWORD [EBP+0FFFFFFFCH],00H
	JMP	L_1
L_3:
	INC	ESI
L_1:
;
; Line 15:		while( (_ctype[ (*s) ] & (1            ))) s++;
;
	MOVSX	EAX,BYTE [ESI+00H]
	MOVZX	EAX,BYTE [EAX+__ctype+00H]
	AND	EAX,BYTE 01H
	JNE	SHORT	L_3
L_2:
;
; Line 16:		if (*s == '-') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 02DH
	JNE	SHORT	L_4
;
; Line 17:			sign++;
;
	INC	DWORD [EBP+0FFFFFFE0H]
;
; Line 18:			s++;
;
	INC	ESI
;
; Line 19:		  if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_6
;
; Line 20:		  	return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_6:
;
; Line 21:		}
;
	JMP	L_5
L_4:
;
; Line 22:		else if (*s == '+') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 02BH
	JNE	SHORT	L_9
;
; Line 23:			s++;
;
	INC	ESI
;
; Line 25:			if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_11
;
; Line 26:				return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_11:
;
; Line 27:		}
;
L_9:
L_5:
;
; Line 29:		if (*s == '.') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 02EH
	JNE	SHORT	L_13
;
; Line 30:			frac = .1;
;
	FLD	QWORD [L_15]
	FSTP	TWORD [EBP+0FFFFFFE4H]
;
; Line 31:			s++;                    
;
	INC	ESI
;
; Line 32:			if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_16
;
; Line 33:				return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_16:
;
; Line 34:		}
;
L_13:
;
; Line 35:		if (!frac) {
;
	FLD	TWORD [EBP+0FFFFFFE4H]
	FLDZ
	FCOMPP
	FSTSW	AX
	WAIT
	SAHF
	JNE	NEAR	L_18
	JMP	L_20
L_22:
;
; Line 37:				val*= 10;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	FMUL	QWORD [L_23]
	FSTP	TWORD [EBP+0FFFFFFF0H]
;
; Line 38:				val += (*s++-'0');
;
	MOV	EAX,ESI
	INC	ESI
	MOVSX	EAX,BYTE [EAX+00H]
	SUB	EAX,BYTE 030H
	MOV	DWORD [EBP+0FFFFFFDCH],EAX
	FILD	DWORD [EBP+0FFFFFFDCH]
	FLD	TWORD [EBP+0FFFFFFF0H]
	FADDP	ST1
	FSTP	TWORD [EBP+0FFFFFFF0H]
;
; Line 39:				if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_24
;
; Line 40:					return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_24:
;
; Line 41:			}
;
L_20:
;
; Line 36:			while((_ctype[ (*s) ] & (2            ))) {
;
	MOVSX	EAX,BYTE [ESI+00H]
	MOVZX	EAX,BYTE [EAX+__ctype+00H]
	AND	EAX,BYTE 02H
	JNE	NEAR	L_22
L_21:
;
; Line 42:			if (*s == '.') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 02EH
	JNE	SHORT	L_26
;
; Line 43:				frac = .1;
;
	FLD	QWORD [L_15]
	FSTP	TWORD [EBP+0FFFFFFE4H]
;
; Line 44:				s++;
;
	INC	ESI
;
; Line 45:				if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_28
;
; Line 46:					return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_28:
;
; Line 47:			}
;
L_26:
;
; Line 48:		}
;
L_18:
;
; Line 49:		if (frac)
;
	FLD	TWORD [EBP+0FFFFFFE4H]
	FLDZ
	FCOMPP
	FSTSW	AX
	WAIT
	SAHF
	JE	NEAR	L_30
	JMP	L_32
L_34:
;
; Line 51:				val += (*s++-'0')*frac;
;
	MOV	EAX,ESI
	INC	ESI
	MOVSX	EAX,BYTE [EAX+00H]
	SUB	EAX,BYTE 030H
	MOV	DWORD [EBP+0FFFFFFDCH],EAX
	FILD	DWORD [EBP+0FFFFFFDCH]
	FLD	TWORD [EBP+0FFFFFFE4H]
	FMULP	ST1
	FLD	TWORD [EBP+0FFFFFFF0H]
	FADDP	ST1
	FSTP	TWORD [EBP+0FFFFFFF0H]
;
; Line 52:				frac /=10;
;
	FLD	TWORD [EBP+0FFFFFFE4H]
	FDIV	QWORD [L_23]
	FSTP	TWORD [EBP+0FFFFFFE4H]
;
; Line 53:				if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_35
;
; Line 54:					return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_35:
;
; Line 55:			}
;
L_32:
;
; Line 50:			while ((_ctype[ (*s) ] & (2            ))) {
;
	MOVSX	EAX,BYTE [ESI+00H]
	MOVZX	EAX,BYTE [EAX+__ctype+00H]
	AND	EAX,BYTE 02H
	JNE	NEAR	L_34
L_33:
L_30:
;
; Line 56:		if (sign)
;
	CMP	DWORD [EBP+0FFFFFFE0H],BYTE 00H
	JE	SHORT	L_37
;
; Line 57:			val = - val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	FCHS
	FSTP	TWORD [EBP+0FFFFFFF0H]
L_37:
;
; Line 58:		sign = 0;
;
	MOV	DWORD [EBP+0FFFFFFE0H],00H
;
; Line 59:		if (*s == 'e' || *s == 'E' || *s == 'd' || *s == 'E') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 065H
	JE	NEAR	L_41
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 045H
	JE	SHORT	L_41
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 064H
	JE	SHORT	L_41
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 045H
	JNE	NEAR	L_39
L_41:
;
; Line 60:			sign = 0;
;
	MOV	DWORD [EBP+0FFFFFFE0H],00H
;
; Line 61:			s++;
;
	INC	ESI
;
; Line 62:			if (*s == '-') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 02DH
	JNE	SHORT	L_42
;
; Line 63:				sign++;
;
	INC	DWORD [EBP+0FFFFFFE0H]
;
; Line 64:				s++;
;
	INC	ESI
;
; Line 65:				if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_44
;
; Line 66:					return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_44:
;
; Line 67:			}
;
	JMP	L_43
L_42:
;
; Line 68:			else if (*s == '+') {
;
	MOVSX	EAX,BYTE [ESI+00H]
	CMP	EAX,BYTE 02BH
	JNE	SHORT	L_46
;
; Line 69:				s++;
;
	INC	ESI
;
; Line 70:		  	if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_48
;
; Line 71:		  		return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_48:
;
; Line 72:			}
;
L_46:
L_43:
	JMP	L_50
L_52:
;
; Line 74:				exp*= 10;
;
	MOV	EAX,0AH
	IMUL	EAX,DWORD [EBP+0FFFFFFFCH]
	MOV	DWORD [EBP+0FFFFFFFCH],EAX
;
; Line 75:				exp += (*s++-'0');
;
	MOV	EAX,ESI
	INC	ESI
	MOVSX	EAX,BYTE [EAX+00H]
	SUB	EAX,BYTE 030H
	ADD	DWORD [EBP+0FFFFFFFCH],EAX
;
; Line 76:		  	if (!--count)
;
	DEC	EBX
	JNE	SHORT	L_53
;
; Line 77:		  		return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	JMP	L_8
L_53:
;
; Line 78:			}
;
L_50:
;
; Line 73:			while((_ctype[ (*s) ] & (2            ))) {
;
	MOVSX	EAX,BYTE [ESI+00H]
	MOVZX	EAX,BYTE [EAX+__ctype+00H]
	AND	EAX,BYTE 02H
	JNE	NEAR	L_52
L_51:
;
; Line 79:			if (exp > 5200)
;
	CMP	DWORD [EBP+0FFFFFFFCH],01450H
	JLE	SHORT	L_55
;
; Line 80:				exp = 5200;
;
	MOV	DWORD [EBP+0FFFFFFFCH],01450H
L_55:
;
; Line 81:			if (sign)
;
	CMP	DWORD [EBP+0FFFFFFE0H],BYTE 00H
	JE	SHORT	L_57
;
; Line 82:				val = val / _fpow(exp);
;
	FLD	TWORD [EBP+0FFFFFFF0H]
	PUSH	DWORD [EBP+0FFFFFFFCH]
	CALL	__fpow
	POP	ECX
	FDIVP	ST1
	FSTP	TWORD [EBP+0FFFFFFF0H]
	JMP	L_58
L_57:
;
; Line 84:				val = val * _fpow(exp);
;
	PUSH	DWORD [EBP+0FFFFFFFCH]
	CALL	__fpow
	POP	ECX
	FLD	TWORD [EBP+0FFFFFFF0H]
	FMULP	ST1
	FSTP	TWORD [EBP+0FFFFFFF0H]
L_58:
;
; Line 85:		}
;
L_39:
;
; Line 86:		if (endptr)
;
	TEST	EDI,EDI
	JE	SHORT	L_59
;
; Line 87:			*endptr = s;
;
	MOV	DWORD [EDI+00H],ESI
L_59:
;
; Line 88:		return val;
;
	FLD	TWORD [EBP+0FFFFFFF0H]
L_8:
	POP	EDI
	POP	ESI
	POP	EBX
	MOV	ESP,EBP
	POP	EBP
	RET
[GLOBAL	_strtod]
;
; Line 91:	{
;
_strtod:
	PUSH	EBP
	MOV	EBP,ESP
;
; Line 92:		return((double)__xstrtod(string,endptr,256));
;
	PUSH	DWORD 0100H
	PUSH	DWORD [EBP+0CH]
	PUSH	DWORD [EBP+08H]
	CALL	___xstrtod
	ADD	ESP,BYTE 0CH
L_61:
	MOV	ESP,EBP
	POP	EBP
	RET
[GLOBAL	_atof]
;
; Line 95:	{
;
_atof:
	PUSH	EBP
	MOV	EBP,ESP
;
; Line 96:		return((double)__xstrtod(string,0,256));
;
	PUSH	DWORD 0100H
	PUSH	BYTE 00H
	PUSH	DWORD [EBP+08H]
	CALL	___xstrtod
	ADD	ESP,BYTE 0CH
L_62:
	MOV	ESP,EBP
	POP	EBP
	RET
[GLOBAL	__atold]
;
; Line 99:	{
;
__atold:
	PUSH	EBP
	MOV	EBP,ESP
;
; Line 100:		return(__xstrtod(string,0,256));
;
	PUSH	DWORD 0100H
	PUSH	BYTE 00H
	PUSH	DWORD [EBP+08H]
	CALL	___xstrtod
	ADD	ESP,BYTE 0CH
L_63:
	MOV	ESP,EBP
	POP	EBP
	RET

	TIMES $$-$ & 3 NOP
L_23:
	DQ	10.0000000000000000
L_15:
	DQ	0.1000000000000000


SECTION _TEXT
[EXTERN	__fpow]

SECTION _DATA
[EXTERN	__ctype]
