home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!zaphod.mps.ohio-state.edu!usc!elroy.jpl.nasa.gov!nntp-server.caltech.edu!brooke
- From: brooke@cco.caltech.edu (Brooke Paul Anderson)
- Newsgroups: comp.os.os2.programmer
- Subject: How to get/install/use the emx-0.8e port of GNU C/C++
- Date: 12 Nov 1992 09:22:13 GMT
- Organization: California Institute of Technology, Pasadena
- Lines: 560
- Message-ID: <1dt7o5INNcag@gap.caltech.edu>
- NNTP-Posting-Host: sandman.caltech.edu
-
- Here's the latest version of the document:
-
-
- A FREE GNU C AND C++ SOFTWARE-DEVELOPMENT SYSTEM FOR OS/2 V2.0
-
- by Brooke P. Anderson, 11/12/92
-
- Brooke Anderson
- 1155 E. Del Mar #312
- Pasadena, CA 91106
- USA
- Phone: (818) 577-7555
- GEnie: BROOKE
- Internet: brooke@hope.caltech.edu
-
- TABLE OF CONTENTS
-
- 1.0 Introduction
- 2.0 How to get it
- 3.0 How to install it
- 3.1 Unz50x32.exe
- 3.2 Wholeinf.zip
- 3.3 Gnumk362.zip
- 3.4 Emxdev.zip, gnudev.zip, and gppdev.zip
- 3.5 The final steps
- 4.0 How to use it
- 4.1 Using info
- 4.2 Using the compiler
- 4.3 Using the debugger
- 4.4 Using make
- 5.0 Where to get more information
- 6.0 Conclusions
-
- Appendix 1: Optional packages
- Appendix 2: Sources of distribution
-
- 1.0 INTRODUCTION
-
- This document describes a free GNU C and C++ software-development
- system for OS/2 v2.0. It tells you how to acquire all the
- necessary software, how to install it, how to start using it, and
- where to look for more information.
-
- The GNU software-development system includes a C and C++
- compiler, a debugger, an assembler, a make utility (for
- automating the compilation of programs made of many source
- files), and a hypertext reader (for reading the documentation).
- The compiler generates full 32-bit, optimized code, and it
- supports almost all of the 32-bit OS/2 API calls, so you software
- developers out there can use it for PM programming, manipulating
- semaphores, manipulating threads, using named pipes, etc.
- Optional packages include curses (a standard library for
- manipulating screenfuls of text and for moving the cursor), emacs
- (a programmer's editor), a package for accessing 16-bit API
- calls, and full source code for the system.
-
- GNU software is originally developed by the Free Software
- Foundation, an organization which produces a lot of free software
- for UNIX. After the Free Software Foundation releases the UNIX
- versions, people often port them to many other operation systems
- (such as OS/2). Despite the fact that the software is free, the
- UNIX community considers it a standard and often prefers it over
- other products because of its high quality. The compilers, for
- example, produce well-optimized code; and emacs is one of the two
- most popular editors for UNIX.
-
- Sometimes, there is more than one port of a GNU program. For
- OS/2, for example, there are two different ports of the GNU C
- compiler (called "gcc"). This document discusses only one of
- them (the EMX port) since the EMX port provides faster floating
- point routines and since it works with a debugger. This document
- deals with version 0.8e of the EMX port, which is the latest
- version. People frequently produce new versions of and
- enhancements for the GNU software and the ports based on it.
-
- IMPORTANT: I have not tested the software on FAT file systems.
- I think it will work, but I have not checked all of the file
- names to make sure they comply with the egregious 8.3 file-naming
- convention.
-
- 2.0 HOW TO GET IT
-
- The full software-development system (and the various optional
- packages described in Appendix 1) are available from a variety of
- sources. If you have access to Internet, you can get the files
- from anonymous-ftp sites. In the USA, the main anonymous-ftp
- site for OS/2 is ftp-os2.nmsu.edu. In Germany, the main
- anonymous-ftp site for OS/2 is rusinfo.rus.uni-stuttgart.de. The
- files are also available on GEnie, and they might be available on
- CompuServe and many other on-line services. Also, see Appendix 3
- for a list of people who are willing to distribute the whole
- system through regular mail.
-
- You need to obtain the files "emxdev.zip" (which contains
- auxiliary programs), "gnudev.zip" (which contains the compiler,
- the debugger, the assembler, and more auxiliary programs),
- "gppdev.zip" (which contains files for the C++ compiler),
- "gnumk362.zip" (which contains make), "wholeinf.zip" (which
- contains a hypertext reader and all the documentation for the
- compiler, the debugger, and make), and "unz50x32.exe" (a
- self-extracting archive which contains unzip v5.0). See Appendix
- 1 for a description of what you need for the optional packages.
- In case you need to tell someone how to find this file, is is in
- "emxstart.zip".
-
- The sizes of the various files are: 600k for emxdev.zip, 843k
- for gnudev.zip, 1085k for gppdev.zip, 139k for gnumk362.zip, 623k
- for wholeinf.zip, 114k for unz50x32.exe, and 10k for
- emxstart.zip.
-
- On GEnie, all the archives are (or soon will be) in the OS/2
- library (library 13) of the IBMPC round table. On
- ftp-os2.nmsu.edu, unz50x32.exe is in pub/os2/2.0/archivers;
- gnumk362.zip is in pub/os2/2.0/programming; wholeinf.zip is in
- pub/os2/2.0/programming/emx-0.8e/contrib; emxstart.zip is
- currently in pub/uploads (but will be moving elsewhere shortly,
- probably to pub/os2/2.0/programming/emx-0.8e or
- pub/os2/2.0/programming/emx-0.8e/contrib); and the rest of the
- files are in pub/os2/2.0/programming/emx-0.8e. On
- rusinfo.rus.uni-stuttgart.de, check in pub/os2/emx-0.8e and other
- likely directories (such as those called "gnu").
-
- 3.0 HOW TO INSTALL IT
-
- The following subsections describe how to install the various
- pieces of the GNU C and C++ software-development system. Go
- through the procedures step by step as described -- the order is
- important. Don't feel compelled to read through any of the
- readme files or other documentation spit out during the
- unarchiving process -- I think you will have a much easier time
- if you go through this document beforehand.
-
- 3.1 UNZ50X32.EXE
-
- You will need unzip v5.0 to unarchive the files. Earlier
- versions of unzip (including PKZip versions earlier than 1.9)
- will not work.
-
- To unarchive unz50x32.exe, you simply move it to a convenient
- directory and type "unz50x32". Add the name of the directory
- unzip is in to your path. For example, I have unzip in
- c:\apps\unzip, so I appended "c:\apps\unzip;" to the "SET PATH"
- statement in my config.sys file. Then reboot. Now, you can
- unarchive any zip archive by typing "unzip filename", where
- "filename.zip" is the name of the archive.
-
- 3.2 WHOLEINF.ZIP
-
- Copy wholeinf.zip to any convenient directory and unarchive it.
- It will disgorge a program called "info.exe" (the hypertext
- reader), several auxiliary files, and a bunch of documentation
- files for itself, the compiler, the debugger, and make.
-
- 3.3 GNUMK362.ZIP
-
- Copy gnumk362.zip to any convenient directory and unarchive it.
- The archive will disgorge several files, including info files.
- You can delete the info directory as its contents are duplicated
- in wholeinf.zip.
-
- Add the name of the directory make is in to your path statement
- in config.sys. (I have make in c:\apps\make, so I appended
- "c:\apps\make;" to the "SET PATH" statement in my config.sys.)
-
- 3.4 GNUDEV.ZIP, EMXDEV.ZIP, AND GPPDEV.ZIP
-
- These archives create the directory ".\emx" and a bunch of
- directories under that. Thus, unarchive the files from the
- directory in which you want this emx directory. (In other words,
- if you unarchive gnudev.zip in the directory "\apps", the process
- will create \apps\emx, \apps\emx\bin, \apps\emx\lib, and many
- other such directories.)
-
- 3.5 THE FINAL STEPS
-
- Now, you need to modify your config.sys file. The examples below
- are from my config.sys file, and I have the emx directory
- installed under c:\apps. Thus, my system has the directories
- "c:\apps\emx\dll", "c:\apps\emx\lib", "c:\apps\emx\include",
- "c:\apps\emx\bin", and so on -- you will need to modify the
- following examples so that the directories are specified
- correctly.
-
- First, you need to specify in your libpath the location of
- emx.dll and other dll files. In my config.sys, I have
-
- LIBPATH=.;C:\OS2\DLL;C:\OS2\MDOS;C:\;C:\OS2\APPS\DLL;c:\apps\emx\dll;
-
- Second, add the name of the emx\bin directory to your path
- statement in config.sys. (I appended "c:\apps\emx\bin;" to the
- "SET PATH" statement in my config.sys.)
-
- Third, you need to set a few environmental variables so that the
- compiler knows where to find and how to use various files:
-
- set C_INCLUDE_PATH=c:/apps/emx/include
- set LIBRARY_PATH=c:/apps/emx/lib
- set CPLUS_INCLUDE_PATH=C:/apps/emx/include.cpp;C:/apps/emx/include
- set TERM=mono
- set TERMCAP=c:/apps/emx/etc/termcap.dat
-
- IMPORTANT: you need to use forward slashes ("/") and not
- backward slashes ("\") when setting these environmental
- variables. However, do NOT use forward slashes in your libpath
- statement.
-
- Now, reboot your machine so that these definitions take effect.
- This completes the installation process.
-
- 4.0 HOW TO USE IT
-
- Now, you are ready to use info (the hypertext reader), to compile
- programs, to debug programs, and to use make. The next
- subsections discuss each of these actions in turn.
-
- 4.1 USING INFO
-
- Go into the directory in which info.exe resides. Type "info".
- You are now looking at a screen that has some information on the
- top half (information such as "Typing 'd' returns here, 'q'
- quits, '?' lists all info commands, 'h' gives a primer for
- first-timers . . .") and a list of subjects near the bottom
- (subjects such as "Info", "Make," "Gcc", "Gdb", etc.).
-
- Go ahead and type "h" for a tutorial. The most basic functions
- to remember are: type "q" to quit, type "?" to get a list of
- commands, hit the space bar or PgDn key to go down a page, press
- the Del key or the PgUp key to go up a page, press "n" to go to
- the next node (think of a node as being a collection of one or
- more pages dealing with a single topic), press "p" to go to the
- previous node, use the up and down arrow keys to highlight
- choices of new nodes to jump to, and press enter to jump to the
- highlighted node.
-
- Just play around with it a little while, and you will get the
- hang of it. Type "d" to get back to the main directory, use the
- down arrow to highlight "Gcc", press enter, press the down arrow
- to highlight "Contributors", press enter, scan through the pages
- of text by hitting the PgDn key a couple of times, type "?" to
- see a list of commands, type "p" a couple of times, etc.
-
- 4.2 USING THE COMPILER
-
- To compile a C source file called "myprog.c", type "gcc -o
- myprog.exe myprog.c". The -o switch tells gcc that it should
- call the resulting executable "myprog.exe". To compile the C++
- source file "myprog.cc", type "gcc -o myprog.exe myprog.cc
- -lgpp". C++ source files should have the extension ".cc". The
- -lgpp switch tells gcc to link the C++ libraries. You can also
- tell gcc to optimize your code by using the -O switch. There are
- two levels of optimization (-O and -O2, the highest being -O2).
- Thus, for the fastest-executing code (at the expense of time to
- compile and of size of the executable), you would type "gcc -O2
- -o myprog.exe myprog.c" for myprog.c and "gcc -O2 -o myprog.exe
- myprog.cc -lgpp" for myprog.cc.
-
- Note: Specifying "-o myprog.exe" is important. If you don't
- specify ".exe" as the suffix of the output file name, the
- compiler will generate a UNIX-style executable which will not run
- under OS/2 even if you subsequently rename the file so that it
- has a .exe extension.
-
- 4.3 USING THE DEBUGGER
-
- To debug a program, you need to compile it with the -g switch:
- "gcc -g -o myprog.exe myprog.c" for myprog.c and likewise for
- myprog.cc. After compiling, you then type "gdb myprog.exe" to
- start the debugger. Type "h" at the debugger prompt to get a
- list of help topics. gdb supports all sorts of breakpoints
- (including conditional ones), and you can watch variables, set
- variables to different values, etc. For example, to get help on
- running programs from within the gdb, you can type "help
- running". That will give you a list of commands such as run,
- kill, step, etc. You can get help on individual commands by
- typing, for example, "help step".
-
- The following is a sample compile and debug session. Go into the
- emx\test directory and type "gcc -g -o hello.exe hello.cc -lgpp"
- to compile hello.cc. Type "hello" to run it, to see if the
- compiler is functioning. The program will print "Hello, world!"
- on the screen. Now type "gdb hello.exe" to start gdb. At the
- prompt "(gdb)", type "list main" to list the function "main".
- Then type "break 5" to cause execution to stop at line 5 in the
- main function. Type "run" to start execution -- it will stop at
- line 5. Type "print argc" to see the value of the variable
- "argc". Type "step" to run line 5 then halt execution at the
- next line. Type "quit" to quit. To list a function (main(),
- say) that is longer than a screenful, type "list main"; then type
- "list" again to list the next screenful of main.
-
- You can run the debugger interactively from within emacs, too.
- This arrangement provides a more visual system similar to
- MicroSoft's CodeView or Borland's Integrated Development
- Environment. See Appendix 1 for details.
-
- 4.4 USING MAKE
-
- Assume you have a program made of the following source files:
- "myprog1.c" and "myprog2.c". You might manually compile these
- files by typing "gcc -o myprog.exe myprog1.c myprog2.c". Of
- course, if you change only one of the files, typing such a
- command causes the recompiling of both source files. During
- development, this could be tiresome if the files take a long time
- to compile. A better way would be to type "gcc -c myprog1.c"
- which compiles myprog1.c into the object file "myprog1.o" (the -c
- switch tells gcc to make an object file), then to type "gcc -c
- myprog2.c" to generate myprog2.o, and finally to type "gcc -o
- myprog.exe myprog1.o myprog2.o". This way, if you change only
- myprog1.c, you can recompile it and relink it with myprog2.o to
- create myprog.exe (skipping the "gcc -c myprog2.c" step). This
- will be much faster if the source files take a long time to
- compile (or if you have a lot of source files).
-
- Of course, doing all this typing is tiresome, too. Also, if
- myprog1.c happens to depend on myprog1.h, and you change
- myprog1.h, you must recompile myprog1.c. Thus, you have to keep
- track of all the file dependencies in order to know, after
- changing one header file, which other files need to be
- recompiled.
-
- Fortunately, make takes care of all of this automatically. All
- you have to do is create one text file that describes the various
- dependencies and the various steps to compile the program. You
- name the text file "Makefile". From then on, whenever you type
- "make", make examines the Makefile, looks for files which have
- changed since the last compile, recompiles any files which depend
- on the changed files, and relinks everything into a new
- executable.
-
- For example, suppose that myprog.exe is made from myprog1.c and
- myprog2.c, that myprog1.c contains the lines "#include
- "myprog1.c"" and "#include "mainhead.h"", and that myprog2.c
- includes myprog2.h and mainhead.h. The Makefile describing all
- of this is
-
- myprog.exe: myprog1.o myprog2.o
- gcc -o myprog.exe myprog1.o myprog2.o
-
- myprog1.o: myprog1.c myprog1.h mainhead.h
- gcc -c myprog1.c
-
- myprog2.o: myprog2.c myprog2.h mainhead.h
- gcc -c myprog2.c
-
- The first line shows that myprog.exe depends on myprog1.o and
- myprog2.o. If either of those has changed since the last time
- make was invoked, make will relink them to create myprog.exe by
- giving the command under the first line. The fourth line shows
- that myprog1.o depends on myprog1.c, myprog1.h, and mainhead.h.
- If any of these three files have changed since the last time make
- was run, make will recompile myprog1.o by issuing the command on
- line five. It will also realize that myprog.o has changed, that
- myprog.exe depends on myprog.o, and will relink myprog.exe. If
- mainhead.h is changed, make will recompile and relink everything
- since myprog1.o needs to be changed, myprog2.o needs to be
- changed, and thus myprog.exe needs to be changed.
-
- The example above shows the general form of a Makefile. You give
- a target (like "myprog.exe" or "myprog1.o") followed by a colon,
- followed by a space, followed by a space-delimited list of files
- the target depends on. The next line specifies the action to be
- taken when any of the dependencies change: the first character
- MUST be a tab (not just a bunch of spaces used for indentation);
- then you type the command make should issue. A Makefile is just
- a list of such targets, dependencies, and actions.
-
- 5.0 WHERE TO GET MORE INFORMATION
-
- The GNU C and C++ software-development system does not come with
- documentation like that you would get with, for example, Borland
- C++. However, emxdev.doc (in the emx\doc directory) does contain
- a complete list of library functions, including a list of headers
- you need to include, what the functions do, and what parameters
- they accept.
-
- Also, since the C compiler is ANSI C compliant (or at least close
- to it) and since the C++ compiler is very close to AT&T C++ 2.0,
- you can use just about any ANSI C and AT&T C++ 2.0 reference
- manuals. I use the ones I got with an old version of Borland
- Turbo C++. If you don't have such manuals, you should be able to
- find something suitable in a bookstore. If you want a C
- reference manual, I recommend C: A Reference Manual, by S. P.
- Harbison and G. L. Steele, Jr. (Prentice-Hall, 1991). If you are
- just learning C or C++, there is a large number of books to
- choose from, and you shouldn't have any trouble finding one that
- is suitable.
-
- For those of you developing applications that use the PM or that
- use special OS/2 functions, the system DOES support almost all of
- the 32-bit OS/2 API functions, including ones for semaphores, PM
- programming, named pipes, threads, etc. See emxdev.doc (in the
- emx\doc directory) for a list of the supported functions. (See
- Appendix 1 for information on an optional package that enables
- you to use the IBM OS/2 2.0 tool kit for accessing 16-bit API
- calls.) The documentation does not contain a manual on how to
- use these API calls -- you need an OS/2 programming book for
- that. For information on programming the PM, take a look at OS/2
- 2.0 Presentation Manager GPI: A Programming Guide to Text,
- Graphics, and Printing, by G. C. E. Winn (Van Norstrand Reinhold,
- 1992); or Learning to Program OS/2 2.0 Presentation Manager by
- Example: Putting the Pieces Together, by Stephen Knight (Van
- Norstrand Reinhold, 1992). [I will add more titles when I find
- out more information. Does anyone have recommendations for books
- on the OS/2 API in general, not just the PM?]
-
- Also, way back when you were unarchiving, you might have been
- itching to examine the various readme files and other
- documentation. Now is the time to do that to your heart's
- content. Browse through the files in the emx/doc directory and
- the information available from the hypertext reader.
-
- Additional sources of information include GEnie (the OS/2
- category of the IBMPC bulletin board), Usenet news (the
- comp.os.os2 newsgroups), and CompuServe. These are places where
- you can exchange information with other people who use and
- program for OS/2. In particular, CompuServe is one of the
- official homes for the OS/2 developers' assistance program. If
- you are a member of the program, IBM will (for only $15) provide
- you with a CD that contains a beta version of the software
- development kit (including the C compiler and debugger and a full
- set of on-line documentation), a beta version of OS/2 (which
- contains enhancements such as Windows 3.1 compatibility), and
- many other goodies. For more information, type "go os2dap" on
- CompuServe or call 1-407-982-6408. The people at 1-800-3-ibm-os2
- might also be able to provide more information.
-
- 6.0 CONCLUSIONS
-
- I wrote this to help people get started with a free -- yet
- powerful -- 32-bit C and C++ software-development system for
- OS/2. For (at most) the price of a couple of books, you have a
- full C and C++ programming system. For the additional price of
- an OS/2 programming book, you have a bargain-basement SDK.
-
- If you find errors in this document, or if you have suggestions
- for its improvement, please let me know. My GEnie address is
- "BROOKE", and my Internet address is "brooke@hope.caltech.edu".
-
- APPENDIX 1: OPTIONAL PACKAGES
-
- There are four optional packages you can get for this
- software-development system, packages which are not necessary but
- which can nevertheless be important.
-
- The first package contains curses. Curses is a library of
- functions that allow you to move the cursor around on the screen,
- manipulate screenfuls of text, and get input. You need the files
- "bsddev.zip" and "bsddoc.zip". The source code is available in
- "bsdsrc.zip". On ftp-os2.nmsu.edu, these files are available in
- pub/os2/2.0/programming/emx-0.8e.
-
- The second package contains emacs, the GNU programmer's editor.
- I don't like emacs, as it is too complicated for my taste.
- Nevertheless, as mentioned earlier, this is one of the two most
- popular editors for UNIX, and it is very popular on many other
- operating systems as well. An interesting feature of GNU emacs
- is that you can use it to interact both with the info files (the
- ones used by the hypertext reader) and with the debugger. This
- latter ability provides fully-interactive debugging, similar to
- what MicroSoft's CodeView or Borland's Integrated Development
- Environment offers. To use emacs, you need the files
- "emacs1.zip" (which contains main files), "emacs2.zip" (which
- contains more main files), "emacsp1.zip" (which contains a bug
- fix), "emacsp2.zip" (which contains another bug fix),
- "emacsdoc.zip" (which contains information on installing emacs),
- "emacsman.zip" (which contains information on using emacs),
- "emacs08e.zip" (which contains a patch so that emacs works with
- emx-0.8e), and "emacsinf.zip" (which contains info files). The
- source code is available in "emacssrc.zip" and "emacspat.zip".
- On ftp-os2.nmsu.edu, these files are available in
- pub/os2/2.0/gnu/emacs.
-
- The third is a package that allows you to use IBM's OS/2 tool kit
- for accessing 16-bit API calls. You still have to buy the tool
- kit from IBM, but it is not very expensive. (In fact, currently,
- if you join IBM's developers' assistance program, you can -- for
- only $15 -- get a CD containing lots of goodies including the
- tool kit. See the end of Section 5.0 for more information.) The
- package consists of the file "emx16bit.zip". On
- ftp-os2.nmsu.edu, this file is currently available in pub/uploads
- but will soon be moving to
- pub/os2/2.0/programming/emx-0.8e/contrib.
-
- The fourth package contains full source code to the
- software-development system. Most people do not need the source
- code to everything, but the source code to the libraries (i.e.,
- to all the functions) is sometimes useful. The source code to
- the C libraries is in "emxlib.zip", and the source to the C++
- libraries is in "gccsrc.zip". install.doc (in the emx\doc
- directory) gives the names of all the other relevant archives.
- They are available on ftp-os2.nmsu.edu in
- pub/os2/2.0/programming/emx-0.8e and on
- rusinfo.rus.uni-stuttgart.de in pub/os2/emx-0.8e. GEnie has only
- the source code to the libraries.
-
- APPENDIX 2: SOURCES OF DISTRIBUTION
-
- This document already described some places from which you can
- get the necessary archives: ftp-os2.nmsu.edu,
- rusinfo.rus.uni-stuttgart.de, GEnie, and perhaps CompuServe and
- other on-line services. However, some people don't have access
- to these sites, don't have modems fast enough to download
- megabytes of data in a reasonable amount of time, or can't afford
- the charges which they might incur by downloading from on-line
- services. For these people, I am including the following list of
- people willing to distribute the whole system through regular
- mail. Keep in mind that people might change their prices, cease
- distributing the software, move, etc., so contact them first to
- get current details. Make sure you ask them if they have the
- latest version of the EMX port (which is currently version 0.8e).
-
- Brooke Anderson
- 1155 E. Del Mar #312
- Pasadena, CA 91106
- USA
- Phone: (818) 577-7555
- GEnie: BROOKE
- Internet: brooke@hope.caltech.edu
- Cost: $18 in US; in other countries, disks + shipping + US$5
-
- Juergen Egeling
- Werderstr. 41
- 7500 Karlsruhe
- Germany
- Phone: 0721-373842
- FAX: 0721-373842
- BITNET: ry90@dkauni2
- Internet: ry90@ibm3090.rz.uni-karlsruhe.dbp.de
- X.400: S=ry90;OU=ibm3090;OU=rz;P=uni-karlsruhe;A=dbp;C=de
- Cost: disks + shipping + DM 25
-
- Wey J. Ho
- Department of Physics
- Monash University (Caulfield Campus)
- PO Box 197
- Caulfield East
- VIC 3145
- Australia
- Phone: +613-573-2567 (or local (03) 573 2567)
- FAX: +613-573-2350 (or local (03) 573 2350)
- Internet: sci240s@monu6.cc.monash.edu.au
- Cost: disks + shipping + AU$10
-
- Doug Robison
- 1311 Webster
- Chillicothe, MO 64601
- USA
- Phone: (816) 646-1085
- GEnie: D.ROBISON
- Cost: disks + shipping + US$5
-
- If you would like to get on this list and if you have access to
- Internet or an on-line service, just send me your name, a
- description of how people can contact you (including your e-mail
- address), and how much money you want for the job (such as "$20",
- "disks + shipping + $30", or whatever you want to charge). It is
- helpful to have a list that includes people in various countries.
-
-
- The End
-