1 /*
2 **
3 **  MS-DOS system-dependant routines for editline library.
4 */
5 #include "editline.h"
6 #include "dos.h"
7 
8 #ifdef __TURBOC__
9 #pragma argsused
10 #endif
11 
12 /* Reset is a dummy argument */
13 
14 void
rl_ttyset(int Reset)15 rl_ttyset(int Reset)
16 {
17 }
18 
19 
20 void
rl_add_slash(char * path,char * p)21 rl_add_slash( char *path, char *p )
22 {
23     struct stat	Sb;
24 
25     if (stat (path, &Sb) >= 0 )
26     (void)strcat( p, S_ISDIR (Sb.st_mode) ? SEPST : " ");
27 }
28 
29 #if defined(DESQVP)
30 /* DESQview routine for giving up time slice */
31 
32 static  union REGS pregsi ;
33 static  union REGS pregso ;
34 static internum ;
35 static dv_flag = 0 ;
36 
37 static void
dv_init(void)38 dv_init( void )
39 {
40   /* test general capability */
41    internum = 0x2F ;
42    pregsi.x.ax = 0x1680 ;
43    int86( internum, &pregsi, &pregso);
44    if ( pregso.h.al == 0 )
45    {
46 	dv_flag = 1 ;
47 	return ;
48    }
49 
50   /* test desqview capability */
51    internum = 0x21 ;
52    pregsi.x.ax = 0x2b01 ;
53    int86( internum, &pregsi, &pregso);
54    if ( pregso.h.al != 0xff )
55    {
56 	dv_flag = 1 ;
57         pregsi.x.ax = 0x1000 ;
58         internum = 0x15 ;
59 	return ;
60    }
61    dv_flag = -1 ;
62    return ;
63 }
64 
65 void
dv_pause(void)66 dv_pause( void )
67 {
68   switch ( dv_flag )
69   {
70   case 1 :
71 	int86( internum, &pregsi, &pregso );
72 	break ;
73   case 0 :
74 	dv_init();
75   default:
76 	return ;
77   }
78 }
79 /* DESQview and multi-tasking aware sleep() for MSDOS */
80 
81 #define DOS_TICK_CNTR 0x046c
82 
83 void
sleep(unsigned sec)84 sleep( unsigned sec )
85 {
86  time_t *ticker = ( time_t * ) DOS_TICK_CNTR ;
87  time_t tick, tock ;
88 
89  tock = ( time_t) ((181 * sec)+5) / 10 ; /* fixed point math with round up */
90  tick = *ticker ;
91  tock += tick ;
92  do
93  {
94    dv_pause();
95    tick = *ticker ;
96  } while ( tick < tock );
97 }
98 #endif
99