home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Kernel / h / emstream.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-17  |  1.1 KB  |  49 lines

  1. #ifdef xkernel
  2. #ifdef UNDEF    
  3. extern void REMOVEMSGQUEUE(), INSERTMSGQUEUE();
  4. #else
  5. #define INSERTMSGQUEUE(q,m,l){\
  6.   msgqueue *s;\
  7.   if((s = (msgqueue *)malloc((unsigned)(sizeof(msgqueue)+l-1))) == NULL){\
  8.     /* die...die!! */\
  9.   } else {\
  10.     bcopy((m),s->data,(l));\
  11.     s->offset = 0;\
  12.     s->length = (l);\
  13.     s->next = (q);\
  14.     s->prev = (q)->prev;\
  15.     (q)->prev->next = s;\
  16.     (q)->prev = s;\
  17.   }\
  18. }
  19. #define REMOVEMSGQUEUE(q,m,l,ems){\
  20.   (l) = min((l), (q)->length-(q)->offset);\
  21.   bcopy(&((q)->data[(q)->offset]),(char *)(m),(l));\
  22.   if ((l) < (q)->length - (q)->offset) { \
  23.     (q)->offset += (l); \
  24.     xkv((ems)->sem); \
  25.   } else { \
  26.     (q)->next->prev = (q)->prev; \
  27.     (q)->prev->next = (q)->next; \
  28.     free((char *)q); \
  29.   }\
  30. }
  31. #define MSGQUEUEEMPTY(ems) ((ems)->buffers->next == (ems)->buffers)
  32.  
  33. #endif
  34. typedef struct mq {
  35.   struct mq *prev, *next;
  36.   int offset,length;
  37.   char data[1];
  38. } msgqueue;
  39.  
  40. typedef struct emstream {
  41.   SESSN sessn;
  42.   int eof;
  43.   Semaphore *sem;
  44.   msgqueue  *buffers;
  45.   struct CompilerLoadReq *req;
  46.   int usedForDebugging;
  47. } EMSTREAM;
  48. #endif xkernel
  49.