BT.C

19.3 KB be91e08db42dc34d…
/*--------------------------------------------------------------------------*/
/*                                                                          */
/*                                                                          */
/*      ------------         Bit-Bucket Software, Co.                       */
/*      \ 10001101 /         Writers and Distributors of                    */
/*       \ 011110 /          Freely Available<tm> Software.                 */
/*        \ 1011 /                                                          */
/*         ------                                                           */
/*                                                                          */
/*  (C) Copyright 1987-91, Bit Bucket Software Co., a Delaware Corporation. */
/*                                                                          */
/*                                                                          */
/*           This module was originally written by Bob Hartman              */
/*                                                                          */
/*                                                                          */
/*           BinkleyTerm "Main" Module: Terminal Emulation and              */
/*                       File Transfer dispatching                          */
/*                                                                          */
/*                                                                          */
/*                       BinkleyTerm Licensing Terms                        */
/*                                                                          */
/*                                                                          */
/* (C) Copyright 1987-91 Bit Bucket Software Co., a Delaware Corporation.   */
/* ALL RIGHTS RESERVED. COMMERCIAL DISTRIBUTION AND/OR USE PROHIBITED       */
/* WITHOUT WRITTEN PERMISSION FROM BIT BUCKET SOFTWARE CO.                  */
/*                                                                          */
/* Non-Commercial distribution and/or use is permitted under the following  */
/* terms:                                                                   */
/*                                                                          */
/*                                                                          */
/* 1. You may copy and distribute verbatim copies of BinkleyTerm source,    */
/* documentation, and executable code as you receive it, in any medium,     */
/* provided that you conspicuously and appropriately publish on each copy a */
/* valid copyright notice "(C) Copyright 1987-91, Bit Bucket Software Co."; */
/* keep intact the notices on all files that refer to this License          */
/* Agreement and to the absence of any warranty;  PROVIDE UNMODIFIED COPIES */
/* OF THE DOCUMENTATION AS PROVIDED WITH THE PROGRAM; and give any other    */
/* recipients of the BinkleyTerm program a copy of this License Agreement   */
/* along with the program.  You may charge a distribution fee for the       */
/* physical act of transferring a copy, but no more than is necessary to    */
/* recover your actual costs incurred in the transfer. Under no             */
/* circumstances is BinkleyTerm to be distributed in such a way as to be    */
/* construed as "value added" in a sales transaction, such as, but not      */
/* limited to, software bundled with a modem or CD-ROM software             */
/* collections.                                                             */
/*                                                                          */
/* 2. You may modify your copy or copies of BinkleyTerm or any portion of   */
/* it, and copy and distribute such modifications under the terms of        */
/* Paragraph 1 above, provided that you also do the following:              */
/*                                                                          */
/*     a) cause the modified files to carry prominent notices stating       */
/*     that you changed the files and the date of any change;               */
/*                                                                          */
/*     b) cause the executable code of such modified version to clearly     */
/*     identify itself as such in the course of its normal operation;       */
/*                                                                          */
/*     c) if the modified version is not a "port", but operates in the      */
/*     same hardware and/or software environment as the original            */
/*     distribution, make the original version equally available,           */
/*     clearly identifying same as the original, unmodified version;        */
/*                                                                          */
/*     d) cause the whole of any work that you distribute or publish,       */
/*     that in whole or in part contains or is a derivative of              */
/*     BinkleyTerm or any part thereof, to be licensed at no charge to      */
/*     all third parties on terms identical to those contained in this      */
/*     License Agreement (except that you may choose to grant more          */
/*     extensive warranty protection to some or all third parties, at       */
/*     your option); and                                                    */
/*                                                                          */
/*     e) send the complete source code modifications to Bit Bucket         */
/*     Software Co. at one of the addresses listed below,  for the          */
/*     purpose of evaluation for inclusion in future releases of            */
/*     BinkleyTerm.  Should your source code be included in BinkleyTerm,    */
/*     Bit Bucket Software Co. retains all rights for redistribution of     */
/*     the code as part of BinkleyTerm and all derivative works, with       */
/*     appropriate credit given to the author of the modification.          */
/*                                                                          */
/*     f) You may charge a distribution fee for the physical act of         */
/*     transferring a copy, but no more than is necessary to recover        */
/*     your actual costs incurred in the transfer, and you may at your      */
/*     option offer warranty protection in exchange for a fee.              */
/*                                                                          */
/* 3. Mere aggregation of another unrelated program with this program and   */
/* documentation (or derivative works) on a volume of a storage or          */
/* distribution medium does not bring the other program under the scope of  */
/* these terms.                                                             */
/*                                                                          */
/* 4. You may copy and distribute BinkleyTerm and its associated            */
/* documentation (or a portion or derivative of it, under Paragraph 2) in   */
/* object code or executable form under the terms of Paragraphs 1 and 2     */
/* above provided that you also do one of the following:                    */
/*                                                                          */
/*     a) accompany it with the complete corresponding machine-readable     */
/*     source code, which must be distributed under the terms of            */
/*     Paragraphs 1 and 2 above; or,                                        */
/*                                                                          */
/*     b) accompany it with a written offer, valid for at least three       */
/*     years, to give any third party free (except for a nominal            */
/*     shipping charge) a complete machine-readable copy of the             */
/*     corresponding source code, to be distributed under the terms of      */
/*     Paragraphs 1 and 2 above; or,                                        */
/*                                                                          */
/*     c) accompany it with the information you received as to where        */
/*     the corresponding source code may be obtained.  (This                */
/*     alternative is allowed only for noncommercial distribution and       */
/*     only if you received the program in object code or executable        */
/*     form alone.)                                                         */
/*                                                                          */
/* For an executable file, complete source code means all the source code   */
/* for all modules it contains; but, as a special exception, it need not    */
/* include source code for modules which are standard libraries that        */
/* accompany the operating system on which the executable file runs.        */
/*                                                                          */
/* 5. You may not copy, sublicense, distribute or transfer BinkleyTerm and  */
/* its associated documentation  except as expressly provided under this    */
/* License Agreement.  Any attempt otherwise to copy, sublicense,           */
/* distribute or transfer BinkleyTerm is void and your rights to use the    */
/* program under this License agreement shall be automatically terminated.  */
/* However, parties who have received computer software programs from you   */
/* with this License Agreement will not have their licenses terminated so   */
/* long as such parties remain in full compliance, and notify Bit Bucket    */
/* Software Co. of their intention to comply with this Agreement.           */
/*                                                                          */
/* 6. If you wish to incorporate parts of BinkleyTerm into other free       */
/* programs whose distribution conditions are different, please contact     */
/* Bit Bucket Software Co. at one of the addresses listed below.  We have   */
/* not yet worked out a simple rule that can be stated here, but we will    */
/* usually permit this.  We will be guided by the two goals of preserving   */
/* the free status of all derivatives of our free software (as it pertains  */
/* to Non-Commercial use as provided by this Agreement) and of promoting    */
/* the sharing and reuse of software.                                       */
/*                                                                          */
/* 7. For the purposes of this document, "COMMERCIAL USE" is defined as     */
/* operation of the software on four or more computers or data lines owned  */
/* by the same for-profit organization. Any organization may operate this   */
/* software under the terms of this Non-Commercial Agreement if operation   */
/* is limited to three or less computers or data lines.                     */
/*                                                                          */
/*                                                                          */
/*                                NO WARRANTY                               */
/*                                                                          */
/* BECAUSE BINKLEYTERM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO */
/* WARRANTY.  EXCEPT WHEN OTHERWISE STATED IN WRITING, BIT BUCKET SOFTWARE  */
/* CO. AND/OR OTHER PARTIES PROVIDE BINKLEYTERM "AS IS" WITHOUT WARRANTY OF */
/* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,    */
/* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR   */
/* PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF           */
/* BINKLEYTERM, AND THE ACCURACY OF ITS ASSOCIATED DOCUMENTATION, IS WITH   */
/* YOU.  SHOULD BINKLEYTERM OR ITS ASSOCIATED DOCUMENTATION PROVE           */
/* DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR     */
/* CORRECTION.                                                              */
/*                                                                          */
/* IN NO EVENT WILL BIT BUCKET SOFTWARE CO. BE RESPONSIBLE IN ANY WAY FOR   */
/* THE BEHAVIOR OF MODIFIED VERSIONS OF BINKLEYTERM. IN NO EVENT WILL       */
/* BIT BUCKET SOFTWARE CO. AND/OR ANY OTHER PARTY WHO MAY MODIFY AND        */
/* REDISTRIBUTE BINKLEYTERM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR        */
/* DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL,      */
/* INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY  */
/* TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED */
/* INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE      */
/* PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) BINKLEYTERM, EVEN IF YOU     */
/* HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM   */
/* BY ANY OTHER PARTY.                                                      */
/*                                                                          */
/*                                                                          */
/* You can contact Bit Bucket Software Co. at any one of the following      */
/* addresses:                                                               */
/*                                                                          */
/* Bit Bucket Software Co.        FidoNet  1:104/501, 1:343/491             */
/* P.O. Box 460398                AlterNet 7:491/0                          */
/* Aurora, CO 80046               BBS-Net  86:2030/1                        */
/*                                Internet f491.n343.z1.fidonet.org         */
/*                                                                          */
/*                                                                          */
/* Please feel free to contact us at any time to share your comments about  */
/* our software and/or licensing policies.                                  */
/*                                                                          */
/* Our thanks to Richard Stallman and the Free Software Foundation, Inc.,   */
/* for most of the wording of this License.                                 */
/*                                                                          */
/*--------------------------------------------------------------------------*/

/* Include this file before any other includes or defines! */

#include "includes.h"

#ifndef NO_SIGNALS
void handler (void);
#endif

void main (int argc, char *argv[])
{
    int done;
    char *envptr;
    int mail_only = 0;                            /* if 1, do mail and exit     */
    ADDR baddr;
    long init_timer;

#ifdef MILQ
    _OvrInitEms( 0, 0, 0 );
    _OvrInitExt( 0L, 0L );
#endif


    (void) load_language ();

#ifndef NO_SIGNALS
    if (signal(SIGINT, handler) == SIG_ERR)
       {
       (void) fprintf(stderr, MSG_TXT(M_NO_SIGINT));
       return;
       }
   (void) signal (SIGINT, SIG_IGN);
#endif

   (void) printf (ANNOUNCE);
   (void) printf ("\n(C) Copyright 1987-91, Bit Bucket Software, Co. ALL RIGHTS RESERVED.\n\n");
   (void) printf (MSG_TXT(M_SYSTEM_INITIALIZING));
   init_timer = timerset (200);
   b_initvars ();

   while (--argc)
      {
      ++argv;

      switch (parse (argv[0], DOS_commands))
         {
         case 1:                                /* Noforce    */
            noforce = 1;
            break;

         case 2:                                /* Mail       */
            ++mail_only;
            break;

         case 3:                                /* Share      */
            ++share;
            break;

         case 4:                                /* Dynam      */
            ++redo_dynam;
            break;

         case 5:                                /* Unattended */
            un_attended = 1;
            command_line_un = 1;
            break;

         case 6:                                /* Config     */
            config_name = argv[1];
            --argc;
            ++argv;
            break;

         case 7:                                /* Poll       */
            if (parse_address (argv[1], &baddr))
               {
               doing_poll = 1;
               }
            --argc;
            ++argv;
            break;

         default:                               /* Not there  */
            (void) printf (MSG_TXT(M_UNRECOGNIZED_OPTION), argv[0]);
            exit (1);
         }
      }

   envptr = getenv (PRDCT_PRFX);                 /* get path from environment */
   if ((envptr != NULL)                          /* If there was one, and     */
   && (!dexists (config_name)))                  /* No BINKLEY.CFG locally,   */
      {
      BINKpath = calloc(1, (strlen (envptr) + 2)); /* make room for new */
      (void) strcpy (BINKpath, envptr);          /* use BINKLEY as our path   */
      (void) add_backslash (BINKpath);
      }
   else BINKpath = "";

   read_sched ();
   parse_config ( PRDCT_PRFX ".Evt");
   parse_config (config_name);
   b_defaultvars ();

#ifndef MILQ
   (void) LoadScanList (0,0);                       /* Get default scan list */
#endif

   /* We expect this to fail right away, but in order to keep the copyright
      notice displayed long enough, we check anyway */

   while (!timeup (init_timer))
        ;

   done = 0;

   if (fullscreen)
      b_sbinit ();

   if (mail_only)
      {
      doing_poll = 1;
      baddr = boss_addr;
      }

   if (doing_poll)
      {
      if (baddr.Zone == 0)
         baddr.Zone = alias[0].Zone;
      un_attended = 1;
      opening_banner ();
      mailer_banner ();
      if (fullscreen)
         {
         (void) sprintf (junk, "%s", Full_Addr_Str (&baddr));
         junk[28] = '\0';

         sb_fill (hold_hWnd, ' ', colors.hold);
         SendMessage( hold_hWnd, WM_COMMAND, GD_MODE, 0L );
         SendMessage( hold_hWnd, WM_COMMAND, GD_CLR, 0L );
         sb_move (hold_hWnd, 2, 12);
         sb_puts( hold_Poll, MSG_TXT(M_POLLING_COLON));
         sb_move (hold_hWnd, 4, 16 - strlen (junk) / 2);
         sb_puts( hold_Addr, junk);
         sb_show ();
         }
      set_prior(4);                                    /* Always High */
      if (!CARRIER)
         mdm_hangup ();
      (void) do_mail (&baddr, 1);
      set_prior(2);                                    /* Regular */
      done = 1;
      }
   else if (!un_attended)
      {
      opening_banner ();
      }

   while (!done)
      {
      if (un_attended)
         {
         done = unattended ();
         un_attended = 0;
         }
      else
         {
         done = b_term ();
         un_attended = done ? 0 : 1;
         }
      }         

   b_exitproc ();

   exit (1);
}

#ifndef NO_SIGNALS
void handler(void)           /* Function called at system interrupt */
{

    (void) signal(SIGINT, SIG_IGN); /* Disallow CTRL + C during handler    */

    ctrlc_ctr++;

    (void) signal(SIGINT,handler);     /* This is necessary so that the
                                       ** next CTRL+C interrupt will call
                                       ** "handler", since the DOS 3.x
                                       ** operating system resets the
                                       ** interrupt handler to the
                                       ** system default after the
                                       ** user-defined handler is called
                                       */
}
#endif