home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / SCFG / SCFGMDM.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  6.7 KB  |  296 lines

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