\newpage
\section{System Maintainer's Guide}

   \NEWOL\ reads three files upon commencing execution:  
(i) a configuration file
that sets the run-time user preferences (display style, refresh mode,
cell/file menu environment, etc.),
(ii) a technology
file that binds menu layer names, cif layer names, and display styles
to menu squares in the LAYER menu, and
(iii) a message-of-the-day file for posting news to users.
In addition, other files used by WOL include:
(i) a DRC rules file,
(ii) a log file for monitoring DRC use,
(iii) a log file for monitoring extractor use,
(iv) a gripe file to report bugs,
(v) an improvements file to report suggestions.

\subsection{Configuration files}

   \NEWOL\ searches for a \index{configuration files}configuration file
{\tt INFO.WOL}\index{INFO.WOL} in the current directory, then if none is
found, in the user's home directory, and lastly in the /LIB/WOLLIB
directory.  The form of the configuration file is:

{\tt
\begin{verbatim}
TECHNOLOGY:  SCGE
LAMBDA:  1.50
DISPLAY STYLE:  1
CELL NAME PROMPTING:  OFF
FILE NAME PROMPTING:  ON
EDGE-PRIORITY SELECTION:  OFF
AUTO-REFRESH:  ON
DISPLAY BOUNDING BOXES:  ON
DISPLAY PORTS:  OFF
MANHATTAN ROUTING:  ON
FLESHED-OUT ROUTING:  ON
BACKGROUND COLOR:  0
MEMORY THRESHOLD:  300000
DISABLE HEIRARCHY:  OFF
POINT-TO-POINT MOVE:  OFF
  
Written by WOL ‹1.08ˆ  May 13 1987  4:04 pm
User:  CARVER
\end{verbatim}}

These files are created by the CNFG command, and are order- and
case-insensitive.


\subsection{\NEWOL\ Technology Files}

   The \putindex{technology file} binds CIF layer names to internal layer
   numbers, and these numbers to menu squares, display styles, etc.  This
   file is named {\tt $<$technology$>$.WOL}, and is searched for in the
   current directory, then in the system library.

   A sample technology file is contained in /LIB/WOLLIB/SCG.WOL,
   and is reproduced below:

{\footnotesize \tt
\begin{verbatim}

#
#      WOL TECHNOLOGY FILE FOR MOSIS GENERIC GROUNDED SUBSTRATE
#             CMOS BULK PROCESS.   DEC. 7, 1987  MAS
#
#
# File format:
#   layer:  NUMBER  MENU-NAME  CIF-NAME
#   display: DISP-NUMBER  MENU-NAME:  DEFERRED(for cuts) BOUNDARY-COLOR
#            BOUNDARY-STYLE  FILL-COLOR  FILL-STYLE  MENU-SQUARE
#   plotter: MENU-NAME:  BOUNDARY-COLOR  BOUNDARY-STYLE  FILL-COLOR  FILL-STYLE
#   cmap:    COLOR  RED-VALUE  BLUE-VALUE  GREEN-VALUE
#   pattern: PAT-NUMBER ROWS&COLS VALUES...
#
#   Magic pattern numbers:
#        0 - solid fill with fill color
#       -1 - no fill
#       -2 - draw 'X' in box
#       -3 - draw 'X' in box, but black out box first
#    1..?? - user-specified bit patterns (ignores fill-color)
#
layer:  1   POLY   LCPG
  display: 0 POLY FALSE 1  0  0 -1  1
  display: 1 POLY FALSE 1  0  1  0  1
  display: 2 POLY FALSE 1  0  1  0  1
  display: 3 POLY FALSE 1  0  1  0  1
  plotter: POLY 1  0  0 -1

layer:  2   DIFF  LCAA
  display: 0 DIFF FALSE 2  0  0 -1  2
  display: 1 DIFF FALSE 2  0  2  0  2
  display: 2 DIFF FALSE 2  0  2  0  2
  display: 3 DIFF FALSE 2  0  2  0  2
  plotter: DIFF 2  0  0 -1

layer:  3   METAL   LCMF
  display: 0 METAL FALSE 4  0  0 -1  3
  display: 1 METAL FALSE 4  0  4  0  3
  display: 2 METAL FALSE 4  0  4  0  3
  display: 3 METAL FALSE 4  0  4  0  3
  plotter: METAL 3  0  0 -1

layer:  4   WELL   LCWG
  display: 0 WELL FALSE 3  0  0  -1  4
  display: 1 WELL FALSE 3  0  0   1  4
  display: 2 WELL FALSE 3  0  0   1  4
  display: 3 WELL FALSE 3  0  0  -1  4
  plotter: WELL 6 0 0 -1
  pattern: 1 8 3 T T T T T T T

layer:  5   CUTP   LCCP
  display: 0   CUTP FALSE 7 0 1 -2 5
  display: 1   CUTP TRUE  7 0 1 -3 5
  display: 2   CUTP TRUE  7 0 1  0 5
  display: 3   CUTP TRUE  7 0 1 -3 5
  pattern: 2 4 7070 0707 7070 0707
  plotter:  CUTP 4 0 0 -1

layer:  6   CUTA   LCCA
  display: 0   CUTA FALSE 7 0 2 -2 6
  display: 1   CUTA TRUE  7 0 2 -3 6
  display: 2   CUTA TRUE  7 0 2  0 6
  display: 3   CUTA TRUE  7 0 2 -3 6
  pattern: 2 4 7070 0707 7070 0707
  plotter:  CUTA 4 0 0 -1

 layer:  7   GLASS   LCOG
   display: 0   GLASS FALSE 6 2 6 -1 7
   display: 1   GLASS FALSE 6 2 6 -2 7
   display: 2   GLASS FALSE 6 2 6 -2 7
   display: 3   GLASS FALSE 6 2 6 -1 7
   plotter:  GLASS 8 0 0 -1

layer:  8   MET2   LCMS
  display: 0   MET2 FALSE 15 2 0 -1 8
  display: 1   MET2 FALSE 15 0 8  0 8
  display: 2   MET2 FALSE 15 0 8  0 8
  display: 3   MET2 FALSE 15 0 8  0 8
  plotter: MET2 4 0 0 -1

layer:  9   SEL   LCSG
  display: 0   SEL FALSE  6 0 0 -1 9
  display: 1   SEL FALSE  6 0 0  3 9
  display: 2   SEL FALSE  6 0 0  3 9
  display: 3   SEL FALSE  6 0 0 -1 9
  pattern: 3 8 T T T T TTTT6 T T T
  plotter:  SEL 8 0 0 -1

layer: 10  VIA  LCVA
  display: 0  VIA FALSE 7 2 0 -1 10
  display: 1  VIA FALSE 7 0 7  0 10
  display: 2  VIA TRUE  7 0 0  4 10
  display: 3  VIA TRUE  7 0 7  0 10
  pattern: 4 4 FTFT TFTF FTFT TFTF
  plotter: VIA 4 0 0 -1

layer:  13   CUT   LCCC
  display: 0   CUT FALSE 7 0 7 -2 0
  display: 1   CUT TRUE  7 0 7 -3 0
  display: 2   CUT TRUE  7 0 7  0 0
  display: 3   CUT TRUE  7 0 7 -3 0
  pattern: 2 4 7070 0707 7070 0707
  plotter:  CUT 4 0 0 -1


layer: 14  ERROR LERR
  display: 0  ERROR FALSE 7 0 7  0 0
  display: 1  ERROR FALSE 7 0 7  0 0
  display: 2  ERROR FALSE 7 0 7  0 0
  display: 3  ERROR FALSE 7 0 7  0 0
  plotter: ERROR 7 0 0 -1

layer: 15  BOUND MBB
  display: 0  BOUND FALSE 5 0 0 -1 0
  display: 1  BOUND FALSE 5 0 0 -1 0
  display: 2  BOUND FALSE 5 0 0 -1 0
  display: 3  BOUND FALSE 5 0 0 -1 0
  plotter: BOUND 7 0 0 -1

layer: 16  COMP LCX
  display: 0  COMP FALSE 7 0 0 -1 0
  display: 1  COMP FALSE 7 0 0 -1 0
  display: 2  COMP FALSE 7 0 0 -1 0
  display: 3  COMP FALSE 7 0 0 -1 0
  plotter: COMP 8 0 0 -1

layer: 17  SELKT SEL
  display: 0  SELKT FALSE 15 0 0 -1 0
  display: 1  SELKT FALSE 15 0 0 -1 0
  display: 2  SELKT FALSE 15 0 0 -1 0
  display: 3  SELKT FALSE 15 0 0 -1 0
  plotter: SELKT 5 0 0 -1

cmap:  0  3  3  3
cmap:  1 15  0  0
cmap:  2  0 15  0
cmap:  3 15 15  0
cmap:  4  0  0 15
cmap:  5 15  0 15
cmap:  6  0 15 15
cmap:  7 15 15 15
cmap:  8  0  0  0
cmap:  9  8  0  0
cmap: 10  0  8  0
cmap: 11  8  8  0
cmap: 12  0  0  8
cmap: 13  8  0  8
cmap: 14  0  8  8
cmap: 15  8  8  8

\end{verbatim}}

Note that all layers with non-zero menu square numbers will have squares
allocated in the various LAYERS menus.  The other layers are internal layers,
which the user is not permitted to draw in.  The permissible range of
layer numbers in \NEWOL\ is currently from 1 to 18.

\subsection{Message-of-the-day file}

  The \putindex{message-of-the-day file} is printed to the screen when
\NEWOL\ is first started, unless the ``-q'' flag was specified on the
command-line.  This file is called {\tt MOTD.WOL} and is searched for
in the current directory and the system library directory.  It provides
a convenient mechanism to inform users of new changes, etc.  By convention,
the old MOTD files have been amalgamated into {\tt /LIB/WOLLIB/MOTD.OLD}.

\subsection{\putindex{DRC rules file}}

Upon every invocation, the DRC reads a configuration file of rules.
This file is called {\tt $<$technology$>$.drc}, and is searched for
in (i) the current directory, (ii) the user's home directory,
and, failing these, (iii) in the system library directory (/LIB/WOLLIB).
The syntax of the configuration file is the following:
{\tt
\begin{tabular}{ll}
   {\tt width A dist}  & layer A must be {\em dist} wide\\
   {\tt separation A B dist} & A and B must be {\em dist} apart \\
   {\tt separation2 A B C dist} & A within B must be {\em dist} from C \\
   {\tt overlap A B dist} & A must surround B by {\em dist} \\
   {\tt overlap2 A B C dist} & A within B must be surrounded by C by {\em dist}
\end{tabular}
}

\subsection{Performance \putindex{log files}}

  Two files, {\tt \putindex{XTR.LOG}} and {\tt \putindex{DRC.LOG}} are
maintained in the system library directory.  These are intended as aids to
monitoring the performance of the system with regards to several parameters
under the control of the program maintainer (see the source of the
extractor and design rule checker for more information).  These files
should be truncated (NOT deleted) periodically, to conserve disk space.

\subsection{User-feedback files}

  Two files, {\tt \putindex{GRIPES.WOL}} and {\tt \putindex{IDEAS.WOL}}
are maintained in the system library directory.  The GRIPES file contains
bug reports contributed by users, and the status of the bugs as reported
by the system maintainer.  The IDEAS file contains user suggestions
regarding improvements for \NEWOL.  These are accessed by the user
by typing \^G and \^W, respectively.

\subsection{Other files}

The composition buffer PLOT command reads a file LABELS.TEXT in the
current directory, which contains the (x,y) position (in lambda, with a
space separating them) of a string to plot.

The PORTS command in the OPTS menu creates creates a file PORTS.WOL that
contains the (heirarchical) portnames of all instanced cells, as well as
their absolute (x,y) coordinates (in lambda, with (0,0) in the lower left
corner of the chip).  This is primarily useful for interfacing with an
external router.

\subsection{\NEWOL's CIF dialect}

\NEWOL's CIF parser is capable of interpreting only a highly stylized
version of CIF.  Unfortunately, when something goes wrong, it is not very
good at reporting what the problem {\em really is}.

\subsubsection {Whitespace in CIF}

  The CIF standard specifies that only uppercase letters, numbers,
parentheses, minus signs and semicolons are significant; all other
characters are to be ignored.  In particular, commas between pairs of
numbers should be treated as spaces.  \NEWOL's parser requires
blanks in these positions.

\subsubsection {Encoding $\lambda$ in cell definitions}

  The form of a cell definition is {\tt DS 1 150 2 ;}  the ``150''
is the size of lambda in 1/100$^{th}$s of microns.  \NEWOL\ {\em assumes}
the last number to be a 2.

\subsubsection {Non-freeform input}

\NEWOL\ requires each CIF command to start on a new line, in column 1.

\subsubsection {LAYER commands}

\NEWOL's parser treats the layer command (``L'') and the subsequent layer
name as a SINGLE token.  Therefore, there can be no space between the
L and the name.

\subsubsection {Transformations}

\NEWOL\ only parses certain transformations correctly.  The list of
acceptable transformations, and their form, is:

{\tt
\begin{verbatim}
C 1 T 0 56;                -  untransformed
C 1 MX T 36 0;             -  mirrored in X
C 1 MX R 0 1 T 86 42;      -  mirrored in the line Y=-X
C 1 R 0 1 T 86 62;         -  rotated by 90
C 1 R -1 0 T 124 104;      -  rotated by 180
C 1 R 0 -1 T 126 98;       -  rotated by 270
C 1 MX R -1 0 T 88 48;     -  mirrored in Y
C 1 MX R 0 -1 T 126 6;     -  mirrored in the line Y=X
\end{verbatim}}

