home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / reviews / programmer.lha / programmer / DICE3.0_2 < prev    next >
Encoding:
Internet Message Format  |  1994-06-02  |  22.9 KB

  1. Path: news.uh.edu!barrett
  2. From: eb15@andrew.cmu.edu (Ed Berger)
  3. Newsgroups: comp.sys.amiga.reviews
  4. Subject: REVIEW: DICE Version 3.0
  5. Followup-To: comp.sys.amiga.programmer
  6. Date: 2 Jun 1994 17:44:40 GMT
  7. Organization: The Amiga Online Review Column - ed. Daniel Barrett
  8. Lines: 503
  9. Sender: amiga-reviews@math.uh.edu (comp.sys.amiga.reviews moderator)
  10. Distribution: world
  11. Message-ID: <2sl5q8$hip@masala.cc.uh.edu>
  12. Reply-To: eb15@andrew.cmu.edu (Ed Berger)
  13. NNTP-Posting-Host: karazm.math.uh.edu
  14. Keywords: programming, C, compiler, commercial
  15. Originator: barrett@karazm.math.uh.edu
  16.  
  17.  
  18. PRODUCT NAME
  19.  
  20.     DICE Version 3.0
  21.  
  22.  
  23. BRIEF DESCRIPTION
  24.  
  25.     DICE 3.0 is the commercial version of the popular shareware DICE C
  26. language compiler created by Matt Dillon.  The package contains a 450-page
  27. manual and 5 disks containing two different text editors, a C compiler,
  28. linker, debugging tools, source code management tools, source to the linker
  29. libraries, example programs and a 1.3 AmigaDOS compatible on-line help
  30. system.
  31.  
  32.  
  33. AUTHOR/COMPANY INFORMATION
  34.  
  35.     Name:        Obvious Implementations Corporation
  36.     Address:    P.O Box 4487
  37.             Cary, NC  27519-4487
  38.             USA
  39.  
  40.     Telephone:    (800) 761-2042
  41.             (919) 859-7407
  42.  
  43.     E-mail:        info@oic.com
  44.  
  45.  
  46. LIST PRICE
  47.  
  48.     Regular                $150  US dollars
  49.     Student (any school)        $ 95  US dollars
  50.     Owner of registered DICE    $ 75  US dollars
  51.  
  52.     I upgraded from the registered version.
  53.  
  54.  
  55. SPECIAL HARDWARE AND SOFTWARE REQUIREMENTS
  56.  
  57.     HARDWARE
  58.  
  59.         1M RAM required.  More is suggested.
  60.         2 floppy drives disk space.  Hard drive preferred.
  61.         Battery backed clock recommended, but not required.
  62.  
  63.     SOFTWARE
  64.  
  65.         AmigaDOS 1.3 or higher required.
  66.         AmigaDOS 2.x and 3.x compatible.
  67.  
  68.  
  69. COPY PROTECTION
  70.  
  71.     None.
  72.  
  73.  
  74. MACHINE USED FOR TESTING
  75.  
  76.     Amiga 3000/16, 12MB Fast RAM, 2MB Chip RAM.
  77.     AmigaDOS 3.0 beta (purchased through the Commodore developer program)
  78.     Seiko CM1440 VGA monitor
  79.  
  80.  
  81. INSTALLATION
  82.  
  83.     The package uses Commodore's Installer program.  The installation
  84. script can be run multiple times for any additions to be made.  A separate
  85. installation script is available for floppy users which uses a custom
  86. compression system.
  87.  
  88.     Installation of a large package like DICE -- with all its utilities,
  89. AmigaDOS-dependent revisions of the Commodore include files and linker
  90. libraries, compiler support options, numerous utilities, library source
  91. code, and example programs -- deserves some extra attention to the
  92. procedure, especially for beginner programmers.  Here are two examples.
  93.  
  94.     An AmigaDOS 1.3-based A500/A590 owner might want a minimal
  95. installation.  This might consist of AmigaDOS 1.3 include files, linker
  96. libraries, the DICE compiler with small data model and registerized
  97. parameters support, the debugger, and library and example source code.  This
  98. takes up 2,258,513 bytes.
  99.  
  100.     An experienced developer might want a rather full installation.
  101. This might consist of all the include files, libraries, support of multiple
  102. data models, source control and debug utilities, and on-line help.  This
  103. takes up 11,415,299 bytes of hard disk space.
  104.  
  105.     I recommend reading through chapter 6 of the manual to gain some
  106. more familiarity with the DICE programming environment before installing it.
  107.  
  108.  
  109. BUILDING PROGRAMS WITH VMAKE
  110.  
  111.     One of the highlights of the commercial version of DICE over previous
  112. releases is the new VMake utility.  It integrates the whole DICE programming
  113. environment with a new graphic user interface (GUI).  VMake is a very
  114. powerful and useful utility.  It offers the inexperienced user the benefits
  115. of a 'make' program without having to learn all the strange syntax that
  116. Makefiles require.
  117.  
  118.     To use VMake on already existing source files, you invoke it either
  119. from the CLI or by the Workbench icon, and select "New" from the Project
  120. menu.  A standard ASL requester appears (under AmigaDOS 2.04 and above), and
  121. you select the directory where your source is, and type in a name for the
  122. project.  A '.dice' extension is added to the name.  Next, you select "Scan"
  123. from the Edit menu, and VMake scans the directory for file.  Delete any of
  124. the unnecessary files from the listing, and save the project.  Voila:  you
  125. have just created a Makefile!  You can then select the "Options" menu item
  126. in the Edit menu to customize the compiler options such as OS Target, which
  127. debug level you want, optional places to search for include files or linker
  128. libraries, small code model or large code model.  These options may be
  129. saved.  All the things which you would change with the various switches if
  130. you were compiling from the CLI are available through the graphic user
  131. interface.
  132.  
  133.     Now to compile and run your program, you press the "Make" button or
  134. use the Compile menu, and off DICE goes, compiling your project.  You can
  135. then run your program by hitting the Run button or selecting the appropriate
  136. menu items.  You can simulate running your program from Workbench, or feed
  137. CLI arguments to your program by way of the "CLI Arguments" string gadget.  A
  138. menu option is available to run your program through the debugger as well.
  139. It's a smooth and easy-to-use environment.
  140.  
  141.     VMake is also a lot more.  Instead of all those gadgets and menu
  142. items being hard coded into the program, VMake uses extensible configuration
  143. files.  If you don't like a menu hotkey, just edit dcc:config/vmake.config
  144. to make the change.  For example, I didn't like using Amiga-Y for the
  145. "Project New" subitem.  My VMake is now a little more Style Guide compliant
  146. with Amiga-N in its place.  While VMake normally opens on the Workbench
  147. screen it also supports 'jumping' from one public screen to another.  I
  148. would have liked VMake to use the Amiga Style Guide command line keyword and
  149. icon tooltype "PUBSCREEN" so that I could have it open automatically on the
  150. particular screen I want.  But jumping is better than nothing.  Further
  151. customizing of the VMake environment is available through ARexx.  VMake
  152. comes preconfigured fairly well.
  153.  
  154.  
  155. REVISION CONTROL AND EDITOR INTEGRATION
  156.  
  157.     One of the most useful features that VMake integrates into the
  158. programming environment is revision control via the "RCS" and "UpRev"
  159. utilities.  RCS (Revision Control System) has been used for years on UNIX
  160. platforms, where developing large projects with multiple programmers can
  161. lead to problems.  RCS provides a way of tracking multiple versions of a
  162. program or its pieces.  It helps you to find newly created bugs in your
  163. programs by allowing you to compare various revisions of a file and look
  164. over the differences.
  165.  
  166.     VMake integrates RCS into its GUI, allowing you to concentrate on
  167. your code and not on the command line switches required to learn RCS.  I
  168. always told myself that I was going to learn RCS some day, but now I don't
  169. really have to. :-)  To "check in" a file under RCS/VMake, you just click on
  170. the filename in the VMake listview and select the RCS Menu "Check In"
  171. subitem.  Fill in the "initial comment" prompt on the VMake console window,
  172. followed by a line with just a period.  RCS then makes an "rcs" subdirectory
  173. in the current directory, and sets the current file protection to
  174. read-only.  If you then want to change that file by popping up your editor,
  175. just double-click on the filename in the VMake listview and you are presented
  176. with a requester telling you that the file is read-only and do you want to
  177. check out the file from RCS?  Select "Yes", edit the file, and then check it
  178. back in with RCS when you are done, this time entering comments about what
  179. changes you made.  You can review the change history on demand.
  180.  
  181.     UpRev generates an Amiga User Interface Style Guide type of revision
  182. string that you can use in your programs.  VMake has an Edit menu subitem
  183. for UpRev.  When used the first time, it creates an include file
  184.  
  185.         PROJECTNAME_rev.h
  186.  
  187. where "PROJECTNAME" is the name of your project.  If you include this header
  188. file in your your program file which contains main(), and add a line like:
  189.  
  190.     const char my_version_string[]=VERSTAG;
  191.  
  192. you automatically get an Amiga User Interface Style Guide compliant version
  193. string in your program, which you can easily update any time you've made
  194. changes to your program by simply choosing the edit menu subitem 'Update
  195. Revision' and recompiling the program.  Together, RCS, UpRev, and VMake
  196. handle revision control very well.
  197.  
  198.     Now, on to integration with a text editor.  I installed DICE with
  199. TurboText integration, so I cannot write about how it functions with other
  200. editors such as the included AME and DME editors.  After you have created a
  201. VMake project, you can double-click on any of the files listed in the
  202. Project listview gadget and bring up your editor with that file.  If the
  203. compiler finds an error when building a project, it invokes the text editor,
  204. loads the file containing the error, and places the cursor on the line where
  205. the error occurred.  With TurboText, it displays the current error in the
  206. window title bar and then reactivates the Vmake console window.  This causes
  207. some minor problems.  First, the error message might be too long to fit in
  208. the title bar, and second, the title bar is cleared when the TurboText
  209. window is deactivated.  So, I have to go back to TurboText's window and pick
  210. the DICE menu item "Current Error" to see what the error was.  I think DICE
  211. should printing its error message on the VMake console window AND signal
  212. TurboText.  Another minor problem occurs when your source files have multiple
  213. errors.  As you are looking over the first one, DICE signals the editor to
  214. go onto the next one underneath you, or worse yet, opens another file window
  215. in front of the one you are currently reading, when you don't expect it.
  216. With all the configurability of both VMake and TurboText, I presume I will
  217. be able to change this to my liking when I have some more time.
  218.  
  219.  
  220. THE DICE DEBUGGER
  221.  
  222.     The DICE debugger "DD" is also new in the Commercial version of
  223. DICE.  Unfortunately for this review, it is also one of the parts of the
  224. system that I haven't had much time with.
  225.  
  226.     A debugger is very useful for finding the more subtle bugs in your
  227. programs.  I'll use an example from my real world experience to illustrate
  228. this.  I had written a public screen program and used it for months before I
  229. realized it had an Enforcer hit bug.  One day, apparently out of the blue, I
  230. got an Enforcer hit from my program which I had been using every day.  A few
  231. days later, another one occurred.  I had no idea what caused the problem:
  232. perhaps a new utility running in the background?  A week or so later, when I
  233. wasn't particularly busy, I saw another Enforcer hit, but this time I
  234. noticed it had something to do with using the menus.  I tried every
  235. menu item and couldn't reproduce the hit.  I looked over my source code and
  236. didn't see anything obvious.
  237.  
  238.     I played some more with the menus and BINGO:  I found a reproducible
  239. Enforcer hit caused by pulling the mouse past the bottom of the Project menu
  240. and letting go of the right mouse button.  I looked over my source code
  241. again, and still didn't see anything obviously wrong according to my
  242. understanding of handling menus.  I decided it was time to learn how to use
  243. a debugger (SAS/C's CodeProbe).  By compiling the program with the
  244. appropriate debug options, and then running the program under control of the
  245. debugger, I was able to find that while I was trying to read certain data
  246. from the Intuition message generated by a menu event, I wasn't handling the
  247. case produced by 'MENUNULL' properly.  I was comparing my data with a
  248. strange location in memory when the user selected a menu but not the
  249. subitems.  In that case, the program was trying to read data which wasn't
  250. valid.  This generated the Enforcer hit.  I then added an additional check
  251. for the MENUNULL messages to my code before trying to read the Intuition
  252. message data, and the Enforcer hit disappeared.  I don't know how long it
  253. would have taken to realize this was the problem without the help of a
  254. debugger.
  255.  
  256.     Now, on to DD.  I recreated my MENUNULL bug as mentioned above, and
  257. DD was able to show me the same basic information that I got from the SAS/C
  258. debugger.  DD has many options for displaying your code and system
  259. information using multiple windows.  My only real complaint about DD is the
  260. lack of documentation and tutorials for beginners on how to use it.  Only
  261. on-line documents are available.  A full chapter in the manual, with screen
  262. shots and tutorial examples, would be a welcome addition.  DD supports ARexx,
  263. and the on-line documentation says that the full source code to DD will be
  264. made available in the future for even more customizing options.
  265.  
  266.     Remember that if you find reproducible bugs in other people's
  267. programs, such as Enforcer hits, you should send a detailed report of how
  268. the to reproduce the bug, so the author can fix it and produce more reliable
  269. Amiga software.  A simple message that "it gives Enforcer hits" is of little
  270. use when the author doesn't see it on his system by the way he uses the
  271. program.  The details of dragging the mouse beyond the menu and releasing
  272. the button while not selecting anything made finding the programming error
  273. possible.
  274.  
  275.  
  276. SOURCE CODE COMPATIBILITY TESTS
  277.  
  278.     I tested DICE by compiling a bunch of Amiga and UNIX source code,
  279. including:
  280.  
  281. Amiga Source Code:
  282.     RKM Example source code published by CATS on Fred Fish disks 741-742.
  283.     AmigaMail Jan/Feb 1990 'modular event processing' by David N. Junod.
  284.     ACE Graphics example code published by the Amiga C Club (registered).
  285.     An unreleased version of my own public screen program.
  286.     Dave Haynie's articles on C programming in May/June 1994 AmigaWorld.
  287.     BOOPSI & MUI example code pulled off the Aminet FTP sites.
  288.  
  289. UNIX Source Code:
  290.     Gplot -- CGM to Postscript conversion program from PSC.
  291.     Bwbasic 1.11 -- a minimal ANSI BASIC language interpreter.
  292.     Tcl 7.3 interpreter.
  293.  
  294.     Since this is an Amiga compiler, lets look at the results of that
  295. first.  Practically all the Amiga examples from the RKMs, AmigaMail, ACE,
  296. and my public screen program compiled and ran fine after making minor
  297. changes to the code, which gave exit code #20 (failed to compile):
  298.  
  299.     Error 83: Too many initializers -- usually caused by structure
  300.     assignments with an extra comma in them like:
  301.         struct Border buttonBorder =
  302.         {
  303.         -1,-1,1,0,JAM1,5,buttonBorderData,NULL,
  304.         };                                   ^^^ extraneous comma
  305.  
  306.     Error 68: Expected semicolon -- usually caused by non ANSI compliant
  307.     compiler specific keywords like:
  308.  
  309.         UWORD chip bottom_sprite_data[36]=
  310.               ^^^^ should be __chip (with 2 underscores)
  311.  
  312.     Dave Haynie's example programs worked fine when I added the
  313. following after the #include <math.h> statement.
  314.  
  315. #ifdef _DCC            /* Compiling with DICE 3.0    */
  316. #define PI    M_PI        /* DICE uses M_PI in <math.h> */
  317. #endif                /* End DICE 3.0 specifics     */
  318.  
  319.     The BOOPSI example programs presented more difficulty as some of them
  320. used assembly files as well, and DAS (the assembler provided with DICE)
  321. isn't a general-use assembler.  Try a68k or PhxAss (both freely available on
  322. Aminet) or a commercial assembler.
  323.  
  324.     Conversion from Manx code was fairly easy as you just remove the
  325. "geta4()" function on a subroutine and add the "__geta4" keyword to its
  326. definition, remembering to compile the subroutine with stack checking off.
  327. The commercial version of DICE seemed to swallow the SAS/C specific __saveds
  328. and __asm keywords, when I expected it to give an error.
  329.  
  330.     The official MUI demo programs compiled with minimal problems.  I did
  331. have a problem with compiling a third-party, MUI-based image class --
  332. MyImageGClass.c.  When I tried, DICE gave the error code #116 -- Subroutine
  333. to complex to generate code for.  The example compiles fine with SAS/C 6.51,
  334. and I didn't feel like learning MUI programming to try to work around this
  335. error code/bug just for this review.
  336.  
  337.     Now for UNIX compatibility.  Give the time allotment for completing
  338. this review, I wasn't able to compile any of my UNIX oriented examples with
  339. DICE, even though I had already adapted them to SAS/C 6.51.  The problems I
  340. encountered were:
  341.  
  342.     Gplot:        Somewhere in the source, the sscanf() function was
  343.         used with the "%e,E,f,g,G" format options, and these are not
  344.         currently supported by DICE.  The resulting program gives a
  345.         runtime error:  'Error:  *scanf:%e,E,f,g,G, only 'l' double
  346.         format currently supported'.  With some more time, I could
  347.         have located the pieces of code and perhaps rewritten the
  348.         routines accordingly.
  349.  
  350.     Bwbasic:    The DICE link libraries were missing the functions
  351.         fmod() and putenv(), so the final program would not link.
  352.         With some more time, I could have written my own equivalents
  353.         of these functions.
  354.  
  355.     Tcl:        The source code was written with UNIX or POSIX based
  356.         systems in mind, to the point that it expects UNIX script
  357.         files to generate an appropriate Makefile for the package by
  358.         looking in the various systems include files, etc.  I got
  359.         most of the library to compile using the same work-arounds
  360.         as I used for SAS/C, but when it came time to link the
  361.         tcltest program, I was missing the math functions: fmod(),
  362.         cosh(), sinh(), and tanh(). The hypot() function was also
  363.         missing in SAS/C 6.51.
  364.  
  365.  
  366. DOCUMENTATION
  367.  
  368.     DICE 3.0 comes with a 450-page printed manual and on-line
  369. documentation.  The 450-page manual begins with an introduction of the
  370. product and its installation.  It then gives an overview of the C language
  371. which should be quite helpful to those who are fairly new to C, and give a
  372. quick refresher to those who haven't programmed for a while.  This is
  373. followed by a section geared towards BASIC programmers who are new to the C
  374. language.  The next section is on using the VMake utility.  It gives a good
  375. overview of how to use the program at the beginner level, and follows
  376. through with how to customize the VMake environment with its configuration
  377. files and ARexx for those with more experience, or if you have a special
  378. need.  The next chapter gives an overview of using the CLI tools such as the
  379. front-end program dcc, and gives some compatibility hints for those folks
  380. switching over from Manx or Lattice compilers, along with specific
  381. information regarding the DICE/Amiga/ARexx programming environment.  The
  382. next seven chapters offer reference material for the commands, assembler,
  383. DME and AME text editors, On-line Help, Library functions, and Error Codes.
  384. The last chapter is a quick help guide focusing on common C programming
  385. errors and common Amiga programming mistakes.  The section for describing
  386. the debugger only points you to the on-line document.
  387.  
  388.     DICE 3.0 also has documentation on-line and available through the
  389. DiceHelp program.  If you have Commodore's AutoDocs on disk, you can add
  390. them to the DiceHelp database during the program installation.  DiceHelp is
  391. an AmigaDOS 1.3 compatible system that can run from the Workbench or CLI.
  392. When started from the Workbench, a simple requester pops up that asks you
  393. for a search string.  After you type in a search string, it pops-up a window
  394. that lets you page through the document.  I had problems using DiceHelp
  395. through the CLI, as there was no paging, and long documents just scrolled
  396. off the window too fast to view.  While I like the fact that you can use the
  397. standard console drag to copy pieces of the documentation to the Amiga
  398. clipboard, I'd like a more friendly method for browsing through the help
  399. files such as a listview of topics, or an array of buttons like AmigaGuide,
  400. as well as the string gadget.  DiceHelp has ARexx support and can be
  401. integrated with your text editor by writing its output files to the Amiga
  402. clipboard, a temporary file in t:, or to stdout.  I haven't taken the time
  403. to investigate these options yet....
  404.  
  405. LIKES
  406.  
  407.     I really like VMake's integration with RCS and UpRev.  I like the
  408. overall configurability of VMake.  I like the overall speed of the DICE
  409. compiler, even though I haven't optimized my setup.  It's quick!  I like all
  410. the Amiga specific support for keywords like __chip and registerized
  411. function arguments.  I like the debugger, even though I haven't got into it
  412. very much yet.  It appears to be quite functional.
  413.  
  414.  
  415. DISLIKES AND SUGGESTIONS
  416.  
  417.     I dislike the current handling of errors affecting the editor while
  418. I'm looking over the first one.  I think a facility like SAS/C's message
  419. browser would be more functional for me.  I think there could be better
  420. documentation for beginners regarding installation, going step by step.  I
  421. think printed documentation for the debugger would be helpful, including
  422. screen shots and some tutorial example programs.  I dislike the missing
  423. functions in the linker libraries.  I think they should add the functions
  424. that SAS/C has, and then add some more.  Perhaps a richer UNIX-compatible
  425. function linker library should be developed to ease porting code to
  426. AmigaDOS.  I'd like a better front-end and user index to the DiceHelp
  427. files.  Finally I'd like a pretty box to hold the manual and disks while
  428. they're on the shelf.
  429.  
  430.  
  431. COMPARISON TO OTHER SIMILAR PRODUCTS
  432.  
  433.     I've been using SAS/C 6.51, which is an excellent product, and I
  434. have used older versions of GCC up to version 2.3.3.  If we ignore the C++
  435. compatibility issue, since DICE 3.0 does not compile C++ code, there are
  436. several areas that deserve comparison.  Here's how I think they compare,
  437. on a scale of "A+" (best) to "F" (worst).
  438.  
  439. Integration of the programmers environment:
  440.     DICE 3.0    A-
  441.     SAS/C 6.51    B+
  442.     GCC 2.3.3    C
  443.  
  444. Resource requirements usage:
  445.     DICE 3.0    A
  446.     SAS/C 6.51    A
  447.     GCC 2.3.3    D ( I'd suggest 8M Fast RAM minimum )
  448.  
  449. Speed of compiler to create programs:
  450.     DICE 3.0    A
  451.     SAS/C 6.51    A
  452.     GCC 2.3.3    C
  453.  
  454. Speed of executables created by compiler:
  455.     DICE 3.0    B
  456.     SAS/C 6.51    A ( CPU/FPU specific support and optimizations )
  457.     GCC 2.3.3    A ( CPU/FPU specific support and optimizations )
  458.  
  459. Compatibility with available Amiga source codes:
  460.     DICE 3.0    B+
  461.     SAS/C 6.51    A- ( Lattice/Manx related tools and docs help here )
  462.     GCC 2.3.3    C- ( no __chip , no geta4()? [not sure] )
  463.  
  464. Compatibility with available UNIX source codes:
  465.     DICE 3.0    C+
  466.     SAS/C 6.51    B+
  467.     GCC 2.3.3    A+
  468.  
  469. Understandability of compiler error and warning messages:
  470.     DICE 3.0    B
  471.     SAS/C 6.51    A+
  472.     GCC 2.3.3    B
  473.  
  474. Not one of the compilers is the best at everything.  I think I'll integrate
  475. my SAS/C environment with DICE/VMake and maybe later when I buy a CD-ROM
  476. drive, I'll add GCC off the most current 'Fresh Fish' CD to my collection
  477. of development tools.
  478.  
  479.  
  480. BUGS
  481.  
  482.     The "subroutine too complex" error noted in the SOURCE CODE
  483. COMPATIBILITY TESTS section, above.
  484.  
  485.  
  486. VENDOR SUPPORT
  487.  
  488.     Obvious Implementations Corp. responded to a non-technical problem
  489. by email in a couple of days.  I haven't had further need to contact them.
  490. They have been responding promptly to Usenet messages posted about DICE.
  491.  
  492.  
  493. WARRANTY
  494.  
  495.     None.
  496.  
  497.  
  498. CONCLUSIONS
  499.  
  500.     DICE 3.0 is definitely a worthwhile upgrade from the shareware or
  501. freeware versions of DICE.  DICE 3.0 also makes a nice addition for folks
  502. with either the SAS/C 6.51 or GCC compilers.  If you are running an older
  503. compiler such as the Lattice C, Manx C, or SAS/C 5.1, you should definitely
  504. consider upgrading to DICE 3.0 or SAS/C 6.51.  Amiga compilers have come a
  505. long way in the last couple of years.
  506.  
  507.  
  508. COPYRIGHT NOTICE
  509.  
  510.     This review is released to the public domain.
  511.     Ed Berger, eb15@andrew.cmu.edu
  512.  
  513. ---
  514.  
  515.    Daniel Barrett, Moderator, comp.sys.amiga.reviews
  516.    Send reviews to:    amiga-reviews-submissions@math.uh.edu
  517.    Request information:    amiga-reviews-requests@math.uh.edu
  518.    Moderator mail:    amiga-reviews@math.uh.edu
  519.    Anonymous ftp site:  math.uh.edu, in /pub/Amiga/comp.sys.amiga.reviews
  520.