home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / archive / emx / doc / emxst35.doc < prev    next >
Encoding:
Text File  |  1993-04-05  |  27.0 KB  |  622 lines

  1. A FREE GNU SOFTWARE-DEVELOPMENT SYSTEM FOR OS/2 V2.0
  2.  
  3. by Brooke P. Anderson
  4.  
  5. This is version 3.5 of this document, last modified on 4/5/93.
  6.  
  7. Brooke Anderson
  8. 1155 E. Del Mar #312
  9. Pasadena, CA  91106
  10. USA
  11. Phone:  (818) 577-7555
  12. GEnie:  BROOKE
  13. Internet:  brooke@hope.caltech.edu
  14.  
  15. TABLE OF CONTENTS
  16.  
  17. 1.0 Introduction
  18. 2.0 How to get it
  19. 3.0 How to install it
  20.      3.1 Unz50x32.exe
  21.      3.2 Whlinf8f.zip
  22.      3.3 Gnumk362.zip
  23.      3.4 Gnudev.zip, emxdev.zip, gppdev.zip, and objcdev.zip
  24.      3.5 The final steps
  25. 4.0 How to use it
  26.      4.1 Using info
  27.      4.2 Using the compiler
  28.      4.3 Using the debugger
  29.      4.4 Using make
  30.      4.5 Using the assembler
  31. 5.0 Where to get more information
  32. 6.0 Conclusions
  33.  
  34. Appendix 1:  Optional packages
  35. Appendix 2:  Sources of distribution
  36. Appendix 3:  Distributing this document
  37. Appendix 4:  Dhrystone and whetstone performance
  38.  
  39. 1.0 INTRODUCTION
  40.  
  41. This document describes a free GNU software-development system
  42. for OS/2 v2.0.  It tells you how to acquire all of the necessary
  43. software, how to install it, how to start using it, and where to
  44. look for more information.
  45.  
  46. The GNU software-development system includes a C and C++
  47. compiler, a debugger, an assembler, a make utility (for
  48. automating the compilation of programs made of many source
  49. files), and a hypertext reader (for reading the documentation). 
  50. The compiler generates full 32-bit, optimized code, and it
  51. supports all of the OS/2 API calls, so you software developers
  52. out there can use it for PM programming, manipulating semaphores,
  53. manipulating threads, using named pipes, etc.  Optional packages
  54. include curses (a standard library for manipulating screenfuls of
  55. text and for moving the cursor), a collection of sample programs,
  56. and full source code for the system.
  57.  
  58. GNU software is originally developed by the Free Software
  59. Foundation, an organization which produces a lot of free software
  60. for UNIX.  After the Free Software Foundation releases the UNIX
  61. versions, people often port them to many other operation systems
  62. (such as OS/2).  Despite the fact that the software is free, the
  63. UNIX community considers it a standard and often prefers it over
  64. other products because of its high quality.  The compilers, for
  65. example, produce well-optimized code.  (See Appendix 4 for some
  66. benchmarks.)
  67.  
  68. Sometimes, there is more than one port of a GNU program.  For
  69. OS/2, there are two different ports of the GNU compiler:  EMX and
  70. gcc/2.  This document discusses only one of them (the EMX port)
  71. since the EMX port provides everything gcc/2 does in addition to
  72. providing faster floating-point routines and the ability to work
  73. with a debugger.  This document deals with version 0.8f of the
  74. EMX port, which is the latest version.  People frequently produce
  75. new versions of and enhancements for the GNU software and the
  76. ports based on it.
  77.  
  78. IMPORTANT:  I have not tested the software on FAT file systems. 
  79. People have told me it works, but I have not checked all of the
  80. file names to make sure they comply with the egregious 8.3
  81. file-naming convention.
  82.  
  83. 2.0 HOW TO GET IT
  84.  
  85. The full software-development system (and the various optional
  86. packages described in Appendix 1) are available from a variety of
  87. sources.  If you have access to Internet, you can get the files
  88. from anonymous-ftp sites.  In the USA, the main anonymous-ftp
  89. site for OS/2 is ftp-os2.nmsu.edu.  In Germany, the main
  90. anonymous-ftp site for OS/2 is rusinfo.rus.uni-stuttgart.de. 
  91. Also, see Appendix 3 for a list of people who are willing to
  92. distribute the whole system through regular mail.
  93.  
  94. You need to obtain the following files (the sizes of the files
  95. are listed next to the names):  emxdev.zip (620k), gnudev.zip
  96. (873k), gppdev.zip (944k), gobjcdev.zip (426k), gnumk362.zip
  97. (255k), whlinf8f.zip (814k), and unz50x32.exe (114k).  This file
  98. (emxst35.doc) is available in emxst35.zip (10k).  You do need the
  99. files with these names.  If you get files that claim to contain
  100. the GNU compiler (gcc) but that have names different than those
  101. listed above, you are not getting the EMX port, and the
  102. installation procedures given in this document are not valid.
  103.  
  104. On ftp-os2.nmsu.edu, these files are available in
  105. pub/os2/2.x/unix/gnu/emx-0.8f -- except for gnumk362.zip, which
  106. is in pub/os2/2.x/unix/gnu.  On rusinfo.rus.uni-stuttgart.de,
  107. check in pub/os2/emx-0.8f.
  108.  
  109. 3.0 HOW TO INSTALL IT
  110.  
  111. The following subsections describe how to install the various
  112. pieces of the GNU software-development system.  Go through the
  113. procedures step by step as described -- the order is important. 
  114. Don't feel compelled to read through any of the readme files or
  115. other documentation spit out during the unarchiving process -- I
  116. think you will have a much easier time if you go through this
  117. document beforehand.
  118.  
  119. 3.1 UNZ50X32.EXE
  120.  
  121. You will need unzip v5.0 to unarchive the files.  Earlier
  122. versions of unzip (including PKZip versions earlier than 1.9)
  123. will not work.
  124.  
  125. To unarchive unz50x32.exe, you simply move it to a convenient
  126. directory and type "unz50x32".  Add the name of the directory
  127. unzip is in to your path.  For example, I have unzip in
  128. c:\apps\unzip, so I appended "c:\apps\unzip;" to the "SET PATH"
  129. statement in my config.sys file.  Then reboot.  Now, you can
  130. unarchive any zip archive by typing "unzip filename", where
  131. "filename.zip" is the name of the archive.
  132.  
  133. 3.2 WHLINF8F.ZIP
  134.  
  135. Copy whlinf8f.zip to any convenient directory and unarchive it. 
  136. It will disgorge a program called "info.exe" (the hypertext
  137. reader), several auxiliary files, and a bunch of documentation
  138. files for itself, the compiler, the debugger, and make.
  139.  
  140. IMPORTANT:  Do not add the directory info.exe is in to the path
  141. statement in config.sys.  If you add it, the make utility
  142. (described below) will not work -- it will try to run the file
  143. "gcc" in the info directory instead of the correct program
  144. (gcc.exe).
  145.  
  146. 3.3 GNUMK362.ZIP
  147.  
  148. Copy gnumk362.zip to any convenient directory and unarchive it. 
  149. The archive will create the directory ".\make" and disgorge
  150. several files into it.  In other words, if you unarchive
  151. gnumk362.zip in the directory "\apps", the process will create
  152. the directory "\apps\make".  You can delete the info directory
  153. (the one in the make directory) as its contents are duplicated in
  154. whlinf8f.zip.
  155.  
  156. Add the name of the directory make is in to your path statement
  157. in config.sys.  (I have make in c:\apps\make, so I appended
  158. "c:\apps\make;" to the "SET PATH" statement in my config.sys.)
  159.  
  160. 3.4 GNUDEV.ZIP, EMXDEV.ZIP, GPPDEV.ZIP, AND OBJCDEV.ZIP
  161.  
  162. These archives create the directory ".\emx" and a bunch of
  163. directories under that.  Thus, unarchive the files from the
  164. directory in which you want this emx directory.  (In other words,
  165. if you unarchive gnudev.zip in the directory "\apps", the process
  166. will create \apps\emx, \apps\emx\bin, \apps\emx\lib, and many
  167. other such directories.)
  168.  
  169. 3.5 THE FINAL STEPS
  170.  
  171. Now, you need to modify your config.sys file.  The examples below
  172. are from my config.sys file, and I have the emx directory
  173. installed under c:\apps.  Thus, my system has the directories
  174. "c:\apps\emx\dll", "c:\apps\emx\lib", "c:\apps\emx\include",
  175. "c:\apps\emx\bin", and so on -- you will need to modify the
  176. following examples so that the directories are specified
  177. correctly.  
  178.  
  179. First, you need to specify in your libpath the location of
  180. emx.dll and other dll files.  In my config.sys, I have
  181.  
  182. LIBPATH=.;C:\OS2\DLL;C:\OS2\MDOS;C:\;C:\OS2\APPS\DLL;c:\apps\emx\dll;
  183.  
  184. Second, add the name of the emx\bin directory to your path
  185. statement in config.sys.  (I appended "c:\apps\emx\bin;" to the
  186. "SET PATH" statement in my config.sys.)
  187.  
  188. Third, you need to set a few environmental variables so that the
  189. compiler knows where to find and how to use various files:
  190.  
  191. set C_INCLUDE_PATH=c:/apps/emx/include
  192. set LIBRARY_PATH=c:/apps/emx/lib
  193. set CPLUS_INCLUDE_PATH=C:/apps/emx/include.cpp;C:/apps/emx/include
  194. set PROTODIR=c:/apps/emx/include.cpp/gen
  195. set OBJC_INCLUDE_PATH=c:/apps/emx/include
  196. set TERM=mono
  197. set TERMCAP=c:/apps/emx/etc/termcap.dat
  198.  
  199. IMPORTANT:  you need to use forward slashes ("/") and not
  200. backward slashes ("\") when setting these environmental
  201. variables.  However, do NOT use forward slashes in your libpath
  202. statement.  Also, the case matters:  make sure "mono" is in lower
  203. case.
  204.  
  205. Now, reboot your machine so that these definitions take effect. 
  206. Then, go into an OS/2 window and type "cd \apps\emx\lib" (or
  207. whatever you would type to get to emx\lib), and type "omflib". 
  208. This completes the installation process.
  209.  
  210. NOTE:  if you try to use gcc or other EMX programs and if they
  211. complain that you don't have a recent-enough version of emx.dll
  212. (such as emx.dll for emx-0.8f), it means that you have an older
  213. version of emx.dll somewhere in your libpath.  You need to search
  214. for and to get rid of all versions of emx.dll other than the one
  215. in the emx\dll directory.
  216.  
  217. 4.0 HOW TO USE IT
  218.  
  219. Now, you are ready to use info (the hypertext reader), to compile
  220. programs, to debug programs, and to use make.  The next
  221. subsections discuss each of these actions in turn.
  222.  
  223. 4.1 USING INFO
  224.  
  225. Go into the directory in which info.exe resides.  Type "info". 
  226. You are now looking at a screen that has some information on the
  227. top half (information such as "Typing 'd' returns here, 'q'
  228. quits, '?' lists all info commands, 'h' gives a primer for
  229. first-timers . . .") and a list of subjects near the bottom
  230. (subjects such as "Info", "Make," "Gcc", "Gdb", etc.).  
  231.  
  232. Go ahead and type "h" for a tutorial.  The most basic functions
  233. to remember are:  type "q" to quit, type "?" to get a list of
  234. commands, hit the space bar or PgDn key to go down a page, press
  235. the Del key or the PgUp key to go up a page, press "n" to go to
  236. the next node (think of a node as being a collection of one or
  237. more pages dealing with a single topic), press "p" to go to the
  238. previous node, use the up and down arrow keys to highlight
  239. choices of new nodes to jump to, and press enter to jump to the
  240. highlighted node.
  241.  
  242. Just play around with it a little while, and you will get the
  243. hang of it.  Type "d" to get back to the main directory, use the
  244. down arrow to highlight "Gcc", press enter, press the down arrow
  245. to highlight "Contributors", press enter, scan through the pages
  246. of text by hitting the PgDn key a couple of times, type "?" to
  247. see a list of commands, type "p" a couple of times, etc.
  248.  
  249. 4.2 USING THE COMPILER
  250.  
  251. To compile a C source file called "myprog.c", type "gcc -o
  252. myprog.exe myprog.c".  The -o switch tells gcc that it should
  253. call the resulting executable "myprog.exe".  To compile the C++
  254. source file "myprog.cc", type "gcc -o myprog.exe myprog.cc
  255. -lgpp".  C++ source files should have the extension ".cc".  The
  256. -lgpp switch tells gcc to link the C++ libraries, and it is
  257. important to put it at the end of the line rather than, say,
  258. right after "gcc".  You can also tell gcc to optimize your code
  259. by using the -O switch.  There are two levels of optimization (-O
  260. and -O2, the highest being -O2).  Thus, for the fastest-executing
  261. code (at the expense of time to compile and of size of the
  262. executable), you would type "gcc -O2 -o myprog.exe myprog.c" for
  263. myprog.c and "gcc -O2 -o myprog.exe myprog.cc -lgpp" for
  264. myprog.cc.  If your machine has a 486 processor, you can get even
  265. more optimization by adding the -m486 switch (i.e., "gcc -O2
  266. -m486 -o myprog.exe myprog.c").
  267.  
  268. Note:  Specifying "-o myprog.exe" is important.  If you don't
  269. specify ".exe" as the suffix of the output file name, the
  270. compiler will generate a UNIX-style executable which will not run
  271. under OS/2 even if you subsequently rename the file so that it
  272. has a .exe extension.
  273.  
  274. 4.3 USING THE DEBUGGER
  275.  
  276. To debug a program, you need to compile it with the -g switch: 
  277. "gcc -g -o myprog.exe myprog.c" for myprog.c and likewise for
  278. myprog.cc.  After compiling, you then type "gdb myprog.exe" to
  279. start the debugger.  Type "h" at the debugger prompt to get a
  280. list of help topics.  gdb supports all sorts of breakpoints
  281. (including conditional ones), and you can watch variables, set
  282. variables to different values, etc.  For example, to get help on
  283. running programs from within the gdb, you can type "help
  284. running".  That will give you a list of commands such as run,
  285. kill, step, etc.  You can get help on individual commands by
  286. typing, for example, "help step".
  287.  
  288. The following is a sample compile and debug session.  Go into the
  289. emx\test directory and type "gcc -g -o hello.exe hello.cc -lgpp"
  290. to compile hello.cc.  Type "hello" to run it, to see if the
  291. compiler is functioning.  The program will print "Hello, world!"
  292. on the screen.  Now type "gdb hello.exe" to start gdb.  At the
  293. prompt "(gdb)", type "list main" to list the function "main". 
  294. Then type "break 5" to cause execution to stop at line 5 in the
  295. main function.  Type "run" to start execution -- it will stop at
  296. line 5.  Type "print argc" to see the value of the variable
  297. "argc".  Type "step" to run line 5 then halt execution at the
  298. next line.  Type "quit" to quit.  To list a function (main(),
  299. say) that is longer than a screenful, type "list main"; then type
  300. "list" again to list the next screenful of main.
  301.  
  302. 4.4 USING MAKE
  303.  
  304. Assume you have a program made of the following source files: 
  305. "myprog1.c" and "myprog2.c".  You might manually compile these
  306. files by typing "gcc -o myprog.exe myprog1.c myprog2.c".  Of
  307. course, if you change only one of the files, typing such a
  308. command causes the recompiling of both source files.  During
  309. development, this could be tiresome if the files take a long time
  310. to compile.  A better way would be to type "gcc -c myprog1.c"
  311. which compiles myprog1.c into the object file "myprog1.o" (the -c
  312. switch tells gcc to make an object file), then to type "gcc -c
  313. myprog2.c" to generate myprog2.o, and finally to type "gcc -o
  314. myprog.exe myprog1.o myprog2.o".  This way, if you change only
  315. myprog1.c, you can recompile it and relink it with myprog2.o to
  316. create myprog.exe (skipping the "gcc -c myprog2.c" step).  This
  317. will be much faster if the source files take a long time to
  318. compile (or if you have a lot of source files).
  319.  
  320. Of course, doing all this typing is tiresome, too.  Also, if
  321. myprog1.c happens to depend on myprog1.h, and you change
  322. myprog1.h, you must recompile myprog1.c.  Thus, you have to keep
  323. track of all the file dependencies in order to know, after
  324. changing one header file, which other files need to be
  325. recompiled.
  326.  
  327. Fortunately, make takes care of all of this automatically.  All
  328. you have to do is create one text file that describes the various
  329. dependencies and the various steps to compile the program.  You
  330. name the text file "Makefile".  From then on, whenever you type
  331. "make", make examines the Makefile, looks for files which have
  332. changed since the last compile, recompiles any files which depend
  333. on the changed files, and relinks everything into a new
  334. executable.
  335.  
  336. For example, suppose that myprog.exe is made from myprog1.c and
  337. myprog2.c, that myprog1.c contains the lines "#include
  338. "myprog1.c"" and "#include "mainhead.h"", and that myprog2.c
  339. includes myprog2.h and mainhead.h.  The Makefile describing all
  340. of this is
  341.  
  342. myprog.exe: myprog1.o myprog2.o
  343.      gcc -o myprog.exe myprog1.o myprog2.o
  344.  
  345. myprog1.o: myprog1.c myprog1.h mainhead.h
  346.      gcc -c myprog1.c
  347.  
  348. myprog2.o: myprog2.c myprog2.h mainhead.h
  349.      gcc -c myprog2.c
  350.  
  351. The first line shows that myprog.exe depends on myprog1.o and
  352. myprog2.o.  If either of those has changed since the last time
  353. make was invoked, make will relink them to create myprog.exe by
  354. giving the command under the first line.  The fourth line shows
  355. that myprog1.o depends on myprog1.c, myprog1.h, and mainhead.h. 
  356. If any of these three files have changed since the last time make
  357. was run, make will recompile myprog1.o by issuing the command on
  358. line five.  It will also realize that myprog.o has changed, that
  359. myprog.exe depends on myprog.o, and will relink myprog.exe.  If
  360. mainhead.h is changed, make will recompile and relink everything
  361. since myprog1.o needs to be changed, myprog2.o needs to be
  362. changed, and thus myprog.exe needs to be changed.
  363.  
  364. The example above shows the general form of a Makefile.  You give
  365. a target (like "myprog.exe" or "myprog1.o") followed by a colon,
  366. followed by a space, followed by a space-delimited list of files
  367. the target depends on.  The next line specifies the action to be
  368. taken when any of the dependencies change:  the first character
  369. MUST be a tab (not just a bunch of spaces used for indentation);
  370. then you type the command make should issue.  A Makefile is just
  371. a list of such targets, dependencies, and actions.
  372.  
  373. 4.5 USING THE ASSEMBLER
  374.  
  375. The compiler provided with this system (gcc) can handle not only
  376. C and C++ code but assembly as well.  It can also generate
  377. assembly language from C or C++ source.  To assemble and link
  378. assembly-language programs, type "gcc -o myprog.exe myprog.s"
  379. where "myprog.exe" is the name of the executable and where
  380. "myprog.s" is the name of the source-code file. 
  381. Assembly-language source-code files should have the extension
  382. ".s".  To generate assembly from C code, type "gcc -S myprog.c"
  383. where "myprog.c" is the name of the C-source-code file -- the
  384. resulting assembly language will be put into the file "myprog.s".
  385.  
  386. 5.0 WHERE TO GET MORE INFORMATION
  387.  
  388. The GNU software-development system does not come with
  389. documentation like that you would get with, for example, Borland
  390. C++.  However, emxdev.doc (in the emx\doc directory) does contain
  391. a complete list of library functions, including a list of headers
  392. you need to include, what the functions do, and what parameters
  393. they accept.
  394.  
  395. Also, since the C compiler is ANSI-C compliant (or at least close
  396. to it) and since the C++ compiler is close to AT&T-C++-2.0
  397. compliant, you can use just about any reference manuals for ANSI
  398. C and AT&T C++ 2.0.  I use the ones I got with an old version of
  399. Borland Turbo C++.  If you don't have such manuals, you should be
  400. able to find something suitable in a bookstore.  If you want a C
  401. reference manual, I recommend C:  A REFERENCE MANUAL, by S. P.
  402. Harbison and G. L. Steele, Jr. (Prentice-Hall, 1991).  If you are
  403. just learning C or C++, there is a large number of books to
  404. choose from, and you shouldn't have any trouble finding one that
  405. is suitable.
  406.  
  407. For those of you developing applications that use the PM or that
  408. use special OS/2 functions, the system DOES support all of the
  409. OS/2 API functions, including ones for semaphores, PM
  410. programming, named pipes, threads, etc., and it supports Kbd,
  411. Mou, and Vio functions.  See emxdev.doc (in the emx\doc
  412. directory) for a list of the supported functions.  The
  413. documentation does not contain a manual on how to use these API
  414. calls -- you need an OS/2 programming book for that.  For getting
  415. started with OS/2 programming (multitasking, inter-process
  416. communication, PM programming, etc.), take a look at OS/2 2.0
  417. PROGRAMMING, by H. Schildt and R. Goosey (McGraw-Hill, 1993). 
  418. For more detailed information on programming the PM, take a look
  419. at OS/2 2.0 PRESENTATION MANAGER GPI:  A PROGRAMMING GUIDE TO
  420. TEXT, GRAPHICS, AND PRINTING, by G. C. E. Winn (Van Norstrand
  421. Reinhold, 1992); or LEARNING TO PROGRAM OS/2 2.0 PRESENTATION
  422. MANAGER BY EXAMPLE:  PUTTING THE PIECES TOGETHER, by S. Knight
  423. (Van Norstrand Reinhold, 1992).  You can also get the IBM
  424. redbooks (which are quite economical and of which there is a
  425. large assortment of titles).  [If you have recommendations for
  426. books, please tell me via e-mail.]
  427.  
  428. For using assembly language, the best choice would be a book
  429. about assembly-language programming in OS/2, supplemented perhaps
  430. by a book on programming the 386 or 486.  [Again, if you have
  431. recommendations, please tell me via e-mail.]
  432.  
  433. Also, way back when you were unarchiving, you might have been
  434. itching to examine the various readme files and other
  435. documentation.  Now is the time to do that to your heart's
  436. content.  Browse through the files in the emx\doc directory and
  437. the information available from the hypertext reader.
  438.  
  439. Additional sources of information include GEnie (the OS/2
  440. category of the IBMPC bulletin board), Usenet news (the
  441. comp.os.os2 newsgroups), and CompuServe.  These are places where
  442. you can exchange information with other people who use and
  443. program for OS/2.  In particular, CompuServe is one of the
  444. official homes for the OS/2 developers' assistance program.  If
  445. you are a member of the program, IBM will (for only about $15)
  446. provide you with a CD that contains a beta version of the
  447. software development kit (including the C and C++ compiler and
  448. debugger and a full set of on-line documentation), a beta version
  449. of OS/2 (which contains enhancements such as Windows 3.1
  450. compatibility), and many other goodies.  For more information,
  451. type "go os2dap" on CompuServe or call 1-407-982-6408.  The
  452. people at 1-800-3-ibm-os2 might also be able to provide more
  453. information.
  454.  
  455. 6.0 CONCLUSIONS
  456.  
  457. I wrote this to help people get started with a free -- yet
  458. powerful -- 32-bit software-development system for OS/2.  For (at
  459. most) the price of a few books, you have a full programming
  460. system for C++, C, and assembly language.  For the additional
  461. price of an OS/2 programming book, you have a bargain-basement
  462. SDK.
  463.  
  464. If you find errors in this document, or if you have suggestions
  465. for its improvement, please let me know.  My GEnie address is
  466. "BROOKE", and my Internet address is "brooke@hope.caltech.edu".
  467.  
  468. APPENDIX 1:  OPTIONAL PACKAGES
  469.  
  470. There are three optional packages you can get for this
  471. software-development system, packages which are not necessary but
  472. which can nevertheless be important.  All of them are in the
  473. pub/os2/2.x/unix/gnu/emx-0.8f directory on ftp-os2.nmsu.edu.  On
  474. rusinfo.rus.uni-stuttgart.de, they are probably available in a
  475. directory such as pub/os2/emx-0.8f.
  476.  
  477. The first package contains curses.  Curses is a library of
  478. functions that allow you to move the cursor around on the screen,
  479. manipulate screenfuls of text, and get input.  You need the files
  480. "bsddev.zip" and "bsddoc.zip".  The source code is available in
  481. "bsdsrc.zip".
  482.  
  483. The second package contains full source code to the
  484. software-development system.  Most people do not need the source
  485. code to everything, but the source code to the libraries (i.e.,
  486. to all the functions) is sometimes useful.  The source code to
  487. the C libraries is in "emxlib.zip", and the source to the C++
  488. libraries is in "gccsrc.zip".  install.doc (in the emx\doc
  489. directory) gives the names of all the other relevant archives. 
  490.  
  491. The third package is a collection of sample and test programs
  492. that you can use to test the compiler and to learn about various
  493. aspects of programming.  These programs are in the file
  494. "emxtest.zip."
  495.  
  496. APPENDIX 2:  SOURCES OF DISTRIBUTION
  497.  
  498. This document already described some places from which you can
  499. get the necessary archives:  ftp-os2.nmsu.edu and
  500. rusinfo.rus.uni-stuttgart.de.  The following are some
  501. bulletin-board systems that have the archives.
  502.  
  503. Inside Technologies BBS
  504. 14965 Overbrook, A-305
  505. Southgate, MI 48195
  506. USA
  507. Phone:  (313) 283-1151 (1200-14400 bps)
  508. SysOp Name:  John A. Quoziente
  509. Cost:  No on-line costs
  510. Provides:  Basic archives for EMX v0.8f and all optional
  511. packages.
  512.  
  513. Still, some people don't have access to these sites or don't have
  514. modems fast enough to download megabytes of data in a reasonable
  515. amount of time.  For these people, I am including the following
  516. list of people who are willing to distribute the whole system
  517. through regular mail.  Keep in mind that people might change
  518. their prices, cease distributing the software, move, etc., so
  519. contact them first to get current details.  Make sure you ask
  520. them if they have the latest version of the EMX port (which is
  521. currently version 0.8f).
  522.  
  523. Brooke Anderson
  524. 1155 E. Del Mar #312
  525. Pasadena, CA  91106
  526. USA
  527. Phone:  (818) 577-7555
  528. GEnie:  BROOKE
  529. Internet:  brooke@hope.caltech.edu
  530. Cost:  $18 in US; in other countries, shipping + US$10
  531. Provides:  the basic set of archives and bsddev.zip, bsddoc.zip,
  532. bsdsrc.zip, emxtest.zip, emxlib.zip, and gccsrc.zip.
  533.  
  534. Juergen Egeling
  535. Werderstr. 41
  536. 7500 Karlsruhe
  537. Germany
  538. Phone:  0721-373842
  539. FAX:  0721-373842
  540. BITNET:  ry90@dkauni2
  541. Internet:  ry90@ibm3090.rz.uni-karlsruhe.dbp.de
  542. X.400:  S=ry90;OU=ibm3090;OU=rz;P=uni-karlsruhe;A=dbp;C=de
  543. Cost:  disks + shipping + DM 25
  544.  
  545. Wey J. Ho
  546. Department of Physics
  547. Monash University
  548. Clayton
  549. VIC 3168
  550. Australia
  551. Phone:  +613-565-3615 (or Australia (03) 565 3615)
  552. Fax:  +613-565-3637 (or Australia (03) 565 3637)
  553. Internet:  sci240s@monu6.cc.monash.edu.au
  554. Cost:  disks + shipping + AU$10
  555.  
  556. Doug Robison
  557. 1311 Webster
  558. Chillicothe, MO  64601
  559. USA
  560. Phone:  (816) 646-1085
  561. GEnie:  D.ROBISON
  562. Cost:  disks + shipping + US$5
  563.  
  564. Willem Jan Withagen
  565. Eindhoven University of Technology
  566. Digital Information Systems Group
  567. Room EH 10.35
  568. P.O. 513
  569. 5600 MB Eindhoven
  570. The Netherlands
  571. Phone:  +31-40-473401
  572. Fax:  +31-40-448375
  573. Internet:  wjw@eb.ele.tue.nl
  574. X400:  C=nl;ADMD=400net;PRMD=surf;O=tue;OU=ele;OU=eb;S=WJW
  575. Cost:  disks + shipping + fl 25
  576.  
  577. If you would like to get on this list and if you have access to
  578. Internet or an on-line service, just send me your name, a
  579. description of how people can contact you (including your e-mail
  580. address), how much money you want for the job (such as "$20",
  581. "disks + shipping + $30", or whatever you want to charge), and
  582. what you are offering for that price.  It is helpful to have a
  583. list that includes people in various countries.  You can also
  584. send me the relevant information if you want your BBS listed.
  585.  
  586. APPENDIX 3:  DISTRIBUTING THIS DOCUMENT
  587.  
  588. I give permission to use, to distribute, and to copy this
  589. document freely.  If you want to upload it to any bulletin-board
  590. or on-line service, please do so.  I do update this document
  591. occasionally (and put the latest version on GEnie and
  592. ftp-os2.nmsu.edu), so you might want to make sure you have the
  593. latest version before distributing it.
  594.  
  595. APPENDIX 4:  DHRYSTONE AND WHETSTONE PERFORMANCE
  596.  
  597. Two freely available benchmarks for the performance of compilers
  598. and computer systems are the dhrystone and whetstone benchmarks. 
  599. The C-code version of the whetstone benchmark measures the speed
  600. of double-precision floating-point calculations, and the
  601. dhrystone benchmark measures the speed of "typical" code (i.e.,
  602. memory allocation, moving data, integer calculations, string
  603. manipulations, etc.).  I modified the whetstone C code to run for
  604. more iterations ("#define ITERATIONS 6000" instead of "#define
  605. ITERATIONS 10") so that I could get a more accurate measurement,
  606. but I used the standard C-code, version 2.1, of the dhrystone
  607. benchmark.  I compiled both of these benchmarks with "gcc -O2
  608. -m486" under OS/2 v2.0 with the service pack applied, and I ran
  609. both benchmarks in full-screen OS/2 sessions.  No other tasks
  610. were running in the background except for the Presentation
  611. Manager.  
  612.  
  613. Under the above conditions, my 486DX-33 delivered 6750 +- 80
  614. kilowhetstones/sec and 28300 +- 300 dhrystones/sec.  (When I say
  615. "6750 +- 80 kwhets/s" I mean that the measurement was 6750
  616. kwhets/s and that this measurement is accurate to within 80
  617. kwhets/s one way or the other.)  These results are VERY
  618. impressive -- especially considering the low cost of 486 systems.
  619.  
  620.  
  621.                             The End 
  622.