home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / GRLF-C-1.ZIP / GCOMM / ASIPUTS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-14  |  4.0 KB  |  110 lines

  1. /* asiputs.c
  2. *
  3. * The Greenleaf Comm Library
  4. *
  5. * Copyright (C) 1985-1990 Greenleaf Software Inc.  All Rights Reserved.
  6. *
  7. *  unsigned asiputs( port, str, option )
  8. *  int port;            - Port 0..MAX_PORT
  9. *  char *str;           - Source String
  10. *  int option;          - Defines termination sequence (See Below)
  11. *
  12. * DESCRIPTION
  13. *
  14. *  Transmits a string in interrupt mode using repeated calls to asiputc().
  15. *  The source string must be NULL terminated.
  16. *
  17. *  Characters are read from the source string and sent to the Transmitter
  18. *  Buffer one at at time until the NULL is read on the source string OR
  19. *  the Transmitter Buffer is full, whichever happens first.
  20. *
  21. *  When the source termination has been read, the "option" argument is
  22. *  checked to determine what to send as a termination sequence.  This
  23. *  sequence, if any, is sent to the Transmitter Buffer to end the
  24. *  operation.
  25. *       option value    Sequence to send
  26. *       ------------    ----------------
  27. *       -1              None
  28. *       -2              Carriage Return / Line Feed (0x0D,0x0A)
  29. *       0x00..0xff      Value of option (00..ff)
  30. *
  31. * SIDE EFFECTS
  32. *  none, this function calls the asiputc() function for each character
  33. *  in the string.  All optional modes set for asiputc() also apply for
  34. *  asputs().
  35. *
  36. * RETURNS
  37. *  The return value always indicates the number of characters SUCCESSFULLY
  38. *  transmitted.  The global variable _aserror can be examined to determine
  39. *  if an error was detected.  _aserror == 0 if no errors were detected.
  40. *
  41. *       _aserror =
  42. *
  43. *       Value           Meaning
  44. *       -----           -------
  45. *       ASSUCCESS       No errors detected
  46. *       ASINVPORT       Requested port is out of range
  47. *       ASNOTSETUP      Requested port not setup with asifirst()
  48. *       ASBUFRFULL      Transmit buffer became full
  49. *       ASINVPAR        Option parameter invalid
  50. *
  51. * MODIFICATIONS
  52. *  10-29-85     David Nienhiser
  53. *               Modified for release 2.0
  54. *               Added third parameter "option"
  55. */
  56. #include <stdio.h>
  57. #include "gf.h"
  58. #include "asiports.h"
  59.  
  60. unsigned GF_CONV asiputs(port,string,option)
  61. int port,option;
  62. char *string;
  63. {
  64.         unsigned xmit_count;
  65.  
  66.         if ( option < -2 || option > 255) {
  67.                 _aserror = ASINVPAR;
  68.                 return(0);
  69.         }
  70.  
  71.         /********************************************************
  72.         *  First, send all the chars in the string while the    *
  73.         *  buffer is not full.  If the buffer becomes full,     *
  74.         *  return right then, ASBUFRFULL                        *
  75.         ********************************************************/
  76.         for (xmit_count=0;*string;++string,++xmit_count)
  77.                 if ((_aserror=asiputc(port,((int)*string & 255) ))!=ASSUCCESS)
  78.                         return(xmit_count);
  79.  
  80.         /********************************************************
  81.         * If option is 00..FF, send it and bump counter         *
  82.         ********************************************************/
  83.         if(option >= 0) {
  84.                 if ((_aserror=asiputc(port,option))!=ASSUCCESS)
  85.                         return(xmit_count);
  86.                 else
  87.                         ++xmit_count;
  88.         }
  89.  
  90.         /********************************************************
  91.         * If option is -2, send CR,LF sequence now              *
  92.         ********************************************************/
  93.         if (option == -2) {
  94.                 if ((_aserror=asiputc(port,CR))!=ASSUCCESS)
  95.                         return(xmit_count);
  96.                 else
  97.                         ++xmit_count;
  98.                 if ((_aserror=asiputc(port,LF))!=ASSUCCESS)
  99.                         return(xmit_count);
  100.                 else
  101.                         ++xmit_count;
  102.         }
  103.  
  104.         /********************************************************
  105.         * Option is -1 so send nothing further.                 *
  106.         ********************************************************/
  107.         return (xmit_count);
  108. }
  109.  
  110.