▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒T0▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒


                         ▒▒▒   ▒▒▒        ▒▒▒                         
                        ▒▒▒▒▒ ▒▒▒▒▒     ▒ ▒▒▒              
                        ▒▒▒ ▒▒▒ ▒▒▒   ▒   ▒▒▒              
                        ▒▒▒  ▒  ▒▒▒  ▒▒▒▒▒▒▒▒▒▒            
                        ▒▒▒     ▒▒▒       ▒▒▒                
                        ▒▒▒     ▒▒▒       ▒▒▒
                        v 6.41 
                                
               Graphical Host, Front-End, Door, Door Manager
                 with CBV security and Event Management             
 
                             by Allan Bowhill
 

                           Type C for Contents

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒T1▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

  ┌─────────────────────────────────┐   Currently, an online version of
  │ M4,BBS Security & Event Handler │   M4 is available for download at:
  │ v 6.41                          │   
  │ Allan Bowhill 1994              │        ∙ Edmonds Telegraph ∙
  └─────────────────────────────────┘            ∙ 775─4765 ∙
                                           
  ┌─────────────────────────────────┐       ■ Thousands of Shareware Files
  │ Allan Bowhill                   │       ■ RoboFX VGA Graphics
  │ 7714 196th St #204              │       ■ Unlimited Time Online
  │ Edmonds, WA 98026               │       ■ Free Access 
  │ BBS support (206) 775─4765      │       
  └─────────────────────────────────┘

                             Type C for Contents

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TC▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                             Help     Contents

 Section               Topic                      Access Keys      Page
 ───────               ─────                      ───────────

 Introduction         Legalities                          TA
                      Files included                      TB
                      System requirements                 TD
                      About M4                            TE
 Startup              Quick start                         TF
                      Configuration                       TG
                      M4 WFC Module                       TH  
                      M4 Callback Verifier                TI
                      M4 Event Manager                    TJ
 M4 Menus             Sysop Menus                         TK
                      Online Menus                        TL 
                      Explanation of Process              TM                      
                      Modifying and compiling menus       TN
                      ─Option types                       TO
                      ─Constructing menus                 TP
                      ─Constructing options               TQ


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TA▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                               ∙NOTICE∙
                                ~~~~~~
  This macro is still under development. I do not guarantee that this
  it will work for you, or on your computer.

 RISK
  Please use this software at your own risk. I will not be held libel for any
  consequential damages from the use of M4.

 FEES
  There are no fees associated with M4, for either corporate or personal
  use. I will, however, accept voluntary donations of hardware or software,
  or money. Please send any donations to:

                              Allan Bowhill
                          7714 196th St.SW #204
                            Edmonds, Wa. 98026

 SUPPORT
   BBS support can be obtained by calling Edmonds Telegraph (206) 775─4765.
   I will try to answer any questions about M4 that you have. I also regularly
   read and answer mail in the RIME {Commo} conference.

 INELLECTUAL PROPERTY
   This macro is the exclusive and original work of Allan J.C. Bowhill, who
   reserves all copy rights under national and international law.

CREDITS
───────
   {Commo} is a trademark, and product of Fred P. Brucker
   LIST is a product of Vernon D. Buerg

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TB▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                              ∙Files Included∙

m4cbv.m4           Callback verifier
mcompil.m4         Menu outline compiler 
m4event.m4         Event handler 
m4funct.m4         Internal functions macro 
m4gfx.m4           Graphics engine 
m4offlin.m4        Sysop menu data file 
m4online.m4        Online menu data file 
m4popcom.m4        Online/offline menu generator 
m4select.m4        File selector 
m4evtman.m4        Event manager 
m4viewer.m4        Online ASCII file viewer
m4colors.m4        Menu color data file
m4setcol.m4        Menu colors setup file
commo.fon          Startup dialing directory for M4 
commo.mac          WFC, line tester and main macro
commo.hlp          Help/documentation 
commo.set          Setup file 
m4event.idx        Event data  
m4event.dat        Event outline 
m4online.dat       Online menu outline 
m4offlin.dat       Sysop menu outline 
sysop.bat          Sysop menus access 
install.bat        First time installation
m4.bug             List of bugs and fixes from previous versions
file_id.diz        Upload description file for M4
startup.bat        Sample batch file to run M4 in BBS frontend mode
robofx.bat             ""      ""    for a Robo-FX 1─line system
m4guihlp.txt       Online menu Help 
exten.hlp          PBX callback help screen
advert.txt         Askey BBS adverisement 
ad.asc             Extended description for M4 
door.dat           Sample outline file for M4 as a Door Manager
door.set           Sample setup file for M4 as a Door Manager
 32 files

 Other files included with package...

read-me.!!!            Instructions
bowhill.pub            PGP public key for Allan Bowhill 
 2 files

 Files you might find in your M4 directory after running...

??????.trk         Event tracking file
commo.log          Record of file transfers/connections
m4choice.m4        Small macro file generated by menu selection
m4temp.fon         Temporary file for M4 dialing directory
??????.??A         PBX dialing directory
 5 files

 38 files total

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TD▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                             ∙System Requirements∙

  Software requirements
  ─────────────────────
  To run the sysop menus alone, you will need a registered copy of {Commo}
  6.41 or above. The sysop menus can be customized and used alone as 
  a small GUI for {Commo}.  
 
  To use the M4 front─end features, you need a working BBS in addition to
  the registered copy of {Commo}.


  Software options
  ────────────────

  - Fossil Options
  Because {Commo} has built─in UART buffers and port assignment features,
  M4 does not require a fossil. This can result in a savings of 20─40k of 
  conventional/upper/high memory. A fossil─free system also offers greater
  crash─protection, and more freedom of choice with external programs. If
  your bbs software can run without a fossil, remove it. If you need to use
  a fossil, M4 will operate fine under one.

  - Callback Verifier Options
  If you have a callback verifier already in operation, you can also benefit
  by disabling or removing it. M4 includes a Session─by─Session Callback 
  Verifier (SSCBV) which is inherently more secure than traditional one─shot 
  CBVs. The M4 SSCBV requires no setup or configuration, just activate it 
  in Commo.Set.

  - Multi─line Options
  If you have a multi─line system, M4 can pass task information to your BBS
  software. {Commo} itself is DesqView─aware, and can work in a multi─line
  environment efficiently. M4 has been tested under DesqView, and appears
  to function well.

  - Single─line Multi─System Options
  If you wish to run 2 BBS's on a single─line, M4 has flexible options for
  callers to choose which BBS they login to. If your software and hardware 
  supports it, you can pass error─correction information to your BBS too. 

  - Mailer Options
  M4 also has basic support to work under a Fido─compatible mailer, and
  can be integrated in such an environment. 

  - Host or BBS options
  You may also use M4 as a stand─alone host, with menus you construct.
  All {Commo} facilties are available to you, and almost any online
  external program can be run. There is support for a DORINFOx.DEF dropfile.
    
  - Door Manager options
  You can use M4 as a door manager for your BBS. In this mode, M4 is run
  as a door itself, and can call programs you define. Users can select
  to enter doors from from the graphical menus. Currently, only the 
  DORINFOx.DEF dropfile is supported. 

  Hardware Requirements
  ─────────────────────

  ─ An IBM─PC or compatible computer with a modem, and phone line. 

   
  Hardware Options
  ────────────────

  ─ Although not tested, M4 should work on a floppy─disk based system.
    {Commo} has several features to facilitate this. Let me know how 
    M4 runs if you choose to use it in such an environment.
  

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TE▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                            ∙Program Description∙

   What is M4?
   ───────────
   M4 is a non─mailer front─end for BBS's. It can work as a stand─alone 
   front─end, below a mailer, or as a door manager. It has event scheduling
   and protection, a front─end callback verifier, unique and reliable 
   phone/modem testing facilities, a small ansi animation engine, customizable
   online pop─down menus, an all menu─driven customizable sysop interface and
   event scheduler. 

   If used as a host or front-end, M4 takes measures to ensure:

                  ■ Phone service is working
                  ■ Modem is operational and under control 
                  ■ Locked─out callers are locked─out
                  ■ Events are executed on─time

   M4's graphics are unique, and add powerful functionality to ANSI, the 
   protocol layer everyone can use!  Using sound GUI techniques, even the
   most novice caller can explore your custom-made options within minutes.
   
   M4 started as a simple online function to prevent callers from 
   interrupting scheduled mail events. Since then, it has grown into a
   full─fledged front end with enhanced features, and a fully menu─driven 
   sysop interface. The source code is about 10,000 lines long, and has been
   tested by the author extensively for over a year.

   If future versions of M4 are to be released, the M4 version number will 
   keep pace with the current version of Commo. For example, M4 6.02B2 will 
   designed to work with Commo 6.02B.

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TF▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                                ∙Startup∙


 1. Type "INSTALL" from DOS


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TG▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                               ∙Configuration∙

 In the configuration and setup part of M4, you will be asked information
 about your bbs configuration and preferences for the front end. The setup 
 file itself contains a brief summary of each function available. After 
 configuration, it will be necessary to modify your BBS batch files to call
 the M4 program.

 There are a number of ways you can run M4 in your batch files. Which ever 
 way you choose, the command─line should always take the same form:

                           Commo /v32000

 the "/v32000" switch enables 32k of memory for M4's variables. If you use 
 M4 in the mailer mode, or have only one or two events sheduled in non─mailer
 mode, you can use the switch "/v18000". This will increase macro performance 
 slightly.

 If you operate M4 as anything other than a door manager, you must run
 it using the 3─batchfile method. Included with the M4 archive, are a set
 of batchfiles for a sample 1-line BBS.   

  1.  STARTUP.BAT ─ Runs M4 and system events. Written by you.
  2.  CALLER.BAT  ─ Only has a command to run RUNBBS.BAT. Written by M4
                    when a caller chooses to login to your BBS.
  3.  RUNBBS.BAT  ─ Runs a hypothetical FX BBS and related utilities.
                    This can be any filename but must be the batchfile
                    that runs your BBS directly.

  Note: the three files above are named BBS.BAT,DOBBS.BAT and EXEBBS.BAT in
  FrontDoor─type systems. On Binkley systems, they are referred─to as "bbs 
  startup batch file", BBSBATCH.BAT and SPAWNBBS.BAT. You can call these
  files anything you wish, but make sure #2 and #3 are defined in Commo.Set


                              Process
                              ───────

 The process of running a bbs with M4 (or a mailer) is like launching a 
 three─stage rocket. The mission in launching a rocket is to get an 
 astronaut successfully into orbit. Your mission is to get a caller 
 successfully logged─on to your bbs.

 The task of getting an astronaut into orbit (for the sake of this
 analogy) is planned to run in three distinct stages, and each stage
 requires the use of an individual rocket booster. When certain conditions
 are met, one booster will stop running, and cast itself off into space, 
 initiating the next booster in the process.
  
 With M4, the task of getting a caller onto your BBS is planned around
 three batch files. Each batch file executes, then casts itself off, 
 passing control to the next batch file.

 Below, are the names of the batch files for each stage. If you run M4
 with a mailer like FrontDoor or Binkley, use the names listed. If
 you do not run M4 with a mailer, you can name them anything you want,
 but these are the defaults. 


                          M4           FrontDoor       Binkley
                       ──────────      ──────────      ────────────
        ││    (stage)            
       +  +                      
      │    │      III. RUNBBS.BAT      EXEBBS.BAT      SPAWNBBS.BAT       
      │    │           (you write)               
      +────+                         
     │      │                             
     │      │      II. CALLER.BAT      DOBBS.BAT       BBSBATCH.BAT                        
     │      │          (M4 writes)     (FD writes)     (BT writes)                
     +──────+                                   
    │        │                              
    │        │      I. STARTUP.BAT     BBS.BAT         (any name)            
    │        │         (you write)                  
    +────────+                            
     /\ /\ /\                           



 STAGE I ─ Startup
 ─────────────────

 The purpose of the Startup Stage is to put your system in a state of 
 readiness, by waiting for a caller or scheduled event. It is initiated
 by running STARTUP.BAT.

 Substage 1: WFC 
 ───────────────
 Much like a rocket sitting on a launch pad, time in this stage is spent
 waiting for a signal to launch, or do maintenance at a scheduled time.
 
 In computer lingo, this is the "WFC" (Waiting For Caller) stage. It can 
 be performed by most BBS or Mailer software, but is handled best by M4's
 sophisticated line─testing facilities.

 The M4─WFC periodically checks the modem to make sure it is operating 
 correctly, monitors the modem for an incoming call, and prepeares for
 the next pending event.  

 Note:  "Events" can be anything you want to run in DOS at a scheduled
         time. They can be nightly maintenance, such as virus scanning,
         or calls to another copy of {Commo} for automated mail runs. 

         Events can also load and run your custom─made macros at a 
         particular time of day, without leaving M4.

 Substage 2: Launch
 ──────────────────

 When a call comes─in, M4 answers, takes notes about online information
 and  passes the caller to the online menus. If the caller decides to login
 to the bbs, (after verifification, etc..) "ignition" is made, and M4 
 prepares to launch the 2nd stage. Before it finishes, it does two things:

 1. It writes the notes it took (about this call) to CALLER.BAT:

     [What the contents of CALLER.BAT might look like]──────────────────+
                                                                        │
          Locked baud rate     Port   DOS task number                   │
                       │         │    │                                 │
                       │         │    │                                 │
               RUNBBS 38400 2400 4 60 1 EC/V42bis   <───────────────────+
                 │            │     │         │
                 │            │     │         │
            Name of       Connect   Minutes   Error─correction info 
           your BBS       rate      til       passed by your modem
          batchfile                 next 
                                    system event


 2. M4 returns to STARTUP.BAT with an `errorlevel', which is a number from
    0─255 that you defined in Commo.Set to indicate a BBS caller. This number
    acts like a message to STARTUP.BAT, telling it that a caller wants leave
    M4 and gain access to your BBS. 

 (digression...tutorial on errorlevels here)

    DOS Errorlevel Detection
    ────────────────────────
    
    Programs communicate with batch files via "errorlevels", which can be
    set by the program, when the program exits.

    When a batch file runs a program, and the program exits with an 
    errorlevel value, the batch file can note this value, and respond
    by jumping to an associated label.
    
    A "label" is like a bookmark inside a batch file. All lines after
    the label are executed in sequence, until they are interrupted.  

    Example: 

              :begin               When this batch file is run, it will
              goto commo           start at the label ":begin"   
              exit                 then it will go to the label ":commo"
      
              :commo               At this label, it will change directories
              cd c:\commo          and run COMMO.EXE, then exit to DOS
              commo.exe
              exit


    When detecting errorlevels, you can use the GOTO statement:

    Example:

             :begin
             cd c:\m4                          <─ change to M4 directory
             commo /v10000                     <─ run M4 in {Commo.exe}
             if errorlevel 32 goto bbscall     <─ if M4 exits with erl 32
             if errorlevel 10 goto normexit    <─ if M4 exits with erl 10
             if errorlevel 1 goto fatal        <─ if M4 exits with erl 1
             goto begin                        <─ if not errorlevel 1,10 or 32
                                                  go back to :Begin 
             
             :bbscall                          <─execution starts here
             caller.bat                          if errorlevel was 32

             :normexit                         <─ ...if errorlevel 10
             exit

             :fatal                            <─ ... if errorlevel 1
             exit


    Trapping Errorlevels
    ────────────────────

    When you make errorlevel traps in any batch file, make sure
    you enter them in DESCENDING order:


    if errorlevel 200 goto .... <─ traps any erl greater or equal to 200
    if errorlevel 121 goto .... <─  ""          ""                   121
    if errorlevel 59  goto .... <─  ""          ""                   59
    if errorlevel 10  goto .... <─  ""          ""                   10
    if errorlevel 1   goto .... <─  ""          ""                   1
    goto :begin

    
    An "if errorlevel" statement will trap any errorlevel GREATER or EQUAL
    to the value stated. If errorlevel 150 was passed to the above set of
    errorlevel traps, then the label associated with errorlevel 121 would
    be executed.
            

  
 STAGE II ─ Caller
 ─────────────────

 Like the second stage of a rocket booster, CALLER.BAT picks─up just after
 the first stage is exhausted. The first stage, no longer of use to the
 mission, is left behind. 

 There is only one line in CALLER.BAT, which is a command to launch 
 RUNBBS.BAT with the notes M4 added.

 These notes are called "parameters", and at least _some_ of them need to
 be passed to RUNBBS.BAT. 

 Each parameter in CALLER.BAT is seperated by a space, and has a position
 in the command─line. When CALLER.BAT is run it passes all these values,
 along with their position number, to anything that needs them in RUNBBS.BAT.

    Position Number:     1    2   3  4 5   6
                         │    │   │  │ │   │
                         │    │   │  │ │   │
                RUNBBS 38400 2400 4 60 1 EC/V42bis 
                         │                 │
                         │                 │
                         \                 /
                           \             /
                             \         /
                               \     /
                                 \ /
                              RUNBBS.BAT

 Thus, the second stage finishes its task, and is cast─off forever in
 disk space...


 STAGE III ─ RunBBS
 ──────────────────

 RUNBBS.BAT is the last stage in your mission to login a caller. It contains
 the command─line for your BBS executable, and any post─bbs commands you
 might want to include.

 The most important aspect of this stage is the "plugging─in" of the
 parameters passed from the last stage. This happens in the BBS command
 line. It is done using the DOS's "replacement variables".

 The replacement variables allow you to use parameters passed from one batch
 file to another. You can add these variables to some program's command─line
 switches, to pass information to that program. Below, is an example of the 
 kind of parameters CALLER.BAT might pass to your RUNBBS.BAT.

 Example:
 ────────

    Position Number:     1    2   3  4 5   6
                         │    │   │  │ │   │
                         │    │   │  │ │   │
                RUNBBS 38400 2400 4 60 1 EC/V42bis 
                         │    │   │  │ │   
                         │    │   │  │ │   
                         │    │   │  │ └─────────────────────┐
                         │    │   │  └──────────────┐        │  
                        ┌┘    └─┐ └───────┐         │        │
                        │       │         │         │        │
 A.  RoboFx.exe  ─lock %1 ─baud %2 ─port %3 ─event %4 ─node %5  

                                  ─or─

 B.  RoboFx.exe  ─baud %2 ─lock %1 ─node %5 ─event %4 ─port %3


 The above two lines (A and B) are examples of the first line you might
 have in your RUNBBS.BAT file. Notice that it doesn't matter which order
 the command─line switches are in. Anything will work as long as they are
 passed the right replacement variables to the right command─line switches.

 Notice all replacement variables begin with a percent sign, followed by
 the corresponding position number.


 Conclusion 
 ──────────
 
 If eveything is set right, your caller should now be able to complete a 
 session online. With the mission done, there is an additional stage left:
 to recycle the whole process when the caller logs─off.

 To use our analogy, this would be the equivalent of having the space
 agency clean─up the launch pad, and prepare a fresh rocket for launching.

 This is simply done by calling STARTUP.BAT from RUNBBS.BAT. 


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TH▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                        ───────────────────────
                        M4WFC (Wait for Caller)
                        ───────────────────────

   What will M4 WFC do?
   
   After installation and configuration, you can run M4 as you would any
   front─end answering device, from your bbs batch file. 

   When M4 is started, it will:
   ────────────────────────────
   1. Get rid of any data caller left online
   2. Test and initialize the modem
   3. Test for active telephone service by performing a telco callback
   4. Rid any silent caller online
   5. Wait for caller (WFC)
     a. test for presence of a dialtone at 999─second intervals
     b. wink DTR after dialtone test
     c. recalculate time until next event

   If an event is getting close while in WFC, M4 will:
   ───────────────────────────────────────────────────
   1. shorten 999─second idle wait time to accomodate pending event
   2. take phone offhook X minutes (sysop defined) prior to event execution

   If a voice call is recieved during WFC, M4 will:
   ────────────────────────────────────────────────
   1. Transmit a carrier signal, and upon NO CARRIER, resume WFC directly       

   If a data call is recieved during WFC, M4 will:
   ───────────────────────────────────────────────
   1. Display M4 flag, and wait for human input
   2. Check for low baud rate, line noise, and inform/disconnect if bad
   3. Check error─correction status, and inform/disconnect if not good 
   4. Display animated BBS ad
   5. Display 24─hr event box
   6. Display VGAterm download time, if too near event time

 It is worth noting that the extensive measures M4 takes to confirm the 
 state of the line and modem are designed to counter some of the modem's
 deficiencies in prioritizing and reporting input and output. 
 
 The modem basically has two modes of operation. An online mode (data mode)
 and an offline mode (command mode). Since communication in both modes occurs
 over a single I/O port, there is a real recognition problem presented to the 
 software that is supposed to control it.
 
 Bend or Break
 ──────────────

 If the WFC module is too intolerant, it will execute a fatal exit when it 
 cannot resolve an unpredictable series of events. In such a case, for 
 example, one may come home from work only to discover that the system 
 exited mysteriously to DOS, many hours ago. This can be disturbing, and
 there is usually little evidence left to indicate how it happened.

 Conversely, if it is too tolerant, the WFC will completely ignore the 
 muddled state of affairs, and assume it has resolved things, when
 it hasn't. In this scenario, one might discover that the WFC can develop
 a repetoire with a data caller online, thinking it is communicating with the
 modem's internal command─set. 

 With M4, an attempt has been made to strike a happy medium between tolerance
 and intolerance. Great care has been taken to develop an approach that will
 use as many tactics as possible to recover from chaos, while being aware
 that the condition may not be recoverable.


 Canceled Messages
 ─────────────────  

 If you experiment with your modem, you will likely discover that DCE (line─
 to─modem) and DTE (computer─to─modem) messages sometimes conflict with one
 another.

 Occasionally, an incoming message from the DCE will override a command or
 response generated or directed to the DTE (or vice─versa). Try to initialize
 your modem repetetively while the phone is ringing. If you give this enough
 time, chances are the modem will ignore one of your commands, refuse to 
 respond to a command, or fail to detect an incoming RING.

 These conflicts do not always result in ERROR responses, and thus are not
 dectectable by most WFC software. Since most WFC software does not go to
 the extent M4 does to confirm the state of the modem and line, conficts 
 like this can present a WFC security problem.

 Malicious callers may try to anticipate when your system initializes,
 and make an effort to confuse your software into thinking the modem is
 in the command mode when it is actually in the data mode.

 M4 takes measures against this confusion, and will go into a special
 dialtone testing function that will clear the line of any leftover caller. 

 If M4 detects a problem during initialization, it will go into Dialtone
 Testing Mode. Dialtone Testing mode consists of four possible stages:   

 1. CD test/DROP DTR
 2. Single─digit Dialout action/test/reaction
 3. 999─second pause
 4. Fatal Error Exit

 If stages 1 and 2 are executed successfully, macro execution will continue
 normally. If stages one or two cannot be executed successfully after 60
 successive tries, with a increasing corresponding wait period in between;
 stage three goes into effect, and no commands are sent to the modem. If
 stage three is successful, macro execution resumes. If not, stages one 
 and two are repeated. If they are unsuccessful for a second time, stage
 four is run.



▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TI▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                           ───────────────────────
                           SSCBV Dialing Directory
                           ───────────────────────

 The SSCBV dialing directory is used to keep the system dialback number for
 this node, the line─test number, and the verified, unverified and bad phone
 numbers for the built─in Session─by─Session Callback Verifier.

 Below is a description of the M4s Dialing Directory format. See the section
 "SSCBV Entry Examples" for more information.


 ──────────────────────────────
 SSCBV Dialing Directory Format
 ──────────────────────────────

 In most cases, it is not necessary to modify any fields in this file.
 However, any of the fields can be modified manually if the format is
 adhered─to.  Each line in this file represents one telephone number's
 entry. The first two lines of the file should not be modified or deleted. 

 Single Entry 
 ──────────── 

                                              Verification            
 User ID     Dialout      Password                    Code     Date   
    │           │            │                          │       │
    │           │            │                          │       │
    │           │            │                          │       │
 Identifier {PhoneNumber} {Password 5─25 Characters } {V21} {} 04/18/98
  │              │                   │                 │││   │   │
  │              │                   │                 │││   │   last date
  │     7 digit local number with    │                 │││   │   called
  │     3 leading spaces for sysop   │                 │││   nul   
  │     to manually enter area code  │                 │││      
  │     for long─distance calls      │                 ││└──daily attempts     
  │                                  │                 ││   left  
  │                                  │                 ││      
  │                                  │                 │└───days left to     
  │                                  │                 │    verify, not
  │                                  │                 │    consecutive
  │                                  │                 │    
  │                                  │             V=Verified S=SuperVerified                         
  │                                  │             M=Maybe    X=PBX                                                                                     
  │                                  │             B=Bad                                                                                                   
  └──users whole phone number        │                 
     this acts as his "name"         └───Only verified caller can enter 
                                         a password. If caller isn't verified
                                         default value is his phone number. 



                             Detail of
                       Verification Code Field 


                        Days─Left to Verify         
           Verification Status   │    Daily─Attempts Left    
                           │     │     │
                           │     │     │                                      
                           └────┐│┌────┘
                                │││
                               {M33}

                          Verification Code


 Verification Status (M,V,B,S,X)
 ───────────────────────────
 This character tells M4 whether the number has been Verified or not.
 
 V Verified            Verified              
 M Maybe               Unverified             
 B Bad                 Locked─Out by Sysop   
 S Super-verified      Skip CBV for this caller
 X PBX number          Tells SSCBV to treat this as a PBX number
 

 Days─Left to Verify (0─3)
 ─────────────────────────
 This number tells M4 how many individual days are left for the caller
 to verify successfully before locking him out.

 This number does not explicitly refer to continuous days left. It can 
 refer to one─day─a─month for three months, or three consecutive days 
 in a single week.

 An unverified (M) number is locked─out if this value reaches 0. 
  
 
 Daily─Attempts Left (0─3)
 ───────────────────────── 
 This value tells M4 how many attempts may be made to verify this phone
 number today. "Today" is true if the Date Field matches the current 
 date.

 This value decreases after every failed attempt, but is restored if the
 last attempt to verify was not today. When restored, it is always set to
 equal the new Days─Left value (see Penalties for Unverified Callers.)
 
 If this Daily─Attempts Left is zero, the caller cannot make any attempt
 to verify today. 



 How Unverified Callers are Penalized
 ────────────────────────────────────
 Unverified callers who fail verification attempts are penalized by a 
 reduction in their daily attempt allotment and a reduction in the allotment
 of days left to verify.

 Below, are the verification codes unverified callers would get at various
 stages of the process.


                                     Day #                  
                         1        2         3        4
          Attempt #   ┌────────────────────────────────
                  1   │ M33      M22       M11      M00 
                  2   │ M32      M21       M10
                  3   │ M31      M20            
                  4   │ M30


 There are a number of reasons why any SSCBV attempt might fail: 
 
 1.  A disconnected or invalid phone number was entered by the caller
 2.  A local─long distance number was entered by the caller
 3.  A voice answered during callout
 4.  A bad data connection was made 
 5.  Connection was made to a bbs or fax machine
 6.  Connection was made to a modem with no person using it
 7.  A busy signal was encountered 
 8.  Incoming calls came─in during dialout
 9.  No dialtone was detected before dialout
 10. A modem─error occured during dialout

 *Reasons 1─6 fail the attempt after 1 dialout, and will penalize the caller.

 *Reasons 7─10 will cause SSCBV to dialout as many as 3 times before quitting,
  but will not penalize the caller. 

  Also, any attempt to dial a number with an areacode of 1 or 0 will be 
  disconnected. The same is true for local prefixes. Disconnection will
  also occur with entry of 911, 555, or 411 in either field. Any attempt 
  to validate an unvalidated number outside your area code will be noted,
  but no dialout will be made. You can, however, get M4 to dialback long
  distance, but the entry must be validated manually by the sysop.


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TJ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒


                              ────────────────
                              M4 Event Manager
                              ────────────────

  Move cursor─keys to select field. Press [enter] to select item.
  Maximum: 10 events


  Example A:       Default line from event editor, items A─K

  1 Description MTWRFSS 00:00 00:00 00:00 DOS 000 BATCHFIL.BAT MACLABEL *
  a      b         c      d     e     f    g   h       i          j     k 


 Item:
  
 a. Event number
    This is simply a number assigned to the event. It does not indicate
    in what order the event will run. To insert a new event, hit [Ins].
    To delete this event, hit [Del].

 b. Event Description
    Edit this field to give a short description of the event's purpose
    for your records. Keep it short. The text you type will show in the 
    system log, when the event runs. 

 c. Days of the week to run 
    This field lets you select the days of the week to run the event.
    M=Monday T=Tuesday W=Wednesday R=Thursday F=Friday S=Saturday S=Sunday
    If you deselect any day─letter, it will be indicated by a dash "─".
    On days that are dashed─out, the event will not run.
 
 d. Event Start Time
    This event's start─time on a 24─hr clock (00:00=midnight 12:00=noon)
    If at all possible, event will be run at this time. If the start─time
    has passed, and no Late─Start buffer has been defined, the event will
    be skipped.

 e. Event Duration
    For INT (internal or Macrofile) events only. This setting is ignored
    for DOS or ERL events. 

    Set to the desired duration of the event. If the event is started late,
    event duration will not be shortened. This may disable other events. 
    Make sure to define late─start times for other events so they can be
    executed afterwards.  

 f. Late Start Buffer
    This is the time (in hours and minutes) that you want to add to the 
    events start─time, so the event can be run late.

    Setting this to a value of an hour will allow a 1─hour window for the
    event to execute in. This is useful if someone stays "overtime" on your
    bbs, or if you have several events that are scheduled to execute at the  
    same time.

    In the above case, if control is returned to M4 20 minutes into the 
    event, the event will be run as soon as M4 initializes.
  
    To have continuous─type events (events that never get skipped) set the
    value to 23:59.
   
 g. Event type

    You have 3 choices for this field:
          1. DOS (DOS event)
          2. ERL (ErrorLevel event)
          3. INT (Internal event)
      
    Type 1: DOS event
        
     When this type of event is run, M4 shells to DOS and runs the 
     filename in field "i". The file must reside in the M4 directory.

    Type 2: ERL event

     When this type of event is run, Commo will exit at the errorlevel
     defined in field "h".

    Type 3: INT event
    
    When this type of event is run, a call to the designated macro file 
    will be made, the file will be loaded as the auxiliary macro file,
    and execution will start at the designated labelname.
 
    If a duration is selected, the variable PENDDURA can be used in your 
    macro to define the duration of whatever function you have running.
    PENDDURA is expressed in minutes 1─1000.

    Note that you must execute a return statement, an exit (with errorlevel),
    or {goto begin,commo.mac} statement to restart M4. Also, if you load your
    own macro file, make sure you represent all calls to all labels with an
    associated labelname. If you try to call a label that happens to be
    a label in commo.mac, (without that label actually existing in your macro)
    unpredictable results may occur.
     
    If the default internal macrofile is used (M4FUNCT.CCM), you can execute
    an offhook function by calling label "start", and defining a duration to
    it. The modem will put the phone onhook, and not respond to calls for
    the defined time─period. This is useful if you have a voice window during
    certain periods. 
    
 h. ErrorLevel
    Set this to the errorlevel you wish to exit with. This only works with
    ERL─type events. For DOS and INT events this field is ignored.

i.  Filename
    Select a filename to be placed in this field. This can be done with
    the built─in scroller bar. The file must reside in the M4 directory
    in order to run. 

j. Macro label
   Set this field to the macro label you wish to call for INT events.
   For ERL and DOS events this field has no effect. Do not include a colon
   when entering data in this field. You will be prompted for M4 to scan
   for the label you input. If M4 finds the label, the name you typed will
   be placed in this field.

k. Active/Inactive
   Toggle this setting to make the event active or inactive. If set to
   active, the event will be calculated into the schedule and run. If 
   set to inactive, it will be marked with a star "*" and wil not be run,
   yet the data will be retained the next time you enter the event editor.


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TK▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                             ─────────────
                             M4 Sysop Menu
                             ─────────────

 The M4 Sysop Menu can be accessed from the WFC module directly by pressing
 [Escape]. 

 The Sysop Menu gives you control over functions and features of M4. You
 can also create your own options and menus.

 Important Options
 ─────────────────

 Access to all M4's functions can be found under the M4 option in the sysop
 menus. Here you can access:

                       1. Help file
                       2. M4 setup module
                       3. Event Manager
                       4. Menu Editor
                       5. WYSIWYG Testing Mode

 Help File
 ─────────
 The Help File (this file) will give you the details necessary to configure
 and use M4. Keypress combinations prefixed with a `T' will bring you to
 various places in this document. Type `C' for a table of contents.

 M4 Setup Module
 ───────────────
 This will bring you to the module you first entered when installing M4.
 Here you can check your batch files, and edit your M4 configuration.
 A "normal" exit to DOS will be made so the changes can go into effect
 when you restart M4.

 Event Manger
 ────────────
 The Event Manager will let you configure up to 10 events that M4 can run if
 in non-mailer mode. You can schedule events to run on certain days of the 
 week, at certain times. Event scheduling is flexible, and all M4 events
 are protected in a pre-emptive way. This feature cannot be found in mailer
 software. Additionally, you can load and run your own macro files at certain 
 times from within M4. 

 Menu Editor
 ───────────
 The Menu Editor will allow you to edit and compile your own Sysop menus
 and the menus you wish to display to callers. The menu options you make
 are practically unlimited. You can allow callers to use your own macro
 files online, allow them to run online programs, or login to your BBS.

 WYSIWYG Testing Mode  
 ────────────────────

 Although still in the experimental stages, you can prevue your online
 menus without logging in remotely by selecting this option. When prompted,
 set your Port number to 8 (or some other unused port on your computer)
 and you will see everything a caller will see when he logs in.

 You can test and review your custom-made options in TTY, Mono Ansi, or
 Color Ansi.

     
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TL▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                              ───────────────
                              M4 Online Menus
                              ───────────────
 
  The M4 online menus are essentially an online version of the M4 sysop
  menus, but with options for callers to your BBS.

 Creating Online Menus
 ─────────────────────   
  The rules for creating menu options are the same as with the offline sysop
  menus, with a couple of additions.

  1. If you want users to able to transfer a file using Commo's internal
     protocols, make your line look like this:

    a. For uploading to a caller:
    
    ─Download Betafile`^(setv file,beta601k.zip^)^(call upload,m4funct.m4^)'
     
    {setv file,beta601k.zip}      this defines the path\filename of the
                                  file you will send

    {call upload,m4funct.m4}     this sends a choice box that asks the
                                  caller to select from Commo internal 
                                  protocols, and sends the file.

    b. For downloading from a caller:
       
     ───Upload a message to sysop`^(call download,m4funct.m4^)'
      
     In this line, the choice box will be sent to the user. Ater he selects
     a Commo internal protocol, the file will be recieved into the M4
     download directory. If it is an X─modem transfer, the file will be 
     assigned a unique filename, using a time─date stamping technique.

  ── Always include a ^(call back2m4^) statement after a download or upload
     statement.

 
  Online Sysop Options
  ────────────────────

  To get the Sysop Options box, press [Escape] while a caller is in the 
  online menus. You will be given choices to Hangup on caller, gain 
  control of the menus online, or pass menu control back to the caller.
  When you gain control of the menus, the caller will not be able to
  select options until you return control to him.

  You can also enter a split─screen chat with the caller. When in chat, 
  press [Enter] twice to pass control to the caller so he can type─in 
  sentences. To exit chat, press [Escape]. All chat conversations are 
  logged in the system logfile. 


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TM▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                                 Menu Structure
                            ∙Explanation and Analogy∙

   The menu outline files are organized much the same way an essay or speech
   outline is ── in a topical hierarchy. Each line in the outline file has an 
   associated `level', (from 1 to 8 ── represented by successive dashes)
   as each line in a speech outline has an associated number or letter.

   Following, are examples of a speech outline and an analogous sample menu
   outlines.  Note the organization of levels in both examples.

   Ex. #1: Speech Outline (Social Responsibility v. Libertarian Free Press)
   ────────────────────────────────────────────────────────────────────────
   I. Introduction                                                 <─ level 1
   II. Social Responsibility view                                  <─ level 1
       A. Four misconceptions of social responsibility             <─ level 2
          1. Press should act as fourth branch of government       <─ level 3
          2. Press should be responsive to public interest         <─ level 3
          3. Press should allow equal access to all people         <─ level 3
          4. A free press should be pluralistic and diverse        <─ level 3
             a. Definition of pluralism                            <─ level 4
                1. Message pluralism                               <─ level 5
                2. Media (or unit) pluralism                       <─ level 5
                3. Communicator pluralism                          <─ level 5
             b. Levels of pluralism                                <─ level 4
                1. System level                                    <─ level 5
                2. Community Level                                 <─ level 5
                3. Individual level                                <─ level 5
   III. Overview of Libertarian Ideal                              <─ level 1
       B. Diagram                                                  <─ level 2
          1. Journalist should be politically neutral              <─ level 3
          2. Work under a low degree of government control         <─ level 3
          3. Work in society with a high degree of capitalism      <─ level 3


   Ex. #2: Menu outline file 
   ──────────────────────────
  -Help`'                                                  <─ level 1                                                
  --Pop─Down Menu Help`^(call helpu,m4popcom.m4^)'         <─ level 2
  -Robo─FX`'                                               <─ level 1
  --Login to BBS`^(setv file,%VGAterm%^)^(call back2m4^)'  <─ level 2
  --System Event Graphic`^(call welcome,commo.mac^)'       <─ level 2
  -Chat`'                                                  <─ level 1
  --Page Sysop for Chat`^(call page,m4popcom.m4^)'         <─ level 2
  -Change`'                                                <─ level 1
  --Set Display to Mono Ansi`^(setv graphics,0^)'          <─ level 2
  --Set Display to Color Ansi`^(setv graphics,1^)'         <─ level 2
  -Exit Options`'                                          <─ level 1
  --Login to BBS`^(setv file,%VGAterm%^)^(call back2m4^)'  <─ level 2
  --Logoff/Goodbye`^(call begin,commo.mac^)'               <─ level 2


  In the speech outline (Ex. #1), the level of the item is defined by the
  preceding alphanumeric characters, terminated by a period. There are five
  levels each item is catagorized under.

       a level─one item: Roman numerals (I,II,III,IV,V,IV...)
       a level─two item: Uppercase English letters (A,B,C,D,E...)
       a level─three item: Arabic numerals (1,2,3,4,5...)
       a level─four item: Lower case English letters (a,b,c,d,e...)
       a level─five item: Arabic numerals (1,2,3,4,5...)

  In the  Menu outline file (Ex. #2), the  level is defined by the number
  of leading dashes to the left of that item.

                   level one    -  (one dash)
                   level two    --  (two dashes)
                   level three  ---  (three dashes)
                   level four   ----  (four dashes)
                   level five   -----  (five dashes)
                   level six    ------  (six dashes)
                   level seven  -------  (seven dashes)
                   level eight  --------  (eight dashes)


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TN▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                         ∙Modifying and compiling Menus∙

   M4's menus are fully customizable and configurable. You can add
   your own menu options, or modify and delete ones that have been included
   in the original archive.

   The menus are capable of displaying 23 options on any menu or submenu, and 
   8 levels of submenus can be created. This means almost 200 options can be 
   encorporated into the outline file.

   Customizing menu items is a two─step process:
 
       1. Modify the outline file (via the sysop menus) to add, delete or
          edit options.  

       2. Compile this file by selecting `Compile new (sysop/online) menu'
          from the Sysop menu, under Menu Options.


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TO▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                                  ∙Option Types∙

        Each option in the outline file is placed on a single line.
        There are two types of options in the outline file.

        1. Submenu─calling option:  calls a submenu
        2. Command─executing option:  executes a Commo command

      * When you create a submenu─calling option, you must also create an
        associated menu.

 A submenu─calling option has:
          1. No associated command
          2. Precedes the first option of the menu it calls
          3. Precedes a menu level that is one greater in value

 A command─executing option has:
          1. An associated command
          2. Will never precede a menu level greater than itself


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TP▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                              ∙Constructing Menus∙

   In either M4 outline file, each individual pop─down menu and submenu
   must have an assigned menu level. When a submenu─calling option is selected
   items of the next level are `gathered' to form a new menu on the screen.

   In the speech outline, sub─topics can be summarized by `gathering'
   items of a particular level. For example, if a summary is needed of
   The Four Misconceptions of Social Responsibility, one would first locate
   the topic header:

       A. Four misconceptions of social responsibility             <─ level 2

   Then `gather' the item headers under that topic:

          1. Press should act as fourth branch of government       <─ level 3
          2. Press should be responsive to public interest         <─ level 3
          3. Press should allow equal access to all people         <─ level 3
          4. A free press should be pluralistic and diverse        <─ level 3


   Regarding the menus, the same rule applies. If the item `BBS' is selected,
   the the item headers under that option are gathered to form a new submenu.

   Selected Item: BBS
   Option─Type: Submenu─calling
   Yeilds screen output:

           This option was Selected 
           +
     Help BBS Chat Change Exit Options     <───Menu bar (always level 1)
          ▌▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▐         <───Pop─Down Box (level 2)              
          ▌ Login to BBS         ▐
          ▌ System Event Graphic ▐
          ▌▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▐


   Items that were gathered:
   ─────────────────────────

  --Login to BBS`^(setv file,%VGAterm%^)^(call back2m4^)'  <─ level 2
  --System Event Graphic`^(call welcome,commo.mac^)'       <─ level 2


   Each line in the outline file represents an option in one of the menus
   in the online or sysop menus. All options that are in level one (1) will
   be placed in the menu bar at the top of the screen. All other options 
   will be end up in pop─down panels.


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒TQ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                             ∙Constructing Options∙

   To construct individual options in the configs, three fields must be
   included, and entered in a prescribed format. Unlike a speech outline,
   there is no room for error in organization or syntax. If information
   is absent or misplaced, results may be unpredictable while using.

   The three fields each line requires are:

           Menu_Level        Item_Descriptor        `^(Item_Action^)...'

               1                    2                        3



                           Field #1 ─ Menu_Level

   These are represented by dashes only ── at least one, no more than eight.
   The number of concurrent dashes designate the menu level for that option.

    Valid types:
                   level one    -  (one dash)
                   level two    --  (two dashes)
                   level three  --- (three dashes)
                   level four   ----  (four dashes)
                   level five   -----  (five dashes)
                   level six    ------  (six dashes)
                   level seven  -------  (seven dashes)
                   level eight  --------  (eight dashes)



                         Field #2 ─ Item_Decriptor

   Item_Descriptor is the text that will appear in any menu as a selectable
   description of that option.

       For Example:
                              See Misc Functions
                              Dial a BBS
                              Shell to DOS
                              Sound Alarm


                        Field #3 ─ ^(Item_Action^)

   This field contains the associated Commo command to run when the
   option is selected from the menus. Three things must be satisfied
   in order for this field to work.

   1. If the item that calls a submenu, Item_Action should be left
      blank. 
             Example:  
                      --See misc Functions`'


      If it is a command─executing option, Item_Action must be a valid
      Commo command.

      Such as:
                      dial  ─ calls the dialing window
                      shell ─ shells to DOS
                      alarm  ─ sounds alarm 
                      

   2. The Commo command must be enclosed with Commo's substitute for curly
      braces: ^( and ^)

                      ^(   open curly braces    {
                      ^)   closed curly braces  }

      If there is no command (the option is a call to a submenu) then 
      the curly─brace substitutes are not necessary.


   3. Lastly, the entire text of the 3rd field (including the curly─brace
      substitutes) must be enclosed with small quotes: ` and '

                      ` open small─quote      
                      ' closed small─quote

      If the option is a call to a submenu, there isn't anything inside 
      these quotes. The third field simply appears as a: `'

      From the examples above, valid texts for this
      field would be:

                      `'           ─   calls a submenu
                      `^(dial^)'   ─   opens DIALing directory
                      `^(shell^)'  ─   SHELLs to dos
                      `^(alarm^)'  ─   rings ALARM
             `^(shell^)^(alarm^)'  ─   shells to dos _and_ rings alarm   
                      

   Finally, when a line is composed in the outline file, the three fields
   must be merged together to form a continuous line, and placed flush
   up against the left margin.

   For example:

           ┌──────>
           │       -See Misc Functions`'          calls a SUBMENU
           │       --Dial a BBS`^(dial^)'         opens DIALing directory
  left margin      --Shell to DOS`^(shell^)'      SHELLs to dos
           │       --Sound alarm`^(alarm^)'       rings ALARM
           └──────>

 Additional Notes:

 *  Each line in the outline file can contain short comments to the right
    of the 3rd field. As long as they are put outside of the small quotes,
    they will be ignored during menu compile.

 *  Within limits, multiple Commo commands may be included in one option.
    However, they must appear back─to─back, and all must be enclosed with
    one pair of small quotes, on one line:

    --View a File`^(INPU fname,File to View?^)^(EDIT %fname^)'


    If you want to run a large number of macro commands, load them as a
    seperate macro file. Call the macro file as the auxiliary macro:

    --Do Mailrun`^(call top,mailrun.mac^)'  

    If your macros are structured properly, control will return to the menus.
    If not, or the macro file you load has a {STOP}, add this line to the 
    return sub of the macrofile you load:

                       {goto menu_beg,m4popcom.m4}   

    This will return control to the menus. This applies to both online and 
    sysop menus.

 *  Multiple commands will execute in the sequence in which they appear 
    in the third field.


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒END▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒


