	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
;
; Line 9:	{
;
_sigill:
	PUSH	EBP
	MOV	EBP,ESP
	POP	EBP
	RET
;
; Line 12:	{
;
_sigint:
	PUSH	EBP
	MOV	EBP,ESP
	POP	EBP
	RET
;
; Line 15:	{
;
_sigfpe:
	PUSH	EBP
	MOV	EBP,ESP
	POP	EBP
	RET
;
; Line 18:	{
;
_sigsegv:
	PUSH	EBP
	MOV	EBP,ESP
	POP	EBP
	RET
;
; Line 21:	{
;
_sigterm:
	PUSH	EBP
	MOV	EBP,ESP
;
; Line 22:		exit(0);
;
	PUSH	BYTE 00H
	CALL	_exit
	POP	ECX
;
; Line 23:	}
;
	POP	EBP
	RET
;
; Line 25:	{
;
_siguser1:
	RET
;
; Line 28:	{
;
_siguser2:
	RET
;
; Line 31:	{
;
_siguser3:
	RET
;
; Line 34:	{
;
_siguser:
	RET
;
; Line 37:	{
;
_sigabort:
	PUSH	EBP
	MOV	EBP,ESP
;
; Line 38:		_abterm = 1;
;
	MOV	DWORD [__abterm],01H
;
; Line 39:		exit(1);
;
	PUSH	BYTE 01H
	CALL	_exit
	POP	ECX
;
; Line 40:	}
;
	POP	EBP
	RET
;
; Line 54:	{
;
_siginit:
	PUSH	EBX
	MOV	EBX,00H
	JMP	L_3
L_1:
;
; Line 57:			sigtab[i] = deftab[i];
;
	MOV	EAX,DWORD [EBX*4+_deftab+00H]
	MOV	DWORD [EBX*4+_sigtab+00H],EAX
;
; Line 56:		for (i=0; i < 23       ; i++)
;
L_2:
	INC	EBX
L_3:
	CMP	EBX,BYTE 017H
	JL	SHORT	L_1
L_4:
;
; Line 58:	}
;
	POP	EBX
	RET
[GLOBAL	_signal]
;
; Line 60:	{
;
_signal:
	PUSH	EBP
	MOV	EBP,ESP
	PUSH	EBX
	PUSH	ESI
	PUSH	EDI
	MOV	EBX,DWORD [EBP+08H]
	MOV	ESI,DWORD [EBP+0CH]
;
; Line 62:		if (signum >= 23       ) {
;
	CMP	EBX,BYTE 017H
	JL	SHORT	L_5
;
; Line 63:			errno = 19       ;
;
	MOV	DWORD [_errno],013H
;
; Line 64:			return ((_CatcherPTR)-1)   ;
;
	MOV	EAX,0FFFFFFFFH
	JMP	L_7
L_5:
;
; Line 66:		temp = sigtab[signum];
;
	MOV	EDI,DWORD [EBX*4+_sigtab+00H]
;
; Line 67:		if (func == ((_CatcherPTR)0)    ) 
;
	TEST	ESI,ESI
	JNE	SHORT	L_8
;
; Line 68:			sigtab[signum] = deftab[signum];
;
	MOV	EAX,DWORD [EBX*4+_deftab+00H]
	MOV	DWORD [EBX*4+_sigtab+00H],EAX
	JMP	L_9
L_8:
;
; Line 71:			sigtab[signum] = func;
;
	MOV	DWORD [EBX*4+_sigtab+00H],ESI
L_9:
;
; Line 72:		return temp;
;
	MOV	EAX,EDI
L_7:
	POP	EDI
	POP	ESI
	POP	EBX
	POP	EBP
	RET
[GLOBAL	_raise]
;
; Line 75:	{
;
_raise:
	PUSH	EBP
	MOV	EBP,ESP
	PUSH	EBX
	PUSH	ESI
	MOV	EBX,DWORD [EBP+08H]
;
; Line 76:		void (*temp)(int a) = sigtab[sig];
;
	MOV	ESI,DWORD [EBX*4+_sigtab+00H]
;
; Line 77:		if (temp == ((_CatcherPTR)-1)   )
;
	CMP	ESI,BYTE 0FFFFFFFFH
	JNE	SHORT	L_10
;
; Line 78:			return 1;
;
	MOV	EAX,01H
	JMP	L_12
L_10:
;
; Line 79:		if (temp == ((_CatcherPTR)1)    )
;
	CMP	ESI,BYTE 01H
	JNE	SHORT	L_13
;
; Line 80:			return 0;
;
	MOV	EAX,00H
	JMP	L_12
L_13:
;
; Line 81:		(*temp)(sig);
;
	PUSH	EBX
	CALL	ESI
	POP	ECX
;
; Line 82:		sigtab[sig] = deftab[sig];
;
	MOV	EAX,DWORD [EBX*4+_deftab+00H]
	MOV	DWORD [EBX*4+_sigtab+00H],EAX
;
; Line 83:		return 0;
;
	MOV	EAX,00H
L_12:
	POP	ESI
	POP	EBX
	POP	EBP
	RET

SECTION _DATA
[GLOBAL	__abterm]

__abterm	DD	00H

_deftab	DD	0FFFFFFFFH,0FFFFFFFFH,_sigint+0,0FFFFFFFFH
	DD	_sigill,0FFFFFFFFH,0FFFFFFFFH,0FFFFFFFFH
	DD	_sigfpe,0FFFFFFFFH,0FFFFFFFFH
	DD	_sigsegv,0FFFFFFFFH,0FFFFFFFFH,0FFFFFFFFH
	DD	_sigterm,_siguser1+0
	DD	_siguser2,0FFFFFFFFH,0FFFFFFFFH
	DD	_siguser3,0FFFFFFFFH
	DD	_sigabort
SECTION _BSS

_sigtab	RESB	05CH
SECTION cstartup
	DD	_siginit,149

SECTION _TEXT
[EXTERN	_exit]

SECTION _DATA
[EXTERN	_errno]
