home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-11-04 | 133.1 KB | 3,176 lines |
-
- V38, V38, V40 Changes
-
- (c) 1992-93 Commodore-Amiga, Inc. All Rights Reserved
-
- ------------------------------------------------------------------------
- NOTE: This document was written before the release of V39 and therefore
- some of the changes noted may have actually ended up in earlier or later
- releases, or may not have occurred at all. However, it is still a very
- useful document summarizing changes to the disks and the ROM.
- V38 is 2.1, V39 is 3.0, and V40 is 3.1.
- ------------------------------------------------------------------------
-
- Many changes were made to the system software for V39. The major
- differences are in the graphics subsystem and in Intuition. There were
- also hundreds of changes made to other areas of the system software. This
- document presents the majority of these changes, and explains the possible
- impact of these new features on the developer.
-
- V39 requires both a new disk set, and a new ROM. V38 is a disk-based
- upgrade requiring only a new disk set if your system have 2.04 Kickstart.
-
- The main changes to the contents of the disks in V39 are detailed in
- Appendix A and in Appendix B. Here are the highlights of changes to
- system disk organization:
-
- o The V38/V39 system software is shipped on FFS floppies. This is
- mainly to increase available storage.
-
- o Under V38, a Storage drawer was created on the Extras disk. Under
- V39, a separate Storage disk is provided. Storage contains the same five
- drawers as in the Devs drawer. This is where things that are not
- currently used are kept. To activate a monitor, the user is expected to
- drag the desired monitor icon from Storage/Monitors to Devs/Monitors.
- Same applies for printer drivers, keymaps, DOS drivers, and datatypes
-
- o The Fonts disk is now called FONTS instead of AmigaFonts. This
- enables the disk to be used directly whenever fonts are needed by the
- system, instead of requiring the user to assign FONTS: to the disk.
-
- o Note that there are different specific disk sets shipped with
- different machines and packages. For example, low-end V38 systems do not
- get a Locale disk, and instead have a Locale directory on the Workbench
- disk.
-
- o Deleted Files. The following system files present under V37 are no
- longer included with the system software.
-
- Devs/narrator.device Deleted as part of the removal of speech support.
- Libs/translator.library Deleted as part of the removal of speech support.
-
- Tools/Colors Removed in V39 because its functionality conflicted with
- pen sharing, and was generally not very nice to applications.
- Utilities/Display This program is replaced under V39 by the more
- flexible and powerful MultiView utility.
- Utilities/More.info This icon has been removed because we want to
- encourage users to use MultiView instead of More when running from
- Workbench. The More program itself remains on the disk since it is
- referenced by many read me files, and the like.
-
- o Speech Support. The various components supporting synthesized speech
- are no longer included with the operating system. This can be a serious
- liability for applications depending on synthesized speech for correct
- operation. The V37 components supporting speech still function correctly
- under V38 and V39. The V38/V39 installation procedures do not remove the
- V37 files when updating a system.
-
- Further etails of how the system disks have changed can be found in
- Appendix A and B. V39 ROM changes are listed in Appendix C and D.
-
-
- V38/V39 API Changes
- ===================
- This section discusses what changes in the programming model can affect
- developers.
-
- Finding Version Information
-
- An important point to mention is how to determine if a system is running
- V38 instead of V37. The recommended approach is to open version.library,
- and check its version. For example:
-
- struct Library *VersionBase;
- if (VersionBase = OpenLibrary("version.library",0))
- {
- if (VersionBase->lib_Version >= 38)
- { /* user is running at least V38 Workbench */ }
- else
- { /* user is running at most V37 Workbench */ }
- }
- else
- { /* can't tell what the user is running, assume the minimum version
- * that your application supports */
- }
-
- The above technique lets you determine which general version is in use for
- the disk-based software. Never assume this is a reflection of every other
- library in the system. For example, if you need features that are only
- present in V38 asl.library, you must explicitly check the version of
- asl.library before using it. The same is true for all other system
- libraries.
-
- To determine the general version of the ROM, use
- SysBase->LibNode.lib_Version.
-
-
- GadTools Library
- ================
-
- Many enhancements were made to GadTools for V39. Below you will find
- short descriptions of some of the new features. A complete list of all
- the new features is provided in Appendix A, and more details can be had in
- gadtools.doc.
-
- Menus. GadTools fully supports Intuition's NewLook menus. NewLook menus
- can be added to an application by providing the {WA_NewLookMenus, TRUE}
- tag to OpenWindowTags(), and providing the {GTMN_NewLookMenus, TRUE} tag
- to LayoutMenus(). These two tags will give your application NewLook
- menus. The pens used to render these menus are controllable by the user
- through the V39 Palette prefs editor.
-
- You can now put an arbitrary command string in the right-hand side of a
- menu, where the Amiga-key equivalent normally goes. To do this, point the
- NewMenu.nm_CommKey field at the string (e.g., "Shift-Alt-F1), and set the
- new NM_COMMANDSTRING flag in NewMenu.nm_Flags.
-
- GT_GetGadgetAttrs(). GadTools now has a GT_GetGadgetAttrsA() function
- which retrieves attributes of the specified gadget, according to the
- attributes chosen in the tag list. For each entry in the tag list, ti_Tag
- identifies the attribute, and ti_Data is a pointer to the long variable
- where you wish the result to be stored.
- Here is an example:
-
- LONG top = 0;
- LONG selected = 0;
- LONG result;
- result = GT_GetGadgetAttrs(listview_gad, win, NULL,
- GTLV_Top, &top,
- GTLV_Selected, &selected,
- TAG_DONE);
- if (result != 2)
- {
- printf( "Something's wrong!" );
- }
-
- Palettes. GadTools palette gadgets got a major overhaul for V39. There
- are a few new features, some reduction in memory usage, and an increase in
- performance.
-
- Palette gadgets no longer display a box filled with the selected color.
- The selected color is instead denoted by a box drawn around the color
- square in the main palette area. This change slightly impacts the size of
- palette gadgets. Depending on the conditions, V39 PALETTE_KIND gadgets
- can be slightly smaller than the V37 ones.
-
- Another change which can affect the size of the palette gadgets is the
- smarter layout of the color squares. An attempt is now made to keep the
- color squares as square as possible, based on the aspect ratio information
- obtained from the gfx database. As many color squares as possible are put
- on the screen, until things get too small in which case the upper colors
- are thrown away. The GTPA_ColorTable tag was added in support of sparce
- color tables. It lets you define arbitrary pens to be used to fill-in the
- color squares of the palette gadget.
-
- The GTPA_NumColors tag lets you define the exact number of colors to
- display in the palette gadget. Under V37, the GTPA_Depth tag played the
- same role. The problem with GTPA_Depth is that only multiples of 2 in
- number of colors can be specified. GTPA_NumColors allows any number of
- colors.
-
- Listviews. GadTools listviews got a major overhaul for V39. There are a
- few new features, some reduction in memory usage, and an increase in
- performance.
-
- The biggest difference that is readily noticeable is the disappearance of
- the display box at the bottom of the scrolling list area. Instead of
- showing the selected item in the display box, the selected item remains
- highlighted within the scrolling list. This was done to prepare listviews
- for multi-select support. Multi-selection requires a highlighting scheme
- as a display box would not work. The removal of the display box has a
- slight impact on the size of the listview. Listviews that had a display
- box under V37 got slightly smaller vertically under V39.
-
- The other major addition to GadTools listviews is GTLV_CallBack. This tag
- allows a callback hook to be provided to gadtools for listview handling.
- Currently, the hook only gets called to render an individual item. Every
- time GadTools wishes to render an item in a listview, it invokes the call
- back function, which can do custom rendering. This allows GadTools
- listviews to be used to scroll complex items such as graphics and images.
-
- Finally, listviews can now be disabled using {GA_Disabled, TRUE}.
-
-
- The ASL Library
- ===============
-
- ASL got rewritten for V38. Its file requester is now extremely fast and
- offers more features to the user, and to the programmer. Its font
- requester now comes up about twice as fast the first time it is displayed,
- and instantaneously for subsequent uses. ASL also now includes a screen
- mode requester, which is very useful in the context of AA, and will be
- invaluable for AAA and RTG.
-
- New Names. V38 <libraries/asl.h> contains new names for most of the
- structures, tags, and flag bits used by ASL. The names are now
- consistent, and more descriptive. We encourage the use of the new names
- as much as possible.
-
- To ensure your code only uses the new names, just define the symbol
- ASL_V38_NAMES_ ONLY before including <libraries/asl.h>:
-
- #define ASL_V38_NAMES_ONLY
- #include <libraries/asl.h>
-
- The symbol definition will prevent the old-style names from being defined.
- This is the same method used to disable the pre-V37 names in Intuition
- header files.
-
- Don't Trust Me. The many filtering tags that you can supply to the ASL
- requesters are only advisory in nature. For example, even if you request
- that only non-proportional fonts be allowed in the font requester, the
- user can still type in the name of a proportional font. The user can also
- enter out-of-bounds values for any numeric parameter. You must check all
- results for sanity prior to using them.
-
- Common ASL Tags. The tags for the different requesters are now distinct
- from one another instead of being all grouped together. All options that
- could be set via flag bits now have individual tags to control them. For
- example, there is now an ASLFR_DoSaveMode tag that does the same as the
- FRF_DOSAVEMODE flag bit.
-
- Some basic tags are supported by all requester types:
-
- ASLXX_Window. This indicates the parent window of the requester. You
- provide a window pointer, and if you don't specify an ASLXX_Screen tag,
- then the ASL requester will open on the same screen as this window.
-
- ASLXX_PubScreenName. You provide this tag with the name of a public
- screen to open the ASL requester on.
-
- ASLXX_Screen. You provide this tag with a pointer to a Screen to open on.
- If none of the above three tags are specified, then the ASL requester will
- open on the current default public screen. This will most likely by
- Workbench.
-
- ASLXX_PrivateIDCMP. By default, ASL requesters use the same IDCMP port as
- their parent window (specified using ASLXX_Window). You can request that
- a private IDCMP port be used by setting this tag to TRUE. If you don't
- provide a parent window, then a private port is automatically used and
- this tag need not be provided.
-
- ASLXX_IntuiMsgFunc. You provide this tag a pointer to a Hook structure,
- which indicates a routine to run whenever an IntuiMessage arrives at the
- ASL requester's IDCMP port that is not meant for the requester's window.
- This happens whenever the ASL requester is sharing the parent's window
- IDCMP port, and a message for the parent window arrives at the port. The
- function being called can process the message for the application.
-
- ASLXX_SleepWindow. If you set this tag to TRUE, ASL will put the parent
- window (specified using ASLXX_Window) to sleep until the ASL requester is
- satisfied. This involves blocking all input in the parent window, and
- displaying a busy pointer in it.
-
-
- ASLXX_TextAttr. You can provide a pointer to a standard TextAttr
- structure which defines the font to use in the ASL requester. If this tag
- is not supplied, the default behavior is to use the font of the screen on
- which the requester opens. Note that just like for Intuition objects, the
- font indicated by the TextAttr structure must already be in memory before
- using the requester. There is no guarantee that ASL will actually use the
- font you asked for. If that font is too large, ASL will use a smaller
- one. Also, as of V39, the file requester's file list requires a monospace
- font. So if you provide a proportional font, the file requester will use
- the system default font instead for its list of files.
-
- ASLXX_Locale. You pass this tag a pointer to a Locale structure, as
- obtained from the locale.library/OpenLocale() function. The locale is
- used to determine in which language, and using which country information,
- the various requesters should be displayed. If this tag is not provided,
- or its value is NULL, then the default system Locale is used. This
- corresponds to what the user has currently picked in the Locale prefs
- editor. As of V39, certain items such as the dates in the file requester
- always use the system default Locale instead of the Locale provided with
- this tag.
-
- ASLXX_TitleText. Provide this tag a string which will be used for the
- title of the requester. If this tag is not provided, the requester has no
- title.
-
- ASLXX_PositiveText. Provide this tag a string which will be used for the
- label of the positive choice gadget in the requester. If this string is
- not provided, a localized default is used (English default is "OK"). We
- recommend using this tag to make the action of the various requesters more
- clear to the user. For example, when a file requester is being displayed
- to load a file, it is clearer if the gadget says "Open" instead of simply
- "OK".
-
- ASLXX_NegativeText. Provide this tag a string which will be used for the
- label of the negative choice gadget in the requester. If this string is
- not provided, a localized default is used (English default is "Cancel").
-
- ASLXX_InitialLeftEdge, ASLXX_InitialTopEdge, ASLXX_InitialWidth,
- ASLXX_InitialHeight. These four tags let you specify the position and
- size of the ASL requester window. These are only requests that ASL may
- decide to ignore. When an ASL requester is closed, it is easy to
- determine the position and size of the requester when the user closed it.
- It is a good idea for an application to remember these values and use them
- in subsequent invocations of the requester.
-
- The File Requester. The file requester supports a number of tags. Some
- of the tags introduced in V38 are discussed here.
-
- Note that the future holds many changes in the ASL file requester that
- will substantially increase its flexibility to both the programmer and the
- user. If you use the ASL file requester in your applications today, you
- will automatically get the majority of these new features when they become
- available. Rolling your own file requester means a lot of extra work, and
- means that you will not automatically benefit from the new interface when
- it becomes available.
-
- ASLFR_DoSaveMode. Setting this tag to TRUE indicates the file requester
- is being used for saving information. When in save mode, the file
- requester changes slightly. The most obvious change is the use of a
- different set of colors in the file list. This is a direct queue to the
- user that something is being selected for writing, not reading. Second
- change is that if the user enters a directory name which doesn't exist,
- ASL will prompt the user to see if the user wishes to create the
- directory. This lets the user create new directories to save files into.
- There are likely to be more differences between normal and save mode in
- the future. Please use this tag when appropriate.
-
- ASLFR_RejectIcons. When set to TRUE, this tag prevents icons (.info
- files) from being displayed in the file requester. If this tag is not
- specified, icons will be displayed by the file requester. Please use this
- tag in all your software. Workbench users should never have to see .info
- files. The default behavior of the file requester is to display .info
- files, which is incorrect. Unfortunately, this default behavior cannot be
- changed due to compatibility.
-
- ASLFR_DoPatterns. Setting this tag to TRUE causes a Pattern gadget to be
- displayed in the file requester, which allows the user to enter AmigaDOS
- patterns to filter out files. The default is to have no pattern gadget.
-
- ASLFR_DrawersOnly. Setting this tag to TRUE causes the file requester to
- have no File gadget, and to only display directory names in its file list.
- This is a useful option if you wish to have the user select a destination
- directory for a particular task.
-
- ASLFR_RejectPattern. Provide an AmigaDOS pattern to this tag, and any
- files matching this pattern will not be displayed in the file requester.
- This pattern can never be edited by the user. Note that the pattern you
- provide here must have already been parsed by
- dos.library/ParsePatternNoCase().
-
- ASLFR_AcceptPattern. Provide an AmigaDOS pattern to this tag, and only
- files matching this pattern will be displayed in the file requester. This
- pattern can never be edited by the user. Note that the pattern you
- provide here must have already been parsed by
- dos.library/ParsePatternNoCase().
-
- ASLFR_FilterDrawers. Setting this tag to TRUE causes the
- ASLFR_RejectPattern, ASLFR_AcceptPattern, and the Pattern text gadget to
- also apply to filter drawer names. Drawers are normally never affected by
- pattern filtering.
-
- The Screen Mode Requester. The screen mode requester allows the user to
- select amongst the wide range of display modes available on the Amiga.
- Future chip sets, and the RTG effort will yield a very large additional
- number of display modes. Using the ASL requester is a good way to ensure
- that you benefit from the maximum upwards compatibility possible. In many
- cases, by using the screen mode requester, your applications will
- automatically be able to open displays in new modes that are introduced in
- future OS revisions.
-
- An important point to note is that the interface presented to the user by
- the screen mode requester is likely to change dramatically in the future.
- This is because the increased number of available modes will make the
- current interface difficult to use and understand at best. A new scheme
- is being developed that should allow the user to more easily and
- accurately pick display modes. If you use the ASL screen mode requester
- in your applications instead of rolling your own version, your application
- will automatically get this new interface when it becomes available.
-
- The ultimate goal of the screen mode requester is to return a graphics
- mode id. The mode ids are used since V37 to distinguish between the
- different display modes in the system. The screen mode requester can also
- return additional information including requested display sizes and depth.
-
- As all other ASL requesters, you get the result of a request by reading
- the contents of the requester structure after the AslRequest() calls
- return success. There are two fields worth mentioning in the
- ScreenModeRequester structure: sm_BitMapWidth and sm_BitMapHeight. These
- values define the values to pass to AllocRaster() and InitBitMap() when
- hand-building a BitMap structure to display the requested width, height,
- and depth. This is useful when running on a V37 ROM. For V39 use, simply
- use the values in sm_Width and sm_Height, and pass those to AllocBitMap()
- directly.
-
- Here are the most important screen mode requester tags.
-
- ASLSM_InitialDisplayID. This tag sets the initial mode that is selected
- in the mode listview. You provide it a graphics mode id, and that mode
- will be initially selected in the file requester.
-
- ASLSM_InitialDisplayWidth, ASLSM_InitialDisplayHeight,
- ASLSM_InitialDisplayDepth. These tags determine the initial setting of
- three gadgets that can optionally be displayed in the requester. The
- default if these tags are not provided are a width of 640, a height of
- 200, and a depth of 2.
-
- ASLSM_InitialOverscanType. This tag determines the initial setting of the
- Overscan Type cycle gadget. This optional gadget lets the user pick which
- overscan setting to use for the given mode. The values you can provide to
- this tag are: OSCAN_TEXT, OSCAN_STANDARD, OSCAN_MAXIMUM, and OSCAN_VIDEO.
- OSCAN_VIDEO is only available starting with V39, it is not in V38. The
- four OSCAN_XX constants are defined in <intuition/screens.h>.
-
- ASLSM_InitialAutoScroll. This tag can be set to TRUE or FALSE and
- determines what the initial state of the option AutoScroll checkbox gadget
- should be.
-
-
-
- ASLSM_DoWidth, ASLSM_DoHeight, ASLSM_DoDepth, ASLSM_DoOverscanType,
- ASLSM_DoAutoScroll. These tags control which of the optional gadgets is
- displayed in the screen mode requester. The default is to have none of
- these present. Setting any of these tags to TRUE will make the gadget
- appear.
-
- ASLSM_MinWidth, ASLSM_MaxWidth, ASLSM_MinHeight, ASLSM_MaxHeight,
- ASLSM_MinDepth, ASLSM_MaxDepth. These tags let you specify limits to the
- values the user is allowed to enter in the requester.
-
- ASLSM_PropertyFlags, ASLSM_PropertyMask. These two tags cooperate to
- allow a flexible means of filtering out unwanted display modes. Each
- display mode in the graphics database has a given set of properties
- associated with it. These tags allow you to determine which modes to
- display in the mode list of the requester based on the properties of the
- modes.
-
- The mode properties are defined as a ULONG of flag bits. The
- definitions for all supported properties are in <graphics/displayinfo.h>.
- Examples include DIPF_IS_WB and DIPF_IS_LACE.
-
- ASLSM_PropertyMask defines which properties you are concerned with.
- Those are the only bits for which the specific setting matters to you.
- The setting of all other property bits doesn't matter to you.
-
- ASLSM_PropertyFlags defines exactly in which state the property
- flags you are have shown interest in via the ASLSM_PropertyMask tag should
- be.
-
- The way ASLSM_PropertyMask and ASLSM_PropertyFlags interact is
- indentical to how the two flags parameters interact in
- exec.library/SetSignal(). This is how ASL uses the tag values internally:
-
- if ((displayInfo.PropertyFlags & propertyMask) ==
- (propertyFlags & propertyMask))
- {
- /* Mode accepted */
- }
- else
- {
- /* Mode rejected */
- }
-
- An example can help understand the relationship between the two
- tags. If you want to display only screen modes that can be used for the
- Workbench screen, and that are not interlaced, you would set
- ASLSM_PropertyMask to (DIPF_IS_WB|DIPF_IS_LACE), and ASLSM_PropertyFlags
- to (DIPF_IS_WB). The mask value means you are interested in the state of
- the DIPF_IS_WB and DIPF_IS_LACE bits. The flags value says you want the
- DIPF_IS_WB to be set, and the DIPF_IS_LACE bit to be clear.
-
-
- The Locale Library
- ==================
- The locale.library provides the core of system localization.
- See other readmes about Locale.library.
-
- The Bullet Library
- ==================
- The bullet.library contains the Compugraphic outline font rendering
- engine.
-
-
-
- Color Wheel and Gradient Slider
- ===============================
-
- The color wheel and gradient slider are two new BOOPSI classes introduced
- in V39. Together, they offer a very nice interface to let the user select
- or adjust colors. The V39 Palette prefs uses both classes in its
- interface.
-
- Using either of these classes requires you to first open them as
- libraries, and then create new BOOPSI objects using the NewObject()
- function:
-
- if (ColorWheelBase = OpenLibrary("gadgets/colorwheel.gadget",0))
- {
- cw = NewObject(...);
- }
-
- For an introduction to programming the color wheel and gradient slider,
- refer to the 3.0 colorwheel example.
-
- The colorwheel.gadget. The color wheel class provides the ability to
- create gadgets enabling the user to control the hue and saturation
- components of an HSB (Hue-Saturation-Brightness) color space. The
- companion gradient slider class enables control of the brightness
- component of the color space.
-
- The color wheel can operate on screens of any depth, and adapts its
- rendering to the number of colors available. The system's pen sharing
- system is used in order to maximize the number of colors used by the
- wheel. A color wheel gadget is (normally) responsible for choosing it's
- own color pens to draw in (using graphics.library/ObtainBestPen()).
- However, the creator of the gadget can "donate" some of its pens to the
- gadget, using the WHEEL_Donation tag.
-
- The reason that the color wheel picks its own colors is because it has the
- ability to display several different layouts depending on the number and
- variety of colors available. For example, when opening on a screen of low
- depth or when opening on a screen where all the pens have already been
- allocated exclusively, the gadget will display a "monochrome" version of
- the color wheel, where instead of colored segments, the letters "R" (for
- red), "G" (for green), "B" (for blue), "Y" (for yellow), "C" (for cyan)
- and "M" (for magenta) will be used as labels.
-
- You can talk to the color wheel using HSB or RGB, even though the color
- wheel only really deals with HSB in its user-interface. All
- communications with applications are performed with full 32-bit color
- component values. Internally everything is currently kept and processed
- in 16-bit space, although this might change in the future.
-
- Here are the main tags supported by the color wheel class:
-
- WHEEL_Hue. Lets you control the Hue component of the color wheel. This
- is effectively the angle around the wheel where the desired color lies. A
- hue value of 0 is all red, and nothing but red. Increasing the value
- moves the color towards all green at $55555555, full blue at $AAAAAAAA,
- and back to red at $FFFFFFFF.
-
- WHEEL_Saturation. Lets you control the Saturation component of the color
- wheel. This is effectively the distance from the center of the wheel
- where the desired color lies. A saturation value of 0 puts the knob at
- the center of the wheel and always yields white. Increasing the value
- progressively moves the knob farther away from the center. until the
- value $FFFFFFFF is reached in which case the knob is as far as it can go.
-
- WHEEL_Brightness. Lets you control the Brightness component of the color
- wheel. The color wheel does not itself have any means of displaying or
- editing brightness, but it does maintain this value internally. Used with
- the WHEEL_GradientSlider tag, you can control the value of a
- gradientslider object by passing WHEEL_Brightness to a color wheel. A
- brightness value of 0 means all black. Increasing the value progressively
- brightens the current color, until the value $FFFFFFFF is reached in which
- case the color is as bright as it gets.
-
- WHEEL_Red, WHEEL_Green, WHEEL_Blue. Let you specify new RGB values for
- the color wheel. The values provided are converted into HSB values are
- then used.
-
- WHEEL_Screen. This is a required tag that lets you specify the screen on
- which the color wheel is to be displayed. Note that once a color wheel is
- created, the screen should not be closed until the color wheel object is
- discarded using DisposeObject().
-
- WHEEL_BevelBox. If you set this tag to TRUE, a bevel box will be drawn
- around the color wheel object.
-
- WHEEL_GradientSlider. This tag lets you attach a gradient slider object
- to the color wheel. You give this tag a pointer to a gradient slider
- object obtained previously from NewObject(). Once this is done, anytime
- the various tags that can affect the brightness component of the current
- color is sent to the color wheel, the color wheel automatically changes
- the value of the attached gradient slider to match that new brightness
- value. Reading the brightness value from the color wheel returns the
- current value indicated by the gradient slider.
-
- Using this tag effectively allows you to treat the color wheel and
- gradient sliders as a single gadget. Once things are set up, all
- communications occur through the wheel object, and the gradient slider can
- pretty much be ignored.
-
- The gradientslider.gadget. The gradient slider gadget class is a type of
- non-proportional slider. The primary feature of the gradient slider is
- it's appearance. Unlike normal sliders, a gradient slider can display a
- "spread of colors" or "color gradient" in the slider container box. The
- "knob" or "thumb" of the slider appears to slide on top of this color
- gradient.
-
- The color gradient effect is built-up using a combination of multiple pens
- and half-tone dithering. The application must tell the slider exactly
- which pens to use in creating the gradient effect, and in what order to
- use them. Essentially, it does this by passing an array of pens
- (terminated by ~0, just like a PenSpec) to the slider. The first pen in
- the array is used as the color at the top of the slider (or left, if it is
- horizontal), and the last color in the array is used at the bottom (or
- right). The other pens will be used at evenly spaced intervals in
- between. Dithering is used to smoothly fade between the pens, allowing
- the illusion of a continuous change in color.
-
- Here are the main tags supported by the gradient slider class:
-
- GRAD_MaxVal. Lets you set the maximum value supported by the slider.
- This must be in the range $0..$FFFF.
-
- GRAD_CurVal. Lets you set the current value of the slider. This should
- be in the range 0..GRAD_MaxVal.
-
- GRAD_PenArray. Lets you specify an array of pens that the slider should
- use to create its gradient background. The array can contain any number
- of pens, and is terminated with a pen value of ~0. These pens can be
- allocated as shared, since their RGB value is not altered by the slider.
- The first pen is used on the top or left of the slider, and the last pen
- is used on the bottom or right. All other pens are evenly spaced out and
- used in between. Dithering is used between the pens to enhance the
- smoothness of the gradient transition.
-
- A NULL pen array causes the background of the slider to be rendered
- in the screen's background color. A pen array containing only a single
- pen causes the background to be rendered using that pen.
-
-
-
-
-
- New File Systems
- ================
- The V39 ROM file system supports 6 different disk formats:
-
- o DOS\0 This is the traditional Amiga file system. It has 488 bytes of
- data per block. It offers a high level of redundancy and validation which
- makes it very reliable. It is also fairly slow.
-
- o DOS\1 This is the original Fast File System introduced in 1.3. It
- uses a disk layout quite similar to DOS\0, except it forgoes some
- redundancy in the name of speed. It stores 512 bytes per block, and runs
- substantially faster than DOS\0.
-
- o DOS\2 This is an international flavor of DOS\0. The only difference
- between this format and DOS\0 is the hashing algorithm used to locate the
- files and directories on the disk. DOS\0 has a bug in dealing with making
- international characters case-sensitive. DOS\2 corrects this bug, and is
- otherwise identical to DOS\0.
-
- o DOS\3 This is an international flavor of DOS\1. The only difference
- between this format and DOS\1 is the hashing algorithm used to locate the
- files and directories on the disk. DOS\1 has a bug in dealing with making
- international characters case-sensitive. DOS\3 corrects this bug, and is
- otherwise identical to DOS\1.
-
- o DOS\4 This is a directory-caching version of DOS\2. It has the same
- general disk layout, with the addition of special directory cache blocks.
- These cache blocks store the contents of each directory. The advantage of
- this is that getting a directory listing can be an order of magnitude
- faster than on normal DOS\2 disks. The directory caches require a slight
- amount of disk space, and maintaining them slightly slows down file
- creation, deletion, and update. This file system is mostly meant for
- floppies, as it doesn't generate a very noticeable performance increase on
- hard drives.
-
- o DOS\5 This is a directory-caching version of DOS\3. It has the same
- general disk layout, with the addition of special directory cache blocks.
- These cache blocks store the contents of each directory. The advantage of
- this is that getting a directory listing can be an order of magnitude
- faster than on normal DOS\3 disks. The directory caches require a slight
- amount of disk space, and maintaining them slightly slows down file
- creation, deletion, and update. This file system is mostly meant for
- floppies, as it doesn't generate a very noticeable performance increase on
- hard drives.
-
- Disk Block Format. Here are some notes concerning changes to the disk
- block format required by the new SetOwner() call, and more importantly the
- changes present in DOS\4 and DOS\5 to support directory caching. The
- format of root blocks is unchanged under V39.
-
- The format of file header blocks is slightly different in order to store
- owner information. One of the reserved fields is now being used:
-
- struct FileHeaderBlock
- {
- ULONG fhb_Type; // T.SHORT
- ULONG fhb_OwnKey; // key of this block
- ULONG fhb_HighSeq; // total blocks in file
- ULONG fhb_DataSize; // number of data block slots used
- ULONG fhb_FirstBlock; // first block in this file
- ULONG fhb_Checksum; // checksum of this block
-
- ULONG fhb_HashTable[]; // variable number of hash table entries
-
- ULONG fhb_Reserved // always 0
- ULONG fhb_OwnerXID // owner UID/GID
- ULONG fhb_Protect // protection bits
- LONG fhb_ByteSize // total size of file in bytes
- char fhb_Comment[92]; // comment as a BCPL string
- ULONG fhb_Days; // creation date and time
- ULONG fhb_Mins;
- ULOGN fhb_Ticks;
- char fhb_FileName[36]; // filename as BCPL string
- ULONG fhb_Link; // pointer to object header is linked to
- ULONG fhb_BackLink; // pointer to previous object in link chain
- ULONG fhb_HashChain; // next entry with same hash value
- ULONG fhb_Parent; // pointer back to parent directory
- ULONG fhb_Extension; // 0 or pointer to first extension block
- ULONG fhb_SecType; // ST.FILE
- };
-
- User directory blocks were modified to add the same owner information as
- for file header blocks. Under DOS\4 and DOS\5, the user directory blocks
- also point to the new directory cache blocks.
-
- struct UserDirectoryBlock
- {
- ULONG udb_Type; // T.SHORT
- ULONG udb_OwnKey; // key of this block
- ULONG udb_SeqNum; // highest seq (always 0)
- ULONG udb_DataSize; // always 0
- ULONG udb_NextBlock; // always 0
- ULONG udb_Checksum; // checksum of this block
-
- ULONG udb_HashTable[]; // variable number of hash table entries
-
- ULONG udb_Reserved; // always 0
- ULONG udb_OwnerXID; // owner UID/GID
- ULONG udb_Protect; // protection bits
- ULONG udb_Junk; // not used (always 0)
- char udb_Comment[92]; // comment as a BCPL string
- ULONG udb_Days; // creation date and time
- ULONG udb_Mins;
- ULONG udb_Ticks;
- char udb_DirName[36]; // name as a BCPL string
- ULONG udb_Link; // pointer (key number) to object linked to
- ULONG udb_BackLink; // back pointer to previous hard link header
- ULONG udb_HashChain; // next entry with same hash value
- ULONG udb_Parent; // pointer back to parent
- ULONG udb_DirList; // DOS\4 and DOS\5 use this for the dir cache
- ULONG udb_SecType; // ST.USERDIR
- };
-
- A new block type added in support of DOS\4 and DOS\5 is the file list
- block. This is where directory information is cached by the file system.
- When looking at a file list block, is it critical to check the fhl_Type
- field of the block to ensure that it is a known block format. Unknown
- block formats should be ignored. On a DOS\4 and DOS\5 partitions, the
- file system is able to rebuild cache blocks if it finds older versions
- present, or if it finds no cache block for a given directory.
-
- struct FileListBlock
- {
- ULONG fhl_Type; // T.DIRLIST
- ULONG fhl_OwnKey; // key of this block
- ULONG fhl_Parent; // key of parent directory
- ULONG fhl_NumEntries; // amount of data on this block
- ULONG fhl_NextBlock; // next block in sequence of file list blocks
- ULONG fhl_Checksum; // checksum of this block
- };
-
- Following the above structure on a disk block comes the actual cache
- information for the directory. There is one cache entry for every file
- and directory within the cache. These entries vary in size based on the
- length of the file name and comment for the entry. A cache entry looks
- like:
-
- struct ListEntry
- {
- ULONG fle_Key; // Key (fhb block) of file
- ULONG fle_Size; // size in bytes
- ULONG fle_Protection; // protection bits
- ULONG fle_OwnerXID; // owner info
- UWORD fle_Days; // date (allows 179 years)
- UWORD fle_Min; // 0..(60*24 - 1)
- UWORD fle_Tick; // 0..3599
- UBYTE fle_Type; // ST.XXXXX (all fit in a byte)
- char fle_FileName[]; // variable length BCPL string
- char fle_Comment[]; // variable length BCPL string
- };
-
- These are the values for the various constants referred to above:
-
- // block type constants
- #define T.DELETED 1
- #define T.SHORT 2
- #define T.LONG 4
- #define T.DATA 8
- #define T.LIST 16
-
- DCFS_REV 1
- DIRLIST_KEY 32
- DIRLIST_MASK 0xffffffe0
- T.DIRLIST (DIRLIST_KEY | DCFS_REV)
-
- ST.FILE -3
- ST.ROOT 1
- ST.USERDIR 2
-
-
-
- DOS Workarounds
- ===============
-
- V37 dos.library has a few important bugs. These bugs are fixed in V39,
- and it is easy to work around many of these bugs under V37 to make sure
- you don't get into trouble.
-
- AttemptLockDosList(). Under V37, AttemptLockDosList() would sometimes
- return 1 on failure instead of NULL. To check for failure of
- AttemptLockDosList(), simply use:
-
- dl = AttemptLockDosList();
- if (!dl || (dl == (struct DosList *)1))
- /* failed */
-
- FGets(). Under V37, FGets() will overrun the buffer you give it by one
- byte, if it doesn't encounter a line feed or EOF before filling up your
- buffer. The work around is very simple: pass buffersize-1 to FGets().
-
- ParsePatternNoCase(). Until V39, ParsePatternNoCase() did not correctly
- treat character classes as case-insensitive. That is [a-z] was different
- than [A-Z]. The work around for this bug is to simply convert all
- characters of the pattern to upper case before passing it to
- ParsePatternNoCase(). Just use the utility.library/ToUpper() function to
- convert all characters of the pattern to upper case.
-
- SetVBuf(). Until V39, the SetVBuf() function didn't do anything.
- Starting with V39, it actually does in fact set the buffer sizes. If you
- use any of the buffered DOS IO calls, you can get a noticeable increase in
- performance by increasing the buffer size of your files. A good size is
- 4K. You can simply add a SetVBuf() call after opening each of your files.
- It won't do anything under V37, and will work under V39. In most cases,
- it is not even necessary to check for failure of SetVBuf(). When the call
- fails, it just leaves the file handle with the same buffering it had
- previously. That's fine, you just won't get the performance increase for
- that run of the program.
-
- SetVBuf() was not activated in the initial release of 3.0, it only becomes
- available with 3.1.
-
-
- Commodities Library
- ===================
-
- The commodities.library underwent a major overhaul in V38. The result is
- a much smaller, much less CPU hungry, and much less memory hungry library.
- Many bugs were also found and fixed. Finally, a few new features were
- included. All of the commodity programs shipped with the system were also
- revised.
-
- ReadArgs(). Commodities now use ReadArgs() instead of the custom
- command-line parsing routines in amiga.lib. This makes them more
- consistent with the rest of the system. We encourage third party
- commodity writers to also switch to ReadArgs(). Keyword Synonyms.
- ParseIX() now understands many synonyms for keys and qualifiers. The
- intent was to provide more consistent naming, and to decrease the
- likelihood the user would make a mistake while entering a key sequence.
-
- Input Events. A bug that was found in a few applications during V39
- development was the incorrect initialization of InputEvents inserted into
- the input.device's input stream. These events can work most of the time,
- and suddenly not work with specific applications. Of specific interest,
- the inputEvent->ie_SubClass was found to often contain garbage. This
- field should generally be set to 0. Another field that is often
- incorrectly initialized is the ie_TimeStamp field. Make sure this field
- has something meaningful in it. Note that using the IND_WRITEEVENT
- input.device command automatically initializes the ie_TimeStamp field.
-
- Bugs In commodities.library. Under V37, input events output by translator
- objects were inserted into the input stream after the commodities.library
- input handler. This was contrary to the documentation. Starting with
- V38, events generated are inserted immediately following the translator
- object. This means commodity objects coming after the translator now get
- to see the translated events, while in V37, they wouldn't.
-
- Another bug with translator objects is that they insert their attached
- list of input events in reverse order. This cannot be fixed due to
- compatibility problems. It is easily worked around by arranging the input
- events in the reverse order of how you want them to be inserted. The
- InvertString() function in amiga.lib generates an inverted list of input
- events, which is just fine for translator objects.
-
- Starting with V39, input events generated by translator objects are
- stamped with the same time as the input event that activated the
- translator. This helps applications that look at the time of input
- events.
-
- In V38, the ParseIX() function has a bug which prevents the following keys
- on the numeric keypad from being used in commodities: . 9 ( ) / * +.
- This bug is fixed in V39.
-
- Until V39, input events of type IECLASS_NEWPOINTERPOS never got their
- extended tag list data copied when it needed to be. This can cause
- general confusion or crashes if a sender object is used on an event of
- that type. The only solution is to refrain from sending messages of type
- IECLASS_NEWPOINTER.
-
- Until V39, the InvertKeyMap() function never initialized the ie_SubClass
- and ie_TimeStamp fields of the input event it created. The workaround to
- this bug is simple:
-
- inputEvent->ie_SubClass = 0;
- inputEvent->ie_TimeStamp.tv_secs = 0;
- inputEvent->ie_TimeStamp.tv_micro = 0;
- if (InvertKeyMap(ansiCode,inputEvent,NULL)) ...
-
-
- Mount Lists
- ===========
-
- The Mount procedure got a major overhaul in V38. The major change from
- the user's perspective is that the handlers that get mounted in the system
- can now be controlled exclusively through Workbench by dragging icons
- around. This is especially important in light of CrossDOS.
-
- New File Format. Although the traditional DEVS:MountList file is still
- fully supported, a new method of storing mount information is now
- recommended. The new format involves simply splitting up the various
- entries that used to be in a mountlist, into separate files. Each file
- controls a unique handler. The format for the information in the mount
- files is the same as what is used in a traditional MountList with three
- exceptions. For example:
-
- /* Aux-Handler mount entry */
- Handler = L:Aux-Handler
- Stacksize = 1000
- Priority = 5
-
- The differences with old style MountLists are as follows:
-
- o Only a single device can be defined per file.
- o The name of the device is not specified in the file and is
- instead the same as the name of the file.
- o The # at the end of the entry can now be omitted.
-
- Every parameter that can be specified in a mount file can also be
- specified in the tooltypes for the icon of the mount file. The parameters
- in the tooltypes override any equivalent parameter setting present in the
- mount file. The format for the tooltypes is straightforward. For
- example:
-
- LOWCYL=0
- HIGHCYL=79
-
- This lets the Workbench user easily control certain attributes associated
- with any given mount entry. For example, the WB user can easily set the
- size of RAD from tooltypes.
-
- If the user wishes to only use your handler once in awhile, he can drag
- the icon for the handler in the Storage drawer. This prevents the handler
- from being mounted on every boot. If the user wants to use the handler
- for a given session, he can then simply double-click on the mount entry
- icon to get it mounted.
-
- It is fairly simple to create an installation procedure that deals with
- both old style and new style mount files:
-
- if (V38)
- {
- /* Create a mount entry file. If the user indicates he wants to use the
- * handler permanently, put it into DEVS:DOSDrivers. Otherwise, just put
- * it into SYS:Storage/DOSDrivers. Don't forget to provide an icon for
- * the mount entry.
- *
- * If the mount entry is in DEVS:DOSDrivers, it will get mounted
- * automatically when the system is rebooted. The user can also mount
- * it for the current session by double-clicking on it.
- */
- }
- else /* V37 or before */
- {
- /* Create an old-style mount entry and append it to DEVS:MountList.
- * Add a Mount statement in the user-startup of the system.
- */
- }
-
- File System Resource List. Mount now has the ability to fish out file
- systems from the FileSystem.resource list. When mounting a file system,
- Mount first look in the FileSystem.resource to see if the system already
- contains a file system of the correct DOS type. If there is such a file
- system, its seglist is used for the new handler.
-
- For example, the CrossDOS file system registers itself in the
- FileSystem.resource the first time it is used. Any subsequent attempts to
- mount a handler having the same DOS type as the CrossDOS file system
- results in that handler using the same seglist as the original CrossDOS
- handler.
-
- If a file system seglist is reentrant, it should be added to the
- FileSystem.resource list of file systems, which will enable it to be used
- in the manner described above. Be sure the seglist is totally reentrant
- before doing this (no global variables). Consult the Rom Kernal manual to
- learn how to add a file system to the FileSystem.resource list.
-
- The new FORCELOAD keyword can be specified in mount entries. When its
- value is set to 1, it tells mount to always load the file system for this
- handler from disk, even if it is present in the FileSystem.resource list.
- This can be quite handy during the testing phase of a handler.
-
- Unit Keyword. Stream handlers have always had the advantage of being able
- to let the user provide startup arguments to the handler via the Startup
- keyword. For example:
-
- Startup = "this is a bunch of options"
-
- The value of the parameter is available to the handler as a BSTR in the
- dol_Startup field of the handler DosList structure. This only works for
- stream handlers though, file system handlers make use of the dol_Startup
- field as a BPTR to the FileSysStartupMsg created for them by the Mount
- command.
-
- The Unit keyword can now be used to passed textual options to a file
- system handler. If a string is specified in the mount entry, then the
- fssm_Unit field of the file system's FileSysStartupMsg will be a C pointer
- to the NULL-terminated argument string, instead of being the traditional
- unit number. New Values For GlobVec. The GlobVec keyword in a mount list
- can now be set to -2 and -3 in addition to the other values already
- supported. Here is a table of possible values:
-
- GlobVec
- Value Meaning
- 0 Default global vector, used for handlers written in BCPL.
- Startup packet comes in a register.
- -1 No global vector, used for C and ASM handlers.
- Process has to wait for startup packet.
- -2 Same as -3, except for handlers written in BCPL.
- -3 No global vector, used for C and ASM handlers.
- The difference with -1 is that the handler can do DOS IO prior to
- returning its startup packet. On the flip side, the handler is
- responsible for making sure there is only one instance of itself
- loaded by providing correct arbitration around the poking of the
- dol_Task field of the DosList structure. With a GlobVec of -1,
- this is taken care of by DOS.
-
- Even though the values -2 and -3 are only allowed starting with the V39
- Mount command, the V37 dos.library handles those values correctly. It's
- just that prior to V37, the Mount command would refuse to process these
- values.
-
-
- Version Command
- ===============
-
- There has been some confusion about what the format of version strings
- are. The exact format is detailled in the Amiga User Interface Style Guide
- on page 110. The format is:
-
- $VER: <name> <version>.<revision> (dd.mm.yy)
-
- The string starts with $VER: followed by a space, followed by <name>.
- <name> is the name of the program. <name> can NOT contain any spaces.
- You can use underscores to achieve a similar effect.
-
- After <name> comes a single space, followed by <version>. <version> is
- the major version number for the program. There should be no leading
- zeros.
-
- After <version> comes a single space, followed by <revision>. <revision>
- is the minor version number for the program. There should be no leading
- zeros.
-
- Following the revision number comes a space, and then the date. The date
- is specified in numeric form only, with no leading zeros on any of the
- components. First comes the day of the month, then the month, then the
- two digits year. In the future, a four digit year format will also be
- supported, but not yet.
-
- Embedding a version string in the exact format described above will let
- the C/Version command find the version string. In the future, there will
- be a system call to enable applications, and other system tools, to obtain
- the version information from files easily.
-
- ROM Tags. The version command not only looks for the $VER: version
- strings, it also search executable files for standard ROM tags. ROM tags
- only contain a version number, they have no revision or date fields. The
- recommended approach is to store a pointer to a version string in the
- RT_IDSTRING field of the ROM tag. This string should be in the same format
- as the normal version string, except without the "$VER: " prefix.
-
- An executable file containing a ROM tag with a properly initialized
- RT_IDSTRING field does not need any other version information in it, such
- as a separate $VER-style string.
-
- Leading Zeros. Leading zeros are not supported as part of the version and
- revision numbers. So "2.04" is not a valid version/revision pair as far as
- the version command is concerned. The reason this is so is because of the
- VERSION and REVISION command-line options of the Version command. These
- allow the version and revision of a file to be checked by a script such
- as:
-
- Version asl.library VERSION 38 REVISION 4
-
- The above command will return 0 if asl.library is greater or equal to
- 38.4, and 5 if it is not. Specifying:
-
- Version asl.library VERSION 38 REVISION 04
-
- Does the same thing. This means that from the standpoint of the Version
- command, 2.04 is the same as 2.4, and thus 2.04 evaluates as being greater
- than 2.1, which is not the desired effect. So, the version and revision
- numbers must not be treated as a floating-point number, but as two
- separate and distinct integers.
-
- This brings up the concept of user versions and internal versions. V37 is
- known to the public as Release 2.04, and V39 is known as 3.0. All the
- version strings in the system software use version strings starting with
- V39. The recommended approach is as follows:
-
- o Assign your products user-space numbers of the form 2.04 and the like.
-
- o Assign the various components of your distribution the same version
- numbers as for your product. For example, "2".
-
- o Assign each individual components of your distribution their own
- unique, monotonically increasing revision numbers. These numbers have
- nothing to do with the user- space number of your product as a whole.
-
- An example is in order. Assume a word processor called
- "SliceAndDiceWord", which is at version 4.03. All the files composing the
- distribution would have a version number of "4", and a file-specific
- revision number:
-
- Package number : SliceAndDiceWord 4.03
- Main executable: SADW 4.1423
- Support library: SADW.library 4.4129
- README file : SADW.README 4.6
-
- When SliceAndDiceWord 5.0 comes out, all the version numbers of the files
- included with the distribution get bumped to 5, and the revision numbers
- start at 0 again.
-
-
- Miscellaneous
- =============
-
- This section presents miscellaneous tidbits of information worth noting
- when developing applications.
-
- Overscan Names. Starting with V38, the two user-settable overscan regions
- are known as "Text Size" and "Graphics Size". Please use the following
- names in your user documentation:
-
- OSCAN_TEXT --> "Text Size"
- OSCAN_STANDARD --> "Graphics Size"
- OSCAN_MAXIMUM --> "Extreme Size"
- OSCAN_VIDEO --> "Maximum Size"
-
- Audio Beep. Starting with V38, the system provides standard support for
- audio beeps, and complete sampled sounds, as a replacement for
- DisplayBeep(). You may wish to rely exclusively on this feature instead
- of providing your own application-specific control over an equivalent
- feature.
-
- ToolType Comments. We strongly encourage you to follow the convention
- adopted in V38 with respect to specifying all tooltypes supported by an
- application within the icon. Any tooltypes not in use can be commented
- out by putting a set of ( ) around the tooltype. This causes Workbench to
- ignore the tooltype, yet still leaves it there for the user to see and
- uncomment.
-
- Keymap selection. If you wish to offer application-specific control over
- the keymap being used, you have to load the keymaps you wish to use from
- disk yourself. Some applications were using the SetMap command to load
- keymaps into memory for them. SetMap is no longer part of the system, so
- this technique will no longer work. The DevCon disks contain an example
- showing how to load keymaps from disk.
-
- Note that if you wish to offer a list of keymaps to the user, you should
- be looking in the KEYMAPS: assign list for the available keymaps. To work
- under V37, If this assign list doesn't exist, you can look in
- DEVS:Keymaps. The example code shows how this can be done.
-
-
-
-
- Appendix A: V39 Disk Changes
- ============================
-
- Following is a description of most of the important changes made to the
- disk-based system software between V38 and the initial release of V39.
- This doesn't cover changes made to modules covered in other readmes, such
- as datatypes and AmigaGuide.
-
-
- C/Install
-
- o Doing "INSTALL DF0: CHECK" on a disk formatted with dir cache now
- reports the disk as either "DC-OFS" or "DC-FFS" as appropriate.
-
- C/IPrefs
-
- o Requires Kickstart V39 and handles the new palette, pointer, and
- wbpattern preferences.
-
- o Is smarter about when it needs to reset the WB screen. Now sends an
- initial IP_SCREENMODE message to Intuition to force the initial Workbench
- screen to be interleaved even if there is no screenmode.prefs file.
-
- o Now uses utility.library 32-bit math routines and uses datatypes.library
- to load sound samples instead of custom 8SVX code.
-
- o Causes much less screen flashing when changing fonts. No longer has the
- QUIT/S command-line option. (Removing this option allows a few K of RAM
- to be saved in every machine. Gives better error messages when it can't
- find a font or a picture.
-
-
- C/Mount
-
- o Added support for GlobVec of -2 and -3.
-
- o No longer considers empty strings an error. This allows something like:
-
- Device = ""
-
- to work. This fix will be helpful to the Envoy software. Note that this
- bug is in V38, so there will soon be many many Mount commands out there
- that don't support empty strings.
-
- C/RequestChoice
-
- This is a new C: program that lets AmigaDOS and ARexx scripts use the
- Intuition EasyRequest() feature. The template is:
-
- TITLE/A,BODY/A,GADGETS/M,PUBSCREEN/K
-
- TITLE
- Specifies the title of the requester.
-
- BODY
- Specifies the text of the requester. Linefeeds can be embeeded using
- *n.
-
- GADGETS
- Specifies the labels for the different gadgets at the bottom of the
- requester.
-
- PUBSCREEN
- Lets you specify the name of a public screen to open the requester on.
-
- The number of the selected gadget is printed at the console on exit,
- and is returned as the secondary return value (seen as the Result2
- variable in the Shell).
-
-
-
- C/RequestFile
-
- This is a new C: program that lets AmigaDOS and ARexx scripts use the ASL
- file requester. The template is:
-
- DRAWER,FILE/K,PATTERN/K,TITLE/K,POSITIVE/K,NEGATIVE/K,ACCEPTPATTERN/K,
- REJECTPATTERN/K,SAVEMODE/S,MULTISELECT/S,DRAWERSONLY/S,NOICONS/S,
- PUBSCREEN/K
-
- DRAWER
- Specifies the initial contents of the Drawer gadget.
-
- FILE
- Specifies the initial contents of the File gadget.
-
- PATTERN
- Standard AmigaDOS pattern. Specifies the initial contents of the Pattern
- gadget. Not providing this option causes the file requester not to have
- any Pattern gadget.
-
- TITLE
- Specifies the title of the file requester.
-
- POSITIVE
- Specifies the text to appear in the positive (left) choice in the file
- requester.
-
- NEGATIVE
- Specifies the text to appear in the negative (right) choice in the file
- requester.
-
- ACCEPTPATTERN
- Specifies a standard AmigaDOS pattern. Only files matching this pattern
- will be displayed in the file requester.
-
- REJECTPATTERN
- Specifies a standard AmigaDOS pattern. Files matching this pattern will
- not be displayed in the file requester.
-
- SAVEMODE
- Specifying this option causes the requester to operate in save mode.
-
- MULTISELECT
- Specifying this option causes the requester to allow multiple files to be
- selected at once.
-
- DRAWERSONLY
- Specifying this option causes the requester to not have a File gadget.
- This effectively turns the file requester into a directory requester.
-
- NOICONS
- Specifying this option causes the requester never to display icons (.info)
- files.
-
- PUBSCREEN
- Lets you provide the name of a public screen to open the file requester on.
-
- The selected files are printed on the console at exit, enclosed in double
- quotes and separated with spaces. The command generates a return code of 0
- if the user selected a file, or 5 if the user cancelled the requester.
-
- C/SetFont
-
- o Now sends ESC-C to the console handler only after doing SetFont() in the
- console window's rastport. The only reason SetFont ever worked was by
- luck, since the escape sequences were buffered by DOS and flushed only
- after the program exited.
-
- o No longer crashes when passed a font name with more than 80 characters.
- Now returns with ERROR_BAD_NUMBER if asked for a font < 4 points.
- No longer opens console.device.
- C/SetPatch
-
- o Activates AA chips.
-
- o On some systems, NMI interrupts could be caused due to hardware
- bugs. These NMIs can cause software/hardware to perform incorrectly
- and has caused major performance problems in some systems.
- In the V37 ROM, the NMI vector pointed at a generalized routine
- that saved all registers, does some work which ends up doing nothing,
- restores all registers, and exits. This patch will, under V37 ROMs,
- move that vector to point directly at an RTE.
-
- o SetPatch no longer will read the longword after the end of each of
- its hunks.
-
- o Now checks for the CPU type before trying to open the 68040.library
- This is so that the library does not even get loaded if you don't
- need it. (The 68040.library also does the check.)
-
- o Does not turn on the caches if the intruction cache is not
- already on. This is such that the bootmenu option will not
- be "undone" by SetPatch.
-
- C/Version
-
- o Now does versions of gadget and datatypes classes.
-
- o Significant change in behavior required when not using the standard
- version string format:
-
- Junk following the date parameter is printed whenever the FULL option
- is provided on the command line. Incorrectly formatted components of
- a version string are printed whenever the FULL option is provided.
-
- Note that as always, specifying incorrectly formatted version strings
- will cause the VERSION and REVISION command line options of the Version
- command not to work as expected. Basically, using these keywords,
- will result in output like "2.1 < 2.04", which is not what is usually
- expected.
-
- The incorrect version string formats are not supported by the
- Installer. It will behave much like the VERSION and REVISION cmd-line
- options of the Version command.
-
- Classes/Gadgets/colorwheel.gadget
-
- The colorwheel.gadget is a new BOOPSI class to create color wheels to allow
- color selections by the user. See colorwheel.doc for more info.
-
- Classes/Gadgets/gradientslider.gadget
-
- The gradientslider.gadget is a new BOOPSI class to create sliders having a
- gradient background. This is to be used in combination with the
- colorwheel.gadget. See gradientslider.doc for more info.
-
- Devs/DataTypes
-
- This new directory in V39 is the place where a user puts datatypes.library
- descriptor files.
-
- Devs/printer.device
-
- o Added small amount of code to support AA 8-bit HAM mode printing.
-
- o Also now uses GetBitMapAttr() if running under V39 to obtain dimensions
- of source BitMap structure.
-
- L/FastFileSystem
-
- o Equivalent to the V39 ROM file system, including DOS\5 support. See ROM
- release notes for more info.
- Libs/68040.library
-
- This is a support library for 68040 systems. It addresses a number of
- issues with that CPU. There are no publically callable functions in this
- library.
-
- Libs/amigaguide.library
-
- The amigaguide.library is a new system module providing a means whereby
- developers can easily add on-line help to their applications. See
- amigaguide.doc for more info.
-
- The amigaguide.library was previously available for use in commercial
- applications. This is the first release of the library as a part of the core
- operating system. Changes since the previous release include:
-
- o All new V39-only version uses datatypes.library for object handling.
-
- o Now has an AppWindow, plus an "Open..." menu item. To open a new
- document, AmigaGuide performs a LINK to it, so that you can RETRACE back
- through the documents that you have opened.
-
- o Now supports word wrapping and proportional fonts.
-
- o Now supports font attributes.
-
- o Now supports embedded objects. This means that you can
- LINK to any type of object that the user has a DataTypes
- descriptor and class for---such as pictures and animations.
-
- o Modified how files are located, to search for a localized help file. Now
- searches in the following order. For each preferred language
-
- PROGDIR:Help/<language>/<name>
- HELP:<language>/<name>
-
- PROGDIR:<name>
- <name>
-
- This matches how locale.library searches for catalog files. For
- compatibility, each directory from the AmigaGuide/Path environment
- variable are also searched.
-
- o Renamed S:help.guide to HELP:<language>/Sys/amigaguide.guide
-
- o All sub-databases are now opened localized.
-
- Libs/asl.library
-
- o Added support for the new WA_HelpGroupWindow Intuition tag. ASL requesters
- now inherit the group id of their parent window.
-
- o Removed V37 code. The library now requires V39.
-
- o Added support for OSCAN_VIDEO in the screen mode requester.
-
- o Fixed rendering bug with selected items in the file requester. Depending
- on the size of the requester, sometimes the rendering didn't occur
- correctly. Fixed font requester layout bug with checkmark labels using
- certain fonts.
-
- o Now monitors the Size numeric gadget more closely in the font requester.
-
- o ASL now uses scaled checkmark imagery in the font and screenmode
- requesters. Also now uses ROM busy pointer instead of custom one.
-
- Libs/commodities.library
-
- o Fixed ParseIX() bug introduced in V38 preventing the following keys on
- the numeric keypad from being used in commodities: 9 ( ) / * + .
-
- Libs/datatypes.library
-
- datatypes.library is a new system module providing transparent data
- handling abilities to applications. Application developers can register
- their data format with datatypes.library and provide a class library for
- handling their data within other applications. See datatypes.doc for more
- information.
-
- Libs/diskfont.library
-
- o Marks DUPLICATE fonts using one of many free bits in the TextFont
- Extension. These are fonts opened by diskfont, but match some other
- font already on the public font list by name, Y size, relevant style,
- and relevant flags. The font is only marked as a duplicate if a
- NON-DUPLICATE occurence of this font already exists.
-
- DUPLICATE fonts are ignored by OpenFont() if the caller is not
- tag aware even if there is a font on the list which has a better
- implied DPI.
-
- o Tightened up requirements for source font when scaling. Specifically,
- an already scaled RAM font of an exact Y size match but differing by
- DPI will not be used as the source for a bitmap scaled font (adding
- scale error, to scale error).
-
- o The code which generates the outline fonts now does comparison for
- OT_DotSize when it calls OpenFont(); essentially honoring the caller's
- request for an OT_DotSize other than the default that diskfont will
- provide when creating outlined fonts. This makes it possible to have
- multiple outline fonts which differ only by OT_DotSize.
-
- o Underlined outline fonts are now supported if the engine can manage it
- when rendering the glyphs. New tags in diskfonttag.[hi] were added for
- this purpose. V39 diskfont will ask for underlining if requested in the
- TextAttr, or TTextAttr, but if not supported by the engine, then it will
- simply try to open, or create a non-underlined version. So there is no
- change in behavior for bullet fonts in that it already opens a
- non-underlined version. The difference is by asking OpenFont() for a
- non-underlined version, it does not decide to create another copy because
- of the result returned from WeighTAMatch().
-
- Of interest, our own Text() function when used with SetSoftStyle() does a
- broken underline (just one pixel, but its definitely not solid), so
- diskfont.library V39 first asks for broken underlining from the engine,
- and then solid. If neither form of underlining is supported, then the
- above is true.
-
- o Tag for algorithmic strike-through added to diskfonttag.[hi]; this
- is another feature supported in Final Copy, and could be requested if
- wrapped in a bullet interface.
-
- o Underlining off, double solid, and double broken underlining also defined
- for the new OT_UnderLined tag.
-
- Underlining is not an intrinsic style for outline fonts. This does not
- actually absolutely have to be the case, but we lack a tag to indicate
- intrinsic underlined style now, so this is not a new behavior, or
- limitation. The assumption being that underlining is one of those things
- that is probably best done algorithmically by the application, or
- for the purposes of diskfont, by the engine. Therefore this also leaves
- open the possibility of placing the underlining code within diskfont
- for engines that do not support it should we wish to do so in the
- future.
-
- Libs/iffparse.library
-
- o Fixed three bugs in the OpenClipboard() function. First bug was that if the
- clipboard.device couldn't open, two calls to FreeSignal() were made
- with uninitialized values as parameters. The result of this was a
- corrupt signal mask in the Task field. Second bug what the OpenDevice()
- was called with an IO request that didn't have a valid MsgPort pointer
- in it. Finally, the two message ports allocated by the function were
- not being initialized correctly and would cause a system crash if a
- message ever got to either of them.
-
- Prefs/#?
-
- o Now restore task->tc_UserData on exit of prefs editor.
-
- Prefs/Font
-
- o Default for WB icon text mode when there is no .prefs file is now JAM2
- instead of JAM1. This matches the ROM.
-
- Prefs/IControl
-
- o Added Mode Promotion gadget when running on AA machines
-
- Prefs/Input
-
- o "Show Double-Click" now operates asynchronously. That is, while the
- double-click sample is displayed, it is still possible to click on other
- gadgets.
-
- Prefs/Overscan
-
- o Now bounds check values read from prefs file against what the gfx database
- says. This avoids problems with V38 overscan prefs files, and with
- running VGAOnly or not.
-
- Prefs/Palette
-
- o Brand new interface using the colorwheel and gradientslider gadget
- classes. Also allows pen spec editing.
-
- Prefs/Pointer
-
- o Now opens on the Workbench screen if it can obtain three exclusive pens.
-
- o Allows editing of the Normal and Busy pointers and supports Low-Res and
- High-Res pointer resolutions.
-
- o Uses datatypes.library for clipboard support.
-
- o Semaphore around save during Test. This is to prevent
- confusing error requesters if the user presses the Test button
- several times while waiting for the pointer to appear.
-
- o Added "Load Image..." menu item in the "Edit" menu.
-
- o Uses {SA_LikeWorkbench, TRUE} when using a custom screen.
-
- o Increased width of window by 20 pixels to make room for
- longer strings.
-
- o Added NOREMAP tooltype and command-line option. This causes paste
- and import image to not remap.
-
- Prefs/ScreenMode
-
- o Now skips the default monitor when scanning the mode list instead
- of skipping PAL or NTSC. This means that the prefs file will never
- contain "default monitor" as a mode, it will always contain an
- explicit mode.
-
- Prefs/Sound
-
- o Now uses datatypes.library for sound loading and playing. Also uses
- a DataTypes filter in the load sample requester so that only sounds
- will be shown.
-
-
- Prefs/WBPattern
-
- o Added support for picture backdrops.
-
- o Added support for Workbench screen backdrop.
-
- o Defined a more efficient chunk for the preference data.
-
- o Fully supports the First4/Last4 Workbench color scheme.
-
- o Uses datatypes.library for clipboard support.
-
- o All internal bitmaps now max out at a depth of 3 (less memory
- usage).
-
- o Rearranged the gadgets.
-
- o Semaphore around save during Test. This is to prevent
- confusing error requesters if the user presses the Test button
- several times while waiting for the pattern to appear on the
- Workbench.
-
- o Added "Load Image..." menu item in the "Edit" menu.
-
- o Added NOREMAP tooltype and command-line option. This causes paste
- and import image to not remap.
-
- S/Startup-Sequence
-
- o Removed "Echo" statement. That means the initial Shell window will no
- longer be displayed on bootup on a standard system. This means a noticeable
- decrease in bootup time on slower machines (it takes about a second to
- open and close the shell window). It means even more savings in time
- when the WB has more bitplanes. Finally, it also looks a heck of a lot
- more professional.
-
- o Added C: in front of every pertinent command. This speeds up the S-S
- noticeably on floppy systems, since normally the current directory is
- scanned first for a command, and then C:. By prefixing C:, it no longer
- checks the current directory making things a whole lot faster.
-
- o Added deferred assign for HELP:.
-
- o Added multi-assign of LIBS: to SYS:Classes in support of the new
- disk-based BOOPSI classes.
-
- o Now runs VGAOnly monitor file if it is installed.
-
- Storage/Monitors/#?
-
- o Added DblNTSC and DblPAL in support of AA scan doubling.
-
- o Added VGAOnly monitor.
-
- o Added AA support throughout.
-
- System/DiskCopy
-
- o Enabled code to correctly report read errors. Under V38, read errors are
- reported as write-errors.
-
- System/Format
-
- o Requires V39.
-
- o Added directory caching support in the form of an extra gadget in the main
- Format window, and some new command-line options. Command-line template
- is now:
-
- DEVICE=DRIVE/K/A,NAME/K/A,OFS/S,FFS/S,INTL=INTERNATIONAL/S,
- NOINTL=NOINTERNATIONAL/S,DIRCACHE/S,NODIRCACHE/S,NOICONS/S,QUICK/S
-
- o Uses GTLV_MakeVisible tag in its device listview.
-
- o Fixed bug where long volume names would run off the right edge of the main
- window by using the new GTTX_Clipped gadtools tag.
-
- System/Intellifont
-
- o Renamed from Fountain to Intellifont.
-
- o Bare minimum needed to fix visual bug evident when running under V39
- gadtools; no longer uses GTLV_Selected tag, though still does not
- use V39 style selection via GTLV_ShowSelected tag.
-
- Tools/Commodities/MouseBlanker
-
- This is a mouse blanking commodity. It blanks the mouse when you start typing
- and unblanks it when the mouse is moved or any of the mouse buttons are hit.
-
- Tools/HDToolBox
-
- o Brand new GadTools interface.
-
- o Now determines the version number of a file system automatically instead
- of requiring it to be entered manually.
-
- o Fixed a great number of bugs.
-
- o When CD_ROM drive was hooked on the SCSI bus and the disk was inserted,
- HDToolBox hanged up beacause the program assumed only 512 bytes blocks.
- It Now checks the size with the "READ_CAPACITY" command,
- and if it fails, sends "INQUIRY" command and gets device type.
- If it's a CD-ROM device, sets block size to 2048.
-
- Tools/IconEdit
-
- o Implements the First4/Last4 Workbench color scheme.
-
- o Uses datatypes.library for clipboard support and picture
- loading/saving. Therefore, you can now load any picture type
- that you have a class for. When loading or pasting a
- picture, the colors are mapped to the Workbench GUI colors
- (either 2, 4 or 8 colors). 8 color icons will work with any
- depth Workbench screen.
-
- o Default clipboard viewer is now "Multiview CLIPBOARD".
-
- o Checks to see if icon already exists when saving a picture or
- source file and won't overwrite it.
-
- o File requester's initial position now matches the preference
- editors.
-
- o Now draws the coordinates in the window title bar using the
- pen spec.
-
- o Was reloading the icon image after save, even if save failed.
-
- o Will now properly undo after loading a new icon image.
-
- o Added NOREMAP tooltype. This causes paste and import image
- to not remap.
-
- o Fixes Enforcer hit caused when dropping Drawer icon (without
- a drawer) into the AppWindow.
-
- Tools/ShowConfig
-
- o Added AA chipset support.
-
-
- Utilities/MultiView
-
- This is a generic view-anything utility that uses datatypes.library for its
- object handling.
-
- 3.0 Installation Procedure
-
- o It is no longer necessary to boot from the Install disk.
-
- o Install Languages no longer exists. This is now merged into the main
- installation script.
-
- o Install Printers no longer exists. The user can easily drag a printer
- driver icon from the Storage disk to DEVS:Printers
-
- o The disk now includes the 68040.library, which gets copied to the HD when
- performing an install
-
- o The various Prod_prep scripts were enhanced and work better.
-
- o There are many little utilities in the C: directory which aid the main
- install script to do a better job.
-
- Changes to the install script include:
-
- o Requires V39 ROMs
-
- o Now integrates the old "Install Languages" script. When starting the
- main install script, you are now asked whether to perform a complete
- installation, or only update the languages.
-
- o It now virtually always makes the right decision as to where the WB files
- should be copied. As a result, if the user picks Novice mode, he will not
- be asked where the files should go.
-
- o Now preserves the tooltypes of many icons. This will avoid zapping the
- stuff put there by users, making the update process much more transparent.
-
- o Now preserves the locations of most files. For example, if the user moved
- Blanker in WBStartup, it will be correctly updated in WBStartup, and left
- there. In V38, the copy in WBStartup would be deleted and the new version
- installed in Tools/Commodities.
-
- o Now preserves left out icons. The UpdateWBFiles program ensures that the
- contents of the .backdrop file are up to date which removes the need to
- delete the file.
-
- o Now updates V37 font prefs files to V38/V39 format.
-
- o Now deals with the "Storage3.0" disk
-
- o Now asks which keymaps to install.
-
- o Installs the 68040.library.
-
- o Knows about systems with MapROM, and installs a special startup-sequence.
-
- o On an NTSC system, always copies the NTSC monitor to DEVS:Monitors, and
- copies PAL to DEVS:Monitors on PAL systems.
-
- o When installing languages, deletes languages the user did not choose. This
- is to remove old V38 files that might be hanging around.
-
- o Does better sniffing to determine whether an A2090 is present, and displays
- extra info to inform the owner that some files need to be copied.
-
- o Will optionally reboot the system for the user at the end of the
- installation procedure (after asking permission first, of course).
-
- o Asks all its questions up front. Once the questions are answered, it
- starts the actual installation.
-
- o Now deletes all C= printer drivers and keymaps before starting the
- installation process. This was previously done right before re-installing
- them. This is to increase the likelihood that things will fit on the HD
- by deleting obsolete stuff ahead of time.
-
- o Does slightly better icon positioning to avoid things moving
- "by themselves".
-
- o Now copies the A2232 port-handler and A2232 aux-handler when needed.
-
- Changes to the HDSetup script include:
-
- o Will now partition the HD and format it automatically instead of requiring
- a reboot.
-
- o The partitions created are now called Workbench (HD0) and Work (HD1).
- HD0: is created as 8M.
-
- o DOS\3 is now used by default, and the DMA mask is set to 0xfffffffe
- instead of 0xfffffffc
-
- o The version number for the file system being installed on a machine is now
- extracted from the file system load file instead of being hardcoded in the
- prep scripts
-
- o After completing the reselection on, reselection off, or update
- superkickstart option, the system is rebooted automatically (after
- asking the user of course).
-
- o Updating an A3000 super kickstart no longer requires the user to hit
- RETURN. Errors are also detected now.
-
-
-
-
- Appendix B: Release 3.1 Disk Changes
- ====================================
-
- Following is a description of some of the important changes made to
- the disk-based system software between Release 3 and Release 3.1.
- This doesn't cover any changes after December 1992. Since 3.1 was
- still under development as of this writing, more changes are likely
- to be made to the software prior to release.
-
-
- C/ConClip
-
- o Now consumes over 3100 bytes less RAM when running. That means over 3K
- more RAM in every system we ship.
-
- o Localized
-
- o Now keeps iffparse.library and clipboard.device closed whenever they
- are not in use.
-
- o Added CLIPUNIT synonym to existing UNIT command-line option. This is to
- make it comply with the style guide and be more consistent with other
- programs such as WBPattern. The template is now:
-
- CLIPUNIT=UNIT/N,OFF/S
-
- C/Copy
-
- o Now correctly handles failure of SetProtection(), SetComment(), and
- SetFileDate(). Because SetComment() fails on NFS and on CrossDOS,
- SetFileDate() never was done on files, making the CLONE option not
- fully work. All three functions are considered failures only if
- IoErr() reports something different than ERROR_ACTION_NOT_KNOWN.
-
- o In case of error after a call to DupLock(), an error code was being
- set always to ERROR_NO_FREE_STORE instead of using the result of
- IoErr().
-
- o The default size for the buffers used was always equivalent to (BUF=0)
- which caused the buffers to be the size of the files being copied.
- This was contrary to the docs, and caused problems when copying large
- files through Envoy, as it could easily eat up all the memory in the
- system, not leaving enough for the memory needed by Envoy. The
- default size is now BUF=128 which gives a 64K buffer.
-
- C/IPrefs
-
- o Added needed support for the new display position control now offered by
- Overscan prefs.
-
- o If there is no icontrol.prefs file, IPrefs sets the default for Mode
- Promotion to ON. That means machines will have mode promotion
- on by default.
-
- o Now ensures that requested width, height, and depth for Workbench,
- fall within the allowed range as defined in the graphics database.
-
- C/Mount
-
- o Only change is the version number. Versions 39.1 and 39.2 of this program
- were accidentally numbered 38.1 and 38.2.
-
- C/Protect
-
- o Fixed error reporting. When used with wildcards, it would generate
- errors of the form "Can't set protection for #?" instead of giving a
- descriptive file name, and cause of error.
-
-
- C/SetPatch
-
- o Due to a bug fix late in the game, the filesystem broke with ExAll()
- on DCFS file systems if the lock passed in was not Examine()ed first.
- This patch fixes this by forcing an Examine() on a lock before
- the ExAll() is called. It only does this on systems with V39.22
- dos.library since only that ROM has the problem with DCFS ExAll().
-
- o ChangeVPBitMap() was not properly doing the bitplane swizzle needed for
- 8-bit HAM mode. The reason that this didn't show up earlier is that
- if the relationship between the bitplane pointers was the same
- in the original and new bitmaps, the bug would correct itself.
- So, you would only see this bug if your memory was fragged, or if
- some other allocations got in between the separate allocations of the
- bitplanes.
-
- o ScrollVPort() had the same bug as ChangeVPBitMap().
-
- The patch locks the ActiViewCprSemaphore, swizzles the bitmap,
- calls the old entry point, and unswizzles the bitmap, when called
- on a HAM-8 viewport.
-
- o The patches for graphics.library/ScrollVPort() and ChangeVPBitMap()
- now bump the graphics revision number to 90 if it is 89. This
- is so that installing the setpatch on an A1200 or A4000 will not
- break people using work-arounds for the bug.
-
- o When calling BltBitMap() with both source and destination interleaved,
- and a mask of -1, the low byte of d7 would be changed to the bitmap depth
- on exit. Patch saves d7, calls old, and restores it.
-
- o Added the graphics monitor/view association hash patch.
-
- o BltMaskBitMapRastPort() used to interpret the mask data incorrectly
- if both the source and destination bitmaps were interleaved.
-
- o Now includes the CP2024 Conner patch from the V37 SetPatch.
-
- C/Version
-
- o Obtaining the version of printer.device while it is loaded in memory would
- trash memory. This is because printer.device doesn't initialize its
- lib_IdString. Although Version was checking for NULL, the lack of
- string was causing problems in the output routines.
-
- o Fixed the FILE option which was causing the version numbers not to be
- displayed.
-
- Classes/Gadget/colorwheel.gadget
-
- o Querying the wheel for an explicit red/green/blue value would not get the
- most up to date brightness value from the gradient slider causing things
- to get slightly out of sync.
-
- o Fixed bug where trying to open the class library under 1.3/2.0 would
- cause a system crash instead of simply failing.
-
- Classes/Gadget/gradientslider.gadget
-
- o Fixed bug where trying to open the class library under 1.3/2.0 would
- cause a system crash instead of simply failing.
-
- Devs/mfm.device
-
- o Fixed small problem of the wrong return results when opening a device
- with an invalid unit number.
-
- o Changed the format function to update the physical track and invalidate the
- in-memory buffer,
-
-
- L/CrossDOSFileSystem
-
- o Booting off a CrossDOSFileSystem formatted disk does not crash an IBM
- machine (including CrossPC). It now presents a message "CrossDOS
- non-bootable disk!".
-
- o Now supports formatting a compatible MS-DOS hard disk partition. It
- is still not bootable.
-
- o Now prevents an MS-DOS hard disk partition to be formatted if not
- properly partitioned first.
-
- o Fixed problem with method of reporting results when asked to read or
- seek past end or beginning of file. Now follows V37/V39 FFS method.
-
- o Fixed problem with parsing a file or directory name with NULLs instead
- of the usual SPACEs for blanks. This occurs in PC-DOS not in MS-DOS.
-
- o Fixed bug that translated extended ASCII characters incorrectly when
- either the INTL or DANSK translation tables were selected.
-
- o Added stack size checking.
-
- o Fixed a bug that appeared when using the 'assign' command with this FS.
- A DOS deadlock could occur in certain circumstances. Added a delayed
- volume node addition and deletion algorithm.
-
- o Fixed a small problem of freeing memory allocated by the process spawned by
- the FileSystem_status process. This could cause memory shared to be reused
- when it was still needed. The fix was to add the memory entry list to the
- filesystem_status process which is the last process to exit. This only
- occurs if the target device could not be opened.
-
- o Fixed a problem that never showed up yet. Internally reproduced only.
-
- L/port-handler
-
- The main reason for this release is to fix problems that PRT: was having
- with Envoy printing.
-
- o Now has a version string.
-
- o Now requires V37 ROMs.
-
- o Now supports ACTION_IS_FILESYSTEM and ACTION_FINDUPDATE.
-
- o Once loaded, it remains in memory permanently which fixes many problems.
- For example, if any of SER: PAR: or PRT: had been active, double-clicking
- on Format, DiskSalv, or CrossDOS would cause Enforcer hits, or crashes
- on a machine not running Enforcer. This also fixes "copy foo to PRT:"
- when PRT: is sending data to the envoyprint.device.
-
- o When first loaded in memory, the handler patches its seglist pointer into
- the DOS device node of other related handlers. That is, if the handler is
- started as PRT:, it patches its seglist into the DOS nodes for
- SER: and PAR:. This means that all these devices end up sharing the same
- seglist for the port-handler, which can save memory and disk-loading time.
- It patches its seglist in any device node having "L:port-handler" as
- handler name.
-
- o This port-handler replaces both the standard port-handler on the Workbench,
- and the A2232 port-handler. As such, the handler supports being activated
- through a mountlist entry, and will process the BAUD, CONTROL, DEVICE,
- UNIT, and FLAGS keyword from a mountlist.
-
- o Because this port-handler replaces the A2232 one, it is possible to
- specify the baud rate and control flags when opening a serial unit. For
- example: Open("SER:9600/8N1",...);
-
-
-
- L/FileSystem_Trans/#?
-
- o Modified a few values for the INTL and DANSK translation tables to
- default to the SPACE character for untranslatable characters instead of
- NULLs.
-
- o Added a Mac translation table. This lets an Amiga read Mac ASCII
- files. This translation type can be selected from the CrossDOS
- commodity.
-
- Libs/asl.library
-
- o In screen mode requester, fixed formatting string so that horizontal scan
- rates with a decimal value less than .1 now come out right. That is,
- 29.02 was coming out as 29.2.
-
- o Fixed bug where trying to open the library under 1.3 would cause a system
- crash instead of simply failing.
-
- o Selecting Restore in the screen mode requester now correctly resets the
- "Overscan Type" and "AutoScroll" gadgets.
-
- o Fixed bug where the file requester's drive LED would remain lit after
- creating a new directory when in save mode.
-
- Libs/commodities.library
-
- o Fixed bug present since V36. Input events of type IECLASS_NEWPOINTERPOS
- did not get their extended data properly copied in various places,
- including through AddIEvents(). This resulted in the copy of these input
- event containing pointers possibly pointing to garbage.
-
- o Fixed bug where NEWPOINTERPOS was not considered a valid class by ParseIX().
-
- o Input events inserted into the input food chain as a result of the action
- of a translator object are now marked with the same time stamp as the
- input event which activated the translator object.
-
- o DisposeCxMsg() was accessing a global list without proper locking. This
- was quite nasty, since the list is typically accessed from both the
- commodity input handler, and from commodity programs running
- asynchronously.
-
- o Now nulls out the ie_NextEvent field of input events it copies. All
- input events generated by the library are copies of other events, and
- the ie_NextEvent value was left set to the original event's value.
- That means commodity was spewing out a lot of input events with bogus
- ie_NextEvent fields. This could cause crashes and confusion.
-
- o InvertKeyMap() now sets the ie_SubClass and ie_TimeStamp fields to 0
- in the input events it generates. These were being untouched which means
- they could contain garbage.
-
- Libs/iffparse.library
-
- o Fixed bug where trying to open the library under 1.3 would cause a system
- crash instead of simply failing.
-
- Libs/68040.library
-
- o During the setup of the MMU tables, if an expansion card was
- 0 bytes in size it would cause the MMU table setup to fail.
- 68040.library would continue to work but the magic MMU setup
- that would have been needed for the Zorro-III boards would
- not be done. This has been fixed.
-
- Monitors/#?
-
- o Now use a new algorithmic approach to generate the database entries.
- The result of this is that the amount of disk space taken up by these new
- monitors is 140 blocks, compared to 176 blocks they used to take.
-
- More important is that the dimensions of Multiscan, Euro72, Super72,
- DblNTSC and DblPAL are now greater than they used to be. This is especially
- important for DblNTSC and DblPAL, which are meant to resemble NTSC and PAL
- as closely as possible. The Dbl.... monitors are now 720 pixels wide for
- MaxOScan, compared to 724 for NTSC/PAL, and the 676 they used to be!
-
- Also, if not running with VGAOnly, the "dead" part of the display on the
- left hand side of the screen is now useable as VideoOScan.
-
- o Defined ScanDoubled versions of the Multiscan, Euro72 and Super72 monitors
- for better coercion on AA machines.
-
- o All these monitors should now work under ECS, and give even greater
- dimensions.
-
- o No AA modes should be in RAM on non-AA machines.
-
- o Changed the names of the monitors from DoubleNTSC/PAL.monitor to
- DblNTSC/PAL.monitor to be consistent with the ModeID name strings.
-
- o All the monitors now work only with graphics.library V39.
-
- o With Kickstart 39.106 and VGAOnly, DblNTSC/PAL screens can only be 704
- pixels wide max, whilst under the current kickstart they are 720 pixels
- wide. The DblNTSC/PAL monitor now checks for this.
-
- o Cleared up an enforcer hit with adding the A2024 after iprefs was run, and
- promotion was enabled.
-
- o Sprites were not being clipped properly in PAL A2024 modes when they
- crossed the panel boundaries. This was causing screen trashing when the
- pointer was at certain positions because the pointer would end up in the
- A2024's special control line.
-
- Prefs/IControl
-
- o Removed "Preserve Colors" gadget. The "Avoid Flicker" gadget has been moved
- into the "Miscellaneous" gadget group instead of being by itself in the
- "Coercion" group.
-
- o If there is no prefs file, mode promotion is now turned on by default.
-
- Prefs/Input
-
- o Now uses GTLV_MakeVisible tag to ensure the currently selected keymap is
- visible in the listview.
-
- Prefs/Overscan
-
- o On the edit screen, changed the label of the left gadget from "Use" to
- "OK".
-
- o Added code to support the new display positioning control. When you enter
- the overscan editing screen, if the mode supports it, there are four arrows
- that cause the entire visible portion of the display to move around. This
- is a wonderful new feature for DblNTSC, allowing sync-dependant centering
- of display modes. It is also possible to move the display by using the
- cursor keys.
-
- o Changed the background color on the edit screen from black to dark grey.
- This makes it much easier to detect when the display is being pushed too
- far off the right edge of the display, as the color of the display turns
- quite dim.
-
- o Made the edit screen SA_Exclusive in order to avoid folks dragging it down
- and revealing their WB. Since the program now makes dynamic changes to
- hsync and vsync, the WB can look bad when the edit screen is pulled down.
-
- o Made the edit screen SA_Interleaved.
-
- Prefs/Palette
-
- o When incapable of displaying a colored color wheel, the program now puts
- up a gadget labelled "Color Wheel..." in place of the actual color wheel.
- Clicking on this gadget causes the color wheel to come scrolling up from
- the bottom of the screen until it fills the whole display. This color
- wheel screen lets the user edit the current color using the wheel.
- There is a pair of "OK/Cancel" gadgets to accept or reject the new color
- selection. Clicking on either gadgets causes the color wheel to scroll
- off the bottom of the display. Kinda neat :-)
-
- o The sample section of the program now shows a sample screen title bar.
-
- o When opening on a custom screen, no longer has a window border and title
- bar.
-
- o When switching modes from 4 to multicolor and back, will no longer
- present an empty window if it is not capable of creating its new set
- of gadgets. The program will exit instead.
-
- o Selecting a color > 4 in the main palette, and switching to 4 Color
- Settings would not correctly redraw the gradient slider to use a color
- within the available selection.
-
- o Now uses color conversion routines from colorwheel.gadget instead of
- having inline duplicates.
-
- o Fixed incorrect flags set in some menu items so that click select of
- these items worked incorrectly.
-
- o Was letting you select between 4 and Multicolor Settings,
- even when running on a 4 color screen incapable of displaying the
- multicolor settings.
-
- o When running on an A2024 display, it no longer displays a color wheel,
- nor lets you display one.
-
- o Clicking in the sample section of the program causes the pen associated
- with the item clicked on to become selected in the pen list. That is,
- clicking on the sample window title bar will automatically select the
- "Active Window Title Bars" pen within the pen listview.
-
- Prefs/Printer
-
- o Now uses GTLV_MakeVisible tag to ensure the currently selected printer is
- visible in the listview.
-
- Prefs/PrinterPS
-
- o The default margins for graphics printing are now 1 inch on the left
- and right, instead of 1 inch on the left and 2 on the right (this was
- due to a typo).
-
- o When in the Graphics Scaling page, selecting "Last Saved" from the menu
- would not cause the sample graphics to be redisplayed with the new values.
-
- Prefs/ScreenMode
-
- o Fixed formatting string so that horizontal scan rates with a decimal
- value less than .1 now come out right. That is, 29.02 was coming out
- as 29.2.
-
- System/Format
- o From within the device selection listview, it was possible to double-click
- on two different devices, and have Format accept the selection. A check
- is now done so that both clicks of a double-click occur on the same device.
-
- o When formatting from Workbench, Format now ignores any trailing colons in
- the volume name. It would get all confused if someone tried to name
- a disk "Hello:" instead of simply "Hello". This fixes the
- most common error automatically.
-
- Tools/Calculator
-
- o Now gets the window title string from the current catalog instead of
- having it hardcoded to "Calculator".
-
- Tools/Commoditites/ClickToFront
-
- o Now also filters mouse clicks that come through as IECLASS_POINTERPOS
- and IECLASS_NEWPOINTERPOS, in addition to IECLASS_RAWMOUSE. This
- fixes the bug where ClickToFront did not work with events generated
- by tablet drivers.
-
- Tools/Commodities/CrossDOS
-
- o Fixed bug where the window would not open when there was no
- L:FileSystem_Trans directory, or no file within it.
-
- o Fixed incorrect cleanup path in case of errors while scanning directories.
- The bug would cause a crash the next time the window was opened.
-
- o Now only notifies CrossDOS handler tasks of changes in settings when
- new settings differ from the old ones.
-
- o No longer has the CrossDOS semaphore locked when it locks the DOS device
- list. This could potentially cause deadlocks.
-
- o Fixed bug where translation files were opened and read, but never closed.
-
- o Fixed bug that would cause a crash under V37 or harmless Enforcer hits
- under V39. To reproduce, start the CrossDOS commodity and copy a large file
- to PC0 (devs:Kickstart for example). While the copy is in progress, pick
- PC0 from the CrossDOS commodity and change its text filtering setting. Now
- click the close gadget of the commodity program. The window stays open
- until the large write operation completes. As soon as this happens, the
- window closes, and a crash occurs under 2.0.
-
- Tools/Commodities/FKey
-
- o When there was a key sequence in FKey with a command such as "Insert Text"
- with a string associated with it, switching the command to
- something else, and coming back to "Insert Text" would cause the current
- string to be "forgotten". To get it back, you had to click in the
- text gadget and press RETURN. This is now fixed.
-
- o Selecting a command such as "Insert Text", then typing in a string as
- argument would cause that string to be bound to the key sequence forever.
- That is, even if the command was switched to something like "Cycle Windows",
- the string argument would be saved out to disk and reloaded in memory
- the next time the program ran. This was incorrect as the command didn't
- have anything to do with the string. String arguments are now discarded for
- those commands that don't support them.
-
- o The active key sequence is now correctly highlighted in the listview.
-
- Tools/HDToolBox
-
- o Now supports Host ID in "Partitioning" screen. Now multiple machines
- can share a single disk using different partitions.
-
- o Added CHECKBOX_KIND gadget for allowing a block size other than 512 bytes
- in "File System Maintenance". To change file system block size in
- "File System Characteristics", select this gadget first.
-
- o Changed from BUTTON_KIND gadget to CYCLE_KIND gadget for "File System
- Type". They get labelled with their dostype as found in the file system
- resource list.
-
- o Added CHECKBOX_KIND gadgets for "Fast File System", "International Mode"
- and "Directory Cache".
-
- o Added CYCLE_KIND gadget for file system block size.
-
- o Recognizes the "Help" key now.
-
- HDSetup/HDSetup
-
- o Localized the name of the "Work" partition following request from Germany.
-
- Install/Install
-
- o No longer copies the A2232 port-handler from the install disk when an
- A2232 card is detected. The 39.1 port-handler handles the A2232
- automatically
-
-
-
-
- Appendix C: V39 ROM Changes
-
-
- Following is a description of most of the important changes made to the
- ROM-based system software between V37 and the initial release of V39. This
- doesn't cover changes made to modules discussed in other talks, such as
- graphics and Intuition.
-
-
- BootMenu
-
- o Brand new interface featuring 4 different displays:
-
- Main Page: Lets you select between "Boot Options...",
- "Display Options..." and "Expansion Board Diagnostic...".
- Clicking any one of these brings up the corresponding page.
- The "Boot" gadget resumes the boot operation using the
- options selected in the other pages, and the "Boot With
- No Startup-Sequence" gadget does the same, except it doesn't
- execute the startup-sequence.
-
- Boot Page: Lets you control boot-related options. The listview on the
- left lets you pick which device to boot from. The one on
- the right lets you enable/disable devices in the system.
- There is also a "Disable CPU Caches" gadget. It turns
- off the CPU caches for the current boot, which saves a lot
- of games that break on 68040 processors because of the big
- caches. Use or Cancel bring you back to the main page.
-
- Gfx Page: Lets you pick what mode to boot in, and what chip set to
- emulate. Use or Cancel bring you back to the main page.
-
- Diag Page: Lists all the boards in the system and shows their state
- (Working or Defective). This page is automatically brought
- up during system bootup if a board is defective.
-
- o Hitting any key toggles the display between NTSC and PAL. A message on the
- main page indicates this fact.
-
- cia.resource
-
- o Changed the priority of the interrupt servers to +120 such that
- they don't miss interrupts.
-
- con-handler
-
- o Fixed a low-memory trashing problem were CON: would signal a NULL task.
-
- o It no longer will use proportional fonts (or rather fail at trying to use
- them) when opened on a public screen.
-
- o It is no longer possible to size the window such that the entire
- interior goes away.
-
- o Fixes the title bars (the parsing routine wasn't skipping over delimiters).
- This also fixes the "funny" results you would get with malformed CON:
- lines (like con:0a/0/640/200/title having a title of "200").
-
- o Fixes negative sizes in the window spec. Height < 0 gives you max
- displayable height.
-
- o Always opens window big enough for one line of text.
-
- console.device
-
- o CMD_CLEAR fixed, was broken in V37.
-
- o Uses screen dimensions (rounded off to nearest byte width) to calculate
- maximum character map width instead of using bm_BytesPerRow. Likewise
- uses screen height instead of bm_Rows.
-
- o First pass at the scrolling optimizations. Recalcs scroll mask
- at reset time (set to defaults), at full clear screen time (FF, or
- HOME/CLS), and whenever you set new pen/cell/background colors
- via the standard SGR sequences.
-
- o Rework how conceal mode works - no longer sets rp_Mask to 0 which also
- disabled ALL output, including scrolling, clearing, etc... not good for
- character mapped consoles in particular since it causes the display & map
- to lose sync.
-
- o Scroll DOWN no longer tries to fill in vacated portions of the
- window with text in the off-screen buffer (if any). This was
- useless as a scrollback feature, could crash if you scrolled down more
- than one window's worth of text (ouch), didn't perform a window
- refresh (thereby leaving hidden characters in the visible map until
- you resized, or revealed), and was inconsistent with SMART REFRESH
- consoles - the application using scroll down would reasonably expect
- that the vacated portion is entirely empty.
-
- o First pass at breaking up large CMD_WRITEs. Now unlocks layers
- approx every 256 characters (this is simple, low-overhead code which
- does not try to be exact). Recalcs everything when layers are relocked.
-
- Helps quite a bit. No more locks for the entire file when doing
- COPY foo *. Makes console much more friendly; you can now resize
- windows (only minor delay) during long writes, click in other windows,
- etc.
-
- Note this simple code won't work for a long stream of text with
- no control characters; this however is extremely rare. Even text
- files have LF's, however in any case the problem is no worse than it
- was before.
-
- o The above feature makes it possible to cheaply break a CMD_WRITE,
- hence making it possible to easily fix the DisplayBeep() deadlock
- bug. DisplayBeep() is now postponed a few CPU instructions
- until after layers are unlocked.
-
- o First pass at modifying mouse tracking code (drag selection)
- to use input events instead of PeekQualifier().
-
- This code change was added so tablet drivers, and commodities
- can be used in character mapped consoles with selection capability.
- PeekQualifier() returns only what input.device thinks the qualifiers
- are; not what's seen by applications which watch/use the input stream.
-
- o Now supports a new private sequence ("ESC[ s") which sets the
- current SGR settings as your defaults. This affects ESC[0m
- (reset all SGR settings), ESC[39m (reset default primary pen),
- and ESC[49m (reset default secondary pen [cell color]).
-
- Text style info, and reverse mode (on/off) are also saved,
- and hence restored when ESC[0m is sent.
-
- This is intended as a user sequence for use in your shell-startup;
- it allows you to use other colors/settings, and not have these constantly
- reset by programs like MORE, LS, etc. I'm recommending it not be used by
- applications; only users for their shells. An application which can
- deal with this problem of SGR settings should continue to do whatever it is
- doing now. ESCc (reset console) does however reset the default
- SGR settings to their true defaults.
-
- o Downcoded pack.c. Is many times faster (if the maps
- are not disorganized; the maps become disorganized as text is
- scrolled off screen, so in these cases an initial resize can
- still take a moment - didn't want to touch that code though).
- For an organized map, resizing even very large windows (e.g.,
- Moniterm size) with 8x8 or smaller fonts (so we have a really
- large map) is virtually instanteous on a 3000, and nearly so
- even on 68000 machines. It still takes time to redraw
- the text (limited primarly by the Text() function), but the
- time needed to pack, and unpack the map is a fraction of
- what it was.
-
- o Borderfill code added so ESC[>#m fills to borders if an explicit
- line length and/or page length have not been set. No change to
- cu_XRExtant or cu_YRExtant in public portion of console unit structure.
-
- Border refers to the area outside of the normal console rendering area
- up to the window right/bottom borders. The size of this area is 0-N
- pixels where N is a maximum of the font width-1 or height-1.
-
- o OpenDevice() now fails if trying to open a character mapped console, but
- memory can not be allocated for the map. In V37, OpenDevice() returned
- success for this case which left you with a half functioning console
- window - clearly confusing for the user, and virtually worthless because
- of the lack of refresh info needed to fix up damage.
-
- OpenDevice() still works the same if you have a SIMPLE_REFRESH window,
- but did not ask for a character map (uncommon, but doable).
-
- o Also fixed a bug which you may never see now that the above code was added;
- clearing a simple refresh window which lacked a character map cleared
- a garbage rectangle; layers prevents this from being a crash, and code
- elsewhere inhibited negative rectangles. The bug exists in 1.3 also, and
- was partially fixed for 2.0; the bug use to be apparent in SUPER_BITMAP
- windows, and because the case of SIMPLE_REFRESH without a map is rare
- for console.device, the bug has probably never been noticed (found during
- memoration testing).
-
- o Removed code which checks to see if the application had drawn over the
- cursor in a console.device opened by the application. The kludge did a
- ReadPixel() of every pixel where the cursor was drawn, and if any bits did
- not match the expected color (also modified by pattern), cursor drawing was
- turned off for that console for as long as that console window was opened.
-
- Applications (few) which draw over the console cursor, but do not
- explicitly turn it off will now have a patterned rectfill the size
- of the cursor (generally 8x8) in the upper left hand corner of the
- window if the window is deactivated. This is a minor visual problem,
- though not one which should cause anyone to crash, or not run. The
- problem will also never be noticed if the console window is not
- deactivated.
-
- dos.library
-
- o Fixes a bug in Open() where if the path was more than 127 characters long,
- a random byte of memory would be trashed.
-
- o Has support for fib_OwnerXXX for the networking people. ExAll() supports
- ED_OWNER.
-
- o Added ExAllEnd().
-
- o Added SetOwner().
-
- o Fixed overrun error in FGets() (if no newline or EOF, it reads one
- byte too many into your buffer - workaround for V36/37 - allocate buffer
- 1 byte larger than passed in.
-
- o HUNK_RELOC32SHORT now works at the right value (1020). Also added a 32-bit
- PC-relative reference mode, mainly for >= '020-only executables.
-
- o Added GVF_SAVE_VAR. For SaveVar(), it will now do the same actions
- for ENVARC:whatever, as well as ENV:.
-
- o Fixed character classes in ParsePatternNoCase(). The classes weren't being
- promoted to upper case (i.e. [a-z] should have become [A-Z]). Note that
- only ParsePatternNoCase() was affected by this bug, not
- MatchFirst()/MatchNext()
-
- o Fixed FreeDosObject(xxx,DOS_CLI). It wasn't freeing the strings
- associated with the CLI.
-
- o FindCliProc(0) now returns NULL, even though it's an invalid
- CLI number.
-
- o For people passing in an RDArgs structure but no RDA_Buffer to ReadArgs(),
- it now properly clears out RDA_Buffer on FreeArgs(), so you can reuse it
- safely (without having to clear it out yourself).
-
- o StrToLong() was returning the number of white-space characters if no
- digits were found. It now properly returns -1.
-
- o Fixed GVF_DONT_NULL_TERM for global variables.
-
- o The initial console window on bootup now opens the size of the Workbench
- DClip.
-
- o Fixes the CliInitNewCLI() open of S:Shell-Startup when no FROM file is
- specified.
-
- o Fixed "Copy CONSOLE: foo" by making GetDeviceProc() know about CONSOLE:.
-
- o Localized "Software Failure".
-
- filesystem
-
- o Added support for DOS\4 and DOS\5 file systems which offer directory
- caching. DOS\4 and DOS\5 are orders of magnitude faster at directories
- than other file systems, since they keep a cached copy of all the
- ExNext()/ExAll() data appended to the directory. This does require a few
- extra block accesses on create and delete, and also after modifying the
- file (in Close()). Create speed dropped about 30%. However, directory speed is 7-20 times faster.
-
- For floppies, this usually means that dir or list take about 3/4-1
- second to start, and then you get most or all of the directory instantly,
- or within 1/2 second or so (it may take 1 or 2 seconds for really big
- directories).
-
- o Fixed a bug with delete for non-DOS\5 partitions.
-
- o Fixed a random memory trash in the filesystem in a race condition.
- When two renames hit just the right timing, one has to wait on the
- other, and the wait routine used the wrong (garbage) register to get
- the head of the list. This trashed 1 longword of semi-random memory,
- and then hung the rename forever.
-
- gadtools.library
-
- o LayoutMenus() and LayoutMenuItems() recognize some new tags to support
- NewLook menus:
-
- GTMN_NewLookMenus (BOOL): requests NewLook menu treatment.
- GTMN_Checkmark (struct Image *): checkmark you'll use in menus
- GTMN_AmigaKey (struct Image *): Amiga-key image you'll use in menus
-
- Basically, if you open your window with WA_NewLookMenus, also lay out your
- menus with GTMN_NewLookMenus. If the menu-item font will be the screen's
- font, that's all you need to do. If the menu-item font is something else,
- you must create a checkmark and an Amiga-key image, and pass each one to
- both Intuition (WA_Checkmark and WA_AmigaKey) and to GadTools
- (GTMN_Checkmark and GTMN_AmigaKey).
-
- GTMN_FrontPen is now recognized. If GTMN_NewLookMenus is specified, this
- attribute defaults to the screen's BARDETAILPEN, else it defaults to
- "do nothing", which allows the GTMN_FrontPen tag that may have been passed
- to CreateMenus() to still hold.
-
- o STRING_KIND, INTEGER_KIND, and BUTTON_KIND gadgets now support the
- GA_Immediate tag.
- o You can now put an arbitrary command string in the right-hand side
- of a menu, where the Amiga-key equivalent goes. To do this, point
- the NewMenu nm_CommKey field at the string (eg. "Shift-Alt-F1), and
- set the new NM_COMMANDSTRING flag in nm_Flags.
-
- o If a window has multiple checkboxes or radio buttons, a separate
- image is no longer allocated for each one.
-
- o The bevel box of the slider and listview now refresh with the gadget,
- instead of with GT_RefreshWindow().
-
- o Scrollers with GA_RelVerify set weren't sending IDCMP_GADGETUP messages
- when the arrow buttons were released.
-
- o GadTools now uses SetABPenDrMd() when advantageous.
-
- o New GTMX_Scaled and GTCB_Scaled tags instruct GadTools to scale the mx
- button and checkmark respectively to the dimensions supplied in the
- NewGadget ng_Width and ng_Height fields. Under V37, or in the absence of these tags, the dimensions are fixed. Added #defines for those dimensions.
-
- o GadTools now has a GT_GetGadgetAttrsA() function (and a
- GT_GetGadgetAttrs() varargs version). This function retrieves
- attributes of the specified gadget, according to the attributes chosen
- in the tag list. For each entry in the tag list, ti_Tag identifies
- the attribute, and ti_Data is a pointer to the long variable where you
- wish the result to be stored.
-
- o Checkboxes now return their "selected" state in the IntuiMessage->Code
- field.
-
- o Many new tags for CreateGadgetA() were added:
-
- GTTX_FrontPen and GTTX_BackPen to let the color of TEXT_KIND
- gadgets be controlled.
-
- GTNM_FrontPen and GTNM_BackPen to let the color of NUMBER_KIND
- gadgets be controlled.
-
- GTNM_Format to specify the formatting string to use with
- NUMBER_KIND gadgets. This is so a localized number format using
- "%lD" instead of "%ld" can be used.
-
- GTNM_MaxFormatLen to specify the maximum length of the string that
- can be generated by GTNM_Format.
-
- GTTX_Justification and GTNM_Justification to allow for right
- and center justification on TEXT_KIND and NUMBER_KIND gadgets.
-
- GTSL_MaxPixelLen lets you specify the maximum pixel length the level
- display of a SLIDER_KIND gadget will occupy. This allows proportional
- fonts to be used with sliders.
-
- GTSL_Justification specifies how the level display of a SLIDER_KIND
- gadget is to be justified within the width allocated by
- GTSL_MaxPixelLen.
-
- GTLV_MakeVisible for listviews. You pass it an item number and it
- makes sure it is visible within the listview display.
-
- o Many new tags for GT_SetGadgetAttrsA():
-
- GTTX_FrontPen, GTTX_BackPen, GTNM_FrontPen, GTNM_BackPen, GTNM_Format
- GTTX_Justification, GTNM_Justification, GTSL_Justification, and
- GTLV_MakeVisible all have the same purpose as described for
- CreateGadgetA() above.
-
- MX_KIND gadgets now support GA_Disabled.
-
- GTSL_DispFunc and GTSL_LevelFormat are now changeable via
- GT_SetGadgetAttrs() instead of being create-time only attributes.
-
- o Added the GTBB_FrameType tag which gives access to the new frame types
- available in Intuition. You pass the tag to DrawBevelBox() and can specify
- BBFT_BUTTON, BBFT_RIDGE or BBFT_ICONDROPBOX.
-
- o GT_SetGadgetAttrs() can now safely be called when the gadget being affected
- is not attached to a window, by passing a NULL window parameter
-
- o Specifying GTTX_CopyText and not GTTX_Text now works for TEXT_KIND gadgets.
-
- o TEXT_KIND or NUMBER_KIND gadgets that have the GTTX_BackPen or GTNM_BackPen
- tags specified look visually cleaner when changing the gadget text
- using GTTX_Text or GTNM_Number than those without. Listviews take
- advantage of this when applicable.
-
- o The value of GTSL_Level is now bounds checked at CreateGadget() time in
- addition of at GT_SetGadgetAttrs() time.
-
- o Fixed bug where doing GT_SetGadgetAttrs() on a MX_KIND gadget and not
- passing the GTMX_Active tag would reset the active selection to #0 instead
- of leaving it alone.
-
- o The NewGadget.ng_TextAttr field can now be NULL whenever a gadget is
- created. In such a case, the screen's TextAttr is used (screen's TextAttr
- is determined from the VisualInfo in the NewGadget structure).
-
- o The level display of SLIDER_KIND gadgets is now rendered with background
- set to BACKGROUNDPEN instead of 0, which is more "correct".
-
- o Now uses SetWriteMask() instead of SetWrMsk().
-
- o Added support for gadget help in all gadget types.
-
- o GadTools now handles the new ExtIntuiMessage generated by Intuition.
-
- o Many enhancements to PALETTE_KIND gadgets:
-
- Palette gadgets no longer display a box filled with the selected color.
- The selected color is instead denoted by a box drawn around the color
- square in the main palette area.
-
- Palette gadgets now allow strumming, and right mouse button
- cancellation.
-
- GTPA_ColorTable is a new tag to support sparce color tables in
- gadtools. Ths tag can be passed at create/set/get time.
-
- GTPA_NumColors is a new tag to specify the total number of colors to
- display. This allows amounts of colors that are not powers of 2. This
- tag is also good at create/get time.
-
- GTPA_ColorOffset is now supported at get/set time.
-
- Renders itself much faster, this makes a big difference on 256 color
- screens.
-
- Now does quite smart layout of the color squares. An attempt
- is made to keep them as square as possible, based on the aspect ratio
- information obtained from the gfx database. As many colors as possible
- are put on the screen, until things get too small in which case the
- upper colors are thrown away.
-
- o MX_KIND gadgets now support ng_GadgetText and will display the label
- in relation to the group of mx gadgets.
-
- o Added GTMX_TitlePlace tag. This determines where the title of a MX_KIND
- gadget is displayed. If this tag is not provided, the title is not
- displayed. This is required for compatibility.
-
- o Fixed size calculation errors in listview present since V37. This
- may cause certain listviews to change in size from their V37 size.
-
- o Revamp of listviews:
-
- ListView lines can no longer end up complemented in certain tricky
- situations involving detaching lists.
-
- ListViews correctly track the selected line when you click in them.
-
- ListViews were clipping the text four pixels early on the right.
-
- Added GTLV_CallBack. This tag allows a callback hook to be provided
- to gadtools for listview handling. Currently, the hook will only
- be called to render an individual item. This adds the very useful
- ability to define a callback hook which is used to scroll complex
- items such as graphics, etc.
-
- Listviews now allow strumming. That is, holding down the left mouse
- button and moving the mouse up or down causes the active selection
- to track the mouse. Moving the mouse off the top or bottom of the
- listview causes the list to scroll.
-
- Listviews that used to have a display or string gadget underneath
- them now have a highlight bar to indicate the selected item. This is
- in anticipation of listview multi-selection. If the listview had a
- display gadget, it no longer does as the highlight bar is used. If
- a listview had a string gadget, it retains it.
-
- Listviews highlighting is done using the pen-spec method instead of
- the 1.3 complementing method.
-
- Listviews are much faster at rendering and scrolling, which makes a
- noticeable difference in 8 bit planes
-
- Added GTLV_MaxPen tag to specify the maximum pen number used by
- a custom rendering callback hook. This enables more optimal scrolling
- and screen updates.
-
- {GTLV_Selected, ~0} is now supported at both create and set times.
-
- {GTLV_Labels, ~0} is now supported at create time.
-
- Listviews now support GA_Disabled. This causes the list area to be
- ghosted, but the scroller and arrows remain unghosted.
-
- o When cloning a rastport for internal use, no longer copies the TmpRas
- field of the original rastport, which should eliminate some potential
- bugs.
-
- o Changed the definition of TEXTIDCMP and NUMBERIDCMP in gadtools.h to be
- (0) instead of (NULL), to keep the Manx compiler happy.
-
- o It is now safe to call GT_GetGadgetAttrs() and GT_SetGadgetAttrs() with
- NULL gadget pointers.
-
- o When GT_SetGadgetAttrs() is called on an active STRING_KIND or
- NUMBER_KIND gadget, the gadget is automatically reactivated after
- its string is changed. Although this reactivation flickers,
- the functionality is quite useful.
-
- o Now copies a complete TTextAttr structure when needed to fix potential
- problems with WeightTAMatch(). This is only done to create underlines
- under gadget labels.
-
- o Fixed example in CreateGadget() autodoc. Only had a single argument in the
- call to GT_RefreshWindow()
-
- o BOOPSI images are now allowed in gadtools menus.
-
- o Added the GTTX_Clipped tag for TEXT_KIND gadgets.
-
-
- ramdrive.device
-
- o Uses AllocMem(xxxx,MEMF_REVERSE!MEMF_KICK!MEMF_NO_EXPUNGE) instead
- of private AllocHigh() code.
-
- o Uses CopyMem() instead of an unrolled loop. CopyMem()'s MOVEM's are
- faster than the unrolled loop used previously.
-
- o Protects KickTag/KickMem list with FORBID/PERMIT inside of KillRad()
- vector used by REMRAD. Fixes possible crash if some other task
- is fiddling with these lists at the same time.
-
- ram-handler
-
- o Fixes the long standing bug where if the file you were examining with
- ExNext() is deleted, RAM: goes off into never-never land (and your system
- follows). If the file is deleted, it will restart at the beginning of the
- directory.
-
- o Disabled softlinks in RAM: to save ROM space.
-
- shell
-
- o NewShell/NewCLI now open full with (like Shell from WB).
-
- o NewShell/NewCLI now handle FROM fields up to 255 long (up from 127) and
- errors out if FROM or WINDOW are too long.
-
- o Resident module handling now properly Forbid()s around seg_UC++/--.
-
- o Prompt now handles %%.
-
- o Removed two harmless enforcer hits at boottime.
-
- o If a "command `command...` ..." fails, it no longer inserts the error
- message and continues (FailAt is used to determine failure).
-
- o Added evil kludge to solve the problem of 1.3 SetClock crashing on 68040s.
-
- o Fixes the write to rom on <> redirection.
-
- o NewShell/NewCLI no longer print error messages if no S:Shell-Startup is
- present.
-
- timer.device
-
- o Timer keys off new GfxBase flag for determining EClock frequency
- since PAL/NTSC is now software selectable.
-
- trackdisk.device
-
- o Post-write delay has been moved from 2ms (spec is 1.2ms) to 3ms,
- and side settle delay from 1ms (spec is 0.1ms) to 1.5ms. This should fix
- most A1010's out there. In addition, both of those values have been made
- part of the public unit structure like settle delay and step delay, so
- people with REALLY bad A1010's can back it off as far as they need to
- (or setpatch can).
-
- o Fixes a nasty oversight in the HD floppy handling. After switching
- from a HD floppy to LD floppy and back to HD floppy, you could never
- safely write to an HD floppy unless you formatted an HD floppy first.
-
- What happened was that the extra slop area at the front of the write
- wasn't getting set to $aaaaaaaa, it was being left with garbage from the
- last LD read (since LD uses less slop, it's start-read spot is earlier).
- Format re-inits the entire buffer, as does the first switch to an HD
- floppy (only the first, since it switches to a larger buffer then).
-
- o Fixed a bug where if a track was totally unreadable it returned the number
- of retries as the IO_ERROR instead of TDERR_NoSecHdr (this was causing the
- "Error 11" stuff when you popped a disk while copying from it).
- utility.library
-
- o Downcoded all tag calls from C to assembly which yields substantially
- faster performance.
-
- o Removed 68020-specific versions of the date conversion routines.
-
- o Fixed bug in MapTags() where the "includeMiss" parameter didn't work.
-
- o Cleaned up and expanded autodocs.
-
- o Cleaned up public include files.
-
- o Added comments in the autodoc entries for the 4 32-bit math routines,
- to the effect that they preserve address registers, and that A6
- does NOT have to be loaded in order to call the routines. This is an
- exception to the standard rule, but can avoid register shuffling which
- is important in low-level math routines.
-
- o Made the math routines several cycles faster on 68000 machines.
-
- o Added SMult64() and UMult64() which do 32x32=64 bit integer math.
-
- o Added ApplyTagChanges().
-
- o Added two new library calls that are mainly here to help intuition get
- smaller. These are PackStructureTags() and UnpackStructureTags().
-
- o Added the NameSpace code.
-
- o Added GetUniqueID().
-
-
-
-
-
- Appendix D: Release 3.1 ROM Changes
-
-
- Following is a description of most of the important changes made to the
- ROM-based system software between Release 3 and Release 3.1. This doesn't
- cover changes made to modules not discussed in this talk. It also doesn't cover
- any changes after December 1992. Since 3.1 is still under development as of
- this writing, more changes are likely to be made to the software prior to
- release.
-
-
- BootMenu
-
- o Fixed bug where the chip type mutual exclude gadget was being displayed
- even on pre-ECS machines.
-
- exec.library
-
- o Added the full support for the Zorro-III quick interrupts.
- The new LVO (in an old slot) ObtainQuickVector() is used to allocate
- the vector. There is no deallocation since this is basically
- a configuration issue and not a dynamic thing.
-
- o On machines with PCMCIA cards, EXEC now makes sure the interface
- is turned on at boot time and then will turn it off before configuration.
- This should let a full 8-meg of RAM be added in the Zorro-II space.
- This change requires an update to the credit card resource/device
- such that it will correctly turn on the interface if needed.
-
- o The Quick Interrupt vectors that have not yet been added used to
- be -1. Now they point at an Alert that is the new Unexpected
- Quick Interrupt.
-
- gadtools.library
-
- o Fixed bugs in clipping code in TEXT_KIND and NUMBER_KIND gadgets. The
- clipping didn't work correctly on right and center justified text, and
- was under-evaluating the number of pixels available for the text in a
- gadget that didn't have borders.
-
- o Fixed bug in the calculation of the default value for the GTSL_MaxPixelLen
- tag. This caused odd clipping of the number display for sliders whenever
- the title of the gadget wasn't on the same side of the slider as the
- display of its current value.
-
- o Fixed GTJ_CENTER option for the various GTXX_Justification tags. The way
- centering was done could cause certain characters to get lost.
-
- carddisk.device
-
- o Now flushes cache during data writes in anticipation of 040 copyback
- cache on A1200 (no hardware support for PCMCIA memory space data
- cache control provided, so the data cache is still potentially
- a problem when programming flash rom; means turning off the
- data cache globally for 030/040 A1200's to support 6-10us
- write/verify timing).
-
- card.resource
-
- o Now leaves PCMCIA slot disabled if any RAM is configured at $600000;
- this allows use of >4Megs of 24bit RAM on the A1200 at the expense of
- being unable to use the PCMCIA slot.
-
- o Partial work around for a hardware bug in our PCMCIA implementation
- which presents 2Meg+ addresses everytime we access ATTRIBUTE memory.
- This causes a problem when a >2Meg card which ignores REG is used
- (and a potential problem with any card which tries to decode the entire
- address when REG is set). The former problem is kludged around by trying
- to sniff out mirroring of 4 bytes at $A00000 and $800000 but not mirrored
- at $600000.
- - Tested with:
- Fujitsu 512K SRAM (ignores REG)
- Fujitsu 128K SRAM (decodes entire address)
- Panasonic 512K SRAM (returns $FF for attribute memory)
- HP 128K SRAM (has 16 bytes of attribute memory)
- NewMedia 2M PSRAM (ignores REG)
- NewMedia 4M PSRAM (ignores REG - this is the card which demonstrates
- the problem)
-
- o Considerably faster memory sizing for SRAM/DRAM cards (does test of
- every 256 words/long-words) - tested with:
-
- Fujitsu 512K SRAM (ignores REG)
- Fujitsu 128K SRAM (decodes entire address)
- Panasonic 512K SRAM (returns $FF for attribute memory)
- HP 128K SRAM (has 16 bytes of attribute memory)
- NewMedia 2M PSRAM (ignores REG)
- NewMedia 4M PSRAM (ignores REG - this is the card which demonstrates
- the problem)
-
- o CardMemoryMap structure extended for V39 card.resource. Now has
- COMMON/ATTR/IO Memory Zone size for lookup via structure. Will be used
- to provide splitting of memory zones in the future if needed. No change
- for existing software.
-
- o BVD1/SC, BVD2/DA, and BSY/IRQ status change interrupts can now be
- individually enabled/disabled. WR (Write-Protect) status change
- interrupts are always enabled (rare), and there is no change in the
- defaults. This is intended for future use if needed (e.g., Flash-ROM
- which expects software to poll SC during programming; better performance
- can be obtained if interrupts are not generated). If needed on the A600,
- this can be implemented as documented work around, or SeFunction() of
- CardMiscControl(). No expected change for existing software;
- defaults are the same as they use to be in V37 card.resource. Spurious
- interrupts (change true, but interrupt disabled) are cleared by the
- resource software, and hidden from the status change callback hook.
-
- o Secondary callback option for status change interrupts; allows
- high-performance hardware to be serviced via interrupts only (instead of
- signalling a task).
-
- o Flush Cache when ReleaseCard() is called. A flush before full release
- ensures that no more writes will occur once the caller returns from
- ReleaseCard(). This is to support the 040 copyback cache when/if an 040
- becomes available for the A1200. Would prefer control over the data cache
- for PCMCIA space independent of the first 4MEG of 24bit Fast RAM, but we
- don't have this feature. Lack of Data Cache control for PCMCIA space is
- still potentially problematic for use of FlashROM programming which
- requires disabling the DATA cache for 030/040 equipped A1200's so that fast
- (6-10us) write/read operations can be performed during programming.
- Disabling the DATA cache during FlashROM writes means disabling globally.
-
- dos.library
-
- o Fixed bug in RemAssignList(): it wouldn't remove the first lock in the
- assign.
-
- o AttemptLockDosList() was returning NULL or 1 for failure instead of NULL.
-
- o Made RunCommand() free any memory added to the tc_MemEntryList by
- the command being run. tc_MemEntry is now saved and emptied before calling
- the command, and restored after any added memory is freed.
-
- o Fixed ExAll() emulation to not lose 1 file each time the list is broken
- up into multiple ExAll() calls.
-
- o Removed broken attempted fix for rda_Buffer. Autodocs now reflect that
- you must restore rda_Buffer before each call to ReadArgs() if you pass
- in an RDArgs structure. Now always clears rda_Buffer in FreeArgs().
-
- o SetVBuf() enabled.
- o Changed some prototypes to avoid c++ reserved word "template". Changed
- VPrintf()/VFPrintf() prototypes to VOID * from LONG * to reduce useless
- compiler warnings/casts.
-
- o GetDeviceProc() now returns errors better (especially
- ERROR_NO_MORE_ENTRIES). It used to lose error codes by calling
- UnLock().
-
- o SetVBuf() now updates the filehandle so it won't overwrite the buffer
- with a smaller one if SetVBuf() is called before doing buffered IO.
- Also it doesn't allocate anything if the new size is the same as the
- old.
-
- o SetVar() now creates subdirectories as needed (including multiple ones)
- if they do not exist already (in ENV: and in ENVARC: if GVF_SAVE_VAR
- is set). Also, it now preserves any IoErr() and won't try to save to
- ENVARC if there is an error saving to ENV:.
-
- o Modified to fix an edge condition which existed when making the mod to
- SetVBuf().
-
- expansion.library
-
- o New A1200-specific build that can detect CPU Slot RAM ($08000000)
- if you have a 32-bit addressing CPU installed. The CPU slot area
- is 128meg in size (just like the A3000) but has the addition of
- a wrap check at each 1meg of space in the CPU address space to make
- low-cost RAM expansion possible without jumpers. (It is now possible
- to get 128Meg SIMMs so a single SIMM on a CPU card could make a
- 128Meg of FAST RAM system )
-
- The reason that this has to be A1200 specific (at least for now)
- is that the behavior of the existing A500/A2000 CPU cards with
- respect to 32-bit addresses is very undefined. They act very
- strangely and differently making it very difficult to safely figure
- out if these cards are operating correctly or not.
-
- filesystem
-
- o Fixed deletion of the destination of a hardlink - this was badly
- broken in all versions of the FS, DCFS just made it easier to hit.
- This was causing spurious "Checksum Error on Block 0" errors (and
- potentially others), especially when UUCP was using a DCFS partition.
-
- o Fixed a return code which would make softlinks not work if a softlink
- to a directory is in the middle of a path.
-
- o Fixed the buffer overrun on ExAll() with ED_COMMENT if the first
- character was >$80 (and lost the first character of comments).
-
- o Fixes updating the date of a directory that changes in the parent
- of that directory's dircache.
-
- o There were old offsetting bugs in the ExAll() filename/comment copying
- code. When I fixed the code not to copy too many bytes, the clear was
- being done to the wrong byte.
-
- filesysres.resource
-
- o Now matches the FS version change.
-
- workbench.library
-
- o Adjusted the sizes of the OK/CANCEL and SAVE/CANCEL gadgets in
- the Workbench requesters to match the rest of the system.
-
- o Fixed a long standing bug that was just found: The system would crash
- (sometimes) or cause Enforcer hits if files were deleted within
- a drawer that was also selected for deletion. This one has
- a fundamental flaw in Workbench which had to be patched with some
- rather tricky organization of tests...
-