From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/tasker.c | 127 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/tasker.c (limited to 'reference/C/CONTRIB/SNIP/tasker.c') diff --git a/reference/C/CONTRIB/SNIP/tasker.c b/reference/C/CONTRIB/SNIP/tasker.c new file mode 100755 index 0000000..be34c7e --- /dev/null +++ b/reference/C/CONTRIB/SNIP/tasker.c @@ -0,0 +1,127 @@ +/* +** Tasker.C +** +** public domain by David Gibbs +*/ + +struct ts_os_ver t_os_ver[TOT_OS]; +int t_os_type; +int t_os; + +const char *t_os_name[TOT_OS] = { + "DOS", + "OS/2 DOS", + "DESQview", + "Windows Std", + "Windows 386" + }; + +int get_os (void) +{ + union REGS t_regs; + + t_os_type = 0; + t_os = 0; + + /* test for DOS or OS/2 */ + + if (_osmajor < 10) + { + t_os_ver[DOS].maj = _osmajor; + t_os_ver[DOS].min = _osminor; + t_os_type = t_os_type | is_DOS; + } + else + { + t_os_type = t_os_type | is_OS2; + t_os_ver[OS2].maj = _osmajor/10; + t_os_ver[OS2].min = _osminor; + } + + /* test for Windows */ + + t_regs.x.ax = 0x4680; + int86(0x2F, &t_regs, &t_regs); + + if (t_regs.x.ax == 0x0000) + { + t_os_ver[WINS].maj = 3; + t_os_ver[WINS].min = 0; + t_os_type = t_os_type | is_WINS; + } + else + { + t_regs.x.ax = 0x1600 ; + int86(0x2F, &t_regs, &t_regs); + + switch (t_regs.h.al) + { + case 0x00 : + case 0x80 : + case 0x01 : + case 0xFF : + break; + + default : + t_os_type = t_os_type | is_WIN3; + t_os_ver[WIN3].maj = t_regs.h.al; + t_os_ver[WIN3].min = t_regs.h.ah; + break ; + } /* endswitch */ + } /* endif */ + + /* Test for DESQview */ + + t_regs.x.cx = 0x4445; /* load incorrect date */ + t_regs.x.dx = 0x5351; + t_regs.x.ax = 0x2B01; /* DV set up call */ + + intdos(&t_regs, &t_regs); + if (t_regs.h.al != 0xFF) + { + t_os_type = t_os_type | is_DV; + t_os_ver[DV].maj = t_regs.h.bh; + t_os_ver[DV].min = t_regs.h.bl; + } + + if(t_os_type & is_DOS) + t_os = DOS; + + if(t_os_type & is_WINS) + t_os = WINS; + + if(t_os_type & is_WIN3) + t_os = WIN3; + + if(t_os_type & is_DV) + t_os = DV; + + if(t_os_type & is_OS2) + t_os = OS2; + + return(t_os-1); + +} + +void t_slice(void) +{ + union REGS t_regs; + + switch (t_os) + { + case DOS : + break; + + case OS2 : + case WIN3 : + case WINS : + t_regs.x.ax = 0x1680; + int86(0x2f,&t_regs,&t_regs); + break; + + case DV : + t_regs.x.ax = 0x1000; + int86(0x15,&t_regs,&t_regs); + break; + } /* switch(t_os) */ +} -- cgit v1.2.3-54-g00ecf