1. New Features

1.1 The following user control classes are now implemented:

STANDARD This is the default ("standard") scroll bar style that we all know

and love from previous versions of FM.

SCROLLBAR A bare Windows scroll bar, without the two automatic buddy controls

associated with the STANDARD control class.

TRACKBAR A standard Windows95 track bar control -- a welcome alternative

to the time-worn scroll bar control.

PUSHBUTTON A standard Windows push button control.

CHECKBOX A standard Windows check box control.

RADIOBUTTON A standard Windows radio button control.

GROUPBOX A standard Windows group box control. Together with a set of

RADIOBUTTON controls, this control can be used to construct

a grouping of mutually-exclusive radio buttons.

OWNERDRAW A standard Windows owner-drawn control, in which the FD is

responsible for drawing the appearance. Can be used as a

simple push button.

STATICTEXT A static (read-only) text control. Usually used for displaying

fixed text strings, but can also be used as a simple push


FRAME A standard Windows frame control, consisting of a styled

rectangular frame. Can be used as a simple push button.

RECT A standard Windows rectangle control, consisting of a filled

black, gray, or white rectangle. Can be used as a simple push


To specify the class of a user control, specify one of the above keywords

as the *first* subkey for the Ctl key. For example, to create a check box



1.2 A new built-in function createCtl() has been added to allow the dynamic

creation of controls within the filter code:

createCtl(n, c, t, x, y, w, h, s, sx, p, e)

Dynamically creates a control with index n, class c, text t,

coordinates (x,y), width w, height h, style s, extended style sx,

properties p, and enable level e. All measurements are in DBUs.

For x, y, w, and h, a value of -1 means use the default value.

The class c should be one of the following predefined values:




1.3 Tool tips are now provided for the OK, Cancel, Edit, Zoom-in, and Zoom-out

buttons, as well as the progress bar, the host application static text field,

and the preview window. Automatic tracking tool tips are also available for

the TRACKBAR control class when the 'TopTip' attribute is specified. A full

implementation of FD-specifiable tool tips for user controls will be available

in a later release.

1.4 Most of the standard C run-time i/o library routines (stdio) are now exposed

in FM. The following functions are now built-ins in FM:

clearerr fscanf

fclose fseek

fcloseall ftell

feof fwrite

ferror getc

fflush putc

fgetc remove

fgets rename

flushall rewind

fopen sprintf

fprintf sscanf

fputc tmpfile

fputs tmpnam

fread ungetc


The following stdio functions are not yet implemented. Use ftell() and

fseek() instead:



The following stdio functions are not implemented because they implicitly

reference one of the standard i/o units (stdin, stdout, or stderr), which

are not implemented in FM. Use the corresponding file-oriented function









For documentation of these functions, see any standard C run-time library


1.5 Two new built-in functions have been added: RGB(r,g,b) and RGBA(r,g,b,a).

RGB() packs three 8-bit RGB color values (r, g, b) into a single 32-bit

integer. RGBA() packs three 8-bit RGB color values and an 8-bit alpha channel

value into a 32-bit integer. RGB() is useful for creating RGB color values

for the 2nd argument of the setCtlColor() and setCtlFontColor() built-ins.

For example, setCtlFontColor(12, RGB(255,255,0)) will set the text color

for control 12 to yellow.

1.6 A new built-in intrinsic function COLOR(<color>) has been added. COLOR()

takes as an argument the same syntax that the Color=<color> subkey takes.

For example, <color> can be a simple color name (yellow, red, salmon), a

qualified X11, HTML, JAVA, or Netscape color name (X11.AliceBlue,

HTML.Aquamarine, JAVA.darkGray, NS.NetscapeGray), a Windows95 UI color name

(COLOR_BTNFACE, COLOR_DESKTOP), an RGB triple (RGB(55,255,70)), an HTML-style

hexadecimal color specifier in RGB order (#cc00ff), or a 24-bit hexadecimal

constant in BGR order (0xff00cc).

As an example, setCtlFontColor(12, COLOR(yellow)) will set the text color

for control 12 to yellow.

1.7 Two new built-in functions have been added: setCtlTextv() and setDialogTextv().

These are similar to setCtlText() and setDialogText() but take a C-style i/o

format string and a variable list of arguments to perform more sophisticated

formatting of output strings. The calling sequences are:

setCtlTextv(n, fmt, arg1, ...)


setDialogTextv(fmt, arg1, ...)


n is the index of a control,

fmt is a C-style format specifier string,

arg1, ... are optional arguments to be interpolated into the format string.

2. Changes

2.1 FM now asks the FD whether he/she wants to recompile the filter source

code whenever the FD tries to run the filter and the compiled code is

out-of-date (because either the source has changed or compilation options

have changed).

2.2 User-defined dialog attributes (such as the background image and color, the

title bar style, etc.) are now reset to their default values after a

compilation. This fixes a problem in which some of these attributes were

inadvertently "sticky" across compilations.

2.3 Dialog attributes such as the background image and color, the title bar

style, the drag mode, etc., are now saved and restored across invocations

of FM.

2.4 Coordinates for the Region= subkey of the Dialog key are now specified in

Dialog Box Units (DBUs) instead of pixels. This means that the dialog

region will now scale automatically across changes to the Windows System

Font size. This change also applies to the relevant arguments of the

built-in functions createRectRgn(), createRoundRectRgn(), createCircularRgn(),

createEllipticRgn(), and createPolyRgn().

2.5 The Color= and FontColor= subkeys of the Ctl key are now functional.

Color=<color> sets the background or body color of the control to the

specified color (or causes the body/background of the control to be transparent

if Color=Transparent is specified). FontColor=<color> sets the color of text

for the control. Note that the interpretation and validity of these

subkeys varies among control classes. For some classes, the background color

is meaningless or unmodifiable. For other classes (such as the PUSHBUTTON

class), the FontColor subkey has no effect. The corresponding built-in

functions setCtlColor(n, color) and setCtlFontColor(n, color) are now also


2.6 The text buddy control for the default (STANDARD) scroll bar control has been

changed from a read-only text field to an editable text field. This means

that the user can now enter a numeric value directly in the text field to

set the value of the control.

2.7 The built-in function chk(n) is now just a synonym for ctl(n), and the use

of chk(n) is deprecated.

2.8 You can use an asterisk (*) instead of the special value -1 in a Size= or

Pos= subkey to specify a component which is not to be changed. For example,

Size=(40,*) can be used to change the width of a control to 40 DBUs without

changing its height.

2.9 Tab stops have been removed from all controls in the expanded Edit and Advanced

Edit areas of the FM dialog. These controls can still be accessed from the

keyboard in most cases by using their shortcut keys.

3. Bug Fixes

3.1 FM now forces the dialog background to be redrawn whenever the dialog size

is changed. This fixes a problem in which the background could be left

in a stale state when, for example, the user entered or exited Edit Mode.

3.2 Occasionally FM could cause a GP if the user pressed a button or initiated

a zoom-in or zoom-out while simultaneously trying to drag the preview image

with the zero-drag option in effect. This bug has been fixed.

3.3 A problem in which the filter algorithm code could sometimes be recursively

reentered has been fixed.

3.4 Some ambiguities in parsing FFW-style vs. FFP-style keys (such as the common

Ctl key) have been resolved.

4. Known Problems

4.1 For TRACKBAR controls, the Color= subkey has problems setting the background

color of the control. The color will not be updated until the first time a

user clicks on the track bar control.

4.2 The new dialog size is not always computed correctly when switching between

edit modes or when changing title bar attributes.

4.3 Vertically-oriented scroll bars and track bars don't work yet.

4.4 For the STATICTEXT control class, the attributes 'EndEllipsis', 'PathEllipsis',

and 'WordEllipsis' do not work.

4.5 Some features of Win95 controls require comctl32.dll version 4.71 or later.

(E.g., setting colors for a progress bar requires 4.71 or later). Comctl32.dll

is not a redistributable DLL, but can be obtained by installing Microsoft

Internet Explorer 4.0 on your system. Earlier versions of comctl32.dll, such

as version 4.70, will also work, but you may lose some functionality.

4.6 When the user presses ENTER in the text edit buddy of a STANDARD control,

the control will "ding" even if the value entered is perfectly valid.