/*
 ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
 лл                                                                         лл
 лл                    Copyright (C) 1999 Symantec Corp.                    лл
 лл                           All Rights Reserved                           лл
 лл                                                                         лл
 лл      Information in this file is proprietary and confidential, and      лл
 лл        may not be copied, reproduced or distributed in any manner       лл
 лл     without the express written permission of Symantec Corp.            лл
 лл                                                                         лл
 ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
*/

#ifndef _INC_KBDREMAP
   #define _INC_KBDREMAP

#include "pwver.h"

/*
 лллл typedefs ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
*/

#define NUMVIRTKEYS        397   // total length of 1 segment of virtkeyarray
#define NUMMAPSTRINGS      335   // # of mappable keys in terminal set
#define NUMMETASTRINGS      40   // # of mappable keys in metakey set
#define NUMACCSTRINGS      287   // # of mappable keys in accelerator set
#define NUMDOORSTRINGS     181   // # of keys reconfigured in doorway mode
#define MAXTRMINTCMDS       50   // # of possible terminal internal cmds

#define MAXMETASTRLEN       80   // metakey contents max string length
#define MAXLABELSTRLEN      10   // metakey button label max length
#define MAXKBDSTRLEN        80   // remappable key max string length
#define MAXACCSTRLEN        80   // remappable key max string length
#define MAXDOORSTRLEN        5   // doorway mode key max string length
#define MAXXLTSTRLEN         1   // xlate table char length
#define MAXTRANSLATESTRLEN 160   // internal size for TranslateString buffer

// ********************
// * key type defines *
// ********************
//
// NOTE: KBD_FNACCEL and KBD_TRMINTL must be between 128 and 255:
// all others must be < 128!
//

#define KBD_NA_____ 0                  // any non-assigned key
#define DOR_MAPTEXT 50                 // Mapped text,doorway mode

#define KBD_FNACCEL 200                // any key assigned as an accelerator
#define KBD_TRMINTL 201                // internal terminal function
#define KBD_INTFUNC 202                // internal PW function

// types in termkey group
#define KBD_MAPTEXT 1                  // Mapped text
#define KBD_MAPECHO 2                  // Mapped cursor key
//#define KBD_CTRLBRK 5                // Ctrl break key for ASPECT
#define KBD_HOSTTXT 6                  // Mapped text downloaded from host
#define KBD_HOSTECO 7                  // Mapped cursor key from host
#define KBD_SSCRIPT 30                 // Spawned script
#define KBD_SEXECUT 40                 // Spawned executable

// types in metakey group
#define MET_MAPTEXT 11                 // Mapped text
#define MET_MAPECHO 21                 // Mapped text
#define MET_SSCRIPT 31                 // Spawned script
#define MET_SEXECUT 41                 // Spawned executable

// types in accelkey group
#define ACC_MAPTEXT 12                 // Mapped text
#define ACC_MAPECHO 22                 // Mapped text
#define ACC_SSCRIPT 32                 // Spawned script
#define ACC_SEXECUT 42                 // Spawned executable

// mapper status set and get defines: used by setup dll to
// communicate with mappers in PW exe
#define STATUS_GET         0  // find out current mapper status
                              //    from status flag
#define STATUS_SET_CLEAN   1  // set status flag to say that all
                              //    changes should be thrown away
#define STATUS_RESET       2  // set status flag to initial state : also
                              //    means mapper buffers don't exist

// mapper status defines: possible states of status flags
#define MAPPER_DIRTY    1
#define MAPPER_CLEAN    0
#define MAPPER_UNUSED  -2

#define NUMPWFUNCSTRINGS (MAXUNIQUEPWCMDS+1) // Note: +1 accounts for KFN_NOP
//
// Function accelerator indices
//
// NOTE: These MUST coincide with PW MAIN MENU IDs in menu_ids.h!
//

#define KFN(pwmenuid) ((UINT8)(pwmenuid - PWMENUBEGIN))

#define KFN_NOP         ((UINT8)255)

// commands associated with default mapped keys
// file
#define KFN_SHOWDDIR    KFN(ID_FILE_VIEWDIAL)
#define KFN_PRINT       KFN(ID_PRINT_CAPTURE)
#define KFN_EXIT        KFN(ID_EXIT)
// edit
#define KFN_SCR2CLIP    KFN(ID_SCREEN_TO_CLIP)
#define KFN_SCR2FILE    KFN(ID_SCREEN_TO_FILE)
#define KFN_SCR2PRN     KFN(ID_SCREEN_TO_PRINTER)
#define KFN_SCR2BUF     KFN(ID_SCREEN_TO_BUFF)
#define KFN_BUF2CLIP    KFN(ID_BUFF_TO_CLIP)
#define KFN_BUF2FILE    KFN(ID_BUFF_TO_FILE)
// setup
#define KFN_ANSOFF      KFN(ID_SETUP_ANSWER_OFF)
// data
#define KFN_ONLINE      KFN(ID_COMM_HANGUP)
#define KFN_SEND        KFN(ID_FILE_SEND)
#define KFN_RCV         KFN(ID_FILE_RCV)
#define KFN_KRMGET      KFN(ID_KERMIT_GET)
#define KFN_LOG         KFN(ID_FILE_CAPTURE)
#define KFN_FILECLIP    KFN(ID_FILECLIP)
#define KFN_MONITOR     KFN(ID_MONITOR)
#define KFN_SENDBRK     KFN(ID_COMM_BREAK)
#define KFN_TRMCLEAR    KFN(ID_TERM_CLEAR)
#define KFN_TRMRESET    KFN(ID_TERM_RESET)
// scripts
#define KFN_SCRIPT      KFN(ID_SCRIPT_START)
#define KFN_RUNASP      KFN(ID_SCRIPT_RUN)
#define KFN_EDITASP     KFN(ID_SCRIPT_EDIT)
#define KFN_RECORD      KFN(ID_SCRIPT_RECORD)
// tools
#define KFN_METAMAP     KFN(ID_RUN_META)
#define KFN_KBDMAP      KFN(ID_RUN_KBD)
// help
#define KFN_WIZARDS     KFN(ID_HELP_WIZARDS)
#define KFN_HLPCONT     KFN(ID_HELPTERMINAL)   // KFN(ID_HELPCONTENT)
#define KFN_ABOUT       KFN(ID_ABOUT)

// internal commands associated with default mapped keys
#define KFN_NEXTWIN     KFN(ID_PWNEXTWIN)
#define KFN_CYCLEBAR    KFN(ID_CYCLEABAR)
#define KFN_PLAYPAUS    KFN(ID_PLAYBACK_PAUSE)
#define KFN_PLAYREST    KFN(ID_PLAYBACK_RESTART)
#define KFN_RAPIDDI     KFN(ID_RAPIDDIAL)
#define KFN_RAPIDSCR    KFN(ID_RAPIDSCRIPT)
#define KFN_CTRLBRK     KFN(ID_CTRLBRK)

#define KFN_SCL_L1      KFN(ID_SCROLL_LEFT_ONE)
#define KFN_SCL_R1      KFN(ID_SCROLL_RIGHT_ONE)
#define KFN_SCL_U1      KFN(ID_SCROLL_UP_ONE)
#define KFN_SCL_UPGE    KFN(ID_SCROLL_UP_PAGE)
#define KFN_SCL_UTOP    KFN(ID_SCROLL_UP_TOP)
#define KFN_SCL_D1      KFN(ID_SCROLL_DOWN_ONE)
#define KFN_SCL_DPGE    KFN(ID_SCROLL_DOWN_PAGE)
#define KFN_SCL_DBOT    KFN(ID_SCROLL_DOWN_BOTTOM)

#define KFN_DEBUGBOX    KFN(ID_DEBUGBOX)

typedef struct                // fileheader struct for kbd file
{
   char     szFileNotes[50];
   char     Version[PUBLIC_STAMP_SIZE];
   UINT16   flags;
   // bit 0 - EntryType       // mapper flags general to all emulations
   // bit 1 - EntryType
   // bit 2 - KbdType
   // bit 3 - UseArrowKeys
   // bit 4-F not used
}  KBD_FILEHDR_STRUCT;

#endif // _INC_KBDREMAP
