|
|
1.1 root 1: /* SCFGMDM.C */
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: #include "scfg.h"
6:
7: int exec_mdm(char *fname);
8:
9: void mdm_cfg(int mdmnum)
10: {
11:
12: FREE(mdm_result);
13: mdm_result=NULL;
14:
15: /*
16: strcpy(mdm_answ,"ATA");
17: strcpy(mdm_hang,"ATH");
18: strcpy(mdm_dial,"ATDT");
19: strcpy(mdm_offh,"ATM0H1");
20: strcpy(mdm_term,"ATE1V1");
21: strcpy(mdm_init,"AT&FS0=0S2=128E0V0X4&C1&D2");
22: */
23: mdm_answ[0]=0;
24: mdm_hang[0]=0;
25: mdm_dial[0]=0;
26: mdm_offh[0]=0;
27: mdm_term[0]=0;
28: mdm_init[0]=0;
29: mdm_spec[0]=0;
30: mdm_results=0;
31: mdm_misc=(MDM_RTS|MDM_CTS);
32:
33: exec_mdm(mdm_file[mdmnum]);
34:
35: }
36:
37: void cvttab(char *str)
38: {
39: int i;
40:
41: for(i=0;str[i];i++)
42: if(str[i]==TAB)
43: str[i]=SP;
44: }
45:
46: int export_mdm(char *fname)
47: {
48: char str[256];
49: int file,i;
50: time_t now;
51: FILE *stream;
52:
53: sprintf(str,"%s%s.MDM",ctrl_dir,fname);
54: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1)
55: return(0);
56: if((stream=fdopen(file,"wb"))==NULL) {
57: close(file);
58: return(0); }
59:
60: now=time(NULL);
61: fprintf(stream,"# Exported from %s Node %u on %.24s\r\n\r\n"
62: ,sys_name,node_num,ctime(&now));
63: fprintf(stream,"COM_RATE\t%ld\r\n",com_rate);
64: fprintf(stream,"INIT_STR\t%s\r\n",mdm_init);
65: fprintf(stream,"DIAL_STR\t%s\r\n",mdm_dial);
66: fprintf(stream,"HANGUP_STR\t%s\r\n",mdm_hang);
67: fprintf(stream,"ANSWER_STR\t%s\r\n",mdm_answ);
68: fprintf(stream,"OFFHOOK_STR\t%s\r\n",mdm_offh);
69: fprintf(stream,"SPEC_INIT\t%s\r\n",mdm_spec);
70: fprintf(stream,"TERM_INIT\t%s\r\n",mdm_term);
71: fprintf(stream,"LOCKED_RATE\t%s\r\n",(mdm_misc&MDM_STAYHIGH) ? "YES":"NO");
72: fprintf(stream,"CALLER_ID\t%s\r\n",(mdm_misc&MDM_CALLERID) ? "YES":"NO");
73: fprintf(stream,"DROP_DTR\t%s\r\n",(mdm_misc&MDM_NODTR) ? "NO":"YES");
74: fprintf(stream,"FLOW_CONTROL\t%s\r\n"
75: ,(mdm_misc&(MDM_RTS|MDM_CTS)==(MDM_RTS|MDM_CTS)) ? "BOTH":
76: (mdm_misc&MDM_CTS) ? "TRANSMIT" : (mdm_misc&MDM_RTS) ? "RECEIVE" : "NONE");
77: for(i=0;i<mdm_results;i++)
78: fprintf(stream,"RESULT\t\t%u\t%u\t%u\t%s\r\n",mdm_result[i].code
79: ,mdm_result[i].cps,mdm_result[i].rate,mdm_result[i].str);
80:
81: fclose(stream);
82:
83: return(1);
84: }
85:
86: int exec_mdm(char *fname)
87: {
88: char str[256],msg[128],*p;
89: int file,i,j;
90: FILE *stream;
91:
92: sprintf(str,"%s%s.MDM",ctrl_dir,fname);
93:
94: if((file=open(str,O_RDONLY|O_BINARY|O_DENYALL))==-1)
95: return(0);
96: if((stream=fdopen(file,"rb"))==NULL) {
97: close(file);
98: return(0); }
99:
100: while(!feof(stream)) {
101: if(!fgets(str,255,stream))
102: break;
103: cvttab(str);
104: truncsp(str);
105: p=str;
106: while(*p && *p<=SP) /* look for beginning of command */
107: p++;
108: if(!*p)
109: continue;
110: if(*p=='#') /* remarks start with # */
111: continue;
112:
113: if(!strnicmp(p,"COM_RATE",8)) {
114: p+=8;
115: while(*p==SP) p++;
116: com_rate=atol(p);
117: continue; }
118:
119: if(!strnicmp(p,"INIT_STR",8)) {
120: p+=8;
121: while(*p==SP) p++;
122: sprintf(mdm_init,"%.63s",p);
123: continue; }
124:
125: if(!strnicmp(p,"DIAL_STR",8)) {
126: p+=8;
127: while(*p==SP) p++;
128: sprintf(mdm_dial,"%.63s",p);
129: continue; }
130:
131: if(!strnicmp(p,"HANGUP_STR",10)) {
132: p+=10;
133: while(*p==SP) p++;
134: sprintf(mdm_hang,"%.63s",p);
135: continue; }
136:
137: if(!strnicmp(p,"ANSWER_STR",10)) {
138: p+=10;
139: while(*p==SP) p++;
140: sprintf(mdm_answ,"%.63s",p);
141: continue; }
142:
143: if(!strnicmp(p,"OFFHOOK_STR",11)) {
144: p+=11;
145: while(*p==SP) p++;
146: sprintf(mdm_offh,"%.63s",p);
147: continue; }
148:
149: if(!strnicmp(p,"SPEC_INIT",9)) {
150: p+=9;
151: while(*p==SP) p++;
152: sprintf(mdm_spec,"%.63s",p);
153: continue; }
154:
155: if(!strnicmp(p,"TERM_INIT",9)) {
156: p+=9;
157: while(*p==SP) p++;
158: sprintf(mdm_term,"%.63s",p);
159: continue; }
160:
161: if(!strnicmp(p,"LOCKED_RATE",11)) {
162: p+=11;
163: while(*p==SP) p++;
164: if(!stricmp(p,"OFF") || !stricmp(p,"NO"))
165: mdm_misc&=~MDM_STAYHIGH;
166: else
167: mdm_misc|=MDM_STAYHIGH;
168: continue; }
169:
170: if(!strnicmp(p,"CALLER_ID",9)) {
171: p+=9;
172: while(*p==SP) p++;
173: if(!stricmp(p,"YES") || !stricmp(p,"ON"))
174: mdm_misc|=MDM_CALLERID;
175: else
176: mdm_misc&=~MDM_CALLERID;
177: continue; }
178:
179: if(!strnicmp(p,"VERBAL_RESULTS",14)) {
180: p+=14;
181: while(*p==SP) p++;
182: if(!stricmp(p,"YES") || !stricmp(p,"ON"))
183: mdm_misc|=MDM_VERBAL;
184: else
185: mdm_misc&=~MDM_VERBAL;
186: continue; }
187:
188: if(!strnicmp(p,"DROP_DTR",8)) {
189: p+=8;
190: while(*p==SP) p++;
191: if(!stricmp(p,"OFF") || !stricmp(p,"NO"))
192: mdm_misc|=MDM_NODTR;
193: else
194: mdm_misc&=~MDM_NODTR;
195: continue; }
196:
197: if(!strnicmp(p,"FLOW_CONTROL",12)) {
198: p+=12;
199: while(*p==SP) p++;
200: mdm_misc&=~(MDM_RTS|MDM_CTS);
201: strupr(p);
202: if(strstr(p,"RTS") || strstr(p,"RECEIVE") || strstr(p,"RECV")
203: || strstr(p,"BOTH"))
204: mdm_misc|=MDM_RTS;
205: if(strstr(p,"CTS") || strstr(p,"TRANSMIT") || strstr(p,"SEND")
206: || strstr(p,"BOTH"))
207: mdm_misc|=MDM_CTS;
208: continue; }
209:
210: if(!strnicmp(p,"RESULT ",7)) {
211: p+=7;
212: while(*p==SP) p++;
213: i=atoi(p);
214: for(j=0;j<mdm_results;j++)
215: if(mdm_result[j].code==i)
216: break;
217: if(j>=mdm_results) {
218: if((mdm_result=(mdm_result_t *)REALLOC(
219: mdm_result,sizeof(mdm_result_t)
220: *(mdm_results+1)))==NULL) {
221: errormsg(WHERE,ERR_ALLOC,p,mdm_results+1);
222: mdm_results=0;
223: bail(1);
224: continue; }
225: mdm_results++; }
226: mdm_result[j].code=i;
227: while(*p!=SP) p++;
228: while(*p==SP) p++;
229: mdm_result[j].cps=atoi(p);
230: while(*p!=SP) p++;
231: while(*p==SP) p++;
232: mdm_result[j].rate=atoi(p);
233: while(*p!=SP) p++;
234: while(*p==SP) p++;
235: sprintf(mdm_result[j].str,"%.*s",LEN_MODEM,p);
236: continue; }
237:
238: if(!strnicmp(p,"INCLUDE ",8)) {
239: p+=8;
240: while(*p==SP) p++;
241: exec_mdm(p);
242: continue; }
243:
244: sprintf(msg,"ERROR: '%.15s' in %.8s.MDM",p,fname);
245: savnum--;
246: umsg(msg);
247: savnum++; }
248:
249: fclose(stream);
250: return(1);
251: }
252:
253:
254: void init_mdms()
255: {
256: char str[128],fname[128];
257: int file;
258: FILE *stream;
259:
260: mdm_types=0;
261: mdm_type=NULL;
262: mdm_file=NULL;
263: sprintf(str,"%sMDMS.IXT",ctrl_dir);
264: if((file=nopen(str,O_RDONLY))==-1) {
265: errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
266: return; }
267: if((stream=fdopen(file,"rb"))==NULL) {
268: close(file);
269: errormsg(WHERE,ERR_FDOPEN,str,O_RDONLY);
270: return; }
271:
272: while(!feof(stream)) {
273: if(!fgets(str,120,stream))
274: break;
275: truncsp(str);
276: if(!fgets(fname,120,stream))
277: break;
278: truncsp(fname);
279: if((mdm_type=REALLOC(mdm_type,sizeof(char *)*(mdm_types+1)))==NULL) {
280: errormsg(WHERE,ERR_ALLOC,"Modem Type",sizeof(char *)*(mdm_types+1));
281: break; }
282: if((mdm_file=REALLOC(mdm_file,sizeof(char *)*(mdm_types+1)))==NULL) {
283: errormsg(WHERE,ERR_ALLOC,"Modem File",sizeof(char *)*(mdm_types+1));
284: break; }
285: if((mdm_type[mdm_types]=MALLOC(strlen(str)+1))==NULL) {
286: errormsg(WHERE,ERR_ALLOC,"Modem Typename",sizeof(char *)*(mdm_types+1));
287: break; }
288: if((mdm_file[mdm_types]=MALLOC(9))==NULL) {
289: errormsg(WHERE,ERR_ALLOC,"Modem Filename",sizeof(char *)*(mdm_types+1));
290: break; }
291: strcpy(mdm_type[mdm_types],str);
292: sprintf(mdm_file[mdm_types],"%.8s",fname);
293: mdm_types++; }
294: fclose(stream);
295: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.