home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / TIERRA40.ZIP / ALMOND / ALCOMM / SRC / RQUEUE.C < prev    next >
C/C++ Source or Header  |  1992-07-06  |  1KB  |  111 lines

  1. /*
  2. * rqueue.c
  3. *
  4. *
  5. * Copyright (c) 1991, 1992 by Marc W. Cygnus and Virtual Life
  6. * All Rights Reserved.
  7. *
  8. */
  9.  
  10. #include <fcntl.h>
  11. #include <sys/time.h>
  12.  
  13. #include "alcommp.h"
  14.  
  15.  
  16. /*
  17. * ALInitRQueue()
  18. *
  19. * params
  20. *
  21. * returns
  22. *
  23. */
  24.  
  25. ALtStatus ALInitRQueue( )
  26. {
  27.  
  28.   _AS.RQ.iQLen = 0;            /* queue length zero */
  29.   _AS.RQ.pQueue = (pALtRequest)NULL;    /* empty queue */
  30.   _AS.RQ.ppTail = &_AS.RQ.pQueue;    /* ptr to insertion point */
  31.  
  32.   return ALsOK;
  33.  
  34. } /* end ALInitRQueue() */
  35.  
  36.  
  37. /*
  38. * ALEnqueueRequest()
  39. *
  40. * params
  41. *
  42. * returns
  43. *
  44. */
  45.  
  46. ALtStatus ALEnqueueRequest( pReq )
  47.   pALtRequest    pReq;
  48. {
  49.   ALmProtectedFromSignals;
  50.   register int        iRet;
  51.  
  52.   ALmBlockSignals();
  53.  
  54.   if ( pReq == NULL )
  55.     iRet = ALsINVALID;
  56.   else {
  57.     *_AS.RQ.ppTail = pReq;
  58.     pReq->pNext = (pALtRequest)NULL;
  59.     _AS.RQ.ppTail = &pReq->pNext;
  60.     _AS.RQ.iQLen++;
  61.     iRet = ALsOK;
  62.   }
  63.  
  64.   ALmUnblockSignals();
  65.  
  66.   return iRet;
  67.  
  68. } /* end ALEnqueueRequest() */
  69.  
  70.  
  71. /*
  72. * ALDequeueRequest()
  73. *
  74. * params
  75. *
  76. * returns
  77. *
  78. */
  79.  
  80. ALtStatus ALDequeueRequest( ppReq )
  81.   pALtRequest *        ppReq;
  82. {
  83.   ALmProtectedFromSignals;
  84.   register int        iRet;
  85.  
  86.   ALmBlockSignals();
  87.  
  88.   if ( ppReq == NULL )
  89.     iRet = ALsINVALID;
  90.   else if ( _AS.RQ.iQLen == 0 )
  91.     iRet = ALsLOSE;    /* no requests in queue */
  92.   else {
  93.     *ppReq = _AS.RQ.pQueue;
  94.     if (( _AS.RQ.pQueue = _AS.RQ.pQueue->pNext ) == NULL )
  95.       _AS.RQ.ppTail = &_AS.RQ.pQueue;
  96.     _AS.RQ.iQLen--;
  97.     iRet = ALsOK;
  98.   }
  99.  
  100.   ALmUnblockSignals();
  101.  
  102.   return iRet;
  103.  
  104. } /* end ALDequeueRequest() */
  105.  
  106.  
  107.  
  108.  
  109.  
  110. /* end rqueue.c */
  111.