---------------------------------------------------------------------- TNG SOFT enterprises proudly presents ---------------------------------------------------------------------- EEEEEE AAAAAA SSSSSS YY YY 222222 000000 EE AA AA SS YY YY 22 00 00 EEEE AAAAAA SSSSSS YYYYYY 222222 00 00 EE AA AA SS YY 22 .. 00 00 EEEEEE AA AA SSSSSS YY 222222 .. 000000 VV VV II SSSSSS II OOOOOO NNNNNN --- User's guide --- VV VV II SS II OO OO NN NN VV VV II SSSSSS II OO OO NN NN VVVV II SS II OO OO NN NN VV II SSSSSS II OOOOOO NN NN ---------------------------------------------------------------------- A text mode based user interface ---------------------------------------------------------------------- The easy to use, reliable and powerful C and C++ library of functions, for the DOS environment. This manual may be freely distributed in its original form. Modifications of any kind are prohibited. This manual and software are made available without warranties. TNG SOFT nor the author shall be held liable to the user or any other person or entity regarding any liability, loss, or damage caused or alleged to be caused directly or indirectly by this manual or software. This software is shareware, and must be registered. This library is the property of the author. You are granted the rights to use only. EasyVision is a registered trademark of TNG SOFT. TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- TABLE OF CONTENT Page 2/111 ---------------------------------------------------------------------- C H A P T E R 1 : Overview ........................................7 Why EasyVision? ................................................7 What is EasyVision? ............................................8 Current Version ................................................9 A word about registration ......................................9 What's Next? ..................................................10 About the Author ..............................................11 User support ..................................................11 C H A P T E R 2 : Getting started ................................12 Library specifics .............................................12 Installation ..................................................13 How to use this library .......................................13 How to use this document ......................................14 C H A P T E R 3 : Using EasyVision's templates ...................15 MAIN.C ........................................................15 MAIN.CPP ......................................................16 MODULE.C ......................................................16 MODULE.CPP ....................................................16 MODULE.H ......................................................16 MODULE.HPP ....................................................16 STDMACRO.H ....................................................16 PRJMACRO.H ....................................................17 STDTYPE.H .....................................................17 PRJTYPE.H .....................................................17 PRJMSGS.C .....................................................17 PRJMSGS.H .....................................................18 HEADTEST.C ....................................................18 Examples ......................................................18 C H A P T E R 4 : Using EasyVision's functions ...................19 C H A P T E R 5 : EasyVision's standard functions ................21 ASSERT ........................................................21 ARG_EXIST .....................................................22 ARG_IEXIST ....................................................23 HEAPALLOC .....................................................23 HEAPFREE ......................................................24 TO_UPPER ......................................................24 TO_LOWER ......................................................25 C H A P T E R 6 : EasyVision's keyboard functions ................26 GETKEY ........................................................26 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- TABLE OF CONTENT Page 3/111 ---------------------------------------------------------------------- EXTTOASCII ....................................................27 C H A P T E R 7 : EasyVision's file functions ....................28 FNEWLINE ......................................................28 FSIZE .........................................................28 FCOPY .........................................................29 C H A P T E R 8 : EasyVision's screen functions ..................30 SCR_TEXTATTR ..................................................30 SCR_VSAVE .....................................................31 SCR_VRESTORE ..................................................31 SCR_CSAVE .....................................................32 SCR_CRESTORE ..................................................33 C H A P T E R 9 : EasyVision's string functions ..................34 STR_LEN .......................................................34 STR_CPY .......................................................34 STR_CMP .......................................................35 STR_ICMP ......................................................35 STR_TOUPPER ...................................................36 STR_TOLOWER ...................................................37 STR_PASTOC ....................................................37 STR_CTOPAS ....................................................38 STR_TRIM ......................................................38 STR_INVNAMES ..................................................39 STR_CENTER ....................................................39 C H A P T E R 10 : EasyVision's time functions ...................41 TICKTIMER_INSTALL .............................................41 TICKTIMER_RESET ...............................................41 TICKTIMER_READ ................................................42 DIFFDATE ......................................................42 C H A P T E R 11 : EasyVision's miscellaneous functions ..........44 ANSICOLOR .....................................................44 C H A P T E R 11 : Using EasyVision's classes ....................45 C H A P T E R 12 : EasyVision's tdesktop class ...................47 TDESKTOP::SETTEXTMODE .........................................47 TDESKTOP::GETSIZE .............................................48 TDESKTOP::SETDESKCOLORS .......................................49 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- TABLE OF CONTENT Page 4/111 ---------------------------------------------------------------------- TDESKTOP::SETTEXTURE ..........................................50 TDESKTOP::SETTITLE ............................................50 TDESKTOP::OPEN ................................................51 TDESKTOP::CLOSE ...............................................51 TDESKTOP::REFRESH .............................................52 C H A P T E R 13 : EasyVision's tstatusline class ................53 TSTATUSLINE::SETCOLORS ........................................53 TSTATUSLINE::DISPLAY ..........................................54 TSTATUSLINE::GETMSG ...........................................54 TSTATUSLINE::REFRESH ..........................................55 C H A P T E R 14 : EasyVision's tinput class .....................56 TINPUT::MOUSE_INIT ............................................56 TINPUT::MOUSE_STATUS ..........................................57 TINPUT::MOUSE_SHOW ............................................57 TINPUT::MOUSE_HIDE ............................................58 TINPUT::MOUSE_LB_DOWN .........................................58 TINPUT::MOUSE_POS .............................................58 TINPUT::GET ...................................................59 C H A P T E R 15 : EasyVision's tmenubar class ...................62 TMENUBAR::SETCOLORS ...........................................62 TMENUBAR::SETHLPCTX ...........................................63 TMENUBAR::ADDMENU .............................................64 TMENUBAR::ADDITEM .............................................65 TMENUBAR::ITEMSETAVAIL ........................................66 TMENUBAR::THROUGH .............................................66 TMENUBAR::REFRESH .............................................67 C H A P T E R 16 : EasyVision's twindow class ....................68 TWINDOW::WINSETPOS ............................................69 TWINDOW::WINGETROW ............................................69 TWINDOW::WINGETCOL ............................................70 TWINDOW::WINSETSIZE ...........................................70 TWINDOW::WINGETHEIGHT .........................................71 TWINDOW::WINGETWIDTH ..........................................71 TWINDOW::WINSETCOLORS .........................................71 TWINDOW::WINSETTITLE ..........................................72 TWINDOW::WINSETHLPCTX .........................................73 TWINDOW::WINOPEN ..............................................73 TWINDOW::WINCLOSE .............................................74 TWINDOW::WINCLEAR .............................................74 TWINDOW::WINWRITE .............................................75 TWINDOW::WINTEXT ..............................................77 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- TABLE OF CONTENT Page 5/111 ---------------------------------------------------------------------- TWINDOW::WINTEXTFILE ..........................................78 TWINDOW::WINMOVE ..............................................79 TWINDOW::WINSCROLL ............................................79 TWINDOW::WINONEDGES ...........................................80 TWINDOW::WININSIDE ............................................81 TWINDOW::WININPUT .............................................81 TWINDOW::FIELDSETCOLORS .......................................82 TWINDOW::FIELDCREATE ..........................................83 TWINDOW::FIELDSETASW ..........................................85 TWINDOW::FIELDGETASW ..........................................85 TWINDOW::FIELDINPUT ...........................................86 TWINDOW::BUTTONSETCOLORS ......................................87 TWINDOW::BUTTONCREATE .........................................87 TWINDOW::BUTTONSETAVAIL .......................................89 TWINDOW::BUTTONINPUT ..........................................90 A P P E N D I X A : Keycodes macros ..............................91 A P P E N D I X B : Color codes and symbolic constants ...........95 A P P E N D I X C : Context sensitive help system ................96 What is a context .............................................96 Context numbering .............................................97 Writing the ASCII help file ...................................97 ASCII help file format ........................................98 The help compiler .............................................99 The "*.HLP" and "*.HDX" help files ............................99 A P P E N D I X D : EasyVision's language system variables ......100 Language system variables ....................................100 ev_helpwindowtitle ......................................100 ev_helpwindownohelp .....................................101 ev_helpwindowfileerror ..................................101 ev_wintextdownbutton ....................................101 ev_wintextdown ..........................................101 ev_wintextquitbutton ....................................102 ev_wintextquit ..........................................102 ev_filenotfoundtext .....................................102 ev_filetobig ............................................102 ev_windowmove ...........................................103 ev_statuslinehelp .......................................103 english() and french() functions .............................103 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- TABLE OF CONTENT Page 6/111 ---------------------------------------------------------------------- A P P E N D I X E : EasyVision's demo program ...................104 Things to remember ...........................................104 A P P E N D I X F : How to reach the author .....................106 A P P E N D I X G : Trademarks ..................................107 I N D E X .........................................................108 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 1 : Overview Page 7/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 1 : Overview ---------------------------------------------------------------------- Welcome to EasyVision! This C and C++ library is a collection of routines for the DOS environment that were developed while working on different projects. Because I am big on modularity, I always try to put general purpose code together in a separate function. Therefore, after developing an application, I am often left with many useful functions. Those can be recycled easily and reduce development time of other applications. This package comes in two sections: 1. Day-to-day utility functions, written in C. They can be used in any program. 2. Object-oriented C++ classes, providing an easy to use, reliable and powerful text mode based user interface. I've decided to make this code available to everyone through this library. All those functions were tested thoroughly, and put to work in actual applications. Why EasyVision? ---------------------------------------------------------------------- DOS? Even if the times are to WINDOWS programming, you may be obliged to go with a text mode application if the computers on which they're supposed to run are small machines. However, that doesn't mean that your implementation can't have a professional look! Why reinvent the wheel when someone before you created one that works quite well? One reason would be that professional programmers like to write all of their general purpose functions themselves. They want to know what's inside. But sometimes, you just don't have the time to do it, or simply the need for it. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 1 : Overview Page 8/111 ---------------------------------------------------------------------- This library will give you access to useful routines that will shorten your development time and make your code more reliable. It will effectively free you from having to write many of the common functions your programs might need. EasyVision was first created as a need for a text mode based user interface. After looking at some shareware and commercial user interface packages, and reading comments about them from many C and C++ programmers, it was clear that something was missing. Turbo Vision? When people talked about TURBO VISION from BORLAND, it was their opinion that it was too difficult to use. In my own opinion, I think that TURBO VISION is one of the greatest work of software engineering around. It is the most powerful and professional text mode user interface in existence. It is so well implemented and thought out that it is the standard in text mode interfaces that everyone is following, including EasyVision! (Hope they don't sue me...) But, it is so big that it is a language in itself, and that's what makes people afraid of using it! On the other hand, there are those shareware libraries. Some of them are extraordinarily well done, but are still much too big. I'm thinking about CXL right now. Others are too small and too unreliable to develop serious software. So, what's a C++ programmer's to do? Maybe just what I did, and write all of his interface himself. But what a waste if I'm the only one using it! Why not make it available to everyone? Well, that's what EasyVision is all about! What is EasyVision? ---------------------------------------------------------------------- EasyVision is a collection of short C functions, dealing with the screen, the keyboard, text strings, etc. It is also a text mode based, windowed user interface. It provides a DESKTOP, a STATUSLINE, a MENUBAR, WINDOWS, CONTEXT SENSITIVE ON-LINE HELP, MOUSE SUPPORT and much much more... EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 1 : Overview Page 9/111 ---------------------------------------------------------------------- EasyVision was created with 2 important priorities: 1. It should be EASY to learn and EASY to use. Provide only the big, important functions to the user. Make sure that those functions are REALLY powerful and produce professional looking results! This library hasn't been written to provide every function needed to develop full featured word processors or the likes. It is there to give you a strong and reliable skeleton to build your programs on. It is up to you to come up with the 'meat'. 2. Those functions should be totally bug free and crash proof. EasyVision should validate all parameters to make sure nothing wrong can happen. Don't rely on the programmer's good will to check out its code for out of range or non-initialised parameters. Demo programs That was what EasyVision was supposed to be. Well, EasyVision is still better than that! At this point, if you haven't already done so, you should run the demonstration programs that are in the archives "DEMO1.ZIP" and "HANOI.ZIP", to see the results of not so many lines of C++ codes that uses the EasyVision library... If you find the results interesting, it's up to you to go on. All functions and classes are FULLY documented in the following pages. The source codes of the demonstration programs are also included (and commented) in the archive. It provides you with 'real' examples of how to use this library. Current Version ---------------------------------------------------------------------- The complete history of EasyVision can be found in the "HISTORY.TXT" file, included in the archive. A word about registration ---------------------------------------------------------------------- EasyVision may be freely distributed, without charge except for the media cost. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 1 : Overview Page 10/111 ---------------------------------------------------------------------- EasyVision is made available under the shareware concept. This means that after an evaluation period of 30 days, you should register this software with its author. Furthermore, if you use this software to create your own shareware software, YOU MUST REGISTER EasyVision. Registration grants you a life-time license to use this software, and all following versions or updates. EasyVision is NOT crippled in any way. There is absolutely no difference between the registered or unregistered versions. To register this software, complete the "REGISTER.TXT" registration form included in the archive. Registration is $25 CANADIAN. You will receive through 'snail mail' an official registered user certificate with your registration number. For 35$ CANADIAN, you'll also receive a bonded true type copy of the latest version of the manual. EasyVision and TNG SOFT ENTERPRISES are registered trade marks. What's Next? ---------------------------------------------------------------------- Every time I write a general purpose function, and think it could be used in other project, I will include it in the EasyVision package. Every now and then, a new version of this library will be made public. I will try to improve the functions already there. There won't be many new commands. EasyVision will always remain EASY to use, to leave the programmer at more important tasks. However, I welcome your suggestions to what you think is missing from this package. I will not accept special demands. The purpose of this library is to distribute code that I have in my personal library. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 1 : Overview Page 11/111 ---------------------------------------------------------------------- About the Author ---------------------------------------------------------------------- My name is Remy Gendron . I live in Quebec city, Canada. I'm studying at Laval University in computer sciences (Informatique de genie). I've been programming since I was 14 years old. I started on a Texas Instrument's TI-57 programmable calculator! I then graduated to a Commodore 64. This machine was a breakthrough in computer power, ahead of its time. I've done some BASIC on it, but mostly assembler. Great machine to learn on. The C64 did cost me about as much as you would spend today on a 486! Those of you who really did work with this machine know what could be done with only 64K of memory, when one did put his mind on it (Remember GEOS?). I find it incredible that with the computer power we have today, we don't manage to do something better... I was then away from computers for a couple of years. I returned with a real IBM (AT), then another Commodore (386sx-20), and finally a pieced together (386dx-40). I'm looking forward to a 486dx3-99 or maybe a Pentium? User support ---------------------------------------------------------------------- All of EasyVision's functions and classes have already been tested in real applications. They should behave as indicated. Please take time to carefully read the documentation. The answers to your questions should be in there. The demo programs should also provide a good introduction. I will gladly answer any questions you may have. I'll also welcome any comments or suggestions. I can be reach by netmail/email on FIDONET or INTERNET: FIDONET REMY GENDRON 1:240/1 INTERNET REMY_GENDRON@f1.n240.z1.fidonet.org So, that's about it for now! Have fun and enjoy! Remy Gendron author of EasyVision EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 2 : Getting started Page 12/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 2 : Getting started ---------------------------------------------------------------------- Installing and using the EasyVision library is very simple. Library specifics ---------------------------------------------------------------------- EasyVision's functions are for the DOS environment. They try, but do not always follow the ANSI standard. This software was developed under BORLAND C++ 3.1. --> TURBO VISION's application framework was NOT used in any way to create EasyVision, nor any other 3rd party libraries. It was built from scratch over a period of two years. Memory model The code was compiled under the 'large' memory model. All prototypes were declared as 'far' functions and all pointers were explicitly declared 'huge'. This will provide full compatibility when linking to most memory model sizes. You should consult your compiler documentation about interfacing with different memory models. If you should require that the library be compiled in a different memory model, just get in touch with me. We'll arrange something, if you're a registered user of course! Pointers Unless you REALLY know what you are doing, you should always use 'huge' pointers. 'far' pointers can cause wrap around and comparison problems because they're not normalized. All of EasyVision's functions use 'huge' pointers. Video The video output is done through direct screen writes. This makes for incredibly fast outputs. Going through the BIOS is just to slow. However, under multitaskers like DESKview , who often work in text mode, screen bleeds can occur if the application is running in the background. Use the virtualising options when running under DESKview. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 2 : Getting started Page 13/111 ---------------------------------------------------------------------- Header files All header files use conditional compilation to prevent redeclaration errors at compile time. So, if you're not sure if a header was previously included (possibly by another header file), feel free to include it again. --> They also provide for C++ compilation, using a conditional 'extern "C"' keyword. Installation ---------------------------------------------------------------------- Unpack the archive in a temporary directory. If you haven't done so, you should really print all the USER'S GUIDE for easier reading. It as been formatted to print at 60 lines per pages. And why not take a look at the header files. Put all header files "*.H" and "*.HPP" into an INCLUDE directory. Just to be sure you won't overwrite existing header files, you should make a separate include directory, then include it in the INCLUDE path of your compilator. Then put the EasyVision library "EVISION.LIB" into one of your LIBRARY directories. How to use this library ---------------------------------------------------------------------- To use a library function or class, just include its header file in your source code. YOU MUST NOT write a prototype yourself based on the prototypes written in this manual. The real prototypes may have additional information in them. So, for example: #include /* A standard header file */ #include "stdfcts.h" /* An EasyVision header file */ void main (void) { ... /* Here you can use the desired functions */ ... return ; } EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 2 : Getting started Page 14/111 ---------------------------------------------------------------------- You then have to link all your modules, including the "EVISION.LIB" library. You do that by including "EVISION.LIB" in your project. That's all there is to it! --> If you get errors, that's probably because you compiled your sources in C and included C++ modules. Another source of errors would be if you tried to linked different memory models. Remember the EasyVision was compiled under the 'large' memory model. Validation All arguments to functions are FULLY validated. An EasyVision function will never let you get away if it is called incorrectly. If something is wrong, the program is stopped and a plain English error message tells you what went wrong, where and why! In the function descriptions, when it says that you SHOULD NOT or CANNOT do something, it means that if you do it, you'll get an error message. Your program will not crash! How to use this document ---------------------------------------------------------------------- The following conventions are used in this document: --> All of EasyVision's functions and methods were declared of type 'far'. The following symbols are used in the text: '' Regular C and C++ keywords {} EasyVision's keywords <> Arguments to functions --> Important remarks (that you MUST read) "" Filenames CAPS Keyboard keys Related functions are grouped together in the same module. A chapter is devoted to each module. At the end, reference information can be found in appendixes. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 3 : Using EasyVision's templates Page 15/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 3 : Using EasyVision's templates ---------------------------------------------------------------------- EasyVision provides you with some starting templates for your programs. Templates are important facilities. They bring consistency and productivity in your programming style. If you already have your own style and templates, stick with them. The included templates are for new programmers, or those of you who are still searching for a better way. Of course, those are just suggestions. For instance, the usage and placement of parenthesis, currently generate many hot debates. Some will follow the 'professional' style and open a block this way: while (condition) { statements ; statements ; } While others (and I), do it this way: while (condition) { statement ; statement ; } Choose your own style! The following files are therefore included for your convenience. MAIN.C ---------------------------------------------------------------------- Template for your main source file. This is the only file with a 'main' function declaration. I'd go further by suggesting that ONLY the 'main' function be included. As a rule, your 'main' should only call other functions in your other modules. It should be as short and as well documented as possible. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 3 : Using EasyVision's templates Page 16/111 ---------------------------------------------------------------------- MAIN.CPP ---------------------------------------------------------------------- C++ version of MAIN.C. MODULE.C ---------------------------------------------------------------------- Template for your secondary modules' code files. You could, for example, put all video related functions in a "VIDEO.C" file. MODULE.CPP ---------------------------------------------------------------------- C++ version of MODULE.C. MODULE.H ---------------------------------------------------------------------- Template for your secondary modules' header files. MODULE.HPP ---------------------------------------------------------------------- C++ version of MODULE.H. STDMACRO.H ---------------------------------------------------------------------- Template for your standard macro definitions. Put in this file your standard macros that can be used with many different projects. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 3 : Using EasyVision's templates Page 17/111 ---------------------------------------------------------------------- --> This file contains declarations for {TRUE} and {FALSE} and for all the keyboard keys (II_* macros). PRJMACRO.H ---------------------------------------------------------------------- Template for macros particular to your current project. Put in this file, macros that will be needed by many modules. You should place macros specific to a module in the module's macro declarations section. STDTYPE.H ---------------------------------------------------------------------- Template for your standard type definitions. Put in this file your standard typedefs that can be used with many different projects. --> This file contains declarations for the {bool}, {byte}, {word} and {dword} types. PRJTYPE.H ---------------------------------------------------------------------- Template for typedefs particular to your current project. Put in this file, typedefs that will be needed by many modules. You should place typedefs specific to a module in the module's typedef declarations section. PRJMSGS.C ---------------------------------------------------------------------- Template for your global output messages . When your program outputs something to the user, put it here as a global variable. Then, reference this variable everywhere in your program when you want to output this message. This will allow easy conversion of your program from one language to another. I suggest that all global message variables begin with 'msg_'. For example, msg_fileselect. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 3 : Using EasyVision's templates Page 18/111 ---------------------------------------------------------------------- PRJMSGS.H ---------------------------------------------------------------------- Template to put 'extern' references to your global message variables. For example: extern char huge *msg_fileselect. HEADTEST.C ---------------------------------------------------------------------- Template to test your header files . Often, they will compile correctly because some other files were included before your header. This could cause problems if you intend to use this header file elsewhere, or make them available to other programmers. Your header files should always compile alone by themselves. Test them with this file. Examples ---------------------------------------------------------------------- Templates promote consistency and free you from tedious tasks. Also, having something to start with, you won't as often be afflicted by the 'blank page' syndrome! Take a look at the demo programs to get a feel at project management. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 4 : Using EasyVision's functions Page 19/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 4 : Using EasyVision's functions ---------------------------------------------------------------------- There are two types of functions in the EasyVision library. Functions available in the standard libraries, and new functions. Because I like to compile in the 'large' memory model, all functions have been written to be of type 'far'. They will also accept 'huge' pointers without the need for a typecast. Those functions don't call the standard run-time library. They were entirely rewritten. There is no overhead and they are fully optimized. New functions have been written because they weren't available in the standard libraries. --> Some conventions have been adopted for the function names. Related functions will have the same name prefix. For instance, all string functions will begin by {str_}. --> Function declarations can use types like {bool}, {byte}, {word} and {dword}. See the file STDTYPE.H for a description of those types. A function's description uses the following format: Summary Short description of this function's behavior. Syntax #include "header.h" ReturnType FonctionName ( , ) ; --> YOU MUST NEVER WRITE A PROTOTYPE FOR A FUNCTION YOURSELF. ALWAYS USE THE PROPER HEADER FILES. THEY HAVE ADDITIONAL INFORMATION IN THEM! Remarks Parameters and usage are described here when needed. Return The returned value of the function is explained here. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 4 : Using EasyVision's functions Page 20/111 ---------------------------------------------------------------------- Example Examples of various calls to this function. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 5 : EasyVision's standard functions Page 21/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 5 : EasyVision's standard functions ---------------------------------------------------------------------- The declarations for EasyVision's standard functions are contained in the "STDFCTS.H" header file. Those are the truly general and often used functions that will be required by most of your modules. ASSERT ---------------------------------------------------------------------- Summary This function will ASSERTain that a is {TRUE}. If it is, it will return immediately with no effect, and minimum overhead. If the condition is {FALSE}, the program will be terminated in an orderly fashion. {assert} will clear the screen, display an error message for at least five seconds, and terminate the program with a call to 'exit'. This closes all open files, releases any memory allocated on the heap and exits to DOS. Syntax #include "stdfcts.h" void far assert /* Validates an assertion */ ( bool condition, /* FALSE=terminates */ char huge *fctname, /* Current function */ const char huge *errortext, /* Error message */ int exitcode /* Errorlevel */ ) ; Remarks If evaluates to {FALSE}, the program will be terminated and will be displayed. You should set to the currently executing function. This will help find the location of the error. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 5 : EasyVision's standard functions Page 22/111 ---------------------------------------------------------------------- The error message will be displayed. This can be a string literal, or you can use predefined error messages. These are available from the global variable msg_stderr[]. This is an array of pointers, and here are the messages: 1. "Not enough memory to create an array on the heap." 2. "Not enough memory to create a struct on the heap." 3. "Not enough memory to allocate the requested amount of bytes." 4. "Out of memory." 5. "File not found." 6. "Path not found." 7. "File access denied." 8. "Input/Output error." 9. "Unrecoverable fatal error." {assert} will then return to DOS with an errorlevel of . --> Before calling 'exit', {assert} will set the global variable {assert_err } to {TRUE}. This will allow classes' destructors to know the state of the program when they were called. At any other time, {assert_err} is {FALSE}. Return None. Example assert (nbrecord>0,"datasearch","No data",1); assert (ptr != NULL,"dataprocess",msg_stderr[3],1) ; ARG_EXIST ---------------------------------------------------------------------- Summary This function will check if an argument is present on the command line. Check is case sensitive. Syntax #include "stdfcts.h" int far arg_exist /* Checks for argument */ ( char huge *string /* Argument to search for */ ) ; Remarks The search for the argument is case sensitive. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 5 : EasyVision's standard functions Page 23/111 ---------------------------------------------------------------------- Return If the command line argument exists, its index in the command line argument array will be returned. If the argument does not exist, the function will return 0. See the '_argv' keyword of your compiler for details on accessing command line arguments. Example if (arg_exist ("q")) sound = FALSE ; ARG_IEXIST ---------------------------------------------------------------------- Summary This function will check if an argument is present on the command line. Check is case insensitive. Syntax #include "stdfcts.h" int far arg_iexist /* Checks argument */ ( char huge *string /* Argument to search for */ ) ; Remarks The search for the argument is case insensitive. Return If the command line argument exists, its index in the command line argument array will be returned. If the argument does not exist, the function will return 0. See the '_argv' keyword of your compiler for details on accessing command line arguments. Example if (arg_iexist ("bios")) directvideo = FALSE ; HEAPALLOC ---------------------------------------------------------------------- Summary {heapalloc} replaces 'farmalloc'. Syntax #include "stdfcts.h" void huge * far heapalloc /* Allocates far heap */ ( dword nbytes /* Asks for a block long */ ) ; Remarks Allocates bytes on the far heap. {dword} is an 'unsigned long int' and is declared in "STDTYPE.H". EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 5 : EasyVision's standard functions Page 24/111 ---------------------------------------------------------------------- Return This function returns a 'huge' pointer. Be sure the pointer variable, who will receive the pointer to the allocated memory, is of type 'huge' also. Example char huge *ptr ; ptr = heapalloc (sizeof (object)) ; HEAPFREE ---------------------------------------------------------------------- Summary {heapfree} replaces 'farfree'. Syntax #include "stdfcts.h" void far heapfree /* Deallocates heap */ ( void huge *block /* Ptr to block to free */ ) ; Remarks The only difference from 'farfree' is that this function offers the convenience of accepting a 'huge' pointer as an argument. Return None. Example char huge *ptr ; ptr = heapalloc (sizeof (object)) ; // Allocates memory heapfree (ptr) ; // Frees memory ptr = NULL ; // Always a good idea TO_UPPER ---------------------------------------------------------------------- Summary {to_upper} replaces 'toupper'. Syntax #include "stdfcts.h" int far to_upper /* Converts to uppercase */ ( int ch /* Character to be converted */ ) ; Remarks The standard library 'toupper' function has a problem when you pass an 'int' to it. It considers only the LSB and could wrongly make the conversion. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 5 : EasyVision's standard functions Page 25/111 ---------------------------------------------------------------------- Return An 'int'. The converted letter if it was necessary. Example command = to_upper (command) ; TO_LOWER ---------------------------------------------------------------------- Summary {to_lower} replaces 'tolower'. Syntax #include "stdfcts.h" int far to_lower /* Converts to lowercase */ ( int ch /* Character to be converted */ ) ; Remarks The standard library 'tolower' function has a problem when you pass an 'int' to it. It considers only the LSB and could wrongly make the conversion. Return An 'int'. The converted letter if it was necessary. Example command = to_lower (command) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 6 : EasyVision's keyboard functions Page 26/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 6 : EasyVision's keyboard functions ---------------------------------------------------------------------- The declarations for EasyVision's keyboard functions are contained in the "KEYBFCTS.H" header file. GETKEY ---------------------------------------------------------------------- Summary This is a replacement for the familiar 'getch' function. Syntax #include "keybfcts.h" int far getkey /* Reads a key from keyboard */ ( int filter, /* Filter (0 = all keys) */ bool buffer /* TRUE: Read from keyb buffer */ ) ; Remarks One of 'getch' weakness is its inability to deal with the way extended keys are internally represented. Those are the keys that don't have an ASCII code associated with them. For example, the function, arrow and editing keys all return an extended keycode. This new {getkey} function will deal with these extended keys by adding 256 to the extended keycode. Appendix A lists all the extended keycodes currently available on an extended keyboard. You MUST specify a to be used by the {getkey} function. A filter of 0 will allow any key to be read and returned by the function. You can also provide the ASCII or extended keycode (remember to add 256 to the real code) of the only key allowed to be returned by the function. This provides an easy way to WAIT FOR a specific key. The function will then return with that keycode, only when that key has been pressed. --> If you set to {FALSE}, {getkey} will flush the keyboard buffer before reading a key. Otherwise, it will read from the buffer if keys have been previously pressed. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 6 : EasyVision's keyboard functions Page 27/111 ---------------------------------------------------------------------- --> Beware of NEVER setting to an impossible key entry, or you will be trapped by the {getkey} function! Return If a normal key was pressed, the returned value is an 'int' representing the ASCII code of that key. (1-255) If an extended key was pressed, the returned value is an 'int' representing the extended keycode plus 256. (256-396) Example getkey (0) ; getkey (13) ; /* Wait for the ENTER key */ EXTTOASCII ---------------------------------------------------------------------- Summary Converts an ALT-(letter or digit) key combination to its equivalent, single letter or digit. Syntax #include "keybfcts.h" int far exttoascii /* Converts 'ALT-letter|digit' */ ( int code /* Code to be converted */ ) ; Remarks is the value as returned by the {getkey} function. For example, {II_A_A} (Alt-A) is returned by {getkey} as 286. Given 286, {exttoascii} will then return 65, the ASCII code for the letter 'A'. Return The ASCII code of the letter or digit in the ALT-key combination. If is not an ALT-(letter or digit) combination, is returned unchanged. --> If the value returned by this function is of a letter, the letter will always be promoted to uppercase. Example in = getkey (0,FALSE) ; in = exttoascii (in) ; /* Checks for Alt-key combi */ EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 7 : EasyVision's file functions Page 28/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 7 : EasyVision's file functions ---------------------------------------------------------------------- The declarations for EasyVision's file functions are contained in the "FILEFCTS.H" header file. FNEWLINE ---------------------------------------------------------------------- Summary Goes to start of next line in a text file. Syntax #include "filefcts.h" int far fnewline /* Goes to next line */ ( FILE *f /* Ptr to opened stream */ ) ; Remarks The end of a text line is marked by the character '\n'. Return If the start of a new line was found, '\n' is returned. If 'EOF' (end of file) was reach before a new line, 'EOF' is returned. Example error = fnewline (text) ; FSIZE ---------------------------------------------------------------------- Summary Returns size of a file in bytes, as displayed from a directory listing. Syntax #include "filefcts.h" dword far fsize /* Returns file size in bytes */ ( FILE *f /* Ptr to opened stream */ ) ; Remarks In a text file, the new line character is in fact two bytes long. DOS stores '\n' as a combination of '\n' and '\r'. So, the length of a text file will not match the number of characters read with 'fgetc'. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 7 : EasyVision's file functions Page 29/111 ---------------------------------------------------------------------- Return {fsize} returns the size of the file in bytes as a {dword}. {dword} is defined in "STDTYPE.H" as an 'unsigned long int'. Example size = fsize (text) ; FCOPY ---------------------------------------------------------------------- Summary Copies a file. Syntax #include "filefcts.h" int far fcopy /* Copies a disk file */ ( char huge *srcpath, /* Path to source file */ char huge *destpath, /* Path to destination file */ bool verify /* TRUE: Verify ON */ ) ; Remarks is copied to . Paths are expressed in the form [d:][path]filename.ext. --> No wildcards are allowed. If is set to {TRUE}, the two files will then be reread and compared. This is different from DOS's 'verify', who doesn't reread the files, and is therefore a little slower. Return If the copy was successful and error free, {fcopy} returns 0. On error, 1 is returned. Example error =fcopy ("autoexec.bat","autoexec.bak",TRUE) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 8 : EasyVision's screen functions Page 30/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 8 : EasyVision's screen functions ---------------------------------------------------------------------- The declarations for EasyVision's screen functions are contained in the "SCRFCTS.H" header file. SCR_TEXTATTR ---------------------------------------------------------------------- Summary This function will set the background and foreground colors used for video outputs by the "CONIO.H" module. It will support bright background colors. Syntax #include "scrfcts.h" void far scr_textattr /* Sets colors of outputs */ ( int back, /* Background color */ int fore /* Foreground color */ ) ; Remarks The normal 'textbackground' function does not allow bright background colors. {scr_textattr} will do so. --> {tdesktop::settextmode] allows you to turn on the ability to use bright background colors. When this is so, all sixteen possible colors can be used when you have to specify a background color anywhere in EasyVision. Therefore, all changes of colors should be done with calls to {scr_textattr}. You will now be able to have 'BLACK' text on a (really) 'WHITE' background. Return None. Example scr_textattr (WHITE,BLACK) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 8 : EasyVision's screen functions Page 31/111 ---------------------------------------------------------------------- SCR_VSAVE ---------------------------------------------------------------------- Summary This function will save the current screen and video attributes in a 'text_info' structure. It has exactly the same effects as a call to 'gettextinfo '. The difference is that it can also save the actual screen content. Syntax #include "scrfcts.h" void far scr_vsave /* Saves all video informations */ ( struct text_info huge *ti, /* Ptr to text_info */ char huge*huge *savedscr /* Ptr to ptr */ ) ; Remarks All members of the 'text_info' structure are filled with this function. is a huge pointer to a huge char pointer. If this argument is provided, the screen content will also be saved to a buffer in the heap, and the huge pointer to char will be set to point to this buffer. If you don't want to save the screen area, set to 'NULL'. --> The cursor's attributes are saved, but will not be restored by {scr_vrestore}. You must use the {scr_csave} and {scr_crestore}. Return None. Example struct text_info ti ; char huge *scrbfr ; scr_vsave (&ti,&scrbfr) ; SCR_VRESTORE ---------------------------------------------------------------------- Summary This function will restore the screen video mode and the text window size from a 'text_info' structure. It can also restore the screen content if it was saved by a previous call to {scr_vsave}. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 8 : EasyVision's screen functions Page 32/111 ---------------------------------------------------------------------- Syntax #include "scrfcts.h" void far scr_vrestore /* Restores video info */ ( struct text_info huge *ti, /* Ptr to text_info */ char huge*huge *savedscr /* Ptr to ptr */ ) ; Remarks The 'text_info' structure must have been previously filled with {scr_vsave}. The same is true for the previous screen content. --> If the screen area was not previously saved, set to 'NULL'. The memory will be deallocated when the screen content is restored, so you can't restore it more than once. Return None. Example scr_vrestore (&ti,&scrbfr) ; SCR_CSAVE ---------------------------------------------------------------------- Summary This function will save all cursor attributes, INCLUDING THE CURSOR TYPE (shape), in a {cur_info} structure. Those attributes are: colors, x pos, y pos and cursor shape. Syntax #include "scrfcts.h" void far scr_csave /* Saves all cursor attributes */ ( struct cur_info huge *ci /* Ptr to cur_info */ ) ; Remarks The {cur_info} structure is as follows, and is defined in "SCRFCTS.H". struct cur_info { byte attribute ; /* Cursor colors */ byte curx ; /* Cursor X position */ byte cury ; /* Cursor Y position */ word curtype ; /* Cursor type */ } ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 8 : EasyVision's screen functions Page 33/111 ---------------------------------------------------------------------- Return None. Example struct cur_info ci ; scr_csave (&ci) ; SCR_CRESTORE ---------------------------------------------------------------------- Summary This function will restore all cursor attributes, INCLUDING THE CURSOR TYPE (shape), from a {cur_info} structure. Syntax #include "scrfcts.h" void far scr_crestore /* Restores cursor attributes */ ( struct cur_info huge *ci /* Ptr to cur_info */ ) ; Remarks The cursor's attributes must have been previously saved with {scr_csave}. Return None. Example struct cur_info ci ; scr_csave (&ci) ; scr_crestore (&ci) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 34/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 9 : EasyVision's string functions ---------------------------------------------------------------------- The declarations for EasyVision's string functions are contained in the "STRFCTS.H" header file. STR_LEN ---------------------------------------------------------------------- Summary This is a 'huge' version of 'strlen'. It returns the length of a string. Syntax #include "strfcts.h" size_t far str_len /* Returns the length of a string */ ( char huge *string /* Huge ptr to a string */ ) ; Remarks The only difference with 'strlen' is that this function offers the convenience of accepting a 'huge' pointer as argument. Return The length of the string. The type 'size_t' is defined in "STDIO.H" as an 'unsigned int'. Example length = str_len (text) ; STR_CPY ---------------------------------------------------------------------- Summary This is a 'huge' version of 'strcpy'. It copies a string into another, including the terminating '\0' character. Syntax #include "strfcts.h" char huge * far str_cpy /* Copies a string */ ( char huge *dest, /* Destination array */ char huge *src /* Source string */ ) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 35/111 ---------------------------------------------------------------------- Remarks The only difference from 'strcpy' is that this function offers the convenience of accepting 'huge' pointers as arguments. Return A 'huge' pointer to the destination string. Example char huge *string ; string = heapalloc (20) ; str_cpy (string,"Hello there !") ; STR_CMP ---------------------------------------------------------------------- Summary This is a 'huge' version of 'strcmp '. It compares one string to another. Syntax #include "strfcts.h" int far str_cmp /* Compares one string to another */ ( char huge *string1, /* First string */ char huge *string2 /* Second string */ ) ; Remarks The only difference from 'strcmp' is that this function offers the convenience of accepting 'huge' pointers as arguments. Return {str_cmp} returns a value that is : < 0, if is less than = 0, if is the same as > 0, if is greater than Example if (str_cmp (name[i],name[i+1]) > 0) { /* Invert string (bubble sort) */ } STR_ICMP ---------------------------------------------------------------------- Summary This is a 'huge' version of 'stricmp'. It compares one string to another, without case sensitivity. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 36/111 ---------------------------------------------------------------------- Syntax #include "strfcts.h" int far str_icmp /* Case insensitive compares */ ( char huge *string1, /* First string */ char huge *string2 /* Second string */ ) ; Remarks The only difference from 'stricmp' is that this function offers the convenience of accepting 'huge' pointers as arguments. Return {str_icmp} returns a value that is : < 0, if is less than = 0, if is the same as > 0, if is greater than Example if (str_icmp (name[i],name[i+1]) > 0) { /* Invert string (bubble sort) */ } STR_TOUPPER ---------------------------------------------------------------------- Summary This function transposes a string to uppercase. Syntax #include "strfcts.h" void far str_toupper /* Sets string to upper case */ ( char huge *string /* Huge ptr to a string */ ) ; Remarks None. Return None. Example str_toupper (name) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 37/111 ---------------------------------------------------------------------- STR_TOLOWER ---------------------------------------------------------------------- Summary This function transposes a string to lowercase. Syntax #include "strfcts.h" void far str_tolower /* Sets string to lower case */ ( char huge *string /* Huge ptr to a string */ ) ; Remarks None. Return None. Example str_tolower (name) ; STR_PASTOC ---------------------------------------------------------------------- Summary This function translates a string from PASCAL's to C's internal format. Syntax #include "strfcts.h" void far str_pastoc /* Converts a string to c */ ( char huge *string /* Ptr to string */ ) ; Remarks All characters in the string will be shifted left 1 space and a '\0' will be appended at the end of the string. This is useful is you're reading records written in PASCAL format. Return None. Example str_pastoc (name) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 38/111 ---------------------------------------------------------------------- STR_CTOPAS ---------------------------------------------------------------------- Summary This function translates a string from C's to PASCAL's internal format. Syntax #include "strfcts.h" void far str_ctopas /* Converts a string to pascal */ ( char huge *string /* Ptr to string */ ) ; Remarks All characters in the string will be shifted right 1 space, overwriting the terminating '\0'. The length of the string will then be put in the first byte of the array. --> The string MUST be 255 or fewer characters long. This is useful is you're reading records written in PASCAL'S format, converted them to C'S with {str_pastoc}, then reconverting to PASCAL's before writing to disk. Return None. Example str_ctopas (name) ; STR_TRIM ---------------------------------------------------------------------- Summary This function removes leading and trailing spaces from a string. Syntax #include "strfcts.h" void far str_trim /* Normalises string */ ( char huge *string /* Ptr to string */ ) ; Remarks Useful when normalising an input. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 39/111 ---------------------------------------------------------------------- Example str_trim (name) ; STR_INVNAMES ---------------------------------------------------------------------- Summary This function inverts first and last names in a name string. Syntax #include "strfcts.h" void far str_invnames /* Inverts string */ ( char huge *string /* Ptr to string */ ) ; Remarks A name string is composed of 1 or more clusters of characters. Clusters are packets separated from each other by 1 or more spaces. {str_invnames} will take the first cluster and move it to the end of the string. This could be useful if you're doing a sort by last names then first names, but your name strings are in the form first then last. Return None. Example str_invnames (name) ; "Remy" becomes "Remy" "Remy Gendron" becomes "Gendron Remy" "Remy J. Gendron" becomes "J. Gendron Remy" "This is some string" becomes "is some string This" STR_CENTER ---------------------------------------------------------------------- Summary This function centers a string within a given area. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 9 : EasyVision's string functions Page 40/111 ---------------------------------------------------------------------- Syntax #include "strfcts.h" char huge * far str_center /* Centers a string */ ( char huge *string, /* Ptr to string */ int area_length /* Length of area */ ) ; Remarks The original is not modified. The new string will be padded with blanks, if necessary, to be centered in . The function will discard the part of the string that is longer than 255 characters. Return This function will create a new string, and return a ptr to a static string defined in the string module. --> You MUST not try to free this string. Example printf (str_center ("Center of the screen",80)) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 10 : EasyVision's time functions Page 41/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 10 : EasyVision's time functions ---------------------------------------------------------------------- The declarations for EasyVision's time functions are contained in the "TIMEFCTS.H" header file. TICKTIMER_INSTALL ---------------------------------------------------------------------- Summary This function installs or removes a tick counter. Syntax #include "timefcts.h" void far ticktimer_install (void) ;/* Installs timer */ Remarks Ticks are PC's clock units. They are 1/18 second long. The ticktimer routines will allow you to count those ticks. The first call to {ticktimer_install} will install an interrupt, whose purpose is to count ticks. A second call to the {ticktimer_install} will remove the interrupt. Return None. Example ticktimer_install () ; TICKTIMER_RESET ---------------------------------------------------------------------- Summary This function resets the tick count to zero. Syntax #include "timefcts.h" void far ticktimer_reset (void) ; /* Resets counter */ Remarks After installation of the interrupt, the tick count is undefined. You must reset the count before using the {ticktimer_read} function. Also, you can reset the count to zero anytime you like. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 10 : EasyVision's time functions Page 42/111 ---------------------------------------------------------------------- --> Using this function will introduce a random delay of up to 1/18 second. The function will wait for the beginning of the next tick before returning. This will warranty that tick #1 will really be 1 tick long. Return None. Example ticktimer_reset () ; TICKTIMER_READ ---------------------------------------------------------------------- Summary This function returns the current tick count. Syntax #include "timefcts.h" dword far ticktimer_read (void) ; /* Returns count */ Remarks After installation of the interrupt, the tick count is undefined. You must reset the count before using the {ticktimer_read} function. Using this function does not reset the counter. Return The number of ticks since {ticktimer_reset} was last used. {ticktimer_read} returns a {dword}. {dword} is defined in "STDTYPE.H" as an 'unsigned long int'. Example dword count ; ticktimer_install () ; /* Installs timer */ ticktimer_reset () ; /* Resets timer to 0 */ function (argument) ; /* Calls your function */ count = ticktimer_read () ; /* Gets tick count */ ticktimer_install () ; /* De-installs timer */ DIFFDATE ---------------------------------------------------------------------- Summary Calculates absolute number of days between two dates. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 10 : EasyVision's time functions Page 43/111 ---------------------------------------------------------------------- Syntax #include "timefcts.h" dword far diffdate /* Number of days between dates */ ( int day1, /* 1st date: day (1-31) */ int month1, /* 1st date: month (1-12) */ int year1, /* 1st date: year (xxxx) */ int day2, /* 2nd date: day (1-31) */ int month2, /* 2nd date: month (1-12) */ int year2 /* 2nd date: year (xxxx) */ ) ; Remarks day1/day2 : Days of date 1 and 2. (1-31) month1/month2 : Months of date 1 and 2. (1-12) year1/year2 : Years of date 1 and 2. (1583 and after) Return The absolute number of days between the 2 dates. {diffdate} returns a {dword}. {dword} is defined in "STDTYPE.H" as an 'unsigned long int'. Example dword count ; count = diffdate (userday, usermonth, useryear, todayday, todaymonth, todayyear) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 11 : EasyVision's miscellaneous functions Page 44/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 11 : EasyVision's miscellaneous functions ---------------------------------------------------------------------- The declarations for EasyVision's miscellaneous functions are contained in the "MISCFCTS.H" header file. ANSICOLOR ---------------------------------------------------------------------- Summary Converts normal background and foreground color codes to color codes for ANSI escape sequences. Syntax #include "miscfcts.h" void far ansicolor /* Converts color codes to ANSI */ ( int fore, /* Fore and back colors */ int back, int huge *ansbold, /* ESC sequence */ int huge *ansfore, int huge *ansback ) ; Remarks fore, back : Standard screen colors. *ansbold : Ptr to int to return bold value. *ansfore : Ptr to int to return fore value. *ansback : Ptr to int to return back value. To interpret ANSI escape sequences, the ANSI.SYS driver (or its equivalent) must be loaded. Return None. Example int bold, fore, back ; ansicolor (LIGHTGREEN,BLACK,&bold,&fore,&back) ; printf ("\x1b[%d;%d;%dm",bold,fore,back) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 11 : Using EasyVision's classes Page 45/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 11 : Using EasyVision's classes ---------------------------------------------------------------------- The EasyVision library has five classes . They provide a desktop, a statusline, a menubar, windows, user inputs and mouse support. Those classes are fully described in the following pages. --> All classes interact with one another. Don't try to use only one of them. You must work with EasyVision as it was meant to be used. Every method is declared as 'far' and when they take pointers as parameters, those pointers are of type 'huge'. Conventions have been adopted for the methods' names. Related methods will have the same name prefix. For example, all window related functions begin by {win_}. --> Methods declarations can use types like {bool}, {byte}, {word} and {dword}. See the file "STDTYPE.H" for a description of those types. --> Parameters to C++ functions can have default values. If you don't supply a value, the default value will be used. However, rules apply to this usage of default parameters. Refer to your C++ documentations for an explanation of those rules. A classe's description uses the following format: First, the description of the class itself, its behavior, how it is related to the other classes and the interface. Then, each member function of the class is presented as in the following: Summary Short description of this function's behavior. Syntax #include "header.h" ReturnType FunctionName ( , ) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 11 : Using EasyVision's classes Page 46/111 ---------------------------------------------------------------------- --> YOU MUST NEVER WRITE YOURSELF A PROTOTYPE FOR A FUNCTION. ALWAYS USE THE PROPER HEADER FILES. THEY HAVE ADDITIONAL INFORMATION IN THEM! --> C++ functions' header provide for optional arguments. IF YOU WANT TO INCLUDE AN OPTIONAL PARAMETER, ALL PARAMETERS BEFORE THAT ONE MUST BE INCLUDED AS WELL. Refer to your compiler's documentation. Remarks Parameters and usage are described here when needed. Return The returned value of the method is explained here. Example Examples of various calls to this method. Using classes is quite easy! Windows For the {twindow} class, you firsts declare a pointer to this class. Then you instantiate (create) an object of this type with the operator 'new'. Now you can call the classe's member functions with the '->' operator. When you're finished, you free the memory taken by this class instance with 'delete'. The others For the other classes, {tdesktop}, {tstatusline}, {tmenubar} and {tinput}, you can only have one instance of each. To make it easier, they all have been instantiated. You don't need to create them. You just use them right away. You access their member functions with the '.' operator. Many examples are available in the source codes of the EasyVision's demo programs. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 12 : EasyVision's tdesktop class Page 47/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 12 : EasyVision's tdesktop class ---------------------------------------------------------------------- The {tdesktop} class is the first one to be used in a program that uses the EasyVision user interface. This class is responsible for the background on which the statusline, the menubar and windows will be displayed. This class will save the screen content before the program was executed, initialise the video screen to the video mode of your choice, and display the desktop. You will also call this class at the end of your program to restore the previous video mode, restore the previous screen and reset default colors and cursor position. --> An instance has already been globally declared and is called desktop. Only one instance of {tdesktop} can be used in a program. As a result, you will never declare and create another instance. --> The desktop allows your programs to use bright background colors. The desktop has built in default values. Only one call is required to do the work. The desktop will autosize itself to the screen. However, if you would like to change those default behaviors, other functions are provided to do so. On the following pages, you will find each of its member functions. Examples of using the desktop object are given in the source codes of the EasyVision's demo programs. TDESKTOP::SETTEXTMODE ---------------------------------------------------------------------- Summary Sets the textmode in which {open} will draw the desktop. Also sets the availability of bright background colors. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 12 : EasyVision's tdesktop class Page 48/111 ---------------------------------------------------------------------- Syntax #include "tdesktop.hpp" void far tdesktop::settextmode // Sets textmode ( int mode=C80, // Textmode code number bool brightbackground=FALSE // True = bright colors ) ; Remarks This has no effect on the current textmode. It will only take effect when {open} is called. This call is optional. If it is not made before a call to {open}, textmode C80 (3, color 80 columns) is assumed and bright background colors will not be used. Symbolic Value Text mode LASTMODE -1 Previous text mode BW40 0 Black and white, 40 cols C40 1 Color, 40 columns BW80 2 Black and white, 80 cols C80 3 Color, 80 columns MONO 7 Monochrome, 80 columns C4350 64 EGA 43-line, VGA 50-line To use the symbolic constants, "CONIO.H" must be included. --> By setting to {TRUE}, you will then be able to use all 16 colors for the background. As a drawback, blinking characters won't be available. Return None. Example desktop.settextmode (C4350,TRUE) ; TDESKTOP::GETSIZE ---------------------------------------------------------------------- Summary Returns desktop's current size. Syntax #include "tdesktop.hpp" void far tdesktop::getsize // Returns desktop's size ( int huge *height, // Ptrs to ints to return size int huge *width ) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 12 : EasyVision's tdesktop class Page 49/111 ---------------------------------------------------------------------- Remarks The size returned in and is the ACTUAL desktop's size. If you changed the video mode with {settextmode}, but haven't called {open} yet, the new size won't be returned. --> When other parts of your program need to know the actual desktop's size , they should use this function instead of 'gettextinfo'. Return None. Example int screenheight ; int screenwidth ; desktop.getsize (&screenheight,&screenwidth) ; TDESKTOP::SETDESKCOLORS ---------------------------------------------------------------------- Summary Sets the colors in which {open} or {refresh} will draw the desktop. Also selects the clock's colors. Syntax #include "tdesktop.hpp" void far tdesktop::setdeskcolors // Desktop's colors ( int back=LIGHTGRAY, // Desktop's background color int fore=BLUE, // Desktop's foreground color int clockback=RED, // Clock's color int clockfore=WHITE ) ; Remarks This has no effect on the current colors. It will only be used when {open} or {refresh} will be called. This call is optional. If {setdeskcolors} is not called before a call to {open}, 'BLUE' on 'LIGHTGRAY' is assumed for the desktop and 'WHITE' on 'RED' for the clock. See appendix B for a list of available colors, color codes and symbolic constants. --> The desktop displays an interrupt driven clock in the upper right corner. Return None. Example desktop.setdeskcolors (BLACK,LIGHTGRAY,BLUE,WHITE) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 12 : EasyVision's tdesktop class Page 50/111 ---------------------------------------------------------------------- TDESKTOP::SETTEXTURE ---------------------------------------------------------------------- Summary Sets the character with which {open} or {refresh} will draw the desktop. Syntax #include "tdesktop.hpp" void far tdesktop::settexture // Set's desktop texture ( char asciicode=#176 // ASCII code to use ) ; Remarks You must provide the character used to draw the desktop, in the form of its ASCII code. Only ASCII codes greater or equal to 32 are accepted. This has no effect on the current screen. It will only be used when {open} or {refresh} will be called. This call is optional. If {settexture} is not called before a call to {open}, ASCII code 176 is assumed. Return None. Example desktop.settexture (' ') ; // Plain desktop TDESKTOP::SETTITLE ---------------------------------------------------------------------- Summary Sets the title, and title colors displayed at the very top line of the desktop. Syntax #include "tdesktop.hpp" void far tdesktop::settitle // Sets desktop's title ( char huge *text=NULL, // Desktop's title int back=EV_DEF, // Title's background color int fore=EV_DEF // Title's foreground color ) ; Remarks The title's colors are optional. If they are not provided, the desktop's colors will be used. This is used only if you do not intend to have a menubar, or if you will have something displayed before the menubar is created. This has no effect on the current desktop. It will only be used when {open} or {refresh} will be called. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 12 : EasyVision's tdesktop class Page 51/111 ---------------------------------------------------------------------- This call is optional. If {settitle} is not called before a call to {open}, no title will be displayed. To reset a previously defined title, don't use any argument. You can give a pointer argument that points to a text of any length, but only the part of the title that will fit on the titlebar will be displayed. So don't worry about the length of your title... Return None. Example desktop.settitle ("EasyVision 2.0",RED,BLACK) ; TDESKTOP::OPEN ---------------------------------------------------------------------- Summary Opens the desktop. Syntax #include "tdesktop.hpp" void far tdesktop::open () ; // Opens desktop Remarks This will save the screen before the program was started, initialise the video screen and then display the desktop according to the default values, or those set by the previous functions. This call is NOT optional. --> You cannot reopen an already opened desktop. You must use the {refresh} function for that action, or first close it. If the desktop as been closed, it can then be re- opened. This could be done for instance if you were to shell to DOS or to another program. Return None. Example desktop.open () ; TDESKTOP::CLOSE ---------------------------------------------------------------------- Summary Closes the desktop. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 12 : EasyVision's tdesktop class Page 52/111 ---------------------------------------------------------------------- Syntax #include "tdesktop.hpp" void far tdesktop::close () ; // Restores screen Remarks This will restore the video screen as it was before the desktop was opened. This call is NOT optional. You must first {close} the desktop with this function if you want to re-open it. --> {close} does not reset any of the desktop settings. You can easily re-open it after a shell to DOS for example. Return None. Example desktop.close () ; TDESKTOP::REFRESH ---------------------------------------------------------------------- Summary The desktop has a {refresh} function that will redraw the screen. Using this function can be DANGEROUS... Syntax #include "tdesktop.hpp" void far tdesktop::refresh () ; // Redraws desktop Remarks The refresh function will use the current values for colors, texture, etc... not the values when it was opened. This means that you can change the desktop colors for instance, and then {refresh} it. --> IN EASYVISION, WINDOWS CANNOT BE REFRESHED. YOU MUST MAKE ABSOLUTELY CERTAIN THAT THIS FUNCTION IS NOT AND CANNOT BE CALLED WHEN WINDOWS ARE OPENED, OR YOU WILL BE IN BIG TROUBLE. Return None. Example desktop.refresh () ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 13 : EasyVision's tstatusline class Page 53/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 13 : EasyVision's tstatusline class ---------------------------------------------------------------------- The {tstatusline} class allows your program to easily display information on the last line of the screen. --> An instance has already been globally declared and is called statusline. Only one instance of {tstatusline} can be used in a program. As a result, you will never declare and create another instance. The statusline has built in default values. Only one call is required to do the work. The statusline will autosize itself to the screen. However, if you would like to change those default behaviors, other functions are provided to do so. You can manually use the statusline by calling its {display} member function. Most of the time however, you won't. Each time you create an object in EasyVision, let it be a window, a button or an input field, you assign a short text to it. When this object is selected, this text will be automatically displayed on the statusline. On the following pages, you will find each of its member functions. Examples of using the statusline object are given in the source codes of the EasyVision's demo programs. TSTATUSLINE::SETCOLORS ---------------------------------------------------------------------- Summary Sets the background, foreground and highlight colors used by the {display} member function, when writing to the statusline. Syntax #include "tstatusline.hpp" void far tstatusline::setcolors // Sets colors ( int back=LIGHTGRAY, // Background color int fore=BLACK, // Foreground color int high=RED // Highlight color ) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 13 : EasyVision's tstatusline class Page 54/111 ---------------------------------------------------------------------- Remarks All arguments are optional. If they are not provided, defaults to 'LIGHTGRAY', to 'BLACK' and to 'RED'. You can use color macros if "CONIO.H" is included. Appendix B gives a description of available color codes and macros. The statusline is not modified by a call to this function. The changes to the colors will be made at the next call to {display}. Return None. Example statusline.setcolors (RED,BLACK,YELLOW) ; TSTATUSLINE::DISPLAY ---------------------------------------------------------------------- Summary Displays a message on the statusline. Syntax #include "tstatusline.hpp" void far tstatusline::display // Displays message ( char huge *text=NULL // Text to be displayed ) ; Remarks The argument can point to a message of any length, including the '~' characters. The message will be truncated to fit on the message area, which length is 68 characters. There is no need to clear the statusline before using this function. You can toggle between normal foreground statusline color and the highlight color with the special character '~' (tilde). To clear the statusline, call this function with no argument. Return None. Example statusline.display ("Welcome to ~EasyVision~") ; statusline.display () ; // Clears statusline TSTATUSLINE::GETMSG ---------------------------------------------------------------------- Summary Returns last displayed message. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 13 : EasyVision's tstatusline class Page 55/111 ---------------------------------------------------------------------- Syntax #include "tstatusline.hpp" char huge* far tstatusline::getmsg () ; // Last message Remarks Lets say you have a function that will modify the statusline. You could save its current content before modifying it, then restore it at the function's end. Return None. Example char lastmsg ; lastmsg = statusline.getmsg () ; TSTATUSLINE::REFRESH ---------------------------------------------------------------------- Summary The statusline object has a {refresh} function that will redraw it on the screen. Syntax #include "tstatusline.hpp" void far tstatusline::refresh () ; // Redraws Remarks {refresh} will redisplay the last message. --> The refresh function will use the current color values. This means that you can change the statusline's colors and then, {refresh} it with the new colors. Return None. Example statusline.refresh () ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 14 : EasyVision's tinput class Page 56/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 14 : EasyVision's tinput class ---------------------------------------------------------------------- The {tinput} class is designed to process input information. It provides mouse support and gives your programs context sensitive help. --> An instance has already been globally declared and is called input. Only one instance of {tinput} can be used in a program. As a result, you will never declare and create another instance. The {tinput} class has built in default values. However, if you would like to change those default behaviors, you can easily do so. On the following pages, you will find each of {tinput}'s member functions. Examples of using the input object are given in the source codes of the EasyVision's demo programs. TINPUT::MOUSE_INIT ---------------------------------------------------------------------- Summary This function will look for a mouse driver and initialise it. Initially, the mouse will be hidden. Syntax #include "tinput.hpp" ; void far tinput::mouse_init () ; // Initialises mouse Remarks This function is called as part of the initialisation routines, before your program starts. You should never have to call it yourself. --> Remember that the mouse's cursor should ALWAYS be off when you make changes to the screen. Many older driver would leave garbage on the screen if you did updates while the cursor is ON. Anyway, the only time the mouse's cursor should be on is when you do user inputs. The {get} function will take care of all this and if you're doing things right, your only inputs will come from {get}. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 14 : EasyVision's tinput class Page 57/111 ---------------------------------------------------------------------- If no mouse is found, calling the other mouse functions won't produce any result. Return None. Example input.mouse_init () ; TINPUT::MOUSE_STATUS ---------------------------------------------------------------------- Summary Returns current mouse's state. Syntax #include "tinput.hpp" ; int far tinput::mouse_status () ; // Mouse's status Remarks None. Return Tree values can be returned: 0: No mouse's driver or mouse was found. 1: A mouse is present and the cursor is on the screen. 2: A mouse is present and the cursor is hidden. Example if (input.mouse_status () == 0) printf ("A mouse is necessary for this program") ; TINPUT::MOUSE_SHOW ---------------------------------------------------------------------- Summary Turns the mouse's cursor on. Syntax #include "tinput.hpp" ; void far tinput::mouse_show () ; // Shows cursor Remarks If a mouse wasn't found, this function doesn't have any effect. Return None. Example input.mouse_show () ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 14 : EasyVision's tinput class Page 58/111 ---------------------------------------------------------------------- TINPUT::MOUSE_HIDE ---------------------------------------------------------------------- Summary Turns the mouse's cursor off. Syntax #include "tinput.hpp" void far tinput::mouse_hide () ; // Hides cursor Remarks If a mouse wasn't found, this function doesn't have any effect. Return None. Example input.mouse_hide () ; TINPUT::MOUSE_LB_DOWN ---------------------------------------------------------------------- Summary Tells if mouse's left button is currently pressed. Syntax #include "tinput.hpp" ; bool far tinput::mouse_lb_down () ; // Tells if down Remarks None. Return {TRUE} if mouse's left button is currently down. {FALSE} otherwise. Example if (input.mouse_lb_down ()) do_something () ; TINPUT::MOUSE_POS ---------------------------------------------------------------------- Summary Returns mouse's screen position. Syntax #include "tinput.hpp" ; void far tinput::mouse_pos // Gets mouse's position ( int huge *row, // To return row position int huge *col // To return col position ) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 14 : EasyVision's tinput class Page 59/111 ---------------------------------------------------------------------- Remarks If a mouse wasn't found, the returned values are not changed. Return returns the cursor's row position, 1 being the top row. returns the cursor's column position, 1 being the leftmost column. Example int row, col ; input.mouse_pos (&row,&col) ; TINPUT::GET ---------------------------------------------------------------------- Summary Gets a user input, be it a keyboard or a mouse event. Provides automatic context sensitive help and mouse support during input. Syntax #include "tinput.hpp" ; int far tinput::get // Gets a keyb or mouse input ( input_info huge *ii=NULL, // Ptr to input_info int filter=0, // Valid key codes int hlpctx=EV_NOHLPCTX, // Context bool buffer=FALSE // Use buffer? ) ; Remarks This function is at the heart of EasyVision's input facilities. --> One important concept is that an EasyVision's input is ALWAYS stored in an {input_info} structure . This structure is as follows: struct input_info { int key_code ; // ASCII code of last character bool key_lshift ; // TRUE if left shift key pressed bool key_rshift ; // TRUE if right shift key pressed bool key_lctrl ; // TRUE if left ctrl key pressed bool key_rctrl ; // TRUE if right ctrl key pressed bool key_lalt ; // TRUE if left alt key pressed bool key_ralt ; // TRUE if right alt key pressed int mouse_row ; // Row position of mouse's cursor int mouse_col ; // Col position of mouse's cursor } EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 14 : EasyVision's tinput class Page 60/111 ---------------------------------------------------------------------- One of 'getch' weaknesses is its inability to deal with the way extended keys are internally represented. Those are the keys that don't have an ASCII code associated with them. For example, the function, arrow and editing keys all return an extended keycode. {tinput::get} will deal with these extended keys by adding 256 to the extended keycode. Appendix A lists all the extended keycodes currently available on an extended keyboard and their associated macros. Always use the macros instead of the real code. The first parameter is a pointer to an {input_info} structure. Information is returned in this structure. You can set to a NULL pointer or call {tinput::get} without any parameter. You then specify a to be used by {tinput::get}. A of 0 will allow any key to be read and returned by the function. You can also provide the ASCII or extended keycode (remember to add 256 to the real extended code or better yet, use the {II_*} macro) of the only key allowed to be returned by the function. This provides an easy way to WAIT FOR a specific key. The function will then return with that keycode, only when that key has been pressed. --> Beware of NEVER setting to an impossible key entry, or you will be trapped by the {get} function! Next, you give the current context number for this input. If the user presses F1 , the right mouse's button or the on screen HELP button, the associated help screen for this context will be displayed. If you don't want to use the help system or if there isn't any help for the current context, set to {EV_NOHLPCTX}. See appendix C to learn how to build an help file and activate the help facilities. --> If you set to {FALSE}, {tinput::get} will flush the keyboard buffer before reading a key. If set to {TRUE}, it will read from the keyboard and mouse buffers if keys have been previously pressed. By default, is set to {FALSE}. Return If a normal key was pressed, the returned value is an 'int' representing the ASCII code of that key (1-255). EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 14 : EasyVision's tinput class Page 61/111 ---------------------------------------------------------------------- If an extended key was pressed, the returned value is an 'int' representing the extended keycode plus 256 (256-396). See appendix A for a list of keyboard key macros. If the mouse was pressed, the macro {EV_MOUSE} is returned. The returned value is identical to the {key_code} field in the {input_info} structure. {input_info}'s fields {mouse_row} and {mouse_col} will hold the cursor's coordinates at the moment the left button was pressed. They are undefined if the input wasn't a mouse event. The other fields of the {input_info} structure hold the states of the shift, control and alt keys at the time of the input. Example input_info ii ; if (input.get (&ii) == EV_MOUSE) { // Process mouse input } else { // Process keyboard input } EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 15 : EasyVision's tmenubar class Page 62/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 15 : EasyVision's tmenubar class ---------------------------------------------------------------------- The {tmenubar} class provides a menubar on the first line of the screen, with pull down menus and selection cursor. A menubar acts as a filter. You make the user inputs go {through} the menubar. If the input is the keyboard event {II_F10} (F10), or an ALT-key corresponding to a menu hotkey, the menubar is activated. Otherwise, the input returns unchanged. Items created in the menus are assigned return values. When the user selects an item, his input is changed to this return value and returned from the menubar. --> Keep in mind that all inputs going {through} and returned from the menubar are {input_info } structures. Refer to the chapter on the {tinput} class. --> An instance has already been globally declared and is called menubar. Only one instance of {tmenubar} can be used in a program. As a result, you will never declare and create another instance. The {tmenubar} class has built in default values. However, if you would like to change those default behaviors, you can easily do so. On the following pages, you will find each of {tmenubar}'s member functions. Examples of using the menubar object are given in the source codes of the EasyVision's demo programs. TMENUBAR::SETCOLORS ---------------------------------------------------------------------- Summary Sets the background, foreground, highlight and cursor colors used by the menubar. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 15 : EasyVision's tmenubar class Page 63/111 ---------------------------------------------------------------------- Syntax #include "tmenubar.hpp" void far tmenubar::setcolors // Sets menubar colors ( int back=LIGHTGRAY, // Background color int fore=BLACK, // Foreground color int high=RED, // Highlight color int cursor=GREEN // Cursor color ) ; Remarks You can use color macros if "CONIO.H" is included. Appendix B gives a description of available color codes and macros. If you don't make a call to this function, the previously mentioned default values are assumed. --> When a menu has been created, it is thereafter illegal to change the already selected colors. Furthermore, the color 'DARKGRAY' is unavailable. It is reserved for offline menu items. Return None. Example menubar.setcolors (BLUE,WHITE,RED,MAGENTA) ; TMENUBAR::SETHLPCTX ---------------------------------------------------------------------- Summary Sets the menubar's default help context number. Syntax #include "tmenubar.hpp" void far tmenubar::sethlpctx // Sets default context ( int hlpctx=EV_NOHLPCTX // Help context number ) ; Remarks When created, each menu on the menubar and each item in a menu is given its own context number. If, however, a menu or an item is not given a number and help is requested while this menu or item is highlighted, the menubar default context number will be passed to the help routines. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 15 : EasyVision's tmenubar class Page 64/111 ---------------------------------------------------------------------- Example menubar.sethlpctx (1000) ; TMENUBAR::ADDMENU ---------------------------------------------------------------------- Summary Adds a menu to the menubar. Syntax #include "tmenubar.hpp" void far tmenubar::addmenu // Creates a new menu ( char huge *name, // Menu's name int hotkey, // Menu's hotkey char huge *sltext=NULL, // Statusline text int hlpctx=EV_NOHLPCTX // Help context number ) ; Remarks is the name of the menu created. It can be of any length, but must fit on the menubar. The first two characters of the menubar are left blank, and the last 10 are reserved for the clock. Two spaces will be inserted between each menu. There can be as many menus on the menubar as will fit. Just don't make the names too long. The is the key that will activate the menu. It must be a letter (A-Z) or a digit (0-9), case insensitive. If the letter is present in the menu name, it will be highlighted. Two menus cannot have the same hotkey. is a short help text that will be displayed on the statusline when this menu is selected. It can be of any length. is the context number corresponding to this menu. The text associated to this context will be displayed if the user asks for help. If you set this argument to {EV_NOHLPCTX}, this menu won't have a help context of its own. Instead, the default menubar context will be use (see tmenubar::sethlpctx). See appendix 3 to learn about the help facilities. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 15 : EasyVision's tmenubar class Page 65/111 ---------------------------------------------------------------------- Example menubar.addmenu ("Files",'F',"Opens a new file",100) ; TMENUBAR::ADDITEM ---------------------------------------------------------------------- Summary Adds an item to the last created menu. Syntax #include "tmenubar.hpp" void far tmenubar::additem // Adds an item ( char huge *text=NULL, // Item's text int hotkey=II_NUL, // Item's hotkey int returnval=II_NUL, // Return value char huge *sltext=NULL, // Statusline text int hlpctx=EV_NOHLPCTX // Help context number ) ; Remarks is the text displayed for this menu entry. It can be of any length. The menu will autosize itself to accommodate the widest item. There can be as many items in a menu as there is space on the screen. That is always 4 fewer than the total number of screen rows. The is the key that will activate the item. It must be a letter (A-Z) or a digit (0-9), case insensitive. If the hotkey is present in the item's text, it will be highlighted. Two items cannot have the same hotkey. If this item is selected, the user input will be change to while in the {through} function. For example, if {II_A_X} (ALT-X) exits the program, you would set the QUIT item in the FILE menu to return the value {II_A_X} (Alt-X). It's a good idea to display those shortcuts in the item's text. --> This return value must be greater than 255. It cannot be {II_F10} (F10) or any of the arrows' keycodes (II_ARROW_*). is a short help text that will be displayed on the statusline when this item is selected. It can be of any length. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 15 : EasyVision's tmenubar class Page 66/111 ---------------------------------------------------------------------- is the context number corresponding to this item. The text associated to this context will be displayed if the user asks for help. If you set this argument to {EV_NOHLPCTX}, this menu won't have a help context of its own. Instead, the default menubar context will be use (see tmenubar::sethlpctx). See appendix 3 to learn about the help facilities. --> If {additem} is called with no arguments, it will insert a separator in the menu. Return None. Example menubar.additem ("Open F3",'O',II_F3,"Open file",103) ; TMENUBAR::ITEMSETAVAIL ---------------------------------------------------------------------- Summary Sets availability of a menu item to {TRUE} or {FALSE}. Syntax #include "tmenubar.hpp" void far tmenubar::itemsetavail // Sets availability ( int menuhotkey, // Hotkey of menu int itemhotkey, // Hotkey of menu item bool state // TRUE: available FALSE: Not ) ; Remarks You must provide the of the menu in which the item exists, and the of the item itself. Setting a menu item to {TRUE} will make it available, to {FALSE} not available. --> When a menu item is created, it is available by default. Return None. Example menubar.itemsetavail ('F','O',FALSE) ; TMENUBAR::THROUGH -- Summary Makes an input go through the menubar. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 15 : EasyVision's tmenubar class Page 67/111 ---------------------------------------------------------------------- Syntax #include "tmenubar.hpp" input_info far tmenubar::through // Activates menubar ( input_info ii // Input to go through ) ; Remarks If contains the keyboard event {II_F10} (F10), the menubar is activated, but no menus are opened. If is a menu hotkey, this menu is opened. Return If is not {II_F10} or a menu hotkey, {through} returns unchanged. If the menubar is activated, then if the user enters {II_ESC} (Esc), {through} returns with {II_NUL} in the {key_code} field of the {input_info} structure. Otherwise it returns with the return value of the menu item selected. Example input_info command ; command = menubar.through (input.get (&command)) ; TMENUBAR::REFRESH ---------------------------------------------------------------------- Summary The menubar object has a {refresh} function that will redraw it on the screen. Syntax #include "tmenubar.hpp" void far tmenubar::refresh () ; // Redraws the menubar Remarks You will most likely never call this function. You should call the desktop's own {refresh} function, who will then call this one. Return None. Example menubar.refresh () ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 68/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- C H A P T E R 16 : EasyVision's twindow class ---------------------------------------------------------------------- The {twindow} class provides to your program powerful window facilities. Windows are where all your program's screen inputs and outputs will take place. The {twindow} class comes with many member functions. They allow for manipulating the window position, size and attributes. Text can be easily written to the window. Input fields will give you formatted and secured user inputs. Push buttons will provide options selection. All these and many more features. The {twindow} class has built in default values. However, if you would like to change those default behaviors, you can easily do so. --> Contrary to the other classes, instances of the {twindow} class have NOT been declare. You can use as many instances of {twindow} as you like. As a result, you will have to declare and create your own instances. First, you declare a pointer to a twindow object (twindow huge *win). Then you allocated memory for it (win = new twindow). The object has been initialised with default values and is now ready to be used. --> You can open simultaneously as many windows as you like. When you open a window, what was under it is saved to be restored when you'll close it. --> EasyVision doesn't keep track of the way windows overlap. It doesn't know if a window is over or under another one. Therefore, a window should NEVER be closed if another window covers part of it. Always close the ones that are in the foreground first. --> You CANNOT work with a window if it is under another one. If you do, the integrity of the desktop will be compromised. On the following pages, you will find each of {twindow}'s member functions. Examples of using window objects are given in the source codes of the EasyVision's demo programs. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 69/111 ---------------------------------------------------------------------- TWINDOW::WINSETPOS ---------------------------------------------------------------------- Summary Sets position of the next window to be opened. Syntax #include "twindow.hpp" void far twindow::winsetpos // Sets window's position ( int row, // Top left corner's row int col, // Top left corner's col bool movable=EV_MAYBE // TRUE: Can be moved ) ; Remarks and are the topleft corner of the next window TO BE OPENED. The first and last lines of the desktop are reserved for the menubar and statusline. You can't have part of the window off the screen. Therefore, this function will validate all coordinates and change them to get a valid window position. --> If you set the size of the window before setting its position, this size will be taken into account to calculate the valid range of the and arguments. --> You CANNOT use this function once the window has been opened. Use the {winmove} function instead. Return None. Example win->winsetpos (10,12) ; // Topleft corner at 10,12 TWINDOW::WINGETROW ---------------------------------------------------------------------- Summary Returns row position of its topleft corner. Syntax #include "twindow.hpp" int far twindow::wingetrow () ; // Returns row pos Remarks The top left corner of the screen is (1,1). But row one is unavailable because it is taken by the menubar. Return Row position of window. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 70/111 ---------------------------------------------------------------------- Example row = win->wingetrow () ; TWINDOW::WINGETCOL ---------------------------------------------------------------------- Summary Returns window's column position of its topleft corner. Syntax #include "twindow.hpp" int far twindow::wingetcol () ; // Returns col pos Remarks The top left corner of the screen is (1,1). Return Column position of window. Example col = win->wingetcol () ; TWINDOW::WINSETSIZE ---------------------------------------------------------------------- Summary Sets size of next window to be opened. Syntax #include "twindow.hpp" void far twindow::winsetsize // Sets window's size ( int height=MAXINT,// Window's height including frames int width=MAXINT // Window's width including frames ) ; Remarks and represent the size of the window, frames included. The first and last lines of the desktop are reserved for the menubar and statusline. Also, you can't have part of the window off the screen. --> This function will validate the asked size and change it to get a valid window size. The position that was set with {winsetpos} will be taken into account. --> You CANNOT change the size of a window once it has been opened. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 71/111 ---------------------------------------------------------------------- Example win->winsetsize (10,60) ; // 10 rows by 60 cols TWINDOW::WINGETHEIGHT ---------------------------------------------------------------------- Summary Returns window's height in lines. Syntax #include "twindow.hpp" int far twindow::wingetheight () ; // Returns height Remarks The top and bottom frames are included in the height. Return The height of the window. Example heigth = win->wingetheight () ; TWINDOW::WINGETWIDTH ---------------------------------------------------------------------- Summary Returns window's width in columns. Syntax #include "twindow.hpp" int far twindow::wingetwidth () ; // Returns width Remarks The left and right frames are included in the width. Return The width of the window. Example width = win->wingetwidth () ; TWINDOW::WINSETCOLORS ---------------------------------------------------------------------- Summary Sets the background and foreground colors of a window. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 72/111 ---------------------------------------------------------------------- Syntax #include "twindow.hpp" void far twindow::winsetcolors // Sets window's colors ( int back=LIGHTGRAY, // Window's background color int fore=WHITE // Window's foreground color ) ; Remarks These are the colors used to draw the window. Those colors will be used by other functions when the color arguments are optional. and are optional, and will default to 'LIGHTGRAY' and 'WHITE' respectively. --> You CANNOT change the default colors of a window once it has been opened. --> Bright background colors are available. See tdesktop's {settextmode}. Return None. Example win->winsetcolors (BLUE,WHITE) ; TWINDOW::WINSETTITLE ---------------------------------------------------------------------- Summary Sets the title displayed on the top frame of a window. Syntax #include "twindow.hpp" void far twindow::winsettitle // Sets window's title ( char huge *title // Ptr to window's title ) ; Remarks can point to a title of any length, and only the portion that will fit on the top frame will be displayed. If you don't give a title before opening a window, no title will be displayed. --> You CAN'T set a title after a window has been opened. Return None. Example win->winsettitle ("Open file") ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 73/111 ---------------------------------------------------------------------- TWINDOW::WINSETHLPCTX ---------------------------------------------------------------------- Summary Sets the default help context for this window . If input fields or push buttons don't have a context of their own, they'll use this default. Syntax #include "twindow.hpp" void far twindow::winsethlpctx // Sets context's number ( int hlpctx=EV_NOHLPCTX // Help context's number ) ; Remarks See appendix 3 for a description of the help system. Return None. Example win->winsethlpctx (100) ; TWINDOW::WINOPEN ---------------------------------------------------------------------- Summary Opens a window. Syntax #include "twindow.hpp" void far twindow::winopen () ; // Opens window Remarks The window is opened with default attributes, or the ones set by the previous functions. You CANNOT open an already opened window. Default attributes for a window are: Position is (row=2, col=1). Size is (height=3, width=6). Colors are 'WHITE' on 'LIGHTGRAY'. The cursor is on line 1. Return None. Example win->winopen () ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 74/111 ---------------------------------------------------------------------- TWINDOW::WINCLOSE ---------------------------------------------------------------------- Summary Closes a window. Syntax #include "twindow.hpp" void far twindow::winclose () ; // Closes window Remarks You CANNOT close an already closed window. When you close a window, all its attributes are reset to their default values as if you had just declared this object. Your previous settings like size and colors aren't in effect anymore. All memory taken by the window is released. What was under this window when it was opened is restored. --> You should NEVER close a window that has part of itself hidden under another window. Always close the ones in the foreground first. This is your responsibility! EasyVision doesn't know your window's layer position and won't tell you if something goes wrong. Return None. Example win->winclose () ; TWINDOW::WINCLEAR ---------------------------------------------------------------------- Summary Clears part or all the window content. Syntax #include "twindow.hpp" void far twindow::winclear // Clears an area in window ( int left=1, // Top left corner int top=1, int right=MAXINT // Bottom right corner int bottom=MAXINT ) ; Remarks The window must be opened to call this function. All arguments are validated and if incorrect, changed to fall within valid window coordinates. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 75/111 ---------------------------------------------------------------------- All arguments are optional. Calling this function with no arguments will clear the entire window. --> Beware that this function will also clear buttons and input fields, BUT NOT REMOVE THEM. This will make them invisible, until you use them again. It is your responsibility to make sure you don't erase something important! Return None. Example win->winclear (1,1,999,3) ; // Erases first 3 lines TWINDOW::WINWRITE ---------------------------------------------------------------------- Summary Writes text to the window . Many format options are available. Syntax #include "twindow.hpp" void far twindow::winwrite // Writes text to window ( char huge *text, // Ptr to text to be written int row=EV_DEF, // Text's position in window int col=1, int format=0, // Justification int fore=EV_DEF, // Text's color int back=EV_DEF ) ; Remarks The window must be opened. The <text> argument can point to a text string of any length, but only the first 132 characters will be considered. --> This function will only print on 1 line of the window. If the string is longer than an entire line, only what will fit will be printed. NO LINE WRAPPING WILL OCCUR with this function! All arguments are optional, except for <text>. <text> : Pointer to the text to be printed. <row> : The {winwrite} function keeps track of the last line printed to, with an internal cursor. After each {winwrite}, the cursor is positioned on the next line. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 76/111 ---------------------------------------------------------------------- When you use <row>, it tells where the text is to be printed. Row 1 is the first line under the top frame. This argument is optional. If it is not given, or if you use the macro {EV_DEF}, {winwrite} will use it's internal cursor position. Text will be printed on the cursor line, and the cursor will move to the next line. --> If you DON'T give the <row> argument and write to the last window line, all the window will be scrolled up 1 line. YOU MUST MAKE SURE YOU DON'T HAVE ANY BUTTONS OR INPUT FIELDS. THEY WILL BE SCROLLED UP ALSO AND THE WINDOW'S INTEGRITY WILL HAVE BEEN COMPROMISED! --> If you give the <row> argument, you can then write to the last line and no scrolling will occur. The window cursor will stay on the last line. <col> : Column where text will start. This argument is optional. If it is not given, it will default to 1. <format> : Determines how the text string is justified. 0 : No justification. <col> is used. 1 : Left justified. <col> has no effect. 2 : Centered. <col> has no effect. 3 : Right justified. <col> has no effect. This argument is optional. If it is not given, it will default to 0. <fore> : Foreground color used. This argument is optional. If it is not given, or if you use the macro {EV_DEF}, it will default to the window's foreground color. <back> : Background color used. This argument is optional. If it is not given, or if you use the macro {EV_DEF}, it will default to the window's background color. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 77/111 ---------------------------------------------------------------------- Example // Writes to current line, left justified, current // window's colors, and moves cursor to next line win->winwrite ("Hello") ; // Writes to current line, centered, current window's // colors, and move cursor to next line. Even if // <col> is 1, it has no effect. win->winwrite ("Hello",EV_DEF,1,2) ; // Writes to specific line, specific column, // specific colors win->winwrite ("Hello",5,10,0,YELLOW,RED) ; TWINDOW::WINTEXT ---------------------------------------------------------------------- Summary Displays a text array in current window with word wrapping and 'Ok/Esc' prompts. Syntax #include "twindow.hpp" void far twindow::wintext // Text with wrapping ( char huge *textptr, // Ptr to text to be displayed int fore=EV_DEF, // Normal foreground color int high=YELLOW // Text's highlight color ) ; Remarks The window must be opened to call this function. <textptr> : This points to the text to be displayed. This text can be of any length. This text is an array of characters that need not be formatted in any way. This function will display the array with word wrapping at the window's right edge. Any extra spaces will be removed from the text, leaving only one space between each word. Any leading spaces to a line will also be removed. If you want to begin a line with spaces, or separate some words with more than one space, you must use the underscore (_) character. You can highlight your text by surrounding characters with the tilde (~) character. The array can be of any length. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 78/111 ---------------------------------------------------------------------- An 'Ok' prompt will be created to allow the user to see the remaining text if it couldn't all fit in the window. An 'Esc' prompt will be created to allow the user to stop viewing text at his convenience. --> When you use this function, make sure the window is totally empty. Everything that was in the window is erased when you call this function. <fore> : Foreground color used. This argument is optional. If it is not given, or if you use the macro {EV_DEF}, the default foreground color of the window will be used. <high> : Highlight color used. This argument is optional. If it is not given, the color YELLOW will be used for highlights. Return None. Example win->wintext (instructions) ; TWINDOW::WINTEXTFILE ---------------------------------------------------------------------- Summary Displays a text file from disk in current window with word wrapping and 'Ok/Esc' prompts. Syntax #include "twindow.hpp" void far twindow::wintextfile // Displays a text file ( char huge *path, // Path to file int fore=EV_DEF, // Foreground color to use int high=YELLOW // Highlight color to use ) ; Remarks This function acts exactly the same as {wintext}. The only difference is that it gets it's input text from a disk file. <path> : Complete path to disk file. If the file cannot be found, the string "File not found" is displayed instead. This string is pointed to by the system variable ev_filenotfoundtext. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 79/111 ---------------------------------------------------------------------- <fore> : Foreground color used. This argument is optional. If it is not given, or if you use the macro {EV_DEF}, the default foreground color of the window will be used. <high> : Highlight color used. This argument is optional. If it is not given, the color YELLOW will be used for highlights. Return None. Example win->wintextfile ("C:\\autoexec.bat") ; TWINDOW::WINMOVE ---------------------------------------------------------------------- Summary Moves the windows to a new location. Syntax #include "twindow.hpp" void far twindow::winmove// Moves window to new position ( int row, // Topleft corner's new position int col ) ; Remarks The window must be opened. <row> and <col> are the new position of the topleft corner of the window. The first and last lines of the desktop are reserved for the menubar and statusline and you can't have part of the window off the screen. Therefore, this function will validate all coordinates and change them to get a valid window position. Return None. Example win->winmove (10,12) ; TWINDOW::WINSCROLL ---------------------------------------------------------------------- Summary Moves window in 1 of 4 directions. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 80/111 ---------------------------------------------------------------------- Syntax #include "twindow.hpp" void far twindow::winscroll// Moves window 1 space only ( char direction // U: up D: down L: left R: right ) ; Remarks The entire window will be moved, IF POSSIBLE, one character in the requested direction. The name can be a little confusing. It is not the window content that is scrolled. It's the entire window. The argument is a character, case insensitive: U: Up, D: Down, L: Left, R: Right. Return None. Example win->winscroll ('U') ; // Move window up one line TWINDOW::WINONEDGES ---------------------------------------------------------------------- Summary Checks if position is on window's edges. Syntax #include "twindow.hpp" bool far twindow::winonedges // Checks if on for edges ( int row, // Position int col, int huge *offsetrow=NULL,// Offset to top left corner int huge *offsetcol=NULL ) ; Remarks It will return {TRUE} if this position is on one of this window's edges. This function can also return the offset of the row and col positions to the upper left most corner of the window. If you don't want the offsets, set the return variables to 'NULL'. Return {TRUE} if the position is on one of the edges. Example int off_row, off_col ; if (win->winonedges (10,23,&off_row,&off_col)) DoSomething () ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 81/111 ---------------------------------------------------------------------- TWINDOW::WININSIDE ---------------------------------------------------------------------- Summary Checks if a position is in the window. Syntax #include "twindow.hpp" bool far twindow::wininside // Checks if in window ( int row, // Position int col, int huge *offsetrow=NULL,// Offset to top left corner int huge *offsetcol=NULL ) ; Remarks It will return {TRUE} if this position is inside the window. The frames are NOT considered inside. This function can also return the offset of the row and col positions to the upper left most corner of the window. If you don't want the offsets, set the return variables to 'NULL'. Return {TRUE} if the position is inside window's edges. Example int off_row, off_col ; if (win->wininside (10,23,&off_row,&off_col)) DoSomething () ; TWINDOW::WININPUT ---------------------------------------------------------------------- Summary Makes window alive , allowing inputs to be made in multiple input fields and push buttons selected. Syntax #include "twindow.hpp" input_info far twindow::wininput // Gets input ( input_info ii // input_info struct ) ; Remarks The user will be able to move between input fields and buttons with {II_TAB} (Tab) and {II_S_TAB} (Shift Tab). He will be able to move the window, if allowed, by dragging it by one of its edges. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 82/111 ---------------------------------------------------------------------- --> You should refrain from using the {fieldinput} and {buttoninput} functions. Use this one instead. Return If there are no input fields and no push buttons, the {input_info} structure is returned unchanged. If no push buttons were created, but at least an input field, {wininput} will return with {II_CR} (Enter) or {II_ESC} (Esc). {II_CR} means the user confirmed the inputs by pressing ENTER. {II_ESC} means the user aborted the input by pressing ESC. If buttons were created, {wininput} will return with the identification value of the button pushed. Example userinput = win->wininput (ii) ; TWINDOW::FIELDSETCOLORS ---------------------------------------------------------------------- Summary Sets the colors used in the next input field to be created. Syntax #include "twindow.hpp" void far twindow::fieldsetcolors // Fields' colors ( int back=BLUE, // Fields' background color int foreon=WHITE, // Foreground color when active int foreoff=LIGHTCYAN // Color when inactive ) ; Remarks <back> : Background color used. This argument is optional. If it is not given, 'BLUE' is assumed. If the macro {EV_DEF} is used, it will default to the window default background color. <foreon> : Foreground color used when the field is active. This argument is optional. If it is not given, it will default to 'WHITE'. <foreoff> : Foreground color used when the field is inactive. This argument is optional. If it is not given, it will default to 'DARKGRAY'. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 83/111 ---------------------------------------------------------------------- Example win->fieldsetcolors (GREEN,WHITE,WHITE) ; TWINDOW::FIELDCREATE ---------------------------------------------------------------------- Summary Creates a new input field in the window. Syntax #include "twindow.hpp" void far twindow::fieldcreate // Creates input field ( int row, // Input field's row int col, // Input field's col int answerlength, // Answers' maximum length int length, // Input field's length in window int ftr, // Input field's filter number (0-4) char huge *xtraftr, // Extra chars for filter bool capsflag, // If TRUE, to uppercase bool nullflag, // If TRUE, can enter null str char huge *defaultasw, // Default answer char huge *sltext, // Statusline text for field int hlpctx // Help context number ) ; Remarks The window must be opened before calling this function. Fields have default built in behaviors when a window is first created. If you don't call any function to set their attributes, buttons will default to 'WHITE' on 'BLUE'. <row> : Row of input field. <col> : Column of input field. <row> and <col> are validated to make sure the input field fits into the window. If the position is incorrect, it will be automatically changed. <answerlength> : The maximum length of the input buffer. The user is allow to enter a string no longer than this limit. The upper limit is 32K. That should be enough! EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 84/111 ---------------------------------------------------------------------- <length> : The length of the input field in the window in characters. The input field cannot be wider than the window. The input field cannot be wider than the answer buffer's length. <ftr> : An input field will allow only certain characters as input. <ftr> will determine what characters are accepted. 0 : All characters are allowed, except control chars. 1 : A-Z and a-z only. *** Space (32) not allowed *** 2 : 0-9 only. 3 : A-Z, a-z and 0-9 only. 4 : No characters allowed. <xtraftr> : Include, between quotes, other characters that you want accepted by the filter. Often used to include the space char (ASCII 32). <capsflag> : If set to {TRUE}, all inputs will be converted to CAPS. <nullflag> : If set to {FALSE}, the user won't be allowed to input an empty string. <defaultasw> : This is the default answer that will be put in the input field. This argument is optional. If you want the field to be initially empty, set to 'NULL'. <sltext> : This is a short help text that will be displayed on the status line when the field is active. If you don't want a help text to be displayed, set to 'NULL'. <hlpctx> : The help context number for this field. If set to {EV_NOHLPCTX}, the field will use the window's default. Return None. Example win->fieldcreate (2, 2, 20, 10, 1, " ", TRUE, FALSE, "Canada", "Enter country", 205) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 85/111 ---------------------------------------------------------------------- TWINDOW::FIELDSETASW ---------------------------------------------------------------------- Summary Sets a field current content. Syntax #include "twindow.hpp" void far twindow::fieldsetasw // Sets default answer ( char huge *answer, // Default answer for this field int fieldnb // Field's ID number ) ; Remarks Even if the content is immediately changed, the field on the screen will be updated only when it is activated. <answer> : String to copy in the field. It can be of any length, but only what will fit in the answer buffer will be copied. <fieldnb> : Number of the field to copy to. Number IDs are given to the field at their creation, starting with one. Return None. Example win->fieldsetasw ("C:\\UTILS\\",5) ; TWINDOW::FIELDGETASW ---------------------------------------------------------------------- Summary Reads the content of the answer buffer of an input field. Syntax #include "twindow.hpp" void far twindow::fieldgetasw // Gets a field's answer ( char huge *dest, // Destination to copy answer's to int fieldnb // Field's ID number ) ; Remarks The answer buffer of field <fieldnb> is copied to <dest>. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 86/111 ---------------------------------------------------------------------- --> There is no way for the function to know if your destination is big enough to hold the content of the answer buffer. YOU MUST MAKE ABSOLUTELY SURE THAT YOUR DESTINATION IS AS BIG AS THE ANSWER BUFFER PLUS ONE CHARACTER for the terminating '\n'. Return None. Example win->fieldgetasw (&response,3) ; TWINDOW::FIELDINPUT ---------------------------------------------------------------------- Summary Gets user input from one input field. Syntax #include "twindow.hpp" input_info far twindow::fieldinput // Activates field ( int fieldnb // Field's number, to get input from ) ; Remarks You must have created at least one input field to use this function. Fields are given numbers when they are created. The first field created is number one. <fieldnb> : This is the field from which you will make the input. This field must exist. --> You should never have to use this function. You should consider using the {wininput} function instead. This is provided to allow for really special cases. --> The user won't be able to move the window. Return {fieldinput} with return with an {input_info} structure containing the ASCII code representing how the user terminated the input. This can be {II_CR}, {II_ESC}, {II_TAB} or {II_S_TAB}. Example name = win->fieldinput (1) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 87/111 ---------------------------------------------------------------------- TWINDOW::BUTTONSETCOLORS ---------------------------------------------------------------------- Summary Sets the colors used for all the window's buttons. Syntax #include "twindow.hpp" void far twindow::buttonsetcolors// Sets buttons's colors ( int back=GREEN, // Button's background color int foreon=WHITE, // Foreground color when active int foreoff=BLACK, // Foreground color when inactive int high=YELLOW // Highlight color (hotkey) ) ; Remarks All buttons use the same color configuration. You can't use this function once a button has been created. <back> : Background color of all buttons. This argument is optional and will default to 'GREEN'. <foreon> : Foreground color of active buttons. This argument is optional and will default to 'WHITE'. <foreoff> : Foreground color of inactive buttons. This argument is optional and will default to 'BLACK'. <high> : Highlight color of all buttons. This argument is optional and will default to 'YELLOW'. Return None. Example win->buttonsetcolors (BLUE,WHITE,BLACK,RED) ; TWINDOW::BUTTONCREATE ---------------------------------------------------------------------- Summary Creates a new button. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 88/111 ---------------------------------------------------------------------- Syntax #include "twindow.hpp" void far twindow::buttoncreate // Creates a button ( int row, // Button's row int col, // Button's col char huge *name, // Button's name int buttonkey, // Button's hotkey char huge *sltext=NULL, // Button's statusline text int hlpctx=EV_NOHLPCTX // Help context number ) ; Remarks The window must be opened to use this function. The window must be big enough to hold the button. It must be at least 4 lines high, and 11 columns wide. You can create as many buttons as you want. There is no upper limit. Buttons have default built in values when a window is first created. You don't need to call the {buttonsetcolors} function. If you don't, buttons will default to a 'GREEN' background, 'WHITE' text when active, 'BLACK' text when inactive, and 'YELLOW' highlight. --> The availability status of a newly created button always defaults to {TRUE} (available). The first button created will be considered the default button. This button will be activated when you request a {buttoninput} or {wininput}. <row> : Row position of the new button. <col> : Column position of the new button. If <row> and <col> are not valid, they will be changed to a correct position. --> You must make sure buttons don't overlap. A button needs an empty line under and to the right of itself. <name> : The name to put on the button. It can be of any length, but only the first 8 characters will be considered. Names aren't automatically centered on the buttons. Center the name manually by inserting leading spaces in the name. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 89/111 ---------------------------------------------------------------------- <buttonkey> : This is the ASCII code that will identify a particular button. Some rules are to be observed: If the identification code of the button matches a character in its name, that character will be highlighted. {II_TAB} (Tab), {II_S_TAB} (Shift Tab) and {II_ARROW_*} (arrow keys) codes cannot be used to identify a button. <sltext> : This is a short help text that will be displayed on the status line when the button is active. This argument is optional. If it is not given, no help text will be displayed. <hlpctx> : The help context number for this button. If set to {EV_NOHLPCTX}, the field will use the window's default. Return None. Example win->buttoncreate (10,2," Save",'S',"Save file",153) ; TWINDOW::BUTTONSETAVAIL ---------------------------------------------------------------------- Summary Sets the availability of a button. Syntax #include "twindow.hpp" void far twindow::buttonsetavail // Sets availability ( int buttonkey, // Button's hotkey bool available=TRUE // TRUE: available ) ; Remarks The button specified MUST exist. <buttonkey> : The button's hotkey that identifies the one you want to change. <available> : {TRUE} means this button is available. {FALSE} means it is not. When a button is created with {buttoncreate}, its availability status is automatically set to {TRUE}. Return None. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- CHAPTER 16 : EasyVision's twindow class Page 90/111 ---------------------------------------------------------------------- Example win->buttonsetavail ('S',FALSE) ; // Save button OFF TWINDOW::BUTTONINPUT ---------------------------------------------------------------------- Summary Makes user go through the buttons with {II_TAB} (Tab), {II_S_TAB} (Shift Tab) and {II_ARROW_*} (arrow keys). Syntax #include "twindow.hpp" input_info far twindow::buttoninput // Waits for button ( input_info userinput, // User's initial input bool first=TRUE // TRUE: Makes 1st alive ) ; Remarks You must have created at least one button to call this function, and there must be at least one button available. <userinput> : The initial user input, as an {input_info} structure. This could come from some previous processing. For instance, the result of an input field. <first> : Determines which button will first be made active during the input. {TRUE} means the first created button, {FALSE} means the last. This argument is optional and will default to {TRUE}. --> You should never have to use this function. You should consider using the {wininput} function instead. This is provided to allow for really special cases. --> The user won't be able to move the window. Return The function returns an 'int'. It is the identification code of the button that was pushed. Example command = win->buttoninput (command) ; EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX A : Keycodes macros Page 91/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X A : Keycodes macros ---------------------------------------------------------------------- Extended keycodes are returned when you press a key that doesn't have an associated ASCII code. They are represented by stuffing two codes into the keyboard buffer. A 0 followed by an extended key keycode in the range 0 through 255. The EasyVision's {getkey} function and {tinput} class, deal with these codes by returning values (int) in the range 0 through 511. The standard ASCII codes are returned unchanged (Guess why?). As a convenience, extended keycodes have 256 added to their real value, and are returned as a single number. Macros, always debuting by {II_}, have been assigned to most of the values listed here. Those macros are available in "STDMACRO.H". You should always use the macros instead of the actual codes. Macro Value Comment II_NUL 0 /* No input at all */ II_MOUSE 256 /* {input_info} = mouse */ II_BS 8 /* Back space */ II_TAB 9 /* Tab */ II_CR 13 /* Carriage return */ II_ESC 27 /* Escape */ II_S_TAB 271 /* Shift-Tab */ II_A_Q 272 /* Alt-Q/W/E/R/T/Y/U/I/O/P */ II_A_W 273 II_A_E 274 II_A_R 275 II_A_T 276 II_A_Y 277 II_A_U 278 II_A_I 279 II_A_O 280 II_A_P 281 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX A : Keycodes macros Page 92/111 ---------------------------------------------------------------------- II_A_A 286 /* Alt-A/S/D/F/G/H/J/K/L */ II_A_S 287 II_A_D 288 II_A_F 289 II_A_G 290 II_A_H 291 II_A_J 292 II_A_K 293 II_A_L 294 II_A_Z 300 /* Alt-Z/X/C/V/B/N/M */ II_A_X 301 II_A_C 302 II_A_V 303 II_A_B 304 II_A_N 305 II_A_M 306 II_F1 315 /* F1-F10 */ II_F2 316 II_F3 317 II_F4 318 II_F5 319 II_F6 320 II_F7 321 II_F8 322 II_F9 323 II_F10 324 II_F11 389 /* F11 */ II_F12 390 /* F12 */ II_HOME 327 /* Cursor keys */ II_ARROWUP 328 II_PAGEUP 329 II_ARROWLEFT 331 II_ARROWRIGHT 333 II_END 335 II_ARROWDOWN 336 II_PAGEDOWN 337 II_INS 338 II_DEL 339 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX A : Keycodes macros Page 93/111 ---------------------------------------------------------------------- II_S_F1 340 /* Shift-F1 to Shift-F10 */ II_S_F2 341 II_S_F3 342 II_S_F4 343 II_S_F5 344 II_S_F6 345 II_S_F7 346 II_S_F8 347 II_S_F9 348 II_S_F10 349 II_S_F11 391 /* Shift-F11 */ II_S_F12 392 /* Shift-F12 */ II_C_F1 350 /* Ctrl-F1 to Ctrl-F10 */ II_C_F2 351 II_C_F3 352 II_C_F4 353 II_C_F5 354 II_C_F6 355 II_C_F7 356 II_C_F8 357 II_C_F9 358 II_C_F10 359 II_C_F11 393 /* Ctrl-F11 */ II_C_F12 394 /* Ctrl-F12 */ II_A_F1 360 /* Alt-F1 to Alt-F10 */ II_A_F2 361 II_A_F3 362 II_A_F4 363 II_A_F5 364 II_A_F6 365 II_A_F7 366 II_A_F8 367 II_A_F9 368 II_A_F10 369 II_A_F11 395 /* Alt-F11 */ II_A_F12 396 /* Alt-F12 */ II_C_PRTSCR 370 /* Ctrl-Print Screen */ II_C_ARROWLEFT 371 /* Ctrl- cursor keys */ II_C_ARROWRIGHT 372 II_C_END 373 II_C_PAGEDOWN 374 II_C_HOME 375 II_C_PAGEUP 388 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX A : Keycodes macros Page 94/111 ---------------------------------------------------------------------- II_A_1 376/* Alt-1/2/3/4/5/6/7/8/9/0/-/= */ II_A_2 377 II_A_3 378 II_A_4 379 II_A_5 380 II_A_6 381 II_A_7 382 II_A_8 383 II_A_9 384 II_A_0 385 II_A_MINUS 386 II_A_EQUAL 387 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX B : Color codes and symbolic constants Page 95/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X B : Color codes and symbolic constants ---------------------------------------------------------------------- When asked for a color argument, you must provide one of the following values. As an alternative, you can also use special macros, provided "CONIO.H" as been included. --> Functions that require a background color argument can use bright background color. Refer to {tdesktop}'s {settextmode} for more information. Available background colors: 0 BLACK 8 DARKGRAY 1 BLUE 9 LIGHTBLUE 2 GREEN 10 LIGHTGREEN 3 CYAN 11 LIGHTCYAN 4 RED 12 LIGHTRED 5 MAGENTA 13 LIGHTMAGENTA 6 BROWN 14 YELLOW 7 LIGHTGRAY 15 WHITE Available foreground colors: 0 BLACK 8 DARKGRAY 1 BLUE 9 LIGHTBLUE 2 GREEN 10 LIGHTGREEN 3 CYAN 11 LIGHTCYAN 4 RED 12 LIGHTRED 5 MAGENTA 13 LIGHTMAGENTA 6 BROWN 14 YELLOW 7 LIGHTGRAY 15 WHITE EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX C : Context sensitive help system Page 96/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X C : Context sensitive help system ---------------------------------------------------------------------- EasyVision provides an easy to use context sensitive help system. If fact, it's so easy you have nothing to do except write up the help text. At startup, the static instance of the {tinput} class (input) will look in the directory of the executable file "*.EXE" for the help files "*.HLP" and "*.HDX". If those files are not found or one is missing, the program simply won't use the help system. When the user requests help by pressing the F1 function key, a message indicating that help is not available will be displayed. If, however, you want your program to use the help system, follow these few simple steps... What is a context ---------------------------------------------------------------------- Menus in the menubar and items within a menu, each have their own context number. Windows, input fields and push buttons also have their own context number. They are given when you create those objects. When one of these objects is active or selected, its context number is in effect. If help is requested by the user, the help text associated with this help context number will be displayed. These objects provide easy input fonctions. You can also get inputs from the {tinput::get} member function. When you do, you also specify a current help context. So, in essence, a context number indicates to the library what the user is currently doing in the interface or in the program. The help routines will thereafter be able to display help relative to the current situation. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX C : Context sensitive help system Page 97/111 ---------------------------------------------------------------------- Context numbering ---------------------------------------------------------------------- You can number your context in any way. A context number is an integer number (int). You should consider, however, using a logical numbering system. You could give a menu the context number 100, and give the items within this menu the numbers 101, 102, 103 and so on... You would do the same with windows. A window would have the number 1000. The input fields would be 1100, 1101, 1102, etc. The push buttons could be 1200, 1201, 1202, etc. You choose the numbering system that's right for you. You'll see in a few moments that there is an easier way to manage these context numbers. Writing the ASCII help file ---------------------------------------------------------------------- The help file is in plain ASCII. You can put comments everywhere in the file. The help compiler "HC.EXE" will consider only the text between the two keywords delimiters {HLPCTX} and {HLPEND}. --> The help text MUST be saved WITHOUT carriage returns or linefeeds at the end of the lines. You put a carriage return only at the end of a paragraph. If you want a blank line between paragraphs, put two returns at the end. I strongly suggest that you write your help file with your favorite word processor and save the file in its native format. You'll also save an ASCII copy of it, without carriage returns at the end of the lines, for the help compiler. You MUST give the ASCII file the same name as your program's executable "*.EXE". For instance, if the program is named "TOTO.EXE", your ASCII help file must be named "TOTO.*". The extension is up to you, but I strongly suggest you use "*.HLT" extensions for the ASCII help file "TOTO.HLT". EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX C : Context sensitive help system Page 98/111 ---------------------------------------------------------------------- ASCII help file format ---------------------------------------------------------------------- The ASCII help file uses the following format. Example: HLPCTX 123 MENU_EDIT_PASTE By using the paste command you'll copy the content of the clipboard back onto the edit page at the cursor's location. HLPEND The help compiler will consider only what you put between the {HLPCTX} and the {HLPEND} keywords. You can put any comments you want elsewhere. 1. The HLPCTX keyword can be anywhere on the line and is case insensitive. 2. Next you put the context number. It must be separated from the {HLPCTX} keyword by at least one white space character (spaces (32) or TABS (9)) and ON THE SAME TEXT LINE. This context number must be a valid string that will evaluate to an integer. 3. After the context number, again separated by at least a white space character, and ON THE SAME LINE, you'll put the context '#define' macro. --> The compiler will produce a file with the name of your program executable and the extension "*.HCM" (Help Context Macros). You can then include this file in your source codes and reference easy to remember macros instead of context number. This macro is optional. If not present, you'll be able to reference this context only by its number. 4. You then start your help text on the next line. Everything you write, up but not including the following {HLPEND} keyword, will be considered by the help compiler as the help text associated with this context number and macro. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX C : Context sensitive help system Page 99/111 ---------------------------------------------------------------------- 5. You then put the terminating {HLPEND} keyword, wich is case insensitive. However, the preceding spaces will be considered part of the help text. Take a look at the included examples that comes with the demo programs. The help compiler ---------------------------------------------------------------------- After your ASCII help file "*.HLT" as been saved, you compile it with EasyVision's help compiler "HC.EXE". The command line is : HC [d:][\path\][filename.ext] The compiler will parse the file checking for errors. If everything goes fine, it will produce two files. One with the extension "*.HLP", the other with "*.HDX". The files will have the same name as your program's executable and be located in the same directory as the "*.HLT" file. As in our example, "TOTO.HLP" and "TOTO.HDX". The "*.HLP" and "*.HDX" help files ---------------------------------------------------------------------- The "*.HLP" and "*.HDX" files must be placed in your program's executable directory. The "*.HLP" file is the compile help text. It stays on disk and is accessed as needed during execution. The "*.HDX" file is an index to the help file that is loaded in memory at program startup. This will provide extremely fast access to the help file, even if it's on floppy disk. That's all there is to it! Your program can enjoy context sensitive help facilities with minimal work on your part. Examples of creating and using the help system are given in the EasyVision's demo programs. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX D : EasyVision's language system variables Page 100/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X D : EasyVision's language system variables ---------------------------------------------------------------------- EasyVision makes it easy to implement language files. All the prompts and data strings output by your program should be placed in a separate file as global variables. You then reference them in the other modules with 'extern' declarations. This way, you can have different language versions of your application without rewriting a single line of code. EasyVision displays a few default messages. Those are reference by the following system variables. You can change them manually to display appropriate messages for you country. Two functions are also provided to switch the interface from french to english modes. Language system variables ---------------------------------------------------------------------- --> All the following system variables are huge pointers to characters. The are reference in the header file "EVMSGS.HPP". You must include this file in every module that references these variables. ev_helpwindowtitle String displayed as the title of the help window. English : "Help" French : "Aide" EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX D : EasyVision's language system variables Page 101/111 ---------------------------------------------------------------------- ev_helpwindownohelp String displayed when an object does not have a help context or when the macro {EV_NOHLPCTX} is passed to {input::get}. English : "Sorry, but help is not available at this time..." French : "Desole, mais aucune aide n'est disponible en ce moment..." ev_helpwindowfileerror String displayed when the help system finds an error accessing the help files. English : "There was a disk error while opening the help file. If the help files (*.hlp and *.hdx) are on a floppy disk, make sure it is still in the drive unit." French : "Une erreur de lecture s'est produite en ouvrant le fichier d'aide. Si les fichiers d'aide (*.hlp et *.hdx) se trouvent sur disquette, soyez certain qu'elle est bien dans le lecteur." ev_wintextdownbutton In the {twindow::wintext} function and in the help system, string displayed on the button that will allow seeing the following page. English : " Ok" French : " Ok" ev_wintextdown In the {twindow::wintext} function and in the help system, string displayed on the statusline when the button that will allow seeing the following page is selected. English : "See next page of text" French : "Voir la prochaine page de texte" EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX D : EasyVision's language system variables Page 102/111 ---------------------------------------------------------------------- ev_wintextquitbutton In the {twindow::wintext} function and in the help system, string displayed on the button that will stop the display of text. English : " Esc" French : " Esc" ev_wintextquit In the {twindow::wintext} function and in the help system, string displayed on the statusline when the button that will allow stopping the following page is selected. English : "Quit viewing text" French : "Termine l'affichage du text" ev_filenotfoundtext In the {twindow::wintextfile} function, string displayed when the requested file is not found. English : "File not found!" French : "Fichier non trouve!" ev_filetobig In the {twindow::wintextfile} function, string displayed when the requested file is to big to be loaded in memory. English : "Sorry, not enough memory to load this file..." French : "Desole, pas assez de memoire pour charger ce fichier..." EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX D : EasyVision's language system variables Page 103/111 ---------------------------------------------------------------------- ev_windowmove String displayed when a window is moved by dragging one of its edges. English : "Drag window while holding mouse's left button" French : "Deplacez la fenetre en tenant le boutton gauche de la souris" ev_statuslinehelp String displayed in the left part of the statusline, indicating that the user should press F1 to activate the help system. English : "Help" French : "Help" english() and french() functions ---------------------------------------------------------------------- Two functions will allow you to reset the language system variables to their default values. void language_english () ; // English definitions void language_french () ; // French definitions language_english () is automatically called at program startup. To call one of these functions, "EVMSGS.HPP" must be included. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX E : EasyVision's demo programs Page 104/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X E : EasyVision's demo program ---------------------------------------------------------------------- I am a true believer in the motto 'An example will often be simple than its written explanation'. I have included two complete demo programs with EasyVision. They are in the two archives "DEMO1.ZIP" and "HANOI.ZIP". The source codes, BC++ project files and executables are given. I have tried to use as many functions as possible in these short programs. They are fully documented and they illustrate the working relationship between all those functions and classes. I really think that 90% of your questions can be answered by going through these demo programs. You are invited to try some modifications of your own, and see the results. I'll say it again... You should really print all this documentation for easier reading. It's also a good idea to print the header files for quick references. Things to remember ---------------------------------------------------------------------- A couple of things are to be remembered from this demo source code. - You should always use 'huge' POINTERS in your code. You'll be on the safe side and avoid many problems. - You should put all text and prompt strings in a separate resource file. This will make it easy to update prompts or make an alternate language file. - EasyVision won't prevent you from using 'printf' statements. However, you should work within EasyVision's boundaries and use the provided output functions. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX E : EasyVision's demo programs Page 105/111 ---------------------------------------------------------------------- - All classes come with built in default values. Often, only one call is needed to use them if the defaults are to your likings. - Looking at this demo program, you can see that you can make great looking software faster than ever. Take the time to become familiar with EasyVision. The rewards will be fewer frustrations and more enjoyment out of your programming. Have fun! EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX F : How to reach the author Page 106/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X F : How to reach the author ---------------------------------------------------------------------- I will gladly answer any questions relating to this software. I can be reach through the FidoNet or the Internet. FidoNet : 1:240/1 (Make message to Remy Gendron) InterNet : REMY_GENDRON@F1.N240.Z1.FIDONET.ORG Phone : (418) 525-6803(TNG SOFT's answering machine) Mail : Remy Gendron 2480 ave de Vitre Quebec, Quebec, Canada G1J 4A6 I can't get back to you on the phone. Be sure to leave an electronic or conventional mail address. I'll get back to you real fast. Any comments, bug reports or suggestions will be appreciated. Thank you for considering this software! Remy Gendron Author of EasyVision EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- APPENDIX G : Trademarks Page 107/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- A P P E N D I X G : Trademarks ---------------------------------------------------------------------- Turbo Vision from Borland. Borland C++ 3.1 from Borland. DeskViev from Quarterdeck. CXL from Mike Smedley. EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- INDEX Page 108/111 ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- I N D E X ---------------------------------------------------------------------- BUTTONSETCOLORS, 87 C - C++ default parameter values, 45 -> operator, 46 classes, 45 clock's colors, 49 . CLOSE, 51 . operator, 46 colors (appendix B), 49 command line arguments, 22 { conditional compilation, 13 {bool}, 17, 19 consistency, 15 {byte}, 17, 19 context number, 60 {dword}, 17, 19 context number (menus), 63 {FALSE}, 17 context sensitive help, 59 {TRUE}, 17 Conventions, 45 {word}, 17, 19 conventions, 14, 19 cur_info, 32 ~ cursor attributes, 32 ~ (highlight), 77 cursor's coordinates, 61 curtype, 32 A curx, 32 ADDITEM, 65 cury, 32 ADDMENU, 64 CXL, 8 ANSI escape sequences, 44 ANSI standard, 12 D ANSI.SYS driver, 44 delete, 46 ANSICOLOR, 44 desktop, 47 ARG_EXIST, 22 desktop's size, 49 ARG_IEXIST, 23 desktop's title, 50 ASSERT, 21 DESKview, 12 assert_err, 22 DIFFDATE, 42 available colors (appendix B), 49 DISPLAY, 54 driver (mouse), 56 B blinking, 48 E Bright background colors, 72 Error (System variable), 22 bright background colors, 30, 47 error messages, 14 buffer (keyb and mouse), 60 EV_MOUSE, 61 button availability, 89 EV_NOHLPCTX, 60, 64 button creation, 88 extended keys, 26, 60 BUTTONCREATE, 87 extern "C", 13 BUTTONINPUT, 90 EXTTOASCII, 27 BUTTONSETAVAIL, 89 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- INDEX Page 109/111 ---------------------------------------------------------------------- F ITEMSETAVAIL, 66 F1 (help), 60 F10, 62, 67 K farfree replacement, 24 key_code, 59, 61 farmalloc replacement, 23 KEYBFCTS.H, 26 FCOPY, 29 keycode, 60 FIDONET (author's address), 11 FIELDCREATE, 83 L FIELDGETASW, 85 license, 10 FIELDINPUT, 86 Linker errors, 14 FIELDSETASW, 85 FIELDSETCOLORS, 82 M FILEFCTS.H, 28 manual (true type version), 10 filter, 60 Memory model, 12 FNEWLINE, 28 menu (adding a), 64 FSIZE, 28 menu (hotkey), 64 function's description, 19 menu creation, 64 menu hotkeys, 62 G menu item separator, 66 GET, 59 menu items (offline), 63 GETKEY, 26 menubar, 62 GETMSG, 54 menus, 62 GETSIZE, 48 mouse driver, 56 gettextinfo replacement, 31 mouse support during input, 59 global output messages, 17 mouse's cursor, 56, 57, 58 mouse's left button, 58 H mouse's position, 58 header files compile error, 18 mouse's right button, 60 HEAPALLOC, 23 MOUSE_HIDE, 58 HEAPFREE, 24, 25 MOUSE_INIT, 56 help, 59 MOUSE_LB_DOWN, 58 help file (see appendix C), 60 MOUSE_POS, 58 Help text format, 77 MOUSE_SHOW, 57 history, 9 MOUSE_STATUS, 57 hotkey, 64 msg_, 17 msg_stderr, 22 I msg_stderr[], 22 input, 56 input facilities, 59 N input field creation, 83 name prefix, 19 input fields colors, 82 new, 46 input_info, 59, 62 new line character, 28 input_info structure, 59 instantiation, 46 O INTERNET (Author's address), 11 OPEN, 51 interrupt clock, 49 optimization, 19 item's availabitity, 66 overhead, 19 item's context number, 66 items (menu), 65 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- INDEX Page 110/111 ---------------------------------------------------------------------- P stricmp replacement, 35 Parameter validation, 9 string inversion, 39 PASCAL to C, 37 string normalisation, 38 Prototypes, 19 string to uppercase, 36 pull down menus, 62 strlen replacement, 34 struct cur_info, 32 R struct input_info, 59 redeclaration errors, 13 REFRESH, 52, 55, 67 T registration, 9 tdesktop, 47 Registration fee, 10 TDESKTOP::CLOSE, 51 Remy Gendron (Who is), 11 TDESKTOP::GETSIZE, 48 rules for C++ default arguments, TDESKTOP::OPEN, 51 45 TDESKTOP::REFRESH, 52 TDESKTOP::SETDESKCOLORS, 49 S TDESKTOP::SETTEXTMODE, 47 SCR_CRESTORE, 33 TDESKTOP::SETTEXTURE, 50 SCR_CSAVE, 32 TDESKTOP::SETTITLE, 50 SCR_TEXTATTR, 30 templates, 15 SCR_VRESTORE, 31 Testing (header files), 18 SCR_VSAVE, 31 text file display, 78 screen background texture, 50 text_info, 31 screen functions, 30 THROUGH, 66 SCRFCTS.H, 30 Ticks, 41 sensitive help, 59 TICKTIMER_INSTALL, 41 SETCOLORS, 62 TICKTIMER_READ, 42 SETDESKCOLORS, 49 TICKTIMER_RESET, 41 SETHLPCTX, 63 tilde, 54 SETLEFTCOLORS, 53 TIMEFCTS.H, 41 SETTEXTMODE, 47 tinput, 56 SETTEXTURE, 50 TINPUT::GET, 59 SETTITLE, 50 TINPUT::MOUSE_HIDE, 58 shell to DOS, 51, 52 TINPUT::MOUSE_INIT, 56 shortcuts key, 65 TINPUT::MOUSE_LB_DOWN, 58 size of a file, 28 TINPUT::MOUSE_POS, 58 size_t, 34 TINPUT::MOUSE_SHOW, 57 statusline, 53 TINPUT::MOUSE_STATUS, 57 STR_CENTER, 39 title (desktop), 50 STR_CMP, 35 tmenubar, 62 STR_CPY, 34 TMENUBAR::ADDITEM, 65 STR_ICMP, 35 TMENUBAR::ADDMENU, 64 STR_INVNAMES, 39 TMENUBAR::ITEMSETAVAIL, 66 STR_LEN, 34 TMENUBAR::SETCOLORS, 62 STR_PASTOC, 37 TMENUBAR::SETHLPCTX, 63 STR_TOLOWER, 37 TMENUBAR::THROUGH, 66 STR_TOUPPER, 36 TO_LOWER, 25 STR_TRIM, 38 TO_UPPER, 24, 25 strcmp replacement, 35 tstatusline, 53 strcpy replacement, 34 TSTATUSLINE::DISPLAY, 54 EV 2.0 User's guide TNG SOFT : The Next Generation Software ---------------------------------------------------------------------- INDEX Page 111/111 ---------------------------------------------------------------------- TSTATUSLINE::GETMSG, 54 window's height, 71 TSTATUSLINE::REFRESH, 55 window's help context, 73 TSTATUSLINE::SETLEFTCOLORS, 53 window's internal cursor, 76 TURBO VISION, 8, 12 window's size, 70 twindow, 68 window's title, 72 TWINDOW::BUTTONCREATE, 87 window's width, 71 TWINDOW::BUTTONINPUT, 90 Windows, 68 TWINDOW::BUTTONSETAVAIL, 89 WINGETCOL, 70 TWINDOW::BUTTONSETCOLORS, 87 WINGETROW, 69 TWINDOW::FIELDCREATE, 83 WINGETWIDTH, 71 TWINDOW::FIELDGETASW, 85 WININPUT, 81 TWINDOW::FIELDINPUT, 86 WININSIDE, 81 TWINDOW::FIELDSETASW, 85 WINMOVE, 79 TWINDOW::FIELDSETCOLORS, 82 WINONEDGES, 80 TWINDOW::WINCLEAR, 74 WINOPEN, 73 TWINDOW::WINCLOSE, 74 WINSCROLL, 79 TWINDOW::WINGETHEIGHT, 71 WINSETHLPCTX, 73 TWINDOW::WININPUT, 81 WINSETSIZE, 70 TWINDOW::WININSIDE, 81 WINSETTITLE, 72 TWINDOW::WINMOVE, 79 WINTEXT, 77 TWINDOW::WINONEDGES, 80 WINTEXTFILE, 78 TWINDOW::WINOPEN, 73 WINWRITE, 75 TWINDOW::WINSCROLL, 79 Word wrapping format, 77 TWINDOW::WINSETCOLORS, 71 TWINDOW::WINSETHLPCTX, 73 TWINDOW::WINSETPOS, 69 TWINDOW::WINSETTITLE, 72 TWINDOW::WINTEXT, 77 TWINDOW::WINTEXTFILE, 78 TWINDOW::WINWRITE, 75 U Updates, 10 V Validation, 14 W WAIT FOR, 60 WINCLEAR, 74 WINCLOSE, 74 window alive, 81 window dragging, 81 window features, 68 window moving, 79 window screen output, 75 window scrolling, 76 window word wrapping, 77 window's colors, 71 EV 2.0 User's guide TNG SOFT : The Next Generation Software