home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / bts314b4 / brec.c < prev    next >
C/C++ Source or Header  |  1994-01-04  |  8KB  |  258 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /*                                                                          */
  4. /*      ------------         Bit-Bucket Software, Co.                       */
  5. /*      \ 10001101 /         Writers and Distributors of                    */
  6. /*       \ 011110 /          Freely Available<tm> Software.                 */
  7. /*        \ 1011 /                                                          */
  8. /*         ------                                                           */
  9. /*                                                                          */
  10. /*  (C) Copyright 1987-90, Bit Bucket Software Co., a Delaware Corporation. */
  11. /*                                                                          */
  12. /*                                                                          */
  13. /*                  This module was written by Bob Hartman                  */
  14. /*                                                                          */
  15. /*                                                                          */
  16. /*                 BinkleyTerm Batch Receiver State Machine                 */
  17. /*                                                                          */
  18. /*                                                                          */
  19. /*    For complete  details  of the licensing restrictions, please refer    */
  20. /*    to the License  agreement,  which  is published in its entirety in    */
  21. /*    the MAKEFILE and BT.C, and also contained in the file LICENSE.240.    */
  22. /*                                                                          */
  23. /*    USE  OF THIS FILE IS SUBJECT TO THE  RESTRICTIONS CONTAINED IN THE    */
  24. /*    BINKLEYTERM  LICENSING  AGREEMENT.  IF YOU DO NOT FIND THE TEXT OF    */
  25. /*    THIS  AGREEMENT IN ANY OF THE  AFOREMENTIONED FILES,  OR IF YOU DO    */
  26. /*    NOT HAVE THESE FILES,  YOU  SHOULD  IMMEDIATELY CONTACT BIT BUCKET    */
  27. /*    SOFTWARE CO.  AT ONE OF THE  ADDRESSES  LISTED BELOW.  IN NO EVENT    */
  28. /*    SHOULD YOU  PROCEED TO USE THIS FILE  WITHOUT HAVING  ACCEPTED THE    */
  29. /*    TERMS  OF  THE  BINKLEYTERM  LICENSING  AGREEMENT,  OR  SUCH OTHER    */
  30. /*    AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO.      */
  31. /*                                                                          */
  32. /*                                                                          */
  33. /* You can contact Bit Bucket Software Co. at any one of the following      */
  34. /* addresses:                                                               */
  35. /*                                                                          */
  36. /* Bit Bucket Software Co.        FidoNet  1:104/501, 1:132/491, 1:141/491  */
  37. /* P.O. Box 460398                AlterNet 7:491/0                          */
  38. /* Aurora, CO 80046               BBS-Net  86:2030/1                        */
  39. /*                                Internet f491.n132.z1.fidonet.org         */
  40. /*                                                                          */
  41. /* Please feel free to contact us at any time to share your comments about  */
  42. /* our software and/or licensing policies.                                  */
  43. /*                                                                          */
  44. /*--------------------------------------------------------------------------*/
  45.  
  46.  
  47. /* System include files */
  48. #ifndef __TOS__
  49. #include <fcntl.h>
  50. #endif
  51. #include <stdio.h>
  52. #include <string.h>
  53.  
  54. #ifdef __TURBOC__
  55. #ifdef __TOS__
  56. /* #pragma warn -sus */
  57. #include <stdlib.h>
  58. #else
  59. #include <mem.h>
  60. #include <alloc.h>
  61. #endif
  62. #else
  63. #ifdef LATTICE
  64. #include <stdlib.h>
  65. #else
  66. #include <memory.h>
  67. #include <malloc.h>
  68. #endif
  69. #endif
  70.  
  71. #include "bink.h"
  72. #include "msgs.h"
  73. #include "com.h"
  74. #include "sbuf.h"
  75. #include "defines.h"
  76. #include "ascii.h"
  77. #include "vfossil.h"
  78.  
  79. int cdecl BRInit (XMARGSP args, int start_state);
  80. int cdecl BREnd (XMARGSP args, int cur_state);
  81. int cdecl BRTestSL (XMARGSP args);
  82. int cdecl BRCheckSL (XMARGSP args);
  83. int cdecl BRCheckFNm (XMARGSP args);
  84. int cdecl BRCheckFile (XMARGSP args);
  85. int cdecl BRFindType (XMARGSP args);
  86.  
  87. STATES Batch_Receiver[] = {
  88.    { "BRInit", ( void *) BRInit },
  89.    { "BREnd", ( void *) BREnd },
  90.    { "BR0", ( void *) BRTestSL },
  91.    { "BR1", ( void *) BRCheckSL },
  92.    { "BR2", ( void *) BRCheckFNm },
  93.    { "BR3", ( void *) BRCheckFile },
  94.    { "BR4", ( void *) BRFindType },
  95. };
  96.  
  97. int cdecl BRInit (XMARGSP args, int start_state)
  98. {
  99.    XON_DISABLE ();
  100.    args->filename = calloc ( 1, 14 );
  101.    return (start_state);
  102. }
  103.  
  104. int cdecl BREnd (XMARGSP args, int cur_state)
  105. {
  106.    free (args->filename);
  107.    return (cur_state);
  108. }
  109.  
  110. int cdecl BRTestSL (XMARGSP args)
  111. {
  112.    if (!no_sealink)
  113.       SENDBYTE (WANTCRC);
  114.  
  115.    args->T1 = timerset (1000);
  116.    args->T2 = timerset (12000);
  117.  
  118.    return (BR1);
  119. }
  120.  
  121. int cdecl BRCheckSL (XMARGSP args)
  122. {
  123.    long BR1Timer;
  124.  
  125.    BR1Timer = timerset (200);
  126.    while (!timeup (BR1Timer))
  127.       {
  128.       if (timeup (args->T2) || no_sealink)
  129.          {
  130.          args->result = Modem7_Receive_File (args->filename);
  131.          return (BR2);
  132.          }
  133.       if ((args->CHR = PEEKBYTE ()) >= 0)
  134.          {
  135.          return (BR4);
  136.          }
  137.       if (timeup (args->T1))
  138.          {
  139.          args->result = Modem7_Receive_File (args->filename);
  140.          return (BR2);
  141.          }
  142.       else
  143.          {
  144.          if (!CARRIER)
  145.             return (CARRIER_ERR);
  146.          else
  147.             time_release ();
  148.          }
  149.       }
  150.  
  151.    SENDBYTE (WANTCRC);
  152.    return (BR1);
  153. }
  154.  
  155. int cdecl BRCheckFNm (XMARGSP args)
  156. {
  157.    char buff1[20];
  158.    char *p;
  159.    int i;
  160.  
  161.    (void) memset (buff1, 0, 19);
  162.  
  163.    /* Was it the last file */
  164. #ifdef NEW    /* SWG: 9th July 1991 : I think is wrong.. it stops FTS receiver from sending! */
  165.     if(args->result == SUCCESS_EOT)
  166. #else
  167.    if (args->result == EOT_RECEIVED)
  168. #endif
  169.       {
  170.       return (SUCCESS);
  171.       }
  172.    /* Did we get a valid filename */
  173.    else if (args->result == SUCCESS)
  174.       {
  175.       /* First set up the filename buffer */
  176.       p = buff1;
  177.       for (i = 0; i < 8; ++p, i++)
  178.          {
  179.          if (args->filename[i] != ' ')
  180.             {
  181.             *p = args->filename[i];
  182.             }
  183.          else
  184.             break;
  185.          }
  186.  
  187.       *p = '.';
  188.       ++p;
  189.       *p = '\0';
  190.       for (i = 8; i < 11; ++p, i++)
  191.          {
  192.          if (args->filename[i] != ' ')
  193.             {
  194.             *p = args->filename[i];
  195.             }
  196.          else
  197.             break;
  198.          }
  199.       *p = '\0';
  200.       (void) strcpy (args->filename, buff1);
  201.       args->result = Xmodem_Receive_File (args->path, args->filename);
  202.       return (BR3);
  203.       }
  204.    /* Otherwise, we have to exit */
  205.    else
  206.       return (args->result);
  207. }
  208.  
  209. int cdecl BRCheckFile (XMARGSP args)
  210. {
  211.    /* Was the file transfer good */
  212.    if ((args->result == SUCCESS) || (args->result == SUCCESS_EOT))
  213.       {
  214.       return (BR0);
  215.       }
  216.    else
  217.       {
  218.       return (args->result);
  219.       }
  220. }
  221.  
  222. int cdecl BRFindType (XMARGSP args)
  223. {
  224.    switch (args->CHR)
  225.       {
  226.       case NUL:
  227.          (void) TIMED_READ (0);
  228.          args->T1 = timerset (2000);
  229.          return (BR1);
  230.  
  231.       case SOH:
  232.       case SYN:
  233.          args->result = Batch_Xmodem_Receive_File (args->path, args->filename);
  234.          return (BR3);
  235.  
  236.       case EOT:
  237.          (void) TIMED_READ (0);
  238.          SENDBYTE (ACK);
  239.          return (SUCCESS);
  240.  
  241.       default:
  242.          (void) TIMED_READ (0);
  243.          return (BR1);
  244.       }
  245.  
  246. }
  247.  
  248. int Batch_Receive (char *where)
  249. {
  250.    XMARGS batch;
  251.    int res;
  252.  
  253.    batch.result = 0;
  254.    batch.path = where;
  255.    res = state_machine (Batch_Receiver, &batch, 2);
  256.    return (res);
  257. }
  258.