|
|
1.1 root 1: /* DCDWATCH.C */
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: /* Program to execute another program, but terminate if carrier detect is */
6: /* lost */
7:
8: /* Compile small memory model */
9:
10: #include <stdio.h>
11: #include <stdlib.h>
12: #include <process.h>
13: #include <dos.h>
14: #include <io.h>
15: #include <alloc.h>
16:
17: extern unsigned _heaplen=2048;
18:
19: #define uint unsigned int
20:
21: #pragma warn -par
22:
23: char hungup=0;
24: uint far *msr;
25:
26: void interrupt (*old_int21)(void);
27:
28: struct REGPACK r;
29:
30: void interrupt new_int21(uint bp, uint di, uint si, uint ds, uint es,
31: uint dx, uint cx, uint bx, uint ax, uint ip, uint cs, uint flags)
32: {
33:
34: r.r_ax=ax;
35: r.r_bx=bx;
36: r.r_cx=cx;
37: r.r_dx=dx;
38: r.r_bp=bp;
39: r.r_si=si;
40: r.r_di=di;
41: r.r_flags=flags;
42: r.r_ds=ds;
43: r.r_es=es;
44:
45: intr(0xaa,&r);
46:
47: ax=r.r_ax;
48: bx=r.r_bx;
49: cx=r.r_cx;
50: dx=r.r_dx;
51: bp=r.r_bp;
52: si=r.r_si;
53: di=r.r_di;
54: flags=r.r_flags;
55: ds=r.r_ds;
56: es=r.r_es;
57:
58: if(!(*(msr)&0x8000) && !hungup) {
59: hungup=1;
60: r.r_ax=0x4c00;
61: intr(0xaa,&r); } /* so exit */
62: }
63:
64: #pragma warn +par
65:
66:
67: int main(int argc, char **argv)
68: {
69: char str[256],*arg[30],*comspec;
70: int i;
71: FILE *stream;
72:
73: if(argc<3) {
74: printf("usage: %%!dcdwatch %%& <program> <arguments>\n");
75: exit(1) ;}
76:
77: msr=(uint far *)atol(argv[1]);
78:
79: if((stream=fopen("INTRSBBS.DAT","r"))!=NULL) {
80: fgets(str,81,stream);
81: msr=(uint far *)atol(str);
82: fclose(stream);
83: remove("INTRSBBS.DAT"); }
84:
85: if(msr) {
86: old_int21=getvect(0x21);
87: setvect(0xAA,old_int21);
88: setvect(0x21,new_int21); }
89:
90: comspec=getenv("COMSPEC");
91:
92: arg[0]=comspec;
93: arg[1]="/c";
94: for(i=2;i<30;i++)
95: arg[i]=argv[i];
96:
97: i=spawnvp(P_WAIT,arg[0],arg);
98:
99: if(msr)
100: setvect(0x21,old_int21);
101: return(i);
102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.