home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 April
/
Chip_1997-04_cd.bin
/
prezent
/
cb
/
data.z
/
HALT.ASM
< prev
next >
Wrap
Assembly Source File
|
1997-01-16
|
4KB
|
180 lines
; *******************************************************
; * *
; * Delphi Runtime Library *
; * *
; * Copyright (c) 1996 Borland International *
; * *
; *******************************************************
INCLUDE SE.ASM
INCLUDE FILEIO.ASM
.386
.MODEL FLAT
EXTRN ExitProcess:NEAR, ExitProc:DWORD, ErrorAddr:DWORD, _Close:NEAR
EXTRN _Write0CString:NEAR, _WriteLn:NEAR, MessageBoxA:NEAR
EXTRN UninitAllocator:NEAR, UnsetExceptionHandler:NEAR
EXTRN DLLSaveEBX:DWORD, DLLSaveEBP:DWORD, DLLSaveESI:DWORD
EXTRN DLLSaveEDI:DWORD, DLLInitState:BYTE, IsLibrary:BYTE, IsConsole:BYTE
EXTRN ExitCode:DWORD
EXTRN Input, Output, TextStart
PUBLIC _Halt, _Halt0, _RunError, _Run0Error
.DATA
runErrMsg DB 'Runtime error at 00000000',0
; columns: 0123456789012345678901234567890
errCaption DB 'Error',0
.CODE
; PROCEDURE Terminate( exitCode: Longint );
Terminate PROC
; -> EAX Exitcode
MOV ExitCode,EAX
CMP IsLibrary,0
JE @@DoExitProcs
CMP DLLInitState,1
JB @@ProgExit
JE @@DoExitProcs
OR EAX,EAX
JE @@LibExit
@@DoExitProcs:
MOV EAX,ExitProc ;Run exit procedures
OR EAX,EAX
JE @@CheckError
XOR EDX,EDX
MOV ExitProc,EDX
CALL EAX
JMP @@DoExitProcs
@@CheckError:
CMP ErrorAddr,0
JE @@CloseInOut
MOV EAX,ExitCode
MOV EBX,offset runErrMsg + 16
MOV ECX,10
@@digLoop:
XOR EDX,EDX
DIV ECX
ADD DL,'0'
MOV [EBX],DL
DEC EBX
TEST EAX,EAX
JNZ @@digLoop
MOV EBX,offset runErrMsg + 28
MOV EAX,ErrorAddr
SUB EAX,offset TextStart
@@hdigLoop:
MOV EDX,EAX
AND EDX,0FH
MOV DL,dig[EDX]
MOV [EBX],DL
DEC EBX
SHR EAX,4
JNE @@hdigLoop
CMP IsConsole,0
JNE @@IsConsole
PUSH 0
PUSH offset errCaption
PUSH offset runErrMsg
PUSH 0
CALL MessageBoxA
JMP SHORT @@CloseInOut
@@IsConsole:
MOV EAX,OFFSET Output
MOV EDX,OFFSET runErrMsg
CALL _Write0CString
CALL _WriteLn
@@CloseInOut:
MOV EAX,OFFSET Input
CALL _Close
MOV EAX,OFFSET Output
CALL _Close
CALL UninitAllocator
CMP DLLInitState,0
JNE @@LibExit
CALL UnsetExceptionHandler
@@ProgExit:
PUSH ExitCode
CALL ExitProcess
@@LibExit:
CALL UnsetExceptionHandler
MOV DLLInitState,0
MOV EAX,ExitCode ; Return True if ExitCode = 0
NEG EAX
SBB EAX,EAX
INC EAX
MOV EDI,DLLSaveEDI
MOV ESI,DLLSaveESI
MOV EBX,DLLSaveEBX
MOV EBP,DLLSaveEBP
LEAVE
RET 12
dig DB '0123456789ABCDEF'
Terminate ENDP
; PROCEDURE _Halt0;
_Halt0 PROC
XOR EAX,EAX
JMP _Halt
_Halt0 ENDP
; PROCEDURE _Halt( exitCode: Longint );
_Halt PROC
XOR EDX,EDX
MOV ErrorAddr,EDX
JMP Terminate
_Halt ENDP
; PROCEDURE _Run0Error;
_Run0Error PROC
XOR EAX,EAX
JMP _RunError
_Run0Error ENDP
; PROCEDURE _RunError( ErrorCode: Longint );
_RunError PROC
; -> EAX ErrorCode
POP ErrorAddr
JMP Terminate
_RunError ENDP
END