Make Compatible

Last updated
Make Compatible
Make Compatible icon.png
MkCompat (Make Compatible).png
Make Compatible showing advanced flags
Developer(s) Microsoft
Operating system Windows 9x

Make Compatible is a program developed by Microsoft that is included with Windows 9x operating systems. It changes per-program system settings in Windows to allow Windows 3.1 programs that are tailored specifically to that platform to execute under newer versions. The name of the program image file for Make Compatible is mkcompat.exe, and it is stored in the \Windows\System directory. [1] [2]

Contents

Options

When it is invoked, one can choose the name of the Windows 3.1 application program image file using the "Choose Program" option on the "File" menu. After the program image file is chosen, Make Compatible by default displays a list of five options that can be set to alter the behaviour of Windows for that program when it is executed: [1]

An advanced options mode, selectable via the "Advanced Options" selection on the "File" menu presents a longer list of options, allowing finer control of Windows 3.1 emulation if the particular application requires it. [1]

Compatibility bits

Each of the options is recorded in a system database of so-called "compatibility bits". This is a database of 1-bit flags, one for each of the options displayed by Make Compatible. [3] [4]

This database already existed in earlier versions of Windows. In Windows 3.1, the database is stored in the [Compatibility] section of win.ini , with entries such as: [3] [4]

[Compatibility]ACAD=0x8000AMIPRO=0x04000010

Each line names an application program, and gives a hexadecimal numeric constant to associate with that program. The hexadecimal numeric constant encodes the compatibility bitflags for that particular application, that Windows applies when the application is executed. Make Compatible merely provides a graphical user interface for editing these flags in an easy way, rather than editing win.ini manually, with a text editor. It allows one to set and unset individual flags without having to know their numeric values. [3] [4]

The compatibility bitflags settable in win.ini are not documented in the WININI.WRI file that ships with Windows 3.1, or in the Microsoft Windows 3.1 Resource Kit published by Microsoft. They are listed as a simple set of defined constants (with names beginning "GACF_" for "GetAppCompatFlags"), without explanation, in the windows.h header file that is shipped with the Microsoft Windows 3.1 Device driver Development Kit. In Windows 3.1, the compatibility flags that are in effect for any given task in the kernel's Task Database are readable via the undocumented GetAppCompatFlags() function that is exported from the KERNEL module. [5]

Advanced mode flags

The flags are documented in Microsoft KnowledgeBase article #82860. They correspond to the "advanced mode" flags that are settable by Make Compatible's "Advanced Options" menu: [5]

30 average width metrics
This is bit #19 of the compatibility bits word, with hexadecimal value 0x80000, known by the symbolic name GACF_30AVGWIDTH in windows.h. This flag causes Windows to re-scale all fonts by a factor of when calculating their average character widths. The reason for this is that one particular Windows 3.0 application, TurboTax, hard-coded the values that it was using for such size calculations, which failed to work correctly with the new TrueType-compatible font average width calculation method employed by Windows 3.1. This prevented people from using TurboTax to print their income tax return forms on PostScript printers. [5]
Always send NC_Paint
This is bit #6 of the compatibility bits word, with hexadecimal value 0x40, known by the symbolic name GACF_ALWAYSSENDNCPAINT in windows.h. This flag forces any call to SetWindowPos() to cause the sending of WM_NCPAINT message to all child windows. This is the Windows 3.0 behaviour. In Windows 3.1, the behaviour was changed so that the window message is only sent to those windows that need their non-client areas to be repainted. Some Windows 3.0 applications, however, relied upon always receiving this message, to determine whether child windows needed repositioning. [5]
Don't enum device fonts
This is bit #14 of the compatibility bits word, with hexadecimal value 0x2000, known by the symbolic name GACF_ENUMTTNOTDEVICE in windows.h. This flag causes Windows 3.1 to turn the DEVICE_FONTTYPE flag off in particular circumstances when an application that is wanting to print enumerates fonts. The particular circumstances are when the target printer is not either a dot matrix printer or a PostScript printer, and the fonts are TrueType fonts that are not resident in the printer itself. In such circumstances, some applications (including PageMaker and MGXDraw) misinterpret the flag and believe the font to be device-resident. (TrueType fonts can be uploaded by Windows to printers, and need not be resident on the device itself to be usable.) They then query the printer to see what sizes of the font it supports, and when that fails (because the printer doesn't know about the font until it is uploaded), they incorrectly assume that the font cannot be resized. Setting the DEVICE_FONTTYPE flag to false in such situations prevents the applications from going wrong, and that is what this compatibility bitflag does. [5]
Don't send calcsize WM_MOVE
This is bit #17 of the compatibility bits word, with hexadecimal value 0x20000, known by the symbolic name GACF_NCCALCSIZEONMOVE in windows.h. This flag forces the WM_NCCALCSIZE message to be sent to a window that is being moved or resized. This is the Windows 3.0 behaviour. In Windows 3.1, the behaviour was changed so that the window message is only sent to those windows that were being resized. It was not sent if the window was merely moved. Some Windows 3.0 applications, however, such as Lotus Notes for example, relied upon always receiving this message. [5]
Enum Helv and Times Roman fonts
This is bit #12 of the compatibility bits word, with hexadecimal value 0x1000, known by the symbolic name GACF_ENUMHELVNTMSRMN in windows.h. This flag works around a problem with applications that refused to work properly unless fonts with the exact names "Helv" and "Tms Rmn" were listed as present on the system by the Windows font enumeration API. The names are trademarks of Linotype company for particular fonts, Helvetica and Times Roman, and since Microsoft didn't ship those Linotype fonts with Windows 3.1, it could not enumerate them as present. This flag causes Windows to enumerate the "MS Sans Serif" and "MS Serif" fonts under the names "Helv" and "Tms Rmn", for compatibility with the applications that don't work without those exact names being used. [5]
Force extra windows words
This is bit #8 of the compatibility bits word, with hexadecimal value 0x100, known by the symbolic name GACF_MOREEXTRAWNDWORDS in windows.h. This flag works around a problem with applications that assumed the existence of window words (extra items of data associated by Windows with GUI windows) when they had not in fact informed Windows that extra window words were required. Windows 3.1, unlike Windows 3.0, bounds checks all uses of extra window words, and applications that assumed that they could use more space than they had asked for would thus fail. For applications run with this flag set, Windows 3.1 silently increased the total number of words requested by the application by an extra 4 bytes. [5]
Force printer text to new band
This is bit #1 of the compatibility bits word, with hexadecimal value 0x2, known by the symbolic name GACF_FORCETEXTBAND in windows.h. This flag causes Windows 3.1 to always use two bands when printing, the first for graphics and the second for text. Normally Windows 3.1 tries to print both in a single band. But applications such as WordPerfect assumed that a second band would always exist, and would always be where the text was, as had been the case in Windows 3.0. Freelance Graphics had a similar problem. [5]
Force TT fonts to graphics band
This is bit #15 of the compatibility bits word, with hexadecimal value 0x8000, known by the symbolic name GACF_FORCETTGRAPHICS in windows.h. This flag was to work around a problem with Freelance Graphics, where it wouldn't print using TrueType fonts unless they were printed as graphics. [5]
Global hooks only called for Win16 apps
Ignore discardable segment attributes
This is bit #0 of the compatibility bits word, with hexadecimal value 0x1, known by the symbolic name GACF_IGNORENODISCARD in windows.h. This flag forces the GEM_NODISCARD flag passed to GlobalAlloc() by a program to be ignored. It worked around a bug in the run-time library supplied with Microsoft's own C compiler, Microsoft C version 6. The run-time library would erroneously set that flag in calls to GlobalAlloc(), and any application compiled with that compiler would thus exhibit the behaviour. [5]
Ignore raster fonts
This is bit #9 of the compatibility bits word, with hexadecimal value 0x200, known by the symbolic name GACF_TTIGNORERASTERDUPE in windows.h. This flag prevents fonts of the same sizes from being enumerated as both bitmap and TrueType fonts. This was because several applications, including WordPerfect and Visual Basic, were not capable of handling that particular situation correctly. [5]
Ignore topmost windows
This is bit #3 of the compatibility bits word, with hexadecimal value 0x8, known by the symbolic name GACF_IGNORETOPMOST in windows.h. This flag fixes a particular problem with cc:Mail that caused it to fail on Windows 3.1. It assumed that accessing the first window with GetWindow(HWND,GW_HWND_FIRST) would return it the window of the application that it had just started with WinExec(). But on Windows 3.1, which introduced the idea of "topmost" windows, this was no longer true. The flag caused Windows 3.1 to skip topmost windows when that particular API request was made. [5]
Module specific hack
No HRGN 1
This is bit #16 of the compatibility bits word, with hexadecimal value 0x10000, known by the symbolic name GACF_NOHRGN1 in windows.h. This flag reinstates a bug that existed in Windows 3.0 that was fixed in Windows 3.1. It did so because several applications, such as Microsoft Draw, worked around the bug themselves, and would fail to work correctly when the bug was eliminated. The bug was an error in the return value of the GetUpdateRect() function, whereby in certain situations (where the entire window was invalid) it would return the coördinates of the update rectangle in window coordinates, rather than in logical coordinates as it was supposed to. In Windows 3.1, it always returned the update rectangle in logical coordinates. The applications that worked around the bug would perform the coordinate transform themselves to work around the bug, and end up updating the wrong parts of their windows on Windows 3.1. [5]
One graphic band and use print escapes
This is bit #2 of the compatibility bits word, with hexadecimal value 0x4, known by the symbolic name GACF_ONELANDGRXBAND in windows.h. This flag causes Windows 3.1 to use a single graphics band when printing in Landscape mode, consuming as much memory as needed for that band, and discarding whatever content would not fit into the band. [5]
Subtract clip siblings
This is bit #14 of the compatibility bits word, with hexadecimal value 0x4000, known by the symbolic name GACF_SUBTRACTCLIPSIBS in windows.h. This flag causes Windows 3.1 to handle window invalidation differently for top-level windows that do not have the WS_CLIPSIBLINGS window style set, and their child windows. (In other words: It affects dialogue boxes and the controls on them.) With the flag set, Windows would not invalidate sibling child windows underneath (in the z-order) other WS_CLIPSIBLINGS child windows. The main reason for the flag was applications such as Lotus Notes 2.1, which implemented its own combo boxes as child windows, rather than as top-level windows (the system default combo box implementation). With this flag set, odd display problems with such windows would disappear. [5]
Support multiple printing bands
This is bit #5 of the compatibility bits word, with hexadecimal value 0x20, known by the symbolic name GACF_MULTIPLEBANDS in windows.h. This flag causes Windows 3.1 to always use multiple bands for printing, even when one band would be sufficient. This was to work around a problem in Freelance Graphics, which would assume that if only one band existed, and it was the entire page, it was the text band, and would not even attempt to print graphics. On Windows 3.1, the universal printer driver would sometimes be able to handle both text and graphics with a single band. By forcing the use of multiple bands, the problems that this would cause for Freelance Graphics were avoided. [5]
TT fonts are device fonts
This is bit #4 of the compatibility bits word, with hexadecimal value 0x10, known by the symbolic name GACF_CALLTTDEVICE in windows.h. This flag causes Windows 3.1 to always set the DEVICE_FONTTYPE flag on any TrueType fonts that are enumerated using the Windows EnumFont() API. This was to fix a problem with applications including AmiPro and WordPerfect, both of which assumed that all TrueType fonts available on a printer would be device-resident. [5]
Windows 3.1 palette behavior

Additional flags

Windows 3.1 defined 20 application compatibility flags. [5] Windows 95 and 98 defined a further 11 flags, not documented in the KnowledgeBase article and not assigned symbolic constant names in windows.h, which are the remainder of the options accessible via the "Advanced Options" menu in Make Compatible: [6]

Disable 16 color brush cache and 55ms timer
This is bit #29 of the compatibility bits word, with hexadecimal value 0x20000000.
Disable EMF spooling
This is bit #26 of the compatibility bits word, with hexadecimal value 0x4000000.
Disable font associations
This is bit #24 of the compatibility bits word, with hexadecimal value 0x1000000.
Don't attach input thread when journaling, SetActiveWindow == SetForeGroundWindow
This is bit #28 of the compatibility bits word, with hexadecimal value 0x10000000.
Don't Shutdown/Ignore certain faults/dequote commandline
This is bit #25 of the compatibility bits word, with hexadecimal value 0x2000000.
Enable 3.x UI features
This is bit #27 of the compatibility bits word, with hexadecimal value 0x8000000.
Force Win31 printer dev mode size
This is bit #23 of the compatibility bits word, with hexadecimal value 0x800000.
Increase stack size
This is bit #22 of the compatibility bits word, with hexadecimal value 0x400000.
Lie about device caps/no SetDIBits validation
This is bit #20 of the compatibility bits word, with hexadecimal value 0x100000.
Lie about windows version
This is bit #21 of the compatibility bits word, with hexadecimal value 0x200000.
Mirror fonts in win.ini
This is bit #30 of the compatibility bits word, with hexadecimal value 0x40000000.

Related Research Articles

PostScript (PS) is a page description language in the electronic publishing and desktop publishing business. It is a dynamically typed, concatenative programming language. It was created at Adobe Systems by John Warnock, Charles Geschke, Doug Brotz, Ed Taft and Bill Paxton from 1982 to 1984.

The Rich Text Format is a proprietary document file format with published specification developed by Microsoft Corporation from 1987 until 2008 for cross-platform document interchange with Microsoft products. Prior to 2008, Microsoft published updated specifications for RTF with major revisions of Microsoft Word and Office versions.

Windows 95 Operating system from Microsoft

Windows 95 is a consumer-oriented operating system developed by Microsoft as part of its Windows 9x family of operating systems. The first operating system in the 9x family, it is the successor to Windows 3.1x, and was released to manufacturing on August 15, 1995, and generally to retail on August 24, 1995. Windows 95 merged Microsoft's formerly separate MS-DOS and Microsoft Windows products, and featured significant improvements over its predecessor, most notably in the graphical user interface (GUI) and in its simplified "plug-and-play" features. There were also major changes made to the core components of the operating system, such as moving from a mainly cooperatively multitasked 16-bit architecture to a 32-bit preemptive multitasking architecture, at least when running only 32-bit protected mode applications.

Video Graphics Array Computer display standard and resolution

Video Graphics Array (VGA) is a video display controller and accompanying de facto graphics standard, first introduced with the IBM PS/2 line of computers in 1987, which became ubiquitous in the PC industry within three years. The term can now refer to the computer display standard, the 15-pin D-subminiature VGA connector, or the 640×480 resolution characteristic of the VGA hardware.

The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations that are often referred to by their own names ; see the versions section. Almost all Windows programs interact with the Windows API. On the Windows NT line of operating systems, a small number use the Native API.

GEM (desktop environment) Operating environment created by Digital Research, Inc.

GEM is an operating environment which was created by Digital Research (DRI) since 1984 for use with the DOS operating system on Intel 8088 and Motorola 68000 microprocessors.

Direct3D is a graphics application programming interface (API) for Microsoft Windows. Part of DirectX, Direct3D is used to render three-dimensional graphics in applications where performance is important, such as games. Direct3D uses hardware acceleration if it is available on the graphics card, allowing for hardware acceleration of the entire 3D rendering pipeline or even only partial acceleration. Direct3D exposes the advanced graphics capabilities of 3D graphics hardware, including Z-buffering, W-buffering, stencil buffering, spatial anti-aliasing, alpha blending, color blending, mipmapping, texture blending, clipping, culling, atmospheric effects, perspective-correct texture mapping, programmable HLSL shaders and effects. Integration with other DirectX technologies enables Direct3D to deliver such features as video mapping, hardware 3D rendering in 2D overlay planes, and even sprites, providing the use of 2D and 3D graphics in interactive media ties.

Parallel port Computer interface

In computing, a parallel port is a type of interface found on early computers for connecting peripherals. The name refers to the way the data is sent; parallel ports send multiple bits of data at once, as opposed to serial communication, in which bits are sent one at a time. To do this, parallel ports require multiple data lines in their cables and port connectors and tend to be larger than contemporary serial ports, which only require one data line.

Hercules Graphics Card

The Hercules Graphics Card (HGC) is a computer graphics controller made by Hercules Computer Technology, Inc. that combines IBM's text-only MDA display standard with a bitmapped graphics mode. This allows the HGC to offer both high-quality text and graphics from a single card.

The BMP file format, also known as bitmap image file, device independent bitmap (DIB) file format and bitmap, is a raster graphics image file format used to store bitmap digital images, independently of the display device, especially on Microsoft Windows and OS/2 operating systems.

Dots per inch Measure of dot density

Dots per inch is a measure of spatial printing, video or image scanner dot density, in particular the number of individual dots that can be placed in a line within the span of 1 inch (2.54 cm). Similarly, the more newly introduced dots per centimetre refers to the number of individual dots that can be placed within a line of 1 centimetre (≈ 0.393 in).

Windows 9x Series of Microsoft Windows computer operating systems

Windows 9x is a generic term referring to a series of Microsoft Windows computer operating systems produced from 1995 to 2000, which were based on the Windows 95 kernel and its underlying foundation of MS-DOS, both of which were updated in subsequent versions. The first version in the 9x series was Windows 95, which was succeeded by Windows 98 and then Windows Me, which was the third and last version of Windows on the 9x line.

CodeView is a standalone debugger created by David Norris at Microsoft in 1985 as part of its development toolset. It originally shipped with Microsoft C 4.0 and later. It also shipped with Visual Basic for MS-DOS, Microsoft BASIC PDS, and a number of other Microsoft language products. It was one of the first debuggers for MS-DOS to be full-screen oriented, rather than line-oriented.

Windows Registry Database for Microsoft Windows

The Windows Registry is a hierarchical database that stores low-level settings for the Microsoft Windows operating system and for applications that opt to use the registry. The kernel, device drivers, services, Security Accounts Manager, and user interfaces can all use the registry. The registry also allows access to counters for profiling system performance.

Unicode input Input characters using their Unicode code points

Unicode input is the insertion of a specific Unicode character on a computer by a user; it is a common way to input characters not directly supported by a physical keyboard. Unicode characters can be produced either by selecting them from a display or by typing a certain sequence of keys on a physical keyboard. In addition, a character produced by one of these methods in one web page or document can be copied into another. In contrast to ASCII's 96 element character set, Unicode encodes hundreds of thousands of graphemes (characters) from almost all of the world's written languages and many other signs and symbols besides.

Some of the new features included in Windows 7 are advancements in touch, speech and handwriting recognition, support for virtual hard disks, support for additional file formats, improved performance on multi-core processors, improved boot performance, and kernel improvements.

Windows 3.1<i>x</i> Family of operating systems made by Microsoft

Windows 3.1 is a series of 16-bit operating environments produced by Microsoft for use on personal computers, released on April 6, 1992. The series began with Windows 3.1, which was first sold during April 1992 as a successor to Windows 3.0. Subsequent versions were released between 1992 and 1993, notably Windows 3.11, until the series was superseded by the Windows 9x series starting in 1995 with Windows 95. During its lifespan, Windows 3.1 introduced several enhancements to the still MS-DOS-based platform, including improved system stability, expanded support for multimedia, TrueType fonts, and workgroup networking.

DOS Group of closely related PC-compatible operating systems

DOS is a platform-independent acronym for disk operating system which later became a common shorthand for disk-based operating systems on IBM PC compatibles. DOS primarily consists of Microsoft's MS-DOS and a rebranded version under the name IBM PC DOS, both of which were introduced in 1981. Later compatible systems from other manufacturers include DR DOS (1988), ROM-DOS (1989), PTS-DOS (1993), and FreeDOS (1998). MS-DOS dominated the IBM PC compatible market between 1981 and 1995.

VGA text mode

VGA text mode was introduced in 1987 by IBM as part of the VGA standard for its IBM PS/2 computers. Its use on IBM PC compatibles was widespread through the 1990s and persists today for some applications on modern computers. The main features of VGA text mode are colored characters and their background, blinking, various shapes of the cursor, and loadable fonts. The Linux console traditionally uses hardware VGA text modes, and the Win32 console environment has an ability to switch the screen to text mode for some text window sizes.

The implementation of emojis on different platforms took place across a three-decade period, starting in the 1990s. Today, the exact appearance of emoji is not prescribed but can vary between fonts and platforms, much like different typefaces.

References

  1. 1 2 3 4 5 6 7 8 Tim O'Reilly; Troy Mott & Walter J. Glenn (1999). "Make Compatible". Windows 98 in a Nutshell. O'Reilly. pp.  227–228. ISBN   978-1-56592-486-4.
  2. Charles J. Brooks (2002). A+ Certification: (Exams 220-221, 220-222) (4 ed.). Que. pp.  799. ISBN   978-0-7897-2844-9.
  3. 1 2 3 Ron Petrusha (1 August 1999). "Where Am I Running?". windowsdevcenter.com. O'Reilly Media, Inc.
  4. 1 2 3 Ed Bott and Woody Leonhard. "Running Older Apps". 95 Only Undocumented Secrets. Ziff-Davis Publishing Company.
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Andrew Schulman; David Maxey & Matt Pietrek (1992). "KERNEL: Windows system services". Undocumented Windows. Addison-Wesley. pp.  244–250. ISBN   0-201-60834-0.
  6. Rick Coogle. "Windows' 16-bit Program Compatibility Hacks". Archived from the original on 2 September 2007. Retrieved 10 February 2009.Cite journal requires |journal= (help)

Further reading