home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best Objectech Shareware Selections
/
UNTITLED.iso
/
boss
/
word
/
text
/
024
/
cfgkeys.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-06-04
|
15KB
|
432 lines
/*
* This module contains all the routines needed to redefine the keys.
*
* Program Name: tdecfg
* Author: Frank Davis
* Date: October 5, 1991
*/
#include <conio.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "tdecfg.h"
#include "cfgkeys.h"
extern struct vcfg cfg;
extern FILE *tde_exe; /* FILE pointer to tde.exe */
extern long keys_offset;
static WINDOW *w_ptr;
/******** EXTREMELY IMPORTANT ************/
/*
* If you modify tde, it is your responsibility to find the offset of
* the key definition array in your new executable, tde.exe.
*
*/
/*
* Name: tdekeys
* Date: October 1, 1991
* Notes: Set up most of the window global variables.
*/
void tdekeys( void )
{
HELP_WINDOW hw;
char t[80];
int ch;
int i;
w_ptr = NULL;
hw.dply_col = 2;
hw.dply_row = 3;
hw.line_length = 69;
hw.avail_lines = 12;
hw.v_row = 0;
hw.select = 0;
hw.num_entries = AVAIL_KEYS;
hw.ulft_col = 3;
hw.ulft_row = 2;
hw.total_col = 73;
hw.total_row = 21;
initialize_keys( );
master_help( &hw, key_defs, key_head, t, &ch );
if (ch == F10) {
for (i=0; i<hw.num_entries; i++)
key_func.key[key_defs[i].key_index] = key_defs[i].func_index;
fseek( tde_exe, keys_offset, SEEK_SET );
fwrite( (void *)&key_func, sizeof(KEY_FUNC), 1, tde_exe );
}
cls( );
}
/*
* Name: initialize_keys
* Date: October 1, 1991
* Notes: Get the current key definitions from the tde executable file.
*/
void initialize_keys( void )
{
int i;
fseek( tde_exe, keys_offset, SEEK_SET );
fread( (void *)&key_func, sizeof(KEY_FUNC), 1, tde_exe );
for (i=0; i<AVAIL_KEYS; i++)
key_defs[i].func_index = key_func.key[key_defs[i].key_index];
}
/*
* Name: show_key_def_list
* Date: October 1, 1991
* Notes: Show the key name and current function in a window.
*/
void show_key_def_list( HELP_WINDOW *hw, KEY_DEFS *keys )
{
int row, col, i, j;
col = hw->ulft_col + hw->dply_col;
row = hw->ulft_row + hw->dply_row;
scroll_window( 0, row, col, row+hw->avail_lines-1, col+hw->line_length,
NORMAL );
i = 0;
j = hw->select - hw->v_row;
for (; i < hw->avail_lines && j<hw->num_entries; ++i, j++, row++) {
s_output( keys[j].key, row, col, NORMAL );
s_output( avail_func[keys[j].func_index], row, col+31, NORMAL );
}
}
/*
* Name: show_func_list
* Date: October 1, 1991
* Notes: Show the available functions in the small pop-up window.
*/
void show_func_list( HELP_WINDOW *hw, char *func[] )
{
int row, col, i, j;
col = hw->ulft_col + hw->dply_col;
row = hw->ulft_row + hw->dply_row;
scroll_window( 0, row, col, row+hw->avail_lines-1, col+hw->line_length,
NORMAL );
i = 0;
j = hw->select - hw->v_row;
for (; i < hw->avail_lines && j<hw->num_entries; ++i, j++, row++)
s_output( func[j], row, col, NORMAL );
}
/*
* Name: position_cursor
* Date: October 1, 1991
* Notes: Given a key from the user, find out what action to do.
*/
void position_cursor( HELP_WINDOW *hw, int len, int *un, int *cc, int *ch )
{
int col, row, y, yy;
col = hw->ulft_col + hw->dply_col;
row = hw->ulft_row + hw->dply_row + hw->v_row;
y = hw->ulft_row + hw->dply_row;
yy = hw->ulft_row + hw->dply_row + hw->avail_lines - 1;
*un = FALSE;
switch (*ch) {
case UP :
if (hw->v_row > 0 && hw->select > 0) {
hlight_line( col, row, len, NORMAL );
--hw->v_row;
--hw->select;
*cc = TRUE;
} else if (hw->v_row == 0 && hw->select > 0) {
hlight_line( col, row, len, NORMAL );
--hw->select;
scroll_window( -1, y, col, yy+1, col+hw->line_length, NORMAL );
*un = TRUE;
*cc = TRUE;
}
break;
case DOWN :
if (hw->v_row < hw->avail_lines-1 &&
hw->select < hw->num_entries-1) {
hlight_line( col, row, len, NORMAL );
++hw->v_row;
++hw->select;
*cc = TRUE;
} else if (hw->v_row == hw->avail_lines-1 &&
hw->select < hw->num_entries-1) {
hlight_line( col, row, len, NORMAL );
++hw->select;
scroll_window( 1, y, col, yy, col+hw->line_length, NORMAL );
*un = TRUE;
*cc = TRUE;
} else if (hw->select == hw->num_entries - 1 && hw->v_row > 0) {
--hw->v_row;
scroll_window(1, y, col, yy, col+hw->line_length, NORMAL );
}
break;
}
}
/*
* Name: master_help
* Date: October 1, 1991
* Notes: master routine for setting up a help window.
*/
void master_help( HELP_WINDOW *hw, KEY_DEFS *help, struct screen *help_heading,
char *t, int *ch )
{
FILE *fp; /* file pointer for PRN device */
int col, row, i, j;
int update_name, change_color, draw_page;
char str[80];
char *blank = " ";
char temp[20];
HELP_WINDOW hw_k;
xygoto( -1, -1 );
save_and_draw( hw, help_heading, &w_ptr );
show_key_def_list( hw, help );
col = hw->ulft_col + hw->dply_col;
row = hw->ulft_row + hw->dply_row + hw->v_row;
change_color = TRUE;
*ch = 0;
while (*ch!=F3 && *ch != F10 && *ch!=ESC) {
draw_page = FALSE;
position_cursor( hw, hw->line_length, &update_name, &change_color, ch );
switch (*ch) {
case PGUP :
if (hw->select > hw->avail_lines-1) {
hw->select = hw->select - hw->avail_lines;
if (hw->v_row > hw->select)
hw->select = hw->v_row;
draw_page = TRUE;
} else if (hw->select - hw->v_row > 0) {
hw->select = hw->v_row;
draw_page = TRUE;
}
break;
case PGDN :
if (hw->select + hw->avail_lines < hw->num_entries) {
hw->select = hw->select + hw->avail_lines;
draw_page = TRUE;
} else if (hw->select + hw->avail_lines - hw->v_row <
hw->num_entries) {
hw->select = hw->num_entries - 1;
draw_page = TRUE;
}
if ((hw->num_entries - 1) - hw->select <
hw->avail_lines && draw_page) {
i = row - hw->v_row;
scroll_window( 0, i, col, i+hw->avail_lines-1,
col+hw->line_length, NORMAL );
}
break;
case F5 :
hw_k.dply_col = 2;
hw_k.dply_row = 3;
hw_k.line_length = 33;
hw_k.avail_lines = 6;
hw_k.v_row = 0;
hw_k.select = 0;
hw_k.num_entries = NUM_FUNC;
hw_k.ulft_col = 20;
hw_k.ulft_row = row + 1;
if (hw_k.ulft_row > 12)
hw_k.ulft_row = row - 12;
hw_k.total_col = 37;
hw_k.total_row = 12;
new_assignment_help( &hw_k, avail_func, func_head, ch );
if (*ch == RTURN) {
help[hw->select].key[0] = '*';
help[hw->select].func_index = (unsigned char)hw_k.select;
s_output( help[hw->select].key, row, col, cfg.attr );
s_output( " ", row, col+31, cfg.attr );
s_output( avail_func[help[hw->select].func_index],
row, col+31, cfg.attr );
*ch = 0;
}
break;
case F7 :
hw_k.ulft_col = 14;
hw_k.ulft_row = 10;
hw_k.total_col = 52;
hw_k.total_row = 5;
save_and_draw( &hw_k, file_head, &w_ptr );
xygoto( hw_