📄 vcongui.c
字号:
//
// Virtual Console on MiniGUI.
// Copyright (c) 1999, Wei Yongming (ymwei@263.net).
//
// Some idea and source come from CCE (Console Chinese Environment)
//
/*
** This source is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This software is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** General Public License for more details.
**
** You should have received a copy of the GNU General Public
** License along with this library; if not, write to the Free
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA
*/
// Create date: 1999.09.23
//
// Modify records:
//
// Who When Where For What Status
//-----------------------------------------------------------------------------
//
// TODO:
//
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include <semaphore.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mywindows.h>
#include "resource.h"
#include "defs.h"
#include "vcongui.h"
#include "vc.h"
#include "child.h"
#include "terminal.h"
#include "vt.h"
static HMENU createpmenuabout ()
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"About...";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_ABOUT_THIS;
mii.typedata = (DWORD)"About VC on MiniGUI...";
InsertMenuItem(hmnu, 0, TRUE, &mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_ABOUT;
mii.typedata = (DWORD)"About MiniGUI...";
InsertMenuItem(hmnu, 1, TRUE, &mii);
return hmnu;
}
static HMENU createpmenufile ()
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"File";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_NEW;
mii.typedata = (DWORD)"New";
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_OPEN;
mii.typedata = (DWORD)"Open...";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_SAVE;
mii.typedata = (DWORD)"Save";
InsertMenuItem(hmnu, 2, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_SAVEAS;
mii.typedata = (DWORD)"Save As...";
InsertMenuItem(hmnu, 3, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_CLOSE;
mii.typedata = (DWORD)"Close";
InsertMenuItem(hmnu, 4, TRUE, &mii);
mii.type = MFT_SEPARATOR;
mii.state = 0;
mii.id = 0;
mii.typedata = 0;
InsertMenuItem(hmnu, 5, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_EXIT;
mii.typedata = (DWORD)"Exit";
InsertMenuItem(hmnu, 6, TRUE, &mii);
return hmnu;
}
static HMENU createpmenuedit ()
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"Edit";
hmnu = CreatePopupMenu (&mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_COPY;
mii.typedata = (DWORD)"Copy Screen";
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_PASTE;
mii.typedata = (DWORD)"Paste";
InsertMenuItem(hmnu, 1, TRUE, &mii);
return hmnu;
}
static HMENU createpmenuterminal ()
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"Terminal";
hmnu = CreatePopupMenu (&mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_40X15;
mii.typedata = (DWORD)"40x15 (small)";
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_80X24;
mii.typedata = (DWORD)"80x24 (vt100)";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = MF_CHECKED;
mii.id = IDM_80X25;
mii.typedata = (DWORD)"80x25 (ibmpc)";
InsertMenuItem(hmnu, 2, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_80X40;
mii.typedata = (DWORD)"80x40 (xterm)";
InsertMenuItem(hmnu, 3, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_80X52;
mii.typedata = (DWORD)"80x52 (ibmvga)";
InsertMenuItem(hmnu, 4, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_96X25;
mii.typedata = (DWORD)"96x25 (wide)";
InsertMenuItem(hmnu, 5, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_96X40;
mii.typedata = (DWORD)"96x40 (My favorite)";
InsertMenuItem(hmnu, 6, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_96X52;
mii.typedata = (DWORD)"96x52 (large)";
InsertMenuItem(hmnu, 7, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_CUSTOMIZE;
mii.typedata = (DWORD)"Customize...";
InsertMenuItem(hmnu, 8, TRUE, &mii);
return hmnu;
}
static HMENU createmenu ()
{
HMENU hmnu;
MENUITEMINFO mii;
hmnu = CreateMenu();
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 100;
mii.typedata = (DWORD)"File";
mii.hsubmenu = createpmenufile ();
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 110;
mii.typedata = (DWORD)"Edit";
mii.hsubmenu = createpmenuedit ();
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 120;
mii.typedata = (DWORD)"Terminal";
mii.hsubmenu = createpmenuterminal ();
InsertMenuItem(hmnu, 2, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 130;
mii.typedata = (DWORD)"About";
mii.hsubmenu = createpmenuabout ();
InsertMenuItem(hmnu, 3, TRUE, &mii);
return hmnu;
}
void SetTerminalWindowSize (PCONINFO pConInfo, WPARAM cmd_id)
{
int col, row;
RECT new_win_rc;
struct winsize twinsz;
switch (cmd_id) {
case IDM_40X15:
col = 40;
row = 15;
break;
case IDM_80X24:
col = 80;
row = 24;
break;
case IDM_80X25:
col = 80;
row = 25;
break;
case IDM_80X40:
col = 80;
row = 40;
break;
case IDM_80X52:
col = 80;
row = 52;
break;
case IDM_96X25:
col = 96;
row = 25;
break;
case IDM_96X40:
col = 96;
row = 40;
break;
case IDM_96X52:
col = 96;
row = 52;
break;
case IDM_CUSTOMIZE:
{
char cols [10];
char rows [10];
char* newcols = cols;
char* newrows = rows;
myWINENTRY entries [] = {
{ "New number of columns:", &newcols, 0, 0 },
{ "New number of rows :", &newrows, 0, 0 },
{ NULL, NULL, 0, 0 }
};
myWINBUTTON buttons[] = {
{ "OK", IDOK, BS_DEFPUSHBUTTON },
{ "Cancel", IDCANCEL, 0 },
{ NULL, 0, 0}
};
int result;
sprintf (cols, "%d", pConInfo->cols);
sprintf (rows, "%d", pConInfo->rows);
result = myWinEntries (HWND_DESKTOP,
"New Terminal Window Size",
"Please specify the new terminal window size",
340, 100, FALSE, entries, buttons);
col = atoi (newcols);
row = atoi (newrows);
free (newcols);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -