_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 ; generate assembler error if no message irp y, ; 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