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

  1. /*    Copyright (C) 1992 Peter Edward Cann, all rights reserved.
  2.  *    MicroSoft QuickC
  3.  */
  4.  
  5. #include<stdio.h>
  6. #include<bios.h>
  7. #include<dos.h>
  8. #include<fcntl.h>
  9. #include<sys\types.h>
  10. #include<sys\stat.h>
  11. #include<signal.h>
  12. #include<process.h>
  13. #include"port.h"
  14.  
  15. sendchar(c)
  16.     unsigned char c;
  17.     {
  18.     while(!((inp(basereg+STATREG)&TXMTMASK)&&(inp(basereg+MSTATREG)&CTSMASK)))
  19.         if(kbhit())
  20.             getch();
  21.     outp(basereg, c);
  22.     }
  23.  
  24. int follow;
  25.  
  26. quit()
  27.     {
  28.     cleanup(0);
  29.     exit(99);
  30.     }
  31.  
  32. sendstr(str)
  33.     char *str;
  34.     {
  35.     int i;
  36.     for(i=0;str[i]!='\0';++i)
  37.         if(str[i]=='\n')
  38.             {
  39.             sendchar('\r');
  40.             sendchar('\n');
  41.             }
  42.         else
  43.             sendchar(str[i]);
  44.     }
  45.  
  46. portgets(str)
  47.     char *str;
  48.     {
  49.     int i;
  50.     i=0;
  51.     while(i<255)
  52.         {
  53.         while(follow==index)
  54.             {
  55.             if(!(inp(basereg+MSTATREG)&DCDMASK))
  56.                 return(-1);
  57.             if(kbhit())
  58.                 getch();
  59.             }
  60.         str[i]=buf[follow++];
  61.         if(follow>=TBUFSIZ)
  62.             follow=0;
  63.         if(str[i]=='\b')
  64.             if(i>0)
  65.                 {
  66.                 i-=2;
  67.                 sendchar('\b');
  68.                 sendchar(' ');
  69.                 sendchar('\b');
  70.                 }
  71.             else
  72.                 {
  73.                 i--;
  74.                 sendchar(0x07);
  75.                 }
  76.         else
  77.             sendchar(str[i]);
  78.         if((str[i]=='\r')||(str[i]=='\n'))
  79.             {
  80.             sendchar('\r');
  81.             sendchar('\n');
  82.             str[i]='\0';
  83.             break;
  84.             }
  85.         i++;
  86.         }
  87.     str[255]='\0';
  88.     return(0);
  89.     }
  90.         
  91. main(argc, argv)
  92.     int argc;
  93.     char **argv;
  94.     {
  95.     FILE *fd;
  96.     long timestamp;
  97.     int i, j, outfd, ok, c, run, result;
  98.     char str[256], filename[256], str1[256];
  99.     index=follow=0;
  100.     printf("Copyright (C) 1992 Peter Edward Cann, all rights reserved.\n");
  101.     if(!strcmp(getenv("REMOTE"), "YES"))
  102.         {
  103.         printf("You appear to be already logged in remotely, judging by the environment\n");
  104.         printf("variable REMOTE, so this is probably a very bad idea.\n");
  105.         printf("Are you sure you want to run MESSIN? (y or n) --> ");
  106.         if(getchar()!='y') /* Note getchar() and not getch()! */
  107.             {
  108.             printf("I didn't think so!\n");
  109.             exit(99);
  110.             }
  111.         else
  112.             printf("OK, you're the boss!");
  113.         }
  114.     printf("Control-C to Exit.\n");
  115.     if(argc!=4)
  116.         {
  117.         printf("USAGE: messin <comnum> <bps> <directory>\n");
  118.         exit(1);
  119.         }
  120.     comnum=atoi(argv[1])-1;
  121.     speed=atoi(argv[2]);
  122.     databits='8';
  123.     parity='n';
  124.     stopbits='1';
  125.     setport();
  126.     readset();
  127.     setup();
  128.     signal(SIGINT, quit);
  129.     sprintf(str, "\nEnter your account name: --> ");
  130.     sendstr(str);
  131.     if(portgets(str)==-1)
  132.         {
  133.         printf("Lost carrier detect.\n");
  134.         exit(10);
  135.         }
  136.     for(i=(strlen(str)-1);i>0;i--)
  137.         if(str[i]=='.')
  138.             if(str[i-1]=='.')
  139.                 {
  140.                 sendstr("Dot-Dot not permitted.\n");
  141.                 exit(11);
  142.                 }
  143.     printf("MESSOUT called on account %s.\n", str);
  144.     sprintf(filename, "%s\\%s", argv[3], str);
  145.     if((fd=fopen(filename, "r"))==NULL)
  146.         {
  147.         sprintf(str, "Sorry, can't open the file.\n");
  148.         sendstr(str);
  149.         printf("Error opening MESSOUT file.\n");
  150.         exit(1);
  151.         }
  152.     i=0;
  153.     while(1)
  154.         {
  155.         i++;
  156.         if(fgets(str, 80, fd)==NULL)
  157.             {
  158.             sprintf(str, "*** END OF MESSAGE. PRESS ANY KEY TO CONTINUE --> ");
  159.             sendstr(str);
  160.             while(follow==index)
  161.                 {
  162.                 if(!(inp(basereg+MSTATREG)&DCDMASK))
  163.                     {
  164.                     cleanup();
  165.                     exit(10);
  166.                     }
  167.                 if(kbhit())
  168.                     getch();
  169.                 }
  170.             follow=index;
  171.             sendstr("\r\nDelete the message? (y or n) --> ");
  172.             while(follow==index)
  173.                 {
  174.                 if(!(inp(basereg+MSTATREG)&DCDMASK))
  175.                     {
  176.                     cleanup();
  177.                     exit(10);
  178.                     }
  179.                 if(kbhit())
  180.                     getch();
  181.                 }
  182.             if((buf[follow]=='y')||(buf[follow]=='Y'))
  183.                 {
  184.                 unlink(filename);
  185.                 sendstr("Y\r\nMessage deleted.\r\n");
  186.                 }
  187.             else
  188.                 sendstr("N\r\nMessage retained.\r\n");
  189.             follow=index;
  190.             exit(0);
  191.             }
  192.         sendstr(str);
  193.         if(!(i%20))
  194.             {
  195.             sprintf(str, "PRESS ANY KEY TO CONTINUE: --> ");
  196.             sendstr(str);
  197.             while(index==follow)
  198.                 {
  199.                 if(kbhit())
  200.                     getch();
  201.                 if(!(inp(basereg+MSTATREG)&DCDMASK))
  202.                     {
  203.                     cleanup();
  204.                     exit(10);
  205.                     }
  206.                 }
  207.             follow=index;
  208.             sprintf(str, "\n");
  209.             sendstr(str);
  210.             }
  211.         }
  212.     exit(0);
  213.     }
  214.