home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: DFÜ und Kommunikation / SOS-DFUE.ISO / programm / dos / utility / pccp076 / vbrowse.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-20  |  8.6 KB  |  368 lines

  1. /* Copyright (C) 1992,1993 Peter Edward Cann */
  2.  
  3. #include<stdio.h>
  4. #include<dos.h>
  5. #include<stdlib.h>
  6. #include<process.h>
  7. #include<graph.h>
  8. #include<time.h>
  9. #include<bios.h>
  10. #include<signal.h>
  11. #include"port.h"
  12.  
  13. unsigned long tick;
  14.  
  15. void (interrupt far *oldtick)();
  16.  
  17. void interrupt far tickhndl()
  18.     {
  19.     tick++;
  20.     }
  21.  
  22. sendstr(str)
  23.     char *str;
  24.     {
  25.     int i;
  26.     for(i=0;str[i];i++)
  27.         {
  28.         while(!(inp(basereg+STATREG)&TXMTMASK));
  29.         outp(basereg, str[i]);
  30.         }
  31.     }
  32.  
  33. char okstr[]="OK\r\n";
  34.  
  35. int follow;
  36.  
  37. scanok()
  38.     {
  39.     long ts;
  40.     int i;
  41.     char c;
  42.     i=0;
  43.     time(&ts);
  44.     while(1)
  45.         {
  46.         while(follow==index)
  47.             if((time(NULL)-ts)>5)
  48.                 {
  49.                 printf("ScanOK timeout.\n");
  50.                 cleanup(0);
  51.                 _dos_setvect(0x1c, oldtick);
  52.                 exit(57);
  53.                 }
  54.         putch(c=buf[follow++]);
  55.         if(follow>=TBUFSIZ)
  56.             follow=0;
  57.         if(c==okstr[i])
  58.             if(okstr[++i]=='\0')
  59.                 break;
  60.             else;
  61.         else
  62.             if(c==okstr[0])
  63.                 i=1;
  64.             else
  65.                 i=0;
  66.         }
  67.     }
  68.  
  69. void pause(int ticks)
  70.     {
  71.     long ts, ts1;
  72.     tick=0;
  73.     while(1)
  74.         {
  75.         if(tick>ticks)
  76.             break;
  77.         }
  78.     }
  79.  
  80. #define MAXTIMES 1024
  81.  
  82. long times[MAXTIMES];
  83.  
  84. int ntimes;
  85.  
  86. quit()
  87.     {
  88.     cleanup(0);
  89.     _dos_setvect(0x1c, oldtick);
  90.     }
  91.  
  92. main(argc, argv)
  93.     int argc;
  94.     char **argv;
  95.     {
  96.     int i, j, curind, flag, toflag, fbi, delenp, gbdr, mbdr;
  97.     char grtpname[256], msgpname[256], msgss[256], *quicke, gq, mq;
  98.     char c, numstr[16], *cp, farback[16], txpname[256], cmdstr[40];
  99.     long tmptime;
  100.     time_t ts;
  101.     struct tm *tptr;
  102.     struct find_t findbuf;
  103.     if(argc<7)
  104.         {
  105.         printf("USAGE: vbrowse <com#> <canned spd> <canned q> <msg spd> <msg q> <dir> [/d]\n");
  106.         printf("Where <dir> has utime.vce message files and q is bits per sample.\n");
  107.         printf("Canned .vce files are looked for in PCCPPATH.\n");
  108.         printf("/d enables DTMF delete option.\n");
  109.         exit(1);
  110.         }
  111.     if(argc==8)
  112.         if((argv[7][0]=='/')&&((argv[7][1]=='d')||(argv[7][1]=='D')))
  113.             delenp=1;
  114.         else
  115.             delenp=0;
  116.     if((quicke=getenv("PCCPPATH"))==NULL)
  117.         {
  118.         printf("You have apparently not set the environment variable PCCPPATH.\n");
  119.         printf("Prompt sequencing is probably going to be appallingly slow, due to\n");
  120.         printf("having to use DOS's executable path search facility.\n");
  121.         sprintf(txpname, "VOICETX.EXE");
  122.         }
  123.     else
  124.         sprintf(txpname, "%s\\VOICETX.EXE", quicke);
  125.     gbdr=atoi(argv[2]);
  126.     gq=argv[3][0];
  127.     mbdr=atoi(argv[4]);
  128.     mq=argv[5][0];
  129.     comnum=atoi(argv[1])-1;
  130.     speed=gbdr;
  131.     databits='8';
  132.     parity='n';
  133.     stopbits='1';
  134.     setport();
  135.     readset();
  136.     oldtick=_dos_getvect(0x1c);
  137.     signal(SIGINT, quit);
  138.     _dos_setvect(0x1c, tickhndl);
  139.     setup();
  140.     index=follow=0;
  141.     sprintf(cmdstr, "at#bdr=%d\r", gbdr/24);
  142.     sendstr(cmdstr);
  143.     scanok();
  144.     sprintf(cmdstr, "at#vbs=%c\r", gq);
  145.     sendstr(cmdstr);
  146.     scanok();
  147.     sprintf(msgss, "%s\\*.vce", argv[6]);
  148.     if(_dos_findfirst(msgss, _A_NORMAL, &findbuf))
  149.         {
  150.         sprintf(grtpname, "%s\\NOFILES.VCE", quicke);
  151.         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  152.         pause(12);
  153.         _dos_setvect(0x1c, oldtick);
  154.         exit(1);
  155.         }
  156.     ntimes=0;
  157.     if(sscanf(findbuf.name, "%lx", ×[ntimes++])!=1)
  158.         ntimes--;
  159.     while(!_dos_findnext(&findbuf))
  160.         {
  161.         if(sscanf(findbuf.name, "%lx", ×[ntimes++])!=1)
  162.             ntimes--;
  163.         if(ntimes>=MAXTIMES)
  164.             break;
  165.         }
  166.     for(i=0;i<ntimes;++i)
  167.         for(j=i+1;j<ntimes;++j)
  168.             if(times[i]<times[j])
  169.                 {
  170.                 tmptime=times[i];
  171.                 times[i]=times[j];
  172.                 times[j]=tmptime;
  173.                 }
  174.     /*
  175.      * Voice files for user interface. Please reconcile w/ MANUAL
  176.      *
  177.      * NOFILES.VCE: "There are no files in the directory."
  178.      * ENTSHFB.VCE: "entries exist. How far back?"
  179.      * INSTRUC.VCE "Cancel any playback with star. At any prompt,
  180.      *         dial digits, star to clear, pound to enter.
  181.              Entering nothing exits."
  182.      * DELETE.VCE "Dial 3 pound to delete, or just pound to proceed."
  183.      * DELETED.VCE "You have already deleted that message."
  184.      * <digit>RISE.VCE Decimal digit with rising inflection.
  185.      * <digit>DIP.VCE Decimal digit with dip inflection.
  186.      * <digit>FALL.VCE Decimal digit with falling inflection.
  187.      * POINT.VCE "Point" with mild dip inflection.
  188.      * AT.VCE "At" with mild dip inflection
  189.      */
  190.     sprintf(grtpname, "%s\\instruc.vce", quicke);
  191.     spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  192.     pause(9);
  193.     while(1)
  194.         {
  195.         sprintf(numstr, "%d", ntimes);
  196.         for(cp=numstr;*cp;++cp)
  197.             {
  198.             if(cp[1])
  199.                 sprintf(grtpname, "%s\\%cRISE.VCE", quicke, *cp);
  200.             else
  201.                 sprintf(grtpname, "%s\\%cDIP.VCE", quicke, *cp);
  202.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, NULL);
  203.             }
  204.         sprintf(grtpname, "%s\\ENTSHFB.VCE", quicke);
  205.         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  206.         follow=index=fbi=flag=0;
  207.         while(1)
  208.             {
  209.             time(&ts);
  210.             toflag=0;
  211.             while(follow==index)
  212.                 if((time(NULL)-ts)>10)
  213.                     if(toflag)
  214.                         break;
  215.                     else
  216.                         {
  217.                         toflag=1;
  218.                         sprintf(grtpname, "%s\\INSTRUC.VCE", quicke);
  219.                         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  220.                         pause(9);
  221.                         for(cp=numstr;*cp;++cp)
  222.                             {
  223.                             if(cp[1])
  224.                                 sprintf(grtpname, "%s\\%cRISE.VCE", quicke, *cp);
  225.                             else
  226.                                 sprintf(grtpname, "%s\\%cDIP.VCE", quicke, *cp);
  227.                             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, NULL);
  228.                             }
  229.                         sprintf(grtpname, "%s\\ENTSHFB.VCE", quicke);
  230.                         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  231.                         time(&ts);
  232.                         }
  233.             if(follow==index)
  234.                 break; /* Timed out after giving instructions */
  235.             c=buf[follow++];
  236.             if(follow>=TBUFSIZ)
  237.                 follow=0;
  238.             if((c>='0')&&(c<='9'))
  239.                 if(fbi<15)
  240.                     farback[fbi++]=c;
  241.                 else;
  242.             else if(c=='*')
  243.                 fbi=0;
  244.             else if(c=='#')
  245.                 {
  246.                 if(fbi)
  247.                     flag=1;
  248.                 break;
  249.                 }
  250.             }
  251.         if(!flag)
  252.             break;
  253.         if(atoi(farback)>=ntimes)
  254.             continue;
  255.         tmptime=times[atoi(farback)];
  256.         if(!tmptime)
  257.             {
  258.             sprintf(grtpname, "%s\\DELETED.VCE", quicke);
  259.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  260.             pause(9);
  261.             continue;
  262.             }
  263.         tptr=localtime(&tmptime);
  264.         sprintf(numstr, "%02d", tptr->tm_mon+1);
  265.         for(cp=numstr; *cp; cp++)
  266.             {
  267.             if(cp[1])
  268.                 sprintf(grtpname, "%s\\%cRISE.VCE", quicke, *cp);
  269.             else
  270.                 sprintf(grtpname, "%s\\%cDIP.VCE", quicke, *cp);
  271.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, NULL);
  272.             }
  273.         sprintf(grtpname, "%s\\POINT.VCE", quicke);
  274.         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  275.         sprintf(numstr, "%02d", tptr->tm_mday);
  276.         for(cp=numstr; *cp; cp++)
  277.             {
  278.             if(cp[1])
  279.                 sprintf(grtpname, "%s\\%cRISE.VCE", quicke, *cp);
  280.             else
  281.                 sprintf(grtpname, "%s\\%cDIP.VCE", quicke, *cp);
  282.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, NULL);
  283.             }
  284.         sprintf(grtpname, "%s\\AT.VCE", quicke);
  285.         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  286.         sprintf(numstr, "%02d", tptr->tm_hour);
  287.         for(cp=numstr; *cp; cp++)
  288.             {
  289.             if(cp[1])
  290.                 sprintf(grtpname, "%s\\%cRISE.VCE", quicke, *cp);
  291.             else
  292.                 sprintf(grtpname, "%s\\%cDIP.VCE", quicke, *cp);
  293.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, NULL);
  294.             }
  295.         sprintf(numstr, "%02d", tptr->tm_min);
  296.         for(cp=numstr; *cp; cp++)
  297.             {
  298.             if(cp[1])
  299.                 sprintf(grtpname, "%s\\%cRISE.VCE", quicke, *cp);
  300.             else
  301.                 sprintf(grtpname, "%s\\%cFALL.VCE", quicke, *cp);
  302.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, NULL);
  303.             }
  304.         pause(9);
  305.         sprintf(cmdstr, "at#vbs=%c\r", mq);
  306.         sendstr(cmdstr);
  307.         scanok();
  308.         sprintf(cmdstr, "at#bdr=%d\r", mbdr/24);
  309.         sendstr(cmdstr);
  310.         scanok();
  311.         cleanup(INHCTL);
  312.         sprintf(msgpname, "%s\\%08lx.VCE", argv[6], tmptime);
  313.         spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[4], msgpname, "*", NULL);
  314.         speed=mbdr;
  315.         setport();
  316.         setup();
  317.         sprintf(cmdstr, "at#bdr=%d\r", gbdr/24);
  318.         sendstr(cmdstr);
  319.         scanok();
  320.         cleanup(INHCTL);
  321.         speed=gbdr;
  322.         setport();
  323.         setup();
  324.         sprintf(cmdstr, "at#vbs=%c\r", gq);
  325.         sendstr(cmdstr);
  326.         scanok();
  327.         if(delenp)
  328.             {
  329.             pause(12);
  330.             sprintf(grtpname, "%s\\DELETE.VCE", quicke);
  331.             spawnlp(P_WAIT, txpname, "voicetx", argv[1], argv[2], grtpname, "*", NULL);
  332.             flag=fbi=0;
  333.             while(1)
  334.                 {
  335.                 time(&ts);
  336.                 while(follow==index)
  337.                     if((time(NULL)-ts)>10)
  338.                         {
  339.                         flag=1;
  340.                         break;
  341.                         }
  342.                 if(flag)
  343.                     break;
  344.                 c=buf[follow++];
  345.                 if(follow>=TBUFSIZ)
  346.                     follow=0;
  347.                 if(c=='3')
  348.                     fbi=!fbi;
  349.                 else if(c=='#')
  350.                     {
  351.                     if(fbi)
  352.                         {
  353.                         times[atoi(farback)]=0L;
  354.                         unlink(msgpname);
  355.                         }
  356.                     break;
  357.                     }
  358.                 else if(c!=0x10)
  359.                     fbi=0;
  360.                 }
  361.             }
  362.         pause(12);
  363.         }
  364.     cleanup(0);
  365.     _dos_setvect(0x1c, oldtick);
  366.     exit(0);
  367.     }
  368.