proboard/procfg/PROMISC.CPP

499 lines
12 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ------------------------------------------------------------
* 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) 2019 John Riley ",
" All Rights Reserved ",
" ",
" Developed by the ProBoard Development Ninja Team ",
" ",
" 5DPortions written by Alain Schellinck ",
" ",
NULL
};
showHelp( aboutText, "About ProBoard" );
}
/*---------------------------] END OF THE CODE [---------------------------*/