/*     
      SCOL SYSTEM . Magma 1.0 . 1996 . Sylvain HUET

         scolsys.h : routines systeme de scol
              definitions
*/
// Modification history:
//$ FA(28/05/2001): Promoted to C/C++ interface file
//
//$ LB(20/06/2001): Add SCdefinesocksVersion and SCdefinesocksAuthentication function interfaces
//$ ER(27/07/2001): Add SCsetuser function interface
//$ FA(21/01/2002): Modify SCdestroychannel() function prototype
//

#include "scolPrerequisites.h"

#define FirstUnplugged -1024*16

#ifdef __cplusplus
extern "C" {
#endif

extern int (*LocalMessage)(char *buf);
extern int flagLicense;

//$BLG - v5.2.06: Add
extern char mydcmtspath2[MAX_PATH];	// Path to My Documents directory:  	documents/user/mydocuments/subdir/

//$BB add stand alone mode
extern char execpath2[MAX_PATH];	// Path to main Scol directory with /
extern char execpath[MAX_PATH];	// Path to main Scol directory
extern char execname[MAX_PATH];	// Path to main Scol directory and exe file
extern int bStandAlone;

/* execution d'un script SCOL (texte du script en niveau 0) */
int SCscript(mmachine m);

/* script channel : execution d'un script dans un canal frere */
int SCscriptc(mmachine m);

/* creation d'un canal a 3 arguments
 en 2 : corresp 
 en 1 : script
 en 0 : envapp */
int SCopenchannel3(mmachine m);

/* creation d'un canal a 2 arguments
 en 1 : corresp 
 en 0 : script */
int SCopenchannel(mmachine m);

/* destruction de la structure canal */
int SCdestroychannel(mmachine m, int t, int notify); //$ FA(21/01/2002)

/* fermeture du canal courant */
int SCclosechannel(mmachine m);

/* fermeture de l'application */
int SCclosemachine(mmachine m);

/* gestion de fermeture accidentelle du canal courant */
int SCchanneldown(mmachine m);

/* fermeture d'un canal de l'appli */
int SCkillchannel(mmachine m);

/* lit le nom du canal */
int SCchannelname(mmachine m);

/* lit l'adresse IP du canal */
int SCchannelIP(mmachine m);

/* lit le numero de port du canal */
int SCchannelport(mmachine m);

/* retourne le nom de l'hote */
int SChostname(mmachine m);

/* retourne l'adresse IP de l'hote */
int SChostIP(mmachine m);

/* definit l'index d'IP locale */
int SCsetLocalIPnumber(mmachine m);

/* retourne toutes les adresses IP de l'hote */
int SChostIPall(mmachine m);

/* DNS synchrone */
int SCgethostbyname(mmachine m);

/* DNS synchrone name -> IP */
int SCgetnamebyIP(mmachine m);

/* canal courant */
int SCchannel(mmachine m);

/* changement de canal courant */
int SCsetchannel(mmachine m);

/* nom du premiet package d'un environnement */
int SCenvfirstname(mmachine m);

/* lecture de l'environnement lie a un canal */
int SCenvchannel(mmachine m);

/* retirer un package d'un environnement */
int SCremovepkg(mmachine m);

/* modification de l'environnement d'un canal */
int SCsetenv(mmachine m);

/* definition du serveur
 en 1 : numero de port
 en 0 : script */
int SCsetserver(mmachine m);

/* fermeture du serveur */
int SCcloseserver(mmachine m);

/* definition d'un serveur udp
 en 2 : env
 en 1 : numero de port
 en 0 : script */
int SCsetUDPserver(mmachine m);

/* emission d'un message udp */
int SCsendudp(mmachine m);

/* emission d'un message udp en spécifiant la socket */
int SCsendudpchn(mmachine m);

/* recuperation de la socket d'un canal */
int SCsockofchannel(mmachine m);

/* recuperation de la socket d'un serveur */
int SCsockofserver(mmachine m);

/* recuperation de la duree d'un canal */
int SCchanneltime(mmachine m);

/* recuperation de la duree d'un canal */
int SCservertime(mmachine m);

/* emission d'un message */
int SCon(mmachine m);

/* emission d'un message vers activeX */
int SConX(mmachine m);

/* definition du canal ActiveX */
int SCsetX(mmachine m);

/* comptage des messages en attente dans la fifo d'un canal */
int SCwaitingfifo(mmachine m);

/* taille des messages en attente dans la fifo d'un canal */
int SCsizewaitingfifo(mmachine m);

/* reglage de la limite d'une la fifo */
int SCsetsizefifo(mmachine m);

/* lecture des droits de la machine */
int SCgetrights(mmachine m);

/* restriction des droits de la machine */
int SCsetrights(mmachine m);

/* lecture de la taille de la memoire */
int SCsizememory(mmachine m);

/* lecture de la taille disponible en memoire */
int SCfreememory(mmachine m);

//$BLG - v4.6a5: Add
/* Windows Memory Trimming */
int SCtrimmemory(mmachine m);

//$BLG - v5.11: Add
/* Scol CPU usage */
int SCgetcpuusage(mmachine m);

//$BLG - v5.2.06: Add
/* Number of current scol.exe running processes */
int SCgetScolProcesses(mmachine m);

//$BB
int countOtherScolProcesses();

//$LB (22/04/2002) : avoid negative value of tickcount
#if defined(VERSION_X11) || defined(VERSION_NOX)
extern int _globalTickcount;
#endif

/* lecture du nombre de millisecondes ecoulees */
int SCtickcount(mmachine m);

/* lancement d'une machine SCOL */
int SCnewmachine(mmachine m);

int SCnewmachineS(mmachine m);

/* definition de la socket life */
int SCsetsocklife(mmachine m);

/* affichage de la console */
int SCshowconsole(mmachine m);

/* effacement de la console */
int SChideconsole(mmachine m);

/* lancement d'un browser http */
int SCopenbrowserhttp(mmachine m);
int SCopenbrowserhttpP(mmachine m);
//$LB (11/10/2003)
int SCopenbrowserhttpM (mmachine m);

/* numero de version de la machine scol */
int SCversion(mmachine m);

/* nom de version de la machine scol */
int SCversionname(mmachine m);


//$BLG: v4.6a7 - Add
//Last compilation's date for the VM
int SCversiondate(mmachine m);


/* lecture d'une variable ressource */
int SCgetress(mmachine m);

/* ecriture d'une variable ressource */
int SCsetress(mmachine m);

/* lecture du fichier d'initialisation des ressources */
int SCloadressini(mmachine m);

//$BLG - v5.2.06: Add
// Checks if usmress.ini file exists or not, tries to create it if not
int SCcheckressini(void);

/* lecture du fichier d'initialisation des ressources */
int SCsaveressini(mmachine m);

/* donne a un canal tous les objets d'un autre */
int SCchangeChn(mmachine m);

/* lecture du fichier usm.ini */
//$BLG - v5.2.06: Modif (Loads usmuser.ini file)
int SCloadusmini(mmachine m);

//$BLG - v5.2.06: Add
// Checks if usmuser.ini file exists or not, tries to create it if not
int SCcheckuserini(void);

/* sauvegarde du fichier usm.ini */
int SCsaveusmini(mmachine m);

/* transfer d'un fichier */
int SCcopyFile(mmachine m);

/* definition du proxy */
int SCdefineproxy(mmachine m);

/* definition du proxy socks*/
int SCdefinesocks(mmachine m);

//$LB : add socks protocole define functions

/* définition de la version du protocole socks */
int SCdefinesocksVersion (mmachine m);

/* définition du besoin d'authentication pour le protocole socks */
int SCdefinesocksAuthentication (mmachine m);

//$ ER(27/07/2001) : setuser function
int SCsetuser(mmachine m);

/* proxy par defaut */
int SCdefaultproxy(mmachine m);

/* ajout d'un chemin à la partition en cours */
int SCreduceCapacity(mmachine m);

/* exe manager */
struct SysExe
{
  char categ[128];
  char name[128];
  char path[1024];
  struct SysExe *prev;
  struct SysExe *next;
};
typedef struct SysExe *sysexe;
int SCexeInit();
int SCexeEnd();
sysexe SCexeSearch(char *categ, char *name);
int SCexeAdd(int pos, char *categ, char *name, char *path);
int SCexeDel(char *categ, char *name);
int SCstartExe(mmachine m);
int SCrefreshExe(mmachine m);
int SCgetExe(mmachine m);
int SCaddExe(mmachine m);
int SCdelExe(mmachine m);

int SCmix8(mmachine m);
int SCmix16(mmachine m);

#ifdef __cplusplus
}
#endif

