home *** CD-ROM | disk | FTP | other *** search
-
- ; *******************************************************
- ; * *
- ; * 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
-