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

         scol.h : gestion de l'environnement SCOL
           definitions
*/
// Modification history:
//$ FA(21/05/2001): Debugger integration. Add OFFSCNAME and OFFSCDEBUG
//$ FA(28/05/2001): Comment prototype of SCexeccomm0() which is equivalent to SCexeccomm()
//$ FA(18/06/2001): Debugger integration. Add OFFCHANID and OFFCHANUSER
//$ FA(23/07/2001): Add new OFFSCCHNIDX (channel index) root
//

#include "macros.h"


//$ FA(23/07/2001)
#define OFFSCCHNIDX  9  // channel index (by socket number)
//$ FA(08/11/2000)
#define OFFSCNAME    8  // machine name set with _setmachinename
#define OFFSCDEBUG   7  // debugger client agent settings
//
#define OFFSCBASE    6
#define OFFSCSYS     5
#define OFFSCSERVER  4
#define OFFSCOBJ     3
#define OFFSCRESS    2
#define OFFSCCHAN    1 
#define OFFSCCUR     0

#define SIZECHAN     4
#define OFFCHANFIFO  0
#define OFFCHANENV   1
//$ FA(08/11/2000)
#define OFFCHANUSER  2  // user channel name
//$ FA(23/11/2000)
#define OFFCHANID    3  // channel handler
//


#define SIZESRV      5
#define OFFSRVSCRIPT 0
#define OFFSRVSOCK   1
#define OFFSRVENV    2
#define OFFSRVPORT   3
#define OFFSRVTIME   4

extern int ScolSuper;
extern int ScolRights;
#define C_RIGHTS 1
#define S_RIGHTS 2
#define D_RIGHTS 4
#define M_RIGHTS 8
#define R_RIGHTS 16
#define W_RIGHTS 32
#define K_RIGHTS 64

/* initialisation de l'environnement */
int SCinit(mmachine m,int sizemem);

/* test de fin de machine */
int SCisdead(mmachine m);

/* encodage des droits dans une chaine de caracteres */
int SCendcodeRights(char *c,int i);

/* definition des droits a partir d'une chaine */
int SCdefineRights(char *c);

/* execution d'une commande sur le canal courant */
int SCexeccomm(mmachine m, char *comm);

/* execution d'une commande sur le canal courant
  le type P n'est pas autorise */
//int SCexeccomm0(mmachine m,char *comm);

/* creation d'un fichier core */
int SCcore(mmachine m);

/* creation d'une application ex-nihilo */
int SCcreateappli(mmachine m,char *corres,char *script);

/* ajout du canal courant a la liste des canaux */
int SCaddcanal(mmachine m);

/* suppression d'un canal de la liste des canaux */
int SCdelcanal(mmachine m, SEWORD chn);

/* ajout d'un serveur
   le serveur se trouve dans la pile */
int SCaddserver(mmachine m);

/* suppression d'un server de la liste des server */
int SCdelserver(mmachine m,int server);

/* retourne le nombre de canaux ouverts */
int SCnbcanal(mmachine m);

/* creation d'un canal serveur */
int SCaccept(mmachine m,int s);

/* positionne le canal courant par le numero de canal */
int SCchoosecanal(mmachine m, int canal);

/* positionne le canal courant par le numero de socket */
int SCselectcanal(mmachine m, int socket);

/* positionne le serveur courant par le numero de socket */
int SCgetserver(mmachine m, int socket);

/* cree un canal virtuel vers le serveur */
int SCselectserver(mmachine m, int socket);

/* lit un fichier jpeg */
char *stdloadJpg(char *name,int *w,int *h);

/* retourne le nombre de canaux non unplugged */
int SCgetnbsocket(mmachine m);

/* retourne le nombre de canaux unplugged */
int SCgetnbsocketu(mmachine m);
