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

  1. /*    Copyright (C) 1992, 1993 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. getlegalpath(str, dirstr)
  92.     char *str, *dirstr;
  93.     {
  94.     char str1[256];
  95.     int i;
  96.     if(portgets(str1)==-1)
  97.         return(-1);
  98.     if(dirstr[0])
  99.         {
  100.         for(i=0;i<255;++i)
  101.             {
  102.             if(str1[i]=='\0')
  103.                 break;
  104.             if((str1[i]=='.')&&(str1[i+1]=='.'))
  105.                 {
  106.                 str[0]='\0';
  107.                 return(0);
  108.                 }
  109.             }
  110.         sprintf(str, "%s\\%s", dirstr, str1);
  111.         }
  112.     else
  113.         strcpy(str, str1);
  114.     }
  115.  
  116. main(argc, argv)
  117.     int argc;
  118.     char **argv;
  119.     {
  120.     long timestamp;
  121.     int i, j, outfd, ok, c, run, result;
  122.     char str[256], udir[256], ddir[256];
  123.     index=follow=0;
  124.     printf("Copyright (C) 1992, 1993 Peter Edward Cann, all rights reserved.\n");
  125.     if(!strcmp(getenv("REMOTE"), "YES"))
  126.         {
  127.         printf("You appear to be already logged in remotely, judging by the environment\n");
  128.         printf("variable REMOTE, so this is probably a very bad idea.\n");
  129.         printf("Are you sure you want to run SESSION? (y or n) --> ");
  130.         if(getchar()!='y') /* Note getchar() and not getch()! */
  131.             {
  132.             printf("I didn't think so!\n");
  133.             exit(99);
  134.             }
  135.         else
  136.             printf("OK, you're the boss!");
  137.         }
  138.     printf("Control-C to Exit.\n");
  139.     if((argc!=5)&&(argc!=3))
  140.         {
  141.         printf("USAGE: session <comnum> <bps> [<download dir> <upload dir>]\n");
  142.         exit(1);
  143.         }
  144.     if(argc==5)
  145.         {
  146.         strcpy(ddir, argv[3]);
  147.         strcpy(udir, argv[4]);
  148.         }
  149.     else
  150.         {
  151.         ddir[0]='\0';
  152.         udir[0]='\0';
  153.         }
  154.     comnum=atoi(argv[1])-1;
  155.     speed=atoi(argv[2]);
  156.     databits='8';
  157.     parity='n';
  158.     stopbits='1';
  159.     setport();
  160.     readset();
  161.     setup();
  162.     signal(SIGINT, quit);
  163.     run=1;
  164.     while(run)
  165.         {
  166.         sendstr("\n\n     DOWNLOAD:  (1) X   (2) X CRC   (3) X CRC 1K   (4) X CRC 16K\n\n");
  167.         sendstr("           UPLOAD:  (5) X   (6) X CRC 128/1K/16K Automatic\n\n");
  168.         if(argc==5)
  169.             sendstr("                   (q) Quit\n\n             ---> ");
  170.         else
  171.             sendstr("                 (s) Shell        (q) Quit\n\n             ---> ");
  172.         while(index==follow)
  173.             {
  174.             if(!(inp(basereg+MSTATREG)&DCDMASK))
  175.                 {
  176.                 run=0;
  177.                 break;
  178.                 }
  179.             if(kbhit())
  180.                 getch();
  181.             }
  182.         if(!run)
  183.             break;
  184.         c=buf[follow++];
  185.         if(follow>=TBUFSIZ)
  186.             follow=0;
  187.         switch(c)
  188.             {
  189.             case 'q':
  190.             case 'Q':
  191.                 sendstr("Quit\n");
  192.                 run=0;
  193.                 break;
  194.             case 's':
  195.             case 'S':
  196.                 if(argc==5)
  197.                     {
  198.                     sendstr("Shell not available with restricted directory.\n");
  199.                     break;
  200.                     }
  201.                 sendstr("Shell\n");
  202.                 printf("Entering command.com remote shell.\n");
  203.                 sprintf(str, "COM%d", comnum+1);
  204.                 putenv("PROMPT=REMOTE>$p$g");
  205.                 putenv("REMOTE=YES");
  206.                 cleanup(INHCTL);
  207.                 spawnlp(P_WAIT, "c:\\command.com", "command.com", str, "/e:01024", NULL);
  208.                 putenv("REMOTE=NO");
  209.                 setup();
  210.                 break;
  211.             case '1':
  212.                 sendstr("Xmodem Download.\nSource file pathname? (Blank to cancel)\n --> ");
  213.                 if((result=getlegalpath(str, ddir))==-1)
  214.                     {
  215.                     run=0;
  216.                     break;
  217.                     }
  218.                 if(!strlen(str))
  219.                     break;
  220.                 cleanup(INHCTL);
  221.                 result=spawnlp(P_WAIT, "xmodems", "xmodems", argv[1], argv[2], "1", str, NULL);
  222.                 setup();
  223.                 sendstr("Press any key to continue: --> ");
  224.                 while(follow==index)
  225.                     {
  226.                     if(!(inp(basereg+MSTATREG)&DCDMASK))
  227.                         {
  228.                         run=0;
  229.                         break;
  230.                         }
  231.                     if(kbhit())
  232.                         getch();
  233.                     }
  234.                 follow=index;
  235.                 sprintf(str, "Exit code = %d.\n", result);
  236.                 sendstr(str);
  237.                 break;
  238.             case '2':
  239.                 sendstr("Xmodem CRC Download.\nSource file pathname? (Blank to cancel)\n --> ");
  240.                 if((result=getlegalpath(str, ddir))==-1)
  241.                     {
  242.                     run=0;
  243.                     break;
  244.                     }
  245.                 if(!strlen(str))
  246.                     break;
  247.                 cleanup(INHCTL);
  248.                 result=spawnlp(P_WAIT, "xmcrcs", "xmcrcs", argv[1], argv[2], "1", str, NULL);
  249.                 setup();
  250.                 sendstr("Press any key to continue: --> ");
  251.                 while(follow==index)
  252.                     {
  253.                     if(!(inp(basereg+MSTATREG)&DCDMASK))
  254.                         {
  255.                         run=0;
  256.                         break;
  257.                         }
  258.                     if(kbhit())
  259.                         getch();
  260.                     }
  261.                 follow=index;
  262.                 sprintf(str, "Exit code = %d.\n", result);
  263.                 sendstr(str);
  264.                 break;
  265.             case '3':
  266.                 sendstr("Xmodem CRC 1k Download.\nSource file pathname? (Blank to cancel)\n --> ");
  267.                 if((result=getlegalpath(str, ddir))==-1)
  268.                     {
  269.                     run=0;
  270.                     break;
  271.                     }
  272.                 if(!strlen(str))
  273.                     break;
  274.                 cleanup(INHCTL);
  275.                 result=spawnlp(P_WAIT, "xmcrc1ks", "xmcrc1ks", argv[1], argv[2], "1", str, NULL);
  276.                 setup();
  277.                 sendstr("Press any key to continue: --> ");
  278.                 while(follow==index)
  279.                     {
  280.                     if(!(inp(basereg+MSTATREG)&DCDMASK))
  281.                         {
  282.                         run=0;
  283.                         break;
  284.                         }
  285.                     if(kbhit())
  286.                         getch();
  287.                     }
  288.                 follow=index;
  289.                 sprintf(str, "Exit code = %d.\n", result);
  290.                 sendstr(str);
  291.                 break;
  292.             case '4':
  293.                 sendstr("Xmodem CRC 16k Download.\nSource file pathname? (Blank to cancel)\n --> ");
  294.                 if((result=getlegalpath(str, ddir))==-1)
  295.                     {
  296.                     run=0;
  297.                     break;
  298.                     }
  299.                 if(!strlen(str))
  300.                     break;
  301.                 cleanup(INHCTL);
  302.                 result=spawnlp(P_WAIT, "xmcrc16s", "xmcrc16s", argv[1], argv[2], "1", str, NULL);
  303.                 setup();
  304.                 sendstr("Press any key to continue: --> ");
  305.                 while(follow==index)
  306.                     {
  307.                     if(!(inp(basereg+MSTATREG)&DCDMASK))
  308.                         {
  309.                         run=0;
  310.                         break;
  311.                         }
  312.                     if(kbhit())
  313.                         getch();
  314.                     }
  315.                 follow=index;
  316.                 sprintf(str, "Exit code = %d.\n", result);
  317.                 sendstr(str);
  318.                 break;
  319.             case '5':
  320.                 sendstr("Xmodem Upload.\nTarget file pathname? (Blank to cancel)\n --> ");
  321.                 if((result=getlegalpath(str, udir))==-1)
  322.                     {
  323.                     run=0;
  324.                     break;
  325.                     }
  326.                 if(!strlen(str))
  327.                     break;
  328.                 cleanup(INHCTL);
  329.                 result=spawnlp(P_WAIT, "xmodemr", "xmodemr", argv[1], argv[2], "1", str, NULL);
  330.                 setup();
  331.                 sendstr("Press any key to continue: --> ");
  332.                 while(follow==index)
  333.                     {
  334.                     if(!(inp(basereg+MSTATREG)&DCDMASK))
  335.                         {
  336.                         run=0;
  337.                         break;
  338.                         }
  339.                     if(kbhit())
  340.                         getch();
  341.                     }
  342.                 follow=index;
  343.                 sprintf(str, "Exit code = %d.\n", result);
  344.                 sendstr(str);
  345.                 break;
  346.             case '6':
  347.                 sendstr("Xmodem CRC 128/1k/16k Upload.\nTarget file pathname? (Blank to cancel)\n --> ");
  348.                 if((result=getlegalpath(str, udir))==-1)
  349.                     {
  350.                     run=0;
  351.                     break;
  352.                     }
  353.                 if(!strlen(str))
  354.                     break;
  355.                 cleanup(INHCTL);
  356.                 result=spawnlp(P_WAIT, "xmcrcr", "xmcrcr", argv[1], argv[2], "1", str, NULL);
  357.                 setup();
  358.                 sendstr("Press any key to continue: --> ");
  359.                 while(follow==index)
  360.                     {
  361.                     if(!(inp(basereg+MSTATREG)&DCDMASK))
  362.                         {
  363.                         run=0;
  364.                         break;
  365.                         }
  366.                     if(kbhit())
  367.                         getch();
  368.                     }
  369.                 follow=index;
  370.                 sprintf(str, "Exit code = %d.\n", result);
  371.                 sendstr(str);
  372.                 break;
  373.             }
  374.         }
  375.     cleanup(INHCTL);
  376.     exit(0);
  377.     }