home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / CBMDevKit1.dms / CBMDevKit1.adf / tutorials.lha / tutorials / V38_V39_OS_Changes < prev    next >
Encoding:
Text File  |  1993-11-04  |  133.1 KB  |  3,176 lines

  1.  
  2.                V38, V38, V40 Changes
  3.  
  4.        (c) 1992-93 Commodore-Amiga, Inc.  All Rights Reserved
  5.  
  6. ------------------------------------------------------------------------
  7. NOTE: This document was written before the release of V39 and therefore
  8. some of the changes noted may have actually ended up in earlier or later
  9. releases, or may not have occurred at all.  However, it is still a very
  10. useful document summarizing changes to the disks and the ROM.
  11. V38 is 2.1, V39 is 3.0, and V40 is 3.1.
  12. ------------------------------------------------------------------------
  13.  
  14. Many changes were made to the system software for V39.  The major
  15. differences are in the graphics subsystem and in Intuition.  There were
  16. also hundreds of changes made to other areas of the system software.  This
  17. document presents the majority of these changes, and explains the possible
  18. impact of these new features on the developer. 
  19.  
  20. V39 requires both a new disk set, and a new ROM.  V38 is a disk-based
  21. upgrade requiring only a new disk set if your system have 2.04 Kickstart.
  22.  
  23. The main changes to the contents of the disks in V39 are detailed in
  24. Appendix A and in Appendix B.  Here are the highlights of changes to
  25. system disk organization:
  26.  
  27.    o The V38/V39 system software is shipped on FFS floppies.  This is
  28. mainly to increase available storage. 
  29.  
  30.    o Under V38, a Storage drawer was created on the Extras disk.  Under
  31. V39, a separate Storage disk is provided.  Storage contains the same five
  32. drawers as in the Devs drawer.  This is where things that are not
  33. currently used are kept.  To activate a monitor, the user is expected to
  34. drag the desired monitor icon from Storage/Monitors to Devs/Monitors.
  35. Same applies for printer drivers, keymaps, DOS drivers, and datatypes
  36.  
  37.    o The Fonts disk is now called FONTS instead of AmigaFonts.  This
  38. enables the disk to be used directly whenever fonts are needed by the
  39. system, instead of requiring the user to assign FONTS: to the disk. 
  40.  
  41.    o Note that there are different specific disk sets shipped with
  42. different machines and packages.  For example, low-end V38 systems do not
  43. get a Locale disk, and instead have a Locale directory on the Workbench
  44. disk. 
  45.  
  46.    o Deleted Files.  The following system files present under V37 are no
  47. longer included with the system software. 
  48.  
  49.   Devs/narrator.device    Deleted as part of the removal of speech support.
  50.   Libs/translator.library Deleted as part of the removal of speech support.
  51.  
  52.   Tools/Colors Removed in V39 because its functionality conflicted with
  53. pen sharing, and was generally not very nice to applications. 
  54.   Utilities/Display This program is replaced under V39 by the more
  55. flexible and powerful MultiView utility. 
  56.   Utilities/More.info This icon has been removed because we want to
  57. encourage users to use MultiView instead of More when running from
  58. Workbench.  The More program itself remains on the disk since it is
  59. referenced by many read me files, and the like. 
  60.  
  61.    o Speech Support.  The various components supporting synthesized speech
  62. are no longer included with the operating system.  This can be a serious
  63. liability for applications depending on synthesized speech for correct
  64. operation.  The V37 components supporting speech still function correctly
  65. under V38 and V39.  The V38/V39 installation procedures do not remove the
  66. V37 files when updating a system. 
  67.  
  68. Further etails of how the system disks have changed can be found in
  69. Appendix A and B.  V39 ROM changes are listed in Appendix C and D. 
  70.  
  71.  
  72. V38/V39 API Changes
  73. ===================
  74.  This section discusses what changes in the programming model can affect
  75. developers. 
  76.  
  77. Finding Version Information
  78.  
  79. An important point to mention is how to determine if a system is running
  80. V38 instead of V37.  The recommended approach is to open version.library,
  81. and check its version.  For example:
  82.  
  83. struct Library *VersionBase;
  84. if (VersionBase = OpenLibrary("version.library",0))   
  85. {
  86.        if (VersionBase->lib_Version >= 38)
  87.        {           /* user is running at least V38 Workbench */       }
  88.        else
  89.        {           /* user is running at most V37 Workbench */       }   
  90. }   
  91. else   
  92. {     /* can't tell what the user is running, assume the minimum version
  93.        * that your application supports        */   
  94. }
  95.  
  96. The above technique lets you determine which general version is in use for
  97. the disk-based software.  Never assume this is a reflection of every other
  98. library in the system.  For example, if you need features that are only
  99. present in V38 asl.library, you must explicitly check the version of
  100. asl.library before using it.  The same is true for all other system
  101. libraries. 
  102.  
  103. To determine the general version of the ROM, use
  104. SysBase->LibNode.lib_Version.
  105.  
  106.  
  107. GadTools Library
  108. ================
  109.  
  110. Many enhancements were made to GadTools for V39.  Below you will find
  111. short descriptions of some of the new features.  A complete list of all
  112. the new features is provided in Appendix A, and more details can be had in
  113. gadtools.doc. 
  114.  
  115. Menus.  GadTools fully supports Intuition's NewLook menus.  NewLook menus
  116. can be added to an application by providing the {WA_NewLookMenus, TRUE}
  117. tag to OpenWindowTags(), and providing the {GTMN_NewLookMenus, TRUE} tag
  118. to LayoutMenus().  These two tags will give your application NewLook
  119. menus.  The pens used to render these menus are controllable by the user
  120. through the V39 Palette prefs editor. 
  121.  
  122. You can now put an arbitrary command string in the right-hand side of a
  123. menu, where the Amiga-key equivalent normally goes.  To do this, point the
  124. NewMenu.nm_CommKey field at the string (e.g., "Shift-Alt-F1), and set the
  125. new NM_COMMANDSTRING flag in NewMenu.nm_Flags. 
  126.  
  127. GT_GetGadgetAttrs().  GadTools now has a GT_GetGadgetAttrsA() function
  128. which retrieves attributes of the specified gadget, according to the
  129. attributes chosen in the tag list.  For each entry in the tag list, ti_Tag
  130. identifies the attribute, and ti_Data is a pointer to the long variable
  131. where you wish the result to be stored. 
  132.  Here is an example:
  133.  
  134.      LONG top = 0;
  135.      LONG selected = 0;
  136.      LONG result;
  137.      result = GT_GetGadgetAttrs(listview_gad, win, NULL,
  138.                                 GTLV_Top, &top,
  139.                                 GTLV_Selected, &selected,
  140.                                 TAG_DONE);
  141.      if (result != 2)
  142.      {
  143.          printf( "Something's wrong!" );
  144.      }
  145.  
  146. Palettes.  GadTools palette gadgets got a major overhaul for V39.  There
  147. are a few new features, some reduction in memory usage, and an increase in
  148. performance. 
  149.  
  150. Palette gadgets no longer display a box filled with the selected color.
  151. The selected color is instead denoted by a box drawn around the color
  152. square in the main palette area.  This change slightly impacts the size of
  153. palette gadgets.  Depending on the conditions, V39 PALETTE_KIND gadgets
  154. can be slightly smaller than the V37 ones. 
  155.  
  156. Another change which can affect the size of the palette gadgets is the
  157. smarter layout of the color squares.  An attempt is now made to keep the
  158. color squares as square as possible, based on the aspect ratio information
  159. obtained from the gfx database.  As many color squares as possible are put
  160. on the screen, until things get too small in which case the upper colors
  161. are thrown away.  The GTPA_ColorTable tag was added in support of sparce
  162. color tables.  It lets you define arbitrary pens to be used to fill-in the
  163. color squares of the palette gadget. 
  164.  
  165. The GTPA_NumColors tag lets you define the exact number of colors to
  166. display in the palette gadget.  Under V37, the GTPA_Depth tag played the
  167. same role.  The problem with GTPA_Depth is that only multiples of 2 in
  168. number of colors can be specified.  GTPA_NumColors allows any number of
  169. colors. 
  170.  
  171. Listviews.  GadTools listviews got a major overhaul for V39.  There are a
  172. few new features, some reduction in memory usage, and an increase in
  173. performance. 
  174.  
  175. The biggest difference that is readily noticeable is the disappearance of
  176. the display box at the bottom of the scrolling list area.  Instead of
  177. showing the selected item in the display box, the selected item remains
  178. highlighted within the scrolling list.  This was done to prepare listviews
  179. for multi-select support.  Multi-selection requires a highlighting scheme
  180. as a display box would not work.  The removal of the display box has a
  181. slight impact on the size of the listview.  Listviews that had a display
  182. box under V37 got slightly smaller vertically under V39. 
  183.  
  184. The other major addition to GadTools listviews is GTLV_CallBack.  This tag
  185. allows a callback hook to be provided to gadtools for listview handling.
  186. Currently, the hook only gets called to render an individual item.  Every
  187. time GadTools wishes to render an item in a listview, it invokes the call
  188. back function, which can do custom rendering.  This allows GadTools
  189. listviews to be used to scroll complex items such as graphics and images. 
  190.  
  191. Finally, listviews can now be disabled using {GA_Disabled, TRUE}.
  192.  
  193.  
  194. The ASL Library
  195. ===============
  196.  
  197. ASL got rewritten for V38.  Its file requester is now extremely fast and
  198. offers more features to the user, and to the programmer.  Its font
  199. requester now comes up about twice as fast the first time it is displayed,
  200. and instantaneously for subsequent uses.  ASL also now includes a screen
  201. mode requester, which is very useful in the context of AA, and will be
  202. invaluable for AAA and RTG. 
  203.  
  204. New Names.  V38 <libraries/asl.h> contains new names for most of the
  205. structures, tags, and flag bits used by ASL.  The names are now
  206. consistent, and more descriptive.  We encourage the use of the new names
  207. as much as possible. 
  208.  
  209. To ensure your code only uses the new names, just define the symbol
  210. ASL_V38_NAMES_ ONLY before including <libraries/asl.h>:
  211.  
  212. #define ASL_V38_NAMES_ONLY 
  213. #include <libraries/asl.h>
  214.  
  215. The symbol definition will prevent the old-style names from being defined.
  216. This is the same method used to disable the pre-V37 names in Intuition
  217. header files. 
  218.  
  219. Don't Trust Me.  The many filtering tags that you can supply to the ASL
  220. requesters are only advisory in nature.  For example, even if you request
  221. that only non-proportional fonts be allowed in the font requester, the
  222. user can still type in the name of a proportional font.  The user can also
  223. enter out-of-bounds values for any numeric parameter.  You must check all
  224. results for sanity prior to using them. 
  225.  
  226. Common ASL Tags.  The tags for the different requesters are now distinct
  227. from one another instead of being all grouped together.  All options that
  228. could be set via flag bits now have individual tags to control them.  For
  229. example, there is now an ASLFR_DoSaveMode tag that does the same as the
  230. FRF_DOSAVEMODE flag bit. 
  231.  
  232. Some basic tags are supported by all requester types:
  233.  
  234. ASLXX_Window.  This indicates the parent window of the requester. You
  235. provide a window pointer, and if you don't specify an ASLXX_Screen tag,
  236. then the ASL requester will open on the same screen as this window. 
  237.  
  238. ASLXX_PubScreenName.  You provide this tag with the name of a public
  239. screen to open the ASL requester on. 
  240.  
  241. ASLXX_Screen.  You provide this tag with a pointer to a Screen to open on.
  242. If none of the above three tags are specified, then the ASL requester will
  243. open on the current default public screen.  This will most likely by
  244. Workbench. 
  245.  
  246. ASLXX_PrivateIDCMP.  By default, ASL requesters use the same IDCMP port as
  247. their parent window (specified using ASLXX_Window).  You can request that
  248. a private IDCMP port be used by setting this tag to TRUE.  If you don't
  249. provide a parent window, then a private port is automatically used and
  250. this tag need not be provided. 
  251.  
  252. ASLXX_IntuiMsgFunc.  You provide this tag a pointer to a Hook structure,
  253. which indicates a routine to run whenever an IntuiMessage arrives at the
  254. ASL requester's IDCMP port that is not meant for the requester's window.
  255. This happens whenever the ASL requester is sharing the parent's window
  256. IDCMP port, and a message for the parent window arrives at the port.  The
  257. function being called can process the message for the application. 
  258.  
  259. ASLXX_SleepWindow.  If you set this tag to TRUE, ASL will put the parent
  260. window (specified using ASLXX_Window) to sleep until the ASL requester is
  261. satisfied. This involves blocking all input in the parent window, and
  262. displaying a busy pointer in it. 
  263.  
  264.  
  265. ASLXX_TextAttr.  You can provide a pointer to a standard TextAttr
  266. structure which defines the font to use in the ASL requester.  If this tag
  267. is not supplied, the default behavior is to use the font of the screen on
  268. which the requester opens.  Note that just like for Intuition objects, the
  269. font indicated by the TextAttr structure must already be in memory before
  270. using the requester.  There is no guarantee that ASL will actually use the
  271. font you asked for.  If that font is too large, ASL will use a smaller
  272. one.  Also, as of V39, the file requester's file list requires a monospace
  273. font.  So if you provide a proportional font, the file requester will use
  274. the system default font instead for its list of files. 
  275.  
  276. ASLXX_Locale.  You pass this tag a pointer to a Locale structure, as
  277. obtained from the locale.library/OpenLocale() function.  The locale is
  278. used to determine in which language, and using which country information,
  279. the various requesters should be displayed.  If this tag is not provided,
  280. or its value is NULL, then the default system Locale is used.  This
  281. corresponds to what the user has currently picked in the Locale prefs
  282. editor.  As of V39, certain items such as the dates in the file requester
  283. always use the system default Locale instead of the Locale provided with
  284. this tag. 
  285.  
  286. ASLXX_TitleText.  Provide this tag a string which will be used for the
  287. title of the requester.  If this tag is not provided, the requester has no
  288. title. 
  289.  
  290. ASLXX_PositiveText.  Provide this tag a string which will be used for the
  291. label of the positive choice gadget in the requester.  If this string is
  292. not provided, a localized default is used (English default is "OK").  We
  293. recommend using this tag to make the action of the various requesters more
  294. clear to the user.  For example, when a file requester is being displayed
  295. to load a file, it is clearer if the gadget says "Open" instead of simply
  296. "OK". 
  297.  
  298. ASLXX_NegativeText.  Provide this tag a string which will be used for the
  299. label of the negative choice gadget in the requester.  If this string is
  300. not provided, a localized default is used (English default is "Cancel"). 
  301.  
  302. ASLXX_InitialLeftEdge, ASLXX_InitialTopEdge, ASLXX_InitialWidth,
  303. ASLXX_InitialHeight.  These four tags let you specify the position and
  304. size of the ASL requester window.  These are only requests that ASL may
  305. decide to ignore.  When an ASL requester is closed, it is easy to
  306. determine the position and size of the requester when the user closed it.
  307. It is a good idea for an application to remember these values and use them
  308. in subsequent invocations of the requester. 
  309.  
  310. The File Requester.  The file requester supports a number of tags.  Some
  311. of the tags introduced in V38 are discussed here. 
  312.  
  313. Note that the future holds many changes in the ASL file requester that
  314. will substantially increase its flexibility to both the programmer and the
  315. user.  If you use the ASL file requester in your applications today, you
  316. will automatically get the majority of these new features when they become
  317. available.  Rolling your own file requester means a lot of extra work, and
  318. means that you will not automatically benefit from the new interface when
  319. it becomes available. 
  320.  
  321. ASLFR_DoSaveMode.  Setting this tag to TRUE indicates the file requester
  322. is being used for saving information.  When in save mode, the file
  323. requester changes slightly.  The most obvious change is the use of a
  324. different set of colors in the file list.  This is a direct queue to the
  325. user that something is being selected for writing, not reading.  Second
  326. change is that if the user enters a directory name which doesn't exist,
  327. ASL will prompt the user to see if the user wishes to create the
  328. directory.  This lets the user create new directories to save files into.
  329. There are likely to be more differences between normal and save mode in
  330. the future.  Please use this tag when appropriate. 
  331.  
  332. ASLFR_RejectIcons.  When set to TRUE, this tag prevents icons (.info
  333. files) from being displayed in the file requester.  If this tag is not
  334. specified, icons will be displayed by the file requester.  Please use this
  335. tag in all your software.  Workbench users should never have to see .info
  336. files.  The default behavior of the file requester is to display .info
  337. files, which is incorrect. Unfortunately, this default behavior cannot be
  338. changed due to compatibility. 
  339.  
  340. ASLFR_DoPatterns.  Setting this tag to TRUE causes a Pattern gadget to be
  341. displayed in the file requester, which allows the user to enter AmigaDOS
  342. patterns to filter out files.  The default is to have no pattern gadget. 
  343.  
  344. ASLFR_DrawersOnly.  Setting this tag to TRUE causes the file requester to
  345. have no File gadget, and to only display directory names in its file list.
  346. This is a useful option if you wish to have the user select a destination
  347. directory for a particular task. 
  348.  
  349. ASLFR_RejectPattern.  Provide an AmigaDOS pattern to this tag, and any
  350. files matching this pattern will not be displayed in the file requester.
  351. This pattern can never be edited by the user.  Note that the pattern you
  352. provide here must have already been parsed by
  353. dos.library/ParsePatternNoCase(). 
  354.  
  355. ASLFR_AcceptPattern.  Provide an AmigaDOS pattern to this tag, and only
  356. files matching this pattern will be displayed in the file requester.  This
  357. pattern can never be edited by the user.  Note that the pattern you
  358. provide here must have already been parsed by
  359. dos.library/ParsePatternNoCase(). 
  360.  
  361. ASLFR_FilterDrawers.  Setting this tag to TRUE causes the
  362. ASLFR_RejectPattern, ASLFR_AcceptPattern, and the Pattern text gadget to
  363. also apply to filter drawer names.  Drawers are normally never affected by
  364. pattern filtering. 
  365.  
  366. The Screen Mode Requester.  The screen mode requester allows the user to
  367. select amongst the wide range of display modes available on the Amiga.
  368. Future chip sets, and the RTG effort will yield a very large additional
  369. number of display modes.  Using the ASL requester is a good way to ensure
  370. that you benefit from the maximum upwards compatibility possible.  In many
  371. cases, by using the screen mode requester, your applications will
  372. automatically be able to open displays in new modes that are introduced in
  373. future OS revisions. 
  374.  
  375. An important point to note is that the interface presented to the user by
  376. the screen mode requester is likely to change dramatically in the future.
  377. This is because the increased number of available modes will make the
  378. current interface difficult to use and understand at best.  A new scheme
  379. is being developed that should allow the user to more easily and
  380. accurately pick display modes.  If you use the ASL screen mode requester
  381. in your applications instead of rolling your own version, your application
  382. will automatically get this new interface when it becomes available. 
  383.  
  384. The ultimate goal of the screen mode requester is to return a graphics
  385. mode id.  The mode ids are used since V37 to distinguish between the
  386. different display modes in the system.  The screen mode requester can also
  387. return additional information including requested display sizes and depth. 
  388.  
  389. As all other ASL requesters, you get the result of a request by reading
  390. the contents of the requester structure after the AslRequest() calls
  391. return success.  There are two fields worth mentioning in the
  392. ScreenModeRequester structure: sm_BitMapWidth and sm_BitMapHeight.  These
  393. values define the values to pass to AllocRaster() and InitBitMap() when
  394. hand-building a BitMap structure to display the requested width, height,
  395. and depth.  This is useful when running on a V37 ROM.  For V39 use, simply
  396. use the values in sm_Width and sm_Height, and pass those to AllocBitMap()
  397. directly. 
  398.  
  399. Here are the most important screen mode requester tags.
  400.  
  401. ASLSM_InitialDisplayID.  This tag sets the initial mode that is selected
  402. in the mode listview.  You provide it a graphics mode id, and that mode
  403. will be initially selected in the file requester. 
  404.  
  405. ASLSM_InitialDisplayWidth, ASLSM_InitialDisplayHeight,
  406. ASLSM_InitialDisplayDepth.  These tags determine the initial setting of
  407. three gadgets that can optionally be displayed in the requester.  The
  408. default if these tags are not provided are a width of 640, a height of
  409. 200, and a depth of 2. 
  410.  
  411. ASLSM_InitialOverscanType.  This tag determines the initial setting of the
  412. Overscan Type cycle gadget.  This optional gadget lets the user pick which
  413. overscan setting to use for the given mode.  The values you can provide to
  414. this tag are: OSCAN_TEXT, OSCAN_STANDARD, OSCAN_MAXIMUM, and OSCAN_VIDEO.
  415. OSCAN_VIDEO is only available starting with V39, it is not in V38.  The
  416. four OSCAN_XX constants are defined in <intuition/screens.h>. 
  417.  
  418. ASLSM_InitialAutoScroll.  This tag can be set to TRUE or FALSE and
  419. determines what the initial state of the option AutoScroll checkbox gadget
  420. should be. 
  421.  
  422.  
  423.  
  424. ASLSM_DoWidth, ASLSM_DoHeight, ASLSM_DoDepth, ASLSM_DoOverscanType,
  425. ASLSM_DoAutoScroll.  These tags control which of the optional gadgets is
  426. displayed in the screen mode requester.  The default is to have none of
  427. these present.  Setting any of these tags to TRUE will make the gadget
  428. appear. 
  429.  
  430. ASLSM_MinWidth, ASLSM_MaxWidth, ASLSM_MinHeight, ASLSM_MaxHeight,
  431. ASLSM_MinDepth, ASLSM_MaxDepth.  These tags let you specify limits to the
  432. values the user is allowed to enter in the requester. 
  433.  
  434. ASLSM_PropertyFlags, ASLSM_PropertyMask.  These two tags cooperate to
  435. allow a flexible means of filtering out unwanted display modes.  Each
  436. display mode in the graphics database has a given set of properties
  437. associated with it.  These tags allow you to determine which modes to
  438. display in the mode list of the requester based on the properties of the
  439. modes. 
  440.  
  441.     The mode properties are defined as a ULONG of flag bits.  The
  442. definitions for all supported properties are in <graphics/displayinfo.h>.
  443. Examples include DIPF_IS_WB and DIPF_IS_LACE. 
  444.  
  445.     ASLSM_PropertyMask defines which properties you are concerned with.
  446. Those are the only bits for which the specific setting matters to you.
  447. The setting of all other property bits doesn't matter to you. 
  448.  
  449.     ASLSM_PropertyFlags defines exactly in which state the property
  450. flags you are have shown interest in via the ASLSM_PropertyMask tag should
  451. be. 
  452.  
  453.     The way ASLSM_PropertyMask and ASLSM_PropertyFlags interact is
  454. indentical to how the two flags parameters interact in
  455. exec.library/SetSignal().  This is how ASL uses the tag values internally:
  456.  
  457.          if ((displayInfo.PropertyFlags & propertyMask) ==
  458.             (propertyFlags & propertyMask))
  459.          {
  460.              /* Mode accepted */
  461.          }
  462.          else
  463.          {
  464.              /* Mode rejected */
  465.          }
  466.  
  467.     An example can help understand the relationship between the two
  468. tags.  If you want to display only screen modes that can be used for the
  469. Workbench screen, and that are not interlaced, you would set
  470. ASLSM_PropertyMask to (DIPF_IS_WB|DIPF_IS_LACE), and ASLSM_PropertyFlags
  471. to (DIPF_IS_WB).  The mask value means you are interested in the state of
  472. the DIPF_IS_WB and DIPF_IS_LACE bits.  The flags value says you want the
  473. DIPF_IS_WB to be set, and the DIPF_IS_LACE bit to be clear. 
  474.  
  475.  
  476. The Locale Library
  477. ==================
  478. The locale.library provides the core of system localization.
  479. See other readmes about Locale.library.
  480.  
  481. The Bullet Library
  482. ================== 
  483. The bullet.library contains the Compugraphic outline font rendering
  484. engine. 
  485.  
  486.  
  487.  
  488. Color Wheel and Gradient Slider
  489. ===============================
  490.  
  491. The color wheel and gradient slider are two new BOOPSI classes introduced
  492. in V39. Together, they offer a very nice interface to let the user select
  493. or adjust colors.  The V39 Palette prefs uses both classes in its
  494. interface. 
  495.  
  496. Using either of these classes requires you to first open them as
  497. libraries, and then create new BOOPSI objects using the NewObject()
  498. function:
  499.  
  500.      if (ColorWheelBase = OpenLibrary("gadgets/colorwheel.gadget",0))
  501.      {
  502.          cw = NewObject(...);
  503.      }
  504.  
  505. For an introduction to programming the color wheel and gradient slider,
  506. refer to the 3.0 colorwheel example. 
  507.  
  508. The colorwheel.gadget.  The color wheel class provides the ability to
  509. create gadgets enabling the user to control the hue and saturation
  510. components of an HSB (Hue-Saturation-Brightness) color space.  The
  511. companion gradient slider class enables control of the brightness
  512. component of the color space. 
  513.  
  514. The color wheel can operate on screens of any depth, and adapts its
  515. rendering to the number of colors available.  The system's pen sharing
  516. system is used in order to maximize the number of colors used by the
  517. wheel.  A color wheel gadget is (normally) responsible for choosing it's
  518. own color pens to draw in (using graphics.library/ObtainBestPen()).
  519. However, the creator of the gadget can "donate" some of its pens to the
  520. gadget, using the WHEEL_Donation tag. 
  521.  
  522. The reason that the color wheel picks its own colors is because it has the
  523. ability to display several different layouts depending on the number and
  524. variety of colors available.  For example, when opening on a screen of low
  525. depth or when opening on a screen where all the pens have already been
  526. allocated exclusively, the gadget will display a "monochrome" version of
  527. the color wheel, where instead of colored segments, the letters "R" (for
  528. red), "G" (for green), "B" (for blue), "Y" (for yellow), "C" (for cyan)
  529. and "M" (for magenta) will be used as labels. 
  530.  
  531. You can talk to the color wheel using HSB or RGB, even though the color
  532. wheel only really deals with HSB in its user-interface.  All
  533. communications with applications are performed with full 32-bit color
  534. component values.  Internally everything is currently kept and processed
  535. in 16-bit space, although this might change in the future. 
  536.  
  537. Here are the main tags supported by the color wheel class:
  538.  
  539. WHEEL_Hue.  Lets you control the Hue component of the color wheel.  This
  540. is effectively the angle around the wheel where the desired color lies.  A
  541. hue value of 0 is all red, and nothing but red.  Increasing the value
  542. moves the color towards all green at $55555555, full blue at $AAAAAAAA,
  543. and back to red at $FFFFFFFF. 
  544.  
  545. WHEEL_Saturation.  Lets you control the Saturation component of the color
  546. wheel.  This is effectively the distance from the center of the wheel
  547. where the desired color lies.  A saturation value of 0 puts the knob at
  548. the center of the wheel and always yields white.  Increasing the value
  549. progressively moves the knob farther away from the center.  until the
  550. value $FFFFFFFF is reached in which case the knob is as far as it can go. 
  551.  
  552. WHEEL_Brightness.  Lets you control the Brightness component of the color
  553. wheel.  The color wheel does not itself have any means of displaying or
  554. editing brightness, but it does maintain this value internally.  Used with
  555. the WHEEL_GradientSlider tag, you can control the value of a
  556. gradientslider object by passing WHEEL_Brightness to a color wheel.  A
  557. brightness value of 0 means all black.  Increasing the value progressively
  558. brightens the current color, until the value $FFFFFFFF is reached in which
  559. case the color is as bright as it gets. 
  560.  
  561. WHEEL_Red, WHEEL_Green, WHEEL_Blue.  Let you specify new RGB values for
  562. the color wheel.  The values provided are converted into HSB values are
  563. then used. 
  564.  
  565. WHEEL_Screen.  This is a required tag that lets you specify the screen on
  566. which the color wheel is to be displayed.  Note that once a color wheel is
  567. created, the screen should not be closed until the color wheel object is
  568. discarded using DisposeObject(). 
  569.  
  570. WHEEL_BevelBox.  If you set this tag to TRUE, a bevel box will be drawn
  571. around the color wheel object. 
  572.  
  573. WHEEL_GradientSlider.  This tag lets you attach a gradient slider object
  574. to the color wheel.  You give this tag a pointer to a gradient slider
  575. object obtained previously from NewObject().  Once this is done, anytime
  576. the various tags that can affect the brightness component of the current
  577. color is sent to the color wheel, the color wheel automatically changes
  578. the value of the attached gradient slider to match that new brightness
  579. value.  Reading the brightness value from the color wheel returns the
  580. current value indicated by the gradient slider. 
  581.  
  582.     Using this tag effectively allows you to treat the color wheel and
  583. gradient sliders as a single gadget.  Once things are set up, all
  584. communications occur through the wheel object, and the gradient slider can
  585. pretty much be ignored. 
  586.  
  587. The gradientslider.gadget.  The gradient slider gadget class is a type of
  588. non-proportional slider.  The primary feature of the gradient slider is
  589. it's appearance.  Unlike normal sliders, a gradient slider can display a
  590. "spread of colors" or "color gradient" in the slider container box.  The
  591. "knob" or "thumb" of the slider appears to slide on top of this color
  592. gradient. 
  593.  
  594. The color gradient effect is built-up using a combination of multiple pens
  595. and half-tone dithering.  The application must tell the slider exactly
  596. which pens to use in creating the gradient effect, and in what order to
  597. use them. Essentially, it does this by passing an array of pens
  598. (terminated by ~0, just like a PenSpec) to the slider.  The first pen in
  599. the array is used as the color at the top of the slider (or left, if it is
  600. horizontal), and the last color in the array is used at the bottom (or
  601. right).  The other pens will be used at evenly spaced intervals in
  602. between.  Dithering is used to smoothly fade between the pens, allowing
  603. the illusion of a continuous change in color. 
  604.  
  605. Here are the main tags supported by the gradient slider class:
  606.  
  607. GRAD_MaxVal.  Lets you set the maximum value supported by the slider.
  608. This must be in the range $0..$FFFF. 
  609.  
  610. GRAD_CurVal.  Lets you set the current value of the slider.  This should
  611. be in the range 0..GRAD_MaxVal. 
  612.  
  613. GRAD_PenArray.  Lets you specify an array of pens that the slider should
  614. use to create its gradient background.  The array can contain any number
  615. of pens, and is terminated with a pen value of ~0.  These pens can be
  616. allocated as shared, since their RGB value is not altered by the slider.
  617. The first pen is used on the top or left of the slider, and the last pen
  618. is used on the bottom or right.  All other pens are evenly spaced out and
  619. used in between.  Dithering is used between the pens to enhance the
  620. smoothness of the gradient transition. 
  621.  
  622.     A NULL pen array causes the background of the slider to be rendered
  623. in the screen's background color.  A pen array containing only a single
  624. pen causes the background to be rendered using that pen. 
  625.  
  626.  
  627.  
  628.  
  629.  
  630. New File Systems
  631. ================
  632. The V39 ROM file system supports 6 different disk formats:
  633.  
  634.    o DOS\0 This is the traditional Amiga file system.  It has 488 bytes of
  635. data per block.  It offers a high level of redundancy and validation which
  636. makes it very reliable.  It is also fairly slow. 
  637.  
  638.    o DOS\1 This is the original Fast File System introduced in 1.3.  It
  639. uses a disk layout quite similar to DOS\0, except it forgoes some
  640. redundancy in the name of speed.  It stores 512 bytes per block, and runs
  641. substantially faster than DOS\0. 
  642.  
  643.    o DOS\2 This is an international flavor of DOS\0.  The only difference
  644. between this format and DOS\0 is the hashing algorithm used to locate the
  645. files and directories on the disk.  DOS\0 has a bug in dealing with making
  646. international characters case-sensitive.  DOS\2 corrects this bug, and is
  647. otherwise identical to DOS\0. 
  648.  
  649.    o DOS\3 This is an international flavor of DOS\1.  The only difference
  650. between this format and DOS\1 is the hashing algorithm used to locate the
  651. files and directories on the disk.  DOS\1 has a bug in dealing with making
  652. international characters case-sensitive.  DOS\3 corrects this bug, and is
  653. otherwise identical to DOS\1. 
  654.  
  655.    o DOS\4 This is a directory-caching version of DOS\2.  It has the same
  656. general disk layout, with the addition of special directory cache blocks.
  657. These cache blocks store the contents of each directory.  The advantage of
  658. this is that getting a directory listing can be an order of magnitude
  659. faster than on normal DOS\2 disks.  The directory caches require a slight
  660. amount of disk space, and maintaining them slightly slows down file
  661. creation, deletion, and update.  This file system is mostly meant for
  662. floppies, as it doesn't generate a very noticeable performance increase on
  663. hard drives. 
  664.  
  665.    o DOS\5 This is a directory-caching version of DOS\3.  It has the same
  666. general disk layout, with the addition of special directory cache blocks.
  667. These cache blocks store the contents of each directory.  The advantage of
  668. this is that getting a directory listing can be an order of magnitude
  669. faster than on normal DOS\3 disks.  The directory caches require a slight
  670. amount of disk space, and maintaining them slightly slows down file
  671. creation, deletion, and update.  This file system is mostly meant for
  672. floppies, as it doesn't generate a very noticeable performance increase on
  673. hard drives. 
  674.  
  675. Disk Block Format.  Here are some notes concerning changes to the disk
  676. block format required by the new SetOwner() call, and more importantly the
  677. changes present in DOS\4 and DOS\5 to support directory caching.  The
  678. format of root blocks is unchanged under V39. 
  679.  
  680. The format of file header blocks is slightly different in order to store
  681. owner information.  One of the reserved fields is now being used:
  682.  
  683. struct FileHeaderBlock
  684. {
  685.     ULONG  fhb_Type;         // T.SHORT
  686.     ULONG  fhb_OwnKey;         // key of this block
  687.     ULONG  fhb_HighSeq;      // total blocks in file
  688.     ULONG  fhb_DataSize;     // number of data block slots used
  689.     ULONG  fhb_FirstBlock;   // first block in this file
  690.     ULONG  fhb_Checksum;     // checksum of this block
  691.  
  692.     ULONG  fhb_HashTable[];  // variable number of hash table entries
  693.  
  694.     ULONG  fhb_Reserved      // always 0
  695.     ULONG  fhb_OwnerXID      // owner UID/GID
  696.     ULONG  fhb_Protect       // protection bits
  697.     LONG   fhb_ByteSize      // total size of file in bytes
  698.     char   fhb_Comment[92];  // comment as a BCPL string
  699.     ULONG  fhb_Days;         // creation date and time
  700.     ULONG  fhb_Mins;
  701.     ULOGN  fhb_Ticks;
  702.     char   fhb_FileName[36]; // filename as BCPL string
  703.     ULONG  fhb_Link;         // pointer to object header is linked to
  704.     ULONG  fhb_BackLink;     // pointer to previous object in link chain
  705.     ULONG  fhb_HashChain;    // next entry with same hash value
  706.     ULONG  fhb_Parent;       // pointer back to parent directory
  707.     ULONG  fhb_Extension;    // 0 or pointer to first extension block
  708.     ULONG  fhb_SecType;      // ST.FILE
  709. };
  710.  
  711. User directory blocks were modified to add the same owner information as
  712. for file header blocks.  Under DOS\4 and DOS\5, the user directory blocks
  713. also point to the new directory cache blocks. 
  714.  
  715. struct UserDirectoryBlock
  716. {
  717.     ULONG  udb_Type;         // T.SHORT
  718.     ULONG  udb_OwnKey;       // key of this block
  719.     ULONG  udb_SeqNum;       // highest seq (always 0)
  720.     ULONG  udb_DataSize;     // always 0
  721.     ULONG  udb_NextBlock;    // always 0
  722.     ULONG  udb_Checksum;     // checksum of this block
  723.  
  724.     ULONG  udb_HashTable[];  // variable number of hash table entries
  725.  
  726.     ULONG  udb_Reserved;     // always 0
  727.     ULONG  udb_OwnerXID;     // owner UID/GID
  728.     ULONG  udb_Protect;      // protection bits
  729.     ULONG  udb_Junk;         // not used (always 0)
  730.     char   udb_Comment[92];  // comment as a BCPL string
  731.     ULONG  udb_Days;         // creation date and time
  732.     ULONG  udb_Mins;
  733.     ULONG  udb_Ticks;
  734.     char   udb_DirName[36];  // name as a BCPL string
  735.     ULONG  udb_Link;         // pointer (key number) to object linked to
  736.     ULONG  udb_BackLink;     // back pointer to previous hard link header
  737.     ULONG  udb_HashChain;    // next entry with same hash value
  738.     ULONG  udb_Parent;       // pointer back to parent
  739.     ULONG  udb_DirList;      // DOS\4 and DOS\5 use this for the dir cache
  740.     ULONG  udb_SecType;      // ST.USERDIR
  741. };
  742.  
  743. A new block type added in support of DOS\4 and DOS\5 is the file list
  744. block.  This is where directory information is cached by the file system.
  745. When looking at a file list block, is it critical to check the fhl_Type
  746. field of the block to ensure that it is a known block format.  Unknown
  747. block formats should be ignored.  On a DOS\4 and DOS\5 partitions, the
  748. file system is able to rebuild cache blocks if it finds older versions
  749. present, or if it finds no cache block for a given directory. 
  750.  
  751. struct FileListBlock
  752. {
  753.     ULONG  fhl_Type;       // T.DIRLIST
  754.     ULONG  fhl_OwnKey;     // key of this block
  755.     ULONG  fhl_Parent;     // key of parent directory
  756.     ULONG  fhl_NumEntries; // amount of data on this block
  757.     ULONG  fhl_NextBlock;  // next block in sequence of file list blocks
  758.     ULONG  fhl_Checksum;   // checksum of this block
  759. };
  760.  
  761. Following the above structure on a disk block comes the actual cache
  762. information for the directory.  There is one cache entry for every file
  763. and directory within the cache.  These entries vary in size based on the
  764. length of the file name and comment for the entry.  A cache entry looks
  765. like:
  766.  
  767. struct ListEntry
  768. {
  769.     ULONG fle_Key;                // Key (fhb block) of file
  770.     ULONG fle_Size;           // size in bytes
  771.     ULONG fle_Protection; // protection bits
  772.     ULONG fle_OwnerXID;       // owner info
  773.     UWORD fle_Days;           // date (allows 179 years)
  774.     UWORD fle_Min;            // 0..(60*24 - 1)
  775.     UWORD fle_Tick;           // 0..3599
  776.     UBYTE fle_Type;           // ST.XXXXX (all fit in a byte)
  777.     char  fle_FileName[]; // variable length BCPL string
  778.     char  fle_Comment[];  // variable length BCPL string
  779. };
  780.  
  781. These are the values for the various constants referred to above:
  782.  
  783. // block type constants
  784. #define T.DELETED 1
  785. #define T.SHORT   2
  786. #define T.LONG    4
  787. #define T.DATA    8
  788. #define T.LIST    16
  789.  
  790. DCFS_REV        1
  791. DIRLIST_KEY    32
  792. DIRLIST_MASK    0xffffffe0
  793. T.DIRLIST    (DIRLIST_KEY | DCFS_REV)
  794.  
  795. ST.FILE     -3
  796. ST.ROOT     1
  797. ST.USERDIR  2
  798.  
  799.  
  800.  
  801. DOS Workarounds
  802. ===============
  803.  
  804. V37 dos.library has a few important bugs.  These bugs are fixed in V39,
  805. and it is easy to work around many of these bugs under V37 to make sure
  806. you don't get into trouble. 
  807.  
  808. AttemptLockDosList().  Under V37, AttemptLockDosList() would sometimes
  809. return 1 on failure instead of NULL.  To check for failure of
  810. AttemptLockDosList(), simply use:
  811.  
  812.    dl = AttemptLockDosList();
  813.    if (!dl || (dl == (struct DosList *)1))
  814.        /* failed */
  815.  
  816. FGets().  Under V37, FGets() will overrun the buffer you give it by one
  817. byte, if it doesn't encounter a line feed or EOF before filling up your
  818. buffer.  The work around is very simple: pass buffersize-1 to FGets(). 
  819.  
  820. ParsePatternNoCase().  Until V39, ParsePatternNoCase() did not correctly
  821. treat character classes as case-insensitive.  That is [a-z] was different
  822. than [A-Z].  The work around for this bug is to simply convert all
  823. characters of the pattern to upper case before passing it to
  824. ParsePatternNoCase().  Just use the utility.library/ToUpper() function to
  825. convert all characters of the pattern to upper case. 
  826.  
  827. SetVBuf().  Until V39, the SetVBuf() function didn't do anything.
  828. Starting with V39, it actually does in fact set the buffer sizes.  If you
  829. use any of the buffered DOS IO calls, you can get a noticeable increase in
  830. performance by increasing the buffer size of your files.  A good size is
  831. 4K.  You can simply add a SetVBuf() call after opening each of your files.
  832. It won't do anything under V37, and will work under V39.  In most cases,
  833. it is not even necessary to check for failure of SetVBuf().  When the call
  834. fails, it just leaves the file handle with the same buffering it had
  835. previously.  That's fine, you just won't get the performance increase for
  836. that run of the program. 
  837.  
  838. SetVBuf() was not activated in the initial release of 3.0, it only becomes
  839. available with 3.1. 
  840.  
  841.  
  842. Commodities Library
  843. ===================
  844.  
  845. The commodities.library underwent a major overhaul in V38.  The result is
  846. a much smaller, much less CPU hungry, and much less memory hungry library.
  847. Many bugs were also found and fixed.  Finally, a few new features were
  848. included.  All of the commodity programs shipped with the system were also
  849. revised. 
  850.  
  851. ReadArgs().  Commodities now use ReadArgs() instead of the custom
  852. command-line parsing routines in amiga.lib.  This makes them more
  853. consistent with the rest of the system.  We encourage third party
  854. commodity writers to also switch to ReadArgs().  Keyword Synonyms.
  855. ParseIX() now understands many synonyms for keys and qualifiers.  The
  856. intent was to provide more consistent naming, and to decrease the
  857. likelihood the user would make a mistake while entering a key sequence.
  858.  
  859. Input Events.  A bug that was found in a few applications during V39
  860. development was the incorrect initialization of InputEvents inserted into
  861. the input.device's input stream.  These events can work most of the time,
  862. and suddenly not work with specific applications.  Of specific interest,
  863. the inputEvent->ie_SubClass was found to often contain garbage.  This
  864. field should generally be set to 0.  Another field that is often
  865. incorrectly initialized is the ie_TimeStamp field. Make sure this field
  866. has something meaningful in it.  Note that using the IND_WRITEEVENT
  867. input.device command automatically initializes the ie_TimeStamp field. 
  868.  
  869. Bugs In commodities.library.  Under V37, input events output by translator
  870. objects were inserted into the input stream after the commodities.library
  871. input handler.  This was contrary to the documentation.  Starting with
  872. V38, events generated are inserted immediately following the translator
  873. object.  This means commodity objects coming after the translator now get
  874. to see the translated events, while in V37, they wouldn't. 
  875.  
  876. Another bug with translator objects is that they insert their attached
  877. list of input events in reverse order.  This cannot be fixed due to
  878. compatibility problems.  It is easily worked around by arranging the input
  879. events in the reverse order of how you want them to be inserted.  The
  880. InvertString() function in amiga.lib generates an inverted list of input
  881. events, which is just fine for translator objects. 
  882.  
  883. Starting with V39, input events generated by translator objects are
  884. stamped with the same time as the input event that activated the
  885. translator.  This helps applications that look at the time of input
  886. events. 
  887.  
  888. In V38, the ParseIX() function has a bug which prevents the following keys
  889. on the numeric keypad from being used in commodities: .  9 ( ) / * +.
  890. This bug is fixed in V39. 
  891.  
  892. Until V39, input events of type IECLASS_NEWPOINTERPOS never got their
  893. extended tag list data copied when it needed to be.  This can cause
  894. general confusion or crashes if a sender object is used on an event of
  895. that type.  The only solution is to refrain from sending messages of type
  896. IECLASS_NEWPOINTER. 
  897.  
  898. Until V39, the InvertKeyMap() function never initialized the ie_SubClass
  899. and ie_TimeStamp fields of the input event it created.  The workaround to
  900. this bug is simple:
  901.  
  902.      inputEvent->ie_SubClass           = 0;
  903.      inputEvent->ie_TimeStamp.tv_secs  = 0;
  904.      inputEvent->ie_TimeStamp.tv_micro = 0;
  905.      if (InvertKeyMap(ansiCode,inputEvent,NULL))     ...
  906.  
  907.  
  908. Mount Lists
  909. ===========
  910.  
  911. The Mount procedure got a major overhaul in V38.  The major change from
  912. the user's perspective is that the handlers that get mounted in the system
  913. can now be controlled exclusively through Workbench by dragging icons
  914. around.  This is especially important in light of CrossDOS. 
  915.  
  916. New File Format.  Although the traditional DEVS:MountList file is still
  917. fully supported, a new method of storing mount information is now
  918. recommended.  The new format involves simply splitting up the various
  919. entries that used to be in a mountlist, into separate files.  Each file
  920. controls a unique handler.  The format for the information in the mount
  921. files is the same as what is used in a traditional MountList with three
  922. exceptions.  For example:
  923.  
  924.      /* Aux-Handler mount entry */
  925.      Handler   = L:Aux-Handler
  926.      Stacksize = 1000
  927.      Priority  = 5
  928.  
  929. The differences with old style MountLists are as follows:
  930.  
  931.        o Only a single device can be defined per file.
  932.        o The name of the device is not specified in the file and is
  933.           instead the same as the name of the file. 
  934.     o The # at the end of the entry can now be omitted.
  935.  
  936. Every parameter that can be specified in a mount file can also be
  937. specified in the tooltypes for the icon of the mount file.  The parameters
  938. in the tooltypes override any equivalent parameter setting present in the
  939. mount file.  The format for the tooltypes is straightforward.  For
  940. example:
  941.  
  942.     LOWCYL=0
  943.     HIGHCYL=79
  944.  
  945.  This lets the Workbench user easily control certain attributes associated
  946. with any given mount entry.  For example, the WB user can easily set the
  947. size of RAD from tooltypes. 
  948.  
  949.  If the user wishes to only use your handler once in awhile, he can drag
  950. the icon for the handler in the Storage drawer.  This prevents the handler
  951. from being mounted on every boot.  If the user wants to use the handler
  952. for a given session, he can then simply double-click on the mount entry
  953. icon to get it mounted. 
  954.  
  955.  It is fairly simple to create an installation procedure that deals with
  956. both old style and new style mount files:
  957.  
  958. if (V38)
  959.    {
  960.    /* Create a mount entry file.  If the user indicates he wants to use the
  961.     * handler permanently, put it into DEVS:DOSDrivers.  Otherwise, just put
  962.     * it into SYS:Storage/DOSDrivers.  Don't forget to provide an icon for
  963.     * the mount entry.
  964.     *
  965.     * If the mount entry is in DEVS:DOSDrivers, it will get mounted
  966.     * automatically when the system is rebooted.  The user can also mount
  967.     * it for the current session by double-clicking on it.
  968.     */
  969.    }
  970. else /* V37 or before */
  971.    {
  972.    /* Create an old-style mount entry and append it to DEVS:MountList.
  973.     * Add a Mount statement in the user-startup of the system.
  974.     */
  975.    }
  976.  
  977. File System Resource List.  Mount now has the ability to fish out file
  978. systems from the FileSystem.resource list.  When mounting a file system,
  979. Mount first look in the FileSystem.resource to see if the system already
  980. contains a file system of the correct DOS type.  If there is such a file
  981. system, its seglist is used for the new handler. 
  982.  
  983. For example, the CrossDOS file system registers itself in the
  984. FileSystem.resource the first time it is used.  Any subsequent attempts to
  985. mount a handler having the same DOS type as the CrossDOS file system
  986. results in that handler using the same seglist as the original CrossDOS
  987. handler. 
  988.  
  989. If a file system seglist is reentrant, it should be added to the
  990. FileSystem.resource list of file systems, which will enable it to be used
  991. in the manner described above.  Be sure the seglist is totally reentrant
  992. before doing this (no global variables).  Consult the Rom Kernal manual to
  993. learn how to add a file system to the FileSystem.resource list. 
  994.  
  995. The new FORCELOAD keyword can be specified in mount entries.  When its
  996. value is set to 1, it tells mount to always load the file system for this
  997. handler from disk, even if it is present in the FileSystem.resource list.
  998. This can be quite handy during the testing phase of a handler. 
  999.  
  1000. Unit Keyword.  Stream handlers have always had the advantage of being able
  1001. to let the user provide startup arguments to the handler via the Startup
  1002. keyword.  For example:
  1003.  
  1004.    Startup = "this is a bunch of options"
  1005.  
  1006. The value of the parameter is available to the handler as a BSTR in the
  1007. dol_Startup field of the handler DosList structure.  This only works for
  1008. stream handlers though, file system handlers make use of the dol_Startup
  1009. field as a BPTR to the FileSysStartupMsg created for them by the Mount
  1010. command. 
  1011.  
  1012. The Unit keyword can now be used to passed textual options to a file
  1013. system handler.  If a string is specified in the mount entry, then the
  1014. fssm_Unit field of the file system's FileSysStartupMsg will be a C pointer
  1015. to the NULL-terminated argument string, instead of being the traditional
  1016. unit number.  New Values For GlobVec.  The GlobVec keyword in a mount list
  1017. can now be set to -2 and -3 in addition to the other values already
  1018. supported.  Here is a table of possible values:
  1019.  
  1020. GlobVec
  1021. Value    Meaning
  1022.   0     Default global vector, used for handlers written in BCPL.
  1023.     Startup packet comes in a register. 
  1024.  -1    No global vector, used for C and ASM handlers.
  1025.     Process has to wait for startup packet. 
  1026.  -2    Same as -3, except for handlers written in BCPL.
  1027.  -3    No global vector, used for C and ASM handlers.
  1028.     The difference with -1 is that the handler can do DOS IO prior to
  1029.     returning its startup packet.  On the flip side, the handler is
  1030.     responsible for making sure there is only one instance of itself
  1031.     loaded by providing correct arbitration around the poking of the
  1032.     dol_Task field of the DosList structure.  With a GlobVec of -1,
  1033.     this is taken care of by DOS. 
  1034.  
  1035. Even though the values -2 and -3 are only allowed starting with the V39
  1036. Mount command, the V37 dos.library handles those values correctly.  It's
  1037. just that prior to V37, the Mount command would refuse to process these
  1038. values. 
  1039.  
  1040.  
  1041. Version Command
  1042. ===============
  1043.  
  1044. There has been some confusion about what the format of version strings
  1045. are. The exact format is detailled in the Amiga User Interface Style Guide
  1046. on page 110.  The format is:
  1047.  
  1048.     $VER: <name> <version>.<revision> (dd.mm.yy)
  1049.  
  1050. The string starts with $VER: followed by a space, followed by <name>.
  1051. <name> is the name of the program.  <name> can NOT contain any spaces.
  1052. You can use underscores to achieve a similar effect. 
  1053.  
  1054. After <name> comes a single space, followed by <version>.  <version> is
  1055. the major version number for the program.  There should be no leading
  1056. zeros. 
  1057.  
  1058. After <version> comes a single space, followed by <revision>.  <revision>
  1059. is the minor version number for the program.  There should be no leading
  1060. zeros. 
  1061.  
  1062. Following the revision number comes a space, and then the date.  The date
  1063. is specified in numeric form only, with no leading zeros on any of the
  1064. components.  First comes the day of the month, then the month, then the
  1065. two digits year.  In the future, a four digit year format will also be
  1066. supported, but not yet. 
  1067.  
  1068. Embedding a version string in the exact format described above will let
  1069. the C/Version command find the version string.  In the future, there will
  1070. be a system call to enable applications, and other system tools, to obtain
  1071. the version information from files easily. 
  1072.  
  1073. ROM Tags.  The version command not only looks for the $VER: version
  1074. strings, it also search executable files for standard ROM tags.  ROM tags
  1075. only contain a version number, they have no revision or date fields.  The
  1076. recommended approach is to store a pointer to a version string in the
  1077. RT_IDSTRING field of the ROM tag. This string should be in the same format
  1078. as the normal version string, except without the "$VER: " prefix. 
  1079.  
  1080. An executable file containing a ROM tag with a properly initialized
  1081. RT_IDSTRING field does not need any other version information in it, such
  1082. as a separate $VER-style string. 
  1083.  
  1084. Leading Zeros.  Leading zeros are not supported as part of the version and
  1085. revision numbers. So "2.04" is not a valid version/revision pair as far as
  1086. the version command is concerned.  The reason this is so is because of the
  1087. VERSION and REVISION command-line options of the Version command.  These
  1088. allow the version and revision of a file to be checked by a script such
  1089. as:
  1090.  
  1091.    Version asl.library VERSION 38 REVISION 4
  1092.  
  1093. The above command will return 0 if asl.library is greater or equal to
  1094. 38.4, and 5 if it is not.  Specifying:
  1095.  
  1096.    Version asl.library VERSION 38 REVISION 04
  1097.  
  1098. Does the same thing.  This means that from the standpoint of the Version
  1099. command, 2.04 is the same as 2.4, and thus 2.04 evaluates as being greater
  1100. than 2.1, which is not the desired effect.  So, the version and revision
  1101. numbers must not be treated as a floating-point number, but as two
  1102. separate and distinct integers. 
  1103.  
  1104. This brings up the concept of user versions and internal versions.  V37 is
  1105. known to the public as Release 2.04, and V39 is known as 3.0.  All the
  1106. version strings in the system software use version strings starting with
  1107. V39.  The recommended approach is as follows:
  1108.  
  1109.    o Assign your products user-space numbers of the form 2.04 and the like. 
  1110.  
  1111.    o Assign the various components of your distribution the same version
  1112. numbers as for your product.  For example, "2". 
  1113.  
  1114.    o Assign each individual components of your distribution their own
  1115. unique, monotonically increasing revision numbers.  These numbers have
  1116. nothing to do with the user- space number of your product as a whole. 
  1117.  
  1118. An example is in order.  Assume a word processor called
  1119. "SliceAndDiceWord", which is at version 4.03.  All the files composing the
  1120. distribution would have a version number of "4", and a file-specific
  1121. revision number:
  1122.  
  1123.    Package number : SliceAndDiceWord 4.03
  1124.    Main executable: SADW 4.1423
  1125.    Support library: SADW.library 4.4129
  1126.    README file    : SADW.README 4.6
  1127.  
  1128. When SliceAndDiceWord 5.0 comes out, all the version numbers of the files
  1129. included with the distribution get bumped to 5, and the revision numbers
  1130. start at 0 again. 
  1131.  
  1132.  
  1133. Miscellaneous
  1134. =============
  1135.  
  1136. This section presents miscellaneous tidbits of information worth noting
  1137. when developing applications. 
  1138.  
  1139. Overscan Names.  Starting with V38, the two user-settable overscan regions
  1140. are known as "Text Size" and "Graphics Size".  Please use the following
  1141. names in your user documentation:
  1142.  
  1143.        OSCAN_TEXT          -->  "Text Size"
  1144.        OSCAN_STANDARD      -->  "Graphics Size"
  1145.        OSCAN_MAXIMUM       -->  "Extreme Size"
  1146.        OSCAN_VIDEO         -->  "Maximum Size"
  1147.  
  1148. Audio Beep.  Starting with V38, the system provides standard support for
  1149. audio beeps, and complete sampled sounds, as a replacement for
  1150. DisplayBeep().  You may wish to rely exclusively on this feature instead
  1151. of providing your own application-specific control over an equivalent
  1152. feature. 
  1153.  
  1154. ToolType Comments.  We strongly encourage you to follow the convention
  1155. adopted in V38 with respect to specifying all tooltypes supported by an
  1156. application within the icon.  Any tooltypes not in use can be commented
  1157. out by putting a set of ( ) around the tooltype.  This causes Workbench to
  1158. ignore the tooltype, yet still leaves it there for the user to see and
  1159. uncomment. 
  1160.  
  1161. Keymap selection.  If you wish to offer application-specific control over
  1162. the keymap being used, you have to load the keymaps you wish to use from
  1163. disk yourself.  Some applications were using the SetMap command to load
  1164. keymaps into memory for them.  SetMap is no longer part of the system, so
  1165. this technique will no longer work.  The DevCon disks contain an example
  1166. showing how to load keymaps from disk. 
  1167.  
  1168. Note that if you wish to offer a list of keymaps to the user, you should
  1169. be looking in the KEYMAPS: assign list for the available keymaps.  To work
  1170. under V37, If this assign list doesn't exist, you can look in
  1171. DEVS:Keymaps. The example code shows how this can be done. 
  1172.  
  1173.  
  1174.  
  1175.  
  1176. Appendix A: V39 Disk Changes
  1177. ============================
  1178.  
  1179. Following is a description of most of the important changes made to the
  1180. disk-based system software between V38 and the initial release of V39.
  1181. This doesn't cover changes made to modules covered in other readmes, such
  1182. as datatypes and AmigaGuide. 
  1183.  
  1184.  
  1185. C/Install
  1186.  
  1187.   o Doing "INSTALL DF0: CHECK" on a disk formatted with dir cache now
  1188.     reports the disk as either "DC-OFS" or "DC-FFS" as appropriate.
  1189.  
  1190. C/IPrefs
  1191.  
  1192.   o Requires Kickstart V39 and handles the new palette, pointer, and
  1193.     wbpattern preferences.
  1194.  
  1195.   o Is smarter about when it needs to reset the WB screen.  Now sends an
  1196.     initial IP_SCREENMODE message to Intuition to force the initial Workbench 
  1197.     screen to be interleaved even if there is no screenmode.prefs file.
  1198.  
  1199.   o Now uses utility.library 32-bit math routines and uses datatypes.library 
  1200.     to load sound samples instead of custom 8SVX code.
  1201.  
  1202.   o Causes much less screen flashing when changing fonts.  No longer has the 
  1203.     QUIT/S command-line option.  (Removing this option allows a few K of RAM 
  1204.     to be saved in every machine.  Gives better error messages when it can't 
  1205.     find a font or a picture.
  1206.  
  1207.  
  1208. C/Mount
  1209.  
  1210.   o Added support for GlobVec of -2 and -3.
  1211.  
  1212.   o No longer considers empty strings an error.  This allows something like:
  1213.  
  1214.       Device = ""
  1215.  
  1216.     to work.  This fix will be helpful to the Envoy software.  Note that this
  1217.     bug is in V38, so there will soon be many many Mount commands out there
  1218.     that don't support empty strings.
  1219.  
  1220. C/RequestChoice
  1221.  
  1222.   This is a new C: program that lets AmigaDOS and ARexx scripts use the
  1223.   Intuition EasyRequest() feature.  The template is:
  1224.  
  1225.     TITLE/A,BODY/A,GADGETS/M,PUBSCREEN/K
  1226.  
  1227.     TITLE
  1228.     Specifies the title of the requester.
  1229.  
  1230.     BODY
  1231.     Specifies the text of the requester.  Linefeeds can be embeeded using
  1232.     *n. 
  1233.  
  1234.     GADGETS
  1235.     Specifies the labels for the different gadgets at the bottom of the
  1236.     requester.
  1237.  
  1238.     PUBSCREEN
  1239.     Lets you specify the name of a public screen to open the requester on.
  1240.  
  1241.     The number of the selected gadget is printed at the console on exit,
  1242.     and is returned as the secondary return value (seen as the Result2
  1243.     variable in the Shell).
  1244.  
  1245.  
  1246.  
  1247. C/RequestFile
  1248.  
  1249.   This is a new C: program that lets AmigaDOS and ARexx scripts use the ASL
  1250.   file requester.  The template is:
  1251.  
  1252.     DRAWER,FILE/K,PATTERN/K,TITLE/K,POSITIVE/K,NEGATIVE/K,ACCEPTPATTERN/K,
  1253.     REJECTPATTERN/K,SAVEMODE/S,MULTISELECT/S,DRAWERSONLY/S,NOICONS/S,
  1254.     PUBSCREEN/K
  1255.  
  1256.     DRAWER
  1257.     Specifies the initial contents of the Drawer gadget.
  1258.  
  1259.     FILE
  1260.     Specifies the initial contents of the File gadget.
  1261.  
  1262.     PATTERN
  1263.     Standard AmigaDOS pattern.  Specifies the initial contents of the Pattern
  1264.     gadget.  Not providing this option causes the file requester not to have
  1265.     any Pattern gadget.
  1266.  
  1267.     TITLE
  1268.     Specifies the title of the file requester.
  1269.  
  1270.     POSITIVE
  1271.     Specifies the text to appear in the positive (left) choice in the file
  1272.     requester.
  1273.  
  1274.     NEGATIVE
  1275.     Specifies the text to appear in the negative (right) choice in the file
  1276.     requester.
  1277.  
  1278.     ACCEPTPATTERN
  1279.     Specifies a standard AmigaDOS pattern.  Only files matching this pattern
  1280.     will be displayed in the file requester.
  1281.  
  1282.     REJECTPATTERN
  1283.     Specifies a standard AmigaDOS pattern.  Files matching this pattern will
  1284.     not be displayed in the file requester.
  1285.  
  1286.     SAVEMODE
  1287.     Specifying this option causes the requester to operate in save mode.
  1288.  
  1289.     MULTISELECT
  1290.     Specifying this option causes the requester to allow multiple files to be
  1291.     selected at once.
  1292.  
  1293.     DRAWERSONLY
  1294.     Specifying this option causes the requester to not have a File gadget.
  1295.     This effectively turns the file requester into a directory requester.
  1296.  
  1297.     NOICONS
  1298.     Specifying this option causes the requester never to display icons (.info)
  1299.     files.
  1300.  
  1301.     PUBSCREEN
  1302.     Lets you provide the name of a public screen to open the file requester on.
  1303.  
  1304.   The selected files are printed on the console at exit, enclosed in double
  1305.   quotes and separated with spaces.  The command generates a return code of 0
  1306.   if the user selected a file, or 5 if the user cancelled the requester.
  1307.  
  1308. C/SetFont
  1309.  
  1310.   o Now sends ESC-C to the console handler only after doing SetFont() in the
  1311.     console window's rastport.  The only reason SetFont ever worked was by
  1312.     luck, since the escape sequences were buffered by DOS and flushed only
  1313.     after the program exited.
  1314.  
  1315.   o No longer crashes when passed a font name with more than 80 characters.
  1316.     Now returns with ERROR_BAD_NUMBER if asked for a font < 4 points.
  1317.     No longer opens console.device.
  1318. C/SetPatch
  1319.  
  1320.   o Activates AA chips.
  1321.  
  1322.   o On some systems, NMI interrupts could be caused due to hardware
  1323.     bugs.  These NMIs can cause software/hardware to perform incorrectly
  1324.     and has caused major performance problems in some systems.
  1325.     In the V37 ROM, the NMI vector pointed at a generalized routine
  1326.     that saved all registers, does some work which ends up doing nothing,
  1327.     restores all registers, and exits.  This patch will, under V37 ROMs,
  1328.     move that vector to point directly at an RTE.
  1329.  
  1330.   o SetPatch no longer will read the longword after the end of each of
  1331.     its hunks.
  1332.  
  1333.   o Now checks for the CPU type before trying to open the 68040.library
  1334.     This is so that the library does not even get loaded if you don't
  1335.     need it.  (The 68040.library also does the check.)
  1336.  
  1337.   o Does not turn on the caches if the intruction cache is not
  1338.     already on.  This is such that the bootmenu option will not
  1339.     be "undone" by SetPatch.
  1340.  
  1341. C/Version
  1342.  
  1343.   o Now does versions of gadget and datatypes classes.
  1344.  
  1345.   o Significant change in behavior required when not using the standard
  1346.     version string format:
  1347.  
  1348.     Junk following the date parameter is printed whenever the FULL option
  1349.     is provided on the command line.  Incorrectly formatted components of 
  1350.     a version string are printed whenever the FULL option is provided.
  1351.  
  1352.     Note that as always, specifying incorrectly formatted version strings
  1353.     will cause the VERSION and REVISION command line options of the Version
  1354.     command not to work as expected.  Basically, using these keywords,
  1355.     will result in output like "2.1 < 2.04", which is not what is usually
  1356.     expected.
  1357.  
  1358.     The incorrect version string formats are not supported by the
  1359.     Installer.  It will behave much like the VERSION and REVISION cmd-line
  1360.     options of the Version command.
  1361.  
  1362. Classes/Gadgets/colorwheel.gadget
  1363.  
  1364.   The colorwheel.gadget is a new BOOPSI class to create color wheels to allow
  1365.   color selections by the user.  See colorwheel.doc for more info.
  1366.  
  1367. Classes/Gadgets/gradientslider.gadget
  1368.  
  1369.   The gradientslider.gadget is a new BOOPSI class to create sliders having a
  1370.   gradient background.  This is to be used in combination with the
  1371.   colorwheel.gadget.  See gradientslider.doc for more info.
  1372.  
  1373. Devs/DataTypes 
  1374.  
  1375.   This new directory in V39 is the place where a user puts datatypes.library 
  1376.   descriptor files.
  1377.  
  1378. Devs/printer.device
  1379.  
  1380.   o Added small amount of code to support AA 8-bit HAM mode printing.
  1381.  
  1382.   o Also now uses GetBitMapAttr() if running under V39 to obtain dimensions 
  1383.     of source BitMap structure.
  1384.  
  1385. L/FastFileSystem
  1386.  
  1387.   o Equivalent to the V39 ROM file system, including DOS\5 support.  See ROM
  1388.     release notes for more info.
  1389. Libs/68040.library
  1390.  
  1391.   This is a support library for 68040 systems.  It addresses a number of
  1392.   issues with that CPU.  There are no publically callable functions in this
  1393.   library.
  1394.  
  1395. Libs/amigaguide.library
  1396.  
  1397.   The amigaguide.library is a new system module providing a means whereby
  1398.   developers can easily add on-line help to their applications.  See
  1399.   amigaguide.doc for more info.
  1400.  
  1401.   The amigaguide.library was previously available for use in commercial
  1402.   applications.  This is the first release of the library as a part of the core
  1403.   operating system.  Changes since the previous release include:
  1404.  
  1405.   o All new V39-only version uses datatypes.library for object handling.
  1406.  
  1407.   o Now has an AppWindow, plus an "Open..." menu item.  To open a new
  1408.     document, AmigaGuide performs a LINK to it, so that you can RETRACE back
  1409.     through the documents that you have opened.
  1410.  
  1411.   o Now supports word wrapping and proportional fonts.
  1412.  
  1413.   o Now supports font attributes.
  1414.  
  1415.   o Now supports embedded objects.  This means that you can
  1416.     LINK to any type of object that the user has a DataTypes
  1417.     descriptor and class for---such as pictures and animations.
  1418.  
  1419.   o Modified how files are located, to search for a localized help file.  Now
  1420.     searches in the following order.  For each preferred language
  1421.  
  1422.     PROGDIR:Help/<language>/<name>
  1423.     HELP:<language>/<name>
  1424.  
  1425.         PROGDIR:<name>
  1426.         <name>
  1427.  
  1428.     This matches how locale.library searches for catalog files.  For
  1429.     compatibility, each directory from the AmigaGuide/Path environment
  1430.     variable are also searched.
  1431.  
  1432.   o Renamed S:help.guide to HELP:<language>/Sys/amigaguide.guide
  1433.  
  1434.   o All sub-databases are now opened localized.
  1435.  
  1436. Libs/asl.library
  1437.  
  1438.   o Added support for the new WA_HelpGroupWindow Intuition tag.  ASL requesters
  1439.     now inherit the group id of their parent window.
  1440.  
  1441.   o Removed V37 code.  The library now requires V39.
  1442.  
  1443.   o Added support for OSCAN_VIDEO in the screen mode requester.
  1444.  
  1445.   o Fixed rendering bug with selected items in the file requester.  Depending
  1446.     on the size of the requester, sometimes the rendering didn't occur
  1447.     correctly.  Fixed font requester layout bug with checkmark labels using 
  1448.     certain fonts.
  1449.  
  1450.   o Now monitors the Size numeric gadget more closely in the font requester.
  1451.  
  1452.   o ASL now uses scaled checkmark imagery in the font and screenmode
  1453.     requesters.  Also now uses ROM busy pointer instead of custom one.
  1454.  
  1455. Libs/commodities.library
  1456.  
  1457.   o Fixed ParseIX() bug introduced in V38 preventing the following keys on
  1458.     the numeric keypad from being used in commodities: 9 ( ) / * + .
  1459.  
  1460. Libs/datatypes.library
  1461.  
  1462.   datatypes.library is a new system module providing transparent data
  1463.   handling abilities to applications.  Application developers can register
  1464.   their data format with datatypes.library and provide a class library for
  1465.   handling their data within other applications.  See datatypes.doc for more
  1466.   information.
  1467.  
  1468. Libs/diskfont.library
  1469.  
  1470.   o Marks DUPLICATE fonts using one of many free bits in the TextFont
  1471.     Extension.  These are fonts opened by diskfont, but match some other
  1472.     font already on the public font list by name, Y size, relevant style,
  1473.     and relevant flags.  The font is only marked as a duplicate if a
  1474.     NON-DUPLICATE occurence of this font already exists.
  1475.  
  1476.     DUPLICATE fonts are ignored by OpenFont() if the caller is not
  1477.     tag aware even if there is a font on the list which has a better
  1478.     implied DPI.
  1479.  
  1480.   o Tightened up requirements for source font when scaling.  Specifically,
  1481.     an already scaled RAM font of an exact Y size match but differing by
  1482.     DPI will not be used as the source for a bitmap scaled font (adding
  1483.     scale error, to scale error).
  1484.  
  1485.   o The code which generates the outline fonts now does comparison for
  1486.     OT_DotSize when it calls OpenFont(); essentially honoring the caller's
  1487.     request for an OT_DotSize other than the default that diskfont will
  1488.     provide when creating outlined fonts.  This makes it possible to have
  1489.     multiple outline fonts which differ only by OT_DotSize.
  1490.  
  1491.   o Underlined outline fonts are now supported if the engine can manage it
  1492.     when rendering the glyphs.  New tags in diskfonttag.[hi] were added for
  1493.     this purpose.  V39 diskfont will ask for underlining if requested in the
  1494.     TextAttr, or TTextAttr, but if not supported by the engine, then it will
  1495.     simply try to open, or create a non-underlined version.  So there is no
  1496.     change in behavior for bullet fonts in that it already opens a
  1497.     non-underlined version.  The difference is by asking OpenFont() for a
  1498.     non-underlined version, it does not decide to create another copy because
  1499.     of the result returned from WeighTAMatch().
  1500.  
  1501.     Of interest, our own Text() function when used with SetSoftStyle() does a
  1502.     broken underline (just one pixel, but its definitely not solid), so
  1503.     diskfont.library V39 first asks for broken underlining from the engine,
  1504.     and then solid.  If neither form of underlining is supported, then the
  1505.     above is true.
  1506.  
  1507.   o Tag for algorithmic strike-through added to diskfonttag.[hi]; this
  1508.     is another feature supported in Final Copy, and could be requested if
  1509.     wrapped in a bullet interface.
  1510.  
  1511.   o Underlining off, double solid, and double broken underlining also defined
  1512.     for the new OT_UnderLined tag.
  1513.  
  1514.     Underlining is not an intrinsic style for outline fonts.  This does not
  1515.     actually absolutely have to be the case, but we lack a tag to indicate
  1516.     intrinsic underlined style now, so this is not a new behavior, or
  1517.     limitation.  The assumption being that underlining is one of those things
  1518.     that is probably best done algorithmically by the application, or
  1519.     for the purposes of diskfont, by the engine.  Therefore this also leaves
  1520.     open the possibility of placing the underlining code within diskfont
  1521.     for engines that do not support it should we wish to do so in the
  1522.     future.
  1523.  
  1524. Libs/iffparse.library
  1525.  
  1526.   o Fixed three bugs in the OpenClipboard() function.  First bug was that if the
  1527.     clipboard.device couldn't open, two calls to FreeSignal() were made
  1528.     with uninitialized values as parameters.  The result of this was a
  1529.     corrupt signal mask in the Task field.  Second bug what the OpenDevice()
  1530.     was called with an IO request that didn't have a valid MsgPort pointer
  1531.     in it.  Finally, the two message ports allocated by the function were
  1532.     not being initialized correctly and would cause a system crash if a
  1533.     message ever got to either of them.
  1534.  
  1535. Prefs/#?
  1536.  
  1537.   o Now restore task->tc_UserData on exit of prefs editor.
  1538.  
  1539. Prefs/Font
  1540.  
  1541.   o Default for WB icon text mode when there is no .prefs file is now JAM2
  1542.     instead of JAM1.  This matches the ROM.
  1543.  
  1544. Prefs/IControl
  1545.  
  1546.   o Added Mode Promotion gadget when running on AA machines
  1547.  
  1548. Prefs/Input
  1549.  
  1550.   o "Show Double-Click" now operates asynchronously.  That is, while the
  1551.     double-click sample is displayed, it is still possible to click on other
  1552.     gadgets.
  1553.  
  1554. Prefs/Overscan
  1555.  
  1556.   o Now bounds check values read from prefs file against what the gfx database
  1557.     says.  This avoids problems with V38 overscan prefs files, and with
  1558.     running VGAOnly or not.
  1559.  
  1560. Prefs/Palette
  1561.  
  1562.   o Brand new interface using the colorwheel and gradientslider gadget
  1563.     classes.  Also allows pen spec editing.
  1564.  
  1565. Prefs/Pointer
  1566.  
  1567.   o Now opens on the Workbench screen if it can obtain three exclusive pens.
  1568.  
  1569.   o Allows editing of the Normal and Busy pointers and supports Low-Res and 
  1570.     High-Res pointer resolutions.
  1571.  
  1572.   o Uses datatypes.library for clipboard support.
  1573.  
  1574.   o Semaphore around save during Test.  This is to prevent
  1575.     confusing error requesters if the user presses the Test button
  1576.     several times while waiting for the pointer to appear.
  1577.  
  1578.   o Added "Load Image..." menu item in the "Edit" menu.
  1579.  
  1580.   o Uses {SA_LikeWorkbench, TRUE} when using a custom screen.
  1581.  
  1582.   o Increased width of window by 20 pixels to make room for
  1583.     longer strings.
  1584.  
  1585.   o Added NOREMAP tooltype and command-line option.  This causes paste
  1586.     and import image to not remap.
  1587.  
  1588. Prefs/ScreenMode
  1589.  
  1590.   o Now skips the default monitor when scanning the mode list instead
  1591.     of skipping PAL or NTSC.  This means that the prefs file will never
  1592.     contain "default monitor" as a mode, it will always contain an
  1593.     explicit mode.
  1594.  
  1595. Prefs/Sound
  1596.  
  1597.   o Now uses datatypes.library for sound loading and playing.  Also uses
  1598.     a DataTypes filter in the load sample requester so that only sounds 
  1599.     will be shown.
  1600.  
  1601.  
  1602. Prefs/WBPattern
  1603.  
  1604.   o Added support for picture backdrops.
  1605.  
  1606.   o Added support for Workbench screen backdrop.
  1607.  
  1608.   o Defined a more efficient chunk for the preference data.
  1609.  
  1610.   o Fully supports the First4/Last4 Workbench color scheme.
  1611.  
  1612.   o Uses datatypes.library for clipboard support.
  1613.  
  1614.   o All internal bitmaps now max out at a depth of 3 (less memory
  1615.     usage).
  1616.  
  1617.   o Rearranged the gadgets.
  1618.  
  1619.   o Semaphore around save during Test.  This is to prevent
  1620.     confusing error requesters if the user presses the Test button
  1621.     several times while waiting for the pattern to appear on the
  1622.     Workbench.
  1623.  
  1624.   o Added "Load Image..." menu item in the "Edit" menu.
  1625.  
  1626.   o Added NOREMAP tooltype and command-line option.  This causes paste
  1627.     and import image to not remap.
  1628.  
  1629. S/Startup-Sequence
  1630.  
  1631.   o Removed "Echo" statement.  That means the initial Shell window will no
  1632.     longer be displayed on bootup on a standard system.  This means a noticeable
  1633.     decrease in bootup time on slower machines (it takes about a second to
  1634.     open and close the shell window).  It means even more savings in time
  1635.     when the WB has more bitplanes.  Finally, it also looks a heck of a lot
  1636.     more professional.
  1637.  
  1638.   o Added C: in front of every pertinent command.  This speeds up the S-S
  1639.     noticeably on floppy systems, since normally the current directory is
  1640.     scanned first for a command, and then C:.  By prefixing C:, it no longer
  1641.     checks the current directory making things a whole lot faster.
  1642.  
  1643.   o Added deferred assign for HELP:.
  1644.  
  1645.   o Added multi-assign of LIBS: to SYS:Classes in support of the new
  1646.     disk-based BOOPSI classes.
  1647.  
  1648.   o Now runs VGAOnly monitor file if it is installed.
  1649.  
  1650. Storage/Monitors/#?
  1651.  
  1652.   o Added DblNTSC and DblPAL in support of AA scan doubling.
  1653.  
  1654.   o Added VGAOnly monitor.
  1655.  
  1656.   o Added AA support throughout.
  1657.  
  1658. System/DiskCopy
  1659.  
  1660.   o Enabled code to correctly report read errors.  Under V38, read errors are
  1661.     reported as write-errors.
  1662.  
  1663. System/Format
  1664.  
  1665.   o Requires V39.
  1666.  
  1667.   o Added directory caching support in the form of an extra gadget in the main
  1668.     Format window, and some new command-line options.  Command-line template
  1669.     is now:
  1670.  
  1671.       DEVICE=DRIVE/K/A,NAME/K/A,OFS/S,FFS/S,INTL=INTERNATIONAL/S,
  1672.       NOINTL=NOINTERNATIONAL/S,DIRCACHE/S,NODIRCACHE/S,NOICONS/S,QUICK/S
  1673.  
  1674.   o Uses GTLV_MakeVisible tag in its device listview.
  1675.  
  1676.   o Fixed bug where long volume names would run off the right edge of the main
  1677.     window by using the new GTTX_Clipped gadtools tag.
  1678.  
  1679. System/Intellifont
  1680.  
  1681.   o Renamed from Fountain to Intellifont.
  1682.  
  1683.   o Bare minimum needed to fix visual bug evident when running under V39
  1684.     gadtools; no longer uses GTLV_Selected tag, though still does not
  1685.     use V39 style selection via GTLV_ShowSelected tag.
  1686.  
  1687. Tools/Commodities/MouseBlanker
  1688.  
  1689.   This is a mouse blanking commodity.  It blanks the mouse when you start typing
  1690.   and unblanks it when the mouse is moved or any of the mouse buttons are hit.
  1691.  
  1692. Tools/HDToolBox
  1693.  
  1694.   o Brand new GadTools interface.
  1695.  
  1696.   o Now determines the version number of a file system automatically instead
  1697.     of requiring it to be entered manually.
  1698.  
  1699.   o Fixed a great number of bugs.
  1700.  
  1701.   o When CD_ROM drive was hooked on the SCSI bus and the disk was inserted,
  1702.     HDToolBox hanged up beacause the program assumed only 512 bytes blocks.
  1703.     It Now checks the size with the "READ_CAPACITY" command,
  1704.     and if it fails, sends "INQUIRY" command and gets device type.
  1705.     If it's a CD-ROM device, sets block size to 2048.
  1706.  
  1707. Tools/IconEdit
  1708.  
  1709.   o Implements the First4/Last4 Workbench color scheme.
  1710.  
  1711.   o Uses datatypes.library for clipboard support and picture
  1712.     loading/saving.  Therefore, you can now load any picture type
  1713.     that you have a class for.  When loading or pasting a
  1714.     picture, the colors are mapped to the Workbench GUI colors
  1715.     (either 2, 4 or 8 colors).  8 color icons will work with any
  1716.     depth Workbench screen.
  1717.  
  1718.   o Default clipboard viewer is now "Multiview CLIPBOARD".
  1719.  
  1720.   o Checks to see if icon already exists when saving a picture or
  1721.     source file and won't overwrite it.
  1722.  
  1723.   o File requester's initial position now matches the preference
  1724.     editors.
  1725.  
  1726.   o Now draws the coordinates in the window title bar using the
  1727.     pen spec.
  1728.  
  1729.   o Was reloading the icon image after save, even if save failed.
  1730.  
  1731.   o Will now properly undo after loading a new icon image.
  1732.  
  1733.   o Added NOREMAP tooltype.  This causes paste and import image
  1734.     to not remap.
  1735.  
  1736.   o Fixes Enforcer hit caused when dropping Drawer icon (without
  1737.     a drawer) into the AppWindow.
  1738.  
  1739. Tools/ShowConfig
  1740.  
  1741.   o Added AA chipset support.
  1742.  
  1743.  
  1744. Utilities/MultiView
  1745.  
  1746.   This is a generic view-anything utility that uses datatypes.library for its
  1747.   object handling.
  1748.  
  1749. 3.0 Installation Procedure
  1750.  
  1751.   o It is no longer necessary to boot from the Install disk.
  1752.  
  1753.   o Install Languages no longer exists.  This is now merged into the main
  1754.     installation script.
  1755.  
  1756.   o Install Printers no longer exists.  The user can easily drag a printer
  1757.     driver icon from the Storage disk to DEVS:Printers
  1758.  
  1759.   o The disk now includes the 68040.library, which gets copied to the HD when
  1760.     performing an install
  1761.  
  1762.   o The various Prod_prep scripts were enhanced and work better.
  1763.  
  1764.   o There are many little utilities in the C: directory which aid the main
  1765.     install script to do a better job.
  1766.  
  1767.   Changes to the install script include:
  1768.  
  1769.   o Requires V39 ROMs
  1770.  
  1771.   o Now integrates the old "Install Languages" script.  When starting the
  1772.     main install script, you are now asked whether to perform a complete
  1773.     installation, or only update the languages.
  1774.  
  1775.   o It now virtually always makes the right decision as to where the WB files
  1776.     should be copied.  As a result, if the user picks Novice mode, he will not
  1777.     be asked where the files should go.
  1778.  
  1779.   o Now preserves the tooltypes of many icons.  This will avoid zapping the
  1780.     stuff put there by users, making the update process much more transparent.
  1781.  
  1782.   o Now preserves the locations of most files.  For example, if the user moved
  1783.     Blanker in WBStartup, it will be correctly updated in WBStartup, and left
  1784.     there.  In V38, the copy in WBStartup would be deleted and the new version
  1785.     installed in Tools/Commodities.
  1786.  
  1787.   o Now preserves left out icons.  The UpdateWBFiles program ensures that the
  1788.     contents of the .backdrop file are up to date which removes the need to
  1789.     delete the file.
  1790.  
  1791.   o Now updates V37 font prefs files to V38/V39 format.
  1792.  
  1793.   o Now deals with the "Storage3.0" disk
  1794.  
  1795.   o Now asks which keymaps to install.
  1796.  
  1797.   o Installs the 68040.library.
  1798.  
  1799.   o Knows about systems with MapROM, and installs a special startup-sequence.
  1800.  
  1801.   o On an NTSC system, always copies the NTSC monitor to DEVS:Monitors, and
  1802.     copies PAL to DEVS:Monitors on PAL systems.
  1803.  
  1804.   o When installing languages, deletes languages the user did not choose.  This
  1805.     is to remove old V38 files that might be hanging around.
  1806.  
  1807.   o Does better sniffing to determine whether an A2090 is present, and displays
  1808.     extra info to inform the owner that some files need to be copied.
  1809.  
  1810.   o Will optionally reboot the system for the user at the end of the
  1811.     installation procedure (after asking permission first, of course).
  1812.  
  1813.   o Asks all its questions up front.  Once the questions are answered, it
  1814.     starts the actual installation.
  1815.  
  1816.   o Now deletes all C= printer drivers and keymaps before starting the
  1817.     installation process.  This was previously done right before re-installing
  1818.     them.  This is to increase the likelihood that things will fit on the HD
  1819.     by deleting obsolete stuff ahead of time.
  1820.  
  1821.   o Does slightly better icon positioning to avoid things moving
  1822.     "by themselves".
  1823.  
  1824.   o Now copies the A2232 port-handler and A2232 aux-handler when needed.
  1825.  
  1826.   Changes to the HDSetup script include:
  1827.  
  1828.   o Will now partition the HD and format it automatically instead of requiring
  1829.     a reboot.
  1830.  
  1831.   o The partitions created are now called Workbench (HD0) and Work (HD1).
  1832.     HD0: is created as 8M.
  1833.  
  1834.   o DOS\3 is now used by default, and the DMA mask is set to 0xfffffffe
  1835.     instead of 0xfffffffc
  1836.  
  1837.   o The version number for the file system being installed on a machine is now
  1838.     extracted from the file system load file instead of being hardcoded in the
  1839.     prep scripts
  1840.  
  1841.   o After completing the reselection on, reselection off, or update
  1842.     superkickstart option, the system is rebooted automatically (after
  1843.     asking the user of course).
  1844.  
  1845.   o Updating an A3000 super kickstart no longer requires the user to hit
  1846.     RETURN.  Errors are also detected now.
  1847.  
  1848.  
  1849.  
  1850.  
  1851. Appendix B: Release 3.1 Disk Changes
  1852. ====================================
  1853.  
  1854. Following is a description of some of the important changes made to
  1855. the disk-based system software between Release 3 and Release 3.1.
  1856. This doesn't cover any changes after December 1992.  Since 3.1 was
  1857. still under development as of this writing, more changes are likely
  1858. to be made to the software prior to release. 
  1859.  
  1860.  
  1861. C/ConClip
  1862.  
  1863.   o Now consumes over 3100 bytes less RAM when running.  That means over 3K
  1864.     more RAM in every system we ship.
  1865.  
  1866.   o Localized
  1867.  
  1868.   o Now keeps iffparse.library and clipboard.device closed whenever they
  1869.     are not in use.
  1870.  
  1871.   o Added CLIPUNIT synonym to existing UNIT command-line option.  This is to
  1872.     make it comply with the style guide and be more consistent with other
  1873.     programs such as WBPattern.  The template is now:
  1874.  
  1875.         CLIPUNIT=UNIT/N,OFF/S
  1876.  
  1877. C/Copy
  1878.  
  1879.   o Now correctly handles failure of SetProtection(), SetComment(), and
  1880.     SetFileDate().  Because SetComment() fails on NFS and on CrossDOS,
  1881.     SetFileDate() never was done on files, making the CLONE option not
  1882.     fully work.  All three functions are considered failures only if
  1883.     IoErr() reports something different than ERROR_ACTION_NOT_KNOWN.
  1884.  
  1885.   o In case of error after a call to DupLock(), an error code was being
  1886.     set always to ERROR_NO_FREE_STORE instead of using the result of
  1887.     IoErr().
  1888.  
  1889.   o The default size for the buffers used was always equivalent to (BUF=0)
  1890.     which caused the buffers to be the size of the files being copied.
  1891.     This was contrary to the docs, and caused problems when copying large
  1892.     files through Envoy, as it could easily eat up all the memory in the
  1893.     system, not leaving enough for the memory needed by Envoy.  The
  1894.     default size is now BUF=128 which gives a 64K buffer.
  1895.  
  1896. C/IPrefs
  1897.  
  1898.   o Added needed support for the new display position control now offered by
  1899.     Overscan prefs.
  1900.  
  1901.   o If there is no icontrol.prefs file, IPrefs sets the default for Mode
  1902.     Promotion to ON.  That means machines will have mode promotion
  1903.     on by default.
  1904.  
  1905.   o Now ensures that requested width, height, and depth for Workbench,
  1906.     fall within the allowed range as defined in the graphics database.
  1907.  
  1908. C/Mount
  1909.  
  1910.   o Only change is the version number.  Versions 39.1 and 39.2 of this program
  1911.     were accidentally numbered 38.1 and 38.2.
  1912.  
  1913. C/Protect
  1914.  
  1915.   o Fixed error reporting.  When used with wildcards, it would generate
  1916.     errors of the form "Can't set protection for #?" instead of giving a
  1917.     descriptive file name, and cause of error.
  1918.  
  1919.  
  1920. C/SetPatch
  1921.  
  1922.   o Due to a bug fix late in the game, the filesystem broke with ExAll()
  1923.     on DCFS file systems if the lock passed in was not Examine()ed first.
  1924.     This patch fixes this by forcing an Examine() on a lock before
  1925.     the ExAll() is called.  It only does this on systems with V39.22
  1926.     dos.library since only that ROM has the problem with DCFS ExAll().
  1927.  
  1928.   o ChangeVPBitMap() was not properly doing the bitplane swizzle needed for
  1929.     8-bit HAM mode.  The reason that this didn't show up earlier is that
  1930.     if the relationship between the bitplane pointers was the same
  1931.     in the original and new bitmaps, the bug would correct itself.
  1932.     So, you would only see this bug if your memory was fragged, or if
  1933.     some other allocations got in between the separate allocations of the
  1934.     bitplanes.
  1935.  
  1936.   o ScrollVPort() had the same bug as ChangeVPBitMap().
  1937.  
  1938.     The patch locks the ActiViewCprSemaphore, swizzles the bitmap,
  1939.     calls the old entry point, and unswizzles the bitmap, when called
  1940.     on a HAM-8 viewport.
  1941.  
  1942.   o The patches for graphics.library/ScrollVPort() and ChangeVPBitMap()
  1943.     now bump the graphics revision number to 90 if it is 89.  This
  1944.     is so that installing the setpatch on an A1200 or A4000 will not
  1945.     break people using work-arounds for the bug.
  1946.  
  1947.   o When calling BltBitMap() with both source and destination interleaved,
  1948.     and a mask of -1, the low byte of d7 would be changed to the bitmap depth
  1949.     on exit.  Patch saves d7, calls old, and restores it.
  1950.  
  1951.   o Added the graphics monitor/view association hash patch.
  1952.  
  1953.   o BltMaskBitMapRastPort() used to interpret the mask data incorrectly
  1954.     if both the source and destination bitmaps were interleaved.
  1955.  
  1956.   o Now includes the CP2024 Conner patch from the V37 SetPatch.
  1957.  
  1958. C/Version
  1959.  
  1960.   o Obtaining the version of printer.device while it is loaded in memory would
  1961.     trash memory.  This is because printer.device doesn't initialize its
  1962.     lib_IdString.  Although Version was checking for NULL, the lack of
  1963.     string was causing problems in the output routines.
  1964.  
  1965.   o Fixed the FILE option which was causing the version numbers not to be
  1966.     displayed.
  1967.  
  1968. Classes/Gadget/colorwheel.gadget
  1969.  
  1970.   o Querying the wheel for an explicit red/green/blue value would not get the
  1971.     most up to date brightness value from the gradient slider causing things
  1972.     to get slightly out of sync.
  1973.  
  1974.   o Fixed bug where trying to open the class library under 1.3/2.0 would
  1975.     cause a system crash instead of simply failing.
  1976.  
  1977. Classes/Gadget/gradientslider.gadget
  1978.  
  1979.   o Fixed bug where trying to open the class library under 1.3/2.0 would
  1980.     cause a system crash instead of simply failing.
  1981.  
  1982. Devs/mfm.device
  1983.  
  1984.   o Fixed small problem of the wrong return results when opening a device
  1985.     with an invalid unit number.
  1986.  
  1987.   o Changed the format function to update the physical track and invalidate the
  1988.     in-memory buffer,
  1989.  
  1990.  
  1991. L/CrossDOSFileSystem
  1992.  
  1993.   o Booting off a CrossDOSFileSystem formatted disk does not crash an IBM
  1994.     machine (including CrossPC).  It now presents a message "CrossDOS
  1995.     non-bootable disk!".
  1996.  
  1997.   o Now supports formatting a compatible MS-DOS hard disk partition.  It
  1998.     is still not bootable.
  1999.  
  2000.   o Now prevents an MS-DOS hard disk partition to be formatted if not
  2001.     properly partitioned first.
  2002.  
  2003.   o Fixed problem with method of reporting results when asked to read or
  2004.     seek past end or beginning of file.  Now follows V37/V39 FFS method.
  2005.  
  2006.   o Fixed problem with parsing a file or directory name with NULLs instead
  2007.     of the usual SPACEs for blanks.  This occurs in PC-DOS not in MS-DOS.
  2008.  
  2009.   o Fixed bug that translated extended ASCII characters incorrectly when
  2010.     either the INTL or DANSK translation tables were selected.
  2011.  
  2012.   o Added stack size checking.
  2013.  
  2014.   o Fixed a bug that appeared when using the 'assign' command with this FS.
  2015.     A DOS deadlock could occur in certain circumstances.  Added a delayed
  2016.     volume node addition and deletion algorithm.
  2017.  
  2018.   o Fixed a small problem of freeing memory allocated by the process spawned by
  2019.     the FileSystem_status process.  This could cause memory shared to be reused
  2020.     when it was still needed.  The fix was to add the memory entry list to the
  2021.     filesystem_status process which is the last process to exit.  This only
  2022.     occurs if the target device could not be opened.
  2023.  
  2024.   o Fixed a problem that never showed up yet.  Internally reproduced only.
  2025.  
  2026. L/port-handler
  2027.  
  2028.   The main reason for this release is to fix problems that PRT: was having
  2029.   with Envoy printing.
  2030.  
  2031.   o Now has a version string.
  2032.  
  2033.   o Now requires V37 ROMs.
  2034.  
  2035.   o Now supports ACTION_IS_FILESYSTEM and ACTION_FINDUPDATE.
  2036.  
  2037.   o Once loaded, it remains in memory permanently which fixes many problems.
  2038.     For example, if any of SER: PAR: or PRT: had been active, double-clicking
  2039.     on Format, DiskSalv, or CrossDOS would cause Enforcer hits, or crashes
  2040.     on a machine not running Enforcer.  This also fixes "copy foo to PRT:"
  2041.     when PRT: is sending data to the envoyprint.device.
  2042.  
  2043.   o When first loaded in memory, the handler patches its seglist pointer into
  2044.     the DOS device node of other related handlers.  That is, if the handler is
  2045.     started as PRT:, it patches its seglist into the DOS nodes for
  2046.     SER: and PAR:.  This means that all these devices end up sharing the same
  2047.     seglist for the port-handler, which can save memory and disk-loading time.
  2048.     It patches its seglist in any device node having "L:port-handler" as
  2049.     handler name.
  2050.  
  2051.   o This port-handler replaces both the standard port-handler on the Workbench,
  2052.     and the A2232 port-handler.  As such, the handler supports being activated
  2053.     through a mountlist entry, and will process the BAUD, CONTROL, DEVICE,
  2054.     UNIT, and FLAGS keyword from a mountlist.
  2055.  
  2056.   o Because this port-handler replaces the A2232 one, it is possible to
  2057.     specify the baud rate and control flags when opening a serial unit.  For
  2058.     example:  Open("SER:9600/8N1",...);
  2059.  
  2060.  
  2061.  
  2062. L/FileSystem_Trans/#?
  2063.  
  2064.   o Modified a few values for the INTL and DANSK translation tables to
  2065.     default to the SPACE character for untranslatable characters instead of
  2066.     NULLs.
  2067.  
  2068.   o Added a Mac translation table.  This lets an Amiga read Mac ASCII
  2069.     files.  This translation type can be selected from the CrossDOS
  2070.     commodity.
  2071.  
  2072. Libs/asl.library
  2073.  
  2074.   o In screen mode requester, fixed formatting string so that horizontal scan
  2075.     rates with a decimal value less than .1 now come out right.  That is,
  2076.     29.02 was coming out as 29.2.
  2077.  
  2078.   o Fixed bug where trying to open the library under 1.3 would cause a system
  2079.     crash instead of simply failing.
  2080.  
  2081.   o Selecting Restore in the screen mode requester now correctly resets the
  2082.     "Overscan Type" and "AutoScroll" gadgets.
  2083.  
  2084.   o Fixed bug where the file requester's drive LED would remain lit after
  2085.     creating a new directory when in save mode.
  2086.  
  2087. Libs/commodities.library
  2088.  
  2089.   o Fixed bug present since V36.  Input events of type IECLASS_NEWPOINTERPOS
  2090.     did not get their extended data properly copied in various places,
  2091.     including through AddIEvents().  This resulted in the copy of these input
  2092.     event containing pointers possibly pointing to garbage.
  2093.  
  2094.   o Fixed bug where NEWPOINTERPOS was not considered a valid class by ParseIX().
  2095.  
  2096.   o Input events inserted into the input food chain as a result of the action
  2097.     of a translator object are now marked with the same time stamp as the
  2098.     input event which activated the translator object.
  2099.  
  2100.   o DisposeCxMsg() was accessing a global list without proper locking.  This
  2101.     was quite nasty, since the list is typically accessed from both the
  2102.     commodity input handler, and from commodity programs running
  2103.     asynchronously.
  2104.  
  2105.   o Now nulls out the ie_NextEvent field of input events it copies.  All
  2106.     input events generated by the library are copies of other events, and
  2107.     the ie_NextEvent value was left set to the original event's value.
  2108.     That means commodity was spewing out a lot of input events with bogus
  2109.     ie_NextEvent fields.  This could cause crashes and confusion.
  2110.  
  2111.   o InvertKeyMap() now sets the ie_SubClass and ie_TimeStamp fields to 0
  2112.     in the input events it generates.  These were being untouched which means
  2113.     they could contain garbage.
  2114.  
  2115. Libs/iffparse.library
  2116.  
  2117.   o Fixed bug where trying to open the library under 1.3 would cause a system
  2118.     crash instead of simply failing.
  2119.  
  2120. Libs/68040.library
  2121.  
  2122.   o During the setup of the MMU tables, if an expansion card was
  2123.     0 bytes in size it would cause the MMU table setup to fail.
  2124.     68040.library would continue to work but the magic MMU setup
  2125.     that would have been needed for the Zorro-III boards would
  2126.     not be done.  This has been fixed.
  2127.  
  2128. Monitors/#?
  2129.  
  2130.   o Now use a new algorithmic approach to generate the database entries.
  2131.     The result of this is that the amount of disk space taken up by these new
  2132.     monitors is 140 blocks, compared to 176 blocks they used to take.
  2133.  
  2134.     More important is that the dimensions of Multiscan, Euro72, Super72,
  2135.     DblNTSC and DblPAL are now greater than they used to be.  This is especially
  2136.     important for DblNTSC and DblPAL, which are meant to resemble NTSC and PAL
  2137.     as closely as possible.  The Dbl....  monitors are now 720 pixels wide for
  2138.     MaxOScan, compared to 724 for NTSC/PAL, and the 676 they used to be!
  2139.  
  2140.     Also, if not running with VGAOnly, the "dead" part of the display on the
  2141.     left hand side of the screen is now useable as VideoOScan.
  2142.  
  2143.   o Defined ScanDoubled versions of the Multiscan, Euro72 and Super72 monitors
  2144.     for better coercion on AA machines.
  2145.  
  2146.   o All these monitors should now work under ECS, and give even greater
  2147.     dimensions.
  2148.  
  2149.   o No AA modes should be in RAM on non-AA machines.
  2150.  
  2151.   o Changed the names of the monitors from DoubleNTSC/PAL.monitor to
  2152.     DblNTSC/PAL.monitor to be consistent with the ModeID name strings.
  2153.  
  2154.   o All the monitors now work only with graphics.library V39.
  2155.  
  2156.   o With Kickstart 39.106 and VGAOnly, DblNTSC/PAL screens can only be 704
  2157.     pixels wide max, whilst under the current kickstart they are 720 pixels
  2158.     wide.  The DblNTSC/PAL monitor now checks for this.
  2159.  
  2160.   o Cleared up an enforcer hit with adding the A2024 after iprefs was run, and
  2161.     promotion was enabled.
  2162.  
  2163.   o Sprites were not being clipped properly in PAL A2024 modes when they
  2164.     crossed the panel boundaries.  This was causing screen trashing when the
  2165.     pointer was at certain positions because the pointer would end up in the
  2166.     A2024's special control line.
  2167.  
  2168. Prefs/IControl
  2169.  
  2170.   o Removed "Preserve Colors" gadget.  The "Avoid Flicker" gadget has been moved
  2171.     into the "Miscellaneous" gadget group instead of being by itself in the
  2172.     "Coercion" group.
  2173.  
  2174.   o If there is no prefs file, mode promotion is now turned on by default.
  2175.  
  2176. Prefs/Input
  2177.  
  2178.   o Now uses GTLV_MakeVisible tag to ensure the currently selected keymap is
  2179.     visible in the listview.
  2180.  
  2181. Prefs/Overscan
  2182.  
  2183.   o On the edit screen, changed the label of the left gadget from "Use" to
  2184.     "OK".
  2185.  
  2186.   o Added code to support the new display positioning control.  When you enter
  2187.     the overscan editing screen, if the mode supports it, there are four arrows
  2188.     that cause the entire visible portion of the display to move around.  This
  2189.     is a wonderful new feature for DblNTSC, allowing sync-dependant centering
  2190.     of display modes.  It is also possible to move the display by using the
  2191.     cursor keys.
  2192.  
  2193.   o Changed the background color on the edit screen from black to dark grey.
  2194.     This makes it much easier to detect when the display is being pushed too
  2195.     far off the right edge of the display, as the color of the display turns
  2196.     quite dim.
  2197.  
  2198.   o Made the edit screen SA_Exclusive in order to avoid folks dragging it down
  2199.     and revealing their WB.  Since the program now makes dynamic changes to
  2200.     hsync and vsync, the WB can look bad when the edit screen is pulled down.
  2201.  
  2202.   o Made the edit screen SA_Interleaved.
  2203.  
  2204. Prefs/Palette
  2205.  
  2206.   o When incapable of displaying a colored color wheel, the program now puts
  2207.     up a gadget labelled "Color Wheel..." in place of the actual color wheel.
  2208.     Clicking on this gadget causes the color wheel to come scrolling up from
  2209.     the bottom of the screen until it fills the whole display.  This color
  2210.     wheel screen lets the user edit the current color using the wheel.
  2211.     There is a pair of "OK/Cancel" gadgets to accept or reject the new color
  2212.     selection.  Clicking on either gadgets causes the color wheel to scroll
  2213.     off the bottom of the display.  Kinda neat :-)
  2214.  
  2215.   o The sample section of the program now shows a sample screen title bar.
  2216.  
  2217.   o When opening on a custom screen, no longer has a window border and title
  2218.     bar.
  2219.  
  2220.   o When switching modes from 4 to multicolor and back, will no longer
  2221.     present an empty window if it is not capable of creating its new set
  2222.     of gadgets.  The program will exit instead.
  2223.  
  2224.   o Selecting a color > 4 in the main palette, and switching to 4 Color
  2225.     Settings would not correctly redraw the gradient slider to use a color
  2226.     within the available selection.
  2227.  
  2228.   o Now uses color conversion routines from colorwheel.gadget instead of
  2229.     having inline duplicates.
  2230.  
  2231.   o Fixed incorrect flags set in some menu items so that click select of
  2232.     these items worked incorrectly.
  2233.  
  2234.   o Was letting you select between 4 and Multicolor Settings,
  2235.     even when running on a 4 color screen incapable of displaying the
  2236.     multicolor settings.
  2237.  
  2238.   o When running on an A2024 display, it no longer displays a color wheel,
  2239.     nor lets you display one.
  2240.  
  2241.   o Clicking in the sample section of the program causes the pen associated
  2242.     with the item clicked on to become selected in the pen list.  That is,
  2243.     clicking on the sample window title bar will automatically select the
  2244.     "Active Window Title Bars" pen within the pen listview.
  2245.  
  2246. Prefs/Printer
  2247.  
  2248.   o Now uses GTLV_MakeVisible tag to ensure the currently selected printer is
  2249.     visible in the listview.
  2250.  
  2251. Prefs/PrinterPS
  2252.  
  2253.   o The default margins for graphics printing are now 1 inch on the left
  2254.     and right, instead of 1 inch on the left and 2 on the right (this was
  2255.     due to a typo).
  2256.  
  2257.   o When in the Graphics Scaling page, selecting "Last Saved" from the menu
  2258.     would not cause the sample graphics to be redisplayed with the new values.
  2259.  
  2260. Prefs/ScreenMode
  2261.  
  2262.   o Fixed formatting string so that horizontal scan rates with a decimal
  2263.     value less than .1 now come out right.  That is, 29.02 was coming out
  2264.     as 29.2.
  2265.  
  2266. System/Format
  2267.   o From within the device selection listview, it was possible to double-click
  2268.     on two different devices, and have Format accept the selection.  A check
  2269.     is now done so that both clicks of a double-click occur on the same device.
  2270.  
  2271.   o When formatting from Workbench, Format now ignores any trailing colons in
  2272.     the volume name.  It would get all confused if someone tried to name
  2273.     a disk "Hello:" instead of simply "Hello".  This fixes the
  2274.     most common error automatically.
  2275.  
  2276. Tools/Calculator
  2277.  
  2278.   o Now gets the window title string from the current catalog instead of
  2279.     having it hardcoded to "Calculator".
  2280.  
  2281. Tools/Commoditites/ClickToFront
  2282.  
  2283.   o Now also filters mouse clicks that come through as IECLASS_POINTERPOS
  2284.     and IECLASS_NEWPOINTERPOS, in addition to IECLASS_RAWMOUSE.  This
  2285.     fixes the bug where ClickToFront did not work with events generated
  2286.     by tablet drivers.
  2287.  
  2288. Tools/Commodities/CrossDOS
  2289.  
  2290.   o Fixed bug where the window would not open when there was no
  2291.     L:FileSystem_Trans directory, or no file within it.
  2292.  
  2293.   o Fixed incorrect cleanup path in case of errors while scanning directories.
  2294.     The bug would cause a crash the next time the window was opened.
  2295.  
  2296.   o Now only notifies CrossDOS handler tasks of changes in settings when
  2297.     new settings differ from the old ones.
  2298.  
  2299.   o No longer has the CrossDOS semaphore locked when it locks the DOS device
  2300.     list.  This could potentially cause deadlocks.
  2301.  
  2302.   o Fixed bug where translation files were opened and read, but never closed.
  2303.  
  2304.   o Fixed bug that would cause a crash under V37 or harmless Enforcer hits
  2305.     under V39.  To reproduce, start the CrossDOS commodity and copy a large file
  2306.     to PC0 (devs:Kickstart for example).  While the copy is in progress, pick
  2307.     PC0 from the CrossDOS commodity and change its text filtering setting.  Now
  2308.     click the close gadget of the commodity program.  The window stays open
  2309.     until the large write operation completes.  As soon as this happens, the
  2310.     window closes, and a crash occurs under 2.0.
  2311.  
  2312. Tools/Commodities/FKey
  2313.  
  2314.   o When there was a key sequence in FKey with a command such as "Insert Text"
  2315.     with a string associated with it, switching the command to
  2316.     something else, and coming back to "Insert Text" would cause the current
  2317.     string to be "forgotten".  To get it back, you had to click in the
  2318.     text gadget and press RETURN.  This is now fixed.
  2319.  
  2320.   o Selecting a command such as "Insert Text", then typing in a string as
  2321.     argument would cause that string to be bound to the key sequence forever.
  2322.     That is, even if the command was switched to something like "Cycle Windows",
  2323.     the string argument would be saved out to disk and reloaded in memory
  2324.     the next time the program ran.  This was incorrect as the command didn't
  2325.     have anything to do with the string.  String arguments are now discarded for
  2326.     those commands that don't support them.
  2327.  
  2328.   o The active key sequence is now correctly highlighted in the listview.
  2329.  
  2330. Tools/HDToolBox
  2331.  
  2332.   o Now supports Host ID in "Partitioning" screen.  Now multiple machines
  2333.     can share a single disk using different partitions.
  2334.  
  2335.   o Added CHECKBOX_KIND gadget for allowing a block size other than 512 bytes
  2336.     in "File System Maintenance".  To change file system block size in
  2337.     "File System Characteristics", select this gadget first.
  2338.  
  2339.   o Changed from BUTTON_KIND gadget to CYCLE_KIND gadget for "File System
  2340.     Type".  They get labelled with their dostype as found in the file system
  2341.     resource list.
  2342.  
  2343.   o Added CHECKBOX_KIND gadgets for "Fast File System", "International Mode"
  2344.     and "Directory Cache".
  2345.  
  2346.   o Added CYCLE_KIND gadget for file system block size.
  2347.  
  2348.   o Recognizes the "Help" key now.
  2349.  
  2350. HDSetup/HDSetup
  2351.  
  2352.   o Localized the name of the "Work" partition following request from Germany.
  2353.  
  2354. Install/Install
  2355.  
  2356.   o No longer copies the A2232 port-handler from the install disk when an
  2357.     A2232 card is detected.  The 39.1 port-handler  handles the A2232
  2358.     automatically
  2359.  
  2360.  
  2361.  
  2362.  
  2363. Appendix C:  V39 ROM Changes
  2364.  
  2365.  
  2366. Following is a description of most of the important changes made to the
  2367. ROM-based system software between V37 and the initial release of V39.  This
  2368. doesn't cover changes made to modules discussed in other talks, such as
  2369. graphics and Intuition.
  2370.  
  2371.  
  2372. BootMenu
  2373.  
  2374.   o Brand new interface featuring 4 different displays:
  2375.  
  2376.        Main Page: Lets you select between "Boot Options...",
  2377.                   "Display Options..." and "Expansion Board Diagnostic...".
  2378.                   Clicking any one of these brings up the corresponding page.
  2379.                   The "Boot" gadget resumes the boot operation using the
  2380.                   options selected in the other pages, and the "Boot With
  2381.                   No Startup-Sequence" gadget does the same, except it doesn't
  2382.                   execute the startup-sequence.
  2383.  
  2384.        Boot Page: Lets you control boot-related options.  The listview on the
  2385.                   left lets you pick which device to boot from.  The one on
  2386.                   the right lets you enable/disable devices in the system.
  2387.                   There is also a "Disable CPU Caches" gadget.  It turns
  2388.                   off the CPU caches for the current boot, which saves a lot
  2389.                   of games that break on 68040 processors because of the big
  2390.                   caches.  Use or Cancel bring you back to the main page.
  2391.  
  2392.        Gfx Page: Lets you pick what mode to boot in, and what chip set to
  2393.                  emulate.  Use or Cancel bring you back to the main page.
  2394.  
  2395.        Diag Page: Lists all the boards in the system and shows their state
  2396.                   (Working or Defective).  This page is automatically brought
  2397.                   up during system bootup if a board is defective.
  2398.  
  2399.   o Hitting any key toggles the display between NTSC and PAL.  A message on the
  2400.     main page indicates this fact.
  2401.  
  2402. cia.resource
  2403.  
  2404.   o Changed the priority of the interrupt servers to +120 such that
  2405.     they don't miss interrupts.
  2406.  
  2407. con-handler
  2408.  
  2409.   o Fixed a low-memory trashing problem were CON: would signal a NULL task.
  2410.  
  2411.   o It no longer will use proportional fonts (or rather fail at trying to use
  2412.     them) when opened on a public screen.
  2413.  
  2414.   o It is no longer possible to size the window such that the entire
  2415.     interior goes away.
  2416.  
  2417.   o Fixes the title bars (the parsing routine wasn't skipping over delimiters).
  2418.     This also fixes the "funny" results you would get with malformed CON:
  2419.     lines (like con:0a/0/640/200/title having a title of "200").
  2420.  
  2421.   o Fixes negative sizes in the window spec.  Height < 0 gives you max
  2422.     displayable height.
  2423.  
  2424.   o Always opens window big enough for one line of text.
  2425.  
  2426. console.device
  2427.  
  2428.   o CMD_CLEAR fixed, was broken in V37.
  2429.  
  2430.   o Uses screen dimensions (rounded off to nearest byte width) to calculate
  2431.     maximum character map width instead of using bm_BytesPerRow.  Likewise
  2432.     uses screen height instead of bm_Rows.
  2433.  
  2434.   o First pass at the scrolling optimizations.  Recalcs scroll mask
  2435.     at reset time (set to defaults), at full clear screen time (FF, or
  2436.     HOME/CLS), and whenever you set new pen/cell/background colors
  2437.     via the standard SGR sequences.
  2438.  
  2439.   o Rework how conceal mode works - no longer sets rp_Mask to 0 which also
  2440.     disabled ALL output, including scrolling, clearing, etc...  not good for
  2441.     character mapped consoles in particular since it causes the display & map
  2442.     to lose sync.
  2443.  
  2444.   o Scroll DOWN no longer tries to fill in vacated portions of the
  2445.     window with text in the off-screen buffer (if any).  This was
  2446.     useless as a scrollback feature, could crash if you scrolled down more
  2447.     than one window's worth of text (ouch), didn't perform a window
  2448.     refresh (thereby leaving hidden characters in the visible map until
  2449.     you resized, or revealed), and was inconsistent with SMART REFRESH
  2450.     consoles - the application using scroll down would reasonably expect
  2451.     that the vacated portion is entirely empty.
  2452.  
  2453.   o First pass at breaking up large CMD_WRITEs.  Now unlocks layers
  2454.     approx every 256 characters (this is simple, low-overhead code which
  2455.     does not try to be exact).  Recalcs everything when layers are relocked.
  2456.  
  2457.     Helps quite a bit.  No more locks for the entire file when doing
  2458.     COPY foo *.  Makes console much more friendly; you can now resize
  2459.     windows (only minor delay) during long writes, click in other windows,
  2460.     etc.
  2461.  
  2462.     Note this simple code won't work for a long stream of text with
  2463.     no control characters; this however is extremely rare.  Even text
  2464.     files have LF's, however in any case the problem is no worse than it
  2465.     was before.
  2466.  
  2467.   o The above feature makes it possible to cheaply break a CMD_WRITE,
  2468.     hence making it possible to easily fix the DisplayBeep() deadlock
  2469.     bug.  DisplayBeep() is now postponed a few CPU instructions
  2470.     until after layers are unlocked.
  2471.  
  2472.   o First pass at modifying mouse tracking code (drag selection)
  2473.     to use input events instead of PeekQualifier().
  2474.  
  2475.     This code change was added so tablet drivers, and commodities
  2476.     can be used in character mapped consoles with selection capability.
  2477.     PeekQualifier() returns only what input.device thinks the qualifiers
  2478.     are; not what's seen by applications which watch/use the input stream.
  2479.  
  2480.   o Now supports a new private sequence ("ESC[ s") which sets the
  2481.     current SGR settings as your defaults.  This affects ESC[0m
  2482.     (reset all SGR settings), ESC[39m (reset default primary pen),
  2483.     and ESC[49m (reset default secondary pen [cell color]).
  2484.  
  2485.     Text style info, and reverse mode (on/off) are also saved,
  2486.     and hence restored when ESC[0m is sent.
  2487.  
  2488.     This is intended as a user sequence for use in your shell-startup;
  2489.     it allows you to use other colors/settings, and not have these constantly
  2490.     reset by programs like MORE, LS, etc.  I'm recommending it not be used by
  2491.     applications; only users for their shells.  An application which can
  2492.     deal with this problem of SGR settings should continue to do whatever it is
  2493.     doing now.  ESCc (reset console) does however reset the default
  2494.     SGR settings to their true defaults.
  2495.  
  2496.   o Downcoded pack.c.  Is many times faster (if the maps
  2497.     are not disorganized; the maps become disorganized as text is
  2498.     scrolled off screen, so in these cases an initial resize can
  2499.     still take a moment - didn't want to touch that code though).
  2500.     For an organized map, resizing even very large windows (e.g.,
  2501.     Moniterm size) with 8x8 or smaller fonts (so we have a really
  2502.     large map) is virtually instanteous on a 3000, and nearly so
  2503.     even on 68000 machines.  It still takes time to redraw
  2504.     the text (limited primarly by the Text() function), but the
  2505.     time needed to pack, and unpack the map is a fraction of
  2506.     what it was.
  2507.  
  2508.   o Borderfill code added so ESC[>#m fills to borders if an explicit
  2509.     line length and/or page length have not been set.  No change to
  2510.     cu_XRExtant or cu_YRExtant in public portion of console unit structure.
  2511.  
  2512.     Border refers to the area outside of the normal console rendering area
  2513.     up to the window right/bottom borders.  The size of this area is 0-N
  2514.     pixels where N is a maximum of the font width-1 or height-1.
  2515.  
  2516.   o OpenDevice() now fails if trying to open a character mapped console, but
  2517.     memory can not be allocated for the map.  In V37, OpenDevice() returned
  2518.     success for this case which left you with a half functioning console
  2519.     window - clearly confusing for the user, and virtually worthless because
  2520.     of the lack of refresh info needed to fix up damage.
  2521.  
  2522.     OpenDevice() still works the same if you have a SIMPLE_REFRESH window,
  2523.     but did not ask for a character map (uncommon, but doable).
  2524.  
  2525.   o Also fixed a bug which you may never see now that the above code was added;
  2526.     clearing a simple refresh window which lacked a character map cleared
  2527.     a garbage rectangle; layers prevents this from being a crash, and code
  2528.     elsewhere inhibited negative rectangles.  The bug exists in 1.3 also, and
  2529.     was partially fixed for 2.0; the bug use to be apparent in SUPER_BITMAP
  2530.     windows, and because the case of SIMPLE_REFRESH without a map is rare
  2531.     for console.device, the bug has probably never been noticed (found during
  2532.     memoration testing).
  2533.  
  2534.   o Removed code which checks to see if the application had drawn over the
  2535.     cursor in a console.device opened by the application.  The kludge did a
  2536.     ReadPixel() of every pixel where the cursor was drawn, and if any bits did
  2537.     not match the expected color (also modified by pattern), cursor drawing was
  2538.     turned off for that console for as long as that console window was opened.
  2539.  
  2540.     Applications (few) which draw over the console cursor, but do not
  2541.     explicitly turn it off will now have a patterned rectfill the size
  2542.     of the cursor (generally 8x8) in the upper left hand corner of the
  2543.     window if the window is deactivated.  This is a minor visual problem,
  2544.     though not one which should cause anyone to crash, or not run.  The
  2545.     problem will also never be noticed if the console window is not
  2546.     deactivated.
  2547.  
  2548. dos.library
  2549.  
  2550.   o Fixes a bug in Open() where if the path was more than 127 characters long,
  2551.     a random byte of memory would be trashed.
  2552.  
  2553.   o Has support for fib_OwnerXXX for the networking people.  ExAll() supports
  2554.     ED_OWNER.
  2555.  
  2556.   o Added ExAllEnd().
  2557.  
  2558.   o Added SetOwner().
  2559.  
  2560.   o Fixed overrun error in FGets() (if no newline or EOF, it reads one
  2561.     byte too many into your buffer - workaround for V36/37 - allocate buffer
  2562.     1 byte larger than passed in.
  2563.  
  2564.   o HUNK_RELOC32SHORT now works at the right value (1020).  Also added a 32-bit
  2565.     PC-relative reference mode, mainly for >= '020-only executables.
  2566.  
  2567.   o Added GVF_SAVE_VAR.  For SaveVar(), it will now do the same actions
  2568.     for ENVARC:whatever, as well as ENV:.
  2569.  
  2570.   o Fixed character classes in ParsePatternNoCase().  The classes weren't being
  2571.     promoted to upper case (i.e.  [a-z] should have become [A-Z]).  Note that
  2572.     only ParsePatternNoCase() was affected by this bug, not
  2573.     MatchFirst()/MatchNext()
  2574.  
  2575.   o Fixed FreeDosObject(xxx,DOS_CLI).  It wasn't freeing the strings
  2576.     associated with the CLI.
  2577.  
  2578.   o FindCliProc(0) now returns NULL, even though it's an invalid
  2579.     CLI number.
  2580.  
  2581.   o For people passing in an RDArgs structure but no RDA_Buffer to ReadArgs(),
  2582.     it now properly clears out RDA_Buffer on FreeArgs(), so you can reuse it
  2583.     safely (without having to clear it out yourself).
  2584.  
  2585.   o StrToLong() was returning the number of white-space characters if no
  2586.     digits were found.  It now properly returns -1.
  2587.  
  2588.   o Fixed GVF_DONT_NULL_TERM for global variables.
  2589.  
  2590.   o The initial console window on bootup now opens the size of the Workbench
  2591.     DClip.
  2592.  
  2593.   o Fixes the CliInitNewCLI() open of S:Shell-Startup when no FROM file is
  2594.     specified.
  2595.  
  2596.   o Fixed "Copy CONSOLE: foo" by making GetDeviceProc() know about CONSOLE:.
  2597.  
  2598.   o Localized "Software Failure".
  2599.  
  2600. filesystem
  2601.  
  2602.   o Added support for DOS\4 and DOS\5 file systems which offer directory
  2603.     caching.  DOS\4 and DOS\5 are orders of magnitude faster at directories
  2604.     than other file systems, since they keep a cached copy of all the
  2605.     ExNext()/ExAll() data appended to the directory.  This does require a few
  2606.     extra block accesses on create and delete, and also after modifying the
  2607.     file (in Close()).  Create speed dropped about 30%.  However, directory     speed is 7-20 times faster.
  2608.  
  2609.     For floppies, this usually means that dir or list take about 3/4-1
  2610.     second to start, and then you get most or all of the directory instantly,
  2611.     or within 1/2 second or so (it may take 1 or 2 seconds for really big
  2612.     directories).
  2613.  
  2614.   o Fixed a bug with delete for non-DOS\5 partitions.
  2615.  
  2616.   o Fixed a random memory trash in the filesystem in a race condition.
  2617.     When two renames hit just the right timing, one has to wait on the
  2618.     other, and the wait routine used the wrong (garbage) register to get
  2619.     the head of the list.  This trashed 1 longword of semi-random memory,
  2620.     and then hung the rename forever.
  2621.  
  2622. gadtools.library
  2623.  
  2624.   o LayoutMenus() and LayoutMenuItems() recognize some new tags to support
  2625.     NewLook menus:
  2626.  
  2627.     GTMN_NewLookMenus (BOOL): requests NewLook menu treatment.
  2628.     GTMN_Checkmark (struct Image *): checkmark you'll use in menus
  2629.     GTMN_AmigaKey (struct Image *): Amiga-key image you'll use in menus
  2630.  
  2631.     Basically, if you open your window with WA_NewLookMenus, also lay out your
  2632.     menus with GTMN_NewLookMenus.  If the menu-item font will be the screen's
  2633.     font, that's all you need to do.  If the menu-item font is something else,
  2634.     you must create a checkmark and an Amiga-key image, and pass each one to
  2635.     both Intuition (WA_Checkmark and WA_AmigaKey) and to GadTools
  2636.     (GTMN_Checkmark and GTMN_AmigaKey).
  2637.  
  2638.     GTMN_FrontPen is now recognized.  If GTMN_NewLookMenus is specified, this
  2639.     attribute defaults to the screen's BARDETAILPEN, else it defaults to
  2640.     "do nothing", which allows the GTMN_FrontPen tag that may have been passed
  2641.     to CreateMenus() to still hold.
  2642.  
  2643.   o STRING_KIND, INTEGER_KIND, and BUTTON_KIND gadgets now support the
  2644.     GA_Immediate tag.
  2645.   o You can now put an arbitrary command string in the right-hand side
  2646.     of a menu, where the Amiga-key equivalent goes.  To do this, point
  2647.     the NewMenu nm_CommKey field at the string (eg.  "Shift-Alt-F1), and
  2648.     set the new NM_COMMANDSTRING flag in nm_Flags.
  2649.  
  2650.   o If a window has multiple checkboxes or radio buttons, a separate
  2651.     image is no longer allocated for each one.
  2652.  
  2653.   o The bevel box of the slider and listview now refresh with the gadget,
  2654.     instead of with GT_RefreshWindow().
  2655.  
  2656.   o Scrollers with GA_RelVerify set weren't sending IDCMP_GADGETUP messages
  2657.     when the arrow buttons were released.
  2658.  
  2659.   o GadTools now uses SetABPenDrMd() when advantageous.
  2660.  
  2661.   o New GTMX_Scaled and GTCB_Scaled tags instruct GadTools to scale the mx
  2662.     button and checkmark respectively to the dimensions supplied in the
  2663.     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.
  2664.  
  2665.   o GadTools now has a GT_GetGadgetAttrsA() function (and a
  2666.     GT_GetGadgetAttrs() varargs version).  This function retrieves
  2667.     attributes of the specified gadget, according to the attributes chosen
  2668.     in the tag list.  For each entry in the tag list, ti_Tag identifies
  2669.     the attribute, and ti_Data is a pointer to the long variable where you
  2670.     wish the result to be stored.
  2671.  
  2672.   o Checkboxes now return their "selected" state in the IntuiMessage->Code
  2673.     field.
  2674.  
  2675.   o Many new tags for CreateGadgetA() were added:
  2676.  
  2677.         GTTX_FrontPen and GTTX_BackPen to let the color of TEXT_KIND
  2678.         gadgets be controlled.
  2679.  
  2680.         GTNM_FrontPen and GTNM_BackPen to let the color of NUMBER_KIND
  2681.         gadgets be controlled.
  2682.  
  2683.         GTNM_Format to specify the formatting string to use with
  2684.         NUMBER_KIND gadgets.  This is so a localized number format using
  2685.         "%lD" instead of "%ld" can be used.
  2686.  
  2687.         GTNM_MaxFormatLen to specify the maximum length of the string that
  2688.         can be generated by GTNM_Format.
  2689.  
  2690.         GTTX_Justification and GTNM_Justification to allow for right
  2691.         and center justification on TEXT_KIND and NUMBER_KIND gadgets.
  2692.  
  2693.         GTSL_MaxPixelLen lets you specify the maximum pixel length the level
  2694.         display of a SLIDER_KIND gadget will occupy.  This allows proportional
  2695.         fonts to be used with sliders.
  2696.  
  2697.         GTSL_Justification specifies how the level display of a SLIDER_KIND
  2698.         gadget is to be justified within the width allocated by
  2699.         GTSL_MaxPixelLen.
  2700.  
  2701.         GTLV_MakeVisible for listviews.  You pass it an item number and it
  2702.         makes sure it is visible within the listview display.
  2703.  
  2704.   o Many new tags for GT_SetGadgetAttrsA():
  2705.  
  2706.         GTTX_FrontPen, GTTX_BackPen, GTNM_FrontPen, GTNM_BackPen, GTNM_Format
  2707.         GTTX_Justification, GTNM_Justification, GTSL_Justification, and
  2708.         GTLV_MakeVisible all have the same purpose as described for
  2709.         CreateGadgetA() above.
  2710.  
  2711.         MX_KIND gadgets now support GA_Disabled.
  2712.  
  2713.         GTSL_DispFunc and GTSL_LevelFormat are now changeable via
  2714.         GT_SetGadgetAttrs() instead of being create-time only attributes.
  2715.  
  2716.   o Added the GTBB_FrameType tag which gives access to the new frame types
  2717.     available in Intuition.  You pass the tag to DrawBevelBox() and can specify
  2718.     BBFT_BUTTON, BBFT_RIDGE or BBFT_ICONDROPBOX.
  2719.  
  2720.   o GT_SetGadgetAttrs() can now safely be called when the gadget being affected
  2721.     is not attached to a window, by passing a NULL window parameter
  2722.  
  2723.   o Specifying GTTX_CopyText and not GTTX_Text now works for TEXT_KIND gadgets.
  2724.  
  2725.   o TEXT_KIND or NUMBER_KIND gadgets that have the GTTX_BackPen or GTNM_BackPen
  2726.     tags specified look visually cleaner when changing the gadget text
  2727.     using GTTX_Text or GTNM_Number than those without.  Listviews take
  2728.     advantage of this when applicable.
  2729.  
  2730.   o The value of GTSL_Level is now bounds checked at CreateGadget() time in
  2731.     addition of at GT_SetGadgetAttrs() time.
  2732.  
  2733.   o Fixed bug where doing GT_SetGadgetAttrs() on a MX_KIND gadget and not
  2734.     passing the GTMX_Active tag would reset the active selection to #0 instead
  2735.     of leaving it alone.
  2736.  
  2737.   o The NewGadget.ng_TextAttr field can now be NULL whenever a gadget is
  2738.     created.  In such a case, the screen's TextAttr is used (screen's TextAttr
  2739.     is determined from the VisualInfo in the NewGadget structure).
  2740.  
  2741.   o The level display of SLIDER_KIND gadgets is now rendered with background
  2742.     set to BACKGROUNDPEN instead of 0, which is more "correct".
  2743.  
  2744.   o Now uses SetWriteMask() instead of SetWrMsk().
  2745.  
  2746.   o Added support for gadget help in all gadget types.
  2747.  
  2748.   o GadTools now handles the new ExtIntuiMessage generated by Intuition.
  2749.  
  2750.   o Many enhancements to PALETTE_KIND gadgets:
  2751.  
  2752.         Palette gadgets no longer display a box filled with the selected color.
  2753.         The selected color is instead denoted by a box drawn around the color
  2754.         square in the main palette area.
  2755.  
  2756.         Palette gadgets now allow strumming, and right mouse button
  2757.         cancellation.
  2758.  
  2759.         GTPA_ColorTable is a new tag to support sparce color tables in
  2760.         gadtools.  Ths tag can be passed at create/set/get time.
  2761.  
  2762.         GTPA_NumColors is a new tag to specify the total number of colors to
  2763.         display.  This allows amounts of colors that are not powers of 2.  This
  2764.         tag is also good at create/get time.
  2765.  
  2766.         GTPA_ColorOffset is now supported at get/set time.
  2767.  
  2768.         Renders itself much faster, this makes a big difference on 256 color
  2769.         screens.
  2770.  
  2771.         Now does quite smart layout of the color squares.  An attempt
  2772.         is made to keep them as square as possible, based on the aspect ratio
  2773.         information obtained from the gfx database.  As many colors as possible
  2774.         are put on the screen, until things get too small in which case the
  2775.         upper colors are thrown away.
  2776.  
  2777.   o MX_KIND gadgets now support ng_GadgetText and will display the label
  2778.     in relation to the group of mx gadgets.
  2779.  
  2780.   o Added GTMX_TitlePlace tag.  This determines where the title of a MX_KIND
  2781.     gadget is displayed.  If this tag is not provided, the title is not
  2782.     displayed.  This is required for compatibility.
  2783.  
  2784.   o Fixed size calculation errors in listview present since V37.  This
  2785.     may cause certain listviews to change in size from their V37 size.
  2786.  
  2787.   o Revamp of listviews:
  2788.  
  2789.         ListView lines can no longer end up complemented in certain tricky
  2790.         situations involving detaching lists.
  2791.  
  2792.         ListViews correctly track the selected line when you click in them.
  2793.  
  2794.         ListViews were clipping the text four pixels early on the right.
  2795.  
  2796.         Added GTLV_CallBack.  This tag allows a callback hook to be provided
  2797.         to gadtools for listview handling.  Currently, the hook will only
  2798.         be called to render an individual item.  This adds the very useful
  2799.         ability to define a callback hook which is used to scroll complex
  2800.         items such as graphics, etc.
  2801.  
  2802.         Listviews now allow strumming.  That is, holding down the left mouse
  2803.         button and moving the mouse up or down causes the active selection
  2804.         to track the mouse.  Moving the mouse off the top or bottom of the
  2805.         listview causes the list to scroll.
  2806.  
  2807.         Listviews that used to have a display or string gadget underneath
  2808.         them now have a highlight bar to indicate the selected item.  This is
  2809.         in anticipation of listview multi-selection.  If the listview had a
  2810.         display gadget, it no longer does as the highlight bar is used.  If
  2811.         a listview had a string gadget, it retains it.
  2812.  
  2813.         Listviews highlighting is done using the pen-spec method instead of
  2814.         the 1.3 complementing method.
  2815.  
  2816.         Listviews are much faster at rendering and scrolling, which makes a
  2817.         noticeable difference in 8 bit planes
  2818.  
  2819.         Added GTLV_MaxPen tag to specify the maximum pen number used by
  2820.         a custom rendering callback hook.  This enables more optimal scrolling
  2821.         and screen updates.
  2822.  
  2823.         {GTLV_Selected, ~0} is now supported at both create and set times.
  2824.  
  2825.         {GTLV_Labels, ~0} is now supported at create time.
  2826.  
  2827.         Listviews now support GA_Disabled.  This causes the list area to be
  2828.         ghosted, but the scroller and arrows remain unghosted.
  2829.  
  2830.   o When cloning a rastport for internal use, no longer copies the TmpRas
  2831.     field of the original rastport, which should eliminate some potential
  2832.     bugs.
  2833.  
  2834.   o Changed the definition of TEXTIDCMP and NUMBERIDCMP in gadtools.h to be
  2835.     (0) instead of (NULL), to keep the Manx compiler happy.
  2836.  
  2837.   o It is now safe to call GT_GetGadgetAttrs() and GT_SetGadgetAttrs() with
  2838.     NULL gadget pointers.
  2839.  
  2840.   o When GT_SetGadgetAttrs() is called on an active STRING_KIND or
  2841.     NUMBER_KIND gadget, the gadget is automatically reactivated after
  2842.     its string is changed.  Although this reactivation flickers,
  2843.     the functionality is quite useful.
  2844.  
  2845.   o Now copies a complete TTextAttr structure when needed to fix potential
  2846.     problems with WeightTAMatch().  This is only done to create underlines
  2847.     under gadget labels.
  2848.  
  2849.   o Fixed example in CreateGadget() autodoc.  Only had a single argument in the
  2850.     call to GT_RefreshWindow()
  2851.  
  2852.   o BOOPSI images are now allowed in gadtools menus.
  2853.  
  2854.   o Added the GTTX_Clipped tag for TEXT_KIND gadgets.
  2855.  
  2856.  
  2857. ramdrive.device
  2858.  
  2859.   o Uses AllocMem(xxxx,MEMF_REVERSE!MEMF_KICK!MEMF_NO_EXPUNGE) instead
  2860.     of private AllocHigh() code.
  2861.  
  2862.   o Uses CopyMem() instead of an unrolled loop.  CopyMem()'s MOVEM's are
  2863.     faster than the unrolled loop used previously.
  2864.  
  2865.   o Protects KickTag/KickMem list with FORBID/PERMIT inside of KillRad()
  2866.     vector used by REMRAD.  Fixes possible crash if some other task
  2867.     is fiddling with these lists at the same time.
  2868.  
  2869. ram-handler
  2870.  
  2871.   o Fixes the long standing bug where if the file you were examining with
  2872.     ExNext() is deleted, RAM: goes off into never-never land (and your system
  2873.     follows).  If the file is deleted, it will restart at the beginning of the
  2874.     directory.
  2875.  
  2876.   o Disabled softlinks in RAM: to save ROM space.
  2877.  
  2878. shell
  2879.  
  2880.   o NewShell/NewCLI now open full with (like Shell from WB).
  2881.  
  2882.   o NewShell/NewCLI now handle FROM fields up to 255 long (up from 127) and
  2883.     errors out if FROM or WINDOW are too long.
  2884.  
  2885.   o Resident module handling now properly Forbid()s around seg_UC++/--.
  2886.  
  2887.   o Prompt now handles %%.
  2888.  
  2889.   o Removed two harmless enforcer hits at boottime.
  2890.  
  2891.   o If a "command `command...` ..." fails, it no longer inserts the error
  2892.     message and continues (FailAt is used to determine failure).
  2893.  
  2894.   o Added evil kludge to solve the problem of 1.3 SetClock crashing on 68040s.
  2895.  
  2896.   o Fixes the write to rom on <> redirection.
  2897.  
  2898.   o NewShell/NewCLI no longer print error messages if no S:Shell-Startup is
  2899.     present.
  2900.  
  2901. timer.device
  2902.  
  2903.   o Timer keys off new GfxBase flag for determining EClock frequency
  2904.     since PAL/NTSC is now software selectable.
  2905.  
  2906. trackdisk.device
  2907.  
  2908.   o Post-write delay has been moved from 2ms (spec is 1.2ms) to 3ms,
  2909.     and side settle delay from 1ms (spec is 0.1ms) to 1.5ms.  This should fix
  2910.     most A1010's out there.  In addition, both of those values have been made
  2911.     part of the public unit structure like settle delay and step delay, so
  2912.     people with REALLY bad A1010's can back it off as far as they need to
  2913.     (or setpatch can).
  2914.  
  2915.   o Fixes a nasty oversight in the HD floppy handling.  After switching
  2916.     from a HD floppy to LD floppy and back to HD floppy, you could never
  2917.     safely write to an HD floppy unless you formatted an HD floppy first.
  2918.  
  2919.     What happened was that the extra slop area at the front of the write
  2920.     wasn't getting set to $aaaaaaaa, it was being left with garbage from the
  2921.     last LD read (since LD uses less slop, it's start-read spot is earlier).
  2922.     Format re-inits the entire buffer, as does the first switch to an HD
  2923.     floppy (only the first, since it switches to a larger buffer then).
  2924.  
  2925.   o Fixed a bug where if a track was totally unreadable it returned the number
  2926.     of retries as the IO_ERROR instead of TDERR_NoSecHdr (this was causing the
  2927.     "Error 11" stuff when you popped a disk while copying from it).
  2928. utility.library
  2929.  
  2930.   o Downcoded all tag calls from C to assembly which yields substantially
  2931.     faster performance.
  2932.  
  2933.   o Removed 68020-specific versions of the date conversion routines.
  2934.  
  2935.   o Fixed bug in MapTags() where the "includeMiss" parameter didn't work.
  2936.  
  2937.   o Cleaned up and expanded autodocs.
  2938.  
  2939.   o Cleaned up public include files.
  2940.  
  2941.   o Added comments in the autodoc entries for the 4 32-bit math routines,
  2942.     to the effect that they preserve address registers, and that A6
  2943.     does NOT have to be loaded in order to call the routines.  This is an
  2944.     exception to the standard rule, but can avoid register shuffling which
  2945.     is important in low-level math routines.
  2946.  
  2947.   o Made the math routines several cycles faster on 68000 machines.
  2948.  
  2949.   o Added SMult64() and UMult64() which do 32x32=64 bit integer math.
  2950.  
  2951.   o Added ApplyTagChanges().
  2952.  
  2953.   o Added two new library calls that are mainly here to help intuition get
  2954.     smaller.  These are PackStructureTags() and UnpackStructureTags().
  2955.  
  2956.   o Added the NameSpace code.
  2957.  
  2958.   o Added GetUniqueID().
  2959.  
  2960.  
  2961.  
  2962.  
  2963.  
  2964. Appendix D:  Release 3.1 ROM Changes
  2965.  
  2966.  
  2967. Following is a description of most of the important changes made to the
  2968. ROM-based system software between Release 3 and Release 3.1.  This doesn't
  2969. cover changes made to modules not discussed in this talk.  It also doesn't cover
  2970. any changes after December 1992.  Since 3.1 is still under development as of
  2971. this writing, more changes are likely to be made to the software prior to
  2972. release.
  2973.  
  2974.  
  2975. BootMenu
  2976.  
  2977.   o Fixed bug where the chip type mutual exclude gadget was being displayed
  2978.     even on pre-ECS machines.
  2979.  
  2980. exec.library
  2981.  
  2982.   o Added the full support for the Zorro-III quick interrupts.
  2983.     The new LVO (in an old slot) ObtainQuickVector() is used to allocate
  2984.     the vector.  There is no deallocation since this is basically
  2985.     a configuration issue and not a dynamic thing.
  2986.  
  2987.   o On machines with PCMCIA cards, EXEC now makes sure the interface
  2988.     is turned on at boot time and then will turn it off before configuration.
  2989.     This should let a full 8-meg of RAM be added in the Zorro-II space.
  2990.     This change requires an update to the credit card resource/device
  2991.     such that it will correctly turn on the interface if needed.
  2992.  
  2993.   o The Quick Interrupt vectors that have not yet been added used to
  2994.     be -1.  Now they point at an Alert that is the new Unexpected
  2995.     Quick Interrupt.
  2996.  
  2997. gadtools.library
  2998.  
  2999.   o Fixed bugs in clipping code in TEXT_KIND and NUMBER_KIND gadgets.  The
  3000.     clipping didn't work correctly on right and center justified text, and
  3001.     was under-evaluating the number of pixels available for the text in a
  3002.     gadget that didn't have borders.
  3003.  
  3004.   o Fixed bug in the calculation of the default value for the GTSL_MaxPixelLen
  3005.     tag.  This caused odd clipping of the number display for sliders whenever
  3006.     the title of the gadget wasn't on the same side of the slider as the
  3007.     display of its current value.
  3008.  
  3009.   o Fixed GTJ_CENTER option for the various GTXX_Justification tags.  The way
  3010.     centering was done could cause certain characters to get lost.
  3011.  
  3012. carddisk.device
  3013.  
  3014.   o Now flushes cache during data writes in anticipation of 040 copyback
  3015.     cache on A1200 (no hardware support for PCMCIA memory space data
  3016.     cache control provided, so the data cache is still potentially
  3017.     a problem when programming flash rom; means turning off the
  3018.     data cache globally for 030/040 A1200's to support 6-10us
  3019.     write/verify timing).
  3020.  
  3021. card.resource
  3022.  
  3023.   o Now leaves PCMCIA slot disabled if any RAM is configured at $600000;
  3024.     this allows use of >4Megs of 24bit RAM on the A1200 at the expense of
  3025.     being unable to use the PCMCIA slot.
  3026.  
  3027.   o Partial work around for a hardware bug in our PCMCIA implementation
  3028.     which presents 2Meg+ addresses everytime we access ATTRIBUTE memory.
  3029.     This causes a problem when a >2Meg card which ignores REG is used
  3030.     (and a potential problem with any card which tries to decode the entire
  3031.     address when REG is set).  The former problem is kludged around by trying
  3032.     to sniff out mirroring of 4 bytes at $A00000 and $800000 but not mirrored
  3033.     at $600000.
  3034.   - Tested with:
  3035.     Fujitsu 512K SRAM (ignores REG)
  3036.     Fujitsu 128K SRAM (decodes entire address)
  3037.     Panasonic 512K SRAM (returns $FF for attribute memory)
  3038.     HP 128K SRAM (has 16 bytes of attribute memory)
  3039.     NewMedia 2M PSRAM (ignores REG)
  3040.     NewMedia 4M PSRAM (ignores REG - this is the card which demonstrates
  3041.         the problem)
  3042.  
  3043.   o Considerably faster memory sizing for SRAM/DRAM cards (does test of
  3044.     every 256 words/long-words) - tested with:
  3045.  
  3046.     Fujitsu 512K SRAM (ignores REG)
  3047.     Fujitsu 128K SRAM (decodes entire address)
  3048.     Panasonic 512K SRAM (returns $FF for attribute memory)
  3049.     HP 128K SRAM (has 16 bytes of attribute memory)
  3050.     NewMedia 2M PSRAM (ignores REG)
  3051.     NewMedia 4M PSRAM (ignores REG - this is the card which demonstrates
  3052.             the problem)
  3053.  
  3054.   o CardMemoryMap structure extended for V39 card.resource.  Now has
  3055.     COMMON/ATTR/IO Memory Zone size for lookup via structure.  Will be used
  3056.     to provide splitting of memory zones in the future if needed.  No change
  3057.     for existing software.
  3058.  
  3059.   o BVD1/SC, BVD2/DA, and BSY/IRQ status change interrupts can now be
  3060.     individually enabled/disabled.  WR (Write-Protect) status change
  3061.     interrupts are always enabled (rare), and there is no change in the
  3062.     defaults.  This is intended for future use if needed (e.g., Flash-ROM
  3063.     which expects software to poll SC during programming; better performance
  3064.     can be obtained if interrupts are not generated).  If needed on the A600,
  3065.     this can be implemented as documented work around, or SeFunction() of
  3066.     CardMiscControl().  No expected change for existing software;
  3067.     defaults are the same as they use to be in V37 card.resource.  Spurious
  3068.     interrupts (change true, but interrupt disabled) are cleared by the
  3069.     resource software, and hidden from the status change callback hook.
  3070.  
  3071.   o Secondary callback option for status change interrupts; allows
  3072.     high-performance hardware to be serviced via interrupts only (instead of
  3073.     signalling a task).
  3074.  
  3075.   o Flush Cache when ReleaseCard() is called.  A flush before full release
  3076.     ensures that no more writes will occur once the caller returns from
  3077.     ReleaseCard().  This is to support the 040 copyback cache when/if an 040
  3078.     becomes available for the A1200.  Would prefer control over the data cache
  3079.     for PCMCIA space independent of the first 4MEG of 24bit Fast RAM, but we
  3080.     don't have this feature.  Lack of Data Cache control for PCMCIA space is
  3081.     still potentially problematic for use of FlashROM programming which
  3082.     requires disabling the DATA cache for 030/040 equipped A1200's so that fast
  3083.     (6-10us) write/read operations can be performed during programming.
  3084.     Disabling the DATA cache during FlashROM writes means disabling globally.
  3085.  
  3086. dos.library
  3087.  
  3088.   o Fixed bug in RemAssignList(): it wouldn't remove the first lock in the
  3089.     assign.
  3090.  
  3091.   o AttemptLockDosList() was returning NULL or 1 for failure instead of NULL.
  3092.  
  3093.   o Made RunCommand() free any memory added to the tc_MemEntryList by
  3094.     the command being run.  tc_MemEntry is now saved and emptied before calling
  3095.     the command, and restored after any added memory is freed.
  3096.  
  3097.   o Fixed ExAll() emulation to not lose 1 file each time the list is broken
  3098.     up into multiple ExAll() calls.
  3099.  
  3100.   o Removed broken attempted fix for rda_Buffer.  Autodocs now reflect that
  3101.     you must restore rda_Buffer before each call to ReadArgs() if you pass
  3102.     in an RDArgs structure.  Now always clears rda_Buffer in FreeArgs().
  3103.  
  3104.   o SetVBuf() enabled.
  3105.   o Changed some prototypes to avoid c++ reserved word "template".  Changed
  3106.     VPrintf()/VFPrintf() prototypes to VOID * from LONG * to reduce useless
  3107.     compiler warnings/casts.
  3108.  
  3109.   o GetDeviceProc() now returns errors better (especially
  3110.     ERROR_NO_MORE_ENTRIES).  It used to lose error codes by calling
  3111.     UnLock().
  3112.  
  3113.   o SetVBuf() now updates the filehandle so it won't overwrite the buffer
  3114.     with a smaller one if SetVBuf() is called before doing buffered IO.
  3115.     Also it doesn't allocate anything if the new size is the same as the
  3116.     old.
  3117.  
  3118.   o SetVar() now creates subdirectories as needed (including multiple ones)
  3119.     if they do not exist already (in ENV: and in ENVARC: if GVF_SAVE_VAR
  3120.     is set).  Also, it now preserves any IoErr() and won't try to save to
  3121.     ENVARC if there is an error saving to ENV:.
  3122.  
  3123.   o Modified to fix an edge condition which existed when making the mod to
  3124.     SetVBuf().
  3125.  
  3126. expansion.library
  3127.  
  3128.   o New A1200-specific build that can detect CPU Slot RAM ($08000000)
  3129.     if you have a 32-bit addressing CPU installed.  The CPU slot area
  3130.     is 128meg in size (just like the A3000) but has the addition of
  3131.     a wrap check at each 1meg of space in the CPU address space to make
  3132.     low-cost RAM expansion possible without jumpers.  (It is now possible
  3133.     to get 128Meg SIMMs so a single SIMM on a CPU card could make a
  3134.     128Meg of FAST RAM system )
  3135.  
  3136.     The reason that this has to be A1200 specific (at least for now)
  3137.     is that the behavior of the existing A500/A2000 CPU cards with
  3138.     respect to 32-bit addresses is very undefined.  They act very
  3139.     strangely and differently making it very difficult to safely figure
  3140.     out if these cards are operating correctly or not.
  3141.  
  3142. filesystem
  3143.  
  3144.   o Fixed deletion of the destination of a hardlink - this was badly
  3145.     broken in all versions of the FS, DCFS just made it easier to hit.
  3146.     This was causing spurious "Checksum Error on Block 0" errors (and
  3147.     potentially others), especially when UUCP was using a DCFS partition.
  3148.  
  3149.   o Fixed a return code which would make softlinks not work if a softlink
  3150.     to a directory is in the middle of a path.
  3151.  
  3152.   o Fixed the buffer overrun on ExAll() with ED_COMMENT if the first
  3153.     character was >$80 (and lost the first character of comments).
  3154.  
  3155.   o Fixes updating the date of a directory that changes in the parent
  3156.     of that directory's dircache.
  3157.  
  3158.   o There were old offsetting bugs in the ExAll() filename/comment copying
  3159.     code.  When I fixed the code not to copy too many bytes, the clear was
  3160.     being done to the wrong byte.
  3161.  
  3162. filesysres.resource
  3163.  
  3164.   o Now matches the FS version change.
  3165.  
  3166. workbench.library
  3167.  
  3168.   o Adjusted the sizes of the OK/CANCEL and SAVE/CANCEL gadgets in
  3169.     the Workbench requesters to match the rest of the system.
  3170.  
  3171.   o Fixed a long standing bug that was just found: The system would crash
  3172.     (sometimes) or cause Enforcer hits if files were deleted within
  3173.     a drawer that was also selected for deletion.  This one has
  3174.     a fundamental flaw in Workbench which had to be patched with some
  3175.     rather tricky organization of tests...
  3176.