/*     
      SCOL ENVIRONMENT . Magma 1.0 . 1996 . Sylvain HUET

         fifo.h : gestion des fifo de l'environnement SCOL
            definitions
*/

/* offset structure fifo */
#define SIZE_FIFO  12
#define FIFOSOCK  0
#define FIFONAME  1
#define FIFOOUT   2
#define FIFOCOUT  3
#define FIFOSTOUT 4
#define FIFOIN    5
#define FIFOCIN   6
#define FIFOSZIN  7
#define FIFOSTIN  8
#define FIFOTIME  9
#define FIFOMAX   10
#define FIFOCAPA  11

/* creation d'un bloc fifo vide */
int SCmakefifo(mmachine m);

/* initialisation d'une socket proxy associee a un canal
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCsetproxy(mmachine m, int channel);

/* initialisation d'une socket udp
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCsetudp(mmachine m, int channel);

/* retourne 1 si le canal est une socket udp
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCtestudp(mmachine m, int channel);

/* lecture du numero de socket associe a un serveur
   (server est un pointeur vers le serveur, avec bit 0 a 1) */
int SCgetsrvsocket(mmachine m, int server);

/* lecture du numero de socket associe a un canal
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCgetsocket(mmachine m, int channel);

/* reglage du numero de socket associe a un canal
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCsetsocket(mmachine m, int channel, int socket);

/* lecturere du nom de socket d'un canal,
   le nom est mis dans la pile */
int SCgetsockname(mmachine m,int channel);

/* reglagle du nom de socket d'un canal,
   le nom est dans la pile */
int SCsetsockname(mmachine m,int channel);

/* lecture du temps de vie en secondes d'un canal
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCgetchanneltime(mmachine m, int channel);

/* lecture du temps de vie en secondes d'un serveur
   (channel est un pointeur vers le canal, avec bit 0 a 1) */
int SCgetservertime(mmachine m, int srv);

/* routine interceptant un message "__checksign" */
int SCchecksign(mmachine m);

/* traitement d'un message Readable
  (on suppose que le canal courant a ete regle) 
  (le message recu est dans le buffer avec la taille indiquee)
  ne retourne rien dans la pile */
int SCread(mmachine m,char *buf,int size,int ip,int port);

/* traitement d'un message Writable
  (on suppose que le canal courant a ete regle)
  (ne retourne rien dans la pile)
   retourne 1 si le canal est rompu */
int SCwrite(mmachine m);

/* envoyer un message de type Comm (present dans la pile) dans la fifo
  (on suppose que le canal courant a ete regle) 
  retourne 1 si le canal est rompu */
int SCsendpile(mmachine m);
