home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / nettos11.zip / MSGSERV / BROADMSG.PRG < prev    next >
Text File  |  1993-02-24  |  3KB  |  156 lines

  1. /*
  2.  * File......: BROADMSG.PRG
  3.  * Author....: Glenn Scott
  4.  * CIS ID....: 71620,1521
  5.  * Date......: $Date$
  6.  * Revision..: $Revision$
  7.  * Log file..: $Logfile$
  8.  * 
  9.  * This is an original work by Glenn Scott and is placed in the
  10.  * public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log$
  16.  *
  17.  */
  18.  
  19.  
  20. #include "ftint86.ch"
  21. #include "netto.ch"
  22.  
  23. /*  $DOC$
  24.  *  $FUNCNAME$
  25.  *     FN_SBM()
  26.  *  $CATEGORY$
  27.  *     Message
  28.  *  $ONELINER$
  29.  *     Send broadcast message
  30.  *  $SYNTAX$
  31.  *
  32.  *     fn_sbm( <anConn>, <cMsg> ) -> aResult
  33.  *
  34.  *  $ARGUMENTS$
  35.  *
  36.  *     <anConn> is an array of numeric connection IDs (e.g., 1-100 in 
  37.  *     NW 286, 1-250 in NW386).  If you only want to send to one 
  38.  *     connection ID, just send in a one element array, i.e. { nConn }
  39.  *
  40.  *  $RETURNS$
  41.  *
  42.  *     An array of result codes as follows:
  43.  *
  44.  *          0        Success (msg stored in target msg buffer)
  45.  *        252        Rejected (target station buffer full)
  46.  *        253        Invalid Connection Number (too high, etc)
  47.  *        255        Blocked (station casted off, or isn't in use)
  48.  *
  49.  *  $DESCRIPTION$
  50.  *
  51.  *     fn_sbm() sends a broadcast message to the specified logical
  52.  *     connections on the default file server.
  53.  *
  54.  *     Note that a broadcast message on Novell Netware does *not*
  55.  *     contain the userid/connection number of the sender.
  56.  *     It will show up on line 25 of the user's screen, with only 
  57.  *     the symbol  ">>" in front of it.
  58.  *
  59.  *     A broadcast message can be up to 55 bytes long.  Workstations
  60.  *     have one 55-byte buffer available.
  61.  *
  62.  *  $EXAMPLES$
  63.  *
  64.  *         aResult := fn_sbm( { 10, 15, 22 } , "Hi there!" )
  65.  *
  66.  *         Attempts to send msg to stations 10, 15, and 22.
  67.  *         Result codes in aResult (array).
  68.  *
  69.  *  $INCLUDE$
  70.  *
  71.  *  $SEEALSO$
  72.  *
  73.  *  $END$
  74.  */
  75.  
  76.  
  77. function fn_sbm( aConns, cMsg )
  78.    local cReq, cRep, aRes := {}, nX
  79.  
  80.    cReq := I2BYTE( 0 ) + ;
  81.            I2BYTE( len( aConns ) ) 
  82.  
  83.    aeval( aConns, { |x| cReq += I2BYTE( x ) } )
  84.  
  85.    cReq += I2BYTE( len( cMsg ) ) +;
  86.            cMsg
  87.  
  88.    cRep := I2BYTE( 0 ) + repl( chr(0), len( aConns ) )
  89.  
  90.    if _fnReq( 225, cReq, @cRep ) == 0
  91.       for nX := 1 to BYTE2I( substr( cRep, 1, 1 ) )
  92.          aadd( aRes, BYTE2I( subst( cRep, nX + 1, 1 ) ) )
  93.       next
  94.    endif
  95.  
  96.    return aRes
  97.  
  98.  
  99. /*  $DOC$
  100.  *  $FUNCNAME$
  101.  *     FN_GBM()
  102.  *  $CATEGORY$
  103.  *     Message
  104.  *  $ONELINER$
  105.  *     Get broadcast message
  106.  *  $SYNTAX$
  107.  *
  108.  *     fn_gbm() -> aRes
  109.  *
  110.  *  $ARGUMENTS$
  111.  *     
  112.  *     None
  113.  *
  114.  *  $RETURNS$
  115.  *
  116.  *    <aRes>, an array, as follows:
  117.  *
  118.  *          aRes[1] is the result code, a numeric
  119.  *          aRes[2] is the message (if any), a character string
  120.  *
  121.  *
  122.  *  $DESCRIPTION$
  123.  *
  124.  *  $EXAMPLES$
  125.  *
  126.  *  $INCLUDE$
  127.  *     FTINT86.CH
  128.  *  $SEEALSO$
  129.  *     FT_INT86()
  130.  *  $END$
  131.  */
  132.  
  133.  
  134. function fn_gbm()
  135.    local cReq, cRep, aRes, nRet
  136.  
  137.    cReq := I2BYTE( 1 )
  138.    cRep := space( 56 )
  139.  
  140.    nRet := _fnReq( 225, cReq, @cRep )
  141.    if nRet == 0
  142.       aRes := { nRet, subs( cRep, 2 ) }
  143.    else
  144.       aRes := { nRet, "" }
  145.    endif
  146.  
  147.    return aRes
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.