home *** CD-ROM | disk | FTP | other *** search
- Path: news.uh.edu!barrett
- From: eb15@andrew.cmu.edu (Ed Berger)
- Newsgroups: comp.sys.amiga.reviews
- Subject: REVIEW: DICE Version 3.0
- Followup-To: comp.sys.amiga.programmer
- Date: 2 Jun 1994 17:44:40 GMT
- Organization: The Amiga Online Review Column - ed. Daniel Barrett
- Lines: 503
- Sender: amiga-reviews@math.uh.edu (comp.sys.amiga.reviews moderator)
- Distribution: world
- Message-ID: <2sl5q8$hip@masala.cc.uh.edu>
- Reply-To: eb15@andrew.cmu.edu (Ed Berger)
- NNTP-Posting-Host: karazm.math.uh.edu
- Keywords: programming, C, compiler, commercial
- Originator: barrett@karazm.math.uh.edu
-
-
- PRODUCT NAME
-
- DICE Version 3.0
-
-
- BRIEF DESCRIPTION
-
- DICE 3.0 is the commercial version of the popular shareware DICE C
- language compiler created by Matt Dillon. The package contains a 450-page
- manual and 5 disks containing two different text editors, a C compiler,
- linker, debugging tools, source code management tools, source to the linker
- libraries, example programs and a 1.3 AmigaDOS compatible on-line help
- system.
-
-
- AUTHOR/COMPANY INFORMATION
-
- Name: Obvious Implementations Corporation
- Address: P.O Box 4487
- Cary, NC 27519-4487
- USA
-
- Telephone: (800) 761-2042
- (919) 859-7407
-
- E-mail: info@oic.com
-
-
- LIST PRICE
-
- Regular $150 US dollars
- Student (any school) $ 95 US dollars
- Owner of registered DICE $ 75 US dollars
-
- I upgraded from the registered version.
-
-
- SPECIAL HARDWARE AND SOFTWARE REQUIREMENTS
-
- HARDWARE
-
- 1M RAM required. More is suggested.
- 2 floppy drives disk space. Hard drive preferred.
- Battery backed clock recommended, but not required.
-
- SOFTWARE
-
- AmigaDOS 1.3 or higher required.
- AmigaDOS 2.x and 3.x compatible.
-
-
- COPY PROTECTION
-
- None.
-
-
- MACHINE USED FOR TESTING
-
- Amiga 3000/16, 12MB Fast RAM, 2MB Chip RAM.
- AmigaDOS 3.0 beta (purchased through the Commodore developer program)
- Seiko CM1440 VGA monitor
-
-
- INSTALLATION
-
- The package uses Commodore's Installer program. The installation
- script can be run multiple times for any additions to be made. A separate
- installation script is available for floppy users which uses a custom
- compression system.
-
- Installation of a large package like DICE -- with all its utilities,
- AmigaDOS-dependent revisions of the Commodore include files and linker
- libraries, compiler support options, numerous utilities, library source
- code, and example programs -- deserves some extra attention to the
- procedure, especially for beginner programmers. Here are two examples.
-
- An AmigaDOS 1.3-based A500/A590 owner might want a minimal
- installation. This might consist of AmigaDOS 1.3 include files, linker
- libraries, the DICE compiler with small data model and registerized
- parameters support, the debugger, and library and example source code. This
- takes up 2,258,513 bytes.
-
- An experienced developer might want a rather full installation.
- This might consist of all the include files, libraries, support of multiple
- data models, source control and debug utilities, and on-line help. This
- takes up 11,415,299 bytes of hard disk space.
-
- I recommend reading through chapter 6 of the manual to gain some
- more familiarity with the DICE programming environment before installing it.
-
-
- BUILDING PROGRAMS WITH VMAKE
-
- One of the highlights of the commercial version of DICE over previous
- releases is the new VMake utility. It integrates the whole DICE programming
- environment with a new graphic user interface (GUI). VMake is a very
- powerful and useful utility. It offers the inexperienced user the benefits
- of a 'make' program without having to learn all the strange syntax that
- Makefiles require.
-
- To use VMake on already existing source files, you invoke it either
- from the CLI or by the Workbench icon, and select "New" from the Project
- menu. A standard ASL requester appears (under AmigaDOS 2.04 and above), and
- you select the directory where your source is, and type in a name for the
- project. A '.dice' extension is added to the name. Next, you select "Scan"
- from the Edit menu, and VMake scans the directory for file. Delete any of
- the unnecessary files from the listing, and save the project. Voila: you
- have just created a Makefile! You can then select the "Options" menu item
- in the Edit menu to customize the compiler options such as OS Target, which
- debug level you want, optional places to search for include files or linker
- libraries, small code model or large code model. These options may be
- saved. All the things which you would change with the various switches if
- you were compiling from the CLI are available through the graphic user
- interface.
-
- Now to compile and run your program, you press the "Make" button or
- use the Compile menu, and off DICE goes, compiling your project. You can
- then run your program by hitting the Run button or selecting the appropriate
- menu items. You can simulate running your program from Workbench, or feed
- CLI arguments to your program by way of the "CLI Arguments" string gadget. A
- menu option is available to run your program through the debugger as well.
- It's a smooth and easy-to-use environment.
-
- VMake is also a lot more. Instead of all those gadgets and menu
- items being hard coded into the program, VMake uses extensible configuration
- files. If you don't like a menu hotkey, just edit dcc:config/vmake.config
- to make the change. For example, I didn't like using Amiga-Y for the
- "Project New" subitem. My VMake is now a little more Style Guide compliant
- with Amiga-N in its place. While VMake normally opens on the Workbench
- screen it also supports 'jumping' from one public screen to another. I
- would have liked VMake to use the Amiga Style Guide command line keyword and
- icon tooltype "PUBSCREEN" so that I could have it open automatically on the
- particular screen I want. But jumping is better than nothing. Further
- customizing of the VMake environment is available through ARexx. VMake
- comes preconfigured fairly well.
-
-
- REVISION CONTROL AND EDITOR INTEGRATION
-
- One of the most useful features that VMake integrates into the
- programming environment is revision control via the "RCS" and "UpRev"
- utilities. RCS (Revision Control System) has been used for years on UNIX
- platforms, where developing large projects with multiple programmers can
- lead to problems. RCS provides a way of tracking multiple versions of a
- program or its pieces. It helps you to find newly created bugs in your
- programs by allowing you to compare various revisions of a file and look
- over the differences.
-
- VMake integrates RCS into its GUI, allowing you to concentrate on
- your code and not on the command line switches required to learn RCS. I
- always told myself that I was going to learn RCS some day, but now I don't
- really have to. :-) To "check in" a file under RCS/VMake, you just click on
- the filename in the VMake listview and select the RCS Menu "Check In"
- subitem. Fill in the "initial comment" prompt on the VMake console window,
- followed by a line with just a period. RCS then makes an "rcs" subdirectory
- in the current directory, and sets the current file protection to
- read-only. If you then want to change that file by popping up your editor,
- just double-click on the filename in the VMake listview and you are presented
- with a requester telling you that the file is read-only and do you want to
- check out the file from RCS? Select "Yes", edit the file, and then check it
- back in with RCS when you are done, this time entering comments about what
- changes you made. You can review the change history on demand.
-
- UpRev generates an Amiga User Interface Style Guide type of revision
- string that you can use in your programs. VMake has an Edit menu subitem
- for UpRev. When used the first time, it creates an include file
-
- PROJECTNAME_rev.h
-
- where "PROJECTNAME" is the name of your project. If you include this header
- file in your your program file which contains main(), and add a line like:
-
- const char my_version_string[]=VERSTAG;
-
- you automatically get an Amiga User Interface Style Guide compliant version
- string in your program, which you can easily update any time you've made
- changes to your program by simply choosing the edit menu subitem 'Update
- Revision' and recompiling the program. Together, RCS, UpRev, and VMake
- handle revision control very well.
-
- Now, on to integration with a text editor. I installed DICE with
- TurboText integration, so I cannot write about how it functions with other
- editors such as the included AME and DME editors. After you have created a
- VMake project, you can double-click on any of the files listed in the
- Project listview gadget and bring up your editor with that file. If the
- compiler finds an error when building a project, it invokes the text editor,
- loads the file containing the error, and places the cursor on the line where
- the error occurred. With TurboText, it displays the current error in the
- window title bar and then reactivates the Vmake console window. This causes
- some minor problems. First, the error message might be too long to fit in
- the title bar, and second, the title bar is cleared when the TurboText
- window is deactivated. So, I have to go back to TurboText's window and pick
- the DICE menu item "Current Error" to see what the error was. I think DICE
- should printing its error message on the VMake console window AND signal
- TurboText. Another minor problem occurs when your source files have multiple
- errors. As you are looking over the first one, DICE signals the editor to
- go onto the next one underneath you, or worse yet, opens another file window
- in front of the one you are currently reading, when you don't expect it.
- With all the configurability of both VMake and TurboText, I presume I will
- be able to change this to my liking when I have some more time.
-
-
- THE DICE DEBUGGER
-
- The DICE debugger "DD" is also new in the Commercial version of
- DICE. Unfortunately for this review, it is also one of the parts of the
- system that I haven't had much time with.
-
- A debugger is very useful for finding the more subtle bugs in your
- programs. I'll use an example from my real world experience to illustrate
- this. I had written a public screen program and used it for months before I
- realized it had an Enforcer hit bug. One day, apparently out of the blue, I
- got an Enforcer hit from my program which I had been using every day. A few
- days later, another one occurred. I had no idea what caused the problem:
- perhaps a new utility running in the background? A week or so later, when I
- wasn't particularly busy, I saw another Enforcer hit, but this time I
- noticed it had something to do with using the menus. I tried every
- menu item and couldn't reproduce the hit. I looked over my source code and
- didn't see anything obvious.
-
- I played some more with the menus and BINGO: I found a reproducible
- Enforcer hit caused by pulling the mouse past the bottom of the Project menu
- and letting go of the right mouse button. I looked over my source code
- again, and still didn't see anything obviously wrong according to my
- understanding of handling menus. I decided it was time to learn how to use
- a debugger (SAS/C's CodeProbe). By compiling the program with the
- appropriate debug options, and then running the program under control of the
- debugger, I was able to find that while I was trying to read certain data
- from the Intuition message generated by a menu event, I wasn't handling the
- case produced by 'MENUNULL' properly. I was comparing my data with a
- strange location in memory when the user selected a menu but not the
- subitems. In that case, the program was trying to read data which wasn't
- valid. This generated the Enforcer hit. I then added an additional check
- for the MENUNULL messages to my code before trying to read the Intuition
- message data, and the Enforcer hit disappeared. I don't know how long it
- would have taken to realize this was the problem without the help of a
- debugger.
-
- Now, on to DD. I recreated my MENUNULL bug as mentioned above, and
- DD was able to show me the same basic information that I got from the SAS/C
- debugger. DD has many options for displaying your code and system
- information using multiple windows. My only real complaint about DD is the
- lack of documentation and tutorials for beginners on how to use it. Only
- on-line documents are available. A full chapter in the manual, with screen
- shots and tutorial examples, would be a welcome addition. DD supports ARexx,
- and the on-line documentation says that the full source code to DD will be
- made available in the future for even more customizing options.
-
- Remember that if you find reproducible bugs in other people's
- programs, such as Enforcer hits, you should send a detailed report of how
- the to reproduce the bug, so the author can fix it and produce more reliable
- Amiga software. A simple message that "it gives Enforcer hits" is of little
- use when the author doesn't see it on his system by the way he uses the
- program. The details of dragging the mouse beyond the menu and releasing
- the button while not selecting anything made finding the programming error
- possible.
-
-
- SOURCE CODE COMPATIBILITY TESTS
-
- I tested DICE by compiling a bunch of Amiga and UNIX source code,
- including:
-
- Amiga Source Code:
- RKM Example source code published by CATS on Fred Fish disks 741-742.
- AmigaMail Jan/Feb 1990 'modular event processing' by David N. Junod.
- ACE Graphics example code published by the Amiga C Club (registered).
- An unreleased version of my own public screen program.
- Dave Haynie's articles on C programming in May/June 1994 AmigaWorld.
- BOOPSI & MUI example code pulled off the Aminet FTP sites.
-
- UNIX Source Code:
- Gplot -- CGM to Postscript conversion program from PSC.
- Bwbasic 1.11 -- a minimal ANSI BASIC language interpreter.
- Tcl 7.3 interpreter.
-
- Since this is an Amiga compiler, lets look at the results of that
- first. Practically all the Amiga examples from the RKMs, AmigaMail, ACE,
- and my public screen program compiled and ran fine after making minor
- changes to the code, which gave exit code #20 (failed to compile):
-
- Error 83: Too many initializers -- usually caused by structure
- assignments with an extra comma in them like:
- struct Border buttonBorder =
- {
- -1,-1,1,0,JAM1,5,buttonBorderData,NULL,
- }; ^^^ extraneous comma
-
- Error 68: Expected semicolon -- usually caused by non ANSI compliant
- compiler specific keywords like:
-
- UWORD chip bottom_sprite_data[36]=
- ^^^^ should be __chip (with 2 underscores)
-
- Dave Haynie's example programs worked fine when I added the
- following after the #include <math.h> statement.
-
- #ifdef _DCC /* Compiling with DICE 3.0 */
- #define PI M_PI /* DICE uses M_PI in <math.h> */
- #endif /* End DICE 3.0 specifics */
-
- The BOOPSI example programs presented more difficulty as some of them
- used assembly files as well, and DAS (the assembler provided with DICE)
- isn't a general-use assembler. Try a68k or PhxAss (both freely available on
- Aminet) or a commercial assembler.
-
- Conversion from Manx code was fairly easy as you just remove the
- "geta4()" function on a subroutine and add the "__geta4" keyword to its
- definition, remembering to compile the subroutine with stack checking off.
- The commercial version of DICE seemed to swallow the SAS/C specific __saveds
- and __asm keywords, when I expected it to give an error.
-
- The official MUI demo programs compiled with minimal problems. I did
- have a problem with compiling a third-party, MUI-based image class --
- MyImageGClass.c. When I tried, DICE gave the error code #116 -- Subroutine
- to complex to generate code for. The example compiles fine with SAS/C 6.51,
- and I didn't feel like learning MUI programming to try to work around this
- error code/bug just for this review.
-
- Now for UNIX compatibility. Give the time allotment for completing
- this review, I wasn't able to compile any of my UNIX oriented examples with
- DICE, even though I had already adapted them to SAS/C 6.51. The problems I
- encountered were:
-
- Gplot: Somewhere in the source, the sscanf() function was
- used with the "%e,E,f,g,G" format options, and these are not
- currently supported by DICE. The resulting program gives a
- runtime error: 'Error: *scanf:%e,E,f,g,G, only 'l' double
- format currently supported'. With some more time, I could
- have located the pieces of code and perhaps rewritten the
- routines accordingly.
-
- Bwbasic: The DICE link libraries were missing the functions
- fmod() and putenv(), so the final program would not link.
- With some more time, I could have written my own equivalents
- of these functions.
-
- Tcl: The source code was written with UNIX or POSIX based
- systems in mind, to the point that it expects UNIX script
- files to generate an appropriate Makefile for the package by
- looking in the various systems include files, etc. I got
- most of the library to compile using the same work-arounds
- as I used for SAS/C, but when it came time to link the
- tcltest program, I was missing the math functions: fmod(),
- cosh(), sinh(), and tanh(). The hypot() function was also
- missing in SAS/C 6.51.
-
-
- DOCUMENTATION
-
- DICE 3.0 comes with a 450-page printed manual and on-line
- documentation. The 450-page manual begins with an introduction of the
- product and its installation. It then gives an overview of the C language
- which should be quite helpful to those who are fairly new to C, and give a
- quick refresher to those who haven't programmed for a while. This is
- followed by a section geared towards BASIC programmers who are new to the C
- language. The next section is on using the VMake utility. It gives a good
- overview of how to use the program at the beginner level, and follows
- through with how to customize the VMake environment with its configuration
- files and ARexx for those with more experience, or if you have a special
- need. The next chapter gives an overview of using the CLI tools such as the
- front-end program dcc, and gives some compatibility hints for those folks
- switching over from Manx or Lattice compilers, along with specific
- information regarding the DICE/Amiga/ARexx programming environment. The
- next seven chapters offer reference material for the commands, assembler,
- DME and AME text editors, On-line Help, Library functions, and Error Codes.
- The last chapter is a quick help guide focusing on common C programming
- errors and common Amiga programming mistakes. The section for describing
- the debugger only points you to the on-line document.
-
- DICE 3.0 also has documentation on-line and available through the
- DiceHelp program. If you have Commodore's AutoDocs on disk, you can add
- them to the DiceHelp database during the program installation. DiceHelp is
- an AmigaDOS 1.3 compatible system that can run from the Workbench or CLI.
- When started from the Workbench, a simple requester pops up that asks you
- for a search string. After you type in a search string, it pops-up a window
- that lets you page through the document. I had problems using DiceHelp
- through the CLI, as there was no paging, and long documents just scrolled
- off the window too fast to view. While I like the fact that you can use the
- standard console drag to copy pieces of the documentation to the Amiga
- clipboard, I'd like a more friendly method for browsing through the help
- files such as a listview of topics, or an array of buttons like AmigaGuide,
- as well as the string gadget. DiceHelp has ARexx support and can be
- integrated with your text editor by writing its output files to the Amiga
- clipboard, a temporary file in t:, or to stdout. I haven't taken the time
- to investigate these options yet....
-
- LIKES
-
- I really like VMake's integration with RCS and UpRev. I like the
- overall configurability of VMake. I like the overall speed of the DICE
- compiler, even though I haven't optimized my setup. It's quick! I like all
- the Amiga specific support for keywords like __chip and registerized
- function arguments. I like the debugger, even though I haven't got into it
- very much yet. It appears to be quite functional.
-
-
- DISLIKES AND SUGGESTIONS
-
- I dislike the current handling of errors affecting the editor while
- I'm looking over the first one. I think a facility like SAS/C's message
- browser would be more functional for me. I think there could be better
- documentation for beginners regarding installation, going step by step. I
- think printed documentation for the debugger would be helpful, including
- screen shots and some tutorial example programs. I dislike the missing
- functions in the linker libraries. I think they should add the functions
- that SAS/C has, and then add some more. Perhaps a richer UNIX-compatible
- function linker library should be developed to ease porting code to
- AmigaDOS. I'd like a better front-end and user index to the DiceHelp
- files. Finally I'd like a pretty box to hold the manual and disks while
- they're on the shelf.
-
-
- COMPARISON TO OTHER SIMILAR PRODUCTS
-
- I've been using SAS/C 6.51, which is an excellent product, and I
- have used older versions of GCC up to version 2.3.3. If we ignore the C++
- compatibility issue, since DICE 3.0 does not compile C++ code, there are
- several areas that deserve comparison. Here's how I think they compare,
- on a scale of "A+" (best) to "F" (worst).
-
- Integration of the programmers environment:
- DICE 3.0 A-
- SAS/C 6.51 B+
- GCC 2.3.3 C
-
- Resource requirements usage:
- DICE 3.0 A
- SAS/C 6.51 A
- GCC 2.3.3 D ( I'd suggest 8M Fast RAM minimum )
-
- Speed of compiler to create programs:
- DICE 3.0 A
- SAS/C 6.51 A
- GCC 2.3.3 C
-
- Speed of executables created by compiler:
- DICE 3.0 B
- SAS/C 6.51 A ( CPU/FPU specific support and optimizations )
- GCC 2.3.3 A ( CPU/FPU specific support and optimizations )
-
- Compatibility with available Amiga source codes:
- DICE 3.0 B+
- SAS/C 6.51 A- ( Lattice/Manx related tools and docs help here )
- GCC 2.3.3 C- ( no __chip , no geta4()? [not sure] )
-
- Compatibility with available UNIX source codes:
- DICE 3.0 C+
- SAS/C 6.51 B+
- GCC 2.3.3 A+
-
- Understandability of compiler error and warning messages:
- DICE 3.0 B
- SAS/C 6.51 A+
- GCC 2.3.3 B
-
- Not one of the compilers is the best at everything. I think I'll integrate
- my SAS/C environment with DICE/VMake and maybe later when I buy a CD-ROM
- drive, I'll add GCC off the most current 'Fresh Fish' CD to my collection
- of development tools.
-
-
- BUGS
-
- The "subroutine too complex" error noted in the SOURCE CODE
- COMPATIBILITY TESTS section, above.
-
-
- VENDOR SUPPORT
-
- Obvious Implementations Corp. responded to a non-technical problem
- by email in a couple of days. I haven't had further need to contact them.
- They have been responding promptly to Usenet messages posted about DICE.
-
-
- WARRANTY
-
- None.
-
-
- CONCLUSIONS
-
- DICE 3.0 is definitely a worthwhile upgrade from the shareware or
- freeware versions of DICE. DICE 3.0 also makes a nice addition for folks
- with either the SAS/C 6.51 or GCC compilers. If you are running an older
- compiler such as the Lattice C, Manx C, or SAS/C 5.1, you should definitely
- consider upgrading to DICE 3.0 or SAS/C 6.51. Amiga compilers have come a
- long way in the last couple of years.
-
-
- COPYRIGHT NOTICE
-
- This review is released to the public domain.
- Ed Berger, eb15@andrew.cmu.edu
-
- ---
-
- Daniel Barrett, Moderator, comp.sys.amiga.reviews
- Send reviews to: amiga-reviews-submissions@math.uh.edu
- Request information: amiga-reviews-requests@math.uh.edu
- Moderator mail: amiga-reviews@math.uh.edu
- Anonymous ftp site: math.uh.edu, in /pub/Amiga/comp.sys.amiga.reviews
-