Files
mars-flaim/xflaim/util/ftx.h
dsandersoremutah c55dab446f Renamed version4 to flaim and version5 to xflaim
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@7 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2006-01-27 21:06:39 +00:00

901 lines
22 KiB
C

//------------------------------------------------------------------------------
// Desc: This file contains functions prototypes for the FLAIM cross-platform
// text-based user interface.
//
// Tabs: 3
//
// Copyright (c) 1996-2003,2005-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id: ftx.h 3133 2006-01-25 12:00:01 -0700 (Wed, 25 Jan 2006) dsanders $
//------------------------------------------------------------------------------
#ifndef FTX_H
#define FTX_H
typedef FLMUINT FTXRCODE;
#define FTXRC_SUCCESS 0
#define FTXRC_INVALID_WIN 1
#define FTXRC_MEM 2
#define FTXRC_INVALID_POS 3
#define FTXRC_NULL_POINTER 4
#define FTXRC_SHUTDOWN 5
#define FTXRC_EMPTY_LIST 6
#define FTXRC_BUF_OVERRUN 7
#define FTXRC_NO_INPUT 8
#define FTXRC_INVALID_SCREEN 9
#define FTXRC_ILLEGAL_OP 10
#define CV_BOFFSET 1
#define CV_KEYBUF_SIZE 64
#define CV_MAX_WINNAME_LEN 32
enum WPS_COLORS {
WPS_BLACK,
WPS_BLUE,
WPS_GREEN,
WPS_CYAN,
WPS_RED,
WPS_MAGENTA,
WPS_BROWN,
WPS_LIGHTGRAY,
WPS_DARKGRAY,
WPS_LIGHTBLUE,
WPS_LIGHTGREEN,
WPS_LIGHTCYAN,
WPS_LIGHTRED,
WPS_LIGHTMAGENTA,
WPS_YELLOW,
WPS_WHITE
};
#define WPS_DIM 0x1c /* Turn bold OFF */
#define WPS_HI 0x1d /* Turn bold ON */
/****************************************************************************
Desc: Cursor flags
****************************************************************************/
#define WPS_CURSOR_BLOCK 0x01
#define WPS_CURSOR_UNDERLINE 0x02
#define WPS_CURSOR_INVISIBLE 0x04
#define WPS_CURSOR_VISIBLE 0x08
/****************************************************************************
Desc: Key definitions
****************************************************************************/
#define WPK_ESCAPE 0xE01B /* Escape (ESC) */
#define WPK_ESC WPK_ESCAPE
#define WPK_SPACE 0x20
#define WPK_HOME 0xE008 /* HOME key */
#define WPK_UP 0xE017 /* Up arrow */
#define WPK_PGUP 0xE059 /* Page Up */
#define WPK_LEFT 0xE019 /* Left arrow */
#define WPK_RIGHT 0xE018 /* Right arrow */
#define WPK_END 0xE055 /* END key */
#define WPK_DOWN 0xE01A /* Down arrow */
#define WPK_PGDN 0xE05A /* Page Down */
#define WPK_PLUS 0x002B /* Plus (+) */
#define WPK_MINUS 0x002D /* Minus (-) */
#define WPK_INSERT 0xE05D /* Insert key */
#define WPK_DELETE 0xE051 /* Delete key */
#define WPK_BACKSPACE 0xE050 /* Backspace */
#define WPK_TAB 0xE009 /* TAB */
#define WPK_ENTER 0xE00a /* Enter */
#define WPK_F1 0xE020 /* F1 */
#define WPK_F2 0xE021 /* F2 */
#define WPK_F3 0xE022 /* F3 */
#define WPK_F4 0xE023 /* F4 */
#define WPK_F5 0xE024 /* F5 */
#define WPK_F6 0xE025 /* F6 */
#define WPK_F7 0xE026 /* F7 */
#define WPK_F8 0xE027 /* F8 */
#define WPK_F9 0xE028 /* F9 */
#define WPK_F10 0xE029 /* F10 */
#define WPK_F11 0xE03A /* F10 */
#define WPK_F12 0xE03B /* F10 */
#define WPK_STAB 0xE05E /* Shift TAB */
#define WPK_SF1 0xE02C /* F1 */
#define WPK_SF2 0xE02D /* F2 */
#define WPK_SF3 0xE02E /* F3 */
#define WPK_SF4 0xE02F /* F4 */
#define WPK_SF5 0xE030 /* F5 */
#define WPK_SF6 0xE031 /* F6 */
#define WPK_SF7 0xE032 /* F7 */
#define WPK_SF8 0xE033 /* F8 */
#define WPK_SF9 0xE034 /* F9 */
#define WPK_SF10 0xE035 /* F10 */
#define WPK_SF11 0xE036 /* F10 */
#define WPK_SF12 0xE037 /* F10 */
#define WPK_ALT_A 0xFDDC
#define WPK_ALT_B 0xFDDD
#define WPK_ALT_C 0xFDDE
#define WPK_ALT_D 0xFDDF
#define WPK_ALT_E 0xFDE0
#define WPK_ALT_F 0xFDE1
#define WPK_ALT_G 0xFDE2
#define WPK_ALT_H 0xFDE3
#define WPK_ALT_I 0xFDE4
#define WPK_ALT_J 0xFDE5
#define WPK_ALT_K 0xFDE6
#define WPK_ALT_L 0xFDE7
#define WPK_ALT_M 0xFDE8
#define WPK_ALT_N 0xFDE9
#define WPK_ALT_O 0xFDEA
#define WPK_ALT_P 0xFDEB
#define WPK_ALT_Q 0xFDEC
#define WPK_ALT_R 0xFDED
#define WPK_ALT_S 0xFDEE
#define WPK_ALT_T 0xFDEF
#define WPK_ALT_U 0xFDF0
#define WPK_ALT_V 0xFDF1
#define WPK_ALT_W 0xFDF2
#define WPK_ALT_X 0xFDF3
#define WPK_ALT_Y 0xFDF4
#define WPK_ALT_Z 0xFDF5
#define WPK_ALT_1 0xFDF7 /* ALT 1 */
#define WPK_ALT_2 0xFDF8 /* ALT 2 */
#define WPK_ALT_3 0xFDF9 /* ALT 3 */
#define WPK_ALT_4 0xFDFA /* ALT 4 */
#define WPK_ALT_5 0xFDFB /* ALT 5 */
#define WPK_ALT_6 0xFDFC /* ALT 6 */
#define WPK_ALT_7 0xFDFD /* ALT 7 */
#define WPK_ALT_8 0xFDFE /* ALT 8 */
#define WPK_ALT_9 0xFDFF /* ALT 9 */
#define WPK_ALT_0 0xFDF6 /* ALT 0 */
#define WPK_ALT_MINUS 0xE061 /* ALT MINUS */
#define WPK_ALT_EQUAL 0xE06B /* ALT EQUAL */
#define WPK_ALT_F1 0xE038 /* ALT F1 */
#define WPK_ALT_F2 0xE039 /* ALT F2 */
#define WPK_ALT_F3 0xE03A /* ALT F3 */
#define WPK_ALT_F4 0xE03B /* ALT F4 */
#define WPK_ALT_F5 0xE03C /* ALT F5 */
#define WPK_ALT_F6 0xE03D /* ALT F6 */
#define WPK_ALT_F7 0xE03E /* ALT F7 */
#define WPK_ALT_F8 0xE03F /* ALT F8 */
#define WPK_ALT_F9 0xE040 /* ALT F9 */
#define WPK_ALT_F10 0xE041 /* ALT F10 -F11,F12 NOT SUPPORTED*/
#define WPK_GOTO 0xE058 /* GOTO cntl-home */
#define WPK_CTRL_HOME 0xE058 /* CTRL Home */
#define WPK_CTRL_UP 0xE063 /* CTRL Up arrow */
#define WPK_CTRL_PGUP 0xE057 /* CTRL Page Up */
#define WPK_CTRL_LEFT 0xE054 /* CTRL Left arrow */
#define WPK_CTRL_RIGHT 0xE053 /* CTRL Right arrow */
#define WPK_CTRL_END 0xE00B /* CTRL END */
#define WPK_CTRL_DOWN 0xE064 /* CTRL Down arrow */
#define WPK_CTRL_PGDN 0xE00C /* CTRL Page Down */
#define WPK_CTRL_INSERT 0xE06E /* CTRL Insert */
#define WPK_CTRL_DELETE 0xE06D /* CTRL Delete */
#define WPK_CTRL_ENTER 0xE05F /* CTRL Enter */
#define WPK_CTRL_A 0xE07C
#define WPK_CTRL_B 0xE07D
#define WPK_CTRL_C 0xE07E
#define WPK_CTRL_D 0xE07F
#define WPK_CTRL_E 0xE080
#define WPK_CTRL_F 0xE081
#define WPK_CTRL_G 0xE082
#define WPK_CTRL_H 0xE083
#define WPK_CTRL_I 0xE084
#define WPK_CTRL_J 0xE085
#define WPK_CTRL_K 0xE086
#define WPK_CTRL_L 0xE087
#define WPK_CTRL_M 0xE088
#define WPK_CTRL_N 0xE089
#define WPK_CTRL_O 0xE08A
#define WPK_CTRL_P 0xE08B
#define WPK_CTRL_Q 0xE08C
#define WPK_CTRL_R 0xE08D
#define WPK_CTRL_S 0xE08E
#define WPK_CTRL_T 0xE08F
#define WPK_CTRL_U 0xE090
#define WPK_CTRL_V 0xE091
#define WPK_CTRL_W 0xE092
#define WPK_CTRL_X 0xE093
#define WPK_CTRL_Y 0xE094
#define WPK_CTRL_Z 0xE095
#define WPK_CTRL_1 0xE06B /* F1 - NOT SUPPORTED IN WP TO F10*/
#define WPK_CTRL_2 0xE06C /* F2 */
#define WPK_CTRL_3 0xE06D /* F3 */
#define WPK_CTRL_4 0xE06E /* F4 */
#define WPK_CTRL_5 0xE06F /* F5 */
#define WPK_CTRL_6 0xE070 /* F6 */
#define WPK_CTRL_7 0xE071 /* F7 */
#define WPK_CTRL_8 0xE072 /* F8 */
#define WPK_CTRL_9 0xE073 /* F9 */
#define WPK_CTRL_0 0xE074 /* F10 */
#define WPK_CTRL_MINUS 0xE060 /* MINUS */
#define WPK_CTRL_EQUAL 0xE061 /* EQUAL - NOT SUPPORTED IN WP */
#define WPK_CTRL_F1 0xE038 /* F1 */
#define WPK_CTRL_F2 0xE039 /* F2 */
#define WPK_CTRL_F3 0xE03A /* F3 */
#define WPK_CTRL_F4 0xE03B /* F4 */
#define WPK_CTRL_F5 0xE03C /* F5 */
#define WPK_CTRL_F6 0xE03D /* F6 */
#define WPK_CTRL_F7 0xE03E /* F7 */
#define WPK_CTRL_F8 0xE03F /* F8 */
#define WPK_CTRL_F9 0xE040 /* F9 */
#define WPK_CTRL_F10 0xE041 /* F10 */
typedef struct nlm_char_info
{
char charValue;
char attribute;
} NLM_CHAR_INFO;
typedef FLMBOOL (* KEY_HANDLER)(
struct ftx_info * pFtxInfo,
FLMUINT uiKeyIn,
FLMUINT * puiKeyOut,
void * pvAppData);
typedef struct ftx_window
{
char * pszBuffer;
FLMBYTE * pucForeAttrib;
FLMBYTE * pucBackAttrib;
FLMUINT uiBackground;
FLMUINT uiForeground;
FLMUINT uiUlx;
FLMUINT uiUly;
FLMUINT uiCols;
FLMUINT uiRows;
FLMUINT uiCurX;
FLMUINT uiCurY;
FLMUINT uiOffset;
FLMUINT uiCursorType;
char szName[ CV_MAX_WINNAME_LEN + 4];
FLMBOOL bScroll;
FLMBOOL bOpen;
FLMBOOL bInitialized;
FLMBOOL bForceOutput;
FLMBOOL bNoLineWrap;
FLMUINT uiId;
ftx_window * pWinPrev;
ftx_window * pWinNext;
struct ftx_screen * pScreen;
} FTX_WINDOW;
typedef struct ftx_screen
{
F_MUTEX hScreenMutex;
F_SEM hKeySem;
FLMUINT uiRows;
FLMUINT uiCols;
FLMUINT uiBackground;
FLMUINT uiForeground;
FLMUINT uiCursorType;
char szName[ CV_MAX_WINNAME_LEN + 4];
FLMBOOL bInitialized;
FLMBOOL bChanged;
FLMBOOL bActive;
FLMBOOL bUpdateCursor;
FLMUINT uiSequence;
FLMUINT uiId;
FLMBOOL * pbShutdown;
FTX_WINDOW * pWinImage;
FTX_WINDOW * pWinScreen;
FTX_WINDOW * pWinCur;
ftx_screen * pScreenPrev;
ftx_screen * pScreenNext;
struct ftx_info * pFtxInfo;
} FTX_SCREEN;
typedef struct ftx_info
{
F_MUTEX hFtxMutex;
F_Thread * pBackgroundThrd;
F_Thread * pKeyboardThrd;
F_Thread * pDisplayThrd;
KEY_HANDLER pKeyHandler;
void * pvKeyHandlerData;
FLMUINT uiRows;
FLMUINT uiCols;
FLMUINT uiBackground;
FLMUINT uiForeground;
FLMUINT uiCursorType;
FLMUINT puiKeyBuffer[ CV_KEYBUF_SIZE];
FLMUINT uiCurKey;
FLMUINT uiSequence;
FLMBOOL bExiting;
FLMBOOL bScreenSwitch;
FLMBOOL bRefreshDisabled;
FLMBOOL bEnablePingChar;
FLMBOOL * pbShutdown;
FTX_SCREEN * pScreenCur;
#if defined( FLM_WIN)
PCHAR_INFO pCells;
#elif defined( FLM_NLM)
void * pvScreenHandle;
NLM_CHAR_INFO * pCells;
#endif
} FTX_INFO;
FTXRCODE FTXWinPrintChar(
FTX_WINDOW * pWindow,
FLMUINT uiChar);
FTXRCODE FTXWinPrintStr(
FTX_WINDOW * pWindow,
const char * pszString);
FTXRCODE FTXWinPrintf(
FTX_WINDOW * pWindow,
const char * pszFormat, ...);
FTXRCODE FTXWinCPrintf(
FTX_WINDOW * pWindow,
FLMUINT uiBackground,
FLMUINT uiForeground,
const char * pszFormat, ...);
FTXRCODE FTXWinPrintStrXY(
FTX_WINDOW * pWindow,
const char * pszString,
FLMUINT uiCol,
FLMUINT uiRow);
FTXRCODE FTXWinMove(
FTX_WINDOW * pWindow,
FLMUINT uiCol,
FLMUINT uiRow);
FTXRCODE FTXInit(
const char * pszAppName,
FLMUINT uiCols,
FLMUINT uiRows,
FLMUINT uiBackground,
FLMUINT uiForeground,
KEY_HANDLER pKeyHandler,
void * pvKeyHandlerData,
FTX_INFO ** ppFtxInfo);
FTXRCODE FTXFree(
FTX_INFO ** ppFtxInfo);
FTXRCODE FTXCycleScreensNext(
FTX_INFO * pFtxInfo);
FTXRCODE FTXCycleScreensPrev(
FTX_INFO * pFtxInfo);
FTXRCODE FTXRefreshCursor(
FTX_INFO * pFtxInfo);
FTXRCODE FTXInvalidate(
FTX_INFO * pFtxInfo);
FTXRCODE FTXScreenInit(
FTX_INFO * pFtxInfo,
const char * pszName,
FTX_SCREEN ** ppScreen);
FTXRCODE FTXScreenFree(
FTX_SCREEN ** ppScreen);
FTXRCODE FTXScreenInitStandardWindows(
FTX_SCREEN * pScreen,
FLMUINT uiTitleBackColor,
FLMUINT uiTitleForeColor,
FLMUINT uiMainBackColor,
FLMUINT uiMainForeColor,
FLMBOOL bBorder,
FLMBOOL bBackFill,
const char * pszTitle,
FTX_WINDOW ** ppTitleWin,
FTX_WINDOW ** ppMainWin);
FTXRCODE FTXScreenSetShutdownFlag(
FTX_SCREEN * pScreen,
FLMBOOL * pbShutdownFlag);
FTXRCODE FTXCaptureScreen(
FTX_INFO * pFtxInfo,
FLMBYTE * pText,
FLMBYTE * pForeAttrib,
FLMBYTE * pBackAttrib);
FTXRCODE FTXRefresh(
FTX_INFO * pFtxInfo);
FTXRCODE FTXSetRefreshState(
FTX_INFO * pFtxInfo,
FLMBOOL bDisable);
FTXRCODE FTXAddKey(
FTX_INFO * pFtxInfo,
FLMUINT uiKey);
FTXRCODE FTXWinInit(
FTX_SCREEN * pScreen,
FLMUINT uiCols,
FLMUINT uiRows,
FTX_WINDOW ** ppWindow);
FTXRCODE FTXWinFree(
FTX_WINDOW ** ppWindow);
FTXRCODE FTXWinOpen(
FTX_WINDOW * pWindow);
FTXRCODE FTXWinSetName(
FTX_WINDOW * pWindow,
char * pszName);
FTXRCODE FTXWinClose(
FTX_WINDOW * pWindow);
FTXRCODE FTXWinSetFocus(
FTX_WINDOW * pWindow);
FTXRCODE FTXScreenDisplay(
FTX_SCREEN * pScreen);
FTXRCODE FTXWinPaintBackground(
FTX_WINDOW * pWindow,
FLMUINT uiBackground);
FTXRCODE FTXWinPaintForeground(
FTX_WINDOW * pWindow,
FLMUINT uiForeground);
FTXRCODE FTXWinPaintRow(
FTX_WINDOW * pWindow,
FLMUINT * puiBackground,
FLMUINT * puiForeground,
FLMUINT uiRow);
FTXRCODE FTXWinSetChar(
FTX_WINDOW * pWindow,
FLMUINT uiChar);
FTXRCODE FTXWinPaintRowForeground(
FTX_WINDOW * pWindow,
FLMUINT uiForeground,
FLMUINT uiRow);
FTXRCODE FTXWinPaintRowBackground(
FTX_WINDOW * pWindow,
FLMUINT uiBackground,
FLMUINT uiRow);
FTXRCODE FTXWinSetBackFore(
FTX_WINDOW * pWindow,
FLMUINT uiBackground,
FLMUINT uiForeground);
FINLINE void FTXWinGetCanvasSize(
FTX_WINDOW * pWindow,
FLMUINT * puiNumCols,
FLMUINT * puiNumRows
)
{
flmAssert( pWindow);
if( puiNumCols)
{
*puiNumCols = (FLMUINT)(pWindow->uiCols - ((FLMUINT)2 * pWindow->uiOffset));
}
if( puiNumRows)
{
*puiNumRows = (FLMUINT)(pWindow->uiRows - ((FLMUINT)2 * pWindow->uiOffset));
}
}
FINLINE void FTXWinGetSize(
FTX_WINDOW * pWindow,
FLMUINT * puiNumCols,
FLMUINT * puiNumRows)
{
if( puiNumCols)
{
*puiNumCols = pWindow->uiCols;
}
if( puiNumRows)
{
*puiNumRows = pWindow->uiRows;
}
}
/****************************************************************************
Desc: Retrieves the current cursor row in the specified window
****************************************************************************/
FINLINE FLMUINT FTXWinGetCurrRow(
FTX_WINDOW * pWindow)
{
return( (FLMUINT)(pWindow->uiCurY - pWindow->uiOffset));
}
/****************************************************************************
Desc: Retrieves the current cursor column in the specified window
****************************************************************************/
FINLINE FLMUINT FTXWinGetCurrCol(
FTX_WINDOW * pWindow)
{
return( (FLMUINT)(pWindow->uiCurX - pWindow->uiOffset));
}
FTXRCODE FTXWinGetBackFore(
FTX_WINDOW * pWindow,
FLMUINT * puiBackground,
FLMUINT * puiForeground);
FTXRCODE FTXWinDrawBorder(
FTX_WINDOW * pWindow);
FTXRCODE FTXWinSetTitle(
FTX_WINDOW * pWindow,
const char * pszTitle,
FLMUINT uiBackground,
FLMUINT uiForeground);
FTXRCODE FTXWinSetHelp(
FTX_WINDOW * pWindow,
char * pszHelp,
FLMUINT uiBackground,
FLMUINT uiForeground);
FTXRCODE FTXLineEdit(
FTX_WINDOW * pWindow,
char * pszBuffer,
FLMUINT uiBufSize,
FLMUINT uiMaxWidth,
FLMUINT * puiCharCount,
FLMUINT * puiTermChar);
FLMUINT FTXLineEd(
FTX_WINDOW * pWindow,
char * pszBuffer,
FLMUINT uiBufSize);
FTXRCODE FTXWinSetCursorPos(
FTX_WINDOW * pWindow,
FLMUINT uiCol,
FLMUINT uiRow);
/****************************************************************************
Desc: Initializes the FTX environment.
****************************************************************************/
FINLINE void FTXWinGetCursorPos(
FTX_WINDOW * pWindow,
FLMUINT * puiCol,
FLMUINT * puiRow)
{
flmAssert( pWindow);
if( puiCol != NULL)
{
*puiCol = (FLMUINT)(pWindow->uiCurX - pWindow->uiOffset);
}
if( puiRow != NULL)
{
*puiRow = (FLMUINT)(pWindow->uiCurY - pWindow->uiOffset);
}
}
FTXRCODE FTXWinClear(
FTX_WINDOW * pWindow);
FTXRCODE FTXWinClearXY(
FTX_WINDOW * pWindow,
FLMUINT uiCol,
FLMUINT uiRow);
FTXRCODE FTXWinClearLine(
FTX_WINDOW * pWindow,
FLMUINT uiCol,
FLMUINT uiRow);
FTXRCODE FTXWinClearToEOL(
FTX_WINDOW * pWindow);
FINLINE void ftxLock(
F_MUTEX * phMutex)
{
f_mutexLock( *phMutex);
}
FINLINE void ftxUnlock(
F_MUTEX * phMutex)
{
f_mutexUnlock( *phMutex);
}
/****************************************************************************
Desc: Sets or changes the appearance of the cursor in the specified
window.
****************************************************************************/
FINLINE void FTXWinSetCursorType(
FTX_WINDOW * pWindow,
FLMUINT uiType)
{
ftxLock( &(pWindow->pScreen->hScreenMutex));
pWindow->uiCursorType = uiType;
pWindow->pScreen->bUpdateCursor = TRUE;
ftxUnlock( &(pWindow->pScreen->hScreenMutex));
}
/****************************************************************************
Desc: Retrieves the cursor type of the specified window
****************************************************************************/
FINLINE FLMUINT FTXWinGetCursorType(
FTX_WINDOW * pWindow)
{
return( pWindow->uiCursorType);
}
FTXRCODE FTXScreenGetSize(
FTX_SCREEN * pScreen,
FLMUINT * puiNumCols,
FLMUINT * puiNumRows);
FTXRCODE FTXWinInputChar(
FTX_WINDOW * pWindow,
FLMUINT * puiChar);
FTXRCODE FTXWinTestKB(
FTX_WINDOW * pWindow);
FTXRCODE FTXWinSetScroll(
FTX_WINDOW * pWindow,
FLMBOOL bScroll);
FTXRCODE FTXWinSetLineWrap(
FTX_WINDOW * pWindow,
FLMBOOL bLineWrap);
FTXRCODE FTXWinGetScroll(
FTX_WINDOW * pWindow,
FLMBOOL * pbScroll);
FTXRCODE FTXWinGetScreen(
FTX_WINDOW * pWindow,
FTX_SCREEN ** ppScreen);
FTXRCODE FTXWinGetPosition(
FTX_WINDOW * pWindow,
FLMUINT * puiCol,
FLMUINT * puiRow);
/****************************************************************************
Desc:
****************************************************************************/
FINLINE void FTXSetShutdownFlag(
FTX_INFO * pFtxInfo,
FLMBOOL * pbShutdownFlag)
{
ftxLock( &(pFtxInfo->hFtxMutex));
pFtxInfo->pbShutdown = pbShutdownFlag;
ftxUnlock( &(pFtxInfo->hFtxMutex));
}
FTXRCODE FTXMessageWindow(
FTX_SCREEN * pScreen,
FLMUINT uiBack,
FLMUINT uiFore,
const char * pszMessage1,
const char * pszMessage2,
FTX_WINDOW ** ppWindow);
FTXRCODE FTXDisplayMessage(
FTX_SCREEN * pScreen,
FLMUINT uiBack,
FLMUINT uiFore,
const char * pszMessage1,
const char * pszMessage2,
FLMUINT * puiTermChar);
FTXRCODE FTXDisplayScrollWindow(
FTX_INFO * pFtxInfo,
FTX_SCREEN * pScreen,
const char * pszTitle,
const char * pszMessage,
FLMUINT uiCols,
FLMUINT uiRows);
FTXRCODE FTXGetInput(
FTX_SCREEN * pScreen,
const char * pszMessage,
char * pszResponse,
FLMUINT uiMaxRespLen,
FLMUINT * puiTermChar);
FINLINE void FTXEnablePingChar(
FTX_INFO * pFtxInfo)
{
ftxLock( &(pFtxInfo->hFtxMutex));
pFtxInfo->bEnablePingChar = TRUE;
ftxUnlock( &(pFtxInfo->hFtxMutex));
}
FLMBOOL ftxKBTest( void);
FLMUINT ftxKBGetChar( void);
FLMBOOL ftxBeep( void);
RCODE _ftxDefaultDisplayHandler(
F_Thread * pThread);
RCODE _ftxDefaultKeyboardHandler(
F_Thread * pThread);
FTX_INFO * _getGlobalFtxInfo( void);
void debugFTXCycleScreens( void);
typedef struct WPSCREEN
{
FLMBOOL bPrivate;
FLMUINT uiScreenId;
FTX_SCREEN * pScreen;
FTX_WINDOW * pTitleWin;
FTX_WINDOW * pWin;
WPSCREEN * pNext;
void * hThis;
} WPSSCREEN;
void WpsInit(
FLMUINT uiRows,
FLMUINT uiCols,
const char * pszTitle);
void WpsInitFTX(
FTX_INFO * pFtxInfo);
void WpsExit( void);
void WpsThrdInitUsingScreen(
FTX_SCREEN * pScreen,
char * pszScreenTitle);
FINLINE void WpsThrdInit(
char * pszScreenTitle)
{
WpsThrdInitUsingScreen( NULL, pszScreenTitle);
}
void WpsThrdExit( void);
void WpsChrOut(
char chr);
void WpsWPOut(
FLMINT iWPChr);
void WpsStrOut(
const char * pszString);
void WpsPrintf(
const char * pszFormat, ...);
void WpsCPrintf(
FLMUINT uiBack,
FLMUINT uiFore,
const char * pszFormat, ...);
void WpsOptimize( void);
void WpsScrClr(
FLMUINT uiCol,
FLMUINT uiRow);
FINLINE void WpsScrReset( void)
{
WpsScrClr( 0, 0);
}
void WpsScrPos(
FLMUINT uiCol,
FLMUINT uiRow);
void WpsScrBackFor(
FLMUINT uiBackColor,
FLMUINT uiForeColor);
void WpsLineClr(
FLMUINT uiCol,
FLMUINT uiRow);
FLMUINT WpsLineEd(
char * pszString,
FLMUINT uiMaxLen,
FLMBOOL * pbShutdown);
FINLINE FLMUINT WpsLineEdit(
char * pszString,
FLMUINT uiMaxLen)
{
return( WpsLineEd( pszString, uiMaxLen, NULL));
}
FLMUINT WpsLineEditExt(
char * pszBuffer,
FLMUINT uiBufSize,
FLMUINT uiMaxWidth,
FLMBOOL * pbShutdown,
FLMUINT * puiTermChar);
FINLINE void WpsStrOutXY(
const char * pszString,
FLMUINT uiCol,
FLMUINT uiRow)
{
WpsScrPos( uiCol, uiRow);
WpsStrOut( pszString);
}
void WpsDrawBorder( void);
void WpsCursorSetType(
FLMUINT uiType);
void WpsCurOff( void);
void WpsCurOn( void);
void WpsScrSize(
FLMUINT * puiNumCols,
FLMUINT * puiNumRows);
FLMUINT WpsCurrRow( void);
FLMUINT WpsCurrCol( void);
FLMUINT WpkIncar( void);
FLMUINT WpkGetChar(
FLMBOOL * pbShutdown);
FINLINE FLMUINT WpkLookAhead( void)
{
return( 0);
}
FLMUINT WpkTestKB( void);
FTX_SCREEN * WpsGetThrdScreen( void);
void WpsSetShutdown(
FLMBOOL * pbShutdown);
#endif