B_SBINIT.C

14.5 KB 4c15dc1715cd8e13…
/*--------------------------------------------------------------------------*/
/*                                                                          */
/*                                                                          */
/*      ------------         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 Initial Fullscreen Setup                    */
/*                                                                          */
/*                                                                          */
/*    For complete  details  of the licensing restrictions, please refer    */
/*    to the License  agreement,  which  is published in its entirety in    */
/*    the MAKEFILE and BT.C, and also contained in the file LICENSE.250.    */
/*                                                                          */
/*    USE  OF THIS FILE IS SUBJECT TO THE  RESTRICTIONS CONTAINED IN THE    */
/*    BINKLEYTERM  LICENSING  AGREEMENT.  IF YOU DO NOT FIND THE TEXT OF    */
/*    THIS  AGREEMENT IN ANY OF THE  AFOREMENTIONED FILES,  OR IF YOU DO    */
/*    NOT HAVE THESE FILES,  YOU  SHOULD  IMMEDIATELY CONTACT BIT BUCKET    */
/*    SOFTWARE CO.  AT ONE OF THE  ADDRESSES  LISTED BELOW.  IN NO EVENT    */
/*    SHOULD YOU  PROCEED TO USE THIS FILE  WITHOUT HAVING  ACCEPTED THE    */
/*    TERMS  OF  THE  BINKLEYTERM  LICENSING  AGREEMENT,  OR  SUCH OTHER    */
/*    AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO.      */
/*                                                                          */
/*                                                                          */
/* 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.                                  */
/*                                                                          */
/*--------------------------------------------------------------------------*/

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

#include "includes.h"

#ifndef MILQ
#define WHOLEWIN
#endif

#ifdef MILQ
#define MENU_ENABLED
#if defined (MENU_ENABLED) || defined (MILQ)
#define RESOURCE_ENABLED
#endif
#endif

extern VIOMODEINFO vfos_mode;
void MilqMassageWnd( REGIONP Win, int Color );

#ifdef MILQ
int PASCAL color_enum( HWND hWnd,
                       DWORD lParam ) {
  WinSetAttr( hWnd, (int)lParam, FALSE );
  return TRUE;
  }

HWND MilqDlgCreate( REGIONP  Win,
                    char    *Nm,
                    DLGPROC *dlgfunc,
                    int      Color ) {
  Win->hWnd = CreateDialog( MilqueRsrc, Nm, MilqueMailerWnd, dlgfunc );
  MilqMassageWnd( Win, Color );
  return Win->hWnd;
  }

void MilqMassageWnd( REGIONP Win,
                     int     Color ) {
  int                   Bgd = WHITE;
  HWND                  hMenu;

  hMenu = GetSystemMenu( Win->hWnd, FALSE );
  DeleteMenu( hMenu, SC_CLOSE, MF_BYCOMMAND );
  AppendMenu( hMenu, MF_ENABLED, SC_SIZE, "~Size" );
  GetWindowRect( Win->hWnd, &Win->MilqSave.OrgRect );
  if ( !UseWinColors ) {
    if ( Color ) {
      WinSetAttr( Win->hWnd, Color, FALSE );
      EnumChildWindows( Win->hWnd, color_enum, (long)Color );
      }                                /* end of if ( Color )         */
    }                                  /* end of if ( !UseWinColors ) */
  SetFocus( Win->hWnd );
  }
#endif

void b_sbinit () {
#ifdef MILQ
   char                 Buf[81];
#endif

   register int         r;
   char                *savep;

#ifdef MILQ
   KbMapSet( &UnattendedKeyFncHdr );
   WinInit();
   MDIInitialize();
   MilqueClassRegister();
   WinUseSysColors (MilqueRootWnd, TRUE);
   OrgVidInfo.VidMode = VidGetMode();
   WinUseMonoMap( TRUE );

   MilqueRsrc = OpenResourceFile((PSTR) PRDCT_PRFX);

   /* Fetch the ega status and toggle if needed */

   UseWinColors = GetPrivateProfileInt( "Milque", "UseWinColors", 0, "Milque.Ini" );
   node_Pwd_Enable = GetPrivateProfileInt( "Milque", "PWD", 0, "Milque.Ini" );
#ifdef NEW_BIG_SCREEN
   switch ( VidQueryAdapterType() ) {
     case CGA:
     case MDA:
       break;
     default:
       if ( GetPrivateProfileInt( "Milque", "EGA", 0, "Milque.Ini" ) ) {
         ToggleEGA();
         MilqueVidInfo.EGAState = TRUE;
         }
       break;
     }
#endif

   if ( !( MilqueMailerAccel = LoadAccelerators( MilqueRsrc,
                                                 (LPSTR)"MailerAccel" ) ) ) {
     MessageBox( MilqueRootWnd,
                 (PSTR)"Cannot load Mailer Accelerators",
                 (PSTR)"Fatal Error",
                 MB_OK );
     exit(1);
     }
   MilqueActvAccel = MilqueMailerAccel;
   if ( !( MilqueTrmnlAccel = LoadAccelerators( MilqueRsrc,
                                                (LPSTR)"TrmnlAccel" ) ) ) {
     MessageBox( MilqueRootWnd,
                 (PSTR)"Cannot load Terminal Accelerators",
                 (PSTR)"Fatal Error",
                 MB_OK );
     exit(1);
     }
   if ( !( MilqueMailerMnu = LoadMenu( MilqueRsrc, (LPSTR)"MailerMenu" ) ) ) {
     MessageBox( MilqueRootWnd,
                 (PSTR)"Cannot load the menu",
                 (PSTR)"Fatal Error",
                 MB_OK);
     exit(1);
     }

   randomize();
   MilqueMailerWnd = CreateWindow( (PSTR)"Normal",       /* class */
                                   (PSTR)"BTMewel",      /* title */
                                   WIN_HAS_BORDER   |
                                     WIN_MINMAXBOX  |
                                     WIN_MOVEBOX    |
                                     WIN_SIZEBOX    |
                                     WIN_SYSMENU    |
                                     WIN_TITLEBAR   |
                                     WS_CLIP        |
                                     WS_MAXIMIZEBOX |
                                     WS_MINIMIZEBOX,
                                   0,0,            /* x,y,width,height */
                                   GetSystemMetrics(SM_CXSCREEN),
                                   GetSystemMetrics(SM_CYSCREEN),
                                   MilqueRootWnd,   /* hParent */
                                   MilqueMailerMnu,  /* hMenu */
                                   0,              /* hInst */
                                   0L);           /* lpParam */
   MilqueActvWnd = MilqueMailerWnd;
   WinSetWinProc( MilqueMailerWnd, MailerWndPrc );
#endif

   savep = calloc (1, 4096);
   for (r = 0; r < 132; r++)
      {
      blanks[r * 2] = ' ';
      blanks[r * 2 + 1] = 7;
      }

   vfossil_init ();
   if (vfos_mode.col < 80)
      vfos_mode.col = 80;
   if (vfos_mode.row < 23)
      vfos_mode.row = 23;

#ifndef MILQ
   SB_ROWS = vfos_mode.row - 1;
   SB_COLS = vfos_mode.col;
#else
   SB_ROWS = GetSystemMetrics( SM_CYSCREEN ) - 1;
   SB_COLS = GetSystemMetrics( SM_CXSCREEN );
#endif

   SB_COLS_M_1 = SB_COLS - 1;
   SB_ROWS_M_1 = SB_ROWS - 1;
   SB_ROWS_M_2 = SB_ROWS - 2;
   SB_ROW_STATUS = SB_ROWS -  15;

   screen_clear ();
   sb_init ();
   free (savep);

   wholewin = (REGIONP) sb_new (0, 0, SB_ROWS, SB_COLS);
   settingswin = (REGIONP) sb_new (1, 1, 7, 22);
   historywin = (REGIONP) sb_new (1, 23, 7, 23);
   holdwin = (REGIONP) sb_new (1, 46, 7, SB_COLS - 47);
   callwin = (REGIONP) sb_new  (8, 1, SB_ROWS -  13, SB_COLS - 2);
   filewin = (REGIONP) sb_new (SB_ROWS - 5, 1, 4, SB_COLS - 2);

#ifdef MILQ
   nodewin = (REGIONP) sb_new (1, 23, 7, 23);
   CurWinSet( callwin );
   MilqDlgCreate( callwin, "Call", CallDlgPrc, colors.call );
   MilqDlgCreate( filewin, "File", FileDlgPrc, colors.file );
   MilqDlgCreate( historywin, "History", HistoryDlgPrc, colors.history );
                                       /* These should be message sends to */
                                       /* the dialog box rather than functions */
   MilqDlgCreate( holdwin, "Hold", HoldDlgPrc, colors.hold );
   MilqDlgCreate( nodewin, "NodeDtl", NodeDtlDlgPrc, colors.settings );
   MilqDlgCreate( settingswin, "Settings", SettingsDlgPrc, colors.settings );
   NextWnd = history_hWnd;
#endif

   sb_fill (wholewin, ' ', colors.background);
   sb_fill (settingswin, ' ', colors.settings);
   sb_fill (historywin, ' ', colors.history);
   sb_fill (holdwin, ' ', colors.hold);
   sb_fill (callwin, ' ', colors.call);
   sb_fill (filewin, ' ', colors.file);

   sb_box (settingswin, boxtype, colors.settings);
   sb_box (historywin, boxtype, colors.history);
   sb_box (holdwin, boxtype, colors.hold);
   sb_box (callwin, boxtype, colors.call);
   sb_box (filewin, boxtype, colors.file);

   sb_caption (settingswin, MSG_TXT(M_CURRENT_SETTINGS));
   sb_caption (historywin, MSG_TXT(M_TODAY_GLANCE));
   sb_caption (holdwin, MSG_TXT(M_PENDING_OUTBOUND));
   sb_caption (callwin, MSG_TXT(M_RECENT_ACTIVITY));
   sb_caption (filewin, MSG_TXT(M_TRANSFER_STATUS));

#ifdef MILQ
/* These are to set up the references to the specific controls for each
 * data item displayed on the screen. Rather than computing and recomputing
 * these buggers, we compute 'em once. God help us when we begin closing
 * windows.
 */

  history_BBS     = GetDlgItem( history_hWnd,  GD_BBS );
  history_Cost    = GetDlgItem( history_hWnd,  GD_COST );
  history_Fl      = GetDlgItem( history_hWnd,  GD_FL );
  history_Last    = GetDlgItem( history_hWnd,  GD_LAST );
  history_Out     = GetDlgItem( history_hWnd,  GD_OUT );
  hold_Addr       = GetDlgItem( hold_hWnd,     GD_ADDR );
  hold_Hdr        = GetDlgItem( hold_hWnd,     GD_HDR );
  hold_Init       = GetDlgItem( hold_hWnd,     GD_INIT );
  hold_Poll       = GetDlgItem( hold_hWnd,     GD_POLL );
/*
 * Thinking about eliminating these. Actually, this whole approach sort
 * of sucks.
 */
  node_Addr       = GetDlgItem( node_hWnd,     GD_ADDR );
  node_Baud       = GetDlgItem( node_hWnd,     GD_BAUD );
  node_Elapsed    = GetDlgItem( node_hWnd,     GD_DUR );
  node_Flags16    = GetDlgItem( node_hWnd,     GD_FLG16 );
  node_Hub        = GetDlgItem( node_hWnd,     GD_HUB );
  node_Loc        = GetDlgItem( node_hWnd,     GD_LOC );
  node_Mdm        = GetDlgItem( node_hWnd,     GD_MDM );
  node_Nm         = GetDlgItem( node_hWnd,     GD_NM );
  node_Phn        = GetDlgItem( node_hWnd,     GD_PHN );
  node_Pwd        = GetDlgItem( node_hWnd,     GD_PWD );
  node_Rate       = GetDlgItem( node_hWnd,     GD_RATE );
  node_Sysop      = GetDlgItem( node_hWnd,     GD_SYSOP );
/*
 * These we do often enough and in time critical enough situations that we
 * will continue to do it this way.
 */
  settings_DtTm   = GetDlgItem( settings_hWnd, GD_DTTM );
  settings_Evt    = GetDlgItem( settings_hWnd, GD_EVT );
  settings_Free   = GetDlgItem( settings_hWnd, GD_LST );
  settings_MTask  = GetDlgItem( settings_hWnd, GD_MTASK );
  settings_Port   = GetDlgItem( settings_hWnd, GD_PORT );
  settings_Status = GetDlgItem( settings_hWnd, GD_STATUS );
#endif

   FlLnModeSet( FILE_LN_1, 0 );
   FlLnModeSet( FILE_LN_2, 0 );
   SendMessage( hold_hWnd, WM_COMMAND, GD_MODE, 0L );
   SendMessage( hold_hWnd, WM_COMMAND, GD_CLR, 0L );

   sb_move (hold_hWnd, 3, 7);
   sb_puts (hold_Init, MSG_TXT(M_INITIALIZING_SYSTEM));

#ifdef WHOLEWIN
   sb_move (wholewin, 0, 1);
   (void) sprintf (junk, MSG_TXT(M_NODE_COLON), Full_Addr_Str (&my_addr));
   sb_puts (wholewin, junk);
   sb_move (wholewin, 0, SB_COLS - 1 - (int) strlen (system_name));
   sb_puts (wholewin, system_name);
#endif

#ifdef MILQ
#ifndef WHOLEWIN
   (void) sprintf (Buf, MSG_TXT(M_NODE_COLON), Full_Addr_Str (&my_addr));
   SetWindowText (MilqueMailerWnd, Buf);
#endif
#endif

   bottom_line ();

#ifndef MILQ
   sb_move (settingswin, SET_EVNT_ROW, 2);
   sb_puts (settingswin, MSG_TXT(M_EVENT_COLON));
   sb_move (settingswin, SET_PORT_ROW, 2);
   sb_puts (settingswin, MSG_TXT(M_PORT_COLON));
   sb_move (settingswin, SET_STAT_ROW, 2);
   sb_puts (settingswin, MSG_TXT(M_STATUS_INIT));
#endif

   do_today ();

#ifndef MILQ
   settingswin->sr0 = settingswin->r0 + 1;
   settingswin->sr1 = settingswin->r1 - 1;
   settingswin->sc0 = settingswin->c0 + 1;
   settingswin->sc1 = settingswin->c1 - 1;

   historywin->sr0 = historywin->r0 + 1;
   historywin->sr1 = historywin->r1 - 1;
   historywin->sc0 = historywin->c0 + 1;
   historywin->sc1 = historywin->c1 - 1;

   holdwin->sr0 = holdwin->r0 + 1;
   holdwin->sr1 = holdwin->r1 - 1;
   holdwin->sc0 = holdwin->c0 + 1;
   holdwin->sc1 = holdwin->c1 - 1;

   callwin->sr0 = callwin->r0 + 1;
   callwin->sr1 = callwin->r1 - 1;
   callwin->sc0 = callwin->c0 + 1;
   callwin->sc1 = callwin->c1 - 1;

   filewin->sr0 = filewin->r0 + 1;
   filewin->sr1 = filewin->r1 - 1;
   filewin->sc0 = filewin->c0 + 1;
   filewin->sc1 = filewin->c1 - 1;
#endif

#ifdef MILQ
   MilqueScrLoad();

   if ( MilqueVidInfo.EGAState ) {
     switch ( VidQueryAdapterType() ) {
       case CGA:
       case MDA:
         break;
       default:
         if ( 25 == GetSystemMetrics( SM_CYSCREEN ) ) {
           ToggleEGA();
           }
         break;
       }
     }

   MilqueMailerActvWnd = GetFocus();
#endif
}