Annotation of sbbs/src/sbbs3/scfg/scfgmdm.c, revision 1.1.1.1

1.1       root        1: /* scfgmdm.c */
                      2: 
                      3: /* $Id: scfgmdm.c,v 1.5 2005/11/27 23:34:28 deuce Exp $ */
                      4: 
                      5: /****************************************************************************
                      6:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
                      7:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
                      8:  *                                                                                                                                                     *
                      9:  * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html         *
                     10:  *                                                                                                                                                     *
                     11:  * This program is free software; you can redistribute it and/or                       *
                     12:  * modify it under the terms of the GNU General Public License                         *
                     13:  * as published by the Free Software Foundation; either version 2                      *
                     14:  * of the License, or (at your option) any later version.                                      *
                     15:  * See the GNU General Public License for more details: gpl.txt or                     *
                     16:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
                     17:  *                                                                                                                                                     *
                     18:  * Anonymous FTP access to the most recent released source is available at     *
                     19:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
                     20:  *                                                                                                                                                     *
                     21:  * Anonymous CVS access to the development source and modification history     *
                     22:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
                     23:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
                     24:  *     (just hit return, no password is necessary)                                                     *
                     25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
                     26:  *                                                                                                                                                     *
                     27:  * For Synchronet coding style and modification guidelines, see                                *
                     28:  * http://www.synchro.net/source.html                                                                          *
                     29:  *                                                                                                                                                     *
                     30:  * You are encouraged to submit any modifications (preferably in Unix diff     *
                     31:  * format) via e-mail to [email protected]                                                                      *
                     32:  *                                                                                                                                                     *
                     33:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
                     34:  ****************************************************************************/
                     35: 
                     36: #include "scfg.h"
                     37: 
                     38: int exec_mdm(char *fname);
                     39: 
                     40: void mdm_cfg(int mdmnum)
                     41: {
                     42: 
                     43: free(cfg.mdm_result);
                     44: cfg.mdm_result=NULL;
                     45: 
                     46: /*
                     47: strcpy(cfg.mdm_answ,"ATA");
                     48: strcpy(cfg.mdm_hang,"ATH");
                     49: strcpy(cfg.mdm_dial,"ATDT");
                     50: strcpy(cfg.mdm_offh,"ATM0H1");
                     51: strcpy(cfg.mdm_term,"ATE1V1");
                     52: strcpy(cfg.mdm_init,"AT&FS0=0S2=128E0V0X4&C1&D2");
                     53: */
                     54: cfg.mdm_answ[0]=0;
                     55: cfg.mdm_hang[0]=0;
                     56: cfg.mdm_dial[0]=0;
                     57: cfg.mdm_offh[0]=0;
                     58: cfg.mdm_term[0]=0;
                     59: cfg.mdm_init[0]=0;
                     60: cfg.mdm_spec[0]=0;
                     61: cfg.mdm_results=0;
                     62: cfg.mdm_misc=(MDM_RTS|MDM_CTS);
                     63: 
                     64: exec_mdm(mdm_file[mdmnum]);
                     65: 
                     66: }
                     67: 
                     68: void cvttab(char *str)
                     69: {
                     70:        int i;
                     71: 
                     72: for(i=0;str[i];i++)
                     73:        if(str[i]==TAB)
                     74:                str[i]=' ';
                     75: }
                     76: 
                     77: int export_mdm(char *fname)
                     78: {
                     79:        char str[256];
                     80:        int file,i;
                     81:        time_t now;
                     82:        FILE *stream;
                     83: 
                     84: sprintf(str,"%s%s.MDM",cfg.ctrl_dir,fname);
                     85: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1)
                     86:        return(0);
                     87: if((stream=fdopen(file,"wb"))==NULL) {
                     88:     close(file);
                     89:        return(0); }
                     90: 
                     91: now=time(NULL);
                     92: fprintf(stream,"# Exported from %s Node %u on %.24s\r\n\r\n"
                     93:        ,cfg.sys_name,cfg.node_num,ctime(&now));
                     94: fprintf(stream,"COM_RATE\t%ld\r\n",cfg.com_rate);
                     95: fprintf(stream,"INIT_STR\t%s\r\n",cfg.mdm_init);
                     96: fprintf(stream,"DIAL_STR\t%s\r\n",cfg.mdm_dial);
                     97: fprintf(stream,"HANGUP_STR\t%s\r\n",cfg.mdm_hang);
                     98: fprintf(stream,"ANSWER_STR\t%s\r\n",cfg.mdm_answ);
                     99: fprintf(stream,"OFFHOOK_STR\t%s\r\n",cfg.mdm_offh);
                    100: fprintf(stream,"SPEC_INIT\t%s\r\n",cfg.mdm_spec);
                    101: fprintf(stream,"TERM_INIT\t%s\r\n",cfg.mdm_term);
                    102: fprintf(stream,"LOCKED_RATE\t%s\r\n",(cfg.mdm_misc&MDM_STAYHIGH) ? "YES":"NO");
                    103: fprintf(stream,"CALLER_ID\t%s\r\n",(cfg.mdm_misc&MDM_CALLERID) ? "YES":"NO");
                    104: fprintf(stream,"DROP_DTR\t%s\r\n",(cfg.mdm_misc&MDM_NODTR) ? "NO":"YES");
                    105: fprintf(stream,"FLOW_CONTROL\t%s\r\n"
                    106:        ,(cfg.mdm_misc&(MDM_RTS|MDM_CTS)==(MDM_RTS|MDM_CTS)) ? "BOTH":
                    107:        (cfg.mdm_misc&MDM_CTS) ? "TRANSMIT" : (cfg.mdm_misc&MDM_RTS) ? "RECEIVE" : "NONE");
                    108: for(i=0;i<cfg.mdm_results;i++)
                    109:        fprintf(stream,"RESULT\t\t%u\t%u\t%u\t%s\r\n",cfg.mdm_result[i].code
                    110:                ,cfg.mdm_result[i].cps,cfg.mdm_result[i].rate,cfg.mdm_result[i].str);
                    111: 
                    112: fclose(stream);
                    113: 
                    114: return(1);
                    115: }
                    116: 
                    117: int exec_mdm(char *fname)
                    118: {
                    119:        char str[256],msg[128],*p;
                    120:        int file,i,j;
                    121:        FILE *stream;
                    122: 
                    123: sprintf(str,"%s%s.MDM",cfg.ctrl_dir,fname);
                    124: 
                    125: if((file=open(str,O_RDONLY|O_BINARY|O_DENYALL))==-1)
                    126:        return(0);
                    127: if((stream=fdopen(file,"rb"))==NULL) {
                    128:     close(file);
                    129:     return(0); }
                    130: 
                    131: while(!feof(stream)) {
                    132:        if(!fgets(str,255,stream))
                    133:                break;
                    134:        cvttab(str);
                    135:     truncsp(str);
                    136:        p=str;
                    137:        while(*p && *p<=' ')   /* look for beginning of command */
                    138:                p++;
                    139:        if(!*p)
                    140:                continue;
                    141:        if(*p=='#')             /* remarks start with # */
                    142:         continue;
                    143: 
                    144:        if(!strnicmp(p,"COM_RATE",8)) {
                    145:                p+=8;
                    146:                while(*p==' ') p++;
                    147:                cfg.com_rate=atol(p);
                    148:                continue; }
                    149: 
                    150:        if(!strnicmp(p,"INIT_STR",8)) {
                    151:                p+=8;
                    152:                while(*p==' ') p++;
                    153:                sprintf(cfg.mdm_init,"%.63s",p);
                    154:         continue; }
                    155: 
                    156:        if(!strnicmp(p,"DIAL_STR",8)) {
                    157:                p+=8;
                    158:                while(*p==' ') p++;
                    159:                sprintf(cfg.mdm_dial,"%.63s",p);
                    160:         continue; }
                    161: 
                    162:        if(!strnicmp(p,"HANGUP_STR",10)) {
                    163:                p+=10;
                    164:                while(*p==' ') p++;
                    165:                sprintf(cfg.mdm_hang,"%.63s",p);
                    166:         continue; }
                    167: 
                    168:        if(!strnicmp(p,"ANSWER_STR",10)) {
                    169:                p+=10;
                    170:                while(*p==' ') p++;
                    171:                sprintf(cfg.mdm_answ,"%.63s",p);
                    172:         continue; }
                    173: 
                    174:        if(!strnicmp(p,"OFFHOOK_STR",11)) {
                    175:                p+=11;
                    176:                while(*p==' ') p++;
                    177:                sprintf(cfg.mdm_offh,"%.63s",p);
                    178:         continue; }
                    179: 
                    180:        if(!strnicmp(p,"SPEC_INIT",9)) {
                    181:                p+=9;
                    182:                while(*p==' ') p++;
                    183:                sprintf(cfg.mdm_spec,"%.63s",p);
                    184:         continue; }
                    185: 
                    186:        if(!strnicmp(p,"TERM_INIT",9)) {
                    187:                p+=9;
                    188:                while(*p==' ') p++;
                    189:                sprintf(cfg.mdm_term,"%.63s",p);
                    190:         continue; }
                    191: 
                    192:        if(!strnicmp(p,"LOCKED_RATE",11)) {
                    193:                p+=11;
                    194:                while(*p==' ') p++;
                    195:                if(!stricmp(p,"OFF") || !stricmp(p,"NO"))
                    196:                        cfg.mdm_misc&=~MDM_STAYHIGH;
                    197:                else
                    198:                        cfg.mdm_misc|=MDM_STAYHIGH;
                    199:         continue; }
                    200: 
                    201:        if(!strnicmp(p,"CALLER_ID",9)) {
                    202:                p+=9;
                    203:                while(*p==' ') p++;
                    204:                if(!stricmp(p,"YES") || !stricmp(p,"ON"))
                    205:                        cfg.mdm_misc|=MDM_CALLERID;
                    206:                else
                    207:                        cfg.mdm_misc&=~MDM_CALLERID;
                    208:         continue; }
                    209: 
                    210:        if(!strnicmp(p,"VERBAL_RESULTS",14)) {
                    211:                p+=14;
                    212:                while(*p==' ') p++;
                    213:                if(!stricmp(p,"YES") || !stricmp(p,"ON"))
                    214:                        cfg.mdm_misc|=MDM_VERBAL;
                    215:                else
                    216:                        cfg.mdm_misc&=~MDM_VERBAL;
                    217:         continue; }
                    218: 
                    219:        if(!strnicmp(p,"DROP_DTR",8)) {
                    220:                p+=8;
                    221:                while(*p==' ') p++;
                    222:                if(!stricmp(p,"OFF") || !stricmp(p,"NO"))
                    223:                        cfg.mdm_misc|=MDM_NODTR;
                    224:                else
                    225:                        cfg.mdm_misc&=~MDM_NODTR;
                    226:         continue; }
                    227: 
                    228:        if(!strnicmp(p,"FLOW_CONTROL",12)) {
                    229:                p+=12;
                    230:                while(*p==' ') p++;
                    231:                cfg.mdm_misc&=~(MDM_RTS|MDM_CTS);
                    232:                strupr(p);
                    233:                if(strstr(p,"RTS") || strstr(p,"RECEIVE") || strstr(p,"RECV")
                    234:                        || strstr(p,"BOTH"))
                    235:                        cfg.mdm_misc|=MDM_RTS;
                    236:                if(strstr(p,"CTS") || strstr(p,"TRANSMIT") || strstr(p,"SEND")
                    237:                        || strstr(p,"BOTH"))
                    238:                        cfg.mdm_misc|=MDM_CTS;
                    239:         continue; }
                    240: 
                    241:        if(!strnicmp(p,"RESULT ",7)) {
                    242:                p+=7;
                    243:                while(*p==' ') p++;
                    244:                i=atoi(p);
                    245:                for(j=0;j<cfg.mdm_results;j++)
                    246:                        if(cfg.mdm_result[j].code==i)
                    247:                                break;
                    248:                if(j>=cfg.mdm_results) {
                    249:                        if((cfg.mdm_result=(mdm_result_t *)realloc(
                    250:                                cfg.mdm_result,sizeof(mdm_result_t)
                    251:                                *(cfg.mdm_results+1)))==NULL) {
                    252:                                errormsg(WHERE,ERR_ALLOC,p,cfg.mdm_results+1);
                    253:                                cfg.mdm_results=0;
                    254:                                bail(1);
                    255:                                continue; }
                    256:                        cfg.mdm_results++; }
                    257:                cfg.mdm_result[j].code=i;
                    258:                while(*p!=' ') p++;
                    259:                while(*p==' ') p++;
                    260:                cfg.mdm_result[j].cps=atoi(p);
                    261:                while(*p!=' ') p++;
                    262:         while(*p==' ') p++;
                    263:                cfg.mdm_result[j].rate=atoi(p);
                    264:                while(*p!=' ') p++;
                    265:         while(*p==' ') p++;
                    266:                sprintf(cfg.mdm_result[j].str,"%.*s",LEN_MODEM,p);
                    267:                continue; }
                    268: 
                    269:        if(!strnicmp(p,"INCLUDE ",8)) {
                    270:                p+=8;
                    271:                while(*p==' ') p++;
                    272:                exec_mdm(p);
                    273:                continue; }
                    274: 
                    275:        sprintf(msg,"ERROR: '%.15s' in %.8s.MDM",p,fname);
                    276:        umsg(msg);
                    277: }
                    278: 
                    279: fclose(stream);
                    280: return(1);
                    281: }
                    282: 
                    283: 
                    284: void init_mdms()
                    285: {
                    286:        char str[128],fname[128];
                    287:        int file;
                    288:        FILE *stream;
                    289: 
                    290: mdm_types=0;
                    291: mdm_type=NULL;
                    292: mdm_file=NULL;
                    293: sprintf(str,"%sMDMS.IXT",cfg.ctrl_dir);
                    294: if((file=nopen(str,O_RDONLY))==-1) {
                    295:        errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
                    296:        return; }
                    297: if((stream=fdopen(file,"rb"))==NULL) {
                    298:        close(file);
                    299:        errormsg(WHERE,ERR_FDOPEN,str,O_RDONLY);
                    300:        return; }
                    301: 
                    302: while(!feof(stream)) {
                    303:        if(!fgets(str,120,stream))
                    304:         break;
                    305:        truncsp(str);
                    306:        if(!fgets(fname,120,stream))
                    307:                break;
                    308:        truncsp(fname);
                    309:        if((mdm_type=realloc(mdm_type,sizeof(char *)*(mdm_types+1)))==NULL) {
                    310:                errormsg(WHERE,ERR_ALLOC,"Modem Type",sizeof(char *)*(mdm_types+1));
                    311:                break; }
                    312:        if((mdm_file=realloc(mdm_file,sizeof(char *)*(mdm_types+1)))==NULL) {
                    313:                errormsg(WHERE,ERR_ALLOC,"Modem File",sizeof(char *)*(mdm_types+1));
                    314:         break; }
                    315:        if((mdm_type[mdm_types]=malloc(strlen(str)+1))==NULL) {
                    316:                errormsg(WHERE,ERR_ALLOC,"Modem Typename",sizeof(char *)*(mdm_types+1));
                    317:         break; }
                    318:        if((mdm_file[mdm_types]=malloc(9))==NULL) {
                    319:                errormsg(WHERE,ERR_ALLOC,"Modem Filename",sizeof(char *)*(mdm_types+1));
                    320:         break; }
                    321:        strcpy(mdm_type[mdm_types],str);
                    322:        sprintf(mdm_file[mdm_types],"%.8s",fname);
                    323:        mdm_types++; }
                    324: fclose(stream);
                    325: }

unix.superglobalmegacorp.com

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