Annotation of sbbs/sbbs2/scfg/scfgmdm.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.