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

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Windows Application Main Module            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    WINI
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    ExitProc:DWORD,ExitCode:WORD,ErrorAddr:DWORD
  20.     EXTRN    PrefixSeg:WORD,InOutRes:WORD,HPrevInst:WORD
  21.     EXTRN    HInstance:WORD,CmdShow:WORD,Input:BYTE
  22.     EXTRN    Output:BYTE
  23.  
  24. DATA    ENDS
  25.  
  26. ; Windows entry points
  27.  
  28.     EXTRN    WaitEvent:FAR,InitApp:FAR,MessageBox:FAR
  29.     EXTRN    _wsprintf:FAR
  30.  
  31. CODE    SEGMENT    BYTE PUBLIC
  32.  
  33.     ASSUME    CS:CODE,DS:DATA
  34.  
  35. ; Externals
  36.  
  37.     EXTRN    AssignText:NEAR,ResetText:NEAR,RewriteText:NEAR
  38.     EXTRN    CloseText:NEAR
  39.  
  40. ; Publics
  41.  
  42.     PUBLIC    InitTurbo,HaltTurbo,HaltError,Terminate
  43.  
  44. ; Initialize runtime library. Every program starts with a call
  45. ; to InitTask followed by a call to this routine.
  46.  
  47. InitTurbo:
  48.  
  49.     ENTRY    WINFAR
  50.     OR    AX,AX            ;Zero if InitTask failed
  51.     JE    InitError
  52.     MOV    PrefixSeg,ES        ;Save InitTask return values
  53.     MOV    HPrevInst,SI
  54.     MOV    HInstance,DI
  55.     MOV    CmdShow,DX
  56.     XOR    AX,AX            ;Clear event that started task
  57.     PUSH    AX
  58.     CALL    WaitEvent
  59.     PUSH    HInstance        ;Initialize application
  60.     CALL    InitApp
  61.     OR    AX,AX            ;Zero if InitApp failed
  62.     JE    InitError
  63.     MOV    AX,OFFSET Input        ;Assign/Reset Input file
  64.     PUSH    DS
  65.     PUSH    AX
  66.     PUSH    DS
  67.     PUSH    AX
  68.     MOV    AX,OFFSET ZeroString
  69.     PUSH    CS
  70.     PUSH    AX
  71.     PUSH    CS
  72.     CALL    AssignText
  73.     PUSH    CS
  74.     CALL    ResetText
  75.     MOV    AX,OFFSET Output    ;Assign/Rewrite Output file
  76.     PUSH    DS
  77.     PUSH    AX
  78.     PUSH    DS
  79.     PUSH    AX
  80.     MOV    AX,OFFSET ZeroString
  81.     PUSH    CS
  82.     PUSH    AX
  83.     PUSH    CS
  84.     CALL    AssignText
  85.     PUSH    CS
  86.     CALL    RewriteText
  87.     EXIT                ;Back to main program
  88.  
  89. ; Here in case initialization fails
  90.  
  91. InitError:
  92.  
  93.     MOV    AX,dosExit*256+0FFH
  94.     INT    DOS
  95.  
  96. ; RunError standard procedure
  97.  
  98. HaltError:
  99.  
  100.     DB    0B9H            ;MOV CX,immed16
  101.  
  102. ; Halt standard procedure
  103.  
  104. HaltTurbo:
  105.  
  106.     XOR    CX,CX
  107.     MOV    BX,CX
  108.  
  109. ; Terminate program and return to Windows
  110. ; In    AX = Exit code
  111. ;    CX = Non-zero if error
  112.  
  113. Terminate:
  114.  
  115.     ENTRY    WINFAR
  116.     PUSH    SS            ;Reset DS
  117.     POP    DS
  118.     JCXZ    @@1
  119.     MOV    CX,[BP+2]
  120.     MOV    BX,[BP+4]
  121. @@1:    MOV    ExitCode,AX        ;Save exit code
  122.     MOV    ErrorAddr.ofs,CX    ;Save error address
  123.     MOV    ErrorAddr.seg,BX
  124. @@2:    LES    BX,ExitProc        ;Call exit procedures
  125.     MOV    AX,ES
  126.     OR    AX,BX
  127.     JE    @@3
  128.     XOR    AX,AX
  129.     MOV    ExitProc.ofs,AX
  130.     MOV    ExitProc.seg,AX
  131.     MOV    InOutRes,AX
  132.     MOV    AX,OFFSET @@2
  133.     PUSH    CS
  134.     PUSH    AX
  135.     PUSH    ES
  136.     PUSH    BX
  137.     RETF
  138. @@3:    MOV    AX,OFFSET Input        ;Close Input file
  139.     PUSH    DS
  140.     PUSH    AX
  141.     PUSH    CS
  142.     CALL    CloseText
  143.     MOV    AX,OFFSET Output    ;Close Output file
  144.     PUSH    DS
  145.     PUSH    AX
  146.     PUSH    CS
  147.     CALL    CloseText
  148.     MOV    AX,ErrorAddr.ofs
  149.     MOV    DX,ErrorAddr.seg
  150.     MOV    CX,AX            ;Runtime error?
  151.     OR    CX,DX
  152.     JE    @@4            ;No, @@4
  153.     SUB    SP,64
  154.     MOV    SI,SP
  155.     PUSH    AX            ;arguments
  156.     PUSH    DX
  157.     PUSH    ExitCode
  158.     MOV    AX,OFFSET CS:ErrorStr
  159.     PUSH    CS            ;lpFormat
  160.     PUSH    AX
  161.     PUSH    SS            ;lpOutput
  162.     PUSH    SI
  163.     CALL    _wsprintf
  164.     MOV    SP,SI
  165.     XOR    AX,AX
  166.     PUSH    AX            ;hWndParent
  167.     PUSH    SS            ;lpText
  168.     PUSH    SI
  169.     PUSH    AX            ;lpCaption
  170.     PUSH    AX
  171.     MOV    AX,1010H        ;MB_OK+MB_ICONHAND+MB_SYSTEMMODAL
  172.     PUSH    AX            ;wType
  173.     CALL    MessageBox
  174.     ADD    SP,64
  175. @@4:    MOV    AX,ExitCode        ;Exit to Windows
  176.     MOV    AH,dosExit
  177.     INT    DOS
  178.     EXIT
  179.  
  180. ; Runtime error format string
  181.  
  182. ErrorStr    DB    'Runtime error %d at %04X:%04X.'
  183.  
  184. ; Empty string
  185.  
  186. ZeroString    DB    0
  187.  
  188. ; Copyright notice
  189.  
  190. Copyright    DB    'Portions Copyright (c) 1983,90 Borland'
  191.  
  192. CODE    ENDS
  193.  
  194.     END
  195.