Please consider a donation to the Higher Intellect project. See or the Donate to Higher Intellect page for more info.


From Higher Intellect Vintage Wiki
Jump to navigation Jump to search
by Ben Myers


	   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.
; 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,
; 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
	 .errb    <message>     ; generate assembler error if no message
	 irp      y,<message>   ; repeat for each of y args in message list
	 db       y
	 db       '$'           ; terminate message with '$' as required
cseg      segment public 'code'
	  assume cs:cseg

	  org    100h
    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

 Display <"WINTHERE has been run from within Windows in enhanced mode.",CR,LF>
	  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
	  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