home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / ERRC.ASM < prev    next >
Assembly Source File  |  1993-08-16  |  2KB  |  125 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Runtime Library                    *
  5. ; *    Error Check Routines                *
  6. ; *                            *
  7. ; *    Copyright (C) 1988,90 Borland International    *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    ERRC
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    InOutRes:WORD
  20.  
  21.     IF NOT WindowsVersion AND NOT DPMIVersion
  22.     EXTRN    StackLimit:WORD
  23.     ENDIF
  24.  
  25. DATA    ENDS
  26.  
  27. CODE    SEGMENT    BYTE PUBLIC
  28.  
  29.     ASSUME    CS:CODE,DS:DATA
  30.  
  31. ; Externals
  32.  
  33.     EXTRN    HaltError:NEAR
  34.  
  35. ; Publics
  36.  
  37.     PUBLIC    GetIORes,InOutCheck,RangeCheck,StackCheck
  38.     PUBLIC    Overflow,RangeError
  39.  
  40. ; IOResult standard function. May modify only AX.
  41.  
  42. GetIORes:
  43.  
  44.     XOR    AX,AX
  45.     XCHG    AX,InOutRes
  46.     RETF
  47.  
  48. ; Check I/O result. Called after any I/O standard routine in
  49. ; the {$I+} state. May modify no registers.
  50.  
  51. InOutCheck:
  52.  
  53.     CMP    InOutRes,0
  54.     JNE    @@1
  55.     RETF
  56. @@1:    MOV    AX,InOutRes
  57.     JMP    HaltError
  58.  
  59. ; Check range of integer value. Called to validate integer values
  60. ; in the {$R+} state. DX:AX contains value, and DI contains pointer
  61. ; to range data in callers code segment. May modify SI, DI, and ES.
  62.  
  63. RangeCheck:
  64.  
  65.     MOV    SI,SP
  66.     MOV    ES,SS:[SI+2]
  67.     CMP    DX,ES:[DI+2]
  68.     JG    @@1
  69.     JL    RangeError
  70.     CMP    AX,ES:[DI]
  71.     JB    RangeError
  72. @@1:    CMP    DX,ES:[DI+6]
  73.     JL    @@2
  74.     JG    RangeError
  75.     CMP    AX,ES:[DI+4]
  76.     JA    RangeError
  77. @@2:    RETF
  78.  
  79. ; Range check error
  80.  
  81. RangeError:
  82.  
  83.     MOV    AX,201
  84.     JMP    HaltError
  85.  
  86. ; Overflow error
  87.  
  88. Overflow:
  89.  
  90.     MOV    AX,215
  91.     JMP    HaltError
  92.  
  93. ; Check for stack overflow. Called on entry to any procedure or
  94. ; function compiled in the {$S+} state. AX contains number of
  95. ; bytes to allocate. May modify only AX.
  96.  
  97. StackCheck:
  98.  
  99.     IF WindowsVersion
  100.     ADD    AX,1024
  101.     ELSE
  102.     ADD    AX,512
  103.     ENDIF
  104.     JC    @@2
  105.     SUB    AX,SP
  106.     JAE    @@2
  107.     NEG    AX
  108.     IF WindowsVersion OR DPMIVersion
  109.     CMP    AX,SS:pStackTop
  110.     JB    @@2
  111.     CMP    AX,SS:pStackMin
  112.     JAE    @@1
  113.     MOV    SS:pStackMin,AX
  114.     ELSE
  115.     CMP    AX,StackLimit
  116.     JB    @@2
  117.     ENDIF
  118. @@1:    RETF
  119. @@2:    MOV    AX,202
  120.     JMP    HaltError
  121.  
  122. CODE    ENDS
  123.  
  124.     END
  125.