includefile(concrete/intro)

lsect(FDSTREAMBUFFER)(Using file descriptors with `streambuf' classes)

    lsubsect(OFDNBUF)(Classes for output operations)
    includefile(concrete/fdout)

    lsubsect(STRBUF)(Classes for input operations)
    includefile(concrete/fdinput)

        lsubsubsect(IFDBUF)(Using a one-character buffer)
        includefile(concrete/fdinbuf)

        lsubsubsect(IFDNBUF)(Using an n-character buffer)
        includefile(concrete/fdninbuf)

        lsubsubsect(IFDSEEK)(Seeking positions in `streambuf' objects)
        includefile(concrete/fdinseek)

        subsubsect(Multiple `unget' calls in `streambuf' objects)
        includefile(concrete/fdunget)

    subsect(Fixed-sized field extraction from istream objects)
    includefile(concrete/fistream)

        subsubsect(Member functions and example)
        includefile(concrete/fistreamexample)

lsect(FORK)(The `fork' system call)
includefile(concrete/fork)

    subsect(A basic Fork class)
    includefile(concrete/basicfork)

    subsect(Parents and Children)
    includefile(concrete/parents)

    lsubsect(REDIRECTION)(Redirection revisited)
    includefile(concrete/redirection)

    lsubsect(DAEMON)(The `Daemon' program)
    includefile(concrete/daemon)

    lsubsect(PIPE)(The class `Pipe')
    includefile(concrete/pipes)

    subsect(The class `ParentSlurp')
    includefile(concrete/parentslurp)

    subsect(Communicating with multiple children)
    includefile(concrete/children)

        subsubsect(The class `Selector': interface)
        includefile(concrete/select)

        subsubsect(The class `Selector': implementation)
        includefile(concrete/selectimpl)

        lsubsubsect(MONITOR)(The class `Monitor': interface)
        includefile(concrete/monitor)

        subsubsect(The class `Monitor': s_handler)
        includefile(concrete/shandler)

        subsubsect(The class `Monitor': the member `run')
        includefile(concrete/run)

        subsubsect(The class `Monitor': example)
        includefile(concrete/monitorexample)

        lsubsubsect(CHILD)(The class `Child')
        includefile(concrete/child)

COMMENT(see concrete/examples/binopclasses.cc)
sect(Adding binary operators to classes)
includefile(concrete/binop)

    subsect(Merely using operators)
    includefile(concrete/operators)

        subsubsect(To namespace or not to namespace?)
        includefile(concrete/namespace)

    subsect(The CRTP and defining operator function templates)
    includefile(concrete/crtp)

    subsect(Insertion and extraction)
    includefile(concrete/insertion)

COMMENT(
    subsect(Binary operators allowing promotions)
    includefile(concrete/promotions)

lsect(RANGER)(Range-based for-loops and pointer-ranges)
includefile(concrete/ranger)

END)

lsect(PROXY)(Distinguishing lvalues from rvalues with operator[]())
    includefile(concrete/proxy)

lsect(CONCRETEITER)(Implementing a `reverse_iterator')
includefile(concrete/iterators)

lsect(BisonAndFlex)(Using `bisonc++' and `flexc++')
includefile(concrete/bisonflex)

    lsubsect(Flexcpp)(Using `flexc++' to create a scanner)
    includefile(concrete/usingflex)

        subsubsect(The derived class `Scanner')
        includefile(concrete/lexer)

        subsubsect(The lexical scanner specification file)
        includefile(concrete/lexerspec)

        subsubsect(Implementing `Scanner')
        includefile(concrete/scanner)

        subsubsect(Using a `Scanner' object)
        includefile(concrete/scanmain)

        lsubsubsect(BUILDFLEX)(Building the program)
        includefile(concrete/scancompile)

    lsubsect(BISONFLEX)(Using `bisonc++' and `flexc++')
    includefile(concrete/usingbison)

        subsubsect(The `bisonc++' specification file)
        includefile(concrete/bison)

        lsubsubsubsect(BISONDEF)(The declaration section)
        includefile(concrete/definition)

        subsubsubsect(The grammar rules)
        includefile(concrete/rules)

        subsubsubsect(The Parser's header file)
        includefile(concrete/parserh)

        subsubsect(The `flexc++' specification file)
        includefile(concrete/bisonflexspec)

        subsubsect(Building the program)
        includefile(concrete/codegeneration)

COMMENT(

    lsubsect(BISONSEM)(Bisonc++: using polymorphic semantic values)
    includefile(concrete/polymorphic)

        subsubsect(The parser using a polymorphic semantic value type)
        includefile(concrete/parser.yo)

        lsubsubsect(TAG)
                    (Tagging the actual semantic type: the `enum class Tag')
        includefile(concrete/tag)

        subsubsect((Im)mutable semantic data: two base-structs)
        includefile(concrete/mutable)

        lsubsubsect(TAGTRAIT)
                    (Traits of semantic type tags: the `TagTrait' trait class)
        includefile(concrete/tagtrait)

        subsubsect(Accessing data from derived classes)
        includefile(concrete/access)

        subsubsect(The polymorphic base class `SemBase')
        includefile(concrete/sembase)

        subsubsect(The class template `Semantic', derived from `SemBase')
        includefile(concrete/semantic)

        subsubsect(Adding new semantic data types)
        includefile(concrete/addtypes)

        lsubsubsect(SPSEMBASE)(The parser's semantic value: `spSemBase')
        includefile(concrete/spsembase)

        subsubsect(The parser specification file)
        includefile(concrete/polygram)

        subsubsect(The scanner using a polymorphic semantic value type)
        includefile(concrete/semscanner.yo)
END)


COMMENT(
    subsect(Using unrestricted unions as semantic values)
    includefile(concrete/unrestricted)
END)
