home *** CD-ROM | disk | FTP | other *** search
-
- ; *******************************************************
- ; * *
- ; * Turbo Pascal Run-time Library *
- ; * Windows Application Main Module *
- ; * *
- ; * Copyright (c) 1988,92 Borland International *
- ; * *
- ; *******************************************************
-
- TITLE WINI
-
- INCLUDE SE.ASM
-
- DATA SEGMENT WORD PUBLIC
-
- ; Externals
-
- EXTRN ExitProc:DWORD,ExitCode:WORD,ErrorAddr:DWORD
- EXTRN PrefixSeg:WORD,InOutRes:WORD,HPrevInst:WORD
- EXTRN HInstance:WORD,CmdShow:WORD,Input:BYTE
- EXTRN Output:BYTE
-
- DATA ENDS
-
- ; Windows entry points
-
- EXTRN WaitEvent:FAR,InitApp:FAR,MessageBox:FAR
- EXTRN _wsprintf:FAR
-
- CODE SEGMENT BYTE PUBLIC
-
- ASSUME CS:CODE,DS:DATA
-
- ; Externals
-
- EXTRN AssignText:NEAR,ResetText:NEAR,RewriteText:NEAR
- EXTRN CloseText:NEAR
-
- ; Publics
-
- PUBLIC InitTurbo,HaltTurbo,HaltError,Terminate
-
- ; Initialize runtime library. Every program starts with a call
- ; to InitTask followed by a call to this routine.
-
- InitTurbo:
-
- ENTRY WINFAR
- OR AX,AX ;Zero if InitTask failed
- JE InitError
- MOV PrefixSeg,ES ;Save InitTask return values
- MOV HPrevInst,SI
- MOV HInstance,DI
- MOV CmdShow,DX
- XOR AX,AX ;Clear event that started task
- PUSH AX
- CALL WaitEvent
- PUSH HInstance ;Initialize application
- CALL InitApp
- OR AX,AX ;Zero if InitApp failed
- JE InitError
- MOV AX,OFFSET Input ;Assign/Reset Input file
- PUSH DS
- PUSH AX
- PUSH DS
- PUSH AX
- MOV AX,OFFSET ZeroString
- PUSH CS
- PUSH AX
- PUSH CS
- CALL AssignText
- PUSH CS
- CALL ResetText
- MOV AX,OFFSET Output ;Assign/Rewrite Output file
- PUSH DS
- PUSH AX
- PUSH DS
- PUSH AX
- MOV AX,OFFSET ZeroString
- PUSH CS
- PUSH AX
- PUSH CS
- CALL AssignText
- PUSH CS
- CALL RewriteText
- EXIT ;Back to main program
-
- ; Here in case initialization fails
-
- InitError:
-
- MOV AX,dosExit*256+0FFH
- INT DOS
-
- ; RunError standard procedure
-
- HaltError:
-
- DB 0B9H ;MOV CX,immed16
-
- ; Halt standard procedure
-
- HaltTurbo:
-
- XOR CX,CX
- MOV BX,CX
-
- ; Terminate program and return to Windows
- ; In AX = Exit code
- ; CX = Non-zero if error
-
- Terminate:
-
- ENTRY WINFAR
- PUSH SS ;Reset DS
- POP DS
- JCXZ @@1
- MOV CX,[BP+2]
- MOV BX,[BP+4]
- @@1: MOV ExitCode,AX ;Save exit code
- MOV ErrorAddr.ofs,CX ;Save error address
- MOV ErrorAddr.seg,BX
- @@2: LES BX,ExitProc ;Call exit procedures
- MOV AX,ES
- OR AX,BX
- JE @@3
- XOR AX,AX
- MOV ExitProc.ofs,AX
- MOV ExitProc.seg,AX
- MOV InOutRes,AX
- MOV AX,OFFSET @@2
- PUSH CS
- PUSH AX
- PUSH ES
- PUSH BX
- RETF
- @@3: MOV AX,OFFSET Input ;Close Input file
- PUSH DS
- PUSH AX
- PUSH CS
- CALL CloseText
- MOV AX,OFFSET Output ;Close Output file
- PUSH DS
- PUSH AX
- PUSH CS
- CALL CloseText
- MOV AX,ErrorAddr.ofs
- MOV DX,ErrorAddr.seg
- MOV CX,AX ;Runtime error?
- OR CX,DX
- JE @@4 ;No, @@4
- SUB SP,64
- MOV SI,SP
- PUSH AX ;arguments
- PUSH DX
- PUSH ExitCode
- MOV AX,OFFSET CS:ErrorStr
- PUSH CS ;lpFormat
- PUSH AX
- PUSH SS ;lpOutput
- PUSH SI
- CALL _wsprintf
- MOV SP,SI
- XOR AX,AX
- PUSH AX ;hWndParent
- PUSH SS ;lpText
- PUSH SI
- PUSH AX ;lpCaption
- PUSH AX
- MOV AX,1010H ;MB_OK+MB_ICONHAND+MB_SYSTEMMODAL
- PUSH AX ;wType
- CALL MessageBox
- ADD SP,64
- @@4: MOV AX,ExitCode ;Exit to Windows
- MOV AH,dosExit
- INT DOS
- EXIT
-
- ; Runtime error format string
-
- ErrorStr DB 'Runtime error %d at %04X:%04X.'
-
- ; Empty string
-
- ZeroString DB 0
-
- ; Copyright notice
-
- Copyright DB 'Portions Copyright (c) 1983,90 Borland'
-
- CODE ENDS
-
- END
-