-@node Development Tools, , Debugging Tools, Top
+@node Development Tools
@appendix Development Tools
Here are some tools that you might find useful while developing code.
@menu
-* Tags::
-* CVS::
-* VNC::
+* Tags::
+* cscope::
+@ifset recommendcvs
+* CVS::
+@end ifset
+@ifset recommendgit
+* Git::
+@end ifset
+@ifset recommendvnc
+* VNC::
+@end ifset
+@ifset recommendcygwin
+* Cygwin::
+@end ifset
@end menu
@node Tags
@kbd{C-x 4 .} in a new window, or @kbd{C-x 5 .} in a new frame. If
your cursor is on a symbol name for any of those commands, it becomes
the default target. If a tag name has multiple definitions, @kbd{M-0
-M-.} will jump to the next one. To jump back to where you were before
+M-.} jumps to the next one. To jump back to where you were before
you followed the last tag, use @kbd{M-*}.
+@node cscope
+@section cscope
+
+The @command{cscope} program also provides an index to functions and
+variables declared in a program. It has some features that tag
+facilities lack. Most notably, it can find all the points in a
+program at which a given function is called.
+
+The @file{Makefile} in @file{pintos/src} produces @command{cscope}
+indexes when it is invoked as @code{make cscope}. Once the index has
+been generated, run @command{cscope} from a shell command line; no
+command-line arguments are normally necessary. Then use the arrow
+keys to choose one of the search criteria listed near the bottom of
+the terminal, type in an identifier, and hit @key{Enter}.
+@command{cscope} will then display the matches in the upper part of
+the terminal. You may use the arrow keys to choose a particular
+match; if you then hit @key{Enter}, @command{cscope} will invoke the
+default system editor@footnote{This is typically @command{vi}. To
+exit @command{vi}, type @kbd{: q @key{Enter}}.} and position the
+cursor on that match. To start a new search, type @key{Tab}. To exit
+@command{cscope}, type @kbd{Ctrl-d}.
+
+Emacs and some versions of @command{vi} have their own interfaces to
+@command{cscope}. For information on how to use these interface,
+visit @url{http://cscope.sourceforge.net, the @command{cscope} home
+page}.
+
+@ifset recommendgit
+@node Git
+@section Git
+
+It's crucial that you use a source code control system to manage your
+Pintos code. This will allow you to keep track of your changes
+and coordinate changes made by different people in the project. For this
+class we recommend that you use Git; if you followed the instructions on
+getting started, a Git repository will already have been created for you.
+If you don't already know how to use Git, we recommend that you read
+the @uref{http://git-scm.com/book, , Pro Git} book online.
+@end ifset
+
+@ifset recommendcvs
@node CVS
@section CVS
as of some given day and time. The version control logs tell you who
made changes and when.
-CVS is not the best version control system out there. However, it's
-free, it's ubiquitous, and it's fairly easy to use. More to the
-point, it's already available on the Leland machines you're using for
-the projects.
+CVS is not the best version control system out there, but it's
+free, it's fairly easy to use, and it's already installed in most
+Unix-like environments.
For more information, visit the @uref{https://www.cvshome.org/, , CVS
home page}.
+@include localcvsinstructions.texi
+@end ifset
+
+@ifset recommendvnc
@node VNC
@section VNC
display system which allows you to view a computing ``desktop''
environment not only on the machine where it is running, but from
anywhere on the Internet and from a wide variety of machine
-architectures. It is already installed on the Leland machines. For
-more information, look at the @uref{http://www.realvnc.com/, , VNC
+architectures. It is already installed on the lab machines.
+For more information, look at the @uref{http://www.realvnc.com/, , VNC
Home Page}.
+@end ifset
+
+@ifset recommendcygwin
+@node Cygwin
+@section Cygwin
+
+@uref{http://cygwin.com/, ,Cygwin} provides a Linux-compatible environment
+for Windows. It includes ssh client and an X11 server, Cygwin/X. If your
+primary work environment is Windows, you will find Cygwin/X extremely
+useful for these projects. Install Cygwin/X, then start the X server
+and open a new xterm. The X11 server also allows you to run pintos while
+displaying the bochs- or qemu-emulated console on your Windows desktop.
+@end ifset
+
+@localdevelopmenttools{}
+