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

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