home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_08 / GENEVA4A.LZH / GNVA_004.TXT < prev    next >
Text File  |  1995-09-08  |  56KB  |  1,259 lines

  1. We've Moved - Again!
  2. --------------------
  3.  
  4. In case you haven't heard yet, we have moved our office and now have new
  5. phone numbers:
  6.  
  7.   Tel: (413) 532-2434
  8.   Fax: (413) 532-2540
  9.  
  10. Our address remains the same.
  11.  
  12.  
  13. Updating to Geneva release 004
  14. ------------------------------
  15.  
  16. To update to the new version, follow these steps:
  17.  
  18. 1. If you intend to keep the old version around for some reason, be sure
  19.    to make a backup of all files.
  20.  
  21. 2. Make a backup of your original Geneva disk!
  22.  
  23. 3. Format a blank, double-sided floppy disk (at least 80 tracks, 9
  24.    sectors/track). This will be your new Geneva Extras Disk.
  25.  
  26. 4. Run the enclosed patch program, PATCH004.PRG. The Master disk will be
  27.    modified. Go get a cup of coffee; this takes about 4 minutes.
  28.  
  29.    IMPORTANT: After the first disk has been patched, the system bell will
  30.    ring and you will be prompted to insert the blank disk you formatted in
  31.    Step 3. If you insert a disk that already has files on it, you will be
  32.    warned, and if you continue all of the existing files will be DELETED
  33.    in order to make room for the new Geneva files.
  34.  
  35.    Go get another cup of coffee. It takes about 5 minutes to write the
  36.    extire Extras disk.
  37.  
  38. 5. After the patch has successfully completed, run the INSTALL.PRG on the
  39.    modified disk. It will re-install all of the new files. If you get an
  40.    error message saying that an old file already exists, just let the
  41.    program overwrite the old file. Any custom flags you have set in your
  42.    GENEVA.CNF file will, unfortunately, be lost.
  43.  
  44.  
  45. If you have problems with the patch
  46. -----------------------------------
  47.  
  48. If, for some reason, the patch program does not run properly you can send
  49. your original Geneva disk back to us along with a blank disk and a check
  50. for $5 + $2 to cover return shipping. We will rewrite the disks with the
  51. most recent version and return them to you by mail. Send to:
  52.  
  53.   Gribnif Software
  54.   P.O. Box 779
  55.   Northampton, MA  01061
  56.  
  57. If you purchased the patch program on a disk directly from us, then just
  58. include the $2 for shipping, and both disks.
  59.  
  60.  
  61. Compatibility Notes
  62. -------------------
  63.  
  64.   o Calligrapher cannot always cut/paste when run in multitasking mode due
  65.     to an error in the program. To work around this, you can either always
  66.     make sure there is something in the clipboard, or you can run
  67.     Calligrapher in single-tasking mode.
  68.  
  69.   o Calligrapher intentionally does not display a CapsLock indicator when
  70.     run in multitasking mode.
  71.  
  72.   o If you use Calamus SL, you should not delete the PKS Write module from
  73.     memory. When this happens, it performs a system call that it should
  74.     not. Even without Geneva, any windows open by other programs will cease
  75.     to work properly if you do this. With Geneva, your document window will
  76.     also get closed.
  77.  
  78.   o To use Geneva with Multi Viewer Graphica (MVG), you need to turn
  79.     pulldown menus off in the Task Manager's Misc. Options dialog.
  80.  
  81.   o Prior versions of INSTALL.PRG would create a GEM.CNF file that has a
  82.     line like this in it:
  83.  
  84.       setenv PATH=.,C:\GENEVA
  85.  
  86.     The problem is that when some programs see the leading '.', they do not
  87.     treat it correctly (GEMINI, TWDTP). The period can be removed, and the
  88.     path will mean the same thing to Geneva. This would make the example
  89.     above:
  90.  
  91.       setenv PATH=,C:\GENEVA
  92.  
  93.  
  94. Changes in INSTALL
  95. ------------------
  96.  
  97.   The Installation prorgam can now correctly install Geneva's files to any
  98.   drive, not just the boot drive. A copy of GEM.CNF is always placed in a
  99.   GENEVA folder on the boot disk.
  100.  
  101.  
  102. Changes in TASKMAN
  103. ------------------
  104.  
  105.   When the Task Manager first opens, you will probably notice that the
  106.     window is wider than you had expected. This is because there is now a
  107.     third pulldown menu, for Settings.
  108.  
  109.   The way that editing flags works has changed:
  110.  
  111.     o The "Temporary" option is only available when the name of a task has
  112.       been selected in the main list. Changes made in this mode are only
  113.       valid until the task terminates; they cannot be saved permanently.
  114.  
  115.     o The "Permanent" option changes the flags for any new instances of the
  116.       task whose name matches the chosen name. It will NOT change the flags
  117.       for a task that is already running.
  118.  
  119.       If you start by selecting a task's name from the main list and then
  120.       choose this option, then the permanent flags that Geneva would use
  121.       for that application are displayed by default. Of course, you can
  122.       still use the "Prev" and "Next" buttons to scroll through the list of
  123.       flags.
  124.  
  125.       There is a "?" button in the Permanent Execution Flags dialog.  It
  126.       gives you an item selector which allows you to locate the exact
  127.       filename of the application. Since Geneva does not keep track of the
  128.       full path of the application, only its name, you will have to
  129.       manually go to the path of the application each time this option is
  130.       used.
  131.  
  132.     A new "Optimize window redraws" flag has been added. See the "Features
  133.     in the Main Program" section, below. By default this flag is off for
  134.     all applications.
  135.  
  136.   The "Keyboard" dialog has been renamed to "Keyboard Equivs" and can now
  137.     control three new keyboard equivalents, which are not immediately
  138.     apparent:
  139.  
  140.     o Iconify, the delta gadget to the left of the Cycle gadget.
  141.     o Iconify All, chosen by holding the Control key while clicking on the
  142.       Iconify gadget.
  143.     o Cycle app's windows, chosen by holding either Shift key while
  144.       clicking on the Cycle window gadget.
  145.  
  146.   The old "Windows" dialog has been renamed to "Window/Menu Bar". This
  147.     dialog has a new option, "Menu separator style", which allows you to
  148.     change how the separator lines in menus appear. Note that the style
  149.     only applies to menus at the top of the screen or in windows that were
  150.     created by programs which are Geneva-aware. A program which implements
  151.     its own menus in windows will not get the new style. Popup menus and
  152.     submenus do not get the new style, either.
  153.  
  154.     The first option in this popup gives no change; the second uses a solid
  155.     gray line, and the remaining styles are solid, colored lines.  These
  156.     latter styles are only used when the video display can show at least 16
  157.     colors at once. Any disabled (normally gray) menu entries will also
  158.     have the color you choose here.
  159.  
  160.   A new "Window Colors" dialog has been added. Geneva provides more window
  161.     gadgets than GEM normally does, so this dialog gives you control over
  162.     the colors and fill patterns of all of them.
  163.  
  164.     To select a gadget to modify, click on the gadget with the mouse.  An
  165.     outline will appear around the gadget you have chosen. Its attributes
  166.     can then be changed.
  167.  
  168.     The normal options for text, border, and fill color are here. You also
  169.     have a few more choices:
  170.  
  171.       o The 3D button turns on/off the raised appearance of the gadget.
  172.       o The Shadowed button in the Text section turns on or off a new
  173.         effect: text with a shadow behind it. The shadow's color is the
  174.         text color chosen below. The text itself is always drawn in either
  175.         black or white.
  176.       o The Topped button will toggle between editing the attributes for a
  177.         window which is on top or elsewhere in the stack.
  178.  
  179.     Note that the Shadowed and 3D buttons affect the window gadget for both
  180.     its topped and untopped appearance.
  181.  
  182.     To copy one gadget's attributes to another, click and hold the mouse
  183.     button down on a gadget and drag the resulting gray outline to another
  184.     gadget in the window.
  185.  
  186.     Clicking on the mover bar of this window will only select that gadget
  187.     or copy its attributes to another gadget. However, the window can be
  188.     moved by clicking on any of the white areas within the window.
  189.  
  190.     This window's appearance does not change when you make another window
  191.     topmost. The text attributes of the menu bar cannot be changed. Menu
  192.     text is always black and transparent.
  193.  
  194.     When Geneva's settings are saved, the window colors are also saved.  If
  195.     you still use another program like WCOLORS.CPX, then the settings in
  196.     that program will override the ones you have set in the Task Manager.
  197.  
  198.   The "Dialogs" dialog has been renamed to "Dialog Colors". It provides
  199.     some new options:
  200.  
  201.     o The border can be "AES 4 3D" style. This is slightly different from
  202.       the way Geneva draws its 3D buttons, most notably in the fact that
  203.       the color is controlled in a different manner (you have to use the
  204.       BCOLORS.CPX to change this.) Choosing this 3D method will deselect
  205.       the Geneva-style 3D button, and vice-versa.
  206.  
  207.       If you want to get a 3D effect for the background object when using
  208.       the AES 4 3D method, you need to also set the Outline attribute.  You
  209.       will probably also want to turn off the Rounded attribute.
  210.  
  211.     o The Shadowed button in the Text section turns on or off a new effect:
  212.       text with a shadow behind it. The shadow's color is the text color
  213.       chosen below. The text itself is always drawn in either black or
  214.       white.
  215.  
  216.     o Text can also be bold. This can even be combined with the Shadowed
  217.       effect.
  218.  
  219.   The "Misc. Options" dialog has several new choices:
  220.  
  221.     o "Preserve system colors" prevents applications which alter the color
  222.       palette from affecting other applications.
  223.  
  224.       As you switch out of an application which changed the colors, they
  225.       will be reset to what they were the last time the new application had
  226.       control. Many paint programs will benefit from this option. Also, any
  227.       time an alert or Geneva's item selector is opened, the system colors
  228.       are returned to those of the Geneva Manager menu. This gives a more
  229.       readable item selector in programs like Calamus SL which change the
  230.       system color palette.
  231.  
  232.       Note that it if you have this option set, you cannot change the
  233.       colors for all applications by using things like a control panel!  As
  234.       soon as you change to another application, the colors will revert to
  235.       what they were previously. You should turn this option off before
  236.       using the control panel.
  237.  
  238.       Furthermore, in order for the system colors that are used by default
  239.       to be changed, Geneva essentially ignores this flag until all desk
  240.       accessories are loaded. This way, if one of them (like a control
  241.       panel) changes the settings, all applications will get the new colors
  242.       by default. Once all of the desk accessories have loaded, "Preserve
  243.       system colors" takes effect.
  244.  
  245.     o "Preserve mouse on/off" keeps track of how many times a program makes
  246.       the mouse pointer visible/invisible, and automatically restores the
  247.       mouse to the correct state when you switch between applications,
  248.       similar to the way to the "Preserve system colors" option works.
  249.  
  250.     o Any dialog without editable fields can respond to just the keyboard
  251.       equivalents, without Alternate being held. The "Not in window" option
  252.       affects this feature for dialogs and alerts that are not contained in
  253.       a window.
  254.  
  255.       The "In window" option affects this feature for for dialogs that are
  256.       drawn by Geneva and appear in a moveable window, like all of the Task
  257.       Manager's dialogs. Some programs generate their own windowed dialogs
  258.       and will not be affected by this option. By default, this option is
  259.       turned off for dialogs in windows.
  260.  
  261.   The positions of the main Tasks window and all dialogs in the Task
  262.     Manager can be saved by using the "Save Positions" option.
  263.  
  264.   You can now click on a name in the main list a second time in order to
  265.     de-select it.
  266.  
  267.   Iconifying the main window and then running an application in
  268.     single-tasking mode will no longer cause the Task Manager window to
  269.     re-open incorrectly.
  270.  
  271.   The Full gadget now alternates between full and the previous location.
  272.  
  273.   The window's height will not get stuck vertically, preventing it from
  274.     becoming taller once a new app has been added to the list.
  275.  
  276.   Names in the list of applications can be selected all the way across the
  277.     width of the window.
  278.  
  279.   The gadget border sample sizes in the Windows dialog now match what
  280.     Geneva will actually use.
  281.  
  282.  
  283. Changes in GNVA_TOS
  284. -------------------
  285.  
  286.   GNVA_TOS and GNVAHELP now both use the same font selection dialog. It is
  287.     one which shows all applicable fonts, not just the first 16.
  288.  
  289.   If you select the Quit menu entry or close the window while a TOS program
  290.     is running, you will be given the opportunity to just terminate the TOS
  291.     program or terminate it and quit Geneva TOS.
  292.  
  293.   You can now access windows/menu bars whenever a TOS program run by
  294.     GNVA_TOS is waiting for *any* type of keyboard input, not just some
  295.     types.
  296.  
  297.   If GNVA_TOS is passed commandline parameters in order to run a TOS
  298.     program, then:
  299.  
  300.     o The parameters are now the default in the Parameters dialog.
  301.     o The name and path of the executed program are the defaults in the
  302.       Open item selector.
  303.     o The commandline can include the redirection operators > (copy output
  304.       to a file), >> (append output to a file) and < (take input from a
  305.       file). IMPORTANT:  If you are running the program from NeoDesk, then
  306.       you must put the redirectors in single quotes to prevent NeoDesk from
  307.       trying to do the redirection, like:
  308.  
  309.         arc.ttp x archive.arc '> out.txt'
  310.  
  311.   The Parameters dialog uses wrap-around editing. It can also take more
  312.     parameters than before if the "Use extended argument passing" option is
  313.     on.
  314.  
  315.   The program can now be iconified. Output will continue to go into the
  316.     window while it is iconified.
  317.  
  318.   The Misc. Options dialog now contains an option called "Pause when TOS
  319.     program exits". If this option is checked, Geneva TOS will display a
  320.     message prompting you to press any key. If this option is not checked,
  321.     Geneva TOS will close as soon as the TOS program terminates. In order
  322.     to be able to examine a program's output after it has terminated, you
  323.     need to have this option checked.
  324.  
  325.   GNVA_TOS now uses a MiNT pipe for i/o redirection, when MiNT is running.
  326.  
  327.   Fixed a bug in the Fforce() and Fdup() functions that would always cause
  328.     a crash whenever these functions were used by a TOS program (or
  329.     whenever any TOS program was run on a Falcon.)
  330.  
  331.   GNVA_TOS can now use non-Speedo fonts with Speedo GDOS 5.
  332.  
  333.   The scrollback buffer works much better, in general, once it has reached
  334.     the end.
  335.  
  336.   Fixed a cosmetic bug in erasing parts of the current line, specifically
  337.     the sequences [Esc]J, K, d, and o.
  338.  
  339.   Output of certain types of text has been sped up.
  340.  
  341.   It is no longer possible to enter a number of columns < 80 or a number of
  342.     rows < 24 into the scrollback buffer dialog.
  343.  
  344.   You can no longer have a window which is too tall or wide to fit on the
  345.     screen.
  346.  
  347.   Terminating a program with ^C and then running a second one now works.
  348.  
  349.  
  350. Changes in GNVAHELP
  351. -------------------
  352.  
  353.   GNVA_TOS and GNVAHELP now both use the same font selection dialog. It is
  354.     one which shows all applicable fonts, not just the first 16. The
  355.     minimum font size is now 2 points.
  356.  
  357.   When going backward to the previous screen, the window is returned to the
  358.     slider positions it previously had in that location.
  359.  
  360.   The window can now be iconified.
  361.  
  362.   The main window can be scrolled with the keyboard by using the arrow
  363.     keys, with or without [Shift].
  364.  
  365.   Underlined keywords are now drawn in a different color.
  366.  
  367.   A number of graphics functions have been added to MAKEHELP and GNVAHELP.
  368.     See the files MAKEHELP.HLP and GRAPHICS.* for more information.
  369.     (MAKEHELP.TXT has been replaced by the HLP file.)
  370.  
  371.   The MAKEHLP.TTP program now has a new option, -s, to generate automatic
  372.     cross-references. See the file MAKEHELP.HLP for more information.
  373.  
  374.  
  375. Changes in Geneva
  376. -----------------
  377.  
  378.   Item Selector
  379.   -------------
  380.  
  381.   You can now hold the Control key while clicking on the name of a file or
  382.     folder in order to Show Info on the item.
  383.  
  384.   If a file is read-only, a checkmark will appear in front of its name in
  385.     the item selector. This only applies to 1 column mode.
  386.  
  387.   The "Info" dialog now has a read-only button, so that the read-only
  388.     attribute of a file can be changed.
  389.  
  390.   The "EXT" list includes a new entry, "Start".  When this extension is
  391.     chosen, the template is changed back to the value it originally had
  392.     when the item selector first opened.
  393.  
  394.   Sort by Date now sorts files that were created on the same day, but at
  395.     different times, correctly.
  396.  
  397.   The item selector will now preserve the date and time of a file that is
  398.     copied or moved.
  399.  
  400.   The item selector can now deal with an Atari-style background for all of
  401.     its dialogs. Also fixed a problem with clicking on the 1/2 COL button
  402.     in some places.
  403.  
  404.  
  405.   New Features in the Main Program
  406.   --------------------------------
  407.  
  408.   MiNT is now supported. See the file MINT.TXT for more info.
  409.  
  410.   Text in buttons can now have a "shadowed" effect. This makes the window
  411.     gadget text much more readable in monochrome. This option can be
  412.     changed for window gadgets and dialog buttons in the Task Manager.
  413.  
  414.   Dialog buttons can now have the Atari AES 4 style of 3D appearance.  See
  415.     the Task Manager for more details.
  416.  
  417.   The colors of all window gadgets can now be set individually by using the
  418.     Task Manager. If you still use another program like WCOLORS.CPX, some
  419.     of the gadget colors will be inherited from other gadgets, like the
  420.     Cycle gadget which gets the color of the Full gadget. When Geneva's
  421.     settings are saved, the window colors are also saved.
  422.  
  423.   A new program flag has been added, Optimize Window Redraws. Because many
  424.     programs will experience redraw problems when this option is on (even
  425.     NeoDesk 4 release 001), this option can be set individually for any
  426.     program by using the Task Manager. It makes these changes:
  427.  
  428.     o Moving a window will try to blit as much of the window as possible,
  429.       even if the window is partway off screen or covered by another
  430.       window.
  431.  
  432.     o Resizing a window so that it is larger will only cause the previously
  433.       invisible part to be redrawn, rather than redrawing the whole window.
  434.  
  435.     o Topping a window will not always redraw the entire window.
  436.  
  437.     o This method takes slightly more memory because Geneva hold onto
  438.       information about what windows overlap a given window so that it does
  439.       not have to spend time regenerating the information as often.
  440.  
  441.     Note that even when a program responds correctly to this method, it is
  442.     still possible for there to be cosmetic redraw errors because of the
  443.     way GEM works.
  444.  
  445.     For instance, if you move a window that is off the right edge of the
  446.     screen 3 pixels to the left, the area that is redrawn will be in the
  447.     correct pattern, but it will not match up with the rest of the window.
  448.     The effect of this can be decreased by not using patterns in window
  449.     gadgets.
  450.  
  451.   Window redraws are faster in general, even without the Optimize option.
  452.  
  453.   There are now keyboard equivalents for:
  454.  
  455.     o The mouse pointer can be reset to being turned on once by pressing
  456.       Control-Shift-Alternate [keypad period]. This also clears any mouse
  457.       button presses that may be queued in memory.
  458.  
  459.     o Iconify (Alternate [`], by default)
  460.  
  461.     o Iconify All (Control-Alternate [`], by default)
  462.  
  463.     o Cycle only the windows belonging to the current application
  464.       (Shift-Alternate-Backspace, by default). This can also be done with
  465.       the mouse by holding either Shift key while clicking on the Cycle
  466.       window gadget.
  467.  
  468.     o Dialog buttons containing the up/down arrow characters can be
  469.       activated by using the window up/down line keyboard equivalents.
  470.       (Control [keypad 8] for up, Control [keypad 2] for down, by default)
  471.  
  472.     o When a dialog has an edit cursor, these options will cut/paste to the
  473.       Atari clipboard:
  474.  
  475.       Cut:   Shift-Alternate [X]
  476.       Copy:  Shift-Alternate [C]
  477.       Paste: Shift-Alternate [V]
  478.  
  479.   If an untopped window is clicked on while either Shift key is held, all
  480.     windows belonging to that application will be moved to the top of the
  481.     stack. This provides an easy way to get all of an application's windows
  482.     back to the top.
  483.  
  484.   Any dialog without editable fields can respond to just the keyboard
  485.     equivalents, without Alternate being held. This is controlled by
  486.     options in the Task Manager.
  487.  
  488.   When you click with the mouse on a character in the ASCII Table window,
  489.     that character's ASCII value will be displayed in the mover bar of the
  490.     window until the mouse button is released.
  491.  
  492.   Some applications which previously would not work in multitasking mode
  493.     because they displayed a dialog without locking the menu bar first may
  494.     now work. This is because when Geneva sees that an application uses
  495.     form_dial(FMD_START), it prevents other applications from getting
  496.     control until there has been a form_dial(FMD_FINISH) call.
  497.  
  498.   A new command has been added to the GEM.CNF file, "runacc". It allows a
  499.     desk accessory to be loaded but not opened. Its syntax is identical to
  500.     "run".
  501.  
  502.   A "Preserve system colors" option has been added. This can be controlled
  503.     in the Task Manager. It prevents applications which alter the color
  504.     palette from affecting other applications.
  505.  
  506.   A "Preserve mouse on/off" option has been added. It keeps track of how
  507.     many times a program makes the mouse pointer visible/invisible, and
  508.     automatically restores the mouse to the correct state when you switch
  509.     between applications, similar to the way to the "Preserve system
  510.     colors" option works. This option can be controlled in the Task
  511.     Manager.
  512.  
  513.   When Geneva rewrites its settings to disk, the entire list of program
  514.     flags is sorted alphabetically. This means that the next time you look
  515.     at the list in the Task Manager, it will be easier to find a particular
  516.     program.
  517.  
  518.   When a window gets iconified, Geneva will tell the next uniconified
  519.     window in the stack (from the top) to become topped.
  520.  
  521.   Switching to an application which has a tear-away menu on top of its
  522.     other open windows will put one of the other open windows on top,
  523.     instead of the tear-away.
  524.  
  525.   The way that popup menus work has changed. If the mouse button is not
  526.     pressed when the popup is started, keyboard mode is no longer the
  527.     default. You can enter keyboard mode at any time by pressing a key like
  528.     the up or down arrow. Therefore, programs like STraight Fax (as a desk
  529.     accessory) which use popup menus will work more intuitively.
  530.  
  531.     If you are in keyboard mode and the mouse is moved on top of a menu
  532.     entry, keyboard mode will exit. This means that you cannot enter
  533.     keyboard mode when the mouse is over a menu entry.
  534.  
  535.  
  536.   Other Changes in the Main Program
  537.   ---------------------------------
  538.  
  539.   It is now impossible to end up with the 10 point font in a vertical
  540.     resolution of 200 pixels. (Geneva actually checks the number of rows of
  541.     text and makes the system font it would use to draw dialogs and menus
  542.     smaller if this is less than 25 rows.) This avoids the problem of
  543.     having a huge font in some resolutions on the Falcon or Crazy Dots.
  544.  
  545.   The last line of a GEM.CNF or GENEVA.CNF file will not be ignored if it
  546.     does not end with a CR/LF.
  547.  
  548.   The code which uses the 200 Hz interrupt is less likely to cause keyboard
  549.     overruns now.
  550.  
  551.   Awakening a program which already has a window open will no longer send
  552.     an AC_OPEN message.
  553.  
  554.   Selecting multiple files in UIS III now works correctly.
  555.  
  556.   evnt_multi() no longer sometimes returns the CapsLock state (UIS).
  557.  
  558.   Closing an open DA window when the program that owns the menu bar has no
  559.     windows now restores the mouse shape to that of the program.
  560.  
  561.   The underlines for keyboard equivalents have been moved down.
  562.  
  563.   Check marks are now to the left and down one pixel.
  564.  
  565.   Menu titles are now up one pixel.
  566.  
  567.   Changing the menu start key now works properly.
  568.  
  569.   Having a single-tasking app run from GEM.CNF will not lock up when
  570.     changing resolution.
  571.  
  572.   If more than one automatic directory window update message is sent to the
  573.     shell before it has a chance to read them, they are now all passed to
  574.     the shell. Previously, only the first one would go through.
  575.  
  576.   If a section of GENEVA.CNF ends before it should, the file is closed
  577.     properly.
  578.  
  579.   Tear-away menus can now produce submenus.
  580.  
  581.   The shape of the thick cross mouse pointer is now correct.
  582.  
  583.   Radio/check buttons are now centered vertically in the object. This helps
  584.     make the buttons line up with the text when an alternate font is being
  585.     used.
  586.  
  587.   Switching between single-tasking applications will no longer sometimes
  588.     result in a blank menu bar.
  589.  
  590.   Turning the "Redraw on exit" flag off now works much better.
  591.  
  592.   Putting the last application which owns the desktop to sleep will now
  593.     always redraw the desktop.
  594.  
  595.   Menu keyboard equivalents now work when a tearaway menu is topmost and
  596.     the equivalent for a menu entry in a different pulldown menu is
  597.     selected.
  598.  
  599.   Atari-style 3D buttons now display much more like they should.
  600.  
  601.   Putting the topmost application to sleep will always return to its
  602.     parent, not the next open application.
  603.  
  604.   Switching applications from the Applications tear-away menu should no
  605.     longer mess up the locations of menu bars.
  606.  
  607.   Memory allocation is now more efficient.
  608.  
  609.   If Warp 9 version 3.81 or older is used, Geneva will force Warp 9's Zoom
  610.     Boxes option to be on. This avoids a conflict in the way Warp 9 handles
  611.     this function. You can turn the zoom boxes off by using the
  612.     "Grow/shrink boxes" option in the Task Manager's "Misc. Options"
  613.     dialog.
  614.  
  615.   The _IDT cookie is now set correctly for Sweden and other countries.
  616.  
  617.   If more than one application has the exact same name in the Desk menu,
  618.     the names are sorted by application ID.
  619.  
  620.   Using a True Type font with NVDI 3 will now give the correct characters
  621.     for regular text. Special Atari-specific characters, like arrows will
  622.     not be correct because there is no way to remap these accurately when a
  623.     True Type font is being used.
  624.  
  625.   When several programs write into the GENEVA.CNF file, there is no longer
  626.     the chance that the file will end up with lots of extra carriage
  627.     returns in it.
  628.  
  629.   If all applications except for the current one are asleep, then quitting
  630.     it will no longer cause a lockup.
  631.  
  632.   If Geneva is run from the AUTO folder, then the "Quit Geneva" menu entry
  633.     is not available.
  634.  
  635.   Running a single-tasking app from GEM.CNF with the "runsleep" command now
  636.     works correctly.
  637.  
  638.   Geneva now maintains several of the system vectors on a per-process
  639.     basis. This means that if a program like Calamus, which has its own
  640.     bomb trap, is running and another program crashes, this will not
  641.     confuse Calamus into thinking that Calamus crashed. This also helps in
  642.     the case of any program written with the High Speed Pascal compiler.
  643.  
  644.   Using a Falcon with a non-VGA monitor (like the SC1224) reboots into the
  645.     correct resolution now.
  646.  
  647.   The appearance of radio and check boxes in a 4-color video mode with the
  648.     8 x 16 font is now correct (like in 4-color, interlace mode on the
  649.     Falcon.)
  650.  
  651.   If you press Alt-Space to start the main menu in keyboard mode and then
  652.     click with the mouse anywhere else to close it, the keyboard
  653.     equivalents for menu titles are undrawn correctly.
  654.  
  655.  
  656.   More esoteric changes...
  657.   ------------------------
  658.  
  659.   There has been a major change in the way events get blocked. When the
  660.     menu bar is being used, MU_TIMER and MU_Mx messages continue to
  661.     occur now. Also, the behavior of wind_update(BEG_UPDATE) has been
  662.     changed to be more compatible with Atari's AES.
  663.   The module icons in Calamus and Calamus SL work right.
  664.   The "Keyboard Equivalents" dialog in the Task Manager can now be moved
  665.     if Limit Window Handles is on. (X_WM_SELECTED messages)
  666.   Programs which have Geneva draw menu bars in their windows will work
  667.     right if the Limit Window Handles option is on. (X_MN_SELECTED)
  668.   appl_write() works properly when the Limit Handles flag is on.
  669.   menu_tnormal() works when the item is not a menu title (CAL.PRG Alt-M)
  670.   It should no longer be possible to confuse NeoDesk's window redraws
  671.     by closing lots of windows very quickly.
  672.   A program which uses an MU_BUTTON event to wait for the mouse buttons
  673.     to be released will work properly even if the program has no windows
  674.     open and does not own the desktop. (INSHAPE)
  675.   Quitting a program which is run by Pexec from another program will
  676.     not cause a crash if the child left one or more VDI workstations
  677.     open (INSHAPE)
  678.   The unused portions of a WM_ARROWED message are now zeroed-out.
  679.     (STGUIDE)
  680.   appl_read(-1) returns the correct value. It also treats WM_REDRAW
  681.     messages correctly. (KOBOLD)
  682.   appl_exit() won't delete windows which are not open (DEVPACST)
  683.   appl_getinfo(0) and (1) now return the correct font height (EGEM and
  684.     many other German programs)
  685.   appl_getinfo(10) now reports the correct shel_write() bits.
  686.   When x_form_filename() is used with the to_from parameter == 0,
  687.     only the first 8 characters of a filename are copied if the filename
  688.     is not in 8.3 format (Geneva's item selector when called by CALAMUS SL)
  689.   Programs which modify Geneva's VDI workstation attributes are less likely
  690.     to cause redraw problems (menu titles in TW3)
  691.   The evnt_multi() mode which deals with right mouse clicks now works
  692.     much better (TW3, Papyrus, many others)
  693.   The Alt-Backspace keyboard equivalent will only work on windows which have
  694.     a Cycle gadget. It never tells a window without one that it should be on
  695.     top (TW3)
  696.   The default value for scrp_read() is an empty string. Also, if scrp_read()
  697.     is an empty string, the return value is 0. (PAPYRUS)
  698.   G_TITLE objects are no longer clipped within their object box.
  699.   Geneva now handles the case where a program has a menu bar with
  700.     the title objects out of sequence.
  701.   If a MU_MESAG event occurs during the same evnt_multi() as an MU_TIMER
  702.     event, only the MU_MESAG is reported (LC5xxED).
  703.   Window pulldown menus are now snapped to 8-pixel bounds. This makes them
  704.     draw more quickly.
  705.   There are fewer mouse on/off calls when redrawing menus and gadgets.
  706.   Geneva is now compatible with non-Speedo fonts when using Speedo 5.
  707.   If you hold the mouse on an active window menu title and then move to
  708.     a disabled title, this no longer partially draws the menu.
  709.   An application which understands AP_TERM will not be thrown out of memory
  710.     after 2 seconds during a resolution change. Desk accessories continue
  711.     to be terminated automatically, even if they say they understand
  712.     AP_TERM. (PAPYRUS, XCONTROL)
  713.   objc_draw() and objc_find() now work when told to work on the root
  714.     object with a depth of zero, and bad ob_head and ob_tail pointers
  715.     (PAPYRUS)
  716.   Programs which rely on the method for getting the status of both mouse
  717.     buttons now get the correct return value if the mouse is pressed and
  718.     then released before the double-click interval expires. (PAPYRUS,
  719.     LANDMINE, others.)
  720.   Fixed objc_sysvar() with bad values during inquire (TRUIMAG)
  721.   Fixed graf_mouse( number|0x8000...
  722.   The Gnva and _IDT cookies are installed during the AUTO folder load
  723.     sequence, not just before the desktop is first drawn.
  724.   An appl_write() to ID #0 will send the message to the topmost application
  725.     if the source application is a desk accessory (TWRITE3)
  726.   If a desk accessory is already open and its entry is chosen from the Desk
  727.     menu, an AC_OPEN message is now sent.
  728.   Popup menu entries do not need to be sorted from top to bottom. (SAMCNFG)
  729.   Topping a dialog in a window when the mouse is over the dialog's edit cursor
  730.     now redraws correctly.
  731.   Fixed objc_edit() to work properly when it processes a key contained in the editable field's
  732.     template which appears after the cursor and after the last editable
  733.     character.
  734.   The Clr and ^Clr keyboard equivalents now work in menu entries.
  735.   shel_write() now returns the application ID of the new task, if the
  736.     new task is multitasking.
  737.   When shel_envrn() fails it returns 0L, not a pointer to an empty string.
  738.   Programs which use the exec_os vector and follow the XBRA protocol can
  739.     now be worked around correctly by Geneva. (CyRel's VDI drivers)
  740.   RSC files containing CICONs can now use a pointer to another string
  741.     instead of only the text in the CICONBLK.
  742.   Using wind_get( WF_CURRXYWH ) on a closed window now returns all 0's (CONVECT)
  743.   Pressing a key in windowed dialog that does not contain an editable field
  744.     will not sometimes crash.
  745.   If an application quits, its parent now gets any AP_TERM messages and
  746.     gets control of the menu bar when a child of the first program quits.
  747.     (The first program's parent is now the parent of children of the program
  748.     that terminated.)
  749.   There are no longer sometimes spurious MU_BUTTON events for windows
  750.     with a dialog
  751.   objc_find() will work correctly with buttons which use Atari-style 3D.
  752.   The case where the default path passed to shel_write() does not end with
  753.     a \ is now handled correctly. (GEMINI)
  754.   The shel_find() function will no longer return a path beginning with ".\"
  755.     if the PATH variable begins with ".,". (GEMINI, TWDTP)
  756.   When automatic keyboard equivalents are generated for an object tree with
  757.     a large number of objects, they now get redrawn correctly when the
  758.     dialog finishes. (TCACHE)
  759.   A dialog object that is hidden can now be edited. (TCACHE)
  760.   Clicking on a gadget in a window with the X_WTFL_CLICKS flag turned off
  761.     no longer causes the gadget to become selected (TM's Window Colors)
  762.   Clipboard path handling is more robust now. The x_scrp_get() function
  763.     works much better, so all of the Geneva programs that deal with the
  764.     clipboard should also read the existing clipboard path correctly now.
  765.   When an application either changes its menu bar or turns it off, any
  766.     associated tear-aways are closed.
  767.   Changing a window menu title with menu_tnormal() should no longer update
  768.     the title if the window is closed but not deleted.
  769.   If you use SUBMENU.CPX and tell it to use a popup height that is taller
  770.     than the desktop area, it will instead be limited to that size.
  771.   If a DA registers its name in the Desk menu and it already has a name
  772.     stored at the same location in memory, the Desk list is merely updated.
  773.     A new entry in the Desk menu is not created.
  774.   If a button is SELECTED, !SELECTABLE, EXIT && !TOUCHEXIT, it now acts
  775.     like a touchexit button (VMG-4000).
  776.   Using the Desk menu in keyboard mode works correctly when the menu is
  777.     scrollable.
  778.   Changed some code in TASKMAN and other programs which access fonts in order
  779.     to avoid a bug in NVDI 3's handling of vqt_fontinfo() for system fonts.
  780.   Quitting a program which intercepts trap #2 and then restores it will no
  781.     longer result in Geneva trying to close a VDI workstation which is
  782.     already closed. (This can cause an AES recursive message if you are
  783.     using NVDI and try to quit something like PD.PRG or PROFILER.PRG.)
  784.   The default value for the _IDT cookie in the USA now has the separator
  785.     '/'. Previously, it was $0, which means the same thing.
  786.   The item selector now rechecks the _IDT cookie every time it is reopened.
  787.     This means that setting the date/time format in a CPX will now work.
  788.   wind_set( handle, X_WF_DFLTDESK...) will always work. Previously, it
  789.     would only work when "handle" was a valid window handle > 0.
  790.   When two windows use the same menu bar, they both get updated properly
  791.     when menus are used. (GNVA_MAC)
  792.   The correct window handle is now always returned in word 7 of an
  793.     X_MN_SELECTED message.
  794.   wind_get(WF_TOP) now always returns the correct value in the third
  795.     word (the handle of the window underneath the topmost).
  796.   The About Geneva dialog looks correct when the outer box is not white.
  797.   When a window is iconified, the initial position of the icon window is
  798.     now calculated correctly.
  799.   The way appl_tplay and appl_trecord work has changed so that they work
  800.     better. The new functions x_appl_trecord/play have been added.
  801.   The messages for iconification now work properly if the Limit Window
  802.     Handles option is on.
  803.   Geneva now maintains several of the system vectors on a per-process
  804.     basis. This means that if a program like Calamus, which has its own
  805.     bomb trap, is running and another program crashes, this will not
  806.     confuse Calamus into thinking that Calamus crashed. This also helps in
  807.     the case of any program written with the High Speed Pascal compiler.
  808.   An MU_MESAG event now returns the correct shift key state (STFAX)
  809.   Fixed up a few places that did not consider the INDIRECT ob_flag.
  810.   If a program increases the size of the keyboard buffer, Geneva will no
  811.     longer eventually crash.
  812.  
  813.  
  814. Programming Changes
  815. -------------------
  816.  
  817.   The file new_aes.h now defines the constant SMALLER correctly, and Geneva
  818.     004 understands this value.
  819.  
  820.   x_appl_sleep() in the manual is wrong: bit 1, if set, means the
  821.     application is multitasking. When it is clear, the application is
  822.     single-tasking.
  823.  
  824.   Page 114 of the manual has an error. The X_WM_SELECTED message looks like
  825.     this:
  826.  
  827.     word 0:  0xE100
  828.     word 3:  The handle of the window containing the gadget
  829.     word 4:  The object index of the window tree object the user clicked on
  830.  
  831.   Object Trees
  832.   ------------
  833.  
  834.     ob_state attributes:
  835.  
  836.       Bit 11   X_SHADOWTEXT  Draw the object's text with a shadow
  837.  
  838.     Extended editing:
  839.  
  840.       If an editable field's TEDINFO te_tmplen is X_LONGEDIT (-71), then
  841.       this means that it and the following editable field (which must be
  842.       the next object in the tree) can use extended editing.
  843.  
  844.       When the edit cursor is at the end of a line, pressing another key
  845.       will cause the cursor to automatically jump to the start of the next
  846.       line. Other keys like the arrows, Delete, and Backspace work in a
  847.       similar way, but only if a given line of text stretches the entire
  848.       width of the editable field. A line can be broken at any point by
  849.       pressing Control-Return.
  850.  
  851.       The last editable field in the list must NOT have the X_LONGEDIT set.
  852.  
  853.   The G_COOKIE structure
  854.   ----------------------
  855.  
  856.     vectors:     Points to a G_VECTORS structure
  857.  
  858.   The G_VECTORS structure
  859.   -----------------------
  860.  
  861.     used:        A bitmap of which vectors in the rest of the structure are
  862.                  used by this version of Geneva. Currently this is 7, to
  863.                  indicate that the first 3 vectors are used.
  864.  
  865.     keypress:    This function is called whenever Geneva receives a key
  866.                  from the keyboard. The A0 register points to a longword
  867.                  containing the keycode of the key which was pressed:
  868.  
  869.                  bits 31-24     23-16      15-8     7-0
  870.                       shift   scan code   unused   ASCII
  871.  
  872.                  This is just like the result of Bconin(2) with the result
  873.                  of Kbshift(-1) stored in the high byte.
  874.  
  875.                  If the "keypress" function changes this longword to 0L,
  876.                  then the keypress will be ignored. If the longword is
  877.                  changed to some other value, then the new value will be
  878.                  processed.
  879.  
  880.                  If the "keypress" function returns a value >= 0, then the
  881.                  application with that ID will receive a X_WM_VECKEY
  882.                  message during its next event loop.
  883.  
  884.     app_switch:  This function is called whenever the user performs some
  885.                  action that causes the topmost application to change, like
  886.                  selecting a name from the Desk menu or topping another
  887.                  application's window.
  888.  
  889.                  When called, the A0 register points to a string in
  890.                  appl_find() format which is the name of the process that
  891.                  was switched to. The D0 register contains the application
  892.                  ID of the process.
  893.  
  894.                  Under some circumstances, this function may be called even
  895.                  though the "new" application is already the topmost one.
  896.                  It is also possible for the "apid" in D0 to be -1, if
  897.                  Geneva is in the process of shutting down.
  898.  
  899.                  If the "app_switch" function returns a value >= 0, then
  900.                  the application with that ID will receive a X_WM_VECSW
  901.                  message during its next event loop.
  902.  
  903.     gen_event:   This function is called continually by Geneva. It provides
  904.                  a way for an application to have Geneva poll a certain
  905.                  condition and generate an event if something occurs.
  906.  
  907.                  This can take the place of using evnt_multi() with small
  908.                  timer values in order to poll a condition, and is much
  909.                  more efficient. It can be used in things like a corner
  910.                  clock to see when the time has changed to a new minute.
  911.  
  912.                  If the "gen_event" function returns a value >= 0, then the
  913.                  application with that ID will receive a X_WM_VECEVNT
  914.                  message during its next event loop.
  915.  
  916.     Notes about using vectors:
  917.  
  918.     o A vector routine can change registers D0-D2/A0-A1. All others must be
  919.       preserved.
  920.  
  921.     o No vector routine can call the AES. The keypress and app_switch
  922.       vectors must not call GEMDOS functions. All other TOS services can be
  923.       used.
  924.  
  925.     o If a vector does not wish to generate an event, then it must return a
  926.       negative number, like -1.
  927.  
  928.     o A vector MUST follow the XBRA protocol. The only exception to this is
  929.       Geneva itself, which installs default vectors that do nothing but
  930.       return -1.
  931.  
  932.     o An application is responsible for removing itself from the vector
  933.       chain when it terminates. Failure to do so will most likely cause a
  934.       crash in the future. An application should use shel_write() mode 9 to
  935.       tell Geneva that it knows about the AP_TERM message and respond to
  936.       that message by removing itself from the list before quitting.
  937.  
  938.     o If your vector routine does not wish to generate an event, then it
  939.       should pass control through to the previous routine in the XBRA
  940.       chain.
  941.  
  942.     o If Geneva is running without MiNT, then the vector routines are
  943.       always called in supervisor mode. If running with MiNT, then the CPU
  944.       is in user mode. When MiNT is in memory protection mode, an
  945.       application which uses vectors must at least be in Readable mode, and
  946.       should most likely in Global mode.
  947.  
  948.     See the files VECTEST.C and VECTESTS.S for an example.
  949.  
  950.   The OB_PREFER structure
  951.   -----------------------
  952.  
  953.     atari_3D:    Display the object using Atari AES 4 style 3D
  954.     shadow_text: Draw the text with a shadow underneath it
  955.     bold_shadow: Text is bold (can be combined with shadow_text)
  956.  
  957.   The SETTINGS structure
  958.   ----------------------
  959.  
  960.     flags:
  961.  
  962.       no_alt_modal_equiv:  Kbd equivs in modal dialogs do not require Alt
  963.       no_alt_modeless_eq:  Kbd equivs in windowed dialogs do not require Alt
  964.       preserve_palette:    Set color palette when switching applications
  965.       mouse_on_off:        Maintain mouse on/off calls when switching apps
  966.  
  967.     cycle_in_app:  Kbd equiv for cycling windows belonging to current app
  968.     iconify:       Iconify the current window
  969.     alliconify:    Iconify all windows belonging to the app
  970.  
  971.   The APFLG structure
  972.   -------------------
  973.  
  974.     optim_redraws: Optimize window redraws
  975.  
  976.   shel_write()
  977.   ------------
  978.  
  979.     New "sw_doex" modes:
  980.  
  981.       XSHW_RUNANY (0xE0): run an application, letting Geneva determine the
  982.         type. This is identical to mode 0, except that the XSHD_FLAGS bit
  983.         of "sw_doex" can also be set (see below).
  984.  
  985.       XSHW_RUNAPP (0xE1): run an application. This is identical to mode 1,
  986.         except that the XSHD_FLAGS bit of "sw_doex" can also be set.
  987.  
  988.       XSHW_RUNACC (0xE3): run a desk accessory. This is identical to mode
  989.         3, except that the XSHD_FLAGS bit of "sw_doex" can also be set.
  990.  
  991.     When XSHD_FLAGS (1<<15) is added to the "sw_doex", this means that the
  992.     last longword of the SHWRCMD passed in the "sw_cmd" parameter contains
  993.     the Geneva program flags to use when executing the application.
  994.  
  995.     It is strongly recommended that a program using XSHD_FLAGS inquire the
  996.     current flags for the application and only change the ones it needs to
  997.     change, rather than making most of the flags zero or some other random
  998.     value. See the x_appl_flags() section, below, for an example.
  999.  
  1000.   wind_get(), wind_set() mode X_WF_DCOLSTAT (0x2100)
  1001.   --------------------------------------------------
  1002.  
  1003.     This mode gets or sets a window gadget's default colors and ob_state
  1004.     value.  Unlike WF_DCOLOR, this option gives full control over all of
  1005.     Geneva's extended window gadgets.
  1006.  
  1007.     For wind_set(), the "wi_sw1" parameter contains the index of the window
  1008.     gadget to change, taken from the list of WGCLOSE through WGSIZE, as
  1009.     outlined in xwind.h. "wi_sw2" contains the color for the gadget when
  1010.     the window is on top, "wi_sw3" is for an untopped window. "wi_sw4"
  1011.     contains the ob_state word of the object. If any of these values is set
  1012.     to -1, then no change occurs.
  1013.  
  1014.     For wind_get(), the "wi_sw1" parameter must be a pointer to a word
  1015.     containing the index of the gadget being inquired about, the same way
  1016.     WF_COLOR and WFDCOLOR work.
  1017.  
  1018.     Example: Turn the 3D attribute on for the mover bar
  1019.  
  1020.       int top, untop, state, gadget;
  1021.  
  1022.       gadget = WGMOVE;
  1023.       wind_get( 0, X_WF_DCOLSTAT, &gadget, &top, &untop, &state );
  1024.       state |= X_MAGIC|X_DRAW3D;
  1025.       wind_set( 0, X_WF_DCOLSTAT, gadget, -1, -1, state );
  1026.  
  1027.   wind_get(), wind_set() mode X_WF_DIALFLGS (0xE100)
  1028.   --------------------------------------------------
  1029.  
  1030.     X_WD_KEYS (bit 2): When set, any keypresses that would otherwise be
  1031.     processed as part of the dialog are instead passed through to the
  1032.     application.
  1033.  
  1034.     An example is when NeoDesk is run with the desktop in a window.
  1035.     Normally, things like Shift-C would be treated like a keypress in a
  1036.     dialog without any editable field and ignored.  When this bit is set,
  1037.     the keypress will instead go to the application.
  1038.  
  1039.   x_appl_flags() mode 5 (X_APF_SEARCH)
  1040.   ------------------------------------
  1041.  
  1042.     Use the APPFLAGS "name" element to search for the set of flags that
  1043.     would be used by Geneva were it to run the application with that name.
  1044.     Note that the "name" element is overwritten in the process.  The
  1045.     "index" parameter is not used.
  1046.  
  1047.     Example: Get the flags for FOO.PRG and force it to run in
  1048.       single-tasking mode
  1049.  
  1050.       APPFLAGS a;
  1051.       SHWRCMD shwrcmd;
  1052.  
  1053.       strcpy( a.name, "FOO.PRG" );
  1054.       x_appl_flags( X_APF_SEARCH, 0, &a );
  1055.       a.flags.s.multitask = 0;
  1056.       shwrcmd.name = "FOO.PRG";
  1057.       shwrcmd.app_flags = a.flags.l;
  1058.       shel_write( XSHD_FLAGS|XSHW_RUNANY, 0, 0, (char *)&shwrcmd, "" );
  1059.  
  1060.   void x_malloc( void **addr, long size )
  1061.   ---------------------------------------
  1062.  
  1063.     Allocate memory from Geneva.
  1064.  
  1065.     control[0] = $7186
  1066.     control[1] = 2
  1067.     control[2] = 0
  1068.     control[3] = 1
  1069.     control[4] = 0
  1070.  
  1071.     intin[0-1] = size    intin[0]: MSW of the size
  1072.                          intin[1]: LSW of the size (lower 16 bits)
  1073.  
  1074.     addrin[0]  = addr    pointer to a pointer which receives the address of
  1075.                          an allocated block, or 0L
  1076.  
  1077.     This function allocates memory, much in the same way Malloc() or
  1078.     malloc() does. The only major difference is that it comes without the
  1079.     extra overhead of malloc(). Since Geneva takes this memory from the
  1080.     same pool as the rest of its memory, it is also not as likely to cause
  1081.     memory fragmentation if the application allocates lots of small blocks
  1082.     using this call as it is when doing so with Malloc().
  1083.  
  1084.     If no memory could be allocated, the "addr" is set to NULL (0L).
  1085.  
  1086.     Unlike the GEMDOS Malloc() function, this function does not accept the
  1087.     "size" -1L.
  1088.  
  1089.   xmf_return = x_mfree( void *addr )
  1090.   ----------------------------------
  1091.  
  1092.     Free memory allocated with x_malloc().
  1093.  
  1094.     control[0] = $7187
  1095.     control[1] = 0
  1096.     control[2] = 1
  1097.     control[3] = 1
  1098.     control[4] = 0
  1099.  
  1100.     addrin[0]  = addr        pointer to a memory block previously
  1101.                              allocated with x_malloc()
  1102.  
  1103.     intout[0]  = xmf_return  0: Success
  1104.                              other: Failure
  1105.  
  1106.     This function frees a block of memory previously allocated with the
  1107.     x_malloc() function.
  1108.  
  1109.   xms_return = x_mshrink( void *addr, long newsize )
  1110.   --------------------------------------------------
  1111.  
  1112.     Shrink a memory block allocated with x_malloc().
  1113.  
  1114.     control[0] = $7188
  1115.     control[1] = 2
  1116.     control[2] = 1
  1117.     control[3] = 1
  1118.     control[4] = 0
  1119.  
  1120.     intin[0-1] = newsize     intin[0]: MSW of the size
  1121.                              intin[1]: LSW of the size (lower 16 bits)
  1122.  
  1123.     addrin[0]  = addr        pointer to a memory block previously
  1124.                              allocated with x_malloc()
  1125.  
  1126.     intout[0]  = xms_return  0: Success
  1127.                              other: Failure
  1128.  
  1129.     This function shrinks (decreases the size of) a block of memory
  1130.     previously allocated with the x_malloc() function. The "newsize" must
  1131.     be less than the original size, or Failure will be returned.
  1132.  
  1133.   xmr_return = x_realloc( void **addr, long newsize )
  1134.   ---------------------------------------------------
  1135.  
  1136.     Change the size of memory allocated with x_malloc(), potentially moving
  1137.     it to another location.
  1138.  
  1139.     control[0] = $7189
  1140.     control[1] = 2
  1141.     control[2] = 1
  1142.     control[3] = 1
  1143.     control[4] = 0
  1144.  
  1145.     intin[0-1] = newsize     intin[0]: MSW of the size
  1146.                              intin[1]: LSW of the size (lower 16 bits)
  1147.  
  1148.     addrin[0]  = addr        pointer to a memory block previously
  1149.                              allocated with x_malloc()
  1150.  
  1151.     intout[0]  = xmr_return  0: Success
  1152.                              other: Failure
  1153.  
  1154.     This function changes the size of a block of memory previously
  1155.     allocated with the x_malloc() function. If "newsize" is greater than
  1156.     the block's original size, it may be necessary for Geneva to move the
  1157.     block to a new location. If there is insufficient free memory to
  1158.     increase the size of the block, the "old" block continues to reside
  1159.     where it was and an error code is returned.
  1160.  
  1161.   xsg_return = x_scrp_get( char *path, int delete )
  1162.   ------------------------------------------------
  1163.  
  1164.     Obtain the correct path of a clipboard (SCRAP) file.
  1165.  
  1166.     control[0] = $7160
  1167.     control[1] = 1
  1168.     control[2] = 1
  1169.     control[3] = 1
  1170.     control[4] = 0
  1171.  
  1172.     intin[0]   = delete      If set, remove all files in the clipboard that
  1173.                              match "SCRAP.*".
  1174.  
  1175.     intout[0]  = xsg_return  0: Failure
  1176.                              1: Success
  1177.  
  1178.     addrin[0]  = path        Pointer to a string which will receive the
  1179.                              complete path of the clipboard folder, with a
  1180.                              \ at the end.
  1181.  
  1182.     This function does the chore of determining where the clipboard
  1183.     directory is and, optionally, removing any SCRAP files that are already
  1184.     there.
  1185.  
  1186.     If the clipboard directory is either unset or points to a bad location,
  1187.     then "path" will be set to either C:\CLIPBRD\ or, if there is no C:
  1188.     drive, A:\CLIPBRD\. If no CLIPBRD folder exists, then it is created by
  1189.     the function.
  1190.  
  1191.     Example:
  1192.  
  1193.       int fhand;
  1194.       char path[120], text[]="Hi there!";
  1195.  
  1196.       if( x_scrp_get( path, 1 ) )
  1197.       {
  1198.         strcat( path, "SCRAP.TXT" );
  1199.         if( (fhand = Fcreate( path, 0 )) > 0 )
  1200.         {
  1201.           Fwrite( fhand, sizeof(text), text );
  1202.           Fclose(fhand);
  1203.         }
  1204.       }
  1205.  
  1206.   void x_graf_rast2rez( unsigned int *src_data, long plane_len,
  1207.      int old_planes, MFDB *mfdb, int devspef );
  1208.   -------------------------------------------------------------
  1209.  
  1210.     Convert a bit image (raster form) so that it can be properly displayed
  1211.     with the VDI function vro_cpyfm() at the current screen resolution.
  1212.  
  1213.     control[0] = $7132
  1214.     control[1] = 4
  1215.     control[2] = 0
  1216.     control[3] = 2
  1217.     control[4] = 0
  1218.  
  1219.     intin[0-1] = plane_len   Size of one bitplane of data, in the dest.
  1220.                              image, in bytes
  1221.     intin[2]   = old_planes  Number of bitplanes in the source data
  1222.     intin[3]   = devspef     If non-zero, the dest. image is in device-
  1223.                              specific format. Otherwise, it is in VDI
  1224.                              format.
  1225.  
  1226.     addrin[0]  = src_data    Pointer to the location of the source image's
  1227.                              data.
  1228.     addrin[1]  = mfdb        Pointer to the MFDB describing the dest.
  1229.                              image.  All values must be correct, including
  1230.                              the fd_addr.
  1231.  
  1232.     This function will convert an image (in either VDI or device-specific
  1233.     format) to a format which can be displayed in the current video mode.
  1234.     This includes things like transforming a color image of fewer bitplanes
  1235.     than the current video mode into an image that can be displayed using
  1236.     vro_cpyfm(). If the source is a monochrome image, it is much faster to
  1237.     simply use vrt_cpyfm() to display it and avoid x_graf_rast2rez()
  1238.     completely.
  1239.  
  1240.     All values in "mfdb" describe the destination image, except for
  1241.     fd_stand, which describes the source image.
  1242.  
  1243.     Example: Take the image described by "source", convert it to the
  1244.              current video mode, and display it.
  1245.  
  1246.       MFDB source,      /* assume this is already filled-in */
  1247.            dest,
  1248.            screen;
  1249.       long dest_size;
  1250.  
  1251.       dest = source;    /* most values are the same to start */
  1252.       dest.fd_nplanes = current_video_planes;
  1253.       dest_size = (long)dest.fd_nplanes * dest.fd_wdwidth*2 * dest.fd_h;
  1254.       dest.fd_addr = Malloc(dest_size);
  1255.       x_graf_rast2rez( source.fd_addr, (long)source.fd_wdwidth*2 * source.fd_h,
  1256.            source.fd_nplanes, &dest, 1 );
  1257.       screen.fd_addr = 0L;
  1258.       vro_cpyfm( vdi_handle, MD_REPLACE, array, &dest, &screen );
  1259.