497 lines
12 KiB
C++
497 lines
12 KiB
C++
|
|
|||
|
/* ------------------------------------------------------------
|
|||
|
* Filename ............... ProMisc.Cpp
|
|||
|
*
|
|||
|
* General Purpose ........ some miscellaneous functions
|
|||
|
* ------------------------------------------------------------
|
|||
|
* First date ............. 15 dec 1993
|
|||
|
*
|
|||
|
* First in version ....... 2.00
|
|||
|
*
|
|||
|
* Written by ............. Alain Schellinck
|
|||
|
* ------------------------------------------------------------
|
|||
|
* Revisions:
|
|||
|
* ----------
|
|||
|
*
|
|||
|
* Date | By | Purpose |
|
|||
|
* ---------+----+--------------------------------------------+
|
|||
|
* | | |
|
|||
|
* | | |
|
|||
|
* | | |
|
|||
|
*/
|
|||
|
|
|||
|
/*-------------------------------------------------------------------------*/
|
|||
|
|
|||
|
#include <ctype.h>
|
|||
|
#include <string.h>
|
|||
|
|
|||
|
#include "ThProCfg.Hpp"
|
|||
|
|
|||
|
/*-------------------------------------------------------------------------*/
|
|||
|
|
|||
|
/*
|
|||
|
* Routine : enterPwd
|
|||
|
* Purpose : let the user enter a password
|
|||
|
* ------------------------------------------------------------------------
|
|||
|
* Parameters: None
|
|||
|
* Return : None
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
KEY
|
|||
|
enterPwd(IntT mode, Window& w, IntT x, IntT y, ChrT attr, AnyP data)
|
|||
|
{
|
|||
|
User *user = (User *) data;
|
|||
|
tsw_cursoroff();
|
|||
|
|
|||
|
if(mode == TRUE)
|
|||
|
{
|
|||
|
Window w(10, 5, 40, 7, setFBColor(hWhite, nMagenta));
|
|||
|
w.open();
|
|||
|
w << " Password: ";
|
|||
|
|
|||
|
w.attrib(setFBColor(hYellow, nMagenta));
|
|||
|
|
|||
|
tsw_cursoron();
|
|||
|
|
|||
|
ChrT buffer[16];
|
|||
|
|
|||
|
if(user->passWord[0] == '\0')
|
|||
|
{
|
|||
|
buffer[0] = '\0';
|
|||
|
|
|||
|
w.scan(buffer, 15, 16);
|
|||
|
|
|||
|
if(buffer[0])
|
|||
|
{
|
|||
|
strcpy(user->passWord , buffer);
|
|||
|
|
|||
|
user->passWordCRC = RaCrc(user->passWord);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
strcpy(buffer, user->passWord);
|
|||
|
|
|||
|
w.scan(buffer, 15, 16);
|
|||
|
tsw_cursoroff();
|
|||
|
|
|||
|
strcpy(user->passWord, buffer);
|
|||
|
|
|||
|
user->passWordCRC = RaCrc(user->passWord);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(user->passWord[0] == '\0')
|
|||
|
{
|
|||
|
w.direct(x,y,attr,String(cfg.pwdchar,16));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
String str(user->passWord);
|
|||
|
|
|||
|
if(cfg.hidePassword == TRUE)
|
|||
|
str = String(cfg.pwdchar, strlen(user->passWord));
|
|||
|
|
|||
|
str.justify(String::left, 16);
|
|||
|
w.direct(x, y, attr, str);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
tsw_cursoron();
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Routine : askYesNo()
|
|||
|
* Purpose : ask YES or NO
|
|||
|
* ------------------------------------------------------------------------
|
|||
|
* Parameters: Title
|
|||
|
* Return : -1 = ESC, TRUE = YES, FALSE = NO
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
ShrtT askYesNo(ChrP title)
|
|||
|
{
|
|||
|
ShrtT ret_val = -1;
|
|||
|
|
|||
|
Window w(16, 9, 65, 16, setFBColor(hWhite, nBlack), SHADOW|CENTERED_X);
|
|||
|
w.open();
|
|||
|
|
|||
|
w.centerLine(2, title, setFBColor(hYellow, nBlack));
|
|||
|
|
|||
|
menu_item yesNoMenu[]=
|
|||
|
{
|
|||
|
{ 'Y', 18,18, " YES " },
|
|||
|
{ 'N', 17,17, " NO " },
|
|||
|
{ 0 , 0,0, NULL }
|
|||
|
};
|
|||
|
|
|||
|
PopMenu menu(yesNoMenu, setFBColor(nBlack, nWhite), setFBColor(hWhite, nBlack));
|
|||
|
menu.open(18, 13, 63, 14, setFBColor(nWhite, nBlack), NOBORDER|CENTERED_X);
|
|||
|
|
|||
|
tsw_cursoroff();
|
|||
|
ShrtT choice = menu.process();
|
|||
|
|
|||
|
if(choice > 0)
|
|||
|
ret_val = 2 - choice;
|
|||
|
|
|||
|
return(ret_val);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//**************************************************************************
|
|||
|
//
|
|||
|
// Calculate the raw string width of a help line, without color codes
|
|||
|
//
|
|||
|
// Prototype: int CalcHelpWidth( char *pData );
|
|||
|
//
|
|||
|
// Parameters: pData ... Help data to calculate the length of
|
|||
|
//
|
|||
|
// Returns: The length, without any color codes
|
|||
|
//
|
|||
|
// Remarks:
|
|||
|
//
|
|||
|
// This routine takes a help line, and calculates how long it is without any
|
|||
|
// color codes. A color code is a three byte sequence starting with 0x01,
|
|||
|
// then two hex-encoded digits (i.e., "71" would indicate blue on a gray
|
|||
|
// background.)
|
|||
|
//
|
|||
|
// -------------------------------------------------------------------------
|
|||
|
//
|
|||
|
// Created on: 08/06/99 (Jeff Reeder)
|
|||
|
// Last modified: 08/06/99 (Jeff Reeder) Created
|
|||
|
//
|
|||
|
//**************************************************************************
|
|||
|
|
|||
|
int CalcHelpWidth( char *pData )
|
|||
|
{
|
|||
|
int cLength = 0;
|
|||
|
|
|||
|
|
|||
|
while ( pData &&
|
|||
|
*pData )
|
|||
|
{
|
|||
|
if ( *pData == 0x01 )
|
|||
|
{
|
|||
|
pData++;
|
|||
|
|
|||
|
|
|||
|
if ( *pData &&
|
|||
|
isxdigit( *pData ) )
|
|||
|
{
|
|||
|
pData++;
|
|||
|
|
|||
|
|
|||
|
if ( *pData &&
|
|||
|
isxdigit( *pData ) )
|
|||
|
{
|
|||
|
pData++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
cLength++;
|
|||
|
pData++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
return cLength;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//**************************************************************************
|
|||
|
//
|
|||
|
// Converts a single hex character to a numerical value from 0-15
|
|||
|
//
|
|||
|
// Prototype: int HexCharToInt( char iChar );
|
|||
|
//
|
|||
|
// Parameters: iChar ... Hex value to convert
|
|||
|
//
|
|||
|
// Returns: A value from 0 through 15.
|
|||
|
//
|
|||
|
// Remarks:
|
|||
|
//
|
|||
|
// If the character value is not a valid hex digit, then a value of 0 is
|
|||
|
// returned.
|
|||
|
//
|
|||
|
// -------------------------------------------------------------------------
|
|||
|
//
|
|||
|
// Created on: 08/06/99 (Jeff Reeder)
|
|||
|
// Last modified: 08/06/99 (Jeff Reeder) Created
|
|||
|
//
|
|||
|
//**************************************************************************
|
|||
|
|
|||
|
int HexCharToInt( char iChar )
|
|||
|
{
|
|||
|
if ( isxdigit( iChar ) )
|
|||
|
{
|
|||
|
if ( iChar >= '0' &&
|
|||
|
iChar <= '9' )
|
|||
|
{
|
|||
|
return iChar - '0';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return toupper( iChar ) - 'A' + 10;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//------------------
|
|||
|
// Invalid hex digit
|
|||
|
//------------------
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//**************************************************************************
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// Prototype: void helpShowLine( Window &w, int iLine, char *pText );
|
|||
|
//
|
|||
|
// Parameters: w ... Window to show line of help text in
|
|||
|
// iLine ... Line number in window to receive the text
|
|||
|
// iDefAttr ... Default color attribute
|
|||
|
// pText ... Text to show
|
|||
|
//
|
|||
|
// Returns: Nothing
|
|||
|
//
|
|||
|
// Remarks:
|
|||
|
//
|
|||
|
// This routine displays a single line of text to the help window. It
|
|||
|
// properly handles all color codes, and displays data appropriately.
|
|||
|
//
|
|||
|
// If the help line doesn't contain any color codes, then it is displayed in
|
|||
|
// the default color attribute <iDefAttr>.
|
|||
|
//
|
|||
|
// -------------------------------------------------------------------------
|
|||
|
//
|
|||
|
// Created on: 08/06/99 (Jeff Reeder)
|
|||
|
// Last modified: 08/06/99 (Jeff Reeder) Created
|
|||
|
//
|
|||
|
//**************************************************************************
|
|||
|
|
|||
|
static
|
|||
|
void helpShowLine( Window &w,
|
|||
|
int iLine,
|
|||
|
ATTR iDefAttr,
|
|||
|
char *pText )
|
|||
|
{
|
|||
|
int iPos = 0;
|
|||
|
int cLength = strlen( pText );
|
|||
|
ATTR iCurAttr = iDefAttr;
|
|||
|
|
|||
|
|
|||
|
for ( int i = 0; i < cLength; i++ )
|
|||
|
{
|
|||
|
if ( pText[ i ] == 0x01 )
|
|||
|
{
|
|||
|
//------------------------
|
|||
|
// Looks like a color code
|
|||
|
//------------------------
|
|||
|
|
|||
|
if ( isxdigit( pText[ i + 1 ] ) &&
|
|||
|
isxdigit( pText[ i + 2 ] ) )
|
|||
|
{
|
|||
|
//----------------------------
|
|||
|
// We have a valid color code!
|
|||
|
//----------------------------
|
|||
|
|
|||
|
int iBack;
|
|||
|
int iFore;
|
|||
|
|
|||
|
|
|||
|
//-----------------------------------------
|
|||
|
// Get the foreground and background colors
|
|||
|
//-----------------------------------------
|
|||
|
|
|||
|
iBack = HexCharToInt( pText[ i + 1 ] );
|
|||
|
iFore = HexCharToInt( pText[ i + 2 ] );
|
|||
|
|
|||
|
|
|||
|
iCurAttr = ( ( iBack & 0x0F ) << 4 ) |
|
|||
|
( iFore & 0x0F );
|
|||
|
|
|||
|
i += 2;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tsw_maputc( w.minX + iPos,
|
|||
|
w.minY + iLine - 1,
|
|||
|
iCurAttr,
|
|||
|
pText[ i ] );
|
|||
|
|
|||
|
iPos++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//**************************************************************************
|
|||
|
//
|
|||
|
// Display a help message
|
|||
|
//
|
|||
|
// Prototype: void showHelp( ChrP hlp[], char *pTitle, FlgT center );
|
|||
|
//
|
|||
|
// Parameters: hlp ... An array of help lines to display
|
|||
|
// pTitle ... Help window title
|
|||
|
// center ... TRUE to center each line, FALSE otherwise
|
|||
|
//
|
|||
|
// Returns: Nothing
|
|||
|
//
|
|||
|
// Remarks:
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// -------------------------------------------------------------------------
|
|||
|
//
|
|||
|
// Created on: ??/??/???? (Philippe Leybaert)
|
|||
|
// Last modified: 08/06/1999 (Jeff Reeder) Modified to support custom
|
|||
|
// color codes in individual lines in the message
|
|||
|
//
|
|||
|
//**************************************************************************
|
|||
|
|
|||
|
void showHelp( ChrP hlp[],
|
|||
|
char *pTitle,
|
|||
|
FlgT center )
|
|||
|
{
|
|||
|
int bHasCodes = 0;
|
|||
|
|
|||
|
|
|||
|
tsw_cursoroff();
|
|||
|
|
|||
|
|
|||
|
ShrtT lines = 0;
|
|||
|
ShrtT width = 0;
|
|||
|
|
|||
|
|
|||
|
while ( hlp[ lines ] != NULL )
|
|||
|
{
|
|||
|
if ( strchr( hlp[ lines ], 0x01 ) )
|
|||
|
{
|
|||
|
bHasCodes = 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
width = max( width,
|
|||
|
CalcHelpWidth( hlp[ lines ] ) + ( center * 4 ) );
|
|||
|
|
|||
|
lines++;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
ShrtT hFree = tsw_hsize - ( width + 3 );
|
|||
|
ShrtT vFree = tsw_vsize - ( lines + 1 );
|
|||
|
ShrtT ux = hFree / 2;
|
|||
|
ShrtT uy = vFree / 2;
|
|||
|
|
|||
|
|
|||
|
Window w( ux,
|
|||
|
uy,
|
|||
|
ux + width + 3,
|
|||
|
uy + lines + 1,
|
|||
|
0x5F,
|
|||
|
( pTitle && *pTitle )
|
|||
|
? ( SHADOW | BRACKETS )
|
|||
|
: SHADOW,
|
|||
|
CHISEL_BORDER,
|
|||
|
0x5D,
|
|||
|
NULL,
|
|||
|
0x50 );
|
|||
|
|
|||
|
|
|||
|
w.open();
|
|||
|
|
|||
|
|
|||
|
if ( pTitle &&
|
|||
|
*pTitle )
|
|||
|
{
|
|||
|
w.title( pTitle, 0x5F );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
for ( ShrtT cnt = 0; cnt < lines; cnt++ )
|
|||
|
{
|
|||
|
if ( bHasCodes )
|
|||
|
{
|
|||
|
helpShowLine( w,
|
|||
|
cnt + 1,
|
|||
|
0x5F,
|
|||
|
hlp[ cnt ] );
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
String txt( hlp[ cnt ] );
|
|||
|
|
|||
|
|
|||
|
if ( center == TRUE )
|
|||
|
{
|
|||
|
txt.justify( String::centered, width );
|
|||
|
txt.rtrim();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
w << ChrP( txt );
|
|||
|
|
|||
|
|
|||
|
if (
|
|||
|
( cnt + 1 != lines ) &&
|
|||
|
( txt.len() < width )
|
|||
|
)
|
|||
|
{
|
|||
|
w << "\n";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
tsw_showfooter( "Press any key to continue.", BAR_NORM );
|
|||
|
|
|||
|
|
|||
|
KB.get();
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Routine : showAbout()
|
|||
|
* Purpose : show the about screen
|
|||
|
* ------------------------------------------------------------------------
|
|||
|
* Parameters: None
|
|||
|
* Return : None
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
void showAbout()
|
|||
|
{
|
|||
|
LCL ChrP aboutText[] =
|
|||
|
{
|
|||
|
" ",
|
|||
|
" 5EProBoard v" VERSION " Configuration Utility",
|
|||
|
" ",
|
|||
|
" Copyright (c) 1990-1999 TeleGrafix Communications, Inc. ",
|
|||
|
" All Rights Reserved ",
|
|||
|
" ",
|
|||
|
" 5DPortions written by Alain Schellinck ",
|
|||
|
" ",
|
|||
|
NULL
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
showHelp( aboutText, "About ProBoard" );
|
|||
|
}
|
|||
|
|
|||
|
/*---------------------------] END OF THE CODE [---------------------------*/
|