












                           C I T A D E L - 8 6

                                  V3.40

                           INSTALLATION MANUAL
  
                          Copyright 1989 - 1991

                               by Hue, Jr.

                         C-86 Test System Sysop

                            (612) 470-9635

                                91Oct07













































                         Table of Contents

     I. Introduction & Requirements  . . . . . . . . . . . . . . . .  2
        I.1 ... but first, a caveat. . . . . . . . . . . . . . . . .  2
        I.2 Introduction . . . . . . . . . . . . . . . . . . . . . .  2
        I.3 Requirements . . . . . . . . . . . . . . . . . . . . . .  3
     II. Installation  . . . . . . . . . . . . . . . . . . . . . . .  4
         II.1 Tickling DOS configurations  . . . . . . . . . . . . .  4
         II.2 Making your modem do the right thing . . . . . . . . .  4
         II.3 Citadel-86 Operating Procedures
                         (and other epic fantasies)  . . . . . . . .  5
              II.3.a Who's this masked Temporary file, anyways?  . .  6
         II.3 (con't)  . . . . . . . . . . . . . . . . . . . . . . .  6
         II.4 Other Data Files . . . . . . . . . . . . . . . . . . .  7
         II.5 EASE . . . . . . . . . . . . . . . . . . . . . . . . .  8
         II.6 The ole' configuration file  . . . . . . . . . . . . .  8
              II.6.a But first, a word on moral values ... . . . . .  9
              II.6.b Section 1 of CtdlCnfg.Sys . . . . . . . . . . . 10
                Part 1 of Section 1: Meaningless Miscellanea . . . . 10
                Part 2 of Section 1: Required Odd Stuff  . . . . . . 12
                Part 3 of Section 1: Data File Sizes . . . . . . . . 13
                Part 4 of Section 1: Data File Locations . . . . . . 14
                Part 5 of Section 1: Policy Options  . . . . . . . . 15
                Part 6 of Section 1: Modem Handling  . . . . . . . . 18
                Part 7 Video Options   . . . . . . . . . . . . . . . 22
              II.6.c Section 2 of CtdlCnfg.Sys . . . . . . . . . . . 22
              II.6.d Section 3 of CtdlCnfg.Sys . . . . . . . . . . . 32
         II.7 The Big Step -- Your first experience with CONFG . . . 36
         II.8 CTDL -- That Childhood Experience  . . . . . . . . . . 37
         II.9 When the inevitable happens  . . . . . . . . . . . . . 38
         II.10 Installation -- Advanced Topics . . . . . . . . . . . 38
              II.10.a Command Line options . . . . . . . . . . . . . 38
              II.10.b BAT files and program termination ERRORLEVELS. 40
              II.10.c Making BAT files and command line options
                                                     work for you  . 41
              II.10.d Result Code and Call Progress Detection  . . . 43
              II.10.d.1 Restrictions on Result Codes . . . . . . . . 46
              II.10.e Extreme options in CtdlCnfg.Sys  . . . . . . . 46
     III. Zenith Z-100 Notes . . . . . . . . . . . . . . . . . . . . 48
              III.1 Introduction . . . . . . . . . . . . . . . . . . 48
              III.2 Scary but Innocuous Behaviors  . . . . . . . . . 48
              III.3 Result Codes . . . . . . . . . . . . . . . . . . 48

     Appendix -- Exhibit copy of CtdlCnfg.Sys. . . . . . . . . . . . 50












                                    -1-






     I. Introduction & Requirements
        Hi.  This is the Citadel-86 Installation Manual.  This manual comes in
     three parts.  In the first part we hope to present a very short intro-
     duction to Citadel-86 and give you an idea of the requirements of running
     Citadel-86.
 
        The second part of the Manual will contain a comprehensive (we hope!)
     discussion of general operation of Citadel-86 and a step-by-step
     installation guide.

        The third section contains notes specific to the Zenith Z-100, as
     contributed by both the author of this manual and System Operators
     using Z-100s as their hardware platform.
 
        If you are looking for documentation covering the day to day operations
     of Citadel-86, please read OPER3.MAN.  Just ignore the blood spots
     in there ...
 
     I.1 ... but first, a caveat.
        Citadel-86 has a number of eccentricities in it; in fact, some people
     might describe it as one giant eccentricity, and an explanation is,
     perhaps, in order.  One of the authors of this manual, Hue, Jr., is also
     the principal porter and caretaker of Citadel-86.  Citadel-86 derives
     directly from the version 2.10 of Citadel written by Cynbe ru Taren for
     CP/M, and contains a number of the apparent oddities that originally
     appeared in Cynbe's code.  Hue, Jr., feeling there may have been
     certain reasons in Cynbe's mind for what he did, has been somewhat loathe
     to change how certain things worked.  This may indicate a certain lack of
     ambition on his part; if so, so be it.  Whatever the case, he has chosen
     to leave them in, due to his faith in Cynbe knowing what he was doing.
 
     I.2 Introduction
        Citadel-86 is part of a growing family of BBSes characterized as
     "room-based" systems.  These systems are excellent messaging systems in
     which the message base is partitioned into various 'areas', enhancing the
     focus of the topics on the installation (if well-managed); the areas are
     usually termed 'rooms' in order to provide a highly familiar metaphor for
     the common user.
 
        Some room-based systems have an additional structure added on to them,
     known sometimes as 'hallways' or 'floors', which give addition focus.
     Citadel-86 has a 'floor' capability, which is optionally available to the
     users.  Floors allow the sysop and aides to partition the collection of
     rooms into 'subject floors' (or 'topical floors'), so rooms may be
     grouped as needed.
 
        Room-based systems normally feature an extremely streamlined set of
     commands, in which those used the most often are mnemonic 'single-stroke'
     commands whereby the user supplies the first letter of the command to
     execute and the system provides the rest of the command.  The speed
     and ease-of-use of such a command set, in conjunction with the room
     concept, has combined to make room based systems extremely popular and
     heavily used in several sections of the United States.
 
        Citadel-86 also has file upload and download abilities, integrated
     with the room metaphor, and a network capability.
 


                                    -2-






     I.3 Requirements
        There are a number of requirements connected with running a Citadel-86
     system. The most important one, though, is perhaps the most ignored, and 
     that is experience with Citadel-86 or similar BBS software from a user
     standpoint.  It can't be stressed enough that you should have at least a
     month of day-to-day experience with Citadel-86 as a normal user, learning
     the various commands relating to messages and files, and in general
     becoming not only familiar, but comfortable with the Citadel-86 style of
     bbsing before descending into sysopdom.

        More formally, Citadel-86 is capable of running on two classes of
     machine.  The first is the Zenith Z-100, an 8085/8088 machine.  The
     second category contains the IBM PCs, ATs, and close clones (note
     a Z-100 does NOT constitute a close clone, although it is supported).
     These two classes are similar enough that we do not need to discuss the
     requirements for each class separately.  However, please note the
     two different machines require different executable files (unlike earlier
     versions of Citadel-86).
 
      o Operating System: PC- or MS- DOS 2.x or 3.x is required.  While not
        every single version of DOS between 2.x and 3.x range has been
        tested with Citadel-86, we have not had any reports of problems with
        those versions of DOS.  Version 1.x of MSDOS is a NO NO!
 
      o RAM: We suggest at least 350K RAM be made available to Citadel-86.
        This is in addition to RAM for MS-DOS, TSR programs, etc.
 
      o Disk storage: A hard disk is, naturally, highly desirable.  However,
        you can run Citadel-86 on a two floppy system, but if you must do so,
        you should also try to make sure you can have a relatively large
        RAM disk available; due to Citadel-86's structure, disk access is
        quite frequent.  While hard drives (and RAM drives!) do not mind
        frequent disk accesses, floppy drives have been known to burn out
        under constant usage unless certain options concerning RAM drives
        are taken advantage of within Citadel-86.
 
      o An auto-answer modem and the hardware (cables, etc.) requisite to hook
        it up to your computer:  While a Hayes or compatible is by far the most
        popular modem in usage, Citadel-86 can be configured to use several
        other types of modems.
 
      o A copy of the Citadel-86 software:  Typically, Citadel-86 comes in the
        form of three archives.  The first is called RUNTIME.LZH, and is
        absolutely necessary.  It contains the required executables to bring
        Citadel-86 up, various help files, and a configuration file.  The
        second is called SUPPORT.LZH, and contains what little documentation is
        available for Citadel-86.  It is not strictly necessary, but
        useful (or at least comforting).  The third is called UTIL.LZH (and
        sometimes comes as two archives), and contains the utilities available
        for Citadel-86.  (If you don't have these, they may possibly be on Test
        System in a room called Necessities].)
 
      o Some patience!






                                    -3-






     II. INSTALLATION
        In this section we explore the installation procedure for Citadel-86,
     investigating territory ranging from a general overview of the operating
     procedures of Citadel-86 to the details of setting up a system.
 
        We'll begin with a very short section on DOS and modem configuration. 
     Then we get to the red, raw meat of Citadel-86: a description of how to
     prepare and operate Citadel-86, and a discussion of the data files
     Citadel-86 needs or generates.  Next will be a walk-through of actually
     setting up a basic Citadel-86 installation, at the end of which you should
     have a working Citadel-86 system.
 
        Easy, right?
 
     II.1 Tickling DOS configurations
        First comes the only required DOS configuration you must perform.  You
     must place the line "FILES=20" in your CONFIG.SYS file on your boot disk.
     If such a line already exists (or more than 20 is specified),
     then you don't need to worry about anything.  If such a line doesn't
     exist, then please put it into CONFIG.SYS, save the file, and reboot your
     system so it'll take effect.  IF YOU DON'T, CITADEL WILL BE VERY PEEVISH!
 
        If you don't understand what we're gabbing about, then please consult
     your DOS manuals.  CONFIG.SYS is an important part of the DOS system; it
     will do you good to learn what it's about.
 
        We AREN'T going to discuss DOS batch files in here.  We'll leave that
     for a later advanced section, because Citadel-86 exits with different
     ERRORLEVELs; the exact levels vary with the reason Citadel-86 exited.
     We feel it would be better not to cause excess confusion now, because
     you'll be confused soon enough as it is.
 
        We AREN'T going to discuss Citadel-86 command line parameters here,
     either.  While such things exist, we deem these to be the subject of an
     advanced section, and so we leave them for later attention in this manual.
 
     II.2  Making your modem do the right thing
        The Citadel-86 basic requirements in the area of modems are:

      o Modem can be hooked up to the computer
      o Modem can auto-answer the phone
      o Modem supports true carrier detect (very preferably on pin 8)
      o Modem can be hung up
 
        That sounds pretty darn basic, and it is.  However, if you want to take
     advantage of some of the default configurations of Citadel-86 for the
     modem, here's what we suggest for your modem in terms of characteristics:

      o Hayes or (semi) compatible

     or

      o Carrier detect on pin 8 (normal for most modems)
      o Carrier hangs up modem when DTR is dropped





                                    -4-






        Like we said, Citadel-86 is not restricted to Hayes/compatible
     modems, although they are of course the most popular modem used.  But
     other modems, such as TransModems, have been used successfully with 
     Citadel-86. This makes our job, as the manual writers, substantially 
     more difficult. Due to the overwhelming popularity of the Hayes compatible
     modems, we're going to confine most of our advice on modem configuration
     to Hayes and compatibles.
 
        The first thing to bear in mind is "compatible" is often a
     slippery term.  Our advice is based on our own experience with our Hayes 
     compatible modems; if what we say doesn't seem to jibe with your modem's
     documentation, then use a little imagination and search the manuals.
 
        Hayes modems are not normally correctly configured fresh from the
     factory, so you must configure yours.  Usually, a combination of two
     methods are used to achieve the correct configuration.  First, DIP
     switches on the modem usually control several different functions,
     including auto-answer mode.  However, on some Hayes compatibles they
     don't exist; the functions they usually serve are then either accessed
     via software, or not at all. Second, (as you might have guessed), software
     can be used to configure the modem, through the use of AT commands.
 
        We strongly suggest you have your modem manual available at this
     point.
 
        First, you want to make sure your modem will drop carrier when DTR
     is dropped; the opposite of this is sometimes called the "forced DTR"
     function, and can be found in the DIP switches.  Make sure the modem
     does not have "forced DTR" on.
 
        Next, you need to ensure the modem is not "forcing carrier
     detect". Instead, it should only have carrier detect true when there is
     actually a caller online; otherwise your Citadel-86 will not work
     correctly.
 
        Finally, you want to make sure the modem will auto-answer when
     Citadel-86 is up.  This can be selected either by DIP switch or through
     software.  If you have a modem with a DIP switch controlling this
     function, you may want to use software instead, for finer control of
     how your modem acts.  You'll find later in this manual you can
     specify a string of commands to be sent to the modem when Citadel-86 first
     comes up, which you can use to activate auto-answer mode.
 
        The above comments apply equally well to non-Hayes compatible modems,
     although the details of how to initialize the modem will differ greatly.
 
        More detail on initialization of the modem will appear later in this
     manual in Section II.6.b: Part 6 of Section 1: MODEM HANDLING.

     II.3 Citadel-86 Operating Procedures (and other epic fantasies)
        Citadel-86 comes with a whole mess of files.  However, only three of
     these files are important, because they constitute the beginnings and
     necessities of Citadel-86.  They are:






                                    -5-



      o CtdlCnfg.Sys.  This file will contain your description of how you want
        your system set up.  Decisions concerning the location of important
        data files, system policies, and other semi-arcane things are described
        for Citadel-86's use.  The CtdlCnfg.Sys accompanying your system is a
        template of a very generic system, and we plan to guide you through it
        later in this manual.
 
      o CONFG.EXE.  This executable program digests CtdlCnfg.Sys, converting
        the information contained therein into a form far easier to
        digest by computer programs.  It is also responsible for generating new
        data files when necessary (typically only when a new system is first
        built!) and analyzing old data files.  It produces a highly temporary
        yet necessary file called CTDLTABL.SYS.

      o CTDL.EXE.  This is the main executable program of Citadel-86.  It
        expects to find CTDLTABL.SYS (remember the name?).  If it finds it, it
        reads it, erases it, and then continues to try to bring up the rest of
        the system, using the information it found in CTDLTABL.SYS.  If
        there are no severe abnormalities during CTDL.EXE's use, it will write
        a new version of CTDLTABL.SYS for use the next time you bring up
        CTDL.EXE.
 
     II.3.a Who's this masked Temporary file, anyways?
        CTDLTABL.SYS has been passed off so far as a temporary file, generated
     by CONFG.EXE from digesting CtdlCnfg.Sys, and required by CTDL.EXE.
     However, for a mere temporary file it merits more discussion.  We said
     CTDL.EXE expects to find it; you may have figured out if it's
     not there, then CTDL.EXE won't function properly.  This is correct, and
     the proper corrective action is to run CONFG.EXE.  DON'T TRY TO USE AN OLD
     VERSION OF CTDLTABL.SYS THAT YOU MAY HAVE SAVED IN CASE OF A CRASH!  Yes,
     we know running CONFG.EXE to generate a new CTDLTABL.SYS can take a
     while if you're running a big system.  We mentioned CONFG.EXE
     analyzes data files; as it happens, the results of this analysis is
     also placed in CTDLTABL.SYS, and used to enhance access to various parts
     of Citadel-86, such as the log.
 
        If you use an old version of CTDLTABL.SYS, the older information can
     cause Citadel-86 to look for messages that no longer exist, lose track of
     new rooms and log accounts, and other behaviors a sysop generally
     finds disruptive to domestic tranquility.  So, really, "Just say no."  Run
     CONFG.EXE if you lose your current CTDLTABL.SYS through a crash or power
     loss.  (This can be automated.  See section II.9 for advice on
     batch files.)
 
     II.3 (con't)
         Back to the subject.  We now know the purposes of the three primary
     files of Citadel-86.  CtdlCnfg.Sys contains information only the
     sysop can supply; CONFG.EXE processes CtdlCnfg.Sys, producing CTDLTABL.SYS
     and other data files; CTDL.EXE requires CTDLTABL.SYS, and constitutes
     the main executable of Citadel-86.

         So, in short form, here's how you run Citadel-86:

      o Modify CtdlCnfg.Sys to taste.
      o Run CONFG.EXE.
      o Run CTDL.EXE as many times as desired, as long as each run is
        terminated normally.

        If you crash, either from a fatal bug or power loss or whatever, just
     run CONFG.EXE again.


                                    -6-





     II.4 Other Data Files
        When you run CONFG.EXE for the first time, a number of data files are
     created, and they're what we're going to talk about in this section. 
     These files contain the information -- accounts, rooms, messages, and
     other things -- making up any BBS.  The capacities of these files are
     selectable by the sysop, and once selected they remain the same size as
     CTDL.EXE runs (don't panic, though -- they can be changed through the use
     of Citadel-86 utilities!).  And with no more delay....
 
      o CTDLMSG.SYS.   This file contains all the messages in the system.
      o CTDLROOM.SYS.  This file contains information about the rooms in your
                       system.  The size of this file is given later in this
                       manual.
      o CTDLLOG.SYS.   This file contains all the accounts for users on your
                       system.  The size of this file is given later in this
                       manual.
      o CTDLNET.SYS.   This file, if it exists, will be 0 bytes long when
                       initially generated by CONFG.EXE, and will grow as
                       the network grows (NETWORK3.MAN talks about C86Net).
      o CTDLFLR.SYS.   This file contains information about the floors in your
                       system.  It grows as you add floors to your system.
                       Don't panic, though.  Each floor only takes 21 bytes.
 
        These, however, are not the only data files associated with Citadel-86.
     CTDL.EXE may, on occasion, generate data files also.  These files, unlike
     those generated by CONFG.EXE, are not static; however, they are almost
     always very small.
 
      o CTDLARCH.SYS.  This file contains data about auto-archiving of rooms
                       (an advanced topic covered in OPER3.MAN.)
      o CTDLNET.SYS.   This file, created by CONFG.EXE, will be expanded by
                       CTDL.EXE if you are participating in a network.
      o CALLLOG.SYS.   This file, an optional text file, is updated as each
                       caller hangs up.  See #AUDITAREA.
      o CTDLDIR.SYS.   This file contains data about the directory rooms on
                       your system, specifically the name of the DOS directory
                       associated with each directory room on your system.
      o CTDLMODR.SYS   This file contains data about the room moderators on 
                       your system.
      o CTDLFWD.SYS    This file contains information about mail forwarding
                       by individual users if you are on the net.
      o FILELOG.SYS.   This file, another optional text file, is updated as
                       users upload and download files. See #AUDITAREA.
      o DOORUSE.SYS.   This file, another optional text file, is updated as
                       users use your doors.  See #AUDITAREA.
      o Net Files.     CTDL.EXE also generates a variety of small network
                       files, both temporary and permanent, for internal use.
                       See NETWORK3.MAN for more information on these files
                       (Appendix B).

         There are also the collection of help files accompanying Citadel-86,
     which we talk about in OPER3.MAN.








                                    -7-




     II.5 EASE!
        Released sometime in the last half of June, 1989, Citadel-86 Sysops
     have an alternative to the normal method of both constructing a new
     Citadel-86 installation and modifying the system.  This is the EASE
     utility program, which should be in its own archive, EASE.LZH.

        As we indicated above, Citadel-86's description file is CtdlCnfg.Sys
     which the Sysop must modify before installing a new system.  Although not
     a particularly wearisome task in itself, it can still be something of
     a pain to a new sysop as well as the more experienced sysop.  For this
     reason, and, hey, just for the fun of it, the EASE program has been
     provided.  EASE is just what it's named: it will ease both the
     installation and modification processes.

        At this point we'd like to urge you to do two things if you have EASE.
     First, read, perhaps swiftly, section II.6 below to get a feel for what is
     in CtdlCnfg.Sys, but don't try to modify the generic CtdlCnfg.Sys, nor
     should you try to initialize a new system, despite the suggestions below.
     Second, copy EASE.EXE, EASE.HLP, EASE2.HLP, MODEMS, CONFG.EXE,
     CtdlCnfg.Sys and CTDL.EXE into the directory in your system which will be
     the home directory for your installation.  Once you have done so, simply
     type EASE and follow the directions.  At the end of EASE, the system will
     hopefully be initialized with a complete CtdlCnfg.Sys and most of the
     data files you need, and you'll be ready to start playing -- far faster
     than the traditional form of installation for Citadel-86.

        To summarize, and if you have a hard drive:

     o Make a directory on the drive where you want your Citadel-86 installation
       to reside.
     o CD into that directory
     o Copy CONFG.EXE, CTDL.EXE, EASE.EXE, EASE.HLP, and the generic
       CtdlCnfg.Sys file into the directory (or deARC, or whatever it takes
       to get them into there).
     o Type EASE at the command line.  Follow the directions.  Be ready to
       refer to this documentation if you become confused.

        And remember.  EASE is not only for installation, but for modification
     as well.  Explore!

     II.6 The ole' configuration file
        So... we're done with the dull, but necessary, overview.  Now we get
     down to the fun stuff, the screechy details of deciding those system
     policies that can be enforced through the Citadel-86 software, where
     certain data files or groups of data files will be kept on your system,
     and some other details.  We do this by editing the file CtdlCnfg.Sys
     mentioned earlier in this manual, so you may want to haul out your editor.
 
        Or you may not.  Instead, it might be better to first read through this
     section along with a printout of CtdlCnfg.Sys, (we've included a copy of 
     it in this file as well; see pages 35-42) comparing, taking notes,
     understanding what is required and what questions you will have to answer
     in order to set up your Citadel-86.

        Or -- and we recommend this -- you may wish to use EASE, the Citadel-86
     installation and modification program.
 




                                    -8-






        We've decided to divide the CtdlCnfg.Sys file into four sections in
     this manual.  The first section covers the utter necessities which must be
     set correctly for Citadel-86 to come up, options you cannot shut off,
     and some miscellaneous doodads not strictly required for a basic
     system, but we'd like you to set anyway.  This first section makes up
     the bulk of the CtdlCnfg.Sys parameters, and is the only one you must
     fill out in order to bring up Citadel-86; the rest of the sections
     contain options unnecessary for a basic Citadel-86 (although, of course,
     they ARE useful!).  If you're using a 'virgin' copy of CtdlCnfg.Sys, the
     options in the rest of the sections have been set to what we feel are
     harmless values.
 
         The second section is made up of options useful, but not necessary,
     for the operation of Citadel-86.
 
        The third section is made up of options related to Citadel-86's C86Net
     support.
 
        The fourth section covers extremely optional parameters designed to
     make modem handling very flexible when necessary.  (Don't read this
     unless you have a captive, well-fed assembly-language programmer nearby.)
 
     II.6.a But first, a word on moral values ...
        There are two methods values are set in CtdlCnfg.Sys.  One method
     is related to our reference to the fourth section, above, and will
     thus be covered in that advanced section.  The other method for setting
     parameter values, used with the rest of CtdlCnfg.Sys, looks like this:

     #<parameter name> <parameter value>
 
        The '#' MUST be in the left-most column of the file in order for
     CONFG.EXE to recognize it as a parameter. Indenting this line a space
     provides an easy way to disable or save an old value when experimenting
     and causes CONFG.EXE to ignore the line.

        A parameter value will usually either be a numerical value or a string
     value, and we'll tell you for each parameter whether your selection should
     be numerical or a string.  When it is numerical, always use decimal (with
     the exception of the mysterious fourth section).

        String values are always enclosed in quotes.  Most string values are
     used to indicate where to find certain files, but some string values are
     special in that certain hard-to-express codes may need to be used in order
     to accomplish something; this occurs almost exclusively when communicating
     with odd modems (such as TransModems).  Therefore, certain parameter
     string values in CtdlCnfg.Sys will allow formatting "directives" to be
     placed within them, which will be interpreted during the execution of
     CTDL.EXE to do special things.  The general format of a directive is a
     backslash ('\') followed by a either a character indicating a specific
     action, or a sequence of three digits representing an OCTAL value you may
     need to be in this particular position to accomplish what you wish to
     accomplish. Here is the list of characters that perform special actions
     when following a backslash:
 
            n: CR-LF
            t: Tab character
            b: Non-destructive Backspace


                                    -9-




            r: CR
            f: Formfeed
            ": Put out a quote (allows quotes to appear in your strings)
            \: Backslash
 
     So, if you wanted to insert a CR/LF into a string value, you would type
 
             "...\n..."
 
     If you needed to have the binary value of 6 in a string value, you would 
     type
 
             "....\006...."
 
        Not all parameter string values accept these formatting directives;
     those that don't will simply ignore them.  We have marked those parameters
     accepting them both in this manual and in CtdlCnfg.Sys.  (OCTAL
     values, you say! Well.... the gentleman who donated the code to do the
     formatting directives, a certain Dalnefre' of SynTel, is a C hacker, and
     did it that way.  We feel it might be worth changing sometime in
     the future, too.)
 
        Please keep in mind that the '\r' has an added implication when placed
     in a CtdlCnfg.Sys string being sent to the modem.  Citadel-86 will pause
     for a full second after sending it in most situations.  This allows the
     sysop to send multiple commands to those modems using carriage returns as
     command delimiters, since the one second pause will give the modem time
     to digest the command.  For instance, "ATZ\rATS0=1\r" sent to Hayes-style
     modems would cause Citadel-86 to send "ATZ\r", pause for a full second
     during which the modem would reset to its power-up state (or at least for
     most Hayes clones it will), and then send the "ATS0=1\r", which activates
     the modem's auto-answer mode.  Please note this special processing of '\r'
     only applies to modem initialization and reinitialization strings, not to
     all strings.

        One more note.  Certain of the string values in CtdlCnfg.Sys end up
     being printed to the users via Citadel-86's formatter.  In these cases,
     when you use the CR/LF formatting directive ("\n"), remember to have a
     space follow it -- otherwise, Citadel-86's formatter probably won't send
     a CR/LF to the caller's terminal!

        Finally, you'll find a couple of parameters affect your installation
     simply by their very existence in your CtdlCnfg.Sys.  So that makes three
     ways to set values.

     II.6.b Section 1 of CtdlCnfg.Sys
        We're finally looking at CtdlCnfg.Sys.  The file starts (or at least
     our virgin copy does) with a short introduction to itself, which basically
     tells you to consult this manual if you find it too terse.  A short list
     of supported formatting directives is also included.

     Part 1 of Section 1: MEANINGLESS MISCELLANEA

        We're going to start Section 1 with some miscellaneous parameters.







                                    -10-





     ------
     #nodeTitle
        The first parameter you should find is called nodeTitle. It is a string
     value obeying formatting directives, and is subject to formatting
     considerations.  nodeTitle is the title of your installation printed when
     carrier is detected on your system.  More precisely, nodeTitle will show
     up in the following place on your system:
 
      Welcome to <#nodeTitle>
       Running ...
 
     However, nodeTitle may not necessarily be printed at this point.  After
     successfully bringing your system up, please consult OPER3.MAN's section
     on Help Files for more information on banner options.  EXAMPLE:
 
     #nodeTitle "Test System\n Truly a Heaven in Reverse"

     The #nodeTitle is printed out on .Read Status commands, also.  There is no
     formal limit on the length of this parameter.

     ------
     #nodeName
        nodeName is, in reality, purely a network parameter, and if you have no
     plans to ever join a C86Net, then there is no need to fill in this
     parameter.  However, it has always been traditional, even before there was
     a net for any Citadel system anywhere, to fill in this and the next
     parameter (and, so, sentimentally we feel this belongs in this
     Miscellaneous section).   nodeName is a string value which does NOT accept
     formatting directives (i.e., formatting directives will be ignored).  It 
     can be no longer than 19 letters long.  It should be a short, mnemonic
     name for your system.  An EXAMPLE of a reasonable value:
 
     #nodeName "ODD-DATA"            -- The original Citadel
 
     If you ever do join a C86Net, messages from your system appearing on
     another Citadel-86 node will look something like this
 
        82Nov23 from Cynbe ru Taren @ODD-DATA
 
     except ODD-DATA would be replaced with your value for #nodeName.

     ------
     #nodeId
        As mentioned, this parameter is a network parameter that has
     traditionally always been set, even for non-network Citadels.  If you have
     no plans to ever be on a C86Net, then you don't have to set this string
     value parameter to anything important.  If you do plan to join one,
     though, (we'll go over this in more detail in the section on the network),
     then you do have to set this parameter correctly.  The format of this
     parameter is
 
          "<Country code><Area Code><Phone number>"
 
     all of which applies to the phone your system resides on.  Country
     code is a two letter sequence indicating what country you live in (US is
     the United States, CA is Canada.  Other country codes may be found in
     COUNTRY.DOC). Area code is the area code of your system (yes,



                                    -11-




     we are aware there is a clear bias towards US-style telephony).  And
     Phone number is, of course, the phone number your system is on.  You
     can put punctuation (such as parenthesis and dashes), but please be
     conservative with them.  This string value does not obey formatting
     directives.  Here's a fairly generic example:
 
     #nodeId "US (612) 470 9635"          -- Some system somewhere
 
     ------

     Part 2 of Section 1: REQUIRED ODD STUFF

     ------
     #baseRoom
        OK, now we're out of the miscellanea and into parameters you have
     to set, starting with baseRoom.  Citadel-86 always has a minimum of three
     rooms, the Aide> room for housekeeping, the Mail> room for private
     correspondence, and the <baseRoom>, which is the room a caller is
     always initially placed in.  (Historical note: the old CP/M Citadel called
     this room the Lobby>; we've only made the name of the Lobby> selectable by
     the sysop.)  This parameter is a string value obeying formatting
     directives and goes through the Citadel-86 formatter, and you must limit
     yourself to 19 characters or less for this value. And one more note --
     Citadel-86 will append the '>' to this name when it prints the room prompt
     for this room, you don't have to put it in yourself. If you wished to
     emulate the old CP/M Citadel, you'd set baseRoom thus:
 
     #baseRoom "Lobby"
 
     There is no default for this parameter.

     ------
     #MainFloor
        MainFloor is analogous to #baseRoom.  Any Citadel-86 V3 has a base
     floor, just as it has an Aide> room, etc.  This parameter allows you to
     name this base floor.  This parameter is a string value which cannot be
     longer than 19 characters, and specifies the name of your base floor.  So,
     if you want to name your base floor MAIN FLOOR, you'd have

     #MainFloor "MAIN FLOOR"

     There is no default value for this parameter.

     ------
     #CRYPTSEED
        Citadel-86 automatically encrypts all sensitive data files.  While the
     algorithm used can, of course, be broken by the determined, particularly
     since the code is available for perusal, the encryption does provide
     protection against casual eyes, mistakes, and amateur system breakers.  We
     do encourage you to take precautions of your own, such as not opening
     directory rooms into sensitive data areas.

        CRYPTSEED is an encryption seed Citadel-86 uses to encrypt your
     data; if someone should acquire of all of your data files but for
     CtdlCnfg.Sys, then they still won't have access to your system until they
     figure out what your CRYPTSEED is.  DON'T EVER CHANGE THIS VALUE WHILE
     RUNNING A CITADEL-86, OR EVERYTHING WILL BECOME MESSED UP!




                                     -12-



 
        We do not know of any value you can select which will "deactivate"
     the encryption process (to be frank, we don't understand the encryption
     algorithm ourselves).  Pick a value at random; the value should be a
     value less than 65536.  Here's an example:
 
     #CRYPTSEED    69            -- a little hubris for the shy

     ------
     #UNLOGGED-WIDTH
        This parameter is used for users who have not logged in yet to specify 
    the width of their screens.  If not present, it will default to 40.  
    Remember this applies to your login banners.

    #UNLOGGED-WIDTH 79          - makes it all look normal


     Part 3 of Section 1: DATA FILE SIZES

    ------
     #MESSAGEK
        MESSAGEK defines how much disk space you wish to allocate for messages
     on your installation.  There is no way to define how many messages you
     want in your system, or how fast they turnover.  All the messages in your
     system will reside in CTDLMSG.SYS, and thus the number of messages in your
     system at any given moment will depend on the length of the messages being
     entered into the system by your users.  The turnover rate of your messages
     will depend on how busy your system is.  As an example, Test System has a
     611K message base, which holds 2100 messages +/- 300, of which some are of
     fairly good length.  Turnover seems to between 3 weeks and a month, since
     80-160 messages are entered a day.  However, Test System is also a busy
     system.

        The sysop of an installation should also keep in mind that very large
     systems, with many new messages, can be intimidating to new users, so
     large message spaces should be approached with caution.  Remember, there
     is a utility for expanding the message base, but not for shrinking it.
 
        This is a numerical value which you specify in 'K', which is actually
     1024 bytes/K.  So, for example, to specify a 250K message file
 
     #MESSAGEK 250               -- 250K message base

     ------
     #MSG-SLOTS
        This numerical parameter specifies how many messages per room will
     be used on this system (the lone exception is the Mail>, which is covered
     by the following parameter).  If you wanted to use Citadel-86's
     traditional number of messages per room, you'd have

     #MSG-SLOTS 58

     ------
     #MAIL-SLOTS
        This is a numerical parameter specifying how many messages per log
     record you wish to reserve for Mail.  The Mail> room is the only
     room in the system whose data is not kept in CTDLROOM.SYS.  Instead, the
     file CTDLLOG.SYS contains the "Mail>" room, reserving for each account




                                    -13-





     enough room for MAIL-SLOTS Mail messages.  Therefore, this parameter gives
     you the ability to decide the maximum number of Mail> messages per user 
     they can access.  Please remember if a user gets more messages
     in Mail> than there are MAIL-SLOTS between two successive logins, then
     they will lose the earlier messages sent to them.  Another consideration
     is many users like to review old Mail when engaged in an in-depth
     private conversation.  Therefore, setting MAIL-SLOTS to a low value may
     not be the attractive alternative it first seems.  However, it should
     go without saying a high MAIL-SLOTS value may eat up more room than
     necessary on your drives.  The section on LOGSIZE will give an exact
     formula for how much space your log will take up.  If you wanted to use
     what Citadel-86 used before V3, you'd have

     #MAIL-SLOTS 58

     ------
     #MAXROOMS
        This numerical parameter specifies the maximum number of rooms your
     system will support.  Since the baseRoom, Aide>, and Mail> room are
     necessary, the smallest value you can give is 3.  The largest number is
     65536 (probably).  If you wanted to have a 64 room system, you'd have

     #MAXROOMS 64

        You can use the following formula to estimate the number of bytes a 
     room file will take up on your system:

          # of bytes = MAXROOMS *(50 + (6 * MSG-SLOTS))

     ------
     #LOGSIZE
        This numerical parameter gives you the ability to decide
     how many accounts will be available on your system.  If you run a system
     in which more accounts are used than there are accounts reserved, then new
     accounts are generated by killing old accounts.  Accounts are recycled
     by finding the account who's last use is the oldest of all the accounts
     in the system, under the assumption such an account is no longer active.

        All space is reserved immediately for these accounts.  The size of
     this file can be estimated from the formula
     
          # of bytes = LOGSIZE * (82 + MAXROOMS + (6 * MAIL-SLOTS))

     so if you are operating in a restricted environment, plan accordingly.
 
        If you need to, you can expand the size of the log through the use of
     the DATACHNG utility, but the log cannot be shrunk.  This is a numerical
     value.  Here is an example:
 
     #LOGSIZE 180                -- Usually adequate.

     Part 4 of Section 1: DATA FILE LOCATIONS

        Now we discuss where you want the data files to be located on your
     system.  These parameters are all specified in the same way, as a string
     value (which does not obey formatting directives, naturally) telling
     Citadel where on your system the given data file or files associated with
     the given parameter is located.


                                    -14-






        Simply use the MSDOS relative directory specification.  You can
     ONLY specify a subdirectories of the current directory on the disk you
     specify (if you don't specify a disk, then the current disk will be
     assumed).  So, some sample valid specifications would be "c:", "a:system",
     "b:msgs", and "i:bark".  Some sample INVALID specifications include
     "c:\citadel\msgs" (an absolute specification, rather than relative),
     "a:\audit" (ditto), and "i:.." (".." is technically not a subdirectory,
     but a parent directory).
 
        If CONFG.EXE cannot find the directory you specify, it will
     attempt to create the directory, after asking permission.

     ------
     HELPAREA
        This parameter specifies where all of your Help files will be located.
     These files are *.HLP, *.BLB, and *.MNU.  Normally, you should create this
     directory and place the help files in the directory before bringing up
     Citadel-86, since help files are usually online at all times.
 
     #HELPAREA "c:helps"         -- helps subdirectory on drive C:
 
     ------
     LOGAREA
        This parameter specifies the location of your CTDLLOG.SYS file (this 
     file is sized by your LOGSIZE parameter).
 
     #LOGAREA "c:system"         -- put it in a general system dir
 
     ------
     ROOMAREA
        This parameter specifies the location of CTDLROOM.SYS, CTDLARCH.SYS,
     and CTDLDIR.SYS.

     #ROOMAREA "system"          -- another general system dir

     ------
     MSGAREA
        This parameter specifies the location of CTDLMSG.SYS.

     #MSGAREA "c:msg"            -- give msgs there own place in the sun

     ------
     FLOORAREA
        This parameter specifies the location of CTDLFLR.SYS.

     #FLOORAREA "floors"

     Part 5 of Section 1: POLICY OPTIONS

        Now we enter the POLICY part of the CtdlCnfg.Sys file.  The parameters
     discussed here represent the parts of your policy enforceable via
     the Citadel-86 software.







                                    -15-






     ------
     #AIDESEEALL
        This parameter is a toggle giving you some power over the scope of
     your aides' "vision".  If you set this parameter to 1, then your aides
     have access to all public AND private rooms (but not invite rooms, unless
     the have been invited).  If this parameter is set to 0, then aides only
     have access to public rooms, plus those private and invite rooms
     they've been invited to.  So, if you want your aides to see all public and
     private rooms, you would have
 
     #AIDESEEALL 1               -- See all but invite rooms
 
     if you don't want your aides to be so nosy, then you'd have
 
     #AIDESEEALL 0               -- See only public rooms.
 
     ------
     #LOGINOK
        The LOGINOK parameter controls whether your system is an "open" or
     "closed" system.  If you set LOGINOK to 1, the system will allow anyone to
     log in as a "new" user; i.e., it will ask a caller who uses an
     unrecognized password if they wish to login as a new user.  If LOGINOK is
     set to 0, the system will simply tell the caller without a valid password
     there is no record of their password, and they should leave Mail> to the
     sysop (but see OPER3.MAN's section on the various Help Files for another
     option); the only way to enter new users into the system is from the
     system console. If you want an open system, for example, you would have:
 
     #LOGINOK 1                  -- let the riff-raff in!

     ------
     #ENTEROK
        ENTEROK controls whether a caller who is not logged in can enter
     messages or not.  If ENTEROK is 1, then a caller who has not logged in
     can enter messages; if it is 0, then they must log in first, except for
     Mail to the sysop.  Setting ENTEROK to 0 can reduce vandalism; setting
     it to 1 gives your callers the privilege of anonymity.
 
     #ENTEROK  0                 -- log in first, folks!
 
     ------
     #READOK
        READOK controls whether an unlogged caller can read messages.  If
     READOK is 1, then they may.  If READOK is 0, then an unlogged caller can
     only read the policy statement available in the Mail> room (POLICY.HLP),
     and the help files.  Setting READOK to 0 can discourage unwelcome callers
     from using scarce system time.
 
     #READOK 0                   -- gotta login to read these gems...










                                    -16-



     ------
     #ROOMOK
        ROOMOK controls who can create new rooms on your system.  If ROOMOK is
     1, then any logged in user of the system may create new rooms.  If ROOMOK
     is 0, then only aides may create new rooms on your system.
 
     #ROOMOK 1                   -- a liberal policy
 
     ------
     #ALLMAIL
        ALLMAIL controls who can use the Mail> room.  If ALLMAIL is 1, then
     any user may use Mail> to send private messages to any other user on the
     system.  If ALLMAIL is 0, then only Aides may use the Mail> room in a
     general manner; regular folk can only use Mail> for messages to Sysop.
     Setting ALLMAIL to 0 may be appropriate on tightly focused systems
     operating in a small environment.
 
     #ALLMAIL 1                  -- the normal policy
 
     ------
     #DoorPrivs
        DoorPrivs lets you decide if new users should automatically be given 
     door privileges or if they should ask you for them.

     #DoorPrivs 1               -- they get them automatically

     #DoorPrivs 0               -- they have to ask.

     ------
     #ANON-MAIL-LENGTH
        When this numeric parameter is present, all anonymous Mail> to sysop is
     limited to the specified number of characters.  When a message is sent
     exceeding this limit, the user loses carrier and the message is appended
     to a file named ANONMAIL, just in case the Mail was valid.  This option
     is useful when a vandal is attempting to scroll the message base and is
     being very persistent, to the point where even closing open logins just
     causes him to leave anonymous Mail to sysop, since that's the last
     vulnerable point in the system once login access is lost.  This would let
     you let limit anonymous Mail> to 300 characters.

     #ANON-MAIL-LENGTH 300

     If this parameter is not present or the value is 0 then there is no
     limit on anonymous Mail.

     ------
     #LOGIN-ATTEMPTS
     This parameter lets you control how many unsuccessful attempts an
     unlogged user can indulge in before the system will drop carrier on them.
     For instance, the following lets a user try four times before carrier is
     dropped.

     #LOGIN-ATTEMPTS    4









                                    -17-




     ------
     #FILE-PRIV-DEFAULT
     File privileges may be set for new users en masse.  #FILE-PRIV-DEFAULT,
     a numeric parameter, lets you set whether the average new user can have
     file privileges.  Use 1 to indicate they may, 0 to indicate they may not.

     #FILE-PRIV-DEFAULT  1

     means you're a generous soul.  If this parameter is not present, it will
     default to 1 (on).  You may also assign file privileges individually
     using LOGEDIT or the <U>ser Administration menu hanging off of the Sysop
     Menu.

     File privileges do not apply to uploads.

     ------
     Part 6 of Section 1: MODEM HANDLING
        We now enter into defining the essential details of your communications
     hardware.

     ------
     #IBM
        You use this parameter to tell your Citadel-86 if your system is
     running on an IBM PC/XT/AT or compatible, or if it is running on a Zenith
     Z-100 (set it at 0). If you have an IBM, you'd have
 
     #IBM 1                      -- Big Boo
 
     ------
     #COM
        This parameter is meaningful only for IBMs, and selects which COM port
     the modem is attached to (on Z-100s only J2 ports are supported).  For
     IBMs, only COM ports 1, 2, 3, and 4 are supported.
 
     #COM 1                      -- If you are using COM1.

     ------
     #SYSBAUD
        The SYSBAUD parameter is used to tell Citadel-86 what baud rates your
     hardware will support.  Citadel-86 cannot normally be configured to run
     high baud rates while excluding lower baud rates (i.e., operate
     correctly at 1200 baud but not at 300 baud).  Here's the mapping:

       0 => 300
       1 => 300/1200
       2 => 300/1200/2400
       3 => 3/12/24/48
       4 => 3/12/24/48/96
       5 => 3/12/24/48/96/14.4
       6 => 3/12/24/48/96/14.4/19.2
 
     #SYSBAUD 1                  -- A 3/12 system.









                                    -18-




     ------
     #modemSetup
        This parameter is used to initialize your modem.  It is a string value
     parameter obeying the formatting directives; however, you should be
     warned Citadel-86 automatically appends a "\r" to the end of this
     string before sending it to the modem.

        And when is modemSetup sent to the modem?  It is automatically sent
     while Citadel-86 is initializing, and it will also be automatically
     sent to the modem whenever the <R>einitialize command is selected from the
     Sysop Menu (i.e. privileged function:).

        The value you use for this string should cause the modem to be
     put into a mode where it will function suitably with Citadel-86.  This
     includes auto-answer and response to DTR, at the very least.  Other
     options you may wish to consider include turning the modem speaker
     off (if you have one); consult your modem manual for details.  The example
     we have here is biased towards Hayes/compatible modems.  You may have to
     do some research if you're using an odd modem.  Our example turns
     auto-answer on and turns off the speaker on a Hayes modem; note the lack
     of "\r".
 
     #modemSetup "AT S0=1 M0"           -- Surely an exercise in aesthetics...
 
     ------
     #REINIT
        As faster and faster modems appear on the scene, some of these modems 
     are displaying odd characteristics which did not appear in the early
     300/1200 modems.  Chief amongst these is that some modems, after 
     accepting a call at a baud rate lower than the modem's highest, will not 
     accept calls at higher baud rates without being reinitialized at the 
     highest baud rate.  If your modem is one of these types, then you will 
     wish to use this parameter.

        Also, we have observed that some modems, although capable of accepting 
     calls at high baud rates directly after low baud calls have been 
     accepted, are not as reliable in the area of Result Codes as we might 
     like.  Since Citadel-86 can use Result Codes (see Section II.9.d), we
     would like to see this improved, and, fortunately enough, we have 
     observed using #REINIT with such modems actually increases their 
     reliability.  So, even if you have a good modem, you may wish to use this 
     parameter.

        When this parameter is present, it causes Citadel-86 to reinitialize 
     the modem at its highest rate with the string you specify in this 
     parameter.  This parameter accepts format directives.  For most Hayes 
     compatible modems, the string "AT" is usually more than acceptable.

     -#REINIT "AT"                      -- disabled, but recommended value












                                    -19-




     ------
     #DISABLE-MODEM
     #ENABLE-MODEM
        Usually, when Citadel-86 needs to "disable" your modem (that is,
     cause it not to answer the modem), it "drops" the DTR pin (electrical
     stuff, don't worry about it), which usually causes the modem to stop
     answering the phone.  The modem is disabled whenever you, the sysop,
     uses the system at the system console.

         Some sysops, however, would prefer the modem go "off-hook"; that is,
     the modem should hold your phone line open and thus cause a busy signal
     for all callers while you're on.  These optional string parameters,
     when present, are sent to the modem when disabling and enabling the
     modem, thus making it easy to force a busy signal when you're on if
     you know what command to send to your modem.  For example, "ATH1" will
     put most Hayes-type modems "off-hook", and "ATH0" will put them back
     on-hook.  In the following, we've disabled the parameters since we don't
     particularly recommend the use of these parameters ourselves, but the
     values are what we'd probably recommend if we used them.  Note the use
     of "\r" at the end of each!  Citadel-86 will not! automatically append
     the carriage return needed to force the modem to process the command, so
     you must do that yourself!

     -#DISABLE-MODEM "ATH1\r"
     -#ENABLE-MODEM  "ATH0\r"

     ------
     #LOCK-PORT
        This advanced parameter is used for "locking" your com port at the
     baud rate you specify.  This parameter is primarily useful when you
     are using a USR high speed modem (HST, Dual-Standard, etc.) and you want
     to have the callers, when they are calling in with compatible modems, to
     enjoy the highest possible throughput, which is achieved by having the
     modem talk to the computer at a specific (and high) baud rate, regardless
     of what the caller is connected at.

        As we said, this is an advanced option.  If you plan to use it, you
     must make sure your modem knows about it and is fed the correct modem
     commands so it knows what baud rate it should talk at.  You should use
     the #REINIT parameter to tell it this information.

        The parameter you specify to #LOCK-PORT should be a number indicating
     what speed you want the computer to talk to the modem.  Use the same
     scheme as for #SYSBAUD, i.e., 300 = 0, ... 4 = 9600, 5 = 14400, and
     6 = 19200.  For example, if you have a good enough serial port to handle
     19,200 baud with your USR modem, you would want

     #LOCK-PORT 6

     in your CtdlCnfg.sys.











                                    -20-




     ------
     Part 7 of Section 1: VIDEO OPTIONS
     ------
     OLDVIDEO
        This parameter is difficult to categorize, so we'll just lay the cards 
     out on the table.  Basically, every once in a long while we run across 
     some computer that hangs when Citadel-86 is run, and it has something to 
     do with the video portion of Citadel-86.  (We haven't actually seen this 
     happen in quite a while, but ...)  Therefore, if you place #OLDVIDEO in 
     CtdlCnfg.Sys, Citadel-86 will use its old video routines for display, 
     rather than the new.

     -#OLDVIDEO         -- disabled

     ------
     FOREGROUND
     BACKGROUND
     STATUS-FOREGROUND
     STATUS-BACKGROUND
        These four parameters allow you to specify what colors will show up at 
     the system console.

     FOREGROUND specifies the color of the characters themselves, except on 
     the status bar.

     BACKGROUND specifies the background of the screen, except on the status 
     bar.

     STATUS-FOREGROUND specifies the color of the characters of the status 
     bar.

     STATUS-BACKGROUND specifies the background color of the status bar.

        You have the following colors to select from.  This first list of 
     colors may only be used as FOREGROUND selections:

        DARK GRAY, LIGHT BLUE, LIGHT GREEN, LIGHT CYAN, LIGHT RED, LIGHT 
        MAGENTA, YELLOW, WHITE.

        This second list of colors may be used as either FOREGROUND or as 
     BACKGROUND selections:

        BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHT GRAY.

        Please note on some color monitors not all colors are 
     available, and on monochrome monitors you should probably select 
     highly contrasting colors for Foreground/Background pairs.  Here is an 
     example:

     #FOREGROUND RED
     #BACKGROUND BLUE
     #STATUS-FOREGROUND LIGHT GREEN
     #STATUS-BACKGROUND BLACK

        Also note Citadel-86 is accompanied by a utility program named 
     SCREEN.EXE which will help you select colors easily.  Please see the 
     Utilities manual when you are ready to play with your screen colors.
     The EASE utility is also capable of helping you select screen colors;
     in fact, SCREEN is classed as an optional utility, and you may not have
     it.

                                    -21-




     ------
     CLOCK
        The status bar of Citadel-86 contains a clock, updated every minute, 
     in the far right-hand corner.  Some folk may not want this clock, 
     however, while others only want to see the clock only when a user is on 
     the system.  Therefore, the parameter #CLOCK is available to control the 
     behavior of the status bar clock.  The value you place after #CLOCK
     controls the behavior of the status line clock.  Here are the supported 
     values:

     o "None" - If this is present, then you never have a status bar clock.
     o "Inuse" - If this is present, the clock is only displayed when the 
                 system is active.
     o "Always" - This causes the clock to be active all the time.

        So, for instance, if you want the clock to never be on display,

     #CLOCK None                - No clock

     would do the trick for you.  If this parameter is not in your 
     CtdlCnfg.Sys, "Always" is considered the preferred value.

     ------
        If you are a novice setting up Citadel-86 for the first time, please 
     SKIP to Section II.7.  This is the end of Section 1 of CtdlCnfg.Sys,
     parameters which must be set for Citadel-86 to run correctly.  The other
     three sections of a virgin copy of CtdlCnfg.Sys (which we assume you are
     working with) have been given default values that shouldn't cause any
     problems with running a Citadel-86.
 
        If, on the other hand, you're just exploring what's available, continue
     on your merry way!
 
     II.6.c Section 2 of CtdlCnfg.Sys

        Now we enter into the realm of options which may prove useful to you in
     your particular environment, but which are not necessary for the correct
     operation of a Citadel-86.  We're going to begin by discussing a general
     time-driven event-handler facility.  Then we'll talk about some other
     miscellaneous parameters.
 
     ------
     #event ...
        This is what we're calling a "time-driven event-handler", which we're
     going to define as the ability to cause Citadel-86 to do certain things
     at times you specify.  So, for instance, you can have the system
     come down at certain times of the day to back itself up, or have it go
     into networking mode several times a week -- or several times a day.  Or
     do whatever your imagination suggests.  Any number of these #event
     parameters may appear in your CtdlCnfg.Sys file.

        This is the generic format of these parameters.

     #event <days> <time> <class> <type> <duration> <warning string> <depends>







                                    -22-




        Here is an explanation of each parameter field in the above.

     <days> can be any of the values "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
     "Sun", or "All", or any combination of the first seven.  If used in
     combination, separate each with a ',', but NO spaces are allowed.  This
     part of #event is used to specify on what days this event is to take
     place.  So, if you want something to happen only on Wednesdays and
     Saturdays, then you'd have

     #event Wed,Sat ....

     The 'All' value means, of course, all days of the week.

     <time> is the military specification of what time of day this event is
     supposed to happen (unless the class of this event is 'relative' -- see
     below).  For instance, 11 AM would be

     #event .... 11:00 ....

     while 11 PM would be

     #event .... 23:00 ....

     and 12:30 AM would be

     #event .... 00:30 ....

     Only one time can be specified in this field.  If you need the same event
     to happen at multiple times, then use separate #event entries.

     <class> indicates the class of the event, which is roughly what kind of
     event it will be.  C-86 supports twelve classes of events at this time,
     as described below.

     'network' -- this indicates Citadel-86 should drop into networking
     mode on the day(s) at the time indicated by the <days> and <time> fields.
     See NETWORK3.MAN for more information.

     'until-done-net' - This class of event is very much akin to the 'network'
     class of event, and before using this event it is recommended the
     'network' class be reviewed.  This class differs in that if all systems
     on the member nets specified for this event are reached (or do not need
     to be called) then the system will immediately exit the network session.
     Spine systems will be called regardless of the need to connect.  The
     <depends> format for this class is the same as for 'network'.  See
     NETWORK3.MAN for more information.

     'external' -- this indicates Citadel-86 should come down on the
     day(s) at the time specified by the <days> and <time> fields.  The
     ERRORLEVEL Citadel-86 should generate when it comes down will be
     discussed later in the subsection on the <depends> field.  This class
     should be used in conjunction with a carefully written batch file.

     'relative' -- this indicates Citadel-86 should come down X minutes
     after it has come up (this is used to replace the TIMEOUT and HOUROUT
     parameters of pre-V3 Citadel-86).





                                    -23-




     The number of minutes (X) should be expressed in the <time> field; the
     <days> field has no meaning (although it should be filled in) when class
     is 'relative'.  The ERRORLEVEL to be generated by Citadel-86 when it comes
     down will be discussed later, but for now we'll state it occupies the

     <depends> field.  For instance, if you want your system to come down 6
     hours after it comes up, do something, and then come back up (at which
     point you should realize it'll come back down again 6 hours after that,
     unless another event comes first), you would have an event like:

     #event Sat 6:00 relative .... 7

     in your CtdlCnfg.Sys (note Sat is meaningless, but some valid field
     has to be there), and your batch file would have something like this:

     :loop
     ctdl
     ...
     if ERRORLEVEL 7 goto doseven
     ...
     :doseven
     REM this is a generic program call, fill in with what you'd really do
     generic
     REM other things..
     ....
     REM now bring Citadel-86 back up
     goto loop
     ....

     'dl-time' -- This indicates a "download time limit" should be
     activated.  When this class of event is active, the total amount of time
     a user may use in downloads during the period of time this #event is active
     is limited by the value in the <depends> field, specified in MINUTES.
     This class value should only be used with the 'quiet' type (see below).
     When this event ends, download time limits return to an unlimited status
     automatically.

     'anytime-net' -- This class is used to activate the Anytime-Netting
     Callout feature.  This feature is detailed in NETWORK3.MAN; basically,
     events of this class specify the period of time in which calling out
     to other systems specified in the <depends> field of the event for 
     anytime network purposes is acceptable.  The start time specifies when
     the system may becomes eligible for calling out, and the <duration> field
     indicates how long this eligibility is to last.  You may also specify how 
     long the system is to be idle before anytime netting is to be attempted, 
     and how long such net sessions should last, using the #event parameter.
     NETWORK3.MAN contains the closest thing to a full discussion of this
     feature, and we strongly recommend you read Network3.Man before using
     this class of #event.  This class should only be used with the <type>
     value 'quiet' (see below).

     'door-limit' -- This class is used to place time limits on how long the 
     current user may spend using doors on your installation.  The <days>,
     <time>, and <duration> (see below) fields are the same as for most other 
     classes, meaning you can designate which ever days and times you want 
     doors to be limited, and for how long.  The <class> field should, of
     course, contain 'door-limit" as its value.  The only valid <type> value




                                    -24-




     (see below) for this class of event is 'quiet'.  This #event is ignored 
     when the user is a sysop, either remote or at the sysConsole.  This 
     #event is overridden by automatic doors (see below).

     'autodoor' -- This class is used to set up 'automatic doors' to be 
     triggered when specified users log in.  The days, time, and duration 
     fields are the same as usual, thus allowing you to deactivate and 
     activate it at scheduled times.  See the <depends> definition below for 
     the format of <depends> in connection with this class.  The only valid 
     type value is 'quiet'.

     'chat-on' -- This class is used to enable Chat Mode (that is, allow
     users to signal the sysop for a chat) at a specified time.  Days and
     time are the same as usual.  However, the duration field does NOT
     imply that at the end of the event Chat will be automatically turned
     off.  However, by setting the duration field appropriately you may
     ensure Chat is turned on in case your system is brought up after the
     event but during a time you'd prefer chat to be on.  For example, if
     you wanted Chat to be on starting at 7PM, and were sure you wanted it
     on until 10PM, you might have a #event that looked like this:

        #event all 19:00 chat-on ... 180 ...

     This would not only turn Chat on at 7PM, but, if your system was down
     due to a power shortage (for example) until after 7PM and then brought
     up, the duration of 180 minutes would still turn Chat on.  If you had
     used 0, then Chat would not have been turned on if your system was down
     at 7PM.  This class should only be used with the <type> value 'quiet'
     (see below).

     'chat-off' -- This class is the same as 'chat-on' except, of course,
     chat is turned off at the specified time.

     'redirect' -- This class lets you redirect an incoming file from the net
     to a specific directory, which can be useful for automatic network
     domain map updates and the like.  The only valid <type> field value for
     this class is 'quiet.'  The <depends> field will contain, in order, the
     name of the incoming file to trigger on, the directory to place the
     file in, and the system from which this will be accepted (other systems
     sending same-named files will only result in the file being put in the
     normal file reception area, as will files from rogues if you are using
     network passwords).

     'newusers-allowed' -- This class is strongly analogous to the chat-on
     class.  At the specified time on the specified days, new users will be
     allowed to create their own accounts, regardless of the value of the
     #LOGINOK parameter in your CtdlCnfg.sys file.  As with the chat-on class,
     the duration field of the event should be set to cover the entire time
     new users will have this privilege, in case your system is brought up
     sometime during that time period.  Additionally, at the end of this event
     the parameter will NOT be set back to its old value; instead, it is left
     on.  If you want to disable the privilege when events of this class expire,
     see the next class.  Events of this class should always be of type 'quiet.'
     This class has no <depends> field.







                                  -25-



     'newusers-disallowed' -- This class complements 'newusers-allowed' and
     should be used to disallow new users from creating their own accounts.
     Example: to let new users create accounts at 7pm to 12pm and turn that
     ability off at all other times, use the following two lines:

#event All 19:00 newusers-allowed quiet 300 ""
#event All 00:00 newusers-disallowed quiet 300 ""

     <type> defines what type of event this will be, which essentially means
     how Citadel-86 reacts when the event time comes around.  There are three
     types of events supported at this time: preempt, non-preempt, and quiet.

     'preempt' -- this indicates when it's time for this event to occur
     the current user (if one is on) will be kicked off the system.  A warning
     will be issued to the user 5 minutes before the event is to occur (or if
     they call in after the 5 minute mark has passed, they will get the warning
     immediately). This type should be used for events which MUST occur at a
     given time, such as networking.

     'non-preempt' -- this indicates the system is willing to wait until
     the current user is off the system before executing the current event.  If
     the time of the event is passed by, the event will still be executed when
     the caller logs off.

     'quiet' -- this indicates the event should occur with no notice given
     to the user.  Currently, this only makes sense with the 'dl-time',
     'door-limit', 'autodoor', 'anytime-net', 'chat-on', and 'chat-off'
     class values.

     <duration> defines how long the event will last, in minutes.  If duration
     is 0, then if you happen to bring the system up at the exact time the
     event is to take place, the event WON'T take place; for all other values
     of duration, the event will take place. Duration should probably be 0 for
     external events you only want to happen once, happen quickly, and
     bring the system right back up, such as a backup event in which your BAT
     file backs up the system and then brings it back up.  This can go so fast
     your system will be back up in less than 1 minute, so you don't* want
     duration set to 1 -- you want it at 0, otherwise the event could be
     executed more than once.  However, for network events you certainly want
     it set correctly.  A 45 minute network event would look like this:

     #event ... ... network preempt 45 ....

     <warning string> is only valid for 'preempt' and 'dl-time' events.  It
     is sent to the user for the warning and for the "you've been kicked off"
     messages.  It should be enclosed in quotes.  Here's what the messages
     look like for preemptive events:

     "<beep>WARNING: System going down at <time> for <warning string>."

     "<beep>Going to <warning string>, bye!"

     So, for networking,

     #event .... "networking" ...

     works just fine.  The message, when used for download time limit events,
     looks like this:




                                  -26-




     "I'm sorry, that would exceed the current cumulative
               download time limit of <warning string>."


     <depends> is a parameter whose meaning depends on the class of the event.
     If the class of the event is 'external' or 'relative', then this value is
     the ERRORLEVEL Citadel-86 is supposed to generate as it comes down,
     and should be used in BAT files for further processing.  The upper
     effective limit on this parameter is whatever MSDOS allows in BAT files,
     we think.  Before leaping into this, however, please review the section
     on BAT files in this Installation Manual, paying particular attention to
     already-reserved ERRORLEVELS.

     If the class of this event is 'network', then <depends> specifies which
     net(s) this network event is going to participate in.  While we are not
     going to discuss in detail what Citadel-86's "multinet" capability is
     right now, here is a summary: Citadel-86 supports handling multiple
     C86Nets.  Each network is identified by a number; all of the nodes in
     your system can be associated with 0 or more of these nets. Thus, using
     the <depends> field can allow you to network with certain systems at one
     time and/or day, and other systems on other times and/or days. The
     <depends> field must have at least one of the nets identified here, and
     may have more if a particular network session is servicing more than one
     network at a time.  If more than one net is to be serviced, place a comma,
     and ONLY a comma, between each net identifier. So, if you wanted to
     specify nets 1, 6, and 14, you'd have

     #event .... 1,6,14

        If the class of the event is 'dl-time', then the depends field specifies
     the maximum number of minutes which may be spent in downloading while
     this event is in effect.

        If the class of this event is 'anytime-net', then depends consists of
     three values: <dead time> <session length> <member net list>.  Dead time 
     is how long the system is to be idle before attempting netting, session 
     length is how long such net sessions should last, and member net list is 
     just like the normal network session member list.

        If the class of the event is 'autodoor', then the format of the 
     depends field is

        "username" doorentrycode

     The reason for the quotes around the username is some users have 
     multi-word names.  doorentrycode is the entry code for the #door to be 
     triggered when user "username" logs in.

        If the class of the event is 'door-limit', then the depends field 
     specifies the time limit on doors in minutes.

        If the class of the event is 'chat-on' or 'chat-off' then there are
     no values for the depends field.

        if the class is 'redirect' then the <depends> field will contain
     <filename> <directory name> <system name>, for the name of the file
     which will be redirected, the directory to put it in, and the system from
     which the file will be accepted and redirected (same-named files from
     other systems will be placed in the normal area, #FILE_RECEPT_AREA).


                                  -27-




        And that's it for the #event parameter(s).  We hope our explanation
     is understandable; we sure had a hard enough time writing it!  Oh, and
     there are examples of real-world #event entries in Section XIX (we think) 
     of the Operations Manual.

     ------
     #sysPassword
        This parameter gives you access to the Remote Sysop capabilities of
     Citadel-86.
 
        A "Remote Sysop" is an Aide, not at the System Console, who knows
     the Remote Sysop Password.  A Remote Sysop's capabilities include complete
     access to the Sysop Menu (yes, including such silly things as changing
     the Baud Rate -- See OPER3.MAN) and when editing rooms the Remote Sysop
     can do what a normal Sysop can do.  A Remote Sysop gains access to the
     Sysop capabilities in exactly the same way as a normal Sysop does, by
     sending a ^L to the system -- but a Remote Sysop has to supply a password.

        This parameter, a string value which does not obey formatting
     directives, does NOT (repeat NOT!) specify the Remote Sysop Password.
     Rather, it specifies the NAME of a file containing, on one line, the
     Remote Sysop Password (this allows you to hide your Remote Sysop Password
     somewhere on your system).  This filename may specify any file anywhere
     on your system, including different drives and subdirectories.
 
        The password itself must be at least 15 letters long, and is, unlike
     most passwords, case-sensitive.  WARNING: If you change the password
     in the file, you must run CONFG again (CONFG ONLYPARAMS -- see the Section
     on Command Line parameters).

        If this parameter is not specified, or the file is not found, then the
     Remote Sysop facility is not active.

        We really don't recommend you use this facility, due to the abuse
     possible if some juvenile delinquent breaks two passwords.  However, if
     you insist on using this facility, and placed your password in a file in
     a directory on drive G, in a file named PWD in a directory on the root
     called HIDING, you'd have the following in your CtdlCnfg.Sys file.
 
     #sysPassword "g:\hiding\pwd"       -- Note the lack of '\\' sequences

     ------
     #door ...
        This parameter is used to make a door available to the user.  This
     subject is treated fully in Section XI of the Citadel-86 Operator's
     Manual (OPER3.MAN).

     ------
     #ISDOOR
        This parameter allows you to run Citadel-86 as a door itself.  When 
     you configure a Citadel-86 using this parameter, it will no longer 
     attempt to initialize the modem when coming up, because it will expect a 
     user to be there already.  For further details, see the Operations Manual 
     Section XII.

     ------
     #AUDITAREA
        This parameter is just like the MSGAREA, et al.  It is a string value
     parameter specifying a drive and directory which will hold three audit
     files.  If this parameter is not present in your CtdlCnfg.Sys file, then

                                    -28-





     the audit files will not be created or updated by Citadel-86.
 
        The audit files are known as CALLLOG.SYS, DOORUSE.SYS, and FILELOG.SYS.
     They are simple ASCII text files containing notes regarding system usage.

        CALLLOG.SYS contains three types of notes.  The first type lists when
     the system has come up and down.

        The second type records who has called, listing login and logout times,
     one line per person, in the following format:
 
     <person>   :   <login time> - <logout time> <baud rate>

        Occasionally such a line will have an extra character appended onto it,
     and they have the following significance.
 
        '+'  The user logged in as new.
        '-'  The user used .TS to logout.
        'T'  The user timed out on the system.
        'E'  The user hit the error limit on the system and was
             kicked off.
        'B'  The system kicked the user off for too many offenses against
             BADWORDS.SYS.
        'C'  The user tried to chat with you.

        The third type of message in CALLLOG.SYS are notes regarding network
     sessions, both normal and anytime-net.  These record on a single line
     the start and end times of the net sessions.  This particular message can 
     be disabled by using the #CLEAN-CALLLOG parameter.

        FILELOG.SYS format is somewhat different.  Generically, it looks like
     this:

     <user name> @ <baud rate>
        file1 (n bytes) <roomname> <U or D> <start to end> <length> <protocol>
                                                                        [FAILED]
        file2 (n bytes) <roomname> <U or D> <start to end> <length> <protocol>
                                                                        [FAILED]
        ...

        This format keeps the number of user names down.  "n bytes" is the size
     of the file.  "roomname" is the room involved.  "U or D" refers to whether
     the named file was Uploaded or Downloaded.  "start to end" refers to start
     time and end time of the file session, while length is the amount of time
     involved.  Protocol will be one of the three XMODEM, YMODEM, or WXMODEM.
     "FAILED" will only appear on the line if the transfer failed.

        DOORUSE.SYS simply lists who used what doors for what amount of time
     at what time of the day.

        If you want to have a call log, you would have something like this in
     your CtdlCnfg.Sys file:
 
     #AUDITAREA "c:audit"         -- This can only be a subdirectory






                                    -29-



     ------
     #MIRRORMSG
        The structure of Citadel-86's message base causes frequent disk access.
     While this is not particularly deleterious for a hard disk, this kind of
     activity has been known to actually destroy floppy drives. Therefore, it
     makes sense to put the message base into a RAM drive. However, this leaves
     systems vulnerable to message base loss due to power failure. Because of
     this, Citadel-86 has the ability to support two identical message bases at
     once.

        The first message base functions as the primary; messages are written
     to and read from this base. This message base is specified by the MSGAREA
     parameter.  The second message base, however, is subject only to writing,
     thus saving wear and tear on the media involved.  Since the primary
     message base (the one both written to and read from) is subject
     to a lot of wear and tear, this message base should be placed in a RAM
     disk. The MSGAREA parameter mentioned earlier specifies the area for the
     primary message base.  It is your responsibility to make sure a copy
     of CTDLMSG.SYS is in the RAM disk when you bring Citadel-86 up; Citadel-86
     will not do that for you.

        The secondary message base, since it is only written to, should reside
     on permanent media, such as a floppy.  The parameter MSG2AREA, a string
     value not responsive to formatting directives, specifies the area
     where the secondary message base should reside.  Since both message bases
     are written to simultaneously, they should remain identical.

        If you wish to use this option, MIRRORMSG should be set to 1;
     otherwise, it should be set to 0.  If MIRRORMSG is set to 1, then MSG2AREA
     should specify where the secondary message base should reside.  For
     instance
 
     #MIRRORMSG 1                -- yeah, why not?
     #MSG2AREA "b:msg"           -- on floppy, of course

     ------
     #HOLDAREA
        Citadel-86 has the optional capability to save messages inadvertently
     interrupted during composition for later completion.  The reason we say
     "optional" is the method used to save such messages is to save them as
     files on disk, and in a restricted environment such an ability may not be
     desirable. Thus, this feature is only available on systems in which
     #HOLDAREA is defined.  #HOLDAREA is another directory specification,
     exactly like those of Section 1 of CtdlCnfg.Sys.  All interrupted messages
     will be stored there until the next time the user logs in.  These files
     are currently about 8K bytes long.

     #HOLDAREA "hold"

     ------
     #sysopName
        This parameter is used to tell your system who the sysop is.  The only
     real effect of this parameter is all Mail> to sysop is automatically
     routed to the account that you specify in this parameter's string value.
     (This will also affect net Mail> to sysop.)  If you're not using this
     parameter, or the account does not exist, then Mail> to sysop will end up
     in the Aide> room.

     #sysopName "Me!"



                                    -30-





     ------
     #SYSOP-ARCHIVE
        This optional string parameter is used to tell your system where to
     archive the system operator's Mail.  The string specifies which file the
     Mail> should be archived to.  If the parameter #sysopName is not specified
     or if this parameter is not specified then Sysop Mail will not be
     archived.

     #SYSOP-ARCHIVE "c:\citadel\moocow"

     ------
     #EDITOR
     #EDIT-AREA
        These two parameters allow the sysop to specify a
     Sysop Editor for use at the System Console.  Full information on
     this feature is contained in OPER3.MAN Section X.  Essentially, the Sysop 
     may use the editor of his/her choice for message composition when at the 
     System Console, and these two parameters allow the System Operator to 
     specify what editor to use and where to place the temporary file.

        #EDITOR is the name of the editor, along with any necessary options.
     It does not obey formatting directives.  If #EDITOR is not present in 
     CtdlCnfg.Sys, then the Outside Editor is not available.

        #EDIT-AREA is entirely optional, and does not disable the Outside 
     Editor if it is not present.  The System Operator may use this parameter 
     to specify some area of his disk system for the placement of the 
     temporary file containing the message text other than the current drive 
     and directory (this is useful for RAM disks, etc.).

     #EDITOR "q"        -- qedit
     #EDIT-AREA "d:\"   -- in the root of drive D:

        See OPER3.MAN for full information.

     ------
     #CLEAN-CALLLOG
        If this parameter exists in your CtdlCnfg.Sys, then network sessions 
     will not appear in your CALLLOG.SYS.

     ------
     #ANONYMOUS-SESSIONS
        If this parameter exists in your CtdlCnfg.Sys sessions in which remote
     callers fail to login to be recorded in CALLLOG.SYS (if auditing is
     enabled -- see #AUDITAREA).  Normally, user sessions in which the caller
     never successfully logs in are not recorded.  This option lets you
     override this behavior.  This override does NOT apply to anonymous uses
     of the sysConsole.












                                    -31-




     ------
     #CONSOLE-TIMEOUT
        The optional parameter #CONSOLE-TIMEOUT allows you to specify CONSOLE
     timeouts.  The value you give will be interpreted as the number of seconds
     the system is quiescent in CONSOLE mode before timing out (that is,
     return to MODEM mode).  If this parameter is not present in your
     CtdlCnfg.Sys, or if its value is -1, then Console Timeouts are disabled
     on your system.  Example:

     #CONSOLE-TIMEOUT 600

     The system will timeout after 10 minutes when in Console mode.

     ------
     #CONSOLE-DELAY
        This parameter is for use on hardware with very fast video display
     systems, such as fast AT class machines.  Such hardware can make it
     difficult for the sysop to use their own system at the sysConsole.  This
     parameter lets you tell Citadel-86 to delay x milliseconds after each
     character when the user is at the sysConsole.  For example, to tell the
     system to hesitate for two milliseconds after each character:

     #CONSOLE-DELAY 2	-- 2 millisecond delay after each character

     This option does not affect remote users at all.  Use this parameter
     only if you find you need it.  If it's not present then there is no delay,
     of course.

     II.6.d Section 3 of CtdlCnfg.Sys

        This section covers the parameters of CtdlCnfg.Sys concerning the
     Citadel-86 networker.  We have no intention of covering the network itself
     in this section; we tried to cover that in NETWORK3.MAN, and direct you
     to there if you're interested.

     ------
     #NETWORK
        This parameter controls whether or not you're in the network at all.
     Set it to 1, and you are.  If it is set to 0, then you are not (initial
     setting for our virgin copy).  If you are planning to participate in the
     network, then please be sure you understand the section on the
     #event parameter, because you use #events to tell your system when
     to communicate with other systems on the networks.
 
     #NETWORK 1                  -- This system participates.

     ------
     #nodeDomain
        This is the name of the domain your reside in.  You may only reside
     in one domain.  This domain string is sent with each net message
     originating on your system (mostly as a way to facilitate users finding
     out how to send net mail to your system) (assuming you are netting,
     otherwise this is meaningless), and will be displayed, generically, like
     this:

     <date> @<time> from <author> @<nodeName> <nodeDomain display>





                                    -32-





     The reason we say "nodeDomain display" is that it's possible for some
     systems to customize the display of the nodeDomains of the messages
     passing through.  Assuming they aren't customizing, an example of a
     display using the above and assuming the #nodeDomain is "wa" (or WA --
     this is case-insensitive) would look like this:

        82Nov23 from Cynbe ru Taren @ODD-DATA _ wa

     Here's what ODD-DATA's CtdlCnfg.Sys entry for #nodeDomain would then
     look like:

     #nodeDomain "wa"		-- just another string parameter

        See NETWORK3.MAN for more information on domains in Citadel-86.

     ------
     #DomainDisplay
        This optional string parameter, if present, effects how domain
     designations of messages from foreign systems are displayed on your
     system.  There is a special format to this string: somewhere within the
     quotes it must contain a "%s".  This "%s" will be replaced by the domain
     of the message.  For instance, if you wanted to override the default
     behavior of putting a " _ " between the node ID and it's domain with
     having the domain being placed between brackets, you'd put

     #DomainDisplay " [%s]"

     in your CtdlCnfg.Sys.  Notice the leading space.

     ------
     #RouteMail
        This parameter controls whether or not you categorically refuse to 
     route network mail.  If you do choose to route mail, you can still 
     control routing via individual flags for each node; see the RoutMail 
     utility.

     #RouteMail  1              -- allows route mail to happen

     ------
     #MailHub
        This parameter lets you redirect mail which is domain oriented to
     another system which presumably has a better chance of delivering the
     Mail to the system in the domain you don't know much about.  See
     NETWORK3.MAN for far more detail than we provide here.  An example
     might be

     #MailHub "Data Drum"	-- current Illinois domain server

     ------
     #ServeDomain
        This parameter lets you decide if you want to be a domain-server.
     See NETWORK3.MAN for more detail.

     #ServeDomain "xx"






                                    -33-





     ------
     #NewNetPrivs
        This numerical parameter let's you decide if new users should 
     automatically have net privileges or not.  If 1, then they do; 0, they
     don't.

     #NewNetPrivs 0                     -- let's be paranoid!

     ------
     #NETAREA
        This string parameter specifies where all the net files will be located
     on your system.  The "net files" are CTDLNET.SYS and various temporary
     files having the suffixes ML, RFL, VTX, and SFL, plus some files with
     numeric suffixes (like R3.0).  NETAREA is just like LOGAREA, MSGAREA,
     etc., specifying drivename, if necessary, and only a subdirectory of the
     current directory of the relevant drive.
 
     #NETAREA "netstuff"         -- let's put it in a directory called
                                 -- netstuff.

     ------
     #DOMAINAREA
        This string parameter specifies where all the domain files will be
     located.  See NETWORK3.MAN for more information on domains.

     #DOMAINAREA "domains"	-- make it a separate directory from NETAREA

     ------
     #SHARED-ROOMS
        This numeric parameter reserves room in each node record for the number
     of shared rooms you think you'd like to share.  Each takes up 6 bytes, so
     plan according in view of the number of nodes you'll have on your node
     list and the number of rooms you might want to share with other systems.
     If you want to change this value later, use a utility!

     #SHARED-ROOMS 4            -- conservative

     ------
     #NET_RECEPT_AREA
        This parameter specifies a directory on your system containing
     all files sent to your system by some other system during
     networking, using the Send File facility (this is not the same as
     requesting files over the network).  NET_RECEPT_AREA is a string value
     unresponsive to string formatting directives, of course, and it may
     specify any directory on your system, not just a subdirectory to your
     current directory.  So, supposing you wanted to specify
     C:\CITADEL\HOLDING as the directory for incoming files from the net,
     you'd have in your CtdlCnfg.Sys
 
     #NET_RECEPT_AREA "c:\CITADEL\HOLDING" -- directory
 
     ------
     #NET_AREA_SIZE
     #MAX_NET_FILE
        These two parameters allow you to control how much space you wish to
     devote to files coming into your system from the net via the Send File
     command (i.e., other systems sending you files without you asking).
 


                                    -34-





        NET_AREA_SIZE allows you to tell Citadel-86 how much space to devote to
     the directory specified in NET_RECEPT_AREA.  When a system attempts to
     send you a file, Citadel-86 will get the size of the file, and then check 
     to see how much space is already being taken up by files in
     NET_RECEPT_AREA.  If the difference of NET_AREA_SIZE and the files already
     in NET_RECEPT_AREA is less than the size of the incoming file, then your
     system will not accept the file.

        MAX_NET_FILE allows you to control how big a file you will ever accept.
     If the size of the file being sent to you exceeds the value you specify
     here, then your system will not accept the file being sent.
 
        Both of these values are in terms of K.  So, for instance, if you only
     wanted to allow files of up 24K into your system, and only wished to
     devote up to 44K to NET_RECEPT_AREA, you'd have:
 
     #NET_AREA_SIZE 24
     #MAX_NET_FILE  44

     ------
     #callOutPrefix
     #callOutSuffix
        These two parameters control modem dialing during networking.  These
     are both string value parameters obeying formatting directives, and
     should be used to convey commands to the modem.  When dialing, Citadel-86
     constructs a phone number to send to the phone company, and sends the
     following to your modem:
 
      <callOutPrefix><phone#><callOutSuffix>
 
     callOutPrefix should alert the modem to dial, while callOutSuffix should
     do anything necessary to finish the dialing sequence (usually, just send
     a C/R to the modem).

        If you have a Hayes modem, we recommend you use the following values
     for these two parameters.
 
     #callOutPrefix "ATDT"            -- Tells a Hayes modem to dial out using
                                      -- touch tones
     #callOutSuffix "\r"              -- puts a carriage return at the end

        If you have a high speed modem, such as an USR HST, please see the
     next section for special variants of #callOutPrefix when you network
     with systems capable of the same high speeds.

     ------
     #DialOut300
     #DialOut1200
     #DialOut2400
     #DialOut4800
     #DialOut9600
     #DialOut14400
     #DialOut19200
        The new modems coming out today sometimes require different prefixes
     to dial and connect at different speeds.  For instance, the USR HST
     requires "AT&M0D..." for most dialing, but "AT&M4D..." to call USR HST
     modems at high speeds.  Therefore, Citadel-86 contains a flexible dialout



                                    -35-





     prefix scheme.  The above CtdlCnfg.Sys parameters are now available.
     They allow you to customize your dialing by letting you define special
     dial out prefixes for certain baud rates.  Those you don't define will be
     replaced by #callOutPrefix.  If you don't have a high speed modem requiring
     different dial out strings for different modem speeds, then you needn't
     worry about this section.

     ------
     #SCAN-NET-MESSAGES
        This CtdlCnfg.Sys parameter, if it's present, causes all incoming net
     messages to be scanned against BADWORDS.SYS.  Those which fail to meet your
     standard of decency are placed in the file DISCARD and a message will be
     left in your Aide> room.

     ------
     II.7 The Big Step -- Your first experience with CONFG
        You should have a complete, if only minimally, CtdlCnfg.Sys on your
     disk now (you DID save that file to disk when you were finished, didn't
     you?), so now it's time to process it into something CTDL.EXE finds
     palatable.

        You do this with CONFG.EXE.  First, make sure CtdlCnfg.Sys is
     located on your default disk; if you are running on a floppy-only system
     make sure you have the correct floppies in the drives.

        Run CONFG.  It will come up with some sort of identification banner,
     and then begin processing your CtdlCnfg.Sys.  Normally, it will echo each
     parameter as it processes it.  If it runs into a parameter it doesn't
     recognize, or a parameter value out of range, it will come to
     a stop and tell you about it (or at least it should).  Make note of the 
     problem and edit your CtdlCnfg.Sys accordingly.  If it seems critical, or
     you don't understand what's wrong, review this manual, and if that
     doesn't help, some active research (local Citadel-86 sysops, etc.) may
     be called for.  (Good luck.)

        Once you get past this step, CONFG will grumble with the disk for a
     moment (or two on a floppy system), and then ask you some questions.
     This first set of questions depends on whether you created the system
     directories (assuming you specified some of the system files belong in
     their own directories) or not.  If you didn't, CONFG will ask you if it
     may create the directories needed for the system files; this gives you a
     chance to make sure you didn't screw something up.  If you didn't, then
     answer 'Y' (or 'y') for each question regarding directories.

        Once CONFG has decided the directories are setup correctly, it
     will try to open your system files (i.e., the message file, the log file,
     etc.), and since this is the first time you've run CONFG, it won't find
     them, and therefore it will complain about this, and tell you it is
     creating each of them.

        This is the first and last time you should ever have to see the
     questions about the directories, or the messages about missing system
     files.  If you do ever see them again, and don't know why, you may have
     problems.






                                    -36-





        Next, CONFG will ask if you wish to initialize your system files.
     Since this is the first time, answer 'Y'.  NEVER answer 'Y' again unless
     you know what you're doing, because answering 'Y' tells CONFG to ERASE all
     the data in your data files.

        Since you answered 'Y' (this doesn't happen when you answer 'N'),
     CONFG will ask if you wish to erase and initialize your message file
     (in case you didn't mean to say yes before).  Type 'Y', and then sit back
     and watch as CONFG creates the message base.  CONFG displays the number of
     'sectors' (128 byte chunks) to clear, and then counts them off as they are
     cleared.  If you are going to have a large (300K or more) message base 
     and have fairly slow disk drive(s), this is probably the time to get that
     cup of coffee.

        Once it is finished with the message base, it'll ask if you wish to
     erase and initialize the room file, and then the log file.  Since you are
     still creating your system, answer 'Y' to them and watch as CONFG clears
     each file.

        If CONFG encounters any problems during this process, it will tell you
     about it and exit without finishing.  It's up to you to figure out what's
     wrong at this juncture.

        Once it finishes with these files, it tells you it is creating
     CTDLTABL.SYS (remember that file?), and exits after a few more seconds.

        You should now have a CTDLTABL.SYS on your current default disk, which
     also happens to be the disk your Helps reside on.


     II.8 CTDL -- That Childhood Experience
        And now we get to that long awaited moment.  DO IT.  Run CTDL, however
     you have to do it.  (Is your modem on?)

        If everything is put together right, you have enough memory, and
     everything is configured right, CTDL will be read in, grumble at your disk
     or disks for a moment, initialize your modem, rumble a little more,
     and then come up with YOUR welcome banner.

        If that's what happened, sit back!  Didn't it feel good?  Feel the
     warm, golden glow?  (Quick, knock on some wood.)  And now you should
     probably turn to OPER3.MAN, the everyday care and feeding of Citadel-86.
     The remainder of Section II covers advanced installation topics which you
     shouldn't concern yourself with right now, with the exception of Section
     II.8 which covers what to do in case of unexpected power losses and
     crashes. You should certainly read the advanced topics of Section II at
     some time in the future, because we talk about automating your
     installation with batch files, command line arguments, and other beasties;
     however, right now you're just getting used to being a Citadel-86 sysop.

        Delving into other topics when you're not familiar with the basic
     features of the sysop side of Citadel-86 could turn into a messy disaster
     neither you, nor we, would wish to deal with.  So turn to OPER3.MAN.







                                    -37-





        If CTDL DIDN'T come up, there are a large variety of reasons for the
     failure.  If your system seemed to make it up but came down relatively
     gracefully (i.e., left you at the system prompt), check your disks for a
     file named CRASH. It may give you (or the person you turn to for help!)
     a hint on what might be wrong. If it seems to think there's an error with
     a file, perhaps you forgot to configure MS-DOS correctly.  If CTDL itself
     complains about "no ctdltabl.sys!", then either the file isn't on your
     default disk when you called CTDL, or CONFG didn't successfully finish.

     II.9 When the inevitable happens
        Citadel-86, just like any other software, is not immune to such things
     as crashes, power failures, hardware failures, and the like.  When this
     happens, you must take corrective actions, because normally such
     occurrences will leave your system missing (or with a mangled version
     of) the valid version of CTDLTABL.SYS.

        In order to rebuild this vital file, you must run CONFG again.  CONFG
     will digest your CtdlCnfg.Sys, and then survey and summarize for CTDL the
     current contents of your data files.  Once it is finished, you may
     (usually) run CDTL.

        Let's go over exactly what will happen.  When you run CONFG, it should
     go through CtdlCnfg.Sys, just as it did in Section II.7, echoing each
     parameter as it encounters it.  Once finished, however, it's behavior will
     differ. It should not ask you if it may create the appropriate directories
     (since they should already exist), and it should not complain about not
     being able to find any of your system files (these should still exist,
     too!).  However, it WILL ask you if you wish to erase and initialize your
     system files.  This time reply N (with vigor!).  CONFG will immediately
     begin analyzing your data files, and after several minutes, depending on
     the size of your system, it will produce a CTDLTABL.SYS; your system will
     be fit to run again.

        Obviously, there are benefits to automating this process, particularly
     for handling power outages.  Consult the section on batch files and the
     section on command line options for details on effectively automating your
     system in such cases.


     II.10 Installation -- Advanced Topics
        By now you should have a pretty good feel for Citadel-86 procedures,
     but may wish to look into automating Citadel-86.  The first two
     subsections discuss subjects pertaining to that minor miracle; the third
     section will try to bring the first two together, with some representative
     examples of DOS BAT files.

     II.10.a Command Line options
        A 'command line option' is a string of letters you type directly
     following the program name.  Each command line option should be separated
     from the program name and any other command line option by at least one
     space.  Command line options are used to tell a program to do something it
     might not do if the option wasn't there.  In abstract, from drive C: of
     MS-DOS:







                                    -38-





     C><program name> <command line option 1> <c.l.o. 2> ...

        Both CONFG and CTDL have a set of command line options which you can
     use to make them do special things.  We'll treat each program separately.

     CONFG
        The CONFG program will respond to two options, which may appear
     together or individually on the command line.

        The first parameter is called ONLYPARAMS.  When CONFG finds this
     parameter on the command line, CONFG will NOT try to process your data
     files.  Instead, it will limit itself to reading and processing your
     CtdlCnfg.Sys file.  This ability is useful when you wish to change one of 
     the CtdlCnfg.Sys parameter values without going through the entire
     process of reading your data files. You MUST have a completely valid
     CTDLTABL.SYS available for CONFG to read; otherwise, this option will be
     ignored and your data files will be processed.

        The second parameter is any string of letters not matching any
     other command line option for CONFG.  If this 'option' (you can just use
     some random string of characters) is on the command line, then CONFG will
     not ask whether or not you wish to erase and initialize your data files.
     Instead, CONFG will assume your answer was 'N' (i.e., you simply wish
     to perform a reconstruction).  Thus, CONFG will never query the keyboard 
     for attention, and can run unattended, so long as all the data files are
     in their places.

     CTDL
        The CTDL program officially supports several options, and unofficially
     several more which may or may not be detailed here.  An 'official' option
     is an option we anticipate supporting for a while; an 'unofficial'
     option is an option used for experimentation, and will someday be moved
     into the CtdlCnfg.Sys parameter file (or just thrown away).

        The first command line option is called +netlog.  This option applies
     only to networking systems.  When employed, it will cause a log of all
     network sessions to be written to the file NETLOG.SYS in your NETAREA
     directory.

        +nochat completely shuts the Chat option off.  Normally, an aide can
     force a chat when Chat is turned off.  This command line option prohibits
     aides from forcing Chat when Chat is turned off.  This option does nothing
     when Chat mode is on.

        +vortex activates the Vortex Detection and Management feature.  For
     more information on this feature, see NETWORK3.MAN Section III.3.j.

        bps= is of use to those sysops using the #ISDOOR parameter.  See the 
     Operations Manual Section XII for full details on the use of Citadel-86 as
     a door.

        +anon causes sessions in which remote callers fail to login to be
     recorded in CALLLOG.SYS (if auditing is enabled -- see #AUDITAREA).
     Normally, user sessions in which the caller never successfully logs in
     are not recorded.  This option lets you override this behavior.  This
     override does NOT apply to anonymous uses of the sysConsole.




                                    -39-




        +vandaloff disables the vandalism checking which occurs when an
     unlogged user sends Mail to sysop.  This checking consists of seeing if
     the message contains the same character occuring in a row more than
     8 times (e.g., "iiiiiiiii").  When this option is present, the checking
     is disabled.

	+nomeet disables the <M>eet User and .Enter Configuration Biography
     commands.  See OPER3.MAN for more information on these commands and why
     you might wish to disable them.

        +wx instructs Citadel-86 to attempt to use Wxmodem rather than
     Ymodem (or Xmodem) during its network transfers.  This option is not
     recommended.

        +noecho disables the screen echo (also accessible as the 'E' option on
     the Sysop Menu) when Citadel-86 comes up.  This is useful for systems
     with extremely slow video displays or systems operating in public.

        lddelay= lets the sysop decide how long Citadel-86 will wait for
     a connection on a long distance network call.  This defaults to 60
     seconds, and the value you place after the '=' should be specified in
     seconds.  For instance, "lddelay=120" would request a 2 minute delay.
     This is useful for calls to other continents.

        lowfree= allows the sysop to define a minimum free space left on
     disk.  If a user attempts to upload a file to a disk that doesn't
     have at least as much free space as specified in this parameter (units
     are K) then the upload is not allowed.

        paranoia= specifies the number of messages a user may leave in a
     room.  If the limit is exceeded then the user loses carrier.

	+conpwd indicates that the sysop password should be applied at the
     system console as well as to aides calling in from remote (although no
     one need be logged in at the system console).  This, in effect, makes the
     system console almost as secure as the remote side of Citadel-86 (keeping
     in mind the mentioned caveat).  This option is inoperative if you are not
     using the remote sysop password parameter (#sysPassword).

        A command line option not matching any of those listed so far
     is known as the 'crash' option.  It will cause CTDL to leave a message in
     your Aide> room informing you Citadel-86 apparently came up from a
     crash at the time of the message.  This is useful for batch files.

     II.10.b BAT files and program termination ERRORLEVELS
        MS-DOS BAT files depend heavily on the concept of ERRORLEVELs, and we
     encourage you to read the MS-DOS manuals for a full explanation of BAT
     files. The CTDL program, on termination, will set the MS-DOS ERRORLEVEL
     level to a value you can use to write useful BAT files; you may also
     cause other ERRORLEVELS to be set, as explained earlier in this manual.  
     The values indicate the reason Citadel-86 terminated, and the ones
     reserved by Citadel-86 are discussed here.  Feel free to use other
     ERRORLEVELS at your discretion.

     0 -- A normal exit.  This indicates the sysop took the system down
          via e<X>it on the Sysop's menu (see OPER3.MAN for an explanation
          of the sysop menu).
     1 -- Exit due to detecting the existence of CTDLLOCK.SYS, which indicates
          this installation is already "up."  Normally, this means
          you used the <O>utside commands (see the Sysop's Manual) to go to
          the MSDOS shell, leaving Citadel-86 up but inactive, and attempted to
          bring your system back up, rather than typing 'exit'.  This is a
          failsafe so you do not accidentally bring Citadel-86 up within





                                    -40-




          itself.  Occasionally, you may be using <O>utside commands to do
          something when you are forced to reboot (power outage, program
          crash, etc.), in which case the CTDLLOCK.SYS file is no longer
          accurate.  In cases like these, the correct procedure is to delete
          CTDLLOCK.SYS and then attempt to bring Citadel-86 up again.

     2 -- This was a crash exit.  Citadel-86 is capable of recognizing a number
          of fatal internal errors; when any of them are encountered,
          Citadel-86 will hangup the current caller and immediately terminate
          with this value.  If a crash of this sort occurs, CONFG should be
          run before attempting to run CTDL again.  Some (not all) of these
          fatal errors include non-existence of CTDLTABL.SYS (very, very
          common, due to power failures), missing system files (such as the
          message file, etc.), and corrupted internal data, which indicates 
          the possibility of a bug in CTDL.  Some of these crashes will leave
          the files CRASH and AUDIT behind, which can give hints on what's
          wrong (particularly CRASH).

     3 -- A remote sysop exit.  Since an Aide can be given access to the sysop
          menu from remote (see Section II.6.c on the parameter #sysPassword), 
          s/he is capable of taking your system down from remote.  A number of
          sysops indicated it might be useful to distinguish between a
          sysop exit and a remote sysop exit, so this ERRORLEVEL is supported.

     4 -- This is a Door exit, indicating the current user has requested
          access to a Door (program) which you have provided via the #door
          parameter.  When your BAT file receives this Errorlevel, it need only
          do two things (essentially): run the program C86DOOR, and then loop
          back around to bring Citadel-86 up.

        One more note.  When you write a BAT file, make sure you handle
     the ERRORLEVELS in a "top to bottom" manner.  DOS will not process the
     ERRORLEVELS correctly otherwise.

     II.10.c Making BAT files and command line options work for you.
        No program is ever bug-free.  However, it is nice to pretend one
     is, and an effective way to pretend a particular program has achieved
     such a goal is by never having it require your attention when you are
     attending to other things.

        Citadel-86 tries to emulate this sort of utopian software by returning
     a value to MS-DOS when it terminates gracefully, as we described above,
     which allows you to construct BAT files handling most contingencies.

        Basically, we have to handle 'emergency' situations, which consist of
     coming up from a reboot and handling a graceful crash, and handling
     non-emergencies, which are coming out of C-86 in response to timeouts,
     sysop exits, remote sysop exits, and Door exits.

        First, let's look at the emergencies.  Typically, an emergency never
     happens at a convenient time; instead, you're off on vacation, at work,
     or feeding the cat.  Therefore, the software has to handle the emergencies
     on its own, within limits.

       In both of our emergency situations, the system must go through a CONFG
     call. When we looked at the command line options of CONFG, we saw a
     nonsensical argument on CONFG's command line tells it not to ask for




                                    -41-




     operator input regarding whether the system should be erased, but rather
     to simply re-analyze the data in preparation for a CTDL call.  Therefore,
     part of our BAT file strategy will contain the line

     CONFG gleeeeepy

     which we may end up placing in its own BAT file.

        Looking into the section on ERRORLEVELs, we should have also noticed 
     one of the events causing a graceful crash is the absence of
     a CTDLTABL.SYS file.  Thus, we can classify a power down as simply another
     graceful crash -- after we make some modifications to your boot disks
     AUTOEXEC.BAT.  But first let's look at just how we should handle these
     'graceful crashes'.

        We said a graceful crash produces an ERRORLEVEL of 2.  With this
     in mind, we can put in one of our BAT files some lines looking roughly
     like this:

     CTDL
     ...
     if ERRORLEVEL 2 Fixit

     Fixit, in this case, is another BAT file which will fix the system for us.
     I.e., it runs CONFG and gets the system back up on its feet.  What should
     it look like?  Well, first we want to start the file as mentioned above:

     CONFG Gleeepy

     Once CONFG finishes, we need to restart CTDL.  As it happens, MSDOS BAT
     files do not 'stack' up; if A.BAT calls B.BAT, when B finishes it does
     NOT return to A, but instead falls out to MS-DOS.  This makes it easy to
     write BAT files to accomplish our purposes.  Suppose we call our main BAT
     file RUNIT.BAT (the file containing the 'if ERRRORLEVEL 2 Fixit' line
     in it).  Then we can simply finish the FIXIT.BAT file with

     RUNIT CRASH

     We'll explain the CRASH command line option later.

        What about the rest of those ERRORLEVELs?  Well, let's solidify your
     RUNIT.BAT a little more.

     CTDL
     if ERRORLEVEL 5 goto timeout
     if ERRORLEVEL 4 goto door
     if ERRORLEVEL 3 goto remote
     if ERRORLEVEL 2 Fixit
     if ERRORLEVEL 1 goto lockfile
     if ERRORLEVEL 0 goto alldone

        (Note the descending order we use here.  This is necessary due to the
     method MS-DOS uses to handle 'if' statements.)  This was simple -- we just
     put off all the work.  However, most of the work is yours, because it is
     really up to you to figure out what you wish to do when your system
     times out (CtdlCnfg.Sys's #event parameter -- we simply assumed you
     used a 5 in the <depends> field of an external #event parameter) and when
     your remote sysops bring your system down.



                                    -42-




        So let's flesh out the rest of this sample RUNIT.BAT.

     :loop
     CTDL %1 ...
     shift
     if ERRORLEVEL 5 goto door
     if ERRORLEVEL 4 goto timeout
     if ERRORLEVEL 3 goto remote
     if ERRORLEVEL 2 Fixit
     if ERRORLEVEL 1 goto lockfile
     if ERRORLEVEL 0 goto alldone
     :door
     C86door
     goto loop
     :remote
     REM put here what you want remote terminations to cause to happen.  If you
     REM want to rerun CTDL, you'd have 'goto loop'.

     :timeout
     REM put here what you want timeouts to do (backups or whatever)

     ...
     REM we assume you'd want to restart Citadel-86 afterwards.
     goto loop
     :lockfile
     REM here you tried to bring Citadel-86 when it already seems to be up.
     goto unknown
     :alldone
     REM And now the sysop at the console took us down, so we'll die.

        Most of this should be pretty easy to understand.  The '...' on the
     CTDL command line simply means whatever options you choose to put on the
     line. However, the '%1' may be puzzling.  As the MS-DOS manual indicates,
     %1 is the first argument on the command line of this BAT file.  Now,
     let's look back at the FIXIT batch file, where we put RUNIT CRASH.  This
     will force the parameter CRASH to appear on your CTDL command line, which 
     CTDL will interpret as a 'nonsense' argument, therefore causing a 'crash'
     message to appear in your Aide> room.  Since it was the FIXIT batch file
     ultimately causing this message to appear, this is good behavior.

        But what of the SHIFT following the CTDL command line?  This causes
     the RUNIT command line arguments to shift 1 to the left.  Since there were
     no more arguments to RUNIT, any executions of CTDL subsequent to the SHIFT
     call, while within this BAT file, will not result in messages in the Aide>
     room.  And why might there be any more calls to CTDL after the first one?
     Look at the commands following the timeout label.

        This is just an example.  Have fun.

     II.10.d Result Code and Call Progress Detection
        One of the problems with the external serial interface of the IBM PC
     and its clones is its inability to directly detect the speed a modem
     has made connection with a caller via the RS232 interface.  Therefore,
     Citadel-86 can detect baud rates by reading the result codes most Hayes
     modems spit out.  This section details what you must do to use this
     capability.





                                    -43-




        There are two things you must do to attempt to use your modem's
     result codes for autobaud detection (please note some modems are so
     awful you can't use their result codes to accomplish autobaud detect).
     First, your modem must be configured to return result codes.  Typically,
     you do this using the #modemSetup parameter of CtdlCnfg.Sys, and the Hayes
     command is usually "ATQ0".  However, you should consult your modem's
     manual during these machinations and incantations.

        Further, you may need to decide if you want the result codes to be
     returned in Verbose mode or Non-Verbose mode (ATV1 and ATV0).  While
     Citadel-86 can use either mode if correctly configured (to be explained),
     you may have some preference.

        The second task is to inform Citadel what the result codes will be.
     Not all "Hayes compatible" modems return the same result codes for the
     same results.  Therefore you must provide them.  How?

        By constructing a simple text file named RESULTS.SYS.  It must reside
     in your #ROOMAREA (CtdlCnfg.Sys) directory, and it must be a normal MS-DOS
     text file.  Within it you place lines of the following format:

     #<result code identifier> <result code value>

     A "result code identifier" is one of a list of Citadel-86 supported
     identifiers for result codes, while "result code value" is the string
     your modem will return for that identifier.  The identifier is contained
     from the "#" sign to the first space (and there should only be one space,
     no more), while the result code value is contained from the character
     following the space to the end of line (thus allowing spaces in the result
     code value).

        For example, one of the identifiers is RESULT-300, which Citadel-86
     uses to identify a 300 baud caller, and most Hayes compatible modems
     we are aware of return CONNECT when a caller connects at 300 baud.  In
     order for the autobaud to use that value to identify a 300 baud caller,
     you would place the following line in your RESULTS.SYS file:

     #RESULT-300 CONNECT

     We, of course, assume you have your modem configured for Verbose
     mode.  If you are using Non-Verbose mode, and your modem returns 1 for a
     300 baud connect (a typical string for Hayes compatible modems, again),
     then you would place

     #RESULT-300 1

     in the RESULTS.SYS file.  But what if you weren't sure if your modem is
     going to be in Verbose or Non-Verbose mode during operation, for some odd
     reason?  Well, it is perfectly valid to have BOTH of those strings in
     RESULTS.SYS, and each will be used as needed!

     #RESULT-300 1
     #RESULT-300 CONNECT








                                    -44-




     Now that may sound somewhat trivial, but it is only an example.  A valid
     real-world example involves MNP capable modems.  Some of these modems
     return differing result codes, dependent on whether the caller is using
     an MNP modem or not.  For instance, a normal caller at 2400 baud will
     cause the modem to return CONNECT 2400, but a MNP caller at 2400 baud will
     cause the modem to return CONNECT 2400 RELIABLE.  Here is where the 
     ability to place both of those results in RESULTS.SYS (or even all 4 if
     you want to cover both Verbose and Non-Verbose modes) can come in real
     handy.

     #RESULT-2400 CONNECT 2400
     #RESULT-2400 CONNECT 2400 RELIABLE

     AUTOBAUD IDENTIFIERS
        The following are valid autobaud identifiers, and any of them may
     appear more than once with different values as desired.

     #RESULT-300
     #RESULT-1200
     #RESULT-2400
     #RESULT-4800
     #RESULT-9600
     #RESULT-14400
     #RESULT-19200
     #RING

        #RING is used to identify rings, which can be useful.  The autobaud
     identifiers are used when a caller has been detected.  Other results, such
     as the Call Progress results which are about to be discussed, are
     discarded during autobaud detection in favor of searching for Autobaud
     strings.

     CALL PROGRESS IDENTIFIERS
        Some modems can support call progress detection when configured
     correctly.  (Call progress detection is the ability to recognize no
     dialtone, busy signals and other such minutae.)  Citadel-86 can use those
     result codes if available to speed dialing during both networking and
     during use of the <D>ialout option of the Network menu.  The format of
     these identifiers are the same as the Autobaud identifiers.  The list of
     valid identifiers:

     #DIALTONE
     #NO-DIALTONE
     #OK
     #NO-CARRIER
     #BUSY

        The values you specify for #NO-DIALTONE, #NO-CARRIER, and #BUSY,
     when detected during callout, will cause Citadel-86 to conclude the
     call was unsuccessful and therefore abort it.  As with the Autobaud
     identifiers, you may specify any of these parameters multiple times to
     cover multiple situations.  For example, if your modem returns BUSY when
     a busy signal is detected, you would place

     #BUSY BUSY

     in your RESULTS.SYS.




                                    -45-





     II.10.d.1 Restrictions on Result Codes
        Unmodified Zenith Z-100s are incapable of reading and using Hayes 
     result codes due to the hardware implementation of the serial port.  
     Modifications can be made to the cable connecting the Z-100 to the modem
     and to your CtdlCnfg.Sys allowing the use of Hayes Result codes.
     Please see the special section in this manual regarding Z-100
     peculiarities.

     II.10.e Extreme options in CtdlCnfg.Sys
        Some of the modem I/O routines in Citadel-86 can be changed by the
     adventurous sysop via the CtdlCnfg.Sys file.  Normally, Citadel-86 uses
     built-in modem routines designed to handle the normal situations of Z-100s
     and the two COM ports of PClones.  However, they can be replaced through
     manipulation of CtdlCnfg.Sys.

        When do you want to use these options?  NEVER, really.  But you
     probably do when you have an unusual, but not unique, modem setup.  If you
     feel your modem connection is really, really odd, you may wish to acquire
     the source code for Citadel-86 and perform some hideous hacks of your own.
     These options are useful when you wish to do something unusual with your
     installation.

        All right, what ARE these 'routines,' anyways?  They came from the CP/M
     version of Citadel, where they were the entirety of Citadel's modem I/O.
     To quote the old documentation that accompanied them, they "...implemented
     a virtual machine with a single accumulator", which is another way of
     saying a primitive psuedo-assembly language was made available to
     the sysop for designing their own modem I/O.  The reason they
     exist in Citadel-86 is partly inertia and partly their flexibility: the 
     two types of machines Citadel-86 supports, Zenith Z-100s and most
     PClones, have radically different serial interfaces.  Using the
     appropriate routines saves some (probably only a trivial amount of) code
     room.

        OK, let's get concrete.  Each routine available to you is composed
     of two parts, the name of the routine and the code which implements it.
     Abstractly, it looks like this:

     #start <routine name>
     #code <instruction> <optional instruction data>
     #code <instruction> <optional instruction data>
     ...

        Usually, the last #code instruction will specify a RET.

        Here is the list of routines currently supported:

     HANGUP     -- This routine MUST force your modem to hangup.
     INITPORT   -- This routine should initialize your port AND your modem.
                   (NOTE: If INITPORT exists, #modemSetup should NOT exist.)
     CARRDETECT -- This routine MUST return (see the RET instruction) a 0 when
                   there is no carrier, and a non-0 value when there is
                   carrier.
     SET300     -- This routine should set your modem's port to 300 baud.
     SET1200    -- This routine should set your modem's port to 1200 baud.





                                    -46-




     SET2400    -- This routine should set your modem's port to 2400 baud.
     SET4800    -- This routine should set your modem's port to 4800 baud.
     SET9600    -- This routine should set your modem's port to 9600 baud.
     SET_HIGHER -- This routine should set your modem's port to your choosing
                   (this option may not be supported in the future).
     ENABLE     -- This routine must ENABLE your modem for answering the phone.
     DISABLE    -- This routine must DISABLE your modem from answering the
                   phone.

        The instructions available to you simulate a very simple machine with
     one accumulator and a scratch array.  You'll find the instructions crude,
     primitive, and limiting.  The scratch array is addressed from 0, and has
     40 elements.  Here they are:

     LOAD x   -- This instruction loads the accumulator with the value in
                 location x of memory (!).
     ANDI x   -- This instruction performs a logical AND of the accumulator
                 with x and places the result in the accumulator.
     ORI x    -- This instruction performs a logical OR of the accumulator with
                 x and places the result in the accumulator.
     XORI x   -- This instruction performs a logical XOR of the accumulator
                 with x and places the result in the accumulator.
     STORE x  -- This instruction stores the accumulator in the specified 
                 address of memory(!).
     LOADI x  -- This instruction loads the accumulator with the value of x.
     RET   x  -- This instruction forces the routine to return to the caller
                 with the value of the accumulator (in this case, 'x' is just
                 a dummy value).
     INP x    -- This instruction causes the accumulator to be loaded with the
                 value currently present at port x.
     OUTP x   -- This instruction causes the accumulator to be sent to port x.
     PAUSEI x -- This instruction causes the Citadel-86 installation to pause
                 for x/10s of a second.
     ARRAY[]= x -- This instruction stores the accumulators value in the
                   specified location of the scratch array.
     ARRAY[] x  -- This instruction loads the accumulator with the value in the
                   specified location of the scratch array.
     OUTSTRING "x" -- This instruction causes the string "x" to be sent to the
                      modem.

     OPR# "x" low high -- This instruction causes the string "x" to be
                          displayed, followed by a request for a number.  Low
                          and high specify the lowest and highest acceptable
                          values.  The accumulator receives the value specified
                          by the user.

        In SUPPORT.LZH there should be a file named PSUEDO.DOC.  It contains a
     listing of all the default routines used by Citadel-86.  If you have ANY
     plans at all for using your own routines, first examine those in
     PSUEDO.DOC, both to understand what is used for a default, and for working
     examples of how to write valid routines.

        And, lastly, REALLY WE HOPE YOU DON'T HAVE TO ENGAGE IN THIS SILLINESS.








                                    -47-




     III. ZENITH Z-100 NOTES

     III.1 Introduction
        This section contains notes concerning the hardware configuration
     of Zenith Z-100s as it applies to Citadel-86.  Most, perhaps all, of
     these contributions were contributed by Sysops using the Zenith Z-100
     as their hardware, and the authors of this manual would also like to
     take this opportunity to thank Eric Brown, System Operator of Primordial
     Ooze, for providing the serial interface code for Borland's Turbo C
     (the current C dialect in use today for Citadel-86) for Z-100 hardware.

     III.2 Scary but Innocuous Behaviors
        First off, whenever Citadel-86 is brought up on a Zenith Z-100, the
     System Operator will note his or her screen is decorated with a
     series of four "WILD INTERRUPT" messages.  The experienced Z-100 owner
     will recognize these as the normal prelude to a full system crash.
     However, in the case of Citadel-86, this is not true.  It would appear
     Borland's Turbo C, when compiled and linked for Large model (which
     is what we use for Citadel-86), causes the Z-100 to generate these
     messages but does no actual harm to the system.  Several Z-100 BBSs have
     been running for months now, and have suffered no problems, so, when you
     see these messages, ignore them.

     III.3 Result Codes
        The following was contributed by K-9, System Operator of the Dog House
     BBS, for which we thank him.
 
     Written by K-9,
     The Dog House BBS
     612/460/6056
 
     11/28/87
 
      When you are using a communications program written for the PC on a Z-100
     certain RS-232 characteristics that are different will prevent their use.
     To overcome the difficulties the communications routine used with the
     Z-100 had to be different than with a PC.  As a result when the AUTO-BAUD
     DETECT feature was released the Z-100s weren't supported.  Thanks to 
     information I had on the differences in the port and Hue, Jr.s prowess
     with the coding the feature is now supported on Z-100s.

      To connect an autodial modem to jack J2 and support AUTO-BAUD DETECT you
     need to know how the Z-100 RS-232 port functions.
 
      To make any autodial modem dial, you type commands which are sent out
     your port to the modem; ideally, both what you type and the verbal
     responses which come back from your modem should appear on your screen.
     While a Z-100 won't prevent commands you type from getting to your modem,
     it won't display anything from the modem until the modem indicates it has
     linked up with a remote system, ie. has Carrier Detect high.
 
      Actually, what causes a Z-100 to act this way is that a Z-100 won't let
     anyting come into it's J2 port while your modem is applying a negative
     signal to pin 8 on the port.  Data is allowed to enter only when no signal
     or a positive signal is applied to pin 8.






                                    -48-




      What is normaly attached to pin 8 is an output from the modem called
     Carrier Detect (CD or DCD, for short); carrier detect is negative when
     the modem isn't linked with a remote system, and positive when it is.
     While Citadel needs these outputs for AUTO-BAUD DETECT, the unpleasant 
     side-effects are untolerable.
 
      The solution is to modify your cable so that the modem's DCD output is no
     longer attached to pin 8 on your J2 connector, but is available to Citadel
     on pin 6, instead.  This modification won't damage anything, and won't
     have any adverse effect on performance of the computer.

      The procedure is different depending on whether or not the modem is a 
     Hayes Smartmodem compatible.  The exact mechanics of making this modi-
     fication depends on your cable and modem.
 
      1.  Begin with by attaching the cable between the modem and the J2 port
     at the modem end.  Open up the connector.  Find the wire that goes to 
     pin 8 (there are tiny numbers on the face of the plug).  Cut that wire
     close to the back side of the plug.  If you are using a Hayes Smartmodem
     or US Robotics Password you can skip the next two steps.
 
      2.  Find the wire that goes to pin 6.  Cut it, leaving a length of about
     1 inch still attached to the pin.
 
      3.  Strip the insulation from the end of the wire that did go to pin 8.
     Also, strip the wire still attached to pin 6.  Twist the two wires
     together and then solder (preferably) or tape them together.  Make sure no
     bare wires are exposed.
 
      4.  Re-attach the cable to the modem.  You are finished with the hardware
     modification if you have the modem switch settings set proper.  Normal
     switch setting recommendations for the modem still apply.  Only change you
     will need to make with the modem is to enable result codes which are
     normally disabled and have digits vs. verbose (word) responses enabled.
     The CtdlCnfg.Sys file as distributed with V3 supports the digit codes.

      You can also change the result codes via your modem initialization string
     by setting the following values:
 
      The Q value should be changed to 0 (Q0) to mean result codes will be sent
 
      The V value should be changed to 0 (V0) to send result codes as digits
 
      There are some additional changes which need to be made to the
     CtdlCnfg.Sys file to use AUTO-BAUD DETECT.
 
      Good luck!
 
      K-9












                                    -49-





                                ctdlCnfg.sys


        This is the configuration file for the Citadel-86 bulletin board
     system. It is read in by confg.exe which sets up a "ctdlTabl.sys" file
     recording the configuration parameters.  (CtdlTabl.sys is read by the
     other Citadel programs.) This file must be edited to be appropriate to
     the local environment. Lines not beginning with "#" are ignored by CONFG
     and may be deleted once the file is successfully configured -- they are
     purely documentary.  For more detail, consult the CITADEL-86 SYSOP MANUAL.
 
     GENERAL STRING FORMATTING CONTROLS:
     The following are supported:
             "\n": CR-LF
             "\t": Tab character
             "\b": Non-destructive Backspace
             "\r": CR
             "\f": Formfeed
             "\"": '"'
             "\\": Backslash
             "\<xxx>": The octal* ASCII value is output

        SECTION 1: NECESSITIES AND MISCELLANEA
 
     SYSTEM TITLE
        nodeTitle is printed after the "Welcome to" and before the "Running..."
     lines of the banner that pops up on carrier detect, UNLESS BANNER.BLB
     exists, in which case the entire "Welcome to <nodeTitle>" line is
     replaced with the contents of BANNER.BLB.  nodeTitle is a string value
     that accepts formatting directives and goes through the Citadel
     formatter.

#nodeTitle "Our Name"         -- An obvious imposter
 
     SYSTEM NAME
        nodeName is purely for networking purposes.  Messages which
     originated on your system will have headers looking like:

           82Nov23 From Cynbe ru Taren @ODD-DATA

     This should be a short (for the sake of the reader!) mnemonic
     identifying your node for humans.  It does not use formatting directives.
 
#nodeName "ODD-DATA"          -- The original Citadel (kow-tow, everyone)
 
     SYSTEM ID
        nodeId is also purely for networking purposes.  Messages which
     originate on your system will be marked with the nodeId, but it will
     not normally be printed out.  It is primarily for the use of the
     networking support software, and forms a globally unique name and
     address for your system.  It consists of a country abbreviation
     followed by area code and system phone number.  This string value does not
     use formatting directives. Country abbreviation for the US is "US", for
     Canada is "CA".  (For others, see COUNTRY.DOC.)


#nodeId "US 612 470 9635"



                                    -50-




     SYSTEM BASEROOM
        baseRoom is the homeroom of the Citadel in operation, the place you
     go when there are no more rooms with unread messages left.  This is
     usually known as the Lobby> on most systems.  It's simply a nice,
     easy way to customize and give character to your system..
 
#baseRoom "Glops"
 
     SYSTEM BASE FLOOR
        MainFloor is the home floor of the Citadel in operation, the floor
     where baseRoom, Aide, and Mail are located.  It's another nice, easy
     way to customize your system

#MainFloor "Da Basement"

     SYSTEM ENCRYPTION SEED
        CRYPTSEED is a number used in encrypting the data files.  Change
     it once when you install the system, but not thereafter -- or you
     won't be able to read the existing files any more.

#CRYPTSEED 333                --

     UNLOGGED USER'S SCREEN WIDTH
        This parameter is used to specify an unlogged user's screen width 
     (including banner display).  If not present, defaults to 40.

#UNLOGGED-WIDTH 79

     DATA FILES SIZE: MESSAGE BASE
        MESSAGEK sizes "ctdlmsg.sys", the file message text is stored in. The
     size of this parameter together with the rate at which message text is
     entered determines message lifetime.

#MESSAGEK 300                 -- 300Kbyte ctdlmsg.sys

     DATA FILES SIZE: MESSAGES PER ROOM
        MSG-SLOTS defines the maximum number of displayable messages per room
     on your room, except for the Mail> room.

#MSG-SLOTS 58                 -- 58 is kind of traditional

     DATA FILES SIZE: MESSAGES PER MAIL ROOM
        MAIL-SLOTS defines the maximum number of displayable messages for each
     user's Mail> room.

#MAIL-SLOTS 58                -- Yet another tradition...

     DATA FILES SIZE: ROOM FILE
        MAXROOMS defines the maximum number of rooms on your system.

#MAXROOMS 64                  -- This is usually enough










                                    -51-





     DATA FILES SIZE: LOG FILE
        LOGSIZE is the number of entries that you want in your log. Once
     you've selected a log size and have configured, you may NOT shrink
     the log except by destroying the log totally. There is a utility
     available for expanding the log, called DATACHNG.

#LOGSIZE 180                  --
 
     **DATA FILE LOCATIONS**
        The next several parameters allow you to specify where certain system
     files are to appear on your system.  Please note that only subdirectories
     of the disk you specified are legal.  Disk specifications are legal.
 
        This parameter specifies where you want your help files located in your
     system.

#HELPAREA "helps"             -- All help files located in subdir
                              -- "helps"
 
        This applies to the CTDLLOG.SYS file.

#LOGAREA "a:log"              -- in subdir "log" on drive a:
 
        This applies to the CTDLROOM.SYS, CTDLBAD.SYS, and CTDLARCH.SYS files.

#ROOMAREA "system"            -- in subdir "system"
 
        This applies to the CTDLMSG.SYS file.

#MSGAREA ""                   -- current directory of default disk

        This applies to the CTDLFLR.SYS file.

#FLOORAREA "floors"           -- its own subdirectory for no particular reason.

     AIDE SCOPE:
        The AIDESEEALL parameter controls the scope that Aides have on the
     installation.  If this parameter is set to 0, then Aides are only allowed
     to see public rooms and private rooms that they are told about;
     private room creation will leave an entry in the Aide> room indicating
     that a room was created, but not the name.  An Aide at the SysConsole
     will, however, see all rooms.  If this parameter is set to 1, then all
     Aides will see all rooms on the system, public or private.
 
#AIDESEEALL 0                 -- Aides see nothing
 
     NEW USER CONTROL:
        LOGINOK controls whether users without a password can login from
     remote. If LOGINOK is 1, they may; if LOGINOK is 0, then the only place
     that new accounts may be entered is from the system console.
 
#LOGINOK 1                    -- user-established accounts








                                    -52-





     MESSAGE ENTRY CONTROL:
        If ENTEROK is 1, callers that are not logged in may enter messages.  If
     0, then they must login first before they can enter messages (except for
     Mail> to the Sysop.  Note that Anonymous rooms are not an exception.

#ENTEROK 0                    -- login first
 
     READING CONTROL:
        If READOK is 1, then unlogged callers can read messages.  If READOK is
     0, then users must login before reading messages.
 
#READOK 0                     -- login first
 
     ROOM CREATION CONTROL:
        If ROOMOK is 1 then regular folks can create new rooms, else only those
     with aide privilege can do so.
 
#ROOMOK 1                     -- general room-creation privileges
 
     MAIL CONTROL:
        If ALLMAIL is 1, all get privileges; 0 means only aides have the
     privilege.
 
#ALLMAIL 1                    -- Everybody can send mail

     INITIAL DOOR PRIVILEGES
        If DoorPrivs is 0, then users must ask for door privileges; otherwise, 
     they automatically have them on initial login.

#DoorPrivs 0                    -- A prudent policy; also, the default.

     INITIAL FILE PRIVS
        Use this parameter to decide if people have file download privs
     when they first logon or if they have to request them.

#FILE-PRIV-DEFAULT   1		-- yes

     COMPUTER HARDWARE TYPE:
        Setting IBM to 1 implies the system is a PClone, and to use some
     internal routines for accessing modem.  If IBM is 0, then substitute
     other special routines specific to the Z100 for accessing modem.
 
#IBM 1                        -- IBM clone
 
     COM PORT:
        The COM parameter allows the sysop who is using an IBM to select
     either COM1 or COM2 as the communications port. This parameter is
     meaningless for Z-100s.

#COM 1                        -- COM1 is the selection










                                    -53-





     SYSTEM BAUD RATES:
        SYSBAUD defines the baud rates supported by this installation.  Use
     these values to indicate what maximum baud rate your system runs at:

        0 - 300 baud
        1 - 1200
        2 - 2400
        3 - 4800
        4 - 9600
        5 - 14400
        6 - 19200

#SYSBAUD 1                    -- A 3/12 system.
 
     MODEM INITIALIZATION:
        modemSetup specifies what should be sent to the modem after
     initializing the port. While Hayes/compatibles are recommended, other
     types of modes have been successfully used with Citadel-86, such as
     TransModems.

#modemSetup "AT S0=1 M1"
 
     MODEM REINITIALIZATION:
        REINIT lets you reinitialize the modem after each call at the highest
     baud rate the modem will recognize.  If this parameter is not present, 
     then the modem will not be reinitialized.  Formatting directives are 
     recognized.

-#REINIT "AT"

     MODEM MANAGEMENT
        Citadel-86 normally drops DTR (for novices, on most modems this causes
     the modem to drop carrier and disables auto-answer until DTR is brought
     back up) when it doesn't want a caller calling in.  This typically
     happens when the system operator logs in at the console or the system
     is digesting messages from a network session.  You can modify this
     behavior by defining the two strings below, and they come into action
     only when the system operator logs in at the console (i.e., when you
     touch ESCape).  The first string, #DISABLE-MODEM, is sent to the modem
     when you touch the ESC, while the second, #ENABLE-MODEM, is sent when
     you put the system back into MODEM mode.  They let you do such things
     as take the modem off-hook (generate a busy signal) when you are using
     the system.  One note: the system will NOT add carriage returns to these
     strings automatically, so make sure you do!

-#DISABLE-MODEM "ATH1\r"	-- This would take the modem off hook
-#ENABLE-MODEM "ATH0\r"		-- This would put the modem on hook













                                    -54-




     PORT LOCKING
        You can have your installation "lock" the serial port at a given
     speed and let the modem handle details concerning buffering, etc.  On
     some modems such as USR HSTs, etc., this can result in a measurable
     increase in through-put; for some modems, you HAVE to do this in order
     to use the higher speeds.  HOWEVER, you have* to know what you're doing
     or you shouldn't do this.  This parameter has a numeric value which
     specifies the baud rate to lock the port at, just like #SYSBAUD.  You
     should consider using #REINIT to instruct the modem about your port
     locking, so that everytime the modem is told to hung up it is reminded
     about the port locking.

-#LOCK-PORT  4			-- This would lock it at 9600 baud


     OLD VIDEO
        As noted in INSTALL3.MAN, some systems don't like Citadel-86 video 
     support.  If your system doesn't, enable the following parameter.  Note 
     the lack of value after the name -- that's on purpose!

-#OLDVIDEO              -- disabled.


     SYSTEM SCREEN COLORS
     	FOREGROUND
     	BACKGROUND
     	STATUS-FOREGROUND
     	STATUS-BACKGROUND
        These parameters allow control of the foreground and background colors 
     of the screen, including the status bar.  See INSTALL3.MAN for a full 
     list of supported colors.  The generic setup should cause the status bar 
     to have black letters on a gray background, while the rest of the screen 
     is white letters on a black background.  See the Ease utility for an
     easy way to select colors.

#FOREGROUND WHITE
#BACKGROUND BLACK
#STATUS-FOREGROUND BLACK
#STATUS-BACKGROUND LIGHT GRAY

     STATUS BAR CLOCK
        Normally, the status bar has a clock which is updated each minute.  
     You may control its behavior by using one of the values "None", "Inuse",
     or "Always" in the #CLOCK parameter.

-#CLOCK Always                     -- disabled.


        SECTION 2: INTERESTING OPTIONS
 
     TIMED EVENT HANDLER:
        See the manual for this one.  Here is the generic format:

-#event <days> <time> <class> <type> <duration> <warning string> <depends>







                                    -55-





     REMOTE SYSOP FACILITY:
        #sysPassword specifies the file that contains a string that will act
     as the password to the remote sysop abilities.  If this parameter is not
     specified, or if the file is not found, or is unreadable, then remote
     sysop abilities are disabled.  Only Aides can access remote sysop
     abilities, and they must* know the exact password, including the case
     of the individual letters.
 
-#sysPassword "c:\pwd"        -- Inactive (note the leading hyphen)
 

     AUDIT:
        This parameter specifies where the files CALLLOG.SYS, FILELOG.SYS, and 
     DOORUSE.SYS end up on your system.  Note that the directory specified has
     to be a subdirectory of a current directory.

-#AUDITAREA ""                 -- put CALLLOG.SYS in the current directory
                               -- (inactive -- note leading hyphen)

     ANONYMOUS CALLERS
        This parameter, if enabled, logs ANONYMOUS callers from remote in
     your CALLLOG.SYS as "<No Login>".

-#ANONYMOUS-SESSIONS


     RAM DRIVE HANDLING:
        These two parameters control whether or not and where a secondary
     message file will reside.  If you use this parameter, it should
     reference a permanent media file, and the MSGAREA parameter should
     reference a RAM drive.  MSGAREA will always be both read and written to,
     while this one will only be written to; thus, this parameter should
     reference the media more sensitive to wear and tear.  MIRRORMSG should
     be 1 if you wish to use this ability; MSG2AREA then referrnces the
     location of the secondary message base.
 
#MIRRORMSG 0                  -- Turn it off for novices
#MSG2AREA ""                  -- so this is irrelevant while MIRRORMSG
                              -- is 0

     INTERRUPTED MESSAGE AREA:
        This parameter specifies where to save interrupted messages for
     later completion.

-#HOLDAREA "held"             -- inactive

     SYSOP MAIL ROUTING:
        This parameter specifies the account that Mail> to sysop should be
     routed to.

 -#sysopName "Me!"            -- inactive









                                    -56-





     OUTSIDE EDITOR:
        These parameters specify what editor the Sysop may use for System 
     Console message composition, and what area of the disk system to use for 
     temporary files.  If the first is not present, then the <O>utside Editor 
     is not available; if the second is not present, the current drive and 
     directory are used for temporary files.  See OPER3.MAN and INSTALL3.MAN 
     for full details.

-#EDITOR "whatever"             -- disabled!
-#EDIT-AREA ""                  -- ditto!

     Citadel-86 as a Door:
        This parameter lets you tell the installation that Citadel-86 is a 
     door itself.  In this situation, the modem is not initialized, etc...
     See OPER3.MAN Section XII for details.

-#ISDOOR                        -- disabled, no value for this parameter.

     CONSOLE TIMEOUT
       If you are in the habit of forgetting to logoff when you're at the
     console, thus effectively making the system useless until you notice
     your indiscretion, you can use this numeric parameter to decide how
     many SECONDS the system can be inactive while in CONSOLE mode before
     logging the person off at the system console

-#CONSOLE-TIMEOUT  600		-- this would be a 10 minute timeout period

     CONSOLE DELAY
         Having problems keeping up with Citadel-86 at the console when you're
     logged in there because the screen is just so dratted fast?  This
     parameter is just like .ECD: you can have the system pause for xxx
     milliseconds after each character is put out when the user (whoever it
     may be) is at the system console.

-#CONSOLE-DELAY  1		-- This would make for a one second delay

     SYSOP MAIL
        You can archive sysop mail.  This string parameter specifies the file
     Sysop Mail should be archived to.  This includes both Mail> to "sysop"
     and mail to the name specified in #sysopName.

-#SYSOP-ARCHIVE "sysop"	-- mail archive filename

     ANONYMOUS MAIL CONTROLS
        Anonymous mail to sysop is occasionally used to abuse systems.  This
     numeric parameter is used to control the maximum length of anonymous
     mail.  If an anonymous mail leaver exceeds that length, the user loses
     carrier and the mail, instead of being placed in mail, is placed in a
     file named ANONMAIL and a message is left in Aide informing you of this
     fact.

-#ANON-MAIL-LENGTH  300		-- anonymous folk will have to be brief








                                    -57-





     PASSWORD HACKERS
         Village Idiots being a pain?  This numeric parameter lets you tell
     the system to drop carrier on anyone who screws up their password X
     times.

#LOGIN-ATTEMPTS  5


        SECTION 3: NETWORK PARAMETERS

     NETWORK SELECT:
        You use this parameter to decide whether or not you are a networking
     system.  If you set this parameter to 0, then the rest of the parameters
     in this section are meaningless, because you are not a networking
     system.

#NETWORK 0                    -- Disable for novices

     YOUR DOMAIN
        What domain are we located in?  One to a customer, please.  See
     NETWORK3.MAN for more information on domains.

#nodeDomain "xx"

     MAIL ROUTING:
        If #RouteMail is 0 then you categorically refuse to route mail for 
     anyone to anywhere; if 1, then you will route, although you may place
     individual limits on certain systems.

#RouteMail 1                    -- default, too

     MAIL HUB
        A mail hub is a system you send all domain-oriented mail to when
     you don't know how else to get to the given domains.  This string
     parameter is the name of a system on your primary nodelist.

-#MailHub "xxxxx"		-- local backbone?  another backbone?

     NEW USER NET PRIVILEGES:
        #NewNetPrivs specifies whether or not new users automatically have
     net privileges.

#NewNetPrivs 0                -- Nope.

     DOMAIN DISPLAY
        This very optional parameter lets you customize how the domains on
     messages from other systems are displayed.  The default is shown
     in our example.  Note the '%s' MUST be present.

#DomainDisplay " _ %s"

     DOMAIN SERVING
        You want to be a domain server?  This is how you volunteer; set this
     parameter to tell what domain you want to serve, and see NETWORK3.MAN on
     administrative procedures.

-#ServeDomain "xx"		-- make sure you know what you're doing



                                    -58-





     NET FILES LOCATION:
        You use this parameter to specify where the various network-related
     files will be located.  It is a string parameter that you use to specify
     the drive and directory to put these files.

#NETAREA "c:net"              -- an example ONLY

     DOMAIN FILES LOCATION
        This parameter lets you decide where to put domain-related temporary
     files.  We recommend you make this different from #NETAREA.

#DOMAINAREA "c:domains"

     MAXIMUM SHARED ROOMS:
        This parameter selects the maximum number of shared rooms per system.

#SHARED-ROOMS 1

     RECEPTION AREA FOR FILES:
 
        The NET_RECEPT_AREA parameter specifies the directory that files sent
     to this installation Via the Send File feature of the net will be placed
     in.  Do NOT end it with a '\'!

#NET_RECEPT_AREA "C:\citadel\recept" -- Just an example

     RECEPTION DIRECTORY SIZE:
        The parameter NET_AREA_SIZE allows the sysop to specify how much room
     should be allocated for the NET_RECEPT_AREA parameter.  This allows the
     sysop to ensure that his system isn't swamped by files sent by other
     systems. The NET_AREA_SIZE parameter should be in K. (Remember, this
     should be in hex.)

#NET_AREA_SIZE 500
 
     INCOMING FILES SIZES:
        The MAX_NET_FILE parameter allows the sysop to decide how large of a
     file the system will accept from another system when the file is sent
     by the other system (this does NOT apply to Requesting a file, only to
     accepting a file Sent with the Send Net feature). This parameter is
     also in K.

#MAX_NET_FILE 300

     MODEM DIALOUT:
        callOutPrefix determines what is output to the modem prior to
     the phone number to be dialed.  It must send all commands necessary
     to put the modem into dial out mode.  Additionally, it must contain
     what is neceessary in the way of special commands dealing with PBX's,
     etc.

        #callOutSuffix determines what is output to the modem after








                                    -59-





     #callOutPrefix and the phone number has been output.  Graphically,

            <#callOutPrefix><phone#><#callOutSuffix>

     is the sequence in which data is out when the networker tries
     to dial out.  Since nothing is automatically appended to the
     number when it is being output to the modem during networking,
     the typical value for an installation using a Hayes/compatible is

            #callOutSuffix "\r"

     since Hayes/compatibles require a C/R to end a command string.

     This may not hold true for other brands of modems.

#callOutPrefix "ATDT"         -- Normal Hayes installation w/ TT.
#callOutSuffix "\r"           -- Typical Hayes suffix
 
     SPECIAL CALL OUT STRINGS
        Sometimes, for special baud rates, you want to use a different dialout
     string than what you're using #callOutPrefix.  These parameters can
     be used for that.

-#DialOut300 ""
-#DialOut1200 ""
-#DialOut2400 ""
-#DialOut4800 ""
-#DialOut9600 ""
-#DialOut14400 ""
-#DialOut19200 ""

     SCANNING INCOME NET MESSAGES
        Tired of profanity coming in on the net?  If this parameter is
     enabled, then incoming net messages are scanned against BADWORDS.SYS,
     and those failing the test are discarded with an appropriate note in
     the Aide> room.

-#SCAN-NET-MESSAGES

        SECTION 4: SPECIAL REQUIREMENT HANDLING

        NOTE: If you think you have an odd modem setup, such as a
     non-standard cable for allowing direct access to a high-speed pin, then
     consult the Citadel-86 SYSOP MANUAL, Section II.5.d, which details what
     abilities are available in this section of CTDLCNFG.SYS.  If that
     section is not clear, or doesn't seem to handle your particular problem,
     try to contact Hue, Jr. on the C-86 Test System (612) 470-9635 for help,
     or his successors.
 
#alldone x x                  -- end of file










                                    -60-






