Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

290 lines
5.0 KiB

/* File: D:\WACKER\emu\ansi.c (Created: 08-Dec-1993)
*
* Copyright 1994 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* $Revision: 2 $
* $Date: 12/20/00 5:28p $
*/
#include <windows.h>
#pragma hdrstop
#include <tdll\stdtyp.h>
#include <tdll\chars.h>
#include <tdll\session.h>
#include <tdll\mc.h>
#include <tdll\assert.h>
#include "emu.h"
#include "emu.hh"
#include "ansi.hh"
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* ansi_setmode
*
* DESCRIPTION:
* Sets a mode for ANSI emulator
*
* ARGUMENTS:
* none
*
* RETURNS:
* nothing
*/
void ansi_setmode(const HHEMU hhEmu)
{
int mode_id, i;
for (i = 0; i <= hhEmu->selector_cnt; i++)
{
mode_id = hhEmu->selector[i];
switch (mode_id)
{
case 0x02:
break;
case 0x04:
break;
case 0x07:
break;
case 0x10:
break;
case 0x12:
break;
case 0x18:
break;
case 0x19:
break;
case 0x20:
break;
case 0xF1:
break;
case 0xF2:
break;
case 0xF3:
break;
case 0xF4:
break;
case 0xF5:
break;
case 0xF6:
case 0xD7:
case 0xF7:
hhEmu->mode_AWM = SET;
break;
case 0xF8:
/* select auto repeat mode */
break;
case 0xF18:
break;
case 0xF19:
break;
default:
commanderror(hhEmu);
break;
}
}
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* ansi_resetmode
*
* DESCRIPTION:
* Resets a mode for the ANSI emulator.
*
* ARGUMENTS:
* none
*
* RETURNS:
* nothing
*/
void ansi_resetmode(const HHEMU hhEmu)
{
int mode_id, i;
for (i = 0; i <= hhEmu->selector_cnt; i++)
{
mode_id = hhEmu->selector[i];
switch (mode_id)
{
case 0x02:
break;
case 0x04:
break;
case 0x07:
break;
case 0x10:
break;
case 0x12:
break;
case 0x18:
break;
case 0x19:
break;
case 0x20:
break;
case 0xF1:
break;
case 0xF2:
break;
case 0xF3:
break;
case 0xF4:
break;
case 0xF5:
break;
case 0xF6:
case 0xD7:
case 0xF7:
hhEmu->mode_AWM = RESET; break;
case 0xF8:
/* select auto repeat mode */
break;
case 0xF18:
break;
case 0xF19:
break;
default:
commanderror(hhEmu); break;
}
}
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* ansi_savecursor
*
* DESCRIPTION:
* Saves the current cursor postion
*
* ARGUMENTS:
* none
*
* RETURNS:
* nothing
*/
void ansi_savecursor(const HHEMU hhEmu)
{
const PSTANSIPRIVATE pstPRI = (PSTANSIPRIVATE)hhEmu->pvPrivate;
// Save or restor the cursor position.
//
if (hhEmu->emu_code == ETEXT('s'))
(*hhEmu->emu_getcurpos)
(hhEmu, &pstPRI->iSavedRow, &pstPRI->iSavedColumn);
else
(*hhEmu->emu_setcurpos)
(hhEmu, pstPRI->iSavedRow, pstPRI->iSavedColumn);
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* ansi_kbdin
*
* DESCRIPTION:
* Processes local keyboard keys for the ANSI emulator.
*
* ARGUMENTS:
* key -- key to process
*
* RETURNS:
* nothing
*/
int ansi_kbdin(const HHEMU hhEmu, int key, const int fTest)
{
int index;
/* -------------- Check Backspace & Delete keys ------------- */
if (hhEmu->stUserSettings.fReverseDelBk && ((key == VK_BACKSPACE) ||
(key == DELETE_KEY) || (key == DELETE_KEY_EXT)))
{
key = (key == VK_BACKSPACE) ? DELETE_KEY : VK_BACKSPACE;
}
if (hhEmu->stUserSettings.nTermKeys == EMU_KEYS_SCAN)
{
if ((index = emuKbdKeyLookup(hhEmu, key, &hhEmu->stEmuKeyTbl2)) != -1)
{
if (!fTest)
emuSendKeyString(hhEmu, index, &hhEmu->stEmuKeyTbl2);
}
else
{
index = std_kbdin(hhEmu, key, fTest);
}
}
else if ((index = emuKbdKeyLookup(hhEmu, key, &hhEmu->stEmuKeyTbl)) != -1)
{
if (!fTest)
emuSendKeyString(hhEmu, index, &hhEmu->stEmuKeyTbl);
}
else
{
index = std_kbdin(hhEmu, key, fTest);
}
return index;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* FUNCTION:
* DoorwayMode
*
* DESCRIPTION:
*
* ARGUMENTS:
*
* RETURNS:
*
*/
void DoorwayMode(const HHEMU hhEmu)
{
static INT iOldUseTermKeys;
ECHAR ccode = hhEmu->emu_code;
if (hhEmu->num_param[hhEmu->num_param_cnt] != 255)
return;
if (ccode == ETEXT('h'))
{
iOldUseTermKeys = hhEmu->stUserSettings.nTermKeys;
hhEmu->stUserSettings.nTermKeys = EMU_KEYS_SCAN;
}
else if (ccode == ETEXT('l'))
{
hhEmu->stUserSettings.nTermKeys = iOldUseTermKeys;
}
NotifyClient(hhEmu->hSession, EVENT_EMU_SETTINGS, 0);
return;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* FUNCTION:
* emuAnsiUnload
*
* DESCRIPTION:
*
* ARGUMENTS:
*
* RETURNS:
*
*/
void emuAnsiUnload(const HHEMU hhEmu)
{
assert(hhEmu);
if (hhEmu->pvPrivate)
{
free(hhEmu->pvPrivate);
hhEmu->pvPrivate = NULL;
}
emuKeyTableFree(&hhEmu->stEmuKeyTbl);
emuKeyTableFree(&hhEmu->stEmuKeyTbl2);
return;
}