Multi-Tasker Detection Routines by David Gibbs FidoNet: 1:115/439.0 Internet: David.Gibbs@f439.n115.z1.fidonet.org The following is a set of C routines that will enable a programmer to detect a mutli-tasking environment and release the time slice when desired. Currently DESQview, Windows, & OS/2 are the environments supported. Routines consist of two functions, two global int variables, one global structure, and a table of character pointers. void t_get_os(); This routines detects the operating environment, sets on the appropriate bits in the t_os_type field, and sets the t_os field to the dominant environment. void t_slice(); This routine will release the remainder of the current tasks time slice in the manner appropriate to the dominant envionment. The following fields & structures are available... int t_os_type; is a bit mapped integer that indicates the presence of various operating envionments. If Bit 0 is on, DOS is present, Bit 1 = OS2, bit 2 = DESQview, bit 3 = Windows standard, bit 4 = Windows 386 Enh. These bits can be tested by using logical operations with the symbolic constants is_DOS, is_OS2, is_DV, is_WINS, and is_WIN3. int t_os; represents the dominant environment. The dominant envionment is defined as the multi-tasking system that takes precidence. For instance, you can run Windows *UNDER* DESQview, but DESQview would be dominant, the same goes true for OS/2 & Windows. This value can be tested by comparing to the symbolic constants: DOS, OS2, DV, WINS, and WIN3. struct t_os_ver ts_os_ver[]; indicates the versions of the various environments present. Major & minor versions are found in the structure members 'maj' and 'min'. The structure is subscripted, so you can access the version of envionments using the symbolic constants use in 't_os'. const char *t_os_name[]; contains the names of the environments detectable. These too are subscripted and can be accessed using the symbolic constants above. A sample program that uses these routines follows: #include #include "tasker.h" void main() { get_os(); printf("%s %d.%d detected",t_os_name[t_os], t_os_ver[t_os].maj, t_os_ver[t_os].min); while(!kbhit()) { printf("Hit a key!\r\n"); t_slice(); } } Special thanks go to Geoffery Booher (1:2270/233) for assistance with Windows & OS/2 detection & Time slicing. This routine is released to the public as CommentWare - If you use it, please send me a comment as to what you thought of it... oh yeah, you might think of giving me credit for the routines. Also, if you can think of a enhancement or correction, please let me know. I can be reached at the above mentioned email addresses. Copyrights: DESQview by Quarterdeck Office Systems Windows by Microsoft OS/2 by IBM TurboC++ by Borland