% $Header: syllabus.tex,v 1.1 91/08/22 10:18:16 leavens Exp $
\documentstyle{article}
\nofiles
\input{use-full-page}

\newcommand{\UNIXREF}{{\em Introducing Unix System V}}
\newcommand{\EMACSREF}{{\em GNU Emacs Manual}}
\newcommand{\CREF}{{\em The C Programming Language (second edition)}}
\begin{document}
\noindent
CS/CE 218 --- Unix and C Programming
\hfill \today \\

\begin{center}
{\huge Syllabus}
\end{center}

The following is the schedule of the lecture/discussions,
readings, homeworks, and examinations.
For each reading we will prepare a list of study questions;
these will form the basis of the questions asked in class as
well as any quizzes.

\section{Introduction}

\begin{itemize}
\item
Lecture 1.

	Course specification and red tape.
	Unix philosophy and motivation.

\item
Lecture 2.
Read: Chapter 2 of \UNIXREF.

	Getting started on Unix, passwords, input editing, stty, command
	line format, special characters, reading the manuals.

\item
Lectures 3-4.
Read: Chapter 3 of \UNIXREF.

	Directories and files: hierarchical structure, path names,
	associated commands for directories and files.
	Ownership and protection.

\item
Lecture 5.
Read: Sections 1-3, 8, and the GNU Manifesto in \EMACSREF.

	Emacs and GNU philosophy.
	Model of an editor, emacs, operations associated with buffers, files,
	etc.

\item
Lecture 6.
Do: emacs tutorial.
Read: Section 18 of \EMACSREF

	Advanced features of emacs, modes, reading/sending mail, outlines, etc.
	Keyboard macros, customization of emacs, macros, the emacs ``world.''
\end{itemize}

\section{Software Tools in the Unix Shell}

\begin{itemize}
\item
Lectures 7-9.
Read: Chapter 4 in \UNIXREF.

	Input and output redirection, pipelines, filters, plumbing (tee).
	Background processing and associated commands

\item
Chapter 5 in {\UNIXREF\/} will be discussed in lab and homework.

\item
Lecture 10.
Read: Chapter 6 in \UNIXREF.

	Printing, sorting, grep, simple stream editing,
	using files as databases.

\item
Lecture 11-12.
Read: Chapter 13, sections 13.2-13.5 in \UNIXREF.

	Basics of shell programming: naming shell scripts, variables,
	using commands output in shells, arguments, linkage (path search),
	quotation.
	
\item
Lectures 13.
Read: Chapter 13, sections 13.6 through page 486 in \UNIXREF.

	Looping, if, case, exits, conditionals.

\item
Lectures 14-16.
Read: Chapter 13, from pages 486-505 in \UNIXREF.
	
	Advanced shell programming: dealing with interrupts, cleaning up,
	here documents, environment, functions, examples.
	Customization of shell environment.

\item
Lecture 17.

	Exam, on above not including shell programming.

\end{itemize}

\section{Software Tools in C}

\begin{itemize}
\item
Lecture 18.
Read: Introduction and Chapter 1 of \CREF.

	History and goals of C, overview of syntax, simple examples.
	Comparisons with Pascal.

\item
Lecture 19.
Read: Chapter 2 of \CREF, Section 14.5 in \UNIXREF.

	Basic data types, literals, and operations.
	Simple declarations, type conversions and type checking.

\item
Lecture 20.

	discussion of exam.

\item
Lecture 21.
Read: Chapter 3 of \CREF.

	Control flow, comma operator

\item
Lecture 22.
Read: Chapter 4, Sections 4.1-4.2 and 4.10 of \CREF.

	Functions, declaration, parameter passing.

\item
Lectures 23-25.
Read: Section 14.1 of \UNIXREF,
and sections 4.3-4.6, 4.8-4.9, and 4.11 of \CREF.

	Separate compilation, header files, external declarations.
	Information hiding and modularity: separate compilation,
	abstract data types, preprocessor, conditional compilation.

\item
Lecture 26.

	Exam on shell programming.

\item
Lectures 27-28.
Read: Sections 14.6, 14.4 in \UNIXREF, Unix manual pages (section 1) for
``rcsintro'' and ``ci''.

	Makefiles, use of RCS for maintaining versions of a program.

\item
Lecture 29.

	exam review.

\item
Lectures 30-31.
Read: Chapter 5 of \CREF.

	Pointers and arrays in C

\item
Lectures 36.
Read: Chapter 6 of \CREF.

	Structures, typedefs, and unions.

\item
Lecture 37-38.
Read: Chapters 7 and 8 of \CREF

	Standard I/O library, formatting, file access, strings utilities,
	character utilities, dynamic storage allocation.
	Unix system interface to C programs: file descriptors, low level I/O,
	system calls.

\item
Lectures 39-41

	More examples of software tools, perhaps including a formatter
	for shell procedures (using sed, lex, and/or yacc),
	a makefile dependency generator, a macro processor.
\end{itemize}

\section{Conclusion}

\begin{itemize}
\item
Lecture 42.

	Course summary, unix philosophy, programming environments.
\end{itemize}

\end{document}
