home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l040 / 13.ddi / RTLSYS.ZIP / WEND.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-10-28  |  2.7 KB  |  157 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Windows Termination Procedures Module        *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    WEND
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. CONST    SEGMENT    WORD PUBLIC
  16.  
  17. ; Runtime error message string
  18.  
  19. ErrorStr    DB    'Runtime error '
  20. ErrorCodeStr    DB    '000 at '
  21. ErrorAddrStr    DB    '0000:0000.',0
  22.  
  23. CONST    ENDS
  24.  
  25. DATA    SEGMENT WORD PUBLIC
  26.  
  27. ; Externals
  28.  
  29.     EXTRN    ExitProc:DWORD,ExitCode:WORD,ErrorAddr:DWORD
  30.     EXTRN    PrefixSeg:WORD,InOutRes:WORD
  31.  
  32. DATA    ENDS
  33.  
  34. DGROUP    GROUP    CONST,DATA
  35.  
  36. ; Windows entry points
  37.  
  38.     EXTRN    MessageBox:FAR
  39.  
  40. CODE    SEGMENT    BYTE PUBLIC
  41.  
  42.     ASSUME    CS:CODE,DS:DGROUP
  43.  
  44. ; Publics
  45.  
  46.     PUBLIC    HaltTurbo,HaltError,Terminate,DoExitProcs
  47.  
  48. ; RunError standard procedure
  49.  
  50. HaltError:
  51.  
  52.     POP    CX
  53.     POP    BX
  54.     JMP    SHORT Terminate
  55.  
  56. ; Halt standard procedure
  57.  
  58. HaltTurbo:
  59.  
  60.     XOR    CX,CX
  61.     XOR    BX,BX
  62.  
  63. ; Terminate program and return to Windows
  64. ; In    AX    = Exit code
  65. ;    BX:CX = Error address (or NIL)
  66.  
  67. Terminate:
  68.  
  69.     MOV    ExitCode,AX        ;Save exit code
  70.     MOV    AX,CX            ;Is error address NIL?
  71.     OR    AX,BX
  72.     JE    @@2            ;Yes, @@2
  73.     CMP    BX,0FFFFH        ;Unknown address?
  74.     JE    @@2            ;Yes, @@2
  75.     MOV    ES,BX            ;Get logical segment number
  76.     MOV    BX,WORD PTR ES:0
  77. @@2:    MOV    ErrorAddr.ofs,CX    ;Save error address
  78.     MOV    ErrorAddr.seg,BX
  79.     CMP    PrefixSeg,0        ;Is this a library?
  80.     JE    @@3            ;Yes, WEP will do exit procs
  81.     CALL    DoExitProcs        ;Execute exit procedures
  82. @@3:    MOV    AX,ErrorAddr.ofs    ;Runtime error?
  83.     OR    AX,ErrorAddr.seg
  84.     JE    @@4            ;No, @@4
  85.     MOV    CX,10
  86.     MOV    AL,ExitCode.b0
  87.     XOR    AH,AH
  88.     MOV    BX,OFFSET ErrorCodeStr+3
  89.     CALL    Num2Str
  90.     MOV    CX,16
  91.     MOV    AX,ErrorAddr.seg
  92.     MOV    BX,OFFSET ErrorAddrStr+4
  93.     CALL    Num2Str
  94.     MOV    AX,ErrorAddr.ofs
  95.     MOV    BX,OFFSET ErrorAddrStr+9
  96.     CALL    Num2Str
  97.     XOR    AX,AX
  98.     PUSH    AX            ;hWndParent
  99.     MOV    BX,OFFSET ErrorStr
  100.     PUSH    DS            ;lpText
  101.     PUSH    BX
  102.     PUSH    AX            ;lpCaption
  103.     PUSH    AX
  104.     MOV    AX,1010H        ;MB_OK+MB_ICONHAND+MB_SYSTEMMODAL
  105.     PUSH    AX            ;wType
  106.     CALL    MessageBox
  107. @@4:    MOV    AL,ExitCode.b0        ;Get exit code
  108.     MOV    AH,dosExit        ;Terminate application
  109.     INT    DOS
  110.  
  111. ; Execute exit procedures
  112.  
  113. DoExitProcs:
  114.  
  115. @@1:    LES    BX,ExitProc
  116.     MOV    AX,ES
  117.     OR    AX,BX
  118.     JE    @@2
  119.     XOR    AX,AX
  120.     MOV    ExitProc.ofs,AX
  121.     MOV    ExitProc.seg,AX
  122.     MOV    InOutRes,AX
  123.     MOV    AX,OFFSET @@1
  124.     PUSH    CS
  125.     PUSH    AX
  126.     PUSH    ES
  127.     PUSH    BX
  128.     RETF
  129. @@2:    RET
  130.  
  131. ; Convert number to string
  132. ; In    AX = Number
  133. ;    BX = Pointer to end of buffer
  134. ;    CX = Number base
  135.  
  136. Num2Str:
  137.  
  138. @@1:    XOR    DX,DX
  139.     DIV    CX
  140.     ADD    DL,'0'
  141.     CMP    DL,'0'+10
  142.     JB    @@2
  143.     ADD    DL,'A'-'0'-10
  144. @@2:    DEC    BX
  145.     MOV    [BX],DL
  146.     OR    AX,AX
  147.     JNE    @@1
  148.     RET
  149.  
  150. ; Copyright notice
  151.  
  152. Copyright    DB    'Portions Copyright (c) 1983,92 Borland'
  153.  
  154. CODE    ENDS
  155.  
  156.     END
  157.