home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / bts314b4 / m7send.c < prev    next >
C/C++ Source or Header  |  1994-01-08  |  7KB  |  193 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 Modem7 Sender 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. #ifdef __TOS__
  49. /* #pragma warn -sus */
  50. #else
  51. #include <fcntl.h>
  52. #endif
  53. #include <stdio.h>
  54. #include <string.h>
  55. #include <ctype.h>
  56.  
  57. #include "bink.h"
  58. #include "msgs.h"
  59. #include "com.h"
  60. #include "sbuf.h"
  61. #include "defines.h"
  62. #include "ascii.h"
  63. #include "vfossil.h"
  64.  
  65. static int cdecl MSInit( XMARGSP args, int start_state );
  66. static int cdecl MSEnd( XMARGSP args, int cur_state );
  67. static int cdecl MSWaitNak( XMARGSP args );
  68. static int cdecl MSWaitChAck( XMARGSP args );
  69. static int cdecl MSWaitCksm( XMARGSP args );
  70.  
  71. STATES Modem7_Sender[] = {
  72.    { "MSInit", (void *) MSInit },
  73.    { "MSEnd",  (void *)MSEnd },
  74.    { "MS0",  (void *)MSWaitNak },
  75.    { "MS1",  (void *)MSWaitChAck },
  76.    { "MS2",  (void *)MSWaitCksm }
  77. };
  78.  
  79. static int cdecl MSInit( XMARGSP args, int start_state )
  80. {
  81.    char *p;
  82.    int i;
  83.    struct FILEINFO dta;
  84.  
  85.    XON_DISABLE ();
  86.    args->tries = 0;
  87.    (void) dfind (&dta, args->filename, 0);
  88.    (void) strcpy (args->m7name, "           ");
  89.    for (i = 0, p = dta.name; i < 8; p++, i++)
  90.       if ((*p != '.') && (*p != '\0'))
  91.          args->m7name[i] = toupper(*p);
  92.       else
  93.          break;
  94.  
  95.    if (*p == '.')
  96.       ++p;
  97.    for (i = 8; i < 11; p++, i++)
  98.       if ((*p != '.') && (*p != '\0'))
  99.          args->m7name[i] = toupper(*p);
  100.       else
  101.          break;
  102.  
  103.    /* Now do the checksum */
  104.    args->check = SUB;
  105.    for (i = 0; i < 11; i++)
  106.       args->check += (unsigned char) args->m7name[i];
  107.  
  108.    return (start_state);
  109. }
  110.  
  111. static int cdecl MSEnd( XMARGSP args, int cur_state )
  112. {
  113.    args->result = cur_state;
  114.    return (cur_state);
  115. }
  116.  
  117. static int cdecl MSWaitNak( XMARGSP args )
  118. {
  119.    if (args->tries >= 10)
  120.       return (FNAME_ERR);
  121.  
  122.    if (!CARRIER)
  123.       return (CARRIER_ERR);
  124.  
  125.    if (TIMED_READ (10) != NAK)
  126.       {
  127.       ++args->tries;
  128.       return (MS0);
  129.       }
  130.  
  131.    SENDBYTE (ACK);
  132.    SENDBYTE ((unsigned char) *(args->m7name));
  133.    args->fptr = args->m7name + 1;
  134.    return (MS1);
  135. }
  136.  
  137. static int cdecl MSWaitChAck( XMARGSP args )
  138. {
  139.    if (!CARRIER)
  140.       return (CARRIER_ERR);
  141.  
  142.    if (TIMED_READ (10) != ACK)
  143.       {
  144.       ++args->tries;
  145.       SENDBYTE ('u');
  146.       return (MS0);
  147.       }
  148.  
  149.    /* If filename done */
  150.    if (*(args->fptr) == '\0')
  151.       {
  152.       SENDBYTE (SUB);
  153.       return (MS2);
  154.       }
  155.    else
  156.       {
  157.       /* Send next char of name */
  158.       SENDBYTE ((unsigned char) *args->fptr++);
  159.       return (MS1);
  160.       }
  161. }
  162.  
  163. static int cdecl MSWaitCksm( XMARGSP args )
  164. {
  165.    int in_char;
  166.  
  167.    if (!CARRIER)
  168.       return (CARRIER_ERR);
  169.  
  170.    if (((in_char = TIMED_READ (10)) < 0) || (in_char != args->check))
  171.       {
  172.       SENDBYTE ('u');
  173.       ++args->tries;
  174.       return (MS0);
  175.       }
  176.    else
  177.       {
  178.       SENDBYTE (ACK);
  179.       return (SUCCESS);
  180.       }
  181. }
  182.  
  183. int Modem7_Send_File( char *filename )
  184. {
  185.    XMARGS batch;
  186.    int res;
  187.  
  188.    batch.result = 0;
  189.    batch.filename = filename;
  190.    res = state_machine (Modem7_Sender, &batch, 2);
  191.    return (res);
  192. }
  193.