home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_08
/
GENEVA4A.LZH
/
GNVA_004.TXT
< prev
next >
Wrap
Text File
|
1995-09-08
|
56KB
|
1,259 lines
We've Moved - Again!
--------------------
In case you haven't heard yet, we have moved our office and now have new
phone numbers:
Tel: (413) 532-2434
Fax: (413) 532-2540
Our address remains the same.
Updating to Geneva release 004
------------------------------
To update to the new version, follow these steps:
1. If you intend to keep the old version around for some reason, be sure
to make a backup of all files.
2. Make a backup of your original Geneva disk!
3. Format a blank, double-sided floppy disk (at least 80 tracks, 9
sectors/track). This will be your new Geneva Extras Disk.
4. Run the enclosed patch program, PATCH004.PRG. The Master disk will be
modified. Go get a cup of coffee; this takes about 4 minutes.
IMPORTANT: After the first disk has been patched, the system bell will
ring and you will be prompted to insert the blank disk you formatted in
Step 3. If you insert a disk that already has files on it, you will be
warned, and if you continue all of the existing files will be DELETED
in order to make room for the new Geneva files.
Go get another cup of coffee. It takes about 5 minutes to write the
extire Extras disk.
5. After the patch has successfully completed, run the INSTALL.PRG on the
modified disk. It will re-install all of the new files. If you get an
error message saying that an old file already exists, just let the
program overwrite the old file. Any custom flags you have set in your
GENEVA.CNF file will, unfortunately, be lost.
If you have problems with the patch
-----------------------------------
If, for some reason, the patch program does not run properly you can send
your original Geneva disk back to us along with a blank disk and a check
for $5 + $2 to cover return shipping. We will rewrite the disks with the
most recent version and return them to you by mail. Send to:
Gribnif Software
P.O. Box 779
Northampton, MA 01061
If you purchased the patch program on a disk directly from us, then just
include the $2 for shipping, and both disks.
Compatibility Notes
-------------------
o Calligrapher cannot always cut/paste when run in multitasking mode due
to an error in the program. To work around this, you can either always
make sure there is something in the clipboard, or you can run
Calligrapher in single-tasking mode.
o Calligrapher intentionally does not display a CapsLock indicator when
run in multitasking mode.
o If you use Calamus SL, you should not delete the PKS Write module from
memory. When this happens, it performs a system call that it should
not. Even without Geneva, any windows open by other programs will cease
to work properly if you do this. With Geneva, your document window will
also get closed.
o To use Geneva with Multi Viewer Graphica (MVG), you need to turn
pulldown menus off in the Task Manager's Misc. Options dialog.
o Prior versions of INSTALL.PRG would create a GEM.CNF file that has a
line like this in it:
setenv PATH=.,C:\GENEVA
The problem is that when some programs see the leading '.', they do not
treat it correctly (GEMINI, TWDTP). The period can be removed, and the
path will mean the same thing to Geneva. This would make the example
above:
setenv PATH=,C:\GENEVA
Changes in INSTALL
------------------
The Installation prorgam can now correctly install Geneva's files to any
drive, not just the boot drive. A copy of GEM.CNF is always placed in a
GENEVA folder on the boot disk.
Changes in TASKMAN
------------------
When the Task Manager first opens, you will probably notice that the
window is wider than you had expected. This is because there is now a
third pulldown menu, for Settings.
The way that editing flags works has changed:
o The "Temporary" option is only available when the name of a task has
been selected in the main list. Changes made in this mode are only
valid until the task terminates; they cannot be saved permanently.
o The "Permanent" option changes the flags for any new instances of the
task whose name matches the chosen name. It will NOT change the flags
for a task that is already running.
If you start by selecting a task's name from the main list and then
choose this option, then the permanent flags that Geneva would use
for that application are displayed by default. Of course, you can
still use the "Prev" and "Next" buttons to scroll through the list of
flags.
There is a "?" button in the Permanent Execution Flags dialog. It
gives you an item selector which allows you to locate the exact
filename of the application. Since Geneva does not keep track of the
full path of the application, only its name, you will have to
manually go to the path of the application each time this option is
used.
A new "Optimize window redraws" flag has been added. See the "Features
in the Main Program" section, below. By default this flag is off for
all applications.
The "Keyboard" dialog has been renamed to "Keyboard Equivs" and can now
control three new keyboard equivalents, which are not immediately
apparent:
o Iconify, the delta gadget to the left of the Cycle gadget.
o Iconify All, chosen by holding the Control key while clicking on the
Iconify gadget.
o Cycle app's windows, chosen by holding either Shift key while
clicking on the Cycle window gadget.
The old "Windows" dialog has been renamed to "Window/Menu Bar". This
dialog has a new option, "Menu separator style", which allows you to
change how the separator lines in menus appear. Note that the style
only applies to menus at the top of the screen or in windows that were
created by programs which are Geneva-aware. A program which implements
its own menus in windows will not get the new style. Popup menus and
submenus do not get the new style, either.
The first option in this popup gives no change; the second uses a solid
gray line, and the remaining styles are solid, colored lines. These
latter styles are only used when the video display can show at least 16
colors at once. Any disabled (normally gray) menu entries will also
have the color you choose here.
A new "Window Colors" dialog has been added. Geneva provides more window
gadgets than GEM normally does, so this dialog gives you control over
the colors and fill patterns of all of them.
To select a gadget to modify, click on the gadget with the mouse. An
outline will appear around the gadget you have chosen. Its attributes
can then be changed.
The normal options for text, border, and fill color are here. You also
have a few more choices:
o The 3D button turns on/off the raised appearance of the gadget.
o The Shadowed button in the Text section turns on or off a new
effect: text with a shadow behind it. The shadow's color is the
text color chosen below. The text itself is always drawn in either
black or white.
o The Topped button will toggle between editing the attributes for a
window which is on top or elsewhere in the stack.
Note that the Shadowed and 3D buttons affect the window gadget for both
its topped and untopped appearance.
To copy one gadget's attributes to another, click and hold the mouse
button down on a gadget and drag the resulting gray outline to another
gadget in the window.
Clicking on the mover bar of this window will only select that gadget
or copy its attributes to another gadget. However, the window can be
moved by clicking on any of the white areas within the window.
This window's appearance does not change when you make another window
topmost. The text attributes of the menu bar cannot be changed. Menu
text is always black and transparent.
When Geneva's settings are saved, the window colors are also saved. If
you still use another program like WCOLORS.CPX, then the settings in
that program will override the ones you have set in the Task Manager.
The "Dialogs" dialog has been renamed to "Dialog Colors". It provides
some new options:
o The border can be "AES 4 3D" style. This is slightly different from
the way Geneva draws its 3D buttons, most notably in the fact that
the color is controlled in a different manner (you have to use the
BCOLORS.CPX to change this.) Choosing this 3D method will deselect
the Geneva-style 3D button, and vice-versa.
If you want to get a 3D effect for the background object when using
the AES 4 3D method, you need to also set the Outline attribute. You
will probably also want to turn off the Rounded attribute.
o The Shadowed button in the Text section turns on or off a new effect:
text with a shadow behind it. The shadow's color is the text color
chosen below. The text itself is always drawn in either black or
white.
o Text can also be bold. This can even be combined with the Shadowed
effect.
The "Misc. Options" dialog has several new choices:
o "Preserve system colors" prevents applications which alter the color
palette from affecting other applications.
As you switch out of an application which changed the colors, they
will be reset to what they were the last time the new application had
control. Many paint programs will benefit from this option. Also, any
time an alert or Geneva's item selector is opened, the system colors
are returned to those of the Geneva Manager menu. This gives a more
readable item selector in programs like Calamus SL which change the
system color palette.
Note that it if you have this option set, you cannot change the
colors for all applications by using things like a control panel! As
soon as you change to another application, the colors will revert to
what they were previously. You should turn this option off before
using the control panel.
Furthermore, in order for the system colors that are used by default
to be changed, Geneva essentially ignores this flag until all desk
accessories are loaded. This way, if one of them (like a control
panel) changes the settings, all applications will get the new colors
by default. Once all of the desk accessories have loaded, "Preserve
system colors" takes effect.
o "Preserve mouse on/off" keeps track of how many times a program makes
the mouse pointer visible/invisible, and automatically restores the
mouse to the correct state when you switch between applications,
similar to the way to the "Preserve system colors" option works.
o Any dialog without editable fields can respond to just the keyboard
equivalents, without Alternate being held. The "Not in window" option
affects this feature for dialogs and alerts that are not contained in
a window.
The "In window" option affects this feature for for dialogs that are
drawn by Geneva and appear in a moveable window, like all of the Task
Manager's dialogs. Some programs generate their own windowed dialogs
and will not be affected by this option. By default, this option is
turned off for dialogs in windows.
The positions of the main Tasks window and all dialogs in the Task
Manager can be saved by using the "Save Positions" option.
You can now click on a name in the main list a second time in order to
de-select it.
Iconifying the main window and then running an application in
single-tasking mode will no longer cause the Task Manager window to
re-open incorrectly.
The Full gadget now alternates between full and the previous location.
The window's height will not get stuck vertically, preventing it from
becoming taller once a new app has been added to the list.
Names in the list of applications can be selected all the way across the
width of the window.
The gadget border sample sizes in the Windows dialog now match what
Geneva will actually use.
Changes in GNVA_TOS
-------------------
GNVA_TOS and GNVAHELP now both use the same font selection dialog. It is
one which shows all applicable fonts, not just the first 16.
If you select the Quit menu entry or close the window while a TOS program
is running, you will be given the opportunity to just terminate the TOS
program or terminate it and quit Geneva TOS.
You can now access windows/menu bars whenever a TOS program run by
GNVA_TOS is waiting for *any* type of keyboard input, not just some
types.
If GNVA_TOS is passed commandline parameters in order to run a TOS
program, then:
o The parameters are now the default in the Parameters dialog.
o The name and path of the executed program are the defaults in the
Open item selector.
o The commandline can include the redirection operators > (copy output
to a file), >> (append output to a file) and < (take input from a
file). IMPORTANT: If you are running the program from NeoDesk, then
you must put the redirectors in single quotes to prevent NeoDesk from
trying to do the redirection, like:
arc.ttp x archive.arc '> out.txt'
The Parameters dialog uses wrap-around editing. It can also take more
parameters than before if the "Use extended argument passing" option is
on.
The program can now be iconified. Output will continue to go into the
window while it is iconified.
The Misc. Options dialog now contains an option called "Pause when TOS
program exits". If this option is checked, Geneva TOS will display a
message prompting you to press any key. If this option is not checked,
Geneva TOS will close as soon as the TOS program terminates. In order
to be able to examine a program's output after it has terminated, you
need to have this option checked.
GNVA_TOS now uses a MiNT pipe for i/o redirection, when MiNT is running.
Fixed a bug in the Fforce() and Fdup() functions that would always cause
a crash whenever these functions were used by a TOS program (or
whenever any TOS program was run on a Falcon.)
GNVA_TOS can now use non-Speedo fonts with Speedo GDOS 5.
The scrollback buffer works much better, in general, once it has reached
the end.
Fixed a cosmetic bug in erasing parts of the current line, specifically
the sequences [Esc]J, K, d, and o.
Output of certain types of text has been sped up.
It is no longer possible to enter a number of columns < 80 or a number of
rows < 24 into the scrollback buffer dialog.
You can no longer have a window which is too tall or wide to fit on the
screen.
Terminating a program with ^C and then running a second one now works.
Changes in GNVAHELP
-------------------
GNVA_TOS and GNVAHELP now both use the same font selection dialog. It is
one which shows all applicable fonts, not just the first 16. The
minimum font size is now 2 points.
When going backward to the previous screen, the window is returned to the
slider positions it previously had in that location.
The window can now be iconified.
The main window can be scrolled with the keyboard by using the arrow
keys, with or without [Shift].
Underlined keywords are now drawn in a different color.
A number of graphics functions have been added to MAKEHELP and GNVAHELP.
See the files MAKEHELP.HLP and GRAPHICS.* for more information.
(MAKEHELP.TXT has been replaced by the HLP file.)
The MAKEHLP.TTP program now has a new option, -s, to generate automatic
cross-references. See the file MAKEHELP.HLP for more information.
Changes in Geneva
-----------------
Item Selector
-------------
You can now hold the Control key while clicking on the name of a file or
folder in order to Show Info on the item.
If a file is read-only, a checkmark will appear in front of its name in
the item selector. This only applies to 1 column mode.
The "Info" dialog now has a read-only button, so that the read-only
attribute of a file can be changed.
The "EXT" list includes a new entry, "Start". When this extension is
chosen, the template is changed back to the value it originally had
when the item selector first opened.
Sort by Date now sorts files that were created on the same day, but at
different times, correctly.
The item selector will now preserve the date and time of a file that is
copied or moved.
The item selector can now deal with an Atari-style background for all of
its dialogs. Also fixed a problem with clicking on the 1/2 COL button
in some places.
New Features in the Main Program
--------------------------------
MiNT is now supported. See the file MINT.TXT for more info.
Text in buttons can now have a "shadowed" effect. This makes the window
gadget text much more readable in monochrome. This option can be
changed for window gadgets and dialog buttons in the Task Manager.
Dialog buttons can now have the Atari AES 4 style of 3D appearance. See
the Task Manager for more details.
The colors of all window gadgets can now be set individually by using the
Task Manager. If you still use another program like WCOLORS.CPX, some
of the gadget colors will be inherited from other gadgets, like the
Cycle gadget which gets the color of the Full gadget. When Geneva's
settings are saved, the window colors are also saved.
A new program flag has been added, Optimize Window Redraws. Because many
programs will experience redraw problems when this option is on (even
NeoDesk 4 release 001), this option can be set individually for any
program by using the Task Manager. It makes these changes:
o Moving a window will try to blit as much of the window as possible,
even if the window is partway off screen or covered by another
window.
o Resizing a window so that it is larger will only cause the previously
invisible part to be redrawn, rather than redrawing the whole window.
o Topping a window will not always redraw the entire window.
o This method takes slightly more memory because Geneva hold onto
information about what windows overlap a given window so that it does
not have to spend time regenerating the information as often.
Note that even when a program responds correctly to this method, it is
still possible for there to be cosmetic redraw errors because of the
way GEM works.
For instance, if you move a window that is off the right edge of the
screen 3 pixels to the left, the area that is redrawn will be in the
correct pattern, but it will not match up with the rest of the window.
The effect of this can be decreased by not using patterns in window
gadgets.
Window redraws are faster in general, even without the Optimize option.
There are now keyboard equivalents for:
o The mouse pointer can be reset to being turned on once by pressing
Control-Shift-Alternate [keypad period]. This also clears any mouse
button presses that may be queued in memory.
o Iconify (Alternate [`], by default)
o Iconify All (Control-Alternate [`], by default)
o Cycle only the windows belonging to the current application
(Shift-Alternate-Backspace, by default). This can also be done with
the mouse by holding either Shift key while clicking on the Cycle
window gadget.
o Dialog buttons containing the up/down arrow characters can be
activated by using the window up/down line keyboard equivalents.
(Control [keypad 8] for up, Control [keypad 2] for down, by default)
o When a dialog has an edit cursor, these options will cut/paste to the
Atari clipboard:
Cut: Shift-Alternate [X]
Copy: Shift-Alternate [C]
Paste: Shift-Alternate [V]
If an untopped window is clicked on while either Shift key is held, all
windows belonging to that application will be moved to the top of the
stack. This provides an easy way to get all of an application's windows
back to the top.
Any dialog without editable fields can respond to just the keyboard
equivalents, without Alternate being held. This is controlled by
options in the Task Manager.
When you click with the mouse on a character in the ASCII Table window,
that character's ASCII value will be displayed in the mover bar of the
window until the mouse button is released.
Some applications which previously would not work in multitasking mode
because they displayed a dialog without locking the menu bar first may
now work. This is because when Geneva sees that an application uses
form_dial(FMD_START), it prevents other applications from getting
control until there has been a form_dial(FMD_FINISH) call.
A new command has been added to the GEM.CNF file, "runacc". It allows a
desk accessory to be loaded but not opened. Its syntax is identical to
"run".
A "Preserve system colors" option has been added. This can be controlled
in the Task Manager. It prevents applications which alter the color
palette from affecting other applications.
A "Preserve mouse on/off" option has been added. It keeps track of how
many times a program makes the mouse pointer visible/invisible, and
automatically restores the mouse to the correct state when you switch
between applications, similar to the way to the "Preserve system
colors" option works. This option can be controlled in the Task
Manager.
When Geneva rewrites its settings to disk, the entire list of program
flags is sorted alphabetically. This means that the next time you look
at the list in the Task Manager, it will be easier to find a particular
program.
When a window gets iconified, Geneva will tell the next uniconified
window in the stack (from the top) to become topped.
Switching to an application which has a tear-away menu on top of its
other open windows will put one of the other open windows on top,
instead of the tear-away.
The way that popup menus work has changed. If the mouse button is not
pressed when the popup is started, keyboard mode is no longer the
default. You can enter keyboard mode at any time by pressing a key like
the up or down arrow. Therefore, programs like STraight Fax (as a desk
accessory) which use popup menus will work more intuitively.
If you are in keyboard mode and the mouse is moved on top of a menu
entry, keyboard mode will exit. This means that you cannot enter
keyboard mode when the mouse is over a menu entry.
Other Changes in the Main Program
---------------------------------
It is now impossible to end up with the 10 point font in a vertical
resolution of 200 pixels. (Geneva actually checks the number of rows of
text and makes the system font it would use to draw dialogs and menus
smaller if this is less than 25 rows.) This avoids the problem of
having a huge font in some resolutions on the Falcon or Crazy Dots.
The last line of a GEM.CNF or GENEVA.CNF file will not be ignored if it
does not end with a CR/LF.
The code which uses the 200 Hz interrupt is less likely to cause keyboard
overruns now.
Awakening a program which already has a window open will no longer send
an AC_OPEN message.
Selecting multiple files in UIS III now works correctly.
evnt_multi() no longer sometimes returns the CapsLock state (UIS).
Closing an open DA window when the program that owns the menu bar has no
windows now restores the mouse shape to that of the program.
The underlines for keyboard equivalents have been moved down.
Check marks are now to the left and down one pixel.
Menu titles are now up one pixel.
Changing the menu start key now works properly.
Having a single-tasking app run from GEM.CNF will not lock up when
changing resolution.
If more than one automatic directory window update message is sent to the
shell before it has a chance to read them, they are now all passed to
the shell. Previously, only the first one would go through.
If a section of GENEVA.CNF ends before it should, the file is closed
properly.
Tear-away menus can now produce submenus.
The shape of the thick cross mouse pointer is now correct.
Radio/check buttons are now centered vertically in the object. This helps
make the buttons line up with the text when an alternate font is being
used.
Switching between single-tasking applications will no longer sometimes
result in a blank menu bar.
Turning the "Redraw on exit" flag off now works much better.
Putting the last application which owns the desktop to sleep will now
always redraw the desktop.
Menu keyboard equivalents now work when a tearaway menu is topmost and
the equivalent for a menu entry in a different pulldown menu is
selected.
Atari-style 3D buttons now display much more like they should.
Putting the topmost application to sleep will always return to its
parent, not the next open application.
Switching applications from the Applications tear-away menu should no
longer mess up the locations of menu bars.
Memory allocation is now more efficient.
If Warp 9 version 3.81 or older is used, Geneva will force Warp 9's Zoom
Boxes option to be on. This avoids a conflict in the way Warp 9 handles
this function. You can turn the zoom boxes off by using the
"Grow/shrink boxes" option in the Task Manager's "Misc. Options"
dialog.
The _IDT cookie is now set correctly for Sweden and other countries.
If more than one application has the exact same name in the Desk menu,
the names are sorted by application ID.
Using a True Type font with NVDI 3 will now give the correct characters
for regular text. Special Atari-specific characters, like arrows will
not be correct because there is no way to remap these accurately when a
True Type font is being used.
When several programs write into the GENEVA.CNF file, there is no longer
the chance that the file will end up with lots of extra carriage
returns in it.
If all applications except for the current one are asleep, then quitting
it will no longer cause a lockup.
If Geneva is run from the AUTO folder, then the "Quit Geneva" menu entry
is not available.
Running a single-tasking app from GEM.CNF with the "runsleep" command now
works correctly.
Geneva now maintains several of the system vectors on a per-process
basis. This means that if a program like Calamus, which has its own
bomb trap, is running and another program crashes, this will not
confuse Calamus into thinking that Calamus crashed. This also helps in
the case of any program written with the High Speed Pascal compiler.
Using a Falcon with a non-VGA monitor (like the SC1224) reboots into the
correct resolution now.
The appearance of radio and check boxes in a 4-color video mode with the
8 x 16 font is now correct (like in 4-color, interlace mode on the
Falcon.)
If you press Alt-Space to start the main menu in keyboard mode and then
click with the mouse anywhere else to close it, the keyboard
equivalents for menu titles are undrawn correctly.
More esoteric changes...
------------------------
There has been a major change in the way events get blocked. When the
menu bar is being used, MU_TIMER and MU_Mx messages continue to
occur now. Also, the behavior of wind_update(BEG_UPDATE) has been
changed to be more compatible with Atari's AES.
The module icons in Calamus and Calamus SL work right.
The "Keyboard Equivalents" dialog in the Task Manager can now be moved
if Limit Window Handles is on. (X_WM_SELECTED messages)
Programs which have Geneva draw menu bars in their windows will work
right if the Limit Window Handles option is on. (X_MN_SELECTED)
appl_write() works properly when the Limit Handles flag is on.
menu_tnormal() works when the item is not a menu title (CAL.PRG Alt-M)
It should no longer be possible to confuse NeoDesk's window redraws
by closing lots of windows very quickly.
A program which uses an MU_BUTTON event to wait for the mouse buttons
to be released will work properly even if the program has no windows
open and does not own the desktop. (INSHAPE)
Quitting a program which is run by Pexec from another program will
not cause a crash if the child left one or more VDI workstations
open (INSHAPE)
The unused portions of a WM_ARROWED message are now zeroed-out.
(STGUIDE)
appl_read(-1) returns the correct value. It also treats WM_REDRAW
messages correctly. (KOBOLD)
appl_exit() won't delete windows which are not open (DEVPACST)
appl_getinfo(0) and (1) now return the correct font height (EGEM and
many other German programs)
appl_getinfo(10) now reports the correct shel_write() bits.
When x_form_filename() is used with the to_from parameter == 0,
only the first 8 characters of a filename are copied if the filename
is not in 8.3 format (Geneva's item selector when called by CALAMUS SL)
Programs which modify Geneva's VDI workstation attributes are less likely
to cause redraw problems (menu titles in TW3)
The evnt_multi() mode which deals with right mouse clicks now works
much better (TW3, Papyrus, many others)
The Alt-Backspace keyboard equivalent will only work on windows which have
a Cycle gadget. It never tells a window without one that it should be on
top (TW3)
The default value for scrp_read() is an empty string. Also, if scrp_read()
is an empty string, the return value is 0. (PAPYRUS)
G_TITLE objects are no longer clipped within their object box.
Geneva now handles the case where a program has a menu bar with
the title objects out of sequence.
If a MU_MESAG event occurs during the same evnt_multi() as an MU_TIMER
event, only the MU_MESAG is reported (LC5xxED).
Window pulldown menus are now snapped to 8-pixel bounds. This makes them
draw more quickly.
There are fewer mouse on/off calls when redrawing menus and gadgets.
Geneva is now compatible with non-Speedo fonts when using Speedo 5.
If you hold the mouse on an active window menu title and then move to
a disabled title, this no longer partially draws the menu.
An application which understands AP_TERM will not be thrown out of memory
after 2 seconds during a resolution change. Desk accessories continue
to be terminated automatically, even if they say they understand
AP_TERM. (PAPYRUS, XCONTROL)
objc_draw() and objc_find() now work when told to work on the root
object with a depth of zero, and bad ob_head and ob_tail pointers
(PAPYRUS)
Programs which rely on the method for getting the status of both mouse
buttons now get the correct return value if the mouse is pressed and
then released before the double-click interval expires. (PAPYRUS,
LANDMINE, others.)
Fixed objc_sysvar() with bad values during inquire (TRUIMAG)
Fixed graf_mouse( number|0x8000...
The Gnva and _IDT cookies are installed during the AUTO folder load
sequence, not just before the desktop is first drawn.
An appl_write() to ID #0 will send the message to the topmost application
if the source application is a desk accessory (TWRITE3)
If a desk accessory is already open and its entry is chosen from the Desk
menu, an AC_OPEN message is now sent.
Popup menu entries do not need to be sorted from top to bottom. (SAMCNFG)
Topping a dialog in a window when the mouse is over the dialog's edit cursor
now redraws correctly.
Fixed objc_edit() to work properly when it processes a key contained in the editable field's
template which appears after the cursor and after the last editable
character.
The Clr and ^Clr keyboard equivalents now work in menu entries.
shel_write() now returns the application ID of the new task, if the
new task is multitasking.
When shel_envrn() fails it returns 0L, not a pointer to an empty string.
Programs which use the exec_os vector and follow the XBRA protocol can
now be worked around correctly by Geneva. (CyRel's VDI drivers)
RSC files containing CICONs can now use a pointer to another string
instead of only the text in the CICONBLK.
Using wind_get( WF_CURRXYWH ) on a closed window now returns all 0's (CONVECT)
Pressing a key in windowed dialog that does not contain an editable field
will not sometimes crash.
If an application quits, its parent now gets any AP_TERM messages and
gets control of the menu bar when a child of the first program quits.
(The first program's parent is now the parent of children of the program
that terminated.)
There are no longer sometimes spurious MU_BUTTON events for windows
with a dialog
objc_find() will work correctly with buttons which use Atari-style 3D.
The case where the default path passed to shel_write() does not end with
a \ is now handled correctly. (GEMINI)
The shel_find() function will no longer return a path beginning with ".\"
if the PATH variable begins with ".,". (GEMINI, TWDTP)
When automatic keyboard equivalents are generated for an object tree with
a large number of objects, they now get redrawn correctly when the
dialog finishes. (TCACHE)
A dialog object that is hidden can now be edited. (TCACHE)
Clicking on a gadget in a window with the X_WTFL_CLICKS flag turned off
no longer causes the gadget to become selected (TM's Window Colors)
Clipboard path handling is more robust now. The x_scrp_get() function
works much better, so all of the Geneva programs that deal with the
clipboard should also read the existing clipboard path correctly now.
When an application either changes its menu bar or turns it off, any
associated tear-aways are closed.
Changing a window menu title with menu_tnormal() should no longer update
the title if the window is closed but not deleted.
If you use SUBMENU.CPX and tell it to use a popup height that is taller
than the desktop area, it will instead be limited to that size.
If a DA registers its name in the Desk menu and it already has a name
stored at the same location in memory, the Desk list is merely updated.
A new entry in the Desk menu is not created.
If a button is SELECTED, !SELECTABLE, EXIT && !TOUCHEXIT, it now acts
like a touchexit button (VMG-4000).
Using the Desk menu in keyboard mode works correctly when the menu is
scrollable.
Changed some code in TASKMAN and other programs which access fonts in order
to avoid a bug in NVDI 3's handling of vqt_fontinfo() for system fonts.
Quitting a program which intercepts trap #2 and then restores it will no
longer result in Geneva trying to close a VDI workstation which is
already closed. (This can cause an AES recursive message if you are
using NVDI and try to quit something like PD.PRG or PROFILER.PRG.)
The default value for the _IDT cookie in the USA now has the separator
'/'. Previously, it was $0, which means the same thing.
The item selector now rechecks the _IDT cookie every time it is reopened.
This means that setting the date/time format in a CPX will now work.
wind_set( handle, X_WF_DFLTDESK...) will always work. Previously, it
would only work when "handle" was a valid window handle > 0.
When two windows use the same menu bar, they both get updated properly
when menus are used. (GNVA_MAC)
The correct window handle is now always returned in word 7 of an
X_MN_SELECTED message.
wind_get(WF_TOP) now always returns the correct value in the third
word (the handle of the window underneath the topmost).
The About Geneva dialog looks correct when the outer box is not white.
When a window is iconified, the initial position of the icon window is
now calculated correctly.
The way appl_tplay and appl_trecord work has changed so that they work
better. The new functions x_appl_trecord/play have been added.
The messages for iconification now work properly if the Limit Window
Handles option is on.
Geneva now maintains several of the system vectors on a per-process
basis. This means that if a program like Calamus, which has its own
bomb trap, is running and another program crashes, this will not
confuse Calamus into thinking that Calamus crashed. This also helps in
the case of any program written with the High Speed Pascal compiler.
An MU_MESAG event now returns the correct shift key state (STFAX)
Fixed up a few places that did not consider the INDIRECT ob_flag.
If a program increases the size of the keyboard buffer, Geneva will no
longer eventually crash.
Programming Changes
-------------------
The file new_aes.h now defines the constant SMALLER correctly, and Geneva
004 understands this value.
x_appl_sleep() in the manual is wrong: bit 1, if set, means the
application is multitasking. When it is clear, the application is
single-tasking.
Page 114 of the manual has an error. The X_WM_SELECTED message looks like
this:
word 0: 0xE100
word 3: The handle of the window containing the gadget
word 4: The object index of the window tree object the user clicked on
Object Trees
------------
ob_state attributes:
Bit 11 X_SHADOWTEXT Draw the object's text with a shadow
Extended editing:
If an editable field's TEDINFO te_tmplen is X_LONGEDIT (-71), then
this means that it and the following editable field (which must be
the next object in the tree) can use extended editing.
When the edit cursor is at the end of a line, pressing another key
will cause the cursor to automatically jump to the start of the next
line. Other keys like the arrows, Delete, and Backspace work in a
similar way, but only if a given line of text stretches the entire
width of the editable field. A line can be broken at any point by
pressing Control-Return.
The last editable field in the list must NOT have the X_LONGEDIT set.
The G_COOKIE structure
----------------------
vectors: Points to a G_VECTORS structure
The G_VECTORS structure
-----------------------
used: A bitmap of which vectors in the rest of the structure are
used by this version of Geneva. Currently this is 7, to
indicate that the first 3 vectors are used.
keypress: This function is called whenever Geneva receives a key
from the keyboard. The A0 register points to a longword
containing the keycode of the key which was pressed:
bits 31-24 23-16 15-8 7-0
shift scan code unused ASCII
This is just like the result of Bconin(2) with the result
of Kbshift(-1) stored in the high byte.
If the "keypress" function changes this longword to 0L,
then the keypress will be ignored. If the longword is
changed to some other value, then the new value will be
processed.
If the "keypress" function returns a value >= 0, then the
application with that ID will receive a X_WM_VECKEY
message during its next event loop.
app_switch: This function is called whenever the user performs some
action that causes the topmost application to change, like
selecting a name from the Desk menu or topping another
application's window.
When called, the A0 register points to a string in
appl_find() format which is the name of the process that
was switched to. The D0 register contains the application
ID of the process.
Under some circumstances, this function may be called even
though the "new" application is already the topmost one.
It is also possible for the "apid" in D0 to be -1, if
Geneva is in the process of shutting down.
If the "app_switch" function returns a value >= 0, then
the application with that ID will receive a X_WM_VECSW
message during its next event loop.
gen_event: This function is called continually by Geneva. It provides
a way for an application to have Geneva poll a certain
condition and generate an event if something occurs.
This can take the place of using evnt_multi() with small
timer values in order to poll a condition, and is much
more efficient. It can be used in things like a corner
clock to see when the time has changed to a new minute.
If the "gen_event" function returns a value >= 0, then the
application with that ID will receive a X_WM_VECEVNT
message during its next event loop.
Notes about using vectors:
o A vector routine can change registers D0-D2/A0-A1. All others must be
preserved.
o No vector routine can call the AES. The keypress and app_switch
vectors must not call GEMDOS functions. All other TOS services can be
used.
o If a vector does not wish to generate an event, then it must return a
negative number, like -1.
o A vector MUST follow the XBRA protocol. The only exception to this is
Geneva itself, which installs default vectors that do nothing but
return -1.
o An application is responsible for removing itself from the vector
chain when it terminates. Failure to do so will most likely cause a
crash in the future. An application should use shel_write() mode 9 to
tell Geneva that it knows about the AP_TERM message and respond to
that message by removing itself from the list before quitting.
o If your vector routine does not wish to generate an event, then it
should pass control through to the previous routine in the XBRA
chain.
o If Geneva is running without MiNT, then the vector routines are
always called in supervisor mode. If running with MiNT, then the CPU
is in user mode. When MiNT is in memory protection mode, an
application which uses vectors must at least be in Readable mode, and
should most likely in Global mode.
See the files VECTEST.C and VECTESTS.S for an example.
The OB_PREFER structure
-----------------------
atari_3D: Display the object using Atari AES 4 style 3D
shadow_text: Draw the text with a shadow underneath it
bold_shadow: Text is bold (can be combined with shadow_text)
The SETTINGS structure
----------------------
flags:
no_alt_modal_equiv: Kbd equivs in modal dialogs do not require Alt
no_alt_modeless_eq: Kbd equivs in windowed dialogs do not require Alt
preserve_palette: Set color palette when switching applications
mouse_on_off: Maintain mouse on/off calls when switching apps
cycle_in_app: Kbd equiv for cycling windows belonging to current app
iconify: Iconify the current window
alliconify: Iconify all windows belonging to the app
The APFLG structure
-------------------
optim_redraws: Optimize window redraws
shel_write()
------------
New "sw_doex" modes:
XSHW_RUNANY (0xE0): run an application, letting Geneva determine the
type. This is identical to mode 0, except that the XSHD_FLAGS bit
of "sw_doex" can also be set (see below).
XSHW_RUNAPP (0xE1): run an application. This is identical to mode 1,
except that the XSHD_FLAGS bit of "sw_doex" can also be set.
XSHW_RUNACC (0xE3): run a desk accessory. This is identical to mode
3, except that the XSHD_FLAGS bit of "sw_doex" can also be set.
When XSHD_FLAGS (1<<15) is added to the "sw_doex", this means that the
last longword of the SHWRCMD passed in the "sw_cmd" parameter contains
the Geneva program flags to use when executing the application.
It is strongly recommended that a program using XSHD_FLAGS inquire the
current flags for the application and only change the ones it needs to
change, rather than making most of the flags zero or some other random
value. See the x_appl_flags() section, below, for an example.
wind_get(), wind_set() mode X_WF_DCOLSTAT (0x2100)
--------------------------------------------------
This mode gets or sets a window gadget's default colors and ob_state
value. Unlike WF_DCOLOR, this option gives full control over all of
Geneva's extended window gadgets.
For wind_set(), the "wi_sw1" parameter contains the index of the window
gadget to change, taken from the list of WGCLOSE through WGSIZE, as
outlined in xwind.h. "wi_sw2" contains the color for the gadget when
the window is on top, "wi_sw3" is for an untopped window. "wi_sw4"
contains the ob_state word of the object. If any of these values is set
to -1, then no change occurs.
For wind_get(), the "wi_sw1" parameter must be a pointer to a word
containing the index of the gadget being inquired about, the same way
WF_COLOR and WFDCOLOR work.
Example: Turn the 3D attribute on for the mover bar
int top, untop, state, gadget;
gadget = WGMOVE;
wind_get( 0, X_WF_DCOLSTAT, &gadget, &top, &untop, &state );
state |= X_MAGIC|X_DRAW3D;
wind_set( 0, X_WF_DCOLSTAT, gadget, -1, -1, state );
wind_get(), wind_set() mode X_WF_DIALFLGS (0xE100)
--------------------------------------------------
X_WD_KEYS (bit 2): When set, any keypresses that would otherwise be
processed as part of the dialog are instead passed through to the
application.
An example is when NeoDesk is run with the desktop in a window.
Normally, things like Shift-C would be treated like a keypress in a
dialog without any editable field and ignored. When this bit is set,
the keypress will instead go to the application.
x_appl_flags() mode 5 (X_APF_SEARCH)
------------------------------------
Use the APPFLAGS "name" element to search for the set of flags that
would be used by Geneva were it to run the application with that name.
Note that the "name" element is overwritten in the process. The
"index" parameter is not used.
Example: Get the flags for FOO.PRG and force it to run in
single-tasking mode
APPFLAGS a;
SHWRCMD shwrcmd;
strcpy( a.name, "FOO.PRG" );
x_appl_flags( X_APF_SEARCH, 0, &a );
a.flags.s.multitask = 0;
shwrcmd.name = "FOO.PRG";
shwrcmd.app_flags = a.flags.l;
shel_write( XSHD_FLAGS|XSHW_RUNANY, 0, 0, (char *)&shwrcmd, "" );
void x_malloc( void **addr, long size )
---------------------------------------
Allocate memory from Geneva.
control[0] = $7186
control[1] = 2
control[2] = 0
control[3] = 1
control[4] = 0
intin[0-1] = size intin[0]: MSW of the size
intin[1]: LSW of the size (lower 16 bits)
addrin[0] = addr pointer to a pointer which receives the address of
an allocated block, or 0L
This function allocates memory, much in the same way Malloc() or
malloc() does. The only major difference is that it comes without the
extra overhead of malloc(). Since Geneva takes this memory from the
same pool as the rest of its memory, it is also not as likely to cause
memory fragmentation if the application allocates lots of small blocks
using this call as it is when doing so with Malloc().
If no memory could be allocated, the "addr" is set to NULL (0L).
Unlike the GEMDOS Malloc() function, this function does not accept the
"size" -1L.
xmf_return = x_mfree( void *addr )
----------------------------------
Free memory allocated with x_malloc().
control[0] = $7187
control[1] = 0
control[2] = 1
control[3] = 1
control[4] = 0
addrin[0] = addr pointer to a memory block previously
allocated with x_malloc()
intout[0] = xmf_return 0: Success
other: Failure
This function frees a block of memory previously allocated with the
x_malloc() function.
xms_return = x_mshrink( void *addr, long newsize )
--------------------------------------------------
Shrink a memory block allocated with x_malloc().
control[0] = $7188
control[1] = 2
control[2] = 1
control[3] = 1
control[4] = 0
intin[0-1] = newsize intin[0]: MSW of the size
intin[1]: LSW of the size (lower 16 bits)
addrin[0] = addr pointer to a memory block previously
allocated with x_malloc()
intout[0] = xms_return 0: Success
other: Failure
This function shrinks (decreases the size of) a block of memory
previously allocated with the x_malloc() function. The "newsize" must
be less than the original size, or Failure will be returned.
xmr_return = x_realloc( void **addr, long newsize )
---------------------------------------------------
Change the size of memory allocated with x_malloc(), potentially moving
it to another location.
control[0] = $7189
control[1] = 2
control[2] = 1
control[3] = 1
control[4] = 0
intin[0-1] = newsize intin[0]: MSW of the size
intin[1]: LSW of the size (lower 16 bits)
addrin[0] = addr pointer to a memory block previously
allocated with x_malloc()
intout[0] = xmr_return 0: Success
other: Failure
This function changes the size of a block of memory previously
allocated with the x_malloc() function. If "newsize" is greater than
the block's original size, it may be necessary for Geneva to move the
block to a new location. If there is insufficient free memory to
increase the size of the block, the "old" block continues to reside
where it was and an error code is returned.
xsg_return = x_scrp_get( char *path, int delete )
------------------------------------------------
Obtain the correct path of a clipboard (SCRAP) file.
control[0] = $7160
control[1] = 1
control[2] = 1
control[3] = 1
control[4] = 0
intin[0] = delete If set, remove all files in the clipboard that
match "SCRAP.*".
intout[0] = xsg_return 0: Failure
1: Success
addrin[0] = path Pointer to a string which will receive the
complete path of the clipboard folder, with a
\ at the end.
This function does the chore of determining where the clipboard
directory is and, optionally, removing any SCRAP files that are already
there.
If the clipboard directory is either unset or points to a bad location,
then "path" will be set to either C:\CLIPBRD\ or, if there is no C:
drive, A:\CLIPBRD\. If no CLIPBRD folder exists, then it is created by
the function.
Example:
int fhand;
char path[120], text[]="Hi there!";
if( x_scrp_get( path, 1 ) )
{
strcat( path, "SCRAP.TXT" );
if( (fhand = Fcreate( path, 0 )) > 0 )
{
Fwrite( fhand, sizeof(text), text );
Fclose(fhand);
}
}
void x_graf_rast2rez( unsigned int *src_data, long plane_len,
int old_planes, MFDB *mfdb, int devspef );
-------------------------------------------------------------
Convert a bit image (raster form) so that it can be properly displayed
with the VDI function vro_cpyfm() at the current screen resolution.
control[0] = $7132
control[1] = 4
control[2] = 0
control[3] = 2
control[4] = 0
intin[0-1] = plane_len Size of one bitplane of data, in the dest.
image, in bytes
intin[2] = old_planes Number of bitplanes in the source data
intin[3] = devspef If non-zero, the dest. image is in device-
specific format. Otherwise, it is in VDI
format.
addrin[0] = src_data Pointer to the location of the source image's
data.
addrin[1] = mfdb Pointer to the MFDB describing the dest.
image. All values must be correct, including
the fd_addr.
This function will convert an image (in either VDI or device-specific
format) to a format which can be displayed in the current video mode.
This includes things like transforming a color image of fewer bitplanes
than the current video mode into an image that can be displayed using
vro_cpyfm(). If the source is a monochrome image, it is much faster to
simply use vrt_cpyfm() to display it and avoid x_graf_rast2rez()
completely.
All values in "mfdb" describe the destination image, except for
fd_stand, which describes the source image.
Example: Take the image described by "source", convert it to the
current video mode, and display it.
MFDB source, /* assume this is already filled-in */
dest,
screen;
long dest_size;
dest = source; /* most values are the same to start */
dest.fd_nplanes = current_video_planes;
dest_size = (long)dest.fd_nplanes * dest.fd_wdwidth*2 * dest.fd_h;
dest.fd_addr = Malloc(dest_size);
x_graf_rast2rez( source.fd_addr, (long)source.fd_wdwidth*2 * source.fd_h,
source.fd_nplanes, &dest, 1 );
screen.fd_addr = 0L;
vro_cpyfm( vdi_handle, MD_REPLACE, array, &dest, &screen );