changeset 3280:46b82fca02fc

[project @ 1999-10-12 17:04:44 by jwe]
author jwe
date Tue, 12 Oct 1999 17:04:45 +0000
parents 6dd06d525de6
children aaaa20d31a5f
files scripts/control/MakeControlOct scripts/control/OCSTreport scripts/control/csrefcard.lt scripts/control/install-ocst
diffstat 4 files changed, 2132 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/control/MakeControlOct	Tue Oct 12 17:04:45 1999 +0000
@@ -0,0 +1,94 @@
+%.oct : %.cc $(OCT_LIBS) ocst.h
+	@echo "making $@ from $<"
+	mkoctfile $<  -locst -lm
+
+%.o : %.cc ocst.h
+	@echo "making $@ from $<"
+	mkoctfile $<
+	rm -f $*.oct
+
+OCT_FILES = abcddim.oct \
+	fir2sys.oct \
+	ss2sys.oct \
+	tf2sys.oct \
+	zp2sys.oct \
+	#sysout.oct \
+	zgsgiv.oct
+
+OCST_LIB = get_complex_vector.o  \
+	get_matrix.o \
+	get_real_scalar.o  \
+	get_string_matrix.o  \
+	get_string.o  \
+	get_vect.o \
+	pack.o \
+	sysdefioname.o \
+	sysdefstname.o
+
+OCT_LIBS=
+
+all: $(OCT_LIBS) $(OCT_FILES)
+	@echo ""
+	octave
+
+libocst.so: $(OCST_LIB)
+	gcc -fPIC -shared -R/opt/octave/lib -o libocst.so.1 $(OCST_LIB)
+	cp libocst.so.1 /opt/octave/lib
+	rm -f /opt/octave/lib/libocst.so
+	ln -s /opt/octave/lib/libocst.so.1 /opt/octave/lib/libocst.so
+	rm -f ./libocst.so
+	ln -s ./libocst.so.1 ./libocst.so
+
+ABCDDIM_DEP= abcddim.cc \
+	zero_matrix.o
+abcddim.oct: $(ABCDDIM_DEP) ocst.h
+	mkoctfile $(ABCDDIM_DEP)
+
+FIR2SYS_DEP= fir2sys.cc \
+	get_real_scalar.o \
+	get_string.o \
+	get_vector.o \
+	pack.o 
+fir2sys.oct: $(FIR2SYS_DEP) ocst.h
+	mkoctfile $(FIR2SYS_DEP)
+
+SS2SYS_DEP= ss2sys.cc \
+	$(ABCDDIM_DEP) \
+	add_name.o \
+	get_matrix.o \
+	get_real_scalar.o \
+	get_string_matrix.o \
+	get_vector.o \
+	pack.o \
+	sysdefioname.o \
+	sysdefstname.o  
+ss2sys.oct: $(SS2SYS_DEP) ocst.h
+	mkoctfile $(SS2SYS_DEP)
+
+SYSOUT_DEP= sysout.cc
+sysout.oct: $(SYSOUT_DEP) ocst.h
+	mkoctfile $(SYSOUT_DEP)
+
+TF2SYS_DEP= tf2sys.cc \
+	get_real_scalar.o \
+	get_string.o \
+	get_vector.o \
+	pack.o 
+tf2sys.oct: $(TF2SYS_DEP) ocst.h
+	mkoctfile $(TF2SYS_DEP)
+
+ZGSGIV_DEP=zgsgiv.cc
+zgsgiv.oct: $(ZGSGIV_DEP) ocst.h
+	mkoctfile $(ZGSGIV_DEP)
+
+ZP2SYS_DEP= zp2sys.cc \
+	get_complex_vector.o \
+	get_real_scalar.o \
+	get_string.o \
+	pack.o 
+zp2sys.oct: $(ZP2SYS_DEP) ocst.h
+	mkoctfile $(ZP2SYS_DEP)
+
+clean:
+	rm -f *.o *.oct *.a *.so *.so.1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/control/OCSTreport	Tue Oct 12 17:04:45 1999 +0000
@@ -0,0 +1,318 @@
+
+###############################################################################
+#                                                                             #
+#  report                                                                     #
+#                                                                             #
+#  Lout setup file for technical reports.                                     #
+#                                                                             #
+#  Jeffrey H. Kingston                                                        #
+#  12 September 1994                                                          #
+#                                                                             #
+###############################################################################
+
+
+###############################################################################
+#                                                                             #
+#  @SysInclude commands for standard packages.                                #
+#                                                                             #
+###############################################################################
+
+  @SysInclude { fontdefs }			  # font definitions
+  @SysInclude { langdefs }			  # language definitions
+  @SysInclude { dl }				  # DocumentLayout package
+  @SysInclude { reportf }			  # ReportLayout extension
+  @SysInclude { tab }				  # @Tab table formatter
+# @SysInclude { eq }				  # @Eq equation formatter
+# @SysInclude { fig }				  # @Fig advanced graphics
+# @SysInclude { graph }				  # @Graph graph drawing
+# @SysInclude { cprint }			  # @CPrint C and C++ programs
+# @SysInclude { pas }				  # @Pas Pascal programs
+
+
+###############################################################################
+#                                                                             #
+#  @Include command for reading personal definitions from current directory.  #
+#                                                                             #
+###############################################################################
+
+  @Include { mydefs }
+
+
+###############################################################################
+#                                                                             #
+#  The @DocumentLayout @Use clause - overall document format options.         #
+#                                                                             #
+###############################################################################
+
+@Use { @DocumentLayout
+  # @InitialFont	{ Times Base 12p	} # initial font
+  # @InitialBreak	{ adjust 1.20fx hyphen	} # initial break
+  # @InitialSpace	{ lout			} # initial space style
+  # @InitialLanguage	{ English		} # initial language
+  # @InitialColour	{ black			} # initial colour
+  # @OptimizePages	{ No			} # optimize page breaks?
+  # @HeadingFont	{ Bold			} # font for @Heading
+  # @ParaGap		{ 1.30vx		} # gap between paragraphs
+  # @ParaIndent		{ 2.00f			} # first-line indent for @PP
+  # @DisplayGap		{ 1.00v			} # gap above, below displays
+  # @DisplayIndent	{ 2.00f			} # @IndentedDisplay indent
+  # @DefaultIndent	{ 0.5rt			} # @Display indent
+  # @DisplayNumStyle	{ (num)			} # style of display numbers
+  # @WideIndent		{ 4.00f			} # @WideTaggedList indent
+  # @VeryWideIndent	{ 8.00f			} # @VeryWideTaggedList indent
+  # @ListGap		{ 1.00v			} # gap between list items
+  # @ListIndent		{ 0c			} # indent of list items
+  # @ListRightIndent	{ 0c			} # right indent of list items
+  # @ListLabelWidth	{ 2.00f			} # width allowed for list tags
+  @PageType		{ A4			} # page type (width, height)
+  # @PageType		{ Letter		} # page type (width, height)
+  # @PageWidth		{			} # page width if type Other
+  # @PageHeight		{			} # page height if type Other
+  # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+  # @PageBackground	{  			} # background of each page
+  # @TopMargin		{ 2.50c			} # top margin of all pages
+  # @FootMargin		{ 2.50c			} # bottom margin of all pages
+  # @OddLeftMargin	{ 2.50c			} # left margin of odd pages
+  # @OddRightMargin	{ 2.50c			} # right margin of odd pages
+  # @EvenLeftMargin	{ 2.50c			} # left margin of even pages
+  # @EvenRightMargin	{ 2.50c			} # right margin of even pages
+  # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
+  # @PageBoxMargin	{ 1.00c			} # page box margin
+  # @PageBoxLineWidth	{			} # page box line thickness
+  # @PageBoxPaint	{ none			} # page box paint
+  # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
+  # @ColumnNumber	{ 1			} # number of columns (1 to 10)
+  # @ColumnGap		{ 1.00c			} # column gap
+  # @FigureLocation	{ PageTop		} # default figure location
+  # @TableLocation	{ PageTop		} # default table location
+  # @FigureWord		{ figure		} # "Figure" word else anything
+  # @TableWord		{ table			} # "Table" word else anything
+  # @FigureNumbers	{ Arabic		} # method of numbering figures
+  # @TableNumbers	{ Arabic		} # method of numbering tables
+  # @FigureCaptionPos	{ Below			} # Above or Below
+  # @TableCaptionPos	{ Below			} # Above or Below
+  # @CaptionFont        {                       } # figure, table caption font
+  # @CaptionBreak       {                       } # figure, table caption break
+  # @MakeFigureContents { No                    } # list of figures at start
+  # @MakeTableContents  { No                    } # list of tables at start
+  # @MakeContents	{ No			} # make contents? Yes or No
+  # @ContentsGap	{ 0.20v			} # extra gap above minor entry
+  # @ContentsGapAbove	{ 0.80v			} # extra gap above major entry
+  # @ContentsGapBelow	{ 0.00v			} # extra gap below major entry
+  # @ContentsLeader	{ ..			} # leader symbol in contents
+  # @ContentsLeaderGap	{ 4s			} # gap between leaders
+  # @ContentsRightWidth	{ 3f			} # page numbers column width
+  # @MakeReferences	{ Yes			} # make references? Yes or No
+  # @RefCiteStyle	{ [cite]		} # citation style
+  # @RefCiteLabels	{ @RefNum		} # citation items
+  # @RefNumbers		{ Arabic		} # reference numbers
+  # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
+  # @RefListLabels	{ [@RefNum]		} # ref list label format
+  # @RefListTitle	{ references		} # title of reference list
+  # @ChapRefListTitle	{ references		} # title of chapter ref list
+  # @RefListIndent	{ 0c			} # indent to left of labels
+  # @RefListRightIndent	{ 0c			} # indent to right of items
+  # @RefListGap		{ 1.00v			} # gap between ref list items
+  # @RefListFont	{        		} # font used in reference list
+  # @RefListBreak	{        		} # break style of ref list
+  # @RefListLabelWidth 	{ 2.00f			} # Labels column width
+  # @RefListSortKey	{ @Tag			} # sorting key
+  # @MakeIndex		{ No			} # make index? Yes or No
+  # @IndexFont		{			} # index entries font
+  # @IndexBreak		{ outdent 1.2fx		} # index entries break
+  # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+  # @IndexColumnGap	{ 1.00c			} # index column gap
+  # @MakeIndexA		{ No 			} # make index A? Yes or No
+  # @IndexAFont		{			} # index A entries font
+  # @IndexABreak	{ outdent 1.2fx		} # index A entries break
+  # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
+  # @IndexAColumnGap	{ 1.00c			} # index A column gap
+  # @MakeIndexB		{ No 			} # make index B? Yes or No
+  # @IndexBFont		{			} # index B entries font
+  # @IndexBBreak	{ outdent 1.2fx		} # index B entries break
+  # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
+  # @IndexBColumnGap	{ 1.00c			} # index B column gap
+  # @IndexFont		{			} # index entries font
+  # @IndexBreak		{ outdent 1.2fx		} # index entries break
+  # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+  # @IndexColumnGap	{ 1.00c			} # index column gap
+  # @TopGap		{ 0.75c			} # gap between figures
+  # @MidGap		{ 0.75c			} # gap above/below body text
+  # @FootNoteNumbers	{ Arabic		} # footnote numbers
+  # @FootNoteThrough	{ No			} # numbered through chapter?
+  # @FootNoteLocation	{ ColFoot		} # where the footnote appears
+  # @FootNoteFont	{ 0.80f			} # font for footnotes
+  # @FootNoteBreak	{ 1.20fx		} # break for footnotes
+  # @FootLen		{ 2.00c			} # length of footnote line
+  # @FootAboveGap	{ 1.00v			} # gap above footnote line
+  # @FootGap		{ 0.20c			} # gap between footnotes
+  # @EndNoteNumbers	{ Arabic		} # endnote numbers
+  # @EndNoteFont	{ 0.80f			} # font of endnotes
+  # @EndNoteBreak	{ 1.20fx		} # break for endnotes
+  # @EndNoteGap		{ 0.20c			} # gap between endnotes
+  # @TheoremThrough	{  No			} # numbered through whole doc?
+  # @TheoremNumbers	{  Arabic		} # theorem etc. numbers
+  # @DefinitionWord	{  definition		} # "Definition" word, etc.
+  # @LemmaWord		{  lemma		} # "Lemma" word, etc.
+  # @TheoremWord	{  theorem		} # "Theorem" word, etc.
+  # @PropositionWord	{  proposition		} # "Proposition" word, etc.
+  # @CorollaryWord	{  corollary		} # "Corollary" word, etc.
+  # @ExampleWord	{  example		} # "Example" word, etc.
+  # @ClaimWord		{  claim		} # "Claim" word, etc.
+  # @ProofWord		{  proof		} # "Proof" word, etc.
+  # @MarginNoteFont	{ 0.80f			} # font of margin notes
+  # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
+  # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
+  # @MarginNoteVGap	{ 1.00v  		} # min vertical gap between
+  # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
+  # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
+  # @PageNumbers	{ Arabic		} # page numbers
+  # @FirstPageNumber	{ 1			} # number of first page 
+  # @IntroPageNumbers	{ Roman			} # intro page numbers
+  # @IntroFirstPageNumber{ 1			} # number of first intro page 
+
+  # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
+  # @OddFoot		{ @Null			}
+  # @EvenTop		{ @Centre{- @PageNum -}	}
+  # @EvenFoot		{ @Null			}
+  # @StartOddTop	{ @Null			}
+  # @StartOddFoot	{ @Null			}
+  # @StartEvenTop	{ @Null			}
+  # @StartEvenFoot	{ @Null			}
+  # @IntroOddTop	{ @Null			}
+  # @IntroOddFoot	{ @Null			}
+  # @IntroEvenTop	{ @Null			}
+  # @IntroEvenFoot	{ @Null			}
+  # @IntroStartOddTop	{ @Null			}
+  # @IntroStartOddFoot	{ @Null			}
+  # @IntroStartEvenTop	{ @Null			}
+  # @IntroStartEvenFoot	{ @Null			}
+
+						  # Titles, NoTitles headers
+  # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+  # @RunningOddFoot		{ @Null					}
+  # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+  # @RunningEvenFoot		{ @Null					}
+  # @RunningStartOddTop 	{ @Null					}
+  # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+  # @RunningStartEvenTop	{ @Null					}
+  # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+  # @RunningIntroOddTop		{ @Null					}
+  # @RunningIntroOddFoot	{ @Right @PageNum			}
+  # @RunningIntroEvenTop	{ @Null					}
+  # @RunningIntroEvenFoot	{ @PageNum				}
+  # @RunningIntroStartOddTop	{ @Null					}
+  # @RunningIntroStartOddFoot	{ @Null					}
+  # @RunningIntroStartEvenTop	{ @Null					}
+  # @RunningIntroStartEvenFoot	{ @Null					}
+}
+
+
+###############################################################################
+#                                                                             #
+#  The @ReportLayout @Use clause - options specific to technical reports.     #
+#                                                                             #
+###############################################################################
+
+@Use { @ReportLayout
+  # @CoverSheet			{ Yes			} # make cover sheet
+  # @DateLine			{ No			} # Yes, No, or a date
+  # @ReferencesBeforeAppendices	{ No			} # pos of ref list
+  # @AbstractWord		{ abstract		} # "Abstract" word etc.
+  # @ContentsWord		{ contents		} # "Contents" word etc.
+  # @AppendixWord		{ appendix		} # "Appendix" word etc.
+  # @IndexWord			{ index			} # "Index" word etc.
+  # @IndexAWord			{ index			} # "Index" word in index A
+  # @IndexBWord			{ index			} # "Index" word in index B
+  # @SectionNumbers		{ Arabic		} # section numbers
+  # @SubSectionNumbers		{ Arabic		} # subsection numbers
+  # @SubSubSectionNumbers	{ Arabic		} # sub-subsection numbers
+  # @AppendixNumbers		{ UCAlpha		} # appendix numbers
+  # @SubAppendixNumbers		{ Arabic		} # subappendix numbers
+  # @SubSubAppendixNumbers	{ Arabic		} # sub-subappendix numbers
+  # @AbstractHeadingFont	{ Bold			} # abstract heading font
+  # @AbstractHeadingBreak	{ ragged 1.2fx nohyphen	} # abstract heading break
+  # @AbstractHeadingFormat	{ title			} # abstract heading format
+  # @ContentsHeadingFont	{ Bold			} # contents heading font
+  # @ContentsHeadingBreak	{ ragged 1.2fx nohyphen	} # contents heading break
+  # @ContentsHeadingFormat	{ title			} # contents heading format
+  # @SectionHeadingFont		{ Bold			} # section heading font
+  # @SectionHeadingBreak	{ ragged 1.2fx nohyphen	} # section heading break
+  # @SectionHeadingFormat	{ number @DotSep title	} # section heading format
+  # @SubSectionHeadingFont	{ Bold			} # subsection heading font
+  # @SubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # subsection heading break
+  # @SubSectionHeadingFormat	{ number @DotSep title	} # subsection heading format
+  # @SubSubSectionHeadingFont	{ Slope			} # sub-subsection heading font
+  # @SubSubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-subsection heading break
+  # @SubSubSectionHeadingFormat	{ number @DotSep title	} # sub-subsection heading format
+  # @AppendixHeadingFont	{ Bold			} # appendix heading font
+  # @AppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # appendix heading break
+  # @AppendixHeadingFormat	{ number @DotSep title	} # appendix heading format
+  # @SubAppendixHeadingFont	{ Bold			} # subappendix heading font
+  # @SubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # subappendix heading break
+  # @SubAppendixHeadingFormat	{ number @DotSep title	} # subappendix heading format
+  # @SubSubAppendixHeadingFont	{ Slope			} # sub-subapp. heading font
+  # @SubSubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-subappendix heading break
+  # @SubSubAppendixHeadingFormat{ number @DotSep title	} # sub-subappendix heading format
+  # @ReferencesHeadingFont	{ Bold			} # references heading font
+  # @ReferencesHeadingBreak	{ ragged 1.2fx nohyphen	} # references heading break
+  # @ReferencesHeadingFormat	{ title			} # references heading format
+  # @IndexHeadingFont		{ Bold			} # index heading font
+  # @IndexHeadingBreak		{ ragged 1.2fx nohyphen	} # index heading break
+  # @IndexHeadingFormat		{ title			} # index heading format
+  # @IndexAHeadingFont		{ Bold			} # index A heading font
+  # @IndexAHeadingBreak		{ ragged 1.2fx nohyphen	} # index A heading break
+  # @IndexAHeadingFormat	{ title			} # index A heading format
+  # @IndexBHeadingFont		{ Bold			} # index B heading font
+  # @IndexBHeadingBreak		{ ragged 1.2fx nohyphen	} # index B heading break
+  # @IndexBHeadingFormat	{ title			} # index B heading format
+  # @SectionGap			{ 2.00v			} # gap between sections
+  # @SubSectionGap		{ 1.50v			} # gap between subsections
+  # @SubSubSectionGap		{ 1.50v			} # gap between sub-subsections
+  # @AppendixGap		{ 2.00v			} # gap between appendices
+  # @SubAppendixGap		{ 1.50v			} # gap between subappendices
+  # @SubSubAppendixGap		{ 1.50v			} # gap between sub-subapps
+  # @SectionInContents		{ Yes			} # list sections in contents
+  # @SubSectionInContents	{ Yes			} # list subsections
+  # @SubSubSectionInContents	{ No			} # list sub-subsections
+  # @AppendixInContents		{ Yes			} # list appendices
+  # @SubAppendixInContents	{ Yes			} # list subappendices
+  # @SubSubAppendixInContents	{ No			} # list sub-subappendices
+  # @ReferencesInContents	{ Yes			} # list references
+  # @IndexInContents		{ Yes			} # list index in contents
+  # @IndexAInContents		{ Yes			} # list index A
+  # @IndexBInContents		{ Yes			} # list index B
+  # @SectionNumInTheorems	{ No			} # section numbers in theorems
+  # @SubSectionNumInTheorems	{ No			} # subsection numbers in theorems
+  # @SubSubSectionNumInTheorems	{ No			} # sub-subsection numbers in theorems
+  # @AppendixNumInTheorems	{ No			} # appendix numbers in theorems
+  # @SubAppendixNumInTheorems	{ No			} # subappendix numbers in theorems
+  # @SubSubAppendixNumInTheorems{ No			} # sub-subappendix nums. in theorems
+  # @SectionNumInDisplays	{ Yes			} # section numbers in displays
+  # @SubSectionNumInDisplays	{ No			} # subsection numbers in displays
+  # @SubSubSectionNumInDisplays	{ No			} # sub-subsection numbers in displays
+  # @AppendixNumInDisplays	{ Yes			} # appendix numbers in displays
+  # @SubAppendixNumInDisplays	{ No			} # subappendix numbers in displays
+  # @SubSubAppendixNumInDisplays{ No			} # sub-subappendix nums in displays
+  # @SectionNumInFigures	{ Yes			} # section number in figures
+  # @SubSectionNumInFigures	{ No			} # subsection number in figures
+  # @SubSubSectionNumInFigures	{ No			} # subsubsection number in figures
+  # @AppendixNumInFigures	{ Yes			} # appendix number in figures
+  # @SubAppendixNumInFigures	{ No			} # subappendix number in figures
+  # @SubSubAppendixNumInFigures	{ No			} # sub-subappendix number in figures
+  # @SectionNumInTables		{ Yes			} # section number in tables
+  # @SubSectionNumInTables	{ No			} # subsection number in tables
+  # @SubSubSectionNumInTables	{ No			} # subsubsection number in tables
+  # @AppendixNumInTables	{ Yes			} # appendix number in tables
+  # @SubAppendixNumInTables	{ No			} # subappendix number in tables
+  # @SubSubAppendixNumInTables	{ No			} # sub-subappendix number in tables
+}
+
+
+###############################################################################
+#                                                                             #
+#  @Database (and @SysDatabase) clauses go here.                              #
+#                                                                             #
+###############################################################################
+
+@SysDatabase @RefStyle { refstyle }		  # reference printing styles
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/control/csrefcard.lt	Tue Oct 12 17:04:45 1999 +0000
@@ -0,0 +1,1486 @@
+@Include { OCSTreport }
+@Report
+  @Title {
+    { clines 0.8vx } @Break { 1.4f @Font {
+      Octave Controls Toolbox Reference Card }
+      0.8f @Font 0.7vx @Break { The Controls Toolbox was written by
+      A. Scottedward Hodel  <A.S.Hodel@Eng.Auburn.EDU> }
+    }
+  }
+  @Author { clines @Break { Kai P. Mueller
+    <mueller@ifr.ing.tu-bs.de> }
+  }
+  @Institution { clines @Break { Technical University of Braunschweig
+    Control Department }
+  }
+  @DateLine { Yes }
+  @CoverSheet { No }
+  @InitialFont { Schoolbook Base 12p }
+  @InitialSpace { tex }
+//
+
+@Abstract 
+  @Title { }
+@Begin
+@I {
+This document provides an overview of the Controls Toolbox functions
+of Octave. It is still under construction, don't rely on details.
+}
+@End @Abstract
+
+@Section
+  @Title { System Analysis }
+@Begin
+  @BeginSubSections
+
+  @SubSection
+    @Title { Properties }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { is_controllable }
+      B { controllability check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_controllable(a [, b ,tol])
+        }
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_detectable }
+      B { decetability check (unstable subsystem stabilizable?)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_detectable(a , c [, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_dgkf }
+      B { checks if packed system meets assumptions for the
+	  H{ @Sub @Sym infinity } Doyle-Glover-algorithm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retval = dgkf(Asys,nu,ny[,tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_digital }
+      B { returns true if packed system is a sampled system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { is_observable }
+      B { observability check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_observable(a , c [, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_sample }
+      B { returns true if sampling time Ts is a legal (scalar) value
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_siso }
+      B { returns true if packed system is siso
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  SISO = is_siso(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_stabilizable }
+      B { returns true if system stabilizable
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_stabilizable(a [, b ,tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_stable }
+      B { stability check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  is_stable(a [,tol,disc])
+	}
+      }
+      C { }
+  }
+  @End @SubSection
+
+  @SubSection
+    @Title { Time Domain }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { step }
+      B { step response of a system (mimo, discrete, or both)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y, u] = step(sys[, tstop, n, inp])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { impulse }
+      B { impulse response of a system (mimo, discrete, or both)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y, u] = impulse(sys[, tstop, n, inp])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { stepimp }
+      B { common code for step and impulse
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { damp }
+      B { display eigenvalues, damping ratios, and naural frequencies of a
+	  matrix or poles of a packed system (continuous and discrete)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  damp(p,[ tsamp])
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { dcgain }
+      B { calculate steady state gain of a packed system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [gm, ok] = dcgain(sys[, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dgram }
+      B { discrete controllability grammian
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { gram }
+      B { continuous controllabilty grammian
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { h2norm }
+      B { continuous system H{ @Sub 2} norm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  out = h2norm(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lsim }
+      B { simulation of a linear system with arbitrary input and
+          time vector
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y,x] = lsim(sys,u,t[,x0])
+	}
+      }
+      C { }
+  }
+  @End @SubSection
+
+  @SubSection
+    @Title { Frequency Domain }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { bode }
+      B { bode diagram or compute magnitude and phase data
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [mag,phase,w] = bode(sys[,w,outputs,inputs])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { bode_bounds }
+      B { calculation of frequencies for bode and nyquist
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use } 
+    @Rowb above { yes }
+      A { bodquist }
+      B { common code for bode und nyquist
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { freqchkw }
+      B { check frequency vector, used by freqresp
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { freqresp }
+      B { calculation of the mutivariable frequency response of a system, 
+          used by bode and nyquist
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  out = freqresp(sys, SISO, DIGITAL, USEW
+	  @LLP
+	  [, w, SQUARE_NYQUIST])
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { nyquist }
+      B { nyquist diagram
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dcgain }
+      B { calculate steady state gain of a packed system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [gm, ok] = dcgain(sys[, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { h2norm }
+      B { continuous system H{ @Sub 2} norm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  out = h2norm(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { hinfnorm }
+      B { continuous system H{ @Sub @Sym infinity} norm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [g gmin gmax] = hinfnorm(sys[,tol,gmin,gmax,ptol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ltifr }
+      B { siso system frequency response
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { pzmap }
+      B { plot of poles and zeros of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  pzmap(sys) or [zer,pol] = pzmap(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { rlocus }
+      B { displays root locus plot
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  rlocus(sys[,inc,mink,maxk])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tzero }
+      B { transmission zeros of a continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [zer,gain] = tzero(A,B,C,D) or
+	  @LLP
+	  zer = tzero(Asys)
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { tzero2 }
+      B { compute the transmission zeros of an a, b, c, d system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgpbal }
+      B { used by tzero
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = zgpbal(Asys) - packed system input
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { zgreduce }
+      B { used by tzero
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { zgrownorm }
+      B { used by tzero
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+  }
+  @End @SubSection
+  @EndSubSections
+@End @Section
+
+@Section
+  @Title { System Building }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { abcddim }
+      B { dimension compatibility check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { abcddims }
+      B { used by abcddim
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { outlist }
+      B { prints enumerated list of strings
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outlist(x[,tabchar,yd,ilist])
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { parallel }
+      B { parallel connection of two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  sysp = parallel(Asys,Bsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysadd }
+      B { addition of two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [sys] = sysysadd(Gsys,Hsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysappend }
+      B { append new inputs and outputs to a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysappend(sys,b,c[,d,outname,inname,yd])
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { syssetsignals }
+      B { change names of system inputs, outputs, or states
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys=syssetsignals(sys,opt,names[,sigidx])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syschtsam }
+      B { change sampling time of a (sampled) system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = syschtsam(sys,tsam)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysconnect }
+      B { form a closed loop system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysconnect(sys, output_list, input_list [, order, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syscont }
+      B { extract continuous part of a mixed continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [csys,Acd,Ccd,Dcd] = syscont(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syscont_disc }
+      B { extract continuous"/"discrete part
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use, used by syscont and sysdisc, internal use }
+    @Rowb above { yes }
+      A { sysdefioname }
+      B { create defaut signal names
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  ioname = sysdefioname(n,str[,m])
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { sysdefstname }
+      B { create default state names
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { sysdimensions }
+      B { get number of states, inputs, and outputs from system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [n,nz,m,p] = sysdimensions(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysdisc }
+      B { extract purely discrete portion of a mixed
+          continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [dsys,Adc,Cdc] = sysdisc(sys)
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { sysdup }
+      B { duplicate specified input"/"output connections of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysdup(Asys,output_list,input_list)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysgroup }
+      B { combines two packed system matrices into a single system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  sys = sysgroup(Asys,Bsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysgroupn }
+      B { locate and mark duplicate names (in sysgroup)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { sysmult }
+      B { concatenates two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [sys] = sysmult(Asys,Bsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysprune }
+      B { extract specified inputs"/"outputs from a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysprune(sys,output_list,input_list)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysreorder }
+      B { reorder elements of a vector
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { used by sysconnect }
+    @Rowb above { yes }
+      A { sysscale }
+      B { input"/"output scaling of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysscale(Asys, output_list, input_list [,inname, outname])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syssub }
+      B { subtraction of two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [sys] = syssub(Gsys,Hsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysupdate }
+      B { update the internal representation of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  newsys = sysupdate(sys,opt)
+	}
+      }
+      C { }
+  }
+  @NP
+@End @Section
+
+
+@Section
+  @Title { Display and Convenience Functions }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { polyout }
+      B { formatted display of polynomials
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y = ] polyout(c,[x])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { prompt }
+      B { prompt user to continue
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  prompt([str])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sortcom }
+      B { sort a complex vector by real, imaginary, or magnitude
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  yy = sortcom(xx[,opt]
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { swap }
+      B { exchange two values
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { swapcols }
+      B { permute columns of a matrix into reverse order
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A {swaprows  }
+      B { permute rows of a matrix into reverse order
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysout }
+      B { print out a packed system in desired format
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  sysout(sys[,opt])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tfout }
+      B { formatted transfer function num(s)"/"den(s)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  tfout(num,denom[,x])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zpout }
+      B { print formatted zero-pole form
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  zpout(zer,pol,k[,x])
+	}
+      }
+      C { }
+  }
+  @NP
+@End @Section
+
+@Section
+  @Title { System Representations and Conversions }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { c2d }
+      B { continuous to discrete conversion of a packed system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  dsys=c2d(sys[,T])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { fir2sys }
+      B { FIR (finite impulse response) to packed system conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ss2sys }
+      B { conversion from state space to system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  OUTSYS = ss2sys(A, B, C [, D, TSAM, N,
+	  NZ, STNAME, INNAME, OUTNAME, OUTLIST])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ss2tf }
+      B { conversion from state space to transfer function
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [num,den] = ss2tf(a,b,c,d)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ss2zp }
+      B { conversion from state space to zero pole representation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [zer,pol,k] = ss2zp(a,b,c,d)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sys2fir }
+      B { extract fir system from packed system form
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sys2ss }
+      B { conversion from packed system to state space form
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [a, b, c, d, tsam, n, nz, stname, inname, outname] = sys2ss(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sys2tf }
+      B { conversion from packed system to stransfer function
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { sys2zp }
+      B { conversion from packed system to zero pole representation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [zer,pol,k] = ss2zp(a,b,c,d)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysdisc }
+      B { extract purely discrete portion of a mixed
+          continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [dsys,Adc,Cdc] = sysdisc(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tf2ss }
+      B { function to state-space conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tf2sys }
+      B { tranfer function to system conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tf2sysl }
+      B { strips leading zero coefficient in polynonials
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use (used by tf2sys) }
+    @Rowb above { yes }
+      A { tf2zp }
+      B { tranfer function to state-space conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zp2ss }
+      B { zero-pole representation to state space form conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zp2ssg2 }
+      B { used by zp2ssg2
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { zp2sys }
+      B { zero-pole representation to packed system conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outsys = zp2sys(zer, pol, k [, tsam, inname, outname])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zp2tf }
+      B { zero-pole representation to transfer function conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+  @NP
+@End @Section
+
+@Section
+  @Title { Equation Solvers and Math Functions }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { are }
+      B { algebraic riccati equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  x = are (a, b, c)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dlyap }
+      B { discrete Lyapunov equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dare }
+      B { discrete algebaic riccati equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lyap }
+      B { Lyapunov"/"Sylvester equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  lyap (a, b [,c])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { pinv }
+      B { pseudoinverse of a matrix
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgfmul }
+      B { compute product of zgep incidence matrix f with vector x
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { used by zgscal }
+    @Rowb above { yes }
+      A { zgfslv }
+      B { solve system of equations for dense zgep problem
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zginit }
+      B { construct right hand side for the zero-computation generalized
+	  eigenvalue problem
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgscal }
+      B { generalized conjugate gradient iteration to solve zero-computation
+	  generalized eigenvalue problem balancing equation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A {zgsgiv  }
+      B { apply givens rotation c,s to column vector a,b
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgshsr }
+      B { apply householder vector, used by zgfslv
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+@End @Section
+
+@Section
+  @Title { Controller Design }
+@Begin
+  @BeginSubSections
+  @SubSection
+    @Title { Classic Methods }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { dlqe }
+      B { discrete Kalman filter design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dlqr }
+      B { discrete linear quadratic regulator (Riccati controller) design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [k, p, e] = lqr (A, B, Q, R [, Z])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lqe }
+      B { contiuous time Kalman filter design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lqg }
+      B { continuous"/"discrete lqg (linear quadratic gaussian) controller
+          design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lqr }
+      B { continuous lqr (Riccati-) controller design
+        @DP { Helvetica Base -2p } @Font @CurveBox {
+	*** no description ***
+      }
+      }
+      C { }
+    @Rowb above { yes }
+      A { place }
+      B { calculation of feedback gain matrix K, using pole-placement
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  K = place(sys, P)
+	}
+      }
+      C { }
+  }
+  @NP
+  @End @SubSection
+
+  @SubSection
+    @Title { Modern Methods }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { h2syn }
+      B { H{ @Sub 2}-optimal controller design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [K, gain, Kc, Kf, Pc, Pf] = h2syn(Asys, nu, ny [, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { hinfsyn }
+      B { continuous system H{ @Sub @Sym infinity}-optimal controller design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [K,g, ghi, glo, Pc, Pf] = hinfsyn(Asys, nu, ny, gmax,
+	  gmin, gtol [, ptol, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { hinfsyn_chk }
+      B { check of existence of an H{ @Sub @Sym infinity}-optimal
+          controller, used internally by hinfsyn
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+  }
+  @End @SubSection
+  @EndSubSections
+  @NP
+@End @Section
+
+@Section
+  @Title { Miscellanious }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { analdemo }
+      B { state space analysis demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { use by controldemo }
+    @Rowb above { yes }
+      A { bddemo }
+      B { block diagram manipulations demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { controldemo }
+      B { Octave Controls Toolbox demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { frdemo }
+      B { menu-based frequency response demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { jet707 }
+      B { Boeing 707-321 aircraft mimo example
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outsys = jet707()
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ord2 }
+      B { second order siso example
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outsys = ord2(nfreq, damp[, gain])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dgkfdemo }
+      B { H{ @Sub 2}"/"H{@Sub @Sym infinity} controller design demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { moddemo }
+      B { system conversion demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { packedform }
+      B { srcipt for sysrepdemo, the system representations demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { rldemo }
+      B { root locus demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { sysrepdemo }
+      B { system representation demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+  }
+@End @Section
+
+@Section
+  @Title { New Functions (most likely not on your system) }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { ctrb }
+      B { Forms the controllability matrix of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  ctrb(sys [, b])
+	}
+      }
+      C { *not* for controllablity tests, use is_controllable instead
+      }
+    @Rowb above { yes }
+      A { is_abcd }
+      B { Returns true if dimensions are compatible, false otherwise.
+          Complains about the (first) failing matrix dimension.
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retval = is_abcd(a [, b, c, d])
+	}
+      }
+      C { In contrast to abcddim() the function is_abcd() accepts
+      1 to 4 arguments.
+      }
+    @Rowb above { yes }
+      A { obsv }
+      B { Forms the observability matrix of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  obsv(sys [, c])
+	}
+      }
+      C { *not* for observablity tests, use is_observable instead
+      }
+    @Rowb above { yes }
+      A { template }
+      B { Starting point for your own function
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  y = template(x[, a])
+	}
+      }
+      C { ridiculous calculation }
+  }
+@End @Section
+
+@Section
+  @Title { Obsolete }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { DEMOcontrol }
+      B { Octave Controls Toolbox demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { obsolete - use democontrol instead }
+    @Rowb above { yes }
+      A { dlqg }
+      B { discrete linear quadratic gaussian design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use lqg instead } 
+    @Rowb above { yes }
+      A { minfo }
+      B { determine type of system matrix
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use ss2sys, tf2sys, sys2ss, or sys2tf instead }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { packsys }
+      B { pack A, B, C, D matrices into a system representation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use ss2sys instead }
+    @Rowb above { yes }
+      A { rotg }
+      B { givens rotation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use givens instead }
+    @Rowb above { yes }
+      A { series }
+      B { connect two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - superseeded by sysmult}
+    @Rowb above { yes }
+      A { unpacksys }
+      B { conversion from packed system (sys) to state space
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { use sys2ss insted}
+  }
+@End @Section
+
+@Section
+  @Title { Dubious }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { demomarsyas }
+      B { unknown interface demo }
+      C { }
+    @Rowb above { yes }
+      A { mb }
+      B { unknown purpose }
+      C { }
+    @Rowb above { yes }
+      A { sysball }
+      B { unknown purpose }
+      C { }
+  }
+@End @Section
+
+@Appendix
+  @Title { Maintainer }
+@Begin
+@PP
+Mail any comments or suggestions to Kai P. Mueller
+<mueller@ifr.ing.tu-bs.de>.
+Report m-files problems to A. Scottedward Hodel
+<A.S.Hodel@Eng.Auburn.EDU> or to the authors.
+@End @Appendix
+
+@Appendix
+  @Title { Production Note }
+@Begin
+@PP
+A recent version of this brochure can be copied from
+@LLP
+ftp:"//"ifr.ing.tu-bs.de"/"pub"/"ControlSW"/"doc
+("\""lout"\"" source and PostScript{@Sup @Char registered}).
+I am too dump to supply a T{/0.2fo E}X source.
+@End @Appendix
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/control/install-ocst	Tue Oct 12 17:04:45 1999 +0000
@@ -0,0 +1,234 @@
+#!/bin/sh
+#
+# install-ocst   --   install/update Octave Controls Toolbox (OCST)
+#                    of A. Scottedward Hodel <A.S.Hodel@Eng.Auburn.EDU>
+#
+# This script uses chunks of "install-octave"
+# from John W. Eaton <jwe@bevo.che.wisc.edu>
+#
+# Kai P Mueller <mueller@ifr.ing.tu-bs.-de>, TU Braunschweig
+# 11/22/97 initial version
+#
+
+if [ $# -ne 1 ]
+then
+  echo
+  echo "    usage: $0 (help | all | select)"
+  echo
+  exit 1
+fi
+
+case $1 in
+
+  help)
+    cat << EOF
+==========================================================================
+  install-ocst attempts to install (or update) the OCST (Octave controls
+  toolbox) of your version of Octave.
+
+   The files in the subdirectories "general", "linear-algebra",
+   "strings", "plot", and "control" will be copied to the Octave data
+   directories with proper permissions.
+
+   If the file "obsolete.files" exists this script file fill
+   ask if the files listed in "obsolete.files" should be removed.
+
+   The install and update procedures differ in the way they perform the
+   copy of the  files in this OCST version.
+
+   o all     Copy all files to the Octave data directories assuming that
+             this version is newer. Install does not ask any questions.
+	     This modfe is best if you are the system administrator you
+	     just want to install the control stuff.
+
+   o select  Copy all files but ask before replacing an existing file
+             which differs from the one in this distribution. The update
+	     mode is appropriate for developers. New files will be
+	     copied without confirmation.
+	     Note: it can be very annoying to confirm the replacements.
+==========================================================================
+EOF
+    exit 0
+    ;;
+
+  all)
+    ask=no
+    ;;
+
+  select)
+    ask=yes
+    ;;
+
+  *)
+    echo
+    echo "    usage: $0 (help | all | select)"
+    echo
+    exit 1
+    ;;
+esac
+
+if [ `whoami` != root ]
+then
+  echo -n " * You should execute install-ocst as root, continue anyway? [n]: "
+  read ans
+  case "$ans" in
+    y | Y | yes | YES)
+    ;;
+    *)
+      exit 1
+    ;;
+  esac
+fi
+
+# change location of the distribution file here:
+ocst_version=1.2
+datadir=/usr/local/share
+oct_version=2.0.12
+
+echo
+echo " - This is the OCST V$ocst_version update procedure -"
+
+# change everything below at your own risk.
+# check data directory
+echo
+echo -n " * Octave data dir is $datadir/octave; is that correct? [y]: "
+read ans
+case "$ans" in
+  n | N | no | NO)
+    echo -n " * Enter Octave data dir (without /octave/...): "
+    read datadir
+  ;;
+esac
+if [ ! -d "$datadir/octave" ]
+then
+  echo "install-ocst: Octave dir ($datadir/octave) does not exist - Goodbye."
+  exit 1
+fi
+
+# check Octave version
+echo
+echo -n " * Octave version is $oct_version; is that correct? [y]: "
+read ans
+case "$ans" in
+  n | N | no | NO)
+    echo -n " * Enter Octave version: "
+    read oct_version
+  ;;
+esac
+toplevel=$datadir/octave/$oct_version/m
+if [ ! -d $toplevel ]
+then
+echo "install-ocst: toplevel dir ($toplevel) does not exist - Goodbye."
+  exit 1
+fi
+
+# perform installation
+echo
+echo -n " * This is your last chance to quit, continue installation? [y]: "
+read ans
+case "$ans" in
+  n | N | no | NO)
+    echo "install-ocst aborted."
+    exit 0
+  ;;
+esac
+
+echo
+distdir=`pwd`
+for dd in general linear-algebra strings plot control
+do
+  if [ -d "$dd" ]
+  then
+    echo " o installing files in $dd..."
+    cd $dd
+    for ff in `ls`
+    do
+      if [ $ask = yes ]
+      then
+        if [ -e "$toplevel/$dd/$ff" ]
+	then
+	  diff $ff "$toplevel/$dd/$ff" > /dev/null
+	  if [ "$?" = 0 ]
+	  then
+	    # files are identical; do not copy
+	    echo "---> $ff  (same version does already exist, no replacement)"
+	  else
+	    # file already exit, our version is (possible) newer
+            echo -n " * Replace existing $ff? [y]: "
+            read ans
+            case "$ans" in
+              n | N | no | NO)
+	        echo "---> $ff skipped."
+              ;;
+              *)
+                cp $ff $toplevel/$dd
+                chmod 644 $toplevel/$dd/$ff
+              ;;
+            esac
+	  fi
+	else
+	  echo "---> $ff  (new file)"
+          cp $ff $toplevel/$dd
+          chmod 644 $toplevel/$dd/$ff
+	fi
+      else
+        # copy everything without asking
+        cp $ff $toplevel/$dd
+        chmod 644 $toplevel/$dd/$ff
+      fi
+    done
+    echo "   ...files in $dd installed."
+  fi
+  cd $distdir
+done
+
+# check for "obsolete.files"
+if [ ! -r obsolete.files ]
+then
+  echo " o No obsolete files."
+else
+  echo " o removing obsolete files..."
+  flist=`cat obsolete.files`
+  for ff in $flist
+  do
+    dfile=$toplevel/$ff
+    if [ ! -e "$dfile" ]
+    then
+      echo " * no obsolete file: $ff"
+    else
+      echo -n " * remove $ff? [n]: "
+      read ans
+      case "$ans" in
+        y | Y | yes | YES)
+          rm $dfile
+        ;;
+      esac
+    fi
+  done
+fi
+
+echo
+echo "   All files have been installed. Now to the final question:"
+echo
+
+echo -n " * Replace/create ls-R file? [y]: "
+read ans
+case "$ans" in
+  n | N | no | NO)
+    echo "--> no new ls-R file."
+  ;;
+  *)
+    if [ -d "$datadir/libexec" ]
+    then
+      echo "install-ocst: libexec directory found."
+      ls -LR $datadir/octave $libexecdir/octave > $datadir/octave/ls-R
+    else
+      echo "install-ocst: libexec directory not found."
+      echo "              (you can safely ingnore this message.)"
+      ls -LR $datadir/octave > $datadir/octave/ls-R
+    fi
+  ;;
+esac
+
+echo "Thank you for using install-ocst."
+exit 0