336 Review/Quiz Questions


This informal quiz is to help review the materials we covered during the course - Learning Tree International's Introduction to UNIX (course 336). It is broken up into sections to help jump to the current topics if you are using this as a review during class week.

Jump to: Chapters 1-2 | Chapters 3-4 | Chapters 5-7 | Chapter 8 | Chapters 9-11

The quiz is not "scored". It's intended as a low-pressure way to review some key topics, and maybe learn some new things. When you click an answer choice, a box will pop up with an explanation of why that's the right or wrong choice. Sometimes there may be one than one "correct" answer.

Please don't worry if there are some things you don't get. Some of the questions are intentionally more complex than what we have covered in class. Since this quiz is not part of the class, by looking at it you've already decided to do some extracurricular work, so I feel free to occasionally prod you to see if you can extend the ideas we have talked about a little bit further.

Disclaimer: this is a purely informal quiz of my invention. Learning Tree is not responsible for the content - and errors are entirely my own! There is no intentional relationship to the end-of-course examination, nor is this an "exam prep". Of course, since the topic is basic UNIX, there will coincidentally be some overlap.

This is still a work in progress, let me know if you find errors. If you'd like a copy for your own use, you're welcome: see below for copyright information.


    336 Review Questions covering Chapters 1-2

  1. (Chapter 1) Which statement is true about your UNIX login name?
    a. It can be no longer than 8 characters
    b. It can be as long as you like, but only the first 8 characters matter
    c. It doesn't matter if you type it in upper- or lower-case letters
  2. (Chapter 1) The shell ...
    a. Provides a graphical user interface for UNIX
    b. Reads every character typed on the keyboard and takes care of line-editing keystrokes such as backspace (erase) and line-erase
    c. Is the standard command-line interpreter on UNIX
    d. Can start other programs, but only if they don't need any options
  3. (Chapter 1) Which statement is true? The Linux operating system ...
    a. evolved by extending proprietaty AT&T source code
    b. is an open source, independently written, UNIX work-alike
    c. is a proprietary product of Red Hat Corporation
    d. is a UNIX emulation that runs under Windows NT/2000
  4. (Chapter 2) Most of the UNIX documentation is ...
    a. Available only in printed books due to copyright restrictions
    b. Available by running the info command
    c. Available by running the man command
    d. Available by running the help command
  5. (Chapter 2) Which of the following UNIX filenames would not be legal, and why?
    a. DOGBREEDS because names must be in lowercase
    b. dog.breeds because the filename extension is too long
    c. dog.breeds.old because there are two periods in the name
    d. Dog Breeds because names may not contain a space
    e. None of the above - all of the above filenames are legal in UNIX
  6. (Chapter 2) If you wanted to display detailed information about files, including index numbers, in subdirectory writings, which of the following commands would you pick?
    a. ls -dli
    b. ls -li writings
    c. ls -dli writings
    d. ls -dl writings
    e. ls -i writings
  7. (Chapter 2) Standard UNIX file access modes:
    a. Allow you to specify access permissions to a file or directory for each group and user on the system
    b. Allow you to specify access permissions to a file or directory for the owner, for members of the file's group, and for all other users
    c. Allow you to specify access permissions only for files, not directories
    d. Can only be set by the system administrator (super-user)
    e. Can be changed by any member of the group a file or directory belongs to
  8. (Chapter 2) Consider three filenames reflecting the current copy of your resume:
    resume.010700 and resume.new are (hard) links.
    resume is a symbolic link to resume.new.
    Which statement is false? (it may help to draw a picture of the relationships like in slide 2-22)
    a. If you remove resume.010700, then you can still access your current resume through the name resume
    b. If you remove resume.010700, then you can still access your current resume through the name resume.new
    c. If you remove resume, then you can still access your current resume through the name resume.new
    d. If you remove resume.new, then you can still access your current resume through the name resume
    e. If you remove resume.new, and then make resume.new a hard link to resume.012800, then the name resume will access the contents of resume.012800 rather than resume.010700
  9. (Chapter 2) Which of the following commands would make a hard link from an existing file named resume to a new filename secret?
    a. ln secret resume
    b. ln resume secret
    c. cp -l resume secret
    d. ln -s resume secret
    e. ln -s secret resume
  10. (Chapter 2) If you execute the command
    chmod 123 wknight
    
    on the regular file wknight what will ls -l show as the permissions for the file?
    a. d--x-w--wx
    b. --wx-w---x
    c. -r---w-rw-
    d. ---x-w--wx
  11. (Chapter 2) If your username is sam and are a member of the group staff (hint: run the id command to check on most systems!). You wish to access a file restaurants so you type ls -l restaurants and see the following result:
    -rw-r-----  2 fred     staff       6883 Feb 16 05:30 restaurants
    
    which of the following statements is false?
    a. You are able to view the file contents
    b. The file has more than one name
    c. You know you cannot remove the file
    d. You are not able to modify the file contents
  12. (Chapter 2) You are the new sysadmin of a server which has crashed. You go into the machine room for the first time only to find that the console to the server is an old ASCII terminal without any arrow keys. You bring up the system in single user mode. The only editor available is vi. How do you move up and down line by line most efficiently within a file that you need to edit?
    a. by using the / command
    b. by going back up to your office, telnetting to the box, and using emacs
    c. by using the h j k l keys
    d. by using the :line-number command
  13. (Chapter 2) In vi, how do you end the insert mode?
    a. by hitting the End key
    b. by pressing the i key (lowercase)
    c. by pressing the I key (uppercase)
    d. by pressing the ESC key
  14. (Chapter 2) You bring up the vi editor on file croc and make some changes. Remember - the changes are only made to the buffer until you save them. How would you save this new version into a file named croc.new (i.e. perform a "save-as")?
    a. press ^S and fill in croc.new in the dialog box
    b. from the File menu, select Save As and fill in the new file name
    c. type :w croc.new
    d. type :s croc.new
    e. type :croc.new

  15. Jump to: Chapters 1-2 | Chapters 3-4 | Chapters 5-7 | Chapter 8 | Chapters 9-11

    336 Review Questions covering Chapters 3-4


  16. (Chapter 3) In the Korn shell, how would you repeat the last ls command you ran?
    a. !ls
    b. press the up-arrow key until the command is found, then Enter
    c. hold the Control key and press k until the command is found, then Enter
    d. r ls
  17. (Chapter 3) You have a file named cal.out. What does the following command do in the Korn shell?
    cal 2002 >> cal.out
    
    a. Overwrites cal.out with the output of the command "cal 2002".
    b. Appends the output of the command "cal 2002" to cal.out.
    c. Appends the text "cal 2002" to the end of cal.out.
    d. Overwrites cal.out with the text "cal 2002".
  18. (Chapter 3) The dash (-) character is legal in filenames, but if you give a file a name that begins with dash, it turns out to be very hard to work with: when you give such a file name as arguments to a command like rm, the command mistakes the name for an option (remember options generally start with a dash), not a filename. You should try this out... create a file -foo:
    cal 2001 > -foo
    
    How would you remove this file -foo?
    a. rm -foo
    b. rm ?foo
    c. rm ./-foo
    d. rm *foo
  19. (Chapter 3) Filename wildcards follow the same rule as the ls command in that they don't match "dot files" (files whose name begins with a period) unless you take special steps. If you want to display the contents of your "dot files", but omit the the entries "." and ".." which of the below commands would accomnplish that?
    a. ls .*
    b. more .?*
    c. more .??*
    d. more .[^A--0-^?]*
    e. more .[!.]*
  20. (Chapter 3) How can a job be brought up to the foreground after it has been placed in the background? (Extra material, not in the course!).
    a. With fg.
    b. By killing the job and restarting it in the foreground.
    c. With the process ID number.
    c. With jobs.
  21. (Chapter 4) The /bin directory typically contains:
    a. Library files for programming languages
    b. Command binaries
    c. Subdirectories for spooling and mail
    d. System configuration files
  22. (Chapter 4) On your system, assume home directories are all placed in /usr/people, so your home directory is /usr/people/you. How would you make a hard link to a file named parts in the tools subdirectory of Fred's home directory to a file of the same name in your own tools subdirectory (assume that subdirectory does not already exist)?
    a. mkdir tools; ln fred/tools/parts tools/parts
    b. mkdir tools; ln tools/parts ../fred/tools/parts
    c. cd ../fred; ln tools/parts you/tools/parts
    d. mkdir tools; ln ../fred/tools/parts tools/parts
    e. mkdir tools & ln ../fred/tools/parts tools/parts
  23. (Chapter 4) Assume you are working in the build area for an application you're developing, and you've just gotten a new version of the compiler. You need to remove the object files in the directory tree that comprises the build area, which are all the files with a suffix .o, so that you can recompile them and see if the new compiler version works correctly. You could try:
    rm *.o */*.o */*/*.o
    
    but that's cumbersome and might miss some things (wildcards don't match things beginning with dot, so any directory whose name began with dot would be skipped by the above!). find is the right tool for this job. Which command would do what you want?
    a. find *.o -exec rm {} ';'
    b. find . -name *.o -exec rm {} ';'
    c. find . -name '*.o' -exec rm {} ';'
    d. find . -type .o -exec rm {} ';'
    e. find . -name '*.o' -print | rm
  24. (Chapter 4) Which command would copy all of the files in the current directory to a directory save located in the parent directory (that is, the directory above this one).
    a. cp -a ../save
    b. cp * ../save
    c. cp ../save *.*
    d. cp *.* ../save
    e. cp * parent/save

  25. Jump to: Chapters 1-2 | Chapters 3-4 | Chapters 5-7 | Chapter 8 | Chapters 9-11

    336 Review Questions Covering Chapters 5-7

  26. (Chapter 5) How would you sort the file data and save the changes in the same file?
    a. cat data | sort
    b. sort data
    c. sort data | data
    d. sort data > tmp; mv tmp data
    e. sort data > data
  27. (Chapter 5) What is the filter that selects lines from its input that match a specified pattern?
    a. grep
    b. pat
    c. find
    d. head
    e. tail
  28. (Chapter 5) Given a file of expense items such as the one used in class, where the first field of each line contains a numeric amount and the second an expense category, how many expenses refer to tips?
    a. wc -l grep tips expenses
    b. wc -l expenses | grep tips
    c. cat tips expenses | wc -l tips
    d. grep tips expenses | wc -l
    e. grep expenses tips | tail
  29. (Chapter 5) Who is logged in on terminal ttyp0 on your system? Remember that the who command shows who is logged in.
    a. grep ttyp0 | who
    b. who | grep ttyp0
    c. sort ttyp0 | tail
    d. who | sort -n | tail -1
  30. (Chapter 5) The following command line will do what?
    sed 's/the/da/g' fatherw | sed 's/The/Da/' fatherw
    
    a. Modify fatherw to change all instances of "the" to "da" and all instances of "The" to "Da"
    b. Change all instances of "the" to "da" and all instances of "The" to "Da" in the data read from fatherw and send the result to the standard output stream
    c. Change all instances of "the" to "da" and the first instance on each line of "The" to "Da" in the data read from fatherw and send the result to the standard output stream
    d. Change all instances of "The" to "Da" in the data read from fatherw and send the result to the standard output stream
    e. Change the first instance on each line of "The" to "Da" in the data read from fatherw and send the result to the standard output stream
  31. (Chapter 5) Given a simple flat-file database named hours tracking time allocated to a project, which uses a format consisting of username, project code, date, and time spent in hours, in that order (see example), select the awk command that would correctly extract the fields and print a report:

    Example:

    mats|1307-02|02/02/99|3.5
    
    a. awk '{ print $1 " spent " $4 " hours on project " $2 }' hours
    b. awk -F: '{ print $1 " spent " $4 " hours on project " $2 }' hours
    c. awk -F| '{ print $1 " spent " $4 " hours on project " $2 }' hours
    d. awk -F\| '{ print $1 " spent " $4 " hours on project " $2 }' hours
    e. awk '{ print $1, $4, $2 }' hours
  32. (Chapter 6) Assuming that mats is a user on the system, and home directories are in /home what should the result of the following command be?
    echo cp ~mats/croc ~mats/bunyip ~
    
    a. copies mats' croc file and bunyip file to your home directory
    b. copies mats' croc file to mats' bunyip file, if you have permission
    c. writes cp ~mats/croc ~mats/bunyip ~ to the standard output
    d. writes cp /home/mats/croc /home/mats/buyip /home/you to the standard output
  33. (Chapter 6) Assume you prepare expense reports on your UNIX system, and save each one in a file. To keep track, you keep a list of those which are open (i.e. unpaid) in a file named expenses.open. How could you look at the contents of each of those expense reports by typing a single command?
    a. more expenses.open
    b. cat expenses.open
    c. more ${expenses.open}
    d. more `cat expenses.open`
    e. more $(cat expenses.open)
  34. (Chapter 6) To set a shell variable furbie, then make it available to shell scripts started from this shell, and finally display the value of furbie, which command line accomplishes all three (remember ; is the command separator).
    a. furbie='hi there'; export furbie ; echo $furbie
    b. $furbie='hi there'; export $furbie ; echo $furbie
    c. furbie='hi there'; export furbie ; echo furbie
    d. global furbie ; set furbie='hi there'; echo $furbie
    e. furbie='hi there'; export furbie ; show $furbie
  35. (Chapter 6) If you wanted to run the command ls and save the results in a variable foo, what would the Bourne shell construct look like? (Note: if (b) and (c) look really similar, they're not supposed to; (b) is using forward quotes and (c) is using backward quotes - sometimes the browser picks a font that makes this hard to see!).
    a. foo="ls"
    b. foo='ls'
    c. foo=`ls`
    d. foo=system(ls)
  36. (Chapter 6) In the Korn shell (and related shells), quoting some text with single quotes turns off the special meaning of metacharacters (i.e., characters with special meaning). When the shell reads the command line, as it's turning off special meaning due to quoting, it removes the quote characters so they don't appear in the completed command line. The following metacharacters were covered in the course:
    # & * ? [ ] = | ^ ; < > ` $ " ' \
    
    along with spaces, tabs, and newlines.

    As discussed, double quotes work almost the same way as single quotes, except that variable substitution with $ and command substitution with `` or $() are not quoted, and backslashes still have a special meaning. A backslash escapes the meaning of the next single character. You can use combinations of these to make sure you get the right effect - and while you're getting familiar with how it works, use the echo command to show you what's going on.

    Which command would correctly print out the message:

    Chicago's #1 draft choice will command a big $$ contract
    a. echo Chicago's #1 draft choice will command a big $$ contract.
    b. echo 'Chicago's #1 draft choice will command a big $$ contract.'
    c. echo "Chicago's #1 draft choice will command a big $$ contract."
    d. echo "Chicago's #1 draft choice will command a big '$$' contract."
    e. echo "Chicago's #1 draft choice will command a big \$\$ contract."
  37. (Chapter 6) If you wish to set your shell such that typing the command x will start a new instance of the xterm terminal emulator, which line will enable that behavior?
    a. set x=xterm
    b. xterm=x
    c. alias xterm=x
    d. x=xterm
    e. alias x=xterm
  38. The next two questions are about "regular expressions". These are ways to specify text patterns that you're interested in finding, and possibly replacing (in the case of editors). First, a few comments about regular expressions that may make the concepts easier to think about.

    1. When you think about learning a language, you have to worry about "expressions" - something you can't interpret too literally, but instead must evaluate first. Consider Someone let the cat out of the bag. UNIX regular expressions are a bit like that: you use special characters to specify sequences of characters, which you can't take literally but have to evaluate first. They're actually much easier because they follow well-defined rules, unlike idioms in human languages!!!
    2. Writing regular expressions is pretty similar to writing a computer program. First you need to work out what you want to match, which involves understanding how the patterns appear in the data and how to extract those patterns - and no others (the "specification" step). Then you need to write the pattern ("coding") and then you need to test it out to see if it works ("testing against specification"). These will probably happen iteratively: if testing reveals the pattern isn't working right, you have to revise your pattern, and in some cases you may discover that your "specification" is not complete.
    3. Finally, there are three sorts of regular expression characters. There are anchors, which say where a search takes place. If you leave out the anchor, the search is not constrained, any occurrence of the pattern will do. Second, there are character sets, in other words what to look for, which may be literal characters, wildcards (with the . (dot) character), or sets/ranges (using []). Third, there are modifiers, which change the behavior of the the character they follow. The * character is a modifier.

    Now on to the questions...

  39. (Chapter 7)

    Email programs use a simple format consisting of header lines of the form tag:value where the tag must begin at the beginning of a line. Once the header lines are complete, a blank line indicates the beginning of the message body. UNIX stores email in an ordinary text file. The subject of a message is indicated by a header line with a tag of Subject. Which command would find the subject lines of all messages in a mailbox named mbox, but not other lines that contain the word Subject?

    a. grep 'Subject' mbox
    b. grep -i 'subject' mbox
    c. grep '^Subject:' mbox
    d. grep '$Subject:' mbox
    e. grep ' *Subject:' mbox
  40. (Chapter 7) The * modifier means zero or more of a particular character. Sometimes this is useful, as in checking for (optional) indentation. Sometimes it's a pain, when you want to be sure you have at least one of the pattern. Some tools support + as a one-or-more operator, but not all do. However, it's possible to construct the one-or-more meaning with the basic regular expression set.

    How would you find lines beginning with one or more hash marks (#) in your file farkle and get rid of those hash marks?

    a. sed 's/#//' farkle
    b. sed 's/#*//' farkle
    c. sed 's/^#//' farkle
    d. sed 's/^#*//' farkle
    e. sed 's/^##*//' farkle

  41. Jump to: Chapters 1-2 | Chapters 3-4 | Chapters 5-7 | Chapter 8 | Chapters 9-11

    336 Review Questions Covering Chapter 8

  42. (Chapter 8) Which of the following statements is false when you run a shell script?
    a. A script gets a copy of environment variables set in your interactive shell
    b. A script can change the search path (i.e., the PATH environment variable) for your interactive shell
    c. A script can change directory with cd without that change affecting your interactive shell
    d. A script can access it's own process id (PID) through the special shell variable $$
    e. A script is run by a separate copy of the shell, started just for that purpose
  43. (Chapter 8) A shell script is a collection of instructions to the shell (command interpreter). Assuming that you have tested a set of instructions and already saved them in a file, what is necessary make the script usable?
    a. Install the script in the system script directory
    b. Compile the script with the script compiler
    c. Ask the system adminstrator to enable your script by listing it in /etc/scripts
    d. Make the script executable with chmod
  44. (Chapter 8) Assume that a shell script named bkup is called as follows:
    
    bkup croc fatherw expenses bunyip
    
    How would this script access the expenses argument?
    a. $3
    b. $4
    c. $expenses
    d. $*
    e. $*+2
  45. (Chapter 8) Bonus: (just think about this one, then click for the explanation to see if you thought of the same scheme).
    If you have a bunch of files ending in .foo and you want to rename them all to end in .bar, you can't just do this:
    mv *.foo *.bar
    
    How could you accomplish this bulk renaming? Click here to show an explanation
  46. (Chapter 8) shell compound commands (under construction)
    a. XXX
    b. XXX
    c. XXX
    d. XXX
    e. XXX
  47. (Chapter 8) shell compound commands (under construction)
    a. XXX
    b. XXX
    c. XXX
    d. XXX
    e. XXX
  48. (Chapter 8) shell read command (under construction)
    a. XXX
    b. XXX
    c. XXX
    d. XXX
    e. XXX
  49. Jump to: Chapters 1-2 | Chapters 3-4 | Chapters 5-7 | Chapter 8 | Chapters 9-11

    336 Review Questions Covering Chapters 9-11

  50. (Chapter 9) The standard UNIX security model:
    a. is enforced by access permissions for files in the filesystem
    b. requires encrypted network transmissions
    c. allows no user to kill any other user's processes
    d. suggests that all work should be done logged in as root
  51. (Chapter 9) Superuser has access to all accounts and files with the exception of:
    a. Fields in the /etc/passwd file that contain other users' passwords.
    b. Device driver nodes in /dev, which are automatically maintained by the system itself.
    c. Personal files that were created by and belong to those users.
    d. None of the above, the superuser has access to all of those
  52. (Chapter 9) If you add an account to a Unix machine with a UID of 0, but a GID different from the root account, the account will still have superuser privilges:
    a. True
    a. False
  53. (Chapter 9) The directory writings has the following permissions:
    drwx-wx---  2 jmartin user 3223 Oct  6 11:46 writings
    
    This directory contains a file called poem which has the following permissions:
    -rw------- 1 jmartin work  338 Oct 26 16:20 poem
    
    Laura, whose primary group is user, gets into writings and modifies a copy of poem. How is this possible?
    a. As a member of the user group Laura has write and execute permission for writings. Because she knew the name of the file she wanted and she was able to make a copy of it and modify the copy.
    b. Laura must also be a member of the work group and able to do a chmod on the permissions for poem.
    c. As a member of the user group Laura has write and execute permission for writings. Because names of files are stored in the directory rather than in the file Laura was able to find the file she wanted and copy it.
    d. Laura must have had superuser privileges because poem is owned by jmartin and only the owner has read or write privileges for the file.
    e. Laura used the used the write and execute permissions that she has for writings to turn on a special atttibute called the "sticky bit" so that she could modify poem.
  54. (Chapter 9) Creating a user account manually on a system without shadow passwords involves:
    a. Editing /etc/passwd, /etc/group, creating home directory, changing home directory ownership, copying startup files to home directory, setting initial password.
    a. Editing /etc/shadow, /etc/group, creating home directory, changing home directory ownership, copying startup files to home directory, setting initial password.
    a. Editing /etc/shadow, /etc/group, creating home directory, copying startup files to home directory, setting initial password.
  55. (Chapter 9) What command do you use to convert a plain password system into a shadow system?
    a. pwconv
    b. cpasswd
    c. convpw
    d. cp /etc/passwd /etc/shadow
  56. (Chapter 9) Which of the following corresponds to a disk device node?
    a. /dev/rsd0a
    b. /dev/tty00
    c. /dev/null
    d. /dev/rmt0h
  57. (Chapter 9) The command used to make a new filesystem is:
    a. fscreat
    b. hinv
    c. mkfs
    d. format
  58. (Chapter 9) Complete this sentence: when a file system is mounted on a mount point (existing directory),
    a. The contents of the mount point are temporarily unavailable until the file system is unmounted
    b. The contents of the mount point are physically copied into the mounted file system's root
    c. The contents of the mount point are not physically combined with the root of the mounted file system, but the system makes it appear that way
    d. The contents of the mount point are permanently deleted
  59. (Chapter 10) Which command would copy the file named croc in your current directory to your home directory on machine ltree17?
    a. rcp ltree17:croc croc
    b. rcp croc ltree17:croc
    c. rcp croc croc@ltree17
    d. rcp croc@ltree17 croc
    e. rcp croc home@ltree17:croc
  60. (Chapter 10) mailx in script (Chapter 10) On your server, there is a list of administrators stored in /etc/local.admins. Here is a shell script, intended for installation in a cron entry, which generates a list of other-writable files in /home. To complete the script, pick the line Which will email the results to the administrators.
    #!/bin/ksh
    find /home -perm -002 -print > /tmp/list.$$
    if [ ! -s /tmp/list.$$ ]
    then
        ...Pick the line that goes here...
    fi
    rm /tmp/list.$$
    
    a. mailx "report from $(date) /etc/local.admins < /tmp/list.$$
    b. cat /tmp/list.$$ | mailx -s "report from $(date)" $(cat /etc/local.admins)
    c. mailx -r $(cat /etc/local.admins) "report from $(date)" < /tmp/list.$$
    d. mailx -s "report from $(date)" /tmp/list.$$ < $(cat /etc/local.admins)
    e. cat /tmp/list.$$ | mailx -s "report from $(date)" < $(cat /etc/local.admins)
  61. (Chapter 11) Which command would place a new xclock window in the upper right corner, offset a few pixels from the corner?
    a. xclock -geometry +8+8 &
    b. xclock -geometry +8-8 &
    c. xclock -geometry -8+8 &
    d. xclock -geometry -8-8 &
  62. (Chapter 11) X Display Which command would run a command xbill on the current machine, but send the window for that command on machine ltree25's first display screen?
    a. rsh ltree25 xbill -screen 0
    b. display xbill @ltree25:0
    c. xbill -screen 0 -host ltree25
    d. xbill -display ltree25:0

Jump to: Chapters 1-2 | Chapters 3-4 | Chapters 5-7 | Chapter 8 | Chapters 9-11

Copyright © 2000-2001 Mats Wichmann. All rights reserved to the copyright holder. The copyright holder hereby grants the following rights: these materials (web page, software methods, and descriptions) may be freely copied and modified providing that the original credits are retained, but excepting that this software may not be incorporated into any other professional training program without express written consent of the copyright holder. Submissions for inclusion are welcome, provided that they do not by reason of their inclusion impose any additional restrictions on the use and distributon of these materials. Please e-mail all corrections, requests or submissions to m.wichmann@ieee.org

To insure that the latest copy is in use, please check http://laplaza.org/~mats/courses/review336.html. The "source code" also includes a JavaScript file containing the pop-up answers and explanations. The source can be obtained as a zipfile at http://laplaza.org/~mats/courses/review336.zip.