|
|
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.