⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 termdef.c

📁 dtelent是开源的开发项目
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
  Customizable definitions for terminal type variations.
  The definitions are stored in an INI-file called 'DTELNET.SET'
  and can be edited from within dtelnet.

  -- Mark Melvin
*/
#include <windows.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "dialog.h"
#include "dtelnet.h"
#include "emul.h"
#include "term.h"
#include "termdef.h"
#include "utils.h"

extern EmulNames emuls;


static char termsetFileName[_MAX_PATH + 1];	/* INI file to use */

/* Determine the name of the application .INI file
 */
static void makeTermSetFileName(void)
{
    getExePath(telnetGetInstance(), termsetFileName);
    if (strlen(termsetFileName) + 13 < _MAX_PATH)
	strcat(termsetFileName, "dtelnet.set");
    else
	strcpy(termsetFileName, "dtelnet.set");
}


static BOOL haveTerminalDefDlg;

static char *mescape (const char *from)
{
    static char esc[32];

    escape (from, strlen (from), esc, sizeof (esc));
    return esc;
}

static void munescape (const char *from, char *to)
{
    unescape (from, strlen (from), to, KEYCODE_LEN);
}

/* Show the Emul structure onto the dialog items */
void terminalDefinitionDlgShow(HWND dlg, Emul editEmul)
{
    char nrFkey[10];
    int escStyle;

    SetDlgItemText(dlg, IDC_KPGUP, mescape(editEmul.keyPageUp));
    SetDlgItemText(dlg, IDC_KPGDN, mescape(editEmul.keyPageDown));
    SetDlgItemText(dlg, IDC_KHOME, mescape(editEmul.keyHome));
    SetDlgItemText(dlg, IDC_KEND,  mescape(editEmul.keyEnd));
    SetDlgItemText(dlg, IDC_KINS,  mescape(editEmul.keyInsert));
    SetDlgItemText(dlg, IDC_KDEL,  mescape(editEmul.keyDelete));
    SetDlgItemText(dlg, IDC_KBS,   mescape(editEmul.keyBackSpace));
    SetDlgItemText(dlg, IDC_KABS,  mescape(editEmul.keyAltBackSpace));
    SetDlgItemText(dlg, IDC_KBTAB, mescape(editEmul.keyBacktab));

    sprintf(nrFkey, "%d", editEmul.nMaxFkey);
    SetDlgItemText(dlg, IDC_NFFUNCKEYS, nrFkey);

    SetDlgItemText(dlg, IDC_KEYF1, mescape(editEmul.keyF[0]));
    SetDlgItemText(dlg, IDC_KEYF2, mescape(editEmul.keyF[1]));
    SetDlgItemText(dlg, IDC_KEYF3, mescape(editEmul.keyF[2]));
    SetDlgItemText(dlg, IDC_KEYF4, mescape(editEmul.keyF[3]));
    SetDlgItemText(dlg, IDC_KEYF5, mescape(editEmul.keyF[4]));
    SetDlgItemText(dlg, IDC_KEYF6, mescape(editEmul.keyF[5]));
    SetDlgItemText(dlg, IDC_KEYF7, mescape(editEmul.keyF[6]));
    SetDlgItemText(dlg, IDC_KEYF8, mescape(editEmul.keyF[7]));
    SetDlgItemText(dlg, IDC_KEYF9, mescape(editEmul.keyF[8]));
    SetDlgItemText(dlg, IDC_KEYF10, mescape(editEmul.keyF[9]));
    SetDlgItemText(dlg, IDC_KEYF11, mescape(editEmul.keyF[10]));
    SetDlgItemText(dlg, IDC_KEYF12, mescape(editEmul.keyF[11]));
    SetDlgItemText(dlg, IDC_KEYF13, mescape(editEmul.keyF[12]));
    SetDlgItemText(dlg, IDC_KEYF14, mescape(editEmul.keyF[13]));
    SetDlgItemText(dlg, IDC_KEYF15, mescape(editEmul.keyF[14]));
    SetDlgItemText(dlg, IDC_KEYF16, mescape(editEmul.keyF[15]));
    SetDlgItemText(dlg, IDC_KEYF17, mescape(editEmul.keyF[16]));
    SetDlgItemText(dlg, IDC_KEYF18, mescape(editEmul.keyF[17]));
    SetDlgItemText(dlg, IDC_KEYF19, mescape(editEmul.keyF[18]));
    SetDlgItemText(dlg, IDC_KEYF20, mescape(editEmul.keyF[19]));

    CheckDlgButton(dlg, IDC_CKMOUSE, (editEmul.flags & ETF_MOUSE_EVENT)? 1 : 0);

    escStyle = editEmul.flags & ETF_ESC_PARO;
    CheckDlgButton(dlg, IDC_CKPARO, (escStyle ? 1 : 0));
    if (escStyle)
    {
        CheckRadioButton(dlg, IDC_RPARO_VT320, IDC_RPARO_LINUX,
            ((escStyle==ETF_ESC_PARO_VT320)?IDC_RPARO_VT320:IDC_RPARO_LINUX));
    }
    EnableWindow(GetDlgItem(dlg, IDC_RPARO_LINUX), escStyle);
    EnableWindow(GetDlgItem(dlg, IDC_RPARO_VT320), escStyle);
}

/* Save the (modified) dialog items into Emul */
void terminalDefinitionDlgSave(HWND dlg, Emul *editEmul)
{
    char fkey[KEYCODE_LEN];

#define GETKEYCODE(dlgitemid,keyvar) \
GetDlgItemText(dlg, dlgitemid, fkey, KEYCODE_LEN); munescape(fkey, keyvar);

    GETKEYCODE(IDC_KPGUP, editEmul->keyPageUp)
    GETKEYCODE(IDC_KPGDN, editEmul->keyPageDown)
    GETKEYCODE(IDC_KHOME, editEmul->keyHome)
    GETKEYCODE(IDC_KEND, editEmul->keyEnd)
    GETKEYCODE(IDC_KINS, editEmul->keyInsert)
    GETKEYCODE(IDC_KDEL, editEmul->keyDelete)
    GETKEYCODE(IDC_KBS, editEmul->keyBackSpace)
    GETKEYCODE(IDC_KABS, editEmul->keyAltBackSpace)
    GETKEYCODE(IDC_KBTAB, editEmul->keyBacktab)

    editEmul->nMaxFkey = GetDlgItemInt(dlg, IDC_NFFUNCKEYS, NULL, FALSE);

    GETKEYCODE(IDC_KEYF1, editEmul->keyF[0])
    GETKEYCODE(IDC_KEYF2, editEmul->keyF[1])
    GETKEYCODE(IDC_KEYF3, editEmul->keyF[2])
    GETKEYCODE(IDC_KEYF4, editEmul->keyF[3])
    GETKEYCODE(IDC_KEYF5, editEmul->keyF[4])
    GETKEYCODE(IDC_KEYF6, editEmul->keyF[5])
    GETKEYCODE(IDC_KEYF7, editEmul->keyF[6])
    GETKEYCODE(IDC_KEYF8, editEmul->keyF[7])
    GETKEYCODE(IDC_KEYF9, editEmul->keyF[8])
    GETKEYCODE(IDC_KEYF10, editEmul->keyF[9])
    GETKEYCODE(IDC_KEYF11, editEmul->keyF[10])
    GETKEYCODE(IDC_KEYF12, editEmul->keyF[11])
    GETKEYCODE(IDC_KEYF13, editEmul->keyF[12])
    GETKEYCODE(IDC_KEYF14, editEmul->keyF[13])
    GETKEYCODE(IDC_KEYF15, editEmul->keyF[14])
    GETKEYCODE(IDC_KEYF16, editEmul->keyF[15])
    GETKEYCODE(IDC_KEYF17, editEmul->keyF[16])
    GETKEYCODE(IDC_KEYF18, editEmul->keyF[17])
    GETKEYCODE(IDC_KEYF19, editEmul->keyF[18])
    GETKEYCODE(IDC_KEYF20, editEmul->keyF[19])

    editEmul->flags = 0;
    if(IsDlgButtonChecked(dlg, IDC_CKMOUSE)){
	editEmul->flags |= ETF_MOUSE_EVENT;
    }
    if(IsDlgButtonChecked(dlg, IDC_CKPARO)){
	if (IsDlgButtonChecked(dlg, IDC_RPARO_LINUX)) {
            editEmul->flags |= ETF_ESC_PARO_LINUX;
        }
        else if (IsDlgButtonChecked(dlg, IDC_RPARO_VT320)) {
            editEmul->flags |= ETF_ESC_PARO_VT320;
        }
    }
}

void terminalDefinitionDlgEnableEdit(HWND dlg, BOOL isEnabled)
{
    EnableWindow(GetDlgItem(dlg, IDC_KPGUP), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KPGDN), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KHOME), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEND), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KINS), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KDEL), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KBS), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KABS), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KBTAB), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_CKMOUSE), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_CKPARO), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_RPARO_VT320), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_RPARO_LINUX), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_NFFUNCKEYS), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF1), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF2), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF3), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF4), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF5), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF6), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF7), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF8), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF9), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF10), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF11), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF12), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF13), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF14), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF15), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF16), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF17), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF18), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF19), isEnabled);
    EnableWindow(GetDlgItem(dlg, IDC_KEYF20), isEnabled);
}

BOOL CALLBACK termnameDlgProc(HWND dlg,
			   UINT message, WPARAM wparam, LPARAM lparam)
{
    static char* name;
    switch (message){
    case WM_INITDIALOG:
        name = (char*)lparam;
	return TRUE;
    case WM_COMMAND:
        switch LOWORD(wparam){
        case IDOK:
            GetDlgItemText(dlg, IDC_TERMNAME, name, TERM_NAME_LEN);
            EndDialog(dlg, IDOK);
            break;
	case IDCANCEL:
            EndDialog(dlg, IDCANCEL);
        }
        return TRUE;
    }
    return FALSE;
}

BOOL CALLBACK terminalDefinitionDlgProc(HWND dlg,
			   UINT message, WPARAM wparam, LPARAM lparam)
{
    Emul editEmul;
    unsigned int idx;
    static char name[TERM_NAME_LEN];
    static BOOL editing;

    switch (message) {
    case WM_INITDIALOG:
	/* Flag that we have created the dialog, and register the
	 * dialog window handle with the dialog handling code.
	 */
	haveTerminalDefDlg = TRUE;
	dialogRegister(dlg);

        telnetEnumTermProfiles(&emuls);
	for (idx = 0; idx<emuls.num; idx++)
        {
	    SendDlgItemMessage(dlg, IDC_COMBOBOX1, CB_ADDSTRING, 0,
			      (LPARAM)emuls.names[idx]);
	}
        SetDlgItemText(dlg, IDC_BUTTON1, "Add New");
        EnableWindow(GetDlgItem(dlg, IDC_BUTTON2), FALSE);
        terminalDefinitionDlgEnableEdit(dlg, FALSE);
	return TRUE;

    case WM_COMMAND:
	switch (LOWORD (wparam)) {
        case IDC_COMBOBOX1:
            /* When user select a terminal name, load definition
               and update the dialog entries accordingly.
             */
#ifdef WIN32
	    if (HIWORD(wparam) != CBN_SELCHANGE)
		break;
#else
	    if (HIWORD(lparam) != CBN_SELCHANGE)
		break;
#endif
            GetDlgItemText(dlg, IDC_COMBOBOX1, name, sizeof(name));
            if (strlen(name)!=0)
            {
            	telnetGetTermProfile(&editEmul, name);
                terminalDefinitionDlgShow(dlg, editEmul);
                SetDlgItemText(dlg, IDC_BUTTON1, "Modify");
	    }

            break;
        case IDC_CKPARO:
            /* If checked, the radiobutton linux or vt320 becomes
               available, otherwise disabled.
             */
#ifdef WIN32
	    if (HIWORD(wparam) != BN_CLICKED)
		break;
#else
	    if (HIWORD(lparam) != BN_CLICKED)
		break;
#endif
            if (IsWindowEnabled(GetDlgItem(dlg, IDC_CKPARO)) &&
                IsDlgButtonChecked(dlg, IDC_CKPARO))
            {
                EnableWindow(GetDlgItem(dlg, IDC_RPARO_LINUX), TRUE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -