The WIN.INI [Compatibility] Section

Article translations Article translations
Article ID: 82860
3.10 3.11 WINDOWS kbenv
Expand all | Collapse all

On This Page


This article discusses the Microsoft Windows version 3.1 WIN.INI [Compatibility] section.

More information

Compatibility bits are defined in the [Compatibility] section of the WIN.INI file for the following applications:

  • Microsoft Publisher
  • Microsoft Money
  • Microsoft Works
  • WordPerfect
  • Lotus Freelance
  • CC Mail
  • Microsoft Visual Basic
  • Ami Pro
  • Pixie
  • ObjectVision
  • Cricket Presents
  • Just Write
  • ExploreNet
  • Aporia
  • Packrat
  • Microcourier
  • Guide
  • Microsoft Excel
  • Ascend
  • MGX Draw
  • AccPack
  • Charisma
  • Persuasion
  • Ingress
  • Lotus Notes
  • Microsoft Draw
  • Turbo Tax
When an application loads under Windows 3.1, KERNEL.EXE checks to see if the application was compiled exclusively for Windows 3.1. If the application was compiled for Windows 3.0, and will therefore run under Windows 3.0 or 3.1, KERNEL.EXE checks the module name and determines if any bits are defined for that name in the [Compatibility] section of the WIN.INI file.

The following is a detailed explanation of compatibility bits. The symbolic name is defined in WINDOWS.H. The problem, listed for each application, will be fixed if the compatibility bit is defined. If these switches are in the [Compatibility] section of the WIN.INI file then these problems will not occur. The Windows 3.1 Setup program automatically inserts these switches into the WIN.INI, regardless of whether or not that application is on the machine.

The symbolic names are internal only, they are not in the WINDOWS.H that ships with the Software Development Kit (SDK).

Bit: 1

Meaning: Ignore NODISCARD flag if passed to GlobalAlloc(). C 6.x
         Runtime install library was allocating global memory
         improperly by incorrectly specifying the GMEM_NODISCARD bit.
      WIN.INI Line: notshell=0x0001
      Problem: Setup for MS apps. does not work on 1M 286 machine.
      WIN.INI Line: notshell=0x0001
      Problem: Setup for MS apps. does not work on 1M 286 machine.
      WIN.INI Line: notshell=0x0001
      Problem: Setup for MS apps. does not work on 1M 286 machine.

Bit: 2

Meaning: Separate text band from graphics band. Forces separate band
         for text, disallowing 3.1 optimization where Text and
         Graphics are printed in the same band. Word Perfect was
         assuming text had to go in second band.
      WIN.INI Line: WPWINFIL=0x0006
      Problem: Can't print graphics in landscape mode. The
               compatibility switch doesn't completely fix the
               problem, just fixes it for certain memory
      WIN.INI Line: rem=0x8022
      Problem: Freelance couldn't print presentation (.pre) files.

Bit: 4

Meaning: One graphics band only. Allows only one Landscape graphics
         band. Take as much memory as possible for this band. What
         doesn't fit in that band doesn't print.
      WIN.INI Line: WPWINFIL=0x0006
      Problem: Can't print graphics in landscape mode. The
               compatibility switch doesn't completely fix the
               problem, just fixes it for certain memory

Bit: 8

Meaning: Ignore topmost windows for GetWindow(HWND,GW_HWNDFIRST)
      WIN.INI Line: ccmail=0x0008
      Problem: CCMail would GP fault when running any Windows applet
               from CCMail because it assumed the applet it starts
               will be at the top of the window list when winexec
               returns. Because of the addition of TOPMOST windows in
               Win 3.1, this isn't the case.  The compatibility bit
               fixes this so GetWindow doesn't return a topmost

Bit: 10

Meaning: Set the DEVICE_FONTTYPE bit in the FontType for TT fonts
         returned by EnumFonts().
   Ami Pro
      WIN.INI Line: Amipro=0x0010
      Problem: Font mapping problems, described below.
      WIN.INI Line: win2wrs=0x1210
      Problem: WordPerfect was assuming TT fonts enumerated by the
               printer would have the device bit set. TT fonts are not
               device fonts, so this bit wasn't set. There were
               various font mapping problems, such as TNR appearing in
               Script or Symbol.

Bit: 20

Meaning: Manually break graphics output into more than one band when
      WIN.INI Line: Rem=0x08022
      Problem: Freelance wouldn't print graphics when there was enough
               memory and unidrv used only one band for printing. If
               the first band was the entire page, it didn't issue any
               graphics calls, thinking it was the text only band.
               This forces unidrv to use multiple bands.

Bit: 40

Meaning: SetWindowPos() must send a WM_NCPAINT message to all
         children, disallowing the 3.1 optimization where this message
         is only sent to windows that must be redrawn.
      WIN.INI Line: pixie=0x0040
      Problem: File window overlaps the toolbox and doesn't repaint
               when a new file is opened.  Pixie used the receipt of
               WM_NCPAINT messages to determine that they may need to
               reposition themselves at the top of the list.  Win 3.0
               used to send the messages to windows even when they
               didn't need to be sent; in particular if the window was
               within the bounding rect of any update region involved
               in a window management operation.
      WIN.INI Line: Vision=0x0040
      Problem: Repaint problems with dialog boxes left on the screen
               after or operations.
   Cricket Presents
      WIN.INI Line: cp=0x0040
      Problem: Tool window is not available when opening the app.

Bit: 80

Meaning: Strings that are passed to Edit Controls by WM_SETTEXT are
         forced to upper case. Just Write was expecting this
         behavior, which was a bug in 3.0.
   Just Write
      WIN.INI Line: JW=0x42080
      Problem: Just Write wouldn't change the extension in the
      dialog when opening a file of a different
               format. Just Write calls SetDlgItemText to set the
               default extension in edit controls during WM_INITDIALOG
               processing. SetDlgItemText ultimately calls text
               insert routine which had a bug in 3.0 where it
               converted the case of the text passed in dependent on
               edit control style. Thus, under 3.0, SetDlgItemText
               was (wrongly) modifying the string passed in. The app
               has worked around the bug in 3.0 and is now failing in
               3.1 since the bug has been fixed. The compatibility
               bit reverts to 3.0 behavior.

Bit: 100

Meaning: Add 4 to the extra bytes (CBWNDEXTRA) in the window instance
         and class instance structures. In Windows 3.0, even if you
         didn't allocate extra window/class words, you could still
         access them and corrupt Windows internally. In Windows 3.1,
         you are prevented from accessing extra words you didn't allocate
         so that apps won't corrupt windows. This switch forces
         extra words for all classes/windows created by the given
   Compton's MM Ency
      WIN.INI Line: TME=0x0100
      Problem: Crashes choosing atlas. Caused by not initializing the
               WNDCLASS.cbWndExtra field.
      WIN.INI Line: netset2=0x0100
      Problem: Application error selecting update in "Input Form"
               window. Caused by the app specifying 0 extra bytes
               when creating the window class.
   Aporia 1.4
      WIN.INI Line: aporia=0x0100
      Problem: Aporia icons don't appear on the desktop. Hangs the
               system. App says it wants 1 extra byte in the
               RegisterClass, then does a SetWindowWord (2 bytes),
               then GetWindowLong (4 Bytes).

Bit: 200

Meaning: Don't enumerate Duplicate bit map fonts for TT fonts. Times
         New Roman was displayed and printed as a vector font. We
         install bit map fonts for Arial and Times New Roman at sizes
         8,10 (EGA resolution). When we enumerate fonts for face names
         Arial and Times New Roman, we would enumerate the sizes
         available in the bit map fonts and one size for the
         corresponding true type font. This confused the font mapper
         in WordPerfect. It would somehow get confused into believing
         that a TNR font was available for only the two bit map sizes
         and map a request for a larger size to a Roman vector font.
    Word Perfect
      WIN.INI Line: Win2wrs=0x01210
      Problem: Some fonts displayed as vector fonts. GDI will not
               enumerate raster fonts which have the same face or
               family name as a TT font if TT is enabled and the
               compatibility bit is set.
    Visual Basic
       WIN.INI Line: vb=0x0200
       Problem: Reports duplicate font sizes.

Bit: 800

Meaning: Don't check hardware handshaking on SetCommState(). Do not
         check hardware handshaking (CTS and DSR) on SetCommState().
         (Reverts to 30 behavior.) Packrat could not Dial. It only
         checked for DSR, but this is not set until carrier detect. A
         bug existed in win30 where SetCommState never checked DSR and
         CTS. If a serial printer was off-line, data would be sent to
         the COM port anyway, causing lost data.
      WIN.INI Line: packrat=0x0800
      Problem: Packrat didn't dial using modem on COM2.
      WIN.INI Line: mcourier=0x800
      Problem: Couldn't connect to modem using COM2.

Bit: 1000

Meaning: Enumerates TmsRmn and Helv. Some apps are broken because they
         relied on 3.0 fonts Helv and Tms Rmn by name. Font
         Substitution covers much of these problems but we cannot
         legally enumerate Helv and Tms Rmn for future apps, so it was
         dropped. We still have the exact same fonts, but now under
         the names MS Sans Serif and MS Serif, and will enumerate them
         as Helv and Tms Rmn when this bit is set. (We are allowed to
         do this for backwards compatibility.)
    Spinnaker +
      WIN.INI Line: plus=0x01000
      Problem: Text alignment and spacing problems in buttons and
               titles. Fix only works if Smallfonts come after serif
               and sans serif entries. Setup does this automatically.
    Milestones, etc.
      WIN.INI Line: milesv3=0x1000
      Problem: Text is unreadable when the app is started. App does
               its own font mapping and gets confused when it can't
               find Tms Rmn.
      WIN.INI Line: guide=0x1000
      Problem: Text problems.
      WIN.INI Line: Excel=0x1000
      Problem: Can't get past point where you have to enter a point
               size in the tutorial.
      WIN.INI Line: win2wwrs=0x1210
      Problem: Uses a vector font for TmsRmn.

Bit: 2000

Meaning: Turns off DEVICE_FONTTYPE. Some apps fail to enumerate more
         that one size of true type fonts because they interpret the
         DEVICE_FONTTYPE flag incorrectly. They assume the font must
         be device resident and disregard the case where the font is
         downloaded (as TT can be).  Therefore, when TT is correctly
         enumerated with the device bit set, the apps check the device
         capabilities to see if the printer can scale fonts. If the
         device cannot, the app assumes one size of for the current
         font. This problem is not seen on postscript printers which
         can download and scale fonts, nor on dot matrix printers
         which cannot download fonts. This Compatibility bit simply
         checks all the above conditions and selectively turns the
         DEVICE_FONTTYPE off.
    Pagemaker 4.0
      WIN.INI Line: pm4=0x2000
      Problem: Not all point sizes listed for some printers.
    Designer 3.1
      WIN.INI Line: designer=0x2000
      Problem: Font size reverts to 6 point when selecting a TT font
               in the font dialog.
    Ascend 3.1
      WIN.INI Line: planner=0x2000
      Problem: TT fonts only allow one point size.
    MGXDraw 3.0
      WIN.INI Line: draw=0x2000
      Problem: Shows no font sizes for TT fonts.
      WIN.INI Line: winsim=0x2000
      Problem: Lists only one point size for TT fonts.
      WIN.INI Line: charisma=0x2000
      Problem: Not all point sizes listed for some printers.
      WIN.INI Line: pr2=0x2000
      Problem: Lists only one point size for TT fonts.
    Just Write
      WIN.INI Line: jw=0x42080
      Problem: Lists only one or two point sizes for TT fonts.

Bit: 4000

Meaning:  This flag affects the way window invalidation works for non-
          WS_CLIPSIBLINGS parent windows and their children (e.g.,
          dialog boxes and dialog controls). Normally, if two
          children of a non-WS_CLIPSIBLING parent overlap, and an area
          that contains both of those windows is invalidated (either
          by a call to InvalidateRect or through window
          rearrangement), both of the windows will get invalidated,
          even if one or both is WS_CLIPSIBLINGS. With
          GACF_SUBTRACTCLIPSIBS, any sibling window underneath a
          WS_CLIPSIBLINGS window will not be invalidated in the part
          of the window that is beneath the WS_CLIPSIBLINGS window.
          This situation arises most commonly when windows that are
          supposed to appear overlapped don't seem to overlap
          properly. Applications that implement drop down combo boxes
          as child windows of dialog boxes will exhibit this problem
          (e.g., Lotus Notes 2.1 drive drop downs). It's often hard to
          tell whether a drop down is implemented as a top-level
          window (e.g., the Windows system combo boxes) or as a child
          window -- if there seem to be overlapping problems, then
          GACF_SUBTRACTCLIPSIBS could be the solution.
    Lotus Notes 2.0 & 1
      WIN.INI Line: _BNOTES=0x24000
      Problem: Pull down drive list box pops down behind a list box
               which is already on the screen.
      WIN.INI Lines: wagl=0x4000
      Problem: Overlapping child controls.

Bit: 8000

      WIN.INI Line: rem=0x8022
      Problem: Freelance wouldn't print TT unless print TT as graphics
               was selected.

Bit: 10000

Symbolic name: GACF_NOHRGN1
Meaning:  This bit affects applications that depend on a bug in the
          3.0 GetUpdateRect() function. Under 3.0, GetUpdateRect
          would not always return the rectangle in logical DC
          coordinates: if the entire window was invalid, the rectangle
          was sometimes returned in window coordinates. This bug was
          fixed for 3.0 and 3.1 apps in Windows 3.1: coordinates are
          ALWAYS returned in logical coordinates. This bit re-
          introduces the bug in GetUpdateRect(), for those
          applications that depend on this behavior.
      WIN.INI Line: ED=0x00010000
      Problem: Canvas not redrawn properly opening specific MSDraw
               objects in Winword.

Bit: 20000

Meaning: 3.1 optimized WM_NCCALCSIZE if a window was just moving,
         where 3.0 always sent it. This bit causes it to be sent
         always, as in 3.0.
    Lotus Notes
      WIN.INI Line: _BNOTES=0x24000
      Problem: Navigator bar of window fails to redraw when the window
               is moved across the desktop.

Bit: 40000

Meaning: Passes double-clicks on a menu bar on to the app. With this
         bit set, if the user double clicks on the menu bar when a
         menu is visible, we end processing of the menu and pass the
         double click message on to the application. This allows Just
         Write to detect double click on the system menu of a
         maximized MDI child.    The normal (and expected) behavior is
         for Windows to detect the double click on a sys menu of a
         maximized child and send the app a WM_SYSCOMMAND SC_CLOSE
         message which is what happens with a non-maximized MDI child
    Just Write
      WIN.INI Line: JW=0x00042080
      Problem: Sub-editors (such as footer and header editors)
               couldn't be closed by double-clicking the system menu.

Bit: 80000

Symbolic name: GACF_30AVGWIDTH
Meaning: Changed the way we calculate avg width, this fixes it for
         postscript. Scale all fonts by 7/8. This flag has been
         added for TurboTax for printing with pscript driver. Turbo
         Tax has hard coded average width it uses for selecting fonts.
         Since we changed the way we calculate avg width to match what
         is in TT, Turbo Tax is broken.
      WIN.INI Line: turbotax=0x80000
      Problem: 1040 tax forms wouldn't print correctly.
If a third party vendor fixes the problems in their application, they can recompile it so that it requires Windows 3.1; the compatibility bits will not be used. If the third party vedor wants their application to run under Winodws 3.0 and 3.1, then they can change the module name or edit the WIN.INI.


Article ID: 82860 - Last Review: June 17, 2014 - Revision: 2.0

Give Feedback


Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from