GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


archive:computers:winthere

_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



/home/gen.uk/domains/wiki.gen.uk/public_html/data/pages/archive/computers/winthere.txt · Last modified: 2001/11/08 10:19 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki