[comp.lang.c++] Turbo C++ and Zinc Interface Library, Recommendations?

sgf0z@watt.acc.Virginia.EDU (Steven Glenn Fox) (11/02/90)

Sorry if this has been discussed in the past but I am new to 
the C++ arena and c.l.c++.  

Has anyone used Turbo C++ and the Zinc Interface Library ?
I am embarking on a new project that will employ a GUI and
be coded in C++ for the PC environment.  This combination 
(TC++ and Zinc) seems to be just what I need, but I am a little 
wary with two relatively new products. 

I would like to hear any feedback on Zinc and GUI development.  

How well developed is the product? the class libraries? the docs 
and support? the event manager?

Thanks in Advance!

Steven G. Fox				sgf0z@virginia.edu
University of Virginia			uunet!virginia!sgf0z
Department of Systems Engineering
Charlottesville, Va 22903		(804) 982-2073

jdm5548@diamond.tamu.edu (James Darrell McCauley) (11/03/90)

In article <1990Nov2.015742.19381@murdoch.acc.Virginia.EDU>, sgf0z@watt.acc.Virginia.EDU (Steven Glenn Fox) writes:
To: sgf0z@watt.acc.Virginia.EDU (Steven Glenn Fox)
Subject: Re: Turbo C++ and Zinc Interface Library, Recommendations?

In article <1990Nov2.015742.19381@murdoch.acc.Virginia.EDU> you write:
|> Sorry if this has been discussed in the past but I am new to 
|> the C++ arena and c.l.c++.  

me too

|> Has anyone used Turbo C++ and the Zinc Interface Library ?

a little


|> I would like to hear any feedback on Zinc and GUI development.  
|> 
|> How well developed is the product? the class libraries? the docs 
|> and support? the event manager?

Though I'm still trying to figure everthing out, I've found the 
Zinc libraries to be very nicely done.  Their reference manual 
is very good (in explaining the use of each object type). The 
programmer's guide is okay but perhaps a little compact for my 
tastes. (I didn't learn C from K&R!)  Tech support is fair 
(talked to them twice).  Their BBS could use a few more examples.  

One frustrating thing is their format for icons (bitmaps), 
though I've just overcome that problem.  Their tech support 
suggested that I use graph paper to create them, but I've just 
hacked one of Jef Poskanser's pbm utilities to go from 
PBM -> Zinc Format.  I'll post it a little later once I get a 
message to Mr. Poskanser.

I have been very impressed with the look it gives.

BTW, they're now shipping 1.01 upgrades to all registered users.
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
James Darrell McCauley                 jdm5548@diamond.tamu.edu
Dept of Ag. Engineering                          (409) 845-6484
Texas A&M University, College Station, Texas 77843-2117, USA
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

brown@cs.utk.edu (Lance A. Brown) (11/03/90)

Where can I get the address of the company that puts out the Zinc Library?

Thanks,
  Lance Brown
--
------------------------------------------------------------------------------
Lance A. Brown                            brown@cs.utk.edu 
3500 Sutherland Avenue, Apt. L-303	  Graduate Student in Computer Science
Knoxville, TN  37919                      Sun SparcStations are Neat!   
------------------------------------------------------------------------------

ronb@burklabs (Ron Burk ) (11/06/90)

sgf0z@watt.acc.Virginia.EDU (Steven Glenn Fox) writes:

> I would like to hear any feedback on Zinc and GUI development.  

I believe the latest issue of Tech Specialist has a review.
as a review.

jrv@sdimax2.mitre.org (VanZandt) (11/07/90)

I recently got a copy of the Zinc library demo disk.  Here are my
initial reactions...

                      --- Demo disk files ---

Root directory files:

	README            857   9-01-90   2:00p
	DEMO     EXE   214785   9-01-90   2:00p
	D_HELP   HLP    13908   9-01-90   2:00p
	SOURCE       <DIR>      9-01-90   2:00p

Source code files:

	D_CALC   CPP     4924   9-01-90   2:00p
	D_CLASS  CPP     1963   9-01-90   2:00p
	D_CTRL   CPP    10922   9-01-90   2:00p
	D_DATA   CPP     2723   9-01-90   2:00p
	D_DEMO   CPP     4851   9-01-90   2:00p
	D_DEMO   HPP     2706   9-01-90   2:00p
	D_DIRECT CPP     7104   9-01-90   2:00p
	D_EVENT  CPP     6840   9-01-90   2:00p
	D_GRAPH  CPP     2395   9-01-90   2:00p
	D_ICON   CPP    10380   9-01-90   2:00p
	D_PIANO  CPP     5826   9-01-90   2:00p
	D_WIN    CPP    11415   9-01-90   2:00p

                    --- Comments & Questions ---

The demo runs in graphics mode by default, but will also run in several
text modes and the user can switch from one mode to another.  The text
mode windows look a lot like those in the TCE.  The graphics mode
windows look much sharper.  

Size: The demo file is 214K - how much of this is TC++ library code,
and how much is Zinc library code? What is the minimum size of a
program using Zinc? Presumably the demo uses nearly all the functions. 
Will the linker include functions for unused features?

Speed: Opening 24 overlapping graphics mode windows of various sizes,
then closing them, took about 2.7 sec on a 25 MHz '386.  The same
sequence in text mode took about half as long.

Mouse functions: With a mouse, multiple windows can be opened, with the
most recently opened window being active.  The active window has
minimize and maximize buttons in the upper right and an anonymous
button in the upper left.  Clicking on the anonymous button brings up a
generic window menu with the options restore, close, move, resize,
maximize, and minimize.  I found these functions easier to access
directly: move a window by dragging on its title, resize it by dragging
on a side or a corner, minimize or maximize by clicking the appropriate
buttons, and close by hitting the escape key.  The "restore" command
undoes the effect of the minimize or maximize command.  In contrast,
the minimize and maximize buttons in the corner of the window are
toggles.  Windows can fall partly off the screen, so long as part of
the top edge remains visible.  Clicking in an inactive window makes it
active and brings it to the front.  Dragging on a menu will move the "current
choice" bar, but releasing the mouse button does not select the highlighted
choice.  An explicit click is needed.

I found no way to pop up the generic window menu with keyboard
commands.  However, there are alt-function key combinations for those
commands, plus exit and editing commands.

Is the programmer responsible for restoring material covered by a
window, or does the library code save and restore it for him? (This is
a time+complexity vs.  space tradeoff.)

The text for windows (including the help windows) are in the separate
file D_HELP.HLP.  The demo will run without the text file, but buttons
that would call up text windows don't work.  Keeping the two files
together is a configuration control problem.  Here is a dump of the
beginning of D_HELP.HLP:

0000H  AF 05 01 00 23 00 CE 32 00 00 54 68 65 20 66 6F   '/...#.N2..The fo'
0010H  6C 6C 6F 77 69 6E 67 20 61 63 74 69 6F 6E 73 20   'llowing actions '
0020H  63 61 6E 20 62 65 20 70 65 72 66 6F 72 6D 65 64   'can be performed'
0030H  20 6F 6E 20 77 69 6E 64 6F 77 73 3A 20 0D 0A 0D   ' on windows: ...'
0040H  0A 20 20 4D 41 58 49 4D 49 5A 45 20 3C 41 6C 74   '.  MAXIMIZE <Alt'
0050H  20 46 31 30 3E 20 20 20 20 4D 49 4E 49 4D 49 5A   ' F10>    MINIMIZ'
0060H  45 20 3C 41 6C 74 20 46 39 3E 0D 0A 20 20 4E 45   'E <Alt F9>..  NE'
0070H  58 54 20 20 20 20 20 3C 41 6C 54 20 46 36 3E 20   'XT     <AlT F6> '
0080H  20 20 20 20 4D 4F 56 45 20 20 20 20 20 3C 41 6C   '    MOVE     <Al'
0090H  74 20 46 37 3E 0D 0A 20 20 53 49 5A 45 20 20 20   't F7>..  SIZE   '
00A0H  20 20 3C 41 6C 74 20 46 38 3E 20 20 20 20 20 43   '  <Alt F8>     C'
00B0H  4C 4F 53 45 20 20 20 20 3C 45 73 63 3E 0D 0A 20   'LOSE    <Esc>.. '
00C0H  20 52 45 53 54 4F 52 45 20 20 3C 41 6C 74 20 46   ' RESTORE  <Alt F'
00D0H  35 3E 20 0D 0A 0D 0A 54 68 65 20 66 6F 6C 6C 6F   '5> ....The follo'
00E0H  77 69 6E 67 20 6F 70 65 72 61 74 69 6F 6E 73 20   'wing operations '
00F0H  63 61 6E 20 62 65 20 70 65 72 66 6F 72 6D 65 64   'can be performed'

...which is straight ASCII text, except for the first ten bytes (and
some bytes near the end of the file).  The text does not appear in the
source code.  Can it be maintained by a straight ASCII text editor? If
so, how do the first ten bytes get added? How is the correspondence
between the windows and their respective text maintained?

The text file has CRLFs only at the end of paragraphs.  Wordwrapping
is done on the fly, and changes when the window "maximize" button is
toggled.

In text mode, or in graphics mode on a VGA, the current status is
indicated by "square root" symbols to the left of the corresponding
menu buttons.  In graphics mode on a Paradise EGA, there was no
indication.

In graphics mode, window buttons for "close", "minimize", and
"maximize" are displayed with a 3D effect as if they were lighted from
the upper left.  Menu buttons lack this.  In menus, buttons are merely
black text on white (or black on gray for the current button).

In the sample pulldown menu, each pulldown menu is left-aligned with
its button in the menu bar.  Is this a requirement? (If so, then
buttons with wide pulldown menus cannot be placed near the right end of
the menu bar.)

Many of the windows have buttons with labels like "about the help system"
that pop up associated information windows.  Apparently these windows
are special cases of the help window.  This means that if you ask for help
from within an information window, the help window replaces the information
window.  When the help window is closed the information window is gone
too.

-------------------------------------------------------------------------

Maybe someone with the Zinc library can answer some of my questions. 
In the mean time, I hope this helps.

                                 - Jim Van Zandt

jdm5548@diamond.tamu.edu (James Darrell McCauley) (11/08/90)

In article <125640@linus.mitre.org>, jrv@sdimax2.mitre.org (VanZandt) writes:

|> The demo runs in graphics mode by default, but will also run in several
|> text modes and the user can switch from one mode to another.
You can specify what mode you want.  The default in the demo is graphics
(because Zinc linked in the BGI files).

I've seen some pretty impressive graphics in an example contained
in their latest release. Pie Charts, Bar Charts, Line Graphs.

|> I found no way to pop up the generic window menu with keyboard
|> commands.  However, there are alt-function key combinations for those
|> commands, plus exit and editing commands.

try ALT-F6, W, 1
You can do all kinds of cut / paste / whatever without any extra
programming effort (Zinc has some kind of a built-in global paste buffer).

IMPORTANT POINT:
Unless you start redefining stuff or getting overly sophisticated, 
MOST programs should work with or WITHOUT a mouse.  (I couldn't
get their paintbrush example to work with the cursor keys, but I didn't
really expect to.)  You're not stuck to just mice or keyboards, either.
You can create your own input device objects using UI_DEVICE as a base class,
just as long as it communicates with the event manager properly.

|> Is the programmer responsible for restoring material covered by a
|> window, or does the library code save and restore it for him? (This is
|> a time+complexity vs.  space tradeoff.)

The window manager takes care of this for you.  

|> The text for windows (including the help windows) are in the separate
|> file D_HELP.HLP.  

Only the help info.  UIW_TEXT, a text window class, has the text in char *,
an argument to the constructor, as does the other window objects.

The special format for help files is a product of a utility called GENHELP,
which comes with Zinc.  The programmer doesn't have to worry about it.

|> In text mode, or in graphics mode on a VGA, the current status is
|> indicated by "square root" symbols to the left of the corresponding
|> menu buttons.  In graphics mode on a Paradise EGA, there was no
|> indication.
Whether or not to have check marks is a question answered by the programmer.
Why you didn't have the checks using the Paradise card, I don't know.

|> In graphics mode, window buttons for "close", "minimize", and
|> "maximize" are displayed with a 3D effect as if they were lighted from
|> the upper left.  Menu buttons lack this.  
Menu buttons are called menu "items." If you want buttons in the menus,
then you have to program it that way.  These window buttons are added 
only if you want them (i.e., you have to code them in).

|> In the sample pulldown menu, each pulldown menu is left-aligned with
|> its button in the menu bar.  Is this a requirement? 

No. Just a matter of style. Look at the code.  They could have made them
right justified, since strings are used:  "    Item ~1 "
                                          " ~Item 9999 "
Look at the source!

I really like Zinc, but I do have to give a word of caution.  TC++ (1.01)
RUNS OUT OF MEMORY while compiling (command line version) if you don't
watch yourself.  In their source for the demo, Zinc tends to add a lot
of objects to the windows in one expression, sort of like
"*window +a +b +c +d +e +f +g;"
Don't get caught doing this: "*window +a +b + ... +z;" TCC chokes.  This 
is fairly obvious, but I understand that Zinc has had quite a few questions 
about this. Also, large bitmaps are not good.  I ran out of memory on a 
4 MB machine while trying to compile a 400x450 bitmap. I guess 400x450
is a little big to be called an icon though (which is what I was trying to do).

Later Daze,
Darrell
--jdm5548@diamond.tamu.edu

wallis@labc.enet.dec.com (Barry L. Wallis) (11/15/90)

There is also a review of the Zinc Interface Library in the new Dr. Dobb's
Journal.

---
Barry L. Wallis			USENET: wallis@labc.dec.com
Database Consultant		Prodigy (don't laugh): DNMX41A
U.S. DECtp Resource Center	DECUServe: EISNER::WALLIS (not on the net yet)
Los Angeles, CA			"No one voted for me, I represent myself"
---