_WINTHERE_ by Ben Myers
[LISTING ONE]
page 58,132 title WINTHERE, A program to test for the presence of Windows 3.0 subttl (C)Copyright 1990 Spirit of Performance, Inc.
; All Rights Reserved.
.list
; You may use any portion of this program for any purpose whatsoever, but ; you must include the above copyright in any program into which portions of ; this program are incorporated. ; Use Microsoft MASM 5.1 or later and Borland TLINK to build WINTHERE.COM. ; masm %1,%1.obj; ; tlink /x /t %1.obj,%1.com ; You may also use LINK and EXE2BIN to build WINTHERE.COM. MASM local ; reference operators @f, @b, and @@ are not handled correctly by Borland TASM.
; Equates used in this program Multiplexor equ 2Fh ; DOS multiplexor interrupt KbdIO equ 16h ; BIOS Keyboard interrupt DOS equ 21h ; DOS function call interrupt Terminate equ 4Ch ; DOS terminate function PrintString equ 09h ; DOS print string function CR equ 0dh ; Carriage Return. LF equ 0ah ; Line Feed.
; Simple macro to display a text string with the DOS print string function Display macro message
local amsg,around
mov dx,offset amsg ; Load offset of message
mov ah,PrintString ; DOS function code
int DOS
jmp short around ; jump around message text
amsg:
.errb <message> ; generate assembler error if no message irp y,<message> ; repeat for each of y args in message list db y endm db '$' ; terminate message with '$' as required
around:
endm
cseg segment public 'code'
assume cs:cseg
org 100h
Begin:
Display <"WINTHERE - (C)Copyright 1990 Spirit of Performance, Inc.",CR,LF>
; See if being executed from Windows 3.0 in enhanced mode.
mov ax,1600h ; Enhanced Windows multiplex signature. int Multiplexor test al,7fh ; Windows 386? jnz Win_Enhanced ; Yes.
; See if being executed from Windows 3.0 in real or standard mode.
mov ax,4680h ; Multiplex signature... int Multiplexor ; apparently when Win3 is not enhanced. or ax,ax ; Windows 3.0 /r or /s? jz @f ; Yes. jmp Not_Enhanced_Win ; No.
@@: Display <"WINTHERE has been run from Windows real or standard mode.",CR,LF>
jmp WrapUp
Win_Enhanced: Display <"WINTHERE has been run from within Windows in enhanced mode.",CR,LF> WrapUp:
Display <"Press any key to continue. . .",CR,LF> xor ah,ah ; Read a keystroke. int KbdIO or ah,ah ; Extended scan code? jnz @f ; No. int KbdIO ; Read second half of extended character.
@@:
mov ah,Terminate ; Quit. mov al,1 ; DOS exit code 1 to indicate error. int DOS
Not_Enhanced_Win:
Display <"WINTHERE has not been run from within MS Windows.",CR,LF> mov ah,Terminate ; Quit. xor al,al ; Exit code 0, no error. int DOS
; The interrupt mux call with ax=4680h is the one that Microsoft refuses to ; acknowledge, but it sure is there every time Windows is run in real or ; standard mode, and the mux interrupt vector points dead square in the middle ; of the Windows kernel, which then chains the mux interrupt elsewhere. cseg ends
end Begin