PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 1/8 TITLE : Example of a restricted InputLine (Turbo Vision) This document contains 3 files: RANGELIN.HPP RANGELIN.CPP INPUTEST.CPP **** BEGIN FILE: RANGELIN.HPP **** /* -----------------------------------------------------------*/ /* */ /* RANGELIN.HPP */ /* */ /* Copyright (c) Borland International 1991 */ /* All Rights Reserved. */ /* */ /* defines the class RangeLine */ /* */ /* -----------------------------------------------------------*/ #ifndef __RANGELINE_ #define __RANGELINE_ #define Uses_TInputLine #define Uses_TEvent #include // Input Flags masks const ushort ifUpper = 0x001, //allow uppercase characters ifLower = 0x002, //allow owercase characters ifNum = 0x004, //allow digits ifSpace = 0x008, //allow spaces ifRange = 0x010, //a range of values will follow ifDefault = 0x020; //allow all printable chars class RangeLine : public TInputLine { short inputFlags; short begin, end; public: RangeLine(const TRect& bounds, int aMaxLen, ushort iMask, short a = 0, short b=0): PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 2/8 TITLE : Example of a restricted InputLine (Turbo Vision) TInputLine( bounds, aMaxLen ) { inputFlags = iMask; begin = a; end = b; } protected: virtual void handleEvent( TEvent& event ); }; #endif //_RANGELINE_ **** END FILE: RANGELIN.HPP **** **** BEGIN FILE: RANGELIN.CPP **** /* -----------------------------------------------------------*/ /* */ /* RANGELIN.CPP */ /* */ /* Copyright (c) Borland International 1991 */ /* All Rights Reserved. */ /* */ /* class RangeLine */ /* */ /* -----------------------------------------------------------*/ #include "rangelin.hpp" #include //putchar #include //isalpha, isdigit ... #include //strncpy void RangeLine::handleEvent(TEvent& event ) { static char beep = '\a'; if( isprint(event.keyDown.charScan.charCode) ) { if( ifDefault & inputFlags || (ifUpper & inputFlags && isupper(event.keyDown.charScan.charCode))|| (ifLower & inputFlags && islower(event.keyDown.charScan.charCode))|| (ifNum & inputFlags && isdigit(event.keyDown.charScan.charCode))|| PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 3/8 TITLE : Example of a restricted InputLine (Turbo Vision) (ifSpace & inputFlags && isspace(event.keyDown.charScan.charCode)) ) { if( ifRange & inputFlags ) if( (event.keyDown.charScan.charCode < begin) || (event.keyDown.charScan.charCode > end) ) { putchar(beep); clearEvent(event); return; } } else { putchar(beep); clearEvent(event); return; } } TInputLine::handleEvent( event ); } **** END FILE: RANGELIN.CPP **** **** BEGIN FILE: INPUTEST.CPP **** /************************************************************* ** Inputest.cpp ** ** ** Example of a TInputline implementation of a range inputLine. ** ** ** Compile with: Bcc -ml inputest.cpp rangelin.cpp tv.lib ** ***************************************************************/ #define Uses_MsgBox #define Uses_TApplication #define Uses_TEventQueue #define Uses_TEvent #define Uses_TKeys PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 4/8 TITLE : Example of a restricted InputLine (Turbo Vision) #define Uses_TRect #define Uses_TMenuBar #define Uses_TSubMenu #define Uses_TMenuItem #define Uses_TStatusLine #define Uses_TStatusItem #define Uses_TStatusDef #define Uses_TDeskTop #define Uses_TView #define Uses_TWindow #define Uses_TMenu #define Uses_TDialog #define Uses_TStaticText #define Uses_TInputLine #define Uses_TButton #define Uses_TRect #define Uses_TLabel #include //for puts #include "rangelin.hpp" //rangeline #include const int cmTest = 100; class TMyApp : public TApplication { public: TMyApp(); void handleEvent(TEvent& event); void Test(void); protected: static TMenuBar *initMenuBar( TRect ); static TStatusLine *initStatusLine( TRect ); }; TMyApp::TMyApp() : TProgInit( initStatusLine, PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 5/8 TITLE : Example of a restricted InputLine (Turbo Vision) initMenuBar, initDeskTop ) { // //put an event on the queue to bring up the dialog on //start-up. // TEvent e; e.what = evCommand; e.message.command = cmTest; putEvent( e ); } void TMyApp::Test(void) { TDialog *pd = new TDialog( TRect( 10,2,70,20), "Test Dialog"); if( validView( pd ) ) { RangeLine *numLine = new RangeLine( TRect(5,3,25,4), 50, ifNum ); pd->insert(numLine); pd->insert( new TLabel(TRect(4,2,20,3), "~N~umber Input", numLine)); RangeLine *LowerLine = new RangeLine( TRect(5,7,25,8), 50, ifLower); pd->insert(LowerLine); pd->insert( new TLabel(TRect(4,6,20,7), "~L~ower Case", LowerLine)); RangeLine *UpperLine = new RangeLine( TRect(5,11,25,12), 50, ifUpper); pd->insert(UpperLine); pd->insert( new TLabel(TRect(4,10,20,11), "~U~pper Case", UpperLine)); RangeLine *DefaultLine = new RangeLine( TRect(5,14,25,15), 50, ifDefault); PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 6/8 TITLE : Example of a restricted InputLine (Turbo Vision) pd->insert(DefaultLine); pd->insert( new TLabel(TRect(4,13,20,14), "~D~efault", DefaultLine)); RangeLine *UpperLower = new RangeLine( TRect(35,3,55,4), 50, ifUpper|ifLower); pd->insert(UpperLower); pd->insert( new TLabel(TRect(34,2,55,3), "~B~oth Upper and Lower", UpperLower)); RangeLine *NumRange = new RangeLine(TRect(35,7,55,8),50,ifNum|ifRange,'0','5'); pd->insert(NumRange); pd->insert( new TLabel(TRect(34,6,55,7), "~D~igits 0-5",NumRange)); RangeLine *AlphaSpace = new RangeLine( TRect(35,11,55,12), 50, ifUpper|ifLower|ifSpace); pd->insert(AlphaSpace); pd->insert( new TLabel(TRect(34,10,55,11), "~A~lpha w/Space", AlphaSpace)); pd->selectNext(False); deskTop->execView(pd); } destroy(pd); } void TMyApp::handleEvent(TEvent& event) { TApplication::handleEvent( event ); if( event.what == evCommand ) { switch( event.message.command) { case cmTest: Test(); PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 7/8 TITLE : Example of a restricted InputLine (Turbo Vision) break; default: break; } clearEvent( event ); } } TStatusLine *TMyApp::initStatusLine(TRect r) { r.a.y = r.b.y - 1; return new TStatusLine( r, *new TStatusDef( 0, 0xFFFF) + *new TStatusItem( "~Alt-X~ Exit", kbAltX, cmQuit) + *new TStatusItem( "~Alt-T~ Test", kbAltT, cmTest) ); } TMenuBar *TMyApp::initMenuBar( TRect r ) { r.b.y = r.a.y + 1; TMenuItem *two = new TMenuItem("~E~xit", cmQuit, kbAltX); TMenuItem *one = new TMenuItem("~\xF0~", kbAltSpace, new TMenu( *new TMenuItem("~T~est", cmTest, kbAltT)), hcNoContext, two); return ( new TMenuBar( r, new TMenu( *one ) ) ); } int main() PRODUCT : Borland C++ NUMBER : 1555 VERSION : 3.x OS : DOS DATE : October 25, 1993 PAGE : 8/8 TITLE : Example of a restricted InputLine (Turbo Vision) { TMyApp *myApp = new TMyApp(); myApp->run(); return 0; } **** END FILE: INPUTEST.CPP **** DISCLAIMER: You have the right to use this technical information subject to the terms of the No-Nonsense License Statement that you received with the Borland product to which this information pertains.