home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
wunderki.zip
/
ERRC.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-08-16
|
2KB
|
125 lines
; *******************************************************
; * *
; * Turbo Pascal Runtime Library *
; * Error Check Routines *
; * *
; * Copyright (C) 1988,90 Borland International *
; * *
; *******************************************************
TITLE ERRC
INCLUDE SE.ASM
DATA SEGMENT WORD PUBLIC
; Externals
EXTRN InOutRes:WORD
IF NOT WindowsVersion AND NOT DPMIVersion
EXTRN StackLimit:WORD
ENDIF
DATA ENDS
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE,DS:DATA
; Externals
EXTRN HaltError:NEAR
; Publics
PUBLIC GetIORes,InOutCheck,RangeCheck,StackCheck
PUBLIC Overflow,RangeError
; IOResult standard function. May modify only AX.
GetIORes:
XOR AX,AX
XCHG AX,InOutRes
RETF
; Check I/O result. Called after any I/O standard routine in
; the {$I+} state. May modify no registers.
InOutCheck:
CMP InOutRes,0
JNE @@1
RETF
@@1: MOV AX,InOutRes
JMP HaltError
; Check range of integer value. Called to validate integer values
; in the {$R+} state. DX:AX contains value, and DI contains pointer
; to range data in callers code segment. May modify SI, DI, and ES.
RangeCheck:
MOV SI,SP
MOV ES,SS:[SI+2]
CMP DX,ES:[DI+2]
JG @@1
JL RangeError
CMP AX,ES:[DI]
JB RangeError
@@1: CMP DX,ES:[DI+6]
JL @@2
JG RangeError
CMP AX,ES:[DI+4]
JA RangeError
@@2: RETF
; Range check error
RangeError:
MOV AX,201
JMP HaltError
; Overflow error
Overflow:
MOV AX,215
JMP HaltError
; Check for stack overflow. Called on entry to any procedure or
; function compiled in the {$S+} state. AX contains number of
; bytes to allocate. May modify only AX.
StackCheck:
IF WindowsVersion
ADD AX,1024
ELSE
ADD AX,512
ENDIF
JC @@2
SUB AX,SP
JAE @@2
NEG AX
IF WindowsVersion OR DPMIVersion
CMP AX,SS:pStackTop
JB @@2
CMP AX,SS:pStackMin
JAE @@1
MOV SS:pStackMin,AX
ELSE
CMP AX,StackLimit
JB @@2
ENDIF
@@1: RETF
@@2: MOV AX,202
JMP HaltError
CODE ENDS
END