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