/
Crimson2/alias/
Crimson2/area.tmp/
Crimson2/area.tmp/AnomalySpaceDock/
Crimson2/area.tmp/AnomalyStation/
Crimson2/area.tmp/AntHill/
Crimson2/area.tmp/ArcticTerrarium/
Crimson2/area.tmp/BuilderCity/
Crimson2/area.tmp/Dungeon/
Crimson2/area.tmp/MiningDock/
Crimson2/area.tmp/PipeSystem/
Crimson2/area.tmp/RattArea/
Crimson2/area.tmp/RobotFactory/
Crimson2/area.tmp/SilverDale/
Crimson2/area.tmp/StarshipFearless/
Crimson2/area.tmp/StationConduits/
Crimson2/area.tmp/TerrariumAlpha/
Crimson2/area.tmp/TerrariumBeta/
Crimson2/area.tmp/TestArea/
Crimson2/area.tmp/Void/
Crimson2/area/
Crimson2/area/AnomalySpaceDock/
Crimson2/area/AnomalyStation/
Crimson2/area/MiningDock/
Crimson2/area/PipeSystem/
Crimson2/area/SilverDale/
Crimson2/area/StationConduits/
Crimson2/area/Void/
Crimson2/board/
Crimson2/clone/
Crimson2/lib/
Crimson2/mole/
Crimson2/mole/mole_src/HELP/
Crimson2/player/
Crimson2/util/
Crimson2/wldedit/
Crimson2/wldedit/res/
// main.c identifier: mn
// ****************************************************************************
// Copyright (C) B. Cameron Lesiuk, 1999. All rights reserved.
// Permission to use/copy this code is granted for non-commercial use only.
// B. Cameron Lesiuk
// Victoria, BC, Canada
// wi961@freenet.victoria.bc.ca
// ****************************************************************************

#include<windows.h>
#include<windowsx.h>
#include<stdio.h>
#include<ctl3d.h>
#include<commdlg.h>
#include"winsock.h"
#include"molem.h"
#include"molerc.h"
#include"main.h"
#include"debug.h"
#include"about.h"
#include"host.h"
#include"moleprot.h"
#include"terminal.h"
#include"edit.h"
#include"areawnd.h"

LRESULT CALLBACK _export mnMainProc(HWND p_hWnd, UINT p_message,
				WPARAM p_wParam, LPARAM p_lParam)
	{
  static char l_buf[200];
  int l_i;

  switch (p_message)
		{
		case WM_SYSCOMMAND:
      switch(p_wParam) /* Process Control Box / Max-Min function */
				{
				case SC_CLOSE:
 					aaWrapup(); /* call wrapup procedure */
					return(0L);
        default:
          break;
				}
      break;
		case WM_COMMAND:
			{
			switch (GET_WM_COMMAND_ID(p_wParam,p_lParam)) /* Process menu selection event */
				{
				case CM_MAINFILECONNECT:
          hoConnectHost();
          mnMenuMainUpdate();
          return(0L);
				case CM_MAINFILEDISCONNECT:
          hoDisconnectHost(FALSE);
          mnMenuMainUpdate();
          return(0L);
				case CM_MAINFILEEXIT:
					aaWrapup();
					return(0L);
        case CM_MAINVIEWTERMINAL:
          if (trIsTerminalVisible())
            trHideTerminal();
          else
            trShowTerminal();
          break;
        case CM_MAINVIEWAREALIST:
          if (awIsAreaWindowVisible())
            awHideAreaWindow();
          else
            awShowAreaWindow();
          break;
        case CM_MAINHELPCONTENTS:
          WinHelp(g_aahWnd,g_aaHelpFile,HELP_CONTENTS,0L);
          return 0L;
        case CM_MAINHELPSEARCH:
          WinHelp(g_aahWnd,g_aaHelpFile,HELP_FORCEFILE,0L);
          WinHelp(g_aahWnd,g_aaHelpFile,HELP_COMMAND,(DWORD)"Search()");
          return 0L;
        case CM_MAINHELPHOWTOUSE:
          WinHelp(g_aahWnd,NULL,HELP_HELPONHELP,0L);
          return 0L;
        case CM_MAINHELPABOUT:
          DialogBox(g_aahInst,MAKEINTRESOURCE(DIALOG_ABOUT),g_aahWnd,abDialogAboutProc);
          return(0L);
				default:
					break;
				}
			}
			break;
    case WM_SYSCOLORCHANGE:
      Ctl3dColorChange();
			break;
    case WM_USER_TERMINAL_INPUT:
      do {
        l_i=trReadTerminalInput(l_buf,200);
        if (l_i) {
//        dbPrint("This is about to be sent out:");
//        dbPrintNum(l_buf,l_i);
          mpSendBufferAppend(l_buf,l_i);
          mpMoleSendData();
        }
      } while(l_i);
      return(0L);
    case WM_USER_HOST_SOCKET:
//      dbPrint("Check socket");
      if (g_hoConnectedToHost) /* we only go async AFTER we've got a connection */
        hoSocketHandler(p_wParam, p_lParam);
      return(0L);
    case WM_USER_EDITERROR:
      edEditError(p_wParam,p_lParam);
      return (0L);
    case WM_TIMER:
      /* check up on our socket and our request Q */
//      dbPrint("Timer Tick");
      if (g_hoConnectedToHost)
        mpCheckTimeout();
      return(0L);
		default:
			if (p_message==g_aaCommDlgHelp) // we'll get this from our file dialog boxes boxes.
				{
				WinHelp(g_aahWnd,g_aaHelpFile,HELP_CONTENTS,0L);
				return 0L;
				}
			break;
		}
	return (DefWindowProc(p_hWnd, p_message, p_wParam, p_lParam));
	}

/* MENU COMMAND LOCATIONS - if you alter the menu structure, CHANGE THESE
 * to reflect the changes */
#define MN_MENU_MAIN_POS_FILE 0
//#define MN_MENU_MAIN_POS_EDIT 1
#define MN_MENU_MAIN_POS_VIEW 1
#define MN_MENU_MAIN_POS_HELP 2
void mnMenuMainUpdate() {
	HMENU l_menu,l_submenu;

  if (!g_aahWnd)
    return;

  l_menu=GetMenu(g_aahWnd);

  /* File menu */
	l_submenu=GetSubMenu(l_menu,MN_MENU_MAIN_POS_FILE);
  if (g_hoConnectedToHost) {
    EnableMenuItem(l_submenu,CM_MAINFILEDISCONNECT,
      MF_BYCOMMAND|MF_ENABLED);
  } else {
    EnableMenuItem(l_submenu,CM_MAINFILEDISCONNECT,
      MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
  }

  /* view menu */
	l_submenu=GetSubMenu(l_menu,MN_MENU_MAIN_POS_VIEW);
  if (trIsTerminalVisible()) {
    CheckMenuItem(l_submenu,CM_MAINVIEWTERMINAL,
      MF_BYCOMMAND|MF_CHECKED);
  } else {
    CheckMenuItem(l_submenu,CM_MAINVIEWTERMINAL,
      MF_BYCOMMAND|MF_UNCHECKED);
  }
  if (awIsAreaWindowVisible()) {
    CheckMenuItem(l_submenu,CM_MAINVIEWAREALIST,
      MF_BYCOMMAND|MF_CHECKED);
  } else {
    CheckMenuItem(l_submenu,CM_MAINVIEWAREALIST,
      MF_BYCOMMAND|MF_UNCHECKED);
  }


}