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