Annotation of sbbs/sbbs3/scfg/scfgmdm.c, revision 1.1

1.1     ! root        1: /* scfgmdm.c */
        !             2: 
        !             3: /* $Id: scfgmdm.c,v 1.3 2004/05/30 06:56:06 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:        savnum--;
        !           277:        umsg(msg);
        !           278:        savnum++; }
        !           279: 
        !           280: fclose(stream);
        !           281: return(1);
        !           282: }
        !           283: 
        !           284: 
        !           285: void init_mdms()
        !           286: {
        !           287:        char str[128],fname[128];
        !           288:        int file;
        !           289:        FILE *stream;
        !           290: 
        !           291: mdm_types=0;
        !           292: mdm_type=NULL;
        !           293: mdm_file=NULL;
        !           294: sprintf(str,"%sMDMS.IXT",cfg.ctrl_dir);
        !           295: if((file=nopen(str,O_RDONLY))==-1) {
        !           296:        errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
        !           297:        return; }
        !           298: if((stream=fdopen(file,"rb"))==NULL) {
        !           299:        close(file);
        !           300:        errormsg(WHERE,ERR_FDOPEN,str,O_RDONLY);
        !           301:        return; }
        !           302: 
        !           303: while(!feof(stream)) {
        !           304:        if(!fgets(str,120,stream))
        !           305:         break;
        !           306:        truncsp(str);
        !           307:        if(!fgets(fname,120,stream))
        !           308:                break;
        !           309:        truncsp(fname);
        !           310:        if((mdm_type=REALLOC(mdm_type,sizeof(char *)*(mdm_types+1)))==NULL) {
        !           311:                errormsg(WHERE,ERR_ALLOC,"Modem Type",sizeof(char *)*(mdm_types+1));
        !           312:                break; }
        !           313:        if((mdm_file=REALLOC(mdm_file,sizeof(char *)*(mdm_types+1)))==NULL) {
        !           314:                errormsg(WHERE,ERR_ALLOC,"Modem File",sizeof(char *)*(mdm_types+1));
        !           315:         break; }
        !           316:        if((mdm_type[mdm_types]=MALLOC(strlen(str)+1))==NULL) {
        !           317:                errormsg(WHERE,ERR_ALLOC,"Modem Typename",sizeof(char *)*(mdm_types+1));
        !           318:         break; }
        !           319:        if((mdm_file[mdm_types]=MALLOC(9))==NULL) {
        !           320:                errormsg(WHERE,ERR_ALLOC,"Modem Filename",sizeof(char *)*(mdm_types+1));
        !           321:         break; }
        !           322:        strcpy(mdm_type[mdm_types],str);
        !           323:        sprintf(mdm_file[mdm_types],"%.8s",fname);
        !           324:        mdm_types++; }
        !           325: fclose(stream);
        !           326: }

unix.superglobalmegacorp.com

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