#define DBG 1
#define ARG 0

#include "frmwrk/inc/main.h"
/* ---------------------------------------------------------------------- */
/* TU GFIFO

   main.c
*/

#include "ed/inc/gfifo.h"
#include "ed/inc/sys.h"

struct data
{
   char const *s;
   int n;
};

int main (void)
{
   gfifo_s *f = gfifo_create(4);

   if (f != NULL)
   {
      /* record */
      {
         OBJ_RW o = obj_create(sizeof (struct data), 1);
         if (o != NULL)
         {
            struct data data =
               {
                  "hello",
                  123,
               };
            obj_write (o, &data, 0);
            /* send and forget */
            gfifo_put(f, o), o = NULL;
         }
         ASSERT (o == NULL);
      }
      /* playback */
      {
         OBJ_RO o = NULL;
         gfifo_get(f, &o);
         {
            struct data data;
            obj_read (o, &data, 0);
            printf ("'%s' %d\n", data.s, data.n );
         }
         obj_delete (o), o = NULL;
         ASSERT (o == NULL);
      }
      gfifo_delete(f), f = NULL;
   }
   ASSERT (f == NULL) ;
   return 0;
}
